X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=c98670a495a856080ae1305642703de754484bce;hb=d9479668b752772803e523561bc544a6c7efe725;hp=4b8753ff6c7494a7aa20a2ee7b7b5ad550d6d955;hpb=69c0ba1506ea3cdbb11e0190124229cf37e8b77a;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 4b8753ff..c98670a4 100644 --- a/src/init.c +++ b/src/init.c @@ -4348,6 +4348,7 @@ void InitElementPropertiesStatic(void) EL_INTERNAL_CASCADE_STEEL_CHARS_ACTIVE, EL_INTERNAL_CASCADE_CE_ACTIVE, EL_INTERNAL_CASCADE_GE_ACTIVE, + EL_INTERNAL_CASCADE_ES_ACTIVE, EL_INTERNAL_CASCADE_REF_ACTIVE, EL_INTERNAL_CASCADE_USER_ACTIVE, EL_INTERNAL_CASCADE_DYNAMIC_ACTIVE, @@ -4371,6 +4372,7 @@ void InitElementPropertiesStatic(void) EL_INTERNAL_CASCADE_STEEL_CHARS, EL_INTERNAL_CASCADE_CE, EL_INTERNAL_CASCADE_GE, + EL_INTERNAL_CASCADE_ES, EL_INTERNAL_CASCADE_REF, EL_INTERNAL_CASCADE_USER, EL_INTERNAL_CASCADE_DYNAMIC, @@ -6197,6 +6199,7 @@ void OpenAll(void) InitRND(NEW_RANDOMIZE); InitSimpleRandom(NEW_RANDOMIZE); + InitBetterRandom(NEW_RANDOMIZE); print_timestamp_time("[init global stuff]"); @@ -6330,9 +6333,10 @@ void OpenAll(void) print_timestamp_done("OpenAll"); - DrawMainMenu(); + if (setup.ask_for_remaining_tapes) + setup.ask_for_uploading_tapes = TRUE; - CheckUploadTapes(); + DrawMainMenu(); #if 0 Debug("internal:path", "SDL_GetBasePath() == '%s'", @@ -6353,8 +6357,44 @@ void OpenAll(void) #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();