X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=144bce2afeb7dc36852b81bc32cb66192fe3b405;hb=7530e229728f4d1ea54ab8e4393029f34a4a2618;hp=ad4170e66870a4edcb676221742ee83b1051ab3d;hpb=c0f4e194ce5e6f55185b8cb142c774682afedac6;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index ad4170e6..144bce2a 100644 --- a/src/tools.c +++ b/src/tools.c @@ -1490,8 +1490,9 @@ int getGraphicAnimationFrameXY(int graphic, int lx, int ly) 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; @@ -1499,14 +1500,19 @@ int getGraphicAnimationFrameXY(int graphic, int lx, int ly) 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) @@ -1996,11 +2002,11 @@ void DrawScreenElementExt(int x, int y, int dx, int dy, int element, 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]); @@ -5381,7 +5387,6 @@ unsigned int MoveDoor(unsigned int door_state) 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; @@ -5641,8 +5646,6 @@ unsigned int MoveDoor(unsigned int door_state) 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(); }