+struct SetupEditorCascadeInfo
+{
+ boolean el_bd;
+ boolean el_em;
+ boolean el_emc;
+ boolean el_rnd;
+ boolean el_sb;
+ boolean el_sp;
+ boolean el_dc;
+ boolean el_dx;
+ boolean el_mm;
+ boolean el_df;
+ boolean el_chars;
+ boolean el_steel_chars;
+ boolean el_ce;
+ boolean el_ge;
+ boolean el_ref;
+ boolean el_user;
+ boolean el_dynamic;
+};
+
+struct SetupShortcutInfo
+{
+ Key save_game;
+ Key load_game;
+ Key toggle_pause;
+
+ Key focus_player[MAX_PLAYERS];
+ Key focus_player_all;
+
+ Key tape_eject;
+ Key tape_extra;
+ Key tape_stop;
+ Key tape_pause;
+ Key tape_record;
+ Key tape_play;
+
+ Key sound_simple;
+ Key sound_loops;
+ Key sound_music;
+
+ Key snap_left;
+ Key snap_right;
+ Key snap_up;
+ Key snap_down;
+};
+
+struct SetupSystemInfo
+{
+ char *sdl_renderdriver;
+ char *sdl_videodriver;
+ char *sdl_audiodriver;
+ int audio_fragment_size;
+};
+
+struct SetupInternalInfo
+{
+ char *program_title;
+ char *program_version;
+ char *program_author;
+ char *program_email;
+ char *program_website;
+ char *program_copyright;
+ char *program_company;
+
+ char *program_icon_file;
+
+ char *default_graphics_set;
+ char *default_sounds_set;
+ char *default_music_set;
+
+ char *fallback_graphics_file;
+ char *fallback_sounds_file;
+ char *fallback_music_file;
+
+ char *default_level_series;
+
+ int default_window_width;
+ int default_window_height;
+
+ boolean choose_from_top_leveldir;
+ boolean show_scaling_in_title;
+ boolean create_user_levelset;
+
+ boolean menu_game;
+ boolean menu_engines;
+ boolean menu_editor;
+ boolean menu_graphics;
+ boolean menu_sound;
+ boolean menu_artwork;
+ boolean menu_input;
+ boolean menu_touch;
+ boolean menu_shortcuts;
+ boolean menu_exit;
+ boolean menu_save_and_exit;
+};
+
+struct SetupDebugInfo
+{
+ int frame_delay[10];
+ Key frame_delay_key[10];
+ boolean frame_delay_use_mod_key;
+ boolean frame_delay_game_only;
+ boolean show_frames_per_second;
+ int xsn_mode;
+ int xsn_percent;
+};
+
+struct SetupInfo
+{
+ char *player_name;
+
+ boolean multiple_users;
+
+ boolean sound;
+ boolean sound_loops;
+ boolean sound_music;
+ boolean sound_simple;
+ boolean toons;
+ boolean scroll_delay;
+ boolean forced_scroll_delay;
+ int scroll_delay_value;
+ char *engine_snapshot_mode;
+ int engine_snapshot_memory;
+ boolean fade_screens;
+ boolean autorecord;
+ boolean show_titlescreen;
+ boolean quick_doors;
+ boolean team_mode;
+ boolean handicap;
+ boolean skip_levels;
+ boolean increment_levels;
+ boolean auto_play_next_level;
+ boolean count_score_after_game;
+ boolean show_scores_after_game;
+ boolean time_limit;
+ boolean fullscreen;
+ int window_scaling_percent;
+ char *window_scaling_quality;
+ char *screen_rendering_mode;
+ char *vsync_mode;
+ boolean ask_on_escape;
+ boolean ask_on_escape_editor;
+ boolean ask_on_game_over;
+ boolean quick_switch;
+ boolean input_on_focus;
+ boolean prefer_aga_graphics;
+ boolean prefer_lowpass_sounds;
+ boolean prefer_extra_panel_items;
+ boolean game_speed_extended;
+ int game_frame_delay;
+ boolean sp_show_border_elements;
+ boolean small_game_graphics;
+ boolean show_snapshot_buttons;
+
+ char *graphics_set;
+ char *sounds_set;
+ char *music_set;
+ int override_level_graphics; // not boolean -- can also be "AUTO"
+ int override_level_sounds; // not boolean -- can also be "AUTO"
+ int override_level_music; // not boolean -- can also be "AUTO"
+
+ int volume_simple;
+ int volume_loops;
+ int volume_music;
+
+ boolean network_mode;
+ int network_player_nr;
+ char *network_server_hostname;
+
+ struct SetupAutoSetupInfo auto_setup;
+ struct SetupLevelSetupInfo level_setup;
+
+ struct SetupEditorInfo editor;
+ struct SetupEditorCascadeInfo editor_cascade;
+ struct SetupShortcutInfo shortcut;
+ struct SetupInputInfo input[MAX_PLAYERS];
+ struct SetupTouchInfo touch;
+ struct SetupSystemInfo system;
+ struct SetupInternalInfo internal;
+ struct SetupDebugInfo debug;
+
+ struct OptionInfo options;
+};
+
+struct UserInfo
+{
+ int nr;
+};
+
+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 *subdir; // 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 *year; // optional year of creation for levels or artwork
+
+ char *program_title; // optional alternative text for program title
+ char *program_copyright; // optional alternative text for program copyright
+ char *program_company; // optional alternative text for program company
+
+ char *imported_from; // optional comment for imported levels or artwork
+ char *imported_by; // optional comment for imported levels or artwork
+ char *tested_by; // optional comment to name people who tested a set
+
+ char *graphics_set_ecs; // special EMC custom graphics set (ECS graphics)
+ char *graphics_set_aga; // special EMC custom graphics set (AGA graphics)
+ char *graphics_set; // optional custom graphics set (level tree only)
+ char *sounds_set_default; // default EMC custom sounds set
+ char *sounds_set_lowpass; // special EMC custom sounds set (lowpass filter)
+ 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)
+
+ char *level_filename; // filename of level file (for packed level file)
+ char *level_filetype; // type of levels in level directory or level file
+
+ char *special_flags; // flags for special actions performed on level file
+
+ 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 latest_engine;// force level set to use the latest game engine
+
+ boolean level_group; // directory contains more level series directories
+ boolean parent_link; // entry links back to parent directory
+ boolean in_user_dir; // user defined levels are stored in home directory
+ boolean user_defined; // levels in user directory and marked as "private"
+ boolean readonly; // readonly levels can not be changed with editor
+ boolean handicap; // level set has no handicap when set to "false"
+ boolean skip_levels; // levels can be skipped when set to "true"
+
+ boolean use_emc_tiles;// use (swapped) V5/V6 EMC tiles when set to "true"
+
+ 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
+
+ char *infotext; // optional text to describe the tree type (headline)
+};
+
+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 ValueTextInfo
+{
+ int value;
+ char *text;
+};
+
+struct StringValueTextInfo
+{
+ char *value;
+ char *text;
+};
+
+struct ConfigInfo
+{
+ char *token;
+ char *value;
+};
+
+struct ConfigTypeInfo
+{
+ char *token;
+ char *value;
+ int type;
+};
+
+struct TokenIntPtrInfo
+{
+ char *token;
+ int *value;
+};
+
+struct FileInfo
+{
+ char *token;
+
+ char *default_filename;
+ char *filename;
+
+ char **default_parameter; // array of file parameters
+ char **parameter; // array of file parameters
+
+ boolean redefined;
+ boolean fallback_to_default;
+ boolean default_is_cloned;
+};
+
+struct SetupFileList
+{
+ char *token;
+ char *value;
+
+ struct SetupFileList *next;
+};
+
+struct ListNodeInfo
+{
+ char *source_filename; // primary key for node list
+ int num_references;
+};
+
+struct PropertyMapping
+{
+ int base_index;
+ int ext1_index;
+ int ext2_index;
+ int ext3_index;
+
+ int artwork_index;
+};
+
+struct ArtworkListInfo
+{
+ int type; // type of artwork
+
+ int num_file_list_entries;
+ int num_dynamic_file_list_entries;
+ struct FileInfo *file_list; // static artwork file array
+ struct FileInfo *dynamic_file_list; // dynamic artwrk file array
+
+ int num_suffix_list_entries;
+ struct ConfigTypeInfo *suffix_list; // parameter suffixes array
+
+ int num_base_prefixes;
+ int num_ext1_suffixes;
+ int num_ext2_suffixes;
+ int num_ext3_suffixes;
+ char **base_prefixes; // base token prefixes array
+ char **ext1_suffixes; // property suffixes array 1
+ char **ext2_suffixes; // property suffixes array 2
+ char **ext3_suffixes; // property suffixes array 3
+
+ int num_ignore_tokens;
+ char **ignore_tokens; // file tokens to be ignored
+
+ int num_property_mapping_entries;
+ struct PropertyMapping *property_mapping; // mapping token -> artwork
+
+ int sizeof_artwork_list_entry;
+
+ struct ListNodeInfo **artwork_list; // static artwork node array
+ struct ListNodeInfo **dynamic_artwork_list; // dynamic artwrk node array
+ struct ListNode *content_list; // dynamic artwork node list
+
+ void *(*load_artwork)(char *); // constructor function
+ void (*free_artwork)(void *); // destructor function
+};
+
+struct XY
+{
+ int x, y;
+};
+
+struct XYTileSize
+{
+ int x, y;
+ int tile_size;
+};
+
+struct Rect
+{
+ int x, y;
+ int width, height;
+};
+
+struct RectWithBorder
+{
+ int x, y;
+ int width, height;
+ int min_width, min_height;
+ int max_width, max_height;
+ int margin_left;
+ int margin_right;
+ int margin_top;
+ int margin_bottom;
+ int border_left;
+ int border_right;
+ int border_top;
+ int border_bottom;
+ int border_size;
+ int align_size;
+ int align, valign;
+};
+
+struct MenuPosInfo
+{
+ int x, y;
+ int width, height;
+ int align, valign;
+};
+
+struct DoorPartPosInfo
+{
+ int x, y;
+ int step_xoffset;
+ int step_yoffset;
+ int step_delay;
+ int start_step;
+ int start_step_opening;
+ int start_step_closing;
+ boolean draw_masked;
+ int sort_priority;
+};
+
+struct TextPosInfo
+{
+ int x, y;
+ int xoffset; // special case for tape date and time
+ int xoffset2; // special case for tape date
+ int yoffset; // special case for list of preview players
+ int width, height;
+ int align, valign;
+ int size; // also used for suffix ".digits"
+ int font, font_alt;
+ boolean draw_masked;
+ boolean draw_player; // special case for network player buttons
+ int sort_priority; // also used for suffix ".draw_order"
+ int id;
+
+ int direction; // needed for panel time/health graphics
+ int class; // needed for panel time/health graphics
+ int style; // needed for panel time/health graphics
+
+ int tile_size; // special case for list of network players
+ int border_size; // special case for list of preview players
+ int vertical; // special case for list of preview players
+
+ boolean redefined; // redefined by custom artwork
+};
+
+struct MouseActionInfo
+{
+ int lx, ly;
+ int button;
+ int button_hint;
+};
+
+struct LevelSetInfo
+{
+ int music[MAX_LEVELS];
+
+ char *identifier;
+ int level_nr;
+};
+
+struct LevelStats
+{
+ int played;
+ int solved;
+};
+
+
+// ============================================================================
+// exported variables
+// ============================================================================