メインコンテンツまでスキップ

EternalTDのウェーブと敵

plugins/EternalTD/waves/ 配下のウェーブファイルは、通常のウェーブ、サドンデスのウェーブ、そして任意のプレウェーブまたはウェーブメッセージを含む、レベルの敵編成全体を定義します。各レベル設定は wavesConfigFile: を通じて1つのウェーブファイルを参照します。

トップレベルフィールド

フィールドデフォルト注記
isEnabledbooltrueここで無効化すると、このファイルに依存するレベルも無効化されます
baseMobAmountint20エントリで amount= が指定されていない場合のデフォルト数
waveEntitiesstring list必須ウェーブごとの敵エントリ
suddenDeathWaveEntitiesstring list任意設定されたウェーブが尽きた後にサイクル実行される任意のウェーブプール
prewaveMessageslist of maps任意特定のウェーブ開始前に表示されるメッセージ
waveMessageslist of maps任意ウェーブ開始時に表示されるメッセージ

ウェーブファイルにサドンデスエントリが定義されていない場合、設定されたウェーブが尽きた時点でレベルが終了します。

ウェーブエンティティエントリの形式

waveEntities(または suddenDeathWaveEntities)の各行は、コロン区切りのエントリです:

- 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
キー注記
waveint必須。このエントリが属するウェーブ番号
entityTypeenum必須。Bukkit EntityType の列挙値
healthMultiplierdouble任意。エンティティの最大HPに乗算
amountint任意。このエントリに対して baseMobAmount を上書き
namestring任意。カスタム名文字列
resistフラグエンティティをスロー無効としてマーク
fastフラグ移動速度を上昇
treasureフラグキル時のゴールドバウンティを2倍
bossフラグスケーリングされたHPとボスバーを持つ単一のボスとしてスポーン
hordeフラグamount を2倍にしてHPを半分にする
airフラグエンティティが経路の4ブロック上にスポーンし、地上の壁を無視

内部の数量計算

  • amount はスポーン前に wave / 10 加算されます。
  • boss エントリは amountmax(1, floor(wave / 10)) に上書きします。
  • horde エントリは最終的な amount を2倍にします。
  • エントリごとの数量に加えて、ウェーブランタイムはウェーブの第1、第3、第5...エントリ(偶数インデックス 0, 2, 4, ... すべて)の追加コピーを waveNumber - 1 回までクローンします。ボスエントリはこの方法でクローンされることはありません。そのため、高いウェーブほど低インデックスのエントリの複製がより多く積み重なります。

メッセージブロックの形式

prewaveMessageswaveMessages はどちらもマップのリストを受け付けます:

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 はそのウェーブの建設フェーズ開始時に実行されます。waveMessages は防衛フェーズが始まった瞬間に実行されます。

ウェーブのライフサイクル

セッションは以下の状態を経由します:

  • STARTING — プレイヤーが初めて /etd start を実行する前。
  • CONSTRUCTION_PHASE — 防衛フェーズ間の10秒間の建設ウィンドウ。
  • DEFENSIVE_PHASE — 敵がスポーンして経路を歩いている状態。
  • ENDING — プレイヤーが退出、敗北、またはレベルのウェーブが尽きた状態。

建設フェーズは、チュートリアルが保留する場合を除き常に10秒間続きます(チュートリアルレベルを参照)。

ウェーブ終了時の挙動:

  • ウェーブをクリアすると waveNumber * 10 のゴールドが付与されます。
  • ウェーブ中にダメージを受けなかった場合、そのボーナスの2つ目のコピーが「Perfect」ボーナスとして受け取れます。
  • 次のウェーブの修飾子リストは各ウェーブ終了後に告知されます。

サドンデス

suddenDeathWaveEntities が定義されている場合、設定されたウェーブリストを超えてもレベルは継続します。サドンデスカウンタはウェーブごとに増加し、プールサイズを超えるたびにサドンデスプールのウェーブ1に戻ります。

