projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed lock-up when auto-testing tape which causes loop in game engine
[rocksndiamonds.git]
/
src
/
game.c
diff --git
a/src/game.c
b/src/game.c
index 72af644a3b9f003cffc756c33ed58820d37d2269..abc56d238a167278eb7769778ba0edc4e5269c40 100644
(file)
--- a/
src/game.c
+++ b/
src/game.c
@@
-1106,7
+1106,7
@@
void ContinueMoving(int, int);
void Bang(int, int);
void InitMovDir(int, int);
void InitAmoebaNr(int, int);
void Bang(int, int);
void InitMovDir(int, int);
void InitAmoebaNr(int, int);
-void NewHighScore(int);
+void NewHighScore(int
, boolean
);
void TestIfGoodThingHitsBadThing(int, int, int);
void TestIfBadThingHitsGoodThing(int, int, int);
void TestIfGoodThingHitsBadThing(int, int, int);
void TestIfBadThingHitsGoodThing(int, int, int);
@@
-4965,6
+4965,7
@@
void GameEnd(void)
{
// used instead of "level_nr" (needed for network games)
int last_level_nr = levelset.level_nr;
{
// used instead of "level_nr" (needed for network games)
int last_level_nr = levelset.level_nr;
+ boolean tape_saved = FALSE;
game.LevelSolved_GameEnd = TRUE;
game.LevelSolved_GameEnd = TRUE;
@@
-4974,7
+4975,8
@@
void GameEnd(void)
if (!global.use_envelope_request)
CloseDoor(DOOR_CLOSE_1);
if (!global.use_envelope_request)
CloseDoor(DOOR_CLOSE_1);
- SaveTapeChecked_LevelSolved(tape.level_nr); // ask to save tape
+ // ask to save tape
+ tape_saved = SaveTapeChecked_LevelSolved(tape.level_nr);
// set unique basename for score tape (also saved in high score table)
strcpy(tape.score_tape_basename, getScoreTapeBasename(setup.player_name));
// set unique basename for score tape (also saved in high score table)
strcpy(tape.score_tape_basename, getScoreTapeBasename(setup.player_name));
@@
-5009,7
+5011,7
@@
void GameEnd(void)
}
// save score and score tape before potentially erasing tape below
}
// save score and score tape before potentially erasing tape below
- NewHighScore(last_level_nr);
+ NewHighScore(last_level_nr
, tape_saved
);
if (setup.increment_levels &&
level_nr < leveldir_current->last_level &&
if (setup.increment_levels &&
level_nr < leveldir_current->last_level &&
@@
-5117,7
+5119,7
@@
static int addScoreEntry(struct ScoreInfo *list, struct ScoreEntry *new_entry,
return -1;
}
return -1;
}
-void NewHighScore(int level_nr)
+void NewHighScore(int level_nr
, boolean tape_saved
)
{
struct ScoreEntry new_entry = {{ 0 }}; // (prevent warning from GCC bug 53119)
boolean one_per_name = FALSE;
{
struct ScoreEntry new_entry = {{ 0 }}; // (prevent warning from GCC bug 53119)
boolean one_per_name = FALSE;
@@
-5143,7
+5145,7
@@
void NewHighScore(int level_nr)
if (game.LevelSolved_SaveTape)
{
SaveScoreTape(level_nr);
if (game.LevelSolved_SaveTape)
{
SaveScoreTape(level_nr);
- SaveServerScore(level_nr);
+ SaveServerScore(level_nr
, tape_saved
);
}
}
}
}
@@
-11711,7
+11713,7
@@
static void GameActionsExt(void)
Warn("element '%s' caused endless loop in game engine",
EL_NAME(recursion_loop_element));
Warn("element '%s' caused endless loop in game engine",
EL_NAME(recursion_loop_element));
- RequestQuitGameExt(
FALSE
, level_editor_test_game, message);
+ RequestQuitGameExt(
program.headless
, level_editor_test_game, message);
recursion_loop_detected = FALSE; // if game should be continued
recursion_loop_detected = FALSE; // if game should be continued
@@
-13968,7
+13970,11
@@
static void TestFieldAfterSnapping(int x, int y, int element, int direction,
if (level.finish_dig_collect)
{
int dig_side = MV_DIR_OPPOSITE(direction);
if (level.finish_dig_collect)
{
int dig_side = MV_DIR_OPPOSITE(direction);
+ int change_event = (IS_DIGGABLE(element) ? CE_PLAYER_DIGS_X :
+ CE_PLAYER_COLLECTS_X);
+ CheckTriggeredElementChangeByPlayer(x, y, element, change_event,
+ player_index_bit, dig_side);
CheckTriggeredElementChangeByPlayer(x, y, element, CE_PLAYER_SNAPS_X,
player_index_bit, dig_side);
}
CheckTriggeredElementChangeByPlayer(x, y, element, CE_PLAYER_SNAPS_X,
player_index_bit, dig_side);
}
@@
-16186,17
+16192,13
@@
static void UnmapGameButtonsAtSamePosition_All(void)
}
}
}
}
-
static void MapGameButtonsAtSamePosition(int
id)
+
void MapLoadSaveButtons(vo
id)
{
{
- int i;
+ UnmapGameButtonsAtSamePosition(GAME_CTRL_ID_LOAD);
+ UnmapGameButtonsAtSamePosition(GAME_CTRL_ID_SAVE);
- for (i = 0; i < NUM_GAME_BUTTONS; i++)
- if (i != id &&
- gamebutton_info[i].pos->x == gamebutton_info[id].pos->x &&
- gamebutton_info[i].pos->y == gamebutton_info[id].pos->y)
- MapGadget(game_gadget[i]);
-
- UnmapGameButtonsAtSamePosition_All();
+ MapGadget(game_gadget[GAME_CTRL_ID_LOAD]);
+ MapGadget(game_gadget[GAME_CTRL_ID_SAVE]);
}
void MapUndoRedoButtons(void)
}
void MapUndoRedoButtons(void)
@@
-16208,15
+16210,6
@@
void MapUndoRedoButtons(void)
MapGadget(game_gadget[GAME_CTRL_ID_REDO]);
}
MapGadget(game_gadget[GAME_CTRL_ID_REDO]);
}
-void UnmapUndoRedoButtons(void)
-{
- UnmapGadget(game_gadget[GAME_CTRL_ID_UNDO]);
- UnmapGadget(game_gadget[GAME_CTRL_ID_REDO]);
-
- MapGameButtonsAtSamePosition(GAME_CTRL_ID_UNDO);
- MapGameButtonsAtSamePosition(GAME_CTRL_ID_REDO);
-}
-
void ModifyPauseButtons(void)
{
static int ids[] =
void ModifyPauseButtons(void)
{
static int ids[] =