# Configuration file for MegaZeux 2.93d
# June 9th, 2025

# Comments begin with #. Whitespace is ignored. Empty lines are
# ignored as well.
# Options are set in the following format:
# option = value
# If value is not given, then it is assumed to be 1.
# You can include spaces in values by escaping them with \s.
# (see the default macros for examples)
# For directories, use forward slashes (/) instead of back-slashes,
# as they work more reliably.
# Note that even if the option is given to change the values
# in MZX, this text file will NOT be modified, and hence the
# values will revert to what they are here when you restart MZX.

# NOTE: All of the options below have sane defaults. Changes to
# these options will only take effect if you uncomment them.

# In many cases, the current default value has been written in,
# but this is not guaranteed (for example with video_output).

### Video options ###

# Rendering engine to use to display MegaZeux. The simplest (but not
# necessarily fastest) renderer is "software". Due to MegaZeux's strange
# default resolution (640x350), many video cards have difficulty
# supporting it correctly in fullscreen mode.
#
# The software renderer is the fallback renderer if another renderer fails
# to initialize, and has generally adequate performance. Additionally, it
# supports 8 bit indexed color and requires no overlay or 3D hardware support.
# If you're on a slow computer or a handheld portable, definitely use this.
# To use it, uncomment the line below.

# video_output = software

# A much faster option for almost anything with a graphics card is the
# "softscale" renderer. This renderer uses SDL2's built-in rendering API
# to stream the output of the software renderer to a hardware-accelerated
# texture (if available) for extremely fast scaling and display. This (or
# "glslscale", see below) is usually the fastest scaling renderer for devices
# using integrated graphics e.g. Intel HD, phones, tablets, Raspberry Pi.
#
# Either 32 bit or 16 bit rendering can be enabled (see force_bpp), but
# 32 bit is recommended. Nearest neighbor or linear scaling will be chosen
# automatically based on the scaling ratio and size of the window. This
# renderer is a replacement for the YUV overlay renderer.

# video_output = softscale

# The SDL renderer API used by softscale will use the following underlying
# drivers by default: Direct3D (Windows), Metal (Mac OS 10.11+), or OpenGL.
# To request a different driver, the following option can be changed.
# See https://wiki.libsdl.org/SDL_HINT_RENDER_DRIVER for more info.

# sdl_render_driver = opengl

# If you built MegaZeux yourself with SDL 1.2 support enabled, the YUV overlay
# renderer is available instead of softscale. This renderer is good if you
# want scaling and can't use OpenGL. The quality of scaling is hardware
# dependent and often looks bad at non-integer scaling.
#
# Uncomment either of the lines below (but not both) if you want to try it.
# The "overlay2" mode is cheaper, but will be less accurate due to the use
# of chroma subsampling instead of a full YUV encode. The "overlay2" mode
# also does not support newer graphical features such as unbound sprites.
# If uncommented for SDL2 builds, these lines will enable softscale instead.

# video_output = overlay1
# video_output = overlay2

# An OpenGL renderer is a good choice if you want a configurable, cheap
# renderer and have a video card. This method provides the highest quality
# scaler and should work on all platforms with OpenGL or OpenGL ES support.
#
# MegaZeux provides two fixed-function scalers. The first renders the whole
# screen to a texture and uses OpenGL to stretch it. This method is generally
# fast but may be slow on very old PCs. This renderer is called "opengl1".
#
# The second fixed-function scaler draws entirely in OpenGL by remapping the
# character sets to a texture. This yields a performance increase for some
# games, but at the cost of compatibility. This renderer is called "opengl2".
#
# MegaZeux also provides a scaler for programmable hardware. If you have
# OpenGL 2.0 or OpenGL ES 2.0 capable hardware, you should use this renderer.
# This renderer uses GLSL shaders to render and scale the screen, and several
# different scaling shaders can be selected at runtime using the settings menu.
# This renderer is called "glsl". It is the highest quality and best performing
# renderer for most PCs with a dedicated video card.
#
# A variant of the GLSL renderer called "glslscale" is available that uses the
# software renderer internally with GLSL shader scaling. This performs better
# than the original GLSL renderer on PCs and other devices that don't have a
# video card, and is currently the default renderer for most platforms.
#
# Uncomment ONE of the lines below:

