忍者ブログ
windowsやブラウザ のゲーム作ったりとか。
RPGツクールMVのお話です。
準公式プラグインは、サンプルゲームに梱包されているので是非活用してね!
(プロジェクトファイルはGamesフォルダ内のexeファイルを解凍してね。)

今回は、プチ改造講座っていうことで
準公式プラグイン「EventSelector.js」のウインドウを
デフォルトのこういうのから

 ↓ こういうのへ変更しようと思います。 ↓
 

後、データベースのシステム設定からは消せない
メインメニューの「オプション」と「ゲーム終了」コマンドを
消したりもしちゃうよー。

勢いで講座と銘打ってるけど
どっちかというと「やってみた」に近いものです。

当方、JavaScriptのJaの字も理解していないのでご注意下さい。
この通りやって何か問題がおきても責任はもちません。
よーと、一応免責しておきます。

後、前回までのブログで説明した部分は割愛します。

 
今回改造するプラグインは
サンプルゲーム「ニナと鍵守の勇者」に同梱されている
EventSelector.js」です。(nina →js →pluginsフォルダ)
 
  どういうプラグインかというと、簡潔に言うと「アイテム選択」の亜種です。
アイテムではなくコモンイベントを使いますよーというだけです。
ただ、「アイテム選択」とちがってメッセージと同時に表示する事はできません。
詳しくは、プラグインのヘルプを見てね。

テレポートを作るとかだと、ひょっとしたら「アイテム選択」を使うより
やりやすいかもしれません。

いやいや、オレは「アイテム選択」のウインドウを変更してぇんだぜ
という方は、サンプルゲーム「エミールの小さな冒険」に入ってる
ChangeSelectItemWindow.js」をどうぞ。

今回は、面倒臭いのでパラメータは使いません。
直接ガシガシ変更しちゃいます。
パラメータを使って変更したいんだぜという方も
ChangeSelectItemWindow.js」を参考にするといいと思います。

とりあえず、「EventSelector.js」を開きウインドウの設定をしている部分を探します。
幅「Width」とか、高さ「Height」という単語を探すといいです。

どうやら137行目あたりの
        var width = Graphics.boxWidth;
        var height = this.fittingHeight(4);
という部分がソレのようです。
これを直接改変するのですが、元の命令文がわからなくなると困るので
次の行へコピペして挿入した後、元の命令文は「//」でコメントアウトして残しておきます。

とりあえず、高さ(var height)を画面と同じ大きさにあわせてみます。
Graphics.boxWidth; が画面の幅を取得しているようなので
Graphics.boxHeight; に変更すれば高さを取得するはず。

結果、なんとウインドウが全画面表示になりました(当たり前)

じゃあ、幅(var width)を縮めるには
this.fittingHeight(4); を this.fittingWidth(4); に変更すればいいのかにゃ?

結果、エラーが出て動きませんでした。

他の方法を考えることにします。
とにかく、横幅を小さくしたいので
とりあえず 3 で割ってみることにします。

Graphics.boxWidth / 3; と、入力。
(半角スペースは、入れても入れなくても動いてるけど、入れた方が見やすい?)

やったあ! 幅が小さくなったよー!
だけど・・・選択肢は一列に並んで欲しいのに三列あるよ、とほほ・・・

何列表示するかを指定しているところを探します。

よくわからないけど、すぐ下の
        return 3;
というのがなんとなしに怪しい気がするので、3を1に変更してみます。

結果、無事1列に表示できました!
山勘大当たりー!

これでまあ・・・おしまいなんですけれど
ウインドウの大きさだけじゃなく
位置も移動したいよって場合もあるかもしませんね。

というわけで、位置を設定している命令文・・・は
どうやら大きさを指定する命令のすぐ下にあるようです。

        Window_Selectable.prototype.initialize.call(this, x, y, width, height);

xyがウインドウの左端の座標のようです。
数字に変更してもいいし、x+10とかにしても良さそうです。
ちなみに、幅を3分の1に指定している場合であれば
xWidthにすれば真ん中に表示されますね。

