Skip to content

Commit 527ea99

Browse files
committed
feat(godot): moteur terrestre jouable, menus, IA et CI headless
Changelog 2026-05-24 — détail complet dans godot/CHANGELOG.md (hors dépôt Unity legacy ; ne couvre pas la migration en soi). Réalisé : - Moteur core : camps, pièces, état de partie, ordres par camp (max 5), déplacements terrestres, résolution combat simplifiée, capture drapeau QG - Catalogue 56 secteurs + graphe terrestre (45 cases, Dep_terre.js → JSON) - Flux menu → config partie → bataille (GameSession autoload) - UI bataille debug : déplacements joueur Vert, fin de manche, journal - IA paramétrée (Facile/Normal/Difficile) : scoring, attaque, expansion - Tests headless smoke + workflow GitHub Actions Godot 4.6.3 À faire : - Mer / air (Dep_mer.js, Dep_air.js) - Jetons Power, réserve, échanges, bombes H, règles complètes - Plateau visuel + assets, UI bataille finale, tutoriel, audio - Multijoueur (WebSocket / ENet), export mobile
1 parent de45e4a commit 527ea99

49 files changed

Lines changed: 3162 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
name: Godot headless
2+
3+
on:
4+
push:
5+
paths:
6+
- "godot/**"
7+
- ".github/workflows/godot-headless.yml"
8+
pull_request:
9+
paths:
10+
- "godot/**"
11+
12+
jobs:
13+
smoke:
14+
runs-on: ubuntu-latest
15+
steps:
16+
- uses: actions/checkout@v4
17+
18+
- name: Install Godot 4.6
19+
run: |
20+
wget -q https://github.com/godotengine/godot/releases/download/4.6.3-stable/Godot_v4.6.3-stable_linux.x86_64.zip
21+
unzip -q Godot_v4.6.3-stable_linux.x86_64.zip
22+
chmod +x Godot_v4.6.3-stable_linux.x86_64
23+
echo "GODOT_BIN=$PWD/Godot_v4.6.3-stable_linux.x86_64" >> "$GITHUB_ENV"
24+
25+
- name: Smoke tests
26+
working-directory: godot
27+
run: $GODOT_BIN --headless --path . "res://scenes/headless_test.tscn"
28+
29+
- name: Compile main scene
30+
working-directory: godot
31+
run: $GODOT_BIN --headless --path . "res://scenes/menu/main_menu.tscn" --quit-after 2

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,10 @@
22
Projet Unity fait à trois sous mon impulsion durant le premier stage de l'école 42. Supposé imiter le jeu de plateau "Power"
33

44
Lien de téléchargement du jeu sur l'applestore: https://play.google.com/store/apps/details?id=com.QD.Forc2 . Personne ne savait coder vraiment (1 an à peine)
5+
6+
## Port Godot 4
7+
8+
Le portage actif se fait sur la branche **`godot4-port`**, dans le dossier [`godot/`](godot/).
9+
10+
- Ouvrir `godot/project.godot` avec Godot 4.6 (ou 4.x)
11+
- Voir [`godot/README.md`](godot/README.md) pour l’architecture

godot/.gitignore

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Godot 4
2+
.godot/
3+
tools/godot.env
4+
*.translation
5+
export.cfg
6+
export_presets.cfg
7+
8+
# Imported artifacts
9+
*.import
10+
11+
# OS / IDE
12+
.DS_Store
13+
Thumbs.db
14+
*.swp
15+
.vscode/
16+
17+
# Builds
18+
build/
19+
exports/
20+
*.apk
21+
*.aab
22+
*.ipa
23+
*.exe
24+
*.pck
25+
*.zip

godot/CHANGELOG.md

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
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.

godot/README.md

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# Forces — Godot 4
2+
3+
Portage du jeu **Forces** (Unity / JavaScript, stage 42, 2013) vers **Godot 4.6** (4.x compatible).
4+
5+
Le dépôt Unity d’origine reste à la racine (`Assets/`, etc.). Ce dossier est le client Godot autonome.
6+
7+
## Branche
8+
9+
Développement sur `godot4-port`.
10+
11+
## Ouvrir le projet
12+
13+
1. Installer [Godot 4.6](https://godotengine.org/download) (ou la version que tu utilises déjà).
14+
2. Importer le dossier `godot/` comme projet.
15+
## Flux joueur
16+
17+
1. **Menu** — Jouer / Partie rapide / Tutoriel / Options / Quitter
18+
2. **Créer partie** — Vert = vous ; Bleu/Rouge/Jaune = IA ou joueur (+ difficulté IA)
19+
3. **Bataille** — planification des ordres (moteur actuel)
20+
21+
F5 démarre sur le **menu principal**.
22+
23+
## Tests headless (CLI / CI / agent)
24+
25+
Sans ouvrir l’éditeur, pour vérifier compilation + moteur :
26+
27+
```powershell
28+
cd godot
29+
# Une fois Godot installé, optionnel :
30+
$env:GODOT_BIN = "C:\Users\tom\Downloads\Godot_v4.6.3-stable_win64.exe"
31+
.\tools\run_headless.ps1 # smoke (défaut)
32+
.\tools\run_headless.ps1 compile # charge le projet 3 frames
33+
.\tools\run_headless.ps1 import # importe les assets
34+
```
35+
36+
Linux/macOS :
37+
38+
```bash
39+
cd godot
40+
export GODOT_BIN=/path/to/godot
41+
./tools/run_headless.sh smoke
42+
```
43+
44+
Équivalent manuel :
45+
46+
```bash
47+
godot --headless --path . "res://scenes/headless_test.tscn"
48+
godot --headless --path . "res://scenes/menu/main_menu.tscn" --quit-after 2
49+
```
50+
51+
Le workflow GitHub `.github/workflows/godot-headless.yml` lance les mêmes checks sur push `godot/**`.
52+
53+
## Architecture
54+
55+
| Dossier | Rôle |
56+
|---------|------|
57+
| `scenes/menu/` | Menu principal, config partie, options, tutoriel |
58+
| `scenes/battle/` | Écran de bataille (ex-UI debug) |
59+
| `scripts/app/game_session.gd` | Autoload — config persistée menu → bataille |
60+
| `scripts/core/` | Moteur sans UI |
61+
| `data/land_adjacency.json` | Graphe terrestre |
62+
63+
## Roadmap
64+
65+
Voir [`CHANGELOG.md`](CHANGELOG.md) pour le détail daté.
66+
67+
1. ~~**Moteur terrestre**~~ — état, ordres multi-camps, résolution simplifiée, capture drapeau
68+
2. ~~**Menus & flux**~~ — menu → config → bataille
69+
3. ~~**IA basique**~~`ai_planner.gd` (Facile/Normal/Difficile)
70+
4. **Mer / air** — parsers `Dep_mer.js` / `Dep_air.js`
71+
5. **Plateau visuel** — assets Unity / JP
72+
6. **Règles Power** — jetons, réserve, échanges, bombes H
73+
7. **UI bataille** — remplacement `infoButtons.js` / `playerTurn.js`
74+
8. **Multijoueur** — WebSocket / ENet
75+
76+
## Legacy Unity
77+
78+
Référence : `../Assets/Scripts/`

0 commit comments

Comments
 (0)