# video_output = opengl1
# video_output = opengl2
# video_output = glsl
# video_output = glslscale

# The scaling renderers can be configured to preserve aspect ratio where
# possible in window and fullscreen modes. The supported ratios are
# "classic" (4:3) and "modern" (64:35). The ratio type "stretch" disables
# any aspect ratio preservation. The default is "modern" (except for consoles
# where "classic" makes more sense, including the 3DS, NDS, and Wii).

# video_ratio = modern

# OpenGL will, by default, linearly interpolate pixels as it upscales
# to your requested resolution. This creates an output with more "blur",
# which some people dislike. If you are using a sufficiently high target
# resolution, preferably an integer multiple of 640x350, you may find
# "nearest" more pleasing, which will have no "blur". The default
# setting is "linear".

# gl_filter_method = nearest

# The GLSL renderer uses scaling shaders to determine the scaling method
# instead of gl_filter_method. The default shader to be loaded when MZX
# starts is assets/glsl/scalers/semisoft.frag.
# Change this config option to specify a different shader to load on startup.
# For a list of valid options, see the F2 menu or the GLSL scalers folder.
# Do not include an extension.

# gl_scaling_shader = semisoft

# Some OpenGL driver settings may default vertical sync on, which looks
# visually better on CRTs but can cause "speed 1" to run noticably slower.
# For consistency with other renderers, and for correctness, MegaZeux will
# attempt to disable vsync when gl_vsync is the default value of 0.
# Conversely, a value of 1 forces MegaZeux to override the driver settings
# and enable vsync, which decreases tearing. A value of -1 can be used to
# tell MegaZeux to obey the driver default, which is unlikely to be useful.

# gl_vsync = 1

# Resolution MZX uses for fullscreen. With the software renderer, this
# will center MZX on the screen, and will not scale it. All other renderers
# listed above will attempt to scale the screen to match this resolution.
# Best results are obtained by using your current desktop resolution or a
# well-supported resolution (like 1280,720) in conjunction with the modern
# aspect ratio.
#
# Give in x,y format. Use this if the defaults are giving you problems,
# especially in the software renderer.
# The current desktop resolution is the default for all scalable renderers;
# "640,480" is the default for the software renderer.

# fullscreen_resolution = 640,480

# If this setting is enabled, instead of regular fullscreen MZX will create
# a borderless window with the current desktop resolution when fullscreen
# is enabled. This overrides fullscreen_resolution. Disabled by default
# except on macOS, where it is enabled by default.

# fullscreen_windowed = 0

# The resolution MZX uses in a window. If your renderer supports
# it, MZX will be scaled to fit this specification. Otherwise
# the setting is ignored.

# window_resolution = 640,350

# Use this to toggle whether MZX can be scaled while in window
# mode, if your renderer supports it. If you use a renderer which
# supports scaling, but don't want to accidentally scale it (which
# may distort the image), you can switch this off here.

# enable_resizing = 1

# MZX is limited internally to 8bit colour, but it can upmix its
# rendering to 32bit if your video card has difficulty with 8bit
# resolutions. Using 32bit colour is slower, but not by much.
#
# NOTE: This option may be ignored by one or more of the above renderers.
# force_bpp is guaranteed to apply to "software". This might not always be
# useful, however; SDL 2 picks a native window pixel format automatically
# and non-native BPPs are handled with an extra surface blit. The "softscale"
# renderer can use this setting to select different native pixel formats.
#
# Valid settings are usually '8', '16', or '32'; a value of '0' or 'auto'
# will instruct the renderer to automatically pick the best available
# BPP (if applicable). Default is 'auto'.

