1つのフロアができるまで その1

1つのフロアができるまでに何が行われているか、今まではブレークポイントで調べたい処理だけ調べていたので全体が見えなかったのですが、地形のタイプを決定してからフロアが完成するまでに何が行われているか、その順番が分かりました。
これは通常の地形での場合です。特殊地形ではもう少し簡単でしょう。

1.フロアの構造決定、埋蔵金の出現判定
2.1.の時点では左上が(0,0)なので、地形データを右に4、下に4ずらす
3.外壁
4.迷路部屋
5.部屋の出入口の座標を書く
6.水脈
7.店
8.浮島
9.水溜まり
10.網目部屋
11.柱部屋
12.暗い柱部屋
13.モンスター
14.道具
15.階段
16.何もしない(没になった処理でもあったのでしょうか)
17.罠
18.隠し部屋、隠し通路
19.シレンの位置
20.モンスターハウス
21.1.で埋蔵金出現とされていれば埋蔵金出現
[PR]
# by oyasen | 2010-01-24 11:50 | 改造・解析

とおせんりゅう系の肉の特技が使えないバグ

とおせんりゅう系の肉を食べて特技を使っても、(間に壁や水脈がなくても)2マス潜って進めないというバグがありますが、その原因が判明しました。
このバグが発生する条件から言うと、ワナ師状態(ワナ師の腕輪を装備中か、カラクロイドに変身している)の時にシレンが罠に乗ると(作動させなくても)、クリア後のダンジョンに入るか、次の冒険になるまでとおせんりゅう系の肉の特技が使えなくなります。

まず、モンスターが罠を踏む仕組みの解説が必要になります。
メモリの$7E8899~$7E88ACは、通常は00ですが、シレンがワナ師状態の時、モンスターが罠に乗ると、そのモンスターの足元の道具・罠コード(C0~D8またはE0~F8)が入り、後でこの値を調べて罠を作動させていくようになっています。罠が作動するとこの値は00に戻ります。
この処理はキャラがシレンの時の例外処理が行われておらず、シレンに対しても同様の処理が行われます。元々シレンが罠を踏む処理とモンスターが罠を踏む処理は別なので、シレンに対する値($7E88AC)は本来は未使用の値で、次のフロアに進んでも00に戻ることはありません。
なので、一度この処理でシレンに対する値がセットされてしまうと、別の罠に乗ってその値が更新されることはあっても、クリア後のダンジョンに入ったり、帰還するか倒されるかして次の冒険になって、キャラのステータスの領域がリセットされるまで、その値は00には戻らないことになります。

次に、とおせんりゅう系の肉の特技ですが、この特技による移動の処理(02791F~027950)は、モンスターの移動の処理と共通になっています。
この処理は、移動するモンスターに対して先程の値を読み取り、00でなければ移動を無効にするようになっています。これにより、モンスターを場所替えの杖で罠に乗せると、そのターンにモンスターは罠を踏み、攻撃はしても移動はしないようになっています。
それではシレンがとおせんりゅう系の肉の特技を使うとどうなるか。ワナ師状態で一度も罠に乗ったことがなければ、先程の値は00だから問題ありませんが、そうでなければ移動できないことになってしまいます。

ということで、罠に乗らずにクリアするなんて殆ど不可能な掛軸裏の洞窟では、とおせんりゅう系の肉は2マス先を確認できるだけのものに過ぎなくなるということになります。
[PR]
# by oyasen | 2010-01-17 12:57 | 改造・解析

web拍手への返信 その5

>「やみふくろうで時限爆弾」の記事は大変興味深いものでした。ところで、先日フェイの最終問題をプレイしていたところ、何故か廊下にやみふくろうが発生していました(階層などは忘れましたが・・・)。シューベルなどで呼んだ覚えもなく、肉を投げた覚えもありません。あかりの巻物を読んで足踏みしてたら、廊下で全く動かない敵がいたので、確認してみたらやみふくろうだった、というものでした。もしかしたら覚えがないだけでシューベルが呼んだだけかもしれませんが、このやみふくろうの出現がバグによるものであれば、時限爆弾の出現と関係あるかもしれませんね。

私も、食神のほこら20Fでトド狩りをしているといきなりオドロがやって来た経験があります。しかもエミュレータで、です。
その時は真面目にプレイしている最中だったのですが、あそこでセーブデータをコピーしておけば良かったなと後悔しています。


> 道具を落とす確率の件ですが、是非ともお願いしたいです。
>
> 私生活が落ち着いたらとあるゲームの改造にチャレンジしてみようと思っておりまして、
> こういうプログラムの追加もいい勉強になるのではと考えております。
>
> そういえばオヤジ戦車さんはどうやってこういう類の知識や技術を取得されたのですか?

