開発日誌

すべての記事

[ ゲームリリース情報 ] [ 天下御免!からくり屋敷 ] [ サイト情報 ] 『天下御免!からくり屋敷』久々のアップデート

2023-08-10 01:58:20

和風探索RPG『天下御免!からくり屋敷』をバージョン1.2.8にアップデートしました。

ダウンロードページからダウンロードをお願いします。

実に5年ぶりの更新ですね。新要素があるわけではなく、バグ修正やバランス調整が中心となります。

5年前の記事で、致命的な不具合がない限りは最後の更新だと宣言していましたが、致命的な不具合が見つかったので更新することになりました。

長年PRしてきた甲斐あって、みなみよつばさんによる『天下御免!からくり屋敷』の実況プレイがアップされています。

待望の実況プレイ動画なので、感動もひとしお。

ですが、実況動画を見ていたら、途中のイベントで「平賀源内」の名前がなぜか「兵具屋」になっているという謎のバグを発見……!

慌てて調べてみたら、兵具屋の女性店員での売却イベントの際に、名前の代入をミスって起きる不具合でした。他の売却イベントでは大丈夫だったので、ピンポイントに踏み抜かれたバグ!

このままだと終盤の良いところで「兵具屋」を連呼してワケの分からないことになってしまいます。これは間違いなく致命的……!

現状の『天下御免!からくり屋敷』のプロジェクトファイルは続編の歴史編を途中まで作ってしまっていたのですが、幸い歴史編の制作に取りかかる前のプロジェクトファイルは残してあったので、それに修正を加えることにしました。

これ以外にも、中ボスの牛頭馬頭の体力が本来の10分の1になっているというミスをはじめ、いくつか細かいバグはありました。装備品や方術の効果も歴史編の制作中に一部調整したりしていました。これらの修正点は都度メモってはいたので、それをもとに旧プロジェクトファイルを修正。

いくつか、メモには書いてないけど修正されていたようなところもあって、本当に修正しきれているのか怪しいところもありますが、まあこれでいいだろうw

本作『天下御免!からくり屋敷』。

主人公はオッサンで悪人顔ですが、ネタの詰まった台詞の数々や、史実を巧みにアレンジした設定や台詞、和風で豊富なアイテムや敵キャラ、そして時々流れる歴史解説でお勉強にもなるという、本当に楽しい作品です。ぜひ実況動画を視聴&実際にプレイしてみてください!

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] ショップでの利用金額を取得

2023-03-23 21:25:18

お店での購入金額と売却金額をそれぞれ指定した変数に取得するプラグインを作成しました。

RPGツクールMV/MZ、どちらにも対応しています。

イベントコマンドの「ショップの処理」で、購入した金額および売却した金額をそれぞれ指定した変数に格納することができます。

例えば、購入金額が0だった場合は、何も購入していないことになります。

購入金額が0より大きいか否かで分岐することによって、購入していたら「毎度ありがとうございます」、何も購入していなければ「買わないなら消えろ!」みたいに、購入の有無でメッセージを変えることができます。

購入金額が一定以上で特殊なメッセージを出したり、イベントを発生させたりすることもできます。

購入か売却かでメッセージを変更することもできます。

購入金額を別の変数に加算していくことで、累積の利用金額によってイベントを起こすことも可能です。

購入のみのショップであれば、前後の所持金を比較することで利用金額を算出することができますが、売却も可能なショップだと、前後の比較だけでは正しい利用金額が割り出せないので、このプラグインが必要になります。

変数に格納されるのは、直前の「ショップの処理」で変動した金額のみです。「ショップの処理」実行時に、購入金額と売却金額の変数は0にリセットされます。累積の利用金額を出したい場合は、別の変数を作って加算してやる必要があります。

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

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 「盗む」スキルの実装

2023-03-16 22:28:14

敵の持っているアイテムを奪うスキル、いわゆる「盗む」スキルを実装できるプラグインを作成しました。

RPGツクールMV/MZ、どちらにも対応しています。

いわゆる「盗む」のスキルは、盗賊職の花形スキルとして数多くのRPGで採用されていますが、ツクールシリーズには標準では用意されていません。

