Skip to content

Instantly share code, notes, and snippets.

@oupo
Created July 17, 2010 07:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oupo/479329 to your computer and use it in GitHub Desktop.
Save oupo/479329 to your computer and use it in GitHub Desktop.

アイテムドロップ乱数調整

使われる乱数

アイテムドロップの判定に使われる乱数は以下の64bitの線形合同法です

u64 seed;

u32 rand(u32 max) {
	seed = seed * 0x5d588b656c078965 + 0x0000000000269ec3;
	return ((seed >> 32) * max) >> 32;
}

初期seedはゲーム起動時に決まります。 上位32bitは0で固定。 下位32bitはVCOUNTレジスタの値と1フレームごとに進むカウンタ?を足した値になります。

僕の環境のDeSmuMEだと0x000000f6、実機だと0x0000010cばかり出ました。 同じ環境だとほぼ一定の値になると考えてよさそうです。

タイトル画面(オープニングムービーが終わった後)中は時間経過で勝手に乱数が進みます。 「続きから」を押した画面では進みません。連打で起動した場合だいたい20ぐらい消費します。

seed確認方法

選手バインダー画面で選手を開いたときに1消費、選手が動いたときに2消費します。 開いたときと動いたときの1つ目の消費は恐らく次にアニメーションするまでの時間かなと思います。 動いたときの2つ目の消費はrand(2)で、0なら靴をとんとんさせるアニメーション、1なら照れるようなしぐさのアニメーションです。 これを使って初期seedと消費数を特定することができます。

実践方法

ゴールモーションのおかげで乱数消費数を把握しながら戦闘を進める必要がなくなりました。

  • リセット
  • 選手バインダーで初期seedと消費確認
  • 狙いのアイテムがドロップできる消費数を確認
  • 試合終了間際必殺技でゴールを決める
  • リプレイ時のゴールモーションで現在消費数を確認して、狙いの消費数まで進める
  • あとは乱数消費されないようにコマンドバトルを発生させずに試合終了まで待つ

ツール: http://oupo.github.com/tools/inazuma3-drop.html

ドロップ判定

アイテムドロップのデータには以下が3つ設定されています

  • アイテムID
  • ドロップする確率

戦闘終了時にドロップ判定がされます。 アイテムIDが0でなければ、(rand(100) < 確率)のときドロップします。

戦闘中の乱数消費

これ以外の消費がある可能性ももちろんあります

戦闘開始時の消費

戦闘開始時に4つ消費します (ミニバトルではなし)

コマンドバトルの乱数消費

  • 基本的に4消費
  • スキル クリティカル!持ちだとさらに1つ消費
  • こちらも相手も2人以上の場合、さらに1つ消費
  • トータルテクニックでは(勝っていた or 負けていた)けれど逆転した場合、さらに2つ消費
  • 勝った側が(スライディングや突破などで)ボールをキープできなかった場合、さらに4つ消費

メモリ内容を見たりせずにトータルテクニックで勝っていたかどうかを判別する方法はまだ分かりません。

「選手の位置をかえられます」状態

キックオフ以外で「選手の位置をかえられます」状態になったとき(ファールやオフサイド、ボールがタッチラインの外に出たときなど)42消費します。コーナーキックのときは消費しないようです。

つづけるを選んだときに座標が変わる選手の数?*2消費します。座標が変わる選手の数は8~11のときが多いみたいです。

必殺タクティクス

必殺タクティクスが発動したとき、両方タクティクスを発動した場合は22、そうでなければ11消費します。

ボールの競り合い

ボールの競り合いがあったとき2消費します

蹴ったとき

ボールを蹴ったときやシュートを打ったときに1消費することがあります。条件はオフサイドになるような選手がいることのようです。(その方向に蹴ったかは関係なく)

オフサイドになる選手が複数いる場合、その人数分消費。

ファールなどからの再開で蹴りだすときは人数分*2?

シュート

  • ノーマルシュート・ループシュート・ボレーシュート・ヘディング・無人ゴールシュートを使ったときや使われたとき1消費(リプレイ時にも消費)

  • ゴールが決まったときに3消費

  • リプレイ時のゴールの中に入るモーションで1消費 (消費の調整に使えそう)

  • ノーマルキャッチ・パンチングで1消費

  • 転がってきたり飛んできたボールをキーパーがキャッチするモーションのときも1消費

ゴールの中に入るモーションの消費はrand(2)で0なら左から右にゴールが決まるモーション、1なら右から左にゴールが決まるモーションです

シュートブロック

  • ミスのときは1か3消費。パワーダウンやブロックのときは3消費。

前半終了・試合終了

  • 2消費(セリフを言う選手の決定)

試合終了時

  • クリアポイントのばらつきのために1消費
  • アイテムドロップ処理(0~3消費)
  • 熱血ポイントのばらつきのために1消費
  • 友情ポイントのばらつきのために1消費
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment