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

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

    | - | |- |
    戦闘行動を「ものまね」するスキル
    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 |- |
          ブラウザ版のセーブデータをWindows版に移す
          0
            RPGツクールMVではWindows版、Mac版、ブラウザ版の3つの出力が可能です。
            (厳密に言えばスマートフォン版出力がありますが、ここでは無視します)

            ダウンロードせずにすぐ遊ぶことの出来るブラウザ版は便利。しかしある程度遊んでみてから、「やっぱりWindows版やMac版に移行してゆっくり遊びたいな」という場合や、うっかりブラウザの履歴削除などをしてしまってセーブデータが消えてしまうのが怖いという場合のために、データはローカル環境に持っておきたいですね。

            ここでは「ブラウザ版のゲームのセーブデータを、Windows版のゲームに移す」方法について解説させていただきます。Mac版Safariからのデータ移動については、こまさんに教えていただきました。ありがとうございます。

            各ブラウザで保存したセーブデータは「Local Storage(ローカルストレージ)」という領域に格納されます。
            OSやブラウザごとに保存場所はかなり違うのですが、ご参考までに。
            ※フォルダが見当たらない場合は隠しファイルの可能性があります。フォルダ設定の「隠しファイル」にチェックを入れるか、フォルダオプションから「隠しファイルを表示する」をチェックしてください。

            ■Google Chrome(Windows10)
            (ユーザフォルダ)¥AppData¥Local¥Google¥Chrome¥User Data¥Default¥Local Storage

            ■Safari(Mac)
            (ユーザフォルダ)¥ライブラリ¥Safari¥LocalStorage

            ■Google Chrome(Mac)
            (ユーザフォルダ)¥ライブラリ¥Application Support¥Google¥Chrome¥Default¥Local Storage

            階層深すぎです!! ファイル名がhttpから始まり、そのブラウザ版ゲームのURLで始まっているものがセーブデータ格納ファイルです。それを適当な場所、とりあえずデスクトップなどにコピーしておいてください。

            まだ終わりじゃありませんよ!
            このファイルをそのまんまWindows版のsaveフォルダに移しても駄目です。Local StorageはSQLite3と呼ばれるデータベースファイル内に集約されていますので、個別のセーブデータとしてファイル出力する必要があります。

            そのためには「PupSQLite」というツールを使います。
            SQLite3データベースの編集ソフトです。Windowsにインストールしてください。

            インストールが終わりましたら、PupSQLiteを開いてください。



            この灰色の画面の上に、先ほどデスクトップに移したファイルをドラッグ&ドロップします。
            すると左側のメニュー欄に「ItemTable」と表示されるので、これをダブルクリックします。



            すると今度は右側にずらっとリストが表示されますよね。
            「RPG Config」「RPG Global」「RPG File1」「RPG File 2」…
            勘のいい方ならここで既に把握出来ると思うのですが、このkeyがそれぞれ各セーブデータファイルと対応しているわけです。

            ひとまず「RPG Global」行の右側のByte[] 配列と書かれている文字を右クリックし、「ファイルの出力」を選んでください。



            そうすると保存するファイル名を訊いてきますので、global.rpgsaveというファイル名で保存してください。

            同様の手順で、
            RPG File1は file1.rpgsave
            RPG File2は file2.rpgsave
            RPG Configは config.rpgsave
            という名前で、それぞれ一つずつ保存していきます。

            すべてのファイルの保存を終えましたら、それらをsaveフォルダにまとめ、Windows版のゲームのsaveフォルダに入れるだけです。この状態でゲームを起動しましたら、ブラウザ版のセーブデータがWindows版に移行されている事が確認出来るかと思います。
            | RPGツクールMV技術情報 | 14:42 |- |
            親切なチュートリアルを作るための3つの手法
            0
              はい。今回は完全に私の個人的な考えです。
              私は何のゲームを始める時でも説明書は一応目を通すんですが、一度に色んな事をスパパパンと説明されてしまうと頭の中がグルグルになってしまって、10個覚えなければいけないことの2個ぐらいしか覚えられない事が多々あります。(この時点で完璧に覚えられる人尊敬します)

              多くの場合、複雑なシステムを含んだゲームについてはチュートリアルイベントが発生しますよね。この時点だと大抵の人はチュートリアル通りに以後動くことは出来ると思います。
              しかしそれでも覚えられないんですよ、私(泣)

              このせいで自分のゲームでもそこまで凝ったシステムを含めたくないわけですが、その辺りが作品評価に響いたりする事もあって、本当にアイタタタです。「だからストーリー重視って言ってんでしょ、凝ったシステムが無いことくらいは見逃して〜!」なんて事はもちろんプレイして頂いた方には口が避けても言えず。

              皆さんの中で、最近のFF8のドローシステムとかFF14の戦闘とか正直初回プレイ時は全くついていけてない人挙手お願いします!
              ・・・居ませんか?

              「それはゲームを理解する気が無いからだ」とか「遊ぶ心構えが出来てないからだ」とかそういうのではないんですよ。必要あらばメモを取るぐらいはします。そういう事じゃなくて、思うに私自身はあくまで物語をメタ的な視点で見られないのだな、と気付いたんです。

              たとえば「ジョブシステムについて説明します」というナレーションが突如入り、あれこれと説明が入った後「次に進みます。Aボタンを押してください」というナレーションに移行し…、ここまで来ると大抵の場合は話の腰が折れていることが多くて、逆に覚えにくいんです。
              そもそも昔のゲームにはチュートリアルなんて殆ど無かったじゃないですか。私ファミコン世代の人間ですよ。スイッチをパチーンと入れたらタイトル画面が出てきて、スタートボタン押したら即座に冒険開始です。チュートリアルが必要になるほどシステムが複雑化したのは無数のゲームが次々発売されたおかげでそれらと差別化するためのオリジナリティ要素だと思いますし、説明書もソフトの軽量化やオンライン化の影響で丁寧な物は入れられないですよね。

              理解が追いつかないプレイヤーも居る事を意識して、チュートリアルを工夫されると良いかも知れませんね。
              今回のゲーム作りで私がとった方法は以下の通りです。


              1. チュートリアルを会話イベントにする



              「ラハと魔法の園〜the graystory〜」では、RPGの物理攻撃のかわりとなるファーストスキルの説明を優等生ヒロインが行いました。初めて出会ったヒロインとの最初の出会いに絡めたイベント内に説明を含め、文章量も最低限に留めました。
              しかしこうなると「Aボタンを押す」とか「システムウィンドウを開く」とかってメタ的な説明も出来るだけ入れたくない所です。なるべくそういった単語を交えずに、物語の世界から一時的にでも切り離さない様な工夫を考えたいですよね。


              2. 最初の内は、一度に二つ以上の事を説明しない



              今回TPが100になった時のみ使用可能な必殺魔法についての説明イベントは、もう少し後に設けています。出来る事は徐々に増やしていった方がいいかなと思っての対応です。(TP満タンなったら必殺撃てるって程度の事なら口頭説明でも普通に分かる事かも知れませんが)


              3. 仲間キャラクターがお手本を見せる



              システムにもよると思うのですが、仲間キャラクターがシステムの有用性について実際にお手本を見せられるのであれば、ぜひ見せて欲しいところですね。このシーンはモンスターには弱点属性があることの説明です。これは誰でも分かる事とは思うのですが、RPG慣れしてないプレイヤーさんも少なからずいると思いますから(何よりこのゲームは若干ノベル寄りですからね)。

              他にも色々あるのですが、今回はとりあえずこんな所で。

              それにしても私の作品で「凝ったシステムは無い」というレビューの一文を見るとなにげに凹みます…(苦笑)。自分で自分の作品をプレイした時に初回で理解出来ないシステムは作りたくないからなんですが…;
              | システム | 00:45 |- |
              用語辞典を作ろう!
              0
                中長編作品や、ちょっとシステムの凝ったゲームを作ると、
                ゲーム内にも解説や用語辞典、マニュアルなんかが欲しくなりますよね。

                それを、↓こ〜んな風に、



                ものすごく簡単に作れてしまう素晴らしいプラグインを
                トリアコンタンさんが作ってくださいましたので、ご紹介させていただきます。

                プラグインページ
                (作者:トリアコンタンさん ※MITライセンス)

                ダウンロード(Download)よりダウンロードしたSceneGlossary.jsを各プロジェクトフォルダのjs/pluginsフォルダに入れ、プラグイン管理からONにしてください。各プラグインのパラメータに関する説明はヘルプをご覧ください。

                ■基本的な使い方

                まずは用語辞典に載せたい用語を、データベースの「アイテム」欄に「隠しアイテム」として作ります。

                隠しアイテムにはAとBがありますが、パラメータで設定したアイテムタイプの方を選択してください。
                アイテム名が用語名、アイテムタイプが「隠しアイテムA(またはB)」。

                2016/04/21追記
                「使用可能時」は「メニュー画面」にしておきましょう。

                (※「常時」「バトル画面」にすると戦闘中のアイテム欄に表示されてしまいます
                  「使用不可」にすると用語辞典内の用語名がグレーになります)

                そしてメモ欄に <SG説明:> と入力し、説明: と > の間に用語の解説を入力しましょう。
                例では「黄金結晶」という名前の素材アイテムについての解説を入れたいと思います。



                これで保存し、ゲームを確認してみてください。
                メニューを開くと、「用語辞典」という項目が出来ていますよね。



                これを選択すると、、、



                当然空欄です。
                なぜなら、まだ設定した隠しアイテム「黄金結晶」が手に入っていないからです。

                街にいるキャラに話を聞きましょう。



                そう、ここで初めて「黄金結晶」という単語が出て来ましたね。
                このイベントの下に隠しアイテム「黄金結晶」の入手イベントを入れることで、
                はじめて用語辞典に項目が追加されるわけです。



                用語に追加したいタイミングで、該当用語の隠しアイテムを
                「アイテムの増減」で入手できる様にイベントを書きましょう。
                手にした隠しアイテムと用語辞典は連動していると思ってください。



                ちなみに、プラグインパラメータに「自動登録」というものがあるのですが、
                これがONに設定されていると、何と「アイテムの増減」処理を挟み込むことなく、
                黄金結晶」というキーワードが会話内に登場した瞬間、
                自動的に用語辞典に登録されるのです

                なーんと便利な!!

                ※自動登録ONの時の注意!
                「ルシ」という単語を解説するために会話内に「ファルシ」という言葉を入れると、ルシという単語を中に含んでいるため「ルシ」「ファルシ」両方とも項目が出てきてしまいます。
                「ライ」というキャラクターの解説をあとで辞典に入れたいのに、誰かがうっかり「カレーライス」の話をしてしまうと、その時点でライが自動登録されてしまいます。近しいキーワードをなるべく会話に含まない様、ご注意を!

                2016/04/21追記
                プラグインのバージョン1.2.0で自動登録の対象外にするタグの機能が追加されました。
                自動的に登録させたくないアイテムのメモ欄に <SG手動> と入力しましょう。


                ■応用編

                まだまだこのプラグインには沢山の機能があります。
                隠しアイテムのメモ欄に、こんな風に、



                黄金結晶のメモ欄に
                <SGカテゴリ:*******> にカテゴリ名を入れ、
                <SGピクチャ:*******> にimg/picturesフォルダにある画像ファイル名(拡張子不要)を入れ、
                <SGピクチャ揃え:******> に「center」と入れます。

                この状態で用語辞典を見ると・・



                用語辞典を開いた時、まずはカテゴリとしてまとめられます。
                メモ欄で「素材辞典」が表示されましたね。
                <SGカテゴリ:>で入力した文字がそのまま表示されています。

                カテゴリを選択すると、



                画像つきの解説が出ます!!
                素材のイラストだったり、キャラクターの立ち絵などを表示すると、
                ゲームのクオリティが一気にアップすると思います。

                説明には変数も使えます。
                単なる用語辞典としての使い方ではなく、
                いろんな使い方のアイディアが生まれそうですね!
                とっても素晴らしいプラグインだと思います。
                | RPGツクールMVプラグイン | 18:31 |- |
                自作ゲーム専用プラグインを用意しよう!
                0
                  RPGツクールMV バージョン1.2.0へのアップデートが2016年4月21日頃に予定されているそうです。
                  ツクールMVにて使用されている基本描画ライブラリPixi.jsの更新も兼ねたバージョン1.3.0を控えているとの情報もありますし、今後アップデート頻度をやや上げていきたいとの事なので、製作済みゲームのアップデートも考えていかなければいけません。

                  こういう時、たとえば自作品で「エンカウント率を低くする」とか「クリティカル時にアニメーションの演出を足す」とか、細かい追加をするのにプラグインではなく本体側のJavascriptを書き換えている場合、本体アップデートした時に書き換えた場所が消えてしまいます

                  これを避けるために、ちょっとした書き換えでもJavascriptに触れずに、プラグインを自作する事にしましょう。
                  ※プラグインの基本的な作り方については「プラグイン講座」をご覧ください。

                  私の作品「ナイトオブシンデレラ」でも「ラハと魔法の園」でも、独自のプラグイン(knightof.js、graystory.js)を作成し、呼び出す様にしています。

                  ■プラグインを作成する

                  1) メモ帳やソースエディタを開いて、以下の文を入力します。コピー&ペーストで構いません。
                   
                  /*:
                   * @plugindesc このゲーム専用プラグイン
                   * @author 作者名
                   * @help ゲーム専用に作成された初期読み込み用プラグイン
                   */

                  (function() {



                  })();

                  「このゲーム専用プラグイン」や「作者名」の部分は適宜変更してください。

                  2) このまま一旦ファイルを保存してください。
                  ファイル名は「自分のゲーム名.js」が分かりやすくていいと思います。たとえば「final story」というゲームなら「finalstory.js」、「勇者vs魔王 魔剣の伝説」というタイトルなら「maken.js」といった感じで、必ずファイル名は半角英数字にしてください
                  保存場所は、ゲームプロジェクトフォルダのjs/pluginsフォルダ内です。
                  文字コードは「UTF-8(BOM無し)」です。

                  3) ツクールMV本体の「プラグイン」を表示し、いま作成したファイル名を選択し「ON」にします。

                  これで独自プラグインの準備は出来ました。
                  以降何か書き換えが発生した場合は、このファイルの (function(){ と })(); の間に、書き換える部分の処理をまるごとコピー&ペーストします。
                  つまり本体側のJavascriptには一切手を加えず、いま作成したファイルの方に処理をコピーしておくことで、アップデートによる上書き消滅を防ぐことが出来るわけです。

                  プラグインの呼び出し順序は

                  [本体側のJavascript]→[プラグイン(リストの上から順)]

                  なので、本体側でいくら「Aにしろ!」と命令を出した所で、プラグインで「Bにしろ!」と命令が下されれば、「Bにしろ」しか実行されません。
                  ただし沢山のプラグインを使用している場合、その順序にはご注意ください。
                  実行順は上から下にかけてです


                  1番目に読み込んだプラグインの内容が「メニュー画面に背景を出せ」となっている時、2番目に読み込むプラグインの内容が「メニュー画面には背景を出すな」と書かれていれば、背景を出すなの命令が実行されます。
                  (正確には背景を一瞬出した後、背景を出さなくなります)


                  ■「ラハと魔法の園〜the graystory〜」で実行している独自プラグイン

                  1) タイトルBGM維持
                  タイトル画面から「ニューゲーム」を選択した時、タイトルBGMがそのまま流れっぱなしになる処理です。難易度選択の画面にゆるやかに移行するために加えた処理です。
                  普通ならニューゲームを選択するとタイトルBGMがフェードアウトしてゲーム内BGMが流れるのですが、フェードアウトで消す処理をコメントアウト(書いた内容を実行しない様にすること)する事で維持を実現しています。
                   
                      // タイトルBGM維持
                      Scene_Title.prototype.commandNewGame = function() {
                          DataManager.setupNewGame();
                          this._commandWindow.close();
                          //this.fadeOutAll();
                          var time = this.slowFadeSpeed() / 60;
                          this.startFadeOut(this.slowFadeSpeed());
                          SceneManager.goto(Scene_Map);
                      };


                  2) エンカウント率調整
                  戦闘エンカウントのバラつきを無くすため、ほぼ戦闘と戦闘の間の歩数は均等になる様にしています。
                  6の乱数にツクールのマップ設定のエンカウント歩数を足しています。
                  つまりマップ上でエンカウントが「40歩」と設定されているエリアでは
                  40〜46歩ごとにエンカウントします。
                  デフォルトの2〜3歩歩くだけで次の戦闘が始まる様な煩わしさや、さっきは3歩目で出たのに今度は40歩歩いても全然出て来ないといったバラつきがなくなります。
                   
                      // エンカウント率調整
                      Game_Player.prototype.makeEncounterCount = function() {
                      var n = $gameMap.encounterStep();
                      this._encounterCount = Math.randomInt(6) + n;
                      };


                  3) クリティカルヒットのダメージ調整
                  ツクールのデフォルトでは戦闘時クリティカルが通常ヒットの3倍になっています。
                  あまりに威力が大きすぎるため、2倍に変更しています。
                   
                      // クリティカルのダメージ率調整
                      Game_Action.prototype.applyCritical = function(damage) {
                          return damage * 2;
                      };


                  4) 戦闘開始時の戦う・逃げるスキップ
                  デフォルトでは戦闘開始時にパーティーコマンドと呼ばれるウィンドウが最初に表示され、「戦う」「逃げる」が選べる様になります。「戦う」は分かりきっているし、「逃げる」は特定のキャラしか使用出来ない魔法にしたかったので、このウィンドウをスキップする様にしました。
                   
                      // 戦闘開始時の戦う・逃げるコマンドのスキップ
                      Scene_Battle.prototype.changeInputWindow = function() {
                      if (BattleManager.isInputting()) {
                          if (BattleManager.actor()) {
                              this.startActorCommandSelection();
                          } else {
                              //this.startPartyCommandSelection();
                              this.selectNextCommand();
                          }

                      } else {
                          this.endCommandSelection();
                      }
                      };

                  パーティーコマンド選択にコメントアウトしています。

                  5) お店で装備を買う時、魔法力・魔法防御力の増減値を表示する
                  滅多に無い変更とは思いますが、ラハ園では魔法のみが存在する世界で「物理攻撃力」「物理防御力」を消す必要がありました。お店で取り扱う武器や防具を買うとき、画面上に「+5」とか「+8」とか表示される数値は、この物理攻撃・物理防御の増減値です。これを魔法力、魔法防御力に変更するため、取得する場所を変更しています。
                   
                      // 魔法力・魔法防御力を装備購入時に表示
                      Window_ShopStatus.prototype.paramId = function() {
                          //return DataManager.isWeapon(this._item) ? 4 : 3;
                          if (DataManager.isWeapon(this._item)) {
                              return 4;
                          }else if(DataManager.isArmor(this._item)) {
                              return 5;
                          }else{
                              return 3;
                          }
                      };


                  6) 装備欄から「攻撃力」「防御力」を削除
                  上の理由に同じで、装備やステータス欄からも攻撃力・防御力を消します。
                   
                      // 装備表示から攻撃力・防御力を削除
                      Window_EquipStatus.prototype.refresh = function() {
                          this.contents.clear();
                          if (this._actor) {
                              this.drawActorName(this._actor, this.textPadding(), 0);
                              for (var i = 2; i < 6; i++) {
                                  this.drawItem(-2, this.lineHeight() * (1 + i), 2 + i);
                              }

                          }
                      };

                      // ステータス表示から攻撃力・防御力を削除
                      Window_Status.prototype.drawParameters = function(x, y) {
                      var lineHeight = this.lineHeight();
                      for (var i = 2; i < 6; i++) {
                          var paramId = i + 2;
                          var y2 = y + lineHeight * i;
                          this.changeTextColor(this.systemColor());
                          this.drawText(TextManager.param(paramId), x, y2, 160);
                          this.resetTextColor();
                          this.drawText(this._actor.param(paramId), x + 160, y2, 60, 'right');
                      }

                      };


                  7) ステータスから「職業名」を削除
                  ステータス画面上に「戦士」とか「勇者」とか表示されてるあれです。
                  職ごとによるステータスではなくキャラごとによるステータスとしての扱いなので、職業名は使いません。
                  コメントアウトです。
                   
                      // ステータス表示から職業名を削除
                      Window_Status.prototype.drawBlock1 = function(y) {
                      this.drawActorName(this._actor, 6, y);
                      //this.drawActorClass(this._actor, 192, y);
                      this.drawActorNickname(this._actor, 432, y);
                      };


                  8) メニュー画面の「職業名」を「二つ名」に変更
                  メニュー画面にも職業名が名前の横に表示されていますので、
                  コメントアウトしてActorNickname(二つ名)に変更します。
                   
                  Window_Base.prototype.drawActorSimpleStatus = function(actor, x, y, width) {
                      var lineHeight = this.lineHeight();
                      var x2 = x + 180;
                      var width2 = Math.min(200, width - 180 - this.textPadding());
                      this.drawActorName(actor, x, y);
                      this.drawActorLevel(actor, x, y + lineHeight * 1);
                      this.drawActorIcons(actor, x, y + lineHeight * 2);
                      //this.drawActorClass(actor, x2, y);
                      this.drawActorNickname(actor, x2, y, width2);

                      this.drawActorHp(actor, x2, y + lineHeight * 1, width2);
                      this.drawActorMp(actor, x2, y + lineHeight * 2, width2);
                  }



                  9) スイッチ50がONの時は「サード」スキルを表示
                  戦闘中サードスキル、つまりTP100になった時のみ使用可能になる必殺技の様なスキルです。「サードスキルのチュートリアルイベントを見るまではTPが100になっても使えない」という状況を作り出すため、50番のスイッチがONになるまではコマンド欄にすら表示させない、といった処理を入れています。
                  これによりスイッチのON・OFFで「サード」を表示するかどうかを管理出来ますので、必殺技封印フロアなどはここで作れるわけです。
                   
                      // スイッチ50がONの時はスキルタイプ「サード」を表示
                      Window_ActorCommand.prototype.addSkillCommands = function() {
                          var skillTypes = this._actor.addedSkillTypes();
                              skillTypes.sort(function(a, b) {
                              return a - b;
                          });
                          skillTypes.forEach(function(stypeId) {
                              var name = $dataSystem.skillTypes[stypeId];
                                  if (stypeId != 2 || $gameSwitches.value(50)) 
                                      if (stypeId != 2 || this._actor.tp == 100)
                                      this.addCommand(name, 'skill', true, stypeId);
                              }, this);

                          };


                  10) 魔法反射にアニメーション表示
                  戦闘中、魔法反射はデフォルトだと効果音とダメージの変動のみしかありませんが、反射時にグリーンの盾の様なものを表示したくて、処理にtarget.startAnimationを足しています。
                   
                      // 魔法反射にアニメーション追加
                      BattleManager.invokeMagicReflection = function(subject, target) {
                      target.startAnimation(122, false, 0);
                      this._logWindow.displayReflection(target);
                      this._action.apply(subject);
                      this._logWindow.displayActionResults(subject, subject);
                      };


                  11) 完全耐性にアニメーション表示
                  戦闘中、状態異常に対して100%の耐性がある場合でも、デフォルトでは「miss」と表示されますので、果たして「たまたま効かなかっただけ」か「完全な耐性持ちなのか」が非常に分かりづらいです。
                  完全耐性だと分かるアニメーションを入れることで、すぐに耐性持ちだと分かる様にしています。
                   
                  Game_Action.prototype.itemEffectAddNormalState = function(target, effect) {
                      var chance = effect.value1;
                      if (!this.isCertainHit()) {
                          chance *= target.stateRate(effect.dataId);
                          chance *= this.lukEffectRate(target);
                      }
                      if (Math.random() < chance) {
                          target.addState(effect.dataId);
                          this.makeSuccess(target);
                              if (target.isStateResist(effect.dataId) == true) {
                                  target.startAnimation(122, false, 0);
                              }

                          }
                      };

                  魔法反射と同じ、盾を表示するアニメーションです。
                  ただし「毒」と「眠り」を同時にかける魔法の場合などは「毒完全耐性」と「眠り完全耐性」の区別がつきませんので、どちらかに完全耐性があるとアニメーションが表示されます。使用の際にはご留意ください。


                  12) 176番スイッチでアイテム使用不可
                  戦闘中、アイテム使用を禁止にするための試練フロアの実装するためのものです。
                   
                      // 176番スイッチでアイテム使用禁止
                      Window_ActorCommand.prototype.makeCommandList = function() {
                          if (this._actor) {
                              this.addAttackCommand();
                              this.addSkillCommands();
                              this.addGuardCommand();
                              if ($gameSwitches.value(176)){
                              this.addCommand(TextManager.item, false, false);
                              }else{
                              this.addItemCommand();
                              }

                          }
                      };

                  if ($gameSwitch.value(スイッチID)) は大変便利な構文で、ゲーム内のスイッチON・OFFでプラグインの状態をいじれるので、ぜひ積極的に使ってみましょう。

                  上記は一例ですが、この他にもメニュー画面に得点やプレイ時間を表示させたり、戦闘中に左からトコトコ歩いてきて敵についての解説をするイベントなど、色々独自プラグイン内に入れています。
                  ぜひJavascriptは、本体側のjs/rpg_****.jsを書き換えるのではなく、新規のプラグインファイル内にそこからコピー&ペーストしたものを書き換える様にすると良いでしょう。

                   
                  | RPGツクールMVプラグイン | 12:34 |- |
                  魔法をかける時に杖を振る
                  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

                      反撃する敵を作った時、その反撃行動があまりにも無口なので、
                      アニメーション表示を追加するプラグインを作ってみました。



                      プラグインをダウンロードする
                      (「CounterAnimation.js」というタイトルです。各プロジェクトフォルダのjs/plugin内に入れ、
                      プラグイン管理よりCounterAnimationをONにし、AnimationIDパラメータに表示させたい
                      アニメーションIDを入力してください)

                      ただ、このプラグインちょっと納得いってなくて、反撃行動だと分かる程度の短いアニメーションや、テンポのいい戦闘の場合は問題無いとは思うのですが、まったりとした戦闘の場合は非常に使いづらいプラグインです。
                      その理由は、
                      アニメーションと反撃行動(ダメージ)が同時に出てしまう
                      という点です。

                      プラグインの中をひけらかしますと、
                       

                          BattleManager.invokeCounterAttack = function(subject, target) {
                              var action = new Game_Action(target);
                              if (AnimationID !== 0) {
                                  target.startAnimation(AnimationID, false, 0);
                                  action.setAttack();
                                  action.apply(subject);
                                  this._logWindow.displayCounter(target);
                                  this._logWindow.displayActionResults(subject, subject);
                              }
                          };


                      invokeCounterAttack(カウンター行動詳細)の中に、
                      単にtarget.startAnimationを入れただけの単純構造のスクリプトですが、
                      この関数、アニメーションにウェイトをつけてくれないのです。

                      つまりアニメーション再生中に次のaction.setAttack();以降が実行されてしまう。
                      「えっ、この青い行の最後の0って、秒数なんじゃないの?」
                      と思って最初これに数値入れてみたら全然違って、アニメーション発動までの遅延でした。

                      JavascriptはPHPと違ってsleepによるウェイトを挟めなくて、前の処理が終わるのを待たずに実行されるんですよね。
                      他の構文いじってワンテンポ遅らせてみたりとか色々やってはみたんですけど、反撃行動自体が発動されなくなっちゃったりして、とりあえず後はよろしくーって感じで詳しい方に丸投げする事にしました。

                      これだけならYanflyさんのBattleCore系プラグインでも出来るみたいですが、アニメーション発動即反撃行動は同一みたいでした。
                      こういう所が私の素人たる所以なんですね;

                      | RPGツクールMVプラグイン | 18:12 |- |
                      私はサイドビューが好き。
                      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