BG3 mod data
  • Lua 78.8%
  • Python 19.6%
  • Shell 1.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-11-03 20:53:50 +01:00
docs v3.47b bg3.wiki class dumps as spell ground truth: docs/wiki-dumps/ (10 class pages, lynx), tools/parse_wiki_spells.py parser+cross-check (--check vs spell_registry); registry class sets rebuilt from wiki (BG3 != 5e PHB: druid has Thunderwave/Blight/WallOfFire, no MassHealingWord, no paladin/warlock cantrips, Fly on no list, Sunbeam also sorc/wiz lvl6, Cure Wounds bard+ranger); Conjure Minor Elemental EXISTS (Target_ConjureElementals_Minor_Container lvl4, bad regex missed it) + back in druid roll; WIKI_EXCEPTIONS/FEATURE_IDS for invocation+feature ids 2026-11-03 20:47:07 +01:00
game-logs v3.38 casting + team naming: per-level DefaultBoosts on CHAOST entries (ActionResource SpellSlot curves + level-gated UnlockSpell kits for healer/caster/ranged/wildcard, all spell ids validated vs vanilla Spell_*.txt - vanilla Characters never carry spell tokens, named-caster precedent); FlavorNameFix now relabels team mobs unconditionally (donor loca name blocked entry.nm), ROLE_LABEL class-flavored -> 'Half-Elf Cleric'; owner's Proton borderless fix noted; owner's team-fight report logged in game-logs/ 2026-11-02 20:44:57 +01:00
Gustav/Stats/Generated Fixed drop-chance 2026-10-04 12:47:25 +02:00
GustavDev/Stats/Generated chaos engine v3.3: native-stat DB + level gates (SetLevel can't rescale stat blocks); HP boost disabled for calibration 2026-10-31 12:54:31 +01:00
mods/chaos-reinforcements v3.47b bg3.wiki class dumps as spell ground truth: docs/wiki-dumps/ (10 class pages, lynx), tools/parse_wiki_spells.py parser+cross-check (--check vs spell_registry); registry class sets rebuilt from wiki (BG3 != 5e PHB: druid has Thunderwave/Blight/WallOfFire, no MassHealingWord, no paladin/warlock cantrips, Fly on no list, Sunbeam also sorc/wiz lvl6, Cure Wounds bard+ranger); Conjure Minor Elemental EXISTS (Target_ConjureElementals_Minor_Container lvl4, bad regex missed it) + back in druid roll; WIKI_EXCEPTIONS/FEATURE_IDS for invocation+feature ids 2026-11-03 20:47:07 +01:00
Shared/Stats/Generated V1.0.0 2026-10-31 23:07:40 +01:00
SharedDev/Stats/Generated story: E8b armed - inject probe rules into vanilla-named goals in Data/Mods story mount (GLO_HonorMode + GLO_BackgroundGoals, backed up), add tools/e8b_inject.py, park MARTIN_SpawnProbe in docs/goals, update docs 2026-10-31 07:56:27 +01:00
tools v3.47b bg3.wiki class dumps as spell ground truth: docs/wiki-dumps/ (10 class pages, lynx), tools/parse_wiki_spells.py parser+cross-check (--check vs spell_registry); registry class sets rebuilt from wiki (BG3 != 5e PHB: druid has Thunderwave/Blight/WallOfFire, no MassHealingWord, no paladin/warlock cantrips, Fly on no list, Sunbeam also sorc/wiz lvl6, Cure Wounds bard+ranger); Conjure Minor Elemental EXISTS (Target_ConjureElementals_Minor_Container lvl4, bad regex missed it) + back in druid roll; WIKI_EXCEPTIONS/FEATURE_IDS for invocation+feature ids 2026-11-03 20:47:07 +01:00
.gitignore v3.27 CHAOST team spawns were dead: pak RootTemplates load as BINARY .lsf ONLY (owner: first team roll after save-load = CreateAtObject failed x5 + empty group; NOT save-load related - registration is boot-time). Evidence chain: rosters<->lsx 420/420 consistent, parents live, pak had files - but vanilla ships _merged.lsf and every working mod pak here (MMM/EO/extra_enemies_honour/Goon) ships .lsf; our lsx-only ChaosTeams registered ZERO templates (encounters.md Route 6 verdict). Fix: divine -a convert-resource -i lsx -o lsf (semantic roundtrip verified vs EO's shipped pair and our 504-template file); pack_mod.sh now auto-converts staged RootTemplates/*.lsx at build time (guard fixed: expected-count included the staged .pak itself), generated .lsf gitignored, both formats ship (EO precedent). Stats bug: CHAOST Progressions 'Fighter' TableUUID was 1c4c6006-BB49 vs UCL's real 1c4c6006-0B49 (1-char typo, 12 entries + gen_teams/team_composer fixed; Progressions ref TableUUID not node UUID - verification gotcha). Robustness: failed team slot retries with pool mob, group never empties; new !chaos_root probe counts CHAOST_* in GetAllRootTemplates (in-game confirm 504 pending). Docs: AGENTS/HANDOVER/encounters Route 6 resolved/backlog new reinforcement-composition item (owner feedback: legacy equip rolls look half-done vs wild teams) 2026-11-01 17:25:10 +01:00
AGENTS.md v3.47b bg3.wiki class dumps as spell ground truth: docs/wiki-dumps/ (10 class pages, lynx), tools/parse_wiki_spells.py parser+cross-check (--check vs spell_registry); registry class sets rebuilt from wiki (BG3 != 5e PHB: druid has Thunderwave/Blight/WallOfFire, no MassHealingWord, no paladin/warlock cantrips, Fly on no list, Sunbeam also sorc/wiz lvl6, Cure Wounds bard+ranger); Conjure Minor Elemental EXISTS (Target_ConjureElementals_Minor_Container lvl4, bad regex missed it) + back in druid roll; WIKI_EXCEPTIONS/FEATURE_IDS for invocation+feature ids 2026-11-03 20:47:07 +01:00
README.md v3.47 spell registry gate (tools/spell_registry.py: id->name/BG3-level/classes + BANNED ids, hard-validated by gen_teams.py before baking) - caught ranger zero-spell bug (SPELLS key 'ranged'), druid Thunderwave+Blight off-list, paladin cantrip; SpiritualWeapon plain lvl2 id (MAG_ = banned lvl6 item variant); Blight lvl4; PHB slot curves with 6th slot at lvl11/12 (Target_Heal reachable); HALF_SLOTS no 4s at 11/12; README rewritten as 10 one-line bullets 2026-11-03 20:13:33 +01:00

BG3 'mod'

Clone this repo as Data/Public inside the BG3 install (Steam -> right-click game -> Manage -> Browse Local Files -> Data). Editing game files directly instead of using .pak mods keeps achievements alive for the stats-side changes; the Script Extender feature (below) ships as one pak via tools/pack_mod.sh and does flag saves as modded.

The 10 biggest things implemented

  • Chaos reinforcements engine (Script Extender Lua mod, the centrepiece): ongoing fights get surprise reinforcement waves - level-budgeted, stacking spawn chance, faction-correct, in any encounter.
  • Class-built squads, not stat blocks: mobs are composed as real 5e builds - fighter, barbarian, monk, rogue, paladin, ranger, cleric, druid, bard, wizard, sorcerer, warlock, hexblade (class-gated ones only appear at party level 5+).
  • Real class features: spell slots + spell kits, two-weapon fighting, Great Weapon Fighting/Master, divine smites, wild shape, monk flurry, eldritch blast ladder, hexblade charisma melee.
  • Rolled spell kits: cleric/druid known spells are re-rolled every level at template generation, weighted by a priority design (docs/spells-categories.md) - two lvl-6 clerics never share a toolkit.
  • Spell registry gate (tools/spell_registry.py): every spell we assign is validated by game id, real BG3 spell level and class list, so wrong-class spells can never reach a mob.
  • Level-tiered gear: weapon/armor quality bands follow level (plate only at 8+ with proficiency), healers always carry 1-h + shield, humanoids get potions/consumables - and they actually drink them (in-game verified).
  • Bosses and pack leaders: packs roll a leader (~10%), leaders/bosses get capped +1 magic gear; low-level parties are protected by level ceilings.
  • Race-coherent spawns: a goblin ambush reinforces with goblins, a drow patrol with drow - one donor race per wave, matching the fight.
  • Placement smarts: never spawns at a campsite, quiet windows after save-loads, no false-aggro fizzles, orphaned/over-level spawns are cleaned up on a retry ladder.
  • Old-school balance tweaks still live: 10x carry weight, 3 short rests, level cap 50 with tuned XP curves, custom armors/weapons/passives, buffed pets and companions.

Testing in-game: console commands !chaos, !chaos_status, !chaos_wolf, !chaos_root, !chaos_force (see docs/console-commands.md); details and design notes in docs/.