ふっかつのじゅもんとbase64の関係
はじめまして、4月からプログラマとして働きはじめたmotokiと申します。
さてさて、発売日が発表され、じわじわと詳細が明らかになるドラゴンクエスト11。PS4版か、3DS版か悩みますよね。
今回のドラクエ11には「ふっかつのじゅもん」機能が復活するとのことで、ファミコン時代を思い出すピコピコおじさんおにいさんは多いと思います。私もそうです。
復活の呪文をご存じない方へ端的に説明すると「ゲームの進行状態を電子データとして保存せず、代わりに文字列として書き出しておき、それを利用してゲームを再開する」という、今時の感覚からすれば謎の仕様ですね。ゲームカセットに電池を搭載してRAMの状態を保持する技術が普及し、フラッシュメモリが浸透し、クラウド保存があたりまえになった今では逆に新しく感じるかもしれません。
ドラクエ11でも現在の進行状態を「復活の呪文」化することで、だいたい同じ進行度を維持したまま別環境で再現できる、とのことで、ゲーム解析勢がどれくらい無茶なことをするのか今からワクワクしています。また、過去のドラクエ1や2で使えた復活の呪文も転用できるそうです。ではここで、復活の呪文の仕組みについてプログラミングの観点から簡単に解説します。大丈夫、ギリギリ技術ブログです。
ドラクエ1と2では使える文字数・種類に違いがありますが、どちらの復活の呪文も「ひらがな+濁音文字+半濁音」から64文字を用います。この64文字にピンとくる人も居るんじゃないでしょうか。実は、メールの添付ファイル符号化などに使われるbase64とほぼ同じ技術です。おっ、技術ブログらしくなってきましたね。
というわけで、ドラクエのことはひとまず置いて、base64について解説したいと思います。これは電子メールのデータ転送が7bit単位で行なわれる規格であるため、8bitめのデータ欠損を起こさず転送する方法の一つとして生まれた符号化規格です。電子メールに半角カタカナを使っちゃいけない、っていう謎ルールもこの辺が由来です。
8bitの情報を3つまとめて、6bitごと4つに分割します。6bitで表現可能な範囲は0から63まで。それぞれの値を64個の文字に置き換えます。3で割り切れない場合のbit情報もひとまず6bitごとに分割して、残りは”=”記号で埋めます。以上、ここまでがbase64エンコードを簡単に説明したものです。デコードはこの手順を逆に行います。以下はデータと文字の関係について変換表にまとめたものです。
それでは実際に短いデータ”STERFIELD”という文字列をbase64エンコードしてみましょう。
上記は”STERFIELD”を1文字ずつ文字コードを16進数化したものです。これらを連結すると以下のビット列になります。
010100110101010001000101010100100100011001001001010001010100110001000100
これを6桁ずつに区切ります。
010100 110101 010001 000101 010100 100100 011001 001001 010001 010100 110001 000100
6桁ずつ上の表に従って文字を割り当てていきます。
U1RFUkZJRUxE
あら不思議、base64エンコードの完了です。
お待たせしました。ドラクエの話に戻りましょう。前述したbase64変換表の”A”から”/”までの文字の代わりに、後述するひらがなを割り当てれば、復活の呪文風エンコーダ・デコーダが作れますね。(ドラクエのデコーダ実装上でのひらがなの順番はよく分かりません……)
ついでなので、それぞれのドラクエの復活の呪文がどれだけのデータを保持していたのか、計算してみましょう。
使用文字 | 復活の呪文長 | 実データ長 | |
ドラクエ1 | あいうえお かきくけこ さしすせそ たちつてと なにぬねの はひふへほ まみむめも らりるれろ やゆよわ がぎぐげご ざじずぜぞ だぢづでど ばびぶべぼ | 20文字固定 | 6(bit)×20=120(bit)=15バイト相当 |
ドラクエ2 | あいうえお かきくけこ さしすせそ たちつてと なにぬねの はひふへほ まみむめも らりるれろ やゆよわ がぎぐげご ざじずぜぞ ばびぶべぼ ぱぴぷぺぽ | 18~52文字 | 6(bit)×52=312(bit)=39バイト相当 |
信じがたいコンパクト設計ですね。プレイ状況の再現に必要な情報を極限まで切り詰めた結果ですが、当時のプログラマの叡智が詰まっています。復活の呪文というのは、ゲームの中でだいたいこのように処理されて「よくぞもどった」と言われるようになるわけです。今はゲーム内の情報も膨大になったので、こんな短い文字だけでどれだけ再現できるのかな、という技術的興味がふつふつと沸いてきますね。
もうすぐ発売されるドラクエ11でも復活の呪文の入力が間違っていたらやっぱり絶望に打ちひしがれるのだろうか、と思うと今から楽しみです。
Author Profile
スターフィールド編集部
SHARE