Re: バグ報告スレッド 13 [ No.130 ]
メンテ
 2023/03/20 23:23
 YADO
▼コモンイベントからマップイベントのセルフ変数を操作する仕様に関して

これは「コモンの仕様」と言うべき内容なので、バグと言えるかどうかは分かりませんが、見た目はバグに見えるので、一応報告しておきます。

コモンイベントからマップイベントのセルフ変数を取得、または値を変更する時に、コモンの処理途中に別のマップへ移動すると、移動先のマップイベントのセルフ変数ではなく、コモンを最初から実行した時に居たマップのマップイベントが処理対象になってしまいます。

例えばサンプルゲームに以下のコモンイベントを設定。
コモンイベント/並列実行(常時)
■ループ開始
|■キー入力:CSelf0[入力待ち] サブキー(12)
|■変数操作: CSelf10 = Ev0のセルフ0 + 0
|■デバッグ文:\cself[10]
|■
◇ループここまで◇◇

WoditorEvCOMMAND_START
[170][0,0]<0>()()
[123][2,0]<1>(1600000,192)()
[121][4,0]<1>(1600010,1000000,0,0)()
[106][0,1]<1>()("\cself[10]")
[0][0,0]<1>()()
[498][0,0]<0>()()
WoditorEvCOMMAND_END

タイトル画面のマップイベントの0行目に以下のイベントを追加。
■変数操作: このEvのセルフ変数0 = 123 + 0
WoditorEvCOMMAND_START
[121][4,0]<0>(1100000,123,0,0)()
WoditorEvCOMMAND_END

そしてテストプレイを開始し、タイトル画面でサブキーを押すと、デバッグウィンドウに「123」が表示されます。
これはマップイベントに設定した「123」を取得しているので、正常に処理していると言えます。

「スタート」を押してタイトル画面からマップAやマップBへ移動してサブキーを押しても「123」が表示されます。
これは別のマップへ移動しても、タイトル画面のマップイベントのセルフ変数を呼び出し続けている事になります。

同様に別のマップへ移動した時に、移動先のマップイベントのセルフ変数を取得しようとしても、前のマップのセルフ変数を取得してしまいます。
コモンイベント/並列実行(常時)
■変数操作+: CSelf11 = 現在のマップID
■条件分岐(変数): 【1】 CSelf11 が CSelf12 と同じ
-◇分岐: 【1】 [ CSelf11 が CSelf12 と同じ ]の場合↓
|■イベント処理中断
|■
◇分岐終了◇
■変数操作+: CSelf12 = 現在のマップID
■変数操作: CSelf10 = Ev0のセルフ0 + 0
■デバッグ文:\cself[10]

WoditorEvCOMMAND_START
[124][3,0]<0>(1600011,12288,0)()
[111][4,0]<0>(1,1600011,1600012,2)()
[401][1,0]<0>(1)()
[172][0,0]<1>()()
[0][0,0]<1>()()
[499][0,0]<0>()()
[124][3,0]<0>(1600012,12288,0)()
[121][4,0]<0>(1600010,1000000,0,0)()
[106][0,1]<0>()("\cself[10]")
WoditorEvCOMMAND_END

この現象はウェイトなどを設定しても改善されません。

ただコモンを最初から実行すると、現在のマップが処理対象になるので、以下のように2つに分けて処理すれば正常に処理されます。
コモンイベント/並列実行(常時)
■ループ開始
|■キー入力:CSelf0[入力待ち] サブキー(12)
|■イベントの挿入[名]: ["値取得"] <コモンEv 216>
|■
◇ループここまで◇◇

コモンイベント「値取得」/呼び出しのみ
■変数操作: CSelf10 = Ev0のセルフ0 + 0
■デバッグ文:\cself[10]


一応回避方法はありますが、「コモンを最初から実行しないといけない」と言った仕様が分かりにくく、「回避方法が無い」「ウディタのバグ」と考える者も居そうなので、出来ればコモンの処理途中に場所移動したら、現在いるマップのマップイベントのセルフ変数が処理対象になるようになった方が良いかと思います。


▼特定の条件で[Del]キーを押すとマップイベントを削除してしまう

マップイベントの設定画面を開き、画面左にあるマップイベント一覧で別のマップイベントを選択し、画面右のイベントコマンドの上で右クリックを押して「切り取り」「コピー」「全て選択」などを実行。

すると、右クリックを押した位置に選択カーソルが表示されて、画面下にある行数の表示が変化し、見た目はイベントコマンドの編集中のように見えます。

