【サイトについて】
* RPGツクールMVを使った、ゲームを一層楽しくするためのアイディアや、豆知識、プラグインなどを紹介していきます。あくまで個人の考えに基づく記事ですので、参考程度にお読みいただければ幸いです。
<< RPG序盤の雑魚戦のバランスについて | main | 戦闘行動を「ものまね」するスキル >>
スポンサーサイト
0

    一定期間更新がないため広告を表示しています

    | - | |- |
    ストレスフリーな「逃げる」を目指す
    0
      おはようございます。
      RPGにおいて戦闘から「逃げる」コマンドを使っていますか?
      「敵に尻など見せるものか!」と息巻いて絶対に逃げないという姿勢の人を除いては
      かなりの人が多用するコマンドだと思います。



      逃げる理由としては
      (1) 厄介な敵なので戦闘を避けたい
      (2) エンカウント率が高すぎて面倒くさい
      (3) 死屍累々なので逃げて全滅を防ぐ
      (4) ボス戦まで体力を温存したい
      (5) レベルの低い雑魚とはいちいち戦う必要も無い
      大体このパターンでは無いでしょうか?
      しかし(5)以外で「逃げる」を実行すると逃走失敗というパターンが多いですよね。

      ツクールMVのデフォルトの逃走率はこうです。

      0.5 × 仲間全員の敏捷性の平均値 ÷ 敵の敏捷性の平均値

      たとえば、味方の敏捷性平均値が80で、敵の平均が40だとします。
      この時計算式は0.5*80/40で1。
      つまり平均2倍以上の差があれば、100%逃げられる計算となります。
      味方の敏捷性平均値がちょっと足りずに75の場合は0.9375。
      93.7%の確率で逃げられ、6.3%の確率で失敗する、という事です。

      逆に考えましょう。
      自分より圧倒的に強い敵。たとえば味方の平均が40、敵の平均が200だとしますよね。
      計算式は0.5*40/200になるので、0.1。
      この時は「10%の確率でしか逃げられない」という結果に陥ります。

      「これじゃあ何度逃げても殆ど失敗じゃないか!」と憤慨している方は落ち着いてください。rpg_managers.jsの2394行目あたりにこんな記述があります。
          if (success) {
              this.displayEscapeSuccessMessage();
              this._escaped = true;
              this.processAbort();
          } else {
              this.displayEscapeFailureMessage();
              this._escapeRatio += 0.1;
              $gameParty.clearActions();
              this.startTurn();
          }

      逃走に失敗するごとに、逃走率計算式に0.1がプラスされるのです。
      ということは10%の確率でしか逃げられない戦闘であっても、2回目の逃走では20%、3回目の逃走では30%、最低でも10回の試行で100%逃げられるという計算式になっています。まあ大抵そこまで差がついている戦闘において10回も逃走するとズタボロになっていると思いますが…。

      ここまで見ると一瞬「うむ。なかなかバランスのとれている逃走計算じゃないか」と思っちゃいますよね。
      果たしてそうでしょうか??
      事あるごとに言っているかも知れませんが、ツクールの乱数は偏りがちです。この様に歴然たる敏捷差のある戦闘において10%を3連続引くこともあれば、10回連続で逃げられないことが延々続く状況も普通に起こり得るのです。

      全ての敵からさくさく逃げられると道中は楽ですがレベルが低いままボスに挑む事になって面倒くさい事になりますし、全ての敵から逃げにくいとイライラさせられっ放しです。さすがに10回も逃げるを実行し続けるプレイヤーさんは少ないですよね。ストレスフリーな逃走計算式であるとは言えません。

      では、どうするか、という回答の前に、「どこをいじればこの逃走計算が変更できるのか」を見ておきましょう。
      rpg_managers.jsの1993〜1995行目です。
       
      BattleManager.makeEscapeRatio = function() {
          this._escapeRatio = 0.5 * $gameParty.agility() / $gameTroop.agility();
      };

      this._escapeRatio=のあとの計算式ですね。
      計算結果では、(限りなく0に近い数値)から1までの数値のどれかが算出される式です。

      「すばやさに影響せず戦闘で確実に逃げられる様にしたい」という方は、計算式をざっくり消して1にしちゃってください。
      this._escapeRatio = 1;

      「すばやさに影響せず50%の確率で逃げられる様にしたい」という方は、そのまんま50%、つまり0.5を右辺にそのまんま入れてください。
      this._escapeRatio = 0.5;

      「勝負の鍵は運だ!オレは素早さじゃなく運のみを影響させたいんだ!」という方は、
      this._escapeRatio = 0.5 * $gameParty.luklity / $gameTroop.luklity();

      とした上で、自作プラグインの中に下記を追記しておくと良いでしょう。
       
      Game_Unit.prototype.luklity = function() {
          var members = this.members();
          if (members.length === 0) {
              return 1;
          }
          var sum = members.reduce(function(r, member) {
              return r + member.luk;
          }, 0);
          return sum / members.length;
      };

      こんな風にカスタマイズすると色々楽しめますよね。

      「確実に先手を取られる敏捷性をもつ強敵だが、逃げようと思えば100%逃げられる敵」とか、「素早さがゼロのくせになかなか逃がしてくれない敵」とかは、この式をうまくいじる事で実装出来るはずです。

      逃走計算に正解はありません。作者さんの好みです。
      しかし「ここぞ」という時に逃走コマンドで成功する事は、プレイヤーにとってストレスを与えない結果に繋がりますので、ぜひ最適な計算式を見つけ出してみると良いでしょう。

      ちなみに私の個人的な好みは「100%逃走可能」です。
      FFでいう「とんずら」を常時実行出来る状況です。
      「おいおいそんなの甘すぎるわ」「ぬるすぎるわ」「もはやRPGじゃねーよ」「何考えてんだ」という意見が大量のタライやバケツとともに降って来そうなので、逃げる事によるデメリットはもう少し必要という作者さんも多いと思います。
      逃げると経験値が得られないので「レベルが上がりにくい」というデメリットは既に上にも書いた通りですが、​100%逃げられる仕様にした場合は、通常の逃走式よりももう少しだけ何らかの代償的要素は必要かも知れませんね。

      要は、あくまでプレイヤーが面倒と感じた戦闘にのみ逃走が100%成功すればいいのですから、多用し過ぎを防ぐという意味では、下の様なやり方があります。

      かのスーパーファミコンの名作「ファイナルファンタジー4」。逃走はLRボタンを押しっぱなしで、殆どの雑魚敵で楽々出来ますが、ゴールドを大量に落とすという地味にいやらしい代償がありました。

      あの仕様がちょっと面白いのでちょっと再現してみます。

      FF4の逃走におけるデメリットの仕様は「勝利すると手に入るGの25%を失う」です。
      つまり1000G手に入る戦闘では、所持金から250Gを失います。



      自作プラグインに、下記の様に追記します。
       
      Game_Troop.prototype.LostgoldTotal = function() {
          return this.aliveMembers().reduce(function(r, enemy) {
              return r + enemy.gold();
          }, 0) * this.goldRate();
      };

      ある程度敵を倒してから逃走する場合、その倒した敵についてはゴールドは失わない仕様です。
      あとはrpg_managers.jsの先ほどの逃走成功処理に足してください。
       
          if (success) {
              this.displayEscapeSuccessMessage();
              var lsgold = Math.floor($gameTroop.LostgoldTotal() * 0.25);
              $gameMessage.add(lsgold  + TextManager.currencyUnit +  "を落っことした!");
              $gameParty.loseGold(lsgold);

              this._escaped = true;
              this.processAbort();
          } else {

      (※注意 rpg_managers.jsの文字コードがUTF-8で無い場合は文字化けします)
      「分かりにくい」「自作プラグインって何ぞや?」という方は、一度このブログのカテゴリ「プラグイン」を参考いただければ幸いです。一応ここで書いたプラグインを下記においておきますね。

      EscapeGoldLost.js
      (javascriptが直接表示されるブラウザの場合は右クリックで「別名でファイル保存」などで保存ください)

      もちろん「25%もG落とすんじゃ余計にストレスたまるだろ!」というプレイヤーさんもいますので、この数値は0.005%の様に出来るだけ低く設定するとか、敵からのお宝ドロップの確率をあげるというのも有りだと思います。
      | 戦闘 | 10:34 |- |
      スポンサーサイト
      0
        | - | 10:34 |- |
        PR