Skip to content
k4nagatsuki edited this page Jun 8, 2015 · 201 revisions

CardWirthPy Reboot


お知らせ

お知らせを飛ばす(次の項目までジャンプ)

2015年6月6日

CardWirthPy 0.12.3β1をリリースしました。0.12.2から50件余りの機能追加と改善、シナリオの進行に関わるものも含んだ30件余りのバグ修正を行っています。

しばらくの間βテストを行った後、0.12.3正式版をリリース予定です。

2015年5月29日

CardWirthエンジンを実装するにあたって直面した問題について記した実装メモのページを2点公開しました。

2015年3月1日

CardWirthPy 0.12.2をリリースしました(ダウンロード)。

このバージョンの開発にあたって、開発者の皆様方、提案や問題の報告をしてくださった方々に多大な協力をいただきました。この場を借りてお礼申し上げます。ありがとうございました!



これは何?

これはCardWirthPy Developer's Siteで開発中だったCardWirthPyのフォークです(フォークについての説明)。本家側の更新停止が続いているため、Rebootと称して独自に開発を継続しています。

原開発者の方に連絡を取ったところ、恐らく本家側の更新は今後も無いという事なので、事実上開発を引き継いだ形になっています。

開発に参加したりさらに引き継いだりしてくれる方を募集中です。

takuto_cwさんのよくまとまった紹介記事もご覧ください。

開発に興味のある方は開発者向け情報をご覧ください。


最新リリース版のダウンロード

過去のバージョンを更新する場合は、ダウンロードしたフォルダをそのまま上書きしてください(設定やプレイデータはアーカイブに含まれていないため、上書きされません)。


次期バージョンβ版のダウンロード

最新β版の更新内容

追加

  • シナリオの検索機能を追加。一度開いたことのあるフォルダから条件に該当するシナリオを検索し、一覧表示します。
  • 対象レベルでシナリオを絞り込めるようにした。
  • レベルでPCを絞り込めるようにした。
  • デバッガの称号編集ダイアログに「全て複製」機能を追加。
  • 宿帳の拡張メニューに「自動登録」を追加。
  • JPDCで保存されたイメージを宿ごとに記憶するようにした。
  • デバッガに保存されたJPDCイメージの削除機能を追加。
  • 転送対象に保存されたJPDCイメージを追加。
  • セーブ中に電源が切れる等のトラブルが発生した時、できるだけ宿のデータが壊れないようにした。
  • スキンのオプションに「CardWirth 1.20相当のカード適性計算を行う」を追加。
  • 自動戦闘行動開始のオン・オフを記憶するようにした(シナリオ終了後は自動オフ)。
  • シナリオ選択ダイアログで、シナリオ以外のフォルダのテキストファイルも解説ボタンで読めるようにした。
  • CardWirth 1.20からスキンを自動生成できるようにした。1.20から1.28にかけて拡充されたDataフォルダの内容(Table・Bgm・Sound)は手動で追加する必要があります。
  • CardWirth 1.20の宿データを変換できるようにした。
  • ウィンドウ位置を記憶するようにした。
  • ダイアログを開いている時もスクリーンショットを保存するようにした。
  • CardWirth 1.50ではJPDCにおけるcopymode=2指定がcopymode=1指定のように動くため、それに合わせた。
  • 互換動作: JPDCにおけるcopymode=2指定時のCardWirth 1.30以前の挙動を互換動作で再現する。
  • CardWirth 1.50と1.30以前でJPY1のセクション名が重複した時の挙動が異なるので、1.50に合わせた。
  • 互換動作: JPY1におけるセクション名重複時のCardWirth 1.30以前の挙動を互換動作で再現する。
  • スキンのFaceフォルダ内でショートカットが使用できるようにした。
  • 「カード名の文字を滑らかにする」オプションを追加し、フォントのスムージングを無効にできるようにした。
  • 「ステータスバーの文字を滑らかにする」オプションを追加し、フォントのスムージングを無効にできるようにした。