既存のプラグインでより高機能なものもありましたが、もっと単純な設定で動くものが欲しかったので自作しました。

「盗む」ステートの作成

まず事前準備として、「盗む」が成功した状態を表すステートを1つ作成します。

このステートはダミーステートなので、名前以外の各種設定やこの状態になった時のメッセージなどは、設定しなくて構いません。むしろ行動制約やアイコンなど、余計な設定が付与されないように気を付けましょう。

そしてプラグインパラメータの「盗む成功ステート」で、この作成したステートを指定します。

このステートの付加をもって、「盗む」が成功したか否かを判定する仕組みとなっています。

「盗む」スキルの作成

次に「盗む」スキルを作成します。

スキルの使用効果で、先ほど作成した「盗む成功ステート」を付加するように設定します。

「ステート付加」の確率を調整することで、「盗む」スキルの基本成功率を設定することができます。

スキルのメッセージやアニメーションは、敵からアイテムを盗もうと狙っている時のものを設定します。「盗む」が成功/失敗した時のメッセージやアニメーションは、別で設定するようになっています。

また、敵キャラの特徴の「ステート有効度」を設定することで、敵キャラごとに「盗む」の成功しやすさを調整することができます。

なお、本プラグインで実装できる「盗む」スキルはアクター専用であり、敵がプレイヤーのアイテムを盗むような仕様には対応していません。

盗めるアイテムの設定

盗んだ時に手に入れるアイテムは、基本的に敵キャラのドロップアイテムがそのまま適用されます。

既存の「盗む」プラグインは、盗めるアイテムを別途メモ欄で指定する方式だったため、ドロップアイテムの設定をそのまま利用できるものとして開発しました。

プラグインパラメータの「盗めるアイテム」で、盗む対象となるドロップアイテムを指定できます。

「ドロップアイテム1~3のみ」を選ぶと、それぞれ指定したドロップアイテムのみが盗めるアイテムとなります。例えば「ドロップアイテム2のみ」を指定した時に、敵キャラのドロップアイテム2が設定されていなかった場合、その敵キャラは何も盗めるアイテムを持っていないことになります。

「ドロップアイテムの出現率依存」を選ぶと、複数のドロップアイテムの中から、出現率によってアイテムが決まります。例えば、アイテムAの出現率が1/2、アイテムBが1/4、アイテムCが1/8だった場合、A:B:C=4:2:1の割合、すなわちアイテムAが4/7の確率、アイテムBが2/7、アイテムCが1/7の確率で、それぞれ盗んだ時に手に入ります。

また、プラグインパラメータの「再度盗めるかどうか」をONにすると、同じ相手から何度でも盗むことができます。OFFにすると、一度盗んだ相手からは盗めなくなり、倒した時にアイテムもドロップしなくなります。

メッセージとアニメーション

プラグインパラメータで、以下のメッセージとアニメーションをそれぞれ指定できます。

  • 「盗む」が成功した時
  • 「盗む」が失敗した時
  • 相手が盗めるアイテムを何も持っていない時
  • 相手から既にアイテムを盗んでいてこれ以上盗めない時

メッセージでは、%1で自分のアクター名、%2で相手の敵キャラ名が表示できます。盗む成功時のメッセージでは、これに加えて%3で盗んだアイテム名を表示することができます。

相手から既にアイテムを盗み済みの判定は、「再度盗めるかどうか」がOFFの場合のみ有効です。

「盗めるアイテムなし」と「既に盗み済み」の判定は、「盗む」の成功判定より先に行われます。盗めるアイテムがないのに、何度も「盗む」にトライしてしまう、という心配はありません。

まとめ

いわゆる「盗む」のスキルは、かなり仕組みがそれ専用な上に、成功確率や盗めるアイテムといった細かい仕様が千差万別なため、なかなかツクールの標準機能として組み込むのが難しいと思います。

今回は個人的に標準的な「盗む」スキルとして、以下のような仕様で作りました。

  • 味方専用
  • 成功率はステートの付与率で判定
  • 盗めるアイテムはドロップアイテムに準拠
  • 何度でも盗めるかどうかはパラメータで変更可

