#define EP_BIT_SP_ELEMENT (1 << 28)
#define EP_BIT_QUICK_GATE (1 << 29)
#define EP_BIT_OVER_PLAYER (1 << 30)
+#define EP_BIT_ACTIVE_BOMB (1 << 31)
#define IS_AMOEBALIVE(e) (Elementeigenschaften[e] & EP_BIT_AMOEBALIVE)
#define IS_AMOEBOID(e) (Elementeigenschaften[e] & EP_BIT_AMOEBOID)
#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_ACTIVE_BOMB(e) (Elementeigenschaften[e] & EP_BIT_ACTIVE_BOMB)
#define IS_PLAYER(x,y) (ELEM_IS_PLAYER(StorePlayer[x][y]))
#define NUM_PIXMAPS 10
/* boundaries of arrays etc. */
-#define MAX_NAMELEN (10+1)
+#define MAX_PLAYER_NAME_LEN 10
#define MAX_LEVEL_NAME_LEN 32
#define MAX_LEVEL_AUTHOR_LEN 32
#define MAX_TAPELEN (1000 * 50) /* max. time * framerate */
#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 */
struct HiScore
{
- char Name[MAX_NAMELEN];
+ char Name[MAX_PLAYER_NAME_LEN + 1];
int Score;
};
char *display_name;
char *server_host;
int server_port;
- char *base_directory;
+ char *ro_base_directory;
+ char *rw_base_directory;
char *level_directory;
boolean serveronly;
boolean network;
byte programmed_action; /* action forced by game itself (like moving
through doors); overrides other actions */
-
-#if 0
- byte programmed_speed; /* speed (for only one move) forced by game */
-#endif
-
-
int joystick_fd; /* file descriptor of player's joystick */
int jx,jy, last_jx,last_jy;
int Frame;
boolean Pushing;
- boolean gone, LevelSolved, GameOver;
+ boolean LevelSolved, GameOver;
boolean snapped;
- int move_speed;
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
{
- char *filename;
- char *name;
- char *author;
- int levels;
- int first_level;
- int last_level;
- int sort_priority;
- boolean user_defined;
- boolean readonly;
- int color;
+ char *filename; /* level series sub-directory inside level directory */
+ char *name; /* level series name, as displayed on main screen */
+ char *name_short; /* optional short name for level selection screen */
+ char *author; /* level series author name levels without author */
+ char *imported_from; /* optional comment for imported level series */
+ int levels; /* number of levels in level series */
+ int first_level; /* first level number (to allow start with 0 or 1) */
+ int last_level; /* last level number (automatically calculated) */
+ int sort_priority; /* sort levels by 'sort_priority' and then by name */
+ boolean user_defined; /* user defined levels are stored in home directory */
+ boolean readonly; /* readonly levels can not be changed with editor */
+ int color; /* color to use on selection screen for this level */
+ char *class_desc; /* description of level series class */
};
struct TapeInfo
} 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 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 EL_KOKOSNUSS 25
#define EL_LIFE 26
#define EL_LIFE_ASYNC 27
-#define EL_DYNAMIT 28
+#define EL_DYNAMITE_ACTIVE 28
#define EL_BADEWANNE 29
#define EL_ABLENK_AUS 30
#define EL_ABLENK_EIN 31
#define EL_PFORTE2X 41
#define EL_PFORTE3X 42
#define EL_PFORTE4X 43
-#define EL_DYNAMIT_AUS 44
+#define EL_DYNAMITE_INACTIVE 44
#define EL_PACMAN 45
#define EL_UNSICHTBAR 46
#define EL_BIRNE_AUS 47
#define EL_MAMPFER2 60
#define EL_SIEB2_INAKTIV 61
#define EL_INVISIBLE_STEEL 62
-#define EL_DYNABOMB 63
+
+#define EL_UNUSED_63 63
+
#define EL_DYNABOMB_NR 64
#define EL_DYNABOMB_SZ 65
#define EL_DYNABOMB_XL 66
#define EL_UNUSED_254 254
#define EL_UNUSED_255 255
+#define EL_PEARL 256
+#define EL_CRYSTAL 257
+#define EL_WALL_PEARL 258
+#define EL_WALL_CRYSTAL 259
+#define EL_DOOR_WHITE 260
+#define EL_DOOR_WHITE_GRAY 261
+#define EL_KEY_WHITE 262
+#define EL_FORCE_FIELD 263
+#define EL_EXTRA_TIME 264
+#define EL_SWITCH_GATE_OPEN 265
+#define EL_SWITCH_GATE_CLOSED 266
+#define EL_SWITCH_GATE_SWITCH 267
+#define EL_TIME_GATE 268
+#define EL_TIME_GATE_WHEEL 269
+#define EL_BELT_GREEN_LEFT 270
+#define EL_BELT_GREEN_MIDDLE 271
+#define EL_BELT_GREEN_RIGHT 272
+#define EL_BELT_GREEN_SWITCH 273
+#define EL_BELT_RED_LEFT 274
+#define EL_BELT_RED_MIDDLE 275
+#define EL_BELT_RED_RIGHT 276
+#define EL_BELT_RED_SWITCH 277
+#define EL_BELT_BLUE_LEFT 278
+#define EL_BELT_BLUE_MIDDLE 279
+#define EL_BELT_BLUE_RIGHT 280
+#define EL_BELT_BLUE_SWITCH 281
+#define EL_LANDMINE 282
+#define EL_ENVELOPE 283
+#define EL_LIGHT_SWITCH 284
+#define EL_SIGN_EXCLAMATION 285
+#define EL_SIGN_RADIOACTIVITY 286
+#define EL_SIGN_STOP 287
+#define EL_SIGN_WHEELCHAIR 288
+#define EL_SIGN_PARKING 289
+#define EL_SIGN_ONEWAY 290
+#define EL_SIGN_HEART 291
+#define EL_SIGN_TRIANGLE 292
+#define EL_SIGN_ROUND 293
+#define EL_SIGN_EXIT 294
+#define EL_SIGN_YINYANG 295
+#define EL_SIGN_OTHER 296
+#define EL_MOLE_LEFT 297
+#define EL_MOLE_RIGHT 298
+#define EL_MOLE_UP 299
+#define EL_MOLE_DOWN 300
+#define EL_STEEL_SLANTED 301
+#define EL_SAND_INVISIBLE 302
+
/* "real" (and therefore drawable) runtime elements */
-#define EL_SIEB_LEER 300
-#define EL_SIEB2_LEER 301
-#define EL_SIEB_VOLL 302
-#define EL_SIEB2_VOLL 303
-#define EL_SIEB_TOT 304
-#define EL_SIEB2_TOT 305
-#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
+#define EL_SIEB_LEER 1000
+#define EL_SIEB2_LEER 1001
+#define EL_SIEB_VOLL 1002
+#define EL_SIEB2_VOLL 1003
+#define EL_SIEB_TOT 1004
+#define EL_SIEB2_TOT 1005
+#define EL_AUSGANG_ACT 1006
+#define EL_SP_TERMINAL_ACTIVE 1007
+#define EL_SP_BUG_ACTIVE 1008
+#define EL_EM_KEY_1 1009
+#define EL_EM_KEY_2 1010
+#define EL_EM_KEY_3 1011
+#define EL_EM_KEY_4 1012
+#define EL_DYNABOMB_ACTIVE_1 1013
+#define EL_DYNABOMB_ACTIVE_2 1014
+#define EL_DYNABOMB_ACTIVE_3 1015
+#define EL_DYNABOMB_ACTIVE_4 1016
/* "unreal" (and therefore not drawable) runtime elements */
-#define EL_BLOCKED 400
-#define EL_EXPLODING 401
-#define EL_CRACKINGNUT 402
-#define EL_BLURB_LEFT 403
-#define EL_BLURB_RIGHT 404
-#define EL_AMOEBING 405
-#define EL_MAUERND 406
-#define EL_BURNING 407
-#define EL_PLAYER_IS_LEAVING 408
+#define EL_BLOCKED 2000
+#define EL_EXPLODING 2001
+#define EL_CRACKINGNUT 2002
+#define EL_BLURB_LEFT 2003
+#define EL_BLURB_RIGHT 2004
+#define EL_AMOEBING 2005
+#define EL_MAUERND 2006
+#define EL_BURNING 2007
+#define EL_PLAYER_IS_LEAVING 2008
/* game graphics:
** 0 - 255: graphics from "RocksScreen"
#define GFX_CHAR_COPY (GFX_CHAR_ASCII0 + 94)
#define GFX_CHAR_END (GFX_CHAR_START + 79)
+/* new elements which still have no graphic */
+#define GFX_PEARL GFX_CHAR_FRAGE
+#define GFX_CRYSTAL GFX_CHAR_FRAGE
+#define GFX_WALL_PEARL GFX_CHAR_FRAGE
+#define GFX_WALL_CRYSTAL GFX_CHAR_FRAGE
+#define GFX_DOOR_WHITE GFX_CHAR_FRAGE
+#define GFX_DOOR_WHITE_GRAY GFX_CHAR_FRAGE
+#define GFX_KEY_WHITE GFX_CHAR_FRAGE
+#define GFX_FORCE_FIELD GFX_CHAR_FRAGE
+#define GFX_EXTRA_TIME GFX_CHAR_FRAGE
+#define GFX_SWITCH_GATE_OPEN GFX_CHAR_FRAGE
+#define GFX_SWITCH_GATE_CLOSED GFX_CHAR_FRAGE
+#define GFX_SWITCH_GATE_SWITCH GFX_CHAR_FRAGE
+#define GFX_TIME_GATE GFX_CHAR_FRAGE
+#define GFX_TIME_GATE_WHEEL GFX_CHAR_FRAGE
+#define GFX_BELT_GREEN_LEFT GFX_CHAR_FRAGE
+#define GFX_BELT_GREEN_MIDDLE GFX_CHAR_FRAGE
+#define GFX_BELT_GREEN_RIGHT GFX_CHAR_FRAGE
+#define GFX_BELT_GREEN_SWITCH GFX_CHAR_FRAGE
+#define GFX_BELT_RED_LEFT GFX_CHAR_FRAGE
+#define GFX_BELT_RED_MIDDLE GFX_CHAR_FRAGE
+#define GFX_BELT_RED_RIGHT GFX_CHAR_FRAGE
+#define GFX_BELT_RED_SWITCH GFX_CHAR_FRAGE
+#define GFX_BELT_BLUE_LEFT GFX_CHAR_FRAGE
+#define GFX_BELT_BLUE_MIDDLE GFX_CHAR_FRAGE
+#define GFX_BELT_BLUE_RIGHT GFX_CHAR_FRAGE
+#define GFX_BELT_BLUE_SWITCH GFX_CHAR_FRAGE
+#define GFX_LANDMINE GFX_CHAR_FRAGE
+#define GFX_ENVELOPE GFX_CHAR_FRAGE
+#define GFX_LIGHT_SWITCH GFX_CHAR_FRAGE
+#define GFX_SIGN_EXCLAMATION GFX_CHAR_FRAGE
+#define GFX_SIGN_RADIOACTIVITY GFX_CHAR_FRAGE
+#define GFX_SIGN_STOP GFX_CHAR_FRAGE
+#define GFX_SIGN_WHEELCHAIR GFX_CHAR_FRAGE
+#define GFX_SIGN_PARKING GFX_CHAR_FRAGE
+#define GFX_SIGN_ONEWAY GFX_CHAR_FRAGE
+#define GFX_SIGN_HEART GFX_CHAR_FRAGE
+#define GFX_SIGN_TRIANGLE GFX_CHAR_FRAGE
+#define GFX_SIGN_ROUND GFX_CHAR_FRAGE
+#define GFX_SIGN_EXIT GFX_CHAR_FRAGE
+#define GFX_SIGN_YINYANG GFX_CHAR_FRAGE
+#define GFX_SIGN_OTHER GFX_CHAR_FRAGE
+#define GFX_MOLE_LEFT GFX_CHAR_FRAGE
+#define GFX_MOLE_RIGHT GFX_CHAR_FRAGE
+#define GFX_MOLE_UP GFX_CHAR_FRAGE
+#define GFX_MOLE_DOWN GFX_CHAR_FRAGE
+#define GFX_STEEL_SLANTED GFX_CHAR_FRAGE
+#define GFX_SAND_INVISIBLE GFX_CHAR_FRAGE
+
/* the names of the sounds */
#define SND_ALCHEMY 0
#define SND_AMOEBE 1
#define SND_SP_BOOOM 58
#define SND_SP_EXIT 59
#define SND_EMPTY 60
+#define SND_GATE 61
-#define NUM_SOUNDS 61
+#define NUM_SOUNDS 62
/* default input keys */
#define KEY_UNDEFINDED XK_VoidSymbol
#define FC_YELLOW 3
#define FC_SPECIAL1 4
#define FC_SPECIAL2 5
+#define FC_SPECIAL3 6
/* values for game_status */
#define EXITGAME 0
#define SETUPINPUT 9
#define CALIBRATION 10
-#ifndef GAME_DIR
-#define GAME_DIR "."
+#ifndef RO_GAME_DIR
+#define RO_GAME_DIR "."
+#endif
+
+#ifndef RW_GAME_DIR
+#define RW_GAME_DIR "."
#endif
-#define BASE_PATH GAME_DIR
+#define RO_BASE_PATH RO_GAME_DIR
+#define RW_BASE_PATH RW_GAME_DIR
#define GRAPHICS_DIRECTORY "graphics"
#define SOUNDS_DIRECTORY "sounds"
#define TAPES_DIRECTORY "tapes"
#define SCORES_DIRECTORY "scores"
-#define PROGRAM_VERSION_STRING "1.3.0"
+#define PROGRAM_VERSION_STRING "1.3.5"
#define PROGRAM_TITLE_STRING "Rocks'n'Diamonds"
#define PROGRAM_AUTHOR_STRING "Holger Schemel"
#define WINDOW_TITLE_STRING PROGRAM_TITLE_STRING " " PROGRAM_VERSION_STRING