# MagicItem

> Kinbarrow modding reference — content tree `45d0fe274f851548`, version `0.2.0+main.c05ef2b`.

`magic_items/<id>.srd.ron` — one magic item per file; stem == id. The NEW orthogonal axis on the reified-arm substrate: a magic bonus, a rarity, an attunement flag, and optional charges — carried as append-only PROPS on the reified item (`MAGIC` resolves this def, the ARMS_ID/MATERIAL id-string idiom), never new Rel edges. Two shapes ride one struct (the typing rule: content is data, not code): - a magic ARM carries `base_arm` (a weapons/armor id), reifies through the arms path (`ARMS_ID = base_arm`), and its attack/damage/AC bonuses feed the equipped-kit combat read; - a WONDROUS item leaves `base_arm` absent (a ring/cloak is no weapon or armor row), and its AC/save bonuses ride ATTUNEMENT — active only while the soul is attuned, never an equip slot. The bonuses are authored SRD PRIMITIVES; worth DERIVES (the rarity factor over the mundane craft worth). A magic item that grants NOTHING — no bonus and no charges — has no substrate and is refused by the validator (the ledger-don't-fake rule, the feat precedent).

**Note on syntax:** these files are RON, not JSON. The shapes below are exact,
but punctuation follows RON — read a real `data/*.ron` file alongside.

## Fields

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ac_bonus` | `int64` | default `0` | +N to Armor Class (magic armor/shield, or a ring/cloak of protection). 0 = none. |
| `attack_bonus` | `int64` | default `0` | +N to attack rolls made with this magic WEAPON (the SRD "+X to attack and damage"). 0 = none. |
| `base_arm` | `string` | optional | The base weapon/armor id this enchants (a `+1 longsword`) — resolves against the arms tables at load. Absent = a wondrous item (ring/cloak). |
| `damage_bonus` | `int64` | default `0` | +N to damage rolls made with this magic WEAPON. 0 = none. |
| `id` | `string` | required |  |
| `max_charges` | `uint32` | default `0` | A charged item's maximum charges (a wand). 0 = no charges. Charges SPENT ride the item's `CHARGES` prop (the SLOTS_SPENT idiom — spent is the state, capacity derives). |
| `name` | `string` | required |  |
| `rarity` | `MagicRarity` | required | SRD magic-item rarity — the worth factor derives from it. |
| `recharge` | `Recharge` | optional | When spent charges refresh ([`Recharge`]). Default `None`. |
| `requires_attunement` | `boolean` | default `false` | SRD attunement: the bonus applies ONLY while attuned, and a soul attunes to at most three items (`equip::ATTUNEMENT_SLOTS`). |
| `save_bonus` | `int64` | default `0` | +N to saving throws (a ring/cloak of protection). 0 = none. |
| `source` | `Source` | required |  |

## Nested shapes

### MagicRarity

SRD 5.1 magic-item rarity. The magic axis is ORTHOGONAL to the quality tier: a +1 sword is Uncommon whatever its craftsmanship, and a Masterwork mundane blade is no rarer than a Poor one. The engine branches on rarity for the worth FACTOR ([`MagicRarity::worth_factor`]) — the one place magic touches the pricing seam.

`Common`, `Uncommon`, `Rare`, `VeryRare`, `Legendary`

### Recharge

A charged item's recharge cadence. `None` = no charges (a static enchantment); `Dawn` = the SRD's "regains `1dN` charges daily at dawn" — we recharge to FULL (the per-die randomness is ledgered), the honest daily cadence the world sweep restores (`equip::recharge_dawn`).

`None`, `Dawn`

### Source

Every file's top-level value carries `source`.

#### Source::Srd51

SRD 5.1 — the System Reference Document, the shipped baseline.

#### Source::Original

Original content authored for this game (not from the SRD).

#### Source::Personal

A player's own transcription or third-party content in a mod tree — provenance stays honest without borrowing the base tree's markers. Never used by shipped files.

