Project.Hさんをフォローして、最新情報をチェックしよう!

マイページへ

Ci-enはクリエイターに対して、金銭的な支援を送ることができるサービスです。

投稿記事
Project.H

【20.9.14~20.9.19】RGSS3でバトルボイス実装/画面サイズ限界突破メモ

今週のCi-enは諸事情により、Twitterのほうで呟いてた「VXAceで画面サイズを限界突破」させるスクリプトの検証記事と、某方に送ったRGSS3バトルボイス実装の小ネタとかメモを書きます。というか今週の進捗がほぼこれなんですが…

バトルボイスの方は昔やったことのおさらいですが、今になって応用の仕方が分かったことがいくつかあるので、忘れないためのメモです。あとちょっとずつバトルシステムも組んでいく予定なので予習も兼ねて。


ほぼ自分用のメモなので読みにくいですが、ご了承ください。
ツクール公式によるAceのサポートが年内で正式に終了という追い打ちもあり、RGSS3を扱うサイトさんが軒並み閉鎖していく昨今、わたしはスクリプトはかけないのですが、ゴリラ実装やゴリラ考察・解釈は大得意なのでちょっとでも役に立つ方がいれば幸いです……
まあぶっちゃけAceはサポートなんぞあったか?というレベルですが…


前置き

本記事はスクリプト制作者様とは一切関係のない記事です。
スクリプト制作者様の意図しない使い方をしている可能性が大いにあります。当記事の内容を各スクリプト制作者様に問い合わせることはおやめください。

またこの記事は万一スクリプト制作者様に迷惑が及ぶようなことがあった場合、または申し立てがあった場合、予告なく削除されます。ご了承ください。


RGSS3でバトルボイス実装

回想領域さんの「バトルボイス」を使用。
本記事ではデフォルトの機能+αで表現の幅を広げる方法を記載します。主な項目は以下三つ。

1.カットイン(コモンイベント)でボイスを再生する
2.特定戦闘時のみ特殊ボイスをしゃべるようにする

といっても2に関してはかなりゴリラ実装に近いものなので、もっといいやり方があるような気がしてなりません……


デフォルトで可能なこと

【以下、スクリプト本文17行目~33行目抜粋】

● イベントコマンド●======================================================
  初期状態ではアクターにはアクターIDと等しいIDのボイス設定が適応されています。
    例) アクターIDが 2 のアクターには ボイス設定の 2 が対応
  --------------------------------------------------------------------
  イベントコマンドのスクリプトより下記のコードを実行することで、
  アクターが使用するボイス設定を任意のものに変更できます。
  --------------------------------------------------------------------
  change_voice(actor_id, voice_id)
  --------------------------------------------------------------------
  actor_id : ボイス設定を変更したいアクターID
  voice_id : 利用したいボイス設定ID
  --------------------------------------------------------------------
    例) change_voice(2, 14)
      上記スクリプトを実行すると、
      「アクターIDが 2 のアクターには ボイス設定の 14 が対応」
      といったように設定が変更されます。
  ======================================================================
  

これを利用すれば、データベース上キャラクターが複数に分かれているようなゲームデータでも、1つの設定からボイスを引っ張ってくることが可能。


【例】データベース上、「アルヴィン」というキャラクターが複数アクターで管理されている場合

アクター1:序盤アルヴィン
アクター10:中盤アルヴィン
アクター20:終盤アルヴィン

というふうに、ストーリーの流れに応じてデータベース上は別人物として同一キャラクターを管理している場合、

change_voice(10, 1)
change_voice(20, 1)

とスクリプトコマンドで指定すれば、アクター10のアルヴィンとアクター20のアルヴィンも、アクター1で設定したアルヴィンのボイスをしゃべらせることができる。
アクターごとに設定しなおす必要がないため楽。
ただし、この手の設定をしている場合、たいがいは「序盤、中盤、終盤でキャラクターの性格などが変わり、セリフも変わってくる」という場合が多いので、実際に使えるかどうかは人による。


応用

データベース上に実際には存在しないアクターIDを利用して隠しデータを作っておく。

:attack => {
#通常攻撃
1 => ["アルヴィン_通常攻撃a","アルヴィン_通常攻撃b"],
2 => ["ソプラノ_通常攻撃a","ソプラノ_通常攻撃b"],
             ・
             ・
             ・
50 => ["特殊戦闘アルヴィン_通常攻撃a"],  #←これ
},

