2022年12月6日火曜日

Fallout4 備忘録

Fallout4のModを弄り回してた時に気づいた点やあまり他サイトで触れられてないような事に関するメモ。

SkyrimにあったGame.GetCurrentCrosshairRef関数について

Fallout4には標準機能として存在しない。(だがGetCurrentConsoleRefというConsole Utilを使わない限りデバッグにしかほぼ用途が無いものはしっかりと残してる)
後述するPapyrus Common Libraryというスクリプト拡張プラグインにてGetCurrentCrosshairRefが使用できる他、
LL FourPlay communityというスクリプト拡張プラグインにてほぼ同じ機能のLastCrossHairRef関数とLastCrossHairActor関数が使えるようになる。
 

特定対象のアクティベート時にRキーで追加コマンドを実行するタイプのModについて

これはダミーPerkにAdd Activate Choiceを設定してプレイヤーに持たせる事で実現させてるが
このAdd Activate Choiceが設定されてるPerkを複数取得した場合、
発動条件を満たした追加コマンドが2つ以上あるとコマンドが表示されなくなり、Rキーを押しても追加コマンドが実行できないという問題が発生する。
(A、B、Cのコマンド追加Perkをプレイヤーが所有し、AとCの条件に一致した対象にクロスヘアを合わせてもRキーコマンドが表示されなくなる)
おまけにこの追加コマンドを実行するキーの指定が不能なため競合した時の解決もかなり困難となる。(最悪どちらかの追加コマンドModを切る必要がある)

このPerkによる追加コマンドはSkyrimにあったGame.GetCurrentCrosshairRef関数が消えた事によってクロスヘア上のアクターを取得できる手段が無くなったため
その代打手段として使われていたが現在はPapyrus Common LibraryやLL FourPlay communityというスクリプト拡張プラグインでGame.GetCurrentCrosshairRef関数と同機能の関数が使えるようになったため
目の前の対象に特殊な事をやりたいModを作る場合は上記の問題回避のためにもPapyrus Common Library、もしくはLL FourPlay communityの関数とOnKeyDownの組み合わせでModを制作するのが安全。


スクリプト拡張プラグインについて

この記事を書いた時点でのFallout4のスクリプト拡張プラグインは自分が見つけた範囲では
SUP F4SE、Console Util、LL FourPlay communityぐらいしかなかったが
2023年後半ぐらいからスクリプト拡張プラグインが増え始めたおかげで昔に比べてスクリプト関係は非常に自由度が増した。
 
近年ではFallout4の突然のアップデートのせいで使用できなくなってるものも出てきてしまったが、幸いPapyrus Common Library、Lighthouse Papyrus Extender、Garden of Eden Papyrus Script Extenderの3つのスクリプト拡張プラグインで代用は可能。
プラグイン開発者ならば基本的に上記3つのスクリプト拡張プラグインを入れれば問題ないだろう。(どれがどの方面に優れているかはまだ把握しきれていない)
 
  • Papyrus Common Library
ファイル操作系やコンソール系、それ以外にも色々と欲しかった関数を扱えるようになるが
何よりも重要なのがLL FourPlay community以外でGetCurrentCrosshairRefが使えるようになるという点。
これかLL FourPlay communityが無いとクロスヘアを合わせた対象に特別な事をするMod開発は非常に制限が掛かるので是非とも導入をオススメする。
また、SUP F4SEが最新のFallout4に対応しなくなったため
SkyrimのPapyrusUtil SEを使ったModにあるようなMod設定の保存や読込、ゲームのロード時にMod設定の自動読込を作成したい時はこちらを使った方が良い。
 
  • Lighthouse Papyrus Extender
多くの関数を追加する拡張プラグイン。LL FourPlay community以外でHexToIntやIntToHex等の数値から文字列、あるいは文字列から数値への変換等の機能が扱える。ドキュメントは充実してる方なので分かりやすい。
 
  • Garden of Eden Papyrus Script Extender
多くの関数を追加する拡張プラグイン。こちらもConsole UtilやPapyrus Common Library以外でコンソール系の関数を追加する。上記2つに無いものはこちらに存在してる事が多くアクター取得系もGetCombatGroupMembersやGetCombatTargeters等、これが最も充実してるかもしれない。
ただ、On~等のイベント受信型に関してはPapyrus Common Libraryと被っていてかつあちらの方が種類が豊富なのでイベント受信型はPapyrus Common Libraryの方を使ったほうが良い。
 

  • SUP F4SE
