Wiki
Clone wikiCardWirthPy Reboot / MemoForEffectBooster
エフェクトブースターの問題 - CardWirth実装メモ
このページには、CardWirthPyを実装するにあたって遭遇したエフェクトブースターの問題やドキュメント化されていない情報を記載しています。
作成したJPY1ファイルが予期したように動かないような時、このページの情報が参考になるかもしれません。
共通
backcolor
の初期値がドキュメントと異なる
文法一覧では初期値は白となっていますが、実際には黒($000000
)です。
color
の初期値がドキュメントと異なる
文法一覧では初期値は白となっていますが、実際には黒($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
色指定では$
の他に#
が使える
$
記号の他に#
記号を使っても色指定が機能します。今のところ、他に使用可能な文字は確認されていません。
数値列の数値部分を数値としてパースできない文字列にすると0
として扱われる
値として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では先に定義されたセクションが複数回実行される
互換性問題でもあるため、バージョン間の互換性情報の当該項目で詳しく解説しています。
JPY1
wait
に-1
より小さな値を指定するとアイコンが変化しない
無限ウェイトは発生しますが、アイコンが変化しないという挙動になります。未定義動作なので、環境や状況によって結果は異なるかもしれません。
wait
にごく小さな値を指定した場合は正確に機能しない
wait
には1ミリ秒単位で待機時間が指定できますが、Windowsの内部タイマーは、通常概ね15.6ミリ秒程度の周期を最短として処理を行っています。それ未満の時間のウェイトはOSレベルで正確に動作することが保証されていません。あまり短い時間を指定すると、環境や状況によって挙動が異なるような事がありえます。
dirtype=4
についてのドキュメントの記述誤り
dirtype=4
は現在プレイ中のシナリオフォルダを指定すると記述されていますが、実際にはJPY1ファイルが存在するフォルダが基準となります。また、alpha
パラメータ必須と書かれていますが、dirdepth
の誤りと思われます。
JPY1の加工内容によってtransparent=1
や背景セルとして配置した時のマスク指定が機能しなくなる
JPY1で次の加工を行うと、transparent=1
や、背景セルとして配置した時のマスク指定が機能しなくなります。
filter=1~6
、filter=9
、filter=10
- 全ての
colormap
noise=1
と、noisepoint
が0
以外を指定noise=2
、3
、4
※ ただし全てpaintmode=3
以外の時
なお、CardWirth 1.50では挙動が異なります。バージョン間の互換性情報の当該項目を参照してください。
JPY1でbackwidthにマイナス値を指定すると消滅する
[init]
セクションでbackwidth
に-1
以下の値を指定すると当該JPY1ファイルが全く機能せず、事実上消滅します。backheight=-1
は、ドキュメント通りサイズの自動計算として動作します。
JPY1でwidthにマイナス値とdirtype=2を指定するとそれ以降の処理が飛ばされる
JPY1のセクションでdirtype=2
を指定し、かつwidth
に-1
以下の値を指定すると、当該セクション以降の処理が消滅したかのように動作します。height=-1
は、ドキュメント通りサイズの自動計算として動作します。
clip
指定時に透過ピクセルが切り取り後の左上となる仕様がドキュメントに載っていない
CardWirthでは透過(マスク)色は左上のピクセルのものと決まっていますが、JPY1でclip
を指定した時は切り取り後の左上座標になります。これはおそらく仕様ですが、ドキュメントに記されていないので注意が必要です。
JPTX
JPTXでantialias=1
の時のフォントサイズの計算がおかしくなる
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倍サイズを半分にした値が実際に描画されるサイズ
JPTXで勝手にアンチエイリアスがかかる問題
フォントの指定がWindows APIのTextOut()
関数などでアンチエイリアスがかかるものになると、antialias=0
を指定していてもアンチエイリアスがかかります。
具体的には、MS P明朝
やMS Pゴシック
等でピクセルサイズが22以上の時にアンチエイリアスがかかってしまうようです。
JPTXで<fontcolor="blue">
のようなスペース抜け表記が有効になる
<fontcolor="blue">
のような記述が<font color="blue">
のように機能します。
JPDC
JPDCのcopymode
のデフォルト値がドキュメントと異なる
ドキュメントには「始めは2
で一時描画すると1
の値を取る」と書いてありますが、実際には始めが1
で一時描画後に2
となるようです。
JPDCによるイメージのファイル保存について
JPDCではsaveFileName
の指定によって撮影した画像を保存できますが、この仕様には問題があります。
- シナリオ自体を上書きします。そのため、プレイヤーが予期せぬ所でシナリオの内容が変わってしまう上、宿Aで撮影のあるシナリオをプレイし、宿Bでそのシナリオを開くと、宿Aで撮影されたイメージが出てきてしまいます。
- CAB圧縮されたシナリオを直接プレイすると、一時展開されたフォルダ内に撮影されたイメージが入るため、一時展開先が削除されると撮影されたイメージも消滅してしまいます。
CardWirthPyでは撮影イメージを宿毎に保存するようにする事でこれらの問題を解決しています。
1.50ではJPDCのcopymode=1
指定はcopymode=2
指定のように動く
互換性問題です。バージョン間の互換性情報の当該項目を参照してください。
Updated