ついでといってはアレだけれど
ウィンドウを透明にできたら、汎用しやすくなるんじゃ?
ということで、ウインドウを透明にする方法を探します。

ウインドウを透明にするプラグインがあった気が・・・ということで
公式プラグインの「TitleCommandPosition.js」を開きます。
これは、タイトルのメニューウインドウをいじれるプラグインです。

このプラグインでは、パラメータで背景を選択できるので
まず、パラメータの設定のところを見ます。
(パラメータの設定については、前回のブログ記事を参照のこと)

background」というのが背景を指定する変数のようです。
この変数が使われている命令文を探します。

        this.setBackgroundType(background);

という命令が、ソレのようです。
コピーして「 this.」で始まる命令文の辺りに挿入します。
(ウインドウ位置を指定している命令文より下に書かないとエラー)

結果、エラーで動きません。
そうです、このプラグインでは「background」という変数を定義していないので
そんな変数ねえよ!っていうわけです。

なので、前回のブログ記事よろしく
パラメータを記述してやれば、動くはずですが
面倒なので、「background」の部分を直接数値で入力します。
透明にしたい場合は 2 に入れ替えればいいはず。

        this.setBackgroundType(2);

はい、透明になりました。
パチパチパチ・・・

以上で

準公式プラグイン「EventSelector.js」のウインドウの変更は終了です。

<2017/04/21追記>
リストの並び順は新しいものが下にきますがこれを
新しく追加されたものは一番上に並ぶように変更したい場合は
こちらを参考にされると良いと思います。



続きまして
データベースのシステム設定からは消せない
メインメニューの「オプション」と「ゲーム終了」コマンドを消そう!
を、はじめたいと思います。

さて、どこからはじめるかですが・・・
とりあえず、RPGツクールVXAceのときの事を思い出してみます。
Window_MenuCommand」というクラス(?)で設定されていたようです。
なのでとりあえず、「js」フォルダにある「rpg_windows.js」を開いてみます。

続いて、「MenuCommand」という単語で検索をかけます。
たくさんヒットしますが
コマンドリストを作成している部分を探します。
そして・・・
    this.addOptionsCommand();

    this.addGameEndCommand();
を「//」でコメントアウトすれば、オプションとゲーム終了が
メニューに表示されなくなりました。

おしまい。

なお、一塊の命令文・・・
つまり段落から段落までコピーして、適当な名前でプラグインとして保存し
RPGツクールMVのプラグイン設定画面でONにすれば
元のプログラムを変更しなくて済むので安全かもしれません。

<01/12追記>
ユーザー登録特典の「YEP_MainMenuManager.js」というプラグインでも消せるようです。
なお、このプラグインを使えば、増やすことも出来るそうです。
ゲームとRPGツクールの館さんの12月23日の記事に、設定例があるので参考にされるといいと思います。



 

拍手[5回]

PR
RPGツクールMVのお話です。

JavaScriptを理解していなくても
サンプルゲームのプラグインや元のスクリプトを参考にすることで
プラグインが作れてしまうんじゃなかろーか?

というわけで、今回は
ロード回数をカウントするプラグインを作ってみようと思います。

カテゴリーは講座になってるけど
どっちかというと「やってみた」に近いものです。
当方、JavaScriptのJaの字も理解していないのでご注意下さい。
この通りやって何か問題がおきても責任はもちません。
よーと、一応免責しておきます。
 
今回参考にするプラグインは
サンプルゲーム「ニナと鍵守の勇者」に同梱されている
SwitchOnLoad.js」です。(nina →js →pluginsフォルダ)
これはロードすると指定したスイッチをONにするプラグインです。
「羊の海」と「FantasicReverie」にも同梱されていますが、バージョンが違うので
必ず、「ニナと鍵守の勇者」に同梱されているものを参考にしてください。
(プロジェクトファイルはGamesフォルダ内のnina.exeを解凍してね)

 
というわけで、指定したIDの変数に1を加算するように改造します。

