『ファミコンの驚くべき発想力』――温故知新

松浦健一郎・司ゆき=著
表紙 ファミコンの驚くべき発想力
著者 松浦健一郎/司ゆき
出版社 技術評論社
サイズ 単行本
発売日 2010年11月
価格 1,518円(税込)
ISBN 9784774144290
例えばドラクエでは、ゲーム中で使うカタカナの数を20文字だけに制約しています。(158ページ)

概要

ファミリーコンピュータ
ファミリーコンピュータ
本書は、1983年に発売されたファミリーコンピュータ(ファミコン)を題材に、厳しい性能上の制約が、ゲーム開発者の工夫と独創性を引き出した過程を解説するものである。単なる懐古的なゲーム紹介ではなく、ハードウェア、プログラム、計算手法、データ圧縮、ゲーム設計を通して、限られた資源から最大の効果を得る発想法を考察している。
序章では、初期のRPGでパーティの人数が4人程度に設定された理由を例に、ゲーム内容が必ずしも企画上の理想だけで決まるのではなく、画面に表示できるキャラクター数など、機械の制約にも左右されることを示す。しかし開発者は制限に従うだけではなく、表示方法や役割分担を工夫し、制約を遊びのルールへ転換したのである。
ファミコンは、8ビットCPU、少量のRAM、限られた色数や画像パターンなど、現在から見ればきわめて小規模なコンピュータであった。一方で、キャラクターを背景とは別に動かすスプライト、背景画面を効率よく描くBG、滑らかなスクロール、ゲーム向けの音源など、必要な機能が注意深く選ばれていた。汎用的な高性能を追わず、ゲームに必要な処理へ資源を集中させたことが、低価格と十分な表現力の両立につながったのである。さらにROMカートリッジ側へ追加回路を搭載することで、本体発売後も機能を拡張できた点も、長寿命化に寄与した。
60分の1秒ごとに一定の処理を繰り返す
60分の1秒ごとに一定の処理を繰り返す
ゲームはおおむね 60分の1秒ごとに画面を更新する。映像を書き換えられる垂直帰線期間は短いため、プログラムは計算と描画を適切に分離し、割り込みやダブルバッファなどを利用して処理を間に合わせる必要があった。6502系CPUには少数のレジスタしかなく、スタックや高速なゼロページにも容量制限がある。そこで、使用頻度の高い値をどこへ置くか、命令を何回実行するかまで考えてプログラムを組み立てた。こうした設計では、速さとメモリ消費を全体として調整する能力が求められる。
キャラクターの弾道をDDAで計算する
キャラクターの弾道をDDAで計算する
乗算、除算、実数計算も容易ではなかった。開発者は掛け算や割り算をなるべく避け、ビットシフトと加算、あらかじめ計算した表などに置き換えた。物体を斜めに動かす場合には角度を限定したり、DDA(Digital Differential Analyzer:デジタル微分解析機)や固定小数点数を用いたりして、浮動小数点演算なしで自然な動きを作った。重要なのは高度な計算を忠実に実行することではなく、画面上で必要な結果を、より少ない処理で実現することである。
ラスタースクロールを使ってキャラクターを波打たせる
ラスタースクロールを使ってキャラクターを波打たせる
データ容量の不足に対しても、ステージをすべて保存せず乱数やアルゴリズムから生成する同じ画像パターンを組み替えて別の物体に見せる、色の配置を工夫して種類が多いように感じさせる、といった方法が使われた。『スーパーマリオブラザーズ』や『ドラゴンクエスト』などの表現は、大量の素材を持つのではなく、少数の素材を巧みに再利用した成果である。走査線単位で表示位置を変えるラスタースクロールのように、処理時間を命令のサイクル数まで計算して実現した技法もある。

セーブについても、バッテリーバックアップだけでなく、重要な情報を文字列へ符号化する「復活の呪文」が用いられた。完全な状態保存を断念し、遊びの継続に必要な情報を選別した合理的な方式である。

終章では、オブジェクト指向、ガベージコレクション、ミドルウェアなど、現代の便利な開発環境の功罪を論じる。これらは生産性を高める反面、内部の仕組みや処理コストを見えにくくし、既成の枠内で考える傾向を強める可能性がある。
ファミコン時代に学ぶべきなのは古い技術そのものではない。目的を明確にし、不要な機能を捨て、制約を分析し、代替手段を考え抜く姿勢である。
制限は創造性を妨げる壁ではなく、設計の焦点を絞り、新しい遊びや表現を生み出す契機になり得る、というのが本書の中心的な主張である。
ファミコンの主なスペック
CPU 8ビット, 1.79MHz
グラフィックス 52色中25色表示,256×240ピクセル
スプライト,BG,スクロール機能
メモリ プログラムROM:32KB
キャラクタROM:8KB
ワーキングRAM:2KB
ビデオRAM:2KB
サウンド 矩形波:2系統,三角波:1系統,
ノイズ:1系統、DPCM:1系統
入力装置 1個の十字ボタンと4個のボタンを備えたコントローラが2個
標準価格 14,800円

レビュー

温故知新」という言葉がある。本書がまさにそうだ。

かつてファミコン(ファミリーコンピューター)という家庭用ゲーム機があった。
8ビットCPU、最大52色表示、2KバイトのワーキングRAMと2KバイトのビデオRAM、それに合計40KバイトのROMカセットを挿すという、いまから考えると大変貧弱なハードウェアだった。それでもファミコンはプログラマブルなコンピューターとしてのアーキテクチャを備えていた。
マリオシリーズでお馴染みのクリボーのデザインの秘密。ドラクエの復活の呪文のデータ割り当て。ドルアーガの塔のダンジョンの作り方――これらは、ゲームバランスを保ちつつも、プログラムやデータを徹底的にスリム化した末にできた、一種の芸術作品といえよう。
本書の最後では、現代のプログラミングでは常識となっているオブジェクト指向を取り上げ、ガベージコレクションとフレームワークの功罪について触れている。

われわれ技術者は生産効率を優先するあまり、思いもかけない泥沼にはまることがある。プログラミングで行き詰まった時、また、これからゲームプログラミングを始めようとしている方は、ぜひ本書を読んでいただきたい。
(2010年12月24日 読了)

参考サイト

(この項おわり)
header