GOREとにゃんこの桃源郷

主観的にCDのレビューやら、日記やら、色々と。
ゴアとかメタルとかロックとか

RPGツクールVXAceのRGSS3

2020-05-05 | RPGツクールMZ,VXace,VX,2000,95,1~5
 毎度久方振りの投稿になると、編集画面のUI変遷についていけない。旧態然とした脳内これ如何に。さて置き、RPGツクールVXAceが未だ死んでいなかった。緊急事態宣言の発令に伴い、基本在宅勤務と化した現環境にて、これまでの通勤時間分が睡眠或いは自由時間に充当されており、大変有意義なことこの上ない。いずれコロナショックが落ち着く暁には、五月病発症のリスクは避けて通れそうもない。必要なのはマスクでも自粛でも無く、言わずもがな答えは明白だ。
 そう不幸中の幸いとばかりにツクール日和を満喫すること頻りだが、製作途中にまたしても落とし穴が発見された。洞窟のトラップではなく、スクリプトの穴というか仕様の穴というか、ただの競合か、俺には皆目見当も付かないが、ゴールデーンウィークを一部棒に振った甲斐あり修正出来たので此処に残す。順を追って説明したい性分なので、順を追って説明する。

■戦闘不能から復活する魔法
 ・成功率100%
 ・ステート解除率50%(復活できる確率)
 ・蘇生時のHP回復量は最大HPの10%

 イメージはドラクエシリーズの定番蘇生呪文ザオラルだ。半分の確率で復活できる反面、半分の確率で失敗してしまう。さらに、復活後のHPは最大でも無ければ1でもない。ツクールの仕様上、ただ蘇生だけを行わせる場合、HP1で復活する。つまり復活後のHPを1超にするためには、計算式蘭、あるいは効果蘭からHP回復の設定が別途必要となる。
 そうした魔法自体は初めから準備していたが、今回ツクールを再開するまで、試行する機会が訪れなかった。というのも、蘇生魔法を味方メンバーが習得するのがゲーム中盤、レベル15以上であり、これまでずっと序盤に感けていたことで、発見が遅れた。実際にテストプレイを行っていた折、とあるボスが即死攻撃を行ってくる。その直後、蘇生魔法を使用した際、味方は想定通りHP10%で蘇生した。それまでにも、自分で作っているゲームなので基本的に味方が殺されることは無いのだが、操作ミス、敵の調整ミスなどから死人が出たこともあった。序盤は蘇生を行ってくれる施設、今作では病院にお金を支払い蘇生させていたが、漸く最近は魔法で、しかも戦闘中に復活させることさえ可能になった。つまり複数回の蘇生機会があったからこそ気付けた穴、そう、ステート解除率が100%になっていた
 データベース上は無論、50%のままであり、概ね5回程度試したら1度くらいは失敗してもいい計算、体感上はもっと失敗するはずの計算である。ちなみに、この発見が遅れた要因は他にもある。毒を治癒する魔法にも、解除率50%程度のものがあるのだが、そちらは正常に動いており、序盤から失敗や成功を繰り返していた。このことから、データベース上の解除率を盲信したまま製作を進めていたということだ。差別用語的に言うなればめくらだ。映画的な観点から言えば盲獣だ。
 さて、何故データベース上で解除率が100%でもないのに、蘇生が100%成功していたのだろうか。みんなで幾つか考えてみよう。
 ・ステート解除の他に、HP回復の設定もされていたため。
 ・味方単体(戦闘不能)というスコープの仕様。
 原因は、どれでもいいし明確には分からない。とにかくこの現象に対する簡単な回避方法なら見付けた。ステート解除率は100%に設定するが、スキル自体の成功率を50%にすることで、想定通りの動き方になる。だが今回、成功率はあくまで100%にしておく必要があった。既に後半で習得するスキルとして、ドラクエで言うところの天使のうたと似たスキルを作成していたのだ。その効果は、自分以外で戦闘不能の味方全員を半分程度の確率で復活させるというものである。もしこのスキル自体が、100%の確率で蘇生させられる場合、あまりに強力なため使用に際しての制約を考慮する必要があるだろう。また、成功率を下げる方向で調整した場合、全員復活か誰も復活しないかのどちらかになり、ギャンブル性が強くなり過ぎる。このような理由から、別の解決方法を模索した次第だ。以下、変更したスクリプトを載せる。

 主な修正は、$game_battlerクラス内、2つのメソッドになる。上から順に説明する。
