From 76cad4f4439c57523e7336f3e7337bccadda0b34 Mon Sep 17 00:00:00 2001 From: LoafyLemon Date: Sat, 15 Jul 2023 23:03:01 +0100 Subject: [PATCH] Bug fixes and improvements * Added a separate entry for mods compatibility (saves and mods rarely follow the same upgrade rules anyway) * Improved mods handling by automatically disabling incompatible mods * Fixed a RuntimeError caused by changing set size during iteration --- game/scripts/mods.rpy | 15 ++++++++++++++- game/scripts/utility/updater.rpy | 6 ++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/game/scripts/mods.rpy b/game/scripts/mods.rpy index 4b331a4e..78d9af71 100644 --- a/game/scripts/mods.rpy +++ b/game/scripts/mods.rpy @@ -7,6 +7,8 @@ init -999: persistent.mods_enabled = _set() mods_list = _dict() + mods_incompatible = _set() + mods_compatible = 1.45 # Hardcoded due to initalization offset def mods_import(): global mods_list @@ -45,7 +47,16 @@ init -999: return def mods_init(): - for i in persistent.mods_enabled: + global mods_incompatible + for i in persistent.mods_enabled.copy(): + control, major, *minor = mods_list[i]["GameVer"].split(" ")[0].split(".") + ver = float("{}.{}{}".format(control, major, "".join(minor))) + + if ver < mods_compatible: + persistent.mods_enabled.remove(i) + mods_incompatible.add(i) + continue + for j in mods_list[i]["Scripts"]: name = os.path.splitext(j)[0] @@ -55,6 +66,8 @@ init -999: if config.developer: renpy.error(e) persistent.mods_enabled.remove(i) + mods_incompatible.add(i) + mods_import() mods_init() diff --git a/game/scripts/utility/updater.rpy b/game/scripts/utility/updater.rpy index f45811f7..14c1ed17 100644 --- a/game/scripts/utility/updater.rpy +++ b/game/scripts/utility/updater.rpy @@ -370,4 +370,10 @@ label before_main_menu(): python: if settings.get("updates") and not prerelease: CheckUpdates(onetime=True, autostart=False)() + + if mods_incompatible: + $ mods = "\n".join(mods_incompatible) + + call modal_popup("Attention!", "The listed mods are incompatible and have been deactivated:\n" + mods, "interface/warning.webp") + return