X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=203149bc4791bfff2bcd5e248d083e032d38d422;hb=a84bd00a438ff458c2d74d1d1784deefe12bf84a;hp=56cb38b2a363d17f719130ff276301cc5b8ef44f;hpb=a4eaa7fcd8ca604faeee50f049c441415aa4968c;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index 56cb38b2..203149bc 100644 --- a/src/game.c +++ b/src/game.c @@ -1459,7 +1459,7 @@ void DrawDynamite(int x, int y) #else int graphic = el2img(Feld[x][y]); #endif - int phase; + int frame; if (!IN_SCR_FIELD(sx, sy) || IS_PLAYER(x, y)) return; @@ -1473,37 +1473,37 @@ void DrawDynamite(int x, int y) if (Feld[x][y] == EL_DYNAMITE_ACTIVE) { - if ((phase = (96 - MovDelay[x][y]) / 12) > 6) - phase = 6; + if ((frame = (96 - MovDelay[x][y]) / 12) > 6) + frame = 6; } else { - if ((phase = ((96 - MovDelay[x][y]) / 6) % 8) > 3) - phase = 7 - phase; + if ((frame = ((96 - MovDelay[x][y]) / 6) % 8) > 3) + frame = 7 - frame; } #if 1 - phase = getNewGraphicAnimationFrame(graphic, 96 - MovDelay[x][y]); + frame = getNewGraphicAnimationFrame(graphic, 96 - MovDelay[x][y]); #endif /* - printf("-> %d: %d [%d]\n", graphic, phase, MovDelay[x][y]); + printf("-> %d: %d [%d]\n", graphic, frame, MovDelay[x][y]); */ #if 0 if (game.emulation == EMU_SUPAPLEX) DrawGraphic(sx, sy, GFX_SP_DISK_RED); else if (Store[x][y]) - DrawGraphicThruMask(sx, sy, graphic + phase); + DrawGraphicThruMask(sx, sy, graphic + frame); else - DrawGraphic(sx, sy, graphic + phase); + DrawGraphic(sx, sy, graphic + frame); #else if (game.emulation == EMU_SUPAPLEX) DrawNewGraphic(sx, sy, IMG_SP_DISK_RED, 0); else if (Store[x][y]) - DrawNewGraphicThruMask(sx, sy, graphic, phase); + DrawNewGraphicThruMask(sx, sy, graphic, frame); else - DrawNewGraphic(sx, sy, graphic, phase); + DrawNewGraphic(sx, sy, graphic, frame); #endif } @@ -1540,7 +1540,8 @@ void CheckDynamite(int x, int y) void Explode(int ex, int ey, int phase, int mode) { int x, y; - int num_phase = 9, delay = (game.emulation == EMU_SUPAPLEX ? 3 : 2); + int num_phase = 9; + int delay = (game.emulation == EMU_SUPAPLEX ? 3 : 2); int last_phase = num_phase * delay; int half_phase = (num_phase / 2) * delay; int first_phase_after_start = EX_PHASE_START + 1; @@ -1724,13 +1725,14 @@ void Explode(int ex, int ey, int phase, int mode) InitField(x, y, FALSE); if (CAN_MOVE(element) || COULD_MOVE(element)) InitMovDir(x, y); - DrawLevelField(x, y); + DrawNewLevelField(x, y); if (IS_PLAYER(x, y) && !PLAYERINFO(x,y)->present) StorePlayer[x][y] = 0; } else if (!(phase % delay) && IN_SCR_FIELD(SCREENX(x), SCREENY(y))) { +#if 0 int graphic = GFX_EXPLOSION; if (game.emulation == EMU_SUPAPLEX) @@ -1738,18 +1740,35 @@ void Explode(int ex, int ey, int phase, int mode) GFX_SP_EXPLODE_INFOTRON : GFX_SP_EXPLODE_EMPTY); + graphic += (phase / delay - 1); +#else + int graphic = IMG_EXPLOSION; + int frame = (phase / delay - 1); + + if (game.emulation == EMU_SUPAPLEX) + graphic = (Store[x][y] == EL_SP_INFOTRON ? + IMG_SP_EXPLOSION_INFOTRON : + IMG_SP_EXPLOSION); +#endif + if (phase == delay) ErdreichAnbroeckeln(SCREENX(x), SCREENY(y)); - graphic += (phase / delay - 1); - if (IS_PFORTE(Store[x][y])) { - DrawLevelElement(x, y, Store[x][y]); + DrawNewLevelElement(x, y, Store[x][y]); +#if 0 DrawGraphicThruMask(SCREENX(x), SCREENY(y), graphic); +#else + DrawNewGraphicThruMask(SCREENX(x), SCREENY(y), graphic, frame); +#endif } else +#if 0 DrawGraphic(SCREENX(x), SCREENY(y), graphic); +#else + DrawNewGraphic(SCREENX(x), SCREENY(y), graphic, frame); +#endif } } @@ -1879,8 +1898,14 @@ void Blurb(int x, int y) } else /* go on */ { +#if 0 int graphic = (element == EL_ACID_SPLASHING_LEFT ? GFX_BLURB_LEFT : GFX_BLURB_RIGHT); +#else + int graphic = (element == EL_ACID_SPLASHING_LEFT ? + IMG_ACID_SPLASHING_LEFT : + IMG_ACID_SPLASHING_RIGHT); +#endif if (!MovDelay[x][y]) /* initialize animation counter */ MovDelay[x][y] = 9; @@ -1889,12 +1914,20 @@ void Blurb(int x, int y) { MovDelay[x][y]--; if (MovDelay[x][y]/2 && IN_SCR_FIELD(SCREENX(x), SCREENY(y))) +#if 0 DrawGraphic(SCREENX(x), SCREENY(y), graphic+4-MovDelay[x][y]/2); +#else + { + int frame = getNewGraphicAnimationFrame(graphic, 8 - MovDelay[x][y]); + + DrawNewGraphic(SCREENX(x), SCREENY(y), graphic, frame); + } +#endif if (!MovDelay[x][y]) { Feld[x][y] = EL_EMPTY; - DrawLevelField(x, y); + DrawNewLevelField(x, y); } } } @@ -1959,7 +1992,7 @@ static void ToggleBeltSwitch(int x, int y) if (e_belt_nr == belt_nr) { Feld[xx][yy] = belt_base_switch_element[belt_nr] + belt_dir_nr; - DrawLevelField(xx, yy); + DrawNewLevelField(xx, yy); } } else if (IS_BELT(element) && belt_dir != MV_NO_MOVING) @@ -1971,7 +2004,7 @@ static void ToggleBeltSwitch(int x, int y) int belt_part = Feld[xx][yy] - belt_base_element[belt_nr]; Feld[xx][yy] = belt_base_active_element[belt_nr] + belt_part; - DrawLevelField(xx, yy); + DrawNewLevelField(xx, yy); } } else if (IS_BELT_ACTIVE(element) && belt_dir == MV_NO_MOVING) @@ -1983,7 +2016,7 @@ static void ToggleBeltSwitch(int x, int y) int belt_part = Feld[xx][yy] - belt_base_active_element[belt_nr]; Feld[xx][yy] = belt_base_element[belt_nr] + belt_part; - DrawLevelField(xx, yy); + DrawNewLevelField(xx, yy); } } } @@ -2006,7 +2039,7 @@ static void ToggleSwitchgateSwitch(int x, int y) element == EL_SWITCHGATE_SWITCH_DOWN) { Feld[xx][yy] = EL_SWITCHGATE_SWITCH_UP + game.switchgate_pos; - DrawLevelField(xx, yy); + DrawNewLevelField(xx, yy); } else if (element == EL_SWITCHGATE_OPEN || element == EL_SWITCHGATE_OPENING) @@ -2052,13 +2085,13 @@ static void RedrawAllLightSwitchesAndInvisibleElements() game.light_time_left > 0) { Feld[x][y] = EL_LIGHT_SWITCH_ACTIVE; - DrawLevelField(x, y); + DrawNewLevelField(x, y); } else if (element == EL_LIGHT_SWITCH_ACTIVE && game.light_time_left == 0) { Feld[x][y] = EL_LIGHT_SWITCH; - DrawLevelField(x, y); + DrawNewLevelField(x, y); } else if (element == EL_INVISIBLE_STEELWALL || element == EL_INVISIBLE_WALL || @@ -2067,7 +2100,7 @@ static void RedrawAllLightSwitchesAndInvisibleElements() if (game.light_time_left > 0) Feld[x][y] = getInvisibleActiveFromInvisibleElement(element); - DrawLevelField(x, y); + DrawNewLevelField(x, y); } else if (element == EL_INVISIBLE_STEELWALL_ACTIVE || element == EL_INVISIBLE_WALL_ACTIVE || @@ -2076,7 +2109,7 @@ static void RedrawAllLightSwitchesAndInvisibleElements() if (game.light_time_left == 0) Feld[x][y] = getInvisibleFromInvisibleActiveElement(element); - DrawLevelField(x, y); + DrawNewLevelField(x, y); } } } @@ -2964,7 +2997,16 @@ void StartMoving(int x, int y) phase = 7 - phase; if (IN_SCR_FIELD(SCREENX(x), SCREENY(y))) +#if 0 DrawGraphic(SCREENX(x), SCREENY(y), el2gfx(element) + phase); +#else + { + int graphic = el2img(element); + int frame = getNewGraphicAnimationFrame(graphic, MovDelay[x][y] % 8); + + DrawNewGraphic(SCREENX(x), SCREENY(y), graphic, frame); + } +#endif if (MovDelay[x][y] % 4 == 3) { @@ -2975,23 +3017,36 @@ void StartMoving(int x, int y) } } else if (element == EL_SP_ELECTRON) +#if 0 DrawGraphicAnimation(x, y, GFX2_SP_ELECTRON, 8, 2, ANIM_LOOP); +#else + DrawNewGraphicAnimation(x, y, IMG_SP_ELECTRON); +#endif else if (element == EL_DRAGON) { int i; int dir = MovDir[x][y]; int dx = (dir == MV_LEFT ? -1 : dir == MV_RIGHT ? +1 : 0); int dy = (dir == MV_UP ? -1 : dir == MV_DOWN ? +1 : 0); +#if 0 int graphic = (dir == MV_LEFT ? GFX_FLAMMEN_LEFT : dir == MV_RIGHT ? GFX_FLAMMEN_RIGHT : dir == MV_UP ? GFX_FLAMMEN_UP : dir == MV_DOWN ? GFX_FLAMMEN_DOWN : GFX_LEERRAUM); int phase = FrameCounter % 2; +#else + int graphic = (dir == MV_LEFT ? IMG_FLAMES_LEFT1 : + dir == MV_RIGHT ? IMG_FLAMES_RIGHT1 : + dir == MV_UP ? IMG_FLAMES_UP1 : + dir == MV_DOWN ? IMG_FLAMES_DOWN1 : IMG_EMPTY); + int frame = getNewGraphicAnimationFrame(graphic, -1); +#endif for (i=1; i<=3; i++) { int xx = x + i*dx, yy = y + i*dy; int sx = SCREENX(xx), sy = SCREENY(yy); + int flame_graphic = graphic + (i - 1); if (!IN_LEV_FIELD(xx, yy) || IS_SOLID(Feld[xx][yy]) || Feld[xx][yy] == EL_EXPLOSION) @@ -3008,13 +3063,17 @@ void StartMoving(int x, int y) Feld[xx][yy] = EL_FLAMES; if (IN_SCR_FIELD(sx, sy)) +#if 0 DrawGraphic(sx, sy, graphic + phase*3 + i-1); +#else + DrawNewGraphic(sx, sy, flame_graphic, frame); +#endif } else { if (Feld[xx][yy] == EL_FLAMES) Feld[xx][yy] = EL_EMPTY; - DrawLevelField(xx, yy); + DrawNewLevelField(xx, yy); } } } @@ -3063,7 +3122,12 @@ void StartMoving(int x, int y) PlaySoundLevel(newx, newy, SND_PENGUIN_PASSING_EXIT); if (IN_SCR_FIELD(SCREENX(newx), SCREENY(newy))) +#if 0 DrawGraphicThruMask(SCREENX(newx), SCREENY(newy), el2gfx(element)); +#else + DrawNewGraphicThruMask(SCREENX(newx), SCREENY(newy), el2img(element), + 0); +#endif local_player->friends_still_needed--; if (!local_player->friends_still_needed && @@ -3592,7 +3656,7 @@ void AmoebeUmwandelnBD(int ax, int ay, int new_element) AmoebaNr[x][y] = 0; Feld[x][y] = new_element; InitField(x, y, FALSE); - DrawLevelField(x, y); + DrawNewLevelField(x, y); done = TRUE; } } @@ -3627,13 +3691,22 @@ void AmoebeWaechst(int x, int y) { MovDelay[x][y]--; if (MovDelay[x][y]/2 && IN_SCR_FIELD(SCREENX(x), SCREENY(y))) +#if 0 DrawGraphic(SCREENX(x), SCREENY(y), GFX_AMOEBING + 3 - MovDelay[x][y]/2); +#else + { + int frame = getNewGraphicAnimationFrame(IMG_AMOEBA_CREATING, + 6 - MovDelay[x][y]); + + DrawNewGraphic(SCREENX(x), SCREENY(y), IMG_AMOEBA_CREATING, frame); + } +#endif if (!MovDelay[x][y]) { Feld[x][y] = Store[x][y]; Store[x][y] = 0; - DrawLevelField(x, y); + DrawNewLevelField(x, y); } } } @@ -3655,12 +3728,21 @@ void AmoebaDisappearing(int x, int y) { MovDelay[x][y]--; if (MovDelay[x][y]/2 && IN_SCR_FIELD(SCREENX(x), SCREENY(y))) +#if 0 DrawGraphic(SCREENX(x), SCREENY(y), GFX_AMOEBING + MovDelay[x][y]/2); +#else + { + int frame = getNewGraphicAnimationFrame(IMG_AMOEBA_SHRINKING, + 6 - MovDelay[x][y]); + + DrawNewGraphic(SCREENX(x), SCREENY(y), IMG_AMOEBA_SHRINKING, frame); + } +#endif if (!MovDelay[x][y]) { Feld[x][y] = EL_EMPTY; - DrawLevelField(x, y); + DrawNewLevelField(x, y); /* don't let mole enter this field in this cycle; (give priority to objects falling to this field from above) */ @@ -3685,7 +3767,7 @@ void AmoebeAbleger(int ax, int ay) if (!level.amoeba_speed) { Feld[ax][ay] = EL_AMOEBA_DEAD; - DrawLevelField(ax, ay); + DrawNewLevelField(ax, ay); return; } @@ -3748,7 +3830,7 @@ void AmoebeAbleger(int ax, int ay) if (i == 4 && (!waiting_for_player || game.emulation == EMU_BOULDERDASH)) { Feld[ax][ay] = EL_AMOEBA_DEAD; - DrawLevelField(ax, ay); + DrawNewLevelField(ax, ay); AmoebaCnt[AmoebaNr[ax][ay]]--; if (AmoebaCnt[AmoebaNr[ax][ay]] <= 0) /* amoeba is completely dead */ @@ -3811,7 +3893,7 @@ void AmoebeAbleger(int ax, int ay) return; } - DrawLevelField(newax, neway); + DrawNewLevelField(newax, neway); } void Life(int ax, int ay) @@ -3863,7 +3945,7 @@ void Life(int ax, int ay) { Feld[xx][yy] = EL_EMPTY; if (!Stop[xx][yy]) - DrawLevelField(xx, yy); + DrawNewLevelField(xx, yy); Stop[xx][yy] = TRUE; changed = TRUE; } @@ -3875,7 +3957,7 @@ void Life(int ax, int ay) Feld[xx][yy] = element; MovDelay[xx][yy] = (element == EL_GAMEOFLIFE ? 0 : life_time-1); if (!Stop[xx][yy]) - DrawLevelField(xx, yy); + DrawNewLevelField(xx, yy); Stop[xx][yy] = TRUE; changed = TRUE; } @@ -3898,7 +3980,15 @@ void RobotWheel(int x, int y) if (MovDelay[x][y]) { if (IN_SCR_FIELD(SCREENX(x), SCREENY(y))) +#if 0 DrawGraphic(SCREENX(x), SCREENY(y), GFX_ABLENK+MovDelay[x][y]%4); +#else + { + int frame = getNewGraphicAnimationFrame(IMG_ROBOT_WHEEL_ACTIVE, -1); + + DrawNewGraphic(SCREENX(x), SCREENY(y), IMG_ROBOT_WHEEL_ACTIVE, frame); + } +#endif if (!(MovDelay[x][y]%4)) PlaySoundLevel(x, y, SND_ROBOT_WHEEL_ACTIVE); return; @@ -3906,7 +3996,7 @@ void RobotWheel(int x, int y) } Feld[x][y] = EL_ROBOT_WHEEL; - DrawLevelField(x, y); + DrawNewLevelField(x, y); if (ZX == x && ZY == y) ZX = ZY = -1; } @@ -3922,8 +4012,16 @@ void TimegateWheel(int x, int y) if (MovDelay[x][y]) { if (IN_SCR_FIELD(SCREENX(x), SCREENY(y))) +#if 0 DrawGraphic(SCREENX(x), SCREENY(y), GFX_TIMEGATE_SWITCH + MovDelay[x][y]%4); +#else + { + int frame = getNewGraphicAnimationFrame(IMG_TIMEGATE_SWITCH_ACTIVE, -1); + + DrawNewGraphic(SCREENX(x), SCREENY(y), IMG_TIMEGATE_SWITCH_ACTIVE, frame); + } +#endif if (!(MovDelay[x][y]%4)) PlaySoundLevel(x, y, SND_TIMEGATE_SWITCH_ACTIVE); return; @@ -3931,17 +4029,21 @@ void TimegateWheel(int x, int y) } Feld[x][y] = EL_TIMEGATE_SWITCH; - DrawLevelField(x, y); + DrawNewLevelField(x, y); if (ZX == x && ZY == y) ZX = ZY = -1; } void Blubber(int x, int y) { - if (y > 0 && IS_MOVING(x, y-1) && MovDir[x][y-1] == MV_DOWN) - DrawLevelField(x, y-1); +#if 0 + if (y > 0 && IS_MOVING(x, y - 1) && MovDir[x][y - 1] == MV_DOWN) + DrawNewLevelField(x, y - 1); else DrawGraphicAnimation(x, y, GFX_GEBLUBBER, 4, 10, ANIM_LOOP); +#else + DrawNewGraphicAnimation(x, y, IMG_ACID); +#endif } void NussKnacken(int x, int y) @@ -3953,13 +4055,22 @@ void NussKnacken(int x, int y) { MovDelay[x][y]--; if (MovDelay[x][y]/2 && IN_SCR_FIELD(SCREENX(x), SCREENY(y))) +#if 0 DrawGraphic(SCREENX(x), SCREENY(y), GFX_CRACKINGNUT + 3 - MovDelay[x][y]/2); +#else + { + int frame = getNewGraphicAnimationFrame(IMG_NUT_CRACKING, + 6 - MovDelay[x][y]); + + DrawNewGraphic(SCREENX(x), SCREENY(y), IMG_NUT_CRACKING, frame); + } +#endif if (!MovDelay[x][y]) { Feld[x][y] = EL_EMERALD; - DrawLevelField(x, y); + DrawNewLevelField(x, y); } } } @@ -3973,22 +4084,37 @@ void BreakingPearl(int x, int y) { MovDelay[x][y]--; if (MovDelay[x][y]/2 && IN_SCR_FIELD(SCREENX(x), SCREENY(y))) +#if 0 DrawGraphic(SCREENX(x), SCREENY(y), GFX_PEARL_BREAKING + 4 - MovDelay[x][y]/2); +#else + { + int frame = getNewGraphicAnimationFrame(IMG_PEARL_BREAKING, + 8 - MovDelay[x][y]); + + DrawNewGraphic(SCREENX(x), SCREENY(y), IMG_PEARL_BREAKING, frame); + } +#endif if (!MovDelay[x][y]) { Feld[x][y] = EL_EMPTY; - DrawLevelField(x, y); + DrawNewLevelField(x, y); } } } -void SiebAktivieren(int x, int y, int typ) +void SiebAktivieren(int x, int y, int type) { - int graphic = (typ == 1 ? GFX_MAGIC_WALL_FULL : GFX_MAGIC_WALL_BD_FULL) + 3; +#if 0 + int graphic = (type == 1 ? GFX_MAGIC_WALL_FULL : GFX_MAGIC_WALL_BD_FULL) + 3; DrawGraphicAnimation(x, y, graphic, 4, 4, ANIM_REVERSE); +#else + int graphic = (type == 1 ? IMG_MAGIC_WALL_FULL : IMG_BD_MAGIC_WALL_FULL); + + DrawNewGraphicAnimation(x, y, graphic); +#endif } void AusgangstuerPruefen(int x, int y) @@ -4026,7 +4152,7 @@ void AusgangstuerOeffnen(int x, int y) int delay = 6; if (!MovDelay[x][y]) /* next animation frame */ - MovDelay[x][y] = 5*delay; + MovDelay[x][y] = 5 * delay; if (MovDelay[x][y]) /* wait some time before next frame */ { @@ -4035,19 +4161,32 @@ void AusgangstuerOeffnen(int x, int y) MovDelay[x][y]--; tuer = MovDelay[x][y]/delay; if (!(MovDelay[x][y]%delay) && IN_SCR_FIELD(SCREENX(x), SCREENY(y))) +#if 0 DrawGraphic(SCREENX(x), SCREENY(y), GFX_AUSGANG_AUF-tuer); +#else + { + int frame = getNewGraphicAnimationFrame(IMG_EXIT_OPENING, + 29 - MovDelay[x][y]); + + DrawNewGraphic(SCREENX(x), SCREENY(y), IMG_EXIT_OPENING, frame); + } +#endif if (!MovDelay[x][y]) { Feld[x][y] = EL_EXIT_OPEN; - DrawLevelField(x, y); + DrawNewLevelField(x, y); } } } void AusgangstuerBlinken(int x, int y) { +#if 0 DrawGraphicAnimation(x, y, GFX_AUSGANG_AUF, 4, 4, ANIM_PINGPONG); +#else + DrawNewGraphicAnimation(x, y, IMG_EXIT_OPEN); +#endif } void OpenSwitchgate(int x, int y) @@ -4064,12 +4203,21 @@ void OpenSwitchgate(int x, int y) MovDelay[x][y]--; phase = MovDelay[x][y] / delay; if (!(MovDelay[x][y] % delay) && IN_SCR_FIELD(SCREENX(x), SCREENY(y))) +#if 0 DrawGraphic(SCREENX(x), SCREENY(y), GFX_SWITCHGATE_OPEN - phase); +#else + { + int frame = getNewGraphicAnimationFrame(IMG_SWITCHGATE_OPENING, + 29 - MovDelay[x][y]); + + DrawNewGraphic(SCREENX(x), SCREENY(y), IMG_SWITCHGATE_OPENING, frame); + } +#endif if (!MovDelay[x][y]) { Feld[x][y] = EL_SWITCHGATE_OPEN; - DrawLevelField(x, y); + DrawNewLevelField(x, y); } } } @@ -4088,12 +4236,21 @@ void CloseSwitchgate(int x, int y) MovDelay[x][y]--; phase = MovDelay[x][y] / delay; if (!(MovDelay[x][y] % delay) && IN_SCR_FIELD(SCREENX(x), SCREENY(y))) +#if 0 DrawGraphic(SCREENX(x), SCREENY(y), GFX_SWITCHGATE_CLOSED + phase); +#else + { + int frame = getNewGraphicAnimationFrame(IMG_SWITCHGATE_CLOSING, + 29 - MovDelay[x][y]); + + DrawNewGraphic(SCREENX(x), SCREENY(y), IMG_SWITCHGATE_CLOSING, frame); + } +#endif if (!MovDelay[x][y]) { Feld[x][y] = EL_SWITCHGATE_CLOSED; - DrawLevelField(x, y); + DrawNewLevelField(x, y); } } } @@ -4112,12 +4269,21 @@ void OpenTimegate(int x, int y) MovDelay[x][y]--; phase = MovDelay[x][y] / delay; if (!(MovDelay[x][y] % delay) && IN_SCR_FIELD(SCREENX(x), SCREENY(y))) +#if 0 DrawGraphic(SCREENX(x), SCREENY(y), GFX_TIMEGATE_OPEN - phase); +#else + { + int frame = getNewGraphicAnimationFrame(IMG_TIMEGATE_OPENING, + 29 - MovDelay[x][y]); + + DrawNewGraphic(SCREENX(x), SCREENY(y), IMG_TIMEGATE_OPENING, frame); + } +#endif if (!MovDelay[x][y]) { Feld[x][y] = EL_TIMEGATE_OPEN; - DrawLevelField(x, y); + DrawNewLevelField(x, y); } } } @@ -4136,12 +4302,21 @@ void CloseTimegate(int x, int y) MovDelay[x][y]--; phase = MovDelay[x][y] / delay; if (!(MovDelay[x][y] % delay) && IN_SCR_FIELD(SCREENX(x), SCREENY(y))) +#if 0 DrawGraphic(SCREENX(x), SCREENY(y), GFX_TIMEGATE_CLOSED + phase); +#else + { + int frame = getNewGraphicAnimationFrame(IMG_TIMEGATE_CLOSING, + 29 - MovDelay[x][y]); + + DrawNewGraphic(SCREENX(x), SCREENY(y), IMG_TIMEGATE_CLOSING, frame); + } +#endif if (!MovDelay[x][y]) { Feld[x][y] = EL_TIMEGATE_CLOSED; - DrawLevelField(x, y); + DrawNewLevelField(x, y); } } } @@ -4171,7 +4346,11 @@ void EdelsteinFunkeln(int x, int y) return; if (Feld[x][y] == EL_BD_DIAMOND) +#if 0 DrawGraphicAnimation(x, y, GFX_EDELSTEIN_BD, 4, 4, ANIM_REVERSE); +#else + DrawNewGraphicAnimation(x, y, IMG_BD_DIAMOND); +#endif else { if (!MovDelay[x][y]) /* next animation frame */ @@ -4184,7 +4363,11 @@ void EdelsteinFunkeln(int x, int y) if (setup.direct_draw && MovDelay[x][y]) SetDrawtoField(DRAW_BUFFERED); +#if 0 DrawGraphic(SCREENX(x), SCREENY(y), el2gfx(Feld[x][y])); +#else + DrawNewGraphic(SCREENX(x), SCREENY(y), el2img(Feld[x][y]), 0); +#endif if (MovDelay[x][y]) { @@ -4193,14 +4376,24 @@ void EdelsteinFunkeln(int x, int y) if (phase > 2) phase = 4-phase; +#if 0 DrawGraphicThruMask(SCREENX(x), SCREENY(y), GFX_FUNKELN_WEISS + phase); +#else + { + int frame = getNewGraphicAnimationFrame(IMG_TWINKLE_WHITE, + 10 - MovDelay[x][y]); + + DrawNewGraphicThruMask(SCREENX(x), SCREENY(y), IMG_TWINKLE_WHITE, + frame); + } +#endif if (setup.direct_draw) { int dest_x, dest_y; - dest_x = FX + SCREENX(x)*TILEX; - dest_y = FY + SCREENY(y)*TILEY; + dest_x = FX + SCREENX(x) * TILEX; + dest_y = FY + SCREENY(y) * TILEY; BlitBitmap(drawto_field, window, dest_x, dest_y, TILEX, TILEY, dest_x, dest_y);