From 28514fc1f1f57cd280c32fba47eed6893caa3641 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Thu, 13 Sep 2007 23:32:39 +0200 Subject: [PATCH] rocksndiamonds-3.2.4 --- ChangeLog | 4 +-- src/Makefile | 2 +- src/cartoons.c | 4 +++ src/conftime.h | 2 +- src/game_em/Makefile | 2 +- src/init.c | 1 + src/libgame/toons.c | 65 ++++++++++++++++++++++++++++++++++++-------- src/main.c | 1 + src/main.h | 5 ++-- 9 files changed, 68 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index d78b386a..094f9847 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,8 @@ 2007-09-13 - * version number set to 3.2.5 + * version 3.2.4 released 2007-09-13 - * version 3.2.4 released + * fixed crash bug in toon drawing functions for large step offset values 2007-09-12 * fixed some problems with displaying game panel when quick-loading tape diff --git a/src/Makefile b/src/Makefile index 8d8df942..9fb3a9a9 100644 --- a/src/Makefile +++ b/src/Makefile @@ -126,7 +126,7 @@ CONFIG_GAME_DIR = $(CONFIG_RO_GAME_DIR) $(CONFIG_RW_GAME_DIR) CONFIG = $(CONFIG_GAME_DIR) $(CONFIG_SCORE_ENTRIES) $(JOYSTICK) -DEBUG = -DDEBUG -g +# DEBUG = -DDEBUG -g # PROFILING = $(PROFILING_FLAGS) # OPTIONS = $(DEBUG) -Wall # only for debugging purposes diff --git a/src/cartoons.c b/src/cartoons.c index ee56a8df..70d6d3d5 100644 --- a/src/cartoons.c +++ b/src/cartoons.c @@ -80,7 +80,11 @@ void InitToons() toons[i].position = image->parameter[GFX_ARG_POSITION]; } +#if 1 + InitToonScreen(bitmap_db_toons, +#else InitToonScreen(bitmap_db_door, +#endif BackToFront, PrepareBackbuffer, ToonNeedsRedraw, toons, num_toons, REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE, diff --git a/src/conftime.h b/src/conftime.h index cfde0f5e..5926ae2c 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "2007-09-13 00:56" +#define COMPILE_DATE_STRING "2007-09-13 23:31" diff --git a/src/game_em/Makefile b/src/game_em/Makefile index 4fc21cd0..aec69d09 100644 --- a/src/game_em/Makefile +++ b/src/game_em/Makefile @@ -1,7 +1,7 @@ # ============================================================================= # Rocks'n'Diamonds Makefile (game_em) # ----------------------------------------------------------------------------- -# (c) 1995-2006 Holger Schemel +# (c) 1995-2005 Holger Schemel # ----------------------------------------------------------------------------- # Emerald Mine for X11 © 2000,2001 David Tritscher # ============================================================================= diff --git a/src/init.c b/src/init.c index c41af9fb..512c2756 100644 --- a/src/init.c +++ b/src/init.c @@ -5413,6 +5413,7 @@ void InitGfx() bitmap_db_field = CreateBitmap(FXSIZE, FYSIZE, DEFAULT_DEPTH); bitmap_db_panel = CreateBitmap(DXSIZE, DYSIZE, DEFAULT_DEPTH); bitmap_db_door = CreateBitmap(3 * DXSIZE, DYSIZE + VYSIZE, DEFAULT_DEPTH); + bitmap_db_toons = CreateBitmap(FULL_SXSIZE, FULL_SYSIZE, DEFAULT_DEPTH); /* initialize screen properties */ InitGfxFieldInfo(SX, SY, SXSIZE, SYSIZE, diff --git a/src/libgame/toons.c b/src/libgame/toons.c index d6d1c4cf..2a233e4c 100644 --- a/src/libgame/toons.c +++ b/src/libgame/toons.c @@ -125,21 +125,64 @@ void DrawAnim(Bitmap *toon_bitmap, GC toon_clip_gc, int src_x, int src_y, int width, int height, int dest_x, int dest_y, int pad_x, int pad_y) { - int buf_x = DOOR_GFX_PAGEX3, buf_y = DOOR_GFX_PAGEY1; + int pad_dest_x = dest_x - pad_x; + int pad_dest_y = dest_y - pad_y; + int pad_width = width + 2 * pad_x; + int pad_height = height + 2 * pad_y; +#if 1 + int buffer_x = 0; + int buffer_y = 0; +#else + int buffer_x = DOOR_GFX_PAGEX3; + int buffer_y = DOOR_GFX_PAGEY1; +#endif + +#if 0 + printf("::: (%d, %d), (%d, %d), (%d, %d), (%d, %d) -> (%d, %d), (%d, %d), (%d, %d)\n", + src_x, src_y, + width, height, + dest_x, dest_y, + pad_x, pad_y, + + pad_dest_x, pad_dest_y, + pad_width, pad_height, + buffer_x, buffer_y); +#endif + + if (width == 0 || height == 0) + return; + + /* correct values to avoid off-screen blitting (start position) */ + if (pad_dest_x < screen_info.startx) + { + pad_width -= (screen_info.startx - pad_dest_x); + pad_dest_x = screen_info.startx; + } + if (pad_dest_y < screen_info.starty) + { + pad_height -= (screen_info.starty - pad_dest_y); + pad_dest_y = screen_info.starty; + } + + /* correct values to avoid off-screen blitting (blit size) */ + if (pad_width > screen_info.width) + pad_width = screen_info.width; + if (pad_height > screen_info.height) + pad_height = screen_info.height; /* special method to avoid flickering interference with BackToFront() */ - BlitBitmap(backbuffer, screen_info.save_buffer, dest_x-pad_x, dest_y-pad_y, - width+2*pad_x, height+2*pad_y, buf_x, buf_y); - SetClipOrigin(toon_bitmap, toon_clip_gc, dest_x-src_x, dest_y-src_y); - BlitBitmapMasked(toon_bitmap, backbuffer, - src_x, src_y, width, height, dest_x, dest_y); - BlitBitmap(backbuffer, window, dest_x-pad_x, dest_y-pad_y, - width+2*pad_x, height+2*pad_y, dest_x-pad_x, dest_y-pad_y); + BlitBitmap(backbuffer, screen_info.save_buffer, pad_dest_x, pad_dest_y, + pad_width, pad_height, buffer_x, buffer_y); + SetClipOrigin(toon_bitmap, toon_clip_gc, dest_x - src_x, dest_y - src_y); + BlitBitmapMasked(toon_bitmap, backbuffer, src_x, src_y, width, height, + dest_x, dest_y); + BlitBitmap(backbuffer, window, pad_dest_x, pad_dest_y, pad_width, pad_height, + pad_dest_x, pad_dest_y); screen_info.update_function(); - BlitBitmap(screen_info.save_buffer, backbuffer, buf_x, buf_y, - width+2*pad_x, height+2*pad_y, dest_x-pad_x, dest_y-pad_y); + BlitBitmap(screen_info.save_buffer, backbuffer, buffer_x, buffer_y, + pad_width, pad_height, pad_dest_x, pad_dest_y); FlushDisplay(); } @@ -220,7 +263,7 @@ boolean AnimateToon(int toon_nr, boolean restart) else { delta_y = -anim->step_offset; - pos_y = screen_info.width + delta_y; + pos_y = screen_info.height + delta_y; } delta_x = 0; diff --git a/src/main.c b/src/main.c index 971ba9db..a86ed447 100644 --- a/src/main.c +++ b/src/main.c @@ -24,6 +24,7 @@ Bitmap *bitmap_db_cross; Bitmap *bitmap_db_field; Bitmap *bitmap_db_panel; Bitmap *bitmap_db_door; +Bitmap *bitmap_db_toons; DrawBuffer *fieldbuffer; DrawBuffer *drawto_field; diff --git a/src/main.h b/src/main.h index 33b771ae..69b9b501 100644 --- a/src/main.h +++ b/src/main.h @@ -1949,8 +1949,8 @@ /* program information and versioning definitions */ #define PROGRAM_VERSION_MAJOR 3 #define PROGRAM_VERSION_MINOR 2 -#define PROGRAM_VERSION_PATCH 5 -#define PROGRAM_VERSION_BUILD 0 +#define PROGRAM_VERSION_PATCH 4 +#define PROGRAM_VERSION_BUILD 3 #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" @@ -2686,6 +2686,7 @@ extern Bitmap *bitmap_db_cross; extern Bitmap *bitmap_db_field; extern Bitmap *bitmap_db_panel; extern Bitmap *bitmap_db_door; +extern Bitmap *bitmap_db_toons; extern Pixmap tile_clipmask[]; extern DrawBuffer *fieldbuffer; extern DrawBuffer *drawto_field; -- 2.34.1