Skip to content

Add saving throw and ability check rolling to character sheet #60

Description

@FirebrickRed

Priority: MEDIUM
Status: TODO
Depends on: Issue #55 (Skill rolling system - prerequisite)

Description

Extend the interactive rolling system (Issue #55) to support saving throws and raw ability checks. Players should be able to click ability scores in the character sheet to roll saves or ability checks.

Current State

D&D 5e Context

Saving Throws:

  • Roll: d20 + ability modifier + proficiency (if proficient)
  • Example: DEX save vs fireball = d20 + DEX mod + prof bonus
  • Proficiency determined by class (e.g., Rogue proficient in DEX/INT saves)

Ability Checks:

  • Roll: d20 + ability modifier (no proficiency)
  • Example: Raw STR check to break door = d20 + STR mod
  • Used when no specific skill applies

Proposed Implementation

UI Flow

Option A: Click ability score in character sheet

Player clicks "STR 16 (+3)" in character sheet
→ Opens menu:
   [Roll STR Check]        (d20 + 3)
   [Roll STR Save]         (d20 + 3 + prof if proficient)
   [Cancel]
→ Each option leads to advantage/disadvantage menu (reuse from Issue #55)

Option B: Dedicated section in skills menu

Skills Menu:
[STR] [Athletics]
      [Roll STR Check]  [Roll STR Save]

[DEX] [Acrobatics] [Sleight of Hand] [Stealth]  
      [Roll DEX Check]  [Roll DEX Save]

Recommend Option A - keeps character sheet interactive.

Roll Options Menu

Reuse existing RollOptionsMenu from Issue #55:

  • Normal Roll
  • Advantage
  • Disadvantage
  • Show Modifier Only
  • Cancel

Chat Output Examples

Saving Throw:

[CharName] rolled DEX save: 18 (d20: 13 +3 +2)
[CharName] rolled STR save with advantage: 22 (d20: 17, 12 +3)

Ability Check:

[CharName] rolled STR check: 15 (d20: 12 +3)
[CharName] rolled CHA check with disadvantage: 8 (d20: 6, 14 +2)

Acceptance Criteria

  • Click ability scores to open roll type menu
  • "Roll [Ability] Check" option (d20 + modifier)
  • "Roll [Ability] Save" option (d20 + modifier + prof if proficient)
  • Saving throw proficiency correctly applied based on class
  • Both options support advantage/disadvantage
  • Results broadcast to chat with proper formatting
  • "Show Modifier Only" works for both types

Technical Implementation

New Components

  • AbilityRollOptionsMenu (or reuse/extend RollOptionsMenu?)
  • Add ROLL_ABILITY_CHECK and ROLL_SAVING_THROW to MenuAction
  • Update ViewCharacterSheetMenu to make ability items clickable

Reuse from Issue #55

  • RollOptionsMenu (advantage/disadvantage selection)
  • Roll logic (rollD20, rollAdvantage, rollDisadvantage)
  • Chat broadcast formatting
  • MenuAction pattern

Data Needed

  • Ability modifier: character.getModifier(ability)
  • Save proficiency: character.getMainClass().getSavingThrows().contains(ability)
  • Proficiency bonus: character.getProficiencyBonus()

Related Issues

Future Enhancements

  • Death saving throws (special case - no modifiers)
  • Concentration saves (CON save with special DC)
  • Contested checks (opposed rolls)
  • Save DC display for spells

Notes

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions