dnd-rag-g / docs /DEBUG_MODE.md
alexchilton's picture
fix: Critical encounter cooldown bug preventing NPC deaths in combat
0d5dc34
# Debug Mode - Scenario Testing
## Overview
Debug mode provides predefined test scenarios for manually testing combat, NPCs, and game features without having to trigger random encounters or navigate to specific locations.
## Enabling Debug Mode
Edit `dnd_rag_system/config/settings.py`:
```python
DEBUG_MODE = True
```
When enabled, a "🧪 Debug Scenario (Optional)" dropdown appears in the Gradio UI after character selection.
## Available Scenarios
| Scenario | Location | NPCs | Items | Purpose |
|----------|----------|------|-------|---------|
| Random Start | Random | None | None | Normal game start |
| Goblin Fight | Goblin Cave Entrance | Goblin | None | Test basic combat |
| Goblin with Treasure | Goblin Cave Entrance | Goblin | Hidden Chest | Test combat + looting |
| Goblin Wolf Rider | Forest Ambush Site | Goblin, Wolf | Rope, Torch | **Multi-enemy combat test** |
| Wolf Pack | Dark Forest Clearing | 2x Wolf | None | Test multi-enemy combat |
| Skeleton Guardian | Ancient Ruins | Skeleton | Ancient Sword | Test undead combat |
| Dragon Encounter | Dragon's Lair Approach | Young Red Dragon | Dragon Hoard | Test high-CR encounter |
| Safe Inn | The Prancing Pony Inn | Innkeeper Butterbur | Healing Potion | Test NPC dialogue |
| Shopping District | The Market Square | Merchant, Blacksmith | None | Test shop system |
## Usage
1. Enable `DEBUG_MODE = True` in settings
2. Start Gradio interface: `python web/app_gradio.py`
3. Select a character (Thorin or Elara)
4. Select a debug scenario from dropdown
5. Click "Load Character"
6. Game starts in the specified scenario with NPCs and items pre-spawned
## Implementation Details
### Scenario Format
```python
DEBUG_SCENARIOS = [
(scenario_name, location_name, npcs_to_spawn, items_to_add),
...
]
```
### How It Works
1. `load_character_with_debug()` checks if scenario is selected
2. If yes: Loads character at specific location and injects NPCs/items
3. If no: Normal character load with random location
4. NPCs are added to `gm.session.npcs_present`
5. Items are added to `gm.session.location_items`
### Code Location
- UI: `web/app_gradio.py` lines ~72-81 (scenario definitions), ~1117-1124 (dropdown UI)
- Logic: `web/app_gradio.py` lines ~379-470 (`load_character_with_debug()`)
- Settings: `dnd_rag_system/config/settings.py` line 188
## Adding New Scenarios
Edit `DEBUG_SCENARIOS` list in `web/app_gradio.py`:
```python
DEBUG_SCENARIOS = [
...
("My Custom Scenario", "Location Name", ["NPC1", "NPC2"], ["Item1", "Item2"]),
]
```
**Note:** Location must exist in `STARTING_LOCATIONS` or `COMBAT_LOCATIONS` lists, or use custom name with generic description.
## Use Cases
1. **Combat Testing** - Test specific monster types without triggering random encounters
2. **NPC Hallucination Testing** - Verify GM uses correct monster names (e.g., "Goblin Fight" scenario)
3. **Location Stability Testing** - Verify location doesn't teleport during combat
4. **Item/Loot Testing** - Test item discovery and inventory systems
5. **Shop Testing** - Quickly access merchant NPCs
6. **Regression Testing** - Verify bug fixes work in specific scenarios
## Related Files
- `docs/BUG_FIXES.md` - Documents location/NPC hallucination fixes that debug mode helps test
- `docs/FLEXIBLE_TESTING_SYSTEM.md` - Environment variable testing (different approach)
- `tests/test_location_extraction.py` - Automated tests for location extraction
- `tests/test_encounter_hallucination_fix.py` - Automated tests for NPC filtering
## Future Enhancements
Potential additions:
- Save/load custom scenarios from JSON
- Multi-step scenario scripting (e.g., "spawn goblin after 3 turns")
- Scenario victory conditions
- Scenario-specific objectives
- HP/gold overrides for testing edge cases