Combat System Setup Complete ✅
I've set up a complete foundation for agent combat, monsters, and equipment. Here's what you got:
What's Been Created
Core Systems (8 new classes)
- CharacterStats — Base stats (health, speed, attack, defense, magic)
- CharacterSheet — Equipment + stat bonuses management
- Item, Weapon, Armor — Equipment system with automatic bonuses
- Monster — ScriptableObject templates for spawning monsters
- MonsterEncounter — Manages monsters in a room with partial info
- RoomEncounterConfig — Configuration for encounter spawning
- CombatResolver — Skeleton for combat resolution (you'll expand this)
- AutonomousAgentBrain — Updated with peek & retreat mechanics
Updated Existing Classes
- MazeAgent — Now has a CharacterSheet, health tracking, death state
- Room — Can now hold a MonsterEncounter
- AutonomousAgentBrain — Agents now peek at threats and retreat strategically
Documentation (5 comprehensive guides)
README.md — Full architecture and feature overview
QUICK_START.md — 5-minute setup guide
ARCHITECTURE.md — Class diagrams and data flow
INTEGRATION_EXAMPLE.md — Copy-paste integration code
IMPLEMENTATION_CHECKLIST.md — What's done, what's next
COPY_PASTE_EXAMPLES.cs — Code templates
Quick Start (Get It Running in 15 min)
1. Create Monster Assets
In Unity editor:
- Right-click Project > Create > Monster
- Name: "Goblin"
- Set Max Health: 15, Speed: 8, Attack: 4, Defense: 1
- Save to
Assets/Resources/Monsters/Goblin.asset
2. Create Equipment
- Create > Weapon
- Name: "Iron Sword"
- Attack Bonus: 5
- Save to
Assets/Resources/Items/Weapons/IronSword.asset
- Create > Armor
- Name: "Leather Armor"
- Defense Bonus: 3
- Save to
Assets/Resources/Items/Armor/LeatherArmor.asset
3. Update MazeSceneBuilder
private Monster[] _monsterPool;
private Weapon[] _startingWeapons;
private Armor[] _startingArmor;
private void Start()
{
_monsterPool = Resources.LoadAll<Monster>("Monsters/");
_startingWeapons = Resources.LoadAll<Weapon>("Items/Weapons/");
_startingArmor = Resources.LoadAll<Armor>("Items/Armor/");
// ... rest of your code ...
}
private void SpawnAgent(int index, Room startRoom)
{
// Create character sheet with equipment
var stats = new CharacterStats();
var sheet = new CharacterSheet(stats);
if (_startingWeapons.Length > 0)
sheet.EquipWeapon(_startingWeapons[Random.Range(0, _startingWeapons.Length)]);
if (_startingArmor.Length > 0)
sheet.EquipArmor(_startingArmor[Random.Range(0, _startingArmor.Length)]);
// Create agent with sheet
var agent = new MazeAgent($"Agent_{index}", startRoom, sheet);
// ... rest of agent setup ...
brain.Initialize(
controller,
generator,
initialDelay + index * 0.2f,
decisionInterval,
exploreChance,
1.5f, // retreatThreshold - new parameter!
() => IsLevelEnded()
);
}
4. Update MazeGenerator
In BuildRoom() or similar:
private void SpawnEncounter(Room room)
{
if (room.Kind == RoomKind.Start || room.Kind == RoomKind.Exit)
return; // Don't spawn in start/exit rooms
if (_monsterPool == null || _monsterPool.Length == 0)
return;
if (Random.value > 0.7f) // 70% chance
return;
var encounter = new MonsterEncounter();
encounter.SpawnMonsters(_monsterPool, 1, 3); // 1-3 monsters
room.Encounter = encounter;
}
5. Test
- Play in Unity
- Agents should spawn with equipment
- Open a room with a Goblin - agent's brain will peek and decide whether to enter
- If you've wired combat, fight should trigger
Key Features Included
✅ Character System
- Agents and monsters both have stats (health, speed, attack, defense, magic)
- Effective stats calculated with equipment bonuses
- Support for temporary buffs/debuffs
- Health tracking and death state
✅ Equipment System
- Weapons: boost attack (+ optional secondary effects)
- Armor: boost defense (with penalties like slowness)
- Automatic stat bonus application when equipped
- Extensible for new item types (rings, accessories, etc.)
✅ Monster System
- ScriptableObject templates for each monster type
- Loot tables (items that drop when defeated)
- Starting equipment (weapons/armor monsters carry)
- Color-coded for visualization
✅ Encounter System
- Rooms can have monster encounters
- Encounters track alive/defeated monsters
- Incomplete information: agents see 60-100% of actual monsters (don't know the real count)
- Challenge rating calculation (perceived vs actual)
✅ Agent Intelligence
- Peek mechanic: agents look into rooms before entering
- Threat evaluation: calculate danger level before committing
- Retreat logic: avoid dangerous exits if safer options exist
- Uses challenge rating to make decisions
- Falls back to exploration if cornered
What Still Needs Implementation
Priority 1: Combat Resolution
The CombatResolver is a skeleton. You'll add:
- Turn order (based on Speed stat)
- Attack resolution (attack vs defense damage)
- Multiple rounds until victory/defeat
- Loot distribution when agent wins
Priority 2: MazeAgentController Integration
Add combat triggering:
- Detect agent entering a room with living monsters
- Call CombatResolver
- Handle victory (reward, continue) or defeat (agent dies, stops moving)
Priority 3: UI & Feedback
- Health bars for agent + monsters
- Combat log showing what happened each turn
- Equipment/inventory screens
- Audio cues for hits, misses, victories
Priority 4: Monster AI
- Decide which agent to target
- Choose between attack/defend/ability
- Retreat when badly wounded
Priority 5: Advanced Features
- Special abilities (spells, tactics)
- Status effects (poison, stun, buffs)
- Difficulty scaling by room depth
- Boss encounters with unique abilities
File Structure
Assets/Scripts/Maze/Combat/
├── CharacterStats.cs ← Base stats
├── CharacterSheet.cs ← Equipment + bonuses
├── CombatResolver.cs ← Combat skeleton (expand me!)
├── RoomEncounterConfig.cs ← Spawn config
├── Items/
│ ├── Item.cs ← Base class
│ ├── Weapon.cs ← +Attack equipment
│ └── Armor.cs ← +Defense equipment
├── Monsters/
│ ├── Monster.cs ← Template
│ └── MonsterEncounter.cs ← Room combat state
└── [Documentation files]
Assets/Resources/
├── Items/
│ ├── Weapons/
│ │ └── [Your weapons here]
│ └── Armor/
│ └── [Your armor here]
└── Monsters/
└── [Your monsters here]
Architecture Overview
Agent → CharacterSheet → [Equipment Bonuses] → Effective Stats
↑
Weapon/Armor
(apply modifiers)
Room → MonsterEncounter → [Monster Instances] → Combat when Agent enters
↑
Monster Template
(loot table, AI)
AutonomousAgentBrain → Peek at adjacent rooms
→ Get perceived threat (60-100% of actual)
→ Compare to retreat threshold
→ Choose safe exit or fight
Next Steps
- Read
QUICK_START.md — Copy-paste your first setup
- Create test assets — One weapon, armor, monster (5 min)
- Wire up MazeSceneBuilder — Load resources and create agents with equipment (5 min)
- Add encounter spawning — Monsters appear in rooms (5 min)
- Implement basic combat — Fill in CombatResolver.cs (30 min+)
- Integrate into MazeAgentController — Trigger combat when agent enters room (10 min)
- Test and iterate — Tweak numbers, add features
See INTEGRATION_EXAMPLE.md for detailed copy-paste code for each step.
Tips & Best Practices
✅ Do:
- Create assets in the editor (Create > Monster/Weapon/Armor) — it's easier
- Start with simple monsters (low stats, no special abilities)
- Test with 2-3 agents first before ramping up to 10+
- Save weapon/armor/monster assets to
Resources/ for easy loading
- Use different colors for different monster types (helps visualize)
- Add Debug.Log statements in CombatResolver to see what's happening
❌ Don't:
- Try to implement full combat AI before basic damage works
- Create hundreds of asset variants right away — start simple
- Forget to handle dead agents (they should stop moving)
- Assume balanced numbers first time — you'll need to tweak
- Implement every feature at once — do it incrementally
Questions?
- How do agents pick loot? — Implement in CombatResolver.AwardLoot() — currently just a stub
- How do monsters decide targets? — Implement in CombatResolver.ExecuteMonsterTurn() — currently just attacks
- Can I scale difficulty? — Yes! Modify monster stats by room depth in the spawning code
- Can multiple agents fight together? — Architecture supports it, but combat resolve is 1v1 currently
- How do special abilities work? — Not yet implemented, but CharacterSheet supports temporary bonuses as a foundation
You Got This! 🎮
You have all the pieces. Now implement the combat logic and watch your agents fight their way through the maze!
Start with Assets/Scripts/Maze/Combat/QUICK_START.md → then INTEGRATION_EXAMPLE.md → then fill in CombatResolver.cs.
Good luck! 🚀