※データベース上、アクター50は存在しない。
以上のような設定を行い、特殊戦闘時のバトルイベント、もしくは直前のイベントで

 change_voice(1, 50)

と記述する。
すると、特定戦闘のみアルヴィンのセリフを変える演出が可能になる。

ただし、上記の記述を行うと以降のアルヴィンのバトルボイス設定はID50に置き換わってしまう。ID50に設定されていないシチュエーションのボイスはしゃべらなくなってしまうため、差分がないセリフは通常時のアルヴィンの設定をID50にコピペしておく必要がある。

また、該当イベント終了後は

 change_voice(1, 1)

と記述して、元の設定に戻す処理を忘れないこと。


【応用1】特定イベント戦で特定キャラクターに戦闘勝利セリフをしゃべらせる

全員を隠しデータに差し替えておき、戦闘勝利セリフはそのセリフをしゃべらせたいキャラクターにのみ設定しておく(他のキャラクターは空欄にする)

ただし、「該当キャラクターが戦闘に参加していない」「該当キャラクターが戦闘不能のまま戦闘に勝利」した場合、思うように演出できない場合がある。実装不可能ではないがやや工夫が必要。


――ここまでがヘルプに表記のあるデフォルトで実装可能な内容――


ヘルプに表記はないが実はやれること

以下の記述をスクリプトコマンド上で行うことで、任意のタイミングで設定した任意のセリフをしゃべらせることが可能。

BattleVoice.play( :battle_start_normal, $game_actors[1])

→上記の記述の場合、「:battle_start_normal(戦闘開始時:通常)」 に設定した「アクター1(ID1)」のセリフが再生される。


また、デフォルトでは

:battle_start_normal (戦闘開始時:通常)
:battle_start_pinch (戦闘開始時:ピンチ)
:battle_start_surprise (戦闘開始時:不意打ち)
:battle_start_preemptive (戦闘開始時:先制攻撃)
:attack(通常攻撃)
:guard(防御) 
:damage(被ダメージ)
:evasion(回避)
:miss(ミス)
:use_item(アイテム使用)
:use_skill (スキル使用)
:dead (戦闘不能)
:recovery(自分以外の仲間からの回復)
:support_state(自分以外の仲間からのサポートステート付加)
:bad_state(バッドステートが付加)
:victory_normal (勝利:通常)
:victory_pinch(勝利:ピンチ)
:victory_perfect( 勝利:ノーダメージ)
:escape(逃走)

の計19種類が設定できるようになっているが、これは実は無限に増やすことが可能。
例えば秘奥義用のボイスを設定したい場合、

:special_skill => {
1 => ["アルヴィン_秘奥義"],
},

と記述し、カットインを仕込んであるコモンイベントに

BattleVoice.play( :special_skill, $game_actors[1])

と記述することでカットイン時にセリフをしゃべらせることが可能。
SE等で代用することも可能だが、SEを利用した場合、

  • 「音量設定スクリプトなどでSEが操作されていると、カットインボイスだけその影響を受けてしまう」
  • 「ボイススクリプトの機能にあるボイス再生オンオフからは除外された処理になるので別途条件分岐を挟む必要がある」

等の不都合が生じるためこちらがおすすめ。
ただし、この記述はScene_Battle上以外で行うとエラーを吐くため使用できないので注意。パートボイス等を導入する場合はSEを使用するか、別途ボイススクリプトを導入する必要がある。

なお、「:○○○」の部分はほかのハッシュと被らなければなんでもOK。
「:oretueee」でも「:okometabero」でもなんでも。



ちなみにリメイク前のデータを開いてみたところ、

  • ①イベント戦時に限りバトル処理手前にあえてボイス非再生スイッチをONにする
  • ②バトルイベント内でOFFにし、直後に再生させたいセリフをスクリプトコマンドで記述(そのセリフをしゃべるキャラクターが戦闘に参加しているか条件分岐が必要)

で、任意のセリフをしゃべらせる処理を行っていたようです。
多分これを応用すれば、「特定の組み合わせのキャラクターが戦闘に参加している場合、一定確率でかけあいボイスをしゃべる」といった演出も可能だと思うのですが、なんだか意味不明な条件分岐が挟まっていて意図がよくわからなかったので今回は割愛します。イベント処理で一連の条件付けを行うため、シンボルエンカウントだとそのへんの実装が楽なんですが、ランダムエンカウントの場合は内部を少しいじる工夫が必要かもしれませんね。



