# 🏰 Tutoriel — Mode Tower Defense « Zombie Siege »
Guide complet pour **configurer**, **jouer** et **tester** le mode Tower Defense du mod
Zombie Mode (1.2.7, Forge 1.20.1).
> Dans ce mode, les joueurs défendent un **Cœur** fixe contre des vagues de zombies qui suivent
> des **lanes** (chemins balisés). Entre les vagues, ils dépensent leurs points pour **construire
> et améliorer des tourelles** sur des socles. On gagne en survivant à un nombre de vagues donné ;
> on perd si le Cœur tombe à 0 PV.
---
## 1. Prérequis
- Être **opérateur** (permission niveau 2) pour les commandes de configuration.
- Toutes les commandes de config TD passent par **`/zombietd`**.
- Touche d'interaction par défaut : **F** (configurable dans *Options → Commandes → Zombie Mode*).
- (Optionnel) Le mod **TACZ** pour les armes des tourelles à projectiles ; sinon les tourelles
utilisent un tir de secours.
---
## 2. Configuration d'une map (pas à pas)
Exemple avec une map nommée `siege1`. Place-toi physiquement aux endroits voulus : la plupart
des commandes prennent **ta position** comme référence.
### Étape 1 — Créer la map et le respawn
```
/zombiemap create siege1
/respawnpoint siege1 (place-toi où les joueurs apparaîtront, puis lance)
```
### Étape 2 — Définir les départs (spawns zombies)
Chaque « départ » est un point d'apparition des zombies. Il correspondra à une **lane**.
```
/zombiespawn siege1 (place-toi au départ A, puis lance)
/zombiespawn siege1 (répète pour d'autres départs : B, C…)
```
### Étape 3 — Activer le mode Tower Defense
```
/zombietd mode siege1 TOWER_DEFENSE
```
### Étape 4 — Activer l'aperçu du tracé (recommandé pour la suite)
```
/zombietd show siege1
```
À partir d'ici, le Cœur, les socles et les lanes que tu poses **s'affichent en jeu** en temps
réel (et se mettent à jour après chaque commande). Utilise `/zombietd hide` pour masquer.
### Étape 5 — Placer le Cœur
```
/zombietd core siege1 (place-toi à l'emplacement du Cœur)
```
→ Un cristal rouge avec une barre de PV apparaît.
### Étape 6 — Tracer les lanes (waypoints)
Pour chaque départ, pose des waypoints **du départ vers le Cœur**. Le nom de la lane regroupe
ses waypoints (lane `A` → A1, A2, A3…). Les zombies du départ le plus proche suivront cette lane.
```
(place-toi sur le 1er point de passage de la lane A)
/zombietd lane add siege1 A
(avance, place-toi sur le 2e point)
/zombietd lane add siege1 A
(continue jusqu'à l'approche du Cœur)
/zombietd lane add siege1 A
```
Répète pour chaque lane (`B`, `C`…). Tu vois la **ligne verte** se tracer du départ au Cœur.
Réglages utiles :
```
/zombietd lane list siege1 voir tous les waypoints
/zombietd lane remove siege1 A retire le dernier waypoint de A
/zombietd lane clear siege1 A supprime toute la lane A
/zombietd waypointradius siege1 3 rayon de validation d'un waypoint (def. 3 blocs)
```
### Étape 7 — Poser les socles de tourelles
Place-toi sur chaque emplacement où une tourelle pourra être construite (le long des lanes).
```
/zombietd socket add siege1 socle standard
/zombietd socket add siege1 true socle nécessitant le courant
/zombietd socket add siege1 false GUNNER,CRYO socle limité à certains types
```
Gestion :
```
/zombietd socket list siege1
/zombietd socket remove siege1 (place-toi sur le socle à retirer)
/zombietd socket clear siege1
```
→ Les socles libres apparaissent en **bleu** (libre) ou **orange** (courant requis).
### Étape 8 (optionnel) — Le Courant
Les tourelles **Mortier** et **Tesla** (et les socles `requiresPower`) exigent le courant.
Pose un interrupteur de courant que les joueurs devront activer en jeu :
```
/zombiepower set siege1 (place-toi sur le bloc interrupteur)
```
### Étape 9 (optionnel) — Machines classiques
Le mode TD reste compatible avec les systèmes existants, à placer comme d'habitude :
- Pack-a-Punch (`/zombiepap …`), Perks (`/zombieperk …`), Caisses d'armes (`/weaponcrate …`),
Portes (`/zombiedoor …`), Jukebox, etc.
### Étape 10 — Masquer l'aperçu et vérifier
```
/zombietd hide
/zombietd lane list siege1
/zombietd socket list siege1
```
---
## 3. Réglages globaux : `config/zombietd.json`
Généré au premier lancement du serveur, **rechargeable à chaud** (modifie et sauvegarde, les
valeurs s'appliquent sans redémarrer). Principaux réglages :
| Clé | Effet | Défaut |
|-----|-------|--------|
| `coreHp` | PV du Cœur | 1000 |
| `victoryWave` | Vague à survivre pour gagner | 20 |
| `prepSeconds` | Durée de préparation entre vagues | 30 |
| `prepSecondsBeforeBoss` | Préparation avant une vague de boss | 45 |
| `coreDamagePerZombie` | Dégâts d'un zombie au Cœur | 50 |
| `coreDamagePerBoss` | Dégâts d'un boss au Cœur | 250 |
| `maxTowers` | Limite de tours par partie | 12 |
| `leakRadius` | Rayon de contact avec le Cœur | 1.4 |
| `bossWaveInterval` | Vague de boss tous les N | 5 |
| `waveBaseZombies` / `waveZombiesPerWave` | Taille des vagues (= base + parVague × n°) | 8 / 6 |
| `towers` | Stats de chaque tourelle par palier | voir fichier |
Les stats des tours sont **synchronisées au client**, donc les menus affichent toujours les
valeurs configurées.
---
## 4. Lancer et jouer
### Démarrer la partie
```
/zombiestart siege1 (op) lance la partie
/zombiejoin siege1 chaque joueur rejoint
```
### Boucle de jeu
1. **Phase de préparation** (compteur visible) : construis et améliore tes tourelles.
2. **Vague** : les zombies sortent des départs, suivent les lanes vers le Cœur. Tourelles et
joueurs les abattent.
3. Fin de vague → préparation → vague suivante (plus dure).
4. **Victoire** en survivant à `victoryWave` vagues. **Défaite** si le Cœur tombe à 0.
### Construire une tourelle
- En **préparation**, vise un **socle libre** (hologramme bleu) et appuie sur **F**.
- Le **menu radial** s'ouvre : 6 tourelles avec coût et DPS. Clique pour acheter.
- Grisé = pas assez de points. Cadenas/`[⚡]` = nécessite le courant.
### Gérer une tourelle posée
- Vise une tourelle et appuie sur **F** → menu :
- **Améliorer** (Lv+1), **Pack-a-Punch** (au Lv3), **Vendre** (rembourse 70 %).
### Le courant
- Active l'interrupteur de courant (vise-le + **F**) pour débloquer Mortier/Tesla et les socles
qui l'exigent.
### Aides visuelles
- **Cercle de portée** : vise une tourelle pour voir sa portée au sol.
- **Tracé des lanes** et **hologrammes des socles** visibles en préparation.
---
## 5. Les 6 tourelles (récap)
| Tourelle | Rôle | Courant ? | Spécial |
|----------|------|:---------:|---------|
| 🔫 Mitrailleuse | DPS mono-cible | non | perce l'armure (PaP) |
| 💥 Mortier | Dégâts de zone | **oui** | knockback, mini-nuke (PaP) |
| 🧊 Cryotourelle | Ralentissement | non | gel, givre persistant (PaP) |
| ⚡ Tesla | Chaîne d'éclairs | **oui** | stun (PaP) |
| 🔥 Lance-flammes | Cône + brûlure | non | flaque enflammée (PaP) |
| 🪙 Collecteur | Économie (points passifs) | non | drop de pièces (PaP) |
Chaque tour : **Lv1 → Lv2 → Lv3 → Pack-a-Punch**. Détails chiffrés dans
`docs/tower-defense-design.md` et `config/zombietd.json`.
---
## 6. ✅ Checklist de test complète
À tester en jeu (`runClient` / serveur de test). Coche au fur et à mesure.
### A. Configuration / commandes
- [ ] `/zombietd mode` bascule la map en TOWER_DEFENSE (et inversement en CLASSIC).
- [ ] `/zombietd core` place le Cœur (cristal + barre PV visibles).
- [ ] `/zombietd socket add/remove/list/clear` fonctionne ; `requiresPower` et `allowedTypes`
sont pris en compte.
- [ ] `/zombietd lane add/remove/list/clear` ; `waypointradius` modifie le rayon.
- [ ] `/zombietd show` affiche le tracé hors partie ; `/zombietd hide` le masque.
- [ ] L'aperçu se met à jour automatiquement après chaque commande de config.
### B. Visuels
- [ ] Hologrammes des socles : **bleu** (libre) / **orange** (courant requis), seulement en
préparation (ou en aperçu éditeur).
- [ ] Tracé des lanes : cubes verts reliés du départ jusqu'au Cœur.
- [ ] Les 6 **modèles de tourelles** s'affichent et s'orientent vers leur cible ; animations
(canon, anneaux, tarière, flammes) OK.
- [ ] **Cercle de portée** visible en visant une tourelle, taille = portée du palier.
- [ ] Le Cœur affiche ses PV et change de couleur selon la vie restante.
### C. Construction & économie
- [ ] Construire une tourelle déduit les points (menu radial + F sur un socle).
- [ ] Fonds insuffisants → refus + message + son.
- [ ] Socle déjà occupé → ouvre le menu de gestion, pas la construction.
- [ ] Tour nécessitant le courant → refusée tant que le courant est éteint, OK après activation.
- [ ] Limite de tours (`maxTowers`) respectée.
- [ ] **Améliorer** Lv1→Lv2→Lv3 puis **Pack-a-Punch** : coûts déduits, stats mises à jour
(liseré de couleur change).
- [ ] **Vendre** rembourse 70 % et libère le socle ; seul le propriétaire peut vendre.
- [ ] Construction/amélioration **uniquement en préparation** (refus pendant une vague).
### D. Combat (effets par tourelle)
- [ ] Mitrailleuse : tir mono-cible régulier.
- [ ] Mortier : dégâts de zone (plusieurs zombies touchés) + knockback (Lv3+).
- [ ] Cryotourelle : ralentit les zombies dans son rayon (gel au Lv3+).
- [ ] Tesla : l'éclair saute entre plusieurs zombies proches.
- [ ] Lance-flammes : touche tout un cône + met le feu.
- [ ] Collecteur : génère des points passifs à son propriétaire (~toutes les 5 s).
- [ ] Les kills des tourelles **créditent les points** au propriétaire (et comptent pour la vague).
### E. IA des zombies / lanes
- [ ] Les zombies sortent des départs et **suivent les waypoints** dans l'ordre.
- [ ] Ils **ignorent les joueurs** et se dirigent vers le Cœur.
- [ ] À l'arrivée sur le Cœur : le zombie disparaît et le Cœur **perd des PV**.
- [ ] Un boss inflige plus de dégâts au Cœur (`coreDamagePerBoss`).
- [ ] Sans lane définie : les zombies vont directement au Cœur (fallback).
### F. Vagues / progression
- [ ] Taille des vagues = `waveBaseZombies + waveZombiesPerWave × n°` (vérifier le compteur).
- [ ] Durée de préparation = `prepSeconds` (et `prepSecondsBeforeBoss` avant une vague de boss).
- [ ] Vagues de boss tous les `bossWaveInterval`.
### G. Victoire / défaite
- [ ] Survivre à `victoryWave` vagues → message **VICTOIRE** + son + fin de partie.
- [ ] Cœur à 0 PV → message **DÉFAITE** + fin de partie ; entités TD nettoyées.
### H. Config & synchronisation
- [ ] Modifier `zombietd.json` et sauvegarder → valeurs appliquées **sans redémarrage**
(hot-reload).
- [ ] Les **chiffres affichés dans les menus** (coût, DPS, portée) correspondent à la config.
### I. Multijoueur
- [ ] Les points sont **par joueur** ; chacun construit avec sa propre cagnotte.
- [ ] L'occupation des socles se met à jour chez **tous** les joueurs après pose/vente.
- [ ] Plusieurs joueurs peuvent défendre ensemble.
### J. Cas limites
- [ ] Quitter (`/zombieleave`) puis rejoindre : état cohérent.
- [ ] Déconnexion/reconnexion : config et tracé resynchronisés.
- [ ] Le mode **classique** d'une autre map n'est pas affecté (zombies ciblent les joueurs).
- [ ] Fin de partie : tourelles et Cœur disparaissent ; pas d'entités fantômes.
### K. Performance
- [ ] Avec `maxTowers` tours + beaucoup de zombies, pas de chute de TPS notable.
---
## 7. Dépannage
| Problème | Cause probable / solution |
|----------|---------------------------|
| Le menu ne s'ouvre pas sur un socle | Pas en préparation, ou tu n'es pas un joueur **actif** de la partie, ou la map n'est pas en mode TD. |
| « Activez l'électricité » | La tour/le socle exige le courant : active l'interrupteur (`/zombiepower set` côté admin). |
| Les zombies ne suivent pas le chemin | Aucune lane définie, ou le 1er waypoint trop loin du départ. Vérifie `/zombietd lane list`. |
| Le Cœur ne perd jamais de PV | Les lanes ne mènent pas assez près du Cœur, ou `leakRadius` trop petit. |
| Tracé invisible en map-making | Lance `/zombietd show <map>` (ou exécute une commande de config). |
| Chiffres de menu incohérents | Reconnecte-toi pour resynchroniser la config (`zombietd.json`). |
| Tourelles sans projectile visible | TACZ non installé : tir de secours utilisé (normal). |