忍者ブログ
windowsやブラウザ のゲーム作ったりとか。
どんどんぱふぱふ!
RPGツクールMZ講座始まるよ!

この講座はアドベントカレンダー用に書いたよ。
他の方の記事もとっても参考になるのでぜひ読んでね!

まだ参加者募集中だから
良かったらツクールフォーラムから参加してね!
(枠が埋まり次第終了だよ!)

今日のテーマはこれ!
滑る床

勝手に滑って行っちゃう困った奴。
もう! どっちへ行けばゴールできるの!?
そんな夢多きミニゲームを作れます。

イベントコマンドだけで作るよ。
コモンイベントやリージョンを使うよ!
リージョンを指定して、イベントを一つコピペするだけで
別のマップに複製できたり、同じマップの複数個所に
点在させられる作り方だよ。

「滑る床」とは、足を踏み入れるとつるつるっと滑って
壁や障害物にぶつかるまで強制的に移動しちゃう氷の床みたいなやつです。
いわゆる矢印の方向に強制的に移動する「移動床」とは違うものです。

実際にどういうものか、サンプルを用意したので遊んでみてね。
※プラウザ上で起動します。

ステップ1 マップを描く
 まず、どういうルートを通ってゴールに辿り着きたいかを考え
 壁や障害物を配置します。
 その後、余分な障害物などを配置します。
 適当に配置してから、ルートを考えるのでもいいですけど。
 増やしたデコイのせいでクリア不能になったり
 逆にやたら簡単にクリアできたり
 ということがあるのでご注意ください。

ステップ2 リージョンを指定する
 作成例では、2つのリージョンを使ってそれぞれ
 滑る床の部分をリージョンID8で塗り
 壁や障害物をリージョンID16で塗っています。



ステップ3 最初の一歩のイベントを組む
 リージョンID8の床を踏んで、滑る床のエリアに入った時
 実行されるイベントを作ります。
 このイベントのトリガーは、並列処理に指定します。
 プレイヤーの足元のリージョンIDを常に監視し
 任意の値になったら、プレイヤーの移動を自動実行します。
 滑っている間、歩行アニメを止めたり
 移動速度を速めたりもここで行います。
 プレイヤーの移動の内容は、2ページ目でも活用するので
 コモンイベントに記述し、呼び出すようにします。
 最後に、すでに滑る床の上にいますよ、というスイッチをONにします。

◆指定位置の情報取得:リージョンID, リージョンID, プレイヤー
◆条件分岐:リージョンID = 8
  ◆移動ルートの設定:プレイヤー (ウェイト)
  :        :◇歩行アニメOFF
  :        :◇移動速度:6
  ◆コモンイベント:滑る移動のループ
  ◆スイッチの操作:#0001 滑る床に入った = ON
  ◆
:分岐終了

ステップ4 コモンイベントにプレイヤーの移動内容を記述する
 プレイヤーの移動自体は、「1歩前進する」を使います。
 イベントのループ機能を使い
 壁や障害物のあるリージョンID16の床が
 プレイヤーの一歩先にある場合は、ループを脱し移動を停止。
 それ以外の場合は、一歩進むようにします。
 一歩進むごとに条件が更新されていないかをチェックします。
 そのために、プレイヤーの現在の座標を取得し
 プレイヤーの向きに合わせて、一歩先の座標の位置を計算します。
 ループを脱したら、現在の歩数を取得しておきます。
 これは次のステップで使用します。

◆ループ
  ◆変数の操作:#0003 プレイヤーx = プレイヤーのマップX
  ◆変数の操作:#0004 プレイヤーy = プレイヤーのマップY
  ◆条件分岐:プレイヤーが右を向いている
    ◆変数の操作:#0003 プレイヤーx += 1
    ◆
  :それ以外のとき
    ◆条件分岐:プレイヤーが下を向いている
      ◆変数の操作:#0004 プレイヤーy += 1
      ◆
    :それ以外のとき
      ◆条件分岐:プレイヤーが上を向いている
        ◆変数の操作:#0004 プレイヤーy -= 1
        ◆
      :それ以外のとき
        ◆変数の操作:#0003 プレイヤーx -= 1
        ◆
      :分岐終了
      ◆
    :分岐終了
    ◆
  :分岐終了
  ◆指定位置の情報取得:リージョンID, リージョンID, ({プレイヤーx},{プレイヤーy})
  ◆条件分岐:リージョンID = 16
    ◆ループの中断
    ◆
  :分岐終了
  ◆移動ルートの設定:プレイヤー (飛ばす, ウェイト)
  :        :◇一歩前進
  ◆
:以上繰り返し
◆変数の操作:#0006 前の歩数 = 歩数

ステップ5 スイッチがONの時のイベントを作る
 ステップ3でONにした「今滑る床の上にいますよ」スイッチ。
 同じイベントの2ページ目の条件に指定して
 トリガーは同じく並列処理にします。
 先ほどは、足元のIDが条件でしたが今回は
 別の方向に移動したかどうかを監視します。
 ステップ4で、取得した「歩数」と、今現在の歩数を比べて
 数が違っていれば移動したということなので
 移動用のコモンイベントを呼び出します。
 さて、移動した先が壁ではなく、出口や入口だった場合
 スイッチをOFFにしなくてはいけません。
 なので、足元のリージョンIDが16だったら
 スイッチをOFFにして、歩行速度やアニメの設定を戻します。

◆変数の操作:#0007 今の歩数 = 歩数
◆条件分岐:前の歩数 ≠ 今の歩数
  ◆指定位置の情報取得:リージョンID, リージョンID, プレイヤー
  ◆条件分岐:リージョンID = 16
    ◆移動ルートの設定:プレイヤー (ウェイト)
    :        :◇歩行アニメON
    :        :◇移動速度:4
    ◆スイッチの操作:#0001 滑る床に入った = OFF
    ◆イベント処理の中断
    ◆
  :分岐終了
  ◆コモンイベント:滑る移動のループ
  ◆
:分岐終了

完成です!
サンプルを用意したので遊んでみてね。
※プラウザ上で起動します。

参考になったらうれしいな。
他にもいろいろな方法があるので考えてみてね!
リージョンが使えるツクールなら、どれでも使える組み方です。
MVでもVXAceでも同じことができると思うよ!

