rnd-20090724-1-src
authorHolger Schemel <info@artsoft.org>
Fri, 24 Jul 2009 12:18:00 +0000 (14:18 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:57:31 +0000 (10:57 +0200)
src/conftime.h
src/game_sp/Globals.c
src/game_sp/MainForm.c
src/game_sp/MainForm.h
src/game_sp/MainGameLoop.c
src/game_sp/main.c
src/game_sp/vb_lib.c

index 208d098edc7bffe03e65baa32ce59d160eba91a1..c194c8e944ced28c27320589a5c429dcee8ccb4e 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "2009-07-22 12:30"
+#define COMPILE_DATE_STRING "2009-07-24 14:16"
index 36034f5b63ba5159e42c90531836a1063eb5ec90..67491f730a84fb7ba0801094b6088131c5462628 100644 (file)
@@ -331,26 +331,40 @@ void ReadLevel()
   long i;
   // byte T;
 
+#if 1
+  // CurPath = "/home/aeglos/projects/rocksndiamonds/levels/TEST_supaplex/supaplex/levels.dat";
+  CurPath = "/home/aeglos/projects/rocksndiamonds/supaplex_demo_JENS0001.sp";
+  LevelNumber = 1;
+#endif
+
   DemoAvailable = False;
 
   if (STRING_IS_LIKE(CurPath, "*.mpx"))
   {
+    printf("::: reading MPX file ...\n");
+
     ReadMPX();
     return;
   }
 
   if (STRING_IS_LIKE(CurPath, "*.sp"))
   {
+    printf("::: reading SP file ...\n");
+
     ReadDemo();
     return;
   }
 
   if (DemoFlag != 0)
   {
+    printf("::: reading demo file ...\n");
+
     ReadDemo();
     return;
   }
 
+  printf("::: reading level file ...\n");
+
   FileMax = 0;
   FieldWidth = 60;
   FieldHeight = 24;
@@ -366,11 +380,6 @@ void ReadLevel()
 
   // --- On Error GoTo ReadLevelEH
 
-#if 1
-  CurPath = "/home/aeglos/projects/rocksndiamonds/levels/TEST_supaplex/supaplex/levels.dat";
-  LevelNumber = 1;
-#endif
-
   printf("::: '%s', %d\n", CurPath, LevelNumber);
 
   FNum = fopen(CurPath, "rb");
@@ -381,6 +390,7 @@ void ReadLevel()
 #else
   FILE_GET(FNum, i, &PlayField8, sizeof(PlayField8));
 #endif
+
   i = (LevelNumber) * ((long)(FieldMax) + 1) + 1 - HeaderSize;
   FILE_GET(FNum, i, &LInfo, sizeof(LInfo)); // store level info in an extra structure
 
@@ -426,8 +436,8 @@ void ReadLevel()
  }
 #endif
 
-  AnimationPosTable = REDIM_1D(sizeof(int), 0, LevelMax - 2 *FieldWidth);
-  AnimationSubTable = REDIM_1D(sizeof(byte), 0, LevelMax - 2 *FieldWidth);
+  AnimationPosTable = REDIM_1D(sizeof(int), 0, LevelMax - 2 * FieldWidth);
+  AnimationSubTable = REDIM_1D(sizeof(byte), 0, LevelMax - 2 * FieldWidth);
   TerminalState = REDIM_1D(sizeof(byte), FieldWidth, LevelMax - FieldWidth);
 
   GravityFlag = LInfo.InitialGravity;
@@ -455,31 +465,42 @@ static void ReadDemo()
   FieldWidth = 60;
   FieldHeight = 24;
   HeaderSize = 96;
+
   FieldMax = (FieldWidth * FieldHeight) + HeaderSize - 1;
   LevelMax = (FieldWidth * FieldHeight) - 1;
 
   // --- On Error GoTo ReadDemoEH
+
   FileMax = FileLen(CurPath) - 1;
+
   PlayField8 = REDIM_1D(sizeof(byte), 0, FileMax + 1 - 1);
   DisPlayField = REDIM_1D(sizeof(byte), 0, FieldMax + 1 - 1);
+
   // FNum = FreeFile();
+
   FNum = fopen(CurPath, "rb");
+
   i = (LevelNumber - 1) * ((long)(FieldMax) + 1) + 1;
 #if 1
   FILE_GET(FNum, i, PlayField8, FileMax + 1);
 #else
   FILE_GET(FNum, i, &PlayField8, sizeof(PlayField8));
 #endif
+
   i = (LevelNumber) * ((long)(FieldMax) + 1) + 1 - HeaderSize;
   FILE_GET(FNum, i, &LInfo, sizeof(LInfo)); // store level info in an extra structure
+
   fclose(FNum);
+
   // --- On Error GoTo 0
 
   if (FieldMax < FileMax)
     DemoAvailable = True;
 
   ReadSignature();
+
   PlayField16 = REDIM_1D(sizeof(int), -FieldWidth, FieldMax);
+
   for (i = 0; i <= FieldMax; i++)
   {
     PlayField16[i] = PlayField8[i];
@@ -487,18 +508,24 @@ static void ReadDemo()
     PlayField8[i] = 0;
   }
 
