int element = Tile[x][y];
// convert BD engine elements to corresponding R'n'D engine elements
- element = (element == EL_BD_EMPTY ? EL_EMPTY :
- element == EL_BD_PLAYER ? EL_PLAYER_1 :
- element == EL_BD_INBOX ? EL_PLAYER_1 :
- element == EL_BD_SAND ? EL_SAND :
- element == EL_BD_STEELWALL ? EL_STEELWALL :
- element == EL_BD_EXIT_CLOSED ? EL_EXIT_CLOSED :
- element == EL_BD_EXIT_OPEN ? EL_EXIT_OPEN :
+ element = (element == EL_BDX_EMPTY ? EL_EMPTY :
+ element == EL_BDX_PLAYER ? EL_PLAYER_1 :
+ element == EL_BDX_INBOX ? EL_PLAYER_1 :
+ element == EL_BDX_SAND_1 ? EL_SAND :
+ element == EL_BDX_STEELWALL ? EL_STEELWALL :
+ element == EL_BDX_EXIT_CLOSED ? EL_EXIT_CLOSED :
+ element == EL_BDX_EXIT_OPEN ? EL_EXIT_OPEN :
element);
Tile[x][y] = element;
int time = (game.LevelSolved ?
game.LevelSolved_CountingTime :
level.game_engine_type == GAME_ENGINE_TYPE_BD ?
- game_bd.time_played :
+ game_bd.time_left :
level.game_engine_type == GAME_ENGINE_TYPE_EM ?
game_em.lev->time :
level.game_engine_type == GAME_ENGINE_TYPE_SP ?
static void LevelSolved_SetFinalGameValues(void)
{
- game.time_final = (level.game_engine_type == GAME_ENGINE_TYPE_BD ? game_bd.time_played :
+ game.time_final = (level.game_engine_type == GAME_ENGINE_TYPE_BD ? game_bd.time_left :
game.no_level_time_limit ? TimePlayed : TimeLeft);
- game.score_time_final = (level.use_step_counter ? TimePlayed :
+ game.score_time_final = (level.game_engine_type == GAME_ENGINE_TYPE_BD ? game_bd.frames_played :
+ level.use_step_counter ? TimePlayed :
TimePlayed * FRAMES_PER_SECOND + TimeFrames);
game.score_final = (level.game_engine_type == GAME_ENGINE_TYPE_BD ? game_bd.score :
// do not handle game end if game over and automatically asking for game restart
if (game_over && setup.ask_on_game_over)
+ {
+ // (this is a special case: player pressed "return" key or fire button shortly before
+ // automatically asking to restart the game, so skip asking and restart right away)
+
+ CloseDoor(DOOR_CLOSE_1);
+
+ StartGameActions(network.enabled, setup.autorecord, level.random_seed);
+
return;
+ }
// do not handle game end if request dialog is already active
if (checkRequestActive())
// if last second running, wait for native engine time to exactly reach zero
if (getTimeLeft_BD() == 1 && TimeLeft == 1)
TimeFrames = frames_per_second - 1;
+
+ // needed to store final time after solving game (before counting down remaining time)
+ SetTimeFrames_BD(TimePlayed * FRAMES_PER_SECOND + TimeFrames);
}
if (TimeFrames >= frames_per_second)
case GD_S_DIAMOND_FALLING_8:
nr = (sample == GD_S_DIAMOND_FALLING_RANDOM ? GetSimpleRandom(8) :
sample - GD_S_DIAMOND_FALLING_1);
- sound_effect = SND_BD_DIAMOND_FALLING_RANDOM_1 + nr;
+ sound_effect = SND_BDX_DIAMOND_FALLING_RANDOM_1 + nr;
if (getSoundInfoEntryFilename(sound_effect) == NULL)
- sound_effect = SND_BD_DIAMOND_FALLING;
+ sound_effect = SND_BDX_DIAMOND_FALLING;
break;
case GD_S_DIAMOND_IMPACT_RANDOM:
case GD_S_DIAMOND_IMPACT_8:
nr = (sample == GD_S_DIAMOND_IMPACT_RANDOM ? GetSimpleRandom(8) :
sample - GD_S_DIAMOND_IMPACT_1);
- sound_effect = SND_BD_DIAMOND_IMPACT_RANDOM_1 + nr;
+ sound_effect = SND_BDX_DIAMOND_IMPACT_RANDOM_1 + nr;
if (getSoundInfoEntryFilename(sound_effect) == NULL)
- sound_effect = SND_BD_DIAMOND_IMPACT;
+ sound_effect = SND_BDX_DIAMOND_IMPACT;
break;
case GD_S_FLYING_DIAMOND_FALLING_RANDOM:
case GD_S_FLYING_DIAMOND_FALLING_8:
nr = (sample == GD_S_FLYING_DIAMOND_FALLING_RANDOM ? GetSimpleRandom(8) :
sample - GD_S_FLYING_DIAMOND_FALLING_1);
- sound_effect = SND_BD_FLYING_DIAMOND_FALLING_RANDOM_1 + nr;
+ sound_effect = SND_BDX_FLYING_DIAMOND_FALLING_RANDOM_1 + nr;
if (getSoundInfoEntryFilename(sound_effect) == NULL)
- sound_effect = SND_BD_FLYING_DIAMOND_FALLING;
+ sound_effect = SND_BDX_FLYING_DIAMOND_FALLING;
break;
case GD_S_FLYING_DIAMOND_IMPACT_RANDOM:
case GD_S_FLYING_DIAMOND_IMPACT_8:
nr = (sample == GD_S_FLYING_DIAMOND_IMPACT_RANDOM ? GetSimpleRandom(8) :
sample - GD_S_FLYING_DIAMOND_IMPACT_1);
- sound_effect = SND_BD_FLYING_DIAMOND_IMPACT_RANDOM_1 + nr;
+ sound_effect = SND_BDX_FLYING_DIAMOND_IMPACT_RANDOM_1 + nr;
if (getSoundInfoEntryFilename(sound_effect) == NULL)
- sound_effect = SND_BD_FLYING_DIAMOND_IMPACT;
+ sound_effect = SND_BDX_FLYING_DIAMOND_IMPACT;
break;
case GD_S_TIMEOUT_0:
break;
case GD_S_AMOEBA_MAGIC:
- sound_effect = SND_BD_AMOEBA_OTHER;
+ sound_effect = SND_BDX_AMOEBA_1_OTHER;
break;
case GD_S_FINISHED: