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

