投稿記事

2024年 05月の記事 (2)

RPGツクールMZ・レーザートラップの作り方

レーザートラップの記事が結構反響があったので、
どなたかのお役に立てればと、
作り方を残しておきたいと思います。




イベントを発火させるだけならノープラグインで出来ますが、
これはあくまで自分が考えて作ったやり方で、
他に良い方法とか上位互換版がありましたら教えてください!







レーザーの配置をイベントで一つずつ入れていきます。

交差するレーザーの置き方が一番悩ましくて、
同じ場所に二つ以上のイベントの配置は出来ないので、
自分はうまく被らないように配置させました。

基本的には右側も左側も作り方は同じなので、
左側をベースにご説明します。





このレーザーは上下に動きますが、画像の①と②で挙動が少し異なります。

赤枠の部分にレーザーがぶつかった時に①が消えるためです。




■全体共通

イベントのベースは全てほぼ一緒です。
画像が違うだけで、共通して同じ内容です。
大事なのは『すり抜け』のチェック、
移動タイプが『カスタム』になっていること、
あとはプライオリティは『通常キャラと同じ』になっていることです。
『イベントから接触』になっていますが、正直ここは関係ありません

プライオリティはキャラの上にしがちですが、
そうすると天井の上にレーザーが来るのでおかしなことになります。





■①のカスタムルート

動きは全てカスタムルートで制御します。
上記は①の動きですが、壁にぶつかって消失するので、
そこには『透明化ON』を入れ、壁から抜けた時に『透明化OFF』を入れます。





■②のカスタムルート

②も①と同じ感じですが、肝なのは①と同じ位置に透明化処理を入れ、
しかも全部を『透明化OFF』にすることです。

全部透明化OFFなら入れる意味ないじゃん、と思いがちですが、
実は透明化処理を入れるとその分少しウェイトが入るため、
入れたものと入れていないもので位置が少しずつズレていってしまうんです

そのズレを解消するために、『透明化OFF』を入れます。
透明化ONもOFFもかかるウェイトは同じのため、
①と②の透明化処理の数を合わせることで、位置ズレを防ぐことが出来るわけです






これで移動の処理は完了です。



次に、レーザーが主人公に当たった時のイベント発火処理を作ります。



実はイベントの見た目とイベント発火は全く連動していなく
ちゃんと処理を入れないと
レーザーが当たってないのに主人公が燃えた!!
のようなことになってしまいます。






この処理はイベントの位置を変数化し、また、プレイヤーの位置も変数化し、
その二つの変数の数字がイコールになった時に(イベントとプレイヤーが重なった時に)
イベント発火
、という仕組みを取っているのですが、
最初はイベントの数だけ変数を用意しなければならないのか……?
と思っていました。



が、そんなことしなくても出来ました!





後になって『右のキャラをベースに作れば良かった』と失敗したと思いましたが、
最初は画像のEV041のイベントをベースに作っていました。




■各位置の変数化

変数化はこんな感じです。

適当な場所にイベントを作り、『並列処理』にして、
プレイヤーとイベントの位置を変数に変換します。
(EV042とEV026はマップ右側の処理なので本件には関係ありません)






■発火処理

これが一番難解な箇所です。
イベントとプレイヤーが重なった時にイベント発火させるだけなら簡単なんですが、
今回のレーザートラップは
複数のイベントと重なった時に発火させないとなりません



それで自分が取った方法。




プレイヤーとイベントのY軸処理はイコールだが、
X軸処理は=ではなくにする!




そうするとどうなるかというと、こうなります。

Y軸はイベントとプレイヤーの位置が合わさった時に発火しますが、
X軸はイベントより右側にプレイヤーがいればどこまででも発火します!
画像の赤い範囲が発火範囲になります。

でもこれだとレーザーキャラがいる右側も発火してしまうので、
それを制御するために、条件分岐に『プレイヤーのX軸≦31』を入れます。



