CardWirth 1.20以前への対応
CardWirthが1.28になるに当たって変更された仕様がいくつかある。
データバージョンが4のままで変わらないために自動判定はできないが、例えばmode.iniのような小さなファイルに:
engine=1.20
このような内容を記述してシナリオのフォルダに置くなど、簡単な方法で互換性のある動作をするようにしたい。
エンジン側の設定で都度変更するという手もあるが、そのシナリオを選択するたびに手動で設定を行うというのは手間からして現実的ではないように思われる。他にいいアイデアがあるかもしれないが今のところ思いつかない。
まずは1.20~1.28の違いをまとめる所から始める必要がある。
Comments (16)
-
reporter -
reporter 1.20と1.28のシナリオの挙動には以下のような違いがある。
この中で、例えば全員行動不能時に能力判定が成功するバグなどは再現の優先順位を下げてよいと思われる。
- カードの描画順が異なる。1.20ではメニューカードがプレイヤーカードの前になる。
- 隠蔽クーポン:Rは1.20には存在しない。
- リサイクルキーコードは1.20には存在しない。
- 時限クーポン(:や;で始まるクーポン)は1.20では通常のクーポン。
- 防御ボーナスの重ねがけは1.20では単純加算。
- 1.28では戦闘に途中参加したNPCが行動しない。
- 1.28で戦闘行動自動選択のアルゴリズムが改良されている。
- 1.20では#Tが機能しない。
- 1.20では味方全体・双方全体のカードをメニューカードに使用することはできない。
- 1.20では意識不明の対象に対象消去が効かない。
- 1.20では勇猛状態でスキルカードが配付されない。
- 1.20では激高状態で渾身の一撃以外の攻撃カードが配付される。
- 1.20では呪縛時の抵抗が不可能。
- 1.20では魔法無効化で使用できなくなるカードは発声が必要なカード。
- 1.20では精神状態や呪縛などの魔法効果は効果時間が短くても上書きできた。
- 1.20と1.28では適性の緑丸の計算式が異なる。
- 1.20では称号の上書きはできない。
- 1.20では_消滅予約クーポンは機能しない。
- 1.20ではカード名がキーコードにならない。
- 1.20ではキャストにカードを配付できなかった場合でも荷物袋に入らない。
- 1.20では最大値ダメージも防御修正の影響を受ける。
- 1.20では状態判定分岐のうち、呪縛・睡眠・中毒・麻痺がずれて判定されていた(呪縛→睡眠、睡眠→中毒、中毒→麻痺、麻痺→呪縛)。
- 1.20では睡眠者有効の能力判定が失敗する。
- 1.20では成功率+5の攻撃を受けても睡眠者が目覚めない。
- 1.20では対象消去者のカード所持判定分岐に成功した(フィールド全体の時のみ)。
- 1.20では全員が行動不能だとパーティ全員の能力判定が絶対成功した。1.28では絶対失敗になる。
- 1.20では味方全員が行動不能だと絶対に逃走成功する。1.28では絶対失敗になる。
- 1.20では敵の召喚獣が敵を死亡状態にしても死亡イベントが発火しない。
-
reporter 互換性データベースとmode.iniを実装した。cw/setting.pyの末尾を参照。
以下の互換動作に対応した。
- カードの描画順が異なる。1.20ではメニューカードがプレイヤーカードの前になる。
-
reporter - 1.20ではカード名がキーコードにならない。
この互換動作に対応した。ただし今のところカード本体のバージョンは影響せず、エリア単位で互換動作を行う。
-
reporter 1.28から最大値ダメージでの防御ボーナスは無視されるが、抵抗によるダメージの半減は発生する。
-
reporter - ペナルティカードが選択解除できなくなったのは1.20から。
- 混乱状態で混乱以外のカードが配られるようになったのも1.20から。
以上情報をいただきました(
#81にて)。ありがとうございます。 -
reporter 上の件で追加。
- 勇猛状態で技能カードが配られるのも1.20から。
-
reporter - 1.20では状態判定分岐のうち、呪縛・睡眠・中毒・麻痺がずれて判定されていた(呪縛→睡眠、睡眠→中毒、中毒→麻痺、麻痺→呪縛)。
-
reporter 1.20から1.28で次の挙動が変わっている。
- 選択中のメンバがいない時、選択中のメンバのクーポン所持分岐を行うと「誰か一人」のように動く。クーポン分岐以外でどうかは要調査。
- 折り返し位置に半角スペースがあるときの折り返しの挙動が異なる(本当に半角スペースのせいかは要調査)。
-
reporter クーポン所持分岐については、選択中のメンバが機能していないなどといったバグではなく、純粋に選択中のメンバがいない場合のみの特殊な挙動の模様。また、それ以外の分岐(状態、各種カード所持)については1.20と1.28で同様なのを確認。
折り返し位置についてはおそらく半角スペース問題で間違いない。これはむしろ1.28以降の方が不可解な挙動をしている(半角スペース以外の文字があると通常の折り返し位置になるのに、半角スペースがあると位置が変化してしまう)。
-
reporter 次の互換動作を追加。
- 1.20では選択メンバがいない時に選択中のメンバのクーポン所持分岐を行うと「誰か一人」のように動作する。
- 1.20と1.28以降で折り返し位置に半角スペースがある時の折り返しの挙動が異なる。
-
reporter Issue 210の提案より、能力の境界値(いわゆる緑丸の色が変わる基準)を1.20以前に合わせる事を検討します。
互換モードで対応するとプレイするシナリオによって所持しているカードの適性がころころ変わることになるので、上の提案にもありますが、スキンごとにスイッチを追加することで対応した方がよさそうです。
-
reporter - 1.20: 3=黒丸 4=普通 7=普通 8=明緑 11=明緑 12=白丸
- 1.28: 2=黒丸 3=普通 8=普通 9=明緑 14=明緑 15=白丸
上の調査結果に基づいて着手します。
-
reporter pull request
#798 -
reporter ラウンド・回数ボーナスの得方に違いがあります。1.20は適性丸の明るさに一致していないようです(能力+1の時の明るさに一致)。また、浮動小数点の誤差の問題なのか、1.2となるべきところが1.19999....となってしまい、さらに切り捨てが発生するため10->1.1となります(100000ラウンドは119999ラウンドになりました)。
能力+1のボーナスになるところは対応するにしても、1.2が1.1になるところはバグとみなして対応しなくていい気もします。
- 1.20: 2=0.5 3=0.8 6=0.8 7=1.0 10=1.0 11=1.199999... 14=1.199999... 15=1.5
- 1.28: 2=0.5 3=0.8 8=0.8 9=1.0 14=1.0 15=1.2 (20=1.5)
-
reporter pull request
#799 - Log in to comment
ファイルのハッシュ値などを用いて互換性データベースを作る手法も検討する。