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

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

    | - | |- |
    こんなに面白いダメージ計算式の世界
    0
      今回はスキル作りについての小ネタです。
      敵に与えるダメージ量や、味方をHPの回復量などを設定する時、[計算式]という欄にその計算式を入れますよね。



      上の画像はツクールMVでプロジェクトを作成した時、スキルの通常攻撃欄を見ると、a.atk * 4 - b.def * 2という数値が既に入れられています。このとき計算式欄上にマウスカーソルを置くと、こんな表示が出て来ます。



      つまり、a.atk * 4 - b.def * 2は
      「使用者の攻撃力の4倍」−「対象者の防御力の2倍」という意味なので、
      プレイヤーの攻撃力が70で、敵の防御力が40の場合は、200前後のダメージになる事が分かりますよね。

      この計算式に使用可能なステータス一覧は本体ヘルプにも書かれている事なので、
      「そっかぁ、これだけでダメージ計算を組む事しか出来ない感じか〜」
      と不満を募らせる作者さんも多いのでは無いでしょうか。

      しかし! これだけではありません。
      この計算式欄にはもっともっと色んな値を入れることが出来ます。

      その一例を紹介していきたいと思います。

      Math.max((a.atk * 4 - b.def * 2),a.luk)
      敵の防御力が高くて通常攻撃が通らない相手でも、a.luk つまり攻撃する者の「運」が最小保証ダメージになります。パーティーレベルが高すぎて雑魚敵からのダメージが0になってしまうのを避けるために、敵側の通常攻撃にこの数値を入れたりしました。


      Math.floor(Math.random () * 5) + 1
      1〜6までの数値の中からランダムで数字を算出し、ダメージを与えます。
      ダイスを振る様な特技にはもってこいの計算式です。
      1〜200までの数値の中からランダムでダメージを与えたい場合は、Math.floor(Math.random()*199)+1とします。
       

      if ( b.level%5 == 0 ) {9999} else {0}
      条件式だって組み込めちゃいます。
      レベル5の倍数のキャラには9999を与え、それ以外はノーダメージという、FFにおける「レベル5デス」的な計算式です。




      $gameParty.steps()
      なんと敵味方のステータスとは全く無関係なパーティーの歩数を計算式に入れることも出来ます。



      画像は6歩歩いて戦闘開始した状態で特技を使用。
      参考までにFF6にも「歩数ダメージ」という面白い青魔法がありましたが、その計算式は歩数÷32、消費MPはプレイ時間×2でした


      $gameParty.gold()
      パーティーの所持金です。



      画像は1200G所持した状態で特技を使用。
      「銭投げ」の様なものが作れます。
      (所持金を減らすには計算式を調整しコモンイベントを併用するといいでしょう)


      $gameTroop.turnCount()
      現在の戦闘ターン数です。



      画像は4ターン経過した状態で特技を使用
      ターンをかければかけるほど強くなったり、弱くなったりする特技なんていかがでしょうか。


      $gameSystem.battleCount()
      パーティーの戦闘回数

      $gameSystem.winCount()
      パーティーの戦闘勝利回数

      $gameSystem.escapeCount()
      パーティーの戦闘逃走回数

      この辺りは長編RPGではかなり使えるかも知れませんね。
      FFでも(FFばかり例に挙げてますが)逃げれば逃げるほど攻撃力が強くなるチキンナイフという武器がありました。この式を入力しておく事でそういったスキルが簡単に実装出来ます。

      もちろんこれらの式にも計算を組み入れる事が可能。
      例えば戦闘回数を2分の1したダメージを与えるには、

      $gameSystem.battleCount() / 2

      戦闘勝利回数から逃走回数を引いたダメージを与えるには、
      $gameSystem.battleCount() - $gameSystem.escapeCount()

      を入力欄に書き入れる感じですね。

      他にもまだまだ。
      $gameSystem.playtime()
      プレイ時間

      $gameTimer.seconds()
      タイマーの残り秒数

      $gameSystem.saveCount()
      セーブ回数

      セーブをすればするほど弱くなってしまうスキルとか、タイマーの残り時間が減ってピンチになるほど強くなる一発逆転スキルとか、いろいろ遊び心があって楽しいでしょう。取得出来る数値はまだまだ沢山ありますので、是非面白いダメージ計算式を作ってみてください。

      2016/03/09 12:09追記
      書き忘れました。
      正確な数値を得るためには計算式入力欄すぐ下の「分散度」を0%にしてください。これを忘れていると「(現在HP-1)のダメージを与える魔法!」を作ったはずなのに一撃で死亡してしまう事もよくあります(笑)。
      | 戦闘 | 10:45 |- |
      ストレスフリーなランダムエンカウントを目指す
      0
        ランダムエンカウントについて語ります。
        今回は完全に個人的な考えです。

        ランダムエンカウント」とは、モンスターの姿が見えずランダムなタイミングで出現するエンカウントシステムの事です。洞窟内をテクテクと探検していて唐突にドシャーン!という音と共に戦闘画面に切り替わるアレです。

        逆に敵の姿が見えていて、敵から当たりに来たり、こちらから敵に触れて戦闘画面に切り替わるシステムは「シンボルエンカウント」。どちらのエンカウント方式がプレイヤーに好まれているのか先日Twtiter上で集計を取ってみました所、この様な結果となりました。ジャン。



        圧倒的シンボルエンカウント人気・・!!

        「自分の好きなタイミングで戦闘が出来る」
        「見た目で敵の強さを判断出来るため、危険な場合は戦闘を避けられる」
        といった理由に加えて、
        「ランダムエンカウントが苦手」
        という理由も含まれている気がします。

        私自身も結構ランダムエンカウントが苦手でして、理不尽なエンカウント率にストレスが溜まる事があります。
        「は〜、いまの敵強かった〜。これでやっと先に進めるよ・・」
        と思った瞬間、1〜2歩進むとまた同じ敵と遭遇する、という事もあるあるです。
        もう勘弁してくれーーー!ってなりますよね。
        好きな市販ゲームをプレイしているのならまだしも、
        フリーゲームでは辟易して途中で投げ出される危険性だってあります。

        出ない時は全然出ないのに、出る時は本当によく出る。乱数というのは偏って当然のものなので、いかに敵出現歩数を5歩に設定しようが50歩に設定しようが100歩に設定しようが、2歩目3歩目で連続で出現する事はよくある事なのです。

        ただ、シンボルが見えている敵に当たって全滅した時は「くそ〜、今の奴に当たらなければ良かったなぁ」って考えるものですが、ランダムで全滅した場合だと完全に「運が悪かった」で済ませるしかなく、それが何となくやきもきするんですよね。「あの時自分がこうしていれば・・」という形での対策の立て様が無いぶん、ランダムエンカウントはかなりプレイヤーにとって理不尽なエンカウント方式と言えます。

        ■RPGツクールMVにおけるエンカウント率の調整方法

        各マップの編集画面を開くと、「敵出現歩数」という項目があります。



        この敵出現歩数を、例えば「10」に設定したとします。
        それは
        「大体10歩進むごとに敵が出ますよー」って、

        意味ではありません

        厳密には違います。
        ツクールMVの敵出現歩数の計算式はこんな形になっています。

        js/rpg_object.js  7535〜7538行目
        Game_Player.prototype.makeEncounterCount = function() {
            var n = $gameMap.encounterStep();
            this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1;
        };

        青い行の中にある「Math.randomInt(n)」のnにあたる数値、
        それこそがマップの編集画面で設定した「敵出現歩数」なのです。

        Math.randomIntは(n)の乱数を算出する、という意味なので実際には
        (0〜n歩までの乱数)+(0〜n歩までの乱数)+1;
        マップ編集画面で敵出現歩数を10歩にした場合は
        (0〜10歩までの乱数)+(0〜10歩までの乱数)+1;
        となります。

        試しに私自身で0〜10までの乱数を10回ほどやってみました。
        乱数生成サイトで試せます。

        4, 1, 3, 1, 0, 2, 6, 3, 0, 4

        なんと、7以上が全然出ない!
        よりによって3以内の数値が5連続しているではないですか。
        (これが言いたいがために調整したわけじゃありませんよ!)
        この数値をツクールの計算式にあてはめると、

        (1) 洞窟に入って(4+1)+1 = 6歩目で出現
        (2) 1の敵を倒した後(3+1)+1 = 5歩目で出現
        (3) 2の敵を倒した後(0+2)+1 = 3歩目で出現
        (4) 3の敵を倒した後(6+3)+1 = 10歩目で出現
        (5) 4の敵を倒した後(0+4)+1 = 5歩目で出現

        という様に、(4)を除いてはかなり短い間隔で出現する事になりますよね。
        敵出現歩数は「大体10歩で敵が出現する」事を設定する項目ではなく、
        あくまで「乱数を振るための最大設定数値」でしか無いわけです。

        ランダムエンカウント方式において最もストレスがたまるのは、
        「今戦闘を終えたばかりなのに1歩動くだけで次の敵が出たよ」
        という状況が、連続する事では無いでしょうか?


        この状況を出来るだけ修正したいと思います。

        this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1;

        この計算式の最後の「1」に着目してください。
        これは乱数の外側にある数値なので、この数値を10に変更する事で「乱数+乱数+10」となり、最低10歩は敵が出ないという状況を作ることが出来ます。実際私の作品「ナイトオブシンデレラ」ではこの数値に5(バージョン1.3.1以前は10)を入れ、最低5歩は敵が出ない様にしています。

        が、しかし、です。
        これはあくまで「1歩動くだけで敵が出たよ」という状況を避けただけに過ぎず、敵の出現歩数にパラつきがある事は変わっていません。敵出現歩数を「20」に設定している場所でも、(0〜20)+(0〜20)+5で、最短で5歩、最長で45歩ノーエンカウントで進めるという状況です。
        つまり物凄く乱数運が悪い人は「5歩進むごとに敵が連続で出る」というストレスの溜まる状況は変わっておらず、逆に沢山戦闘をしてレベルを上げたい人にとっては「30歩歩いても40歩歩いても次の敵が全然出ない」ので、これも逆にストレスが溜まる結果になります。最低歩数を増やした所で、バランスの悪さは変わらないわけです。

        これの解決策として、
        私は逆に「乱数の偏りを消すこと」で、ランダムエンカウントをストレスの無い方式にしてみたいと思います。はっきり言ってこれにより「いつ敵が出てくるのか」という緊迫感や面白味は減るかも知れませんが、そういった緊迫感に重きを置く作品では無いので、次回作でやってみます。
        もちろんあくまでこの考えは主観なので、乱数は偏るものだと割り切って連続する戦闘を楽しめる人には非常に余計な計らいですが、個人的にはこれがベストなエンカウントバランスだと思っているので、あくまで参考程度に見て頂ければと思います。

        計算式は次の様に変えます。

        this._encounterCount = Math.randomInt(5) + n;

        0〜5歩の乱数にnを足します。
        敵出現歩数を「10」にセットしたフロアでは、10〜15歩。
        敵出現歩数が「20」にセットしたフロアでは、20〜25歩。
        つまり、本体のマップ編集画面側で設定する数値の方を最低ノーエンカウント保証歩数とし、ダンジョンごと・フロアごとに出現歩数は積極的に変えていきます。これで前のエンカウントから次のエンカウントまでの間隔はほぼ均等になるので、「うわぁ・・敵出すぎ」と感じることは少なくなりますし、「ここ敵全然出ないよ」と感じることも少なくなると思います。

        こんな計算式だけを見ていてもピンと来ないと思いますので、
        ブラウザでエンカウントチェック出来る簡単なゲームを用意してみました。
        是非一度お試しいただければと思います。

        ブラウザでプレイする
        (Google Chrome / Safari推奨)

        「最適な出現歩数」のフロアが、この最後の計算式を入れたもので、本体側では敵出現歩数「15」を入れています。

        好みや乱数の出方によっては一番上の「出現歩数10歩」でもバランスが良いと感じるかも知れませんね。ランダムにせよシンボルにせよ、戦闘頻度のバランスの好みは個人差があるので、その調整は永遠の課題です。
        | 戦闘 | 11:53 |- |
        カスタムステート(状態異常)を作ろう!
        0
          こんにちは。

          まずはじめに。
          公式角川エンターブレイン様のツクール開発部様ならびに、沢山の方々のリツイート&ファボ&フォローなどのおかげで、予想以上のアクセスを頂きました。本当にありがとうございます。まずは厚く御礼申し上げます。
          「oggとm4aの軽量化とループタグ引き継ぎ」の一件をまとめるために簡素に作ったブログでしたが、せっかくだからもっと面白いことをやってみようと開設初日にいきなり方向転換し、溜まっているアイディアやお蔵入りしたアイディアなど、色んなことを書き留める場にしようと思い立ちました。また、プラグイン作者様による素晴らしいプラグインなどもどんどん細かく紹介出来ればいいなとも思っています。このブログを訪れる皆さんと、皆さんの作品を触れた人々が沢山沢山感動する様な、そんな場にしていきたいですね。

          さぁ、今回はカスタムステート、オリジナルの状態異常を作りましょう。
          毒・眠り・混乱・マヒ・呪いなど、どのRPGでもよく聞く名前の状態異常はツールにデフォルトで入っていますね。
          「割とよく聞くのに、あれは作れないのかな?」というステートの作り方を綴っていきたいと思います。

          ■石化状態の作り方

          石化はマヒと大体同じ扱いですが、
          マヒは敵からダメージをもらうのに対して、
          敵からは狙われず、自然回復もしないってイメージですよね。
          特定の攻撃をもらうと砕け散るというのがFF10でありましたが。

          とりあえずデータベースの[ステート]に設定する内容としては、こんな感じでいいと思います。



          続いてそのステートを付加する[スキル]の設定。
          分かりやすく「石化パウダー」にしておきましょうか。
          確率は適当にいじって下さい。ここでは耐性装備無しだと100%かかる様にしています。



          さて戦闘です。「石化パウダー!」



          全員石化したら、普通は全滅ですが、



          この設定のままだと全滅にはならないので、TYPE74RX-Tさんが作成されておられる「全員が自然回復不能な行動不能ステートを受けると全滅」というプラグインをご利用くださいませ。便利です。

          「えっ!? じゃあこの記事意味なくない?」って思われている方は、落ち着いてよく見てください。

          ちゃんと全員灰色になって石化した姿になっているでしょう!

          ツクールの標準機能ですと、状態異常のアニメーションが頭の上でうにょうにょ動くしか出来ませんし、わざわざ全員分のキャラグラフィックを画像ソフトでいじって灰色にして・・なんてのも大変ですよね。

          石化ステートが付加されたキャラクターを、プラグインで灰色に染めます。
          多分幾つか編集出来る箇所、もっと最適な編集位置はあると思うのですが、私はここに入れています。

          rpg_sprites.jsの845行目、Sprite_Actor.prototype.refreshMotion。
          中に直接書き加えてもいいのですが、これも外部プラグインの方に書きますね。
           
          (function() {

              // ステート時のグラフィック変化
              var Sprite_Actor_prototype_refreshMotion = Sprite_Actor.prototype.refreshMotion;

              Sprite_Actor.prototype.refreshMotion = function() {
                  Sprite_Actor_prototype_refreshMotion.call(this);
                  // 石化状態にかかった時
                  if (this._actor._states[0] == 13) {
                      this._mainSprite._colorTone = [0,0,0,255];
                  }else{
                      this._mainSprite._colorTone = [0,0,0,0];
                  }

               }

          })();

          Sprite_Actor.prototype.refreshMotion関数の中に
          「ステート13がかかっている時に、キャラクターグラフィックの配色を灰色にする」
          という処理を挟み込んでいます。

          this._actor._states[0] == 13
          この13という数字を、石化のステートIDにしてください。

          this._mainSprite._colorTone = [0,0,0,255];
          これが戦闘キャラグラフィックの色調を設定するものです。
          コンマ区切りの4つの数字の意味は、左から[赤,緑,青,グレー]。
          数字が大きければ大きいほど、その色調が強くなります。
          ここでは赤・緑・青が0、グレーが255なので、グレーのみで色調が構成された状態・・
          つまり灰色、石の色、というわけですね。

          ここは色々いじって試してみて下さい。

          [-150,-100,-180,90] で緑っぽくすればゾンビ状態になりますし、



          [0,50,255,0] で青くすれば凍結状態なんかのステートも作れますし、



          [255,25,255,0] でステート設定のSV 重ね合わせを[魅了]にする事で、
          魅了状態という事をピンクにしてより分かりやすくする事が出来ますね。



          では応用編といきましょうか。
          FFでおなじみ、こんな技を作ってみました。



          この技でなんと、



          パニア姫がちっちゃくなっちゃった!!!!

          これもスクリプトをいじる事で実装可能ですが、
          前回の記事を見た人にはピンと来ていると思います。おわかりですね?
           
          (function() {

              // ステート時のグラフィック変化
              var Sprite_Actor_prototype_refreshMotion = Sprite_Actor.prototype.refreshMotion;

              Sprite_Actor.prototype.refreshMotion = function() {
                  Sprite_Actor_prototype_refreshMotion.call(this);
                 // 小人状態にかかった時
                  if (this._actor._states[0] == 14) {
                      this.scale.x = 0.5;
                      this.scale.y = 0.5;
                  }else{
                      this.scale.x = 1;
                      this.scale.y = 1;
                  }

              }

          })();

          ご覧の通り、Sprite_Actor.prototype.refreshMotion関数の中に、今度は
          「ステートID: 14がかかっている時に、キャラクターグラフィックを0.5倍にする」
          という処理を挟み込んでいます。
          前回の記事でルバンシュをでかくしたあの変数を使います。

          本体側でのステートID:14の設定はこんな感じにしています。



          石化と違って普通に行動可能。
          ただし攻撃力・防御力はスカスカです。
          魔法力までは弱めてはいないので、魔法で攻撃するしか無いって感じですね。

          あ。石化状態も小人状態も「ステート解除:石化」「ステート解除:小人」のスキルやアイテムで元の姿に戻れますのでご安心ください。戦闘以外での石化・小人グラフィックなどは用意するのもスクリプトを作るのも割と面倒だと思うので、戦闘終了時に解除にしておくのが優しさかも知れませんね(私が面倒なだけです)。


          ■動物の姿に変身させられる魔法の作り方

          いま私が製作中のゲーム「Graystory〜ラハと魔法の園〜」は沢山の魔法が飛び交う魔法学園の物語。
          人を動物に変える魔法なんてのも出てきます。あのメガネの魔法少年のシリーズ映画にも何度か出てきましたよね。

          あれを実際戦闘中にやってみました。こんな感じです。



          「ラットフラッシュ」という技を敵が使うと・・



          なんと、剣士ルバンシュとパニア姫がねずみの姿に!!

          ちょっと待って、何で某ゲームでメジャーなトー○の魔法でカエルにしたり、ポー○ーの魔法で豚にしなかったの?」と突っ込みが色んな方から入ると思いますが、有志の方が作成されたネズミのバトルグラフィック素材が海外のツクール関連の掲示板にあったからです。
          今回の記事サンプルに使わせていただきました。作者さんありがとうございます。

          で、今回はどんなスクリプトを作るのかと言うと、
          これは実はスクリプトをいじらずとも、本体だけで出来ちゃうんです
          ただし、サイドビューバトル用の動物のキャラグラフィックが必要です。
          (これが全然なくて・・このブログが流行って動物シリーズの素材がどんどん増えていくのに期待します。出来ない私は他力本願・・)

          ともかく、設定方法です。まず[ステート]から。



          攻撃力と防御力、魔法防御は弱く設定。そしてネズミにされると魔法が使えなくなる、という形にしたいので「スキルタイプ封印」で魔法は封印しましょう。
          ここでは「戦闘終了時に解除」にチェックを入れていますが、変身した姿の動物のキャラグラフィックと治す手段があれば、別にそのままでもいいです。

          続いて、ネズミに変身させる[スキル]の設定。



          ステート付加にさっき設定した「変身」、
          そして「コモンイベント」を使います
          これがこのステートを実装するための肝となります。

          [コモンイベント:変身]はこの様になっています。



          つまりアクター4人の条件分岐ですね。
          ルバンシュが変身ステートにかかったら、アクターの画像変更でバトラーのグラフィックを変更・・という様な形です。

          ちなみに治し方ですが、
          「変身回復」のコモンイベントを作って、今度は逆にします。
          ちなみにステート解除は、このコモンイベントの画像変更処理の後に入れてください。回復アイテムにステート解除とコモンイベントを同時に入れると、ステート解除の方が優先されるのか、コモンイベントがうまく動作しませんでした。



          注意すべき点として、
          ステートの画面で「戦闘終了時に解除」にチェックを入れている場合。
          ステートは戦闘終了後に消えてもグラフィック自体は変身後の姿のままなので、
          戦闘終了後にこのコモンイベントを発動させることは忘れずにしておいてくださいね。
          ボス戦なら戦闘処理の後に入れればいいですが、雑魚戦ならちょっと面倒なので、戦闘終了後に解除させない様にし、セーブポイントやアイテムでコモンイベントを発動させた方が早いでしょう。

          コモンイベントで設定していくのはある意味スクリプトよりもかなり面倒ではありますが、一番大変なのはやはり動物のグラフィックの用意ですよね。色や大きさの変化だけで良かった石化・小人化が3〜4行のスクリプトで済む分どれだけ楽だったか、、;

          ちなみに、全員がネズミにさせられて4匹ネズミが並んだ絵がかなり不気味で、私自身まともに画面を見られませんでした(笑)。カエルが並ぶ絵も苦手なんですけどもね、、可愛らしい動物のサイドビューキャラグラフィック、流行るといいですね!

          さてさて、いかがだったでしょうか。
          キャラクターの色や大きさ、姿が変わる系の状態異常にしぼって作り方を解説させて頂きましたが、まだまだ世の中には色んなステートがありますよね。かかると炎のダメージを2倍受けるとか、かかるとHP以外にMPまで減っていくとか。。

          今回の記事を作る過程で、状態異常のかかったキャラの色調を変更するプラグイン「StateColor.js」を作りました。
          [ステート]画面のメモ欄に、



          こんな感じで、



          <chara_tone: 数値1,数値2,数値3,数値4>

          上を参考に、4つの数字を入力する事でステートにかかった時の配色が変更可能です。
          プラグインの中の数値をいちいち調整するより楽だと思います。
          こちらからダウンロード出来る様にしています。
          ダウンロード

          (※お詫び
           今回の記事は、重ねがけや他のステートがかかっている時のケースに対応していません。
           配列の0番目しか取得していないためです。
           ループさせて配列から色調変更のステートを参照すれば良いのは分かっているのですが、
           ひとまず「こんな風にやれば出来るよ」ってやり方の紹介のみとさせていただきますので、
           状態異常が1種類のイベント戦などにご利用いただけると嬉しいです。
           プラグインは有志さんによる修正も希望です;)


          状態異常攻撃は戦闘においてはとても面倒くさいイメージがありますが「戦闘を面白く演出する」という意味では、無くてはならない存在だと思います。
          これからも戦闘を面白くするためのアイディアなどはどんどん提案していきたいと思いますので、今後とも当ブログをよろしくお願いいたします。
          (公開中のRPG「ナイトオブシンデレラ」もよろしくです)
          | 戦闘 | 17:28 |- |
          戦闘中、敵の前に立ちはだかる仲間の作り方
          0
            こんにちは。
            前回・前々回の記事の「戦闘途中で助けに来るキャラクター」の作り方の続きです。
            いい加減あの自意識過剰娘シエスタの顔を見飽きたって人も多いと思うので、選手交代。

            今回は
            「上から落ちてくるだけじゃまだまだ物足りない、
            苦戦している仲間の前に颯爽と立ちはだかって、ボスから守るイベントを作りたい!」
            というバトルイベントの作り方です。

            某FFシリーズの某キャラでおなじみのイベントですが、ネタバレになるので伏せます。



            こんな感じですね(結局自意識過剰じゃないかという突っ込みはさておき)

            注目すべき点は、前回の「上から来てやったぞ!」に加えて
            ・お助けキャラが敵と味方の真ん中にいる
            ・お助けキャラが味方の方を向いている

            この2点です。

            今回は結構バトル中モーションの核となる部分にスクリプトを書き加えなければいけなくなるため、「rpg_sprites.js」は書き換えずに、このRPG専用の独自プラグインを作成し、そちらに記述したいと思います。
            となるとプラグインの作り方から解説しなければなりませんが、結構手間がかかるので3分クッキングの様に掻い摘まんで説明します。

            まずは本体側の設定から。
            [バトルイベント]でこういう感じのイベントをセットしておきます。
            ついでに参上と共にお助けキャラのテーマ曲などを流すと盛り上がりますよね。

            ■バトルイベント側の処理



            スイッチのOFFは、Javascript側で制御したいと思います。
            どうせONの後すぐOFFにするので、本体側でだらだらと並ぶとややこしいからです。

            さて、では本題。スクリプトの書き方です。
            書き換えが必要な部分は前回と同じ「rpg_sprites.js」の820〜870行目付近ですが、

            ・スイッチ1がONの時に右向きのルバンシュが、味方と敵の間に、上から降ってくる
            ・スイッチ2がONの時にルバンシュが左を向く


            単純な処理ですが、書き加える部分が数行に及ぶ上にif文が混在するので、
            オリジナルでプラグインを作成し、今回書き加える部分のみをそちらで管理したいと思います。この記事の最後に今回作ったJavascriptファイルも置いておきますので、書き換えて色々遊んでみてください。

            ■プラグイン側の処理
            ひとまずJavascriptを編集出来る環境に整えておいてください。
            普通のテキストエディタでも構いません。
            「Original.js」という空ファイルを作成し、プロジェクトフォルダのjs/pluginフォルダ内に入れます。

            プラグインを動かすために必要な情報のみ、ひとまず書き加えます。
            こんな感じです。
             
            //=====================================
            // Original.js
            //=====================================

            /*:
             * @plugindesc オリジナルゲーム専用プラグイン
             * @author Me
             *
             * @help オリジナルゲームのために作成したプラグイン
             *
             */

            (function() {


            })();

            ここまででひとまず保存。
            文字コードはUTF-8(BOM無し)にしておいて下さい。
            ツクールMV本体側の[プラグイン管理]には項目が出てくる様になりますので、
            Original.jsを[ON]にしておいて下さい。

            実際に処理を書いていくのは  (function() { から })(); までの間になります。

            仲間加入時のモーションを設定しているのは、昨日も解説しましたrpg_sprites.jsの870行目あたりのSprite_Actor.prototype.startEntryMotionです。
            今回はこの処理をOriginal.jsの方に移したいと思います。

            いいですか? いっきに行きますよ〜。
             
            (function() {

                // 仲間加入時のモーション
                var _Sprite_Actor_startEntryMotion = Sprite_Actor.prototype.startEntryMotion;

                Sprite_Actor.prototype.startEntryMotion = function() {
                    _Sprite_Actor_startEntryMotion.call(this);

                    // スイッチ#0001がONの時の動き
                    if($gameSwitches.value(1)){
                        // 着地位置
                        this.setHome(450, 320);
                        // 上から来るぞ
                        this.startMove(0, -240, 0);
                        // 右向き
                        this.scale.x = -1;
                        // #0001スイッチをOFFにする
                        $gameSwitches.setValue(1,false);
                    }

                };
             

            「うわぁ・・」と思われる方も居るかも知れませんが、落ち着いてみてください。
            私もかなり初心者ゆえに簡単なJavascriptしか使えないので、やってる事は一つ一つゆっくり見ていけば、ある程度分かると思います。

            if($gameSwitches.value(1)){
            スイッチ0001がONの時、という意味の処理です。

            this.setHome(450, 320);
            これが敵と味方の間の着地位置です。450がx座標、320がy座標ですね。
            ツクールMVではthis.setHomeという命令で、それが設定出来る様です。
            数値は自由に変更して確認してみてください。
            数をちょこちょこと変えるだけでも結構楽しいですし、色んなアイデアが降って来ますよ。

            this.startMove(0, -240, 0);
            これは昨日説明しましたね。上から来いよって命令です。

            this.scale.x = -1;
            この処理こそが今回のイベントのMVPです。ツクールMVだけに(←寒い)。
            「scale」というのは、その単語の意味する通り、グラフィックの大きさを決定するための変数です。
            xは横軸なので幅、yは縦軸なので高さですね。
            試しにここの数値をthis.scale.x=2、this.scale.y=2に変えてみてください。
            ↓キャラのグラフィックが2倍の大きさになりますから(笑)。



            このscaleという変数、負の数値を書く事で反転するのです
            仲間キャラだけじゃなくて敵キャラももちろん反転します。
            敵が反対向いた先制攻撃や、味方が反対を向いたバックアタックも作れますよ。
            わざわざ反転したグラフィックを用意する必要は無いわけです。
            なんて優秀!!

            $gameSwitches.setValue(1,false);
            最後にスイッチ#0001をOFFにして終わりです。

            まとめますと、
            (1) スイッチ#0001がONになったら
            (2) x=450,y=320の座標位置に
            (3) y=-240の方向から着地し
            (4) scale.x = -1で右向き状態にし
            (5) スイッチ#0001をOFFにする
            という工程です。

            では今度はルバンシュが一通り台詞を吐いた後に、敵の方向にくるっと振り向くというイベントを作ります。
            このSprite_Actor.prototype.startEntryMotionは戦闘開始時・メンバー加入時の動きを決めるものなので、ここにはその続きの処理を書いても意味がありません。別の場所に書く必要があります。
            同じくrpg_sprites.jsファイルの820行目あたりにある、Sprite_Actor.prototype.updateMotionです。戦闘中のキャラのモーションをセットするための関数です。

            ではこちらもOriginal.jsに書き加えましょう。
            さっき書いた部分の後に追加していきます。

            また一気に行きますよ〜。
             
                // バトル中のモーション
                var _Sprite_Actor_prototype_updateMotion = Sprite_Actor.prototype.updateMotion;
                Sprite_Actor.prototype.updateMotion = function() {
                    _Sprite_Actor_prototype_updateMotion.call(this);

                    // スイッチ#0002がONの時の動き
                    if($gameSwitches.value(2)){
                        // ルバンシュ(Actor1_7)を左向きに転換
                        if (this._battlerName == "Actor1_7") {
                            this.scale.x = 1;
                        }
                        // #0002スイッチをOFFにする
                        $gameSwitches.setValue(2,false);
                    }

                };

            「また何のこっちゃ」って感じかも知れませんが、やってる事はさっきと同じです。

            設定したバトルイベントでは、スイッチ#0002をONにした時に発動させたいので、

            if($gameSwitches.value(2)){
            スイッチ#0002がONの時

            if (this._battlerName == "Actor1_7") {
            ここで方向転換させたいキャラを限定させています。
            これ入れないとその場に居る仲間全員が方向転換してしまいます。
            (まあ全員最初から左向いているので問題は無いのですが)
            「Actor1_7」というのは、ルバンシュのグラフィックのファイル名(拡張子無し)です。
            プロジェクトフォルダ内のimg/sv_actorsに入っているものを確認してください。

            this.scale.x = 1;
            さっきの逆ですね。
            左向き、つまり本来の戦闘と同じ様な形で向かせたいので、数値は正の整数にすればいいわけです。

            $gameSwitches.setValue(2,false);
            スイッチ#0002をOFFにして終わりです。
            以上です。ね、簡単でしょう。

            まとめますと、
            (1) スイッチ#0002がONになったら
            (2) Actor1_7のグラフィックを
            (3) scale.x = 1で左向き状態にし
            (4) スイッチ#0002をOFFにする
            という工程となります。

            あとはOriginal.jsを保存して、出来上がりです。
             



            いかがでしょうか?
            結構ごっちゃごちゃと書いた様に見えますが、実際スクリプトは20行すら足していません。

            ちなみにこのボスは「あんたから始末してやる!」という台詞を吐いているので、
            ルバンシュの装備品に「狙われ率」の高いものを装備しておくと良いでしょう。
            (戦闘終了後に外すか入れ替える)

            では最後に、
            上で書いたOriginal.jsはダウンロード出来る様にしておきますので、
            色々数値を変えたりして遊んでみてください!

            ダウンロード(Original.js)

            長くなりましたが即席で作成した「お助けキャラは上から来るぞイベント」講座はここで終わりです。
            次回はまた別のネタにて!
            ここまでお読みいただきありがとうございました〜。

            | 戦闘 | 11:22 |- |
            戦闘中、上から助けに来る仲間の作り方
            0
              こんにちは。
              前回記事「ボス戦を盛り上げる5つのテクニック」の3番目「途中で仲間が駆け付ける」イベントについて。

              バトルイベント[メンバーの入れ替え]で仲間を追加する事で、
              戦闘途中で仲間が加入するイベントが作れます。

              ただサイドビューではこの時あまりにも普通に仲間がスタスタ右から走って来るので、
              「普通に走って来るなんて盛り上がらない! せめて忍者みたいに上から飛んで来いよ!」
              って思うのがRPG好きな方々の罵声だと思います。

              しかしツールだけでは無理なので、スクリプトをいじりましょうと私は前回書きました。
              「無理な事は全部スクリプト任せって言っておけばいいと思ってない?」
              「さじを投げたw どうせコトノハにはそんなことは出来ないんだろ?」
              などと思われていてもおかしくないので、

              実際に上から助けに来る仲間を作ってみましたよ。

              上から来るぞ
              (GIFアニメーション)

              ね。出来てるでしょう?
              それでは実際どこをどんな風にいじれば出来るか解説しましょうか。

              ツクールMVに含まれている幾つものJavascriptファイルの内、
              バトル上のキャラクターの動きを管理しているのは「rpg_sprites.js」です。

              870行目あたりをご覧ください。

              Sprite_Actor.prototype.startEntryMotion = function() {
                  if (this._actor && this._actor.canMove()) {
                      this.startMotion('walk');
                      this.startMove(0, 0, 30);

                  }

              ここです。
              ここは、各キャラをサイドビューの待機位置にスタンバる時の動きを命令するものです。
              this.startMotion('walk')で歩く時のグラフィックを指定して、
              this.startMoveで(X軸,Y軸,時間軸)でどこから来るかを指定します。
              今X=0,Y=0になっているので、
              「ああそうか、縦方向のY軸数値を変えれば上から助けに来る仲間が出来るんだな、よーし」
              と思っている方は、慌てずに最後まで聞いてください

              あくまでここの数値は「戦闘位置にスタンバる時の動きを命令するもの」。
              単にここの数値を変えるだけだと、
              戦闘開始した時にキャラクター全員がドカドカドカっと上から来てしまいます。

              とは言え戦闘開始時のキャラのスタンバイの動きも、戦闘中に新しいメンバーが加入した時の動きも、すべてここで管理しているので、「スタンバイ時」と「加入した時」で処理を分岐させるしかありません。

              特定のバトルで発生させたいだけなので、今回はバトルイベントにスイッチを使いましょう。



              助けに来る直前に1番スイッチをON、
              メンバーの投入が終わったら1番スイッチをOFFにしています。

              そしてさっきのスクリプトに戻ります。

              Sprite_Actor.prototype.startEntryMotion = function() {
                  if (this._actor && this._actor.canMove()) {
                      // スイッチ1番がONの時の動き 
                      if ($gameSwitches.value(1)){
                          this.startMove(0, -240, 0);
                      } else {
                          // それ以外の動き

                          this.startMotion('walk');
                          this.startMove(0, 0, 30);
                      }

              ここに、
              スイッチが1番の時は、キャラは上から来るぞ。そうでない時は普通だぞ
              という命令を入れました。
              これで上からシュタッッっと駆け付けるカッコイイ仲間の出来上がりです。

              ここメンバーの入れ替え後にスイッチをOFFにするの忘れないでくださいね。
              でないとこの次の戦闘から全員上からスタンバイする事になります。

              いかがでしょうか?

              Javascriptの書き換えは自己責任です。半角スペースを全角スペースにするだけでエラーを起こす繊細な生き物なので、慣れていない方が書き換える際は必ずバックアップを取るなどご注意ください。

              おまけ:
              もっと調子に乗ると仲間と敵の間に割って入ってこんな真似が出来ます。
              FF5のギルガメッシュの様なシーンを作るには良いかも知れませんね。
              やり方は・・宿題にしましょう。


               
              | 戦闘 | 00:10 |- |
              ボス戦を盛り上げる5つのテクニック
              0
                RPGで最も盛り上がる戦闘。
                それはボスとの対決ですよね。
                雑魚敵よりも強めに設定した強敵とただ単にそのまま戦うのもいいのですが、
                ゲームの鍵を握る重要なイベント戦なら、せっかくなので色々派手に演出して盛り上げちゃいましょう!

                プラグインは一切無しでも、盛り上げることが出来ます。

                その1 ボス戦BGMをボス戦の少し手前から始める

                「戦闘BGMの変更」でボス戦のバトル曲を変更して盛り上げることが出来ますが、
                その少し手前からボス戦のBGMを流して、
                戦闘前に仲間の結束感を確かめ合うイベントを挟んでも面白いかも知れません。



                ボス前のBGMを戦闘BGMと同じにすると、再読込される事なくそのままのBGMで戦闘に突入してくれます。
                「ナイトオブシテンデレラ」で数回使った手法です。




                その2 ボスが倒れる演出を派手にする

                ツクールMVではボスの消滅エフェクトを設定することが出来ますが、それを使わずにイベントで演出しちゃいましょう。
                ボスのHPが0になった時に「ぐふっ!」バシバシバシィィ!って感じに派手に光ったりするFFシリーズでよく見かけるアレです。




                データベースの[敵グループの設定]でバトルイベントを設定する場所があります。
                ただし、いくらボスのHPが0だからといって
                「条件:敵キャラHP < 0%にして、そのまま下にイベントを書く・・」
                はツクールでは間違いです。
                何故かと言うと、ツクールではHPが0になった時点で戦闘が終了してしまう仕様になっているためです。

                「敵のHPを多めにして、50%ぐらいになった時に演出イベントを発動する」のも手ですが、
                モンスター図鑑などにHPが載る際に不正確な情報が掲載されるのも避けたいですよね。

                方法は簡単です。
                ターン0でボスに「ステート:不死身」をかけます。



                HPが0になった時に演出イベントを加え、その直後に不死身ステートを解除すれば、
                勝手にボスは消滅してくれます。



                (※画像では不死身ステート解除の後にわざわざ戦闘不能を加えていますが、無くても消滅してくれました)

                ちなみにこの時ボスの特徴で「ステート無効:戦闘不能」にしていた場合、
                イベントにセットした「ステート変更:戦闘不能」までも無効となってしまいますので、ご注意ください。


                その3 途中で仲間が駆け付ける

                ある程度ボスのHPを削ってはみたものの、なかなかに厳しい。
                「せめてもう1人居れば・・!」「あいつが来てくれれば・・!」
                という状況の時に、駆け付ける仲間の存在は戦闘を大いに盛り上げてくれます。




                方法は簡単。
                バトルイベントで、仲間が駆け付けるタイミングの時に
                「メンバーの入れ替え」で入れたい仲間を加えるだけです。



                サイドビューの戦闘の場合、何くわぬ顔で右側から走ってきます(笑)。
                上から飛んでくるとか、突然魔法陣から現れるみたいな登場をするには、
                さすがにスクリプトをいじるしか無いかと思います。
                「ナイトオブシンデレラ」でも一箇所使っていますが、普通に歩いて来るのかよって感じでした。


                その4 ボスのHPが少なくなったら発狂モードに突入する

                戦闘も終盤に迫ると、
                「よしあと一息でボスが倒せるぞ」「案外ぬるかったな」
                という感じでプレイヤーが油断するものですよね。
                せっかくなのでボスのHPが少なくなったら唐突に強くなる発狂モードを仕込んでみましょう。



                こちらは事前準備として、ステート「発狂モード」を作ります。



                どうせなら発狂モードになったら攻撃回数ぐらいは増やしてもらいましょう。
                特徴に「行動回数追加:100%」をセットします。
                続いてスキル。



                スキルの名前は「パワーチャージ」という平凡な名前にしていますが、別に「発狂モード!」でも「俺は怒ったぞ!」でも「煉獄の始まり」でも構いません。好きに名付けてください。
                範囲は使用者。アニメーションはボス側にかかるのでそれっぽいものを選んでください。
                使用効果に「ステート付加:発狂モード 100%」を入れます。
                攻撃力と魔法力もちょっと増やしましょうか。
                やり過ぎると理不尽なのでバランス調整は頑張ってください。

                あとは[敵グループ]の設定に戻って、敵キャラのHPが少なくなったあたりを条件に
                「戦闘行動の強制:パワーチャージ」を選ぶだけです。



                これでボスは残りHPが20%切ったら発狂モードに入り、攻撃力と魔法力の強化された二回攻撃を仕掛けてきます。


                その5 戦闘勝利時のMEを消して、直後のイベントに繋げる

                「ボスをやっつけて大団円」、でもいいのですが、ボスをやっつけてもまだまだ緊張の糸をほどいてはならないイベントってありますよね。壊れる塔から脱出するとか、ボスが死の間際に自爆装置を仕掛けていって解除しなければいけないとか、そういったイベントを作ってみましょう。



                この時、その1のテクニックと併用し、
                戦闘前にボス戦の音楽を流し、戦闘勝利の音楽を消す事により、
                ボス戦のBGMが戦闘前後ずっと流れっぱなしになります。

                方法はボス戦前に「勝利MEの変更:なし」イベントを挟み込むだけです。



                ちなみに戦闘BGMや戦闘MEを変更した際は、雑魚戦用のBGMとMEに戻しておくのも忘れずに。
                もちろん、ボス戦直後に再変更イベントを加えない場合は、ボス戦後に次々と残党が襲いかかるイベント(曲はずっとボスBGMが流れっぱなし)も作れますから、色々と演出の幅は広がりますよね。

                いかがでしょうか。
                戦闘イベントを考えるのは大好きなので、他にもまだまだ色んなアイデアが湧いてきます。
                公開中の「ナイトオブシンデレラ」にはここで紹介した演出を幾つも盛り込み、また、次回作「GrayStory」でもこういった沢山の演出を盛り込んでいきたいと思いますので、今後ともよろしくお願いします。

                また、今回紹介したテクニックは全てプラグインは不要なので、
                過去のRPGツクールでも幾つかのテクニックは実装出来ると思います。

                ぜひチャレンジしてみてください!

                ※記事用サンプルを作成するため、マップ素材は春巻空間様の素材を使用させていただきました。
                ありがとうございます!
                | 戦闘 | 00:06 |- |
                PR