Dear!くろうどぃあ!

このブログでは、私、くろうどの趣味に関する事を記述します。
当面は、「RPGツクールMV」をメインにします。

よくある衝突オープニングを作るよ【RPGツクールMZ】

2024-07-15 14:45:37 | RPGツクールMZ
こんにちは。
今回はよくあるオープニングの作り方です。

こちらの動画のような街角でぶつかって……ってやつです。


では、イベントコマンドを見ていきましょう。

まず、「トリガー:自動実行」のイベントを交差点の中央に設置しました。
このイベントが全部処理します。
(この2ページ目に、セルフスイッチAがONの時に何もしないイベントを作っておいてください)

次に、キャラクターとして、「少年」と「お姉さん」を初期位置に設置します。
こちらは、「移動速度:2倍速」、「オプション:すり抜け」を設定しておけば、他は任意です。

「トリガー:自動実行」のイベントで「少年」と「お姉さん」を移動させて、衝突させる形になります。

「トリガー:自動実行」のイベント内容は以下の通りです。

ポイントとしては、「移動ルートの設定」のウェイトの有無ですね。
例えば、最初の移動では、「少年」にはウェイト無し、「お姉さん」にはウェイト有りとしています。
これにより、「少年」と「お姉さん」が同時に移動します。

その後の「アニメーションの表示」と「移動ルートの設定:ジャンプ」も同じ理屈になりますね。

このように、ウェイトの有無を付けて、いわゆる人形劇イベントを作ることができます。

◆文章:なし, SF_Actor1(5), ウィンドウ, 下
:  :きゃー、急がなきゃー。
◆移動ルートの設定:少年 (飛ばす)
:        :◇下に移動
:        :◇下に移動
:        :◇下に移動
:        :◇下に移動
:        :◇下に移動
:        :◇下に移動
◆移動ルートの設定:お姉さん (飛ばす, ウェイト)
:        :◇左に移動
:        :◇左に移動
:        :◇左に移動
:        :◇左に移動
:        :◇左に移動
:        :◇左に移動
◆アニメーションの表示:このイベント, 打撃/物理
◆移動ルートの設定:少年
:        :◇ジャンプ:-3, +0
◆移動ルートの設定:お姉さん (ウェイト)
:        :◇ジャンプ:+0, +3
◆文章:なし, SF_Actor1(5), ウィンドウ, 下
:  :いったーい!!
◆移動ルートの設定:お姉さん (飛ばす, ウェイト)
:        :◇上に移動
:        :◇上に移動
:        :◇上に移動
:        :◇左を向く
◆移動ルートの設定:少年 (ウェイト)
:        :◇右を向く
◆フキダシアイコンの表示:お姉さん, 怒り
◆文章:なし, SF_Actor1(5), ウィンドウ, 下
:  :ちょっと!!
:  :どこ見てんのよ!!
◆フキダシアイコンの表示:少年, 汗 (ウェイト)
◆文章:なし, SF_Actor1(5), ウィンドウ, 下
:  :ちょっと来てもらうわよ!!
◆移動ルートの設定:お姉さん (飛ばす, ウェイト)
:        :◇左に移動
:        :◇左に移動
◆アニメーションの表示:お姉さん, 光の柱1 (ウェイト)
◆移動ルートの設定:少年
:        :◇画像:なし
◆移動ルートの設定:お姉さん (ウェイト)
:        :◇画像:なし
◆場所移動:はじまり (6,6) (向き: 下)
◆セルフスイッチの操作:A = ON

以上になります。それでは~。


ちょー簡単な滑る床【#RPGツクールMZ】

2023-12-23 13:34:21 | RPGツクールMZ
さて皆さん。
今回はこのTweet(ポスト)を詳しく書いてみますよ。


まず、1枚目の画像を見てみましょう。
これが今回作ったマップです。
矢印タイルに乗るとその方向に勝手に1歩進んでしまうというギミックですね。


これって、イベントで作ろうとすると、2枚目の画像のようになります。
これは下矢印用なので、他の3方向も必要になりますが、あとはコピペですね。


でも、コピペするのも面倒ですし、ミスも防ぎたいですよね。
そこで、公式のRegionBaseプラグインを使ってみましょう。




RegionBaseプラグインではリージョンを使うのが主かと思いますが、地形タグにも使えます。
今回は地形タグの方を使っています。



地形タグ「1234」を「下左右上」として使うことにします。
(本当はテンキーの「2468」に対応させたかったのですが、地形タグは0~7なので、半分の値にしました)

ここでは、地形タグ1の時、前述のコモンイベントを呼ぶという設定をします。
この際、オプションの「エリア内にいる間、歩く度に実行」を設定することで連続したタイルでもコモンイベントが実行されるようになります。

