こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

ファミコンゲームの品質確保

よろしくお願いします。

昔のゲームを遊んでみて
凄いと驚くことがありました。

スーパーマリオブラザーズ3(ファミコン)
ドラゴンクエスト4(ファミコン)
ファイナルファンタジーVI(スーパーファミコン)

古いゲームと侮ってはいけません。
ものすごいクオリティーのゲームソフトです。
今のゲーム機と比べたら、映像も音もオモチャっぽいですが、
実際に遊んでみて、感動しました。

調べてみると、この時代のゲームはアセンブラという
細かい数式を重ね合わせて作っていくようなのですが、
そんな複雑なものをどうやって作ったのでしょうか。

[質問]
アセンブラで作られた複雑なゲームソフトはどうやって
開発されたのでしょうか?

1.凄腕の職人が自分の頭で組み立ててプログラムを完成させる
2.多くの人が考えまくり、会議を繰り返してプログラムを完成させる
3.その他

どれでしょうか?
FFVIの飛空艇とか、マリオ3のグラフィックとか、
ドラクエ4のシステムとか、どうやって完成させたのか謎です。
品質を確保するには、第三者チェックも必要だと思いますが、
第三者がアセンブラコードを全部目視でチェックしたのでしょうか。

昔を知る方でないとわからないかもしれませんが、
気になります。どうか、教えてください。

投稿日時 - 2014-02-25 01:11:37

QNo.8489350

困ってます

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

回答(5)

私も昔、アセンブラでゲームを作っていました。現在では電子工作のマイコン回路で使う程度です。
結局、積み重ねなんですよね。
例えば、CPUによりますが基本的に機械語の表記を変えただけのアセンブラでは、足し算と引き算とビット操作しかできないので、これらの命令を組み合わせて、掛け算、割り算ができるプログラムを作る。これが出来たら、家宝として保存する。

浮動小数点演算もできないので、上記を組み合わせて、できるプログラムを作り、家宝に追加。

画面上の好きな座標に線や図形を描くプログラムも、上記の家宝を組み合わせて作り、さらに家宝に追加。
こうして積み重ねて作った家宝を組み合わせて、高級言語と同じことができるようにしていきます。

これは個人でやる場合ですが、チームで取り組む場合は家宝の共有ができます。

投稿日時 - 2014-02-25 12:53:58

ANo.4

・やりたいことに対してどのような処理が必要であるかを流れ図(フローチャート)に書き出す。
・上記についてどのような命令を与えれば実現できるかをアセンブリ言語で書き出す。

 フローチャートさえしっかりできていればあとは細かいブロックごとに分担できますので一人で全部やらなきゃいけないわけではないです。とはいえ、実際のプログラムにするときに腕の差も出ます。中には他の人が見てもどうしてこれで動くかわからないのに実際動いてしまうというのを書いてしまう人もいたといいます。

投稿日時 - 2014-02-25 11:41:07

ANo.3

*その他

8ビットの非力なCPUに負担が掛からないように「様々な工夫」がなされて開発されました。

ファミコンの時代には、まだマシンもコンパイラも性能が十分ではなく、高級言語よりもアセンブリ言語を使ってゲームを開発することが一般的でした。
アセンブリ言語でプログラムを書くのは大変ですが、限られたファミコンの性能を最大限に引き出すためには必要だったのです。

当時の8ビットCPUでは乗算や除算の命令がなかったり、あっても機能が部分的だったり、非常に遅かったりすることが一般的でした。

最も効果的なことは、乗算や除算を使わないようにプログラムを設計することです。
特にゲームプログラムでは、一見すると乗算や除算が必要になりそうな場面でも、これらを使わずに済むことがあります。

例えば連続して敵を倒すたびに、加算されるスコアが100.200.400・・・のように2倍になっていくゲームがあります。
このスコア計算には乗算が必要に見えますが、実は加算だけで実現できます。
「スコア」の他に「敵スコア」という値を記録するとします。
最初は「敵スコア」を100にしておきます。

「スコア」0
「敵スコア」100
敵を倒したら「スコア」に「敵スコア」を加算します。


次の敵を倒したら「敵スコア」に「敵スコア」自身を加算します。
すると敵スコアは2倍の200になります。

「スコア」100
「敵スコア」200
そして「スコア」に「敵スコア」を加算します。

「スコア」300
「敵スコア」200

同じ要領で増やしていきます。
このように乗算を使わずに加算だけで済むようなルールを設計することが、高速化のためには重要です。

ドルアーガの塔はステージが迷路状で60もあります。
このステージのデータをどのように表現するのかが問題になります。
実はこの作品では、ステージの形状をデータとしては持たずに「乱数」で生成しています。
続きは割愛させていただきます。

ゲームを制作する側でも、スプライトやスクロールのように処理が軽くて見栄えのする処理を、上手に使ってゲームを演出していました。
例えばスクロールなどは、普通にスクロールさせるだけでもよいのですが、加速度を使うとさらにダイナミックな表現になります。スーパーマリオが持つ独特のスピード感は、スクロールと加速度の組み合わせによって生み出されています。これは処理としては、CPUにもメモリにもあまり負担をかけません。


より詳しく知りたいのなら
書籍ISBNコード978-7741-4429-0
「ファミコンの驚くべき発想力」をお読みください。

投稿日時 - 2014-02-25 05:19:26

お礼

回答ありがとうございます。
この時代は制約が大きかったはずなので、制作者は様々な創意工夫を重ねていたと思います。

その工夫で作られた処理に問題(バグ)が無いことはどうやって確認していたんでしょうか?
全員で読み合わせしたのでしょうか。

投稿日時 - 2014-03-09 17:36:54

ANo.2

http://trendy.nikkeibp.co.jp/article/special/20081002/1019327/?P=1
ファミコンの開発秘話はここを、初期は独自の開発機材とNEC PC-8001でソフトを開発していたそうです。
http://faminfo.blog13.fc2.com/blog-entry-607.html#CM
昔のFFIIのCMで開発現場の映像がありました。
この頃の開発に使っていたのはNEC PC-9801ですね。
これでプログラムを作って開発用のカートリッジに書き込んだり、直接ファミコンのメモリに転送できる開発機材などを使っていたそうです。
現在ならネットで探せば自作する方法や情報も見つかります。
http://blog.kshoji.jp/2013/05/famicom-flashcart.html
http://hp.vector.co.jp/authors/VA042397/nes/index.html
確か昔ファミコンの同人ソフトというものもありましたね。
http://www.gizmodo.jp/2007/04/post_1372.html

投稿日時 - 2014-02-25 02:22:56

お礼

回答ありがとうございます。
参考ページもすごく参考になります。
FFVIの飛空艇とか、誰が考えて作ったんでしょうか。すごすぎるんですが。。。

投稿日時 - 2014-03-09 17:32:21

ANo.1

 この時代は出せば売れたので、潤沢な開発資金がありました。
 人材も投入できたので、意外と人海戦術でしたね。

 小さい会社だと、社員全員で徹夜でデバッグしてバグとりしてました。

 グラフィックは任天堂から提供されたツールでドット絵です。
 容量制限がキツイので、同じようなタイル模様を作って、背景に並べて、長いステージに見せる工夫をしてました。
 (自分が作ったのは、全く別のゲームですが)

 フォトショップなどの便利ツールが出たのは、その後の時代かと。

投稿日時 - 2014-02-25 02:13:33

お礼

回答ありがとうございます。
社員の方全員がアセンブラを理解していたのでしょうか?プログラムの構成とか処理方法も全員で考えていたのでしょうか?

投稿日時 - 2014-03-09 17:29:25

あなたにオススメの質問