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

1.9 KiB

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

// 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.