X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_em%2Fsynchro_1.c;h=124751d0ad312087bbf805251937df00481ef4eb;hb=4761c712e043542d6bfd4ce58501ee6c6af68bd3;hp=3f7643fba41f2c28851dd27673c0c0d8a5c30293;hpb=ec36fe263402351ac67b70400f11096a044365fe;p=rocksndiamonds.git diff --git a/src/game_em/synchro_1.c b/src/game_em/synchro_1.c index 3f7643fb..124751d0 100644 --- a/src/game_em/synchro_1.c +++ b/src/game_em/synchro_1.c @@ -11,21 +11,21 @@ #include "display.h" -static void player(struct PLAYER *); +static void check_player(struct PLAYER *); +static void kill_player(struct PLAYER *); static boolean player_digfield(struct PLAYER *, int, int); -static int test(struct PLAYER *); -static void die(struct PLAYER *); +static boolean player_killed(struct PLAYER *); void synchro_1(void) { /* must test for death and actually kill separately */ - char ply1_kill = test(&ply1); - char ply2_kill = test(&ply2); + boolean ply1_kill = player_killed(&ply1); + boolean ply2_kill = player_killed(&ply2); if (ply1.alive && ply1_kill) - die(&ply1); + kill_player(&ply1); if (ply2.alive && ply2_kill) - die(&ply2); + kill_player(&ply2); #if 0 ply1.alive = 1; /* debugging */ @@ -38,15 +38,15 @@ void synchro_1(void) ply2.oldy = ply2.y; ply2.anim = SPR_still; - if (Random & 256) + if (RandomEM & 256) { - if (ply1.alive) player(&ply1); - if (ply2.alive) player(&ply2); + if (ply1.alive) check_player(&ply1); + if (ply2.alive) check_player(&ply2); } else { - if (ply2.alive) player(&ply2); - if (ply1.alive) player(&ply1); + if (ply2.alive) check_player(&ply2); + if (ply1.alive) check_player(&ply1); } if (ply1.alive) @@ -80,16 +80,21 @@ void synchro_1(void) } } -static int test(struct PLAYER *ply) +static boolean player_killed(struct PLAYER *ply) { register unsigned int x = ply->x; register unsigned int y = ply->y; if (!ply->alive) - return 0; + return FALSE; - if (lev.time_initial > 0 && lev.time == 0) - return 1; +#if 1 + if (lev.killed_out_of_time && setup.time_limit) + return TRUE; +#else + if (lev.time_initial > 0 && lev.time == 0 && setup.time_limit) + return TRUE; +#endif switch(Cave[y-1][x]) { @@ -109,7 +114,7 @@ static int test(struct PLAYER *ply) case Xtank_goe: case Xtank_gos: case Xtank_gow: - return 1; + return TRUE; } switch(Cave[y][x+1]) @@ -130,7 +135,7 @@ static int test(struct PLAYER *ply) case Xtank_goe: case Xtank_gos: case Xtank_gow: - return 1; + return TRUE; } switch(Cave[y+1][x]) @@ -151,7 +156,7 @@ static int test(struct PLAYER *ply) case Xtank_goe: case Xtank_gos: case Xtank_gow: - return 1; + return TRUE; } switch(Cave[y][x-1]) @@ -172,7 +177,7 @@ static int test(struct PLAYER *ply) case Xtank_goe: case Xtank_gos: case Xtank_gow: - return 1; + return TRUE; } switch(Cave[y][x]) @@ -185,13 +190,23 @@ static int test(struct PLAYER *ply) case Xdynamite_2: case Xdynamite_3: case Xdynamite_4: - return 0; +#if 1 + case Xfake_acid_1: + case Xfake_acid_2: + case Xfake_acid_3: + case Xfake_acid_4: + case Xfake_acid_5: + case Xfake_acid_6: + case Xfake_acid_7: + case Xfake_acid_8: +#endif + return FALSE; } - return 1; + return TRUE; } -static void die(struct PLAYER *ply) +static void kill_player(struct PLAYER *ply) { register unsigned int x = ply->x; register unsigned int y = ply->y; @@ -327,7 +342,7 @@ static void die(struct PLAYER *ply) case Xexit_1: case Xexit_2: case Xexit_3: - play_element_sound(x, y, SAMPLE_exit, Xexit_1); + play_element_sound(x, y, SAMPLE_exit_leave, Xexit_1); break; default: @@ -335,11 +350,28 @@ static void die(struct PLAYER *ply) break; } - Cave[y][x] = Xboom_1; - Boom[y][x] = Xblank; + switch(Cave[y][x]) + { +#if 1 + case Xacid_1: + case Xacid_2: + case Xacid_3: + case Xacid_4: + case Xacid_5: + case Xacid_6: + case Xacid_7: + case Xacid_8: + break; +#endif + + default: + Cave[y][x] = Xboom_1; + Boom[y][x] = Xblank; + break; + } } -static void player(struct PLAYER *ply) +static void check_player(struct PLAYER *ply) { unsigned int oldx = ply->x; unsigned int oldy = ply->y; @@ -457,7 +489,7 @@ static void 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; } @@ -523,12 +555,38 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) case Yacid_splash_wB: Cave[y][x] = Zplayer; Next[y][x] = Zplayer; +#if 1 + case Xfake_acid_1: + case Xfake_acid_2: + case Xfake_acid_3: + case Xfake_acid_4: + case Xfake_acid_5: + case Xfake_acid_6: + case Xfake_acid_7: + case Xfake_acid_8: +#endif play_element_sound(x, y, SAMPLE_blank, Xblank); ply->anim = SPR_walk + anim; ply->x = x; ply->y = y; break; +#if 1 + case Xacid_1: + case Xacid_2: + case Xacid_3: + case Xacid_4: + case Xacid_5: + case Xacid_6: + case Xacid_7: + case Xacid_8: +#endif + if (Cave[y-1][x+1] == Xblank) + Cave[y-1][x+1] = Yacid_splash_eB; + if (Cave[y-1][x-1] == Xblank) + Cave[y-1][x-1] = Yacid_splash_wB; + play_element_sound(x, y, SAMPLE_acid, Xacid_1); + case Xboom_android: case Xboom_1: case Xbug_n: @@ -547,6 +605,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) case Xtank_goe: case Xtank_gos: case Xtank_gow: +#if 0 case Xacid_1: case Xacid_2: case Xacid_3: @@ -555,6 +614,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) case Xacid_6: case Xacid_7: case Xacid_8: +#endif ply->anim = SPR_walk + anim; ply->x = x; ply->y = y; @@ -705,7 +765,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) Cave[y-1][x+dx+1] = Yacid_splash_eB; if (Cave[y-1][x+dx-1] == Xblank) Cave[y-1][x+dx-1] = Yacid_splash_wB; - play_sound(x, y, SAMPLE_acid); + play_element_sound(x, y, SAMPLE_acid, Xacid_1); goto stone_walk; case Xblank: @@ -743,7 +803,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) Cave[y-1][x+dx+1] = Yacid_splash_eB; if (Cave[y-1][x+dx-1] == Xblank) Cave[y-1][x+dx-1] = Yacid_splash_wB; - play_sound(x, y, SAMPLE_acid); + play_element_sound(x, y, SAMPLE_acid, Xacid_1); goto bomb_walk; case Xblank: @@ -781,7 +841,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) Cave[y-1][x+dx+1] = Yacid_splash_eB; if (Cave[y-1][x+dx-1] == Xblank) Cave[y-1][x+dx-1] = Yacid_splash_wB; - play_sound(x, y, SAMPLE_acid); + play_element_sound(x, y, SAMPLE_acid, Xacid_1); goto nut_walk; case Xblank: @@ -830,7 +890,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) Cave[y-1][x+dx+1] = Yacid_splash_eB; if (Cave[y-1][x+dx-1] == Xblank) Cave[y-1][x+dx-1] = Yacid_splash_wB; - play_sound(x, y, SAMPLE_acid); + play_element_sound(x, y, SAMPLE_acid, Xacid_1); goto spring_walk; case Xblank: @@ -878,7 +938,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) Cave[y+dy-1][x+dx+1] = Yacid_splash_eB; if (Cave[y+dy-1][x+dx-1] == Xblank) Cave[y+dy-1][x+dx-1] = Yacid_splash_wB; - play_sound(x, y, SAMPLE_acid); + play_element_sound(x, y, SAMPLE_acid, Xacid_1); goto balloon_walk; case Xblank: @@ -923,7 +983,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) Cave[y+dy-1][x+dx+1] = Yacid_splash_eB; if (Cave[y+dy-1][x+dx-1] == Xblank) Cave[y+dy-1][x+dx-1] = Yacid_splash_wB; - play_sound(x, y, SAMPLE_acid); + play_element_sound(x, y, SAMPLE_acid, Xacid_1); goto android_walk; case Xblank: @@ -1069,10 +1129,15 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) case Xexit_1: case Xexit_2: case Xexit_3: - play_element_sound(x, y, SAMPLE_exit, Xexit_1); + play_element_sound(x, y, SAMPLE_exit_leave, Xexit_1); + + lev.home--; - if (--lev.home == 0 && lev.time_initial > 0) /* game won */ +#if 0 + /* !!! CHECK SCORE CALCULATION !!! */ + if (lev.home == 0 && lev.time_initial > 0) /* game won */ lev.score += lev.time * lev.exit_score / 100; +#endif ply->anim = SPR_walk + anim; ply->x = x;