# force_bpp = auto

# Whether MZX should start up in fullscreen or not.
# Press ctrl-alt-enter to toggle fullscreen as MZX runs.

# fullscreen = 1

# Whether MZX should disable the screensaver (or similar) while running.
# By default, MZX will instruct SDL to leave the screensaver on. This setting
# currently only affects SDL 2+ ports.

# disable_screensaver = 0

# MZX can optionally display the text cursor to hint at the currently selected
# UI element when applicable. Valid settings are 0 or "off" (doesn't display
# or update the cursor position), 1 or "hidden" (doesn't display, but updates
# the cursor position for platforms with hardware cursors), "underline"
# (displays the underline cursor), and "solid" (displays the filled cursor).
# The default value is 1.

# dialog_cursor_hints = 1

# Whether MZX should allow a screenshot to be taken when F12 is pressed.
# Defaults to enabled.

# allow_screenshots = 1

### Audio options ###

# Sampling rate to output audio at. Higher values will sound
# better but use more resources and may not be supported by
# your audio card/drivers. Typical values include 22050, 44100,
# and 48000. If your card supports it you might get away with
# 96000, or even 192000.

# audio_sample_rate = 44100

# Audio buffer size in sample frames. Setting this to lower can improve
# latency, so audio will be heard sooner after it is set to be
# changed. It is also possible to change PC speaker effects more
# rapidly with lower values. Lower buffer sizes need more CPU power
# to process. 2048 is adequate for PC speaker playback every
# command at speed 4.

# audio_buffer_samples = 1024

# Number of audio channels. The normal value here is 2 for stereo, but
# in rare cases, 1 (mono) may be preferable. This setting is ignored
# by most ports and for some DOS sound devices. MegaZeux currently
# does not support any type of surround sound.

# audio_output_channels = 2

# Allow music to be sampled at higher precision. Increases CPU
# usage but increases audio quality as well. (Modplug only.)

# enable_oversampling = 0

# Set global resample mode. This affects how OGGs, SAMs, WAVs, RADs, and
# frequency shifted modules sound. Choices are:
# none (fastest, poor quality)
# linear (fast, good quality)
# cubic (slow, great quality)

# resample_mode = linear

# Set resample mode for xmp (or Modplug, depending on build settings).
# This affects how modules sound. Choices are:
# none (fastest, poor quality)
# linear (fast, good quality)
# cubic (slow, great quality)
# fir (very slow, excellent quality) (Modplug only)

# module_resample_mode = cubic

# Whether music/samples should be played or not.
# Does not include PC speaker effects.

# music_on = 1

# Whether PC speaker effects should be played or not.

# pc_speaker_on = 1

# Volume music plays at (0 through 10)

# music_volume = 8

# Volume samples play at (0 through 10)

# sample_volume = 8

# Volume PC speaker SFX play at (0 through 10)

# pc_speaker_volume = 8

# The maximum number of samples that can be played simultaneously.
# Set to -1 for an unlimited number of samples.

# max_simultaneous_samples = -1


### Game options ###

# Name of the directory where MegaZeux should start.

# startup_path = /home/username/MegaZeux

# Name of world file that should be loaded when MZX starts.

# startup_file = caverns.mzx

# Default save file name given when you first try to save.

# save_file = saved.sav

# Speed MZX should start at (1 through 16)

# mzx_speed = 4

# Start in the editor by default

# startup_editor = 1

# Allow the use of editing cheats in regular gameplay. Set to 1
# to enable the cheats for either executable, "mzxrun" to enable
# them for MZXRun only, or to 0 to disable them for both. This
# feature is disabled by default.

# allow_cheats = 0

# Allow MegaZeux to automatically decrypt worlds without confirmation.
# Instead of replacing the world, the world will be decrypted either in
# memory or to a temporary file. Enabled by default.

# auto_decrypt_worlds = 1