それはこっちが聞きたいくらいで、実はプログラム解析の教科書的なサイトってなかなかないんですね。
なければ私が作っても良いのですが、私も暇人ではありませんし、正直に言うと「何となく」こうだろうと命令を解釈している所があるので他人に説明できる自信がありません。
最初は本当に手探りで、予備知識なしで辞書を片手に外国語を翻訳するようなものでした。命令の意味もよく知らない状態から始めたので、真っ先に調べたダメージ計算式ではそれだけで2日かかりました。
道具を落とす確率のバグの修正方法と、そのプログラムの解説はその内書きます。後、私が参考にしたサイトをいくつか挙げておきます。

http://www.geocities.jp/to_546/intro/intro.html
http://matsucon.web.fc2.com/snes/snes_cpu.html
http://vip.rgr.jp/sm4wiki/index.php?%A5%D0%A5%A4%A5%CA%A5%EA%A1%F5ASM%B0%EC%CD%F7
http://hp.vector.co.jp/authors/VA042397/snes/65816.html
http://dragon.s151.xrea.com/65816/65816.html

但し、何のゲームを改造されたいのか分からないので一応言っておきますが、SFCとそれ以外ではCPUが違うので、コードと命令の対応も違い、当サイトは参考にならないのでご注意下さい。


> いつも楽しく、また興味深く拝見しています。
> ところで変化の壷なのですが、
> 各村、特に渓谷の宿場での参照先はこばみ谷の落下アイテムと全く同じなのでしょうか。
> 確か月影村はダンジョンの難易度設定に準じたような。
>
> では、今後のご健勝も楽しみにしています。

町や村もこばみ谷の一部ですから、出現する道具もこばみ谷のものと変わりません。
勿論、変化の壺の場合は2/256の確率で剛剣・風魔の処理に分岐しますが。
[PR]
# by oyasen | 2010-01-10 12:31 | web拍手への返信

ダンジョンの作られ方

とうとう不思議のダンジョンシリーズの要にまで手を出しました。と言っても、実は10ヶ月前に調べていたのですが、想像に難くないでしょうがプログラムが長いので、なかなか解説する気力が起きず、気が付けばこんなに時間が経過していたのでした。なので簡単に解説します。
通常の地形で1~3Fの場合だけ解説しますが、特殊地形でも作られ方はよく似ていると思います。

最初に、「ブロック」という単位を解説しておかなければなりません。
通常の地形の場合、1つのフロアは5*3のブロックに分かれています。この内中央のブロックを除いた14ブロックの中に部屋が配置されます。
以下の画像を見れば直ぐに分かります。

http://oyasen20.tripod.com/image/block.png

なぜ中央のブロックが使われないのかは分かりませんが、いつも中央に描画されるシレンが邪魔になるからかも知れません。

まず、通路の骨格を決定します。14ブロックの中からランダムに1ブロックを決定し、そこから一筆書きで既にある通路に当たらないようにして、4方向どこにも進めなくなるまで進めていきます。最も左上のブロックから始めた例です。

│←─┐□
└┐×└┐
□└──┘

次に、まだ骨格が決められていないブロックがあれば、それがなくなるまで、「既に骨格が決められたブロックから」分岐して、同様のことを繰り返します。

│──┬→
├┐×└┐
↓└──┘

どうして、骨格が決められていないブロックから進めないのか。少し考えると、同じフロア内で繋がっていない部分ができてしまうことが分かると思います。
全てのブロックで骨格が決定されると、高々3本ランダムにブロックを繋ぎます。1本につき最大10回トライします。これで通路の骨格が決定します。

│┌─┬┐
├┤×└┤
│└──┘

骨格が決まると、今度はどのブロックが部屋になるかを決定します。
部屋の数が高々10個であることはよく知られていますが、部屋のブロックを決めるトライを部屋1個につき最大5回行います。

後は部屋のサイズを決定し、通路が部屋のどこから延びるか(そのブロックが部屋でない場合、ある1マスを決めてそこから通路を延ばします)、延びた通路同士がどこで曲がって接続するかを決定して完成です。

読者の皆様は、どのようにしてダンジョンが作られると想像していましたか?私は、こう見えてもプログラミングはあまりできないので、恥ずかしながらこれで初めて迷路の作り方を知りました。

ダンジョンの作られ方の序でに、埋蔵金部屋の出現率らしきものも発見したので書いておきます。通常の地形に限って、以下の確率で出現するようです。

1~9F:1/256
10~14F:26/256
15~19F:86/256
20~24F:26/256
25F以上:1/256
[PR]
# by oyasen | 2010-01-03 11:52 | 改造・解析

謹賀新年

2010年も裏CHUNSOFTを宜しくお願いします。今年も時間を見つけ次第解析を進めていきます。

ニコニコ大百科で当サイトの研究結果が使われているのを発見しました。
折角調べてもそれを誰にも見てもらえないというのは勿体なさすぎるので、皆様どんどん引用して下さいね。
http://dic.nicovideo.jp/a/%E3%82%BF%E3%83%B3%E3%83%A4%E3%82%AA%28%E7%94%9F%E6%94%BE%E9%80%81%E4%B8%BB%29
[PR]
# by oyasen | 2010-01-01 00:16 | 日記