変更

  • 対象レベルが0~0以外となっているシナリオのレベル表記を修正。
  • デフォルト値の設定はSettings.xmlに保存しないようにした。
  • シナリオ選択ダイアログのページ数表記位置を右上にした。
  • バージョン判別用クーポンを外部化し、Data/SystemCoupons.xmlで定義するようにした。
  • 拠点の新規作成ダイアログで、スキンを選択した際に見た目が変わるようにした。
  • 逆変換先のフォルダを記憶するようにした。
  • シナリオごとにスキンタイプ情報を追加。検索結果の絞り込みに使用されます。スキンタイプ情報は、各シナリオをシナリオ選択ダイアログで見た時に追加されますが、タイプ情報がない場合、学園バリアントで遊ぶべきシナリオがファンタジーⅠ型バリアントの使用中に検索結果として出現するようなことがありえます。
  • スキンの自動生成時にScenario相当のフォルダへのショートカットを自動的に作成しないようにした。
  • JPY1のdirtype=3の時の選択対象をスキンごとのEffectBoosterフォルダとし、スキンの自動生成でSchemeフォルダの内容をEffectBoosterフォルダにコピーするようにした。
  • JPY1でbackwidthwidthに0未満の指定がなされている場合の挙動をCardWirthに合わせた。
  • CardWirthでは、JPY1でclipが指定された時は、切り取り後のイメージの左上のピクセルが透過色となるので、挙動を合わせた。
  • カードの移動対象や使用対象を選択する時、移動・使用しようとしているカードを表示するようにした。
  • 拡大縮小した背景画像を滑らかにするオプションが有効になっていても、縦横の描画サイズが元のサイズの整数倍となる背景はスムージングしないようにした。
  • 戦闘行動開始を逃走時に自動オフせず、逃走を試みた次のラウンドのみ自動開始しないようにした。
  • タイトルロゴ等のリソースがPNGイメージとして含まれているエンジンから自動生成したスキンで、当該リソースが使用されるようにした。
  • タイトルロゴ等のリソースの配置をCardWirth 1.50に合わせた。
  • シナリオ選択ダイアログで、テキストがない場合は解説ボタンを無効にするようにした。
  • 冒険の中断時、ステータスバーに余計なボタンが表示されないようにした。
  • ロード時、フラグの状態に関わらずセーブ時の背景表示状態を復元するようにした。
  • エフェクトブースターファイルで定義が重複している時、CardWirthに合わせて先に定義された方が優先されるようにした。
  • 同行キャストがバトル中にカードを使用した時のキャスト消去タイミングをCardWirthに合わせた。
  • 金庫の資金かパーティの所持金が1000000spを超える宿を逆変換し、CardWirthで読み込むと、所持金操作中にエラーが発生するため、999999spを超える分は切り捨てるようにした。
  • デバッガでパーティの所持金を9999999spまで操作できるようにした。
  • ステータスパネルに表示しきれないテキストは縮めて表示するようにした。
  • 台詞コンテントでどの台詞のクーポン条件もマッチしなかった時の挙動をCardWirthに合わせた。
  • パーティ情報ダイアログの所持金欄の左右にボタンを追加。
  • 数値選択スライダの左右にあるボタン上でマウスボタンを押し続けた時は連続で操作するようにした。
  • スキンの「メッセージでクラシックなフォントを使用する」オプションがオンの時は、選択バーのフォントもCardWirthに合わせるようにした。
  • 精神傾向の限界値が±5になっているのを、CardWirthと同じ±4にした。

