#define PIX_TOONS 3
#define PIX_SP 4
#define PIX_DC 5
-#define PIX_BIGFONT 6
-#define PIX_SMALLFONT 7
+#define PIX_MORE 6
+#define PIX_BIGFONT 7
+#define PIX_SMALLFONT 8
+#define PIX_MEDIUMFONT 9
/* Pixmaps without graphic file */
-#define PIX_DB_BACK 8
-#define PIX_DB_DOOR 9
-#define PIX_DB_FIELD 10
+#define PIX_DB_BACK 10
+#define PIX_DB_DOOR 11
+#define PIX_DB_FIELD 12
-#define NUM_PICTURES 8
-#define NUM_PIXMAPS 10
+#define NUM_PICTURES 10
+#define NUM_PIXMAPS 13
/* boundaries of arrays etc. */
#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_LEVDIR_ENTRIES 100
#define MAX_SCORE_ENTRIES 100
#define MAX_ELEMENTS 700 /* 500 static + 200 runtime */
#define MAX_NUM_AMOEBA 100
boolean autorecord;
boolean quick_doors;
boolean team_mode;
+ boolean handicap;
+ boolean time_limit;
struct SetupInputInfo input[MAX_PLAYERS];
};
struct LevelDirInfo
{
- char *filename; /* level series sub-directory inside level directory */
+ char *filename; /* level series single directory name */
+ char *fullpath; /* complete path relative to level directory */
+ char *basepath; /* absolute base path of level directory */
char *name; /* level series name, as displayed on main screen */
char *name_short; /* optional short name for level selection screen */
+ char *name_sorting; /* optional sorting name for correct level sorting */
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 level_group; /* directory contains more level series directories */
+ boolean parent_link; /* entry links back to parent directory */
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 */
+ int handicap_level; /* number of the lowest unsolved level */
+ int cl_first; /* internal control field for "choose level" screen */
+ int cl_cursor; /* internal control field for "choose level" screen */
+
+ struct LevelDirInfo *node_parent; /* parent level directory info */
+ struct LevelDirInfo *node_group; /* level group sub-directory info */
+ struct LevelDirInfo *next; /* next level series structure node */
};
struct TapeInfo
int belt_dir[4];
int belt_dir_nr[4];
int switchgate_pos;
+ int balloon_dir;
};
struct GlobalInfo
extern unsigned long Elementeigenschaften1[MAX_ELEMENTS];
extern unsigned long Elementeigenschaften2[MAX_ELEMENTS];
-extern int level_nr, leveldir_nr, num_leveldirs;
+extern int level_nr;
extern int lev_fieldx,lev_fieldy, scroll_x,scroll_y;
extern int FX,FY, ScrollStepSize;
extern boolean network_player_action_received;
-extern struct LevelDirInfo leveldir[];
+extern struct LevelDirInfo *leveldir_first, *leveldir_current;
extern struct LevelInfo level;
extern struct PlayerInfo stored_player[], *local_player;
extern struct HiScore highscore[];
extern struct JoystickInfo joystick[];
extern struct OptionInfo options;
extern struct SetupInfo setup;
-extern struct SetupFileList *setup_list;
-extern struct SetupFileList *level_setup_list;
extern struct GameInfo game;
extern struct GlobalInfo global;
#define FONT4_YSIZE 16
#define FONT5_XSIZE 10
#define FONT5_YSIZE 14
+#define FONT6_XSIZE 16
+#define FONT6_YSIZE 32
#define GFX_STARTX SX
#define GFX_STARTY SY
#define MINI_DC_PER_LINE 16
#define MICRO_DC_PER_LINE 16
+#define MINI_MORE_STARTX 256
+#define MINI_MORE_STARTY 256
+#define MICRO_MORE_STARTX 384
+#define MICRO_MORE_STARTY 384
+#define MORE_PER_LINE 16
+#define MINI_MORE_PER_LINE 16
+#define MICRO_MORE_PER_LINE 16
+
#define FONT_CHARS_PER_LINE 16
#define FONT_LINES_PER_FONT 4
#define EL_TIMEGATE_SWITCH_ON 324
#define EL_TIMEGATE_SWITCH_OFF 325
+#define EL_BALLOON 326
+#define EL_BALLOON_SEND_LEFT 327
+#define EL_BALLOON_SEND_RIGHT 328
+#define EL_BALLOON_SEND_UP 329
+#define EL_BALLOON_SEND_DOWN 330
+#define EL_BALLOON_SEND_ANY 331
+
+#define EL_EMC_STEEL_WALL_1 332
+#define EL_EMC_STEEL_WALL_2 333
+#define EL_EMC_STEEL_WALL_3 334
+#define EL_EMC_STEEL_WALL_4 335
+#define EL_EMC_WALL_1 336
+#define EL_EMC_WALL_2 337
+#define EL_EMC_WALL_3 338
+#define EL_EMC_WALL_4 339
+#define EL_EMC_WALL_5 340
+#define EL_EMC_WALL_6 341
+#define EL_EMC_WALL_7 342
+#define EL_EMC_WALL_8 343
+
+
/* "real" (and therefore drawable) runtime elements */
+#define EL_FIRST_RUNTIME_EL 500
+
#define EL_SIEB_LEER 500
#define EL_SIEB2_LEER 501
#define EL_SIEB_VOLL 502
** 512 - 767: graphics from "RocksHeroes"
** 768 - 1023: graphics from "RocksSP"
** 1024 - 1279: graphics from "RocksDC"
+** 1280 - 1535: graphics from "RocksMore"
*/
#define GFX_START_ROCKSSCREEN 0
#define GFX_END_ROCKSSP 1023
#define GFX_START_ROCKSDC 1024
#define GFX_END_ROCKSDC 1279
+#define GFX_START_ROCKSMORE 1280
+#define GFX_END_ROCKSMORE 1535
-#define NUM_TILES 1280
+#define NUM_TILES 1536
/* graphics from "RocksScreen" */
/* Zeile 0 (0) */
#define GFX_SWITCHGATE_OPEN (GFX_START_ROCKSDC + 5 * DC_PER_LINE + 12)
#define GFX_TIMEGATE_CLOSED (GFX_START_ROCKSDC + 6 * DC_PER_LINE + 8)
#define GFX_TIMEGATE_OPEN (GFX_START_ROCKSDC + 6 * DC_PER_LINE + 12)
+#define GFX_BALLOON_SEND_LEFT (GFX_START_ROCKSDC + 7 * DC_PER_LINE + 8)
+#define GFX_BALLOON_SEND_RIGHT (GFX_START_ROCKSDC + 7 * DC_PER_LINE + 9)
+#define GFX_BALLOON_SEND_UP (GFX_START_ROCKSDC + 7 * DC_PER_LINE + 10)
+#define GFX_BALLOON_SEND_DOWN (GFX_START_ROCKSDC + 7 * DC_PER_LINE + 11)
+#define GFX_BALLOON (GFX_START_ROCKSDC + 7 * DC_PER_LINE + 12)
+#define GFX_BALLOON_SEND_ANY (GFX_START_ROCKSDC + 0 * DC_PER_LINE + 15)
+
+#define GFX_EMC_STEEL_WALL_1 (GFX_START_ROCKSDC + 0 * DC_PER_LINE + 14)
+#define GFX_EMC_STEEL_WALL_2 (GFX_START_ROCKSDC + 0 * DC_PER_LINE + 14)
+#define GFX_EMC_STEEL_WALL_3 (GFX_START_ROCKSDC + 0 * DC_PER_LINE + 14)
+#define GFX_EMC_STEEL_WALL_4 (GFX_START_ROCKSDC + 0 * DC_PER_LINE + 14)
+#define GFX_EMC_WALL_1 (GFX_START_ROCKSDC + 6 * DC_PER_LINE + 13)
+#define GFX_EMC_WALL_2 (GFX_START_ROCKSDC + 6 * DC_PER_LINE + 14)
+#define GFX_EMC_WALL_3 (GFX_START_ROCKSDC + 6 * DC_PER_LINE + 15)
+#define GFX_EMC_WALL_4 (GFX_START_ROCKSDC + 1 * DC_PER_LINE + 14)
+#define GFX_EMC_WALL_5 (GFX_START_ROCKSDC + 1 * DC_PER_LINE + 15)
+#define GFX_EMC_WALL_6 (GFX_START_ROCKSDC + 2 * DC_PER_LINE + 14)
+#define GFX_EMC_WALL_7 (GFX_START_ROCKSDC + 2 * DC_PER_LINE + 15)
+#define GFX_EMC_WALL_8 (GFX_START_ROCKSDC + 1 * DC_PER_LINE + 14)
+
+/* graphics from "RocksMore" */
+#define GFX_ARROW_BLUE_LEFT (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 0)
+#define GFX_ARROW_BLUE_RIGHT (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 1)
+#define GFX_ARROW_BLUE_UP (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 2)
+#define GFX_ARROW_BLUE_DOWN (GFX_START_ROCKSMORE + 0 * MORE_PER_LINE + 3)
+#define GFX_ARROW_RED_LEFT (GFX_START_ROCKSMORE + 1 * MORE_PER_LINE + 0)
+#define GFX_ARROW_RED_RIGHT (GFX_START_ROCKSMORE + 1 * MORE_PER_LINE + 1)
+#define GFX_ARROW_RED_UP (GFX_START_ROCKSMORE + 1 * MORE_PER_LINE + 2)
+#define GFX_ARROW_RED_DOWN (GFX_START_ROCKSMORE + 1 * MORE_PER_LINE + 3)
+#define GFX_SCROLLBAR_BLUE (GFX_START_ROCKSMORE + 2 * MORE_PER_LINE + 0)
+#define GFX_SCROLLBAR_RED (GFX_START_ROCKSMORE + 2 * MORE_PER_LINE + 1)
/* graphics from "RocksFont" */
#define GFX_CHAR_START (GFX_START_ROCKSFONT)
#define GFX_DX_UNKNOWN_15 GFX_CHAR_FRAGE
#define GFX_DX_UNKNOWN_42 GFX_CHAR_FRAGE
+
/* the names of the sounds */
#define SND_ALCHEMY 0
#define SND_AMOEBE 1
/* font types */
#define FS_SMALL 0
#define FS_BIG 1
+#define FS_MEDIUM 2
/* font colors */
#define FC_RED 0
#define FC_BLUE 1