まず、スイッチIDを指定するのではなく、変数IDを指定するように変えたいので
変数IDの指定のパラメータが付いているプラグインを探します。

LastSubjectActor.js」が調度いいですね。
最後に行動したアクターのIDを変数に格納するプラグインです。
アイテムやスキルでコモンイベントを使用している場合に
誰がそのアイテムを使用したかがわかるという便利なプラグインです。

 * @param で始まる3行分が、パラメータの設定項目のようです。
スイッチIDの部分を変数IDのパラメータ設定項目に入れ替えます。

次に、スイッチをONにする命令と変数を加算する命令を入れかえます。

スイッチをONにする命令は「SwitchOnLoad.js」の35行目の
$gameSwitches.setValue(switchId, true);
switchIdに入ってる数値(ID)のスイッチをtrue・・・つまり、ONにするという意味です。
ちなみに、OFFの場合はfalseですかね。

変数を代入する命令はLastSubjectActor.js」の36行目の
$gameVariables.setValue(variableId, subject.actorId());
variableIdに入ってる数値(ID)の変数に
subject.actorId()・・・つまりアクターIDを代入するという意味です。

これを、コピーしてスイッチの命令に上書きします。

アクターIDは無関係なので、とりあえず1を代入する命令に書き換えます。
$gameVariables.setValue(variableId, 1);
これで、variableIdに入ってる数値(ID)の変数に1が代入される命令になりました。

variableIdに入ってる数値(ID)の変数」というのはちょっとややこしいと思うのですが
variableIdに入っているのは、変数のID番号なので、ご理解下さい。

とりあえず、variableIdに1を加算する式を考えます。
単純に考えると「$gameVariables.setValue(variableId, variableId+1);
なのですが、先ほども言ったようにvariableIdに入っているのは、変数のID番号なので
例えば、ID10番の変数を指定していれば
いつロードしても10+1・・・つまり11が代入されることになってしまいます。

では、variableIdに入ってる数値(ID)の変数を指定するにはどう記述すれば良いのでしょう。
まずは、普通に変数10番を指定する方法を探してみます。
RPGツクールMV プラグインコマンド内制御文字 実装一覧さんによると
$gameVariables.value(10)
です。

ということは、10の部分をvariableIdに入れ替えればいいはずです。
$gameVariables.setValue(variableId, $gameVariables.value(variableId)+1);
できました。
これで、指定したIDの変数に1づつ加算されるので
ロード回数をカウントできます。

これにて完成! と、言いたいのですが
すでにお気づきのように、このままでは動作しません。
現段階ではそもそもvariableIdという変数が定義されていないっぽいのです。

スイッチswitchIdを定義する部分と
変数variableIdを定義する部分を入れ替える必要があります。

SwitchOnLoad.js」の30行目の
var switchId = Number(parameters['Switch ID'] || 0);
が、switchIdを定義する部分のようです。

LastSubjectActor.js」の20行目にある
変数variableIdを定義する部分と入れ替えます。
これで、変数は用意できました。

さて、これで保存すればOKのはずですが
名前がSwitchOnLoad.js」のままでは少々わかりにくいので
好きな名前に変更します。

29行目が名前を指定する部分のようなので
ここの「SwitchOnLoad」の部分を好きな名前に変更し
それと同じ名前でプラグインを保存します。

保存時の注意点は、前回の「ゲームオーバーしないプラグイン」を参照してね。

今回は、変数やスイッチのIDを指定するオプションの作り方と
スイッチや変数の指定方法と、保存名の変更の仕方がわかりました。

ちなみに、プラグイン作成例がこちら
ツクールシリーズでの利用に限り、ご自由にお使い下さい。
ただし、何か問題がおきても責任はもちません。

 そうそう、RPG作る人のブログさんが
ツクールMVスクリプトリファレンスwiki を作ってくれているので
とっても参考になりますよ!

 

