- Settings Float Widget will now show a rounded version of the value in Raw mode if the step value is a whole number
- Fixed audio bus volume’s not being updated initially and not applying their loaded setting until the value had been adjusted at least once.
- Created
DisplayManagerautoload. Moved the fullscreen logic out of GameManager to it. - Added a bunch of low-hanging-fruit options:
- Added the
gameplay_fovoption. UI slider covers range 60 to 100 in increments of 1 - Added the
gameplay_camera_shakeoption. Starts enabled. Currently disables wind shake at high speeds if turned off. - Added the
gameplay_walk_by_defaultoption. Starts disabled. Inverts walk behaviour. - Added the
gameplay_auto_bhopoption. Stards enabled. When disabled, jumping only ever triggers when a jump is buffered and pressing jump on the ground does buffer a jump. - Added the
display_fullscreenoption and added it to UI. Previous fullscreen toggle bind has been moved from T to Alt+Enter as would be standard - Added the
display_vsyncoption and added it to the UI. Starts enabled. - Added the
display_max_fpsoption. UI Slider covers the range 30 to 240 in increments of 10. Starts at 120
- Added the
- Removed the “release_mouse” binding now that pausing always frees the mouse
- Added a “quit to desktop” button to the options menu so the game can be closed from fullscreen
- Settings heading section spacing is no longer hardcoded at 25
- Added custom icons for settings widgets and audio players
OptionEntrynow supportscan_be_not_set. Options set this way support being saved as null. Null values are saved to the ini file as the “UNSET”- Caveat: optional settings must be typed as
Variantinstead of a static type, or setting to null doesn’t work
- Caveat: optional settings must be typed as
- Options will now log and reset values from the config which have an incompatible value (e.g from manual tampering)
- Options supports adding new OptionEntries programatically. Dynamically named options have their values stored in
RUNTIME_ADDED_OPTION_VALUESas new properties can’t besetif they’re not defined in the code at compile time - Options now has
get_option, functions similar togetbut will check if the property exists inRUNTIME_ADDED_OPTION_VALUESfirst. - Options now has
input_event_to_bindstring()andbindstring_to_input_event()to convert InputKeyEvent and InputMouseButtonEvents to and from a simple string form (e.g. “key_w”, “key_space”, “mouse_left_button”, “mouse_wheel_up”, etc) - Options now automatically generates primary and alternative
input_keybind_<action>options for all actions in the InputMap (except for those inHIDDEN_BINDS) on start . Default primary and secondary bindings are based on what’s configured in the InputMap
- Whenever an
input_keybind_<action>option is updated, the InputMap is updated to match - Added
bind action primary_button [secondary_button]to update keybinds conveniently. - Added
unbind actionto clear bindings for an action - Fixed an bug where pressing jump for a single frame didn’t trigger the jump (
is_action_pressedtriggers the frame afteris_action_just_pressedif its still held down). This has the knock-on effect of allowing jump on mouse wheel actions, which has interesting results