Hatena::ブログ(Diary)

あまやどブログ

2008-05-18

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

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

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

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形式での出力も可能。ただ、使い方がちょっと変わっている(使いこなすにはファミコン音源の知識がある程度必要)のと、日本語の資料が少ないのがネック。使い方については「音楽できない子のファミコン音源」が参考になる。

参考にしたページ

OKIOKI 2008/05/19 02:04 懐かしいですね〜。(^^)

ファミリーコンピューターのハードウェアには、これに加えてラスターの操作機能が特筆としてありますね。応用として有名な”ラスタースクロール”や、色々なソフトでありきたりに使用されていますが、”ステータスを表示するのに、画面を分割する”テクニックとかありますね。

nano_001nano_001 2008/05/19 08:32 ステータス表示のために画面を分割するのにもラスター操作を使っていたんですか。ソフトウェアで分割していたものと思い込んでいたので驚きです。当時のプログラミングはハードウェアとそんなにも密接に関わっていたんですね。

少ないハードウェア資源でいろいろ工夫していて、ファミコンは奥が深いなぁと思いました。

あきよしあきよし 2008/11/20 09:46 「ファミコンの詳しい話」のページ作者です。
で、いくつかの正誤を…もう古い話題かも知れず申し訳ありませんが。

・スプライト、BG が「同時に256枚まで」と書いているのは、キャラクター定義数のことですね。
・シーンごとに切り替えられる、というのはファミコンの機能ではなく、ROMカセット側でICを搭載して対応していました。
・スクロールは縦でも横でも本体機能として1dot単位です。
・ディスクシステムは FM音源ではないそうです。(僕のページ最下部のコメント欄で指摘されました)

・ラスタースクロール機能は、ハードとしては持っていません。はソフトウェアによる分割で正しいです。
 ただし、「機能実現をサポートする仕組み」はハードで持っていました。

まぁ、「ファミコン風」のゲームを作る上では、シーンごとに絵が変えられたり、ラスタースクロールがあると考えてもよいと思います。
ハードの性能がどうかはともかく、「ゲーム作成の上では使えた」機能なので。

nano_001nano_001 2008/11/23 12:36 書き込みありがとうございます。
私はハードやらアセンブラやらには明るくないので
理解が不十分な点が多々あるとは感じておりました。
確かに古い記事ですが結構アクセスがあるので、ご指摘いただけるのはとてもありがたいです。
参考にして調べたうえで、記事を修正させていただきました。
ラスタースクロールについても記事中に追加してみました。

>・スプライト、BG が「同時に256枚まで」と書いているのは、キャラクター定義数のことですね。
はい、そのつもりで書きました……が、確かに誤解されやすい表現でしたね。
ところでWikipediaのファミリーコンピュータの項に「スプライトのキャラクターパターン(グラフィック)は
64種類定義できる。」とあったのですが、これは誤りでしょうかね(16x16サイズのキャラを64種類、の
つもりかもしれませんが……)。

>・シーンごとに切り替えられる、というのはファミコンの機能ではなく、ROMカセット側でICを搭載して
> 対応していました。
そうでしたか。誤解していました。

>・スクロールは縦でも横でも本体機能として1dot単位です。
本体に2画面分のバッファしかないため、初期のソフトでは縦か横にしかなめらかにスクロールできない、
という話と混同していました。

>・ディスクシステムは FM音源ではないそうです。(僕のページ最下部のコメント欄で指摘されました)
本当ですね。見落としていました。

>・ラスタースクロール機能は、ハードとしては持っていません。はソフトウェアによる分割で正しいです。
> ただし、「機能実現をサポートする仕組み」はハードで持っていました。
0番スプライトを使ってソフトウェアで疑似的にラスタースクロールを実装している、ということみたいですね。

野々宮ノノが好きなの♪野々宮ノノが好きなの♪ 2009/04/11 11:38 亀レスですんません。なんかずいぶんと懐かしいですね
ちょいとファミコンレベルでゲーム作ってみようと言うつもりで覗いてみたら、懐かしくて笑顔になってました!

ハードに密着って・・・ハードの動く速度に依存していないと98ゲーム時代の(私は持っていませんでしたが)
ベーシックゲームにも負けるような勢いでしたからね

70年代から設計に入れ込んで出てきたハードだったんでしょうけど
超全盛期の頃のソフトや、終盤期のソフトのことを思い出してきても
当事としてはかなりの先進性のあったハードだったんですね
でも今でいうと3CPUが乗ったような感じでしょうか?(誤解を招くかもしれませんが)
BG&スプライト を制御してるのも一応レジスタ持っててある意味独立してるのでCPUの一種です
コントローラー系を制御してるチップファミリもCPUの一種です
案外一番ちゃちなのはメインCPUなのかも(^^;
ふつうに、出来ることを出来るようにしか作らないハードだとカセットビジョンな時代でしたし(^^;

設計者のセンスがすばらしいですね。

nano_001nano_001 2009/04/13 06:34 ありがとうございます。
喜んでいただけて嬉しいです!
おっしゃるとおり、初期と後期でソフトの質は格段に進歩しましたね。
安価ながら極めてポテンシャルの高い、優れたハードだと思います。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/nano_001/20080518/1211120301