したがって、以下のような仕様は、本プラグインでは対応していません。

  • 敵がプレイヤーのアイテムを盗む
  • 成功率に運以外のパラメータを関与させる
  • ドロップアイテムとは別で盗めるアイテムを設定

成功率などはプログラムの改造でできると思いますので、細かい仕様変更はご自身でお願いします。変更が大がかりでなく、汎用的だと思える要望であれば、修正も可能ですので、ご要望をお寄せください。

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

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

2022-12-31 20:43:02

ついこないだ2022年が始まったばかりだと思っていたのに、もう2022年が終わるということなので、大晦日恒例の総括の時間がやって参りました。

2022年は前年に引き続き、新作の王道長編RPGの制作に明け暮れた1年でした。本当は今年の秋頃には完成しているはずだったのですが、途中いろいろと難航したため思ったようにはいかず……。今のところは来年の秋頃完成のスケジュールとなっています。

制作状況等についてはtwitterの方でこまめに紹介していますので、ぜひフォローして見ていただけるとありがたいです。

今年の大きなイベントとしては、『夫婦戦争MZ(まさに絶体絶命)』のスマホアプリ化でしょう。

もともとブラウザゲームとして公開していましたが、ぬか漬けパリピマン様にスマホアプリ化をしていただきました。

iPhone(iOS)版Android版の両方があります。

試行錯誤によってハッピーエンドを目指す、パズル的な要素を持ったミニゲームです。気になった方は、App Store、またはGoogle Playストアで、今すぐ「夫婦戦争MZ」で検索!

RPGツクールMV/MZ用のプラグインは引き続き、デフォルトではちょっと不便な仕様を改善するようなプラグインをいろいろと作ってきました。

反響が大きかったのは「行動パターン複数条件プラグイン」でしょうか。

ダミースキルを用いて、敵キャラの行動パターンに複数の条件を指定できるようにするプラグインで、応用範囲の広さやスマートな指定方法という点でも、会心のプラグインとなっています。

このダミースキルによる設定方法は「複数回行動条件設定プラグイン2」でも活用しています。

このほか、数値入力ウィンドウにキャンセルボタンを追加したり、入力可能な数値の最小値・最大値を設定できる「数値入力ウィンドウ強化プラグイン」や、アイテムやスキルの使用可否をスイッチで制御できる「使用可否スイッチ制御プラグイン」なども、反響の大きいプラグインでした。

12月には再び「ツクールアドベントカレンダー Advent Calendar 2022」に参加し、「変数」に関する記事を2本投稿しました。

変数の概念は、ベテランのツクラーやプログラミングを嗜む人にとってはお馴染みのものですが、慣れていない人にとってはなかなか理解しづらい概念のようで、役に立ったという声も複数いただいております。

アドベントカレンダーにまだ空きがあれば後半でもう1本書く予定でしたが、いつ頃にしようかと悩んでいるうちに全部埋まってしまったので、残りの1本は年明けに書くことにします。ホントかな。

2022年は、ツクール界にも変化の大きい1年でした。

まずは2月15日の「ツクールの日」に、新しいツクールシリーズである「RPG Maker Unite」が発表されるとともに、今後は「RPGツクール」のブランド名称を、英語圏でのブランド名称である「RPG Maker」に統一するという発表が、公式からなされました

RPGツクールMZが出てからわずか2年で次シリーズの発表に驚かされましたが、どうやらこのUniteは、ゲームエンジンであるUnity上で動作する開発ツールのようで、既存のMVやMZの系譜とは異なるシリーズになるようです。MZ系列のシリーズは引き続き開発が行われるという公式アナウンスもある通り、ツクールフェスやMV TrinityのようなCS版ツクールと同様の扱いになるものと見ています。当初は2022年中に発売とされていましたが、2023年に延期となった模様です。

このほか、ツクールシリーズとは完全に別物ですが、10月に「RPG Developer Bakin」が発売され、話題を集めました。

ツクールが基本的に2Dグラフィックなのに対して、このBakinは3Dグラフィックであり、自由度の高いレイアウトや美麗なエフェクトなどで目を惹きました。

