rnd-20060812-2-src
authorHolger Schemel <info@artsoft.org>
Sat, 12 Aug 2006 20:22:56 +0000 (22:22 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:52:46 +0000 (10:52 +0200)
* added configurable game panel value positions (gems, time, score etc.)

13 files changed:
ChangeLog
src/conf_gfx.c
src/conftime.h
src/game.c
src/game.h
src/init.c
src/libgame/sdl.h
src/libgame/system.h
src/libgame/x11.h
src/main.c
src/main.h
src/tools.c
src/tools.h

index 91e84c113c6de7a73f07d22d6daf1b32c2e82952..c3bf824dfb56f273e25f1561e750442cd0cb7c15 100644 (file)
--- 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
index 44a4ca802a364e37e667587726c3109f926af5e7..f0c99a794cb5e311aa2f824ffe8d3be376f6ad4a 100644 (file)
@@ -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"                  },
index ff232cefc2ed92e7211148ffe9cf4746bf3bfb84..acdf414a7e8bd7874ef8b61cd61395c1035ba9f4 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "[2006-08-12 16:00]"
+#define COMPILE_DATE_STRING "[2006-08-12 22:11]"
index 97b4be7f06e173f958b664b58a26b1206ea22746..40cffd8f40b6ac0d9b991ac7e5a23a9a307aeb77 100644 (file)
 #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)
@@ -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)
index 71ad7a0a3b8084c0296b9464c340b8522f15613d..1718f8357a61448cb2cb43868cb55521741c5b5a 100644 (file)
 #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;
index eebf70c43bcb18fead15ef7bf6058482bf6ae090..c8c288a12e51651c1baaf6494abb28a35de5fd97 100644 (file)
@@ -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 */
index f817e3294b34cc403d9ea2b78fb0cf2a03093c38..c30afde6218bd2de29aa07980f4d2a3c9ae2b43b 100644 (file)
@@ -82,11 +82,6 @@ struct MouseCursorInfo
   char mask[CURSOR_MAX_WIDTH * CURSOR_MAX_HEIGHT / 8];
 };
 
-struct XY
-{
-  short x, y;
-};
-
 
 /* SDL symbol definitions */
 
index 662ca5498897d7431a6a75322617585afcec4142..967a41e476a55340a05d5e498d8f8a3ea9be3243 100644 (file)
@@ -979,6 +979,11 @@ struct ArtworkListInfo
   void (*free_artwork)(void *);                        /* destructor function */
 };
 
+struct XY
+{
+  int x, y;
+};
+
 
 /* ========================================================================= */
 /* exported variables                                                        */
index 2519955ff530d1f00ee05091943b552ffd6010d8..a7aaf38aa1a3b935ee5685ac6548d8cef109840e 100644 (file)
@@ -93,11 +93,6 @@ struct MouseCursorInfo
   char mask[CURSOR_MAX_WIDTH * CURSOR_MAX_HEIGHT / 8];
 };
 
-struct XY
-{
-  short x, y;
-};
-
 
 /* X11 symbol definitions */
 
index e300b54fbb61c219b305c9567a4e3c8520327f5d..1d48c5d8ac4759147b5a0414f668358aafb242cd 100644 (file)
@@ -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   },
index 1019c618829caaa8a8d3b5912d443eafb66484e2..8d79c60cb208a8b446c6df10006ff70f25500052 100644 (file)
@@ -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;
index 866870a29d10e2ba5b09daa57836bc5ba06e8139..5051780e432522e57eb42094db5ca5b5550f4179 100644 (file)
@@ -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 */
index 7e8f53c5ad3a06fa87d1ce319f713d881f6748b4..1174199e65b85ce2aac3622f0d47c8249df5ef16 100644 (file)
@@ -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);