projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed loop mode for some sound effects
[rocksndiamonds.git]
/
src
/
game.c
diff --git
a/src/game.c
b/src/game.c
index 178f35defaf7352aff75dd66bbd529c6e22ad41c..643d36e5840230e1389bb7c911d79151726d70e2 100644
(file)
--- a/
src/game.c
+++ b/
src/game.c
@@
-3573,7
+3573,7
@@
void InitGame(void)
int full_lev_fieldx = lev_fieldx + (BorderElement != EL_EMPTY ? 2 : 0);
int full_lev_fieldy = lev_fieldy + (BorderElement != EL_EMPTY ? 2 : 0);
int fade_mask = REDRAW_FIELD;
int full_lev_fieldx = lev_fieldx + (BorderElement != EL_EMPTY ? 2 : 0);
int full_lev_fieldy = lev_fieldy + (BorderElement != EL_EMPTY ? 2 : 0);
int fade_mask = REDRAW_FIELD;
-
+ boolean restarting = (game_status == GAME_MODE_PLAYING);
boolean emulate_bd = TRUE; // unless non-BOULDERDASH elements found
boolean emulate_sp = TRUE; // unless non-SUPAPLEX elements found
int initial_move_dir = MV_DOWN;
boolean emulate_bd = TRUE; // unless non-BOULDERDASH elements found
boolean emulate_sp = TRUE; // unless non-SUPAPLEX elements found
int initial_move_dir = MV_DOWN;
@@
-3585,7
+3585,15
@@
void InitGame(void)
if (!game.restart_level)
CloseDoor(DOOR_CLOSE_1);
if (!game.restart_level)
CloseDoor(DOOR_CLOSE_1);
- SetGameStatus(GAME_MODE_PLAYING);
+ if (restarting)
+ {
+ // force fading out global animations displayed during game play
+ SetGameStatus(GAME_MODE_PSEUDO_RESTARTING);
+ }
+ else
+ {
+ SetGameStatus(GAME_MODE_PLAYING);
+ }
if (level_editor_test_game)
FadeSkipNextFadeOut();
if (level_editor_test_game)
FadeSkipNextFadeOut();
@@
-3601,6
+3609,14
@@
void InitGame(void)
FadeOut(fade_mask);
FadeOut(fade_mask);
+ if (restarting)
+ {
+ // force restarting global animations displayed during game play
+ RestartGlobalAnimsByStatus(GAME_MODE_PSEUDO_RESTARTING);
+
+ SetGameStatus(GAME_MODE_PLAYING);
+ }
+
if (level_editor_test_game)
FadeSkipNextFadeIn();
if (level_editor_test_game)
FadeSkipNextFadeIn();
@@
-9859,7
+9875,7
@@
static void CheckWallGrowing(int ax, int ay)
if (((stop_top && stop_bottom) || stop_horizontal) &&
((stop_left && stop_right) || stop_vertical))
if (((stop_top && stop_bottom) || stop_horizontal) &&
((stop_left && stop_right) || stop_vertical))
- Tile[ax][ay] =
EL_WALL
;
+ Tile[ax][ay] =
(is_steelwall ? EL_STEELWALL : EL_WALL)
;
if (new_wall)
PlayLevelSoundAction(ax, ay, ACTION_GROWING);
if (new_wall)
PlayLevelSoundAction(ax, ay, ACTION_GROWING);
@@
-11678,6
+11694,21
@@
void AdvanceFrameAndPlayerCounters(int player_nr)
}
}
}
}
+void AdvanceFrameCounter(void)
+{
+ FrameCounter++;
+}
+
+void AdvanceGfxFrame(void)
+{
+ int x, y;
+
+ SCAN_PLAYFIELD(x, y)
+ {
+ GfxFrame[x][y]++;
+ }
+}
+
void StartGameActions(boolean init_network_game, boolean record_tape,
int random_seed)
{
void StartGameActions(boolean init_network_game, boolean record_tape,
int random_seed)
{
@@
-11873,7
+11904,7
@@
static void GameActionsExt(void)
TapeRecordAction(tape_action);
// remember if game was played (especially after tape stopped playing)
TapeRecordAction(tape_action);
// remember if game was played (especially after tape stopped playing)
- if (!tape.playing && summarized_player_action)
+ if (!tape.playing && summarized_player_action
&& !checkGameFailed()
)
game.GamePlayed = TRUE;
#if USE_NEW_PLAYER_ASSIGNMENTS
game.GamePlayed = TRUE;
#if USE_NEW_PLAYER_ASSIGNMENTS
@@
-12025,6
+12056,8
@@
void GameActions_SP_Main(void)
void GameActions_MM_Main(void)
{
void GameActions_MM_Main(void)
{
+ AdvanceGfxFrame();
+
GameActions_MM(local_player->effective_mouse_action);
}
GameActions_MM(local_player->effective_mouse_action);
}
@@
-13965,7
+13998,6
@@
void BuryPlayer(struct PlayerInfo *player)
return;
PlayLevelSoundElementAction(jx, jy, player->artwork_element, ACTION_DYING);
return;
PlayLevelSoundElementAction(jx, jy, player->artwork_element, ACTION_DYING);
- PlayLevelSound(jx, jy, SND_GAME_LOSING);
RemovePlayer(player);
RemovePlayer(player);
@@
-14623,7
+14655,7
@@
static int DigField(struct PlayerInfo *player,
LevelSolved();
LevelSolved();
- Play
LevelSound(x, y,
SND_GAME_SOKOBAN_SOLVING);
+ Play
Sound(
SND_GAME_SOKOBAN_SOLVING);
}
}
else
}
}
else
@@
-15607,15
+15639,21
@@
void RequestRestartGame(char *message)
boolean has_started_game = hasStartedNetworkGame();
int request_mode = (has_started_game ? REQ_ASK : REQ_CONFIRM);
boolean has_started_game = hasStartedNetworkGame();
int request_mode = (has_started_game ? REQ_ASK : REQ_CONFIRM);
+ int door_state = DOOR_CLOSE_1;
- if (Request(message, request_mode | REQ_STAY_
CLOSED
) && has_started_game)
+ if (Request(message, request_mode | REQ_STAY_
OPEN
) && has_started_game)
{
{
+ CloseDoor(door_state);
+
StartGameActions(network.enabled, setup.autorecord, level.random_seed);
}
else
{
StartGameActions(network.enabled, setup.autorecord, level.random_seed);
}
else
{
- // needed in case of envelope request to close game panel
- CloseDoor(DOOR_CLOSE_1);
+ // if game was invoked from level editor, also close tape recorder door
+ if (level_editor_test_game)
+ door_state = DOOR_CLOSE_ALL;
+
+ CloseDoor(door_state);
SetGameStatus(GAME_MODE_MAIN);
SetGameStatus(GAME_MODE_MAIN);
@@
-15648,6
+15686,9
@@
void CheckGameOver(void)
if (game_over_delay > 0)
{
if (game_over_delay > 0)
{
+ if (game_over_delay == game_over_delay_value / 2)
+ PlaySound(SND_GAME_LOSING);
+
game_over_delay--;
return;
game_over_delay--;
return;