私も好奇心に抗えず、アーリーアクセス版を発売当日に買って触ってみましたが、そもそも3Dというところの取っ付きにくさや、さすがにちょっと重いという点、また細かい部分で何かと融通が利かないという点が慣れずに、少し触ってみただけで終わっています。3D世界を冒険するような作品は作ってみたいと思っているので、もう少しノウハウが一般化した段階で、改めて触ってみたいと思います。

また自分は使ったことありませんが、ウディタこと「WOLF RPGエディター」も11月に大規模アップデートがあり、RPG制作は多彩な環境が出てきた1年でした。

その一方で、年末になって「ゲームアツマールのサービス終了」という残念なニュースも飛び込んできました。

他にもフリーゲームの公開サイトやブラウザゲームとしてプレイできるサイトは複数ありますが、その中でも「ゲームアツマール」は、ツクールから直接アップロードする機能もあるなど、ツクールシリーズとは非常に親和性の高いサービスでもありました。ニコニコ動画のコンテンツの一つであるため、フリーゲームを探してプレイしようという人以外にもリーチできる、唯一と言ってもいいサービスでした。また、手軽にコメントできるのでフィードバックがもらいやすかったり、審査等もないので即座にアップデートが反映ができたり、何より他に比べてサイトの見映えが良いなど、他より図抜けた存在だと思っていましたが、そんな大手でも運営は赤字だったとのことなので、フリーゲームを取り巻く環境はいっそう厳しくなっていくものと思われます。

というわけで、最後はちょっと暗い話になってしまいましたが、今後もフリーゲームを盛り立てるために、プラグインやテクニックの紹介、そして楽しんでもらえる作品を作っていきたいと思います。

2023年も引き続きどうぞよろしくお願いいたします。

[ テクニック ] 変数を使いこなそう(2) 剰余の活用法

2022-12-08 00:00:43

本記事は「ツクールアドベントカレンダー Advent Calendar 2022」12月8日分の投稿記事です。

変数を使いこなそう(1) ゲームデータの活用法」の続編でもあります。こちらも併せてご覧ください。

変数の計算

前回の記事では、RPGツクールにおける「変数」の概念と、主に「オペランド」の「ゲームデータ」で扱える値の活用法を解説しました。

ゲームデータでは、ゲーム内に登場する値を変数に代入する使い方が中心でしたが、「変数の操作」では代入だけでなく数値計算も可能です。

「操作」のところには「代入」以外に、「加算」(足し算+)、「減算」(引き算-)、「積算」(掛け算×)、「除算」(割り算÷)と、基本的な四則演算ができるようになっています。

ところで、その最後に「剰余」というあまり馴染みのない項目があります。

これは何でしょう。

剰余とは

「剰余」とは「じょうよ」と読み、小学校の算数でやった、割り算の「あまり」のことです。

「37÷3=12、あまり1」の「1」を求める計算ですね。

37が格納されている変数に対して、定数3で剰余の操作をすると、変数には1が入ります。

ツクールでは%の記号で表されています。他のシステムやプログラム言語では\modで表されることも多いです。

剰余の概念自体はそんなに難しいものではありません。

問題は、こんなの何に使うんだ?ってことですよね。

今回は剰余の活用法について解説します。

剰余の活用法

プログラムを嗜む人はご存じかもしれませんが、剰余は純粋に余りを求めるというよりは、余りを応用した計算に使うことが多いです。

以下、代表的な使い方を解説します。

3の倍数でアホになる

剰余の最も多い使い方は、Nの倍数かどうかの判別です。

ある数をNで割って、余りが0ならば、ある数はNの倍数です。

Nが2であれば、2の倍数かどうか、すなわち偶数か奇数かの判定となります。

例えば、1から100までの数字をカウントして、3の倍数の時だけアホになる、懐かしいイベントを作ってみましょう。