また、「イベントの衝突判定」を「通行不可」にするとイベントの侵入を防げるので、特にシンボルエンカウントの場合は設定しておくと良いかと思います。

これで矢印タイルを置くだけで滑る床が作り放題です。

注意点としては、この設定をした矢印タイルを滑る床以外に使いたい場合はコモンイベント側をスイッチの条件分岐で囲んで制御すると良いかと思います。

ちなみに、矢印方向に滑るのではなく、進行方向に滑る(氷パターン)場合は、コモンイベント側の移動ルートの設定で「一歩前進」を使うと良いでしょう。

それでは~。


最も簡単に作るルーレット【RPGツクールMZ】

2023-09-22 15:13:49 | RPGツクールMZ
こんにちは。くろうどです。
今回はプラグインを使わずにルーレットを作ってみたので紹介したいと思います。
スクリプトは使ってますけどね。

まずは、こちらの動画をご覧ください。

それではルーレットを作っていくのですが、ペイントソフト等を使って以下を用意する必要があります。
  • ルーレット画像
  • ポインター画像(ルーレットを指す針)
この時、ルーレット画像は角度がいくつの時にどの場所を指しているか分かるようにしておいてください。
今回は円を4等分した画像を使いましたので、90度ごとに場所が変わります。

要するに、円(360度)を割り切れる値で等分したルーレット画像がよいでしょう。

画像の準備できたらRPGツクールのイベントを作るだけです。
以下の画像をご覧ください。

今回はプレイヤーがSTOPさせるモノではなくランダム時間で勝手に止まるようにしました。
ウエイトの17フレームはテキトーな値です。

重要なのは、変数の操作をしている以下の部分です。
◆変数の操作:#0176 Roulette 角度 = $gameScreen.picture(21).angle()
◆変数の操作:#0176 Roulette 角度 %= 360
ここでスクリプトを使っています。
回転させたピクチャ(今回は21番)の角度(angle)を変数176番に入れています。

この時、角度は回り続けた分だけ増えています。
つまり、360より大きくなることがあります。

そこで、角度を360で割った余り(剰余)を算出しています。

今回のルーレットは実はこれだけです。

あとは、用意したルーレット画像に合わせて角度ごとの処理を行うだけです。
実に簡単でしたね。

ルーレット画像を用意するのが一番大変ですね……。
drawCircleみたいな関数でルーレット作れれば楽でしょうね。
それではまた。


「エリア感知センサー」プラグインを作ったよ【RPGツクールMZ】

2023-09-20 12:52:35 | RPGツクールMZ
今回は、KRD_MZ_AreaSensor (エリア感知センサー)プラグインについて書きたいと思います。

この「エリア感知センサー」プラグインでは、
  • イベントから指定マス数以内にプレイヤーがいるかどうか
  • イベントから指定マス数以遠にプレイヤーがいるかどうか
をチェックするための関数を提供するプラグインです。

関数を提供するプラグインなので、プラグインコマンドではなく、条件分岐コマンドの「スクリプト」にJavaScriptを記述する形で使います。

また、「移動ルートの設定」の中の「スクリプト」でも使えます。

上手く使えば「チェイス系ミニゲーム」や「だるまさんがころんだ」を作ることができます。

このプラグインで感知できるのは縦横含めたマス数なので、3マスの場合は以下の画像の灰色の床タイルが範囲内となります。


このエリア感知イベントの作り方の例としては、
  • 並列処理にする
  • 条件分岐で「エリア感知センサー」プラグインの関数を使う
  • (この例では this.sensePlayer(3) という記述で関数を使っています)
となります。


高度な使い方としては、「自律移動」を「カスタム」にした場合の「ルート」の設定で、
if (this.senseOutPlayer(6)) $gameSwitches.setValue(19, false)
※プレイヤーが6マス以遠の場合、スイッチ19番をOFFにする。
のように、「スクリプト」欄にif文を書くことも可能です。

この「エリア感知センサー」プラグインのダウンロードは以下のリンク先(GitHub)からどうぞ。
それではまた。


【RPGツクールMZ】音声合成プラグインを作ったよ

2023-07-10 18:38:31 | RPGツクールMZ
お久しぶりです。くろうどです。
今回は最近作った「音声出力(音声合成)プラグイン」の解説をしたいと思います。

音声合成というのは文章を元にして音声を出力する機能です。
だいたいの場合、機械音声などと呼ばれるような音声が出力されます。

このプラグインは以下のリンク先で公開しています。