RGSS3でバトルボイス実装 ここまで



Ace(RGSS3)で画面サイズを限界突破

Aceのデフォルトの画面サイズは544*416ですが、以下の記述で画面サイズを変えることができます。

Graphics.resize_screen(x, y)

ただし、どんな数字を入れても最大値は640*480です。
これを海外の謎技術で640*480以上の画面にします。
使用するのはΣ Fullscreenというスクリプト。

実装後の画面が以下。


1024*576サイズになりました。

このスクリプト、多分、おそらく、ものすごく無茶苦茶をしているのでバグがあります。確認できただけでも遠景バグ、フェードバグ、トランジションバグ等。

Twitterの投稿およびこの記事を通して行う一連の実験は、これらのバグやスクリプトの仕様を検証し、「実制作で使用可能か」どうかを判断するものです。この実験は制作初期段階で、なおかつ、ある程度のシステム組みと検証に必要な素材がいくつかそろった状態の現在にしか行うことができません。なぜなら画面サイズに合わせてすべての素材を作成する必要があり、制作途中での画面サイズ変更は制作者の(あらゆる意味での)死に直結するからです。


ちなみに今回私が採用したいと考えている画面サイズは1024, 576です。
微妙な数字なのは、画面比率を16:9かつAceの1マスに相当する32の倍数にしたかったから。当然画面サイズが大きければPCへの負荷も大きくなるのでfpsの低下を懸念していましたが、このサイズは許容範囲(50~60fpsを維持)のようでした。これ以上大きくするとかなり重いです。ただ、PC環境によるところが大きそうなのでなんともいえない。


本当に実制作で使用するかは現時点ではわかりません。ゆえにある種「無駄な寄り道」行為になります。何も得られなかった調査兵団になったらすみません。

ここまでが前置き。



遠景バグの仕様についての検証

まずは遠景使用時、画面右上がバグる仕様の検証。

不思議だったのは、「デフォルトにないスクリプトで制御している近景には影響が及ばない」という点。つまりデフォルトの機能を使った遠景床に何か原因があると考え、Aceにもともとデフォルトで収録されている空の遠景を使用してみる。

バグらない。

つまり画像の方の問題っぽい?
使用しているマップの遠景とデフォルトの遠景を比較すると、相違点は以下ふたつ。

  • JPGかPNGか
  • 画像サイズの違い

ここでふと、デフォルト遠景のサイズが正方形のループ仕様であることに気づく。
そもそもAceの遠景はMVのように最初から視差ゼロの遠景床ではないため、デフォルトの遠景機能はparallaxmappingを前提とされていない。基本的には空などに使用し、「ループさせて使用するもの」という位置づけだと思われる。

が、端からparallaxmappingの視差ゼロ遠景脳のわたしが作った遠景マップのサイズは縦に長かったり横に長かったりとまちまちで、正方形ではない。

で、試してみた。


まずは遠景サイズをむりやり正方形にする
(下の白い余白部分がむりやり継ぎ足した部分)


遠景床のスクロールを固定させるスクリプトを導入して視差ゼロ化し、余白部分が消えるようにマップサイズを調整する。

正常になる。

ちなみに視差ゼロスクリプトの導入だけではだめだった。あくまで遠景画像が正方形でなければだめらしい。なんだかよくわからないが、一応これで画面右上がバグる遠景バグは解消された。正直意味が分からない。


次に一定サイズ以上の大きさのマップになると画面下部や右部が表示されなくなる遠景バグ。

これはどうやら縦1152(36マス)横2048(64マス)が限界値らしい。
といってもこれはフルスクリーンとして設定した画面サイズによって異なるらしく、1024, 576以外に設定していた場合はそれに比例して限界値が変わる模様。おそらくPC負荷軽減のためのリミッター的な何かだと思われる。正直これに関しては「サイズ内にマップを収めた方が軽くなる」という利点があるので、大人しく制限に従ってマップを作る方がいいのかもしれない。


その他調整

バトル画面のエネミー座標調整はデフォルト状態だと設定しようがなくなってしまうが、「解像度640*480対応プロジェクト」というスクリプトを使用し、数値を対応比率にすべて置換するとデフォルト画面での設定を自動調整してくれる模様。




