開発日誌

すべての記事

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 数値入力ウィンドウを強化

2022-01-30 22:54:58

イベントコマンド「数値入力の処理」のウィンドウを機能強化して、キャンセルボタンを有効にしたり、数値入力の前後に文字列を追加したり、入力可能な数値の最小値・最大値を指定できるプラグインを作成しました。

RPGツクールMZ専用です。ウィンドウ系は仕様が異なるため、MVでは使えませんのでご注意ください。

※ 2022-03-30追記:
オプションでタッチUIをOFFにした場合エラーが発生するバグを修正しました。お手数ですが、Version.1.0.1にアップデートをお願いします。

標準のイベントコマンド「数値入力の処理」では、入力した数値を受け取る変数と数値の桁数を指定するだけですが、このプラグインを導入すると、追加で以下のことができるようになります。

  • キャンセルボタンで数値入力をキャンセル
  • 数値入力の前後に文字列を追加
  • 入力可能な数値の最小値・最大値を設定

標準の「数値入力の処理」ではキャンセルが効かず、数値が0だったらキャンセルと見なすといった処理にすることが多いですが、それだと支障のあるケースもあると思います。

「キャンセル有効」をONにすると、ESCキーやキャンセルボタンで数値入力をキャンセルすることができるようになります。キャンセルした際に変数に格納する数値を指定できるので、-1など通常では入力できない数値を設定しておいて、変数の値が-1かどうかで分岐することができます。

また、数値入力の前後に文字列を追加することができます。入力値の説明や単位などを追記して、分かりやすくすることができます。文字列には各種制御文字も使用可能です。

さらに、入力可能な数値の最小値・最大値を指定できます。最小値・最大値はそれぞれ、直接数値で指定することも、変数で指定することも可能です。

最小値・最大値を可変にしたい場合は、最小値・最大値を変数に格納して、その変数を指定するといった方法になるかと思います。

なお、最小値・最大値の指定処理はトリアコンタンさんのプラグインを参考にさせていただいております。ありがとうございます。

具体的な使い方としては、プラグインコマンド「数値入力ウィンドウ設定」でこれらの設定をすると、次の「数値入力の処理」の際に適用されます。

一度「数値入力の処理」が行われると、これらの設定はリセットされるので、「数値入力の処理」の直前でプラグインコマンドを呼び出すようにするといいでしょう。

ただしRPGツクールの仕様上、「文章の表示」と「数値入力の処理」の間に別の処理を挟むと、数値入力の前にメッセージウィンドウが閉じてしまうため、本当の直前ではなく「文章の表示」よりも前に呼び出す必要があることに、ご注意ください。

具体的な活用方法ですが、私は銀行システムを作る際に活用しています。

銀行に入出金できるのは1000G単位にしたかったため、後ろに文字列で「000G」と追加しています。

また、入力可能な数値の最大値を設定して、所持金以上に預け入れたり、預金額以上に引き出したりできないようにしています。

質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] [ ツクール情報 ] 敵の蘇生対象がランダムにならない不具合修正

2022-01-19 01:47:24

敵が蘇生スキルを使ってくる際に、死亡者が複数いたとしても、ランダムではなく必ず先頭の死亡者が対象になってしまうという、RPGツクールMZのコアスクリプトの不具合を修正します。

RPGツクールMVにも同様の不具合があるのですが、ターゲット選択部分のコアスクリプトの構造が微妙に異なるため、今回はMZ専用プラグインとなります。MVへの移植も容易なのですが、検証作業がめんd

以前にも「正しい蘇生術」で、RPGツクールVXに同様のプリセットスクリプトの不具合があることを解明し、修正スクリプトも公開していました。

当時の不具合は、Game_BattleActionのdecide_random_targetメソッドにおいて、対象が味方単体(for_friend?)ならば(生存中の)味方からターゲットをランダムに決定、対象が戦闘不能の味方単体(for_dead_friend?)ならば戦闘不能の味方からランダムに決定、としているつもりが、for_friend?にはfor_dead_friend?の場合も含まれるので、この判定順序では対象を戦闘不能の味方にしていても通常の味方単体で選ばれてしまう、というものでした。

