0/0
CRADL // DOCUMENTATION
PORTAL DEV WIKI PROGRESSION_RECIPES
UTC 00:00:00
◀ RETURN
PROGRESSION_RECIPES.md 3484 words ~16 min read Updated 2026-07-03

Progression Recipes

Status: Reference / authoring aid. Companion to: STAT_PIPELINE.md, COMBAT_SYSTEM.md, Source/CRADL/Inventory/ItemRow.h

Scope

Tabular reference for stamping tiered weapons and armor with OSRS-shape progression curves. Each table pairs the OSRS reference values for a family (so the curve is anchored to a known good ramp) with the concrete FItemRow field values that reproduce a similar curve in the CRADL pipeline. Absolute numbers are not sacred — the shape (relative ramp between tiers, distribution across stat axes) is the contract.

This document is not a balance spec. Curve shape comes from OSRS; final tuning belongs to playtest.

Field Mapping (OSRS → CRADL)

OSRS column CRADL field Bucket Notes
Stab / Slash / Crush attack bonus FItemRow::AttackBonus[Combat.DamageType.{Stab,Slash,Crush}] 2 (matrix) Per-type weapon-hand-bias. Aggregated by UEquipmentComponent::SumAttackBonus.
Ranged attack bonus AttackBonus[Combat.DamageType.Ranged] 2 Same matrix; ranged uses the same TMap.
Magic attack bonus AttackBonus[Combat.DamageType.Magic] 2 Same matrix; magic uses the same TMap.
Stab/Slash/Crush/Ranged/Magic defense DefenseBonus[...] 2 Per-type defense matrix. Aggregated by SumDefenseBonus.
Strength bonus (melee) FItemRow::StrengthBonus 1 (scalar) Synthesized into UGE_Equip_StrengthBonus at equip; reads as UCradlAttributeSet::Strength.
Ranged strength FItemRow::RangedStrengthBonus 1 Synthesized into UGE_Equip_RangedStrengthBonus.
Magic damage % FItemRow::MagicDamageBonus (float, 0.10 == +10%) 1 Synthesized into UGE_Equip_MagicDamageBonus.
(no OSRS analog — see below) FItemRow::DefenseBonusFlat 1 Universal Defense scalar; usually 0 for tier-stamped gear. Reserve for set bonuses, capes, "Defense potion"-style consumables.
Attack speed (ticks) FItemRow::SwingInterval (seconds) 3 (identity) SwingInterval = ticks * 0.6. Runtime cadence is SwingInterval / AttackSpeed.
Combat style buttons FItemRow::WeaponDamageType + DefaultStyle + StyleDamageTypes 3 WeaponDamageType is the default axis. StyleDamageTypes (TArray<FStyleSwingAxis> — each entry pairs a Combat.Style.* leaf with a Combat.DamageType.* leaf) overrides per active style on melee weapons — a scimitar can swing Slash under Aggressive and Stab under Controlled. Resolved at swing-start via CradlCombat::ResolveSwingDamageType. Style itself (Aggressive/Defensive/Controlled) also routes XP and adds effective-level bonuses — see COMBAT_SYSTEM.md "Combat Styles".
Prayer bonus (no pipeline yet — drop or revisit when prayer ships) Park as a row field on the day prayer lands.

Tick → SwingInterval cheat sheet: 3t = 1.8s · 4t = 2.4s · 5t = 3.0s · 6t = 3.6s · 7t = 4.2s.

EquipEffects vs row scalar. Per STAT_PIPELINE.md "Item Authoring Shape": static numerical bonuses use the row scalar fields. EquipEffects is reserved for conditional / multiplier / set-bonus shapes — see "Capstone & Conditional Recipes" at the bottom.


Melee Weapons

Per-family StyleDamageTypes mapping. Each melee family below carries a StyleDamageTypes mapping that controls which Combat.DamageType.* axis the active style consumes. The per-axis AttackBonus columns below are all reachable from gameplay — under Aggressive a scimitar swings Slash and rolls against AttackBonus[Slash]; under Controlled it swings Stab and rolls against AttackBonus[Stab]. The same author-once AttackBonus matrix supplies the right axis to whichever style the player picks. See COMBAT_SYSTEM.md "Combat Styles → Style → Swing Axis" for the resolver. Ranged/magic weapons don't author StyleDamageTypes — they swing their single WeaponDamageType regardless of style.

