fixed compiler warnings (after adding "-Wstrict-prototypes")
[rocksndiamonds.git] / src / game_sp / DoGameStuff.c
index 3d856d542da029eb0cd8adcce9c509b85644dcd5..2ba35823a8db9fc16c5b24d9b05d71f797240a50 100644 (file)
@@ -4,30 +4,30 @@
 
 #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.
@@ -52,7 +52,7 @@ int subDoGameStuff()
   }
   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
@@ -66,45 +66,22 @@ int subDoGameStuff()
     } // loop    locloop_g_22B8          ' until all animatables done
   }
 
-#if 0
-  printf("::: DoGameStuff.c: KillMurphyFlag == %d [%d]\n",
-        KillMurphyFlag, MurphyMoveCounter);
-#endif
-
   // All animations are done now
-  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   if (KillMurphyFlag == 1 || MurphyMoveCounter == 0)
   {
-    if (LeadOutCounter == 0)
-    {
-#if 0
-      printf("::: DoGameStuff.c: killing murphy [%d] ...\n", KillMurphyFlag);
-#endif
-
-      KillMurphyFlag = 0;             // no more "kill Murphy"
-      ExplodeFieldSP(MurphyExplodePos);                 // Explode
-      LeadOutCounter = 0x40;           // quit: start lead-out
-    }
-
-#if 1
-    if (KillMurphyFlag == 1 &&
-       !game_sp_info.LevelSolved &&
-       !game_sp_info.GameOver)
+    if (LeadOutCounter == 0 &&
+       !game_sp.LevelSolved &&
+       !game_sp.GameOver)
     {
-#if 1
-      printf("::: DoGameStuff.c: !!!!!!!!!! GAME OVER !!!!!!!!!!\n");
-#endif
+      KillMurphyFlag = 0;                      // no more "kill Murphy"
+      ExplodeFieldSP(MurphyExplodePos);                // Explode
+      LeadOutCounter = 0x40;                   // quit: start lead-out
 
-      game_sp_info.GameOver = TRUE;
+      /* give Murphy some more time (LeadOutCounter) to reach the exit */
     }
-#endif
-
-
   } //  loc_g_22FB:
-
-
-  return subDoGameStuff;
-} // subDoGameStuff
+}
 
 static boolean IsToBeAnimated(int bl)
 {