From 38ea4e57bc9b730abf7a15f8cc235465e6f0ad4c Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Sat, 12 Aug 2006 22:22:56 +0200 Subject: [PATCH] rnd-20060812-2-src * added configurable game panel value positions (gems, time, score etc.) --- ChangeLog | 1 + src/conf_gfx.c | 30 ++++++++------------ src/conftime.h | 2 +- src/game.c | 67 +++++++++++++++++++++++++++++++++++++++----- src/game.h | 13 +++++++++ src/init.c | 1 + src/libgame/sdl.h | 5 ---- src/libgame/system.h | 5 ++++ src/libgame/x11.h | 5 ---- src/main.c | 14 +++++++++ src/main.h | 1 + src/tools.c | 32 +++++++++++++++++++-- src/tools.h | 1 + 13 files changed, 139 insertions(+), 38 deletions(-) diff --git a/ChangeLog b/ChangeLog index 91e84c11..c3bf824d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ 2006-08-12 * added configurable level preview position, tile size and dimensions + * added configurable game panel value positions (gems, time, score etc.) 2006-08-10 * fixed small bug with time displayed incorrectly when collecting CEs diff --git a/src/conf_gfx.c b/src/conf_gfx.c index 44a4ca80..f0c99a79 100644 --- a/src/conf_gfx.c +++ b/src/conf_gfx.c @@ -4555,24 +4555,18 @@ struct ConfigInfo image_config[] = { "preview.step_offset", "1" }, { "preview.step_delay", "50" }, -#if DEBUG - { "game.level.x", "-1" }, - { "game.level.y", "-1" }, - { "game.gems.x", "-1" }, - { "game.gems.y", "-1" }, - { "game.bombs.x", "-1" }, - { "game.bombs.y", "-1" }, - { "game.keys.x", "-1" }, - { "game.keys.y", "-1" }, - { "game.score.x", "-1" }, - { "game.score.y", "-1" }, - { "game.time.x", "-1" }, - { "game.time.y", "-1" }, -#if 0 - { "game.tape.x", "-1" }, - { "game.tape.y", "-1" }, -#endif -#endif + { "game.panel.level.x", "37" }, + { "game.panel.level.y", "20" }, + { "game.panel.gems.x", "29" }, + { "game.panel.gems.y", "54" }, + { "game.panel.inventory.x", "29" }, + { "game.panel.inventory.y", "89" }, + { "game.panel.keys.x", "18" }, + { "game.panel.keys.y", "123" }, + { "game.panel.score.x", "15" }, + { "game.panel.score.y", "159" }, + { "game.panel.time.x", "29" }, + { "game.panel.time.y", "194" }, { "[player].boring_delay_fixed", "1000" }, { "[player].boring_delay_random", "1000" }, diff --git a/src/conftime.h b/src/conftime.h index ff232cef..acdf414a 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "[2006-08-12 16:00]" +#define COMPILE_DATE_STRING "[2006-08-12 22:11]" diff --git a/src/game.c b/src/game.c index 97b4be7f..40cffd8f 100644 --- a/src/game.c +++ b/src/game.c @@ -77,6 +77,28 @@ #define EX_TYPE_DYNA (1 << 4) #define EX_TYPE_SINGLE_TILE (EX_TYPE_CENTER | EX_TYPE_BORDER) +#if 1 + +#define PANEL_DEACTIVATED(p) ((p).x < 0 || (p).y < 0) + +/* special positions in the game control window (relative to control window) */ +#define XX_LEVEL1 (game.panel.level.x) +#define XX_LEVEL2 (game.panel.level.x - 1) +#define YY_LEVEL (game.panel.level.y) +#define XX_EMERALDS (game.panel.gems.x) +#define YY_EMERALDS (game.panel.gems.y) +#define XX_DYNAMITE (game.panel.inventory.x) +#define YY_DYNAMITE (game.panel.inventory.y) +#define XX_KEYS (game.panel.keys.x) +#define YY_KEYS (game.panel.keys.y) +#define XX_SCORE (game.panel.score.x) +#define YY_SCORE (game.panel.score.y) +#define XX_TIME1 (game.panel.time.x) +#define XX_TIME2 (game.panel.time.x + 1) +#define YY_TIME (game.panel.time.y) + +#else + /* special positions in the game control window (relative to control window) */ #define XX_LEVEL 37 #define YY_LEVEL 20 @@ -92,8 +114,11 @@ #define XX_TIME2 30 #define YY_TIME 194 +#endif + /* special positions in the game control window (relative to main window) */ -#define DX_LEVEL (DX + XX_LEVEL) +#define DX_LEVEL1 (DX + XX_LEVEL1) +#define DX_LEVEL2 (DX + XX_LEVEL2) #define DY_LEVEL (DY + YY_LEVEL) #define DX_EMERALDS (DX + XX_EMERALDS) #define DY_EMERALDS (DY + YY_EMERALDS) @@ -1268,6 +1293,9 @@ inline void DrawGameValue_Emeralds(int value) { int xpos = (3 * 14 - 3 * getFontWidth(FONT_TEXT_2)) / 2; + if (PANEL_DEACTIVATED(game.panel.gems)) + return; + DrawText(DX_EMERALDS + xpos, DY_EMERALDS, int2str(value, 3), FONT_TEXT_2); } @@ -1275,6 +1303,9 @@ inline void DrawGameValue_Dynamite(int value) { int xpos = (3 * 14 - 3 * getFontWidth(FONT_TEXT_2)) / 2; + if (PANEL_DEACTIVATED(game.panel.inventory)) + return; + DrawText(DX_DYNAMITE + xpos, DY_DYNAMITE, int2str(value, 3), FONT_TEXT_2); } @@ -1283,19 +1314,23 @@ inline void DrawGameValue_Keys(int key[MAX_NUM_KEYS]) int base_key_graphic = EL_KEY_1; int i; + if (PANEL_DEACTIVATED(game.panel.keys)) + return; + if (level.game_engine_type == GAME_ENGINE_TYPE_EM) base_key_graphic = EL_EM_KEY_1; /* currently only 4 of 8 possible keys are displayed */ for (i = 0; i < STD_NUM_KEYS; i++) { + int x = XX_KEYS + i * MINI_TILEX; + int y = YY_KEYS; + if (key[i]) - DrawMiniGraphicExt(drawto, DX_KEYS + i * MINI_TILEX, DY_KEYS, - el2edimg(base_key_graphic + i)); + DrawMiniGraphicExt(drawto, DX + x,DY + y, el2edimg(base_key_graphic + i)); else BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto, - DOOR_GFX_PAGEX5 + XX_KEYS + i * MINI_TILEX, YY_KEYS, - MINI_TILEX, MINI_TILEY, DX_KEYS + i * MINI_TILEX, DY_KEYS); + DOOR_GFX_PAGEX5 + x, y, MINI_TILEX, MINI_TILEY, DX + x,DY + y); } } @@ -1303,6 +1338,9 @@ inline void DrawGameValue_Score(int value) { int xpos = (5 * 14 - 5 * getFontWidth(FONT_TEXT_2)) / 2; + if (PANEL_DEACTIVATED(game.panel.score)) + return; + DrawText(DX_SCORE + xpos, DY_SCORE, int2str(value, 5), FONT_TEXT_2); } @@ -1311,9 +1349,12 @@ inline void DrawGameValue_Time(int value) int xpos3 = (3 * 14 - 3 * getFontWidth(FONT_TEXT_2)) / 2; int xpos4 = (4 * 10 - 4 * getFontWidth(FONT_LEVEL_NUMBER)) / 2; + if (PANEL_DEACTIVATED(game.panel.time)) + return; + /* clear background if value just changed its size */ if (value == 999 || value == 1000) - ClearRectangle(drawto, DX_TIME1, DY_TIME, 14 * 3, 14); + ClearRectangleOnBackground(drawto, DX_TIME1, DY_TIME, 14 * 3, 14); if (value < 1000) DrawText(DX_TIME1 + xpos3, DY_TIME, int2str(value, 3), FONT_TEXT_2); @@ -1323,9 +1364,15 @@ inline void DrawGameValue_Time(int value) inline void DrawGameValue_Level(int value) { + if (PANEL_DEACTIVATED(game.panel.level)) + return; + if (level_nr < 100) - DrawText(DX_LEVEL, DY_LEVEL, int2str(value, 2), FONT_TEXT_2); + DrawText(DX_LEVEL1, DY_LEVEL, int2str(value, 2), FONT_TEXT_2); else +#if 1 + DrawText(DX_LEVEL2, DY_LEVEL, int2str(value, 3), FONT_LEVEL_NUMBER); +#else { /* misuse area for displaying emeralds to draw bigger level number */ DrawTextExt(drawto, DX_EMERALDS, DY_EMERALDS, @@ -1343,6 +1390,7 @@ inline void DrawGameValue_Level(int value) /* yes, this is all really ugly :-) */ } +#endif } void DrawAllGameValues(int emeralds, int dynamite, int score, int time, @@ -2606,6 +2654,11 @@ void InitGame() DOOR_GFX_PAGEX5, DOOR_GFX_PAGEY1, DXSIZE, DYSIZE, DX, DY); } +#if 1 + SetPanelBackground(); + SetDrawBackgroundMask(REDRAW_DOOR_1); +#endif + DrawGameDoorValues(); if (!game.restart_level) diff --git a/src/game.h b/src/game.h index 71ad7a0a..1718f835 100644 --- a/src/game.h +++ b/src/game.h @@ -20,8 +20,21 @@ #define MAX_NUM_KEYS 8 +struct GamePanelInfo +{ + struct XY level; + struct XY gems; + struct XY inventory; + struct XY keys; + struct XY score; + struct XY time; +}; + struct GameInfo { + /* values for control panel */ + struct GamePanelInfo panel; + /* values for engine initialization */ int default_push_delay_fixed; int default_push_delay_random; diff --git a/src/init.c b/src/init.c index eebf70c4..c8c288a1 100644 --- a/src/init.c +++ b/src/init.c @@ -4498,6 +4498,7 @@ void InitGfx() /* create additional image buffers for double-buffering and cross-fading */ bitmap_db_title = CreateBitmap(WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH); 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); /* initialize screen properties */ diff --git a/src/libgame/sdl.h b/src/libgame/sdl.h index f817e329..c30afde6 100644 --- a/src/libgame/sdl.h +++ b/src/libgame/sdl.h @@ -82,11 +82,6 @@ struct MouseCursorInfo char mask[CURSOR_MAX_WIDTH * CURSOR_MAX_HEIGHT / 8]; }; -struct XY -{ - short x, y; -}; - /* SDL symbol definitions */ diff --git a/src/libgame/system.h b/src/libgame/system.h index 662ca549..967a41e4 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -979,6 +979,11 @@ struct ArtworkListInfo void (*free_artwork)(void *); /* destructor function */ }; +struct XY +{ + int x, y; +}; + /* ========================================================================= */ /* exported variables */ diff --git a/src/libgame/x11.h b/src/libgame/x11.h index 2519955f..a7aaf38a 100644 --- a/src/libgame/x11.h +++ b/src/libgame/x11.h @@ -93,11 +93,6 @@ struct MouseCursorInfo char mask[CURSOR_MAX_WIDTH * CURSOR_MAX_HEIGHT / 8]; }; -struct XY -{ - short x, y; -}; - /* X11 symbol definitions */ diff --git a/src/main.c b/src/main.c index e300b54f..1d48c5d8 100644 --- a/src/main.c +++ b/src/main.c @@ -22,6 +22,7 @@ Bitmap *bitmap_db_title; Bitmap *bitmap_db_field; +Bitmap *bitmap_db_panel; Bitmap *bitmap_db_door; DrawBuffer *fieldbuffer; DrawBuffer *drawto_field; @@ -4682,6 +4683,19 @@ struct TokenIntPtrInfo image_config_vars[] = { "preview.step_offset", &preview.step_offset }, { "preview.step_delay", &preview.step_delay }, + { "game.panel.level.x", &game.panel.level.x }, + { "game.panel.level.y", &game.panel.level.y }, + { "game.panel.gems.x", &game.panel.gems.x }, + { "game.panel.gems.y", &game.panel.gems.y }, + { "game.panel.inventory.x", &game.panel.inventory.x }, + { "game.panel.inventory.y", &game.panel.inventory.y }, + { "game.panel.keys.x", &game.panel.keys.x }, + { "game.panel.keys.y", &game.panel.keys.y }, + { "game.panel.score.x", &game.panel.score.x }, + { "game.panel.score.y", &game.panel.score.y }, + { "game.panel.time.x", &game.panel.time.x }, + { "game.panel.time.y", &game.panel.time.y }, + { "[player].boring_delay_fixed", &game.player_boring_delay_fixed }, { "[player].boring_delay_random", &game.player_boring_delay_random }, { "[player].sleeping_delay_fixed", &game.player_sleeping_delay_fixed }, diff --git a/src/main.h b/src/main.h index 1019c618..8d79c60c 100644 --- a/src/main.h +++ b/src/main.h @@ -2343,6 +2343,7 @@ struct HelpAnimInfo extern Bitmap *bitmap_db_title; extern Bitmap *bitmap_db_field; +extern Bitmap *bitmap_db_panel; extern Bitmap *bitmap_db_door; extern Pixmap tile_clipmask[]; extern DrawBuffer *fieldbuffer; diff --git a/src/tools.c b/src/tools.c index 866870a2..5051780e 100644 --- a/src/tools.c +++ b/src/tools.c @@ -480,6 +480,14 @@ void SetDoorBackgroundImage(int graphic) graphic_info[IMG_BACKGROUND].bitmap); } +void SetPanelBackground() +{ + BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, bitmap_db_panel, + DOOR_GFX_PAGEX5, DOOR_GFX_PAGEY1, DXSIZE, DYSIZE, 0, 0); + + SetDoorBackgroundBitmap(bitmap_db_panel); +} + void DrawBackground(int dst_x, int dst_y, int width, int height) { ClearRectangleOnBackground(backbuffer, dst_x, dst_y, width, height); @@ -2306,6 +2314,10 @@ boolean Request(char *text, unsigned int req_state) DOOR_GFX_PAGEX2, DOOR_GFX_PAGEY1); } +#if 1 + SetDoorBackgroundImage(IMG_BACKGROUND_DOOR); +#endif + SetDrawBackgroundMask(REDRAW_FIELD | REDRAW_DOOR_1); /* clear door drawing field */ @@ -2375,7 +2387,15 @@ boolean Request(char *text, unsigned int req_state) if (!(req_state & REQUEST_WAIT_FOR_INPUT)) { - SetDrawBackgroundMask(REDRAW_FIELD); + if (game_status == GAME_MODE_PLAYING) + { + SetPanelBackground(); + SetDrawBackgroundMask(REDRAW_DOOR_1); + } + else + { + SetDrawBackgroundMask(REDRAW_FIELD); + } return FALSE; } @@ -2520,7 +2540,15 @@ boolean Request(char *text, unsigned int req_state) RemapAllGadgets(); - SetDrawBackgroundMask(REDRAW_FIELD); + if (game_status == GAME_MODE_PLAYING) + { + SetPanelBackground(); + SetDrawBackgroundMask(REDRAW_DOOR_1); + } + else + { + SetDrawBackgroundMask(REDRAW_FIELD); + } #if defined(NETWORK_AVALIABLE) /* continue network game after request */ diff --git a/src/tools.h b/src/tools.h index 7e8f53c5..1174199e 100644 --- a/src/tools.h +++ b/src/tools.h @@ -75,6 +75,7 @@ void ClearWindow(); void SetMainBackgroundImageIfDefined(int); void SetMainBackgroundImage(int); void SetDoorBackgroundImage(int); +void SetPanelBackground(); void DrawBackground(int, int, int, int); void MarkTileDirty(int, int); -- 2.34.1