Scimitar family (4-tick, slash-biased one-hand)

OSRS scimitars are the canonical slash mainline: fast, slash-heavy, modest stab, slight crush penalty. Recipe mirrors OSRS values one-to-one — the ramp is already the curve we want.

Tier OSRS Stab / Slash / Crush atk OSRS Str OSRS speed WeaponDamageType SwingInterval AttackBonus (Stab/Slash/Crush) StrengthBonus
Bronze +4 / +7 / −2 +7 4t ...Slash 2.4 4 / 7 / −2 7
Iron +5 / +9 / −2 +9 4t ...Slash 2.4 5 / 9 / −2 9
Steel +7 / +14 / −2 +12 4t ...Slash 2.4 7 / 14 / −2 12
Black +8 / +19 / −2 +14 4t ...Slash 2.4 8 / 19 / −2 14
Mithril +10 / +21 / −2 +17 4t ...Slash 2.4 10 / 21 / −2 17
Adamant +13 / +29 / −2 +22 4t ...Slash 2.4 13 / 29 / −2 22
Rune +18 / +45 / −2 +44 4t ...Slash 2.4 18 / 45 / −2 44
Dragon +22 / +67 / −2 +66 4t ...Slash 2.4 22 / 67 / −2 66
Capstone (whip-style) 0 / +82 / 0 +82 4t ...Slash 2.4 0 / 82 / 0 82

DefaultStyle = Combat.Style.Aggressive for all (scimitars default-aggressive in OSRS). All other axes on AttackBonus / DefenseBonus left empty (treated as 0).

StyleDamageTypes: { Aggressive → Slash, Defensive → Slash, Controlled → Stab } — matches OSRS's Chop/Slash/Block→Slash and Lunge→Stab button mapping.

Longsword family (5-tick, balanced stab/slash one-hand)

Slower than scimitar, marginally higher slash, similar stab. Used as the "balanced" alternative.

Tier OSRS Stab / Slash / Crush OSRS Str OSRS speed SwingInterval AttackBonus StrengthBonus
Bronze +4 / +8 / −2 +7 5t 3.0 4 / 8 / −2 7
Iron +5 / +10 / −2 +9 5t 3.0 5 / 10 / −2 9
Steel +7 / +15 / −2 +12 5t 3.0 7 / 15 / −2 12
Black +8 / +20 / −2 +14 5t 3.0 8 / 20 / −2 14
Mithril +10 / +22 / −2 +17 5t 3.0 10 / 22 / −2 17
Adamant +13 / +30 / −2 +22 5t 3.0 13 / 30 / −2 22
Rune +18 / +46 / −2 +44 5t 3.0 18 / 46 / −2 44
Dragon +22 / +69 / −2 +66 5t 3.0 22 / 69 / −2 66

WeaponDamageType = Combat.DamageType.Slash, DefaultStyle = Combat.Style.Controlled.

StyleDamageTypes: { Aggressive → Slash, Defensive → Slash, Controlled → Stab } — same shape as the scimitar family; longswords give up a tick of speed for slightly higher slash/stab numbers but keep the same per-style axis mapping.

Dagger family (4-tick, stab-focused, low Str)

Fast, stab-dominant, weak base — pure DPS-via-speed/style ramp. Capstone is the special-attack-driven tier in OSRS; we don't model the spec here, just the base values.

Tier OSRS Stab / Slash / Crush OSRS Str OSRS speed SwingInterval AttackBonus StrengthBonus
Bronze +4 / +3 / −2 +1 4t 2.4 4 / 3 / −2 1
Iron +5 / +4 / −2 +2 4t 2.4 5 / 4 / −2 2
Steel +7 / +6 / −2 +4 4t 2.4 7 / 6 / −2 4
Mithril +10 / +8 / −2 +6 4t 2.4 10 / 8 / −2 6
Adamant +14 / +12 / −2 +9 4t 2.4 14 / 12 / −2 9
Rune +25 / +20 / −2 +23 4t 2.4 25 / 20 / −2 23
Dragon +40 / +25 / −2 +40 4t 2.4 40 / 25 / −2 40

