X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_em%2Fsynchro_1.c;h=ef4d0f2c82e73d1e88e7fa7ba87dc22557b90163;hb=358fe8d37855c22ee5ee4e24d486757500043178;hp=1fe8faf0a99382bd7180381da190f358ffe2025f;hpb=28fe42eb060d7c9169a9b344678494e7d366a6b0;p=rocksndiamonds.git diff --git a/src/game_em/synchro_1.c b/src/game_em/synchro_1.c index 1fe8faf0..ef4d0f2c 100644 --- a/src/game_em/synchro_1.c +++ b/src/game_em/synchro_1.c @@ -5,13 +5,15 @@ * large switch statement for tiles the player interacts with. */ -#include "tile.h" -#include "level.h" -#include "sample.h" -#include "display.h" +#include "main_em.h" +#if 0 extern int centered_player_nr; +#endif + +#define USE_CHANGED_ACID_STUFF 1 + extern boolean checkIfAllPlayersFitToScreen(); static void check_player(struct PLAYER *); @@ -294,7 +296,9 @@ static void kill_player(struct PLAYER *ply) case Xbug_gow: Cave[y-1][x] = Xboom_bug; #if 0 +#if PLAY_ELEMENT_SOUND play_element_sound(x, y, SAMPLE_boom, Zplayer); +#endif #endif break; @@ -308,7 +312,9 @@ static void kill_player(struct PLAYER *ply) case Xtank_gow: Cave[y-1][x] = Xboom_bomb; #if 0 +#if PLAY_ELEMENT_SOUND play_element_sound(x, y, SAMPLE_boom, Zplayer); +#endif #endif break; } @@ -325,7 +331,9 @@ static void kill_player(struct PLAYER *ply) case Xbug_gow: Cave[y][x+1] = Xboom_bug; #if 0 +#if PLAY_ELEMENT_SOUND play_element_sound(x, y, SAMPLE_boom, Zplayer); +#endif #endif break; @@ -339,7 +347,9 @@ static void kill_player(struct PLAYER *ply) case Xtank_gow: Cave[y][x+1] = Xboom_bomb; #if 0 +#if PLAY_ELEMENT_SOUND play_element_sound(x, y, SAMPLE_boom, Zplayer); +#endif #endif break; } @@ -356,7 +366,9 @@ static void kill_player(struct PLAYER *ply) case Xbug_gow: Cave[y+1][x] = Xboom_bug; #if 0 +#if PLAY_ELEMENT_SOUND play_element_sound(x, y, SAMPLE_boom, Zplayer); +#endif #endif break; @@ -370,7 +382,9 @@ static void kill_player(struct PLAYER *ply) case Xtank_gow: Cave[y+1][x] = Xboom_bomb; #if 0 +#if PLAY_ELEMENT_SOUND play_element_sound(x, y, SAMPLE_boom, Zplayer); +#endif #endif break; } @@ -387,7 +401,9 @@ static void kill_player(struct PLAYER *ply) case Xbug_gow: Cave[y][x-1] = Xboom_bug; #if 0 +#if PLAY_ELEMENT_SOUND play_element_sound(x, y, SAMPLE_boom, Zplayer); +#endif #endif break; @@ -401,7 +417,9 @@ static void kill_player(struct PLAYER *ply) case Xtank_gow: Cave[y][x-1] = Xboom_bomb; #if 0 +#if PLAY_ELEMENT_SOUND play_element_sound(x, y, SAMPLE_boom, Zplayer); +#endif #endif break; } @@ -411,17 +429,22 @@ static void kill_player(struct PLAYER *ply) case Xexit_1: case Xexit_2: case Xexit_3: + lev.exit_x = x; + lev.exit_y = y; play_element_sound(x, y, SAMPLE_exit_leave, Xexit_1); break; default: +#if PLAY_ELEMENT_SOUND + play_element_sound(x, y, SAMPLE_boom, Zplayer); +#endif play_element_sound(x, y, SAMPLE_die, Zplayer); break; } switch(Cave[y][x]) { -#if 1 +#if USE_CHANGED_ACID_STUFF case Xacid_1: case Xacid_2: case Xacid_3: @@ -446,9 +469,10 @@ static void check_player(struct PLAYER *ply) int oldy = ply->y; int x = oldx; int y = oldy; - int anim = 0; int dx = 0, dy = 0; + game_em.last_player_direction[ply->num] = MV_NONE; + #if 0 printf("::: up == %d, down == %d, left == %d, right == %d, fire == %d [spin == %d, stick == %d]\n", ply->joy_n, ply->joy_s, ply->joy_w, ply->joy_e, ply->joy_fire, @@ -460,26 +484,22 @@ static void check_player(struct PLAYER *ply) { x--; dx = -1; - anim = 3; } else if (ply->joy_e) /* east */ { x++; dx = 1; - anim = 1; } if (ply->joy_n) /* north */ { y--; dy = -1; - anim = 0; } else if (ply->joy_s) /* south */ { y++; dy = 1; - anim = 2; } #else @@ -490,25 +510,21 @@ static void check_player(struct PLAYER *ply) { y--; dy = -1; - anim = 0; } else if (ply->joy_e) /* east */ { x++; dx = 1; - anim = 1; } else if (ply->joy_s) /* south */ { y++; dy = 1; - anim = 2; } else if (ply->joy_w) /* west */ { x--; dx = -1; - anim = 3; } } else @@ -517,25 +533,21 @@ static void check_player(struct PLAYER *ply) { x--; dx = -1; - anim = 3; } else if (ply->joy_s) /* south */ { y++; dy = 1; - anim = 2; } else if (ply->joy_e) /* east */ { x++; dx = 1; - anim = 1; } else if (ply->joy_n) /* north */ { y--; dy = -1; - anim = 0; } } #endif @@ -546,12 +558,26 @@ static void check_player(struct PLAYER *ply) int oldy = ply->y; int x = oldx + dx; int y = oldy + dy; - boolean can_move = TRUE; + boolean players_visible_before_move; + boolean players_visible_after_move; + boolean can_move; + + players_visible_before_move = checkIfAllPlayersFitToScreen(); ply->x = x; ply->y = y; - can_move = (centered_player_nr != -1 || checkIfAllPlayersFitToScreen()); + players_visible_after_move = checkIfAllPlayersFitToScreen(); + + /* + player is allowed to move only in the following cases: + - it is not needed to display all players (not focussed to all players) + - all players are (still or again) visible after the move + - some players were already outside visible screen area before the move + */ + can_move = (game.centered_player_nr != -1 || + players_visible_after_move || + !players_visible_before_move); ply->x = oldx; ply->y = oldy; @@ -668,7 +694,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) ply->y = y; break; -#if 1 +#if USE_CHANGED_ACID_STUFF case Xacid_1: case Xacid_2: case Xacid_3: @@ -677,12 +703,12 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) 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); +#endif case Xboom_android: case Xboom_1: @@ -702,7 +728,8 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) case Xtank_goe: case Xtank_gos: case Xtank_gow: -#if 0 + +#if !USE_CHANGED_ACID_STUFF case Xacid_1: case Xacid_2: case Xacid_3: @@ -1226,7 +1253,10 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) case Xexit_1: case Xexit_2: case Xexit_3: +#if 0 + /* !!! already played in kill_player !!! */ play_element_sound(x, y, SAMPLE_exit_leave, Xexit_1); +#endif lev.home--;