ウェーブエンティティの属性

各ウェーブは独自の属性を持ち、ウェーブごとにローテーションします:

  • ウェーブ1 → 火
  • ウェーブ2 → 風
  • ウェーブ3 → 水
  • ウェーブ4 → 土
  • (以降繰り返し)

ウェーブエンティティがスポーンするとき、waveNumber / 100 の確率でそのエンティティはウェーブの属性を継承し、モブの上に浮かぶ色付きタグとして表示されます。

属性ダメージのルールはタワーの DamageTower クラスで処理されます:

  • 同属性の攻撃側 vs 同属性のターゲット — 0.5倍ダメージ(耐性)。
  • 反対の単一属性(火 vs 水、風 vs 土) — 2倍ダメージ(クリティカル)。
  • フュージョン属性(マグマ、爆発、嵐、汚泥)はペアごとの相互作用に従います。完全な行列はソースを参照してください。
  • 無属性のタワーは誰に対しても1倍のダメージを与えます。

フュージョン属性は、Basic Towerに組み合わせ可能な属性を持つサポートタワーが接触したときに形成されます:

組み合わせ結果のフュージョン
火 + 土マグマ
火 + 風爆発
水 + 風
水 + 土汚泥

衝突するペア(火 + 水、土 + 風)および3つ以上の属性の混合は、タワーを無属性に戻します。

HP、アーマー、バウンティのスケーリング

WaveEntity はスポーン時に以下の式を適用します:

  • health = (currentHealth + ((wave - 1)^1.2) / 2) × healthMultiplier
  • ボスエンティティはさらにHPに baseMobAmount × 0.5 が乗算されます。
  • Horde エンティティはHPが半分になります。
  • Air エンティティはHPがさらに半分になります。
  • アーマーはウェーブ10以降にのみ出現し、maxHealth / 80 に設定されます。
  • バウンティは ceil(health × 1) で、treasure エントリでは2倍になります。Gold Mine サポートタワーは死亡時のバウンティに加算されます。

スプリッタリング

ウェーブ20以降、非Airの敵は死亡時に追加の小型モブ(「スプリッタリング」)をスポーンさせます。

  • 数: キルごとに floor(wave / 20)
  • 親が CAVE_SPIDER の場合、スプリッタリングは SILVERFISH になります。それ以外の場合は CAVE_SPIDER になります。
  • スプリッタリングは親のウェーブの wave / 2 でスポーンするため、十分深いランでは、スプリッタリングが自身の死亡時にさらにスプリッタリングを連鎖させることもできます。
  • スプリッタリングは死亡時に0ゴールドしか与えず、Air の敵はスプリッタリングをスポーンさせません。

チュートリアルレベルの特殊ケース

同梱されているチュートリアルマップは、ハードコードされたチュートリアルウェーブスクリプトを実行します:

  • 建設フェーズは、ハイライトされたマスに必要なタワーを正確に設置するまで自動終了しません。
  • ハードコードされたタワーは、ターゲットされているグリッドマスの下の色付きコンクリートパッチによって示され、FMMがインストールされている場合は、その上に浮かぶ下向きの赤い矢印モデルでも示されます。
  • チュートリアルは初期のウェーブでプレイヤーのプールに追加のゴールドをチートで投入するため、スクリプト化されたタワー編成は常に購入可能です。

プレイヤーのライフとゴールド

  • 初期ライフ: 20。
  • 初期ゴールド: 150。
  • ボスモブが終端に到達するとライフを5消費します。その他すべてのモブはライフを1消費します。
  • チート(/etd cheat)はライフとゴールドを実質的に無制限の値に設定し、ハイスコアの目的に対してセッションをチート扱いとしてマークします。

ハイスコアの追跡

各レベル設定は highscoreWavehighscorePlayerName を永続化します。非チートセッションの終了時、プラグインは新しいウェーブ番号をレベルファイルに保存し、前のスコアを更新した場合はサーバー全体のメッセージをブロードキャストします。