今日のツクールMZスクリプト【21】フィールド上で船を呼び出す
フィールド上で海に向かって決定キーを押したときに船を呼び出すものを作ります。
上の画像のように海面にリージョンを設定して、そのリージョンの値によって条件分岐させます。
適当な場所にイベントを作成して、「トリガーを並列処理」にします。
海に向かって決定キーを押したときに船を出したいので、
決定キーを入力したことを取得するために
Input.isPressed('ok')
を使います。
〇参考
マウスイベント、キーイベント検知についてのまとめ / RPGツクールMV小技・Tips集 (rpgmaker-script-wiki.xyz)
さらにプレイヤーの向きを取得します
$gamePlayer.direction()
で数値が戻り値でかえってきます。
ツクールの仕様で
下向き→2
上向き→8
左向き→4
右向き→6
(テンキーに対応する数字)
となっているのでその値によって条件分岐させます
下向きの時は
$gamePlayer.direction() == 2
また、プレイヤーの一つ下の座標のリージョンが1であることも条件になるので
$gameMap.regionId(x,y)
を利用して
$gameMap.regionId($gamePlayer.x, $gamePlayer.y + 1) ==1
も条件になります。(プレイヤーの一つ下なのでy座標に1加算)
この条件を満たした時に船を出現させます。
乗り物の位置設定、
$gameMap.vehicle(乗り物ID).setLocation(マップID, x座標, y座標)
を使います。
乗り物IDは
(0:小型船 1:大型船 2:飛行船)
サンプルで作っているマップIDが3でプレイヤの一つ下に出現させたいので
$gameMap.vehicle(1).setLocation(3, $gamePlayer.x, $gamePlayer.y + 1);
と実行します。
同様に他の向きについても作ると、海に向かって決定キーを押すと船が出現して乗ることができます。
今日のツクールMZスクリプト【20】足音を鳴らす
検索すれば足音を出すプラグインはたくさんありますが、
ワンポイントで使う場合、自分で作れると何かと便利なので、少しのスクリプトだけで足音を再生するようにします。
参考元
RPGツクールMZ スクリプトリファレンス - Google スプレッドシート
まず移動時という条件を取得するために
$gamePlayer.isMoving()
これを使って条件分岐を作ります。
この実行内容をマップ上に作って、「トリガーを並列処理」にして完成です。
実際にプレイしてみるとわかりますが、フレームごとに音が鳴ってうるさいのでウェイトを入れるといいでしょう。
さらに、ダッシュ中かどうかでウェイトの間隔を変えたいので
$gamePlayer.isDashing()
でさらに条件を細かくしましょう。
条件の前に!がついていると、その否定になるので
上の条件はisDashing()がfalseのとき条件を満たします。
これで、このマップ上のどこでも足音が鳴るようになります。
雑に足音を演出したいときはこれでもいいですが、地形によって音が鳴ったりならなかったりさせたい場合は、「地形タグ」か「リージョン」によって分岐させるといいと思います。
地形タグの取得
$gameMap.terrainTag(x, y)
リージョンの取得
$gameMap.regionId(x, y)
プレイヤーのx、y座標の取得
$gamePlayer.x
$gamePlayer.y
これらを利用すると
上のように作ることで足音を演出できます。
ただ、
一つのマップ上のみなので、マップごとにイベントを用意する必要があるので注意。
プラグインと違ってマップによって足音を変えたりするのが楽なのでその辺は一長一短です。
スイッチによってイベントの出現をオンオフさせれば、足音いらないと思ってる人にも配慮できると思います。
今日のツクールMZスクリプト【19】・条件分岐にスクリプトを使う、イベント出現条件のプラグイン利用
イベントコマンドの条件分岐にスクリプトを使うことができます(1行のみ)
条件分岐を複数組み合わせれば
処理できるものもありますが、これを利用することで例えば
変数1が偶数かつ変数2が奇数の時にこの処理をするといったことが可能です
$gameVariables.value(1)%2 === 0 && $gameVariables.value(2) % 2 === 1
といったスクリプト。
今回はパズルゲームの処理で
二つの変数の和を3で割ったときの剰余で条件分岐をさせています。
また、Hime_CustomPageConditionsというイベントの出現条件に関するプラグインを使うことで様々な応用ができます。
日本語版 HIME Custom Page Conditions プラグイン Ver1.5 - RPGツクールMZ・MV初心者的備忘録 - FGMG (Fun Game Make Group)
プラグインの説明によると、
はじめに注釈で<page conditon>と記入し
そののちに条件分岐で出現条件を設定することができます。
条件を満たす場合はプラグインコマンドを実行し、
さらに</page condition>で囲います。
自動実行などの場合は条件を満たした時に
</page condition>以降の処理が行われます。
今日のツクールMZスクリプト【18】・移動速度変更、イベントの一時消去
今回はイベントの移動ルート設定のスクリプト項目を利用して
取得したときに移動速度が上昇するアイテムを作ります
具体的にはこんな感じ
このプレイヤーの移動ルートの設定の項目を見ていきます。
this.setMoveSpeed(数値);
でプレイヤーの速度を数値と同じにします
(4で標準速度、5でデフォルトのダッシュと同じ二倍速)
このスクリプトを利用することで細かい速度の調整や
デフォルトで最大値の6以上にすることができます。
またthis._moveSpeed
でこのイベントと同じ移動速度を戻り値で受け取ります。
つまり現在のプレイヤーと同じ速度を取得します。
今回はその速度に0.15を足すことで
このイベントが発生したときにプレイヤーの速度が0.15だけ上昇するようになります。
(減速アイテムを作るときは-0.15などとする)
この移動ルートの設定は
他のイベントでもできるので追いかけてくる敵の移動速度が上がったりなど応用できます。
またついでですが
こちらの処理でイベントの一時消去をしています。
$gameMap.eraseEvent(イベントID);
で()内の数値のイベントを消去できます。
一時消去なので、マップを移動した後などは復活するので注意。
今回は変数41の値を代入し
その連番のイベントを消去するようにしています。
何を作ったかは省略
今日のツクールMZスクリプト【17】・プラグイン関係
いろいろとプラグインを触ってその中で分かったことなどをまとめておきます。
まず、アノテーションですが、
パラメータ側とコマンド側とに分かれていて、それぞれ
param , arg で定義をします。
また@typeで
数値だったり、変数のidだったり、文字列だったりファイル名などの入力の指定をします。ここでtypeののちに[]とつけると配列になります。
アノテーションに関する解説 | プラグインを作ってみる | プラグイン講座 | RPGツクールMZ (tkool.jp)
プラグインコマンドなどの数値の部分には
$gameVariables.value(x)や\V[x]などが使えないので
プラグインコマンドで数式や制御文字を有効に【RPGツクールMZ&MVプラグイン】 - New RPG Project (seesaa.net)
こちらの砂川赳さんのプラグインが非常に便利です。
プラグイン作成時には
(() => {
// 全ての処理がここに記述されている
})();
のテンプレを利用して、設定していきます。
'use strict';を関数内の一番上に書いておくことでエラーが出たらわかるらしい。
いろいろと試して、つくったのがこれ
PLUGIN_NAME でプラグイン名の定義をして、
PARAMで パラメータの定義をします。
p_nameは配列で、それを呼び出す?にはJSONと変換?をしないといけないみたいで不思議な処理をします。
PluginManager.registerCommand(プラグイン名,コマンド名,関数);
でプラグインコマンドの、対応するコマンド名の関数を定義します。
()内の関数は
args => {
//処理
};
としています。誰かのプラグインを参考にしたのですがなぜこういう表記なのかは謎です。
関数内は
idの数値を呼び出し、それのidに対応するグローバル変数の値を代入し
その値の添字の名前を配列p_nameから引っ張ってきています?
つまりコマンドで設定した変数の値番目のピクチャ名が
出力側の変数に代入されています。
作る際にはこちらのプラグインを特に参考にしました
KRD サイコロ - KRD_MZ_Dice.js - #ツクプラMZ (fungamemake.com)
これを応用して、変数のみピクチャの表示と移動をするようにしました。
その過程で、スクリプトコマンドの
this.wait(数値);
というものがプラグインでは使えませんでした。
たしか、this.wait() is not function.
と出ました。
ウェイトできない(プラグイン) - ツクマテ (lucky-duet.com)
今日のツクールMZスクリプト【16】・変数の定義と配列をソートする。
今回は、スクリプトでわかりやすく変数を定義してそれを利用します。
ポーカーで数字の順を配列として格納するために
変数31-35をそれぞれ1枚目-5枚目のカードのナンバーとして
let pok = [$gameVariables.value(31),…,$gameVariables.valu(35)]
と添字0-4に変数31‐35を格納します。
pokはpokerの略で、配列なので[]を使う点に注意。
この配列を扱いやすくするために小さい順にソートします。
参考場所はここ。
【JavaScript】sort()で配列の値が大きい(小さい)順にソートする | ヨウスケのなるほどブログ。 (repop.jp)
pok.sort(function(a, b){return a - b});
で処理できますが、正直関数が全く分かっていません。
コピペで特に考えずにやりました。
これを実行すると
pok[0]<=pok[1]<=…<=pok[4]
となります。
コンソール上で確認すれば問題ないですが、ツクール上でも確認したいので
変数41-45にpok[0]-pok[4]を代入します
(何故か最後に5が入ってますが関係ありません)
これを文章の表示で確認すると
このように小さい順で表示されます。
また、スクリプトを分けて
この場合pok変数のスコープが切れてしまい、後半のスクリプトのpokが定義されてない状態となりエラーを吐きます。
グローバル変数はどこでもその変数として呼び出せますが、このように定義した変数は、同じスクリプト内でしか機能しないので短い中で扱うか
プラグインを利用して長いスクリプトでも問題ないようにします。
今現在プラグインの作成まではわかっていないのでいったん放置。
要参考場所
公式プラグインを読み解く | プラグインを作ってみる | プラグイン講座 | RPGツクールMZ (tkool.jp)
今回ソートして作った変数を条件分岐等で利用してポーカーの役の判定をしていきます。
具体的には
V[41]+4=V[42]+3=…=V[45]
の時にはストレート判定。
(V[41]=V[42]=V[43]=V[44]) || (V[42]=…=V[45])
の時にはフォーカード判定等。
条件式に書くときは
V[41]=V[42]=V[43] などとは使えず
V[41]=V[42] && V[42]=V[43]
と(論理)演算子?を使う必要があります。(多分)
今回は&&や||を多用して、条件分岐させました。
ちなみにスイッチの操作は、
$gameSwitches.setValue(スイッチのID, (true )or (false))
で行うことができます。
今日のツクールMZスクリプト【15】・ループfor、ピクチャの一括消去
ループは
break;
を使うことで止めることができます。
5まで出力したときに、ifの条件が当てはまり、
break;
の処理が行われループが止まる。
■ループ(for)
ループはwhileのほかにforが使われます。(おそらくこちらが一般的)
最初から繰り返す回数が決まってるときなどに使う。
インクリメント式とは、5、6回とかでやった++と省略できる演算式のこと。
iはカウンタ変数と呼ばれる。
配列の繰り返し処理などにも使える。
■ループ(for-in)
配列の繰り返し処理はもっと簡単に表記することができる。
for-inはオブジェクトにも使える
let unko = {bbb:1 ,ccc:2};
上の例では、変数『property』にプロパティ名『bbb』と『ccc』が入る。
どちらが先に出力されるかは順不同のため注意。
■ループ(for-of)
for-ofは配列でしか使用できない。
for-inとの違いは、変数に添字ではなく要素自体を入れる。
今回の場合はdataにunko変数の要素を入れている。
■ピクチャの一括消去
for構文を使うことで、グローバル変数を用いることなく
一括でピクチャの消去を行えます。
今回は初期値0、i<20の条件式にしているので、
0-19のピクチャを一括で消去します。
コマンドについては前々回のものを参考に。
eraseは消すという意味です。消しゴムのeraserからもそんな意味だと思う。