このプラグインは Web Speech API を使用しています。
なので、Web Speech API に対応したブラウザでないと動作しません。
ただし、この記事を書いている時点では主要なブラウザでは対応されていると思います。
また、ブラウザないしOSが持っている音声合成機能を使いますので、環境によって出力される声は変わります。

ここからは技術的な解説です。

まず、このプラグインのメイン処理です。
synth.speak(utterThis);
という行がありますので探してください。
これが音声合成でしゃべってもらう記述です。

他の記述はそのための準備であったり、RPGツクールMZのプラグインとしての体裁と整えるためのものです。

では、少し上の記述を見てみましょう。
const synth = window.speechSynthesis;
const utterThis = new SpeechSynthesisUtterance(text);
utterThis.lang = language;
これが、最低限必要と思われる準備です。

window.speechSynthesis
これが音声合成をコントロールするインターフェイスです。
この中に、前述のspeakメソッドがあります。
speakメソッドを使うことで音声合成が始まります。

他にもcancelやpause、resumeといったメソッドがあります。
これらの処理が必要な場合はメソッドを呼びましょう。

new SpeechSynthesisUtterance(text);
SpeechSynthesisUtterance のインスタンスを生成して使える状態にしています。
引数textに音声合成する文章が入っています。

utterThis.lang = language;
SpeechSynthesisUtteranceのプロパティであるlangに設定しています。
languageには言語コードと国コードが書かれている文字列を入れておきます。
日本語&日本の場合は「ja-JP」です。
このプラグインではデフォルトを「ja-JP」にしているので、特に気にしなくていいと思います。

SpeechSynthesisUtteranceのプロパティには他にpitch、rateなどがあります。
これらの値を変えたい場合はそれぞれのプロパティに値を入れることになります。

というわけで、まとめると、
window.speechSynthesisのメソッドで動作を行い、
SpeechSynthesisUtteranceのプロパティに値を設定する
という形になっています。

今回は以上です。それでは~。


ソースコード解説「隣接時フキダシ表示プラグイン」

2022-07-23 21:45:33 | RPGツクールMZ
こんばんは。くろうどです。
今回は、「隣接時フキダシ表示プラグイン」を作ったので、そのソースコードの解説をしたいと思います。

 

今回の機能はマップイベント(Game_Event)を基準にプレイヤーの位置を取得して隣接しているか判断します。

ソースコードの上から順に見ていくと、まずは、Game_Event の refresh です。
これはプレイヤーから隣接してきた時の処理です。

const KRD_Game_Event_refresh = Game_Event.prototype.refresh;
Game_Event.prototype.refresh = function() {
	KRD_Game_Event_refresh.apply(this, arguments);
	this.doNeighborBalloon();
};

次に updateStop です。
これはマップイベントの移動でプレイヤーに隣接した時の処理です。
ここは、毎フレームかなんかのタイミング(よく知らない)で実行されるので注意が必要です。
const KRD_Game_Event_updateStop = Game_Event.prototype.updateStop;
Game_Event.prototype.updateStop = function() {
	KRD_Game_Event_updateStop.apply(this, arguments);
	this.doNeighborBalloon();
};

実際の処理は次からです。
マップイベントのメモ欄に書いたタグ(balloonId)を取得して、requestBalloon でフキダシを表示させます。
他の部分は、updateStop が繰り返し実行されるので、プレイヤーが移動してなければフキダシを表示させないようにしています。
あと、マップイベントが出現条件を満たしていない時はフキダシを表示させないようにしています。

Game_Event.prototype.doNeighborBalloon = function() {
	if (this._pageIndex < 0) {
		return;
	}

	const balloonId = Number(this.event().meta.balloonId);
	if (!isNaN(balloonId)) {
		this._oldPosition = this._oldPosition ? this._oldPosition : 0;
		const newPosition = this.neighborPlayer();
		if (this._oldPosition !== newPosition && newPosition > 0) {
			$gameTemp.requestBalloon(this, balloonId);
		}
		this._oldPosition = newPosition;
	}
};

次の処理はプレイヤーとマップイベントが隣接しているかのチェックです。
プレイヤーのX座標、Y座標とマップイベントのX座標、Y座標を比較しています。
プレイヤーは $gamePlayer で取得できますし、マップイベントは今回は Game_Event の中なので this で取得できます。
Game_Event.prototype.neighborPlayer = function() {
	if (this.x === $gamePlayer.x && this.y === $gamePlayer.y + 1) {
		// console.log("プレイヤーの下にイベントあるよ!");
		return 2;
	}
	if (this.x === $gamePlayer.x - 1 && this.y === $gamePlayer.y) {
		// console.log("プレイヤーの左にイベントあるよ!");
		return 4;
	}
	if (this.x === $gamePlayer.x + 1 && this.y === $gamePlayer.y) {
		// console.log("プレイヤーの右にイベントあるよ!");
		return 6;
	}
	if (this.x === $gamePlayer.x && this.y === $gamePlayer.y - 1) {
		// console.log("プレイヤーの上にイベントあるよ!");
		return 8;
	}
	return 0;
};

