スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

解析資料でも書こう。

ある程度改造に慣れてる中~上級者向けの解析資料になるかと。
すべてヘッダなしのアドレスなので、弄るときは+10してね
書いてあること:
 ├ 雑魚敵の当たり判定テーブル
 ├ 便利なサブルーチン
 ├ 数値だけいじるときに便利な場所
 └ エアーマンステージの鬼の設置がうまくいかないとき




【雑魚敵の当たり判定テーブルとか】
雑魚敵、オブジェクトには6F0-6FFまで、固有の当たり判定番号を持っている。
その番号は、別の場所で幅と高さを指定しているテーブルの、
何番目の数値かを決めるものである。

幅を決めるテーブルは
3D4E1 から、中心から何ドットの幅を持つか。

3D581 から、中心から何ドットの高さを持つか。

注意点が2つ。
  ここの数値は、ロックマンの中心点までの幅、高さを指定している。
  実際の高さよりも広めにとるといい。
   └ ロックマンの当たり判定の大きさを指定している箇所はなさそうである。
     もし見つけた人がいたら、報告してくれると助かる...

  なぜか値が実際の幅、高さの2倍の数値になっているので、合わせること。
   └ オブジェクト全体のサイズを指定している、ともとれる。

それぞれサイズは0xA0まであるので、クリエイターな人は意外と贅沢に使っても余る。
というかオブジェクトの種類が0x80までなので、個別に指定しても余る。
  └ と書いたが、実は後半の方はなにか別のことに使っているかもしれない。
   さらっと見たところ使ってなさそうだが、FFで埋まっているとかそういうことではないので
   この辺をいじった後で変なところでバグが出たらおそらくこの辺が原因かと。


----訂正があったので。------------------
サイズは0xA0まであるが、その中で0x20ずつ
ロックマン本体、8x8の武器、16x16の武器、アトミックファイヤLv3、リーフシールド
と分かれているらしい。
すると全然贅沢できないことになる。
----------------------------------------






【便利なサブルーチン】
プログラム中で使えるサブルーチンを書く。一部別資料と被るものもあるだろう。

メインバンクにあるもの

20 EA D2: jsr $3D2EA ;ロックマンの色を装備している武器に合わせて変える。
引数、戻り値特になし。非常に使いやすい、


20 EC C8: jsr $3C8EC ;指定した座標にBG画像の出力を予約するのに使う。
即死レーザーで使用しているルーチン。やることの割りには扱いが面倒。

引数
 $08 X座標。 8ドット単位で書き込まれるので、端数は切り捨てられる。
 $09 ネームテーブルの画面番号を指定する。0か1を書けば機能的には大丈夫だが、
     オブジェクトのページ数(440+x)をコピーすると楽。
 $0A Y座標。 これも8ドット単位で書き込まれるので、端数は切り捨て。
     F8とか極端に大きい値だと書き込まれないことがあったりするが、
     さほど気にする必要はない。

戻り値  Xレジスタ
 戻り値からもう一段階自分で処理を書かないとBGに書き込んでくれない。
 Ⅰ) 書き込みたいパターン番号を 9D C2 03 sta 03C2,x で書き込む。
     └ レーザー用に最適化されているためか、縦に2つ書き込むようになっている、
      その上半分のパターンをここに書く。下半分は自動的に(上半分+1)になる、
 Ⅱ) メモリ$51をインクリメントする。
     └ あとで書き込むサイズをまとめて書き込むのもあり。
 Ⅲ) A6 2B: ldx $2B  最後にこれを添える。
     └ オブジェクトの処理の中で使う場合、これをしてから続きの処理を書く。
       この後の処理でオブジェクトの縦横座標、速度などを一切変えないのなら不要。


20 37 F1: jsr 3F137 ;オブジェクトを出現させる。
弾を出すなど、よく使う。
引数  Aレジスタ  オブジェクトナンバーを指定する。0x35で汎用弾。
オブジェクトのリストもいつか上げるかも。

戻り値  Yレジスタ  出したオブジェクトをいじるときのインデックス番号。
オブジェクトを処理するとき、10~1Fの入ったxをインデックスにして操作するが、
この戻り値は00~0Fが入っている。 いじるときはアドレスに注意。

