Skip to content

Implement D&D 5e condition system #62

Description

@FirebrickRed

Overview

Implement conditions (Blinded, Charmed, Deafened, Frightened, Grappled, Incapacitated, Invisible, Paralyzed, Petrified, Poisoned, Prone, Restrained, Stunned, Unconscious) with both manual DM application and automatic spell/ability triggers.

Two Implementation Paths

Path 1: Manual DM Commands (Easier - Phase 1)

Commands for DMs to manually apply/remove conditions:

  • /condition apply <player> <condition> [duration]
  • /condition remove <player> <condition>
  • /condition list <player> - Show active conditions
  • /condition clear <player> - Remove all conditions

Examples:

  • /condition apply Alice frightened 3 - Apply frightened for 3 rounds
  • /condition apply Bob paralyzed - Apply paralyzed indefinitely
  • /condition remove Alice frightened

Path 2: Automatic Application (Harder - Phase 2)

Spells and abilities automatically apply conditions:

  • Spell casting triggers condition application
  • Racial abilities check for conditional advantages
  • Combat system enforces condition effects

Examples:

  • Casting Hold Person automatically applies paralyzed condition
  • Racial trait "advantage vs frightened" checks if character has frightened condition
  • Attacking paralyzed creature grants advantage automatically

Condition Effects to Track

Each condition has mechanical effects:

  • Blinded: Disadvantage on attacks, attacks against have advantage
  • Charmed: Can't attack charmer, charmer has advantage on social checks
  • Frightened: Disadvantage on checks/attacks while source visible, can't move closer
  • Paralyzed: Incapacitated, can't move/speak, fails STR/DEX saves, attacks have advantage, crits within 5ft
  • Poisoned: Disadvantage on attacks and ability checks
  • Etc.

Integration Points

  • Racial traits use conditions (e.g., Brave: advantage vs frightened)
  • Spell effects apply conditions (e.g., Hold Person: paralyzed)
  • Combat system enforces condition effects (advantage/disadvantage)
  • Character sheet displays active conditions

Data Model

public class Condition {
    String type;  // frightened, paralyzed, etc.
    int duration;  // -1 for indefinite, or number of rounds
    String source;  // spell name, ability name, or "DM"
    UUID appliedBy;  // UUID of caster/DM
}

// In CharacterSheet
private List<Condition> activeConditions = new ArrayList<>();

Related Issues

Acceptance Criteria

Phase 1 (Manual):

  • DM commands to apply/remove conditions
  • Conditions persist on character sheet
  • Conditions display in character sheet UI
  • Conditions saved/loaded with character

Phase 2 (Automatic):

  • Spell casting can apply conditions
  • Racial traits check conditions for advantages
  • Combat system enforces condition effects
  • Duration tracking (round-based countdown)

Metadata

Metadata

Assignees

No one assigned

    Labels

    combatCombat, HP, initiative, damage

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions