開発日誌

すべての記事

[ 王国の英雄 ] [ テクニック ] [ ツクール情報 ] タイルセットと戯れる

2020-09-24 23:11:10

先日は「SAKAN - タイルセットビルダー -」をRPGツクールMZで使う方法について書いたわけですが、そもそもSAKANがMZで普通には使えないことに不満を言う人も見当たらなければ、MZ発売から1ヶ月も経つのにアップデートパッチも提供されないことが、不思議だったわけです。

でも実際に使ってみて分かった。SAKAN、恐ろしく使いづれーわ。

書き出しの際に1回ずつ保存しないといけないのはまだ許すとして、直前に保存したファイル名を覚えていてくれないので、毎回ファイル名を選ぶ必要があるのが面倒くさすぎます。一般の画像編集ソフトを使った方がはるかに楽で、パーツ素材集として以外に誰も使ってないんじゃないの? これ。

と言いつつ、「GIMP」だと画像ファイルによってはアルファチャネルの透過処理が上手くいかないこともあったりで、結局タイルセットの組み替えはSAKANで行うことに……。

あらかじめ書き出すタイルセットのファイル名を「!A1.png」とかにして先頭に来るようにしておけば、いちいちファイル名を選び直すのも幾分かは楽になります。他のタイルセットからピックアップしてくる際はドラッグで範囲指定もできるので、本当に1タイル1タイル保存していく必要もありません。

こうして出来上がったタイルセット画像は、このままだとRGBカラーで重いため、「PNGoo」を使ってインデックスカラーに圧縮しました。「GIMP」だとやはりアルファチャネルの処理が上手くいかなかったため、専用のフリーソフトを使用しました。

なんか書いてるだけでもめんどk……

▲外から直接室内に入れる

そもそも何か違和感あるなと思ったら、『小さな大冒険』の時は外観と内装が別々のマップになっているのではなく、ファミコン時代のドラクエみたいに建物の中が素通しになっていて、外と室内が繋がっているタイプのマップにしていました。

現在もこういうのが通用するのか分かりませんが、いちいちマップ移動が発生しないので、街歩きは確実にしやすくなるはずです。

お屋敷とか特別な建物はちゃんと外観を作る予定ですが、普通のお店や民家にいちいち外観を作らなくてもいいんじゃないかな? 外から室内の様子や人物が見えるので、この家はもう入ったっけ?というのも減らせるのではと思います。

しかし、それをするためには、現状の外観と内装が分かれたタイルセットは不向きです。

外観のB、C、および内装のB、CはそのままB〜Eのタイルセットに割り当てるとして、問題はAのタイル群。外観と内装で使うタイル、使わないタイルを厳選して、組み替えました。

床や壁などは先日の日誌で述べたように、MV版の方が一般庶民の家向けで汎用性があるため、主にそちらを採用しました。それとのバランスを考えると他のタイルもMV版の方が合うため、結局ほとんどMV版のタイルセットを生かすことに。

とにかくタイルセットが完成しないことにはマップもイベントも作れないので、何とか連休後半で奮闘。A5のタイルを厳選するのが大変でしたね。

というわけで完成したタイルセットを使って少しマップを組んでみたところ。

▲レイヤーを駆使して屋上を作る

▲村唯一のお店。周囲はもう少し木で飾る予定

[ テクニック ] お行儀良く寝ましょう 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でも魔法防御は採用しない予定だったのですが、いろいろスキルや装備品を考えている過程で、例えば魔法攻撃力だけを増幅させるスキルとか、「魔法の盾」みたいな装備品は魔法防御だけが上がる方が自然ではないかとか思い直したので、今は魔法防御を採用する方向で考えています。