rnd-20100419-1-src
authorHolger Schemel <info@artsoft.org>
Sun, 18 Apr 2010 23:17:05 +0000 (01:17 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:59:07 +0000 (10:59 +0200)
16 files changed:
src/conftime.h
src/editor.c
src/files.c
src/game.c
src/game_sp/DDScrollBuffer.c
src/game_sp/Display.c
src/game_sp/Display.h
src/game_sp/Explosions.c
src/game_sp/InitGameConditions.c
src/game_sp/MainForm.c
src/game_sp/MainGameLoop.c
src/game_sp/file.c
src/game_sp/main.c
src/screens.c
src/tape.c
src/tools.c

index 06f20856ddd03d4a7dcbaab4f506ca72aa97f2fb..e5f38b5c96077dd1e3a288b0e0ba8254c53af82d 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "2010-04-18 20:47"
+#define COMPILE_DATE_STRING "2010-04-19 01:09"
index 83df2e15c5048d51ef8dc7bce33d29cc7f367ec4..7f1ec19f128fd20935d2fce1332786339313a9c9 100644 (file)
@@ -7409,6 +7409,11 @@ void DrawLevelEd()
   FadeOut(REDRAW_FIELD);
 #endif
 
+#if 1
+  /* needed if different viewport properties defined for editor */
+  ChangeViewportPropertiesIfNeeded();
+#endif
+
   OpenDoor(DOOR_OPEN_2 | DOOR_NO_DELAY);
 
 #if DEBUG
@@ -7438,6 +7443,10 @@ void DrawLevelEd()
   BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
             DOOR_GFX_PAGEX6, DOOR_GFX_PAGEY1, DXSIZE, DYSIZE, DX, DY);
 
+#if 0
+  printf("::: %d, %d  /  %d, %d\n", VX, VY, EX, EY);
+#endif
+
   /* draw bigger door */
   DrawSpecialEditorDoor();
 
@@ -11505,7 +11514,9 @@ static void HandleControlButtons(struct GadgetInfo *gi)
 
       BackToFront();           /* force redraw of undrawn special door */
 
+#if 0
       DrawCompleteVideoDisplay();
+#endif
 
       level_editor_test_game = TRUE;
 
index a1017dd2d04c59ed2da1764235c90462c095815f..52589dff17be7b69ca0a540e9c0070cf52788866 100644 (file)
@@ -9814,7 +9814,8 @@ static void InitMenuDesignSettings_SpecialPreProcessing()
   {
     viewport.playfield[i] = viewport.playfield[GFX_SPECIAL_ARG_DEFAULT];
     viewport.door_1[i] = viewport.door_1[GFX_SPECIAL_ARG_DEFAULT];
-    viewport.door_2[i] = viewport.door_2[GFX_SPECIAL_ARG_DEFAULT];
+    if (i != GFX_SPECIAL_ARG_EDITOR)   /* editor value already initialized */
+      viewport.door_2[i] = viewport.door_2[GFX_SPECIAL_ARG_DEFAULT];
   }
 }
 
index e671dbe4db71d3b44f97ecce958ea36c620cef8b..aeb40a51fcc369b0e06378145c6891669790cc84 100644 (file)
@@ -3725,6 +3725,10 @@ void InitGame()
   ChangeViewportPropertiesIfNeeded();
 #endif
 
+#if 1
+  DrawCompleteVideoDisplay();
+#endif
+
   InitGameEngine();
   InitGameControlValues();
 
index 792648d4d79430d7723644659cd9f09b161d83b1..eeecf2a784ff7945c658f17296e20e9b26972789 100644 (file)
@@ -250,6 +250,16 @@ void BlitScreenToBitmap_SP(Bitmap *target_bitmap)
   px += game_sp.scroll_xoffset;
   py += game_sp.scroll_yoffset;
 
+#if 1
+  if (ExplosionShakeMurphy != 0)
+  {
+    printf("::: ExplosionShakeMurphy\n");
+
+    px += TILEX / 2 - GetSimpleRandom(TILEX + 1);
+    py += TILEY / 2 - GetSimpleRandom(TILEX + 1);
+  }
+#endif
+
   BlitBitmap(bitmap_db_field_sp, target_bitmap, px, py, sxsize, sysize, sx, sy);
 }
 
