開発日誌

テクニック

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 重要語句の色を変える

2020-07-21 01:19:33

メッセージの中でキーワードとなる言葉――人名やアイテム名などは、色を変えて目立たせてやると、プレイヤーが見落としにくくなるので親切です。

特殊文字の\C[n]で文字色の変更ができるので、キーワードの手前で特定の色に変更し、その後で元の色に戻してやれば、標準でも特に難なく実現可能です。

しかし、何番が何色なのか分からなくなったり、後で色を戻し忘れたりで、実際にやるとなるとけっこう面倒くさいし、間違えやすいです。

というわけで、特殊文字を拡張して、重要語句の文字色変更を簡略化するスクリプトを作りました。

相変わらずRPGツクールVX用ですが、VX Aceでも多少の修正で動くようになるはずです。やっていることは単純なので、MVでも同様にプログラムを組めば動作すると思います。

「文章の表示」の中で、 <●テキスト> のようにテキストを <● > で囲むと、その部分の文字色を手軽に変更することが可能です。

●には語句の種類に合わせてアルファベット1文字が入り、以下に対応させています。

<N > 人名
<P > 地名
<E > モンスター名
<I > アイテム名
<S > スキル名
<K > その他の重要語句(なんでKにしたのかは忘れた)

これによって、人名は赤色、アイテム名は黄色のように、タイプに応じて色を変えることができるので、よりいっそう分かりやすくできます。

色はスクリプトの中の\x01[3]などの数字を変えればOKです。また同様にすれば、新たな語句タイプを設定することも可能です。

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

[ 天下御免!からくり屋敷 ] [ テクニック ] ツクールでルビを振る

2020-07-19 23:16:37

RPGツクールMZ』が発表されてから、その新情報関連と制作関連の記事とで、週2本ペースで記事を公開しております。年2本だった時もあったのに、奇跡じゃなかろうか。

もっと記事を出していきたいのですが、制作過程の記事はあまりネタバレしすぎるのもどうかという説があります。そこで、これからは技術的な話題も積極的に取り扱っていこうと思います。

さて、『天下御免!からくり屋敷』では、スクリプトを組んで漢字にルビを振っています。詳しくは「RubyでRubyを…」の記事をご覧ください。

ルビ振りを可能にするスクリプト素材はいくつかありましたが、画面構成全体や文字表示など根幹の部分に関わってくるため、自力で実装したという経緯があります。そういう経緯があるため、私もスクリプト素材という形で提供はしていませんでした。

ただ、どのようにルビ振りを実装しているのか、注意する点や苦労した点はどんなところかを公開して、制作者の方の参考にしていただければと思います。RPGツクールVXでの実装ですが、基本的な考え方は変わらないはずです。

最初に大変なのは、上でも書いた通り、画面構成全体をいじる必要がある点。

ルビの分の高さを確保する必要があるため、テキストの1行の高さをデフォルトの24から32に拡大しています。

通常の文章表示では、4行あったメッセージウィンドウを3行にすれば、ちょうどいい感じに収まります。ただし戦闘メッセージの場合は、2行ある物理スキルの発動メッセージ→会心の一撃→敵のダメージ→敵のステータス変化のように、最大で5行を要するケースがあるので、既に3行表示されていたら最後の1行を消して上書きする、といった処理を加える必要があります。VX Aceからはメッセージログ形式になったので、意識する必要はないかもしれませんが。

また、メッセージ表示以外にも、アイテムやスキル、敵の選択ウィンドウやステータスウィンドウ、店での購入ウィンドウなど、ほとんど全てのウィンドウのレイアウトを調整する必要があります。ウィンドウレイアウトはスクリプトやプラグインでデフォルトから変えている場合も多いと思いますが、まずルビには対応していないので、自力で調整しなければなりません。

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

文章の表示だけでなく、アクター名、職業名、スキル名、アイテム名、敵キャラ名、およびスキルやアイテムの説明文や、使用時メッセージなどでも、有効にしています。

表示部分のスクリプトはこんな感じ。

1文字ずつ取り出して、漢字部分とルビ部分に分けて出力しています。

ここで問題は、ルビが多いとテキストボックスの横幅に収まりきらない点。

文章の表示のテキストボックスは、横幅を超えると勝手に改行されてしまいます。そこで、ダミーのアクターをいくつか作って、長いルビ付きの言葉をアクター名に設定し、文章の表示の中で\N[n]として用いています。こうすれば、ルビが多くても横幅に収めることができます。

