Releases: ShugokiFable/BDO-AIO
Release list
BDO-AIO v2.1.2 — hotfix: crash after genital generation
Hotfix for a crash introduced in v2.1.1. Update if you are on v2.1.1.
The crash
Selecting 3D vagina wrote the packs correctly, then the launcher died with:
The variable '$reuse' cannot be retrieved because it has not been set.
at Apply-GenitalPacks, bdo_aio.ps1: line 1141
Apply-GenitalPacks still referenced a variable that was removed in v2.1.1, in the success message printed after the work was done. The generated output was never affected — if you saw this, your genital packs were written correctly and are safe to inject. Only the closing message crashed.
Static guard so it cannot happen again
This was the second stale-reference bug of the same shape, so it is now covered by a test rather than a fix.
tools/bdo_meta/test_launcher_static.ps1 walks the launcher's syntax tree and fails when:
- a variable is read but never assigned anywhere in its function, or
- a called function does not exist.
Verified against the real bug: putting the $reuse reference back makes it fail with the exact function and line number.
Menu wording
Removed the last EXPERIMENTAL-REUSE labels. Cross-class genital reuse no longer exists, so a menu that still read "EXPERIMENTAL-REUSE only if you opted in" — on a run where nothing of the sort was possible — was just misleading.
Not a bug: PartCutGen "matched 0 files"
Three exclusion patterns in the bundled Midnight pack match nothing:
pwge_00_lb_0001_dm matched 0 files
pdw_00_ub_0002_mul* matched 0 files
pdw_00_ub_0002_mul_na* matched 0 files
These are informational. They come from the Midnight pack's own exclusion lists, not from the AIO, and PartCutGen still finished with Saving ... DONE and wrote partcutdesc.xml. Nothing to fix.
Validation
- 83 Python tests, three PowerShell suites (including the new static guard), Windows PowerShell 5.1 parser: pass
- In-game confirmed by the user: body sliders, pubic hair on the texture-only classes, and 3D vagina with the authored meshes.
Full changelog: https://github.com/ShugokiFable/BDO-AIO/blob/main/CHANGELOG.md
BDO-AIO v2.1.1 — genitals restricted to authored meshes
Patch release. Fixes the 3D vagina / penis feature for classes released after the original mod, and one long-standing path bug.
3D vagina / penis: authored meshes only
A genital PAC is not just a genital — it is a whole body, carrying the mesh and that class's skin material. Copying one under another class's filename hands that class the donor's body and the donor's skin.
Measured against the shipped pack:
- All 10 authored female meshes bind exactly the atlas their vanilla body already uses — they were authored per class.
- 7 of the 9 old donor mappings bound a different atlas: Deadeye→Ranger, Woosa/Scholar/Nova→Witch, Drakania→Dark Knight, Guardian/Corsair→Sorceress. Only Maegu and Seraph matched by luck.
That is the source of the "Deadeye body looks stretched" reports. Female cross-class reuse is removed; males were already native-only.
Supported now
| Classes | |
|---|---|
| Female 3D vagina | Sorceress, Ranger, Tamer, Valkyrie, Witch, Kunoichi, Dark Knight, Mystic, Lahn, Maehwa |
| Male penis | Warrior, Berserker, Musa, Wizard, Ninja, Striker |
Every other class is skipped with a stated reason instead of being faked. --all-classes / --new-females are still accepted but do nothing, so an older launcher cannot crash.
Underwear was going to a path the game never reads
Both the nude and the underwear PAC were written under nude/. Verified against the live game index: the real entry is
character/model/1_pc/<folder>/armor/38_underwear/<prefix>_00_uw_0001.pac
and the same name under nude/ is not a meta entry. All 16 underwear PACs were landing where nothing looks, then being routed to _add as bogus new entries.
| before | after | |
|---|---|---|
underwear PACs under nude/ |
16 | 0 |
files routed to _add |
16 | 0 |
| paths absent from the game meta | 16 | 0 |
Also
- Genitals were explicitly checked for the invisible-body failure that hit pubic hair in 2.1.0: 0 missing materials, nothing renamed. That bug class does not exist here.
- Removed the dead
[F] NEW FEMALEShub — every class it targeted is now unsupported for genitals. - Fixed the version banner, which still reported
2.0.9in 2.1.0.
Validation
- 83 Python tests, both PowerShell suites, Windows PowerShell 5.1 parser: pass
- Full real-pack run (10 females + 6 males): exit 0, 32 PACs, 17 textures, 0 underwear under
nude/, 0 files routed to_add, 0 paths absent from the game meta, 0 PACs with a missing texture - Requesting the 9 unsupported classes produces 9 explicit skips and no output
- Not yet in-game confirmed. Sliders and pubic hair were confirmed in 2.1.0; the genital changes are tool-validated only.
Upgrading
Source-only release. Drop it over your existing folder and keep your config.json — your slider and pubic choices carry over. If a previous version left a broken body, menu [R] → [V] restores vanilla without a Steam verify.
Full changelog: https://github.com/ShugokiFable/BDO-AIO/blob/main/CHANGELOG.md
BDO-AIO 2.1.0 — per-part body sliders + per-class pubic hair (texture-only)
v2.1.0 — body slider repair + per-class pubic hair
Body size sliders (fixed properly this time)
- Never writes
Default— the game's per-class anisotropic baseline is preserved exactly (this was the cause of the previous stretching). - Never touches a bone's declared
HeightAxis(the game states it per tag, e.g.HeightAxis="X"on Thigh/Calf/Pelvis/Spine). That axis is bone length — leg length and height stay vanilla, characters cannot be made taller. - Widen-only: a component is raised toward the requested max, never lowered below what the game already allowed.
- Per-part maxes in one spec — recommended:
breasts:2.0, thighs:1.5, butt:1.4. Customname:maxpairs supported. - butt = hips + pelvis: measured on the live client, 33/75 body files lock
Bip01 L/R HipMax at ≤1.00 (butt slider physically dead there); Pelvis carries the shape — the long-standing "butt slider does nothing" reports explained. legs/spine/armsretired (length-dominant, children of Pelvis — selecting them produced absurd proportions).
Per-class pubic hair (texture-only, zero PAC writes)
- New
body_atlas.pyreads the real texture atlas from each nude PAC — donor guessing gone. - Root cause of the old leakage: 13 of 19 female bodies render from ONE texture (
phw_01_nude_0001); the filter was working, the target was shared. - Private-atlas classes styled in place; shared atlases styled once when ALL sharers pick the same style; partial/conflicting selections are skipped with a clear notice — never guessed.
- The earlier material-alias attempt (renaming the PAC stem) is reverted: it's a material name, not a texture path — it made bodies invisible in game.
Restore to vanilla
- New
vanilla_restore.py: automatic meta backup before every inject, safe restore (oldest backup, injected-PAZ removal, verification).
Validation
- 80 python tests + 3 PowerShell suites green;
bdo_aio.ps1parses clean under PS 5.1. - Live-asset runs over all 75 body files: 0 files resized, 0
Defaultchanged, 0 HeightAxis components changed, 0 ranges narrowed. - Pubic runs: shared-atlas partial selection → clean skip; whole 13-class group one style → exactly one DDS, 0 PACs.
BDO Modding AIO v2.0.9 - Stable
BDO Modding AIO v2.0.9
Hotfix for restored pubic styles appearing shaved on Ranger, Sorceress, or Witch even though Meta Injector reported no errors.
Fixed
- Identified the actual mismatch: the classic Resorepless resources are DXT1 block patches for an 11,184,952-byte 4K DDS layout, while Midnight ships Ranger/Sorceress/Witch diffuse textures as 89,478,612-byte uncompressed 32-bit DDS files.
- The old code only checked whether offsets fit inside the file, so it reported success while writing compressed blocks into the wrong raw-pixel locations.
- Compatible Tamer/Dark Knight DXT1 textures still use the exact original byte patch.
- Current 32-bit textures now receive the restored style at matching mip/UV coordinates while preserving Midnight's 4K skin, DDS header, mip chain, and alpha.
- Unsupported layouts and malformed resources fail instead of producing false-success output.
Validation
- Python suite: PASS, 32 tests.
- Real Sorceress and Witch texture generation: PASS with byte-identical headers, unchanged alpha, preserved 89,478,612-byte sizes, and visible full-bush output in the expected UV region.
- Real Tamer DXT1 regeneration is byte-identical to the prior known-good output.
- Full archive: PASS, 42,112 files and 2,316,738,943 bytes expanded.
- No
.git,config.json,__pycache__, or.pycentries.
This is tool-validated. Regenerate the pubic option, rerun Meta Injector, then confirm in game. The user has not yet tested the 3D-vagina option. Client modification may violate the game's terms or trigger anti-cheat; use at your own risk.
Install
Extract the complete archive to a fresh folder, then run START.bat. Keep a backup of an existing config.json if replacing an older installation.
SHA-256
FB13C2D1C3EB084C59FF5D9100619874E0B59C1A3CED5E584BC4C39A1B67C2B7 BDO-AIO-v2.0.9-full.7z
BDO Modding AIO v2.0.8
BDO Modding AIO v2.0.8
Hotfix for the Meta Injector launch failure in v2.0.7.
Fixed
- Prevented the canonical stage builder's console report from being captured as part of its returned stage path.
- Meta Injector now receives one explicit quoted
-filesargument string, fixing the Windows PowerShell error:Cannot convert System.Object[] to System.String required by ArgumentList. - Added a Windows PowerShell regression that emits simulated stage-builder output and verifies the returned stage remains one scalar path.
PartCutGen result from the reported log
PartCutGen completed successfully: it processed 1,679 exclusions and saved _PartCutGen\character\partcutdesc.xml. The three matched 0 files notices are optional patterns and are not failures.
Validation
- Windows PowerShell parser: PASS.
- Exact Meta Injector stage-return regression: PASS.
- Existing Python suite: PASS, 30 tests.
- Full 7-Zip archive: PASS, 42,111 files and 2,316,725,208 bytes expanded.
- No
.git,config.json,__pycache__, or.pycentries in the archive.
This is tool-validated. The Meta Injector GUI and game were not launched during validation; rerun Meta Injector and perform an in-game check. Client modification may violate the game's terms or trigger anti-cheat; use at your own risk.
Install
Extract the complete archive to a fresh folder, then run START.bat. Keep a backup of an existing config.json if replacing an older installation.
SHA-256
4CBDD8031190A56C1D6B8DAB08DECCE63FDF2FE0BC1E797CCECE1CD5E2596D36 BDO-AIO-v2.0.8-full.7z
BDO Modding AIO v2.0.7
BDO Modding AIO v2.0.7
This release rolls up all changes since the previously published v2.0.4 release, including the v2.0.5 and v2.0.6 fixes.
Fixes
- Fixed genital PAC material and DDS mappings for the supported 3D vagina and penis assets. Female donor mode remains opt-in; male classes use their native assets to avoid mismatched anatomy.
- Reworked GameOption deployment to merge safe graphics values instead of replacing the whole file. Includes 1080p, 1440p, and DLDSR 4K choices; keeps Remastered mode and high textures while preserving display, HDR, audio, UI, and unknown current-client keys.
- Fixed body-slider vector patching to preserve the exact field width and trailing padding.
- Fixed Midnight deploy appearing to hang until an extra Enter press.
- Fixed Wukong hide coverage and region-aware Meta Patcher handling.
- Removed experimental graphics DLL deployment and the obsolete Ultra screenshot profile.
- Reworked long-path injection so large collections use canonical short internal paths without disabling XYZW collections or skipping/deleting over-limit files.
- Fixed routing for the previously reported pubic-texture, censorship-removal, and README patch failures.
Validation
- 30 automated tests passed.
- 22 PAC files and 18 DDS assets validated for genital deployment.
- Combined canonical deployment test: 67 winners, 25
_addfiles, 0 invalid paths. - Full archive tested with 7-Zip: 42,110 files, 2,316,720,887 bytes expanded.
This is tool-validated. Black Desert Online updates can change asset behavior, so an in-game retest is still required. Client modification may violate the game's terms or trigger anti-cheat; use at your own risk.
Install
Extract the complete archive to a fresh folder, then run START.bat. Keep a backup of any existing configuration before replacing an older installation.
SHA-256
5C17942A032733C39F6AB78C801C16190509CF98E8B6051A21657A599E2DB9D4 BDO-AIO-v2.0.7-full.7z
BDO Modding AIO v2.0.4
BDO Modding AIO v2.0.4
Meta Injector path-length guard (the crash fix)
XYZW collection folders under Program Files exceed Windows MAX_PATH (~260) and make Meta Injector fail near the end with a filename length error.
This release:
- Pre-checks
files_to_patchpath lengths before launching Meta Injector (menu 5) - Warns when XYZW collections will blow the path limit
- Offers to delete
_midnight_xyzw\_01_xyzw_collectionsbefore inject - Midnight deploy warns and can turn XYZW OFF
- Tool:
tools/bdo_meta/path_length_check.py
If you already crashed
- Meta Injector → Restore Backup
- Delete
files_to_patch\_midnight_xyzw\_01_xyzw_collections - Redeploy Midnight with XYZW collections OFF
- PartCutGen → Meta Injector again
Logs
- Crash dumps:
Documents\Black Desert\Dump\ - Client logs:
Steam\...\Black Desert Online\Log\ - AIO status: menu [S]
BDO Modding AIO v2.0.3
BDO Modding AIO v2.0.3
PAZ status: stock vs your mods
The app now scans your PAZ so you can see if the game meta is clean or Meta-Injector-modded.
Menu [S] full report · summary also on the main screen when PAZ is set.
| State | Meaning |
|---|---|
| STOCK | No injector *.meta.backup — treat meta as stock |
| MODDED | Current pad00000.meta differs from latest backup — inject applied |
| RESTORED | Meta matches latest backup — Restore Backup was used |
| STAGED | files_to_patch has content ready for inject (not the same as injected) |
Also lists AIO packages under files_to_patch and experimental OptiScaler/DLSS markers in the game root.
CLI: python tools/bdo_meta/paz_status_scan.py --paz <PAZ> [--json]
Your machine right now (example)
If you only deployed body size into files_to_patch but never ran Meta Injector: STAGED only + META STOCK — run PartCutGen + Meta Injector to apply.
BDO Modding AIO v2.0.2
BDO Modding AIO v2.0.2
Per-class pubic hair & female genitals
You can now choose which classes get:
- Pubic hair style (Options [6])
- Female 3D vagina (Options [V])
- New-females package (Options [F])
How to pick
- [A] ALL females
- [N] Native pubic bins only (Tamer / DK / Ranger / Sorceress / Witch)
- [E] New females only (Seraph, Deadeye, Woosa, …)
- [C] Custom multi-select by number
- [T] Type prefixes (
phw,pdkl,pww)
Empty list in config = all. Stored as pubicHairClasses / genitalFemaleClasses.
CLI
pubic_hair_apply.py --classes phw,pdkl
genital_pack_apply.py --female-classes pdkl,pwge
BDO Modding AIO v2.0.1
BDO Modding AIO v2.0.1 (hotfix)
Audit pass after 2.0.0. Prefer this over 2.0.0.
Fixes
- Apply all RESTORED [A] no longer fails when body size is custom (was passing invalid
--preset custom) - Body size CLI accepts
--preset customwith--min/--default/--max - Clean errors if PAZ/
pad00000.metais missing (slot hide / body size) - Expanded censorship match tightened (underpaint / under / cull — less logo-decal collateral)
- Config template includes
slotHideClasses+heishaRoot - Apply-all genitals checks pack presence
Still in 2.0.0 feature set
Expanded censorship, [A]/[H]/[R], per-class slot hide, FSR/DLSS/DStorage upgrades, new females [F], full wizard RESTORED batch.