X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_em%2Flogic.c;h=1eaefcfc93421c0303f66dd66f7792a73c202206;hb=HEAD;hp=4b489d8a507dee65da5f9b7c35f79bb48ec62cc2;hpb=2a4f4ada000ade47a2a04e7f7b4d1d67878a2381;p=rocksndiamonds.git diff --git a/src/game_em/logic.c b/src/game_em/logic.c index 4b489d8a..b73edab2 100644 --- a/src/game_em/logic.c +++ b/src/game_em/logic.c @@ -58,18 +58,6 @@ static const byte is_blank_or_acid[GAME_TILE_MAX] = [Xacid_8] = 1 }; -static const byte is_fake_acid[GAME_TILE_MAX] = -{ - [Xfake_acid_1] = 1, - [Xfake_acid_2] = 1, - [Xfake_acid_3] = 1, - [Xfake_acid_4] = 1, - [Xfake_acid_5] = 1, - [Xfake_acid_6] = 1, - [Xfake_acid_7] = 1, - [Xfake_acid_8] = 1 -}; - static const byte is_player[GAME_TILE_MAX] = { [Zplayer] = 1, @@ -305,7 +293,7 @@ static boolean player_killed(struct PLAYER *ply) if (!ply->alive) return FALSE; - if (lev.killed_out_of_time && setup.time_limit) + if (lev.killed_out_of_time && game.time_limit) return TRUE; switch (cave[x][y-1]) @@ -789,6 +777,9 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) if (dy) break; + if (game_em.use_push_delay && RANDOM(32) < 16) + goto stone_push_anim; + switch (cave[x+dx][y]) { case Xblank: @@ -829,6 +820,8 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) break; } + stone_push_anim: + ply->anim = PLY_push_n + anim; break; @@ -836,6 +829,9 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) if (dy) break; + if (game_em.use_push_delay && RANDOM(32) < 22) + goto bomb_push_anim; + switch (cave[x+dx][y]) { case Xblank: @@ -876,6 +872,8 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) break; } + bomb_push_anim: + ply->anim = PLY_push_n + anim; break; @@ -883,6 +881,9 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) if (dy) break; + if (game_em.use_push_delay && RANDOM(32) < 19) + goto nut_push_anim; + switch (cave[x+dx][y]) { case Xblank: @@ -923,6 +924,8 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) break; } + nut_push_anim: + ply->anim = PLY_push_n + anim; break; @@ -1481,6 +1484,8 @@ static void check_player(struct PLAYER *ply) ply->dynamite_cnt = 0; /* reset dynamite timer if we move */ + seed = game_em.random; + if (!ply->joy_snap) /* player wants to move */ { boolean moved = FALSE; @@ -1512,6 +1517,8 @@ static void check_player(struct PLAYER *ply) { game_em.any_player_snapping = player_digfield(ply, dx, dy); } + + game_em.random = seed; } static void set_nearest_player_xy(int x, int y, int *dx, int *dy) @@ -7707,10 +7714,12 @@ void logic_move(void) if (ply[i].x < lev.left || ply[i].x > lev.right - 1) { - ply[i].x = (ply[i].x < lev.left ? lev.right - 1 : lev.left); + int direction = (ply[i].x < lev.left ? -1 : 1); + + ply[i].x += -direction * lev.width; if (!lev.infinite_true) - ply[i].y += (ply[i].x == lev.left ? 1 : -1); + ply[i].y += direction; game.centered_player_nr_next = i; game.set_centered_player = TRUE; @@ -7778,6 +7787,18 @@ static void logic_players(void) next[ply[i].x][ply[i].y] = add_player[element]; } } + + /* check for wheel at wrap-around position */ + if (lev.wheel_x < lev.left || + lev.wheel_x > lev.right - 1) + { + int direction = (lev.wheel_x < lev.left ? -1 : 1); + + lev.wheel_x += -direction * lev.width; + + if (!lev.infinite_true) + lev.wheel_y += direction; + } } static void logic_objects(void)