PathLink: 砂塵の彼方 > 徒然日記 > 2019年07月のエントリ

エントリー

2019年07月の記事は以下のとおりです。

[CardWirth] 続・Next宿をCW1.50に移植できたかも、という話

前回「Next宿をCW1.50に移植できたかも、という話」が、まだ続きました。

(7/15追記)
踊る金狼亭の私家版情報内に、Next→CW1.50宿移植のまとめを掲載しました。
関連記事3つの内容をまとめ、説明を意識した作りになっています。ぜひそちらもご覧ください。

※※※
前回の実験では、PCデータをNext用シナリオに移して圧縮解除、CWXEditorで開いてからクラシックシナリオとして保存し、1.50エンジンで取り扱える形に変換しました。そこまでは、そう難しくありません。
しかし、Environment.wyd にある済印や宿ゴシップの情報をバイナリエディタで移植するという難関があります。ここで間違うと、宿が使えません。
済印・宿ゴシップのもう少し簡単な移植方法はないものか……

というわけで、今回は直接バイナリエディタで移植するのではなく、Pyの逆変換機能を用い、Py宿経由で移植する方法を試しました。以下、実行した手順と結果です。
<最終更新:2019.07.13 2:38>

<Environment.wyd情報の移植(Py宿経由)>

実は、Next宿のEnvironment.wydは圧縮されていない。そのため、バイナリエディタで開けば、済印や宿ゴシップの情報がそのまま読める。

そしてさらに。
テキストエディタで開けば、テキストはテキストとして読むことができる(←ここ重要)。
ただし、うっかりテキストエディタで上書きすると宿が壊れるので、そこは気をつけた。

  1. あらかじめNextエンジンのユーティリティモードで、(1)最新・最古の済印、(2)最新・最古の宿ゴシップ をそれぞれ調べてメモしておく。
  2. Pyで空の宿を作り、Environment.xml をUTF-8対応のテキストエディタで読み込んでおく。
  3. Next宿のEnvironment.wydをテキストエディタで開き、最も古い済印から最も新しい済印までをコピーして、空のテキストファイルに貼り付ける。
    (※古い方から新しい方へ、1行に1つの済印が並ぶ形になったはず。)
  4. 各行の先頭に「<CompleteStamp>」、末尾に「</CompleteStamp>」を挿入し、全ての行が「<CompleteStamp>(済印テキスト)</CompleteStamp>」の形になるようにする。
    (※テキストエディタに一括置換機能があれば、それを使って改行部分を置換していくと早い。)
  5. Py宿 Environment.xml の<CompleteStamps>~</CompleteStamps>の間に、1つ前で加工した済印データを貼り付ける。
  6. 宿ゴシップについても、手順は同じ。最新・最古の宿ゴシップの出現位置からデータを取り出すべき範囲を確定し、4~5の手順を、
    <CompleteStamp> → <Gossip>
    </CompleteStamp> → </Gossip>
    <CompleteStamps>~</CompleteStamps> → <Gossips>~</Gossips>
    と置き換えて実行する。
  7. 宿全体の所持金も、ここで調整しても良いかも。
    「<Cashbox>4000</Cashbox>」となっているところを書き換える。
    (※4000→準備段階でメモした元の宿の所持金合計にする。)
  8. 書き換えた Environment.xml を保存。
    Next宿の Environment.wyd は、何もせずそのまま閉じる。
  9. 2で作成したPy宿の逆変換を行い、CW1.50用に変換。
    生成された Environment.wyd を、PCデータを移植した1.50宿のフォルダ内にコピー、上書きする。

こちらの方が、ミスは少ないかもしれません。

PCデータの移植方法は、前回の記事どおりが良いと思います。


