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,352 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: tweakdb.melee
|
|
3
|
+
title: Melee attack records, combo mechanics, and per-hit modifiers
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.tweakdb.melee.attack-lookup-by-state-plus-counter
|
|
6
|
+
claim: "The engine resolves which attack record to play by concatenating the state name with the
|
|
7
|
+
current combo counter — GetAttack(StringToName( stateName + IntToString(attackNumber))) — and
|
|
8
|
+
a missing record is not an error: the lookup simply returns null and the caller's enter
|
|
9
|
+
condition fails silently."
|
|
10
|
+
status: verified
|
|
11
|
+
source: ModWright field verification
|
|
12
|
+
tags:
|
|
13
|
+
- tweakdb
|
|
14
|
+
- melee
|
|
15
|
+
- attack-record
|
|
16
|
+
- lookup
|
|
17
|
+
- silent-failure
|
|
18
|
+
detail: This is the root mechanism behind the endless-flow bug/feature (see
|
|
19
|
+
cp2077.tweakdb.melee.missing-final-record-loops-combo-forever) and behind why authoring
|
|
20
|
+
<ModAttacks>.FinalAttack4 (named MeleeFinalAttack3, since AttacksNumber 4 puts the finisher at
|
|
21
|
+
counter 3) was required to get a real finisher instead of an infinite loop.
|
|
22
|
+
- id: cp2077.tweakdb.melee.dormant-fourth-combo-hit-in-all-vanilla-melee
|
|
23
|
+
claim: "Every vanilla held melee weapon ships with BaseStats.AttacksNumber = 3, so the authored 4th
|
|
24
|
+
combo-hit records (MeleeComboAttack3 across machete/chainsword/katana movesets — including the
|
|
25
|
+
machete/chainsword center thrust and the katana's 4th diagonal) exist in the game's data but
|
|
26
|
+
are dormant: no vanilla weapon's stat allows the state machine to ever reach them. Cyberware
|
|
27
|
+
weapons (strong arms 5, mantis blades 9) use higher AttacksNumber values, proving the state
|
|
28
|
+
machine natively supports longer chains."
|
|
29
|
+
status: inferred
|
|
30
|
+
source: ModWright research
|
|
31
|
+
tags:
|
|
32
|
+
- tweakdb
|
|
33
|
+
- melee
|
|
34
|
+
- attacksnumber
|
|
35
|
+
- dormant-content
|
|
36
|
+
- combo
|
|
37
|
+
detail: "A risk the note flags explicitly: authored records existing does not guarantee the
|
|
38
|
+
corresponding animation clip exists in a given weapon's anim set (later testing found only the
|
|
39
|
+
katana moveset had a real 4th-slash animation; the rest fell back to a bare left-hand punch —
|
|
40
|
+
animation content itself is out of scope for this file)."
|
|
41
|
+
- id: cp2077.tweakdb.melee.missing-final-record-loops-combo-forever
|
|
42
|
+
claim: If BaseStats.AttacksNumber is set to N and a combo record exists at index N-1 but no final
|
|
43
|
+
(finisher) record exists at that same index, the finisher's enter condition can never succeed,
|
|
44
|
+
the combo transition wins by default every time, and IncrementAttackNumber wraps the counter
|
|
45
|
+
back to 0 once it reaches N — producing an unbreakable light-attack loop with no finisher,
|
|
46
|
+
stopped only by stamina.
|
|
47
|
+
status: verified
|
|
48
|
+
source: ModWright field verification
|
|
49
|
+
tags:
|
|
50
|
+
- tweakdb
|
|
51
|
+
- melee
|
|
52
|
+
- attacksnumber
|
|
53
|
+
- combo
|
|
54
|
+
- infinite-loop
|
|
55
|
+
detail: Discovered by accident (AttacksNumber 4 on a machete-based weapon with only 3 final records
|
|
56
|
+
authored), then deliberately fixed for the shipped build by authoring
|
|
57
|
+
<ModAttacks>.FinalAttack4 so the finisher can enter at counter 3. The unpatched behavior is
|
|
58
|
+
kept as a documented, unshipped design option for a future no-finisher continuous-combo
|
|
59
|
+
variant.
|
|
60
|
+
- id: cp2077.tweakdb.melee.vanilla-infinite-combo-flag-pair
|
|
61
|
+
claim: "Vanilla has a distinct, runtime-toggleable mechanism for an unending combo, independent of
|
|
62
|
+
record-shape gaps: CheckIfInfiniteCombo requires BOTH BaseStats.CanWeaponInfinitlyCombo (on
|
|
63
|
+
the weapon record) and BaseStats.CanMeleeInfinitelyCombo (on the player) to be set; when both
|
|
64
|
+
are true, CheckIfFinalAttack returns false unconditionally (no finisher, ever) and
|
|
65
|
+
IncrementAttackNumber wraps the counter to 1 instead of 0."
|
|
66
|
+
status: inferred
|
|
67
|
+
source: ModWright research
|
|
68
|
+
tags:
|
|
69
|
+
- tweakdb
|
|
70
|
+
- melee
|
|
71
|
+
- infinite-combo
|
|
72
|
+
- status-effect
|
|
73
|
+
- community
|
|
74
|
+
detail: 'Wrapping to 1 rather than 0 means combo index 0 plays only once at the very start of a
|
|
75
|
+
chain (the loop afterward is 1->2->3->1->...), a thinner loop than the accidental record-shape
|
|
76
|
+
variant, which cycles all four indices (0->1->2->3->0). This is read from vanilla tweak files
|
|
77
|
+
and scripts, not independently tested — recorded as the documented foundation for a future
|
|
78
|
+
toggleable "flow state" ability, not as an observed result. (Reclassified from community to
|
|
79
|
+
inferred: the source is vanilla game data read directly, not a community claim.)'
|
|
80
|
+
- id: cp2077.tweakdb.melee.attack-records-live-in-per-family-packages
|
|
81
|
+
claim: Weapon attack records are NOT defined under a generic Attacks.* package; each weapon family
|
|
82
|
+
has its own package (MacheteAttacks.*, KatanaAttacks.*, ChainswordAttacks.*,
|
|
83
|
+
TwoHandHammerAttacks.*). Only the truly generic base classes (Slash, QuickMelee, ...) live
|
|
84
|
+
under Attacks.*. Get the correct record IDs from the base weapon's own `attacks` list in its
|
|
85
|
+
vanilla tweak file, verbatim.
|
|
86
|
+
status: inferred
|
|
87
|
+
source: ModWright research
|
|
88
|
+
tags:
|
|
89
|
+
- tweakdb
|
|
90
|
+
- melee
|
|
91
|
+
- attack-record
|
|
92
|
+
- package
|
|
93
|
+
- naming
|
|
94
|
+
detail: Cost several launch cycles to learn. Confirms the general TweakDB ground-truth rule
|
|
95
|
+
(cp2077.process.tweakdb-ground-truth) with a melee-specific gotcha not covered by that fact.
|
|
96
|
+
- id: cp2077.tweakdb.melee.tweakxl-log-required-after-yaml-changes
|
|
97
|
+
claim: TweakXL yaml errors (missing record, ambiguous definition) are completely silent in game and
|
|
98
|
+
only visible in red4ext\plugins\TweakXL\TweakXL-<timestamp>.log; always check that log after
|
|
99
|
+
any yaml change before concluding a change "did nothing."
|
|
100
|
+
status: verified
|
|
101
|
+
source: ModWright field verification
|
|
102
|
+
tags:
|
|
103
|
+
- tweakdb
|
|
104
|
+
- tweakxl
|
|
105
|
+
- log
|
|
106
|
+
- debugging
|
|
107
|
+
- archivexl
|
|
108
|
+
detail: "Named instance: \"the morning timing yaml's Attacks.* entries never applied\" and the log
|
|
109
|
+
was the only place that said why. Distinct from the unrelated CET-mod-status log check already
|
|
110
|
+
recorded as cp2077.packaging.cet-log-checks. Merged from an equivalent fact in the ArchiveXL
|
|
111
|
+
topic, which extends the same rule to the ArchiveXL side: after any .xl manifest edit, the
|
|
112
|
+
corresponding ArchiveXL log is the only confirmation that a resource patch, animations entry,
|
|
113
|
+
factory, localization or streaming block actually registered. The two named TweakXL failure
|
|
114
|
+
modes are \"record doesn't exist\" (an entirely unapplied edit) and \"Ambiguous definition\"
|
|
115
|
+
(see cp2077.tweakdb.melee.dotted-path-mod-of-same-file-record-fails)."
|
|
116
|
+
- id: cp2077.tweakdb.melee.dotted-path-mod-of-same-file-record-fails
|
|
117
|
+
claim: 'Modifying a record via a dotted path (e.g. Items.<ModWeapon>.attacks: appends) inside the
|
|
118
|
+
SAME yaml file that first defines that record fails with an "Ambiguous definition" error,
|
|
119
|
+
caused by declaration ordering; the fix is to put the modification in a second file that sorts
|
|
120
|
+
alphabetically after the first.'
|
|
121
|
+
status: inferred
|
|
122
|
+
source: ModWright research
|
|
123
|
+
tags:
|
|
124
|
+
- tweakdb
|
|
125
|
+
- tweakxl
|
|
126
|
+
- yaml
|
|
127
|
+
- ordering
|
|
128
|
+
- silent-failure
|
|
129
|
+
detail: 'Recorded pattern: a second, later-sorting file (a "<mod>_patch.yaml") for such appends. `-
|
|
130
|
+
!append` per-item is confirmed to work fine both inside record definitions and in dotted
|
|
131
|
+
modifications of existing records.'
|
|
132
|
+
- id: cp2077.tweakdb.melee.iconic-quality-pattern-confirmed-across-mods
|
|
133
|
+
claim: "The iconic-scaling pattern of quality: Quality.Random plus
|
|
134
|
+
Items.CraftableIconicQualityRandomisation appended to statModifierGroups (with
|
|
135
|
+
Quality.IconicItem appended to statModifiers) is confirmed working identically on a second,
|
|
136
|
+
independently-built iconic weapon, not just the mod it was first documented on."
|
|
137
|
+
status: verified
|
|
138
|
+
source: ModWright field verification
|
|
139
|
+
tags:
|
|
140
|
+
- tweakdb
|
|
141
|
+
- quality
|
|
142
|
+
- iconic
|
|
143
|
+
- confirmed
|
|
144
|
+
- cross-mod
|
|
145
|
+
detail: "Confirms cp2077.tweakdb.quality-stat-iconic-progression and
|
|
146
|
+
cp2077.tweakdb.craftable-iconic-quality-randomisation (both originally documented from a
|
|
147
|
+
ranged weapon mod): the melee mod's weapon record already carried the full iconic scaffold
|
|
148
|
+
(Quality.Random, IconicWeapon/CraftableIconic tags, Items.Iconic_Melee_Blueprint,
|
|
149
|
+
Items.Craftable_Iconic_Weapon) with no base-record change needed, unlike the ranged mod, which
|
|
150
|
+
had to author a custom blueprint for its heavily kitbashed sniper receiver — so the pattern
|
|
151
|
+
generalizes across weapon type (melee vs. ranged) without modification."
|
|
152
|
+
- id: cp2077.tweakdb.melee.candropweapon-defaults-off-not-immunity
|
|
153
|
+
claim: gamedataStatType.CanDropWeapon defaults to 0/false on most NPCs — it is an opt-in vanilla
|
|
154
|
+
ability flag, not a boss-immunity flag. Gating a custom disarm mechanic on this stat alone
|
|
155
|
+
will silently do nothing on ordinary NPCs; gate the mechanic on NPCPuppet.IsBoss() instead to
|
|
156
|
+
exempt bosses specifically.
|
|
157
|
+
status: verified
|
|
158
|
+
source: ModWright field verification
|
|
159
|
+
tags:
|
|
160
|
+
- tweakdb
|
|
161
|
+
- melee
|
|
162
|
+
- disarm
|
|
163
|
+
- stat
|
|
164
|
+
- gate
|
|
165
|
+
detail: "Observed vanilla behaviors once disarm worked: the dropped weapon is a damaged-quality
|
|
166
|
+
lootable, and NPCs re-equip a backup weapon (kept deliberately as counterplay rather than
|
|
167
|
+
patched out). A Stagger status effect was added on proc for readability."
|
|
168
|
+
- id: cp2077.tweakdb.melee.thermal-damage-flag-required-for-burn-application
|
|
169
|
+
claim: BaseStats.BurningApplicationRate is multiplied by the BaseStats.DealsThermalDamage flag in
|
|
170
|
+
base_melee's stat calculation (the flag is 0 on machetes by default); a plain additive
|
|
171
|
+
BurningApplicationRate modifier on a machete-family weapon will never show any burn chance
|
|
172
|
+
unless DealsThermalDamage is also explicitly set to 1.
|
|
173
|
+
status: verified
|
|
174
|
+
source: ModWright field verification
|
|
175
|
+
tags:
|
|
176
|
+
- tweakdb
|
|
177
|
+
- melee
|
|
178
|
+
- burning
|
|
179
|
+
- thermal
|
|
180
|
+
- stat-modifier
|
|
181
|
+
- silent-failure
|
|
182
|
+
detail: 'Fix shipped as two appended ConstantStatModifiers: DealsThermalDamage Additive 1, then
|
|
183
|
+
BurningApplicationRate Multiplier 0.75 (a token quality curve, since per-item proc damage
|
|
184
|
+
cannot itself be reduced). Ships alongside a parallel BleedingApplicationRate Multiplier 0.5,
|
|
185
|
+
described as "modest real baselines" the redscript disarm/burn logic stacks larger
|
|
186
|
+
attack-specific bonuses on top of (+25% light burn, +15% heavy bleed at Legendary).'
|
|
187
|
+
- id: cp2077.tweakdb.melee.tag-check-required-for-tiered-base-clones
|
|
188
|
+
claim: "Tiered spawn-preset records built as `$base: Items.<ModWeapon>` clones
|
|
189
|
+
(Items.<ModWeapon>_T2..T5) get their OWN distinct TweakDBIDs; redscript that gates a behavior
|
|
190
|
+
on exact TweakDBID equality to the base item silently skips every tiered clone. Use HasTag()
|
|
191
|
+
on a custom identity tag appended to the base record instead, which all clones inherit."
|
|
192
|
+
status: verified
|
|
193
|
+
source: ModWright field verification
|
|
194
|
+
tags:
|
|
195
|
+
- tweakdb
|
|
196
|
+
- melee
|
|
197
|
+
- tag
|
|
198
|
+
- tweakdbid
|
|
199
|
+
- base-clone
|
|
200
|
+
- silent-failure
|
|
201
|
+
detail: Both the disarm hook (HitReactionComponent.EvaluateHit) and the bullet deflect hook
|
|
202
|
+
(DamageSystem.ProcessBulletBlockAndDeflect) check
|
|
203
|
+
weapon.GetItemData().HasTag(n"<ModWeaponTag>") rather than comparing TweakDBIDs, specifically
|
|
204
|
+
because of this. The tag is appended once, on Items.<ModWeapon>, and inherited by every $base
|
|
205
|
+
clone.
|
|
206
|
+
- id: cp2077.tweakdb.melee.enableadjustingplayerpositiontotarget-lunge-flag
|
|
207
|
+
claim: enableAdjustingPlayerPositionToTarget on an attack record is the perk-free mechanism (read in
|
|
208
|
+
meleeTransitions.script:2345) that makes a vanilla blade's STRONG attack close distance to a
|
|
209
|
+
target; it requires a hostile within roughly 4 m and 10 degrees of the crosshair and does
|
|
210
|
+
nothing when swung at empty air (vanilla behavior, not a bug). Any light-chain or finisher
|
|
211
|
+
record can set it to gain the same lunge, since the code path (MeleeFinalAttackEvents.OnEnter
|
|
212
|
+
-> super.OnEnter, or the combo equivalent) is not exclusive to strong attacks.
|
|
213
|
+
status: verified
|
|
214
|
+
source: ModWright field verification
|
|
215
|
+
tags:
|
|
216
|
+
- tweakdb
|
|
217
|
+
- melee
|
|
218
|
+
- lunge
|
|
219
|
+
- target-snap
|
|
220
|
+
- attack-record
|
|
221
|
+
detail: "Distinct from BaseStats.CanMeleeLeap / the meleeLeap PSM state (which this mechanism is NOT
|
|
222
|
+
— that state is unreachable from a light chain, demanding a charged-hold release instead).
|
|
223
|
+
Enabled and tested on the light finisher (<ModAttacks>.FinalAttack4), then deliberately
|
|
224
|
+
DISABLED there by the author's call: by swing 4 of the light chain the player is already
|
|
225
|
+
standing on the target, so the gated ~4 m snap rarely fires and adds nothing — not a defect in
|
|
226
|
+
the mechanism, a mismatch with where the chain puts the player. Re-enabling is one
|
|
227
|
+
commented-out line. It was then MOVED to the chain OPENER instead: <ModAttacks>.ComboAttack1
|
|
228
|
+
(counter 0) sets enableAdjustingPlayerPositionToTarget: true, where the ~4 m closing gate
|
|
229
|
+
actually helps. A companion field, useAdjustmentInsteadOfImpulse (a target-free fixed-metres
|
|
230
|
+
variant), is explicitly left UNVERIFIED in the yaml — no vanilla record exercises it, and the
|
|
231
|
+
comment says not to add it without observing it first."
|
|
232
|
+
- id: cp2077.tweakdb.melee.vanilla-camera-impulse-inert-during-melee-attack
|
|
233
|
+
claim: Vanilla's generic camera-space movement impulse mechanism does not apply while the player is
|
|
234
|
+
in a melee-attack state, confirmed by in-game logging; a target-free forward-motion effect
|
|
235
|
+
during a melee attack cannot rely on that vanilla route and needs a custom implementation
|
|
236
|
+
instead.
|
|
237
|
+
status: verified
|
|
238
|
+
source: ModWright field verification
|
|
239
|
+
tags:
|
|
240
|
+
- tweakdb
|
|
241
|
+
- melee
|
|
242
|
+
- impulse
|
|
243
|
+
- lunge
|
|
244
|
+
- silent-failure
|
|
245
|
+
detail: "This is why the mod's lunge script exists at all: it reads the cameraSpaceImpulse field
|
|
246
|
+
itself and hands the state machine an adjustTransform call (the same underlying mechanism as
|
|
247
|
+
enableAdjustingPlayerPositionToTarget's target-snap), rather than relying on vanilla's own
|
|
248
|
+
impulse application."
|
|
249
|
+
- id: cp2077.tweakdb.melee.retiming-preserves-hit-frame-position
|
|
250
|
+
claim: When re-timing an attack record's startupDuration/activeDuration/ recoverDuration to speed up
|
|
251
|
+
or slow down a hand-keyed clip, scale ALL the state-time fields (including attackEffectDelay
|
|
252
|
+
and the attackWindow open/close bounds) by the same factor, so the hit frame and input-buffer
|
|
253
|
+
windows keep their original frame positions relative to the clip instead of drifting.
|
|
254
|
+
status: inferred
|
|
255
|
+
source: ModWright research
|
|
256
|
+
tags:
|
|
257
|
+
- tweakdb
|
|
258
|
+
- melee
|
|
259
|
+
- timing
|
|
260
|
+
- attack-record
|
|
261
|
+
- retiming
|
|
262
|
+
detail: "Worked example: StrongAttack1's 49-frame clip has phase markers at f~0/f12/f19 (30 fps);
|
|
263
|
+
durations 0.400/0.233/0.967 scaled by 0.9 keep the hit locked to clip frame 24 while the whole
|
|
264
|
+
swing plays 10% faster. Reverting is documented as deleting the three durations to restore the
|
|
265
|
+
pre-scale values (0.8/0.9/1.3/1.65)."
|
|
266
|
+
- id: cp2077.tweakdb.melee.trailstartdelay-999-disables-swing-trail-per-record
|
|
267
|
+
claim: Setting an attack record's trailStartDelay to a value larger than the clip's total length
|
|
268
|
+
(e.g. 999.0) disables the melee swing trail for that specific record without touching any
|
|
269
|
+
other record or any effect descriptor, because the trail only starts once elapsed state time
|
|
270
|
+
passes trailStartDelay.
|
|
271
|
+
status: verified
|
|
272
|
+
source: ModWright field verification
|
|
273
|
+
tags:
|
|
274
|
+
- tweakdb
|
|
275
|
+
- melee
|
|
276
|
+
- swing-trail
|
|
277
|
+
- attack-record
|
|
278
|
+
- per-record-toggle
|
|
279
|
+
detail: "Shipped gating (the author's verdict: trail ON only for light 3 and light 4): ComboAttack1,
|
|
280
|
+
ComboAttack2, StrongAttack1 and StrongAttack2 are pushed to trailStartDelay 999.0 by this
|
|
281
|
+
mechanism, while ComboAttack3 and FinalAttack4 are left at the inherited working 0.1 delay and
|
|
282
|
+
show the trail. See cp2077.fx.effects.trail-name-resolved-from-damage-comparison for why the
|
|
283
|
+
trail needed a separate effect-pairing fix before any of this per-record gating became visible
|
|
284
|
+
at all."
|
|
285
|
+
- id: cp2077.tweakdb.melee.deflect-tuning-stamina-and-ricochet
|
|
286
|
+
claim: "A weapon-specific bullet-deflect rework can independently tune: (a) the per-bullet stamina
|
|
287
|
+
cost while blocking bullets (vanilla divides StaminaCostToBlock by 2; this weapon divides by
|
|
288
|
+
4), (b) a quality-scaled chance to ricochet a blocked-but-not-deflected bullet back WITHOUT
|
|
289
|
+
the Reflexes_Right_Perk_2_1 perk (vanilla requires the perk for any ricochet at all), and (c)
|
|
290
|
+
a flat damage multiplier on ricocheted damage WITH the perk. All three are implemented as a
|
|
291
|
+
@wrapMethod(DamageSystem) ProcessBulletBlockAndDeflect override gated on the blocking item's
|
|
292
|
+
tag."
|
|
293
|
+
status: inferred
|
|
294
|
+
source: ModWright research
|
|
295
|
+
tags:
|
|
296
|
+
- tweakdb
|
|
297
|
+
- melee
|
|
298
|
+
- deflect
|
|
299
|
+
- bullet
|
|
300
|
+
- stamina
|
|
301
|
+
- ricochet
|
|
302
|
+
detail: "Shipped values: stamina divisor 4.0 (vanilla 2.0); ricochet chance without the perk scales
|
|
303
|
+
by weapon quality: Legendary/Iconic 0.45, Epic 0.25, Rare 0.10, below-Rare 0.05 (the spec was
|
|
304
|
+
\"10% at rare, 45% at legendary\"; Epic interpolated). With the perk, ricochet damage is
|
|
305
|
+
multiplied 1.5x on top of the existing parry bump. The block prerequisite itself (a blade +
|
|
306
|
+
Reflexes_Right_Milestone_2 level 2) is explicitly kept, not part of this change — see
|
|
307
|
+
cp2077.tweakdb.melee.tag-check-required-for-tiered-base-clones for the identity-tag gating
|
|
308
|
+
mechanism this hook reuses. Inferred, not verified: the values are read out of the shipped
|
|
309
|
+
redscript; the source records no in-game observation of the ricochet rates themselves. The
|
|
310
|
+
gate in code is blockingItem.GetItemData().HasTag(n\"<ModWeaponTag>\"), despite the header
|
|
311
|
+
comment's looser \"gated on the blocking item being Items.<ModWeapon>\"."
|
|
312
|
+
- id: cp2077.tweakdb.melee.finisher-tag-backward-scan-selects-effect
|
|
313
|
+
claim: finisher.script scans a weapon's tags array BACKWARD and uses the first tag that resolves to
|
|
314
|
+
a 'playFinisher' game effect; appending a new finisher-identity tag to a weapon's tags list is
|
|
315
|
+
enough to make it win over an inherited finisher tag (e.g. OneHandBladeFinisher), with no
|
|
316
|
+
!remove of the inherited tag required.
|
|
317
|
+
status: inferred
|
|
318
|
+
source: ModWright research
|
|
319
|
+
tags:
|
|
320
|
+
- tweakdb
|
|
321
|
+
- melee
|
|
322
|
+
- finisher
|
|
323
|
+
- tag
|
|
324
|
+
- scan-order
|
|
325
|
+
detail: Cited from finisher.script:224-231 in the source mod's own comment. The specific finisher
|
|
326
|
+
motions this routes to (the mod's own finisher tag and its back variant) are
|
|
327
|
+
animation-workspot content outside this file's scope; only the generic tag-scan selection
|
|
328
|
+
mechanism is recorded here.
|
|
329
|
+
- id: cp2077.tweakdb.melee.iconic-melee-mod-element-is-items-iconicmeleeweaponmodelement
|
|
330
|
+
claim: The vanilla blueprint element that grants a melee weapon its iconic-mod attachment slot is
|
|
331
|
+
Items.IconicMeleeWeaponModElement (type ItemBlueprintElement, slot
|
|
332
|
+
AttachmentSlots.IconicMeleeWeaponMod1), declared in blueprint_elements.tweak beside
|
|
333
|
+
Items.IconicRangedWeaponModElement (slot AttachmentSlots.IconicWeaponModLegendary), and used
|
|
334
|
+
by the vanilla melee iconics' own blueprints (Preset_Baseball_Bat_Denny, Preset_Baton_Murphy,
|
|
335
|
+
Preset_Butchers_Knife_Iconic, Preset_Cane_Fingers and others, each through an inline
|
|
336
|
+
rootElement child with that slot).
|
|
337
|
+
status: verified
|
|
338
|
+
verified_on: "2.31"
|
|
339
|
+
source: installed Cyberpunk 2077 2.31 tools/redmod/tweaks (blueprint_elements.tweak,
|
|
340
|
+
melee/presets/*.tweak), via the ModWright vanilla index
|
|
341
|
+
tags:
|
|
342
|
+
- tweakdb
|
|
343
|
+
- melee
|
|
344
|
+
- iconic
|
|
345
|
+
- blueprint
|
|
346
|
+
- attachment-slot
|
|
347
|
+
- scaffold
|
|
348
|
+
detail: "Settles the name the new-item-chain scaffold's iconicModElementName input needed for a
|
|
349
|
+
melee base (its header called it UNCONFIRMED). Not yet seen in game: whether a mod-authored
|
|
350
|
+
blueprint carrying this element gives a scaffolded melee item a functional iconic slot is the
|
|
351
|
+
same open question as for the ranged element. One melee mod's iconic instead points blueprint:
|
|
352
|
+
at the vanilla Items.Iconic_Melee_Blueprint and never clones a blueprint."
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: tweakdb.weapons
|
|
3
|
+
title: Weapon records, damage calibration, and iconic modifiers
|
|
4
|
+
facts:
|
|
5
|
+
- id: cp2077.tweakdb.slot-part-list-preset-paints-weapon
|
|
6
|
+
claim: A weapon's visuals can be painted by giving it part records in slotPartListPreset whose
|
|
7
|
+
appearances carry the custom mesh.
|
|
8
|
+
status: contradicted
|
|
9
|
+
source: ModWright research
|
|
10
|
+
tags:
|
|
11
|
+
- appearance
|
|
12
|
+
- visual
|
|
13
|
+
- slot-part-list-preset
|
|
14
|
+
- body-part
|
|
15
|
+
- retracted
|
|
16
|
+
detail: "This was the mod's v1 belief, and the stale header comment of its tweak yaml still records
|
|
17
|
+
it (\"Visuals : G-58 Dian part records via slotPartListPreset\"). A complete part chain
|
|
18
|
+
(Items.<ModWeapon>BodyPart, based on Items.w_smg__kang_tao_dian__rcv1, with
|
|
19
|
+
appearanceResourceName: <mod>_body resolved through factory_parts.csv to
|
|
20
|
+
mod\\<modname>\\<mod>_body.app) was authored into slotPartListPreset and had no visual effect
|
|
21
|
+
at all. It still ships in the yaml, inert. Merged here from a former entities-focused fact,
|
|
22
|
+
which claimed the same mechanism plus an unsourced \"invisible weapon\" symptom. Superseded by
|
|
23
|
+
cp2077.tweakdb.weapon-visuals-via-appearanceresourcename."
|
|
24
|
+
- id: cp2077.tweakdb.weapon-visuals-via-appearanceresourcename
|
|
25
|
+
claim: Weapon visuals are painted by the weapon-level .app file resolved via the weapon record's
|
|
26
|
+
appearanceResourceName + the ArchiveXL factory csv, not by slotPartListPreset part
|
|
27
|
+
appearances.
|
|
28
|
+
status: verified
|
|
29
|
+
verified_on: "2.31"
|
|
30
|
+
source: ModWright field verification
|
|
31
|
+
tags:
|
|
32
|
+
- appearance
|
|
33
|
+
- visual
|
|
34
|
+
- factory
|
|
35
|
+
- appearance-resource-name
|
|
36
|
+
- slot-part-list-preset
|
|
37
|
+
supersedes: cp2077.tweakdb.slot-part-list-preset-paints-weapon
|
|
38
|
+
detail: "Items.Preset_<ModWeapon> sets appearanceResourceName: <ModWeapon>_Weapon, which
|
|
39
|
+
mod\\<modname>\\factory_parts.csv maps to mod\\<modname>\\<mod>_weapon.app. The part chain in
|
|
40
|
+
slotPartListPreset did nothing until that weapon-level .app existed."
|
|
41
|
+
- id: cp2077.tweakdb.iconic-blueprint-required-for-mod-slot
|
|
42
|
+
claim: The IconicWeaponModLegendary attachment slot only exists if the weapon blueprint is an iconic
|
|
43
|
+
blueprint; on a non-iconic blueprint the slot is absent and the iconic modifier (which carries
|
|
44
|
+
all the special stats) is silently dropped.
|
|
45
|
+
status: verified
|
|
46
|
+
verified_on: "2.31"
|
|
47
|
+
source: ModWright field verification
|
|
48
|
+
tags:
|
|
49
|
+
- blueprint
|
|
50
|
+
- iconic
|
|
51
|
+
- attachment-slot
|
|
52
|
+
- silent-failure
|
|
53
|
+
detail: The v1 weapon shipped with every iconic stat missing and no error. <ModWeapon>Blueprint is
|
|
54
|
+
based on Items.Base_Smart_Precision_Sniper_Rifle_NoMuzzle_Blueprint and adds
|
|
55
|
+
Items.IconicRangedWeaponModElement to rootElement.childElements — that child element is what
|
|
56
|
+
supplies the iconic mod slot the modifier lives in.
|
|
57
|
+
- id: cp2077.tweakdb.damage-per-hit-empirical-calibration
|
|
58
|
+
claim: DamagePerHit must be calibrated empirically by reading the in-game damage panel at each tier;
|
|
59
|
+
the panel value derives from a DPS/DamagePerHit interplay that no formula in the sources
|
|
60
|
+
predicts.
|
|
61
|
+
status: verified
|
|
62
|
+
verified_on: "2.31"
|
|
63
|
+
source: ModWright field verification
|
|
64
|
+
tags:
|
|
65
|
+
- damage
|
|
66
|
+
- damage-per-hit
|
|
67
|
+
- calibration
|
|
68
|
+
- balance
|
|
69
|
+
- in-game
|
|
70
|
+
detail: "Readings on the Ashura base, with modifierType AdditiveMultiplier on
|
|
71
|
+
BaseStats.DamagePerHit: -0.25 -> 278 at T5; -0.104 -> 333 (the mod's notes: \"calibrated so
|
|
72
|
+
Tier 5 shows 333 dmg\"). The yaml comment records the arithmetic behind the second value:
|
|
73
|
+
unpenalized Tier-5 base 371 (443/1.194), 371 x 0.896 = 332. The shipped main file uses -0.104;
|
|
74
|
+
a balanced variant file uses -0.5, where \"the full burst (2 rounds) totals one vanilla Ashura
|
|
75
|
+
shot (371): each round lands ~186\"."
|
|
76
|
+
- id: cp2077.tweakdb.twin-lock-stat-modifiers
|
|
77
|
+
claim: "Twin smart-lock (both hip and ADS) requires two separate stat modifiers:
|
|
78
|
+
BaseStats.SmartGunAdsMaxLockedTargets +1 and BaseStats.SmartGunHipMaxLockedTargets +1
|
|
79
|
+
(modifierType Additive), both on the iconic modifier."
|
|
80
|
+
status: verified
|
|
81
|
+
verified_on: "2.31"
|
|
82
|
+
source: ModWright field verification
|
|
83
|
+
tags:
|
|
84
|
+
- smart-weapon
|
|
85
|
+
- lock
|
|
86
|
+
- stat-modifier
|
|
87
|
+
- dual-target
|
|
88
|
+
detail: The yaml comment records the Ashura stock value as 1 for each (hip and ADS single-target);
|
|
89
|
+
+1 additive on each yields 2 simultaneous locks. The stock value is an authoring comment, not
|
|
90
|
+
a measurement.
|
|
91
|
+
- id: cp2077.tweakdb.burst-fire-true-two-rounds
|
|
92
|
+
claim: A true 2-round burst (both rounds real, each consuming ammo and able to strike a different
|
|
93
|
+
lock) is produced by BaseStats.NumShotsInBurst +2 and BaseStats.CycleTime_Burst +0.06
|
|
94
|
+
(Additive) on the iconic modifier, with TriggerMode.Burst as the weapon's primaryTriggerMode.
|
|
95
|
+
status: verified
|
|
96
|
+
verified_on: "2.31"
|
|
97
|
+
source: ModWright field verification
|
|
98
|
+
tags:
|
|
99
|
+
- burst
|
|
100
|
+
- fire-mode
|
|
101
|
+
- ammo
|
|
102
|
+
- cycle-time
|
|
103
|
+
detail: "Shipped behaviour per the mod's notes: \"fires 2, consumes 2, mag = 2 (twin chambers)\".
|
|
104
|
+
The +0.06 CycleTime_Burst is the near-simultaneous gap between the paired rounds."
|
|
105
|
+
- id: cp2077.tweakdb.magazine-capacity-twin-chamber
|
|
106
|
+
claim: A twin-chamber weapon that empties on one trigger pull needs BaseStats.MagazineCapacity +1
|
|
107
|
+
(Additive) over the vanilla Ashura base of 1, giving capacity 2.
|
|
108
|
+
status: verified
|
|
109
|
+
verified_on: "2.31"
|
|
110
|
+
source: ModWright field verification
|
|
111
|
+
tags:
|
|
112
|
+
- magazine
|
|
113
|
+
- capacity
|
|
114
|
+
- twin
|
|
115
|
+
- chamber
|
|
116
|
+
- reload
|
|
117
|
+
detail: The yaml comment records the vanilla Ashura MagazineCapacity as 1 ("loads a single round per
|
|
118
|
+
reload"); this gun chambers a pair, so one pull empties the magazine and forces a reload.
|
|
119
|
+
- id: cp2077.tweakdb.headshot-multiplier-stat
|
|
120
|
+
claim: BaseStats.HeadshotDamageMultiplier takes an Additive stat modifier; a ranged weapon mod ships
|
|
121
|
+
value 2.5.
|
|
122
|
+
status: verified
|
|
123
|
+
verified_on: "2.31"
|
|
124
|
+
source: ModWright field verification
|
|
125
|
+
tags:
|
|
126
|
+
- headshot
|
|
127
|
+
- damage-multiplier
|
|
128
|
+
- stat
|
|
129
|
+
detail: "The sources describe the same +2.5 additive two ways: the yaml comment and README call it a
|
|
130
|
+
\"250% headshot bonus\", the mod's design notes call it \"+400% headshot (+2.5 additive)\". No
|
|
131
|
+
source states how the engine folds the additive into the final headshot multiplier, so do not
|
|
132
|
+
quote a total multiplier."
|
|
133
|
+
- id: cp2077.tweakdb.projectile-velocity-stat
|
|
134
|
+
claim: BaseStats.SmartGunPlayerProjectileVelocity is the smart-weapon projectile speed stat; the
|
|
135
|
+
Ashura base is 80 and an Additive +20 takes it to 100.
|
|
136
|
+
status: verified
|
|
137
|
+
verified_on: "2.31"
|
|
138
|
+
source: ModWright field verification
|
|
139
|
+
tags:
|
|
140
|
+
- projectile
|
|
141
|
+
- velocity
|
|
142
|
+
- stat
|
|
143
|
+
- smart-weapon
|
|
144
|
+
detail: The shipped modifier (+20 Additive) is part of the weapon confirmed in game; the base value
|
|
145
|
+
80 and the resulting 100 come from the yaml authoring comment, not from a reading. The units
|
|
146
|
+
are not documented in the sources.
|
|
147
|
+
- id: cp2077.tweakdb.smart-targeting-reticle-size
|
|
148
|
+
claim: BaseStats.SmartGunTargetingRectangleSizeIncrease is expressed in percent as an Additive
|
|
149
|
+
modifier; a ranged weapon mod ships value 25 for a +25% smart reticle.
|
|
150
|
+
status: verified
|
|
151
|
+
verified_on: "2.31"
|
|
152
|
+
source: ModWright field verification
|
|
153
|
+
tags:
|
|
154
|
+
- smart-weapon
|
|
155
|
+
- ui
|
|
156
|
+
- targeting
|
|
157
|
+
- reticle
|
|
158
|
+
detail: That the stat is in percent is the yaml comment's statement; only the shipped value (25) and
|
|
159
|
+
the described effect (+25%) are recorded elsewhere.
|
|
160
|
+
- id: cp2077.tweakdb.weapon-noise-silencer-stat
|
|
161
|
+
claim: BaseStats.WeaponNoise Additive -10 is the vanilla SilencerBase value and is what an integral
|
|
162
|
+
suppressor applies on the weapon.
|
|
163
|
+
status: verified
|
|
164
|
+
verified_on: "2.31"
|
|
165
|
+
source: ModWright field verification
|
|
166
|
+
tags:
|
|
167
|
+
- weapon-noise
|
|
168
|
+
- suppressor
|
|
169
|
+
- silencer
|
|
170
|
+
- stealth
|
|
171
|
+
detail: Applied on the iconic modifier alongside RicochetCount x0. The sources state the value and
|
|
172
|
+
its vanilla origin, not the detection-range curve it feeds.
|
|
173
|
+
- id: cp2077.tweakdb.ricochet-count-multiplier-zero
|
|
174
|
+
claim: BaseStats.RicochetCount with modifierType Multiplier and value 0 removes ricochets; a weapon
|
|
175
|
+
mod applies it as part of the integral-suppressor stat block.
|
|
176
|
+
status: verified
|
|
177
|
+
verified_on: "2.31"
|
|
178
|
+
source: ModWright field verification
|
|
179
|
+
tags:
|
|
180
|
+
- ricochet
|
|
181
|
+
- suppressor
|
|
182
|
+
- stat
|
|
183
|
+
detail: Copied from the vanilla SilencerBase stat set, which pairs WeaponNoise -10 with
|
|
184
|
+
RicochetCount x0.
|
|
185
|
+
- id: cp2077.tweakdb.can-silent-kill-on-weapon-record
|
|
186
|
+
claim: BaseStats.CanSilentKill +1 must sit in the weapon record's own statModifiers, not on the
|
|
187
|
+
iconic-mod part record, because StealthRunner's detection patch (bug_fixes.reds) falls back to
|
|
188
|
+
scanning the record's statModifiers.
|
|
189
|
+
status: inferred
|
|
190
|
+
source: ModWright research
|
|
191
|
+
tags:
|
|
192
|
+
- stealth
|
|
193
|
+
- silent-kill
|
|
194
|
+
- stat
|
|
195
|
+
- iconic-modifier
|
|
196
|
+
- interoperability
|
|
197
|
+
detail: A weapon mod places it on Items.Preset_<ModWeapon>, not <ModWeapon>IconicWeaponMod, which
|
|
198
|
+
the yaml comment says is how Wind (Silent Ashura) stays reliably silent. The placement ships
|
|
199
|
+
in the working weapon, but no source records testing the part-record placement and observing a
|
|
200
|
+
failure, so the causal claim is reasoning, not observation.
|
|
201
|
+
- id: cp2077.tweakdb.quality-stat-iconic-progression
|
|
202
|
+
claim: "quality: Quality.Random on an iconic weapon is what makes it scale with player level like
|
|
203
|
+
other iconics; the actual tier is fixed when the item is crafted."
|
|
204
|
+
status: verified
|
|
205
|
+
verified_on: "2.31"
|
|
206
|
+
source: ModWright field verification
|
|
207
|
+
tags:
|
|
208
|
+
- quality
|
|
209
|
+
- iconic
|
|
210
|
+
- progression
|
|
211
|
+
- scaling
|
|
212
|
+
detail: Paired with the tiered craftables Items.$(tier)_<ModWeapon> and their recipes, this is the
|
|
213
|
+
pattern that gives the level-banded spec drop shipped in the mod's v1.0.0.
|
|
214
|
+
- id: cp2077.tweakdb.craftable-iconic-quality-randomisation
|
|
215
|
+
claim: Items.CraftableIconicQualityRandomisation is appended to statModifierGroups on a craftable
|
|
216
|
+
iconic weapon; a weapon mod ships it alongside quality Quality.Random.
|
|
217
|
+
status: verified
|
|
218
|
+
verified_on: "2.31"
|
|
219
|
+
source: ModWright field verification
|
|
220
|
+
tags:
|
|
221
|
+
- crafting
|
|
222
|
+
- quality
|
|
223
|
+
- stat-modifier-group
|
|
224
|
+
- iconic
|
|
225
|
+
detail: "Appended as `statModifierGroups: [!append Items.CraftableIconicQualityRandomisation]`, with
|
|
226
|
+
`statModifiers: [!append Quality.IconicItem]` on the same record. The sources state the
|
|
227
|
+
pairing, not the internal roll mechanics."
|
|
228
|
+
- id: cp2077.tweakdb.tier-badge-quality-stat-times-two
|
|
229
|
+
claim: The in-game item tier badge comes from the Quality STAT x 2 (EffectiveTier).
|
|
230
|
+
status: verified
|
|
231
|
+
verified_on: "2.31"
|
|
232
|
+
source: ModWright field verification
|
|
233
|
+
tags:
|
|
234
|
+
- quality
|
|
235
|
+
- tier
|
|
236
|
+
- badge
|
|
237
|
+
- visual
|
|
238
|
+
- stat
|
|
239
|
+
detail: Read off the in-game item panel while working on tiered weapons. The lesson's other half —
|
|
240
|
+
that the `quality:` field only seeds loot rolls — is
|
|
241
|
+
cp2077.tweakdb.quality-field-loot-roll-seed.
|
|
242
|
+
- id: cp2077.tweakdb.quality-field-loot-roll-seed
|
|
243
|
+
claim: The `quality:` field on a weapon record only seeds loot rolls; it does not set the displayed
|
|
244
|
+
tier.
|
|
245
|
+
status: verified
|
|
246
|
+
verified_on: "2.31"
|
|
247
|
+
source: ModWright field verification
|
|
248
|
+
tags:
|
|
249
|
+
- quality
|
|
250
|
+
- loot
|
|
251
|
+
- recipe
|
|
252
|
+
- tier
|
|
253
|
+
detail: "In a weapon mod, crafted tiers come from the tiered craftable records
|
|
254
|
+
Items.$(tier)_<ModWeapon> (quality: Quality.$(tier)) that the tiered recipes produce, not from
|
|
255
|
+
Items.Preset_<ModWeapon>'s own Quality.Random."
|
|
256
|
+
- id: cp2077.tweakdb.weapons.spawned-weapon-itemid-carries-a-seed-so-bare-tdbid-reads-miss-it
|
|
257
|
+
claim: "A weapon added with Game.AddToInventory(recordId, 1) is present in the inventory, but
|
|
258
|
+
Game.GetTransactionSystem():GetItemQuantity(player, ItemID.FromTDBID(TweakDBID.new(recordId)))
|
|
259
|
+
returns 0 and HasItem(...) returns false for it, in the same tick and seconds later: a bare
|
|
260
|
+
TweakDB id does not identify a spawned weapon instance, whose ItemID carries a per-instance
|
|
261
|
+
seed. Counting spawned weapons needs an inventory walk, not a TDBID query."
|
|
262
|
+
status: verified
|
|
263
|
+
verified_on: "2.31"
|
|
264
|
+
source: ModWright field verification
|
|
265
|
+
tags:
|
|
266
|
+
- tweakdb
|
|
267
|
+
- weapons
|
|
268
|
+
- itemid
|
|
269
|
+
- inventory
|
|
270
|
+
- cet
|
|
271
|
+
- eval
|
|
272
|
+
- read-back
|
|
273
|
+
detail: The "seed" explanation is the standard one for weapon ItemIDs and is inferred here; the
|
|
274
|
+
observation is only that the TDBID-based reads miss the spawned item. A CET-side count that
|
|
275
|
+
walks the inventory was not tried.
|
|
276
|
+
- id: cp2077.tweakdb.weapons.blueprint-root-restated-with-only-the-iconic-element-yields-no-slots
|
|
277
|
+
claim: "A project blueprint that $base's a vanilla weapon blueprint and restates rootElement with
|
|
278
|
+
childElements holding only Items.IconicRangedWeaponModElement (no slot, none of the base
|
|
279
|
+
root's children) gives the item no attachment slots at all in the weapon modding screen: the
|
|
280
|
+
base's mod slots are gone and no iconic slot appears either. The restatement replaces the
|
|
281
|
+
inherited root rather than adding to it."
|
|
282
|
+
status: verified
|
|
283
|
+
verified_on: "2.31"
|
|
284
|
+
source: ModWright field verification
|
|
285
|
+
tags:
|
|
286
|
+
- tweakdb
|
|
287
|
+
- weapons
|
|
288
|
+
- blueprint
|
|
289
|
+
- iconic
|
|
290
|
+
- attachment-slot
|
|
291
|
+
- scaffold
|
|
292
|
+
detail: "Answered on 2026-09-12 (the next fact): with the base's slot and children restated beside
|
|
293
|
+
the iconic element the base's slots come back, and an iconic slot with no part in it is not
|
|
294
|
+
listed at all. The vanilla index names a root's inline children <root>_inline0/1/2 while the
|
|
295
|
+
engine flattens them to <blueprint>_inline1/2/3, so a restatement cannot copy the index's
|
|
296
|
+
inline names verbatim; the blueprint-root lookup renders inline elements as nested mappings
|
|
297
|
+
instead."
|
|
298
|
+
- id: cp2077.tweakdb.weapons.restated-root-with-base-children-keeps-base-slots-and-empty-iconic-slot-is-unlisted
|
|
299
|
+
claim: "A project blueprint that $base's a vanilla weapon blueprint and restates rootElement with
|
|
300
|
+
the base root's own slot and every child (named elements by name, inline ones as nested
|
|
301
|
+
slot/childElements mappings) plus Items.IconicRangedWeaponModElement first keeps the base's
|
|
302
|
+
attachment slots: at the same tier the clone's tooltip lists exactly the slots the vanilla
|
|
303
|
+
base's tooltip lists (equipped, the clone's panel lists that same single slot; the vanilla was
|
|
304
|
+
not equipped). Which mod slots appear is gated by tier, not by the blueprint (a Tier 1 vanilla
|
|
305
|
+
JKE-X2 Kenshin lists only \"Empty Scope Slot\" while a Tier 5 one lists the scope and two mod
|
|
306
|
+
slots), and the iconic slot the IconicRangedWeaponModElement opens
|
|
307
|
+
(AttachmentSlots.IconicWeaponModLegendary) is not listed while nothing is attached in it."
|
|
308
|
+
status: verified
|
|
309
|
+
verified_on: "2.31"
|
|
310
|
+
source: ModWright field verification
|
|
311
|
+
related:
|
|
312
|
+
- cp2077.tweakdb.weapons.blueprint-root-restated-with-only-the-iconic-element-yields-no-slots
|
|
313
|
+
- cp2077.tweakdb.iconic-blueprint-required-for-mod-slot
|
|
314
|
+
tags:
|
|
315
|
+
- tweakdb
|
|
316
|
+
- weapons
|
|
317
|
+
- blueprint
|
|
318
|
+
- iconic
|
|
319
|
+
- attachment-slot
|
|
320
|
+
- tier
|
|
321
|
+
- scaffold
|
|
322
|
+
detail: Showing the iconic slot populated therefore needs an iconic modifier part authored on the
|
|
323
|
+
element (a <ModWeapon>IconicWeaponMod in its slotPartListPreset), which stays the scaffold's
|
|
324
|
+
manual step. The Tier 5 control comes from an earlier launch (2026-09-11), the Tier 1 pair
|
|
325
|
+
from this one (2026-09-12); no tier in between was observed.
|