# はじめに
本文書はSRPGギアを技術的・処理方法の面から解説した覚書です
まず初めにコアの解説をします。
当然ながらSRPGギアはコアを中心に各種プラグインが製作されているので、一旦ここでどのような処理をしているか確認しましょう
auto_actor_phaseというのもあるのですが一旦省きます。(エネミーと大差ないっぽいのと自分が触ってないため)
各フェーズについて引用します
戦闘のサブフェーズを返す。
これは、各BattlePhase内で使用され、各段階での処理の進行を制御する。
initialize:初期化を行う状態
actor_phase内で使用
normal:行動アクターが選択されていない状態(メニューを開くことが可能)
actor_move:移動範囲が表示され、移動先を選択している状態
actor_target:行動対象を選択している状態
status_window:ステータスウィンドウが開かれている状態
actor_command_window:アクターコマンドウィンドウが開かれている状態
battle_window:攻撃確認ウィンドウが開かれている状態
auto_actor_phase内で使用
auto_actor_command:自動行動アクターをイベント順に行動決定する状態
auto_actor_move : 自動行動アクターが移動先を決定し、移動する状態
auto_actor_action:自動行動アクターの実際の行動を行う状態
enemy_phase内で使用
enemy_command:エネミーをイベント順に行動決定する状態
enemy_move : エネミーが移動先を決定し、移動する状態
enemy_action:エネミーの実際の行動を行う状態
いずれのBattlePhase内でも使用
invoke_action:戦闘を実行している状態
after_battle:戦闘終了後の処理を呼び出す状態
いきなり流し込まれてもわけが分からないとは思いますが基本的にSRPGギアでの処理はこのどこかで行われています。
今現在がどのフェーズであるかを意識すると処理を把握しやすくなるので適宜必要になったら確認してください。
SRPGギアではSRPGに必要な情報を提供するために各種情報を表示するウィンドウを定義しています。
これらのウィンドウはシーンのupdate毎(即ちフレーム毎?)に操作状況に応じて開閉します
なのでウィンドウを定義するには
1.通常通りウィンドウを定義する。
2.フラグを設定する。
3.フラグとサブバトルフェイズに応じた開閉をsrpgWindowOpenCloseに追記する
という処理が必要になります…… 面倒臭い
ウィンドウに表示されている中身を書き換えたい場合はJSを直接編集する必要がありますが、比較的簡単です。
各Window内で定義されているdrawcontents等の関数を上書き・処理を追加などを行うと良いです。
参考までにいくつか代表的なWindowクラスを上げておきます
SRPGギアではいくつかのイベント発生タイミングが予め用意されており、マップ上に配置したイベントのメモにtypeを記載することでそのイベントを実行させることが出来ます。
一部について解説しておきます
enemy_phaseの終了時にトリガーします。
サンプルプロジェクトでも注意事項としてあげられていますが、ターン数の加算が行われてから実行されるため、経過ターン数が 1 ずれます。気をつけましょう。
また、actorTurnの終了時にはイベントがないので気をつけましょう。必要ならenemyTurnを使えば敵ターン開始時にトリガーさせることが出来ます。
戦闘開始が決定された瞬間にトリガーします。
所謂戦闘前会話に利用することを想定したものと考えられます。
このタイミングは戦闘予測実行後のため、バフなどをこのタイミングで追加しても戦闘予測には反映されません(未検証のため要確認)
ユニットの行動終了時にトリガーします 。
よく引っかかる点として既に行動が終了しているため、どのアクターの行動後か判断することが出来ません。
必要ならば行動実行時に変数をプラグイン指定の変数から別の変数へ動かしておきましょう。
コアプラグインの説明欄にも記載がありますが、マップ戦闘と通常戦闘は処理系がほぼ独立して記述されています。
そのため改変時にはどちらを改変しているかを気にする必要があります。場合によってはどちらかをカットした方が便利かもしれません。
改めてほかプラグインでも定義されていますが重要な点として
だけ覚えておくといいです。
SRPGでは攻撃に対して受動側がアクションを起こすことが出来ます。その設定についてです。
所謂通常攻撃です。srpgWeaponSkillで指定できます。色々なことがこの指定で解決可能です(ダメージ計算式や攻撃順・ステータス補正等)が、指定出来るスキルは一つのみのため、どうやって定義するかよくよく吟味してください
攻撃をされた側の行動です。
実行可能な順番で優先度順で実行します
優先度:
ステート>装備>スキル>エネミー>職業>アクター>プラグインのデフォルト
SRPGでは各ステートの効果時間が再定義されています
ステートのターン経過処理(SRPG用)
行動終了時:行動ごとに1ターン経過
ターン終了時:全体のターン終了ごとに1ターン経過
戦闘終了時:SRPG戦闘の終了時
SRPG_RangeControlでは射程の管理や射線・移動力の管理を設定できます。
敵対ユニットが隣接四方の通過を禁止するための値です。これはsrpgThroughZoCで無視させることも可能です。
地形タグに応じて移動コストを設定できます。このコストはsrpgThroughTag:Xで無視させることが可能です
注意点として特定の地形タグのみを無視させることが出来ません。また進入可不可と移動コスト2以上を両立させることも出来ません。
不可能な例
可能な例
SRPG_AIcontrolでは敵AIを改めて定義します。
AIは主に2つで構成されており
前者はaiTarget、後者はaiMoveで定義されます。(SRPG_MoveMethodでは後者を上書きします!!)
AIに対してより高度な移動式を提供します
aiMoveを上書きします
ユニットの召喚・増援を行うことが可能です。
ユニットの追加そのものはCoreのaddActor及びaddEnemyでも実行可能ですが、事前に用意したイベントをアクター・エネミーへ変更するものでした。
これはより動的な増援を可能にします。
また、召喚元のイベント情報を引き継ぐのでもしかしたらAIタグなども引き継ぐかもしれません(要検証)
注意点として、スタックを防止するためかObjectの直上にはデフォルトで召喚不可になっています。必要に応じて修正してください。
ユニットが場所によって受ける効果(ステート)全般を取扱います。
主に2つを設定する必要があります。
ユニットの場合はスキル、若しくはステートで定義します。SRPGAuraState:xで付与する先のStateのIDを記載してください。
非ユニット(Object・unitEvent)の場合はメモタグにSRPGAuraState:xを記載してください
SRPGAuraState:xで指定した先のステートはSRPGAuraをメモタグに指定することで範囲外に出た場合即解除させることが出来ます。場合により使い分けてください
マップ上でのユニットの移動スキル全般について管理します。
押し出し・引き戻し・テレポートなどはこちら
思いつく限りのその他について記載しておきます
私が知りたい。
一応考えてたり思いついたのは記載します。
待ち伏せなどの行動順操作
応戦などに速度補正をつける
すり抜け
ZOC で定義されているpassOpponentsでいけそう
鬼神の一撃等
今考えてる。他との競合を考えないなら攻撃スキルの上書きでいけるがそうでないなら実装方法を考える必要がある
射程追加
srpgRangePlusとsrpgVariableRange(SRPG_RangeControlから)を使えば可能。ただし、特定のスキルのみの増加はできないので注意
再移動
思いつきだけど。beforebattleで再移動持ちなら別の変数に保存
AfterActionで変数参照して移動とかになる?移動系はサブバトルフェイズに関係するのでかなり面倒そう
敵を配置するイベントの条件にスイッチ:SRPG戦闘中をつけましょう。
若しくは移動直前にフェードアウトしてから戦闘終了
マップロード後にイベントの位置指定で重ね合わせてください