実は、PCデータも、Py宿経由で1.50に移動させることができます。
展開されたWSN(XML)形式シナリオのキャストデータは、基本的に3行書き換えれば(キャラ画像は抜け落ちるものの)そのまま宿の冒険者データとして使えます。これを利用して、PCデータをCWXEditorで変換する際にXML形式で保存し、一度Py宿を作るやり方です。
その後、この記事の上の方で紹介した方法で Environment.wyd の情報も移植し、PCデータ含む全体を逆変換で1.50用に変えるのですが、この方法には直通の変換にない以下2つの欠点があります。

  • CWXEditor上の取り扱いがWSN形式で完結するため、効果音埋め込みの所持カードに全くエラーが表示されない。逆変換で効果音が消えるケースに気づけない可能性がある。
  • 逆変換により1.50仕様のカードが削除されることがあり、結果として直通変換よりも多くの所持カードを失う可能性がある。
    (※今回試したところでは、1.50仕様シナリオで入手した技能「焔紡ぎ」などが消えました。)

※※※
済印・宿ゴシップをテキストとして移植する今回の方法、バイナリ編集よりも楽かもしれませんが、やはり簡単楽々というわけにはいきませんね。多少楽になる程度のものです。
問題点の方は、前回記事に書いたとおりで、何も変わりません。

もしどうしてもNext宿を1.50環境に移植したいなら、PCデータはNext→1.50直通で、Environment.wyd にある情報はPy宿経由で変換するのがベターではないか。というのが結論です。
もちろん、元の宿は、事前バックアップ必須です。


[関連記事]
Next宿をCW1.50などに移植できるようになるかも、という話
Next宿をCW1.50に移植できたかも、という話
・続・Next宿をCW1.50に移植できたかも、という話(←現在地)

拍手送信フォーム

[CardWirth] Next宿をCW1.50に移植できたかも、という話

前回「Next宿をCW1.50などに移植できるようになるかも、という話」の続きです。
<最終更新:2019.07.13 2:38>

(7/15追記)
踊る金狼亭の私家版情報内に、Next→CW1.50宿移植のまとめを掲載しました。
関連記事3つの内容をまとめ、説明を意識した作りになっています。ぜひそちらもご覧ください。

※※※
7/7、Next専用シナリオの読み書き機能がついたCWXEditorがダウンロードできるようになりました。そこで、さっそく、6月末に予定していたNext宿移植を試してみることに。
以下の手順で試し、外見的にはだいたい移植できたような感じです。
(ただし、重大な問題点があります。下の方の問題点の項をご覧ください。)

<Next宿側の準備>

  1. 宿内に存在する全ての技能・アイテム・付帯能力カードを、いずれかのPCの所持欄に移動する。
    (※入りきれないときは荷物持ち用の仮PCを作成する。荷物袋、カード置き場、バックパックにカードを残さない。)
  2. 全てのPCについて、それぞれEP値を記録。
  3. 全てのPTを解散し、宿全体の所持金をメモしておく。
  4. セーブ。

<1.50宿側の準備>

  1. Next宿と同名の宿を作成。
  2. Next宿に所属するPC全てについて、同名のPCを作成する。
    (※荷物持ち含む。名前だけ一致していればよく、他の設定は適当でもOK。)
  3. ユーティリティーモードで宿の所持金額をNext宿の方に合わせる。
  4. 1.50宿をユーティリティモードで起動、適当な名称の済印・宿ゴシップを1個ずつ追加。
    (※後で行う済印と宿ゴシップの移植の際、置換範囲を明確化するため。)
  5. セーブ。

<PCの移動>

まず、シナリオ作成ツールを、以下の設定に変更する。

  • Next付属のWirthBuilder→環境設定で「シナリオのファイル圧縮を無効化」にチェックを入れて適用
  • CWXEditor→ツール>エディタ設定の「その他」タブで、対象エンジンを「CardWirth 1.50」に設定

