スプライト関連

いくつかの画像を組み合わせて紙芝居のように回すことでアニメーションさせています。

 メモリ(メモリビュアで見ると良い)の(400+X)からアニメーション番号を読み取り、表示しています。

 逆算的な見方を簡単に説明します。

 

 アニメーション番号 

  3F900〜3F9FF 下桁

  3FA00〜3FAFF 上桁

  

  武器や岩男やボスはそのまま3F900+(400+X)の位置に、敵オブジェクトは3F980+(400+X)

   …例えば、武器のバブルリードなら、=33なので、3F933に下桁、3FA33に上桁があり、

    敵オブジェクトは、ジョーの場合、=4Fなので、3F9CFに下桁、3FACFに上桁があります。

 

 上桁・下桁をくっつけて、その+30000した値の位置を見に行きます。

   …バブルなら3FBF9の位置。

 

  そこには 02 05 48 49 4A とあります。

  

  02 は アニメーションする画像数(00も数に入るので、02だと3つ分)

  05 は 次の画像に移るまでのフレーム数。

  48〜4Aは、画像1つ1つ。

   (オマケ:ここに00を指定すると、00に回ってきた時点でオブジェクトが消えます。)

 

   基本的にメモリの(06A0+X)に表示中の画像番号(始点から何枚目の画像か)が入っていて、

   敵や武器の行動制御で無理矢理固定値にすることも可能。

 

 

 次に、この48という数字を覚えておいて、28000〜2C000のバンクを見に行きます。

  

  画像番号

   28000〜280FF 岩男・武器の画像番号・下桁

   28100〜281FF 敵オブジェクトの画像番号・下桁

   28200〜282FF 岩男・武器の画像番号・上桁

   28300〜283FF 敵オブジェクトの画像番号・上桁

   28400〜284FF オブジェクトの形(相対表示位置)・下桁

   28500〜285FF オブジェクトの形(相対表示位置)・上桁

 

  バブルリードは武器なので、28000〜と28200〜を見ます。

  さっきの48って数字を足して、28048に下桁、28248に上桁があるので、見てみます。

  これを同じようにくっつけて、今度は+20000 =28B24。ここに移動します。

 

  04 17 9C 00 9D 00 9E 00 9F 00 とあります。

 

  04 は 画像の大きさ

  17 は オブジェクトの形

  9C/9C/9E/9F は 読み込む画像の位置(パターンビュアで見るとわかりやすいかと)

  00は色と画像の向き(反転)

 

  画像の形は、同じ要領で28417、28517と順に追っていくと、

 

  FD FA F8 F8 F8 00 00 08 08 F0〜〜とあります。

 

  この辺りはあまり弄ったことがないので逃げておきます

  (基本的な形は揃っているので、特殊な形を作るときに弄ると良いです)

  中心を00として、どれだけずらすか、といった感じになっています。

 

 

  色は 00 の 1桁目で指定。00は岩男の体色(主に武器用)、01は岩男の皮膚の色(ブーメランやブレードはこれ)

                02、03はスクロール毎に設定する色(主に敵用)

  反転は00 の 2桁目で指定。40は左右対称、80は上下対象、C0は上下・左右対称となります。

  81とすると上下対象で、色は岩男の肌色になる…という具合。

  (2008/10/12追記) 20でBGの後ろに隠れるか という判定もあるようです。

               61とすると左右対称で岩男の肌色でBGの後ろに表示される となります。

 

  ついでに、これを作り変えても、当たり判定の大きさ・位置は変わりません。

  他で書かれているので省略。

 

 

 ボス決定時、登場シーンスプライト

 

  ここはステージで使うスプライトとは独立していて、

 

   34781〜 ボス毎のスプライト開始アドレス…34799からの相対アドレス(8ボス、黄金配列順)

                        34799+ここの値 からボスのスプライトを読み込む。

   34789〜 スプライト枚数    …最初の一枚は上から降りてくる時のスプライト。

                    最後の一枚はポーズの最後、静止するスプライト。

   34791〜 アニメーション速度

   34799〜 画像読み込み     …画像番号。これを指定フレームで指定枚数進めていく。

                    ここではスプライトはループせず、

                    最後まで送られると最後のスプライトで静止する。

   347ED〜 画像読み込み先:下桁 

   34816〜 画像読み込み先:上桁 …スプライト番号(34799〜)で指定した番号から読み取る。

                   例えば、画像番号00なら下桁=3F、上桁=88なので、

                   3483Fにスプライト読み込み用のデータがある。

 

  といった感じになっています。

 

  せっかく例に挙げたので、3483Fを見てみます。

   0E E0 A0 03 FA E8 A1 03 F0 …

  最初の 0E がスプライトサイズ。

  次の数字から4バイト分で8×8ドットの画像を1つ読み込みます。

   E0=Y軸。原点からの相対位置。正方向に数字を増やすと下へ、負方向に数字を減らすと上へずれる。

   A0=読み込む画像。パターンビュアで見てみましょう。

   03=色と方向。上記と法則は一緒。

   FA=X軸。これも原点からの相対位置。正方向に増やすと右へ、負方向に減らすと左へずれる。

 

 

まとめ

 

 各オブジェクトのアニメーション指定

  3F900〜3F9FF 下桁

  3FA00〜3FAFF 上桁

 

 画像番号

  28000〜280FF 岩男・武器の画像番号・下桁

  28100〜281FF 敵オブジェクトの画像番号・下桁

  28200〜282FF 岩男・武器の画像番号・上桁

  28300〜283FF 敵オブジェクトの画像番号・上桁

  28400〜284FF オブジェクトの形(相対表示位置)・下桁

  28500〜285FF オブジェクトの形(相対表示位置)・上桁

 

 ボス決定時のスプライト

  34781〜 ボス毎のスプライト開始アドレス

  34789〜 スプライト枚数

  34791〜 アニメーション速度

  34799〜 画像読み込み

  347ED〜 画像読み込み先:下桁 

  34816〜 画像読み込み先:上桁

 

 トップへ

1