# Enable standalone mode. This is a game mode meant to be used
# for packaged standalone MegaZeux games. In standalone mode:
# - ENTER_MENU, ESCAPE_MENU, HELP_MENU, F2_MENU and LOAD_MENU
#   can be used on the title screen to disable these menus.
# - HELP_MENU prevents the help menu from being opened even
#   when other builtin dialogs are open
# - EXIT_GAME can be used on the title screen to exit MegaZeux
# - The default title screen message does not appear
# - PLAY_GAME can be set to 1 to start a game
# - Using ALT-F4, closing the window or using other OS-specific
#   ways of closing an application will exit MZX entirely,
#   without asking for confirmation first
# Standalone mode can only be used from MZXRun.

# standalone_mode = 1

# Enable no titlescreen mode. This mode only works if standalone
# mode is enabled and causes the following:
# - The title screen is skipped and the game begins on the first
#   board.
# - Exiting to the title screen exits MegaZeux

# no_titlescreen = 1

### Board editor options ###

# Whether or not the spacebar can be used to toggle between
# your active buffer and the meta character "SPACE". If you
# set this, it will behave like older MegaZeux versions, but it
# will allow you to overwrite robots, for instance.
#
# If the setting is disabled (the default), replacing params
# will your new buffer will not require a toggle, and robots
# can only be deleted with the Delete key.

# editor_space_toggles = 1

# Whether or not the editor should center the viewport on the
# cursor in tab draw mode. Disabled by default; uncomment the
# following line to enable.

# editor_tab_focuses_view = 1

# Whether or not the editor will load board char sets and
# palettes when the board is changed. Disabled by default.

# editor_load_board_assets = 1

# Whether or not the thing menus (F3-F10) will place an object on
# the board when that object is selected. Enabled by default.

# editor_thing_menu_places = 1

# By default, the show thing keys (e.g. "Shift+F2: Show Robots") will block
# editing until a key or mouse button is pressed, after which they are turned
# off. If this option is set to 1, these keys will instead toggle on until
# the same key is pressed again, another show thing key is pressed, or until
# escape is pressed. This allows scrolling and other editing without having to
# press these keys repeatedly.

# editor_show_thing_toggles = 0

# This option controls the blinking speed when a show thing key is used.
# Lower numbers mean faster blinking; for example, when set to 4 (default),
# the character displayed by the blinking will alternate every 4 frames (~8 Hz).
# When set to 0, no blinking will occur and only the first character will display.

# editor_show_thing_blink_speed = 4

# If this is set to 1 (the default), enter can be used to split
# a line in the robot editor. However, the classic behaviour is
# that enter moves the cursor down a line. If you would like to
# restore the old behaviour, please set this to 0.

# editor_enter_splits = 1

# Set to 0 if you want the board editor to show the hotkey help
# by default.

# board_editor_hide_help = 1

# Set to 1 if you want the palette editor to hide the hotkey help
# when MegaZeux starts (default: don't hide).

# palette_editor_hide_help = 0

# The size of the board, overlay, vlayer, and char editor undo history
# stacks. Valid values are between 0 and 1000. Defaults to 100.

# undo_history_size = 100

# Defaults for new boards. Put these in [filename].editor.cnf to customize
# for each individual game, E.G. caverns.editor.cnf.  Viewport width/height
# must be set before offset, and board width/height must be set before any
# viewport vars.

# Options for the majority of these are 0 or 1, for off and on.
# Options for explosions_leave: space, ash, fire
# Options for saving: enabled, disabled, sensoronly
# Options for overlay: enabled, disabled, static, transparent

