CardWirthPyLiteの目標

 CardWirth1.20~1.28/1.50PyRebootそれぞれの互換をCardWirth優先で保ちつつ、軽い・シンプルを目指しています。
 プレイやデバッグの利便性よりも、忠実に動作するシナリオを増やすことを重視しています。

スペック PyLite 5 Py 5(Reboot) 1.50 fullpack
パッケージサイズ 37MB(32bit) 72MB(32bit)/89MB(64bit) 13MB(32bit)
ファイル総数※ 約650 約1200+3900(libフォルダ) 約200
オプション数 45 60 10
対応シナリオ規格※ 1.20-1.50
WSN 1-5
1.20-1.50
WSN 1-5
1.20-1.50
対応OS Windows専用
(wine動作不可?)
Windows(32bit版のみEasyWine動作可)
Linux GTK(Python開発環境必須)
Windows専用
(wine動作可)
※付属シナリオ、Classic以外のスキンを含まない
※バグやマイナーな仕様の再現・対応度で細かい差異があり、PyLiteでは、Pyで不具合の出るシナリオにも一部対応しています。
Py,PyLiteはCW1.28の仕様変更で進行停止を含む不具合が生じた、10前後の1.20シナリオ(藤野亭リンク)に対応しています。


スクリーンショット
https://img.atwiki.jp/pylite/attach/12/18/pylite5_ss_opening.jpg
https://img.atwiki.jp/pylite/attach/12/17/pylite5_ss_yado.jpg
https://img.atwikiimg.com/www65.atwiki.jp/pylite/attach/12/1/pylite_ss.png

索引



CardWirthPyLiteの特徴


◆軽さの追求◆

  • ダイアログ描画処理の一部最適化
  • 総ファイル数、オリジナルスキン・アイコン・ボタンを削減
  • 設定の簡易モードと一部重要度の低いオプションを廃止

 機能を追加するほど容量や素材は増え続け、巨大なパッケージは導入の障壁となるので、
 PyLiteでは「必要最低限の構成」というコンセプトを当初より掲げています。
 かといってあまりにも標準化した機能がないのでは不便なだけなので、そこは需要を見てバランスを取っています。


◆CardWirthのインターフェースに近づける◆

カード操作ダイアログとステータスバー
  • フォントの初期設定をCWに準拠
  • ダイアログ、バーの幅、描画タイミング(PCカードの表示順等)をCW準拠で調整
  • デバッガアイコンなどを一部ASK製に差し替え、デフォルトで同梱
  • 画面拡大ボタンを追加(3.0以降のオプション)
  • 「ユーティリティモード」の復刻(4.4以降)

 CardWirthから初期のPyへの移行で不満としてよく挙がっていたのが細かいデザインの食い違いです。
Py-Rebootでは、CardWirthが最大の判断基準ではないため(完全フリーライセンス優先)、独自デザインになっている部分があります。アイコンなどはユーザが自由変更できるといっても、移行者にはデフォルトで設定・同梱されている方が望ましいため、PyLiteでは完全なフリーライセンスは重視せず、これらの変更・初期同梱・初期設定を行っています。


◆再現性~細かい挙動の再現~◆

これまでの実績
  • 回復処理・魔法無効化状態での挙動など、カード選択AIの忠実な実装
  • CardWirth1.28の規格外適性に対応(効果が判明しているもののみ)
  • アイテムカード「カード交換」のすりかえに対応
  • シナリオ選択でキーやホイールで操作すると済み印が付いたシナリオに入れる
  • F9で済み印/ゴシップが巻き戻らない1.28仕様や1.50変数=バグのオプション化
  • その他の詳細はコチラ
 Py-Rebootでは利用シナリオが存在している挙動は極力仕様を合わせる方針が取られているものの、
開発者意向の仕様変更やバグ修正により、従来通り遊べなくなった1.28-1.50用シナリオが存在します。
 PyLiteでは、対応シナリオの増加を最優先し、可能な限りの一致を目指します。
