アルゴリズム

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

松浦健一郎・司 ゆき
技術評論社

はじめに

序章 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章 ファミコンから現在へ
現代プログラミングの功罪

  • オブジェクト指向プログラミングの功罪
  • ガベージコレクションの功罪

ゲームの既成概念を打ち砕く

  • 軽量安価なファミコン
  • 現在の複雑なプログラミング事情
  • ミドルウェアという諸刃の剣
  • ファミコンを超えて

おわりに
参考文献