メタルスラッグ3 メモ

攻撃力:
    XMAME の Watchpoint で調べました。
    爆風は Record で録画したものを1フレームずつ見て調べました。mng を展開するには $ convert -verbose mslug3.mng test%03d.png で。(フレームスキップをオフにしないとフレームが飛んでしまうっぽいので注意)
    イージーモード:
    ハンドガン 10
    ナイフ30
    ショットガン/BIGショットガン: 200
    ヘビーマシンガン/BIGヘビーマシンガン: 40(4発辺り)
    レーザーガン/BIGレーザーガン: 80(4発辺り。実際には1発辺り2回以上ヒットしてるみたい。4発撃つと得点が+1000点なので。)
    メタルスラッグのバルカン砲: 10
    メタルスラッグのキャノン砲/アーマーピアサー(A.P.): 直撃で200 爆風で50?(×1)
    メタスラアタック: 400(爆風にはダメージは無いっぽい)
    スーパーグレネード: 直撃で100、爆風で50(×1)
    手榴弾: 直撃で100、爆風は1(×2) *
    ストーン: 直撃で100 爆風無し
    エネミーチェイサー: 直撃で30、爆風で10(×1) *
    アイアンリザード: 直撃で30、爆風で10(×3) *
    ドロップショット: 直撃で30、爆風で1(×1) *
    ロケットランチャー/BIGロケットランチャー: 直撃で30、爆風で30(一回目)、爆風で10(二、三回目) *
    フレイムショット/BIGフレイムショット: 最初の方は20、それから段々減っていて最後は1になる ダメージ判定は数えきれないくらい多い 288くらい *
    * は爆風があるので、敵の位置とかによって与えられるダメージが変動するかもしれない。
    BIG版は弾が大きいだけで、ダメージは変わらないっぽい。
    太った状態:
    ロケットランチャー/BIGロケットランチャー: 直撃で30、爆風で10(一度)
    フレイムショットは同じくらいっぽい。
    ヘビーマシンガン、レーザーガン、エネミーチェイサー、アイアンリザード、ドロップショット、スーパーグレネード、手榴弾は同じ。
    どうも単にロケットランチャーがエネミーチェイサーと同じ挙動(同じダメージ)になるだけらしい。

    爆風ダメージの後ろの括弧内の ×数字 というのは、爆風ダメージの当たり判定の回数。

    ロケットランチャーは、ルーツマーズには直撃ダメージと爆風ダメージで二回以上ダメージ与えられるけど、
    ヒュージハーミットには直撃ダメージしか与えられない。
    敵によって多段ダメージ(と呼べば良いのか)があるかないか設定されているのかもしれない。
    スーパーグレネードは直撃で100で、爆風ダメージが50なのかも。そうっぽい。
    というか、爆風ダメージを受ける受けない敵がいるのかもしれない。
    一番最初に出てくるカニ(?)は、多段ダメージあるっぽい。
    フレイムショットは常に多段ダメージが与えられる。


    HP
    ヒュージハーミット 3000(1,2) 5000(3,4) 6000(5,6,7,8)
    ルーツマーズ(発狂するまで) 5000(Easy) - 8000(Normal) - 10000(Hard)
    ルーツマーズ(倒すまで)  3000(Easy/Normal) - 8000(Hard)

    10FD8B が難易度保持しているアドレスらしい。
    どうやら、Easy = 1, Normal = 3, MVS = 4, Hard = 6 に対応しているらしい。
    10ED18(32bit) がスコアを保持している。(値は10進数を16進値で格納している。スコア1234560は、0x1234560 として格納される)
    
