開発日誌

すべての記事

[ テクニック ] お行儀良く寝ましょう in MZ

2020-09-22 19:45:55

RPGツクールMZのサンプルゲームである『ウェスプラウ戦記』のスタッフルームで、いかにキャラを自然にベッドに寝かせるか、ということに苦心した残骸が紹介されていました。

▲『夫婦戦争MZ』HAPPY END後の様子
※ ゲーム内には登場しません

確かに言われてみると、明らかに頭がベッドからはみ出しています。ヘッドボード(頭部分にある板)すら乗り越えていますね。逆に足元は余りすぎ。

これは何もMZに限ったことではなくMVでもそうですし、何ならVXの時もそうでした。ただVX時代はキャラのサイズが小さかったため、そこまで気にならなかったのだと思います。

しかし、一度気になってしまった以上はもう後戻りできない!

一番楽な方法は、前述の『ウェスプラウ戦記』でも採用されていたように、キャラの画像ファイルに「!」を付けて、キャラクターが6ドット上にずれて表示される仕様を無効にすることでしょう。これなら頭部は一応収まりますし、画像加工の必要もありません。

しかしこの方法の場合、寝かせる必要のあるキャラ画像全てに!なし版と!あり版の両方を用意せねばなりません。また、寝た状態から起き上がって動き出す、みたいなイベント(オープニングがその予定)を組む際に支障が出そうなので、不採用となりました。

キャラの方を変更しないとすると、後はベッドの方を加工するしかありません。

ベッドの位置をずらして縦3マス分使うようにすれば、歩行グラそのままでちゃんとベッドに収まってくれます。

しかしそうすると今度は、ベッドの頭部分に阻まれて、明らかに後ろを通れそうなのに通れなくなってしまいます(1)。

頭部分を通行可[ ○ ]にすると、ヘッドボードを踏みつけて歩けてしまうので、明らかにおかしいです(2)。

下をくぐれる[ ★ ]にすると、寝ている人の頭が枕の下に隠れてしまうため、これもおかしいです(3)。

いろいろ思案した結果、こうなりました。

まずベッドの頭部分を、下6ドットとそれより上とで別々のタイルにします。ベッドになんと4マスも使う贅沢さ!

ついでに、ベッドの間8ドット分くらいを削って短くします。削った部分が不自然にならないか心配しましたが、MZでなくMVのタイルであれば元がややぼやけているため、そんなに気にはなりませんでした。茶色い布団のベッドは、ヘッドボード部分が他より長いため、削らなくてもそのままいけました。

次にタイルセットの通行設定は、ヘッドボード部分を[ ★ ]に、頭と足部分を[ ○ ]に、中央部分を[ × ]にします。こうすることで、ベッドの前と後ろを自然に通行することができるようになります。

マップエディターでは、ヘッドボード部分をレイヤー3に、それ以外をレイヤー4に配置します。あれだけ4層もいるのか?と言っていたレイヤー機能を、最大限に使っていくスタイル。

以上で、寝ている人も、後ろを通る人も、前を通る人も、自然な形になりました。

うーん……。

キャラの頭身とか、崖のカクカクとか、タンスが壁に寄ってないとか、そんなこだわりでシステムを大改造している様を目にするたびに、プレイする側はどうせ大して気にしてないので、そんなところに労力を使わなくても……と思っていたものですが、これも似たような話じゃなかろうか。

ベッドを直したことによって、他の部分とかも気になり出したりしないかな……。

とりあえず、入口をくぐる時に、明らかに頭をぶつけてるように見えるのは気になるw

[ テクニック ] [ ツクール情報 ] RPGツクールMZでSAKANを使う

2020-09-21 18:22:44

RPGツクールMVには、専用ツールとして「SAKAN - タイルセットビルダー -」というタイルセット作成ツールが別売りであります。

MVのタイルセットを読み込んで、既存のタイルセットを組み替えたり、新たなパーツを追加したりして、新たなタイルセットを作成することのできるツールです。RPGツクールMVのメニューからも直接呼び出して使うことができました。

しかしこのSAKAN、最新版のRPGツクールMZには対応していないようで、MZのメニューから呼び出すことはできません。そもそもMZのプロジェクトファイルを開くこともできず、一見するとMZでは使えないように見えます。

が、MVとMZでタイルセットの仕様は一切変わっていないはずです。

