X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=fa1175c0d59b56e24d2dfcd5ecf0bad9f8232473;hb=2c03953e712c427c94c02cdb1e15cd9e99e9e116;hp=f0bf7dd9600b8bef766243fad5256c9fdd382372;hpb=066b410c0573fe64a1783116daf9d64883e9f03e;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index f0bf7dd9..fa1175c0 100644 --- a/src/game.c +++ b/src/game.c @@ -432,6 +432,18 @@ static void InitField(int x, int y, boolean init_game) } } +void DrawGameDoorValues() +{ + DrawText(DX + XX_EMERALDS, DY + YY_EMERALDS, + int2str(local_player->gems_still_needed, 3), FS_SMALL, FC_YELLOW); + DrawText(DX + XX_DYNAMITE, DY + YY_DYNAMITE, + int2str(local_player->dynamite, 3), FS_SMALL, FC_YELLOW); + DrawText(DX + XX_SCORE, DY + YY_SCORE, + int2str(local_player->score, 5), FS_SMALL, FC_YELLOW); + DrawText(DX + XX_TIME, DY + YY_TIME, + int2str(TimeLeft, 3), FS_SMALL, FC_YELLOW); +} + void InitGame() { int i, j, x, y; @@ -490,16 +502,16 @@ void InitGame() player->frame_reset_delay = 0; - player->push_delay = 0; - player->push_delay_value = 5; - - player->move_delay = 0; player->last_move_dir = MV_NO_MOVING; player->is_moving = FALSE; + player->move_delay = -1; /* no initial move delay */ player->move_delay_value = (level.double_speed ? MOVE_DELAY_HIGH_SPEED : MOVE_DELAY_NORMAL_SPEED); + player->push_delay = 0; + player->push_delay_value = 5; + player->snapped = FALSE; player->last_jx = player->last_jy = 0; @@ -792,6 +804,9 @@ void InitGame() DX + XX_LEVEL - 1, DY + YY_LEVEL + 1); } +#if 1 + DrawGameDoorValues(); +#else DrawText(DX + XX_EMERALDS, DY + YY_EMERALDS, int2str(local_player->gems_still_needed, 3), FS_SMALL, FC_YELLOW); DrawText(DX + XX_DYNAMITE, DY + YY_DYNAMITE, @@ -800,6 +815,7 @@ void InitGame() int2str(local_player->score, 5), FS_SMALL, FC_YELLOW); DrawText(DX + XX_TIME, DY + YY_TIME, int2str(TimeLeft, 3), FS_SMALL, FC_YELLOW); +#endif UnmapGameButtons(); UnmapTapeButtons(); @@ -4273,6 +4289,15 @@ static void PlayerActions(struct PlayerInfo *player, byte player_action) moved = MoveFigure(player, dx, dy); } + if (tape.single_step && tape.recording && !tape.pausing) + { + if (button1 || (bombed && !moved)) + { + TapeTogglePause(TAPE_TOGGLE_AUTOMATIC); + SnapField(player, 0, 0); /* stop snapping */ + } + } + #if 0 if (tape.recording && (moved || snapped || bombed)) { @@ -4380,7 +4405,7 @@ void GameActions() action_delay_value = (tape.playing && tape.fast_forward ? FfwdFrameDelay : GameFrameDelay); - if (tape.playing && tape.index_search) + if (tape.playing && tape.index_search && !tape.pausing) action_delay_value = 0; /* ---------- main game synchronization point ---------- */ @@ -5178,6 +5203,10 @@ void ScrollFigure(struct PlayerInfo *player, int mode) if (!local_player->friends_still_needed) player->LevelSolved = player->GameOver = TRUE; } + + if (tape.single_step && tape.recording && !tape.pausing && + !player->programmed_action) + TapeTogglePause(TAPE_TOGGLE_AUTOMATIC); } } @@ -6492,7 +6521,7 @@ static void HandleGameButtons(struct GadgetInfo *gi) #endif } else - TapeTogglePause(); + TapeTogglePause(TAPE_TOGGLE_MANUAL); break; case GAME_CTRL_ID_PLAY: