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
{ "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" },
-#define COMPILE_DATE_STRING "[2006-08-12 16:00]"
+#define COMPILE_DATE_STRING "[2006-08-12 22:11]"
#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
#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)
{
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);
}
{
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);
}
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);
}
}
{
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);
}
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);
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,
/* yes, this is all really ugly :-) */
}
+#endif
}
void DrawAllGameValues(int emeralds, int dynamite, int score, int time,
DOOR_GFX_PAGEX5, DOOR_GFX_PAGEY1, DXSIZE, DYSIZE, DX, DY);
}
+#if 1
+ SetPanelBackground();
+ SetDrawBackgroundMask(REDRAW_DOOR_1);
+#endif
+
DrawGameDoorValues();
if (!game.restart_level)
#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;
/* 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 */
char mask[CURSOR_MAX_WIDTH * CURSOR_MAX_HEIGHT / 8];
};
-struct XY
-{
- short x, y;
-};
-
/* SDL symbol definitions */
void (*free_artwork)(void *); /* destructor function */
};
+struct XY
+{
+ int x, y;
+};
+
/* ========================================================================= */
/* exported variables */
char mask[CURSOR_MAX_WIDTH * CURSOR_MAX_HEIGHT / 8];
};
-struct XY
-{
- short x, y;
-};
-
/* X11 symbol definitions */
Bitmap *bitmap_db_title;
Bitmap *bitmap_db_field;
+Bitmap *bitmap_db_panel;
Bitmap *bitmap_db_door;
DrawBuffer *fieldbuffer;
DrawBuffer *drawto_field;
{ "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 },
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;
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);
DOOR_GFX_PAGEX2, DOOR_GFX_PAGEY1);
}
+#if 1
+ SetDoorBackgroundImage(IMG_BACKGROUND_DOOR);
+#endif
+
SetDrawBackgroundMask(REDRAW_FIELD | REDRAW_DOOR_1);
/* clear door drawing field */
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;
}
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 */
void SetMainBackgroundImageIfDefined(int);
void SetMainBackgroundImage(int);
void SetDoorBackgroundImage(int);
+void SetPanelBackground();
void DrawBackground(int, int, int, int);
void MarkTileDirty(int, int);