この講座では、説明用として処理を短くするためにカットしたけど
出入口も別のリージョンを割り当てると、もっといい感じになるよ。

ちょっとややこしいとこもあるけど、頑張ってね!

steam版をお持ちの方は、ワークショップにサンプルプロジェクトがあるので
よかったらどうぞ。



★オマケ★
さて、オマケということで
並列処理は重いから使いたくない! リージョンなんて俺のツクールにはない!
とにかくリージョンがわからないからイベントで作りたい!
という方の為に、イベントのみで作る方法を記述しておきます。
歩ける部分とほぼ同じだけのイベントの数(要するに大量)が必要なので
並列処理とどっちが重いのかは定かではありませんが。

エディタ画面はこんな感じになりますね。


滑る床上のイベントはすべて同じ内容です。
コモンイベントに入れて呼び出す方が修正したい時便利です。

プライオリティは、「通常キャラの下」
トリガーは、「プレイヤーから接触」にしてね。

◆スイッチの操作:#0001 滑る床に入った = ON
◆SEの演奏:Recovery (90, 100, 0)
◆移動ルートの設定:プレイヤー (飛ばす, ウェイト)
:        :◇歩行アニメOFF
:        :◇移動速度:6
:        :◇一歩前進
  ~滑る床の最大幅(歩数)分、一歩前進を入れる。
   移動ルートのオプションで「移動できない場合は飛ばす」に
   必ずチェックを入れてください、フリーズします。~
:        :◇一歩前進
:        :◇歩行アニメON
:        :◇移動速度:4
◆SEの演奏:Equip1 (90, 100, 0)
◆スイッチの操作:#0001 滑る床に入った = OFF

出入口のイベントは、スイッチがONの時にだけ
プライオリティ「通常キャラと同じ」で出現させる透明でからっぽの障害物です。
これを置いておかないと、滑る床を脱したのに進めるだけ進んでしまいます。

なぜ効果音を鳴らしているかというと、滑る歩数が短い時に
表面的には歩行が止まったなと思って方向キーを入れても
内部でまだ一歩前進の処理を順番に飛ばしているので
すぐには入力を受け付けてくれず、動かないためプレイヤーが困惑してしまうから
音で「まーだだよ、もーいいよ」とプレイヤーに教えてあげると良いと思いましたです。

ところで、「プレイヤーから接触」してるのになんで上に止まることができるのか
不思議に思った人もいるんじゃないかな?
ここでツクールこそこそ話。
実は、移動ルートのオプションで「完了までウェイト」にチェックを入れてるからなんだよ。
だから、滑る床じゃなくて矢印に沿って自動で動く床を作りたい時は、チェックを外すとよいのさ。
まあ、チェックを入れていても、条件を満たしている間ずっと繰り返すわけではなく
1回実行されれば、移動したりしない限り大丈夫なので
そこが、トリガーと条件の違いっていうわけなんですよね。
例えば、銃の引き金を引いたら弾が発射されるけど、2回目に発射するためには
一回引き金から手を放して引きなおさないといけないでしょ。
(連射できる銃もあるとか突っ込もうとした人、ちょっとここに座りなさい、笑)

ので、滑る効果音いらぬとか、効果音めっちゃ短くて連続再生されても変じゃない
という場合は、床すべてにイベントを敷き詰めて
イベント内容は、以下のように一歩前進を1個入れるだけにすれば
いつでもすぐに入力できるし
出口にイベント置かなくてもいいからスイッチもいらない。
まあ、好きな方でどうぞ。

◆移動ルートの設定:プレイヤー (飛ばす)
:        :◇歩行アニメOFF
:        :◇移動速度:6
:        :◇一歩前進
:        :◇歩行アニメON
:        :◇移動速度:4

俺のツクールには、一歩前進も、移動できない時は飛ばすもないんや!
という場合は、頑張ってスイッチや条件分岐を駆使してください。
相談には乗るよー。


おしまい!

拍手[6回]

PR
RPGツクールMZMVでも流用可能な場合アリ)でゲームを作る時
参考になるちょい技を教えてくれる講座サイトさんの備忘録です。

RPGツクールMZMVは高い互換性を有しています。
素材も大体そのまま使えるので、MZをお買い求めの際は
MVも同時にご購入されることをお勧めします。
(※プラグインは互換性がないものもあります、ご注意ください)
なお、定期的にセールも開催されているようなので
セール中に購入されるとお得です。
購入前に体験版などで動作確認するのをお忘れなく!!

プラグインまとめ、製作依頼・相談サイトさん
公式フォーラム
ツクプラMZ(またはMV
ツクマテ
ツクラーズギルド
トリアコンタンさんのプラグインリスト
海外のプラグイン検索サイト

これだけは持っておきたいおすすめプラグイン
MV製プラグインのプラグインコマンドをスクリプト欄に記述して実行(シロップ様)
ツクールMZでMVのプラグインをそのまま動かす(しぐれん様)

公式
・チュートリアル(エディタのヘルプメニューにある)
ツクール開発部Twitter
RPGツクールMZ初心者講座
RPGツクールMZ新機能活用講座
RPGツクールMZプラグイン講座
よくある質問
お役立ち情報・エディタ編
お役立ち情報・アニメ―ション-effekseer編
MVのプラグインをMZで動かす方法

参考になる旧ツクールの講座
ツクールMV初心者講座
ツクールVXAce初心者向け講座
今日からはじめるツクールVX講座(おすすめ)
よいこのためのクリエータ講座(心構え編)

講座の宝庫アドベントカレンダー
RPGツクールMV Advent Calendar 2015
RPGツクールMV(なんでもあり) Advent Calendar 2015
RPGツクールMV Advent Calendar 2016
RPGツクールMV Advent Calendar 2017
ツクール Advent Calendar 2017
ツクールフォーラムアドベントカレンダー 2018
ゲームキャンプ2ndアドベントカレンダー(2019)
ツクールフォーラムアドベントカレンダー Advent Calendar 2020
ツクールフォーラムアドベントカレンダー Advent Calendar 2021
ツクールアドベントカレンダーAdvent Calendar 2022
ツクールアドベントカレンダーAdvent Calendar 2023
ツクールアドベントカレンダーAdvent Calendar 2024


情報お役立ちサイトさん
RPGツクールMZスクリプトリファレンストリアコンタン様)
RPGツクールMZ・MV初心者的備忘録(ムノクラ様)
 ∟プラグイン初級応用作り方
