modwright 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +35 -0
- package/README.md +212 -0
- package/assets/claude/agents/mw-explore.md +46 -0
- package/assets/claude/agents/mw-fixture.md +33 -0
- package/assets/claude/agents/mw-rule-author.md +51 -0
- package/assets/claude/agents/mw-scaffold-author.md +48 -0
- package/assets/claude/skills/mw-author.md +59 -0
- package/assets/claude/skills/mw-new-item.md +51 -0
- package/assets/claude/skills/mw-new-spell.md +50 -0
- package/assets/claude/skills/mw-scaffold.md +59 -0
- package/assets/claude/skills/mw-ship.md +57 -0
- package/assets/claude/skills/mw-validate.md +51 -0
- package/assets/claude/skills/mw-verify.md +59 -0
- package/assets/nivalisnights/extract_resources.py +177 -0
- package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Config.json +5 -0
- package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/BootstrapClient.lua +55 -0
- package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/BootstrapServer.lua +81 -0
- package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Log.lua +96 -0
- package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Probes.lua +1038 -0
- package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/ProbesClient.lua +74 -0
- package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Protocol.lua +985 -0
- package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Watch.lua +175 -0
- package/bridges/bg3-se/Mods/ModWrightBridge/meta.lsx +45 -0
- package/bridges/bg3-se/README.md +99 -0
- package/bridges/bg3-se/bridge.json +68 -0
- package/bridges/cp2077-cet/ModWrightBridge/init.lua +375 -0
- package/bridges/cp2077-cet/ModWrightBridge/probes.lua +1104 -0
- package/bridges/cp2077-cet/ModWrightBridge/protocol.lua +1306 -0
- package/bridges/cp2077-cet/README.md +165 -0
- package/bridges/cp2077-cet/bridge.json +53 -0
- package/dist/core/bridge/arm.js +175 -0
- package/dist/core/bridge/cet-console.js +26 -0
- package/dist/core/bridge/cet-log.js +362 -0
- package/dist/core/bridge/index.js +11 -0
- package/dist/core/bridge/locate.js +35 -0
- package/dist/core/bridge/paths.js +34 -0
- package/dist/core/bridge/pending.js +89 -0
- package/dist/core/bridge/poll.js +155 -0
- package/dist/core/bridge/stage.js +100 -0
- package/dist/core/bridge/status.js +97 -0
- package/dist/core/bridge/types.js +145 -0
- package/dist/core/bridge/validate.js +107 -0
- package/dist/core/build/index.js +6 -0
- package/dist/core/build/manifest.js +47 -0
- package/dist/core/build/paths.js +32 -0
- package/dist/core/build/run.js +342 -0
- package/dist/core/build/stage.js +265 -0
- package/dist/core/build/steps/bg3.js +129 -0
- package/dist/core/build/steps/core.js +195 -0
- package/dist/core/build/steps/cyberpunk.js +95 -0
- package/dist/core/build/steps/listing.js +35 -0
- package/dist/core/build/types.js +13 -0
- package/dist/core/build/zip.js +148 -0
- package/dist/core/compat/check.js +113 -0
- package/dist/core/compat/pe.js +220 -0
- package/dist/core/compat/types.js +1 -0
- package/dist/core/compat/version.js +70 -0
- package/dist/core/deploy/guards.js +292 -0
- package/dist/core/deploy/index.js +5 -0
- package/dist/core/deploy/plan.js +696 -0
- package/dist/core/deploy/reload-apply.js +361 -0
- package/dist/core/deploy/reload.js +358 -0
- package/dist/core/deploy/sources.js +169 -0
- package/dist/core/deploy/types.js +1 -0
- package/dist/core/epic.js +54 -0
- package/dist/core/fsutil.js +191 -0
- package/dist/core/home.js +70 -0
- package/dist/core/knowledge/facts.js +229 -0
- package/dist/core/knowledge/index.js +4 -0
- package/dist/core/knowledge/search.js +112 -0
- package/dist/core/knowledge/store.js +123 -0
- package/dist/core/knowledge/types.js +1 -0
- package/dist/core/ledger/check.js +42 -0
- package/dist/core/ledger/hooks.js +80 -0
- package/dist/core/ledger/index.js +7 -0
- package/dist/core/ledger/query.js +17 -0
- package/dist/core/ledger/record.js +84 -0
- package/dist/core/ledger/status.js +53 -0
- package/dist/core/ledger/store.js +98 -0
- package/dist/core/ledger/types.js +108 -0
- package/dist/core/logs/index.js +4 -0
- package/dist/core/logs/registry.js +50 -0
- package/dist/core/logs/scan.js +195 -0
- package/dist/core/logs/triage.js +160 -0
- package/dist/core/logs/types.js +1 -0
- package/dist/core/lsx.js +10 -0
- package/dist/core/lz4.js +66 -0
- package/dist/core/mods.js +229 -0
- package/dist/core/process.js +49 -0
- package/dist/core/project/build-steps.js +83 -0
- package/dist/core/project/describe.js +74 -0
- package/dist/core/project/index.js +5 -0
- package/dist/core/project/load.js +146 -0
- package/dist/core/project/schema.js +264 -0
- package/dist/core/project/types.js +3 -0
- package/dist/core/prompts.js +72 -0
- package/dist/core/registry.js +35 -0
- package/dist/core/safety/backup.js +206 -0
- package/dist/core/safety/execute.js +188 -0
- package/dist/core/safety/index.js +5 -0
- package/dist/core/safety/plan.js +122 -0
- package/dist/core/safety/restore.js +172 -0
- package/dist/core/safety/types.js +1 -0
- package/dist/core/scaffold/bootstrap.js +7 -0
- package/dist/core/scaffold/catalog.js +28 -0
- package/dist/core/scaffold/claude-assets.js +271 -0
- package/dist/core/scaffold/collisions.js +64 -0
- package/dist/core/scaffold/emit.js +356 -0
- package/dist/core/scaffold/engine.js +680 -0
- package/dist/core/scaffold/ids.js +78 -0
- package/dist/core/scaffold/index.js +10 -0
- package/dist/core/scaffold/jsonpath.js +121 -0
- package/dist/core/scaffold/load.js +81 -0
- package/dist/core/scaffold/render.js +85 -0
- package/dist/core/scaffold/sequence.js +396 -0
- package/dist/core/scaffold/types.js +309 -0
- package/dist/core/steam.js +63 -0
- package/dist/core/surfaceutil.js +36 -0
- package/dist/core/testplan/check.js +67 -0
- package/dist/core/testplan/index.js +5 -0
- package/dist/core/testplan/load.js +100 -0
- package/dist/core/testplan/registry.js +317 -0
- package/dist/core/testplan/run.js +389 -0
- package/dist/core/testplan/types.js +82 -0
- package/dist/core/text/converters/bg3.js +50 -0
- package/dist/core/text/converters/cyberpunk.js +36 -0
- package/dist/core/text/converters/index.js +261 -0
- package/dist/core/text/diff/cr2w.js +180 -0
- package/dist/core/text/diff/index.js +16 -0
- package/dist/core/text/diff/loca.js +43 -0
- package/dist/core/text/diff/lsx.js +126 -0
- package/dist/core/text/handles.js +86 -0
- package/dist/core/text/index.js +6 -0
- package/dist/core/text/json.js +46 -0
- package/dist/core/text/templates/cache.js +71 -0
- package/dist/core/text/templates/index.js +3 -0
- package/dist/core/text/templates/library.js +245 -0
- package/dist/core/text/templates/types.js +51 -0
- package/dist/core/text/toolchain.js +16 -0
- package/dist/core/text/types.js +1 -0
- package/dist/core/text/validate.js +149 -0
- package/dist/core/text/xml.js +58 -0
- package/dist/core/toolchain/datafetch.js +151 -0
- package/dist/core/toolchain/env.js +63 -0
- package/dist/core/toolchain/features.js +170 -0
- package/dist/core/toolchain/index.js +8 -0
- package/dist/core/toolchain/install.js +191 -0
- package/dist/core/toolchain/locate.js +275 -0
- package/dist/core/toolchain/remember.js +84 -0
- package/dist/core/toolchain/run.js +318 -0
- package/dist/core/toolchain/specs.js +351 -0
- package/dist/core/toolchain/types.js +1 -0
- package/dist/core/types.js +1 -0
- package/dist/core/userconfig.js +66 -0
- package/dist/core/validate/context.js +139 -0
- package/dist/core/validate/index.js +5 -0
- package/dist/core/validate/registry.js +58 -0
- package/dist/core/validate/run.js +131 -0
- package/dist/core/validate/suppressions.js +91 -0
- package/dist/core/validate/types.js +2 -0
- package/dist/core/yamledit.js +51 -0
- package/dist/index.js +389 -0
- package/dist/server.js +1914 -0
- package/dist/surfaces/baldursgate3/compat.js +164 -0
- package/dist/surfaces/baldursgate3/identity.js +110 -0
- package/dist/surfaces/baldursgate3/index/build.js +331 -0
- package/dist/surfaces/baldursgate3/index/index.js +17 -0
- package/dist/surfaces/baldursgate3/index/info.js +40 -0
- package/dist/surfaces/baldursgate3/index/parsers/loca.js +41 -0
- package/dist/surfaces/baldursgate3/index/parsers/lsx.js +137 -0
- package/dist/surfaces/baldursgate3/index/parsers/stats.js +45 -0
- package/dist/surfaces/baldursgate3/index/parsers/treasuretable.js +57 -0
- package/dist/surfaces/baldursgate3/index/parsers/xmlutil.js +142 -0
- package/dist/surfaces/baldursgate3/index/queries.js +327 -0
- package/dist/surfaces/baldursgate3/index/schema.js +62 -0
- package/dist/surfaces/baldursgate3/index.js +3 -0
- package/dist/surfaces/baldursgate3/logs.js +278 -0
- package/dist/surfaces/baldursgate3/modsettings.js +115 -0
- package/dist/surfaces/baldursgate3/pak.js +153 -0
- package/dist/surfaces/baldursgate3/settings.js +49 -0
- package/dist/surfaces/baldursgate3/surface.js +232 -0
- package/dist/surfaces/baldursgate3/validators/bridge.js +7 -0
- package/dist/surfaces/baldursgate3/validators/files.js +476 -0
- package/dist/surfaces/baldursgate3/validators/items.js +1001 -0
- package/dist/surfaces/baldursgate3/validators/progression.js +734 -0
- package/dist/surfaces/baldursgate3/validators/stats.js +1076 -0
- package/dist/surfaces/baldursgate3/validators/story.js +790 -0
- package/dist/surfaces/baldursgate3/validators/templates.js +7 -0
- package/dist/surfaces/cyberpunk2077/compat.js +223 -0
- package/dist/surfaces/cyberpunk2077/index/build.js +231 -0
- package/dist/surfaces/cyberpunk2077/index/index.js +17 -0
- package/dist/surfaces/cyberpunk2077/index/info.js +51 -0
- package/dist/surfaces/cyberpunk2077/index/model.js +52 -0
- package/dist/surfaces/cyberpunk2077/index/parsers/tweak.js +483 -0
- package/dist/surfaces/cyberpunk2077/index/parsers/tweakxl-yaml.js +183 -0
- package/dist/surfaces/cyberpunk2077/index/queries.js +504 -0
- package/dist/surfaces/cyberpunk2077/index/resource.js +135 -0
- package/dist/surfaces/cyberpunk2077/index/schema.js +90 -0
- package/dist/surfaces/cyberpunk2077/index.js +3 -0
- package/dist/surfaces/cyberpunk2077/logs.js +742 -0
- package/dist/surfaces/cyberpunk2077/paths.js +12 -0
- package/dist/surfaces/cyberpunk2077/surface.js +218 -0
- package/dist/surfaces/cyberpunk2077/validators/bridge.js +7 -0
- package/dist/surfaces/cyberpunk2077/validators/cr2w.js +349 -0
- package/dist/surfaces/cyberpunk2077/validators/garments.js +1181 -0
- package/dist/surfaces/cyberpunk2077/validators/mesh.js +338 -0
- package/dist/surfaces/cyberpunk2077/validators/modsettings.js +120 -0
- package/dist/surfaces/cyberpunk2077/validators/packaging.js +463 -0
- package/dist/surfaces/cyberpunk2077/validators/red4ext.js +318 -0
- package/dist/surfaces/cyberpunk2077/validators/redscript.js +193 -0
- package/dist/surfaces/cyberpunk2077/validators/templates.js +7 -0
- package/dist/surfaces/cyberpunk2077/validators/tweaks.js +768 -0
- package/dist/surfaces/cyberpunk2077/validators/vehicles.js +531 -0
- package/dist/surfaces/cyberpunk2077/validators/xl.js +308 -0
- package/dist/surfaces/eldenring/binders.js +111 -0
- package/dist/surfaces/eldenring/compat.js +166 -0
- package/dist/surfaces/eldenring/dcx.js +49 -0
- package/dist/surfaces/eldenring/index.js +13 -0
- package/dist/surfaces/eldenring/loaders.js +132 -0
- package/dist/surfaces/eldenring/logs.js +67 -0
- package/dist/surfaces/eldenring/paramdef.js +256 -0
- package/dist/surfaces/eldenring/params.js +129 -0
- package/dist/surfaces/eldenring/surface.js +121 -0
- package/dist/surfaces/eldenring/tools.js +52 -0
- package/dist/surfaces/eldenring/validators/binders.js +193 -0
- package/dist/surfaces/eldenring/validators/packages.js +159 -0
- package/dist/surfaces/eldenring/validators/params.js +334 -0
- package/dist/surfaces/eldenring/validators/profiles.js +287 -0
- package/dist/surfaces/index.js +34 -0
- package/dist/surfaces/nivalisnights/compat.js +229 -0
- package/dist/surfaces/nivalisnights/index/build.js +310 -0
- package/dist/surfaces/nivalisnights/index/index.js +5 -0
- package/dist/surfaces/nivalisnights/index/queries.js +231 -0
- package/dist/surfaces/nivalisnights/index.js +4 -0
- package/dist/surfaces/nivalisnights/logs.js +473 -0
- package/dist/surfaces/nivalisnights/surface.js +195 -0
- package/dist/surfaces/skyrimse/archives.js +229 -0
- package/dist/surfaces/skyrimse/compat.js +163 -0
- package/dist/surfaces/skyrimse/index.js +12 -0
- package/dist/surfaces/skyrimse/loadorder.js +174 -0
- package/dist/surfaces/skyrimse/logs.js +241 -0
- package/dist/surfaces/skyrimse/plugins.js +149 -0
- package/dist/surfaces/skyrimse/records.js +94 -0
- package/dist/surfaces/skyrimse/surface.js +240 -0
- package/dist/surfaces/skyrimse/validators/archive-records.js +165 -0
- package/dist/surfaces/skyrimse/validators/archives.js +110 -0
- package/dist/surfaces/skyrimse/validators/plugins.js +374 -0
- package/dist/surfaces/skyrimse/validators/records.js +117 -0
- package/dist/surfaces/stardewvalley/compat.js +190 -0
- package/dist/surfaces/stardewvalley/config.js +42 -0
- package/dist/surfaces/stardewvalley/contentpatcher.js +203 -0
- package/dist/surfaces/stardewvalley/index/index.js +229 -0
- package/dist/surfaces/stardewvalley/index/wiki.js +190 -0
- package/dist/surfaces/stardewvalley/index.js +12 -0
- package/dist/surfaces/stardewvalley/logs.js +307 -0
- package/dist/surfaces/stardewvalley/mods.js +182 -0
- package/dist/surfaces/stardewvalley/surface.js +244 -0
- package/dist/surfaces/stardewvalley/validators/content.js +321 -0
- package/dist/surfaces/stardewvalley/validators/fields.js +147 -0
- package/dist/surfaces/stardewvalley/validators/loadorder.js +69 -0
- package/dist/surfaces/stardewvalley/validators/manifest.js +221 -0
- package/dist/surfaces/subnautica2/compat.js +138 -0
- package/dist/surfaces/subnautica2/index.js +5 -0
- package/dist/surfaces/subnautica2/logs.js +129 -0
- package/dist/surfaces/subnautica2/paks.js +173 -0
- package/dist/surfaces/subnautica2/surface.js +151 -0
- package/dist/surfaces/subnautica2/validators/packaging.js +298 -0
- package/dist/surfaces/valheim/compat.js +171 -0
- package/dist/surfaces/valheim/index/index.js +301 -0
- package/dist/surfaces/valheim/index/tables.js +103 -0
- package/dist/surfaces/valheim/index.js +11 -0
- package/dist/surfaces/valheim/logs.js +197 -0
- package/dist/surfaces/valheim/packaging.js +131 -0
- package/dist/surfaces/valheim/plugins.js +270 -0
- package/dist/surfaces/valheim/references.js +121 -0
- package/dist/surfaces/valheim/surface.js +223 -0
- package/dist/surfaces/valheim/validators/packaging.js +218 -0
- package/dist/surfaces/valheim/validators/plugins.js +287 -0
- package/dist/surfaces/valheim/validators/references.js +169 -0
- package/knowledge/baldursgate3/animations.gr2.yaml +166 -0
- package/knowledge/baldursgate3/audio.voice.yaml +182 -0
- package/knowledge/baldursgate3/audio.wwise.yaml +104 -0
- package/knowledge/baldursgate3/charactercreation.heads-hair.yaml +193 -0
- package/knowledge/baldursgate3/communitylibrary.shared-content.yaml +129 -0
- package/knowledge/baldursgate3/compatibilityframework.api.yaml +176 -0
- package/knowledge/baldursgate3/crash.causes.yaml +90 -0
- package/knowledge/baldursgate3/dialogue.dialogbank.yaml +120 -0
- package/knowledge/baldursgate3/dialogue.files.yaml +236 -0
- package/knowledge/baldursgate3/dialogue.osiris-goals.yaml +386 -0
- package/knowledge/baldursgate3/dialogue.yaml +122 -0
- package/knowledge/baldursgate3/feats.classes.yaml +164 -0
- package/knowledge/baldursgate3/items.cloth-physics.yaml +167 -0
- package/knowledge/baldursgate3/items.roottemplates.yaml +320 -0
- package/knowledge/baldursgate3/items.visualbank.yaml +628 -0
- package/knowledge/baldursgate3/journal.quests.yaml +214 -0
- package/knowledge/baldursgate3/loadorder.modsettings.yaml +128 -0
- package/knowledge/baldursgate3/localization.handles.yaml +92 -0
- package/knowledge/baldursgate3/misc.encoding-and-practice.yaml +111 -0
- package/knowledge/baldursgate3/origins.companions.yaml +144 -0
- package/knowledge/baldursgate3/osiris.signatures.yaml +211 -0
- package/knowledge/baldursgate3/packaging.meta.yaml +155 -0
- package/knowledge/baldursgate3/packaging.paks.yaml +79 -0
- package/knowledge/baldursgate3/process.launch.yaml +34 -0
- package/knowledge/baldursgate3/progressions.yaml +92 -0
- package/knowledge/baldursgate3/publishing.modio-nexus.yaml +170 -0
- package/knowledge/baldursgate3/publishing.toolkit-modio.yaml +135 -0
- package/knowledge/baldursgate3/races.progression.yaml +228 -0
- package/knowledge/baldursgate3/scriptextender.console.yaml +257 -0
- package/knowledge/baldursgate3/scriptextender.yaml +252 -0
- package/knowledge/baldursgate3/stats.boosts.yaml +293 -0
- package/knowledge/baldursgate3/stats.equipment-kits.yaml +69 -0
- package/knowledge/baldursgate3/stats.interrupts.yaml +45 -0
- package/knowledge/baldursgate3/stats.itemcombos.yaml +65 -0
- package/knowledge/baldursgate3/stats.spells.yaml +293 -0
- package/knowledge/baldursgate3/stats.weapons.yaml +210 -0
- package/knowledge/baldursgate3/toolchain.divine.yaml +179 -0
- package/knowledge/baldursgate3/toolchain.lslib-formats.yaml +242 -0
- package/knowledge/baldursgate3/toolkit.levels.yaml +177 -0
- package/knowledge/baldursgate3/ui.icons-atlas.yaml +78 -0
- package/knowledge/baldursgate3/ui.icons.yaml +412 -0
- package/knowledge/baldursgate3/ui.mcm.yaml +161 -0
- package/knowledge/baldursgate3/vfx.materials.yaml +174 -0
- package/knowledge/baldursgate3/visuals.characterfix.yaml +73 -0
- package/knowledge/cyberpunk2077/animations.anims.yaml +118 -0
- package/knowledge/cyberpunk2077/anims.archivexl.yaml +163 -0
- package/knowledge/cyberpunk2077/anims.authoring.yaml +579 -0
- package/knowledge/cyberpunk2077/anims.encoder.yaml +156 -0
- package/knowledge/cyberpunk2077/anims.graph.yaml +629 -0
- package/knowledge/cyberpunk2077/anims.method.yaml +360 -0
- package/knowledge/cyberpunk2077/anims.pipeline.yaml +352 -0
- package/knowledge/cyberpunk2077/anims.roundtrip.yaml +222 -0
- package/knowledge/cyberpunk2077/anims.sets.yaml +176 -0
- package/knowledge/cyberpunk2077/archivexl.bodytypes.yaml +149 -0
- package/knowledge/cyberpunk2077/archivexl.dynamic-appearances.yaml +218 -0
- package/knowledge/cyberpunk2077/archivexl.manifest.yaml +214 -0
- package/knowledge/cyberpunk2077/audio.events.yaml +168 -0
- package/knowledge/cyberpunk2077/audio.sounds.yaml +164 -0
- package/knowledge/cyberpunk2077/audio.voicesets.yaml +146 -0
- package/knowledge/cyberpunk2077/cet.sandbox.yaml +219 -0
- package/knowledge/cyberpunk2077/clothing.garments.yaml +283 -0
- package/knowledge/cyberpunk2077/clothing.refits.yaml +215 -0
- package/knowledge/cyberpunk2077/codeware.overview.yaml +111 -0
- package/knowledge/cyberpunk2077/codeware.systems.yaml +192 -0
- package/knowledge/cyberpunk2077/drones.combat.yaml +416 -0
- package/knowledge/cyberpunk2077/drones.control.yaml +552 -0
- package/knowledge/cyberpunk2077/entities.appearance.yaml +166 -0
- package/knowledge/cyberpunk2077/equipmentex.slots.yaml +151 -0
- package/knowledge/cyberpunk2077/fx.effects.yaml +246 -0
- package/knowledge/cyberpunk2077/fx.lights.yaml +171 -0
- package/knowledge/cyberpunk2077/hair.modding.yaml +145 -0
- package/knowledge/cyberpunk2077/items.wiring.yaml +246 -0
- package/knowledge/cyberpunk2077/loadorder.archives.yaml +71 -0
- package/knowledge/cyberpunk2077/mesh.blender.yaml +209 -0
- package/knowledge/cyberpunk2077/nativedb.dump.yaml +98 -0
- package/knowledge/cyberpunk2077/npc.appearance.yaml +275 -0
- package/knowledge/cyberpunk2077/npc.behaviour.yaml +128 -0
- package/knowledge/cyberpunk2077/npc.locomotion.yaml +490 -0
- package/knowledge/cyberpunk2077/packaging.deploy.yaml +175 -0
- package/knowledge/cyberpunk2077/packaging.variants.yaml +176 -0
- package/knowledge/cyberpunk2077/player.control.yaml +918 -0
- package/knowledge/cyberpunk2077/process.assetbuild.yaml +154 -0
- package/knowledge/cyberpunk2077/process.lessons.yaml +276 -0
- package/knowledge/cyberpunk2077/quests.minor.yaml +46 -0
- package/knowledge/cyberpunk2077/quests.scenes.yaml +282 -0
- package/knowledge/cyberpunk2077/quickhacks.tiers.yaml +41 -0
- package/knowledge/cyberpunk2077/red4ext.api.yaml +645 -0
- package/knowledge/cyberpunk2077/red4ext.plugins.yaml +124 -0
- package/knowledge/cyberpunk2077/redhottools.hotreload.yaml +245 -0
- package/knowledge/cyberpunk2077/redscript.compile-log.yaml +76 -0
- package/knowledge/cyberpunk2077/redscript.modules.yaml +118 -0
- package/knowledge/cyberpunk2077/toolchain.wolvenkit.yaml +163 -0
- package/knowledge/cyberpunk2077/tweakdb.loot-recipes.yaml +184 -0
- package/knowledge/cyberpunk2077/tweakdb.melee.yaml +352 -0
- package/knowledge/cyberpunk2077/tweakdb.weapons.yaml +325 -0
- package/knowledge/cyberpunk2077/tweakxl.hotreload.yaml +151 -0
- package/knowledge/cyberpunk2077/tweakxl.yaml-syntax.yaml +208 -0
- package/knowledge/cyberpunk2077/ui.icons.yaml +259 -0
- package/knowledge/cyberpunk2077/ui.inkatlas.yaml +81 -0
- package/knowledge/cyberpunk2077/ui.modsettings.yaml +204 -0
- package/knowledge/cyberpunk2077/vehicles.control.yaml +475 -0
- package/knowledge/cyberpunk2077/vehicles.dashboard-ui.yaml +203 -0
- package/knowledge/cyberpunk2077/vehicles.entities.yaml +195 -0
- package/knowledge/cyberpunk2077/vehicles.wiring.yaml +137 -0
- package/knowledge/cyberpunk2077/wolvenkit.cli.yaml +167 -0
- package/knowledge/cyberpunk2077/workspot.system.yaml +55 -0
- package/knowledge/cyberpunk2077/world.interactions.yaml +41 -0
- package/knowledge/cyberpunk2077/world.loot-container.yaml +167 -0
- package/knowledge/cyberpunk2077/world.sectors.yaml +233 -0
- package/knowledge/eldenring/formats.binders.yaml +237 -0
- package/knowledge/eldenring/launcher.me3.yaml +230 -0
- package/knowledge/eldenring/launcher.modengine2.yaml +119 -0
- package/knowledge/eldenring/params.paramdef.yaml +149 -0
- package/knowledge/eldenring/params.regulation.yaml +142 -0
- package/knowledge/eldenring/saves.online.yaml +118 -0
- package/knowledge/eldenring/toolchain.cli.yaml +256 -0
- package/knowledge/nivalisnights/modding.runtime.yaml +157 -0
- package/knowledge/skyrimse/archives.bsa.yaml +212 -0
- package/knowledge/skyrimse/install.detection.yaml +41 -0
- package/knowledge/skyrimse/loadorder.files.yaml +242 -0
- package/knowledge/skyrimse/plugins.esl.yaml +189 -0
- package/knowledge/skyrimse/plugins.format.yaml +224 -0
- package/knowledge/skyrimse/skse.runtime.yaml +283 -0
- package/knowledge/skyrimse/toolchain.xedit-spriggit.yaml +336 -0
- package/knowledge/stardewvalley/contentpatcher.format.yaml +338 -0
- package/knowledge/stardewvalley/distribution.channels.yaml +236 -0
- package/knowledge/stardewvalley/game.versions.yaml +202 -0
- package/knowledge/stardewvalley/install.layout.yaml +277 -0
- package/knowledge/stardewvalley/smapi.loader.yaml +284 -0
- package/knowledge/stardewvalley/smapi.logs.yaml +329 -0
- package/knowledge/stardewvalley/smapi.manifest.yaml +293 -0
- package/knowledge/stardewvalley/toolchain.build.yaml +261 -0
- package/knowledge/stardewvalley/wiki.dataformat.yaml +130 -0
- package/knowledge/subnautica2/game.build.yaml +331 -0
- package/knowledge/subnautica2/modding.state.yaml +210 -0
- package/knowledge/subnautica2/ue5.containers.yaml +72 -0
- package/knowledge/subnautica2/ue5.paks.yaml +203 -0
- package/knowledge/subnautica2/ue5.tooling.yaml +175 -0
- package/knowledge/subnautica2/ue5.ue4ss.yaml +203 -0
- package/knowledge/valheim/bepinex.loader.yaml +247 -0
- package/knowledge/valheim/bepinex.plugins.yaml +251 -0
- package/knowledge/valheim/game.versions.yaml +321 -0
- package/knowledge/valheim/install.layout.yaml +216 -0
- package/knowledge/valheim/jotunn.library.yaml +334 -0
- package/knowledge/valheim/thunderstore.packaging.yaml +217 -0
- package/knowledge/valheim/toolchain.build.yaml +111 -0
- package/package.json +29 -0
- package/scaffolds/baldursgate3/new-class-injection.yaml +148 -0
- package/scaffolds/baldursgate3/new-item.yaml +264 -0
- package/scaffolds/baldursgate3/new-mod.yaml +174 -0
- package/scaffolds/baldursgate3/new-passive.yaml +100 -0
- package/scaffolds/baldursgate3/new-project.yaml +118 -0
- package/scaffolds/baldursgate3/new-quest-stub.yaml +159 -0
- package/scaffolds/baldursgate3/new-spell.yaml +102 -0
- package/scaffolds/baldursgate3/new-status.yaml +119 -0
- package/scaffolds/baldursgate3/sequences/subclass-kit.yaml +50 -0
- package/scaffolds/cyberpunk2077/edit-tweak.yaml +70 -0
- package/scaffolds/cyberpunk2077/mesh-export-preset.yaml +170 -0
- package/scaffolds/cyberpunk2077/new-entity-patch.yaml +255 -0
- package/scaffolds/cyberpunk2077/new-garment-refit.yaml +279 -0
- package/scaffolds/cyberpunk2077/new-item-chain.yaml +548 -0
- package/scaffolds/cyberpunk2077/new-localization.yaml +130 -0
- package/scaffolds/cyberpunk2077/new-mod-settings.yaml +133 -0
- package/scaffolds/cyberpunk2077/new-player-replacer.yaml +1003 -0
- package/scaffolds/cyberpunk2077/new-project.yaml +157 -0
- package/scaffolds/cyberpunk2077/new-sector-node.yaml +156 -0
- package/scaffolds/cyberpunk2077/new-tweak.yaml +121 -0
- package/scaffolds/cyberpunk2077/new-vehicle-livery.yaml +148 -0
- package/scaffolds/cyberpunk2077/new-workspot-entity.yaml +177 -0
- package/scaffolds/cyberpunk2077/sequences/iconic-weapon.yaml +72 -0
- package/scaffolds/cyberpunk2077/sequences/quickhack-takeover.yaml +213 -0
- package/scaffolds/stardewvalley/new-cp-patch.yaml +106 -0
- package/scaffolds/stardewvalley/new-csharp-mod.yaml +195 -0
- package/scaffolds/stardewvalley/new-project.yaml +184 -0
- package/scaffolds/stardewvalley/sequences/content-pack.yaml +31 -0
- package/scripts/mw-tool.mjs +184 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: red4ext.plugins
|
|
3
|
+
title: RED4ext plugin loading contract — exported functions, install paths, logging
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.red4ext.plugins.two-project-split
|
|
6
|
+
claim: "RED4ext is split into two separate projects: `RED4ext` itself (the loader, responsible only
|
|
7
|
+
for managing plugins) and `RED4ext.SDK` (the reversed types/helpers used to extend the engine,
|
|
8
|
+
usable independently); a new plugin should depend only on `RED4ext.SDK`, not on the `RED4ext`
|
|
9
|
+
loader project."
|
|
10
|
+
status: community
|
|
11
|
+
source: WopsS/RED4ext@c52c8d8 README.md:16-21, section "About this library"
|
|
12
|
+
tags:
|
|
13
|
+
- red4ext
|
|
14
|
+
- sdk
|
|
15
|
+
- loader
|
|
16
|
+
- project-structure
|
|
17
|
+
- id: cp2077.red4ext.plugins.three-required-exports
|
|
18
|
+
claim: "A RED4ext plugin DLL must export three `RED4EXT_C_EXPORT` functions: `Supports() ->
|
|
19
|
+
uint32_t` (the plugin's supported API version, e.g. `RED4EXT_API_VERSION_LATEST`),
|
|
20
|
+
`Query(RED4ext::PluginInfo*)` (fills in name, author, `version`, `runtime` and `sdk` fields)
|
|
21
|
+
and `Main(RED4ext::PluginHandle, RED4ext::EMainReason, const RED4ext::Sdk*)` (the entry point,
|
|
22
|
+
called for both Load and Unload reasons)."
|
|
23
|
+
status: community
|
|
24
|
+
source: CDPR-Modding-Documentation/Red4Ext-Wiki/mod-developers/creating-a-plugin.md, section
|
|
25
|
+
"Exported functions" and the worked "Example"
|
|
26
|
+
tags:
|
|
27
|
+
- red4ext
|
|
28
|
+
- plugin
|
|
29
|
+
- exports
|
|
30
|
+
- supports
|
|
31
|
+
- query
|
|
32
|
+
- main
|
|
33
|
+
- id: cp2077.red4ext.plugins.runtime-field-pins-game-version
|
|
34
|
+
claim: "`PluginInfo::runtime`, set inside a plugin's `Query` function, controls which game version
|
|
35
|
+
the plugin will load against: an explicit value like `1.21` means RED4ext loads the plugin
|
|
36
|
+
only when the running game's version is exactly `1.21`; setting it to `RED4EXT_RUNTIME_LATEST`
|
|
37
|
+
(the recommended default) targets whatever the latest game version the installed SDK defines
|
|
38
|
+
is; `RED4EXT_RUNTIME_INDEPENDENT` opts out of the version check entirely when the plugin only
|
|
39
|
+
uses RED4ext as a loader."
|
|
40
|
+
status: community
|
|
41
|
+
source: CDPR-Modding-Documentation/Red4Ext-Wiki/mod-developers/creating-a-plugin.md, warning hint
|
|
42
|
+
under "Query"
|
|
43
|
+
tags:
|
|
44
|
+
- red4ext
|
|
45
|
+
- plugin
|
|
46
|
+
- runtime
|
|
47
|
+
- version-gate
|
|
48
|
+
- plugininfo
|
|
49
|
+
detail: 'A plugin whose `runtime` is pinned to an old exact version stops being loaded after a game
|
|
50
|
+
update unless it is rebuilt with a new pin or switched to `RED4EXT_RUNTIME_LATEST`. Checked
|
|
51
|
+
against the source (2026-09-08): the page says only "it would not be loaded" — whether that is
|
|
52
|
+
reported to the user (red4ext.log line, dialog, nothing at all) is not stated there, so do not
|
|
53
|
+
promise a silent failure either way.'
|
|
54
|
+
- id: cp2077.red4ext.plugins.main-return-false-triggers-immediate-unload
|
|
55
|
+
claim: If a plugin's `Main` entry point returns `false` in response to a `Load` reason, RED4ext
|
|
56
|
+
immediately sends it an `Unload` notification and unloads the plugin; however, if the
|
|
57
|
+
`Load`-handling code throws an exception instead of returning `false`, the plugin does NOT
|
|
58
|
+
receive the `Unload` notification.
|
|
59
|
+
status: community
|
|
60
|
+
source: CDPR-Modding-Documentation/Red4Ext-Wiki/mod-developers/creating-a-plugin.md, section "Main >
|
|
61
|
+
Remarks"
|
|
62
|
+
tags:
|
|
63
|
+
- red4ext
|
|
64
|
+
- plugin
|
|
65
|
+
- main
|
|
66
|
+
- unload
|
|
67
|
+
- exception
|
|
68
|
+
- failure-mode
|
|
69
|
+
- id: cp2077.red4ext.plugins.main-called-before-memory-allocators-ready
|
|
70
|
+
claim: A plugin's `Main` function is called before RED4ext's memory allocators are initialized; a
|
|
71
|
+
plugin that needs to touch the game's RTTI system (e.g. call functions) from startup must
|
|
72
|
+
instead register a custom game state and defer that work to when the RTTI system is ready,
|
|
73
|
+
rather than doing it directly in `Main`.
|
|
74
|
+
status: community
|
|
75
|
+
source: CDPR-Modding-Documentation/Red4Ext-Wiki/mod-developers/creating-a-plugin.md, warning under
|
|
76
|
+
"Main"
|
|
77
|
+
tags:
|
|
78
|
+
- red4ext
|
|
79
|
+
- plugin
|
|
80
|
+
- main
|
|
81
|
+
- initialization-order
|
|
82
|
+
- rtti
|
|
83
|
+
detail: "RELATED: this is the reason custom-game-states.md exists — its
|
|
84
|
+
`OnEnter`/`OnUpdate`/`OnExit` state callbacks are the documented way to hook a later point in
|
|
85
|
+
the game's life cycle than `Main` provides."
|
|
86
|
+
- id: cp2077.red4ext.plugins.install-paths-and-logs
|
|
87
|
+
claim: RED4ext itself installs by extracting into the game's root directory and logs to
|
|
88
|
+
`<game_directory>/red4ext/logs/red4ext.log`; a plugin installs into
|
|
89
|
+
`<game_directory>/red4ext/plugins` (or a named sub-directory there) and its load status is
|
|
90
|
+
checked in `<game_directory>/red4ext/logs/game.log`.
|
|
91
|
+
status: community
|
|
92
|
+
source: CDPR-Modding-Documentation/Red4Ext-Wiki/getting-started/installing-red4ext.md and
|
|
93
|
+
getting-started/installing-a-plugin.md
|
|
94
|
+
tags:
|
|
95
|
+
- red4ext
|
|
96
|
+
- install-path
|
|
97
|
+
- log-file
|
|
98
|
+
- plugins-directory
|
|
99
|
+
- id: cp2077.red4ext.plugins.per-plugin-log-file-created-lazily
|
|
100
|
+
claim: RED4ext's SDK gives every plugin its own logger (`aSdk->logger`, with `Trace`/`TraceF`
|
|
101
|
+
methods shown in the docs); the log file named after the plugin is only created in
|
|
102
|
+
`<game_directory>/red4ext/logs` the first time that plugin actually logs a message, not at
|
|
103
|
+
load time unconditionally.
|
|
104
|
+
status: community
|
|
105
|
+
source: CDPR-Modding-Documentation/Red4Ext-Wiki/mod-developers/logging.md
|
|
106
|
+
tags:
|
|
107
|
+
- red4ext
|
|
108
|
+
- logging
|
|
109
|
+
- plugin
|
|
110
|
+
- lazy-file-creation
|
|
111
|
+
- id: cp2077.red4ext.plugins.abi-is-fastcall-x86-64
|
|
112
|
+
claim: A RED4ext plugin must be built for the x86-64 architecture with the `__fastcall` calling
|
|
113
|
+
convention; the SDK provides `RED4EXT_C_EXPORT` (expands to `extern "C"
|
|
114
|
+
__declspec(dllexport)`) and `RED4EXT_CALL` (expands to `__fastcall`) helper macros to export
|
|
115
|
+
functions with the correct linkage and convention.
|
|
116
|
+
status: community
|
|
117
|
+
source: CDPR-Modding-Documentation/Red4Ext-Wiki/mod-developers/creating-a-plugin.md, opening
|
|
118
|
+
paragraph and "Exported functions" intro
|
|
119
|
+
tags:
|
|
120
|
+
- red4ext
|
|
121
|
+
- plugin
|
|
122
|
+
- abi
|
|
123
|
+
- fastcall
|
|
124
|
+
- x86-64
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: redhottools.hotreload
|
|
3
|
+
title: Red Hot Tools hot-reload scope, integrations and version floors
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.redhottools.hotreload.version-floors
|
|
6
|
+
claim: Red Hot Tools' README lists its compatibility as Cyberpunk 2077 2.21, ArchiveXL 1.21.0+,
|
|
7
|
+
Cyber Engine Tweaks 1.35.0+ and redscript 0.5.25+, and its installation step 1 requires
|
|
8
|
+
RED4ext 1.27.0+ before extracting `RedHotTools-x.x.x.zip` into the Cyberpunk 2077 directory.
|
|
9
|
+
status: community
|
|
10
|
+
source: cp2077-red-hot-tools README.md, sections "Getting Started > Compatibility" (game, ArchiveXL,
|
|
11
|
+
CET, redscript) and "Getting Started > Installation" (RED4ext)
|
|
12
|
+
tags:
|
|
13
|
+
- redhottools
|
|
14
|
+
- version-floor
|
|
15
|
+
- archivexl
|
|
16
|
+
- cet
|
|
17
|
+
- redscript
|
|
18
|
+
- red4ext
|
|
19
|
+
detail: 'Source corrected 2026-09-07: RED4ext is under Installation, not Compatibility. Re-verified
|
|
20
|
+
against the master branch (there is no main branch). Framework versions stay in the claim;
|
|
21
|
+
"Cyberpunk 2077 2.21" is the game version this release targets, not an observation date, so
|
|
22
|
+
there is no `verified_on`.'
|
|
23
|
+
- id: cp2077.redhottools.hotreload.core-feature-scope
|
|
24
|
+
claim: "Red Hot Tools' stated features are: \"Inspect game entities and world nodes\"; \"Inspect ink
|
|
25
|
+
layers and widgets (user interface)\"; \"Hot reload archives, scripts and tweaks\"; \"Prevent
|
|
26
|
+
game from starting if scripts compilation fails\"."
|
|
27
|
+
status: community
|
|
28
|
+
source: cp2077-red-hot-tools README.md, opening feature list
|
|
29
|
+
tags:
|
|
30
|
+
- redhottools
|
|
31
|
+
- feature
|
|
32
|
+
- hot-reload
|
|
33
|
+
- compile-guard
|
|
34
|
+
- id: cp2077.redhottools.hotreload.wolvenkit-pack-and-reload-button
|
|
35
|
+
claim: '"WolvenKit: Pack & reload archives from the editor with a press of a button" — packing and
|
|
36
|
+
the hot-reload trigger are one action.'
|
|
37
|
+
status: community
|
|
38
|
+
source: cp2077-red-hot-tools README.md, the integration list under "For greater convenience it
|
|
39
|
+
integrates with other tools"
|
|
40
|
+
tags:
|
|
41
|
+
- redhottools
|
|
42
|
+
- wolvenkit
|
|
43
|
+
- hot-reload
|
|
44
|
+
- archive
|
|
45
|
+
detail: TENSION with two other verified facts in this knowledge base, which are not changed by this.
|
|
46
|
+
cp2077.loadorder.rht-watches-hot-directory-only records that the live depot mount watches
|
|
47
|
+
`archive\pc\hot` ONLY, so a one-button reload presupposes the archive landing there;
|
|
48
|
+
cp2077.process.assetbuild.rht-hot-folder-banned-for-whole-mesh-archives records that
|
|
49
|
+
whole-archive hot ingest of an archive containing a mounted weapon mesh explodes geometry and
|
|
50
|
+
must be deployed cold. The README states neither caveat, so a scaffold should not offer
|
|
51
|
+
pack-and-reload for a mesh-carrying archive on the strength of this fact alone.
|
|
52
|
+
- id: cp2077.redhottools.hotreload.vscode-extension-reload-commands
|
|
53
|
+
claim: "\"With extension installed, when editing scripts or tweaks files in VS Code, you'll get new
|
|
54
|
+
editor commands in the menu to hot reload the scripts or tweaks. As any other command they can
|
|
55
|
+
also be bound to hotkeys.\" The extension is installed by dragging `red-hot-vscode-x.x.x.vsix`
|
|
56
|
+
onto the VS Code extension bar."
|
|
57
|
+
status: community
|
|
58
|
+
source: cp2077-red-hot-tools README.md, section "Visual Studio Code" and "Getting Started >
|
|
59
|
+
Installation" (optional step 4)
|
|
60
|
+
tags:
|
|
61
|
+
- redhottools
|
|
62
|
+
- vscode
|
|
63
|
+
- hot-reload
|
|
64
|
+
- hotkey
|
|
65
|
+
detail: 'Corrected 2026-09-07: the README says "extension bar", not "extensions bar".'
|
|
66
|
+
- id: cp2077.redhottools.hotreload.cet-menu-integration
|
|
67
|
+
claim: '"Cyber Engine Tweaks: Reload assets using in-game menu and inspect world nodes and entities"
|
|
68
|
+
— available with the optional CET UI, installed by extracting `RedHotTools-x.x.x-Overlay.zip`
|
|
69
|
+
into the Cyberpunk 2077 directory.'
|
|
70
|
+
status: community
|
|
71
|
+
source: cp2077-red-hot-tools README.md, the integration list under "For greater convenience it
|
|
72
|
+
integrates with other tools" and "Getting Started > Installation" (optional step 3)
|
|
73
|
+
tags:
|
|
74
|
+
- redhottools
|
|
75
|
+
- cet
|
|
76
|
+
- in-game-menu
|
|
77
|
+
- inspect
|
|
78
|
+
- id: cp2077.redhottools.hotreload.optional-artifacts-are-separate-zips
|
|
79
|
+
claim: 'Three separate artifacts ship: `RedHotTools-x.x.x.zip` (the base plugin, installation step
|
|
80
|
+
2), `RedHotTools-x.x.x-Overlay.zip` (the CET UI) and `red-hot-vscode-x.x.x.vsix` (the VS Code
|
|
81
|
+
extension). The README marks the latter two steps "_(Optional)_".'
|
|
82
|
+
status: community
|
|
83
|
+
source: cp2077-red-hot-tools README.md, section "Getting Started > Installation"
|
|
84
|
+
tags:
|
|
85
|
+
- redhottools
|
|
86
|
+
- installation
|
|
87
|
+
- optional-dependency
|
|
88
|
+
- id: cp2077.redhottools.hotreload.struct-fields-not-reinitialized
|
|
89
|
+
claim: 'Documented limitation: "Struct fields are not reinitialized (if you change the fields of a
|
|
90
|
+
struct and an instance of that struct exists during hot reload, this can lead to issues)."'
|
|
91
|
+
status: community
|
|
92
|
+
source: cp2077-red-hot-tools README.md, section "Limitations"
|
|
93
|
+
tags:
|
|
94
|
+
- redhottools
|
|
95
|
+
- struct
|
|
96
|
+
- hot-reload
|
|
97
|
+
- limitation
|
|
98
|
+
- id: cp2077.redhottools.hotreload.new-scriptable-system-handler-needs-session-reload
|
|
99
|
+
claim: "Documented limitation: \"Handlers for scriptable systems requests aren't registered on
|
|
100
|
+
scripts load, if you add a new handler you have to reload the game session.\""
|
|
101
|
+
status: community
|
|
102
|
+
source: cp2077-red-hot-tools README.md, section "Limitations"
|
|
103
|
+
tags:
|
|
104
|
+
- redhottools
|
|
105
|
+
- scriptablesystem
|
|
106
|
+
- handler
|
|
107
|
+
- hot-reload
|
|
108
|
+
- limitation
|
|
109
|
+
detail: "Corrected 2026-09-07: the previous claim inverted the README's mechanism, stating that
|
|
110
|
+
handlers \"are registered only at scripts-load time\" where the README says they are NOT
|
|
111
|
+
registered on scripts load. The practical consequence — a new handler needs a full session
|
|
112
|
+
reload, not just a script reload — is the same either way, but the stated mechanism was
|
|
113
|
+
wrong."
|
|
114
|
+
- id: cp2077.redhottools.hotreload.hot-folder-moves-into-mods
|
|
115
|
+
claim: "Placing an `.archive` inside `archive/pc/hot` (not `archive/pc/mod/hot` as the CDPR docs
|
|
116
|
+
page says) is not a permanent location: RHT's ArchiveWatcher moves a new file into
|
|
117
|
+
`archive/pc/mod` (an existing archive of the same name is replaced in place, in
|
|
118
|
+
`archive/pc/mod` or `mods/*/archives`), unloads and reloads the game archives, resets the
|
|
119
|
+
resource cache and reloads archive extensions; the `hot` folder appearing empty right after a
|
|
120
|
+
drop is expected, not a failure."
|
|
121
|
+
status: verified
|
|
122
|
+
verified_on: "2.31"
|
|
123
|
+
source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
124
|
+
for-mod-creators-theory/modding-tools/redhottools/rht-hot-reload.md, sections "The theory" and
|
|
125
|
+
"But the folder is always empty!"
|
|
126
|
+
tags:
|
|
127
|
+
- redhottools
|
|
128
|
+
- hot-reload
|
|
129
|
+
- hot-folder
|
|
130
|
+
- archive
|
|
131
|
+
detail: 'RELATED: sharpens cp2077.redhottools.hotreload.wolvenkit-pack-and-reload-button and
|
|
132
|
+
cp2077.loadorder.rht-watches-hot-directory-only — "watches" means RHT actively relocates the
|
|
133
|
+
file out of `hot`, it does not reload the archive in place.'
|
|
134
|
+
- id: cp2077.redhottools.hotreload.already-spawned-instances-unaffected
|
|
135
|
+
claim: Hot Reload invalidates the game's cached resources and will apply changes to newly-spawned
|
|
136
|
+
content, but anything already spawned in the world keeps using what it loaded originally; the
|
|
137
|
+
page's documented ways to force an already-spawned instance to pick up a change are (in
|
|
138
|
+
decreasing reliability) loading a save, spawning and equipping a new copy of the item via CET,
|
|
139
|
+
despawning/respawning the entity, respawning the UI widget, or unequipping and re-equipping
|
|
140
|
+
the item.
|
|
141
|
+
status: community
|
|
142
|
+
source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
143
|
+
for-mod-creators-theory/modding-tools/redhottools/rht-hot-reload.md, section "But my changes
|
|
144
|
+
don't show up!"
|
|
145
|
+
tags:
|
|
146
|
+
- redhottools
|
|
147
|
+
- hot-reload
|
|
148
|
+
- limitation
|
|
149
|
+
- cache-invalidation
|
|
150
|
+
- id: cp2077.redhottools.hotreload.archive-reload-is-automatic-xl-reload-is-manual
|
|
151
|
+
claim: RHT's overlay window ("Hot Reload", Archives tab) has one manual button, "Reload extensions",
|
|
152
|
+
which re-runs ArchiveXL's extension discovery over `archive/pc/mod` and `mods/*/archives` and
|
|
153
|
+
nothing else; `.archive` files are reloaded automatically by the hot-folder watcher, and that
|
|
154
|
+
automatic path already ends with an extension reload of its own, so the button is only needed
|
|
155
|
+
after editing an `.xl` without dropping an archive. The button gives no feedback in the
|
|
156
|
+
window; ArchiveXL.log ("Discovering archive extensions..." then one "Loading ..." line per
|
|
157
|
+
.xl) is where it shows.
|
|
158
|
+
status: verified
|
|
159
|
+
verified_on: "2.31"
|
|
160
|
+
source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
|
|
161
|
+
for-mod-creators-theory/modding-tools/redhottools/rht-hot-reload.md, section "The CET overlay
|
|
162
|
+
> Archives"
|
|
163
|
+
tags:
|
|
164
|
+
- redhottools
|
|
165
|
+
- hot-reload
|
|
166
|
+
- cet-overlay
|
|
167
|
+
- .xl
|
|
168
|
+
- archive
|
|
169
|
+
detail: "Direct quote: \"Pushing the button will not reload `.archive` files.\" The page adds that
|
|
170
|
+
RHT does that automatically by watching the `hot` folder. RELATED: this is the asymmetry that
|
|
171
|
+
cp2077.archivexl.manifest-registers-at-init describes from ArchiveXL's side (archives need a
|
|
172
|
+
restart to register, `.xl` entries do not) — RHT's hot-reload path narrows but does not
|
|
173
|
+
eliminate that asymmetry, since it still needs a manual button press for `.xl` changes
|
|
174
|
+
specifically."
|
|
175
|
+
- id: cp2077.redhottools.hotreload.triggers-are-sentinel-files
|
|
176
|
+
claim: "Red Hot Tools' three hot-reload triggers are file drops, not console or overlay actions:
|
|
177
|
+
creating an empty `red4ext/plugins/RedHotTools/.hot-scripts` makes the ScriptWatcher delete it
|
|
178
|
+
and run `ScriptLoader::ReloadScripts()`; writing anything to
|
|
179
|
+
`red4ext/plugins/RedHotTools/.hot-tweaks` makes the TweakWatcher delete it and call
|
|
180
|
+
`TweakXL.Reload()` on the next main-loop tick; and copying an `.archive` (with any `.xl`) into
|
|
181
|
+
`archive/pc/hot` makes the ArchiveWatcher ingest it. ModWright can therefore drive all three
|
|
182
|
+
through its own file-writing transport (deploy --reload apply)."
|
|
183
|
+
status: inferred
|
|
184
|
+
source: psiberx/cp2077-red-hot-tools src/App/Environment.hpp (the sentinel paths) and
|
|
185
|
+
src/App/Scripts/ScriptWatcher.cpp, src/App/Tweaks/TweakWatcher.cpp,
|
|
186
|
+
src/App/Archives/ArchiveWatcher.cpp (the watchers), read 2026-09-13; the support/vscode
|
|
187
|
+
extension issues the same triggers
|
|
188
|
+
tags:
|
|
189
|
+
- redhottools
|
|
190
|
+
- hot-reload
|
|
191
|
+
- sentinel
|
|
192
|
+
- hot-scripts
|
|
193
|
+
- hot-tweaks
|
|
194
|
+
- hot-folder
|
|
195
|
+
- deploy
|
|
196
|
+
detail: 'Status: the mechanism is VERIFIED from RHT source; its EFFECT in the engine splits by
|
|
197
|
+
trigger, per an in-game test (2026-09-13, RHT 1.3.0.33690, on a live game): the
|
|
198
|
+
`archive/pc/hot` half is VERIFIED WORKING (RHT moved the archive out and logged "Archives
|
|
199
|
+
reload completed" after the trigger — see the archives read-back and
|
|
200
|
+
hot-folder-moves-into-mods); the `.hot-tweaks` half is VERIFIED INEFFECTIVE — the sentinel is
|
|
201
|
+
deleted/consumed but no TweakXL.Reload follows (see hot-tweaks-consumed-without-reload-1.3.0);
|
|
202
|
+
`.hot-scripts` is still untested. So "ModWright can drive all three" holds only for archives;
|
|
203
|
+
tweaks must go through TweakXL.Reload() via cp2077.lua.eval. RELATED:
|
|
204
|
+
cp2077.redhottools.hotreload.hot-folder-moves-into-mods (the archive half) and
|
|
205
|
+
cp2077.process.assetbuild.rht-hot-folder-banned-for-whole-mesh-archives.'
|
|
206
|
+
- id: cp2077.redhottools.hotreload.hot-tweaks-consumed-without-reload-1.3.0
|
|
207
|
+
claim: "In Red Hot Tools 1.3.0.33690, dropping `red4ext/plugins/RedHotTools/.hot-tweaks` is consumed
|
|
208
|
+
(RHT deletes the file) but does NOT drive a TweakXL reload: after an edited `r6/tweaks` file
|
|
209
|
+
was deployed and `.hot-tweaks` written and deleted, TweakXL.log showed no import after the
|
|
210
|
+
launch-time one and the changed flat was unchanged in TweakDB. A direct `TweakXL.Reload()`
|
|
211
|
+
(via cp2077.lua.eval) on the same session then DID apply the change. So the working tweak
|
|
212
|
+
hot-reload path is `TweakXL.Reload()` through the bridge, not the `.hot-tweaks` sentinel."
|
|
213
|
+
status: verified
|
|
214
|
+
verified_on: "2.31"
|
|
215
|
+
source: ModWright field verification
|
|
216
|
+
tags:
|
|
217
|
+
- redhottools
|
|
218
|
+
- hot-tweaks
|
|
219
|
+
- tweakxl
|
|
220
|
+
- hot-reload
|
|
221
|
+
- negative-result
|
|
222
|
+
detail: The `archive/pc/hot` watcher works in the same build and session, so this is specific to the
|
|
223
|
+
`.hot-tweaks` path, not a dead RHT. deploy --reload apply should reload tweaks via
|
|
224
|
+
TweakXL.Reload() through the bridge rather than (or in addition to) the sentinel; the sentinel
|
|
225
|
+
is kept only because it is harmless and may work in other RHT builds.
|
|
226
|
+
- id: cp2077.redhottools.hotreload.presence-not-version-floor
|
|
227
|
+
claim: "Whether the hot-reload path is available is decided by presence, not a version floor: the
|
|
228
|
+
`RedHotTools.dll` is installed AND the current `RedHotTools*.log` carries this launch's
|
|
229
|
+
`[ArchiveWatcher] Watching` line. `scc.exe` carries no redscript version (gap 12), so a floor
|
|
230
|
+
check on redscript cannot be evaluated and would refuse a working install; the README's
|
|
231
|
+
framework floors stay an advisory only."
|
|
232
|
+
status: verified
|
|
233
|
+
verified_on: "2.31"
|
|
234
|
+
source: ModWright field verification
|
|
235
|
+
tags:
|
|
236
|
+
- redhottools
|
|
237
|
+
- presence-detection
|
|
238
|
+
- version-floor
|
|
239
|
+
- archivewatcher
|
|
240
|
+
- deploy
|
|
241
|
+
detail: "Supersedes the reliance on cp2077.redhottools.hotreload.version-floors as a gate: those
|
|
242
|
+
framework versions are reported for information, but ModWright's reload classifier
|
|
243
|
+
(src/core/deploy/reload.ts detectRedHotTools) now gates the RHT-dependent rows on the DLL +
|
|
244
|
+
the watcher line instead. RHT 1.3.0 is installed and current while the README floors read
|
|
245
|
+
2.21, so a floor check would have refused it."
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: redscript.compile-log
|
|
3
|
+
title: redscript's startup log line, log/script/cache file locations
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.redscript.compile-log.startup-log-line-format
|
|
6
|
+
claim: On every compile, `scc` (the redscript compiler) logs `"Running REDscript {version}"` via
|
|
7
|
+
`log::info!`, where `{version}` is `env!("CARGO_PKG_VERSION")` — the compiling crate's own
|
|
8
|
+
Cargo package version, not the game's version.
|
|
9
|
+
status: verified
|
|
10
|
+
source: jac3km4/redscript@3ca666c crates/scc/core/src/lib.rs:34 (`log::info!("Running REDscript {}",
|
|
11
|
+
env!("CARGO_PKG_VERSION"));`, inside `pub fn compile`)
|
|
12
|
+
tags:
|
|
13
|
+
- redscript
|
|
14
|
+
- compile-log
|
|
15
|
+
- version
|
|
16
|
+
- startup
|
|
17
|
+
detail: "At the snapshot under refs/, the workspace `Cargo.toml` pins `version =
|
|
18
|
+
\"1.0.0-preview.22\"` (Cargo.toml:21), so a log parser matching this exact source tree would
|
|
19
|
+
see \"Running REDscript 1.0.0-preview.22\" — but the log line itself always reflects whatever
|
|
20
|
+
version the installed `scc` binary was built from, not a fixed string. Offline check
|
|
21
|
+
2026-09-09: the installed build does NOT write this line. `engine/tools/scc.exe` and
|
|
22
|
+
`scc_lib.dll` (both dated 2025-08-28, no PE FileVersion resource) produce a
|
|
23
|
+
`r6/logs/redscript_rCURRENT.log` whose first line is `[INFO - Wed, 9 Sep 2026 07:52:43 -0700]
|
|
24
|
+
Compiling files in <game>\\r6\\scripts:` followed by one `.reds` path per line, and no line
|
|
25
|
+
containing \"REDscript\" appears anywhere in the 509-line log; the dated copies from
|
|
26
|
+
2026-09-08 have the same shape. So the claim holds for the cited source tree
|
|
27
|
+
(1.0.0-preview.22) but not for every shipped `scc`; the 2025-08-28 build predates or omits the
|
|
28
|
+
banner. Consequence for ModWright: `check_compat`'s banner fallback
|
|
29
|
+
(src/surfaces/cyberpunk2077/compat.ts) cannot read a version on this install and reports
|
|
30
|
+
redscript undetermined, so every framework floor on redscript is a warning rather than a
|
|
31
|
+
check."
|
|
32
|
+
- id: cp2077.redscript.compile-log.log-file-location
|
|
33
|
+
claim: On Windows, a successful redscript setup is confirmed by log output appearing in `Cyberpunk
|
|
34
|
+
2077/r6/logs/redscript_rCURRENT.log`.
|
|
35
|
+
status: community
|
|
36
|
+
source: jac3km4/redscript@3ca666c README.md:15, section "Windows"
|
|
37
|
+
tags:
|
|
38
|
+
- redscript
|
|
39
|
+
- log-file
|
|
40
|
+
- windows
|
|
41
|
+
- id: cp2077.redscript.compile-log.default-scripts-dir-is-r6-scripts
|
|
42
|
+
claim: "`scc`'s default script source directory, relative to the game's root directory, is
|
|
43
|
+
`r6/scripts` (`R6_DIR` = \"r6\", `SCRIPTS_DIR` = \"scripts\"); additional script paths can be
|
|
44
|
+
layered on top of this default via `SccSettings`, but the default is always included."
|
|
45
|
+
status: verified
|
|
46
|
+
source: jac3km4/redscript@3ca666c crates/scc/core/src/settings.rs:11-13 (the `R6_DIR`/`SCRIPTS_DIR`
|
|
47
|
+
constants) and :59-66 (`default_scripts_dir_path` joins `root_dir/r6/scripts`, and
|
|
48
|
+
`script_paths()` always yields it first before any `additional_script_paths`)
|
|
49
|
+
tags:
|
|
50
|
+
- redscript
|
|
51
|
+
- r6-scripts
|
|
52
|
+
- layout
|
|
53
|
+
- compiler
|
|
54
|
+
- id: cp2077.redscript.compile-log.compiled-cache-bundle-path
|
|
55
|
+
claim: "`scc` writes its compiled script bundle by default to `r6/cache/final.redscripts` (relative
|
|
56
|
+
to the game root), with a backup of the previous bundle kept alongside as
|
|
57
|
+
`final.redscripts.bk`; a custom output cache file path can override this default."
|
|
58
|
+
status: verified
|
|
59
|
+
source: jac3km4/redscript@3ca666c crates/scc/core/src/settings.rs:8-9
|
|
60
|
+
(`BUNDLE_FILE`/`BACKUP_BUNDLE_FILE` constants), :55-57 (`default_cache_file_path` joining
|
|
61
|
+
`root_dir/r6/cache/final.redscripts`) and :80-85 (`default_backup_cache_file_path` joining
|
|
62
|
+
`root_dir/r6/cache/final.redscripts.bk`)
|
|
63
|
+
tags:
|
|
64
|
+
- redscript
|
|
65
|
+
- cache
|
|
66
|
+
- final.redscripts
|
|
67
|
+
- layout
|
|
68
|
+
- id: cp2077.redscript.compile-log.user-hints-dir
|
|
69
|
+
claim: "`scc` reads user-authored compiler hints from `r6/config/redsUserHints` under the game root."
|
|
70
|
+
status: verified
|
|
71
|
+
source: jac3km4/redscript@3ca666c crates/scc/core/src/settings.rs:15 (`USER_HINTS_DIR` =
|
|
72
|
+
"redsUserHints") and :48-53 (`user_hints_dir()` joins `root_dir/r6/config/redsUserHints`)
|
|
73
|
+
tags:
|
|
74
|
+
- redscript
|
|
75
|
+
- user-hints
|
|
76
|
+
- layout
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: redscript.modules
|
|
3
|
+
title: redscript's module declaration, import forms and item qualifiers, from the parser grammar
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.redscript.modules.module-declaration-is-optional-dotted-path
|
|
6
|
+
claim: A `.reds` file's `module` declaration is optional and, when present, takes a dotted path of
|
|
7
|
+
one or more identifiers (e.g. `module Test.Module`); the parser accepts a file with no
|
|
8
|
+
`module` line at all (the module path is `Option`-typed in the grammar) — module scoping is
|
|
9
|
+
not mandatory for every script file.
|
|
10
|
+
status: verified
|
|
11
|
+
source: 'jac3km4/redscript@3ca666c crates/syntax/parser/src/parser.rs:123-140 (the `module` parser:
|
|
12
|
+
`just(Token::Ident("module"))` followed by a dot-separated identifier path with
|
|
13
|
+
`.at_least(1)`, wrapped in `.or_not()`)'
|
|
14
|
+
tags:
|
|
15
|
+
- redscript
|
|
16
|
+
- module
|
|
17
|
+
- parser
|
|
18
|
+
- grammar
|
|
19
|
+
detail: Confirmed against the formatter's own test fixture
|
|
20
|
+
crates/syntax/formatter/tests/data/module.reds, whose first non-blank line is `module
|
|
21
|
+
Test.Module` followed by an `import Dummy.*` line and then item declarations — matching the
|
|
22
|
+
grammar's module-then-imports-then-items shape.
|
|
23
|
+
- id: cp2077.redscript.modules.three-import-forms
|
|
24
|
+
claim: "redscript's import grammar accepts three forms of a dotted path after `import`: `import
|
|
25
|
+
A.B.C` (exact import of a single path), `import A.B.*` (wildcard import of everything under a
|
|
26
|
+
path) and `import A.B.{X, Y}` (a selector list of specific names under a path); the AST
|
|
27
|
+
records these as `Import::Exact`, `Import::All` and `Import::Select` respectively."
|
|
28
|
+
status: verified
|
|
29
|
+
source: jac3km4/redscript@3ca666c crates/syntax/parser/src/parser/item.rs:196-211 (the `import`
|
|
30
|
+
parser building `Import::Select(path, idents)` at :207, `Import::All(path)` at :208 or
|
|
31
|
+
`Import::Exact(path)` at :209 depending on whether an import selector follows the path)
|
|
32
|
+
tags:
|
|
33
|
+
- redscript
|
|
34
|
+
- import
|
|
35
|
+
- module
|
|
36
|
+
- parser
|
|
37
|
+
- grammar
|
|
38
|
+
- id: cp2077.redscript.modules.item-qualifier-keywords
|
|
39
|
+
claim: "redscript's item-qualifier keywords, i.e. the modifiers a class/function/field declaration
|
|
40
|
+
can carry before its body, are: `abstract`, `cb` (marks a callback), `const`, `exec`, `final`,
|
|
41
|
+
`importonly`, `native`, `persistent`, `quest` and `static` — each is parsed into a distinct
|
|
42
|
+
`ItemQualifiers` bit flag."
|
|
43
|
+
status: verified
|
|
44
|
+
source: jac3km4/redscript@3ca666c crates/syntax/parser/src/parser/item.rs:240-249, function
|
|
45
|
+
`item_qualifier` (the `select!` match listing all ten keyword-to-flag pairs)
|
|
46
|
+
tags:
|
|
47
|
+
- redscript
|
|
48
|
+
- qualifier
|
|
49
|
+
- keyword
|
|
50
|
+
- grammar
|
|
51
|
+
- id: cp2077.redscript.modules.exec-qualifier-sets-is-exec-flag
|
|
52
|
+
claim: The `exec` qualifier on a global function is threaded through the compiler as a boolean
|
|
53
|
+
`is_exec` flag on the function's resolved metadata
|
|
54
|
+
(`.with_is_exec(qs.take_flag(ast::ItemQualifiers::EXEC))`); the parser and frontend resolution
|
|
55
|
+
stage both handle `exec` as a distinct qualifier from `static`/`native`/etc., but neither of
|
|
56
|
+
those two source locations documents what `is_exec` changes about how the function can be
|
|
57
|
+
invoked (e.g. from the game's console) — that runtime behavior is not covered by this source.
|
|
58
|
+
status: verified
|
|
59
|
+
source: jac3km4/redscript@3ca666c crates/syntax/parser/src/parser/item.rs:243 (`Token::Ident("exec")
|
|
60
|
+
=> ItemQualifiers::EXEC`); crates/compiler/frontend/src/stages/resolution.rs:816
|
|
61
|
+
(`.with_is_exec(qs.take_flag(ast::ItemQualifiers::EXEC))`, building `FreeFunctionFlags`)
|
|
62
|
+
tags:
|
|
63
|
+
- redscript
|
|
64
|
+
- exec
|
|
65
|
+
- qualifier
|
|
66
|
+
- gap
|
|
67
|
+
detail: "Left deliberately narrow per the transcription-lesson rule: the compiler plumbing for
|
|
68
|
+
`exec` is confirmed, but its actual observable effect (console-exposure, if any) is not
|
|
69
|
+
asserted here because neither cited file states it."
|
|
70
|
+
- id: cp2077.redscript.modules.duplicate-global-func-crashes-the-script-load
|
|
71
|
+
claim: "Two module-less global functions with the same name and the same parameter types but
|
|
72
|
+
different parameter names and return types (`Mod_Possess(target: ref<GameObject>) -> Bool` in
|
|
73
|
+
one file, `Mod_Possess(body: ref<GameObject>) -> String` in another) compile: redscript
|
|
74
|
+
reports \"Output successfully saved\" and RED4ext registers the blob. The 2.31 engine then
|
|
75
|
+
crashes at launch, right after \"Scripts blob path was updated\", with an access violation
|
|
76
|
+
reading 0x28 at exe+0x5C61A4. The crashing routine (fn_5C60F8) copies one function definition
|
|
77
|
+
onto another. It looks up each parameter by name in the other definition's parameter array
|
|
78
|
+
(fn_5C5B88) and reads the result's +0x28 unchecked; the missing name was \"body\" (hash
|
|
79
|
+
CD4DE79BC6C93295 in rdx)."
|
|
80
|
+
status: verified
|
|
81
|
+
verified_on: "2.31"
|
|
82
|
+
source: ModWright field verification
|
|
83
|
+
tags:
|
|
84
|
+
- redscript
|
|
85
|
+
- global
|
|
86
|
+
- module-less
|
|
87
|
+
- duplicate
|
|
88
|
+
- crash
|
|
89
|
+
- script-load
|
|
90
|
+
detail: The hash was matched by FNV-1a 64 against every identifier in the deployed r6/scripts tree;
|
|
91
|
+
"body" was the only match. A validator rule (cp2077.history.redscript-duplicate-global-func)
|
|
92
|
+
reports the shape before a launch.
|
|
93
|
+
- id: cp2077.redscript.modules.module-name-with-a-space-does-not-compile
|
|
94
|
+
claim: "A module declaration must be a dotted identifier path: `module FTR Settings` fails the whole
|
|
95
|
+
script compile with a syntax error at the space, and the game starts with no mod scripts
|
|
96
|
+
active."
|
|
97
|
+
status: verified
|
|
98
|
+
verified_on: "2.31"
|
|
99
|
+
source: ModWright field verification
|
|
100
|
+
tags:
|
|
101
|
+
- redscript
|
|
102
|
+
- module
|
|
103
|
+
- syntax
|
|
104
|
+
- scaffold
|
|
105
|
+
related:
|
|
106
|
+
- cp2077.redscript.modules.module-declaration-is-optional-dotted-path
|
|
107
|
+
- id: cp2077.redscript.modules.scriptable-system-registered-under-module-qualified-name
|
|
108
|
+
claim: A ScriptableSystem declared inside `module M` is registered in the scriptable systems
|
|
109
|
+
container under its module-qualified name `M.<Class>`; looking it up by the bare class name
|
|
110
|
+
finds nothing.
|
|
111
|
+
status: verified
|
|
112
|
+
verified_on: "2.31"
|
|
113
|
+
source: ModWright field verification
|
|
114
|
+
tags:
|
|
115
|
+
- redscript
|
|
116
|
+
- module
|
|
117
|
+
- scriptablesystem
|
|
118
|
+
- cet
|