1.使用効果ステート解除
 チャンス(chance)という変数が、ステート解除率を示す。これはデフォルトで存在し、チャンス分からrand関数でステート解除するか抽選させている。今回の改変ではステート解除の抽選に外れた場合、成功結果(success)を否(false)と設定し、ステート解除を行うメソッド(remove_state)を呼び出さないようにした。

2.スキルまたはアイテムの効果適用
 かなり強引だが引数として受領しているスキルまたはアイテム情報(item)変数が持つ効果対象(scope)で処理内容を分岐させた。効果対象9が味方単体(戦闘不能)、効果対象10は味方全体(戦闘不能)に当たる。そうでない場合、つまり戦闘不能者用のスキル以外は通常の処理を行わせる。ここで気を付けたいのは、戦闘不能者用のスキルという呼び方をしたが、これは効果対象が戦闘不能に対する設定ということで、スキル使用時に戦闘不能メンバーを選択していることとは関係無い。仕様かどうか定かではないが、移動中と異なり戦闘中にスキル適当可否の判定は行われず、HP満タンの相手に回復魔法をかけることも、状態異常に掛かっていない仲間にステート解除魔法を掛けることも可能だ。初めはここも判定可否させようかとも考えたが、えげつない系のボス戦で先読み回復などの行動が出来たほうが良いと思い変更しなかった。
 閑話休題、上記で分岐した中では、項番1の使用効果ステート解除のメソッドを経由するための記述だけ先に記載する。その結果如何に応じて、成功結果(success)にtrueまたはfalseが入っている。これはステート解除確率の抽選が行われた結果だ。もし成功(true)が入っていた場合だけ、HP回復量を算出するメソッドと、実際にHP回復を行うメソッドを呼び出す。

 基本的にはこれだけの改変で、蘇生魔法はステート解除率に従って動いた。蘇生が失敗した場合、戦闘不能のままでHP回復も行わない。反対に蘇生が成功した場合は、戦闘不能から復活し、指定のHP量を回復させる。
 ところが、動きとしてそうなるだけで、別の問題がある。メッセージ表示が不可思議になる。蘇生失敗の表示ついては、「%sには効かなかった。」が出るため、あとはこだわりの問題だが、そのメッセージの前に「%sはダメージを受けていない。」が表示されて非常に違和感がある。これを解決するために、以下のメソッドについても手を加える必要がある。別クラスのため、敢えて画像を分けている。

 これに関しては非常にシンプルで、赤枠で囲った部分を追記するだけで済む。要はステート解除に成功した場合だけ、HPダメージに関するバトルログを表示させる、という内容だ。先に述べた改変方法により、成功結果(success)にfalseが入るのは蘇生失敗の時だけなので、おそらく競合は極力避けられたのではないかと思っている。思ってはいるが、そもそも詳しくないので分からない。だから今日も備にテストプレイをする。

 ところで、製作中のRPGの舞台が西川口で、ビデオポーカーの店が幾つか在る為、ポーカーゲームを作成した。ジョーカー無し、倍率が実際の確率と変わらないため、かなりシビアで基本的に稼げない仕様になっている。そのため難しい役を狙う必要は無く、保守プレイに終始するという遊び方になる。何故なら、役が出来た時点で、ダブルアップゲーム(ハイ&ロー)に挑戦できるようになっている。これをメインで稼ぐことが可能だ。要は原作であるところの西川口に可能な限り忠実に、ビデオポーカーで言うところの叩き台を再現している。割れがどうとか、複雑なものは作れないので、以前CUIでさんざん作ったハイ&ローにした。パチンコ作らずにポーカーだけ作成したのも、GUIでCPU対戦型のポーカーを作ったことに起因する。カードの強さを算出する部分を始め、かなりの処理が流用出来たので良かった。
 村人のセリフに関して、ほぼ通常ウインドウ1ページ分に収まる程度しか書かない俺が、久し振りに文字を沢山書いた。しかし筆不精というわけではなく、然るに大前提として不精ゆえのことだ。そう、あの緊急事態宣言を受け、在宅勤務が始まったのはその数日後だった。本日までに1日だけ、出社を余儀なくされたものの、その日以外、1度たりとも外出をしていない生粋の自粛人間である。ゴールデンウィークに安易に帰省した人が居るとすれば見倣うべき自粛と自負している。さて、これ以上の執筆は自粛して、またツクールに耽るとしよう。合言葉は、ともすれば!


最新の画像もっと見る

コメントを投稿