拍手[1回]

RPGツクールMVのお話です。

JavaScriptを理解していなくても
サンプルゲームのプラグインや元のスクリプトを参考にすることで
プラグインが作れてしまうんじゃなかろーか?

というわけで、今回は
戦闘で全滅しても、ゲームーバーにならないプラグインを作ってみようと思います。

マップ設定の敵出現歩数で行う、デフォルトのランダムエンカウントを使わず
全ての戦闘をイベントコマンドの「戦闘の処理」で行えば
プラグインがなくても、ゲームオーバーにならないように出来るのですが
今回はデフォルトのランダムエンカウントを使いたい、という前提です。
 
カテゴリーは講座になってるけど
どっちかというと「やってみた」に近いものです。
当方、JavaScriptのJaの字も理解していないのでご注意下さい。
この通りやって何か問題がおきても責任はもちません。
よーと、一応免責しておきます。
 
まず、環境を整えます。
JavaScriptを編集するには、テキストエディタなどが必要です。
ググるといくつか出てきますが
私はTeraPadを使用しています。

今回参考にするプラグインは
tachiさんの「Sea Pirate シーピラート」に含まれる
Tachi.js」というプラグインです。
用意したテキストエディタで開いてみます。
プロジェクトデータフォルダ内の「js」フォルダの中にある
plugins」というフォルダの中に入っています。
(プロジェクトデータはGamesフォルダ内のexeファイルを解凍)

 
なんか色々書いていますが、欲しいのはゲームオーバーの時の処理なので
テキストエディタの「検索」機能で「ゲームオーバー」という単語を検索します。
204行目くらいに欲しい処理が記述されています。
18行ほどのこの記述を223行目の「};」まで、まるっとコピーして
テキストエディタに貼り付け、好きな名前で保存すれば
「ゲームオーバーにならないプラグイン」の完成です。

※ツクールの利用規約により
 サンプルゲーム内のデータの改変利用が認められているので
 コピペしましたが
 ユーザーさんの有志で配布されているプラグインを改変する場合は
 プラグインごとの利用規約を守ってくださいね。


プラグインとしてファイルを保存するにはちょびっとだけルールがあります。
・拡張子は   .js
・文字コードは UTF-8 で保存
・「plugins」フォルダに入れる

とりあえずこれだけ守っていれば、MVのプラグイン管理画面で
セッティングできるようになるっぽい。
ファイル名は日本語でも認識しますが、なるべく半角英数字が良いようです。

あとは、これを登録し、ONにしてテストプレイしてみましょう。
わーい、全滅してもゲームオーバーにならなくなりました。

完。

・・・なのですが
せっかくなので元のスクリプトと見比べてみることにしましょう。
元のスクリプトは、「js」フォルダ内の「rpg_managers.js」を開き
さっきコピペしたスクリプトの一行目の命令文を検索。

//」でコメントアウトされた、日本語の文章は検索しても出てきませんよ。
元のスクリプトは全て英語なのです・・・

なお、コメントアウトというのは、いわゆる注釈です。

2320行あたりに、さっきコピペした命令文と概ね一緒の命令文があります。
Tachi.js」と、どのような差があるか検証してみましょう。

どうやら
2329行目の命令文がコメントアウトされているようです。
この命令がゲームオーバー画面を呼び出しているのでしょう、多分おそらく。

ifで始まる命令文は、条件分岐です。
全員死んでいて「canLose」でなければゲームオーバーになりますよ
という命令のようです。
canLose」が何を意味しているのかは、さっぱりわかりませんが
全員復活してマップに戻る処理が入ってるっぽい。
が、ここは特にいじらなくていいようなので、とりあえず放置。
(どなたか意味がわかる方、よかったら教えて下さると嬉しいです)
 
唐傘ドールさんが、教えて下さいました!
「canLose」は敗北可のフラグです。
rpg_objects.jsの Game_Player.prototype.executeEncounterの
BattleManager.setup(troopId, true, false);の falseをtrueにすれば、敗北可になります。
イベントコマンドの戦闘処理 Game_Interpreter.prototype.command301で、
フラグを獲得しています。
通常戦闘では変更する必要が無いので固定されているのです。

