rnd-20020610-1-src
authorHolger Schemel <info@artsoft.org>
Sun, 9 Jun 2002 22:52:58 +0000 (00:52 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:37:55 +0000 (10:37 +0200)
src/files.c
src/game.c
src/timestamp.h

index e4b5a7315df438f675407942898129d4d1c089d2..76fd384a247ed9ad584f713221895da0f609a018 100644 (file)
@@ -690,8 +690,6 @@ static void setTapeInfoToDefaults()
   int i;
 
   /* always start with reliable default values (empty tape) */
-  tape.file_version = FILE_VERSION_ACTUAL;
-  tape.game_version = GAME_VERSION_ACTUAL;
   TapeErase();
 
   /* default values (also for pre-1.2 tapes) with only the first player */
@@ -731,8 +729,7 @@ static int LoadTape_HEAD(FILE *file, int chunk_size, struct TapeInfo *tape)
   if (tape->file_version >= FILE_VERSION_1_2)
   {
     byte store_participating_players = fgetc(file);
-
-    ReadUnusedBytesFromFile(file, TAPE_HEADER_UNUSED);
+    int engine_version;
 
     /* since version 1.2, tapes store which players participate in the tape */
     tape->num_participating_players = 0;
@@ -747,7 +744,11 @@ static int LoadTape_HEAD(FILE *file, int chunk_size, struct TapeInfo *tape)
       }
     }
 
-    ReadUnusedBytesFromFile(file, 4);
+    ReadUnusedBytesFromFile(file, TAPE_HEADER_UNUSED);
+
+    engine_version = getFileVersion(file);
+    if (engine_version > 0)
+      tape->engine_version = engine_version;
   }
 
   return chunk_size;
@@ -977,9 +978,10 @@ static void SaveTape_HEAD(FILE *file, struct TapeInfo *tape)
 
   fputc(store_participating_players, file);
 
+  /* unused bytes not at the end here for 4-byte alignment of engine_version */
   WriteUnusedBytesToFile(file, TAPE_HEADER_UNUSED);
 
-  WriteUnusedBytesToFile(file, 4);
+  putFileVersion(file, tape->engine_version);
 }
 
 static void SaveTape_BODY(FILE *file, struct TapeInfo *tape)
index f844675e4f6b562133f4a71efa1c4a13ca19fb77..a6f6ce263b7f3ebad84e30191cafa9951d16fd18 100644 (file)
@@ -599,29 +599,10 @@ void InitGameSound()
 
 static void InitGameEngine()
 {
-  boolean emulate_bd = TRUE;   /* unless non-BOULDERDASH elements found */
-  boolean emulate_sb = TRUE;   /* unless non-SOKOBAN     elements found */
-  boolean emulate_sp = TRUE;   /* unless non-SUPAPLEX    elements found */
-  int i, x, y;
-
-  for(y=0; y<lev_fieldy; y++)
-  {
-    for(x=0; x<lev_fieldx; x++)
-    {
-      if (emulate_bd && !IS_BD_ELEMENT(Feld[x][y]))
-       emulate_bd = FALSE;
-      if (emulate_sb && !IS_SB_ELEMENT(Feld[x][y]))
-       emulate_sb = FALSE;
-      if (emulate_sp && !IS_SP_ELEMENT(Feld[x][y]))
-       emulate_sp = FALSE;
-    }
-  }
+  int i;
 
   game.engine_version = (tape.playing ? tape.engine_version :
                         level.game_version);
-  game.emulation = (emulate_bd ? EMU_BOULDERDASH :
-                   emulate_sb ? EMU_SOKOBAN :
-                   emulate_sp ? EMU_SUPAPLEX : EMU_NONE);
 
 #if 0
     printf("level %d: level version == %06d\n", level_nr, level.game_version);
@@ -681,6 +662,9 @@ static void InitGameEngine()
 
 void InitGame()
 {
+  boolean emulate_bd = TRUE;   /* unless non-BOULDERDASH elements found */
+  boolean emulate_sb = TRUE;   /* unless non-SOKOBAN     elements found */
+  boolean emulate_sp = TRUE;   /* unless non-SUPAPLEX    elements found */
   int i, j, x, y;
 
   InitGameEngine();
@@ -817,8 +801,23 @@ void InitGame()
   }
 
   for(y=0; y<lev_fieldy; y++)
+  {
     for(x=0; x<lev_fieldx; x++)
+    {
+      if (emulate_bd && !IS_BD_ELEMENT(Feld[x][y]))
+       emulate_bd = FALSE;
+      if (emulate_sb && !IS_SB_ELEMENT(Feld[x][y]))
+       emulate_sb = FALSE;
+      if (emulate_sp && !IS_SP_ELEMENT(Feld[x][y]))
+       emulate_sp = FALSE;
+
       InitField(x, y, TRUE);
+    }
+  }
+
+  game.emulation = (emulate_bd ? EMU_BOULDERDASH :
+                   emulate_sb ? EMU_SOKOBAN :
+                   emulate_sp ? EMU_SUPAPLEX : EMU_NONE);
 
   /* correct non-moving belts to start moving left */
   for (i=0; i<4; i++)
@@ -5199,7 +5198,7 @@ boolean MoveFigure(struct PlayerInfo *player, int dx, int dy)
     return FALSE;
 #else
   if (!FrameReached(&player->move_delay, player->move_delay_value) &&
-      !(tape.playing && tape.game_version < GAME_VERSION_2_0))
+      !(tape.playing && tape.file_version < FILE_VERSION_2_0))
     return FALSE;
 #endif
 
@@ -6063,7 +6062,7 @@ int DigField(struct PlayerInfo *player,
        return MF_NO_ACTION;
 #else
       if (!FrameReached(&player->push_delay, player->push_delay_value) &&
-         !(tape.playing && tape.game_version < GAME_VERSION_2_0) &&
+         !(tape.playing && tape.file_version < FILE_VERSION_2_0) &&
          element != EL_SPRING)
        return MF_NO_ACTION;
 #endif
@@ -6305,7 +6304,7 @@ int DigField(struct PlayerInfo *player,
        return MF_NO_ACTION;
 #else
       if (!FrameReached(&player->push_delay, player->push_delay_value) &&
-         !(tape.playing && tape.game_version < GAME_VERSION_2_0) &&
+         !(tape.playing && tape.file_version < FILE_VERSION_2_0) &&
          element != EL_BALLOON)
        return MF_NO_ACTION;
 #endif
index 7d84c543ec7e22f5dd7439dfe07896f44189eb7b..e1c332bf2ee02ced504e7cf89b92416dd6d861a6 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2002-06-09 22:29]"
+#define COMPILE_DATE_STRING "[2002-06-10 00:51]"