This document provides a comprehensive testing checklist for the new casting visuals system implemented in LuminariMUD. The system adds school-specific, class-specific, and metamagic-enhanced visual descriptions to spellcasting.
Use these in-game commands to test the casting visuals:
cast 'magic missile' <target> # Test EVOCATION school
cast 'cure light wounds' self # Test CONJURATION school (healing)
cast 'detect magic' # Test DIVINATION school
cast 'charm person' <target> # Test ENCHANTMENT school
cast 'shield' # Test ABJURATION school
cast 'invisibility' self # Test ILLUSION school
cast 'ray of enfeeblement' <tar> # Test NECROMANCY school
cast 'bull strength' self # Test TRANSMUTATION school
Goal: Verify each spell school displays unique themed messages.
| School | Test Spell | Expected Visual Theme |
|---|---|---|
| ABJURATION | shield, mage armor | White protective shimmer, wards |
| CONJURATION | acid arrow, summon monster | Purple reality rifts, extraplanar |
| DIVINATION | detect magic, identify | Yellow inner light, visions |
| ENCHANTMENT | charm person, sleep | Magenta hypnotic, mesmerizing |
| EVOCATION | magic missile, fireball | Red crackling energy |
| ILLUSION | invisibility, blur | Blue shimmering, reality blur |
| NECROMANCY | chill touch, enervation | Dark shadows, deathly |
| TRANSMUTATION | bull strength, enlarge | Green matter shifting |
Test Steps:
- Cast at least one spell from each school
- Verify start message matches school theme
- Verify completion message matches school theme
- Check color codes display correctly
Goal: Verify messages adapt to different target types.
| Target Type | Test | Expected Variation |
|---|---|---|
| SELF | cast 'shield' | Message refers to self |
| CHAR | cast 'cure light' | Message shows target name |
| OBJ | cast 'identify' | Message references object |
| NONE | cast 'detect magic' | Generic room effect |
Test Steps:
- Cast a spell targeting yourself
- Cast a spell targeting another character
- Cast a spell targeting an object
- Cast an area/no-target spell
Goal: Verify different classes have distinct casting descriptions.
| Class | Expected Style |
|---|---|
| WIZARD | "traces precise arcane sigils" |
| SORCERER | "channels raw magical energy instinctively" |
| CLERIC | "raises holy symbol" |
| DRUID | "communes with nature" |
| BARD | "weaves magic through melodic incantation" |
| PALADIN | "invokes righteous power" |
| WARLOCK | "draws upon eldritch energies" |
| PSIONICIST | "focuses mind as psionic energy builds" |
Test Steps:
- Create/use characters of different casting classes
- Cast the same spell from different classes
- Verify class-specific style appears in start message
- Verify school flavor additions are appended
Goal: Verify metamagic modifiers display unique visual effects.
| Metamagic | Expected Visual |
|---|---|
| QUICKEN | "With impossible speed" |
| MAXIMIZE | "unnaturally dense energy pulses" |
| HEIGHTEN | "elevated magical intensity radiates" |
| EMPOWER | "crackling excess energy arcs wildly" |
| SILENT | "in eerie silence" |
| STILL | "perfectly motionless" |
| EXTEND | "elongated magical threads weave" |
Test Steps:
- Cast a quickened spell - verify speed description
- Cast an empowered spell - verify energy description
- Cast a silent spell - verify silence description
- Cast a spell with multiple metamagic - verify combinations
Progress Display:
- Metamagic shows as
[QUICKENED],[EMPOWERED], etc. - Multiple metamagics display all labels
Goal: Verify casting progress shows escalating narrative.
Test with a multi-round spell (3+ rounds casting time)
Expected progression (example for EVOCATION):
- Stage 0: "Sparks of raw energy gather at your fingertips..."
- Stage 1: "The energy crackles and grows, barely contained..."
- Stage 2: "Power surges through you, building to dangerous levels..."
- Stage 3: "The arcane force strains against your control!"
- Stage 4: "Destructive power reaches its apex!"
Test Steps:
- Cast a spell with 3+ round casting time
- Observe progress messages each round
- Verify messages escalate in intensity
- Verify observer messages appear to others in room
- Verify progress dots show remaining time
Goal: Verify ambient effects trigger for powerful spells.
| Spell Circle | Intensity | Chance |
|---|---|---|
| 1-3 | Subtle | 15% per tick |
| 4-6 | Moderate | 25% per tick |
| 7-9 | Dramatic | 40% per tick |
Test Steps:
- Cast low-circle spells - may see subtle effects
- Cast mid-circle spells - moderate effects more common
- Cast high-circle spells - dramatic effects frequent
- Verify environmental messages go to room (not caster)
- Verify school-themed environmental effects appear
Toggle Test:
- Comment out
CASTING_ENV_EFFECTS_ENABLEDin mud_options.h - Recompile and verify no environmental effects appear
- Re-enable and verify effects return
Goal: Verify observers see appropriate messages based on Spellcraft.
Test Setup: Need two characters in same room.
| Observer Spellcraft | Expected |
|---|---|
| High (success) | Sees actual spell name |
| Low (failure) | Sees obfuscated syllables |
Test Steps:
- Have observer with high Spellcraft watch casting
- Verify observer sees spell name in message
- Have observer with low Spellcraft watch casting
- Verify observer sees gibberish syllables
Goal: Verify casting visuals handle interruptions gracefully.
Test Steps:
- Start casting a multi-round spell
- Interrupt with movement - verify abort message
- Start casting again
- Interrupt with damage - verify abort message
- Verify no lingering visual state
Goal: Verify NPCs cast with appropriate visuals.
Test Steps:
- Trigger NPC spellcasting (combat or script)
- Verify NPC uses school-based messages (no class style)
- Verify progress/observer messages work for NPC casters
Verified by code review:
- All static buffers use MAX_STRING_LENGTH (49152 bytes)
- All string operations use safe functions (snprintf, strlcat)
- All array accesses have bounds checking
- No dynamic memory allocation in message generation
- No noticeable lag during casting
- Server CPU usage remains normal during heavy casting
- Memory usage stable over extended play session
- No crashes or hangs during casting
-
Static Buffers: Functions returning char* use static buffers. Not thread-safe, but MUD is single-threaded so this is acceptable.
-
Environmental Effects: Can be disabled via
CASTING_ENV_EFFECTS_ENABLEDif deemed too spammy. -
Class Style Coverage: Not all classes have defined casting styles. Those without styles fall back to school-only messages.
-
Prestige Classes: Most prestige classes don't have unique styles and use base class behavior.
/* Enable/disable environmental effects during casting */
#define CASTING_ENV_EFFECTS_ENABLEDIn casting_visuals.h:
#define ENV_CHANCE_SUBTLE 15 /* Low spells: 15% per tick */
#define ENV_CHANCE_MODERATE 25 /* Mid spells: 25% per tick */
#define ENV_CHANCE_DRAMATIC 40 /* High spells: 40% per tick */If issues are found, document with:
**Bug Description**: [What went wrong]
**Steps to Reproduce**:
1. [Step 1]
2. [Step 2]
**Expected Behavior**: [What should happen]
**Actual Behavior**: [What actually happened]
**Character Info**: [Class, level, spell cast]
**Server Log**: [Any relevant log messages]
| Tester | Date | Status |
|---|---|---|
Testing Guide created: 2025-11-26 For: LuminariMUD Casting Visuals System