X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=4403a9cedd220d636cae487874bc1b282a8ce31c;hb=0a4bbe85a69ae2fc05d05c2e1fee44f2b1c44134;hp=bde3b716213f7ef947d164585c302d3026d5717d;hpb=12d604d7378a05f91df4b061195a9943f2214da8;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index bde3b716..4403a9ce 100644 --- a/src/tools.c +++ b/src/tools.c @@ -44,6 +44,8 @@ extern boolean wait_for_vsync; /* forward declaration for internal use */ static int getGraphicAnimationPhase(int, int, int); +static void DrawGraphicAnimationShiftedThruMask(int, int, int, int, int, + int, int, int); static void UnmapToolButtons(); static void HandleToolButtons(struct GadgetInfo *); @@ -604,6 +606,10 @@ void DrawPlayer(struct PlayerInfo *player) DrawGraphicShiftedThruMask(sx, sy, sxx, syy, graphic, NO_CUTTING); + if (FORCE_FIELD_ON(player)) + DrawGraphicAnimationShiftedThruMask(sx, sy, sxx, syy, GFX_FUNKELN_BLAU, + 3, 8, ANIM_OSCILLATE); + if (player->Pushing && player->GfxPos) { int px = SCREENX(next_jx), py = SCREENY(next_jy); @@ -732,6 +738,17 @@ void DrawGraphicAnimationThruMask(int x, int y, int graphic, DrawGraphicAnimationExt(x, y, graphic, frames, delay, mode, USE_MASKING); } +static void DrawGraphicAnimationShiftedThruMask(int sx, int sy, + int sxx, int syy, + int graphic, + int frames, int delay, + int mode) +{ + int phase = getGraphicAnimationPhase(frames, delay, mode); + + DrawGraphicShiftedThruMask(sx, sy, sxx, syy, graphic + phase, NO_CUTTING); +} + void getGraphicSource(int graphic, int *pixmap_nr, int *x, int *y) { if (graphic >= GFX_START_ROCKSSCREEN && graphic <= GFX_END_ROCKSSCREEN) @@ -1157,6 +1174,14 @@ void DrawScreenElementExt(int x, int y, int dx, int dy, int element, else if (rechts_massiv) graphic = GFX_MAUER_L; } + else if ((element == EL_INVISIBLE_STEEL || + element == EL_UNSICHTBAR || + element == EL_SAND_INVISIBLE) && game.light_time_left) + { + graphic = (element == EL_INVISIBLE_STEEL ? GFX_INVISIBLE_STEEL_ON : + element == EL_UNSICHTBAR ? GFX_UNSICHTBAR_ON : + GFX_SAND_INVISIBLE_ON); + } if (dx || dy) DrawGraphicShifted(x, y, dx, dy, graphic, cut_mode, mask_mode); @@ -1220,7 +1245,7 @@ void ErdreichAnbroeckeln(int x, int y) element = Feld[ux][uy]; - if (element == EL_ERDREICH) + if (element == EL_ERDREICH || element == EL_LANDMINE) { if (!IN_SCR_FIELD(x, y)) return; @@ -1238,7 +1263,7 @@ void ErdreichAnbroeckeln(int x, int y) else element = Feld[uxx][uyy]; - if (element == EL_ERDREICH) + if (element == EL_ERDREICH || element == EL_LANDMINE) continue; if (i == 1 || i == 2) @@ -1277,7 +1302,8 @@ void ErdreichAnbroeckeln(int x, int y) uxx = ux + xy[i][0]; uyy = uy + xy[i][1]; - if (!IN_LEV_FIELD(uxx, uyy) || Feld[uxx][uyy] != EL_ERDREICH || + if (!IN_LEV_FIELD(uxx, uyy) || + (Feld[uxx][uyy] != EL_ERDREICH && Feld[uxx][uyy] != EL_LANDMINE) || !IN_SCR_FIELD(xx, yy)) continue; @@ -2478,12 +2504,13 @@ int el2gfx(int element) case EL_DOOR_WHITE: return GFX_DOOR_WHITE; case EL_DOOR_WHITE_GRAY: return GFX_DOOR_WHITE_GRAY; case EL_KEY_WHITE: return GFX_KEY_WHITE; - case EL_FORCE_FIELD: return GFX_FORCE_FIELD; + case EL_FORCE_FIELD_PASSIVE:return GFX_FORCE_FIELD_PASSIVE; + case EL_FORCE_FIELD_ACTIVE: return GFX_FORCE_FIELD_ACTIVE; case EL_EXTRA_TIME: return GFX_EXTRA_TIME; case EL_SWITCHGATE_OPEN: return GFX_SWITCHGATE_OPEN; case EL_SWITCHGATE_CLOSED: return GFX_SWITCHGATE_CLOSED; - case EL_SWITCHGATE_SWITCH_L:return GFX_SWITCHGATE_SWITCH_L; - case EL_SWITCHGATE_SWITCH_R:return GFX_SWITCHGATE_SWITCH_R; + case EL_SWITCHGATE_SWITCH_1:return GFX_SWITCHGATE_SWITCH_1; + case EL_SWITCHGATE_SWITCH_2:return GFX_SWITCHGATE_SWITCH_2; case EL_TIME_GATE: return GFX_TIME_GATE; case EL_TIME_GATE_WHEEL: return GFX_TIME_GATE_WHEEL; case EL_BELT1_LEFT: return GFX_BELT1_LEFT; @@ -2512,7 +2539,8 @@ int el2gfx(int element) case EL_BELT4_SWITCH_R: return GFX_BELT4_SWITCH_R; case EL_LANDMINE: return GFX_LANDMINE; case EL_ENVELOPE: return GFX_ENVELOPE; - case EL_LIGHT_SWITCH: return GFX_LIGHT_SWITCH; + case EL_LIGHT_SWITCH_OFF: return GFX_LIGHT_SWITCH_OFF; + case EL_LIGHT_SWITCH_ON: return GFX_LIGHT_SWITCH_ON; case EL_SIGN_EXCLAMATION: return GFX_SIGN_EXCLAMATION; case EL_SIGN_RADIOACTIVITY: return GFX_SIGN_RADIOACTIVITY; case EL_SIGN_STOP: return GFX_SIGN_STOP; @@ -2531,6 +2559,10 @@ int el2gfx(int element) case EL_MOLE_DOWN: return GFX_MOLE_DOWN; case EL_STEEL_SLANTED: return GFX_STEEL_SLANTED; case EL_SAND_INVISIBLE: return GFX_SAND_INVISIBLE; + case EL_DX_UNKNOWN_15: return GFX_DX_UNKNOWN_15; + case EL_DX_UNKNOWN_42: return GFX_DX_UNKNOWN_42; + case EL_DX_UNKNOWN_229: return GFX_DX_UNKNOWN_229; + case EL_DX_UNKNOWN_233: return GFX_DX_UNKNOWN_233; default: {