&li.auto_count_gems, FALSE
},
+ {
+ -1, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(11),
+ &li.solved_by_one_player, FALSE
+ },
+
{
-1, -1,
-1, -1,
TYPE_INTEGER, CONF_VALUE_8_BIT(4),
&li.game_of_life[3], 3
},
+ {
+ EL_GAME_OF_LIFE, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(5),
+ &li.use_life_bugs, FALSE
+ },
{
EL_BIOMAZE, -1,
return FALSE;
}
-static struct DateInfo getCurrentDate()
+static struct DateInfo getCurrentDate(void)
{
time_t epoch_seconds = time(NULL);
struct tm *now = localtime(&epoch_seconds);
change->has_event[i] = FALSE;
}
-static void resetEventBits()
+static void resetEventBits(void)
{
int i;
int getMappedElement_SB(int, boolean);
-static void ActivateLevelTemplate()
+static void ActivateLevelTemplate(void)
{
int x, y;
return filetype;
}
-char *getLocalLevelTemplateFilename()
+char *getLocalLevelTemplateFilename(void)
{
return getDefaultLevelFilename(-1);
}
-char *getGlobalLevelTemplateFilename()
+char *getGlobalLevelTemplateFilename(void)
{
/* global variable "leveldir_current" must be modified in the loop below */
LevelDirTree *leveldir_current_last = leveldir_current;
/* functions for loading R'n'D level */
/* ------------------------------------------------------------------------- */
-int getMappedElement(int element)
+static int getMappedElement(int element)
{
/* remap some (historic, now obsolete) elements */
return element;
}
-int getMappedElementByVersion(int element, int game_version)
+static int getMappedElementByVersion(int element, int game_version)
{
/* remap some elements due to certain game version */
/* functions for loading EM level */
/* ------------------------------------------------------------------------- */
-void CopyNativeLevel_RND_to_EM(struct LevelInfo *level)
+static void CopyNativeLevel_RND_to_EM(struct LevelInfo *level)
{
static int ball_xy[8][2] =
{
}
}
-void CopyNativeLevel_EM_to_RND(struct LevelInfo *level)
+static void CopyNativeLevel_EM_to_RND(struct LevelInfo *level)
{
static int ball_xy[8][2] =
{
/* functions for loading SP level */
/* ------------------------------------------------------------------------- */
-void CopyNativeLevel_RND_to_SP(struct LevelInfo *level)
+static void CopyNativeLevel_RND_to_SP(struct LevelInfo *level)
{
struct LevelInfo_SP *level_sp = level->native_sp_level;
LevelInfoType *header = &level_sp->header;
}
}
-void CopyNativeLevel_SP_to_RND(struct LevelInfo *level)
+static void CopyNativeLevel_SP_to_RND(struct LevelInfo *level)
{
struct LevelInfo_SP *level_sp = level->native_sp_level;
LevelInfoType *header = &level_sp->header;
demo->is_available = TRUE;
}
-static void setTapeInfoToDefaults();
+static void setTapeInfoToDefaults(void);
static void CopyNativeTape_SP_to_RND(struct LevelInfo *level)
{
/* functions for loading MM level */
/* ------------------------------------------------------------------------- */
-void CopyNativeLevel_RND_to_MM(struct LevelInfo *level)
+static void CopyNativeLevel_RND_to_MM(struct LevelInfo *level)
{
struct LevelInfo_MM *level_mm = level->native_mm_level;
int x, y;
level_mm->field[x][y] = map_element_RND_to_MM(level->field[x][y]);
}
-void CopyNativeLevel_MM_to_RND(struct LevelInfo *level)
+static void CopyNativeLevel_MM_to_RND(struct LevelInfo *level)
{
struct LevelInfo_MM *level_mm = level->native_mm_level;
int x, y;
#define DC_LEVEL_HEADER_SIZE 344
-unsigned short getDecodedWord_DC(unsigned short data_encoded, boolean init)
+static unsigned short getDecodedWord_DC(unsigned short data_encoded,
+ boolean init)
{
static int last_data_encoded;
static int offset1;
return data_decoded;
}
-int getMappedElement_DC(int element)
+static int getMappedElement_DC(int element)
{
switch (element)
{
level->extra_time_score = level->score[SC_TIME_BONUS];
}
+ /* game logic of "game of life" and "biomaze" was buggy before 4.1.1.1 */
+ if (level->game_version < VERSION_IDENT(4,1,1,1))
+ level->use_life_bugs = TRUE;
+
if (level->game_version < VERSION_IDENT(3,2,0,7))
{
/* default behaviour for snapping was "not continuous" before 3.2.0-7 */
/* EM style elements always chain-exploded in R'n'D engine before 3.2.6 */
if (level->game_version < VERSION_IDENT(3,2,6,0))
level->em_explodes_by_fire = TRUE;
+
+ /* levels were solved by the first player entering an exit up to 4.1.0.0 */
+ if (level->game_version <= VERSION_IDENT(4,1,0,0))
+ level->solved_by_one_player = TRUE;
}
static void LoadLevel_InitStandardElements(struct LevelInfo *level)
CopyNativeLevel_RND_to_Native(level);
}
-static void LoadLevelTemplate_LoadAndInit()
+static void LoadLevelTemplate_LoadAndInit(void)
{
LoadLevelFromFileInfo(&level_template, &level_template.file_info, FALSE);
SaveLevelFromFilename(&level, filename, FALSE);
}
-void SaveLevelTemplate()
+void SaveLevelTemplate(void)
{
char *filename = getLocalLevelTemplateFilename();
/* tape file functions */
/* ========================================================================= */
-static void setTapeInfoToDefaults()
+static void setTapeInfoToDefaults(void)
{
int i;
return chunk_size;
}
-void LoadTape_SokobanSolution(char *filename)
+static void LoadTape_SokobanSolution(char *filename)
{
File *file;
int move_delay = TILESIZE / level.initial_player_stepsize[0];
SETUP_TOKEN_WINDOW_SCALING_PERCENT,
SETUP_TOKEN_WINDOW_SCALING_QUALITY,
SETUP_TOKEN_SCREEN_RENDERING_MODE,
+ SETUP_TOKEN_VSYNC_MODE,
SETUP_TOKEN_ASK_ON_ESCAPE,
SETUP_TOKEN_ASK_ON_ESCAPE_EDITOR,
SETUP_TOKEN_QUICK_SWITCH,
SETUP_TOKEN_INPUT_ON_FOCUS,
SETUP_TOKEN_PREFER_AGA_GRAPHICS,
+ SETUP_TOKEN_GAME_SPEED_EXTENDED,
SETUP_TOKEN_GAME_FRAME_DELAY,
SETUP_TOKEN_SP_SHOW_BORDER_ELEMENTS,
SETUP_TOKEN_SMALL_GAME_GRAPHICS,
SETUP_TOKEN_VOLUME_MUSIC,
SETUP_TOKEN_NETWORK_MODE,
SETUP_TOKEN_NETWORK_PLAYER_NR,
+ SETUP_TOKEN_NETWORK_SERVER_HOSTNAME,
SETUP_TOKEN_TOUCH_CONTROL_TYPE,
SETUP_TOKEN_TOUCH_MOVE_DISTANCE,
SETUP_TOKEN_TOUCH_DROP_DISTANCE,
{ TYPE_INTEGER,&si.window_scaling_percent, "window_scaling_percent" },
{ TYPE_STRING, &si.window_scaling_quality, "window_scaling_quality" },
{ TYPE_STRING, &si.screen_rendering_mode, "screen_rendering_mode" },
+ { TYPE_STRING, &si.vsync_mode, "vsync_mode" },
{ TYPE_SWITCH, &si.ask_on_escape, "ask_on_escape" },
{ TYPE_SWITCH, &si.ask_on_escape_editor, "ask_on_escape_editor" },
{ 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_SWITCH, &si.game_speed_extended, "game_speed_extended" },
{ TYPE_INTEGER,&si.game_frame_delay, "game_frame_delay" },
{ TYPE_SWITCH, &si.sp_show_border_elements, "sp_show_border_elements" },
{ TYPE_SWITCH, &si.small_game_graphics, "small_game_graphics" },
{ TYPE_INTEGER,&si.volume_music, "volume_music" },
{ TYPE_SWITCH, &si.network_mode, "network_mode" },
{ TYPE_PLAYER, &si.network_player_nr, "network_player" },
+ { TYPE_STRING, &si.network_server_hostname, "network_server_hostname" },
{ TYPE_STRING, &si.touch.control_type, "touch.control_type" },
{ TYPE_INTEGER,&si.touch.move_distance, "touch.move_distance" },
{ TYPE_INTEGER,&si.touch.drop_distance, "touch.drop_distance" },
si->window_scaling_percent = STD_WINDOW_SCALING_PERCENT;
si->window_scaling_quality = getStringCopy(SCALING_QUALITY_DEFAULT);
si->screen_rendering_mode = getStringCopy(STR_SPECIAL_RENDERING_DEFAULT);
+ si->vsync_mode = getStringCopy(STR_VSYNC_MODE_DEFAULT);
si->ask_on_escape = TRUE;
si->ask_on_escape_editor = TRUE;
si->quick_switch = FALSE;
si->input_on_focus = FALSE;
si->prefer_aga_graphics = TRUE;
+ si->game_speed_extended = FALSE;
si->game_frame_delay = GAME_FRAME_DELAY;
si->sp_show_border_elements = FALSE;
si->small_game_graphics = FALSE;
si->network_mode = FALSE;
si->network_player_nr = 0; /* first player */
+ si->network_server_hostname = getStringCopy(STR_NETWORK_AUTO_DETECT);
si->touch.control_type = getStringCopy(TOUCH_CONTROL_DEFAULT);
si->touch.move_distance = TOUCH_MOVE_DISTANCE_DEFAULT; /* percent */
}
}
-static void LoadSetup_SpecialPostProcessing()
+static void LoadSetup_SpecialPostProcessing(void)
{
char *player_name_new;
MIN(MAX(MIN_SCROLL_DELAY, setup.scroll_delay_value), MAX_SCROLL_DELAY);
}
-void LoadSetup()
+void LoadSetup(void)
{
char *filename;
LoadSetup_SpecialPostProcessing();
}
-void LoadSetup_AutoSetup()
+void LoadSetup_AutoSetup(void)
{
char *filename = getPath2(getSetupDir(), AUTOSETUP_FILENAME);
SetupFileHash *setup_file_hash = NULL;
free(filename);
}
-void LoadSetup_EditorCascade()
+void LoadSetup_EditorCascade(void)
{
char *filename = getPath2(getSetupDir(), EDITORCASCADE_FILENAME);
SetupFileHash *setup_file_hash = NULL;
fclose(file);
}
-void SaveSetup()
+void SaveSetup(void)
{
char *filename = getSetupFilename();
FILE *file;
SetFilePermissions(filename, PERMS_PRIVATE);
}
-void SaveSetup_AutoSetup()
+void SaveSetup_AutoSetup(void)
{
char *filename = getPath2(getSetupDir(), AUTOSETUP_FILENAME);
FILE *file;
free(filename);
}
-void SaveSetup_EditorCascade()
+void SaveSetup_EditorCascade(void)
{
char *filename = getPath2(getSetupDir(), EDITORCASCADE_FILENAME);
FILE *file;
free(filename);
}
-void LoadCustomElementDescriptions()
+void LoadCustomElementDescriptions(void)
{
char *filename = getCustomArtworkConfigFilename(ARTWORK_TYPE_GRAPHICS);
SetupFileHash *setup_file_hash;
return get_parameter_value(value_raw, suffix, TYPE_INTEGER);
}
-void InitMenuDesignSettings_Static()
+void InitMenuDesignSettings_Static(void)
{
int i;
}
}
-static void InitMenuDesignSettings_SpecialPreProcessing()
+static void InitMenuDesignSettings_SpecialPreProcessing(void)
{
int i;
}
}
-static void InitMenuDesignSettings_SpecialPostProcessing()
+static void InitMenuDesignSettings_SpecialPostProcessing(void)
{
static struct
{
*game_buttons_xy[i].dst = *game_buttons_xy[i].src;
}
-static void InitMenuDesignSettings_SpecialPostProcessing_AfterGraphics()
+static void InitMenuDesignSettings_SpecialPostProcessing_AfterGraphics(void)
{
static struct
{
freeSetupFileHash(setup_file_hash);
}
-void LoadMenuDesignSettings()
+void LoadMenuDesignSettings(void)
{
char *filename_base = UNDEFINED_FILENAME, *filename_local;
InitMenuDesignSettings_SpecialPostProcessing();
}
-void LoadMenuDesignSettings_AfterGraphics()
+void LoadMenuDesignSettings_AfterGraphics(void)
{
InitMenuDesignSettings_SpecialPostProcessing_AfterGraphics();
}
return music_info_listed_ext(list, basename, TRUE);
}
-void LoadMusicInfo()
+void LoadMusicInfo(void)
{
char *music_directory = getCustomMusicDirectory();
int num_music = getMusicListSize();
}
}
-void add_helpanim_entry(int element, int action, int direction, int delay,
- int *num_list_entries)
+static void add_helpanim_entry(int element, int action, int direction,
+ int delay, int *num_list_entries)
{
struct HelpAnimInfo *new_list_entry;
(*num_list_entries)++;
new_list_entry->delay = delay;
}
-void print_unknown_token(char *filename, char *token, int token_nr)
+static void print_unknown_token(char *filename, char *token, int token_nr)
{
if (token_nr == 0)
{
Error(ERR_INFO, "- token: '%s'", token);
}
-void print_unknown_token_end(int token_nr)
+static void print_unknown_token_end(int token_nr)
{
if (token_nr > 0)
Error(ERR_INFO_LINE, "-");
}
-void LoadHelpAnimInfo()
+void LoadHelpAnimInfo(void)
{
char *filename = getHelpAnimFilename();
SetupFileList *setup_file_list = NULL, *list;
#endif
}
-void LoadHelpTextInfo()
+void LoadHelpTextInfo(void)
{
char *filename = getHelpTextFilename();
int i;
#define MAX_NUM_CONVERT_LEVELS 1000
-void ConvertLevels()
+void ConvertLevels(void)
{
static LevelDirTree *convert_leveldir = NULL;
static int convert_level_nr = -1;
/* create and save images for use in level sketches (raw BMP format) */
/* ------------------------------------------------------------------------- */
-void CreateLevelSketchImages()
+void CreateLevelSketchImages(void)
{
#if defined(TARGET_SDL)
Bitmap *bitmap1;