開発日誌

テクニック

[ 天下御免!からくり屋敷 ] [ テクニック ] [ ツクール情報 ] 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ドットずつはみ出させることで、オートタイルの切れ目を隠せるのがポイントです。

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

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

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

[ 天下御免!からくり屋敷 ] [ テクニック ] 台詞の途中でスイッチを操作する

2020-02-04 23:32:15

前回の記事で、スイッチと並列処理のイベントを使って、台詞の途中でフキダシアイコンを出すことに成功しました。

「台詞の途中で」というのを実現するためには、並列処理の頭で適当なウェイトを入れる必要があります。基本的には1文字1フレームなので、出したいタイミングまでの文字数を数えればいいのですが、台詞の最後の方だと文字数を数えるのも面倒だったり、決定キーで台詞の一括表示とかをされるとタイミングがずれてしまうのが、ちょっと気になっていました。

そこで、台詞の途中でスイッチの操作ができるようにして、いちいちウェイトで調整しなくても、狙ったタイミングでイベントを起動できるようにしてみました。

具体的には、文章表示の途中で使える制御文字を拡張して、\+switch[n]と書けばn番のスイッチをON、\-switch[n]と書けばn番のスイッチをOFFに、それぞれできるようにしました。

本当は実装したスクリプトを素材として公開できればよかったのですが、今回は作品固有の処理がいろいろと書いてあるところに追加で書かざるを得なかったため、素材単体としては公開できません。VX用なので、今さらあまり需要もないと思いますが……。

代わりに、該当部分のキャプチャーを置いておきます。わずか数行なので、同じように書いてもらえればと思います。

ただの一発ギャグをかましたいだけのために、スクリプトの改造までやるのは、やり過ぎじゃなかろうか……。

[ 天下御免!からくり屋敷 ] [ テクニック ] 台詞の途中でフキダシアイコンを出す

2020-01-26 18:26:54

久しぶりにテクニック関連の記事を。

誰かがしゃべっている途中でフキダシアイコンを表示させたいと思って、実装してみました。

台詞の途中で向きを変えたり、ジャンプさせたり、あるいはSEを鳴らしたり、といったことは、イベントコマンドで文章の表示の手前に「移動ルートの設定」で、「移動が終わるまでウェイト」のチェックを外して、移動ルートの先頭に適当なウェイトを入れ、方向転換やジャンプ、SEの演奏を入れてやれば、望み通りの動作になるので、よく利用しています。

「移動ルートの設定」で設定可能なものなら、この方法でできるのですが、フキダシアイコンの表示は「移動ルートの設定」ではできないため、別の方法が必要です。

最初は、文章の表示を2つに分ける方法を考えました。1つ目の台詞は末尾に「\^」を付けて、入力待ちをせずに次に進むようにしておいて、フキダシアイコンの表示。それから2つ目の台詞は、1つ目で表示した部分までを「\>」で一瞬で表示させるようにして、途中から通常通りの表示をさせる方法です。しかし、この方法だと、フキダシアイコンを表示する時に、文章ウィンドウが一度閉じられてしまうため、綺麗ではありません。

そこで考えた方法が、スイッチ1つとイベント1つを使って、並列処理させる方法です。

まず、対象となる文章の表示を手前で、スイッチをONにします。そして、新たなイベントを用意し、出現条件はそのスイッチがONの場合、トリガーは「並列処理」にして、実行内容の先頭に適当なウェイトを入れた上で、フキダシアイコンの表示をします。最後にそのスイッチをOFFにして、並列処理が続かないようにします。

これで無事に、台詞の途中でフキダシアイコンを表示させることができました。1つの文章の途中で!や?などのフキダシアイコンを入れられると、感情表現が豊かになっていいですね。

最初から1つの台詞にしないで、複数の台詞に分けてしまえばいいのでしょうが、あまり台詞を短く切るのが好きではないので、こういうことができると助かります。

まあ、普通にプレイしている限りでは一瞬の出来事なので、ほとんど気に留める人はいないかもしれませんが……。