ファミコンの驚くべき発想力 -限界を突破する技術に学べ-

ファミコンの驚くべき発想力 -限界を突破する技術に学べ-

-Amazon.co.jp: ファミコンの驚くべき発想力 -限界を突破する技術に学べ- (PCポケットカルチャー): 松浦 健一郎, 司 ゆき: 本
--http://www.amazon.co.jp/exec/obidos/ASIN/4774144290/nilabwiki-22/ref=nosim/
--->ファミコンはコンピュータ・ゲームの原点として一大文化を築いたと言われますが、今なおレトロゲームとして熱心なファンに親しまれています。ファミコンは現在のコンピュータと比較するととても低スペックのマシンに見えますが、どのようにゲームの表現を可能にしていたのでしょうか。また、当時のプログラマーは限られたリソースを最大限に活用したプログラミングでゲームを開発していたとされますが、実際にはどのようなものだったのでしょうか。ファミコンのハードウェア/ソフトウェアに込められた数々の技術と発想に迫ります。

読書メモ


-ファミコンのスプライトは水平方向に8個まで同時に表示することが可能
--ドラクエIIIのパーティが4人までしか組めない理由
---1キャラあたり縦横2x2のスプライトを使用、1キャラあたり水平方向に2枚。横一列に並ぶと4人でスプライトが水平方向に8枚。
---横一列に5キャラ以上が並ぶときは、キャラを交代で高速に非表示にすることで対応(ただし、点滅してちらつく)

-BG
--背景に格子状に配置できる画像
--CPUへの負担が少ない
--なめらかにスクロールできるので、背景画像として使われる
--必ず8x8ピクセルの画像を格子状に並べなければならないという制限がある

-ファミコンの解像度
--横256ピクセル、縦240ピクセル
--BGを横に32個、縦に30個並べた大きさに相当

-ファミコンは主にRF出力やビデオ出力でTVに接続するので、適度にぼやけた表示になる
--ファミコン特有の味がある画面に

-「技術者的な発想で色数を絞り込むと、単純に色を表現するためのビット数を削減するといった結果になりがちです。ファミコンの場合には、実際のゲーム制作においてキャラクタのデザインに使える色のセットをつくろうという発想で、デザイナーの協力のもとに色数を絞込みました」

-ファミコンは最大で52色を表示可能
--基本の13色があり、各々に対して輝度が4階調あるので 13x4=52色
--ファミコンはTVのNTSC信号を直接生成する方式
--画面上で同時に表示できるのは25色。この25色はパレットを使って選択する
--スプライト用に4個のパレット、BG用に4個のパレット、各パレットには4色を指定できる
---スプライトの4色のうち1色はパレット共通の透明色、BGの4色のうち1色は共通の背景色になるので、パレット度とに個別に指定できるのは3色
---スプライト用パレット: (3色+透明色)x4パレット=12色
---BG用パレット: (3色+背景色)x4パレット=12色
---背景色: 1色
---12+12+1=25色
--ひとつのスプライトに適用できるパレットは1つだけ
---ファミコンのキャラクターは実質3色で構成されているものが大部分

-ファミコンの低価格化戦略
--本体をできるだけ安くして、そのかわりカセットROMをある程度大容量にして拡張に対応

-ファミコンのCPUは実数を扱えない
--整数を利用して固定小数点演算を行う

-DDA(Digital Differential Analyzer: デジタル微分解析機)
--整数だけを使ってシューティングゲームの弾道を計算

-ドルアーガの塔
--最終ステージの60面以外は迷路の形状にそれほどこだわりがなかった
---最終ステージの60階以外の迷路データをもたず、乱数で迷路を生成している
---データ容量を節約することができる
---擬似乱数を生成するときのシード(種)を同じものにすることで、同じ迷路を作ることが可能
--アーケード版は縦長の画面なのでファミコンと迷路のサイズが異なる
---迷路の形状がアーケード版とファミコン版でちがう

-スーパーマリオのクリボーの絵柄は1パターンだけ
--交互に左右反転させることで歩いているようなアニメーションを実現

-ポートピア連続殺人事件ではゲーム中で使うカタカナの数をよく使う20文字に制限してデータ量を削減
--ドラゴンクエストでも同じく
--20文字: イカキコシスタトヘホマミムメラリルレロン

-ドラクエの復活の呪文には64種類の文字が使われている
--1文字辺り64通りの情報を表せる(6ビット分の情報に相当)
--算出・生成できるデータは復活の呪文に持たせない
---レベル、最大HP、最大MP、力、素早さ、取得魔法: 経験値から算出
---攻撃力、防御力: 力、素早さ、装備から算出
---現在のHP、現在のMP: ゲーム再開時に最大値にする
---仲間の名前: 主人公の名前から生成

