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,742 @@
|
|
|
1
|
+
const GAME = "cyberpunk2077";
|
|
2
|
+
const PRE = String.raw `^(?:\[[^\]]*\]\s*){0,4}(?:\|[^|]*\|\s*)?`;
|
|
3
|
+
const LEVEL_PRE = String.raw `^(?:\[[^\]]*\]\s*){0,3}\[(?:error|ERROR|err|warning|WARNING|warn|WARN)\]\s*(?:\[[^\]]*\]\s*){0,2}(?:\|[^|]*\|\s*)?`;
|
|
4
|
+
function re(...parts) {
|
|
5
|
+
return new RegExp(parts.join(""));
|
|
6
|
+
}
|
|
7
|
+
const FIXTURES = "test/fixtures/logs/cp2077";
|
|
8
|
+
const REAL = "test/fixtures/logs/cp2077/real";
|
|
9
|
+
const CDPR_LOGS_DOC = "https://wiki.redmodding.org/cyberpunk-2077-modding/for-mod-users/user-guide-troubleshooting/finding-and-reading-log-files";
|
|
10
|
+
const RED4EXT = [
|
|
11
|
+
{
|
|
12
|
+
id: "cyberpunk2077.red4ext.initializing",
|
|
13
|
+
game: GAME,
|
|
14
|
+
sources: ["red4ext"],
|
|
15
|
+
severity: "info",
|
|
16
|
+
category: "version",
|
|
17
|
+
pattern: re(PRE, String.raw `RED4ext \(v(?<version>[^)\s]+)\) is initializing`),
|
|
18
|
+
explain: "RED4ext started and reported its own version. This is the version every " +
|
|
19
|
+
"native plugin (ArchiveXL, TweakXL, Codeware) is checked against, so read " +
|
|
20
|
+
"it before blaming a plugin.",
|
|
21
|
+
hint: "If plugins below this line fail, compare this version against the game " +
|
|
22
|
+
"build on the next line: after a game patch RED4ext usually needs updating first.",
|
|
23
|
+
seenIn: [
|
|
24
|
+
`${FIXTURES}/red4ext.synthetic.log`,
|
|
25
|
+
"https://github.com/WopsS/RED4ext/issues/33",
|
|
26
|
+
],
|
|
27
|
+
extract: ["version"],
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: "cyberpunk2077.red4ext.game-patch",
|
|
31
|
+
game: GAME,
|
|
32
|
+
sources: ["red4ext"],
|
|
33
|
+
severity: "info",
|
|
34
|
+
category: "version",
|
|
35
|
+
pattern: re(PRE, String.raw `Game patch: (?<patch>[^\n]+)$`),
|
|
36
|
+
explain: "The game build RED4ext detected. 'Unknown patch (...)' here means the game " +
|
|
37
|
+
"updated to a build this RED4ext release has never seen, which is the single " +
|
|
38
|
+
"most common cause of every native mod going silent after a Steam/GOG update.",
|
|
39
|
+
hint: "Match this build against the RED4ext release notes; if it says Unknown patch, " +
|
|
40
|
+
"update RED4ext (or roll the game back) before touching individual mods.",
|
|
41
|
+
seenIn: [
|
|
42
|
+
`${FIXTURES}/red4ext.synthetic.log`,
|
|
43
|
+
"https://github.com/WopsS/RED4ext/issues/33",
|
|
44
|
+
],
|
|
45
|
+
extract: ["patch"],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
id: "cyberpunk2077.red4ext.game-version",
|
|
49
|
+
game: GAME,
|
|
50
|
+
sources: ["red4ext"],
|
|
51
|
+
severity: "info",
|
|
52
|
+
category: "version",
|
|
53
|
+
pattern: re(PRE, String.raw `Product version: (?<version>\d[\w.]*)\s*$`),
|
|
54
|
+
explain: "RED4ext printed the game's marketing version (2.31 and so on) as it sees it. RED4ext " +
|
|
55
|
+
"1.30 prints this and a 'File version:' line instead of the older 'Game patch:' line.",
|
|
56
|
+
hint: "Compare against the game version each plugin's Nexus page states it was built for; " +
|
|
57
|
+
"a plugin newer or older than this build is the first suspect after a patch.",
|
|
58
|
+
seenIn: [`${REAL}/red4ext.log`],
|
|
59
|
+
extract: ["version"],
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: "cyberpunk2077.red4ext.initialized",
|
|
63
|
+
game: GAME,
|
|
64
|
+
sources: ["red4ext"],
|
|
65
|
+
severity: "info",
|
|
66
|
+
category: "success",
|
|
67
|
+
pattern: re(PRE, String.raw `RED4ext has (?:been successfully )?initialized`),
|
|
68
|
+
explain: "RED4ext hooked the game successfully. Everything it hosts — ArchiveXL, " +
|
|
69
|
+
"TweakXL, Codeware and their dependents — had a chance to run this launch.",
|
|
70
|
+
seenIn: [`${REAL}/red4ext.log`, `${FIXTURES}/red4ext.synthetic.log`, CDPR_LOGS_DOC],
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: "cyberpunk2077.red4ext.plugin-loaded",
|
|
74
|
+
game: GAME,
|
|
75
|
+
sources: ["red4ext"],
|
|
76
|
+
severity: "info",
|
|
77
|
+
category: "success",
|
|
78
|
+
pattern: re(PRE, String.raw `(?<plugin>[^\[\]|\n]+?) \(version: (?<version>[^,)\n]+)`, String.raw `(?:, author\(s\): (?<author>[^)\n]*))?\) has been loaded`),
|
|
79
|
+
explain: "A native RED4ext plugin loaded, with the exact version now in play. This is " +
|
|
80
|
+
"the authoritative answer to 'is ArchiveXL/TweakXL/Codeware actually installed " +
|
|
81
|
+
"and running', which mod managers report unreliably.",
|
|
82
|
+
hint: "If a mod's required framework is missing from this list, install it; the " +
|
|
83
|
+
"version here is what a compatibility matrix should be checked against.",
|
|
84
|
+
seenIn: [`${FIXTURES}/red4ext.synthetic.log`, CDPR_LOGS_DOC],
|
|
85
|
+
extract: ["plugin", "version", "author"],
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
id: "cyberpunk2077.red4ext.plugins-loaded-count",
|
|
89
|
+
game: GAME,
|
|
90
|
+
sources: ["red4ext"],
|
|
91
|
+
severity: "info",
|
|
92
|
+
category: "success",
|
|
93
|
+
pattern: re(PRE, String.raw `(?<count>\d+) plugin\(s\) loaded\s*$`),
|
|
94
|
+
explain: "RED4ext finished its plugin pass and reports how many DLLs it loaded. Compare the " +
|
|
95
|
+
"count against the folders under red4ext/plugins: a lower number means one was skipped.",
|
|
96
|
+
seenIn: [`${REAL}/red4ext.log`],
|
|
97
|
+
extract: ["count"],
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
id: "cyberpunk2077.red4ext.started",
|
|
101
|
+
game: GAME,
|
|
102
|
+
sources: ["red4ext"],
|
|
103
|
+
severity: "info",
|
|
104
|
+
category: "success",
|
|
105
|
+
pattern: re(PRE, String.raw `RED4ext has been started\s*$`),
|
|
106
|
+
explain: "RED4ext handed control back to the game with every plugin loaded. Lines after this " +
|
|
107
|
+
"one ('scc invoked successfully', 'Scripts blob path was updated') are redscript being " +
|
|
108
|
+
"driven by RED4ext.",
|
|
109
|
+
seenIn: [`${REAL}/red4ext.log`],
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
id: "cyberpunk2077.red4ext.plugin-load-failed",
|
|
113
|
+
game: GAME,
|
|
114
|
+
sources: ["red4ext"],
|
|
115
|
+
severity: "error",
|
|
116
|
+
category: "load",
|
|
117
|
+
pattern: re(PRE, String.raw `(?:Could not|Failed to|Unable to) load (?:the )?plugin ['"“](?<plugin>[^'"”\n]+)['"”]`, String.raw `(?:[^\n]*?\bError code: (?<code>\d+))?`),
|
|
118
|
+
explain: "RED4ext found a plugin DLL but Windows refused to load it. The plugin is not " +
|
|
119
|
+
"running, and every mod that depends on it will behave as if it were never " +
|
|
120
|
+
"installed — usually with no error of its own.",
|
|
121
|
+
hint: "Error code 1114 or 126 normally means the DLL was built for a different game " +
|
|
122
|
+
"build or a missing runtime: reinstall that plugin for the current game patch " +
|
|
123
|
+
"and check its own log for more.",
|
|
124
|
+
seenIn: [
|
|
125
|
+
"unverified: tolerant pattern",
|
|
126
|
+
`${CDPR_LOGS_DOC} (search-snippet quote of "Could not load plugin 'X'. Error code: 1114")`,
|
|
127
|
+
],
|
|
128
|
+
extract: ["plugin", "code"],
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
id: "cyberpunk2077.red4ext.unsupported-patch",
|
|
132
|
+
game: GAME,
|
|
133
|
+
sources: ["red4ext"],
|
|
134
|
+
severity: "error",
|
|
135
|
+
category: "version",
|
|
136
|
+
pattern: re(PRE, String.raw `This game patch \((?<patch>[^\n]+)\) is not supported`),
|
|
137
|
+
explain: "RED4ext refuses to run against this game build, so no native plugin loads at " +
|
|
138
|
+
"all this launch. Everything downstream (TweakXL tweaks, ArchiveXL .xl files, " +
|
|
139
|
+
"Codeware-dependent scripts) is dead, and none of them will say so.",
|
|
140
|
+
hint: "Update RED4ext to a release that supports this build, or roll the game back " +
|
|
141
|
+
"to the supported patch named on the following line.",
|
|
142
|
+
seenIn: [
|
|
143
|
+
`${FIXTURES}/red4ext.synthetic.log`,
|
|
144
|
+
"https://github.com/WopsS/RED4ext/issues/33",
|
|
145
|
+
],
|
|
146
|
+
extract: ["patch"],
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
id: "cyberpunk2077.red4ext.supported-patches",
|
|
150
|
+
game: GAME,
|
|
151
|
+
sources: ["red4ext"],
|
|
152
|
+
severity: "error",
|
|
153
|
+
category: "version",
|
|
154
|
+
pattern: re(PRE, String.raw `The current version of RED4ext supports only the following patch\(es\): (?<supported>[^\n]+)$`),
|
|
155
|
+
explain: "The companion line to the unsupported-patch error: this is the game build the " +
|
|
156
|
+
"installed RED4ext actually targets. The gap between it and the 'Game patch:' " +
|
|
157
|
+
"line above is the whole problem.",
|
|
158
|
+
hint: "Either update RED4ext, or roll the game back to this build (Steam: properties " +
|
|
159
|
+
"→ betas; GOG: an older offline installer).",
|
|
160
|
+
seenIn: [
|
|
161
|
+
`${FIXTURES}/red4ext.synthetic.log`,
|
|
162
|
+
"https://github.com/WopsS/RED4ext/issues/33",
|
|
163
|
+
],
|
|
164
|
+
extract: ["supported"],
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
id: "cyberpunk2077.red4ext.hook-failed",
|
|
168
|
+
game: GAME,
|
|
169
|
+
sources: ["red4ext"],
|
|
170
|
+
severity: "error",
|
|
171
|
+
category: "load",
|
|
172
|
+
pattern: re(PRE, String.raw `Could not attach the hook for (?<target>[^\n]+?)\.\s*Detour error code: (?<code>\d+)`),
|
|
173
|
+
explain: "RED4ext could not install its detour into the game executable, so it never got " +
|
|
174
|
+
"control. Typically an overlay, anti-cheat or antivirus holding the process, or " +
|
|
175
|
+
"a game executable RED4ext does not recognize.",
|
|
176
|
+
hint: "Close overlays (Discord, RivaTuner, GeForce Experience), whitelist the game " +
|
|
177
|
+
"folder in your antivirus, and verify the game files; then check that " +
|
|
178
|
+
"winmm.dll is still in the game root.",
|
|
179
|
+
seenIn: ["https://github.com/WopsS/RED4ext/issues/58"],
|
|
180
|
+
extract: ["target", "code"],
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
id: "cyberpunk2077.red4ext.init-failed",
|
|
184
|
+
game: GAME,
|
|
185
|
+
sources: ["red4ext"],
|
|
186
|
+
severity: "error",
|
|
187
|
+
category: "load",
|
|
188
|
+
pattern: re(PRE, String.raw `RED4ext did not initialize properly`),
|
|
189
|
+
explain: "RED4ext gave up during startup. The game will still launch, but with zero " +
|
|
190
|
+
"native plugins — treat every other mod symptom this run as a consequence of " +
|
|
191
|
+
"this line, not as its own bug.",
|
|
192
|
+
hint: "Read the error immediately above this line (unsupported patch, hook failure or " +
|
|
193
|
+
"a plugin load failure); fixing that fixes this.",
|
|
194
|
+
seenIn: ["https://github.com/WopsS/RED4ext/issues/58"],
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
id: "cyberpunk2077.red4ext.thread-warning",
|
|
198
|
+
game: GAME,
|
|
199
|
+
sources: ["red4ext"],
|
|
200
|
+
severity: "warn",
|
|
201
|
+
category: "load",
|
|
202
|
+
pattern: re(PRE, String.raw `Could not open a thread\.[^\n]*The transaction will continue`),
|
|
203
|
+
explain: "Known benign RED4ext noise while it suspends threads to install its hooks. It " +
|
|
204
|
+
"appears in healthy logs and is not the cause of a mod not working.",
|
|
205
|
+
hint: "Ignore it; keep looking for an [error] line.",
|
|
206
|
+
seenIn: [
|
|
207
|
+
`${FIXTURES}/red4ext.synthetic.log`,
|
|
208
|
+
"https://github.com/WopsS/RED4ext/issues/112",
|
|
209
|
+
],
|
|
210
|
+
},
|
|
211
|
+
];
|
|
212
|
+
const REDSCRIPT = [
|
|
213
|
+
{
|
|
214
|
+
id: "cyberpunk2077.redscript.output-saved",
|
|
215
|
+
game: GAME,
|
|
216
|
+
sources: ["redscript"],
|
|
217
|
+
severity: "info",
|
|
218
|
+
category: "success",
|
|
219
|
+
pattern: re(PRE, String.raw `Output successfully saved to (?<output>[^\n]+)$`),
|
|
220
|
+
explain: "redscript compiled every .reds file and wrote the modded script cache. Script " +
|
|
221
|
+
"mods are live this run; if one still does nothing, the problem is in its logic " +
|
|
222
|
+
"or its data, not in compilation.",
|
|
223
|
+
seenIn: [
|
|
224
|
+
`${FIXTURES}/redscript_rCURRENT.ok.synthetic.log`,
|
|
225
|
+
"https://wiki.redmodding.org/redscript/help/troubleshooting",
|
|
226
|
+
],
|
|
227
|
+
extract: ["output"],
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
id: "cyberpunk2077.redscript.compilation-complete",
|
|
231
|
+
game: GAME,
|
|
232
|
+
sources: ["redscript"],
|
|
233
|
+
severity: "info",
|
|
234
|
+
category: "success",
|
|
235
|
+
pattern: re(PRE, String.raw `Compilation complete\s*$`),
|
|
236
|
+
explain: "The compiler finished every file in r6/scripts. Warnings above this line did not " +
|
|
237
|
+
"abort the compile; the 'Output successfully saved' line that follows is the proof the " +
|
|
238
|
+
"bundle was written.",
|
|
239
|
+
seenIn: [`${REAL}/redscript.log`],
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
id: "cyberpunk2077.redscript.compile-error",
|
|
243
|
+
game: GAME,
|
|
244
|
+
sources: ["redscript"],
|
|
245
|
+
severity: "error",
|
|
246
|
+
category: "compile",
|
|
247
|
+
pattern: /^\[ERROR\b[^\]]*\]\s*At (?<file>[^\n]+?\.(?:reds|script)):(?<line>\d+):(?<column>\d+):?/,
|
|
248
|
+
explain: "A .reds file failed to compile at this exact file, line and column. One broken " +
|
|
249
|
+
"file aborts the whole compile, so the game starts with NO script mods at all, " +
|
|
250
|
+
"not just this one — the diagnostic text follows on the next lines.",
|
|
251
|
+
hint: "Open the file at that line. If the code looks right, the API it calls probably " +
|
|
252
|
+
"changed in the last game patch, or Codeware/a dependency did not load (check " +
|
|
253
|
+
"red4ext.log first); remove the mod to confirm the rest compile.",
|
|
254
|
+
seenIn: [
|
|
255
|
+
`${FIXTURES}/redscript_rCURRENT.error.synthetic.log`,
|
|
256
|
+
`${CDPR_LOGS_DOC} (verbatim At <path>:<line>:<col> shape)`,
|
|
257
|
+
],
|
|
258
|
+
extract: ["file", "line", "column"],
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
id: "cyberpunk2077.redscript.compile-warning",
|
|
262
|
+
game: GAME,
|
|
263
|
+
sources: ["redscript"],
|
|
264
|
+
severity: "warn",
|
|
265
|
+
category: "compile",
|
|
266
|
+
pattern: /^\[WARN(?:ING)?\b[^\]]*\]\s*At (?<file>[^\n]+?\.(?:reds|script)):(?<line>\d+):(?<column>\d+):?/,
|
|
267
|
+
explain: "redscript accepted the file but flagged something at this line — typically a " +
|
|
268
|
+
"field or method redefined in a class that already has it, which compiles and " +
|
|
269
|
+
"then silently has no effect at runtime.",
|
|
270
|
+
hint: "If the mod owning this file appears to do nothing, this is why: two mods are " +
|
|
271
|
+
"@addField/@replaceMethod-ing the same member, and one of them loses.",
|
|
272
|
+
seenIn: [
|
|
273
|
+
`${FIXTURES}/redscript_rCURRENT.error.synthetic.log`,
|
|
274
|
+
`${CDPR_LOGS_DOC} (verbatim duplicate-field WARN)`,
|
|
275
|
+
],
|
|
276
|
+
extract: ["file", "line", "column"],
|
|
277
|
+
systemImpact: false,
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
id: "cyberpunk2077.redscript.compilation-failed",
|
|
281
|
+
game: GAME,
|
|
282
|
+
sources: ["redscript"],
|
|
283
|
+
severity: "error",
|
|
284
|
+
category: "compile",
|
|
285
|
+
pattern: re(PRE, String.raw `(?:(?:RED[Ss]cript|[Ss]cripts?)\s+)?[Cc]ompilation failed\b`, String.raw `(?:[:,]?\s*(?<errors>\d+) error\(s\))?(?:,\s*(?<warnings>\d+) warning\(s\))?`),
|
|
286
|
+
explain: "The redscript compile aborted, so the game is running the vanilla script cache: " +
|
|
287
|
+
"every script mod is inert this launch, including the ones that are perfectly " +
|
|
288
|
+
"fine. Expect a wave of unrelated-looking symptoms.",
|
|
289
|
+
hint: "Fix the first 'At <file>:<line>:<col>' error above; if there is none, delete " +
|
|
290
|
+
"r6/cache/modded (it is regenerated at launch) and verify the game files.",
|
|
291
|
+
seenIn: [
|
|
292
|
+
`${FIXTURES}/redscript_rCURRENT.error.synthetic.log`,
|
|
293
|
+
"unverified: tolerant pattern (also matches the 'scripts compilation failed' wording quoted in community threads)",
|
|
294
|
+
],
|
|
295
|
+
extract: ["errors", "warnings"],
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
id: "cyberpunk2077.redscript.cache-error",
|
|
299
|
+
game: GAME,
|
|
300
|
+
sources: ["redscript"],
|
|
301
|
+
severity: "error",
|
|
302
|
+
category: "compile",
|
|
303
|
+
pattern: re(PRE, String.raw `(?:Failed to|Could not|Unable to) (?:open|read|load|write|create|deserialize) `, String.raw `(?:the )?(?<target>[^\n]*(?:script bundle|final\.redscripts|r6[\\/]cache)[^\n]*)`),
|
|
304
|
+
explain: "redscript could not read or write the script cache itself, so nothing was " +
|
|
305
|
+
"compiled. This is a stale or half-written r6/cache after a game patch or a " +
|
|
306
|
+
"crashed launch, not a mod's fault.",
|
|
307
|
+
hint: "Delete r6/cache/modded (and r6/cache/final.redscripts.bk if present), then " +
|
|
308
|
+
"verify/repair the game files so the vanilla bundle is restored; relaunch. This " +
|
|
309
|
+
"is the community's standard first ritual after a patch.",
|
|
310
|
+
seenIn: [
|
|
311
|
+
"unverified: tolerant pattern",
|
|
312
|
+
],
|
|
313
|
+
extract: ["target"],
|
|
314
|
+
},
|
|
315
|
+
];
|
|
316
|
+
const TWEAKXL = [
|
|
317
|
+
{
|
|
318
|
+
id: "cyberpunk2077.tweakxl.initialized",
|
|
319
|
+
game: GAME,
|
|
320
|
+
sources: ["tweakxl"],
|
|
321
|
+
severity: "info",
|
|
322
|
+
category: "success",
|
|
323
|
+
pattern: re(PRE, String.raw `TweakXL (?<version>\d[\w.+-]*) (?:is starting|(?:has been )?initialized)`),
|
|
324
|
+
explain: "TweakXL started, so r6/tweaks YAML and .tweak files are being read this run. Without " +
|
|
325
|
+
"this line every tweak file is inert.",
|
|
326
|
+
hint: "If this line is absent, check the RED4ext log first: TweakXL is a RED4ext plugin.",
|
|
327
|
+
seenIn: [`${REAL}/tweakxl.log`, `${FIXTURES}/TweakXL.synthetic.log`],
|
|
328
|
+
extract: ["version"],
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
id: "cyberpunk2077.tweakxl.tweaks-loaded",
|
|
332
|
+
game: GAME,
|
|
333
|
+
sources: ["tweakxl"],
|
|
334
|
+
severity: "info",
|
|
335
|
+
category: "success",
|
|
336
|
+
pattern: re(PRE, String.raw `(?<phase>Import|Execution) completed\.\s*$`),
|
|
337
|
+
explain: "TweakXL finished applying tweaks (Import = YAML/.tweak files, Execution = scriptable " +
|
|
338
|
+
"tweaks). Warnings between 'Importing tweaks...' and this line name the record.flat " +
|
|
339
|
+
"that did not resolve.",
|
|
340
|
+
seenIn: [`${REAL}/tweakxl.log`],
|
|
341
|
+
extract: ["phase"],
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
id: "cyberpunk2077.tweakxl.file-read",
|
|
345
|
+
game: GAME,
|
|
346
|
+
sources: ["tweakxl"],
|
|
347
|
+
severity: "info",
|
|
348
|
+
category: "load",
|
|
349
|
+
pattern: re(PRE, String.raw `Reading "(?<file>[^"\n]+)"\.\.\.\s*$`),
|
|
350
|
+
explain: "TweakXL picked up a tweak file under r6/tweaks (path relative to that folder). The " +
|
|
351
|
+
"first such line is reported; `repeats` counts the rest, so the total is the number of " +
|
|
352
|
+
"files it found.",
|
|
353
|
+
hint: "If your own file is missing from this list, it is not under r6/tweaks with a .yaml, " +
|
|
354
|
+
".yml or .tweak extension — TweakXL never saw it.",
|
|
355
|
+
seenIn: [`${REAL}/tweakxl.log`],
|
|
356
|
+
extract: ["file"],
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
id: "cyberpunk2077.tweakxl.yaml-parse-error",
|
|
360
|
+
game: GAME,
|
|
361
|
+
sources: ["tweakxl"],
|
|
362
|
+
severity: "error",
|
|
363
|
+
category: "compile",
|
|
364
|
+
pattern: re(LEVEL_PRE, String.raw `(?:Failed to parse|Could not parse|Cannot parse|Parse error(?: in)?|YAML error(?: in)?)`, String.raw `[^"\n]*"?(?<file>[^"\n]+?\.ya?ml)"?`, String.raw `(?![^\n]*\bduplicate key\b)`, String.raw `(?:[^\n]*?\bline (?<line>\d+))?`),
|
|
365
|
+
explain: "A tweak YAML file is malformed, so TweakXL discarded the whole file — every " +
|
|
366
|
+
"record it defines is missing, not just the broken part. Tabs, inconsistent " +
|
|
367
|
+
"indentation and stray quotes are the usual causes.",
|
|
368
|
+
hint: "Run the file through yamllint (the TweakXL wiki tells authors to do exactly " +
|
|
369
|
+
"this), fix the reported line, and re-check that no line uses tab characters.",
|
|
370
|
+
seenIn: [
|
|
371
|
+
`${FIXTURES}/TweakXL.synthetic.log`,
|
|
372
|
+
"unverified: tolerant pattern",
|
|
373
|
+
"https://github.com/psiberx/cp2077-tweak-xl/wiki/YAML-Tweaks",
|
|
374
|
+
],
|
|
375
|
+
extract: ["file", "line"],
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
id: "cyberpunk2077.tweakxl.duplicate-key",
|
|
379
|
+
game: GAME,
|
|
380
|
+
sources: ["tweakxl"],
|
|
381
|
+
severity: "error",
|
|
382
|
+
category: "compile",
|
|
383
|
+
pattern: re(LEVEL_PRE, String.raw `[^\n]*?(?:"(?<file>[^"\n]+\.ya?ml)"[^\n]*?)?\bduplicate key\b`, String.raw `(?:[^\n]*?"(?<key>[^"\n]+)")?(?:[^\n]*?\bline (?<line>\d+))?`),
|
|
384
|
+
explain: "The same key appears twice in one tweak YAML file. YAML keeps only the last " +
|
|
385
|
+
"occurrence, and TweakXL rejects the file rather than guessing, so the records " +
|
|
386
|
+
"in it never reach TweakDB.",
|
|
387
|
+
hint: "Open the named file at that line and merge the two blocks; this is the most " +
|
|
388
|
+
"common hand-edited-YAML mistake and yamllint catches it before launch.",
|
|
389
|
+
seenIn: [
|
|
390
|
+
`${FIXTURES}/TweakXL.synthetic.log`,
|
|
391
|
+
"unverified: tolerant pattern",
|
|
392
|
+
"https://github.com/psiberx/cp2077-tweak-xl/wiki/YAML-Tweaks",
|
|
393
|
+
],
|
|
394
|
+
extract: ["file", "key", "line"],
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
id: "cyberpunk2077.tweakxl.missing-base",
|
|
398
|
+
game: GAME,
|
|
399
|
+
sources: ["tweakxl"],
|
|
400
|
+
severity: "error",
|
|
401
|
+
category: "resource",
|
|
402
|
+
pattern: re(LEVEL_PRE, String.raw `[^\n]*?(?:\$base|\$type)\s+"?(?<record>[A-Za-z_][\w.]*)"?`, String.raw `[^\n]*?\b(?:does not exist|not found|is unknown|could not be resolved|is invalid)\b`),
|
|
403
|
+
explain: "A tweak inherits from a TweakDB record that is not there. Either the name is " +
|
|
404
|
+
"misspelled, or it belongs to a mod that is not installed, or it is an inline " +
|
|
405
|
+
"record whose generated name changed with the game patch — the tweak is dropped.",
|
|
406
|
+
hint: "Verify the record name against the shipped tools/redmod/tweaks corpus or with " +
|
|
407
|
+
"TweakDB.GetRecord('<name>') in the CET console; that corpus, not the docs, is " +
|
|
408
|
+
"ground truth for TweakDB names.",
|
|
409
|
+
seenIn: [
|
|
410
|
+
`${FIXTURES}/TweakXL.synthetic.log`,
|
|
411
|
+
"unverified: tolerant pattern",
|
|
412
|
+
],
|
|
413
|
+
extract: ["record"],
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
id: "cyberpunk2077.tweakxl.unknown-record",
|
|
417
|
+
game: GAME,
|
|
418
|
+
sources: ["tweakxl"],
|
|
419
|
+
severity: "warn",
|
|
420
|
+
category: "resource",
|
|
421
|
+
pattern: re(PRE, String.raw `(?<record>[A-Za-z_][\w.]*) refers to a non-existent record or flat`, String.raw `(?:\s*<(?<tdbid>TDBID:[^>]+)>)?`),
|
|
422
|
+
explain: "A tweak assigned a reference to a record or flat that does not exist in TweakDB, so " +
|
|
423
|
+
"the game will read a null where the tweak meant a value. The named path is " +
|
|
424
|
+
"<record>.<flat> on the tweak side; the TDBID is the hash of the missing target.",
|
|
425
|
+
hint: "Check the target's spelling against the vanilla index (lookup kind 'record' or " +
|
|
426
|
+
"'reverse'); a typo in a $base or in an inline record reference is the usual cause.",
|
|
427
|
+
seenIn: [`${REAL}/tweakxl.log`],
|
|
428
|
+
extract: ["record", "tdbid"],
|
|
429
|
+
systemImpact: false,
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
id: "cyberpunk2077.tweakxl.missing-resource",
|
|
433
|
+
game: GAME,
|
|
434
|
+
sources: ["tweakxl"],
|
|
435
|
+
severity: "warn",
|
|
436
|
+
category: "resource",
|
|
437
|
+
pattern: re(PRE, String.raw `(?<record>[A-Za-z_][\w.]*) refers to a non-existent resource\.`),
|
|
438
|
+
explain: "A tweak points a resource path (an .ent, .app, .mesh, .inkatlas, ...) at a depot path " +
|
|
439
|
+
"that is not in any loaded archive. In game the entity or icon is missing rather than " +
|
|
440
|
+
"the game failing.",
|
|
441
|
+
hint: "Confirm the path exists inside the packed .archive (WolvenKit's archive browser) and " +
|
|
442
|
+
"that the archive is in archive/pc/mod; case and extension must match exactly.",
|
|
443
|
+
seenIn: [`${REAL}/tweakxl.log`],
|
|
444
|
+
extract: ["record"],
|
|
445
|
+
systemImpact: false,
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
id: "cyberpunk2077.tweakxl.hash-collision",
|
|
449
|
+
game: GAME,
|
|
450
|
+
sources: ["tweakxl"],
|
|
451
|
+
severity: "warn",
|
|
452
|
+
category: "resource",
|
|
453
|
+
pattern: re(PRE, String.raw `(?<flat>[A-Za-z_][\w.]*) has hash collision with (?<other>[A-Za-z_][\w.]*)\.`),
|
|
454
|
+
explain: "Two flat names hash to the same TweakDB id, so one of them overwrites the other. " +
|
|
455
|
+
"Usually a mod-defined record name colliding with a vanilla one.",
|
|
456
|
+
hint: "Rename the mod-side record; TweakDB ids are 32-bit hashes of the name and cannot be disambiguated.",
|
|
457
|
+
seenIn: [`${REAL}/tweakxl.log`],
|
|
458
|
+
extract: ["flat", "other"],
|
|
459
|
+
systemImpact: false,
|
|
460
|
+
},
|
|
461
|
+
];
|
|
462
|
+
const ARCHIVEXL = [
|
|
463
|
+
{
|
|
464
|
+
id: "cyberpunk2077.archivexl.initialized",
|
|
465
|
+
game: GAME,
|
|
466
|
+
sources: ["archivexl"],
|
|
467
|
+
severity: "info",
|
|
468
|
+
category: "success",
|
|
469
|
+
pattern: re(PRE, String.raw `ArchiveXL (?<version>\d[\w.+-]*) (?:is starting|(?:has been )?initialized)`),
|
|
470
|
+
explain: "ArchiveXL started, so .xl sidecar manifests next to your .archive files are " +
|
|
471
|
+
"being read this run. Without this line, .xl files are inert and the archives " +
|
|
472
|
+
"load as plain archives — a very common cause of 'my mod installed but nothing " +
|
|
473
|
+
"changed'.",
|
|
474
|
+
hint: "If this line is absent, check the RED4ext log first: ArchiveXL is a RED4ext plugin.",
|
|
475
|
+
seenIn: [`${REAL}/archivexl.log`, `${FIXTURES}/ArchiveXL.synthetic.log`],
|
|
476
|
+
extract: ["version"],
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
id: "cyberpunk2077.archivexl.extension-loading",
|
|
480
|
+
game: GAME,
|
|
481
|
+
sources: ["archivexl"],
|
|
482
|
+
severity: "info",
|
|
483
|
+
category: "load",
|
|
484
|
+
pattern: re(PRE, String.raw `Loading "(?<file>[^"\n]+\.xl)"\.\.\.\s*$`),
|
|
485
|
+
explain: "ArchiveXL found and is parsing an .xl manifest (name relative to archive/pc/mod). The " +
|
|
486
|
+
"first is reported; `repeats` counts the rest.",
|
|
487
|
+
hint: "If your .xl is not in this list, its base name does not match its .archive or it is " +
|
|
488
|
+
"not in archive/pc/mod.",
|
|
489
|
+
seenIn: [`${REAL}/archivexl.log`],
|
|
490
|
+
extract: ["file"],
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
id: "cyberpunk2077.archivexl.resources-registered",
|
|
494
|
+
game: GAME,
|
|
495
|
+
sources: ["archivexl"],
|
|
496
|
+
severity: "info",
|
|
497
|
+
category: "success",
|
|
498
|
+
pattern: re(PRE, String.raw `All archive extensions loaded\.\s*$`),
|
|
499
|
+
explain: "ArchiveXL finished reading every .xl manifest it found. Section-level problems " +
|
|
500
|
+
"([error]/[warning] lines tagged [ResourcePatch], [Localization], [Journal], " +
|
|
501
|
+
"[WorldStreaming], [QuestPhase]) appear after this line as the game requests resources.",
|
|
502
|
+
seenIn: [`${REAL}/archivexl.log`],
|
|
503
|
+
},
|
|
504
|
+
{
|
|
505
|
+
id: "cyberpunk2077.archivexl.journal-mappin-unresolved",
|
|
506
|
+
game: GAME,
|
|
507
|
+
sources: ["archivexl"],
|
|
508
|
+
severity: "error",
|
|
509
|
+
category: "resource",
|
|
510
|
+
pattern: re(PRE, String.raw `\[Journal\] Can't resolve mappin #(?<id>\d+) \((?<path>[^)\n]+)\) position\.`),
|
|
511
|
+
explain: "A journal (map pin) entry merged from an .xl manifest names a mappin whose world " +
|
|
512
|
+
"position cannot be resolved. ArchiveXL logs this at error level; the game keeps " +
|
|
513
|
+
"running and the pin is simply missing from the map. It is a defect of the mod that " +
|
|
514
|
+
"declared the journal entry, not of ArchiveXL.",
|
|
515
|
+
hint: "The path under points_of_interest/ identifies the mod's journal section; check that the " +
|
|
516
|
+
"mappin's world node exists in a loaded sector.",
|
|
517
|
+
seenIn: [`${REAL}/archivexl.log`],
|
|
518
|
+
extract: ["id", "path"],
|
|
519
|
+
systemImpact: false,
|
|
520
|
+
},
|
|
521
|
+
{
|
|
522
|
+
id: "cyberpunk2077.archivexl.quest-phase-missing",
|
|
523
|
+
game: GAME,
|
|
524
|
+
sources: ["archivexl"],
|
|
525
|
+
severity: "warn",
|
|
526
|
+
category: "resource",
|
|
527
|
+
pattern: re(PRE, String.raw `\[QuestPhase\] Phase "(?<phase>[^"\n]+)" doesn't exist\. Skipped\.`),
|
|
528
|
+
explain: "An .xl manifest asked to merge into a quest phase that is not present, so that merge " +
|
|
529
|
+
"was skipped. Common after a game patch renames or removes a phase.",
|
|
530
|
+
seenIn: [`${REAL}/archivexl.log`],
|
|
531
|
+
extract: ["phase"],
|
|
532
|
+
systemImpact: false,
|
|
533
|
+
},
|
|
534
|
+
{
|
|
535
|
+
id: "cyberpunk2077.archivexl.localization-overwrite",
|
|
536
|
+
game: GAME,
|
|
537
|
+
sources: ["archivexl"],
|
|
538
|
+
severity: "warn",
|
|
539
|
+
category: "resource",
|
|
540
|
+
pattern: re(PRE, String.raw `\[Localization\] Item #(?<item>\d+) overwrites entry (?<entry>\d+)\.`),
|
|
541
|
+
explain: "Two localization sources define the same string key; the later one wins. Harmless " +
|
|
542
|
+
"when intended, but a mod's own name showing up wrong usually traces back to this.",
|
|
543
|
+
seenIn: [`${REAL}/archivexl.log`],
|
|
544
|
+
extract: ["item", "entry"],
|
|
545
|
+
systemImpact: false,
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
id: "cyberpunk2077.archivexl.resource-resolve-failed",
|
|
549
|
+
game: GAME,
|
|
550
|
+
sources: ["archivexl"],
|
|
551
|
+
severity: "error",
|
|
552
|
+
category: "resource",
|
|
553
|
+
pattern: re(LEVEL_PRE, String.raw `(?:Failed to|Could not|Unable to) resolve[^\n]*?\b(?:resource|path|depot)\b`, String.raw `[^\n]*?"(?<resource>[^"\n]+)"`),
|
|
554
|
+
explain: "A resource path referenced by an .xl manifest or a record is not present in any " +
|
|
555
|
+
"loaded archive. In game this shows up as an invisible or untextured entity " +
|
|
556
|
+
"rather than as a crash, so the log is the only place it is visible.",
|
|
557
|
+
hint: "Check the path's spelling and case against the packed archive contents " +
|
|
558
|
+
"(WolvenKit's archive browser), and confirm the archive that should contain it " +
|
|
559
|
+
"is actually in archive/pc/mod.",
|
|
560
|
+
seenIn: [
|
|
561
|
+
`${FIXTURES}/ArchiveXL.synthetic.log`,
|
|
562
|
+
"unverified: tolerant pattern",
|
|
563
|
+
],
|
|
564
|
+
extract: ["resource"],
|
|
565
|
+
},
|
|
566
|
+
{
|
|
567
|
+
id: "cyberpunk2077.archivexl.appearance-resolve-failed",
|
|
568
|
+
game: GAME,
|
|
569
|
+
sources: ["archivexl"],
|
|
570
|
+
severity: "error",
|
|
571
|
+
category: "resource",
|
|
572
|
+
pattern: re(LEVEL_PRE, String.raw `(?:Failed to|Could not|Unable to) resolve[^\n]*?\bappearance\b`, String.raw `[^\n]*?"(?<appearance>[^"\n]+)"`, String.raw `(?:[^\n]*?\bfor entity "(?<entity>[^"\n]+)")?`),
|
|
573
|
+
explain: "An appearance name could not be matched to a variant in the entity's .app file. " +
|
|
574
|
+
"This is the classic 'entity spawns invisible' failure: the entity exists, its " +
|
|
575
|
+
"appearance does not resolve, and nothing else complains.",
|
|
576
|
+
hint: "Compare the appearance name in the .ent/.app pair character for character " +
|
|
577
|
+
"(appearanceName on the node, appearanceResourceName on the entity); the visuals " +
|
|
578
|
+
"come from the weapon-level .app via the factory, not from slotPartListPreset.",
|
|
579
|
+
seenIn: [
|
|
580
|
+
`${FIXTURES}/ArchiveXL.synthetic.log`,
|
|
581
|
+
"unverified: tolerant pattern",
|
|
582
|
+
],
|
|
583
|
+
extract: ["appearance", "entity"],
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
id: "cyberpunk2077.archivexl.registration-failed",
|
|
587
|
+
game: GAME,
|
|
588
|
+
sources: ["archivexl"],
|
|
589
|
+
severity: "error",
|
|
590
|
+
category: "resource",
|
|
591
|
+
pattern: re(LEVEL_PRE, String.raw `(?:Failed to|Could not|Unable to) (?:register|load|apply|read)`, String.raw `[^\n]*?\b(?<kind>factor(?:y|ies)|localization|translations?|onscreens?)\b`, String.raw `(?:[^\n]*?"(?<path>[^"\n]+)")?`),
|
|
592
|
+
explain: "An .xl manifest section did not register: a factory entry (which is what makes " +
|
|
593
|
+
"custom items resolve their parts and appearances) or a localization/onscreens " +
|
|
594
|
+
"entry (which is what gives them names instead of raw LocKey ids).",
|
|
595
|
+
hint: "Validate the .xl YAML — factories and localization are separate top-level " +
|
|
596
|
+
"sections and each expects a list of depot paths that must exist in the archive " +
|
|
597
|
+
"packed beside it.",
|
|
598
|
+
seenIn: [
|
|
599
|
+
"unverified: tolerant pattern",
|
|
600
|
+
],
|
|
601
|
+
extract: ["kind", "path"],
|
|
602
|
+
},
|
|
603
|
+
];
|
|
604
|
+
const CET_PRE = String.raw `\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} UTC[+-]\d{2}:\d{2}\] \[info\] \[[^\]\n]*\] \[\d+\] `;
|
|
605
|
+
const LUA_LOCATION = String.raw `(?<file>[^\n]*?(?:mods[\\/](?<mod>[^\\/\n]+)[\\/])?[^\\/\n]*\.lua):(?<line>\d+):\s*`;
|
|
606
|
+
const LUA_SYNTAX = String.raw `(?:expected|unexpected symbol|unfinished string|malformed number|ambiguous syntax)[^\n]*\bnear\b`;
|
|
607
|
+
const CET = [
|
|
608
|
+
{
|
|
609
|
+
id: "cyberpunk2077.cet.version",
|
|
610
|
+
game: GAME,
|
|
611
|
+
sources: ["cet"],
|
|
612
|
+
severity: "info",
|
|
613
|
+
category: "version",
|
|
614
|
+
pattern: re(CET_PRE, String.raw `CET version v?(?<version>\d[\w.+-]*)(?: \[(?<build>[^\]\n]+)\])?`),
|
|
615
|
+
explain: "CET printed its own version at startup. Compare against the game version on the " +
|
|
616
|
+
"next line: CET is rebuilt for each game patch.",
|
|
617
|
+
hint: "If the version is older than the game's last patch, CET's Lua mods will not load; " +
|
|
618
|
+
"update CET before touching any mod.",
|
|
619
|
+
seenIn: [`${REAL}/cet.log`],
|
|
620
|
+
extract: ["version", "build"],
|
|
621
|
+
},
|
|
622
|
+
{
|
|
623
|
+
id: "cyberpunk2077.cet.game-version",
|
|
624
|
+
game: GAME,
|
|
625
|
+
sources: ["cet"],
|
|
626
|
+
severity: "info",
|
|
627
|
+
category: "version",
|
|
628
|
+
pattern: re(CET_PRE, String.raw `Game version (?<version>\d[\d.]*)\s*$`),
|
|
629
|
+
explain: "The game build CET attached to, in exe file-version form (3.0.80.51928 is 2.31).",
|
|
630
|
+
seenIn: [`${REAL}/cet.log`],
|
|
631
|
+
extract: ["version"],
|
|
632
|
+
},
|
|
633
|
+
{
|
|
634
|
+
id: "cyberpunk2077.cet.starting",
|
|
635
|
+
game: GAME,
|
|
636
|
+
sources: ["cet"],
|
|
637
|
+
severity: "info",
|
|
638
|
+
category: "load",
|
|
639
|
+
pattern: re(CET_PRE, String.raw `Cyber Engine Tweaks is starting\.\.\.`),
|
|
640
|
+
explain: "The start of a CET run. Because the log is appended across launches, count this " +
|
|
641
|
+
"line's `repeats` to know how many runs the scanned window covers.",
|
|
642
|
+
seenIn: [`${REAL}/cet.log`],
|
|
643
|
+
},
|
|
644
|
+
{
|
|
645
|
+
id: "cyberpunk2077.cet.hooks-complete",
|
|
646
|
+
game: GAME,
|
|
647
|
+
sources: ["cet"],
|
|
648
|
+
severity: "info",
|
|
649
|
+
category: "success",
|
|
650
|
+
pattern: re(CET_PRE, String.raw `Hidden options hook: success\s*$`),
|
|
651
|
+
explain: "CET installed every engine hook it needs (rendering, Lua VM, options), which is as far " +
|
|
652
|
+
"as its own log goes: mod loading is logged per mod under mods/<name>/<name>.log.",
|
|
653
|
+
seenIn: [`${REAL}/cet.log`],
|
|
654
|
+
},
|
|
655
|
+
{
|
|
656
|
+
id: "cyberpunk2077.cet.mod-loaded",
|
|
657
|
+
game: GAME,
|
|
658
|
+
sources: ["cet"],
|
|
659
|
+
severity: "info",
|
|
660
|
+
category: "success",
|
|
661
|
+
pattern: re(PRE, String.raw `(?:Loaded mod|Mod loaded)[:\s]+['"“](?<mod>[^'"”\n]+)['"”]`),
|
|
662
|
+
explain: "A CET Lua mod's chunk loaded without erroring. The mod is registered; anything " +
|
|
663
|
+
"it still fails to do is a runtime problem, not an install problem.",
|
|
664
|
+
hint: "A mod folder that never appears here is missing its init.lua or sits at the " +
|
|
665
|
+
"wrong depth under bin/x64/plugins/cyber_engine_tweaks/mods.",
|
|
666
|
+
seenIn: [
|
|
667
|
+
`${FIXTURES}/cyber_engine_tweaks.synthetic.log`,
|
|
668
|
+
"unverified: tolerant pattern",
|
|
669
|
+
],
|
|
670
|
+
extract: ["mod"],
|
|
671
|
+
},
|
|
672
|
+
{
|
|
673
|
+
id: "cyberpunk2077.cet.lua-syntax-error",
|
|
674
|
+
game: GAME,
|
|
675
|
+
sources: ["cet"],
|
|
676
|
+
severity: "error",
|
|
677
|
+
category: "compile",
|
|
678
|
+
pattern: re(PRE, LUA_LOCATION, String.raw `(?<message>[^\n]*`, LUA_SYNTAX, String.raw `[^\n]*)$`),
|
|
679
|
+
explain: "A CET Lua file does not parse, so the mod never loaded at all — none of its " +
|
|
680
|
+
"callbacks, commands or UI exist this session. The file and line are exact.",
|
|
681
|
+
hint: "Fix the syntax at that line and use the CET console's reload rather than " +
|
|
682
|
+
"restarting the game; Lua reports the error at the first token it could not " +
|
|
683
|
+
"reconcile, so the real mistake is often on the line above.",
|
|
684
|
+
seenIn: [
|
|
685
|
+
`${FIXTURES}/cyber_engine_tweaks.synthetic.log`,
|
|
686
|
+
`${CDPR_LOGS_DOC} (real captured line: "...\\mods\\BMYC - A car theft mod\\init.lua:1834: ')' expected near '|'")`,
|
|
687
|
+
],
|
|
688
|
+
extract: ["file", "mod", "line", "message"],
|
|
689
|
+
systemImpact: false,
|
|
690
|
+
},
|
|
691
|
+
{
|
|
692
|
+
id: "cyberpunk2077.cet.lua-runtime-error",
|
|
693
|
+
game: GAME,
|
|
694
|
+
sources: ["cet"],
|
|
695
|
+
severity: "error",
|
|
696
|
+
category: "script",
|
|
697
|
+
pattern: re(PRE, LUA_LOCATION, String.raw `(?![^\n]*(?:`, LUA_SYNTAX, String.raw `))(?<message>[^\n]+)$`),
|
|
698
|
+
explain: "A CET Lua mod threw while running (a nil value, a bad argument, a missing game " +
|
|
699
|
+
"API). The mod loaded, so the rest of it keeps working — only the code path that " +
|
|
700
|
+
"threw is dead, which is why the symptom is usually one broken feature.",
|
|
701
|
+
hint: "The named game API most likely moved or was removed in the current patch: check " +
|
|
702
|
+
"the value at that line in the CET console before editing the mod.",
|
|
703
|
+
seenIn: [
|
|
704
|
+
"unverified: tolerant pattern (same verified file:line shape as the syntax-error case, minus the Lua parser wording)",
|
|
705
|
+
`${CDPR_LOGS_DOC}`,
|
|
706
|
+
],
|
|
707
|
+
extract: ["file", "mod", "line", "message"],
|
|
708
|
+
systemImpact: false,
|
|
709
|
+
},
|
|
710
|
+
];
|
|
711
|
+
const CODEWARE = [
|
|
712
|
+
{
|
|
713
|
+
id: "cyberpunk2077.codeware.initializing",
|
|
714
|
+
game: GAME,
|
|
715
|
+
sources: ["codeware"],
|
|
716
|
+
severity: "info",
|
|
717
|
+
category: "version",
|
|
718
|
+
pattern: re(PRE, String.raw `Codeware (?<version>\d[\w.+-]*) is initializing\.\.\.`),
|
|
719
|
+
explain: "Codeware started and printed its version — the one redscript mods that depend on it were built against.",
|
|
720
|
+
seenIn: [`${REAL}/codeware.log`],
|
|
721
|
+
extract: ["version"],
|
|
722
|
+
},
|
|
723
|
+
{
|
|
724
|
+
id: "cyberpunk2077.codeware.initialized",
|
|
725
|
+
game: GAME,
|
|
726
|
+
sources: ["codeware"],
|
|
727
|
+
severity: "info",
|
|
728
|
+
category: "success",
|
|
729
|
+
pattern: re(PRE, String.raw `Codeware is initialized\.\s*$`),
|
|
730
|
+
explain: "Codeware finished initializing (resource path registry loaded). Without this line, every " +
|
|
731
|
+
"redscript mod that imports Codeware fails at runtime even though it compiled.",
|
|
732
|
+
seenIn: [`${REAL}/codeware.log`],
|
|
733
|
+
},
|
|
734
|
+
];
|
|
735
|
+
export const SIGNATURES = [
|
|
736
|
+
...RED4EXT,
|
|
737
|
+
...REDSCRIPT,
|
|
738
|
+
...TWEAKXL,
|
|
739
|
+
...ARCHIVEXL,
|
|
740
|
+
...CET,
|
|
741
|
+
...CODEWARE,
|
|
742
|
+
];
|