Ex. 縦速度上位に06を書く (どうも言葉では説明しにくい)
普通のオブジェクト
A9 06  : lda #$06
9D 40 06: sta $0640,x


処理中に出したオブジェクト
A9 06  : lda #$06
99 50 06: sta $0950,y



20 75 F1: jsr 3F175 ;ロックマンに直撃するように速度値を設定する。
壁判定とかは全く考えてくれない。縦の画面外判定についても考慮しないようだ。
試しにこの処理を使ってるテリーがいるヒートマンステージの穴に落ちてみよう。
あいつら、上に行くぞ。

引数 $08-$09 速度
 └ $08が下位、$09が上位。 
   きちんと三平方の定理とか三角関数とか使うわけではなさそうなので、
   どんな速度かは不明。 縦横の速度指定のときの感覚と大体同じかと。

戻り値は、おそらくない。

ボス処理のバンクにあるもの
未解析な場所も多いので、書いてあることには間違いがある...と思う。
ボスによって同じ処理でもアドレスが違ったりするから困る。

20 09 A2: jsr 2E209 ;ボスがロックマンのほうを向く。それだけ。
引数特になし、$00にロックマンとボスとの横距離。


20 D4 A2: jsr 2E2D4 ;壁判定らしい。当たると自動で止まってくれる親切設計。
引数
  $01 横の判定範囲 中心から何ドットか。
  $02 縦の判定範囲 中心から何ドットか。

戻り値
  $03 横の判定結果 当たったら1...かな
  $00 縦の判定結果






【数値だけいじるときにいい場所】

オープニング
36A91~36AA4: 2F 3C 02 C0 37 ...
 ---タイトルロゴ ROCKMAN 2 のNの部分にあるスプライトテーブル。
    タイトルを変えようとしたらなぜかNの右下が残る!なんで!?
    というときはここを全部F8にすると消える。

36DB0~36DD6: 0F 00 10 20 30 30 ... 30 30 20 10 00 0F
 ---文章のフェードイン・アウトのテーブル。
    後ろ側からフェードイン、前側にフェードアウトする、


武器取得画面
37DCB: 2C 11
 ---元のロックマンの色、そこから2バイトずつ黄金配列順に点滅時の色がある。

37A96: 01
---点滅の周期。01, 03, 07, 0F, 1F…辺りだと等間隔に点滅する。理由は長いので略。

37C41: 07
 ---メッセージの速さ。上と同じ数字で等間隔に流れる。あえて違う数字を書くと
    4文字ずつ等間隔に、とかできる。


クイックマンステージのレーザー
39E2B: 74
 ---即死レーザーのBGパターン左側
39E34: 76
 ---即死レーザーのBGパターン右側
3DA06: 04 40
 ---レーザーの速度。 上位 下位 の順で指定。 08 00 以上でレーザーが途切れる。


メインバンク 3C000-3FFFF
3D281: 20
 ---シャッターを閉じるときに使うパターンテーブルの番号。YY-CHRなんかを使うといい。
3D347: 6F
 ---被弾後の無敵時間の長さ。0にすると毎フレーム連続ダメージで即死する。






【エアーマンの鬼の設置がうまくいかないとき】
需要はないものと。CXじゃ鬼そのものを潰しちゃったし。

オブジェクト番号40と41は両方エアーマンの鬼だが、片方いらないじゃんとかいって
40だけ設置したりするとこうなる。
エアーマンステージのパレットは3番目と4番目が未使用っぽく空いているが、
3番目は40番の鬼が出てくるときに使い、4番目は41番の鬼が出てくるときに使っている。
また、42番と43番はアイテムとして設置されているオブジェクトで、
3番目と4番目のパレットをリセットするオブジェクトである。これも鬼を続けて配置する
ときに間に置かないと鬼の出方がおかしくなる。


関連記事

コメントの投稿

非公開コメント

見てくれたやさしい人の数
プロフィール

暇人自治区長

Author:暇人自治区長
GMODとか改造ロックマンとか、
興味のあるものが特殊らしい。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。