projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
re-enabled storing selection from "last played level set" menu
[rocksndiamonds.git]
/
src
/
files.c
diff --git
a/src/files.c
b/src/files.c
index 28ae73a23b4b70f06b59f5c892cbb3160d94b8cb..6c26bb013a101bfff4cc2820dd27f6720f181889 100644
(file)
--- a/
src/files.c
+++ b/
src/files.c
@@
-258,6
+258,12
@@
static struct LevelFileConfigInfo chunk_config_INFO[] =
&li.solved_by_one_player, FALSE
},
&li.solved_by_one_player, FALSE
},
+ {
+ -1, -1,
+ TYPE_INTEGER, CONF_VALUE_8_BIT(12),
+ &li.time_score_base, 1
+ },
+
{
-1, -1,
-1, -1,
{
-1, -1,
-1, -1,
@@
-308,6
+314,11
@@
static struct LevelFileConfigInfo chunk_config_ELEM[] =
TYPE_BOOLEAN, CONF_VALUE_8_BIT(15),
&li.lazy_relocation, FALSE
},
TYPE_BOOLEAN, CONF_VALUE_8_BIT(15),
&li.lazy_relocation, FALSE
},
+ {
+ EL_PLAYER_1, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(16),
+ &li.finish_dig_collect, TRUE
+ },
// (these values are different for each player)
{
// (these values are different for each player)
{
@@
-1064,6
+1075,18
@@
static struct LevelFileConfigInfo chunk_config_CUSX_base[] =
&xx_ei.move_delay_random, 0,
&yy_ei.move_delay_random
},
&xx_ei.move_delay_random, 0,
&yy_ei.move_delay_random
},
+ {
+ -1, -1,
+ TYPE_INTEGER, CONF_VALUE_16_BIT(16),
+ &xx_ei.step_delay_fixed, 0,
+ &yy_ei.step_delay_fixed
+ },
+ {
+ -1, -1,
+ TYPE_INTEGER, CONF_VALUE_16_BIT(17),
+ &xx_ei.step_delay_random, 0,
+ &yy_ei.step_delay_random
+ },
{
-1, -1,
{
-1, -1,
@@
-3711,6
+3734,9
@@
static void CopyNativeLevel_EM_to_RND(struct LevelInfo *level)
if (jx != -1 && jy != -1)
level->field[jx][jy] = EL_PLAYER_1 + nr;
}
if (jx != -1 && jy != -1)
level->field[jx][jy] = EL_PLAYER_1 + nr;
}
+
+ // time score is counted for each 10 seconds left in Emerald Mine levels
+ level->time_score_base = 10;
}
}
@@
-5728,6
+5754,9
@@
static void LoadLevelFromFileStream_DC(File *file, struct LevelInfo *level,
// Diamond Caves has the same (strange) behaviour as Emerald Mine that gems
// can slip down from flat walls, like normal walls and steel walls
level->em_slippery_gems = TRUE;
// Diamond Caves has the same (strange) behaviour as Emerald Mine that gems
// can slip down from flat walls, like normal walls and steel walls
level->em_slippery_gems = TRUE;
+
+ // time score is counted for each 10 seconds left in Diamond Caves levels
+ level->time_score_base = 10;
}
static void LoadLevelFromFileInfo_DC(struct LevelInfo *level,
}
static void LoadLevelFromFileInfo_DC(struct LevelInfo *level,
@@
-6251,7
+6280,7
@@
static void LoadLevel_InitVersion(struct LevelInfo *level)
if (level->game_version < VERSION_IDENT(3,2,0,5))
{
// time bonus score was given for 10 s instead of 1 s before 3.2.0-5
if (level->game_version < VERSION_IDENT(3,2,0,5))
{
// time bonus score was given for 10 s instead of 1 s before 3.2.0-5
- level->
score[SC_TIME_BONUS] /
= 10;
+ level->
time_score_base
= 10;
}
if (leveldir_current->latest_engine)
}
if (leveldir_current->latest_engine)
@@
-6423,6
+6452,10
@@
static void LoadLevel_InitVersion(struct LevelInfo *level)
// only Sokoban fields (but not objects) had to be solved before 4.1.1.1
if (level->game_version < VERSION_IDENT(4,1,1,1))
level->sb_objects_needed = FALSE;
// only Sokoban fields (but not objects) had to be solved before 4.1.1.1
if (level->game_version < VERSION_IDENT(4,1,1,1))
level->sb_objects_needed = FALSE;
+
+ // CE actions were triggered by unfinished digging/collecting up to 4.2.2.0
+ if (level->game_version <= VERSION_IDENT(4,2,2,0))
+ level->finish_dig_collect = FALSE;
}
static void LoadLevel_InitStandardElements(struct LevelInfo *level)
}
static void LoadLevel_InitStandardElements(struct LevelInfo *level)
@@
-7732,16
+7765,21
@@
static int LoadTape_SCRN(File *file, int chunk_size, struct TapeInfo *tape)
static int LoadTape_INFO(File *file, int chunk_size, struct TapeInfo *tape)
{
static int LoadTape_INFO(File *file, int chunk_size, struct TapeInfo *tape)
{
+ char *level_identifier = NULL;
int level_identifier_size;
int i;
level_identifier_size = getFile16BitBE(file);
int level_identifier_size;
int i;
level_identifier_size = getFile16BitBE(file);
- tape->level_identifier =
- checked_realloc(tape->level_identifier, level_identifier_size);
+ level_identifier = checked_malloc(level_identifier_size);
for (i = 0; i < level_identifier_size; i++)
for (i = 0; i < level_identifier_size; i++)
- tape->level_identifier[i] = getFile8Bit(file);
+ level_identifier[i] = getFile8Bit(file);
+
+ strncpy(tape->level_identifier, level_identifier, MAX_FILENAME_LEN);
+ tape->level_identifier[MAX_FILENAME_LEN] = '\0';
+
+ checked_free(level_identifier);
tape->level_nr = getFile16BitBE(file);
tape->level_nr = getFile16BitBE(file);
@@
-8524,7
+8562,11
@@
static struct TokenInfo global_setup_tokens[] =
},
{
TYPE_SWITCH,
},
{
TYPE_SWITCH,
- &setup.skip_scores_after_game, "skip_scores_after_game"
+ &setup.count_score_after_game, "count_score_after_game"
+ },
+ {
+ TYPE_SWITCH,
+ &setup.show_scores_after_game, "show_scores_after_game"
},
{
TYPE_SWITCH,
},
{
TYPE_SWITCH,
@@
-8562,6
+8604,14
@@
static struct TokenInfo global_setup_tokens[] =
TYPE_SWITCH,
&setup.ask_on_game_over, "ask_on_game_over"
},
TYPE_SWITCH,
&setup.ask_on_game_over, "ask_on_game_over"
},
+ {
+ TYPE_SWITCH,
+ &setup.ask_on_quit_game, "ask_on_quit_game"
+ },
+ {
+ TYPE_SWITCH,
+ &setup.ask_on_quit_program, "ask_on_quit_program"
+ },
{
TYPE_SWITCH,
&setup.quick_switch, "quick_player_switch"
{
TYPE_SWITCH,
&setup.quick_switch, "quick_player_switch"
@@
-8726,6
+8776,10
@@
static struct TokenInfo editor_setup_tokens[] =
TYPE_SWITCH,
&setup.editor.show_element_token, "editor.show_element_token"
},
TYPE_SWITCH,
&setup.editor.show_element_token, "editor.show_element_token"
},
+ {
+ TYPE_SWITCH,
+ &setup.editor.show_read_only_warning, "editor.show_read_only_warning"
+ },
};
static struct TokenInfo editor_cascade_setup_tokens[] =
};
static struct TokenInfo editor_cascade_setup_tokens[] =
@@
-9239,7
+9293,8
@@
static void setSetupInfoToDefaults(struct SetupInfo *si)
si->skip_levels = TRUE;
si->increment_levels = TRUE;
si->auto_play_next_level = TRUE;
si->skip_levels = TRUE;
si->increment_levels = TRUE;
si->auto_play_next_level = TRUE;
- si->skip_scores_after_game = FALSE;
+ si->count_score_after_game = TRUE;
+ si->show_scores_after_game = TRUE;
si->time_limit = TRUE;
si->fullscreen = FALSE;
si->window_scaling_percent = STD_WINDOW_SCALING_PERCENT;
si->time_limit = TRUE;
si->fullscreen = FALSE;
si->window_scaling_percent = STD_WINDOW_SCALING_PERCENT;
@@
-9249,6
+9304,8
@@
static void setSetupInfoToDefaults(struct SetupInfo *si)
si->ask_on_escape = TRUE;
si->ask_on_escape_editor = TRUE;
si->ask_on_game_over = TRUE;
si->ask_on_escape = TRUE;
si->ask_on_escape_editor = TRUE;
si->ask_on_game_over = TRUE;
+ si->ask_on_quit_game = TRUE;
+ si->ask_on_quit_program = TRUE;
si->quick_switch = FALSE;
si->input_on_focus = FALSE;
si->prefer_aga_graphics = TRUE;
si->quick_switch = FALSE;
si->input_on_focus = FALSE;
si->prefer_aga_graphics = TRUE;
@@
-9357,6
+9414,8
@@
static void setSetupInfoToDefaults(struct SetupInfo *si)
si->editor.show_element_token = FALSE;
si->editor.show_element_token = FALSE;
+ si->editor.show_read_only_warning = TRUE;
+
si->editor.use_template_for_new_levels = TRUE;
si->shortcut.save_game = DEFAULT_KEY_SAVE_GAME;
si->editor.use_template_for_new_levels = TRUE;
si->shortcut.save_game = DEFAULT_KEY_SAVE_GAME;