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