修正

  • シナリオの一時展開先情報が宿ごとではなくSettings.xmlに保存される。
  • Summary.wsm以外に*.wsmがあるシナリオのロードに失敗する。
  • アイテムカードがリサイクルカードにならない。
  • キーコード不保有イベントがキーコード成功・失敗イベントの大半に反応してしまう。
  • シナリオのロードに失敗した時にエラーで停止する。
  • 拡大縮小した背景画像を滑らかにするオプションが保存されない。
  • 宿の新規作成ダイアログが開く時にクリック音が鳴らない。
  • レベル調整中のPCがレベルアップした時EPが余分に加算される。
  • JPY1でdirtype=1の時、保存されたJPDCイメージが正しく表示されない。
  • JPY1のファイル探索ルールの挙動が正しくない。
  • 加工の内容によっては、マスクオンで配置したJPY1イメージが正しくマスクされない。
  • 加工の内容によっては、JPY1イメージのalphaの値が機能しない。
  • 加工の内容によっては、JPY1イメージのmask=3を指定した時の表示が正しくなくなる。
  • JPY1の[init]セクションでbackwidth=0backheight=0が指定されていると再生後にハングアップする。
  • 宿帳ダイアログから開いた編成記録等のサブダイアログで宿帳の状態が変わると、元のダイアログに反映されない。
  • 金庫と所持金の合計が9999999spを越えると所持金変更中に余剰分が消える。
  • 能力ボーナス・ペナルティアイコンに数値が表示されている時、数値の周囲に透過色が残留する場合がある。
  • 逆変換でカード置場と荷物袋内のカード管理情報の解説の改行コード部分が\nになる。
  • 環境によってSDL_mixerとBASS Audioの内部競合が発生し、まったく音が鳴らなくなる。
  • 行動不能者の所持するカードを移動した後、操作ができなくなる。
  • シナリオのサブディレクトリを開いた直後に閉じてサイドシナリオ選択ダイアログを開くとエラー。
  • バトルイベント中にシナリオ終了コンテントを実行するとキャラクターの行動が残る。
  • JPY1の[init]セクションの描画で最後のセクションのanimation=1の描画内容が消える。
  • シナリオフォルダ内にリンク先が存在しないショートカットが存在するとエラーログが出る。
  • 宿変換した時、変換後の宿で使用されるスキンが正しく選択されない。
  • まれにData/Temp以下のディレクトリの削除に失敗する環境があるので、失敗した場合はファイルのみの削除を試みるようにした。
  • 同行キャストが自分自身を対象にする行動を行わない。
  • 起動時にシナリオを直接実行した時、当該シナリオが最後に選択されたシナリオとして認識されない。
  • 荷物袋からカードを使用した時、該当者が行動不能になってカード使用が不能になってもカード使用ダイアログが再オープンされる。
  • 荷物袋からカードを使用した時、新たなカードの配付で荷物袋からカードを取り出せない状態になっても再オープンしたダイアログで荷物袋からカードを使用しようとする事ができ、実際に使用するとエラー。
  • 読込によってライブラリ内でアクセス違反が発生し、予測不能なエラーが起きるRLE4圧縮ビットマップイメージが存在する。
  • バトル終了時のステータス異常回復で、隠蔽中でなければカードアニメーションが発生しない。

最新のテスト版やスキンのダウンロードとそのChangeLog


CardWirthからの移行方法

冒険者の宿の変換が必要です。起動してから「スタート」カードを選ぶと宿の選択ダイアログが出ますが、そこで「変換」ボタンを押してCardWirthのYadoフォルダ内にある冒険者の宿のフォルダを選択するか、宿のフォルダをダイアログにドラッグ&ドロップしてください。宿は自動的に変換され、CardWirthPyで使用できる状態になります。

また、Scenarioフォルダ内にはショートカットを置く事ができるので、まずはCardWirthのScenarioフォルダへのショートカットを作るといいでしょう。

バリアントからの移行方法

バリアントのエンジンの実行ファイル(例えばModernWirth.exe)をCardWirthPyのウィンドウにドロップすると、そのバリアントのデータからスキンを自動生成するダイアログが出ます。

そのまま「決定」ボタンを押せば、必要なデータが自動的に抽出され、そのバリアントをそのまま移植したスキンが生成されます。スキンは右下の歯車ボタンで開く設定ダイアログから切り替える事ができます。

スキンの生成と同時にそのバリアントのシナリオのフォルダへのショートカットがCardWirthPyのScenarioフォルダに自動的に生成されますが、宿のデータは変換されません。必要な宿を個別に変換してください。


CardWirth 1.30以前のシナリオとの互換動作について

適宜シナリオの対応エンジンの情報を与えることで、CardWirthPyに過去のCardWirthエンジン相当の動作を行わせる事ができます。

