int ysize = MAX(1, g->anim_frames / xsize);
int xoffset = g->anim_start_frame % xsize;
int yoffset = g->anim_start_frame % ysize;
- int x = (lx + xoffset + xsize) % xsize;
- int y = (ly + yoffset + ysize) % ysize;
+ // may be needed if screen field is significantly larger than playfield
+ int x = (lx + xoffset + SCR_FIELDX * xsize) % xsize;
+ int y = (ly + yoffset + SCR_FIELDY * ysize) % ysize;
int sync_frame = y * xsize + x;
return sync_frame % g->anim_frames;
else if (graphic_info[graphic].anim_mode & ANIM_RANDOM_STATIC)
{
struct GraphicInfo *g = &graphic_info[graphic];
- int x = (lx + lev_fieldx) % lev_fieldx;
- int y = (ly + lev_fieldy) % lev_fieldy;
+ // may be needed if screen field is significantly larger than playfield
+ int x = (lx + SCR_FIELDX * lev_fieldx) % lev_fieldx;
+ int y = (ly + SCR_FIELDY * lev_fieldy) % lev_fieldy;
int sync_frame = GfxRandomStatic[x][y];
return sync_frame % g->anim_frames;
}
+ else
+ {
+ int sync_frame = (IN_LEV_FIELD(lx, ly) ? GfxFrame[lx][ly] : -1);
- return getGraphicAnimationFrame(graphic, GfxFrame[lx][ly]);
+ return getGraphicAnimationFrame(graphic, sync_frame);
+ }
}
void getGraphicSourceBitmap(int graphic, int tilesize, Bitmap **bitmap)
int graphic;
int frame;
- if (element == EL_EMPTY)
- element = GfxElementEmpty[lx][ly];
-
if (IN_LEV_FIELD(lx, ly))
{
+ if (element == EL_EMPTY)
+ element = GfxElementEmpty[lx][ly];
+
SetRandomAnimationValue(lx, ly);
graphic = el_act_dir2img(element, GfxAction[lx][ly], GfxDir[lx][ly]);
int num_move_steps = 0; // number of animation steps for all doors
int max_move_delay_doors_only = 0; // delay for doors only (no panel)
int num_move_steps_doors_only = 0; // steps for doors only (no panel)
- int current_move_delay = 0;
int start = 0;
int k;
SkipUntilDelayReached(&door_delay, door_delay_value, &k, last_frame);
- current_move_delay += max_step_delay;
-
// prevent OS (Windows) from complaining about program not responding
CheckQuitEvent();
}
* Note: this function is not for Win32 high precision timing purpose. See
* elapsed_time().
*/
-int gettimeofday_windows(struct timeval * tp, struct timezone * tzp)
+static int gettimeofday_windows(struct timeval * tp, struct timezone * tzp)
{
FILETIME file_time;
SYSTEMTIME system_time;