# board_default_width = 100
# board_default_height = 100
# board_default_viewport_w = 80
# board_default_viewport_h = 25
# board_default_viewport_x = 0
# board_default_viewport_y = 0
# board_default_can_shoot = 1
# board_default_can_bomb = 1
# board_default_fire_burns_spaces = 0
# board_default_fire_burns_fakes = 1
# board_default_fire_burns_trees = 1
# board_default_fire_burns_brown = 0
# board_default_fire_burns_forever = 0
# board_default_forest_to_floor = 0
# board_default_collect_bombs = 0
# board_default_restart_if_hurt = 0
# board_default_reset_on_entry = 0
# board_default_player_locked_ns = 0
# board_default_player_locked_ew = 0
# board_default_player_locked_att = 0
# board_default_time_limit = 0
# board_default_explosions_leave = ash
# board_default_saving = enabled
# board_default_overlay = enabled
# board_default_charset_path =
# board_default_palette_path =


### Robot editor options ###

# Enable or disable color coding in the editor.
# If color coding is off, ccode_string is used for the entire
# line.

# color_coding_on = 0

# Color codes for various types.
# For colors, use 255 to show a color box.

# ccode_chars = 14
# ccode_colors = 255
# ccode_commands = 15
# ccode_conditions = 15
# ccode_current_line = 11
# ccode_directions = 3
# ccode_equalities = 0
# ccode_extras = 7
# ccode_immediates = 10
# ccode_items = 11
# ccode_params = 2
# ccode_strings = 14
# ccode_things = 11

# Whether or not "extra words" should be displayed.
# For instance, if turned on, a line like "wait 1" will
# become "wait for 1."

# disassemble_extras = 0

# The base numbers should be displayed as. Valid options
# are 10 and 16 (decimal and hexidecimal). Hex numbers are
# prefixed with a dollar sign ($).

# disassemble_base = 16

# Changing this will allow invalid comments to automatically
# be marked to "delete" or "comment" instead of "ignore".
# Don't change this unless you know what you're doing.

# default_invalid_status = ignore

# Single line macros
# These are the traditional MZX macros; they may only
# occupy one line in their definition in this file. They
# correspond to parameter-less macros: when you press
# F6 through F10 the following strings are printed to
# the editor, verbatim. For instance if you set macro_1 to
# * "hello", * "hello" will be inserted every time you
# press F6 in the robot editor.
# The following are the default singe-line macros.

# macro_1 = char\s
# macro_2 = color\s
# macro_3 = goto\s
# macro_4 = send\s
# macro_5 = :\splayershot^

# Extended macros:
# See macro.txt.

# The following is an example extended macro.
# It sets up a sprite. If you find it useful, remove the #'s.

#macro_sprite = Sprite\sSetup
# (number255 spr_num)
# (number255 w, h, rx, ry)
# (number255 cx, cy, cw, ch)
# (number255 x, y)
# set spr!spr_num!_width !w!
# set spr!spr_num!_height !h!
# set spr!spr_num!_refx !rx!
# set spr!spr_num!_refy !ry!
# set spr!spr_num!_cwidth !cw!
# set spr!spr_num!_cheight !ch!
# set spr!spr_num!_cx !cx!
# set spr!spr_num!_cy !cy!
# put !x1! sprite p!#spr_num! !x! !y!

# Whether or not the palette should be reverted to default
# when the robot editor is load. If set, SMZX mode 0 will
# also be enforced.

# robot_editor_default_palette = 0

# Set to 0 if you want the robot editor to show the hotkey help
# and horizontal border by default.

# robot_editor_hide_help = 1


# Backup options

# Backups are save files made in the editor. They will only be made
# while in the main editor, not while in a sub-editor or a dialogue
# box of sorts. Note that this can cause slight pauses while editing,
# as the game saves.
# If you have multiple backups you should check the modified date in
# a console or file properties to determine which was most recently
# modified. The number will not indicate most recently saved.

# How many backups to be made. Set to zero to disable backups.

# backup_count = 3

# How often (in seconds) backups should be made

# backup_interval = 60

# The name of the backup file. If you choose "backup" with 3 backups
# the backups will be named backup1.mzx, backup2.mzx, and backup3.mzx.

# backup_name = backup

# The extension of backup files (keep this .mzx if you want to be able
# to easily load them)

