GOREとにゃんこの桃源郷

主観的にCDのレビューやら、日記やら、色々と。
ゴアとかメタルとかロックとか

RPGツクールVXAce~敵が次々出現の巻~

2019-01-23 | RPGツクールMZ,VXace,VX,2000,95,1~5
 また色々と頑張っている次第だ。今回は疑似的な「仲間呼び」、「復活」の時のバトルイベントを作った。

 バトルイベント上で、「ターン終了時」、タイミングは「ターン」にする。これで、ターン終了時(毎ターン)に一度だけ実行される。内容は、敵メンバー1が死亡している時、その敵を全回復させる、且つ、「~が現れた!」とメッセージを出力する。敵メンバーは今回4体なので、4体分同じように設定する。

 ありがちなイベントなのに何故わざわざ記事に起こすのか。それは、同じ敵キャラに付与されるA~Zの所謂レターも次のナンバリングが出るようにしたから。上の画像のように、スライムAが倒されるとスライムAが復活するのだが、名前がスライムEになる。もう一度スライムE(中身はスライムA)を倒すとスライムFとして復活するし、BやCでもG、H…と次のレターになるので、プレイヤーは復活ではなく出現したと思うに違いない。でも、経験値やゴールドまで増やすの面倒だから、該当の敵はどちらも0にしてしまった。これもやろうと思えば死亡時に変数に加算させて取得できる。ただしイベントコマンドじゃないほうのスクリプト上、経験値やゴールドの取得数のとこに+$game_variables[??]みたいに書き込む必要がある。

 実際の作り方1.変数初期化のためのイベントを戦闘開始時に設定。画像では変数11を敵を倒した実数とし、変数12を敵に付くレター用のカウントにしている。初期値を3にしているのは、最初に出現する敵が4匹のため。
※バトルメンバーのカウントは1~ではなく0~になるため、0,1,2,3で初期値を3にしている。
ちなみに敵のレター情報はそのまま取得することが出来ないので、変数88に直接代入した。$game_troopの頭のほうに載っているのでコピペ。半角と全角の2種類あるのは、日本語用と英語用で分けているため。
また、敵を倒す度に1加算する変数11と12で分けているのは、レターZまで行った後に出現させる敵をAに戻るため。


バトルイベント2ページ目、実際のイベント内容を上から説明。
変数11が22以下の時だけ実行。⇒敵23体以降は復活しない(出現させない)。
変数13はイベント開始時に変数11(倒した数)代入して、イベントの最後で値が一致しない時、出現したと判断させ「~が出現した!」とメッセージ表示させるために利用。スイッチでも可。
1.スライムが死亡⇒敵1のスライムが死亡している場合の処理。
変数11と変数12それぞれ1加算し、敵1を全回復させる。
スクリプト:変数88をvとし、トループメンバーをtとする⇒イベントコマンドのスクリプトは文字数制限が厳しいため、グローバル変数はこうして文字数の省略を図っているだけ。
変数12が25を超えている(26以上)時、変数12は0にする。※今回は敵倒したのが22以下の時だけ実行されるように条件分岐したので実際はこの命令が実行されることは無いが、もし26体以上まで戦闘を続けさせたいなら必要。
最後に、$game_troop.members[0].letterを、変数88のレター情報から変数12番目のものに変更する。スライム2ならt[1]、3ならt[2]になる。

最後に、インスタントやローカルではない実際の変数($game_variable)に配列を入れる場合の注意。配列以外でも、数値以外の時は同様に注意。同じ変数をマップイベントの実行条件として設定していると、数値以外のものが入っているということでエラーが出る。マップの情報は、そのマップに進入した段階で、そのマップ上の全イベント含め情報が読み込まれる。よって、マップ進入した瞬間にイベント開始条件が不正というエラーになる。なので数値以外で使う時は使用後に適宜0を代入するなりしてリセットしておくと安心。とはいえ、イベントの開始条件に利用しなければ何も起きないので気にしなくても平気。

お疲れ~。


 やっぱり、せっかく敵倒して何も無しは侘しさが募るので、経験値とゴールドも追加されるようにした。
・Scene_Battle開始処理や終了処理などどこでもいいので該当変数に0が代入されるようにする。
・敵が出現するタイミングで$game_variables[107] += $game_troop.members[0].expと
$game_variables[108] += $game_troop.members[0].goldを追加。
※出現と同時に加算されるので、敵が逃げてもこの分だけ増えるので逃げない敵専用。

$game_troop内のスクリプトを変更。
#--------------------------------------------------------------------------
# ● 経験値の合計計算
#--------------------------------------------------------------------------
def exp_total
dead_members.inject(0) {|r, enemy| r += enemy.exp } + $game_variables[107]
end
#--------------------------------------------------------------------------
# ● お金の合計計算
#--------------------------------------------------------------------------
def gold_total
dead_members.inject(0) {|r, enemy| r += enemy.gold } * gold_rate + $game_variables[108]
end


最新の画像もっと見る

コメントを投稿