さて、じっくり1手ずつ読み切るCLASSICモードやHARDモードとは対照的に、136 BPMのシンセビートに乗ってハイスピードにブロックを叩きつけるのが「PARTYモード(4×4×4盤面)」です。
「タイムアタック形式なのに、ランキング上位のプレイヤーはどうやって長時間生き残って何十万点も稼いでいるのか?」と疑問に思った方もいるのではないでしょうか。実はPARTYモードには、+TIMEブロックの育成とPARTY FEVERによるタイマー凍結という明確なリソース循環サイクルが存在します。今回はjs/game-core.jsの実装から、その数値テーブルをすべて公開します。
01. 4×4×4(64マス)と「毎ターン1〜4個スポーン(期待値2.5個)」の物量バランス
PARTYモードを選択すると、グリッドサイズは3×3×3(27マス)から4×4×4(64マス)へと固定拡張されます。体積比で約2.37倍に広がるわけですが、もしここで1ターンに1個しかブロックが湧かなければ、盤面がスカスカすぎてマージがほとんど起きない退屈なゲームになってしまいます。
そこでPARTYモードでは、毎ターンの移動後に1〜4個の一様乱数(平均期待値2.5個)のタイルをまとめてスポーンさせています。
// js/game-core.js : PARTYモードのスポーン数決定
} else if (this.gameType === 'party') {
const count = Math.floor(Math.random() * 4) + 1; // 1, 2, 3, or 4個(平均2.5個)
for (let i = 0; i < count; i++) {
const t = this.spawnTile();
if (t) spawned.push(t);
}
}
また、4×4×4では1本の軸ライン上に最大4個のタイルが並ぶため、[2, 2, 2, 2]という並びをスライドさせたときに1ターンで2組のペア([4, 4])が同時マージします。3×3×3では1ラインにつき最大1組しか合体できなかったのに対し、4×4×4では1回のスワイプで5組〜8組の同時マージが日常茶飯事になるわけです。
02. +TIMEブロックの出現確率(通常7% / FEVER中14%)と合体値別ボーナス秒数テーブル
PARTYモードのタイマーを回復する手段が、緑色の時計バッジが付いた「+TIMEボーナスブロック」の合体です。まずはspawnTile()における出現確率のコードを見てみましょう。
// js/game-core.js : PARTYモードのスポーン数値と+TIME付与判定
if (this.gameType === 'party') {
if (this.feverActive) {
const r = Math.random();
value = r < 0.50 ? 4 : (r < 0.85 ? 8 : 16);
if (Math.random() < 0.14) type = 'time_plus';
} else {
value = Math.random() < 0.90 ? 2 : 4;
if (Math.random() < 0.07) type = 'time_plus';
}
}
通常時はスポーンごとに7%、FEVER中は2倍の14%の確率でtype = 'time_plus'が付与されます。毎ターン平均2.5個湧くため、通常時でも約5.7ターンに1個、FEVER中なら約2.8ターンに1個のペースで+TIMEブロックが盤面に供給される計算です。
そして最大のポイントが、「+TIMEブロックがマージしたとき、合体後の数値(newValue)が大きいほど加算される秒数が増える」という仕様です。getTimeBonusSeconds(newValue)内の秒数計算テーブルは以下のようになっています。
// js/game-core.js : getTimeBonusSeconds(newValue) 内の+TIME加算秒数ロジック
getTimeBonusSeconds(newValue) {
if (newValue <= 4) return 3;
if (newValue <= 8) return 5;
if (newValue <= 16) return 7;
if (newValue <= 32) return 10;
return 15;
}
合体後の数値(newValue) |
合体組み合わせ例 | 獲得ボーナス秒数 | 制限時間の上限(キャップ) |
|---|---|---|---|
| 4 | 2(+TIME) + 2 |
+3秒(3,000ms) | 最大 300秒(5分) まで蓄積可能 ( TIME_LIMIT_MS = 300000) |
| 8 | 4(+TIME) + 4 |
+5秒(5,000ms) | |
| 16 | 8(+TIME) + 8 |
+7秒(7,000ms) | |
| 32 | 16(+TIME) + 16 |
+10秒(10,000ms) | |
| 64以上 | 32(+TIME) + 32 など |
+15秒(15,000ms) |
ここで注目すべきは、if (current.type === 'time_plus' || next.type === 'time_plus')という条件です。片方だけが+TIMEを持っていればボーナスが発動しますが、合体した時点でその+TIME属性は消費され、合体後の通常タイルになります。つまり「2の+TIMEが出たからといって即座に2同士で合体させてしまうと+3秒にしかならないが、FEVER中に出現した16(+TIME)を通常の16とぶつければ一撃で+10秒になる」わけです。
03. PARTY FEVERの4大恩恵:タイマー完全凍結・スコア3倍・初期値4/8/16引き上げ
PARTYモードのもう一つの主役が、累計5組以上のマージコンボで発動する「PARTY FEVER」です。FEVER突入中に内部で何が起きているのか、コードを追ってみましょう。
// js/game-core.js : FEVER中のタイマー凍結とスコア倍率計算
if (this.gameType === 'party' && this.feverActive && this.feverFreezeStart !== null) {
currentFreeze = now - this.feverFreezeStart;
}
const effectiveElapsed = Math.max(0, rawElapsed - this.frozenTimeTotal - currentFreeze);
PARTY FEVERが発動している間(5手持続)には、次の4つの強力なバフが同時にかかります。
- 残り時間タイマーの完全凍結(TIME FREEZE):
feverFreezeStartからの経過時間はfrozenTimeTotalとして実経過時間から差し引かれるため、FEVER中は1ミリ秒たりとも持ち時間が減りません。しかもその間に獲得した+TIMEボーナスはそのまま持ち時間に上乗せされます。 - 獲得スコア倍率が常時3倍(×3.0):CLASSIC/HARDのFEVER倍率が2倍なのに対し、PARTYモードではFEVER中の獲得スコアが3倍に跳ね上がります。
- 新規スポーンから「2」が消滅し、4・8・16のみが出現:通常時は90%が「2」、10%が「4」ですが、FEVER中は「4が50%、8が35%、16が15%」という高数値テーブルに切り替わります。
+TIMEブロックの出現確率が7% → 14%に倍増:高数値スポーンと組み合わさることで、最初から8(+TIME)や16(+TIME)が直接盤面に湧いてくるボーナスタイムになります。
04. 残り時間を維持・回復する「+TIME育成」と高速スワイプ戦術
この仕様を踏まえると、PARTYモードでスコアを伸ばすための定石はシンプルに導き出せます。
- 通常時は「高速循環スワイプ」で累計5組マージを達成し、FEVER突入を最優先する:4×4×4盤面では1手ごとの精密な読みよりも、例えば「左→下→奥→下」のように3〜4方向をリズミカルに回して複数マージを起こし、一刻も早くFEVERに入れてタイマーを止めることが先決です。
- FEVERに入ったら湧いてくる
8(+TIME)と16(+TIME)を確実に回収する:FEVER中に湧く8(+TIME)(合体で16になり+7秒)や16(+TIME)(合体で32になり+10秒)を2〜3個回収するだけで、FEVERが明けたときには突入前より20秒以上持ち時間が増えています。 - ペアが隣り合っているのに合体しないときは「直交する第3軸」へ振る:4×4×4で平面方向ばかり連打していると、同じ数値がZ軸(奥行き)方向に並んでいるのに気づかず手が止まりがちです。手が詰まったと感じたらすかさず奥・手前方向へスライドさせると、一気に10個近いブロックが連鎖合体して道が開けます。
さて、ここまで第1回〜第4回にわたって各モードの仕様と攻略を解説してきました。次回(第5回)からはさらに一歩踏み込み、「1ターン1合体原則(processLine)のアルゴリズムと、インタラクティブ練習場(LessonCore)の内部設計」についてソースコード単位で紐解いていきます。それでは、また次回の記事でお会いしましょう!
PARTYモードでFEVER 3倍スコアと+TIME連鎖を体験する
4×4×4の64マス空間で136 BPMのビートに乗り、タイムアタックの限界へ挑もう。