今回は如何にして32KB+8KBのメモリ空間に、ゲームのプログラムとデータを詰め込んだのかというお話です。題して、メモリ省力化の巻~。


  • 夢と現実
実は最初は本当は無謀にもイースⅡばりの重ね合わせが出来ないか検討していました。
イースⅡ
イースⅡ ©1988 NIHON FALCOM CORPORATION

結局、こんな高度な重ね合わせは(当然?)出来ませんでした。速度的にもギリ可能な範囲で、技術的にも問題はなく、立ちはだかったのはメモリ不足です。いや、これは初期設計段階に気が付くべきでした。重ね合わせには ANDマスク情報が必要となります。簡単な事なのですが、マスクデータを用意すれば画像データは単純に 2倍に膨れ上がります。消費メモリの試算をしてみます。


1文字8バイトのPCG定義データ
4×4キャラがキャラ4体×上下左右×8パターン。

8×(4×4)×4×4×8 = 16KB

PC-8001 における16KBの意味が分かりますよね?
ここにANDマスクデータを入れて、さらにドンッ!


32KB!!

はい、あふれた!
完全にあふれたよー!! ※ 錯乱状態


さらに、バックバッファ 3KBでしょ?マップデータも当然必要ですよね?タイトルはかっちょ良いの入れたいよねー!サウンドも豪華なのが欲しいよねー!!


淡い夢だった…、胸をはなれないぃ…。さて、現実に戻りましょう。まずは重ね合わせを断念して、ANDマスクは切り捨てます。これで16KBになります。VRAMとバックバッファは合わせて6KBなので、トータル22KB。…でもね、まだ攻撃モーションやダメージ等の演出パターンを全く入れてないんだよね、これ。

追加しよう。

  1. 立ち止まっている
  2. ダメージ
  3. パワーアップ(上下左右)
  4. 攻撃(上下左右)

最低でもこれは要ります。すると… 8byte×(4×4)キャラ×10p×8切替 = 10KB
既に 22KB 使っていましたので、

22KB + 10KB = 32KB

はい、出ました、禁断のワード、さんじゅうにきろばいとぉ!
さてどうする?大検討会の始まりです。
母の日 プレゼント 内祝い お返し ギフト 【 牛松 本店 】 松阪牛 特選 ハンバーグ 160g × 5個 【 高級 桐箱入 】 お祝い お祝い返し お礼【広告】

  • 省メモリのために妥協
スタッフと相談した結果、まずデザイン側からの提案で以下の 8パターン切り替え
my00my01my02my03my04my05my06my07
これは6パターンに間引きする事になりました。
my05my10my07my06my11my00
まさに苦渋の決断でした。

プログラム側では PCG左右反転機能を実装する事にしました。これは以前説明した超高速ビット左右反転を使用して、ゲーム中にリアルタイムで反転するようにしています。
キャラエディタ機能拡張
また、PCG同時定義限界数のため 16キャラが使えなくなり、16キャラ文字が14キャラ文字に減りました。これでメモリの計算をもう一度してみます。

・上移動 336byte 8定義×14文字×3パターン(反転利用) ・下移動 336byte 8定義×14文字×3パターン(反転利用) ・左移動 672byte 8定義×14文字×6パターン ・右移動 0byte (反転利用) ・立ち止まり 112byte 8定義×14文字×1パターン ・ダメージ 336byte 8定義×14文字×3パターン ・パワーアップ 336byte 8定義×14文字×3パターン ・攻撃 224byte 8定義×14文字×2パターン×4方向


あれこれ積算した結果、なんとなんとの 8KB!これで先に進めます!
実際には反転テーブルが256バイトあったりとかしますので、実際には10KB程度です。それでも十分な効果が出ています。また、省メモリの結果、さらにヒーローの登場シーンやステージクリア演出も入れられる可能性が出てきました。


結局、省メモリの実現には小さな小さな努力の積み重ねしかないのです。まさに積算ですね。こうやってデータの省メモリは進めていきました。


Newシティヒーローメイキング・インデックス
  1. Newシティヒーローメイキング
  2. スタッフアサイン
  3. PCG再定義
  4. アトリビュート制御
  5. メモリ省力化
  6. マップデータの圧縮
  7. 動作の安定化
  8. 人間100人を動かすために

日清シスコ ごろグラ チョコナッツ 400g×6袋
【広告】※ これはつまみに最高だなあ…涎