--- Begin Message ---
Package: blobwars
Version: 1.05-2
Severity: normal
Tags: patch
Blobwars uses a busy-loop for timing purposes. This makes it use 100%
CPU all the time, even when it is not doing anything useful. The
attached patch removes the busy-loops and replaces them with
calls to SDL_Delay().
-- System Information:
Debian Release: testing/unstable
APT prefers unstable
APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Shell: /bin/sh linked to /bin/bash
Kernel: Linux 2.6.16.11
Locale: LANG=nl_NL.UTF-8, LC_CTYPE=nl_NL.UTF-8 (charmap=UTF-8)
Versions of packages blobwars depends on:
ii libc6 2.3.6-7 GNU C Library: Shared libraries
ii libgcc1 1:4.1.0-1 GCC support library
ii libsdl-image1.2 1.2.4-1 image loading library for Simple D
ii libsdl-mixer1.2 1.2.6-1.1 mixer library for Simple DirectMed
ii libsdl-ttf2.0-0 2.0.7-1 ttf library for Simple DirectMedia
ii libsdl1.2debian 1.2.9-5+b1 Simple DirectMedia Layer
ii libstdc++6 4.1.0-1 The GNU Standard C++ Library v3
ii zlib1g 1:1.2.3-11 compression library - runtime
blobwars recommends no packages.
-- no debconf information
--- blobwars-1.04.orig/src/mapEditor.cpp
+++ blobwars-1.04/src/mapEditor.cpp
@@ -115,6 +115,8 @@
graphics.drawRect(*mapX, *mapY, 1, 15, graphics.green,
graphics.screen);
graphics.drawRect(*mapX, *mapY + 15, 20, 1, graphics.green,
graphics.screen);
graphics.drawRect(*mapX + 20, *mapY, 1, 15, graphics.green,
graphics.screen);
+
+ SDL_Delay(16);
}
engine.keyState[SDLK_SPACE] = 0;
@@ -632,7 +634,7 @@
graphics.drawString(string, 320, r.y + 5, true,
graphics.screen);
- while (SDL_GetTicks() < frameLimit){}
+ SDL_Delay(frameLimit - SDL_GetTicks() >? 0 <? 16);
frameLimit = SDL_GetTicks() + 16;
}
--- blobwars-1.04.orig/src/mission.cpp
+++ blobwars-1.04/src/mission.cpp
@@ -357,7 +357,7 @@
sprintf(message, "%s - %.2d:%.2d:%.2d", "Mission Time",
game.currentMissionHours, game.currentMissionMinutes,
game.currentMissionSeconds);
graphics.drawString(message, 320, 420, true, graphics.screen);
- while (SDL_GetTicks() < frameLimit){}
+ SDL_Delay(frameLimit - SDL_GetTicks() >? 0 <? 16);
frameLimit = SDL_GetTicks() + 16;
}
--- blobwars-1.04.orig/src/map.cpp
+++ blobwars-1.04/src/map.cpp
@@ -434,6 +434,8 @@
break;
}
}
+
+ SDL_Delay(16);
}
blipList.clear();
--- blobwars-1.04.orig/src/CGraphics.cpp
+++ blobwars-1.04/src/CGraphics.cpp
@@ -195,6 +195,8 @@
{
break;
}
+
+ SDL_Delay(16);
}
}
@@ -1039,6 +1041,7 @@
engine->getInput();
if (engine->keyState[SDLK_ESCAPE])
exit(1);
+ SDL_Delay(16);
}
}
@@ -1087,6 +1090,7 @@
{
exit(1);
}
+ SDL_Delay(16);
}
}
@@ -1119,5 +1123,7 @@
{
exit(0);
}
+
+ SDL_Delay(16);
}
}
--- blobwars-1.04.orig/src/loadSave.cpp
+++ blobwars-1.04/src/loadSave.cpp
@@ -302,6 +302,8 @@
{
break;
}
+
+ SDL_Delay(16);
}
SDL_FillRect(graphics.screen, NULL, graphics.black);
--- blobwars-1.04.orig/src/title.cpp
+++ blobwars-1.04/src/title.cpp
@@ -401,7 +401,7 @@
break;
}
- while (SDL_GetTicks() < (frameLimit)){}
+ SDL_Delay(frameLimit - SDL_GetTicks() >? 0 <? 16);
frameLimit = SDL_GetTicks() + 16;
}
@@ -545,6 +545,8 @@
graphics.drawRect(0, 450, 640, 30, graphics.black,
graphics.screen);
graphics.drawRect(0, 0, 640, 30, graphics.black,
graphics.screen);
}
+
+ SDL_Delay(16);
}
graphics.delay(12000);
--- blobwars-1.04.orig/src/intro.cpp
+++ blobwars-1.04/src/intro.cpp
@@ -81,7 +81,7 @@
if (SDL_GetTicks() > time)
break;
- while (SDL_GetTicks() < frameLimit){}
+ SDL_Delay(frameLimit - SDL_GetTicks() >? 0 <? 16);
frameLimit = SDL_GetTicks() + 16;
}
@@ -110,6 +110,7 @@
engine.getInput();
if (engine.keyState[SDLK_ESCAPE])
break;
+ SDL_Delay(16);
}
}
--- blobwars-1.04.orig/src/graphics.cpp
+++ blobwars-1.04/src/graphics.cpp
@@ -62,7 +62,7 @@
}
}
- while (SDL_GetTicks() < frameLimit){}
+ SDL_Delay(frameLimit - SDL_GetTicks() >? 0 <? 16);
frameLimit = SDL_GetTicks() + 16;
}
--- blobwars-1.04.orig/src/game.cpp
+++ blobwars-1.04/src/game.cpp
@@ -227,6 +227,8 @@
graphics.delay(500);
break;
}
+
+ SDL_Delay(16);
}
}
@@ -346,7 +348,7 @@
if ((cont) || (quit))
break;
- while (SDL_GetTicks() < frameLimit){}
+ SDL_Delay(frameLimit - SDL_GetTicks() >? 0 <? 16);
frameLimit = SDL_GetTicks() + 16;
}
@@ -498,7 +500,7 @@
graphics.blit(panelBack, 320, 220, graphics.screen, true);
graphics.blit(panel, 320, 220, graphics.screen, true);
- while (SDL_GetTicks() < frameLimit){}
+ SDL_Delay(frameLimit - SDL_GetTicks() >? 0 <? 16);
frameLimit = SDL_GetTicks() + 16;
if (engine.userAccepts())
@@ -526,7 +528,7 @@
while (beamInTime > 0)
{
- while (SDL_GetTicks() < frameLimit){}
+ SDL_Delay(frameLimit - SDL_GetTicks() >? 0 <? 16);
frameLimit = SDL_GetTicks() + 16;
doGameStuff();
@@ -774,6 +776,8 @@
{
audio.resume();
}
+
+ SDL_Delay(16);
}
if ((engine.keyState[SDLK_F3]) && (engine.cheatSkipLevel))
@@ -789,7 +793,7 @@
}
#endif
- while (SDL_GetTicks() < (frameLimit)){}
+ SDL_Delay(frameLimit - SDL_GetTicks() >? 0 <? 16);
frameLimit = SDL_GetTicks() + 16;
if (game.missionOverReason == MIS_GAMECOMPLETE)
--- blobwars-1.04.orig/src/hub.cpp
+++ blobwars-1.04/src/hub.cpp
@@ -785,7 +785,7 @@
graphics.blit(cursor->getCurrentFrame(), engine.getMouseX(),
engine.getMouseY(), graphics.screen, true);
- while (SDL_GetTicks() < frameLimit){}
+ SDL_Delay(frameLimit - SDL_GetTicks() >? 0 <? 16);
frameLimit = SDL_GetTicks() + 16;
}
--- blobwars-1.04.orig/src/init.cpp
+++ blobwars-1.04/src/init.cpp
@@ -81,6 +81,7 @@
engine.getInput();
if (engine.keyState[SDLK_SPACE])
break;
+ SDL_Delay(16);
}
SDL_FillRect(graphics.screen, NULL, graphics.black);
--- blobwars-1.04.orig/src/options.cpp
+++ blobwars-1.04/src/options.cpp
@@ -80,6 +80,8 @@
engine.flushInput();
done = 1;
}
+
+ SDL_Delay(16);
}
audio.playMenuSound(2);
@@ -165,6 +167,8 @@
engine.flushInput();
done = 1;
}
+
+ SDL_Delay(16);
}
engine.allowJoypad = true;
@@ -243,6 +247,8 @@
engine.flushInput();
done = 1;
}
+
+ SDL_Delay(16);
}
engine.allowJoypad = true;
@@ -419,6 +425,8 @@
engine.flushInput();
done = 1;
}
+
+ SDL_Delay(16);
}
--- blobwars-1.04.orig/src/cutscene.cpp
+++ blobwars-1.04/src/cutscene.cpp
@@ -199,6 +199,8 @@
break;
}
}
+
+ SDL_Delay(16);
}
SDL_FillRect(graphics.screen, NULL, graphics.black);
--- End Message ---