ただし、アクター名の入力欄にも文字数制限があるので、ルビの量が多いとダミーのアクターがいくつも必要になります。1文字微妙にオーバーする!といった苦労は日常茶飯事で、このあたりの調整は都度やる形になるので、テキストの入力は通常時よりもかなり時間がかかります。これが、制作がなかなか進まない原因でもあります(ということにしておこう)。

また、ルビは漢字1字につき3文字までが限度で、4文字以上だと文字が潰れてしまってさすがに読めません。

だいたいは3文字に収まるのですが、隼(はやぶさ)とか亥(いのしし)とか、作っているとけっこう4文字のルビが登場します。こういう場合は、{亥の|いのしし  }{足|た}{袋|び}のように、次の文字と組み合わせています。

ただ、鉞(まさかり)はこれ1文字だけしかないので、前後に半角スペースを入れて{ 鉞 |まさかり}としました。また、狼男(おおかみおとこ)も漢字2文字に対してルビ7文字なので、{狼 |おおかみ}{男|おとこ}と間に半角スペースを補っています。一番悩んだのが、石川五右衛門の方術の金鯱(きんのしゃちほこ)で、仕方ないので間に全角スペースを挟んで{金 鯱|きんのしゃちほこ}としました。今後、源順(みなもとのしたごう)とかを登場させることにならないか不安。

最後に悩ましい点としては、どこまでルビを振ればいいのかという点。

さすがにフリーゲームを小学生とかがプレイするとも思えないので、小学校レベルの漢字にまでルビを振る必要はないと思います。

とは言え、漢字自体は小学校で習うけど、熟語としてはあまり馴染みがなかったりすると、読みが自信ない場合もあり得ます。

実際、実況プレイ動画を見ていても、普段使わないような語句の読みで間違っていたり、詰まっているのをよく見かけます。

初めは固有名詞や常用漢字以外のものに限ってルビを振っていましたが、だんだんとルビ振りの基準レベルを下げていき、最近では「見る」「思う」とかのレベルでも、たまにルビを振ったりしています。そこまでするならいっそ全部に振ってしまえば、悩む必要もなくなるとは思うのですが、それはそれで作業が大変すぎるので、難しいところです。

ルビは日本語だけの特殊事情なため、海外展開にシフトしつつある現状のツクール事情では、今後もデフォルト機能として組み込まれることはないと思いますが、格調高い言葉を使いつつも、難しくしすぎないというバランスを取るのに、ルビ振りのシステムは欠かせないものだろうと思います。

最初に述べたように、ルビ振りシステムは画面全体の構成などに関わるため、なかなかプラグインとして素材化することが難しいですが、今後も必須レベルで組み込んでいきたいと思います。

[ 天下御免!からくり屋敷 ] [ テクニック ] [ ツクール情報 ] VX 128MBの壁

2020-06-21 17:43:40

XP以降のRPGツクールにはゲームデータの暗号化圧縮アーカイブを作成する機能がありますが、一定サイズを超えるとエラーになるという話は聞いていました。そこまで大規模なゲームを作るつもりもないので、自分には無関係だと思っていたのですが、最近になってそのサイズが圧縮後で「128MB」だという情報を目にして、意外と小さいな……と思ったのが事の始まりです。

念のため、ゲームデータで一番容量の大きいBGMフォルダーのサイズを調べてみたら、既に125MB。もちろんこれ以外に画像ファイルなども多数あるので、ゆうに128MBを超えてしまいます。昔は、BGMファイル少なすぎwとか言われたものですが、歴史編に入って雰囲気を変えようとBGMをばんばん追加していたら、いつの間にか容量を食っていたようです。

試しにアーカイブを作ってみたところ、ちょうど128MBのファイルが生成されました。お、ギリギリセーフ?と思って解凍すると、果たして途中でエラーに……。ちょうど128MBのファイルが生成されたというよりも、サイズが128MBで強制的に削られてしまっているようですね。

回避方法はあるようですが、あまり正攻法でない手段をとるのは好きではありません。まずは容量を抑える方針で行こうと、まだ使用していないBGMファイルをいくつか削除してみました。が、いくつか削除しただけでは残念ながら、128MBまでに抑えることはできませんでした。また、たとえ現時点でぎりぎり抑えられたとしても、歴史編はまだまだ作る予定です。そうすると顔グラやキャラグラなどの画像ファイルも増えていくので、いずれ容量オーバーになることは避けられません。大規模なゲームを作るつもりはないと言いながら、プレイ時間は75時間を超える作品になってきているので、十分に大規模なゲームでした。

