&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;
level_file_info->nr = 0;
level_file_info->type = LEVEL_FILE_TYPE_UNKNOWN;
level_file_info->packed = FALSE;
- level_file_info->basename = NULL;
- level_file_info->filename = NULL;
+
+ setString(&level_file_info->basename, NULL);
+ setString(&level_file_info->filename, NULL);
}
int getMappedElement_SB(int, boolean);
-static void ActivateLevelTemplate()
+static void ActivateLevelTemplate(void)
{
int x, y;
/* overwrite all individual level settings from template level settings */
level = level_template;
+ /* restore level file info */
+ level.file_info = level_backup.file_info;
+
/* restore playfield size */
level.fieldx = level_backup.fieldx;
level.fieldy = level_backup.fieldy;
static char *getLevelFilenameFromBasename(char *basename)
{
- static char *filename[2] = { NULL, NULL };
- int pos = (strEqual(basename, LEVELTEMPLATE_FILENAME) ? 0 : 1);
+ static char *filename = NULL;
- checked_free(filename[pos]);
+ checked_free(filename);
- filename[pos] = getPath2(getCurrentLevelDir(), basename);
+ filename = getPath2(getCurrentLevelDir(), basename);
- return filename[pos];
+ return filename;
}
static int getFileTypeFromBasename(char *basename)
{
lfi->type = type;
lfi->packed = FALSE;
- lfi->basename = getSingleLevelBasename(lfi->nr, lfi->type);
- lfi->filename = getLevelFilenameFromBasename(lfi->basename);
+
+ setString(&lfi->basename, getSingleLevelBasename(lfi->nr, lfi->type));
+ setString(&lfi->filename, getLevelFilenameFromBasename(lfi->basename));
}
#endif
lfi->type = type;
lfi->packed = FALSE;
- lfi->basename = basename;
- lfi->filename = getLevelFilenameFromBasename(lfi->basename);
+
+ setString(&lfi->basename, basename);
+ setString(&lfi->filename, getLevelFilenameFromBasename(lfi->basename));
}
static void setLevelFileInfo_PackedLevelFilename(struct LevelFileInfo *lfi,
{
lfi->type = type;
lfi->packed = TRUE;
- lfi->basename = getPackedLevelBasename(lfi->type);
- lfi->filename = getLevelFilenameFromBasename(lfi->basename);
+
+ setString(&lfi->basename, getPackedLevelBasename(lfi->type));
+ setString(&lfi->filename, getLevelFilenameFromBasename(lfi->basename));
}
static int getFiletypeFromID(char *filetype_id)
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;
getSingleLevelBasename(-1));
/* replace local level template filename with global template filename */
- lfi->filename = getGlobalLevelTemplateFilename();
+ setString(&lfi->filename, getGlobalLevelTemplateFilename());
/* no fallback if template file not existing */
return;
determineLevelFileInfo_Filetype(level_file_info);
}
+static void copyLevelFileInfo(struct LevelFileInfo *lfi_from,
+ struct LevelFileInfo *lfi_to)
+{
+ lfi_to->nr = lfi_from->nr;
+ lfi_to->type = lfi_from->type;
+ lfi_to->packed = lfi_from->packed;
+
+ setString(&lfi_to->basename, lfi_from->basename);
+ setString(&lfi_to->filename, lfi_from->filename);
+}
+
/* ------------------------------------------------------------------------- */
/* 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_file_info.nr = 0; /* unknown level number */
level_file_info.type = LEVEL_FILE_TYPE_RND; /* no others supported yet */
- level_file_info.filename = filename;
+
+ setString(&level_file_info.filename, filename);
LoadLevelFromFileInfo(level, &level_file_info, FALSE);
}
-static void LoadLevel_InitVersion(struct LevelInfo *level, char *filename)
+static void LoadLevel_InitVersion(struct LevelInfo *level)
{
int i, j;
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)
}
}
-static void LoadLevel_InitElements(struct LevelInfo *level, char *filename)
+static void LoadLevel_InitElements(struct LevelInfo *level)
{
LoadLevel_InitStandardElements(level);
InitElementPropertiesGfxElement();
}
-static void LoadLevel_InitPlayfield(struct LevelInfo *level, char *filename)
+static void LoadLevel_InitPlayfield(struct LevelInfo *level)
{
int x, y;
SetBorderElement();
}
-static void LoadLevel_InitNativeEngines(struct LevelInfo *level,char *filename)
+static void LoadLevel_InitNativeEngines(struct LevelInfo *level)
{
struct LevelFileInfo *level_file_info = &level->file_info;
CopyNativeLevel_RND_to_Native(level);
}
-void LoadLevelTemplate(int nr)
+static void LoadLevelTemplate_LoadAndInit(void)
{
- char *filename;
-
- setLevelFileInfo(&level_template.file_info, nr);
- filename = level_template.file_info.filename;
-
LoadLevelFromFileInfo(&level_template, &level_template.file_info, FALSE);
- LoadLevel_InitVersion(&level_template, filename);
- LoadLevel_InitElements(&level_template, filename);
+ LoadLevel_InitVersion(&level_template);
+ LoadLevel_InitElements(&level_template);
ActivateLevelTemplate();
}
-void LoadLevel(int nr)
+void LoadLevelTemplate(int nr)
{
- char *filename;
+ if (!fileExists(getGlobalLevelTemplateFilename()))
+ {
+ Error(ERR_WARN, "no level template found for this level");
- setLevelFileInfo(&level.file_info, nr);
- filename = level.file_info.filename;
+ return;
+ }
+
+ setLevelFileInfo(&level_template.file_info, nr);
+
+ LoadLevelTemplate_LoadAndInit();
+}
+
+static void LoadNetworkLevelTemplate(struct NetworkLevelInfo *network_level)
+{
+ copyLevelFileInfo(&network_level->tmpl_info, &level_template.file_info);
+ LoadLevelTemplate_LoadAndInit();
+}
+
+static void LoadLevel_LoadAndInit(struct NetworkLevelInfo *network_level)
+{
LoadLevelFromFileInfo(&level, &level.file_info, FALSE);
if (level.use_custom_template)
- LoadLevelTemplate(-1);
+ {
+ if (network_level != NULL)
+ LoadNetworkLevelTemplate(network_level);
+ else
+ LoadLevelTemplate(-1);
+ }
+
+ LoadLevel_InitVersion(&level);
+ LoadLevel_InitElements(&level);
+ LoadLevel_InitPlayfield(&level);
- LoadLevel_InitVersion(&level, filename);
- LoadLevel_InitElements(&level, filename);
- LoadLevel_InitPlayfield(&level, filename);
+ LoadLevel_InitNativeEngines(&level);
+}
+
+void LoadLevel(int nr)
+{
+ SetLevelSetInfo(leveldir_current->identifier, nr);
- LoadLevel_InitNativeEngines(&level, filename);
+ setLevelFileInfo(&level.file_info, nr);
+
+ LoadLevel_LoadAndInit(NULL);
}
void LoadLevelInfoOnly(int nr)
LoadLevelFromFileInfo(&level, &level.file_info, TRUE);
}
+void LoadNetworkLevel(struct NetworkLevelInfo *network_level)
+{
+ SetLevelSetInfo(network_level->leveldir_identifier,
+ network_level->file_info.nr);
+
+ copyLevelFileInfo(&network_level->file_info, &level.file_info);
+
+ LoadLevel_LoadAndInit(network_level);
+}
+
static int SaveLevel_VERS(FILE *file, struct LevelInfo *level)
{
int chunk_size = 0;
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];
char *filename = getScoreFilename(nr);
FILE *file;
- InitScoreDirectory(leveldir_current->subdir);
+ /* used instead of "leveldir_current->subdir" (for network games) */
+ InitScoreDirectory(levelset.identifier);
if (!(file = fopen(filename, MODE_WRITE)))
{
#define TOKEN_STR_PLAYER_PREFIX "player_"
/* global setup */
-#define SETUP_TOKEN_PLAYER_NAME 0
-#define SETUP_TOKEN_SOUND 1
-#define SETUP_TOKEN_SOUND_LOOPS 2
-#define SETUP_TOKEN_SOUND_MUSIC 3
-#define SETUP_TOKEN_SOUND_SIMPLE 4
-#define SETUP_TOKEN_TOONS 5
-#define SETUP_TOKEN_SCROLL_DELAY 6
-#define SETUP_TOKEN_SCROLL_DELAY_VALUE 7
-#define SETUP_TOKEN_ENGINE_SNAPSHOT_MODE 8
-#define SETUP_TOKEN_ENGINE_SNAPSHOT_MEMORY 9
-#define SETUP_TOKEN_FADE_SCREENS 10
-#define SETUP_TOKEN_AUTORECORD 11
-#define SETUP_TOKEN_SHOW_TITLESCREEN 12
-#define SETUP_TOKEN_QUICK_DOORS 13
-#define SETUP_TOKEN_TEAM_MODE 14
-#define SETUP_TOKEN_HANDICAP 15
-#define SETUP_TOKEN_SKIP_LEVELS 16
-#define SETUP_TOKEN_INCREMENT_LEVELS 17
-#define SETUP_TOKEN_TIME_LIMIT 18
-#define SETUP_TOKEN_FULLSCREEN 19
-#define SETUP_TOKEN_WINDOW_SCALING_PERCENT 20
-#define SETUP_TOKEN_WINDOW_SCALING_QUALITY 21
-#define SETUP_TOKEN_SCREEN_RENDERING_MODE 22
-#define SETUP_TOKEN_ASK_ON_ESCAPE 23
-#define SETUP_TOKEN_ASK_ON_ESCAPE_EDITOR 24
-#define SETUP_TOKEN_QUICK_SWITCH 25
-#define SETUP_TOKEN_INPUT_ON_FOCUS 26
-#define SETUP_TOKEN_PREFER_AGA_GRAPHICS 27
-#define SETUP_TOKEN_GAME_FRAME_DELAY 28
-#define SETUP_TOKEN_SP_SHOW_BORDER_ELEMENTS 29
-#define SETUP_TOKEN_SMALL_GAME_GRAPHICS 30
-#define SETUP_TOKEN_SHOW_SNAPSHOT_BUTTONS 31
-#define SETUP_TOKEN_GRAPHICS_SET 32
-#define SETUP_TOKEN_SOUNDS_SET 33
-#define SETUP_TOKEN_MUSIC_SET 34
-#define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS 35
-#define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS 36
-#define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC 37
-#define SETUP_TOKEN_VOLUME_SIMPLE 38
-#define SETUP_TOKEN_VOLUME_LOOPS 39
-#define SETUP_TOKEN_VOLUME_MUSIC 40
-#define SETUP_TOKEN_TOUCH_CONTROL_TYPE 41
-#define SETUP_TOKEN_TOUCH_MOVE_DISTANCE 42
-#define SETUP_TOKEN_TOUCH_DROP_DISTANCE 43
-
-#define NUM_GLOBAL_SETUP_TOKENS 44
+enum
+{
+ SETUP_TOKEN_PLAYER_NAME = 0,
+ SETUP_TOKEN_SOUND,
+ SETUP_TOKEN_SOUND_LOOPS,
+ SETUP_TOKEN_SOUND_MUSIC,
+ SETUP_TOKEN_SOUND_SIMPLE,
+ SETUP_TOKEN_TOONS,
+ SETUP_TOKEN_SCROLL_DELAY,
+ SETUP_TOKEN_SCROLL_DELAY_VALUE,
+ SETUP_TOKEN_ENGINE_SNAPSHOT_MODE,
+ SETUP_TOKEN_ENGINE_SNAPSHOT_MEMORY,
+ SETUP_TOKEN_FADE_SCREENS,
+ SETUP_TOKEN_AUTORECORD,
+ SETUP_TOKEN_SHOW_TITLESCREEN,
+ SETUP_TOKEN_QUICK_DOORS,
+ SETUP_TOKEN_TEAM_MODE,
+ SETUP_TOKEN_HANDICAP,
+ SETUP_TOKEN_SKIP_LEVELS,
+ SETUP_TOKEN_INCREMENT_LEVELS,
+ SETUP_TOKEN_AUTO_PLAY_NEXT_LEVEL,
+ SETUP_TOKEN_SKIP_SCORES_AFTER_GAME,
+ SETUP_TOKEN_TIME_LIMIT,
+ SETUP_TOKEN_FULLSCREEN,
+ 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_SHOW_SNAPSHOT_BUTTONS,
+ SETUP_TOKEN_GRAPHICS_SET,
+ SETUP_TOKEN_SOUNDS_SET,
+ SETUP_TOKEN_MUSIC_SET,
+ SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS,
+ SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS,
+ SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC,
+ SETUP_TOKEN_VOLUME_SIMPLE,
+ SETUP_TOKEN_VOLUME_LOOPS,
+ 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,
+ SETUP_TOKEN_TOUCH_TRANSPARENCY,
+ SETUP_TOKEN_TOUCH_DRAW_OUTLINED,
+ SETUP_TOKEN_TOUCH_DRAW_PRESSED,
+ SETUP_TOKEN_TOUCH_GRID_XSIZE_0,
+ SETUP_TOKEN_TOUCH_GRID_YSIZE_0,
+ SETUP_TOKEN_TOUCH_GRID_XSIZE_1,
+ SETUP_TOKEN_TOUCH_GRID_YSIZE_1,
+
+ NUM_GLOBAL_SETUP_TOKENS
+};
/* auto setup */
-#define SETUP_TOKEN_AUTO_EDITOR_ZOOM_TILESIZE 0
+enum
+{
+ SETUP_TOKEN_AUTO_EDITOR_ZOOM_TILESIZE = 0,
-#define NUM_AUTO_SETUP_TOKENS 1
+ NUM_AUTO_SETUP_TOKENS
+};
/* editor setup */
-#define SETUP_TOKEN_EDITOR_EL_CLASSIC 0
-#define SETUP_TOKEN_EDITOR_EL_CUSTOM 1
-#define SETUP_TOKEN_EDITOR_EL_USER_DEFINED 2
-#define SETUP_TOKEN_EDITOR_EL_DYNAMIC 3
-#define SETUP_TOKEN_EDITOR_EL_HEADLINES 4
-#define SETUP_TOKEN_EDITOR_SHOW_ELEMENT_TOKEN 5
+enum
+{
+ SETUP_TOKEN_EDITOR_EL_CLASSIC = 0,
+ SETUP_TOKEN_EDITOR_EL_CUSTOM,
+ SETUP_TOKEN_EDITOR_EL_USER_DEFINED,
+ SETUP_TOKEN_EDITOR_EL_DYNAMIC,
+ SETUP_TOKEN_EDITOR_EL_HEADLINES,
+ SETUP_TOKEN_EDITOR_SHOW_ELEMENT_TOKEN,
-#define NUM_EDITOR_SETUP_TOKENS 6
+ NUM_EDITOR_SETUP_TOKENS
+};
/* editor cascade setup */
-#define SETUP_TOKEN_EDITOR_CASCADE_BD 0
-#define SETUP_TOKEN_EDITOR_CASCADE_EM 1
-#define SETUP_TOKEN_EDITOR_CASCADE_EMC 2
-#define SETUP_TOKEN_EDITOR_CASCADE_RND 3
-#define SETUP_TOKEN_EDITOR_CASCADE_SB 4
-#define SETUP_TOKEN_EDITOR_CASCADE_SP 5
-#define SETUP_TOKEN_EDITOR_CASCADE_DC 6
-#define SETUP_TOKEN_EDITOR_CASCADE_DX 7
-#define SETUP_TOKEN_EDITOR_CASCADE_TEXT 8
-#define SETUP_TOKEN_EDITOR_CASCADE_STEELTEXT 9
-#define SETUP_TOKEN_EDITOR_CASCADE_CE 10
-#define SETUP_TOKEN_EDITOR_CASCADE_GE 11
-#define SETUP_TOKEN_EDITOR_CASCADE_REF 12
-#define SETUP_TOKEN_EDITOR_CASCADE_USER 13
-#define SETUP_TOKEN_EDITOR_CASCADE_DYNAMIC 14
-
-#define NUM_EDITOR_CASCADE_SETUP_TOKENS 15
+enum
+{
+ SETUP_TOKEN_EDITOR_CASCADE_BD = 0,
+ SETUP_TOKEN_EDITOR_CASCADE_EM,
+ SETUP_TOKEN_EDITOR_CASCADE_EMC,
+ SETUP_TOKEN_EDITOR_CASCADE_RND,
+ SETUP_TOKEN_EDITOR_CASCADE_SB,
+ SETUP_TOKEN_EDITOR_CASCADE_SP,
+ SETUP_TOKEN_EDITOR_CASCADE_DC,
+ SETUP_TOKEN_EDITOR_CASCADE_DX,
+ SETUP_TOKEN_EDITOR_CASCADE_TEXT,
+ SETUP_TOKEN_EDITOR_CASCADE_STEELTEXT,
+ SETUP_TOKEN_EDITOR_CASCADE_CE,
+ SETUP_TOKEN_EDITOR_CASCADE_GE,
+ SETUP_TOKEN_EDITOR_CASCADE_REF,
+ SETUP_TOKEN_EDITOR_CASCADE_USER,
+ SETUP_TOKEN_EDITOR_CASCADE_DYNAMIC,
+
+ NUM_EDITOR_CASCADE_SETUP_TOKENS
+};
/* shortcut setup */
-#define SETUP_TOKEN_SHORTCUT_SAVE_GAME 0
-#define SETUP_TOKEN_SHORTCUT_LOAD_GAME 1
-#define SETUP_TOKEN_SHORTCUT_TOGGLE_PAUSE 2
-#define SETUP_TOKEN_SHORTCUT_FOCUS_PLAYER_1 3
-#define SETUP_TOKEN_SHORTCUT_FOCUS_PLAYER_2 4
-#define SETUP_TOKEN_SHORTCUT_FOCUS_PLAYER_3 5
-#define SETUP_TOKEN_SHORTCUT_FOCUS_PLAYER_4 6
-#define SETUP_TOKEN_SHORTCUT_FOCUS_PLAYER_ALL 7
-#define SETUP_TOKEN_SHORTCUT_TAPE_EJECT 8
-#define SETUP_TOKEN_SHORTCUT_TAPE_EXTRA 9
-#define SETUP_TOKEN_SHORTCUT_TAPE_STOP 10
-#define SETUP_TOKEN_SHORTCUT_TAPE_PAUSE 11
-#define SETUP_TOKEN_SHORTCUT_TAPE_RECORD 12
-#define SETUP_TOKEN_SHORTCUT_TAPE_PLAY 13
-#define SETUP_TOKEN_SHORTCUT_SOUND_SIMPLE 14
-#define SETUP_TOKEN_SHORTCUT_SOUND_LOOPS 15
-#define SETUP_TOKEN_SHORTCUT_SOUND_MUSIC 16
-#define SETUP_TOKEN_SHORTCUT_SNAP_LEFT 17
-#define SETUP_TOKEN_SHORTCUT_SNAP_RIGHT 18
-#define SETUP_TOKEN_SHORTCUT_SNAP_UP 19
-#define SETUP_TOKEN_SHORTCUT_SNAP_DOWN 20
-
-#define NUM_SHORTCUT_SETUP_TOKENS 21
+enum
+{
+ SETUP_TOKEN_SHORTCUT_SAVE_GAME = 0,
+ SETUP_TOKEN_SHORTCUT_LOAD_GAME,
+ SETUP_TOKEN_SHORTCUT_TOGGLE_PAUSE,
+ SETUP_TOKEN_SHORTCUT_FOCUS_PLAYER_1,
+ SETUP_TOKEN_SHORTCUT_FOCUS_PLAYER_2,
+ SETUP_TOKEN_SHORTCUT_FOCUS_PLAYER_3,
+ SETUP_TOKEN_SHORTCUT_FOCUS_PLAYER_4,
+ SETUP_TOKEN_SHORTCUT_FOCUS_PLAYER_ALL,
+ SETUP_TOKEN_SHORTCUT_TAPE_EJECT,
+ SETUP_TOKEN_SHORTCUT_TAPE_EXTRA,
+ SETUP_TOKEN_SHORTCUT_TAPE_STOP,
+ SETUP_TOKEN_SHORTCUT_TAPE_PAUSE,
+ SETUP_TOKEN_SHORTCUT_TAPE_RECORD,
+ SETUP_TOKEN_SHORTCUT_TAPE_PLAY,
+ SETUP_TOKEN_SHORTCUT_SOUND_SIMPLE,
+ SETUP_TOKEN_SHORTCUT_SOUND_LOOPS,
+ SETUP_TOKEN_SHORTCUT_SOUND_MUSIC,
+ SETUP_TOKEN_SHORTCUT_SNAP_LEFT,
+ SETUP_TOKEN_SHORTCUT_SNAP_RIGHT,
+ SETUP_TOKEN_SHORTCUT_SNAP_UP,
+ SETUP_TOKEN_SHORTCUT_SNAP_DOWN,
+
+ NUM_SHORTCUT_SETUP_TOKENS
+};
/* player setup */
-#define SETUP_TOKEN_PLAYER_USE_JOYSTICK 0
-#define SETUP_TOKEN_PLAYER_JOY_DEVICE_NAME 1
-#define SETUP_TOKEN_PLAYER_JOY_XLEFT 2
-#define SETUP_TOKEN_PLAYER_JOY_XMIDDLE 3
-#define SETUP_TOKEN_PLAYER_JOY_XRIGHT 4
-#define SETUP_TOKEN_PLAYER_JOY_YUPPER 5
-#define SETUP_TOKEN_PLAYER_JOY_YMIDDLE 6
-#define SETUP_TOKEN_PLAYER_JOY_YLOWER 7
-#define SETUP_TOKEN_PLAYER_JOY_SNAP 8
-#define SETUP_TOKEN_PLAYER_JOY_DROP 9
-#define SETUP_TOKEN_PLAYER_KEY_LEFT 10
-#define SETUP_TOKEN_PLAYER_KEY_RIGHT 11
-#define SETUP_TOKEN_PLAYER_KEY_UP 12
-#define SETUP_TOKEN_PLAYER_KEY_DOWN 13
-#define SETUP_TOKEN_PLAYER_KEY_SNAP 14
-#define SETUP_TOKEN_PLAYER_KEY_DROP 15
-
-#define NUM_PLAYER_SETUP_TOKENS 16
+enum
+{
+ SETUP_TOKEN_PLAYER_USE_JOYSTICK = 0,
+ SETUP_TOKEN_PLAYER_JOY_DEVICE_NAME,
+ SETUP_TOKEN_PLAYER_JOY_XLEFT,
+ SETUP_TOKEN_PLAYER_JOY_XMIDDLE,
+ SETUP_TOKEN_PLAYER_JOY_XRIGHT,
+ SETUP_TOKEN_PLAYER_JOY_YUPPER,
+ SETUP_TOKEN_PLAYER_JOY_YMIDDLE,
+ SETUP_TOKEN_PLAYER_JOY_YLOWER,
+ SETUP_TOKEN_PLAYER_JOY_SNAP,
+ SETUP_TOKEN_PLAYER_JOY_DROP,
+ SETUP_TOKEN_PLAYER_KEY_LEFT,
+ SETUP_TOKEN_PLAYER_KEY_RIGHT,
+ SETUP_TOKEN_PLAYER_KEY_UP,
+ SETUP_TOKEN_PLAYER_KEY_DOWN,
+ SETUP_TOKEN_PLAYER_KEY_SNAP,
+ SETUP_TOKEN_PLAYER_KEY_DROP,
+
+ NUM_PLAYER_SETUP_TOKENS
+};
/* system setup */
-#define SETUP_TOKEN_SYSTEM_SDL_VIDEODRIVER 0
-#define SETUP_TOKEN_SYSTEM_SDL_AUDIODRIVER 1
-#define SETUP_TOKEN_SYSTEM_AUDIO_FRAGMENT_SIZE 2
+enum
+{
+ SETUP_TOKEN_SYSTEM_SDL_VIDEODRIVER = 0,
+ SETUP_TOKEN_SYSTEM_SDL_AUDIODRIVER,
+ SETUP_TOKEN_SYSTEM_AUDIO_FRAGMENT_SIZE,
-#define NUM_SYSTEM_SETUP_TOKENS 3
+ NUM_SYSTEM_SETUP_TOKENS
+};
/* internal setup */
-#define SETUP_TOKEN_INT_PROGRAM_TITLE 0
-#define SETUP_TOKEN_INT_PROGRAM_VERSION 1
-#define SETUP_TOKEN_INT_PROGRAM_AUTHOR 2
-#define SETUP_TOKEN_INT_PROGRAM_EMAIL 3
-#define SETUP_TOKEN_INT_PROGRAM_WEBSITE 4
-#define SETUP_TOKEN_INT_PROGRAM_COPYRIGHT 5
-#define SETUP_TOKEN_INT_PROGRAM_COMPANY 6
-#define SETUP_TOKEN_INT_PROGRAM_ICON_FILE 7
-#define SETUP_TOKEN_INT_DEFAULT_GRAPHICS_SET 8
-#define SETUP_TOKEN_INT_DEFAULT_SOUNDS_SET 9
-#define SETUP_TOKEN_INT_DEFAULT_MUSIC_SET 10
-#define SETUP_TOKEN_INT_FALLBACK_GRAPHICS_FILE 11
-#define SETUP_TOKEN_INT_FALLBACK_SOUNDS_FILE 12
-#define SETUP_TOKEN_INT_FALLBACK_MUSIC_FILE 13
-#define SETUP_TOKEN_INT_DEFAULT_LEVEL_SERIES 14
-#define SETUP_TOKEN_INT_CHOOSE_FROM_TOP_LEVELDIR 15
-#define SETUP_TOKEN_INT_SHOW_SCALING_IN_TITLE 16
-#define SETUP_TOKEN_INT_DEFAULT_WINDOW_WIDTH 17
-#define SETUP_TOKEN_INT_DEFAULT_WINDOW_HEIGHT 18
-
-#define NUM_INTERNAL_SETUP_TOKENS 19
+enum
+{
+ SETUP_TOKEN_INT_PROGRAM_TITLE = 0,
+ SETUP_TOKEN_INT_PROGRAM_VERSION,
+ SETUP_TOKEN_INT_PROGRAM_AUTHOR,
+ SETUP_TOKEN_INT_PROGRAM_EMAIL,
+ SETUP_TOKEN_INT_PROGRAM_WEBSITE,
+ SETUP_TOKEN_INT_PROGRAM_COPYRIGHT,
+ SETUP_TOKEN_INT_PROGRAM_COMPANY,
+ SETUP_TOKEN_INT_PROGRAM_ICON_FILE,
+ SETUP_TOKEN_INT_DEFAULT_GRAPHICS_SET,
+ SETUP_TOKEN_INT_DEFAULT_SOUNDS_SET,
+ SETUP_TOKEN_INT_DEFAULT_MUSIC_SET,
+ SETUP_TOKEN_INT_FALLBACK_GRAPHICS_FILE,
+ SETUP_TOKEN_INT_FALLBACK_SOUNDS_FILE,
+ SETUP_TOKEN_INT_FALLBACK_MUSIC_FILE,
+ SETUP_TOKEN_INT_DEFAULT_LEVEL_SERIES,
+ SETUP_TOKEN_INT_CHOOSE_FROM_TOP_LEVELDIR,
+ SETUP_TOKEN_INT_SHOW_SCALING_IN_TITLE,
+ SETUP_TOKEN_INT_DEFAULT_WINDOW_WIDTH,
+ SETUP_TOKEN_INT_DEFAULT_WINDOW_HEIGHT,
+
+ NUM_INTERNAL_SETUP_TOKENS
+};
/* debug setup */
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_0 0
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_1 1
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_2 2
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_3 3
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_4 4
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_5 5
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_6 6
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_7 7
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_8 8
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_9 9
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_0 10
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_1 11
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_2 12
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_3 13
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_4 14
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_5 15
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_6 16
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_7 17
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_8 18
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_9 19
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_USE_MOD_KEY 20
-#define SETUP_TOKEN_DEBUG_FRAME_DELAY_GAME_ONLY 21
-#define SETUP_TOKEN_DEBUG_SHOW_FRAMES_PER_SECOND 22
-
-#define NUM_DEBUG_SETUP_TOKENS 23
+enum
+{
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_0 = 0,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_1,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_2,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_3,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_4,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_5,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_6,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_7,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_8,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_9,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_0,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_1,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_2,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_3,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_4,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_5,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_6,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_7,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_8,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_KEY_9,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_USE_MOD_KEY,
+ SETUP_TOKEN_DEBUG_FRAME_DELAY_GAME_ONLY,
+ SETUP_TOKEN_DEBUG_SHOW_FRAMES_PER_SECOND,
+
+ NUM_DEBUG_SETUP_TOKENS
+};
/* options setup */
-#define SETUP_TOKEN_OPTIONS_VERBOSE 0
+enum
+{
+ SETUP_TOKEN_OPTIONS_VERBOSE = 0,
-#define NUM_OPTIONS_SETUP_TOKENS 1
+ NUM_OPTIONS_SETUP_TOKENS
+};
static struct SetupInfo si;
{ TYPE_SWITCH, &si.handicap, "handicap" },
{ TYPE_SWITCH, &si.skip_levels, "skip_levels" },
{ TYPE_SWITCH, &si.increment_levels, "increment_levels" },
+ { TYPE_SWITCH, &si.auto_play_next_level, "auto_play_next_level" },
+ { TYPE_SWITCH, &si.skip_scores_after_game, "skip_scores_after_game" },
{ TYPE_SWITCH, &si.time_limit, "time_limit" },
{ TYPE_SWITCH, &si.fullscreen, "fullscreen" },
{ 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_simple, "volume_simple" },
{ TYPE_INTEGER,&si.volume_loops, "volume_loops" },
{ 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" },
+ { TYPE_INTEGER,&si.touch.transparency, "touch.transparency" },
+ { TYPE_INTEGER,&si.touch.draw_outlined, "touch.draw_outlined" },
+ { TYPE_INTEGER,&si.touch.draw_pressed, "touch.draw_pressed" },
+ { TYPE_INTEGER,&si.touch.grid_xsize[0], "touch.virtual_buttons.0.xsize" },
+ { TYPE_INTEGER,&si.touch.grid_ysize[0], "touch.virtual_buttons.0.ysize" },
+ { TYPE_INTEGER,&si.touch.grid_xsize[1], "touch.virtual_buttons.1.xsize" },
+ { TYPE_INTEGER,&si.touch.grid_ysize[1], "touch.virtual_buttons.1.ysize" },
};
static struct TokenInfo auto_setup_tokens[] =
si->handicap = TRUE;
si->skip_levels = TRUE;
si->increment_levels = TRUE;
+ si->auto_play_next_level = TRUE;
+ si->skip_scores_after_game = FALSE;
si->time_limit = TRUE;
si->fullscreen = FALSE;
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->volume_loops = 100; /* percent */
si->volume_music = 100; /* percent */
+ 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 */
si->touch.drop_distance = TOUCH_DROP_DISTANCE_DEFAULT; /* percent */
+ si->touch.transparency = TOUCH_TRANSPARENCY_DEFAULT; /* percent */
+ si->touch.draw_outlined = TRUE;
+ si->touch.draw_pressed = TRUE;
for (i = 0; i < 2; i++)
{
setSetupInfoFromTokenInfo(setup_file_hash, global_setup_tokens, i);
setup = si;
+ /* virtual buttons setup */
+ setup.touch.grid_initialized = TRUE;
+ for (i = 0; i < 2; i++)
+ {
+ int grid_xsize = setup.touch.grid_xsize[i];
+ int grid_ysize = setup.touch.grid_ysize[i];
+ int x, y;
+
+ // if virtual buttons are not loaded from setup file, repeat initializing
+ // virtual buttons grid with default values later when video is initialized
+ if (grid_xsize == -1 ||
+ grid_ysize == -1)
+ {
+ setup.touch.grid_initialized = FALSE;
+
+ continue;
+ }
+
+ for (y = 0; y < grid_ysize; y++)
+ {
+ char token_string[MAX_LINE_LEN];
+
+ sprintf(token_string, "touch.virtual_buttons.%d.%02d", i, y);
+
+ char *value_string = getHashEntry(setup_file_hash, token_string);
+
+ if (value_string == NULL)
+ continue;
+
+ for (x = 0; x < grid_xsize; x++)
+ {
+ char c = value_string[x];
+
+ setup.touch.grid_button[i][x][y] =
+ (c == '.' ? CHAR_GRID_BUTTON_NONE : c);
+ }
+ }
+ }
+
/* editor setup */
sei = setup.editor;
for (i = 0; i < NUM_EDITOR_SETUP_TOKENS; i++)
}
}
-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;
if (i == SETUP_TOKEN_PLAYER_NAME + 1 ||
i == SETUP_TOKEN_GRAPHICS_SET ||
i == SETUP_TOKEN_VOLUME_SIMPLE ||
- i == SETUP_TOKEN_TOUCH_CONTROL_TYPE)
+ i == SETUP_TOKEN_NETWORK_MODE ||
+ i == SETUP_TOKEN_TOUCH_CONTROL_TYPE ||
+ i == SETUP_TOKEN_TOUCH_GRID_XSIZE_0 ||
+ i == SETUP_TOKEN_TOUCH_GRID_XSIZE_1)
fprintf(file, "\n");
fprintf(file, "%s\n", getSetupLine(global_setup_tokens, "", i));
}
+ /* virtual buttons setup */
+ for (i = 0; i < 2; i++)
+ {
+ int grid_xsize = setup.touch.grid_xsize[i];
+ int grid_ysize = setup.touch.grid_ysize[i];
+ int x, y;
+
+ fprintf(file, "\n");
+
+ for (y = 0; y < grid_ysize; y++)
+ {
+ char token_string[MAX_LINE_LEN];
+ char value_string[MAX_LINE_LEN];
+
+ sprintf(token_string, "touch.virtual_buttons.%d.%02d", i, y);
+
+ for (x = 0; x < grid_xsize; x++)
+ {
+ char c = setup.touch.grid_button[i][x][y];
+
+ value_string[x] = (c == CHAR_GRID_BUTTON_NONE ? '.' : c);
+ }
+
+ value_string[grid_xsize] = '\0';
+
+ fprintf(file, "%s\n", getFormattedSetupEntry(token_string, value_string));
+ }
+ }
+
/* editor setup */
sei = setup.editor;
fprintf(file, "\n");
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;