* 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 *);
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;
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;
}
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;
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;
}
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;
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;
}
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;
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;
}
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:
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,
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;
+ 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 ||
- checkIfAllPlayersFitToScreen());
+ players_visible_after_move ||
+ !players_visible_before_move);
ply->x = oldx;
ply->y = oldy;
ply->y = y;
break;
-#if 1
+#if USE_CHANGED_ACID_STUFF
case Xacid_1:
case Xacid_2:
case Xacid_3:
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:
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:
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--;