両方の設定が終わったら、WirthBuilderで適当な空シナリオを新規作成する。
この新規シナリオを用いて以下の手順を繰り返し、Next宿の全ての (キャラ名).wcp ファイルについて処理を行う。

  1. (キャラ名).wcp を上で新規作成したシナリオのフォルダ内にコピーして Mate1.wid に改名。
  2. シナリオをWirthBuilder 1.2.0以降で開いて圧縮なしで保存。
    (※シナリオ保存後、Mate1.wid は Mate0.wid になっているはず。)
  3. 2で保存したシナリオを、Nextシナリオ読込対応のCWXEditorで開く。
  4. 編集>検索と置換 で、キーワード「@@@NEXT」を用いて「テキスト検索」を行い、検出されたPCの所持カードを削除。
    (※クラシック形式にした後に削除しようとすると、削除後の保存ができない(ことがある?)。必ずWSN形式として扱われている間に削除しておく。)
  5. 編集>検索と置換 で基準を「CardWirth 1.50」とした「誤り検索」を行い、CW1.50が対応していない所持カードを探す。あれば削除。
    (※CWXEditorによる自動変換で気づかないうちにカードの内容が変わる危険性をできるだけ減らすため、クラシックシナリオとして保存する前に誤り検索しておく。)
  6. 名前を付けて保存で、クラシックシナリオとして保存する。

    この後、9番の段階に進むまでは、CWXEditorを閉じずに作業を続けること!(※一旦閉じると、自動変換で内容が変わった非対応部分を見つけられなくなる可能性がある。)

  7. キャストの所有カードで残っているものについて、1つずつ編集画面を開ける。
    「OK」のボタンに警告表示が出ていたら、そのカードは削除する。
  8. それでも残ったキャストの所有カードのうち、使用時イベントがあるものは、1つずつ使用時イベントの編集画面を開ける。
    イベントツリーのどこかに警告表示が出ていたら、そのカードは削除する。
  9. 上書き保存で、非対応の所持カードがなくなった状態を保存する。
  10. Mate0.wid の名称を (キャラ名).wcp に戻し、1.50宿の同名ファイルに上書き。

全キャラ分処理が終わったら、次へ。

<移動で抜け落ちるデータの復元>

  1. 1.50宿を1.50エンジンで読み込み、PCのカード画像を設定し直す。
    (※自分のPCなので、元のファイルは持っている前提で。)
  2. 各PCのEPは、システム称号「@EP」(←全て全角)の点数で管理されている。
    準備の際に作成した記録を元に、ユーティリティモードを用いるか、簡単な称号配布シナリオを作って復元する。

<Environment.wyd情報の移植>

(7/13追記:バイナリエディタでの編集はちょっと……という場合、別の方法もあります。)

実は、Next宿のEnvironment.wydは圧縮されていない。そのため、バイナリエディタで開けば、済印や宿ゴシップの情報がそのまま読める。
[PNG-4KB]

  1. Next宿の Environment.wyd から済印領域(「済印文字列+改行」の繰り返し領域)だけをコピーして、1.50宿の済印領域(1で設定した適当済印の文字列+改行の部分)と置換する。
  2. 置換後の該当部分のデータのサイズが何バイトあるか調べて、置換した部分直前のデータ長の辻褄を合わせる
    (※済印領域直前の4バイト分がデータ長。)
  3. 宿ゴシップについても同じ。
  4. 書き換えた1.50宿の Environment.wyd を保存。

<パーティーや荷物袋・カード置き場構成の再現>

  1. PTを再結成し、荷物袋・カード置き場にあったカードを戻す。
  2. 荷物持ちPCを作成していた場合は、削除。
  3. セーブ。

以上。

ここまでの作業の結果として、アルバム情報とPC所持カードの出典情報を除いて、見た目的には元のNext宿と(たぶん)同じの1.50宿が完成し、動きも問題なさそうでした。