アイテムの番号を調べてみる。
    まず、撃つとランダムにアイテムを出す場所、ミッション1のロケット発射口を使う。
    骨が出てくる場合と、鍵が出てくる場合で値が異なる箇所がどこかにあるはずだから、
    その箇所がアイテム番号を格納した場所だという事が分かるはず。

    ゲーム中に出てくる各オブジェクトは、構造体(とかそういうもの)で表現されていると思うけど、
    メモリに割り当てられるアドレスが毎回異なるっぽい。

    なので、正確に鍵の場合と鍵の場合を比較するために、まず構造体のサイズを調べてみる。
    鍵が出る状況を二つ作って(セーブして)、異なるアドレスに割り当てられた構造体同士を比較して、完全に一致する範囲が構造体のサイズという事にする。

    まず、メモリに割り当てられた構造体を探すために、弾を当てた時に変動する「HP」を基準にして探す。
    ロケットの発射口が見えてから、セーブして、その時点を基準にして一発ハンドガンを当てるごとに10(0x0A)減った値を検索する。
    これでHPが格納されたアドレスが分かる。

    HPが格納されたアドレスから数えて、オフセット +6 までが同じだった。
    それ以降のデータは、一発弾を当てると値が変わるけど、とりあえず関係ないという事に今はしておく。
    また、HPが格納されたアドレスから数えて、オフセット -7 までも同じだった。

    とりあえず、HPが格納されたアドレスから 7 を引いたところから、+13 までの計14バイトが構造体という事にする。
    いや、もしかすると構造体の中にはポインタが含まれてて、その指すアドレスが異なっているのかも・・・。
    スクロールすると変わる値があるから、描画する位置も格納されているらしい。

    難しいなぁ。
    何度かやって、見つかったアドレスを全部書き留めて、
    それで何バイト刻みになってるかを確認する。
    100A1B
    100B7B
    100C2B
    100EEB
    100E3B
    10130B
    1013BB
    10146B
    10151B
    1015CB
    どうも 0xB0(176) バイトが構造体のサイズらしい。
    ただ、これは全部HPの値が格納されたアドレスだから、構造体の先頭のアドレスを知りたい。
    100EEB から先頭の方へ戻ってみると、
    100EC4 までがアイテムを取ると 0x00 にクリアされる。
    そうなると 100EC4 が構造体の先頭である可能性が高い。

    100EEB から 100EC4 を引くと 0x27(39) になるから、
    HPのアドレスから 0x27 を引くと構造体の先頭になるという事にする。

    そもそも構造体の中に落とすアイテムの値が直接入っているのだろうか。
    もし代わりに、関数へのポインタとかが入ってたら、もう探すのは無理だなぁ。

    HPのアドレス 100EEB を基準にした時、100EFF が鍵の場合に 0x40 、骨の場合に 0x80 だった。
    100F0D が鍵の場合に 0x20、骨だと 0x4A。
    おお、100F0D を 0x4A に変えたら骨が出てきた。
    0x4B にしたらバナナ一本。
    これだ。
    HPのアドレスに 0x22(34) を足すと、出てくるアイテムという事にする。
    もしかすると、引数とかかもしれない。
    撃つとたくさんアイテムが出てくる場所もあるわけで、一つしか出てくるアイテムを書けないというのは考えにくい。
    そうすると、このアドレスは、ロケットの発射口固有のアドレスっていう可能性もある。
    いや、でも「アイテムを出す」関数っていうのがあるとすると、たぶんほとんどのアイテムの出る場所で使われてる関数だろうから、
    引数リストも同じわけで、他の場面でも同じアドレスかもしれない。

    番号表:
    00 何も落とさない
    01 ヘビーマシンガン
    02 ショットガン
    03 ロケットランチャー
    04 フレイムショット
    05 レイザーガン
    06 アイアンリザード
    07 エネミーチェイサー
    08 スーパーグレネード
    09 ドロップショット
    0A BIGヘビーマシンガン
    0B BIGショットガン
    0C BIGロケットランチャー
    0D BIGフレイムショット
    0E BIGレーザーガン
    0F ファイナルミッションで軍曹を倒した時に落とすマシンガン
    10 モビルサテライト
    11 サンダークラウド
    12 普通のボムに戻す?
    13 火炎瓶
    14 ストーン
    15 アーマーピアサーからノーマルへもどる
    16 アーマーピアサー
    17 エレファントスラッグ用のバッテリー
    18 エレファントスラッグ用のとうがらし
    19 アストロスラッグ用のバルカン砲
    1A 弾薬
    1B ボム
    1C メタルスラッグのHPを回復するやつ
    1D 聖水
    1E 痩せる壷
    1F 電池(回転しながら落ちてくる)
    20 鍵(回転しながら落ちてくる) 1000点
    21 救急箱
    22 ランダム武器
    23-28 カニ(各々挙動が異なる) 1000点
    29 コイン
    2A 社長(という名前だったと思う(メタルスラッグ1で出てきたはず)) 0点
    2B 魚 500点
    2C うんこ 10点
    2D メダルというか勲章 500点
    2E 額の中に勲章が入ってるやつ 10点
    2F 猫 100点
    30 白猿 1000点
    31 茶猿(メタルスラッグ1で出てくる) 1000点
    32 蛇 500点
    33 ラブレター 300点
    34 七面鳥の丸焼き(って呼ぶの?) 1000点
    35 きのこ 1000点
    36 鳥の巣 1000点
    37 ぬいぐるみ(うさぎ?) 5000点
    38 くまのぬいぐるみ 5000点
    39-3B 豚(各々挙動が異なる) 1000点
    3C 蒸篭(せいろ)って呼ぶの? 300点
    3D 青い宝石 100点
    3E 赤い宝石 100点
    3F 黄色い宝石 100点
    40 宝箱 1000点
    41 スーツケース 500点
    42 リンゴ 100点
    43 大根 300点
    44 白菜 300点
    45 スイカ 300点
    46 洋梨(?) 100点
    47 ニンジン 100点
    48 バナナ一房 100点
    49 バナナ一本 10点
    4A 骨 100点
    4B ニワトリ 500点
    4C 卵 10点 (時間が経つとひよこになる)
    4D 腐った卵 0点
    4E ひよこ (拾えない)
    4F 缶 1000点 (3秒くらい経って腐ると10点)
    50 カエル 500点 (4秒くらい経って膨れると10点)
    51 バラ 100点 (散ってしまうと10点)
    52 食パン 200点 (腐ると10点)
    53 フルーツ(バナナ・リンゴ・パイナップル) 1000点 (腐ると10点)
    54 ぬいぐるみ(うさぎ?) 50000点
    55 くまのぬいぐるみ 50000点
    56 青い宝石 30000点
    57 赤い宝石 30000点
    58 黄色い宝石 30000点
    59 魚 50000点
    5A 宝箱 30000点
    5B カエル 50000点 (4秒くらい経って膨れると10点)
    5C 鳥の巣 50000点
    5D 猫 50000点
    5E 電池(まっすぐ落ちてくる)
    5F 鍵(まっすぐ落ちてくる) 1000点
    60 ここからは上記のアイテムの消滅時のグラフィック
    61
    62
    63
    64
    65
    66
    67
    68
    69
    ここまで。以降はエラーになる。

    

