忍者ブログ
windowsやブラウザ のゲーム作ったりとか。
RPGツクールMVの準公式プラグイン「OverpassTile.js
橋のように、そのタイルの上を歩くことも出来るし
その下を潜り抜けることも出来る素敵なプラグインです。
サンプルゲーム「ニナと鍵守の勇者」等のプラグインフォルダに入っています。
Gamesフォルダ内のnina.exeを解凍してね。
(使い方は、公式ページの新機能活用講座をチェックしてね)

ただ「橋の上にイベントを置く」ということは考慮されていないため
プライオリティを「通常キャラと同じ」に設定したイベントを
以下のように配置すると、橋の下に落ちてしまいます。

     → プレイ画面

ただし、橋の上に直接置くのではなく
イベントが橋の上や下を通行するということは考慮されているので
下の図のように、橋の出入口のリージョンの上に配置して移動させると・・

エディタ画面 → プレイ画面

なんと、ちゃんと橋の上に表示されます!
ぐれいと!

とうわけで、橋の上に透明ではないイベントを置く場合は
最初は橋の上ではなく、橋の出口に配置しておいて
そのマップに入ったら自動で起動するイベントを別途設置して
イベントを移動させるようにすれば、いいということになります。

※イベント入力例(イベントのトリガー:並列処理)

◆イベントの位置設定:橋の上の人,(18,12)
◆イベントの一時消去


なお、 位置設定ではなく、移動ルートの設定で移動させる場合は
橋リージョンタイルの上以外に設置すれば自動で表示を切り替えてくれます。
便利ですねー。
(ともかくイベントに橋の出入口のリージョンを踏ませることが大事です)

さて、いよいよ接触判定です。
 
このままでは、橋の上にいても下にいても話しかけられてしまいます。
つまりそのイベントの下を潜り抜けられないのです。

というわけで、スイッチでイベントのページを切り替えて
「プレイヤーが橋の下にいる」時は、プライオリティを「キャラの上」にし
「プレイヤーが橋の上にいる」時だけ、「キャラと同じ」にします。

橋の下のイベントは、逆に
「プレイヤーが橋の上にいる」時は、プライオリティを「キャラの下」にし
「プレイヤーが橋の下にいる」時だけ、「キャラと同じ」にすれば
接触する事はないでしょう。

橋の下にいるヤツにまでスイッチあれするとかメンドイわ。
と言う場合は、公式の講座にあるように、イベントを並べておけば
橋の下にイベントが来たり、段差のあるヘリで接触したりと言う事も避けられます。

イベントの無駄遣いしたくないんだけど?っていう方は、
ユーザー登録でもらえる準公式プラグイン(海外翻訳版)
YEP_RegionRestrictions.js」を使用するという手もあります。
このプラグインの使い方については
プログラミング素人がゲームを作るさんの記事を参考にされると良いと思います。

ではどこで、そのスイッチを切り替えるか・・・ですが

 

赤丸のように橋の両出入口か
青丸のように、橋のある段に上がる出入口に
踏むとスイッチを切り替えるイベントを置く・・・ですかね。

※青丸の位置のイベント入力例
(イベントのプライオリティ:キャラと同じ、トリガー:プレイヤーから接触)

条件分岐:プレイヤーが上を向いている
 ◆スイッチの操作:#0001橋の上2いるぜ=ON
 ◆移動ルートの設定:プレイヤー
 :        :◇すり抜けON
 :        :◇上に移動
 :        :◇上に移動

 :        :◇すり抜けOFF
 ◆
それ以外のとき
 ◆条件分岐:プレイヤーが下を向いている
  ◆スイッチの操作:#0001橋の上2いるぜ=OFF
  ◆移動ルートの設定:プレイヤー
  :        :◇すり抜けON
  :        :◇下に移動
  :        :◇下に移動

  :        :◇すり抜けOFF
  ◆
 :分岐終了
 ◆
分岐終了

と、まあこれでOK。
橋の上イベントが諦めきれない方はお試しあれ。
※なぜ、プライオリティがキャラと同じになってるかというと
「はしご」タイルの上だとプレイヤーの向きが全部「上」になるからです。
 普通の階段なら、キャラの下でOKだし、移動ルートも1歩あるかせるだけでいいです。

 
ちなみに、ユーザー登録でもらえる準公式プラグイン(海外翻訳版)
YEP_RegionEvents.js」を使用するという手もあります。
特定のリージョンを踏むと、任意のコモンイベントを起動するプラグインです。
踏むとスイッチをONにするコモンを呼び出すリージョンと
踏むとスイッチをOFFにするコモンを呼び出すリージョンを
並べておいて置けば楽チンですね。
(ただし、イベントの出入りが自由になってしまうので
 ランダムに動くイベントを設置している場合は
 上で紹介した「YEP_RegionRestrictions.js」との併用が必須かな)


どちらでも、自分にとって楽な方をどうぞ。

拍手[7回]

PR
バラバラになった絵を30秒以内に復元しよう!
マウスで画像をクリックして入れ替えてね!

RPGツクールMVで作りました。
©2015 KADOKAWA CORPORATION./YOJI OJIMA

もうちょこっと大きな画面で遊びたい方は、プリシーへどうぞ!

tomoaky様、トリアコンタン
プラグインお借りしました。
ありがとうございます。

イラストは、RPGツクールMVのデフォルト素材を合成して作りました。

拍手[4回]

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回]

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回]

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

ATOM  
ATOM 
RSS  
RSS 


ソフトウェア制作講座





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