X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=1a77f8a9bc7959fc7c73dfd018e4a213ef25ac8b;hb=a7a3a417929449b5d1c32a5ef9e67693015d187b;hp=0a2ff1f6a8f1238f80a12358af7ae833d26e4b23;hpb=63d90fdf9bfeb9c6bb0c09a768d4969f732a3397;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index 0a2ff1f6..1a77f8a9 100644 --- a/src/main.h +++ b/src/main.h @@ -200,7 +200,7 @@ #define EP_BITMASK_BASE_DEFAULT (1 << EP_CAN_MOVE_INTO_ACID) #define EP_BITMASK_DEFAULT 0 -#define PROPERTY_BIT(p) (1 << ((p) % 32)) +#define PROPERTY_BIT(p) (1u << ((p) % 32)) #define PROPERTY_VAR(e,p) (element_info[e].properties[(p) / 32]) #define HAS_PROPERTY(e,p) ((PROPERTY_VAR(e, p) & PROPERTY_BIT(p)) != 0) #define SET_PROPERTY(e,p,v) ((v) ? \ @@ -669,6 +669,9 @@ #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) @@ -914,6 +917,9 @@ #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) @@ -926,8 +932,8 @@ #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) @@ -978,6 +984,12 @@ #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 @@ -1920,6 +1932,7 @@ #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 ----------------------------- @@ -2286,6 +2299,7 @@ enum enum { GFX_SPECIAL_ARG_DEFAULT = 0, + GFX_SPECIAL_ARG_LOADING_INITIAL, GFX_SPECIAL_ARG_LOADING, GFX_SPECIAL_ARG_TITLE_INITIAL, GFX_SPECIAL_ARG_TITLE_INITIAL_1, @@ -2304,6 +2318,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, @@ -2315,6 +2330,7 @@ enum GFX_SPECIAL_ARG_CRUMBLED, GFX_SPECIAL_ARG_MAINONLY, GFX_SPECIAL_ARG_NAMESONLY, + GFX_SPECIAL_ARG_SCORESONLY, GFX_SPECIAL_ARG_TYPENAME, GFX_SPECIAL_ARG_TYPENAMES, GFX_SPECIAL_ARG_SUBMENU, @@ -2395,6 +2411,7 @@ enum GFX_ARG_DELAY, GFX_ARG_ANIM_MODE, GFX_ARG_GLOBAL_SYNC, + GFX_ARG_GLOBAL_ANIM_SYNC, GFX_ARG_CRUMBLED_LIKE, GFX_ARG_DIGGABLE_LIKE, GFX_ARG_BORDER_SIZE, @@ -2537,6 +2554,7 @@ enum // values for game_status (must match special image configuration suffixes) #define GAME_MODE_DEFAULT GFX_SPECIAL_ARG_DEFAULT +#define GAME_MODE_LOADING_INITIAL GFX_SPECIAL_ARG_LOADING_INITIAL #define GAME_MODE_LOADING GFX_SPECIAL_ARG_LOADING #define GAME_MODE_TITLE_INITIAL GFX_SPECIAL_ARG_TITLE_INITIAL #define GAME_MODE_TITLE_INITIAL_1 GFX_SPECIAL_ARG_TITLE_INITIAL_1 @@ -2555,6 +2573,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 @@ -2566,6 +2585,7 @@ enum #define GAME_MODE_PSEUDO_CRUMBLED GFX_SPECIAL_ARG_CRUMBLED #define GAME_MODE_PSEUDO_MAINONLY GFX_SPECIAL_ARG_MAINONLY #define GAME_MODE_PSEUDO_NAMESONLY GFX_SPECIAL_ARG_NAMESONLY +#define GAME_MODE_PSEUDO_SCORESONLY GFX_SPECIAL_ARG_SCORESONLY #define GAME_MODE_PSEUDO_TYPENAME GFX_SPECIAL_ARG_TYPENAME #define GAME_MODE_PSEUDO_TYPENAMES GFX_SPECIAL_ARG_TYPENAMES #define GAME_MODE_PSEUDO_SUBMENU GFX_SPECIAL_ARG_SUBMENU @@ -2591,15 +2611,15 @@ enum // program information and versioning definitions #define PROGRAM_VERSION_SUPER 4 #define PROGRAM_VERSION_MAJOR 3 -#define PROGRAM_VERSION_MINOR 1 -#define PROGRAM_VERSION_PATCH 0 +#define PROGRAM_VERSION_MINOR 2 +#define PROGRAM_VERSION_PATCH 3 #define PROGRAM_VERSION_EXTRA "" #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #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 +2811,20 @@ struct MenuSetupInfo struct MenuSetupButtonInfo button; }; +struct MenuScoresButtonInfo +{ + struct MenuPosInfo prev_level; + struct MenuPosInfo next_level; + struct MenuPosInfo prev_score; + struct MenuPosInfo next_score; + struct MenuPosInfo play_tape; +}; + +struct MenuScoresInfo +{ + struct MenuScoresButtonInfo button; +}; + struct TitleFadingInfo { int fade_mode; @@ -2821,7 +2855,9 @@ struct TitleMessageInfo struct InitInfo { + struct MenuPosInfo busy_initial; struct MenuPosInfo busy; + struct MenuPosInfo busy_playfield; }; struct MenuInfo @@ -2880,6 +2916,7 @@ struct MenuInfo struct MenuMainInfo main; struct MenuSetupInfo setup; + struct MenuScoresInfo scores; }; struct DoorInfo @@ -3064,6 +3101,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,10 +3122,16 @@ struct ScoreInfo int num_entries; int last_added; int last_added_local; + int last_level_nr; + int last_entry_nr; + int next_level_nr; boolean updated; boolean uploaded; + boolean tape_downloaded; boolean force_last_added; + boolean continue_playing; + boolean continue_on_return; struct ScoreEntry entry[MAX_SCORE_ENTRIES]; }; @@ -3576,6 +3627,7 @@ struct GraphicInfo int anim_mode; boolean anim_global_sync; + boolean anim_global_anim_sync; int crumbled_like; // element for cloning crumble graphics int diggable_like; // element for cloning digging graphics @@ -3672,7 +3724,7 @@ struct MusicFileInfo boolean is_sound; - struct MusicFileInfo *next; + struct MusicFileInfo *prev, *next; }; struct ElementActionInfo @@ -3716,6 +3768,7 @@ extern DrawBuffer *drawto_field; extern int game_status; extern int game_status_last_screen; extern boolean level_editor_test_game; +extern boolean score_info_tape_play; extern boolean network_playing; extern int key_joystick_mapping; @@ -3753,6 +3806,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]; @@ -3857,6 +3911,7 @@ extern SetupFileHash *element_token_hash; extern SetupFileHash *graphic_token_hash; extern SetupFileHash *font_token_hash; extern SetupFileHash *hide_setup_hash; +extern SetupFileHash *anim_url_hash; extern struct ConfigTypeInfo image_config_suffix[]; extern struct ConfigTypeInfo sound_config_suffix[]; extern struct ConfigTypeInfo music_config_suffix[];