プロジェクトファイルと言っても、中身は単に「RPGMV 1.6.2」とか「RPGMZ 1.0.2」とか、ツクールのバージョンが書いてあるだけのテキストファイルなので、どう考えてもこのファイルを起点に「data/Tilesets.json」と「img/tilesets」を読み込んでいるだけのように思えます。

▲MZの台座にSAKANの付属パーツを乗せてみた

というわけで試しにMZのプロジェクトファイルである「game.rmmzproject」をコピーし、それをMVの拡張子である「game.rpgproject」に名前変更。それをSAKANで読み込んでみたところ、問題なく動作しました。

規約上も、特にMV以外で使うなとは書いていませんし、ツクールシリーズであれば問題ないはずです。バグや不具合を突いてのセキュリティー解除行為でもないので問題ないはず。

あ、言うまでもないことですが、使用は自己責任にてお願いします。

おそらく近い将来、MZ対応のアップデートがなされるか、あるいはMZ対応版の「SAKAN MZ」がリリースされるか、どちらかだろうとは思うのですが、待っていられないので、しばらくはこの方法でタイルセットの作成をしていきたいと思います。

さて、RPGツクールMZのデフォルトのタイルセット。ぱっと見はイケてる感じがして好印象だったのですが、いざ実際にマップを作ろうと思うと、いまいち使いづらいことが多いです。

▲VX時代の阿石邸は庶民の一軒家

▲MZ時代の阿石邸は内装も豪華に

床やじゅうたんなどMVの時と比べて全体的に見栄えが良くなりましたが、こんな豪華なタイルセットは、貴族の大邸宅を作るには十分ですが、田舎の村や一般庶民の家を表現するには使いづらいです。

なので、適宜MVやバンドル版で付属してきた「MV Trinity素材集」のタイルセットを組み合わせて、独自のタイルセットを作ろうと思っていますが、正直そこからかよ!という気も……。

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] PRGツクールMZでルビを振る

2020-09-20 20:29:55

RPGツクールMZで新作を作るにあたって、早期に必要なシステムがルビ振りシステムでした。

天下御免!からくり屋敷』では、和風というコンセプトのもと、難しい固有名詞や漢字熟語が多数登場するため、独自にルビ振りのスクリプトを組んで実現していました。

今回のゲームは和風とかではないので、ルビがなくても大きな支障はないのですが、それでもやはり普段使わない語句なんかは読みにくいので、ルビはあるに超したことはありません。

というわけでルビ表示プラグインを作りました!

これを導入すると、こんな感じでテキストにルビを振ることができます。

ルビの入力は、先日のVX版での記事と同じで、{漢|かん}{字|じ}のようにルビを振りたい文字を{ }で囲んで、|の手前に漢字、後ろにルビを記述すれば、ルビ付きのテキストとして表示されるようになります。

VX版では漢字1文字につきルビ3文字までが限界でしたが、MZ版ではどうやら4文字でも大丈夫そうですね。候(そうろう)とか使うことはないと思いますが、妹(いもうと)とか狼(おおかみ)とかは使いそうです(組み合わせがヒドい)。源順(みなもとのしたごう)さえ登場させなければ問題なさそう。

このプラグインの一番のポイントは、文章の表示だけでなく、アクター名、職業名、スキル名、アイテム名、敵キャラ名、およびスキルやアイテムの説明文や、戦闘メッセージ、マップ名など、必要と思われる場所は基本的に全て対応している点です。

下は装備変更画面ですが、装備アイテム名や説明文にもちゃんとルビが反映されています。

VX版の時は、ルビ分のスペースを確保するために、テキストの1行の高さを標準の24から32に拡大しており、そのせいでほとんど全てのウィンドウのレイアウトを調整する必要がありました。これがかなり、それ以外の画面レイアウト変更と競合するため、スクリプト素材として提供できていませんでした。

しかしMZでは、1行の標準の高さが36で、デフォルトのフォントサイズが26なので、行間には10の余裕があります。このくらいあれば、何とか高さを変えずにルビを押し込めるのではないか、と思って押し込んでみたところ、ちょっと詰まっている感はあるものの、まあまあ許容範囲に収まったので、晴れてウィンドウの高さ調整をすることなくルビ振りが完成しました。

レイアウト調整が不要なため、今回はプラグインとしての提供も可能になっています。

フォントサイズや1行の高さを標準から変更する場合は、おそらくレイアウトの調整が必要になると思いますが、そこまではこのプラグインでは対応していないのであしからず。

