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

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

    | - | |- |
    戦闘勝利後にパーティーメンバー全回復
    0

      FF13やゼノブレイドの戦闘の様に、戦闘勝利後にHPもMPも常に全回復させたいという場合、ありますよね。

      難易度も緊張感も確実に下がりますが、作り方によっては導入してみるのもありだと思います。

       

      プラグインを作りましたので、下よりダウンロードしてください。

       

      VictoryRecoverAllをダウンロードする

      (MITライセンス)

       

      わざわざプラグインとして個別に用意しましたが、特に難しい事はしてないです。

      performVictoryという戦闘勝利処理の中にrecoverAllという全回復構文を入れます。

       

      「プラグイン追加するの面倒だよ〜」っていう場合は、

      rpg_objects.jsの5141行目〜5145行目に、下記の1行を追加するだけです。

       

          Game_Party.prototype.performVictory = function() {
              this.members().forEach(function(actor) {
                  actor.performVictory();
                  actor.recoverAll();
             });
          };

       

      必要な方はぜひお試しください。

      | RPGツクールMVプラグイン | 13:01 |- |
      戦闘のコマンド欄にスキルを直接表示
      0

        たとえば戦闘中「ファイア」という魔法を撃ちたい時。

        「魔法」や「必殺技」などといったスキルタイプをコマンド欄から選択し、

        その中からファイアを探して選択……という一手間が必要です。

         

        がっつり使わせたい魔法であればコマンド欄にそのものズバリを常時出しておきたいもの。

        というわけで戦闘コマンドに直接スキルを表示するプラグインを作ってみました。

         

         

        自分用に作った簡易版なので、バトル系プラグインとの競合など未確認です。

        とりあえず暫定版ということで。

         

        コマンド欄に出せるスキルは一つだけです。

        アクターのメモ欄に <PickupSkill> と入力したアクターのみコマンド欄に表示されます。

         

        パラメータですが、

        PickupSkillNameにはスキル名

        PickupSkillIdには発動したいスキルID

        PickupTargetにはそのスキルのターゲットをそれぞれ入力してください。

        (味方から選ぶか、敵から選ぶか、選ばせないかです(※スキルに合わせてください))

         

         

        PickupSkillをダウンロードする

        (MITライセンス)

         

         

        | RPGツクールMVプラグイン | 00:20 |- |
        プラグイン「MOG_BattleHud」を使う際の小ネタ
        0

          Moghunterさんの戦闘インターフェイス一新プラグイン「MOG_BattleHud 」を使う際の小ネタです。

          プラグインを適用した後、戦闘画面はこういうインターフェイスになってますよね。

           

           

          注目する点はこのHP・MP・TPのゲージ表示です。

           

           

          HPがブルー、MPがグリーン、TPがオレンジになってますよね。

           

          しかしデフォルトのメニュー画面やステータス画面では、

           

           

          HPがオレンジ、MPがブルー、TPがグリーンになっているんです。

           

          すっかり忘れていましたが、この点について

          「統一性がない」とレビューで指摘された事がありまして、

          今回、戦闘画面と同じ色に統一する事にしました。

           

           

          どうでしょう。

           

          書き換え方ですが、

          場所はrpg_windows.jsの199行目あたりからのhpGaugeColor1〜tpGaugeColor2までです。

           

          独自プラグインでは以下のコードを足してください。

          HPが23番色、MPが3番色、TPが20番色です。

           

              Window_Base.prototype.hpGaugeColor1 = function() {
                  return this.textColor(23);
              };
              Window_Base.prototype.hpGaugeColor2 = function() {
                  return this.textColor(23);
              };
              Window_Base.prototype.mpGaugeColor1 = function() {
                  return this.textColor(3);
              };
              Window_Base.prototype.mpGaugeColor2 = function() {
                  return this.textColor(3);
              };
              Window_Base.prototype.tpGaugeColor1 = function() {
                  return this.textColor(20);
              };
              Window_Base.prototype.tpGaugeColor2 = function() {
                  return this.textColor(20);
              };

           

          些細な点ですが、こういう小さな補正が意外と大事だったりしますよね。

          BattleHudプラグインをご利用の方は一度チェックしてみてください!

          | RPGツクールMVプラグイン | 13:13 |- |
          ゲームに実装しておくべき3つのこと
          0

            自作品のゲーム実況・配信、レビュー、メールなどで多数レスポンスを頂いたのですが、その中でもゲーム内に実装しておいて良かったと思ったものを幾つか書き出してみました。それが一つあるのと無いのとではかなりゲームに対する見方が変わってくる可能性もありますので、ご参考までに。

             

             

            その1 DirectInputコントローラへの対応

             

            地味にこれが一番多かったかも知れません。

            基本私はMacでゲームをするので対応コントローラが少なくキーボードでプレイするしか無いのですが、大多数のプレイヤーさんWindowsでプレイし、コントローラで操作される例が少なくない様です。

            ツクールMVではデフォルトでXInput方式のコントローラしか対応していないため、DirectInputコントローラに対応するには別途プラグインを入れる必要があります。

             

            ■DirectInput方式のジョイパッドが使えるようになるプラグイン

            http://tm.lucky-duet.com/viewtopic.php?t=705

            Trbさんが作られたプラグインです。

            入れてONにするだけでDirectInputのコントローラに対応出来るのですから、お手軽ですし、是非おすすめです。

            ※YanflyさんのBattleEngineなど幾つかのプラグインで競合を起こしますが、対応版が出ています。基本的には「F5を押してリロードする」という行為をしなければ大丈夫の様です。

             

             

            その2 どこでもセーブ

             

            主に実況者さんに定評のある(?)機能ですね。

            ツクールの大体の作品が元々そうなっているとは思いますが、セーブ出来る場所を制限し過ぎず、出来るだけどこでもセーブ出来る様な状況にしておくと、「やめたい時にやめられる」ので親切です。

            ただし、どこでもセーブ出来るという設計は「詰む可能性がある」事は考慮に入れた方が良いとは思います。以前ラハ二章のボスで詰んだ方がいらっしゃいましたので、「セーブを分けてください」というメッセージをセーブポイントに挟む様にしました。

             

             

            他にもこういう状況が考えられますよね。

            1) 回復手段がなく瀕死の状態でセーブしてしまう

            2) キーとなるアイテムを取り逃して洞窟に入り、洞窟から出られない、でもセーブは出来てしまう

            3) 不具合が発生して進行不能なマップの上でセーブしてしまう

            etc..

             

            特に2)はラストダンジョン等では多く考え得るケースですので、ご注意を。

             

            それにしても昔のRPGでは考えられなかった機能ですよね。頻繁にセーブにアクセスする事がバッテリーバックアップの寿命を短くする事に繋がるとか、すぐ再戦出来てしまう事がゲーム性を損ね作業性を増してしまうとか、その様な理由だったのかも知れませんが、このご時世にわざわざ昔のゲームの様なセーブ仕様にする必然性も無いので、普通にどこでもセーブ出来る様にしておいて良いとは思っています。

            (この画像、実況動画より拝借しました。すみませんっ)

             

             

            その3 ゲームクリア後のお楽しみ要素

             

            面白いゲームをクリアした後、何となく「まだ続きがあるんじゃないか」とか「どこかにお楽しみ要素が!」とか思って、タイトル画面を探してしまうことってありません? で、見つけたら嬉しいですよね。

             

             

            トリアコンタンさん作の「AnotherNewGame」というプラグインを使うことで、クリア後、あるいは好きなタイミングで、お楽しみ要素を追加することが可能です。(紹介サイト

            後日談でもいいですし、スタッフ開発室の様な所に飛ばすことも出来ます。CGギャラリー、NG集、名シーン集……などなど、色んなことに利用できるプラグインなので、もしそういった要素を追加したいという方はぜひチェックしてみてください。

             

            基本的には、この3つです。

            難易度選択や用語辞典なども入れようと思ったのですが、「必須」「推奨」ってわけでもありませんから書きませんでした。

            | RPGツクールMVプラグイン | 10:46 |- |
            セーブデータにマップ名などを表示する
            0
              RPGツクールMVでゲームをセーブした時、
              データリスト上にはゲームタイトルが表示されますよね。



              しかしこれは何となく違和感が。
              タイトルじゃなくて章とか場所とかを表示させたいって方は沢山居るはず。

              というわけで今回は、セーブした「場所」をリスト上に表示するプラグインを作ってみましょう。
              表示させたいのは、これです。



              セーブデータの掲載情報を処理しているのはrpg_manager.jsの413行目〜422行目、DataManager.makeSavefileinfoの中です。
              表示名を司る変数は $gameMap.displayName(); なので、
              下記の場所にinfo.mapname = $gameMap.displayName();を書き足してください。
               
                  DataManager.makeSavefileInfo = function() {
                      var info = {};
                      info.globalId   = this._globalId;
                      info.title      = $dataSystem.gameTitle;
                      info.mapname    = $gameMap.displayName();
                      info.characters = $gameParty.charactersForSavefile();
                      info.faces      = $gameParty.facesForSavefile();
                      info.playtime   = $gameSystem.playtimeText();
                      info.timestamp  = Date.now();
                      return info;
                  };

              ただし、ここではあくまで「マップ名の表示を定義」しているだけなので、
              実際にリスト上に「配置」させるための処理は別の場所です。
              rpg_windows.jsの2837行目〜2850行目、Window_SavefileList.prototype.drawContentsの中です。
               
              Window_SavefileList.prototype.drawContents = function(info, rect, valid) {
                  var bottom = rect.y + rect.height;
                  if (rect.width >= 420) {
                      this.drawGameTitle(info, rect.x + 192, rect.y, rect.width - 192);
                      if (valid) {
                          this.drawPartyCharacters(info, rect.x + 220, bottom - 4);
                      }
                  }
                  var lineHeight = this.lineHeight();
                  var y2 = bottom - lineHeight;
                  if (y2 >= lineHeight) {
                      this.drawPlaytime(info, rect.x, y2, rect.width);
                  }
              };

              this.drawGameTitleってありますよね。
              これがデータリストにゲームタイトルを表示させている処理なのです。
              つまりこの部分を上で定義したものに書き換えれば良いわけです。

              this.drawGameTitle を this.drawTextに、info を info.mapnameに書き換えます。
               
                  Window_SavefileList.prototype.drawContents = function(info, rect, valid) {
                      var bottom = rect.y + rect.height;
                      if (rect.width >= 420) {
                          this.drawText(info.mapname, rect.x + 192, rect.y, rect.width - 192);
                          if (valid) {
                              this.drawPartyCharacters(info, rect.x + 220, bottom - 4);
                          }
                      }
                      var lineHeight = this.lineHeight();
                      var y2 = bottom - lineHeight;
                      if (y2 >= lineHeight) {
                          this.drawPlaytime(info, rect.x + 190, rect.y, rect.width - 192);
                      }
                  };

              工程は以上です。
              これで保存して、セーブしてみましょう。



              うまくいきましたね。
              これでどの場所でセーブしたのか、分かりやすくなったはずです。

              カスタマイズ次第では変数と組み合わせて章を表示させたり、選択されている難易度や、ゲームの進行率なんかを表示させたりする事もできますので、この記事を参考に色々試してみると独自のリストが作れるので楽しいでしょう。

              今回もタイトルを場所に変更するためのプラグインを置いておきます。

              プラグインをダウンロードする
              (MapNameinSaveData.js / MITライセンス)

              ※セーブファイル変更関連は結構デリケートなので、既存のセーブデータや、他セーブデータのレイアウト書き換え等のプラグインとの競合に注意。
              ※プラグインを入れただけでは反映されません。入れた後にセーブしたデータにのみマップ名が反映されます。
              | RPGツクールMVプラグイン | 12:13 |- |
              用語辞典を作ろう!
              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
                    反撃する敵を作った時、その反撃行動があまりにも無口なので、
                    アニメーション表示を追加するプラグインを作ってみました。



                    プラグインをダウンロードする
                    (「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
                      キャラクターのHPやレベルなどのステータス情報、ダンジョンで獲得した宝箱の数など、
                      ちょっとした情報を常にマップ画面に表示させておきたいとします。
                      実はこれが出来るプラグインは既に存在していますし、高機能ではありますが、
                      簡易なウィンドウを表示させるやり方を解説していきたいと思います。
                      (ただ、今回はちょっと自信無いので、やや消極的にいきます)

                      とりあえずは下の画像の左上にある様な感じですね。



                      この状態で宝箱を2個取ると、



                      情報ウィンドウの表示もリアルタイムで更新されます。

                      まず実際にウィンドウを表示する前に「この宝箱の数はどこから来ているのか?」について、あらかじめ説明しておきます。宝箱を取るイベントの中に「宝箱を開けた数」という変数を作り、1個取るたびにその変数に1を加算する、という処理を入れます。



                      つまり情報ウィンドウと言いましても、単に画面上にこの変数の値をそのまんま表示させているだけです。

                      これをふまえて、実際に情報ウィンドウをどの様に表示させるのか、解説します。
                      Javascriptさんは1から100までを言わないと怒り出すタイプの言語さんでして(1から100までを言っても怒り出すタイプの言語さんもいらっしゃいますが)、「この変数を左上に表示してくれよ〜」って命令するだけだと、「は?」と怒られてしまうんです。

                      Javascriptさんに「情報ウィンドウを表示させたい」をお願いしたら、こんなお返事が来るわけです。

                      (1) ふんふん、どの場所に?
                      (2) で、どのタイミングで?
                      (3) っていうか「情報ウィンドウ」ってそもそも何なの?
                      (4) なるほどね、それじゃそれ表示する位置を、x座標とy座標で細かく教えてよ。
                      (5) あ、その情報ウィンドウとやらの幅と高さも頼むよ。
                      (6) 待って、情報ウィンドウの色は? 透明度は?
                      (7) え? 情報ウィンドウに文字載せるの? 何を載せればいいの?
                      (8) 情報ウィンドウ内のどこにテキストを載せるの? 端っこでいいの?
                      (9) その載せるテキストの文字サイズは? 色は?
                      (10) よーし分かった。じゃあこれで表示していくよ。え? 宝箱の数が1個から2個になったら、1って文字を消せって? 先に言ってよ。1の上に2を書き足しちゃったよ。

                      とまあ、こんな感じなのですよ(~_~;;
                      なので今回は一つ一つの手順を解説していくと、とんでもないボリュームになってしまうので、先にスクリプトをこちらからダウンロードしてください。それについて補足説明を入れていく、という形で対応したいと思います。

                      プラグインをダウンロードする
                      (「InfoWindow.js」というタイトルです。各プロジェクトフォルダのjs/plugin内に入れ、プラグイン管理よりInfoWindow.jsをONにしてください)

                      ■補足説明

                      13〜33行目
                       
                          // マップ上に表示する宣言
                          var Scene_map_start = Scene_Map.prototype.start;
                          Scene_Map.prototype.start = function() {
                              Scene_map_start.call(this);
                              this._InfoWindow = new Window_Info();
                              this.addWindow(this._InfoWindow);
                          };

                          // ウィンドウ内の情報を更新するタイミングを宣言
                          var _Scene_Map_update = Scene_Map.prototype.update;
                          Scene_Map.prototype.update = function() {
                              _Scene_Map_update.call(this);
                              this._InfoWindow.setText();
                          };

                          // ウィンドウを定義
                          function Window_Info() {
                              this.initialize.apply(this, arguments);
                          }
                          Window_Info.prototype = Object.create(Window_Base.prototype);
                          Window_Info.prototype.constructor = Window_Info;

                      この部分は全く変更する必要はありません。
                      上のJavascriptさんの返事でいうと(1)〜(3)の部分にあたります。
                      たとえば「addWindow」という語がありますよね。addは追加、Windowはそのままウィンドウ、なので「Scene_Map」「start」「addWindow」という三つの語を拾い出せば、「マップが開始されたらウィンドウを画面上に追加する」という様な意味合いになる事は分かると思います。
                      ちなみに赤字の_Infoは全て共通にすれば変更しても問題無いです。Window_Otakaraとかでも構いません。

                      36〜42行目
                       
                          Window_Info.prototype.initialize = function() {
                              var x = 20;
                              var y = 20;
                              var width = 180;
                              var height = 108;
                              Window_Base.prototype.initialize.call(this, x, y, width, height);
                          };

                      ここで、情報ウィンドウの位置調整と、大きさ調整です。
                      var x = 20、var y = 20は、「画面上のx座標20、y座標20の位置にウィンドウを表示するよ」という意味です。単位はピクセルです。つまり、こういう事ですね。



                      その下、var widthはウィンドウの幅、var heightはウィンドウの高さです。
                      こちらも単位はピクセル。



                      これはゲーム画面をスクリーンショットで撮影して、お絵描きソフトに貼り付けて、作りたいウィンドウを実際に描くと、自分の思う位置・幅・高さの数値を算出しやすいです。

                      続いて少し飛んで49〜56行目。
                      いよいよ情報ウィンドウの中身の作り方に迫っていきます。
                       
                          Window_Info.prototype.refresh = function() {
                              this.contents.clear();
                              this.changeTextColor(this.textColor(16));
                              this.drawIcon(210, 1, 1);
                              this.drawText("拾った宝箱",40, 1);
                              this.resetTextColor();
                              this.drawText($gameVariables.value(2) + " 個",0,this.lineHeight());
                          };


                      まず、
                      this.contents.clear();
                      最初にこれ書かないと、更新前の文字が残ったままになります。カウントアップさせる場合だと「1」の字の上に「2」が重なったりして、ものすごい事になります。

                      this.changeTextColor(this.textColor(16));
                      次からのテキストを16番の色(薄いブルー)に変更せよという意味です。
                      色がデフォルトのままで良い場合は、この行は丸ごと不要です。
                      ちなみに色の数値は、プロジェクトフォルダのimg/system/Window.pngの右下の色群です。
                      例えばオレンジにしたいなら、this.textColor(2)です。

                      this.drawIcon(210, 1, 1);
                      アイコンを表示させます。210番のアイコンをx座標1、y座標1の位置に表示させよという意味です。
                      上の例では宝箱のアイコンを表示させていますが、宝箱アイコンはアイコン群のID210番です。
                      イベント「文章の表示」で、入力ウィンドウ内を右クリックするとアイコンビューアが出せますが、そこでアイコンを選択した時にIDが下に表示されると思います。その数値です。

                      this.drawText("拾った宝箱",40, 1);
                      「拾った宝箱」というテキストをx座標40、y座標1の位置に表示させよという意味です。
                      なぜ40かと言うと、すぐ手前で表示させたアイコン分の幅と少しの余白分を入れたものです。
                      これを1にすると宝箱アイコンと位置がかぶってしまいますからね。
                      アイコンの幅を変数で自動取得するという事も可能ですが、手動で数値を入れて色々いじってもらった方が感覚がつかみやすいと思いましたので、カットします。

                      this.resetTextColor();
                      16番の色で表示させていた配色を、デフォルトの色に戻す時に使います。これを入れればウィンドウの途中で変えていた色を元に戻せます。たとえば3行のテキストで、1行ごとに色が変わる場合は、this.resetTextColor()を2回書かなくてはいけません。

                      this.drawText($gameVariables.value(2) + " 個",0,this.lineHeight());
                      再び、drawTextが出て来ましたね。
                      これが今回の情報ウィンドウの肝です。
                      最初のdrawTextが1行目であれば、次のdrawTextは2行目。
                      2行目に $gameVariables.value(2)+「個」という文字列を、x座標0、y座標は1行分空けた位置に表示させよという意味です。

                      $gameVariables.value(2)は変数ID2番の値を取得するためのものです。
                      変数ID2には最初で説明しました、「宝箱の取得数」が格納されています。
                      宝箱の数値が入り、そのあとに「個」という文字が入る。
                      こうする事で1個とった時は「1個」と画面上に表示されるわけですね。

                      ちなみにこの$gameVariables.value(ID)の部分、
                      たとえば画面上に総プレイ時間を表示させたい場合は
                      $gameSystem.playtimeText()
                      と書きます。



                      まあ画面上に常に「こんなん書かれても」って感じではありますが、プレイ時間1時間経過ごとにイベントが発生するなど、何かには活用は出来るかも知れませんからね。

                      ちなみにダメージ計算式の回の時の式もそのまんま流用できます。
                      プレイ時間を秒数で出したい時は $gameSystem.playtime()
                      所持金を出したい時は $gameParty.gold()
                      戦闘回数を出したい時は $gameSystem.battleCount() 
                      です。

                      あとは59行目以降です。
                      解説しなくても大体感覚で分かるとは思うのですが、一番最後だけ。
                       
                          // ウィンドウの色調
                          Window_Info.prototype.updateTone = function() {
                              this.setTone(64, 0, 128);
                          };

                      this.setTone(64,0,128);
                      これは「ウィンドウの背景色調を赤64、緑0、蒼128の割合にせよ」という意味です。
                      この割合で塗ると上の様な紫色になるわけです。
                      「こんな派手な色にしなくても、普通のシステムの色でいい」という場合は、この4行分丸ごと不要です。がっつり消してください。



                      といったところで、かなり今回は駆け足気味での解説でしたが、如何だったでしょうか。
                      自信が無いと最初に書きましたのは、もっと他にやり方があるかも知れず、もっと手数を減らせるかも知れないからです。まだまだ勉強しないといけませんね。。

                      今回はマップ上に情報ウィンドウを表示させるという目的で書きましたが、もちろん応用すれば、



                      こんな風に、メニューの空いた部分に表示させることも出来ます。
                      Mapに表示する処理の部分を、Menu上に表示させる処理に移動させるだけです。
                       
                          var _Scene_Menu_create = Scene_Menu.prototype.create;
                          Scene_Menu.prototype.create = function() {
                              _Scene_Menu_create.call(this);
                              this.createInfoWindow();
                              this._InfoWindow.y = this._commandWindow.height;
                          }

                          Scene_Menu.prototype.createInfoWindow = function() {
                              this._InfoWindow = new Window_Info();
                              this.addWindow(this._InfoWindow);
                          };
                          
                          var _Scene_Menu_update = Scene_Menu.prototype.update;
                          Scene_Menu.prototype.update = function() {
                              _Scene_Menu_update.call(this);
                              this._InfoWindow.setText();
                          };

                          function Window_Info() {
                       (以下略〜あとは上述と同じです)

                      大体似たような事をやっていますが、
                      this._InfoWindow.y = this._commandWindow.height;
                      ここで、コマンドウィンドウ分の高さの位置に、メニュー内情報ウィンドウのy座標を入れる事により、たとえコマンドウィンドウの項目がいくつに変更されたとしても対応出来る様にしています。

                       
                      | RPGツクールMVプラグイン | 18:11 |- |
                      【紹介記事】ボスが手下を無限に呼び出すプラグイン
                      0
                        ボスを倒さない限り、どんどん手下が湧いてくるってイベントがありますね。
                        ツクール本体の「途中から出現」機能を使っても似た感じの事は出来るのですが、有限ならともかく無限に湧かせようとすると一手間も二手間もかかります。ましてや他の敵グループから呼んでくるなんていうのも不可能ですよね。

                        それを簡単に実装できるプラグインがありましたので、今回ご紹介させていただきます。

                        Enemy Reinforcements
                        http://himeworks.com/2015/11/enemy-reinforcements-mv/
                        作者:HimeWorks様
                        ※このプラグインは単体で動作可能です。



                        プラグインのセット方法については割愛します。

                        まず[敵キャラ]の設定で、ボスと敵を作ります。
                        ステータスやメモ欄は特にこのプラグインを入れたからといって新規で追加する必要はありません。

                        続いて[敵グループ]の設定で、ボスの画面に見てください。

                        手下を呼び出すタイミングの条件を設定し、
                        プラグインコマンド

                        add_enemy_troop <敵グループID>

                        を入力します。

                        例では、敵グループリストの中から手下に設定したいコウモリは10番なので、



                        add_enemy_troop 10
                        にします。
                        条件は開幕呼び出して欲しいので「ターン0」、
                        スパンはバトルです。



                        これで、開幕に敵グループID10番に設定されたコウモリが出現します。
                        「途中から出現」コマンドは一切不要なので、画面も見やすくて便利です。

                        この後、手下のコウモリが二匹とも倒れた場合、
                        次のターンの始まりに再びボスが同じコウモリを呼び出したいとします。

                        条件「ターン 1*X」
                        スパン「ターン」をセットし、
                        バトルイベントの内容は「条件分岐」を設定します。



                        条件分岐の中の「スクリプト」をチェックし、

                        $gameTroop.isTroopReinforcementAdded(敵グループID, true) 

                        と入力。「条件を満たさないときの分岐を作成」にもチェックを入れます。



                        上のバトルイベントの例では、ボスの台詞をいちいち入れていますが、
                        このスクリプトにより条件を満たしている時は、まだコウモリが生きている時
                        条件を満たさないときはコウモリが全滅している時なので、
                        この「条件を満たさないとき」の方に、呼び出しのプラグインコマンド

                        add_enemy_troop <敵グループID>

                        を再び入力します。
                        これで無限に手下を呼び出すバトルイベントの完成というわけです。
                        | RPGツクールMVプラグイン | 23:22 |- |
                        PR