index 8cd554840a8787a734984da16a7e7127c23ad16d..d3bf853e0049fce3ba8065a643d55ffc327a6fdb 100644 (file)
@@ -7,7 +7,7 @@
 
 int ScreenScrollXPos, ScreenScrollYPos;
 
-int ExplosionShake;
+int ExplosionShake, ExplosionShakeMurphy;
 boolean NoDisplayFlag;
 
 long DisplayMinX, DisplayMaxX;
index 2fbc4a2a8b4f9cee69abd9c48265591595253eb9..bc0934f4e49b9a128dc5826fddc460ed1193d27a 100644 (file)
@@ -10,7 +10,7 @@
 
 extern int ScreenScrollXPos, ScreenScrollYPos;
 
-extern int ExplosionShake;
+extern int ExplosionShake, ExplosionShakeMurphy;
 extern boolean NoDisplayFlag;
 
 extern long DisplayMinX, DisplayMaxX;
index ccd75b8f48b99180c1853455f2d8e1382cbe2246..e45ce791f4a95a417fd7a5ccc816fbf3bda20b9b 100644 (file)
@@ -43,7 +43,8 @@ void subAnimateExplosion(int si)
   if (bl == 8)
   {
     PlayField16[si] = 0;
-    ExplosionShake = 0; // nothing explodes
+    ExplosionShake = 0;                // nothing explodes
+    // ExplosionShakeMurphy = 0;       // nothing explodes
 
     // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     GfxGraphic[GetX(si)][GetY(si)] = aniSpace;
@@ -57,7 +58,8 @@ loc_g_28D0: // explosion produces infotron
   if (bl == 0x89)
   {
     PlayField16[si] = fiInfotron;
-    MovLowByte(&ExplosionShake, 0); // nothing explodes
+    MovLowByte(&ExplosionShake, 0);            // nothing explodes
+    // MovLowByte(&ExplosionShakeMurphy, 0);   // nothing explodes
 
     // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     GfxGraphic[GetX(si)][GetY(si)] = aniInfotron;
@@ -88,7 +90,8 @@ void ExplodeFieldSP(int si)
   if (ax == fiHardWare)
     return;
 
-  ExplosionShake = 1; // something explodes
+  ExplosionShake = 1;          // something explodes
+
   if (ax == fiMurphy)
   {
 #if 1
@@ -96,6 +99,10 @@ void ExplodeFieldSP(int si)
 #endif
 
     KillMurphyFlag = 1;
+
+#if 1
+    ExplosionShakeMurphy = 30; // Murphy explodes
+#endif
   }
 
   if (ax == fiElectron)
index dd210b1c144001b3db9184fdab8e361152907ecc..1313c49d4ce1c7e5c7745160e4b9b6912b25e70f 100644 (file)
@@ -21,6 +21,7 @@ void subInitGameConditions()
   YawnSleepCounter = 0;                        // Wake up sleeping Murphy
 
   ExplosionShake = 0;                  // Force explosion flag off
+  ExplosionShakeMurphy = 0;            // Force explosion flag off
 
   TerminalMaxCycles = 0x7F;
   YellowDisksExploded = 0;
index d612a6c6a8ab4576181fc9b771191f3cf6014837..c54bf63d21a3dbfd774b58b12ccd38dda746d2ce 100644 (file)
@@ -78,21 +78,27 @@ static void DrawFrame(int Delta)
   RX = FieldWidth - Delta;
   BY = FieldHeight - Delta;
 
-  DrawImage(LX, tY, imgFrameCorner);
-  DrawImage(LX, BY, imgFrameCorner);
-  DrawImage(RX, tY, imgFrameCorner);
-  DrawImage(RX, BY, imgFrameCorner);
+  DrawImage(LX, tY, (Delta > 0 ? imgFrameCorner : aniSpace));
+  DrawImage(LX, BY, (Delta > 0 ? imgFrameCorner : aniSpace));
+  DrawImage(RX, tY, (Delta > 0 ? imgFrameCorner : aniSpace));
+  DrawImage(RX, BY, (Delta > 0 ? imgFrameCorner : aniSpace));
 
   for (i = LX + 1; i <= RX - 1; i++)
   {
-    DrawImage(i, tY, imgFrameHorizontal);
-    DrawImage(i, BY, imgFrameHorizontal);
+    DrawImage(i, tY, (Delta > 0 ? imgFrameHorizontal : aniSpace));
+    DrawImage(i, BY, (Delta > 0 ? imgFrameHorizontal : aniSpace));
   }
 
   for (i = tY + 1; i <= BY - 1; i++)
   {
-    DrawImage(LX, i, imgFrameVertical);
-    DrawImage(RX, i, imgFrameVertical);
+    DrawImage(LX, i, (Delta > 0 ? imgFrameVertical : aniSpace));
+    DrawImage(RX, i, (Delta > 0 ? imgFrameVertical : aniSpace));
+  }
+
+  if (Delta > 0)
+  {
+    // ...
+    // ClearRectangle(bitmap_db_field_sp, 
   }
 }
 
index b72852921178bfc94c229f60176ddd92ade58401..65b88f2f5345a1967b63cfbe2a8ef7570611c17a 100644 (file)
@@ -51,6 +51,11 @@ void subMainGameLoop_Main(byte action, boolean warp_mode)
 
   TimerVar = TimerVar + 1;
 
+#if 1
+  if (ExplosionShakeMurphy > 0)
+    ExplosionShakeMurphy--;
+#endif
+
 #if 1
   if (ExitToMenuFlag == 1)
   {
index 8497704b55a15b33aed8dcf1629691542aae765f..2b8a1755fbd66d1ad559fe76ad9c86dbf4132b19 100644 (file)
@@ -127,7 +127,8 @@ void copyInternalEngineVars_SP()
   FieldMax = (FieldWidth * FieldHeight) + HeaderSize - 1;
   LevelMax = (FieldWidth * FieldHeight) - 1;
 
-  FileMax = FieldMax + native_sp_level.demo.length;
+  /* (add one byte for the level number stored as first byte of demo data) */
+  FileMax = FieldMax + native_sp_level.demo.length + 1;
 
   PlayField8 = REDIM_1D(sizeof(byte), 0, FileMax);
   DisPlayField = REDIM_1D(sizeof(byte), 0, FieldMax);
@@ -185,7 +186,7 @@ void copyInternalEngineVars_SP()
     PlayField8[FieldMax + 1] = native_sp_level.demo.level_nr;
 
     for (i = 0; i < native_sp_level.demo.length; i++)
-      PlayField8[FieldMax + i + 2] = native_sp_level.demo.data[i];
+      PlayField8[FieldMax + 2 + i] = native_sp_level.demo.data[i];
   }
 
   AnimationPosTable = REDIM_1D(sizeof(int), 0, LevelMax - 2 * FieldWidth);
index a29d6205884c30f563acb4a859608a2bd9f5b6c6..4da92cd3286972936cdb5a7d8034a621c4f269c6 100644 (file)
@@ -31,6 +31,13 @@ void InitGameEngine_SP()
   game_sp.scroll_xoffset = (EVEN(SCR_FIELDX) ? TILEX / 2 : 0);
   game_sp.scroll_yoffset = (EVEN(SCR_FIELDY) ? TILEY / 2 : 0);
 
+#if 1
+  if (native_sp_level.width <= SCR_FIELDX)
+    game_sp.scroll_xoffset = TILEX / 2;
+  if (native_sp_level.height <= SCR_FIELDY)
+    game_sp.scroll_yoffset = TILEY / 2;
+#endif
+
   for (x = 0; x < SP_MAX_PLAYFIELD_WIDTH; x++)
   {
     for (y = 0; y < SP_MAX_PLAYFIELD_HEIGHT; y++)
index 94f0824e47639679c062c615c7a25968f157529f..4bee7dc22bca3cb6539f5a72229ea59c1b546c84 100644 (file)
@@ -1781,7 +1781,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
 
        FadeSetEnterScreen();
 
-#if 1
+#if 0
        /* needed if different viewport properties defined for editor */
        ChangeViewportPropertiesIfNeeded();
 #endif
index 9f2a61f39bae0069976c9587c3d908289051250f..5c90cb416d074b931f45df93e919b24fdf1b268d 100644 (file)
@@ -410,6 +410,12 @@ void DrawVideoDisplay(unsigned long state, unsigned long value)
 
 void DrawCompleteVideoDisplay()
 {
+#if 0
+  printf("::: %d, %d  /  %d, %d [%d] [%d, %d] [%d/%d]\n",
+        VX, VY, EX, EY, game_status, gfx.vx, gfx.vy,
+        tape.date, tape.length);
+#endif
+
   BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
             DOOR_GFX_PAGEX3, DOOR_GFX_PAGEY2,
             gfx.vxsize, gfx.vysize, gfx.vx, gfx.vy);
@@ -420,11 +426,38 @@ void DrawCompleteVideoDisplay()
             gfx.vx + VIDEO_CONTROL_XPOS, gfx.vy + VIDEO_CONTROL_YPOS);
 
   DrawVideoDisplay(VIDEO_ALL_OFF, 0);
+
+#if 1
+  if (tape.recording)
+  {
+    DrawVideoDisplay(VIDEO_STATE_REC_ON, 0);
+    DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
+    DrawVideoDisplay(VIDEO_STATE_TIME_ON, tape.length_seconds);
+
+    if (tape.pausing)
+      DrawVideoDisplay(VIDEO_STATE_PAUSE_ON, 0);
+  }
+  else if (tape.playing)
+  {
+    DrawVideoDisplay(VIDEO_STATE_PLAY_ON, 0);
+    DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
+    DrawVideoDisplay(VIDEO_STATE_TIME_ON, 0);
+
+    if (tape.pausing)
+      DrawVideoDisplay(VIDEO_STATE_PAUSE_ON, 0);
+  }
+  else if (tape.date && tape.length)
+  {
+    DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
+    DrawVideoDisplay(VIDEO_STATE_TIME_ON, tape.length_seconds);
+  }
+#else
   if (tape.date && tape.length)
   {
     DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
     DrawVideoDisplay(VIDEO_STATE_TIME_ON, tape.length_seconds);
   }
+#endif
 
   BlitBitmap(drawto, bitmap_db_door, gfx.vx, gfx.vy, gfx.vxsize, gfx.vysize,
             DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY2);
@@ -469,8 +502,9 @@ void TapeErase()
 {
   int i;
 
-  tape.length = 0;
   tape.counter = 0;
+  tape.length = 0;
+  tape.length_seconds = 0;
 
   if (leveldir_current)
     setString(&tape.level_identifier, leveldir_current->identifier);
@@ -534,6 +568,7 @@ void TapeStartRecording(long random_seed)
   DrawVideoDisplay(VIDEO_STATE_REC_ON, 0);
   DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
   DrawVideoDisplay(VIDEO_STATE_TIME_ON, 0);
+
   MapTapeWarpButton();
 
   SetDrawDeactivationMask(REDRAW_NONE);
@@ -707,6 +742,7 @@ void TapeStartPlaying()
   DrawVideoDisplay(VIDEO_STATE_PLAY_ON, 0);
   DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
   DrawVideoDisplay(VIDEO_STATE_TIME_ON, 0);
+
   MapTapeWarpButton();
 
   SetDrawDeactivationMask(REDRAW_NONE);
index cb23bae615649c143a0e385aa126f6eb869a4f63..8461537a9329e91bfa9d0c327380493d9be8af91 100644 (file)
@@ -8104,6 +8104,12 @@ void ChangeViewportPropertiesIfNeeded()
   int new_scr_fieldx = (vp_playfield->width  - 2 * border_size) / TILESIZE;
   int new_scr_fieldy = (vp_playfield->height - 2 * border_size) / TILESIZE;
 
+#if 0
+  /* !!! TEST ONLY !!! */
+  // InitGfxBuffers();
+  return;
+#endif
+
   if (viewport.window.width  != WIN_XSIZE ||
       viewport.window.height != WIN_YSIZE)
   {
@@ -8152,4 +8158,8 @@ void ChangeViewportPropertiesIfNeeded()
       InitToons();
     }
   }
+
+#if 0
+  printf("::: %d, %d  /  %d, %d [%d]\n", VX, VY, EX, EY, game_status);
+#endif
 }