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

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

    | - | |- |
    戦闘行動ターンについてのおぼえがき
    0

      今回は戦闘行動の「ターン」についてです。

      と言っても多分MV以前のツクールからそうだと思いますし、初心者の私以外は皆知っている事だとは思いますが、私による私のためのおぼえがきという事で…。

       

      ■ターン0の扱いが、「敵キャラの行動パターン」と「バトルイベント」で異なる

       

      敵キャラの行動設定を行う時、

      「ターン1」に入れると、なぜかその特技を1ターン目には使用せず、2ターン目になってしまうんですよね

      敵の1ターン目に行動させたい時は「ターン0」に入れると使用する様になりますが、バトルイベントではターン0は戦闘開始直後に発生するイベントのため、何となくこのズレに不自然さを感じざるを得ませんが……。

       

       

      ■ローテーション行動について

       

      上記の通りで、ターン1に行動させたいものを「ターン0」にいれます。

       

      たとえば

      1ターン目・5ターン目・9ターン目 ポイントショット

      2ターン目・6ターン目・10ターン目 スタンショット

      3ターン目・7ターン目・11ターン目 チームショット

      4ターン目・8ターン目・12ターン目 レインショット

      というローテーション行動を敵にさせたいとします。

       

      設定値は以下の通りです。

       

       

      1+4*xで x=0の時は1、x=1の時は5、x=2の時は9となりますので、1+4*xは1、5、9ターンを示し、

      2+4*xは x=0の時は2、x=1の時は6、x=2の時は10となりますので、2+4*xは2、6、10ターンを示します。

      こういう計算式が成り立つわけです。

       

      つまり 行動順+特技の数*x これで完全なるローテーション行動を実装できます。

      あまりローテーションをガチガチに固めすぎると「あ、これはローテだな。次の行動読めるわ」というヌルゲー化してしまう可能性もあるので、下の様な感じで、ローテーション行動でも確率で違う行動を起こすというのもありでしょう。

       

       

      ローテーション行動は強敵の調整にかなり有効に使えます。

      即死級の大ダメージ技が何連続も続いてしまうと回復が追いつかずに萎えてしまうので、次のターンは敵にチャージ行動を入れて立て直す猶予を与える、とかですね。

       

      | 戦闘 | 13:45 |- |
      私的・邪道バトルの作り方
      0

        RPGといえばボスとの熱いバトル。

        主人公達の行く手に立ちふさがる数々のボスモンスター達。

        ある時はライバルキャラ、

        ある時は憎めない敵軍の中堅キャラ、

        そしてある時は絶対討伐不可能な不死身の強敵キャラ。

        剣と魔法が入り乱れ、毒や呪い、石化の魔法などが飛び交う……、

        まさに「王道の戦い」ですよね。

         

        ツクールやウディタなどで個人でも簡単にRPGが作れてしまう時代ですから、王道バトルものというのは非常に数多く存在します。そんな中で私はいつも自分のゲームだけにしか無い要素とか、珍しい要素を取り入れたりしてみて、「単にゴリ押して戦うだけじゃ無いRPG」を作りたいなと常々思っています。

         

        たまには変わったバトルを作ってみたい

        そんな人々向けの記事です。

         

        ただ、邪道なバトルは非常に好き嫌いが分かれる傾向の様で、「面倒くさい事を考えさせられるならひたすらボタン連打でゴリ押し出来た方がサクサクでいい」とか「そういうのは10あるボス戦の中で1あるぐらいで十分」みたいな意見も少なくない様です。やり過ぎは良くないのかなと思いつつも、どんどん取り入れたいのが私の性分で、、。

         

        具体的なバトルのアイディアについて色々ここで書き並べてしまうと、自分の次回作品に使えなくなってしまいそうなので(笑)、今回は私がいつも実践しているアイディアの出し方について、さらっと綴ってみたいと思います。

         

        さて、画面は何の変哲も無い、いつものツクールMVのコウモリです。

         

         

        とりあえず、この2匹をボスと考えましょう。

         

        プレイヤーさんが最初にこの画面を目にした時、どんな印象を受けますか?

        まず考えます。

         

        Aさん「2匹なら全体魔法で一掃の方が楽かな」

        Bさん「俺は一匹ずつ倒す派だな、全体魔法はコスパが悪い」

        Cさん「コウモリだから光属性の魔法が弱点じゃないかな」

        Dさん「宙を浮いてるから地属性の魔法はまず効かないだろう」

        Eさん「吸血して来そうだよね、HP回復されるの厄介だな」

         

        色々あると思いますが、おそらくAさんからEさんまでの共通認識は、

         

        「どっちのコウモリも同じステータスだろう」

         

        という事ではないでしょうか?

         

        「常にプレイヤーの裏をかく」、というのが底意地の汚い私のやり方です。

         

        この二匹が全く同じ敵だと、いつから錯覚していた?

         

        データベースではこの二匹のステータスは以下の様になっています。

         

         

        左側のコウモリは魔法攻撃のみ。魔法力が強く、魔法防御力に優れています。

        そのかわり物理には柔らかいという弱点が存在します。

        右側のコウモリは物理系の攻撃のみ。物理攻撃力が強く、防御力に優れています。

        そのかわり魔法に柔らかく、体力が低いという弱点が存在します。

         

        ヒントがあってもいいとは思います。村人に「森に棲む二匹のコウモリは、魔法が得意な兄コウモリと、物理が得意な弟コウモリだそうじゃ」とでも言わせておけば良いでしょう。

        しかしあえて言わないというのも選択の一つで、実際戦ってみて、プレイヤーがこの法則に気付いた時、そこにある種の爽快感が生まれると思いませんか。私なんて難しいボスの攻略法に気付くとドヤァッ!ってしたくなるタチなので。

        物理の敵からやった方が楽か、それとも魔法の敵からやった方が楽か。プレイヤーに「考える」「選ばせる」「悩ませる」という行動を与えることが出来ますし、単なるゴリ押しで終わってしまうだけの戦闘ではなくなります。

         

        そこまで変わったバトルではないかも知れませんし、ものすごく簡単な例で紹介しましたが、時にプレイヤー心理の裏をかいたボス戦があっても、良い刺激になって面白いと思います。

         

        コウモリ二匹だと思ったら重なって表示されてるだけで実は四匹居るとか、

        ただのコウモリだと思ったら突然ドラゴンに変身して炎を吐くとか、

        一匹倒したらもう一匹のコウモリが逃げてしまう様な群れ習性のコウモリとか、

        ダメージを与えるごとにコウモリが増えていくとか、etc..

        ただコウモリを目の前にどかんと出すだけではなく、いろんなアイディアで戦闘を彩ってみるのも楽しいでしょう。

        | 戦闘 | 14:00 |- |
        分かりやすい戦闘づくり
        0

          サイドビューバトルで敵が複数居る場合、「今どいつが攻撃してきたの!?」かが分かりにくい事があります。

          これは敵の行動時にピカッと光る演出が速い&薄いからだと思います。

           

          行動時に敵が一歩前に動くプラグインはありますが、個人的には敵はその場から動かない方が好きなので、今回は「光る演出」を分かりやすくする方法をとりたいと思います。私がサイドビュー作りのお手本にしているFF6では、敵の行動時に濃いフラッシュが二回ピカピカッと光るので、とても分かりやすいです。

           

           

          ではどこを変えればこのエフェクトを変更出来るのか。

          「敵の行動時の光る演出」について、ツクールデフォルトのソース(v1.3.1)ではこの様になっていました。

           

          rpg_objects.js 4395行目

          Game_Enemy.prototype.performActionStart = function(action) {
              Game_Battler.prototype.performActionStart.call(this, action);
              this.requestEffect('whiten');
          };

           

          敵行動開始時に「whitenしろ」って感じですね。

          whitenとは何ぞやというと「グラフィックの色調を白くしろ」という命令です。

           

          rpg_sprites.js 1057行目

          Sprite_Enemy.prototype.startWhiten = function() {
              this._effectDuration = 16;
          };

           

          16フレーム分の時間で敵を白くしています。

          この値を少し大きくしてやる事で、行動開始時の敵のフラッシュが緩やかになり、

          「あ、こいつが攻撃して来たんだな」という事が分かりやすくなります。

           

          大きくし過ぎると↓次の敵行動開始時にも白いままなので、24〜32ぐらいが最適値ではないでしょうか。

           

           

          敵の行動時は白じゃなく黒にしたいんだという場合は、

           

          rpg_sprites.js 1124行目

          Sprite_Enemy.prototype.updateWhiten = function() {
              var alpha = 128 - (16 - this._effectDuration) * 10;
              this.setBlendColor([255, 255, 255, alpha]);
          };

           

          このsetBlendColorの255の数値をいじってみてください。

          0,0,0にすれば黒く光ります。

           

          FF6の様に「敵の行動時に敵を点滅させたい!」という場合は、

          こんな感じで書いてやると、チカチカッ!バシッ!って感じになります。

           

          rpg_sprites.js 1057行目

          Sprite_Enemy.prototype.startWhiten = function() {
              this._effectDuration = 20;
          };

           

          同じくrpg_sprites.js 1124行目

          Sprite_Enemy.prototype.updateWhiten = function() {
              var alpha = 128 - (16 - this._effectDuration) * 10;
              this.setBlendColor([255, 255, 255, alpha]);
              this.opacity = (this._effectDuration % 10 < 5) ? 255 : 0;
          };

           

          敵にダメージを与えた時の点滅と同じものを、行動開始時演出に加えたものです。

          いかがでしょうか。結構分かりやすくなったと思います。

           

          | 戦闘 | 11:07 |- |
          テンポのいい戦闘を目指す
          0

            サイドビューバトルのお話です。

             

            時に皆さん、「RPGツクールMVのデフォルトの戦闘のテンポはどう思いますか?」

            早すぎず、遅すぎず、絶妙なリズム感といいますか、私はなかなか気に入っています。

             

             

            今回も、私が個人的に感じている事です。

            特定の作品について言っている訳ではなく、また実装しているゲームの作者さまやプラグインの作者さまを悪く言っている訳でもありませんので、あくまで「初心者の私如きがこんな事を言ってやがるぞ」的な意見として、読み飛ばしていただけると幸いです。

             

            最近アニメーションの再生レートをMAXにしたり、高速化のプラグイン等を入れて戦闘が早送り出来る作品があるのですが、何となくそれに不自然さを感じてしまいまして、自分の作品では取り入れていません。取り入れるつもりもありません。

             

            短編では数十回、数百回、長編では数千回の戦闘を要しますよね。

            その戦闘をプレイヤーに「単調」だと感じさせてしまうのは作者の責任です。

            飽きない様にうまく作るのが作者の腕の見せどころといえます。

             

            しかし

             

            「途中のレベル上げや、ボスマップまでの雑魚戦は

             プレイヤーにとって作業だから、早送り出来る様にしよう」

             

            という発想について、私は「あれ??」と思ってしまうのです。

             

            「プレイヤーにレベル上げさせる事を単調作業」と思っているのであれば、そもそも雑魚やボスの経験値を増やすとか、いっそレベルの概念を外してしまうという解決策があり、「雑魚戦ってもしかして邪魔なんじゃないか」と思うのであれば、弱い敵はシンボルに触れた途端倒した事にしてしまったり(MOTHERの様な)、ボスのみのRPGにしてみたりと、色々考えられるわけですが、そんな中でキャラやアニメの動きを速くするという解決策は不自然というか中途半端に思えてしまうんですよね。

            戦闘が目まぐるしい勢いで展開され「戦う戦う戦う!ドドーーン!ズガーン!はい終わり!次〜!」。果たしてこれで戦闘を、そのゲームを、楽しめているのかどうかが私には甚だ疑問です。

             

            キャラの動きが速すぎず、遅すぎず、適度に間があるデフォルトの戦闘テンポ。

            (早回しで不自然な動きをさせるぐらいならいっそそれでいいんじゃないかなぁ、、)

            というのが私の考えです。

             

            ですが。

             

            「でもさぁ、高速化しないと、何かもっさりしてて、イライラするんだよね」

            と感じられる作者さんの大多数は、Yanflyさんのプラグイン「Battle Engine Core」を入れている事が多いのでは無いでしょうか?

            戦闘に華やぎを与える素晴らしいプラグインだと思いますが、プラグインをある程度カスタマイズしなければ、イライラする戦闘テンポだと思います。ツクールMVデフォルトの方がはるかにテンポいいです。

             

            その理由ですが、

             

            (1) 攻撃の時に敵が一歩前に出る

            (2) スキル発動の時にアニメーション「放射線」がいちいち表示され、それが長い

            (3) 攻撃、スキル使用時に何となくウェイトがかかる様な気がする

             

            これらが味方・敵の人数分繰り返されるせいで、何となくもっさりしてるのだと思います。

             

            まず(1)の問題。

            これ、切ってしまっていいと思っています。

            ダメージを受けた時にちょっと下がるのもついでに消してみていいと思います。

            しかしパラメータのStep Distanceを0にすると、敵の前進だけでなく味方の前進まで無くなってしまいますので、Step Distanceは48のままで、敵キャラのノートタグに <Sprite Cannot Move> と書き込むと、敵が動かなくなる様です。

             

            つづいて(2)の問題。

            あれこそBattle Engine Coreデフォルトの最大のです。

            あのキラーーーン……っていうアニメーション、なにげに2〜3秒ぐらいありますよね。

            魔法を使うために前進(〜1秒)→発動アニメーション(2〜3秒)→魔法アニメーション(1秒〜)→敵にダメージ(〜1秒)と、軽く5秒以上はかかってしまいます。

            味方4キャラが全員一斉に魔法を使うと、それだけで20秒以上。その上敵4匹も一斉に魔法を使おうものならさらに倍。サクサク感を演出するためには発動アニメーションを「放射線」から別の短いものに変更するというのが良いかも知れません。

             

            (3)の問題ですが、

            以下の行をプラグイン内に加えてみてください。

             

            Window_BattleLog.prototype.messageSpeed = function() {
                return 0;
            };

             

            速すぎる場合はreturn 0の数値を少しずつ上げて調整。

            この(1)〜(3)の実行だけでも、かなりテンポは良くなると思います。

             

            私はファイナルファンタジー6の戦闘テンポが最も理想的だと考えています。

            人気の市販ゲームのクオリティを参考にして近づける、というのはとても勉強になります。

            キャラの移動速度、アニメーションの表示速度、ダメージポップアップの表示時間、行動間隔……、とても参考になります。

            ぜひ一度チェックしてみてください。

             

            (ゲーム総合チャンネル様のFF6動画より)

             

            | 戦闘 | 11:49 |- |
            シンボルエンカウントに挑戦
            0
              現在、中編作品を1本製作中です。
              諸事情によりタイトルも内容もキャラ名も立ち絵も明かせず語れる事は殆ど無いのですが、今回試みた戦闘システムについてのみ、少し綴ってみようと思います。

              従来の作品と違って、今回「シンボルエンカウント方式」の戦闘に挑戦してみました。



              ランダムエンカウント方式の戦闘が出現率によってプレイヤーにストレスを与えるシステムだとすると、シンボルエンカウント方式の戦闘は「作者にストレスを与えるシステム」といっても過言では無いかも知れません。
              ツクールMVではプラグインが使えるおかげでストレスは半分に抑えられていますが、考える内容は倍以上です。配置する数、配置場所、複数匹に囲まれた時の対応、イベントの修正の手間、一定時間などで敵を復活させる処理etc.. 
              「そんなの適当にすりゃいいじゃん?」なんて感じであちこちに配置しようものなら、四方を敵シンボルに囲まれて、倒した瞬間にすぐ戦闘、倒した瞬間にすぐまた戦闘…などというランダムエンカウント以上にプレイヤーにストレスを与えてしまう結果に繋がるので、いい加減な配置には出来ません。

              そしてもう1つの問題がシンボルのグラフィックです。
              きちんと合った素材を用意しないと「おいおい普通のスライムに当たったはずなのに、出て来たのキングスライムじゃないかよ!」「おいおい、終盤なのに最初の洞窟のコウモリがまだ飛んでるのかよ」てな事になるので、なるべく合わせる工夫をしたいです。モンスターのキャラ素材と戦闘グラフィック素材がセットになっている物って本当に少ないんですよね。

              とにかく大変で大変で、ストレスを「作る楽しみ」に変えられる作者さんになりたいものです。
              | 戦闘 | 13:33 |- |
              戦闘行動を「ものまね」するスキル
              0
                敵味方関係なく、前に行動した者の行動を「ものまね」するスキルを、ちょっと実験がてらに作ってみました。



                いかがでしょうか?

                作り方のヒントとしては、

                (1) 敵または味方が行動するたび、その行動のスキルIDを変数に入れるプラグインを作る
                (2) [コモンイベント]で、そのスキルIDを強制行動するスクリプトを書く
                (3) [スキル]で「ものまね」スキルを作り、コモンイベント(2)を呼び出す

                こんな感じです!
                「味方の行動だけ真似させたい」場合などは(1)をちょっといじる事で実装が出来ます。

                具体的な方法や実際のプラグインは公開しません。
                しかしこのブログのプラグイン講座を読んでくださった方にはきっと難しくないはず…。
                宿題としますので、ぜひぜひチャレンジしてみてください!
                | 戦闘 | 16:28 |- |
                ストレスフリーな「逃げる」を目指す
                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 |- |
                  RPG序盤の雑魚戦のバランスについて
                  0
                    ストーリー重視のRPGの序盤のパターンで多いのは、

                    (1) シナリオ開始
                    (2) 数回の雑魚敵との戦闘
                    (3) 最初のボス戦
                    (4) 次のシナリオへ

                    大体こういう感じですよね。
                    このうち(2)はとても重要で、プレイヤーのモチベーションを左右する非常に大事な場所だと思っています。
                    雑魚敵との戦闘が「長い」「強すぎる」「エンカウントが多い」「単調」だと、たとえシナリオが魅力的でも、いかにボス戦においてスリリングで素晴らしい演出が施されていても、投げられてしまう事は多いのではないでしょうか。

                    私も自作品でうまい調整が出来ているとはお世辞にも言えないのですが、
                    例えばゲーム開始直後、最初のエンカウントがスライムだとして、
                    普通に戦っていて、スライムごときに全滅する」という事があってはならないと思うんです。



                    チュートリアルの時間を除いて一番最初の戦闘は20秒以内にカタをつけたい、というのが個人的な考えです。
                    RPG慣れしていないプレイヤーのためにも「最初は主人公の通常攻撃 一撃で倒せる様にする」のと同時に、そして「その攻撃を敵は回避しない」という調整が望ましいと考えています。
                    ツクールMVの命中率・回避率は、エンカウント率同様、結構偏った判定をしており、味方の命中率95%+敵の回避率5%としている場合でも、2回連続どころか3回連続ミスなんて事もよくあります。「これがこのゲームの最初の相手か!さあ戦うぞ!」という時にいきなりミスを連続で引くと気持ちが萎えるだけでなく、RPGの難易度が高すぎると感じてしまい投げ出すきっかけになる気がします。
                    データベースのモンスターの設定で新規で追加した時のデフォルトの状態では回避率+5%を勝手に入れられているので、これは序盤は外すか確率を低くセットする様にしてみることをおすすめします。

                    空を飛んでいる敵は避けやすいといった特徴を持たせるべく回避率を増やすのは悪くないことだと思います。しかし「これは攻撃が当たりにくいので、別の方法で倒すのだな」と考えられる手段を用意すべきで、魔法や専用武器を使って確実に一撃で倒すという方法があってこそ親切設計といえると思います。少なくとも最初のボスの手前ぐらいまでは一発(1匹につき1ターン)で倒せるほどサクサクであって欲しいんですよね。

                    敵から受けるダメージも、主人公のHPが450ぐらいあれば、



                    序盤の序盤ならこんな感じでいかがでしょうか?
                    約15回ダメージを受けるとHP0になるぐらいの調整です。
                    割とぬるめですが、初期のドラクエなどでもレベル1でHP30程度の主人公キャラに対して、スライム側の攻撃は1とか2ですよね。大体15発で戦闘不能になる計算です。
                    回復手段が豊富であれば、もっとダメージを受けても良い気がしますし、この辺りは作者の好みにもよるとは思いますが、これぐらいが私の好みのバランスです。

                    「作者自身は仕様を知っているからどんな敵でも楽に倒せるかも知れないが、
                     RPG慣れ・ゲーム慣れしていない人は楽に倒せないかも知れない」
                    「序盤はテンポを良くし、飽きさせない様にする」
                    この2点を意識したバランス調整を心がけたいですね。


                    ちなみに「ラハと魔法の園」では序盤の雑魚敵は1戦15〜30秒を計測したバランス調整を行っています。
                    序盤の敵についてはボスを含め一切回避しません。
                    もちろん序盤とは言えすべての雑魚敵が一撃で倒せすぎてしまうのはつまらないので、あくまで序盤の序盤についてのみの考えであり、特徴を持たせるなどして長期戦にならない様な応用した工夫は必要になってくるとは思います。
                    ポカル連打だと逆に時間が掛かる事もあったり、回避・反射魔法持ちという嫌らしい敵に対してはランパクトという有効手段も用意しているので、一部の敵については出来るだけ思考を止めずに戦って欲しいなという希望もありました。

                    あくまで個人的な考察ですが、以上ご参考までに。
                    | 戦闘 | 18:35 |- |
                    魔法をかける時に杖を振る
                    0
                      ハリーポッターの様に魔法をかけるのに魔法の杖を必要とする場合、
                      対象に杖を向けて「エクスペクトォォパトロォナァァム!」って感じで詠唱する…
                      というスタイルが殆どだと思います。

                      RPGツクールMVのデフォルトでは魔法詠唱時に
                      両手を広げて詠唱して、杖がどこかへ消えてしまうんですよね



                      これじゃ杖買う必要まったく無いじゃないか!!
                      というご意見も中には…、
                      いや全然なかったんですけど、昨日自分自身でそう思ってしまって、

                      ↓こうした方が「らしい」じゃないですか。



                      というわけで何とか出来ないかと思って作ってみましたよ。

                      必要となるもの
                      杖の武器画像
                      Javascriptの書き換え(プラグインの作成)
                      これだけです。

                      「杖の武器画像はデフォルトにあるじゃん」と突っ込みが入るかも知れないのですが、デフォルトの杖はドラゴンボールの亀仙人が持ってる様な杖なので、スタイリッシュじゃ無いというか、若々しさに欠けるというか…。

                      というわけで素人ながら作ってみたのです。
                      各プロジェクトのimg/systemフォルダにあるWeapon1.pngの、ヤリ(使わないので)画像を改変し、ポッターが振る様な感じの杖を作りました。





                      これもっと上手に作れる方、ぜひ作っていただけると嬉しいのですが…(汗)

                      また、「ラハと魔法の園」では「ポカル」という名前の、通常攻撃と同じモーションの攻撃方法がありますので、システムタブ[SV]攻撃モーションの「杖」モーションを「突き」にし、画像を新しく作成した杖に変更します。
                      これでポカル使用時に杖でボカッと殴る様な仕草ではなく、杖を相手に向けて見えない衝撃波が加えられている様な効果が得られました。

                      さて、あとはJavascriptの書き換えです。
                      魔法を詠唱する時のモーションはツクール本体側では変更できず、js/rpg_object.jsを書き換える必要があります。

                      js/rpg_object.jsの3992行目です。
                       
                      Game_Actor.prototype.performAction = function(action) {
                          Game_Battler.prototype.performAction.call(this, action);
                          if (action.isAttack()) {
                              this.performAttack();
                          } else if (action.isGuard()) {
                              this.requestMotion('guard');
                          } else if (action.isMagicSkill()) {
                              this.requestMotion('spell');
                          } else if (action.isSkill()) {
                              this.requestMotion('skill');
                          } else if (action.isItem()) {
                              this.requestMotion('item');
                          }
                      };

                      この赤字の部分ですね。
                      「魔法使用時はモーション spell を使え」
                      「スキル使用時はモーション skill を使え」
                      という命令をしています。

                      杖を向けるというモーションに変えたいので、
                      ここの処理ではデフォルトでは武器画像を表示する様に作られてないので、
                      そのための処理を別途加えてやる必要があります。

                      こう書き換えます。
                       
                          Game_Actor.prototype.performAction = function(action) {
                              Game_Battler.prototype.performAction.call(this, action);
                              // 武器画像を表示するための準備
                              var weapons = this.weapons();
                              var wtypeId = weapons[0] ? weapons[0].wtypeId : 0;
                              var attackMotion = $dataSystem.attackMotions[wtypeId];

                              if (action.isAttack()) {
                                  this.performAttack();
                              } else if (action.isGuard()) {
                                  this.requestMotion('guard');
                              } else if (action.isMagicSkill()) {
                                  // モーションを突きに変更
                                  this.requestMotion('thrust');
                                  // 杖画像を表示
                                  this.startWeaponAnimation(attackMotion.weaponImageId);

                              } else if (action.isSkill()) {
                                  // モーションを突きに変更
                                  this.requestMotion('thrust');
                                  // 杖画像を表示
                                  this.startWeaponAnimation(attackMotion.weaponImageId);

                              } else if (action.isItem()) {
                                  this.requestMotion('item');
                              }
                          };

                      これで魔法を使う時に杖(装備している武器)を使い、
                      モーション「突き(thrust)」を実行する様に変更ができました。
                      (何で「突き」モーションかと言うと、対象に向けてまっすぐ杖を差し出すからです)

                      というわけでこの状態で戦闘テスト。



                      どうでしょうか。
                      っぽく」なりました?

                       
                      | 戦闘 | 12:19 |- |
                      私はサイドビューが好き。
                      0
                        私が初めてプレイしたRPGは、MSX版「ドラゴンクエストI」でした。
                        まだファミコンが家に無かった時代の事で、ディスプレイ無しのパソコンをテレビ画面に繋いで、キーボードでちくちくとゲームをしていたものです。昔のドラクエと言えば当時の戦闘画面の主流だった「フロントビュー」と呼ばれる、モンスターがゲームプレイヤーの方をまっすぐ見据えたものを採用しており、私達は勇者と同じ視点に立つことで、ゲームの世界観に入り込んで戦える様な気分を味わえたものです。
                        今はドラクエを含め殆どのゲームにおいて、戦闘シーンでは「主人公もモンスターも画面上に全て表示され、視点変更が自由に可能」な3D戦闘を採用しており、主人公との一体感を味わうのではなく、「主人公を支援する立場」に立たされているという感覚を味わうことの方が多いと思います。グラフィック技術の発達や流行の変化とともに、創造力が必要とされるRPGが減ってきたのは、果たして嘆くべきことなのか、それとも古きは捨て新しきを迎え入れるべきなのか・・。

                        閑話休題。
                        ドラクエのライバル的存在のシリーズであったファイナルファンタジーにおいては、ファミコン版「ファイナルファンタジー3」が私の初FFなのですが、当時ドラクエとはまた違った世界を感じた事は、戦闘においてプレイヤー=主人公では無いという斬新な感覚でした。
                        サイドビュー」と呼ばれる、味方と敵のグラフィックが向かい合って戦闘画面に配置されており、まるで関ヶ原の戦いの様に東軍西軍が切り込み合う姿を神の視点から見ることが出来る。今の3D戦闘のスタイルに近い感じかもですね。あくまで「プレイヤー=光の戦士」では無く、「光の戦士4人を動かして悪に立ち向かうリーダー」的な役割をしているのだという感覚を、私は味わいました。

                        そう・・、、
                        あれこそが、私が大好きな戦闘です。
                        (さんざん上でフロントビュー好きだと匂わせておいて!)

                        もちろん昔のドラクエのフロントビュー戦闘も嫌いでは無いのですが、一発スライムに攻撃をぶちかますだけで「アベルの攻撃!スライムに36のダメージを与えた!スライムをやっつけた!」という沢山の情報が一度に頭に流れ込んで来ますよね。あれが時々ついて行けずに、「あ、あれっ?36?38?えっ、今攻撃したの誰?」てなってしまうのです。
                        それに対してFF3ではゴブリンに攻撃をぶちかますと、ゴブリンの上に「36」というたった2桁の数字だけ表示されてグラフィックが消滅して終わりですよ。何とも分かりやすいじゃないですか。完全に私がのろまなせいでもあるのですけど。

                        「RPG論ばかり並べてツクール全く関係じゃないか」とそろそろ言われそうなので、
                        要するに今回何が言いたいかと言いますと・・。

                        だからこそ私は、
                        RPGツクールMVの戦闘にサイドビュー方式をデフォルト採用したことに加え、
                        SimpleMsgSideView」という素晴らしいプラグインを作られた神無月サスケさまに拍手を送りたいんです。


                        RPGツクールMVのサイトビュー戦闘はこうですが、



                        これだけだとあまり購買意欲が湧かなかったんですが、
                        ツクールMV付属のプラグイン「SimpleMsgSideView」を入れることで、



                        こうなります。
                        非常にシンプル。
                        これですよ。上部に技名、ダメージ表示。
                        これこそが私が望んでいた戦闘スタイルです。
                        私でもあの当時のFFを作れるんだ!などと大それた事までは言いませんが、俄然創作意欲が湧いたのは、この2つの要素のおかげです。これが私の製作しているゲームでは積極的に採用している理由です。
                        (Yanflyさんのバトル系プラグインも面白そうでいずれは試して行きたいのですが、アクションパック含め各プラグインの導入の難しさと、他のプラグインとの競合があり、採用出来ずじまいだったんです)

                        今後作るゲームでもこの2つは採用し続けていく方向です。

                        追補:
                        ちなみにデフォルトのサイドビュー戦闘設定+SimpleMsgSideViewを入れておられる方は何となく分かると思うのですが、クリティカルヒットが発生した際に「何となくワンテンポ遅れるな?」と感じまして、その原因について書いておきます。
                        上の方の画像のバトルログには「会心の一撃!!」という1行分のログが表示されていますよね。これです。SimpleMsgSideViewではログを削除するのではなく「表示させていない」という処理をしているので、画面上にログは出ていなくてもクリティカルヒット時には「会心の一撃!!」という1行文章が裏側で出ているのです。
                        この分のタイムラグによる影響の様でした。

                        各プロジェクトフォルダの js/rpg_windows.js の5097行目。
                        バトルログを画面上に表示する処理がありますが、
                         
                        Window_BattleLog.prototype.displayActionResults = function(subject, target) {
                            if (target.result().used) {
                                this.push('pushBaseLine');
                                // this.displayCritical(target);
                                this.push('popupDamage', target);
                                this.push('popupDamage', subject);
                                this.displayDamage(target);
                                this.displayAffectedStatus(target);
                                this.displayFailure(target);
                                this.push('waitForNewLine');
                                this.push('popBaseLine');
                            }
                        };

                        この中から
                        this.displayCritical(target);
                        // でコメントアウトしてください。
                        これでクリティカルにタイムラグが発生せず、通常攻撃同様ズバシッ!という音と同時にダメージポップアップが出るはずです。SimpleMsgSideViewを使っておられる方は是非お試しを。
                         
                        | 戦闘 | 17:51 |- |
                        PR