#include "MainGameLoop.h"
-static char *VB_Name = "modMainGameLoop";
+// static char *VB_Name = "modMainGameLoop";
+
// --- Option Explicit
int GameLoopRunning;
{
int subMainGameLoop;
- int al, bx;
+ // int al, bx;
+ int bx;
+#if 0
TickCountObject Clock;
currency LastFrame;
+#endif
if (DemoFlag != 0)
{
// This was a bug in the original Supaplex: sometimes red disks could not
// be released. This happened If Murphy was killed DURING a red disk release
// and the next try started.
+
RedDiskReleasePhase = 0; // (re-)enable red disk release
UpdatedFlag = 0;
GameLoopRunning = 1;
LevelStatus = 0;
+
// ----------------------------------------------------------------------------
// --------------------- START OF GAME-BUSY LOOP ------------------------------
// ----------------------------------------------------------------------------
{
DoEvents(); // user may klick on menus or move the window here ...
}
+#if 1
+ while (0);
+#else
while (Clock.TickDiffUS(LastFrame) < DeltaT); // wait till its time for the next frame
+#endif
// never any additional code between here!
- LastFrame = Clock.TickNow; // store the frame time
+#if 0
+ LastFrame = Clock.TickNow(); // store the frame time
+#endif
// never any additional code between here!
if (! NoDisplayFlag) // copy the BackBuffer(=Stage) to visible screen
Stage.Blt();
// Call subConvertToEasySymbols ' Convert to easy symbols
// End If
-loc_g_186F:
+ // loc_g_186F:
+
subProcessKeyboardInput(); // Check keyboard, act on keys
+
// 'HACK:
// TimerVar = TimerVar + 1
// DoEvents
// ----------------------------------------------------------------------------
//
+
subDoGameStuff(); // do all game stuff
+
//
// ----------------------------------------------------------------------------
// Call subDisplayPlayingTime ' playing time on screen
+
subCheckRestoreRedDiskCountDisplay(); // Restore panel: red-disk hole
subRedDiskReleaseExplosion(); // Red Disk release and explode
subFollowUpExplosions(); // every explosion may cause up to 8 following explosions
bx = subCalculateScreenScrollPos(); // calculate screen start addrs
+
ScreenPosition = bx;
+
// Now new X and new Y are calculated, and bx = screen position = ScreenPosition
data_h_Ytmp = ScreenScrollYPos; // copy Y for next soft scroll
data_h_Xtmp = ScreenScrollXPos; // copy X for next soft scroll
{
DoEvents(); // user may klick on menus or move the window here ...
}
+#if 1
+ while (0);
+#else
while (Clock.TickDiffUS(LastFrame) < DeltaT); // wait till its time for the next frame
+#endif
Stage.Blt(); // blit the last frame
GameLoopRunning = 0;