【暗黙の仕様】

 WOLF RPGエディターで全体にわたって影響する、最初は気付きにくい仕様について説明します。

<一覧>  (クリックすると詳細へ飛びます)
【1】数値欄に100万以上の数値を入力すると「変数」が読み込まれる
【2】それぞれのマップイベントは10個のセルフ変数を持ち、それぞれのコモンイベントは100個のセルフ変数を持つ
【3】コモンイベントはマップイベントより高速処理される(& コモン内で±21億超えると数値が逆転する)
【4】イベントが実行される順番は 並列マップEv→自動マップEv→自動コモンEv→並列コモンEvの順
【5】並列イベントはイベント途中でも起動条件が満たされなくなった直後に終了する。
   が、本当は「その直後のウェイト時や、ウェイトが起きそうな処理」まで処理が続く

【6】Dataフォルダが存在しないときにEditor.exeを起動すると新規データが作れる
【7】キャラクターを移動させる際、通行不能マスと1/4マスでも重なってると動けないが
   イベントと重なっている場合は(1移動で抜けられる場合のみ)動ける



【1】 数値欄に100万以上の数値を入力すると「変数」が読み込まれる。

 ほとんどの数値欄は、1000000(100万)以上の値を入れることで「変数の値」を読み込むことができます。

 以下は「ピクチャ」コマンドへの数値入力例です。
 


 詳しいことは【変数呼び出し値 一覧】をご覧ください。
 

【2】 それぞれのマップイベントは10個のセルフ変数を持ち、
   それぞれのコモンイベントは100個のセルフ変数を持つ。

 各マップイベントは、そのイベント内だけで使える「マップセルフ変数」を10個持っています。
 「セルフ変数」は言葉の通り、「そのイベント自身が持っている変数」で、たとえば
「マップイベント0番のセルフ変数1」の値を変更しても、他のマップイベントのセルフ変数1は変化しません。

 同様に、各コモンイベントにはコモンイベント内で使える「コモンセルフ変数」を100個持っています。
 コモンセルフ変数の「0〜4番、10〜100番」は数値だけ入れられる変数で、
「5〜9番」は文字列だけを入れられる変数となっています。

 どうして「セルフ変数」が用意されているのかというと、「そのイベント内でしか使わない変数」がとても多いからです。

 例えば、ある宝箱がすでに開かれているかを記録するなら、宝箱イベントのセルフ変数0番が「0」ならまだ開いてない、
「1」ならもう開かれている、という前提で処理を作ればいいわけです。
 この宝箱のようなケースでいちいち新しい「通常変数」(どのイベントからでも変更できる変数)を作るのは面倒ですし、
通常変数に頼ると他の場所でうっかりその通常変数が変わってしまったとき、どこで数値が変わったのか
分からなくなることも出てきます。セルフ変数で対応できることは、なるべくセルフ変数で処理した方が安全です。
 



【3】 コモンイベントはマップイベントより高速処理される
  (& コモン内で±21億超えると数値が逆転する)
 実はコモンイベント内のコマンドは、マップイベントに比べて平均5〜10倍以上の速度で実行されます。
 直接「自動起動」や「並列起動」するコモンイベントだけでなく、
「マップイベントから呼び出されるコモンイベント」も高速化されています。

 これはゲーム起動時に、プログラム的に非常に単純な処理で実行しても安全だと判断された
コモンイベント内のコマンドだけ「最適化」され、高速モードで実行されるためです。

 たとえば『変数操作』コマンドの場合なら、チェックボックスを全てオフにした状態ならば
ほとんどの場合は最適化され、高速に実行されるようになります。
(「結果を±999999に収める」や「実数計算「X番の変数呼出」など
  何か1つでもチェックをオンにすると高速処理されなくなります)


【コモンイベント側だけで起きる副作用】
 ただし高速化されるかわりに副作用もあり、コモンイベント内で最適化された計算は、
オプションなしだと2147483647(約21.5億)より大きい値になると-2147483647になる、
といった±が逆転する現象が発生します。
 いったん1000倍にして計算する場合などによく数値があふれがちなので注意してください。

 この現象を起こさないようにしたい場合は、「変数操作」なら何かのチェックボックスを入れて計算してください。
高速処理モードでなければ、どんなに増減しても「±20億」で数値が止まるようになります。
 



【4】イベントが実行される順番は
  並列マップEv→自動マップEv→自動コモンEv→並列コモンEvの順
 ややマニアックな話ですが、同時に起動条件が満たされた場合、
