X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_em%2Fsynchro_1.c;h=058c79e3caedb4ebd3e7d40768d1bc0025300f9a;hb=d14ff3d04c44d90b4dc151fd7774946e20da0152;hp=c5b2c456b4910ed38eae9452f42b29d4f17d1edb;hpb=1e4a6b46371858fdb85052eec3e7143732ff91b5;p=rocksndiamonds.git diff --git a/src/game_em/synchro_1.c b/src/game_em/synchro_1.c index c5b2c456..058c79e3 100644 --- a/src/game_em/synchro_1.c +++ b/src/game_em/synchro_1.c @@ -18,7 +18,24 @@ static boolean player_killed(struct PLAYER *); void synchro_1(void) { - /* must test for death and actually kill separately */ +#if 1 + + int start_check_nr; + int i; + + /* must test for death and actually kill separately */ + + for (i = 0; i < MAX_PLAYERS; i++) + { + boolean ply_kill = player_killed(&ply[i]); + + if (ply[i].alive && ply_kill) + kill_player(&ply[i]); + } + +#else + + /* must test for death and actually kill separately */ boolean ply1_kill = player_killed(&ply1); boolean ply2_kill = player_killed(&ply2); @@ -27,10 +44,51 @@ void synchro_1(void) if (ply2.alive && ply2_kill) kill_player(&ply2); +#endif + #if 0 ply1.alive = 1; /* debugging */ #endif +#if 1 + + for (i = 0; i < MAX_PLAYERS; i++) + { + ply[i].oldx = ply[i].x; + ply[i].oldy = ply[i].y; + ply[i].anim = SPR_still; + } + + start_check_nr = (RandomEM & 128 ? 0 : 1) * 2 + (RandomEM & 256 ? 0 : 1); + + for (i = 0; i < MAX_PLAYERS; i++) + { + int check_nr = (start_check_nr + i) % MAX_PLAYERS; + + if (ply[check_nr].alive) + check_player(&ply[check_nr]); + } + + for (i = 0; i < MAX_PLAYERS; i++) + { + if (!ply[i].alive) + continue; + + if (Cave[ply[i].oldy][ply[i].oldx] == Zplayer) + { + Cave[ply[i].oldy][ply[i].oldx] = Xblank; + Next[ply[i].oldy][ply[i].oldx] = Xblank; + } + + if (Cave[ply[i].y][ply[i].x] == Xblank) + { + Cave[ply[i].y][ply[i].x] = Zplayer; + Next[ply[i].y][ply[i].x] = Zplayer; + } + } + +#else + ply1.oldx = ply1.x; ply1.oldy = ply1.y; ply1.anim = SPR_still; @@ -38,7 +96,7 @@ void synchro_1(void) ply2.oldy = ply2.y; ply2.anim = SPR_still; - if (Random & 256) + if (RandomEM & 256) { if (ply1.alive) check_player(&ply1); if (ply2.alive) check_player(&ply2); @@ -78,12 +136,18 @@ void synchro_1(void) Next[ply2.y][ply2.x] = Zplayer; } } + +#endif } static boolean player_killed(struct PLAYER *ply) { - register unsigned int x = ply->x; - register unsigned int y = ply->y; + int x = ply->x; + int y = ply->y; + +#if 0 + printf("::: %d: %d, %d\n", ply->num, x, y); +#endif if (!ply->alive) return FALSE; @@ -208,8 +272,8 @@ static boolean player_killed(struct PLAYER *ply) static void kill_player(struct PLAYER *ply) { - register unsigned int x = ply->x; - register unsigned int y = ply->y; + int x = ply->x; + int y = ply->y; ply->alive = 0; @@ -373,11 +437,11 @@ static void kill_player(struct PLAYER *ply) static void check_player(struct PLAYER *ply) { - unsigned int oldx = ply->x; - unsigned int oldy = ply->y; - register unsigned int x = oldx; - register unsigned int y = oldy; - unsigned int anim = 0; + int oldx = ply->x; + int oldy = ply->y; + int x = oldx; + int y = oldy; + int anim = 0; int dx = 0, dy = 0; #if 0 @@ -489,7 +553,7 @@ static void check_player(struct PLAYER *ply) ply->dynamite_cnt = 0; } - Random += 7; /* be a bit more random if the player doesn't move */ + RandomEM += 7; /* be a bit more random if the player doesn't move */ return; } @@ -531,10 +595,10 @@ static void check_player(struct PLAYER *ply) static boolean player_digfield(struct PLAYER *ply, int dx, int dy) { int anim = (dx < 0 ? 3 : dx > 0 ? 1 : dy < 0 ? 0 : dy > 0 ? 2 : 2); - unsigned int oldx = ply->x; - unsigned int oldy = ply->y; - register unsigned int x = oldx + dx; - register unsigned int y = oldy + dy; + int oldx = ply->x; + int oldy = ply->y; + int x = oldx + dx; + int y = oldy + dy; boolean result = TRUE; if (!dx && !dy) /* no direction specified */