X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=772176a84f786523fa9669a1edc2b6e19facd101;hb=5a5342a6ab48037839b783adc4f3304331834a8c;hp=4ee539f6835428d7682b6b1377d8c79a9c64e2e5;hpb=fa9c72bb286c8e5e5095e666dbf85981ad3a8ea2;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index 4ee539f6..772176a8 100644 --- a/src/main.h +++ b/src/main.h @@ -27,8 +27,8 @@ #include "libgame/libgame.h" -#include "conf_gfx.h" -#include "conf_snd.h" +#include "conf_gfx.h" /* include auto-generated data structure definitions */ +#include "conf_snd.h" /* include auto-generated data structure definitions */ #define IMG_UNDEFINED (-1) #define IMG_EMPTY IMG_EMPTY_SPACE @@ -66,7 +66,7 @@ #define EP_BIT_SCHLUESSEL (1 << 2) #define EP_BIT_PFORTE (1 << 3) #define EP_BIT_SOLID (1 << 4) -#define EP_BIT_MASSIVE (1 << 5) +#define EP_BIT_INDESTRUCTIBLE (1 << 5) #define EP_BIT_SLIPPERY (1 << 6) #define EP_BIT_ENEMY (1 << 7) #define EP_BIT_MAUER (1 << 8) @@ -101,12 +101,14 @@ #define EP_BIT_TUBE (1 << 3) #define EP_BIT_EM_SLIPPERY_WALL (1 << 4) +#define EP_BITMASK_DEFAULT 0 + #define IS_AMOEBALIVE(e) (Properties1[e] & EP_BIT_AMOEBALIVE) #define IS_AMOEBOID(e) (Properties1[e] & EP_BIT_AMOEBOID) #define IS_SCHLUESSEL(e) (Properties1[e] & EP_BIT_SCHLUESSEL) #define IS_PFORTE(e) (Properties1[e] & EP_BIT_PFORTE) #define IS_SOLID(e) (Properties1[e] & EP_BIT_SOLID) -#define IS_MASSIVE(e) (Properties1[e] & EP_BIT_MASSIVE) +#define IS_INDESTRUCTIBLE(e) (Properties1[e] & EP_BIT_INDESTRUCTIBLE) #define IS_SLIPPERY(e) (Properties1[e] & EP_BIT_SLIPPERY) #define IS_ENEMY(e) (Properties1[e] & EP_BIT_ENEMY) #define IS_MAUER(e) (Properties1[e] & EP_BIT_MAUER) @@ -140,6 +142,9 @@ #define IS_TUBE(e) (Properties2[e] & EP_BIT_TUBE) #define IS_EM_SLIPPERY_WALL(e) (Properties2[e] & EP_BIT_EM_SLIPPERY_WALL) +#define IS_CUSTOM_ELEMENT(e) ((e) >= EL_CUSTOM_START && \ + (e) <= EL_CUSTOM_END) + #define IS_PLAYER(x,y) (ELEM_IS_PLAYER(StorePlayer[x][y])) #define IS_FREE(x,y) (Feld[x][y] == EL_EMPTY && !IS_PLAYER(x,y)) @@ -172,6 +177,17 @@ #define PLAYER_NR_GFX(g,i) ((g) + i * (IMG_PLAYER2 - IMG_PLAYER1)) +#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_ANIMATED(g) (ANIM_FRAMES(g) > 1) +#define IS_NEW_DELAY(f, g) ((f) % ANIM_DELAY(g) == 0) +#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) + #if 0 @@ -404,10 +420,10 @@ #define EL_MOLE 110 #define EL_PENGUIN 111 #define EL_SATELLITE 112 -#define EL_ARROW_BLUE_LEFT 113 -#define EL_ARROW_BLUE_RIGHT 114 -#define EL_ARROW_BLUE_UP 115 -#define EL_ARROW_BLUE_DOWN 116 +#define EL_ARROW_LEFT 113 +#define EL_ARROW_RIGHT 114 +#define EL_ARROW_UP 115 +#define EL_ARROW_DOWN 116 #define EL_PIG 117 #define EL_DRAGON 118 @@ -416,41 +432,9 @@ #define EL_CHAR_START 120 #define EL_CHAR_ASCII0 (EL_CHAR_START - 32) #define EL_CHAR_ASCII0_START (EL_CHAR_ASCII0 + 32) -#define EL_CHAR_EXCLAM (EL_CHAR_ASCII0 + 33) -#define EL_CHAR_QUOTEDBL (EL_CHAR_ASCII0 + 34) -#define EL_CHAR_NUMBERSIGN (EL_CHAR_ASCII0 + 35) -#define EL_CHAR_DOLLAR (EL_CHAR_ASCII0 + 36) -#define EL_CHAR_PROCENT (EL_CHAR_ASCII0 + 37) -#define EL_CHAR_AMPERSAND (EL_CHAR_ASCII0 + 38) -#define EL_CHAR_APOSTROPHE (EL_CHAR_ASCII0 + 39) -#define EL_CHAR_PARENLEFT (EL_CHAR_ASCII0 + 40) -#define EL_CHAR_PARENRIGHT (EL_CHAR_ASCII0 + 41) -#define EL_CHAR_ASTERISK (EL_CHAR_ASCII0 + 42) -#define EL_CHAR_PLUS (EL_CHAR_ASCII0 + 43) -#define EL_CHAR_COMMA (EL_CHAR_ASCII0 + 44) -#define EL_CHAR_MINUS (EL_CHAR_ASCII0 + 45) -#define EL_CHAR_PERIOD (EL_CHAR_ASCII0 + 46) -#define EL_CHAR_SLASH (EL_CHAR_ASCII0 + 47) -#define EL_CHAR_0 (EL_CHAR_ASCII0 + 48) -#define EL_CHAR_9 (EL_CHAR_ASCII0 + 57) -#define EL_CHAR_COLON (EL_CHAR_ASCII0 + 58) -#define EL_CHAR_SEMICOLON (EL_CHAR_ASCII0 + 59) -#define EL_CHAR_LESS (EL_CHAR_ASCII0 + 60) -#define EL_CHAR_EQUAL (EL_CHAR_ASCII0 + 61) -#define EL_CHAR_GREATER (EL_CHAR_ASCII0 + 62) -#define EL_CHAR_QUESTION (EL_CHAR_ASCII0 + 63) -#define EL_CHAR_AT (EL_CHAR_ASCII0 + 64) -#define EL_CHAR_A (EL_CHAR_ASCII0 + 65) -#define EL_CHAR_Z (EL_CHAR_ASCII0 + 90) -#define EL_CHAR_AE (EL_CHAR_ASCII0 + 91) -#define EL_CHAR_OE (EL_CHAR_ASCII0 + 92) -#define EL_CHAR_UE (EL_CHAR_ASCII0 + 93) -#define EL_CHAR_COPYRIGHT (EL_CHAR_ASCII0 + 94) -#define EL_CHAR_UNDERSCORE (EL_CHAR_ASCII0 + 95) -#define EL_CHAR_EMPTY (EL_CHAR_ASCII0 + 96) -#define EL_CHAR_DEGREE (EL_CHAR_ASCII0 + 97) -#define EL_CHAR_TM (EL_CHAR_ASCII0 + 98) -#define EL_CHAR_CURSOR (EL_CHAR_ASCII0 + 99) + +#include "conf_chr.h" /* include auto-generated data structure definitions */ + #define EL_CHAR_ASCII0_END (EL_CHAR_ASCII0 + 111) #define EL_CHAR_END (EL_CHAR_START + 79) @@ -643,10 +627,12 @@ #define EL_UNUSED_359 359 #define EL_CUSTOM_START 360 -#define EL_CUSTOM_1 (EL_CUSTOM_START + 0) -#define EL_CUSTOM_128 (EL_CUSTOM_START + 127) + +#include "conf_cus.h" /* include auto-generated data structure definitions */ + #define EL_CUSTOM_END (EL_CUSTOM_START + 127) +#define NUM_CUSTOM_ELEMENTS 128 #define NUM_FILE_ELEMENTS 488 @@ -661,46 +647,47 @@ #define EL_DYNABOMB_PLAYER2_ACTIVE (EL_FIRST_RUNTIME_REAL + 5) #define EL_DYNABOMB_PLAYER3_ACTIVE (EL_FIRST_RUNTIME_REAL + 6) #define EL_DYNABOMB_PLAYER4_ACTIVE (EL_FIRST_RUNTIME_REAL + 7) -#define EL_SWITCHGATE_OPENING (EL_FIRST_RUNTIME_REAL + 8) -#define EL_SWITCHGATE_CLOSING (EL_FIRST_RUNTIME_REAL + 9) -#define EL_TIMEGATE_OPENING (EL_FIRST_RUNTIME_REAL + 10) -#define EL_TIMEGATE_CLOSING (EL_FIRST_RUNTIME_REAL + 11) -#define EL_PEARL_BREAKING (EL_FIRST_RUNTIME_REAL + 12) -#define EL_TRAP_ACTIVE (EL_FIRST_RUNTIME_REAL + 13) -#define EL_INVISIBLE_STEELWALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 14) -#define EL_INVISIBLE_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 15) -#define EL_INVISIBLE_SAND_ACTIVE (EL_FIRST_RUNTIME_REAL + 16) -#define EL_CONVEYOR_BELT1_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 17) -#define EL_CONVEYOR_BELT1_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 18) -#define EL_CONVEYOR_BELT1_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 19) -#define EL_CONVEYOR_BELT2_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 20) -#define EL_CONVEYOR_BELT2_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 21) -#define EL_CONVEYOR_BELT2_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 22) -#define EL_CONVEYOR_BELT3_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 23) -#define EL_CONVEYOR_BELT3_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 24) -#define EL_CONVEYOR_BELT3_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 25) -#define EL_CONVEYOR_BELT4_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 26) -#define EL_CONVEYOR_BELT4_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 27) -#define EL_CONVEYOR_BELT4_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 28) -#define EL_EXIT_OPENING (EL_FIRST_RUNTIME_REAL + 29) -#define EL_SP_EXIT_OPEN (EL_FIRST_RUNTIME_REAL + 30) -#define EL_SP_TERMINAL_ACTIVE (EL_FIRST_RUNTIME_REAL + 31) -#define EL_SP_BUGGY_BASE_ACTIVATING (EL_FIRST_RUNTIME_REAL + 32) -#define EL_SP_BUGGY_BASE_ACTIVE (EL_FIRST_RUNTIME_REAL + 33) -#define EL_SP_MURPHY_CLONE (EL_FIRST_RUNTIME_REAL + 34) -#define EL_AMOEBA_DRIPPING (EL_FIRST_RUNTIME_REAL + 35) -#define EL_QUICKSAND_EMPTYING (EL_FIRST_RUNTIME_REAL + 36) -#define EL_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 37) -#define EL_BD_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 38) -#define EL_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 39) -#define EL_BD_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 40) -#define EL_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 41) -#define EL_BD_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 42) -#define EL_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 43) -#define EL_BD_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 44) +#define EL_SP_DISK_RED_ACTIVE (EL_FIRST_RUNTIME_REAL + 8) +#define EL_SWITCHGATE_OPENING (EL_FIRST_RUNTIME_REAL + 9) +#define EL_SWITCHGATE_CLOSING (EL_FIRST_RUNTIME_REAL + 10) +#define EL_TIMEGATE_OPENING (EL_FIRST_RUNTIME_REAL + 11) +#define EL_TIMEGATE_CLOSING (EL_FIRST_RUNTIME_REAL + 12) +#define EL_PEARL_BREAKING (EL_FIRST_RUNTIME_REAL + 13) +#define EL_TRAP_ACTIVE (EL_FIRST_RUNTIME_REAL + 14) +#define EL_INVISIBLE_STEELWALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 15) +#define EL_INVISIBLE_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 16) +#define EL_INVISIBLE_SAND_ACTIVE (EL_FIRST_RUNTIME_REAL + 17) +#define EL_CONVEYOR_BELT1_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 18) +#define EL_CONVEYOR_BELT1_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 19) +#define EL_CONVEYOR_BELT1_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 20) +#define EL_CONVEYOR_BELT2_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 21) +#define EL_CONVEYOR_BELT2_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 22) +#define EL_CONVEYOR_BELT2_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 23) +#define EL_CONVEYOR_BELT3_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 24) +#define EL_CONVEYOR_BELT3_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 25) +#define EL_CONVEYOR_BELT3_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 26) +#define EL_CONVEYOR_BELT4_LEFT_ACTIVE (EL_FIRST_RUNTIME_REAL + 27) +#define EL_CONVEYOR_BELT4_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 28) +#define EL_CONVEYOR_BELT4_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 29) +#define EL_EXIT_OPENING (EL_FIRST_RUNTIME_REAL + 30) +#define EL_SP_EXIT_OPEN (EL_FIRST_RUNTIME_REAL + 31) +#define EL_SP_TERMINAL_ACTIVE (EL_FIRST_RUNTIME_REAL + 32) +#define EL_SP_BUGGY_BASE_ACTIVATING (EL_FIRST_RUNTIME_REAL + 33) +#define EL_SP_BUGGY_BASE_ACTIVE (EL_FIRST_RUNTIME_REAL + 34) +#define EL_SP_MURPHY_CLONE (EL_FIRST_RUNTIME_REAL + 35) +#define EL_AMOEBA_DRIPPING (EL_FIRST_RUNTIME_REAL + 36) +#define EL_QUICKSAND_EMPTYING (EL_FIRST_RUNTIME_REAL + 37) +#define EL_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 38) +#define EL_BD_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 39) +#define EL_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 40) +#define EL_BD_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 41) +#define EL_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 42) +#define EL_BD_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 43) +#define EL_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 44) +#define EL_BD_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 45) /* "unreal" (and therefore not drawable) runtime elements */ -#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 45) +#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 46) #define EL_BLOCKED (EL_FIRST_RUNTIME_UNREAL + 0) #define EL_EXPLOSION (EL_FIRST_RUNTIME_UNREAL + 1) @@ -716,7 +703,7 @@ #define EL_MAGIC_WALL_FILLING (EL_FIRST_RUNTIME_UNREAL + 11) #define EL_BD_MAGIC_WALL_FILLING (EL_FIRST_RUNTIME_UNREAL + 12) -/* dummy (not drawable) runtime elements (internal use only) */ +/* dummy elements (never used as game elements, only used as graphics) */ #define EL_FIRST_DUMMY (EL_FIRST_RUNTIME_UNREAL + 13) #define EL_STEELWALL_TOPLEFT (EL_FIRST_DUMMY + 0) @@ -732,31 +719,11 @@ #define EL_INVISIBLE_STEELWALL_HORIZONTAL (EL_FIRST_DUMMY + 10) #define EL_INVISIBLE_STEELWALL_VERTICAL (EL_FIRST_DUMMY + 11) #define EL_SAND_CRUMBLED (EL_FIRST_DUMMY + 12) -#define EL_BD_AMOEBA_PART1 (EL_FIRST_DUMMY + 13) -#define EL_BD_AMOEBA_PART2 (EL_FIRST_DUMMY + 14) -#define EL_BD_AMOEBA_PART3 (EL_FIRST_DUMMY + 15) -#define EL_BD_AMOEBA_PART4 (EL_FIRST_DUMMY + 16) -#define EL_AMOEBA_WET_PART1 (EL_FIRST_DUMMY + 17) -#define EL_AMOEBA_WET_PART2 (EL_FIRST_DUMMY + 18) -#define EL_AMOEBA_WET_PART3 (EL_FIRST_DUMMY + 19) -#define EL_AMOEBA_WET_PART4 (EL_FIRST_DUMMY + 20) -#define EL_AMOEBA_DRY_PART1 (EL_FIRST_DUMMY + 21) -#define EL_AMOEBA_DRY_PART2 (EL_FIRST_DUMMY + 22) -#define EL_AMOEBA_DRY_PART3 (EL_FIRST_DUMMY + 23) -#define EL_AMOEBA_DRY_PART4 (EL_FIRST_DUMMY + 24) -#define EL_AMOEBA_DEAD_PART1 (EL_FIRST_DUMMY + 25) -#define EL_AMOEBA_DEAD_PART2 (EL_FIRST_DUMMY + 26) -#define EL_AMOEBA_DEAD_PART3 (EL_FIRST_DUMMY + 27) -#define EL_AMOEBA_DEAD_PART4 (EL_FIRST_DUMMY + 28) -#define EL_DYNABOMB_ACTIVE (EL_FIRST_DUMMY + 29) -#define EL_SHIELD_NORMAL_ACTIVE (EL_FIRST_DUMMY + 30) -#define EL_SHIELD_DEADLY_ACTIVE (EL_FIRST_DUMMY + 31) -#define EL_ARROW_RED_LEFT (EL_FIRST_DUMMY + 32) -#define EL_ARROW_RED_RIGHT (EL_FIRST_DUMMY + 33) -#define EL_ARROW_RED_UP (EL_FIRST_DUMMY + 34) -#define EL_ARROW_RED_DOWN (EL_FIRST_DUMMY + 35) - -#define MAX_NUM_ELEMENTS (EL_FIRST_DUMMY + 36) +#define EL_DYNABOMB_ACTIVE (EL_FIRST_DUMMY + 13) +#define EL_SHIELD_NORMAL_ACTIVE (EL_FIRST_DUMMY + 14) +#define EL_SHIELD_DEADLY_ACTIVE (EL_FIRST_DUMMY + 15) + +#define MAX_NUM_ELEMENTS (EL_FIRST_DUMMY + 16) /* values for graphics/sounds action types */ @@ -784,26 +751,46 @@ #define NUM_ACTIONS 21 +/* values for special image configuration suffixes */ +#define GFX_SPECIAL_ARG_MAIN 0 +#define GFX_SPECIAL_ARG_LEVELS 1 +#define GFX_SPECIAL_ARG_SCORES 2 +#define GFX_SPECIAL_ARG_EDITOR 3 +#define GFX_SPECIAL_ARG_INFO 4 +#define GFX_SPECIAL_ARG_SETUP 5 +#define GFX_SPECIAL_ARG_DOOR 6 +#define GFX_SPECIAL_ARG_PREVIEW 7 + +#define NUM_SPECIAL_GFX_ARGS 8 + /* values for image configuration suffixes */ -#define GFX_ARG_XPOS 0 -#define GFX_ARG_YPOS 1 -#define GFX_ARG_OFFSET 2 -#define GFX_ARG_VERTICAL 3 -#define GFX_ARG_XOFFSET 4 -#define GFX_ARG_YOFFSET 5 -#define GFX_ARG_FRAMES 6 -#define GFX_ARG_START_FRAME 7 -#define GFX_ARG_DELAY 8 -#define GFX_ARG_MODE_LOOP 9 -#define GFX_ARG_MODE_LINEAR 10 -#define GFX_ARG_MODE_PINGPONG 11 -#define GFX_ARG_MODE_PINGPONG2 12 -#define GFX_ARG_MODE_RANDOM 13 -#define GFX_ARG_MODE_REVERSE 14 +#define GFX_ARG_X 0 +#define GFX_ARG_Y 1 +#define GFX_ARG_XPOS 2 +#define GFX_ARG_YPOS 3 +#define GFX_ARG_WIDTH 4 +#define GFX_ARG_HEIGHT 5 +#define GFX_ARG_OFFSET 6 +#define GFX_ARG_VERTICAL 7 +#define GFX_ARG_XOFFSET 8 +#define GFX_ARG_YOFFSET 9 +#define GFX_ARG_FRAMES 10 +#define GFX_ARG_FRAMES_PER_LINE 11 +#define GFX_ARG_START_FRAME 12 +#define GFX_ARG_DELAY 13 +#define GFX_ARG_ANIM_MODE 14 #define GFX_ARG_GLOBAL_SYNC 15 +#define GFX_ARG_STEP_OFFSET 16 +#define GFX_ARG_STEP_DELAY 17 +#define GFX_ARG_DIRECTION 18 +#define GFX_ARG_POSITION 19 +#define GFX_ARG_DRAW_XOFFSET 20 +#define GFX_ARG_DRAW_YOFFSET 21 +#define GFX_ARG_FORMAT 22 +#define GFX_ARG_NAME 23 -#define NUM_GFX_ARGS 16 +#define NUM_GFX_ARGS 24 /* values for sound configuration suffixes */ @@ -812,6 +799,34 @@ #define NUM_SND_ARGS 1 +/* values for font configuration */ + +#define FONT_INITIAL_1 0 +#define FONT_INITIAL_2 1 +#define FONT_INITIAL_3 2 +#define FONT_INITIAL_4 3 +#define FONT_TITLE_1 4 +#define FONT_TITLE_2 5 +#define FONT_MENU_1 6 +#define FONT_MENU_2 7 +#define FONT_TEXT_1 8 +#define FONT_TEXT_2 9 +#define FONT_TEXT_3 10 +#define FONT_TEXT_4 11 +#define FONT_INPUT 12 +#define FONT_INPUT_ACTIVE 13 +#define FONT_OPTION_OFF 14 +#define FONT_OPTION_ON 15 +#define FONT_VALUE_1 16 +#define FONT_VALUE_2 17 +#define FONT_VALUE_OLD 18 +#define FONT_TAPE_RECORDER 19 +#define FONT_LEVEL_NUMBER 20 + +#define NUM_FONTS 21 +#define NUM_INITIAL_FONTS 4 + + /* values for game_status */ #define EXITGAME 0 #define MAINMENU 1 @@ -822,11 +837,13 @@ #define TYPENAME 6 #define HALLOFFAME 7 #define SETUP 8 +#define PSEUDO_PREVIEW 9 +#define PSEUDO_DOOR 10 #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 2 #define PROGRAM_VERSION_PATCH 0 -#define PROGRAM_VERSION_STRING "2.2.0rc3" +#define PROGRAM_VERSION_STRING "2.2.0rc4" #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" @@ -901,13 +918,21 @@ struct PlayerInfo int MovDir, MovPos, GfxPos; int Frame; + int GfxAction; + + boolean use_murphy_graphic; + boolean use_disk_red_graphic; + boolean Pushing; boolean Switching; boolean LevelSolved, GameOver; boolean snapped; int last_move_dir; - int is_moving; + boolean is_moving; + + boolean is_digging; + boolean is_waiting; unsigned long move_delay; int move_delay_value; @@ -915,8 +940,6 @@ struct PlayerInfo unsigned long push_delay; unsigned long push_delay_value; - int frame_reset_delay; - unsigned long actual_frame_counter; int score; @@ -1020,6 +1043,8 @@ struct GlobalInfo char *autoplay_leveldir; int autoplay_level_nr; + int num_toons; + float frames_per_second; boolean fps_slowdown; int fps_slowdown_factor; @@ -1027,21 +1052,36 @@ struct GlobalInfo struct ElementInfo { - char *token_name; /* element token prefix used in config files */ + char *token_name; /* element token used in config files */ char *sound_class_name; /* classification for custom sound effects */ char *editor_description; /* short description for level editor */ + char *custom_description; /* custom description for level editor */ int graphic[NUM_ACTIONS]; /* default graphics for several actions */ - /* special graphics for left/right/up/down */ int direction_graphic[NUM_ACTIONS][NUM_DIRECTIONS]; + /* special graphics for left/right/up/down */ + int special_graphic[NUM_SPECIAL_GFX_ARGS]; + /* special graphics for certain screens */ int sound[NUM_ACTIONS]; /* default sounds for several actions */ }; +struct FontInfo +{ + char *token_name; /* font token used in config files */ + + int graphic; /* default graphic for this font */ + int special_graphic[NUM_SPECIAL_GFX_ARGS]; + /* special graphics for certain screens */ + int special_bitmap_id[NUM_SPECIAL_GFX_ARGS]; + /* internal bitmap ID for special graphics */ +}; + struct GraphicInfo { Bitmap *bitmap; - int src_x, src_y; /* derived from (tile sized) .xpos/.ypos */ + int src_x, src_y; /* start position of animation frames */ + int width, height; /* width/height of each animation frame */ int offset_x, offset_y; /* x/y offset to next animation frame */ int anim_frames; int anim_start_frame; @@ -1049,6 +1089,11 @@ struct GraphicInfo int anim_mode; boolean anim_global_sync; + int step_offset; /* optional step offset of toon animations */ + int step_delay; /* optional step delay of toon animations */ + + int draw_x, draw_y; /* optional offset for drawing fonts chars */ + #if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND) Pixmap clip_mask; /* single-graphic-only clip mask for X11 */ GC clip_gc; /* single-graphic-only clip gc for X11 */ @@ -1073,6 +1118,12 @@ struct ElementDirectionInfo int value; }; +struct SpecialSuffixInfo +{ + char *suffix; + int value; +}; + #if 0 extern GC tile_clip_gc; @@ -1112,7 +1163,8 @@ extern unsigned long Properties1[MAX_NUM_ELEMENTS]; extern unsigned long Properties2[MAX_NUM_ELEMENTS]; extern int GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern short GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern int GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern int GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int lev_fieldx, lev_fieldy; extern int scroll_x, scroll_y; @@ -1148,6 +1200,8 @@ extern struct GlobalInfo global; extern struct ElementInfo element_info[]; extern struct ElementActionInfo element_action_info[]; extern struct ElementDirectionInfo element_direction_info[]; +extern struct SpecialSuffixInfo special_suffix_info[]; +extern struct FontInfo font_info[]; extern struct GraphicInfo *graphic_info; extern struct SoundInfo *sound_info; extern struct ConfigInfo image_config[], sound_config[];