+
+ int ex, ey;
+ int exsize, eysize;
+
+ int win_xsize, win_ysize;
+
+ int draw_deactivation_mask;
+ int draw_background_mask;
+
+ Bitmap *field_save_buffer;
+
+ Bitmap *background_bitmap;
+ int background_bitmap_mask;
+
+ Bitmap *fade_bitmap_backup;
+ Bitmap *fade_bitmap_source;
+ Bitmap *fade_bitmap_target;
+ Bitmap *fade_bitmap_black;
+
+ int fade_border_source_status;
+ int fade_border_target_status;
+ Bitmap *masked_border_bitmap_ptr;
+
+ Bitmap *final_screen_bitmap;
+
+ boolean clipping_enabled;
+ int clip_x, clip_y;
+ int clip_width, clip_height;
+
+ boolean override_level_graphics;
+ boolean override_level_sounds;
+ boolean override_level_music;
+
+ boolean draw_init_text;
+
+ int num_fonts;
+ struct FontBitmapInfo *font_bitmap_info;
+ int (*select_font_function)(int);
+ int (*get_font_from_token_function)(char *);
+
+ int anim_random_frame;
+
+ void (*draw_busy_anim_function)(void);
+ void (*draw_global_anim_function)(int, int);
+ void (*draw_global_border_function)(int);
+ void (*draw_tile_cursor_function)(int);
+
+ int cursor_mode;
+ int cursor_mode_override;
+ int cursor_mode_final;
+ int mouse_x, mouse_y;
+};
+
+struct TileCursorInfo
+{
+ boolean enabled; // tile cursor generally enabled or disabled
+ boolean active; // tile cursor activated (depending on game)
+ boolean moving; // tile cursor moving to target position
+
+ int xpos, ypos; // tile cursor level playfield position
+ int x, y; // tile cursor current screen position
+ int target_x, target_y; // tile cursor target screen position
+
+ int sx, sy; // tile cursor screen start position
+};
+
+struct OverlayInfo
+{
+ boolean enabled; // overlay generally enabled or disabled
+ boolean active; // overlay activated (depending on game mode)
+
+ boolean show_grid;
+
+ int grid_xsize;
+ int grid_ysize;
+
+ char grid_button[MAX_GRID_XSIZE][MAX_GRID_YSIZE];
+ char grid_button_highlight;
+
+ int grid_button_action;
+};
+
+struct JoystickInfo
+{
+ int status;
+ int nr[MAX_PLAYERS]; // joystick number for each player
+};
+
+struct SetupJoystickInfo
+{
+ char *device_name; // device name of player's joystick
+
+ int xleft, xmiddle, xright;
+ int yupper, ymiddle, ylower;
+ int snap, drop;
+};
+
+struct SetupKeyboardInfo
+{
+ Key left, right, up, down;
+ Key snap, drop;
+};
+
+struct SetupTouchInfo
+{
+ char *control_type;
+ int move_distance;
+ int drop_distance;
+
+ int grid_xsize[2];
+ int grid_ysize[2];
+
+ char grid_button[2][MAX_GRID_XSIZE][MAX_GRID_YSIZE];
+
+ int transparency; // in percent (0 == opaque, 100 == invisible)
+ boolean draw_outlined;
+ boolean draw_pressed;
+
+ boolean grid_initialized;
+};
+
+struct SetupInputInfo
+{
+ boolean use_joystick;
+ struct SetupJoystickInfo joy;
+ struct SetupKeyboardInfo key;
+};
+
+struct SetupEditorInfo
+{
+ boolean el_boulderdash;
+ boolean el_emerald_mine;
+ boolean el_emerald_mine_club;
+ boolean el_more;
+ boolean el_sokoban;
+ boolean el_supaplex;
+ boolean el_diamond_caves;
+ boolean el_dx_boulderdash;
+
+ boolean el_mirror_magic;
+ boolean el_deflektor;
+
+ boolean el_chars;
+ boolean el_steel_chars;
+
+ boolean el_classic;
+ boolean el_custom;
+ boolean el_user_defined;
+ boolean el_dynamic;
+
+ boolean el_headlines;
+
+ boolean el_by_game;
+ boolean el_by_type;
+
+ boolean show_element_token;
+
+ boolean use_template_for_new_levels;
+};
+
+struct SetupAutoSetupInfo
+{
+ int editor_zoom_tilesize;
+};
+
+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_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_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;
+};
+
+struct SetupInfo
+{
+ char *player_name;
+
+ boolean sound;
+ boolean sound_loops;
+ boolean sound_music;
+ boolean sound_simple;
+ boolean toons;
+ boolean scroll_delay;
+ boolean 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 skip_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 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 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;