X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=1d771ed6589518a2ed7e2bbd517a1ad81e505b43;hb=caf3da0a0e3af75eb8d10f83e5105581402b387e;hp=4275ba7e8785de52ab07eaa4e401605349e63a40;hpb=6435b79b71c4033de78ab3e611ee63f6a2147874;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index 4275ba7e..1d771ed6 100644 --- a/src/main.h +++ b/src/main.h @@ -60,91 +60,189 @@ #define IN_SCR_FIELD(x,y) ((x)>=BX1 && (x)<=BX2 && (y)>=BY1 &&(y)<=BY2) #define IN_LEV_FIELD(x,y) ((x)>=0 && (x)=0 &&(y)= EL_CUSTOM_START && \ (e) <= EL_CUSTOM_END) +#define GFX_ELEMENT(e) (IS_CUSTOM_ELEMENT(e) && \ + CUSTOM_ELEMENT_INFO(e).use_gfx_element ? \ + CUSTOM_ELEMENT_INFO(e).gfx_element : e) + #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)) @@ -171,7 +269,8 @@ #define PLAYERINFO(x,y) (&stored_player[StorePlayer[x][y]-EL_PLAYER_1]) #define SHIELD_ON(p) ((p)->shield_normal_time_left > 0) -#define PROTECTED_FIELD(x,y) (IS_TUBE(Feld[x][y])) +#define PROTECTED_FIELD(x,y) (IS_ACCESSIBLE_INSIDE(Feld[x][y]) && \ + IS_INDESTRUCTIBLE(Feld[x][y])) #define PLAYER_PROTECTED(x,y) (SHIELD_ON(PLAYERINFO(x, y)) || \ PROTECTED_FIELD(x, y)) @@ -189,56 +288,11 @@ #define IS_LOOP_SOUND(s) (sound_info[s].loop) -#if 0 - -/* Bitmaps with graphic file */ -#define PIX_BACK 0 -#define PIX_DOOR 1 -#define PIX_TOONS 2 -#define PIX_FONT_BIG 3 -#define PIX_FONT_SMALL 4 -#define PIX_FONT_MEDIUM 5 -#define PIX_FONT_EM 6 -/* Bitmaps without graphic file */ -#define PIX_DB_DOOR 7 -#define PIX_DB_FIELD 8 - -#define NUM_PICTURES 7 -#define NUM_BITMAPS 9 - -#else - -/* Bitmaps with graphic file */ -#define PIX_BACK 0 -#define PIX_ELEMENTS 1 -#define PIX_DOOR 2 -#define PIX_HEROES 3 -#define PIX_TOONS 4 -#define PIX_SP 5 -#define PIX_DC 6 -#define PIX_MORE 7 -#define PIX_FONT_BIG 8 -#define PIX_FONT_SMALL 9 -#define PIX_FONT_MEDIUM 10 -#define PIX_FONT_EM 11 -/* Bitmaps without graphic file */ -#define PIX_DB_DOOR 12 -#define PIX_DB_FIELD 13 - -#define NUM_PICTURES 12 -#define NUM_BITMAPS 14 - -#endif - /* boundaries of arrays etc. */ #define MAX_LEVEL_NAME_LEN 32 #define MAX_LEVEL_AUTHOR_LEN 32 #define MAX_TAPELEN (1000 * 50) /* max. time * framerate */ #define MAX_SCORE_ENTRIES 100 -#if 0 -#define MAX_ELEMENTS 700 /* 500 static + 200 runtime */ -#define MAX_GRAPHICS 1536 /* see below: NUM_TILES */ -#endif #define MAX_NUM_AMOEBA 100 /* values for elements with content */ @@ -438,15 +492,7 @@ #define EL_CHAR_ASCII0_END (EL_CHAR_ASCII0 + 111) #define EL_CHAR_END (EL_CHAR_START + 79) -#define EL_CHAR(x) ((x) == 'Ä' ? EL_CHAR_AE : \ - (x) == 'Ö' ? EL_CHAR_OE : \ - (x) == 'Ü' ? EL_CHAR_UE : \ - (x) == '^' ? EL_CHAR_COPYRIGHT : \ - (x) == '_' ? EL_CHAR_UNDERSCORE : \ - (x) == '°' ? EL_CHAR_DEGREE : \ - (x) == '´' ? EL_CHAR_TM : \ - (x) == '|' ? EL_CHAR_CURSOR : \ - EL_CHAR_A + (x) - 'A') +#define EL_CHAR(c) (EL_CHAR_ASCII0 + MAP_FONT_ASCII(c)) #define EL_EXPANDABLE_WALL_HORIZONTAL 200 #define EL_EXPANDABLE_WALL_VERTICAL 201 @@ -756,7 +802,7 @@ #define NUM_ACTIONS 26 -/* values for special image configuration suffixes */ +/* values for special image configuration suffixes (must match game mode) */ #define GFX_SPECIAL_ARG_MAIN 0 #define GFX_SPECIAL_ARG_LEVELS 1 #define GFX_SPECIAL_ARG_SCORES 2 @@ -792,10 +838,9 @@ #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 GFX_ARG_NAME 22 -#define NUM_GFX_ARGS 24 +#define NUM_GFX_ARGS 23 /* values for sound configuration suffixes */ @@ -814,54 +859,69 @@ #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 FONT_TEXT_1_ACTIVE 8 +#define FONT_TEXT_2_ACTIVE 9 +#define FONT_TEXT_3_ACTIVE 10 +#define FONT_TEXT_4_ACTIVE 11 +#define FONT_TEXT_1 12 +#define FONT_TEXT_2 13 +#define FONT_TEXT_3 14 +#define FONT_TEXT_4 15 +#define FONT_INPUT_1_ACTIVE 16 +#define FONT_INPUT_2_ACTIVE 17 +#define FONT_INPUT_1 18 +#define FONT_INPUT_2 19 +#define FONT_OPTION_OFF 20 +#define FONT_OPTION_ON 21 +#define FONT_VALUE_1 22 +#define FONT_VALUE_2 23 +#define FONT_VALUE_OLD 24 +#define FONT_LEVEL_NUMBER 25 +#define FONT_TAPE_RECORDER 26 +#define FONT_GAME_INFO 27 + +#define NUM_FONTS 28 #define NUM_INITIAL_FONTS 4 - -/* values for game_status */ -#define EXITGAME 0 -#define MAINMENU 1 -#define PLAYING 2 -#define LEVELED 3 -#define HELPSCREEN 4 -#define CHOOSELEVEL 5 -#define TYPENAME 6 -#define HALLOFFAME 7 -#define SETUP 8 -#define PSEUDO_PREVIEW 9 -#define PSEUDO_DOOR 10 +/* values for game_status (must match special image configuration suffixes) */ +#define GAME_MODE_MAIN 0 +#define GAME_MODE_LEVELS 1 +#define GAME_MODE_SCORES 2 +#define GAME_MODE_EDITOR 3 +#define GAME_MODE_INFO 4 +#define GAME_MODE_SETUP 5 +#define GAME_MODE_PSEUDO_DOOR 6 +#define GAME_MODE_PSEUDO_PREVIEW 7 + +/* there are no special config file suffixes for these modes */ +#define GAME_MODE_PLAYING 8 +#define GAME_MODE_PSEUDO_TYPENAME 9 +#define GAME_MODE_QUIT 10 #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 2 #define PROGRAM_VERSION_PATCH 0 -#define PROGRAM_VERSION_STRING "2.2.0rc4" +#define PROGRAM_VERSION_STRING "2.2.0rc7" #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" -#define PROGRAM_RIGHTS_STRING "Copyright ^1995-2003 by" +#define PROGRAM_RIGHTS_STRING "Copyright ©1995-2003 by" #define PROGRAM_DOS_PORT_STRING "DOS port done by Guido Schulz" #define PROGRAM_IDENT_STRING PROGRAM_VERSION_STRING " " TARGET_STRING #define WINDOW_TITLE_STRING PROGRAM_TITLE_STRING " " PROGRAM_IDENT_STRING #define WINDOW_SUBTITLE_STRING PROGRAM_RIGHTS_STRING " " PROGRAM_AUTHOR_STRING #define ICON_TITLE_STRING PROGRAM_TITLE_STRING -#define UNIX_USERDATA_DIRECTORY ".rocksndiamonds" #define COOKIE_PREFIX "ROCKSNDIAMONDS" #define FILENAME_PREFIX "Rocks" +#if defined(PLATFORM_UNIX) +#define USERDATA_DIRECTORY ".rocksndiamonds" +#elif defined(PLATFORM_WIN32) +#define USERDATA_DIRECTORY PROGRAM_TITLE_STRING +#else +#define USERDATA_DIRECTORY "userdata" +#endif + #define X11_ICON_FILENAME "rocks_icon.xbm" #define X11_ICONMASK_FILENAME "rocks_iconmask.xbm" #define MSDOS_POINTER_FILENAME "mouse.pcx" @@ -959,6 +1019,34 @@ struct PlayerInfo int shield_deadly_time_left; }; +struct CustomElementChangeInfo +{ + unsigned long events; /* bitfield for change events */ + + int delay_fixed; /* added frame delay before changed (fixed) */ + int delay_random; /* added frame delay before changed (random) */ + int delay_frames; /* either 1 (frames) or 50 (seconds; 50 fps) */ + + short successor; /* new custom element after change */ +}; + +struct CustomElementInfo +{ + boolean use_template; /* use all properties from template file */ + + boolean use_gfx_element; + short gfx_element; /* optional custom graphic element */ + + int move_direction; /* direction movable element moves to */ + + int walk_to_action; /* only for level editor; not stored */ + int walkable_layer; /* only for level editor; not stored */ + + int content[3][3]; /* new elements after explosion */ + + struct CustomElementChangeInfo change; +}; + struct LevelInfo { int file_version; /* file format version the level is stored with */ @@ -975,8 +1063,8 @@ struct LevelInfo char name[MAX_LEVEL_NAME_LEN + 1]; char author[MAX_LEVEL_AUTHOR_LEN + 1]; int score[LEVEL_SCORE_ELEMENTS]; - int yam_content[MAX_ELEMENT_CONTENTS][3][3]; - int num_yam_contents; + int yamyam_content[MAX_ELEMENT_CONTENTS][3][3]; + int num_yamyam_contents; int amoeba_speed; int amoeba_content; int time_magic_wall; @@ -987,6 +1075,8 @@ struct LevelInfo boolean gravity; boolean em_slippery_gems; /* EM style "gems slip from wall" behaviour */ + struct CustomElementInfo custom_element[NUM_CUSTOM_ELEMENTS]; + boolean no_level_file; }; @@ -996,6 +1086,7 @@ struct TapeInfo int game_version; /* game release version the tape was created with */ int engine_version; /* game engine version the tape was recorded with */ + char *level_identifier; int level_nr; unsigned long random_seed; unsigned long date; @@ -1031,7 +1122,7 @@ struct GameInfo int initial_move_delay_value; /* variable within running game */ - int yam_content_nr; + int yamyam_content_nr; boolean magic_wall_active; int magic_wall_time_left; int light_time_left; @@ -1050,19 +1141,25 @@ struct GlobalInfo int num_toons; - int menu_draw_xoffset; - int menu_draw_yoffset; - int menu_draw_xoffset_MAIN; - int menu_draw_yoffset_MAIN; - - int door_step_offset; - int door_step_delay; - float frames_per_second; boolean fps_slowdown; int fps_slowdown_factor; }; +struct MenuInfo +{ + int draw_xoffset_default; + int draw_yoffset_default; + int draw_xoffset[NUM_SPECIAL_GFX_ARGS]; + int draw_yoffset[NUM_SPECIAL_GFX_ARGS]; +}; + +struct DoorInfo +{ + int step_offset; + int step_delay; +}; + struct ElementInfo { char *token_name; /* element token used in config files */ @@ -1097,6 +1194,7 @@ struct GraphicInfo 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_frames_per_line; int anim_start_frame; int anim_delay; /* important: delay of 1 means "no delay"! */ int anim_mode; @@ -1164,6 +1262,7 @@ extern short MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short Back[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern boolean Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; @@ -1172,8 +1271,7 @@ extern short AmoebaCnt2[MAX_NUM_AMOEBA]; extern short ExplodePhase[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern unsigned long Properties1[MAX_NUM_ELEMENTS]; -extern unsigned long Properties2[MAX_NUM_ELEMENTS]; +extern unsigned long Properties[MAX_NUM_ELEMENTS][NUM_EP_BITFIELDS]; extern int GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; @@ -1211,10 +1309,13 @@ extern struct HiScore highscore[]; extern struct TapeInfo tape; extern struct GameInfo game; extern struct GlobalInfo global; +extern struct MenuInfo menu; +extern struct DoorInfo door; 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 TokenIntPtrInfo image_config_vars[]; extern struct FontInfo font_info[]; extern struct GraphicInfo *graphic_info; extern struct SoundInfo *sound_info;