この時に[Del]キーを押すと、イベントコマンドの削除ではなく、マップイベントごと削除してしまいます。

どうもマップイベント一覧でマップイベントを選択して[Del]キーを押すとマップイベントが削除できる機能が実行されているようで、一度でもイベントコマンドを左クリックすると、その後は[Del]キーを押してもイベントコマンドの削除だけになります。

間違えてマップイベントを削除し、さらにマップの保存までしてしまうと、復活させる事が出来なくなるので、マップイベント一覧でマップイベントを選択し、イベントコマンドの上で右クリックが押されたら、処理対象がマップイベント一覧からイベントコマンドへ移行して、[Del]キーを押してもイベントコマンドの削除だけが実行されるように修正された方が良いかと思います。


▼マスク機能の読み込みエラーが緑帯で表示されない事がある

■マスク機能:[マスクを全面[非表示]に塗る]
■マスク機能:[マスクに表示範囲(黒)を追加] =>[aaa.png] X0 Y0 (左上)(または[マスクに非表示範囲(白)を追加])
WoditorEvCOMMAND_START
[290][7,1]<0>(67,0,0,0,0,0,0)("")
[290][7,1]<0>(83,0,0,0,0,0,0)("aaa.png")
WoditorEvCOMMAND_END

上記処理で「aaa.png」が存在しない場合は「ファイル読み込みエラー」が表示されます。
しかしデバッグウィンドウにはエラーが表示されますが、ゲーム画面上には緑帯のエラーが表示されず、ただゲーム画面が停止しているだけになります。
デバッグウィンドウの表示が無い場合は、なぜゲーム画面がフリーズしているのかが分からなくなるので、緑帯のエラーが表示されるようにした方が良いかと思います。

なお、[マスクを全面[非表示]に塗る]以外の設定が黒白の追加設定の前にある場合や、黒白の追加設定だけを単体で設定している場合は、正常に緑帯のエラーが表示されます。


▼主人公の移動速度が「0」か「1」の時のスクロール量が正しくない

マップAに以下のマップイベントを置きます。
マップイベント/並列実行
■ウェイト:1 フレーム
■動作指定:主人公 / 移動速度を設定 => 0(または「1」)
■ループ開始
|■ウェイト:1 フレーム
|■条件分岐(変数): 【1】 Sys35:主人公移動中?(1=YES) マスの間にいるかどうか が 1 と同じ 【2】このEvのセルフ変数0 が 1 と同じ
|-◇分岐: 【1】 [ Sys35:主人公移動中?(1=YES) マスの間にいるかどうか が 1 と同じ ]の場合↓
||■変数操作: このEvのセルフ変数0 = 1 + 0
||■
|-◇分岐: 【2】 [ このEvのセルフ変数0 が 1 と同じ ]の場合↓
||■変数操作: このEvのセルフ変数0 = 0 + 0
||■デバッグ文:\sys[104] \sys[105]
||■
|◇分岐終了◇
|■
◇ループここまで◇◇

WoditorEvCOMMAND_START
[180][1,0]<0>(1)()
[103][1,1]<0>()("【動作指定】主人公 / 移動速度を設定 => 0")
[170][0,0]<0>()()
[180][1,0]<1>(1)()
[111][7,0]<1>(2,9000035,1,2,1100000,1,2)()
[401][1,0]<1>(1)()
[121][4,0]<2>(1100000,1,0,0)()
[0][0,0]<2>()()
[401][1,0]<1>(2)()
[121][4,0]<2>(1100000,0,0,0)()
[106][0,1]<2>()("\sys[104] \sys[105]")
[0][0,0]<2>()()
[499][0,0]<1>()()
[0][0,0]<1>()()
[498][0,0]<0>()()
WoditorEvCOMMAND_END
※【動作指定】は手作業で設定して下さい。

この状態でテストプレイを開始し、マップAのスタート地点で右へ一歩進むと、Sys104が「88」から「95」となり、スクロール量が「+8」ではなく「+7」になります。
下へ移動した時も「224」から「231」で「+7」になります。
さらに下へ進んだ場合は「231」から「239」になるので、移動する度に[+7」ではなく、正しいスクロール位置から「減算1」になっているようです。
左や上へ移動する場合や移動速度が「2以上」の場合は正常値になります。


▼マニュアルの表記に関して

最近「最も上にあるチップ番号(1-31:オート,32-:etc…)」の表記に変わりましたが、公式マニュアルの方も変えた方が良いかと思います。
ウディタ1仕様のままなので。