まあよく見ると、アイコンの位置がルビを含んだ行高の中央に来てしまっているのが気になるほか、魔法名のようにルビのない語句が下に寄りすぎているように見えるところや、アイテム個数や消費MPなども微妙にズレている感じがするのが、気にはなるところですかね。

ショップ画面の購入数・売却数を指定するウィンドウ(Window_ShopNumber)のみ、×記号と個数は下に寄っているのがかなり気になったので、中央に来るように調整しました。

どうせこのあたりの画面レイアウトは、ルビとは関係なくいじる予定なので、デフォルトのルビ振りプラグインとしてはこんな感じで十分かと。

技術的には、

Window_StatusBase.prototype.isRuby = function() {
  return true;
};

という感じで、ルビに対応させるウィンドウオブジェクトでisRubyを定義して、trueを返すようにしています。falseにすればルビは付かなくなります。falseにした場合、もともとルビ付きのテキストであっても、ちゃんとルビが削れて表示されます。

標準では、所持金表示ウィンドウ、名前や数値の入力ウィンドウ、セーブファイルの選択ウィンドウと、メニューコマンド選択肢全般(タイトル画面や基本メニュー、アイテムやスキルの種別選択、最強装備や購入・売却の選択肢、オプション画面など)、およびデバッグ画面はルビ非対応にしています。「最強装備」とかにもルビを振りたいという場合は、該当ウィンドウのisRubyをtrueに変更すればOKです。

上記のショップ画面の購入個数などの表示位置調整は、

const _Window_ShopNumber_drawNumber = Window_ShopNumber.prototype.drawNumber;
Window_ShopNumber.prototype.drawNumber = function() {
  Window_ShopNumber.prototype.isRuby = function() { return false; };
  _Window_ShopNumber_drawNumber.call(this);
  Window_ShopNumber.prototype.isRuby = function() { return true; };
};

という風に、直前でルビ対応をfalseにして、個数表示後にtrueに戻しています。たぶんこれを応用すれば、前述のアイコンとか消費MP量表示とかの位置も調整できると思いますが、ここから先はご自由にどうぞ。

アラビア語などのRTLにも一応対応させたつもりですが、確認はしていません。日本語以外で使うこともないと思うので、まあいいよね。

質問やアドバイスなどはコメント欄まで、お気軽にどうぞ。プラグイン素材の利用条件についてはMITライセンスとしています。丸パクリなどでなければ基本的に利用は自由です。このサイトについての「提供素材について」の項目なども併せてご覧ください。

[ テクニック ] 魔法力と魔法防御

2020-09-19 16:50:09

RPGツクールVX時代の基本パラメーターは、物理攻撃に対しては攻撃力と防御力の2つがありますが、魔法攻撃に対しては精神力のみで、この精神力が攻撃力と防御力の両方を兼ねていました。

これがVX Aceで基本パラメーターが拡張され、魔法攻撃に対しても魔法力(魔法攻撃力)と魔法防御の2つに分かれ、それがMV、そして現在のMZにも踏襲されています。

▲VX時代のパラメーターは攻撃力・防御力・精神力・敏捷性の4つ

▲VX Ace以降、精神力が魔法力と魔法防御に分かれ運が加わり計6つに

しかし個人的には、VX時代のダメージ計算法に馴染んでいたのもありますが、例えば物理であれば、攻撃力は凄まじいがその代わり無防備とか、装甲はやたら固いが攻撃は大したことない、といった敵キャラが容易に思いつくのに対して、唱えてくる魔法は強いがこちらの魔法攻撃には弱いとか、その逆といった状況があまり思いつかず、わざわざ魔法力と魔法防御に分けずともよいのではないか、と思っていました。

実際、『夫婦戦争MZ(まさに絶体絶命)』では、魔法力が魔法攻撃と魔法防御の両方を兼ねており、魔法防御の代わりに「魅力」というパラメーターを追加しています。

ただ、このゲームでは魅力に意義がありましたが、普通のRPGで魅力のパラメーターを用意しても、あまり使い道がありません。ただでさえ運という、存在意義が微妙なパラメーターもあるのに……。

そう思って、新作RPGでも魔法防御は採用しない予定だったのですが、いろいろスキルや装備品を考えている過程で、例えば魔法攻撃力だけを増幅させるスキルとか、「魔法の盾」みたいな装備品は魔法防御だけが上がる方が自然ではないかとか思い直したので、今は魔法防御を採用する方向で考えています。

