ファミコン風ゲーム製作のための資料まとめ

ファミコン風のゲームを作ってみたいな、と思ったので、ファミコンの機能に関する資料を調べてまとめてみます。あまり詳細なことは気にせず、それっぽいゲームを作れる程度の情報に絞ります。

※ハードに詳しくない人間がちょっと調べてみたという程度なので間違いがあるかもしれません。記事の最下部に参考にしたページへのリンクがあるので、万全を期すならそちらも参照願います。

2008-11-22追記)コメント欄で正誤のご指摘をいただいたので、そちらを参考に少し修正しました。

グラフィック

  • 表示画素数は横256ドットx縦224ドット。
    • 内部的には縦240ラインだが、上下8ドットはテレビに写らない。
  • 使用可能な色は52色。
    • RGBではないので、その52色のはっきりした色は不明。そもそもテレビの設定にもよるので、自分で納得のいく配色を探すしかない→google:ファミコン パレット
    • 最大同時発色数は25色だが、いろいろややこしい制限がある(後述)。
  • 描画はスプライト(キャラクターなど)とBG(背景)の2系統ある。
    • スプライトは1タイル8x8ドット。
      • 256枚のタイルを定義できる。多くのステージがあるアクションゲームなどではシーンごとにROMカセット側で切り替えることでそれ以上のタイルを使っている。
      • 64枚まで同時に表示可能。ただし横1列に8枚まで(多くのソフトでは、それ以上並んだときでも何とか表示させるために、優先度を高速に切り替えて交互に表示している。これがちらつきの正体)。つまり、標準的な16x16ドットのキャラは2x2タイルで構成されているので、全部で16体、横1列に4体まで同時に表示できる。
      • BGの手前にも後ろにも表示できる。蛇足ですが、マリオ3で白いパネルの上でしゃがみ続けると裏側に行けるのを思い出しました。
      • 垂直・水平に反転描画できる。
    • BGは1タイル8x8ドット。
      • 同時に256枚まで定義できる。スプライトと同じく、シーンごとにROMカセット側で切り替えることでそれ以上のタイルを使っている。
      • スプライトと違って自由に配置できず、8ドット単位で並べることしかできない(たとえば、このタイルだけ2ドット右にずらそう、というようなことはできない)。RPGツクールのマップチップのようなイメージ。
      • スプライトでは表示可能枚数の制限に引っかかるような巨大なキャラは、BGとして描画する。
      • 2画面分のつながった画面バッファを持ち、これを縦に並べるか横に並べるかを選ぶことで縦スクロールするか横スクロールするかを選択する(「NES研究室」の図を参照してもらえるとわかりやすい)。のちにROMカセット側にRAMを用意することで4画面分のバッファを持つことができるようになり、縦横両方にスクロールできるようになったらしい。
      • ソフトウェアで疑似的にラスタースクロールを実装することができた。ドラクエ旅の扉やレースゲームの道路などの横向きにうねうねずらす効果や、グラディウスなどで横スクロールする部分とスクロールしないステータス部分を分割する目的などに使われている。
  • スプライトとBGに各4パレット使える。
    • 1パレットは4色。ただし4色のうち1色は透明色なので、実質3色。その3色を前述した52色の中から選ぶ。
      • パレット中の色はいつでも選びなおすことができる。フェードアウトやスプライトの点滅などはパレット中の色を変更して実現しているのかな。
    • スプライトは、画面に置くタイル1枚ごとに、用意した4つのパレットから1つを選んで適用する。BGは、画面に置くタイル2x2枚(つまり16x16ドット)ごとにしかパレットを選べない。
      • 同じタイルを違うパレットで表示することで、いわゆる色違いキャラになる。たとえば、スーパーマリオブラザーズの草と雲は同じタイルのパレットを変えただけ。
    • 背景色も指定できる。
    • まとめると、(透明色を除けば)スプライトは4*3=12色、BGも4*3=12色、背景色が1色で、1画面中に計25色を同時に発色できる。
      • 強引な技として、テレビに画面を描画している最中にパレットを変更することで無理やり26色以上使うこともできる。
    • 具体例としてこことかこことかが参考になる。

サウンド

  • 矩形波2ch、擬似三角波1ch、ノイズ1ch、DPCM1chの計5音同時に発音できる。
    • 矩形波は主にメロディーに使われる。
      • デューティ比を12.5%、25%、50%、75に変更することで音色を変えられる。ただし25%と75%は実質同じ音。
      • 音量を16段階に変更可能。発音中にも変更可能。
      • もちろん周波数(音の高さ)も変えられる。発音中にも変更可能。
    • 擬似三角波は主にベースに使われる。
      • 正確な三角波ではなく、ピークからピークが15段階の階段状になっているギザギザした三角波三角波にノイズがのったような独特の音。
      • 音量固定。ただしバグとも言える特殊な方法で、ノイズとDPCMと共に変更できるらしい。
      • もちろん周波数も変えられる。
    • ノイズは主に効果音(爆発等)やBGMのドラムに使われる。
      • 仕組みがよく分からなかったけど、長周期ノイズと短周期ノイズの2種類があって、さらに周波数も変えられる。
      • 音量を16段階に変更可能。発音中にも変更可能。
    • DPCMはサンプリングした任意の波形を鳴らすことができるが、メモリを食いすぎるのでめったに使われていない。使用例はスパルタンXのボスの笑い声や、マリオ3のBGMのティンパニらしき打楽器など。
  • 拡張チップを使って、ファミコンの限界を超える音を出すソフトもある。ギミック!とかラグランジュポイントとか。
  • ディスクシステムFDS拡張音源なるものを内蔵していて、独特な音色を出せる。FM音源的な位相変調が可能、パルス幅変調により出力波形を生成、などの特徴があるらしい。
  • YMCK Official Web Site」でファミコンサウンドを再現したVSTiプラグインが配布されている。擬似三角波も再現するなど高い再現度らしい。
  • ピストンコラージュ」も便利。wave形式のファイルを読み込んで音源として使える作曲ソフト。完成した曲はwaveファイルに書き出すこともできるし、同梱の再生用DLLを使えばピスコラのファイルを直接再生することもできる。
  • FamiTracker」を使えばファミコンサウンドをほぼ完璧に再現できる。wave形式のほか、NSF形式での出力も可能。ただ、使い方がちょっと変わっている(使いこなすにはファミコン音源の知識がある程度必要)のと、日本語の資料が少ないのがネック。使い方については「音楽できない子のファミコン音源」が参考になる。