ツクールテクニック講座白黒洋菓子店様)
ツクールMV講座・ちょい技・情報サイトまとめ
RPGツクールMZ 非公式JavaScriptリファレンスとんび様)

ちょい技&すご技
ランダムダンジョン作成(ムノクラ様)
戦闘中カットインの作り方(ムノクラ様)
オートセーブの制御法熱帯魚(/RYBA)様)
ダメージ計算式の情報まとめ(ムノクラ様)
イベントコマンド「スクリプト」からプラグインコマンドを呼び出す(げれげれ様)

情報ピックアップ
RPGツクールMZのサンプルゲームをWindows10でスペック別動作確認(ムノクラ様)

素材配布サイトさん
公式フォーラム
ツクマテ
ツクラーズギルド
ツクグラ
ツクールストア(有料)
MVの遺産(公式サイトダウンロードページ)
RPGツクールMV・MZの無料追加素材(ムノクラ様)
ツクール2000の素材を使う(砂川赳様)

ゲーム投稿サイトさん
RPGアツマール(ブラウザプレイのみ)
プリシー(ブラウザプレイのみ)
ふりーむ(DL、ブラウザプレイも可)
フリーゲーム夢現
ベクター

イベント・コンテスト
えんため大賞
ニコニコ自作ゲームフェス2021
PLiCyゲームコンテスト 2020
公式フォーラムで時々イベントやってる
ふりーむでも時々なんかやってる
・Twitterとかで検索するといろいろ見つかる
ゲームクリエイター甲子園とか、講談社ゲームクリエイターズラボとか
 明るいゲーム選手権とか新人フリーゲームとか3分ゲーとか
 世界ファンタジーとかバカゲーとか色々)

ゲーム制作全般のお役立ち情報
講談社ゲームクリエイターズラボ 一次選考通過した企画書の制作過程(そらまめゲームス様)
プレスリリースを送ってみた(だらねこ様)
情報を発信する難しさ
入れたいセリフからシナリオを考える(アレン様)
TRPGから学ぶシナリオの作り方(小太刀右京様)
実際にゲーム化された企画書(サクセス様)
えんため大賞勉強会キャンプ指定企画書フォーマット


動画で講座

・公式さん
 ・ピクチャーのイージング機能の利用例
みなみよつば様(チャンネルはこちら
 ・プラグイン導入方法
 ・データベース職業欄の「能力値曲線」設定方法
 ・イベント入門「村人を作る」
 ・フォントを変える方法と注意点
 ・レイヤー機能の使い方
 ・実際に短編を作ってみる動画(前編)
 ・実際に短編を作ってみる動画(後編)
 ・正しい数値を入力すると通れるギミック
 ・マップ全体をずらしたいしたい! シフト機能の使い方
 ・RPGツクールMZをアップデートする手順まとめ
 ・タイトル画面のカスタマイズ
 ・地形タグ入門(ランダムに出現する階段など)
 ・オートタイルを無効にするタイルの配置方
 ・初期設定やマップ制作で覚えておきたいこと
 ・スキルの作り方
 ・回復アイテムの作り方
 ・BGMのフェードアウトなどの使い方
 ・ツクールで収益化8選
湿度ケイ
 ・普通気づかないRPGツクールMZテクニック

クリエータ登録サイト
集英社ゲームクリエイターズCAMP
講談社ゲームクリエイターズラボ

最後に一言
サンプルゲームも遊んでね!」
MZを購入するとプロジェクトデータももらえるよ!
どんな風に作っているか研究していいのよ!

拍手[6回]

RPGツクールMV プラグイン備忘録・フォーラム編

目次123ツクマテ1ツクマテ2フォーラムチョイ技/講座

NEW!
けけーラボケケー)様
・基盤プラグイン(必須)
・遠隔トリガー
・自動でデベロッパー
・影マスター
・パッとミュート

