-
Notifications
You must be signed in to change notification settings - Fork 0
Compatibility and Troubleshooting.md
This page is for debugging broken mods, missing autoloads, hook issues, package problems, and conflicts.
Before deep debugging:
- Confirm OrcKit appears in the main menu.
- Confirm the mod is in the game's
modsfolder. - Confirm the mod is enabled in the Mods menu.
- Confirm you clicked the launch button after changing mods.
- Confirm the package has
mod.txtat the root. - Confirm the package is not duplicated as both folder and archive.
Possible causes:
- The file is not in
<game folder>/mods. - The extension is not
.vmz,.zip, or.pck. - It is a loose folder but Developer Mode is off.
-
mod.txtis nested one folder too deep. - The mod shares an id with another installed mod and lost duplicate selection.
Check the package:
mod.txt
scripts/main.gd
not:
MyMod/mod.txt
MyMod/scripts/main.gd
Check:
- The mod is enabled.
- The autoload is declared correctly.
- The autoload script compiles.
- The autoload path exists.
- Hooks are registered after
frameworks_ready. - Script overrides target the correct vanilla path.
Add a simple print to the autoload:
func _ready() -> void:
print("[MyMod] autoload ready")If this does not print, debug the autoload before debugging hooks.
If mod.txt says:
[autoload]
MyMod="res://scripts/my_mod/main.gd"the archive must contain:
scripts/my_mod/main.gd
Case and spelling matter.
Check:
-
[hooks]declares the target script. - The method name exists in the vanilla script.
- The method is not static.
- The hook name uses the correct script stem.
- The callback signature matches the method parameters.
- Registration happens after
frameworks_ready.
Example:
[hooks]
res://scripts/player.gd="_ready"func _install(modlib) -> void:
modlib.hook("player-_ready-pre", Callable(self, "_before_player_ready"))A no-suffix hook is a replace hook:
modlib.hook("player-_ready", Callable(self, "_replace_ready"))Call skip_super() inside the callback to stop vanilla from running:
func _replace_ready() -> void:
Engine.get_meta("OrcmodLib").skip_super()If you do not call skip_super(), OrcKit runs vanilla after your replacement callback.
Check:
- The vanilla path is exact.
- Your replacement script path exists.
- Another higher-priority mod is not overriding the same path.
- Developer Mode conflict report does not show a later winner.
- The script compiles.
Use declared overrides instead of dynamic take_over_path() when possible.
Developer Mode writes:
user://modloader_conflicts.txt
If two mods claim the same path, the last loaded mod wins.
Use priority to intentionally order compatibility patches:
priority=100Advanced recovery files can be placed beside the game executable:
modloader_safe_mode
modloader_disabled
modloader_disabled makes OrcKit sit idle.
modloader_safe_mode tells OrcKit to reset to a clean state.
Remove the sentinel file when you want OrcKit to run normally again.
OrcKit uses a two-pass restart and cached state for mounted archives and hook packs.
Try:
- Launch unmodded from the Mods menu.
- Disable the mod.
- Launch.
- Re-enable the mod.
- Launch again.
If still broken, use safe mode or remove temporary loader state through the UI reset path.
Use this order:
- Confirm package layout.
- Confirm
mod.txtparses. - Confirm autoload prints.
- Confirm API is available.
- Confirm
frameworks_readyfires. - Confirm hook declaration exists.
- Confirm hook registration returns a non-negative id.
- Confirm conflict report does not show another mod winning.
- Test with only your mod installed.
When reporting a problem, include:
- OrcKit version.
- Mod package layout screenshot or file list.
-
mod.txt. - Whether Developer Mode is enabled.
- Any Godot output errors.
- Conflict report if relevant.
- List of other enabled mods.
OrcKit developer wiki for Sir, We Have an Orc Problem Playtest mods. These pages document OrcKit 1.0.0.