ゲーム

ドラクエで学ぶオーバフロー

keiju togashi's icon'
  • keiju togashi
  • 2020/03/12 15:38

 

ついに来ましたお題「ファミコン」!

実はここ 1〜2週間くらいファミコン自体にハマって、寝る前にスマホでファミコンを調べたりしてました。

きっかけはこの動画で、わずか 40kb (mp3 でいうと2秒)のデータ量で4人同時のアクションゲームを作ってしまうということに驚いて、どのように実装されているのか、ファミコンの仕様自体がどうなってるのか気になって追ってたりしてました。

英語ですが、動画で親切に教えてくれてるので興味があれば是非見てみて下さい!

 

と、前置きはこれくらいにして、みなさまドラクエやってますか?
ストーリー良し、音楽良し、キャラクター良しのあのドラクエです。

私はRPGといえばドラクエで全作やってきましたが、特に子供の頃にやったドラクエ(ドラクエ5くらいまでかな)については特に思い入れが強いです。

今回はその思い入れの強いドラクエ4で有名な裏技 "8逃げ" を題材に、システム系の問題でたまに聞くオーバーフローについて説明してみようと思います。
※ 8逃げ:ボス戦中に8回逃げると、以後全ての攻撃が会心の一撃になるという裏技
 

何故8逃げが題材かというと、8逃げ自体は想定されていた裏技ではなくオーバーフローで引き起こされたバグだからです。このため8逃げが発生する仕組みを追うことでオーバーフローを理解できる算段です。

 

ということでまずは逃げるを行うとデータ上はどのような動きがあるのか追ってみましょう。
簡単にエクセルでメモリのイメージ図を作ってみました(※ あくまでイメージ)。

Content image
逃げる前の状態

ドラクエ4 では逃げる回数によって逃走率を変える仕組みが備わっています。

・1〜2回目: 50%
・3回目:    75%
・4回目:   100%

メモ:通常戦闘では上記の通り4回目で必ず逃げてしまうため、8逃げを行う場合は逃げることができないボス戦で行う必要があります。

そのため何回逃げたかを把握する必要があり、それをメモリ上で管理しています。
たとえば3回逃げた場合は、1のフラグと2のフラグを立てて(1+2 = 3)のように表現しています。

Content image
3回逃げた状態

もう一度逃げると桁が繰り上がり、下記の状態となります。

Content image
4回逃げた状態

そのまま7回目まで逃げると(4+2+1 = 7)で下記の状態になります。

Content image
7回逃げた状態

では、さらにもう一度逃げるとどうなるでしょうか?

Content image
8回逃げた状態

はい、シンプルにそのまま桁が繰り上がります。
逃げる回数を管理しているメモリ領域からはみ出る状態になります。この事象がオーバーフローとなります。

では何故こうなると会心の一撃が出続けるのかということですが、実はここのメモリ領域はパルプンテの「ちからがみなぎってきた」状態を管理しています。

Content image
ちからがみなぎってきた!

この「ちからがみなぎってきた」というのは、みなさま御存知の通り「戦闘中ずっと会心の一撃がでる」といった効果のもので、裏技の事象に繋がります。

といったところで説明終わりです。

Content image

この通りオーバーフローはカッコいい名前は付いていますが、発生している内容自体は「制限入れずに加算してたら管理外のメモリ領域までいっちゃった!」というものすごくシンプルな事象です。

特にファミコン時代はメモリは高価で少しの領域も無駄にできなかったため、ギュウギュウにメモリを使っていたので発生しやすかったのかと思います。ただ、ドラクエ4についてはもう一つの有名なバグ "838861" についても同様にオーバーフローバグが原因なので、少しデバッグが足りていなかったのかもしれないです。

当時は何も考えずに、ただただ会心の一撃がずっとでるといったことに夢中でしたが、大人になってからその原因が分かり納得するといった流れはなんとも言えない感覚になります(笑)

ぜひみなさまも昔のゲームを振り返ってみてはどうでしょうか。
昔できなかったゲームをクリアするのも結構楽しいのでおすすめです!

 

補足

説明では逃げた回数と話してましたが、実は4の位は「ときのすな」を使った場合に利用されるメモリ領域です

Content image
ときのすな

このため、わざわざ8回逃げなくても、"ときのすな”を使ってから4回逃げれば同様にオーバーフローを引き起こすことが可能です。

また、このバグは後期に発売されたバージョンでは修正されているらしいので、試す場合は初期バージョンのものをお使い下さい(説明書の最終ページの右下に第2版と記載されているのが後期バージョンです)

 

未だにファミコンソフトは処分できずに持ってます。これは捨てられない、、

Content image
Content image

 

※ このアカウントが作成した記事にトークンは付与されません
※ このアカウントが作成した記事は人気記事に表示されません

Supporter profile iconSupporter profile iconSupporter profile iconSupporter profile iconSupporter profile icon
Article tip 5人がサポートしています
獲得ALIS: Article like 0.00 ALIS Article tip 30.10 ALIS
keiju togashi's icon'
  • keiju togashi
  • @keillera
Lead Engineer at ALIS
コメントする
コメントする
こちらもおすすめ!
Eye catch
クリプト

【クリスペ】【初心者】Crypto Spells(クリプトスペルズ・クリスペ)序盤の進め方【NFTゲーム】

Like token Tip token
14.70 ALIS
Eye catch
他カテゴリ

初投稿です🌱|発売まで@1か月|ワクワクがとまらないFF14パッチ6.0

Like token Tip token
13.00 ALIS
Eye catch
ゲーム

イーサリアムが無料で掘れる!? スマホゲーム「ユビホル」とは

Like token Tip token
21.00 ALIS
Eye catch
ゲーム

【初心者向け講座】NFTゲームの中でもSorareは低投資でも稼げる【サッカー×NFT×BCG】

Like token Tip token
11.10 ALIS
Eye catch
ゲーム

【初心者向け】Splinterlandsの魅力と登録方法【BCG】

Like token Tip token
6.70 ALIS
Eye catch
クリプト

NFT解体新書・デジタルデータをNFTで販売するときのすべて【実証実験・共有レポート】

Like token Tip token
120.79 ALIS
Eye catch
クリプト

クリプトスペルズで入手したMCHCを引き出す方法

Like token Tip token
196.20 ALIS
Eye catch
ゲーム

ブロックチェーンゲーム LIBERATE 説明書

Like token Tip token
435.90 ALIS
Eye catch
ゲーム

【ブロックチェーンゲーム初心者向け】クリスぺで無課金で誰でも毎月2000円稼げる時代がきた

Like token Tip token
22.40 ALIS
Eye catch
ゲーム

【初心者向け】Splinterlandsの遊び方【BCG】

Like token Tip token
6.32 ALIS
Eye catch
ゲーム

ポケモン都市伝説:裁判で存在を消されたポケモン <前編>

Like token Tip token
11.82 ALIS
Eye catch
クリプト

約2年間ブロックチェ-ンゲームをして

Like token Tip token
61.20 ALIS