goo blog サービス終了のお知らせ 

6 - 912 = -906

終わりました

シレンのバグ。雑記5。

2019-08-21 | バイナリ
調査終わりといいつつ調査の続き。
https://www.nicovideo.jp/watch/sm35569028
https://www.nicovideo.jp/watch/sm35569011
動画のなぜ痛み分けの杖を使ってるのかとかその辺の解説。
ここの説明は全部文字だけになるので動画はないです。

・まず初めにバグが起こる原因になる直前の処理の解説

$033609 86 00 STX$00  Xレジスタを$00に書き込み

これだけじゃ意味が分からないと思うけど「Xレジスタ」が原因と思ってください。
後述で説明します。

・痛み分けの杖処理
$0320C4 E2 30
$0320C6 22 A9 84 C2   JSL     S0284A9にジャンプ
$0320CA 60        RTS     処理終わり

$0284A9 08
$0284AA E2 30
$0284AC A5 00      LDA $00  $00からAレジスタに読み込み
$0284AE 8F A8 89 7E STA $7E89A8 Aレジスタの値を$7E89A8に書き込み
$0284B2 28
$0284B3 08        RTS    処理終わり

これ全部が痛み分けの杖処理です。
これも意味不明だと思いますが「Xレジスタ」が動いてないことはなんとなくわかってくれればいいです。

・この処理の前に「Xレジスタ」が最後に書き込みされた場所は?
$033606 BB        TYX    Yレジスタの値をXレジスタに書き込み
Yレジスタのようですね。
ではこのYレジスタはどこのものでしょうか?

$03350D A3 08       LDA $08,s  スタック$08からAレジスタに読み込み
$0335DF A8         TAY   Aレジスタの値をYレジスタに書き込み
スタック$08のようですね。
こいつは…って長いので省略。
正体は7E8B8C+XXのXX部分に該当するもの。
フロア内に存在するアイテムの何番目かをIDにして管理してる番号です。
こいつは7Fを起点として7E、7D…というようにアイテムが生成された順番から-1を引いたものです。

・つ、つまり・・・?
投げた痛み分け=存在するアイテムのID=「Xレジスタ」となります。
みんなついてこれてるかな・・・?

・というわけで
$022C3F BF 81 87 7E LDA $7E8781+"X"  $7E8781+"Xレジスタ"のアドレスの値をAレジスタに読み込み
$022C43 F0 55    BEQ #$55      00ならばジャンプする
$022C45 BF F1 85 7E LDA $7E85F1+"X"  $7E85F1+"Xレジスタ"のアドレスの値をAレジスタに読み込み
$022C49 F0 4F    BEQ #$4F      00ならばジャンプする
$022C4B BF A1 85 7E LDA $7E85A1+"X"  $7E85A1+"Xレジスタ"のアドレスの値をAレジスタに読み込み

$022C4Bのところの値が以下なら個別処理に移る
0x0A 0x09 トド、ミドロの分裂処理
0x18 がぼうれい武者ワープ処理
0x19 がマスターチキンレベルダウン処理
それ以外は処理終わり。

・動画の補足
$022C4Bの処理の値が重要なので最大HPやら現在HPの調整をして個別処理に移動させてバグらせてます。

とりあえずバグ調査終わり。
ネタが思い浮かぶか何か思いついたらまたやるかも・・・?
コメント

シレンのバグ。雑記4。

2019-08-20 | バイナリ
自分は理解できるが他人は理解不能な気がするので動画で解説。
https://www.nicovideo.jp/watch/sm35565471

動画だと敵が分裂してる小ネタレベルですが本当にちゃんと調整すると結構異次元な数値参照するのでいろいろ問題が起こる。
テスト環境で痛み分け投げるとID74参照になって全部複数回当たるので仕込みでバグ起きるかも。
ただその仕込み考えるのは非常にめんどくさいのでやらんと思うけどね。

種族ID09ミドロ系、0Aトド系が分裂でバグやつ。
18ぼうれい武者でワープ、19マスターチキンでレベルダウン処理。

分裂以外はたぶんバグらず正常に動きそうなので分裂系の処理で処理終わらせずに突破する箇所。

0x022CF6 Xレジスタ+IDの敵Lvが1以上
0x022CD9 Xレジスタ+IDの敵HPが0以外
これ突破で分裂系の処理に入るんでこの先で壊れてくる。
処理り追うのめんどくさいからあんま見てないけどね。
ちなみにここでいうXレジスタはバグIDです。