ミッション2の雪洞内に三つ出てくる冷蔵庫は、撃つと扉が開いてアイテムを出す。一つあたりの冷蔵庫から出てくるアイテムは全部で10個だけど、10個出し切る前に冷蔵庫を壊してしまうともったいない。 冷蔵庫を撃った後、扉が閉じる前にまた撃ってもアイテムは出てこない。次の弾を撃つのは、ちゃんと扉が閉じてからにする事。 冷蔵庫とその下に積み重なっている氷塊は、それぞれ50の体力を持っている。(難易度4以下の場合。5以上の場合は60) つまり、普通に撃つと10個全てが出てくる前に壊れてしまう。(ちなみに、二つめと冷蔵庫と氷塊はそれぞれ150(Easyの場合)なので特に気にしなくても大丈夫。三つめの冷蔵庫と氷塊はそれぞれ100(Easyの場合)) でも、下に氷塊が残っている状態では、冷蔵庫はダメージを受けない。(代わりにその下の氷塊がダメージを受ける) なので、ヘビーマシンガンの斜め撃ちとか、ジャンプショットを使って、氷塊を壊す前に冷蔵庫を撃ってダメージを与えると良い。 ただ、氷塊が一つも壊れていない状態では、冷蔵庫を撃ってもアイテムが出てこない(画面外なので)

    ものすごくどうでもいい事だけど、ヘリに乗った偽モーデンと戦う時、うまく位置を調節すると、モーデンだけに弾を当てる事ができる。(通常、ヘリはダメージを受けると点滅するけど、モーデンだけに当てると点滅しない)
    そうすると、「ぐおっ」と声が出るにも関わらず、ダメージが無い。
    モーデンに弾が当たった場合、声が出るだけで、ダメージは特に無いらしい。
    
