X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=0ebccb98e79b10bcc08b6604c9b5e913354d5d13;hb=13543405e2c3cb994b33161dd12202205158f919;hp=a0389f4353bec975aedd718cb059a7f718bca2e5;hpb=eb09b9aa5521e286723c668030825cd0e3470c3c;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index a0389f43..0ebccb98 100644 --- a/src/files.c +++ b/src/files.c @@ -264,6 +264,11 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] = TYPE_BOOLEAN, CONF_VALUE_8_BIT(6), &li.continuous_snapping, TRUE }, + { + EL_PLAYER_1, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(12), + &li.shifted_relocation, FALSE + }, /* (these values are different for each player) */ { @@ -5948,6 +5953,10 @@ static void LoadLevel_InitVersion(struct LevelInfo *level, char *filename) change->target_element == EL_SOKOBAN_FIELD_PLAYER) change->target_element = EL_PLAYER_1; } + + /* not centering level after relocating player was default only in 3.2.3 */ + if (level->game_version == VERSION_IDENT(3,2,3,0)) /* (no pre-releases) */ + level->shifted_relocation = TRUE; } static void LoadLevel_InitElements(struct LevelInfo *level, char *filename) @@ -7675,31 +7684,32 @@ void SaveScore(int nr) #define SETUP_TOKEN_SOUND_SIMPLE 4 #define SETUP_TOKEN_TOONS 5 #define SETUP_TOKEN_SCROLL_DELAY 6 -#define SETUP_TOKEN_SOFT_SCROLLING 7 -#define SETUP_TOKEN_FADE_SCREENS 8 -#define SETUP_TOKEN_AUTORECORD 9 -#define SETUP_TOKEN_SHOW_TITLESCREEN 10 -#define SETUP_TOKEN_QUICK_DOORS 11 -#define SETUP_TOKEN_TEAM_MODE 12 -#define SETUP_TOKEN_HANDICAP 13 -#define SETUP_TOKEN_SKIP_LEVELS 14 -#define SETUP_TOKEN_TIME_LIMIT 15 -#define SETUP_TOKEN_FULLSCREEN 16 -#define SETUP_TOKEN_FULLSCREEN_MODE 17 -#define SETUP_TOKEN_ASK_ON_ESCAPE 18 -#define SETUP_TOKEN_ASK_ON_ESCAPE_EDITOR 19 -#define SETUP_TOKEN_QUICK_SWITCH 20 -#define SETUP_TOKEN_INPUT_ON_FOCUS 21 -#define SETUP_TOKEN_PREFER_AGA_GRAPHICS 22 -#define SETUP_TOKEN_GAME_FRAME_DELAY 23 -#define SETUP_TOKEN_GRAPHICS_SET 24 -#define SETUP_TOKEN_SOUNDS_SET 25 -#define SETUP_TOKEN_MUSIC_SET 26 -#define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS 27 -#define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS 28 -#define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC 29 - -#define NUM_GLOBAL_SETUP_TOKENS 30 +#define SETUP_TOKEN_SCROLL_DELAY_VALUE 7 +#define SETUP_TOKEN_SOFT_SCROLLING 8 +#define SETUP_TOKEN_FADE_SCREENS 9 +#define SETUP_TOKEN_AUTORECORD 10 +#define SETUP_TOKEN_SHOW_TITLESCREEN 11 +#define SETUP_TOKEN_QUICK_DOORS 12 +#define SETUP_TOKEN_TEAM_MODE 13 +#define SETUP_TOKEN_HANDICAP 14 +#define SETUP_TOKEN_SKIP_LEVELS 15 +#define SETUP_TOKEN_TIME_LIMIT 16 +#define SETUP_TOKEN_FULLSCREEN 17 +#define SETUP_TOKEN_FULLSCREEN_MODE 18 +#define SETUP_TOKEN_ASK_ON_ESCAPE 19 +#define SETUP_TOKEN_ASK_ON_ESCAPE_EDITOR 20 +#define SETUP_TOKEN_QUICK_SWITCH 21 +#define SETUP_TOKEN_INPUT_ON_FOCUS 22 +#define SETUP_TOKEN_PREFER_AGA_GRAPHICS 23 +#define SETUP_TOKEN_GAME_FRAME_DELAY 24 +#define SETUP_TOKEN_GRAPHICS_SET 25 +#define SETUP_TOKEN_SOUNDS_SET 26 +#define SETUP_TOKEN_MUSIC_SET 27 +#define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS 28 +#define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS 29 +#define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC 30 + +#define NUM_GLOBAL_SETUP_TOKENS 31 /* editor setup */ #define SETUP_TOKEN_EDITOR_EL_BOULDERDASH 0 @@ -7803,6 +7813,7 @@ static struct TokenInfo global_setup_tokens[] = { TYPE_SWITCH, &si.sound_simple, "simple_sound_effects" }, { TYPE_SWITCH, &si.toons, "toons" }, { TYPE_SWITCH, &si.scroll_delay, "scroll_delay" }, + { TYPE_INTEGER,&si.scroll_delay_value,"scroll_delay_value" }, { TYPE_SWITCH, &si.soft_scrolling, "soft_scrolling" }, { TYPE_SWITCH, &si.fade_screens, "fade_screens" }, { TYPE_SWITCH, &si.autorecord, "automatic_tape_recording" }, @@ -7957,6 +7968,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->double_buffering = TRUE; si->direct_draw = !si->double_buffering; si->scroll_delay = TRUE; + si->scroll_delay_value = STD_SCROLL_DELAY; si->soft_scrolling = TRUE; si->fade_screens = TRUE; si->autorecord = TRUE; @@ -8160,6 +8172,17 @@ void LoadSetup() player_name_new = get_corrected_login_name(setup.player_name); free(setup.player_name); setup.player_name = player_name_new; + + /* "scroll_delay: on(3) / off(0)" was replaced by scroll delay value */ + if (setup.scroll_delay == FALSE) + { + setup.scroll_delay_value = MIN_SCROLL_DELAY; + setup.scroll_delay = TRUE; /* now always "on" */ + } + + /* make sure that scroll delay value stays inside valid range */ + setup.scroll_delay_value = + MIN(MAX(MIN_SCROLL_DELAY, setup.scroll_delay_value), MAX_SCROLL_DELAY); } else Error(ERR_WARN, "using default setup values"); @@ -8321,33 +8344,6 @@ void LoadCustomElementDescriptions() freeSetupFileHash(setup_file_hash); } -static int get_token_parameter_value(char *token, char *value_raw) -{ - char *suffix; - - if (token == NULL || value_raw == NULL) - return ARG_UNDEFINED_VALUE; - - suffix = strrchr(token, '.'); - if (suffix == NULL) - suffix = token; - - if (strncmp(suffix, ".font", 5) == 0) - { - int i; - - /* !!! OPTIMIZE THIS BY USING HASH !!! */ - for (i = 0; i < NUM_FONTS; i++) - if (strEqual(value_raw, font_info[i].token_name)) - return i; - - /* if font not found, use reliable default value */ - return FONT_INITIAL_1; - } - - return get_parameter_value(value_raw, suffix, TYPE_INTEGER); -} - static void LoadSpecialMenuDesignSettingsFromFilename(char *filename) { static struct TitleMessageInfo tmi; @@ -8364,8 +8360,12 @@ static void LoadSpecialMenuDesignSettingsFromFilename(char *filename) { TYPE_INTEGER, &tmi.font, ".font" }, { TYPE_BOOLEAN, &tmi.autowrap, ".autowrap" }, { TYPE_BOOLEAN, &tmi.centered, ".centered" }, - { TYPE_BOOLEAN, &tmi.skip_comments, ".skip_comments" }, + { TYPE_BOOLEAN, &tmi.parse_comments, ".parse_comments" }, { TYPE_INTEGER, &tmi.sort_priority, ".sort_priority" }, + { TYPE_INTEGER, &tmi.fade_mode, ".fade_mode" }, + { TYPE_INTEGER, &tmi.fade_delay, ".fade_delay" }, + { TYPE_INTEGER, &tmi.post_delay, ".post_delay" }, + { TYPE_INTEGER, &tmi.auto_delay, ".auto_delay" }, { -1, NULL, NULL } }; @@ -8391,7 +8391,10 @@ static void LoadSpecialMenuDesignSettingsFromFilename(char *filename) if ((setup_file_hash = loadSetupFileHash(filename)) == NULL) return; + /* the following initializes hierarchical values from dynamic configuration */ + /* special case: initialize with default values that may be overwritten */ + /* (e.g., init "menu.draw_xoffset.INFO" from "menu.draw_xoffset") */ for (i = 0; i < NUM_SPECIAL_GFX_ARGS; i++) { char *value_1 = getHashEntry(setup_file_hash, "menu.draw_xoffset"); @@ -8407,6 +8410,7 @@ static void LoadSpecialMenuDesignSettingsFromFilename(char *filename) } /* special case: initialize with default values that may be overwritten */ + /* (eg, init "menu.draw_xoffset.INFO[MUSIC]" from "menu.draw_xoffset.INFO") */ for (i = 0; i < NUM_SPECIAL_GFX_INFO_ARGS; i++) { char *value_1 = getHashEntry(setup_file_hash, "menu.draw_xoffset.INFO"); @@ -8419,6 +8423,7 @@ static void LoadSpecialMenuDesignSettingsFromFilename(char *filename) } /* special case: initialize with default values that may be overwritten */ + /* (e.g., init "titlemessage_1.fade_mode" from "[titlemessage].fade_mode") */ for (i = 0; titlemessage_arrays[i].array != NULL; i++) { struct TitleMessageInfo *array = titlemessage_arrays[i].array; @@ -8468,7 +8473,7 @@ void LoadSpecialMenuDesignSettings() char *filename_base = UNDEFINED_FILENAME, *filename_local; int i, j; - /* always start with reliable default values from default config */ + /* always start with reliable default values from static default config */ for (i = 0; image_config_vars[i].token != NULL; i++) for (j = 0; image_config[j].token != NULL; j++) if (strEqual(image_config_vars[i].token, image_config[j].token)) @@ -8476,6 +8481,27 @@ void LoadSpecialMenuDesignSettings() get_token_parameter_value(image_config_vars[i].token, image_config[j].value); + /* the following initializes hierarchical values from static configuration */ + + /* special case: initialize "ARG_DEFAULT" values in static default config */ + /* (e.g., initialize "[titlemessage].fade_mode" from "[title].fade_mode") */ + titlemessage_initial_default.fade_mode = title_initial_default.fade_mode; + titlemessage_initial_default.fade_delay = title_initial_default.fade_delay; + titlemessage_initial_default.post_delay = title_initial_default.post_delay; + titlemessage_initial_default.auto_delay = title_initial_default.auto_delay; + titlemessage_default.fade_mode = title_default.fade_mode; + titlemessage_default.fade_delay = title_default.fade_delay; + titlemessage_default.post_delay = title_default.post_delay; + titlemessage_default.auto_delay = title_default.auto_delay; + + /* special case: initialize "ARG_DEFAULT" values in static default config */ + /* (e.g., init "titlemessage_1.fade_mode" from "[titlemessage].fade_mode") */ + for (i = 0; i < MAX_NUM_TITLE_MESSAGES; i++) + { + titlemessage_initial[i] = titlemessage_initial_default; + titlemessage[i] = titlemessage_default; + } + if (!SETUP_OVERRIDE_ARTWORK(setup, ARTWORK_TYPE_GRAPHICS)) { /* first look for special settings configured in level series config */