
そうだね、またもや懲りずに幾度でも、悠久に続く輪廻の中で、VXaceの話なんだ。画像はツクール3のモンスタグラフィックと、ツクール4の顔グラフィックを取り込んでみただけなんだ。でも、今回の話にそれは全く関係が無いんだ。
戦闘画面に於いて、攻撃スキル以外のちょっとした演出に、「スキル使用者にアニメーションを表示させるだけ」と設定する場合がある。ボス戦であれば、コモンイベントの呼び出しから、戦闘アニメーションの表示命令を行う手もある。しかし、敵をランダム出現にしていると、スキル使用者を特定することが手間だ。また、スキル毎にコモンイベントを設定するのでさえ、演出スキルやアイテムが多いほど手間がかかる。やはりここは、余計な手間をかけず、スキルの対象を「使用者」、好きなアニメーションを設定し、効果範囲は無しに設定するだけで済ませたい。
この際の最悪な問題と言えば、「○○には効かなかった」というメッセージが表示されてしまう点だ。今回は解決策を2つほど思い付いたので、同じ悩みを持つ人が居れば、参考にして欲しい。
まずはスクリプトを使わない方法から。上記のメッセージは、必中で成功しているにも関わらず、何も効果が設定されていない場合に起こる。ならば、効果を設定してやれば回避可能だ。たとえばダミーステートを作成する。アイコンやメッセージを一切設定せず、自動解除のタイミングを行動終了時、持続ターン数は0~0にしよう。これだけで、内部的にはスキル使用者がステートに罹るため、ステートで設定したメッセージが流れる。ただしステート感染時のメッセージは、空欄にしておけば何も表示されない。
次は、スクリプトに追記する方法で、同じ効果を得る。バトル中のメッセージ表示を司るのクラスは、「Window_BattleLog」だ。その中、失敗の表示と記載されている箇所、「display_failure(target, item)」というメソッドを変更する。デフォルト文によると、「命中したが、成功しなかった」場合に失敗メッセージを流すようだ。この条件分岐(if)に、条件を一つ付け足そう。
&& !item.description.include?("失敗メッセージ無し")
最初の&二つは、且つという意味で、既存の条件に追加して、更に条件を加える時に使う。その後は、「アイテム(スキル)の説明文に、失敗メッセージ無し、という言葉が入っていない時」と読む。頭に感嘆符を付加することで、「~ではない」という意味になるため注意。これをデフォルトのスクリプトと合わせて記載すると次のようになる。
#--------------------------------------------------------------------------
# ● 失敗の表示
#--------------------------------------------------------------------------
def display_failure(target, item)
if target.result.hit? && !target.result.success && !item.description.include?("失敗メッセージ無し")
add_text(sprintf(Vocab::ActionFailure, target.name))
wait
end
end
これを記載しておくと、スキルの説明文に「失敗メッセージ無し」と入っている場合は、やはり「には効かなかった」と表示されなくなる。
個人的には、エネミースキルのみこうした演出を使うため、後者のスクリプトを先に試してみた次第だ。しかし、アクタースキルでも似たようなことを行う場合、ゲーム中に表示されるであろう説明文に、妙な一言を書き込むと違和感がありすぎるだろう。それならば、前者のダミーステートを採用したほうがスマートだ。或いは、説明文では無くメモ欄を読ませるのでも構わない。普通はメモ欄を参照させるものだが、何故そうしないのかと言えば、既に色々書いてあって、ごちゃごちゃするのが嫌だった。というだけに過ぎない。
そうだな、今日は特に無駄なことをした気がする。明日は頑張ろう、何かを。寝るのを頑張ろうかな。昨日眠るの忘れてたから。朝定食こそ食べたいものの、消費期限が本日までのパンがあるため、断念せざるをえない。俺が不憫だ。
※コメント投稿者のブログIDはブログ作成者のみに通知されます