Wardogs: Buildables
Source: Wardogs/Plugins/GameFeatures/Items/Buildables (206 files), the buildable cash tables under Content/GameMechanics/Gamemode/Data/CashRewardsDataTable and the reward plugin BuildableRewards. Every table below is generated by _tools/buildable_tables.py; do not edit it by hand.
This page is the per-structure inventory: what exists, what it costs, how tough it is, where it can be placed and what it pays. The Items page, section 6 holds the hammer lists, the bounding boxes and the older damage matrix; this page adds the rest.
Labels: Data is read straight from the export. Native is read from the game code. Derived is worked out from Data or Native values. “Not traced” means nobody has followed it yet.
- Files under the Buildables plugin: 206.
- Buildable data assets: 32 (31
WDBuildableDataAsset, 1WDBuildableHotZoneMagnetDataAsset). - Build-stage definitions: 31.
- Rows in the entity name table: 36; in the vendor table: 8; in the damage table: 20.
- Hammer lists: Small 7, Medium 12, Large 19.
1. How a buildable is put together
A player builds with a hammer (Small, Medium or Large). The hammer’s table says which buildables it can place. Placing makes a schematic (a see-through ghost). Building then moves it through stages until it is finished. Hammers need Build Supplies to work (Data: the item descriptions in section 7).
| Piece | What it is | Where |
|---|---|---|
WDBuildableDataAsset | The main definition: tag, supply cost, health, placement rules, damage row, sounds, wheel slot | one DA_Buildable_* per structure or part |
WDActorBuildSpawner | A small sub-object inside each definition. It names the actor class that is created (B_Buildable_C for most structures) | 32 of them, one per definition |
BuildingStagesDefinition | The build stages: a progress threshold, the meshes shown and the weak spots (critical-hit spots) per stage | one *_Stages per definition |
| Radial wheel slot | The icon and title in the build wheel | DA_RadialWheelSlotType_* |
| Damage row | What each damage type does to the structure | DT_GlobalDamage_BuildableData |
Data. The special spawner classes are: B_Buildable_BarbedWire_C, B_Buildable_CamoNetTent_C, B_Buildable_Radio_C, B_Buildable_BremmerWall_C, B_Buildable_HBlock_QuadWall_C, B_BuildableRefuelStation_C, B_BuildableRepairStation_C, B_Buildable_HotzoneMagnet_C, B_Buildable_CrowsNestActorReplacing_C and B_Buildable_Door_ActorReplacing_C. The Forward Operating Base picks a class by faction (section 8).
Data. The feature root Buildables adds a pawn component (WDPawnBuildableManager) to the player character and a vehicle component (WDVehicleBuildableComponent) to stationary vehicles. It also registers the vendor table, the radial wheel registry and the build tool HUD widget (W_BuildTool).
2. Inventory
One row per definition (32 rows). Parts of a bigger structure (floor, roof, gate halves) are separate definitions and cannot be picked from the wheel alone.
- Supply cost is the
Costfield (Data). The game code has three cost getters on the asset:GetPlacementCost,GetTotalBuildCostandGetTotalSupplyCost(Native, reflection thunks at RVA0x8593E80,0x8593FB0,0x85940E0). The first two read a float scale from the player’s object. HowCostbecomes Build Supplies spent, and whether it is taken at placement or while building, is not traced. - Name is
DisplayName, or the row inDT_EntityData_UI_Buildableswhen that is empty.(blank in export)means the text key exists but its source string is empty in the export (WoodBase, Shelter and the Recon Tower parts). The UI name table gives the same name to HBlock, TallHBlock and HBlockQuadWall (“HBlock”), while the asset names are Hesco Block (Small), Hesco Block (Large) and Hesco Wall. - Repair multiplier is
RepairSpeedMultiplier.-means the field is not set. Meaning of the number beyond “bigger repairs faster” is not traced. - Hammers: S, M, L = Small, Medium, Large (Data, the three
DT_Buildables_*Hammertables). Parts are placed together with their parent.
| Asset | Tag | Name (UI text) | Supply cost | Max health | Repair multiplier | Stages | Hammers | Part of | |—|—|—|—|—|—|—|—|—| | DA_Buildable_AirRaidShelter | Id.Buildable.AirRaidShelter | Indirect Fire Shelter | 200 | 5,000 | 6.67 | 5 | L | - | | DA_Buildable_AirRaidShelter_Ceiling | Id.Buildable.AirRaidShelter.Ceiling | Indirect Fire Shelter | 10 | 2,250 | 0.67 | 1 | with AirRaidShelter | AirRaidShelter | | DA_Buildable_AirRaidShelter_Floor | Id.Buildable.AirRaidShelter.Floor | Indirect Fire Shelter | 10 | 2,250 | 0.67 | 1 | with AirRaidShelter | AirRaidShelter | | DA_Buildable_BarbedWire | Id.Buildable.BarbedWire | Barbed Wire | 7 | 250 | 0.47 | 5 | SML | - | | DA_Buildable_Door | Id.Buildable.Door | Door | 80 | 2,200 | 2 | 5 | ML | - | | DA_Buildable_Door_DoorOnly | Id.Buildable.Door | Door | 22 | 500 | 1.47 | 1 | with Door | Door | | DA_Buildable_Door_TopSegment | Id.Buildable.Door.TopSegment | Door | 22 | 500 | 1.47 | 1 | with Door | Door | | DA_Buildable_BremmerWall | Id.Buildable.BremmerWall | Bremer Wall | 32 | 6,500 | 1.47 | 5 | L | - | | DA_Buildable_Bunker | Id.Buildable.Bunker | Bunker | 200 | 5,000 | 6.67 | 5 | L | - | | DA_Buildable_Bunker_Floor | Id.Buildable.Bunker.Floor | Bunker | 10 | 2,250 | 0.67 | 1 | with Bunker | Bunker | | DA_Buildable_Bunker_Roof | Id.Buildable.Bunker.Roof | Bunker | 10 | 2,250 | 0.67 | 1 | with Bunker | Bunker | | DA_Buildable_CamoNetTent | Id.Buildable.CamoNetTent | Recon Tent | 7 | 300 | 0.47 | 5 | SML | - | | DA_Buildable_CrowsNest | Id.Buildable.CrowsNest | Recon Tower | 200 | 5,000 | 6.67 | 5 | L | - | | DA_Buildable_CrowsNest_BaseFloor | Id.Buildable.CrowsNest.BaseFloor | (blank in export) | 10 | 2,250 | 0.67 | 1 | with CrowsNest | CrowsNest | | DA_Buildable_CrowsNest_FirstFloor | Id.Buildable.CrowsNest.FirstFloor | (blank in export) | 10 | 2,250 | 0.67 | 1 | with CrowsNest | CrowsNest | | DA_Buildable_CrowsNest_Roof | Id.Buildable.CrowsNest.Roof | (blank in export) | 10 | 2,250 | 0.67 | 1 | with CrowsNest | CrowsNest | | DA_Buildable_FOB | Id.Buildable.FOB | Forward Operating Base | 30 | 15,000 | 2 | - | - | - | | DA_Buildable_HBlock | Id.Buildable.HBlock | Hesco Block (Small) | 15 | 1,600 | - | 5 | SML | - | | DA_Buildable_Gate | Id.Buildable.Gate | Gate | 200 | 5,320 | 5.67 | 5 | ML | - | | DA_Buildable_Gate_Left | Id.Buildable.Gate | Gate | 85 | 5,320 | 5.67 | 1 | with Gate | Gate | | DA_Buildable_Gate_Ramp | Id.Buildable.Gate.Ramp | Gate | 85 | 6,500 | 5.67 | 1 | with Gate | Gate | | DA_Buildable_Gate_Right | Id.Buildable.Gate | Gate | 85 | 5,320 | 5.67 | 1 | with Gate | Gate | | DA_Buildable_HBlock_QuadWall | Id.Buildable.HBlockQuadWall | Hesco Wall | 75 | 4,600 | 5 | 5 | ML | - | | DA_Buildable_HotzoneMagnet | Id.Buildable.HotzoneMagnet | Drill Rig | 2,750 | 2,500 | 150 | 5 | L | - | | DA_Buildable_Radio | Id.Buildable.Radio | Builder’s Radio | 20 | 1,000 | 1.33 | 5 | SML | - | | DA_Buildable_RefuelStation | Id.Buildable.RefuelStation | Refuel Station | 200 | 1,600 | 13.33 | 5 | L | - | | DA_Buildable_RepairStation | Id.Buildable.RepairStation | Repair Station | 200 | 1,600 | 13.33 | 5 | L | - | | DA_Buildable_Shelter | Id.Buildable.SV_Shelter | (blank in export) | 250 | 2,250 | - | 5 | ML | - | | DA_Buildable_SandbagWall | Id.Buildable.SandbagWall | Sandbag Wall | 15 | 735 | - | 5 | SML | - | | DA_Buildable_TallHBlock | Id.Buildable.TallHBlock | Hesco Block (Large) | 22 | 2,250 | 1.47 | 5 | ML | - | | DA_Buildable_TankTrap | Id.Buildable.TankTrap | Hedgehog | 22 | 4,500 | 1.47 | 5 | SML | - | | DA_Buildable_WoodBase | Id.Buildable.WoodBase | (blank in export) | 15 | 735 | - | 5 | SML | - |
Things the inventory shows (Derived from the table):
- Small items cost 7 to 32 supplies, the Radio 20, the Hesco Wall 75 and the Door 80. The Gate, Bunker, Recon Tower, Indirect Fire Shelter and the Refuel and Repair stations cost 200, the Shelter 250 and the Drill Rig 2,750.
- Only the Large Hammer can place the Bunker, Recon Tower, Indirect Fire Shelter, Bremer Wall, Refuel Station, Repair Station and Drill Rig.
- The Forward Operating Base has no hammer entry. It comes from its own item (section 8).
- Entity tags also exist for the Mortar, Loudspeaker, Talon 9K-SAM, Vanguard CIWS, Stingray and MG Nest. Their definitions are in the
Vehicles/STN_*plugins (section 6, “Stationary weapons”).
3. Build stages
Stages are progress thresholds from 0 to 1. A stage becomes visible when the build progress reaches its RequiredBuildingProgress. The export carries no build time per stage; build speed comes from the hammer (“Fast”, “Moderate”, “Slow” in the item text) and the construct action DA_Action_Buildable_Construct. The per-hit build amount and the swing animation times of each hammer are in the table below (Data, round 17 evidence). Supplies spent per stage are not in the stage files.
Hammer swing and build amount (buildable_tables hammer_speed). Build amount per hit is WDItemExtensionData_BuildTool.BuildAmount on the hammer item; the critical-spot amount is BuildAmountWhenTargetIsHit (Data). The swing times are the first-person use montage: the swing loops between the LoopStart and LoopEnd sections while the button is held and the Hit notify marks the blow (Data (Blueprint CDO)).
| Hammer | Shop text | Build amount per hit | Critical-spot hit amount | Use montage | Montage (s) | Hit notify (s) | Swing loop (s) | Dismantle per hit | |—|—|—:|—:|—|—:|—:|—:|—:| | Large (ID_LargeHammer) | Fast Build Speed | 1.5 | 8 | AM_FP_Large_Hammer_Use | 1.43 | 0.45 | 0.883 | 250 | | Medium (ID_MediumHammer) | Moderate Build Speed | 1 | 5 | AM_FP_BuildTool_Use | 1.67 | 0.25 | 0.567 | 200 | | Small (ID_SmallHammer) | Slow Build Speed | 0.5 | 3 | AM_FP_Small_Hammer_Use | 1.27 | 0.24 | 0.567 | 150 |
Derived, if the loop section is the swing period and one BuildAmount is added per hit: Large 1.5 per 0.88 s (about 1.7 per second), Medium 1.0 per 0.57 s (about 1.76 per second), Small 0.5 per 0.57 s (about 0.88 per second). That puts Large and Medium about equal, although the shop text calls the Large hammer fast and the Medium hammer moderate; so the hit rate is probably not the loop length (not native, not resolved). The scale of BuildAmount against the 0 to 1 stage progress is known since round 38 (Native, section 13): a hit adds BuildAmount / Cost of the structure’s progress, and the hammer path does use the BuildAmount field of UWDItemExtensionData_BuildBuildable (the hammer class derives from it; 3.0 is only the default for unset assets). The large hammer also carries DismantleRatePerSecond 250, medium 200, small 150 (equal to the per-hit values).
- Most structures use 0, 0.25, 0.5, 0.75, 1. The Door uses 0, 0.3, 0.6, 0.8, 1 and the WoodBase uses 0, 0.2, 0.45, 0.7, 1.
- Parts (floors, roofs, gate halves, door halves) have one stage at 1, so they appear complete.
- The last stage has no weak spots (critical-hit spots) in every multi-stage definition. Earlier stages carry them, so a half-built structure has marked weak spots. They are a hammer build bonus, not a damage multiplier (section 14.3); Barbed Wire and the Recon Tent have the spots in their stage files but turn the feature off (
bUsesCriticalHitSpotsfalse). bOverridesFinalStageis set on 6 definitions: Indirect Fire Shelter, Door, Bunker, Recon Tower, Gate and Hesco Wall (Data). What it changes: the finished structure is assembled from separate sub-buildable actors that the last stage lists (floors, roofs, walls, door leaf, gate halves) instead of one mesh (section 14.1). All six use...ActorReplacingor composite spawner classes.- The Forward Operating Base has no stage file; it is
bInstantFinish(Data).
| Stage definition | Stages | Progress thresholds | Meshes per stage | Critical-hit spots per stage | |—|—|—|—|—| | DA_Buildable_AirRaidShelter_Ceiling_Stages | 1 | 1 | 1 | 0 | | DA_Buildable_AirRaidShelter_Floor_Stages | 1 | 1 | 1 | 0 | | DA_Buildable_AirRaidShelter_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 3, 3, 6, 8, 4 | 26, 40, 72, 86, 0 | | DA_Buildable_BarbedWire_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 1, 1, 1, 1, 1 | 10, 11, 11, 11, 0 | | DA_Buildable_BremmerWall_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 1, 1, 1, 1, 1 | 15, 20, 15, 19, 0 | | DA_Buildable_Bunker_Floor_Stages | 1 | 1 | 1 | 0 | | DA_Buildable_Bunker_Roof_Stages | 1 | 1 | 1 | 0 | | DA_Buildable_Bunker_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 3, 4, 4, 6, 5 | 29, 39, 60, 99, 0 | | DA_Buildable_CamoNetTent_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 1, 1, 1, 1, 1 | 5, 0, 6, 29, 0 | | DA_Buildable_CrowsNest_BaseFloor_Stages | 1 | 1 | 1 | 0 | | DA_Buildable_CrowsNest_FirstFloor_Stages | 1 | 1 | 1 | 0 | | DA_Buildable_CrowsNest_Roof_Stages | 1 | 1 | 1 | 0 | | DA_Buildable_CrowsNest_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 6, 5, 6, 9, 6 | 27, 47, 41, 41, 0 | | DA_Buildable_Door_DoorOnly_Stages | 1 | 1 | 1 | 0 | | DA_Buildable_Door_Stages | 5 | 0, 0.3, 0.6, 0.8, 1 | 3, 4, 4, 3, 3 | 12, 11, 15, 11, 0 | | DA_Buildable_Door_TopSegment_Stages | 1 | 1 | 1 | 0 | | DA_Buildable_Gate_Left_Stages | 1 | 1 | 0 | 0 | | DA_Buildable_Gate_Ramp_Stages | 1 | 1 | 1 | 0 | | DA_Buildable_Gate_Right_Stages | 1 | 1 | 0 | 0 | | DA_Buildable_Gate_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 3, 3, 4, 3, 4 | 21, 19, 39, 40, 0 | | DA_Buildable_HBlock_QuadWall_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 1, 1, 1, 1, 1 | 8, 31, 34, 69, 0 | | DA_Buildable_HBlock_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 1, 1, 1, 1, 1 | 5, 16, 16, 16, 0 | | DA_Buildable_HotzoneMagnet_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 8, 9, 9, 14, 20 | 70, 79, 98, 95, 0 | | DA_Buildable_Radio_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 4, 8, 10, 11, 11 | 8, 9, 9, 9, 0 | | DA_Buildable_RefuelStation_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 1, 2, 3, 4, 5 | 15, 14, 27, 14, 0 | | DA_Buildable_RepairStation_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 1, 2, 3, 6, 12 | 16, 16, 16, 15, 0 | | DA_Buildable_SandbagWall_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 1, 1, 1, 1, 1 | 14, 12, 10, 8, 0 | | DA_Buildable_Shelter_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 1, 1, 3, 5, 1 | 24, 24, 24, 24, 0 | | DA_Buildable_TallHblock_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 1, 1, 1, 1, 1 | 6, 24, 24, 32, 0 | | DA_Buildable_TankTrap_Stages | 5 | 0, 0.25, 0.5, 0.75, 1 | 1, 1, 1, 1, 1 | 3, 5, 6, 7, 0 | | DA_WoodBase_Stages | 5 | 0, 0.2, 0.45, 0.7, 1 | 4, 4, 3, 3, 1 | 16, 14, 47, 56, 0 |
Parts that carry one inline stage in the asset itself (no separate stage file):
| Asset | Stages | Progress | |—|—|—| | DA_Buildable_AirRaidShelter_Ceiling | 1 | 1 | | DA_Buildable_Bunker_Roof | 1 | 1 | | DA_Buildable_CrowsNest_FirstFloor | 1 | 1 | | DA_Buildable_CrowsNest_Roof | 1 | 1 |
4. Health and damage rules
MaxHealth is set per definition. The DamageEntityData tag points at one row of DT_GlobalDamage_BuildableData. There are 20 rows. Every definition points at one, and every row is used.
How to read a percentage (Native, damage pipeline section 6): the operation is Percentage_Ongoing, so each matching entry changes the running damage C by Amount * 0.01 * C. -80% means 20% of the damage is left. +1400% means 15 times the damage. Which entries are selected, and in what order, is in the same pipeline page (rule tables, entry selection and ordering). This confirms the sign reading that the Items page marked as inferred.
The table shows the entries that match one source tag alone (no instigator, target or hit-location requirement). Other entries exist (armor-piercing and hollow-point bullets, many rocket and cannon calibers, throwables) and are in the Items page section 6.3 and the data file. - means that source has no single-tag entry in that row.
| Asset | Max health | Damage row | Entries | Melee | Bullet | Grenade | Rocket | C4 | IED | |—|—|—|—|—|—|—|—|—|—| | DA_Buildable_AirRaidShelter | 5,000 | Meta.Damage.Buildable.AirRaidShelter | 17 | -10% | -80% | -50% | +45% | +50% | +200% | | DA_Buildable_AirRaidShelter_Ceiling | 2,250 | Meta.Damage.Buildable.AirRaidShelter | 17 | -10% | -80% | -50% | +45% | +50% | +200% | | DA_Buildable_AirRaidShelter_Floor | 2,250 | Meta.Damage.Buildable.AirRaidShelter | 17 | -10% | -80% | -50% | +45% | +50% | +200% | | DA_Buildable_BarbedWire | 250 | Meta.Damage.Buildable.BarbedWire | 22 | -28% | -85% | +0% | +200% | +150% | +400% | | DA_Buildable_Door | 2,200 | Meta.Damage.Buildable.Door | 23 | -80% | -85% | +0% | +650% | +200% | +800% | | DA_Buildable_Door_DoorOnly | 500 | Meta.Damage.Buildable.Door | 23 | -80% | -85% | +0% | +650% | +200% | +800% | | DA_Buildable_Door_TopSegment | 500 | Meta.Damage.Buildable.Door | 23 | -80% | -85% | +0% | +650% | +200% | +800% | | DA_Buildable_BremmerWall | 6,500 | Meta.Damage.Buildable.BremmerWall | 23 | -80% | -80% | +50% | +250% | +280% | +350% | | DA_Buildable_Bunker | 5,000 | Meta.Damage.Buildable.Bunker | 17 | -10% | -80% | -50% | +45% | +50% | +200% | | DA_Buildable_Bunker_Floor | 2,250 | Meta.Damage.Buildable.Bunker | 17 | -10% | -80% | -50% | +45% | +50% | +200% | | DA_Buildable_Bunker_Roof | 2,250 | Meta.Damage.Buildable.Bunker | 17 | -10% | -80% | -50% | +45% | +50% | +200% | | DA_Buildable_CamoNetTent | 300 | Meta.Damage.Buildable.CamoTent | 22 | -28% | -85% | +0% | +200% | +150% | +500% | | DA_Buildable_CrowsNest | 5,000 | Meta.Damage.Buildable.CrowsNest | 17 | -10% | -80% | -50% | +45% | +50% | +200% | | DA_Buildable_CrowsNest_BaseFloor | 2,250 | Meta.Damage.Buildable.CrowsNest | 17 | -10% | -80% | -50% | +45% | +50% | +200% | | DA_Buildable_CrowsNest_FirstFloor | 2,250 | Meta.Damage.Buildable.CrowsNest | 17 | -10% | -80% | -50% | +45% | +50% | +200% | | DA_Buildable_CrowsNest_Roof | 2,250 | Meta.Damage.Buildable.CrowsNest | 17 | -10% | -80% | -50% | +45% | +50% | +200% | | DA_Buildable_FOB | 15,000 | Meta.Damage.Buildable.FOB | 23 | -80% | -80% | +200% | +1400% | +1250% | +5000% | | DA_Buildable_HBlock | 1,600 | Meta.Damage.Buildable.SmallHesco | 23 | -80% | -80% | +50% | +120% | +220% | +500% | | DA_Buildable_Gate | 5,320 | Meta.Damage.Buildable.HescoGate | 22 | -80% | -85% | +0% | +850% | +1000% | +2000% | | DA_Buildable_Gate_Left | 5,320 | Meta.Damage.Buildable.HescoGate | 22 | -80% | -85% | +0% | +850% | +1000% | +2000% | | DA_Buildable_Gate_Ramp | 6,500 | Meta.Damage.Buildable.HescoGate | 22 | -80% | -85% | +0% | +850% | +1000% | +2000% | | DA_Buildable_Gate_Right | 5,320 | Meta.Damage.Buildable.HescoGate | 22 | -80% | -85% | +0% | +850% | +1000% | +2000% | | DA_Buildable_HBlock_QuadWall | 4,600 | Meta.Damage.Buildable.QuadLargeHescoWall | 17 | +0% | -80% | +0% | +200% | +150% | +400% | | DA_Buildable_HotzoneMagnet | 2,500 | Meta.Damage.Buildable.BuildableHotzoneMagnet | 22 | -80% | -85% | +0% | +850% | +500% | +1500% | | DA_Buildable_Radio | 1,000 | Meta.Damage.Buildable.Radio | 22 | +70% | -85% | +500% | +1000% | +400% | +800% | | DA_Buildable_RefuelStation | 1,600 | Meta.Damage.Buildable.RefuelStation | 21 | -80% | -80% | +50% | +1500% | +600% | - | | DA_Buildable_RepairStation | 1,600 | Meta.Damage.Buildable.RepairStation | 21 | -80% | -80% | +50% | +1500% | +600% | +1000% | | DA_Buildable_Shelter | 2,250 | Meta.Damage.Buildable.SV_Shelter | 23 | -80% | -80% | +50% | +80% | +150% | +300% | | DA_Buildable_SandbagWall | 735 | Meta.Damage.Buildable.SandbagWall | 22 | -80% | -85% | +0% | +650% | +200% | +500% | | DA_Buildable_TallHBlock | 2,250 | Meta.Damage.Buildable.LargeHesco | 23 | -80% | -80% | +50% | +80% | +150% | +300% | | DA_Buildable_TankTrap | 4,500 | Meta.Damage.Buildable.TankTrap | 20 | -80% | -85% | -50% | +450% | +500% | +1000% | | DA_Buildable_WoodBase | 735 | Meta.Damage.Buildable.WoodBase | 22 | -80% | -85% | +0% | +650% | +200% | +500% |
Damage rows that no buildable asset points at: none.
Worked example (Derived): a Sandbag Wall has 735 health. A bullet entry of -85% leaves 15% of the bullet’s damage, a rocket entry of +650% makes a rocket do 7.5 times its base damage. This ignores the other entries that may also match, so it is a first estimate and not the final hit count.
Other facts:
- Shared damage tint: all definitions that set
bUseCurveToUpdateHealthVisualsuse the curveC_DamageTintCurveto tint the mesh as health drops (Data). - The Forward Operating Base has
Buildable.Damage.DoNotTakeDamageset in an unnamed field next to its health (Data). How that interacts with its damage row and its 15,000 health: no native code reads the field (round 38, section 13); the effect is unknown. - The Door and the Gate have door destruction definitions (Items page section 6.5) and breach effects (
NS_BuildableDoorBreach,NS_BuildableGateBreach). - Buildables are a ruleset in the demolition system (
BH_Demolition_RS_Buildables), see the Demolition page. Which props accept it: Demolition Assets, rulesets.
5. Placement rules
All of this is Data. Global limits live in DA_BuildablePlacementData:
| Setting | Value |
|---|---|
Max distance to the placement point (MaxPlaceTraceDistance) | 600 |
Max support height (SupportHeightLimit) | 1,500 |
| Valid / invalid ghost colour | white / red, both at alpha 64 (40FFFFFF, 40FF0000) |
| Actors ignored when a foundation is blocked | LandscapeStreamingProxy, PCGPartitionActor |
| Actors ignored when a snapped placement is blocked | LandscapeStreamingProxy, WDDroppedItem |
Per-structure rules are in the table that follows. Plain meaning:
- Placement conditions are checked before a ghost turns valid.
SafeZonePlacementConditionandWithinLadderBoundsPlacementConditionare Blueprint conditions (what they test is in section 14.4).WDWithinFobBoundsPlacementConditionmeans the spot must be inside a friendly FOB radius.WDNotInsideEnemyFobBoundsPlacementConditionforbids it inside an enemy FOB radius.WDLimitedByFOBConditionenforces the per-FOB limit.WDFobPlacementConditionis the FOB’s own rule.WDPlacementZoneConditionandWDWithinControlZonePlacementConditionlimit the Drill Rig to zones. - Small structures (Barbed Wire, Recon Tent, Sandbag Wall, Hedgehog) do not need a FOB. Every other structure except the FOB itself must be inside a FOB radius (Derived: from which conditions each definition lists).
- Max stack is the
MaxStackfield. It is the stack-height limit when a structure is placed on top of another buildable, not a placement count; a-in the table above means the field is not serialized and the native default of 2 applies (section 14.2). - FOB limit is the per-FOB count from
DA_FOB_Ruleset: Refuel Station 1, Repair Station 1, Builder’s Radio 4. PlacementFlagsis a bit set (EWDPlacementFlags): 1 AllowRotation, 2 CanBeBuiltOn, 4 CanPlaceVertically, 8 CanPlaceOnBuildables. It is serialized as 9 on 14 assets (small items, stationary weapons, Radio, stations, Drill Rig), as 1 on the FOB, and not serialized on 23 assets, where the native default 11 (1 + 2 + 8) applies (section 14.2). The earlier wording “9 for almost every structure” counted only the serialized values.- Terrain:
MaximumValidSurfaceAngleis 10 on the Gate parts;MaxDepthUnderTerrainlets a structure sink 30 to 200 into the ground;bRequiresAllCornersOnSurfaceis false andbRotateWithSurfaceis true on the small walls.
| Asset | Placement conditions | Max stack | Pivot up / side | Max under terrain | Block buffer (free / snapped) | Max surface angle | Registers with FOB | FOB limit | |—|—|—|—|—|—|—|—|—| | DA_Buildable_AirRaidShelter | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | 1 | - / - | - | - | - | - | - | | DA_Buildable_AirRaidShelter_Ceiling | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition | 1 | - / - | - | - | - | - | - | | DA_Buildable_AirRaidShelter_Floor | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition | 1 | - / - | - | - | - | - | - | | DA_Buildable_BarbedWire | SafeZonePlacementCondition, WithinLadderBoundsPlacementCondition, WDNotInsideEnemyFobBoundsPlacementCondition | 100 | - / - | - | 20 / 25 | - | - | - | | DA_Buildable_Door | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | - | - / - | - | - | - | - | - | | DA_Buildable_Door_DoorOnly | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition | - | - / - | - | - | - | - | - | | DA_Buildable_Door_TopSegment | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition | - | - / - | - | - | - | - | - | | DA_Buildable_BremmerWall | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | 1 | 75 / - | 200 | - | - | - | - | | DA_Buildable_Bunker | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | - | 75 / - | - | 30 / 30 | - | - | - | | DA_Buildable_Bunker_Floor | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition | - | - / - | - | - | - | - | - | | DA_Buildable_Bunker_Roof | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition | - | - / - | - | - | - | - | - | | DA_Buildable_CamoNetTent | SafeZonePlacementCondition, WithinLadderBoundsPlacementCondition, WDNotInsideEnemyFobBoundsPlacementCondition | 100 | - / - | - | 25 / 25 | - | - | - | | DA_Buildable_CrowsNest | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | 0 | 75 / - | - | 30 / 30 | - | - | - | | DA_Buildable_CrowsNest_BaseFloor | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition | 0 | - / - | - | - | - | - | - | | DA_Buildable_CrowsNest_FirstFloor | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition | 0 | - / - | - | - | - | - | - | | DA_Buildable_CrowsNest_Roof | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition | 0 | - / - | - | - | - | - | - | | DA_Buildable_FOB | WDFobPlacementCondition, SafeZonePlacementCondition, WithinLadderBoundsPlacementCondition | 1 | 110 / - | - | - | - | - | - | | DA_Buildable_HBlock | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | 5 | 75 / - | 30 | - | - | - | - | | DA_Buildable_Gate | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | 1 | 150 / 300 | - | - | 10 | - | - | | DA_Buildable_Gate_Left | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition | 0 | 150 / 300 | - | - | 10 | - | - | | DA_Buildable_Gate_Ramp | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition | 0 | 150 / 300 | - | - | 10 | - | - | | DA_Buildable_Gate_Right | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition | 0 | 150 / 300 | - | - | 10 | - | - | | DA_Buildable_HBlock_QuadWall | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | - | 150 / 50 | 45 | - | - | - | - | | DA_Buildable_HotzoneMagnet | WDWithinFobBoundsPlacementCondition, WDPlacementZoneCondition, WDWithinControlZonePlacementCondition | 0 | 75 / - | - | - | - | - | - | | DA_Buildable_Radio | WDWithinFobBoundsPlacementCondition, WDLimitedByFOBCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | 6 | - / - | - | - | - | yes | 4 | | DA_Buildable_RefuelStation | WDWithinFobBoundsPlacementCondition, WDLimitedByFOBCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | 100 | - / - | - | - | - | yes | 1 | | DA_Buildable_RepairStation | WDWithinFobBoundsPlacementCondition, WDLimitedByFOBCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | 100 | - / - | - | - | - | yes | 1 | | DA_Buildable_Shelter | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | 1 | -250 / - | - | - | - | - | - | | DA_Buildable_SandbagWall | SafeZonePlacementCondition, WithinLadderBoundsPlacementCondition, WDNotInsideEnemyFobBoundsPlacementCondition | 100 | - / - | - | 20 / 25 | - | - | - | | DA_Buildable_TallHBlock | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | - | 150 / 50 | 30 | - | - | - | - | | DA_Buildable_TankTrap | SafeZonePlacementCondition, WithinLadderBoundsPlacementCondition, WDNotInsideEnemyFobBoundsPlacementCondition | 100 | - / - | - | 25 / 25 | - | - | - | | DA_Buildable_WoodBase | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | 4 | 18.75 / - | 30 | - | - | - | - |
6. What each structure provides
| Structure | What the data says | Source label |
|---|---|---|
| Wall, block, trap, wire, tent | Cover and obstruction. No gameplay values beyond health and damage rules. | Data |
| Door, Gate | Closeable doors with a breach effect. A closed FOB door pays cash (section 9). | Data |
| Bunker, Recon Tower, Indirect Fire Shelter | Large multi-part structures (floor, roof, ceiling). Cash only for placing and destroying. | Data |
| Builder’s Radio | Up to 4 per FOB. Registers with the FOB (bRegisterWithFOB, counts toward the per-FOB limit). Plays music: a power toggle and seven stations (section 14.5). | Data |
| Refuel Station | Up to 1 per FOB. Registers with the FOB. A material tracker and a refuel start/stop sound exist. The Fuel Supplies item is described as “Resource Required to Refuel Vehicles. Requires FOB Radius to Use”. The refuel rate is not traced. | Data |
| Repair Station | Same shape as the Refuel Station, with Mechanical Supplies (“Resource Required to Repair Vehicles”). The repair rate is not traced. | Data |
Drill Rig (HotzoneMagnet) | Fuel-driven structure that works with a hot zone (settings below). | Data |
| Mortar, Loudspeaker, Talon 9K-SAM, Vanguard CIWS, Stingray, MG Nest | Stationary weapons. Entity names and cash rewards (Mortar only) are here; the buildable definitions are in the Vehicles/STN_* plugins (table below). | Data |
The Refuel and Repair stations also have a scene, DA_Scene_FobRefuelRepair, that lists the vehicle health parts shown per tracked vehicle variant (Data).
The Drill Rig has its own settings asset (WDBuildableHotZoneMagnetDataAsset), with one interaction to activate it and one to add fuel (Interaction.Context.Buildables.HotZoneMagnet.Activate and .Fuel). Data:
| Setting (DA_Buildable_HotzoneMagnet) | Value | |—|—| | InitialDelayDuration | 15 | | HotZoneMagnetRechargeDuration | 900 | | HotZoneMagnetMinimumFuel | 2,000 | | HotZoneMagnetDurationPerFuel | 0.03 | | MaxFuel | 10,000 | | FuelSuppliesResourceItemTag | Id.Item.FuelSupplies |
Plain reading (Derived, units are not stated in the export): after placing there is a 15 second start delay, the rig needs at least 2,000 fuel to run, each fuel unit buys 0.03 of run time (probably seconds), it holds at most 10,000 fuel and it recharges for 900 (probably seconds). What the “magnet” does to the hot zone, and the units, are in section 14.6.
Stationary weapons (Vehicles/STN_*)
Six vehicle plugins (STN_01 to STN_06) each ship a WDBuildableDataTableRow table with one row: a buildable tag and the WDBuildableDataAsset it uses. The plugin’s GameFeatureAction_DataRegistrySource adds that table to a hammer registry (Buildables_LargeHammer; STN_04 also to Buildables_MediumHammer), so the stationary weapon joins the hammer list at run time. The hammer tables inside this plugin do not list them (the Small, Medium and Large counts above are the plugin’s own rows). Each data asset has a WDVehicleBuildSpawner that names the vehicle variant spawned (base actor B_Buildable_StationaryVehicle_C), a build-stage definition, and the same three placement conditions (WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition). Data: Vehicles/STN_*/Content/{STN_nn.json, BuildableData, Data}. The vehicle variants, their weapons, seats and damage rows are in Vehicles, Vehicle Handling and Vehicle Damage Pipeline.
| Plugin | Table | Added to registries | Row tag | Data asset | Name | Cost | Max health | Repair multiplier | Max stack | Stages | Vehicle tag | Placement conditions | |—|—|—|—|—|—|—|—|—|—|—|—|—| | STN_01 | DT_STN_01_Buildable_Data | Buildables_LargeHammer | Id.Buildable.MistralAA | DA_Buildable_MistralAA | Talon 9K-SAM | 650 | 3,000 | 66.67 | 6 | 5 | Vehicle.Variant.Stationary.MistralAA | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | | STN_02 | DT_STN_02_Buildable_Data | Buildables_LargeHammer | Id.Buildable.Phalanx | DA_Buildable_STN_02 | Vanguard CIWS | 1,200 | 5,000 | 100 | 6 | 5 | Vehicle.Variant.Stationary.Phalanx | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | | STN_03 | DT_STN_03_Buildable_Data | Buildables_LargeHammer | Id.Buildable.Mortar | DA_Buildable_STN_03 | L81 Mortar | 600 | 3,000 | 10 | 6 | 4 | Vehicle.Variant.Stationary.Mortar | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | | STN_04 | DT_Buildables_STN_04 | Buildables_MediumHammer, Buildables_LargeHammer | Id.Buildable.Loudspeaker | DA_Buildable_STN_04 | Loudspeaker | 200 | 1,000 | 6.67 | - | 5 | Vehicle.Variant.Stationary.Loudspeaker | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | | STN_05 | DT_STN_05_Buildable_Data | Buildables_LargeHammer | Id.Buildable.STN_05 | DA_Buildable_STN_05 | Stingray | 650 | 3,000 | 10 | 6 | 4 | Vehicle.Variant.Stationary.STN_05 | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition | | STN_06 | DT_Buildables_STN_06 | Buildables_LargeHammer | Id.Buildable.MGNest | DA_Buildable_MGNest | MG Nest | 650 | 3,000 | - | 5 | 5 | Vehicle.Variant.Stationary.MGNest | WDWithinFobBoundsPlacementCondition, WithinLadderBoundsPlacementCondition, SafeZonePlacementCondition |
Source: WDBuildableDataTableRow tables DT_STN_01_Buildable_Data, DT_STN_02_Buildable_Data, DT_STN_03_Buildable_Data, DT_Buildables_STN_04, DT_STN_05_Buildable_Data and DT_Buildables_STN_06. What the hammer does with these rows (the native placement path) is not traced.
7. Names, descriptions and the vendor
The entity name table DT_EntityData_UI_Buildables has 36 rows. Only the items carry a description. The wall, block, door, gate, tower, shelter, radio, FOB and weapon rows set the role XP tag Attribute.Meta.XP.Role.Support; the Refuel Station, Repair Station and the three DPLY rows do not (Data). The reward calculator pays a role resource next to cash for most build events (section 9), so building likely feeds Support role XP (Derived).
| Entity tag | UI name | Description (as shown in game) | |—|—|—| | ID.Item.BuildTool.Hammer.Large | Large Hammer | - Can Build ALL Buildables / - Fast Build Speed / - Requires Build Supplies to Use | | ID.Item.BuildTool.Hammer.Medium | Medium Hammer | - Used to Build Large and Basic Buildables Only / - Moderate Build Speed / - Requires Build Supplies to Use | | ID.Item.BuildTool.Hammer.Small | Small Hammer | - Used to Build Small Buildables Only / - Slow Build Speed / - Requires Build Supplies to Use | | Id.Item.MunitionsSupplies | Ammo Supplies | - Resource Required to Reload Buildable Weapons / - Requires FOB Radius to Use | | Id.Item.FOB | Forward Operating Base | - Needed to Build Larger Structures. / - Can hold Items & Resources for Players to Use. / - Provides a Radius in Which Players Can Build. | | Id.Item.BuildToolSupply | Build Supplies | - Resource Required to Build all Buildables. / - Requires any Hammer to Build. | | Id.Item.FuelSupplies | Fuel Supplies | - Resource Required to Refuel Vehicles. / - Requires FOB Radius to Use. | | Id.Item.SparePartsSupplies | Mechanical Supplies | - Resource Required to Repair Vehicles / - Requires FOB Radius to Use. | | Id.Buildable.RefuelStation | Refuel Station | - | | Id.Buildable.RepairStation | Repair Station | - | | ID.Item.DPLY_001 | Drill Rig | - | | ID.Item.DPLY_002 | blank in export | - | | ID.Item.DPLY_003 | Repair Station | - | | Id.Buildable.BarbedWire | Barbed Wire | - | | Id.Buildable.BremmerWall | Bremer Wall | - | | Id.Buildable.CamoNetTent | Recon Tent | - | | Id.Buildable.Door | Door | - | | Id.Buildable.FOB | Forward Operating Base | - | | Id.Buildable.Gate | Gate | - | | Id.Buildable.HBlock | HBlock | - | | Id.Buildable.TallHBlock | HBlock | - | | Id.Buildable.HBlockQuadWall | HBlock | - | | Id.Buildable.LoudSpeaker | Loudspeaker | - | | Id.Buildable.MistralAA | Talon 9K-SAM | - | | Id.Buildable.Mortar | L81 Mortar | - | | Id.Buildable.Phalanx | Vanguard CIWS | - | | Id.Buildable.Radio | Builder’s Radio | - | | Id.Buildable.SandbagWall | Sandbag Wall | - | | Id.Buildable.TankTrap | Hedgehog | - | | Id.Buildable.Bunker.Floor | Bunker | - | | Id.Buildable.Bunker.Roof | Bunker | - | | Id.Buildable.Bunker | Bunker | - | | Id.Buildable.CrowsNest | Recon Tower | - | | Id.Buildable.AirRaidShelter.Ceiling | Indirect Fire Shelter | - | | Id.Buildable.AirRaidShelter.Floor | Indirect Fire Shelter | - | | Id.Buildable.AirRaidShelter | Indirect Fire Shelter | - |
The vendor table DT_VendorData_Ext_Buildables sells the tools and the supplies, not the structures. Structures are paid for with supplies when built (section 2).
| Vendor row | Variation | Price | Amount per purchase | Level to unlock | Lifetime buy limit | |—|—|—|—|—|—| | Id.Item.MunitionsSupplies | Id.Item.MunitionsSupplies | 10 | 50 | 1 | none | | Id.Item.FOB | Id.Item.FOB | 7,500 | 1 | 0 | none | | ID.Item.BuildTool.Hammer.Large | ID.Item.BuildTool.Hammer.Large | 2,400 | 1 | 0 | none | | ID.Item.BuildTool.Hammer.Medium | ID.Item.BuildTool.Hammer.Medium | 800 | 1 | 0 | none | | ID.Item.BuildTool.Hammer.Small | ID.Item.BuildTool.Hammer.Small | 100 | 1 | 0 | none | | Id.Item.BuildToolSupply | Id.Item.BuildToolSupply | 10 | 50 | 1 | none | | Id.Item.FuelSupplies | Id.Item.FuelSupplies | 10 | 50 | 1 | none | | Id.Item.SparePartsSupplies | Id.Item.SparePartsSupplies | 10 | 50 | 1 | none |
Derived: one purchase of 50 supplies costs 10, so a supply unit costs 0.2 cash at the vendor. A Sandbag Wall (15 supplies) is therefore 3 cash of supplies, a Bunker (200) is 40 cash and a Drill Rig (2,750) is 550 cash, if the Cost field is counted in Build Supplies. That last “if” is the open point from section 2.
8. The Forward Operating Base
The FOB is the anchor for most other structures. Facts (Data):
- Item description: “Needed to Build Larger Structures. Can hold Items & Resources for Players to Use. Provides a Radius in Which Players Can Build.”
- Vendor price 7,500 for one FOB item. Buildable definition: 15,000 health,
Cost30,PlacementCost0, repair multiplier 2, instant finish. - One class per faction: Alpha uses
B_Buildable_ForwardOperatingBase_Lonestar_C, Bravo..._Valkyra_C, Charlie and the default..._Manticore_C. Each has its own placement class. - Limits inside one FOB: 1 Refuel Station, 1 Repair Station, 4 Builder’s Radios.
- Two interactions (
DA_FOB_Interactions): Access (tap on keyboard, hold on gamepad, several users at once) and Hacking (hold 30 seconds, one user, success and failure sent to the server). - Sounds exist for deposits of Ammo, Build, Fuel and Mechanical supplies, pallets and supply crates, and for hack start, stop, success and fail (laptop and siren variants).
- Cash for hacking and closing a FOB door is in the Rewards page.
A spawn point is not found in this plugin, and none was found elsewhere in the client data either (section 14.8).
9. Cash and XP
Placing, building and destroying are paid through the reward system. The flat cash tables are DT_Reward_Cash_BuildableBuilt, DT_Reward_Cash_BuildablePlaced, DT_Reward_Cash_BuildablePlacedInFOB and, for destroying an enemy structure, the buildable rows of DT_Reward_Cash_DeployableDestroyed. All values are Data.
- Built is a flat 1 cash (a placeholder-sized credit), so the real payout is Placed.
- Placed pays the owner (owner modifier 1) and Placed in FOB pays 0 to the owner (owner modifier 0) with the same base. The seven structures that have no row are covered in section 14.7; how the tables are chosen is native and not read.
- A friendly modifier of -0.75 applies to placed and destroyed rows.
- Only 10 structures have a Placed value. The Sandbag Wall, Door, Recon Tower, Recon Tent and Drill Rig have a Destroyed value only. WoodBase and Shelter have no cash row in these tables.
| Buildable | Built | Placed | Placed in FOB | Destroyed (enemy build) | |—|—|—|—|—| | Id.Buildable.AirRaidShelter | 1 | 500 | 500 | 1,400 | | Id.Buildable.BarbedWire | 1 | 10 | 10 | 75 | | Id.Buildable.Bunker | 1 | 500 | 500 | 1,400 | | Id.Buildable.CamoNetTent | - | - | - | 75 | | Id.Buildable.CrowsNest | - | - | - | 1,400 | | Id.Buildable.Door | - | - | - | 100 | | Id.Buildable.FOB | 1 | 1,000 | 1,000 | 5,000 | | Id.Buildable.Gate | 1 | 300 | 300 | 500 | | Id.Buildable.HBlock | 1 | 100 | 100 | 100 | | Id.Buildable.HBlockQuadWall | 1 | 500 | 500 | 125 | | Id.Buildable.HotzoneMagnet | - | - | - | 3,000 | | Id.Buildable.Mortar | 1 | 300 | 300 | 300 | | Id.Buildable.SandbagWall | - | - | - | 100 | | Id.Buildable.TallHBlock | 1 | 200 | 200 | 100 | | Id.Buildable.TankTrap | 1 | 100 | 100 | 250 |
Friendly modifier on every row above: placed [-0.75], destroyed [-0.75]. Owner modifier: built [0.5, 1.0], placed [1.0], placed in FOB [0.0], destroyed [0.0].
Beyond these flat values, the reward plugin has a calculator with 47 rows (Data). Forty-three pay cash plus a role resource and four pay cash only. It covers: building progress, finishing a build, schematic placed, build supplies deposited and consumed, damaging and destroying (with an assist share), FOB hacked, FOB owner paid and FOB door closed. The formulas, selectors and zone multipliers are in the Rewards page and the older summary in Rewards and Progression section 7.
10. Every file in the plugin
All 206 files, grouped by folder (Data). Use this to find the file behind any name above.
| Folder | Files | What is in it | File names | |—|—|—|—| | Data/Actions | 7 | build-tool actions (construct, place, dismantle, rotate, snap, secondary use) | DA_Action_BuildTool_Dismantle, DA_Action_BuildTool_PlaceSchematic, DA_Action_BuildTool_Rotate, DA_Action_BuildTool_SecondaryUse, DA_Action_BuildTool_ToggleSnapping, DA_Action_Buildable_Construct, DA_Action_Buildable_Place | | Data/BuildTool | 8 | build tool HUD, radial wheel data, camera FOV curves, hit sound | AE_Buildtool_Hit, C_BuildTool_CameraFovCurve, C_BuildTool_CameraFovCurve_LargeHammer, C_BuildTool_CameraFovCurve_SmallHammer, DA_BuildToolRadialWheelData, DA_UI_BuildTool, DT_RadialWheelSlotType_BuildToolData, DT_RadialWheelType_BuildToolData | | Data/BuildToolSupply | 2 | Build Supplies item and its audio | DA_Item_BuildingSupply_Audio, ID_BuildToolSupply | | Data/Buildables | 2 | shared damage tint curve and global placement settings | C_DamageTintCurve, DA_BuildablePlacementData | | Data/Buildables/AirRaidShelter | 7 | buildable, stage definition, radial wheel slot and sounds | DA_Buildable_AirRaidShelter, DA_Buildable_AirRaidShelter_Ceiling, DA_Buildable_AirRaidShelter_Ceiling_Stages, DA_Buildable_AirRaidShelter_Floor, DA_Buildable_AirRaidShelter_Floor_Stages, DA_Buildable_AirRaidShelter_Stages, DA_RadialWheelSlotType_AirRaidShelter | | Data/Buildables/Audio | 6 | default buildable sound events (placed, constructed, damaged, destroyed) | AE_Buildable_Constructed, AE_Buildable_Damaged, AE_Buildable_Destroyed, AE_Buildable_Placed, AE_Buildable_SupplyCrate_Damaged, DA_Buildable_Default_Audio | | Data/Buildables/BarbedWire | 5 | buildable, stage definition, radial wheel slot and sounds | AE_Buildable_BarbedWire_Damage, DA_Buildable_BarbedWire_Audio, DA_Buildable_BarbedWire, DA_Buildable_BarbedWire_Stages, DA_RadialWheelSlotType_BarbedWire | | Data/Buildables/BarrierDoor | 8 | door buildable, its two parts, stages and destruction definition | DA_Buildable_Door, DA_Buildable_Door_DoorOnly, DA_Buildable_Door_DoorOnly_Stages, DA_Buildable_Door_Stages, DA_Buildable_Door_TopSegment, DA_Buildable_Door_TopSegment_Stages, DA_RadialWheelSlotType_Door, D_BuildableDoor | | Data/Buildables/BremmerWall | 3 | buildable, stage definition, radial wheel slot and sounds | DA_Buildable_BremmerWall, DA_Buildable_BremmerWall_Stages, DA_RadialWheelSlotType_BremmerWall | | Data/Buildables/Bunker | 7 | buildable, stage definition, radial wheel slot and sounds | DA_Buildable_Bunker, DA_Buildable_Bunker_Floor, DA_Buildable_Bunker_Floor_Stages, DA_Buildable_Bunker_Roof, DA_Buildable_Bunker_Roof_Stages, DA_Buildable_Bunker_Stages, DA_RadialWheelSlotType_Bunker | | Data/Buildables/CamoNetTent | 3 | buildable, stage definition, radial wheel slot and sounds | DA_Buildable_CamoNetTent, DA_Buildable_CamoNetTent_Stages, DA_RadialWheelSlotType_CamoNetTent | | Data/Buildables/CrowsNest | 9 | buildable, stage definition, radial wheel slot and sounds | DA_Buildable_CrowsNest, DA_Buildable_CrowsNest_BaseFloor, DA_Buildable_CrowsNest_BaseFloor_Stages, DA_Buildable_CrowsNest_FirstFloor, DA_Buildable_CrowsNest_FirstFloor_Stages, DA_Buildable_CrowsNest_Roof, DA_Buildable_CrowsNest_Roof_Stages, DA_Buildable_CrowsNest_Stages, DA_RadialWheelSlotType_CrowsNest | | Data/Buildables/FloorBoard | 1 | radial wheel slot only; no buildable asset in this export | DA_RadialWheelSlotType_FloorBoard | | Data/Buildables/ForwardOperatingBase | 25 | FOB buildable asset, ruleset, interactions, FOB sound events | DA_Buildable_FOB_Audio, AE_Build_FOB_Active, AE_Build_FOB_Damaged, AE_Build_FOB_Deposit_AmmoSupplies, AE_Build_FOB_Deposit_BuildSupplies, AE_Build_FOB_Deposit_FuelSupplies, AE_Build_FOB_Deposit_MechanicalSupplies, AE_Build_FOB_Deposit_Pallet, AE_Build_FOB_Deposit_Supply, AE_Build_FOB_Destroyed, AE_Build_FOB_DestroyedExplosion, AE_Build_FOB_Disabled, AE_Build_FOB_Hack_Laptop_Fail, AE_Build_FOB_Hack_Laptop_Start, AE_Build_FOB_Hack_Laptop_Stop, AE_Build_FOB_Hack_Laptop_Success, AE_Build_FOB_Hack_Siren_Fail, AE_Build_FOB_Hack_Siren_Start, AE_Build_FOB_Hack_Siren_Stop, AE_Build_FOB_Hack_Siren_Success, AE_Build_FOB_Repaired, AE_Build_FOB_State, DA_Buildable_FOB, DA_FOB_Interactions, DA_FOB_Ruleset | | Data/Buildables/HBlock | 3 | buildable, stage definition, radial wheel slot and sounds | DA_Buildable_HBlock, DA_Buildable_HBlock_Stages, DA_RadialWheelSlotType_HBlock | | Data/Buildables/HBlock_Gate_6x2 | 14 | gate buildable, left, right and ramp parts, stages, door destruction definitions | DA_Buildable_Gate_Audio, DA_Buildable_Gate, DA_Buildable_Gate_Left, DA_Buildable_Gate_Left_Stages, DA_Buildable_Gate_Ramp, DA_Buildable_Gate_Ramp_Stages, DA_Buildable_Gate_Right, DA_Buildable_Gate_Right_Stages, DA_Buildable_Gate_Stages, DA_RadialWheelSlotType_Gate, D_Decorator_Door_Gate_Left, D_Decorator_Door_Gate_Right, D_Door_Gate_Left, D_Door_Gate_Right | | Data/Buildables/HBlock_QuadWall | 3 | buildable, stage definition, radial wheel slot and sounds | DA_Buildable_HBlock_QuadWall, DA_Buildable_HBlock_QuadWall_Stages, DA_RadialWheelSlotType_HBlock_QuadWall | | Data/Buildables/Hotzone_Magnet | 7 | buildable, stage definition, radial wheel slot and sounds | AE_Buildable_HotzoneMagnet_Generator_Start, AE_Buildable_HotzoneMagnet_Generator_Stop, AE_Buildable_HotzoneMagnet_Ready_Start, AE_Buildable_HotzoneMagnet_Ready_Stop, DA_Buildable_HotzoneMagnet, DA_Buildable_HotzoneMagnet_Stages, DA_RadialWheelSlotType_HotzoneMagnet | | Data/Buildables/Radio | 3 | buildable, stage definition, radial wheel slot and sounds | DA_Buildable_Radio, DA_Buildable_Radio_Stages, DA_RadialWheelSlotType_Radio | | Data/Buildables/Ramp | 1 | radial wheel slot only; no buildable asset in this export | DA_RadialWheelSlotType_Ramp | | Data/Buildables/RefuelStation | 6 | buildable, stage definition, radial wheel slot and sounds | AE_Buildable_RefuelStation_Refuel_Start, AE_Buildable_RefuelStation_Refuel_Stop, DA_RefuelStation_Audio, DA_Buildable_RefuelStation, DA_Buildable_RefuelStation_Stages, DA_RadialWheelSlotType_RefuelStation | | Data/Buildables/RepairStation | 6 | buildable, stage definition, radial wheel slot and sounds | AE_Buildable_RepairStation_Repair_Start, AE_Buildable_RepairStation_Repair_Stop, DA_RepairStation_Audio, DA_Buildable_RepairStation, DA_Buildable_RepairStation_Stages, DA_RadialWheelSlotType_RepairStation | | Data/Buildables/SV_Shelter | 3 | buildable, stage definition, radial wheel slot and sounds | DA_Buildable_Shelter, DA_Buildable_Shelter_Stages, DA_RadialWheelSlotType_Shelter | | Data/Buildables/SandbagWall | 3 | buildable, stage definition, radial wheel slot and sounds | DA_Buildable_SandbagWall, DA_Buildable_SandbagWall_Stages, DA_RadialWheelSlotType_SandbagWall | | Data/Buildables/TallHBlock | 3 | buildable, stage definition, radial wheel slot and sounds | DA_Buildable_TallHBlock, DA_Buildable_TallHblock_Stages, DA_RadialWheelSlotType_TallHBlock | | Data/Buildables/TankTrap | 4 | buildable, stage definition, radial wheel slot and sounds | DA_Buildable_TankTrap_Audio, DA_Buildable_TankTrap, DA_Buildable_TankTrap_Stages, DA_RadialWheelSlotType_TankTrap | | Data/Buildables/WindowBoard | 1 | radial wheel slot only; no buildable asset in this export | DA_RadialWheelSlotType_WindowBoard | | Data/Buildables/WoodBase | 3 | buildable, stage definition, radial wheel slot and sounds | DA_Buildable_WoodBase, DA_RadialWheelSlotType_WoodBase, DA_WoodBase_Stages | | Data/ForwardOperatingBase | 7 | FOB item, animation set, placement texts, interaction and post-process data | AnimSet_FOB, DA_Item_FOB_Audio, DT_ForwardOperatingBase_PlacementDisplayTexts, DT_InteractionContextData_ForwardOperatingBase, DT_InteractionContext_ForwardOperatingBase, DT_PostProcessEffects_FOB, ID_ForwardOperatingBase | | Data/FuelSupplies | 2 | Fuel Supplies item and audio | DA_Item_FuelSupplies_Audio, ID_FuelSupplies | | Data/LargeHammer | 4 | Large Hammer item, animations, audio and its placeable list | AnimSet_BuildToolHammerLarge, DA_Item_BuildTool_LargeHammer_Audio, DT_Buildables_LargeHammer, ID_LargeHammer | | Data/MediumHammer | 4 | Medium Hammer item, animations, audio and its placeable list | AnimSet_BuildToolHammerMedium, DA_Item_BuildTool_MediumHammer_Audio, DT_Buildables_MediumHammer, ID_MediumHammer | | Data/MunitionsSupplies | 2 | Ammo Supplies item and audio | DA_Item_AmmoSupplies_Audio, ID_MuntionsSupplies | | Data/SmallHammer | 4 | Small Hammer item, animations, audio and its placeable list | AnimSet_BuildToolHammerSmall, DA_Item_BuildTool_SmallHammer_Audio, DT_Buildables_SmallHammer, ID_SmallHammer | | Data/SparePartsSupplies | 2 | Mechanical Supplies item and audio | DA_Item_MechanicalSupplies_Audio, ID_SparePartsSupplies | | Data/UI | 22 | FOB inventory and tooltip, map and spatial trackers, material trackers, refuel and repair scene | DA_ContainerGridSlot_FOB_Inventory_Storage, DA_ContainerGrid_Inventory_Subslots_FOB, DA_ContainerGrid_Inventory_Subslots_FOBSupplies, DA_ItemCard_FOBSupplies, DA_ItemCard_Inventory_FOB, DA_LootedComponent_FOB, DA_MaterialTrackerData_HotZoneMagnet, DA_MaterialTrackerData_RefuelStation, DA_MaterialTrackerData_RepairStation, DA_Tooltip_Entry_FOB, DA_Tooltip_FOB, DA_Tracker_Map_Buildable, DA_Tracker_Map_BuildableHotZoneMagnet, DA_Tracker_Map_FOB, DA_Tracker_Spatial_Buildable, DT_LootedComponentTypes_FOB, DT_MaterialTrackerSettingsData_Buildables, DT_TrackerData_Map_Buildables, DT_TrackerData_Spatial_Buildables, DA_Scene_FobRefuelRepair, DT_SceneData_Match_Buildables, DT_TooltipData_Buildables | | root | 6 | feature root, entity names, global damage, vendor table, input mappings | Buildables, DT_EntityData_UI_Buildables, DT_GlobalDamage_BuildableData, DT_VendorData_Ext_Buildables, IMC_Action_Build, IMC_Action_Dismantle |
Total: 206 files.
11. Open items
- Resolved in round 38 (section 13): how
Costturns into Build Supplies and howBuildAmountscales against stage progress. Still open: the hammer’s real swing period (seconds to build), the build cost scaleS(live curve, 1.0 without it), and the effect ofBuildable.Damage.DoNotTakeDamageon the FOB (no native reader found). Resolved in round 45: the FOB Blueprint’s vitality override of 300 does not apply; when the buildable’s data asset is set the server writes the data asset’sMaxHealthinto both the base and the maximum health of the vitality component, so the FOB has 15,000 health (Native, static reading, evidence). StackCheckOffsetand the unnamed (_aaab...) placement fields beyond what section 14.2 reads.- The native code of the Drill Rig hot zone effect (movement and resizing of the zone) and the native choice between the Placed and Placed-in-FOB cash tables (section 14.6, 14.7).
- Whether destroying or dismantling a structure refunds supplies (no credit call found;
OnBuildableDestroyednot decoded). - Hit-count tables per structure: a derived bound for four sources is in section 12.3; the exact tables need all matching damage entries (armor-piercing, hollow-point, calibers) and the instigator and target rules.
Resolved in round 38 (section 14): bOverridesFinalStage, MaxStack, PlacementFlags, weak spots, the two Blueprint placement conditions, the Builder’s Radio, the Drill Rig numbers and units, the missing cash rows, and the FOB spawn question.
12. Round 36 additions
Evidence: cooked data read and static disassembly, see round 36 combat evidence. Re-derive the numbers with python -I _tools/round36_combat.py --check.
12.1 Refuel and Repair Station rates
The stations hold no numbers of their own. The rates are in the FOB refuel and repair scene asset DA_Scene_FobRefuelRepair (StationData). MaxAmount is a fraction of the vehicle’s fuel tank or health pool.
| Station | Button | MaxAmount | Cost (cash) | RestockTime (s) | Supply item | Items per restock |
|---|---|---|---|---|---|---|
| Refuel Station | Fast | 0.05 | 75 | 3.0 | Fuel Supplies | 5 |
| Refuel Station | Max | 1.0 | 1,500 | 9.0 | Fuel Supplies | 5 |
| Repair Station | Fast | 0.05 | 100 | 3.0 | Mechanical Supplies (SparePartsSupplies) | 5 |
| Repair Station | Max | 1.0 | 2,000 | 9.0 | Mechanical Supplies | 5 |
The cash for Fast is 5% of the Max price. The sale appears to pay the FOB owner (inferred from WDFobStationPayOwner). How the 5 items scale with the amount restocked is native and not read.
12.2 What RepairSpeedMultiplier is
WDBuildableDataAsset.RepairSpeedMultiplier exists on 32 buildable assets. It equals Cost / 15 on 21 of them (Refuel and Repair Station 13.33, Radio 1.33, Tank Trap 1.47, Quad Wall 5.0); the multi-stage parents and the stationary weapons differ (Bunker 6.67, Door 2.0, Gate 5.67, Talon 66.67). It is a per-structure value that the native hammer path multiplies into the hit amount (inferred from 0x85F1F20, which reads the data asset at +0x64); it is not a vehicle refuel or repair rate.
12.3 Hits to destroy (derived)
ceil(MaxHealth / (base * (1 + factor))) at point blank with full base damage, using the per-source factors of section 4. Base damage: M4 5.56 FMJ 28, M67 frag 100, 120 mm tank rocket 150, C4 250.
| Structure | HP | M4 5.56 FMJ | M67 frag | 120 mm rocket | C4 |
|---|---|---|---|---|---|
| Barbed Wire | 250 | 60 | 3 | 1 | 1 |
| Sandbag Wall, Wood base | 735 | 175 | 8 | 1 | 1 |
| Hesco (HBlock) | 1,600 | 286 | 11 | 5 | 2 |
| Door | 2,200 | 524 | 22 | 2 | 3 |
| Tall Hesco, Shelter | 2,250 | 402 | 15 | 9 | 4 |
| Tank Trap | 4,500 | 1,072 | 90 | 6 | 3 |
| Bunker, Recon Tower, Indirect Fire Shelter | 5,000 | 893 | 100 | 23 | 14 |
| Gate | 5,320 | 1,267 | 54 | 4 | 2 |
| Bremer Wall | 6,500 | 1,161 | 44 | 13 | 7 |
| Refuel Station, Repair Station | 1,600 | 286 | 11 | 1 | 1 |
| FOB | 15,000 | 2,679 | 50 | 7 | 5 |
These are bounds from the tables, not observed hit counts. The build time per structure and how Cost converts to Build Supplies per hit stay native (hit path Server_SingleHitMode_Construct -> 0x86032F0 -> 0x85EAAA0 -> 0x85F1D90 -> 0x85F1F20).
12.4 Stationary weapon health and restock
The MG Nest buildable asset says 3,000 MaxHealth; the finished gun is the STN_06 vehicle, whose InitialVehicleHealth and VP_STN_06 MaxHealth are 1,800 (the other five stationary weapons have equal values in both places). The plot actor B_Buildable_StationaryVehicle takes its health from the buildable asset while it is being built.
| Weapon | ReloadTime (s) | Start + end delay (s) | Restock supplies | Cash | Rounds per restock |
|---|---|---|---|---|---|
| Talon (STN_01) | 5.0 | 1.0 + 1.0 | 200 Munitions | not set | not serialized |
| STN_02 | 3.0 | 1.0 + 1.0 | 250 Munitions | not set | 500 |
| L81 Mortar (STN_03) | 4.5 | 1.0 + 1.0 | 150 Munitions | not set | not serialized |
| Stingray (STN_05) | 0.0 | 1.0 + 1.0 | 900 Mechanical Supplies | 5,000 | 1 (native default) |
| MG Nest (STN_06) | 8.0 | 1.0 + 1.0 | 200 Munitions | not set | 60 |
The Stingray is bought, not reloaded: the drone reload scene reads “PURCHASE STINGRAY” with spare parts and cash. It and the Talon are lock-on weapons (TargetingSetup: air targets, TimeToTarget 2.0 s, FireDelayAfterLock 0.5 s; the Stingray fires only while locked).
13. Round 38: the building arithmetic
Evidence: static disassembly of the hammer hit path, see round 38 evidence. Labels: Native for the formulas, Derived for the table.
- Per hit (Native). A hit adds
A / Tof the structure’s progress, whereA = BuildAmount x build factorandT = Cost(rounded, scaled by a live-curve value that is 1.0 when absent). The build factor is 1 except Barbed Wire 3.5, Camo Net Tent 3.5, Hotzone Magnet 2.0 and STN_02 1.25. A hit on a critical spot addsBuildAmountWhenTargetIsHit / Tinstead. Hits to build =ceil(T / A). - Supplies (Native).
Costis spent a little per hit: aboutABuild Supplies per hit (whole supplies are taken, the fraction carries over),Costin total whichever hammer builds.PlacementCostis a separate amount checked and charged at placement; it is 0 on every buildable in the data. - Repair (Native). On a finished structure the same hit restores
A x RepairSpeedMultiplier / Tof its maximum health, capped; unneeded supplies are refunded.RepairSpeedMultiplieris used only for finished structures. - Unfinished structures (Native). Damage lowers build progress by
damage / MaxHealth; at 0 the structure is destroyed. - Dismantle (Native). Damage of type
Damage.Type.Dismantle: 250 / 200 / 150 per hit (Large / Medium / Small), times 1.0 on your own structure and 0.5 on another owner’s (key choice inferred). No supply refund was found. - Extension class (Native). The hammer’s
BuildAmountis the field ofUWDItemExtensionData_BuildBuildable; its 3.0 default andBuildAmountPerSecond(continuous mode) are not used by the hammers. - FOB (not resolved).
Buildable.Damage.DoNotTakeDamageis anFNameon the data asset that no native function reads; the buildable damage path has no check for it. Whether the FOB takes damage is unknown. - Not native. The swing period: seconds below assume one hit per swing loop of the use montage.
| Structure | Tag | Build Supplies to finish (T) | Placement supplies | Build factor | Repair multiplier | Max health | Placed with | Hits S / M / L | Seconds S / M / L | Full repair hits S / M / L | Dismantle hits S / M / L (own) | |—|—|—:|—:|—:|—:|—:|—|—|—|—|—| | DA_Buildable_AirRaidShelter | AirRaidShelter | 200 | 0 | 1 | 6.7 | 5,000 | L | 400 / 200 / 134 | 226.8 / 113.4 / 118.3 | 60 / 30 / 20 | 34 / 25 / 20 | | DA_Buildable_AirRaidShelter_Ceiling | AirRaidShelter.Ceiling | 10 | 0 | 1 | 0.7 | 2,250 | - | 20 / 10 / 7 | 11.3 / 5.7 / 6.2 | 30 / 15 / 10 | 15 / 12 / 9 | | DA_Buildable_AirRaidShelter_Floor | AirRaidShelter.Floor | 10 | 0 | 1 | 0.7 | 2,250 | - | 20 / 10 / 7 | 11.3 / 5.7 / 6.2 | 30 / 15 / 10 | 15 / 12 / 9 | | DA_Buildable_BarbedWire | BarbedWire | 7 | 0 | 3.5 | 0.5 | 250 | SML | 4 / 2 / 2 | 2.3 / 1.1 / 1.8 | 9 / 5 / 3 | 2 / 2 / 1 | | DA_Buildable_Door | Door | 80 | 0 | 1 | 2 | 2,200 | ML | 160 / 80 / 54 | 90.7 / 45.4 / 47.7 | 80 / 40 / 27 | 15 / 11 / 9 | | DA_Buildable_Door_DoorOnly | Door | 22 | 0 | 1 | 1.5 | 500 | ML | 44 / 22 / 15 | 24.9 / 12.5 / 13.2 | 30 / 15 / 10 | 4 / 3 / 2 | | DA_Buildable_Door_TopSegment | Door.TopSegment | 22 | 0 | 1 | 1.5 | 500 | - | 44 / 22 / 15 | 24.9 / 12.5 / 13.2 | 30 / 15 / 10 | 4 / 3 / 2 | | DA_Buildable_BremmerWall | BremmerWall | 32 | 0 | 1 | 1.5 | 6,500 | L | 64 / 32 / 22 | 36.3 / 18.1 / 19.4 | 44 / 22 / 15 | 44 / 33 / 26 | | DA_Buildable_Bunker | Bunker | 200 | 0 | 1 | 6.7 | 5,000 | L | 400 / 200 / 134 | 226.8 / 113.4 / 118.3 | 60 / 30 / 20 | 34 / 25 / 20 | | DA_Buildable_Bunker_Floor | Bunker.Floor | 10 | 0 | 1 | 0.7 | 2,250 | - | 20 / 10 / 7 | 11.3 / 5.7 / 6.2 | 30 / 15 / 10 | 15 / 12 / 9 | | DA_Buildable_Bunker_Roof | Bunker.Roof | 10 | 0 | 1 | 0.7 | 2,250 | - | 20 / 10 / 7 | 11.3 / 5.7 / 6.2 | 30 / 15 / 10 | 15 / 12 / 9 | | DA_Buildable_CamoNetTent | CamoNetTent | 7 | 0 | 3.5 | 0.5 | 300 | SML | 4 / 2 / 2 | 2.3 / 1.1 / 1.8 | 9 / 5 / 3 | 2 / 2 / 2 | | DA_Buildable_CrowsNest | CrowsNest | 200 | 0 | 1 | 6.7 | 5,000 | L | 400 / 200 / 134 | 226.8 / 113.4 / 118.3 | 60 / 30 / 20 | 34 / 25 / 20 | | DA_Buildable_CrowsNest_BaseFloor | CrowsNest.BaseFloor | 10 | 0 | 1 | 0.7 | 2,250 | - | 20 / 10 / 7 | 11.3 / 5.7 / 6.2 | 30 / 15 / 10 | 15 / 12 / 9 | | DA_Buildable_CrowsNest_FirstFloor | CrowsNest.FirstFloor | 10 | 0 | 1 | 0.7 | 2,250 | - | 20 / 10 / 7 | 11.3 / 5.7 / 6.2 | 30 / 15 / 10 | 15 / 12 / 9 | | DA_Buildable_CrowsNest_Roof | CrowsNest.Roof | 10 | 0 | 1 | 0.7 | 2,250 | - | 20 / 10 / 7 | 11.3 / 5.7 / 6.2 | 30 / 15 / 10 | 15 / 12 / 9 | | DA_Buildable_FOB | FOB | 30 | 0 | 1 | 2 | 15,000 | - | instant | instant | 30 / 15 / 10 | 100 / 75 / 60 | | DA_Buildable_HBlock | HBlock | 15 | 0 | 1 | 1 | 1,600 | SML | 30 / 15 / 10 | 17 / 8.5 / 8.8 | 30 / 15 / 10 | 11 / 8 / 7 | | DA_Buildable_Gate | Gate | 200 | 0 | 1 | 5.7 | 5,320 | ML | 400 / 200 / 134 | 226.8 / 113.4 / 118.3 | 71 / 36 / 24 | 36 / 27 / 22 | | DA_Buildable_Gate_Left | Gate | 85 | 0 | 1 | 5.7 | 5,320 | ML | 170 / 85 / 57 | 96.4 / 48.2 / 50.3 | 30 / 15 / 10 | 36 / 27 / 22 | | DA_Buildable_Gate_Ramp | Gate.Ramp | 85 | 0 | 1 | 5.7 | 6,500 | - | 170 / 85 / 57 | 96.4 / 48.2 / 50.3 | 30 / 15 / 10 | 44 / 33 / 26 | | DA_Buildable_Gate_Right | Gate | 85 | 0 | 1 | 5.7 | 5,320 | ML | 170 / 85 / 57 | 96.4 / 48.2 / 50.3 | 30 / 15 / 10 | 36 / 27 / 22 | | DA_Buildable_HBlock_QuadWall | HBlockQuadWall | 75 | 0 | 1 | 5 | 4,600 | ML | 150 / 75 / 50 | 85 / 42.5 / 44.1 | 30 / 15 / 10 | 31 / 23 / 19 | | DA_Buildable_HotzoneMagnet | HotzoneMagnet | 2750 | 0 | 2 | 150 | 2,500 | L | 2,750 / 1,375 / 917 | 1,559.2 / 779.6 / 809.7 | 19 / 10 / 7 | 17 / 13 / 10 | | DA_Buildable_Radio | Radio | 20 | 0 | 1 | 1.3 | 1,000 | SML | 40 / 20 / 14 | 22.7 / 11.3 / 12.4 | 31 / 16 / 11 | 7 / 5 / 4 | | DA_Buildable_RefuelStation | RefuelStation | 200 | 0 | 1 | 13.3 | 1,600 | L | 400 / 200 / 134 | 226.8 / 113.4 / 118.3 | 31 / 16 / 11 | 11 / 8 / 7 | | DA_Buildable_RepairStation | RepairStation | 200 | 0 | 1 | 13.3 | 1,600 | L | 400 / 200 / 134 | 226.8 / 113.4 / 118.3 | 31 / 16 / 11 | 11 / 8 / 7 | | DA_Buildable_Shelter | SV_Shelter | 250 | 0 | 1 | 1 | 2,250 | ML | 500 / 250 / 167 | 283.5 / 141.8 / 147.5 | 500 / 250 / 167 | 15 / 12 / 9 | | DA_Buildable_SandbagWall | SandbagWall | 15 | 0 | 1 | 1 | 735 | SML | 30 / 15 / 10 | 17 / 8.5 / 8.8 | 30 / 15 / 10 | 5 / 4 / 3 | | DA_Buildable_TallHBlock | TallHBlock | 22 | 0 | 1 | 1.5 | 2,250 | ML | 44 / 22 / 15 | 24.9 / 12.5 / 13.2 | 30 / 15 / 10 | 15 / 12 / 9 | | DA_Buildable_TankTrap | TankTrap | 22 | 0 | 1 | 1.5 | 4,500 | SML | 44 / 22 / 15 | 24.9 / 12.5 / 13.2 | 30 / 15 / 10 | 30 / 23 / 18 | | DA_Buildable_WoodBase | WoodBase | 15 | 0 | 1 | 1 | 735 | SML | 30 / 15 / 10 | 17 / 8.5 / 8.8 | 30 / 15 / 10 | 5 / 4 / 3 |
Hammer constants used (BuildAmount, critical-spot amount, dismantle damage per hit, swing loop in seconds): Small 0.5, 3, 150, 0.567; Medium 1, 5, 200, 0.567; Large 1.5, 8, 250, 0.883.
14. Round 38 additions
Evidence: cooked data and Blueprint bytecode read with the extractor (dump mode), the Dumper-7 headers in sdk/raw, and static reading of the decompiled native code. Nothing was run. Details, asset names and RVAs: round 38 building data evidence. The per-structure values below are in assets/data/buildable-semantics.json, written by python -I _tools/buildable_semantics.py (--check asserts the key values).
14.1 bOverridesFinalStage and the ...ActorReplacing spawners
Data, Derived. The six definitions with the flag are the six whose finished form is a composite: Indirect Fire Shelter, Door, Bunker, Recon Tower, Gate and Hesco Wall (quad wall). Each one has a spawner base class that derives from WDActorReplacingBuildable (B_Buildable_AirRaidShelter_C, B_Buildable_Door_ActorReplacing_C, B_Buildable_Bunker_C, B_Buildable_CrowsNestActorReplacing_C, B_Buildable_Gate_ActorReplacing_C, B_Buildable_HBlock_QuadWall_C; the Blueprints hold no logic of their own). The other structures use a WDActorSpawningBuildable subclass or a plain B_Buildable_C.
What differs is the last stage. In every override definition the last stage’s mesh list names ActorToSpawn sub-actors (separate buildable prefabs); structures without the flag have a single finished mesh and no sub-actors. Final-stage sub-actors:
| Structure | Sub-actors listed by the last stage |
|---|---|
| Indirect Fire Shelter | shelter floor, shelter ceiling, one tall Hesco, one Hesco |
| Door | door top segment, the Door actor (B_Buildable_Door_C) |
| Bunker | tall Hesco, sandbag wall, Hesco, bunker roof, bunker floor |
| Recon Tower | tall Hesco, sandbag wall, Hesco, tower roof, first floor, base floor |
| Gate | left gate half, right gate half, Hesco gate ramp (rule FinalOnly) |
| Hesco Wall (quad) | tall Hesco |
So while the structure is built the stage meshes are previews (the placement rule is PreviewOnly for the mesh that carries the sub-actor), and at completion the sub-actors take over, each its own buildable with its own health and damage row (the parts are single-stage data assets such as DA_Buildable_Bunker_Floor). That the native code swaps preview for actors at completion is Derived from the field names (EWDPlacementRules: PreviewAndFinal, PreviewOnly, FinalOnly, FinalOnlyWithFoundations) and the class names; the swap itself is native and was not read. The native default of the flag is false (data asset constructor 0x8585020, offset 0x290).
14.2 MaxStack and PlacementFlags
Native (static reading), enum from the SDK.
EWDPlacementFlags(BuildablesRuntime): 1 AllowRotation, 2 CanBeBuiltOn, 4 CanPlaceVertically, 8 CanPlaceOnBuildables, 11 Default (a bit set).- Native defaults:
PlacementFlags11 (1 + 2 + 8) andMaxStack2 (data asset constructor0x8585020). Serialized values: 9 (AllowRotation + CanPlaceOnBuildables) on 14 assets (Recon Tent, Sandbag Wall, Tank Trap, Radio, Refuel and Repair Station, Gate halves, Drill Rig and five of the six stationary weapons), 1 (AllowRotation only) on the FOB, and nothing on the other 23, where the default 11 applies. The earlier wording “9 for almost every structure” counted only serialized values. - Reader: the snap-on-top placement check
sub_1485C5390(RVA0x85C5390). In order it requires: the new structure has bit 8; the buildable underneath has bit 2 (sub_1485889A0, RVA0x85889A0); the entity tag of each is allowed by the other’s tag list; the lower buildable is complete (progress at least 1.0);lower.StackHeight + 1 <= MaxStackof the new structure; and the new support height stays withinSupportHeightLimitofDA_BuildablePlacementData(1,500). Every failure returns its own reason tag. - So
MaxStackis the stack-height limit for the structure being placed on top of other buildables (the one placed included), not a placement count. Examples: Barbed Wire, Recon Tent, Sandbag Wall, Tank Trap and both stations 100; Hesco block 5; MG Nest 5; Wood base 4; Radio and four stationary weapons 6; FOB, Gate, Shelter, Bremer Wall and Indirect Fire Shelter 1; Recon Tower parts, Drill Rig and Gate halves 0. Unset (-in the placement table) means the default 2. - Flag meaning per group: FOB (1) can be rotated, cannot be built on and cannot be placed on other buildables. The 9 group can be placed on buildables but nothing can be placed on them. The default 11 group (walls, Bunker and its parts, MG Nest, Door, Gate) can be both.
CanPlaceVertically(4) is set on no asset and its reader was not found. - The two tag containers on the data asset (offsets
0x130and0x150) are the allowed-neighbour lists used by the two tag checks: the Barbed Wire lists only itself, the Bremer Wall lists Barbed Wire and Sandbag Wall. Derived from the reader; which list is which direction was not separated.
14.3 Weak spots (critical-hit spots)
Data, Blueprint bytecode, native defaults. A weak spot is a build-speed bonus for the hammer, not a damage multiplier. B_CriticalHitSpot is an actor with a small box (extent taken from its decal, 6.4 x 12.8 x 12.8) that ignores every collision channel including projectiles and melee, so bullets cannot hit it; its tick only draws a debug sphere. The hammer item carries WDItemExtensionData_CriticalHitSpotManager, which shows a highlighted decal on the structure being built:
| Hammer | Normal hit | Hit on the weak spot (BuildAmountWhenTargetIsHit) | Factor | Max distance from player view | Facing-away limit at spawn |
|---|---|---|---|---|---|
| Small | 0.5 | 3 | 6 | 290 | 135 degrees |
| Medium | 1 | 5 | 5 | 290 | 135 degrees |
| Large | 1.5 | 8 | 5.3 | 340 | 135 degrees |
Native defaults of the manager that the hammers do not override (constructor 0x85E0960): BuildAmountPerSecondWhenTargetIsTracked 4.0 (continuous mode, while the aim stays on the spot), CriticalHitSpotSpeed 30, CriticalHitSpotRotationLerpSpeed 0.02, CriticalHitSpotDistanceRequirementSquared 4, relocation mode EyeLine, life span 0 and spawn delay 0. Spot colours: default FFCF02, highlighted FFEFD1. Each non-final stage lists its spot positions in its stage file (counts per stage are in the JSON); the last stage has none. The data-asset flag bUsesCriticalHitSpots defaults to true and is set false on Barbed Wire, Recon Tent and the part assets (so those two have spots in the stage files that are never shown). No damage-table row, Gameplay Effect or reward mentions weak spots (searched data/ for CriticalSpot and CriticalHit).
14.4 The two Blueprint placement conditions
Blueprint bytecode and native code (static).
| Condition | Test | Number |
|---|---|---|
B_SafeZonePlacementCondition (IsSatisfied) | Fails with the warning tag UI.Interactions.PlacementWarnings.InSafeZone if the placing player carries any of the tags State.Location.SafeZone.Alpha, .Bravo, .Charlie or .Hostile. Otherwise it walks every B_SafeZone actor and fails if the closest point of that safe zone’s trigger volume to the placement location is at most MinDistanceToSafezone away. | 300 Unreal units (3 m) |
B_WithinLadderBoundsPlacementCondition (native WDWithinLadderBoundsPlacementCondition, vtable slot 0x7725250) | Runs a sphere overlap (trace tag WDLadderPlacementCheck) at the placement location and fails if any WDMoverLadder actor (class in /Script/WDGame) overlaps. | BlockRadius 100 Unreal units (1 m) |
The safe-zone condition is listed on 25 of the 38 buildable data assets (the FOB, Bunker, Door and Gate main assets list it; the Drill Rig and the sub-part assets of multi-part structures do not), the ladder condition on 37 (all but the Drill Rig). The Unreal unit is the centimetre.
14.5 Builder’s Radio
Data, Blueprint bytecode. The Builder’s Radio is a music radio. B_Radio has a world interactable with a power toggle and seven stations (Interaction.Context.Buildables.Radio.Power, .Station1 to .Station7). The power interaction sets the station number to 0 (off) or back to the previous station; each station interaction sets the number; B_Radio_AudioHandler replicates Curr Station Num and Prev Station Num, starts the audio component with the trigger parameter Play and sets a timer for the next song. No spawn, call, supply drop or UI effect is in the Blueprints. bRegisterWithFOB makes the FOB count the radio toward its limit of 4 (the FOB component keeps a TrackedBuildablesCount against the ruleset’s LimitFOBBuildables); placement must also be inside a friendly FOB radius. B_Radio_World is the same radio as a world prop (a WDWorldRadioSpawnComponent spawns it in the pre-lobby).
14.6 Drill Rig and the hot zone magnet
Data and native defaults. The HotzoneMagnet buildable is the buildable form of the map’s hot zone magnet. Its settings, with the native default for what the asset does not set (data asset constructor 0x85E05D0):
| Setting | Asset value | Native default |
|---|---|---|
InitialDelayDuration | 15 | 10 |
HotZoneMagnetRechargeDuration | 900 | 300 |
HotZoneMagnetMinimumFuel | 2,000 | 200 |
HotZoneMagnetDurationPerFuel | 0.03 | 0.3 |
MaxFuel | 10,000 | 1,000 |
ActivateInteractionDuration | not set | 10 |
ActivateInteractionRange / FuelInteractionRange | not set | 200 / 200 |
ActivatedHotZoneMagnetSpeed | not set | 5.0 |
ActivatedHotZoneMagnetSizeMultiplier | not set | (0.5, 0.5, 1.0) |
HotZoneTowerRewardRange (actor) | not set | 2,500 |
Units (Derived). The delays and the recharge are seconds (the Blueprint drives timers with them and the HUD divides the remaining cooldown by the total). Run time is fuel times DurationPerFuel: the minimum 2,000 fuel gives 60 s and the full 10,000 fuel gives 300 s of activation. Fuel is the FOB’s Fuel Supplies (Id.Item.FuelSupplies; the rig follows the FOB inventory, and the HUD strings read “FOB REQUIRED”, “MIN FUEL”, “INSUFFICIENT FUEL”, “READY TO ACTIVATE”, “DRILL ACTIVE”). Activation is an interaction held for 10 s within 200 units.
What it does. The rig drives the session-wide WDHotZoneMagnetGameStateComponent, the same component that the map’s tower and keypad puzzle uses (towers captured reveal a code; a wrong code costs HotZoneMagnetCodeAttemptsTimePenalty 30 s on B_HotZoneMagnet). The component keeps the active magnet number and location, a speed (native 3.0), a size multiplier (native (0.6, 0.6, 1.0)), an activation duration (Blueprint value 180 s, native 120) and a tower recharge (Blueprint value 900 s, native 150); the 900 matches the rig’s own recharge. While a magnet is active, the hot zone (control zone) is moved to it and scaled by the size multiplier. Movement (round 46): the speed is in metres per second; the transition time is the straight-line distance in metres divided by the speed (native world speed 3.0), and that time is added to the activation duration (0x776DDD0, 0x776D890; round 46, item 3). Reward rows (cash table base): magnet activated 5,000, magnet destroyed 150 (200 for the instigator), tower captured 250 (1,000 hostile); the reward text says resources go to all friendly players within range of an activated magnet. Not traced: the per-tick interpolation of the zone centre, and which of the two speed and size pairs (component or rig asset) applies to a rig (both handlers read the world component’s pair).
14.7 Cash rows for the missing structures, and the Placed tables
ABSENT as named rows; table choice is native. None of the Talon 9K-SAM, Loudspeaker, Vanguard CIWS, Stingray, MG Nest, Wood Base or Shelter has a row in DT_Reward_Cash_BuildableBuilt, ...Placed or ...PlacedInFOB; all three tables hold the same 10 structures (HBlock, TallHBlock, Gate, FOB, HBlockQuadWall, Mortar, BarbedWire, TankTrap, AirRaidShelter, Bunker) and none of the seven is in a reward lookup or challenge table for placing. Each table has a Meta.Progression.Context.DefaultReward row: Built base 1 (owner 0.5, friendly 1), Placed base 1 (owner 1, friendly -1), Placed in FOB base 1 (owner 0, friendly -1). If the lookup falls back to that row for an unlisted structure the payout would be 1 cash; the fallback is native and not confirmed.
How the tables are chosen: all are sources of one Data Registry, DR_CashRewards (registry type CashRewards, item struct WDCustomRewardTableRow), in this order: Built, Placed, Placed in FOB, ControlZoneReward, DeployableDestroyed, DeployedSupplyCrate, EndGameFactionReward, Heal, HotZoneMagnet, PlayerKill, Refuel, Repair, Revive, VehicleDestroyed, VehicleTransport. Built, Placed and Placed in FOB use the same row names, so a lookup by row name alone cannot tell them apart (which source’s row is cached for an id is decided by the registry’s acquire order, which was not read: the lookup itself is one cache map keyed by the resolved id, round 46, item 4). Which table a placement event reads was not found in the native code. The per-placement reward that is visible in data is Challenges.Rewards.Buildables.SchematicPlaced (“Wait For Schematic Placed In FOB Event”): a flat 10 times the zone modifier (control zone 1, hot zone 2) with no role resource, plus the resource SchematicPlacedInFOBScore of 5 cash (+5 inside a hot zone), neither depends on the structure type.
14.8 Is the FOB a spawn point?
ABSENT in the client data (not excluded on the server). Searched: every FOB Blueprint (B_ForwardOperatingBase*, B_ForwardOperatingBaseComponent, the three faction buildable and placement classes), the WDForwardOperatingBaseComponent and WDFobWatchingCollisionBox members in the SDK, the spawn tags and string tables in data/, and the spawn classes (WDSpawnManager, WDSpawnVolume, WDSpawnQueryPoint, WDPlayerSpawnManagerComponent), which are keyed by faction tag and map-placed query points and never reference the FOB. The only “spawn” the FOB Blueprints use is WDBuildable_ActorSpawnLocation, the anchor for the sub-actors a buildable spawns. The player-facing texts describe the FOB as a claim-territory and supply point (“Needed to Build Larger Structures”, “Can hold Items & Resources”, “Provides a Radius in Which Players Can Build”; “claim territory for your team”). Placement warnings: “Too close to another Forward Operating Base”, “FOB build zones cannot overlap”, “Can’t Place In Enemy FOB Radius”. Vehicle.Variant.Land.Tracked.SpawnVehicle is a separate vehicle class, not the FOB.