ドラゴンクエストの日。DQシリーズの人気スマホゲーム「ドラゴンクエストウォーク」の魅力を紹介したい!初代「ドラゴンクエスト」の全モンスター40種と改めて戦ってみた。おなじみのキャラも,37年前のドット絵だとちょっと違った雰囲気?ようこそ,アプリ博物館【メディアプレーヤー館】へ。動画はネット上で見るようになって忘れられたフリーソフトの子たち「きらめきパラダイス」短期連載企画“コーデ道”第5回は「ホーム編」Part2。Expo」参加クリエイター84名へアンケート。キングダム」を先行体験。Nil」で,地球の環境問題について考える。再生可能エネルギーだけで,荒廃した世界に緑あふれる大自然を取り戻す“環境復元”シム注目のムービードッジボールRPGからローグライクホッケーまで。日本語化:ドット絵のハクスラで題材は東南アジアの民間伝承。2016最終日の北米時間3月18日,「MS-DOS」の名前が入った奇妙なセッションが行われた。MS-DOS」(PS4から1.44MBフロッピーディスクへ。RampageをMS-DOSへ移植してみた)である。「いまどきMS-DOSもないだろう。これは色物セッションに違いない」と思って参加してみたところ,意外や意外,かなり真面目な内容だった。Provinciano氏によるセッションの概要をレポートしよう。Rampage」というゲームは,8bitゲーム機風のレトログラフィックが特徴のアクションゲームだ。Rampageの画面。ゲーム画面の外枠がブラウン管テレビを模したデザインになっているなど,細部まで凝ったゲームだ。ビジュアルがレトロなだけでなく,多数のプラットフォーム向けにリリースされているのも特徴である。U,さらにニンテンドー3DSとiOSにも対応といった具合で,実に多彩というか,移植が趣味なんじゃないかと言いたくなるほど多い。MS-DOS版は,これに加わったもう1つのプラットフォームというわけだ。Rampageの動作要件。推奨はPentiumだが,486DXでも動作することになっているProvinciano氏がMS-DOS版の作成にあたって目指したのは,i486クラスのCPUで十分に動作することと,メモリ使用量を4MB以内に抑えること,そして,ゲーム全体を記憶容量1.44MBのフロッピーディスク1枚に収めることの3点だったという。フロッピーディスクといわれても,見たことがない読者のほうが多かったりするかもしれないが,ペラペラの薄い樹脂の円盤上に磁性体を塗って,磁気でデータを記録する記録メディアのことだ。大昔のPCにはHDDすらなかったので,フロッピーディスクからOSやプログラムを読み込んで,実行していたのである。Provinciano氏が掲げた3つの目標。フロッピーディスク1枚に収めなくてもいいような気もするが,それがこだわりというものだMS-DOS向けの開発環境がそもそもない!?さて,目標を設定しては見たものの,実現には当然ながら,いろいろと困難が多かったそうだ。第一に,開発環境がない。「最近のシステムなら良い統合開発環境があったり,素晴らしいドキュメントが整備されているが,MS-DOSのプログラミング環境はすべてここにある」と述べてProvinciano氏が表示したのは,廃棄されたコンピュータの山である。説明するまでもないが,MS-DOS向け開発環境など,すべてゴミになっているということだ。Provinciano氏が「MS-DOSのプログラミング環境はすべてここにある」として表示した写真は,どう見てもゴミの山です......「486DXをネイティブで搭載するマシンは,ebayで探さないことには手に入らない。ドキュメントは(紙の)本であり,これまたリサイクル品を探さないと手に入らない」とProvinciano氏。Rampageの主要プラグラムコードをあまり変更することなく,MS-DOS向けにコンパイルできる環境が必要だったという。開発機かWindowsでクロスコンパイルできる環境が欲しかったとProvinciano氏。5.02」に目をつけたものの(※最終バージョンでもMS-DOSアプリの開発ができた),C++のTemplateが使えないために放棄。IDE」を選択したそうだ。C++」コンパイラを含む無料の開発環境である(関連リンク)。開発環境は決まったが,MS-DOSと今のOS環境とでは,いろいろと事情が違う。「まず違うのはグラフィックスだ」とProvinciano氏は述べた。MS-DOS時代のグラフィックス表示には,VGAと呼ばれたグラフィックス表示回路のハードウェアにアクセスする必要があり,ゲームエンジンやOSやドライバソフトなどで多層化された現在のOSと違うのは当然である。筆者もかつて,MS-DOS上でVGAハードウェアにアクセスする方法を書いた解説書を出したことがあったりするので,Provinciano氏の話は,説明を聞かなくてもよく分かる話だったりする。Provinciano氏が示したVGAにおける表示の概念図。13H」を使うことになったそうだ。13Hは256色が表示できるモードで,1ドットが1byteに対応する。そのため,とても簡単で速い」と,Provinciano氏は選択の理由を述べている。13Hは,320×200ドットで256色表示が行えるVGAの画面モードのこと。もとを質せば,VGAよりも古い「MCGA」というゲーム向きのグラフィックスシステムで導入された表示モードだったりする。ゲーム用の表示モードみたいなものなので,当然の選択だもう1つ,開発で大きな問題として立ちはだかったのが「システムタイマーの割り込み」(IRQ0)だそうだ。「(MS-DOSにおける)システムタイマーの値(※割り込み周期)は55ms。これでは60fpsで表示しようとしても,1フレームに1回のタイマー割り込みすら入らない」(Provinciano氏)。幸いなことに,タイマー割り込みの周期は変更できるので,Provinciano氏は最小値である13.75msに変更することで対応したという。ところで,「ゲームなら,V-Sync割り込みを使うのが当たり前では?」と思った人もいるかもしれない。実のところ,MS-DOS時代のVGAは,V-Sync割り込みが標準ではなかったのである。そのため利用できないPCもあったので,V-Sync割り込みを前提でゲームを作れなかった,というわけだ。思えば不自由なアーキテクチャだったものである。システムタイマーの割り込み周期は55msだったが,変更して対応できたそのほかにも,ゲームパッドは直接I/Oポートを読まなければならないとか,サウンドカードは標準搭載ではないので,PCスピーカー(※ビープ音のことだ)を使うといった具合に,いろいろな制限があったそうだ。RampageはMS-DOSへ移植されたのである。MS-DOSへの移植が新たなアイデアのヒントをもたらすさて,こうした苦労を経て,3つの目標はどれくらい達成できたのだろうか。最初の「486DXでも動く」という性能面だが,これについてProvinciano氏は,なかなか印象的なことを述べている。MS-DOS時代のゲームで性能を最適化するなると,すぐに「アセンブラを使う」という発想にとなるところだ。Provinciano氏曰く「大抵の場合は,アルゴリズムがアセンブラを上回る」ことが分かったそうだ。コードの書き方によって効率には善し悪しが生じるので,そこは注意が必要とのこと。下のスライドはその例だが,これはMS-DOSに限った話ではなく,現代のアプリケーション開発でも起きる一般的な話である。左右とも,同じ処理をしているコードだが,生成されるマシンコードの効率はだいぶ違う。C++での話だが,現在のコンパイラでもこういったことはあるメモリ使用量を4MBに抑えるという目標は,MS-DOSのメモリ割り当てシステムに問題があったものの,とくに支障なく乗り越えられたという。一方で,記憶容量1.44MBのフロッピーディスク1枚に収めるという目標は,かなり苦労があったそうで,いろいろと工夫したものの,1.58MBになってしまったそうだ。工夫したけれど,1.58MBになってしまった。200KBは切り詰めなければならない......そこで,まずアセットを簡略化した。下のスライドで一目瞭然だが,もとになったプラットフォームの画面に比べると,装飾がだいぶ少なくなっている。コリジョン判定用のオブジェクトをあらかじめ作っておくのではなく,メモリに読み込んだ後で生成するといった手法も取り入れることで,なんとかデータ量を減らしたそうだ。それでも1.44MBには圧縮しきれなかったので,コンテンツの一部はやむなくカットしたそうである。した多大な苦労を経て,MS-DOS版をフロッピーディスク1枚に収めることができたと,Provinciano氏は述べていた。左がもとになったもので,右がMS-DOS版の画面。見比べると分かるが,MS-DOS版は看板や壁の文字,屋上のオブジェクトが省かれているそれでも入りきらなかったので,エクストラキャラクタやミニゲーム,擬似3Dレースシーンが削除された。Rampageだが,HDDへのインストーラも付属しているとのことだ。HDDへのインストーラー画面。右上のプログレスメーターあたりが,いかにもDOS風味さて,この話を読んで,「無駄なことをしているなあ」と思った人もいるだろう。2016年にもなって,MS-DOS用のゲームを作る技術が,何の参考になるのかと。Provinciano氏は,講演の最後に「MS-DOSへの移植から得た経験は,ほかのプラットフォームにも活かすことができる」と述べている。高速化に適したコードの書き方やデータ削減のテクニックは,どのプラットフォームでも有用であろう。スマートフォン向けゲームのように,データ量はなるべく削減したいというときにも,役立つ考え方はありそうだ。いうものの,やはりProvinciano氏は,レトロなハードウェアでのプログラミングが好きでたまらないのだろう。グラフィックスの描画テクニックを説明するところで,スーパーファミコンのROMカートリッジに使われていたメモリ管理チップの話が飛び出したりと,セッション中にはたびたび,ゲーム開発オタクっぷりを炸裂させていたからだ。MS-DOS版をプレイするのは厳しいだろうが,興味が湧いた人は,プレイ可能なプラットフォーム版でプレイしてほしい。2016]シリコンスタジオブースレポート。2016]カジュアルなモバイルゲームにおける効率的な物語の伝え方とは。ALLY」の実機をチェック。