(データ破損系のバグなどには当然対応しません。)
 今のところ、利用シナリオが存在するものであれば、バグでも挙動を合わせ、最低限オプションを設ける方針です。

進捗の目安 PyLite 5.1 PyLite 1.0
シナリオに利用されている仕様・バグ(進行に必須) 100% 70%
シナリオに利用されている仕様・バグ(演出系) 96% 70%
各種計算式・判定式 98% 79%
不正値(11以上の防御力など)の対応 70% 0%

 5.1現在は、確認できているすべてのバグ利用・バイナリ改変シナリオ※が動作するようになり、
 行動順の数%の差異以外に未解明な計算式はなくなりました。※NEXT形式シナリオを除く




◆独自の追加機能◆

 PyLiteでは、CardWirthの再現重視が前提ではあるものの、
単なるPy-Rebootの軽量化、CWの再現だけではなく独自の改良も加えています。

  • NEXT形式のシナリオの貼り紙の確認・削除(変換無しでのプレイは不可)
  • 種族が有効なスキンなら他のスキンで設定された種族でも表示
  • 「DELETEキーでの削除」「SHIFT+ENTERで戦闘開始」など、多くの場面でキー操作の対応強化
  • シナリオのツリー表示においてより直感的な操作、CAB圧縮に対応(5.1以降)
  • ENTERキーでシナリオ検索が可能(Reboot3の仕様変更で同一化)
  • 「荷物袋から使用」時、直接ダイアログを閉じられるように(Reboot4の仕様変更で同一化)
  • サウンドフォントの差替



機能追加時のポリシー
 便利だからといって、あれもこれも追加していくと忠実性は損なわれていきます。
 そこで、互換性に影響しない独自要素を実装・他のエンジンから移植する際には以下のような制限を付けています。

  • オリジナルのCardWirthで定められたゲームシステムを変更しない
    • CardWirthの「数値隠蔽」を崩すような要素は入れない
    • マスクデータを視覚化する機能は慎重に検討
  • オリジナルのCardWirthにない画面上の機能は非表示にするオプションを追加する
 例として、「いつでもデバッグモード変更可能」「数値参照の適性順ソート」というような機能はこの観点から意図的に排除しています。シナリオ・スキン機能とは別の領域の問題なので、そうしたシナリオ・スキンの作成・使用には制限はありません。


オリジナルの「CardWirth」、他のPy系エンジンとの違い


◆CardWirthとCardWirthPy の成り立ち◆


「CardWirth(1.00-1.28)」は groupAskC++Builderで開発したシナリオ追加型のフリーゲームです。

 その公式最終バージョンであるCardWirth 1.28(07)はプログラムのソースコードや内部情報が開示されないまま開発が停止しました。しかし、二次配布者であるカードワース愛護協会自身を含めて、改変・再配布が認められていたため、第三者による改変・改造版(1.28(08)以降バリアント企画)やクローンが複数生まれることとなりました。

CardWirthPy」はその流れの一つで、CardWirth 1.28 をPython2で1から再現する事を目的とした非公式のプロジェクトです。


◆「公式エンジン」の定義の混乱と停滞◆

 カードワース愛護協会は、groupAsk純正の1.28(07)と、当時の所属メンバー等がバグ修正以上の変更(大きいものとして、エフェクトブースター、第三者製効果音の追加など)を施した改造版を区別せずにgroupAskが公開を継続している1.20から続く正式バージョンかのように配布しています。結果、以降の改変はすべて「公式」と認識あるいは誤認されて普及していきました。

 現在配布されている「CardWirth 1.50」は解析情報を元にDelphiで再現し直されたもの(C++BuilderとDelphiは姉妹製品であるものの、別言語であり、バイナリの継続性は失われています)ですが、暗号化問題を受けて唯一の開発者は同組織を脱退し、個人で開発する旨が宣言されており、事実上、誰も開発を継続できない状態になっています。

 一方、オリジナルのCardWirthPyも開発途上で更新停止していましたが、オープンソースライセンスで配布されているため、誰でもフォーク・改造版を作る事が可能です。現在はk4nagatsuki氏が中心となったフォーク「CardWirthPy-Reboot」が、CardWirth 1.50 や独自の追加機能に対応し、Python3で開発が継続されています。