実はMZが出た時に、この不具合がどうなっているのか、コアスクリプトを調べてみたことがあります。

対応するGame_ActionのdecideRandomTargetメソッドを見ると、ちゃんと戦闘不能の味方(isForDeadFriend)を先に判別しており、さすがに不具合は解消されているものだと思っていました。

ところが最近になって、蘇生魔法を使用する敵を作って戦闘テストをしていたところ、何度試しても先頭の死亡者ばかり蘇生してきます。

そこで改めてコアスクリプトを検証してみたところ、Game_ActionのdecideRandomTargetは敵の通常行動時に呼ばれるものではなく、敵がターゲットを決めるメソッドはmakeTargetsであることが判明しました。そしてここから呼ばれているtargetsForDeadを見ると、敵が蘇生スキルを使用するという前提がないせいか、先頭の死亡者が選ばれるような構造になっていました。

本プラグインはそれを修正して、敵が蘇生スキルを使ってくる際に対象者をランダムに選ぶようにしたものです。

質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 能力値&敵キャラの調整Excelツール更新

2022-01-06 21:12:18

RPGツクールMV/MZ用に公開していた「エクセルで能力値かんたん調整」と「エクセルで敵キャラかんたん設定」の2つのExcelツールに不具合があったので、修正版をアップしました。

各ツールの使い方については、それぞれの記事を参照してください。

今回修正したのは、各職業や敵キャラのメモ欄等に\で始まる制御文字を使用していると、出力されたjsonファイルが読み込めなくなるという不具合です。jsonファイルの中では\が特殊な意味を持つので、\自体を出力するためには \\ としないといけないのを、そのまま \ と出力してしまったため、読み込みエラーが起きていました。エラー報告をいただき、ありがとうございました。

制御文字を使っていない場合は特に関係ありませんが、何かの拍子に制御文字が入らないとも限らないので、念のためアップデートをお願いいたします。

なお、64bit版のExcelをお使いの場合は、そのままでは動作しませんので、
https://tablacus.github.io/scriptcontrol.html
から、64bit版で動作するScriptControlである「Tablacus Script Control 64」をダウンロード&インストールしてください。

これはtwitterツクールフォーラムでしか言及していなかったと思うので、改めてエクセルツール上にも記載しました。

もしこれらのツールを使って、うまく動作しないだとか、jsonファイルが読み込めなくなったといったことがありましたら、お気軽にご相談ください。場合によってはファイルの復旧が不可能なこともありますが、その時はご容赦ください。

[ サイト情報 ] [ その他の雑記 ] 2021年総括

2021-12-31 20:56:59

早いもので2021年ももう終わり。というわけで大晦日恒例、総括の時間です。

今年は去年のRPGツクールMZ発売から引き続き、新作ゲームとプラグインの制作を行ってきました。

といっても2020年に比べるとかなり投稿頻度は低めでしたね。

プラグインについて大きかったのは、バージョン1.3で導入されたサブフォルダへの対応に翻弄された件でしょうか。

RPGツクールMZの6月に発表されたバージョン1.3.0(実質1.3.1)で、プラグインフォルダにサブフォルダを作れるようになりました。しかし当初の仕様だと、サブフォルダ内に格納された場合に自プラグイン名の取得が正常に動作せず、修正を余儀なくされました。この仕様変更は既存の大半のプラグインにとって及ぼす影響が甚大で、続くバージョン1.3.2でサブフォルダ付きプラグインの仕様が修正されました。それによって既に修正済みのプラグインも再修正を余儀なくされました。当サイトだけでなく、ツクールフォーラムの方にもプラグインを投稿していたので、両方を修正して回るのがなかなか大変でした……。

このほか公式とプラグインの関係で言えば、タイマーの不具合修正プラグインを公開したのですが、その後バージョン1.4でこのタイマーの不具合が修正され、プラグインは不要になった……と思いきや、根本的には直っていないようで、なんか中途半端な感じに……。バージョン1.4系もまだ不具合が散見されているようですし、安定版になるのは年明けですかね。