WeaponDamageType = Combat.DamageType.Stab, DefaultStyle = Combat.Style.Aggressive.

StyleDamageTypes: { Aggressive → Stab, Defensive → Stab, Controlled → Slash } — inverse of the scimitar shape (daggers are stab-default, slash on the off-style).

Mace family (4-tick, crush-biased one-hand)

Crush is the only tier-stamped weapon line that ramps the crush axis. Mace also carries a prayer bonus in OSRS — park that until prayer ships.

Tier OSRS Stab / Slash / Crush OSRS Str OSRS speed SwingInterval AttackBonus StrengthBonus
Bronze 0 / −1 / +5 +3 4t 2.4 0 / −1 / 5 3
Iron +1 / −1 / +6 +5 4t 2.4 1 / −1 / 6 5
Steel +3 / −1 / +9 +7 4t 2.4 3 / −1 / 9 7
Mithril +5 / −1 / +12 +10 4t 2.4 5 / −1 / 12 10
Adamant +8 / −1 / +16 +14 4t 2.4 8 / −1 / 16 14
Rune +12 / −1 / +24 +14 4t 2.4 12 / −1 / 24 14
Dragon +18 / −1 / +40 +38 4t 2.4 18 / −1 / 40 38

WeaponDamageType = Combat.DamageType.Crush, DefaultStyle = Combat.Style.Aggressive.