というわけで、素直に回避策をとることにしました。具体的な方法は、半生様の「大容量プロジェクトの圧縮方法」を参考にさせていただきました。要は、暗号化の途中で生成された暗号化アーカイブファイル(Game.rgss2a)を待避しておいて、それとAudioフォルダーやGame.exe、Game.iniと一緒に、別途zipで圧縮すればOKですね。

プレイヤーに変な負担をかけたくなかったので回避策には消極的だったのですが、よく考えてみたら、今もアーカイブのexeファイルそのままではなく、それをさらにzip化(Readme.txtなどはアーカイブの外に置きたいため)しているので、プレイヤーにとっては二度の解凍作業が必要になっているんですよね。一方、この圧縮方法であれば一回の解凍で済むので、むしろこっちの方がプレイヤーにとっては楽。ということで、心置きなくこの方法をとることにします。

まあ問題は、それがいったいいつになるのか、ということなんですけどね。

[ 天下御免!からくり屋敷 ] [ テクニック ] 崖の改修工事

2020-06-14 23:45:14

RPGツクールVXには4方向の通行設定が存在しないため、その機能を使う崖のマップチップもデフォルトでは用意されていません。ですが、私の作品では『小さな大冒険』の時から山道などの段差のあるマップを実現しており、『天下御免!からくり屋敷』でも多用しています。

段差の実現方法については、プロジェクトファイルを公開しているので、そちらを参照していただくとして、そうした技術面とは別に、崖部分を表すマップチップをTile Eに設定しています。

崖部分のマップチップですが、これまでは全てのパターンを網羅するために48チップ、さらに通行可と通行不可の2種類を用意して、全部で96チップを使っていました。しかし、実際にはこんなにパターンいらないので、必要なチップだけに絞ってスリム化を図ってみたところ、約1/4に量を減らすことができました。

既存のマップの崖を改修するという重労働を、1日かけて実施しました。歴史編になって段差のあるマップを作りすぎです……。通行可と通行不可をミスるといけないので、後で入念にチェックしておかないと。って、それが大変な気もしますが。

しかしその甲斐あって、残りスペースがわずかだったTile Eに、大量の余裕が生まれました。これでもうちょっと違ったマップも作れそうですね。

[ 天下御免!からくり屋敷 ] [ テクニック ] 梁の下をくぐりたい

2020-06-06 04:27:01

左図のような構造のマップでは、入口の上の梁の部分の下をくぐれるようにしたいです。

ですが、屋根・天井のマップチップはTile Aなので、通行設定を[☆](後ろを通行可能)には設定できませんし、できたらできたで梁部分以外も通行できてしまうため問題があります。

最初は、梁部分にすり抜け可能な透明のイベントを置いて、接触時に自動実行でプレイヤーを透明状態にしつつ、梁部分の前後に同じく透明のイベントを置いて、プレイヤーを通常状態に戻すようにしていました。しかしこれだと、梁部分に接触した瞬間にプレイヤーが消え、通り抜けた瞬間にプレイヤーが出現するため、わずか一瞬の出来事とはいえ、ぎこちなさが残ります。

そこで、次のようにしました。

まず、屋根・天井のマップチップ(TileA3、TileA4)を加工して、キャラクターチップの画像ファイルを作ります。この時、キャラクターのサイズは通常の32×32よりも横に16ドット広い48×32で作り、さらに上に4ドットずれる仕様を無効にするためファイル名に"!"を付けます。

キャラクターチップは、TileA3/A4のオートタイルの仕組みに合わせて、右図のように32×16のパーツと8×16のパーツを組み合わせることで、48×32のキャラクターを作ります。単純な画像の切り貼りだけなので、高度な画像編集技術は不要です(ここ重要!)。左右に8ドットずつはみ出させることで、オートタイルの切れ目を隠せるのがポイントです。

後は普通に、通行可能な地面の上に、すり抜け可、かつプライオリティを「通常キャラの上」に設定した、屋根・天井キャラのイベントを置けば、自然に梁の下をくぐる仕組みが実現可能です。

これまでは、部屋の外と中で別のマップにしていましたが、こういう風にできるのであれば、いちいち部屋の中に入る時や外に出る時に場所移動が発生しなくて済みますし、マップ数も節約できますね。

とは言え、部屋の中に何があるのか、入ってみるまでは分からないようにしたい、というケースが大半なので、実際の使いどころは限られてくるかもしれません。今さら全部の部屋マップを直すのも大変ですし……。