#define EP_BIT_HAS_CONTENT (1 << 26)
#define EP_BIT_EATABLE (1 << 27)
#define EP_BIT_SP_ELEMENT (1 << 28)
+#define EP_BIT_QUICK_GATE (1 << 29)
+#define EP_BIT_OVER_PLAYER (1 << 30)
#define IS_AMOEBALIVE(e) (Elementeigenschaften[e] & EP_BIT_AMOEBALIVE)
#define IS_AMOEBOID(e) (Elementeigenschaften[e] & EP_BIT_AMOEBOID)
#define HAS_CONTENT(e) (Elementeigenschaften[e] & EP_BIT_HAS_CONTENT)
#define IS_EATABLE(e) (Elementeigenschaften[e] & EP_BIT_EATABLE)
#define IS_SP_ELEMENT(e) (Elementeigenschaften[e] & EP_BIT_SP_ELEMENT)
+#define IS_QUICK_GATE(e) (Elementeigenschaften[e] & EP_BIT_QUICK_GATE)
+#define IS_OVER_PLAYER(e) (Elementeigenschaften[e] & EP_BIT_OVER_PLAYER)
#define IS_PLAYER(x,y) (ELEM_IS_PLAYER(StorePlayer[x][y]))
#define MAX_ELEMENTS 512
#define MAX_NUM_AMOEBA 100
+/* values for elements with content */
+#define MIN_ELEMENT_CONTENTS 1
+#define STD_ELEMENT_CONTENTS 4
+#define MAX_ELEMENT_CONTENTS 8
+
#define LEVEL_SCORE_ELEMENTS 16 /* level elements with score */
/* fundamental game speed values */
byte effective_action; /* action aknowledged from network server
or summarized over all configured input
devices when in single player mode */
+ byte programmed_action; /* action forced by game itself (like moving
+ through doors); overrides other actions */
int joystick_fd; /* file descriptor of player's joystick */
int Frame;
boolean Pushing;
- boolean gone, LevelSolved, GameOver;
+ boolean LevelSolved, GameOver;
boolean snapped;
unsigned long move_delay;
+ int move_delay_value;
+
int last_move_dir;
unsigned long push_delay;
int fieldx;
int fieldy;
int time;
- int edelsteine;
+ int gems_needed;
char name[MAX_LEVEL_NAME_LEN + 1];
char author[MAX_LEVEL_AUTHOR_LEN + 1];
int score[LEVEL_SCORE_ELEMENTS];
- int mampfer_inhalt[8][3][3];
- int tempo_amoebe;
- int dauer_sieb;
- int dauer_ablenk;
- int amoebe_inhalt;
+ int yam_content[MAX_ELEMENT_CONTENTS][3][3];
+ int num_yam_contents;
+ int amoeba_speed;
+ int amoeba_content;
+ int time_magic_wall;
+ int time_wheel;
boolean double_speed;
+ boolean gravity;
};
struct LevelDirInfo
} pos[MAX_TAPELEN];
};
+struct GameInfo
+{
+ int emulation;
+ int yam_content_nr;
+ boolean magic_wall_active;
+ int magic_wall_time_left;
+};
+
+struct GlobalInfo
+{
+};
+
extern Display *display;
extern Visual *visual;
extern int screen;
extern int BorderElement;
extern int GameFrameDelay;
extern int FfwdFrameDelay;
-extern int MoveSpeed;
extern int BX1,BY1, BX2,BY2;
extern int SBX_Left, SBX_Right;
extern int SBY_Upper, SBY_Lower;
extern int ZX,ZY, ExitX,ExitY;
extern int AllPlayersGone;
extern int FrameCounter, TimeFrames, TimePlayed, TimeLeft;
-extern int MampferMax, MampferNr;
extern boolean SiebAktiv;
extern int SiebCount;
-extern int game_emulation;
-
extern boolean network_player_action_received;
extern struct LevelDirInfo leveldir[];
extern struct SetupInfo setup;
extern struct SetupFileList *setup_list;
extern struct SetupFileList *level_setup_list;
+extern struct GameInfo game;
+extern struct GlobalInfo global;
extern char *sound_name[];
extern int background_loop[];
#define FONT3_YSIZE 14
#define FONT4_XSIZE 16
#define FONT4_YSIZE 16
+#define FONT5_XSIZE 10
+#define FONT5_YSIZE 14
#define GFX_STARTX SX
#define GFX_STARTY SY
#define MICRO_GFX_PER_LINE 128
#define HEROES_PER_LINE 16
#define MINI_MORE_STARTX 0
-#define MINI_MORE_STARTY 224
+#define MINI_MORE_STARTY 352
#define MICRO_MORE_STARTX 0
-#define MICRO_MORE_STARTY 336
+#define MICRO_MORE_STARTY 448
#define MORE_PER_LINE 16
#define MINI_MORE_PER_LINE 16
-#define MICRO_MORE_PER_LINE 16
+#define MICRO_MORE_PER_LINE 64
#define FONT_CHARS_PER_LINE 16
#define FONT_LINES_PER_FONT 4
#define EL_SCHWEIN 117
#define EL_DRACHE 118
-#define EL_UNUSED_119 119
+#define EL_EM_KEY_1_FILE 119
#define EL_CHAR_START 120
#define EL_CHAR_ASCII0 (EL_CHAR_START-32)
#define EL_MAUER_Y 201
#define EL_MAUER_XY 202
-#define EL_UNUSED_203 203
-#define EL_UNUSED_204 204
-#define EL_UNUSED_205 205
-#define EL_UNUSED_206 206
-#define EL_UNUSED_207 207
-#define EL_UNUSED_208 208
-#define EL_UNUSED_209 209
+#define EL_EM_GATE_1 203
+#define EL_EM_GATE_2 204
+#define EL_EM_GATE_3 205
+#define EL_EM_GATE_4 206
+
+#define EL_EM_KEY_2_FILE 207
+#define EL_EM_KEY_3_FILE 208
+#define EL_EM_KEY_4_FILE 209
#define EL_SP_START 210
#define EL_SP_EMPTY (EL_SP_START + 0)
#define EL_SP_CHIP_LOWER (EL_SP_START + 39)
#define EL_SP_END (EL_SP_START + 39)
-#define EL_UNUSED_250 250
-#define EL_UNUSED_251 251
-#define EL_UNUSED_252 252
-#define EL_UNUSED_253 253
+#define EL_EM_GATE_1X 250
+#define EL_EM_GATE_2X 251
+#define EL_EM_GATE_3X 252
+#define EL_EM_GATE_4X 253
+
#define EL_UNUSED_254 254
#define EL_UNUSED_255 255
#define EL_AUSGANG_ACT 306
#define EL_SP_TERMINAL_ACTIVE 307
#define EL_SP_BUG_ACTIVE 308
+#define EL_EM_KEY_1 309
+#define EL_EM_KEY_2 310
+#define EL_EM_KEY_3 311
+#define EL_EM_KEY_4 312
/* "unreal" (and therefore not drawable) runtime elements */
#define EL_BLOCKED 400
/* graphics from "RocksMore" */
#define GFX_SP_EMPTY (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 0)
+/*
#define GFX_SP_ZONK (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 1)
+*/
#define GFX_SP_BASE (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 2)
#define GFX_SP_MURPHY (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 3)
#define GFX_SP_INFOTRON (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 4)
#define GFX_INVISIBLE_STEEL (GFX_START_ROCKSMORE + 5 * MORE_PER_LINE + 3)
#define GFX_UNSICHTBAR (GFX_START_ROCKSMORE + 5 * MORE_PER_LINE + 7)
+#define GFX_SP_ZONK (GFX_START_ROCKSMORE + 6 * MORE_PER_LINE + 0)
+
+#define GFX_EM_KEY_1 (GFX_START_ROCKSMORE + 6 * MORE_PER_LINE + 4)
+#define GFX_EM_KEY_2 (GFX_START_ROCKSMORE + 6 * MORE_PER_LINE + 5)
+#define GFX_EM_KEY_3 (GFX_START_ROCKSMORE + 6 * MORE_PER_LINE + 6)
+#define GFX_EM_KEY_4 (GFX_START_ROCKSMORE + 6 * MORE_PER_LINE + 7)
+#define GFX_EM_GATE_1 (GFX_START_ROCKSMORE + 7 * MORE_PER_LINE + 0)
+#define GFX_EM_GATE_2 (GFX_START_ROCKSMORE + 7 * MORE_PER_LINE + 1)
+#define GFX_EM_GATE_3 (GFX_START_ROCKSMORE + 7 * MORE_PER_LINE + 2)
+#define GFX_EM_GATE_4 (GFX_START_ROCKSMORE + 7 * MORE_PER_LINE + 3)
+#define GFX_EM_GATE_1X (GFX_START_ROCKSMORE + 7 * MORE_PER_LINE + 4)
+#define GFX_EM_GATE_2X (GFX_START_ROCKSMORE + 7 * MORE_PER_LINE + 5)
+#define GFX_EM_GATE_3X (GFX_START_ROCKSMORE + 7 * MORE_PER_LINE + 6)
+#define GFX_EM_GATE_4X (GFX_START_ROCKSMORE + 7 * MORE_PER_LINE + 7)
#define GFX_MURPHY_GO_LEFT (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 8)
#define GFX_MURPHY_ANY_LEFT (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 9)
#define FC_YELLOW 3
#define FC_SPECIAL1 4
#define FC_SPECIAL2 5
+#define FC_SPECIAL3 6
/* values for game_status */
#define EXITGAME 0
#define TAPES_DIRECTORY "tapes"
#define SCORES_DIRECTORY "scores"
-#define PROGRAM_VERSION_STRING "1.2.1"
+#define PROGRAM_VERSION_STRING "1.3.0"
#define PROGRAM_TITLE_STRING "Rocks'n'Diamonds"
#define PROGRAM_AUTHOR_STRING "Holger Schemel"
#define WINDOW_TITLE_STRING PROGRAM_TITLE_STRING " " PROGRAM_VERSION_STRING