Skip to content

correct ARMO/WEAP layouts - #18

Merged
qudix merged 3 commits into
libxse:mainfrom
ozooma10:fix-layouts
Apr 16, 2026
Merged

correct ARMO/WEAP layouts#18
qudix merged 3 commits into
libxse:mainfrom
ozooma10:fix-layouts

Conversation

@ozooma10

@ozooma10 ozooma10 commented Apr 16, 2026

Copy link
Copy Markdown
Contributor
  • updateTESObjectARMO to match the runtime-validated layout:
    modelArray is BSTArray at 0x310
    attachParents is a full BGSAttachParentArray at 0x320
    0x320 is the component vtable, with begin/end/cap at 0x328/0x330/0x338

  • update TESObjectWEAP for BGSAttachParentArray at 0x250, with shifted formEditorID / weaponData offsets

Tried to validate by inspecting runtime memory layouts

- fix TESObjectREFR base layout by removing the phantom BSTransformDeltaEvent sink, swapping ActorValueOwner / IKeywordFormBase, and restoring the missing padding before data
- update TESObjectARMO so attachParents is modeled as a raw BGSTypedKeywordValueArray<KeywordType::kAttachPoint> at 0x328
- update TESObjectWEAP so attachParents remains the component-backed BGSAttachParentArray at 0x250, with shifted formEditorID / weaponData offsets

TESObjectARMO and TESObjectWEAP appear to store the same gameplay concept with different concrete runtime layouts, so this change intentionally models them asymmetrically.
@ozooma10
ozooma10 marked this pull request as draft April 16, 2026 20:15
@ozooma10
ozooma10 marked this pull request as ready for review April 16, 2026 20:46
not needed for weap/armo fix
@ozooma10 ozooma10 changed the title correct REFR/ARMO/WEAP layouts correct ARMO/WEAP layouts Apr 16, 2026
@qudix
qudix merged commit 67cee6a into libxse:main Apr 16, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants