Author: pdewacht-guest
Date: 2009-05-07 21:43:28 +0000 (Thu, 07 May 2009)
New Revision: 9680

Added:
   packages/trunk/alex4/debian/patches/save-some-cpu-cycles.patch
Removed:
   packages/trunk/alex4/debian/patches/level-select-bug.patch
Modified:
   packages/trunk/alex4/debian/changelog
   packages/trunk/alex4/debian/patches/allegro-4.2.patch
   packages/trunk/alex4/debian/patches/series
Log:
alex4: Added save-some-cpu-cycles.patch: fixes the game's 100% CPU usage habit.
Supersedes level-select-bug.patch.


Modified: packages/trunk/alex4/debian/changelog
===================================================================
--- packages/trunk/alex4/debian/changelog       2009-05-07 04:41:47 UTC (rev 
9679)
+++ packages/trunk/alex4/debian/changelog       2009-05-07 21:43:28 UTC (rev 
9680)
@@ -4,11 +4,13 @@
   * Add a watch file explaining the upstream status
 
   [ Peter De Wachter ]
-  * Fixed a bug that the made level selection screen unresponsive on
-    some systems.
   * Honor the HOME environment variable. (Closes: #507950) 
+  * Applied a patch to bring down the game's CPU usage to a more reasonable
+    level. This limits the frame rate to 50Hz (the speed of the game logic).
+    This also fixes a bug that made the level selection screen unresponsive
+    on some systems.
 
- -- Peter De Wachter <[email protected]>  Tue, 05 May 2009 02:08:14 +0200
+ -- Peter De Wachter <[email protected]>  Thu, 07 May 2009 23:35:03 +0200
 
 alex4 (1.1-2) unstable; urgency=low
 

Modified: packages/trunk/alex4/debian/patches/allegro-4.2.patch
===================================================================
--- packages/trunk/alex4/debian/patches/allegro-4.2.patch       2009-05-07 
04:41:47 UTC (rev 9679)
+++ packages/trunk/alex4/debian/patches/allegro-4.2.patch       2009-05-07 
21:43:28 UTC (rev 9680)
@@ -1,7 +1,5 @@
-Index: alex4-1.1/src/edit.c
-===================================================================
---- alex4-1.1.orig/src/edit.c  2008-01-23 00:01:05.000000000 +0100
-+++ alex4-1.1/src/edit.c       2008-01-23 00:48:53.000000000 +0100
+--- a/src/edit.c
++++ b/src/edit.c
 @@ -69,8 +69,8 @@
                }
        
@@ -47,10 +45,8 @@
        }
  
        if (edit_mode != EDIT_MODE_STATS) {
-Index: alex4-1.1/src/hisc.c
-===================================================================
---- alex4-1.1.orig/src/hisc.c  2008-01-23 00:48:53.000000000 +0100
-+++ alex4-1.1/src/hisc.c       2008-01-23 00:48:53.000000000 +0100
+--- a/src/hisc.c
++++ b/src/hisc.c
 @@ -153,9 +153,9 @@
  
  // draws a single hisc post
@@ -64,19 +60,8 @@
  }
  
  // draws the entire table
-Index: alex4-1.1/src/main.c
-===================================================================
---- alex4-1.1.orig/src/main.c  2008-01-23 00:48:53.000000000 +0100
-+++ alex4-1.1/src/main.c       2008-01-23 00:48:53.000000000 +0100
-@@ -322,7 +322,7 @@
-               cycle_count = 0;
-               if (got_sound && duh_player != NULL) al_poll_duh(duh_player);
-               i ++;
--              while(!cycle_count)     yield_timeslice();
-+              while(!cycle_count)     rest(0);
-       }
- }
- 
+--- a/src/main.c
++++ b/src/main.c
 @@ -496,15 +496,15 @@
  
        rectfill(bmp, 0, y, 159, y+9, 1);
@@ -149,44 +134,8 @@
  }
  
  
-@@ -1153,7 +1151,7 @@
-               }
+@@ -1451,12 +1449,12 @@
  
-               // let other processes play
--              yield_timeslice();
-+              rest(0);
- 
-               // draw stuff
-               draw_frame(swap_screen, 1);
-@@ -1195,7 +1193,7 @@
-               }
- 
-               // let other processes play
--              yield_timeslice();
-+              rest(0);
- 
-               // draw stuff
-               draw_frame(swap_screen, 1);
-@@ -1257,7 +1255,7 @@
-               }
- 
-               // let other processes play
--              yield_timeslice();
-+              rest(0);
- 
-               // draw stuff
-               draw_custom_ending(swap_screen);
-@@ -1373,7 +1371,7 @@
-               }
- 
-               // let other processes play
--              yield_timeslice();
-+              rest(0);
- 
-               // draw stuff
-               blit(swap2, swap_screen, 0, 0, 0, 0, 160, 120);
-@@ -1447,12 +1445,12 @@
- 
        sprintf(buf, "%s %d %s", (level > min ? "<" : " "), level, (level < max 
? ">" : " "));
        clear_bitmap(stuff);
 -      textout_centre(stuff, data[THE_FONT].dat, buf, stuff->w/2 + 1, 1, 2);
