rnd-20091101-1-src
authorHolger Schemel <info@artsoft.org>
Sat, 31 Oct 2009 23:03:04 +0000 (00:03 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:57:54 +0000 (10:57 +0200)
* fixed SP engine to set "game over" not before lead out counter done

ChangeLog
src/conftime.h
src/game_sp/DoGameStuff.c
src/game_sp/MainGameLoop.c
src/game_sp/file.c

index 7ad0fba1081c58af55edd629506c74db6c0bea03..a839562702d1940a7798def94b2a4472a25b5ae2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+2009-10-31
+       * fixed SP engine to set "game over" not before lead out counter done
+
 2009-10-30
        * fixed (potential) compile error when using GCC option "-std=gnu99"
          (thanks to Tom "spot" Callaway)
index 32328865b2188c3a304cc81363e03d441493b5c3..3cac76c22e44c65140bdbba952e2b442331b06ac 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "2009-10-30 22:02"
+#define COMPILE_DATE_STRING "2009-10-31 23:44"
index ce1d77e2d6b8b12d181ea63b15d112e17dab2160..8e7d8830c9dc360fa294616da41450cdf098c5f9 100644 (file)
@@ -83,7 +83,7 @@ int subDoGameStuff()
     if (LeadOutCounter == 0)
 #endif
     {
-#if 0
+#if 1
       printf("::: DoGameStuff.c: killing murphy [%d] ...\n", KillMurphyFlag);
 #endif
 
@@ -92,11 +92,18 @@ int subDoGameStuff()
       LeadOutCounter = 0x40;           // quit: start lead-out
 
 #if 1
+
 #if 1
       printf("::: DoGameStuff.c: !!!!!!!!!! GAME OVER !!!!!!!!!!\n");
+      printf("::: [KillMurphyFlag == %d]\n", KillMurphyFlag);
 #endif
 
+#if 1
+      /* give Murphy some more time (LeadOutCounter) to reach the exit */
+#else
       game_sp_info.GameOver = TRUE;
+#endif
+
 #endif
     }
 
index e1f81f4ddedf7d1e953beaabfdc1c67c1d63a066..bae1d6d95d4aa886acbca1a8586bacae1bd36874 100644 (file)
@@ -279,11 +279,16 @@ locRepeatMainGameLoop:                           // start repeating game loop
 
 locExitMainGameLoop:
 
-#if 0
+#if 1
   printf("::: locExitMainGameLoop reached [%d]\n", LeadOutCounter);
+  printf("::: [KillMurphyFlag == %d]\n", KillMurphyFlag);
 #endif
 
-
+#if 1
+  /* if the game is not won when reaching this point, then it is lost */
+  if (!game_sp_info.LevelSolved)
+    game_sp_info.GameOver = TRUE;
+#endif
 
 #if 1
   return subMainGameLoop;
index 12b52c3a24e7327aac681e8545e081e9e79e407d..2a657fccc732077c0b7380d98a0f641fdd0ab1d9 100644 (file)
@@ -73,6 +73,12 @@ void copyInternalEngineVars_SP()
 
 #if 1
 
+#if 0
+  /* fill preceding playfield buffer zone with (indestructible) "hardware" */
+  for (i = -FieldWidth; i < 0; i++)
+    PlayField16[i] = 0x20;
+#endif
+
   count = 0;
   for (y = 0; y < native_sp_level.height; y++)
     for (x = 0; x < native_sp_level.width; x++)
@@ -341,13 +347,20 @@ boolean LoadNativeLevel_SP(char *filename, int pos)
       ((name_first == '?' || name_first == '1') &&
        (name_last  == '?' || name_last  == '1'));
 
-    /* correct leading multipart level meta information in level name */
-    for (i = 0; i < SP_LEVEL_NAME_LEN && header->LevelTitle[i] == name_first; i++)
-      header->LevelTitle[i] = '-';
-
-    /* correct trailing multipart level meta information in level name */
-    for (i = SP_LEVEL_NAME_LEN - 1; i >= 0 && header->LevelTitle[i] == name_last; i--)
-      header->LevelTitle[i] = '-';
+    if (is_multipart_level)
+    {
+      /* correct leading multipart level meta information in level name */
+      for (i = 0;
+          i < SP_LEVEL_NAME_LEN && header->LevelTitle[i] == name_first;
+          i++)
+       header->LevelTitle[i] = '-';
+
+      /* correct trailing multipart level meta information in level name */
+      for (i = SP_LEVEL_NAME_LEN - 1;
+          i >= 0 && header->LevelTitle[i] == name_last;
+          i--)
+       header->LevelTitle[i] = '-';
+    }
 
     /* ---------- check for normal single level ---------- */