X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=8bef96cc876e53bf6b6d627b74751d4fa17dafe5;hb=268045d6b06349f1cf10d5cc6f9516b5caa20dea;hp=95f6da8efa83e981462ca15af4c62117ca31c46d;hpb=ca3d1b424a90490fb8da2a3bcfe58a4ab206d8a1;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index 95f6da8e..8bef96cc 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 */ @@ -938,8 +969,8 @@ #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 +1117,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; @@ -1239,6 +1272,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; @@ -1339,7 +1374,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 +1384,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 +1424,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;