X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=2d35e042e0b67db6629289cf29ee25bf6725ec65;hb=074c00b42409c74e9c5856db1be03dced3a15ae9;hp=4661ac64efce1d4122d8ecd880ccabb375a4e574;hpb=c64be0354d88b9776537a907f524993e29e074aa;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index 4661ac64..2d35e042 100644 --- a/src/tools.c +++ b/src/tools.c @@ -40,6 +40,39 @@ static int el_act2crm(int, int); static struct GadgetInfo *tool_gadget[NUM_TOOL_BUTTONS]; static int request_gadget_id = -1; +void DumpTile(int x, int y) +{ + int sx = SCREENX(x); + int sy = SCREENX(y); + + printf_line("-", 79); + printf("Field Info: SCREEN(%d, %d), LEVEL(%d, %d)\n", sx, sy, x, y); + printf_line("-", 79); + + if (!IN_LEV_FIELD(x, y)) + { + printf("(not in level field)\n"); + printf("\n"); + + return; + } + + printf(" Feld: %d ['%s']\n", Feld[x][y], + element_info[Feld[x][y]].token_name); + printf(" Back: %d\n", Back[x][y]); + printf(" Store: %d\n", Store[x][y]); + printf(" Store2: %d\n", Store2[x][y]); + printf(" StorePlayer: %d\n", StorePlayer[x][y]); + printf(" MovPos: %d\n", MovPos[x][y]); + printf(" MovDir: %d\n", MovDir[x][y]); + printf(" MovDelay: %d\n", MovDelay[x][y]); + printf(" ChangeDelay: %d\n", ChangeDelay[x][y]); + printf(" GfxElement: %d\n", GfxElement[x][y]); + printf(" GfxAction: %d\n", GfxAction[x][y]); + printf(" GfxFrame: %d\n", GfxFrame[x][y]); + printf("\n"); +} + void SetDrawtoField(int mode) { if (mode == DRAW_BUFFERED && setup.soft_scrolling) @@ -225,26 +258,30 @@ void BackToFront() BlitBitmap(backbuffer, window, DX, DY, DXSIZE, DYSIZE, DX, DY); if (redraw_mask & REDRAW_DOOR_2) { +#if 0 if ((redraw_mask & REDRAW_DOOR_2) == REDRAW_DOOR_2) - BlitBitmap(backbuffer, window, VX,VY, VXSIZE,VYSIZE, VX,VY); +#endif + BlitBitmap(backbuffer, window, VX, VY, VXSIZE, VYSIZE, VX, VY); +#if 0 else { if (redraw_mask & REDRAW_VIDEO_1) BlitBitmap(backbuffer, window, - VX+VIDEO_DISPLAY1_XPOS,VY+VIDEO_DISPLAY1_YPOS, - VIDEO_DISPLAY_XSIZE,VIDEO_DISPLAY_YSIZE, - VX+VIDEO_DISPLAY1_XPOS,VY+VIDEO_DISPLAY1_YPOS); + VX + VIDEO_DISPLAY1_XPOS, VY + VIDEO_DISPLAY1_YPOS, + VIDEO_DISPLAY_XSIZE, VIDEO_DISPLAY_YSIZE, + VX + VIDEO_DISPLAY1_XPOS, VY + VIDEO_DISPLAY1_YPOS); if (redraw_mask & REDRAW_VIDEO_2) BlitBitmap(backbuffer, window, - VX+VIDEO_DISPLAY2_XPOS,VY+VIDEO_DISPLAY2_YPOS, - VIDEO_DISPLAY_XSIZE,VIDEO_DISPLAY_YSIZE, - VX+VIDEO_DISPLAY2_XPOS,VY+VIDEO_DISPLAY2_YPOS); + VX + VIDEO_DISPLAY2_XPOS, VY + VIDEO_DISPLAY2_YPOS, + VIDEO_DISPLAY_XSIZE, VIDEO_DISPLAY_YSIZE, + VX + VIDEO_DISPLAY2_XPOS, VY + VIDEO_DISPLAY2_YPOS); if (redraw_mask & REDRAW_VIDEO_3) BlitBitmap(backbuffer, window, - VX+VIDEO_CONTROL_XPOS,VY+VIDEO_CONTROL_YPOS, - VIDEO_CONTROL_XSIZE,VIDEO_CONTROL_YSIZE, - VX+VIDEO_CONTROL_XPOS,VY+VIDEO_CONTROL_YPOS); + VX + VIDEO_CONTROL_XPOS, VY + VIDEO_CONTROL_YPOS, + VIDEO_CONTROL_XSIZE, VIDEO_CONTROL_YSIZE, + VX + VIDEO_CONTROL_XPOS, VY + VIDEO_CONTROL_YPOS); } +#endif } if (redraw_mask & REDRAW_DOOR_3) @@ -1485,7 +1522,13 @@ void DrawScreenField(int x, int y) DrawScreenElementShifted(x, y, 0, MovPos[lx][ly], content, cut_mode); if (content == EL_ACID) - DrawLevelElementThruMask(lx, ly + 1, EL_ACID); + { + int dir = MovDir[lx][ly]; + int newlx = lx + (dir == MV_LEFT ? -1 : dir == MV_RIGHT ? +1 : 0); + int newly = ly + (dir == MV_UP ? -1 : dir == MV_DOWN ? +1 : 0); + + DrawLevelElementThruMask(newlx, newly, EL_ACID); + } } else if (IS_BLOCKED(lx, ly)) { @@ -1619,7 +1662,7 @@ void AnimateEnvelope(int envelope_nr, int anim_mode, int action) boolean draw_masked = graphic_info[graphic].draw_masked; int mask_mode = (draw_masked ? BLIT_MASKED : BLIT_ON_BACKGROUND); boolean ffwd_delay = (tape.playing && tape.fast_forward); - boolean no_delay = (tape.index_search); + boolean no_delay = (tape.warp_forward); unsigned long anim_delay = 0; int frame_delay_value = (ffwd_delay ? FfwdFrameDelay : GameFrameDelay); int anim_delay_value = (no_delay ? 0 : frame_delay_value); @@ -1671,7 +1714,7 @@ void ShowEnvelope(int envelope_nr) int sound_opening = element_info[element].sound[ACTION_OPENING]; int sound_closing = element_info[element].sound[ACTION_CLOSING]; boolean ffwd_delay = (tape.playing && tape.fast_forward); - boolean no_delay = (tape.index_search); + boolean no_delay = (tape.warp_forward); int normal_delay_value = ONE_SECOND_DELAY / (ffwd_delay ? 2 : 1); int wait_delay_value = (no_delay ? 0 : normal_delay_value); int anim_mode = graphic_info[graphic].anim_mode; @@ -2011,6 +2054,12 @@ boolean Request(char *text, unsigned int req_state) } } +#if 1 + /* disable deactivated drawing when quick-loading level tape recording */ + if (tape.playing && tape.deactivate_display) + TapeDeactivateDisplayOff(TRUE); +#endif + #if 1 SetMouseCursor(CURSOR_DEFAULT); #endif @@ -2274,6 +2323,12 @@ boolean Request(char *text, unsigned int req_state) SendToServer_ContinuePlaying(); #endif +#if 1 + /* restore deactivated drawing when quick-loading level tape recording */ + if (tape.playing && tape.deactivate_display) + TapeDeactivateDisplayOn(); +#endif + return result; } @@ -2356,8 +2411,10 @@ unsigned int MoveDoor(unsigned int door_state) stepsize = 20; /* must be choosen to always draw last frame */ door_delay_value = 0; +#if 0 StopSound(SND_DOOR_OPENING); StopSound(SND_DOOR_CLOSING); +#endif } if (global.autoplay_leveldir) @@ -2375,7 +2432,7 @@ unsigned int MoveDoor(unsigned int door_state) door_1.anim_mode == ANIM_VERTICAL ? DYSIZE : DXSIZE); int x; - if (!(door_state & DOOR_NO_DELAY)) + if (!(door_state & DOOR_NO_DELAY) && !setup.quick_doors) { /* opening door sound has priority over simultaneously closing door */ if (door_state & (DOOR_OPEN_1 | DOOR_OPEN_2)) @@ -2558,11 +2615,13 @@ unsigned int MoveDoor(unsigned int door_state) } } +#if 0 if (setup.quick_doors) { StopSound(SND_DOOR_OPENING); StopSound(SND_DOOR_CLOSING); } +#endif if (door_state & DOOR_ACTION_1) door1 = door_state & DOOR_ACTION_1;