NPC処理解析情報

メモリ内での形

マップ上のスプライトデータ

通常スプライト用
アドレス:0x004A6220
サイズ:0xACバイト×512個

マップボス関係スプライト用
アドレス:0x004BBA58
サイズ:0xACバイト×16個

0xAC*n+00 存在するか
0xAC*n+04 衝突状態記録変数
0xAC*n+08 X
0xAC*n+0C Y
0xAC*n+10 X方向速度
0xAC*n+14 Y方向速度
0xAC*n+18   動作用状態変数
0xAC*n+1C   動作用状態変数
0xAC*n+20   動作用状態変数
0xAC*n+24   動作用状態変数
0xAC*n+28 スプライト番号
0xAC*n+2C フラグID
0xAC*n+30 イベント番号
0xAC*n+34 画像データ
0xAC*n+38 撃破時効果音(<SOU対応)
0xAC*n+3C 攻撃時効果音(<SOU対応)
0xAC*n+40 HP
0xAC*n+44 経験値
0xAC*n+48 撃破時エフェクト
0xAC*n+4C 動作番号2(向き)
0xAC*n+50 フラグ
0xAC*n+54 スプライト画像切り取り場所(RECT構造体)
0xAC*n+64   アニメーションタイマー
0xAC*n+68   アニメーションインデックス
0xAC*n+6C   寿命タイマー
0xAC*n+70   動作用状態変数
0xAC*n+74 動作番号1
0xAC*n+78   動作タイマー
0xAC*n+7C 当たり判定 左
0xAC*n+80 当たり判定 上
0xAC*n+84 当たり判定 右
0xAC*n+88 当たり判定 下
0xAC*n+8C 表示 左
0xAC*n+90 表示 上
0xAC*n+94 表示 右
0xAC*n+98 表示 下
0xAC*n+9C フレームカウンター(1Fにつき1ずつ減って0までカウントダウンする)
0xAC*n+A0 現在受けたダメージ(赤文字ダメージ表示に使用)
0xAC*n+A4 接触ダメージ
0xAC*n+A8 親スプライトへのポインタ

スプライト基本データ(npc.tblからロード)

アドレス:0x004BBA34に格納されているアドレス
サイズ:0x18バイト×(npc.tblのファイルサイズ÷0x18バイト)

0x18*n+00 各種フラグ
0x18*n+02 HP
0x18*n+04 画像データ
0x18*n+05 撃破時効果音(<SOU対応)
0x18*n+06 攻撃時効果音(<SOU対応)
0x18*n+07 撃破時エフェクト
0x18*n+08 経験値(撃破時の武器エネルギー)
0x18*n+0C 接触ダメージ
0x18*n+10 当たり判定 左
0x18*n+11 当たり判定 上
0x18*n+12 当たり判定 右
0x18*n+13 当たり判定 下
0x18*n+14 表示 左
0x18*n+15 表示 上
0x18*n+16 表示 右
0x18*n+17 表示 下

各変数解析情報

衝突情報記録変数

詳細不明
0x01->左壁衝突? 0x02->上壁衝突? 0x04->右壁衝突? 0x08->下壁衝突?
0x0100->水中? 0x1000~0x8000->?

その他解析

  • 通常スプライト用には512個分のデータベースがあるが、それは更に区切って使われている。
    • 限られた一部のエフェクトは全ての領域を使う。
    • マップ上に配置されたスプライトは前から170番目以降を使う。
    • その他のスプライトは前から256番目以降を使う。

    • 上記のことより、マップに元からスプライトを置ける最大数は512-170=342個ということになる。
    • データがいっぱいの場合、新たなスプライトの追加(煙の発生,武器エネルギーの発生,敵の攻撃など)は一切のエラーメッセージなどなく、ただ単に「無かったこと」になる。


個別スプライト解析情報

