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,282 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: quests.scenes
|
|
3
|
+
title: .questphase/.scene structure and WolvenKit's quest/scene editing limits
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.quests.scenes.questphase-vs-scene-roles
|
|
6
|
+
claim: "\"Missions or quests are organized into separate files that contain nodes or references to
|
|
7
|
+
other 'files' called Questphases and Scenes. Questphases can be thought of as graphs that may
|
|
8
|
+
contain a few #noderefs, which are used to load prefabs for the phase. The questphases are
|
|
9
|
+
connected together using handlerefs, which handle IDs in their socket setups.\""
|
|
10
|
+
status: community
|
|
11
|
+
source: wiki.redmodding.org "Visualize Quest files", opening paragraphs
|
|
12
|
+
tags:
|
|
13
|
+
- quest
|
|
14
|
+
- questphase
|
|
15
|
+
- scene
|
|
16
|
+
- noderef
|
|
17
|
+
- handleref
|
|
18
|
+
- file-type
|
|
19
|
+
detail: "The page's illustration of the split is the apartments: \"they consist of a questphase
|
|
20
|
+
side, which forms the core of the entire game, and a scene file side, which includes choices,
|
|
21
|
+
animations, buffs obtained from sleeping, timeskips resulting from sleeping, or audio in the
|
|
22
|
+
shower\". Trimmed on 2026-09-07: that list is the apartment example, not a general statement
|
|
23
|
+
of everything a `.scene` owns. Page title corrected (the page is \"Visualize Quest files\",
|
|
24
|
+
and it has no \"File Types\" heading)."
|
|
25
|
+
- id: cp2077.quests.scenes.wolvenkit-view-is-resource-plus-graph-only
|
|
26
|
+
claim: Opening a `.questphase` in WolvenKit shows "first a 'resource' window with all the questphase
|
|
27
|
+
dependencies/archives and info"; the node graph is on a separate Graph editor tab you switch
|
|
28
|
+
to.
|
|
29
|
+
status: community
|
|
30
|
+
source: wiki.redmodding.org "Visualize Quest files", section "To visualize Questphase in Wolvenkit
|
|
31
|
+
we need to:"
|
|
32
|
+
tags:
|
|
33
|
+
- quest
|
|
34
|
+
- questphase
|
|
35
|
+
- wolvenkit
|
|
36
|
+
- editor-limitation
|
|
37
|
+
detail: 'Corrected 2026-09-07: the previous claim that there is "no dedicated higher-level quest
|
|
38
|
+
logic view beyond those two tabs" is an inference the page does not make. The page links a
|
|
39
|
+
community list of questphase files (DoctorPresto/Cyberpunk-File-Types, questphase.txt) for
|
|
40
|
+
finding one to open, and its own worked example is
|
|
41
|
+
`/dlc\dlc6_apart\loc_dlc6_apart_hey_gle\quest\phases\dlc6_apart_hey_gle.questphase`.'
|
|
42
|
+
- id: cp2077.quests.scenes.subtitle-edit-needs-two-resources
|
|
43
|
+
claim: "Finding a spoken line's text spans two resources: in the `.scene`, walk `struct Data >
|
|
44
|
+
scnSceneResource > scnscreenplayStore > scnscreenplayDialogLine` and read its `locstringIds`;
|
|
45
|
+
then open the matching localization `.json` under
|
|
46
|
+
`lang_en_text\\base\\localization\\en-us\\subtitles\\quest\\` and walk `struct Data >
|
|
47
|
+
JsonResource > handle:iSerializable > localizationPersistenceSubtitleEntry >
|
|
48
|
+
array:localizationPersistenceSubtitleEntry`, whose `stringId` values are the same numbers."
|
|
49
|
+
status: community
|
|
50
|
+
source: wiki.redmodding.org "How to Edit Voiceover and Subtitles In a Quest.", numbered steps 2-7
|
|
51
|
+
tags:
|
|
52
|
+
- quest
|
|
53
|
+
- scene
|
|
54
|
+
- dialogue
|
|
55
|
+
- subtitle
|
|
56
|
+
- locstringid
|
|
57
|
+
- localization
|
|
58
|
+
detail: "Worked example: `mq041_corpo_01_deadmans_switch.scene` against
|
|
59
|
+
`mq041_corpo_01_deadmans_switch.json`, where stringId 1822802647440039936 is \"Hey, yeah,
|
|
60
|
+
sure. Damn, you ol' bastard, been a while since...\" The archive is named `lang_eng_text` in
|
|
61
|
+
prose while the extracted path is `lang_en_text`. The same String ID mechanism is described
|
|
62
|
+
from the audio side in cp2077.audio.events.voiceover-subtitles-mapped-by-string-id. Section
|
|
63
|
+
name corrected 2026-09-07 (there is no \"Key Steps\" heading; the page is a numbered list)."
|
|
64
|
+
- id: cp2077.quests.scenes.subtitle-locstringids-must-swap-in-pairs
|
|
65
|
+
claim: 'Reassigning a line is a two-part swap INSIDE the `.scene`: first swap the two `locstringIds`
|
|
66
|
+
in the dialogue-line array, then "swap the names we see on the left; in this case
|
|
67
|
+
`m_194BE559A84E2000` with `m_1A04A1D80244D000`" by replacing their entries in the `CName`
|
|
68
|
+
array. The localization JSON is only read to learn which stringId carries which line.'
|
|
69
|
+
status: community
|
|
70
|
+
source: wiki.redmodding.org "How to Edit Voiceover and Subtitles In a Quest.", numbered steps 8-11
|
|
71
|
+
tags:
|
|
72
|
+
- quest
|
|
73
|
+
- scene
|
|
74
|
+
- subtitle
|
|
75
|
+
- locstringid
|
|
76
|
+
- cname
|
|
77
|
+
- gotcha
|
|
78
|
+
detail: 'Corrected 2026-09-07: the previous claim had the pair straddling the `.scene` and the
|
|
79
|
+
localization JSON, and asserted an audio/subtitle desync as the failure mode; neither is what
|
|
80
|
+
the page describes. The `m_<hex>` CName is the hex form of the same stringId. The edit
|
|
81
|
+
finishes with "save, pack" and putting the archive in the Mod folder.'
|
|
82
|
+
- id: cp2077.quests.scenes.scene-editing-tooling-is-not-wolvenkit
|
|
83
|
+
claim: "Both raw `.scene` editing guides list the same toolchain and none of it is WolvenKit: CP77
|
|
84
|
+
Tools (github.com/WolvenKit/CP77Tools) to unbundle and uncook the archives, 010 Editor, and
|
|
85
|
+
alphaZomega's `CP77_CR2W.bt` binary template to read and write the structs."
|
|
86
|
+
status: community
|
|
87
|
+
source: wiki.redmodding.org "How to Edit Voiceover and Subtitles In a Quest.", section
|
|
88
|
+
"Requirements:"; same list in "How to Remove an Animation (and Potentially Replace It)",
|
|
89
|
+
section "Requirements:"
|
|
90
|
+
tags:
|
|
91
|
+
- quest
|
|
92
|
+
- scene
|
|
93
|
+
- 010editor
|
|
94
|
+
- cp77tools
|
|
95
|
+
- tooling
|
|
96
|
+
detail: The animation guide spells the template `CP77_CR2.bt` while the subtitle guide spells it
|
|
97
|
+
`CP77_CR2W.bt`; both link the same CP77_CR2W_v0.46.zip download. Both also ask for "Some basic
|
|
98
|
+
knowledge of what are you doing".
|
|
99
|
+
- id: cp2077.quests.scenes.remove-animation-five-hop-chain
|
|
100
|
+
claim: "Removing a scene animation traces a chain: find the `sectionNode` playing it, then `Struct
|
|
101
|
+
Data > scnSceneResource > scnSceneEvent array > scnPlaySkAnimEvent >
|
|
102
|
+
scnEventBlendWorkspotSetup` and note its `workspotId`; find the `scnWorkspotInstance` whose
|
|
103
|
+
`workspotInstanceId` matches and note its `dataId`; find the `scnWorkspotData` with that
|
|
104
|
+
`dataId` and note the path after `workspotResource`; open that `.workspot` at `Struct Data >
|
|
105
|
+
workWorkspotResource > workWorkspotTree > handle:worldEntry > workSequence > worklEntry`, find
|
|
106
|
+
the `work[...]Anim` matching the animation, note the number before the name, and zero out that
|
|
107
|
+
name in the CNAME array."
|
|
108
|
+
status: community
|
|
109
|
+
source: wiki.redmodding.org "How to Remove an Animation (and Potentially Replace It)", section "The
|
|
110
|
+
Steps:" (steps 2-8)
|
|
111
|
+
tags:
|
|
112
|
+
- quest
|
|
113
|
+
- scene
|
|
114
|
+
- animation
|
|
115
|
+
- workspot
|
|
116
|
+
- scnplayskanimevent
|
|
117
|
+
detail: "Worked example: removing the mirror idle, with the scene at
|
|
118
|
+
`base\\quest\\minor_quests\\mq000\\scenes\\mq000_01_apartment.scene` and the workspot at
|
|
119
|
+
`base\\worksposts\\quest\\main_quests\\prologue\\q001\\q001_01_wakeup\\q001_01_wakeup__look_m\
|
|
120
|
+
irror.workspot` (the page's own spelling of the folder). Section names corrected 2026-09-07
|
|
121
|
+
(there are no \"Key Node/Event Types\" or \"Essential Steps\" headings)."
|
|
122
|
+
- id: cp2077.quests.scenes.workspots-underpin-most-ai-interaction
|
|
123
|
+
claim: "\"Most of the game relies on Workspots used as interactable points both by the AI and the
|
|
124
|
+
Player\" — a workspot edited for one scene's animation may be shared, e.g. the mirror workspot
|
|
125
|
+
above \"is used for the various interactions in V's appartment\"."
|
|
126
|
+
status: community
|
|
127
|
+
source: wiki.redmodding.org "How to Remove an Animation (and Potentially Replace It)", section "The
|
|
128
|
+
Steps:" (the SIDE NOTE after step 3)
|
|
129
|
+
tags:
|
|
130
|
+
- quest
|
|
131
|
+
- scene
|
|
132
|
+
- workspot
|
|
133
|
+
- shared-resource
|
|
134
|
+
- gotcha
|
|
135
|
+
detail: Section name corrected 2026-09-07 (there is no "Critical Gotchas" heading; this is a side
|
|
136
|
+
note in the numbered steps).
|
|
137
|
+
- id: cp2077.quests.scenes.community-area-node-alwaysloaded-requirement
|
|
138
|
+
claim: '"There are two types `worldCompiledCommunityAreaNode` and
|
|
139
|
+
`worldCompiledCommunityAreaNode_Streamable`. The difference between them is only that
|
|
140
|
+
`worldCompiledCommunityAreaNode` must be registered in `AlwaysLoaded` type of
|
|
141
|
+
`.streamingsector` [and] `worldCompiledCommunityAreaNode_Streamable` can be registered in
|
|
142
|
+
other types of `.streamingsector` (exterior/quest/etc)."'
|
|
143
|
+
status: community
|
|
144
|
+
source: wiki.redmodding.org "How to use worldCommunityRegistry and worldCompiledCommunity", section
|
|
145
|
+
"Basics"
|
|
146
|
+
tags:
|
|
147
|
+
- quest
|
|
148
|
+
- community-registry
|
|
149
|
+
- worldcompiledcommunityareanode
|
|
150
|
+
- streaming-sector
|
|
151
|
+
detail: Page title and section name corrected 2026-09-07. The page's own warning is that it
|
|
152
|
+
"explains the theory"; for actually creating communities it redirects to the Object Spawner
|
|
153
|
+
"creating communities" guide.
|
|
154
|
+
- id: cp2077.quests.scenes.community-registry-sourceobjectid-must-match
|
|
155
|
+
claim: On a `worldCompiledCommunityAreaNode`, "`Node/area/entriesData` we specify an
|
|
156
|
+
`entryName/phaseName/spotId(AiSpoNodeHash)` so in the future, we can
|
|
157
|
+
`Activate/Reactivate/Deactivate` its entities by these params" and "`sourceObjectId` - it
|
|
158
|
+
should match `id` of registry item".
|
|
159
|
+
status: community
|
|
160
|
+
source: wiki.redmodding.org "How to use worldCommunityRegistry and worldCompiledCommunity", section
|
|
161
|
+
"Theory" (step 4, "Important")
|
|
162
|
+
tags:
|
|
163
|
+
- quest
|
|
164
|
+
- community-registry
|
|
165
|
+
- sourceobjectid
|
|
166
|
+
- gotcha
|
|
167
|
+
detail: "On the `worldCommunityRegistryNode` side, \"`communitiesData` - there we are specifying the
|
|
168
|
+
type of NPC its template, entryName, and all possible phases\" and \"`workspotsPersistentData`
|
|
169
|
+
- there we are adding a new spot into the engine's global registry by the hash of our
|
|
170
|
+
`AiSpotNode`\". Corrected 2026-09-07: the previous claim placed the matching `id` in
|
|
171
|
+
`communitiesData` specifically and asserted a failure mode (\"the spawn registration fails to
|
|
172
|
+
resolve\"); the page says neither."
|
|
173
|
+
- id: cp2077.quests.scenes.community-registry-version-floor
|
|
174
|
+
claim: The worldCommunityRegistry/worldCompiledCommunity guide's one listed requirement is ArchiveXL
|
|
175
|
+
1.17.0+.
|
|
176
|
+
status: community
|
|
177
|
+
source: wiki.redmodding.org "How to use worldCommunityRegistry and worldCompiledCommunity", section
|
|
178
|
+
"Requirements"
|
|
179
|
+
tags:
|
|
180
|
+
- quest
|
|
181
|
+
- community-registry
|
|
182
|
+
- archivexl
|
|
183
|
+
- version-floor
|
|
184
|
+
detail: An ArchiveXL version on its own numbering, so it stays in the claim with no `verified_on`.
|
|
185
|
+
Section name corrected 2026-09-07 (it is under "Requirements", not "Important Gotchas").
|
|
186
|
+
- id: cp2077.quests.scenes.archivexl-quest-phase-merge
|
|
187
|
+
claim: "ArchiveXL merges a mod's .questphase into a loaded quest graph from the manifest key `quest:
|
|
188
|
+
phases:`, a list of entries with `path` (the mod phase) and `parent` (a .questphase or .quest,
|
|
189
|
+
scope names allowed), plus optional `connection` / `input` (a node-id path and optional
|
|
190
|
+
socket; empty means the parent's start node), `output` and `intercept`. It adds a
|
|
191
|
+
questPhaseNodeDefinition whose id is a CRC-16 of \"<path>:<input node id>\" and connects the
|
|
192
|
+
input node's Out to its In1. When the parent is a .quest resource, the merged phase node is
|
|
193
|
+
also force-started on game restore (once, recorded by a fact keyed on the node) and marked
|
|
194
|
+
started on quest start, so a phase merged into the main quest runs on every load without any
|
|
195
|
+
trigger of its own."
|
|
196
|
+
status: verified
|
|
197
|
+
source: https://github.com/psiberx/cp2077-archive-xl src/App/Extensions/QuestPhase/Config.cpp
|
|
198
|
+
(LoadYAML, FillConnection) and Extension.cpp (PatchPhase, CreatePhaseNode, OnGameRestored,
|
|
199
|
+
OnQuestStart); bundle/source/resources/QuestBaseScope.xl (the cyberpunk2077.quest scope)
|
|
200
|
+
tags:
|
|
201
|
+
- archivexl
|
|
202
|
+
- questphase
|
|
203
|
+
- quest
|
|
204
|
+
- merge
|
|
205
|
+
- mod-quest
|
|
206
|
+
detail: >-
|
|
207
|
+
Installed quest mods (Kidnap, Aldecaldos High Stakes, Lizzie's BDs) each list their launcher
|
|
208
|
+
phase twice, with parents base\quest\cyberpunk2077.quest and ep1\quest\ep1_standalone.quest,
|
|
209
|
+
and again for the NG+ quests; a cyberware mod (v0.12) follows the first two. The input node's
|
|
210
|
+
phase is started with the socket "In1", so the mod phase's questInputNodeDefinition carries
|
|
211
|
+
socketName In1.
|
|
212
|
+
|
|
213
|
+
Seen in game on 2026-09-22. After a save loaded, ArchiveXL logged `[QuestPhase] Patching phase
|
|
214
|
+
"base\quest\cyberpunk2077.quest"...` and `Merged phase "mod\<mod>\body\<mod>_body.questphase"
|
|
215
|
+
from "<Mod>.archive.xl"`. The phase's fact-driven loops then ran with no trigger of their own:
|
|
216
|
+
community Activate on the fact 1, Deactivate on 0, and again. At the main menu the log has
|
|
217
|
+
only the config pass; the merge lines come with the save.
|
|
218
|
+
- id: cp2077.quests.scenes.noderef-hash-is-fnv-of-the-path-without-hash-marks
|
|
219
|
+
claim: A full world NodeRef path ("$/03_night_city/.../#prefab/#name") hashes to the 64-bit FNV-1a
|
|
220
|
+
of the path string with every '#' removed; the community registry's gameCommunityID, the
|
|
221
|
+
compiled community area's sourceObjectId, an AI spot's worldGlobalNodeID and the
|
|
222
|
+
AISpotPersistentData globalNodeId are all that hash. Quests and scripts name the same node by
|
|
223
|
+
its short alias ("#name"), which the engine resolves through the sector's nodeRefs list, not
|
|
224
|
+
by hashing the alias itself.
|
|
225
|
+
status: verified
|
|
226
|
+
verified_on: "2.31"
|
|
227
|
+
source: base\worlds\03_night_city\_compiled\default\always_loaded_1.streamingsector
|
|
228
|
+
(ep1_1_nightcity.archive) nodeRefs entries for
|
|
229
|
+
tags:
|
|
230
|
+
- noderef
|
|
231
|
+
- hash
|
|
232
|
+
- community-registry
|
|
233
|
+
- ai-spot
|
|
234
|
+
- streaming-sector
|
|
235
|
+
detail: >-
|
|
236
|
+
FNV-1a 64 of the bare alias ("mq060_communityArea") does not give the id, so the alias form is
|
|
237
|
+
resolved, not hashed. The alias resolution through the nodeRefs list is inferred from vanilla
|
|
238
|
+
(the spot's full path is listed in the always-loaded sector although the spot node lives
|
|
239
|
+
elsewhere) and from Kidnap, whose quest names "#sq_kidnap_community" while its sector lists
|
|
240
|
+
only the full path.
|
|
241
|
+
|
|
242
|
+
Checked in game on 2026-09-22. Codeware's NodeRefToHash(CreateNodeRef(path)) on
|
|
243
|
+
"$/03_night_city/#<mod>/#<mod>_body_community" returned the generator's value. The same call
|
|
244
|
+
on the alias "#<mod>_body_community" returned the FNV-1a 64 of the bare
|
|
245
|
+
"<mod>_body_community", not the node's id. Even so, the mod phase's
|
|
246
|
+
questCommunityTemplate_NodeType, given that alias, activated the community. The quest system
|
|
247
|
+
resolves an alias; script CreateNodeRef only hashes it.
|
|
248
|
+
related:
|
|
249
|
+
- cp2077.quests.scenes.community-registry-sourceobjectid-must-match
|
|
250
|
+
- id: cp2077.quests.scenes.vanilla-quest-community-shape
|
|
251
|
+
claim: "A quest-activated community in vanilla is three nodes in an AlwaysLoaded sector: a
|
|
252
|
+
worldCommunityRegistryNode item (communityAreaType Regular, communityId = the area's path
|
|
253
|
+
hash, entriesInitialState entryActiveOnStart 0 with the initial phase, and the template inline
|
|
254
|
+
as communityCommunityTemplateData: a communitySpawnEntry with characterRecordId, entryName,
|
|
255
|
+
and a communitySpawnPhase with alwaysSpawned, appearances, phaseName and
|
|
256
|
+
communityPhaseTimePeriod entries of hour, quantity and spotNodeRefs), a
|
|
257
|
+
worldCompiledCommunityAreaNode whose sourceObjectId is the same id and whose entriesData maps
|
|
258
|
+
entry, phase and period to the spots' worldGlobalNodeIDs, with MaxStreamingDistance FLT_MAX in
|
|
259
|
+
its node data; and the spots' AISpotPersistentData (hash, world position as FixedPoint bits of
|
|
260
|
+
metres x 131072, yaw) in the registry's workspotsPersistentData. A quest activates it with
|
|
261
|
+
questSpawnManagerNodeDefinition -> questCommunityTemplate_NodeType (action Activate /
|
|
262
|
+
Deactivate, spawnerReference the area's alias, communityEntryName, communityEntryPhaseName)."
|
|
263
|
+
status: verified
|
|
264
|
+
verified_on: "2.31"
|
|
265
|
+
source: base\worlds\03_night_city\_compiled\default\always_loaded_1.streamingsector
|
|
266
|
+
(ep1_1_nightcity.archive) nodes 2277 (mq060 area) and 3256 (the registry);
|
|
267
|
+
base\quest\minor_quests\mq060\phases\mq060_yaiba_showroom.questphase nodes 174 and 206
|
|
268
|
+
tags:
|
|
269
|
+
- community-registry
|
|
270
|
+
- worldcompiledcommunityareanode
|
|
271
|
+
- ai-spot
|
|
272
|
+
- questphase
|
|
273
|
+
- streaming-sector
|
|
274
|
+
detail: "A working mod lays it out the same way (Kidnap's kidnap_always_loaded sector: registry,
|
|
275
|
+
compiled area node and nine AI spots together, level 0, AlwaysLoaded descriptor), and
|
|
276
|
+
entSpawner's exporter writes the registry into a separate AlwaysLoaded sector with the area
|
|
277
|
+
node in the group's sector. Spot workspots are resources the NPC plays at the spot; Kidnap
|
|
278
|
+
places a vehicle entry on a spot carrying a bar-stool workspot, so the spot is read as a
|
|
279
|
+
position for entities that cannot use it (inferred)."
|
|
280
|
+
related:
|
|
281
|
+
- cp2077.quests.scenes.community-area-node-alwaysloaded-requirement
|
|
282
|
+
- cp2077.quests.scenes.community-registry-sourceobjectid-must-match
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: quickhacks.tiers
|
|
3
|
+
title: How a vanilla quickhack's tiers are built in TweakDB
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.quickhacks.tiers.program-chain-per-quality
|
|
6
|
+
claim: "A vanilla quickhack's tiers are separate program items in a $base chain, one per quality,
|
|
7
|
+
each with its own hack action. Blind is the worked example: Items.BlindProgram
|
|
8
|
+
(Quality.Common, Tier0Shard, QuickHack.BlindHack) <- Items.BlindLvl1Program (Uncommon,
|
|
9
|
+
Tier1Shard, BlindLvl1Hack) <- Items.BlindLvl2Program (Rare, Tier2Shard, BlindLvl2Hack) <-
|
|
10
|
+
Items.BlindLvl3Program (Epic, Tier3Shard, BlindLvl3Hack) <- Items.BlindLvl4Program (Legendary,
|
|
11
|
+
Tier4Shard, BlindLvl4Hack). Items.BlindLvl4PlusPlusProgram is an iconic Legendary (Tier6Shard)
|
|
12
|
+
that reuses the Lvl4 actions. Each tier lists its action with Boss… and Chimera… variants in
|
|
13
|
+
objectActions, and has its own OnAttach and OnEquip packages and a CraftingData package. The
|
|
14
|
+
Lvl2 action costs QuickHack.MemoryIncreaseTier4."
|
|
15
|
+
status: verified
|
|
16
|
+
verified_on: "2.31"
|
|
17
|
+
source: .modwright-cache/cyberpunk2077/vanilla.sqlite (Items.Blind*Program, QuickHack.Blind*Hack)
|
|
18
|
+
tags:
|
|
19
|
+
- quickhack
|
|
20
|
+
- tier
|
|
21
|
+
- quality
|
|
22
|
+
- program
|
|
23
|
+
- tweakdb
|
|
24
|
+
- id: cp2077.quickhacks.tiers.one-program-per-shardtype
|
|
25
|
+
claim: "The cyberdeck takes one program per shardType: slotting compares the new program's shardType
|
|
26
|
+
with each slotted one's (itemModificationSystem.script:125). A mod quickhack whose program
|
|
27
|
+
$bases a vanilla program inherits its shardType (Items.BlindProgram: \"Blind\") and cannot
|
|
28
|
+
share the deck with that vanilla quickhack; it needs its own shardType."
|
|
29
|
+
status: verified
|
|
30
|
+
verified_on: "2.31"
|
|
31
|
+
source: 'tools\redmod\scripts\cyberpunk\systems\itemModificationSystem.script:125, :136, :316; the
|
|
32
|
+
vanilla index: Items.BlindProgram shardType "Blind", Items.DisableCyberwareProgram shardType
|
|
33
|
+
"DisableCyberware"'
|
|
34
|
+
tags:
|
|
35
|
+
- quickhack
|
|
36
|
+
- program
|
|
37
|
+
- cyberdeck
|
|
38
|
+
- shardtype
|
|
39
|
+
- slot
|
|
40
|
+
related:
|
|
41
|
+
- cp2077.quickhacks.tiers.program-chain-per-quality
|