Aller au contenu principal

Vagues et ennemis d'EternalTD

Un fichier de vagues sous plugins/EternalTD/waves/ définit l'ensemble du contingent ennemi pour un niveau, y compris les vagues normales, les vagues de mort subite et, éventuellement, les messages pré-vague ou de vague. Chaque configuration de niveau référence un fichier de vagues via wavesConfigFile:.

Champs de premier niveau

ChampTypeDéfautNotes
isEnabledbooltrueDésactiver ici désactive également le niveau qui dépend de ce fichier
baseMobAmountint20Quantité par défaut utilisée lorsqu'une entrée ne spécifie pas amount=
waveEntitiesliste de chaînesrequisEntrées d'ennemis vague par vague
suddenDeathWaveEntitiesliste de chaînesoptionnelRéserve cyclique optionnelle de vagues qui s'exécute après l'épuisement des vagues configurées
prewaveMessagesliste de mapsoptionnelMessages affichés avant le démarrage d'une vague spécifique
waveMessagesliste de mapsoptionnelMessages affichés au début d'une vague

Si le fichier de vagues ne définit aucune entrée de mort subite, le niveau se termine dès l'épuisement des vagues configurées.

Format des entrées d'entité de vague

Chaque ligne de waveEntities (ou suddenDeathWaveEntities) est une entrée séparée par des deux-points :

- wave=1:entityType=ZOMBIE:healthMultiplier=1.0:amount=10
- wave=2:entityType=SKELETON:fast:treasure
- wave=5:entityType=WITHER_SKELETON:boss
- wave=8:entityType=PHANTOM:air:horde
CléTypeNotes
waveintRequis. Numéro de la vague à laquelle cette entrée appartient
entityTypeenumRequis. Valeur de l'enum Bukkit EntityType
healthMultiplierdoubleOptionnel. Multiplie la vie maximale de l'entité
amountintOptionnel. Remplace baseMobAmount pour cette entrée
namestringOptionnel. Chaîne de nom personnalisée
resistflagMarque l'entité comme insensible au ralentissement
fastflagAugmente la vitesse de déplacement
treasureflagDouble la prime d'or à l'élimination
bossflagApparaît comme un boss unique avec une vie augmentée et une barre de boss
hordeflagDouble amount et divise la vie par deux
airflagL'entité apparaît 4 blocs au-dessus du chemin et ignore les murs au sol

Calculs internes de quantité

  • amount est incrémenté de wave / 10 avant l'apparition.
  • Les entrées boss remplacent amount par max(1, floor(wave / 10)).
  • Les entrées horde doublent le amount final.
  • En plus de la quantité par entrée, le runtime de vague clone également des copies supplémentaires des entrées d'indices premier, troisième, cinquième, ... de la vague (chaque indice pair 0, 2, 4, ...) jusqu'à waveNumber - 1 fois. Les entrées boss ne sont jamais clonées de cette manière. Les vagues plus élevées empilent donc davantage de duplicatas des entrées d'indices inférieurs.

Format des blocs de message

prewaveMessages et waveMessages acceptent tous deux une liste de maps :

prewaveMessages:
- wave: 1
message:
- "&aWelcome! Build a couple of basic towers along the path."
- wave: 5
message:
- "&6Heads up: a boss is coming next wave."

prewaveMessages s'exécute au début de la phase de construction de cette vague. waveMessages s'exécute à l'instant où la phase défensive commence.

Cycle de vie d'une vague

Une session passe par ces états :

  • STARTING — avant que le joueur n'exécute /etd start pour la première fois.
  • CONSTRUCTION_PHASE — fenêtre de construction de 10 secondes entre les phases défensives.
  • DEFENSIVE_PHASE — les ennemis apparaissent et parcourent le chemin.
  • ENDING — le joueur a quitté, perdu ou le niveau a épuisé ses vagues.

La phase de construction dure toujours 10 secondes sauf si le tutoriel la maintient (voir Cas particulier du niveau tutoriel).

Comportement de fin de vague :

  • Terminer une vague accorde waveNumber * 10 d'or.
  • Si vous n'avez subi aucun dégât pendant la vague, vous recevez une seconde copie de ce bonus en tant que bonus « Parfait ».
  • La liste des modificateurs de la vague suivante est annoncée après la fin de chaque vague.

Mort subite