例えば、CardWirth 1.20から1.28への移行の時、メニューカードの位置がプレイヤーカードの上に表示されていたのに、1.28ではその位置関係が逆になり、1.20環境で作られた一部シナリオのメニューカードがプレイヤーカードの背後に隠れて見えなくなるといった事が起きました。CardWirthPyは、普段は1.28エンジンのようにプレイヤーカードを上に描画しますが、「このシナリオのこのエリアは1.20のようにメニューカードを上に表示するべき」であると判断すると、自動的にそのような描画に切り替えます。これを互換モードと呼びます。

互換モードに切り替える判断材料には次のようなものがあります。

互換性データベース

いくつかのシナリオについては、エンジン本体に同梱された互換性データベースによって、自動的に互換モードに切り替わります。

全てのシナリオの互換性を調査する事は容易ではないため、互換性データベースに入っているシナリオのリストは不完全です。CardWirthエンジンのバージョンアップで動かなくなったシナリオ等について、皆様からの情報提供をお待ちしております。

そういったシナリオを見つけたら、Issueを作成してお知らせください。タイトルは【互換性DB】から始め、説明には該当するシナリオの情報(シナリオ名やどこで手に入るか等)を書き、Kindはenhancementを選択するとよいでしょう。出来る限り速やかに対応させていただきます。

入手不能なシナリオを登録させたい場合は、互換性情報の生成のしかたをご覧ください。

mode.ini

互換性データベースには情報が無いが、とりあえずすぐに互換モードで動かしたいシナリオ等が存在する場合、シナリオのフォルダにmode.iniというファイルを追加する事で、CardWirthPyに互換モードで動くよう指示を出す事ができます。

mode.iniはテキストファイルで、内容は次の2行です。

[Compatibility]
engine=1.20

ここで、2行目がengine=1.20となっているとCardWirth 1.20相当の互換モードで動きます。1.28相当のモードにしたい場合は、これをengine=1.28にしてください。

互換モードの詳しい内容

現在の互換モードがどの程度まで過去のエンジン相当の挙動をするかについての詳細はIssue #17で見る事ができます。


問題を見つけたら

現在のCardWirthPyが抱える課題はIssue(課題)の一覧で参照する事ができます。

バグや仕様の不備等の問題を見つけたら、新たにIssueを作成してお知らせください。皆様のご協力をお待ちしております。

Issue(課題)の書き方

  1. 課題のタイトルと説明を書いてください。発生した問題の内容や、どのように操作すれば問題が発生するかを具体的に詳しく書いていただければ調査が簡単になります。使っているOSのバージョンなど、バグに関係のありそうな情報があるとなおよいでしょう。
  2. Kindの欄は、その課題がバグであればbugを、要望であればproposalを選択してください。互換性情報の提供はenhancementでしょうか(とはいえ深く考えずに選んでも問題はありません)。
  3. Prioerityは課題の重要度です。blocker-critical-major-……の順に重要度が下がっていきます。直さないとデータが消えてしまったりするような重大なバグの場合はcriticalに、メッセージのほんの些細な誤りなどの小さな問題はminorに……などと使い分けるといいでしょう。とはいえ、通常はmajorで問題ありません。

なお、Bitbucketのユーザアカウントを持っていなくてもIssueを作成する事はできますが、その後コメントする事はアカウント無しにはできないようです。修正の通知の後でなお問題が残っていたりした場合、遠慮無く次のIssueを作ってください。

その他、連絡や要望などに使っていただいても構いません。

Issueの新規作成をしたくない場合は

汎用の報告・連絡用Issueがあるのでここに返信する形で書き込んでください。ただしBitbucketのユーザアカウントが必要です。

既知の問題について

音声の不具合

環境によって、音声の再生で問題が発生することがわかっています。次のような問題が、サウンドフォントが存在しないか、サウンドフォントをまったく使用しない設定になっている時に発生します。

  • BGMの終了時に時々ハングアップする。
  • サウンドフォントを使用する設定から使用しない設定にした時にハングアップする。

