特定の条件でエンカウンター頻度を変える
気がついたら1か月書いてませんでした
DQ2リメイクの本編部分は概ね開発もデバッグも済んで、勝手に追加する後日談の部分をやっていました。まぁ必要なシステムはほぼできあがっているので、そこから先はツクール内部でぽちぽちやるのがほとんどで、ここにあえて書きたくなるようなことがあまりなかったんですね。
↑ダンジョン自動生成機能なんかもちょっと使ってみました
エンカウンター頻度を変えたい状況
ただ、後日談の妄想を進めるうちに別のプラグインがほしくなる状況が発生しました。
ハーゴン討伐から3年後という設定なので、ワールドマップのエンカウンター頻度を下げたんですが、話が進んでふたたび危機が訪れたときにそのままの頻度だとそぐわないな、と。
当初は、プラグインとして切り出すまでもない雑処理をまとめている部分に該当のスイッチや変数の条件を直書きしてマップの敵出現歩数を変更してたんですが、よく考えたらこれはプラグインとして切り出せる機能だなということに気がついて、切り出すことにしました。
設計・実装の概要
需要はあまり感じませんが備忘録がてら設計と実装の概要について書いておきます。
プラグイン側で設定として持つ内容
今回は「プラグイン側でかかえている複数の条件を順に確認して合致したら処理を適用」というつくりが適していそうだったので、プラグインが設定として持つ内容としては
[
{
mapId: (適用先のマップID),
switch: (スイッチの条件),
variable: (変数の条件),
encounterStep: (変更後の敵出現歩数),
},
{
map...
},
...
]
こういう形のデータがほしいわけです。こういうことできないのかなと少し調べてみたところ、プラグインパラメータとして struct というのがあるようでした。「構造体」……学生時代にCで挫折した記憶がよぎりますが、これは単にプラグインパラメータとしてクラスもどきを定義してそれの配列を持っておこうという発想みたいですね。
処理本体
マップから敵出現歩数を読み出す部分は Game_Map.prototype.encounterStep に書いてあるので、これをいじります。これのもとの処理の前段に、条件の判別部分を割り込ませて、条件に合致したらプラグイン設定から読み込んだ値を返して、なにも合致しなければもともとの処理の結果をそのまま返してやる、という形にすればOKぽいですね。
今回はスイッチの条件と変数の条件で実装しましたが、スイッチと変数両方の条件を設定してるのか片方だけなのかで分岐が思ったより多くて、ベタで書くとものすごく読みづらいコードになりそうだったので、条件判別部分をざっくりfunctionで分けて書いたのがポインヨといえばポインヨです。これでループの中がクッソ長くならずにシュッとしました。
ダウンロードはこちら
CSVN_conditionalEncounterStep.js
※右クリックでDL。