rnd-20070907-2-src
authorHolger Schemel <info@artsoft.org>
Fri, 7 Sep 2007 19:59:57 +0000 (21:59 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:56:09 +0000 (10:56 +0200)
* fixed (experimental only) redrawing of every tile per frame (even if
  unneeded) for the extended (R'n'D based) EMC graphics engine

ChangeLog
src/conftime.h
src/editor.c
src/engines.h
src/game_em/graphics.c
src/tools.c

index 3c7b8dc384f87c61b56837d3135b6d47e92195fc..971e771fbba7978227d31a5cd7df3659084c19dd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2007-09-07
+       * fixed (experimental only) redrawing of every tile per frame (even if
+         unneeded) for the extended (R'n'D based) EMC graphics engine
+
 2007-09-03
        * fixed bug with displaying background for title messages on info screen
        * some code cleanup for the extended (R'n'D based) EMC graphics engine
index 83befca2ceb6598cbe61e9943b850f669ca8dda5..567075b8ca1572252c39caf92e55643e8be6bc62 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "2007-09-06 23:38"
+#define COMPILE_DATE_STRING "2007-09-07 21:55"
index ac7b42de8b395f178fd8a7a33879ed9a6423918f..fe8976f21c9254c4ad2cb7c0b14efbb95b1f85be 100644 (file)
@@ -7066,6 +7066,12 @@ void DrawLevelEd()
   BlitBitmap(drawto, bitmap_db_door,
             DX, DY, DXSIZE, DYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1);
 
+#if 1
+  /* draw new control window (with border) to window */
+  redraw_mask |= REDRAW_ALL;
+  BackToFront();
+#endif
+
   OpenDoor(DOOR_OPEN_1);
 }
 
index 72eb3214417fa029f7684747d1fd354d4c41a221..156a639882e4b9dbe7e38cd65ae548d33f05c654 100644 (file)
@@ -34,7 +34,7 @@ extern int getGameFrameDelay_EM(int);
 extern void PlayLevelSound_EM(int, int, int, int);
 extern void InitGraphicInfo_EM(void);
 
-void SetGfxAnimation_EM(int, int, int, int);
+void SetGfxAnimation_EM(struct GraphicInfo_EM *, int, int, int, int);
 void getGraphicSourceObjectExt_EM(struct GraphicInfo_EM *, int, int, int, int);
 void getGraphicSourcePlayerExt_EM(struct GraphicInfo_EM *, int, int, int);
 
index 124be8fdd1378168c80b93b9f3c77a79477fa88c..29d9e15d9d19d5ca3f39c1051c87b0028335045f 100644 (file)
@@ -354,7 +354,8 @@ static void animscreen(void)
   if (!game.use_native_emc_graphics_engine)
     for (y = 2; y < EM_MAX_CAVE_HEIGHT - 2; y++)
       for (x = 2; x < EM_MAX_CAVE_WIDTH - 2; x++)
-       SetGfxAnimation_EM(Draw[y][x], 7 - frame, x - 2, y - 2);
+       SetGfxAnimation_EM(&graphic_info_em_object[Draw[y][x]][frame],
+                          Draw[y][x], 7 - frame, x - 2, y - 2);
 
   for (y = top; y < top + MAX_BUF_YSIZE; y++)
   {
@@ -391,9 +392,11 @@ static void animscreen(void)
       redraw_screen_tile = (screentiles[sy][sx]    != obj ||
                            crumbled_state[sy][sx] != crm);
 
+#if 0
       /* !!! TEST ONLY -- CHANGE THIS !!! */
       if (!game.use_native_emc_graphics_engine)
        redraw_screen_tile = TRUE;
+#endif
 
       /* only redraw screen tiles if they (or their crumbled state) changed */
       if (redraw_screen_tile)
index d950959c53d4e723912185e7a23f32ff4b22c9df..7e2c3752d3a63f193abf5f86c2d66bdb1d659797 100644 (file)
@@ -6091,9 +6091,19 @@ void ResetGfxAnimation_EM(int x, int y, int tile)
   GfxFrame[x][y] = 0;
 }
 
-void SetGfxAnimation_EM(int tile, int frame_em, int x, int y)
+void SetGfxAnimation_EM(struct GraphicInfo_EM *g_em,
+                       int tile, int frame_em, int x, int y)
 {
   int action = object_mapping[tile].action;
+#if 1
+  int direction = object_mapping[tile].direction;
+  int effective_element = get_effective_element_EM(tile, frame_em);
+  int graphic = (direction == MV_NONE ?
+                el_act2img(effective_element, action) :
+                el_act_dir2img(effective_element, action, direction));
+  struct GraphicInfo *g = &graphic_info[graphic];
+  int sync_frame;
+#endif
   boolean action_removing = (action == ACTION_DIGGING ||
                             action == ACTION_SNAPPING ||
                             action == ACTION_COLLECTING);
@@ -6136,13 +6146,33 @@ void SetGfxAnimation_EM(int tile, int frame_em, int x, int y)
   {
     GfxFrame[x][y]++;
   }
+
+#if 1
+  if (graphic_info[graphic].anim_global_sync)
+    sync_frame = FrameCounter;
+  else if (IN_FIELD(x, y, MAX_LEV_FIELDX, MAX_LEV_FIELDY))
+    sync_frame = GfxFrame[x][y];
+  else
+    sync_frame = 0;    /* playfield border (pseudo steel) */
+
+  SetRandomAnimationValue(x, y);
+
+  int frame = getAnimationFrame(g->anim_frames,
+                               g->anim_delay,
+                               g->anim_mode,
+                               g->anim_start_frame,
+                               sync_frame);
+
+  g_em->unique_identifier =
+    (graphic << 16) | ((frame % 8) << 12) | (g_em->width << 6) | g_em->height;
+#endif
 }
 
 void getGraphicSourceObjectExt_EM(struct GraphicInfo_EM *g_em,
                                  int tile, int frame_em, int x, int y)
 {
-  int action          = object_mapping[tile].action;
-  int direction       = object_mapping[tile].direction;
+  int action = object_mapping[tile].action;
+  int direction = object_mapping[tile].direction;
   int effective_element = get_effective_element_EM(tile, frame_em);
   int graphic = (direction == MV_NONE ?
                 el_act2img(effective_element, action) :