This appendix catalogs all known weapon parts extracted from BL4 game files, organized by manufacturer and weapon type.
Part Naming Convention
Parts follow this pattern:
{MFG}_{TYPE}_{Part}_{Variant}_L{Level}_{SubVariant}
| MFG |
Manufacturer code |
DAD, JAK, TOR |
| TYPE |
Weapon type |
AR, SG, PS, SM, SR, HW |
| Part |
Part category |
Scope, Barrel, Grip |
| Variant |
Part variant |
01, 02 |
| Level |
Part tier |
L1, L2, LB (legendary) |
| SubVariant |
Sub-variant |
01, Mask, ADSMask |
Manufacturers
| BOR |
Borg |
- |
SM, SG, HW, SR |
| COV |
Children of the Vault |
- |
Various |
| DAD |
Daedalus |
4 |
AR, SM, PS, SG |
| DPL |
Dahl |
- |
Turrets/Gadgets only |
| JAK |
Jakobs |
129 |
AR, PS, SG, SR |
| MAL |
Maliwan |
138 |
SM, SG, HW, SR |
| ORD |
Order |
15 |
AR, PS, SR |
| TED |
Tediore |
10 |
AR, SG, PS |
| TOR |
Torgue |
6 |
AR, SG, HW, PS |
| VLA |
Vladof |
134 |
AR, SM, HW, SR, PS |
Serial ID is the first VarInt in decoded item serials.
Weapon Types
Type Codes
| AR |
Assault Rifle |
Full-auto/burst rifles |
| HW |
Heavy Weapon |
Launchers, miniguns |
| PS |
Pistol |
Handguns |
| SG |
Shotgun |
Spread weapons |
| SM |
SMG |
Submachine guns |
| SR |
Sniper Rifle |
Precision weapons |
EWeaponType Enum
Internal weapon type enumeration (from usmap):
| 0 |
None |
| 1 |
Pistol |
| 2 |
SMG |
| 3 |
Shotgun |
| 4 |
AssaultRifle |
| 5 |
Sniper |
| 6 |
Heavy |
| 7 |
Count |
Scope Parts by Manufacturer
BOR (Borg)
Heavy Weapons:
| BOR_HW_Scope_Barrel_01 |
Base |
| BOR_HW_Scope_Barrel_02 |
Base |
Shotguns:
| BOR_SG_Scope_01_L1 |
001-009 |
| BOR_SG_Scope_01_L2 |
002-008 |
| BOR_SG_Scope_02_L1 |
001-008 |
| BOR_SG_Scope_02_L2 |
001-005 |
| BOR_SG_Scope_Irons |
001 |
SMGs:
| BOR_SM_Scope_01_L1 |
009-010 |
| BOR_SM_Scope_01_L2 |
001-011 |
| BOR_SM_Scope_02_L1 |
beam 1-8, LED, Reticle |
| BOR_SM_Scope_02_L2 |
001-007, beam |
Sniper Rifles:
| BOR_SR_Scope_01_L1 |
001-014, VFX |
| BOR_SR_Scope_01_L2 |
001-002, beam |
| BOR_SR_Scope_02_L1 |
002-009 |
| BOR_SR_Scope_02_L2 |
001, beam |
DAD (Daedalus)
Assault Rifles:
| DAD_AR_Scope_01_L1 |
01-09, BracketFix |
| DAD_AR_Scope_01_L2 |
01-06 |
| DAD_AR_Scope_02_L1 |
01, 08 |
| DAD_AR_Scope_02_L2 |
01-09 |
Pistols:
| DAD_PS_Scope_01_L1 |
01 |
| DAD_PS_Scope_01_L2 |
01-08 |
| DAD_PS_Scope_02_L1 |
01-04 |
| DAD_PS_Scope_02_L2 |
02-03 |
Shotguns:
| DAD_SG_Scope_01_L1 |
01-02 |
| DAD_SG_Scope_01_L2 |
02, 04 |
| DAD_SG_Scope_02_L1 |
01-02 |
| DAD_SG_Scope_02_L2 |
01-03 |
SMGs:
| DAD_SM_Scope_01_L1 |
01-03 |
| DAD_SM_Scope_01_L2 |
01-08, 011-015 |
| DAD_SM_Scope_02_L1 |
01 |
| DAD_SM_Scope_02_LB |
01-03 (legendary barrel) |
JAK (Jakobs)
Assault Rifles:
| JAK_AR_Scope_01_L1 |
01-03 |
| JAK_AR_Scope_01_L2 |
01-03 |
| JAK_AR_Scope_02_L1 |
01-03 |
| JAK_AR_Scope_02_L2 |
01-02 |
Pistols:
| JAK_PS_Scope_01_L1 |
01-03 |
| JAK_PS_Scope_01_L2 |
01-03 |
| JAK_PS_Scope_02_L1 |
01-03 |
| JAK_PS_Scope_02_L2 |
01-03 |
Shotguns:
| JAK_SG_Scope_01_L1 |
01 |
| JAK_SG_Scope_01_L2 |
02 |
| JAK_SG_Scope_02_L1 |
01, 03 |
| JAK_SG_Scope_02_L2 |
01 |
Sniper Rifles:
| JAK_SR_Scope_01_L1 |
01-03, ADSMask |
| JAK_SR_Scope_01_L2 |
01 |
| JAK_SR_Scope_02_L1 |
01 |
| JAK_SR_Scope_02_L2 |
01-02 |
MAL (Maliwan)
Heavy Weapons:
| MAL_HW_Scope_01 |
01-07, Proje |
| MAL_HW_Scope_02 |
01-02, Proje, Shield |
Shotguns:
| MAL_SG_Scope_01_L1 |
01 |
| MAL_SG_Scope_01_L2 |
01 |
| MAL_SG_Scope_02_L1 |
Base |
| MAL_SG_Scope_02_L2 |
01-06, ADSMask, Projes |
SMGs:
| MAL_SM_Scope_01_L1 |
01-05, Base, Proje |
| MAL_SM_Scope_01_L2 |
01-07 |
| MAL_SM_Scope_02_L1 |
01-03 |
| MAL_SM_Scope_02_L2 |
01-02 |
Sniper Rifles:
| MAL_SR_Scope_01_L1 |
01-08, ADSMask, Proje |
| MAL_SR_Scope_01_L2 |
01-07, ADSMask |
| MAL_SR_Scope_02_L1 |
02, ADSMask, Proje |
| MAL_SR_Scope_02_L2 |
01-03 |
ORD (Order)
Assault Rifles:
| ORD_AR_Scope_01_L1 |
01, 002 |
| ORD_AR_Scope_01_L2 |
01 |
| ORD_AR_Scope_02_L2 |
Mask |
Pistols:
| ORD_PS_Scope_01_L1 |
01 |
| ORD_PS_Scope_01_L2 |
01-02 |
| ORD_PS_Scope_02_L1 |
01, ADSMask |
| ORD_PS_Scope_02_L2 |
01-03, ADSMask |
Sniper Rifles:
| ORD_SR_Scope_01_L1 |
01 |
| ORD_SR_Scope_01_L2 |
01, ADSMask |
| ORD_SR_Scope_02_L1 |
01-02, ADSMask |
| ORD_SR_Scope_02_L2 |
01-02, 002, ADSMask |
TED (Tediore)
Assault Rifles:
| TED_AR_Scope_01_L1 |
01-03, Elements |
| TED_AR_Scope_01_L2 |
01-04 |
| TED_AR_Scope_02_L1 |
ModA, Mask |
| TED_AR_Scope_02_L2 |
01, 04 |
Pistols:
| TED_PS_Scope_01_L1 |
01-06 |
| TED_PS_Scope_01_L2 |
01-02 |
| TED_PS_Scope_02_L1 |
01-04, Line |
| TED_PS_Scope_02_L2 |
01-06 |
Shotguns:
| TED_SG_Scope_01_L1 |
01-04, 010, 012 |
| TED_SG_Scope_01_L2 |
01-02, ADSMask |
| TED_SG_Scope_02_L1 |
01, 04, ModB02 |
| TED_SG_Scope_02_L2 |
01, ModB, Proje |
TOR (Torgue)
Assault Rifles:
| TOR_AR_Scope_01_L1 |
01-06 |
| TOR_AR_Scope_01_L2 |
01-05 |
| TOR_AR_Scope_02_L1 |
01-04 |
| TOR_AR_Scope_02_L2 |
01-04, ModB |
Heavy Weapons:
| TOR_HW_Scope_01 |
01-02 |
| TOR_HW_Scope_02 |
01 |
| TOR_HW_Barrel_01 |
Mask |
| TOR_HW_Barrel_02 |
Mask, Splitter |
Pistols:
| TOR_PS_Scope_01_L1 |
01-03, ModB |
| TOR_PS_Scope_01_L2 |
01-03 |
| TOR_PS_Scope_02_L1 |
01-04, Elements_Updated |
| TOR_PS_Scope_02_L2 |
01 |
Shotguns:
| TOR_SG_Scope_01_L1 |
01-06 |
| TOR_SG_Scope_01_L2 |
01-03, B, Compass |
| TOR_SG_Scope_02_L1 |
01 |
| TOR_SG_Scope_02_L2 |
01-04 |
VLA (Vladof)
Assault Rifles:
| VLA_AR_Scope_01_L1 |
01-04, BASE |
| VLA_AR_Scope_01_L2 |
01-03 |
| VLA_AR_Scope_02_L1 |
01 |
| VLA_AR_Scope_02_L2 |
01-02 |
Heavy Weapons:
| VLA_HW_Scope_01 |
01-04 |
| VLA_HW_Scope_02 |
01-05, ADSMask |
| VLA_HW_Barrel_02 |
Mask |
SMGs:
| VLA_SM_Scope_01_L1 |
01-08, B, BASE |
| VLA_SM_Scope_01_L2 |
01 |
| VLA_SM_Scope_02_L1 |
01-02 |
| VLA_SM_Scope_02_L2 |
01, Mask, Triangles |
Sniper Rifles:
| VLA_SR_Scope_01_L1 |
01-07 |
| VLA_SR_Scope_01_L2 |
01-05, ADSMask |
| VLA_SR_Scope_02_L1 |
01, 03 |
| VLA_SR_Scope_02_L2 |
01-03 |
Barrel Parts
Heavy Weapons
| BOR |
BOR_HW_Barrel_01 |
001-010 |
| BOR |
BOR_HW_Barrel_02 |
001-005, A variant |
| MAL |
MAL_HW_Barrel_02_MIRV |
MIRV launcher |
| TOR |
TOR_HW_Barrel_01 |
With Mask |
| TOR |
TOR_HW_Barrel_02 |
Splitter variant |
| VLA |
VLA_HW_Barrel_02 |
With Mask |
Part Index Organization
The Self-Describing Design
A critical discovery: parts don’t have external indices assigned to them—each part stores its own index internally.
Every part UObject contains a GbxSerialNumberIndex at offset +0x28:
Part UObject + 0x28:
├── Scope (1 byte) ← Always 2 for inventory parts
├── Status (1 byte) ← Reserved
└── Index (2 bytes) ← This part's serial index
There is no separate “part → index” mapping file. The mapping IS the parts themselves. This “reverse mapping” design means:
- Each part is self-describing and carries its own identity
- Adding new parts (e.g., DLC) doesn’t require updating a central registry
- Indices are guaranteed stable because they’re intrinsic to each part
- Memory extraction gives us authoritative data, not a derived mapping
How Indices Are Assigned
Part indices within each category are assigned based on the game’s internal registration order, not alphabetically. Understanding this is critical for correctly decoding and encoding item serials.
Registration Order Pattern
Parts appear to be registered in groups by functional type:
| 1 |
Unique/special variants |
part_barrel_01_zipgun |
| 2 |
Body parts |
part_body, part_body_a-d |
| 3 |
Base barrels |
part_barrel_01, part_barrel_02 |
| 4 |
Shield/defensive |
part_shield_default, part_shield_ricochet |
| 5 |
Magazines |
part_mag_01, part_mag_02 |
| 6 |
Scopes |
part_scope_ironsight, part_scope_01_* |
| 7 |
Grips |
part_grip_01, part_grip_02 |
| 8 |
Underbarrel/foregrip |
part_underbarrel_*, part_foregrip_* |
| 9 |
Body magazines |
part_body_mag_smg, part_body_mag_ar |
| 10 |
Barrel variants |
part_barrel_01_a-d, part_barrel_02_a-d |
| 11 |
Licensed parts |
part_barrel_licensed_jak, part_barrel_licensed_ted |
Index Gaps
Some categories have non-contiguous indices. For example, a category might have parts at indices 1-53, skip 54-56, then continue at 57. These gaps may represent:
- Reserved slots for future DLC parts
- Parts that were removed during development
- Internal versioning or compatibility placeholders
Implications for Modding
When working with item serials:
- Never assume alphabetical order — Part
part_barrel_01 might have index 7, not index 0
- Use runtime-extracted data — Only memory dumps capture the true
GbxSerialNumberIndex values
- Validate against known items — Decode existing item serials to verify index mappings
- Account for gaps — Don’t assume contiguous indices when iterating
Part Selection System
How Parts Are Chosen for Drops
When the game generates a weapon drop, it uses a multi-layered selection system:
1. Weapon Type Definition
Each weapon type (InventoryTypeDef) defines:
PartTypes |
Array of valid part type IDs for this weapon |
PrefixPartList |
Parts that can generate prefix names |
TitlePartList |
Parts that generate title names |
SuffixPartList |
Parts that generate suffix names |
Rarity |
Reference to rarity definition |
Manufacturer |
Reference to manufacturer definition |
2. Part Type Selection Rules
Parts are grouped by type and selected using PartTypeSelectionRules:
PartTypeSelectionRules:
PartCount ← Number of parts to select from this type
AdditionalPartChance ← Probability of bonus parts
parts[] ← Array of PartTypeSelectionPartRule
Each rule entry (PartTypeSelectionPartRule) specifies: - part — Reference to the part definition - bIgnoreMinGameStage — Whether to bypass level requirements
3. Game Stage (Level) Requirements
Parts can have minimum level requirements via PartTagGameStageSelectionData:
mingamestage ← Minimum player/area level
MAX ← Maximum count at this stage
Higher-level parts may only appear on drops from higher-level enemies or areas.
4. Tag-Based Selection
Parts can be filtered by gameplay tags using PartTagSelectionRules:
tags ← Required gameplay tags
MAX ← Maximum parts matching these tags
GameStageRules ← Level-based rules for tagged parts
5. Rarity-Based Priority
Parts have a SelectionPriority (via InventoryAspect):
| Default |
Common parts |
| Low |
Slightly better parts |
| Medium |
Uncommon parts |
| High |
Rare parts |
| Ultra |
Very rare parts |
| Legendary |
Legendary-only parts |
Higher rarity drops can access higher-priority parts.
6. Random/Weighted Selection
For part variants, GbxActorPartDef_Random provides weighted selection:
RandomParts[] ← Parts with associated weights
bCanChooseNone ← Whether "no part" is valid
WeightForNone ← Weight for selecting nothing
Item Pool Preferences
Item pools (ItemPoolDef) can bias part selection via ItemPoolPreferredPartsDef:
PreferredPartsList[] ← Parts that should be prioritized
This allows specific drop sources (bosses, quests, etc.) to favor certain parts.
Practical Example: Weapon Generation Flow
1. Determine weapon type (Pistol, SMG, etc.)
↓
2. Load InventoryTypeDef for that type + manufacturer
↓
3. For each PartType in PartTypes[]:
a. Get PartTypeSelectionRules
b. Filter by mingamestage (player level)
c. Filter by tags if applicable
d. Apply rarity-based priority filtering
e. Select parts using weights
↓
4. Apply ItemPool preferences if applicable
↓
5. Assemble final part list → Encode to serial
Part Slot Types
From EWeaponPartValue enum:
| Grip |
Weapon grip |
| Foregrip |
Front grip |
| Reload |
Reload mechanism |
| Barrel |
Main barrel |
| Scope |
Optics/scope |
| Melee |
Melee attachment |
| Mode |
Fire mode |
| ModeSwitch |
Mode switch mechanism |
| Underbarrel |
Under-barrel attachment |
| Custom0-7 |
Additional custom slots |
Weapon Naming System
Parts affect weapon prefix names through the naming table system.
Primary Indices
| 2 |
Damage |
Tortuous, Agonizing, Festering |
| 3 |
CritDamage |
Bleeding, Hemorrhaging, Pooling |
| 4 |
ReloadSpeed |
Frenetic, Manic, Rotten |
| 5 |
MagSize |
Bloated, Gluttonous, Hoarding |
| 7 |
body_mod_a |
Chosen, Promised, Tainted |
| 8 |
body_mod_b |
Bestowed, Cursed, Offered |
| 9 |
body_mod_c |
Ritualized, Summoned |
| 10 |
body_mod_d |
Strange |
| 15-18 |
barrel_mod |
Herald, Harbinger, Oracle, Prophecy |
Naming Indices (from WeaponNamingStruct)
| Damage |
2 |
9DFA8E9A4AF1B3A1… |
| CritDamage |
9 |
C4432C8C40CA15F0… |
| FireRate |
10 |
459C49044DE26DE5… |
| ReloadSpeed |
11 |
61FAACA14D48B609… |
| MagSize |
12 |
C735EA434D50CD82… |
| Accuracy |
13 |
5B35CC194CB71AE4… |
| ElementalPower |
14 |
842A58234E5D5D79… |
| ADSProficiency |
16 |
02D519604FE47BA5… |
| Single |
18 |
240AB1EB411BED6B… |
| DamageRadius |
21 |
EE89495D493F3450… |
Known Legendaries
By Manufacturer
| DAD_AR.comp_05_legendary_OM |
OM |
AR |
Daedalus |
| DAD_SG.comp_05_legendary_HeartGUn |
Heart Gun |
SG |
Daedalus |
| JAK_AR.comp_05_legendary_rowan |
Rowan’s Call |
AR |
Jakobs |
| JAK_PS.comp_05_legendary_kingsgambit |
King’s Gambit |
PS |
Jakobs |
| JAK_PS.comp_05_legendary_phantom_flame |
Phantom Flame |
PS |
Jakobs |
| JAK_SR.comp_05_legendary_ballista |
Ballista |
SR |
Jakobs |
| MAL_HW.comp_05_legendary_GammaVoid |
Gamma Void |
HW |
Maliwan |
| MAL_SM.comp_05_legendary_OhmIGot |
Ohm I Got |
SM |
Maliwan |
| TED_AR.comp_05_legendary_Chuck |
Chuck |
AR |
Tediore |
| TED_PS.comp_05_legendary_Sideshow |
Sideshow |
PS |
Tediore |
| TOR_HW.comp_05_legendary_ravenfire |
Ravenfire |
HW |
Torgue |
| TOR_SG.comp_05_legendary_Linebacker |
Linebacker |
SG |
Torgue |
| VLA_AR.comp_05_legendary_WomboCombo |
Wombo Combo |
AR |
Vladof |
| VLA_HW.comp_05_legendary_AtlingGun |
Atling Gun |
HW |
Vladof |
| VLA_SM.comp_05_legendary_KaoSon |
Kaoson |
SM |
Vladof |
Rarity System
| comp_01 |
Common |
White |
| comp_02 |
Uncommon |
Green |
| comp_03 |
Rare |
Blue |
| comp_04 |
Epic |
Purple |
| comp_05 |
Legendary |
Orange |
Part Count by Category
Data extracted from memory dump using bl4 memory dump-parts and bl4 memory build-parts-db.
Weapons
| 2 |
Daedalus |
Pistol |
74 |
| 3 |
Jakobs |
Pistol |
73 |
| 4 |
Tediore |
Pistol |
81 |
| 5 |
Torgue |
Pistol |
70 |
| 6 |
Order |
Pistol |
75 |
| 8 |
Daedalus |
Shotgun |
74 |
| 9 |
Jakobs |
Shotgun |
89 |
| 10 |
Tediore |
Shotgun |
76 |
| 11 |
Torgue |
Shotgun |
69 |
| 12 |
Bor |
Shotgun |
73 |
| 13 |
Daedalus |
Assault Rifle |
78 |
| 14 |
Jakobs |
Assault Rifle |
74 |
| 15 |
Tediore |
Assault Rifle |
79 |
| 16 |
Torgue |
Assault Rifle |
73 |
| 17 |
Vladof |
Assault Rifle |
89 |
| 18 |
Order |
Assault Rifle |
73 |
| 19 |
Maliwan |
Shotgun |
74 |
| 20 |
Daedalus |
SMG |
77 |
| 21 |
Bor |
SMG |
73 |
| 22 |
Vladof |
SMG |
84 |
| 23 |
Maliwan |
SMG |
74 |
| 25 |
Bor |
Sniper |
71 |
| 26 |
Jakobs |
Sniper |
72 |
| 27 |
Vladof |
Sniper |
82 |
| 28 |
Order |
Sniper |
75 |
| 29 |
Maliwan |
Sniper |
76 |
| 244 |
Vladof |
Heavy |
22 |
| 245 |
Torgue |
Heavy |
32 |
| 246 |
Bor |
Heavy |
25 |
| 247 |
Maliwan |
Heavy |
19 |
Class Mods
| 44 |
Dark Siren |
0 (not in dump) |
| 55 |
Paladin |
0 (not in dump) |
| 97 |
Gravitar |
2 |
| 140 |
Exo Soldier |
0 (not in dump) |
Firmware
| 151 |
Firmware |
0 (parts under gadget prefixes) |
Note: Firmware parts exist under grenade_gadget.part_firmware_*, heavy_weapon_gadget.part_firmware_*, and repair_kit.part_firmware_* prefixes.
Shields
| 279 |
Energy Shield |
22 |
| 280 |
Bor Shield |
4 |
| 281 |
Daedalus Shield |
3 |
| 282 |
Jakobs Shield |
3 |
| 283 |
Armor Shield |
26 |
| 284 |
Maliwan Shield |
9 |
| 285 |
Order Shield |
3 |
| 286 |
Tediore Shield |
3 |
| 287 |
Torgue Shield |
3 |
| 288 |
Vladof Shield |
3 |
| 289 |
Shield Variant |
Unknown |
Gadgets and Gear
| 300 |
Grenade Gadget |
82 |
| 310 |
Turret Gadget |
52 |
| 320 |
Repair Kit |
107 |
| 330 |
Terminal Gadget |
61 |
Enhancements
| 400 |
Daedalus |
1 |
| 401 |
Bor |
1 |
| 402 |
Jakobs |
4 |
| 403 |
Maliwan |
4 |
| 404 |
Order |
4 |
| 405 |
Tediore |
4 |
| 406 |
Torgue |
4 |
| 407 |
Vladof |
4 |
| 408 |
COV |
1 |
| 409 |
Atlas |
1 |
Summary
| Weapons (all types) |
1,928 |
| Class Mods |
2 |
| Shields |
79 |
| Gadgets |
302 |
| Enhancements |
28 |
| Unmapped |
276 |
| Total |
2,615 |
Variant Suffixes
| Mask |
Texture mask asset |
| ADSMask |
Aim-down-sights mask |
| Proje/Projes |
Projectile-related |
| ModA/ModB |
Alternative model |
| Elements |
Elemental effects |
| VFX |
Visual effects |
| BASE |
Base variant |
| _a, _b, _c, _d |
Stat variants |
| _01, _02, _03 |
Numbered variants |
Data Files
The complete parts database is available at:
share/manifest/parts_dump.json - Raw part names grouped by prefix
share/manifest/parts_database.json - Full database with category/index mappings
Use bl4 memory dump-parts and bl4 memory build-parts-db to regenerate from a fresh memory dump.
Extracted from BL4 November 2025 patch memory dump using bl4 memory analysis tools.
Last updated: December 2025 - Added MAL_SG (cat 19), bor_sr (cat 25), class mods (44, 55, 97, 140), firmware (151), shield variant (289).