【重要】この方法による移植の問題点

  • 効果音が埋め込まれたカードなど、一部CW1.50で取り扱えないにもかかわらず、誤り検索で検出できないものがある。
    非対応カード探しは手間を惜しまず慎重に行わないと、宿移植によって気づかないうちに所持カードの内容がオリジナルから変化してしまうことがある。
  • 圧縮解除の際、各PCのデータを一旦シナリオの一部として保存する必要があるため、所持カードの出典情報(カード情報右下のシナリオ名+作者名)が、一律圧縮解除に使ったNextシナリオの情報に置き換わる。
  • アルバムのPCは、移植ができない。
  • 不具合の有無の検証が難しい。
    ほとんどは異常が発生して初めて顕在化することになると思われ、その点を納得した上で実行する必要がある。

なお、7/7時点の最新版でテストした結果です。
CWXEditorの今後の更新によって問題点の一部が緩和される可能性がありますが、そもそもイレギュラーな使用法のため、上手くいったらラッキー程度に考えた方が良いと思います。

※※※
今回は、下の方で紹介している称号データを手作業で切り貼りした実験よりも楽だったし、所持カードの移動が容易い利点もあります。ただ、やはりそれなりに時間がかかり、神経を使う作業になるのも事実です。上手く行かないこともありますし、上手く行ったように見えても問題が無いとは限らず、手軽にできるというものではありません。
結局、方法があったとして、実際やろうとする方はいないのじゃないかと……。

オマケで作ったもの:データ長部分の修正用→
(数値欄にデータ長(何バイトあるか)を入れて、変換ボタンを押す。)

結果の現物を見たい方のために、移植前後の宿データ詰め合わせを公開しています。
ダウンロードはこちらへ。

※※※
この移植実験では、CW1.50には無い要素がWsn.4を経由した変換でどうなるかを見るため、PCに次の6種類のカードを持たせていました。
中には誤り検索だけでは検出できなかったものもあり、所持カードが多いと、非対応カードの削除は多少面倒です。

非対応要素の種類 誤り検索 CW1.50宿での挙動
バックパック対応 非検出 問題なし
名称が全角8文字 非検出 問題なし?
効果音が埋め込み 非検出 音が鳴らない
キーコードが10個 検出 ---
使用時イベントでセーブ・中断を制限 検出 ---
使用時イベント内の効果コンテントが
カードの効果目標を対象としている
検出 ---

カードの「バックパック対応」設定は、クラシックシナリオにするときに自動で削除されるようで、全く影響ありませんでした。
全角8文字名称のカードも、特に何もなく移植できました。CW1.50でも、そのまま8文字名で表示されます。ただ、文字列の中身によってはカードの台紙からはみ出たり、メッセージにカード名表示されるときおかしくなることがあるかもしれません。

※※※
シナリオ作成ツールを使った場合のデータの整合性等に不安を感じるなら、各PCの称号を手作業で移植する方法もあります。正規のツールを使うなら、ユーティリティモードで。しかし、バイナリエディタの方が簡単です。
宿ゴシップと済印の移植は、上に書いた方法で、割と簡単に行えます。
宿にあるスキルやアイテムなどは、CW1.50でも使えるものだけ、1つずつユーティリティモードで配布するしかありません。


[関連記事]
Next宿をCW1.50などに移植できるようになるかも、という話
・Next宿をCW1.50に移植できたかも、という話(←現在地)
続・Next宿をCW1.50に移植できたかも、という話

拍手送信フォーム

ページ移動

  • 前のページ
  • 次のページ
  • ページ
  • 1

ユーティリティ

2019年07月

- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

エントリー検索

エントリー検索フォーム
キーワード


翳の回廊(絵置き場)の一部を
TINAMIのスペースに置かせて頂いています。

pixivでも何かやっている……かも。

新着コメント

Re:Re: CWBBS[26]-14
2015/06/23 from simoom
Re:Re: CWBBS[26]-14
2015/06/22 from ああ
Re:Re: CWBBS[26]-14
2015/06/22 from simoom
Re:Re: CWBBS[26]-14
2015/06/21 from 権限がありません
Re:Re: CWBBS[26]-14
2015/06/21 from あ

過去ログ

Feed