というわけで、「隣接時フキダシ表示プラグイン」はこれだけです。

このプラグインにどんどん機能追加していくと、「近づいた時にメッセージ表示するプラグイン」になるとは思いますが、うちは満足したのでココまでです。

それでは~。


ダメージポップアップ位置を真ん中にしてみた

2022-07-19 08:06:27 | RPGツクールMZ
さて皆さん。こんにちは。

今回は、RPGツクールMZでダメージポップアップ位置を修正したので、その方法を書いてみたいと思います。

修正すると以下の画像のように、真ん中辺りにダメージポップアップするようになります。

以下のソースコードをプラグインとして登録すればOKです。

Sprite_Battler.prototype.damageOffsetY = function() {
	return -Math.floor(this.height / 3);
};

何をやっているかと言うと……。

「Sprite_Battler」がバトル時のキャラクター画像です。
このキャラクター画像の高さ(height)を割る 3 した値をマイナスにしています。
(分かりにくいと思いますが、「Math.floor」の左側に「マイナス記号」が付いています)

そうすることで、キャラクター画像の下側からこの値が引かれて、だいたい真ん中辺りに表示されるようになっています。

値を変えると表示位置がズレていくのが分かると思います。

今回はこの辺で……。
それでは、また~。


くるくる回転

2022-07-15 02:39:02 | RPGツクールMZ
こんばんは。くろうどです。

まずはこのTweet内の動画を見てください。
最後の場面で、船がくるくる回転してると思います。
 

このくるくる回転は、
「移動ルートの設定」で、
「右に90度回転」を繰り返す設定にすれば簡単です。

回転速度は「ウェイト」で調整しましょう。

 

今回はこれだけでお仕舞いです。
それでは~。


多言語プラグイン&くろうどゲッターパターン

2022-07-13 03:09:31 | RPGツクールMZ
さて皆さん。
お久しぶりです。

今回は、久しぶりの投稿テストを兼ねて、私の「多言語プラグイン」の紹介を少しだけ。

このプラグインでは、オプション等から言語の切替ができるようになります。

↓ダウンロードはGitHub↓

GitHub - kuroudo119/RPGMZ-Plugin: RPGツクールMZ用プラグイン置き場。

RPGツクールMZ用プラグイン置き場。. Contribute to kuroudo119/RPGMZ-Plugin development by creating an account on GitHub.

GitHub


以下は、「くろうどゲッターパターン」と勝手に呼んでいる処理の記述方法です。
ゲッターを含むオブジェクトを戻り値にしています。
車輪の再発明なのかどうかは分かりませんが、この処理のおかげで、他のプラグインとの競合が減っているはずです。

Game_System.prototype.resetDatabase = function(database) { database.forEach(data => { if (data) { data.name_0 = data.name_0 ? data.name_0 : data.name; data.desc_0 = data.desc_0 ? data.desc_0 : data.description; Object.defineProperties(data, { name: { get: function() { return KRD_MULTILINGUAL.getData(data).name; }, configurable: true }, description: { get: function() { return KRD_MULTILINGUAL.getData(data).description; }, configurable: true } }); } }); };

KRD_MULTILINGUAL.getData = function(data) {
	return {
		get name() {
			return KRD_MULTILINGUAL.getReturnData(data, "name_", "name");
		},
		get nickname() {
			return KRD_MULTILINGUAL.getReturnData(data, "nickname_", "nickname");
		},
		get profile() {
			return KRD_MULTILINGUAL.getReturnData(data, "profile_", "profile_1st", "profile_2nd");
		},
		get description() {
			return KRD_MULTILINGUAL.getReturnData(data, "desc_", "desc_1st", "desc_2nd");
		},
		get message1() {
			return KRD_MULTILINGUAL.getReturnData(data, "message1_", "message1");
		},
		get message2() {
			return KRD_MULTILINGUAL.getReturnData(data, "message2_", "message2");
		},
		get message3() {
			return KRD_MULTILINGUAL.getReturnData(data, "message3_", "message3");
		},
		get message4() {
			return KRD_MULTILINGUAL.getReturnData(data, "message4_", "message4");
		},
		get iconIndex() {
			return data.iconIndex;
		},
		get id() {
			return data.id;
		}
	};
};

それでは今回はこの辺で。
ごきげんよう。