@@ -202,26 +151,8 @@
  
        if (options.one_hundred) {
                if (game_count & 32 || game_count & 16) draw_sprite(bmp, 
data[SHIP100].dat, xpos, 2);
-@@ -2343,7 +2341,7 @@
-               if (is_fire(&ctrl) || is_jump(&ctrl)) done = 1;
-               if (keypressed()) done = 1;
-               if (key[KEY_ESC]) done = -1;
--              yield_timeslice();
-+              rest(0);
-       }
+@@ -2532,20 +2530,20 @@
  
-       if (done == -1) {
-@@ -2493,7 +2491,7 @@
-               }
-               
-               // let other processes play
--              yield_timeslice();
-+              rest(0);
- 
-               // draw 
-               frame_count ++;
-@@ -2524,20 +2522,20 @@
- 
        y = 60;
        x = 50;
 -      textout(bmp, data[THE_FONT].dat, start_string, x+1, y+1, 1);
@@ -249,7 +180,7 @@
  
        draw_sprite(bmp, data[POINTER].dat, x - 25 + fixtoi(3 * 
fcos(itofix(tick << 2))), 44 + menu_choice * step);
  }
-@@ -2589,7 +2587,7 @@
+@@ -2597,7 +2595,7 @@
          string[i] = letters[current_letter];
                string[i + 1] = '\0';
          blit(block, bmp, 0, 0, pos_x - 1, pos_y - 1, block->w, block->h);
@@ -258,19 +189,8 @@
                blit_to_screen(bmp);
  
                if (pad != NULL) {
-@@ -2775,7 +2773,7 @@
-               }
- 
-               // let other processes play
--              yield_timeslice();
-+              rest(0);
- 
-               // draw 
-               frame_count ++;
-Index: alex4-1.1/src/map.c
-===================================================================
---- alex4-1.1.orig/src/map.c   2008-01-23 00:48:53.000000000 +0100
-+++ alex4-1.1/src/map.c        2008-01-23 00:49:56.000000000 +0100
+--- a/src/map.c
++++ b/src/map.c
 @@ -280,7 +280,7 @@
        
        if (sm == NULL) return;
@@ -306,10 +226,8 @@
        
  }
  
-Index: alex4-1.1/src/script.c
-===================================================================
---- alex4-1.1.orig/src/script.c        2008-01-23 00:01:05.000000000 +0100
-+++ alex4-1.1/src/script.c     2008-01-23 00:48:53.000000000 +0100
+--- a/src/script.c
++++ b/src/script.c
 @@ -89,7 +89,7 @@
  
        // draw text
@@ -319,28 +237,8 @@
        }
  }
  
-@@ -103,7 +103,7 @@
-               poll_music();
-               count ++;
-               while(!cycle_count);
--              yield_timeslice();
-+              rest(0);
-       }
-     if (key[KEY_ESC]) script_done = -1;
- }
-@@ -521,7 +521,7 @@
-               }
- 
-               // let other processes play
--              yield_timeslice();
-+              rest(0);
- 
-               // blit buffer to swap buffer
-               blit(buffer, swap_buffer, 0, 0, 0, 0, 160, 120);
-Index: alex4-1.1/src/scroller.c
-===================================================================
---- alex4-1.1.orig/src/scroller.c      2008-01-23 00:01:05.000000000 +0100
-+++ alex4-1.1/src/scroller.c   2008-01-23 00:50:53.000000000 +0100
+--- a/src/scroller.c
++++ b/src/scroller.c
 @@ -65,22 +65,22 @@
        if (sc->horizontal) {
                if (sc->offset < -sc->length) return;
@@ -371,10 +269,8 @@
        }
  }
  
-Index: alex4-1.1/src/shooter.c
-===================================================================
---- alex4-1.1.orig/src/shooter.c       2008-01-23 00:48:53.000000000 +0100
-+++ alex4-1.1/src/shooter.c    2008-01-23 00:48:53.000000000 +0100
+--- a/src/shooter.c
++++ b/src/shooter.c
 @@ -341,7 +341,7 @@
                if (!o->hit || o->type == SO_PLAYER_BULLET)
                        draw_sprite(bmp, s_data[o->image].dat, (int)o->x, 
(int)o->y);
@@ -395,12 +291,3 @@
  }
  
  