StyleDamageTypes: { Aggressive → Crush, Defensive → Crush, Controlled → Stab } — Spike (OSRS's Controlled mace style) routes to the secondary stab axis; the row's modest stab numbers above are what the swing rolls against under Controlled.

Two-hand greatsword / godsword (7-tick, capstone-tier slash/crush)

Two-hand slot. The godsword tier in OSRS unifies an extremely high slash and crush axis on the same weapon — pick the higher of the two as the player's effective attack roll via the combat-style choice.

Tier OSRS Stab / Slash / Crush OSRS Str OSRS speed SwingInterval AttackBonus StrengthBonus
Bronze 2h +6 / +9 / −2 +9 7t 4.2 6 / 9 / −2 9
Steel 2h +11 / +18 / −2 +18 7t 4.2 11 / 18 / −2 18
Mithril 2h +15 / +25 / −2 +25 7t 4.2 15 / 25 / −2 25
Adamant 2h +20 / +36 / −2 +36 7t 4.2 20 / 36 / −2 36
Rune 2h +26 / +70 / −2 +70 7t 4.2 26 / 70 / −2 70
Dragon 2h +30 / +85 / −2 +85 7t 4.2 30 / 85 / −2 85
Godsword (capstone) 0 / +132 / +132 +132 6t 3.6 0 / 132 / 132 132

WeaponDamageType = Combat.DamageType.Slash. Godsword tier ships with both Slash and Crush bonuses populated; the active swing axis is whatever the style → damage-type mapping resolves to at swing time.

StyleDamageTypes: - Greatsword tiers (Bronze → Dragon 2h): { Aggressive → Slash, Defensive → Slash, Controlled → Crush } — OSRS Chop/Slash/Block are Slash; Smash is Crush. - Godsword: { Aggressive → Slash, Defensive → Slash, Controlled → Crush } — same family shape; the godsword's distinguishing feature is that both its slash and crush AttackBonus entries are high (132/132), so picking Controlled is a real damage choice instead of a sacrifice.


Ranged

Bows (3-5 tick, ranged attack only — strength comes from ammo)

Two-hand slot. OSRS shortbows are 3t (fast, low ranged str on the weapon); longbows are 6t (slow, high accuracy). Capstone bows (Crystal, Faerdhinen, Twisted) break the pattern with weapon-supplied ranged str.

Tier OSRS Ranged atk OSRS Ranged str OSRS speed AttackBonus[Ranged] RangedStrengthBonus SwingInterval
Shortbow (oak) +6 0 3t 6 0 1.8
Shortbow (willow) +14 0 3t 14 0 1.8
Shortbow (maple) +29 0 3t 29 0 1.8
Shortbow (yew) +47 0 3t 47 0 1.8
Shortbow (magic) +69 0 3t 69 0 1.8
Longbow (yew) +55 0 6t 55 0 3.6
Longbow (magic) +82 0 6t 82 0 3.6
Crystal bow (capstone) +100 +70 4t 100 70 2.4
Twisted bow (capstone) +70 +20 5t 70 20 3.0

WeaponDamageType = Combat.DamageType.Ranged, DefaultStyle = Combat.Style.Aggressive (Rapid in OSRS — map to whatever the project's "fast-but-no-accuracy-bonus" style ends up tagged).

Arrows / bolts (ammo slot — supplies ranged strength)

Ammo authoring is identical to a one-line item: empty WeaponDamageType, ranged str only. Ammo consumption is keyed off the bow's WeaponDamageType == Combat.DamageType.Ranged — see COMBAT_SYSTEM.md "Ammo Slot".

Tier OSRS Ranged atk OSRS Ranged str AttackBonus[Ranged] RangedStrengthBonus
Bronze arrow 0 +7 0 7
Iron arrow +1 +10 1 10
Steel arrow +2 +16 2 16
Mithril arrow +3 +22 3 22
Adamant arrow +5 +31 5 31
Rune arrow +7 +49 7 49
Amethyst arrow +8 +55 8 55
Dragon arrow +9 +60 9 60

Magic

Staves (magic attack + sometimes magic damage)

Magic damage on staves is a percentage (MagicDamageBonus, float — 0.15 reads as +15%). Most low-tier staves are pure magic-attack bumps; only capstone wands/staves carry the damage %.

Tier OSRS Magic atk OSRS Mag dmg AttackBonus[Magic] MagicDamageBonus
Staff of air +6 0 6 0.00
Mystic air staff +14 0 14 0.00
Ancient staff +15 0 15 0.00
Master wand +20 0 20 0.00
Trident of seas +25 +10% 25 0.10
Kodai wand (capstone) +28 +15% 28 0.15

WeaponDamageType = Combat.DamageType.Magic. SwingInterval depends on the spell, not the staff — OSRS spells are 5t (autocast); set staff SwingInterval = 3.0 as a baseline for autoattacks if the project models a staff "bash" cadence.


Armor

Defense matrix only; armor doesn't contribute to attack bonuses except where the OSRS source data does (rare — most lower-tier armor is pure defense). Magic defense is universally negative on metal armor in OSRS; preserved here because the shape matters (metal-armor mages get cratered by magic).

Body (platebody / chainbody, body slot)

Tier OSRS Stab / Slash / Crush / Ranged / Magic def DefenseBonus
Bronze plate +11 / +14 / +11 / +10 / −6 11 / 14 / 11 / 10 / −6
Iron plate +16 / +20 / +16 / +15 / −6 16 / 20 / 16 / 15 / −6
Steel plate +24 / +30 / +24 / +22 / −6 24 / 30 / 24 / 22 / −6
Black plate +29 / +36 / +29 / +25 / −6 29 / 36 / 29 / 25 / −6
Mithril plate +33 / +41 / +33 / +30 / −6 33 / 41 / 33 / 30 / −6
Adamant plate +43 / +54 / +43 / +40 / −6 43 / 54 / 43 / 40 / −6
Rune plate +82 / +80 / +72 / +72 / −6 82 / 80 / 72 / 72 / −6
Capstone (Bandos-style) +82 / +80 / +72 / +72 / −6 (+ Str +4) 82 / 80 / 72 / 72 / −6 (StrengthBonus = 4)
Capstone (Torva-style) +95 / +94 / +85 / +84 / −4 (+ Str +8) 95 / 94 / 85 / 84 / −4 (StrengthBonus = 8)

Helmets (full helm, head slot)

Tier OSRS Stab / Slash / Crush / Ranged / Magic def DefenseBonus
Bronze full helm 0 / +2 / 0 / +1 / −1 0 / 2 / 0 / 1 / −1
Iron full helm +3 / +5 / +1 / +2 / −1 3 / 5 / 1 / 2 / −1
Steel full helm +4 / +6 / +2 / +4 / −1 4 / 6 / 2 / 4 / −1
Mithril full helm +5 / +8 / +5 / +6 / −1 5 / 8 / 5 / 6 / −1
Adamant full helm +7 / +10 / +7 / +8 / −1 7 / 10 / 7 / 8 / −1
Rune full helm +12 / +20 / +18 / +16 / −1 12 / 20 / 18 / 16 / −1
Dragon med helm +14 / +24 / +20 / +18 / −1 14 / 24 / 20 / 18 / −1
Capstone (Serpentine-style) +13 / +13 / +13 / +14 / −1 (+ Atk +5 all) 13 / 13 / 13 / 14 / −1 (also populate AttackBonus: 5/5/5/0/0)

Legs (platelegs, leg slot)

Same shape as platebody scaled ~2/3. Skipped per-tier — copy platebody column-wise at ~65%.

Shields (kiteshield, offhand)

Roughly platebody-scaled to 30-50%, plus modest Stab/Slash/Crush attack on dragon-tier and up.

Tier OSRS def (Stab/Slash/Crush/Ranged/Magic) OSRS atk bonus DefenseBonus AttackBonus
Bronze kite +4 / +5 / +6 / +3 / −1 0 4 / 5 / 6 / 3 / −1
Steel kite +12 / +14 / +16 / +10 / −1 0 12 / 14 / 16 / 10 / −1
Mithril kite +17 / +20 / +21 / +17 / −1 0 17 / 20 / 21 / 17 / −1
Adamant kite +22 / +25 / +27 / +21 / −1 0 22 / 25 / 27 / 21 / −1
Rune kite +44 / +48 / +46 / +44 / −1 0 44 / 48 / 46 / 44 / −1
Dragon sq shield +50 / +52 / +48 / +46 / −1 0 50 / 52 / 48 / 46 / −1
Dragonfire (capstone) +60 / +63 / +56 / +52 / +5 (+10 mag atk) mag +10 60 / 63 / 56 / 52 / 5 0 / 0 / 0 / 0 / 10

Boots / Gloves / Cape / Amulet (jewelry & accessory slots)

These slots in OSRS contribute small flat per-axis bonuses and meaningful Str/Ranged-str/Magic-damage scalars — they're the slot where capstone scalar progression hides.

Item OSRS contribution Recipe
Dragon boots (capstone-tier) +16 melee def, +2 ranged def, Str +4 DefenseBonus: 16/16/16/2/0 · StrengthBonus = 4
Primordial boots +22 / +22 / +22 / +1 / −4 · Str +5 matching matrix · StrengthBonus = 5
Pegasian boots +5 / +5 / +5 / +8 / −1 · RngStr +4 matching matrix · RangedStrengthBonus = 4
Eternal boots +5 / +5 / +5 / +1 / +8 · MagDmg n/a matching matrix; no MagicDamageBonus (boots don't carry %)
Barrows gloves (capstone) +12 all atk axes, +6 all def axes, Str +12, RngStr +8 populate AttackBonus 12/12/12/12/6 + DefenseBonus 6/6/6/6/3 · StrengthBonus = 12 · RangedStrengthBonus = 8
Fire cape +1 atk all, +11 def all, Str +4 AttackBonus 1/1/1/0/0 · DefenseBonus 11/11/11/11/11 · StrengthBonus = 4
Infernal cape +4 atk all, +12 def all, Str +8 AttackBonus 4/4/4/4/1 · DefenseBonus 12/12/12/12/12 · StrengthBonus = 8
Amulet of glory +10 atk all melee, +3 def all, Str +6 AttackBonus 10/10/10/0/0 · DefenseBonus 3/3/3/3/3 · StrengthBonus = 6
Amulet of fury +10 atk all, +8 def all, Str +10 AttackBonus 10/10/10/10/10 · DefenseBonus 8/8/8/8/8 · StrengthBonus = 10
Amulet of torture +15 atk melee · Str +10 AttackBonus 15/15/15/0/0 · StrengthBonus = 10
Amulet of anguish +15 atk ranged · RngStr +10 AttackBonus[Ranged] = 15 · RangedStrengthBonus = 10
Occult necklace +12 atk magic · MagDmg +10% AttackBonus[Magic] = 12 · MagicDamageBonus = 0.10

Capstone & Conditional Recipes (EquipEffects)

Conditional bonuses, multipliers, and set-bonus shapes use the EquipEffects GE path — not row scalars. See STAT_PIPELINE.md "Target-Conditional Modifiers". These are sketches; the GE classes need to be authored in C++ (or BP-inherited from a parameterized base) and dropped into EquipEffects at item-row author time.

Each recipe lists what authoring work is still required; the dependency table near the bottom (Roadmap to Shippable Recipes) summarizes the remaining work per recipe.

Slayer-helm equivalent — +15% melee Str vs assigned target

Row:
  StrengthBonus = 0   (no static contribution)
  EquipEffects  = [ GE_Item_StrengthBonus_Plus15_VsAssignedTarget ]

GE class:
  Modifier:                Strength += 0.15  (Multiply Additive)
  OngoingTagRequirements:  Status.AssignedTarget.MatchingFamily

Status.AssignedTarget.MatchingFamily is declared as a stub in DefaultGameplayTags.ini but has no current publisher — an EquipEffects GE gated on it will load and remain inert until an assignment system ships. Recipe is authorable now; expect it to fire only once that system lands.

Salve amulet — +15% melee acc & dmg vs undead

EquipEffects = [
  GE_Item_Strength_Plus15_VsUndead,
  GE_Item_AttackBonus_Plus15_VsUndead   (or via a synthetic accuracy attribute)
]

Both GEs:
  OngoingTagRequirements: Enemy.Family.Undead

Authoring requires the Enemy.Family.Undead leaf in DefaultGameplayTags.ini plus the two EquipEffects GE classes. The runtime hook that surfaces Enemy.Family.<leaf> tags during damage resolution is already shipped — see FTargetClassificationScope in Source/CRADL/Combat/TargetClassificationScope.h.

Dragon hunter lance — +20% acc & dmg vs dragons

Row:
  StrengthBonus     = (base lance value, e.g. 70)
  AttackBonus[Stab] = (base lance stab atk, e.g. 82)
  EquipEffects      = [
    GE_Item_Strength_Plus20_VsDragons,
    GE_Item_AttackBonus_Plus20_VsDragons
  ]

Conditional GEs:
  OngoingTagRequirements: Enemy.Family.Dragon

Same machinery as Salve amulet. Authoring requires the Enemy.Family.Dragon leaf in DefaultGameplayTags.ini plus the two conditional GE classes.

Berserker necklace + obsidian weapon — set bonus (+20% Str when both worn)

On Berserker necklace:
  EquipEffects = [ GE_Item_Strength_Plus20_WithObsidianWeapon ]

GE class:
  Modifier:                Strength += 0.20  (Multiply Additive)
  OngoingTagRequirements:  Item.Equipped.Material.Obsidian

UEquipmentComponent publishes Item.Equipped.Material.Obsidian on the owning ASC whenever any equipped item carries Item.Material.Obsidian in its row Tags. Authoring requires the Item.Material.Obsidian source tag on the obsidian weapon's FItemRow::Tags, the Item.Equipped.Material.Obsidian mirror in DefaultGameplayTags.ini (already declared), and the GE_Item_Strength_Plus20_WithObsidianWeapon class. No GE on the weapon itself — the necklace's conditional GE handles the +20%.

Ancestral / Ahrim's-style magic set — +6% MagDmg per piece

Three pieces, three identical row entries — no GE needed if the bonus is unconditional:

Per-piece row:
  MagicDamageBonus = 0.06    (stacks additively across all 3 = +18%)

If the design wants the set bonus to require all three pieces (rather than per-piece additive), move it to EquipEffects:

Per-piece row:
  MagicDamageBonus = 0       (no per-piece contribution)
  Tags             += Item.Material.Ancestral
  EquipEffects     = [ GE_Item_MagicDamage_Plus6_AncestralSet ]

GE class:
  Modifier:                MagicDamage += 0.06        (Additive; attribute is the % itself, composes by sum)
  OngoingTagRequirements:  Item.Equipped.Set.AncestralFull

Authoring requires the Item.Material.Ancestral source tag on each piece, the Item.Equipped.Set.AncestralFull mirror (already declared in DefaultGameplayTags.ini), a configured FEquipmentSetThreshold entry on the loadout's UEquipmentComponent ({SourceMaterial: Item.Material.Ancestral, MinPieces: 3, PublishedSetTag: Item.Equipped.Set.AncestralFull}), and the GE_Item_MagicDamage_Plus6_AncestralSet class. The per-piece additive recipe above remains the lower-friction option when full-set gating isn't strictly required.

(Note: the row field is MagicDamageBonus; the GE modifier targets the MagicDamage attribute. The synthesizer in UEquipmentComponent::ApplyEquipEffect bridges the two — runtime reads UCradlAttributeSet::GetMagicDamage(). Final damage scales by (1 + MagicDamage).)


DefenseBonusFlat — when to use it

The OSRS pipeline has no analog. The DefenseBonusFlat row field synthesizes into the universal Defense attribute via UGE_Equip_DefenseBonus at equip-time (synthesized in UEquipmentComponent::ApplyEquipEffect's SynthesiseScalar lambda). Reserve the row field for items whose defensive contribution isn't naturally per-axis:

  • Set bonuses across non-comparable slots (e.g., "Wearing all 4 pieces of Justiciar grants +20 universal defense").
  • Capes / amulets that read as "general toughness" rather than per-type plating.

Do NOT use DefenseBonusFlat for:

  • Consumable defense potions — those write to the Defense attribute directly via their own HasDuration GE (CONSUMABLES.md "Stat Boost Channel"), they don't go through any row field.
  • Per-archetype enemy defensive profiles — those use the UGE_DefMult_* per-type multiplier GEs on the DefenseMultiplier[Stab/Slash/Crush/Ranged/Magic] attributes (STAT_PIPELINE.md "Defense Granularity").

Tier-stamped gear in this document leaves DefenseBonusFlat = 0 and expresses all defensive character through the per-type DefenseBonus matrix.


Quick recipe for new tier authoring

  1. Pick the family table above whose curve shape matches the new item's intended role.
  2. Locate the OSRS tier closest to the intended power band.
  3. Copy the recipe column values into the items DataTable row.
  4. Set WeaponDamageType + DefaultStyle (weapons only) from the family header.
  5. If the item has a conditional / set / multiplier bonus, author a GE class and attach via EquipEffects — leave the row scalar field for that stat at 0 (validator rejects double-author).
  6. Run the items DataTable validator (Source/CRADLEditor/Validators/) — it enforces the one-path-per-stat-per-item rule from STAT_PIPELINE.md "Item Authoring Shape".

Roadmap to Shippable Recipes

Mapping each currently-pending recipe to the work it still needs:

Recipe Needs
Salve amulet (Enemy.Family.Undead) Author GE + ini leaf
Dragon hunter (Enemy.Family.Dragon) Author GE + ini leaf
Slayer-helm equivalent (assigned-target gating) Author GEStatus.AssignedTarget.MatchingFamily is declared as a stub but inert until an assignment system publishes it
Berserker + obsidian set bonus Author GE + ini leaf (equipped-tag bookkeeping shipped)
Ancestral full-set bonus (the EquipEffects variant) Author GE + configure FEquipmentSetThreshold (equipped-tag bookkeeping shipped)
Per-piece additive Ancestral (no full-set requirement) Already shippable — pure row-scalar authoring

The per-piece additive recipe path is the lowest-friction option for every set-style bonus that doesn't strictly require full-set gating. When in doubt, ship the per-piece additive first; the full-set marker is a tightening, not a foundation.