WSN追加案: メニュー・エネミーカードの移動

Issue #297 resolved
k4nagatsuki repo owner created an issue

CW 1.60にあるものと同等以上のカード移動のイベントコンテントを実装する事を考えます。

私はよく知らないのですが、おそらく1.60用のシナリオではこの機能は活用されているのではないかと想像します。また、すでに実装が存在するので、衝突の危険性はほとんどありません。

cwxeditorではこの機能を一時期実装していたことがありました。今もコメントアウトした状態で残されているため、再実装は容易です。ここの節は誤り。実装されてません。

エンジン側の実装には課題があります。これまでのCWでは、表示されているメニューカードの状態は、エリアとフラグの状態さえあれば特定可能でした。そのため、どのカードが表示されているか・どの位置にあるかなどといった情報はセーブされません。

しかし、カードが移動したり名前が変わったりといった事が可能になると、その情報を保存する必要が出てきます。この実装の詳細はあらかじめ考えておくか、実装しながら考える必要があります。

個人的には、各メニュー・エネミーカードのProperty情報を保存できるようにしておき、カードに付属するイベントはセーブデータには保存せず、保存されたカード情報とエリアにあるイベント情報をなんとかして紐付けるやり方がいいのではないかと思います(例えばカードを名前と順序で管理するなど)。

Comments (8)

  1. gorfrog

    そういう機能がどんどん実装されていくのなら、 Xエディタの仕様についても御一考の余地がありませんか?

    「1.50までの機能だけを使う」モードと、 「Py専用機能を含む」モードを使い分けられるようにできればと思うのですが。 「この機能は公式エンジンにあったっけ?」と迷う方がいらっしゃるかも知れません。

  2. k4nagatsuki reporter

    「nnnの機能だけを使う」というモードはありませんが、「ターゲットとするエンジンに存在しない機能を使おうとしたら警告する」というモードがあります。cwxeditorのメニューから、ツール→エディタ設定の設定を開き、その他タブに「対象エンジン」という設定項目があって、現在のデフォルト値はCardWirth 1.50です。

    また、WSN形式のシナリオを編集しているか・クラシック(~1.50)形式のシナリオを編集しているかといった状況によってもモードが切り替わります。

    ターゲットエンジンが切り替わった際の具体的な挙動としては、(1)ターゲットに存在しない機能を使用しようとした時に警告する (2)誤り検索でターゲットに存在しない機能の使用箇所を全て見つけ出して警告する、となっています。

  3. k4nagatsuki reporter

    仕様の案。

    セーブデータに次のような項目を追加します。

    <MenuCards>
      <MenuCard name="group1" index="0">
        <Location left="10">
        <Size scale="150">
        <Layer>150</Layer>
      </MenuCard>
    </MenuCards>
    

    このように、上書きしたデータのみを保存し、それ以外は元々配置されていた場所を使用します。これをエリアを再読込した時に適用しなくてはなりませんが、適用先の特定にはnameindexを使用します。この場合は、group1というグループに属する0枚目のカードが適用先となります。該当するカードが無かった場合は、無視されます。また、グループに属していない場合は「名前無しグループ」として扱います。

    位置に加えてスケールやレイヤも変更可能にします。カード名や解説・イメージの変更も同じ方法で保存できますが、さしあたりそこまではできなくてもよいでしょう。

  4. k4nagatsuki reporter

    あるいは重複しないIDをカードごとに自動的に振ればいいのかもしれません。

    ただ、シナリオ作者から見えないデータが内部に発生するというのは気に入らないので、そのIDも編集できるようにした方がいいでしょう。編集した結果は自動的に(2)などがついて絶対に重複しないようにします。

    このやり方の問題は、グループ名の他にIDなどというデータが増える事で(しかも何に使うのかの説明が難しい)シナリオ作者を混乱させないかという事です。

  5. k4nagatsuki reporter

    pull request #2135

    ずいぶん長く期間が空いてしまいましたが、実装しました。カードの特定方式は、シナリオ作者に余計なデータを管理する手間をかけさせるのを嫌って、上記したグループごとのインデックス方式を採用しています。後でいいアイデアが出た時に拡張する事は容易です。

    以下はCWNextの実装の詳細について調べた事です。この通りに実装しています。

    • 移動後のカードは自動配置を無視する。ただし移動後に再配置が発生すると移動情報が消える。
    • フラグで表示オフ状態でも移動する。
    • 他のシナリオから持ち込んだカードの使用時イベントでも移動する。
    • 名前無しグループは存在しない。空文字列を操作しようとしても無視される。
  6. Log in to comment