Chessistics/PLAN_playtest.md
Samuel Bouchet 2d1aea0a7a Snapshot campaign system progress before automation harness
Bundles in-flight work on the campaign/missions system (CampaignDef,
MissionDef, TerrainPatch, TransformerDef, MissionChecker, CampaignLoader,
FlavorBanner, transformer rules), plan files, and matching tests. Baseline
commit so the upcoming automation testing harness lands on a clean tree.
2026-04-16 21:22:49 +02:00

2.5 KiB

Plan Playtest Fixes

Problèmes identifiés

P1 — Superposition production/demand (Bug moteur)

Cause racine: ApplyTerrainPatch ne nettoie pas les bâtiments existants avant d'ajouter un nouveau (Production, Demand, Transformer). Mission 3 place un demand sur (5,5) où Mission 2 avait une production → les deux coexistent dans les dictionnaires. Fix: Appeler ClearBuildingAt(coords) pour TOUS les types de cellules dans ApplyTerrainPatch.

P2 — Murs sur cases existantes / pièces traversent les murs

Cause racine: Mission 3 ajoute des murs sur des cases déjà jouables (2,2), (2,3), etc. Si des pièces y sont placées, elles restent et traversent le mur. Fix moteur: Quand un mur apparaît via terrain patch, retirer les pièces dont StartCell ou EndCell est sur ce mur (retour au stock). Fix level design: Redessiner mission 3 pour que les murs soient sur des cases nouvellement révélées (agrandir le plateau).

P3 — Noms de bâtiments dupliqués

Cause: Deux "Dépôt Royal" (mission 1 et mission 3). Fix: Renommer dans campaign_01.json. Mission 3 demand → "Avant-Poste du Col".

P4 — Compteurs d'objectifs qui montent à l'infini

Cause: ObjectivePanel.UpdateProgress affiche le current réel même quand il dépasse le required. Fix: Afficher min(current, required)/required et marquer visuellement les objectifs complétés. Les objectifs des missions précédentes complétées: afficher "✓" et ne plus mettre à jour.

P5 — Espace sélectionne un pion au lieu de lancer la simulation

Cause: Les boutons Godot ont FocusMode = All par défaut et capturent la touche Espace. Fix: Mettre FocusMode = None sur les boutons du PieceStockPanel. Ajouter un handler Espace dans Main pour toggle play/pause.

P6 — Centrage du plateau

Cause: Le calcul de centrage ne prend pas en compte la barre de titre (~36px en haut). Fix: Ajouter TitleBarHeight au calcul de l'offset caméra.

P7 — Pas de narration/lore

Fix: Ajouter un champ flavor dans MissionDef + campaign JSON. Afficher un encart narratif au démarrage de chaque mission. Un personnage parle en une phrase, ton léger et enjoué.

Ordre d'implémentation

  1. P1 + P2: Fixes moteur (ApplyTerrainPatch) + tests
  2. P3: Redesign campaign_01.json (missions 2-7, noms uniques, pas de superposition, murs sur nouvelles cases)
  3. P4: Test automatisé de validation du campaign (pas de superposition, niveaux finissables)
  4. P5: Spacebar play/pause
  5. P6: Centrage caméra
  6. P4: Objectifs capped
  7. P7: Narration