イベントが実行される優先順は以下のようになっています。

  並列マップイベント→自動マップイベント→自動コモンイベント→並列コモンイベント
   ※それぞれイベントIDが小さい方から大きい順に実行。
   ※『自動イベント』は1つでも実行中だと他の自動イベントは発生しません。
   ※『並列イベント』は他のあらゆるイベントが実行中でも条件を満たせば実行されます。

 なので「このフレーム中に行われた全処理数」を知りたい場合は、一番最後の処理になる
コモンイベントの一番下のID」に「並列起動」のコモンイベントを作り、
その中で「このフレーム中の処理数」を取得すればいいわけです。

 同様に、「RPG基本システム」の初期化処理(ウィンドウの表示位置などを設定しています)は
最後の「並列コモンEv」内で行われているので、マップイベント側で1フレームのウェイトをしないと
初期化が実行されません。
 サンプルゲームのタイトル処理で、最初に1フレームのウェイトを入れているのはそのためです。



【5】並列イベントはイベント途中でも起動条件が満たされなくなった直後に終了する。
  が、本当は「その直後のウェイト時や、ウェイトが起きそうな処理」まで処理が続く
 「並列実行」イベントは、一般的には
イベントの途中であろうが、起動条件が満たされなくなった直後に終了する
のですが、実はその後もちょっとだけ処理が続けられる場合があります。

 というのも、高速化のために「一気にやれる処理は一気に行う」という内部処理で動作しているため、
「変数操作」によって並列イベントの起動条件が満たされなくなったとしても、
その後の『ウェイトが発生しうる処理』『処理の中断可能性があるコマンド』のところまでは
実行され続ける場合があるのです。

 たとえば「並列実行」イベントの起動条件「V1 が 0 のとき」で以下の処理が実行された場合……。


■変数操作: V1[] = 1 + 0   ← ここでV1=1になるので起動条件が満たされなくなるが……
■変数操作: V2[] = 1 + 0   ← 実は続けてこの処理も実行される
■ウェイト:1 フレーム  ←ここでようやく並列実行イベントが止まる
■変数操作: V3[] = 2 + 0  ←この処理は実行されない


 V1が「1」になった時点で条件が満たされなくなるのでそのタイミングで止まりそうですが、
実際にイベントが終了するのは3つめの「ウェイト」処理のタイミングで、
その間にある「V2 = 1」の処理は実行されます。
 想定外の処理が行われる場合もあるので、起動条件から外れる変数操作をするときは
安全のために、その直後に「イベント処理中断」を入れるのがよいでしょう。


 なお「並列イベント」のこの挙動に対して、「自動実行」イベントの方は途中で起動条件が
満たされなくなってもいったん最後まで処理が実行され続けます



【6】 Dataフォルダが存在しないときにEditor.exeを起動すると新規データが作れる
 実は、「Data」フォルダが存在しないときにEditor.exeを起動すると、
以下のような新規データを作る画面が表示されます。

  

 『RPG基本システム入り空データ』には、「RPG基本システム」関連データと、
マップとして「タイトル画面」「スタート後画面」の2つ、そしていくらかの素材が入っています。
この状態からテストプレイしてできることは、タイトル画面の選択肢と、スタート後にキャンセルキーで
メニュー展開ができること、そして孤島でキャラクターを移動させることだけです。

 『完全初期データ』は本当に最低限のデータだけで他に何も入っていません。
テストプレイを実行しても、真っ暗な画面が表示されるだけで、何のキーを押しても何も起こりません。

 どちらも、Data作成してすぐに編集、ならびにテストプレイが可能になっています。
 必要な方で開発を始めてください。

 
【7】キャラクターを移動させる際、通行不能マスと1/4マスでも重なってると動けないが
  イベントと重なっている場合は(1移動で抜けられる場合のみ)動ける
 実はキャラクターを移動させる際、

 ●そのキャラが「通行不能マス」と1/4でも重なっていると、そのキャラは動けなくなる。

 ●そのキャラが「他の通行不能マップイベント」と重なっている場合、1移動で通行可能な場所に
  出られる場合に限り、そこから移動できる。
 (半歩移動なら半分まで重なっても平気、全歩移動なら完全に重なっても移動できる)

 という仕様の差があります。

 この仕様の使い所はあまりないかもしれませんが、
「少しでも重なると動けなくなるギミック」を作るときは「チップ処理」でマップ書き換えし、
「半分重なっても逃げられるイベント」を作る場合は「マップイベント」で作る、
といった使い分けができるかもしれません。