ゲーム内での時間経過に関して。
    ひよこがニワトリに育つまでの時間を調べてみた。
    値をカウントアップしていくか、もしくはカウントダウンしていくかして、
    ある値に達したら育つ処理が行われると思う。
    段々減っていって0になるとひよこが育つアドレスがあった。
    ただ、この値が減る速度の基準いまいち分からない。

    1000から0になるまでにかかる時間は33秒。
    3300から0になるまでにかかる時間は112秒。
    4096から同上は138秒。
    フレームを単位として数えてるんだと思うけど、
    普通、フレームレートは30フレーム/秒か、60フレーム/秒だと思うんだけど、
    それだとぴったり合わない。
    どうも調べてみると、NTSC規格のテレビだと、59.94Hzらしい。
    NTSC - Wikipedia
    エミュレータでは、これに合わせてフレームレートを59.94にしてるのかもしれない。
    まぁ、1秒当たり約30フレームか60フレームという事でも良いかもしれない。

    さて、ひよこがニワトリになるまでの値は 600 だった。
    これが0になると育つ。
    1秒当たり約30減るから、600/30で20秒だった。

    あとで気づいたけど、XMAME 起動時に
    Screen Resolution:
    304 x 224 (H) 59.185608 Hz
    と表示されていた。
    

画面に表示されなくてもダメージを与えられるオブジェクトもあるし、全体が画面に出てくるまでダメージを与えられないオブジェクトもある。 例えば、ミッション1の船ルートで出てくる敵の船は、完全に船のグラフィックが画面に表示されるまでダメージを与えられないし、その後で出てくる車も、撃つとダメージを与えているかのように点滅するにも関わらず全体が出てくるまでダメージを与えられない。

2006-07-04〜

最も早くクリアできるルートはどのルートかを調べるために、一番簡単な難易度 Easy で各ミッションのクリア時間を計ってみた。 ミッション1: アジア丸ルート: 1分40秒 船ルート: 2分16秒 潜水艦ルート: 2分38秒 ミッション2: 普通ルート: 2分44秒 雪洞ルート: 計ってない ミッション3: 海中ルートでひみつ工場まで: 1分24秒 潜水艦ルートでひみつ工場まで: 1分13秒 ひみつ工場以降: 2分2秒 ダチョウルート: 2分15秒 ミッション5: 23分くらい ちなみに、宇宙空間までで5分くらい 宇宙空間から敵船内に侵入するまでは6分くらい

2006-07-05 その他の武器の攻撃力。
スラグノイドのバルカン砲 10 スラグノイドのキャノン砲 200 スラグノイドのメタスラアタック 400 レベルアーマーの近接攻撃 30 レベルアーマーのキャノン砲 100 レベルアーマーのメタスラアタック 400 アストロスラッグのバルカン砲 10 アストロスラッグのキャノン砲 100(一発あたり) アストロスラッグのメタスラアタック 400 スラグマリナーのバルカン砲 10 スラグマリナーのキャノン砲 200 スラグマリナーのメタスラアタック 400 スラグフライヤーのバルカン砲 10 スラグフライヤーのミサイル 200 スラグフライヤーのメタスラアタック 400 スラグチョッパー(スラグコプター)のバルカン砲 10 スラグチョッパー(スラグコプター)の爆弾 200 スラグチョッパー(スラグコプター)のメタスラアタック 400 ドリルスラッグのメタスラアタック 400

