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) */
{
&xx_envelope.ysize, MAX_ENVELOPE_YSIZE,
},
+ {
+ -1, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(3),
+ &xx_envelope.autowrap, FALSE
+ },
+ {
+ -1, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(4),
+ &xx_envelope.centered, FALSE
+ },
+
{
-1, -1,
TYPE_STRING, CONF_VALUE_BYTES(1),
break;
case 0x0e77: /* quicksand (boulder) */
- element = EL_QUICKSAND_FULL;
+ element = EL_QUICKSAND_FAST_FULL;
break;
case 0x0e99: /* slow quicksand (boulder) */
break;
case 0x0ed2:
- element = EL_EXIT_OPEN;
+ element = EL_EM_EXIT_OPEN;
break;
case 0x0ee3:
- element = EL_EXIT_CLOSED;
+ element = EL_EM_EXIT_CLOSED;
break;
case 0x0eeb:
- element = EL_STEEL_EXIT_OPEN;
+ element = EL_EM_STEEL_EXIT_OPEN;
break;
case 0x0efc:
- element = EL_STEEL_EXIT_CLOSED;
+ element = EL_EM_STEEL_EXIT_CLOSED;
break;
case 0x0f4f: /* dynamite (lit 1) */
- element = EL_DYNAMITE_ACTIVE;
+ element = EL_EM_DYNAMITE_ACTIVE;
break;
case 0x0f57: /* dynamite (lit 2) */
- element = EL_DYNAMITE_ACTIVE;
+ element = EL_EM_DYNAMITE_ACTIVE;
break;
case 0x0f5f: /* dynamite (lit 3) */
- element = EL_DYNAMITE_ACTIVE;
+ element = EL_EM_DYNAMITE_ACTIVE;
break;
case 0x0f67: /* dynamite (lit 4) */
- element = EL_DYNAMITE_ACTIVE;
+ element = EL_EM_DYNAMITE_ACTIVE;
break;
case 0x0f81:
break;
case 0x0fb9:
- element = EL_MAGIC_WALL;
+ element = EL_DC_MAGIC_WALL;
break;
case 0x0fd0:
break;
case 0x1437:
- element = EL_SWITCHGATE_SWITCH_UP;
+ element = EL_DC_SWITCHGATE_SWITCH_UP;
break;
case 0x143a:
break;
case 0x14ce: /* growing steel wall (left/right) */
- element = EL_EXPANDABLE_WALL_HORIZONTAL;
+ element = EL_EXPANDABLE_STEELWALL_HORIZONTAL;
break;
case 0x14df: /* growing steel wall (up/down) */
- element = EL_EXPANDABLE_WALL_VERTICAL;
+ element = EL_EXPANDABLE_STEELWALL_VERTICAL;
break;
case 0x14e8: /* growing steel wall (up/down/left/right) */
- element = EL_EXPANDABLE_WALL_ANY;
+ element = EL_EXPANDABLE_STEELWALL_ANY;
break;
case 0x14e9:
- element = EL_SHIELD_NORMAL;
+ element = EL_SHIELD_DEADLY;
break;
case 0x1501:
break;
case 0x1578: /* quicksand (empty) */
- element = EL_QUICKSAND_EMPTY;
+ element = EL_QUICKSAND_FAST_EMPTY;
break;
case 0x1579: /* slow quicksand (empty) */
/* EL_SAND */
/* 0x1590 - 0x159f: */
- /* EL_LANDMINE */
+ /* EL_DC_LANDMINE */
case 0x15a0:
- element = EL_DYNAMITE;
+ element = EL_EM_DYNAMITE;
break;
case 0x15a1: /* key (red) */
break;
case 0x15a5: /* key (white) */
- element = EL_KEY_WHITE;
+ element = EL_DC_KEY_WHITE;
break;
case 0x15a6:
break;
case 0x1689: /* gate (white) */
- element = EL_DOOR_WHITE;
+ element = EL_DC_GATE_WHITE;
break;
case 0x168a: /* secret gate (white) */
- element = EL_DOOR_WHITE_GRAY;
+ element = EL_DC_GATE_WHITE_GRAY;
break;
case 0x168b: /* secret gate (no key) */
- element = EL_UNKNOWN;
+ element = EL_DC_GATE_FAKE_GRAY;
break;
case 0x168c:
break;
case 0x168d:
- element = EL_TIMEGATE_SWITCH;
+ element = EL_DC_TIMEGATE_SWITCH;
break;
case 0x168e:
else if (element >= 0x157c && element <= 0x158b)
element = EL_SAND;
else if (element >= 0x1590 && element <= 0x159f)
- element = EL_LANDMINE;
+ element = EL_DC_LANDMINE;
else if (element >= 0x16bc && element <= 0x16cb)
element = EL_INVISIBLE_SAND;
else
level->envelope[0].text[envelope_size] = '\0';
+ level->envelope[0].xsize = MAX_ENVELOPE_XSIZE;
+ level->envelope[0].ysize = 10;
+ level->envelope[0].autowrap = TRUE;
+ level->envelope[0].centered = TRUE;
+
for (i = 0; i < level_name_len; i++)
level->name[i] = header[level_name_pos + 1 + i];
level->name[level_name_len] = '\0';
fclose(file);
+ /* 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;
+
+#if 0
/* Diamond Caves II levels are always surrounded by indestructible wall, but
not necessarily in a rectangular way -- fill with invisible steel wall */
+ /* !!! not always true !!! keep level and set BorderElement instead !!! */
+
for (y = 0; y < level->fieldy; y++) for (x = 0; x < level->fieldx; x++)
{
#if 1
level->field, level->fieldx, level->fieldy);
#endif
}
+#endif
}
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)
lev_fieldy = level->fieldy;
/* determine border element for this level */
- SetBorderElement();
+ if (level->file_info.type == LEVEL_FILE_TYPE_DC)
+ BorderElement = EL_EMPTY; /* (in editor, SetBorderElement() is used) */
+ else
+ SetBorderElement();
}
static void LoadLevel_InitNativeEngines(struct LevelInfo *level,char *filename)
#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_GRAPHICS_SET 23
-#define SETUP_TOKEN_SOUNDS_SET 24
-#define SETUP_TOKEN_MUSIC_SET 25
-#define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS 26
-#define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS 27
-#define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC 28
-
-#define NUM_GLOBAL_SETUP_TOKENS 29
+#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
#define NUM_PLAYER_SETUP_TOKENS 16
/* system setup */
-#define SETUP_TOKEN_SYSTEM_SDL_AUDIODRIVER 0
-#define SETUP_TOKEN_SYSTEM_AUDIO_FRAGMENT_SIZE 1
+#define SETUP_TOKEN_SYSTEM_SDL_VIDEODRIVER 0
+#define SETUP_TOKEN_SYSTEM_SDL_AUDIODRIVER 1
+#define SETUP_TOKEN_SYSTEM_AUDIO_FRAGMENT_SIZE 2
-#define NUM_SYSTEM_SETUP_TOKENS 2
+#define NUM_SYSTEM_SETUP_TOKENS 3
/* options setup */
#define SETUP_TOKEN_OPTIONS_VERBOSE 0
{ 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" },
{ TYPE_SWITCH, &si.quick_switch, "quick_player_switch" },
{ TYPE_SWITCH, &si.input_on_focus, "input_on_focus" },
{ TYPE_SWITCH, &si.prefer_aga_graphics, "prefer_aga_graphics" },
+ { TYPE_INTEGER,&si.game_frame_delay, "game_frame_delay" },
{ TYPE_STRING, &si.graphics_set, "graphics_set" },
{ TYPE_STRING, &si.sounds_set, "sounds_set" },
{ TYPE_STRING, &si.music_set, "music_set" },
static struct TokenInfo system_setup_tokens[] =
{
+ { TYPE_STRING, &syi.sdl_videodriver, "system.sdl_videodriver" },
{ TYPE_STRING, &syi.sdl_audiodriver, "system.sdl_audiodriver" },
{ TYPE_INTEGER, &syi.audio_fragment_size,"system.audio_fragment_size" },
};
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;
si->quick_switch = FALSE;
si->input_on_focus = FALSE;
si->prefer_aga_graphics = TRUE;
+ si->game_frame_delay = GAME_FRAME_DELAY;
si->graphics_set = getStringCopy(GFX_CLASSIC_SUBDIR);
si->sounds_set = getStringCopy(SND_CLASSIC_SUBDIR);
si->input[i].key.drop = (i == 0 ? DEFAULT_KEY_DROP : KSYM_UNDEFINED);
}
+ si->system.sdl_videodriver = getStringCopy(ARG_DEFAULT);
si->system.sdl_audiodriver = getStringCopy(ARG_DEFAULT);
si->system.audio_fragment_size = DEFAULT_AUDIO_FRAGMENT_SIZE;
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");
freeSetupFileHash(setup_file_hash);
}
+static int getElementFromToken(char *token)
+{
+ int i;
+
+ /* !!! OPTIMIZE THIS BY USING HASH !!! */
+ for (i = 0; i < MAX_NUM_ELEMENTS; i++)
+ if (strEqual(token, element_info[i].token_name))
+ return i;
+
+ Error(ERR_WARN, "unknown element token '%s'", token);
+
+ return EL_UNDEFINED;
+}
+
+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 1
+ if (strEqual(suffix, ".element"))
+ return getElementFromToken(value_raw);
+#endif
+
+#if 0
+ 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;
+ }
+#endif
+
+ return get_parameter_value(value_raw, suffix, TYPE_INTEGER);
+}
+
static void LoadSpecialMenuDesignSettingsFromFilename(char *filename)
{
+ static struct TitleMessageInfo tmi;
+ static struct TokenInfo titlemessage_tokens[] =
+ {
+ { TYPE_INTEGER, &tmi.x, ".x" },
+ { TYPE_INTEGER, &tmi.y, ".y" },
+ { TYPE_INTEGER, &tmi.width, ".width" },
+ { TYPE_INTEGER, &tmi.height, ".height" },
+ { TYPE_INTEGER, &tmi.chars, ".chars" },
+ { TYPE_INTEGER, &tmi.lines, ".lines" },
+ { TYPE_INTEGER, &tmi.align, ".align" },
+ { TYPE_INTEGER, &tmi.valign, ".valign" },
+ { TYPE_INTEGER, &tmi.font, ".font" },
+ { TYPE_BOOLEAN, &tmi.autowrap, ".autowrap" },
+ { TYPE_BOOLEAN, &tmi.centered, ".centered" },
+ { 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 }
+ };
+ static struct
+ {
+ struct TitleMessageInfo *array;
+ char *text;
+ }
+ titlemessage_arrays[] =
+ {
+ { titlemessage_initial, "[titlemessage_initial]" },
+ { titlemessage, "[titlemessage]" },
+
+ { NULL, NULL }
+ };
SetupFileHash *setup_file_hash;
- int i;
+ int i, j, k;
#if 0
printf("LoadSpecialMenuDesignSettings from file '%s' ...\n", 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_x = getHashEntry(setup_file_hash, "menu.draw_xoffset");
- char *value_y = getHashEntry(setup_file_hash, "menu.draw_yoffset");
- char *list_size = getHashEntry(setup_file_hash, "menu.list_size");
+ char *value_1 = getHashEntry(setup_file_hash, "menu.draw_xoffset");
+ char *value_2 = getHashEntry(setup_file_hash, "menu.draw_yoffset");
+ char *value_3 = getHashEntry(setup_file_hash, "menu.list_size");
- if (value_x != NULL)
- menu.draw_xoffset[i] = get_integer_from_string(value_x);
- if (value_y != NULL)
- menu.draw_yoffset[i] = get_integer_from_string(value_y);
- if (list_size != NULL)
- menu.list_size[i] = get_integer_from_string(list_size);
+ if (value_1 != NULL)
+ menu.draw_xoffset[i] = get_integer_from_string(value_1);
+ if (value_2 != NULL)
+ menu.draw_yoffset[i] = get_integer_from_string(value_2);
+ if (value_3 != NULL)
+ menu.list_size[i] = get_integer_from_string(value_3);
}
/* 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_x = getHashEntry(setup_file_hash, "menu.draw_xoffset.INFO");
- char *value_y = getHashEntry(setup_file_hash, "menu.draw_yoffset.INFO");
+ char *value_1 = getHashEntry(setup_file_hash, "menu.draw_xoffset.INFO");
+ char *value_2 = getHashEntry(setup_file_hash, "menu.draw_yoffset.INFO");
+
+ if (value_1 != NULL)
+ menu.draw_xoffset_info[i] = get_integer_from_string(value_1);
+ if (value_2 != NULL)
+ menu.draw_yoffset_info[i] = get_integer_from_string(value_2);
+ }
+
+ /* special case: initialize with default values that may be overwritten */
+ /* (eg, init "menu.enter_screen.SCORES.xyz" from "menu.enter_screen.xyz") */
+ for (i = 0; i < NUM_SPECIAL_GFX_ARGS; i++)
+ {
+ char *token_1 = "menu.enter_screen.fade_mode";
+ char *token_2 = "menu.enter_screen.fade_delay";
+ char *token_3 = "menu.enter_screen.post_delay";
+ char *token_4 = "menu.leave_screen.fade_mode";
+ char *token_5 = "menu.leave_screen.fade_delay";
+ char *token_6 = "menu.leave_screen.post_delay";
+ char *value_1 = getHashEntry(setup_file_hash, token_1);
+ char *value_2 = getHashEntry(setup_file_hash, token_2);
+ char *value_3 = getHashEntry(setup_file_hash, token_3);
+ char *value_4 = getHashEntry(setup_file_hash, token_4);
+ char *value_5 = getHashEntry(setup_file_hash, token_5);
+ char *value_6 = getHashEntry(setup_file_hash, token_6);
+
+ if (value_1 != NULL)
+ menu.enter_screen[i].fade_mode = get_token_parameter_value(token_1,
+ value_1);
+ if (value_2 != NULL)
+ menu.enter_screen[i].fade_delay = get_token_parameter_value(token_2,
+ value_2);
+ if (value_3 != NULL)
+ menu.enter_screen[i].post_delay = get_token_parameter_value(token_3,
+ value_3);
+ if (value_4 != NULL)
+ menu.leave_screen[i].fade_mode = get_token_parameter_value(token_4,
+ value_4);
+ if (value_5 != NULL)
+ menu.leave_screen[i].fade_delay = get_token_parameter_value(token_5,
+ value_5);
+ if (value_6 != NULL)
+ menu.leave_screen[i].post_delay = get_token_parameter_value(token_6,
+ value_6);
+ }
+
+ /* 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;
+ char *base_token = titlemessage_arrays[i].text;
+
+ for (j = 0; titlemessage_tokens[j].type != -1; j++)
+ {
+ char *token = getStringCat2(base_token, titlemessage_tokens[j].text);
+ char *value = getHashEntry(setup_file_hash, token);
+
+ if (value != NULL)
+ {
+ int parameter_value = get_token_parameter_value(token, value);
+
+ for (k = 0; k < MAX_NUM_TITLE_MESSAGES; k++)
+ {
+ tmi = array[k];
- if (value_x != NULL)
- menu.draw_xoffset_info[i] = get_integer_from_string(value_x);
- if (value_y != NULL)
- menu.draw_yoffset_info[i] = get_integer_from_string(value_y);
+ if (titlemessage_tokens[j].type == TYPE_INTEGER)
+ *(boolean *)titlemessage_tokens[j].value = (boolean)parameter_value;
+ else
+ *(int *)titlemessage_tokens[j].value = (int)parameter_value;
+
+ array[k] = tmi;
+ }
+ }
+
+ free(token);
+ }
}
/* read (and overwrite with) values that may be specified in config file */
if (value != NULL)
*image_config_vars[i].value =
- get_auto_parameter_value(image_config_vars[i].token, value);
+ get_token_parameter_value(image_config_vars[i].token, value);
}
freeSetupFileHash(setup_file_hash);
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))
*image_config_vars[i].value =
- get_auto_parameter_value(image_config_vars[i].token,
- image_config[j].value);
+ 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;
+ }
+
+ /* special case: initialize "ARG_DEFAULT" values in static default config */
+ /* (eg, init "menu.enter_screen.SCORES.xyz" from "menu.enter_screen.xyz") */
+ for (i = 0; i < NUM_SPECIAL_GFX_ARGS; i++)
+ {
+ menu.enter_screen[i] = menu.enter_screen[GFX_SPECIAL_ARG_DEFAULT];
+ menu.leave_screen[i] = menu.leave_screen[GFX_SPECIAL_ARG_DEFAULT];
+ }
if (!SETUP_OVERRIDE_ARTWORK(setup, ARTWORK_TYPE_GRAPHICS))
{
{
if (num_unknown_tokens == 0)
{
- Error(ERR_RETURN_LINE, "-");
- Error(ERR_RETURN, "warning: unknown token(s) found in config file:");
- Error(ERR_RETURN, "- config file: '%s'", filename);
+ Error(ERR_INFO_LINE, "-");
+ Error(ERR_INFO, "warning: unknown token(s) found in config file:");
+ Error(ERR_INFO, "- config file: '%s'", filename);
num_unknown_tokens++;
}
- Error(ERR_RETURN, "- token: '%s'", list->token);
+ Error(ERR_INFO, "- token: '%s'", list->token);
}
}
if (num_unknown_tokens > 0)
- Error(ERR_RETURN_LINE, "-");
+ Error(ERR_INFO_LINE, "-");
while (*num_elements % 4) /* pad with empty elements, if needed */
(*elements)[(*num_elements)++] = EL_EMPTY;
{
if (token_nr == 0)
{
- Error(ERR_RETURN_LINE, "-");
- Error(ERR_RETURN, "warning: unknown token(s) found in config file:");
- Error(ERR_RETURN, "- config file: '%s'", filename);
+ Error(ERR_INFO_LINE, "-");
+ Error(ERR_INFO, "warning: unknown token(s) found in config file:");
+ Error(ERR_INFO, "- config file: '%s'", filename);
}
- Error(ERR_RETURN, "- token: '%s'", token);
+ Error(ERR_INFO, "- token: '%s'", token);
}
void print_unknown_token_end(int token_nr)
{
if (token_nr > 0)
- Error(ERR_RETURN_LINE, "-");
+ Error(ERR_INFO_LINE, "-");
}
void LoadHelpAnimInfo()