【ウディタ解説】戦闘不能時は経験値を入手できないようにする【改造】

こんにちは、レビニアよ。今回の解説は「基本システムで戦闘不能時に経験値を入手不可にする方法」よ。


基本システムでゲームを作ったことがある人なら気づいていると思うけど、戦闘不能状態で戦闘を終了した場合でも、


普通に経験値が入手できてレベルアップもしてしまうわ。これは一般的なRPGではあまり見ない仕様よね。

でもそれほど難しくない改造で戦闘不能時は入手できないように変えられるわ。やってみましょう。

基本システムを改造して戦闘不能時は経験値を入手できないようにする


改造するのは「200-X┣◆戦利品獲得処理」よ。バックアップを残すために空きIDにコピーしてそちら(IDの大きい方)を改造しましょう。

※このコモンは以前の記事「【ウディタ】いろんな戦績を記録してみる②」でも改造を行っているわ。もしこちらでコモンをコピペしての改造を既に行っている場合は、新たにコピーせず改造済みコモンの方で追加修正してね。


まず最初にセルフ変数を1つ追加で使うから名前をつけて頂戴(今回は30番を使用)。
→セルフ変数30番に「残HP」と名前をつける

「残HP」という変数名で察しがつくかしら。そう、「戦闘終了時の各キャラの残りHPを調べて0なら経験値を与えない」ということをするのよ。


修正箇所は72行目(コモン未改造の場合)。ループ処理でパーティメンバーへ順番に経験値を与えている部分ね。ここにまず各キャラの残りHPを取得するDB読込を入れるわ。
→可変DB読込:「×┏ 戦闘一時ステータス[基]ー(セルフ変数10番)-HP」をセルフ変数30番に代入する


ちなみに「×┏ 戦闘一時ステータス[基]」というのは、戦闘中の味方と敵のパラメータを格納している一時DBよ。戦闘終了時にここの項目「HP」を参照すれば、そのキャラが健在か戦闘不能かがわかるわね。

※3番に「戦闘不能?」という項目もあるから、こちらを参照してもいいのかもしれないけど、今回は残HPで判断するわ。


セルフ変数30番に格納した一時DBのHPを条件分岐で判別して、0ならループ中の処理を飛ばす(開始に戻す)。これで戦闘不能=経験値を与えないということができるわね。
→条件分岐:「セルフ変数30番が0と同じ」を作成
→分岐1:イベント制御「ループ開始へ戻る」を入力

※ちなみに回数付きループ内で「ループ開始へ戻る」を使用した場合でもループ回数は消費されるからご心配なく。

コモンの改造はこれでOKよ。簡単だったわね。

戦闘不能時に経験値が入らないか試してみる


それじゃ実際に確認しましょう。戦闘前の状態がこちら。戦闘してみるわね


私とニワトリが戦闘不能になって勝利。生存したエディはレベルが上がったわ。


戦闘後の状態。生存したエディは経験値を入手してレベルが上がったけど、死亡した私とニワトリは戦闘前と一緒。経験値を入手できていないわ。改造はうまくいったようね。

基本システムで戦闘不能時に経験値を入手不可にする方法はこんな感じよ。

戦闘不能なのに戦闘で成長しちゃうって言うのは、なんというか、やっぱり変よね(まぁそんなRPGもあったような気もするけど)。個人的にも好ましくないかなぁ。

基本システムでゲームを作るのなら、この改造はやっておいた方がいいと思うわ。

コメント

  1. 初心者 より:

    まったく同じようにしたのですが、キャラが死んでも経験値が入ってレベルアップしてしまいます。わけがわかりません…

    • レビニア より:

      初心者 さん
      初期状態のウディタで記事のとおり改造を行ったところ
      想定通り戦闘不能者には経験値が加算されませんでした。
      コモンのスクショ等見せてもらえれば調査できますよ。