Chessistics/PLAN_playtest.md

42 lines
2.5 KiB
Markdown
Raw Normal View History

# 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