X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=6c56974a538cf0e6d86795cbebc4fd8c42edf310;hb=1a8dede2cb67e1800ba2fa26182883920da1b160;hp=423058b41caa668af44b5ef5a1042c1faaf27070;hpb=7b47ce7ba0f673f0de5130daf5726104d0b38902;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index 423058b4..6c56974a 100644 --- a/src/main.h +++ b/src/main.h @@ -101,6 +101,8 @@ #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) @@ -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 @@ -647,6 +663,7 @@ #define EL_CUSTOM_128 (EL_CUSTOM_START + 127) #define EL_CUSTOM_END (EL_CUSTOM_START + 127) +#define NUM_CUSTOM_ELEMENTS 128 #define NUM_FILE_ELEMENTS 488 @@ -716,7 +733,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 +749,15 @@ #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 EL_ARROW_RED_LEFT (EL_FIRST_DUMMY + 16) +#define EL_ARROW_RED_RIGHT (EL_FIRST_DUMMY + 17) +#define EL_ARROW_RED_UP (EL_FIRST_DUMMY + 18) +#define EL_ARROW_RED_DOWN (EL_FIRST_DUMMY + 19) + +#define MAX_NUM_ELEMENTS (EL_FIRST_DUMMY + 20) /* values for graphics/sounds action types */ @@ -784,6 +785,12 @@ #define NUM_ACTIONS 21 +/* values for special image configuration suffixes */ +#define GFX_SPECIAL_ARG_EDITOR 0 +#define GFX_SPECIAL_ARG_PREVIEW 1 + +#define NUM_SPECIAL_GFX_ARGS 2 + /* values for image configuration suffixes */ #define GFX_ARG_XPOS 0 @@ -1027,14 +1034,18 @@ struct GlobalInfo struct ElementInfo { - char *token_name; /* element token used in config files */ + char *token_name; /* element token prefix 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]; + int editor_graphic; /* graphic displayed in level editor */ + int preview_graphic; /* graphic displayed in level preview */ + int sound[NUM_ACTIONS]; /* default sounds for several actions */ }; @@ -1073,6 +1084,12 @@ struct ElementDirectionInfo int value; }; +struct SpecialSuffixInfo +{ + char *suffix; + int value; +}; + #if 0 extern GC tile_clip_gc; @@ -1112,7 +1129,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,10 +1166,10 @@ extern struct GlobalInfo global; extern struct ElementInfo element_info[]; extern struct ElementActionInfo element_action_info[]; extern struct ElementDirectionInfo element_direction_info[]; -extern struct GraphicInfo graphic_info[]; -extern struct SoundInfo sound_info[]; +extern struct SpecialSuffixInfo special_suffix_info[]; +extern struct GraphicInfo *graphic_info; +extern struct SoundInfo *sound_info; extern struct ConfigInfo image_config[], sound_config[]; extern struct ConfigInfo image_config_suffix[], sound_config_suffix[]; -extern struct FileInfo *image_files, *sound_files; #endif /* MAIN_H */