※現在のアップデートされたFallout4には非対応
Jsonファイルの読み書きや一時保存用の変数の仕様が可能になる。
Papyrus Common Libraryが出る前は、唯一外部ファイルを使用できるようになるスクリプト拡張プラグインであった。
ちなみにこの拡張プラグインはSkyrimにもSUP SKSEという名前で存在する。
 
JSON関係はPapyrus Common Libraryで代用可能になった。
 
  • Console Util
※現在のアップデートされたFallout4には非対応
コンソールコマンドをスクリプトから実行する関数を追加する。
SkyrimのConsole Utilと同機能。
 
Papyrus Common LibraryかGarden of Eden Papyrus Script Extenderで代用可能。
 
  • LL FourPlay community
※最新版は現在のアップデートされたFallout4に対応しているが旧バージョンには非対応
 Skyrimで存在してFallout4で何故か消えた関数の一部がこの拡張プラグインで使えるようになる。
クロスヘア上のアクターに対して特定のキーを押す事で何かのアクションをするというスクリプトを作る場合は必須。
(ただ、ダウンロードサイトはnexusとは別サイトでそちらもダウンロードのためにアカウント登録する必要がある)
 
クロスヘア関係はPapyrus Common Library、
HexToIntやIntToHex等はLighthouse Papyrus Extenderで代用可能。
 

Game.GetPlayerFollowers関数の仕様