STUDIO TOKIWA
ショップ画面

 AoNBTI様(Twitter
・吹き出し風メッセージウインドウ
・敵グループを整列
・ライティング
・マウスでクリックした座標を表示
・外部テキストファイル読込
・天候画面エフェクト


ツクールフォーラム(公式フォーラムの投稿より)
 ---投稿プラグインまとめ【2017年6月版】(みなみよつばさま)
 ---投稿プラグインまとめ【2017年9月版】(みなみよつばさま)

戦闘/スキル/ステート/アイテム
スリップダメージやHP自動回復の量をターン毎に増減させる
能力値弱体/強化を3段階以上可能に
カウンター行動(反撃時にスキルを使用)
簡易設定(最低ダメージ等、いつくかの項目を設定)
攻撃対象選択時に弱点や耐性を表示
戦闘終了時に戦闘結果を表示
HP再生率による結果をバトルログに表示
バトルイベントを拡張/戦闘終了時にコモンイベント
サイドビュー時のアクターを一直線に並べる
スキルに反応して反撃/連鎖で更にスキルを発動
「戦闘行動の強制」の際、残りの行動をリセットしない
消費MPを現在の最大MPの比率で変動させる
いわゆるメガ○テとマダ○テ
YEPActionPack拡張・矢弾飛ばし
戦闘中、アイテムを所持数以上使えなくする
戦闘開始時の出現メッセージを複数形に対応させる
職業ごとに、武器タイプごとに、威力を増減させる
戦闘時に行動回数表示
所持金消費スキル
怪しい影(正体不明の敵)
戦闘時におけるウィンドウの行数を変更
味方の一番高い能力を吸収する
状態異常のとき戦闘キャラをフラッシュさせ続ける
装備やアイテムなどのパラメータを分離する
レベル差がある敵グループに強制勝利
敵、味方のダメージ倍率を変数制御する
戦闘行動の強制による、直前の中断された行動を再開する
ステートを重複可能に
弱点・耐性に応じてメッセージを追加表示
オートバトル
バトル中に立ち絵を表示(残HPで変更可)
スキル成功率変更
ダメージ分散を無効化
自動戦闘時に「作戦」を導入
耐性によってダメージが軽減されないスキル
ターン終了時に敵が復活
パーティコマンドに「とんずら」を追加
上位のステート作成(毒→猛毒など)
敵の攻撃を確率で軽減(パリィ)
戦闘不能時のメッセージをバトラーごとに変更
フロントビューバトルスタイル
スキル全体化
対象となる武器・防具を装備している間のみTPゲージを表示 
一度しかランダムエンカウント出来ないレア敵キャラの設定 
エンカウント前に画面中央に1行メッセージを表示 
戦闘スタイル変更 
スキルにカテゴリーを設定し、それに基づいてスキルを封印
自動戦闘切り替え 
戦闘後、レベルアップした際にseとステータス表示 
HP/MP/TPの末尾に単位 
パーティコマンドの表示行数自動調整 
アクター毎にパラメータの最大値設定 

システム
足音をかなり詳細に設定可
イベントの上下反転やクロスフェードなどを実現
美容院システム(アクターの画像を一括して変更)
勝利アクション禁止
移動ルートの設定などの対象者を変更
立ち絵マネージャー(複数の画像を統合して一枚に合成して表示)
時間制限付選択肢
心の声ウインドウ(既存プラグインの組合わせて使うシステムグラフィックと小技)
戦闘不能のアクターを隊列の最後尾に回し、棺桶などの形で表示
オリジナルシーンやウィンドウを表示
同行者を隊列歩行にも表示
アクターのステータス欄の表示を変更
メッセージウィンドウを複数表示
イベント起動中は自律移動をストップ
ショップの装備画面で、全パラメータの変化を表示
起動中のイベントを強制中断、接触してきたイベントが強引に割り込む
アイテムボックスのカテゴリー選択を無くす
移動ルートのコモンイベント化
ゲームオーバー画面を表示してからリスポーン
アイテム等を入手したときに吹き出しを表示させる
カードゲーム(ババ抜き)
エンカウント歩数の計算式を変更する
MPが一定値以下の場合に顔グラフィックをマップ上へ表示
移動ルートの設定で『右に5歩』や『9時方向に蟹歩き』が可能に
アクターごとにアイテムを個別で所持する
歩くたびに経験値が増える装備
タイトル画面の背景をスクロール
セーブの最大数を変更
タイトル画面を拡張
あらすじ機能を追加
フォロワーを操作
イベントの位置情報を復元
1ボタンでコモンイベントを呼び出す
イベントの中断と再開をサポート
所持アイテムの合計数を取得
宝箱の残り個数を表示
スイッチで戦闘終了時のフェードインを制御
メニュー画面改造
見た目変更装備
残像表示
「移動ルートの設定」で任意のイベントコマンドを実行可能
「場所移動」時のフェードインを制御
パラムフッリワーケシステム(能力値振り分け
シンプルなセーブ画面
シンプルなメニュー画面
アクターを選ぶための選択肢
スプラッシュスクリーンとしてメッセージを表示
カレンダー機能
セーブ内容を反映させてから閉じる
遊泳・ダイビングシステム (人魚等)
簡易長文表示
ピクチャーやイベントに残像
イベントに立体的な影
文章のスクロール表示をマスク
自動斜め移動(坂、横向き階段上の移動など)
タッチ後の目的地を表す軌跡を非表示
ピクチャのドラッグ移動
BGM逆再生
メッセージウインドウの行数を変更
任意のメッセージを画面上にポップアップ
一人称等をスイッチと制御文字で変更
ショップで右に表示される装備した時の数値が一番効果のあるステータスで表示
豪華画面エフェクトの詰め合わせ
メッセージウィンドウ拡張
特殊なアクションを実装
多機能フックロープ
マップ上に簡単な情報ウィンドウを出す
画面上に文字列をポップアップ表示
ツキミ式選択肢ウィンドウ
ピクチャーやエネミーをぶった斬る
重みつきランダム
戦闘やイベントスキップ等のゲームスピードを自由に調整
時間経過システム
移動ルートの設定のスクリプトを使ってIF文などの処理を追加
パーティクルアニメ
イベントの動作を拡張 
メッセージウィンドウ拡張 
スローモーション 
戦闘結果の表示を変える 
発射&当たり判定 
方向キーで向き変更(長押しで移動) 
アイテムの合計購入金額を求める式を変える 
ピクチャ粉々エフェクト
360°パノラマ遠景 
ゲームオーバー画像の表示位置を画面中央に 
坂・階段・段差を表現 
戦闘スキルをマップ上で使ったとき異なる効果 
メニュー画面改変 
マップの一部がブラックアウトする演出 
様々な画面効果 
一枚絵キャラチップ 
フキダシアイコン拡張 
パーティ編成シーン 
水中判定イベント 
アイテム/ステータスシーン改造 
登録した単語の中からランダムに選んで表示 NEW!

その他
プラグインまとめ読み込み
タッチ移動で『通常キャラの下』イベントを通り抜け可能に
セーブファイルの軽量化
よりばらけたランダムな変数を取得
メタ手抜き
半透明テキストの透明度を変える
セーブデータのインポートとエクスポート
プラグインの一覧を取得
片手操作向けキー設定
ver1-5-0以降のロード時の遠景のちらつき対策
ゲームパッドの切断を報告
デバッグ支援
プラグイン40枚入りデッキ~タケノコ王国の野望編~
クロスゲートで作ったプラグイン集1
クロスゲートで作ったプラグイン集2
アニメのフレームレート調整
xorshiftを使用した再現性のある乱数
古き良きトランジション-グラデーションワイプ
ピクチャのボタン化会話中使用化
偽装缶詰(ツキミ式暗号化)
メモリ改竄チートを予防
破損したセーブデータの復元を試みる
oggファイルだけで音声を再生
MIDI 再生(β版)
コアスクリプト1.3cで実装されたプログレスバーの色、座標位置変更 
セーブデータに画像データを保存し、セーブ/ロード画面で表示する 
biimシステム 
メッセージ組み込み開発支援 
SEオートリミッター(SE多重再生による音割れ防止) 
ウィンドウのみ/スプライトのみを画像ファイルとして保存 
柵の前後を通れる 
壁の後ろを歩けるようにする 
グラデーションワイプ 
FPSが安定するまで待つ 
画面フェードのパラメータ調整 
サーバーの現在時刻を取得
【試作】ゲームパッドの使える種類を増やす 
bgmオートチューニング 
画面上に直線を引く 
修正パッチ適用 
会心回避率の不具合修正

拍手[0回]

RPGツクールMV用プラグインであるところの
神鏡学斗さんのSRPGコンバータMVの使い方覚書です。

<製作の流れ>
神鏡学斗さんのSRPGコンバータMVをゲット。
②サンプルゲームをプレイして、何が出来るのかをチェック。
③プロジェクトを開いてどのようなイベントが配置されているか
 プラグインの設定やヘルプを確認。
④サンプルマップ「森」をコピペして雛形を作る。
⑤思う様ゲームを作る。

<イベントで使えるスクリプトコマンドやプラグインコマンド>
SRPG戦闘開始
◆プラグインコマンド:SRPGBattle Start
SRPG戦闘終了
◆プラグインコマンド:SRPGBattle End

指定した座標にカーソル(プレイヤー)を移動
◆スクリプト:this.playerMoveTo(12,10);
指定したイベントをエネミーに変更
◆スクリプト:this.addEnemy(25, 2);//(イベントID, エネミーID)
指定したイベントをアクターに変更
 ※アクターの特徴に自動戦闘が入ってると、自動行動アクターになる
◆スクリプト:this.addActor(24, 5);//(イベントID, アクターID)
指定したイベントIDのユニットが戦闘不能かを
指定したスイッチIDに格納
 ※戦闘不能=on、戦闘不能でない=off
◆スクリプト:this.isUnitDead(15, 11);//(スイッチID, イベントID)
指定したイベントと全てのアクターの中で
最も近いアクターの距離を変数に格納
◆スクリプト:this.fromActorMinimumDistance(11, 52);//(変数ID, イベントID)

2つのイベント間の距離を指定した変数に格納
◆スクリプト:this.EventDistance(11, 11, 52);//(変数ID, イベント1ID, イベント2ID)

アクターとアクターの距離を変数に格納
◆スクリプト:this.ActorDistance(11, 1, 2);//(距離を代入する変数ID, アクター1のID, アクター2のID)
指定したイベントの戦闘モードを変更
 ※'normal'     「通常」に設定します(設定しない場合、自動で「通常」になります)。
  'stand'      「相手が近づくまで待機」に設定します。
  'regionUp'   「相手が近づくまでより大きなリージョンIDに向かう」に設定します。
  'regionDown' 「相手が近づくまでより小さなリージョンIDに向かう」に設定します。
◆スクリプト:this.setBattleMode(48, 'normal');//(イベントID, モード)

Ver.1.02 (2017/11/23)のプロジェクトから読み取れたコマンドは以上です。
他にも色々あると思いますので、情報お待ちしています。

<拡張・併用可能プラグイン>
SRPGコンバータMVのWebサイトでも
いつくつか紹介されていますが、私が作ったものは以下の通り。

移動後も装備変更可能
 (ただし、移動力を変更する装備があると若干問題があるので注意)
スイッチでキャンプメニューを変更
 (拠点と戦闘中でEscメニューを変更したい時に)

拍手[3回]

RPGツクールMVやMZのイベントコマンドで使える便利なスクリプトの備忘録です。

プラグインを使わずにちょこちょこっとイベントを拡張できるので
とっても便利です。

ここにないものは、以下のサイトで調べると見つかるかもしれません。
ツクールMZスクリプトリファレンスwiki
ツクールMVスクリプトリファレンスwiki
RPGツクールMZ スクリプトリファレンス
RPGツクールMV プラグインコマンド集 リファレンス

教えてくださった皆様、ありがとうございます。

※2025年5月より「ツクマテ」のアドレスが変更されています。
 修正箇所が多いため、修正に時間がかかりそうです。
 https://tm.lucky-duetをhttps://tm.yumineko.com/に変更して
 アクセスしてください。


各種メニュー画面の呼び出し(参考/ツクマテ投稿記事

 セーブ画面呼び出し SceneManager.push(Scene_Save);
 ロード画面呼び出し SceneManager.push(Scene_Load);
 ステータス画面呼び出し SceneManager.push(Scene_Status);
 スキル画面呼び出し SceneManager.push(Scene_Skill);
 アイテム画面呼び出し SceneManager.push(Scene_Item);
 装備画面呼び出し SceneManager.push(Scene_Equip);
 オプション画面呼び出し SceneManager.push(Scene_Options);

 アクターを指定してステータス画面呼び出し(参考/ツクマテ投稿記事
// アクターID2番のステータス画面を開く
var actor = $gameActors.actor(2);
$gameParty.setMenuActor(actor);
SceneManager.push(Scene_Status);
アイテムの大事なもののページを開く(参考/ツクマテ投稿記事
SceneManager.push(Scene_Item);
SceneManager.update();
SceneManager._scene._categoryWindow.select(3);
SceneManager._scene.onCategoryOk();
SceneManager._scene._categoryWindow.deactivate();

オートイベントでメッセージをスキップしても移動が終わるまで待つ(参考/シロップ様)

 this.setWaitMode('route')
 会話直後に記述。

イベントの位置をリセット(参考/ツクマテ投稿記事

 $gamePlayer.requestMapReload();

画面のフェードイン・アウトを黒以外で(参考/ツクマテ投稿記事

 SceneManager._scene._spriteset._fadeSprite.setColor(255, 255, 255);
 フェードイン・アウトの直前に記述。
 255, 255, 255はRGB値で、数字を変更することで色を変えることができ
 変更した色は、メニューを開いたり、マップ移動したり
 戦闘に入ったりするなど、シーンが変わるまで維持される。

乗り物の「向き」を変更(参考/ツクマテ投稿記事

 小型船 $gameMap.boat().setDirection(2);
 大型船 $gameMap.ship().setDirection(2);
 飛行船 $gameMap.airship().setDirection(2);
 下に向けるなら2、上なら8、左なら4、右なら6

・スクリプトでSEの音量を調節(参考/ツクマテ投稿記事
◆変数の操作:#0001 SE音量 = AudioManager.seVolume(変更前の音量を取得)
◆スクリプト:ConfigManager['seVolume'] = 100;//音量を変更
◆SEの演奏:Absorb2 (90, 100, 0)
◆スクリプト:ConfigManager['seVolume'] = $gameVariables.value(1);//音量を戻す

・プレイヤーが直接入力することなく決定、キャンセルキーを入力(参考/ツクマテ投稿記事
  ◆キャンセルキーを押して離した
  スクリプト「Input._currentState['escape'] = true;」
  イベントコマンド「ウェイト(1)」
  スクリプト「Input._currentState['escape'] = false;」

 イベント例
 プレイヤーの左にこの作成したイベントがいたとして、決定ボタンを押すと
 プレイヤーは下を向き正面にいるイベントに話しかける。
 ◆移動ルートの設定:プレイヤー (ウェイト)
 :        :◇下を向く
 ◆スクリプト:Input._currentState['ok'] = true;
 ◆ウェイト:1フレーム
 ◆スクリプト:Input._currentState['ok'] = false;

 使用できるキーは、rpg_core.jsにある
 2996行目キーボードと3030行目ゲームパッドの定義

指定したSEだけ停止する(参考/ツクマテ投稿記事

例「Applause1」のみ演奏停止したい場合
コード: 全て選択
var seName = 'Applause1';
AudioManager._seBuffers.forEach(function(buffer) {
    if(buffer._url.match('/' + seName + '.')) {
        buffer.stop();
    }
});
AudioManager._seBuffers = AudioManager._seBuffers.filter(function(audio) {
    return audio.isPlaying();
});
スマホを振動させる(参考/ツクマテ投稿記事

 navigator.vibrate(2000);
 ※単位はミリ秒

マップ名の変更(参考/ツクマテ投稿記事

 変更 $dataMap.displayName = 'マップ名'
 表示 SceneManager._scene._mapNameWindow.open();
 ※情報はセーブされない、マップを移動する度リセットされる。

ダッシュの許可と禁止(参考/ツクマテ投稿記事

 許可 $dataMap.disableDashing = true;
 禁止 $dataMap.disableDashing = false;
 ※情報はセーブされない、マップを移動する度リセットされる。

戦闘イベント中にステータスウインドウを更新(参考/ツクマテ投稿記事

 SceneManager._scene.refreshStatus

フォロワーにアニメ表示(参考/ツクマテ投稿記事

 $gamePlayer.followers().follower(index).requestAnimation(id);
 indexには「フォロワーのindex」を、idにはアニメーションIDを記入

フォロワーに噴出し表示(参考/ツクマテ投稿記事
 $gamePlayer.followers().follower(n).requestBalloon(m);
 n:フォロワー番号(パーティの2番目が0、3番目が1...)、m:バルーンID

連続する変数に連番をランダムに代入(参考/ツクマテ投稿記事

var i1 = 1;     // 変数番号の最初
var i2 = 10;    // 変数番号の最後
var v1 = 1;     // 連番の開始値
var v2 = 10;    // 連番の終了値
var value = Array.apply(null,Array(v2-v1+1)).map(function(v,i){return i+v1});
for(var i=i1;i<=i2;i++){
  var v = value.splice(Math.randomInt(value.length),1)[0];
  $gameVariables.setValue(i,v);
}

プラグインで作成されたウインドウも含め画面を真っ暗に(参考/ツクマテ投稿記事

SceneManager._scene.alpha = 0;

ステータス表示を更新する(参考/ツクマテ投稿記事
SceneManager._scene._statusWindow.refresh();

同じマップの別のイベントの内容を実行(参考/公式tweet
this.character(イベントID).start();

タイマーを進める(参考/roshさんのブログ

var time = $gameTimer.seconds()*60 - 数値 ;

$gameTimer.start(time);


ピクチャーを全消し(参考/こまさん
$gameScreen.clearPictures();


イベントコマンド「条件分岐」で使える条件スクリプト


 決定キーが押された瞬間 Input.isTriggered('ok')
 (okの部分をcancel,up, down, left, right, pageup, pagedownなどに置き換え可)
マウス入力の判定(参考/ツクマテ投稿記事

 左クリック TouchInput.isTriggered();
 右クリック TouchInput.isCancelled();

今戦闘中かどうか(尾島様)

 $gameParty.inBattle()

逃走/敗北可能か(参考/ツクマテ投稿記事

 BattleManager.canEscape()
 //逃走可能
 BattleManager.canLose()
 //敗北可能

スキルが使える状態にあるか(参考/ツクマテ投稿記事

 $gameParty.members()[X].canUse($dataSkills[index])
 //indexはスキルID

他のイベントが起動中か(参考/ツクマテ投稿記事

 $gameMap.isEventRunning()
 
プレイヤーとイベントの当たり判定(参考/ツクマテ投稿記事

 this.character(0).x == this.character(-1).x && this.character(0).y == this.character(-1).y

キャラクターが移動中かどうかを判定(参考/ツクマテ投稿記事

 this.character(id).isMoving()

 移動中ならtrue、停止中ならfalse。
 idに-1でプレイヤー、0でイベント自身、1以上で対応するイベントID。
 停止中かどうかを判定する場合は、以下。

 this.character(id).isStopping()

イベントのメモ欄の文章を判定(参考/ツクマテ投稿記事

 ■イベント3番のメモ欄に あいうえお と書かれてあるかどうかを判定
 $gameMap.event(3).event().note === 'あいうえお'

 ■イベント3番のメモ欄に書かれている文章の中に あいうえお が含まれているかどうかを判定
 $gameMap.event(3).event().note.match(/あいうえお/)

 ■イベント3番のメモ欄に <ABCD> と書かれているかどうかを判定
 $gameMap.event(3).event().meta['ABCD']

 ■イベント3番のメモ欄に <ABCD:1> と書かれているかどうかを判定
 $gameMap.event(3).event().meta['ABCD'] === '1'

複数の変数を比べる(参考/ツクマテ投稿記事

◆変数#0001~#0004のいずれかが0より大きかったらOK
[1,2,3,4].some(function(id){return $gameVariables.value(id) > 0});

◆変数#0001~#0004のすべてが0より大きかったらOK
[1,2,3,4].every(function(id){return $gameVariables.value(id) > 0});

◆スイッチ#0001~#0004の全てがONならOK
[1,2,3,4].every(function(id){return $gameSwitches.value(id) > 0});

変数1が3から44の間の値のとき(参考/ツクマテ投稿記事

 3 <=$game_variables[1] &&  $game_variables[1] <=44

メッセージが表示中か(参考/ツクマテ投稿記事

$gameMessage.isBusy()

セーブデータがあるか(参考/ツクマテ投稿記事

 DataManager.isAnySavefileExists();

セーブデータ1があるか(参考/ツクマテ投稿記事

 DataManager.isThisGameFile(1);

今いるマップのメモ欄に○○という言葉が含まれているならば(参考/ツクマテ投稿記事
 !!$dataMap.note.match('○○')

今話しかけている(起動中の)イベントのメモ欄に○○という言葉が含まれているならば(参考/ツクマテ投稿記事
 !!this.character(0).event().note.match('○○')


変数1の中に特定のワードAAAが入っているか(参考/ツクマテ投稿記事

$gameVariables.value(1).indexOf('AAA') >= 0

指定番号のピクチャの存在判定(参考/トリアコンタン様)

$gameScreen.picture(1)




イベントコマンド「変数の操作」で使える情報取得スクリプト

日時の取得(尾島様)

 年   new Date().getFullYear()
 月  new Date().getMonth() + 1
 日   new Date().getDate()
 曜日   new Date().getDay()
 時   new Date().getHours()
 分   new Date().getMinutes()
 秒   new Date().getSeconds()

 曜日も数値で取得されるので、数字から文字列に変更して下さい。
 0なら日、1なら月、3なら火・・・

マウスの位置を取得(ニナと鍵守の勇者ミニゲームより)

 画面X座標 TouchInput.x
 画面Y座標 TouchInput.y
 指定位置の情報を取得するために
 マス目を割り出すには、取得した数値を48で除算。

パーティのアクターIDの取得(参考/ツクマテ投稿記事

 $gameParty.members()[i].actorId();

 「i」並び順(0~)
 エネミーのIDを取得する場合は、以下。

 $gameTroop.members()[i]._enemyId

敵グループに勝利した時の合計金額(参考/ツクマテ投稿記事

 $gameTroop.goldTotal();
 敵グループに勝利した後イベントで代入

パーティ先頭キャラの武器タイプ1にセットされている装備名を取得(参考/ツクマテ投稿記事

 $gameParty.members()[0].equips()[0].name

パーティ先頭キャラの1番目のステート名を取得(参考/ツクマテ投稿記事

 $gameParty.members()[0].states()[0].name

パーティ先頭キャラの職業を取得(参考/フォーラム投稿記事

 $gameParty.members()[0].currentClass().name

BGMを取得(参考/ツクマテ投稿記事

 AudioManager.saveBgm();

 保存したBGMを再生(コマンド「スクリプト」)
 AudioManager.replayBgm($gameVariables.value(n));
 n:保存した変数番号

装備品のIDを取得(参考/ツクマテ投稿記事

 $gameActors.actor(n)._equips[n2-1]._itemId
 nをアクターのID、n2を装備スロットの上から数えた順番

パーティ内戦闘不能人数取得(参考/ツクマテ投稿記事

 $gameParty.deadMembers().length

アクター名の文字数取得(参考/ツクマテ投稿記事

 $gameActors.actor(1) ? $gameActors.actor(1).name().length : 0

移動速度を取得(参考/ツクマテ投稿記事

 $gameVariables.setValue(1,$gamePlayer.realMoveSpeed());

<stone>とメモ欄に書いてあるアイテムの合計所持数を取得(参考/ツクマテ投稿記事

 $gameParty.items().reduce(function(a,c){return a+(c&&c.meta['stone']&&$gameParty.numItems(c)||0)},0)





ダメージ計算式基礎知識

最低でも1のダメージを与える(参考/初心者講座

 Math.max(m,1)

 mにダメージ計算式を入れる

1から a.atk * 4 までの間でランダムにダメージを与える(参考/初心者講座
 (a.atk * 4) * Math.random() + 1

動ける仲間の数を基本ダメージに(参考/初心者講座

 100 * $gameParty.movableMembers().length

残りHPが20%以下になると、威力が2倍になる(参考/ツクマテ投稿記事

 a.atk * 4 *(a.hp <= a.mhp / 5 ? 2 : 1) - b.def * 2

防御している敵には通常の2倍のダメージを与え、それ以外は通常のダメージを与える
 (参考/ツクマテ投稿記事

 a.atk * (b.isGuard() ? 4 * b.grd : 1)

敵が12番(眠り)ステートの場合ダメージが100、それ以外は1(参考/ツクマテ投稿記事

 b.isStateAffected(12) ? 100 : 1

敵が3番目のステートにかかってたら威力が2倍に、それ以外は通常の威力(参考/ツクマテ投稿記事

 a.mat * (b.isStateAffected(3) ? 2 : 1)

毒、暗闇、沈黙の場合ダメージが10000加算(参考/ツクマテ投稿記事

 a.atk * 4 - b.def * 2 + (b.isStateAffected(4) || b.isStateAffected(5) || b.isStateAffected(6) ? 10000 : 0)

毒、暗闇、沈黙の場合ダメージが2倍(参考/ツクマテ投稿記事

 (a.atk * 4 - b.def * 2) * (b.isStateAffected(4) || b.isStateAffected(5) || b.isStateAffected(6) ? 2 : 1)

敵が4番(毒)のステートでなければ毒を付加、それ以外は14番(猛毒)のステートに変更(参考/ツクマテ投稿記事

 b.isStateAffected(4) ? b.removeState(4)||b.addState(14)||0 : b.addState(4)||0

敵を決して倒すことが出来ない「みねうち」(参考/ツクマテ投稿記事

 Math.min(元々の計算式 , b.hp - 1)

相手のHPを1にする(参考/ツクマテ投稿記事

 b.hp - 1

攻撃系スキル使用時、使用者にステートを付与(参考/RPGツクールMVwiki

 a.addState(ステート番号);攻撃系スキルの計算式

 例)防御しながら通常攻撃 a.addState(2);a.atk * 4 - b.def * 2

指定IDのアクターがいれば対象に40ダメージ(参考/ツクマテ投稿記事

 $gameParty.members().contains($gameActors.actor(id)) ? 40 : 10

敵HPの下一桁が0か偶数か奇数かによってダメージをそれぞれ、0、100、5000に(参考/ツクマテ投稿記事

 if(a.hp % 10 == 0){0} else if(a.hp % 2 == 0){100} else {5000}

indexの大きいバトラーほどダメージが大きい(参考/ツクマテ投稿記事

 10 * (b.index() + 1)

クリティカル時のダメージを変更する(参考/ツクマテ投稿記事

 b.result().critical ? クリティカル時の計算式 : 通常の計算式

 ※クリティカル時の3倍ダメージ効果は適用されてしまうので、それを考えた上で式を作る

素手のダメージ(参考/ツクマテ投稿記事

 a.paramBase(2)*a.paramRate(2) * a.paramBuffRate(2)

スキルの使用者が敵か味方かで効果を分ける(参考/ツクマテ投稿記事

 BattleManager._action._subjectActorId != 0 ? (味方の場合の計算式) :(敵の場合の計算式)

攻撃と同時にmpを回復する(参考/ツクマテ投稿記事

 a.gainMp(回復値); a.atk * 4 - b.def * 2

敵からの攻撃がまずMPにダメージがいき、それが0になったら、HPの方へダメージがいく
 (参考/ツクマテ投稿記事

 if (300 > b.mp){ b.gainHp(b.mp - 300); 300;} else{300};

弱化ステート(例えば毒や麻痺など)の数に応じて威力が上昇するスキル
 (参考/ツクマテ投稿記事

 1. スキル専用の属性を一つ作成する
 2. スキルの計算式を a.atk * ((b.elementRate(x)) と設定
  →xは設定した属性IDを入れる(a.atkは例えなので、100のような固定値でもOK)。
 3. 弱化ステートの特徴に「属性x有効度〇%」を持たせる

・「このイベント」に当たるイベントを途中で別イベントに差し替え(参考/卑弥呼テクニック

 this._eventId = 別イベントのID

移動ルートに使えるスクリプト

アニメーション再生(参考/卑弥呼テクニック
 this.requestAnimation(アニメーションID);

指定したIDのイベントに近づく(参考:くらむぼん様)

 1番のイベントに一歩近づく this.moveTowardCharacter($gameMap.event(1))
 1番のイベントから一歩遠ざかる this.moveAwayFromCharacter($gameMap.event(1))
 1番のイベントの方を向く this.turnTowardCharacter($gameMap.event(1))
 1番のイベントの逆を向く this.turnAwayFromCharacter($gameMap.event(1))
 座標(変数1番,変数2番)に向かって歩く
  this.moveTowardCharacter({x: $gameVariables.value(1), y: $gameVariables.value(2)})

最短ルートで指定の場所へ移動する
 this.moveStraight(this.findDirectionTo(x,y))(参考/ツクマテ投稿記事

 this.moveTowardCharacter({x: x座標, y: y座標})(参考/ツクール公式

プレイヤーを追いかけてくる(参考/ムノクラさん)

 this.moveStraight(this.findDirectionTo($gamePlayer.x,$gamePlayer.y));

指定した座標にジャンプ(参考/ツクマテ投稿記事

 this.jump(10 - this.x, 20 - this.y)

歩行グラのアニメパターンを指定(参考/公式フォーラム
  (this._direction の値は 2の時は↓、4の時は←、6の時は→、8の時は↑)

 this._direction = 6; this._pattern = 1;

画像インデックスのみの指定(参考/ツクマテ投稿記事

 this._characterIndex = 1;

「このイベント」のセルフスイッチを操作(参考/kurauさん)

 $gameSelfSwitches.setValue([this._mapId, this._eventId , "A or B or C or D"], true or false);

「このイベント」の方向をむく(参考/砂川赳さん)

 this.turnTowardCharacter($gameMap.event($gameMap._interpreter._eventId))

表示位置をずらす(参考/あんばたー17号さん)

 this._x += 0.1

イベントが自分のIDより1つ若いイベントを追いかける(参考/ツクマテ投稿記事

const e = $gameMap.event(this._eventId - 1); if (!e.isMoving()) this.moveTowardCharacter(e)

※追尾させるイベントはすり抜けにチェックを入れる

小技
プレイヤーとイベントの距離判定(参考/ツクマテ投稿記事

var interpreter = this;
isInRange = function( chara1Id, chara2Id, range ) {
    var chara1X = interpreter.character( chara1Id ).x;
    var chara1Y = interpreter.character( chara1Id ).y;
    var chara2X = interpreter.character( chara2Id ).x;
    var chara2Y = interpreter.character( chara2Id ).y;
    return ( chara2X - range <= chara1X ) 
        && ( chara2X + range >= chara1X ) 
        && ( chara2Y - range <= chara1Y ) 
        && ( chara2Y + range >= chara1Y );
};
条件分岐にてisInRangeに下記引数を指定して実行します。
引数1:チェック対象1のイベントID
引数2:チェック対象2のイベントID
引数3:チェック範囲距離(3×3の場合は3、5×5の場合は5を指定する。)
※チェック対象にプレイヤーを指定する場合は、チェック対象1のイベントIDに-1を指定してください。

戦闘中イベントで与えたダメージをポップアップ表示(参考/ツクマテ投稿記事

//味方にポップアップ表示

this.iterateActorIndex(-1, function(Actor) {

Actor.startDamagePopup();

}.bind(this));

//敵にポップアップ表示

this.iterateEnemyIndex(-1, function(enemy) {

enemy.startDamagePopup();

}.bind(this));

拍手[19回]

広告枠
アクセス解析

ATOM  
ATOM 
RSS  
RSS 


ソフトウェア制作講座





Copyright ©   YUWAKA'S SOFT   All Rights Reserved
Design by MMIT / TemplateB3  Powered by NINJA TOOLS
忍者ブログ [PR]