added score selection buttons for score info page (not used yet)
[rocksndiamonds.git] / src / main.h
index 0a2ff1f6a8f1238f80a12358af7ae833d26e4b23..45ce857f99dc2f4adc954c024ddea6db94f7eb9b 100644 (file)
 
 #define IS_OBSOLETE(e)         HAS_PROPERTY(e, EP_OBSOLETE)
 
+#define IS_EMPTY(e)            IS_EMPTY_SPACE(e)
+#define IS_EMPTY_ELEMENT(e)    IS_EMPTY_SPACE(e)
+
 // special macros used in game engine
 #define IS_FILE_ELEMENT(e)     ((e) >= 0 &&                            \
                                 (e) <= NUM_FILE_ELEMENTS)
 
 #define GET_PLAYER_NR(e)       (GET_PLAYER_ELEMENT(e) - EL_PLAYER_1)
 
+#define GET_EMPTY_ELEMENT(i)   ((i) == 0 ? EL_EMPTY_SPACE :            \
+                                EL_EMPTY_SPACE_1 + (i) - 1)
+
 #define ANIM_FRAMES(g)         (graphic_info[g].anim_frames)
 #define ANIM_DELAY(g)          (graphic_info[g].anim_delay)
 #define ANIM_MODE(g)           (graphic_info[g].anim_mode)
 #define IS_NEW_FRAME(f, g)     (IS_ANIMATED(g) && IS_NEW_DELAY(f, g))
 #define IS_NEXT_FRAME(f, g)    (IS_NEW_FRAME(f, g) && (f) > 0)
 
-#define IS_LOOP_SOUND(s)       (sound_info[s].loop)
-#define IS_LOOP_MUSIC(s)       (music_info[s].loop)
+#define IS_LOOP_SOUND(s)       ((s) >= 0 && sound_info[s].loop)
+#define IS_LOOP_MUSIC(s)       ((s) <  0 || music_info[s].loop)
 
 #define IS_SPECIAL_GFX_ARG(a)  ((a) >= 0 && (a) < NUM_SPECIAL_GFX_ARGS)
 
 #define MAX_ANDROID_ELEMENTS   32
 #define MAX_ANDROID_ELEMENTS_OLD 16    // (extended since version 4.2.0.0)
 
+#define MAX_ISO_DATE_LEN       10
+#define MAX_PLATFORM_TEXT_LEN  16
+#define MAX_VERSION_TEXT_LEN   16
+#define MAX_COUNTRY_CODE_LEN   2
+#define MAX_COUNTRY_NAME_LEN   64
+
 // values for elements with content
 #define MIN_ELEMENT_CONTENTS   1
 #define STD_ELEMENT_CONTENTS   4
 #include "conf_emp.h"  // include auto-generated data structure definitions
 
 #define NUM_EMPTY_SPACE_ELEMENTS       16
+#define NUM_EMPTY_ELEMENTS_ALL         (NUM_EMPTY_SPACE_ELEMENTS + 1)
 #define EL_EMPTY_SPACE_END             1232
 // ---------- end of empty space elements section -----------------------------
 
@@ -2304,6 +2317,7 @@ enum
   GFX_SPECIAL_ARG_LEVELS,
   GFX_SPECIAL_ARG_LEVELNR,
   GFX_SPECIAL_ARG_SCORES,
+  GFX_SPECIAL_ARG_SCOREINFO,
   GFX_SPECIAL_ARG_EDITOR,
   GFX_SPECIAL_ARG_INFO,
   GFX_SPECIAL_ARG_SETUP,
@@ -2555,6 +2569,7 @@ enum
 #define GAME_MODE_LEVELS               GFX_SPECIAL_ARG_LEVELS
 #define GAME_MODE_LEVELNR              GFX_SPECIAL_ARG_LEVELNR
 #define GAME_MODE_SCORES               GFX_SPECIAL_ARG_SCORES
+#define GAME_MODE_SCOREINFO            GFX_SPECIAL_ARG_SCOREINFO
 #define GAME_MODE_EDITOR               GFX_SPECIAL_ARG_EDITOR
 #define GAME_MODE_INFO                 GFX_SPECIAL_ARG_INFO
 #define GAME_MODE_SETUP                        GFX_SPECIAL_ARG_SETUP
@@ -2591,7 +2606,7 @@ enum
 // program information and versioning definitions
 #define PROGRAM_VERSION_SUPER          4
 #define PROGRAM_VERSION_MAJOR          3
-#define PROGRAM_VERSION_MINOR          1
+#define PROGRAM_VERSION_MINOR          2
 #define PROGRAM_VERSION_PATCH          0
 #define PROGRAM_VERSION_EXTRA          ""
 
@@ -2599,7 +2614,7 @@ enum
 #define PROGRAM_AUTHOR_STRING          "Holger Schemel"
 #define PROGRAM_EMAIL_STRING           "info@artsoft.org"
 #define PROGRAM_WEBSITE_STRING         "https://www.artsoft.org/"
-#define PROGRAM_COPYRIGHT_STRING       "Copyright \xa9""1995-2021 by Holger Schemel"
+#define PROGRAM_COPYRIGHT_STRING       "Copyright \xa9""1995-2022 by Holger Schemel"
 #define PROGRAM_COMPANY_STRING         "A Game by Artsoft Entertainment"
 
 #define PROGRAM_ICON_FILENAME          "RocksIcon32x32.png"
@@ -2791,6 +2806,19 @@ struct MenuSetupInfo
   struct MenuSetupButtonInfo button;
 };
 
+struct MenuScoresButtonInfo
+{
+  struct MenuPosInfo prev_level;
+  struct MenuPosInfo next_level;
+  struct MenuPosInfo prev_score;
+  struct MenuPosInfo next_score;
+};
+
+struct MenuScoresInfo
+{
+  struct MenuScoresButtonInfo button;
+};
+
 struct TitleFadingInfo
 {
   int fade_mode;
@@ -2880,6 +2908,7 @@ struct MenuInfo
 
   struct MenuMainInfo main;
   struct MenuSetupInfo setup;
+  struct MenuScoresInfo scores;
 };
 
 struct DoorInfo
@@ -3064,6 +3093,14 @@ struct ScoreEntry
   char name[MAX_PLAYER_NAME_LEN + 1];
   int score;
   int time;            // time (in frames) or steps played
+
+  // additional score information for score info screen
+  int id;
+  char tape_date[MAX_ISO_DATE_LEN + 1];
+  char platform[MAX_PLATFORM_TEXT_LEN + 1];
+  char version[MAX_VERSION_TEXT_LEN + 1];
+  char country_code[MAX_COUNTRY_CODE_LEN + 1];
+  char country_name[MAX_COUNTRY_NAME_LEN + 1];
 };
 
 struct ScoreInfo
@@ -3077,6 +3114,8 @@ struct ScoreInfo
   int num_entries;
   int last_added;
   int last_added_local;
+  int last_level_nr;
+  int last_entry_nr;
 
   boolean updated;
   boolean uploaded;
@@ -3753,6 +3792,7 @@ extern int                        GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxRandomStatic[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxElement[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern int                     GfxElementEmpty[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxRedraw[MAX_LEV_FIELDX][MAX_LEV_FIELDY];