i == EL_BLACK_ORB));
// ---------- COULD_MOVE_INTO_ACID ----------------------------------------
- SET_PROPERTY(i, EP_COULD_MOVE_INTO_ACID, (ELEM_IS_PLAYER(i) ||
+ SET_PROPERTY(i, EP_COULD_MOVE_INTO_ACID, (IS_PLAYER_ELEMENT(i) ||
CAN_MOVE(i) ||
IS_CUSTOM_ELEMENT(i)));
global.autoplay_leveldir = NULL;
global.patchtapes_leveldir = NULL;
global.convert_leveldir = NULL;
- global.create_images_dir = NULL;
+ global.dumplevel_leveldir = NULL;
+ global.dumptape_leveldir = NULL;
+ global.create_sketch_images_dir = NULL;
+ global.create_collect_images_dir = NULL;
global.frames_per_second = 0;
global.show_frames_per_second = FALSE;
{
char *filename = &command[11];
- if (!fileExists(filename))
+ if (fileExists(filename))
+ {
+ LoadLevelFromFilename(&level, filename);
+ DumpLevel(&level);
+
+ exit(0);
+ }
+
+ char *leveldir = getStringCopy(filename); // read command parameters
+ char *level_nr = strchr(leveldir, ' ');
+
+ if (level_nr == NULL)
Fail("cannot open file '%s'", filename);
- LoadLevelFromFilename(&level, filename);
- DumpLevel(&level);
+ *level_nr++ = '\0';
- exit(0);
+ global.dumplevel_leveldir = leveldir;
+ global.dumplevel_level_nr = atoi(level_nr);
+
+ program.headless = TRUE;
}
else if (strPrefix(command, "dump tape "))
{
char *filename = &command[10];
- if (!fileExists(filename))
+ if (fileExists(filename))
+ {
+ LoadTapeFromFilename(filename);
+ DumpTape(&tape);
+
+ exit(0);
+ }
+
+ char *leveldir = getStringCopy(filename); // read command parameters
+ char *level_nr = strchr(leveldir, ' ');
+
+ if (level_nr == NULL)
Fail("cannot open file '%s'", filename);
- LoadTapeFromFilename(filename);
- DumpTape(&tape);
+ *level_nr++ = '\0';
- exit(0);
+ global.dumptape_leveldir = leveldir;
+ global.dumptape_level_nr = atoi(level_nr);
+
+ program.headless = TRUE;
}
else if (strPrefix(command, "autoplay ") ||
strPrefix(command, "autoffwd ") ||
strPrefix(command, "autowarp ") ||
strPrefix(command, "autotest ") ||
+ strPrefix(command, "autosave ") ||
+ strPrefix(command, "autoupload ") ||
strPrefix(command, "autofix "))
{
- char *str_ptr = getStringCopy(&command[8]); // read command parameters
+ char *arg_ptr = strchr(command, ' ');
+ char *str_ptr = getStringCopy(arg_ptr); // read command parameters
global.autoplay_mode =
(strPrefix(command, "autoplay") ? AUTOPLAY_MODE_PLAY :
strPrefix(command, "autoffwd") ? AUTOPLAY_MODE_FFWD :
strPrefix(command, "autowarp") ? AUTOPLAY_MODE_WARP :
strPrefix(command, "autotest") ? AUTOPLAY_MODE_TEST :
+ strPrefix(command, "autosave") ? AUTOPLAY_MODE_SAVE :
+ strPrefix(command, "autoupload") ? AUTOPLAY_MODE_UPLOAD :
strPrefix(command, "autofix") ? AUTOPLAY_MODE_FIX :
AUTOPLAY_MODE_NONE);
program.headless = TRUE;
}
- else if (strPrefix(command, "create images "))
+ else if (strPrefix(command, "create sketch images "))
{
- global.create_images_dir = getStringCopy(&command[14]);
+ global.create_sketch_images_dir = getStringCopy(&command[21]);
- if (access(global.create_images_dir, W_OK) != 0)
+ if (access(global.create_sketch_images_dir, W_OK) != 0)
Fail("image target directory '%s' not found or not writable",
- global.create_images_dir);
+ global.create_sketch_images_dir);
+ }
+ else if (strPrefix(command, "create collect image "))
+ {
+ global.create_collect_images_dir = getStringCopy(&command[21]);
+
+ if (access(global.create_collect_images_dir, W_OK) != 0)
+ Fail("image target directory '%s' not found or not writable",
+ global.create_collect_images_dir);
}
else if (strPrefix(command, "create CE image "))
{
LoadUserSetup(); // global user number
LoadSetup(); // global setup info
- LoadSetup_AutoSetup(); // global auto setup info
// set some options from setup file
DrawProgramInfo();
- DrawInitText("Loading graphics", 120, FC_GREEN);
+ DrawInitTextHead("Loading graphics");
// initialize settings for busy animation with default values
int parameter[NUM_GFX_ARGS];
InitGlobal(); // initialize some global variables
+ InitRND(NEW_RANDOMIZE);
+ InitSimpleRandom(NEW_RANDOMIZE);
+ InitBetterRandom(NEW_RANDOMIZE);
+
print_timestamp_time("[init global stuff]");
InitSetup();
print_timestamp_time("[init setup/config stuff (1)]");
- InitScoresInfo();
-
if (options.execute_command)
Execute_Command(options.execute_command);
InitMixer();
print_timestamp_time("[init setup/config stuff (6)]");
- InitRND(NEW_RANDOMIZE);
- InitSimpleRandom(NEW_RANDOMIZE);
-
InitJoysticks();
print_timestamp_time("[init setup/config stuff]");
ConvertLevels();
return;
}
- else if (global.create_images_dir)
+ else if (global.dumplevel_leveldir)
+ {
+ DumpLevels();
+ return;
+ }
+ else if (global.dumptape_leveldir)
+ {
+ DumpTapes();
+ return;
+ }
+ else if (global.create_sketch_images_dir)
{
CreateLevelSketchImages();
return;
}
+ else if (global.create_collect_images_dir)
+ {
+ CreateCollectElementImages();
+ return;
+ }
InitNetworkServer();
print_timestamp_done("OpenAll");
+ if (setup.ask_for_remaining_tapes)
+ setup.ask_for_uploading_tapes = TRUE;
+
DrawMainMenu();
#if 0
#endif
}
+static boolean WaitForApiThreads(void)
+{
+ unsigned int thread_delay = 0;
+ unsigned int thread_delay_value = 10000;
+
+ if (program.api_thread_count == 0)
+ return TRUE;
+
+ // deactivate global animations (not accessible in game state "loading")
+ setup.toons = FALSE;
+
+ // set game state to "loading" to be able to show busy animation
+ SetGameStatus(GAME_MODE_LOADING);
+
+ ResetDelayCounter(&thread_delay);
+
+ // wait for threads to finish (and fail on timeout)
+ while (program.api_thread_count > 0)
+ {
+ if (DelayReached(&thread_delay, thread_delay_value))
+ {
+ Error("failed waiting for threads - TIMEOUT");
+
+ return FALSE;
+ }
+
+ UPDATE_BUSY_STATE();
+
+ Delay(20);
+ }
+
+ return TRUE;
+}
+
void CloseAllAndExit(int exit_value)
{
+ WaitForApiThreads();
+
StopSounds();
FreeAllSounds();
FreeAllMusic();