[ テクニック ] 経験値の仕様に苦悩

2020-09-18 04:34:06

昨日のExcelシートを使って必要経験値の調整をしていますが、このままだとなかなか調整が難しいですね。

RPGツクールVX Ace以降、次のレベルまでに必要な経験値量の計算式が変わり、基本値・補正値・増加度A・増加度Bという4つのパラメーターをもとに、以下の計算式でそのレベルに必要な累積経験値が求められます。

(基本値 × ((Lv - 1) ^ (0.9 + 増加度A ÷ 250)) × Lv × (Lv + 1)) ÷ (6 + Lv ^ 2) ÷ 50 ÷ 増加度B) + (Lv - 1) × 補正値

なるほど。さっぱり分からん。

特に250とか6あたりの固定値にモヤモヤとします。

それはともかく、各パラメーターに標準の30, 20, 30, 30を設定すると、レベル1→2に上がるのに必要な経験値が50、2→3が112、3→4が204……となります。

▲MZ(VX Ace以降)のデフォルト値

▲VX時代のデフォルト値

これは、VXの時の経験値算出と比べてかなり違いがあります。VXの時は基本値と増加度の2値のみで決まっていましたが、その時の標準値と比べると、レベル5〜6くらいまでの最序盤において、倍近くの経験値が必要になります。そこから急速に追いついて、レベル10〜11あたりで同じくらいの経験値量となり、そこから先はレベル20前後でVX時代の半分、レベル30を過ぎると1/3以下と、圧倒的に必要経験値量が少なくなります。

しかしこれでは、サクサクとレベルを上げたい最序盤はなかなかレベルが上がらない一方、後半になるとちょっと寄り道して戦闘数が増えただけでどんどんレベルが上がってしまい、適正レベルの調整が難しくなります。

序盤の敵の獲得経験値を増やせば、そこまで問題にはならないのですが、スライムごときに経験値4も割り振りたくありません(偏見)。最初の敵から得られる経験値は、1か2ぐらいに抑えるのが伝統というものです。そうでなくても、レベル5ぐらいで一気に獲得経験値が20を超えてしまうのは、インフレが過ぎます。その一方で、レベル20前後になっても6ぐらいずつしか1体あたりの経験値が増えていかないので、中盤以降ちょっとゆっくり進むだけで、あっという間にレベルが上がっていってしまいます。

VX時代の計算法でも、基本値をデフォルトの30にしていると状況は同じような感じですが、基本値を最低の10近辺にしてやると、ちょうどいい感じの調整になります。

▲VX時代の計算法で『小さな大冒険』の設定値

▲VX Ace以降の計算法で基本値を最低に設定

上の左は『小さな大冒険』の時の主人公リュックの設定値で、基本値を11、増加度を38にしています。これだと、最序盤は1体あたり1〜2の経験値ですぐレベルが上がり、経験値の上がり幅も1〜2前後で済んでいます。その後レベル10あたりから必要経験値量がどんどん増加していき、弱い敵ばかりを相手にしていてはなかなかレベルが上がらないようになっています。そしてラスボスを倒す想定のレベル35前後で1体あたりの適正経験値はMAXに達します。それ以降は想定している戦闘回数が多すぎるため、1体あたりの経験値が下がっていっている感じですが、このあたりはほとんどオマケみたいなものなので、あまり深く考えなくてもいいかと。

『小さな大冒険』の時はここまでちゃんと計算していなかったので、当初は1体あたりの経験値が少なく、けっこうレベル上げが必要となっていました。何度かバージョンアップを経て獲得経験値を増やした結果、上に近い調整結果となっています。

翻って、現行の経験値算出法。

基本値を最低の10にして、補正値は単に足しているだけなので0にしてやると、序盤の必要経験値は抑えられますが、逆に増加度を最高の50にしても、中盤以降ほとんど1体あたりの経験値が変わりません。基本値を上げると変わってきますが、そうすると最序盤の経験値にダイレクトに影響するため、動かしづらいです。

中盤以降の必要戦闘回数がちょっと多すぎる気はしていますが、そこを変えてもまだまだ足りません。

おそらく固定値になっている250とか6とか50とかを変えてやると、もうちょっとマシな上がり幅になりそうな気はしますが、なにぶん計算式が複雑なので、値を大きくすればいいのか小さくすればいいのかすらよく分かりませんw

皆さん、どうされているのでしょうか?