ガイコツまどうの杖のバグ

ガイコツまどうの杖を投げると、モンスターの特技としてのガイコツまどう系の杖の効果が出ることがあるというバグがありますが、その原因が判明しました。

ガイコツまどうの杖を振った時の処理は031EC3以降にあります。実はこのルーチンはガイコツまどう系の杖を振った時の処理と共通で、このルーチンで分岐するようになっています。
このルーチンは、$00(振られた側)と$01(振った側)を引数としています。魔法弾が反射した場合は$00は反射された側、$01は反射した側になります。
更に、7E935Eのbit7も参照します。7E935Eのbit7は、シレンが道具を使った時やガイコツまどう系が杖を振った時に、それらの処理の前に更新され、その行動の結果魔法弾が反射されるときに1になり、そうでないときに0になります。
7E935Eのbit7が0のときに$01(振った側)の、1のときに$00(反射された側、すなわち杖を振った側)の外見を読み込みます。その結果、必ず杖を振った側の外見が読み込まれ、それがシレンのときにガイコツまどうの杖の処理に、シレンでないとき(ガイコツまどう系に杖を振られたか、シレンがそれらの肉の特技を使った場合)にガイコツまどう系の杖の処理に分岐するようになっています。

しかし、7E935Eのbit7はシレンが杖を投げた時には更新されません。従って、ガイコツまどう系に杖を振られてやまびこの盾で反射したり、エーテルデビルに杖を振って反射された後、他の道具を使わずにガイコツまどうの杖を投げると、ガイコツまどう系の杖の効果が出てしまいます。
杖を投げた時は、$00は投げた側、$01は投げられた側です。しかし、7E935Eのbit7が1のままなので、本来ならば$01(投げた側)の外見が読み込まれなければならない所を、$00(投げられた側)の外見が読み込まれ、それは当然シレンではないので、ガイコツまどう系の杖の効果が出ることになります。
レベルも同様で、本来ならば投げた側のレベルに応じた効果を出さなければならない所を、投げられた側のレベルに応じた効果が出ることになります。例えば、デブーチョにガイコツまどうの杖を投げると、かなしばりやいかずちの効果が出たりします。

ということで掛軸裏の洞窟でも、エーテルデビルに杖を振って反射された後、レベル3のモンスターにガイコツまどうの杖を投げれば肉が手に入る可能性があります。残念ながらエーテルデビルはレベル1しかいないので、エーテルデビルの肉は手に入りませんが。
掛軸裏の洞窟でこのバグが出にくいと言われているのは、やまびこの盾が出ないのでエーテルデビルに杖を振るしか方法がないからでしょう。
このバグ技を意図的に使って、風来のシレンランキング等にエントリーしたりしないで下さい。
[PR]
# by oyasen | 2009-10-16 20:01 | 改造・解析

道具を落とす確率のバグ

「洞窟マムルが道具を落とす確率は100%ではない」という指摘をかなり前(5ヶ月前)に頂いたのですが、ようやく検証ができました。
実は、とんでもないバグがあって、道具を落とす確率はモンスターのレベルに関係なく、そのモンスターの種族レベル1の値を見ていました。
従って、マムル、あなぐらマムル、洞窟マムルが道具を落とす確率は全て1/64です。他の種族も確認はしていませんが恐らく同様です。
怪物のステータスリストの、道具の落としやすさレベル2,3の値は全く意味がないということが判明してしまいました。

まあ、確率に関するバグは発見が難しいかも知れません。デバッグチームにも詳細な確率は教えていないかも知れません。
しかし、洞窟マムルのパラメータを設定した人は、フェイの最終問題をクリアしなかったのでしょうか?
フェイの最終問題をクリアしていれば洞窟マムルも何匹か倒しているでしょうし、それなら洞窟マムルが必ずしも道具を落とさないことに気付く筈です。
それとも、レベル毎に値を設定してみたものの、結局没にしてしまったのでしょうか?
[PR]
# by oyasen | 2009-10-12 18:03 | 改造・解析

とりあえず報告だけ

キャラのグラフィックデータの展開に成功しました。
圧縮方法は古印体のそれとよく似ていて、圧縮していてもROMのうちかなりの部分をキャラのグラフィックデータが占めているようです。
詳しくはまた後日にでも。
[PR]
# by oyasen | 2009-10-03 22:21 | 日記

M系列

本ゲームに用いられている乱数生成アルゴリズムは、「M系列」と呼ぶらしいことが分かりました。
以前この乱数の周期は2^31だと言いましたが、それに関するページを見ていると、どうやら2^31ではなく2^31-1になるそうだったので、これは間違えたかと思ってもう1度周期を確認してみると、本当に2^31-1でした。
以上、些細なミスかも知れませんが訂正です。

おまけ(ムクゲ幽谷)
http://oyasen20.tripod.com/image/mukugeyukoku.png
[PR]
# by oyasen | 2009-09-28 19:55 | 改造・解析

BGM改造?

メニュー画面のメロディの位置を見つけました。ヘッダ無しで1F2FB7h(メモリに読み込まれるとDF2FB7h)に、以下の数列があります。

D8 63 D9 50 1A 1C 1D 1E DD

これを次のように変更してみて下さい。

D8 63 D8 50 18 18 18 18 D8

メニュー画面のBGMは、第1小節のメロディが"休 C D E G A B A"であることは絶対音感があれば分かりますが、これが"休 C C C C C C C"に変わる筈です(伴奏は手を付けていないのでそのままです)。
取り敢えず、18h=C音、19h=D音、……のようですが、DXhの時の次のバイトが意味不明です。

BGMの改造は難易度が高く、あまり一般的には行われていません。私も他のゲームでBGMを変更した経験はありません。なのでBGMのフォーマットがどのようになっているかは想像も付きません。
何せ相手は目には見えない音ですから、何の予備知識もなしに解析するのは相当苦労しそうです。ということで、今言えるのはこれだけです。

にも関わらず、どうやってメロディの位置を見つけたかと言うと、メモリビューアの上の方に、その瞬間に鳴らされている音と同じコードを示す(それは上とは違い、MIDIと同じでした)バイトがあり、そこの変化を追い掛けて見つけました。
[PR]
# by oyasen | 2009-09-06 21:34 | 改造・解析