-  AnimationPosTable = REDIM_1D(sizeof(int), 0, LevelMax - 2 *FieldWidth);
-  AnimationSubTable = REDIM_1D(sizeof(byte), 0, LevelMax - 2 *FieldWidth);
+  AnimationPosTable = REDIM_1D(sizeof(int), 0, LevelMax - 2 * FieldWidth);
+  AnimationSubTable = REDIM_1D(sizeof(byte), 0, LevelMax - 2 * FieldWidth);
   TerminalState = REDIM_1D(sizeof(byte), 0, FieldMax + 1 - 1);
+
   DemoPointer = FieldMax + 1;
   DemoOffset = DemoPointer;
   DemoKeyRepeatCounter = 0;
+
   // DemoFlag = 1
   // DemoAvailable = True
+
   GravityFlag = LInfo.InitialGravity;
   FreezeZonks = LInfo.InitialFreezeZonks;
+
   RandomSeed = LInfo.DemoRandomSeed;
+
   LevelLoaded = True;
+
   return;
 
 #if 0
index 5c3b85fda28de4470669981ae381b6fe7396c8c3..b04fda82c9a9c15dc29be3cad0e1dbc5f78882b6 100644 (file)
@@ -2523,20 +2523,28 @@ void menPlay_Click()
 
 }
 
-#if 0
-
-static void menPlayDemo_Click()
+// static void menPlayDemo_Click()
+void menPlayDemo_Click()
 {
   DemoFlag = 1;
   RecordDemoFlag = 0;
+
+#if 0
   lblStatus = "Demo Playback";
+#endif
+
   menPlay_Click();
+
+#if 0
   if (LevelStatus != 1)
     lblStatus = "Demo Failed";
+#endif
 
   DemoFlag = 0;
 }
 
+#if 0
+
 static void menRec_Click()
 {
   Trace("MainForm", "--> menRec_Click()");
index ae913f8e2732e1e1fc2aa640f9006f4a91e9bc90..9846ce2c594b1b8467b70ca572e0b49e7a1a5182 100644 (file)
@@ -28,6 +28,7 @@ extern void menEdit_Click();
 extern void menPlaySpeed_Click(int Index);
 extern void menStop_Click();
 extern void menPlay_Click();
+extern void menPlayDemo_Click();
 extern void Form_Load();
 
 #endif /* MAINFORM_H */
index b4a91d006f98a80db10eb77fbad667a2988256c0..398bc80f1371045cb963fe4ec8dd53a44446c4dd 100644 (file)
@@ -35,12 +35,16 @@ int subMainGameLoop()
 
   if (DemoFlag != 0)
   {
+    printf("::: playing demo ...\n");
+
     // EP set level success byte: demo, not game
     WasDemoFlag = 1;
     EP_GameDemoVar0DAA = 0; // demo
   }
   else // loc_g_1836:
   {
+    printf("::: playing game ...\n");
+
     // EP set level success byte: game, not demo
     WasDemoFlag = 0;
     EP_GameDemoVar0DAA = 1; // game
@@ -249,8 +253,13 @@ int subCalculateScreenScrollPos()
     Ay = MainForm.picPane.Height / 2;
   }
 
+#if 1
+  ScreenScrollXPos = Stretch * (MurphyScreenXPos + 16) - ax;
+  ScreenScrollYPos = Stretch * (MurphyScreenYPos + 16) - Ay;
+#else
   ScreenScrollXPos = Stretch * (MurphyScreenXPos + 8) - ax;
   ScreenScrollYPos = Stretch * (MurphyScreenYPos + 8) - Ay;
+#endif
 
 #if 0
   printf("::: MainGameLoop.c: subCalculateScreenScrollPos(): %d, %d [%d, %d] -> %d, %d\n",
index 235d433454c80ec341a2b23aac4b0fbc98e0f6eb..ce409eb4551e3fe882a64f3af7ba37adbb003573 100644 (file)
@@ -5,7 +5,11 @@
 
 void InitGameEngine_SP()
 {
+#if 0
   menPlay_Click();
+#else
+  menPlayDemo_Click();
+#endif
 }
 
 void BlitScreenToBitmap_SP(Bitmap *target_bitmap)
index d32a62f85b9a8e2c359f79ebbba75e4267081f56..fa1ef2c64cf312c0dc2d4ccc2687b8247f6dc441 100644 (file)
@@ -9,6 +9,8 @@
 
 #include "main_sp.h"
 
+#include <sys/stat.h>
+
 
 /* helper functions for constructs not supported by C */
 void *REDIM_1D(int a, int b, int c)
@@ -55,7 +57,16 @@ char *INT_TO_STR(int a)
 
 boolean STRING_IS_LIKE(char *a, char *b)
 {
-  return 0;
+  if (*b == '*')               // something like "*.sp"
+  {
+    return (strSuffix(a, &b[1]));
+  }
+  else
+  {
+    // more sophisticated patterns currently not supported
+
+    return 0;
+  }
 }
 
 
@@ -154,7 +165,16 @@ char *Hex(int a)
 
 int FileLen(char *a)
 {
-  return 0;
+  struct stat buffer;
+
+  if (stat(a, &buffer) == 0)
+  {
+    return buffer.st_size;
+  }
+  else
+  {
+    return 0;
+  }
 }
 
 long GetTickCount()