ホーム > セレクトバグ > ポケモンを呼ぶ笛 フリーズ条件完全解明

ポケモンを呼ぶ笛 フリーズ条件完全解明

…… あー あー われわれは
なくこも だまる バイナリだん!
プログラムの かいどくを すすめた
3かげつかんの どりょくが みのり
いま ここに ポケモンをよぶふえの
かんぜんかいめいを せんげん するー!

というわけで、前回イーブイを出すときにはかなりの予測を含んでいましたが、フリーズ条件の完全解明が完了しました。
まずは原理から。
1. 道具欄を開くと現在の画面のマップチップ情報が0xCD7Cから先に360byteコピーされる。この時、0xCD7Cは画面の左上、0xCD7Dは画面の左上のひとつ右、画面の右上に到達したら画面の左上の真下の・・・と右下までコピーする。
2. 道具を使った瞬間に、0xCF78に使った道具の番号が保存される。0xCD68-0xCD7Bの20byteに道具名がコピーされる。このコピーは固定長。
3. そのまま0xCD68から、終端文字の0x50が現れるまでのデータを0xCF45から先にコピーする。ここで、20byte以内に0x50がないとそのまま画面のデータを読んでコピーを続け、0xCF78に保存されている道具の番号を壊す。
4. 道具使用時の処理に入る。0xCF78に入っている道具番号を読み込み、該当の道具の処理に飛ぶ。

ここまでで道具使用共通の処理は終了。個別の処理に入るのですが、作業用メモリがぐちゃぐちゃになっているため「てへを使った」という記録も壊れています。
何を使ったかの情報はやっぱり画面の一部分で上書きされています。
画面
チップ番号
赤枠で囲んだチップが「何を使ったかの情報」になっているチップです。このチップ番号がそのまま「内部番号何番目」にあたるので、たとえばこの場合だと「2C」、つまり?????(偽)を使ったことになります。
もちろん使えないのでオーキドのことば、その後カーソルが上に動き勝手に笛を吹いてメニューが閉じ、戦闘に入ります。(成功パターン)

失敗する場合は大きく分けて2パターン、画面がホワイトアウトする場合とボールを投げたり暴走する場合があります。
前者は戦闘中に使える道具かつポケモンを選ぶ系の道具だった場合、後者は戦闘中に直接使える道具だった場合。

次に、以上をまとめて成功条件をはっきりさせます。チップセットは街や道路のものとします。違うチップセットの場合はチップ番号で適宜読み替えてください。
・「フリーズ条件」の位置のマップチップ番号をアイテム番号として見た時に、「戦闘中に使えない道具である」
・画面の左上から「出現種族」までに木の左下(0x50)が出てこないこと
・「出現種族」マス以降に可及的速やかに0x50が出現すること(どこまでならフリーズしないかは未検証)
多分これで確定でいいと思います。問題は、ゲーム中でどのチップがどの番号か知る術がないということか。
まあ、フリーズ条件の場所が分かっただけよしとしてください・・・

— 追記 —
げんきのかたまりでホワイトアウトしないことが判明したので、若干条件が違う模様。

広告
カテゴリー:セレクトバグ
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。