X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_sp%2FMainGameLoop.c;h=e1f81f4ddedf7d1e953beaabfdc1c67c1d63a066;hb=3c080c7b33b6dfcc6e0039b592c5f268535873e7;hp=fd3fa85999f92441c50eeb10ffec323e3a5ac608;hpb=79d7ca29718d025ed0b131bf5389685fe9b941c4;p=rocksndiamonds.git diff --git a/src/game_sp/MainGameLoop.c b/src/game_sp/MainGameLoop.c index fd3fa859..e1f81f4d 100644 --- a/src/game_sp/MainGameLoop.c +++ b/src/game_sp/MainGameLoop.c @@ -35,7 +35,7 @@ int subMainGameLoop_Init() if (DemoFlag != 0) { -#if 1 +#if 0 printf("::: playing demo ...\n"); #endif @@ -45,7 +45,7 @@ int subMainGameLoop_Init() } else // loc_g_1836: { -#if 1 +#if 0 printf("::: playing game ...\n"); #endif @@ -82,7 +82,7 @@ int subMainGameLoop_Init() return subMainGameLoop; } -int subMainGameLoop_Main() +int subMainGameLoop_Main(byte action, boolean warp_mode) { int subMainGameLoop; int bx; @@ -91,7 +91,9 @@ int subMainGameLoop_Main() // --------------------- START OF GAME-BUSY LOOP ------------------------------ // ---------------------------------------------------------------------------- +#if 0 locRepeatMainGameLoop: // start repeating game loop +#endif // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // FS synchronization @@ -120,8 +122,19 @@ locRepeatMainGameLoop: // start repeating game loop // FS end of synchronization // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +#if 1 + if (EndFlag) + { + // (should never happen) + + // printf("::: EndFlag == True\n"); + + goto locExitMainGameLoop; + } +#else if (EndFlag) goto locExitMainGameLoop; +#endif // If DemoFlag = 0 Then Call subCheckJoystick ' check joystick // bx = subCheckRightMouseButton() ' check (right) mouse button @@ -142,7 +155,7 @@ locRepeatMainGameLoop: // start repeating game loop // loc_g_186F: - subProcessKeyboardInput(); // Check keyboard, act on keys + subProcessKeyboardInput(action); // Check keyboard, act on keys // 'HACK: // TimerVar = TimerVar + 1 @@ -190,8 +203,19 @@ locRepeatMainGameLoop: // start repeating game loop ScrollTowards(ScreenScrollXPos, ScreenScrollYPos); } +#if 1 + if (ForcedExitFlag != 0) // Forced Exit?' yes--exit! + { + // (should never happen) + + // printf("::: ForcedExitFlag == True\n"); + + goto locExitMainGameLoop; + } +#else if (ForcedExitFlag != 0) // Forced Exit?' yes--exit! goto locExitMainGameLoop; +#endif TimerVar = TimerVar + 1; @@ -207,8 +231,23 @@ locRepeatMainGameLoop: // start repeating game loop // End With // End If +#if 1 + if (ExitToMenuFlag == 1) + { + // happens when demo ends or when Murphy enters exit (to be checked) + +#if 0 + printf("::: ExitToMenuFlag == True\n"); +#endif + +#if 0 + goto locExitMainGameLoop; +#endif + } +#else if (ExitToMenuFlag == 1) goto locExitMainGameLoop; +#endif #if 1 if (LeadOutCounter == 0) // no lead-out: game busy @@ -222,13 +261,36 @@ locRepeatMainGameLoop: // start repeating game loop // ---------------------- END OF GAME-BUSY LOOP ------------------------------- // ---------------------------------------------------------------------------- LeadOutCounter = LeadOutCounter - 1; // do more lead-out after quit + +#if 0 + printf("::: LeadOutCounter == %d\n", LeadOutCounter); +#endif + +#if 1 + if (LeadOutCounter != 0) // lead-out not ready: more + return subMainGameLoop; +#else if (LeadOutCounter != 0) // lead-out not ready: more goto locRepeatMainGameLoop; +#endif // lead-out done: exit now // ---------------------- END OF GAME-BUSY LOOP (including lead-out) ---------- locExitMainGameLoop: + +#if 0 + printf("::: locExitMainGameLoop reached [%d]\n", LeadOutCounter); +#endif + + + +#if 1 + return subMainGameLoop; +#endif + + + do { DoEvents(); // user may klick on menus or move the window here ... @@ -261,10 +323,11 @@ locExitMainGameLoop: if (UpdatedFlag == 0) // update playing time subUpdatePlayingTime(); - return subMainGameLoop; } // subMainGameLoop +#if 0 + int subMainGameLoop() { int subMainGameLoop; @@ -494,6 +557,8 @@ locExitMainGameLoop: return subMainGameLoop; } // subMainGameLoop +#endif + void subUpdatePlayingTime() { }