#include "DoGameStuff.h"
+
static void CallAnimation(int si, byte bl);
static boolean IsToBeAnimated(int bl);
-// static char *VB_Name = "modDoGameStuff";
-
-// --- Option Explicit
+int AnimationPosTable[SP_MAX_PLAYFIELD_SIZE];
+byte AnimationSubTable[SP_MAX_PLAYFIELD_SIZE];
-int *AnimationPosTable;
-byte *AnimationSubTable;
// ==========================================================================
// SUBROUTINE
// Do game stuff
// ==========================================================================
-int subDoGameStuff()
+void subDoGameStuff(void)
{
- int subDoGameStuff;
-
int si, cx, dx, bl;
+ int InfotronsNeeded_last = InfotronsNeeded;
subAnimateMurphy(&MurphyPosIndex); // move Murphy in any direction
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ if (InfotronsNeeded != InfotronsNeeded_last)
+ game.snapshot.collected_item = TRUE;
+
+ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Build a database of locations and subs-to-call of animatable fields only:
// Make a snapshot from the field before the animation cycle starts.
// first and last line are not animated.
}
while (0 < cx); // locloop_g_2282' until all lines scanned(not top- and bottom edge)
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Now use the database to animate all animatables the fastest way.
// All the other fields are not checked anymore: those have no database entry.
// The field from before animation is frozen in the database in order not to
} // loop locloop_g_22B8 ' until all animatables done
}
-#if 1
- printf("::: DoGameStuff.c: KillMurphyFlag == %d [%d]\n",
- KillMurphyFlag, MurphyMoveCounter);
-#endif
-
// All animations are done now
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if (KillMurphyFlag == 1 || MurphyMoveCounter == 0)
{
- if (LeadOutCounter == 0)
+ if (LeadOutCounter == 0 &&
+ !game_sp.level_solved &&
+ !game_sp.game_over)
{
-#if 1
- printf("::: DoGameStuff.c: killing murphy [%d] ...\n", KillMurphyFlag);
-#endif
+ KillMurphyFlag = 0; // no more "kill Murphy"
+ ExplodeFieldSP(MurphyExplodePos); // Explode
+ LeadOutCounter = 0x40; // quit: start lead-out
- KillMurphyFlag = 0; // no more "kill Murphy"
- ExplodeFieldSP(MurphyExplodePos); // Explode
- LeadOutCounter = 0x40; // quit: start lead-out
+ // give Murphy some more time (LeadOutCounter) to reach the exit
}
} // loc_g_22FB:
-
-
- return subDoGameStuff;
-} // subDoGameStuff
+}
static boolean IsToBeAnimated(int bl)
{