X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=6709828a683a3d67597ffb8d5a8bfbbc1ef37911;hb=4386c0ac1665619412148f1eb907f6d366a70d7d;hp=95f6da8efa83e981462ca15af4c62117ca31c46d;hpb=ca3d1b424a90490fb8da2a3bcfe58a4ab206d8a1;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index 95f6da8e..6709828a 100644 --- a/src/main.h +++ b/src/main.h @@ -194,6 +194,32 @@ #define CP_HALF_DESTRUCTIVE 1 #define CP_FULL_DESTRUCTIVE 2 +/* values for special move patterns (bits 0-3: basic move directions) */ +#define MV_BIT_TOWARDS_PLAYER 4 +#define MV_BIT_AWAY_FROM_PLAYER 5 +#define MV_BIT_ALONG_LEFT_SIDE 6 +#define MV_BIT_ALONG_RIGHT_SIDE 7 +#define MV_BIT_TURNING_LEFT 8 +#define MV_BIT_TURNING_RIGHT 9 + +/* values for special move patterns for custom elements */ +#define MV_HORIZONTAL (MV_LEFT | MV_RIGHT) +#define MV_VERTICAL (MV_UP | MV_DOWN) +#define MV_ALL_DIRECTIONS (MV_HORIZONTAL | MV_VERTICAL) +#define MV_ANY_DIRECTION (MV_ALL_DIRECTIONS) +#define MV_TOWARDS_PLAYER (1 << MV_BIT_TOWARDS_PLAYER) +#define MV_AWAY_FROM_PLAYER (1 << MV_BIT_AWAY_FROM_PLAYER) +#define MV_ALONG_LEFT_SIDE (1 << MV_BIT_ALONG_LEFT_SIDE) +#define MV_ALONG_RIGHT_SIDE (1 << MV_BIT_ALONG_RIGHT_SIDE) +#define MV_TURNING_LEFT (1 << MV_BIT_TURNING_LEFT) +#define MV_TURNING_RIGHT (1 << MV_BIT_TURNING_RIGHT) + +/* values for slippery property for custom elements */ +#define SLIPPERY_ANY_RANDOM 0 +#define SLIPPERY_ANY_LEFT_RIGHT 1 +#define SLIPPERY_ANY_RIGHT_LEFT 2 +#define SLIPPERY_ONLY_LEFT 3 +#define SLIPPERY_ONLY_RIGHT 4 /* macros for configurable properties */ #define IS_DIGGABLE(e) HAS_PROPERTY(e, EP_DIGGABLE) @@ -797,15 +823,20 @@ #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_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_DEFAULT (EL_FIRST_DUMMY + 16) -#define EL_BD_DEFAULT (EL_FIRST_DUMMY + 17) -#define EL_SP_DEFAULT (EL_FIRST_DUMMY + 18) -#define EL_SB_DEFAULT (EL_FIRST_DUMMY + 19) - -#define MAX_NUM_ELEMENTS (EL_FIRST_DUMMY + 20) +#define EL_DYNABOMB (EL_FIRST_DUMMY + 13) +#define EL_DYNABOMB_ACTIVE (EL_FIRST_DUMMY + 14) +#define EL_DYNABOMB_PLAYER_1 (EL_FIRST_DUMMY + 15) +#define EL_DYNABOMB_PLAYER_2 (EL_FIRST_DUMMY + 16) +#define EL_DYNABOMB_PLAYER_3 (EL_FIRST_DUMMY + 17) +#define EL_DYNABOMB_PLAYER_4 (EL_FIRST_DUMMY + 18) +#define EL_SHIELD_NORMAL_ACTIVE (EL_FIRST_DUMMY + 19) +#define EL_SHIELD_DEADLY_ACTIVE (EL_FIRST_DUMMY + 20) +#define EL_DEFAULT (EL_FIRST_DUMMY + 21) +#define EL_BD_DEFAULT (EL_FIRST_DUMMY + 22) +#define EL_SP_DEFAULT (EL_FIRST_DUMMY + 23) +#define EL_SB_DEFAULT (EL_FIRST_DUMMY + 24) + +#define MAX_NUM_ELEMENTS (EL_FIRST_DUMMY + 25) /* values for graphics/sounds action types */ @@ -848,8 +879,9 @@ #define GFX_SPECIAL_ARG_SETUP 5 #define GFX_SPECIAL_ARG_DOOR 6 #define GFX_SPECIAL_ARG_PREVIEW 7 +#define GFX_SPECIAL_ARG_CRUMBLED 8 -#define NUM_SPECIAL_GFX_ARGS 8 +#define NUM_SPECIAL_GFX_ARGS 9 /* values for image configuration suffixes */ @@ -869,15 +901,17 @@ #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_NAME 22 +#define GFX_ARG_CRUMBLED_LIKE 16 +#define GFX_ARG_DIGGABLE_LIKE 17 +#define GFX_ARG_STEP_OFFSET 18 +#define GFX_ARG_STEP_DELAY 19 +#define GFX_ARG_DIRECTION 20 +#define GFX_ARG_POSITION 21 +#define GFX_ARG_DRAW_XOFFSET 22 +#define GFX_ARG_DRAW_YOFFSET 23 +#define GFX_ARG_NAME 24 -#define NUM_GFX_ARGS 23 +#define NUM_GFX_ARGS 25 /* values for sound configuration suffixes */ @@ -929,17 +963,18 @@ #define GAME_MODE_SETUP 5 #define GAME_MODE_PSEUDO_DOOR 6 #define GAME_MODE_PSEUDO_PREVIEW 7 +#define GAME_MODE_PSEUDO_CRUMBLED 8 /* 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 GAME_MODE_PLAYING 9 +#define GAME_MODE_PSEUDO_TYPENAME 10 +#define GAME_MODE_QUIT 11 #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 2 #define PROGRAM_VERSION_PATCH 0 -#define PROGRAM_VERSION_RELEASE 7 -#define PROGRAM_VERSION_STRING "2.2.0rc7" +#define PROGRAM_VERSION_RELEASE 8 +#define PROGRAM_VERSION_STRING "2.2.0rc8" #define PROGRAM_TITLE_STRING "Rocks'n'Diamonds" #define PROGRAM_AUTHOR_STRING "Holger Schemel" @@ -1086,6 +1121,8 @@ struct LevelInfo boolean gravity; boolean em_slippery_gems; /* EM style "gems slip from wall" behaviour */ + short field[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; + boolean use_custom_template; /* use custom properties from template file */ boolean no_level_file; @@ -1164,6 +1201,8 @@ struct MenuInfo int draw_xoffset[NUM_SPECIAL_GFX_ARGS]; int draw_yoffset[NUM_SPECIAL_GFX_ARGS]; + int scrollbar_xoffset; + int list_size_default; int list_size[NUM_SPECIAL_GFX_ARGS]; }; @@ -1217,6 +1256,11 @@ struct ElementInfo int graphic[NUM_ACTIONS]; /* default graphics for several actions */ int direction_graphic[NUM_ACTIONS][NUM_DIRECTIONS]; /* special graphics for left/right/up/down */ + + int crumbled[NUM_ACTIONS]; /* crumbled graphics for several actions */ + int direction_crumbled[NUM_ACTIONS][NUM_DIRECTIONS]; + /* crumbled graphics for left/right/up/down */ + int special_graphic[NUM_SPECIAL_GFX_ARGS]; /* special graphics for certain screens */ @@ -1239,6 +1283,8 @@ struct ElementInfo int move_direction_initial; /* initial direction element moves to */ int move_stepsize; /* step size element moves with */ + int slippery_type; /* how/where other elements slip away */ + int content[3][3]; /* new elements after explosion */ struct ElementChangeInfo change; @@ -1283,6 +1329,8 @@ struct GraphicInfo int anim_delay; /* important: delay of 1 means "no delay"! */ int anim_mode; boolean anim_global_sync; + int crumbled_like; /* element for cloning crumble graphics */ + int diggable_like; /* element for cloning digging graphics */ int step_offset; /* optional step offset of toon animations */ int step_delay; /* optional step delay of toon animations */ @@ -1339,7 +1387,6 @@ extern boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE]; extern int redraw_x1, redraw_y1; extern short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern short Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; @@ -1350,6 +1397,7 @@ 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 boolean Pushed[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern boolean Changing[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern short AmoebaCnt[MAX_NUM_AMOEBA]; @@ -1389,7 +1437,7 @@ extern boolean network_player_action_received; extern int graphics_action_mapping[]; -extern struct LevelInfo level; +extern struct LevelInfo level, level_template; extern struct PlayerInfo stored_player[], *local_player; extern struct HiScore highscore[]; extern struct TapeInfo tape;