CGCrazy Guys 判定帳

接触1回の判定順序

負けた理由は、たいてい1か所に固まっています。どこで決まっているのかを順番で追えるようにしました。

5 節更新 2026-10-28

接触1回の判定レーン(全体)build 371

  1. 入力

    WASD・Space・左クリック。押した瞬間に「今どの状態か」を読む。

    _jumpButton / SetPunch
  2. ジャンプ値の選択

    通常・前方向・ラグドール中の3つの値から、その時点の状態に合うものを1つ選ぶ。

    _jumpValue / Forward / Ragdoll
  3. 接触の判定

    パンチの当たりは相手がスタン対象かを引いて決まる。外れれば何も起きない。

    GetStunCharacter
  4. 同期

    スタン中の動きは全員の画面で同じになるよう送られる。ここで遅れが出ると見た目がずれる。

    SyncStunMoveBot
  5. 結果

    勝敗を確定する。同着や取りこぼしがあれば勝者を差し替える処理が入る。

    _setWinOrDefeat / ChangeWinner

なぜ順序で見るのか

このゲームの画面はにぎやかで、何が起きたのか分かりにくいまま次のラウンドが始まります。しかし処理としては、入力を受け取る→状態に合う値を使う→当たりを引く→全員に同期する→勝敗を確定する、という一直線の並びになっています。どこか1段がずれると、見える結果だけがおかしくなります。

たとえば「パンチが当たったように見えたのに相手が止まらない」の場合、原因は当たり判定そのものではなく、当たった後のスタン同期の段である可能性があります。段の名前が分かっていれば、何を疑うかが変わります。

8段の判定表

ビルド 371 のバイナリに残っている識別子を、起きる順に並べたものです。上から順に読み、自分の症状がどの段に近いかを見てください。

接触1回の判定順序(ビルド 371 の識別子から再構成)
順入力・状態判定される内容内部の名前出典
1WASD / Space / 左クリック移動・ジャンプ・パンチの入力を受け付ける_jumpButton / SetPunchbin
2ジャンプ入力通常・前方向・ラグドール中で別の値を使う_jumpValue / _jumpValueForward / _jumpValueRagdollbin
3パンチの当たり相手がスタン対象かどうかを引くGetStunCharacter / Stuncharactersbin
4スタン中の相手スタン中の移動を全員に同期するSyncStunMoveBotbin
5コインとの接触取得上限とクールダウンを満たすか見るCanCollectCoin / CanCollectCoinTimer / LimitCollectCoinbin
6レース中の通過最後に通ったチェックポイントを更新するLastCheckPoint / _lastCheckPointbin
7落下復帰地点へ戻すRespawnRacing / LMSTriggerRespawnbin
8決着勝敗を確定し、必要なら勝者を差し替える_setWinOrDefeat / ChangeWinnerbin

ジャンプは1つではない

ジャンプの値は1つではなく、通常(_jumpValue)、前方向(_jumpValueForward)、ラグドール中(_jumpValueRagdoll)の3系統に分かれています。つまり、同じ Space を押しても、そのとき体がどの状態かによって飛び方が変わるという設計です。

さらに _jumpAuto と _jumpDelay という項目があります。押しっぱなしで自動的にジャンプが入るのか、入力から発動までに遅延を挟むのかは、値を見ないと決められません。ただ、少なくとも「押した瞬間に必ず同じ高さで飛ぶ」作りではないことは確かです。

ラグドール中用のジャンプ値があるということは、吹き飛ばされている最中でも入力を受け付ける場面がある、と読めます。これは推測ですが、実戦では空中での立て直しを意識すると安定します。

パンチは「止める」ための道具

パンチの内部名は Slap で、当たった相手はスタン状態になります(GetStunCharacter / Stuncharacters)。そしてスタン中の移動は全員に同期されます(SyncStunMoveBot)。ここが重要な点で、スタンは自分だけの画面で起きる演出ではなく、全員の画面で同じ位置に止まる処理です。

つまりパンチの価値はダメージではなく「その場に留めさせること」にあります。落ちそうな足場の上で相手を止めれば、そのまま奈落に落ちます。逆に、自分がスタンしたときに跳べるかどうかは、さきほどのラグドール用ジャンプ値の話に繋がります。

決着のつけ方

結果表示は Victory01 と Defeat の2系統で、内部には勝敗を確定する _setWinOrDefeat と、勝者を差し替える ChangeWinner / ChangeWinnerCount があります。勝者を後から差し替える処理が必要になるのは、同着や取りこぼしが起こり得るからです。

Candy Hunt 系では CheckerWinnersCoin と CounterWinner という数え方の処理も確認できます。コインの取得数を最後にもう一度数え直す作りだとすれば、「画面上では勝っていたのに負けた」という体験は、この数え直しの段で説明できます。これは推測ですが、勝敗が「取った瞬間」ではなく「数え直し」で決まる余地はあります。