X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=588f7f8eda16162eaa538c7f5b815a7419aa93e9;hb=61c3da024802ecc0268bab42d7499fc0346e4fd3;hp=ba0ec81ca5ffe036047f565321ccb0f5793cfe47;hpb=205e33df255a817dc1032696f065256a08aa61fa;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index ba0ec81c..588f7f8e 100644 --- a/src/tools.c +++ b/src/tools.c @@ -323,13 +323,6 @@ void BlitScreenToBitmap(Bitmap *target_bitmap) fy += (ScreenMovDir & (MV_UP | MV_DOWN) ? ScreenGfxPos : 0); #endif - /* !!! THIS WORKS !!! */ - - printf("::: (%d, %d) [(%d / %d, %d / %d)]\n", - scroll_x, scroll_y, - SBX_Left, SBX_Right, - SBY_Upper, SBY_Lower); - ffx = (scroll_x - SBX_Left) * TILEX_VAR + dx_var; ffy = (scroll_y - SBY_Upper) * TILEY_VAR + dy_var; @@ -338,11 +331,11 @@ void BlitScreenToBitmap(Bitmap *target_bitmap) if (ffx < SBX_Right * TILEX_VAR + TILEX_VAR / 2 + TILEX_VAR) fx += dx_var - MIN(ffx, TILEX_VAR / 2) + TILEX_VAR; else - fx += (dx > 0 ? TILEX_VAR : 0); + fx += (dx_var > 0 ? TILEX_VAR : 0); } else { - fx += dx; + fx += dx_var; } if (EVEN(SCR_FIELDY)) @@ -350,13 +343,21 @@ void BlitScreenToBitmap(Bitmap *target_bitmap) if (ffy < SBY_Lower * TILEY_VAR + TILEY_VAR / 2 + TILEY_VAR) fy += dy_var - MIN(ffy, TILEY_VAR / 2) + TILEY_VAR; else - fy += (dy > 0 ? TILEY_VAR : 0); + fy += (dy_var > 0 ? TILEY_VAR : 0); } else { - fy += dy; + fy += dy_var; } +#if 0 + printf("::: (%d, %d) [(%d / %d, %d / %d)] => %d, %d\n", + scroll_x, scroll_y, + SBX_Left, SBX_Right, + SBY_Upper, SBY_Lower, + fx, fy); +#endif + if (border.draw_masked[GAME_MODE_PLAYING]) { if (buffer != backbuffer) @@ -394,6 +395,13 @@ void BackToFront() if (redraw_mask & REDRAW_TILES && redraw_tiles > REDRAWTILES_THRESHOLD) redraw_mask |= REDRAW_FIELD; +#if 0 + /* !!! TEST ONLY !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1 */ + /* (force full redraw) */ + if (game_status == GAME_MODE_PLAYING) + redraw_mask |= REDRAW_FIELD; +#endif + if (redraw_mask & REDRAW_FIELD) redraw_mask &= ~REDRAW_TILES; @@ -596,18 +604,22 @@ void BackToFront() int sy = SY; // + (EVEN(SCR_FIELDY) ? TILEY_VAR / 2 : 0); int dx = 0, dy = 0; + int dx_var = dx * TILESIZE_VAR / TILESIZE; + int dy_var = dy * TILESIZE_VAR / TILESIZE; int ffx, ffy; int fx = FX, fy = FY; - ffx = (scroll_x - SBX_Left) * TILEX_VAR + dx * TILESIZE_VAR / TILESIZE; - ffy = (scroll_y - SBY_Upper) * TILEY_VAR + dy * TILESIZE_VAR / TILESIZE; + int scr_fieldx = SCR_FIELDX + (EVEN(SCR_FIELDX) ? 2 : 0); + int scr_fieldy = SCR_FIELDY + (EVEN(SCR_FIELDY) ? 2 : 0); + + ffx = (scroll_x - SBX_Left) * TILEX_VAR + dx_var; + ffy = (scroll_y - SBY_Upper) * TILEY_VAR + dy_var; if (EVEN(SCR_FIELDX)) { if (ffx < SBX_Right * TILEX_VAR + TILEX_VAR / 2 + TILEX_VAR) { - fx = fx + dx * TILESIZE_VAR / TILESIZE - MIN(ffx, TILEX_VAR / 2) + - TILEX_VAR; + fx += dx_var - MIN(ffx, TILEX_VAR / 2) + TILEX_VAR; if (fx % TILEX_VAR) sx -= TILEX_VAR / 2; @@ -616,7 +628,7 @@ void BackToFront() } else { - fx = fx - (dx <= 0 ? TILEX_VAR : 0) + TILEX_VAR; + fx += (dx_var > 0 ? TILEX_VAR : 0); } } @@ -624,8 +636,7 @@ void BackToFront() { if (ffy < SBY_Lower * TILEY_VAR + TILEY_VAR / 2 + TILEY_VAR) { - fy = fy + dy * TILESIZE_VAR / TILESIZE - MIN(ffy, TILEY_VAR / 2) + - TILEY_VAR; + fy += dy_var - MIN(ffy, TILEY_VAR / 2) + TILEY_VAR; if (fy % TILEY_VAR) sy -= TILEY_VAR / 2; @@ -634,12 +645,16 @@ void BackToFront() } else { - fy = fy - (dy <= 0 ? TILEY_VAR : 0) + TILEY_VAR; + fy += (dy_var > 0 ? TILEY_VAR : 0); } } - for (x = 0; x < SCR_FIELDX; x++) - for (y = 0 ; y < SCR_FIELDY; y++) +#if 0 + printf("::: %d, %d, %d, %d\n", sx, sy, SCR_FIELDX, SCR_FIELDY); +#endif + + for (x = 0; x < scr_fieldx; x++) + for (y = 0 ; y < scr_fieldy; y++) if (redraw[redraw_x1 + x][redraw_y1 + y]) BlitBitmap(buffer, window, FX + x * TILEX_VAR, FY + y * TILEY_VAR, @@ -2463,7 +2478,7 @@ void AnimateEnvelope(int envelope_nr, int anim_mode, int action) int mask_mode = (src_bitmap != NULL ? BLIT_MASKED : BLIT_ON_BACKGROUND); boolean ffwd_delay = (tape.playing && tape.fast_forward); boolean no_delay = (tape.warp_forward); - unsigned long anim_delay = 0; + unsigned int anim_delay = 0; int frame_delay_value = (ffwd_delay ? FfwdFrameDelay : GameFrameDelay); int anim_delay_value = (no_delay ? 0 : frame_delay_value); int font_nr = FONT_ENVELOPE_1 + envelope_nr; @@ -2525,7 +2540,7 @@ void AnimateEnvelopeDoor(char *text, int anim_mode, int action) int mask_mode = (src_bitmap != NULL ? BLIT_MASKED : BLIT_ON_BACKGROUND); boolean ffwd_delay = (tape.playing && tape.fast_forward); boolean no_delay = (tape.warp_forward); - unsigned long anim_delay = 0; + unsigned int anim_delay = 0; int frame_delay_value = (ffwd_delay ? FfwdFrameDelay : GameFrameDelay); int anim_delay_value = (no_delay ? 0 : frame_delay_value); #if 1 @@ -3035,11 +3050,11 @@ static void DrawPreviewLevelLabelExt(int mode) void DrawPreviewLevel(boolean restart) { - static unsigned long scroll_delay = 0; - static unsigned long label_delay = 0; + static unsigned int scroll_delay = 0; + static unsigned int label_delay = 0; static int from_x, from_y, scroll_direction; static int label_state, label_counter; - unsigned long scroll_delay_value = preview.step_delay; + unsigned int scroll_delay_value = preview.step_delay; boolean show_level_border = (BorderElement != EL_EMPTY); int level_xsize = lev_fieldx + (show_level_border ? 2 : 0); int level_ysize = lev_fieldy + (show_level_border ? 2 : 0); @@ -4293,8 +4308,8 @@ unsigned int MoveDoor(unsigned int door_state) { static int door1 = DOOR_OPEN_1; static int door2 = DOOR_CLOSE_2; - unsigned long door_delay = 0; - unsigned long door_delay_value; + unsigned int door_delay = 0; + unsigned int door_delay_value; int stepsize = 1; if (door_1.width < 0 || door_1.width > DXSIZE) @@ -4713,7 +4728,7 @@ void CreateToolButtons() Bitmap *deco_bitmap = None; int deco_x = 0, deco_y = 0, deco_xpos = 0, deco_ypos = 0; struct GadgetInfo *gi; - unsigned long event_mask; + unsigned int event_mask; int gd_xoffset, gd_yoffset; int gd_x1, gd_x2, gd_y; int id = i; @@ -7196,7 +7211,7 @@ int getGameFrameDelay_EM(int native_em_game_frame_delay) return game_frame_delay_value; } -unsigned int InitRND(long seed) +unsigned int InitRND(int seed) { if (level.game_engine_type == GAME_ENGINE_TYPE_EM) return InitEngineRandom_EM(seed);