-@@ -1268,7 +1268,7 @@
-               
-               
-               // let other processes play
--              yield_timeslice();
-+              rest(0);
-               
-               // draw 
-               frame_count ++;

Deleted: packages/trunk/alex4/debian/patches/level-select-bug.patch
===================================================================
--- packages/trunk/alex4/debian/patches/level-select-bug.patch  2009-05-07 
04:41:47 UTC (rev 9679)
+++ packages/trunk/alex4/debian/patches/level-select-bug.patch  2009-05-07 
21:43:28 UTC (rev 9680)
@@ -1,12 +0,0 @@
---- a/src/main.c
-+++ b/src/main.c
-@@ -1533,6 +1533,9 @@
-                       cycle_count --;
-               }
- 
-+              // let other processes play
-+              rest(0);
-+
-               // draw stuff
-               if (start_level >= 0) {
-                       draw_select_starting_level(swap_screen, start_level, 1, 
options.max_levels + 1);

Added: packages/trunk/alex4/debian/patches/save-some-cpu-cycles.patch
===================================================================
--- packages/trunk/alex4/debian/patches/save-some-cpu-cycles.patch              
                (rev 0)
+++ packages/trunk/alex4/debian/patches/save-some-cpu-cycles.patch      
2009-05-07 21:43:28 UTC (rev 9680)
@@ -0,0 +1,253 @@
+Fix the 100% CPU usage of alex4. We can't do this properly (the game
+is written with a DOS mindset), but we can do two things easily:
+ - Put a rest() in every busy loop.
+ - Limit the frame rate to 50Hz (the speed of the game logic).
+
+For future reference, the counters used by the game:
+game_count  = increments at 50Hz
+cycle_count = increments at 50Hz, but is reset whenever the game feels like it
+frame_count = number of frames rendered, reset every second
+logic_count = number of game loops processed, reset every second
+
+--- a/src/main.c
++++ b/src/main.c
+@@ -280,7 +280,7 @@
+               if (keypressed()) kp = 1;
+               if (is_fire(&ctrl) || is_jump(&ctrl)) kp = 1;
+               if (got_sound && dp != NULL) al_poll_duh(dp);
+-              while(!cycle_count);
++                rest(20);
+       }
+ }
+ 
+@@ -322,7 +322,7 @@
+               cycle_count = 0;
+               if (got_sound && duh_player != NULL) al_poll_duh(duh_player);
+               i ++;
+-              while(!cycle_count)     yield_timeslice();
++              while(!cycle_count)     rest(1);
+       }
+ }
+ 
+@@ -1127,6 +1127,10 @@
+ 
+       cycle_count = 0;
+       while(mode != 3) {
++              // Let other processes play
++              while(cycle_count == 0)
++                      rest(1);
++
+               // do logic
+               while(cycle_count > 0) {
+                       logic_count ++;
+@@ -1152,9 +1156,6 @@
+                       cycle_count --;
+               }
+ 
+-              // let other processes play
+-              yield_timeslice();
+-
+               // draw stuff
+               draw_frame(swap_screen, 1);
+               draw_sprite(swap_screen, go, x, 35);
+@@ -1174,6 +1175,10 @@
+ 
+       cycle_count = 0;
+       while(mode != 3) {
++              // let other processes play
++              while(cycle_count == 0)
++                      rest(1);
++
+               // do logic
+               while(cycle_count > 0) {
+                       logic_count ++;
+@@ -1194,9 +1199,6 @@
+                       cycle_count --;
+               }
+ 
+-              // let other processes play
+-              yield_timeslice();
+-
+               // draw stuff
+               draw_frame(swap_screen, 1);
+               draw_sprite(swap_screen, go, x, 35);
+@@ -1237,6 +1239,10 @@
+ 
+       cycle_count = 0;
+       while(!done) {
++              // let other processes play
++              while(cycle_count == 0)
++                      rest(1);
++
+               // do logic
+               while(cycle_count > 0) {
+                       logic_count ++;
+@@ -1256,9 +1262,6 @@
+                       cycle_count --;
+               }
+ 
+-              // let other processes play
+-              yield_timeslice();
+-
+               // draw stuff
+               draw_custom_ending(swap_screen);
+               blit_to_screen(swap_screen);
+@@ -1334,6 +1337,10 @@
+       clear_keybuf();
+       cycle_count = 0;
+       while(mode != 3) {
++              // let other processes play
++              while(cycle_count == 0)
++                      rest(1);
++
+               // do logic
+               while(cycle_count > 0) {
+                       logic_count ++;
+@@ -1372,9 +1379,6 @@
+                       cycle_count --;
+               }
+ 
+-              // let other processes play
+-              yield_timeslice();
+-
+               // draw stuff
+               blit(swap2, swap_screen, 0, 0, 0, 0, 160, 120);
+               draw_status_bar(swap_screen, 110);
+@@ -1488,6 +1492,10 @@
+ 
+       cycle_count = 0;
+       while(!done) {
++              // let other processes play
++              while(cycle_count == 0)
++                      rest(1);
++
+               // do logic
+               while(cycle_count > 0) {
+                       logic_count ++;
+@@ -2343,7 +2351,7 @@
+               if (is_fire(&ctrl) || is_jump(&ctrl)) done = 1;
+               if (keypressed()) done = 1;
+               if (key[KEY_ESC]) done = -1;
+-              yield_timeslice();
++              rest(20);
+       }
+ 
+       if (done == -1) {
+@@ -2369,6 +2377,9 @@
+       game_status = GS_OK;
+       cycle_count = 0;
+       while(game_status == GS_OK) {
++              // let other processes play
++              while(cycle_count == 0)
++                      rest(1);
+ 
+               //  do logic
+               while(cycle_count > 0) {
+@@ -2492,9 +2503,6 @@
+                       cycle_count --;
+               }
+               
+-              // let other processes play
+-              yield_timeslice();
+-
+               // draw 
+               frame_count ++;
+               draw_frame(swap_screen, 1);
+@@ -2658,7 +2666,7 @@
+ 
+               }
+ 
+-              while(!cycle_count);
++              while(!cycle_count) rest(1);
+ 
+     }
+ }
+@@ -2693,6 +2701,9 @@
+       clear_keybuf();
+       cycle_count = 0;
+       while(status == GS_OK) {
++              // let other processes play
++              while(cycle_count == 0)
++                      rest(1);
+ 
+               //  do logic
+               while(cycle_count > 0) {
+@@ -2774,9 +2785,6 @@
+                       cycle_count --;
+               }
+ 
+-              // let other processes play
+-              yield_timeslice();
+-
+               // draw 
+               frame_count ++;
+               draw_title(swap_screen, tick);
+@@ -3021,7 +3029,8 @@
+               blit_to_screen(swap_screen);
+               fade_in_pal(100);
+               cycle_count = 0;
+-              while(!key[KEY_ESC] && cycle_count < 200);
++              while(!key[KEY_ESC] && cycle_count < 200)
++                      rest(50);
+               fade_out_pal(100);
+               clear(screen);
+       }
+--- a/src/script.c
++++ b/src/script.c
+@@ -102,8 +102,8 @@
+               cycle_count = 0;
+               poll_music();
+               count ++;
+-              while(!cycle_count);
+-              yield_timeslice();
++              while(!cycle_count)
++                      rest(20);
+       }
+     if (key[KEY_ESC]) script_done = -1;
+ }
+@@ -498,6 +498,10 @@
+       cycle_count = 0;
+       while(loops && !script_done) {
+ 
++              // let other processes play
++              while(cycle_count == 0)
++                      rest(1);
++
+               while(cycle_count > 0 && loops && !script_done) {
+                       logic_count ++;
+ 
+@@ -520,9 +524,6 @@
+                       cycle_count --;
+               }
+ 
+-              // let other processes play
+-              yield_timeslice();
+-
+               // blit buffer to swap buffer
+               blit(buffer, swap_buffer, 0, 0, 0, 0, 160, 120);
+               
+--- a/src/shooter.c
++++ b/src/shooter.c
+@@ -1131,7 +1131,10 @@
+       game_count = 0;
+       s_activate_sign(0, -1);
+       while(playing || s_sign.alive) {
+-              
++              // let other processes play
++              while(cycle_count == 0)
++                      rest(1);
++
+               //  do logic
+               while(cycle_count > 0) {
+                       logic_count ++;
+@@ -1266,10 +1269,6 @@
+                       cycle_count --;
+               }
+               
+-              
+-              // let other processes play
+-              yield_timeslice();
+-              
+               // draw 
+               frame_count ++;
+               s_draw_frame(s_buffer);

Modified: packages/trunk/alex4/debian/patches/series
===================================================================
--- packages/trunk/alex4/debian/patches/series  2009-05-07 04:41:47 UTC (rev 
9679)
+++ packages/trunk/alex4/debian/patches/series  2009-05-07 21:43:28 UTC (rev 
9680)
@@ -1,5 +1,6 @@
-from-fedora.patch
+unix-port.patch
 dot-files-endian-clean.patch
+save-some-cpu-cycles.patch
 allegro-4.2.patch
 fsf-address.patch
-level-select-bug.patch
+display-fps.patch


_______________________________________________
Pkg-games-commits mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/pkg-games-commits

Reply via email to