# はじめに

本文書はSRPGギアを技術的・処理方法の面から解説した覚書です

目次

コア解説

まず初めにコアの解説をします。

当然ながらSRPGギアはコアを中心に各種プラグインが製作されているので、一旦ここでどのような処理をしているか確認しましょう

SRPG戦闘の流れ

--- title: サブバトルフェイズ --- flowchart TB subgraph actor_phase normal --> actor_move actor_move --> actor_command_window actor_command_window --> actor_target actor_target --> battle_window normal -->status_window end normal -->メニューシーンへ actor_command_window --> ""装備シーンやスキル選択シーン"" battle_window --> invoke_action invoke_action --> after_battle subgraph enemy_phase direction TB enemy_command -->enemy_move enemy_move --> enemy_action end enemy_action --> invoke_action

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毎(即ちフレーム毎?)に操作状況に応じて開閉します

flowchart LR 何らかのキーアクション --> gameSystemにフラグを渡す --> フラグに応じてウィンドウの開け閉め

なのでウィンドウを定義するには

1.通常通りウィンドウを定義する。
2.フラグを設定する。
3.フラグとサブバトルフェイズに応じた開閉をsrpgWindowOpenCloseに追記する

という処理が必要になります…… 面倒臭い

ウィンドウの中身を書き換えたい

ウィンドウに表示されている中身を書き換えたい場合はJSを直接編集する必要がありますが、比較的簡単です。

各Window内で定義されているdrawcontents等の関数を上書き・処理を追加などを行うと良いです。
参考までにいくつか代表的なWindowクラスを上げておきます

各typeイベントのトリガーについて

SRPGギアではいくつかのイベント発生タイミングが予め用意されており、マップ上に配置したイベントのメモにtypeを記載することでそのイベントを実行させることが出来ます。

一部について解説しておきます

turnEnd

enemy_phaseの終了時にトリガーします。
サンプルプロジェクトでも注意事項としてあげられていますが、ターン数の加算が行われてから実行されるため、経過ターン数が 1 ずれます。気をつけましょう。
また、actorTurnの終了時にはイベントがないので気をつけましょう。必要ならenemyTurnを使えば敵ターン開始時にトリガーさせることが出来ます。

beforeBattle

戦闘開始が決定された瞬間にトリガーします。
所謂戦闘前会話に利用することを想定したものと考えられます。
このタイミングは戦闘予測実行後のため、バフなどをこのタイミングで追加しても戦闘予測には反映されません(未検証のため要確認)

afterAction

ユニットの行動終了時にトリガーします 。
よく引っかかる点として既に行動が終了しているため、どのアクターの行動後か判断することが出来ません。

必要ならば行動実行時に変数をプラグイン指定の変数から別の変数へ動かしておきましょう。

マップ戦闘と通常戦闘について

コアプラグインの説明欄にも記載がありますが、マップ戦闘と通常戦闘は処理系がほぼ独立して記述されています。
そのため改変時にはどちらを改変しているかを気にする必要があります。場合によってはどちらかをカットした方が便利かもしれません。

敵AIについて

改めてほかプラグインでも定義されていますが重要な点として

だけ覚えておくといいです。

攻撃と応戦(反撃)について

SRPGでは攻撃に対して受動側がアクションを起こすことが出来ます。その設定についてです。

攻撃

所謂通常攻撃です。srpgWeaponSkillで指定できます。色々なことがこの指定で解決可能です(ダメージ計算式や攻撃順・ステータス補正等)が、指定出来るスキルは一つのみのため、どうやって定義するかよくよく吟味してください

応戦

攻撃をされた側の行動です。
実行可能な順番で優先度順で実行します

優先度:
ステート>装備>スキル>エネミー>職業>アクター>プラグインのデフォルト

ステートの効果時間

SRPGでは各ステートの効果時間が再定義されています

ステートのターン経過処理(SRPG用)
 行動終了時:行動ごとに1ターン経過
 ターン終了時:全体のターン終了ごとに1ターン経過
 戦闘終了時:SRPG戦闘の終了時

SRPG_RangeControl

SRPG_RangeControlでは射程の管理や射線・移動力の管理を設定できます。

ZoCについて

敵対ユニットが隣接四方の通過を禁止するための値です。これはsrpgThroughZoCで無視させることも可能です。

移動コストについて

地形タグに応じて移動コストを設定できます。このコストはsrpgThroughTag:Xで無視させることが可能です
注意点として特定の地形タグのみを無視させることが出来ません。また進入可不可と移動コスト2以上を両立させることも出来ません。

不可能な例

可能な例

SRPG_AIcontrol(追記予定)

SRPG_AIcontrolでは敵AIを改めて定義します。

AIは主に2つで構成されており

前者はaiTarget、後者はaiMoveで定義されます。(SRPG_MoveMethodでは後者を上書きします!!)

SRPG_MoveMethod(追記予定)

AIに対してより高度な移動式を提供します

aiMoveを上書きします

SRPG_Summon

ユニットの召喚・増援を行うことが可能です。
ユニットの追加そのものはCoreのaddActor及びaddEnemyでも実行可能ですが、事前に用意したイベントをアクター・エネミーへ変更するものでした。
これはより動的な増援を可能にします。

また、召喚元のイベント情報を引き継ぐのでもしかしたらAIタグなども引き継ぐかもしれません(要検証)

注意点として、スタックを防止するためかObjectの直上にはデフォルトで召喚不可になっています。必要に応じて修正してください。

SRPG_AuraSkill

ユニットが場所によって受ける効果(ステート)全般を取扱います。
主に2つを設定する必要があります。

効果を与える主体について

ユニットの場合はスキル、若しくはステートで定義します。SRPGAuraState:xで付与する先のStateのIDを記載してください。

非ユニット(Object・unitEvent)の場合はメモタグにSRPGAuraState:xを記載してください

受ける効果について

SRPGAuraState:xで指定した先のステートはSRPGAuraをメモタグに指定することで範囲外に出た場合即解除させることが出来ます。場合により使い分けてください

その他

SRPG_PositionEffect(追記予定)

マップ上でのユニットの移動スキル全般について管理します。

押し出し・引き戻し・テレポートなどはこちら

Q&A

思いつく限りのその他について記載しておきます

Q,FEであったあのスキルどうやって実装すればいいと思う?

私が知りたい。
一応考えてたり思いついたのは記載します。

Q,戦闘終わったら倒した敵が復活してる!

敵を配置するイベントの条件にスイッチ:SRPG戦闘中をつけましょう。
若しくは移動直前にフェードアウトしてから戦闘終了

Q,Objectとユニットを重ねて初期配置したい!

マップロード後にイベントの位置指定で重ね合わせてください