◆変数の操作:#0001 変数A = 1
◆ループ
 ◆変数の操作:#0002 変数B = 変数A
 ◆変数の操作:#0002 変数B %= 3
 ◆条件分岐:変数B = 0
  ◆スイッチの操作:#0001 アホ = ON
 :それ以外のとき
  ◆スイッチの操作:#0001 アホ = OFF
 :分岐終了
 ◆条件分岐:アホがON
  ◆SEの演奏:Crow (90, 130, 0)
  ◆文章:なし. SF_Monster(3), ウィンドウ, 下
  :  :\V[1]\.\.\^
 :それ以外のとき
  ◆文章:なし. Evil(3), ウィンドウ, 下
  :  :\V[1]\.\.\^
 :分岐終了
 ◆条件分岐:変数A >= 100
  ◆ループの中断
 :それ以外のとき
  ◆変数の操作:#0001 変数A += 1
 :分岐終了
:以上繰り返し

3を含むとアホになる

さて、本家は3の倍数だけじゃなくて、3を含む数字(13や35など)もアホになる対象でした。

実際のプログラムであれば、いったん数字を文字列に変換して、3の文字を含むかどうかで判定するのが一般的かと思われますが、ツクールのイベントコマンドではそこまで器用なことはできません。

ではどうするのかというと、それぞれの桁で分けて、一の位が3かどうか、十の位が3かどうかで判定します。

カウントする数字は1から100までですが、100は明らかに3を含まないので、十の位までで十分です。

先ほどの「スイッチの操作:アホ = OFF」の直後に以下の判定を入れ込みます。

  ◆変数の操作:#0002 変数B = 変数A
  ◆変数の操作:#0002 変数B %= 10
  ◆条件分岐:変数B = 3
   ◆スイッチの操作:#0001 アホ = ON
  :それ以外のとき
   ◆変数の操作:#0002 変数B = 変数A
   ◆変数の操作:#0002 変数B /= 10
   ◆条件分岐:変数B = 3
    ◆スイッチの操作:#0001 アホ = ON
   :分岐終了
  :分岐終了

一の位を求めるのに剰余を使いました。すなわち、10で割った余りが一の位の数字になります。これが3かどうかを確かめれば、一の位が3かどうかを判別できます。

十の位は除算を使います。ツクールでは除算の場合、小数点以下は切り捨てになるので、10で割った答えが3かどうかを確かめれば、十の位が3かどうかを判別できます。

今回は1~100だったので、一の位と十の位だけで足りましたが、これが1~1000だった場合は、十の位はもう一工夫必要になります。

1~1000の場合、一の位は変わらず10の剰余が3かどうかで判別します。百の位は100で除算して3かどうかで判別します。十の位は、まず10で除算して、その結果からさらに10の剰余を求めて、3かどうかで判別します。

桁数が増えるほど計算過程が増えていくので、桁数が5桁とかを超えるようであれば、スクリプトを使って判定した方が楽だと思います。

秒数を時分秒に変換

前述のように、剰余の計算は数値の一部を取り出すのに使えます。それの応用例をもう一つ見てみましょう。

変数の操作では「ゲームデータ」の「その他」から「プレイ時間」を取得することができます。

ただし、このプレイ時間は秒数で返されるため、ここから○時間○分○秒に変換するためには、除算と剰余を駆使する必要があります。

具体的には、秒はプレイ秒数を60で割った余り(剰余)。時間はプレイ秒数を3600(60分×60秒)で除算した結果。そして分がやや複雑で、まずプレイ秒数を60で除算して、さらにその結果から60の剰余を求めます。前述の1~1000までカウントする場合の、十の位を求めるのに似ていますね。

◆変数の操作:#0021 プレイ秒数 = プレイ時間
◆変数の操作:#0022 時間 = プレイ秒数
◆変数の操作:#0022 時間 /= 3600
◆変数の操作:#0023 分 = プレイ秒数
◆変数の操作:#0023 分 /= 60
◆変数の操作:#0023 分 %= 60
◆変数の操作:#0024 秒 = プレイ秒数
◆変数の操作:#0024 秒 %= 60
◆文章:あなたのプレイ時間は \V[22]時間 \V[23]分 \V[24]秒です。

トランプの札番号

カジノシステムやミニゲームなどでトランプを扱うことも多いでしょう。

