+
+ boolean draw_deactivation_mask;
+};
+
+struct JoystickInfo
+{
+ int status;
+ int fd[MAX_PLAYERS]; /* file descriptor of player's joystick */
+};
+
+struct SetupJoystickInfo
+{
+ char *device_name; /* device name of player's joystick */
+
+ int xleft, xmiddle, xright;
+ int yupper, ymiddle, ylower;
+ int snap;
+ int bomb;
+};
+
+struct SetupKeyboardInfo
+{
+ Key left;
+ Key right;
+ Key up;
+ Key down;
+ Key snap;
+ Key bomb;
+};
+
+struct SetupInputInfo
+{
+ boolean use_joystick;
+ struct SetupJoystickInfo joy;
+ struct SetupKeyboardInfo key;
+};
+
+struct SetupShortcutInfo
+{
+ Key save_game;
+ Key load_game;
+ Key toggle_pause;
+};
+
+struct SetupInfo
+{
+ char *player_name;
+
+ boolean sound;
+ boolean sound_loops;
+ boolean sound_music;
+ boolean sound_simple;
+ boolean toons;
+ boolean double_buffering;
+ boolean direct_draw; /* !double_buffering (redundant!) */
+ boolean scroll_delay;
+ boolean soft_scrolling;
+ boolean fading;
+ boolean autorecord;
+ boolean quick_doors;
+ boolean team_mode;
+ boolean handicap;
+ boolean time_limit;
+ boolean fullscreen;
+ boolean ask_on_escape;
+
+ char *graphics_set;
+ char *sounds_set;
+ char *music_set;
+ boolean override_level_graphics;
+ boolean override_level_sounds;
+ boolean override_level_music;
+
+ struct SetupShortcutInfo shortcut;
+ struct SetupInputInfo input[MAX_PLAYERS];
+};
+
+#define TREE_TYPE_GENERIC 0
+#define TREE_TYPE_GRAPHICS_DIR 1
+#define TREE_TYPE_SOUNDS_DIR 2
+#define TREE_TYPE_MUSIC_DIR 3
+#define TREE_TYPE_LEVEL_DIR 4
+
+#define ARTWORK_TYPE_GRAPHICS TREE_TYPE_GRAPHICS_DIR
+#define ARTWORK_TYPE_SOUNDS TREE_TYPE_SOUNDS_DIR
+#define ARTWORK_TYPE_MUSIC TREE_TYPE_MUSIC_DIR
+
+struct TreeInfo
+{
+ struct TreeInfo **node_top; /* topmost node in tree */
+ struct TreeInfo *node_parent; /* parent level directory info */
+ struct TreeInfo *node_group; /* level group sub-directory info */
+ struct TreeInfo *next; /* next level series structure node */
+
+ int cl_first; /* internal control field for setup screen */
+ int cl_cursor; /* internal control field for setup screen */
+
+ int type; /* type of tree content */
+
+ /* fields for "type == TREE_TYPE_LEVEL_DIR" */
+
+ char *filename; /* tree info sub-directory basename (may be ".") */
+ char *fullpath; /* complete path relative to tree base directory */
+ char *basepath; /* absolute base path of tree base directory */
+ char *identifier; /* identifier string for configuration files */
+ char *name; /* tree info name, as displayed in selection menues */
+ char *name_sorting; /* optional sorting name for correct name sorting */
+ char *author; /* level or artwork author name */
+ char *imported_from; /* optional comment for imported levels or artwork */
+
+ char *graphics_set; /* optional custom graphics set (level tree only) */
+ char *sounds_set; /* optional custom sounds set (level tree only) */
+ char *music_set; /* optional custom music set (level tree only) */
+ char *graphics_path; /* path to optional custom graphics set (level only) */
+ char *sounds_path; /* path to optional custom sounds set (level only) */
+ char *music_path; /* path to optional custom music set (level only) */
+
+ 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 */
+};
+
+typedef struct TreeInfo TreeInfo;
+typedef struct TreeInfo LevelDirTree;
+typedef struct TreeInfo ArtworkDirTree;
+typedef struct TreeInfo GraphicsDirTree;
+typedef struct TreeInfo SoundsDirTree;
+typedef struct TreeInfo MusicDirTree;
+
+struct ArtworkInfo
+{
+ GraphicsDirTree *gfx_first;
+ GraphicsDirTree *gfx_current;
+ SoundsDirTree *snd_first;
+ SoundsDirTree *snd_current;
+ MusicDirTree *mus_first;
+ MusicDirTree *mus_current;
+
+ char *gfx_current_identifier;
+ char *snd_current_identifier;
+ char *mus_current_identifier;
+};
+
+struct ConfigInfo
+{
+ char *token;
+ char *value;
+};
+
+struct FileInfo
+{
+ char *token;
+
+ char *default_filename;
+ char *filename;
+
+ int *default_parameter; /* array of file parameters */
+ int *parameter; /* array of file parameters */
+};
+
+struct ListNodeInfo
+{
+ char *source_filename; /* primary key for node list */
+ int num_references;
+};
+
+struct ArtworkListInfo
+{
+ int type; /* type of artwork */
+
+ int num_file_list_entries;
+ int num_suffix_list_entries;
+
+ struct FileInfo *file_list; /* static artwork file array */
+ char **suffix_list; /* parameter suffixes array */
+
+ struct ListNodeInfo **artwork_list; /* static artwork node array */
+
+ struct ListNode *content_list; /* dynamic artwork node list */
+
+ void *(*load_artwork)(char *); /* constructor function */
+ void (*free_artwork)(void *); /* destructor function */