-
Notifications
You must be signed in to change notification settings - Fork 1
MemoForEffectBooster
このページには、CardWirthPyを実装するにあたって遭遇したエフェクトブースターの問題やドキュメント化されていない情報を記載しています。
作成したJPY1ファイルが予期したように動かないような時、このページの情報が参考になるかもしれません。
文法一覧では初期値は白となっていますが、実際には黒($000000)です。
文法一覧では初期値は白となっていますが、実際には黒($000000)です。
ドキュメントにありませんが、次の名前が使えるようです。仕様かバグかは不明です。
-
black……$000000 -
maroon……$800000 -
green……$008000 -
olive……$808000 -
navy……$000080 -
purple……$800080 -
teal……$008080 -
gray……$808080 -
silver……$C0C0C0 -
red……$FF0000 -
lime……$00FF00 -
yellow……$FFFF00 -
blue……$0000FF -
fuchsia……$FF00FF -
aqua……$00FFFF -
white……$FFFFFF
$記号の他に#記号を使っても色指定が機能します。今のところ、他に使用可能な文字は確認されていません。
値として42,42のように複数の数値を指定する際、,42や42,、はたまた,のように数値部分を省略したり、a,42のように数値として扱えない文字列を指定したりすると、その部分の値が0として扱われます。
必要な数より多くの数値列を指定した場合は必要な数だけの値が使用されます。たとえば位置の指定で10,20,30,40などと書くと、前方の10と20が使用されます。
詳細には確認していませんが、JPY1では先の定義が優先され、JPTXでは後の定義が優先されるようです。
例えばJPY1で次のような指定を行うと、colorの実際の値は$000000になります。
[section]
color=$000000
color=$FFFFFF
セクション名が重複した時、セクションの内容が上書きされて同一のセクションが複数回実行されるような挙動が発生するが、1.30以前では後に定義されたセクションが、1.50では先に定義されたセクションが複数回実行される
互換性問題でもあるため、バージョン間の互換性情報の当該項目で詳しく解説しています。
無限ウェイトは発生しますが、アイコンが変化しないという挙動になります。未定義動作なので、環境や状況によって結果は異なるかもしれません。
waitには1ミリ秒単位で待機時間が指定できますが、Windowsの内部タイマーは、通常概ね15.6ミリ秒程度の周期を最短として処理を行っています。それ未満の時間のウェイトはOSレベルで正確に動作することが保証されていません。あまり短い時間を指定すると、環境や状況によって挙動が異なるような事がありえます。
dirtype=4は現在プレイ中のシナリオフォルダを指定すると記述されていますが、実際にはJPY1ファイルが存在するフォルダが基準となります。また、alphaパラメータ必須と書かれていますが、dirdepthの誤りと思われます。
JPY1で次の加工を行うと、transparent=1や、背景セルとして配置した時のマスク指定が機能しなくなります。
-
filter=1~6、filter=9、filter=10 - 全ての
colormap -
noise=1と、noisepointが0以外を指定 -
noise=2、3、4
※ ただし全てpaintmode=3以外の時
なお、CardWirth 1.50では挙動が異なります。バージョン間の互換性情報の当該項目を参照してください。
[init]セクションでbackwidthに-1以下の値を指定すると当該JPY1ファイルが全く機能せず、事実上消滅します。backheight=-1は、ドキュメント通りサイズの自動計算として動作します。
JPY1のセクションでdirtype=2を指定し、かつwidthに-1以下の値を指定すると、当該セクション以降の処理が消滅したかのように動作します。height=-1は、ドキュメント通りサイズの自動計算として動作します。
CardWirthでは透過(マスク)色は左上のピクセルのものと決まっていますが、JPY1でclipを指定した時は切り取り後の左上座標になります。これはおそらく仕様ですが、ドキュメントに記されていないので注意が必要です。
JPTXでantialias=1を指定すると、フォントのサイズ計算が若干おかしくなります。具体的には、一般的な環境で13ピクセルを指定すると13.5ピクセル、14ピクセルを指定すると14.5ピクセル、15ピクセルを指定しても14.5ピクセル……程度で描画されます。
これは、おそらく、描画されたテキストにアンチエイリアスをかけるために、内部で2倍で描画して半分に縮小するという処理を行っているためだと思われます。2倍で描画するためのフォントサイズ計算時、ポイントサイズを2倍にしているのではないでしょうか。
96PPI環境でのantialias=1の時のフォントサイズは次の手順で正確に計算できるようです。
- ピクセルサイズ+2が4で割り切れる場合はピクセルサイズ+1
- 2倍サイズ = ピクセルサイズ * 72 / 96 * 2 * 96 / 72
- ピクセルサイズ-1が4で割り切れる場合は2倍サイズ+3
- 2倍サイズを半分にした値が実際に描画されるサイズ
フォントの指定がWindows APIのTextOut()関数などでアンチエイリアスがかかるものになると、antialias=0を指定していてもアンチエイリアスがかかります。
具体的には、MS P明朝やMS Pゴシック等でピクセルサイズが22以上の時にアンチエイリアスがかかってしまうようです。
<fontcolor="blue">のような記述が<font color="blue">のように機能します。
ドキュメントには「始めは2で一時描画すると1の値を取る」と書いてありますが、実際には始めが1で一時描画後に2となるようです。
JPDCではsaveFileNameの指定によって撮影した画像を保存できますが、この仕様には問題があります。
- シナリオ自体を上書きします。そのため、プレイヤーが予期せぬ所でシナリオの内容が変わってしまう上、宿Aで撮影のあるシナリオをプレイし、宿Bでそのシナリオを開くと、宿Aで撮影されたイメージが出てきてしまいます。
- CAB圧縮されたシナリオを直接プレイすると、一時展開されたフォルダ内に撮影されたイメージが入るため、一時展開先が削除されると撮影されたイメージも消滅してしまいます。
CardWirthPyでは撮影イメージを宿毎に保存するようにする事でこれらの問題を解決しています。
互換性問題です。バージョン間の互換性情報の当該項目を参照してください。