接触1回の判定順序
接触1回の判定レーン(全体)build 371
入力
WASD・Space・左クリック。押した瞬間に「今どの状態か」を読む。
_jumpButton / SetPunchジャンプ値の選択
通常・前方向・ラグドール中の3つの値から、その時点の状態に合うものを1つ選ぶ。
_jumpValue / Forward / Ragdoll接触の判定
パンチの当たりは相手がスタン対象かを引いて決まる。外れれば何も起きない。
GetStunCharacter同期
スタン中の動きは全員の画面で同じになるよう送られる。ここで遅れが出ると見た目がずれる。
SyncStunMoveBot結果
勝敗を確定する。同着や取りこぼしがあれば勝者を差し替える処理が入る。
_setWinOrDefeat / ChangeWinner
なぜ順序で見るのか
このゲームの画面はにぎやかで、何が起きたのか分かりにくいまま次のラウンドが始まります。しかし処理としては、入力を受け取る→状態に合う値を使う→当たりを引く→全員に同期する→勝敗を確定する、という一直線の並びになっています。どこか1段がずれると、見える結果だけがおかしくなります。
たとえば「パンチが当たったように見えたのに相手が止まらない」の場合、原因は当たり判定そのものではなく、当たった後のスタン同期の段である可能性があります。段の名前が分かっていれば、何を疑うかが変わります。
8段の判定表
ビルド 371 のバイナリに残っている識別子を、起きる順に並べたものです。上から順に読み、自分の症状がどの段に近いかを見てください。
| 順 | 入力・状態 | 判定される内容 | 内部の名前 | 出典 |
|---|---|---|---|---|
| 1 | WASD / Space / 左クリック | 移動・ジャンプ・パンチの入力を受け付ける | _jumpButton / SetPunch | bin |
| 2 | ジャンプ入力 | 通常・前方向・ラグドール中で別の値を使う | _jumpValue / _jumpValueForward / _jumpValueRagdoll | bin |
| 3 | パンチの当たり | 相手がスタン対象かどうかを引く | GetStunCharacter / Stuncharacters | bin |
| 4 | スタン中の相手 | スタン中の移動を全員に同期する | SyncStunMoveBot | bin |
| 5 | コインとの接触 | 取得上限とクールダウンを満たすか見る | CanCollectCoin / CanCollectCoinTimer / LimitCollectCoin | bin |
| 6 | レース中の通過 | 最後に通ったチェックポイントを更新する | LastCheckPoint / _lastCheckPoint | bin |
| 7 | 落下 | 復帰地点へ戻す | RespawnRacing / LMSTriggerRespawn | bin |
| 8 | 決着 | 勝敗を確定し、必要なら勝者を差し替える | _setWinOrDefeat / ChangeWinner | bin |
ジャンプは1つではない
ジャンプの値は1つではなく、通常(_jumpValue)、前方向(_jumpValueForward)、ラグドール中(_jumpValueRagdoll)の3系統に分かれています。つまり、同じ Space を押しても、そのとき体がどの状態かによって飛び方が変わるという設計です。
さらに _jumpAuto と _jumpDelay という項目があります。押しっぱなしで自動的にジャンプが入るのか、入力から発動までに遅延を挟むのかは、値を見ないと決められません。ただ、少なくとも「押した瞬間に必ず同じ高さで飛ぶ」作りではないことは確かです。
ラグドール中用のジャンプ値があるということは、吹き飛ばされている最中でも入力を受け付ける場面がある、と読めます。これは推測ですが、実戦では空中での立て直しを意識すると安定します。
パンチは「止める」ための道具
パンチの内部名は Slap で、当たった相手はスタン状態になります(GetStunCharacter / Stuncharacters)。そしてスタン中の移動は全員に同期されます(SyncStunMoveBot)。ここが重要な点で、スタンは自分だけの画面で起きる演出ではなく、全員の画面で同じ位置に止まる処理です。
つまりパンチの価値はダメージではなく「その場に留めさせること」にあります。落ちそうな足場の上で相手を止めれば、そのまま奈落に落ちます。逆に、自分がスタンしたときに跳べるかどうかは、さきほどのラグドール用ジャンプ値の話に繋がります。
決着のつけ方
結果表示は Victory01 と Defeat の2系統で、内部には勝敗を確定する _setWinOrDefeat と、勝者を差し替える ChangeWinner / ChangeWinnerCount があります。勝者を後から差し替える処理が必要になるのは、同着や取りこぼしが起こり得るからです。
Candy Hunt 系では CheckerWinnersCoin と CounterWinner という数え方の処理も確認できます。コインの取得数を最後にもう一度数え直す作りだとすれば、「画面上では勝っていたのに負けた」という体験は、この数え直しの段で説明できます。これは推測ですが、勝敗が「取った瞬間」ではなく「数え直し」で決まる余地はあります。