トップページgamedev
777コメント359KB

スーパーマリオ逆解析で勉強

■ このスレッドは過去ログ倉庫に格納されています
0001リバースマリオ02/03/31 07:49ID:???
元祖マリオの逆アセダンプだとか、データ構造などが載ってるYO↓
http://www.geocities.co.jp/SiliconValley-Bay/7981/misc.html

データ構造の圧縮方法などがとてもためになるYO。
みんなで勉強するのDA!
0002名前は開発中のものです。02/03/31 08:19ID:???
       2ゲッ・・・
 ̄ ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄
         ∩ ∩
        〜| ∪ |         (´´
   :・‥  ヘノ  ノ       (´⌒(´
   ・:・:・((つ ノ⊃≡≡≡(´⌒;;;≡≡≡
  ‥∵・   ̄ ̄ ̄(´⌒(´⌒;;
         グシャァァーーーーーッ
0003名前は開発中のものです。02/03/31 08:26ID:???
00009063: 8D 57 07 sta $0757
00009066: 8D 54 07 sta $0754 ; プレイヤの大きさ(0=Big,1=small)→チビに設定
00009069: A9 02 lda #$02 ; 3人
0000906B: 8D 5A 07 sta $075A ; =マリオ(現在のプレイヤ)残り人数
0000906E: 8D 61 07 sta $0761 ; =ルイージ(待ちのプレイヤ)の残り人数

8bit時代ってメモリ少ないからプレイヤーの大きさなどを示すBOOL変数に
1バイトも使ってるていうのはちょっとビクーリ。
0004名前は開発中のものです。02/03/31 08:30ID:???
; SQ2 : パワーアップ効果音の音符テーブルを形成。
0000F4DA: 4C 52 4C 48 3E 36 3E 36 30 28 4A

あのパワーアップの音って長いけど、こんな短いテーブルだったのか!!
費用対効果を考えるとコスト安いな
0005名前は開発中のものです。02/03/31 08:32ID:???
>>3
いや、$0757はファイヤーマリオも記録しているからBOOL値では
すまない罠。
ま、2ビットで足りるけどね。
0006名前は開発中のものです。02/03/31 08:38ID:???
地形マップと敵マップとを分離したのか・・・
あと地形マップのデータ構造、エキサイトバイクのそれに似てるね。
マップ生成は初期化時に3pass。
0007名前は開発中のものです。02/03/31 08:39ID:???
土管に入れるか否か?は内部的には敵コマンド扱いだったのか。
0008名前は開発中のものです。02/03/31 08:48ID:???
しかし、意外とメモリは贅沢に使ってるんだね。
例えば、512Bhにクッパが斧を投げ始めるワールド数が格納されてるけど
これはソース中で記述可能でしょ?
バランス調節のしやすさを意識してる様子が、、
0009名前は開発中のものです。02/03/31 08:53ID:???
マップには4種類の属性があって、コインも含める全キャラが
その環境に合わせてパレットを用意しているという丁寧さに脱帽。
確かに土管の色も何パターンかあったなぁ
0010名前は開発中のものです。02/03/31 08:58ID:???
なつかしー!eor命令。
0011名前は開発中のものです。02/03/31 09:03ID:???
確かに若いころを思い出すダンプリスト。
そうそう、6502にはレジスタがほぼ単一だから、ニーモニックに
レジスタ表記がないのが特徴だったっけ。

0012名前は開発中のものです。02/03/31 09:06ID:???
>マップには4種類の属性があって、コインも含める全キャラが
>その環境に合わせてパレットを用意しているという丁寧さに脱帽。
確かに、ある意味リアルだよね。
0013名前は開発中のものです。02/03/31 09:25ID:???
RESET割り込みジャンプアドレスが fffch で、スーパーマリオの場合
00_80h だから 8000h が先頭。
で、その後、初期化を行って$8057で無限ループストップ。
つまり完全にNMI割り込み依存なのか!美しい。メインルーチンゼロ。
0014名前は開発中のものです。02/03/31 09:37ID:???
6502には大きく分けて3種類の割り込みがあった。
RESET割り込みは置いといて、IRQ割り込みとNMI割り込み。
で、CPUパワーの少ない当時において絶対にかかる割り込みというのが
必要で、それが後者のNMI割り込み。これは割り込み禁止が不可能な
割り込みで、CPUがいかなる状態であれこの割り込みだけはV-Blank突入時に
発生してくれた。CPUのコンテキストをスタック領域に保存するのも、
なんとCPUが自動でやってくれたので、当時の方が割り込みハンドラによる
プログラミングがある意味、お手軽だったし盛んだった。

メインルーチンが while(1); なのは何もスーマリだけじゃないよ。
0015名前は開発中のものです。02/03/31 09:39ID:???
6502はRISCチップです。
0016名前は開発中のものです。02/03/31 09:41ID:???
もうスーマリくらいの規模になってしまうと、
趣味レベルでは作れないですよねー
実際、あんまり見かけないですし
0017名前は開発中のものです。02/03/31 09:41ID:???
ミヤーモ降臨よろしく
0018名前は開発中のものです。02/03/31 09:49ID:???
ここの人たちって現役なんですか?
00191402/03/31 09:56ID:???
私は現役ですが何か?
18さん、あなたも昔のゲームのフローやデータ構造の研究を
激しくお奨めしますよ。
今の若者が思っているより遥かに洗練されている部分もあるし、
遥かに幼稚な部分も稀にあったりして勉強になりますよ。
0020名前は開発中のものです。02/03/31 11:30ID:???
名スレ過ぎる
0021名前は開発中のものです。02/03/31 11:51ID:???
Cから入って潤沢な資源に恵まれた環境でしか作ったことのない自分にとっては
限られた資源のFCでよくできてるゲームは魔法みたいに見える。

当時の他のほとんどのゲームは最低限ゲームとして成り立たせることに手一杯で、
ここまで面白さを追求できてるものはなかったし。
もしかして今の時代、現役の開発者でもフルアセンブラで組んだことのある
人ってすでに少数派なのでは?
0022名前は開発中のものです。02/03/31 12:16ID:???
ttp://game.2ch.net/test/read.cgi/retro/1011118456/
ここと読み合わせると威力倍増
0023名前は開発中のものです。02/03/31 13:17ID:???
>>8
ソースの中で記述してるジャン(w
0024名前は開発中のものです。02/03/31 14:38ID:MGRxLFVr
>>4
逆アセンブルのデータの区切り方が今現在間違ってる。
というか元になった資料が間違ってたりしてw


正確にはこうでした

; SQ2 : パワーアップ効果音の音符テーブルを形成。
0000F4DA: 4C 52 4C 48 3E 36 3E 36 30
0000F4E3: 28 4A 50 4A 64 3C 32 3C 32
0000F4EC: 2C 24 3A 64 3A 34 2C 22 2C

; : パワーアップ効果音の様に思えるが、実は未使用領域。冗長な音を削ったのだろう
; : 和音としてはいいかんじ。
0000F4F5: 22 1C 14


データは F4F4から F4DA へと後ろから読んでいきます

00252402/03/31 14:48ID:???
こう書いた方がよかった

0000F4DA:
4C 52 4C 48 3E 36 3E 36 30 28
4A 50 4A 64 3C 32 3C 32 2C 24
3A 64 3A 34 2C 22 2C
0026名前は開発中のものです。02/03/31 17:03ID:???
>> >>8
>> ソースの中で記述してるジャン(w
いや、多分、レジスタ即値比較で済むのに、わざわざデータセクションに
ある値で比較していることを指摘しているのだと思われ。
データセクションにある値はソースにあるとは限らないよ。
それいったら、マップデータもアセンブラソースにあるじゃんってことになる。
0027名前は開発中のものです。02/03/31 17:17ID:???
スーマリ1の逆アセ拝見させてもらった。

>もしかして今の時代、現役の開発者でもフルアセンブラで組んだことのある
>人ってすでに少数派なのでは?
さすがにフルアセはもうないかもね。
ps2のシステム班なら毎日アセンブラなんだけど、ゲーム全体となると・・・

スーマリのデータ構造見て感じたのだが、
その構造たるや、今のゲームやアプリケーションのそれとほとんど差が
ないことにびっくりした。
大枠の親セクションがあり、その中に子セクション郡へのindexがあって
さらにその各子セクションの中に孫セクションがあるという管理方法は
今でも良く使う、というかこのあたりの構造はあまり進化してないのか?
00282702/03/31 17:18ID:???
考えてみれば、CやC++になっても可変長のデータ構造に対する
ケアはあまり進化してないなぁ
0029名前は開発中のものです。02/03/31 17:22ID:???
当時はメモリ的な理由でボーナスステージの共有という形で
エリア間のノードをつないだんだと思うけど、今でも人的資源には
限界があるのだから、使えない手ではないよね。
0030名前は開発中のものです。02/03/31 17:40ID:???
スーマリチームの前作はデビルワールド。
デビルワールドも解析してちょ。
0031名前は開発中のものです。02/03/31 18:16ID:???
こういうの、もっと解析して公開してほしい。勉強になるよ。
#でも、違法なんだよね…。
0032名前は開発中のものです。02/04/01 03:54ID:???
http://game.2ch.net/test/read.cgi/gamedev/1011861036/
ここに関連しそうなスレ

このスレおもしろかったです。
俺も何かの解析記事うpしようかな…
0033名前は開発中のものです。02/04/01 05:32ID:???
そうか、レジスタ少なければ守るものも少ないからスレッド切り替えが軽いのか。
6502の切り替えはたったの7サイクル、あろ?

レジスタ多い昨今のCPUはその分、大変かも。
0034エミュ野朗は自殺しろ02/04/01 05:52ID:???
死ね犯罪者ども
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ

▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ

0035名前は開発中のものです。02/04/01 20:57ID:???
2chのログから>>1の身元が割れ、
任天堂法務部から告発食らってタイーホ、懲役3年実刑判決、
民事では1億円の損害賠償、
>>1は自己破産。
0036名前は開発中のものです。02/04/02 19:47ID:???
>>1を破産させるために皆でダウンロードしてソースを読もうよ!!
0037( ○ ´ ー ` ○ )エミュ大好き02/04/03 05:45ID:???
( ● ´ ー ` ● )エミュ大好き
0038名前は開発中のものです。02/04/03 06:37ID:???
エミュ大好きなっちは犯罪者。
0039名前は開発中のものです。02/04/03 09:07ID:???
ガクガクブルブル
0040リバースマリオ 02/04/03 18:44ID:???
元祖マリオの逆アセダンプだとか、データ構造などが載ってるYO↓
http://www.geocities.co.jp/SiliconValley-Bay/7981/misc.html

データ構造の圧縮方法などがとてもためになるYO。
みんなで勉強するのDA!
0041名前は開発中のものです。02/04/03 22:47ID:???
age
0042名前は開発中のものです。02/04/03 23:47ID:???
意味もなく上げんな
0043ワケワカラン02/04/04 01:07ID:???
アセンブラを勉強すれば
このスレに書かれている意味がわかりますか?
0044盗んだデータの解析自慢か02/04/04 02:57ID:???
▼゚Д。▼カフッ▼゚Д。▼カフッ
0045名前は開発中のものです。02/04/05 00:46ID:???
ジャンプおよび当たり判定の部分の解析キボンヌ。

と。
0046終了02/04/05 00:53ID:???
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
0047名前は開発中のものです。02/04/05 01:20ID:???
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
ッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフ
フッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カ
カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼
▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。
。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д
Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚
゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼
▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ
ッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフ
フッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カ
カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼
▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。
。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д
Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚
゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼゚Д。▼カフッ▼
0048名前は開発中のものです。02/04/05 04:26ID:???
ところで逆解析って何さ。
解析の逆?

っていうツッコミが無かったのが不思議。
0049名前は開発中のものです。02/04/05 11:22ID:???
>>45
自分も激しく希望。
あのジャンプの感覚はいまでも匹敵するものはない。
どういうプログラムでどんな調整をするとあの感じが出せるのか?

1-2出口のの土管で1ブロックのこしてジャンプで後頭部をめり込ませると
なぜ壁をすり抜けるのか?
あのゲームはいろいろ謎が多いです。

>>48
対義語ってなんだろう?
0050▼゚Д。▼カフッ02/04/05 23:20ID:???
>49
▼゚Д。▼カフッ


▼゚Д。▼カフッ

▼゚Д。▼カフッ
0051名前は開発中のものです。02/04/14 10:02ID:???
「神風マリオ」
が全てのバグを利用しててカコイイ!!
0052名前は開発中のものです。02/04/21 00:21ID:RqcwHmjw
ていうか、スーマリだったら海外のどっかで完全に解析されてるじゃん。
0053名前は開発中のものです。02/04/21 02:01ID:???
  ニセもん野郎にホモ野郎♪
    一発で仕止める言葉のドライブバイ♪
      こいつやってもいいか♪
        奴の命奪ってもいいか♪
\__________ ___________/
                 ∨
              ∧_∧
            Θ(´∀` ,,)
             || (つ∞> つ
             || (  (  (
             || (_(__)
0054名前は開発中のものです。02/04/21 03:21ID:.gT5mREE
age
0055名前は開発中のものです。02/04/27 00:25ID:AoPtetmc
なんかおもしろいこと書いてくれよ>>1
0056名前は開発中のものです。02/04/27 15:11ID:???
'評価版'という文字列のリソースはwin32k.sysにある模様
これで何か出来るかな?
0057名前は開発中のものです。02/04/27 23:56ID:6xop1EJM
誤爆か?
0058名前は開発中のものです。02/04/30 02:55ID:???
>>49

ジャンプの制御は、最初は数式で加速度を作ってたが、
気に入らなかったので担当の人(ミヤーモ?)が加速度テーブル
を手打ちで作ったと聞いている。

壁すり抜けに関しては前にスーマリパクリゲーを作った時
にこうではないかと感じた。

マリオが宙に一個だけ浮いているブロックに頭突きをかました
場合、マリオの中心線がブロックと重なったときのみブロック
を叩ける。中心線がブロックと重ならなかったとき(半キャラ以上
ずれているとき)は、左か右にスルリと抜けてしまう。
上記の事から、以下の処理をしているのだろうと予測する。
0059名前は開発中のものです。02/04/30 02:56ID:???
1:上昇中にブロックと接触した場合、中心線が重なっていれば
ブロックを叩く処理をする。
2:そうでない場合、マリオが右に寄ってれば右へ、左に寄ってれば
左へマリオをずらす。上昇加速度はそのまま。

ここで、壁にめりこんだときに右へ右へずれていくのは、2の処理を
細分化した時に、

2−1:マリオの左上のポイントが壁に接触していれば(つまり右に
寄ってれば)右へマリオをずらす。上昇加速度はそのまま。
2−2:そうでなくてマリオの右上のポイントが壁に接触していれば
左へマリオをずらす。上昇加速度はそのまま。

となっていると思う。これが正しいとすると、壁にめり込んだときは
ジャンプしてないので、上昇中という条件のある1は素通りする。
次に2−1を実行して(右にずらして)命令を抜ける。よって2−2は
実行されない。

これが壁すり抜けの正体だと妄想してるんだがどうか。検証求む。
0060名前は開発中のものです。02/04/30 18:19ID:???
なるほど。長年の疑問がわかってきたような気がするぞ。
0061名前は開発中のものです。02/05/01 23:10ID:???
壁にめり込んだときに右に動くのは分かった。
では、最初に壁にめり込むのは何で?
00625802/05/02 00:06ID:???
>>61>>49
今、スーパーマリオ1が手元にないので、
その場面を確認できない。できればその場面の詳し
い説明をしてもらえないだろうか。アスキーアートで
図入りだと嬉しい。

この辺の話題は自分にとっても興味深いので、ぜひ
ともお願いしたい。
0063名前は開発中のものです。02/05/02 17:24ID:???
>>61
下降中は半キャラずれていてもブロックに乗れるからでは?
■ このスレッドは過去ログ倉庫に格納されています