ということなのだそうです。
試しに falseをtrueに書き換えてみたところ、ゲームオーバーになりませんでした。
唐傘ドールさん、ありがとうございました!

 そして、2326、2327行目の命令文がコピペされているようです。
2327行目の命令文をコメントアウトすると、戦闘画面から出られなくなるので
マップに戻る命令と考えられますね。
2326行目の命令をコメントアウトすると、マップ画面に戻った途端に
ゲームオーバーになるし、「revive」は翻訳すると「復活」なので
パーティメンバーを復活させる命令と考えていいかなと思います。

もう一行追加されている「$gameSwitches.setValue(2, true);という部分は
スイッチの2番をONにするぜ、という命令です。
これは多分とかおそらくではなく、確実にそういう命令です。

つまり、全滅したらゲームオーバーにならずマップに戻って
スイッチ2をONにするというわけですね。

なんでスイッチをONにするのか?
全滅したことをイベントで判定できるように・・・でしょうか。

例えば、全滅したら教会に戻るとか
このままだと、パーティメンバー全員がHP1で生き返るけど
主人公以外は死んだままにしたいとか
スイッチで起動するコモンイベントなどにイベントを書き込んでおけば
そういったオプションを追加するのが簡単に出来るというわけです。
すんばらしいです。

スイッチの番号を変更したい場合は、数字を変更すれば良いですね。
 
さて、これだけでもプラグインとしてなんら問題はなさそうなのですが
プラグイン管理画面で、説明文が表示されないのはちょっと寂しいよね。

説明を表示するための雛形を
Tachi.js」からコピってもいいのですが
せっかくなので、公式プラグインからコピりましょうか。
AltMenuScreen.js」を開いてみます。

3行目までは、プラグインの名前がコメントアウトされていますね。