Si suddenDeathWaveEntities est défini, le niveau continue de s'exécuter au-delà de la liste des vagues configurées. Le compteur de mort subite s'incrémente à chaque vague et revient à la vague 1 de la réserve de mort subite dès qu'il dépasse la taille de la réserve.

Affinité élémentaire des entités de vague

Chaque vague a sa propre affinité élémentaire qui tourne d'une vague à l'autre :

  • Vague 1 → Feu
  • Vague 2 → Air
  • Vague 3 → Eau
  • Vague 4 → Terre
  • (puis répète)

Lorsqu'une entité de vague apparaît, il y a une chance de waveNumber / 100 que l'entité hérite de l'affinité élémentaire de la vague, affichée sous forme d'étiquette colorée flottant au-dessus de la créature.

Les règles de dégâts élémentaires sont gérées par la classe DamageTower de la tour :

  • Même affinité attaquant contre même affinité cible — dégâts ×0,5 (résistance).
  • Éléments simples opposés (Feu contre Eau, Air contre Terre) — dégâts ×2 (critique).
  • Les affinités de fusion (Magma, Souffle, Tempête, Boue) suivent des interactions appariées ; consultez le code source pour la matrice complète.
  • Une tour sans affinité inflige des dégâts ×1 à tout le monde.

Les affinités de fusion se forment lorsqu'une Tour de base est touchée par des tours de soutien aux affinités élémentaires combinables :

CombinaisonFusion résultante
Feu + TerreMagma
Feu + AirSouffle
Eau + AirTempête
Eau + TerreBoue

Les paires conflictuelles (Feu + Eau, Terre + Air) et tout mélange de 3 éléments ou plus ramènent la tour à l'état Sans affinité.

Mise à l'échelle de la vie, de l'armure et du butin

WaveEntity applique ces formules à l'apparition :

  • health = (currentHealth + ((wave - 1)^1.2) / 2) × healthMultiplier
  • Les entités boss voient leur vie multipliée par baseMobAmount × 0.5 en plus.
  • Les entités horde voient leur vie divisée par deux.
  • Les entités air voient leur vie à nouveau divisée par deux.
  • L'armure n'apparaît qu'à partir de la vague 10, fixée à maxHealth / 80.
  • Le butin est ceil(health × 1) et doublé pour les entrées treasure. Les tours de soutien Mine d'or ajoutent au butin à la mort.

Engeance scindée (Splitterlings)

À partir de la vague 20, les ennemis non aériens font apparaître à la mort de petites créatures supplémentaires (« splitterlings »).

  • Nombre : floor(wave / 20) par élimination.
  • Si le parent était un CAVE_SPIDER, les splitterlings sont des SILVERFISH. Sinon, ce sont des CAVE_SPIDER.
  • Les splitterlings apparaissent à wave / 2 de la vague du parent, donc une partie suffisamment avancée peut encore enchaîner un splitterling en d'autres splitterlings lors de sa propre mort.
  • Les splitterlings ne donnent aucun or à la mort et les ennemis aériens ne font jamais apparaître de splitterlings.

Cas particulier du niveau tutoriel

La carte du tutoriel fournie s'exécute via un script de vague tutoriel codé en dur :

  • La phase de construction ne se termine pas automatiquement tant que vous n'avez pas placé les tours exactes requises sur les cases mises en évidence.
  • Les tours codées en dur sont indiquées par des plaques de béton coloré sous la case ciblée et, si FMM est installé, par un modèle de flèche rouge pointant vers le bas flottant au-dessus.
  • Le tutoriel triche en ajoutant un peu d'or supplémentaire à la réserve du joueur lors des premières vagues pour que la composition de tours scriptée reste toujours abordable.

Vies et or du joueur

  • Vies de départ : 20.
  • Or de départ : 150.
  • Les boss coûtent 5 vies s'ils atteignent la sortie. Toutes les autres créatures coûtent 1 vie.
  • La triche (/etd cheat) règle les vies et l'or sur des valeurs effectivement illimitées et marque la session comme trichée pour les besoins du meilleur score.

Suivi des meilleurs scores

Chaque configuration de niveau conserve highscoreWave et highscorePlayerName. À la fin d'une session sans triche, le plugin enregistre le nouveau numéro de vague dans le fichier de niveau et diffuse un message à l'échelle du serveur s'il a battu le score précédent.