-現在の『復活の呪文』事情: 不思議のダンジョン
--ゲーム本編のセーブデータはメモリに保存するが、クエスト情報を渡したりする際には昔ながらのパスワード(復活の呪文)を導入することで、雑誌や攻略本にパスワードを記載したり、メールやウェブで交換したりといった具合に遊びが広がる

-nilog: 復活の呪文に使われる64文字と、ドラクエⅡのセーブデータに含まれる主な情報と容量。 (2011-10-11)
--http://www.nilab.info/nilog/?type=twitter&id=123600731281428480
--

-nilog: ファミコンのハードウェアの話の1章と、具体的なゲーム名を挙げたテクニックの4章がおもろ。 (2011-10-11)
--http://www.nilab.info/nilog/?type=twitter&id=123601896962404352
--

書籍情報


-書籍案内:ファミコンの驚くべき発想力 ―限界を突破する技術に学べ―|gihyo.jp … 技術評論社
--http://gihyo.jp/book/2010/978-4-7741-4429-0
--->目次
---> はじめに
--->
--->序章 RPGのパーティはなぜ4人?
--->ファミコンの特性がゲーム内容を決める!?
--->
---> キャラクタを表示する「スプライト」機能
---> パーティの制限を超える工夫
---> そして現在へ
--->
--->第1章 ファミコンのハードウェア
--->CPU
--->
---> 8ビットCPU
---> 8ビットを超える値の扱い
---> クロック周波数
--->
--->グラフィックス
--->
---> ゲーム用パソコンから現在へ
---> スプライト
---> BG
---> 解像度
---> 色数の削減
---> パレット
---> パターン数
--->
--->メモリ
--->
---> RAMの容量が少ない理由
---> RAMの使い方
---> スタック
---> ビデオRAMとスクロール
---> ROMの使い方
--->
--->サウンド
--->コントローラ
--->ROMカートリッジの拡張
--->
---> いろいろな機能の拡張
--->
--->ファミコンの性能
--->
---> 当時のパソコンとの比較
---> 現在のゲーム機との比較
--->
--->第2章 ファミコンに見るプログラム技術の基本
--->ゲームは60分の1秒を周期にして動く
--->
---> 画面を更新できる時間はわずか
---> VBlankの検出と割り込み
---> わずかな垂直帰線期間の活用
---> ダブルバッファ
---> ファミコンの時代と比べて
--->
--->ゲームプログラムの処理
--->6502アセンブリプログラミング
--->
---> レジスタ
---> 絞り込まれたアキュムレータ(Aレジスタ)の命令
---> わずか8ビット幅のインデックスレジスタ(X,Y)
---> スタックポインタ(S)も8ビット
---> 数少ない16ビット幅のプログラムカウンタ(PC)
--->
--->メモリアクセス
--->
---> 高速なゼロページ
--->
--->第3章 数字を自在に操る計算のテクニック
--->乗算と除算
--->
---> できるだけ使わない
---> シフト演算を使う
---> シフト演算と加算を組み合わせる
---> テーブルを使う
---> まじめに乗算する
---> まじめに除算する
---> 結局,乗算と除算はどうすべきか
--->
--->実数を使いたいとき
--->
---> 弾を飛ばす角度を限定する
---> DDAを使う
---> 固定小数点数を使う
--->
--->第4章 限界ギリギリに挑むワザと発想
--->データを小さくするための工夫
--->
---> 乱数を使ったステージ生成
---> 迷路生成のアルゴリズム
---> ファミコン版のステージが違うわけ
---> もしもステージをデータで持つとしたら
--->
--->パターンの節約
--->
---> スーパーマリオに見るパターン数の節約
---> ドラクエに見るパターン数の節約
---> スーパーマリオに見るパレット数の節約
--->
--->60分の1秒未満の表現に挑む
--->
---> サイクル数を制御する
---> サイクル数を削減するには
---> ラスタースクロールの難しさ
--->
--->セーブデータの保存
--->
---> バッテリーバックアップ
---> 復活の呪文
---> 保存されない情報
---> 現在のセーブデータ事情
---> 現在の復活の呪文事情
--->
--->第5章 ファミコンから現在へ
--->現代プログラミングの功罪
--->
---> オブジェクト指向プログラミングの功罪
---> ガベージコレクションの功罪
--->
--->ゲームの既成概念を打ち砕く
--->
---> 軽量安価なファミコン
---> 現在の複雑なプログラミング事情
---> ミドルウェアという諸刃の剣
---> ファミコンを超えて
--->
---> おわりに
---> 参考文献