aether-shards/specs/Mission_Debrief.spec.md
Matthew Mone 2c86d674f4 Add mission debrief and procedural mission generation features
- Introduce the MissionDebrief component to display after-action reports, including XP, rewards, and squad status.
- Implement the MissionGenerator class to create procedural side missions, enhancing replayability and resource management.
- Update mission schema to include mission objects for INTERACT objectives, improving mission complexity.
- Enhance GameLoop and MissionManager to support new mission features and interactions.
- Add tests for MissionDebrief and MissionGenerator to ensure functionality and integration within the game architecture.
2026-01-01 16:08:54 -08:00

58 lines
1.9 KiB
Markdown

# **Mission Debrief Specification: After Action Report**
This document defines the UI for the **Mission Results Screen**. It appears after a mission concludes (Victory or Defeat) but before returning to the Hub.
## **1. Visual Design**
Style: A clipboard or field report overlay.
Context: It overlays the frozen 3D scene of the final moment of the battle.
### **Layout**
- **Header:** "MISSION ACCOMPLISHED" (Gold) or "MISSION FAILED" (Red).
- **Primary Stats (Top Row):**
- **XP Gained:** Numeric tally with a filling bar animation.
- **Turns Taken:** Compare against "Par" or limits.
- **Rewards (Middle Panel):**
- **Currency:** Aether Shards & Cores gained.
- **Loot Grid:** A grid of items found. Hovering shows tooltips.
- **Reputation:** A bar showing the Faction Standing change (e.g., "Iron Legion +15").
- **Roster Status (Bottom Row):**
- Portraits of the squad.
- Status: "OK", "Injured", "Dead" (Greyed out).
- Level Up: If a unit leveled up, show a "Level Up!" badge.
- **Footer:** "RETURN TO BASE" button.
## **2. TypeScript Interface**
```ts
// src/types/Debrief.ts
import { ItemInstance } from "./Inventory";
export interface MissionResult {
outcome: "VICTORY" | "DEFEAT";
missionTitle: string;
// Rewards
xpEarned: number;
currency: { shards: number; cores: number };
loot: ItemInstance[];
reputationChanges: { factionId: string; amount: number }[];
// Squad State Changes
squadUpdates: {
unitId: string;
isDead: boolean;
leveledUp: boolean;
damageTaken: number;
}[];
}
```
---
## **3. Logic & Integration**
- **Trigger:** `GameLoop` finishes `RESOLUTION` phase -> calculates `MissionResult` object -> Dispatches `show-debrief`.
- **Flow:** 1. `MissionDebrief` component mounts. 2. Animations play (XP bars fill, Loot pops in). 3. Player reviews. 4. Player clicks "Return". 5. Component dispatches `debrief-closed`. 6. `GameStateManager` transitions to `STATE_META_HUB`.