衝突データ - Rickisthe1/CoilSnake-m2-basic GitHub Wiki
『MOTHER 2』の32x32マップタイルでは、各8x8タイルの衝突判定を個別に指定できます。この衝突データは、文脈によって「サーフェスフラグ」とも呼ばれます。なぜなら、各タイルに対して ビットフラグ の形でデータが格納されているからです。つまり、バイナリで1つの衝突エントリを構成する異なる数字は それぞれ異なる意味を持っています。以下は、各バイナリビットが何を意味するのかです。(番号は16進数で表示されており、EB Project Editorで使用されている形式です。その後に同じ番号の2進数も記載しています。)
0x80 (10000000) = 固体の衝突
0x40 (01000000) 使用されていないが、固体と同じ動作をする
0x20 (00100000) 使用されていない、何もしない
0x10 (00010000) = 「マップオブジェクト」(ドア、梯子、階段)をここに配置できる
0x08 (00001000) = 水
0x04 (00000100) = ここを歩くと日射病になる
0x02 (00000010) = このタイルの前景レイヤーの後ろにスプライトの上半分を隠す
0x01 (00000001) = このタイルの前景レイヤーの後ろにスプライトの下半分を隠す
これらのビットをプログラマー用計算機(「16進数」モードに設定)で加算すると、個別の効果を有効にすることができます。これにより、複数の効果を同時に持つ1つの8x8衝突タイルを作成できます。いくつかの例を挙げます:
- ドアを作りたいが、その周りの8x8エリアでプレイヤーが上に乗らないようにしたい場合、
10
(マップオブジェクト)と80
(固体の衝突)を組み合わせることができます:0x10 + 0x80 = 0x90
。これにより、プレイヤーが乗れないドア用の衝突データ90
を使用できます。 - 隠れた小屋のドアを作り、プレイヤーが見えないようにしたい場合、
01
(スプライトの下半分を隠す)+02
(スプライトの上半分を隠す)+10
(マップオブジェクト)を組み合わせて13
にし、その位置に設定できます。 - 「アンチツリー」を作り、ツリーの「影」に入ると日射病のような影響を与えたい場合、ツリーの高さによって、プレイヤーがその後ろに隠れるように
01
または01 + 02
を使います。(ここでは短いツリー、例えば「テリトリアルオーク」の敵のサイズを想定し、01
を使用します。)これに04
(地形によるダメージ)を加えると、01 + 04 = 05
。これで、05
の衝突タイルを踏むと、スプライトの下半分が隠れ、日射病の影響を受けます。
これらの効果は基本的に独立していますが、いくつかの組み合わせには注目すべきものがあります:
0x80
(「固体」)と0x02
(「スプライトの上半分を隠す」)を組み合わせると、タイルは「カウンタートップ」のように動作します。これにより、他の固体衝突とは異なり、カウンタートップの向こう側にいるNPCと会話できます。この動作を避けたい場合は、0x80
の代わりに0x40
(「非常に固体」)を使用してください。これが0x40
と0x80
の唯一の違いです。0x08
(「水」)と0x04
(「日射病」)を組み合わせると0x0C
になり、日射病の影響を与えず、「深い水」のように動作し、HPが減少します。
以下は、いくつかの一般的なオプションの組み合わせを異なる言葉で説明したものです:
00 = 歩けるスペース
01 = オブジェクトがあなたの上に表示されるタイル(建物の後ろに歩いて頭だけ出る、木の上部が下半身を覆う、フェンス、郵便受けなど)
03 = 01と同じだが、スプライトを完全に覆うのに必要
04 = 砂漠(汗をかき、日射病にかかりやすくなる)
08 = 腰までの水(スプライトは腰まで沈み、Fourside下水道や浅いDeep Darknessの水のように動作)
09 = 01と同じ機能、ただし腰までの水の文脈で(前景付きの浅い水)
0b = 03と同じ機能、ただし腰までの水の文脈で
0c = 深い水(体全体が沈み、ダメージを受ける)
0d = 01と同じ機能、ただし深い水の文脈で(深い水で前景付き)
0f = 03と同じ機能、ただし深い水の文脈で
10 = 梯子/階段/ロープ/ドアなど
80 = 歩けないタイル(壁や構造物。Messianicは「固体で通行不可」と説明)
82 = 歩けないタイル(デスクやバーで使用 - 他のスプライトと対話できる固体スペース)
90 = 10と同じだが、歩けないタイル
TODO: さらに実験して、これらをもっとわかりやすく説明する