武器エネルギー(スプライト番号1番)

  • 大きさの情報は経験値(+0x44)によって決定
  • 初期化処理
    • マップの背景タイプが5or6(外壁・大動脈)の場合
      • X速度を127~256 Y速度を-256~256でランダム初期化
    • マップの背景タイプがその他(普通)の場合
      • X速度を-512~512 Y速度を-1024~0 状態変数0x68(アニメ用)を0~4 向きを0or2でランダム初期化
    • 初期化後は動作番号1を1にセットし初期化済みの目印とする
  • 通常時処理
    • マップの背景タイプが5or6の場合
      • 左向きに毎フレーム加速度 8
      • X座標が40960未満の場合消滅する
      • 左壁に衝突->X速度を256にする 上壁に衝突->Y速度を64にする 下壁に衝突->Y速度を-64にする
    • マップの背景タイプがその他の場合
      • 下向きに毎フレーム重力加速度 陸上:42 水中:21
      • 各方向の壁との衝突で跳ね返る(X速度orY速度が反転する完全弾性衝突,坂は未調査)
      • 上壁以外に衝突した場合効果音45番を再生 状態変数0x70(めりこみ判定用)を+1する
      • 衝突していない場合状態変数0x70を0にする
      • 状態変数0x70が2を超えている場合Y座標を-512する(めりこみ防止と思われる,横壁へのめりこみは考えない模様)
    • 速度は±1535以内に制限される
    • アニメ周期6コマ,コマ周期2Fのアニメ,向きによって回転方向は変わる
    • 発生後400Fで点滅開始,500F経過&アニメーションインデックス==5&アニメーションタイマー==2で自動消滅
      • ※要するに500F経過後にアニメの特定のコマになると消滅する,そのため生存期間は500~510Fの揺らぎがあると思われる

リセッター?(スプライト番号3番)

自身のスプライト画像切り取り場所を(0, 0, 0, 0)にセットし、100Fで自動消滅する
壁に当たると消える敵弾など、自分から消えるスプライトは自分自身をこれに変換することで消えている(正確に言うと自分へのポインタをサブルーチン0x0046F740に渡している)

イベントトリガー(スプライト番号46番)

  • 自動的に「接触したらスクリプト実行」のフラグ(+0x50, ビット0x0100)をオンにする

スカルステップの足(スプライト番号53番)

親スプライトを設定しないとクラッシュ

ハート(スプライト番号87番)

  • アニメ周期2コマ,コマ周期2Fの明滅アニメーション
  • 経験値==2->通常サイズ,経験値==6->ビッグサイズ
  • 500Fで点滅開始,547Fで閃光エフェクト,550Fで消滅
  • 外壁タイプ背景の時
    • X速度を127~256,Y速度を-32~32でランダム初期化,動作番号1を1にセットし初期化済みフラグとする
    • 毎フレーム左に加速度8
    • X座標が40960未満で消滅
    • X座標が-1536未満の時X座標を-1536に調整
    • 左壁衝突でX速度を256にセット
    • 上壁衝突でY速度を64にセット
    • 下壁衝突でY速度を-64にセット
  • ※自機との判定はサブルーチン0x419030(自機とスプライトの当たり判定)内で実行,経験値の値で回復量を決定している

不明(スプライト番号90番)

マップ指定のNPC画像データ2の座標(280,80)から(296,104)まで横16px縦24pxを切り取った姿になる
それ以外何もしない
  • 前のスプライトがイゴール(スプライト番号89番)なのでその関係かと思われたが,NpcRavil.pbmをこのように切り取ってもきちんとした画像にはならない.
    • それらしく当てはまる原作Npc画像データを見つけた方はご一報ください

扇風機(スプライト番号96~99)

スプライトの中央から幅1マス長さ6マス圏内に自機の中央が入った場合に自機を加速
扇風機の向きに加速度136

マシンガンLv2のエフェクト(スプライト番号127番)

マシンガンLv2の弾が発生させる

マシンガンLv3のエフェクト(スプライト番号128番)

マシンガンLv3の弾が発生させる

スネーク/ファイアボールのエフェクト(スプライト番号129番)

スネーク/ファイアボールの弾が発生させる

トロ子+の投擲するブロック(スプライト番号141番)

親スプライトを設定しないとクラッシュ

キングの剣(スプライト番号145番)

親スプライトを設定しないとクラッシュ

カーリーの持っているマシンガン(スプライト番号181)

