自作ドラクエの作成に取り掛かる為、まずは素材集めから始めた。
ドラクエの、というかファミコンの仕様は実にシンプル。
縦16ドット×横16ドットで1つあたり最大4色使える『チップ』と呼ばれるパターンの集合体により、ゲーム画面を表現している。
この1チップあたりの色数は4色を超えられないが、チップ毎の色は個別に設定できる。
ドラクエのキャラクタパターンは、前後左右の4パターン×2パターン(動いている様に見せる為)、それに加えて前向きを左に向けたものと、右に向けたもので2パターン。
つまりこれで合計10パターンとなり、これを組み合わせる事でキャラクタ一人一人を多彩に表現している。
ドラクエ1の時代は俗に『カニ歩き』と呼ばれた、プレイヤーが縦横どこに動こうがキャラクタは常に画面を向いている、と言うのは、ファミコンの仕様的な制限を考えると仕方無いのかなと思える。
ファミコンはメモリ容量との戦いで、恐らくプログラマ泣かせのプラットホームであったんだろうと予想する。
いかに少ない容量でやりたい事を実現するか、キャラクタチップ数を少なくしたり、ドラクエIIIの様にタイトル画面が無く背景真っ暗の起動画面にするとか、プログラマ視点でプレイしてみると色々と見えてくるものがある。
※一部のひらがなとカタカナを共用していたり(りとリとか)、色々考えるなと感心する。
しかも機械語寄り、というかバイナリそのものをいじる様な言語なので、可読性が悪いコードで作ってたんじゃないかな?
それこそ職人技みたいな感じで、作った人以外分からないような。
スクエニあたり、ドラクエIのソースコードとか公開してくれないかなぁ...
見ても分からないだろうけど。
話がそれたので戻す。
昔の先人達のテクニックに驚かされながらも素材を揃えつつ、まずは最初の難関にぶち当たる。
それはマップスクロール。
ドラクエ世界、というか全てのロールプレイングゲームでは、プレイヤーが上下左右に操作すると自キャラクタを中心として画面全体が動く。
これをマップスクロールと呼ぶが、この仕様がほとんど搭載されている。
ファミコンにはラスタースクロールと呼ばれる機能が付いており、テレビ画面の描画における走査タイミング信号に同期して画面更新する仕組みとなっている。
この走査タイミングは人の目では見えない部分で、そのタイミング内で画面更新を繰り返す事で、スムーズなマップスクロールを実現している。
よく60fpsとか呼ばれる数値を聞いた事があるかもしれないが、あれが画面のリフレッシュレートと呼ばれるもので、1秒間に60回画面更新する事を全くズレずに更新できる事を意味する。
これがファミコンであればハードウェアレベル、WindowsプログラムであればDirectXにより、プログラマが意識しなくても実装可能だが、私は前回話した通りDirectXを使わない選択をしたのでそうもいかない。
この部分をどうするか悩んだが、当時、そんな技術も知識も無いし、走査タイミング?リフレッシュレート?何それ?状態だったので、何故こんなに画面がカクカクするのだろうかと分からなかった。
更にVB6という言語はリアルタイム性に欠ける為、それもうまくいかなった要因でもある。
ただ、20年前の私はそんな事も分からず、
「このまま進めて後で考えるか」
と言う結論を出し、続行する事にした。
この選択が終わりの始まりだったと気付かずに...
次回に続く。