EternalTDのウェーブと敵
plugins/EternalTD/waves/ 配下のウェーブファイルは、通常のウェーブ、サドンデスのウェーブ、そして任意のプレウェーブまたはウェーブメッセージを含む、レベルの敵編成全体を定義します。各レベル設定は wavesConfigFile: を通じて1つのウェーブファイルを参照します。
トップレベルフィールド
| フィールド | 型 | デフォルト | 注記 |
|---|---|---|---|
isEnabled | bool | true | ここで無効化すると、このファイルに依存するレベルも無効化されます |
baseMobAmount | int | 20 | エントリで amount= が指定されていない場合のデフォルト数 |
waveEntities | string list | 必須 | ウェーブごとの敵エントリ |
suddenDeathWaveEntities | string list | 任意 | 設定されたウェーブが尽きた後にサイクル実行される任意のウェーブプール |
prewaveMessages | list of maps | 任意 | 特定のウェーブ開始前に表示されるメッセージ |
waveMessages | list 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
| キー | 型 | 注記 |
|---|---|---|
wave | int | 必須。このエントリが属するウェーブ番号 |
entityType | enum | 必須。Bukkit EntityType の列挙値 |
healthMultiplier | double | 任意。エンティティの最大HPに乗算 |
amount | int | 任意。このエントリに対して baseMobAmount を上書き |
name | string | 任意。カスタム名文字列 |
resist | フラグ | エンティティをスロー無効としてマーク |
fast | フラグ | 移動速度を上昇 |
treasure | フラグ | キル時のゴールドバウンティを2倍 |
boss | フラグ | スケーリングされたHPとボスバーを持つ単一のボスとしてスポーン |
horde | フラグ | amount を2倍にしてHPを半分にする |
air | フラグ | エンティティが経路の4ブロック上にスポーンし、地上の壁を無視 |
内部の数量計算
amountはスポーン前にwave / 10加算されます。bossエントリはamountをmax(1, floor(wave / 10))に上書きします。hordeエントリは最終的なamountを2倍にします。- エントリごとの数量に加えて、ウェーブランタイムはウェーブの第1、第3、第5...エントリ(偶数インデックス
0, 2, 4, ...すべて)の追加コピーをwaveNumber - 1回までクローンします。ボスエントリはこの方法でクローンされることはありません。そのため、高いウェーブほど低インデックスのエントリの複製がより多く積み重なります。
メッセージブロックの形式
prewaveMessages と waveMessages はどちらもマップのリストを受け付けます:
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)はライフとゴールドを実質的に無制限の値に設定し、ハイスコアの目的に対してセッションをチート扱いとしてマークします。
ハイスコアの追跡
各レベル設定は highscoreWave と highscorePlayerName を永続化します。非チートセッションの終了時、プラグインは新しいウェーブ番号をレベルファイルに保存し、前のスコアを更新した場合はサーバー全体のメッセージをブロードキャストします。