ツクールでマップ上にキャラやシンボルを出現させるためには、俗にいう「イベント」を設定する。
そのマップで起きるイベントは、あらかじめ設定しておかなければならない。
しかし、ランダムな位置に出現させたり出たり出なかったりの不確定要素も加えたい!
そう思うことはよくあっただろう。
これを擬似的に表現する手段として一つの方法は・・
1.イベントページ1を並列処理にして、マップに入った瞬間に乱数を判定
2.判定OKならランダムな位置に移動させセルフスイッチAをON、NGならイベントの一時消去を行う
3.セルフスイッチAのページに本処理を書く
まずはこれでマップに入った時に、特定の出現率でランダムな位置に現れるような仕組みが作れる。
ただこれだと、次に入った時にセルフスイッチAが入ったままなので、再度現れることがなくなってしまう。
そこで、マップに入ったときにセルフスイッチAをOFFにする仕組みが必要になる。
リフレッシュ判定用のスイッチを一つ用意して、マップ移動時にONにしておき、
そのスイッチが入ってるとき各イベントで並列処理でAオフにさせていく、なんてやり方もある。
for i in 1..$game_map.events.values.size
next if $game_map.events[i] == nil
$game_self_switches[[@map_id, i, "A"]] = false
end
スクリプトでやるなら↑のようなものを実行して、一括でリフレッシュさせることもできる。
これで「マップに入る度に出現するイベント」のギミックができた。
けれど、敵シンボルなどは出入りする度に一定数現れるのでもいいけれど、
宝箱など、プレイヤーメリットになるものは出入りだけで単純に出現してしまうと、
今度は出入り口に陣とって行ったり来たりするのが効率の良い稼ぎ方になってしまう。
探索感が損なわれてしまうので、それは個人的にあまり望ましくない。
なのでさらに、一定ターンの行動数毎にリフレッシュフラグを立てるという仕組みに行き着いた。
これならばフラグが立っていない状態でマップ移動を行うと、宝箱の出現判定で減ることはあっても増えることがない。
ある程度探索してから次に進む方が効率の良い宝箱収集になる、という目論み。
前作はこんな感じの方法を駆使して作られていて、エディタ上では適当に置かれていた模様。

さて・・ここまでは、前作までの方法にすぎない。なんと、イベント自体をスクリプトで追加することができるようになってしまった。

部分的にはこんな感じでできた。(もしかしたら何かしらまだ不具合はあるかもだが)
ヘルプのリファレンスを読み込んでいけば、大抵のことは実現可能なようだ。
こうなると何が嬉しいかというと・・

もうこのマップにタグ設定するだけで敵が湧く・・
各種設定はスクリプト側で一括修正すればいいので管理も楽!好きなタイミングや間隔も調整しやすくなった。
エンカウント欄をメモ代わりに使うのはちょっとオススメな方法だったりする。
Comment