- Upgraded to Python 3.13.
- Grouped options with no visible children no longer show their header.
- Improved suggestions when trying to bind a key by name, and misspelling it.
- Swap known controller key names between UE3/UE4 versions, based on game.
- Grouped options with no visible children no longer show their header.
- Added a default
rlm
command, which is a helper to reload Python modules during development.- Deprecated the
auto_enable
arg in the@hook
decorator, since it was misleading and in 99% of cases was not needed.- Reworked
@hook
decorator internals to better support use on methods. It essentially creates a factory, which must be bound to the specific object before use. This is done automatically on mod instances.KeybindOption.from_keybind()
now forwards thedefault_key
->default_value
, so that resetting to default works consistently.
- Linting fixes.
- Fixed weak pointer type hinting to allow for null pointers. This always worked at runtime.
- Added support for Delegate and Multicast Delegate properties.
- Added a repr to
BoundFunction
, as these are now returned by delegates.- The
WrappedStruct
constructor can now be used to construct function arg structs, like what's passed to a hook. This does not also apply tounrealsdk.make_struct
, since function names conflict far more often.- Removed the suggestion to return
Ellipsis
in hooks when overwriting a return value but not blocking execution. This still works at runtime, but is no longer present in the type hinting, since it madeEllipsis
be typed as a valid return in several places it shouldn't have been, and it's an obscure use case to begin with.
- Linting fixes.
- Fixed that UE3
WeakPointer
s would always return null, due to an incorrect offset in theUObject
header layout.- Added support for Delegate and Multicast Delegate properties.
- Changed
unrealsdk::hook_manager::log_all_calls
to write to a dedicated file.- Fixed missing all
CallFunction
based hooks in TPS - notably including the say bypass.- Added the offline mode say crash fix for BL2+TPS as a base sdk hook.
Also see the unrealsdk v1.3.0 changelog here and the pyunrealsdk v1.3.0 changelog here.
-
Fixed that in some cases a mod couldn't be disabled, or wouldn't enable actively, due to hooks not getting added/removed properly.
-
Mods now show how well they support coop. This is unknown by default, developers need to set it.
-
The mod manager now occasionally checks for updates. These will appear on the "Python SDK" mod menu entry.
-
Set
PYUNREALSDK_PYEXEC_ROOT
to the sdk mods folder by default. -
Fixed that pyright would always error on creating a HiddenOption (due to mismatching generics).
-
Display mods' coop support.
-
Display mods' coop support.
-
Added a helper to show a tutorial dialog,
show_modal_tutorial_dialog
. -
Fixed an attribute error when calling
show_hud_message
during a load screen (from a thread).
Also see the unrealsdk v1.2.0 changelog here and the pyunrealsdk v1.2.0 changelog here.
-
The BL3 release zip now also includes the Console Mod Menu, as it's use proved handy when the dedicated BL3 Mod Menu broke.
-
Added a warning for when Proton fails to propagate environment variables, which mods or the mod manager may have been expecting.
An example consequence of this is that the base mod may end up as version "Unknown Version".
-
Added warnings when loading duplicate and/or renamed mod files.
-
When developing third party native modules, you can now include this repo as a submodule to automatically keep the Python version in sync. There was a bit of build system restructuring to allow our
CMakeLists.txt
to define this. -
Changed the
OAK_MOD_MANAGER_EXTRA_FOLDERS
env var to read fromMOD_MANAGER_EXTRA_FOLDERS
instead, for consistency. -
Python warnings are now hooked up to the logging system.
-
Option.on_change
now fires automatically when the value is changed. -
Updated type hinting to use 3.12 syntax.
-
Fixed the crashes that occurred in the latest game update when opening a mod with slider options or keybinds.
-
You can now press back while on the home screen to exit the menu, same as pressing quit. df12460d
-
Improved the suggestions when rebinding a key by name. Multiple suggestions may now be shown, and symbols now try to suggest their name (e.g. typing
.
will suggestDecimal
andPeriod
). -
Changed strict keybind and ui utils dependencies to be soft dependencies. This is of no consequence to this project, but it makes the mod menu more game-agnostic for other ones.
These dependencies were only used for the "Rebind using key press" screen, this functionality will now gracefully degrade based on what's available.
-
Moved
raw_keybinds
out of mods base, into keybinds.
-
Moved
raw_keybinds
out of mods base, into keybinds.
Also see the pyunrealsdk v1.1.1 changelog here.
-
Changed the shipped pluginloader again, to
dsound.dll
. This addresses that when running under proton, overriding xinput would break all controller input. -
Added an explicit mod manager version, separating it from Mods Base. This means future mod manager updates are not required to also update Mods Base.
-
Fixed that debugpy had to be placed in the base mod folder, and would break if placed in an extra one.
-
Fixed that rebinding a key wouldn't update the hooks until the mod was next enabled.
-
Fixed that controller inputs weren't picked up while in menus - effectively meaning you couldn't bind anything to a controller without editing files.
-
Added
KeybindType.is_enabled
. -
Added a hook for keybind implementations to detect rebinds.
Also see the unrealsdk v1.1.0 changelog here and the pyunrealsdk v1.1.0 changelog here.
-
Added various developer experience improvements. See the Developing SDK Mods guide on the project site for more details.
-
Changed the shipped pluginloader to use
xinput1_3.dll
, since this won't conflict with dxvk, and since thed3d11.dll
one broke the steam overlay. -
Added a warning when the Proton exception bug is detected.
-
Added support for building using standard GCC-based MinGW. This is not tested in CI however, as it requires a newer version than that available in Github Actions.
-
Various linting/type hinting improvements.
-
Made the menu work from the pause menu. Also added options to suppress existing menu entries so that this doesn't mess up SQ muscle memory.
-
Implemented the "option header" directly, rather than relying on
Mod.iter_display_options
. -
Now display mod statuses in the mod list.
-
Now handle nested options properly, rather than listing all at once. This significantly improves readability for mods with large amounts of options, which use nested options to group them.
-
Implemented the "option header" directly, including adding mod statuses to it, rather than relying on
Mod.iter_display_options
. -
Improved the display of a few forms of rich text when converted to plain text for console.
-
Fixed the large hangs caused when scrolling, by completely rewriting to be registration based.
-
Options improvements:
-
No longer warn on "saving" a button option. While useless, this is the only standard option type which wasn't handled, it's now just a silent no-op.
-
No longer warn when a keybind option is included in the option list. You may want to do this to get a key to use in menus, for example.
-
NestedOption
no longer inherits fromButtonOption
. This was true in how the BL2/BL3 Mod Menus implemented them, but does not make much sense functionally. -
Removed
mod
from the repr.
-
-
Addressed the fact that
get_pc
may very rarely returnNone
. -
Made
hook
default to pre-hooks. -
Reworked keybinds and raw keybinds to support registration based keybind implementations. A polling based implementation can simply use no-op enable/disable functions.
-
Mod.iter_display_options
no longer yields the "option header". Instead, mod menus directly checkMod.description
,Mod.supported_games
, and the newMod.enabling_locked
. This both gives mod menus more flexibility in displaying these, and makes it easier for mods to overwrite their display options while retianing the standard header. -
Added
Mod.get_status()
, the default implementation of which returns enabled/disabled. -
Improved the HTML to plain-text converter, parsing a few tags into plain text equivalents. This primarily improves descriptions viewed in the console mod menu.
-
Did initial work to support willow. In a future update, this module will be shifted to another repo, and be common to both mod managers.
-
Handled that triggering a queued HUD message while in a loading screen would get a player controller of
None
.
- Initial Release