# backup_ext = .mzx


# Joystick options

# It is possible to emulate key presses using a joystick. This can be
# achieved with the following config options globally or (for options
# starting with "joyX" only) on a per-game basis. To configure joysticks
# for a particular game, place the applicable settings in a file called
# [game].cnf (e.g. "caverns.cnf" is the settings file for "caverns.mzx").
# This will configure joysticks for that world and all saves loaded from
# that world only. Games utilizing swaps may require multiple .cnf files.

# Each joystick in MegaZeux is assigned a number between 1 and 16. When
# a joystick is detected, it is given the lowest available number, so
# typically the joystick you are using is joystick 1. When multiple
# joysticks are plugged in, you may have to experiment to determine which
# joystick is which.

# The old method for mapping joystick controls is to manually assign axes,
# buttons, and/or a POV hat to keys to simulate keypresses. While this is no
# longer recommended, the settings for this are

# joyXbuttonY = A
# joyXaxisY = A, B
# joyXhat = A, B, C, D

# where X is the number of the joystick, Y is the number of the button or axis,
# and A, B, C, and D are any of the following:
#
# 1) a number representing an internal MZX keycode (see keycodes.html);
# 2) 'key_NAME' (without quotes), representing the key NAME (see keycodes.html);
# 3) or 'act_NAME' (without quotes), representing the action NAME (see below).

# The threshold to trigger a joystick axis press can be globally defined with
# the setting

# joy_axis_threshold = 10000

# where lower values (0 minimum) will press the mapped key with less
# movement and higher values (32767 maximum) will press the mapped key
# with more movement.

# As of MegaZeux 2.92, it is also possible to bind joystick controls to
# named joystick "actions". These actions correspond directly to positional
# button names common on popular game controllers, are more UI-friendly than
# using keys directly, they have default gameplay keys pre-assigned, and these
# gameplay keys can be changed to different values without altering UI behavior.
# Actions can also be detected directly through Robotic. Finally, for most
# platforms, these actions can be assigned automatically for many controllers
# rather than by config options.

# The available joystick actions and their typical behaviors are:
#
#  Action         Title screen    Window          Game key (default)
# -------------  --------------  --------------  ----------------------
#  up (1)                         Cursor up       Up (move)
#  down (1)                       Cursor down     Down (move)
#  left (1)                       Cursor left     Left (move)
#  right (1)                      Cursor right    Right (move)
#  a              Play game       Select          Space (shoot)
#  b              Main menu       Cancel          Delete (lay bomb)
#  x              Load world      Select char     Enter (game menu)
#  y              Reload save     Backspace       S (Caverns: spells)
#  select         Main menu       Cancel          Game menu (2)
#  start          Play game       Select          Game menu (2)
#  lshoulder      Settings        Next element    Insert (switch bombs)
#  rshoulder(3)   Settings        Settings        P (Caverns: altar)
#  ltrigger       Load world      Page up         F3 (save game)
#  rtrigger       Reload save     Page down       F4 (load save)
#  lstick                         Home
#  rstick                         End
#
# (1) Actions "up"/"down"/"left"/"right" are intended for a dpad. Actions
# "l_up"/"l_down"/"l_left"/"l_right" and "r_up"/"r_down"/"r_left"/"r_right"
# also exist for analog sticks, and have the same default mappings.
#
# (2) These buttons will always open the game menu directly unless both the
# enter menu and the escape menu have been disabled through Robotic.
#
# (3) By default, this action will be intercepted and used to show/hide the
# onscreen keyboard for platforms that support it. This is supported on Android,
# Vita, NDS, and 3DS, and can also be enabled for Linux machines with no
# hardware keyboard active (e.g. Steam Deck). This will globally override
# any press of this action.

# To map a joystick action to a different key for gameplay, use the setting

# joyX.NAME = A