現在コンパニオンになっているアクターではなくプレイヤーに追従しているアクター達を配列で返す。だが、待機命令で待機してたり戦闘中だと配列に含まれないためOblivionやSkyrim(要powerofthree's papyrus extender)の類似関数と同じ感覚で使うと痛い目を見る。(OblivionのGetNumFollowersはちゃんと取得できてたのに…GetCurrentCrosshairRef関数の件もそうだがスクリプト関連は何で一部退化しとるんだ…)

SUP F4SEがあれば周囲のアクターを取得できる関数が存在するため下記のコードで取得できる。(スクリプトエンジンもSkyrimよりマシになった感じはするが負荷がありそうだから多様は禁物。)

Actor[] Function GetFollowers()
    Cell pCell = Game.GetPlayer().GetParentCell()
    Actor[] followers = new Actor[0]
    Actor[] acts = SUP_F4SE.GetActorsInCell(pCell)
    int i = 0
    while (i < acts.length)
        if acts[i].IsPlayerTeammate()
            followers.add(acts[i])
        endif
        i += 1
    endWhile
    return followers
EndFunction

※近年ならばGarden of Eden Papyrus Script Extenderのアクター取得系で何とかなるかもしれない。

2020年4月29日水曜日

更新のお知らせ 2020/04/28 5/4追加修正

要望内容の対応、及び不具合の修正、修正が完了しました。
今回の修正で範囲攻撃アイテムが大幅に修正されております。
特にカスタムパラメータ未設定時のデフォルト値が変更されているため、スクリプトを既に使用している方は注意してください。(EffectRangeItemDefault.jsで変更可能)

5/4追加修正:
敵が大勢いるマップで処理が重くなるという報告があり確認。
AI処理で確実に範囲外にいるキャラに対するスコアチェック処理をスキップして、処理を軽減するように修正。
また、無差別系で敵味方が周囲に入り乱れてると被害の出さない場所にアイテムを使用できる場合でも使用しない可能性があったため処理を修正。

■範囲攻撃アイテム

-----要望-----
●命中率100%の指定
IER_HitValueの数値に関わらず必中指定ができるようにして欲しい

→新しいカスタムパラメータ:IER_HitMarkを追加

●効果範囲『全域』の指定
効果範囲について全域指定できるようにして欲しい。

→カスタムパラメータ:IER_EffectRangeTypeに99を指定で可能
 
●効果音を重複させない
HP回復やステート回復など一度に対象全員のエフェクト(効果音)が発生する場合
人数分の音が重なって音がかなり大きくなってしまうので
『効果音は一人分しか鳴らさない』のような指定が可能にして欲しい。

新しいカスタムパラメータ:IER_SoundDuplicateを追加、重複するのはtrueに設定した時のみに修正。(未設定時のデフォルトはfalse)


-----以下、それ以外で修正した内容------
●敵が範囲攻撃アイテムを使う時のAI処理を大幅修正。処理速度が大幅に改善。  (まだ見直しの余地ありだが前よりも余程マシになってるためリリース)

最低限のカスタムパラメータ(威力[IER_Value])で汎用的に動作するようにデフォルト値を見直し。デフォルト値を定義したファイル、EffectRangeItemDefault.jsを作成。
 
●色々煮詰まってた説明ウィンドウを修正、game.iniの[keyboard]のSYSTEMで指定したキー(デフォルト:左shift)で表示切替可能にして、有効射程と有効範囲はマスを表示して範囲が分かりやすくなるようにした。


●効果範囲内のキャラへのダメージや命中率が表示されるように修正、
game.iniの[keyboard]のSYSTEMで指定したキー(デフォルト:左shift)で表示切替可能




●範囲効果のタイプに四角(ボックス)型を追加。
 
●効果範囲のタイプでブレス型の場合、カーソルを使用者の斜めに移動すると極端な処理落ちが発生する問題を修正。 

●効果範囲のタイプをブレス型にした場合、射程タイプを強制的に十字型になるように。
 ●カスタムパラメータ:IER_HitReflection(ユニットの技を命中率に加算、武器の命中値を命中率に加算)について、指定が非常にややこしいため、パラメータをIER_HitReflectionUnit、IER_HitReflectionWeaponに分割。(旧型式、新方式どちらの指定でも可能です)

2020年3月29日日曜日

更新のお知らせ 2020/03/29

要望の対応及び修正を行いました。

■スキル発動条件
コマンドスキルでなくてもクールタイムの設定を可能に修正。

クールタイムが設定されているスキル使用後のクールタイム中
ユニットのステータス画面のスキルアイコンが薄暗くなり、
スキルアイコン下部とスキルウィンドウ内に再使用までのターン数が表示されるように修正。

持続ターン数が設定されているコマンドスキル使用時に
ユニットのステータス画面のスキルアイコンが点滅し、アイコン上部に持続ターン数が表示されるように修正。

2020年2月23日日曜日

不具合修正完了 2020/02/23

下記の不具合の対応が完了しました。

■範囲攻撃アイテム
OT_Recoveryをtrueにしての範囲回復時に使用者が対象に含まれていた場合、
使用者に対する回復処理が二回行われていた問題を修正。
取得経験値についてreadmeに効果範囲内に対象が複数いた場合等の記載が無かったため追記。

2020年1月7日火曜日

不具合修正完了 2020/01/07

下記の不具合及び要望の対応が完了しました。

■スキル発動条件追加
イベントコマンド「強制戦闘」においてスキル発動が許可されない。

2020年1月1日水曜日

更新のお知らせ 2020/01/01

スクリプトの更新を行いました。

■スキル発動条件
一部の公式スクリプトの同種スキルを複数持っていた場合に発動率が一番高いものだけを発動チェックする処理を
カスパラで優先度指定したものを優先して優先度順に発動チェックするように修正

◆同種スキルを複数持っていた場合に優先度順に発動チェックが有効になるスキル
先制攻撃、連続攻撃、ダメージ吸収、攻撃が必ず当たる、反撃時にクリティカル、ダメージガード(元はID順で発動チェック)、不死身
カスタムスキルでSkillControl.checkAndPushCustomSkillで発動チェックを行っているもの

コマンドスキルで発動する連続攻撃を二種類(2回攻撃、3回攻撃)を持っていたとすると
片方のスキルがコマンドスキルで選択しても絶対発動しないという状態が発生するのでそれを防ぐため。
発動率に指定したパラメータを発動率に加えるカスパラを追加。

■追加スキル
スキル所有者の攻撃力と攻撃対象の防御力をカスタムパラメータで指定した
ステータスに依存したものになるスキルを追加。

今回の更新で仕様上、他者製作者様のカスタムスクリプトと併用する場合に競合の可能性が大きくなったものがありますので他者製作者様のカスタムスクリプトと併用する場合はフォルダ名の変更による読込順の調整やスクリプト記述のマージ等で調整お願いします。

2019年12月9日月曜日

不具合修正完了 2019/12/09

下記の不具合の対応が完了しました。

■スキル発動条件追加
2019/10/06で修正した部分が再発生していたため修正。
2019/11/19の更新以降に初期メンバーにパラメータボーナスのスキルを持たせるとゲーム開始時の難易度選択時にエラーが発生、また拠点でパラメータボーナスのスキルを持ったキャラの詳細確認時にエラーが発生する問題を修正。
攻撃型のコマンドスキルを選択時に選択したスキルの発動条件の距離と武器の射程が合わない時にスキル選択後からの武器一覧に出ないように修正。