トランプの札にはマーク(スペード、ハート、ダイヤ、クラブ)と数(A、2……10、J、Q、K)の2種類の要素がありますが、これを別々で管理するのは効率が悪いです。

トランプの札が何かを表すのに1~52の連番として扱い、1~13をスペードのA~K、14~26をハートのA~K、27~39をダイヤ、40~52をクラブとして扱うと、1つの値でマークと数の両方を表せるので効率が良いです。

この時、連番になった札番号からマークと数を取得するのに、除算と剰余が活躍します。

まず札番号から1を引きます。

マークは1引いた札番号を13で除算し、0ならスペード、1ならハート、2ならダイヤ、3ならクラブです。

そして数は1引いた札番号から13の剰余を求めます。これだと0~12になってしまうので、1加算して1~13を求めます。

◆変数の操作:#0032 マーク = 札番号
◆変数の操作:#0032 マーク -= 1
◆変数の操作:#0032 マーク /= 13
◆変数の操作:#0033 数 = 札番号
◆変数の操作:#0033 数 -= 1
◆変数の操作:#0033 数 %= 13
◆変数の操作:#0033 数 += 1

以上でトランプの札を効率的に管理することができるでしょう。

循環する数値

0、1、2とカウントして、次はまた0に戻るような、循環する数値のカウントをしたい場合があります。

例えば曜日を表す変数は、0=月曜日、1=火曜日……と加算していき、6=日曜日の次はまた0=月曜日に戻ります。

例えば3種類の台詞を順番に話すキャラを作る場合、台詞番号の変数を1つ用意して、その番号によって台詞を分岐させます。

そして変数が2だったら0を代入し、それ以外なら1加算します。

◆条件分岐:台詞番号 = 0
 ◆文章:ここは最初の村よ。
:分岐終了
◆条件分岐:台詞番号 = 1
 ◆文章:サンプルのために作られた村なの。
:分岐終了
◆条件分岐:台詞番号 = 2
 ◆文章:だから何もない村なのよ。
:分岐終了
◆条件分岐:台詞番号 = 2
 ◆変数の操作:台詞番号 = 0
:それ以外のとき
 ◆変数の操作:台詞番号 += 1
:分岐終了

生真面目に実装するとこうなりますが、剰余を使うことで、よりシンプルに実装できます。

……(台詞の分岐部分は同様)
◆変数の操作:台詞番号 += 1
◆変数の操作:台詞番号 %= 3

何をしているかというと、変数に1を加算して、さらに3の剰余を求めています。

変数の元の値が2だった時、1加算されて3になり、3の剰余を求めることで0になります。元の値が0や1だった時は、3の剰余をとっても変わらず、そのまま1や2になります。

番号が0から始まる場合は、このように1加算して、剰余を求めます。1~3のように番号を1から始めたい場合は、剰余を求めてから1加算すればOKです。

いにしえのプログラミングでは、条件分岐(IF文)のコストが非常に重かったため、このようなテクニックがよく使われていました。

最近ではそのコストはほぼ無視できるので、素直に条件分岐で実装した方が断然分かりやすいため、剰余を使った方法は推奨されません。

ただ、ツクールの条件分岐は無駄に行数を使って長くなりがちなため、この方法を使えば短くすることができます。MZの最新バージョン1.6.0では条件分岐等の折り畳みができるようになったので、あまり気にならないかもしれませんが。

まとめ

以上、今回は「変数の操作」でできる「剰余」について、活用法などを解説してきました。

そもそも剰余が何なのか知らなかった方も、余りが求められて何が嬉しいんだという方も、剰余の使い方がお分かりいただけたのではないかと思います。

いずれも純粋に余りを求めるのではない、応用的な使い方だったので、知らないとなかなか思いつけない利用法だと思います。この記事を読んで、剰余の便利さを知っていただければ幸いです。

2回にわたってRPGツクールの「変数」について、「ゲームデータ」と「剰余」の活用法を解説してきました。もう一つぐらい変数について書けそうなので、第3回も近いうちに解説記事を上げると思います。そちらもどうぞお楽しみに。