// ----------------------------------------------------------------------------
// main.c
// ============================================================================
// ----------------------------------------------------------------------------
// main.c
// ============================================================================
short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
int TimeFrames, TimePlayed, TimeLeft, TapeTime;
boolean network_player_action_received = FALSE;
int TimeFrames, TimePlayed, TimeLeft, TapeTime;
boolean network_player_action_received = FALSE;
struct LevelInfo level, level_template;
struct PlayerInfo stored_player[MAX_PLAYERS], *local_player = NULL;
struct HiScore highscore[MAX_SCORE_ENTRIES];
struct TapeInfo tape;
struct LevelInfo level, level_template;
struct PlayerInfo stored_player[MAX_PLAYERS], *local_player = NULL;
struct HiScore highscore[MAX_SCORE_ENTRIES];
struct TapeInfo tape;
-/* ------------------------------------------------------------------------- */
-/* element definitions */
-/* ------------------------------------------------------------------------- */
+// ----------------------------------------------------------------------------
+// element definitions
+// ----------------------------------------------------------------------------
- /* ----------------------------------------------------------------------- */
- /* "real" level file elements */
- /* ----------------------------------------------------------------------- */
+ // --------------------------------------------------------------------------
+ // "real" level file elements
+ // --------------------------------------------------------------------------
- /* ----------------------------------------------------------------------- */
- /* "real" (and therefore drawable) runtime elements */
- /* ----------------------------------------------------------------------- */
+ // --------------------------------------------------------------------------
+ // "real" (and therefore drawable) runtime elements
+ // --------------------------------------------------------------------------
- /* ----------------------------------------------------------------------- */
- /* "unreal" (and therefore not drawable) runtime elements */
- /* ----------------------------------------------------------------------- */
+ // --------------------------------------------------------------------------
+ // "unreal" (and therefore not drawable) runtime elements
+ // --------------------------------------------------------------------------
- /* ----------------------------------------------------------------------- */
- /* dummy elements (never used as game elements, only used as graphics) */
- /* ----------------------------------------------------------------------- */
+ // --------------------------------------------------------------------------
+ // dummy elements (never used as game elements, only used as graphics)
+ // --------------------------------------------------------------------------
-/* ------------------------------------------------------------------------- */
-/* element action and direction definitions */
-/* ------------------------------------------------------------------------- */
+// ----------------------------------------------------------------------------
+// element action and direction definitions
+// ----------------------------------------------------------------------------
{ ".part_32", ACTION_PART_32, FALSE },
{ ".other", ACTION_OTHER, FALSE },
{ ".part_32", ACTION_PART_32, FALSE },
{ ".other", ACTION_OTHER, FALSE },
{ "", ACTION_DEFAULT, TRUE },
{ NULL, 0, 0 }
{ "", ACTION_DEFAULT, TRUE },
{ NULL, 0, 0 }
{ ".TOONS", GFX_SPECIAL_ARG_TOONS, },
{ ".SCORESOLD", GFX_SPECIAL_ARG_SCORESOLD, },
{ ".SCORESNEW", GFX_SPECIAL_ARG_SCORESNEW, },
{ ".TOONS", GFX_SPECIAL_ARG_TOONS, },
{ ".SCORESOLD", GFX_SPECIAL_ARG_SCORESOLD, },
{ ".SCORESNEW", GFX_SPECIAL_ARG_SCORESNEW, },
{ ".FADING", GFX_SPECIAL_ARG_FADING, },
{ ".QUIT", GFX_SPECIAL_ARG_QUIT, },
{ ".FADING", GFX_SPECIAL_ARG_FADING, },
{ ".QUIT", GFX_SPECIAL_ARG_QUIT, },
{ "", GFX_SPECIAL_ARG_DEFAULT, },
{ NULL, 0, }
};
{ "", GFX_SPECIAL_ARG_DEFAULT, },
{ NULL, 0, }
};
-/* ------------------------------------------------------------------------- */
-/* font definitions */
-/* ------------------------------------------------------------------------- */
+// ----------------------------------------------------------------------------
+// font definitions
+// ----------------------------------------------------------------------------
-/* Important: When one entry is a prefix of another entry, the longer entry
- must come first, because the dynamic configuration does prefix matching!
- (These definitions must match the corresponding definitions in "main.h"!) */
+// Important: When one entry is a prefix of another entry, the longer entry
+// must come first, because the dynamic configuration does prefix matching!
+// (These definitions must match the corresponding definitions in "main.h"!)
{ "font.game_info" },
{ "font.info.elements" },
{ "font.info.levelset" },
{ "font.game_info" },
{ "font.info.elements" },
{ "font.info.levelset" },
{ "gfx.global.anim_1", },
{ "gfx.global.anim_2", },
{ "gfx.global.anim_3", },
{ "gfx.global.anim_1", },
{ "gfx.global.anim_2", },
{ "gfx.global.anim_3", },
{ "gfx.global.anim_31", },
{ "gfx.global.anim_32", },
{ "gfx.global.anim_31", },
{ "gfx.global.anim_32", },
-/* ------------------------------------------------------------------------- */
-/* music token prefix definitions */
-/* ------------------------------------------------------------------------- */
+
+// ----------------------------------------------------------------------------
+// music token prefix definitions
+// ----------------------------------------------------------------------------
-/* ========================================================================= */
-/* main() */
-/* ========================================================================= */
+// ============================================================================
+// main()
+// ============================================================================
" --serveronly only start network server\n"
" -v, --verbose verbose mode\n"
" -V, --version show program version\n"
" --serveronly only start network server\n"
" -v, --verbose verbose mode\n"
" -V, --version show program version\n"
" -e, --execute COMMAND execute batch COMMAND\n"
"\n"
"Valid commands for '--execute' option:\n"
" -e, --execute COMMAND execute batch COMMAND\n"
"\n"
"Valid commands for '--execute' option:\n"
" \"print helptext.conf\" print default helptext config\n"
" \"dump level FILE\" dump level data from FILE\n"
" \"dump tape FILE\" dump tape data from FILE\n"
" \"print helptext.conf\" print default helptext config\n"
" \"dump level FILE\" dump level data from FILE\n"
" \"dump tape FILE\" dump tape data from FILE\n"
" \"autoplay LEVELDIR [NR ...]\" play level tapes for LEVELDIR\n"
" \"autoffwd LEVELDIR [NR ...]\" ffwd level tapes for LEVELDIR\n"
" \"autowarp LEVELDIR [NR ...]\" warp level tapes for LEVELDIR\n"
" \"autoplay LEVELDIR [NR ...]\" play level tapes for LEVELDIR\n"
" \"autoffwd LEVELDIR [NR ...]\" ffwd level tapes for LEVELDIR\n"
" \"autowarp LEVELDIR [NR ...]\" warp level tapes for LEVELDIR\n"
" \"convert LEVELDIR [NR]\" convert levels in LEVELDIR\n"
" \"create images DIRECTORY\" write BMP images to DIRECTORY\n"
" \"create CE image DIRECTORY\" write BMP image to DIRECTORY\n"
" \"convert LEVELDIR [NR]\" convert levels in LEVELDIR\n"
" \"create images DIRECTORY\" write BMP images to DIRECTORY\n"
" \"create CE image DIRECTORY\" write BMP image to DIRECTORY\n"
char *config_filename = getProgramConfigFilename(command_filename);
char *userdata_basename = getBaseNameNoSuffix(command_filename);
char *userdata_subdir;
char *config_filename = getProgramConfigFilename(command_filename);
char *userdata_basename = getBaseNameNoSuffix(command_filename);
char *userdata_subdir;
// read default program config, if existing
if (fileExists(config_filename))
// read default program config, if existing
if (fileExists(config_filename))
// set user data directory for Linux/Unix (but not Mac OS X)
userdata_subdir_unix = getStringCat2(".", userdata_basename);
// set user data directory for Linux/Unix (but not Mac OS X)
userdata_subdir_unix = getStringCat2(".", userdata_basename);
// set program title from potentially redefined program title
if (setup.internal.program_title != NULL &&
// set program title from potentially redefined program title
if (setup.internal.program_title != NULL &&