高橋名人、「ファミコンでは16連射は無意味?」という疑問に答える 107
ストーリー by hylom
なるほど 部門より
なるほど 部門より
あるAnonymous Coward 曰く、
元ハドソンの高橋名人が、「ファミコンは秒間15フレームだったので1秒間16連射は無意味」という噂に対し自身のブログで答えている。
これによると、まず「ファミコンは秒間15フレーム」という点については間違っているという。ただし、「スターフォース」については1秒間に30回の頻度でボタンの状態を検出していたため、1秒間に15回以上のボタン連打は無意味となっていたそうだ。しかし、「スターソルジャー」についてはこの制限はなくなっているそうで、1秒間に16連射が可能になっているという(高橋名人によると、何連射できるかは分からないとのこと)。それ以外のゲームについてはスターソルジャーと同様、16連射以上が可能になっているという。
ちなみに、スターソルジャーで高橋名人が連射している姿を撮影した映画フィルムから数えたところ、10秒間で174発、つまり毎秒17.4連射を行っていたことが判明したそうだ。
営業センス (スコア:3, 興味深い)
「16の方がコンピュータ用語にも合っているし」(元ブログより)
このあたりの発想はさすがです。
Re:営業センス (スコア:1)
そういや当時16ビットっていうとものすごく高性能っていうイメージあったなあ
Re:営業センス (スコア:2)
誰がどう感じるかは千差万別なのだが、例えば……
じゅう-ろく
の「ろく」は音が清音二文字なのでキレイで安定感があるが、
じゅう-ご
は濁音一文字。
じゅう-よん
は「ん」で終わり、特別な感がある。
もちろん、16は2^4なので1までキレイに割れるが、14、15や17、18は奇数か、一度割るだけで奇数。奇数よりは偶数の方が安定感がある。
Re:営業センス (スコア:1)
8:うん
16:うんうん
32:おお
64:ほほお
128:ははは
256:うおぉ
512:ふむ
1024:ほー
2048:う〜ん
4096:ん?
8192:・・・
16384:・・・うん
32768:ほっほっほ
65536:っしゃああああああ
そんな感じ。適当だけど。
Re:営業センス (スコア:1)
4096:FM-77AV
だまされた! (スコア:2)
16連射じゃなく、17.4連射だったんじゃないか
おそるべし (スコア:0)
高橋名人!
Re: (スコア:0)
バネによるアシストが1割程度あったのかもしれません。
#そもそもの「15フレームしか出ない」ってのもどっから出てきたんだか…
Re:だまされた! (スコア:2, 興味深い)
>#そもそもの「15フレームしか出ない」ってのもどっから出てきたんだか…
件のブログにそれらしい理由が書いてある。
Re:だまされた! (スコア:2)
当時のファミコンの場合、60回にしても、全く意味がありませんでした。
だって、そんなに精度を要求する様なゲームではなかったですからね。
意味がないことはなくて、例えばファミコンの流行が始まったころの任天堂とハドソンのゲームを見比べてみれば、動きのなめらかさが明らかに違います。アーケードゲームのような映像芸術では、動画の品質が高いことには大きな意味があります。
で、どうして30回にしてしまうかというと、これはプログラマの腕が原因です。
ゲームの処理が高負荷になってフレーム内に処理が収まらないと、さらに次のフレームを待ってから処理を続ける、いわゆるフレーム落ちが発生しますが、プログラマに短いステップ数で処理を記述する技術がないと、このフレーム落ちが頻繁に発生することになります。早くなったり遅くなったりすると明らかに異常に見えるので、最初から2フレームかけて1ステップ分処理する、つまりフレームが落ちたままの状態にして回避するわけです。
当時8ビットCPUでメジャーなのはインテル系のZ80などでしたから、ファミコンの6502に不慣れなプログラマが担当したであろうことも原因として推測できます。
Re:だまされた! (スコア:2, 興味深い)
「ファミコンの流行が始まったころ」のハドソンのゲームはおそらくロードランナーを指していると思いますが、あれは「元のAppleII版がそうだから」というのが大きいでしょう。
(ファミコン版はブローダーバンドから提供を受けたAppleII版のアセンブラソースを元に制作されたそうです)
FDと48KB RAMを前提としたゲームをファミコンの2KB RAM/32KB ROMに収めたのは十分に高い技術力だと思いますが。
Re:だまされた! (スコア:5, 参考になる)
NTSCの企画では512本の水平走査線を毎秒30回表示しますが、これを順番とおりにやると人間の目にはちらついて見えるので、一回の垂直走査をさらに二回(秒間60回)に分け、最初は奇数番目の、次は偶数番目の走査線を描くようにしています。
ファミコンの場合はこれを簡略化し、奇数回と偶数回に同一の内容を表示して、縦の解像度を半分にしています。
よって、画面に映像が映される回数は毎秒60回です。
Re:だまされた! (スコア:1)
垂直同期割り込み周期関係かな?
割り込みハンドラでボタン状態をポーリングすると秒間フレーム数の半分しかON/OFFできないことになる。
NTSCの垂直同期は約60Hzだから最大で秒間30発撃てることになるけど、表示は30pfsだから毎フレームで打つと弾がつながってしまうので間引いたのかも。
Re:だまされた! (スコア:1)
バネによるアシストが1割程度あったのかもしれません。
「”バネ入れてて云々で逮捕”のデマが流れたあとで実際にパッドにバネ仕込んでやってみたけど反発が強くなりすぎて駄目だった」
ってなんかの時に言ってたような・・・
Re: (スコア:0)
あの夏の日、スイカを割るにはまだまだ鍛錬が足りなかった・・・
もうずいぶん鈍ってしまったが、今晩アワビで練習するか。
サンプリングの問題 (スコア:2)
必要なのは正確さで、ちょっとでもタイミングがずれると抜けが出ますし、秒間16連射とか秒間17連射だとどんなに正確でも同期が取れなくなって所々抜けます。
そういう抜けが出ないような、16回押したら16回と認識されるような実装を作り込んだという制作秘話が面白そうです。
Re:サンプリングの問題 (スコア:2, 興味深い)
そもそも15FPSはどこの話なのかが問題。
描画処理の話しなら入力とは別だから全く無関係。
mainループが15FPSになるように調整しているなら関係してくるが。
例えば昔のPCゲームとかするとFPS限界を設定してないのがあったりして、PCスペックの限界までFPSが上がってしまうのがある。
200FPSとかでたりで。
で、そういうゲームにFPSリミットをかけて60FPSにしたからって内部的には処理速度が大幅に余裕があるので制限掛ける前の200FPSで回ってたりする。
ただ、描画部分だけは60FPSで回るように同期をとって表示するだけで。
ついでに必ずしも入力待ちをしている時に入力をするといったこともないので
連打は早ければ早いだけ良い。
Re:サンプリングの問題 (スコア:2, 参考になる)
ハードウェアが固定のゲーム機だと、メインループの周期をVSYNCに合わせると言うのは一般的です。
ただ、たとえばメインループが16msで回っていても、I/O監視が16msかということはそんなことはなく、
もっと高速な周期の割りこみで監視する(チャタリング除去とか、反応時間が短くてこの周期では拾えないとか言う時のために)
というのもよくやる実装でしたから、
「メインループが30fpsだからON/OFF判定で原理的に15ショット/sしか読めない」
ことはないかと思います。
高橋さんが言ってるスターソルジャー以降の実装ではそういうことをやってたんじゃないでしょうか。
Re:サンプリングの問題 (スコア:2)
チャタリング除去まで考えた上で、単純にVSYNCごとに状態読み込みしていました。
チャタリングの持続時間が最大数ミリ秒とのことなので、16msの間隔で読めば影響をなくすことができます。
あと、キューに入れたらリアルタイム性が損なわれます。必要となるのは、先行入力が可能となった対戦格闘ゲームからではないでしょうか。
それはPCの話 (スコア:1)
ファミコンだとVRAMのバスをCPUとPPUで奪い合うので、CPU側からVRAMに書き込めるのは垂直帰線の間だけ。
DMAなんてイキなものもなく、横1ラインぐらいのBG書き換えが限度だった筈。
なのでゲームの作りもV-Syncで描画→次フレーム作成→ブランキング待ちのパターンがセオリーだったな。
次のブランキングまでにフレーム作成が終わらない場合が、いわゆる「処理落ち」。
Re:それはPCの話 (スコア:1)
> 横1ラインぐらいのBG書き換えが限度だった筈
というかファミコン世代はそもそもラインバッファ方式ですから、横1ラインずつしか書き換えないハードウェアですね。
これは水平帰線時間内の話なのでその間に書き換えきれない場合スプライトの描画が消えたりする。
Re:それはPCの話 (スコア:1)
ファミコンはPPUのポートにアドレスを叩き、あとはデータを叩く毎に勝手にアドレスがインクリメントされる単純なPIOですな。
加算値は縦用に+32にも設定できた筈。これを垂直帰線の間に「できるだけ」やる感じ。
垂直帰線内でスプライトDMAとどっちを優先するかは実装によるだろうけれど、普通はスプライトDMAでしょう。
水平帰線内はなんもやらない。0番スプライトの衝突を使って1フレーム1回なら拾えなくはないけれど。
スプライトが8キャラ分以下しか横並びできないのはハードウェアの制限。
点滅するのは、上記の場合に消えたままになるスプライトが出ないように、フレーム毎に描画するスプライトを変更しているため。
Re:サンプリングの問題 (スコア:1)
6502だとかの8bitCPUには、かけ算器は内蔵してませんので、
「二乗計算」が必要になる「円判定」は非常に計算が重いです。
だから、当時としては、衝突判定は「矩形の重なり」で行うぐらいがせいぜいだったんですね。
Re:サンプリングの問題 (スコア:2, すばらしい洞察)
当時のゲームに同じパルスを送り込んでも、Aというゲームでは綺麗に連射されて、Bというゲームではまだらな連打になったり、ほとんど押下を拾わなくなったり。
すこしパルスをずらすとまた違う反応があって、子供心に実装の違いを肌で感じていたもんです。
Re:サンプリングの問題 (スコア:2, 興味深い)
なので、後期にはI/Oポートをポーリングしたときの信号を拾って連打する、同期型の連打パッドが出てましたな。
各々のソフトの最高速度で連打できるというシロモノ。
Re: (スコア:0)
V-Syncとは別に、高サンプリングレートでパッドの入力履歴をリングバッファに記録する処理を走らせるしか。
Re:サンプリングの問題 (スコア:4, 参考になる)
ファミコンのコントローラ(パッド)はパラレルではなくシリアルなので、サンプリングレートはどうしてもクロックに依存します。それ以上のサンプリングはできません。
連射回路を後づけした場合、ON/OFFを1クロックずつ繰り返した場合にはソフトによっては読みこぼしがあるので、ONを2クロック、OFFを1クロックで回す設計のほうが安定していました。
その場合、迷宮組曲等のカウントでたしか21~22連射程度だったことから、V-syncと同じ60Hz程度のクロックが流れていたと想像しています。
(おそらく「1秒(10秒)」の区切りが正確ではなく若干長かった?)
つまり、ハード的には各ボタンを毎秒60回検出して最高30連射までですが、どの程度までを認識するかはソフトの実装次第です。
ここからは感覚的な話ですが、ゲーマーなら 60/30/15fps の区別は出来ていて、スターフォースでは描画も入力も60Hzだったような記憶があります。間違っていたらすみません。
実際、私の約14連射程度では取りこぼしなく、それ以上が要求される局面もありました。
一方フレームレートが遅いゲームの例を挙げると1942やエグゼドエグゼス等です。
私の知る限りではギャラガの応答が早く、A/Bボタンを区別して検出しているので、これに限ってはもしかしたら合計60連射も可能だったかもしれません。
Re:サンプリングの問題 (スコア:1)
>ファミコンのコントローラ(パッド)はパラレルではなくシリアルなので、サンプリングレートはどうしてもクロックに依存します。それ以上のサンプリングはできません。
ゲームとしてのコントローラ状態のサンプリング(ソフトの実装に強く依存する)と、コントローラからの読み取り方式(ソフトの実装にちょっとは依存する)は別の話です。
他の処理を考慮しないならば、ファミコンでも秒間1万回程度のコントローラ状態の読込は十分に可能なはずです。
#ソフトウェアでシリアルに読み込む必要がある分、ポートを1回読むだけでコントローラ1の全情報をとれるSG-1000等に比べれば不利ですが。
Re:60連射? (スコア:1)
ボタンが区別されていなければその通り。
ソフトの実装次第ですが、機能の重複する2ボタンが個別に認識されているものは逆位相で交互に押すようにすると、
押しっぱなしというではなく全フレームでmake/breakが認識されるものがあります。
確実にそうなっているのは、例えばアーケードのテトリス。
ファミコンのギャラガはボタンが同じ機能かつ区別されているのは間違いない(一方を押したまま他方を連射可能)のですが、
どの程度まで連射を受け付ける仕様なのかは試したことがないのでわかりません。
Re:サンプリングの問題 (スコア:2, 興味深い)
迷宮組曲なんかはそうやったんじゃないかって元記事で書かれてますね。
Re:サンプリングの問題 (スコア:1)
Re:サンプリングの問題 (スコア:2)
じゃないとPAL圏に輸出した時におかしくなっちゃう
Re:サンプリングの問題 (スコア:2, 興味深い)
そういう実装はほとんどの場合していません。PAL版では50FPSのゲームにするのです。
60FPSのゲームをそのまま50FPSで動かすとキャラの移動量が5/6になるので、6/6になるように調整してやるのです。
でもNTSC→PALへの移植なんかだと面倒なので、5フレームに1回キャラの移動処理を余計に回していました。
なんとかなるもんです。
Re: (スコア:0)
炎のコマでいいんじゃね
Re: (スコア:0)
水魚のポーズ!
限界を超えて・・・ (スコア:2, オフトピック)
ファミコンのCPUクロックより早い周期で連射できれば弾が消せるかもしれませんね。:)
如何なる内容であろうとACでの書き込みは一切無視します。
Re: (スコア:0)
つまんね
Re: (スコア:0)
それは何の意味もないです。
って、本文読んでないのかな・・・。
Re: (スコア:0)
Re: (スコア:0)
なんか無料公開中 [srad.jp]のようだし教養として読んでおくべきだな
Re: (スコア:0)
タイトルだけ見て、「炎のコマ」とか「真空ハリケーン打ち」とか真っ先に連想しました。
何の意味も無いのは百も承知なんだけどさ。
Re: (スコア:0)
エレクトリックサンダーなんかは可能性としてはアリだと思いますがね。
でも、制御して自由にデータを押し込むことはできないだろうなと思います。
かといって、プスっと特定の場所にコネクタ挿して
ICE(インサーキットエミュレータ)アタック!とかだったら
それはそれでゲームしてるというよりチートくさいですが。
Re: (スコア:0)
40代じゃないと詳しく知らないでしょ
38の俺でも既に過去の古くさい漫画として名前を知っているだけ
Re: (スコア:0)
半可通ディスるオレくんかっけー
畑違い (スコア:2)
元営業の人でも、こういうの書くんだね。
Re:畑違い (スコア:2, 参考になる)
入社当時はバグ出しとか修正とかで開発にも駆り出されていたらしいよ。
(当時レベルの)基本的な知識は持ってるんじゃないのかな。
バグ出し部隊の夜は遅い……… (スコア:5, おもしろおかしい)
このマージャンソフト、「緑一色」の判定にバグがあるようなので、緑一色出して。
………と言われたことがあります(´・ω・`)
Re:畑違い (スコア:1)
昔のゲーム業界だからそれほど専門が分かれてなかったという可能性も充分考えられますな。
LIVE-GON(リベゴン)
Re:畑違い (スコア:1)
かなりのとこまで触ってたり商品開発にかかわってたりすることが少なくなかったのでは。
(表に大きく出てくる機会の多い人はあまりいなかったかもしれないけど)
Re:スプライト表示の関係で (スコア:1)
スターソルジャーは音だけ出てたなんてことは無かったですよ。
24連射のホリコマンダー使った時、「ブブブッ! ブブブッ! 」って感じで弾と音が出てました。
TomOne