# where X is the number of the joystick, NAME is the name of the action
# (e.g. "lshoulder"), and A is the number (or name) of the key to assign. The
# joystick number 'X' can be substituted with a range '[Z,W]', which will
# assign the control for all joysticks numbered Z through W (inclusive).

# To change the action that shows/hides the onscreen keyboard (0 to disable),
# use the setting

# joy[1,16].show_screen_keyboard = act_rshoulder

# Automatic mapping for actions is handled using SDL's gamepad API.
# Supported gamepads should generally "just work" when they're plugged in.
# This setting can be used to globally disable the automatic mapping feature
# entirely. If 1, it will be enabled (default). If 0, it will be disabled.

# gamepad_enable = 1

# Gamepads that aren't supported can be fixed by adding SDL mapping strings.
# This config option adds a new mapping string and can be used multiple times;
# each line adds a new mapping. See docs/joystick.html for more information.

# gamepad_add =

# The following settings can be used to globally customize the automated
# joystick mappings generated from SDL mapping strings.
# See docs/joystick.html for more information.

# gamepad.a = act_a
# gamepad.b = act_b
# gamepad.x = act_x
# gamepad.y = act_y
# gamepad.back = act_select
# gamepad.start = act_start
# gamepad.leftstick = act_lstick
# gamepad.rightstick = act_rstick
# gamepad.leftshoulder = act_lshoulder
# gamepad.rightshoulder = act_rshoulder
# gamepad.dpup = act_up
# gamepad.dpdown = act_down
# gamepad.dpleft = act_left
# gamepad.dpright = act_right
# gamepad.-leftx = act_l_left
# gamepad.+leftx = act_l_right
# gamepad.-lefty = act_l_up
# gamepad.+lefty = act_l_down
# gamepad.-rightx = act_r_left
# gamepad.+rightx = act_r_right
# gamepad.-righty = act_r_up
# gamepad.+righty = act_r_down
# gamepad.lefttrigger = act_ltrigger
# gamepad.righttrigger = act_rtrigger


# Misc Options

# Set to 1 if you want MZX to pause when key focus is lost. Useful for
# when another app (such as someone IM'ing you) steals the screen. This
# might cause MZX to lock up sometimes on some machines - if you have
# problems with it don't enable it.

# pause_on_unfocus = 0

# Set to 1 to treat the left Alt key and/or the right Alt key as AltGr for
# the purposes of UI keyboard combinations. This can be used to prevent AltGr
# keyboard combinations--typically involving right Alt--from triggering UI
# shortcuts. These settings do not alter the internal or PC XT keycodes
# generated by any keypress. If you don't know what AltGr is, ignore this.
#
# Windows: Ctrl+Alt can be used instead of this feature.
# macOS: Command is already treated as Alt for these purposes. Option behaves
#        more like AltGr, so this will be enabled by default in the future.
# Wayland/X11: this is unnecessary as AltGr has a dedicated keysym.

# key_left_alt_is_altgr = 0
# key_right_alt_is_altgr = 0

# Set to 0 if you want input boxes and strings in the robot editor
# to use the game set for characters 32-126, as opposed to the protected
# GUI set.

# mask_midchars = 1

# Set to 1/"on" to display the system mouse; set to "only" to display ONLY
# the system mouse (i.e. hide the software mouse cursor). MegaZeux versions
# prior to 2.93c treated a setting of 1 like "only".

# system_mouse = off

# Set to 1 to let MZX grab the mouse pointer while active.

# grab_mouse = 0

# Set to 1 to use a save slot system (similar to emulator save states)
# instead of allowing for freeform text entry.

# save_slots = 0

# The filename of the saved games used by the save slot system. The world
# name can be inserted into this name by including "%w" in the value below.
# To use a "%" symbol as part of the target filename, use "%%". The slot
# number will immediately follow this value.

# save_slots_name = %w.

# The extension of the saved games used by the save slot system. Keep this
# set to .sav if you wish to be able to easily load slot saves using the
# traditional load dialog.

# save_slots_ext = .sav