そうすると、イベントの位置~X:31の場所までが発火範囲になります!

壁のブロックさえ無ければ、これだけで完成になります。

Y軸的にはプレイヤーとイベントのY値が合った時、
X軸的にはEV041~X:31(レーザーキャラの位置)ということで、
左から右まで全てのイベントの位置で発火することになります。






最後に、レーザーが壁に当たって消えた場所(=安全地帯)は
イベント発火をさせない処理です。


これは画像の赤枠部分が該当します。

X軸とY軸で座標指定して、そこに該当する箇所はイベント発火をしない、
それ以外の箇所全てでイベント発火をする、
という形を取ればOKです!




Y:97、X:22、X:27は画像のこの位置、
ちょうどその範囲がレーザーが消えている範囲になります。

そこだけ処理を何も入れず、
それ以外のところでイベント発火をするようにすれば、
レーザーが消えた範囲以外の全ての場所で発火させられる、
という形が取れるわけです!







自分で長々と書いていてこの説明で分かるだろうかと
半信半疑ですが、
この作り方がどなたか一人にでも刺さればいいなと思います。

時を診る猫の『3つの挑戦』

時を診る猫は、スマホでプレイ出来る
長編・サスペンス・歴史改変RPGの体で制作中ですが、
実は密かに3つの挑戦を目論んでいます。






一つ目の挑戦:スマホ界で本格RPGを打ち立てる


これは別に挑戦というほどのものでもないですが、
スマホって課金無し・ガチャ無しの買い切り型で
本格RPGってあまり無い印象なんですよね。



元々、ゲーマーに限らずより多くの方に手に取ってもらうために
スマホでプレイ出来ることは制作条件の一つに掲げていたんですが、
本作はスマホの本格RPGの一翼を担う存在になれたらと、
内心燃えていたりします。






二つ目の挑戦:サスペンス×RPGの魅力を打ち出す




これは中難易度。



サスペンスはアドベンチャーゲームではよくあるジャンルですが、
『得体のしれない恐怖』『命が脅かされる不安感』等で
ハラハラドキドキの緊張感を楽しめるのが醍醐味ですが…



経験値を溜めてレベルを上げ、巨悪を倒すのが醍醐味のRPGとは
ある種相反するところがあるかと思っています。



どんな恐ろしい対象でもRPGに変換すれば
数値を持ったただのエネミーでしかない、
より大きな数値を以て屠るだけの対象でしか無くなってしまうので。



RPGとして楽しめながらも、
サスペンスとしてのドキドキハラハラをどこまで攻められるか?
というのが本作の課題であり、挑戦です。






三つ目の挑戦:敵の強さが分かるバトルを楽しませる




これが高難度で一番の挑戦。



命名、『先読みシミュレーションバトルシステム』



キャッチフレーズまで決めています。



『誰一人として、死なせない。』
(ゲームオーバーにさせないという意味で)



本作のボス戦では、
とあるアビリティを使用すると敵の次回行動が分かるようになります
また、別のとあるアビリティを使用すると
敵のステータスやスキル、危険性まで全てオープンになります



敵の能力等が分かったうえで、どう敵を倒すか戦略を立てる……
というシミュレーションゲームのような味わいを楽しめるのが
このバトルシステムの特徴で、
敵の情報が分かっているだけにしっかり対策が立てられるんです。



いわば初見殺し殺しです。



これを用いて、プレイいただいたユーザーの方、
誰一人としてゲームオーバーにさせないというのが、本作の目標です



ただ、ヌルゲーにさせるつもりもありません



誰一人としてゲームオーバーにさせないながらも、
相応に歯応えのある戦闘が楽しめる…



そのギリギリのラインを攻めるというのが
この三つ目の挑戦です。






出来るかなー、世の中や作品に対する挑戦ですが、
自分に対する挑戦でもありますね。



乞うご期待!

月別アーカイブ

記事のタグから探す

限定特典から探す

記事を検索