武器関連

 

弾を出すとき

 

 3DCB5〜 弾出し処理・下桁

 3DCC1〜 弾出し処理・上桁

 

各武器(アイテム含む)は、ここで指定したアドレスから弾を出す処理へ。

大体はこの弾出し処理中で消費処理も行っている。

 

 

出した弾の制御

 

 3DD11〜 弾制御処理・下桁

 3DD21〜 弾制御処理・上桁

 

 ここは黄金配列順ではないので注意。

 

 具体的には バスター・ヒート・エアー・ウッド・

         バブル・クイック・クラッシュ・メタル・フラッシュ・

         1号・2号・3号・ウッド弾かれ・

         クイック弾かれ・エアー弾かれ・(未使用?)・水しぶき

 となっています。

 

 見れば気付くかもしれませんが、バスターとヒートが同じアドレスを指していたり、

 メタルが他処理の命令の途中を指していたりします。

 これは、

  (0420+X)の2ビット目が0の時は命令を受け付けずに直進する。

 という命令が別の箇所で設定されているからです。

 

 メタルやバスターに特殊な動きをさせたい場合は、弾を出したときに初期設定(3D45E〜辺り)を

 弄ると良いでしょう。

 

 また、被弾した時の煙(?)や水中の泡、水しぶきなどもこの法則により動いています。

 (これらはバスターと同じIDで動かすように無茶に計算されているので、

  バスターを弄るには、これらと分離する処理が必要になります)

 

 

武器を弄るには

 

 武器はXによって管理されているので、

 BD XX XX で呼び出し、9D XX XX で書き込みを行います。

 

 例えば、横速度・上桁の 600 に書き込みを行うのは 9D 00 06 という命令。

 だいたいはこの前にA9 XX という命令があるので、これさえ弄れば弾のスピードが変わります。

 A9 XX 以外の命令の場合は、指定アドレスを探してみましょう。

 (武器処理はメインバンクなので、B9 EE DB なら 3DBEE を見に行く)

 似たような数字の羅列があった場合は、そこから読み取っている可能性が高いので、

 近くを色々弄ってみると、法則が分かってくるかもしれません。

 

 ちなみに、移動に関して

  例えば、縦方向の 640の値が04の場合は、毎フレーム4ドットずつ上に移動し、

                     F8の場合は、逆に毎フレーム8ドットずつ下に移動します

  …が、横方向の 600にF8が設定されている場合、

  前方にF8ドット進んでしまい、一瞬で消えてしまいます。

 

  目的のスピードで目的の向きに動かすには、弾の向き(420+Xの7桁目)を考慮する必要があり、

  右に動かしたい場合は(420+Xの7桁目)に1を立てます。

  (下でまとめてありますが、存在判定も含め、80なら左へ、C0なら右へ進むことになります)

 

 

 

まとめ

 

 420+X 弾の状態(下に詳しく表記)

 440+X 弾の部屋番号

 460+X 弾のX軸位置・上桁

 480+X 弾のX軸位置・下桁(計算上に使われるだけで、表示上は反映されない)

 4A0+X 弾のY軸位置・上桁

 4C0+X 弾のY軸位置・下桁

 

 590+X 弾の当たり判定の大きさ(基本は正方形)

 

 600+X 横速度・上桁

 620+X 横速度・下桁

 640+X 縦速度・上桁

 660+X 縦速度・下桁

 680+X 次のスプライトに切り替えるまでのカウント

 6A0+X 表示するスプライトの番号

 

 武器の 420 のビット単位の意味(肯定なら左の値をプラスしていく)

  80:存在するか?

  40:右向きか?

  20:(未使用)

  10:(未使用)

  08:(未使用)

  04:重力の影響を受けるか?

  02:命令を受け付けるか?

  01:敵への当たり判定はあるか?

 

 弾の初期設定

  3D45D〜 420+Xに入れる値

  3D470〜 岩男からの相対開始位置(10で腕の先から出るように見える)

  3D482〜 620+Xに入れる値

  3D494〜 600+Xに入れる値

  3D4A6〜 660+Xに入れる値

  3D4B8〜 640+Xに入れる値

  3D4CA〜 590+Xに入れる値

 

  ※4E+X0、680+X、6A0+X、6CO+X は出したときに00が設定されます。

 

 武器取得・アイテム取得

  3C279〜 武器取得ステージ  (ヒートは01、エアーは02、ウッドは04 … )

  3C291〜 アイテム取得ステージ(1号は01、2号は02、3号は04)

 

 スプライトバンク

  35674〜 武器毎の読み込み位置(YY-CHRで見比べると良いかと)

 

 

 

ルーチン

 メインバンクのルーチンなので、ボス・敵の処理でも使えるモノもあります。

 以下には、間違ってたりいい加減なデータもあるので、100%は信用しないようにしてくださいね。

 

 

20 4B C8 … $02に乱数域を設定すると、

         $04に00〜設定した値の乱数を返す。

 

20 E6 E4 … 動かさずに、画面外に出たら消す処理

 

20 FC E4 … 処理中の弾の位置から新しく弾を出す処理

         Yに どの弾を出すか。

         $00に 弾を出すX値。      

 

20 CD EE … 武器を実際に動かす。

 

20 AD F0  … 壁への当たり判定。

         武器オブジェクトの中心から$01に入ってる数字だけ左(or右)

                          $02に入ってる数字だけ上(or下)の位置で

         横にぶつかったら$00に1を、縦にぶつかったら$03に1を返す。

 

 トップへ

1