|
| 1 | +# Changelog — Forces Godot 4 |
| 2 | + |
| 3 | +Journal des évolutions du dossier `godot/` (hors dépôt Unity legacy). |
| 4 | + |
| 5 | +--- |
| 6 | + |
| 7 | +## 2026-05-24 — Moteur jouable, menus, IA, CI headless |
| 8 | + |
| 9 | +### Réalisé |
| 10 | + |
| 11 | +#### Moteur (`scripts/core/`) |
| 12 | + |
| 13 | +- **`game_constants.gd`** — camps (Vert/Bleu/Rouge/Jaune), types de pièces, stats force/portée/coût Power, phases de partie, couleurs UI. |
| 14 | +- **`board_catalog.gd`** — catalogue des 56 secteurs (depuis `Biblidecor.js`) : QG, neutralité, appartenance camp, `hq_for_camp()`. |
| 15 | +- **`board_graph.gd`** — graphe terrestre chargé depuis `data/land_adjacency.json` : voisins move-1 / move-3, BFS distance, `land_destinations()`. |
| 16 | +- **`game_state.gd`** — état de partie : pièces, camps vivants, jetons Power (structure), ordres **par camp** (`orders_by_camp`, max 5/manche), pièces déjà déplacées (`pieces_moved_this_round`), spawn initial (4 types × 2 au QG), `try_move_piece()` / `try_move_human_piece()`, fin de manche + capture drapeau QG, signaux phase/manche/déplacement. |
| 17 | +- **`game_order.gd`** — ordre typé (MOVE) avec description texte. |
| 18 | +- **`piece_instance.gd`** — instance pièce (id, camp, type, secteur, réserve). |
| 19 | +- **`battle_resolver.gd`** — résolution simplifiée des conflits : somme des forces par camp sur un secteur, capture des pièces perdantes (égalité = pas de capture). |
| 20 | + |
| 21 | +#### Données & outils |
| 22 | + |
| 23 | +- **`data/land_adjacency.json`** — 45 secteurs terrestres extraits de `Dep_terre.js` (move_1 et move_3). |
| 24 | +- **`tools/parse_dep_terre.py`** — régénération du JSON depuis le legacy Unity. |
| 25 | +- **`tools/run_headless.ps1`** / **`run_headless.sh`** — modes `smoke`, `compile`, `import` ; lecture optionnelle de `tools/godot.env` pour `GODOT_BIN`. |
| 26 | +- **`tools/godot.env.example`** — modèle de config locale (gitignored : `godot.env`). |
| 27 | + |
| 28 | +#### Session & menus (`scripts/app/`, `scripts/menu/`, `scenes/menu/`) |
| 29 | + |
| 30 | +- **`GameSession`** (autoload) — config persistée menu → bataille : camp humain (Vert par défaut), slots Bleu/Rouge/Jaune (IA ou joueur humain futur), difficulté IA (Facile / Normal / Difficile), volumes musique/SFX (structure). |
| 31 | +- **`main_menu.tscn`** — Jouer, Partie rapide, Tutoriel, Options, Quitter. |
| 32 | +- **`game_setup.tscn`** — configuration des camps adverses + difficulté IA ; résumé avant lancement. |
| 33 | +- **`options_menu.tscn`** — sliders volume (UI seulement, pas encore branchés audio). |
| 34 | +- **`tutorial_menu.tscn`** — placeholder tutoriel. |
| 35 | +- **`menu_theme.gd`** — styles communs menus. |
| 36 | + |
| 37 | +#### Bataille (`scripts/battle/`, `scenes/battle/`) |
| 38 | + |
| 39 | +- **`battle.tscn`** + **`battle.gd`** — UI debug fonctionnelle : liste secteurs, pièces du joueur, destinations terrestres, journal RichText, bouton **Fin de manche**, retour menu. |
| 40 | +- Déplacements terrestres du camp humain validés en jeu (F5). |
| 41 | +- Compteur « Vos ordres X/5 ». |
| 42 | +- À la fin de manche : exécution **`AiPlanner.run_all_ai()`** puis résolution combats ; détection victoire basique (≤ 1 camp vivant après manche 1). |
| 43 | + |
| 44 | +#### IA (`scripts/ai/`) |
| 45 | + |
| 46 | +- **`ai_planner.gd`** — IA unique paramétrée par difficulté (agressivité 0.35 / 0.62 / 0.88) : |
| 47 | + - cible QG ennemi le plus proche (BFS terrestre) ; |
| 48 | + - scoring destinations : attaque favorable, expansion territoire, progression vers QG, défense QG ; |
| 49 | + - priorité pièces par force de combat ; |
| 50 | + - max 5 ordres / manche, une pièce déplacée une fois par manche. |
| 51 | +- Preload explicite dans `battle.gd` et `headless_test.gd` (class_name non indexée en CLI sans cache éditeur). |
| 52 | + |
| 53 | +#### Tests & CI |
| 54 | + |
| 55 | +- **`scenes/headless_test.tscn`** + **`headless_test.gd`** — smoke : BoardGraph, GameSession, GameState, **AiPlanner** (Bleu joue ≥ 1 ordre), chargement scènes menu/bataille. |
| 56 | +- **`.github/workflows/godot-headless.yml`** — Godot 4.6.3 Linux, which `godot/**` : smoke + compile menu. |
| 57 | +- Dernière exécution locale validée : `smoke` exit 0, `compile` exit 0. |
| 58 | + |
| 59 | +#### Projet |
| 60 | + |
| 61 | +- **`project.godot`** — Godot 4.6, scène principale = menu, autoloads GameConstants / BoardCatalog / BoardGraph / GameSession, renderer mobile. |
| 62 | +- **`README.md`** (racine Forces) — lien vers branche `godot4-port` et dossier `godot/`. |
| 63 | +- Suppression de l’ancienne scène orpheline `scenes/main.tscn` (remplacée par le flux menu). |
| 64 | + |
| 65 | +### Non réalisé (prochaines étapes) |
| 66 | + |
| 67 | +#### Graphe & déplacements |
| 68 | + |
| 69 | +- [ ] Parser **`Dep_mer.js`** → `data/sea_adjacency.json` + API `BoardGraph.sea_*`. |
| 70 | +- [ ] Parser **`Dep_air.js`** → `data/air_adjacency.json` + API `BoardGraph.air_*`. |
| 71 | +- [ ] Types navals / aériens (Croiseur mer, Bombardier, Chasseur lourd, Destroyer) — règles move depuis secteurs mer / air. |
| 72 | +- [ ] Cases **Space_*** et règles spéciales non terrestres. |
| 73 | + |
| 74 | +#### Moteur & règles Power |
| 75 | + |
| 76 | +- [ ] Jetons **Power** : gain, dépense, achat de pièces (`orders.js`, `allChoose.js`). |
| 77 | +- [ ] **Réserve** : pièces en attente, déploiement. |
| 78 | +- [ ] **Échanges** entre camps. |
| 79 | +- [ ] **Commando**, **Bombe H** — règles complètes. |
| 80 | +- [ ] Résolution combat fidèle au legacy (pas seulement somme des forces). |
| 81 | +- [ ] Phases distinctes planification / résolution en UI. |
| 82 | + |
| 83 | +#### Interface |
| 84 | + |
| 85 | +- [ ] Plateau visuel (carte, tokens, assets `Assets/Textures/`). |
| 86 | +- [ ] UI bataille remplaçant `infoButtons.js` / `playerTurn.js`. |
| 87 | +- [ ] Tutoriel jouable (contenu depuis `ScriptMenu/Tutorial.js`). |
| 88 | +- [ ] Options : persistance volumes, plein écran. |
| 89 | +- [ ] Animations / SFX (`Assets/Sound/`). |
| 90 | + |
| 91 | +#### IA |
| 92 | + |
| 93 | +- [ ] Équilibrage fin vs `ScriptIA_*.js` (~23k lignes × 3) si nécessaire. |
| 94 | +- [ ] IA mer / air / achats Power / bombes. |
| 95 | + |
| 96 | +#### Multijoueur |
| 97 | + |
| 98 | +- [ ] Remplacement UNet Unity (WebSocket / ENet / Godot multiplayer) — écran « joueur réseau » déjà prévu dans `GameSession`. |
| 99 | + |
| 100 | +#### Qualité |
| 101 | + |
| 102 | +- [ ] Tests unitaires GDScript supplémentaires (combat, Power, graphes mer/air). |
| 103 | +- [ ] Export mobile (Android / iOS) — cible historique Google Play (`com.QD.Forc2`). |
| 104 | + |
| 105 | +### Notes techniques |
| 106 | + |
| 107 | +- Godot **4.6.3** ; binaire console Windows : chemin dans `tools/godot.env` (local, gitignored). |
| 108 | +- Legacy Unity inchangé sous `Assets/` — référence pour parsers et règles. |
| 109 | +- Ce changelog ne documente pas le dépôt Unity d’origine ; uniquement l’avancement du client Godot. |
0 commit comments