Files
gogobee/gogobee_equipment_appendix.md
prosolis 9e1a1f606c Adv 2.0 D&D layer: Phases 1-8 + Phase 9 SP1+SP2
Combines all uncommitted D&D work into one checkpoint:

Phases 1-8 (per gogobee_dnd_session_summary.md):
- Race/class/stats system, !setup flow, !sheet, !respec
- d20-vs-AC combat with race/class passives, auto-migration
- XP/level-up, skill checks, NPC refund hooks
- Equipment slot mapping, rarity, !rest short/long
- Pre-arm active abilities, resource pools
- Bestiary, !roll/!stats/!level, onboarding DM
- Audit fixes A-I, flavor wiring under internal/flavor/
- Phase 8 weapon dice + armor AC tables (gogobee_equipment_appendix)

Phase 9 SP1 — spell system foundations:
- 79 SpellDefinitions (76 in-scope + 3 reaction-deferred)
- dnd_known_spells, dnd_spell_slots tables
- pending_cast / concentration_* columns on dnd_character
- Slot tables for Mage/Cleric/Ranger, DC + attack-bonus math
- Long-rest refreshes slots; respec wipes spell state
- Auto-grant default known list on !setup confirm and auto-migration

Phase 9 SP2 — !cast / !spells / !prepare commands:
- Out-of-combat HEAL and UTILITY resolve immediately
- Damage/control/buff queue as pending_cast for next combat
- Audit-style save-then-debit, slot refund on save failure
- !cast --drop, concentration supersession, prep-cap enforcement
- Reaction spells refused with Phase 11 note

SP3 (combat-time resolution of pending_cast) and SP4 (full prep/learn
tests) are next. Build clean, full test suite green.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 14:25:21 -07:00