5~10行目の「/*:で始まる方は
デフォルト・・・と言うか英語やその他の言語用の説明文のようです。
12~17行目の「/*:ja」で始まる方が、日本語専用の説明文のようです。

素材として配布する場合は、両方とも記入するのが望ましいですが
個人的に使うだけなので、片方は削除しても問題ないっぽい。

* @plugindesc」というのは、説明文を書けという意味らしいので
ここにプラグインの簡単な説明を書きます。
* @author」は、プラグインの作者名を書くようです。
* @help」は、プラグインを設定する画面で「ヘルプ」を押すと表示されるようです。
* 」をつけると改行もできるようですよ。

これで、プラグインとしての体裁も整いました。
完成です!!

Tachiさんありがとうございました。

ちなみに、プラグイン作成例がこちら
 パラメータでスイッチ番号を入力できるようにしておきました。
ツクールシリーズでの利用に限り、ご自由にお使い下さい。
ただし、何か問題がおきても責任はもちません。

 なお、4Gamerさんの
一見さんによる一見さんのための「RPGツクールMV」入門。スマホゲームも作れるようになったお手軽ゲーム作成ツールをプラグインで拡張しよう
という記事も大変参考になるので合わせてごらん頂くと
よろしいかと思います。


拍手[5回]

RPGツクールMVで使用可能なイベントコマンドの入力例です。
(試してないけど、RPGツクールVXAceでも使えるかも?)

何かのお役に立てれば幸いです。

「特定のリージョンの上を自走するイベント」が作れます。
レースイベントなどで、ライバルキャラの走行ルートを
上上下下・・・と入力するのが億劫なときなどに便利かも?
(どっちが楽かは歩く量によるかもしれませんね。
 ちょっと歩く程度なら、普通に指定した方が楽かなと)

トロッコを走らせるときにも使えそうですが
途中で進行ルートをスイッチ等で切り替えるようなギミックが
ある場合は向いてないかもしれません。

ともかく「いつも一定のルートを歩くイベント」向きのイベント例です。
コモンイベントに入れておいて、必要に応じて呼び出すのがいいかな。

著作権等はありません、ご自由に引用して下さい。
ご利用連絡も不要ですが、「いいね(拍手)」してくれると嬉しいです。

用意するもの
移動ルート用のリージョン 1つ(当講座では 100番を指定)
終点用のリージョン1つ (当講座では 101番を指定)
(リージョンとは
 主にフィールドマップにてモンスターの出現範囲を分けるために配置するタイルで
 Aceの場合は、ツールバーにあるモザイクみたいなアイコン
 MVの場合は、タイルパレットの下のタブの「R」を、クリックすると編集可能)

イベントの現在位置(X座標、Y座標)を取得する変数 それぞれ1つ
リージョンIDを代入するための変数 1つ

歩行用のイベント 1つ(イベント中も主人公を操作するなら、トリガーは並列処理)

イベントの概要
歩かせたいイベントの1歩先のリージョンが指定したリージョンかどうかを判別し
YESなら進み、NOなら無視します。
それを4方向分作成し、ラベルコマンドを使って終点までループさせます。
もし、一歩先にあるのが終点用のリージョンなら、ループを終了して
次のイベントに進みます。

ポイント
逆送を防ぐため、イベントの向きによって実行内容を変えています。
また、一歩先の位置情報を取得するため
位置を取得した変数に、加算や減算を行っているので
他の方向を調べる前に加算(減算)した分を加算(減算)しなおす命令を入れています。

注意点
複数のイベントを走らせるときは、その数だけリージョンや変数が必要です。
なお、ルートが重なり合うと誤動作を起こします。

イベント入力例の画像

拍手[4回]

昨日(12月17日)、RPGツクールMV日本版が発売されました!

ゆわか制作のサンプルゲーム「ニナと鍵守の勇者」の
プロジェクトデータも入ってますよ!
 
(なお、サンプルゲームはニコニコゲームマガジンにて
 ブラウザ版とダウンロード版が無料で遊べます)

一昨日は「発売記念イベント」があったようで
レポートの記事(プレス)が公開されています。
プレス記事その2

参加されたベータテスターさんのレポートもあります。
RPGツクールMVでアプリリリースを目指す開発室さん
RGC|RPGゲームツクールコミュさん

ところで、私のサンプルゲームのプロジェクトファイルには
うちだゆーさんのご好意で「ニナと鍵守の勇者」のロゴデータが
入っていたりするので、続編や番外編の制作に是非ご活用下さいね!

タイトルイラストは、トリダモノさんが描いてくれました。
シナリオ・設定は重歳謙治さんにご協力いただきました。
(ありがとうございました!)

さらに、プロジェクトデータの方には開発室もあります。
プラグインの説明とかちょっぴり役立つ情報もあったりなかったりです。

マウス専用ミニゲームも是非解析して
みなさんのゲーム制作に役立ててもらえたらいいなと思います。


プラグインプチ改造講座(というかマメ知識)
「BattleResultsPopup.js」というプラグインがあります。
複数のサンプルゲームで使用されている大人気の
戦闘の結果の表示方法を変更するプラグインです。
ただ、このプラグインこのままだとレベルアップのお知らせをしてくれません。
そこで、レベルアップのお知らせをしてくれるようにしたいと
希望したところ、以下の回答を頂きました。

プラグインをテキストエディタで開きます。

Game_Actor.prototype.shouldDisplayLevelUp = function() {
        return false;
    };

という記述を探し出し、削除する か // でコメントアウトし
文字コードUTF-8で保存します。

終わり。

※メモ帖とかだと改行が正しく表示されなかったりすることがあるので
jsファイル編集に適したテキストエディタを探した方がいいようです。
私はTeraPadを使用しています。
 

拍手[3回]

前のページ      次のページ
広告枠
アクセス解析

ATOM  
ATOM 
RSS  
RSS 


ソフトウェア制作講座





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