スプライトメモリ
スプライト・メモリについて説明しています。

スプライトメモリの概要
スプライトは、その活動を正常に行うために、スプライト定義にあるデータ以外にも、様々なデータを必要とします。これらすべての活動データを保持する部分がスプライトメモリであり、その実態は各々のスプライトのインスタンスです。
SDK2の場合、このインスタンスは0x5Eバイト固定サイズであり、スプライトメモリには24インスタンス分の領域が確保されています。複雑なスプライトの場合、複数のスプライトに分割して処理を行っており、したがって、1つの配置スプライトがいつも1つのインスタンスを作成するとは限らないということに注意が必要です。たとえば、DKバレルは本体とラベル部分がそれぞれ別のインスタンスであり、2つのインスタンスが組み合わさったスプライトとなります。

スプライトの変数は、各インスタンス内のアドレスを表します。これは、スプライトメモリが離散的で、変数として先頭のスプライトメモリのアドレスを指定していたSDK1との大きな違いです。たとえば、変数$20は、常に対象とするインスタンスの開始アドレスから数えて0x20バイト目からの16ビット空間を表します。

スプライトオーバー
スプライトメモリには、24インスタンス分の領域が確保されていますが、これを超える量のインスタンスを作成しようとした場合、空き領域がありませんから、インスタンスの作成自体が行われません。これが一般的にスプライトオーバーと呼ばれている現象です。
スプライトオーバーの発生は、ゲームの進行自体には致命的ではありませんが、当然プレイヤーにとっては致命的となることがあります。したがって、複数のインスタンスを使用するスプライトの場合、その動作の根幹にかかわるもっとも重要な部分、たとえばDKバレルならその本体が一番最初にインスタンス化されるようプログラムされています。

インスタンスの破棄
インスタンスの破棄は、0x00番地にヌルポインタ、すなわち0x0000を書込むことで実行されます。また、0x58番地に0を書込むことでも破棄されますが、この場合、スプライトのロード抑制処理も併せて実行されます。すなわち、敵を倒した場合など、破棄処理と同時に再入場しない限り再ロードされないようにする場合には、0x58番地に0を書込んで破棄を行います。この0x58番地はスプライトパラメータに他なりません。
なお、スプライトメモリの空きスロットの判別には0x00番地が利用され、0x58番地の値は参照されません。0x00番地がヌルポインタではないスロットは、有効なインスタンスが存在するとみなされます。