2006-07-05 スラグマリナーかアストロスラッグに乗った状態で、ステージセレクトの「ミッション5 1-1 こんぺきのうんかい」を選ぶと、 スラグマリナーやアストロスラッグに乗ったままになる。 また同じように、スラグマリナーに乗った状態で、「ミッション5 1-5 てきぼせんシャフト」を選んでも、 スラグマリナーに乗ったままになる。

2006-07-07
    特定の場所で一定時間待つと起こるイベントがあるかもしれない。
    ミッション2の雪洞の入口を破壊して少し待つと捕虜が出てくるし、
    ミッション2のボスでもしばらく待つと捕虜が出てくる。
    でもこの二つのイベントが起こるまでの時間を計るアドレスは異なっていた。
    雪洞:
    0x100B98, 0x1020E8, 0x100CF8, 0x1023A8, 0x101E28, 0x102458, 0x1032C8
    ボス:
    0x10082F, 0x1027CF, 0x10321F, 0x1030BF, 0x1011CF, 0x10363F, 0x100B9F, 0x1017FF, 0x10292F, 0x10174F

    雪洞は全て一桁目が 8 だけど、ボスの方は全て F になっている。
    似たところで言うと、雪洞では 0x100B98 で、ボスでは 0x100B9F になっている。

    ミッション1のボスでは、0x10342F だった。
    イベントの種類によって、構造体のどの部分が使われるのかは異なるのかもしれない。
    そうすると無理だなぁ。

    
2006-07-10
チートでメタルスラッグとかが手に入るようにできるかどうか。

武器であれば、チートで任意のものを入手できるけど、
メタルスラッグやサンダークラウドなどは単純に所持している武器を格納しているアドレスを変更するだけでは入手できない。

前述のように、各オブジェクトのための構造体のバイト数は 0xB0(176) バイトだとして。

メタルスラッグの横軸の現在位置は 0x101c84 に 24bit (たぶん)だった。
この構造体の先頭アドレスはどこだろう。
前述のメモによると、0x100EC4 が構造体の先頭アドレスの一つだから、
0x100EC4 を基準にして、0xB0 の倍数が各構造体の先頭アドレスという事にする。

計算してみたら、0x101c84 が既に 0xB0 の倍数だった。
つまりここが(今回の実験で割り当てられた)メタルスラッグの構造体の先頭アドレスだと思う。

あー、画面内にメタルスラッグを出すには、構造体内の「横軸の現在位置」を、現在画面の表示されている領域内の値にする必要があるわけで、(画面外に出現させても乗り込めないし)
現在の MAME のチート機能じゃそういう「あるアドレスの値を元に、チート値を決める」っていう事は出来なかったと思うから、
これは無理だなぁ。
    
2006-07-13
    一文字百太郎の攻撃力
    波動拳みたいなの(気弾というらしい): 10
    直接攻撃(キック): 48

    48 って中途半端だなぁ。

    モビルサテライト: 10(一発当たり)
    サンダークラウド: 30

    ファイナルミッションの途中(フェイクラスボスを倒した後のバイオ区画の所)で、
    上から降ってくるメタルスラッグに乗らずに進んだ時(もしくは途中で壊れた時)、
    アレン・オニール軍曹が出てくる。軍曹の撃つマシンガンのダメージは、一発当たり 1 。
    ただし敵に当たっても得点は無し。
    また、次のマップ(クローン室)へ進むドアにはダメージを与えられない。

ファイナルミッションで、モーデン元帥と戦う場面に置かれている機関銃砲座のダメージは、一発当たり 10。
    
2006-11-24
    ミッションが終了した時の画面で、捕虜のカウントが行われている時に何かボタン(ボタン1かボタン2)を押すと、
    普段は時間のかかるカウントがすぐに終わる。

    クローンを倒しながらさらわれた仲間を助け出すシーン(クローン室)には、ジャンプばかりしていると気づきにくいかもしれないけど下段もある。

    

更新日時: 2006-11-24