◆妥協点としてのCardWirth 1.50◆

 派生版・改造版が乱立しているフリーゲームは、Elonaなど他にも少数ながらあります。
 CardWirthが他のゲームと違うところ、そして問題点は、シナリオはエンジンの機能に依存しているため、上位互換を持つエンジンに(それが正統な公式であっても)古いエンジンが淘汰されてしまうことです。

 シナリオ作者は新しい機能を使いたいため、必然、新しいエンジンに道連れ的にユーザーが集まります。
 既に大量のシナリオが作られた「1.50仕様」以前の公式エンジンへの退路は絶たれており、ユーザーはどれもが非公式な1.50互換を持つエンジンを、選択あるいは行き来しなければならない時代になりました。

 CardWirth1.50を開発したLyna氏の「CardWirthNext」と複数ある現行「CardWirthPyフォーク」は、それぞれ1.50の上位互換を持った上で、独自の専用シナリオ形式を持ち、カードワース愛護協会はどちらの専用シナリオも公式ギルドで受け入れています。


◆CardWirthPyLite◆

 昨今、Py-Reboot発のWSN形式シナリオは多く発表されるようになり、普及してきたように思います。
 また、PyはバリアントやMPEG動画の再生機能など、1.50では再現されなかったいくつかの1.28遺失機能もフォローしています。
 しかし、同時に独自仕様も多く、後述のAI仕様や「貼り紙バグ」などマイナーな挙動の再現には消極的です。

 「CardWirthPyLite」は、単なるPy-Rebootのライト版・劣化版というわけではなく、
 Pyベースでありつつも、そうした公式系CardWirth仕様の取りこぼしを拾い、1.28-1.50に慣れ親しんだユーザーでも「これなら今まで使っていたCardWirthと同じ感覚で使える!」と思えるような触り心地、ゲーム体験の再現を重視するエンジンです。


◆Python2系エンジン◆

CardWirthPy 0.12(開発停止) Python2
 ┗CardWirthPy-Reboot Python3に移行
  ┣CardWirthPy 私家改造版 Python3に移行
  ┗CardWirthPyLite Python2で開発継続

「CardWirthPyLite」は、2016年に「CardWirthPy-Reboot」の1.1 から分岐した更なるフォークです。
また、Py-Rebootは3.0以降、Python3に移行したため、
2023年現在更新が続くCardWirthPyフォークの中では(おそらく)唯一のPython2系エンジンとなりました。

Python2とPython3では使用可能なライブラリが異なるため、今のところ、Reboot系にある「lib」フォルダがなく、各バイトコードが実行ファイルにコンパイルされているなどの違いがあります。


◆オープンソースの維持◆

 CardWirthPyのライセンスは、MITライセンスです。
 これは著作権表記以外に制限のないライセンスであるため、ソース非公開でクローズドなプログラムとしてフォークすることも可能であることを意味します。また、Py-Reboot以降は、CardWirth 1.28-1.50へ宿データ(セーブデータ)をコンバートできます。

 Py系エンジンは再現性の品質について課題を残していますが、この2点によって公平性と開発継続性が担保されています。

 PyLiteにおいても、オープンソースとコンバート機能を維持する方針に変更はありません。
 PyLiteから更にフォークすることも、別のフォークにPyLiteの機能を組み込むことも自由に行えます。
 ※bitbucketがMercurialのサポートを終了したため、旧リポジトリが消し飛び、現状PyLiteはバージョン管理を限定的にしか使用していないため、ソースコードの提供は正式版に限ります。

タグ:

CardWirthPyLite
最終更新:2023年11月02日 13:29