書き間違えた数字ひとつ
Androidでメガドライブのゲームがまったく動きませんでした。画面の高さを実際より16行小さく書いた数字ひとつが原因で、何重もの検査をすり抜けて数か月見つかりませんでした。
公開前の開発記録N-EMUは11機種を扱います。機種ごとに画面サイズが違うので、その数字を1か所にまとめてiOSとAndroidが一緒に読みます。一度書いておけば両者がずれることはない、という考えでした。
メガドライブの欄には320x224と書いてありました。ところが実際にコアが渡してくる絵は320x240です。16行多く来ます。
Androidはその数字で絵を入れる箱を作ります。箱が2万バイト足りないので絵が収まらず、「Native engine error 7」だけが残りました。メガドライブのゲームは一枚も描かれていませんでした。
iOSは無事でした。絵を箱に移し替えず、絵のある場所からそのまま描くからです。サイズを間違えて覚えていても傷つく箇所がありませんでした。
見つからなかった理由はここにあります。iOSの検査はメガドライブが224行か240行のどちらかを出すことをすでに知っていて、両方を受け入れるように書かれていました。真実を知っている側は傷つかず、傷つく側は確認していませんでした。どちらの検査も緑でした。
見つかったのは偶然ではなく順序のおかげです。実機で実際に何が動いたのかを数えてみると、6機種は一度も起動されていませんでした。ゲームを持っていなくても確認できるよう試験用カートリッジを作り、タブレットで順に動かしていたところ、メガドライブの番でエラーが出ました。
数字は320x240に直しました。ゲームが224行モードを選んでもその中に収まります。画面比率も実機と同じ4:3になりました。さらに、各機種が実際に出す絵が書いておいたサイズを超えていないか見る検査を新しく入れました。入れた途端にこの問題をそのまま指摘しました。
あわせて読みたい開発の話
- 開発の話v0.9.11
ニンテンドーDSに似た折りたたみ画面
折りたたみ端末は広げると画面を2つに分けて使えます。ニンテンドーDSも画面が2つです。その似た構造を生かし、広げた画面では本体と同じように上画面を大きく取り、タッチ画面を方向キーとボタンの間に置きます。
- 開発の話v0.2.0
複数のゲーム機を1つのアプリに
機種が変わっても同じライブラリでゲームを選び、セーブデータを管理できるよう、複数のエミュレーターコアを組み合わせました。