10  Appendix B: Weapon Parts Reference

This appendix catalogs all known weapon parts extracted from BL4 game files, organized by manufacturer and weapon type.


10.1 Part Naming Convention

Parts follow this pattern:

{MFG}_{TYPE}_{Part}_{Variant}_L{Level}_{SubVariant}
Component Description Examples
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

10.2 Manufacturers

Code Name Serial ID Weapon Types
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.


10.3 Weapon Types

10.3.1 Type Codes

Code Type Description
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

10.3.2 EWeaponType Enum

Internal weapon type enumeration (from usmap):

Value Type
0 None
1 Pistol
2 SMG
3 Shotgun
4 AssaultRifle
5 Sniper
6 Heavy
7 Count

10.4 Scope Parts by Manufacturer

10.4.1 BOR (Borg)

Heavy Weapons:

Part Variants
BOR_HW_Scope_Barrel_01 Base
BOR_HW_Scope_Barrel_02 Base

Shotguns:

Part Variants
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:

Part Variants
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:

Part Variants
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

10.4.2 DAD (Daedalus)

Assault Rifles:

Part Variants
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:

Part Variants
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:

Part Variants
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:

Part Variants
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)

10.4.3 JAK (Jakobs)

Assault Rifles:

Part Variants
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:

Part Variants
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:

Part Variants
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:

Part Variants
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

10.4.4 MAL (Maliwan)

Heavy Weapons:

Part Variants
MAL_HW_Scope_01 01-07, Proje
MAL_HW_Scope_02 01-02, Proje, Shield

Shotguns:

Part Variants
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:

Part Variants
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:

Part Variants
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

10.4.5 ORD (Order)

Assault Rifles:

Part Variants
ORD_AR_Scope_01_L1 01, 002
ORD_AR_Scope_01_L2 01
ORD_AR_Scope_02_L2 Mask

Pistols:

Part Variants
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:

Part Variants
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

10.4.6 TED (Tediore)

Assault Rifles:

Part Variants
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:

Part Variants
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:

Part Variants
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

10.4.7 TOR (Torgue)

Assault Rifles:

Part Variants
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:

Part Variants
TOR_HW_Scope_01 01-02
TOR_HW_Scope_02 01
TOR_HW_Barrel_01 Mask
TOR_HW_Barrel_02 Mask, Splitter

Pistols:

Part Variants
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:

Part Variants
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

10.4.8 VLA (Vladof)

Assault Rifles:

Part Variants
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:

Part Variants
VLA_HW_Scope_01 01-04
VLA_HW_Scope_02 01-05, ADSMask
VLA_HW_Barrel_02 Mask

SMGs:

Part Variants
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:

Part Variants
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

10.5 Barrel Parts

10.5.1 Heavy Weapons

Manufacturer Part Notes
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

10.6 Part Index Organization

10.6.1 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

10.6.2 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.

10.6.3 Registration Order Pattern

Parts appear to be registered in groups by functional type:

Order Part Type Example
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

10.6.4 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

10.6.5 Implications for Modding

When working with item serials:

  1. Never assume alphabetical order — Part part_barrel_01 might have index 7, not index 0
  2. Use runtime-extracted data — Only memory dumps capture the true GbxSerialNumberIndex values
  3. Validate against known items — Decode existing item serials to verify index mappings
  4. Account for gaps — Don’t assume contiguous indices when iterating

10.7 Part Selection System

10.7.1 How Parts Are Chosen for Drops

When the game generates a weapon drop, it uses a multi-layered selection system:

10.7.1.1 1. Weapon Type Definition

Each weapon type (InventoryTypeDef) defines:

Property Purpose
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

10.7.1.2 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

10.7.1.3 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.

10.7.1.4 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

10.7.1.5 5. Rarity-Based Priority

Parts have a SelectionPriority (via InventoryAspect):

Priority Typical Usage
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.

10.7.1.6 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

10.7.2 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.

10.7.3 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

10.8 Part Slot Types

From EWeaponPartValue enum:

Slot Description
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

10.9 Weapon Naming System

Parts affect weapon prefix names through the naming table system.

10.9.1 Primary Indices

Index Stat Type Example Prefixes
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

10.9.2 Naming Indices (from WeaponNamingStruct)

Field Index GUID
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…

10.10 Known Legendaries

10.10.1 By Manufacturer

Internal Name Display Name Type 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

10.11 Rarity System

Code Tier Color
comp_01 Common White
comp_02 Uncommon Green
comp_03 Rare Blue
comp_04 Epic Purple
comp_05 Legendary Orange

10.11.1 Internal Format

{MFG}_{TYPE}.comp_0{N}_{rarity}_{name}

Examples: - TOR_SG.comp_05_legendary_Linebacker - VLA_SM.comp_05_legendary_KaoSon


10.12 Part Count by Category

Data extracted from memory dump using bl4 memory dump-parts and bl4 memory build-parts-db.

10.12.1 Weapons

Category ID Manufacturer Weapon Type Parts Count
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

10.12.2 Class Mods

Category ID Player Class Parts Count
44 Dark Siren 0 (not in dump)
55 Paladin 0 (not in dump)
97 Gravitar 2
140 Exo Soldier 0 (not in dump)

10.12.3 Firmware

Category ID Type Parts Count
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.

10.12.4 Shields

Category ID Type Parts Count
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

10.12.5 Gadgets and Gear

Category ID Type Parts Count
300 Grenade Gadget 82
310 Turret Gadget 52
320 Repair Kit 107
330 Terminal Gadget 61

10.12.6 Enhancements

Category ID Manufacturer Parts Count
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

10.12.7 Summary

Category Total Parts
Weapons (all types) 1,928
Class Mods 2
Shields 79
Gadgets 302
Enhancements 28
Unmapped 276
Total 2,615

10.13 Variant Suffixes

Suffix Meaning
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

10.14 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).