Re: バグ報告スレッド 15 [ No.360 ]
メンテ
 2025/08/19 21:46
 くろと
お世話になっております。

空イベント作成 (<<MAKE_EVENT〜)で作成したイベントに
イベント名を変更(<<SET_EVENT_NAME_ID〜)コマンドにて
イベント名を変更し、セーブロードをすると
変更した名称が空文字になるようです。

Ver3.643にて確認しております。

再現プロジェクトファイルを添付いたします。
https://41.gigafile.nu/0824-ddef89804724f7f341258b68f10d687d4

ご確認よろしくお願いいたします。
添付ファイルあり20250819_2146_22_1.png

添付ファイルあり20250819_2146_22_2.png

Re: バグ報告スレッド 15 [ No.361 ]
メンテ
 2025/08/20 12:35
 としこC
>>360
横入り、失礼します

【不具合】
セーブ→ロード後に、作成した空イベント(生成後に名前変更)の名前取得が空文字になる

添付ファイルで確認し、
こちらでも、別ゲーム別環境(ver3.64)で確認できました。


既存マップEvからCOPY複製をする場合も、
(<<MAKE_EVENT〜)実行前に名前を変更していたとしても、
ロード後に取得できるのは、変更前の名前(空イベントでは無名)になります。

(※同じく、複製元イベントの名前変更も保持されていない)


当機能を前提に設計していたので、教えていただけて助かりました。


マップイベントも、名前を文字列変数1個に転用することで、
CDB参照時のコマンド数を短縮していたのですが、

・セーブ・ロードの可能マップを制限する
・イベントID単位でCDBに保持させる

といった回避策も準備したいと思います。



【以下、……勝手な憶測】

他のマップEv同様に、内部変数(数値10個)部分しか維持せず、
複製の場合はイベントコードはセーブに含まれず、別途、複製元のID情報を保存しておき、ロード時に新たに再生成している様です。

これまで数値変数に制限していた内部変数の構造体に、文字列変数を足すことになるので、
この不具合を修正した場合、最悪、version違いのセーブファイルが使えなくなるか、
セーブファイルのロード時のエラー回避処理が追加で必要になる不具合かも、

(数値は文字列化されており? 後述、セーブへの記述回避もあって、バイト単位で保存していないことは確実なので、読み込みエラーの回避は比較的簡単?)


仕様とするにも微妙で、

元々(空イベント作成)コマンドでは、確保したIDの内部変数は初期化されないため、
特に異なるイベントを複製する場合では、【生成順が入れ替わる】と内部変数に従って意図しない条件ページが実行される可能性があり、
ID指定で生成するか、生成直前の内部変数の初期化が必要だったりします。

試しに、マップ上限10000個に複製して全ての変数を代入すると、ひとつのマップでセーブ容量を250kByte近く増大させることになり、複数マップでの累積も馬鹿になりません。

これらはイベントIDに割り当てられた内部変数を0代入することで、セーブへの記述を回避できますが、

マップを再入場して内部変数を何度も利用するようなイベント処理があるなら、
前述、【生成順の入れ替わり】による不具合を防ぐためにも、

(空イベント作成)によって生成したマップEvの内部変数は、専用のCDBを参照するための利用にとどめて、マップ退場時には初期化するといった運用が安全なのかもしれません。


【以下、落書き】

内部変数だけ異なる同機能のマップEvを複数設置する場合に、
都度コピーすると修正に苦労するので、

対策として、
("ここから複製")("ここまで複製")という2つのマップEvをID取得し、
その間にあるマップEvを、マップ入場時の自動起動から、
実体用のマップEvに置き換える方式をとることで、

ゲーム制作中は、それぞれの内部変数の初期化コマンドを記述するだけですみます。

(<<MAKE_EVENT〜)系の文字列操作の【隠しコード】が追加されたおかげで
ゲーム実行中の処理コスト、複製のセーブ容量圧迫はともかく、
作業の工数や、視認性は大きく改善できています。

……というか、空イベント作成でないマップEvも不要な内部変数を0代入すると、セーブのファイル容量をかなり圧縮できる? その分のイベント処理を保存するData.wolfが太るけど。