tape.changed = FALSE;
}
-static boolean SaveTapeCheckedExt(int nr, char *msg_replace, char *msg_saved)
+static boolean SaveTapeCheckedExt(int nr, char *msg_replace, char *msg_saved,
+ unsigned int req_state_added)
{
char *filename = getTapeFilename(nr);
boolean new_tape = !fileExists(filename);
boolean tape_saved = FALSE;
- if (new_tape || Request(msg_replace, REQ_ASK))
+ if (new_tape || Request(msg_replace, REQ_ASK | req_state_added))
{
SaveTape(nr);
if (new_tape)
- Request(msg_saved, REQ_CONFIRM);
+ Request(msg_saved, REQ_CONFIRM | req_state_added);
tape_saved = TRUE;
}
boolean SaveTapeChecked(int nr)
{
- return SaveTapeCheckedExt(nr, "Replace old tape?", "Tape saved!");
+ return SaveTapeCheckedExt(nr, "Replace old tape?", "Tape saved!", 0);
}
boolean SaveTapeChecked_LevelSolved(int nr)
{
return SaveTapeCheckedExt(nr, "Level solved! Replace old tape?",
- "Level solved! Tape saved!");
+ "Level solved! Tape saved!", REQ_STAY_OPEN);
}
void DumpTape(struct TapeInfo *tape)
}
}
+ // special case: check if network and preview player positions are redefined,
+ // to compare this later against the main menu level preview being redefined
+ struct TokenIntPtrInfo menu_config_players[] =
+ {
+ { "main.network_players.x", &menu.main.network_players.redefined },
+ { "main.network_players.y", &menu.main.network_players.redefined },
+ { "main.preview_players.x", &menu.main.preview_players.redefined },
+ { "main.preview_players.y", &menu.main.preview_players.redefined },
+ { "preview.x", &preview.redefined },
+ { "preview.y", &preview.redefined }
+ };
+
+ for (i = 0; i < ARRAY_SIZE(menu_config_players); i++)
+ *menu_config_players[i].value = FALSE;
+
+ for (i = 0; i < ARRAY_SIZE(menu_config_players); i++)
+ if (getHashEntry(setup_file_hash, menu_config_players[i].token) != NULL)
+ *menu_config_players[i].value = TRUE;
+
// read (and overwrite with) values that may be specified in config file
for (i = 0; image_config_vars[i].token != NULL; i++)
{