テスト中に途中の最初の種族IDフラグ処理つぶして分裂処理に移行させたら何もないところからセルアーマー系が出現。
ということでしこめば行けると思うけど不正なID14以降が出てくると最悪フリーズするんで実用性皆無な気も…?

バグ調査終わり。
コメント

シレンのバグ。雑記3。

2019-08-19 | バイナリ
誰も調べてない気がする遠投バグ解説。
アドレスはv1.1(書き換え版、NP版、VC版です。v1.0のSFC版ではアドレスがずれる可能性あり)

・はじめにバグ解説
遠投の腕輪を装備して特定のアイテムを敵に当てる。
様々な現象が起こる。
ただし複雑な条件がある。

・なんでこれが起こるのか
$033609 86 00 STX$00 Xレジスタ(遠投が当たった敵のID)を$00に保存
この処理でXレジスタに敵のIDが正常に入ってないことが原因。
じゃあなんで正常なのが入らないかというとこの前の方の処理 $033602 あたりで敵のID保存してないかそれとも投げ処理の最後にID保存処理しないため。
その結果どうなるかというとめちゃくちゃなIDが入って $03360B 22 1C 2C C2 JSL $022C1C (敵IDから種族IDを参照して敵のステータスを設定処理)に飛んで壊れる。

・試しにやったがバグで壊れないんだけど?
特定のアイテム(後述)じゃなきゃダメ。
それ以外の条件として壊れたIDの参照結果(この先でいうフラグは参照元のフラグ。壊れているのでこれ以降の部分を読み込む)が封印フラグがついてない、HP0じゃない、特定の種族IDであるが条件。
満たせていないと何も処理されずに終わる。

・特定のアイテムとは?
武器盾矢腕輪 該当なし
草 幸せ、天使、くねくね、不幸、キグニ、命、毒、睡眠
巻物 ジェノ
壺 やりすごし
おにぎり 該当なし
杖 幸せ、不幸、身代わり、場所替え、ブフー、金縛り、痛み分け
肉 すべて

通常出現するアイテムのみ調査。

・読んでもよくわからない…遠投ってバグ誘発アイテムってこと?
というわけでなく意図的に仕込んで起こすくらいじゃないと発生しないので現状は特に問題ない。
その仕込みも大変。


長くなってきたので次回に続く…?
コメント

シレンのバグ。雑記2。

2019-08-19 | バイナリ
昔書いたばぐ2の記事のガイコツまどうの杖投げバグの解説。

・はじめにバグ解説
セーブデータ1で杖を反射させる(される)。
反射されたら中断。
リセットせずにセーブデータ2でフロア内で杖を一度も振らず(振らせず)にガイコツまどうの杖を投げる。
杖が当たった相手のレベル依存でガイコツまどう系の杖の効果が発動。
リセットしてセーブデータ2を再開。
ガイコツまどうの杖バグが発生しておらず通常の効果になる。

・なんでこれが起こるのか
バグが起こる原因のRAMの7E935Eのフラグが冒険中断→再開でクリアされず残るため。
この値はSRAMに記憶されない。

・これで何ができるのか
行動がずれるので回想バグ。
応用としてセーブデータ1でバグを起こした状態で次の階へ。
移動した階で投げてバグを起こす。
リセットしてセーブデータ1を再開。
行動がずれるので回想バグへ(SRAMに記憶されないため再開前でバグ起こし、再開後にバグが起きなくなるため)。

・なぜ今更解説を?
軽く検索しても記事とか見つからなかったから。
特に深い意味はない。
コメント

シレンのバグ。雑記。

2018-12-04 | バイナリ
ネットで調べたけど出てこなかったやつとか。

・多重遠投バグ
(出現限界近く?)の敵に遠投で同時に物を当てるとバグることがあります。
症状軽微:エフェクトの見きれやずれ。
重症:フリーズ(リセットで復帰可能)、透明な敵(不正ID)の出現。
遠投処理の復帰がおかしいのが多分原因。
復帰時に攻撃を当てた敵を記憶していない。

・セリフ見きれ
大量の敵を同時に倒すことによって発生。
出現限界近くまでいる敵を遠投のラセン風磨盾投げでなおかつレベルアップなどで発生。
メモリのセリフ領域の不足が原因。

・BGM、効果音が消える
(特定のBGM中?に特定の効果音を大量に同時再生すると発生)
フェイの問題で視界外で敵の地雷同時20再生とかでおこることがあります。
コメント (2)