プラグインは、自分で使うものについては大方作ってしまったので、後は汎用的に使えてちょっと不便な仕様を改善するようなプラグインを作っていきたいと思っています。

twitterで過去に作ったプラグインを時々紹介しているのはかなり反響が大きいので、またプラグインのまとめ記事を準備しようと思っています。

このほか、プラグインではないですが、「地形タグで滑る床を実現」や「何度か使うと壊れるアイテムの実装」など、イベントコマンドを駆使して実装する系のテクニック紹介記事もいくつか投稿しました。

制作補助ツールとしては、指定した番号のスイッチや変数を検索できるExcelツール「RMDebugger」を作りました。去年作ったExcelツールと合わせて、これもいずれまとめ記事を用意したいと思います。

12月には昨年に引き続き「ツクールフォーラムアドベントカレンダー Advent Calendar 2021」に参加し、「モブ会話の作り方」と「不可視シンボルエンカウント・再」の2本の記事を投稿しました。特に「モブ会話の作り方」は反響が非常に大きかったですね。

新作ゲームについてはtwitterの方でたびたび進捗を紹介していますが、ここ最近はちょっと制作が停滞しているかも……?

そう言えば新作ゲームについては、当サイトでは内容を全く紹介していなかったので、来年は徐々に紹介していこうと思います。スケジュール上は今のところ、来年の秋頃に新作王道RPGを公開できそうな予定になっていますが、スケジュール通りに行くかどうかは不明……。2022年のうちには何とか公開したいと思っています(既に弱気)。

というわけで来年も、一人でも多くの方に役立てるようなプラグインやテクニックの紹介、一人でも多くの方に楽しんでもらえるゲームを作っていきたいと思いますので、2022年もどうぞよろしくお願いいたします。

[ テクニック ] 不可視シンボルエンカウント・再

2021-12-13 00:02:36

本記事は「ツクールフォーラムアドベントカレンダー Advent Calendar 2021」12月13日分の投稿記事です。

シンボルエンカウントだけど、普段は敵シンボルは見えない――採用しているゲームも少なく定まった呼び名もないようなので、「不可視シンボルエンカウント」と名付けています。

この「不可視シンボルエンカウント」は前作『天下御免!からくり屋敷』で採用し、その時も記事にしていますが、制作中の新作でも採用しているため、改めてここで解説します。

代表的な採用ゲームは大昔の『英雄伝説I』で、それを参考にしています。年がバレそう……。

ランダムエンカウントとシンボルエンカウント

RPGにおけるエンカウント方式には大きく分けて、ランダムエンカウントとシンボルエンカウントの2種類があります。

ランダムエンカウントは、歩いているうちにランダムでエンカウントが発生する方式です。

▲RPGツクールVX時代のランダムエンカウント設定

長所としては、だいたいのエンカウント回数を決められるので想定到達レベルを設定しやすい、ほどよく緊張感を持たせられるなどが挙げられます。RPGツクールシリーズのデフォルトもこのランダムエンカウントで、何よりも作りやすいのが一番の長所です。

一方で、探索中にばんばんエンカウントするのが邪魔だったり、運が悪いと1歩進んだだけでエンカウントしたり、また緊張感がある反面、目的地まであと少しのところでエンカウントした時の鬱陶しさなどが短所として挙げられ、近年はランダムエンカウントは好まれない傾向にあります。

対するシンボルエンカウントは、敵のシンボルがあらかじめ見えており、シンボルと接触することで戦闘が始まる方式です。

長所としては、何よりも戦闘するかしないかを自由に決められる点です。しかしそれは同時に短所にもなり得ます。戦闘を全て避けて進むこともできてしまうため、緊張感がなくなります。戦闘を避けることによって成長も遅れるため、想定到達レベルの設定が困難になります。

敵シンボルを多く配置したり狭くて避けにくい通路に配置したりすることで、ある程度の戦闘を強制させることはできますが、それをするとシンボルエンカウントの長所を潰してしまいます。敵シンボルに囲まれて連続戦闘を強いられたり、敵シンボルが通り過ぎるのを待たされてイライラしたり、といった短所も存在します。