このような問題が発生する場合、標準のサウンドフォントを使用するように設定を変更してください。

シナリオ読込の不具合

シナリオが存在するにも関わらずシナリオ選択ダイアログに表れず、表れたシナリオも読み込みに失敗する状態になることがあるようです。この問題が発生した場合は、CardWirthPy.exeと同じフォルダにあるScenario.dbを削除して再起動してください。


テスト版のバージョン

最新リリースと同等か、それよりも新しいバージョンがDownloadsにあります。これらはテスト版としてソースコードに更新があるたびにビルドされているバージョンです。

以下のファイルをダウンロードし、出てきたフォルダを統合する事で遊べるようになります。

  • cardwirthpy_[日付].zip
  • skin_classic_[日付].zip
  • font_[日付].zip

実装メモ

CardWirthエンジンを実装するにあたって直面した互換性やバグなどについてのメモを作成したので掲載しておきます。エフェクトブースターについてのメモなど、実際のシナリオ作成時などの参考となるかもしれません。


CardWirthPyの目標

ここに書いてあるのは個人的に決めた事なので、他の開発者の意向で変更されるかもしれません。

フリー・オープンソースの維持

フリー・オープンソースを維持します。大方針と反しない限りにおいて、協力をできるだけ受け入れます(もちろん大方針に反するforkも可能です)。

事故や開発者側の都合によって永遠に開発が打ち切られるというリスクをこれによって軽減します。

CardWirth(~1.50)との99%の互換性を目指す

本質的な部分で何も変わらない事を目指す事を意味します。具体的には以下の目標を掲げます。

従来のCardWirthとほぼ変わりないプレイ環境を提供する

できるだけフォントを合わせるなどして違和感をなくし、シナリオの変換などしなくてもそのまま再生できるようにします。

さらなる互換性の強化

シナリオ側に簡単なiniファイルを追加する等の方法で、1.20以前のシナリオも問題なくプレイできるようにしたいと考えています。

また、CardWirthから自動的にスキンを生成する機能により、バリアントシナリオもプレイできるようにします。

追加・拡張機能は将来的な互換性を考えて慎重に実装する

例えば追加のイベントコンテントなどは、将来のCardWirth側の拡張と衝突する可能性があるため、特に注意しなくてはなりません。

しかし、例えばシナリオを一覧表示するような、純粋なインタフェースの改良などは問題ない場合が多いでしょう。

いずれにせよ、単体のソフトウェアではなくプラットフォームである以上、意思決定は軽々しくするべきではないと考えます。

互換性を考えない残り1%

  • *.wsnとしてまとめたシナリオの再生。
  • より強力なデバッグ機能。
  • 背景切替方式。
  • 音声再生方式。
  • 長いカード名に対応。
  • スキン方式によるバリアントの吸収。
  • 宿データの互換性。CardWirthの宿データを直接使用するように作った場合、パフォーマンス上の制約が大きくなり(例えば大きな宿の読込に数秒かかったりします)、拡張性も不足します。そのため、より効率的なフォーマットを採用した上で、相互に変換できるようにします。
  • CABアーカイブだけでなくZIPアーカイブにも対応。
  • 将来的に問題ないと思われるレベルのインタフェースの改良。

現在の状況

CardWirthPyとしての未完成部分

概ね完成したと考えています。残る課題についてはIssueをご覧ください。

Reboot側での追加要素

  • 変換無しでシナリオを読み込めるようにする。
  • Scenarioフォルダ内のショートカット対応。
  • スキンのパラメータによりメッセージのフォントをCardWirthに合わせる。
  • 従来のCardWirthからのスキン自動生成。
  • スキンを拡張し、バリアントで変化しているような箇所はすべてスキンで吸収できるように。
  • CAB対応。
  • ZIP対応。
  • シナリオや宿読込の高速化。
  • 宿データの逆変換。
  • CardWirth 1.29~1.50相当の機能の追加。
  • インタフェースの若干の変更(貼紙のツリー表示や宿帳の一覧表示など)。これについては随時継続。

Clone this wiki locally