# Set to 1 to start MZX in testing mode, exactly as if Alt+T was pressed in
# the editor. MegaZeux will exit after gameplay ends. This is intended to be
# used with the command line or exec(), and only works with the "megazeux"
# executable. Testing will start in the world's first board; a different
# board can be chosen by setting the second option to a valid board number.

# test_mode = 0
# test_mode_start_board = 0

# Set to 1 to enable MegaZeux's virtual filesystem (VFS). Currently, this
# feature is used only to implement file caching in memory. This is disabled by
# default for all platforms except 3DS and Vita. This feature is not available
# on the NDS.

# vfs_enable = 0

# Set to 0 to disable file caching in memory when the VFS is active.
# This will make MegaZeux use more memory. For platforms where the stdlib
# memory allocation functions properly return NULL, MegaZeux will attempt to
# reclaim memory from the file cache before an out of memory error occurs.
# Enabled by default, but only takes effect if the VFS is also enabled.

# vfs_enable_auto_cache = 1

# This setting controls the total amount of memory that can be used by the
# VFS file cache. This is a soft limit and can be exceeded in some situations.

# vfs_max_cache_size = 16777216

# This setting controls the largest size of an individual file that can be
# cached within the VFS file cache. Larger files will not be cached to memory.

# vfs_max_cache_file_size = 4194304


###################
# NETWORK OPTIONS #
###################

# If networking is enabled, MZX is permitted to bind ports and connect
# out to the network or Internet. This option is a global kill switch
# for the paranoid and allows the entire network layer to be disabled.

# network_enabled = 1

# By default, MZX will allow IPv4 and IPv6 connections and name resolution based
# on whether the system has an IPv4 address and/or an IPv6 address configured.
# This setting can be changed to "ipv4" to force IPv4 connections/lookups or
# "ipv6" to force IPv6 connections/lookups (and IPv4-mapped IPv6 addresses if
# no real IPv6 addresses are found). Default value is "any".

# network_address_family = any

# MegaZeux can support connections via a SOCKS4/5 proxy to punch through
# connections that would otherwise require some sort of pipe intermediary.

# socks_host = localhost
# socks_port = 1080

# For SOCKS5 proxies, a username and password can optionally be provided.
# Note that if your socks host is remote, these will be sent unencrypted over
# your network connection.

# socks_username = your_username
# socks_password = your_password

# By default, MZX builds with networking enabled will allow the user to check
# for updates (either manually or automatically; see update_auto_check below).
# For platforms that support it, a full update can also be performed. This
# option allows the updater system (both update checks and the full update
# process if applicable) to be turned off entirely.

# updater_enabled = 1

# The update host is an HTTP server containing all data and metadata
# associated with updates for MegaZeux. You normally won't want to
# change this, but it may be useful if you are a third party distributing
# unofficial updates. You may specify this up to times 16; connections will
# be attempted in the order they are defined. Please note, this is not a
# URL and should not contain protocol specifiers such as http://

# By default, MZX will attempt to connect to updates.digitalmzx.com,
# followed by updates.megazeux.org and updates.megazeux.net.

# update_host = updates.digitalmzx.com
# update_host = updates.digitalmzx.net
# update_host = updates.megazeux.org
# update_host = updates.megazeux.net

# The update "branch" is consulted each time the updater runs. Typically,
# there are only two branches, "Stable" and "Unstable". Please note, this
# option is case sensitive. The "Stable" branch is the default, but if
# you are interested in helping find bugs in the latest development
# version, or are instructed to follow development, you will need to
# change this to "Unstable". Third parties may use different branch names.

# update_branch_pin = Stable

# By default, MZX will check for updates on startup. There are three modes:
# "on", which will display most messages; "silent", which will only display
# certain errors and a message in the window caption; and "off", which disables
# this feature altogether. The default setting is "silent" for Windows and
# "off" for any other platform.

# update_auto_check = silent

include pad.config
