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,215 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: clothing.refits
|
|
3
|
+
title: ArchiveXL body types and the Blender garment-refit workflow
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.clothing.refits.body-mod-version-floor
|
|
6
|
+
claim: 'The body-mods page states a "Minimum required ArchiveXL version: 1.5". The older method of
|
|
7
|
+
adding the component to each individual appearance still works, but the page directs modders
|
|
8
|
+
to the new method "(for version >= 1.14)" as more robust and less tedious.'
|
|
9
|
+
status: community
|
|
10
|
+
source: "wiki.redmodding.org \"ArchiveXL: body mods and refits\", section \"Summary\" (front-matter
|
|
11
|
+
line) and the info hint under \"Wait, that's not what I want!\""
|
|
12
|
+
tags:
|
|
13
|
+
- archivexl
|
|
14
|
+
- body-mod
|
|
15
|
+
- version-floor
|
|
16
|
+
detail: Framework versions on ArchiveXL's own numbering, so they stay in the claim with no
|
|
17
|
+
`verified_on`. The archived old method is kept on the wiki as
|
|
18
|
+
"archived-registering-the-body-tag". Section name corrected 2026-09-07 (there is no "Version
|
|
19
|
+
Requirements" heading).
|
|
20
|
+
- id: cp2077.clothing.refits.default-body-tag-is-base-body
|
|
21
|
+
claim: "\"If no body mod is installed, the value will be `base_body`\" — so `base_body` is what a
|
|
22
|
+
dynamic appearance's `{body}` substitution resolves to on an unmodified install, and mesh
|
|
23
|
+
files and folders must be named accordingly."
|
|
24
|
+
status: community
|
|
25
|
+
source: 'wiki.redmodding.org "ArchiveXL: body mods and refits", section "Clothing mods: Making use
|
|
26
|
+
of the tags > Dynamic Appearances" (warning hint)'
|
|
27
|
+
tags:
|
|
28
|
+
- archivexl
|
|
29
|
+
- body-mod
|
|
30
|
+
- base-body
|
|
31
|
+
- default
|
|
32
|
+
detail: The same hint notes `base_body` is also the value for body mods that are vanilla-shaped,
|
|
33
|
+
naming EVB and VTK Vanilla HD FemV. Section name corrected 2026-09-07.
|
|
34
|
+
- id: cp2077.clothing.refits.bodytypes-key-snake-cases-name
|
|
35
|
+
claim: "A custom body type is declared in a `.xl` file as `player: bodyTypes: [ CustomName ]`; for
|
|
36
|
+
substitutions ArchiveXL converts that name to snake case, so `BoobsForBackProblems` is
|
|
37
|
+
consumed as `boobs_for_back_problems` and `Adonis` as `adonis`."
|
|
38
|
+
status: community
|
|
39
|
+
source: "wiki.redmodding.org \"ArchiveXL: body mods and refits\", section \"1. Registering the body
|
|
40
|
+
mod\" (the yaml block's inline comment \"for substitutions, this will be converted to snake
|
|
41
|
+
case\")"
|
|
42
|
+
tags:
|
|
43
|
+
- archivexl
|
|
44
|
+
- body-mod
|
|
45
|
+
- manifest
|
|
46
|
+
- bodytypes
|
|
47
|
+
- naming
|
|
48
|
+
- snake-case
|
|
49
|
+
detail: "Corrected 2026-09-07: the snake-case form is used for SUBSTITUTIONS only. Component names
|
|
50
|
+
keep the declared CamelCase form — see cp2077.clothing.refits.body-tag-patches-player-ent,
|
|
51
|
+
where the component is named `Body:BoobsForBackProblems`."
|
|
52
|
+
- id: cp2077.clothing.refits.body-tag-patches-player-ent
|
|
53
|
+
claim: Registering a body-mod tag means shipping a patch `.ent` whose `components` array holds an
|
|
54
|
+
`entMeshComponent` whose `name` matches the body mod in the form `Body:<CustomName>`, e.g.
|
|
55
|
+
`Body:BoobsForBackProblems`. The component name itself carries the tag identity; there is no
|
|
56
|
+
separate declared field.
|
|
57
|
+
status: community
|
|
58
|
+
source: 'wiki.redmodding.org "ArchiveXL: body mods and refits", section "2. Patch the player entity
|
|
59
|
+
files > Set up the patch .ent" (step 2)'
|
|
60
|
+
tags:
|
|
61
|
+
- archivexl
|
|
62
|
+
- body-mod
|
|
63
|
+
- resourcepatch
|
|
64
|
+
- entmeshcomponent
|
|
65
|
+
- naming
|
|
66
|
+
detail: "The page's own verification step is the CET snippet
|
|
67
|
+
`print(GetPlayer():FindComponentByName(\"Body:BoobsForBackProblems\"))`, or checking the
|
|
68
|
+
component in RedHotTools. A separate CET snippet reads the active body:
|
|
69
|
+
`print(Game.GetScriptableSystemsContainer():Get(\"PuppetStateSystem\"):GetBodyTypeSuffix(Item\
|
|
70
|
+
ID.new(), GetPlayer(), nil))`."
|
|
71
|
+
- id: cp2077.clothing.refits.body-patch-lists-gendered-player-ents
|
|
72
|
+
claim: "The patch `.ent` is registered through ArchiveXL resource patching, with the `.xl` block
|
|
73
|
+
`resource: patch: path\\to\\your\\patch_file.ent: - !include player_wa.ent - !include
|
|
74
|
+
player_ma.ent`. The wiki's instruction is \"Include only the relevant body gender!\", so a
|
|
75
|
+
female-only body mod lists only `player_wa.ent`."
|
|
76
|
+
status: community
|
|
77
|
+
source: 'wiki.redmodding.org "ArchiveXL: body mods and refits", section "2. Patch the player entity
|
|
78
|
+
files > Register the patch .ent"'
|
|
79
|
+
tags:
|
|
80
|
+
- archivexl
|
|
81
|
+
- body-mod
|
|
82
|
+
- resourcepatch
|
|
83
|
+
- gender
|
|
84
|
+
- manifest
|
|
85
|
+
detail: "Renamed from cp2077.clothing.refits.body-patch-must-list-both-genders on 2026-09-07: the
|
|
86
|
+
old claim said a patch \"must list the gendered player .ent paths it targets explicitly\",
|
|
87
|
+
which inverts the page's actual instruction to include only the relevant gender. Also of note:
|
|
88
|
+
the page's \"Invisible mesh for body xyz\" troubleshooting entry is forgetting a new body's
|
|
89
|
+
mesh in the resource-patch list."
|
|
90
|
+
- id: cp2077.clothing.refits.named-community-body-types
|
|
91
|
+
claim: "Registered body-mod tag names, with the lowercase substitution value used for `{body}` and
|
|
92
|
+
for `&body=value` conditional appearances — male V: Adonis/`adonis`, Atlas/`atlas`,
|
|
93
|
+
Gymfiend/`gymfiend`; female V: Lush/`lush`, Ult/`ult`, Solo_OG/`solo_og`, SoloArms/`soloarms`,
|
|
94
|
+
Song2/`song2`, Flat/`flat`, ELEGY/`elegy`, RB/`rb`, EBB/`ebb`, EBBP/`ebbp`, EBBRB/`ebbrb`,
|
|
95
|
+
EBBPRB/`ebbprb`, Angel/`angel`, EVE/`eve`, EVB/`evb`, VHD/`vhd`, Ishtar/`ishtar`,
|
|
96
|
+
Small/`small`, Big/`big`."
|
|
97
|
+
status: community
|
|
98
|
+
source: 'wiki.redmodding.org "ArchiveXL: body mods and refits", section "Supporting mods" (the two
|
|
99
|
+
tag tables)'
|
|
100
|
+
tags:
|
|
101
|
+
- archivexl
|
|
102
|
+
- body-mod
|
|
103
|
+
- naming
|
|
104
|
+
- community-convention
|
|
105
|
+
detail: "Corrected 2026-09-07: the page flags BOTH EVB and VHD (not EVB alone) with \"These tags are
|
|
106
|
+
not required unless your mod specially modifies body meshes for these body mods. Otherwise the
|
|
107
|
+
value is `base_body` since these bodies are Vanilla shaped.\" The previous claim's closing
|
|
108
|
+
sentence about a mod only needing to cover the body types it intends to support is not on this
|
|
109
|
+
page; the equivalent statement lives on the dynamic-variants guide (\"you only need to create
|
|
110
|
+
extra meshes where refits are needed\"). Section name corrected (there is no \"Body Type Tags
|
|
111
|
+
and Names\" heading)."
|
|
112
|
+
- id: cp2077.clothing.refits.akl-autofitter-tool
|
|
113
|
+
claim: "The AKL Autofitter, an auto-refitter by AllKnowingLion shipped with the WolvenKit Blender IO
|
|
114
|
+
Suite from version 1.5.0, automates conforming a garment mesh to a body mod: with a mesh
|
|
115
|
+
selected, find it under Mesh Tools in the CP77 panel, pick the target body from the dropdown,
|
|
116
|
+
and click the button."
|
|
117
|
+
status: community
|
|
118
|
+
source: 'wiki.redmodding.org "WKit Blender Plugin: AKL Autofitter", sections "Summary" and "How to
|
|
119
|
+
auto-refit"; version floor from "R&R: Refitting (step by step)", section "Step 4: Refitting"
|
|
120
|
+
(success hint, "Starting in version 1.5.0")'
|
|
121
|
+
tags:
|
|
122
|
+
- refit
|
|
123
|
+
- blender
|
|
124
|
+
- autofitter
|
|
125
|
+
- wolvenkit-blender-io-suite
|
|
126
|
+
- tool
|
|
127
|
+
detail: The refitting guide's hint adds that if you use the plugin instead of refitting by hand you
|
|
128
|
+
must select all the meshes first. Source corrected 2026-09-07 — the refitting page has no
|
|
129
|
+
"Autofitter Tool" section; the tool has its own page.
|
|
130
|
+
- id: cp2077.clothing.refits.manual-refit-proportional-editing
|
|
131
|
+
claim: Manual refitting exports the base body and the garment from WolvenKit as .glb, imports both
|
|
132
|
+
into one Blender file, hides the body armature, selects the garment meshes and edits them in
|
|
133
|
+
Edit Mode with Proportional Editing on at a low Proportional Size (0.1m). Proportional Editing
|
|
134
|
+
is chosen because it "leaves garment supports intact and prevents the risk of string cheese".
|
|
135
|
+
status: community
|
|
136
|
+
source: 'wiki.redmodding.org "R&R: Refitting (step by step)", sections "Step 2: Exporting the meshes
|
|
137
|
+
from WKit", "Step 3: Importing to Blender" and "Step 4: Refitting"'
|
|
138
|
+
tags:
|
|
139
|
+
- refit
|
|
140
|
+
- blender
|
|
141
|
+
- proportional-editing
|
|
142
|
+
- manual-workflow
|
|
143
|
+
detail: "Rationale corrected 2026-09-07: the page's stated reason is garment support and string
|
|
144
|
+
cheese, not smooth falloff/creases. The base body meshes are
|
|
145
|
+
`base\\characters\\common\\player_base_bodies\\player_female_average\\t0_000_pwa_base__full.m\
|
|
146
|
+
esh` and `...\\player_man_average\\t0_000_pma_base__full.mesh`. Tools used are scale (`S`) and
|
|
147
|
+
move (`G`), axis-locked with `X`/`Y`/`Z`; the mouse wheel scales the proportional radius once
|
|
148
|
+
a tool is active. Re-export overwrites the .glb that was originally imported."
|
|
149
|
+
- id: cp2077.clothing.refits.reimport-requires-garment-support-checkbox
|
|
150
|
+
claim: Reimporting a refitted mesh means selecting it in the Import Tool and checking the `Import
|
|
151
|
+
Garment Support` box, and doing the same for the second mesh and the emissive components
|
|
152
|
+
before importing.
|
|
153
|
+
status: community
|
|
154
|
+
source: 'wiki.redmodding.org "R&R: Refitting (step by step)", section "Step 6: Importing into
|
|
155
|
+
Wolvenkit"'
|
|
156
|
+
tags:
|
|
157
|
+
- refit
|
|
158
|
+
- wolvenkit
|
|
159
|
+
- garment-support
|
|
160
|
+
- import
|
|
161
|
+
- gotcha
|
|
162
|
+
detail: The page does not state what happens if the box is left unchecked; the previously recorded
|
|
163
|
+
consequence was trimmed on 2026-09-07. The closest stated consequence is on the string-cheese
|
|
164
|
+
workaround, where deleting the garment-support parameters "will destroy the automatic deform
|
|
165
|
+
when you put a jacket on".
|
|
166
|
+
- id: cp2077.clothing.refits.string-cheese-distortion-fix
|
|
167
|
+
claim: '"As of 8.9.1, Garment Support is still experimental. If your meshes look like string cheese
|
|
168
|
+
or twitch all over the place, you can delete the parameters. That will destroy the automatic
|
|
169
|
+
deform when you put a jacket on, but at least your mesh will work."'
|
|
170
|
+
status: community
|
|
171
|
+
source: 'wiki.redmodding.org "R&R: Refitting (step by step)", section "Step 6: Importing into
|
|
172
|
+
Wolvenkit" (info hint)'
|
|
173
|
+
tags:
|
|
174
|
+
- refit
|
|
175
|
+
- garment-support
|
|
176
|
+
- string-cheese
|
|
177
|
+
- bug
|
|
178
|
+
- workaround
|
|
179
|
+
detail: Section name corrected 2026-09-07 (the page's "Troubleshooting" section contains only the
|
|
180
|
+
viewport-shading entry, not this one). The full string-cheese treatment lives on the linked
|
|
181
|
+
troubleshooting-your-mesh-edits page.
|
|
182
|
+
- id: cp2077.clothing.refits.export-materials-checkbox-workaround
|
|
183
|
+
claim: "Known gotcha: if exporting a mesh from WolvenKit's Export Tool fails with \"Error while
|
|
184
|
+
finding the file: ...\\textures_netrunning_suit.mi\", uncheck \"Export Materials (default)\"
|
|
185
|
+
under Import/Export: Mesh (3d Model) in the export tool's settings panel and export again."
|
|
186
|
+
status: community
|
|
187
|
+
source: 'wiki.redmodding.org "R&R: Refitting (step by step)", section "Step 2: Exporting the meshes
|
|
188
|
+
from WKit" (the "Export failed: Error while finding file" box)'
|
|
189
|
+
tags:
|
|
190
|
+
- refit
|
|
191
|
+
- wolvenkit
|
|
192
|
+
- export
|
|
193
|
+
- bug
|
|
194
|
+
- workaround
|
|
195
|
+
detail: 'Renamed from cp2077.clothing.refits.export-tool-mesh-checkbox-workaround and corrected on
|
|
196
|
+
2026-09-07 on two counts: the checkbox is "Export Materials (default)" (Import/Export: Mesh
|
|
197
|
+
(3d Model) is the settings section it lives under, not the checkbox), and the failing export
|
|
198
|
+
is the WolvenKit -> .glb export in Step 2, not an export out of Blender.'
|
|
199
|
+
- id: cp2077.clothing.refits.viewport-shading-hides-clipping-colour
|
|
200
|
+
claim: The refitting guide recolours the imported body mesh (Material Properties tab -> uncheck "Use
|
|
201
|
+
Nodes" -> set a non-white base colour) so clipping is visible. If the colour does not show,
|
|
202
|
+
the fix is switching Blender's viewport to Viewport Shading (the third globe in the top-right
|
|
203
|
+
corner), not repainting.
|
|
204
|
+
status: community
|
|
205
|
+
source: 'wiki.redmodding.org "R&R: Refitting (step by step)", section "Step 3: Importing to Blender"
|
|
206
|
+
(step 5) and section "Troubleshooting > My mesh refuses to show any colours!"'
|
|
207
|
+
tags:
|
|
208
|
+
- refit
|
|
209
|
+
- blender
|
|
210
|
+
- viewport-shading
|
|
211
|
+
- gotcha
|
|
212
|
+
detail: "Renamed from cp2077.clothing.refits.viewport-shading-hides-vertex-colors on 2026-09-07: the
|
|
213
|
+
guide colourises via the material's base colour, not via vertex colours. (Vertex colour does
|
|
214
|
+
have a documented role elsewhere in Cyberpunk — see
|
|
215
|
+
cp2077.hair.modding.vertex-color-ao-convention — but not in this workflow.)"
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: codeware.overview
|
|
3
|
+
title: Codeware's resource, localization, reflection and compatibility utilities
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.codeware.overview.documentation-category-list
|
|
6
|
+
claim: "Codeware's own documentation groups its API surface under nine headings: Lifecycle, World,
|
|
7
|
+
Entities, Player, User Interface, Resources, Localization, Reflection and Utilities."
|
|
8
|
+
status: community
|
|
9
|
+
source: psiberx/cp2077-codeware/README.md, section "Documentation" (list)
|
|
10
|
+
tags:
|
|
11
|
+
- codeware
|
|
12
|
+
- overview
|
|
13
|
+
- documentation-structure
|
|
14
|
+
detail: cp2077.codeware.systems.yaml's existing facts are drawn from Lifecycle (scriptable
|
|
15
|
+
services), and from Player/World-adjacent systems (callback system, appearance refresh, static
|
|
16
|
+
entities, player system, wardrobe, vehicle unlock); this file's facts are drawn from the
|
|
17
|
+
remaining Resources, Localization and Reflection sections plus one World-adjacent
|
|
18
|
+
compatibility idiom.
|
|
19
|
+
- id: cp2077.codeware.overview.resource-depot-existence-checks
|
|
20
|
+
claim: "`GameInstance.GetResourceDepot()` exposes `ArchiveExists(name)` and
|
|
21
|
+
`ResourceExists(depotPath)`, letting a mod check at runtime whether a specific `.archive` file
|
|
22
|
+
or a specific resource inside any mounted archive is present — the documented uses are
|
|
23
|
+
verifying that the mod's own archive is actually enabled, and detecting whether another mod
|
|
24
|
+
(and therefore a resource it ships) is installed."
|
|
25
|
+
status: community
|
|
26
|
+
source: psiberx/cp2077-codeware/wiki/Home.md, section "Resources > Checking resource existence"
|
|
27
|
+
tags:
|
|
28
|
+
- codeware
|
|
29
|
+
- resourcedepot
|
|
30
|
+
- archiveexists
|
|
31
|
+
- resourceexists
|
|
32
|
+
- compat-check
|
|
33
|
+
- id: cp2077.codeware.overview.resource-loading-is-async-token-callback
|
|
34
|
+
claim: Reading an arbitrary resource at runtime goes through
|
|
35
|
+
`GameInstance.GetResourceDepot().LoadResource(path)`, which returns a `ResourceToken`; the
|
|
36
|
+
caller registers a callback (`token.RegisterCallback(this, n"OnResourceReady")`) and only
|
|
37
|
+
accesses `token.GetResource()` inside that callback — resource loading through this API is
|
|
38
|
+
asynchronous, not a direct return value.
|
|
39
|
+
status: community
|
|
40
|
+
source: psiberx/cp2077-codeware/wiki/Home.md, section "Resources > Reading resources"
|
|
41
|
+
tags:
|
|
42
|
+
- codeware
|
|
43
|
+
- resourcedepot
|
|
44
|
+
- resourcetoken
|
|
45
|
+
- async
|
|
46
|
+
- loadresource
|
|
47
|
+
- id: cp2077.codeware.overview.resource-ref-assignment-operator
|
|
48
|
+
claim: A native `ResourceRef`/`ResourceAsyncRef` field added via `@addField` is initialized by
|
|
49
|
+
assigning a resource depot path to it with the `*=` operator (the wiki's example is
|
|
50
|
+
`weapon.effect *= r"base\gameplay\game_effects\strongmelee.es";`); `*=` is the only
|
|
51
|
+
initialization form the page shows.
|
|
52
|
+
status: community
|
|
53
|
+
source: psiberx/cp2077-codeware/wiki/Home.md, section "Resources > Resource references"
|
|
54
|
+
tags:
|
|
55
|
+
- codeware
|
|
56
|
+
- resourceref
|
|
57
|
+
- addfield
|
|
58
|
+
- operator
|
|
59
|
+
- syntax
|
|
60
|
+
- id: cp2077.codeware.overview.localization-provider-package-pattern
|
|
61
|
+
claim: "Codeware's script-level localization system is wired up in two parts: a
|
|
62
|
+
`ModLocalizationProvider` subclass resolves a language code (`CName`) to a
|
|
63
|
+
`ModLocalizationPackage` instance and defines a fallback language via `GetFallback()`; each
|
|
64
|
+
`ModLocalizationPackage` subclass defines its actual strings in
|
|
65
|
+
`DefineTexts()`/`DefineSubtitles()` using `Text`/`TextM`/`TextF` (and
|
|
66
|
+
`Subtitle`/`SubtitleM`/`SubtitleF`) calls, with gendered variants set either as two separate
|
|
67
|
+
calls or one three-argument `Text(key, female, male)` call."
|
|
68
|
+
status: community
|
|
69
|
+
source: psiberx/cp2077-codeware/wiki/Home.md, sections "Localization > Localization providers" and
|
|
70
|
+
"Localization > Localization packages"
|
|
71
|
+
tags:
|
|
72
|
+
- codeware
|
|
73
|
+
- localization
|
|
74
|
+
- modlocalizationprovider
|
|
75
|
+
- modlocalizationpackage
|
|
76
|
+
detail: Texts registered this way are also pushed into the native localization system, so they
|
|
77
|
+
remain reachable via `GetLocalizedTextByKey`/`GetLocalizedText` and from TweakDB records — not
|
|
78
|
+
only from the mod's own redscript.
|
|
79
|
+
- id: cp2077.codeware.overview.reflection-get-class-and-call
|
|
80
|
+
claim: "Codeware's `Reflection` API lets a mod resolve a class by name
|
|
81
|
+
(`Reflection.GetClass(n\"...\")` or `Reflection.GetTypeOf(instance)`), enumerate its
|
|
82
|
+
properties/functions, and read/write/call them dynamically: `prop.GetValue(instance)`,
|
|
83
|
+
`getter.Call(instance)`, `setter.Call(instance, [args])`, with a `status`-returning overload
|
|
84
|
+
of `Call` available to detect argument-count/signature mismatches instead of throwing."
|
|
85
|
+
status: community
|
|
86
|
+
source: psiberx/cp2077-codeware/wiki/Home.md, sections "Reflection > Inspecting types and values"
|
|
87
|
+
and "Reflection > Custom callbacks"
|
|
88
|
+
tags:
|
|
89
|
+
- codeware
|
|
90
|
+
- reflection
|
|
91
|
+
- getclass
|
|
92
|
+
- getfunction
|
|
93
|
+
- call
|
|
94
|
+
- dynamic-dispatch
|
|
95
|
+
detail: Reflection-based callback invocation by short function name requires the target function to
|
|
96
|
+
carry the `cb` qualifier ("Don't forget to use `cb` modifier for callbacks to be able to use
|
|
97
|
+
functions short names."); this is the same `cb` item qualifier redscript's grammar defines
|
|
98
|
+
(see cp2077.redscript.modules.item-qualifier-keywords).
|
|
99
|
+
- id: cp2077.codeware.overview.moduleexists-for-soft-compat
|
|
100
|
+
claim: For cross-mod or cross-patch compatibility checks that can't be expressed with redscript's
|
|
101
|
+
own conditional compilation (`ModuleExists()`), Codeware's documented alternative is to use
|
|
102
|
+
Reflection to check whether a particular class, property or function exists at runtime before
|
|
103
|
+
touching it, rather than assuming it does.
|
|
104
|
+
status: community
|
|
105
|
+
source: psiberx/cp2077-codeware/wiki/Home.md, section "Reflection > Mods and patches compatibility"
|
|
106
|
+
tags:
|
|
107
|
+
- codeware
|
|
108
|
+
- moduleexists
|
|
109
|
+
- reflection
|
|
110
|
+
- compatibility
|
|
111
|
+
- soft-dependency
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: codeware.systems
|
|
3
|
+
title: Codeware's redscript API surface and version floors
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.codeware.systems.version-floors
|
|
6
|
+
claim: Codeware's README lists its compatibility as Cyberpunk 2077 2.31, redscript 0.5.31+ and Cyber
|
|
7
|
+
Engine Tweaks 1.37.0+, and its installation step 1 requires RED4ext 1.29.0+ before extracting
|
|
8
|
+
`Codeware-x.x.x.zip` into the Cyberpunk 2077 directory.
|
|
9
|
+
status: community
|
|
10
|
+
source: cp2077-codeware README.md, sections "Getting Started > Compatibility" (game, redscript, CET)
|
|
11
|
+
and "Getting Started > Installation" (RED4ext)
|
|
12
|
+
tags:
|
|
13
|
+
- codeware
|
|
14
|
+
- version-floor
|
|
15
|
+
- redscript
|
|
16
|
+
- cet
|
|
17
|
+
- red4ext
|
|
18
|
+
detail: "Source corrected 2026-09-07: RED4ext is listed under Installation, not Compatibility, and
|
|
19
|
+
the previous claim's parenthetical \"(per its own README, version 1.18.0 wiki)\" conflated two
|
|
20
|
+
things. 1.18.0 is the version stamped on line 1 of the Codeware wiki's Home page, and is what
|
|
21
|
+
every API fact in this file was read against; it is not a floor. Framework versions stay in
|
|
22
|
+
the claim; \"Cyberpunk 2077 2.31\" is the game version this Codeware release targets, not an
|
|
23
|
+
observation date, so there is no `verified_on`. This instantiates the general
|
|
24
|
+
cp2077.packaging.version-matrix-breakage."
|
|
25
|
+
- id: cp2077.codeware.systems.service-persists-between-sessions
|
|
26
|
+
claim: '"Services are singletons that created on scripts initialization and, unlike scriptable
|
|
27
|
+
systems, live between game sessions. To create your own service, you have to define a class
|
|
28
|
+
derived from `ScriptableService`." The instance is reached with
|
|
29
|
+
`GameInstance.GetScriptableServiceContainer().GetService(n"MyService") as MyService`.'
|
|
30
|
+
status: community
|
|
31
|
+
source: cp2077-codeware wiki Home, section "Lifecycle > Scriptable services"
|
|
32
|
+
tags:
|
|
33
|
+
- codeware
|
|
34
|
+
- scriptableservice
|
|
35
|
+
- scriptablesystem
|
|
36
|
+
- lifecycle
|
|
37
|
+
detail: Its lifecycle callbacks are `OnLoad` ("Scripts loaded"), `OnReload` ("Scripts reloaded"),
|
|
38
|
+
`OnInitialize` ("Game instance initialized, can access game systems") and `OnUninitialize`
|
|
39
|
+
("Game is shutting down") — the same four the Mod Settings page wires `Listen`/`Unlisten`
|
|
40
|
+
into, see cp2077.ui.modsettings.lifecycle-differs-by-base-class.
|
|
41
|
+
- id: cp2077.codeware.systems.module-scoped-service-needs-full-path
|
|
42
|
+
claim: '"If you declare `MyService` in a module, you must include the full path of the module to get
|
|
43
|
+
the service" — a service declared in `module MyModule.Services` is fetched as
|
|
44
|
+
`GetService(n"MyModule.Services.MyService")`.'
|
|
45
|
+
status: community
|
|
46
|
+
source: cp2077-codeware wiki Home, section "Lifecycle > Scriptable services"
|
|
47
|
+
tags:
|
|
48
|
+
- codeware
|
|
49
|
+
- scriptableservice
|
|
50
|
+
- module
|
|
51
|
+
- gotcha
|
|
52
|
+
detail: 'Corrected 2026-09-07: "passing the bare name returns null" was trimmed — the wiki states
|
|
53
|
+
the requirement without describing the failure mode.'
|
|
54
|
+
- id: cp2077.codeware.systems.persistent-field-type-exclusions
|
|
55
|
+
claim: '"Service properties marked as `persistent` will keep their state forever. Unlike scriptable
|
|
56
|
+
systems, service state storage is not tied to save files." "Persistence is available for all
|
|
57
|
+
types except `String`, `ResRef`, `Variant`."'
|
|
58
|
+
status: community
|
|
59
|
+
source: cp2077-codeware wiki Home, section "Lifecycle > Scriptable services"
|
|
60
|
+
tags:
|
|
61
|
+
- codeware
|
|
62
|
+
- persistent
|
|
63
|
+
- scriptableservice
|
|
64
|
+
- type-exclusion
|
|
65
|
+
detail: "Corrected 2026-09-07: \"tied to the mod's install instead\" was trimmed — the wiki says
|
|
66
|
+
only that storage is not tied to save files. The worked example counts game launches since the
|
|
67
|
+
mod was installed via a `persistent let counter: Int32` inside a struct."
|
|
68
|
+
- id: cp2077.codeware.systems.unmarked-fields-reset-silently
|
|
69
|
+
claim: "\"In case of objects, only fields marked as `persistent` are restored, and unmarked fields
|
|
70
|
+
are reset to defaults on each game launch. It's safe to change persistent data structure at
|
|
71
|
+
any time.\""
|
|
72
|
+
status: community
|
|
73
|
+
source: cp2077-codeware wiki Home, section "Lifecycle > Scriptable services"
|
|
74
|
+
tags:
|
|
75
|
+
- codeware
|
|
76
|
+
- persistent
|
|
77
|
+
- gotcha
|
|
78
|
+
detail: 'Corrected 2026-09-07: "with no warning that it was dropped" was trimmed as unsourced, and
|
|
79
|
+
the reassurance that the structure is safe to change was added since it is the actionable
|
|
80
|
+
half.'
|
|
81
|
+
- id: cp2077.codeware.systems.service-object-reference-disposal-risk
|
|
82
|
+
claim: '"Be careful with storing references to game objects in services. Most objects must be
|
|
83
|
+
disposed when game session ends. An unreleased reference can interfere with normal object
|
|
84
|
+
disposal and lead to bugs such as disappearing sounds or crashes."'
|
|
85
|
+
status: community
|
|
86
|
+
source: cp2077-codeware wiki Home, section "Lifecycle > Scriptable services" (the "Referencing game
|
|
87
|
+
objects" blockquote)
|
|
88
|
+
tags:
|
|
89
|
+
- codeware
|
|
90
|
+
- scriptableservice
|
|
91
|
+
- memory
|
|
92
|
+
- disposal
|
|
93
|
+
- gotcha
|
|
94
|
+
- id: cp2077.codeware.systems.callback-system-target-selectors
|
|
95
|
+
claim: A callback is registered as `GameInstance.GetCallbackSystem().RegisterCallback(n"<Event>",
|
|
96
|
+
this, n"<Method>").AddTarget(<selector>)`. Events include `Resource/Load`,
|
|
97
|
+
`Resource/PostLoad`, `Session/BeforeStart`, `Session/Start`, `Session/Ready`,
|
|
98
|
+
`Session/BeforeSave`, `Entity/Extract`, `Entity/Assemble`, `Entity/Initialize`,
|
|
99
|
+
`Entity/Reassemble`, `Entity/Attach`, `Entity/Detach`, `Component/Toggle`, `Input/Key`,
|
|
100
|
+
`Input/Axis` and `InkWidget/Spawn`. Selectors are typed to the event —
|
|
101
|
+
`ResourceTarget.Path(ResRef)`, `ResourceTarget.Type(CName)`,
|
|
102
|
+
`EntityTarget.ID`/`.Type`/`.RecordID(TweakDBID)`/`.Template`/`.Appearance`/`.Definition`,
|
|
103
|
+
`ComponentTarget.ID`/`.Name`, `InputTarget.Key`/`.Axis`,
|
|
104
|
+
`inkWidgetTarget.Library`/`.Controller`.
|
|
105
|
+
status: community
|
|
106
|
+
source: cp2077-codeware wiki Home, section "Lifecycle > Game events"
|
|
107
|
+
tags:
|
|
108
|
+
- codeware
|
|
109
|
+
- callbacksystem
|
|
110
|
+
- resourcetarget
|
|
111
|
+
- entitytarget
|
|
112
|
+
- syntax
|
|
113
|
+
detail: "Caution for a validator: the event table names `Entity/Attach`, but the wiki's own
|
|
114
|
+
`SetRunMode` example registers `n\"Entity/Attached\"` — the two spellings disagree on the same
|
|
115
|
+
page. Callback lifetime: \"When defined inside scriptable service, callback stays registered
|
|
116
|
+
until you manually unregister it. When defined in other contexts, callback is auto removed at
|
|
117
|
+
the end of the session\", overridable with `.SetLifetime(CallbackLifetime.Forever)` or
|
|
118
|
+
`...Session)`. The callback system can be accessed before the game instance is initialized."
|
|
119
|
+
- id: cp2077.codeware.systems.callback-once-run-mode
|
|
120
|
+
claim: '"You can make callback to auto unregister after being fired by calling
|
|
121
|
+
`.SetRunMode(CallbackRunMode.Once)`." `CallbackRunMode.OncePerTarget` instead auto-unregisters
|
|
122
|
+
"after being fired for each listed target".'
|
|
123
|
+
status: community
|
|
124
|
+
source: cp2077-codeware wiki Home, section "Lifecycle > Game events"
|
|
125
|
+
tags:
|
|
126
|
+
- codeware
|
|
127
|
+
- callbacksystem
|
|
128
|
+
- runmode
|
|
129
|
+
- syntax
|
|
130
|
+
- id: cp2077.codeware.systems.appearance-refresh-vs-load
|
|
131
|
+
claim: "\"After changing component mesh resource and/or appearance you can request it to load new
|
|
132
|
+
appearance\" with `comp.LoadAppearance()`; \"After changing any other properties that don't
|
|
133
|
+
require loading resources you can refresh appearance\" with `comp.RefreshAppearance()`.
|
|
134
|
+
Supported components are `entMeshComponent`, `entSkinnedMeshComponent`,
|
|
135
|
+
`entGarmentSkinnedMeshComponent` and `entMorphTargetSkinnedMeshComponent`."
|
|
136
|
+
status: community
|
|
137
|
+
source: cp2077-codeware wiki Home, section "Entities > Mesh appearances"
|
|
138
|
+
tags:
|
|
139
|
+
- codeware
|
|
140
|
+
- loadappearance
|
|
141
|
+
- refreshappearance
|
|
142
|
+
- entity-component
|
|
143
|
+
detail: The worked example is `comp.mesh *= r"mod\player\dynamic.mesh"; comp.meshAppearance =
|
|
144
|
+
n"neon_red"; comp.LoadAppearance();`. Softened on 2026-09-07 from "must be called ... (it
|
|
145
|
+
re-resolves resources)" to the wiki's own "you can request it to load".
|
|
146
|
+
- id: cp2077.codeware.systems.static-entity-reposition-without-respawn
|
|
147
|
+
claim: '"Static entities can be moved now without respawning them at new position" via
|
|
148
|
+
`entity.SetWorldTransform(transform)`.'
|
|
149
|
+
status: community
|
|
150
|
+
source: cp2077-codeware wiki Home, section "Entities > World transform"
|
|
151
|
+
tags:
|
|
152
|
+
- codeware
|
|
153
|
+
- setworldtransform
|
|
154
|
+
- static-entity
|
|
155
|
+
- id: cp2077.codeware.systems.player-system-alternate-puppets
|
|
156
|
+
claim: Codeware adds functions to the player system for the puppets besides the main player object —
|
|
157
|
+
`playerSystem.GetCustomizationPuppet()`, `GetInventoryPuppet()` and `GetPhotoPuppet()`, from
|
|
158
|
+
`GameInstance.GetPlayerSystem(GetGameInstance())`, for the customization screen, inventory
|
|
159
|
+
screen and photo mode respectively.
|
|
160
|
+
status: community
|
|
161
|
+
source: cp2077-codeware wiki Home, section "Player > Accessing player objects"
|
|
162
|
+
tags:
|
|
163
|
+
- codeware
|
|
164
|
+
- playersystem
|
|
165
|
+
- customization
|
|
166
|
+
- photo-mode
|
|
167
|
+
- puppet
|
|
168
|
+
- id: cp2077.codeware.systems.wardrobe-forget-item
|
|
169
|
+
claim: '"Items can be permanently removed from wardrobe" with
|
|
170
|
+
`GameInstance.GetWardrobeSystem(GetGameInstance()).ForgetItemID(ItemID.FromTDBID("Items.Glasses_03_basic_09"))`.'
|
|
171
|
+
status: community
|
|
172
|
+
source: cp2077-codeware wiki Home, section "Player > Managing wardrobe"
|
|
173
|
+
tags:
|
|
174
|
+
- codeware
|
|
175
|
+
- wardrobesystem
|
|
176
|
+
- forgetitemid
|
|
177
|
+
detail: Split from a combined wardrobe+vehicle fact on 2026-09-07; "transmog history" was dropped,
|
|
178
|
+
as the wiki says only "wardrobe".
|
|
179
|
+
- id: cp2077.codeware.systems.vehicle-unlock-by-record-id
|
|
180
|
+
claim: "\"Player vehicles can now be enabled by record ID instead of string, which normally can't be
|
|
181
|
+
retrieved at runtime\" —
|
|
182
|
+
`GameInstance.GetVehicleSystem(GetGameInstance()).EnablePlayerVehicleID(t\"Vehicle.v_sport2_q\
|
|
183
|
+
uadra_type66_avenger_player\", true)`."
|
|
184
|
+
status: community
|
|
185
|
+
source: cp2077-codeware wiki Home, section "Player > Unlocking vehicles"
|
|
186
|
+
tags:
|
|
187
|
+
- codeware
|
|
188
|
+
- vehiclesystem
|
|
189
|
+
- tweakdbid
|
|
190
|
+
- unlock
|
|
191
|
+
detail: Split from a combined wardrobe+vehicle fact on 2026-09-07. The record name shape matches
|
|
192
|
+
cp2077.vehicles.entities.tweak-name-from-ent-filename.
|