不可視シンボルエンカウント

そんな両者のエンカウント方式の折衷案として、「不可視シンボルエンカウント」はいかがでしょう。

前作『天下御免!からくり屋敷』で試しに採用してみたのですが、割と意図通りの効果が得られたので、現在制作中の新作でもこの方式を採用しています。

プレイする側の感覚としてはランダムエンカウントに近いですが、敵シンボルの配置を工夫することでエンカウント頻度を調整することが可能です。

例えば、宝箱のある寄り道付近に敵シンボルを配置することで、宝箱を無視して進めば敵と遭わないが、宝箱を取ろうとすると1回エンカウントが発生する、みたいな絶妙な調整が可能になります。

一度倒したシンボルは一定時間 or マップを切り替えるまで復活しないようにしておけば、ランダムエンカウントでありがちな、ダンジョン探索中にどんどんエンカウントしてしまうといった事態も防ぐことができます。

敵シンボルは見えないため、シンボルを避けるのに神経を使うといったシンボルエンカウントでの短所もありません。

また、敵シンボルがあらかじめ見えるようになるアイテムやスキルを用意して、エンカウントを避けたい場合はそれを使うといったことも可能です。

仕様いろいろ

実装にあたっていろいろと細かい仕様は付けています。

前作『天下御免!からくり屋敷』と制作中の新作とでいくつか異なる点はありますが、概ね似たような仕様にしています。

  • 当初は敵シンボルが見えず、接触すると見えるようになる。
  • 戦闘からはボス戦を除いて100%逃げられるが、逃げた後はその敵シンボルが見えるようになって追いかけてくるので、実際にプレイヤーを操作して逃げる必要がある。
  • 逃げた直後は一定時間足止め。足止め時間を長くするスキル等も用意。
  • 一定範囲内に接近するとプレイヤーを追いかけてくるようになる。
  • 敵シンボルは初期位置からの移動範囲が決まっており、その範囲を超えては動かない。
  • プレイヤーの背後から接触された場合は確率で不意打ちとなる。
  • 逆に敵シンボルの背後から接触した場合は先制攻撃となる。
  • 倒した敵シンボルはマップを切り替えるまで復活しない。
  • アイテムやスキルで敵シンボルを最初から見えるようにできる。

実装としては自作プラグインとコモンイベントを併用しています。

敵シンボルを透明にしたり、移動範囲の設定やプレイヤーが一定範囲に接近したかどうかの判定はプラグインで行い、足止めや追いかけるなどの動作、戦闘の開始などについてはコモンイベントで行っています。

1つの敵シンボルに対してセルフスイッチA~Dをフル活用しています。

  • なし:通常時(自律移動:ランダム)
  • A:消滅中(既に倒した状態)
  • B:追跡中(自律移動:近づく、移動速度:2倍速)
  • C:停止中(逃げた直後の足止め時間)
  • D:可視状態

セルフスイッチの切り替えはプラグインで行い、セルフスイッチの状態に応じて敵シンボルのイベントページを分けています。

敵シンボルのイベント名は、$[1,2,3]という風にして、カッコ内に敵グループIDをカンマ区切りで指定しています。

指定された敵グループIDの中からランダムで、実際にエンカウントする敵グループが決まる仕組みです。

敵グループの決定はマップの切り替えの際に行われるので、逃げて同じシンボルに再度接触すると違う敵グループになっているということはありません。

まとめ

ワールドマップの場合、敵シンボルが数百体にも及ぶことになって重さが心配になりますが、画面に表示されている範囲から遠いイベントに関しては処理を行わないというRPGツクールのコアスクリプトの仕様があるため、そこまで重くはなりません。

実際に現在制作中の新作では、200体あまりの敵シンボルを配置していますが、特に重くはなっていません。

本当はプラグインを公開できればいいのですが、コモンイベントを併用するのと、細かい仕様は人によってかなり好みがあるので、紹介のみに留めておきます。

質問等はコメントなりで問い合わせていただければ、可能な限り回答します。

それでは読んでいただきありがとうございました。