Baldur's Gate 3 Mod作例 ぼくのかんがえたさいきょうのそうび

Baldur's Gate 3のMod作成に関してはbg3.wikiのModding resourcesを筆頭に充実した情報があり作例やツールも豊富なため英語を読む気さえあれば難しくはない。
しかし手間であることは間違いなく簡単に装備を作れたりすると楽しいよなと思っていたところまさにその情報があったので試した結果をまとめておく。

今回の手法は既存の装備の性能を変更することに特化したもので新たな装備を追加したりはできない。
情報元はNexusのHack Your Equipmentでこれを読んで実際に試した結果を日本語でまとめたのがこの記事になる。

結論としては装備の性能を変更すること自体は一つのテキストファイルを編集するだけなので簡単なのだがそれなりに準備が必要で制限もあり普通にModを作ったほうが良い場合も多そう。
面倒なところを自動化するスクリプト(後述のUnpack.ps1)を書いたのでそれを使うなら手軽にはなる。

注意点

  • 前述のHack Your Equipmentで配布されているものは使わずゲームファイルから抽出して用意することを前提に進める
    • ちょっと試してみるだけならMethod 2 Mod Filesのファイルを使いつつDocumentationを読んで装備を改造すれば良いがファイルが古いのでどこかで問題が発生する可能性がある
  • Unpack.ps1から呼んでいるLSLibには.NETのフレームワークが必要。winget install dotnet-runtime-8するか.NET 8.0 (Linux、macOS、Windows) をダウンロードするからデスクトップ ランタイムを入手する
  • アップデートが来た場合Unpack.ps1を再び実行して最新のゲームデータに追従する必要がある
  • 装備の説明文の変更はできない

準備

LSLibを展開しておき、Unpack.ps1を実行してLSLibのTools内にあるDivine.exeを選択するとしばらく待たされたのちC:\Program Files (x86)\Steam\SteamApps\common\Baldur's Gate 3\Data\Public\GustavDev\Stats\Generated\Data\にArmor.txt, Weapon.txt, Z.txtが配置される。
Z.txtに装備の定義を追加することで既存の装備の編集が可能になり、後述の例が記述済みなのですぐにゲーム内で試すこともできる。

変更元装備を決める

Items - Baldur's Gate 3 Wikiからページを辿って探し個別ページでUUIDを得ると良い。
後述のBaldur's Gate 3 Modder's MultitoolのIndex SearchでUUIDを検索すると装備が見つかるのでZ.txtにコピーして雛形とする。
日本語名から探したい場合はバルダーズ・ゲート3 対訳表 | Baldur's Gate 3 bilingual tableが使える。

追加効果を探す

BoostやPassiveはz Baldur's Gate 3 - Page 77 - FearLess Cheat Engineに一覧がある。
これらの効果をArmor.txtやWeapon.txtの記述を元にZ.txtに書き込んでいくことで装備を編集することができる。

全ゲームデータから情報を検索する

Baldur's Gate 3 Modder's Multitoolを使うとあらゆるゲームデータを検索できる。
メニューからConfiguration => bg3.exe locationを設定した後Utilities => Index => Index Pak Filesする。
Search Indexを使うとアイテムのUUIDからPassiveを辿って行って目的の効果を見つけるといったことができる。

Baldur's Gate 3 Script Extenderを用いて装備を呼び出す

導入しておくだけでもModを使っていても実績が解除されるなどの便利機能を備えるBG3SEだがBG3SE-Updater-with-Console-********.zipのコンソール付きを使うと簡単にあらゆるアイテムを入手できる。
ゲームを起動すると別ウインドウで開くコンソールでエンターを押して入力モードに入りTemplateAddTo("UUID", GetHostCharacter(), 1)とするとインベントリに指定したUUIDのアイテムが1つ入る。
必要なだけアイテムを入手したらexitで抜ける。

つよいダガー (+3, 筋力24, ダメージ筋力修正値2倍, 攻撃・ダメージロール有利, クリティカルに必要なロール-3, 毎ターンBAで霧渡り使用可能)

TemplateAddTo("569b0f3d-abcd-4b01-aaf0-979091288163", GetHostCharacter(), 1)

new entry "Z_MistyStep"
type "SpellData"
data "SpellType" "Target"
using "Target_MistyStep"
data "Cooldown" "OncePerTurn"
data "UseCosts" "BonusActionPoint:1"

new entry "Z_Dagger_Passive"
type "PassiveData"
data "Boosts" "ReduceCriticalAttackThreshold(3);Advantage(AttackRoll);Advantage(AttackTarget);AbilityOverrideMinimum(Strength, 24)"

new entry "WPN_Dagger"
type "Weapon"
using "_BaseWeapon"
data "RootTemplate" "569b0f3d-abcd-4b01-aaf0-979091288163"
data "Damage Type" "Piercing"
data "Damage" "1d4"
data "ValueScale" "0.5"
data "Weight" "0.45"
data "Weapon Group" "SimpleMeleeWeapon"
data "Weapon Properties" "Finesse;Light;Thrown;Melee;Dippable"
data "Proficiency Group" "Daggers;SimpleWeapons"
data "BoostsOnEquipMainHand" "UnlockSpell(Target_PiercingThrust);UnlockSpell(Z_MistyStep)"
data "Rarity" "Legendary"
data "DefaultBoosts" "WeaponEnchantment(3);WeaponProperty(Magical);WeaponDamage(StrengthModifier, Piercing)"
data "PassivesOnEquip" "Z_Dagger_Passive"

もっと守る外套 (AC+2, セーヴィング・スロー+2, 毎ターン1d4HP回復, 敵の攻撃ロール不利)

TemplateAddTo("602f62dd-0fba-4438-ad68-b846f17ac538", GetHostCharacter(), 1)

new entry "MAG_PHB_CloakOfProtection_Cloak"
type "Armor"
using "_Back_Magic"
data "RootTemplate" "602f62dd-0fba-4438-ad68-b846f17ac538"
data "ValueLevel" "7"
data "Rarity" "Legendary"
data "Boosts" "AC(2);RollBonus(SavingThrow, 2)"
data "PassivesOnEquip" "MAG_PHB_OfRegeneration_Ring_Passive;MAG_PHB_Displacement_Cloak_Passive"
data "StatusOnEquip" "MAG_PHB_CLOAK_OF_DISPLACEMENT_TECHNICAL"

ヘイストアミュレット (常時ヘイスト)

TemplateAddTo("8bba4a7c-a7df-4d1f-b202-286522a028fa", GetHostCharacter(), 1)

new entry "ARM_Amulet_Necklace_A_Bronze_Green"
type "Armor"
using "ARM_Amulet_Bronze"
data "RootTemplate" "8bba4a7c-a7df-4d1f-b202-286522a028fa"
data "StatusOnEquip" "MAG_CELESTIAL_HASTE"

付録

もっと直接的なチートとしては前述のコンソールでApplyStatus(GetHostCharacter(), "MAG_CELESTIAL_HASTE", -1)などしてキャラクターに直接付与できる。