CDのアクセスタイムを演出に使ったコト
うーぱーぐらふぃっくすって同人ハードのデモに『イースⅠ・Ⅱ』が使われていた。
たまたまRTで流れてきて、それを見てエミュレータでプレイされると実機とタイミングが違い、結果として演出が壊れていて
( ゚∀゚)・∵. グハッ!!
となったので、チョロっと書いておきたい。
さて、話は(信じられないことに)28年前に北海道ハドソンで『イースⅠ・Ⅱ』を作っていたときになる。
『イースⅠ・Ⅱ』 のビジュアル、今でいうムービーのようなものはだいたいゲームの中で出てくる順に作っていた。
- タイトルパート(3-6月頃)
- オープニング(6-8月ごろ)
- インターミッション(7-9月頃・これは1と2の間に入るデモ。パソコンのイース2のオープニング)
- エンディング(9-10月頃)
- スタッフロール(10月頭)
と、まあこんな順だ。
全部最後でコマゴマと修正したりいじったりはしていたけれど、基本的な作業はこんな感じだった。
ところで当時はサンプリングされた圧縮音源を鳴らしながら、データを読み込む、今でいうストリーミングのようなものはカケラもない。
だからCDDA(CD Digital Audioの略。いわゆるCD音源)を鳴らしてアニメやったりゲームやったりするのはメモリの端から端までデータを乗っけて、音に合わせてプログラムされた紙芝居をやったり、それともゲームを遊んでもらう息止め競争のようなもので、どう考えてもマトモとは思えない作り方だった。
だけど、CDROMの絶対的な強みはCDDAと掃いて捨てるほどある容量で、弱点はクソ遅いアクセスだ。
そしてアクセスは出来るだけない方がいいのだから、この作り方は絶対に間違ってないと思っていた。
まあ、そんな方針を立てて作っていたタイトルパートは、64KB(メインメモリ)+64KB(ADPCM)のメモリに全データを目いっぱいに載せてヒイヒイ言いながら作っていたのだけど、これが6月末ぐらいに出来(6/28版ではほぼ出来ている)、まあいろいろ工夫するとなんとかなった。
そして、次にオープニングを作り始めたとき、結構メモリきついと(いやずっとキツいと思ってたけど)思い、キレいだったはずのメインコードを縮めまくって、ヒイヒイ言いっていた。
最後にはあまりにメモリがなくて、ほとんど一個一個のアニメーションに専用のコードになっていったので、なんのために最初キレイいなシステムを作ったんだよと思ってしまうが、それはともかく、オープニングですでに不吉な予感がしていたけど、インターミッションは最初の二つとはケタの違う難易度で「もうムリ!」な代物だった。
さて、インターミッションは3つのパートにわかれている。
- A)「ダームの塔が沈黙しました」ってテキストで始まるダレスとダームの会話のシーン
- B)ダームの塔からイースにアドルが飛んでいくメイン部分
- C)超有名なデッカイリリアのシーン
と、こうなっていたのだけど、ともかくBパートが何をどうやっても入らない。
いろんなツールを作ってあらゆる手で圧縮していたが、なにをどうやってもメモリが足りない。1キロや2キロなら努力をする気にもなるが(世の中1キロぐらいまでなら根性据えて詰めまくればなんとかなるのである)、10キロバイト単位で足りないのだから、どこの誰がどう見たってお手上げだ。
それで本当に頭を抱えて、山根にカット削ってくれって泣きつこうか考えていたのだけど、そのとき、まだ使ってないメモリがあることに気が付いた。
PCエンジンのVRAMは64KBあるのだけど、Bパートがスタートするとき、ここを1バイトも使っていない!。
正確には空いているけれど使う方法はないと思っていたけれど、以下のプロセスを使えば、ほぼまるまる絵に使うことが出来ると気が付いたのだ。
- Aパートが終わる。VRAMはがら空きになる。
- 空いたVRAMにBパートの最初の部分を目いっぱいまで詰める。
- 最初の1カットを表示する。
- CDにアクセスしてデータをメインメモリとADPCMにロードする。これでVRAM,ADPCM,メインメモリの全部に絵のデータが載る。
- CDオーディオスタート
- 曲が鳴りだしたら、Bパート開始
なんせBATを除いても約60KBのメモリだ、軽く3カットは入る(だろう)。これなら入るようになるのではないか! と気が付いたときは、心の底から嬉しかった。
では、どうして(3)で最初の1カットを表示するのか?
人間は黒い何もない画面だと不安になるけれど、絵があれば安心できるしロードとシークの時間を演出に出来るからだ。
なんで演出に出来るのか?
上を見てもらえばわかるが、Bパートの最初のシーンは日が昇る寸前のダームの塔のカットから始まり、山の向こうから朝の光がキラーンと光るってシーンだ。だからCDROMのロードとシークタイムを使って、夜明け前の静けさを演出してるフリして、ロードしていたわけだ。
ところがハードウェアテクノロジーの進歩は素晴らしく、エミュレータやいろんなものでPCエンジンは遊べるようになり、なんとCDROMのシークタイムがなくなってしまった(;´Д`)
うーぱーぐらふぃっくすのリンクの動画の1:27あたりから見ていたければわかるが、表示されるやいなや、全く止まらず滑らかに音楽が鳴り始める。
技術の進歩ってことでしょうがないと思うが、30年前のハードウェアでは3~5秒ぐらい止まって、夜明けの静けさのタメの演出になっていたんだよ! と書いておきたい。
あと、天外Ⅱで根の一族の登場シーンで、山車が橋の上で止まって静かになるところでも同じことをやっているのだけど、これまたエミュレータでは1秒も止まらない。
「いや、ここは浦上君と打ち合わせて、ここでデータロードとシークが入って、タメになるように作ってあるんだよ!」って悲鳴をあげたくなってしまう。
まあエミュレータで全部実機と同じ速度でやると「なんでやねん」ってぐらい遅いし、シークタイムはゼロの方が基本的にはストレスがなくなるのだけど、こんな風にシークタイムを演出に使う人もいたんですよ、そしてそーいう人が見ると ( ゚∀゚)・∵. グハッ!! となるのでありました、とそんな話であった。
2件のコメント
コメントは現在停止中です。
AGENT: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0
細かい点で恐縮ですが、冒頭の記載について。
この記述ではうーぱーぐらふぃっくすがPC-Engineのソフトウェアベース互換機※の一種と読めそうです。
実際にはPC-Engineの拡張端子に接続する720p出力化&CD-ROM^2ドライブエミュレーターですので、「CD-ROMドライブエミュレーター」とするか、バーチャルコンソールなどの環境も含める意図なら「CD-ROMドライブエミュレーターやエミュレーター」とでもすると明瞭になるとかと存じます。
(CD-ROMドライブの動作を別のメディアにデーターを置くことで模擬しているのでエミュレーターであるのは間違いありませんので元「それを見てエミュレータでプレイされると実機と~」の記載でも間違いではないのですが)
ただ、CD-ROMドライブもシーク時間に多少の前後はありますし、開発用のCD-ROMエミュレーターで実行したときにも同じ問題が発生するでしょうから、演出にこだわるなら何らかのカウンターやタイマーで最低のタイミングを保障すべきだったのでしょうね。
(天外でもイースでもそのコードの入るスペースがあったかは別として)
細かいついでにもう一点。
「オープニング(6-8月ごろ)」だけ非ASCIIになっており、頃が平仮名。
「7-9月頃」ではハイフンが非ASCIIになっています。
AGENT: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36
良移植との評判の高いDS版天外2も、上記のシーンに
ついては残念ながら「タメ」がありませんでしたね。
全体的に丁寧に移植されてたのでなおさら残念な所では
ありました。