ここまでが現時点検証、解決できた項目です。
まだ検証しきれていないのは以下ふたつ。

  • トランジションが息してない
  • フェードが息してない
    ※多分上記ふたつに関係するであろう処理で「ロード」時の挙動もやや怪しい

フェードに関してはピクチャを使って代用しているところがあるので、ピクチャサイズを画面サイズに合わせて再調整すれば個人的には問題がありません。なぜか544*416でなく640*480固定っぽいので、本体(デフォ)のどこかに数値いじる場所があるような気がする……

あとはバトルトランジションが機能しないのはちょっと厄介。
挙動的にviewportがおかしくなっているのかなーという気がしなくもないのですが、ここまで検証して頭が疲れたので何も考えられません……

現状、この程度であれば問題を解消して実制作に使用できるのではないかと考えているのですが……それによってUIデザインやバトル画面等が大きく変わるので、そこをまず決めたい。

ので、近いうちにDMがとぶかもしれません…(私信)






おまけ

そういえば最初ピクチャの座標も狂ってる気がするって呟いてたんですが、ピクチャ表示先のマップサイズが「20*15」で640*480サイズ仕様になっていたことが原因でした。


サイズを規格に合わせたら正常でしたが、フキダシ位置がずれたのでルーファスがシルヴィアになって笑った。
\いいね・ツイートで応援!/
Project.H

【20.9.7~20.9.13】今週の進捗

いい感じに続いてる!やったー!
しかし地味な作業しかしていないので内容は薄いです。

全然よくないよ母さん


今週の成果

①遠景スクリプトの設定ミスでViewportが凄まじいことになってたのを修正
②それに合わせて灯りスクリプトと近景、その他プライオリティを全て再調整
③フキダシの代わりにアニメーションでフキダシ出すための画像調整
④…をしたはいいがViewport問題が解決したので意味をなくす
⑤悲しみを乗り越えて0章のイベント組みを再設定に合わせて調整し直す
⑥ついでにずっと放置していたマップ切り抜き芸人が仕事をする


こう書くといっぱい作業したように見えますが、設定ミスで画像の前後関係がバグりまくり、収拾がつかなくなりそうだったところをミスに気づいて全修正かけただけ、という何の生産性もない作業でした…つらい。

⑥はマップの細部調整です。



壁がマスからはみ出している部分を切り抜いて、壁の裏に回り込めるようにしたり、変なふうに食い込んでしまう部分をどうにかそれっぽくみせるやつです。

これが


こうなる。

Viewportは前々からおかしいな―とは思っていたんですが、遠景がViewport2とか3まで侵食していたので、ピクチャやアニメーション、キャラチップ、フキダシが遠景の間に入り込んでしまったりするバグが発生していました。
むりやり内部のZ軸をいじって手前に持ってくることができたものもあったのですが、フキダシやイベントで設置したチップの一部のプライオリティがめちゃくちゃで、イベント組みにも影響してきてしまい……

まあどうにか誤魔化せばいいか~と緩く考えていたのですが、デフォルトの画面色調変更機能も狂ってしまうことに気づき、さすがにそれはマズいと調べていったら初歩的な設定ミスだったというお話。
これで1週間丸々持ってかれているのでわらえない。
片っ端から全部設定しなおしだったので、制作終盤じゃなくてよかったと思うことにします。

\いいね・ツイートで応援!/
Project.H

【20.8.31~20.9.6】今週の進捗

らくがき

(何がとは言わないが)埋もれたい

シルヴィアは常時アホ毛が立ってるわけではないのですが、だいたいルーファスの隣にいるとアホ毛が立ってるので、多分彼らはアホ毛で交信しているから仲がいいんだと思います。
ヒロインは(色んな意味で)包容力があってほしい。

当初は「ヘタレを装った暗躍(?)する人」の予定だったルーファスが、「キザな二枚目を演じているのに何か残念な暗躍(?)する人」になっていっているのが笑えます。
アハト、シルヴィア、ルーファスは完全新規のキャラクターなので内面のキャラクターデザインもまだまだブレがあるのですが、初期プロット段階で必要に合わせて設定したとはいえ、シナリオ上で実際に動かしてみるとずいぶん変わるものですね。



例によって大きな進捗はありませんが、この一週間でのらくがきとか解決したゴリラとかとまとめます。

フォロワー以上限定無料

無料プラン限定特典を受け取ることができます

無料
\いいね・ツイートで応援!/

記事を検索