シナリオ圧縮術
TwitterのCardWirthクラスタにおいて「100KB祭り」という企画が定期的に開催されている。 この企画は圧縮後の容量100kB以内の制限の下で(短編)シナリオを制作する企画であるが、 100kB以内という制約が手軽かつ創意工夫を刺激するのか、作る人も遊ぶ人も多いようだ。
そんな「100kB祭り」が開催されるたび、シナリオの容量削減に悩まされる人を見かける。……ということで、シナリオの容量削減に関するテクニックを、このコラムにまとめておこうと思う。
特に断りの無い限り、対象エンジンはVersion1.50とする。
素材の容量削減
- 画像ファイルの減色
まず、色数が少ないにもかかわらずフォーマットが256色やフルカラーになっている素材をしばしば見かける。 特に、GroupASK素材の「MENU_宿の娘」「MENU_宿の亭主」は内実は16色以下(4kB)であるがフォーマットは256色(8kB)である。 このような素材については、未使用色を除去することで、クオリティを損なうことなく減量できる。ただし、加工禁止の素材も存在するので、利用規約には目を通すべし。
- エフェクトブースターの活用
モザイク、モノクロ化など、雨を降らせるなど、単純な画像処理はエフェクトブースター(と補助画像)で代用できる。 エフェクトブースターは単なるテキストデータであり、容量は小さい。 ちなみに効果音も鳴らせるし、ウェイトもかけられ、アニメーションも可能なので、一連のまとまった演出も可能ではある。
- カラーセルの活用
単色や単純なグラデーションのための画像を用意せずとも、標準機能であるカラーセル何とかなる場合もある。 カラーセルには透明度が設定でき、加算・乗算の合成方式を選択できるので案外表現の幅が広い。
- (BGMとしてMIDI楽曲/CardWirth付属のBGMを使用)
- (思い切ってモノクロにする)
- (効果音の無音部分をカット)
- (背景画像の縮小・トリミング(632×420に収める、解像度を粗くする))
シナリオファイルの容量削減
- 敵キャストの手札を動的に配布
敵キャストの所持カードは容量が嵩む。 これを戦闘中イベントで配布することで容量をぐっと削減できる。 例えば「居合斬り」3枚を持つ敵がいたとする。これを所持カードで持たせると容量は3枚分、イベントで配布すれば(何枚持たせようが)容量は1枚分で済む。 Version1.50になってから、バトル内で戦闘開始イベントが使えるようになった。戦闘開始イベントで配布すれば、1ラウンド目からちゃんと使ってくれる。
この方法には多くの利点がある。 まず手札の組み換え(≒バランス調整)が容易である。 そして手札をアップデートした時に更新作業が要らない。
- ステップ名・フラグ名・スタートコンテント名・素材ファイル名の短縮
ステップ・フラグ・スタートコンテント・素材ファイルがイベントツリー内で参照されるときはそれぞれの名前(文字列)が用いられている。よってそれらを短くすればイベントツリーの容量が削減できる。
例えば「ステップ1」という名前のステップが100回参照されたとすると、全角5文字(10バイト)×100回≒1000バイトの容量が費やされることになる。これをステップ名を「s1」(2バイト)に縮めると、費やされる容量は200バイトとなり、800バイト削減である。
なお、バトル・エリア・パッケージ・技能カード・アイテムカード・召喚獣カード・情報カード・同行NPCが参照されるときはそれぞれID(整数値)が用いられている。 よってそれらの名前を短くしても容量削減にはならない。
- (メニューや貼り紙の「イメージ格納」を参照に切り替える)
- (口調クーポンなどを短い時限クーポンに置き換える)
ツリーの容量削減
- カウンタつきループの除去
カウンタ付きループをコールコンテントの列に置き換えることで、軽量化&高速化が見込める。 Version1.28以前はコールコンテントを複数並べるのは割とご法度だったが、Version1.50以降コールコンテントがものすごく高速になった。
拙作では『四則演算パッケージ』(Version 1.20仕様/248kB) をこの方法で容量削減したバージョンが 『四則演算パッケージ+』(Version 1.50仕様/170kB) となる。両者の違いを見比べていただければと思う。
- イベントの共通化
- 複数エリア/バトルで同じ処理を行っているときに、その処理をパッケージにまとめる。
- 複数のスタートで同じ処理を行っているときに、その処理を別のスタートにまとめる。
- 多数のフロアからなるダンジョンを1エリアにまとめてしまう。
イベントの共通化はシナリオの容量を確実に削減する。どう共通化するのがベストかは本当にシナリオ次第といえるので、 こればかりは自分で試行錯誤してみるしかない。ただし、一つ助言できるとすれば、 「同一のイベントA、A、Aと出てくるのを一つにまとめる」のは良いが、 「よく似たイベントA、A', A''…を共通化する」のは注意が必要。とくに、A、A', A''…の微妙な差異を振り分ける処理がしばしば面倒になる。
参考サイト
- 「シナリオ減量化作戦」(踊る金狼亭/ゆう氏)