親スプライトが指定されていない場合全く何もしない(表示もされない)
  • 通常はカーリー(スプライト番号180番)によって設置される
    • その後,親スプライト(カーリー)に追従

カーリーの持っているポーラスター(スプライト番号182)

親スプライトが指定されていない場合全く何もしない(表示もされない)
  • 通常はカーリー(スプライト番号180番)によって設置される
    • その後,親スプライト(カーリー)に追従

カーリーの酸素ボンベの泡(スプライト番号183)

親スプライトが指定されていない場合全く何もしない(表示もされない)
  • 通常はカーリー(スプライト番号180番)によって設置される
    • その後,親スプライト(カーリー)に追従

ファズ(スプライト番号188番)

親スプライトを設定しないとクラッシュ

檻?(スプライト番号195番)

マップタイルの左から8番目・上から5番目のタイルの姿になる
それ以外何もしない
  • どのマップタイルの設定での使用を想定しているかは不明だが,PrtCaveが最も有力.檻の見た目になってくれる
  • 直後のスプライトが大動脈の壁であるため,PrtRiverの線も捨てきれない

大動脈の上下の壁(スプライト番号196番)

タイルを高速でアニメーションする

風の見た目(スプライト番号199番)

コア(マップボス4番)によって発生

コアの巨大弾(スプライト番号218番)

  • 初期設定の速度で等速直線運動
  • 200Fで自動消滅

オレンジベルの周りのバット(スプライト番号233番)

親スプライトを設定しないとクラッシュ

ミザリーの周りを回る弾、バットに変化(スプライト番号252番)

親スプライトを設定しないとクラッシュ

エネルギーカプセル(スプライト番号253番)

  • 2コマ周期アニメ,4フレーム間隔でコマ送り
  • HPが100以下になった場合
    • フラグIDに従って武器エネルギーを生成(サブルーチン0x46F280を使用)
    • 8個の煙を生成(サブルーチン0x46F150を使用)
    • 効果音25番を再生
    • 消滅する

ヘリコプターのローター(スプライト番号255番)

親スプライトを設定しないとクラッシュ

アンデッドコアの攻撃のエフェクト(スプライト番号286番)

アンデッドコアの正面弾(スプライト番号285番)によって発生

飛竜に咥えられたスー(スプライト番号297番)

親スプライトを設定しないとクラッシュ

マシンガンの銃身(スプライト番号303番)

親スプライトを設定しないとクラッシュ
  • 用途不明(前後からしてED関係と思われる)

マ・ピニョンの落下ブロック(スプライト番号314番)


メサのブロック(スプライト番号319番)

親スプライトを設定しないとクラッシュ

背負いカーリーの持っている銃(スプライト番号321番)

親スプライトが指定されていない場合全く何もしない(表示もされない)
  • 通常は背負いカーリー(射撃,スプライト番号320番)によって座標(0,0)に設置される
    • その後,親スプライト(カーリー)に追従
  • 攻撃ボタンが押された場合武器弾43番(カーリー用ネメシス)を発生
    • カーリー用ネメシスが2弾以上画面上に存在している場合は出さない(※通常ネメシス≠カーリー用ネメシス)

吹きだし「ヘッ」「クシ!」(スプライト番号327番)

親スプライトを設定しないとクラッシュ

ボロス第一形態の顔(スプライト番号341番)

親スプライトを設定しないとクラッシュ

ボロス第三形態の回る目玉(スプライト番号342番)

親スプライトを設定しないとクラッシュ

ボロス第二形態の外観(スプライト番号343番)

親スプライトを設定しないとクラッシュ

ボロス第二形態の目(スプライト番号344番)

親スプライトを設定しないとクラッシュ


ボロス第四形態の足場(スプライト番号346番)

親スプライトを設定しないとクラッシュ

迫る壁(スプライト番号354番)

ボロス戦後のアレ
  • <ANP****:0010:****で動作,動作番号2で壁の出来ていく向きを指定できる

クォートorカーリー、バルログに救出された後(スプライト番号355番)

親スプライトを設定しないとクラッシュ
最終更新:2018年09月25日 03:11