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,154 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: process.assetbuild
|
|
3
|
+
title: Process lessons from a melee weapon mod build (non-animation)
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.process.assetbuild.reasoning-chain-broke-at-flag-vs-resolved-value
|
|
6
|
+
claim: A plausible-sounding multi-step inference chain ("the idle_thermal desc renders, and the
|
|
7
|
+
function that requests it only fires for Thermal-type weapons, therefore this weapon's
|
|
8
|
+
resolved damage type is Thermal, therefore the engine wants the trail_thermal effect name")
|
|
9
|
+
can be wrong at its final step even when every earlier step is individually true, because a
|
|
10
|
+
gameplay FLAG (DealsThermalDamage) and the engine's actually RESOLVED value
|
|
11
|
+
(GetCurrentDamageType(), from comparing stat values) are not the same thing and can disagree.
|
|
12
|
+
status: inferred
|
|
13
|
+
source: ModWright research
|
|
14
|
+
tags:
|
|
15
|
+
- process
|
|
16
|
+
- reasoning
|
|
17
|
+
- flag-vs-resolved-value
|
|
18
|
+
- debugging
|
|
19
|
+
detail: Cost three relaunch cycles before a logging probe (49/49 requests for "trail_physical")
|
|
20
|
+
settled it. Shipping both possible effect names looked like it made the question moot; it did
|
|
21
|
+
not, because both names had been pointed at the same wrong effect. See
|
|
22
|
+
cp2077.fx.effects.trail-name-resolved-from-damage-comparison for the underlying game fact this
|
|
23
|
+
reasoning failure was about.
|
|
24
|
+
- id: cp2077.process.assetbuild.probe-must-read-a-discriminating-public-getter
|
|
25
|
+
claim: A debug probe that only logs that a shared method fired proves nothing about a SPECIFIC
|
|
26
|
+
object's behavior, because other objects (e.g. every NPC) run the same shared code path; a
|
|
27
|
+
probe must instead read a public getter or property that is specific to the object under test
|
|
28
|
+
(e.g. HasTag(n"<ModWeapon>") plus the public GetCurrentMeleeTrailEffectName() getter) to
|
|
29
|
+
actually discriminate between "this object's path is dead" and "this object's path works but
|
|
30
|
+
is invisible."
|
|
31
|
+
status: inferred
|
|
32
|
+
source: ModWright research
|
|
33
|
+
tags:
|
|
34
|
+
- process
|
|
35
|
+
- debugging
|
|
36
|
+
- probe
|
|
37
|
+
- methodology
|
|
38
|
+
detail: The probe's first revision (<Mod>_TrailProbe.reds v1) logged that
|
|
39
|
+
StartCurrentMeleeTrailEffect fired and was over-read as proof the trigger worked for this
|
|
40
|
+
specific weapon; it proved nothing, since NPCs run the identical code. v2's two discriminating
|
|
41
|
+
facts, both via public API, are what actually broke the deadlock.
|
|
42
|
+
- id: cp2077.process.assetbuild.control-must-be-conspicuous-under-test-conditions
|
|
43
|
+
claim: A control case chosen to validate a debugging setup must be proven conspicuous UNDER THE
|
|
44
|
+
SPECIFIC CONDITIONS the test exercises, not merely proven to render or work in general; an
|
|
45
|
+
effect that is obviously visible while idle can still be a useless control for a fast, narrow
|
|
46
|
+
event window, because it may emit almost nothing inside that window.
|
|
47
|
+
status: inferred
|
|
48
|
+
source: ModWright research
|
|
49
|
+
tags:
|
|
50
|
+
- process
|
|
51
|
+
- debugging
|
|
52
|
+
- control
|
|
53
|
+
- bisect
|
|
54
|
+
- methodology
|
|
55
|
+
detail: Two bisects were wasted picking the mantis idle haze/smoke as "known good because it renders
|
|
56
|
+
on this weapon" — an ambient effect that, when pulsed into a fast swing's 0.3 s trail window,
|
|
57
|
+
emits almost nothing, so "I can't see it" could never distinguish a dead trigger path from a
|
|
58
|
+
merely-invisible one. This sharpens the general isolation lesson already recorded as
|
|
59
|
+
cp2077.process.control-experiment-testing and cp2077.process.bisect-silent-failures with a
|
|
60
|
+
concrete new failure mode. A duplicate of this rule previously also sat in the fx.effects
|
|
61
|
+
topic and was merged here.
|
|
62
|
+
- id: cp2077.process.assetbuild.rht-hot-folder-banned-for-whole-mesh-archives
|
|
63
|
+
claim: RedHotTools' archive\pc\hot hot-reload folder is safe for many kinds of resource-level
|
|
64
|
+
hot-reload, but whole-archive hot ingest of an archive containing a MOUNTED WEAPON MESH
|
|
65
|
+
re-reads geometry buffers with mismatched offsets, exploding vertices across the screen until
|
|
66
|
+
the game is restarted; for a mesh-carrying archive, deploy cold (game closed) only.
|
|
67
|
+
status: verified
|
|
68
|
+
source: ModWright field verification
|
|
69
|
+
tags:
|
|
70
|
+
- process
|
|
71
|
+
- toolchain
|
|
72
|
+
- redhottools
|
|
73
|
+
- hot-reload
|
|
74
|
+
- mesh
|
|
75
|
+
- crash
|
|
76
|
+
detail: "The mesh deploy script's own conclusion: \"meshes 'hot-reload fine' applied to the
|
|
77
|
+
resource-level reloads of the past, not whole-archive swaps.\" The script also actively
|
|
78
|
+
removes any stale copy left in archive\\pc\\hot after a successful cold deploy, since that
|
|
79
|
+
folder is a watcher that auto-ingests on its own schedule and running a parallel copy to `mod`
|
|
80
|
+
as well risks a crash from double writers (noted separately in the project's own RHT-flow
|
|
81
|
+
notes)."
|
|
82
|
+
- id: cp2077.process.assetbuild.stale-serialized-sidecar-can-resurrect-old-geometry
|
|
83
|
+
claim: A stale serialized .mesh.json sidecar left next to a freshly rebuilt .mesh binary can
|
|
84
|
+
resurrect old geometry if a later step re-reads the sidecar instead of the fresh binary;
|
|
85
|
+
deploy scripts should delete any such sidecar and re-serialize fresh from the current binary
|
|
86
|
+
at deploy time, every time, rather than trusting an existing sidecar.
|
|
87
|
+
status: inferred
|
|
88
|
+
source: ModWright research
|
|
89
|
+
tags:
|
|
90
|
+
- process
|
|
91
|
+
- toolchain
|
|
92
|
+
- mesh
|
|
93
|
+
- sidecar
|
|
94
|
+
- stale-data
|
|
95
|
+
detail: 'Recorded as having "already resurrected old geometry once in this project." The fix in the
|
|
96
|
+
deploy script: `Remove-Item "$Stage.json"` then `convert serialize` fresh, every deploy,
|
|
97
|
+
before packing.'
|
|
98
|
+
- id: cp2077.process.assetbuild.mesh-and-textures-are-a-matched-pair-requiring-joint-rebuild
|
|
99
|
+
claim: An export pipeline step that discards ALL UV layers and re-runs automatic unwrapping on every
|
|
100
|
+
export (rather than preserving a stable UV layout across edits) means ANY geometry edit
|
|
101
|
+
re-lays the UV islands; textures already baked against the previous layout then sample the
|
|
102
|
+
wrong part of the atlas — observed as visible black patches on an emissive surface. The mesh
|
|
103
|
+
and its baked textures must therefore always be treated as a matched pair and rebuilt
|
|
104
|
+
together, never independently.
|
|
105
|
+
status: verified
|
|
106
|
+
source: ModWright field verification
|
|
107
|
+
tags:
|
|
108
|
+
- process
|
|
109
|
+
- mesh
|
|
110
|
+
- uv
|
|
111
|
+
- texture
|
|
112
|
+
- matched-pair
|
|
113
|
+
detail: "Measured extent of the relay after the v5 detail pass: all 4932 of one submesh's UV loops
|
|
114
|
+
moved, up to 0.986 UV units. The deploy script enforces this with an explicit staleness gate
|
|
115
|
+
comparing file modification times of the blend, the exported glb, and all baked textures,
|
|
116
|
+
throwing before packing if any texture predates the blend."
|
|
117
|
+
- id: cp2077.process.assetbuild.wolvenkit-import-keep-flag-wipes-bone-vertex-epsilons
|
|
118
|
+
claim: WolvenKit.CLI `import -k` (import keeping materials/appearances) preserves the material and
|
|
119
|
+
appearance chunks of a target .mesh but WIPES the boneVertexEpsilons field to an empty list /
|
|
120
|
+
zero; that field is what stops the mesh being frustum-culled away from its attachment bone, so
|
|
121
|
+
a zeroed value makes the mesh blink out at off-angles in game — a failure mode invisible in
|
|
122
|
+
every offline preview, because the geometry itself is unchanged and perfect.
|
|
123
|
+
status: verified
|
|
124
|
+
source: ModWright field verification
|
|
125
|
+
tags:
|
|
126
|
+
- process
|
|
127
|
+
- toolchain
|
|
128
|
+
- wolvenkit
|
|
129
|
+
- mesh
|
|
130
|
+
- bone-vertex-epsilon
|
|
131
|
+
- silent-failure
|
|
132
|
+
detail: Shipped value is 3.0; the verify gate treats anything below 0.1 as the import bug. A restore
|
|
133
|
+
script exists purely to put the value back (serialize -> set field -> deserialize) after every
|
|
134
|
+
`import -k`, and is idempotent when run on a mesh that already has the right value.
|
|
135
|
+
- id: cp2077.process.assetbuild.asset-attribution-pattern-donor-and-vanilla-strip
|
|
136
|
+
claim: A weapon-adjacent asset (here, a spawnable weapon-light entity) can be rebuilt from a vanilla
|
|
137
|
+
donor by the same structural-strip technique originally learned from a third-party mod's
|
|
138
|
+
asset, closing a license question without losing the working structure — the third-party mod's
|
|
139
|
+
author is still credited for the PATTERN even after the shipped asset no longer derives from
|
|
140
|
+
their file.
|
|
141
|
+
status: inferred
|
|
142
|
+
source: ModWright research
|
|
143
|
+
tags:
|
|
144
|
+
- process
|
|
145
|
+
- attribution
|
|
146
|
+
- license
|
|
147
|
+
- donor
|
|
148
|
+
- vanilla
|
|
149
|
+
detail: "Extends the general asset-attribution practice already recorded as
|
|
150
|
+
cp2077.process.asset-attribution with a concrete pattern: keanuWheeze is credited for the
|
|
151
|
+
flashlight light-entity PATTERN even though the shipped light entity was rebuilt from vanilla
|
|
152
|
+
spotlight_a.ent specifically to remove the third-party-derivation question — CDPR's
|
|
153
|
+
fan-content policy is treated as covering the vanilla-derived version without needing separate
|
|
154
|
+
credit, per the project's stated interpretation."
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: process.lessons
|
|
3
|
+
title: Standing rules, debugging patterns, and development process lessons
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.process.manual-first-principle
|
|
6
|
+
claim: If a manual/gui path is >99% likely to work and the headless path is unproven, offer the
|
|
7
|
+
manual path first. A world-sector authoring effort violated this rule; the lesson is applied
|
|
8
|
+
going forward.
|
|
9
|
+
status: verified
|
|
10
|
+
source: ModWright field verification
|
|
11
|
+
tags:
|
|
12
|
+
- process
|
|
13
|
+
- manual
|
|
14
|
+
- gui
|
|
15
|
+
- headless
|
|
16
|
+
- principle
|
|
17
|
+
- sector
|
|
18
|
+
detail: "The concrete shape of the rule for world placement: the user runs WolvenKit GUI + Script
|
|
19
|
+
Manager's Object Spawner import on their own entSpawner export, packs and installs from the
|
|
20
|
+
GUI and tests a vanilla control case; only then is the custom case and loot table injected
|
|
21
|
+
into the GENERATED (proven) sector. That is what finally worked — \"resolved — Option B
|
|
22
|
+
injection worked\". Hand-authoring a sector from guessed field values is the anti-pattern the
|
|
23
|
+
rule was written against. The in-game verified_on/verified_by this fact carried were
|
|
24
|
+
fabricated; it is a user instruction, not an engine observation."
|
|
25
|
+
- id: cp2077.process.control-experiment-testing
|
|
26
|
+
claim: When debugging world placement or entity issues, place a vanilla control entity alongside the
|
|
27
|
+
custom one at a known offset; test render, loot, and interaction separately to isolate whether
|
|
28
|
+
the bug is in the entity, appearance, or sector.
|
|
29
|
+
status: verified
|
|
30
|
+
verified_on: "2.31"
|
|
31
|
+
source: ModWright field verification
|
|
32
|
+
tags:
|
|
33
|
+
- testing
|
|
34
|
+
- control
|
|
35
|
+
- diagnosis
|
|
36
|
+
- isolation
|
|
37
|
+
detail: "Run as node 0 (custom case) and node 1 (untouched vanilla common_suitcase_small.ent, +1.5m
|
|
38
|
+
in x, identical loot instanceData). Its real payoff was negative: the \"still
|
|
39
|
+
invisible/unlootable\" branch fired, which is what stopped the hand-authoring and sent the
|
|
40
|
+
placement through the official entSpawner import. The claim's three-way isolation is the
|
|
41
|
+
intent, not a demonstrated outcome — see cp2077.sectors.custom-ent-vs-vanilla-control, which
|
|
42
|
+
is unverified."
|
|
43
|
+
- id: cp2077.process.entspawner-as-reference
|
|
44
|
+
claim: Use entspawner to place a vanilla entity in-game and export the project as a reference; the
|
|
45
|
+
export reveals correct sector structure, appearance names, streaming values, and
|
|
46
|
+
category/level settings for hand-authored sectors.
|
|
47
|
+
status: verified
|
|
48
|
+
verified_on: "2.31"
|
|
49
|
+
source: ModWright field verification
|
|
50
|
+
tags:
|
|
51
|
+
- entspawner
|
|
52
|
+
- reference
|
|
53
|
+
- export
|
|
54
|
+
- sector
|
|
55
|
+
- authoring
|
|
56
|
+
detail: entSpawner is worldBuilder v1.0.81, installed from GitHub after the previous install turned
|
|
57
|
+
out to be a hollow Vortex skeleton. The export revealed category "Exterior" level 1, the full
|
|
58
|
+
appearance name suitcase_small_neomilitary_a, the placement (-835.758, 328.628, 7.884) and
|
|
59
|
+
streaming values MaxStreamingDistance 120 / UkFloat1 100 / Uk10 1056 / Uk11 512. The sector
|
|
60
|
+
builder script was rebuilt from those values, but the sector that shipped was the one
|
|
61
|
+
WolvenKit's official entSpawner import script generated, with loot injected by a separate
|
|
62
|
+
script.
|
|
63
|
+
- id: cp2077.process.cet-mods-sandboxed
|
|
64
|
+
claim: cet mods run in a sandboxed lua environment; console access is via `GetMod("ModName")`, and
|
|
65
|
+
each mod's init.lua must return a table with methods that the console can call.
|
|
66
|
+
status: verified
|
|
67
|
+
verified_on: "2.31"
|
|
68
|
+
source: ModWright field verification
|
|
69
|
+
tags:
|
|
70
|
+
- cet
|
|
71
|
+
- mod
|
|
72
|
+
- sandbox
|
|
73
|
+
- lua
|
|
74
|
+
- console
|
|
75
|
+
detail: The lesson requires init.lua to return a table; it does not require the table to have
|
|
76
|
+
methods. An example CET mod's init.lua registers an onUpdate handler and returns an empty
|
|
77
|
+
table `{}`, so a `GetMod("<Mod>").Status()` console line would not resolve against it.
|
|
78
|
+
- id: cp2077.process.tweakxl-hot-reload
|
|
79
|
+
claim: tweakxl yaml tweaks can be hot-reloaded in-game via `TweakXL.Reload()` in the cet console
|
|
80
|
+
without restarting the game; this is the fastest iteration path for tweaks and records.
|
|
81
|
+
status: verified
|
|
82
|
+
verified_on: "2.31"
|
|
83
|
+
source: ModWright field verification
|
|
84
|
+
tags:
|
|
85
|
+
- tweakxl
|
|
86
|
+
- hot-reload
|
|
87
|
+
- cet
|
|
88
|
+
- console
|
|
89
|
+
- yaml
|
|
90
|
+
detail: 'The iteration loop this enabled: edit yaml, copy to r6\tweaks, TweakXL.Reload(), spawn with
|
|
91
|
+
Game.AddToInventory("Items.<Preset>", 1), read the in-game panel. Archive changes get no such
|
|
92
|
+
path — they need a restart. Call spelled TweakXL.Reload() (the lowercase form previously in
|
|
93
|
+
this file was wrong).'
|
|
94
|
+
- id: cp2077.process.tweakdb-ground-truth
|
|
95
|
+
claim: tweakdb ground truth is the vanilla `tools\redmod\tweaks\` folder (2,684 files); when
|
|
96
|
+
documentation and wiki disagree, check the actual vanilla record definitions in the source.
|
|
97
|
+
status: verified
|
|
98
|
+
source: ModWright field verification
|
|
99
|
+
tags:
|
|
100
|
+
- tweakdb
|
|
101
|
+
- ground-truth
|
|
102
|
+
- vanilla
|
|
103
|
+
- source
|
|
104
|
+
- documentation
|
|
105
|
+
detail: The vanilla patterns a weapon mod copies (Quality.Random +
|
|
106
|
+
CraftableIconicQualityRandomisation, the SilencerBase stat pair, the
|
|
107
|
+
ma_wbr_jpn_20_Igla_Sovereign_recipe_loot_table level-band structure) all come from that
|
|
108
|
+
corpus. In-game verified_on/verified_by removed — this is about files on disk.
|
|
109
|
+
- id: cp2077.process.never-regex-version-strings
|
|
110
|
+
claim: Never derive script or record versions using regex substitution; version strings have
|
|
111
|
+
internal encoding (dot bugs, underscore rules) that silently fail to match after regex. Copy
|
|
112
|
+
files and use the Edit tool instead.
|
|
113
|
+
status: verified
|
|
114
|
+
source: ModWright field verification
|
|
115
|
+
tags:
|
|
116
|
+
- automation
|
|
117
|
+
- regex
|
|
118
|
+
- version
|
|
119
|
+
- pitfall
|
|
120
|
+
- encoding
|
|
121
|
+
detail: The recorded instance is the v20/v21 dot bug while iterating a series of kitbash scripts (v1
|
|
122
|
+
through v22). In-game verified_on/verified_by removed — this is an authoring-tool trap.
|
|
123
|
+
- id: cp2077.process.bisect-silent-failures
|
|
124
|
+
claim: "When debugging silent failures (invisible entities, unlootable containers, unresolved
|
|
125
|
+
resources), bisect the changes: create a minimal control case, remove one change at a time,
|
|
126
|
+
and re-test. Isolate the exact field causing failure."
|
|
127
|
+
status: verified
|
|
128
|
+
source: ModWright field verification
|
|
129
|
+
tags:
|
|
130
|
+
- debugging
|
|
131
|
+
- bisect
|
|
132
|
+
- silent-failure
|
|
133
|
+
- isolation
|
|
134
|
+
detail: "Honest outcome: bisecting the ent-derived loot chunk did NOT isolate the field the
|
|
135
|
+
RedPackage json reader rejected — the project's notes say it \"was never identified\" — and
|
|
136
|
+
the work moved to a transplanted reference chunk instead. Bisecting is worth doing; the
|
|
137
|
+
claim's final sentence (\"isolate the exact field\") is not always achievable. See
|
|
138
|
+
cp2077.toolchain.redpackage-reader-rejects-unidentified-field. In-game verified_on/verified_by
|
|
139
|
+
removed."
|
|
140
|
+
- id: cp2077.process.template-transplant-vs-blind-authoring
|
|
141
|
+
claim: When a silent-failure field remains unidentified after bisecting, transplant the entire
|
|
142
|
+
structure from a known-working template rather than continue blind authoring. This is faster
|
|
143
|
+
and more reliable than trying to guess the field semantics.
|
|
144
|
+
status: verified
|
|
145
|
+
verified_on: "2.31"
|
|
146
|
+
source: ModWright field verification
|
|
147
|
+
tags:
|
|
148
|
+
- template
|
|
149
|
+
- transplant
|
|
150
|
+
- authoring
|
|
151
|
+
- blind
|
|
152
|
+
- reliability
|
|
153
|
+
detail: The working chunk came from a modded ShardCaseContainer node in AldecaldosHighStakes, saved
|
|
154
|
+
as a reference sector json. Both builder scripts deep-copy that node's instanceData, set $type
|
|
155
|
+
to LootContainerObjectAnimatedByTransform, pop itemTDBID and shardMesh, and overwrite
|
|
156
|
+
lootTables / lootQuality / containerType. The case that ships loots, so the transplant is
|
|
157
|
+
confirmed in game.
|
|
158
|
+
- id: cp2077.process.case-pose-vs-state-lesson
|
|
159
|
+
claim: "A mesh's authored pose (how it's modeled in blender/3D) is distinct from entity animation
|
|
160
|
+
state; confusion between these causes misdirected debugging. Lesson: \"was the mesh pose, not
|
|
161
|
+
state.\""
|
|
162
|
+
status: verified
|
|
163
|
+
verified_on: "2.31"
|
|
164
|
+
source: ModWright field verification
|
|
165
|
+
tags:
|
|
166
|
+
- mesh
|
|
167
|
+
- pose
|
|
168
|
+
- state
|
|
169
|
+
- animation
|
|
170
|
+
- debugging
|
|
171
|
+
supersedes: cp2077.entities.case-open-is-entity-state
|
|
172
|
+
detail: 'The vanilla gun-case meshes are authored open, exterior-up. The fix was geometric — the
|
|
173
|
+
lid-building script spins the lid 180° about Z and seats it on the bottom by bbox math — not a
|
|
174
|
+
state fix. Note the tail of the earlier version of this fact ("then remove the animator") is
|
|
175
|
+
itself superseded: the shipped case keeps its gameTransformAnimatorComponent and animates open
|
|
176
|
+
(cp2077.entities.transform-animator-open-anim).'
|
|
177
|
+
- id: cp2077.process.asset-attribution
|
|
178
|
+
claim: When reusing chunks, materials, or other assets from another mod, document the source and
|
|
179
|
+
author attribution; nexus ToS requires consent and proper attribution for reused work.
|
|
180
|
+
status: community
|
|
181
|
+
source: ModWright research
|
|
182
|
+
tags:
|
|
183
|
+
- attribution
|
|
184
|
+
- reuse
|
|
185
|
+
- asset
|
|
186
|
+
- permission
|
|
187
|
+
- nexus
|
|
188
|
+
detail: "What these sources support is the practice: the example project names its base-asset and
|
|
189
|
+
tool authors on its Nexus page and in its README, and its notes name the mod the loot chunk
|
|
190
|
+
was adapted from. The claim's second half — what Nexus's terms of service require — came from
|
|
191
|
+
an internal note and has no citable source here, so do not treat it as established. A
|
|
192
|
+
fabricated in-game verified attribution was removed."
|
|
193
|
+
- id: cp2077.process.headless-render-for-qa
|
|
194
|
+
claim: Headless blender renders (via --background --python scripts) can be used for visual QA of
|
|
195
|
+
icons and models without launching the game; this speeds iteration on visual assets.
|
|
196
|
+
status: verified
|
|
197
|
+
source: ModWright field verification
|
|
198
|
+
tags:
|
|
199
|
+
- headless
|
|
200
|
+
- render
|
|
201
|
+
- blender
|
|
202
|
+
- qa
|
|
203
|
+
- visual
|
|
204
|
+
detail: Four headless render scripts exist for exactly this reason, and the rendered pngs are kept
|
|
205
|
+
alongside them. In-game verified_on/verified_by removed — nothing here is observed in the
|
|
206
|
+
engine.
|
|
207
|
+
- id: cp2077.process.cet-cleanup-continuous
|
|
208
|
+
claim: A cet cleanup mod can run continuously (every 3s) to remove debug/legacy entities spawned
|
|
209
|
+
during development; this allows rapid iteration without manual cleanup between test runs.
|
|
210
|
+
status: verified
|
|
211
|
+
verified_on: "2.31"
|
|
212
|
+
source: ModWright field verification
|
|
213
|
+
tags:
|
|
214
|
+
- cet
|
|
215
|
+
- cleanup
|
|
216
|
+
- debug
|
|
217
|
+
- automation
|
|
218
|
+
- iteration
|
|
219
|
+
detail: "init.lua accumulates dt in an onUpdate handler, and every 3 seconds deletes every dynamic
|
|
220
|
+
entity carrying either of the mod's two cleanup tags via
|
|
221
|
+
GetDynamicEntitySystem():GetTaggedIDs. The one-shot version of this failed: it missed
|
|
222
|
+
late-streaming persistent entities and left two overlapping, unlootable cases. The mod is
|
|
223
|
+
author-only and is not shipped to users."
|
|
224
|
+
- id: cp2077.process.world-placement-via-blender-script
|
|
225
|
+
claim: Python scripts (a sector builder, a lid builder) can programmatically generate sector json,
|
|
226
|
+
mesh edits, and placement coordinates from blender math; this allows reproducible world
|
|
227
|
+
placement without manual json authoring.
|
|
228
|
+
status: inferred
|
|
229
|
+
source: ModWright research
|
|
230
|
+
tags:
|
|
231
|
+
- scripting
|
|
232
|
+
- python
|
|
233
|
+
- sector
|
|
234
|
+
- placement
|
|
235
|
+
- reproducible
|
|
236
|
+
detail: "True as far as it goes, with the sector saga's caveat attached: the sector builder's fully
|
|
237
|
+
hand-generated sector never shipped. What shipped is the minimal-diff approach of a
|
|
238
|
+
loot-injection script — \"Inject loot instanceData into the OFFICIAL entSpawner-generated
|
|
239
|
+
sector. Minimal change: everything else in the file stays byte-identical.\" The lid builder's
|
|
240
|
+
geometry (180° Z spin, bbox seating, raycast plaque placement) did ship. Fabricated in-game
|
|
241
|
+
verified attribution removed."
|
|
242
|
+
- id: cp2077.process.incremental-test-cycles
|
|
243
|
+
claim: "Develop in short cycles: change one thing, test in-game (yaml via hot-reload or entity spawn
|
|
244
|
+
via cet), read results (panels, logs, visual feedback), iterate. Avoid long chains of untested
|
|
245
|
+
changes."
|
|
246
|
+
status: verified
|
|
247
|
+
verified_on: "2.31"
|
|
248
|
+
source: ModWright field verification
|
|
249
|
+
tags:
|
|
250
|
+
- testing
|
|
251
|
+
- cycle
|
|
252
|
+
- iteration
|
|
253
|
+
- rapid-feedback
|
|
254
|
+
detail: "The worked example is the damage tuning: DamagePerHit -0.25 read 278 at T5, -0.104 read 333
|
|
255
|
+
(the yaml's own arithmetic predicted 332), each pass via TweakXL.Reload() and a fresh spawn.
|
|
256
|
+
Contrast the sector work, where long chains of untested json changes cost the most time in the
|
|
257
|
+
project."
|
|
258
|
+
- id: cp2077.process.scripted-spacebar-at-main-menu-unreliable
|
|
259
|
+
claim: 'Sending a spacebar to the Cyberpunk 2077 window from a script (`AppActivate` +
|
|
260
|
+
`SendKeys::SendWait(" ")`) to pass the press-any-key screen is unreliable: it can fail with
|
|
261
|
+
the window title present, so a non-empty MainWindowTitle is not proof of real input focus for
|
|
262
|
+
a DirectX game.'
|
|
263
|
+
status: verified
|
|
264
|
+
verified_on: "2.31"
|
|
265
|
+
source: ModWright field verification
|
|
266
|
+
tags:
|
|
267
|
+
- process
|
|
268
|
+
- launch
|
|
269
|
+
- automation
|
|
270
|
+
- sendkeys
|
|
271
|
+
- focus
|
|
272
|
+
- unattended
|
|
273
|
+
detail: Scripted launches with no one at the keyboard that need the key should treat it as a step a
|
|
274
|
+
person may have to do, or use a mechanism that does not depend on foreground focus. The same
|
|
275
|
+
session also could not decode the CET overlay key from bindings.json's packed integer, so
|
|
276
|
+
console input was pasted by hand.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: quests.minor
|
|
3
|
+
title: Vanilla minor quests - their folders, phases, facts and items, as read for mod gating
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.quests.minor.spellbound-is-mq015-wizardbook
|
|
6
|
+
claim: "Spellbound (Nix's book quest) is the minor quest mq015_wizardbook (journal path
|
|
7
|
+
quests/minor_quest/mq015_wizardbook), in base\\quest\\minor_quests\\mq015\\. Its phases:
|
|
8
|
+
mq015_01_hook, mq015_02_restaurant (and _combat), mq015_03_stash, mq015_04_afterlife. The
|
|
9
|
+
stash phase grants QuestRewards.mq015_found_wizardbook, and the book is the item
|
|
10
|
+
Items.mq015_wizardbook_encrypted. Its ItemAction.Crack makes Items.mq015_wizardbook_decrypted.
|
|
11
|
+
The Afterlife phase opens with the objective 04_afterlife/01_get_back_nix, checks the fact
|
|
12
|
+
mq015_decrypted_wizardbook, and at the end sets mq015_done to 1 and mq015_active to 0. Nix's
|
|
13
|
+
reward includes the recipes Items.Recipe_DisableCyberwareProgram and
|
|
14
|
+
Items.Recipe_WeaponMalfunctionProgram."
|
|
15
|
+
status: verified
|
|
16
|
+
verified_on: "2.31"
|
|
17
|
+
source: base\quest\minor_quests\mq015\mq015_wizardbook.quest and phases\mq015_0*.questphase; TweakDB
|
|
18
|
+
Items.mq015_wizardbook_encrypted, Items.mq015_wizardbook_decrypted,
|
|
19
|
+
QuestRewards.mq015_found_wizardbook
|
|
20
|
+
tags:
|
|
21
|
+
- quest
|
|
22
|
+
- minor-quest
|
|
23
|
+
- mq015
|
|
24
|
+
- spellbound
|
|
25
|
+
- nix
|
|
26
|
+
- facts
|
|
27
|
+
- journal
|
|
28
|
+
detail: 'For a gate on "V has progressed to the point of having the book, or further": V holds
|
|
29
|
+
either book item, or mq015_done >= 1. Where mq015_decrypted_wizardbook is set was not found in
|
|
30
|
+
these phases.'
|
|
31
|
+
- id: cp2077.quests.minor.kold-mirage-is-mq016-bartmoss
|
|
32
|
+
claim: Kold Mirage (Nix's Bartmoss quest) is the minor quest mq016_bartmoss, in
|
|
33
|
+
base\quest\minor_quests\mq016\. Its phases are mq016_00_shard, mq016_01_freezer and
|
|
34
|
+
mq016_02_afterlife. Its entities are mq016_bartmoss_cyberdeck, mq016_coffin and mq016_fusebox.
|
|
35
|
+
status: verified
|
|
36
|
+
verified_on: "2.31"
|
|
37
|
+
source: .modwright-cache/cyberpunk2077/vanilla.sqlite resource rows under
|
|
38
|
+
base\quest\minor_quests\mq016\
|
|
39
|
+
tags:
|
|
40
|
+
- quest
|
|
41
|
+
- minor-quest
|
|
42
|
+
- mq016
|
|
43
|
+
- kold-mirage
|
|
44
|
+
- nix
|
|
45
|
+
detail: The side_quests folders sq017 and sq012 are Kerry Eurodyne's questline and the Peralez "law"
|
|
46
|
+
quest, not these two.
|