355 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# GogoBee — Equipment Appendix
> **Companion to:** `gogobee_dnd_design_doc.md`
> **Version:** 1.0
> **Source:** D&D 5e SRD, adapted for GogoBee bot mechanics
---
## ⚠️ Implementation Notes
- All damage dice and stat values are **starting baselines**. Balance tuning is a human responsibility.
- Weapon/armor names may be reskinned for flavor (e.g., "TwinBee Aegis" instead of "Shield") but base mechanics must match this spec.
- Class proficiency restrictions from the main design doc apply here. An unproficient player may equip an item but incurs **-4 to attack rolls** and cannot add stat modifiers to damage.
- All gold (gp) costs map 1:1 to GogoBee **coins** unless the economy team decides otherwise.
- Item IDs follow the format: `wpn_<name>` for weapons, `arm_<name>` for armor.
---
## 1. Weapon Properties Glossary
| Property | Effect |
|---|---|
| **Ammunition** | Requires ammo (arrows, bolts, etc.) to fire. Recover half after combat. |
| **Finesse** | Player may use STR or DEX modifier for attack and damage (choose one, apply consistently). |
| **Heavy** | Small creatures (Halfling) have disadvantage on attack rolls with this weapon. |
| **Light** | Can be dual-wielded. Bonus action attack with off-hand (no stat modifier to damage). |
| **Loading** | Can only fire once per turn regardless of extra attacks. |
| **Range** | Listed as normal/long range. Attacks beyond normal range have disadvantage. |
| **Reach** | +5 ft attack range. Relevant if zone/range mechanics are ever added. |
| **Thrown** | Can be thrown as a ranged attack using STR modifier. |
| **Two-Handed** | Requires both hands. Cannot use a shield simultaneously. |
| **Versatile** | Can be wielded one-handed (lower damage) or two-handed (higher damage). |
| **Special** | See individual entry for unique rules. |
---
## 2. Simple Weapons
Simple weapons are proficient for **all classes**.
### 2.1 Simple Melee Weapons
| Weapon | Cost | Damage | Damage Type | Weight | Properties |
|---|---|---|---|---|---|
| Club | 1 gp | 1d4 | Bludgeoning | 2 lb | Light |
| Dagger | 2 gp | 1d4 | Piercing | 1 lb | Finesse, Light, Thrown (20/60) |
| Greatclub | 2 gp | 1d8 | Bludgeoning | 10 lb | Two-Handed |
| Handaxe | 5 gp | 1d6 | Slashing | 2 lb | Light, Thrown (20/60) |
| Javelin | 5 gp | 1d6 | Piercing | 2 lb | Thrown (30/120) |
| Light Hammer | 2 gp | 1d4 | Bludgeoning | 2 lb | Light, Thrown (20/60) |
| Mace | 5 gp | 1d6 | Bludgeoning | 4 lb | — |
| Quarterstaff | 2 gp | 1d6 / 1d8 | Bludgeoning | 4 lb | Versatile |
| Sickle | 1 gp | 1d4 | Slashing | 2 lb | Light |
| Spear | 1 gp | 1d6 / 1d8 | Piercing | 3 lb | Thrown (20/60), Versatile |
### 2.2 Simple Ranged Weapons
| Weapon | Cost | Damage | Damage Type | Weight | Properties |
|---|---|---|---|---|---|
| Crossbow, Light | 25 gp | 1d8 | Piercing | 5 lb | Ammunition (80/320), Loading, Two-Handed |
| Dart | 5 cp | 1d4 | Piercing | 0.25 lb | Finesse, Thrown (20/60) |
| Shortbow | 25 gp | 1d6 | Piercing | 2 lb | Ammunition (80/320), Two-Handed |
| Sling | 1 sp | 1d4 | Bludgeoning | — | Ammunition (30/120) |
---
## 3. Martial Weapons
Martial weapons require class proficiency. See main design doc Section 3.2 for class proficiency tables.
### 3.1 Martial Melee Weapons
| Weapon | Cost | Damage | Damage Type | Weight | Properties |
|---|---|---|---|---|---|
| Battleaxe | 10 gp | 1d8 / 1d10 | Slashing | 4 lb | Versatile |
| Flail | 10 gp | 1d8 | Bludgeoning | 2 lb | — |
| Glaive | 20 gp | 1d10 | Slashing | 6 lb | Heavy, Reach, Two-Handed |
| Greataxe | 30 gp | 1d12 | Slashing | 7 lb | Heavy, Two-Handed |
| Greatsword | 50 gp | 2d6 | Slashing | 6 lb | Heavy, Two-Handed |
| Halberd | 20 gp | 1d10 | Slashing | 6 lb | Heavy, Reach, Two-Handed |
| Lance | 10 gp | 1d12 | Piercing | 6 lb | Reach, Special (disadvantage vs. adjacent) |
| Longsword | 15 gp | 1d8 / 1d10 | Slashing | 3 lb | Versatile |
| Maul | 10 gp | 2d6 | Bludgeoning | 10 lb | Heavy, Two-Handed |
| Morningstar | 15 gp | 1d8 | Piercing | 4 lb | — |
| Pike | 5 gp | 1d10 | Piercing | 18 lb | Heavy, Reach, Two-Handed |
| Rapier | 25 gp | 1d8 | Piercing | 2 lb | Finesse |
| Scimitar | 25 gp | 1d6 | Slashing | 3 lb | Finesse, Light |
| Shortsword | 10 gp | 1d6 | Piercing | 2 lb | Finesse, Light |
| Trident | 5 gp | 1d6 / 1d8 | Piercing | 4 lb | Thrown (20/60), Versatile |
| War Pick | 5 gp | 1d8 | Piercing | 2 lb | — |
| Warhammer | 15 gp | 1d8 / 1d10 | Bludgeoning | 2 lb | Versatile |
| Whip | 2 gp | 1d4 | Slashing | 3 lb | Finesse, Reach |
### 3.2 Martial Ranged Weapons
| Weapon | Cost | Damage | Damage Type | Weight | Properties |
|---|---|---|---|---|---|
| Crossbow, Hand | 75 gp | 1d6 | Piercing | 3 lb | Ammunition (30/120), Light, Loading |
| Crossbow, Heavy | 50 gp | 1d10 | Piercing | 18 lb | Ammunition (100/400), Heavy, Loading, Two-Handed |
| Longbow | 50 gp | 1d8 | Piercing | 2 lb | Ammunition (150/600), Heavy, Two-Handed |
| Net | 1 gp | — | — | 3 lb | Special: Restrained condition on hit (STR DC 10 to escape). Large or smaller targets only. |
---
## 4. Ammunition
Ammo is tracked as a consumable. Players recover **half their spent ammo** after each combat (round down).
| Ammunition | Cost (20 units) | Used By |
|---|---|---|
| Arrows | 1 gp | Shortbow, Longbow |
| Bolts | 1 gp | Crossbow (light, heavy, hand) |
| Sling Bullets | 4 cp | Sling |
| Blowgun Needles | 1 gp | Blowgun |
| Darts | 5 cp each | Darts (see Simple Ranged) |
---
## 5. Armor
### 5.1 Light Armor
Proficiency: Rogue, Ranger, Cleric (and Fighter by inheritance).
| Armor | Cost | AC | STR Req. | Stealth | Weight |
|---|---|---|---|---|---|
| Padded | 5 gp | 11 + DEX mod | — | Disadvantage | 8 lb |
| Leather | 10 gp | 11 + DEX mod | — | — | 10 lb |
| Studded Leather | 45 gp | 12 + DEX mod | — | — | 13 lb |
### 5.2 Medium Armor
Proficiency: Fighter, Ranger, Cleric.
DEX bonus to AC capped at **+2** for all medium armor.
| Armor | Cost | AC | STR Req. | Stealth | Weight |
|---|---|---|---|---|---|
| Hide | 10 gp | 12 + DEX mod (max +2) | — | — | 12 lb |
| Chain Shirt | 50 gp | 13 + DEX mod (max +2) | — | — | 20 lb |
| Scale Mail | 50 gp | 14 + DEX mod (max +2) | — | Disadvantage | 45 lb |
| Breastplate | 400 gp | 14 + DEX mod (max +2) | — | — | 20 lb |
| Half Plate | 750 gp | 15 + DEX mod (max +2) | — | Disadvantage | 40 lb |
### 5.3 Heavy Armor
Proficiency: Fighter only.
Heavy armor grants **no DEX bonus** to AC. STR requirements must be met or movement is reduced (flavor only in bot context — apply -2 to DEX-based rolls as penalty).
| Armor | Cost | AC | STR Req. | Stealth | Weight |
|---|---|---|---|---|---|
| Ring Mail | 30 gp | 14 | — | Disadvantage | 40 lb |
| Chain Mail | 75 gp | 16 | STR 13 | Disadvantage | 55 lb |
| Splint | 200 gp | 17 | STR 15 | Disadvantage | 60 lb |
| Plate | 1,500 gp | 18 | STR 15 | Disadvantage | 65 lb |
### 5.4 Shield
| Item | Cost | AC Bonus | Proficiency | Weight |
|---|---|---|---|---|
| Shield | 10 gp | +2 | Fighter, Ranger, Cleric | 6 lb |
A shield occupies the **off-hand slot**. Cannot be used with Two-Handed weapons.
---
## 6. Adventuring Gear & Consumables
These are available at Thom Krooke's shop or as dungeon loot.
### 6.1 Potions
| Item | Cost | Effect | Notes |
|---|---|---|---|
| Potion of Healing | 50 gp | Restore 2d4+2 HP | Bonus action to drink in combat |
| Potion of Greater Healing | 100 gp | Restore 4d4+4 HP | Bonus action to drink in combat |
| Potion of Superior Healing | 500 gp | Restore 8d4+8 HP | Rare drop only; not in shop |
| Antitoxin | 50 gp | Advantage on CON saves vs. poison for 1 hour / 3 combats | — |
| Potion of Speed | 250 gp | +1 attack per turn for 1 minute / 1 combat | Rare drop only |
| Potion of Resistance | 300 gp | Resistance to one damage type for 1 hour | Type specified on item |
### 6.2 Utility Items
| Item | Cost | Effect |
|---|---|---|
| Rope, Hemp (50 ft) | 1 gp | Enables Athletics checks for climbing/binding |
| Torch | 1 cp | Removes darkness penalty in underground zones (future) |
| Thieves' Tools | 25 gp | Required for Rogue lockpicking checks |
| Herbalism Kit | 5 gp | Required for crafting basic potions (future) |
| Spell Component Pouch | 25 gp | Required for Mage spells with material components |
| Holy Symbol | 5 gp | Required for Cleric divine abilities |
| Arcane Focus (Staff) | 5 gp | Alternative to Spell Component Pouch for Mage |
| Arrows (20) | 1 gp | Ammunition |
| Bolts (20) | 1 gp | Ammunition |
| Quiver | 1 gp | Holds 20 arrows or bolts |
---
## 7. Magic Weapons (Base Templates)
Magic weapons drop from dungeon encounters and high-CR monsters. They use the mundane weapon as a base, then add a bonus and optionally a magical property. Attunement required for +2 and above.
### 7.1 Bonus Weapon Tiers
| Tier | Attack Bonus | Damage Bonus | Rarity | Attunement |
|---|---|---|---|---|
| +1 | +1 to attack rolls | +1 to damage | Uncommon | No |
| +2 | +2 to attack rolls | +2 to damage | Rare | Yes |
| +3 | +3 to attack rolls | +3 to damage | Very Rare | Yes |
### 7.2 Named Magic Weapons (Starter Set)
These are specific named items with unique properties. Each requires attunement.
| Item | Base | Rarity | Bonus | Special Property |
|---|---|---|---|---|
| **Flame Tongue** | Longsword | Rare | +1 | On hit: +2d6 fire damage. Command word activates flame (light source). |
| **Sword of Wounding** | Shortsword | Rare | +1 | On hit: target cannot regain HP until start of their next turn. |
| **Frost Brand** | Greatsword | Very Rare | +1 | On hit: +1d6 cold damage. Cold resistance while attuned. |
| **Dagger of Venom** | Dagger | Rare | +1 | Once per day: coat blade with poison. Next hit: +2d10 poison, CON DC 15 or Poisoned. |
| **Bow of Speed** | Longbow | Very Rare | +2 | Ignore Loading property on any crossbow. +1 attack per turn. |
| **Mace of Smiting** | Mace | Rare | +1 | On crit vs. construct: +2d6 bonus damage. |
| **Staff of the Adder** | Quarterstaff | Uncommon | +1 | Cleric/Ranger only. Bonus action: animate as snake (1d4 piercing, poison on bite CON DC 11). |
| **Rapier of Puncturing** | Rapier | Uncommon | +1 | On crit: target makes CON DC 13 or loses 2d4 HP at start of their next 3 turns (bleed). |
---
## 8. Magic Armor (Base Templates)
### 8.1 Bonus Armor Tiers
| Tier | AC Bonus | Rarity | Attunement |
|---|---|---|---|
| +1 | +1 to AC | Rare | No |
| +2 | +2 to AC | Very Rare | Yes |
| +3 | +3 to AC | Legendary | Yes |
### 8.2 Named Magic Armor (Starter Set)
| Item | Base | Rarity | Special Property |
|---|---|---|---|
| **Armor of Resistance** | Any | Rare | Resistance to one damage type (specified on item). Attunement. |
| **Demon Armor** | Plate | Very Rare | +1 AC. Unarmed strikes deal 1d8 + STR slashing. Cursed: cannot be removed without *Remove Curse* spell. |
| **Dragon Scale Mail** | Scale Mail | Very Rare | +1 AC. Resistance to one dragon damage type. Advantage on saves vs. dragons. |
| **Elven Chain** | Chain Shirt | Rare | Treated as light armor for proficiency. No Stealth disadvantage. |
| **Mithral Armor** | Medium or Heavy | Uncommon | No STR requirement. No Stealth disadvantage. No attunement. |
| **Adamantine Armor** | Medium or Heavy | Uncommon | Any critical hit against wearer becomes a normal hit instead. |
| **Spellguard Shield** | Shield | Very Rare | Advantage on saves vs. spells. Magic missiles cannot hit wearer. |
| **Cloak of Protection** | — (Amulet slot) | Uncommon | +1 to AC and all saving throws. Attunement. |
---
## 9. Class-Weapon Affinity Matrix
Summary of which weapon categories each class can use with full proficiency:
| Weapon Category | Fighter | Rogue | Mage | Cleric | Ranger |
|---|---|---|---|---|---|
| Simple Melee | ✅ | ✅ | ✅ | ✅ | ✅ |
| Simple Ranged | ✅ | ✅ | ✅ | ✅ | ✅ |
| Martial Melee | ✅ | ⚠️ Shortsword, Rapier, Scimitar, Longsword only | ❌ | ❌ | ✅ |
| Martial Ranged | ✅ | ⚠️ Hand crossbow only | ❌ | ❌ | ✅ |
| Heavy Armor | ✅ | ❌ | ❌ | ❌ | ❌ |
| Medium Armor | ✅ | ❌ | ❌ | ✅ | ✅ |
| Light Armor | ✅ | ✅ | ❌ | ✅ | ✅ |
| Shield | ✅ | ❌ | ❌ | ✅ | ✅ |
---
## 10. Carry Weight (Optional Mechanic)
If inventory weight is implemented, use these rules:
- **Carry Capacity:** STR score × 15 lbs
- **Encumbered** (> STR × 5 lbs): -10 to movement speed (flavor; -1 to DEX rolls)
- **Heavily Encumbered** (> STR × 10 lbs): -20 to movement; disadvantage on STR/DEX/CON checks
- **Over capacity:** Cannot move. Combat actions at disadvantage.
Recommended: implement carry weight as a soft warning only in v1. Hard enforcement deferred to future patch.
---
## 11. Go Data Structures — Equipment Extension
```go
// WeaponProfile extends the base Item struct for weapons.
type WeaponProfile struct {
ItemID string `json:"item_id"`
DamageDie string `json:"damage_die"` // e.g. "1d8", "2d6"
DamageType string `json:"damage_type"` // slashing, piercing, bludgeoning
Properties []string `json:"properties"` // finesse, light, thrown, etc.
RangeNormal int `json:"range_normal"` // 0 if melee
RangeLong int `json:"range_long"` // 0 if melee
VersatileDie string `json:"versatile_die"` // e.g. "1d10"; empty if not versatile
MagicBonus int `json:"magic_bonus"` // 0 for mundane
MagicProp string `json:"magic_prop"` // empty for mundane
}
// ArmorProfile extends the base Item struct for armor.
type ArmorProfile struct {
ItemID string `json:"item_id"`
ArmorType string `json:"armor_type"` // light, medium, heavy, shield
BaseAC int `json:"base_ac"`
MaxDEXBonus int `json:"max_dex_bonus"` // -1 = unlimited (light), 2 = medium, 0 = heavy
STRRequire int `json:"str_require"` // 0 if no requirement
StealthDisad bool `json:"stealth_disad"`
MagicBonus int `json:"magic_bonus"`
MagicProp string `json:"magic_prop"`
}
// AmmoStack tracks a player's ammunition supply.
type AmmoStack struct {
PlayerID string `json:"player_id"`
Type string `json:"ammo_type"` // arrows, bolts, sling_bullets, etc.
Quantity int `json:"quantity"`
}
// ACResult holds the resolved AC for a player at combat time.
// Computed from equipped armor + DEX modifier + magic bonuses.
type ACResult struct {
Base int `json:"base"`
DEXApplied int `json:"dex_applied"`
MagicBonus int `json:"magic_bonus"`
ShieldBonus int `json:"shield_bonus"`
Total int `json:"total"`
}
// ComputeAC resolves a player's AC from their equipped gear and stats.
func ComputeAC(armor *ArmorProfile, shield *ArmorProfile, dexMod int) ACResult {
ac := ACResult{}
if armor == nil {
// Unarmored: 10 + DEX
ac.Base = 10
ac.DEXApplied = dexMod
} else {
ac.Base = armor.BaseAC + armor.MagicBonus
switch armor.MaxDEXBonus {
case -1: // light: full DEX
ac.DEXApplied = dexMod
case 2: // medium: cap at +2
if dexMod > 2 { ac.DEXApplied = 2 } else { ac.DEXApplied = dexMod }
case 0: // heavy: no DEX
ac.DEXApplied = 0
}
}
if shield != nil {
ac.ShieldBonus = 2 + shield.MagicBonus
}
ac.Total = ac.Base + ac.DEXApplied + ac.ShieldBonus
return ac
}
```
---
*End of Equipment Appendix. Reference alongside `gogobee_dnd_design_doc.md` in all Claude Code sessions.*