Post subject: Castlevania Harmony of Dissonance (キャッスルヴァニア 白夜の協奏曲 英語版)
Active player (361)
Joined: 4/13/2009
Posts: 18
ここでは、Castlevania Harmony of Dissonanceについて、もしくはそのTASや解析などについて語り合うトピックです。 英語トピックはこのurlでよろしいのでしょうか? http://tasvideos.org/forum/viewtopic.php?t=2173 このトピックをきっかけに、HoDに関してちょっとしたメモリの解析結果をまとめたものをここに投稿したり、それを使ったluaスクリプトへのurlを貼ったり、はたまた「ここはこうすればいい」といった議論をしてみたり。 不肖ながらそういう面で活発になればと考えています。
Active player (361)
Joined: 4/13/2009
Posts: 18
では、さっそくですが自分の解析結果を載せます。 ------------------ ->カメラ座標 カメラ左端のX座標(short int):0x03072B2C カメラ上端のY座標(short int):0x03072B2E 備考:ここからグリッドをひねり出せます。 ただし、以下に示すgocha先生の特定したアドレスでもOKです。 X=0x0200A446 Y=0x0200A44A ------------------ ->自機の各種数値。 最大HP(short int):0x02018786 現在HP(short int):0x0201854E 最大MP(short int):0x02018788 現在MP(short int):0x02018550 最大ハート(short int):0x0201878A 現在ハート(short int):0x02018794 現在サブウェポン(byte):0x0201877E 自機の向き(char):0x02000478 備考:0x40以上が確か左でいいはず 自機X方向スピード整数部(short int):0x0200046A 自機X方向スピード小数部(short int):0x02000468 自機Y方向スピード整数部(short int):0x0200046E 自機Y方向スピード小数部(short int):0x0200046C 備考:整数部+小数部/65536でスピードが出るので、多分だけど 小数部のアドレスを先頭にint型(32bit)で取って65536で割ればスピードが求められる…? ------------------ ->自機の当たり判定関連。すべて画面上の値です。 自機の基本攻撃判定の元1(byte):0x03001A28 自機の基本攻撃判定の元1(byte):0x03001A29 自機の基本攻撃判定の元1(byte):0x03001A2A 自機の基本攻撃判定の元1(byte):0x03001A2B 自機の被接触判定の左端(byte):0x03001A20 自機の被接触判定の上端(byte):0x03001A22 自機の被接触判定の右端(byte):0x03001A24 自機の被接触藩地の下端(byte):0x03001A26 備考: いやあ、判定についていろいろ書こうと思ったんですけども、 すり合わせとかなんとか非常に大変だったのを思い出すと あまりやる気になれません・・・。 要は、被接触判定の端からどれだけ離れてるかで基本攻撃判定の端が生まれ、その端からの距離を読み出すことで基本攻撃判定のもう一方の端が生まれると考えてください。 ただし、スライディング中に空中に投げ出されたとか急降下キックとかマクシームの回転攻撃とかの場合は攻撃が終わっても判定の値は残り続けてしまいます。 と、当初は悲観していたわけですが、実は悲観しなくてもいいことが発覚。 例えば回転アタックの判定を残しつつ、蹴りたいものが「急降下キックが当たらない高さ」に存在する状況で急降下キックを行っても 回転アタックの判定が蹴りたいものに被さってさえいれば一瞬だけその判定で攻撃が行われるので当たります。現行マクシームTASはそうやっているようです。いやあびっくり。 ------------------ ->スプライトの各種数値関連 基本情報: -0x02000510を始点として、適当に始めてます。 +80:次のスプライトへ。 +44:残りHP(short int) +50:画面上のX座標(int) +54:画面上のY座標(int) +68:左右の向き(byte) +7A:他スプライトや自機への干渉を決めます。(byte) +7B:当たり判定アドレスのアクセス先…のはず。 +7E:無敵時間一個目(byte) +7F:無敵時間二個目(byte) 備考: 1.+7Aに記される値について2進数に変換するとこうなります。 下位4ビットは他機との干渉をどの程度するかを示し、 上位4ビットは自機のどの攻撃に対して弾く弾かないを決めるものです。 実験の結果、上位4ビットのうち複数が転倒している場合は 位が低い方が優先して適用されます。 0x01→00000001:他機への攻撃/接触可能、他機からの攻撃受理可能 0x03→00000011:他機への攻撃/接触不可 他機からの攻撃受理可能 0x05→00000101:他機への攻撃/接触可能 他機からの攻撃受理不可 0x07→00000111:他機への攻撃/接触不可 他機からの攻撃受理不可 0x09→00001001:他機への攻撃/接触可能 他機からの攻撃をはじく 0x0B→00001011:他機への攻撃/接触不可 他機からの攻撃をはじく 0x1B→00011011:他機への攻撃/接触不可 サブウェポンをはじく(基本、溜めは弾かない) 0x2B→00101011:他機への攻撃/接触不可 サブウェポンおよび基本攻撃をはじく(溜めは弾かない) 0x4B→01001011:他機への攻撃/接触不可 サブウェポン、基本攻撃および溜め打ちをはじく。何をはじかないの? 0x8B→10001011:他機への攻撃/接触不可 多分全部弾く もし、5Bとあったら、0x5B=0x10+0x40+0x0Bとなり、0x10があるため、そちらが優先的に適用され、結果としてサブウェポンのみをはじくものとなります。 2.無敵時間について 無敵時間は二個用意されています。 当てられた攻撃の種類によって無敵時間が違ってきますが、もっとも長いのはシモンやジュストの空中攻撃のように思えます。 それはさておき、あらかじめ二種類の攻撃を当てて無敵時間を二つとも埋めておき、そこに三種類目の攻撃を当てると、(たぶん)三種類目の判定が触れている&二つの無敵時間が持続する限りは三種類目の攻撃が1Fに一回当たり続けるという現象が起こります。 と、私は連続ヒットバグ(英語ではShuriken Glitchというんでしょうか?)をこのように推測します。 コツとしては、いかに無敵時間を効率よく稼ぐかってとこでしょうか。 連続ヒットバグに空中攻撃が用いられるのは地上の基本攻撃とは違う種類と認識されているからでしょう。 ただし、レギオン・セイントの殻や怯んでいないマクシームには効かないようです。 余談ですが、DS悪魔城はこの無敵時間のストックが増えてしまったがために連続ヒットバグが出来なかったりするのでは? GoLで同様のバグが確認されているのはつまり、パートナーが同時に画面上に存在して、攻撃種類を簡単に稼げるからとか? ------------------ ->スプライトの判定関連 基本情報: -0x03001A38を始点として、適当に始めてます。 -並び順は上のスプライトの各種数値関連で示した基本アドレスと同じのようです。 +00~+03まで他機への攻撃/接触判定です。 +04~+07まで他機の攻撃に対する被接触判定です。 +00:対応するスプライトの攻撃/接触判定の左端が画面上のX座標からどれだけ離れたところから始まるか(byte) +01:対応するスプライトの攻撃/接触判定の上端が画面上のY座標からどれだけ離れたところから始まるか(byte) +02:対応するスプライトの攻撃/接触判定がX方向でどれだけ伸びているか(unsigned byte) +03:対応するスプライトの攻撃/接触判定がY方向でどれだけ伸びているか(unsigned byte) +04:対応するスプライトの被接触判定の左端が画面上のX座標からどれだけ離れたところから始まるか(byte) +05:対応するスプライトの被接触判定の上端が画面上のY座標からどれだけ離れたところから始まるか(byte) +06:対応するスプライトの被接触判定がX方向でどれだけ伸びているか(unsigned byte) +07:対応するスプライトの被接触判定がY方向でどれだけ伸びているか(unsigned byte) +08:次のスプライトへ 備考: これも、自機の基本攻撃判定と理屈はまったく一緒です。 これで当たり判定を把握していればホワイトドラゴンの体を 無敵時間を使わずにすり抜ける事も出来ます。 ただし、スカルナイトロード第一形態やトカゲ男シリーズのように、攻撃/接触判定が剣に移っているにもかかわらず被接触判定が体部分の攻撃/接触判定も兼ねるケースもまれにあります。 余談ですが、関連付けがこんなに万事都合よくいったのはまったくの偶然でした。 一個でもスプライトと判定の始点がずれていたらあれ?ってなったでしょうから。 でも、スプライト内にこう、判定へのアドレスが格納されていれば一番いいんだけどな…。
Active player (361)
Joined: 4/13/2009
Posts: 18
以上の解析結果をまとめたluaスクリプトを載せたURLを以下に示します。 白夜TASの発展に貢献できますように・・・。 http://pastebin.com/VjS8nXqy
Active player (361)
Joined: 4/13/2009
Posts: 18
アップデートしました。 クラッシュストーンでしかクラッシュできないモノの属性を調べたことをきっかけに他機との干渉属性の上位4ビットの扱いが分かったのでその辺の実装です。 vba-rr v22 svn175ぐらいだったらコレで動きます。 http://pastebin.com/EJsZxG8L ですが、最近のvbaはfillboxがなくなり、boxの仕様が変わっているようなので、それに合わせてまた別に作っておきました. http://pastebin.com/hVHnNnwY
Player (197)
Joined: 4/6/2008
Posts: 23
Location: Nara, Japan
https://293n.github.io/cvhod-room-explorer/ 全部屋のWrong warpを網羅したページです。 2年前の成果物で今更ですが載せておきます。 ルート構築の検討にどうぞ使ってください。 左下の小さい画像は現在参照中の部屋へのワープを持つ部屋を逆引きで表示しています。 お試しで隣接行列から計算したPage Rank等の解析結果を出せるようにしていますが、あまり意味はないです。