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,645 @@
|
|
|
1
|
+
game: cyberpunk2077
|
|
2
|
+
topic: red4ext.api
|
|
3
|
+
title: RED4ext plugin API, address resolution, frame ticks, red-lib and Codeware hooking patterns,
|
|
4
|
+
and the puppet locomotion natives a plugin can reach
|
|
5
|
+
facts:
|
|
6
|
+
- id: cp2077.red4ext.api.sdk-struct-five-services
|
|
7
|
+
claim: "The `RED4ext::v1::Sdk` a plugin receives in `Main` carries exactly five pointers: `runtime`
|
|
8
|
+
(a `SemVer*` holding the game's product version, e.g. 2.31, not its file version), `logger`,
|
|
9
|
+
`hooking`, `gameStates` and `scripts`."
|
|
10
|
+
status: verified
|
|
11
|
+
source: WopsS/RED4ext.SDK@ad72777 include/RED4ext/Api/v1/Sdk.hpp
|
|
12
|
+
tags:
|
|
13
|
+
- red4ext
|
|
14
|
+
- sdk
|
|
15
|
+
- api
|
|
16
|
+
- services
|
|
17
|
+
related:
|
|
18
|
+
- cp2077.red4ext.plugins.three-required-exports
|
|
19
|
+
- id: cp2077.red4ext.api.hooking-attach-detach-signatures
|
|
20
|
+
claim: "The loader's hooking service is two function pointers: `bool Attach(PluginHandle, void*
|
|
21
|
+
target, void* detour, void** original)` (original may be null; returns true when attached) and
|
|
22
|
+
`bool Detach(PluginHandle, void* target)` (detaches every hook at that target); the loader
|
|
23
|
+
implements them with Detours transactions."
|
|
24
|
+
status: verified
|
|
25
|
+
source: WopsS/RED4ext.SDK@ad72777 include/RED4ext/Api/v1/Hooking.hpp; WopsS/RED4ext@c52c8d8
|
|
26
|
+
src/dll/Systems/HookingSystem.cpp
|
|
27
|
+
tags:
|
|
28
|
+
- red4ext
|
|
29
|
+
- hooking
|
|
30
|
+
- detours
|
|
31
|
+
- api
|
|
32
|
+
- id: cp2077.red4ext.api.api-version-1-compat-0
|
|
33
|
+
claim: The SDK defines a single API version, `RED4EXT_API_VERSION_1` (= 1), bumped only on
|
|
34
|
+
incompatible ABI changes; `RED4EXT_API_VERSION_1_COMPAT_0` (= 0) lets a plugin report API v0
|
|
35
|
+
for older loaders because v0 and v1 are fully compatible.
|
|
36
|
+
status: verified
|
|
37
|
+
source: WopsS/RED4ext.SDK@ad72777 include/RED4ext/Api/ApiVersion.hpp
|
|
38
|
+
tags:
|
|
39
|
+
- red4ext
|
|
40
|
+
- api-version
|
|
41
|
+
- supports
|
|
42
|
+
- id: cp2077.red4ext.api.runtime-pins-are-pe-file-versions
|
|
43
|
+
claim: "`PluginInfo::runtime` is a PE file version, not a marketing version:
|
|
44
|
+
`RED4EXT_V1_RUNTIME_VERSION_2_31` is `FILEVER(3, 0, 80, 51928)`,
|
|
45
|
+
`RED4EXT_V1_RUNTIME_VERSION_2_30` is `FILEVER(3, 0, 80, 33925)`, and
|
|
46
|
+
`RED4EXT_V1_RUNTIME_VERSION_INDEPENDENT` is all four fields set to `(uint16_t)-1`."
|
|
47
|
+
status: verified
|
|
48
|
+
verified_on: "2.31"
|
|
49
|
+
source: WopsS/RED4ext.SDK@ad72777 include/RED4ext/Api/v1/Runtime.hpp
|
|
50
|
+
tags:
|
|
51
|
+
- red4ext
|
|
52
|
+
- runtime
|
|
53
|
+
- version-gate
|
|
54
|
+
- fileversion
|
|
55
|
+
related:
|
|
56
|
+
- cp2077.red4ext.plugins.runtime-field-pins-game-version
|
|
57
|
+
detail: "Matches ModWright's two-axis version convention: 2.31 on the marketing axis is 3.0.80.51928
|
|
58
|
+
on the file-version axis, and the runtime pin lives on the file-version axis. At this SDK
|
|
59
|
+
commit `RED4EXT_V1_RUNTIME_VERSION_LATEST` is `#define`d to `RED4EXT_V1_RUNTIME_VERSION_2_31`
|
|
60
|
+
(Runtime.hpp:53), so a plugin built against it and pinned to LATEST refuses any later game
|
|
61
|
+
build until rebuilt against a newer SDK."
|
|
62
|
+
- id: cp2077.red4ext.api.address-resolve-through-loader-export
|
|
63
|
+
claim: "`UniversalRelocFunc<T>(hash)` resolves an address by calling the loader's exported
|
|
64
|
+
`RED4ext_ResolveAddress(uint32_t)` (looked up with `GetProcAddress` on the RED4ext module);
|
|
65
|
+
when the loader returns 0 the SDK shows a dialog (\"Failed to find the address for the hash
|
|
66
|
+
... This issue is likely caused by the mod using an incorrect or outdated hash.\") and
|
|
67
|
+
terminates the process."
|
|
68
|
+
status: verified
|
|
69
|
+
source: WopsS/RED4ext.SDK@ad72777 include/RED4ext/Relocation-inl.hpp; WopsS/RED4ext@c52c8d8
|
|
70
|
+
src/dll/Addresses.cpp
|
|
71
|
+
tags:
|
|
72
|
+
- red4ext
|
|
73
|
+
- address
|
|
74
|
+
- hash
|
|
75
|
+
- relocation
|
|
76
|
+
- failure-mode
|
|
77
|
+
detail: "Design consequence: resolve hashes lazily and log the hash before resolving, so an outdated
|
|
78
|
+
hash is diagnosable and does not kill the game at startup."
|
|
79
|
+
- id: cp2077.red4ext.api.loader-address-file-shape
|
|
80
|
+
claim: 'The loader fills its hash-to-address table from
|
|
81
|
+
`<game>\bin\x64\cyberpunk2077_addresses.json`: a root `Addresses` array of objects with a
|
|
82
|
+
`hash` (a number carried as a string) and an `offset` string `"<segment>:<hex>"`, where
|
|
83
|
+
segment 1, 2 and 3 are relative to the `.text`, `.rdata` and `.data` sections of the running
|
|
84
|
+
executable; a missing file is a fatal message box.'
|
|
85
|
+
status: verified
|
|
86
|
+
source: WopsS/RED4ext@c52c8d8 src/dll/Addresses.cpp
|
|
87
|
+
tags:
|
|
88
|
+
- red4ext
|
|
89
|
+
- address
|
|
90
|
+
- json
|
|
91
|
+
- bin-x64
|
|
92
|
+
- id: cp2077.red4ext.api.address-file-is-not-shipped-by-red4ext
|
|
93
|
+
claim: Nothing in the RED4ext repository generates, vendors or documents
|
|
94
|
+
`cyberpunk2077_addresses.json`; the loader reads it from the game's own `bin\x64`, so the file
|
|
95
|
+
is inferred to ship with the game itself, and whether its entries carry a symbol name beside
|
|
96
|
+
`hash` and `offset` is not established from any source read here.
|
|
97
|
+
status: inferred
|
|
98
|
+
source: grep for "addresses.json" / "cyberpunk2077_addresses" across WopsS/RED4ext@c52c8d8 (README,
|
|
99
|
+
BUILDING, CHANGELOG, src), the SDK and the wiki on 2026-09-20 matched only
|
|
100
|
+
src/dll/Addresses.cpp
|
|
101
|
+
tags:
|
|
102
|
+
- red4ext
|
|
103
|
+
- address
|
|
104
|
+
- provenance
|
|
105
|
+
- install-check
|
|
106
|
+
detail: Whether the file exists and carries symbol strings is a one-line check against a game
|
|
107
|
+
install. The loader reads only `hash` and `offset` (find_field), so extra fields would be
|
|
108
|
+
ignored, not rejected.
|
|
109
|
+
- id: cp2077.red4ext.api.address-hashes-are-not-fnv1a-of-symbols
|
|
110
|
+
claim: "The numeric address ids used with `UniversalRelocFunc` are not the FNV-1a (32-bit or
|
|
111
|
+
truncated 64-bit) hash of the symbol names the community records beside them: for the three
|
|
112
|
+
Codeware entries that carry a symbol comment, the computed FNV-1a32 of the comment differs
|
|
113
|
+
from the recorded id in every case."
|
|
114
|
+
status: verified
|
|
115
|
+
source: psiberx/cp2077-codeware@613a1cb src/Red/Addresses/Library.hpp:11,94,124
|
|
116
|
+
tags:
|
|
117
|
+
- red4ext
|
|
118
|
+
- address
|
|
119
|
+
- hash
|
|
120
|
+
- codeware
|
|
121
|
+
detail: So a new native's id comes from the address file, not from hashing its name; the SDK's own
|
|
122
|
+
Detail/AddressHashes.hpp (260 lines) names only RTTI, memory, resource, job, TweakDB and
|
|
123
|
+
render internals, none of the puppet locomotion natives.
|
|
124
|
+
- id: cp2077.red4ext.api.plugin-directory-depth-one
|
|
125
|
+
claim: The loader scans `red4ext\plugins` recursively but loads a `.dll` only at depth 0 or 1
|
|
126
|
+
(`plugins\X.dll` or `plugins\X\X.dll`); any deeper directory is skipped without recursion, and
|
|
127
|
+
a depth-1 plugin is loaded with an altered DLL search path so libraries beside it resolve. A
|
|
128
|
+
stem listed under `[plugins] ignored` in `red4ext\config.ini` is skipped.
|
|
129
|
+
status: verified
|
|
130
|
+
source: WopsS/RED4ext@c52c8d8 src/dll/Systems/PluginSystem.cpp; src/dll/Config.hpp
|
|
131
|
+
tags:
|
|
132
|
+
- red4ext
|
|
133
|
+
- plugins-directory
|
|
134
|
+
- deploy
|
|
135
|
+
- config
|
|
136
|
+
related:
|
|
137
|
+
- cp2077.red4ext.plugins.install-paths-and-logs
|
|
138
|
+
- id: cp2077.red4ext.api.deploy-into-names-the-file
|
|
139
|
+
claim: 'A ModWright deploy target whose `from` is a single file is copied to exactly `<root>/<into>`
|
|
140
|
+
(or `<root>/<basename of from>` with no `into`), so an `into` that names a folder makes the
|
|
141
|
+
folder name the installed file. On the `red4ext` root, `into: "<Mod>"` with the plugin DLL as
|
|
142
|
+
`from` installed `red4ext\plugins\<Mod>`, a 108 KB file with no extension, which the loader
|
|
143
|
+
does not load; `into: "<Mod>/<Mod>.dll"` is the working form.'
|
|
144
|
+
status: verified
|
|
145
|
+
verified_on: "2.31"
|
|
146
|
+
source: ModWright field verification
|
|
147
|
+
tags:
|
|
148
|
+
- red4ext
|
|
149
|
+
- deploy
|
|
150
|
+
- plugins-directory
|
|
151
|
+
- into
|
|
152
|
+
related:
|
|
153
|
+
- cp2077.red4ext.api.plugin-directory-depth-one
|
|
154
|
+
- id: cp2077.red4ext.api.plugin-extension-compared-exactly
|
|
155
|
+
claim: 'The loader keeps a file under `red4ext\plugins` only when `path.extension() == L".dll"`, a
|
|
156
|
+
`std::filesystem::path` comparison of the native strings, which is case-sensitive: a plugin
|
|
157
|
+
installed as `X.DLL` is not loaded.'
|
|
158
|
+
status: inferred
|
|
159
|
+
source: WopsS/RED4ext@c52c8d8 src/dll/Systems/PluginSystem.cpp:145
|
|
160
|
+
tags:
|
|
161
|
+
- red4ext
|
|
162
|
+
- plugins-directory
|
|
163
|
+
- extension
|
|
164
|
+
related:
|
|
165
|
+
- cp2077.red4ext.api.plugin-directory-depth-one
|
|
166
|
+
- id: cp2077.red4ext.api.plugin-exports-supports-query-required
|
|
167
|
+
claim: "The loader requires a plugin DLL to export `Supports` and `Query`: a missing one logs
|
|
168
|
+
\"Could not retrieve 'Supports' function\" (or 'Query') at warn level and the plugin is not
|
|
169
|
+
loaded. `Main` is optional: without it the loader logs \"does not export a 'Main' function,
|
|
170
|
+
skipping the call\" at trace level and keeps the plugin loaded, so nothing it would register
|
|
171
|
+
in `Main` exists."
|
|
172
|
+
status: inferred
|
|
173
|
+
source: WopsS/RED4ext@c52c8d8 src/dll/Systems/PluginSystem.cpp:341-354;
|
|
174
|
+
src/dll/PluginBase.cpp:36-46, :88-128
|
|
175
|
+
tags:
|
|
176
|
+
- red4ext
|
|
177
|
+
- exports
|
|
178
|
+
- plugin-load
|
|
179
|
+
- main
|
|
180
|
+
related:
|
|
181
|
+
- cp2077.red4ext.api.plugin-exports-matched-by-exact-name
|
|
182
|
+
- id: cp2077.red4ext.api.plugin-exports-matched-by-exact-name
|
|
183
|
+
claim: The loader finds `Supports`, `Query` and `Main` with `GetProcAddress` by those literal names,
|
|
184
|
+
so each must be exported undecorated (`extern "C"`, which the SDK's `RED4EXT_C_EXPORT`
|
|
185
|
+
supplies); a C++ export carries its decorated name (MSVC `?Query@@...`, MinGW `_Z5QueryPv`)
|
|
186
|
+
and is not found.
|
|
187
|
+
status: inferred
|
|
188
|
+
source: WopsS/RED4ext@c52c8d8 src/dll/Systems/PluginSystem.cpp:341; src/dll/PluginBase.cpp:40, :93;
|
|
189
|
+
test/fixtures/cp2077/red4ext/pe/decorated.x64.dll
|
|
190
|
+
tags:
|
|
191
|
+
- red4ext
|
|
192
|
+
- exports
|
|
193
|
+
- name-decoration
|
|
194
|
+
- extern-c
|
|
195
|
+
- id: cp2077.red4ext.api.config-ini-dev-console
|
|
196
|
+
claim: "`red4ext\\config.ini` is TOML despite its extension and carries `[logging]
|
|
197
|
+
level/flush_on/max_files/max_file_size`, `[plugins] enabled/ignored` and `[dev]
|
|
198
|
+
console/wait_for_debugger`; the wiki lists `dev.console` as defaulting to true while the
|
|
199
|
+
loader source defaults `hasConsole` to false."
|
|
200
|
+
status: community
|
|
201
|
+
source: CDPR-Modding-Documentation/Red4Ext-Wiki@3635293 getting-started/configuration.md (options
|
|
202
|
+
table and example); WopsS/RED4ext@c52c8d8 src/dll/Config.hpp (DevConfig.hasConsole = false)
|
|
203
|
+
tags:
|
|
204
|
+
- red4ext
|
|
205
|
+
- config
|
|
206
|
+
- console
|
|
207
|
+
- logging
|
|
208
|
+
detail: The two sources disagree on the console default; treat the example file's `console = false`
|
|
209
|
+
as what a fresh install writes and set it explicitly for a development session.
|
|
210
|
+
- id: cp2077.red4ext.api.update-registrar-tick-groups-and-stages
|
|
211
|
+
claim: "The SDK exposes the engine's per-frame update registrar: tick groups in order FrameBegin,
|
|
212
|
+
Multiplayer_UpdateStateSnapshots, EntityUpdateState, PreBuckets, Buckets, PostBuckets,
|
|
213
|
+
CameraUpdate, PlayerAimUpdate, PostPlayerAimUpdate, MappinsUpdate,
|
|
214
|
+
BlackboardCallbacks_SecondPass, PreRenderUpdate, Multiplayer_CaptureStateSnapshots; buckets
|
|
215
|
+
Vehicle, Character, AttachedObject; bucket stages in order Entities_PreTick,
|
|
216
|
+
Entities_ServiceEvents, PrePhysicsTick, UpdateTransformPrePhysics, PhysicsFlushBufferedState,
|
|
217
|
+
PhysicsExecuteAsyncQueries, PostPhysicsSyncResults, UpdateTransformPostPhysics,
|
|
218
|
+
AnimationUpdate, PostPhysicsTick, Entities_PostTick, Entities_PostServiceEvents.
|
|
219
|
+
`UpdateRegistrar::RegisterUpdate` takes either (group, system, name, callback(FrameInfo&,
|
|
220
|
+
JobQueue&)) or (bucket mask, stage, system, name, callback(bucket, FrameInfo&, JobQueue&));
|
|
221
|
+
`FrameInfo` carries `deltaTime` and `details->timeDilation`."
|
|
222
|
+
status: verified
|
|
223
|
+
source: WopsS/RED4ext.SDK@ad72777 include/RED4ext/SystemUpdate.hpp
|
|
224
|
+
tags:
|
|
225
|
+
- red4ext
|
|
226
|
+
- tick
|
|
227
|
+
- frame
|
|
228
|
+
- update-registrar
|
|
229
|
+
- bucket
|
|
230
|
+
- stage
|
|
231
|
+
detail: The enum order is the declaration order in the header; that it is also the execution order
|
|
232
|
+
is the natural reading of the names (PrePhysics before PostPhysics) and is not separately
|
|
233
|
+
attested.
|
|
234
|
+
- id: cp2077.red4ext.api.game-system-registers-frame-tick
|
|
235
|
+
claim: A native `gameIGameSystem` inherits `IUpdatableSystem`, whose virtual
|
|
236
|
+
`OnRegisterUpdates(UpdateRegistrar*)` (vtable slot 0x108) is where a system registers its
|
|
237
|
+
per-frame callbacks; `IGameSystem` adds `OnWorldAttached`/`OnWorldDetached`, save/load,
|
|
238
|
+
pause/resume and `OnInitialize`/`OnUninitialize` slots and holds `gameInstance` at 0x40.
|
|
239
|
+
Codeware's StaticEntitySystem registers a FrameBegin tick this way.
|
|
240
|
+
status: verified
|
|
241
|
+
source: WopsS/RED4ext.SDK@ad72777 include/RED4ext/Scripting/Natives/IUpdatableSystem.hpp,
|
|
242
|
+
gameIGameSystem.hpp; psiberx/cp2077-codeware@613a1cb src/App/World/StaticEntitySystem.cpp
|
|
243
|
+
tags:
|
|
244
|
+
- red4ext
|
|
245
|
+
- game-system
|
|
246
|
+
- tick
|
|
247
|
+
- frame
|
|
248
|
+
- codeware
|
|
249
|
+
- id: cp2077.red4ext.api.game-states-add
|
|
250
|
+
claim: "`Sdk->gameStates->Add(PluginHandle, EGameStateType, GameState*)` registers
|
|
251
|
+
`OnEnter`/`OnUpdate`/`OnExit` callbacks (each `bool(*)(CGameApplication*)`) on one of four
|
|
252
|
+
engine states: BaseInitialization, Initialization, Running, Shutdown."
|
|
253
|
+
status: verified
|
|
254
|
+
source: WopsS/RED4ext.SDK@ad72777 include/RED4ext/Api/v1/GameStates.hpp; include/RED4ext/GameStates.hpp
|
|
255
|
+
tags:
|
|
256
|
+
- red4ext
|
|
257
|
+
- game-state
|
|
258
|
+
- tick
|
|
259
|
+
- api
|
|
260
|
+
related:
|
|
261
|
+
- cp2077.red4ext.plugins.main-called-before-memory-allocators-ready
|
|
262
|
+
- id: cp2077.red4ext.api.logger-levels
|
|
263
|
+
claim: The loader's logger service exposes Trace, Debug, Info, Warn, Error and Critical, each in
|
|
264
|
+
four forms (narrow, narrow printf-style `F`, wide `W`, wide printf-style `WF`), all taking the
|
|
265
|
+
plugin handle first.
|
|
266
|
+
status: verified
|
|
267
|
+
source: WopsS/RED4ext.SDK@ad72777 include/RED4ext/Api/v1/Logger.hpp
|
|
268
|
+
tags:
|
|
269
|
+
- red4ext
|
|
270
|
+
- logging
|
|
271
|
+
- api
|
|
272
|
+
related:
|
|
273
|
+
- cp2077.red4ext.plugins.per-plugin-log-file-created-lazily
|
|
274
|
+
- id: cp2077.red4ext.api.scripts-service
|
|
275
|
+
claim: "`Sdk->scripts` offers `Add(PluginHandle, const wchar_t* path)` to add a script path to the
|
|
276
|
+
compile, and `RegisterNeverRefType(const char*)` / `RegisterMixedRefType(const char*)` for
|
|
277
|
+
type-reference handling."
|
|
278
|
+
status: verified
|
|
279
|
+
source: WopsS/RED4ext.SDK@ad72777 include/RED4ext/Api/v1/Scripts.hpp
|
|
280
|
+
tags:
|
|
281
|
+
- red4ext
|
|
282
|
+
- scripts
|
|
283
|
+
- api
|
|
284
|
+
detail: The semantics of the two Register calls are not documented in the header; only the
|
|
285
|
+
signatures are attested here.
|
|
286
|
+
- id: cp2077.red4ext.api.function-registration-callbacks
|
|
287
|
+
claim: Without red-lib, a plugin registers native types and functions from `Main` by
|
|
288
|
+
`CRTTISystem::Get()->AddRegisterCallback(RegisterTypes)` and
|
|
289
|
+
`AddPostRegisterCallback(PostRegisterTypes)`; a native function has the fixed shape
|
|
290
|
+
`void(IScriptable* ctx, CStackFrame* frame, T* out, int64_t)`, reads arguments with
|
|
291
|
+
`GetParameter(frame, &arg)` in order and then `frame->code++` to skip ParamEnd, and is created
|
|
292
|
+
with `CGlobalFunction::Create` / `CClassFunction::Create` / `CClassStaticFunction::Create`
|
|
293
|
+
then `RegisterFunction`.
|
|
294
|
+
status: verified
|
|
295
|
+
source: WopsS/RED4ext.SDK@ad72777 examples/function_registration/Main.cpp;
|
|
296
|
+
examples/native_class_redscript/Main.cpp
|
|
297
|
+
tags:
|
|
298
|
+
- red4ext
|
|
299
|
+
- rtti
|
|
300
|
+
- native-function
|
|
301
|
+
- registration
|
|
302
|
+
- id: cp2077.red4ext.api.redlib-has-no-hooking-api
|
|
303
|
+
claim: psiberx's red-lib is a header-only CMake INTERFACE library whose `include/Red/` holds only
|
|
304
|
+
TypeInfo (definition macros, invocation, registrar), Engine (framework, log channel, mappings)
|
|
305
|
+
and Utils (handles, job queues, resources); it provides RTTI registration, function calling,
|
|
306
|
+
game-system auto-registration and logging, and no hooking facility.
|
|
307
|
+
status: verified
|
|
308
|
+
source: psiberx/cp2077-red-lib@6822105 CMakeLists.txt; include/Red/*; README.md
|
|
309
|
+
tags:
|
|
310
|
+
- red-lib
|
|
311
|
+
- hooking
|
|
312
|
+
- rtti
|
|
313
|
+
- scope
|
|
314
|
+
detail: "Corrects a premise that red-lib provides hooks: hooks come from the loader's Sdk->hooking
|
|
315
|
+
or a library the plugin brings, not from red-lib."
|
|
316
|
+
- id: cp2077.red4ext.api.redlib-rtti-macros
|
|
317
|
+
claim: red-lib declares native types with `RTTI_DEFINE_CLASS(Type, {...})` (with `RTTI_METHOD`,
|
|
318
|
+
`RTTI_PROPERTY`, `RTTI_GETTER`, `RTTI_PARENT`, `RTTI_ABSTRACT`, `RTTI_ALIAS`,
|
|
319
|
+
`RTTI_PERSISTENT`), `RTTI_DEFINE_GLOBALS`, `RTTI_DEFINE_ENUM`/`RTTI_DEFINE_FLAGS`, and
|
|
320
|
+
`RTTI_EXPAND_CLASS(Existing, {...})` to add methods (never properties) to an existing class; a
|
|
321
|
+
class needs `RTTI_IMPL_TYPEINFO` and `RTTI_IMPL_ALLOCATOR` members; an `IGameSystem` subclass
|
|
322
|
+
is registered in the game instance automatically and reached from script through an
|
|
323
|
+
`@addMethod(GameInstance) public static native func`; everything is registered by calling
|
|
324
|
+
`Red::TypeInfoRegistrar::RegisterDiscovered()` in `Main` on Load.
|
|
325
|
+
status: community
|
|
326
|
+
source: psiberx/cp2077-red-lib@6822105 README.md, sections "Building type info", "Game systems",
|
|
327
|
+
"Class extensions", "Registration"
|
|
328
|
+
tags:
|
|
329
|
+
- red-lib
|
|
330
|
+
- rtti
|
|
331
|
+
- macros
|
|
332
|
+
- game-system
|
|
333
|
+
- registration
|
|
334
|
+
- id: cp2077.red4ext.api.redlib-alias-binds-module-scoped-declarations
|
|
335
|
+
claim: A native class declared inside a redscript `module` binds to its C++ definition only when the
|
|
336
|
+
definition carries `RTTI_ALIAS("Module.ClassName")`; a plugin installs at
|
|
337
|
+
`red4ext\plugins\<Name>\<Name>.dll` and its native declarations as ordinary `.reds` files
|
|
338
|
+
under `r6\scripts`.
|
|
339
|
+
status: community
|
|
340
|
+
source: CDPR-Modding-Documentation/Red4Ext-Wiki@3635293
|
|
341
|
+
mod-developers/creating-a-plugin-with-redlib.md ("You only need to add an alias when declaring
|
|
342
|
+
scripts with 'module' and 'import' keywords"; the install paths in the same page)
|
|
343
|
+
tags:
|
|
344
|
+
- red-lib
|
|
345
|
+
- redscript
|
|
346
|
+
- module
|
|
347
|
+
- alias
|
|
348
|
+
- install-path
|
|
349
|
+
- id: cp2077.red4ext.api.any-toolchain-x64-fastcall
|
|
350
|
+
claim: A plugin may be built with any build system or toolchain as long as the output is x86-64 with
|
|
351
|
+
the `__fastcall` convention; WopsS publishes a CMake example (RED4ext.Example.CMake) and a
|
|
352
|
+
Visual Studio example, and only RED4ext.SDK must be on the include path.
|
|
353
|
+
status: community
|
|
354
|
+
source: CDPR-Modding-Documentation/Red4Ext-Wiki@3635293 mod-developers/creating-a-plugin.md:3-17
|
|
355
|
+
tags:
|
|
356
|
+
- red4ext
|
|
357
|
+
- toolchain
|
|
358
|
+
- cmake
|
|
359
|
+
- visual-studio
|
|
360
|
+
related:
|
|
361
|
+
- cp2077.red4ext.plugins.abi-is-fastcall-x86-64
|
|
362
|
+
- id: cp2077.red4ext.api.cmake-example-shape
|
|
363
|
+
claim: The official CMake example adds the SDK as a submodule at `deps/red4ext.sdk`, calls
|
|
364
|
+
`add_subdirectory(deps/red4ext.sdk)`, builds the plugin as a `SHARED` library linked `PRIVATE
|
|
365
|
+
RED4ext::SDK` with C++20, optionally `RED4EXT_HEADER_ONLY`, and its CI configures with `cmake
|
|
366
|
+
-A x64` and builds with `cmake --build . --config <Debug|Release>`.
|
|
367
|
+
status: verified
|
|
368
|
+
source: WopsS/RED4ext.Example.CMake@d5aa651 CMakeLists.txt; src/CMakeLists.txt;
|
|
369
|
+
.github/workflows/build.yml
|
|
370
|
+
tags:
|
|
371
|
+
- red4ext
|
|
372
|
+
- cmake
|
|
373
|
+
- build
|
|
374
|
+
- example
|
|
375
|
+
detail: The example is dated 2022-09-06 and pins nothing; the SDK's own README asks for Visual
|
|
376
|
+
Studio 2022 and CMake 3.23 or newer and exports the `RED4ext::SDK` alias from
|
|
377
|
+
cmake/RED4extConfig.cmake.in.
|
|
378
|
+
- id: cp2077.red4ext.api.sdk-build-requirements
|
|
379
|
+
claim: RED4ext.SDK is used either header-only (include the headers, C++20) or as a static library
|
|
380
|
+
(headers plus src, define `RED4EXT_STATIC_LIB`); building the SDK itself asks for Visual
|
|
381
|
+
Studio 2022 Community or newer and CMake 3.23 or newer.
|
|
382
|
+
status: verified
|
|
383
|
+
source: WopsS/RED4ext.SDK@ad72777 README.md
|
|
384
|
+
tags:
|
|
385
|
+
- red4ext
|
|
386
|
+
- sdk
|
|
387
|
+
- build
|
|
388
|
+
- requirements
|
|
389
|
+
- id: cp2077.red4ext.api.cmake-modules-repo-not-found
|
|
390
|
+
claim: A repository named `psiberx/cp2077-cmake-modules` could not be cloned on 2026-09-20 (the
|
|
391
|
+
clone failed with GitHub's credential prompt, the response a nonexistent or private repository
|
|
392
|
+
produces), while six sibling clones in the same session succeeded; the shared CMake helpers
|
|
393
|
+
the task expected there may live under another name or not exist.
|
|
394
|
+
status: unverified
|
|
395
|
+
source: ModWright research
|
|
396
|
+
tags:
|
|
397
|
+
- cmake
|
|
398
|
+
- psiberx
|
|
399
|
+
- provenance
|
|
400
|
+
detail: "Codeware itself builds with xmake (xmake.lua: minhook, spdlog, tiltedcore, hopscotch-map;
|
|
401
|
+
targets Codeware.dll), not with CMake."
|
|
402
|
+
- id: cp2077.red4ext.api.codeware-entity-setworldtransform
|
|
403
|
+
claim: "Codeware adds `SetWorldTransform(transform: WorldTransform)` to every `Entity` from
|
|
404
|
+
redscript: `RTTI_EXPAND_CLASS(Red::Entity, App::EntityEx, ...)` registers
|
|
405
|
+
`EntityEx::SetWorldTransform`, which calls the native `IPlacedComponent_SetTransform`
|
|
406
|
+
(Codeware address id 1828854026, signature `void(IPlacedComponent*, const WorldTransform&)`)
|
|
407
|
+
on the entity's root transform component; the wiki documents it as moving static entities
|
|
408
|
+
without a respawn."
|
|
409
|
+
status: verified
|
|
410
|
+
source: psiberx/cp2077-codeware@613a1cb src/App/Entity/EntityEx.hpp; src/Red/Entity.hpp;
|
|
411
|
+
src/Red/Addresses/Library.hpp; scripts/Entity/Entity.reds; wiki/Home.md
|
|
412
|
+
tags:
|
|
413
|
+
- codeware
|
|
414
|
+
- entity
|
|
415
|
+
- transform
|
|
416
|
+
- setworldtransform
|
|
417
|
+
- puppet-control
|
|
418
|
+
detail: Documented for static entities; that it also moves a live NPCPuppet (whose mover may
|
|
419
|
+
re-assert its own transform) is the first thing to measure. Codeware's version at this commit
|
|
420
|
+
is 1.20.4 (xmake.lua); the release that first shipped the method is not established here.
|
|
421
|
+
- id: cp2077.red4ext.api.codeware-raw-entity-offsets
|
|
422
|
+
claim: "Codeware's `Raw::Entity` reads an `entEntity` at fixed offsets: the `EntityID` at 0x48, the
|
|
423
|
+
appearance name at 0x50, the template path at 0x60, the components storage at 0x70, the root
|
|
424
|
+
transform component (`IPlacedComponent*`) at 0xB0, the runtime scene at 0xB8 and the status
|
|
425
|
+
byte at 0x156; its `EntityStatus` enum runs Undefined, Initializing, Detached, Attaching,
|
|
426
|
+
Attached, Detaching, Uninitializing, Uninitialized."
|
|
427
|
+
status: verified
|
|
428
|
+
verified_on: "2.31"
|
|
429
|
+
source: psiberx/cp2077-codeware@613a1cb src/Red/Entity.hpp
|
|
430
|
+
tags:
|
|
431
|
+
- codeware
|
|
432
|
+
- entity
|
|
433
|
+
- offsets
|
|
434
|
+
- layout
|
|
435
|
+
detail: The SDK's own generated ent/Entity.hpp leaves the 0x160-byte class undecoded, so these
|
|
436
|
+
offsets are Codeware's reverse engineering, pinned to its SDK submodule 6ea7425 and to the
|
|
437
|
+
game build it was released for; a game patch can move them.
|
|
438
|
+
- id: cp2077.red4ext.api.codeware-hooking-backends
|
|
439
|
+
claim: Codeware's `Core::Hook::{Attach,Before,After,Wrap,Detach}` facade drives a `HookingDriver`;
|
|
440
|
+
when loaded as a RED4ext plugin the driver is `Support::RED4extProvider`, whose
|
|
441
|
+
`HookAttach`/`HookDetach` call `m_sdk->hooking->Attach/Detach` and whose `ResolveAddress`
|
|
442
|
+
calls `RED4ext::UniversalRelocBase::Resolve`; when loaded as an ASI it uses a MinHook driver
|
|
443
|
+
instead. The facade is part of Codeware's own tree (lib/Core), not a library another plugin
|
|
444
|
+
depends on.
|
|
445
|
+
status: verified
|
|
446
|
+
source: psiberx/cp2077-codeware@613a1cb lib/Core/Facades/Hook.hpp;
|
|
447
|
+
lib/Support/RED4ext/RED4extProvider.cpp; lib/Support/MinHook/MinHookProvider.hpp; src/main.cpp
|
|
448
|
+
tags:
|
|
449
|
+
- codeware
|
|
450
|
+
- hooking
|
|
451
|
+
- minhook
|
|
452
|
+
- detours
|
|
453
|
+
- pattern
|
|
454
|
+
- id: cp2077.red4ext.api.codeware-query-runtime-independent
|
|
455
|
+
claim: Codeware's `Query` reports `RED4EXT_V1_RUNTIME_VERSION_INDEPENDENT` and
|
|
456
|
+
`RED4EXT_V1_SDK_VERSION_1_0_0_COMPAT_0_5_0`, and its `Supports` returns
|
|
457
|
+
`RED4EXT_API_VERSION_1_COMPAT_0`; it relies on runtime address resolution rather than a
|
|
458
|
+
game-version pin.
|
|
459
|
+
status: verified
|
|
460
|
+
source: psiberx/cp2077-codeware@613a1cb src/main.cpp
|
|
461
|
+
tags:
|
|
462
|
+
- codeware
|
|
463
|
+
- runtime
|
|
464
|
+
- version-gate
|
|
465
|
+
- pattern
|
|
466
|
+
related:
|
|
467
|
+
- cp2077.red4ext.api.runtime-pins-are-pe-file-versions
|
|
468
|
+
- id: cp2077.red4ext.api.movepolicies-component-is-push-pop-query
|
|
469
|
+
claim: "`movePoliciesComponent` (script alias MovePoliciesComponent, 0x5E0 bytes, undecoded) exposes
|
|
470
|
+
22 natives that only push, pop or query: AddPolicies, PopPolicies, GetTopPolicies,
|
|
471
|
+
ChangeMovementType, GetCurrentLocomotionAction, GetDestination, GetDistanceToDestination,
|
|
472
|
+
GetClosestPointToPath, IsDestinationCalculated, IsDestinationChanged, IsInIdle,
|
|
473
|
+
IsPathfindingFailed, IsTopPolicyEvaluated, IsPausedByDynamicCollision and the
|
|
474
|
+
off-mesh/incline/stairs queries; none sets a velocity. `moveLocomotionAction` is Undefined,
|
|
475
|
+
Exploration, Idle, IdleTurn, Reposition, Start, Move, Stop."
|
|
476
|
+
status: verified
|
|
477
|
+
verified_on: "2.31"
|
|
478
|
+
source: rayshader/cp2077-nativedb@b5d29af src/assets/reddump/classes.json, enums.json;
|
|
479
|
+
WopsS/RED4ext.SDK@ad72777
|
|
480
|
+
include/RED4ext/Scripting/Natives/Generated/move/PoliciesComponent.hpp
|
|
481
|
+
tags:
|
|
482
|
+
- nativedb
|
|
483
|
+
- movepolicies
|
|
484
|
+
- locomotion
|
|
485
|
+
- puppet-control
|
|
486
|
+
detail: "Observed in game: a MovePolicies push is the one script lever that moves a taken idle
|
|
487
|
+
puppet; this fact is why it cannot be made velocity-driven from script."
|
|
488
|
+
- id: cp2077.red4ext.api.movepolicies-record-layout
|
|
489
|
+
claim: "`movePolicies` (script alias MovePolicies, 0x228 bytes, fully decoded) holds
|
|
490
|
+
`destination`/`destinationTangent`/`startTangent` (Vector3 at 0x40/0x4C/0x58), `targetObject`
|
|
491
|
+
(wref at 0x88), `strafingTarget` (0x98), `desiredDistance` 0x108, `minMovementDistance` 0x10C,
|
|
492
|
+
`toleranceRadius` 0x114, `movementType` 0x140 (moveMovementType: Walk, Run, Sprint, Strafe,
|
|
493
|
+
Stand), `stopOnObstacle` 0x154, `useCollisionAvoidance` 0x156, `ignoreNavigation` 0x180,
|
|
494
|
+
`useStart` 0x181, `useStop` 0x182, `isEvaluated` 0x184; its 51 natives include
|
|
495
|
+
SetDestinationPosition, SetDestinationOrientation, SetIgnoreNavigation, SetUseStartStop,
|
|
496
|
+
SetDistancePolicy, SetMovementType, SetPositionProvider, SetStrafingTarget, SetMaxPathLength
|
|
497
|
+
and SetCollisionAvoidancePolicy."
|
|
498
|
+
status: verified
|
|
499
|
+
verified_on: "2.31"
|
|
500
|
+
source: WopsS/RED4ext.SDK@ad72777 include/RED4ext/Scripting/Natives/Generated/move/Policies.hpp;
|
|
501
|
+
rayshader/cp2077-nativedb@b5d29af src/assets/reddump/classes.json
|
|
502
|
+
tags:
|
|
503
|
+
- nativedb
|
|
504
|
+
- movepolicies
|
|
505
|
+
- layout
|
|
506
|
+
- locomotion
|
|
507
|
+
- id: cp2077.red4ext.api.mover-component-undecoded
|
|
508
|
+
claim: "A puppet's mover is `moveComponent : entIMoverComponent : entIComponent`; the SDK gives its
|
|
509
|
+
size as 0x2C0 with the struct commented out (undecoded) and `entIMoverComponent` as an
|
|
510
|
+
abstract 0x90-byte interface with no natives; `moveMoveComponentVelocityProvider.
|
|
511
|
+
CreateMoveComponentVelocityProvider(puppet)` and `gamePuppet.GetVelocity()` are the only
|
|
512
|
+
script-visible reads of it."
|
|
513
|
+
status: verified
|
|
514
|
+
verified_on: "2.31"
|
|
515
|
+
source: WopsS/RED4ext.SDK@ad72777 include/RED4ext/Scripting/Natives/Generated/move/Component.hpp,
|
|
516
|
+
ent/IMoverComponent.hpp; rayshader/cp2077-nativedb@b5d29af src/assets/reddump/classes.json
|
|
517
|
+
tags:
|
|
518
|
+
- nativedb
|
|
519
|
+
- mover
|
|
520
|
+
- locomotion
|
|
521
|
+
- undecoded
|
|
522
|
+
- id: cp2077.red4ext.api.entity-has-no-transform-setter
|
|
523
|
+
claim: "`entEntity` exposes `GetWorldPosition`, `GetWorldOrientation`, `GetWorldTransform` and
|
|
524
|
+
`FindComponentByName` and no world transform setter; `entIPlacedComponent` (0x120;
|
|
525
|
+
`parentTransform` at 0x90, `localTransform` at 0xC0) exposes `SetLocalTransform(pos, rot)`,
|
|
526
|
+
`SetLocalPosition`, `SetLocalOrientation`, `GetLocalToWorld` for components; `gameObject` adds
|
|
527
|
+
`EnableTransformUpdates(Bool)` with undocumented semantics."
|
|
528
|
+
status: verified
|
|
529
|
+
verified_on: "2.31"
|
|
530
|
+
source: rayshader/cp2077-nativedb@b5d29af src/assets/reddump/classes.json; WopsS/RED4ext.SDK@ad72777
|
|
531
|
+
include/RED4ext/Scripting/Natives/Generated/ent/IPlacedComponent.hpp
|
|
532
|
+
tags:
|
|
533
|
+
- nativedb
|
|
534
|
+
- entity
|
|
535
|
+
- transform
|
|
536
|
+
- puppet-control
|
|
537
|
+
related:
|
|
538
|
+
- cp2077.red4ext.api.codeware-entity-setworldtransform
|
|
539
|
+
- id: cp2077.red4ext.api.aihumancomponent-movement-params
|
|
540
|
+
claim: "`AIHumanComponent : AICAgent` (0x5B8; `movementParamsRecord` TweakDBID at 0x4F0) exposes
|
|
541
|
+
`GetMovementParams(moveMovementType) -> moveMovementParameters {type, maxSpeed, acceleration,
|
|
542
|
+
deceleration, rotationSpeed}`, `SetMovementParams` and `SetTDBMovementParams`; `AICAgent`
|
|
543
|
+
(alias AIComponent) exposes `SendCommand`, `CancelCommand`, `SetBehaviorArgument(CName,
|
|
544
|
+
Variant)`, `GetBehaviorArgument`, `ForceTickNextFrame`, `GetUpdateTickCount`,
|
|
545
|
+
`GetHighLevelState`, `SetAIRole`, `DisableCollider`/`EnableCollider`."
|
|
546
|
+
status: verified
|
|
547
|
+
verified_on: "2.31"
|
|
548
|
+
source: rayshader/cp2077-nativedb@b5d29af src/assets/reddump/classes.json; WopsS/RED4ext.SDK@ad72777
|
|
549
|
+
include/RED4ext/Scripting/Natives/Generated/AI/HumanComponent.hpp
|
|
550
|
+
tags:
|
|
551
|
+
- nativedb
|
|
552
|
+
- ai
|
|
553
|
+
- movement-params
|
|
554
|
+
- speed
|
|
555
|
+
- puppet-control
|
|
556
|
+
- id: cp2077.red4ext.api.animfeature-movement-fields
|
|
557
|
+
claim: "`animAnimFeature_Movement` carries `movementDirection: Vector4`, `speed`, `desiredSpeed`,
|
|
558
|
+
`stabilizedSpeed`, `acceleration`, `timeToChangeLocomotion`, `strafeYaw`, `yawSpeed` and
|
|
559
|
+
`locomotionState: Int32` with natives `SetSpeed` and `SetAcceleration`;
|
|
560
|
+
`animAnimFeature_Locomotion` carries `action`, `style`, `pathCurvature`, `inclineAngle`,
|
|
561
|
+
`groundAngle`, `animDeltaZ`, `speedProgress`, `isOnStairs`; `animAnimFeature_MoveTo` offers
|
|
562
|
+
`MoveTo(targetPosition, targetYawRotation, timeToMove)` and `MoveToWithDir`;
|
|
563
|
+
`entAnimationControllerComponent.ApplyFeature(obj, inputName, feature, delay)` is a static
|
|
564
|
+
native that applies any feature to an object's graph input by name."
|
|
565
|
+
status: verified
|
|
566
|
+
verified_on: "2.31"
|
|
567
|
+
source: rayshader/cp2077-nativedb@b5d29af src/assets/reddump/classes.json
|
|
568
|
+
tags:
|
|
569
|
+
- nativedb
|
|
570
|
+
- animation
|
|
571
|
+
- anim-feature
|
|
572
|
+
- locomotion
|
|
573
|
+
- puppet-control
|
|
574
|
+
detail: Which input name an NPC locomotion graph reads for the Movement feature is not in the RTTI;
|
|
575
|
+
it is in the `.animgraph` resource and needs a check against the game files.
|
|
576
|
+
- id: cp2077.red4ext.api.muppet-classes-are-input-driven-puppet
|
|
577
|
+
claim: "The RTTI carries a native `gameMuppet : gamePuppetBase` with components
|
|
578
|
+
`gameMuppetLocomotionComponent` (0x98, undecoded), `gameMuppetInputHandlerComponent`,
|
|
579
|
+
`gameMuppetRawInput`, `gameMuppetInputStates`, and input structs
|
|
580
|
+
`gameMuppetInputActionMoveForward {direction: Vector2, isSprinting}`,
|
|
581
|
+
`gameMuppetInputActionLook {rotation: Vector2}`, a `gameMuppetMoveState {desiredSpeed,
|
|
582
|
+
isJumping, moveStyle: gameMuppetMoveStyle (Walk, Sprint, Crouch, WalkAim, GravityOnly)}`, and
|
|
583
|
+
a replicated state with `Muppet.ReplicateInputStates( gameMuppetCompressedInputStates)`: an
|
|
584
|
+
input-driven, network-replicated player puppet from the cancelled multiplayer, with no known
|
|
585
|
+
shipped entity template."
|
|
586
|
+
status: verified
|
|
587
|
+
verified_on: "2.31"
|
|
588
|
+
source: rayshader/cp2077-nativedb@b5d29af src/assets/reddump/classes.json, enums.json;
|
|
589
|
+
WopsS/RED4ext.SDK@ad72777
|
|
590
|
+
include/RED4ext/Scripting/Natives/Generated/game/MuppetLocomotionComponent.hpp
|
|
591
|
+
tags:
|
|
592
|
+
- nativedb
|
|
593
|
+
- muppet
|
|
594
|
+
- multiplayer
|
|
595
|
+
- input
|
|
596
|
+
- puppet-control
|
|
597
|
+
detail: '"No known shipped entity template" is the absence of evidence in the RTTI and the SDK, not
|
|
598
|
+
a search of the archives; a few cheap checks would settle it.'
|
|
599
|
+
- id: cp2077.red4ext.api.navigation-clamp-natives
|
|
600
|
+
claim: "`AINavigationSystem` exposes `IsPointOnNavmesh(character, point, tolerance)`,
|
|
601
|
+
`GetNearestNavmeshPointBelow(character, origin, querySphereRadius, numberOfSpheres) ->
|
|
602
|
+
Vector4`, `FindWallInLineForCharacter(start, end, tolerance, owner)`,
|
|
603
|
+
`FindPointBelowForCharacter`, `HasPathForward(object, distance)` and
|
|
604
|
+
`CalculatePathForCharacter`; `gamePuppet` exposes `GetCurrentNavmeshPosition(out position) ->
|
|
605
|
+
navNaviPositionType` and `GetLastValidNavmeshPoint()`."
|
|
606
|
+
status: verified
|
|
607
|
+
verified_on: "2.31"
|
|
608
|
+
source: rayshader/cp2077-nativedb@b5d29af src/assets/reddump/classes.json
|
|
609
|
+
tags:
|
|
610
|
+
- nativedb
|
|
611
|
+
- navigation
|
|
612
|
+
- navmesh
|
|
613
|
+
- clamp
|
|
614
|
+
- puppet-control
|
|
615
|
+
- id: cp2077.red4ext.api.time-dilation-native-signature
|
|
616
|
+
claim: "`gameTimeDilatable` (a gameObject ancestor of every puppet) exposes
|
|
617
|
+
`SetIndividualTimeDilation(reason: CName, dilation: Float, duration: Float, easeInCurve:
|
|
618
|
+
CName, easeOutCurve: CName, ignoreGlobalDilation: Bool, useRealTime: Bool)`,
|
|
619
|
+
`UnsetIndividualTimeDilation(easeOutCurve)`, `GetTimeDilationValue`,
|
|
620
|
+
`HasIndividualTimeDilation(reason)` as natives."
|
|
621
|
+
status: verified
|
|
622
|
+
verified_on: "2.31"
|
|
623
|
+
source: rayshader/cp2077-nativedb@b5d29af src/assets/reddump/classes.json
|
|
624
|
+
tags:
|
|
625
|
+
- nativedb
|
|
626
|
+
- time-dilation
|
|
627
|
+
- freeze
|
|
628
|
+
- puppet-control
|
|
629
|
+
detail: 'Observed in game: the TimeDilationHelper wrapper of this froze a taken puppet ("freeze is
|
|
630
|
+
the smoothness fix"); a per-frame drive must lift it while moving.'
|
|
631
|
+
- id: cp2077.red4ext.api.redlib-call-helpers
|
|
632
|
+
claim: "red-lib lets native code call script-visible functions by name through the RTTI:
|
|
633
|
+
`Red::CallGlobal(name, out?, args...)`, `Red::CallStatic(className, funcName, out?, args...)`
|
|
634
|
+
and `Red::CallVirtual(IScriptable* context, funcName, out?, args...)` (with an overload taking
|
|
635
|
+
the `CClass*`), each returning a bool for success; the README's example chain is
|
|
636
|
+
GetPlayerSystem → GetLocalPlayerControlledGameObject → Revive."
|
|
637
|
+
status: verified
|
|
638
|
+
source: psiberx/cp2077-red-lib@6822105 include/Red/TypeInfo/Invocation.hpp; README.md
|
|
639
|
+
tags:
|
|
640
|
+
- red-lib
|
|
641
|
+
- invocation
|
|
642
|
+
- callvirtual
|
|
643
|
+
- rtti
|
|
644
|
+
detail: This is what lets a plugin call Codeware's registered Entity.SetWorldTransform without
|
|
645
|
+
resolving any game address itself (the no-address variant).
|