return phase;
}
+void SetRandomAnimationValue(int x, int y)
+{
+ anim.random_frame = GfxRandom[x][y];
+}
+
inline int getGraphicAnimationFrame(int graphic, int sync_frame)
{
/* animation synchronized with global frame counter, not move position */
DrawGraphicExt(dst_bitmap, x, y, graphic, frame);
}
-inline boolean checkDrawGraphicAnimation(int x, int y, int graphic)
+inline boolean checkDrawGraphicAnimation(int sx, int sy, int graphic)
{
- int lx = LEVELX(x), ly = LEVELY(y);
+ int lx = LEVELX(sx), ly = LEVELY(sy);
- return (IN_SCR_FIELD(x, y) &&
- GfxFrame[lx][ly] % graphic_info[graphic].anim_delay == 0);
+ return (IN_SCR_FIELD(sx, sy) && IS_NEW_FRAME(GfxFrame[lx][ly], graphic));
}
-inline boolean checkDrawLevelGraphicAnimation(int x, int y, int graphic)
+inline boolean checkDrawLevelGraphicAnimation(int lx, int ly, int graphic)
{
- return (IN_SCR_FIELD(SCREENX(x), SCREENY(y)) &&
- GfxFrame[x][y] % graphic_info[graphic].anim_delay == 0);
+ int sx = SCREENX(lx), sy = SCREENY(ly);
+
+ return (IN_SCR_FIELD(sx, sy) && IS_NEW_FRAME(GfxFrame[lx][ly], graphic));
}
inline boolean DrawGraphicAnimation(int x, int y, int graphic)
{
int lx = LEVELX(x), ly = LEVELY(y);
+#if 0
if (!checkDrawGraphicAnimation(x, y, graphic))
return FALSE;
+#else
+ if (!IN_SCR_FIELD(x, y))
+ return FALSE;
+#endif
DrawGraphicAnimationExt(drawto_field, FX + x * TILEX, FY + y * TILEY,
graphic, GfxFrame[lx][ly], NO_MASKING);
return DrawGraphicAnimation(SCREENX(x), SCREENY(y), el2img(element));
}
+inline void ContinueLevelGraphicAnimation(int x, int y, int graphic)
+{
+ if (!IS_NEW_FRAME(GfxFrame[x][y], graphic))
+ return;
+
+ DrawGraphicAnimation(SCREENX(x), SCREENY(y), graphic);
+}
+
+void ContinueLevelElementAnimation(int x, int y, int element)
+{
+ ContinueLevelGraphicAnimation(x, y, el2img(element));
+}
+
void DrawAllPlayers()
{
int i;
int move_pos = getFramePosition(ux, uy);
int gfx_action = getGfxAction(ux, uy);
+ SetRandomAnimationValue(ux, uy);
+
graphic = el_dir_act2img(element, move_dir, gfx_action);
frame = getGraphicAnimationFrame(graphic, move_pos);
}