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,130 @@
|
|
|
1
|
+
# new-localization (Cyberpunk 2077) — a quickhack's records name `LocKey#`s
|
|
2
|
+
# that something has to define. Adds ONE
|
|
3
|
+
# on-screen localization entry — the `en-us.json.json` CR2W source, the
|
|
4
|
+
# `.archive.xl` manifest's `localization.onscreens.en-us` pointer, and the
|
|
5
|
+
# `convert deserialize` build step — the loca half `new-item-chain` emits inline
|
|
6
|
+
# for an item, lifted out so any sequence can name it. Runs once per LocKey: the
|
|
7
|
+
# skeleton (both files), the manifest pointer and the build step are idempotent
|
|
8
|
+
# (write-text `ifExists: skip`; patch-project's own dedupe), and only the entry
|
|
9
|
+
# append (`entries.-`) adds per run, so N runs give one source with N entries.
|
|
10
|
+
# The manifest is JSON — a YAML append would break it — so the entry goes in
|
|
11
|
+
# through `insert-xl-entry`, not `insert-block`.
|
|
12
|
+
#
|
|
13
|
+
# The record that references the text uses `LocKey#${secondaryKey}` (the handle
|
|
14
|
+
# is `LocKey#` + this entry's secondaryKey); `text` is the femaleVariant the
|
|
15
|
+
# player sees. Paths follow the item chain's own convention (WolvenKit.CLI names
|
|
16
|
+
# a `convert deserialize` output by stripping exactly one trailing `.json`, so
|
|
17
|
+
# the source must be `en-us.json.json` to compile to the `en-us.json` the
|
|
18
|
+
# manifest points at — observed in game, 2026-09).
|
|
19
|
+
id: cyberpunk2077.new-localization
|
|
20
|
+
game: cyberpunk2077
|
|
21
|
+
title: New Cyberpunk 2077 on-screen localization entry
|
|
22
|
+
summary: Add one en-us on-screen localization entry (source, manifest pointer and deserialize step), so a LocKey# a record references resolves to real text.
|
|
23
|
+
modTypes: [gameplay-tweak, quickhack, weapon, item, loot, garment]
|
|
24
|
+
needs: {}
|
|
25
|
+
inputs:
|
|
26
|
+
- type: string
|
|
27
|
+
name: modSlug
|
|
28
|
+
prompt: "Lowercase depot folder name, used in the mod\\\\<slug>\\\\... paths, e.g. mymod."
|
|
29
|
+
pattern: "^[a-z][a-z0-9_]*$"
|
|
30
|
+
- type: path
|
|
31
|
+
name: xlFile
|
|
32
|
+
prompt: "The .archive.xl manifest (created with a localization skeleton if missing; an existing one — e.g. an entity patch's — gains the localization.onscreens.en-us pointer). Registered as a project source and an archive deploy target."
|
|
33
|
+
mustExist: false
|
|
34
|
+
- type: path
|
|
35
|
+
name: enUsSourceDir
|
|
36
|
+
prompt: "Directory the localization JSON source is written to, typically sources/<slug>. Its filename is fixed to en-us.json.json (WolvenKit.CLI strips one trailing .json, so only that name compiles to en-us.json)."
|
|
37
|
+
mustExist: false
|
|
38
|
+
- type: path
|
|
39
|
+
name: entCompiledDir
|
|
40
|
+
prompt: "Directory the compiled en-us.json lands in, typically archive-staging/<Mod>/mod/<slug> — passed to convert deserialize -o (a directory, not a file)."
|
|
41
|
+
mustExist: false
|
|
42
|
+
- type: string
|
|
43
|
+
name: secondaryKey
|
|
44
|
+
prompt: "The LocKey secondaryKey, e.g. MyMod-Name. The referencing record uses LocKey#<this>."
|
|
45
|
+
- type: string
|
|
46
|
+
name: text
|
|
47
|
+
prompt: "The player-facing text this LocKey resolves to (the femaleVariant)."
|
|
48
|
+
ids: []
|
|
49
|
+
emits:
|
|
50
|
+
- op: write-text
|
|
51
|
+
path: "${input.xlFile}"
|
|
52
|
+
ifExists: skip
|
|
53
|
+
body: |
|
|
54
|
+
{
|
|
55
|
+
"localization": { "onscreens": {} }
|
|
56
|
+
}
|
|
57
|
+
- op: insert-xl-entry
|
|
58
|
+
path: "${input.xlFile}"
|
|
59
|
+
pointer: localization.onscreens.en-us
|
|
60
|
+
value: "mod\\${input.modSlug}\\en-us.json"
|
|
61
|
+
- op: write-text
|
|
62
|
+
path: "${input.enUsSourceDir}/en-us.json.json"
|
|
63
|
+
ifExists: skip
|
|
64
|
+
body: |
|
|
65
|
+
{
|
|
66
|
+
"Header": {
|
|
67
|
+
"WolvenKitVersion": "8.20.0",
|
|
68
|
+
"WKitJsonVersion": "0.0.9",
|
|
69
|
+
"GameVersion": 2310,
|
|
70
|
+
"DataType": "CR2W",
|
|
71
|
+
"ArchiveFileName": "mod\\${input.modSlug}\\en-us.json"
|
|
72
|
+
},
|
|
73
|
+
"Data": {
|
|
74
|
+
"Version": 195,
|
|
75
|
+
"BuildVersion": 0,
|
|
76
|
+
"RootChunk": {
|
|
77
|
+
"$type": "JsonResource",
|
|
78
|
+
"cookingPlatform": "PLATFORM_PC",
|
|
79
|
+
"root": {
|
|
80
|
+
"HandleId": "0",
|
|
81
|
+
"Data": { "$type": "localizationPersistenceOnScreenEntries", "entries": [] }
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"EmbeddedFiles": []
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
- op: insert-xl-entry
|
|
88
|
+
path: "${input.enUsSourceDir}/en-us.json.json"
|
|
89
|
+
pointer: Data.RootChunk.root.Data.entries.-
|
|
90
|
+
value:
|
|
91
|
+
$type: localizationPersistenceOnScreenEntry
|
|
92
|
+
femaleVariant: "${input.text}"
|
|
93
|
+
maleVariant: ""
|
|
94
|
+
primaryKey: "0"
|
|
95
|
+
secondaryKey: "${input.secondaryKey}"
|
|
96
|
+
- op: patch-project
|
|
97
|
+
add:
|
|
98
|
+
outDir: "archive-staging"
|
|
99
|
+
sources:
|
|
100
|
+
- id: "xl-${input.modSlug}"
|
|
101
|
+
path: "${input.xlFile}"
|
|
102
|
+
kind: xl
|
|
103
|
+
steps:
|
|
104
|
+
- step: exec
|
|
105
|
+
id: "deserialize-${input.modSlug}-enus"
|
|
106
|
+
command: wolvenkit-cli
|
|
107
|
+
args: ["convert", "deserialize", "${input.enUsSourceDir}/en-us.json.json", "-o", "${input.entCompiledDir}"]
|
|
108
|
+
expectOutputs: ["${input.entCompiledDir}/en-us.json"]
|
|
109
|
+
before: stage
|
|
110
|
+
deployTargets:
|
|
111
|
+
- rootId: archive
|
|
112
|
+
from: "${input.xlFile}"
|
|
113
|
+
locked: false
|
|
114
|
+
backup: true
|
|
115
|
+
templates: []
|
|
116
|
+
satisfies:
|
|
117
|
+
- cp2077.garments.xl-entries-resolve
|
|
118
|
+
- cp2077.history.xl-manifest-lint
|
|
119
|
+
- cp2077.history.clean-pack-json-sweep
|
|
120
|
+
- cp2077.vehicles.cr2w-unique-ids
|
|
121
|
+
- cp2077.vehicles.cr2w-resource-path-shape
|
|
122
|
+
manual:
|
|
123
|
+
- title: Confirm the text renders
|
|
124
|
+
steps:
|
|
125
|
+
- "Build and deploy, then load a save with the mod active and confirm the string that reads LocKey#${input.secondaryKey} in the record now shows \"${input.text}\" rather than the raw key."
|
|
126
|
+
expected: "The record referencing LocKey#${input.secondaryKey} renders \"${input.text}\" in game."
|
|
127
|
+
claim:
|
|
128
|
+
idSuffix: "loca.${input.secondaryKey}"
|
|
129
|
+
claim: "LocKey#${input.secondaryKey} resolves to \"${input.text}\" through the mod's en-us on-screen entries."
|
|
130
|
+
evidence: ["ModWright research"]
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# new-mod-settings (Cyberpunk 2077) — writes (or appends to) a redscript
|
|
2
|
+
# settings class with `@runtimeProperty("ModSettings.*", ...)` annotation
|
|
3
|
+
# blocks — the convention `cp2077.history.modsettings-annotation-keys` checks
|
|
4
|
+
# (see that validator's own header comment).
|
|
5
|
+
id: cyberpunk2077.new-mod-settings
|
|
6
|
+
game: cyberpunk2077
|
|
7
|
+
title: New Cyberpunk 2077 mod setting (native settings UI)
|
|
8
|
+
summary: Append a @runtimeProperty-annotated field to a redscript settings class, so a value shows up in the native in-game settings menu.
|
|
9
|
+
modTypes: [gameplay-tweak]
|
|
10
|
+
needs: {}
|
|
11
|
+
inputs:
|
|
12
|
+
- type: path
|
|
13
|
+
name: file
|
|
14
|
+
prompt: "Destination .reds file under a project source of kind \"scripts\" (created if it does not yet exist)."
|
|
15
|
+
mustExist: false
|
|
16
|
+
- type: string
|
|
17
|
+
name: className
|
|
18
|
+
prompt: "Settings class name, e.g. MyModSettings."
|
|
19
|
+
pattern: "^[A-Za-z][A-Za-z0-9_]*$"
|
|
20
|
+
- type: string
|
|
21
|
+
name: settingName
|
|
22
|
+
prompt: "Field name, e.g. glowIntensity."
|
|
23
|
+
pattern: "^[a-z][A-Za-z0-9_]*$"
|
|
24
|
+
- type: enum
|
|
25
|
+
name: settingType
|
|
26
|
+
prompt: "redscript type of the setting."
|
|
27
|
+
values: [Bool, Int32, Float, String]
|
|
28
|
+
- type: string
|
|
29
|
+
name: category
|
|
30
|
+
prompt: "Settings menu category/section."
|
|
31
|
+
- type: string
|
|
32
|
+
name: displayName
|
|
33
|
+
prompt: "Player-facing label."
|
|
34
|
+
- type: string
|
|
35
|
+
name: defaultValue
|
|
36
|
+
prompt: "Default value literal (e.g. true, 0, 0.5, \"text\")."
|
|
37
|
+
ids: []
|
|
38
|
+
emits:
|
|
39
|
+
# A field appended INSIDE the settings class, before its closing brace
|
|
40
|
+
# (anchor before-last-line, anchorPattern "^}"): the first run creates the
|
|
41
|
+
# class shell through createIfMissing and drops the field in; a second run
|
|
42
|
+
# finds the same "}" and adds its field to the SAME class. An earlier
|
|
43
|
+
# shape wrote one self-contained class per run, so a
|
|
44
|
+
# second setting on a sequence's fixed className redeclared the class.
|
|
45
|
+
# `indent: 4` nests the field body (kept a readable block scalar) inside the
|
|
46
|
+
# class.
|
|
47
|
+
#
|
|
48
|
+
# Observed in game (2026-09-11): the `@runtimeProperty` block
|
|
49
|
+
# sits on the property, not the class, and the property is the `settingName`
|
|
50
|
+
# input (the first shape annotated the class and named every field `value`).
|
|
51
|
+
# Mod Settings binds annotations to properties (knowledge
|
|
52
|
+
# `cp2077.ui.modsettings.unannotated-property-is-invisible`, the wiki's
|
|
53
|
+
# "Binding properties"), and registering the class as a singleton by
|
|
54
|
+
# extending `ScriptableSystem` is how to do that without Codeware (which
|
|
55
|
+
# `ScriptableService` would need). This is the documented shape.
|
|
56
|
+
#
|
|
57
|
+
# The class shell also registers itself as a Mod Settings listener. Without
|
|
58
|
+
# that the control renders and persists, but the property keeps its default:
|
|
59
|
+
# "Binding annotations to your class' properties isn't enough, as you also
|
|
60
|
+
# must register a listener to the class in order to have Mod Settings update
|
|
61
|
+
# the properties during run-time" (the wiki's "Listeners"; knowledge
|
|
62
|
+
# `cp2077.ui.modsettings.listener-callbacks-require-cb-keyword`,
|
|
63
|
+
# `…lifecycle-differs-by-base-class`: a ScriptableSystem listens from
|
|
64
|
+
# OnAttach and stops in OnDetach). The registration is compiled only when
|
|
65
|
+
# Mod Settings is installed (its redscript module is `ModSettingsModule`),
|
|
66
|
+
# so the mod still compiles without it and the setting keeps its default.
|
|
67
|
+
- op: insert-block
|
|
68
|
+
path: "${input.file}"
|
|
69
|
+
anchor: before-last-line
|
|
70
|
+
anchorPattern: "^}"
|
|
71
|
+
indent: 4
|
|
72
|
+
createIfMissing: |
|
|
73
|
+
module ${project.moduleName}
|
|
74
|
+
|
|
75
|
+
public class ${input.className} extends ScriptableSystem {
|
|
76
|
+
public func OnAttach() -> Void {
|
|
77
|
+
this.ListenToModSettings();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
public func OnDetach() -> Void {
|
|
81
|
+
this.UnlistenToModSettings();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@if(ModuleExists("ModSettingsModule"))
|
|
85
|
+
private func ListenToModSettings() -> Void {
|
|
86
|
+
ModSettings.RegisterListenerToClass(this);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@if(!ModuleExists("ModSettingsModule"))
|
|
90
|
+
private func ListenToModSettings() -> Void {}
|
|
91
|
+
|
|
92
|
+
@if(ModuleExists("ModSettingsModule"))
|
|
93
|
+
private func UnlistenToModSettings() -> Void {
|
|
94
|
+
ModSettings.UnregisterListenerToClass(this);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
@if(!ModuleExists("ModSettingsModule"))
|
|
98
|
+
private func UnlistenToModSettings() -> Void {}
|
|
99
|
+
|
|
100
|
+
public static func GetInstance(game: GameInstance) -> ref<${input.className}> {
|
|
101
|
+
return GameInstance.GetScriptableSystemsContainer(game).Get(NameOf<${input.className}>()) as ${input.className};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
body: |
|
|
105
|
+
@runtimeProperty("ModSettings.mod", "${project.name}")
|
|
106
|
+
@runtimeProperty("ModSettings.category", "${input.category}")
|
|
107
|
+
@runtimeProperty("ModSettings.displayName", "${input.displayName}")
|
|
108
|
+
public let ${input.settingName}: ${input.settingType} = ${input.defaultValue};
|
|
109
|
+
templates: []
|
|
110
|
+
satisfies:
|
|
111
|
+
- cp2077.history.modsettings-annotation-keys
|
|
112
|
+
- cp2077.history.dev-scripts-never-ship
|
|
113
|
+
manual:
|
|
114
|
+
- title: Confirm the control renders
|
|
115
|
+
steps:
|
|
116
|
+
- "Load the game with the mod active and open the main menu's MOD SETTINGS entry (the page Mod Settings adds beside Settings, not Settings → Mods)."
|
|
117
|
+
- "Find \"${input.displayName}\" under \"${input.category}\" and confirm it renders as a ${input.settingType} control with default ${input.defaultValue}."
|
|
118
|
+
expected: "The control renders in the Mod Settings page and persists its value across a restart — the one step that is always confirmed by a person."
|
|
119
|
+
claim:
|
|
120
|
+
idSuffix: menu-control
|
|
121
|
+
claim: "${input.settingName} on ${input.className} renders as a ${input.settingType} control named \"${input.displayName}\" in the Mod Settings page."
|
|
122
|
+
testRows:
|
|
123
|
+
- gate: MS-1
|
|
124
|
+
title: "RED4ext/CET log shows the plugin loaded with no error"
|
|
125
|
+
expected: "The game log shows ${input.className} loaded with no redscript compile or runtime error."
|
|
126
|
+
manual: true
|
|
127
|
+
probeKinds: []
|
|
128
|
+
- gate: MS-2
|
|
129
|
+
title: "Control renders in the Mod Settings page"
|
|
130
|
+
expected: "A human confirms the control renders and its value persists — never automated."
|
|
131
|
+
manual: true
|
|
132
|
+
probeKinds: []
|
|
133
|
+
evidence: ["ModWright research"]
|