EffectBooster関連
EffectBooster(エフェクトブースター)とは、CardWirth1.28(08)以降において、書類の谷氏によって追加された描画処理をハックする外部拡張。
1.28ヘルプ
エフェクトブースターとは、カードワースの描画機能を向上させるプログラム群です。
実体は1.20以前から同梱されている「cwconv.dll」を差し替えたものだが、1.50以降やPyでは廃止され、本体での処理に取り込まれている。「cwconv.dll」の改造は1.28以前からの書類の谷氏個人のプロジェクトであったようであり、1.20にも対応している。
特殊な経緯(1.28以降はすべてそうだが……)でデファクト化したものであるため、利用したシナリオ例も少なく、各エンジンで細かい実装もばらばらであり、EffectBoosterで実現出来る描画処理の9割は1.50世代の標準コンテントで実現できるため、現在ではほぼ埋もれている機能。
現状、特にPy系エンジンでの再現度が低いと思われるため、精度を上げる目的で情報を集積していく。
現存する資料
1.28同梱のヘルプ…1.29以降にもそのまま同梱されている。
1.28同梱のソース…言語はDelphi6。1.29まで同梱されており、1.30で取り除かれている。
1.28以降のSchemeフォルダ……サンプル
ファイル形式
EffectBoosterは、エリアや背景変更コンテントのセルとして扱う。この中で扱える拡張子は三種類ある。
- JPY1/TPY EffectBoosterの基本ファイル。画像を加工したりアニメーションを実行する。
- JPDC CardWirthの画面を撮影・保存する。
- JPTX テキストを表示するためのファイル。1ファイル1セルの扱いなので、説明に使うには大量に用意する必要があり、テキストセルがある1.50以降では用途は殆どない。
これらの実体はINI、テキストであるため、付属のツール群を用いずともテキストエディタで編集できる。
というより、EffectBoosterをまともに活用したい場合はテキストエディタを使うのが基本となる。
エンジン間の仕様差
- 1.20-1.30では、JPY1のレタッチ結果次第でマスク設定が無効になるが、1.50では有効
- 1.50では`copymode=1`指定は`copymode=2`指定のように動く
- 同一のラベル名(例:[init][アニメ][アニメ])が重複してあるとき、一方が回数分連続実行され、他は無視されるが、1.20-1.30では先のラベル、1.50/Pyでは後のラベルが実行される。
- Py3以降では`dirtype=3`はSchemeフォルダではなくスキン内のEffectBoosterフォルダを参照する。
| 画像形式 |
BMP |
PNG |
透過PNG |
| 1.50 |
○ |
○ |
× |
| Py |
○ |
○ |
○ |
- Py-Rebootの大方針は「1.50に合わせる」だが……
- 「冒険の再開」時、表示中セルに存在するEffectBoosterの再実行は行わない。PyLiteでは行う。
- JPDCでシナリオフォルダ内の画像の直接書き替えは行わない。「宿」セーブに保存する。
- 「別宿の冒険者の画像を表示する」というシナリオ(実例有り)はPyでは完全再現不可能。
- 代わりに、cab状態でも異常なしでプレイ出来る。(1.28-1.50では一時解凍しているだけなので機能しない)
一時描画の処理順
ヘルプにある通り、[init]のパラメータだけ先読み、通常セクション(パーツ名)を上から順次一時描画し、最後に[init]を描画するという直感に反する仕様となっているので注意。
動作の順番としては
1.[init]の背景画面をロード
2.[パーツ名]を読み込み
3.[パーツ名]を加工
4.[パーツ名]を一時描画
5.[パーツ名]を背景画面に描画
6.[init]の背景画面を加工
7.[init]の背景画面を一時描画
8.[init]の背景画面を読み出したJPY1ファイル
もしくはカードワースエンジンに画像として出力、となっています。
命令表
init(初期化ラベル)専用命令
JPYでは、ラベル名を自由に記述できるが、[init]と記述したラベルのみ、特殊な振る舞いをする。
一部の命令はinit内でしか実行することができない(他では無視される)。
backcolor(背景色)
背景色の設定。xには色コードを指定する。指定しなければ黒(ヘルプでは白となっている)。
マニュアルに記載はないが、blackやredなどの基本的なカラーコードにも対応する。(Delphi基本仕様?)
backwidth(横幅)/backheight(縦幅)
- backwidth=1~無制限
- backheight=-1~無制限
背景色またはfilenameで指定した画像のサイズ。画像の場合、引き伸ばし表示を行う。
backheightのみ「-1」でイメージのデフォルトサイズに自動調整される。ヘルプによればbackwidthもそう振る舞うはずだが、おそらくバグで実際には表示されないので縦にしか使えない中途半端な実装となっている。
dirdepth(dirtype=4専用)
ディレクトリ深度。dirtype=4の時参照される。[init]専用で他のラベルでは無視される。
0を指定するとJPYファイルが存在するディレクトリ、1を指定するとそこから1段階前のフォルダが参照される。
comment(無限ウェイト専用)
無限ウェイト中、タイトルバーに表示されるコメント。
共通命令
[init]でも通常のラベルでも両方で使用できるパラメータ。
filename
filename=image.bmp
名前の通りファイル名。BMP/JPG/WAVや別のエフェクト系ファイル(jpy/jptx/jpdc)も指定可能。
エンジンごとにサポートしている拡張子が異なる点に注意。
「../」とすれば親フォルダや別のサブフォルダを参照できる。
dirtype
dirtype=1~7
ディレクトリ(フォルダ)タイプ。変更するとfilenameで参照するフォルダのパスが変わる。
1=JPYファイルが存在するディレクトリ(指定しない場合のデフォルト)
2=Tableフォルダ(PyではスキンのTableフォルダ)
3=Schemeフォルダ(PyではスキンのEffectBoosterフォルダ)
4=シナリオ内サブフォルダ(dirdepthパラメータが必須)
5=Waveフォルダ(PyではスキンのSoundフォルダ)
6=JPYファイルが存在するディレクトリの親フォルダ(../と同じ)
7=利用中プログラムのフォルダ(CardWirth.exeのあるフォルダ)
6と7は1.28同梱ヘルプに記載なし。dirtype4はシナリオフォルダ基準と記載されているが、実際にはdirdepthを指定しなければ、そのjpyファイルが存在するディレクトリが読まれる(つまり1と同じ)。
「..¥」やdirtype=7で相対パス・絶対パス指定すれば「Data\Resource」内のカスタマイズリソースも読むことができるが、Py系エンジンはスキンシステムの弊害でほとんどすべてのディレクトリ構成を変えてしまっているのでまともに動かない点に注意。
wait
wait=-1~10000
指定分のウェイトを入れる。
このウェイトはコンテントの空白時間と異なり、ミリ秒であり、1.28ではF9以外でスキップできない。
無限ウェイト
-1以下を指定すると左クリックするまで無制限に停止する「無限ウェイト」となる。
-1では専用アイコンが表示されるが、-2以下ではアイコンが表示されない。
無限ウェイトはCardWirth側のコンテントで提供されていないため、今日でも使う価値が残っている。
(PCを隠して全体マップを表示したい時など)
無限ウェイトを使うだけなら以下のように記述するだけでいい。
[init]
wait=-1
animation=1
transparent=1
JPDC
カードワースで表示中の画面(スクリーンショット)を画像として利用するファイル。
いわゆる「エフェクトブースターの撮影」機能。無限ウェイトと並んで今でも有用な機能。
JPY1に比べて命令数は少なく、何も書かなくても機能する。
copymode(切り取り方法)
copymode=0~3
切り取る画像の種別。ヘルプでは通常は省略可とされている。
0=自動(デフォルト。一時描画されていれば2、そうでなければ1※ヘルプの表記とは真逆)
1=一時描画前のゲーム画面
2=現在のゲーム画面
3=単一色で塗りつぶし
clip(切り取り位置)
clip=縦位置,横位置,幅,高さ
画面の一部を切り取って出力する。指定しない場合は全画面(632x420)になる。
savefilename(画像保存)
savefilename=ファイル名
フォルダ内に存在するファイルを切り取ったイメージで永続的に上書きする機能。
保存時には強制的に無限ウェイトが発生する。
記念撮影や、別の宿のPCを表示したりといったことに使える機能だが、この機能には非常に問題がある。
- 「CAB展開したシナリオでは破棄される」・・・解凍状態でないと正常動作しない。
- 「画像以外のファイルも書き換え可能で、元に戻せない」・・・問答無用で指定したファイルを書き換えてしまうため、非常に危険・悪質なこともできてしまう。
Py系エンジンでは宿側に書き換えた画像を保存するという変更を行っているが、反面、別宿PCを表示したり、シナリオ内のファイルを意図的に壊すという表現はできなくなっている。
1.50世代の外部リンク
1.28世代の外部リンク
最終更新:2023年11月29日 12:45