From 37fc4b9298340a1ebae9f79f456ce25c6f1c9d66 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 29 Oct 2024 07:24:28 -0700 Subject: [PATCH 01/85] tweak tabletop section descriptions --- SolastaUnfinishedBusiness/Translations/de/Settings-de.txt | 6 +++--- SolastaUnfinishedBusiness/Translations/en/Settings-en.txt | 6 +++--- SolastaUnfinishedBusiness/Translations/es/Settings-es.txt | 6 +++--- SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt | 6 +++--- SolastaUnfinishedBusiness/Translations/it/Settings-it.txt | 6 +++--- SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt | 6 +++--- SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt | 6 +++--- .../Translations/pt-BR/Settings-pt-BR.txt | 6 +++--- SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt | 6 +++--- .../Translations/zh-CN/Settings-zh-CN.txt | 6 +++--- 10 files changed, 30 insertions(+), 30 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 3c6b8aff2a..947b8bbecf 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -232,7 +232,7 @@ ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Unsichtbare Kr ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ magisch verborgene Bereiche in Projektilblocker ändern [jede Quelle des Zaubereffekts Dunkelheit] ModUi/&OfficialObscurementRulesTweakMonsters=+ Füge Monstern und NPCs bei Bedarf Dunkelsicht, Blindsicht und Wahrsicht hinzu ModUi/&OfficialObscurementRulesTweakMonstersHelp=[Einstellungssammlungen Monster, die über Dunkelsicht verfügen sollten, Monster, die über echte Sicht verfügen sollten, Monster, die über blinde Sicht verfügen sollten] -ModUi/&OneDnd=Tabletop [One DnD, 2024]: +ModUi/&OneDnd=Tischplatte [5e 2024]: ModUi/&OneDndHealingPotionBonusAction=Aktiviere Bonusaktionen bei der Verwendung von Heiltränken und Gegengift. ModUi/&OnlyShowMostPowerfulUpcastConjuredElementalOrFey=+ Nur die mächtigsten Kreaturen in der Beschwörungsliste anzeigen ModUi/&OutlineGridWidthModifier=Multiplizieren Sie die Breite des Umrissgitters mit [%] @@ -296,9 +296,9 @@ ModUi/&Subraces=Unterrassen ModUi/&SwapCraftedItemAndRecipeIcons=+ Rezepte und Symbole für hergestellte Gegenstände im Shop austauschen ModUi/&SwapEvocationPotentCantripAndSculptSpell=Tauschen Sie die Funktionen Evoker Sculpt Spells und Potent Cantrip aus ModUi/&TableTopButton=Tabletop-Inhalt auswählen -ModUi/&TableTopHelp1=• In den folgenden Abschnitten werden die im Mod verstreuten Einstellungen für Classic und One DnD neu gruppiert und dupliziert, damit Sie es einfacher haben. +ModUi/&TableTopHelp1=• In den folgenden Abschnitten werden die im Mod verstreuten Einstellungen für 5e 2014 und 2024 neu gruppiert und dupliziert, damit Sie es einfacher haben ModUi/&TableTopHelp2=• Drücken Sie die Taste, um unter der Registerkarte „Charakter“ nur Tabletop-Inhalte auszuwählen, und wählen Sie alle Optionen darunter für ein echtes TT-Erlebnis aus -ModUi/&Tabletop=Tabletop [Klassisches DnD, 2014]: +ModUi/&Tabletop=Tabletop [5e 2014]: ModUi/&TargetLanguage=Zielsprache ModUi/&TotalCraftingTimeModifier=Reduzieren Sie die Herstellungszeit um ModUi/&TotalFeatsGrantedFirstLevel=Insgesamt die auf der ersten Stufe verliehenen Talente diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index f0c8f06956..295a9bce1b 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -232,7 +232,7 @@ ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Invisible crea ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ Change magically obscured areas to be projectile blockers [any source of the Darkness spell effect] ModUi/&OfficialObscurementRulesTweakMonsters=+ Add Darkvision, BlindSight, and TrueSight to monsters and NPCs whenever appropriate ModUi/&OfficialObscurementRulesTweakMonstersHelp=[settings' collections MonstersThatShouldHaveDarkvision, MonstersThatShouldHaveTrueSight, MonstersThatShouldHaveBlindSight] -ModUi/&OneDnd=Tabletop [One DnD, 2024]: +ModUi/&OneDnd=Tabletop [5e 2024]: ModUi/&OneDndHealingPotionBonusAction=Enable bonus action on Healing Potions and Antitoxin usages ModUi/&OnlyShowMostPowerfulUpcastConjuredElementalOrFey=+ Only show the most powerful creatures in the conjuration list ModUi/&OutlineGridWidthModifier=Multiply the outline grid width by [%] @@ -296,9 +296,9 @@ ModUi/&Subraces=Subraces ModUi/&SwapCraftedItemAndRecipeIcons=+ Swap recipe and crafted item icons in shop ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip features ModUi/&TableTopButton=Select Tabletop content -ModUi/&TableTopHelp1=• Following sections re-group and duplicate Classic and One DnD settings scattered across the mod for your convenience +ModUi/&TableTopHelp1=• Following sections re-group and duplicate 5e 2014 and 2024 settings scattered across the mod for your convenience ModUi/&TableTopHelp2=• Press the button to select only tabletop content under Character tab, and select all options below for a true TT experience -ModUi/&Tabletop=Tabletop [Classic DnD, 2014]: +ModUi/&Tabletop=Tabletop [5e 2014]: ModUi/&TargetLanguage=Target Language ModUi/&TotalCraftingTimeModifier=Reduce crafting time by ModUi/&TotalFeatsGrantedFirstLevel=Total feats granted at first level diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 2726603135..0af1b6ab35 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -233,7 +233,7 @@ ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Las criaturas ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ Cambiar las áreas oscuras mágicamente para que sean bloqueadores de proyectiles [cualquier fuente del efecto del hechizo Oscuridad] ModUi/&OfficialObscurementRulesTweakMonsters=+ Agrega Visión en la oscuridad, Vista ciega y Vista verdadera a monstruos y PNJ cuando sea apropiado ModUi/&OfficialObscurementRulesTweakMonstersHelp=[colecciones de configuraciones MonstruosQueDeberíanTenerVisiónOscura, MonstruosQueDeberíanTenerVistaVerdadera, MonstruosQueDeberíanTenerVistaCiego] -ModUi/&OneDnd=Mesa de juego [One DnD, 2024]: +ModUi/&OneDnd=Mesa [5e 2024]: ModUi/&OneDndHealingPotionBonusAction=Habilitar la acción adicional en los usos de Pociones curativas y Antitoxina ModUi/&OnlyShowMostPowerfulUpcastConjuredElementalOrFey=+ Mostrar solo las criaturas más poderosas en la lista de conjuración ModUi/&OutlineGridWidthModifier=Multiplica el ancho de la cuadrícula del contorno por [%] @@ -297,9 +297,9 @@ ModUi/&Subraces=Subrazas ModUi/&SwapCraftedItemAndRecipeIcons=+ Intercambia íconos de recetas y objetos elaborados en la tienda ModUi/&SwapEvocationPotentCantripAndSculptSpell=Intercambia las características de Evocador, Hechizos de escultura y Truco potente ModUi/&TableTopButton=Seleccionar contenido de Tabletop -ModUi/&TableTopHelp1=• Las siguientes secciones reagrupan y duplican las configuraciones Clásicas y One DnD esparcidas por el mod para tu conveniencia. +ModUi/&TableTopHelp1=• Las siguientes secciones reagrupan y duplican las configuraciones de 5e 2014 y 2024 esparcidas por el mod para tu conveniencia. ModUi/&TableTopHelp2=• Presiona el botón para seleccionar solo contenido de mesa en la pestaña Personaje y selecciona todas las opciones a continuación para una verdadera experiencia TT -ModUi/&Tabletop=Juego de mesa [DnD clásico, 2014]: +ModUi/&Tabletop=Mesa de trabajo [5e 2014]: ModUi/&TargetLanguage=Lengua de llegada ModUi/&TotalCraftingTimeModifier=Reducir el tiempo de elaboración ModUi/&TotalFeatsGrantedFirstLevel=Total de dotes otorgados en el primer nivel diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index fd142c6dfe..a19d1b3675 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -232,7 +232,7 @@ ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Les créatures ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ Changez les zones obscurcies par magie en bloqueurs de projectiles [toute source de l'effet du sort Ténèbres] ModUi/&OfficialObscurementRulesTweakMonsters=+ Ajoutez Darkvision, BlindSight et TrueSight aux monstres et aux PNJ lorsque cela est approprié ModUi/&OfficialObscurementRulesTweakMonstersHelp=[collections de paramètres MonstersThatShouldHaveDarkvision, MonstersThatShouldHaveTrueSight, MonstersThatShouldHaveBlindSight] -ModUi/&OneDnd=Jeux de société [One DnD, 2024] : +ModUi/&OneDnd=Jeux de société [5e 2024] : ModUi/&OneDndHealingPotionBonusAction=Activer l'action bonus sur les utilisations de potions de soins et d'antitoxines ModUi/&OnlyShowMostPowerfulUpcastConjuredElementalOrFey=+ Afficher uniquement les créatures les plus puissantes dans la liste de conjuration ModUi/&OutlineGridWidthModifier=Multipliez la largeur de la grille de contour par [%] @@ -296,9 +296,9 @@ ModUi/&Subraces=Sous-races ModUi/&SwapCraftedItemAndRecipeIcons=+ Échangez les icônes de recettes et d'objets fabriqués dans la boutique ModUi/&SwapEvocationPotentCantripAndSculptSpell=Échangez les fonctionnalités Évocateur Sculpture des sorts et Puissant tour de passe-passe ModUi/&TableTopButton=Sélectionnez le contenu de la table -ModUi/&TableTopHelp1=• Les sections suivantes regroupent et dupliquent les paramètres Classic et One DnD dispersés dans le mod pour votre commodité +ModUi/&TableTopHelp1=• Les sections suivantes regroupent et dupliquent les paramètres 5e 2014 et 2024 dispersés dans le mod pour votre commodité ModUi/&TableTopHelp2=• Appuyez sur le bouton pour sélectionner uniquement le contenu de table sous l'onglet Personnage et sélectionnez toutes les options ci-dessous pour une véritable expérience TT -ModUi/&Tabletop=Jeux de société [DnD classique, 2014] : +ModUi/&Tabletop=Jeux de société [5e 2014] : ModUi/&TargetLanguage=Langue cible ModUi/&TotalCraftingTimeModifier=Réduisez le temps de fabrication de ModUi/&TotalFeatsGrantedFirstLevel=Total des exploits accordés au premier niveau diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 709211cfd5..eca7e2fbb7 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -232,7 +232,7 @@ ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Le creature in ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ Cambia le aree oscurate magicamente in bloccanti proiettili [qualsiasi fonte dell'effetto dell'incantesimo Oscurità] ModUi/&OfficialObscurementRulesTweakMonsters=+ Aggiungi Visione Oscura, Vista Cieca e Vista Vera a mostri e PNG quando appropriato ModUi/&OfficialObscurementRulesTweakMonstersHelp=[raccolte di impostazioni MonstersThatShouldHaveDarkvision, MonstersThatShouldHaveTrueSight, MonstersThatShouldHaveBlindSight] -ModUi/&OneDnd=Gioco da tavolo [One DnD, 2024]: +ModUi/&OneDnd=Tavolo [5e 2024]: ModUi/&OneDndHealingPotionBonusAction=Abilita l'azione bonus sugli utilizzi di Pozioni curative e Antitossina ModUi/&OnlyShowMostPowerfulUpcastConjuredElementalOrFey=+ Mostra solo le creature più potenti nell'elenco delle evocazioni ModUi/&OutlineGridWidthModifier=Moltiplica la larghezza della griglia del contorno per [%] @@ -296,9 +296,9 @@ ModUi/&Subraces=Sottorazze ModUi/&SwapCraftedItemAndRecipeIcons=+ Scambia le icone delle ricette e degli oggetti realizzati nel negozio ModUi/&SwapEvocationPotentCantripAndSculptSpell=Scambia le funzionalità Sculpt Spells e Potent Cantrip di Evoker ModUi/&TableTopButton=Seleziona contenuto Tabletop -ModUi/&TableTopHelp1=• Le sezioni seguenti raggruppano e duplicano le impostazioni Classico e One DnD sparse nella mod per la tua comodità +ModUi/&TableTopHelp1=• Le sezioni seguenti raggruppano e duplicano le impostazioni 5e 2014 e 2024 sparse nella mod per la tua comodità ModUi/&TableTopHelp2=• Premi il pulsante per selezionare solo il contenuto del tavolo nella scheda Personaggio e seleziona tutte le opzioni sottostanti per una vera esperienza TT -ModUi/&Tabletop=Gioco da tavolo [DnD Classico, 2014]: +ModUi/&Tabletop=Da tavolo [5e 2014]: ModUi/&TargetLanguage=Lingua di destinazione ModUi/&TotalCraftingTimeModifier=Riduci il tempo di creazione di ModUi/&TotalFeatsGrantedFirstLevel=Totale talenti concessi al primo livello diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 30afa31dc5..fabb9b270e 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -232,7 +232,7 @@ ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ 不可視の ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ 魔法で隠された領域を、発射物ブロッカー [闇 呪文効果の任意のソース] ModUi/&OfficialObscurementRulesTweakMonsters=+ 必要に応じてモンスターと NPC に Darkvision、BlindSight、TrueSight を追加します ModUi/&OfficialObscurementRulesTweakMonstersHelp=[設定のコレクション MonstersThatShouldHaveDarkvisionMonstersThatShouldHaveTrueSightMonstersThatShouldHaveBlindSight] -ModUi/&OneDnd=テーブルトップ [One DnD、2024]: +ModUi/&OneDnd=テーブルトップ [5e 2024]: ModUi/&OneDndHealingPotionBonusAction=治癒ポーションと解毒剤の使用時にボーナスアクションを有効にする ModUi/&OnlyShowMostPowerfulUpcastConjuredElementalOrFey=+ 召喚リストに最も強力なクリーチャーのみを表示する ModUi/&OutlineGridWidthModifier=アウトライングリッドの幅を [%] で乗算します @@ -296,9 +296,9 @@ ModUi/&Subraces=亜種族 ModUi/&SwapCraftedItemAndRecipeIcons=+ ショップでレシピとクラフトアイテムのアイコンを交換 ModUi/&SwapEvocationPotentCantripAndSculptSpell=エヴォーカーのスカルプトスペルポテンシャルキャントリップの機能を入れ替えます ModUi/&TableTopButton=テーブルトップコンテンツを選択 -ModUi/&TableTopHelp1=• 次のセクションでは、利便性のために、mod 全体に散らばっている Classic と One DnD の設定を再グループ化して複製します。 +ModUi/&TableTopHelp1=• 以下のセクションでは、利便性のために、mod 全体に散らばっている 5e 2014 および 2024 設定を再グループ化して複製します。 ModUi/&TableTopHelp2=• ボタンを押してキャラクタータブのテーブルトップコンテンツのみを選択し、以下のすべてのオプションを選択して真のTT体験を味わってください。 -ModUi/&Tabletop=テーブルトップ [クラシック DnD、2014]: +ModUi/&Tabletop=テーブルトップ [5e 2014]: ModUi/&TargetLanguage=対象言語 ModUi/&TotalCraftingTimeModifier=クラフト時間を短縮 ModUi/&TotalFeatsGrantedFirstLevel=第 1 レベルで付与される 特技 の合計 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 1c7e041be6..278aba507a 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -232,7 +232,7 @@ ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ 보이지 않 ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ 마법적으로 가려진 영역을 투사체 차단 장치로 변경 [어둠 주문 효과의 모든 소스] ModUi/&OfficialObscurementRulesTweakMonsters=+ 적절한 경우 몬스터와 NPC에게 암흑 시야, 맹시력, 진시력을 추가합니다. ModUi/&OfficialObscurementRulesTweakMonstersHelp=[설정 컬렉션 어둠의 시야를 가져야 하는 괴물, 진정한 시야를 가져야 하는 괴물, 눈먼 시야를 가져야 하는 괴물] -ModUi/&OneDnd=테이블탑 [원 던전앤드, 2024]: +ModUi/&OneDnd=테이블탑[5e 2024]: ModUi/&OneDndHealingPotionBonusAction=치유 물약과 항독소 사용 시 보너스 액션을 활성화합니다. ModUi/&OnlyShowMostPowerfulUpcastConjuredElementalOrFey=+ 소환 목록에서 가장 강력한 생물만 표시합니다. ModUi/&OutlineGridWidthModifier=윤곽선 그리드 너비를 [%]로 곱합니다. @@ -296,9 +296,9 @@ ModUi/&Subraces=아종 ModUi/&SwapCraftedItemAndRecipeIcons=+ 상점에서 레시피와 제작 아이템 아이콘 교환 ModUi/&SwapEvocationPotentCantripAndSculptSpell=소환사 조각 주문강력한 주문 기능을 교체하세요 ModUi/&TableTopButton=테이블탑 콘텐츠 선택 -ModUi/&TableTopHelp1=• 다음 섹션은 편의를 위해 모드 전체에 분산된 클래식 및 원 DnD 설정을 다시 그룹화하고 복제합니다. +ModUi/&TableTopHelp1=• 다음 섹션은 편의를 위해 모드 전체에 분산된 5e 2014 및 2024 설정을 다시 그룹화하고 복제합니다. ModUi/&TableTopHelp2=• 캐릭터 탭에서 테이블탑 콘텐츠만 선택하려면 버튼을 누르고, 진정한 TT 경험을 위해 아래의 모든 옵션을 선택하세요. -ModUi/&Tabletop=테이블탑 [클래식 DnD, 2014]: +ModUi/&Tabletop=테이블탑[5e 2014]: ModUi/&TargetLanguage=대상 언어 ModUi/&TotalCraftingTimeModifier=제작 시간을 다음과 같이 줄이세요. ModUi/&TotalFeatsGrantedFirstLevel=1레벨에서 부여된 총 특기 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 8db297899b..1e8c59e6c1 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -232,7 +232,7 @@ ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Criaturas invi ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ Alterar áreas magicamente obscurecidas para serem bloqueadores de projéteis [qualquer fonte do efeito do feitiço Escuridão] ModUi/&OfficialObscurementRulesTweakMonsters=+ Adicione Visão no Escuro, Visão Cega e Visão Verdadeira aos monstros e PNJs sempre que apropriado ModUi/&OfficialObscurementRulesTweakMonstersHelp=[configurações de coleções MonstrosQueDeveriamTerVisãoNoEscuro, MonstrosQueDeveriamTerVisãoVerdadeira, MonstrosQueDeveriamTerVisãoCega] -ModUi/&OneDnd=Mesa [One DnD, 2024]: +ModUi/&OneDnd=Mesa [5e 2024]: ModUi/&OneDndHealingPotionBonusAction=Habilitar ação bônus em usos de Poções de Cura e Antitoxina ModUi/&OnlyShowMostPowerfulUpcastConjuredElementalOrFey=+ Mostrar apenas as criaturas mais poderosas na lista de conjuração ModUi/&OutlineGridWidthModifier=Multiplique a largura da grade de contorno por [%] @@ -296,9 +296,9 @@ ModUi/&Subraces=Sub-raças ModUi/&SwapCraftedItemAndRecipeIcons=+ Troque ícones de receitas e itens criados na loja ModUi/&SwapEvocationPotentCantripAndSculptSpell=Troque os recursos Evocador Magias de Escultura e Truque Potente ModUi/&TableTopButton=Selecionar conteúdo de mesa -ModUi/&TableTopHelp1=• As seções a seguir reagrupam e duplicam as configurações Classic e One DnD espalhadas pelo mod para sua conveniência +ModUi/&TableTopHelp1=• As seções a seguir reagrupam e duplicam as configurações 5e 2014 e 2024 espalhadas pelo mod para sua conveniência ModUi/&TableTopHelp2=• Pressione o botão para selecionar apenas o conteúdo da mesa na aba Personagem e selecione todas as opções abaixo para uma verdadeira experiência TT -ModUi/&Tabletop=Mesa [DnD Clássico, 2014]: +ModUi/&Tabletop=Mesa [5e 2014]: ModUi/&TargetLanguage=Língua alvo ModUi/&TotalCraftingTimeModifier=Reduza o tempo de criação em ModUi/&TotalFeatsGrantedFirstLevel=Total de talentos concedidos no primeiro nível diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 623a108ce8..29dae66339 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -232,7 +232,7 @@ ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Невидим ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ Позволить магически заслонённой местности блокировать снаряды [любой источник эффекта заклинания Тьма] ModUi/&OfficialObscurementRulesTweakMonsters=+ Добавить Тёмное зрение, Слепое зрение и Истинное зрение монстрам и NPC, когда это целесообразно ModUi/&OfficialObscurementRulesTweakMonstersHelp=[списки MonstersThatShouldHaveDarkvision, MonstersThatShouldHaveTrueSight, MonstersThatShouldHaveBlindSight находятся в настройках] -ModUi/&OneDnd=OneDnD: +ModUi/&OneDnd=Столешница [5e 2024]: ModUi/&OneDndHealingPotionBonusAction=Включить использование Лечебных Зелий и Антитоксинов бонусным действием [OneDnd] ModUi/&OnlyShowMostPowerfulUpcastConjuredElementalOrFey=+ Показывать только самых мощных существ в списке призыва ModUi/&OutlineGridWidthModifier=Увеличить толщину контура сетки передвижения на множитель [%] @@ -296,9 +296,9 @@ ModUi/&Subraces=Подрасы ModUi/&SwapCraftedItemAndRecipeIcons=+ Заменить значок рецепта значком создаваемого предмета в магазине ModUi/&SwapEvocationPotentCantripAndSculptSpell=Поменять местами умения Волшебника школы Воплощения Построение заклинаний и Мощный заговор [OneDnd] ModUi/&TableTopButton=Выберите содержимое Tabletop -ModUi/&TableTopHelp1=• Следующие разделы перегруппированы и дублируют настройки Classic и One DnD, разбросанные по моду для вашего удобства. +ModUi/&TableTopHelp1=• Следующие разделы перегруппированы и дублируют настройки 5e 2014 и 2024, разбросанные по всему моду для вашего удобства. ModUi/&TableTopHelp2=• Нажмите кнопку, чтобы выбрать только настольный контент на вкладке «Персонаж», и выберите все параметры ниже, чтобы получить настоящий опыт TT -ModUi/&Tabletop=Настольные правила: +ModUi/&Tabletop=Столешница [5e 2014]: ModUi/&TargetLanguage=Язык перевода ModUi/&TotalCraftingTimeModifier=Уменьшить время крафта на ModUi/&TotalFeatsGrantedFirstLevel=Общее количество черт, получаемых на первом уровне diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 51032d40b2..b24b9b0b6c 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -232,7 +232,7 @@ ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ 隐形生物 ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ 将魔法遮蔽区域更改为投射物阻挡者[任何黑暗法术效果来源] ModUi/&OfficialObscurementRulesTweakMonsters=+ 在适当的情况下为怪物和 NPC 添加 Darkvision、BlindSight 和 TrueSight ModUi/&OfficialObscurementRulesTweakMonstersHelp=[设置的集合MonstersThatShouldHaveDarkvisionMonstersThatShouldHaveTrueSightMonstersThatShouldHaveBlindSight] -ModUi/&OneDnd=桌面游戏[One DnD, 2024]: +ModUi/&OneDnd=桌面[5e 2024]: ModUi/&OneDndHealingPotionBonusAction=启用治疗药水和解毒剂使用奖励行动 ModUi/&OnlyShowMostPowerfulUpcastConjuredElementalOrFey=+ 仅显示召唤列表中最强大的生物 ModUi/&OutlineGridWidthModifier=将轮廓网格宽度乘以 [%] @@ -296,9 +296,9 @@ ModUi/&Subraces=亚种 ModUi/&SwapCraftedItemAndRecipeIcons=+ 在商店中交换配方和制作物品图标 ModUi/&SwapEvocationPotentCantripAndSculptSpell=交换召唤师 塑形法术强效咒语功能 ModUi/&TableTopButton=选择桌面内容 -ModUi/&TableTopHelp1=• 以下部分重新分组并复制了分散在模块中的 Classic 和 One DnD 设置,以方便您使用 +ModUi/&TableTopHelp1=• 以下部分重新分组并复制了分散在模块中的 5e 2014 和 2024 设置,以方便您使用 ModUi/&TableTopHelp2=• 按下按钮仅选择角色选项卡下的桌面内容,并选择以下所有选项以获得真正的 TT 体验 -ModUi/&Tabletop=桌面游戏[经典 DnD,2014]: +ModUi/&Tabletop=桌面[5e 2014]: ModUi/&TargetLanguage=目标语言 ModUi/&TotalCraftingTimeModifier=减少制作时间 ModUi/&TotalFeatsGrantedFirstLevel=第一级授予的功绩总数 From 36e71773ccd6e6257cf84775e8c33c5c84c1235e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 29 Oct 2024 10:13:05 -0700 Subject: [PATCH 02/85] fix Wizard Graviturgist descriptions, SFX, and behaviors --- .../WizardGraviturgist.json | 2 +- ...nditionWizardGraviturgistEventHorizon.json | 158 ++---------------- ...onWizardGraviturgistEventHorizonSaved.json | 154 ++--------------- ...ionWizardGraviturgistEventHorizonSelf.json | 152 ++--------------- ...geWizardGraviturgistViolentAttraction.json | 2 +- ...nityWizardGraviturgistDensityDecrease.json | 4 +- .../PowerWizardGraviturgistEventHorizon.json | 33 +--- ...erWizardGraviturgistViolentAttraction.json | 4 +- ...owerWizardGraviturgistDensityDecrease.json | 6 +- ...owerWizardGraviturgistDensityIncrease.json | 4 +- Documentation/Subclasses.md | 8 +- .../Api/DatabaseHelper-RELEASE.cs | 3 + ...eatureDefinitionMovementAffinityBuilder.cs | 4 +- .../ChangelogHistory.txt | 10 ++ .../Subclasses/WizardGraviturgist.cs | 79 ++++++--- .../de/SubClasses/WizardGraviturgist-de.txt | 10 +- .../en/SubClasses/WizardGraviturgist-en.txt | 10 +- .../es/SubClasses/WizardGraviturgist-es.txt | 8 +- .../fr/SubClasses/WizardGraviturgist-fr.txt | 10 +- .../it/SubClasses/WizardGraviturgist-it.txt | 10 +- .../ja/SubClasses/WizardGraviturgist-ja.txt | 10 +- .../ko/SubClasses/WizardGraviturgist-ko.txt | 10 +- .../SubClasses/WizardGraviturgist-pt-BR.txt | 10 +- .../ru/SubClasses/WizardGraviturgist-ru.txt | 10 +- .../SubClasses/WizardGraviturgist-zh-CN.txt | 10 +- 25 files changed, 179 insertions(+), 542 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/CharacterSubclassDefinition/WizardGraviturgist.json b/Diagnostics/UnfinishedBusinessBlueprints/CharacterSubclassDefinition/WizardGraviturgist.json index 54bdc7264c..935cb249d1 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/CharacterSubclassDefinition/WizardGraviturgist.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/CharacterSubclassDefinition/WizardGraviturgist.json @@ -36,7 +36,7 @@ "morphotypeSubclassFilterTag": "Default", "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, + "hidden": false, "title": "Subclass/&WizardGraviturgistTitle", "description": "Subclass/&WizardGraviturgistDescription", "spriteReference": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWizardGraviturgistEventHorizon.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWizardGraviturgistEventHorizon.json index ec72e0987d..0db58e1f5d 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWizardGraviturgistEventHorizon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWizardGraviturgistEventHorizon.json @@ -7,8 +7,8 @@ "Definition:MovementAffinityWizardGraviturgistEventHorizon:90474524-85de-5766-8484-b84f2eb283eb" ], "allowMultipleInstances": false, - "silentWhenAdded": false, - "silentWhenRemoved": false, + "silentWhenAdded": true, + "silentWhenRemoved": true, "silentWhenRefreshed": false, "terminateWhenRemoved": false, "specialDuration": true, @@ -40,19 +40,19 @@ "additionalConditionTurnOccurenceType": "StartOfTurn", "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "14c7cbd4107c3da46bf04c894e4a61be", + "m_AssetGUID": "d8e73c164ff3dad4197a0e0830c6573e", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "2493405866ecdfb4290d962e2ee3ab92", + "m_AssetGUID": "b8867e443cbc9024db3ffd55201414b1", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "211c37507a1ae35419d899c49a2712a3", + "m_AssetGUID": "637c9a990c79eb249beaf07c80aae51a", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -65,146 +65,16 @@ "characterShaderReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "particlesBasedOnAncestryDamageType": false, "ancestryType": "Sorcerer", - "acidParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "coldParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "fireParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "lightningParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "poisonParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, "overrideCharacterShaderColors": false, "firstCharacterShaderColor": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", @@ -269,8 +139,8 @@ "description": "Condition/&ConditionWizardGraviturgistEventHorizonDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "c361725f0a278ea4bbef108455b7029d", - "m_SubObjectName": "ConditionProne", + "m_AssetGUID": "d89ea9eef65da0d46a12c4ff40481527", + "m_SubObjectName": "ConditionRestrained", "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWizardGraviturgistEventHorizonSaved.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWizardGraviturgistEventHorizonSaved.json index 6eb014f6e1..a14007625d 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWizardGraviturgistEventHorizonSaved.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWizardGraviturgistEventHorizonSaved.json @@ -42,19 +42,19 @@ "additionalConditionTurnOccurenceType": "StartOfTurn", "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "14c7cbd4107c3da46bf04c894e4a61be", + "m_AssetGUID": "d9377d04deadc8444adfc6f7c1e52424", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "2493405866ecdfb4290d962e2ee3ab92", + "m_AssetGUID": "fe51b1cfa45cd1f45b80259db41225b7", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "211c37507a1ae35419d899c49a2712a3", + "m_AssetGUID": "70b9b11d1ff7cd54babdb987562cd07e", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -67,146 +67,16 @@ "characterShaderReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "particlesBasedOnAncestryDamageType": false, "ancestryType": "Sorcerer", - "acidParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "coldParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "fireParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "lightningParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "poisonParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, "overrideCharacterShaderColors": false, "firstCharacterShaderColor": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", @@ -271,8 +141,8 @@ "description": "Condition/&ConditionWizardGraviturgistEventHorizonDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "c361725f0a278ea4bbef108455b7029d", - "m_SubObjectName": "ConditionProne", + "m_AssetGUID": "5d503f63f4583dd4a9bd2460a783a470", + "m_SubObjectName": "ConditionSlowed", "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWizardGraviturgistEventHorizonSelf.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWizardGraviturgistEventHorizonSelf.json index 7e8bd21cec..9bd64c30bb 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWizardGraviturgistEventHorizonSelf.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWizardGraviturgistEventHorizonSelf.json @@ -2,7 +2,7 @@ "$type": "ConditionDefinition, Assembly-CSharp", "inDungeonEditor": false, "parentCondition": null, - "conditionType": "Neutral", + "conditionType": "Beneficial", "features": [], "allowMultipleInstances": false, "silentWhenAdded": true, @@ -63,146 +63,16 @@ "characterShaderReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "particlesBasedOnAncestryDamageType": false, "ancestryType": "Sorcerer", - "acidParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "coldParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "fireParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "lightningParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "poisonParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, "overrideCharacterShaderColors": false, "firstCharacterShaderColor": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", @@ -220,7 +90,7 @@ }, "timeToWaitBeforeApplyingShader": 0.5, "timeToWaitBeforeRemovingShader": 0.5, - "possessive": true, + "possessive": false, "amountOrigin": "None", "baseAmount": 0, "additiveAmount": false, @@ -267,8 +137,8 @@ "description": "Condition/&ConditionWizardGraviturgistEventHorizonSelfDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "6de0173309bec82429f3ed8af187b216", - "m_SubObjectName": "ConditionProtectedBySpiritGuardians", + "m_AssetGUID": "cd10433f24101be46898ed600f8c537b", + "m_SubObjectName": "ConditionLightSensitiveSaboteur", "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageWizardGraviturgistViolentAttraction.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageWizardGraviturgistViolentAttraction.json index 6a506e6300..e7a6343ca9 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageWizardGraviturgistViolentAttraction.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageWizardGraviturgistViolentAttraction.json @@ -6,7 +6,7 @@ "targetSide": "Enemy", "otherSimilarAdditionalDamages": [], "triggerCondition": "AlwaysActive", - "requiredProperty": "MeleeWeapon", + "requiredProperty": "None", "attackModeOnly": false, "attackOnly": false, "requiredTargetCondition": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionMovementAffinity/MovementAffinityWizardGraviturgistDensityDecrease.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionMovementAffinity/MovementAffinityWizardGraviturgistDensityDecrease.json index 53aa240273..41328fbe87 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionMovementAffinity/MovementAffinityWizardGraviturgistDensityDecrease.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionMovementAffinity/MovementAffinityWizardGraviturgistDensityDecrease.json @@ -14,8 +14,8 @@ "expertClimber": false, "canMoveOnWalls": false, "canFlyWithWalkSpeed": false, - "enhancedJump": false, - "additionalJumpCells": 0, + "enhancedJump": true, + "additionalJumpCells": 2, "immuneDifficultTerrain": false, "disableVault": false, "disableDrop": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardGraviturgistEventHorizon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardGraviturgistEventHorizon.json index 7af7dcfe2b..266ee6f236 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardGraviturgistEventHorizon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardGraviturgistEventHorizon.json @@ -149,33 +149,6 @@ }, "hasFilterId": false, "filterId": 0 - }, - { - "$type": "EffectForm, Assembly-CSharp", - "formType": "Condition", - "addBonusMode": "None", - "applyLevel": "No", - "levelType": "ClassLevel", - "levelMultiplier": 1, - "diceByLevelTable": [], - "createdByCharacter": true, - "createdByCondition": false, - "hasSavingThrow": false, - "savingThrowAffinity": "None", - "dcModifier": 0, - "canSaveToCancel": false, - "saveOccurence": "EndOfTurn", - "conditionForm": { - "$type": "ConditionForm, Assembly-CSharp", - "conditionDefinitionName": "ConditionWizardGraviturgistEventHorizonSelf", - "conditionDefinition": "Definition:ConditionWizardGraviturgistEventHorizonSelf:a54f4e27-4cbb-515d-8383-f5d141a9151e", - "operation": "Add", - "conditionsList": [], - "applyToSelf": true, - "forceOnSelf": false - }, - "hasFilterId": false, - "filterId": 0 } ], "specialFormsDescription": "", @@ -204,7 +177,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "81dc5e854a40ec74fb48b370b138e9a6", + "m_AssetGUID": "cdf11ac678df7f34f9c8309eb2f3679d", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -264,13 +237,13 @@ }, "activeEffectCellStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "7d2783c8e25102444952ec2477f25af3", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, "activeEffectCellParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "758f023886ab7f24caaa7dbe1a1320fa", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardGraviturgistViolentAttraction.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardGraviturgistViolentAttraction.json index 6384d9f05e..2498c5cdc1 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardGraviturgistViolentAttraction.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardGraviturgistViolentAttraction.json @@ -115,7 +115,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "8406f9a9e5336d9409973b09f98dc308", + "m_AssetGUID": "9dfb44a8d0f0b674e9a3618c350d4956", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -139,7 +139,7 @@ }, "effectParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "f81fd5b28c470d347a62f87c715f2ad1", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerWizardGraviturgistDensityDecrease.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerWizardGraviturgistDensityDecrease.json index 64f3955f65..c2b4e738fd 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerWizardGraviturgistDensityDecrease.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerWizardGraviturgistDensityDecrease.json @@ -115,7 +115,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "4eb16aa6db9a2664a81e63fd64eb5dfc", + "m_AssetGUID": "6537657952d796e40a5c552d59322d7f", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -139,7 +139,7 @@ }, "effectParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "605357f7fa0e85f48a6569c9e6698f71", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -163,7 +163,7 @@ }, "impactParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "52ee42624c81fe04d9f2cde94161bef5", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerWizardGraviturgistDensityIncrease.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerWizardGraviturgistDensityIncrease.json index 97112912c8..4ec2019f13 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerWizardGraviturgistDensityIncrease.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerWizardGraviturgistDensityIncrease.json @@ -332,8 +332,8 @@ "description": "Feature/&PowerWizardGraviturgistDensityIncreaseDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "4055bc032261a0c44853f4f483238bd0", - "m_SubObjectName": "Bane", + "m_AssetGUID": "1c85316337127ff4c95a2d43f18d557e", + "m_SubObjectName": "Heroism", "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { diff --git a/Documentation/Subclasses.md b/Documentation/Subclasses.md index bb1fb17905..d24aa56dbd 100644 --- a/Documentation/Subclasses.md +++ b/Documentation/Subclasses.md @@ -7051,11 +7051,11 @@ Understanding and mastering the forces that draw bodies of matter together or dr * Decrease Density -You can use your action to decrease the density of a target, increasing its speed by 10 ft and making it able to make maximum distance jumps without risk, at the cost of disadvantage on Strength checks and saving throws. You can use this feature a number of times per short rest equal to your Intelligence modifier, and it shares the number of uses with Increase Density. +You can use your action to decrease the density of a creature you can see within 30 ft of you, increasing its walking speed and jumping distance by 10 ft and making it able to make maximum distance jumps without risk, at the cost of disadvantage on Strength checks and saving throws. You can use this feature a number of times per short rest equal to your Intelligence modifier, and it shares the number of uses with Increase Density. * Increase Density -You can use your action to increase the density of a target, reducing its speed by 10 ft at the benefit of advantage on Strength checks and saving throws. You can use this feature a number of times per short rest equal to your Intelligence modifier, and it shares the number of uses with Decrease Density. +You can use your action to increase the density of a creature you can see within 30 ft of you, reducing its speed by 10 ft at the benefit of advantage on Strength checks and saving throws. You can use this feature a number of times per short rest equal to your Intelligence modifier, and it shares the number of uses with Decrease Density. ### Level 6 @@ -7069,14 +7069,14 @@ Starting at 6th level, creatures hit by your spell attacks are pushed 1 cell awa * Violent Attraction -You can use your bonus action to increase the striking power of ally's weapons for 1 minute. The creature does an additional 1d10 damage with a weapon attack once during its turn. You can use this feature a number of times per long rest equal to your Intelligence modifier. +You can use your bonus action to increase the striking power of one ally that you can see within 60 ft of you for 1 minute. The creature does an additional 1d10 damage with a weapon or unarmed attack once during its turn. You can use this feature a number of times per long rest equal to your Intelligence modifier. ### Level 14 * Event Horizon -You can use your action to magically emit a powerful field of gravitational energy that tugs at other creatures for up to 1 minute. For the duration, whenever a creature hostile to you starts its turn within 30 feet of you, it must make a Strength saving throw against your spell save DC. On a failed save, it takes 2d10 force damage, and its speed is reduced to 0 until the start of its next turn. On a successful save, it takes half as much damage, and every foot it moves this turn costs 2 extra feet of movement. You can use this feature once per long rest +You can use your action to magically emit a powerful field of gravitational energy that tugs at other creatures for up to 1 minute. For the duration, whenever a creature hostile to you starts its turn within 30 feet of you, it must make a Strength saving throw against your spell save DC. On a failed save, it takes 2d10 force damage, and its speed is reduced to 0 until the start of its next turn. On a successful save, it takes half as much damage, and its speed is halved instead. You can use this feature once per long rest. diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index d8be430bf1..87c075251f 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -2193,6 +2193,9 @@ internal static class FeatureDefinitionPowers internal static FeatureDefinitionPower PowerSorcererHauntedSoulVengefulSpirits { get; } = GetDefinition("PowerSorcererHauntedSoulVengefulSpirits"); + internal static FeatureDefinitionPower PowerTraditionCourtMageExpandedSpellShield { get; } = + GetDefinition("PowerTraditionCourtMageExpandedSpellShield"); + internal static FeatureDefinitionPower PowerSorcererManaPainterDrain { get; } = GetDefinition("PowerSorcererManaPainterDrain"); diff --git a/SolastaUnfinishedBusiness/Builders/Features/FeatureDefinitionMovementAffinityBuilder.cs b/SolastaUnfinishedBusiness/Builders/Features/FeatureDefinitionMovementAffinityBuilder.cs index 934875f5ef..b835514017 100644 --- a/SolastaUnfinishedBusiness/Builders/Features/FeatureDefinitionMovementAffinityBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/Features/FeatureDefinitionMovementAffinityBuilder.cs @@ -56,9 +56,11 @@ internal FeatureDefinitionMovementAffinityBuilder SetClimbing( return this; } - internal FeatureDefinitionMovementAffinityBuilder SetAdditionalJumpCells(int additionalJumpCells) + internal FeatureDefinitionMovementAffinityBuilder SetAdditionalJumpCells( + int additionalJumpCells, bool enhancedJump = false) { Definition.additionalJumpCells = additionalJumpCells; + Definition.enhancedJump = enhancedJump; return this; } diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 79c152dfb3..f32b3cb933 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,3 +1,13 @@ +1.5.97.37: + +- fixed Wizard Graviturgist descriptions, SFX, and behaviors +- renamed mod UI tabletop sections to 5e 2014, and 5e 2024 + +KNOWN ISSUES: + +- Artillerist Force Ballista tiny cannon won't force disadvantage if defender is within 5 ft +- Chaos Bolt spell damage won't deal the correct damage type if under multiplayer, twinned, and one bolt misses + 1.5.97.36: - added behavior package choices on heroes controlled by AI [single player only] diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardGraviturgist.cs b/SolastaUnfinishedBusiness/Subclasses/WizardGraviturgist.cs index baa0d6a6f4..c5fd8a4c7b 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardGraviturgist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardGraviturgist.cs @@ -1,8 +1,12 @@ -using JetBrains.Annotations; +using System.Collections; +using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.CustomUI; +using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Properties; +using SolastaUnfinishedBusiness.Validators; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ConditionDefinitions; @@ -20,13 +24,13 @@ public WizardGraviturgist() // LEVEL 02 // Density Pool - + var powerDensity = FeatureDefinitionPowerBuilder .Create($"Power{Name}Density") .SetGuiPresentationNoContent(true) .SetUsesAbilityBonus(ActivationTime.Action, RechargeRate.ShortRest, AttributeDefinitions.Intelligence) .AddToDB(); - + // Density Increase const string POWER_DENSITY_INCREASE = $"Power{Name}DensityIncrease"; @@ -58,19 +62,19 @@ public WizardGraviturgist() var powerDensityIncrease = FeatureDefinitionPowerSharedPoolBuilder .Create(POWER_DENSITY_INCREASE) - .SetGuiPresentation(Category.Feature, SpellDefinitions.Bane) + .SetGuiPresentation(Category.Feature, SpellDefinitions.Heroism) .SetSharedPool(ActivationTime.Action, powerDensity) .SetEffectDescription( EffectDescriptionBuilder .Create() .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetDurationData(DurationType.Minute, 1) - .SetParticleEffectParameters(PowerSpellBladeSpellTyrant) .SetEffectForms( EffectFormBuilder .Create() .SetConditionForm(conditionDensityIncrease, ConditionForm.ConditionOperation.Add) .Build()) + .SetParticleEffectParameters(PowerSpellBladeSpellTyrant) .Build()) .SetShowCasting(true) .AddToDB(); @@ -89,6 +93,7 @@ public WizardGraviturgist() .Create($"MovementAffinity{Name}DensityDecrease") .SetGuiPresentation(POWER_DENSITY_DECREASE, Category.Feature, Gui.NoLocalization) .SetBaseSpeedAdditiveModifier(2) + .SetAdditionalJumpCells(2, true) .AddToDB(), FeatureDefinitionAbilityCheckAffinityBuilder .Create($"AbilityCheckAffinity{Name}DensityDecrease") @@ -113,12 +118,13 @@ public WizardGraviturgist() .Create() .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetDurationData(DurationType.Minute, 1) - .SetParticleEffectParameters(PowerRoguishHoodlumDirtyFighting) .SetEffectForms( EffectFormBuilder .Create() .SetConditionForm(conditionDensityDecrease, ConditionForm.ConditionOperation.Add) .Build()) + .SetCasterEffectParameters(PowerTraditionCourtMageExpandedSpellShield) + .SetEffectEffectParameters(PowerSorcererManaPainterDrain) .Build()) .SetShowCasting(true) .AddToDB(); @@ -162,7 +168,9 @@ public WizardGraviturgist() .SetNotificationTag("ViolentAttraction") .SetDamageDice(DieType.D10, 1) .SetFrequencyLimit(FeatureLimitedUsage.OnceInMyTurn) - .SetRequiredProperty(RestrictedContextRequiredProperty.MeleeWeapon) + .AddCustomSubFeatures( + new ValidateContextInsteadOfRestrictedProperty((_, _, _, _, _, mode, _) => + (OperationType.Set, ValidatorsWeapon.IsMeleeOrUnarmed(mode)))) .SetIgnoreCriticalDoubleDice(true) .AddToDB()) .AddToDB(); @@ -182,6 +190,8 @@ public WizardGraviturgist() .Create() .SetConditionForm(conditionViolentAttraction, ConditionForm.ConditionOperation.Add) .Build()) + .SetCasterEffectParameters(PowerSorcererChildRiftOffering) + .SetEffectEffectParameters(PowerMagebaneSpellCrusher) .Build()) .SetShowCasting(true) .AddToDB(); @@ -191,12 +201,13 @@ public WizardGraviturgist() // Event Horizon var conditionEventHorizon = ConditionDefinitionBuilder - .Create(ConditionDefinitions.ConditionProne, $"Condition{Name}EventHorizon") - .SetOrUpdateGuiPresentation(Category.Condition) + .Create($"Condition{Name}EventHorizon") + .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionRestrained) .SetPossessive() - .SetSilent(Silent.None) + .SetConditionType(ConditionType.Neutral) + .SetSilent(Silent.WhenAddedOrRemoved) .SetSpecialDuration(DurationType.Round, 1, TurnOccurenceType.StartOfTurn) - .CopyParticleReferences(ConditionHitByDirtyFighting) + .CopyParticleReferences(ConditionDefinitions.ConditionRestrained) .SetFeatures( FeatureDefinitionMovementAffinityBuilder .Create($"MovementAffinity{Name}EventHorizon") @@ -206,12 +217,13 @@ public WizardGraviturgist() .AddToDB(); var conditionEventHorizonSaved = ConditionDefinitionBuilder - .Create(ConditionDefinitions.ConditionProne, $"Condition{Name}EventHorizonSaved") - .SetOrUpdateGuiPresentation($"Condition{Name}EventHorizon", Category.Condition) + .Create($"Condition{Name}EventHorizonSaved") + .SetGuiPresentation($"Condition{Name}EventHorizon", Category.Condition, ConditionSlowed) .SetPossessive() + .SetConditionType(ConditionType.Neutral) .SetSilent(Silent.WhenAddedOrRemoved) .SetSpecialDuration(DurationType.Round, 1, TurnOccurenceType.StartOfTurn) - .CopyParticleReferences(ConditionHitByDirtyFighting) + .CopyParticleReferences(ConditionSlowed) .SetCancellingConditions(conditionEventHorizon) .SetFeatures( FeatureDefinitionMovementAffinityBuilder @@ -222,9 +234,11 @@ public WizardGraviturgist() .AddToDB(); var conditionEventHorizonSelf = ConditionDefinitionBuilder - .Create(ConditionSpiritGuardiansSelf, $"Condition{Name}EventHorizonSelf") - .SetOrUpdateGuiPresentation(Category.Condition) + .Create($"Condition{Name}EventHorizonSelf") + .SetGuiPresentation(Category.Condition, ConditionLightSensitiveSorakSaboteur) .SetSilent(Silent.WhenAddedOrRemoved) + .CopyParticleReferences(ConditionSpiritGuardiansSelf) + .SetFeatures() .AddToDB(); var powerEventHorizon = FeatureDefinitionPowerBuilder @@ -236,7 +250,6 @@ public WizardGraviturgist() .Create() .SetTargetingData(Side.Enemy, RangeType.Self, 0, TargetType.Sphere, 6) .SetDurationData(DurationType.Minute, 1) - .SetParticleEffectParameters(SpellDefinitions.Darkness) .SetSavingThrowData(false, AttributeDefinitions.Strength, true, EffectDifficultyClassComputation.SpellCastingFeature) .SetRecurrentEffect(RecurrentEffect.OnEnter | RecurrentEffect.OnTurnStart) @@ -255,14 +268,13 @@ public WizardGraviturgist() .Create() .SetConditionForm(conditionEventHorizon, ConditionForm.ConditionOperation.Add) .HasSavingThrow(EffectSavingThrowType.Negates) - .Build(), - EffectFormBuilder - .Create() - .SetConditionForm(conditionEventHorizonSelf, ConditionForm.ConditionOperation.Add, true) .Build()) + .SetCasterEffectParameters(PowerGreen_Hag_Invisibility) .Build()) .AddToDB(); + powerEventHorizon.AddCustomSubFeatures(new PowerOrSpellInitiatedByMeEventHorizon(conditionEventHorizonSelf)); + Subclass = CharacterSubclassDefinitionBuilder .Create(Name) .SetGuiPresentation(Category.Subclass, Sprites.GetSprite(Name, Resources.WizardGravityMage, 256)) @@ -282,4 +294,29 @@ public WizardGraviturgist() // ReSharper disable once UnassignedGetOnlyAutoProperty internal override DeityDefinition DeityDefinition { get; } + + private sealed class PowerOrSpellInitiatedByMeEventHorizon(ConditionDefinition conditionSelfSFX) + : IPowerOrSpellInitiatedByMe + { + public IEnumerator OnPowerOrSpellInitiatedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) + { + var rulesetCharacter = action.ActingCharacter.RulesetCharacter; + + rulesetCharacter.InflictCondition( + conditionSelfSFX.Name, + DurationType.Minute, + 1, + TurnOccurenceType.EndOfTurn, + AttributeDefinitions.TagEffect, + rulesetCharacter.guid, + rulesetCharacter.CurrentFaction.Name, + 1, + conditionSelfSFX.Name, + 0, + 0, + 0); + + yield break; + } + } } diff --git a/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardGraviturgist-de.txt b/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardGraviturgist-de.txt index 7d17afd3b4..9efb71d32c 100644 --- a/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardGraviturgist-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardGraviturgist-de.txt @@ -6,17 +6,17 @@ Condition/&ConditionWizardGraviturgistEventHorizonDescription=Geschwindigkeit au Condition/&ConditionWizardGraviturgistEventHorizonSelfDescription=Fügt in jeder Runde 2W10 Machtschaden zu und reduziert die Geschwindigkeit der Feinde bei einem misslungenen Stärkerettungswurf auf Null. Condition/&ConditionWizardGraviturgistEventHorizonSelfTitle=Ereignishorizont Condition/&ConditionWizardGraviturgistEventHorizonTitle=Ereignishorizont -Condition/&ConditionWizardGraviturgistViolentAttractionDescription=Die Kreatur verursacht einmal während ihres Zuges mit einem Waffenangriff zusätzlichen Schaden von 1W10. +Condition/&ConditionWizardGraviturgistViolentAttractionDescription=Die Kreatur verursacht einmal während ihres Zuges mit einer Waffe oder einem unbewaffneten Angriff zusätzlichen Schaden von 1W10. Condition/&ConditionWizardGraviturgistViolentAttractionTitle=Gewalttätige Anziehung -Feature/&PowerWizardGraviturgistDensityDecreaseDescription=Sie können Ihre Aktion verwenden, um die Dichte eines Ziels zu verringern, seine Geschwindigkeit um 10 Fuß zu erhöhen und es in die Lage zu versetzen, ohne Risiko Sprünge über maximale Distanzen zu machen, allerdings auf Kosten von Nachteilen bei Stärkeprüfungen und Rettungswürfen. Sie können diese Funktion so oft pro kurzer Pause verwenden, wie Ihr Intelligenzmodifikator beträgt, und sie hat die gleiche Anzahl von Verwendungen wie „Dichte erhöhen“. +Feature/&PowerWizardGraviturgistDensityDecreaseDescription=Sie können Ihre Aktion nutzen, um die Dichte einer Kreatur zu verringern, die Sie in einem Umkreis von 30 Fuß sehen können, wodurch sich ihre Gehgeschwindigkeit und Sprungweite um 10 Fuß erhöht und sie in die Lage versetzt wird, ohne Risiko maximale Distanzsprünge zu machen, allerdings auf Kosten von Nachteilen bei Stärkeprüfungen und Rettungswürfen. Sie können diese Funktion so oft pro kurzer Pause nutzen, wie Ihr Intelligenzmodifikator beträgt, und sie hat die gleiche Anzahl von Nutzungen wie „Dichte erhöhen“. Feature/&PowerWizardGraviturgistDensityDecreaseTitle=Dichte verringern -Feature/&PowerWizardGraviturgistDensityIncreaseDescription=Sie können Ihre Aktion verwenden, um die Dichte eines Ziels zu erhöhen und seine Geschwindigkeit um 10 Fuß zu verringern, wobei Sie bei Stärkeprüfungen und Rettungswürfen einen Vorteil haben. Sie können diese Funktion so oft pro kurzer Pause verwenden, wie Ihr Intelligenzmodifikator beträgt, und sie hat die gleiche Anzahl von Verwendungen wie „Dichte verringern“. +Feature/&PowerWizardGraviturgistDensityIncreaseDescription=Sie können Ihre Aktion nutzen, um die Dichte einer Kreatur zu erhöhen, die Sie in einem Umkreis von 30 Fuß sehen können, und so ihre Geschwindigkeit um 10 Fuß verringern, wobei Sie bei Stärkeprüfungen und Rettungswürfen einen Vorteil haben. Sie können diese Funktion so oft pro kurzer Pause verwenden, wie Ihr Intelligenzmodifikator beträgt, und sie hat die gleiche Anzahl von Verwendungen wie „Dichte verringern“. Feature/&PowerWizardGraviturgistDensityIncreaseTitle=Dichte erhöhen -Feature/&PowerWizardGraviturgistEventHorizonDescription=Du kannst deine Aktion nutzen, um auf magische Weise ein starkes Gravitationsfeld auszusenden, das andere Kreaturen bis zu 1 Minute lang anzieht. Während dieser Zeit muss eine dir feindlich gesinnte Kreatur, die ihren Zug innerhalb von 30 Fuß von dir beginnt, einen Stärkerettungswurf gegen deinen Zauberrettungs-SG machen. Bei einem misslungenen Rettungswurf erleidet sie 2W10 Kraftschaden und ihre Geschwindigkeit wird bis zum Beginn ihres nächsten Zuges auf 0 reduziert. Bei einem erfolgreichen Rettungswurf erleidet sie nur halb so viel Schaden und jeder Fuß, den sie in diesem Zug bewegt, kostet 2 zusätzliche Fuß Bewegung. Du kannst diese Funktion einmal pro langer Pause nutzen +Feature/&PowerWizardGraviturgistEventHorizonDescription=Du kannst deine Aktion nutzen, um auf magische Weise ein starkes Gravitationsfeld auszusenden, das andere Kreaturen bis zu 1 Minute lang anzieht. Während dieser Zeit muss eine dir feindlich gesinnte Kreatur, die ihren Zug innerhalb von 30 Fuß von dir beginnt, einen Stärkerettungswurf gegen deinen Zauberrettungs-SG machen. Bei einem misslungenen Rettungswurf erleidet sie 2W10 Kraftschaden und ihre Geschwindigkeit wird bis zum Beginn ihres nächsten Zuges auf 0 reduziert. Bei einem erfolgreichen Rettungswurf erleidet sie nur halb so viel Schaden und ihre Geschwindigkeit wird stattdessen halbiert. Du kannst diese Funktion einmal pro langer Pause nutzen. Feature/&PowerWizardGraviturgistEventHorizonTitle=Ereignishorizont Feature/&PowerWizardGraviturgistGravityWellDescription=Ab der 6. Stufe werden Kreaturen, die von Ihren Zauberangriffen getroffen werden, 1 Feld von Ihnen weggestoßen. Feature/&PowerWizardGraviturgistGravityWellTitle=Schwerkraftbrunnen -Feature/&PowerWizardGraviturgistViolentAttractionDescription=Du kannst deine Bonusaktion nutzen, um die Schlagkraft der Waffen von Verbündeten 1 Minute lang zu erhöhen. Die Kreatur verursacht einmal während ihres Zuges mit einem Waffenangriff zusätzlichen Schaden von 1W10. Du kannst diese Funktion so oft pro langer Pause nutzen, wie dein Intelligenzmodifikator beträgt. +Feature/&PowerWizardGraviturgistViolentAttractionDescription=Sie können Ihre Bonusaktion verwenden, um die Schlagkraft eines Verbündeten, den Sie innerhalb von 60 Fuß um sich herum sehen, 1 Minute lang zu erhöhen. Die Kreatur verursacht einmal während ihres Zuges mit einer Waffe oder einem unbewaffneten Angriff zusätzlichen Schaden von 1W10. Sie können diese Funktion so oft pro langer Pause verwenden, wie Ihr Intelligenzmodifikator beträgt. Feature/&PowerWizardGraviturgistViolentAttractionTitle=Gewalttätige Anziehung Feedback/&AdditionalDamageViolentAttractionFormat=Heftige Anziehungskraft! Feedback/&AdditionalDamageViolentAttractionLine={0} führt einen heftigen Anziehungsangriff auf {1} (+{2}) aus diff --git a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardGraviturgist-en.txt b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardGraviturgist-en.txt index 37ae1bf855..0d631469af 100644 --- a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardGraviturgist-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardGraviturgist-en.txt @@ -6,17 +6,17 @@ Condition/&ConditionWizardGraviturgistEventHorizonDescription=Speed reduced to z Condition/&ConditionWizardGraviturgistEventHorizonSelfDescription=Inflicts 2d10 Force damage on each turn and reduces the speed of enemies to zero on a failed Strength saving throw Condition/&ConditionWizardGraviturgistEventHorizonSelfTitle=Event Horizon Condition/&ConditionWizardGraviturgistEventHorizonTitle=Event Horizon -Condition/&ConditionWizardGraviturgistViolentAttractionDescription=The creature does an extra 1d10 damage with a weapon attack once during its turn. +Condition/&ConditionWizardGraviturgistViolentAttractionDescription=The creature does an extra 1d10 damage with a weapon or unarmed attack once during its turn. Condition/&ConditionWizardGraviturgistViolentAttractionTitle=Violent Attraction -Feature/&PowerWizardGraviturgistDensityDecreaseDescription=You can use your action to decrease the density of a target, increasing its speed by 10 ft and making it able to make maximum distance jumps without risk, at the cost of disadvantage on Strength checks and saving throws. You can use this feature a number of times per short rest equal to your Intelligence modifier, and it shares the number of uses with Increase Density. +Feature/&PowerWizardGraviturgistDensityDecreaseDescription=You can use your action to decrease the density of a creature you can see within 30 ft of you, increasing its walking speed and jumping distance by 10 ft and making it able to make maximum distance jumps without risk, at the cost of disadvantage on Strength checks and saving throws. You can use this feature a number of times per short rest equal to your Intelligence modifier, and it shares the number of uses with Increase Density. Feature/&PowerWizardGraviturgistDensityDecreaseTitle=Decrease Density -Feature/&PowerWizardGraviturgistDensityIncreaseDescription=You can use your action to increase the density of a target, reducing its speed by 10 ft at the benefit of advantage on Strength checks and saving throws. You can use this feature a number of times per short rest equal to your Intelligence modifier, and it shares the number of uses with Decrease Density. +Feature/&PowerWizardGraviturgistDensityIncreaseDescription=You can use your action to increase the density of a creature you can see within 30 ft of you, reducing its speed by 10 ft at the benefit of advantage on Strength checks and saving throws. You can use this feature a number of times per short rest equal to your Intelligence modifier, and it shares the number of uses with Decrease Density. Feature/&PowerWizardGraviturgistDensityIncreaseTitle=Increase Density -Feature/&PowerWizardGraviturgistEventHorizonDescription=You can use your action to magically emit a powerful field of gravitational energy that tugs at other creatures for up to 1 minute. For the duration, whenever a creature hostile to you starts its turn within 30 feet of you, it must make a Strength saving throw against your spell save DC. On a failed save, it takes 2d10 force damage, and its speed is reduced to 0 until the start of its next turn. On a successful save, it takes half as much damage, and every foot it moves this turn costs 2 extra feet of movement. You can use this feature once per long rest +Feature/&PowerWizardGraviturgistEventHorizonDescription=You can use your action to magically emit a powerful field of gravitational energy that tugs at other creatures for up to 1 minute. For the duration, whenever a creature hostile to you starts its turn within 30 feet of you, it must make a Strength saving throw against your spell save DC. On a failed save, it takes 2d10 force damage, and its speed is reduced to 0 until the start of its next turn. On a successful save, it takes half as much damage, and its speed is halved instead. You can use this feature once per long rest. Feature/&PowerWizardGraviturgistEventHorizonTitle=Event Horizon Feature/&PowerWizardGraviturgistGravityWellDescription=Starting at 6th level, creatures hit by your spell attacks are pushed 1 cell away from you. Feature/&PowerWizardGraviturgistGravityWellTitle=Gravity Well -Feature/&PowerWizardGraviturgistViolentAttractionDescription=You can use your bonus action to increase the striking power of ally's weapons for 1 minute. The creature does an additional 1d10 damage with a weapon attack once during its turn. You can use this feature a number of times per long rest equal to your Intelligence modifier. +Feature/&PowerWizardGraviturgistViolentAttractionDescription=You can use your bonus action to increase the striking power of one ally that you can see within 60 ft of you for 1 minute. The creature does an additional 1d10 damage with a weapon or unarmed attack once during its turn. You can use this feature a number of times per long rest equal to your Intelligence modifier. Feature/&PowerWizardGraviturgistViolentAttractionTitle=Violent Attraction Feedback/&AdditionalDamageViolentAttractionFormat=Violent Attraction! Feedback/&AdditionalDamageViolentAttractionLine={0} performs a violent attraction attack on {1} (+{2}) diff --git a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardGraviturgist-es.txt b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardGraviturgist-es.txt index cbee6f125a..6114790cca 100644 --- a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardGraviturgist-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardGraviturgist-es.txt @@ -6,15 +6,17 @@ Condition/&ConditionWizardGraviturgistEventHorizonDescription=Velocidad reducida Condition/&ConditionWizardGraviturgistEventHorizonSelfDescription=Inflige 2d10 de daño de Fuerza en cada turno y reduce la velocidad de los enemigos a cero en una tirada de salvación de Fuerza fallida. Condition/&ConditionWizardGraviturgistEventHorizonSelfTitle=Horizonte de eventos Condition/&ConditionWizardGraviturgistEventHorizonTitle=Horizonte de eventos -Condition/&ConditionWizardGraviturgistViolentAttractionDescription=La criatura hace 1d10 de daño adicional con un ataque de arma una vez durante su turno. +Condition/&ConditionWizardGraviturgistViolentAttractionDescription=La criatura hace 1d10 de daño adicional con un arma o un ataque desarmado una vez durante su turno. Condition/&ConditionWizardGraviturgistViolentAttractionTitle=Atracción violenta +Feature/&PowerWizardGraviturgistDensityDecreaseDescription=Puedes usar tu acción para reducir la densidad de una criatura que puedas ver a 30 pies de ti, aumentando su velocidad al caminar y su distancia de salto en 10 pies y haciéndola capaz de realizar saltos de máxima distancia sin riesgo, a costa de una desventaja en las pruebas de Fuerza y ​​las tiradas de salvación. Puedes usar esta característica una cantidad de veces por descanso corto igual a tu modificador de Inteligencia, y comparte la cantidad de usos con Aumentar densidad. Feature/&PowerWizardGraviturgistDensityDecreaseTitle=Disminuir la densidad +Feature/&PowerWizardGraviturgistDensityIncreaseDescription=Puedes usar tu acción para aumentar la densidad de una criatura que puedas ver a 30 pies de ti, reduciendo su velocidad en 10 pies con ventaja en las pruebas de Fuerza y ​​las tiradas de salvación. Puedes usar esta característica una cantidad de veces por descanso corto igual a tu modificador de Inteligencia, y comparte la cantidad de usos con Reducir densidad. Feature/&PowerWizardGraviturgistDensityIncreaseTitle=Aumentar la densidad -Feature/&PowerWizardGraviturgistEventHorizonDescription=Puedes usar tu acción para emitir mágicamente un poderoso campo de energía gravitatoria que atrae a otras criaturas durante hasta 1 minuto. Mientras dure, siempre que una criatura hostil hacia ti comience su turno a 30 pies o menos de ti, debe realizar una tirada de salvación de Fuerza contra la CD de tu salvación de conjuros. Si falla, sufre 2d10 puntos de daño por fuerza y su velocidad se reduce a 0 hasta el comienzo de su siguiente turno. Si tiene éxito, sufre la mitad del daño y cada pie que se mueva este turno cuesta 2 pies adicionales de movimiento. Puedes usar esta característica una vez por descanso prolongado. +Feature/&PowerWizardGraviturgistEventHorizonDescription=Puedes usar tu acción para emitir mágicamente un poderoso campo de energía gravitatoria que atrae a otras criaturas durante hasta 1 minuto. Mientras dure, siempre que una criatura hostil hacia ti comience su turno a 30 pies o menos de ti, debe realizar una tirada de salvación de Fuerza contra la CD de tu salvación de conjuros. Si falla, sufre 2d10 puntos de daño por fuerza y ​​su velocidad se reduce a 0 hasta el comienzo de su siguiente turno. Si tiene éxito, sufre la mitad de daño y su velocidad se reduce a la mitad. Puedes usar esta característica una vez por cada descanso prolongado. Feature/&PowerWizardGraviturgistEventHorizonTitle=Horizonte de eventos Feature/&PowerWizardGraviturgistGravityWellDescription=A partir del nivel 6, las criaturas golpeadas por tus ataques de hechizos son empujadas 1 celda lejos de ti. Feature/&PowerWizardGraviturgistGravityWellTitle=Pozo de gravedad -Feature/&PowerWizardGraviturgistViolentAttractionDescription=Puedes usar tu acción adicional para aumentar el poder de impacto de las armas de un aliado durante 1 minuto. La criatura hace 1d10 puntos de daño adicionales con un ataque con arma una vez durante su turno. Puedes usar esta característica una cantidad de veces por descanso prolongado igual a tu modificador de Inteligencia. +Feature/&PowerWizardGraviturgistViolentAttractionDescription=Puedes usar tu acción adicional para aumentar el poder de ataque de un aliado que puedas ver a 60 pies de ti durante 1 minuto. La criatura hace 1d10 puntos de daño adicionales con un arma o un ataque sin armas una vez durante su turno. Puedes usar esta característica una cantidad de veces por descanso prolongado igual a tu modificador de Inteligencia. Feature/&PowerWizardGraviturgistViolentAttractionTitle=Atracción violenta Feedback/&AdditionalDamageViolentAttractionFormat=¡Atracción violenta! Feedback/&AdditionalDamageViolentAttractionLine={0} realiza un violento ataque de atracción sobre {1} (+{2}) diff --git a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardGraviturgist-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardGraviturgist-fr.txt index 93a07a60d3..6dfe47e3e1 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardGraviturgist-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardGraviturgist-fr.txt @@ -6,17 +6,17 @@ Condition/&ConditionWizardGraviturgistEventHorizonDescription=Vitesse réduite Condition/&ConditionWizardGraviturgistEventHorizonSelfDescription=Inflige 2d10 points de dégâts de Force à chaque tour et réduit la vitesse des ennemis à zéro en cas d'échec d'un jet de sauvegarde de Force Condition/&ConditionWizardGraviturgistEventHorizonSelfTitle=Horizon des événements Condition/&ConditionWizardGraviturgistEventHorizonTitle=Horizon des événements -Condition/&ConditionWizardGraviturgistViolentAttractionDescription=La créature inflige 1d10 dégâts supplémentaires avec une attaque d'arme une fois pendant son tour. +Condition/&ConditionWizardGraviturgistViolentAttractionDescription=La créature inflige 1d10 dégâts supplémentaires avec une arme ou une attaque à mains nues une fois pendant son tour. Condition/&ConditionWizardGraviturgistViolentAttractionTitle=Attirance violente -Feature/&PowerWizardGraviturgistDensityDecreaseDescription=Vous pouvez utiliser votre action pour diminuer la densité d'une cible, augmentant sa vitesse de 3 m et lui permettant de faire des sauts à distance maximale sans risque, au prix d'un désavantage aux tests de Force et aux jets de sauvegarde. Vous pouvez utiliser cette capacité un nombre de fois par repos court égal à votre modificateur d'Intelligence, et elle partage le nombre d'utilisations avec Augmenter la densité. +Feature/&PowerWizardGraviturgistDensityDecreaseDescription=Vous pouvez utiliser votre action pour diminuer la densité d'une créature que vous pouvez voir à 9 mètres de vous, augmentant sa vitesse de marche et sa distance de saut de 3 mètres et lui permettant de faire des sauts à distance maximale sans risque, au prix d'un désavantage aux tests de Force et aux jets de sauvegarde. Vous pouvez utiliser cette capacité un nombre de fois par repos court égal à votre modificateur d'Intelligence, et elle partage le nombre d'utilisations avec Augmenter la densité. Feature/&PowerWizardGraviturgistDensityDecreaseTitle=Diminuer la densité -Feature/&PowerWizardGraviturgistDensityIncreaseDescription=Vous pouvez utiliser votre action pour augmenter la densité d'une cible, réduisant sa vitesse de 3 m au bénéfice des tests de Force et des jets de sauvegarde. Vous pouvez utiliser cette capacité un nombre de fois par repos court égal à votre modificateur d'Intelligence, et elle partage le nombre d'utilisations avec Diminuer la densité. +Feature/&PowerWizardGraviturgistDensityIncreaseDescription=Vous pouvez utiliser votre action pour augmenter la densité d'une créature que vous pouvez voir à 9 mètres ou moins de vous, réduisant sa vitesse de 3 mètres au bénéfice de l'avantage sur les tests de Force et les jets de sauvegarde. Vous pouvez utiliser cette capacité un nombre de fois par repos court égal à votre modificateur d'Intelligence, et elle partage le nombre d'utilisations avec Diminuer la densité. Feature/&PowerWizardGraviturgistDensityIncreaseTitle=Augmenter la densité -Feature/&PowerWizardGraviturgistEventHorizonDescription=Vous pouvez utiliser votre action pour émettre magiquement un puissant champ d'énergie gravitationnelle qui attire les autres créatures pendant 1 minute maximum. Pendant toute la durée de l'action, chaque fois qu'une créature hostile à vous commence son tour à 9 mètres ou moins de vous, elle doit effectuer un jet de sauvegarde de Force contre le DD de sauvegarde de votre sort. En cas d'échec, elle subit 2d10 dégâts de force et sa vitesse est réduite à 0 jusqu'au début de son prochain tour. En cas de réussite, elle subit la moitié des dégâts et chaque mètre parcouru pendant ce tour lui coûte 60 centimètres de mouvement supplémentaires. Vous pouvez utiliser cette capacité une fois par repos long. +Feature/&PowerWizardGraviturgistEventHorizonDescription=Vous pouvez utiliser votre action pour émettre magiquement un puissant champ d'énergie gravitationnelle qui attire les autres créatures pendant 1 minute maximum. Pendant toute la durée de l'effet, chaque fois qu'une créature hostile à vous commence son tour à 9 mètres ou moins de vous, elle doit effectuer un jet de sauvegarde de Force contre le DD de sauvegarde de votre sort. En cas d'échec, elle subit 2d10 dégâts de force et sa vitesse est réduite à 0 jusqu'au début de son prochain tour. En cas de réussite, elle subit la moitié des dégâts et sa vitesse est divisée par deux. Vous pouvez utiliser cette capacité une fois par repos long. Feature/&PowerWizardGraviturgistEventHorizonTitle=Horizon des événements Feature/&PowerWizardGraviturgistGravityWellDescription=À partir du niveau 6, les créatures touchées par vos attaques de sorts sont repoussées d'une cellule loin de vous. Feature/&PowerWizardGraviturgistGravityWellTitle=Puits de gravité -Feature/&PowerWizardGraviturgistViolentAttractionDescription=Vous pouvez utiliser votre action bonus pour augmenter la puissance de frappe des armes de votre allié pendant 1 minute. La créature inflige 1d10 dégâts supplémentaires avec une attaque d'arme une fois pendant son tour. Vous pouvez utiliser cette capacité un nombre de fois par repos long égal à votre modificateur d'Intelligence. +Feature/&PowerWizardGraviturgistViolentAttractionDescription=Vous pouvez utiliser votre action bonus pour augmenter la puissance de frappe d'un allié que vous pouvez voir à 18 mètres ou moins de vous pendant 1 minute. La créature inflige 1d10 dégâts supplémentaires avec une arme ou une attaque à mains nues une fois pendant son tour. Vous pouvez utiliser cette capacité un nombre de fois par repos long égal à votre modificateur d'Intelligence. Feature/&PowerWizardGraviturgistViolentAttractionTitle=Attirance violente Feedback/&AdditionalDamageViolentAttractionFormat=Attraction violente ! Feedback/&AdditionalDamageViolentAttractionLine={0} effectue une attaque d'attraction violente sur {1} (+{2}) diff --git a/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardGraviturgist-it.txt b/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardGraviturgist-it.txt index fcacb89e28..cea3817fd2 100644 --- a/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardGraviturgist-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardGraviturgist-it.txt @@ -6,17 +6,17 @@ Condition/&ConditionWizardGraviturgistEventHorizonDescription=Velocità ridotta Condition/&ConditionWizardGraviturgistEventHorizonSelfDescription=Infligge 2d10 danni da Forza a ogni turno e riduce la velocità dei nemici a zero in caso di tiro salvezza su Forza fallito. Condition/&ConditionWizardGraviturgistEventHorizonSelfTitle=Orizzonte degli eventi Condition/&ConditionWizardGraviturgistEventHorizonTitle=Orizzonte degli eventi -Condition/&ConditionWizardGraviturgistViolentAttractionDescription=La creatura infligge 1d10 danni extra con un attacco con arma una volta durante il suo turno. +Condition/&ConditionWizardGraviturgistViolentAttractionDescription=La creatura infligge 1d10 danni extra con un'arma o un attacco senz'armi una volta durante il suo turno. Condition/&ConditionWizardGraviturgistViolentAttractionTitle=Attrazione violenta -Feature/&PowerWizardGraviturgistDensityDecreaseDescription=Puoi usare la tua azione per diminuire la densità di un bersaglio, aumentandone la velocità di 10 piedi e rendendolo in grado di effettuare salti di massima distanza senza rischi, al costo di svantaggio su prove di Forza e tiri salvezza. Puoi usare questa caratteristica un numero di volte per riposo breve pari al tuo modificatore di Intelligenza, e condivide il numero di utilizzi con Aumentare Densità. +Feature/&PowerWizardGraviturgistDensityDecreaseDescription=Puoi usare la tua azione per diminuire la densità di una creatura che puoi vedere entro 30 piedi da te, aumentando la sua velocità di camminata e la distanza di salto di 10 piedi e rendendola in grado di fare salti di distanza massima senza rischi, al costo di svantaggio su prove di Forza e tiri salvezza. Puoi usare questa caratteristica un numero di volte per riposo breve pari al tuo modificatore di Intelligenza e condivide il numero di utilizzi con Aumentare Densità. Feature/&PowerWizardGraviturgistDensityDecreaseTitle=Diminuire la densità -Feature/&PowerWizardGraviturgistDensityIncreaseDescription=Puoi usare la tua azione per aumentare la densità di un bersaglio, riducendone la velocità di 10 piedi a beneficio del vantaggio su prove di Forza e tiri salvezza. Puoi usare questa caratteristica un numero di volte per riposo breve pari al tuo modificatore di Intelligenza e condivide il numero di utilizzi con Diminuire Densità. +Feature/&PowerWizardGraviturgistDensityIncreaseDescription=Puoi usare la tua azione per aumentare la densità di una creatura che puoi vedere entro 30 piedi da te, riducendone la velocità di 10 piedi con il beneficio del vantaggio sulle prove di Forza e sui tiri salvezza. Puoi usare questa caratteristica un numero di volte per riposo breve pari al tuo modificatore di Intelligenza e condivide il numero di utilizzi con Diminuire la Densità. Feature/&PowerWizardGraviturgistDensityIncreaseTitle=Aumentare la densità -Feature/&PowerWizardGraviturgistEventHorizonDescription=Puoi usare la tua azione per emettere magicamente un potente campo di energia gravitazionale che attrae altre creature per un massimo di 1 minuto. Per la durata, ogni volta che una creatura ostile a te inizia il suo turno entro 30 piedi da te, deve effettuare un tiro salvezza su Forza contro la tua CD di tiro salvezza degli incantesimi. Se fallisce il tiro salvezza, subisce 2d10 danni da forza e la sua velocità si riduce a 0 fino all'inizio del suo turno successivo. Se supera il tiro salvezza, subisce la metà dei danni e ogni piede che si muove in questo turno costa 2 piedi extra di movimento. Puoi usare questa caratteristica una volta per riposo lungo +Feature/&PowerWizardGraviturgistEventHorizonDescription=Puoi usare la tua azione per emettere magicamente un potente campo di energia gravitazionale che attrae altre creature per un massimo di 1 minuto. Per la durata, ogni volta che una creatura ostile a te inizia il suo turno entro 30 piedi da te, deve effettuare un tiro salvezza su Forza contro la tua CD di tiro salvezza degli incantesimi. Se fallisce il tiro salvezza, subisce 2d10 danni da forza e la sua velocità si riduce a 0 fino all'inizio del suo turno successivo. Se supera il tiro salvezza, subisce la metà dei danni e la sua velocità si dimezza. Puoi usare questa caratteristica una volta per riposo lungo. Feature/&PowerWizardGraviturgistEventHorizonTitle=Orizzonte degli eventi Feature/&PowerWizardGraviturgistGravityWellDescription=A partire dal 6° livello, le creature colpite dai tuoi attacchi magici vengono spinte lontano da te di 1 casella. Feature/&PowerWizardGraviturgistGravityWellTitle=Pozzo gravitazionale -Feature/&PowerWizardGraviturgistViolentAttractionDescription=Puoi usare la tua azione bonus per aumentare la potenza d'attacco delle armi dell'alleato per 1 minuto. La creatura infligge 1d10 danni aggiuntivi con un attacco con arma una volta durante il suo turno. Puoi usare questa caratteristica un numero di volte per riposo lungo pari al tuo modificatore di Intelligenza. +Feature/&PowerWizardGraviturgistViolentAttractionDescription=Puoi usare la tua azione bonus per aumentare la potenza di attacco di un alleato che puoi vedere entro 60 piedi da te per 1 minuto. La creatura infligge 1d10 danni aggiuntivi con un'arma o un attacco senz'armi una volta durante il suo turno. Puoi usare questa caratteristica un numero di volte per riposo lungo pari al tuo modificatore di Intelligenza. Feature/&PowerWizardGraviturgistViolentAttractionTitle=Attrazione violenta Feedback/&AdditionalDamageViolentAttractionFormat=Attrazione violenta! Feedback/&AdditionalDamageViolentAttractionLine={0} esegue un violento attacco di attrazione su {1} (+{2}) diff --git a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardGraviturgist-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardGraviturgist-ja.txt index 67ddfb25e0..a2c1dd8504 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardGraviturgist-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardGraviturgist-ja.txt @@ -6,17 +6,17 @@ Condition/&ConditionWizardGraviturgistEventHorizonDescription=速度がゼロに Condition/&ConditionWizardGraviturgistEventHorizonSelfDescription=各ターンに 2d10 のフォース ダメージを与え、ストレングス セーヴィング スローが失敗すると敵の速度を 0 に低下させます。 Condition/&ConditionWizardGraviturgistEventHorizonSelfTitle=イベントホライズン Condition/&ConditionWizardGraviturgistEventHorizonTitle=イベントホライズン -Condition/&ConditionWizardGraviturgistViolentAttractionDescription=クリーチャーはターン中に一度、武器攻撃で 1d10 の追加ダメージを与えます。 +Condition/&ConditionWizardGraviturgistViolentAttractionDescription=クリーチャーは、そのターン中に 1 回、武器または素手攻撃で 1d10 の追加ダメージを与えます。 Condition/&ConditionWizardGraviturgistViolentAttractionTitle=暴力的な魅力 -Feature/&PowerWizardGraviturgistDensityDecreaseDescription=アクションを使用して、対象の密度を減少させ、速度を 10 フィート増加させ、リスクなしで最大距離のジャンプを行えるようにすることができますが、その代償として、【筋力】判定とセーヴィング スローに不利が生じます。この特徴は、小休憩ごとに知力修正値に等しい回数使用でき、密度増加と使用回数を共有します。 +Feature/&PowerWizardGraviturgistDensityDecreaseDescription=アクションを使用して、30 フィート以内にいる、見ることができるクリーチャーの密度を減少させることができます。これにより、クリーチャーの歩行速度とジャンプ距離が 10 フィート増加し、リスクなしで最大距離ジャンプできるようになりますが、その代償として、【筋力】判定とセーヴィング スローに不利が生じます。この特徴は、小休憩ごとに知力修正値に等しい回数使用でき、使用回数は「密度増加」と同じです。 Feature/&PowerWizardGraviturgistDensityDecreaseTitle=密度を下げる -Feature/&PowerWizardGraviturgistDensityIncreaseDescription=アクションを使用して、対象の密度を増加させ、その速度を 10 フィート減少させ、【筋力】判定とセーヴィング スローに有利を得ることができます。この特徴は、小休憩ごとに知力修正値に等しい回数使用でき、密度減少と使用回数を共有します。 +Feature/&PowerWizardGraviturgistDensityIncreaseDescription=アクションを使用して、30 フィート以内にいる、見ることができるクリーチャーの密度を増加させ、その移動速度を 10 フィート減少させ、【筋力】判定とセーヴィング スローに有利を得ることができます。この特徴は、小休憩ごとに知力修正値に等しい回数使用でき、密度減少と使用回数を共有します。 Feature/&PowerWizardGraviturgistDensityIncreaseTitle=密度を上げる -Feature/&PowerWizardGraviturgistEventHorizonDescription=アクションを使用して、最大 1 分間他のクリーチャーを引き寄せる強力な重力エネルギー フィールドを魔法的に放出できます。持続時間中、敵対的なクリーチャーが 30 フィート以内でターンを開始するたびに、そのクリーチャーはあなたの呪文セーヴ DC に対して筋力セーヴィング スローを行う必要があります。セーヴィングに失敗すると、2d10 のフォース ダメージを受け、次のターンの開始まで移動速度が 0 に低下します。セーヴィングに成功すると、受けるダメージが半分になり、このターンに移動する 1 フィートごとに 2 フィートの移動コストがかかります。この特徴は、大休憩ごとに 1 回使用できます。 +Feature/&PowerWizardGraviturgistEventHorizonDescription=アクションを使用して、最大 1 分間他のクリーチャーを引き寄せる強力な重力エネルギー フィールドを魔法的に放出できます。持続時間中、敵対的なクリーチャーが 30 フィート以内でターンを開始するたびに、そのクリーチャーはあなたの呪文セーヴ DC に対して筋力セーヴィング スローを行う必要があります。セーヴィングに失敗すると、2d10 のフォース ダメージを受け、次のターンの開始まで移動速度が 0 に低下します。セーヴィングに成功すると、受けるダメージが半分になり、移動速度も半分になります。この特徴は、大休憩ごとに 1 回使用できます。 Feature/&PowerWizardGraviturgistEventHorizonTitle=イベントホライズン Feature/&PowerWizardGraviturgistGravityWellDescription=6レベルから、呪文攻撃を受けたクリーチャーはあなたから1セル離れたところに押し出されます。 Feature/&PowerWizardGraviturgistGravityWellTitle=重力井戸 -Feature/&PowerWizardGraviturgistViolentAttractionDescription=ボーナス アクションを使用して、味方の武器の打撃力を 1 分間増加できます。クリーチャーは、自分のターン中に 1 回、武器攻撃で 1d10 の追加ダメージを与えます。この特徴は、大休憩ごとに、知力修正値に等しい回数使用できます。 +Feature/&PowerWizardGraviturgistViolentAttractionDescription=ボーナス アクションを使用して、60 フィート以内にいる視界内の味方 1 人の打撃力を 1 分間増加できます。クリーチャーは、自分のターン中に 1 回、武器または素手攻撃で 1d10 の追加ダメージを与えます。この特徴は、大休憩ごとに、知力修正値に等しい回数使用できます。 Feature/&PowerWizardGraviturgistViolentAttractionTitle=暴力的な魅力 Feedback/&AdditionalDamageViolentAttractionFormat=暴力的なアトラクション! Feedback/&AdditionalDamageViolentAttractionLine={0} は {1} に対して暴力的な誘引攻撃を実行します (+{2}) diff --git a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardGraviturgist-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardGraviturgist-ko.txt index de892b8360..15ba42451a 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardGraviturgist-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardGraviturgist-ko.txt @@ -6,17 +6,17 @@ Condition/&ConditionWizardGraviturgistEventHorizonDescription=속도가 0으로 Condition/&ConditionWizardGraviturgistEventHorizonSelfDescription=매 턴마다 2d10의 포스 피해를 입히고 힘 내성 굴림에 실패하면 적의 속도를 0으로 줄입니다. Condition/&ConditionWizardGraviturgistEventHorizonSelfTitle=중대한 전환점 Condition/&ConditionWizardGraviturgistEventHorizonTitle=중대한 전환점 -Condition/&ConditionWizardGraviturgistViolentAttractionDescription=해당 생물은 턴 중에 한 번 무기 공격으로 1d10의 추가 피해를 입힙니다. +Condition/&ConditionWizardGraviturgistViolentAttractionDescription=해당 생물은 턴 중에 한 번 무기 공격이나 비무장 공격으로 1d10의 추가 피해를 입힙니다. Condition/&ConditionWizardGraviturgistViolentAttractionTitle=폭력적인 매력 -Feature/&PowerWizardGraviturgistDensityDecreaseDescription=당신은 당신의 행동을 사용하여 대상의 밀도를 감소시키고, 속도를 10피트 증가시키고, 힘 체크와 세이빙 스로우에서 불리함을 감수하고 위험 없이 최대 거리 점프를 할 수 있게 할 수 있습니다. 당신은 당신의 지능 수정치와 같은 짧은 휴식당 여러 번 이 기능을 사용할 수 있으며, 밀도 증가와 사용 횟수를 공유합니다. +Feature/&PowerWizardGraviturgistDensityDecreaseDescription=당신은 당신의 행동을 사용하여 30피트 이내에서 볼 수 있는 생물의 밀도를 감소시키고, 걷는 속도와 점프 거리를 10피트 증가시키고, 힘 체크와 세이빙 스로우에서 불리함을 감수하고 위험 없이 최대 거리 점프를 할 수 있게 할 수 있습니다. 당신은 당신의 지능 수정치와 같은 짧은 휴식당 여러 번 이 기능을 사용할 수 있으며, 밀도 증가와 사용 횟수를 공유합니다. Feature/&PowerWizardGraviturgistDensityDecreaseTitle=밀도 감소 -Feature/&PowerWizardGraviturgistDensityIncreaseDescription=당신은 당신의 행동을 사용하여 대상의 밀도를 증가시키고, 힘 체크와 세이빙 스로우에서 이점을 얻어 속도를 10피트 감소시킬 수 있습니다. 당신은 당신의 지능 수정치와 같은 짧은 휴식당 이 기능을 사용할 수 있으며, 밀도 감소와 사용 횟수를 공유합니다. +Feature/&PowerWizardGraviturgistDensityIncreaseDescription=당신은 당신의 행동을 사용하여 30피트 이내에서 볼 수 있는 생물의 밀도를 증가시키고, 힘 체크와 세이빙 스로우에서 이점을 얻어서 속도를 10피트 감소시킬 수 있습니다. 당신은 당신의 지능 수정치와 같은 짧은 휴식당 여러 번 이 기능을 사용할 수 있으며, 밀도 감소와 사용 횟수를 공유합니다. Feature/&PowerWizardGraviturgistDensityIncreaseTitle=밀도 증가 -Feature/&PowerWizardGraviturgistEventHorizonDescription=당신은 당신의 행동을 사용하여 최대 1분 동안 다른 생물을 잡아당기는 강력한 중력 에너지장을 마법처럼 방출할 수 있습니다. 지속 시간 동안, 당신에게 적대적인 생물이 당신으로부터 30피트 이내에서 턴을 시작할 때마다, 당신의 주문 세이브 DC에 대한 힘 세이브 굴림을 해야 합니다. 세이브에 실패하면, 2d10의 힘 피해를 입고, 다음 턴이 시작될 때까지 속도가 0으로 감소합니다. 세이브에 성공하면, 피해를 절반으로 줄이고, 이번 턴에 움직이는 모든 발은 2피트의 추가 이동을 소모합니다. 당신은 긴 휴식당 한 번 이 기능을 사용할 수 있습니다. +Feature/&PowerWizardGraviturgistEventHorizonDescription=당신은 당신의 행동을 사용하여 최대 1분 동안 다른 생물을 잡아당기는 강력한 중력 에너지장을 마법으로 방출할 수 있습니다. 지속 시간 동안, 당신에게 적대적인 생물이 당신으로부터 30피트 이내에서 턴을 시작할 때마다, 당신의 주문 세이브 DC에 대한 힘 세이브 굴림을 해야 합니다. 세이브에 실패하면, 2d10의 힘 피해를 입고, 다음 턴이 시작될 때까지 속도가 0으로 감소합니다. 세이브에 성공하면, 피해를 절반으로 줄이고, 대신 속도가 절반으로 줄어듭니다. 당신은 긴 휴식당 한 번 이 기능을 사용할 수 있습니다. Feature/&PowerWizardGraviturgistEventHorizonTitle=중대한 전환점 Feature/&PowerWizardGraviturgistGravityWellDescription=6레벨부터, 당신의 주문 공격에 적중당한 생물들은 당신에게서 1셀만큼 밀려납니다. Feature/&PowerWizardGraviturgistGravityWellTitle=중력 우물 -Feature/&PowerWizardGraviturgistViolentAttractionDescription=보너스 액션을 사용하여 아군의 무기의 공격력을 1분 동안 증가시킬 수 있습니다. 생물은 턴 중 한 번 무기 공격으로 1d10의 추가 피해를 입힙니다. 이 기능은 긴 휴식당 지능 수정치와 같은 횟수만큼 사용할 수 있습니다. +Feature/&PowerWizardGraviturgistViolentAttractionDescription=보너스 액션을 사용하여 60피트 이내에서 볼 수 있는 아군 한 명의 공격력을 1분 동안 증가시킬 수 있습니다. 해당 생물은 턴 중 한 번 무기 또는 비무장 공격으로 1d10의 추가 피해를 입힙니다. 이 기능은 긴 휴식당 지능 수정치와 같은 횟수만큼 사용할 수 있습니다. Feature/&PowerWizardGraviturgistViolentAttractionTitle=폭력적인 매력 Feedback/&AdditionalDamageViolentAttractionFormat=폭력적인 매력! Feedback/&AdditionalDamageViolentAttractionLine={0}이(가) {1}(+{2})에 대해 폭력적인 매력 공격을 수행합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardGraviturgist-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardGraviturgist-pt-BR.txt index 9c6a43aec3..0159564807 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardGraviturgist-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardGraviturgist-pt-BR.txt @@ -6,17 +6,17 @@ Condition/&ConditionWizardGraviturgistEventHorizonDescription=Velocidade reduzid Condition/&ConditionWizardGraviturgistEventHorizonSelfDescription=Causa 2d10 de dano de Força em cada turno e reduz a velocidade dos inimigos a zero em um teste de resistência de Força falhado. Condition/&ConditionWizardGraviturgistEventHorizonSelfTitle=Horizonte de eventos Condition/&ConditionWizardGraviturgistEventHorizonTitle=Horizonte de eventos -Condition/&ConditionWizardGraviturgistViolentAttractionDescription=A criatura causa 1d10 de dano extra com um ataque de arma uma vez durante seu turno. +Condition/&ConditionWizardGraviturgistViolentAttractionDescription=A criatura causa 1d10 de dano extra com uma arma ou ataque desarmado uma vez durante seu turno. Condition/&ConditionWizardGraviturgistViolentAttractionTitle=Atração Violenta -Feature/&PowerWizardGraviturgistDensityDecreaseDescription=Você pode usar sua ação para diminuir a densidade de um alvo, aumentando sua velocidade em 10 pés e tornando-o capaz de fazer saltos de distância máxima sem risco, ao custo de desvantagem em testes de Força e testes de resistência. Você pode usar essa habilidade um número de vezes por descanso curto igual ao seu modificador de Inteligência, e ela compartilha o número de usos com Aumentar Densidade. +Feature/&PowerWizardGraviturgistDensityDecreaseDescription=Você pode usar sua ação para diminuir a densidade de uma criatura que você pode ver a até 30 pés de você, aumentando sua velocidade de caminhada e distância de salto em 10 pés e tornando-a capaz de fazer saltos de distância máxima sem risco, ao custo de desvantagem em testes de Força e testes de resistência. Você pode usar essa habilidade um número de vezes por descanso curto igual ao seu modificador de Inteligência, e ela compartilha o número de usos com Aumentar Densidade. Feature/&PowerWizardGraviturgistDensityDecreaseTitle=Diminuir a densidade -Feature/&PowerWizardGraviturgistDensityIncreaseDescription=Você pode usar sua ação para aumentar a densidade de um alvo, reduzindo sua velocidade em 10 pés com o benefício de vantagem em testes de Força e testes de resistência. Você pode usar essa habilidade um número de vezes por descanso curto igual ao seu modificador de Inteligência, e ela compartilha o número de usos com Diminuir Densidade. +Feature/&PowerWizardGraviturgistDensityIncreaseDescription=Você pode usar sua ação para aumentar a densidade de uma criatura que você pode ver a até 30 pés de você, reduzindo sua velocidade em 10 pés com o benefício de vantagem em testes de Força e testes de resistência. Você pode usar essa habilidade um número de vezes por descanso curto igual ao seu modificador de Inteligência, e ela compartilha o número de usos com Diminuir Densidade. Feature/&PowerWizardGraviturgistDensityIncreaseTitle=Aumentar a densidade -Feature/&PowerWizardGraviturgistEventHorizonDescription=Você pode usar sua ação para emitir magicamente um poderoso campo de energia gravitacional que puxa outras criaturas por até 1 minuto. Durante a duração, sempre que uma criatura hostil a você começar seu turno a até 30 pés de você, ela deve fazer um teste de resistência de Força contra sua CD de resistência de magia. Em uma falha, ela sofre 2d10 de dano de força e sua velocidade é reduzida a 0 até o início de seu próximo turno. Em uma defesa bem-sucedida, ela sofre metade do dano e cada pé que ela se move neste turno custa 2 pés extras de movimento. Você pode usar esta habilidade uma vez por descanso longo +Feature/&PowerWizardGraviturgistEventHorizonDescription=Você pode usar sua ação para emitir magicamente um poderoso campo de energia gravitacional que puxa outras criaturas por até 1 minuto. Durante a duração, sempre que uma criatura hostil a você começar seu turno a até 30 pés de você, ela deve fazer um teste de resistência de Força contra sua CD de resistência de magia. Em uma falha, ela sofre 2d10 de dano de força, e sua velocidade é reduzida a 0 até o início de seu próximo turno. Em uma resistência bem-sucedida, ela sofre metade do dano, e sua velocidade é reduzida pela metade. Você pode usar esta habilidade uma vez por descanso longo. Feature/&PowerWizardGraviturgistEventHorizonTitle=Horizonte de eventos Feature/&PowerWizardGraviturgistGravityWellDescription=A partir do 6º nível, as criaturas atingidas pelos seus ataques mágicos são empurradas para 1 célula de distância de você. Feature/&PowerWizardGraviturgistGravityWellTitle=Poço de gravidade -Feature/&PowerWizardGraviturgistViolentAttractionDescription=Você pode usar sua ação bônus para aumentar o poder de ataque das armas do aliado por 1 minuto. A criatura causa 1d10 de dano adicional com um ataque de arma uma vez durante seu turno. Você pode usar essa habilidade um número de vezes por descanso longo igual ao seu modificador de Inteligência. +Feature/&PowerWizardGraviturgistViolentAttractionDescription=Você pode usar sua ação bônus para aumentar o poder de ataque de um aliado que você pode ver a até 60 pés de você por 1 minuto. A criatura causa 1d10 de dano adicional com uma arma ou ataque desarmado uma vez durante seu turno. Você pode usar esta habilidade um número de vezes por descanso longo igual ao seu modificador de Inteligência. Feature/&PowerWizardGraviturgistViolentAttractionTitle=Atração Violenta Feedback/&AdditionalDamageViolentAttractionFormat=Atração violenta! Feedback/&AdditionalDamageViolentAttractionLine={0} realiza um ataque de atração violento em {1} (+{2}) diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardGraviturgist-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardGraviturgist-ru.txt index 034c99f1c9..a62f3c9685 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardGraviturgist-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardGraviturgist-ru.txt @@ -6,17 +6,17 @@ Condition/&ConditionWizardGraviturgistEventHorizonDescription=Скорость Condition/&ConditionWizardGraviturgistEventHorizonSelfDescription=Наносит 2d10 урона силовым полем каждый ход и уменьшает скорость врагов до нуля при провале спасброска Силы. Condition/&ConditionWizardGraviturgistEventHorizonSelfTitle=Горизонт событий Condition/&ConditionWizardGraviturgistEventHorizonTitle=Горизонт событий -Condition/&ConditionWizardGraviturgistViolentAttractionDescription=Существо наносит дополнительный урон в 1d10 единиц атакой оружием один раз за свой ход. +Condition/&ConditionWizardGraviturgistViolentAttractionDescription=Существо наносит дополнительный урон 1d10 оружием или безоружной атакой один раз за свой ход. Condition/&ConditionWizardGraviturgistViolentAttractionTitle=Агрессивное притяжение -Feature/&PowerWizardGraviturgistDensityDecreaseDescription=Вы можете использовать свое действие, чтобы уменьшить плотность цели, увеличив ее скорость на 10 футов и дав ей возможность совершать прыжки на максимальное расстояние без риска, за счет недостатка в проверках Силы и спасбросках. Вы можете использовать эту способность количество раз за короткий отдых, равное вашему модификатору Интеллекта, и она делит количество использований с Увеличенной плотностью. +Feature/&PowerWizardGraviturgistDensityDecreaseDescription=Вы можете использовать свое действие, чтобы уменьшить плотность существа, которое вы можете видеть в пределах 30 футов от вас, увеличивая его скорость ходьбы и дальность прыжка на 10 футов и позволяя ему совершать прыжки на максимальное расстояние без риска, ценой недостатка в проверках Силы и спасбросках. Вы можете использовать эту способность количество раз за короткий отдых, равное вашему модификатору Интеллекта, и она делит количество использований с Увеличенной плотностью. Feature/&PowerWizardGraviturgistDensityDecreaseTitle=Уменьшить плотность -Feature/&PowerWizardGraviturgistDensityIncreaseDescription=Вы можете использовать свое действие, чтобы увеличить плотность цели, уменьшив ее скорость на 10 футов с преимуществом при проверках Силы и спасбросках. Вы можете использовать эту способность количество раз за короткий отдых, равное вашему модификатору Интеллекта, и она делит количество использований с Уменьшением плотности. +Feature/&PowerWizardGraviturgistDensityIncreaseDescription=Вы можете использовать свое действие, чтобы увеличить плотность существа, которое вы можете видеть в пределах 30 футов от вас, уменьшив его скорость на 10 футов с преимуществом при проверках Силы и спасбросках. Вы можете использовать эту способность количество раз за короткий отдых, равное вашему модификатору Интеллекта, и она делит количество использований с Уменьшением плотности. Feature/&PowerWizardGraviturgistDensityIncreaseTitle=Увеличить плотность -Feature/&PowerWizardGraviturgistEventHorizonDescription=Вы можете использовать свое действие, чтобы магически испустить мощное поле гравитационной энергии, которое тянет других существ на срок до 1 минуты. В течение этого времени, когда существо, враждебное вам, начинает свой ход в пределах 30 футов от вас, оно должно сделать спасбросок Силы против вашего DC спасброска заклинания. При провале спасброска оно получает 2d10 урона силой, и его скорость снижается до 0 до начала следующего хода. При успешном спасброске оно получает вдвое меньше урона, и каждый фут, который оно перемещает в этом ходу, стоит 2 дополнительных фута движения. Вы можете использовать эту функцию один раз за длительный отдых +Feature/&PowerWizardGraviturgistEventHorizonDescription=Вы можете использовать свое действие, чтобы магически испустить мощное поле гравитационной энергии, которое тянет других существ на срок до 1 минуты. В течение этого времени, когда существо, враждебное вам, начинает свой ход в пределах 30 футов от вас, оно должно сделать спасбросок Силы против вашего DC спасброска заклинания. При провале спасброска оно получает 2d10 урона силой, а его скорость снижается до 0 до начала следующего хода. При успешном спасброске оно получает вдвое меньше урона, а его скорость уменьшается вдвое. Вы можете использовать эту способность один раз за длительный отдых. Feature/&PowerWizardGraviturgistEventHorizonTitle=Горизонт событий Feature/&PowerWizardGraviturgistGravityWellDescription=Начиная с 6-го уровня, существа, поражённые вашими атаками заклинанаями, отталкиваются на 1 клетку от вас. Feature/&PowerWizardGraviturgistGravityWellTitle=Гравитационный колодец -Feature/&PowerWizardGraviturgistViolentAttractionDescription=Вы можете использовать бонусное действие, чтобы увеличить ударную силу оружия союзника на 1 минуту. Существо наносит дополнительный урон 1d10 атакой оружием один раз за свой ход. Вы можете использовать эту способность количество раз за длительный отдых, равное вашему модификатору Интеллекта. +Feature/&PowerWizardGraviturgistViolentAttractionDescription=Вы можете использовать бонусное действие, чтобы увеличить ударную силу одного союзника, которого вы видите в пределах 60 футов от вас, на 1 минуту. Существо наносит дополнительный урон 1d10 оружием или безоружной атакой один раз за свой ход. Вы можете использовать эту способность количество раз за длительный отдых, равное вашему модификатору Интеллекта. Feature/&PowerWizardGraviturgistViolentAttractionTitle=Агрессивное притяжение Feedback/&AdditionalDamageViolentAttractionFormat=Агрессивное притяжение! Feedback/&AdditionalDamageViolentAttractionLine={0} совершает атаку с агрессивным притяжением по {1} (+{2}) diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardGraviturgist-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardGraviturgist-zh-CN.txt index 51a9a6e3a1..7a66662eb3 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardGraviturgist-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardGraviturgist-zh-CN.txt @@ -6,17 +6,17 @@ Condition/&ConditionWizardGraviturgistEventHorizonDescription=移动速度降为 Condition/&ConditionWizardGraviturgistEventHorizonSelfDescription=每回合造成 2d10 力场伤害,并在力量豁免失败时将敌人的移动速度降至零 Condition/&ConditionWizardGraviturgistEventHorizonSelfTitle=事件视界 Condition/&ConditionWizardGraviturgistEventHorizonTitle=事件视界 -Condition/&ConditionWizardGraviturgistViolentAttractionDescription=该生物在其回合中使用武器攻击一次,造成额外的 1d10 伤害。 +Condition/&ConditionWizardGraviturgistViolentAttractionDescription=该生物在其回合中使用武器或徒手攻击造成一次额外的 1d10 伤害。 Condition/&ConditionWizardGraviturgistViolentAttractionTitle=狂暴牵引 -Feature/&PowerWizardGraviturgistDensityDecreaseDescription=您可以使用您的行动来降低目标的密度,使其速度增加 10 英尺,并使其能够毫无风险地进行最大距离跳跃,但代价是力量检定和豁免检定处于劣势。您可以在每次短暂休息时使用此功能,次数等于您的智力调整值,并且其使用次数与增加密度相同。 +Feature/&PowerWizardGraviturgistDensityDecreaseDescription=您可以使用您的行动来降低您周围 30 英尺内可见生物的密度,使其行走速度和跳跃距离增加 10 英尺,并使其能够无风险地进行最大距离跳跃,但代价是力量检定和豁免检定处于劣势。您可以在每次短暂休息时使用此功能,次数等于您的智力调整值,并且其使用次数与增加密度相同。 Feature/&PowerWizardGraviturgistDensityDecreaseTitle=降低密度 -Feature/&PowerWizardGraviturgistDensityIncreaseDescription=您可以使用您的行动来增加目标的密度,使其速度降低 10 英尺,同时获得力量检定和豁免检定的优势。您可以在每次短暂休息时使用此功能,次数等于您的智力调整值,并且其使用次数与降低密度相同。 +Feature/&PowerWizardGraviturgistDensityIncreaseDescription=您可以使用您的行动来增加您周围 30 英尺内可见生物的密度,使其速度降低 10 英尺,同时获得力量检定和豁免检定的优势。您可以在每次短暂休息时使用此功能,次数等于您的智力调整值,并且其使用次数与降低密度相同。 Feature/&PowerWizardGraviturgistDensityIncreaseTitle=增加密度 -Feature/&PowerWizardGraviturgistEventHorizonDescription=你可以使用你的行动魔法般地发射出强大的引力场,拖拽其他生物,持续时间长达 1 分钟。在持续时间内,每当敌对的生物在你 30 英尺范围内开始其回合时,它必须进行力量豁免,对抗你的法术豁免 DC。如果豁免失败,它会受到 2d10 力量伤害,并且其速度会降低到 0,直到下一回合开始。如果豁免成功,它会受到一半的伤害,并且本回合每移动一英尺,就会额外花费 2 英尺的移动距离。你可以在每次长时间休息时使用此功能一次 +Feature/&PowerWizardGraviturgistEventHorizonDescription=你可以使用你的行动魔法般地发射出一个强大的引力场,拖拽其他生物,持续时间长达 1 分钟。在持续时间内,每当敌对的生物在你 30 英尺范围内开始其回合时,它必须进行力量豁免,对抗你的法术豁免 DC。如果豁免失败,它会受到 2d10 力量伤害,并且其速度会降低到 0,直到下一回合开始。如果豁免成功,它会受到一半的伤害,并且速度会减半。你可以在每次长时间休息时使用此功能一次。 Feature/&PowerWizardGraviturgistEventHorizonTitle=事件视界 Feature/&PowerWizardGraviturgistGravityWellDescription=被你的法术攻击击中的生物被推离你 1 格。 Feature/&PowerWizardGraviturgistGravityWellTitle=重力井 -Feature/&PowerWizardGraviturgistViolentAttractionDescription=你可以使用奖励行动增加盟友武器的攻击力,持续 1 分钟。该生物在其回合中用武器攻击造成一次额外的 1d10 伤害。你可以在每次长时间休息时使用此功能的次数等于你的智力调整值。 +Feature/&PowerWizardGraviturgistViolentAttractionDescription=您可以使用奖励行动来增加您 60 英尺范围内可见的一名盟友的攻击力,持续 1 分钟。该生物在其回合中用武器或徒手攻击造成一次额外的 1d10 伤害。您每次长时间休息时可以使用此功能的次数等于您的智力调整值。 Feature/&PowerWizardGraviturgistViolentAttractionTitle=狂暴牵引 Feedback/&AdditionalDamageViolentAttractionFormat=狂暴牵引! Feedback/&AdditionalDamageViolentAttractionLine={0} 对 {1} 进行狂暴牵引攻击 (+{2}) From a474cf76980a5a6f13458eaae205c58ca66d24a2 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 29 Oct 2024 20:47:04 -0700 Subject: [PATCH 03/85] add 'Swap Abjurer abjuration savant with 5e 2024 version' and 'Swap Evoker evocation savant with 5e 2024 version' --- .../UnfinishedBusinessBlueprints/Assets.txt | 10 ++ ...gicAffinityWizardAbjurationSavant2024.json | 39 ++++++ ...WizardAbjurationSavant2024Progression.json | 39 ++++++ ...agicAffinityWizardEvocationSavant2024.json | 39 ++++++ ...yWizardEvocationSavant2024Progression.json | 39 ++++++ .../SpellListWizardAbjuration.json | 107 +++++++++++++++ .../SpellListWizardEvocation.json | 122 ++++++++++++++++++ .../RulesetCharacterHeroExtensions.cs | 23 ++++ .../ChangelogHistory.txt | 2 + .../Displays/GeneralDisplay.cs | 16 ++- .../Displays/SubclassesDisplay.cs | 26 +++- .../Models/SubclassesContext.cs | 3 +- .../CharacterBuildingManagerPatcher.cs | 4 + SolastaUnfinishedBusiness/Settings.cs | 2 + SolastaUnfinishedBusiness/Settings/empty.xml | 2 + .../Settings/zappastuff.xml | 2 + .../Subclasses/WizardAbjuration.cs | 87 +++++++++++-- .../Subclasses/WizardEvocation.cs | 81 ++++++++++-- .../Translations/de/Settings-de.txt | 2 + .../de/SubClasses/WizardAbjuration-de.txt | 3 + .../de/SubClasses/WizardEvocation-de.txt | 3 + .../Translations/en/Settings-en.txt | 2 + .../en/SubClasses/WizardAbjuration-en.txt | 5 +- .../en/SubClasses/WizardEvocation-en.txt | 3 + .../Translations/es/Settings-es.txt | 2 + .../es/SubClasses/WizardAbjuration-es.txt | 3 + .../es/SubClasses/WizardEvocation-es.txt | 3 + .../Translations/fr/Settings-fr.txt | 2 + .../fr/SubClasses/WizardAbjuration-fr.txt | 3 + .../fr/SubClasses/WizardEvocation-fr.txt | 3 + .../Translations/it/Settings-it.txt | 2 + .../it/SubClasses/WizardAbjuration-it.txt | 3 + .../it/SubClasses/WizardEvocation-it.txt | 3 + .../Translations/ja/Settings-ja.txt | 2 + .../ja/SubClasses/WizardAbjuration-ja.txt | 3 + .../ja/SubClasses/WizardEvocation-ja.txt | 3 + .../Translations/ko/Settings-ko.txt | 2 + .../ko/SubClasses/WizardAbjuration-ko.txt | 3 + .../ko/SubClasses/WizardEvocation-ko.txt | 3 + .../Translations/pt-BR/Settings-pt-BR.txt | 2 + .../SubClasses/WizardAbjuration-pt-BR.txt | 3 + .../SubClasses/WizardEvocation-pt-BR.txt | 3 + .../Translations/ru/Settings-ru.txt | 2 + .../ru/SubClasses/WizardAbjuration-ru.txt | 3 + .../ru/SubClasses/WizardEvocation-ru.txt | 3 + .../Translations/zh-CN/Settings-zh-CN.txt | 2 + .../SubClasses/WizardAbjuration-zh-CN.txt | 3 + .../SubClasses/WizardEvocation-zh-CN.txt | 3 + 48 files changed, 697 insertions(+), 28 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/MagicAffinityWizardAbjurationSavant2024.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/MagicAffinityWizardAbjurationSavant2024Progression.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/MagicAffinityWizardEvocationSavant2024.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/MagicAffinityWizardEvocationSavant2024Progression.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellListDefinition/SpellListWizardAbjuration.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellListDefinition/SpellListWizardEvocation.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index b3de1a7ec8..944b316ba5 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -2885,9 +2885,13 @@ MagicAffinitySpellMasterKnowledge FeatureDefinitionMagicAffinity FeatureDefiniti MagicAffinitySpellMasterPrepared FeatureDefinitionMagicAffinity FeatureDefinition f1a7adea-c1c3-5bf0-8b20-c7682a25e443 MagicAffinitySpellMasterScriber FeatureDefinitionMagicAffinity FeatureDefinition fffd1d15-c290-5983-8c66-6a2052d0d280 MagicAffinitySpellShieldCombatMagicVigor FeatureDefinitionAdditionalDamage FeatureDefinition d397da35-229d-53b3-afda-26524a45f0f1 +MagicAffinityWizardAbjurationSavant2024 FeatureDefinitionPointPool FeatureDefinition 8e168709-4820-57e2-b341-df07d8b814c8 +MagicAffinityWizardAbjurationSavant2024Progression FeatureDefinitionPointPool FeatureDefinition 3dd0e8f0-e507-5d16-a1aa-febbc8064c42 MagicAffinityWizardAbjurationScriber FeatureDefinitionMagicAffinity FeatureDefinition 6ef73067-f72a-56b4-a405-eb1b4fdc5784 MagicAffinityWizardEvocationPotentCantrip FeatureDefinitionMagicAffinity FeatureDefinition d13d6382-c772-5cf7-9fb9-b294113456b4 MagicAffinityWizardEvocationSavant FeatureDefinitionMagicAffinity FeatureDefinition 2dbbbedb-dd0a-5a39-8059-fdd05d148c18 +MagicAffinityWizardEvocationSavant2024 FeatureDefinitionPointPool FeatureDefinition 465191d8-230c-5e3c-bd16-b3c87f969bb6 +MagicAffinityWizardEvocationSavant2024Progression FeatureDefinitionPointPool FeatureDefinition 3753adf2-f9ae-5cf2-adef-53cd799f0356 MovementAffinityAdderFangs FeatureDefinitionMovementAffinity FeatureDefinition 24a8238e-3242-5c56-aad5-7fce2b726d78 MovementAffinityAshardalonStride3 FeatureDefinitionMovementAffinity FeatureDefinition c6c95315-6ce3-5d1e-bf8f-ee8641723092 MovementAffinityAshardalonStride4 FeatureDefinitionMovementAffinity FeatureDefinition acd4d5fd-0f58-52bc-97be-b143a6bd3f0e @@ -5767,6 +5771,10 @@ MoveThroughEnemyModifierKineticJaunt FeatureDefinitionMoveThroughEnemyModifier F PerceptionAffinityHelmOfAwareness FeatureDefinitionPerceptionAffinity FeatureDefinitionPerceptionAffinity 514681b3-8d6d-54ef-97a8-562de1ff46a6 PerceptionAffinityMartialGuardianVigilance FeatureDefinitionPerceptionAffinity FeatureDefinitionPerceptionAffinity b0c29b41-a91c-5a72-acb5-8c0f38bb3b58 PerceptionAffinitySteelDefender FeatureDefinitionPerceptionAffinity FeatureDefinitionPerceptionAffinity 1e2f7b93-3ee7-571a-b87a-ad16d7b85c9e +MagicAffinityWizardAbjurationSavant2024 FeatureDefinitionPointPool FeatureDefinitionPointPool 8e168709-4820-57e2-b341-df07d8b814c8 +MagicAffinityWizardAbjurationSavant2024Progression FeatureDefinitionPointPool FeatureDefinitionPointPool 3dd0e8f0-e507-5d16-a1aa-febbc8064c42 +MagicAffinityWizardEvocationSavant2024 FeatureDefinitionPointPool FeatureDefinitionPointPool 465191d8-230c-5e3c-bd16-b3c87f969bb6 +MagicAffinityWizardEvocationSavant2024Progression FeatureDefinitionPointPool FeatureDefinitionPointPool 3753adf2-f9ae-5cf2-adef-53cd799f0356 PointPool1BonusFeats FeatureDefinitionPointPool FeatureDefinitionPointPool b3b13130-72f4-5b64-bacf-272a57585bdd PointPool2BonusFeats FeatureDefinitionPointPool FeatureDefinitionPointPool 8888a0c1-4b7b-5ba0-a9cf-6d0400bd7856 PointPool3BonusFeats FeatureDefinitionPointPool FeatureDefinitionPointPool 27ab1eaf-5a4e-54d9-966d-d480035d104c @@ -12752,6 +12760,8 @@ SpellListTieflingDevilTongue SpellListDefinition SpellListDefinition 3256fdd0-8e SpellListTieflingFeral SpellListDefinition SpellListDefinition bb5f484e-b41b-5624-905f-a9a5d1fbfd82 SpellListTieflingMephistopheles SpellListDefinition SpellListDefinition 429e415d-a3d0-5aa6-ac70-7c142850c48a SpellListTieflingZariel SpellListDefinition SpellListDefinition f41a1627-ba3d-5535-b0bb-b291680b3b70 +SpellListWizardAbjuration SpellListDefinition SpellListDefinition 870c7c5f-da57-57f0-b7d7-67d0f9ddc796 +SpellListWizardEvocation SpellListDefinition SpellListDefinition eed10e04-46ed-5ed2-8f90-85d71e397d71 TutorialActionSwitching TutorialStepDefinition TutorialStepDefinition 307dd679-c698-57a9-aa5b-5faac2d24c07 CEHalberdType WeaponTypeDefinition WeaponTypeDefinition 3c4df6c0-0e8e-5237-a27c-9144e1186cf9 CEHandXbowType WeaponTypeDefinition WeaponTypeDefinition 322c5334-3af4-57ef-aa30-6909d6705c10 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/MagicAffinityWizardAbjurationSavant2024.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/MagicAffinityWizardAbjurationSavant2024.json new file mode 100644 index 0000000000..cc18d726ba --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/MagicAffinityWizardAbjurationSavant2024.json @@ -0,0 +1,39 @@ +{ + "$type": "FeatureDefinitionPointPool, Assembly-CSharp", + "poolType": "Spell", + "poolAmount": 2, + "restrictedChoices": [], + "uniqueChoices": false, + "spellListOverride": "Definition:SpellListWizardAbjuration:870c7c5f-da57-57f0-b7d7-67d0f9ddc796", + "ritualOnly": false, + "minSpellLevel": 0, + "maxSpellLevel": 0, + "extraSpellsTag": "", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&MagicAffinityWizardAbjurationSavant2024Title", + "description": "Feature/&MagicAffinityWizardAbjurationSavant2024Description", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "8e168709-4820-57e2-b341-df07d8b814c8", + "contentPack": 9999, + "name": "MagicAffinityWizardAbjurationSavant2024" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/MagicAffinityWizardAbjurationSavant2024Progression.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/MagicAffinityWizardAbjurationSavant2024Progression.json new file mode 100644 index 0000000000..58946c9f9c --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/MagicAffinityWizardAbjurationSavant2024Progression.json @@ -0,0 +1,39 @@ +{ + "$type": "FeatureDefinitionPointPool, Assembly-CSharp", + "poolType": "Spell", + "poolAmount": 1, + "restrictedChoices": [], + "uniqueChoices": false, + "spellListOverride": "Definition:SpellListWizardAbjuration:870c7c5f-da57-57f0-b7d7-67d0f9ddc796", + "ritualOnly": false, + "minSpellLevel": 0, + "maxSpellLevel": 0, + "extraSpellsTag": "Abjurer", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "3dd0e8f0-e507-5d16-a1aa-febbc8064c42", + "contentPack": 9999, + "name": "MagicAffinityWizardAbjurationSavant2024Progression" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/MagicAffinityWizardEvocationSavant2024.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/MagicAffinityWizardEvocationSavant2024.json new file mode 100644 index 0000000000..dad39b7365 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/MagicAffinityWizardEvocationSavant2024.json @@ -0,0 +1,39 @@ +{ + "$type": "FeatureDefinitionPointPool, Assembly-CSharp", + "poolType": "Spell", + "poolAmount": 2, + "restrictedChoices": [], + "uniqueChoices": false, + "spellListOverride": "Definition:SpellListWizardEvocation:eed10e04-46ed-5ed2-8f90-85d71e397d71", + "ritualOnly": false, + "minSpellLevel": 0, + "maxSpellLevel": 0, + "extraSpellsTag": "", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&MagicAffinityWizardEvocationSavant2024Title", + "description": "Feature/&MagicAffinityWizardEvocationSavant2024Description", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "465191d8-230c-5e3c-bd16-b3c87f969bb6", + "contentPack": 9999, + "name": "MagicAffinityWizardEvocationSavant2024" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/MagicAffinityWizardEvocationSavant2024Progression.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/MagicAffinityWizardEvocationSavant2024Progression.json new file mode 100644 index 0000000000..21ebae06c1 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/MagicAffinityWizardEvocationSavant2024Progression.json @@ -0,0 +1,39 @@ +{ + "$type": "FeatureDefinitionPointPool, Assembly-CSharp", + "poolType": "Spell", + "poolAmount": 1, + "restrictedChoices": [], + "uniqueChoices": false, + "spellListOverride": "Definition:SpellListWizardEvocation:eed10e04-46ed-5ed2-8f90-85d71e397d71", + "ritualOnly": false, + "minSpellLevel": 0, + "maxSpellLevel": 0, + "extraSpellsTag": "Evoker", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "3753adf2-f9ae-5cf2-adef-53cd799f0356", + "contentPack": 9999, + "name": "MagicAffinityWizardEvocationSavant2024Progression" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellListDefinition/SpellListWizardAbjuration.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellListDefinition/SpellListWizardAbjuration.json new file mode 100644 index 0000000000..fee83bab76 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellListDefinition/SpellListWizardAbjuration.json @@ -0,0 +1,107 @@ +{ + "$type": "SpellListDefinition, Assembly-CSharp", + "hasCantrips": true, + "maxSpellLevel": 9, + "spellsByLevel": [ + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 0, + "spells": [ + "Definition:ShadowArmor:2542a6717952164479079fcad2ed60f9" + ] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 1, + "spells": [ + "Definition:MageArmor:4772a21b455a76149adcc38d58267a10", + "Definition:ProtectionFromEvilGood:b8a59d1a01529b04893e0c440cecee39", + "Definition:Shield:f69bd9c9375fc074a90043c42f9868fe" + ] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 2, + "spells": [] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 3, + "spells": [ + "Definition:Counterspell:699759f98dacad84fb2d7323e0788179", + "Definition:DispelMagic:296e789b353c0324b804bee2c16a419a", + "Definition:ProtectionFromEnergy:8416ac74aea478f498e2d50380376e90", + "Definition:RemoveCurse:ecabaf5104767c04b9a6549866fccfa0" + ] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 4, + "spells": [ + "Definition:Banishment:5f6a4b43068dbdc448632b9d43022eb8", + "Definition:Stoneskin:9040c4fcd7301184f8772720f716a837" + ] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 5, + "spells": [] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 6, + "spells": [ + "Definition:GlobeOfInvulnerability:eb567aec38beff84d87040cb9a006177" + ] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 7, + "spells": [ + "Definition:Symbol:8c8ce37ddf59f72449ac2a6f384d34ea" + ] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 8, + "spells": [ + "Definition:Maze:dd6e34fdb0acb334fa90be75576f7818", + "Definition:SpellWard:bf6cbb4f462c5fe4db090980b9126a43" + ] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 9, + "spells": [] + } + ], + "compositeSpellList": false, + "sourceSpellLists": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "SpellList/&SpellListWizardTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "870c7c5f-da57-57f0-b7d7-67d0f9ddc796", + "contentPack": 9999, + "name": "SpellListWizardAbjuration" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellListDefinition/SpellListWizardEvocation.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellListDefinition/SpellListWizardEvocation.json new file mode 100644 index 0000000000..4af4d4efb4 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellListDefinition/SpellListWizardEvocation.json @@ -0,0 +1,122 @@ +{ + "$type": "SpellListDefinition, Assembly-CSharp", + "hasCantrips": true, + "maxSpellLevel": 9, + "spellsByLevel": [ + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 0, + "spells": [ + "Definition:DancingLights:ca63de70121df1b46ae3c1f8c183f941", + "Definition:FireBolt:fac7c06d87f301d4ca3798b4c18d86c8", + "Definition:Light:c1d0bf7d6cd76e543a665bd1cb3aa01c", + "Definition:RayOfFrost:637a3697f05a4614e8200abfa5daaaff", + "Definition:ShockingGrasp:0bcfc5c29da450c4bb0f27df027616eb" + ] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 1, + "spells": [ + "Definition:BurningHands:a2c42e38e03448e438a2abfc3252352a", + "Definition:BurningHands_B:ba16d3435466af74abdaa2a3ecaf934b", + "Definition:MagicMissile:2b2b43fb6eeb735479a21209286db382", + "Definition:Thunderwave:6c670662de0366842bca44119e9104da" + ] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 2, + "spells": [ + "Definition:AcidArrow:f37e9c53e7ea033458b5eba667a67f84", + "Definition:Darkness:b8d5ac9f43f55be479da08cd37744584", + "Definition:FlamingSphere:3b54dc222148dc8499eb981f7383c71f", + "Definition:ScorchingRay:2196d4d1af65ab8469bcb2b382014a58", + "Definition:Shatter:acb96b651384a47428da7c0c32ab359e" + ] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 3, + "spells": [ + "Definition:Fireball:3f88bf59a445ce64aa23dfb935750535", + "Definition:LightningBolt:f6e4a759d9257fe429523d7f3e8d9eb3" + ] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 4, + "spells": [ + "Definition:FireShield:bd4acac8d77f8e6459eaf8d5eebae6f3", + "Definition:IceStorm:433fb934e19f1b5409b89bfa7fed3e3d", + "Definition:WallOfFire:c44e8ec6d1e888e47bbd40981b7a605d" + ] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 5, + "spells": [ + "Definition:ConeOfCold:4014172b09c7b0347911d81077d7ba0c" + ] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 6, + "spells": [ + "Definition:ChainLightning:1f64e610644230f4fa5054960f9eda8c", + "Definition:FreezingSphere:981aa235259bf274da28bd3e913902ad", + "Definition:Sunbeam:ec547e11445032d4f9519982399724a6" + ] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 7, + "spells": [ + "Definition:ArcaneSword:5ce0ab0f961bee24fbf38fe9d45f8def", + "Definition:DelayedBlastFireball:2a6be6d6587508546a64e174134a37eb", + "Definition:PrismaticSpray:322f68bf5c12ce94291974479425c1cd" + ] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 8, + "spells": [ + "Definition:Sunburst:ae5f8354abadb0d448df8951b9488354" + ] + }, + { + "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", + "level": 9, + "spells": [] + } + ], + "compositeSpellList": false, + "sourceSpellLists": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "SpellList/&SpellListWizardTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "eed10e04-46ed-5ed2-8f90-85d71e397d71", + "contentPack": 9999, + "name": "SpellListWizardEvocation" +} \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterHeroExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterHeroExtensions.cs index 3aaf3ec5f6..68d35985c0 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterHeroExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterHeroExtensions.cs @@ -1,6 +1,7 @@ using System.Linq; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Behaviors; +using SolastaUnfinishedBusiness.Models; namespace SolastaUnfinishedBusiness.Api.GameExtensions; @@ -93,6 +94,28 @@ internal static bool IsWieldingTwoHandedWeapon([NotNull] this RulesetCharacterHe } #endif + internal static void GrantAcquiredSpellWithTagFromSubclassPool( + this RulesetCharacterHero hero, string subClassName, string tag) + { + var heroBuildingData = hero.GetHeroBuildingData(); + var selectedClass = LevelUpContext.GetSelectedClass(hero); + var classLevel = LevelUpContext.GetSelectedClassLevel(hero); + // it's indeed TagClass as this is how spell pools are offered in vanilla when from subclass + var poolName = $"{AttributeDefinitions.TagClass}{selectedClass!.Name}{classLevel}{subClassName}{tag}"; + + if (!heroBuildingData.AcquiredSpells.TryGetValue(poolName, out var spells)) + { + return; + } + + var spellRepertoire = hero.SpellRepertoires.FirstOrDefault(x => x.SpellCastingClass == selectedClass); + + foreach (var spell in spells) + { + hero.GrantSpell(spell, spellRepertoire!.SpellCastingFeature); + } + } + internal static bool HasEmptyMainHand([NotNull] this RulesetCharacterHero hero) { return hero.GetMainWeapon() == null; diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index f32b3cb933..58333305d7 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,5 +1,7 @@ 1.5.97.37: +- added Character > Subclasses > 'Swap Abjurer abjuration savant with 5e 2024 version' [OneDnd] +- added Character > Subclasses > 'Swap Evoker evocation savant with 5e 2024 version' [OneDnd] - fixed Wizard Graviturgist descriptions, SFX, and behaviors - renamed mod UI tabletop sections to 5e 2014, and 5e 2024 diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index f8d8fc6c9f..0e32313db7 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -411,6 +411,21 @@ private static void DisplayOneDnd() UI.Label(); + toggle = Main.Settings.SwapAbjurationSavant; + if (UI.Toggle(Gui.Localize("ModUi/&SwapAbjurationSavant"), ref toggle, UI.AutoWidth())) + { + Main.Settings.SwapAbjurationSavant = toggle; + WizardAbjuration.SwapSavantAndSavant2024(); + } + + toggle = Main.Settings.SwapEvocationSavant; + // ReSharper disable once InvertIf + if (UI.Toggle(Gui.Localize("ModUi/&SwapEvocationSavant"), ref toggle, UI.AutoWidth())) + { + Main.Settings.SwapEvocationSavant = toggle; + WizardEvocation.SwapSavantAndSavant2024(); + } + toggle = Main.Settings.SwapEvocationPotentCantripAndSculptSpell; // ReSharper disable once InvertIf if (UI.Toggle(Gui.Localize("ModUi/&SwapEvocationPotentCantripAndSculptSpell"), ref toggle, UI.AutoWidth())) @@ -725,7 +740,6 @@ private static void DisplayTabletop() UI.Label(); toggle = Main.Settings.EnableBardHealingBalladOnLongRest; - // ReSharper disable once InvertIf if (UI.Toggle(Gui.Localize("ModUi/&EnableBardHealingBalladOnLongRest"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardHealingBalladOnLongRest = toggle; diff --git a/SolastaUnfinishedBusiness/Displays/SubclassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/SubclassesDisplay.cs index 0dd7ce717a..8d97dc96f8 100644 --- a/SolastaUnfinishedBusiness/Displays/SubclassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SubclassesDisplay.cs @@ -30,11 +30,19 @@ private static void DisplaySubclassesGeneral() Main.Settings.AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness = toggle; } + UI.Label(); + toggle = Main.Settings.EnableBg3AbjurationArcaneWard; if (UI.Toggle(Gui.Localize("ModUi/&EnableBG3AbjurationArcaneWard"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBg3AbjurationArcaneWard = toggle; - WizardAbjuration.UpdateBg3ModeStatus(); + WizardAbjuration.SwapAbjurationBaldurGate3Mode(); + } + + if (Main.Settings.EnableBg3AbjurationArcaneWard) + { + UI.Label(Gui.Localize("ModUi/&EnableBG3AbjurationArcaneWardHelp")); + UI.Label(); } toggle = Main.Settings.EnableBardHealingBalladOnLongRest; @@ -50,10 +58,20 @@ private static void DisplaySubclassesGeneral() Main.Settings.EnableRogueStrSaving = toggle; } - if (Main.Settings.EnableBg3AbjurationArcaneWard) + UI.Label(); + + toggle = Main.Settings.SwapAbjurationSavant; + if (UI.Toggle(Gui.Localize("ModUi/&SwapAbjurationSavant"), ref toggle, UI.AutoWidth())) { - UI.Label(Gui.Localize("ModUi/&EnableBG3AbjurationArcaneWardHelp")); - UI.Label(); + Main.Settings.SwapAbjurationSavant = toggle; + WizardAbjuration.SwapSavantAndSavant2024(); + } + + toggle = Main.Settings.SwapEvocationSavant; + if (UI.Toggle(Gui.Localize("ModUi/&SwapEvocationSavant"), ref toggle, UI.AutoWidth())) + { + Main.Settings.SwapEvocationSavant = toggle; + WizardEvocation.SwapSavantAndSavant2024(); } toggle = Main.Settings.SwapEvocationPotentCantripAndSculptSpell; diff --git a/SolastaUnfinishedBusiness/Models/SubclassesContext.cs b/SolastaUnfinishedBusiness/Models/SubclassesContext.cs index 8ea110f923..9bde09b3ed 100644 --- a/SolastaUnfinishedBusiness/Models/SubclassesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SubclassesContext.cs @@ -66,8 +66,9 @@ internal static void LateLoad() CollegeOfLife.LateLoad(); RangerSurvivalist.LateLoad(); SorcerousFieldManipulator.LateLoad(); + WizardAbjuration.LateLoad(); WizardDeadMaster.LateLoad(); - WizardEvocation.SwapEvocationPotentCantripAndSculptSpell(); + WizardEvocation.LateLoad(); } private static void RegisterClassesContext() diff --git a/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs index 3e09a62cf2..5995efc95e 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs @@ -181,6 +181,10 @@ public static void Postfix(CharacterBuildingManager __instance, [NotNull] Rulese //PATCH: grants cantrip selected by a Domain Nature on level 1 DomainNature.GrantCantripFromSubclassPool(hero); + //PATCH: grant spells for these 2 subs as pools with tags aren't granted from subs if not at sub 1st level + hero.GrantAcquiredSpellWithTagFromSubclassPool(WizardAbjuration.Name, WizardAbjuration.SpellTag); + hero.GrantAcquiredSpellWithTagFromSubclassPool(WizardEvocation.Name, WizardEvocation.SpellTag); + //PATCH: grants spell repertoires and respective selected spells from feats LevelUpContext.GrantSpellsOrCantripsFromFeatCastSpell(__instance, hero); diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 3578ad1b72..0a7d817080 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -378,6 +378,8 @@ public class Settings : UnityModManager.ModSettings public bool RemoveSchoolRestrictionsFromShadowCaster { get; set; } public bool RemoveSchoolRestrictionsFromSpellBlade { get; set; } public int WildSurgeDieRollThreshold { get; set; } = 2; + public bool SwapAbjurationSavant { get; set; } + public bool SwapEvocationSavant { get; set; } public bool SwapEvocationPotentCantripAndSculptSpell { get; set; } public SerializableDictionary KlassListSliderPosition { get; set; } = []; public SerializableDictionary> KlassListSubclassEnabled { get; set; } = []; diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index 45b871b3e4..dfedc14830 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -810,6 +810,8 @@ false false 2 + false + false false diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index 3a72d3c4ce..1a1763d56d 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -1422,6 +1422,8 @@ false false 2 + false + false true diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs b/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs index 5a32d93a7b..588055be5c 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; +using System.Linq; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.Helpers; @@ -23,7 +24,8 @@ namespace SolastaUnfinishedBusiness.Subclasses; [UsedImplicitly] public sealed class WizardAbjuration : AbstractSubclass { - private const string Name = "WizardAbjuration"; + internal const string Name = "WizardAbjuration"; + internal const string SpellTag = "Abjurer"; private const string ArcaneWardConditionName = $"Condition{Name}ArcaneWard"; private const string ProjectedWardConditionName = $"Condition{Name}ProjectedWard"; @@ -31,16 +33,39 @@ public sealed class WizardAbjuration : AbstractSubclass private static ConditionDefinition _conditionArcaneWard; + private static readonly SpellListDefinition SpellListAbjurer = SpellListDefinitionBuilder + .Create(SpellListDefinitions.SpellListWizard, $"SpellList{Name}") + .AddToDB(); + + private static readonly FeatureDefinitionMagicAffinity MagicAffinitySavant = FeatureDefinitionMagicAffinityBuilder + .Create($"MagicAffinity{Name}Scriber") + .SetGuiPresentation($"MagicAffinity{Name}Scriber", Category.Feature) + .SetSpellLearnAndPrepModifiers( + 0.5f, 0.5f, 0, AdvantageType.None, PreparedSpellsModifier.None) + .AddCustomSubFeatures(new ModifyScribeCostAndDurationAbjurationSavant()) + .AddToDB(); + + // no spell tag here as this work correctly with vanilla + private static readonly FeatureDefinitionPointPool MagicAffinitySavant2024 = FeatureDefinitionPointPoolBuilder + .Create($"MagicAffinity{Name}Savant2024") + .SetGuiPresentation(Category.Feature) + .SetSpellOrCantripPool(HeroDefinitions.PointsPoolType.Spell, 2, SpellListAbjurer) + .AddToDB(); + + // need spell tag here to get this offered on level up and + // let custom behavior at CharacterBuildingManager.FinalizeCharacter grant the spell + private static readonly FeatureDefinitionPointPool MagicAffinitySavant2024Progression = + FeatureDefinitionPointPoolBuilder + .Create($"MagicAffinity{Name}Savant2024Progression") + .SetGuiPresentationNoContent(true) + .SetSpellOrCantripPool(HeroDefinitions.PointsPoolType.Spell, 1, SpellListAbjurer, SpellTag) + .AddToDB(); + + private static CharacterSubclassDefinition _subclass; + public WizardAbjuration() { // Lv.2 Abjuration Savant - var magicAffinityAbjurationScriber = FeatureDefinitionMagicAffinityBuilder - .Create($"MagicAffinity{Name}Scriber") - .SetGuiPresentation($"MagicAffinity{Name}Scriber", Category.Feature) - .SetSpellLearnAndPrepModifiers( - 0.5f, 0.5f, 0, AdvantageType.None, PreparedSpellsModifier.None) - .AddCustomSubFeatures(new ModifyScribeCostAndDurationAbjurationSavant()) - .AddToDB(); // LV.2 Arcane Ward // initialize power points pool with INT mod points @@ -183,13 +208,13 @@ public WizardAbjuration() Subclass = CharacterSubclassDefinitionBuilder .Create(Name) .SetGuiPresentation(Category.Subclass, Sprites.GetSprite(Name, Resources.WizardAbjuration, 256)) - .AddFeaturesAtLevel(2, magicAffinityAbjurationScriber, PowerArcaneWard) + .AddFeaturesAtLevel(2, MagicAffinitySavant, PowerArcaneWard) .AddFeaturesAtLevel(6, powerProjectedWard) .AddFeaturesAtLevel(10, featureSetImprovedAbjuration) .AddFeaturesAtLevel(14, featureSetSpellResistance) .AddToDB(); - UpdateBg3ModeStatus(); + _subclass = Subclass; } private static FeatureDefinitionPower PowerArcaneWard => _powerArcaneWard ??= BuildArcaneWard(); @@ -206,6 +231,46 @@ public WizardAbjuration() // ReSharper disable once UnassignedGetOnlyAutoProperty internal override DeityDefinition DeityDefinition { get; } + internal static void LateLoad() + { + SwapSavantAndSavant2024(); + SwapAbjurationBaldurGate3Mode(); + + SpellListAbjurer.SpellsByLevel.SetRange( + SpellListDefinitions.SpellListWizard.SpellsByLevel + .Select(spellByLevel => new SpellListDefinition.SpellsByLevelDuplet + { + Level = spellByLevel.Level, + spells = spellByLevel.Spells.Where(x => x.SchoolOfMagic == SchoolAbjuration).ToList() + })); + } + + internal static void SwapSavantAndSavant2024() + { + var level = Main.Settings.EnableWizardToLearnSchoolAtLevel3 ? 3 : 2; + + _subclass.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == MagicAffinitySavant || + x.FeatureDefinition == MagicAffinitySavant2024 || + x.FeatureDefinition == MagicAffinitySavant2024Progression); + + if (Main.Settings.SwapAbjurationSavant) + { + _subclass.FeatureUnlocks.Add(new FeatureUnlockByLevel(MagicAffinitySavant2024, level)); + + for (var i = 5; i <= 20; i += 2) + { + _subclass.FeatureUnlocks.Add(new FeatureUnlockByLevel(MagicAffinitySavant2024Progression, i)); + } + } + else + { + _subclass.FeatureUnlocks.Add(new FeatureUnlockByLevel(MagicAffinitySavant, level)); + } + + _subclass.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + private static FeatureDefinitionPower BuildArcaneWard() { return FeatureDefinitionPowerBuilder @@ -281,7 +346,7 @@ private static ModifySustainedDamageHandler ProjectedWardModifyDamage() }; } - public static void UpdateBg3ModeStatus() + internal static void SwapAbjurationBaldurGate3Mode() { if (IsBg3Mode) { diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardEvocation.cs b/SolastaUnfinishedBusiness/Subclasses/WizardEvocation.cs index 3f363e50fd..1becaeab4c 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardEvocation.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardEvocation.cs @@ -5,6 +5,7 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.Helpers; +using SolastaUnfinishedBusiness.Api.LanguageExtensions; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.CustomUI; @@ -20,8 +21,9 @@ namespace SolastaUnfinishedBusiness.Subclasses; [UsedImplicitly] public sealed class WizardEvocation : AbstractSubclass { - private const string Name = "WizardEvocation"; + internal const string Name = "WizardEvocation"; + internal const string SpellTag = "Evoker"; // // these lists contain all evocation spells that do damage in a non-vanilla way so they also get bonus // @@ -63,6 +65,34 @@ public sealed class WizardEvocation : AbstractSubclass .AddCustomSubFeatures(new MagicEffectBeforeHitConfirmedOnEnemyPotentCantrips()) .AddToDB(); + private static readonly FeatureDefinitionMagicAffinity MagicAffinitySavant = FeatureDefinitionMagicAffinityBuilder + .Create($"MagicAffinity{Name}Savant") + .SetGuiPresentation(Category.Feature) + .SetSpellLearnAndPrepModifiers( + 0.5f, 0.5f, 0, AdvantageType.None, PreparedSpellsModifier.None) + .AddCustomSubFeatures(new ModifyScribeCostAndDurationEvocationSavant()) + .AddToDB(); + + private static readonly SpellListDefinition SpellListEvoker = SpellListDefinitionBuilder + .Create(SpellListDefinitions.SpellListWizard, $"SpellList{Name}") + .AddToDB(); + + // no spell tag here as this work correctly with vanilla + private static readonly FeatureDefinitionPointPool MagicAffinitySavant2024 = FeatureDefinitionPointPoolBuilder + .Create($"MagicAffinity{Name}Savant2024") + .SetGuiPresentation(Category.Feature) + .SetSpellOrCantripPool(HeroDefinitions.PointsPoolType.Spell, 2, SpellListEvoker) + .AddToDB(); + + // need spell tag here to get this offered on level up and + // let custom behavior at CharacterBuildingManager.FinalizeCharacter grant the spell + private static readonly FeatureDefinitionPointPool MagicAffinitySavant2024Progression = + FeatureDefinitionPointPoolBuilder + .Create($"MagicAffinity{Name}Savant2024Progression") + .SetGuiPresentationNoContent(true) + .SetSpellOrCantripPool(HeroDefinitions.PointsPoolType.Spell, 1, SpellListEvoker, SpellTag) + .AddToDB(); + private static CharacterSubclassDefinition _subclass; public WizardEvocation() @@ -71,14 +101,6 @@ public WizardEvocation() // Evocation Savant - var magicAffinitySavant = FeatureDefinitionMagicAffinityBuilder - .Create($"MagicAffinity{Name}Savant") - .SetGuiPresentation(Category.Feature) - .SetSpellLearnAndPrepModifiers( - 0.5f, 0.5f, 0, AdvantageType.None, PreparedSpellsModifier.None) - .AddCustomSubFeatures(new ModifyScribeCostAndDurationEvocationSavant()) - .AddToDB(); - // Sculpt Spells // LEVEL 06 @@ -137,7 +159,7 @@ public WizardEvocation() Subclass = CharacterSubclassDefinitionBuilder .Create(Name) .SetGuiPresentation(Category.Subclass, Sprites.GetSprite(Name, Resources.WizardEvocation, 256)) - .AddFeaturesAtLevel(2, magicAffinitySavant, FeatureSculptSpells) + .AddFeaturesAtLevel(2, MagicAffinitySavant, FeatureSculptSpells) .AddFeaturesAtLevel(6, MagicAffinityPotentCantrip) .AddFeaturesAtLevel(10, featureEmpoweredEvocation) .AddFeaturesAtLevel(14, featureSetOverChannel) @@ -156,6 +178,19 @@ public WizardEvocation() // ReSharper disable once UnassignedGetOnlyAutoProperty internal override DeityDefinition DeityDefinition { get; } + internal static void LateLoad() + { + SwapSavantAndSavant2024(); + + SpellListEvoker.SpellsByLevel.SetRange( + SpellListDefinitions.SpellListWizard.SpellsByLevel + .Select(spellByLevel => new SpellListDefinition.SpellsByLevelDuplet + { + Level = spellByLevel.Level, + spells = spellByLevel.Spells.Where(x => x.SchoolOfMagic == SchoolEvocation).ToList() + })); + } + internal static void SwapEvocationPotentCantripAndSculptSpell() { var level = Main.Settings.EnableWizardToLearnSchoolAtLevel3 ? 3 : 2; @@ -178,6 +213,32 @@ internal static void SwapEvocationPotentCantripAndSculptSpell() _subclass.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } + internal static void SwapSavantAndSavant2024() + { + var level = Main.Settings.EnableWizardToLearnSchoolAtLevel3 ? 3 : 2; + + _subclass.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == MagicAffinitySavant || + x.FeatureDefinition == MagicAffinitySavant2024 || + x.FeatureDefinition == MagicAffinitySavant2024Progression); + + if (Main.Settings.SwapEvocationSavant) + { + _subclass.FeatureUnlocks.Add(new FeatureUnlockByLevel(MagicAffinitySavant2024, level)); + + for (var i = 5; i <= 20; i += 2) + { + _subclass.FeatureUnlocks.Add(new FeatureUnlockByLevel(MagicAffinitySavant2024Progression, i)); + } + } + else + { + _subclass.FeatureUnlocks.Add(new FeatureUnlockByLevel(MagicAffinitySavant, level)); + } + + _subclass.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + // // Evocation Savant // diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 947b8bbecf..8d389099b0 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -293,8 +293,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=Füllen Sie Gorims Laden mit ModUi/&StockHugoStoreWithAdditionalFoci=Füllen Sie Hugos Laden mit Arkanstab, Druidenhals, Stab und Keule als Fokusgegenstände. ModUi/&Subclasses=Unterklassen ModUi/&Subraces=Unterrassen +ModUi/&SwapAbjurationSavant=Tauschen Sie Abjurer Abjuration Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] ModUi/&SwapCraftedItemAndRecipeIcons=+ Rezepte und Symbole für hergestellte Gegenstände im Shop austauschen ModUi/&SwapEvocationPotentCantripAndSculptSpell=Tauschen Sie die Funktionen Evoker Sculpt Spells und Potent Cantrip aus +ModUi/&SwapEvocationSavant=Tauschen Sie Evoker Evocation Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] ModUi/&TableTopButton=Tabletop-Inhalt auswählen ModUi/&TableTopHelp1=• In den folgenden Abschnitten werden die im Mod verstreuten Einstellungen für 5e 2014 und 2024 neu gruppiert und dupliziert, damit Sie es einfacher haben ModUi/&TableTopHelp2=• Drücken Sie die Taste, um unter der Registerkarte „Charakter“ nur Tabletop-Inhalte auszuwählen, und wählen Sie alle Optionen darunter für ein echtes TT-Erlebnis aus diff --git a/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardAbjuration-de.txt b/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardAbjuration-de.txt index 3849d2c760..02c17de802 100644 --- a/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardAbjuration-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardAbjuration-de.txt @@ -1,5 +1,7 @@ Condition/&ConditionWizardAbjurationArcaneWardDescription=Dein Arkaner Schutz ist aktiv Condition/&ConditionWizardAbjurationArcaneWardTitle=Arkaner Schutz +Feature/&MagicAffinityWizardAbjurationSavant2024Description=Wählen Sie zwei Zaubersprüche der Schule der Abschwörung und fügen Sie sie kostenlos Ihrem Zauberbuch hinzu. Außerdem können Sie, wenn Sie Zugriff auf eine neue Stufe von Zauberplätzen in dieser Klasse erhalten, einen Zauberspruch der Schule der Abschwörung kostenlos Ihrem Zauberbuch hinzufügen. +Feature/&MagicAffinityWizardAbjurationSavant2024Title=Beschwörungsgelehrter Feature/&MagicAffinityWizardAbjurationScriberDescription=Ab der Auswahl dieser Schule auf der 2. Stufe halbiert sich der Gold- und Zeitaufwand, den Sie zum Kopieren eines Beschwörungszaubers in Ihr Zauberbuch benötigen. Feature/&MagicAffinityWizardAbjurationScriberTitle=Gelehrter der Abschwörung Feature/&PowerWizardAbjurationArcaneWardBG3Description=Die Restmagie deiner Zauber bildet einen Schutz um dich herum, der dich vor Schaden schützt. Jedes Mal, wenn du einen Bannzauber wirkst, erhöht sich die Intensität des Schutzes um die Stufe des Zaubers, bis zu einem Maximum von 2x deiner Zaubererstufe.\Wenn du Schaden nimmst, blockiert der Schutz eine Schadensmenge, die seiner Intensität entspricht, und seine Intensität verringert sich um 1.\nNach jeder langen Pause wird die Intensität des Schutzes zurückgesetzt und entspricht deiner Zaubererstufe. @@ -20,5 +22,6 @@ Reaction/&SpendPowerProjectedWardReactTitle=Projekt Ward Reaction/&SpendPowerProjectedWardTitle=Projizierter Bezirk Subclass/&WizardAbjurationDescription=Die Schule der Abschwörung konzentriert sich auf Magie, die blockiert, verbannt oder schützt. Es ist ein stolzer und respektierter Beruf. Mitglieder dieser Schule, die Abschwörer genannt werden, werden gesucht, wenn unheilvolle Geister exorziert werden müssen, wenn wichtige Orte vor magischer Spionage geschützt werden müssen und wenn Portale zu anderen Existenzebenen geschlossen werden müssen. Subclass/&WizardAbjurationTitle=Abschwörung +Tag/&AbjurerSpellSpecialTagTitle=Unterklassenzauber Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=Du hast {0} von {1} Arkaner Schutz.\nWenn du Schaden erleidest, blockiert der Schutz eine Schadensmenge, die seiner Intensität entspricht, und seine Intensität verringert sich um 1. Nachdem du einen Bannzauber gewirkt hast, erhöht sich die Intensität des Schutzes um die Stufe des Zaubers, bis zu einem Maximum von dem Zweifachen deiner Zaubererstufe. Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=Du hast {0} von {1} Arkaner Schutz.\nWenn du Schaden nimmst, reduziert der Schutz den Schaden um seinen Wert und wird um die verhinderte Schadensmenge verringert. Wenn du einen Bannzauber der Stufe 1+ wirkst, erhält der Schutz eine Anzahl an Trefferpunkten zurück, die der doppelten Stufe des Zaubers entspricht. diff --git a/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardEvocation-de.txt b/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardEvocation-de.txt index f83102a540..20893c969c 100644 --- a/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardEvocation-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardEvocation-de.txt @@ -8,7 +8,10 @@ Feature/&FeatureWizardEvocationSculptSpellsDescription=Wenn Sie einen Beschwöru Feature/&FeatureWizardEvocationSculptSpellsTitle=Zauber formen Feature/&MagicAffinityWizardEvocationPotentCantripDescription=Deine Schadenszauber wirken sich sogar auf Kreaturen aus, die der Hauptwirkung entgehen. Wenn einer Kreatur ein Rettungswurf gegen deinen Zauber gelingt, erleidet sie die Hälfte des Schadens (falls vorhanden), erleidet aber keinen zusätzlichen Effekt durch den Zauber. Wenn du eine Kreatur mit einem Zauber triffst, der einen Angriffswurf erfordert, addierst du deinen Kompetenzbonus zu einem Schadenswurf dieses Zaubers. Feature/&MagicAffinityWizardEvocationPotentCantripTitle=Mächtiger Zauberspruch +Feature/&MagicAffinityWizardEvocationSavant2024Description=Wählen Sie zwei Zaubersprüche der Schule der Beschwörung und fügen Sie sie kostenlos Ihrem Zauberbuch hinzu. Außerdem können Sie, wenn Sie Zugriff auf eine neue Stufe von Zauberplätzen in dieser Klasse erhalten, einen Zauberspruch der Schule der Beschwörung kostenlos Ihrem Zauberbuch hinzufügen. +Feature/&MagicAffinityWizardEvocationSavant2024Title=Beschwörungsgelehrter Feature/&MagicAffinityWizardEvocationSavantDescription=Ab der Auswahl dieser Schule auf der 2. Stufe halbiert sich der Gold- und Zeitaufwand, den Sie zum Kopieren eines Beschwörungszaubers in Ihr Zauberbuch benötigen. Feature/&MagicAffinityWizardEvocationSavantTitle=Beschwörungsgelehrter Subclass/&WizardEvocationDescription=Sie konzentrieren Ihr Studium auf Magie, die mächtige Elementareffekte wie bittere Kälte, sengende Flammen, rollenden Donner, knisternde Blitze und brennende Säure erzeugt. Einige Beschwörer finden Verwendung im Militär und dienen als Artillerie, um feindliche Armeen aus der Ferne zu vernichten. Andere nutzen ihre spektakuläre Macht, um die Schwachen zu beschützen, während andere ihren eigenen Vorteil als Banditen, Abenteurer oder aufstrebende Tyrannen suchen. Subclass/&WizardEvocationTitle=Beschwörung +Tag/&EvokerSpellSpecialTagTitle=Unterklassenzauber diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 295a9bce1b..da1483fc37 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -293,8 +293,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=Stock Gorim's store with all ModUi/&StockHugoStoreWithAdditionalFoci=Stock Hugo's store with Arcane Staff, Druid Neck, Staff and Club set as foci items ModUi/&Subclasses=Subclasses ModUi/&Subraces=Subraces +ModUi/&SwapAbjurationSavant=Swap Abjurer Abjuration Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] ModUi/&SwapCraftedItemAndRecipeIcons=+ Swap recipe and crafted item icons in shop ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip features +ModUi/&SwapEvocationSavant=Swap Evoker Evocation Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] ModUi/&TableTopButton=Select Tabletop content ModUi/&TableTopHelp1=• Following sections re-group and duplicate 5e 2014 and 2024 settings scattered across the mod for your convenience ModUi/&TableTopHelp2=• Press the button to select only tabletop content under Character tab, and select all options below for a true TT experience diff --git a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardAbjuration-en.txt b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardAbjuration-en.txt index f6967e2a5a..15263b708b 100644 --- a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardAbjuration-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardAbjuration-en.txt @@ -1,4 +1,6 @@ Condition/&ConditionWizardAbjurationArcaneWardTitle=Arcane Ward +Feature/&MagicAffinityWizardAbjurationSavant2024Description=Choose two Wizard spells from the Abjuration school, and add them to your spellbook for free. In addition, whenever you gain access to a new level of spell slots in this class, you can add one Wizard spell from the Abjuration school to your spell book for free. +Feature/&MagicAffinityWizardAbjurationSavant2024Title=Abjuration Savant Feature/&MagicAffinityWizardAbjurationScriberDescription=Beginning when you select this school at 2nd level, the gold and time you must spend to copy an Evocation spell into your spellbook is halved. Feature/&MagicAffinityWizardAbjurationScriberTitle=Abjuration Savant Feature/&PowerWizardAbjurationArcaneWardBG3Description=The residual magic of your spells forms a ward around you that protects you from harm. Each time you cast an Abjuration spell, the intensity of the ward increases by the spell's Level, up to a maximum of 2x your Wizard level.\When you take damage, the ward blocks an amount of damage equal to its intensity, and its intensity decreases by 1.\nAfter each Long Rest, the ward's intensity resets, and becomes the same as your Wizard level. @@ -19,5 +21,6 @@ Reaction/&SpendPowerProjectedWardReactTitle=Project Ward Reaction/&SpendPowerProjectedWardTitle=Projected Ward Subclass/&WizardAbjurationDescription=The School of Abjuration emphasizes magic that blocks, banishes, or protects. It is a proud and respected vocation.Called abjurers, members of this school are sought when baleful spirits require exorcism, when important locations must be guarded against magical spying, and when portals to other planes of existence must be closed. Subclass/&WizardAbjurationTitle=Abjurer +Tag/&AbjurerSpellSpecialTagTitle=Subclass Spells Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=You have {0} of {1} Arcane Ward.\nWhen you take damage, the ward blocks an amount of damage equal to its intensity, and its intensity decreases by 1. After you cast an Abjuration spell the intensity of the ward increases by the spell's Level, up to a maximum of 2x your Wizard level. -Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=You have {0} of {1} Arcane Ward.\nWhenever you take damage, the ward reduces damage by its value and is decreased by damage amount prevented. Whenever you cast an abjuration spell of 1st+ level, the ward regains a number of hit points equal to twice the level of the spell. \ No newline at end of file +Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=You have {0} of {1} Arcane Ward.\nWhenever you take damage, the ward reduces damage by its value and is decreased by damage amount prevented. Whenever you cast an abjuration spell of 1st+ level, the ward regains a number of hit points equal to twice the level of the spell. diff --git a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardEvocation-en.txt b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardEvocation-en.txt index ad10a8d480..65dca53bc3 100644 --- a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardEvocation-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardEvocation-en.txt @@ -8,7 +8,10 @@ Feature/&FeatureWizardEvocationSculptSpellsDescription=Whenever you cast a damag Feature/&FeatureWizardEvocationSculptSpellsTitle=Sculpt Spells Feature/&MagicAffinityWizardEvocationPotentCantripDescription=Your damaging cantrips affect even creatures that avoid the brunt of the effect. When a creature succeeds on a saving throw against your cantrip, the creature takes half the cantrip damage (if any) but suffers no additional effect from the cantrip. If you hit a creature with a cantrip that requires an attack roll, you add your proficiency bonus to one damage roll of that cantrip. Feature/&MagicAffinityWizardEvocationPotentCantripTitle=Potent Cantrip +Feature/&MagicAffinityWizardEvocationSavant2024Description=Choose two Wizard spells from the Evocation school, and add them to your spellbook for free. In addition, whenever you gain access to a new level of spell slots in this class, you can add one Wizard spell from the Evocation school to your spell book for free. +Feature/&MagicAffinityWizardEvocationSavant2024Title=Evocation Savant Feature/&MagicAffinityWizardEvocationSavantDescription=Beginning when you select this school at 2nd level, the gold and time you must spend to copy an Evocation spell into your spellbook is halved. Feature/&MagicAffinityWizardEvocationSavantTitle=Evocation Savant Subclass/&WizardEvocationDescription=You focus your study on magic that creates powerful elemental effects such as bitter cold, searing flame, rolling thunder, crackling lightning, and burning acid. Some evokers find employment in military forces, serving as artillery to blast enemy armies from afar. Others use their spectacular power to protect the weak, while some seek their own gain as bandits, adventurers, or aspiring tyrants. Subclass/&WizardEvocationTitle=Evoker +Tag/&EvokerSpellSpecialTagTitle=Subclass Spells diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 0af1b6ab35..54838f065c 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -294,8 +294,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=Llena la tienda de Gorim con ModUi/&StockHugoStoreWithAdditionalFoci=Llena la tienda de Hugo con Bastón Arcano, Cuello de Druida, Bastón y Maza como elementos de foco ModUi/&Subclasses=Subclases ModUi/&Subraces=Subrazas +ModUi/&SwapAbjurationSavant=Intercambia Abjurador Sabio de la abjuración con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de espacio] ModUi/&SwapCraftedItemAndRecipeIcons=+ Intercambia íconos de recetas y objetos elaborados en la tienda ModUi/&SwapEvocationPotentCantripAndSculptSpell=Intercambia las características de Evocador, Hechizos de escultura y Truco potente +ModUi/&SwapEvocationSavant=Intercambia Evocador Sabio de la evocación con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de ranura] ModUi/&TableTopButton=Seleccionar contenido de Tabletop ModUi/&TableTopHelp1=• Las siguientes secciones reagrupan y duplican las configuraciones de 5e 2014 y 2024 esparcidas por el mod para tu conveniencia. ModUi/&TableTopHelp2=• Presiona el botón para seleccionar solo contenido de mesa en la pestaña Personaje y selecciona todas las opciones a continuación para una verdadera experiencia TT diff --git a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardAbjuration-es.txt b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardAbjuration-es.txt index e4ad8ed120..2631354fd1 100644 --- a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardAbjuration-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardAbjuration-es.txt @@ -1,5 +1,7 @@ Condition/&ConditionWizardAbjurationArcaneWardDescription=Tu Guardián Arcano está activo Condition/&ConditionWizardAbjurationArcaneWardTitle=Guardián arcano +Feature/&MagicAffinityWizardAbjurationSavant2024Description=Elige dos hechizos de mago de la escuela Abjuración y añádelos a tu libro de hechizos de forma gratuita. Además, siempre que obtengas acceso a un nuevo nivel de espacios para hechizos en esta clase, podrás añadir un hechizo de mago de la escuela Abjuración a tu libro de hechizos de forma gratuita. +Feature/&MagicAffinityWizardAbjurationSavant2024Title=Sabio de la evocación Feature/&MagicAffinityWizardAbjurationScriberDescription=A partir del momento en que seleccionas esta escuela en el nivel 2, el oro y el tiempo que debes gastar para copiar un hechizo de Evocación en tu libro de hechizos se reducen a la mitad. Feature/&MagicAffinityWizardAbjurationScriberTitle=Erudito de la abjuración Feature/&PowerWizardAbjurationArcaneWardBG3Description=La magia residual de tus hechizos forma una barrera a tu alrededor que te protege de todo daño. Cada vez que lanzas un hechizo de Abjuración, la intensidad de la barrera aumenta según el nivel del hechizo, hasta un máximo de 2 veces tu nivel de mago. Cuando recibes daño, la barrera bloquea una cantidad de daño igual a su intensidad y su intensidad disminuye en 1.\nDespués de cada Descanso prolongado, la intensidad de la barrera se reinicia y se vuelve igual a tu nivel de mago. @@ -20,5 +22,6 @@ Reaction/&SpendPowerProjectedWardReactTitle=Proyecto Ward Reaction/&SpendPowerProjectedWardTitle=Distrito proyectado Subclass/&WizardAbjurationDescription=La Escuela de Abjuración pone énfasis en la magia que bloquea, destierra o protege. Es una vocación orgullosa y respetada. Los miembros de esta escuela, llamados abjuradores, son buscados cuando se requiere exorcizar espíritus malignos, cuando se deben proteger lugares importantes contra el espionaje mágico y cuando se deben cerrar portales a otros planos de existencia. Subclass/&WizardAbjurationTitle=Abjuración +Tag/&AbjurerSpellSpecialTagTitle=Hechizos de subclase Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=Tienes {0} de {1} Protección Arcana.\nCuando recibes daño, la protección bloquea una cantidad de daño igual a su intensidad, y su intensidad disminuye en 1. Después de lanzar un hechizo de Abjuración, la intensidad de la protección aumenta según el Nivel del hechizo, hasta un máximo de 2x tu nivel de Mago. Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=Tienes {0} de {1} de Resguardo Arcano.\nSiempre que recibas daño, el resguardo reduce el daño en su valor y se reduce en la cantidad de daño prevenido. Siempre que lances un conjuro de abjuración de nivel 1+, el resguardo recupera una cantidad de puntos de golpe igual al doble del nivel del conjuro. diff --git a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardEvocation-es.txt b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardEvocation-es.txt index 3a430250c3..384756fd0f 100644 --- a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardEvocation-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardEvocation-es.txt @@ -8,7 +8,10 @@ Feature/&FeatureWizardEvocationSculptSpellsDescription=Siempre que lances un hec Feature/&FeatureWizardEvocationSculptSpellsTitle=Hechizos de escultura Feature/&MagicAffinityWizardEvocationPotentCantripDescription=Tus trucos dañinos afectan incluso a las criaturas que evitan el impacto del efecto. Cuando una criatura tiene éxito en una tirada de salvación contra tu truco, la criatura sufre la mitad del daño del truco (si lo hay) pero no sufre ningún efecto adicional del truco. Si golpeas a una criatura con un truco que requiere una tirada de ataque, sumas tu bonificación por competencia a una tirada de daño de ese truco. Feature/&MagicAffinityWizardEvocationPotentCantripTitle=Truco potente +Feature/&MagicAffinityWizardEvocationSavant2024Description=Elige dos hechizos de mago de la escuela de evocación y añádelos a tu libro de hechizos de forma gratuita. Además, siempre que obtengas acceso a un nuevo nivel de espacios para hechizos en esta clase, podrás añadir un hechizo de mago de la escuela de evocación a tu libro de hechizos de forma gratuita. +Feature/&MagicAffinityWizardEvocationSavant2024Title=Sabio de la evocación Feature/&MagicAffinityWizardEvocationSavantDescription=A partir del momento en que seleccionas esta escuela en el nivel 2, el oro y el tiempo que debes gastar para copiar un hechizo de Evocación en tu libro de hechizos se reducen a la mitad. Feature/&MagicAffinityWizardEvocationSavantTitle=Sabio de la evocación Subclass/&WizardEvocationDescription=Centras tu estudio en la magia que crea poderosos efectos elementales como el frío intenso, las llamas abrasadoras, los truenos, los relámpagos crepitantes y el ácido ardiente. Algunos evocadores encuentran empleo en las fuerzas militares, sirviendo como artillería para destruir a los ejércitos enemigos desde lejos. Otros usan su espectacular poder para proteger a los débiles, mientras que otros buscan su propio beneficio como bandidos, aventureros o aspirantes a tiranos. Subclass/&WizardEvocationTitle=Evocación +Tag/&EvokerSpellSpecialTagTitle=Hechizos de subclase diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index a19d1b3675..9930b9033c 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -293,8 +293,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=Remplissez le magasin de Gori ModUi/&StockHugoStoreWithAdditionalFoci=Remplissez la boutique Hugo avec le bâton arcanique, le cou de druide, le bâton et le club définis comme objets prioritaires ModUi/&Subclasses=Sous-classes ModUi/&Subraces=Sous-races +ModUi/&SwapAbjurationSavant=Échangez Abjurer Abjuration Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] ModUi/&SwapCraftedItemAndRecipeIcons=+ Échangez les icônes de recettes et d'objets fabriqués dans la boutique ModUi/&SwapEvocationPotentCantripAndSculptSpell=Échangez les fonctionnalités Évocateur Sculpture des sorts et Puissant tour de passe-passe +ModUi/&SwapEvocationSavant=Échangez Evoker Evocation Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] ModUi/&TableTopButton=Sélectionnez le contenu de la table ModUi/&TableTopHelp1=• Les sections suivantes regroupent et dupliquent les paramètres 5e 2014 et 2024 dispersés dans le mod pour votre commodité ModUi/&TableTopHelp2=• Appuyez sur le bouton pour sélectionner uniquement le contenu de table sous l'onglet Personnage et sélectionnez toutes les options ci-dessous pour une véritable expérience TT diff --git a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardAbjuration-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardAbjuration-fr.txt index 44292c5c0b..945a49ea2e 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardAbjuration-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardAbjuration-fr.txt @@ -1,5 +1,7 @@ Condition/&ConditionWizardAbjurationArcaneWardDescription=Votre garde arcanique est active Condition/&ConditionWizardAbjurationArcaneWardTitle=Protection arcanique +Feature/&MagicAffinityWizardAbjurationSavant2024Description=Choisissez deux sorts de sorcier de l'école d'Abjuration et ajoutez-les gratuitement à votre livre de sorts. De plus, chaque fois que vous aurez accès à un nouveau niveau d'emplacements de sorts dans cette classe, vous pourrez ajouter gratuitement un sort de sorcier de l'école d'Abjuration à votre livre de sorts. +Feature/&MagicAffinityWizardAbjurationSavant2024Title=Évocation Savant Feature/&MagicAffinityWizardAbjurationScriberDescription=À partir du moment où vous sélectionnez cette école au niveau 2, l'or et le temps que vous devez dépenser pour copier un sort d'évocation dans votre grimoire sont réduits de moitié. Feature/&MagicAffinityWizardAbjurationScriberTitle=Abjuration Savant Feature/&PowerWizardAbjurationArcaneWardBG3Description=La magie résiduelle de vos sorts forme une protection autour de vous qui vous protège des dégâts. Chaque fois que vous lancez un sort d'Abjuration, l'intensité de la protection augmente du niveau du sort, jusqu'à un maximum de 2x votre niveau de sorcier. Lorsque vous subissez des dégâts, la protection bloque une quantité de dégâts égale à son intensité, et son intensité diminue de 1.\nAprès chaque repos long, l'intensité de la protection se réinitialise et devient égale à votre niveau de sorcier. @@ -20,5 +22,6 @@ Reaction/&SpendPowerProjectedWardReactTitle=Projet Ward Reaction/&SpendPowerProjectedWardTitle=Quartier projeté Subclass/&WizardAbjurationDescription=L'École d'Abjuration met l'accent sur la magie qui bloque, bannit ou protège. C'est une vocation fière et respectée. Appelés abjurateurs, les membres de cette école sont sollicités lorsque des esprits maléfiques nécessitent un exorcisme, lorsque des lieux importants doivent être protégés contre l'espionnage magique et lorsque des portails vers d'autres plans d'existence doivent être fermés. Subclass/&WizardAbjurationTitle=Abjuration +Tag/&AbjurerSpellSpecialTagTitle=Sorts de sous-classe Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=Vous avez {0} de {1} Protection arcanique.\nLorsque vous subissez des dégâts, la protection bloque une quantité de dégâts égale à son intensité, et son intensité diminue de 1. Après avoir lancé un sort d'Abjuration, l'intensité de la protection augmente du niveau du sort, jusqu'à un maximum de 2 fois votre niveau de sorcier. Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=Vous avez {0} de {1} Protection arcanique.\nChaque fois que vous subissez des dégâts, la protection réduit les dégâts de sa valeur et est diminuée du montant des dégâts évités. Chaque fois que vous lancez un sort d'abjuration de niveau 1+, la protection récupère un nombre de points de vie égal à deux fois le niveau du sort. diff --git a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardEvocation-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardEvocation-fr.txt index 5c9f4ee848..49faca8525 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardEvocation-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardEvocation-fr.txt @@ -8,7 +8,10 @@ Feature/&FeatureWizardEvocationSculptSpellsDescription=À chaque fois que vous l Feature/&FeatureWizardEvocationSculptSpellsTitle=Sorts de sculpture Feature/&MagicAffinityWizardEvocationPotentCantripDescription=Vos sorts mineurs infligeant des dégâts affectent même les créatures qui évitent l'effet le plus fort. Lorsqu'une créature réussit un jet de sauvegarde contre votre sort mineur, elle subit la moitié des dégâts du sort mineur (le cas échéant) mais ne subit aucun effet supplémentaire du sort mineur. Si vous touchez une créature avec un sort mineur qui nécessite un jet d'attaque, vous ajoutez votre bonus de maîtrise à un jet de dégâts de ce sort mineur. Feature/&MagicAffinityWizardEvocationPotentCantripTitle=Cantrip puissant +Feature/&MagicAffinityWizardEvocationSavant2024Description=Choisissez deux sorts de sorcier de l'école d'évocation et ajoutez-les gratuitement à votre livre de sorts. De plus, chaque fois que vous aurez accès à un nouveau niveau d'emplacements de sorts dans cette classe, vous pourrez ajouter gratuitement un sort de sorcier de l'école d'évocation à votre livre de sorts. +Feature/&MagicAffinityWizardEvocationSavant2024Title=Évocation Savant Feature/&MagicAffinityWizardEvocationSavantDescription=À partir du moment où vous sélectionnez cette école au niveau 2, l'or et le temps que vous devez dépenser pour copier un sort d'Évocation dans votre grimoire sont réduits de moitié. Feature/&MagicAffinityWizardEvocationSavantTitle=Évocation Savant Subclass/&WizardEvocationDescription=Vous concentrez vos études sur la magie qui crée de puissants effets élémentaires tels que le froid glacial, les flammes brûlantes, le tonnerre roulant, les éclairs crépitants et l'acide brûlant. Certains évocateurs trouvent un emploi dans les forces militaires, servant d'artillerie pour détruire les armées ennemies à distance. D'autres utilisent leur pouvoir spectaculaire pour protéger les faibles, tandis que d'autres recherchent leur propre profit en tant que bandits, aventuriers ou tyrans en herbe. Subclass/&WizardEvocationTitle=Évocation +Tag/&EvokerSpellSpecialTagTitle=Sorts de sous-classe diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index eca7e2fbb7..a558d8968a 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -293,8 +293,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=Riempi il negozio di Gorim co ModUi/&StockHugoStoreWithAdditionalFoci=Fai scorta nel negozio di Hugo con Bastone Arcano, Collo del Druido, Bastone e Mazza impostati come oggetti principali ModUi/&Subclasses=Sottoclassi ModUi/&Subraces=Sottorazze +ModUi/&SwapAbjurationSavant=Sostituisci Abjurer Abjuration Savant con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] ModUi/&SwapCraftedItemAndRecipeIcons=+ Scambia le icone delle ricette e degli oggetti realizzati nel negozio ModUi/&SwapEvocationPotentCantripAndSculptSpell=Scambia le funzionalità Sculpt Spells e Potent Cantrip di Evoker +ModUi/&SwapEvocationSavant=Sostituisci Evocatore Sapiente dell'evocazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] ModUi/&TableTopButton=Seleziona contenuto Tabletop ModUi/&TableTopHelp1=• Le sezioni seguenti raggruppano e duplicano le impostazioni 5e 2014 e 2024 sparse nella mod per la tua comodità ModUi/&TableTopHelp2=• Premi il pulsante per selezionare solo il contenuto del tavolo nella scheda Personaggio e seleziona tutte le opzioni sottostanti per una vera esperienza TT diff --git a/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardAbjuration-it.txt b/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardAbjuration-it.txt index 40dcc14b13..afbe4836bd 100644 --- a/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardAbjuration-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardAbjuration-it.txt @@ -1,5 +1,7 @@ Condition/&ConditionWizardAbjurationArcaneWardDescription=Il tuo Arcane Ward è attivo Condition/&ConditionWizardAbjurationArcaneWardTitle=Protezione Arcana +Feature/&MagicAffinityWizardAbjurationSavant2024Description=Scegli due incantesimi da Mago della scuola di Abjuration e aggiungili al tuo libro degli incantesimi gratuitamente. Inoltre, ogni volta che ottieni l'accesso a un nuovo livello di slot incantesimo in questa classe, puoi aggiungere un incantesimo da Mago della scuola di Abjuration al tuo libro degli incantesimi gratuitamente. +Feature/&MagicAffinityWizardAbjurationSavant2024Title=Evocazione Savant Feature/&MagicAffinityWizardAbjurationScriberDescription=A partire dal momento in cui selezioni questa scuola al 2° livello, l'oro e il tempo che devi impiegare per copiare un incantesimo di Evocazione nel tuo libro degli incantesimi vengono dimezzati. Feature/&MagicAffinityWizardAbjurationScriberTitle=Studioso dell'Abiurazione Feature/&PowerWizardAbjurationArcaneWardBG3Description=La magia residua dei tuoi incantesimi forma una protezione attorno a te che ti protegge dai danni. Ogni volta che lanci un incantesimo di Abjuration, l'intensità della protezione aumenta in base al Livello dell'incantesimo, fino a un massimo di 2 volte il tuo livello da Mago.\Quando subisci danni, la protezione blocca una quantità di danni pari alla sua intensità, e la sua intensità diminuisce di 1.\nDopo ogni Riposo Lungo, l'intensità della protezione si ripristina e diventa uguale al tuo livello da Mago. @@ -20,5 +22,6 @@ Reaction/&SpendPowerProjectedWardReactTitle=Progetto Ward Reaction/&SpendPowerProjectedWardTitle=Reparto progettato Subclass/&WizardAbjurationDescription=La School of Abjuration enfatizza la magia che blocca, bandisce o protegge. È una vocazione orgogliosa e rispettata. Chiamati abiuratori, i membri di questa scuola sono ricercati quando spiriti maligni richiedono un esorcismo, quando luoghi importanti devono essere protetti da spionaggio magico e quando i portali verso altri piani di esistenza devono essere chiusi. Subclass/&WizardAbjurationTitle=Abiura +Tag/&AbjurerSpellSpecialTagTitle=Incantesimi di sottoclasse Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=Hai {0} di {1} di Protezione Arcana.\nQuando subisci danni, la protezione blocca una quantità di danni pari alla sua intensità, e la sua intensità diminuisce di 1. Dopo aver lanciato un incantesimo di Abjurazione, l'intensità della protezione aumenta in base al Livello dell'incantesimo, fino a un massimo di 2 volte il tuo livello da Mago. Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=Hai {0} di {1} Arcane Ward.\nOgni volta che subisci danni, la protezione riduce i danni del suo valore e diminuisce della quantità di danni prevenuti. Ogni volta che lanci un incantesimo di abjurazione di 1° livello+, la protezione recupera un numero di punti ferita pari al doppio del livello dell'incantesimo. diff --git a/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardEvocation-it.txt b/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardEvocation-it.txt index 5ebd73fe8e..ee6b4cc6fe 100644 --- a/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardEvocation-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardEvocation-it.txt @@ -8,7 +8,10 @@ Feature/&FeatureWizardEvocationSculptSpellsDescription=Ogni volta che lanci un i Feature/&FeatureWizardEvocationSculptSpellsTitle=Incantesimi di scultura Feature/&MagicAffinityWizardEvocationPotentCantripDescription=I tuoi trucchetti dannosi hanno effetto anche sulle creature che evitano il peso dell'effetto. Quando una creatura supera un tiro salvezza contro il tuo trucchetto, la creatura subisce metà dei danni da trucchetto (se presenti) ma non subisce alcun effetto aggiuntivo dal trucchetto. Se colpisci una creatura con un trucchetto che richiede un tiro di attacco, aggiungi il tuo bonus di competenza a un tiro di danno di quel trucchetto. Feature/&MagicAffinityWizardEvocationPotentCantripTitle=Potente trucchetto +Feature/&MagicAffinityWizardEvocationSavant2024Description=Scegli due incantesimi da Mago della scuola Evocazione e aggiungili al tuo libro degli incantesimi gratuitamente. Inoltre, ogni volta che ottieni l'accesso a un nuovo livello di slot incantesimo in questa classe, puoi aggiungere un incantesimo da Mago della scuola Evocazione al tuo libro degli incantesimi gratuitamente. +Feature/&MagicAffinityWizardEvocationSavant2024Title=Evocazione Savant Feature/&MagicAffinityWizardEvocationSavantDescription=A partire dal momento in cui selezioni questa scuola al 2° livello, l'oro e il tempo che devi impiegare per copiare un incantesimo di Evocazione nel tuo libro degli incantesimi vengono dimezzati. Feature/&MagicAffinityWizardEvocationSavantTitle=Evocazione Savant Subclass/&WizardEvocationDescription=Concentri il tuo studio sulla magia che crea potenti effetti elementali come il freddo pungente, la fiamma bruciante, il tuono rimbombante, il fulmine scoppiettante e l'acido bruciante. Alcuni evocatori trovano impiego nelle forze militari, servendo come artiglieria per far saltare in aria gli eserciti nemici da lontano. Altri usano il loro potere spettacolare per proteggere i deboli, mentre altri cercano il proprio tornaconto come banditi, avventurieri o aspiranti tiranni. Subclass/&WizardEvocationTitle=Evocazione +Tag/&EvokerSpellSpecialTagTitle=Incantesimi di sottoclasse diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index fabb9b270e..f339d1f2c6 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -293,8 +293,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=ゴリムの店に魔法以 ModUi/&StockHugoStoreWithAdditionalFoci=ヒューゴの店に、アーケイン スタッフ、ドルイド ネック、スタッフ、クラブをフォーカス アイテムとして設定して在庫します。 ModUi/&Subclasses=サブクラス ModUi/&Subraces=亜種族 +ModUi/&SwapAbjurationSavant=Abjurer Abjuration Savant を 5e 2024 バージョンの [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびに 1 つずつ追加で習得する] と入れ替えます ModUi/&SwapCraftedItemAndRecipeIcons=+ ショップでレシピとクラフトアイテムのアイコンを交換 ModUi/&SwapEvocationPotentCantripAndSculptSpell=エヴォーカーのスカルプトスペルポテンシャルキャントリップの機能を入れ替えます +ModUi/&SwapEvocationSavant=Evoker Evocation Savant を 5e 2024 バージョンの [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびにさらに 1 つ習得する] と入れ替えます ModUi/&TableTopButton=テーブルトップコンテンツを選択 ModUi/&TableTopHelp1=• 以下のセクションでは、利便性のために、mod 全体に散らばっている 5e 2014 および 2024 設定を再グループ化して複製します。 ModUi/&TableTopHelp2=• ボタンを押してキャラクタータブのテーブルトップコンテンツのみを選択し、以下のすべてのオプションを選択して真のTT体験を味わってください。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardAbjuration-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardAbjuration-ja.txt index c122d544fc..8650ad2396 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardAbjuration-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardAbjuration-ja.txt @@ -1,5 +1,7 @@ Condition/&ConditionWizardAbjurationArcaneWardDescription=あなたのアーケイン・ワードはアクティブです Condition/&ConditionWizardAbjurationArcaneWardTitle=アーケイン・ワード +Feature/&MagicAffinityWizardAbjurationSavant2024Description=アブジュレーション スクールからウィザード呪文を 2 つ選択し、無料で呪文書に追加します。さらに、このクラスで新しいレベルの呪文スロットにアクセスできるたびに、アブジュレーション スクールからウィザード呪文を 1 つ無料で呪文書に追加できます。 +Feature/&MagicAffinityWizardAbjurationSavant2024Title=召喚の達人 Feature/&MagicAffinityWizardAbjurationScriberDescription=2 レベルでこの学校を選択すると、召喚呪文を呪文書にコピーするのに費やす金と時間が半分になります。 Feature/&MagicAffinityWizardAbjurationScriberTitle=アブジャレーション学者 Feature/&PowerWizardAbjurationArcaneWardBG3Description=あなたの呪文の残留魔力は、あなたを危害から守る結界をあなたの周りに形成します。アブジュレーション呪文を唱えるたびに、結界の強さは呪文のレベルに応じて増加し、最大でウィザード レベルの 2 倍になります。\ダメージを受けると、結界はその強さに等しいダメージをブロックし、その強さは 1 ずつ減少します。\n大休憩のたびに、結界の強さはリセットされ、ウィザード レベルと同じになります。 @@ -20,5 +22,6 @@ Reaction/&SpendPowerProjectedWardReactTitle=プロジェクト・ワード Reaction/&SpendPowerProjectedWardTitle=予定病棟 Subclass/&WizardAbjurationDescription=免罪術学派は、妨害、追放、保護の魔法を重視します。これは誇り高く尊敬される職業です。免罪術師と呼ばれるこの学派のメンバーは、邪悪な霊を祓う必要があるとき、重要な場所を魔法によるスパイから守らなければならないとき、他の存在の次元へのポータルを閉じなければならないときに求められます。 Subclass/&WizardAbjurationTitle=アブレーション +Tag/&AbjurerSpellSpecialTagTitle=サブクラス呪文 Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=あなたは {1} のアーケイン ワードを {0} 持っています。\nダメージを受けると、ワードはその強度に等しいダメージをブロックし、その強度は 1 減少します。アブジュレーション呪文を唱えた後、ワードの強度は呪文のレベルに応じて増加し、最大でウィザード レベルの 2 倍になります。 Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=あなたは{1}のアーケイン ウォードを{0}持っています。\nダメージを受けるたびに、ウォードはその値だけダメージを軽減し、防いだダメージ量だけ減少します。あなたがレベル1以上の防御呪文を唱えるたびに、ウォードは呪文のレベルの2倍に等しいヒット ポイントを回復します。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardEvocation-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardEvocation-ja.txt index 4135bd5127..c4a5fc548d 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardEvocation-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardEvocation-ja.txt @@ -8,7 +8,10 @@ Feature/&FeatureWizardEvocationSculptSpellsDescription=他のクリーチャー Feature/&FeatureWizardEvocationSculptSpellsTitle=呪文を彫刻する Feature/&MagicAffinityWizardEvocationPotentCantripDescription=ダメージを与えるキャントリップは、その効果の矢面に立たないクリーチャーにも影響を及ぼします。クリーチャーがキャントリップに対するセーヴィング スローに成功すると、そのクリーチャーはキャントリップ ダメージの半分 (ある場合) を受けますが、キャントリップによる追加効果は受けません。攻撃ロールを必要とするキャントリップでクリーチャーにヒットした場合、そのキャントリップの 1 つのダメージ ロールに熟練ボーナスを加えます。 Feature/&MagicAffinityWizardEvocationPotentCantripTitle=強力な呪文 +Feature/&MagicAffinityWizardEvocationSavant2024Description=召喚術学校からウィザード呪文を 2 つ選択し、無料で呪文書に追加します。さらに、このクラスで新しいレベルの呪文スロットにアクセスできるたびに、召喚術学校からウィザード呪文を 1 つ無料で呪文書に追加できます。 +Feature/&MagicAffinityWizardEvocationSavant2024Title=召喚の達人 Feature/&MagicAffinityWizardEvocationSavantDescription=2 レベルでこの学校を選択すると、召喚呪文を呪文書にコピーするのに費やす金と時間が半分になります。 Feature/&MagicAffinityWizardEvocationSavantTitle=召喚の達人 Subclass/&WizardEvocationDescription=あなたは、厳しい寒さ、焼けつく炎、轟く雷鳴、パチパチと音を立てる稲妻、燃える酸など、強力な元素効果を生み出す魔法の研究に焦点を合わせます。一部のエヴォーカーは軍隊に雇用され、遠くから敵軍を撃破する砲兵として働きます。他のエヴォーカーは、その驚異的な力を使って弱者を守り、盗賊、冒険家、または野心的な暴君として自分の利益を求める者もいます。 Subclass/&WizardEvocationTitle=喚起 +Tag/&EvokerSpellSpecialTagTitle=サブクラス呪文 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 278aba507a..444e4f8424 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -293,8 +293,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=고림의 상점에 마법이 ModUi/&StockHugoStoreWithAdditionalFoci=비전 지팡이, 드루이드 목, 지팡이 및 클럽 세트를 초점 아이템으로 휴고의 상점에 비축하세요. ModUi/&Subclasses=서브클래스 ModUi/&Subraces=아종 +ModUi/&SwapAbjurationSavant=Abjurer Abjuration Savant를 5e 2024 버전과 교환하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] ModUi/&SwapCraftedItemAndRecipeIcons=+ 상점에서 레시피와 제작 아이템 아이콘 교환 ModUi/&SwapEvocationPotentCantripAndSculptSpell=소환사 조각 주문강력한 주문 기능을 교체하세요 +ModUi/&SwapEvocationSavant=Evoker Evocation Savant를 5e 2024 버전으로 교체하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개씩 더 배우기] ModUi/&TableTopButton=테이블탑 콘텐츠 선택 ModUi/&TableTopHelp1=• 다음 섹션은 편의를 위해 모드 전체에 분산된 5e 2014 및 2024 설정을 다시 그룹화하고 복제합니다. ModUi/&TableTopHelp2=• 캐릭터 탭에서 테이블탑 콘텐츠만 선택하려면 버튼을 누르고, 진정한 TT 경험을 위해 아래의 모든 옵션을 선택하세요. diff --git a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardAbjuration-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardAbjuration-ko.txt index 7235ec4e5d..1b7315c510 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardAbjuration-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardAbjuration-ko.txt @@ -1,5 +1,7 @@ Condition/&ConditionWizardAbjurationArcaneWardDescription=비전의 보호막이 활성화되었습니다. Condition/&ConditionWizardAbjurationArcaneWardTitle=비전의 보호막 +Feature/&MagicAffinityWizardAbjurationSavant2024Description=Abjuration 학교에서 마법사 주문 두 개를 선택하여 주문서에 무료로 추가하세요. 또한, 이 클래스에서 새로운 레벨의 주문 슬롯에 접근할 때마다 Abjuration 학교에서 마법사 주문 하나를 주문서에 무료로 추가할 수 있습니다. +Feature/&MagicAffinityWizardAbjurationSavant2024Title=에보케이션 사반트 Feature/&MagicAffinityWizardAbjurationScriberDescription=2레벨에서 이 학교를 선택하면 주문서에 유발 주문을 복사하는 데 필요한 골드와 시간이 절반으로 줄어듭니다. Feature/&MagicAffinityWizardAbjurationScriberTitle=포기 학자 Feature/&PowerWizardAbjurationArcaneWardBG3Description=주문의 잔여 마법은 주변에 보호막을 형성하여 해를 입지 않도록 보호합니다. Abjuration 주문을 시전할 때마다 보호막의 강도는 주문 레벨만큼 증가하며, 최대 위저드 레벨의 2배까지 증가합니다.\피해를 입으면 보호막은 강도와 같은 양의 피해를 차단하고 강도는 1만큼 감소합니다.\n긴 휴식을 취할 때마다 보호막의 강도가 재설정되어 위저드 레벨과 같아집니다. @@ -20,5 +22,6 @@ Reaction/&SpendPowerProjectedWardReactTitle=프로젝트 워드 Reaction/&SpendPowerProjectedWardTitle=예상 병동 Subclass/&WizardAbjurationDescription=Abjuration School은 차단, 추방 또는 보호하는 마법을 강조합니다. 자랑스럽고 존경받는 직업입니다. Abjurers라고 불리는 이 학교의 구성원은 사악한 영혼이 엑소시즘을 필요로 할 때, 중요한 장소를 마법적 감시로부터 보호해야 할 때, 다른 존재 평면으로 가는 포털을 닫아야 할 때 찾습니다. Subclass/&WizardAbjurationTitle=포기 +Tag/&AbjurerSpellSpecialTagTitle=하위 클래스 주문 Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=당신은 {0}의 {1}개의 비전 보호막을 가지고 있습니다.\n당신이 피해를 입으면, 보호막은 그 강도와 같은 양의 피해를 차단하고, 그 강도는 1만큼 감소합니다. 당신이 회피 주문을 시전한 후에는 보호막의 강도가 주문 레벨에 따라 증가하며, 최대 마법사 레벨의 2배까지 증가합니다. Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=당신은 {1}개의 Arcane Ward 중 {0}개를 가지고 있습니다.\n당신이 피해를 입을 때마다, Ward는 피해량을 그 값만큼 감소시키고, 방지한 피해량만큼 감소시킵니다. 당신이 1+레벨의 금지 주문을 시전할 때마다, Ward는 주문 레벨의 두 배에 해당하는 수의 생명력을 회복합니다. diff --git a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardEvocation-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardEvocation-ko.txt index b4f42cc6d5..348830c552 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardEvocation-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardEvocation-ko.txt @@ -8,7 +8,10 @@ Feature/&FeatureWizardEvocationSculptSpellsDescription=다른 생물에게 영 Feature/&FeatureWizardEvocationSculptSpellsTitle=조각 주문 Feature/&MagicAffinityWizardEvocationPotentCantripDescription=당신의 피해를 주는 칸트립은 그 효과의 대부분을 피하는 생명체에게도 영향을 미칩니다. 생명체가 당신의 칸트립에 대한 세이빙 스로우에 성공하면, 그 생명체는 칸트립 피해의 절반(있는 경우)을 받지만 칸트립의 추가 효과는 받지 않습니다. 공격 굴림이 필요한 칸트립으로 생명체를 맞히면, 그 칸트립의 피해 굴림 하나에 숙련도 보너스를 더합니다. Feature/&MagicAffinityWizardEvocationPotentCantripTitle=강력한 주문 +Feature/&MagicAffinityWizardEvocationSavant2024Description=Evocation 학교에서 마법사 주문 두 개를 선택하여 주문서에 무료로 추가하세요. 또한, 이 클래스에서 새로운 레벨의 주문 슬롯에 접근할 때마다 Evocation 학교에서 마법사 주문 하나를 주문서에 무료로 추가할 수 있습니다. +Feature/&MagicAffinityWizardEvocationSavant2024Title=에보케이션 사반트 Feature/&MagicAffinityWizardEvocationSavantDescription=2레벨에서 이 학교를 선택하면 주문서에 유발 주문을 복사하는 데 필요한 골드와 시간이 절반으로 줄어듭니다. Feature/&MagicAffinityWizardEvocationSavantTitle=에보케이션 사반트 Subclass/&WizardEvocationDescription=당신은 혹한, 뜨거운 불길, 굴러가는 천둥, 딱딱거리는 번개, 불타는 산과 같은 강력한 원소 효과를 만들어내는 마법에 집중합니다. 일부 소환사는 군대에서 일자리를 찾아 멀리서 적군을 폭격하는 포병으로 일합니다. 다른 사람들은 약자를 보호하기 위해 화려한 힘을 사용하는 반면, 일부는 산적, 모험가 또는 야심 찬 폭군으로서 자신의 이익을 추구합니다. Subclass/&WizardEvocationTitle=유발 +Tag/&EvokerSpellSpecialTagTitle=하위 클래스 주문 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 1e8c59e6c1..d959090b01 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -293,8 +293,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=Estoque a loja de Gorim com t ModUi/&StockHugoStoreWithAdditionalFoci=Estoque a loja de Hugo com Cajado Arcano, Pescoço de Druida, Cajado e Clube definidos como itens focais ModUi/&Subclasses=Subclasses ModUi/&Subraces=Sub-raças +ModUi/&SwapAbjurationSavant=Troque Abjurador Sábio da Abjuração pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] ModUi/&SwapCraftedItemAndRecipeIcons=+ Troque ícones de receitas e itens criados na loja ModUi/&SwapEvocationPotentCantripAndSculptSpell=Troque os recursos Evocador Magias de Escultura e Truque Potente +ModUi/&SwapEvocationSavant=Troque Evocador Sábio da Evocação pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] ModUi/&TableTopButton=Selecionar conteúdo de mesa ModUi/&TableTopHelp1=• As seções a seguir reagrupam e duplicam as configurações 5e 2014 e 2024 espalhadas pelo mod para sua conveniência ModUi/&TableTopHelp2=• Pressione o botão para selecionar apenas o conteúdo da mesa na aba Personagem e selecione todas as opções abaixo para uma verdadeira experiência TT diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardAbjuration-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardAbjuration-pt-BR.txt index 22166e1388..aa76a093c4 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardAbjuration-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardAbjuration-pt-BR.txt @@ -1,5 +1,7 @@ Condition/&ConditionWizardAbjurationArcaneWardDescription=Sua Arcane Ward está ativa Condition/&ConditionWizardAbjurationArcaneWardTitle=Proteção Arcana +Feature/&MagicAffinityWizardAbjurationSavant2024Description=Escolha duas magias de Mago da escola de Abjuração e adicione-as ao seu grimório de graça. Além disso, sempre que você ganhar acesso a um novo nível de espaços de magia nesta classe, você pode adicionar uma magia de Mago da escola de Abjuração ao seu grimório de graça. +Feature/&MagicAffinityWizardAbjurationSavant2024Title=Evocação Savant Feature/&MagicAffinityWizardAbjurationScriberDescription=A partir do momento em que você seleciona esta escola no 2º nível, o ouro e o tempo que você deve gastar para copiar uma magia de Evocação para seu grimório são reduzidos pela metade. Feature/&MagicAffinityWizardAbjurationScriberTitle=Estudioso de Abjuração Feature/&PowerWizardAbjurationArcaneWardBG3Description=A magia residual de suas magias forma uma proteção ao seu redor que o protege de danos. Cada vez que você conjura uma magia de Abjuração, a intensidade da proteção aumenta pelo Nível da magia, até um máximo de 2x seu nível de Mago.\Quando você recebe dano, a proteção bloqueia uma quantidade de dano igual à sua intensidade, e sua intensidade diminui em 1.\nApós cada Descanso Longo, a intensidade da proteção é reiniciada e se torna a mesma que seu nível de Mago. @@ -20,5 +22,6 @@ Reaction/&SpendPowerProjectedWardReactTitle=Projeto Ala Reaction/&SpendPowerProjectedWardTitle=Ala projetada Subclass/&WizardAbjurationDescription=A Escola de Abjuração enfatiza a magia que bloqueia, bane ou protege. É uma vocação orgulhosa e respeitada. Chamados de abjuradores, os membros desta escola são procurados quando espíritos malignos exigem exorcismo, quando locais importantes devem ser protegidos contra espionagem mágica e quando portais para outros planos de existência devem ser fechados. Subclass/&WizardAbjurationTitle=Abjuração +Tag/&AbjurerSpellSpecialTagTitle=Magias de Subclasse Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=Você tem {0} de {1} Proteção Arcana.\nQuando você sofre dano, a proteção bloqueia uma quantidade de dano igual à sua intensidade, e sua intensidade diminui em 1. Depois que você conjura uma magia de Abjuração, a intensidade da proteção aumenta pelo Nível da magia, até um máximo de 2x seu nível de Mago. Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=Você tem {0} de {1} Arcane Ward.\nSempre que você recebe dano, a proteção reduz o dano pelo seu valor e é diminuída pela quantidade de dano prevenido. Sempre que você conjura uma magia de abjuração de 1º+ nível, a proteção recupera um número de pontos de vida igual ao dobro do nível da magia. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardEvocation-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardEvocation-pt-BR.txt index ae9a5c2188..bf7010af0d 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardEvocation-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardEvocation-pt-BR.txt @@ -8,7 +8,10 @@ Feature/&FeatureWizardEvocationSculptSpellsDescription=Sempre que você conjura Feature/&FeatureWizardEvocationSculptSpellsTitle=Esculpir Feitiços Feature/&MagicAffinityWizardEvocationPotentCantripDescription=Seus truques de dano afetam até mesmo criaturas que evitam o impacto do efeito. Quando uma criatura obtém sucesso em um teste de resistência contra seu truque, a criatura sofre metade do dano do truque (se houver), mas não sofre nenhum efeito adicional do truque. Se você atingir uma criatura com um truque que exija uma jogada de ataque, você adiciona seu bônus de proficiência a uma jogada de dano daquele truque. Feature/&MagicAffinityWizardEvocationPotentCantripTitle=Truque Potente +Feature/&MagicAffinityWizardEvocationSavant2024Description=Escolha duas magias de Wizard da escola de Evocação e adicione-as ao seu grimório de graça. Além disso, sempre que você ganhar acesso a um novo nível de espaços de magia nesta classe, você pode adicionar uma magia de Wizard da escola de Evocação ao seu grimório de graça. +Feature/&MagicAffinityWizardEvocationSavant2024Title=Evocação Savant Feature/&MagicAffinityWizardEvocationSavantDescription=A partir do momento em que você seleciona esta escola no 2º nível, o ouro e o tempo que você deve gastar para copiar uma magia de Evocação para seu grimório são reduzidos pela metade. Feature/&MagicAffinityWizardEvocationSavantTitle=Evocação Savant Subclass/&WizardEvocationDescription=Você foca seu estudo em magia que cria efeitos elementais poderosos, como frio cortante, chamas abrasadoras, trovões estrondosos, relâmpagos crepitantes e ácido ardente. Alguns evocadores encontram emprego em forças militares, servindo como artilharia para explodir exércitos inimigos de longe. Outros usam seu poder espetacular para proteger os fracos, enquanto alguns buscam seu próprio ganho como bandidos, aventureiros ou aspirantes a tiranos. Subclass/&WizardEvocationTitle=Evocação +Tag/&EvokerSpellSpecialTagTitle=Magias de Subclasse diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 29dae66339..6c8e0bfa90 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -293,8 +293,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=Пополнить магаз ModUi/&StockHugoStoreWithAdditionalFoci=Пополнить магазин Хьюго наборами магических фокусировок: Магических посохов, Друидических подвесок, Жезлов и Дубинок ModUi/&Subclasses=Архетипы ModUi/&Subraces=Подрасы +ModUi/&SwapAbjurationSavant=Поменяйте Abjurer Abjuration Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] ModUi/&SwapCraftedItemAndRecipeIcons=+ Заменить значок рецепта значком создаваемого предмета в магазине ModUi/&SwapEvocationPotentCantripAndSculptSpell=Поменять местами умения Волшебника школы Воплощения Построение заклинаний и Мощный заговор [OneDnd] +ModUi/&SwapEvocationSavant=Поменяйте Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] ModUi/&TableTopButton=Выберите содержимое Tabletop ModUi/&TableTopHelp1=• Следующие разделы перегруппированы и дублируют настройки 5e 2014 и 2024, разбросанные по всему моду для вашего удобства. ModUi/&TableTopHelp2=• Нажмите кнопку, чтобы выбрать только настольный контент на вкладке «Персонаж», и выберите все параметры ниже, чтобы получить настоящий опыт TT diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardAbjuration-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardAbjuration-ru.txt index 63d90ddba7..a8d96d618b 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardAbjuration-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardAbjuration-ru.txt @@ -1,4 +1,6 @@ Condition/&ConditionWizardAbjurationArcaneWardTitle=Магическая защита +Feature/&MagicAffinityWizardAbjurationSavant2024Description=Выберите два заклинания волшебника из школы Отречения и добавьте их в свою книгу заклинаний бесплатно. Кроме того, всякий раз, когда вы получаете доступ к новому уровню слотов заклинаний в этом классе, вы можете добавить одно заклинание волшебника из школы Отречения в свою книгу заклинаний бесплатно. +Feature/&MagicAffinityWizardAbjurationSavant2024Title=Эвокация Савант Feature/&MagicAffinityWizardAbjurationScriberDescription=Золото и время, которое вы тратите на копирование заклинания школы Ограждения в свою книгу заклинаний, уменьшаются вдвое. Feature/&MagicAffinityWizardAbjurationScriberTitle=Мастер ограждения Feature/&PowerWizardAbjurationArcaneWardBG3Description=Остаточная магия от ваших заклинаний сплетается в оберег, защищающий вас от урона. Каждый раз, когда вы накладываете заклинание школы Ограждения, интенсивность защиты увеличивается на уровень заклинания, вплоть до двукратного значения вашего уровня Волшебника.\nКогда вы получаете урон, защита блокирует количество урона, равное её интенсивности, а сама интенсивность уменьшается на 1.\nПосле продолжительного отдыха интенсивность защиты сбрасывается и становится равной вашему уровню Волшебника. @@ -19,5 +21,6 @@ Reaction/&SpendPowerProjectedWardReactTitle=Проекция защиты Reaction/&SpendPowerProjectedWardTitle=Проекция защиты Subclass/&WizardAbjurationDescription=Школа Ограждения делает упор на магию блокировки, изгнания и защиты. Это гордое и уважаемое призвание. Называемые оградителями, члены этой школы становятся востребованными, когда злобные духи нуждаются в экзорцизме, когда важные места должны быть защищены от магического шпионажа, и когда порталы на другие планы бытия должны быть закрыты. Subclass/&WizardAbjurationTitle=Ограждение +Tag/&AbjurerSpellSpecialTagTitle=Заклинания подкласса Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=У вас есть {0} из {1} Магической защиты.\nКогда вы получаете урон, защита блокирует количество урона, равное её интенсивности, а сама интенсивность уменьшается на 1. Каждый раз, когда вы накладываете заклинание школы Ограждения, интенсивность защиты увеличивается на уровень заклинания, вплоть до двукратного значения вашего уровня Волшебника. Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=У вас есть {0} из {1} Магической защиты.\nКогда вы получаете урон, его вместо вас получает защита. Если вы накладываете заклинание школы Ограждения 1-го уровня или выше, защита восстанавливает количество хитов, равное удвоенному уровню заклинания. diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardEvocation-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardEvocation-ru.txt index 3ace2378d8..3a0042e569 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardEvocation-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardEvocation-ru.txt @@ -8,7 +8,10 @@ Feature/&FeatureWizardEvocationSculptSpellsDescription=Когда вы накл Feature/&FeatureWizardEvocationSculptSpellsTitle=Построение заклинаний Feature/&MagicAffinityWizardEvocationPotentCantripDescription=Ваши наносящие урон заговоры воздействуют даже на тех существ, которые избегают основного эффекта. Если существо преуспевает в спасброске от вашего заговора, оно получает половину урона от него (если есть), но не получает дополнительных эффектов от него. Если вы поражаете существо заговором, требующим броска атаки, вы добавляете свой бонус мастерства к одному броску урона этого заговора. Feature/&MagicAffinityWizardEvocationPotentCantripTitle=Мощный заговор +Feature/&MagicAffinityWizardEvocationSavant2024Description=Выберите два заклинания Волшебника из школы Вызова и добавьте их в свою книгу заклинаний бесплатно. Кроме того, всякий раз, когда вы получаете доступ к новому уровню слотов заклинаний в этом классе, вы можете добавить одно заклинание Волшебника из школы Вызова в свою книгу заклинаний бесплатно. +Feature/&MagicAffinityWizardEvocationSavant2024Title=Эвокация Савант Feature/&MagicAffinityWizardEvocationSavantDescription=Золото и время, которое вы тратите на копирование заклинания школы Воплощения в свою книгу заклинаний, уменьшаются вдвое. Feature/&MagicAffinityWizardEvocationSavantTitle=Мастер воплощения Subclass/&WizardEvocationDescription=Вы сосредоточили свои исследования на магии, которая создаёт могущественные стихийные эффекты, такие как ледяной холод, жгучее пламя, раскатистый гром, трещащие молнии и едкая кислота. Некоторые боевые маги находят своё призвание в армии, идя на службу в артиллерию и уничтожая вражеские армии издалека. Другие используют свои впечатляющие возможности, чтобы защитить слабых. Остальные же ищут свою собственную выгоду на поприще бандита, искателя приключений или начинающего тирана. Subclass/&WizardEvocationTitle=Воплощение +Tag/&EvokerSpellSpecialTagTitle=Заклинания подкласса diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index b24b9b0b6c..d5dc46d22b 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -293,8 +293,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=将所有非魔法乐器存 ModUi/&StockHugoStoreWithAdditionalFoci=将 奥术法杖、德鲁伊项链、法杖 和 棍棒 设置为焦点物品,放入 Hugo 的商店 ModUi/&Subclasses=子类 ModUi/&Subraces=亚种 +ModUi/&SwapAbjurationSavant=将 Abjurer Abjuration Savant 与 5e 2024 版本交换 [获得后学习 2 个学校法术,每次提升一个槽位等级时再学习 1 个] ModUi/&SwapCraftedItemAndRecipeIcons=+ 在商店中交换配方和制作物品图标 ModUi/&SwapEvocationPotentCantripAndSculptSpell=交换召唤师 塑形法术强效咒语功能 +ModUi/&SwapEvocationSavant=将 Evoker Evocation Savant 与 5e 2024 版本交换 [获得后学习 2 个学校法术,每次提升一个槽位等级时再学习 1 个] ModUi/&TableTopButton=选择桌面内容 ModUi/&TableTopHelp1=• 以下部分重新分组并复制了分散在模块中的 5e 2014 和 2024 设置,以方便您使用 ModUi/&TableTopHelp2=• 按下按钮仅选择角色选项卡下的桌面内容,并选择以下所有选项以获得真正的 TT 体验 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardAbjuration-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardAbjuration-zh-CN.txt index c55b7e1bb6..0b33d499a0 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardAbjuration-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardAbjuration-zh-CN.txt @@ -1,5 +1,7 @@ Condition/&ConditionWizardAbjurationArcaneWardDescription=你的奥术守卫已激活 Condition/&ConditionWizardAbjurationArcaneWardTitle=秘法守卫 +Feature/&MagicAffinityWizardAbjurationSavant2024Description=选择两个来自防护系法术的法师法术,并将它们免费添加到您的法术书中。此外,每当您获得此职业的新法术位等级时,您都可以免费将一个来自防护系法术的法师法术添加到您的法术书中。 +Feature/&MagicAffinityWizardAbjurationSavant2024Title=召唤专家 Feature/&MagicAffinityWizardAbjurationScriberDescription=从你在第 2 级选择这所学校开始,将召唤术咒语复制到你的法术书中所需花费的金钱和时间将减半。 Feature/&MagicAffinityWizardAbjurationScriberTitle=防护学者 Feature/&PowerWizardAbjurationArcaneWardBG3Description=你的法术残留的魔力会在你周围形成一道护盾,保护你免受伤害。每次施放防护法术时,护盾的强度都会增加,增加的数值与法术等级相同,最高可达你法师等级的 2 倍。\当你受到伤害时,护盾会阻挡与其强度相等的伤害,并且其强度会降低 1。\n每次长时间休息后,护盾的强度都会重置,并变为与你的法师等级相同。 @@ -20,5 +22,6 @@ Reaction/&SpendPowerProjectedWardReactTitle=项目沃德 Reaction/&SpendPowerProjectedWardTitle=预计病房 Subclass/&WizardAbjurationDescription=防护系强调阻挡、驱逐或保护魔法。这是一项令人骄傲和尊敬的职业。当恶灵需要驱魔、重要地点必须防范魔法监视以及通往其他存在位面的门户必须关闭时,人们就会寻求这个系的成员,他们被称为防护师。 Subclass/&WizardAbjurationTitle=放弃 +Tag/&AbjurerSpellSpecialTagTitle=子类法术 Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=您拥有 {0} 个奥术守卫,总数量为 {1}。\n当您受到伤害时,守卫会阻挡与其强度相等的伤害量,并且其强度会降低 1。在您施放防护系法术后,守卫的强度会根据法术等级而增加,最高可达您法师等级的 2 倍。 Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=您拥有 {0} 个奥术守卫,总数量为 {1} 个。\n每当您受到伤害时,守卫都会减少伤害,减幅等于其数值,并减少防止的伤害量。每当您施放 1 级及以上的防护法术时,守卫都会恢复等于该法术等级两倍的生命值。 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardEvocation-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardEvocation-zh-CN.txt index 5f3e527708..32498ea917 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardEvocation-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardEvocation-zh-CN.txt @@ -8,7 +8,10 @@ Feature/&FeatureWizardEvocationSculptSpellsDescription=每当你施展一个可 Feature/&FeatureWizardEvocationSculptSpellsTitle=塑形法术 Feature/&MagicAffinityWizardEvocationPotentCantripDescription=你的伤害性戏法甚至会影响那些避免受到该效果影响的生物。当生物成功通过对抗你的戏法的豁免检定时,该生物将受到一半的戏法伤害(如果有的话),但不会受到该戏法的额外影响。如果你使用需要攻击掷骰的戏法击中生物,你将你的熟练加值添加到该戏法的一次伤害掷骰中。 Feature/&MagicAffinityWizardEvocationPotentCantripTitle=強效咒語 +Feature/&MagicAffinityWizardEvocationSavant2024Description=从召唤系中选择两个法师法术,并将它们免费添加到您的法术书中。此外,每当您获得此职业的新法术位等级时,您都可以免费将一个召唤系法师法术添加到您的法术书中。 +Feature/&MagicAffinityWizardEvocationSavant2024Title=召唤专家 Feature/&MagicAffinityWizardEvocationSavantDescription=从你在第 2 级选择这所学校开始,将召唤术咒语复制到你的法术书中所需花费的金钱和时间将减半。 Feature/&MagicAffinityWizardEvocationSavantTitle=召唤专家 Subclass/&WizardEvocationDescription=你专注于研究能够产生强大元素效果的魔法,例如严寒、灼热的火焰、滚滚的雷声、劈啪的闪电和燃烧的酸液。一些召唤师在军队中找到了工作,充当炮兵从远处轰炸敌军。其他人则利用他们惊人的力量保护弱者,而有些人则以强盗、冒险家或有抱负的暴君的身份谋求自己的利益。 Subclass/&WizardEvocationTitle=招魂 +Tag/&EvokerSpellSpecialTagTitle=子类法术 From 0b065ac23dbfb94ab905c60c8524bb023951d963 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 30 Oct 2024 18:41:45 -0700 Subject: [PATCH 04/85] add Character > Classes > 'Enable Wizard to learn Scholar at level 2' --- .../UnfinishedBusinessBlueprints/Assets.txt | 2 + .../PointPoolWizardScholar.json | 46 +++++++++++++++++++ .../ChangelogHistory.txt | 1 + .../Displays/ClassesDisplay.cs | 8 ++++ .../Displays/GeneralDisplay.cs | 7 +++ .../Models/SrdAndHouseRulesContext.cs | 26 +++++++++++ SolastaUnfinishedBusiness/Settings.cs | 1 + SolastaUnfinishedBusiness/Settings/empty.xml | 5 ++ .../Settings/zappastuff.xml | 3 +- .../Translations/de/Others-de.txt | 2 + .../Translations/de/Settings-de.txt | 1 + .../Translations/en/Others-en.txt | 2 + .../Translations/en/Settings-en.txt | 3 +- .../Translations/es/Others-es.txt | 2 + .../Translations/es/Settings-es.txt | 1 + .../Translations/fr/Others-fr.txt | 2 + .../Translations/fr/Settings-fr.txt | 1 + .../Translations/it/Others-it.txt | 2 + .../Translations/it/Settings-it.txt | 1 + .../Translations/ja/Others-ja.txt | 2 + .../Translations/ja/Settings-ja.txt | 1 + .../Translations/ko/Others-ko.txt | 2 + .../Translations/ko/Settings-ko.txt | 1 + .../Translations/pt-BR/Others-pt-BR.txt | 2 + .../Translations/pt-BR/Settings-pt-BR.txt | 1 + .../Translations/ru/Others-ru.txt | 2 + .../Translations/ru/Settings-ru.txt | 1 + .../Translations/zh-CN/Others-zh-CN.txt | 2 + .../Translations/zh-CN/Settings-zh-CN.txt | 1 + 29 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolWizardScholar.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 944b316ba5..fdc4f95e26 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -3003,6 +3003,7 @@ PointPoolTacticianSharpMindExpertise FeatureDefinitionPointPool FeatureDefinitio PointPoolTacticianSharpMindSkill FeatureDefinitionPointPool FeatureDefinition 7a987cf5-d9a8-5b9b-86ef-0c9c413650aa PointPoolWarlockInvocation18 FeatureDefinitionPointPool FeatureDefinition 4f5dc4ea-5261-5aef-98fd-10e4d5c86a57 PointPoolWarlockMysticArcanum9 FeatureDefinitionPointPool FeatureDefinition 4d67ee2f-bae9-590d-a253-ab2806576012 +PointPoolWizardScholar FeatureDefinitionPointPool FeatureDefinition c071935d-bc4d-56d5-910c-30556ad61f78 PowerAfterRestIdentify FeatureDefinitionPower FeatureDefinition 220b3844-2b1c-535e-b393-8eeab55ee620 PowerAfterRestStopInfusions FeatureDefinitionPower FeatureDefinition 59d0ab53-6ea5-557b-bb7d-0b3c7be05c84 PowerAncientForestEntangleAtWill FeatureDefinitionPower FeatureDefinition 51740590-182d-5233-aa33-d6b88e3ccb94 @@ -5829,6 +5830,7 @@ PointPoolTacticianSharpMindExpertise FeatureDefinitionPointPool FeatureDefinitio PointPoolTacticianSharpMindSkill FeatureDefinitionPointPool FeatureDefinitionPointPool 7a987cf5-d9a8-5b9b-86ef-0c9c413650aa PointPoolWarlockInvocation18 FeatureDefinitionPointPool FeatureDefinitionPointPool 4f5dc4ea-5261-5aef-98fd-10e4d5c86a57 PointPoolWarlockMysticArcanum9 FeatureDefinitionPointPool FeatureDefinitionPointPool 4d67ee2f-bae9-590d-a253-ab2806576012 +PointPoolWizardScholar FeatureDefinitionPointPool FeatureDefinitionPointPool c071935d-bc4d-56d5-910c-30556ad61f78 ActionAffinitySpellShieldRangedDefense FeatureDefinitionPower FeatureDefinitionPower cc7a8cde-d4d4-5b3b-bba0-78c87c1f0489 AdditionalDamageInnovationVitriolistInfusion FeatureDefinitionPower FeatureDefinitionPower b8c3a8ca-90d2-5c4d-b323-6d425f2c00ea AdditionalDamageRangerSurvivalistDisablingStrike FeatureDefinitionPower FeatureDefinitionPower a9674f1b-57bb-58b3-aa2e-6fe62446a220 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolWizardScholar.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolWizardScholar.json new file mode 100644 index 0000000000..0168073eda --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolWizardScholar.json @@ -0,0 +1,46 @@ +{ + "$type": "FeatureDefinitionPointPool, Assembly-CSharp", + "poolType": "Expertise", + "poolAmount": 1, + "restrictedChoices": [ + "Arcana", + "History", + "Investigation", + "Medecine", + "Nature", + "Religion" + ], + "uniqueChoices": false, + "spellListOverride": null, + "ritualOnly": false, + "minSpellLevel": 0, + "maxSpellLevel": 9, + "extraSpellsTag": "", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PointPoolWizardScholarTitle", + "description": "Feature/&PointPoolWizardScholarDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "c071935d-bc4d-56d5-910c-30556ad61f78", + "contentPack": 9999, + "name": "PointPoolWizardScholar" +} \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 58333305d7..5d47239b7c 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,5 +1,6 @@ 1.5.97.37: +- added Character > Classes > 'Enable Wizard to learn Scholar at level 2' [OneDnd] - added Character > Subclasses > 'Swap Abjurer abjuration savant with 5e 2024 version' [OneDnd] - added Character > Subclasses > 'Swap Evoker evocation savant with 5e 2024 version' [OneDnd] - fixed Wizard Graviturgist descriptions, SFX, and behaviors diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index 23eb8681d4..a2b8f7f768 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -287,6 +287,14 @@ internal static void DisplayClasses() UI.Label("" + Gui.Localize("Class/&WizardTitle") + ":"); UI.Label(); + + toggle = Main.Settings.EnableWizardToLearnScholarAtLevel2; + if (UI.Toggle(Gui.Localize("ModUi/&EnableWizardToLearnScholarAtLevel2"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableWizardToLearnScholarAtLevel2 = toggle; + SrdAndHouseRulesContext.SwitchOneDndWizardScholar(); + } + toggle = Main.Settings.EnableWizardToLearnSchoolAtLevel3; if (UI.Toggle(Gui.Localize("ModUi/&EnableWizardToLearnSchoolAtLevel3"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 0e32313db7..8c33c17451 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -387,6 +387,13 @@ private static void DisplayOneDnd() UI.Label(); + toggle = Main.Settings.EnableWizardToLearnScholarAtLevel2; + if (UI.Toggle(Gui.Localize("ModUi/&EnableWizardToLearnScholarAtLevel2"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableWizardToLearnScholarAtLevel2 = toggle; + SrdAndHouseRulesContext.SwitchOneDndWizardScholar(); + } + toggle = Main.Settings.EnableWizardToLearnSchoolAtLevel3; if (UI.Toggle(Gui.Localize("ModUi/&EnableWizardToLearnSchoolAtLevel3"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index 8b9c74e402..9f937e67c0 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -85,6 +85,19 @@ internal static class SrdAndHouseRulesContext .SetInitiativeAffinity(AdvantageType.Disadvantage) .AddToDB(); + private static readonly FeatureDefinitionPointPool PointPoolWizardScholar = FeatureDefinitionPointPoolBuilder + .Create("PointPoolWizardScholar") + .SetGuiPresentation(Category.Feature) + .SetPool(HeroDefinitions.PointsPoolType.Expertise, 1) + .RestrictChoices( + SkillDefinitions.Arcana, + SkillDefinitions.History, + SkillDefinitions.Investigation, + SkillDefinitions.Medecine, + SkillDefinitions.Nature, + SkillDefinitions.Religion) + .AddToDB(); + private static SpellDefinition ConjureElementalInvisibleStalker { get; set; } internal static void LateLoad() @@ -117,6 +130,7 @@ internal static void LateLoad() SwitchSchoolRestrictionsFromSpellBlade(); SwitchUniversalSylvanArmorAndLightbringer(); SwitchUseHeightOneCylinderEffect(); + SwitchOneDndWizardScholar(); SwitchOneDndWizardSchoolOfMagicLearningLevel(); SwitchOneDndPaladinLearnSpellCastingAtOne(); SwitchOneDndRangerLearnSpellCastingAtOne(); @@ -542,6 +556,18 @@ internal static void SwitchOneDndHealingSpellsBuf() MassCureWounds.effectDescription.EffectForms[0].healingForm.diceNumber = dice; } + internal static void SwitchOneDndWizardScholar() + { + if (Main.Settings.EnableWizardToLearnScholarAtLevel2) + { + Wizard.FeatureUnlocks.Add(new FeatureUnlockByLevel(PointPoolWizardScholar, 2)); + } + else + { + Wizard.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PointPoolWizardScholar); + } + } + internal static void SwitchFilterOnHideousLaughter() { HideousLaughter.effectDescription.restrictedCreatureFamilies.Clear(); diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 0a7d817080..7093ed50b5 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -292,6 +292,7 @@ public class Settings : UnityModManager.ModSettings public bool EnableSorcererMagicalGuidance { get; set; } public bool EnableSorcererQuickenedAction { get; set; } public bool HideQuickenedActionWhenMetamagicOff { get; set; } + public bool EnableWizardToLearnScholarAtLevel2 { get; set; } public bool EnableWizardToLearnSchoolAtLevel3 { get; set; } public bool EnableSignatureSpellsRelearn { get; set; } diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index dfedc14830..e845b8ec8b 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -579,6 +579,7 @@ false false false + false false false false @@ -1028,4 +1029,8 @@ false false false + 0 + false + false + false \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index 1a1763d56d..07e4eced75 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -1,6 +1,6 @@ - 1 + 2 0 0 false @@ -621,6 +621,7 @@ true true false + false false false false diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 1502630890..4c42e375ec 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -139,6 +139,8 @@ Feature/&InvocationPoolSorcererDraconicChoiceLearnTitle=Drachenabstammung Feature/&MagicAffinityPatronExpandedSpellsDescription={0}\n\n Feature/&MonkAlternateUnarmoredMovementImprovedDescription=Ab der 9. Stufe erlangen Sie die Fähigkeit, sich an vertikalen Flächen zu bewegen, ohne zu fallen. Feature/&MonkAlternateUnarmoredMovementImprovedTitle=Ungepanzerte Bewegung - Verbessert +Feature/&PointPoolWizardScholarDescription=Während Sie Magie studiert haben, haben Sie sich auch auf ein akademisches Studienfach spezialisiert. Wählen Sie eine der folgenden Fähigkeiten, in denen Sie sich auskennen: Arkana, Geschichte, Ermittlung, Medizin, Natur oder Religion. Sie sind Experte in der gewählten Fähigkeit. +Feature/&PointPoolWizardScholarTitle=Gelehrte Feature/&PowerAfterRestIdentifyDescription=Identifizieren Sie alle magischen Gegenstände im Inventar. Feature/&PowerAfterRestIdentifyTitle=Identifizieren Feature/&PowerBarbarianBrutalStrikeDescription=Brutaler Schlag TBD diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 8d389099b0..5a7cc0d36c 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -167,6 +167,7 @@ ModUi/&EnableTooltipDistance=Aktivieren Sie die Anzeige der Entfernung in den To ModUi/&EnableUnarmedMainAttackAction=Aktiviere die Aktion Unbewaffneter Angriff [wenn der Akteur eine Waffe im Hauptkampf hat, ein Mönch ist oder Handwickel oder Panzerhandschuhe ausgerüstet hat] ModUi/&EnableUpcastConjureElementalAndFey=Aktiviere Upcast von Elementar beschwören und Feenbeschwören ModUi/&EnableVariablePlaceholdersOnTexts=Aktivieren Sie variable Platzhalter in Beschreibungen [verwenden Sie {VARIABLE_NAME} als Platzhalter] +ModUi/&EnableWizardToLearnScholarAtLevel2=Aktiviere Wizard, um Scholar auf Level 2 zu erlernen ModUi/&EnableWizardToLearnSchoolAtLevel3=Aktivieren Sie Wizard, um die Schule der Magie auf Stufe 3 statt auf Stufe 2 zu erwerben ModUi/&EnablesAsiAndFeat=Aktivieren Sie sowohl die Erhöhung der Attributwerte als auch die Auswahl von Talenten [anstelle einer exklusiven Auswahl] ModUi/&EncounterPercentageChance=Prozentuale Wahrscheinlichkeit für Zufallsbegegnungen festlegen diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 84af0f0f95..38c220f7f4 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -139,6 +139,8 @@ Feature/&InvocationPoolSorcererDraconicChoiceLearnTitle=Draconic Ancestry Feature/&MagicAffinityPatronExpandedSpellsDescription={0}\n\n Feature/&MonkAlternateUnarmoredMovementImprovedDescription=Starting at the 9th level, you gain the ability to move along vertical surfaces without falling. Feature/&MonkAlternateUnarmoredMovementImprovedTitle=Unarmored Movement - Improved +Feature/&PointPoolWizardScholarDescription=While studying magic, you also specialized in an academic field of study. Choose one of the following skills in which you have proficiency: Arcana, History, Investigation, Medicine, Nature, or Religion. You have Expertise in the chosen skill. +Feature/&PointPoolWizardScholarTitle=Scholar Feature/&PowerAfterRestIdentifyDescription=Identify all magic items in inventory. Feature/&PowerAfterRestIdentifyTitle=Identify Feature/&PowerBarbarianBrutalStrikeDescription=Brutal Strike TBD diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index da1483fc37..8b4429021b 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -167,7 +167,8 @@ ModUi/&EnableTooltipDistance=Enable showing distance on tooltips when hovering o ModUi/&EnableUnarmedMainAttackAction=Enable the Unarmed Attack action [if actor has weapon in main, is a Monk or has handwraps or gauntlet equipped] ModUi/&EnableUpcastConjureElementalAndFey=Enable upcast of Conjure Elemental and Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Enable variable placeholders on descriptions [use {VARIABLE_NAME} as placeholder] -ModUi/&EnableWizardToLearnSchoolAtLevel3=Enable Wizard acquire the school of magic at level 3 instead of 2 +ModUi/&EnableWizardToLearnScholarAtLevel2=Enable Wizard to learn Scholar at level 2 +ModUi/&EnableWizardToLearnSchoolAtLevel3=Enable Wizard to acquire the School of Magic at level 3 instead of 2 ModUi/&EnablesAsiAndFeat=Enable both attribute scores increase and feats selection [instead of an exclusive choice] ModUi/&EncounterPercentageChance=Set random encounters percentage chances ModUi/&Encounters=Encounters diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index 44b311111b..5a0d22b427 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -139,6 +139,8 @@ Feature/&InvocationPoolSorcererDraconicChoiceLearnTitle=Ascendencia dracónica Feature/&MagicAffinityPatronExpandedSpellsDescription={0}\n\n Feature/&MonkAlternateUnarmoredMovementImprovedDescription=A partir del nivel 9, obtienes la capacidad de moverte por superficies verticales sin caerte. Feature/&MonkAlternateUnarmoredMovementImprovedTitle=Movimiento sin armadura - Mejorado +Feature/&PointPoolWizardScholarDescription=Mientras estudiabas magia, también te especializaste en un campo académico de estudio. Elige una de las siguientes habilidades en las que tienes competencia: Arcanos, Historia, Investigación, Medicina, Naturaleza o Religión. Tienes Pericia en la habilidad elegida. +Feature/&PointPoolWizardScholarTitle=Erudito Feature/&PowerAfterRestIdentifyDescription=Identifica todos los objetos mágicos en el inventario. Feature/&PowerAfterRestIdentifyTitle=Identificar Feature/&PowerBarbarianBrutalStrikeDescription=Golpe brutal por determinar diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 54838f065c..22fed3ed3f 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -168,6 +168,7 @@ ModUi/&EnableTooltipDistance=Habilitar la visualización de la distancia en las ModUi/&EnableUnarmedMainAttackAction=Habilitar la acción Ataque desarmado [si el actor tiene un arma en el personaje principal, es un Monje o tiene vendas o guanteletes equipados] ModUi/&EnableUpcastConjureElementalAndFey=Habilitar la conversión ascendente de Conjurar elemental y Conjurar feérico ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posición de variables en las descripciones [use {VARIABLE_NAME} como marcador de posición] +ModUi/&EnableWizardToLearnScholarAtLevel2=Habilitar Wizard para aprender Scholar en el nivel 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Permite que Mago adquiera la escuela de magia en el nivel 3 en lugar de 2 ModUi/&EnablesAsiAndFeat=Habilitar tanto el aumento de las puntuaciones de atributos como la selección de dotes [en lugar de una elección exclusiva] ModUi/&EncounterPercentageChance=Establecer porcentajes de posibilidades de encuentros aleatorios diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index baada37ec1..21dd0855c7 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -139,6 +139,8 @@ Feature/&InvocationPoolSorcererDraconicChoiceLearnTitle=Ascendance draconique Feature/&MagicAffinityPatronExpandedSpellsDescription={0}\n\n Feature/&MonkAlternateUnarmoredMovementImprovedDescription=À partir du niveau 9, vous acquérez la capacité de vous déplacer sur des surfaces verticales sans tomber. Feature/&MonkAlternateUnarmoredMovementImprovedTitle=Mouvement sans armure - Amélioré +Feature/&PointPoolWizardScholarDescription=Pendant que vous étudiez la magie, vous vous êtes également spécialisé dans un domaine d'études académiques. Choisissez l'une des compétences suivantes dans lesquelles vous avez une maîtrise : Arcanes, Histoire, Investigation, Médecine, Nature ou Religion. Vous avez une expertise dans la compétence choisie. +Feature/&PointPoolWizardScholarTitle=Savant Feature/&PowerAfterRestIdentifyDescription=Identifiez tous les objets magiques dans l'inventaire. Feature/&PowerAfterRestIdentifyTitle=Identifier Feature/&PowerBarbarianBrutalStrikeDescription=Frappe brutale à déterminer diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 9930b9033c..2086bbbce9 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -167,6 +167,7 @@ ModUi/&EnableTooltipDistance=Activer l'affichage de la distance dans les info-bu ModUi/&EnableUnarmedMainAttackAction=Activer l'action Attaque à mains nues [si l'acteur a une arme dans l'arme principale, est un moine ou a des bandages ou un gantelet équipés] ModUi/&EnableUpcastConjureElementalAndFey=Activer la conversion ascendante de Conjure Elemental et Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Activer les espaces réservés aux variables dans les descriptions [utiliser {VARIABLE_NAME} comme espace réservé] +ModUi/&EnableWizardToLearnScholarAtLevel2=Activer Wizard pour apprendre Scholar au niveau 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Activer le magicien pour acquérir l'école de magie au niveau 3 au lieu de 2 ModUi/&EnablesAsiAndFeat=Activer à la fois l'augmentation des scores d'attributs et la sélection des exploits [au lieu d'un choix exclusif] ModUi/&EncounterPercentageChance=Définir des pourcentages de chances de rencontres aléatoires diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 5d9a23b965..5bf54a8b7b 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -139,6 +139,8 @@ Feature/&InvocationPoolSorcererDraconicChoiceLearnTitle=Ascendenza draconica Feature/&MagicAffinityPatronExpandedSpellsDescription={0}\n\n Feature/&MonkAlternateUnarmoredMovementImprovedDescription=A partire dal 9° livello, ottieni la capacità di muoverti lungo superfici verticali senza cadere. Feature/&MonkAlternateUnarmoredMovementImprovedTitle=Movimento senza armatura - Migliorato +Feature/&PointPoolWizardScholarDescription=Mentre studiavi magia, ti sei anche specializzato in un campo di studio accademico. Scegli una delle seguenti abilità in cui hai competenza: Arcana, Storia, Investigazione, Medicina, Natura o Religione. Hai competenza nell'abilità scelta. +Feature/&PointPoolWizardScholarTitle=Studioso Feature/&PowerAfterRestIdentifyDescription=Identifica tutti gli oggetti magici presenti nell'inventario. Feature/&PowerAfterRestIdentifyTitle=Identificare Feature/&PowerBarbarianBrutalStrikeDescription=Colpo brutale TBD diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index a558d8968a..1eddfaeb30 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -167,6 +167,7 @@ ModUi/&EnableTooltipDistance=Abilita la visualizzazione della distanza nei sugge ModUi/&EnableUnarmedMainAttackAction=Abilita l'azione Attacco disarmato [se l'attore ha un'arma nel personaggio principale, è un monaco o ha fasce o guanto equipaggiati] ModUi/&EnableUpcastConjureElementalAndFey=Abilita l'upcast di Evoca Elementale e Evoca Fata ModUi/&EnableVariablePlaceholdersOnTexts=Abilita segnaposto variabili nelle descrizioni [usa {VARIABLE_NAME} come segnaposto] +ModUi/&EnableWizardToLearnScholarAtLevel2=Abilita Wizard per apprendere Scholar al livello 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Abilita Wizard ad acquisire la scuola di magia al livello 3 invece che 2 ModUi/&EnablesAsiAndFeat=Abilita sia l'aumento dei punteggi degli attributi che la selezione delle imprese [invece di una scelta esclusiva] ModUi/&EncounterPercentageChance=Imposta le percentuali di probabilità di incontri casuali diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index eaf6f52406..0a8efbaee8 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -139,6 +139,8 @@ Feature/&InvocationPoolSorcererDraconicChoiceLearnTitle=竜の祖先 Feature/&MagicAffinityPatronExpandedSpellsDescription={0}\n\n Feature/&MonkAlternateUnarmoredMovementImprovedDescription=9 レベルからは、落下せずに垂直面に沿って移動できるようになります。 Feature/&MonkAlternateUnarmoredMovementImprovedTitle=非装甲の動き - 改善されました +Feature/&PointPoolWizardScholarDescription=魔法を研究する一方で、学術研究の分野にも特化しました。熟練している以下のスキルのうち 1 つを選択してください: 神秘学、歴史、調査、医学、自然、宗教。選択したスキルに専門知識があります。 +Feature/&PointPoolWizardScholarTitle=学者 Feature/&PowerAfterRestIdentifyDescription=インベントリ内のすべての魔法のアイテムを識別します。 Feature/&PowerAfterRestIdentifyTitle=識別する Feature/&PowerBarbarianBrutalStrikeDescription=ブルータルストライク未定 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index f339d1f2c6..0549c21db5 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -167,6 +167,7 @@ ModUi/&EnableTooltipDistance=戦闘中のキャラクターにマウスを移動 ModUi/&EnableUnarmedMainAttackAction=素手攻撃アクションを有効にする [アクターがメインに武器を持っているか、モンクを持っているか、ハンドラップまたはガントレットを装備している場合] ModUi/&EnableUpcastConjureElementalAndFey=エレメンタル召喚とフェイ召喚のアップキャストを有効にする ModUi/&EnableVariablePlaceholdersOnTexts=説明に変数プレースホルダーを有効にする [プレースホルダーとして {VARIABLE_NAME} を使用する] +ModUi/&EnableWizardToLearnScholarAtLevel2=ウィザードがレベル2で学者を習得できるようにする ModUi/&EnableWizardToLearnSchoolAtLevel3=ウィザードがレベル2ではなくレベル3で魔法の学校を取得できるようにします ModUi/&EnablesAsiAndFeat=属性スコアの増加と 特技 の選択の両方を有効にします [排他的選択の代わりに] ModUi/&EncounterPercentageChance=ランダムエンカウントの確率を設定する diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 631a38b3d7..057e98e920 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -139,6 +139,8 @@ Feature/&InvocationPoolSorcererDraconicChoiceLearnTitle=용의 조상 Feature/&MagicAffinityPatronExpandedSpellsDescription={0}\n\n Feature/&MonkAlternateUnarmoredMovementImprovedDescription=9레벨부터, 당신은 떨어지지 않고 수직 표면을 따라 이동할 수 있는 능력을 얻습니다. Feature/&MonkAlternateUnarmoredMovementImprovedTitle=비무장 이동 - 개선됨 +Feature/&PointPoolWizardScholarDescription=마법을 공부하는 동안 당신은 학문적 연구 분야를 전문으로 했습니다. 당신이 능숙한 다음 기술 중 하나를 선택하세요: Arcana, History, Investigation, Medicine, Nature 또는 Religion. 당신은 선택한 기술에 전문성을 가지고 있습니다. +Feature/&PointPoolWizardScholarTitle=학자 Feature/&PowerAfterRestIdentifyDescription=인벤토리에 있는 모든 마법 아이템을 식별하세요. Feature/&PowerAfterRestIdentifyTitle=식별하다 Feature/&PowerBarbarianBrutalStrikeDescription=잔인한 일격 미정 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 444e4f8424..ea98132499 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -167,6 +167,7 @@ ModUi/&EnableTooltipDistance=전투 중 캐릭터 위에 마우스를 올려 놓 ModUi/&EnableUnarmedMainAttackAction=비무장 공격 동작 활성화 [액터가 기본 무기를 장착하고 있거나, 수도사이거나, 핸드랩 또는 건틀릿을 장착한 경우] ModUi/&EnableUpcastConjureElementalAndFey=원소 소환과 요정 소환의 업캐스트를 활성화합니다. ModUi/&EnableVariablePlaceholdersOnTexts=설명에 변수 플레이스홀더 활성화 [플레이스홀더로 {VARIABLE_NAME} 사용] +ModUi/&EnableWizardToLearnScholarAtLevel2=마법사를 활성화하여 레벨 2에서 학자를 배우세요 ModUi/&EnableWizardToLearnSchoolAtLevel3=마법사가 레벨 2가 아닌 레벨 3에서 마법 학교를 획득할 수 있도록 설정 ModUi/&EnablesAsiAndFeat=속성 점수 증가와 특기 선택을 모두 활성화합니다. [독점 선택 대신] ModUi/&EncounterPercentageChance=무작위 만남 확률 설정 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index fb73c02c25..311abfd637 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -139,6 +139,8 @@ Feature/&InvocationPoolSorcererDraconicChoiceLearnTitle=Ancestralidade Dracônic Feature/&MagicAffinityPatronExpandedSpellsDescription={0}\n\n Feature/&MonkAlternateUnarmoredMovementImprovedDescription=A partir do 9º nível, você ganha a habilidade de se mover em superfícies verticais sem cair. Feature/&MonkAlternateUnarmoredMovementImprovedTitle=Movimento sem armadura - Melhorado +Feature/&PointPoolWizardScholarDescription=Enquanto estudava magia, você também se especializou em um campo acadêmico de estudo. Escolha uma das seguintes perícias nas quais você tem proficiência: Arcana, História, Investigação, Medicina, Natureza ou Religião. Você tem Perícia na perícia escolhida. +Feature/&PointPoolWizardScholarTitle=Estudioso Feature/&PowerAfterRestIdentifyDescription=Identifique todos os itens mágicos no inventário. Feature/&PowerAfterRestIdentifyTitle=Identificar Feature/&PowerBarbarianBrutalStrikeDescription=Ataque Brutal TBD diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index d959090b01..e993663834 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -167,6 +167,7 @@ ModUi/&EnableTooltipDistance=Habilitar a exibição da distância nas dicas de f ModUi/&EnableUnarmedMainAttackAction=Habilitar a ação Ataque Desarmado [se o ator tiver arma principal, for um Monge ou tiver bandanas ou manoplas equipadas] ModUi/&EnableUpcastConjureElementalAndFey=Habilitar upcast de Conjure Elemental e Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posição variáveis em descrições [usar {VARIABLE_NAME} como marcador de posição] +ModUi/&EnableWizardToLearnScholarAtLevel2=Habilitar Wizard para aprender Scholar no nível 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Permitir que Wizard adquira a escola de magia no nível 3 em vez de 2 ModUi/&EnablesAsiAndFeat=Habilitar aumento de pontuação de atributos e seleção de talentos [em vez de uma escolha exclusiva] ModUi/&EncounterPercentageChance=Defina chances percentuais de encontros aleatórios diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 6e9d466a7f..870a9f824c 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -139,6 +139,8 @@ Feature/&InvocationPoolSorcererDraconicChoiceLearnTitle=Наследие дра Feature/&MagicAffinityPatronExpandedSpellsDescription={0}\n\n Feature/&MonkAlternateUnarmoredMovementImprovedDescription=На 9-м уровне вы получаете возможность в свой ход перемещаться по вертикальным поверхностям, не падая во время движения. Feature/&MonkAlternateUnarmoredMovementImprovedTitle=Улучшенное движение без доспехов +Feature/&PointPoolWizardScholarDescription=Изучая магию, вы также специализировались в академической области изучения. Выберите один из следующих навыков, в котором вы имеете мастерство: Аркана, История, Расследование, Медицина, Природа или Религия. У вас есть Экспертиза в выбранном навыке. +Feature/&PointPoolWizardScholarTitle=Ученый Feature/&PowerAfterRestIdentifyDescription=Опознайте все магические предметы в инвентаре. Feature/&PowerAfterRestIdentifyTitle=Опознание Feature/&PowerBarbarianBrutalStrikeDescription=Жестокий удар TBD diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 6c8e0bfa90..cbeab8e7ab 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -167,6 +167,7 @@ ModUi/&EnableTooltipDistance=Включить отображение расст ModUi/&EnableUnarmedMainAttackAction=Включить действие Безоружная атака [если персонаж держит оружие в основной руке и он Монах, или если он использует Обмотки или Перчатки] ModUi/&EnableUpcastConjureElementalAndFey=Включить возможность накладывать на высоких уровнях Призыв элементаля и Призыв феи ModUi/&EnableVariablePlaceholdersOnTexts=Включить заглушки для переменных описаний [использовать {VARIABLE_NAME} в качесте заглушки] +ModUi/&EnableWizardToLearnScholarAtLevel2=Разрешить Мастеру изучать Ученого на уровне 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Включить Волшебнику изучение магических традиций на 3-м уровне вместо 2-го [OneDnd] ModUi/&EnablesAsiAndFeat=Включить возможность и повышать характеристики, и выбирать черту одновременно [вместо того, чтобы делать выбор между этими вариантами] ModUi/&EncounterPercentageChance=Вероятность случайных событий в процентах diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 05fcf1a400..40eaf8da96 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -139,6 +139,8 @@ Feature/&InvocationPoolSorcererDraconicChoiceLearnTitle=龙脉血统 Feature/&MagicAffinityPatronExpandedSpellsDescription={0}\n\n Feature/&MonkAlternateUnarmoredMovementImprovedDescription=从第 9 级开始,你将能够沿着垂直表面移动而不会落下。 Feature/&MonkAlternateUnarmoredMovementImprovedTitle=无甲移动 - 改进 +Feature/&PointPoolWizardScholarDescription=在学习魔法的同时,你还专攻了一个学术领域。选择以下一项你擅长的技能:奥术、历史、调查、医学、自然或宗教。你在所选技能上具有专长。 +Feature/&PointPoolWizardScholarTitle=学者 Feature/&PowerAfterRestIdentifyDescription=鉴定库存中的所有魔法物品。 Feature/&PowerAfterRestIdentifyTitle=鉴定 Feature/&PowerBarbarianBrutalStrikeDescription=凶蛮打击待定 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index d5dc46d22b..4f17632592 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -167,6 +167,7 @@ ModUi/&EnableTooltipDistance=在战斗中将鼠标悬停在角色上时启用在 ModUi/&EnableUnarmedMainAttackAction=启用徒手攻击动作[如果演员主武器为武器、是僧侣或装备有手套铁手套] ModUi/&EnableUpcastConjureElementalAndFey=启用 Conjure Elemental 和 Conjure Fey 的向上转换 ModUi/&EnableVariablePlaceholdersOnTexts=在描述中启用变量占位符[使用 {VARIABLE_NAME} 作为占位符] +ModUi/&EnableWizardToLearnScholarAtLevel2=使巫师能够学习 2 级的学者 ModUi/&EnableWizardToLearnSchoolAtLevel3=使巫师能够以 3 级(而非 2 级)获得魔法学派 ModUi/&EnablesAsiAndFeat=同时启用属性得分增加和专长选择[而不是独占选择] ModUi/&EncounterPercentageChance=设置随机遭遇的百分比几率 From 8c31df6abf0e910c85487974fdf8f1457a849c57 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 30 Oct 2024 18:42:59 -0700 Subject: [PATCH 05/85] remove unnecessary unique choices from point pool --- .../PointPoolDomainNatureSkills.json | 2 +- .../PointPoolInventorRightToolForTheJob.json | 2 +- .../FeatureDefinitionPointPool/PointPoolInventorSkills.json | 2 +- .../FeatureDefinitionPointPool/PointPoolInventorTools.json | 2 +- .../PointPoolSpellMasterBonusCantrips.json | 2 +- .../Builders/Features/FeatureDefinitionPointPoolBuilder.cs | 6 ------ SolastaUnfinishedBusiness/Classes/InventorClass.cs | 3 --- SolastaUnfinishedBusiness/Subclasses/DomainNature.cs | 1 - SolastaUnfinishedBusiness/Subclasses/WizardSpellMaster.cs | 1 - 9 files changed, 5 insertions(+), 16 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolDomainNatureSkills.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolDomainNatureSkills.json index aa6e0eee54..e3c3573f48 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolDomainNatureSkills.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolDomainNatureSkills.json @@ -7,7 +7,7 @@ "Nature", "Survival" ], - "uniqueChoices": true, + "uniqueChoices": false, "spellListOverride": null, "ritualOnly": false, "minSpellLevel": 0, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolInventorRightToolForTheJob.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolInventorRightToolForTheJob.json index 3dded9b123..ecba1aba03 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolInventorRightToolForTheJob.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolInventorRightToolForTheJob.json @@ -9,7 +9,7 @@ "PoisonersKitType", "ScrollKitType" ], - "uniqueChoices": true, + "uniqueChoices": false, "spellListOverride": null, "ritualOnly": false, "minSpellLevel": 0, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolInventorSkills.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolInventorSkills.json index 63cfa891a1..e59bc1ff7a 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolInventorSkills.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolInventorSkills.json @@ -11,7 +11,7 @@ "Perception", "SleightOfHand" ], - "uniqueChoices": true, + "uniqueChoices": false, "spellListOverride": null, "ritualOnly": false, "minSpellLevel": 0, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolInventorTools.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolInventorTools.json index 169fc1d64f..91d3048792 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolInventorTools.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolInventorTools.json @@ -9,7 +9,7 @@ "PoisonersKitType", "ScrollKitType" ], - "uniqueChoices": true, + "uniqueChoices": false, "spellListOverride": null, "ritualOnly": false, "minSpellLevel": 0, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolSpellMasterBonusCantrips.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolSpellMasterBonusCantrips.json index df215a2ec2..029c880a29 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolSpellMasterBonusCantrips.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolSpellMasterBonusCantrips.json @@ -3,7 +3,7 @@ "poolType": "Cantrip", "poolAmount": 2, "restrictedChoices": [], - "uniqueChoices": true, + "uniqueChoices": false, "spellListOverride": null, "ritualOnly": false, "minSpellLevel": 0, diff --git a/SolastaUnfinishedBusiness/Builders/Features/FeatureDefinitionPointPoolBuilder.cs b/SolastaUnfinishedBusiness/Builders/Features/FeatureDefinitionPointPoolBuilder.cs index 93bda0f8d2..b0b70d5cbc 100644 --- a/SolastaUnfinishedBusiness/Builders/Features/FeatureDefinitionPointPoolBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/Features/FeatureDefinitionPointPoolBuilder.cs @@ -40,12 +40,6 @@ internal FeatureDefinitionPointPoolBuilder RestrictChoices(params string[] choic return this; } - internal FeatureDefinitionPointPoolBuilder OnlyUniqueChoices() - { - Definition.uniqueChoices = true; - return this; - } - #region Constructors internal FeatureDefinitionPointPoolBuilder(string name, Guid namespaceGuid) : base(name, namespaceGuid) diff --git a/SolastaUnfinishedBusiness/Classes/InventorClass.cs b/SolastaUnfinishedBusiness/Classes/InventorClass.cs index 985c57ca0e..fa7e9c053f 100644 --- a/SolastaUnfinishedBusiness/Classes/InventorClass.cs +++ b/SolastaUnfinishedBusiness/Classes/InventorClass.cs @@ -267,7 +267,6 @@ public static void Build() .Create("PointPoolInventorTools") .SetGuiPresentation(Category.Feature, "Feature/&ToolGainChoicesSingleDescription") .SetPool(HeroDefinitions.PointsPoolType.Tool, 1) - .OnlyUniqueChoices() .RestrictChoices( ToolTypeDefinitions.DisguiseKitType.Name, ToolTypeDefinitions.EnchantingToolType.Name, @@ -282,7 +281,6 @@ public static void Build() .Create("PointPoolInventorSkills") .SetGuiPresentation(Category.Feature, "Feature/&SkillGainChoicesPluralDescription") .SetPool(HeroDefinitions.PointsPoolType.Skill, 2) - .OnlyUniqueChoices() .RestrictChoices( SkillDefinitions.Arcana, SkillDefinitions.History, @@ -458,7 +456,6 @@ private static FeatureDefinitionPointPool BuildRightToolForTheJob() .Create("PointPoolInventorRightToolForTheJob") .SetGuiPresentation(Category.Feature, "Feature/&ToolGainChoicesSingleDescription") .SetPool(HeroDefinitions.PointsPoolType.Tool, 1) - .OnlyUniqueChoices() .RestrictChoices( ToolTypeDefinitions.DisguiseKitType.Name, ToolTypeDefinitions.EnchantingToolType.Name, diff --git a/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs b/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs index c542852089..7decdbf423 100644 --- a/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs +++ b/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs @@ -84,7 +84,6 @@ public DomainNature() .Create($"PointPool{Name}Skills") .SetGuiPresentationNoContent(true) .SetPool(HeroDefinitions.PointsPoolType.Skill, 1) - .OnlyUniqueChoices() .RestrictChoices( SkillDefinitions.AnimalHandling, SkillDefinitions.Nature, diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardSpellMaster.cs b/SolastaUnfinishedBusiness/Subclasses/WizardSpellMaster.cs index 1dbcc0629b..17df95f3cf 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardSpellMaster.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardSpellMaster.cs @@ -66,7 +66,6 @@ public WizardSpellMaster() .Create($"PointPool{Name}BonusCantrips") .SetGuiPresentation(Category.Feature) .SetPool(HeroDefinitions.PointsPoolType.Cantrip, 2) - .OnlyUniqueChoices() .AddToDB(); // LEVEL 10 From 990bcdfb496645d0330e69dc85e075eaf4ae7bbf Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 30 Oct 2024 18:43:19 -0700 Subject: [PATCH 06/85] update Way of the Storm Soul sprite --- .../Subclasses/WayOfTheStormSoul.png | Bin 38052 -> 41782 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/SolastaUnfinishedBusiness/Resources/Subclasses/WayOfTheStormSoul.png b/SolastaUnfinishedBusiness/Resources/Subclasses/WayOfTheStormSoul.png index 2042dfc04f3fd2fd7adb2270ab907bc9e9dc502e..ed468f6f172ac70123a1329c02ac965d44915005 100644 GIT binary patch literal 41782 zcmV(;K-<5GP)eZgwgz zJ5N(xAto|HMo~;rT#%HSadv%HTV}Abwq|T}|NsB|{r+HMZg6vbWoK{z00L=ibar`! zf`yH4ae8%kfLvZ^dwqr9;^zPX3w?iy4-q6$Q(*sjRY}qNsj>iw6l5Raaw$ zhmeqyn!3Hjl$M_(CNZU{ubZBwiHwu0uC~>=&C%Aw$IXzF zp4Zyq&(qnpxxqUdGSSuCUtwz1*V_S)hiYtkqNS|9!N+uVe&*=v`TF~`x4l0?PZAU)nVX`PnV%9BC*|nv_xSlBA}ug7 zKCiO3W@vW3!OY?0>D%4kijA1Z$joA8a6UmxXli$OdWbeTL;?gDo1Uo~9w>&2mrG7p z`1}52WpgbsI*gB-?e6gB>+up4A2T*Tprfw0yT+ZMthlWrKz>T#n8UL!r$ZUG&e}e%+Sfr*tE8}?(_RwUT@;& z@x;i}^Y{KfsOeY$0010xQchC<6v5hCDd??~fkiyx+%|G|QIu%E&a-ogkXxj4zfo%d z0HC%>L_t(|+U%HVR~mO1#gnG%sd~~aN!tf-SOf+Uh5=+iwqX-x3A+L#pdrC1B`Q=Q zRZ6WQq9~vkF)qXy(`M^O?6e;uOHc1>-rV24_dI{*%K!RbZ&z1)dVaWh>&F}4b$54# zh<_F8>hAvT#*epd{?OBN^~!%&wDBKrbbF)G$Uf002g2?1^4P%uM!R??eRhJAbVdj5;FPxI7Oj2ij*moqVRSq6qB%&b2<+I z>{^ukX3F1nlJLxgmQfVN8~NZgTR*NNJ&O*_@9qYL*VtMT zz$|Lw*S`Ot7|`y24kuOslKPmBN*OjUb{}L)7%S}cQM6UcHyJ#9#l+bRFsosx)xNR4t{>}|df1iDo}TWFFTv1^?e(QlcM(?&7)F1lXbkO|TyJqM>9WQ) zlHyAv;L)t&AAR%wKNEVsPK`cZ0ftuIPkC9c2n4cn!cWn;K4)5&1J2#zfkwvbRM&}F zNap4qTH;4>brDpdk@@ou``%N>3b}G&Wd{GDK$*f^OC;jrD-;p<(C&dYs;c=DerM2%VDUpoCdf*W4|jPdc$zPj?B>gqRLUcCo|B7!1B zHpt}8=@_Y~!8#ma6tQ2PM@R@VTo586R-DJ=R|=eyT{#e^FUU!u?sf${xD9!m^0zn$Li{wxPF&3fZ{^;Fbgr3jyYH;%K z#*l|xGa=OB_?AcGUU<$qI@La5CP7srns*F5JEpQ4ji5<6r0sOweF}pFn!oH_1$i%7 zQJVe!<};6Gy>6*U?cOw5_-#`)XP%CUYecoQWnZ=0Pg|@}ys4~5q%jo1J7W>$0?H;q zTKW8wEALd-KNT@xsErFeCqFG9zU?ta=}v_(xa0EGU(dujP@ORm@M&hC#OpWTyBe{Em(5LJVJ6>^w$&0NAX|E+nGP`dyFvEPia=<22!}&S&gs@ z$5FTiaodNKJ35kwR@9KGzOx-%{i5;^0##(5 zE_wy&=VY8idDG1PvRb8K#vb3@`E}E6HLUmTIfN(0%$QqauCQS!rK{U?%-`!53w}Q} za6z1?YsYNLSFQ-B=6U2FIvb(bIzRvG_NqA`Brlhh{3dHC#jz^nnvuuYUOe71;widA zEF8gaFWTmjSP`U+FW$vHpyQumfC7(dVX%py+nFV9!=$jK`NX}1RZqyQBKB|m0rdo# zImu)KgE84kRd6zx;%~5eXXcHzOBw3-m4mg#ac>y)`{`R44@s;XQG!`HNXiAre6iFK zsFTN!re=E$64uVq<6tX?@fwo-icQ>X|c{I_2MI{r`^o)PHUR)UMoLExCoEDDq9TyLnNj}fE&6g3$&{ai*XuH~0A<+6{; zI}d!6zf6h1{A&aCo1&&Dj{5R=XDC&;!&N(k^*Tug;vC5@BXX%KYh~trlKrX8C@yfi zMo^^bTDp%C&)}f)woCBkXFP!0NVCWg_>kuvJ4S@|mMmglZ6KRfs<^$Kp9YheOlJ3F zOv>#PQWRRId_g%kKK%Ol<;!6)!n<%Vw1#LozdPtdec=O0N(~4zNji@&ht(o+&`+T# zl?qikM~=(-Vx63t?Z^k{x5U%dZDK*PKVc>EtpuAsy1nF76X5~$e)LxVCSLEFgA#$> zgM$#_TO+0I>I+X&?hE#1v#Oko&sUm{g#q$WQY)$wehQ%`4NvSV0F0HAG^fN!I7eHj z_AQuLmQ0+ENRt3#+WUwB0$469bp;*(kS>M6L?Ni3nCI>Nxw0Z8j~y~GbEma2+v*!_ z$lnOnhk1*Rg(FdH>sN#*!T7becMh(8Zu9^LZQ3HeC@L<3t5slvv|Zq2>G!UH&r=JX zi;J1$Ljmm`MQJSQ2*8T{9@7vGhpTdVxKvLy&g|;32=H{;0f4~4!=ZMno*t1%#Nk-1 zdWS150yyXT*8MaCuR#=_T3meOoZ6A!y{FN%HaLY82JBco9dWE8s8JYjBLc{*e*Si5 zK-XUn$r_@77X&gXg|t+<$4Uv)6{}L2<4F1j>(2V|qD6TpgwyU1ty2IeT8=y%7XKpK zIn!uVR(bIF6vfw;$H#Td;nVF2`)QnqBXgc6(|XoAIy&2A$z$_X9!5j3>8E`N>I+GB zmWB02rx3dgBD`r4?Rp+eE1;`D+! zW|v&VMNI^;LNDU;{qxCuTXy#JNVT?Yh#9%A2Ou0;r%-Ca{Woo9`jy5NhViziJzY+F z`lbDLxifcQW?%@LGwhoXMAWbuhzmtg8AL@ugEcAJ z@A~{=4?tAks`en<0Zsc|zh*7AM^tz8rBzrldvWsl4CD@vlHF<%$R-t^jr|;W`E%D=GAwRQ>di~r$(8FmBgF{i%C7JK}c}&Q_4D20+B$?3(0%ewI zIpV2n!P%Omx2lvN2s&7UyHB?v)Cpsq-M9JV{;kZ?<)u-#?3wX`7vwd>TQ!znW*39A zH!glYv?;pR?e+!7#+-Re%c1_+Up7w6!1U?+yFJ43_Y9P{i=x^_G73n2UoGptU>3YHrrNkRy>p)doCoJBQB zq5GgDWNJ0+98$dw9m}$r45rY!I>&ST4jg)XIleil41j|6d&JGLPezUli)}yEOs%Zm zgjXF-PfQ`ZyoTn?uli95INx6se({Y9L{J{sc%(^))_s2{GG|>HvM8){oA=zi_>w;0 z(Y1SC;9~|g3WJHfb#v`zcV{bhq{Hs9vvfM*wX-!?!**+e8&J3JuJaM#7GQb1hQ;Or z=}d-|q{9?+o=z*zopchX4~N)6@(6hEeUJEVHW!~=JPXN(@7pcz?kxMTCDuRNehcvy zKp{Esee}f#??oSfQ&SfQW7(D`5q80QUhsz0;S&^_I0i4M&bq_! z)7bT73}<=<`(PVtyvXIbOtt$#u9WHRx@o) zqJ7WM<0sTbx(^&{Z(;=W!$p z_|R4weLn?gPV>|@f8ZVy?h8!C8xM-6i+yelRzNS+sWTav)thU>Ka63|g5;!Orvad4 zDms}a8!DIU&%D`_%A`;un}VU>5rGd%UlG7!AqJ7<_~jo{mrQ^CB~aDY(CulXuTVL5 zQJy6a0k3zSraXL$%$P)DK|LBw1Tlg4;9sV)X4_{wQBQktkYjwNxz=6X*o2_>#upz< zk=7*FSp_O0%$n@PJTClB=J?1M(MbdUHvkIf3*b&S>~C+^;H<%N3^P~$O`vLM(OuQR z8_||Zg6JkLGJ~}4GX!7s(o>0lcMhpg{`}fwK3t<={~x(Xy)g=iFZ%n z<8NhRcCJvdqQRgzche%~H^_B=OE@pi#=QZ@atsYW0W$Zp#{G!diN(4vbgV}YfY&a( z@s1yo7_%6yXd#J(Cw)e72aK{!`xMDkiXnp>1Nggt{T={zb{lTu=Gv`IUDEwT9O$hm zHcvmDtsM8l>7m0@VV{0Hv@!qusTIuyMoz4%Ell7Y`v>C5POvSDSTMOi=M1oO3j2&Y zZSblJss%X5CCfpuFg9p3C|B2FU5(tUvt|H9f&EMAG@I5(kHpCuMU~6t6>0*$=w+Ms zDT)k*e1#HZF@UCY()T$4&N_YzLd`rzAWyBQFHDI$1cz>G4&(9o@%rZd!%O1ClR7=H z23)sL_C|Ylqf*2K-mQPv{?4n(6Ql)tes!`Mwwg*al<@RSV z<`pTty}AHG^N7Et{bg1>yX%n~4jpr=j~-ua+`igUO@>qiC24|m z0$_lY)BG2NJ9wISXTh-G9}xb68M?)cXIp>j~=&N5a+TM9%TjRVkI7+;L!Te zs@0$JT<`eJgLw0Ab91UY?~cG1Uu}u|I|(z7q_s=BYR?WD){P#&H$EFTcy6M3GpK4> zmkuKv-1Q&YoL81JnR>N?&0Lv(17J^08lw&hD}sNJfjuQjVE}O90YSRGOd4V}05s2} z_VhvqUkg7lj-g+E80Jo(^Av8{K<_+?b^2AuDwSHZYk#zv9qrI%A3xBcnE5xHSBbB_ zcvtJ6L_9m6nBtKgj3%k7JIm(mN>4{H?)52Faq}$#M|i^KSmpT6-ANxUS(hFdfX}Q; z|4ouL^`4Pr3MMKNiBS0pkjX$V9gzyc;4bdP|xV& zA3e;mEW#zbe)M?ys?C-E;6gjr3wgGxw3Sc88l?K11$%!o#a8dUA~=95Xmc}faXAQ$6?%MZPkN=Ig5 z{c?L>?o3-liym~+*3KU!;_u?V;KNVb6FVCZLMPm=ESIG^#W5PsHb{{PPur&eLDI5tj(dVE_2@Ig2KOs=( zITpSt9|?kv65AQgcU+g>`IE;10zK$7;o}FvjZfeH z-taRsxZquZ4WxN>IY*|n8`?wvCULgtb-Ab45Sx&xr^jviea@;YJAqx7X#!}9EqQ7D zQfq#Z*c%1yz#Sn7(LhU{;}QXp&_)y`g|Tf^c~oq{fgq`d88kSyM5V^ij0G%Q6GqTC zu^mpH5UD2uc^(zeTBm=+75MF*X6VsGma%!*_JJL=;R>NNaDMjI`yWGqMi1jwq-iC> zo>RNE=l=cW(btQ6FVuLWW)xKF8o$3kdGm+zN*@50=GbG;%>h&p3NGeEyaVkOD(!=ye!*0ymagHI|vt)#YXX>%yLy z+2O7)fT_XS`uH5z!lO;9MbSx=*zAZXGEVA^;WR%RGPRA_jn2{#jK@5ft5YRmH&VWqx1VvE*^cd{)%GayQ;Pur%k-Id;f}LdEy62MJq{ ze+qCje2V~_E$lCY`)JpfYj0(xtpXqfFwq}za90bGz)jaBkcU2>^DX5+os&^`4??}fSr`}qe-VgS1*}wzm#JJDp`t6>zFDeEXCN_|#7$y6M{PW3f9c0sW<%PguA z(-jZAz(!F`0@zdp`=azk6T{>Qth`*|1yTrtXX9#RX;gZPw%>8%18D*;5*ot3ogjFo zOv7eDyu^p^IqDhGr@$Wzb=G9~^c0cC{^J8k@^jcCM-|v5m zApBYh2-McT&n=vhw>i!eh`ZW-(ST}UWex}IqNdgG<9BPfGMPp;KWoWAR^AH$sJX3~lvheIOwM`-3N$(q$Q_Ss0`;89(G-q> z{}%wqaefnQBX+AkowDUDok&m(h@zR0{I_4Qr*tefMoQy=TQpIn8m*7Tl?`lZ3;+ur z6)T}?R3?VpG)-%@M1EY&7@{&g!Hg^AdLVm4;EsLNu23_kLNUiE^9lt`;}S51#G*I! ztWtDJ{-prz1716sfzsw_Bt&FjL!@xR%Tsc}_j(Ljx1Y8LDzj>2{qgYB=Bc%B;vfuX zXX79JpBVUD55n1?1s%Ln96Z#7?T-!xerB=a!~Q*>;;9{y$=e!=d=t(QpP|e`X|=<; zWxZsx>{rH>D*ZqnR0Kuap8Ni7i7x$!2;5&)~ z(5Fy1@IF&MpC>Q_(bwpf(lsKDiz%Z%oCIYO+Kv^?JIjcYkh)`^bA!K^(q=|f2k6#r zd)(5$Yu`~mxUefUBWiB`tjv!r{^uh2Ob-sMTWTb{*057hA6Rw_Z5n4)rB$>u>-E4K z&1VH>WQoNHh(~S~6Tr7VeNz0dz?Z;XrXmf|SOhU4idr1JafG!EXGIGve` zji+enYVYRy4^;!y=DPYIZd}$A@<2bLUu~>{q0jzf2k-zRY76ii&xgW#dMBQz40TFX zuni)-*_0Me^Zae0<~dB&@i?$ln_Y_sChdMfQn=@le^7QMTxo1c_{_eZnK?6aW;y3V z)6nbzyMcygX|}M-A}R`^0#SkjiWr!vL=m^=zAu?*j8S7^OeXUary4Y~Z=Vm4hj4Gz zt^3tib$R_HyH;__dO$M*8d*s`FOuaYj6dNaJQ*9D`T_;s)Im4A%e%N3n7FacS50~o zrId+8BAHB5Z-^yo3~=uN(VQGxYI1?g#+6kfiUs@mThbGgjxX(hb;&LX2j7io?d+fr zBGfVdevQxaFVZ90**CZa1^&NG@a>mbT)er0A6r-S)rcdqaDi=D<$j%38%FAlLy`88 z3X+j*P$L}%4+zG_H~}ooDqG}lMx>B4o%^S$Z(NP>e9n^RoKUmoXcJitgU!yOUz{WU zXwPvx5UyMt))+S_<3K1y@GeQnrID4{liC0N`9gE`vnW_P8s@ z^07aW+U~X^?`$fc=^MS;wlRWmUNQ4&SZl3+`~S)S9u%4Wa~@ayStm4YjQfl<-RGWj z^G9$B=@*aBy1POCg7BekSs(zuR1z0*LD^sygdAiOvGJDe05Bq#q(sWRWj?ReXhdT} zHa1#=WQklC%WVZ|`x7bRoI$=ms>XwaMyXU<7+NN|bLQ1eU>wAeW%3a$Sinc#arMP~fS zr``8vuFM*vYixK&MeVsH)3_Sd7Ck%9wDyH&{?`q&W5WyJ0l#@zurPdM7PQFkJd|(F z8h$tnh)q^@Mr-DC1OWy%N;fE5+yw`i-WvwhFSa-bl#X4Czuzqf~eFcx~H+6>?x>taqX)>4CMZ2h@6*Mr+pe34i+4vY#~T_30S5nX?0Kp9Mq4_~#JvtGJxoQHtCBXqgH^B$m(YqHG?wf8eRNXV_d0qPbBK~33 z>+5)N=}Ksa^|`zc!xumGjX3>3_@5#;^7z_u#;d^4#*hD329(Ef&Fi&+FQ*YEN7MS1 z1J+$P@Ly@&NFY7cDS8fb55s~g8540Tz?9XGi)k`e<1+tJ1>JBCklaIr8F&>!S&0XW z7Mo4a<$eUbPiVqyb;H>IO5ZFBo!OXe9$vp2(raWSq97GEF%FPm4JfQID5h>gH5>F3 z;#<5y!#MHD<@Bm>j$3=i7d@groZwyIF2s@wV?J6;e zs0E2=Swf*YO~}k4tKO!szAS;Jb*9o$kaVrIxW3?eTf@2U&hRf>iL|<2CL)k!?C^n z4Yc(0|49S>G+M@wG-!@@_ zvd!z{_+J!)cVdvuMH~nv6viR_8Le#a;(Epu1>FOfK(hgi9$wRyQL7}{Oj1m>;*wiv z0y+y>;LD~W5XmH%%#BJM9cVW1qZpnVLo4(li<3GNIfD=u*Mzu@b$K)YXEz|SkY zB56CIDL5=IdF+O9Z~=F0ZucO~kN%ec;F<99k)rocZ&Pg}+ZJbt642!M z8eT->904p{7w)YGU>(YH*Ii5gi0gz9CR2~gxN7DGjB+;a%u3D#a7UcT(ZGQEFmi=k z)*_dOw!T|`tknv_R@CxH{3a={0uSa0%Q-?PB6xGYQihBHPcV^MMxT>hUrjHUaP@&e z!p2K7G4{2E`eMsd&@LP;WA88UY0-sD3ZHVcF=8K8gF+l*@zdo05CT7{Ama+Off>J% zxyYxq2UJOJ5>4W75!tt@9Eh04h4&2~4wy)3tI2clgiqDQLYS6iGb*=WJhhIS{-XWl#Tz8AS{a?H`yBidmC{$)J% z=Yw9J?MMGZ08qG}#M?tAyV7D|l*av<{6wc+dnr%lj;Hs7!E(8xgz&q^xI`#0c`=w& z3}T-HS*}Mb5}8Oz+o&*#+GI*iWhyDBn&vaiT{G4Zs@JZc6vkX+z&_JG^7PQz+6Kt& z@#yt7kBvM}f&&PpC4|D1-a z&%PV!Zkv7XAL&%@NMdnWFAfcM ze%hfJoejOLhbHQ_mIq+PMR`mdPY8u&x3Jmvf_^4;2hvw2f;29hLnh^!rpSw0yq;xp?$uQ0NsR7#%??y>!f#Xm=k zQ#(KUZvn7L;YTcWghE#w7~5!SZquWM?qs*KQx#SiwM?@}6x zMk$o_?R(yAt$Jq^I{%=%y|Atua5o}Xo=!y~jZ^BMBJp7>|uPU7+nE3=4p_>o#(!&r0I6nQRZDT*S8=13RtzKzzGc$9{#k36L* zGspsP004$^nWzRy*)W(u%K!ST(c{cjzOFZ>y zW_wflpS8eGqa^+&flvNl7Q3rB=1Wzd<=+v)==E>RjAQ zc*igaXFb>t(>#%v7?}0tS+0cSOitfG$zyV_9xRUq@2ccYmUMgG`{bk}&s1z4{sv9T zPR|aHGZ&Uh`CYB%ip`O=Dc&ukH=m<(s2{)uCTBLmwMp*VMdF5A8IObbYyzAhOU4C- zf{=5E@@W_57tar>aC=(*Zl*Bb)_u&_20!*H{At`Y_nrS(1xV0L@1Oe=>8Rg6qkVNn z^zFQK3A;y1v8#Dn+nN7LxCE*RTdfN2rjZw^b65>AOc7+O2rJhcmb0@njY*$?{a)nm z-8*bHj?NiNBAl&wR+&9tT;8+n(U29LZmepncvMBvg$G2W!K$y5W@r=LRZP2({wgd1 z(7Wo1@q2L$F;JCLWL?t%Q|JHyDHM@jxYXJW*jZru@ObISu)lvf^jvg67rMKjsNzF3 zgh1~K+WPK)tOCOL;X6fOZ)nv{izAa_$Do|r#?KHYSUu1#5D$#IB*=1#k8=UsFhNyL zx=M{35a~_jhLM{tP%|KBwO}E!4}OW zA78r`YFuS7#fnk`nZC(42VH6Hu%goaeg}FlPpna4xXOc?sG==ZJ9fE(@A2 z%tJ4ahJrM%HC{<=m@2UDpY;WOvzX1_k!Q+eQBR$HK4|}}+DN^^*Jj6j@e)D}?wvPD zgCz$JxM{KqKvJnAH03-m-AJHNzF&fl6I2z7@1sGjyc}I)t_yF1YufzKpK>!8?GY^= z8(eu@_osaay88D;;Sb9%2Q-7)PH)1!98fC-eQn-Yu^pdBf{s<=s~1Y;eWR}flxP;6 zjCb5S0Hy*b9R!)3Kw~lh1i>wj$3be*(_-a+Cm=tM5EeA9+@jUdhEiDhI0ppOP#A@OWnPknZ#h?&lnJ30j zh;G&8jVaNJK>o$z=9Gr0K10`GKQ^#+YPPdk76&Cba<_s9*R-MRA1nL zm|Ywb<7%&h<{7{B?{eTJT627w-X9dcwbJc@NV~urtF_}hh_AkwezqjJlziQCpvJ-o zMQ;eKY5aJrXkC_!$Li4c0|`sWVdnD|_8j>PTnD%XBsX?HUjEz@X;-cuo~Efm4DV%c zNHb$r3j-^U&+J{=?Go1|4;s$lP04Z=mB{%WTMgB7XOIjCqLh^^ivZ1JgKE z#9TbIy3msKyn5R{yK`oh;C-{+L8-Cl!}jq<`?#UIe=lX^$$tKCDbT>F;05_XZs$u| zPo&46tz+8$Xn5n8uSkj1IZ0O$`1Y*WOFVJ%=PU_S?$BoVb~xS7gosAk*o=uHzm z=LGKoD7kz({~<8iYvgN=GhnxSS{S~o5S0F{w5wP3VRAj7=9b@T=ZoElH}R4eDpsp{ z^9he7IA}bZcQU1j1Lpt^Viu-xF6(H`3gfh*(jr;b89jbUdUovd)o8wbGAj7 z9XF+M|KPu&!Jh=s+mSzS;781&XHmoS^)3(APkL|-5{fhZBXG8v%QYPUKipt1s$h_T z>)V0x_x9(PS0O|R4z{SQ*Y;i^&QJ0AM0{UKLKzBg;vYDe0( zL>FR>dKoJhZ9>Mj;xKBp1F9kU>}4MQzNG8ynkjKj6V_~sTghbDV&S@_L>Za$z=aR? za}VI*IHvv^QlOcJ6`?_&I4toEqxX4ymRXy)KO*;ELgy2KT;b z!&kBv<2(v#WN0Vk^rd=E0|Vuo$4Brp&K)tr8B)^$oJ>@DDmGwYHP#~y&U<`qcpDs< z=cNqmz=}q{7$-jBtAF~=zYzf`gx*lx#QpZ`2(7oS)XerPDjK0|=Sl91nl^Sj+SrZb;4c9H0 zuyLno%}hj7dZ3`Zx&zbAkO|Gvp|iGbCYTA5D~ za7M7}R3Qh)@veq+AcFL5rz={i8iHPw7fCGXd5o(`BoKSMbR`Q$$(HjifQLl2DQ7~@ zmHt(ROePz5=jee0z@{v5dAg!F`o-c6DsaDWnA4amzHunWzEQ@-5lA7i;9bkvoi<|du#2(GUN z1B&sX;H*xP6Q|OWh_6QxRBGqUKm1oa;N>Ciy2N+FM&@`@J@2UcvZi)C!_%!>w4G{T z7xRVXl=9<3I&v z+Edc2kx>V$?${O>A0NPfX-gr;K;*MJ!{0gFx&141PDFv^sY;dcFtu}DLl4FSWKD=} zP>F)vTtz3aA`t&(*OjOT;6`CsjU9|w?Q z`t?lrkT_C2?vtE3+zp?ydt}$3y4DTYMTJ5EQ&QRJ#1um8IM{EA-Zne_wp~<|DZc{t zCG`@;PDr+V<3wM>AECNFYjb@(UgxLw`3Md1r|pjE&cyigWKJ^E-`TI-cJfLyy?^Ad zrmeA6$`tzRJK@-BJyFbB@O8u5|B8JGEh zhR$=E2N1;N8CM0KpC@^MU2!_fnGqt3pU*m&b&SCRk0qRGhDGg$g|8Ezz3A!dMeUE4Ov}c}Sr7r|5k8@*PtZx#+RH+oUoDnqf0L}?@bSKJlvw#lFX`YIrqOh<8 z4XbcnKIcr9pU$x1o!K3H#&3;#973u4V7}Ln;kH?v_5ITx_+BRxcKs=(2#z0UID~UeHybOEv zL_0qe4C@>+@7md9o>g4!?Z4PG{^L>cFSd};{=TdCePnoR+gt6mc^hLXT!@6r7mxde zE~IZ64^#swfXh8*S&R2&mSnVXb4Tg*RkOLuWk80E@A8`4KO}5e0&1Cs)&%V9Px(FD z#;$#V6HW0@2~(-0$^zeG*N9S+{K=ka-4qWt%q?7e&bTkuz2H0E3WjB}4P9MeYK8!8 zhAgSK&=!3a#9_5U-ZUCXC$S8^=dzD}0`d{`qp$~&Qsu=lm18Kq`tCEX`x19qIw|k7 zEn(lsC;M`H@221v|9B$K4k|o;{Dp5?(-(1{qz2tVbEl##*IlT!5pfZjA=85WO{lTj zL`iRJ(UC^fKmcGLZkoGt`FRMQfibZC>4VVJa?r3WwW~g~w@;4@MChh6hTL@!(W#e3 zJM)3b{H0E}XzX93QIjm(L@yrL@15?nk4iNOT?ScJN{~%jgbrOBg0VQy_;bIW% z*AO;m@(wB_4xA)Z!<4DQLL}|V7(9yYbTAxGoft+^^V?tSc$pcnlK*&C{{26#;&Bmv zxN6MJ*vXe!S0b42dJ;A9uSc~yHNiXSkO1x#uSh~QZpQpfllNr$sq;qMm31|4Ab|r~ zNqkp%H+5r_7|bLY>3{b4)rhgPCuMy&1glR^s|pJ_iG@(=>}{!@>1W!F))6TzBwTQG zdTsxeu~V9!-#JM+kdx525(?rF3L6^PtSf%&OzM>~jtlg)o13^94&ol5mWac6~G<56^IkPqF&^`~Oe~wWEb+&lj~pekuziN1kV01FhRSF9!!@J{IjbhOs zpDoe{x|PCG#AkfvRT($=KmL0PD83(9pH=WbPHRR-iMIW>u3KhAYdzwpRSJ~|G%yim zB{B~11fb-=1}UP6SWI6b6J|@!VzbcZEN4Me`_~gtM#N$4&B?$18M+U6USnKJ-R(Yve~f}ELvOK|6Kqv~9-|2W*zeB~93gQr&;mx5 z2<{0MV63P9<5&Gf*U-jDUt!TcZ+xf2{W}Wp>W}`O0=#K_b{%J~r)?4b^wuAjtqn}k z6WYPjz1^3`8tC|C8%@h$kS6PJpo<2Ii$x+aQOQ{-cldOkn;*m8xOST^Xo2^)wsQ|o zQEHK&TN3A`I*W!c7C+gtj4VnW#_pb_yU@em|6MR}zwBniEMwb&n!scLXIrREmY@Mu zgMm3a;~dbOU8^q>3`5(1sH{4KgKYZEjFxbDF}r<4)w61(ayao%O5l5sCnQ?AP7#(J z%x^DkXeO!b*arS0gsoq6xBCa{H$~Z4?5pBe0-AZ>Vs=-!Q(wk;l7j?Q^mVvNpNsLuejZ*kVa^*9SM{Npz(3)9UQWcCBk@2*`F{jOc zTKl`Jf(Fpy_MbYR#Wo!I-sN@8q~FEPD2@jO$7)5NW;|GbU88_RlkSqOc zE+2Pqsf739ZmXOu)=X6KE<5#g)zN(fv{Inu(m%WEc(pjZ;Sf9cj#PxeR`zH5B5P0i zkH6{X#}F9&{BNu12^UM5O=N{F)x$1lxC&0US+a5NAl+st>p5}MlE)8gqz_e3&PylI zr(HC-$RiPufYslt*%7U+w`~MRjCtT|pj>>?hzT`f{~&bhj?VThMl zdcOHhgY!EZqo=}tJQCXSGm#uIJ^YnMcG>IeQ+b>$C(NX;W&?n`i!V(kGwWk*7MKRCMN5fu3nU{* zUN&lwEH49LUrC-P-W+ynb1v(sRLnonWsHWW_=#u0d;G({<-lMWKcaC@ZH-xR^i1+Q z>h8}2S4l#1IAYA_xrPS;;vSW5^m_VX@c~?u>Z}}#*U3`Z!*E}1@XVJ(Hy38JDHJ5x zn*84U3AF2qC8t78Z`qtVJ~gfGTzY~gokgpik*NE$BOXy3rooo!f@(2`5YzRI86kPQ z;Xzf^P1mL`=ceLnCj9bF?*Tu|)o-h|%Hk$=$){ z&bq5%2*-!Y!qdpJC-!IBCm%jc&#&_Nd1axXIa@kMXkB3jyG@JE56FB+Y|T0VK0v|0 zH#p=QqOjS%na@v_mb+CNQ2^gK%yc|0sQD^~EQ^q|vjkq_M|vR=!Xl~4V+hMn;_@hR zQLOc4wsCSY=B!gLgGJ9dzy@eGjlq8U92##XST1fu*wVf%yLe+wABpgY->dJ;c(yu^ zRl0ZIEWZDPbn|Zxh<*`3lRfgsMsMn^%%~J@7}MwGC*SzP1-5OVZQisQq~}}vjIPL$ zi!@sZi|qkBz=34FN|h#@rFtxcl1?YLbLCli!y76kx!=!iodwhEo6NT2RfjvsXm%J{ zs{ZKMS1b8O5C0W|t=kp-qXlM1BZBre0imxig9COe%JV7eZSH!xug&dsBCfnFMJGzJ z^U&^uoHA!wJ;2riYz4wb)w1ZkN+^jY^ub+|MY&j%r)Sr-M$$@ljbb9Brx5Tx?jQWH zf+m0b*CfE-H0p-5D}x8(T;PLhrxx=npZy_DV(Gv)g$%nHB`tJo<0}(QRx)^+W9sig z$tjO%$YeH~sTwDHIkQ6(NoeeHnULgLtf9HAUoF&h;tFZvD5DmUh6DJY4wyamnd82m zYtgA{pReld%O4)^hy*%88Qo)-v76E6b8nJsElq$zh)(!OiYk&Ym?>t`KY;5(GvN^D z?S!Vq2WK=}a^9JVNt-i0doeO%_It3G49Ye;m zw{M3~bS``JS=;WdF0;MeWW7PwT{ap3K~FQ;M&cxf;G@}_s@~HClbJJQ%;7RsERx}1 zq7hDyaxFS+dscWO zIxzMX);*p})rPqaZ4hT|+(DoTa3}Dn)0L=&4JLyRPFtw*ScR&|D-77qz+DxN7i&(G zO^}VOp628cCsN9>ggcgXVA1mI=@YFd7<9#6`|Xa4&Y)^wR;hhX|M0I#;BaW*;uJ5q zjejK2&DEOG_~DNOeK8w-`naFbgRU^yn&xx*gE51*$r9JqXy}l>gH=^k51PQ+Ecx@jOci| zD=;hfTcndcJ$;|;y^}(jQmDJaLTG9#6pBvO)2FAW$A_n@=EN99xxoq9+bY*81{dhV z5NdFg4pCXDa(s{j&^eP0li2PSq_4-0*miAUat2PH{jV{8`)mQqemqWo`|GjzH?szX ze;ud&S`CuGb*fY^c2tVC811>}>OH%>Jkw~J_P1i5tpMFuZfAhhRMuW;^2l|E9qHRZAH2sJ$m#_O6~vnCjDZoZ*7EG zeenXm)sWl!^Pbi3=@@;nQ*glbM;*)*Xu>+++?8NS_~h$DlYyn!u_ARFqbe{o3=f2n zO^n?zHjl?ldN>EzavYSLX20a?UN-#cfI?gqeGWX+YC_B1Z)kk|2rs|;ng)J0V5Jlv zG2Bc|e=;kUj=~1R7nR~gomid!CSa3Ya-xT0y;cII*lH%jIo=aTcg$)flgU)7ra5+% zG*HD_xLh;=%9Qq-F1TKDw}VQ^4&Z`<3Q=?ult4XxAr?vOon4RM@|kTHKJS|%c7Yj3 zb~4u*iFkVPC>eb@XZ0VR&So1_F$Q!Zug8+fx}ls%kmU9C^_y^_NEvDrJ4aS3l?>dN z8gB>=j+)U(QY~6+X2vr}gi23tL+aczR);1EM{gmWY#7pxr$=I=bK}yl7?pR6Uq5~*hkj@Lv%|R8GZ3bY zuZN9kh_mZrVh%;$9c?}8Qk`ezA)ef|>x_esVd){)t#W_|au$kzSb{V@cGyR7@v>fn_uJlqK^Nl5r{K{>`^kP?Ustf+LYBm@fO6RH<*vJ+XtLtri zb)Xy9_H22M+y?&_d32Mvxj7MahN8($BtMb+5}cDwY&iDvj%uPgg;jG4RHXue0NXPg za%Mq<`LbTVsxKUhC7tf;lbYXj&9?KMMtW>uWo|_J$@uU!f#3J=77zA%wT;Tadc1e# z@XPGn<`7emjO{IVJ!&fvX_v`nsg6N6u6jR^nQ9_2fnukJ6a`UPWBu0WuG%$AvT5iA z?8cI4SCBG3>*99%qi5gPzxc`?<&M5%Wu&){Fa4uk`snc=y0v=0b;y^tR6TEBZMSL8 zj$afmXny3GVqkmWV)osbA?Tgk+uPfPIwWRUG>2;>$&!hfRxM4IS}bYPHDJxtjIQ5&|lh-RMjV0WKc4NXFhftu^eI&Em7Wvpci1Wwy`k3|>H*fS0RqktTTQ z9YU{CBZ^26unX9*_ugVOCT`ShUh*gI`M_-7Jx}BFy$Rg!$7$cG>4DC*>bjq9gco)# z=t@h#2I|PXvInT>q%DBd!PER5g1>l%7~=29qD@2FWTu4F^>cF$Mc20Vbf&#?haW0 zywo%HLdur154@Y{SSUv3BjuuOUaeM_m-t|_&Sf&0(KC5TQZ{=CV*Gj#1OFq=(^jH3 zw|hHJjY>C@+E+o`<~4``7(GfAx*= zy!@AigMgzvKd=5Q`wRStxcIbKU*)51d(G`$L+5WpP}M6!ReyB~cw%ZUO3j9j zl59F$Fw&EKlatF5;`S^hCEZ^Al^+=oy3-!-zr=LFxN^{jyd2u9%rm6iWBTozu;0RYJGdUw(SP{@fS1)68MKc7 zNSfQw>Er`yKJc71Y&+I8iKM2~^8a7~Un-df)RM0|3w_WFFgma2`8XZ2$s&s@Ufv zZA^Z(O$!WnYu?@R6V@oR!V-lfP&G8o5-3XC?*L@DpClMfrqmDO5YT`fSj%R!rC!%> z@gJJZIfprwlH9J^rLS4TVyTMm_xq+op!^V0)wn$v%49Nex0&Y5J_T;FE_l_V z*-|c}cY!m{yE+`mhODI+{Ym6KSwZU2o8#8Gx ze+o((EX8*K?o-ed)_Wo#X~jJS*3mb3_iRm5RaPLi$YgG79_(N031u&0{dvAdSh#PV zokspn(>z`Ej9te>6?nL5kzx8KpPJXm1Z>Xk}j9UP)5{#Uvum`?g)by5DX1v@5xE; z#JuwpCFpHunu?KCbLt{AD;6e&{f1@%Re>b}*C;jizzvolHR9N zlCF;VUYa>Q0SsU*_sCdrBKif7MvN|W*oYDksK-hmpDvJmm+UWpkrgd`v*n!!szvw- z*c?!kT2YF_rHBW6X!1cgf5@%~#itMg8Jtd!`X$F=5qKcodOe(css#W-AQODFMQi); zvBo;yS&jT5qYDr)8j61@y6Uobu?O%3K{3eATNnUoO!5>srC<#vCZ2Ydps#ymTWs9; zNFHr&!kGFkhr+yMyh<6V^u%a?XFR_5T?7i4H-Y-cCpStqTt+jNYS04w}zwQT{0TwWm2?c?+ z`(Zng1ri62C8NU;))-{~K=En3bgJx!H|>qcWamZjzFiJ;r}jEhRwI+BN^4SA{Wo0Z z$n)(jE;zapD0+FiwPUG5aYG-p7`Ij>bdmS(W>CW<)vmgKvk_5@&|!fMEv$O*3ho*k zLS~*O6UhH6w2dL#7Xjhh@WwM#Z8f@Ya1@Ki{trC(5R3;M<|6ud!Wzfvv%}%gBp^h- zu*#vc{x5LMO z8I2}wYb%B9Ut{I9k!y{?GL(gP1tlBUIaq?cu%md&;{o>-&x>J)!_^lO7bEJHU$7xh zY)RCI+QEAL^owBjTE0L_N*l=|cQ$(!npSSv2cL!C&EPNTpZtSDWx^&newv9n-!Mhf zGcZBge`--t%<#eHhn@7CT~wZr0D;ikxbv)jEyZ57Y>_3)YdMnd+W{V|gV z&poK`jt8M<1&Rps`F!#XpWiU39hUHu18IP|%h2)8RV>OhS=R$+EoFoVibGZgO(;*5 z!63B!GWo_Qts-lbymeSt1%f-8&RG!bUz9qY_5?NO1U@)o7X2N7=Am9ND}BC$J7^M0 zdN9kz(}F^<_o+NA!D(EH!7`_}Mf+rtmfEYE^i_KZ!))axiviv@?0|#2j2^xb$YJ^D z)z?4^8Y~)30x}q`he^5NFv{a01LZ`PfRu0$(#eI`ETcjNkzAeD)SLfumUNa!&d zbYE^eL4R5ooA@?klD)D`QCjVXG+$#*SPbDXa2LGGQpsaPD)(s!5Gflp2G9;=AW%&6 z^DkC0HDIm#U+Hq2b@jDxFlf#yKT?8_HhDGZd)9RNB$)vHyDR)F>?X4=STh}x0>5C8 zxxMrCy7*eaQJh2Q302r|tNEjc`!|-P;4n$eD zLK{X5;L@0#G-u-wIkBiOeu-t5KqT}yNhLpQ+u|9tQ^#AY*d^6q(q>b@{++2z#TIpI z^DI6Mk*5Skw9l<2Nm9#mKzC?m`>^xf^+}at2jSb$5-R}VWA?M7vJDF~^=Lb0m>>(Zx#VJZucgYad9k-Cv^v_v=84c4VgQG=Z-OM}m5y8g+Pnyk|U$YWW zq=tK%^m+B z@^`!AHXI+_aJY~HDt>jGz+eJdi|4cO9ELEEV`#=>hO=8B^$C3;fr;73Up*+KIfL3B z5)6qXp3&P^@D*DWx4Fy!K-H(^=0gLpM z`?`}J5p+K%?asdkME(@*uwQ1Y{y{&TRyW2{axYWj4~hssbAZ-m8%_kfr{*3*But?KTdn921DCgv|!-Fi)!F|!5K>!KpKGH zPsfuZ+zyEts zlxBNO#C@;zg3#?>=jlgod}`1)#e_(LO!C$_*4-Vl=e?I-@LYxajFb>Cg24dLqt6}W zT_&@%9|$@=7t9(UI6r^dc~Jrn22rWhDT&8}LGM}=48KPR81mf}D6H#fq>0l<& z^`6HvHUbGme0UEHydCgaz>Gjpl8kUmBe;rT;7w!Eg~$=<%w76AFDCs#>knIx?q&pP zJIE?wz4cb#ejI$%R6+B94~ze{8Y^`3D}s-wKKaLEN%L$&zLDL5oGdK(8f5b+aLjBr z$`*ocQ8=Lj_J1Ivbce;zB1=}uqpQu?EE0Tv>0M*`Vj3Qk4-hnNoVo)*AQqX0=ua@Z zwvy)^(mD_*@Mlr8#K0f-R!l^&!YF;OB~m6yTnj?~{yjl#FQK$>?Bbvy)XJQ&SxBdA zOqbrl%@$EMU=3?P+ETV-R~8w_No>;4<^%X641+U*e!SG>^9joraF~SwvFS{B75%#J zPi+V&%lhhc^{3xcW0D`X*3AU-`p*6g`+Cll%E;p8apx9Euld(&Llr;B0O)GFo&2(k zFSAmgq;3LV)F4|2`cBMaH21UZhvMs;y6KX$Gz~i<8;GW-A*ijxGTxwjC2x!7`{79K zbPtkwmVGxUQ55KkbM&9vJTMu>K@B9gVMPN@huo;H)M)6;yvR-LLU*7$a5@hH3uYh< z-$Fm(BXJw+Md+JlZ*8RIsqH6(4U;^K^7<nI-Sw^&V;#h8#?J<*Qs~=7Nb!sW-gW%02j_2)m=)>05FstyG z$YCcfK1?Xd9E{7f@{!&%qpbc+3=Vkkt^rh<26oWR7*>G!qu|g{)O-s7XRIv-GK&6% zOwQ_qsuyNQ2z>73y-&*7IEn4zPcUC=8n#!)Ci`Ii8YI_{Km`Iw8wB{OSEGT2A>f1r z$ehMp-VNeNE}x#lSsD91hJ!a5bR~V>l17!bF>S8Mqz$_zXEp8(HghY*jMNAJo*o~x zeifulOmT|R94$X{HV3S(ZRWNS_CHRoSCn=i+|U#_k$bGnQ3X6#xTM_q8pctY;ca1~ z1||}+_5(;l1Eq1N4ie%X&kQiabc-%7VlsEdwoPgAJgzOGlcI=eo8jq6`ED|(paL{> z{uXCIM3o;XLO19@4kIRabccXIY1)z+??A8Xghpg%OB)=@gmi|irE~%NEI8kIwO~f( z(GWgqYKh%BxLewL=KR4}Saw?x0`zp+Rpf<00A&y_#+jC4PkWKqr0-ZiwRYZKwAIZPRgFZSP(BWasf>QljoPbwo0|3;P0_9PNtSA(14G@dXi~|aQ-VQ3ipvia` zr{p{Y1TLlzZ+4t~poZ??KsP-N_iRT$m&0K5!97R>Kp?;{)VJ!ImQ;@AaBU4A0bkpz zo%LVRmW)vHC6YzpTC^{ro4qc$A#tvzg+KmBi45njdd9OLZ{C#hL(C82v(#zl;M{ZX z)@{(=4T)S7!?j2Am)aEqD-gQ`2sE!r>V$B#1wd6u|->oUqR5bQg#R z4#rzAJbegn5_qSZ4xg~zKnuGOeg`znNGWRgU=;v}6br}SzjEtCaJTkX{jX`or)$Na zRCYeVB?a!7aMKd>X(+D;9KrAOyZlaY<&)2zs7S1Q64vC}b}@gvuHHJO{8KH8$H7m( zOcGiQ;}E&app9%6ay%BB1!IJpHP*e9)e}3^!Na^zDHd}Yj5j(&&W=bD=V9bBMiQ)6 zy$_tV4S*2>3yQs&wgzYeFw>@;R?h`4bUNV`rVjy4(5o-haK^IMVHOOmVGJAs>@CyV zCQw9WHjl)c40{HG3-ILYY?{?zs!pvgufWbq4(%_JsHN&nc=J2%-~Xdl+WYPO$PaVX zEMpVWA(p8*IH3Iq>|l<^BA>cJQIg7G-RNAX!9^Q zL!nlQx5gUKs^JsKfY&9Wwj1!`2>5?s3(Vx;>DyyM65Y^z`hj169Nc%9QeuC18vrka zscm4PiCrAyVm0s!IE7W1cMi5R*dPPEp(vwVXo!Q&Af-iP( z{UODay=BVPvs;xlg?CmJaFBvdL;5;hMF61i6i|pFFtS#oFlffHRY)#plp}lt(=?z> z3x+1XRq}N$6@{!nI0G~tES7WL9C#q9)iKjY)Ocvm4Egz==P9h(3Z#AFAAQ0vnhH*1R4R*znauNq*%BthE~J~W-@T| z8UX-&d!C`PF)tu2{QVKdp54Zpy`?kHR02n8@SlsNRc2Hz&af!N6h6#$i}+cV;6u1q zl~VZN{BZ!l3nwV22>0&YG^$?u1O|%2@3%znBZ+k%FFRJk6CulX4 zbb9m^)K{n0g|zeVU3~q_oY>Aw#db_v$tv{bWA_du$NxcpUfW69VWA{cl!*3(Y>xXm zdm5MYx=i)mbqG}3?Rsy>4hV$uxmsZv!}0x--qje2{)5cx^pq28M1+9X7@q=mK0YDT3YGD9BXLdjeZs6?j#m}nb zFk@}Fw_n%-fWwxF-TSBeTl?Hp5qs4M8t_pMPde+(%(<(;0g;Z+8lhj|(io0&Z&_Z^ zTJu4YG)tO)4Z&UTA6n3-W36j&sF$CUhD74gx!bH`MZgMgr20`NHv^-OLUucdRS?hZ z)^JE!rE0cItiY;q`k^}s&CZ8P?LKzel5pzaQGuMAAwU2=N@Vqs7mE(pJ|A%T3jlLl z4|MNlpdAeO2M3HFG-iN2Etdd<0yqIQA-V`8tUag@u)jBrdW6IbBcq77Z{~beGCuKtj_lj@JtG8n}U=j-hLn%{DC#%jz<4 z0MQ3$hD@(Kqi z_nSB@I==4vHysGhu!--7@;TBR;zlW)k*}GvTY^37Y1(z^p8`NBJ2)2b9nau7cW#+e zs}&ZxZ})ebqE4<5b#guV*s4AL=?n`Af)IWbEE}+?z`#@!di#*Tgv1(=8aT0z3c+ zfE0)qKdNpu`=*Z(i>!Pqs~hVNj;szez&{=Pg=o&ivn(ae)#am$gmzvfAB~s)(O%Rs z#DL!rZ0OTR6bL&aW|^&nz!S*0ZMfTO%Xm@7-bT3dwnAYS!?d-JTW1?h@hIxh7zGo|UOY=@>-#Dwqlut= zkfV(dBvYHv-0G>n za6+s(={4j%nEgLo{o-Hes0l1;rVHk%S!eHOoBZrHI}1bEDVO!cYWL}@UK@&sB#|k| zgb1khiqdy^%Q(5(6g^*y_q$NT77Kc`ps6*LJ(EM>cn=iwI1I)IsPuD|oZk;m`>y>W zrn{}J^dhxks;$y<(bQ@@9-y^-gIUcT-Ov@O=0#NvBuqaii5L7Nx_n~5FHuOij zR0UBJBlFZoM8sfdNgn3SAhKU7R+4Tzr~neKg12h|wnei~Y8L2oEU%RVZV=NE5&Y=i zCTPfikc^%(^NBgm99<(XXB`hG62-Ogq)7O|rL^0Ucm^Wb@Rh-FcQlx9=CGW0nMKsD z@6VLbIzEh?b8){(X| z@B4Uq0wuLp2g;aPEO*|IKOE|GFM6Q;A$zhLFm02~QspX)J%x>OOXc{~hnIe7qqO!V zdOS&ck$?u|d>s($Ow6~+Akz_tybqlpsAmi&=rD2x&^(!h1UyQKoD*y{mElEN#a<2jUDOWRobeM?p@P+UKMtmpgyKpY7{9!?(u zhaiUo07)$g(Ge0`&J|d!=MDDoz#=qoi=mbJG_?VHsd|kXh)zQ8FaXXW1T;P0-5*Hn zrKJ(m+-`w%xm1fLA}3wN^hX1L0J4sxKgx?%+3*V#hv`}o|FGH6qeKAA8++xbLw7)> zij0a_u*eBpl6PWST%=vYwaaU>@CkV{j})Fi)&sRAU`mqGm_?g(w|tEVfkv#eB#B}XT2fu7Iv2OZ1^jUx0Eijb zsO?oeBFW4`qXyjc4JhSdo^~k_8D*2EN$Az?>6z%FcX45^*+_G2DLF%VcB);){{iMd05I;gglAmNPlo5LGeJ*RHsH zvwU#2*P{MP_r>*a5h8e$4I}34Q0*F|aNA{$ppw*X4gtVm3D3+u?8U{tVIgYR>d6|c zYUMc}r3|y?Km+avH_nzzOzUvnLc{+CLvJg{mLdc5sy8X&D2883qBM_dt3td3HZXJN z6iYk0QUVelP;GK!nC~eUBiXD{E}!V@E2F;fH={5=7n3>$$kz}6$t72`+BrJ_FdJ>+ zNit_ciW`DKpEZkmNe|3~vW<}PZJyWio_V_{cuIj0{15uE@UMDpRuW3^+*yQKpJ1pVL-2h+%&&$7_RA1^oa(XjHMt? zm*s~ca|8(RZ@`<6wL)Db>({h;Vz_dJrOvGr1HIyOO4xMc$9{Xsb;A1MW4w%u@W9Pa z1KFpi?1jdvwmMYuu}ScQ;T|-=Wx+pm*h|_Q7zW#?WfX{&3U0Hb%Jg83SiuP*Sk=e7 z_dM^;9S{r(*Nx`J*(QeNNzKT}r{lT5GJgEurb_Sa)FkGLK&cF|s3z^5QD)Q>1am1% z%0l=u5E7}7WUfNhaGN{m1|678Vi->3Nm%iNSm0h{gbv$*zBF8k&?bd_lfzt2OlK_+ zsf2J9a_A5M9)o;;pr=oy*ql&LoUrApuE>TsKT8C={qFq}(-(cP9X5r^Slt2u5H?Kn z%aI<(n8^ffaj0`s-Wrnu1CtnihiuqH3;^s>E6HtO07X>0yi4VIS|SL~3q62;2`lFW zLW|?X^u%Y+vgXcCAm{@NWa1zJ|3wBIr%dQ5<3R^;@Y&!>FFqSme!oz2`*2pZ14r3V z;&v_HEUe;f1SmQ|;qA*I;}vUk@vvuje{rCNK>s3i(`ypv;YI=h5P&$jCkBC#nS~SK zeR@)i`yW-qcZ=W*a;=M^**OAAWGU(X7Nz%xX|2FHrc`3wUzN32U>&c5|8Psf)@ zvzBQcWG-ChEX26=*Tr;5W`){02XOQYM}q6zw%c#KOfin;Y~; z-)?QNO>$O$k2vag=cj!7+Wp&A_tfAp4aLL20w&Buh9OXcGAR0K^+5DX2l~`1?KQ6i=f}BKsuU<3aTd+rJf-%<}iv zzF|N9?}N1!-&O}L1e0ypx^<*hW{)5!a3_e%HMd_)S5#2%P2w1duPJawaux2d)MY;3 z9L2Rb+BA%HvLHh^mWT|XDJrJ^Md+(c%X<@t4x=T}m_{j`8HfcNd-|lK>0$9JeK#SN zOW(>DUnxz*h|g_@>M@aUlpE|G#A!%UJdg;21fXuH=zwC_u?aL&Q`OTegUyuS1WQ5X zXu@#+g)B0U!;7xui4gs)Kz3d#Dp-!NW#U0xFQd(e_w|x%i{`C9M14FjuV&vcxemAp zAsg^tWx$#h^xq2HkYulOwY+>Z`HP+a3Rqx6zSx&Wq;lNw9TrVP2d*G$d^4r@A$TQR)cW&m zL)CC_q}y)?)z)sXmfZdO4>*o*{WY}@H-RxzT7{bHVC)IxtH2xfKu&yPRX98_Iy~HY)ol|lvP6qrQssoA zdn%rR?m}BI$K~1m-HLa#9gl8WcawmcxFwhCyl9S$O*+(QM!@7m>-@@w%LLm!5d(B` z32M90ObUfIQZ$#Zk(bC>rx=x$nRh)#n2hhpYNFd?s8O+y*d%*vopY`2r zQa|YZJ?8Z6DlA7-oM>SBxBX0$f;%Oi%LOx`&?SN8?Re70s_oYD&E+WZwn+dlcEZ*% zx=={J@6-GMBePZWsH1cY`LFX4nHj1j4q`h)7@Y;9-xmAerb-B#}Hnq_@=zx z63wIYfDOo6zz9h6)HYv z(ExbR0+u^HiQ!Z}l(8o^G(H-Y?d(||ZCFOEqqL!t10zP~-bW#JU zp=8gZyZJ%4lLi0^qg{({Y+pv`1$>pufB+{p1^M@_T(vtG4}t{5?TS(d+#4X<2LJ#E zB>3|aeQM>3Tde9In1qYQU-(bZfsOz`3nxM6a|+Tk)^?M#q7~=X?Dk4UyIk|m(>@zM z2ASBWM(?I*lq)=@Pmf)V{D2=#_ks%ipY(I81CwZQCW}9oSrr$gTCF+zFf#b1{`EGS z4;6^$E)D?~+ZWsxtxyHi^%?h-h?je76=SW%6Lk1|xh&JQ!Jr(2R(fdYi$v7(Wmo+) ztaDy`Gm$ld!DWxJbMC1^9>2%BU@#sJ^xxZl2wy3DUOd#Dv3IMX>#hMt5Q^X&+376w z#i}EdQb>mMO~OpugrOX1ujohn{Q-ccRDI1NmkX4e+k~z>2;A^QQIZyzHzNl4^eI|_ zBqnQ9#^*6v38v_q?RWog*XE$Z2myn^jLU3;o7KHoai)P)9igr4t>t4}D6VL;Q!)zO5u7f5G-_6XX$^8y8ahl(_oEtF+V5q&4N5!>wd8`|J)m*}i~T20(d|mg!H45rFIE<$QP`Uv z8Ri!=m4jatkm%RE{ks44D}AGfXIDadctPH-_M1!fDs2|aYQ<(SOVVO-ObkrU!xDAI zDh~a@EL<0SB-`G>_|K3VcQdKd+zY`aFSQ<6Gyb(`vVtKSNz$<%Pn` zDQsd?IM4bclMEuc63b*}wNIoMalX6J)R-mdO8Q_I!8IElS_lMIRs$bD!0^8o(h9vE zV!ok7Xgy#vC*yfJ!iZ!?IZ&XOIMo6J43 zu`o^M5wcX-KCS2QiwWSr(X0dV9MtPo>+42c#VAcpOu&Hs@QU5zh{7;aDaJxGV|u=) z=wHh{x)msjqs&@RCm>yxxu^jw;9W!>T6V?cNzcf_*{Xf#B~1Sh8v!Z=9AKZ;G1@OQ z_JImTAg^(_a{|3XR-)>PDv2~=O#tRJBLZ|jukQlLR~jq444AgeDoM)}H&ZpN6eZ|Q zJ`MQmSKv5$4j3zw#K5ydeOv8LR2qtKjq&+WylNX~LkjEbK+l7#4KIS&N*_p=OTaa8}GVhxL3;B)7mm@iLPQ`j+EeFQBIS zYx|G~>fuW5ij#*%(Y}I^5XM4!m0Fot^x8Bruc%iMJV)kfnAxeZol;#k6Se`SL^-Wi z+dcbd346S|{-i1xdSENGG zs8h)C@%g9IaKy*ftLB*+yr@P||FW0m2Xa9HLCZ4dTJ|kFSD>J1UwNl|>$IBeRvt1+ z>(q?`k}f)^eXA1Bza7^IP;p7rsIxVStU-MS0S>h3wB#4>`%;D?mi}a%aM)3`+Ke~K zd)So&6a2vf{0&E7Diipo}cP3!Uy$D(GL1Wvhyvn(SIgg_NU)UR*c)icdc3nwd0U)SJT_8?-1_ z!Uu(Beb=wwS``_>Hmp@Pn~EEUbij5{!1l}7%%8*ne?1&DsUPi0qGx3|uE|@ji?*`X zgcGf?a`|3b%ByVK^%9DZP!7v==$shhzg!)P^tki0ej2o|y^ZT%+jM#!bi{KTjjn!t z4;A6=U(R<*BE`|M=ot+n`H;`zO4n&{`VGm7*0YO2v`vu^%BAvHv+Zz3J$d?ceY-9Y zb)Yv29*BbD&x=Jp;MK)S&%vO6SZlr28kL6^@pD+>)V}=X$1{GwV{-y3IN$+Xfw!(8 z^zP-BSh}-UD0a~FpaB8YA}ifTS%`+0d2j`{J1j567=E_n#mGB{=_TOjCEfy9?>nir zU)cZ3DePSu*7gc|KwigtBvq8UrfC6m$$BfAdC4!k^y7V5qTm?!XlqEN_d2s@P^s0Q z`mp`y{NGE!|4qzzn`xfq33ro&!1a_Sw{`caa)vOU+?St>O+KPUCkP`?z2H!KOIFc@(iS>%@d2HA=n z;S_2RDv;Vy1QzCldAU33a{Kl;i@ydlL|?sMkwP>)?D>#dg(T20pq=d%I#-QjJhh}~ zU5id3sK6{i_`Cq1{$!VPUBCH_R^lg&((&0!F|Fy<^j;TRSoJJZ+dRR(`FGRL7atPX z#V7w{+IBTFeR*Bp$ei3uZNzTw{PX9X3fGYtw_!-UUIz~#&M7ns0Pce>LF1&qvi|wg zI^cfptlAx;JlxT+^!iT<#){_DoU10!0^6!;zZ*RJG?G3^U>6)N5s%!=G z@Lf9?(nL&UoKaz*2Ut60Rnu9JLj5quIp?{&w1bY&TU|IHSqE!|NY-Y z)A6paY!qD*nBA3a%_AtlZSf_8O|L(UlBF3K_pB8;D2gTaD_Q8pABFry7c37`EGvag zJdf4`VWcOnn@|oW<~&*&UT|ga}bhu zdd9@_DjhCX>~65xL%a6;X8*HiU=+Fm(v=~QkzYt{9I)?FEK;f#%`<~DbjWg-Ov;lX z%Wgr?5koR5>Inv63PEhsv_)>Y<<8}cxRMs18K<} zutJ>lxq*%)!cuDErj)-$Ql)Of>Iek1b3kr`_5xy>UIBdXV^A69&B62lq}e?S-LvBZ zW;GFCwF`>4ETZoX8KzP7vB`$*KX70H{{i_iHaoIqxy=!7O+~WzDKynDX4X^E8}+0) zap1W<&z8`OoAriBAqGw(R5c@9Pu!_@)q94eiC>$fEBv+?jLky`FtTZE#A?=g(gkD2 zwXF_}GG;RtcL;3$qC80@dWulY7&9005ChTpj0n#?k}#L+PrAI8(Bq@e3~)R=BJ~G5 zKP?{^SHeJE{{Y~K@^tS#d`AYTCWZStn+%wVlvZukf*E$AgAC5^kQD^|8V0jP3G=26 zEZ{#RKP#*{iS&+}U@H}7u&*#SI2Afi-L@yy65GM}lQEl9Bu*gz=i?v|1R$#Y8<%=3 zCj{;X=Y0w`n#b)cLp-9YLsjz9OH`PX2-4mfG?8f1R|tiYK7gA9!UrZ_N|$A2r@u=t|p*YNimc5UU?v|A2+XxH|y?h7FvWb3GuW-T$wL!iD*~3?2MWT5Xz$OVL zzwY|*!HO0z(Q3-b)Z6C0rxK&n#V~f0JGR?*0Yvy8l5c)X(1l{gvRa+fiMFDZf_QLa z?~_BCBaTZp?f6O`i#HDUHIV;GGkX% z5L#ArWTV<4(}>@j3`LFsRH~$?Sy+icLC%IVDxRux<$6pP`S*A^|{H6 z)PU(s{c zI0lm8k_@{35M9$q=gt>#gF85KO`=`z7v2q`>?f^L@`PYLp>y|0>qR)7M6VfZ}i_EHFvb|1Ska06IzFWOVe(ok{ez(RFI?z(gPU2onm z42|pzAL=i*xBG^FB?MYQR0W#igCB(FVYVe~l7X(_fziPxwl{1K=v%UxQ)cT^`n7%! zD?Kn7sYm_g0sO;{fHxgi_5wjqh%O5o2HjL>{eIj8BeWLrw$=n1&_H|piq`Wi2r%aq{ti?~aT3S^+>SmyXYk4{PU!r4y=#STQ!ELC3x*06YR}(DUbiIjc2r zSjYiO+y}L6TO)4OG;c34_k#!pl!Y;pgDzdnP1BD@ktWR5kSqs3XjBvQ z^W!EyKZlTv?aJqpNJvYe=z~lsPl?lHqY+le1m-4q1z!;|B=vgNdwys5<1e9AFkt}v zbyV1og6jhl2wOu6)uE0*ztW>=Vy#cGMLT-$EYvEt^tHB^P=9t}g6`9A!vpwd||avY3(km>l93Ica~ArjJ5yFDSs0r4>lHL*uM3pFZ*e z%FtHW>-G6w1E%`Ng#e&G8EqPw#+Il+Bm^2j2UYX)__|JF?0RP$9oz%XZfVpZII*S< zyk5L9y0nWWZg;mH%9D@;{&Vt!;!b%od&UwWWx{LzY&|e+O-ZcwzG>YnP@9lm#Fun1Je_ablmRzU8}68gRn+ zMMCnME|YdnxQAu50jV7cxo15N&&HPXZ2=QJG}Wfn!tZl{f65FX-5TubDMWA+qmBt9 zy0sopUk<+ufF0OX7>uT!0}5ZCz5?bap6F*rtWk~vsKU$CC&$^t(57xLNMBy&la_E6 z5SGJ1R}HDtA)jxTM^Ga3*~H0A(;s1vLR`=SQGtsl>*A1?W!-EmL*|o7KXVjz#Vl?z zSb1KN^20`e+|iHs3PGk}O#=+ix(yladO0`IyM?vpV0Z8`Y@-Vm=V)qtvS@HT+QQGtfBb<{bqB!qW|3-{Z|*WCf@jflY*>q@{bDV$F0 z(MahcK6;HYxBb8xE&SH+4ZuHZ2Am^%YR~!Fq@d!JeEqst7>gCnUk9Qol31f;iPVm% zC#}=9D{W1G->dP|@78x=g&LM!?RghV(i=f}a>KniGivbe38pp{{mn|=2i0#bB*r^; zP!?dD$s;fPO5})bBMs`lk?RDFQ^6dl)IiNb=4HwV)(S`k=WwatAlSx0pYIH5H%N9rVgW!SJ%; zApj8$%+2zEa?S}z3~iOfx&U2x5%@4D$zYuQqcnBds^Uz3(AJdM_6W7}Ud;_zk0Ap1 z*W?F#JAg#JgJX-%m5q&QR{^akg0xd=y1h~p!I`W0*;liyc>N*)gFzSTHwV^n9^S?j z7@4Eld^SwiEPz2{c`SAEMVf|ne#JB=2U)hTrF0$?uw2}Q%-0t@@`jG7fk;6K05WhJ00n5BaKldYy6s9uci146-CYi$IJ~xo zKCQ0Kh25yIXE8gyx3~HsL$se5_2|Mi5bgiV^4)Ktn>vg>L$FLd+RSg8c@4N+`%;J0 z2{5&kN@MNbxnie*PG4{9x4oWK!Xt15-Xo05m6dRCJj)`4d(>8VgY*`01)22m<xZ9UNu z0STiP?Qs*n#F=#A71vbAsu{MuwI|hPU>cUgCLRz-f&LBh<8M{EG#K(gVY|j?ldDjf zsfy~T*fs&ir5T%y$;3*)O{9^F3)}33lgHMBXYg^Z>2{eVWQNDp4t1zB8-hLx(?R(d z?+dCX4Hh5>Fsq;;zx%306_)cgIDei(6hU7E?mg6pdE>|rYD2TcimQnb1cC3mc1~G{N_oy1{Q#6gwHq+3C83LpUijK{nv}Re0Zmpx zxA+c_557K?4SHepa2Kw_qM&LvNBr&>NgV+@uZV>4bgwsQ<$#1|KD|fs1koW4oK^{2Lw~= zo;Da&y>%@-tro!)+CQE!*dj6`cE0J-l8?H>zJUp#qZro3LLqOA&0D~T`HDF+Nf()H zEmo?#zCej`!eo-zP=vBjj7vEb#(MZD521tNoxwRm6Kyk4Cf#0e*GB4bcv}>foDh~IR#^20VIS75-**qlva9$eOAX!*tfO-%W z`Qid3X7K-ROD5^#ag;M8boQVi;LcJtL;+1V)&-5DyP((Nf{@?~#yDh;YFf(^Z=C25 z1wf6DixJj`Z8^_AzMs1;)HNzD(^0i9cXVp3_d$XgHv9PV|2s9{d=_CPNG>O5&hU&t z=H3#kWHGPM6bRg^d{_jE8E@ZoIZC8z|2*LeLBbcLxnL^<9xjOhKwP#}JfcNNtR?5O zyfpa#Z~-=P+~Dr~L9#}gK~u#nSq!HsmOKjHEz2Q5mIsS)dhn7EHznnh13(zWa#GL#k1+_EX!^cvLq7bVm!|H))cgX3g8UZ zE?-uf9|UyMNsNY490wQ;3M5KVjBy;rL( zgK@~ax$sdo7K8OK4le(4Xwi~)`F$a?A>Nmhv`v7!sYIvpazfq+j4Uj?G8fDU*Hc^U zT(!dQwJpr+7|*ERcH6%HA2~n71K&E`jH{2!QjSoISEe(RiaRbg8VW9i!bIXu3g5-l zF8r#Or$`#b&7F($3z(&e@%YG*LM#kpEaBj>uSoOZ@h5AJ%9 z35H?$1-^bEn1?x;WN3|HNp$w@Ac7>MKwS7%EQwi&wa2dkwa+1BLOt{7)^SLM?8-I= z)fl^@BwE&I;a~Ru|9VU)dj8ZR5)a5E5w>fYrb+eUd7K7C=2KI?*W!B7Y=*Zg3PBchd+Yj=Se0&^{duyNomwORF zK-fF~WHBqy$Mv~K^z8^xk1BhSaB_0(=zIi7{Px-77L-KAh-8{8IL|IIqUX6EE85S- z{&VMtyx{xf4iFTG9x7^riAT-gfbrf_a|oU%AF2_ah5{dc0?K)V)4{^p(S#4g>V&vd>me4cZMT1-}8=u<8!s7KYo2t54{ zLIIVB!gmcN%tcz?p@;PR-`uylI&>qjVC%4bwq|NIUGj4 z1XE`0=r?by?-B>khptJM6sY=N>l&Hl5lNL~y4eA}?2&xDI{2y!SXA|>;F6P1uDR9$ zuk8KsX|Z73Z~?8bg+dG0Ci^vpjcxwsSbej(z6%Aw|FD2F&^(tJti74=W6PSS!=RcT zG)yhe{i={J?8)YMFx7G{f)SQ*4ru#l9iW4exoza=h{6*$apk&gMpP1v<%!4*xO7$Y zCRg6MmS#MWw zcRZ>h0hBfrZ0npJT7gBo>*JiQ&gR1;g10Y>>xkdA&=qIZp);p{%{9<{UsRLr3tJlo zaY>eZRNXkfP*nU{k3+MNOHLAAy!;;4Nj<$yCf3tiP~FyC?b8{B!)hk5tkk{-b}5?u z7R*5W7X%CebMRc5R3AR5{MaHo*EcBGja!c+5`3l}V}kerjK}QQ4@o%&Z1M;=h2H*& zVg5jyQSJH_EFTvpvHXiSf;Fi6?iju9N$l~-9>Rz%>aojKi+i1!8BvyTBRBRPn2;!|I5mc4@*Nx(_-E% z^pJYe3JCJnc??V^zmqq=9Dm#2I|jfw;gElF&8={*LeeXJRdN@}I*MLyMOfzaU7p)F za0EfGf;ZU+jP!mF%3uFAfoH&)o>j#0;e$<%Ee030(Jgl)7hJr9X=MfJE^OF7OIKjB z(Gi2a!+{Kuh*EY>V3KYaalfFmkhsN4<=q-^w%g%~P9;NV-b0qy9oelxJ70i;Mc zy(_r}r_bHkq01os^=q?tj~>g3C81qTfqR32SCQ*uBB|_ptyU+Vt+8)G`S-sm-~8cj zV)N4;7Eam8Ny4uf_grRTjgoh_$(l^uJ$;gS=?ac1j!N`wR4l1OLr z%1z_yi(6~J!P*a5lV^NIBEO#?iqUl*maPukpHM4XBYYgHGz|eft!V6LNXB2HK5T7l#K8d((u2nT!~e?l|MN?rnIxtkjBX5LdZW&bR=81R7!kB=w_chViHR%kZ2?x>E0Vqh6W5_!BUNIWBb zdl(kczfoq0o`n^e`oCuV{`?ZS%Fl-djJ>}_cR>Xj>3vUOSAxs3K{_PJk!*_HWn3NI zxWnNrC?5LECPOPRuz$fKFFyEqDn)|1eFbEaKHu78{3)v%)eKfL@lP@BFX)2x<-76q zx~rw$c*)Udni05ZzU~{zId=3-46|Gfjn^=){QPzgKL7tte)zrI)7h08n=;vRKCt-n z_NPHEWDZfqOb*t$&lE?{994(3j@0_GVN+bYujNl{3Gd+W$6vYDCMS=VM!pvN!PW(h zFILU@lj*+LMw#jFn%a%q-+f?wk){N(eRb)omkKWS4sh;-(iOuNf$hrP{}LfA`WL3o z_aOHB9}1*Lmc)Y{!2qkql!IHaD{*FSH`l#gDs{i(<-&EQgyWL%!Mm-jpu|Fj za3gW+KwI$jWzv9%SZget*)ov&{IBIZ-`a~mrzl8AQ_@oggQ`e7W!l~-augm+dyMJ3 zA{0k;&N*n0JD&v#Rcl+v%nm5f6VuS9UE*e^hJW#5;e#fzopbM3GGb(`Yf0U6p#4>^ z+I!74CC=5$2uit%HJN8&!tBQgw{7U1fSAnL&o12G`p!50ALJ+B&L3>v(*!Z)**UCD z!b>3cQ{|bOyQr2V0MJ}?YR+thDOGW6?kluG7u(+TfwEh@HE!iJnQ*1{>#sRAxsu2+ zI&U~P_U1!|(@4Tw84_w>PLs1bnGAA}Y5p1y5!l+%&5%_>tmR&gD7kO{V ztv87v3M(i@eW;gb!Ev?90;P7SN-LF%-K9W9VF5*kvY_o&tTz%P7L-_ETMW`0wHJ|! zMHE}`CweqK7>!RpNR40iVUv0K&iOKDCOLDy-TP#w)Ms0Ppy_Zqr4SIJgJZ^MNuBHB z{mGe%k?)Nqk14alyL0osv7FD%oCz@qUpt$)VYFFSdQeDGSM1 zc6{LaFmE1s`y@Zie!O7k5Q%iz=6dY3hGIuHT{0;B?E?tGsBw#>;wUj5s&9;P2oZN- zz1B!gEDDB+Sf0thR##(dvEi*=t(#NdDX~FfoWx4jreAwDKqv0KO6!SXwAb?f3O=5t zvg+zMb#v4o3EVnYt90csLLTkrN~mf@?mkudPMgvH9)iV%;#W`cYfwnuKeMC_#4MwL< zPYWWjx91!6;f$3IDxD)vDkAM{NBZ9@0@jAh&7}#9tc6NF%4>rJgrM<_6;shhxR^0H z^h^Dg4UA8Yhgt%1_1rl6DMt%Y@5N)746NLl(pyJQLAzb(T2I%*M?hYTXnEE$sf-ZK zcG$AAZsOWx=l>lJ$gzQPerA~fM#A>yV5mabt%ODhCq_?hq@pZ1k`6a#u+Uv>4jB-> z+=Ef#qvd?}0`9;1Y6zS(ZIk`IX8#%i^1;>KlFB;;R_vbD4HcZ33|M|(SG!~PK?&_j z4{ou%c@1HEHKk(1)T&!V06d#BA5*HU;VvBPPP3}#iP{;gS9y7*fUBvr8Yaa0A|4UA zd;Hq*$u}#`e85A3+U3yPrEwRL9BfEZTI{tq}L zmx&*;rRIE#F$Zay^Cf3m^|~$Gw{3UFA;kb<&u%zVFupq<{&zw9lm&ZTv3QPy$f?_YQRPzVqNI%1;M z!92HV3#T&^PXtUO*y!RMO*{PX1KS>ev%=Mpso1~`#kt(QY9+FcgF80$KPzF6T!Kl^ zuE>XN&3SlNJM>^VO~sN0twu2EGBB5ZsZwL>WsBEo?1P4CQ6@RO<1_zj6!v$@B{HJ% z2ez~PW~tTqI&8GR!bWY4S}MF$q{ae%4N#YN?*Hew|A5_l_wVVHcSs~ssZ6%85QH{5 unM^8`baco&_w3)hLkj(W{KtR%EBFF$fX9*cQmpd;0000P) z78Mu?2@4Sq5)KRx92+4eBq|RM6eA)i5fBz1A0;OyEGZ~17#JQH7a1!oG9e%)85kQc zFf}tYIYUHB9vve*JVG}&Js=+;6cZUeK13H592FHCDJn5JIzS5v3mX|6KR`wzAR`_f zARQbYOifZPE;AGn7$YMk1_la2LPug_W=>C4US4Dj3lR$m4^>uNSz2H%EiX7ZKQS>l zD=RK2C@K&Q5o2U(B_t;&CMZfuPDn^kU|?r8HaiIj4p&%SP*Yb%MoMgLaZpfKadLHB zTwz8=O@@h&R8&?nGBi9qJ~%i!F*7$XFfwOoZZ9q}Q&U<=NlP>|HfCmPLqkO>Dl9rW zJT^8sOiWL9czc6~jfsqqZf|n`|NlTgLUD6>U}0lHK|_FqihO{DR#sV9SzA$2Q$X}8e0+dUPEd}Mm~?e`TU%XjZ*^N=Wr2c*ba{Vxd4Hs)sZ&;3bai`* zj+13&XNHH0%gxScX=^?{K%=Clv9hz1l$LjVfNF1bo1mqPkd)Qe*sZRxl9igcy1Loh z+qAW}e0_s)c6^(ipm~0Tm71VxYi)gkh+kr7zrn+ej*#Brd4B=e}IBPK}yln)w8#}sjaf7sjHWmon~usp`oPY=jw!ohkAN^s;jNz z<>gCIR-T`sj*ymBSzky@QIeOPZE|>NY;###W1pm|VrOe$V{5v<#PRd<+1=upoum5v z{J6ZpzQf2H9V5=q(Zj^WV`pyN-rtFejP394EG;(8(bllFxid9A^!E4n`S``k&z_^E zuCln1k(1Qf-J++s*?=!S`vzN#lx0000PbW%=J01Vm{ zn}@#4H?Zw^T_W-<_)kM?<=w39^})y_-T(lRI!Q!9RCwC#n)_Q)cO1uSZLO`{+LmPs zctP;4D0vABF99hNYe_ND$LcIThnRb z&}>@S=B@3xXZsJ@&9(vMfrhV|=hY+iV4-I`ZduJ~W`>MJ(uH~9Pedj&ad zL!*}tWKD!G5)F2Tc|yPtC<1}pu-@jaHUCE&R<2oVvmOxc6y)I(w>^eX-zOR{NaRwD zR4$hYI+R^Wocvre77T}h!BE_W^)LL7Tv++~TAK}kc3*#DMM{5%P-h()Vf@Vqz+bmR zomQSuTe3UYJ7kx;XUK+^*8U$%SotOp^+8UqK7k)e0f&!sMjIqSMXI z&E40jb->M}*xEY;_%R`q&NMcAckgJ!+;7q^X`kv;S!FV- zs&}!sx3kl%QVjz<0#4Oq0M)SA!qe$2Vr%F0^n_U0P>cb&fWfQR{YO0j#-5D9VTzco z;%Q*mJ7s#YOw~EjX_i@Z3aPNYyS@G4!>jGx-R<4Ke*gUgfxsZts4X(U5j}5AXOVSI z56J{flCvXxqs?2ZR{YmkwRW|K7lxKBGz0T|!YYIJ>yG*bA@} z4Z!8GYT>>@B53{T(=X@mKN=SE#uPg7#E?puoB?u#fj7Rg;y=WybvEmRyaMus6F}Ij z#9~0aS+5bw$MojesiEGDuAKNP`_y+WAANay;c;*8@coAm zdV0PboqIH?R;VrJplf{ z=HWr1;PDtN76nv=uC8AG{y|Pb-eK2|cTYYZ{&8TYN1_(%6bfGNtfGx#|J<{m3)Zan z$Dwkxz{KyA$;=agdX0W!TGrk2b#n%hoKf$lEPJr(B@b7xD#;XM z+N!q>b@JpI*~rw~N7wg%5D-8Iq!Wt@E7@6fT^kLNx;cD|jb6AH)7W1{zZ6TiS zyWElfq|E5Rut-V-0)Y)edYk|}xc~XFZ#C+x!cnnVSZrqxTm4L0untK4XGa-~39)Q; z!Xj4>F~sM0gnAR{1ysL1(eV{ocmx;{fg+O%NSPJv{ECXI>bA0zdHa$+)s9;Z*~Lz;<~C`EA|$iysP#M4^z>^q(dlbsszTP(3f4*PBi8jtk^BA@x-C1q)c{YTkTA1eL_skK~|qZD-y|t zq8Y8Rwkn35n3y-v)K$MTJ~+!Q$Tw;i43`ld9TxMS*xxr};I=CJ>oT$^2>83`$nAl@c%h*PB<9BF z!|JpP#@m|qhm$HT*%q|%g=Z!muCnn*-#xbo$X5-SrE)XFQj$vz*zE1cuBsp-pjc{d zQFA^=Y7p_`=_njBq9C~}CS@O?O_+M~n#r(r_sNcm-8(pytQo#7*rmXfU%?rd7LqcH z@J_z&?}mh4NytEgk*>aBr3-VvpMIc`nKq(E zHm|OD>a4WEgj~7Gm>w2SOlTz55nUbypFyN#rpJ?=L%d00d7l}ihT^Jpwo#ibmt55~ zXa}-cm7GQnGpUe5C>TgaUxP-lt12r~n5Kqmkwh-m$U6qcQAJ@)NmqxmF%uJnwsY}G z4fKa2Ts;H6S-5}f;+Go3r;6cLH{0;%-hA5C;i}cXUZ-an!}{I{wMoy=RpTic1=RAY zd@Kl;6_7n6Z5=Ph2>C2lda{(S*O*Lg%&~pU>Xb$fAtfhenkSXqdrU5@Vx@2hjS{+T zS8=(xEs_P`PCJerwusz(}l(}CAq~_l`JMR*_3=l|D|9IYH!QVq?UjEfM%CrYO1YIOZ#vO7GiJf z6rJepjz&9I7={OuKGU?fO2kI0ZTQ-!83XG!Y-^bvS>W|PzNeT{bO~5fz&KjTzJJI=ryr zsqwyfuvT6PRn1sf%uH<^9McJqBZ%jHvNMWXE%50B!?9+{tt9VRwaE`JBL~IoaX1cbRl5Xs5 zn&HqGY*E_>rdNNJU)pkG9LT#UaO6%du=Qn;m%vj*f_8O#9x=JjGj-l7l zAP{Os@Rk`Vr_3l78YErD+?$Cg*uDs^L(OeV8dAs3d$Ly*x;f~)rk zDb+>+imua+o0S>4@;d*(gAei{>5~3>Ig6is^GH*1xg-%s!ocluv?3%Ljo$w0-1(D& zhpnwTMYHYdr?MEly4v^B)R5XTt20<aMi#o(3a{JI%t zg{)JqnbySyMN)9=V!R6ipVL&yV(l(!(|2?zwXIEKOig1?U#_tsrbIH(Uzdf9a&ik` zr{pyfD%pu&9r`LE;mVb*TQ&zDtjy1ekIwS)H{lRuGAA9A~UI&?Fz*Z%F-qgBsuyfQf=)|q7j*^r2cCE>Cv zb3swA`_D@Sg6wJzD|gJ$F`yCB>bXq@mN2u+Sk+bma@w34o5ydgOx<$V&(9~)FLE>R zJ{Wg5G<0c8$U819@N9NW?Ed}U+q{F%DwNG4BZ4HTVm9;~OYQIIsDY3_Ff{Pnh+r2x zYxcvAC5T25(?kU2` z`x+Ywg=IX6vP=@VPte#Y8q2R{S62gXe}t;wtO82(^xcv5kZ zH_$5Fk{BHred7K6%5h#Xgd<>c`}>qyTh6#Wwjj9`3ae5!Quf-p&@1pzi06r4M^9d8 zA1F1*X|`)u{Cm8$;lR!5UWK@mE1A}0)(|5K>WGd|a=t_w=o=VZ&1)nO(t~-lCX28q zPGjYXD#+ai8jhU%Y`~kkw2NibR&Q}-XV z{E(8e@575N$B&hsOFIIPmIjK#IWT@G@;1_;n>kIEW*@f(n7`P3*pRxXDEtlPS$0TbE>tnHddLp|8_oyUceC!F?!q2#AXlveDOkG zT3W;Dn}-Lpcbo`}4h{?6zCHTHj)SqcK54lGaPhlagI^uI`QXv)!e=M8x$X(1LqVv@ z>e?(MwV})okvZ0H%aRt_XPC+(BJ9AlOb7&2)br!Xk6X_jllR%Z{p1&el`kIfx;=G! zRHZP?8VgXUnjAJ9gvlyW3Q*~+e2T2ATA?+_`#EhN#&~4yN!gc5W{b>>$K0gs*nLME z(vDmxi%s3*=jP?=iw;4DL`6k~M0x%Ruqhh3C-wTzC(m3s{mJEnU;ps!!t7kVk0+5` zfkCw8IFo1sN`+A&gi$r=d*OK!yfX&lY)7QkAofy@D?UElT6(;D9Q4|g-XeJQMHi3z zv-4`RTsYfML#@FVXV`)9MHOt4VZ5#`57@b_$AKY;T-JEDTk2r~%`IKS7?Rxl`q0n) zeSQ6ThqidTF6{vW0GC~R0pM^D9KhM#-5I_Y27}^r6HWoaaPfzOH@@pusXos~V47(t zX9``}h1ZE1^5BAT7${LwxCueUU?C2eattEEw`{&-U(dNq4`#q`JlV4N)wk{L+@2j( zs|=b6zB?63tV7u$h*j*w99lE);F(SVMQ-h@W-*oA^!JitBi;BGhB)o|?w>DSx>UxZ z;UR!rXOPPhAm9^#C@RNj&R_S0 z6cy5&%i2T|7ka(cfCo{91X~!Yyp})&zY|eGh5Ea{C%^F9XXjde>Vd9a@#Fx;|D8Lx z7w6Shldd-%T!6^PLBb;nO_s9w^eXRqy&xS?Cg218tg*f#7U2W8l3s=`Ip);IUmQPq zHp~kKhXdNfT|i48fq)@VX!JG&6oEh>kw^p-0{jJo0p>W`+c|;`yz{Qp<`cJ0U;5@k}rYO;tsGUK&h{hcqBZ`z|tg>7P989B!_Y4(nQb^r(zXpDLJd$>`l6w1`T7X~iek9Kp9-Uk`pd{9_f2LZgC;m30nOVcjMeCWA^Y>Fbd2*}&ub!$Q2Gvbkv~ zrRQ5d8-MXhIbieJf$tYb75V|o!VPC~M01e~2(OeBAp}}5U-4V)?t(s%v=;sT&ZCE% zVk`{BELI)e zUs%(kE<5%08Oz@0=m7Yih`5aF0O`0BRIfn9dH4AP_M25m*#1!Y%RR0S!+q z)@e)~%7zkty;i8!%VaXK-lEnBC35xT{rT3@J3^yEoPr{N0s*`?+};iZg6wCO9F0k6 zu*_G0h#3%&T?C$%G_I7(%5t09N~$?b6arMh-sa(%ZM<+Q?ZVNXGTWE`@se=WbGEl0 z|Jcs^@}8v%LV>ai>=F5*YD%3{R>mKAz->kdI(F=)(f(lNI>VY=&+yf~cYpND-a8~A zA%Q>wfv`gegdO$>d&&|B8v)sb4YENth$4F^h=K^naH8~}f_ogbwY8`1OV{6?j!)%E z0)7|I`#$geto#0wboGw1`Wv0JO=oZEJD6e+rg#q$FyD+oa4Vdg85(LGoLd?T@R7Rk zUrL(>K>_q`e}Dg&IP`4jXsxceZs5b?FF)@%=^7j1a6CYsB$*-*rbLb?u3l}gy#H#6 zW0+`ZY2Lh<8BJ`~A~!y67ethn$lZ9RtT47d&1tPkm0q7SR|S3V|Gfa;h86v8qJOco z;dfOeb3%zb!qRr>BRXX2D5z_@|MbTRPU%eHX+DHmXO|?McbEk6l;nm&% zx`z!8CkB4th=3DKEpDByt0~HPc-4*($#)M~!#if@!Z#-8DmErt4A-N0W~R;w94;+x zt$O_89rdX9|GPH)@z1SaO%JyYjt-5XEC?me2wr5Q=f>#G($b~L&a|2GwbqctlmaPh zCF|;L&7HF~F%0tG%m>a7HoyJ((NODVOKFNZ0erx*pz7#q``#Vw_YJRYHw-_zx(U3Z zw0V7d_D^4ZnO?-O5vek+O<(PnFlacO5y%+<9-7khYR+8`ym$Xq6P}yOOWkmFnf%yQ z9=oBHS820N2^Kt4w;(pfxOy&WFF!M6F6O7-`hNz%AIWG}zx=Q`^KobiZGkRvhNIo0 z+ao-IF`tzJ1%*+1dKyZ)8#MWq)}g_cYl1-~RUV=xGGRlZN>0||r# zB9R?-{oMGi^IzU)q9ZMxTSU#B^1{;#*&0nEghX4q^N=S5I0~+QKoK`moYQ6bz5k>A z-yy;(|1^6v{d{?wV@XJk!XgtkrW4q)j0|i1|EYT zlJRH)4{cG{*>|+i+-{Bsc`k`yW@+et!nt(l-HXeEgEz7c_5ok==G4&g^3dgj7b{No z^*a;KhCd9%KyVKo`?~qZzu#rkC^$5VL`ER|9bVR)y}ng*bvlR`=|u;La71Zm&}6P5 z97(X9T(?D&^h7u@b)+kxTB9m2hyVXV!LLlAr+=EAXw6t0Jc%ZxlpwJsD-kQ@QF&m3 z8?l)*p*{+r#T&3MWL+z&Y0?UeX>b^vj7Rax(7b~FzKM*gSQ6G0n2%-yrnIhKvsaT77o?OlO|%dwBRVWwh)a)qTCxc5V$(oz{7ue!KdXGnO%na!!dVG;+?8Vg7;>`ZR)XnAog^yj6Et-&)(ZR#%>8q_b z22U4gx2M0Tyx+t@kdbgyWa;gP4S~iCv6z4&gR}tuX8i8BeSK?}5!2eHpd+G1i^Y=h z&co$++k{L@v`4!$#mH_aKd`=9{yh4pzxY3OKw!p?9&Ju{G%S}Q%bbHaaIeh>PUn*4 zYDWSf{dhGrlpq7CuD|>0&MkFQfIboq!|CBGjmR9GIMp5AqAR0;Oo+s`z$$XD1*@IaO5=!=~OLIUc?_SP-` zKS1~^EbR7|fR?b@r$KQ%gDi<=+iK!=!@`E`(so5fa>+s}>a@PyAExeI%4zZzlQ0+} z5`;c9FJ!rOuGAI@N0rN!IdQo>uD+*Xcr>G9U17g8yr7PYp9^v@w($U& zw1s{5{rlcDF(?ukSb(nCs=GB?J6DAaS0fJ_QevkX@=6WKHOq`_tKblIL^zyINJe0_ zMzLfC{U54=??KLw`!^>RuJ$J)c`1o9w0wcAY2ElZw!Ac%tZ67Hi7xOAJb1iy?_6~x z2@Au5{RW(%@}Y_KJUjq0fc%!8&Z&`+CArnr3U85esI|4>1>gmAyvw@0+4-dAG%8b_% z21{&{y_O3n6ESU7giS57Et2EF=i|hZ{EPPGaf(wqzy6;O!H?mx3!fWiI#w4Wh#a?U zB0g{1Q?rydxP4SHxVZtJTap%f+8ab+K=#ud~0eb?q?gaCme->+<%@v4r5oi>bxo&C-U6!0Nb#hAvf3wJL3?V?7~+ zA9wA#$e3ot@Q1?*c}?>@LK^S^v0yv$`(QKNO zrEhE>UL33m-P0of*I4+IpF^J>zwaEZZGBEao0p);=EJ#pLn{&5&Y6vp)~JNZM0=Li zyGL73t5tLlID&{r5qS8j!uq2? zaW|iP9+81;EG?H?ly9cMJS@;&5`7$hq{S*n)tE#1_5V~Cen$pf{M_?-d#*JCTjrLC zFmsDVn|H0_+d9kIotKvSqhe2r_P^Y!xvrv;LB5U$sh|7i@?-)E0i1zE(5LF^`B`fY zUi2@0b?{=X;A8pB(R{|#;iK-yfBw_`-Wx*`Gp%P|p1rm*stIQ1_v&2=4iC>LQU?1- z?p&y+dfV9qcX!8+IO&6mfM!ah#hmRqqe}w?5(-I#TjoA^aBpYeiMd&FE>XP!Mz0|q ztL~5~+S~%kw`Pii&lERmom9Ti|8fX^_EX63VbA=B+Sa8qlwmf?12F!g%~9){?rj|l zJkD^0S7PjMUo`^zxnuzUD0CS(Ol>2r&n&juRJdoit{t*f-4u#r*Dbkg)ZY4YOQsgY`B5>3cI*Q zE)!5k{Y{bjjg{|(cpRGmJOXZ>^x#22xirkyBr_&cy$|&wK8uGiP?g)W< z*Yo+S@6T@)o!#3F^Kk2Fq6j5*=gtSa2J1OA%JReYgA*>XZt;GTI6A!yj~9*nh^BTVeLY=b4OKUu~%V(BIjj{m}6H^QYe5&Z+CoPuFGoopAK8 zel4Ns`Q@B#^49fsmiSya#TOeG;B<85R#d*94jl*y#0=0{%f2`t3@Svi7$nBdaSwcJ zdd6w`hVsOU&QLN2k0wWNcO_Kd@yW4lAN5v@tW(Xwavzb|KU#2*|-y?7&sExPg1^`RiNPrEE3HFtnkQ0KcRtN z@yDGeX?}W(Afz=;GdsIlJipe^Qrxk6JOAwM^t16f_)kPTCr73_~EzyYX@-paCG@3t_KKwH(fgynpKs(EvDkv*@nTRgxw+ozx#-H^io{fwTWQNe z$I9wRFqQp;2hh(!l>hrc8pVu50I#nol4|ODbUB7zo){P!72CD#4kcQ~7NCfUQHEv( zy@6KMTQ#Sl@BWt#0C9Ro*XBbWwh&OBDI{dUbHkL_!pw<|g!bfYH=bu|^zVAYR4NfD z|Bm+`Wi{OqXe2bWpAswUJ}$kH>}ov+iy<0Le0b?fDu;06=3_j`Aru+0c~f4t=4 zdn*PG3{i-Vj9ZGN(DZOiLqjZ>3-|h3Nzy&S}e4G)Wz2zy+F-7;7DU z8jeM?ZfsOZ83q(SW#EscULHKp?8Uc-tw3!E7=i2EwV5n7&Ipf0=AC*UL_3}y$jH0` zMX}=c9fqwr!TkAxZCUw3Ra#XdFV_NbGRTt`^t`Y{?Hynb{rbOagBpJ^@cw=GL^+D& zo`@u>N9UKK2D=OmW!mB7s-Q4x`k$X}B?Xv)@)u7i~ATJa&vasx)d+h#o-8eGN~wij?ch}*(f;DUFEAP{$h(^ z>%OKX6aw?xB7(G}>Y$;mqBv4sEzxwYG;Qqk1^P`)oL|%#+B4z`{llO)1qVxEdongLI=1Bb;?&T)o0nGvE@xW* zI5V2l(hw()5tQfWNJB&Anp_u=i_p$RXyv5z=9{oiBnovM7}kQIP-|md8bxyWOdf^C zOjx?y3b=MQfwp<+5HJ^K}_i1PV?Mc zL2FLC=}$ijbn?x{1N-ruGPAiynVzO_l$p8L$;i~`$mZ#{?^c#?E{D@y`d;)mbaeD* zs;X61da9=4z^2W`p`n?z=OJlSuC+lC5YLJDuGX$DQVCxwWzePC&Z&twD>s}@sfx!l%JF51X_iZw$!!%ua?XaQ za{&>V9cgYpw(jB^VAst1&pBk@_%+mczjtM6bR`wf$wL#PpYuEuV~McliKABAs&#jK z`EOP6&7l5<5s_#!l;)wZ1sG1hMKzQdaf{Wqq&bakeOCYLYw4QroAM4Z0I zGRWP&ad2>Xapv&y{(j$%i}WE$6JKX6@$?U&e-3>qEH^ETD1p6n%Dwub7&^7JT@g4k|!d} zlf5|EEum7mG_VBv>3`}1KY_?+DhIYTgPCajiBtryFvT)DHM;6~N7~21g6G-j=)Ulx zq*8Yx2I~RrFF0z6#$!Baezn7ki-R9euZ{MtbsV-f#K)+HG&8R*-l=R#C`}0p6Uv9O zjx|+>`&n5)R=Cn-&n|ls{0O{R?A)H~m{|TelQq)|X5vCN-mCVL$;jPHbg^19E@ml% zQcoBnAgtI(%%l*=D0lU!6^%k+GfeR(J|!vYcWlwl@{{T+_tL8DW~l9Xi!+&&9cgRW zrr|r;8w7a3e)*q5AXL&5{(h-)B~^w_Cg9x-Nhd%DcrLd~0a^Et8PYmF$17BMNQ4ZD z;&Jo_7ZOmQXkU8v?f{IsF3)`2*vx-8f34QXAakX0uKw1oJHaPUpNRIGd%F)%ad--- z%O217oN1~N*t?9p&3Z9715~EdquP+c#hHP>JP_IPcx91=(Ltw1?((I9N`aBpUb|;@ z$lS_iPj?a1sEmUr_-T6i00!6|WOR{lv2S=L5uK3WyvpN*lvQO;whc{6O&fJ25L3u2>bXgOaq%4DDkRAjx z&inpcGdRZZGk8cqXG_b@)xJ(`Zv7V{7puMP0(JyW%H*mDL$Boa=>CJtmxn$M_w64H z4L-bDd3{T-?*3o0vii2Cvi6TUhL;C5g&!9xT?lw2+RL+Q1&DCKQx=vRa)gYUardql ze{-6Ko>N;E91fXV)G~q-gQ$R{*#`JNP)|k^Ii;!2Bq+6fNox+n5YZe|Hpm6kP5jVX zf(SU`KT8LH1?gT$zp%dEpG-7s=b>$#Q=(F$)di@CF?q*I35ETzBTywzMZ&OTkO8z! zsNGF5oU4CmZBWDn#QTP6H`QU|A@VrIB_GK~nsY+bNi+B6iOubIH(xw^zP5bxpl{}n z7mCVIvg?1i_~)#flR#)yY(mvj_OAv8XN&}>-Eq41gINbRr@+vpul3=>ek+l8N7nL! zy#1stD_c<)M>RI`a4sCEp#d_1k-tq!sXVu?$%vL10ig;ewayqYmyqE-$+mg!W`XrS zb^($`>VF1<-}ojpK9Js{-kdZ?x~BqaW^-y(a+H^CVzeg$Z|m$|_e#|$uRtRZAnbEe z9z9P)V*IL3YqL|06OqjFg^U*{kg=#B)*&;c42g?U43ZAbxjtcH>zXx_x;&ey{K(hyWfO z!?L*sD-;6Sooc8q;!+GmdahQ_iSy{^z&PGy^veZ#*nsof*3P zdHQ*@2TDj?%}Rfr)z|&o8|Ao5&%j=HX@Y5S!J+`yV4yu5y3x>awA?z|bno`6ToY0) zb;XF3bRQ?KKhDj-j>$uEg3?FWVgLhvp{UAJJ!gC8oQbyWBufn%YVYbOFL8EuJ`ouii(mipfnvM_1;=_2 zEC}*PWBOQ(=luLrsVggn9%k=tB?*`S$9(aq_3&tBZgO&?^775);n4oY=|5GTT?6dt z*DHl+V#xb9uf96>cz@;m)J))$^Pg|;?Nuk~`pX4$!OIU>t*y^Sr?Q?6uXP@-cx&?G z6_<2rFVnZ;Z=Wl7Au(BeS2Hx(wq`-;0fgo@L{7q|y}b-O8HWf;F&QdwK~wRm%C-W9 zFF8rEYf|btNxUQflS$b(eh3w3q+fV&U(3Ts#v+13OD0KBcI{?YLFx&Kgr(EE)0kA{ zB}0%omX^-_lO?8D2d4qwrjDbbq5i_`?1;^`2a5}xL;IlNeHp}scW7Zj)0p5=}_!L>_ql@-r`^X4b+^y_A3Aas_*>1EiG#ui@eAFX#BydByeeEW8J zG*oD!V=Yi`*I%k18Mu9YYvBHc$*xc%-Nm<$pU!@MT6wK!_rjUGCO#&LYFA_CEfver zgd+Tqv)MZ}5Vv)0_7;28&VHTm>!-_P=nI9`G>ZgliUY_2Z7t9!nxFcND}%!3;L(X- zPeR7nU59qccS9&0$vBxU;fhrW{g%6$k3BHGZrEOTW&Q~SK7C1WRkv`c+Dp`-Q1<>A_f ztf`~PiG!&ID`rqrOH%-!LcJsn_3iGxE~&eHzPlwr?6Y|JQBCFSojdP)cK3EPSKjD} zZ>b*mUZT@zCmcmPih-Vo=Y+FYbw#0bLhD*Iv~`CZ;~3xr8zoMj4dq)96YY^ zqMF90n4yt|RtjJFk{iiA6-rp}43ZaQTAhxH%!8bzI&^uQiMIhi8UD3V@JBF4{`oWA z-S>ltylf6J(|v3sD(Ly}$AqN3h$XSZ@8=`bRgoTWG@7ZL1CK^}mj$ka8&~TCeXL*I z=-YoCJ_%IR>w^caqb4qcHwU{m4-fl``BZ7VqWLQkE58hP$hbF@r6G@B@W+U>g~OZRAxd91S^Eim?~0^%Rl(KOZ=^f(AFf~O z8L&^vI3wYg*JlD;(`PV@aGst>xTx6Y-blXSV9lpK1P}6@j zGyh!4GBPsed7uNs;~W4A7&~~Lu9CNDILOp&?9xJPYH4WqUXo$58z!62G{}i(+3VRk zfAd>k`viPCHL_FFa~F+|b%#|%xYe##ly@a}l|(Fbd16j|4s4c3qae3_kojI7dQ{Ih zVu~6A?F6>RX=F3_V**)A{Y9prote50`;1zG3JnRM$XpNhkQ8v{4i6 z`n0#_)SITBa=xavp6eH~Uh86H%w*zlWduBt@8okurM|+vq>(}xf8nZxW=GLy`!n4v zFxnS4jzBt`e%DFQkp}vLG3UZ{X~!caD%-Y-IO+6l5G&*r(Y^@Xv)l8#bz8iDdUBQUeT9V(jIKYI1m z@(v#pGuO8~Gk7!|ZdH7ydv>rquxGJzY;I~;V-bEs?YA=aY}vPd^?7qp*HJlN5>I^- zEOqf6c_TTSUwOr#@^-v#NWMy+m9*0luJmJ3nFLfBmU+p?#9MKNLKU@@28Qf}(U?*P zF71glHFf*#QDxWB)l)TrE-YPLLlV5~Q+TK&4hK{S)&-wRLvrD$ytbv>LeR4E{8XK2 zTL5SHm@w_D{R{*rl9Av2x`iP1d`@p%_rM9HXSU36q1_^Fqw9InW>9}>LLO%8(VkOr z7(Vn5zZ-pY%J4qU5Gp~dwSgmX5E zgDgqNXiQ9PE3d%All`8Es(q||bfru%B>GyS7)Wrw?u=9K2n8P*3AgkvUn+=n-|k3g z2_fXV!!G`QH%X;a@YO{3`{lkRFG!R1(W`5yZ@P7Hy|L+* zDANZ5Gpmn2eq4V(e3aG|Qs^E=W%F4tgTvp@1mPM8i?&pzk&?87gA zH}%`2$-+p6j*FfVP0R+fP@2%y5yzGh$*QkrSJi!+F_4R=@aE9K)YRiOL0M8u!m$g` z#3H8v-&zA0CmHB55>vA)GBXo+a8qog9aS$WfF9;5bcKHPH6fs;?))j`g&G?|v?a+B z3Aa7Hq4}6>h=#|Ok~qIVwX3!g{O;Ob=E`DE5H{^a18Ti>vg&kN;iz_{GcBXVTNM(1 zxAFd5i&F2*?WY$<1qPv+0yi96Jy%!&9*$xnz_E3ida4{8UE);CW(FnI7m;{^2Z})N zqFc(lr*8MmKU%)|yZ#ym`vjG3J;x_ zY;Bd~^b*aXg7KHhOKV+8XBuQmP&L zhd=vT5J0bw3s;@*)${jEA=z~8&;u0; zd&w70{?}in>xN(Rsn;WM%*`$FL0WGa8;7Ie1Wuvy`X~%4F%=0xfK>={SpSOfY`^ z>=l!yZ51_6m_8p*FEbh$5Y^iSjEJP7D-U!pRp*QZbCo$4YV);h3`Jl^H<9=Y)dW2b zibS9=Y>XLnD?fjlzDP=CI2u_iYv<-NHndA!*JgWnaTp=sx%E`4NeBi`pF#nI00fGw zE0#zFLcQx(7!R(UGLbfgS(~^;^2$&|&rhMWzwstq;+=e}3yA~-1mstaMtT9-`Z$Fv zBJm0{MXl5i({*)*zWI%>QwauUs`CSOYK)DeEU|^|shR6@liI*Ub3?%1|i{ zLfT0MTlWlJs#}ySduc}S6W6G!oj5&tOk;@Pje)L{3oAaZK8M9r4LZc)rL{Tp+0F4)Fo49jw2D z0~v!fa>FsGbRF&!k;F)vUnfFIt(Z7>XO0;Jp^}xx7-P^Du(l5fO;U6490!J*mAd;* zqmBcD>jN|Qakq~1<%(QQQel{XpAP>FCL52_<|qbkF(^@FLa7WQ%cK1Eo==vK1?f11 zT}ujZ63QT$pY)|b6|jPn7opNJg&Gm`DpEI&Z0Ac(zucPZK+Ey_ErSt+UK> zJpEK$wxwBQTHLz8he)~K!GS zklfbr_}bjM{E|~`9D_nPVo2);Mn5)%;jpG2SU4KgF-XF3U&ok0LORO8%7Eb?HPGq_ z$=c)Nst#7h9J_6+qYj#*Im)kr?U7?Az_YGk$qB%5xb&e=-FUM3|fXE+S<3- z(fGl^<86&Zw4QN@Z-9>#iw`D{xhJ70k-n%}K#|g2%>fAfdko~?^&JTw>E_x<+%X9W zT6NdtcuiC9V6$f_Qh(>XGPH;RA&78_fsLbys|{0niH$SRab)W=*^Ul4M|PNt4oy!N zK{cS+h*`Vo7X?O+3}YOZuH&L8ZvZbq(7&@A%{u5C9BnCI%J||;Xr!432@i*15HJXV zKmfYqu>%0vAd==F_H(f@(${lMX$vVxsK|NrVyMM{;^2sd7t|2kgl?L>IbB;^XAolCKi!l%zn`K}^5mc$^*e1Pl82$>6UcL7cqa zD*UO~SY(MTh+JyRm^-(tv7-k@wS}nf`v4OC};X1V@uGB!Ue~Af!_Ob~@5z za1s%YVCq9Ka7WC^1pD!`e3(VjSZQoTUcrVUIE7<}C53@Ld#JvPo^2%J-&Tabgb+0~ zch5Fv2xxSX%qs%!x0zCGXH}9=s-1L4>|Rh57M{dl@hB2Qm&UdwBhYxHZ63psMF%rN zED;R^YzVTgu8|{?B15n(0iBEH0FE^V!Ep;x_{JbWs6$}jSVt1g6jcE^x*i%qdthnxjwE;Zlqk4sguzHz61bjm0|9XcR8nh5+Dp@k58Hxzbtf5fs&-FAV69AtRg#si& zhCbVo!KTST+niuzY{LM$X%3x>#z24DUT{GG`$!nzwJ-#h2!|iPf@5GnG7LNj{5k#^ zuudorI2j}cfrECCfmjGfVvbjUj7Is(K-_c$kl<)zgC`>(yqy6FB)(XfB}=-ij`t@g z7^ZO|$D)^#6cy$YI!yFN$49QK>t~UOg1-H4Cjz{<-JF`ebUm6iABw77OMsjQ$Yk@9 zw)F}W?R>hju!08zav%>qwShkb$RPl~5o~KNjbq_KL;(ULFb7k;4v$6{L;fJQ7H+};$(>alPbxZq?2a1+4D zWH7+(9q~YbkN3v{*EhBD=0G5pz&KHo-C_lUnC;eHUghpp5hhAWj^{!y5~@JuN*7ur z@}M95n+5nLuG;QE_=WPl+U0B49}WgQsg0PC|nEH2rIvrpO0a*?l9d;$Y zIEjsjO(9fR<%W!vrX`wt5FuA7T@)wLcd?8$gueH0qoCgPM$J}TosO}PN=d`5E zOwbr#Sja|jd%NTBg*jpYywkSo+aUmC9>?f|0U|FWaGsgQ3_KD~#$ZTD*s<9d1Qr8~ z01`4_0Q}go@o2cIDG7lk!H6gX@Bsv9ZJ6ST5ZS^MA`;*j5*bc1B@tm99vX;lkAd%> ziw8dj4UC8B@$0{R@GraoKar+#gNS4j(m`+~xHyxFFe_-2S40wI$Nv}X2Fs2rj0?g^ zEKYhtpfUJwrlKiN8_!wg-=P~zm?%Rtk}3RH0ZA%zOEDy#7|02(F~FKKjM$9b?v&%- zgXaOk|F#JL+B}SL`eG0876HP<-;Och?!oae4AvAlFOm!Z5P>ws05LEeMS!pX&F~lq zPb7Pw$Pn3`0GV3iVSolrKv|F=fW#J0;0;b1xoxoDzN_@EeI>3NUBDXAtYfS=!bt@(72Z( z=-)0z_PaZ2i3T6K!TdF$R_oR#!}%KrjCgUPO_2Xx2QRvgIB|As zMN0Knms-|vkPGzD17BDnUKKxshWgHpiJ z4DGE-F(OC{p{$Pt*GXm~K+{8h!Sf%XV3MF%nzJOT#uVY}B(+v1$(;~IPlvyzZX7XY#>dA<^4kAi3tmQ?+&X&s%XfZov!}4Lc;WZ=zq+t=;jIf7-hVPv z>b-FL$gb}5Ck>w8*i#8gWV)%)IEdNL2qerD(1Pd41Y~m&gwA9bg3RS`h91<49I%VS+(4?JnmSrYKSZCyuokk{z>4G-;ig)QDtdWsD$ER`7A~V+_Su^`QW? z(y`ebG-8UB2nOikFR}dEVYdfhX!M4ucc1DZLeD&S_x$GmbNl!8!v!NJdH8E^aF(x3 z6wBl>>%mJdBexqz-+%ee`H;PW)P;^@79NDPyt=k}>**}rxX^$82bHclh9N(-7bO_K zUl2GqD_LA9hajS^AA&Ek#Wu}Itca*=(;~@Y6&GQyQzT))wrgopYg}|pE|F!%?<4%GW=TKnkSABX=u2hRnn*8rNc+HhmWBcf~ zFCRP~%G@ahd+UK3dF$K0Zpn|fcS^Hg_m2Po$>AMs?-`!(*Cdv$36>v)m`quK5U)|- zEalo5(jQA>sk~wn#8}I|lc5n*Y<-Gm7)gkRl{z7%<2lNoWtjFxzeHt`h$Ie;AzH{( zLrh8NT!+r-)$=1RAx+pqjg=%xNScWbj9A94Vo_piH9?SAcoAsj$pscJ*7ML}KDGPi zB*CugBhNf=%kB5d1SM@rLsP%1gVS=PZ66EZiYrTv-lHEE9=s`}jzcHzT!8__}&sb2@FoFjEfB-p7sFo?NxHUnRSb-^HzX%jcT0p;}N)pQ_ zPoE|^dB{iH(SUg(Fm|)Z5W=a7Ivh}hQuL+Ic6_Eblyrs*3N9hrbOOTyYTqT2*4nw2 zpK{$AyJN$#oQM`kCKKIO%dU9~jheUDY9;lvbwt*%ER=to`r)NRQo8lvw%Oi+{gqpb zndQeN=I~c@cM~otM$6PO&6Jm4EjCUbO%J@bVCiY0d=5AIPd@j{U1zpi9Skec3?$Utgv~-LE<%|ib`r+* z;ewOIet*$o5g3bD*h=a>>lgs=?AXt@eDmfZSvxf`IJY@7_NriHE;t06;Uy zm$_pUa5*71CeKa}?A;X7(@gn9?!7O*c;VBJzIbudY9Iyx{4f$N6&xd}zPXX05Dr!&-f4&MP(hn9 zI)ZWu9sLrnYY`)K_=GKYOwPch29zmTvh~`=K8cz#prCiwUOj&=CMw!1^fD zJOSwG#^;>C;^G$j7XY*5RYACVhB<_-9of`)*R?QmrRuGsnEBuYf$d@`R7Aee%t+Ee z94ooqbbI&FWdgTDthKv{n9O)CQ+92W@6ghw6V8aqFQ1GIX-!R5ibczo4W)@Cglw0^ zEDK`~!4X`Hq4+p~1TVWTAcx_Huw{8qqhkI6Q2pe?k*5ZH{!_(~{(SOutG$n@Gm-~j z_qkl~cm;R>w&#up0f3>84mZy*z~r zRO11{j=wWJJUseoxP;e=46hiz(ESYwma=dPT=4z$(6g)cWD_p*jXc431Y=_zhNdct zqjc#;I5m`bXelOWc|}!H;iw|Z`b@MVi6^QkWMQnyMpTodJOGgSr0f}QIF4g@26FT( zFa;n9%8B6jUFYxarH4=1`;RqmT|9d5JcH(>5+uQQpW6wh zhCu<==GKYDwXc>@@igLYeqeB9R{aaWOMCnO# z8@=>r71;9tIC4}oO;a_!$71DdjlVt`DD1t*_}ljuCSVlCj-}Stec9S%4=pMGGpjUIGD4ut(Baek>z|PsF`4( zHvpi4ML|8hEPD(LHotTT^)nPLM85C4;k7>fnUsS;N1aOs3QAMu&B+1vr(iss3ikF@;+>Js zbTEI5uIGDrW3;y?sE6}m)6`>Ke5F%w7qj-k9d^c)byW$QDrf*U6L14_Z8U8dGVdW^ zJC_bw9{}j+e7Wc5*H(z3p4{q~JC}jgidbz>Lx&ap-N$iCH^#UtuRW$!lAF6@V6ba( z)*3(HGK-JBaqs+vr#IetY3aR�@-f`%O25Iq%jy{^bYtx&u?w0|2I|o?j~8j5~7j zk$8ub*7-;!0y#c!I%+uF5t)Q?kx%QU*?T^$=i`w`s&gjR7mKH_PerEk`fm#gj`c*s zsYoOo)YN!P>skn=f{M9%y$+-8(Gq{622)k-PY8T$J;+C+Kp+r%w#!cmSnf!F*R%U( zoZwb&o}a((zIShW==#>?7BTc?CHU@aAvoc->C3J-rcsDGbEbE?=f1&Q@jyVWyV}*Y zYPD=*hQX3J_2g|g4OZ$N0Oykj@_zyVhZNm2MF9vZoOV3+cp)3B@p5!UU+kQS(`x{$4T5ewHmIU=4r*9x^ro)xqW5o4g>lfB*rv@|w7Ikwjo-1-7p585q6i z;bT+B+uR#*Vl6s|-`79Ve9P^-v;vMZ$0{kVn(8|+xd#R~FwSp+VGi`VTU(oyxfx@P zy88|=ar@~YQUf#@=!&y0uP^CEHJ0@H(;xvU%TCecab9Ftl9wwS z(B`-u`eS2OflWT_<;JOAI>u5I8;@^qlkscbdX&0G;C?TG`}|Zw0ULl@?Fe9By}f?S z>2-NsdzVi!?O=jlx3sQ&c@amN>_JjH45AUl&XNyq#K}}~5bxVR+I-7R|J@aKAg7-g zOEKe#`}!a3?tq3Kn%+T3*bVL(=x-9{7mS2vn_yt@^RjZN3j}~iL2(@C30ndm{DYc2 z29}L_S>5jw*a;M8C>|%t0!AA$RS-BvBQTn#^`xciu<|UYC+RVk+tkpPV~m%{2ox)@ z+uPf$7RSlDCd&lo1$|xOtTC2`d;Jw`HvGXsR{;EQZ@5e~H-i8}nKf(uJO(rF14EEw z7=p=wPB@0dxp9qJGd&ag2JUOS<+k1Si)$9062?nJPz!YI+aC-CeOhhpwev3?jyoP& zoqc*uIW!2w-5X`~P?ysd07`}Dd0B=F4xxatQOsW1K>E#!pI`*?Ag{0mirr58%t%3C zxLRFg1v)92#^zfeJ@Ux!3sX|%s8H7#o;4MoGT>896BtsUDFP+zx6=)meo4jP4^LuQ1t%D>Kovxm(twp*N`SmpM6c+&YDA0cKf`%y->zm1H7SX8ODxDL ztrhe!fdL38qp}nR)A=O$A|c~${q<+c7spVX_chQ6gGLkFwU|X6?e1W}lQpH;Y7jYo z=~|3H?Y!h*a4SOE}I<$0XL<(Tv>xGD4>v zPgR$snBjH!cZ{awG9CH+uSLL)&{VuiIOA;l3o-FvQ?p2mKMaiC@TCywyx@R z=%*XSXe|H!SMXB4=eJZdQ#6Y8x?W*rDQTsZq`-(E0ZK7xHco;9pe}sv@OPV+-^_vF z{|bP@59Y;AWn9Qz9;Y)fT~S|63?e5UZiVW9&t!Y|$dM-}5M~oo!mH3S~u!Dm;Uy#fDU4nU!tY zGFaAU1|NqfN0alchFiME2)bCO0eEh!X3|0|n#ts2m%jNC&QW@YW)#S|o2I2p7L&Fr zDnqBn7!iDuBsC38kt!4lpaAcM6$E>Sy`VV22f%k)1t;~H6hc}&t{^(EESHyuk<)$Q z75R?bBm$V~LB__gSc)7Z_8%D7bz1x;q)(zUbZv#{k_AVf!cIp^xmA|>^#0Swnp=$W z^2Ry;UC;pux~`UGw->{p{0Y1Kfjq?meG-5Q&nM&CQ0qxXr$jzxFkCWIxAa<#<}KAM zR`f{z+|@6?{^hqH7ROI=*GMCr&n#yu7DPu7KS-ekIFatqRTDA(C46{6s$St2omQm#1sTSne%-QT1)PMu09UX>D&gNkwM)zpP?q{mp+(c`1 zX1f|iy1yNfXBQ6zmKpnA^$Ca-+%a=7k04rxI7mPdg)>a*?$a~`01&A zC!U6c!poD$K9vx1F-Yh4jJCjZz^*RH2uzF|&l5ogYdhiM)MeA^X;M2KM;=D@oSQRa z(cVGm1ABZ|=KN3}L4Zd2?*xBZfVdY}fniF`k`S zm|ePZVKq102H76RzJOCapUXlJr1JTQnVzjix9N;jt0na@8sdN_6A}x6AmDB51JAL+ z?-(I?;44#m+77{LEBvsiU#K2Jjz5STeBt5N(@BT`^*AC+2k9AU2>14kHtoJj>UM-; z*k~bKB74~h1 z9K&gXZW-AKZRwVvnn}YfMrrNvn~74jI+L4SnxDIJVUb1b+>T?f-$|}4&E{stOQ1o@ zV$Dc~sYO*)N>)GtTI78kG$fj>0O7O8i?Yq1$9dq7qoL2=co0^V^twFsi<M=ydprsh1v&bt78Er)I?=+_ity;kaSl5{bkV&qZRExn)bBS1J}Q5*W*YpV$h> zJJ^xH2T_2A=B7uR+lP8xL#Y*J?U`!`GB$Zf3vzUFbYIT{s?mZ}L^MA`x`|+aAL6)m z_f4Y#k(4;4N;_rd&W_};qkVs%rF}g6YYsNxj=VZ+MQTINE|+VFnqKO{e7+qAwAn-P zGYrrND70nix+-noP{1=ERi-b6khYPt z?`EIN9q5G4P+zj?E=k}^KEFa(10Tja5;2#yaXa z_R*L2AR!G12?Wwe=#bE}Bs3{W2%#=5fT0EiNq}WVkSfL5RUuJSA|b2diaQoi#L5aR zEP{fAjaAS^v7Q&pUw3`~c4jBT`R;el`R={voLeCal4wElfot#XUff+6ZywJXex%=I zEVK?3j>B~#W1fawA7ZBmHD4Mjc~F{c^&d70W&Jy4S~(ze|C)~ z2up=9>%kBdaN3_xJ3TtR-d@`o1N%yP7Ih25MYDkSxj5E5il6D z*_y|9!3|(Ylu{w<=*`W}mc?gg^5Ki+hlyli7}Cy&>x2Lh;Fu?iT=5}MWKX{7($Eqg z%y)&l9jILhtu8*EmyY--nEc+MW3YQpr$c$be*@qG!Xr0Q*})4esfM@BQi+JOBqN3z zolK`*GN}s;u~}qDgbA8v8=3hR0M6wH`a=n^S}nm=KO6iWTYI%SE-kGir*VA6HeeeV zn{t{zVYizkI0_yB00{6QIPuPzt&s*mUr zhASB$=A-e;EsgJ$1QgZ8(42F@X!oPl?e$;vMj#%;_52G;&j3sbFxHJ4764ER4&YpV z%=dMYyg|MU7Oq08RG*0h>-8Nuy?MI-1|U?~8Le-QhCs3%Sc3mYKHh} z>cYAqPA-dAUQqH?+FZyc{{#bxFj(Y-07GD>aIzeaPw*s1@w+vjOyuK{>S}~k^6+ST zi8qx9JlN?gD$5xS4e%0krO1^$%62`13WLHut`4ycT9d*SRfG4@aC3jG~@zAo2L0~K#7=UotyfTidL#)NM#Nonj$ z_k;K(A6~qd+)zrElxO+(zh7A%o!VJKJ6(k|p*WA>;Wzs(is3jKcBd7EDn=wvgV_)C z*A=KTA@nJ-MUNZgX@<0p)rD~zm_KHAfb}C*n98zj-?FUDKfn0ab5G=jgu2nOqChB^ zfpQifAJxFTWovn2$>|7?5p1?zP={*Bo^qvDt5pnDWam0r06PSL0K_pMz*?CIgK@*O z00z1H6QRQtfKZ!|viF+Mo>nBLs3*=J`RJqQp}b1G2P4pnh`Zs+rbqZC`^X|y1_@b{ z6ytr;rKhd)k)DT&W8yM%QW3G%sLCFX^o08vMojXGnd<}k7t%DiKbHEilMbz{;E_0k zA*UHLehORtzt`T5nSVHM|8Vj3w_f`S?tNUbA|EI)ff5)WZh_?d?4e}~909_i(dd{O zs|RTWEWlC%+{q~vLy!~U#6+j#|ARnesbzslfci{w)F<7%O#4q+i2rnpe`m|7>AIFg z0zrq;`}nETrxJ-w4u|P-B_RNU!0q88rcS7d8{+!JQV3OU#~+W2SDdVKseV=Kfe$G) z^}VUDIL3ejX?KodgwGU-iZSz@%MYPXt5m8Bv^gMnhv7{z^AuP=;`IEjt+lna!`a#G zxsA=ejTc@DW|w1?&Qv^B@<3v9-t8^C{JvExGGgjs(Pf;tqSLLhQ}LJa6F^k zBK)sJ24OyMHz}A|QxGJN^JBzvk=kNXTE09drJaOhj?~@n(z##`)2?!1M+jjs*fz)& zC1HEs6JS21KFoaB?a5d3n(GJ091eI%ZKNBs-eSS5pZ{TQetFY=bg;J8ulAz5LZL?p z+;pQ-DH9H1&+QcM&Cad?1P~0my9b;;Ek;LIdTEfB_9;M)@CG--hcS-B<)2&^|17(Or$(0SqCosa%Xplj-UD@~m*GoY~ zGOvoXFpfxr^FH1*saJ_~4^8)U1gB&m?);@(Rj&$q_(2ZuoF9495A4@r%Ma$~V}jS9 zU+wK39-K4-_ZzzZGXDUmKR9eI1ygDE!ASxV zQARAP>?-m1f1t9f_BaVQ6wlQ+N@6@B+@L7s3TG(XdGj}Z)v`!QTCN~SMrmWsjj^iKRo)TSDnc0*W{ZJj^y{;*rGH?^v zzP`}}NCH>*q8tQ)SfP(R--p2uN6O3St*6qU)&i$u$H2eQ<5rz4PXclnI<*8tR+$F0 zFXX8qC8qk;7a;LL>~k2M<}ZW!;P+?2`p-8uwr7suA4;=+SYpn}iT4zMnh-<3jSn|S zEMP>2vcK8g-}w9&zyRX`_<|i$0=7$-!ju6>gWdHwc|H~ifCRb|8vP5o-cUgt#qb;| z4CWuU;gOJdacG;qLlN83^AJ*=fh0W?UiDtSyO@dkOA*{nS2{uAzF=mlj$0v*l z)RKZyWGHgJJ>sE9!(v!0QaXy@?z-Yf<^0%8K08dVWqF;XyHr(|RmvV6ZK=!4Ny>s+ zS8t^?wyrtYoebp}SsYnmpYU8R*sqQ=KS<4^PR?T&+H$4`|IWp-NrRl zm?}5SuUBU9V{o}_CYdAQXrR~x9tz@nUFzOE+TY*b#z2?@8f+cdmzS5Upbxi8y*tgCSTAO>hh#a8`1km46NnI>GsK z@*b@p!&cuZc`Q!z|5^L}Z-4#u^5w;D`?xtCu8a6gWws(S5b7XUfyv1pVM@P0AcW69yc!caSr!%2R z(*S0TNgjv72`SR~C zuPm)ryvdB@Ng|V!u|2+_(F`VsFGv=+!vmD=Y^El;_^riF41;fvW-uCjzBlj8i}nc! zh?q2RN@N2T3}sIh@}W^AK`d~WJtc~KyDU;Yb&{q2nn2#L;sxHVzLHq4-r;q(ynpE&V2D z`|pd3zy0?0_rIJ!(E#Oou!Z6U@I_5cBq@s=?8h#T;RLz|W^u^{0vFAECsK?JI;BF*dq5kc!*2;|&+o_hj`6aw39 zq^C8awfXq{Vvi_BIPUJ-u4bn0H6j6<&)^%hon>9L5GXmOqo{A!d!w{kU3f7R_xJZ+ zx=_!63Y7?7yl=sKg>u`N1IRxC);lx)#^1~b;yaE1`RAWM{qEE6C#F8RAR&txTsY45 z5LRb;(*szsJANE@m=hsR;INYz9&&ht3H~>R!KM>~Bf#MEU-r(<0}UV=01eEOgOBPT zdnz^%b^$cFn|L?dFYgB?9;vA&oD_PJZZ)!ac{DqNWzh&$;iB1BDB9{Jp5=m z;f*)qT1H31Tab{H{$WkUBVGXv--u2M^?{#Wm@-b-53t4me8Xw|Wz6S+%b$YnKYs_` zr{8`5;QpLR9el}y3Rn4XKmmvRA`(X;U`FG;=@c537|3IZ3TTg1HKTfhK|2eXFW3lk?uP@&1bPh})#Zun(3ctbOgk0I?;^w!P7Z<+(In+Emzx)gQ-mfn&!Y^S8 zVPg(>V43*gaX6xZ*SC^of$!)w*+-dF1l1vdYGPS^aZycWlQcCHX&+53dGDv_m~dY- zoqprBS36bJgWbs!k%!Xa1-y15Q3o_aJ5zeo$|_G4r_|sG zX83V9P*P4I5os>;U@t}>OpUew3adT0x3{;pWN8@F_u0A|%nf_{@Vmc%yD@V#Gqe4} zoV{I&LyigIykBXR@b;F(&^Q#0glUoE4_9Zj)E2dcyZGi+qNf^lL^Pb_8;!gE>L1wh zV|auyG|IS0ZdW29^fc^;AFi)yd8A$1nvu*zh(%8slC*`az$ATMEy1Oz>z%^BRr}ns z!)CHrW=*C6$AH6b9A9wEjudWzEC5Bg-F(qvGAmetZZ09D08dDKOwaNNYBWkjDRk(7 zmF}?P-xTu5^3S*IAb!@?mW)d#Rob9lKQO4@-F0lebJjZ9|M83S{qN4pq5rFDI4z73 zv~`ZxJX1|XysI)&Pobd?6*W~Rrngkmp_MGL{Jpkxe0XRSmxR?uT`dJtm}Fiuxk4^u zlpH7GTQaIDPZo`~Mc14vLZU=O9Gd?QKQ?DLh84h@?jgC>C?20hkOx&yBPXkA@xOglc-n+G9EHZ!$d<`Fm&XPJEpb@$8C-Q zt;9U3y2J~MS14DEwu{Qu@pA<-QQb3U4Y|C|AK^qM^e#z!EU%LA283+Q;+D2>w!qWB1d7exug(4*dyt&fAhA}6sON!>H1zWS|TrlgWG1H-OWn{``92qg0*8TW0 z%PUVm_r>#XJV10!NQiNF^-Q2ZkBlo3E}qKXe|KUvSIygDxXbiu`js*BE_5K@^|txKX@sav*U(y?F{miyvz4$K1!ruEw*$T4dPxArKZZis~kb6 zb!cN=9f^{TqRfOF|JNf!_oR@S7zNZR+=5`ltqbjGYdYTOOFuoxL$Dh?n(ja)R20IN zmh1`b-RNoa2-5>D?3h8xZ=_uuV2V_VX8Gh&uD<&K22|Qd&ZKy$`Wk+G1*WdQ@&Y%8 z!O0>d+z%&W1SAIGz548n2gYUzD}y9O$*{W~d?ZKRIH)R3{-oJ9w(2;eQY$-#>!*5y zHM1ipX%rY_?;XuzJ*M@E-PF?HjxE7mET$Jvr&4QkO2S*I*ciyf{?;;rR7#78K<@Z| zuMDwS3{fN}TOCg>Z*xN)s4cJSDN5}+{;&WC64Vt(MAzR5<{O5Ou^55wRA}my6!vqm z5<%EYPfgCvC;Rb&f@2kfO38)s!j&BJ5|hn3uT=F7KK=1iC5{=>&`>$h)&(v3XrO!j zqQy3)3JW4jQ3}e-)m}`if4mVMj!b*wrMQw4mOb;};5ktc(}Usl?!+gQ5CV)A2v1Fz zsOLq_G>BthJ)&SYMQ`d!A(XWfVA!31UKRT2bo>4EaCjag8ky6@*HVw4XgWjbrr5puTx+>zX zT3Dc7xH4{K7aVn1S^;5ab`%F4TxJxNQOEW7x;i?JGdl_@{)S_KPRjrO{eS=8@AFlu zW%-W6(#eQ4zlzIiuylD)YNpG{;)dj+xC@Dl&F6GYhiU=}zK_5-9Llu&9At{FFI;=! zW{3Iruiw3GGDq&}>#na&OcVfU*$C&#YDJ{1KWwCS|9CN8Td>_k6Yc#4H_zNjN)(Yo z2(?!VoP@HWWWA)RrfzFN`S%Vi5#DDns*0}PSk*(0P~^v#8Y!q)#RQg~z^DgQmw~OEVAJxL$9i$MtWE&ON16@bx-tL2(Vga6FDIS+Qp5 zY@8un_=4>-Eo_!R`}%&^2CCs211u0ulFHk2vaS)bT%h=eGTlGFa_2msciL@$VmB7&Ay9yP3dc4!#{Y93r1prL3slwy(JO`Q-}3 zt^22Clus_TRoAaCoS&PZ0?>Zk6Ae6gr6}jfcMB;N8XZolLUuk)U@XmW*R%&k`@6ln zj*SULZX71Srhi*)S`bw$OcK@Fb(^Ahmd#3!{h$j&EFg&B>pzGl1`wjV&###pn@vH6 zXhA`)TJN4dC6yD6=z3yo&y_nXM}K$i^!(z;xd#o6nJ@0u6)S<8q^|T=wyno|ezw>|uFaB99ln|KFCI-K0{ewY645-J~qs zok4i73syh;Z-{MM@s_r9FJcQG{IF?t@#J$l$2VbhB%;D_*T_72kLzp`8-;{Vh9)*B&G8NP$QlhtJ?L_lmH;n+g|Jv zagf!vlB-b3sLqSaHk<=rh|@7^-cQ!d`M*4Y^N@E-FOMY{81~8mD}sZ}9ctLp9eZZF zo{L)q0yhuzHU3?DLaqc#P>!T*bG;|r;zmvuqo{_{$EL-|KQ8EMM{HvMVN+4d$-r2v zi!`MFYy*eu?{DdHRe6w;9+@*W)cryg%z^a_Oq+muZEn!P!7w5J%A0TIaVoE0bL7aV zP+tS0NQc$OcZ6WS1iAnV57U~~`IhZ737lpzVl9D?JOtV8Y?Nw2B!Gi=zfK_Sxjhpe z5h3CzzI}0_klYx5O`Hh7aVIbG+7~1g!uIJ9$2&@MQM}R2_jz0-wr{MhcjQ4gi+14} zKl^R6V%`QVhec_+x5H6gb4^h=(9IQ#9F+D@3L*NX`P6)t7pVH}&gG`8Cd6&~O|O4wbl}+VXtaaN#crQ`y&}KyXhYJd z24)brL{9&D--wD!!NI_aT+gR=4BkHV$34LhAwUQprVa^PJ4E zgKNw)MTBl(Hc&T1$d%iTqg=;Y3W(p-A&fY7E3G8O2qiAKTB04Ze^6ZT=#A-M@ zJ`9>x9tcB=VeT5=d_B+B*w+b(BX}hygybi}eCi9g6spzE5)6$HQvJRJBOc-di#XL0k(g9VrRa%wAr!Cbw{CmXpqV)6>% z_=6=vyRqUwltuKf-8cF;a32V?9mlZtw)oj`E=s)Q6TU59iMA_@6UbtVdefw)K@&QsJ#vnniryehx=>!Nd~j!1pl8_UwXMnTlAUJYJ!8J z+uB9IaUp@5WC0vW|7ZYJLDh3j-?kLX<-r9BG4KN)UV8c|k<#kWfxbb_vdvgKoj~IB zaXi}PP8@HCoeK(6QbjC;k;QK;-p#-MqY9ydkCVY9Z~}S!yi;dNty~vQc=tkmxx6ug zklj>OOQ2A?rHGVw^mg=gm^$lZ_OWs)DYeH7{B zK^I_()fbuhW?4ab0`*mE*n^5KW)HQSEvWn9E^?nf@tF3F2 zhvY^D0rhU?#I9 z#dP~{`53`=(<0i#AY&fhfGxz$0SB%EK!)39a%#=xKme+$a}~Fdh!fmAg{po*c;*3S zhUs5y*5@^iG)t2}$O9Dw9yq(0!tlb}WTDT_5Sg5qcD1vvD2QZ@H7g6Jn(I0ge5tu) zaCiBIl5B?%&%gO#VmOQie6k!!8z|^Iyk|m*19^#Qzt}FLjGsH-sH;8w^)d=WP}40& zSeHexk<3X>M-K z^}*}qW~nq9i@TNiI}RLxl3{sneueVht?OkaowmI~L62VQh}K+sWyT=0CbLHn_Sx#FQU*33?_yNI1A{F?3+hikYQ}i$rb_`UvC$ zJQ8~n;ZmzZt4-DxOzyPinHotB29OYTAUjH=#?jP#OBVsVBLutq&u@<0YdX4HnKbf! za`6TSkIPd>R_5lmOw_L4*il+=p}J|Ybm!)ls8<6q3~=&-@=#DwbmP{;Pm{ z2Dez?xhv$O?Q^_5{nNu-YTiU|zwY(qPKg#LR9Ux2RJTj-u|fiPqU^_jEVn zgh<2TK3nA8o!3hN`sl#LLg)f6lMd~fICb^hjS3a4fpRDtQ0ClSUt3o>f}xb)Q6wOi4xTm{+?#$;WawWk43ogkUOe!xS-u9Dbn{NB7Utb9Z;TEyOfXMFoV%#(9 z>7w!OHVq`5?!37uuY0wzF&Ojd&Y#R)e;N> znWi zoeQ<|g>KrNHdLFSn!2h=5B0Z&xkj}&k(xhn_2^(hheXbUw)0@`hqKS34wz0qTVAVL z{MnbblNe$NhlUZSYjlc;6%Pv_1lE!TYSXs;+x9j**FCD?xm}e+0z+H~1U@o*&qvsC zmq1d>_Z1cNm05jPpEfARUI+{oC~8C}wL1~Ci2^&;K&4$6h$Qi!Q0x1t)%8)^W4#c-SuMkCOVx2#bRVfX-r~gBDrmUyW|O$vP(lfb@_ZJ(a|yu-ES~LVgZ88)fsinHd*mmFbg|xr zxzB3@aj$(J2}v22aEf%#_Y1I@<4%NT_ia;d|KZ|% zc%%Jp0s7D*Za;X$A7Rmcf{3@`o~jFP=8Kw|$}kqz*vUcZDq*-q15`~Mocz|Zdt4L< z;G-{pp*}a7xB2RB11_|yeQ+pl%xf0dTYDSe;K)j`2;z$b5Ye2>GTG=Lm@EtnF-d`J z25Ecd<)bC$+=A!6I3f|l@Ebw=zEuRypE%=6N4@g_;`Lf)Y`Tw8&-CID38K$Q{Jf$;YA`*YRW z_O|K1zA{BJ=wLV$Oe?|u0)%93822x~aNhbS#+aZlaKl3U(MyMS71T=epZ)ozyA%mq zhJMM(YS|eFgfm98xqwt>`31azuxbX&b9-JnRt(yx9uRN1XN+jS)jwdl92AFwFz%qU1u;c3 zNfnmwK0UYGY0?$iPQCW~qZJN0k0GbG4Gbf!&K5(Kk#QUckQ^Hl6}X5#vZGY6^rhnI zx5nS)<~`*8|2Du$W)6tl?Ks`FcJL+{Z72bWPoO1Z1fbpgiwdQJz%@8A?qRV5BtpQ7 zwyw`z{C251R~yMMU7ovos60eCxiut>sRcc#U{?@Z|gBL3Fk-Xx= zfBfmSTpYH3#B7_MRJWEY~ZM#-$tNHd< zzxufn2?<*tFf~0)5V5Ccrwk6fem`Qlx?5?O0~}N}vZX9=_M6$+7?+0qpSD0{;KPML z-adhl<%LyXNoz>kjmro14nuXL3?S+$zrQ#u>8xqYww(RN7zSw7?nJ_n&txsLc>!z1 z;NkPnU#|u(l6HIkm4y={N3Wi|dKA1NsHQmy$s==Dn_oDwP>`o%fIJQR5C7_`p94L) z4L~)~(?eLq5H`1Dc*uQV%-zAmFf3Kv0f_I(kvlf-%yV6{eiod6%=oh)8R|c4AAXwI z2XL=m9nfD{IJX|Eur&^ZD8tr6qu_quUL6}B9<^}9m}QEKm*{I7OkSqw)+uysFYWu? z@8(Y3SiJ{aAZ0F4)bgjMx}eUg%V5j97s+L4Om}Ua*PeglwHFW6D+!zoK<9a*aS~w} zH+-U~b#K?VvxpVW1X%6ITPsoG=)uh$oX`ERyUWY5cnI8Oc_a~lx6h?#;qcwmx}1P? z;>KV(6*ZL<$Pt~Lup`g~pj)R?08nQHuZGJjifXm_kY$J9jsQ&j+ooH6FW!Ig%z+(^ zzzc#z0%$YX-AIM4sj>9P)gNDc?c%SO7j=9lmVgk#66u)0qe+amMJq8Nw^r?n38ida z#qij^I6_sw>9526&waal0Oz^AFeVTKhiu6IyuE7^s&s37jzU%7w&}u&LvedWLn&aU zqn*Pd7KV|-F0K=EP2s}v%s^YzCKaRyGI1VLfDEX8;a*+I{=U;MLOH}Mhky6u*DpZ= z8IxRl{{H!2AKf~ZN(jh}%4gU-=y0or6N^T(84Ek^cH+1=OdvrKuo5y;7!qxL=D`$e z>Z{KzwUOeu7Z+J990cqCzhX}yvD*%h_Pm*-v}Sm0F_{L6 zMV6bLLi*x%VNa?H2S7FggSRbsU$ycwN zd*q%+|} zIMP{>Gn>K05ueqr!MtfV#M!dHcxgIJ_J8w;EuYV}fCRI^jdR{M0Q{&|0eGZV%Bs?m za`Srmp&_r=bfGkpL@;(vxn!FW8T6d3OPt}h=+g93FTo83)j+0di_5h7A~(E^hg-S^ zdc(1}-=BcB4oPR0;iXKgANBx$jF$kf*x9qx+tHpisq%{2)5Gm4AS!DJMvtU*=D^to zEPeX9*=}=)id$g&_dCJ;`!CyjVX^`j*e8pqL(zuC6C>54n4z;y$EZ%oJ34bbEfjk^ zENB}anjN0au!R&Qi*VCRt*uMm9v8SysdQ^*HNR;!zrm#I=-`0klwfm6%Xqpw-71cX zg<`nv2)erW=9%;P(87+C&g#;*oXBudmt3b5j?a&dcZ+*T zwo{`+C{J%N+oob+#Oi_jkWtFZW|z7mrlNAO%7;}}V!gc}d08BdcD2lkydE)53!KKa zAM|g_5M94M-B?s)h3QYr?J_%O6P*74eS6PS9InRgkXw}zyU?9iu=(=^w8wO1p-u-$ z9zqu;cE?yf$BVn;f({Q7%N-RG#<59HdD|c;_V8GVuC3Fpl^i(vDvZ-(DUT4v+aTf* zS0TK_01AprQ>j$6731;LdRDqS98=aRt6VuoOhgcPTf*O>iE7frnJ|eEJ$CTKN_Ma2 z?6c2|54TcDg;awJK$L^^UhsbZNA|&YqW}o25CUmL5;B?^7Y28vMYr>=th9vLTmdZ} z8VX~K@5+H-XpT9wH!})=ABdj|#ZeWqK{RpJrNKlkc`rQW?9zADE-xZF5;>LHi^!|w#R-{tf13xS?3 zv#s4Zbsdx`ia;LJEQhog|Lo?*L^#YMMLu05DL_cj?H-`Hl|(p(!fDL_8t@{x@T4nY z%BMw&0(p_Q)!(C)Ym>N!*0|cbj}2vTgivnHk^RLbZesM+!<#{eJS3MUVEEk@;U)sF#H7T{qKCo|K2|OZUp(buo=qIezsV)x^Q`UaF|f!O)QqqYGLxCpb#S5 zYMV7_sxRFi7G(lFXsw0Sg?H_0Xjqz_Zpo%ZLIMxFxV3zJrl*52Q+kSk4xmYdP;9*a z+O0(st=RnRw}vv?RlX2kYP9-jx0mzOx}j z(7;&XdaEXP?Jr+d3c_1o`Br(VElP+bQa4jrWT|}L``_`{*t?#1AJ1!{<#M$)Vhn&# zUwO^JD<^k1yQ1abOUFi&k9J(u)PaWLZsdsp~zJIuHv8_;L4N78u4PiIt_&)N~yWa6Q*$1Cs ziCrGMoPsV;2!)=^m6dCI4jK4zNc%3|akJj6W+B8O5^dw-I1fUap3L~vSn=`Vtc3<6 zFfk#pj81p=_ISiB1ZLe{f9KlZt$Lf$VOxIn+cPbxRzJwoC}lKwettRtk?+UNKKv9C zdpsJ7;%n0&8ziq?pICU|+^q^VrMNe-cB`hbNQEOXNcP2P8X!_UxC|1Ysm2(HkI@1) z+Az#xE~uG2ae1ZQ7Pm%+zWu%B>G7o=4@p{-kT@c6SzNrQKk$yn(LT0`EAkrcKDipQ z`*5~MWt-?c(Y$-*o!tPn!h02tHsji+Ovp@~Syf{G3_-no41 z@|~4NTf}JZ82$dMCrb^6R16OY+&yuZ)oyfqKmG2VL4%P$!k%PE!swq1VD0laJ@NQW{=eT1-@oZ2L6-tf1glZ2lUf60j;?5Z z@y_Q#3wl)r8X-Blyz0&yHFtL0WJ>E`PAuHIb7F%HQd8P_p=tGAu92_k&F(mP>F7-H zdVa0aiwOlXl~e+XG9I_*sSi9}Ti-vicRu+v5^5|KyTi&TOXSFtNxs&$er4_Y!99CU ztgS{sKU|@Zs_x#i<-?=G6|i-K4Whz~aD+^GuVw4!zICbZ(9W`wCbNo9hHxk;FsiM9 zz_5Jc$;ai~e_PM!=?@VSCQHi4m%h~pc4=g_x^r#e#3_J_9ozxLP+P4Qh_Et7F9g;= zUQ=Vuw7eRIu6N}CK-O*Wkba;F?JRm`oyt*}h~Z(9G>H2Bz)@BTDxf#ML#XH<4{ zDEU+}YzbrhDZwlI9NDmU%~f(2>-NGr_!x0|2Jhl4svjC{BuNSe}X~Y-uq}e9Qc(z zk(BCM Date: Wed, 30 Oct 2024 20:11:16 -0700 Subject: [PATCH 07/85] add Character > Classes > 'Enable Ritual casting on all casters' --- .../Api/DatabaseHelper-RELEASE.cs | 3 + .../ChangelogHistory.txt | 1 + .../Displays/ClassesDisplay.cs | 7 +++ .../Displays/GeneralDisplay.cs | 7 +++ .../Models/SharedSpellsContext.cs | 2 +- .../Models/SrdAndHouseRulesContext.cs | 55 +++++++++++++++++++ SolastaUnfinishedBusiness/Settings.cs | 1 + .../Translations/de/Settings-de.txt | 1 + .../Translations/en/Settings-en.txt | 1 + .../Translations/es/Settings-es.txt | 1 + .../Translations/fr/Settings-fr.txt | 1 + .../Translations/it/Settings-it.txt | 1 + .../Translations/ja/Settings-ja.txt | 1 + .../Translations/ko/Settings-ko.txt | 1 + .../Translations/pt-BR/Settings-pt-BR.txt | 1 + .../Translations/ru/Settings-ru.txt | 1 + .../Translations/zh-CN/Settings-zh-CN.txt | 1 + 17 files changed, 85 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 87c075251f..4331265e01 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -1551,6 +1551,9 @@ internal static class FeatureDefinitionEquipmentAffinitys internal static class FeatureDefinitionFeatureSets { + internal static FeatureDefinitionFeatureSet FeatureSetClericRitualCasting { get; } = + GetDefinition("FeatureSetClericRitualCasting"); + internal static FeatureDefinitionFeatureSet FeatureSetSorcererChildRiftRiftwalk { get; } = GetDefinition("FeatureSetSorcererChildRiftRiftwalk"); diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 5d47239b7c..fcc94beb59 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,5 +1,6 @@ 1.5.97.37: +- added Character > Classes > 'Enable Ritual casting on all casters' [OneDnd] - added Character > Classes > 'Enable Wizard to learn Scholar at level 2' [OneDnd] - added Character > Subclasses > 'Swap Abjurer abjuration savant with 5e 2024 version' [OneDnd] - added Character > Subclasses > 'Swap Evoker evocation savant with 5e 2024 version' [OneDnd] diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index a2b8f7f768..d814967e88 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -22,6 +22,13 @@ internal static void DisplayClasses() SrdAndHouseRulesContext.SwitchDruidAllowMetalArmor(); } + toggle = Main.Settings.EnableRitualOnAllCasters; + if (UI.Toggle(Gui.Localize("ModUi/&EnableRitualOnAllCasters"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableRitualOnAllCasters = toggle; + SrdAndHouseRulesContext.SwitchEnableRitualOnAllCasters(); + } + toggle = Main.Settings.GrantScimitarSpecializationToBardRogue; if (UI.Toggle(Gui.Localize("ModUi/&GrantScimitarSpecializationToBarkMonkRogue"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 8c33c17451..ab2d5aba61 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -260,6 +260,13 @@ private static void DisplayOneDnd() SrdAndHouseRulesContext.SwitchDruidAllowMetalArmor(); } + toggle = Main.Settings.EnableRitualOnAllCasters; + if (UI.Toggle(Gui.Localize("ModUi/&EnableRitualOnAllCasters"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableRitualOnAllCasters = toggle; + SrdAndHouseRulesContext.SwitchEnableRitualOnAllCasters(); + } + UI.Label(); toggle = Main.Settings.EnableBarbarianBrutalStrike; diff --git a/SolastaUnfinishedBusiness/Models/SharedSpellsContext.cs b/SolastaUnfinishedBusiness/Models/SharedSpellsContext.cs index 7a8d79eda9..ffe34bd968 100644 --- a/SolastaUnfinishedBusiness/Models/SharedSpellsContext.cs +++ b/SolastaUnfinishedBusiness/Models/SharedSpellsContext.cs @@ -42,7 +42,7 @@ internal static class SharedSpellsContext { InventorClass.ClassName, CasterProgression.HalfRoundUp } }; - private static readonly Dictionary SubclassCasterType = new() + internal static readonly Dictionary SubclassCasterType = new() { { MartialSpellblade.Name, CasterProgression.OneThird }, { RoguishArcaneScoundrel.Name, CasterProgression.OneThird }, diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index 9f937e67c0..61a1242fd8 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -20,6 +20,7 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ItemDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionRegenerations; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionFeatureSets; namespace SolastaUnfinishedBusiness.Models; @@ -329,6 +330,44 @@ internal static void SwitchDruidAllowMetalArmor() } } + internal static void SwitchEnableRitualOnAllCasters() + { + var subclasses = SharedSpellsContext.SubclassCasterType.Keys.Select(GetDefinition); + + if (Main.Settings.EnableRitualOnAllCasters) + { + Paladin.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetClericRitualCasting, + Main.Settings.EnablePaladinSpellCastingAtLevel1 ? 1 : 2)); + Ranger.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetClericRitualCasting, + Main.Settings.EnableRangerSpellCastingAtLevel1 ? 1 : 2)); + Sorcerer.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetClericRitualCasting, 1)); + } + else + { + Paladin.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureSetClericRitualCasting); + Ranger.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureSetClericRitualCasting); + Sorcerer.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureSetClericRitualCasting); + } + + Paladin.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + Ranger.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + Sorcerer.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + + foreach (var subclass in subclasses) + { + if (Main.Settings.EnableRitualOnAllCasters) + { + subclass.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetClericRitualCasting, 3)); + } + else + { + subclass.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureSetClericRitualCasting); + } + + subclass.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + } + internal static void SwitchMagicStaffFoci() { if (!Main.Settings.MakeAllMagicStaveArcaneFoci) @@ -447,6 +486,13 @@ internal static void SwitchOneDndPaladinLearnSpellCastingAtOne() featureUnlock.level = level; } + // allows back and forth compatibility with EnableRitualOnAllCasters + foreach (var featureUnlock in Paladin.FeatureUnlocks + .Where(x => x.FeatureDefinition == FeatureSetClericRitualCasting)) + { + featureUnlock.level = level; + } + Paladin.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); if (Main.Settings.EnablePaladinSpellCastingAtLevel1) @@ -473,6 +519,13 @@ internal static void SwitchOneDndRangerLearnSpellCastingAtOne() featureUnlock.level = level; } + // allows back and forth compatibility with EnableRitualOnAllCasters + foreach (var featureUnlock in Ranger.FeatureUnlocks + .Where(x => x.FeatureDefinition == FeatureSetClericRitualCasting)) + { + featureUnlock.level = level; + } + Ranger.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); if (Main.Settings.EnableRangerSpellCastingAtLevel1) @@ -566,6 +619,8 @@ internal static void SwitchOneDndWizardScholar() { Wizard.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PointPoolWizardScholar); } + + Wizard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchFilterOnHideousLaughter() diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 7093ed50b5..0f50bbaad9 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -260,6 +260,7 @@ public class Settings : UnityModManager.ModSettings // public bool AllowDruidToWearMetalArmor { get; set; } + public bool EnableRitualOnAllCasters { get; set; } public bool GrantScimitarSpecializationToBardRogue { get; set; } public bool EnableBarbarianBrutalStrike { get; set; } public bool DisableBarbarianBrutalCritical { get; set; } diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 5a7cc0d36c..c38d38db40 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -151,6 +151,7 @@ ModUi/&EnableRangerNatureShroudAt10=Aktivieren Sie die Funktion N ModUi/&EnableRangerSpellCastingAtLevel1=Ermöglicht Ranger, Zaubersprüche auf Stufe 1 statt 2 zu erlangen. ModUi/&EnableRelearnSpells=Aktivieren Sie die Auswahl von Zaubersprüchen oder Zaubersprüchen, die Sie bereits aus anderen Quellen gelernt haben. ModUi/&EnableRespecAction=Aktivieren Sie RESPEC nach der Rest-Aktion [RESPEC nicht während einer Multiplayer-Sitzung verwenden] +ModUi/&EnableRitualOnAllCasters=Aktivieren Sie das Wirken von Ritualen für alle Zauberer ModUi/&EnableRogueCunningStrike=Aktiviere Cunning Strike und Devious Strike auf den Leveln 5 und 14 [du lässt 1 Schleichangriffswürfel für zusätzliche Treffereffekte weg] ModUi/&EnableRogueFightingStyle=Aktiviere die Auswahl Kampfstil auf Stufe 2. ModUi/&EnableRogueSteadyAim=Aktivieren Sie Zielen ohne Unterbrechung auf Stufe 3 [Bonusaktion verschafft einen Vorteil bei Ihrem nächsten Angriffswurf in der aktuellen Runde, wenn Sie sich noch nicht bewegt haben] diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 8b4429021b..88a44999e1 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -151,6 +151,7 @@ ModUi/&EnableRangerNatureShroudAt10=Enable Nature's Veil ModUi/&EnableRangerSpellCastingAtLevel1=Enable Ranger acquire spellcasting at level 1 instead of 2 ModUi/&EnableRelearnSpells=Enable selection of cantrips or spells already learned from other sources ModUi/&EnableRespecAction=Enable the RESPEC after rest action [don't use RESPEC during a multiplayer session] +ModUi/&EnableRitualOnAllCasters=Enable Ritual casting on all casters ModUi/&EnableRogueCunningStrike=Enable Cunning Strike and Devious Strike at levels 5 and 14 [you let forgo 1 sneak attack dice for additional hit effects] ModUi/&EnableRogueFightingStyle=Enable Fighting Style choice at level 2 ModUi/&EnableRogueSteadyAim=Enable Steady Aim at level 3 [bonus action gives advantage on your next attack roll in the current turn if you haven't moved yet] diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 22fed3ed3f..0924c1385b 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -152,6 +152,7 @@ ModUi/&EnableRangerNatureShroudAt10=Habilita la característica V ModUi/&EnableRangerSpellCastingAtLevel1=Habilitar Ranger para adquirir lanzamiento de hechizos en el nivel 1 en lugar de 2 ModUi/&EnableRelearnSpells=Habilitar la selección de trucos o hechizos ya aprendidos de otras fuentes ModUi/&EnableRespecAction=Habilitar la acción RESPECT después del descanso [no usar RESPECT durante una sesión multijugador] +ModUi/&EnableRitualOnAllCasters=Habilitar el lanzamiento de Ritual para todos los lanzadores ModUi/&EnableRogueCunningStrike=Habilita Golpe astuto y Golpe tortuoso en los niveles 5 y 14 [dejas de usar 1 dado de ataque furtivo para obtener efectos de golpe adicionales] ModUi/&EnableRogueFightingStyle=Habilitar la opción Estilo de lucha en el nivel 2 ModUi/&EnableRogueSteadyAim=Habilita Apunta firme en el nivel 3 [la acción adicional otorga ventaja en tu próxima tirada de ataque en el turno actual si aún no te has movido] diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 2086bbbce9..225acc101b 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -151,6 +151,7 @@ ModUi/&EnableRangerNatureShroudAt10=Activez la fonction Voile de ModUi/&EnableRangerSpellCastingAtLevel1=Permettre au Ranger d'acquérir le lancement de sorts au niveau 1 au lieu de 2 ModUi/&EnableRelearnSpells=Activer la sélection de sorts ou de sorts déjà appris à partir d'autres sources ModUi/&EnableRespecAction=Activer l'action RESPEC après le repos [ne pas utiliser RESPEC pendant une session multijoueur] +ModUi/&EnableRitualOnAllCasters=Activer le lancement de rituel sur tous les lanceurs ModUi/&EnableRogueCunningStrike=Activez Cunning Strike et Devious Strike aux niveaux 5 et 14 [vous renoncez à 1 dé d'attaque sournoise pour des effets de coup supplémentaires] ModUi/&EnableRogueFightingStyle=Activer le choix du Style de combat au niveau 2 ModUi/&EnableRogueSteadyAim=Activez la Visée constante au niveau 3 [l'action bonus donne un avantage sur votre prochain jet d'attaque dans le tour en cours si vous n'avez pas encore bougé] diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 1eddfaeb30..a61822102d 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -151,6 +151,7 @@ ModUi/&EnableRangerNatureShroudAt10=Abilita la funzione Velo dell ModUi/&EnableRangerSpellCastingAtLevel1=Abilita Ranger ad acquisire lancio di incantesimi al livello 1 invece che 2 ModUi/&EnableRelearnSpells=Abilita la selezione di trucchetti o incantesimi già appresi da altre fonti ModUi/&EnableRespecAction=Abilita RESPEC dopo l'azione di riposo [non usare RESPEC durante una sessione multigiocatore] +ModUi/&EnableRitualOnAllCasters=Abilita il lancio di Rituale su tutti i lanciatori ModUi/&EnableRogueCunningStrike=Abilita Colpo astuto e Colpo subdolo ai livelli 5 e 14 [rinuncia a 1 dado di attacco furtivo per effetti di colpo aggiuntivi] ModUi/&EnableRogueFightingStyle=Abilita la scelta Stile di combattimento al livello 2 ModUi/&EnableRogueSteadyAim=Abilita Mira Fissa al livello 3 [l'azione bonus fornisce vantaggio al tuo prossimo tiro di attacco nel turno corrente se non ti sei ancora mosso] diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 0549c21db5..71d6eba03f 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -151,6 +151,7 @@ ModUi/&EnableRangerNatureShroudAt10=レベル 10 で 自然のベ ModUi/&EnableRangerSpellCastingAtLevel1=レンジャーがレベル2ではなくレベル1で呪文詠唱を獲得できるようにします ModUi/&EnableRelearnSpells=他のソースからすでに学習したキャントリップや呪文を選択できるようにする ModUi/&EnableRespecAction=休憩アクション後に RESPEC を有効にします [マルチプレイヤーセッション中は RESPEC を使用しないでください] +ModUi/&EnableRitualOnAllCasters=すべてのキャスター儀式の詠唱を有効にする ModUi/&EnableRogueCunningStrike=レベル 5 と 14 で 狡猾な一撃 と 邪悪な一撃 を有効にします [追加のヒット効果を得るために、スニーク アタック ダイスを 1 つ放棄します] ModUi/&EnableRogueFightingStyle=レベル2で戦闘スタイルの選択を有効にする ModUi/&EnableRogueSteadyAim=レベル 3 で Steady Aim を有効にします [ボーナス アクションにより、まだ移動していない場合、現在のターンの次の攻撃ロールにアドバンテージが与えられます] diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index ea98132499..f7b92a88b7 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -151,6 +151,7 @@ ModUi/&EnableRangerNatureShroudAt10=레벨 10에서 자연의 베 ModUi/&EnableRangerSpellCastingAtLevel1=레인저가 레벨 2가 아닌 레벨 1에서 주문 시전 능력을 획득할 수 있도록 합니다. ModUi/&EnableRelearnSpells=다른 출처에서 이미 배운 주문이나 주문 선택 가능 ModUi/&EnableRespecAction=휴식 동작 후 RESPEC 활성화 [멀티플레이어 세션 동안 RESPEC 사용하지 마세요] +ModUi/&EnableRitualOnAllCasters=모든 캐스터에게 의식 주문을 활성화합니다. ModUi/&EnableRogueCunningStrike=레벨 5와 14에서 교활한 일격과 사악한 일격을 활성화합니다. [추가 적중 효과를 위해 몰래 공격 주사위 1개를 포기합니다] ModUi/&EnableRogueFightingStyle=레벨 2에서 격투 스타일 선택 가능 ModUi/&EnableRogueSteadyAim=레벨 3에서 안정적인 조준을 활성화합니다. [현재 턴에서 아직 이동하지 않았다면 다음 공격 굴림에 보너스 액션이 유리해집니다.] diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index e993663834..5a3ecbc0ac 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -151,6 +151,7 @@ ModUi/&EnableRangerNatureShroudAt10=Habilite o recurso Véu da Na ModUi/&EnableRangerSpellCastingAtLevel1=Habilitar Ranger a adquirir conjuração no nível 1 em vez de 2 ModUi/&EnableRelearnSpells=Habilitar seleção de truques ou magias já aprendidas de outras fontes ModUi/&EnableRespecAction=Habilitar RESPEC após a ação de descanso [não usar RESPEC durante uma sessão multijogador] +ModUi/&EnableRitualOnAllCasters=Habilitar a conjuração de Ritual em todos os conjuradores ModUi/&EnableRogueCunningStrike=Habilite Golpe Astuto e Golpe Desonesto nos níveis 5 e 14 [você deixa de lado 1 dado de ataque furtivo para efeitos de acerto adicionais] ModUi/&EnableRogueFightingStyle=Habilitar a escolha Estilo de luta no nível 2 ModUi/&EnableRogueSteadyAim=Habilite Miração Firme no nível 3 [ação bônus dá vantagem na sua próxima jogada de ataque no turno atual se você ainda não se moveu] diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index cbeab8e7ab..7581c366a2 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -151,6 +151,7 @@ ModUi/&EnableRangerNatureShroudAt10=Включить умение Следопыту возможность наложения заклинаний на 1-м уровне вместо 2-го [OneDnd] ModUi/&EnableRelearnSpells=Включить возможность выбирать заговоры или заклинания, уже известные из других источников ModUi/&EnableRespecAction=Включить возможность РЕСПЕКа после отдыха [не используйте РЕСПЕК в многопользовательских сессиях] +ModUi/&EnableRitualOnAllCasters=Включить ритуальное заклинание для всех заклинателей ModUi/&EnableRogueCunningStrike=Включить умения Хитрого удара и Коварного удара на уровнях 5 и 14 соответственно [вы отказываетесь от 1 кости скрытой атаки для применения дополнительных эффектов] ModUi/&EnableRogueFightingStyle=Включить выбор Боевого стиля на уровне 2 ModUi/&EnableRogueSteadyAim=Включить Точное прицеливание на уровне 3 [бонусным действием даёт преимущество на следующий бросок атаки в текущем ходу, если вы ещё не перемещались] diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 4f17632592..113ce3cf47 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -151,6 +151,7 @@ ModUi/&EnableRangerNatureShroudAt10=在 10 级时启用自然面 ModUi/&EnableRangerSpellCastingAtLevel1=使Ranger在 1 级(而非 2 级)获得施法能力 ModUi/&EnableRelearnSpells=可以选择已从其他来源学到的法术或咒语 ModUi/&EnableRespecAction=休息操作后启用 RESPEC [在多人游戏会话期间不要使用 RESPEC] +ModUi/&EnableRitualOnAllCasters=允许所有施法者施放仪式 ModUi/&EnableRogueCunningStrike=在等级 5 和 14 时启用狡猾打击和阴险打击 [你放弃 1 个偷袭骰子以获得额外的命中效果] ModUi/&EnableRogueFightingStyle=在第 2 级启用战斗风格选择 ModUi/&EnableRogueSteadyAim=在 3 级时启用稳定瞄准 [如果您尚未移动,则奖励行动会在当前回合的下一次攻击掷骰中提供优势] From 66aecd5506ea129de298838c511cceb211b3672e Mon Sep 17 00:00:00 2001 From: BradS Date: Tue, 29 Oct 2024 19:58:01 -0700 Subject: [PATCH 08/85] Add bonus action to recharge Arcane Ward; Update combat log text for Arcane Ward interactions. --- .../Subclasses/WizardAbjuration.cs | 77 ++++++++++++++++++- .../en/SubClasses/WizardAbjuration-en.txt | 12 ++- 2 files changed, 83 insertions(+), 6 deletions(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs b/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs index 588055be5c..9610a937b1 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs @@ -18,6 +18,7 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSavingThrowAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSubclassChoices; using Resources = SolastaUnfinishedBusiness.Properties.Resources; +using SolastaUnfinishedBusiness.Validators; namespace SolastaUnfinishedBusiness.Subclasses; @@ -28,6 +29,7 @@ public sealed class WizardAbjuration : AbstractSubclass internal const string SpellTag = "Abjurer"; private const string ArcaneWardConditionName = $"Condition{Name}ArcaneWard"; private const string ProjectedWardConditionName = $"Condition{Name}ProjectedWard"; + private const int WardRechargeMultiplier = 2; private static FeatureDefinitionPower _powerArcaneWard; @@ -208,7 +210,7 @@ public WizardAbjuration() Subclass = CharacterSubclassDefinitionBuilder .Create(Name) .SetGuiPresentation(Category.Subclass, Sprites.GetSprite(Name, Resources.WizardAbjuration, 256)) - .AddFeaturesAtLevel(2, MagicAffinitySavant, PowerArcaneWard) + .AddFeaturesAtLevel(2, MagicAffinitySavant, PowerArcaneWard, BuildRechargeArcaneWard()) .AddFeaturesAtLevel(6, powerProjectedWard) .AddFeaturesAtLevel(10, featureSetImprovedAbjuration) .AddFeaturesAtLevel(14, featureSetSpellResistance) @@ -286,13 +288,31 @@ private static ConditionDefinition BuildArcaneWardCondition() // marks Arcane Ward as active return ConditionDefinitionBuilder .Create(ArcaneWardConditionName) - .SetGuiPresentation(Category.Condition, Gui.NoLocalization) + .SetGuiPresentation( + Category.Condition, + Gui.NoLocalization, + ConditionDefinitions.ConditionShielded.GuiPresentation.SpriteReference) .SetConditionType(ConditionType.Beneficial) .SetSilent(Silent.WhenRefreshedOrRemoved) .SetPossessive() .AddToDB(); } + private static FeatureDefinitionPower BuildRechargeArcaneWard() + { + var powerRechargeArcaneWard = FeatureDefinitionPowerBuilder + .Create($"Power{Name}RechargeArcaneWard") + .SetGuiPresentation(Category.Feature, + $"Feature/&Power{Name}RechargeArcaneWardDescription", + FeatureDefinitionPowers.PowerTraditionCourtMageSpellShield) + .SetUsesFixed(ActivationTime.BonusAction, RechargeRate.AtWill) + .SetShowCasting(false) + .AddToDB(); + powerRechargeArcaneWard.AddCustomSubFeatures(new CustomBehaviorRechargeArcaneWard(powerRechargeArcaneWard)); + + return powerRechargeArcaneWard; + } + private static int LimitArcaneWardRecharge(RulesetCharacter character, RulesetUsablePower _, int maxUses) { return IsBg3Mode @@ -328,7 +348,7 @@ private static void ArcaneWardModifyDamage( (ConsoleStyleDuplet.ParameterType.Positive, prevented.ToString())); character.UpdateUsageForPower(PowerArcaneWard, spent); - roll.modifier -= prevented; + //roll.modifier -= prevented; damage -= prevented; } @@ -416,8 +436,12 @@ public IEnumerator OnMagicEffectFinishedByMe(CharacterAction action, { // if ward already exists, update pool var usablePowerArcaneWard = PowerProvider.Get(PowerArcaneWard, rulesetCharacter); + var amount = WardRechargeMultiplier * spellCast.EffectLevel; + + rulesetCharacter.UpdateUsageForPowerPool(-amount, usablePowerArcaneWard); - rulesetCharacter.UpdateUsageForPowerPool(-2 * spellCast.EffectLevel, usablePowerArcaneWard); + rulesetCharacter.LogCharacterUsedFeature(PowerArcaneWard, "Feedback/&ArcaneWardRecharge", true, + (ConsoleStyleDuplet.ParameterType.Positive, amount.ToString())); } if (!hasActiveWardCondition) @@ -440,6 +464,51 @@ public IEnumerator OnMagicEffectFinishedByMe(CharacterAction action, } } + private sealed class CustomBehaviorRechargeArcaneWard(FeatureDefinition feature) + : IValidatePowerUse, IPowerOrSpellFinishedByMe + { + public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) + { + var battleManager = ServiceRepository.GetService() as GameLocationBattleManager; + var actionService = ServiceRepository.GetService(); + var count = actionService.PendingReactionRequestGroups.Count; + var glc = action.ActingCharacter; + + var actionParams = new CharacterActionParams(glc, ActionDefinitions.Id.SpendSpellSlot) + { + IntParameter = 1, + StringParameter = feature.Name, + SpellRepertoire = glc.RulesetCharacter.GetClassSpellRepertoire(WizardClass) + }; + + actionService.ReactToSpendSpellSlot(actionParams); + yield return battleManager.WaitForReactions(glc, actionService, count); + + if (actionParams.ReactionValidated) + { + EffectHelpers.StartVisualEffect(glc, glc, Shield, EffectHelpers.EffectType.QuickCaster); + + // recharge ward + var amount = WardRechargeMultiplier * actionParams.IntParameter; + glc.RulesetCharacter.UpdateUsageForPower(PowerArcaneWard, -amount); + + glc.RulesetCharacter.LogCharacterUsedFeature(PowerArcaneWard, "Feedback/&ArcaneWardRecharge", true, + (ConsoleStyleDuplet.ParameterType.Positive, amount.ToString())); + } + + yield break; + } + + public bool CanUsePower(RulesetCharacter rulesetCharacter, FeatureDefinitionPower _) + { + var usablePower = PowerProvider.Get(PowerArcaneWard, rulesetCharacter); + var rulesetRepertoire = rulesetCharacter.GetClassSpellRepertoire(WizardClass); + + return rulesetRepertoire.AtLeastOneSpellSlotAvailable() && + rulesetCharacter.GetRemainingUsesOfPower(usablePower) < rulesetCharacter.GetMaxUsesOfPower(usablePower); + } + } + private sealed class CustomBehaviorProjectedWard( FeatureDefinitionPower projectedWard, ConditionDefinition conditionProjectedWard) : ITryAlterOutcomeAttack, ITryAlterOutcomeSavingThrow diff --git a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardAbjuration-en.txt b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardAbjuration-en.txt index 15263b708b..418db4a974 100644 --- a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardAbjuration-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardAbjuration-en.txt @@ -4,9 +4,11 @@ Feature/&MagicAffinityWizardAbjurationSavant2024Title=Abjuration Savant Feature/&MagicAffinityWizardAbjurationScriberDescription=Beginning when you select this school at 2nd level, the gold and time you must spend to copy an Evocation spell into your spellbook is halved. Feature/&MagicAffinityWizardAbjurationScriberTitle=Abjuration Savant Feature/&PowerWizardAbjurationArcaneWardBG3Description=The residual magic of your spells forms a ward around you that protects you from harm. Each time you cast an Abjuration spell, the intensity of the ward increases by the spell's Level, up to a maximum of 2x your Wizard level.\When you take damage, the ward blocks an amount of damage equal to its intensity, and its intensity decreases by 1.\nAfter each Long Rest, the ward's intensity resets, and becomes the same as your Wizard level. -Feature/&PowerWizardAbjurationArcaneWardDescription=When you cast an abjuration spell of 1st+ level, you create a magical ward on yourself that lasts until you finish a long rest. The ward has hit points equal to twice your wizard level + your Intelligence modifier. Whenever you take damage, the ward takes the damage instead. Whenever you cast an abjuration spell of 1st+ level, the ward regains a number of hit points equal to twice the level of the spell. +Feature/&PowerWizardAbjurationArcaneWardDescription=When you cast an abjuration spell of 1st+ level, you create a magical ward on yourself that lasts until you finish a long rest. The ward has hit points equal to twice your wizard level + your Intelligence modifier. Whenever you take damage, the ward takes the damage instead. Whenever you cast an abjuration spell of 1st+ level, the ward regains a number of hit points equal to 2x the level of the expended spell slot. Feature/&PowerWizardAbjurationArcaneWardReduceDamageTitle=Arcane Ward Feature/&PowerWizardAbjurationArcaneWardTitle=Arcane Ward +Feature/&PowerWizardAbjurationRechargeArcaneWardDescription=As a bonus action, expend a spell slot to have your Arcane Ward regains a Hit Points equal to 2x the level of the expended spell slot.. +Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=Recharge Arcane Ward Feature/&PowerWizardAbjurationImprovedAbjurationDescription=Add your Proficiency Bonus to Counterspell and Dispel Magic ability checks. Feature/&PowerWizardAbjurationImprovedAbjurationTitle=Improved Abjuration Feature/&PowerWizardAbjurationProjectedWardDescription=When an ally that you can see within 30 feet of you takes damage, you can use your reaction to cause your Arcane Ward to absorb that damage. If this damage reduces the ward to 0 hit points, the warded creature takes any remaining damage. @@ -14,7 +16,13 @@ Feature/&PowerWizardAbjurationProjectedWardTitle=Projected Ward Feature/&PowerWizardAbjurationSpellResistanceDescription=Gain advantage on saving throws against spells, and resistance to spell damage. Feature/&PowerWizardAbjurationSpellResistanceTitle=Spell Resistance Feedback/&ArcaneWard={0} has {1} and reduces damage by {2} +Feedback/&ArcaneWardRecharge={0}'s {1} regains {2} Hit Points. Feedback/&ProjectedWard={0} uses {1} to reduce damage taken by {2} +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardDescription=Expend a spell slot to have your Arcane Ward regains a Hit Points equal to 2x the level of the expended spell slot. +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactDescription=Expend spell slot +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactTitle=Recharge Ward +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardTitle=Recharge Arcane Ward +Reaction/&SubitemSelectPowerWizardAbjurationRechargeArcaneWardTitle=Select slot Reaction/&SpendPowerProjectedWardDescription={0} is about to take damage. {1} can react and project their Arcane Ward to reduce the damage. Reaction/&SpendPowerProjectedWardReactDescription=Absorb damage with your Arcane Ward. Reaction/&SpendPowerProjectedWardReactTitle=Project Ward @@ -23,4 +31,4 @@ Subclass/&WizardAbjurationDescription=The School of Abjuration emphasizes magic Subclass/&WizardAbjurationTitle=Abjurer Tag/&AbjurerSpellSpecialTagTitle=Subclass Spells Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=You have {0} of {1} Arcane Ward.\nWhen you take damage, the ward blocks an amount of damage equal to its intensity, and its intensity decreases by 1. After you cast an Abjuration spell the intensity of the ward increases by the spell's Level, up to a maximum of 2x your Wizard level. -Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=You have {0} of {1} Arcane Ward.\nWhenever you take damage, the ward reduces damage by its value and is decreased by damage amount prevented. Whenever you cast an abjuration spell of 1st+ level, the ward regains a number of hit points equal to twice the level of the spell. +Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=You have {0} of {1} Arcane Ward.\nWhenever you take damage, the ward reduces damage by its value and is decreased by damage amount prevented. Whenever you cast an abjuration spell of 1st+ level, the ward regains a number of hit points equal to 2x the level of the expended spell slot. From 56446d18eba22a9cf8557202311b58c99169ea30 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 31 Oct 2024 09:58:43 -0700 Subject: [PATCH 09/85] finish add recharge bonus action to Wizard Abjuration arcane ward --- .../UnfinishedBusinessBlueprints/Assets.txt | 2 + .../WizardAbjuration.json | 5 + .../ConditionWizardAbjurationArcaneWard.json | 6 +- ...werWizardAbjurationRechargeArcaneWard.json | 202 ++++++++++++++++++ Documentation/Subclasses.md | 6 +- .../ChangelogHistory.txt | 3 +- .../Subclasses/WizardAbjuration.cs | 47 ++-- .../de/SubClasses/WizardAbjuration-de.txt | 12 +- .../es/SubClasses/WizardAbjuration-es.txt | 12 +- .../fr/SubClasses/WizardAbjuration-fr.txt | 12 +- .../it/SubClasses/WizardAbjuration-it.txt | 12 +- .../ja/SubClasses/WizardAbjuration-ja.txt | 12 +- .../ko/SubClasses/WizardAbjuration-ko.txt | 12 +- .../SubClasses/WizardAbjuration-pt-BR.txt | 12 +- .../ru/SubClasses/WizardAbjuration-ru.txt | 12 +- .../SubClasses/WizardAbjuration-zh-CN.txt | 12 +- 16 files changed, 337 insertions(+), 42 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardAbjurationRechargeArcaneWard.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index fdc4f95e26..da3bb1dabc 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -4030,6 +4030,7 @@ PowerWizardAbjurationArcaneWard FeatureDefinitionPower FeatureDefinition a39f1fd PowerWizardAbjurationCounterDispel FeatureDefinitionPower FeatureDefinition bb3dc809-d4fc-58d1-9c3f-47865a44f9d3 PowerWizardAbjurationCounterSpell FeatureDefinitionPower FeatureDefinition 5c26015f-2992-5a44-b77a-2a500eb56f92 PowerWizardAbjurationProjectedWard FeatureDefinitionPower FeatureDefinition 35a98c67-3237-58b1-90d7-55ec6bf7f271 +PowerWizardAbjurationRechargeArcaneWard FeatureDefinitionPower FeatureDefinition c0673e0e-8ccb-5096-9925-39df946bea31 PowerWizardAbjurationSpellResistance FeatureDefinitionPower FeatureDefinition 1d8d2eac-b9a4-5ae4-b216-249f07b31de6 PowerWizardGraviturgistDensity FeatureDefinitionPower FeatureDefinition 96177598-5836-5bf8-8cfc-b60925a95ea9 PowerWizardGraviturgistDensityDecrease FeatureDefinitionPowerSharedPool FeatureDefinition 54c63225-a407-56a3-b385-951e49b831a9 @@ -6850,6 +6851,7 @@ PowerWizardAbjurationArcaneWard FeatureDefinitionPower FeatureDefinitionPower a3 PowerWizardAbjurationCounterDispel FeatureDefinitionPower FeatureDefinitionPower bb3dc809-d4fc-58d1-9c3f-47865a44f9d3 PowerWizardAbjurationCounterSpell FeatureDefinitionPower FeatureDefinitionPower 5c26015f-2992-5a44-b77a-2a500eb56f92 PowerWizardAbjurationProjectedWard FeatureDefinitionPower FeatureDefinitionPower 35a98c67-3237-58b1-90d7-55ec6bf7f271 +PowerWizardAbjurationRechargeArcaneWard FeatureDefinitionPower FeatureDefinitionPower c0673e0e-8ccb-5096-9925-39df946bea31 PowerWizardAbjurationSpellResistance FeatureDefinitionPower FeatureDefinitionPower 1d8d2eac-b9a4-5ae4-b216-249f07b31de6 PowerWizardGraviturgistDensity FeatureDefinitionPower FeatureDefinitionPower 96177598-5836-5bf8-8cfc-b60925a95ea9 PowerWizardGraviturgistDensityDecrease FeatureDefinitionPowerSharedPool FeatureDefinitionPower 54c63225-a407-56a3-b385-951e49b831a9 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/CharacterSubclassDefinition/WizardAbjuration.json b/Diagnostics/UnfinishedBusinessBlueprints/CharacterSubclassDefinition/WizardAbjuration.json index d07fbc7f25..df487b80e6 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/CharacterSubclassDefinition/WizardAbjuration.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/CharacterSubclassDefinition/WizardAbjuration.json @@ -11,6 +11,11 @@ "featureDefinition": "Definition:PowerWizardAbjurationArcaneWard:a39f1fde-05ec-5204-bb0c-9f28b345b754", "level": 2 }, + { + "$type": "FeatureUnlockByLevel, Assembly-CSharp", + "featureDefinition": "Definition:PowerWizardAbjurationRechargeArcaneWard:c0673e0e-8ccb-5096-9925-39df946bea31", + "level": 2 + }, { "$type": "FeatureUnlockByLevel, Assembly-CSharp", "featureDefinition": "Definition:PowerWizardAbjurationProjectedWard:35a98c67-3237-58b1-90d7-55ec6bf7f271", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWizardAbjurationArcaneWard.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWizardAbjurationArcaneWard.json index 3de3a8eda3..52b148d1f6 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWizardAbjurationArcaneWard.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWizardAbjurationArcaneWard.json @@ -132,9 +132,9 @@ "description": "Feature/&NoContentTitle", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "869bb1641c1c46242931a9fb5819c792", + "m_SubObjectName": "ConditionShielded", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardAbjurationRechargeArcaneWard.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardAbjurationRechargeArcaneWard.json new file mode 100644 index 0000000000..45904836c3 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardAbjurationRechargeArcaneWard.json @@ -0,0 +1,202 @@ +{ + "$type": "FeatureDefinitionPower, Assembly-CSharp", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "Equiped", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "AllCharacterAndGadgets", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Instantaneous", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": false, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": null, + "casterSelfParticleReference": null, + "casterQuickSpellParticleReference": null, + "targetParticleReference": null, + "effectParticleReference": null, + "effectSubTargetParticleReference": null, + "zoneParticleReference": null, + "beforeImpactParticleReference": null, + "impactParticleReference": null, + "activeEffectImpactParticleReference": null, + "activeEffectCellStartParticleReference": null, + "activeEffectCellParticleReference": null, + "activeEffectCellEndParticleReference": null, + "activeEffectSurfaceStartParticleReference": null, + "activeEffectSurfaceParticleReference": null, + "activeEffectSurfaceEndParticleReference": null, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": null, + "emissiveBorderCellParticleReference": null, + "emissiveBorderCellEndParticleReference": null, + "emissiveBorderSurfaceStartParticleReference": null, + "emissiveBorderSurfaceParticleReference": null, + "emissiveBorderSurfaceEndParticleReference": null, + "conditionStartParticleReference": null, + "conditionParticleReference": null, + "conditionEndParticleReference": null, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "BonusAction", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "AtWill", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": false, + "showCasting": false, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerWizardAbjurationRechargeArcaneWardTitle", + "description": "Feature/&PowerWizardAbjurationRechargeArcaneWardDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "6c14bf8bd38332e40a72e9ff6efc12e2", + "m_SubObjectName": "SpellShield", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "c0673e0e-8ccb-5096-9925-39df946bea31", + "contentPack": 9999, + "name": "PowerWizardAbjurationRechargeArcaneWard" +} \ No newline at end of file diff --git a/Documentation/Subclasses.md b/Documentation/Subclasses.md index d24aa56dbd..0e76d7a750 100644 --- a/Documentation/Subclasses.md +++ b/Documentation/Subclasses.md @@ -6789,7 +6789,11 @@ Beginning when you select this school at 2nd level, the gold and time you must s * Arcane Ward -When you cast an abjuration spell of 1st+ level, you create a magical ward on yourself that lasts until you finish a long rest. The ward has hit points equal to twice your wizard level + your Intelligence modifier. Whenever you take damage, the ward takes the damage instead. Whenever you cast an abjuration spell of 1st+ level, the ward regains a number of hit points equal to twice the level of the spell. +When you cast an abjuration spell of 1st+ level, you create a magical ward on yourself that lasts until you finish a long rest. The ward has hit points equal to twice your wizard level + your Intelligence modifier. Whenever you take damage, the ward takes the damage instead. Whenever you cast an abjuration spell of 1st+ level, the ward regains a number of hit points equal to 2x the level of the expended spell slot. + +* Recharge Arcane Ward + +As a bonus action, expend a spell slot to have your Arcane Ward regains a Hit Points equal to 2x the level of the expended spell slot.. ### Level 6 diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index fcc94beb59..13ef190cd3 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -4,7 +4,8 @@ - added Character > Classes > 'Enable Wizard to learn Scholar at level 2' [OneDnd] - added Character > Subclasses > 'Swap Abjurer abjuration savant with 5e 2024 version' [OneDnd] - added Character > Subclasses > 'Swap Evoker evocation savant with 5e 2024 version' [OneDnd] -- fixed Wizard Graviturgist descriptions, SFX, and behaviors +- added recharge bonus action to Wizard Abjuration arcane ward +- improved Wizard Graviturgist descriptions, SFX, and behaviors - renamed mod UI tabletop sections to 5e 2014, and 5e 2024 KNOWN ISSUES: diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs b/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs index 9610a937b1..32ac5f87b0 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs @@ -18,7 +18,6 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSavingThrowAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSubclassChoices; using Resources = SolastaUnfinishedBusiness.Properties.Resources; -using SolastaUnfinishedBusiness.Validators; namespace SolastaUnfinishedBusiness.Subclasses; @@ -305,7 +304,7 @@ private static FeatureDefinitionPower BuildRechargeArcaneWard() .SetGuiPresentation(Category.Feature, $"Feature/&Power{Name}RechargeArcaneWardDescription", FeatureDefinitionPowers.PowerTraditionCourtMageSpellShield) - .SetUsesFixed(ActivationTime.BonusAction, RechargeRate.AtWill) + .SetUsesFixed(ActivationTime.BonusAction) .SetShowCasting(false) .AddToDB(); powerRechargeArcaneWard.AddCustomSubFeatures(new CustomBehaviorRechargeArcaneWard(powerRechargeArcaneWard)); @@ -328,14 +327,14 @@ private static bool HasActiveArcaneWard(RulesetCharacter character) private static ModifySustainedDamageHandler ArcaneWardModifyDamage() { - return (RulesetCharacter character, ref int damage, string _, bool _, ulong _, RollInfo roll) => + return (RulesetCharacter character, ref int damage, string _, bool _, ulong _, RollInfo _) => { - ArcaneWardModifyDamage(character, ref damage, roll); + ArcaneWardModifyDamage(character, ref damage); }; } private static void ArcaneWardModifyDamage( - RulesetCharacter character, ref int damage, RollInfo roll, RulesetCharacter affected = null) + RulesetCharacter character, ref int damage, RulesetCharacter affected = null) { if (!HasActiveArcaneWard(character)) { return; } @@ -348,13 +347,13 @@ private static void ArcaneWardModifyDamage( (ConsoleStyleDuplet.ParameterType.Positive, prevented.ToString())); character.UpdateUsageForPower(PowerArcaneWard, spent); - //roll.modifier -= prevented; + damage -= prevented; } private static ModifySustainedDamageHandler ProjectedWardModifyDamage() { - return (RulesetCharacter character, ref int damage, string _, bool _, ulong _, RollInfo roll) => + return (RulesetCharacter character, ref int damage, string _, bool _, ulong _, RollInfo _) => { if (!character.TryGetConditionOfCategoryAndType(AttributeDefinitions.TagEffect, ProjectedWardConditionName, out var condition)) { return; } @@ -362,7 +361,7 @@ private static ModifySustainedDamageHandler ProjectedWardModifyDamage() var protector = EffectHelpers.GetCharacterByGuid(condition.sourceGuid); if (!HasActiveArcaneWard(protector)) { return; } - ArcaneWardModifyDamage(protector, ref damage, roll, character); + ArcaneWardModifyDamage(protector, ref damage, character); }; } @@ -441,7 +440,7 @@ public IEnumerator OnMagicEffectFinishedByMe(CharacterAction action, rulesetCharacter.UpdateUsageForPowerPool(-amount, usablePowerArcaneWard); rulesetCharacter.LogCharacterUsedFeature(PowerArcaneWard, "Feedback/&ArcaneWardRecharge", true, - (ConsoleStyleDuplet.ParameterType.Positive, amount.ToString())); + (ConsoleStyleDuplet.ParameterType.Positive, amount.ToString())); } if (!hasActiveWardCondition) @@ -470,6 +469,12 @@ private sealed class CustomBehaviorRechargeArcaneWard(FeatureDefinition feature) public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) { var battleManager = ServiceRepository.GetService() as GameLocationBattleManager; + + if (!battleManager) + { + yield break; + } + var actionService = ServiceRepository.GetService(); var count = actionService.PendingReactionRequestGroups.Count; var glc = action.ActingCharacter; @@ -482,21 +487,24 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, }; actionService.ReactToSpendSpellSlot(actionParams); + yield return battleManager.WaitForReactions(glc, actionService, count); - if (actionParams.ReactionValidated) + if (!actionParams.ReactionValidated) { - EffectHelpers.StartVisualEffect(glc, glc, Shield, EffectHelpers.EffectType.QuickCaster); + yield break; + } - // recharge ward - var amount = WardRechargeMultiplier * actionParams.IntParameter; - glc.RulesetCharacter.UpdateUsageForPower(PowerArcaneWard, -amount); + EffectHelpers.StartVisualEffect(glc, glc, Shield, EffectHelpers.EffectType.QuickCaster); - glc.RulesetCharacter.LogCharacterUsedFeature(PowerArcaneWard, "Feedback/&ArcaneWardRecharge", true, - (ConsoleStyleDuplet.ParameterType.Positive, amount.ToString())); - } + // recharge ward + var amount = WardRechargeMultiplier * actionParams.IntParameter; - yield break; + glc.RulesetCharacter.UpdateUsageForPower(PowerArcaneWard, -amount); + + glc.RulesetCharacter.LogCharacterUsedFeature( + PowerArcaneWard, "Feedback/&ArcaneWardRecharge", true, + (ConsoleStyleDuplet.ParameterType.Positive, amount.ToString())); } public bool CanUsePower(RulesetCharacter rulesetCharacter, FeatureDefinitionPower _) @@ -505,7 +513,8 @@ public bool CanUsePower(RulesetCharacter rulesetCharacter, FeatureDefinitionPowe var rulesetRepertoire = rulesetCharacter.GetClassSpellRepertoire(WizardClass); return rulesetRepertoire.AtLeastOneSpellSlotAvailable() && - rulesetCharacter.GetRemainingUsesOfPower(usablePower) < rulesetCharacter.GetMaxUsesOfPower(usablePower); + rulesetCharacter.GetRemainingUsesOfPower(usablePower) < + rulesetCharacter.GetMaxUsesOfPower(usablePower); } } diff --git a/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardAbjuration-de.txt b/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardAbjuration-de.txt index 02c17de802..cb89f27ef8 100644 --- a/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardAbjuration-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardAbjuration-de.txt @@ -5,23 +5,31 @@ Feature/&MagicAffinityWizardAbjurationSavant2024Title=Beschwörungsgelehrter Feature/&MagicAffinityWizardAbjurationScriberDescription=Ab der Auswahl dieser Schule auf der 2. Stufe halbiert sich der Gold- und Zeitaufwand, den Sie zum Kopieren eines Beschwörungszaubers in Ihr Zauberbuch benötigen. Feature/&MagicAffinityWizardAbjurationScriberTitle=Gelehrter der Abschwörung Feature/&PowerWizardAbjurationArcaneWardBG3Description=Die Restmagie deiner Zauber bildet einen Schutz um dich herum, der dich vor Schaden schützt. Jedes Mal, wenn du einen Bannzauber wirkst, erhöht sich die Intensität des Schutzes um die Stufe des Zaubers, bis zu einem Maximum von 2x deiner Zaubererstufe.\Wenn du Schaden nimmst, blockiert der Schutz eine Schadensmenge, die seiner Intensität entspricht, und seine Intensität verringert sich um 1.\nNach jeder langen Pause wird die Intensität des Schutzes zurückgesetzt und entspricht deiner Zaubererstufe. -Feature/&PowerWizardAbjurationArcaneWardDescription=Wenn Sie einen Bannzauber der Stufe 1+ wirken, errichten Sie einen magischen Schutzzauber um sich selbst, der so lange anhält, bis Sie eine lange Pause beendet haben. Der Schutzzauber hat Trefferpunkte in Höhe des doppelten Zaubererlevels + Ihres Intelligenzmodifikators. Wenn Sie Schaden erleiden, erleidet der Schutzzauber stattdessen den Schaden. Wenn Sie einen Bannzauber der Stufe 1+ wirken, erhält der Schutzzauber eine Anzahl an Trefferpunkten zurück, die dem doppelten Level des Zaubers entspricht. +Feature/&PowerWizardAbjurationArcaneWardDescription=Wenn Sie einen Bannzauber der Stufe 1+ wirken, errichten Sie einen magischen Schutzzauber um sich selbst, der so lange anhält, bis Sie eine lange Rast beendet haben. Der Schutzzauber hat Trefferpunkte in Höhe des doppelten Zaubererlevels + Ihres Intelligenzmodifikators. Wenn Sie Schaden erleiden, erleidet der Schutzzauber stattdessen den Schaden. Wenn Sie einen Bannzauber der Stufe 1+ wirken, erhält der Schutzzauber eine Anzahl an Trefferpunkten zurück, die dem doppelten Level des verbrauchten Zauberplatzes entspricht. Feature/&PowerWizardAbjurationArcaneWardReduceDamageTitle=Arkaner Schutz Feature/&PowerWizardAbjurationArcaneWardTitle=Arkaner Schutz Feature/&PowerWizardAbjurationImprovedAbjurationDescription=Fügen Sie Ihren Kompetenzbonus zu den Fähigkeitswürfen „Gegenzauber“ und „Magie bannen“ hinzu. Feature/&PowerWizardAbjurationImprovedAbjurationTitle=Verbesserte Abschwörung Feature/&PowerWizardAbjurationProjectedWardDescription=Wenn ein Verbündeter, den Sie in einem Umkreis von 30 Fuß sehen, Schaden erleidet, können Sie Ihre Reaktion nutzen, um Ihren Arkanen Schutz diesen Schaden absorbieren zu lassen. Wenn dieser Schaden den Schutz auf 0 Trefferpunkte reduziert, erleidet die Kreatur, die unter dem Schutz steht, den verbleibenden Schaden. Feature/&PowerWizardAbjurationProjectedWardTitle=Projizierter Bezirk +Feature/&PowerWizardAbjurationRechargeArcaneWardDescription=Geben Sie als Bonusaktion einen Zauberplatz aus, damit Ihr Arcane Ward Trefferpunkte in Höhe des doppelten Levels des ausgegebenen Zauberplatzes zurückgewinnt. +Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=Arkane Abwehr aufladen Feature/&PowerWizardAbjurationSpellResistanceDescription=Erhalten Sie einen Vorteil bei Rettungswürfen gegen Zauber und Widerstand gegen Zauberschäden. Feature/&PowerWizardAbjurationSpellResistanceTitle=Zauberresistenz Feedback/&ArcaneWard={0} hat {1} und reduziert den Schaden um {2} +Feedback/&ArcaneWardRecharge={0}s {1} erhält {2} Trefferpunkte zurück. Feedback/&ProjectedWard={0} verwendet {1}, um den von {2} erlittenen Schaden zu verringern Reaction/&SpendPowerProjectedWardDescription={0} ist kurz davor, Schaden zu erleiden. {1} kann reagieren und seinen Arkanen Schutz projizieren, um den Schaden zu verringern. Reaction/&SpendPowerProjectedWardReactDescription=Absorbieren Sie Schaden mit Ihrem Arkanen Schutz. Reaction/&SpendPowerProjectedWardReactTitle=Projekt Ward Reaction/&SpendPowerProjectedWardTitle=Projizierter Bezirk +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardDescription=Geben Sie einen Zauberplatz auf, damit Ihr Arcane Ward Trefferpunkte in Höhe des doppelten Levels des ausgegebenen Zauberplatzes zurückgewinnt. +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactDescription=Zauberplatz verbrauchen +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactTitle=Aufladestation +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardTitle=Arkane Abwehr aufladen +Reaction/&SubitemSelectPowerWizardAbjurationRechargeArcaneWardTitle=Steckplatz auswählen Subclass/&WizardAbjurationDescription=Die Schule der Abschwörung konzentriert sich auf Magie, die blockiert, verbannt oder schützt. Es ist ein stolzer und respektierter Beruf. Mitglieder dieser Schule, die Abschwörer genannt werden, werden gesucht, wenn unheilvolle Geister exorziert werden müssen, wenn wichtige Orte vor magischer Spionage geschützt werden müssen und wenn Portale zu anderen Existenzebenen geschlossen werden müssen. Subclass/&WizardAbjurationTitle=Abschwörung Tag/&AbjurerSpellSpecialTagTitle=Unterklassenzauber Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=Du hast {0} von {1} Arkaner Schutz.\nWenn du Schaden erleidest, blockiert der Schutz eine Schadensmenge, die seiner Intensität entspricht, und seine Intensität verringert sich um 1. Nachdem du einen Bannzauber gewirkt hast, erhöht sich die Intensität des Schutzes um die Stufe des Zaubers, bis zu einem Maximum von dem Zweifachen deiner Zaubererstufe. -Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=Du hast {0} von {1} Arkaner Schutz.\nWenn du Schaden nimmst, reduziert der Schutz den Schaden um seinen Wert und wird um die verhinderte Schadensmenge verringert. Wenn du einen Bannzauber der Stufe 1+ wirkst, erhält der Schutz eine Anzahl an Trefferpunkten zurück, die der doppelten Stufe des Zaubers entspricht. +Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=Du hast {0} von {1} Arkaner Schutz.\nWenn du Schaden nimmst, reduziert der Schutz den Schaden um seinen Wert und wird um die verhinderte Schadensmenge verringert. Wenn du einen Bannzauber der Stufe 1+ wirkst, erhält der Schutz eine Anzahl an Trefferpunkten zurück, die dem 2-fachen Level des verbrauchten Zauberplatzes entspricht. diff --git a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardAbjuration-es.txt b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardAbjuration-es.txt index 2631354fd1..761a06e79e 100644 --- a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardAbjuration-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardAbjuration-es.txt @@ -5,23 +5,31 @@ Feature/&MagicAffinityWizardAbjurationSavant2024Title=Sabio de la evocación Feature/&MagicAffinityWizardAbjurationScriberDescription=A partir del momento en que seleccionas esta escuela en el nivel 2, el oro y el tiempo que debes gastar para copiar un hechizo de Evocación en tu libro de hechizos se reducen a la mitad. Feature/&MagicAffinityWizardAbjurationScriberTitle=Erudito de la abjuración Feature/&PowerWizardAbjurationArcaneWardBG3Description=La magia residual de tus hechizos forma una barrera a tu alrededor que te protege de todo daño. Cada vez que lanzas un hechizo de Abjuración, la intensidad de la barrera aumenta según el nivel del hechizo, hasta un máximo de 2 veces tu nivel de mago. Cuando recibes daño, la barrera bloquea una cantidad de daño igual a su intensidad y su intensidad disminuye en 1.\nDespués de cada Descanso prolongado, la intensidad de la barrera se reinicia y se vuelve igual a tu nivel de mago. -Feature/&PowerWizardAbjurationArcaneWardDescription=Cuando lanzas un conjuro de abjuración de nivel 1+ creas una protección mágica sobre ti que dura hasta que terminas un descanso prolongado. La protección tiene puntos de golpe iguales al doble de tu nivel de mago + tu modificador de Inteligencia. Siempre que recibas daño, la protección recibe el daño en tu lugar. Siempre que lances un conjuro de abjuración de nivel 1+, la protección recupera una cantidad de puntos de golpe igual al doble del nivel del conjuro. +Feature/&PowerWizardAbjurationArcaneWardDescription=Cuando lanzas un conjuro de abjuración de nivel 1+, creas una protección mágica sobre ti que dura hasta que terminas un descanso prolongado. La protección tiene puntos de golpe iguales al doble de tu nivel de mago + tu modificador de Inteligencia. Siempre que recibas daño, la protección recibe el daño en tu lugar. Siempre que lances un conjuro de abjuración de nivel 1+, la protección recupera una cantidad de puntos de golpe igual a 2x el nivel del espacio de conjuro gastado. Feature/&PowerWizardAbjurationArcaneWardReduceDamageTitle=Guardián arcano Feature/&PowerWizardAbjurationArcaneWardTitle=Guardián arcano Feature/&PowerWizardAbjurationImprovedAbjurationDescription=Suma tu bonificación de competencia a las pruebas de habilidad Contrarrestar hechizos y Disipar magia. Feature/&PowerWizardAbjurationImprovedAbjurationTitle=Abjuración mejorada Feature/&PowerWizardAbjurationProjectedWardDescription=Cuando un aliado que puedas ver a 30 pies de ti recibe daño, puedes usar tu reacción para hacer que tu Guardián Arcano absorba ese daño. Si este daño reduce el guardián a 0 puntos de vida, la criatura protegida recibe el daño restante. Feature/&PowerWizardAbjurationProjectedWardTitle=Distrito proyectado +Feature/&PowerWizardAbjurationRechargeArcaneWardDescription=Como acción adicional, gasta un espacio de hechizo para que tu Guardián Arcano recupere Puntos de Vida iguales a 2 veces el nivel del espacio de hechizo gastado. +Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=Recargar guardián arcano Feature/&PowerWizardAbjurationSpellResistanceDescription=Obtén ventaja en las tiradas de salvación contra hechizos y resistencia al daño de hechizos. Feature/&PowerWizardAbjurationSpellResistanceTitle=Resistencia a hechizos Feedback/&ArcaneWard={0} tiene {1} y reduce el daño en {2} +Feedback/&ArcaneWardRecharge=El {1} ​​de {0} recupera {2} puntos de vida. Feedback/&ProjectedWard={0} usa {1} para reducir el daño recibido por {2} Reaction/&SpendPowerProjectedWardDescription={0} está a punto de recibir daño. {1} puede reaccionar y proyectar su Guardián Arcano para reducir el daño. Reaction/&SpendPowerProjectedWardReactDescription=Absorbe daño con tu Guardián Arcano. Reaction/&SpendPowerProjectedWardReactTitle=Proyecto Ward Reaction/&SpendPowerProjectedWardTitle=Distrito proyectado +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardDescription=Gasta un espacio de hechizo para que tu Guardián Arcano recupere Puntos de Vida iguales al doble del nivel del espacio de hechizo gastado. +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactDescription=Gastar espacio de hechizo +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactTitle=Sala de recarga +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardTitle=Recargar guardián arcano +Reaction/&SubitemSelectPowerWizardAbjurationRechargeArcaneWardTitle=Seleccionar ranura Subclass/&WizardAbjurationDescription=La Escuela de Abjuración pone énfasis en la magia que bloquea, destierra o protege. Es una vocación orgullosa y respetada. Los miembros de esta escuela, llamados abjuradores, son buscados cuando se requiere exorcizar espíritus malignos, cuando se deben proteger lugares importantes contra el espionaje mágico y cuando se deben cerrar portales a otros planos de existencia. Subclass/&WizardAbjurationTitle=Abjuración Tag/&AbjurerSpellSpecialTagTitle=Hechizos de subclase Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=Tienes {0} de {1} Protección Arcana.\nCuando recibes daño, la protección bloquea una cantidad de daño igual a su intensidad, y su intensidad disminuye en 1. Después de lanzar un hechizo de Abjuración, la intensidad de la protección aumenta según el Nivel del hechizo, hasta un máximo de 2x tu nivel de Mago. -Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=Tienes {0} de {1} de Resguardo Arcano.\nSiempre que recibas daño, el resguardo reduce el daño en su valor y se reduce en la cantidad de daño prevenido. Siempre que lances un conjuro de abjuración de nivel 1+, el resguardo recupera una cantidad de puntos de golpe igual al doble del nivel del conjuro. +Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=Tienes {0} de {1} de Resguardo Arcano.\nSiempre que recibas daño, el resguardo reduce el daño en su valor y se reduce en la cantidad de daño prevenido. Siempre que lances un conjuro de abjuración de nivel 1+, el resguardo recupera una cantidad de puntos de golpe igual a 2 veces el nivel del espacio de conjuro gastado. diff --git a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardAbjuration-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardAbjuration-fr.txt index 945a49ea2e..f9f86f6ab0 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardAbjuration-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardAbjuration-fr.txt @@ -5,23 +5,31 @@ Feature/&MagicAffinityWizardAbjurationSavant2024Title=Évocation Savant Feature/&MagicAffinityWizardAbjurationScriberDescription=À partir du moment où vous sélectionnez cette école au niveau 2, l'or et le temps que vous devez dépenser pour copier un sort d'évocation dans votre grimoire sont réduits de moitié. Feature/&MagicAffinityWizardAbjurationScriberTitle=Abjuration Savant Feature/&PowerWizardAbjurationArcaneWardBG3Description=La magie résiduelle de vos sorts forme une protection autour de vous qui vous protège des dégâts. Chaque fois que vous lancez un sort d'Abjuration, l'intensité de la protection augmente du niveau du sort, jusqu'à un maximum de 2x votre niveau de sorcier. Lorsque vous subissez des dégâts, la protection bloque une quantité de dégâts égale à son intensité, et son intensité diminue de 1.\nAprès chaque repos long, l'intensité de la protection se réinitialise et devient égale à votre niveau de sorcier. -Feature/&PowerWizardAbjurationArcaneWardDescription=Lorsque vous lancez un sort d'abjuration de niveau 1 ou plus, vous créez une protection magique sur vous-même qui dure jusqu'à ce que vous ayez terminé un repos long. La protection a des points de vie égaux à deux fois votre niveau de sorcier + votre modificateur d'intelligence. Chaque fois que vous subissez des dégâts, la protection les subit à la place. Chaque fois que vous lancez un sort d'abjuration de niveau 1 ou plus, la protection récupère un nombre de points de vie égal à deux fois le niveau du sort. +Feature/&PowerWizardAbjurationArcaneWardDescription=Lorsque vous lancez un sort d'abjuration de niveau 1 ou plus, vous créez une protection magique sur vous-même qui dure jusqu'à ce que vous ayez terminé un repos long. La protection a des points de vie égaux à deux fois votre niveau de sorcier + votre modificateur d'Intelligence. Chaque fois que vous subissez des dégâts, la protection subit les dégâts à la place. Chaque fois que vous lancez un sort d'abjuration de niveau 1 ou plus, la protection récupère un nombre de points de vie égal à 2 fois le niveau de l'emplacement de sort dépensé. Feature/&PowerWizardAbjurationArcaneWardReduceDamageTitle=Protection arcanique Feature/&PowerWizardAbjurationArcaneWardTitle=Protection arcanique Feature/&PowerWizardAbjurationImprovedAbjurationDescription=Ajoutez votre bonus de maîtrise aux tests de capacité Contresort et Dissipation de la magie. Feature/&PowerWizardAbjurationImprovedAbjurationTitle=Improved Abjuration Feature/&PowerWizardAbjurationProjectedWardDescription=Lorsqu'un allié que vous pouvez voir à moins de 9 mètres de vous subit des dégâts, vous pouvez utiliser votre réaction pour que votre Protection arcanique absorbe ces dégâts. Si ces dégâts réduisent la Protection à 0 point de vie, la créature protégée subit les dégâts restants. Feature/&PowerWizardAbjurationProjectedWardTitle=Quartier projeté +Feature/&PowerWizardAbjurationRechargeArcaneWardDescription=En tant qu'action bonus, dépensez un emplacement de sort pour que votre Protection arcanique récupère un nombre de points de vie égal à 2 fois le niveau de l'emplacement de sort dépensé. +Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=Recharger la protection arcanique Feature/&PowerWizardAbjurationSpellResistanceDescription=Bénéficiez d'un avantage sur les jets de sauvegarde contre les sorts et d'une résistance aux dégâts des sorts. Feature/&PowerWizardAbjurationSpellResistanceTitle=Résistance aux sorts Feedback/&ArcaneWard={0} a {1} et réduit les dégâts de {2} +Feedback/&ArcaneWardRecharge=Le {1} de {0} récupère {2} points de vie. Feedback/&ProjectedWard={0} utilise {1} pour réduire les dégâts subis par {2} Reaction/&SpendPowerProjectedWardDescription={0} est sur le point de subir des dégâts. {1} peut réagir et projeter sa Protection arcanique pour réduire les dégâts. Reaction/&SpendPowerProjectedWardReactDescription=Absorbez les dégâts avec votre Protection arcanique. Reaction/&SpendPowerProjectedWardReactTitle=Projet Ward Reaction/&SpendPowerProjectedWardTitle=Quartier projeté +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardDescription=Dépensez un emplacement de sort pour que votre Protection arcanique récupère un nombre de points de vie égal à 2 fois le niveau de l'emplacement de sort dépensé. +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactDescription=Dépenser l'emplacement de sort +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactTitle=Salle de recharge +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardTitle=Recharger la protection arcanique +Reaction/&SubitemSelectPowerWizardAbjurationRechargeArcaneWardTitle=Sélectionnez un emplacement Subclass/&WizardAbjurationDescription=L'École d'Abjuration met l'accent sur la magie qui bloque, bannit ou protège. C'est une vocation fière et respectée. Appelés abjurateurs, les membres de cette école sont sollicités lorsque des esprits maléfiques nécessitent un exorcisme, lorsque des lieux importants doivent être protégés contre l'espionnage magique et lorsque des portails vers d'autres plans d'existence doivent être fermés. Subclass/&WizardAbjurationTitle=Abjuration Tag/&AbjurerSpellSpecialTagTitle=Sorts de sous-classe Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=Vous avez {0} de {1} Protection arcanique.\nLorsque vous subissez des dégâts, la protection bloque une quantité de dégâts égale à son intensité, et son intensité diminue de 1. Après avoir lancé un sort d'Abjuration, l'intensité de la protection augmente du niveau du sort, jusqu'à un maximum de 2 fois votre niveau de sorcier. -Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=Vous avez {0} de {1} Protection arcanique.\nChaque fois que vous subissez des dégâts, la protection réduit les dégâts de sa valeur et est diminuée du montant des dégâts évités. Chaque fois que vous lancez un sort d'abjuration de niveau 1+, la protection récupère un nombre de points de vie égal à deux fois le niveau du sort. +Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=Vous avez {0} de {1} Protection arcanique.\nChaque fois que vous subissez des dégâts, la protection réduit les dégâts de sa valeur et est diminuée du montant des dégâts évités. Chaque fois que vous lancez un sort d'abjuration de niveau 1+, la protection récupère un nombre de points de vie égal à 2 fois le niveau de l'emplacement de sort dépensé. diff --git a/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardAbjuration-it.txt b/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardAbjuration-it.txt index afbe4836bd..673d43def2 100644 --- a/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardAbjuration-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardAbjuration-it.txt @@ -5,23 +5,31 @@ Feature/&MagicAffinityWizardAbjurationSavant2024Title=Evocazione Savant Feature/&MagicAffinityWizardAbjurationScriberDescription=A partire dal momento in cui selezioni questa scuola al 2° livello, l'oro e il tempo che devi impiegare per copiare un incantesimo di Evocazione nel tuo libro degli incantesimi vengono dimezzati. Feature/&MagicAffinityWizardAbjurationScriberTitle=Studioso dell'Abiurazione Feature/&PowerWizardAbjurationArcaneWardBG3Description=La magia residua dei tuoi incantesimi forma una protezione attorno a te che ti protegge dai danni. Ogni volta che lanci un incantesimo di Abjuration, l'intensità della protezione aumenta in base al Livello dell'incantesimo, fino a un massimo di 2 volte il tuo livello da Mago.\Quando subisci danni, la protezione blocca una quantità di danni pari alla sua intensità, e la sua intensità diminuisce di 1.\nDopo ogni Riposo Lungo, l'intensità della protezione si ripristina e diventa uguale al tuo livello da Mago. -Feature/&PowerWizardAbjurationArcaneWardDescription=Quando lanci un incantesimo di abjurazione di 1°+ livello crei una protezione magica su te stesso che dura finché non completi un lungo riposo. La protezione ha punti ferita pari al doppio del tuo livello da mago + il tuo modificatore di Intelligenza. Ogni volta che subisci danni, la protezione subisce i danni al suo posto. Ogni volta che lanci un incantesimo di abjurazione di 1°+ livello, la protezione recupera un numero di punti ferita pari al doppio del livello dell'incantesimo. +Feature/&PowerWizardAbjurationArcaneWardDescription=Quando lanci un incantesimo di abjurazione di 1°+ livello, crei una protezione magica su te stesso che dura finché non completi un lungo riposo. La protezione ha punti ferita pari al doppio del tuo livello da mago + il tuo modificatore di Intelligenza. Ogni volta che subisci danni, la protezione subisce i danni al suo posto. Ogni volta che lanci un incantesimo di abjurazione di 1°+ livello, la protezione recupera un numero di punti ferita pari a 2 volte il livello dello slot incantesimo speso. Feature/&PowerWizardAbjurationArcaneWardReduceDamageTitle=Protezione Arcana Feature/&PowerWizardAbjurationArcaneWardTitle=Protezione Arcana Feature/&PowerWizardAbjurationImprovedAbjurationDescription=Aggiungi il tuo bonus di competenza alle prove delle abilità Controincantesimo e Dissolvi Magie. Feature/&PowerWizardAbjurationImprovedAbjurationTitle=Abiurazione migliorata Feature/&PowerWizardAbjurationProjectedWardDescription=Quando un alleato che puoi vedere entro 30 piedi da te subisce danni, puoi usare la tua reazione per far sì che il tuo Arcane Ward assorba quei danni. Se questi danni riducono il ward a 0 punti ferita, la creatura protetta subisce tutti i danni rimanenti. Feature/&PowerWizardAbjurationProjectedWardTitle=Reparto progettato +Feature/&PowerWizardAbjurationRechargeArcaneWardDescription=Come azione bonus, spendi uno slot incantesimo per far sì che il tuo Arcane Ward recuperi Punti Ferita pari a 2 volte il livello dello slot incantesimo speso. +Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=Ricarica Arcane Ward Feature/&PowerWizardAbjurationSpellResistanceDescription=Ottieni vantaggio nei tiri salvezza contro gli incantesimi e resistenza ai danni causati dagli incantesimi. Feature/&PowerWizardAbjurationSpellResistanceTitle=Resistenza agli incantesimi Feedback/&ArcaneWard={0} ha {1} e riduce i danni di {2} +Feedback/&ArcaneWardRecharge={0}'s {1} recupera {2} Punti Ferita. Feedback/&ProjectedWard={0} usa {1} per ridurre i danni subiti da {2} Reaction/&SpendPowerProjectedWardDescription={0} sta per subire danni. {1} può reagire e proiettare la sua Protezione Arcana per ridurre i danni. Reaction/&SpendPowerProjectedWardReactDescription=Assorbi i danni con la tua Protezione Arcana. Reaction/&SpendPowerProjectedWardReactTitle=Progetto Ward Reaction/&SpendPowerProjectedWardTitle=Reparto progettato +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardDescription=Spendi uno slot incantesimo per far sì che il tuo Arcane Ward recuperi Punti Ferita pari a 2 volte il livello dello slot incantesimo speso. +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactDescription=Spendi slot incantesimo +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactTitle=Reparto di ricarica +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardTitle=Ricarica Arcane Ward +Reaction/&SubitemSelectPowerWizardAbjurationRechargeArcaneWardTitle=Seleziona slot Subclass/&WizardAbjurationDescription=La School of Abjuration enfatizza la magia che blocca, bandisce o protegge. È una vocazione orgogliosa e rispettata. Chiamati abiuratori, i membri di questa scuola sono ricercati quando spiriti maligni richiedono un esorcismo, quando luoghi importanti devono essere protetti da spionaggio magico e quando i portali verso altri piani di esistenza devono essere chiusi. Subclass/&WizardAbjurationTitle=Abiura Tag/&AbjurerSpellSpecialTagTitle=Incantesimi di sottoclasse Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=Hai {0} di {1} di Protezione Arcana.\nQuando subisci danni, la protezione blocca una quantità di danni pari alla sua intensità, e la sua intensità diminuisce di 1. Dopo aver lanciato un incantesimo di Abjurazione, l'intensità della protezione aumenta in base al Livello dell'incantesimo, fino a un massimo di 2 volte il tuo livello da Mago. -Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=Hai {0} di {1} Arcane Ward.\nOgni volta che subisci danni, la protezione riduce i danni del suo valore e diminuisce della quantità di danni prevenuti. Ogni volta che lanci un incantesimo di abjurazione di 1° livello+, la protezione recupera un numero di punti ferita pari al doppio del livello dell'incantesimo. +Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=Hai {0} di {1} Arcane Ward.\nOgni volta che subisci danni, la protezione riduce i danni del suo valore e diminuisce della quantità di danni prevenuti. Ogni volta che lanci un incantesimo di abjurazione di 1° livello+, la protezione recupera un numero di punti ferita pari a 2 volte il livello dello slot incantesimo speso. diff --git a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardAbjuration-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardAbjuration-ja.txt index 8650ad2396..0d93386fb0 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardAbjuration-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardAbjuration-ja.txt @@ -5,23 +5,31 @@ Feature/&MagicAffinityWizardAbjurationSavant2024Title=召喚の達人 Feature/&MagicAffinityWizardAbjurationScriberDescription=2 レベルでこの学校を選択すると、召喚呪文を呪文書にコピーするのに費やす金と時間が半分になります。 Feature/&MagicAffinityWizardAbjurationScriberTitle=アブジャレーション学者 Feature/&PowerWizardAbjurationArcaneWardBG3Description=あなたの呪文の残留魔力は、あなたを危害から守る結界をあなたの周りに形成します。アブジュレーション呪文を唱えるたびに、結界の強さは呪文のレベルに応じて増加し、最大でウィザード レベルの 2 倍になります。\ダメージを受けると、結界はその強さに等しいダメージをブロックし、その強さは 1 ずつ減少します。\n大休憩のたびに、結界の強さはリセットされ、ウィザード レベルと同じになります。 -Feature/&PowerWizardAbjurationArcaneWardDescription=1 レベル以上の防御呪文を唱えると、大休憩を終えるまで持続する魔法の防壁を自分自身に作ります。防壁のヒット ポイントは、ウィザード レベルの 2 倍 + 知力修正値に等しいです。ダメージを受けると、代わりに防壁がダメージを受けます。1 レベル以上の防御呪文を唱えると、防壁は呪文レベルの 2 倍に等しいヒット ポイントを回復します。 +Feature/&PowerWizardAbjurationArcaneWardDescription=1 レベル以上の防御呪文を唱えると、大休憩を終えるまで持続する魔法の防壁を自分自身に作ります。防壁のヒット ポイントはウィザード レベルの 2 倍 + 知力修正値に等しいです。ダメージを受けると、代わりに防壁がダメージを受けます。1 レベル以上の防御呪文を唱えると、防壁は消費した呪文スロットのレベルの 2 倍に等しいヒット ポイントを回復します。 Feature/&PowerWizardAbjurationArcaneWardReduceDamageTitle=アーケイン・ワード Feature/&PowerWizardAbjurationArcaneWardTitle=アーケイン・ワード Feature/&PowerWizardAbjurationImprovedAbjurationDescription=カウンタースペルとディスペルマジックの能力チェックに熟練度ボーナスを追加します。 Feature/&PowerWizardAbjurationImprovedAbjurationTitle=アブジュレーションの向上 Feature/&PowerWizardAbjurationProjectedWardDescription=30 フィート以内にいる視界内の味方がダメージを受けた場合、反応を使用して Arcane Ward にそのダメージを吸収させることができます。このダメージによって Ward のヒット ポイントが 0 になった場合、Ward で守られたクリーチャーが残りのダメージを受けます。 Feature/&PowerWizardAbjurationProjectedWardTitle=予定病棟 +Feature/&PowerWizardAbjurationRechargeArcaneWardDescription=ボーナス アクションとして、呪文スロットを消費して、消費した呪文スロットのレベルの 2 倍に等しいヒット ポイントを Arcane Ward に回復させます。 +Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=アーケイン・ワードの再充電 Feature/&PowerWizardAbjurationSpellResistanceDescription=呪文に対するセーヴィングスローに有利になり、呪文ダメージに対する耐性も得られます。 Feature/&PowerWizardAbjurationSpellResistanceTitle=呪文耐性 Feedback/&ArcaneWard={0}は{1}を持ち、ダメージを{2}軽減します +Feedback/&ArcaneWardRecharge={0} の {1} が {2} ヒット ポイントを回復します。 Feedback/&ProjectedWard={0}は{1}を使用して{2}が受けるダメージを軽減します Reaction/&SpendPowerProjectedWardDescription={0} はダメージを受けようとしています。{1} は反応して Arcane Ward を投射し、ダメージを軽減できます。 Reaction/&SpendPowerProjectedWardReactDescription=Arcane Ward でダメージを吸収します。 Reaction/&SpendPowerProjectedWardReactTitle=プロジェクト・ワード Reaction/&SpendPowerProjectedWardTitle=予定病棟 +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardDescription=呪文スロットを消費すると、消費した呪文スロットのレベルの 2 倍に等しいヒット ポイントが Arcane Ward に回復されます。 +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactDescription=呪文スロットを消費する +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactTitle=リチャージワード +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardTitle=アーケイン・ワードの再充電 +Reaction/&SubitemSelectPowerWizardAbjurationRechargeArcaneWardTitle=スロットを選択 Subclass/&WizardAbjurationDescription=免罪術学派は、妨害、追放、保護の魔法を重視します。これは誇り高く尊敬される職業です。免罪術師と呼ばれるこの学派のメンバーは、邪悪な霊を祓う必要があるとき、重要な場所を魔法によるスパイから守らなければならないとき、他の存在の次元へのポータルを閉じなければならないときに求められます。 Subclass/&WizardAbjurationTitle=アブレーション Tag/&AbjurerSpellSpecialTagTitle=サブクラス呪文 Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=あなたは {1} のアーケイン ワードを {0} 持っています。\nダメージを受けると、ワードはその強度に等しいダメージをブロックし、その強度は 1 減少します。アブジュレーション呪文を唱えた後、ワードの強度は呪文のレベルに応じて増加し、最大でウィザード レベルの 2 倍になります。 -Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=あなたは{1}のアーケイン ウォードを{0}持っています。\nダメージを受けるたびに、ウォードはその値だけダメージを軽減し、防いだダメージ量だけ減少します。あなたがレベル1以上の防御呪文を唱えるたびに、ウォードは呪文のレベルの2倍に等しいヒット ポイントを回復します。 +Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=あなたは{0}の{1}アーケイン ウォードを持っています。\nダメージを受けるたびに、ウォードはその値だけダメージを軽減し、防いだダメージ量だけ減少します。あなたがレベル1以上の防御呪文を唱えるたびに、ウォードは消費した呪文スロットのレベルの2倍に等しいヒット ポイントを回復します。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardAbjuration-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardAbjuration-ko.txt index 1b7315c510..30ed8f55f8 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardAbjuration-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardAbjuration-ko.txt @@ -5,23 +5,31 @@ Feature/&MagicAffinityWizardAbjurationSavant2024Title=에보케이션 사반트 Feature/&MagicAffinityWizardAbjurationScriberDescription=2레벨에서 이 학교를 선택하면 주문서에 유발 주문을 복사하는 데 필요한 골드와 시간이 절반으로 줄어듭니다. Feature/&MagicAffinityWizardAbjurationScriberTitle=포기 학자 Feature/&PowerWizardAbjurationArcaneWardBG3Description=주문의 잔여 마법은 주변에 보호막을 형성하여 해를 입지 않도록 보호합니다. Abjuration 주문을 시전할 때마다 보호막의 강도는 주문 레벨만큼 증가하며, 최대 위저드 레벨의 2배까지 증가합니다.\피해를 입으면 보호막은 강도와 같은 양의 피해를 차단하고 강도는 1만큼 감소합니다.\n긴 휴식을 취할 때마다 보호막의 강도가 재설정되어 위저드 레벨과 같아집니다. -Feature/&PowerWizardAbjurationArcaneWardDescription=1레벨 이상의 회피 주문을 시전하면 긴 휴식을 마칠 때까지 지속되는 마법의 보호막을 자신에게 생성합니다. 보호막은 마법사 레벨 + 지능 수정치의 두 배에 해당하는 체력 포인트를 갖습니다. 피해를 입을 때마다 보호막이 대신 피해를 입습니다. 1레벨 이상의 회피 주문을 시전할 때마다 보호막은 주문 레벨의 두 배에 해당하는 체력 포인트를 회복합니다. +Feature/&PowerWizardAbjurationArcaneWardDescription=1레벨 이상의 회피 주문을 시전하면 긴 휴식을 마칠 때까지 지속되는 마법의 보호막을 자신에게 생성합니다. 보호막은 마법사 레벨 + 지능 수정치의 두 배에 해당하는 체력 포인트를 갖습니다. 피해를 입을 때마다 보호막이 대신 피해를 입습니다. 1레벨 이상의 회피 주문을 시전할 때마다 보호막은 소모한 주문 슬롯 레벨의 두 배에 해당하는 체력 포인트를 회복합니다. Feature/&PowerWizardAbjurationArcaneWardReduceDamageTitle=비전의 보호막 Feature/&PowerWizardAbjurationArcaneWardTitle=비전의 보호막 Feature/&PowerWizardAbjurationImprovedAbjurationDescription=카운터스펠과 디스펠 매직 능력치 검사에 숙련도 보너스를 추가하세요. Feature/&PowerWizardAbjurationImprovedAbjurationTitle=향상된 포기 Feature/&PowerWizardAbjurationProjectedWardDescription=30피트 이내에서 볼 수 있는 아군이 피해를 입으면 반응을 사용하여 Arcane Ward가 그 피해를 흡수하도록 할 수 있습니다. 이 피해로 인해 Ward의 생명력이 0이 되면, 보호된 생물은 남은 피해를 입습니다. Feature/&PowerWizardAbjurationProjectedWardTitle=예상 병동 +Feature/&PowerWizardAbjurationRechargeArcaneWardDescription=보너스 액션으로, 주문 슬롯을 사용하면 비전 보호막이 사용한 주문 슬롯 레벨의 2배에 해당하는 생명력을 회복합니다. +Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=아케인 워드 재충전 Feature/&PowerWizardAbjurationSpellResistanceDescription=주문에 대한 세이빙 스로우와 주문 피해에 대한 저항력에서 이점을 얻습니다. Feature/&PowerWizardAbjurationSpellResistanceTitle=주문 저항력 Feedback/&ArcaneWard={0}은 {1}을 가지고 있으며 피해를 {2}만큼 감소시킵니다. +Feedback/&ArcaneWardRecharge={0}의 {1}은 {2}의 생명력을 회복합니다. Feedback/&ProjectedWard={0}은 {1}을 사용하여 {2}이 받는 피해를 줄입니다. Reaction/&SpendPowerProjectedWardDescription={0}이(가) 피해를 입으려고 합니다. {1}이 반응하여 비전 보호를 투사하여 피해를 줄일 수 있습니다. Reaction/&SpendPowerProjectedWardReactDescription=비전의 보호막으로 피해를 흡수하세요. Reaction/&SpendPowerProjectedWardReactTitle=프로젝트 워드 Reaction/&SpendPowerProjectedWardTitle=예상 병동 +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardDescription=주문 슬롯을 사용하면 비전 보호막이 사용한 주문 슬롯 레벨의 2배에 해당하는 생명력을 회복합니다. +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactDescription=주문 슬롯 소모 +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactTitle=충전 병동 +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardTitle=아케인 워드 재충전 +Reaction/&SubitemSelectPowerWizardAbjurationRechargeArcaneWardTitle=슬롯 선택 Subclass/&WizardAbjurationDescription=Abjuration School은 차단, 추방 또는 보호하는 마법을 강조합니다. 자랑스럽고 존경받는 직업입니다. Abjurers라고 불리는 이 학교의 구성원은 사악한 영혼이 엑소시즘을 필요로 할 때, 중요한 장소를 마법적 감시로부터 보호해야 할 때, 다른 존재 평면으로 가는 포털을 닫아야 할 때 찾습니다. Subclass/&WizardAbjurationTitle=포기 Tag/&AbjurerSpellSpecialTagTitle=하위 클래스 주문 Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=당신은 {0}의 {1}개의 비전 보호막을 가지고 있습니다.\n당신이 피해를 입으면, 보호막은 그 강도와 같은 양의 피해를 차단하고, 그 강도는 1만큼 감소합니다. 당신이 회피 주문을 시전한 후에는 보호막의 강도가 주문 레벨에 따라 증가하며, 최대 마법사 레벨의 2배까지 증가합니다. -Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=당신은 {1}개의 Arcane Ward 중 {0}개를 가지고 있습니다.\n당신이 피해를 입을 때마다, Ward는 피해량을 그 값만큼 감소시키고, 방지한 피해량만큼 감소시킵니다. 당신이 1+레벨의 금지 주문을 시전할 때마다, Ward는 주문 레벨의 두 배에 해당하는 수의 생명력을 회복합니다. +Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat={0}의 {1}개의 Arcane Ward를 보유하고 있습니다.\n피해를 입을 때마다 Ward는 피해량을 그 값만큼 감소시키고 방지한 피해량만큼 감소시킵니다. 1+레벨의 금지 주문을 시전할 때마다 Ward는 소모한 주문 슬롯 레벨의 2배에 해당하는 체력 포인트를 회복합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardAbjuration-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardAbjuration-pt-BR.txt index aa76a093c4..609f13162d 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardAbjuration-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardAbjuration-pt-BR.txt @@ -5,23 +5,31 @@ Feature/&MagicAffinityWizardAbjurationSavant2024Title=Evocação Savant Feature/&MagicAffinityWizardAbjurationScriberDescription=A partir do momento em que você seleciona esta escola no 2º nível, o ouro e o tempo que você deve gastar para copiar uma magia de Evocação para seu grimório são reduzidos pela metade. Feature/&MagicAffinityWizardAbjurationScriberTitle=Estudioso de Abjuração Feature/&PowerWizardAbjurationArcaneWardBG3Description=A magia residual de suas magias forma uma proteção ao seu redor que o protege de danos. Cada vez que você conjura uma magia de Abjuração, a intensidade da proteção aumenta pelo Nível da magia, até um máximo de 2x seu nível de Mago.\Quando você recebe dano, a proteção bloqueia uma quantidade de dano igual à sua intensidade, e sua intensidade diminui em 1.\nApós cada Descanso Longo, a intensidade da proteção é reiniciada e se torna a mesma que seu nível de Mago. -Feature/&PowerWizardAbjurationArcaneWardDescription=Quando você conjura uma magia de abjuração de 1º+ nível, você cria uma proteção mágica em si mesmo que dura até você terminar um descanso longo. A proteção tem pontos de vida iguais ao dobro do seu nível de mago + seu modificador de Inteligência. Sempre que você sofre dano, a proteção sofre o dano em vez disso. Sempre que você conjura uma magia de abjuração de 1º+ nível, a proteção recupera um número de pontos de vida igual ao dobro do nível da magia. +Feature/&PowerWizardAbjurationArcaneWardDescription=Quando você conjura uma magia de abjuração de 1º+ nível, você cria uma proteção mágica em si mesmo que dura até você terminar um descanso longo. A proteção tem pontos de vida iguais ao dobro do seu nível de mago + seu modificador de Inteligência. Sempre que você sofre dano, a proteção sofre o dano em vez disso. Sempre que você conjura uma magia de abjuração de 1º+ nível, a proteção recupera um número de pontos de vida igual a 2x o nível do espaço de magia gasto. Feature/&PowerWizardAbjurationArcaneWardReduceDamageTitle=Proteção Arcana Feature/&PowerWizardAbjurationArcaneWardTitle=Proteção Arcana Feature/&PowerWizardAbjurationImprovedAbjurationDescription=Adicione seu Bônus de Proficiência aos testes de habilidade Contramagia e Dissipar Magia. Feature/&PowerWizardAbjurationImprovedAbjurationTitle=Abjuração Melhorada Feature/&PowerWizardAbjurationProjectedWardDescription=Quando um aliado que você pode ver a até 30 pés de você sofre dano, você pode usar sua reação para fazer com que sua Arcane Ward absorva esse dano. Se esse dano reduzir a proteção a 0 pontos de vida, a criatura protegida sofre qualquer dano restante. Feature/&PowerWizardAbjurationProjectedWardTitle=Ala projetada +Feature/&PowerWizardAbjurationRechargeArcaneWardDescription=Como uma ação bônus, gaste um espaço de magia para que sua Proteção Arcana recupere Pontos de Vida iguais a 2x o nível do espaço de magia gasto. +Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=Recarregue a Proteção Arcana Feature/&PowerWizardAbjurationSpellResistanceDescription=Ganhe vantagem em testes de resistência contra magias e resistência a dano mágico. Feature/&PowerWizardAbjurationSpellResistanceTitle=Resistência à magia Feedback/&ArcaneWard={0} tem {1} e reduz o dano em {2} +Feedback/&ArcaneWardRecharge={0} recupera {1} Pontos de Vida. Feedback/&ProjectedWard={0} usa {1} para reduzir o dano recebido por {2} Reaction/&SpendPowerProjectedWardDescription={0} está prestes a sofrer dano. {1} pode reagir e projetar sua Proteção Arcana para reduzir o dano. Reaction/&SpendPowerProjectedWardReactDescription=Absorva dano com sua Proteção Arcana. Reaction/&SpendPowerProjectedWardReactTitle=Projeto Ala Reaction/&SpendPowerProjectedWardTitle=Ala projetada +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardDescription=Gaste um espaço de magia para que sua Proteção Arcana recupere Pontos de Vida iguais a 2x o nível do espaço de magia gasto. +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactDescription=Gastar espaço de magia +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactTitle=Ala de recarga +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardTitle=Recarregue a Proteção Arcana +Reaction/&SubitemSelectPowerWizardAbjurationRechargeArcaneWardTitle=Selecione o slot Subclass/&WizardAbjurationDescription=A Escola de Abjuração enfatiza a magia que bloqueia, bane ou protege. É uma vocação orgulhosa e respeitada. Chamados de abjuradores, os membros desta escola são procurados quando espíritos malignos exigem exorcismo, quando locais importantes devem ser protegidos contra espionagem mágica e quando portais para outros planos de existência devem ser fechados. Subclass/&WizardAbjurationTitle=Abjuração Tag/&AbjurerSpellSpecialTagTitle=Magias de Subclasse Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=Você tem {0} de {1} Proteção Arcana.\nQuando você sofre dano, a proteção bloqueia uma quantidade de dano igual à sua intensidade, e sua intensidade diminui em 1. Depois que você conjura uma magia de Abjuração, a intensidade da proteção aumenta pelo Nível da magia, até um máximo de 2x seu nível de Mago. -Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=Você tem {0} de {1} Arcane Ward.\nSempre que você recebe dano, a proteção reduz o dano pelo seu valor e é diminuída pela quantidade de dano prevenido. Sempre que você conjura uma magia de abjuração de 1º+ nível, a proteção recupera um número de pontos de vida igual ao dobro do nível da magia. +Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=Você tem {0} de {1} Arcane Ward.\nSempre que você recebe dano, a proteção reduz o dano pelo seu valor e é diminuída pela quantidade de dano prevenido. Sempre que você conjura uma magia de abjuração de 1º+ nível, a proteção recupera um número de pontos de vida igual a 2x o nível do espaço de magia gasto. diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardAbjuration-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardAbjuration-ru.txt index a8d96d618b..5cfb57511a 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardAbjuration-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardAbjuration-ru.txt @@ -4,23 +4,31 @@ Feature/&MagicAffinityWizardAbjurationSavant2024Title=Эвокация Сава Feature/&MagicAffinityWizardAbjurationScriberDescription=Золото и время, которое вы тратите на копирование заклинания школы Ограждения в свою книгу заклинаний, уменьшаются вдвое. Feature/&MagicAffinityWizardAbjurationScriberTitle=Мастер ограждения Feature/&PowerWizardAbjurationArcaneWardBG3Description=Остаточная магия от ваших заклинаний сплетается в оберег, защищающий вас от урона. Каждый раз, когда вы накладываете заклинание школы Ограждения, интенсивность защиты увеличивается на уровень заклинания, вплоть до двукратного значения вашего уровня Волшебника.\nКогда вы получаете урон, защита блокирует количество урона, равное её интенсивности, а сама интенсивность уменьшается на 1.\nПосле продолжительного отдыха интенсивность защиты сбрасывается и становится равной вашему уровню Волшебника. -Feature/&PowerWizardAbjurationArcaneWardDescription=Когда вы накладываете заклинание школы Ограждения 1-го уровня или выше, вы можете одновременно с этим использовать прядь магии для создания магической защиты, существующей до окончания продолжительного отдыха. Защита имеет максимальные хиты, равные вашему удвоенному уровню волшебника + модификатор Интеллекта. Когда вы получаете урон, его вместо вас получает защита. Если вы накладываете заклинание школы Ограждения 1-го уровня или выше, защита восстанавливает количество хитов, равное удвоенному уровню заклинания. +Feature/&PowerWizardAbjurationArcaneWardDescription=Когда вы произносите заклинание отречения 1-го+ уровня, вы создаете на себе магическую защиту, которая действует до тех пор, пока вы не закончите длительный отдых. У защиты есть очки здоровья, равные удвоенному вашему уровню волшебника + ваш модификатор интеллекта. Всякий раз, когда вы получаете урон, защита получает урон вместо вас. Всякий раз, когда вы произносите заклинание отречения 1-го+ уровня, защита восстанавливает количество очков здоровья, равное 2-кратному уровню израсходованного слота заклинания. Feature/&PowerWizardAbjurationArcaneWardReduceDamageTitle=Магическая защита Feature/&PowerWizardAbjurationArcaneWardTitle=Магическая защита Feature/&PowerWizardAbjurationImprovedAbjurationDescription=Когда вы накладываете заклинание школы Ограждения, которое требует совершить проверку характеристики частью накладываемого заклинания (как в случае заклинаний Контрзаклинание и Рассеивание магии), вы добавляете к этой проверке ваш бонус мастерства. Feature/&PowerWizardAbjurationImprovedAbjurationTitle=Улучшенное ограждение Feature/&PowerWizardAbjurationProjectedWardDescription=Когда видимое вами существо, находящееся в пределах 30 футов от вас, получает урон, вы можете реакцией поглотить этот урон вашей «Магической защитой». Если урон опускает хиты защиты до 0, то защищаемое существо получает весь оставшийся урон. Feature/&PowerWizardAbjurationProjectedWardTitle=Проекция защиты +Feature/&PowerWizardAbjurationRechargeArcaneWardDescription=В качестве бонусного действия потратьте ячейку заклинания, чтобы ваш Arcane Ward восстановил очки здоровья, равные удвоенному уровню потраченной ячейки заклинания. +Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=Перезарядка Arcane Ward Feature/&PowerWizardAbjurationSpellResistanceDescription=Вы совершаете спасброски от заклинаний с преимуществом. Кроме того, вы получаете сопротивление урону от заклинаний. Feature/&PowerWizardAbjurationSpellResistanceTitle=Сопротивление заклинаниям Feedback/&ArcaneWard={0} использует {1} и уменьшает урон на {2} +Feedback/&ArcaneWardRecharge={1} {0} восстанавливает {2} очков здоровья. Feedback/&ProjectedWard={0} использует {1} для уменьшения урона по {2} Reaction/&SpendPowerProjectedWardDescription={0} вот-вот получит урон. {1} может реакцией спроецировать свою Магическую защиту, чтобы уменьшить урон. Reaction/&SpendPowerProjectedWardReactDescription=Поглотить урон Магической защитой. Reaction/&SpendPowerProjectedWardReactTitle=Проекция защиты Reaction/&SpendPowerProjectedWardTitle=Проекция защиты +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardDescription=Потратьте ячейку заклинания, чтобы ваш Arcane Ward восстановил очки здоровья, равные удвоенному уровню потраченной ячейки заклинания. +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactDescription=Расходовать слот заклинания +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactTitle=Перезарядка палаты +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardTitle=Перезарядка Arcane Ward +Reaction/&SubitemSelectPowerWizardAbjurationRechargeArcaneWardTitle=Выберите слот Subclass/&WizardAbjurationDescription=Школа Ограждения делает упор на магию блокировки, изгнания и защиты. Это гордое и уважаемое призвание. Называемые оградителями, члены этой школы становятся востребованными, когда злобные духи нуждаются в экзорцизме, когда важные места должны быть защищены от магического шпионажа, и когда порталы на другие планы бытия должны быть закрыты. Subclass/&WizardAbjurationTitle=Ограждение Tag/&AbjurerSpellSpecialTagTitle=Заклинания подкласса Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=У вас есть {0} из {1} Магической защиты.\nКогда вы получаете урон, защита блокирует количество урона, равное её интенсивности, а сама интенсивность уменьшается на 1. Каждый раз, когда вы накладываете заклинание школы Ограждения, интенсивность защиты увеличивается на уровень заклинания, вплоть до двукратного значения вашего уровня Волшебника. -Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=У вас есть {0} из {1} Магической защиты.\nКогда вы получаете урон, его вместо вас получает защита. Если вы накладываете заклинание школы Ограждения 1-го уровня или выше, защита восстанавливает количество хитов, равное удвоенному уровню заклинания. +Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=У вас есть {0} из {1} Arcane Ward.\nВсякий раз, когда вы получаете урон, вард уменьшает урон на его значение и уменьшается на количество предотвращенного урона. Всякий раз, когда вы произносите заклинание отречения 1-го+ уровня, вард восстанавливает количество очков здоровья, равное 2-кратному уровню израсходованного слота заклинания. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardAbjuration-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardAbjuration-zh-CN.txt index 0b33d499a0..b98ad643d9 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardAbjuration-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardAbjuration-zh-CN.txt @@ -5,23 +5,31 @@ Feature/&MagicAffinityWizardAbjurationSavant2024Title=召唤专家 Feature/&MagicAffinityWizardAbjurationScriberDescription=从你在第 2 级选择这所学校开始,将召唤术咒语复制到你的法术书中所需花费的金钱和时间将减半。 Feature/&MagicAffinityWizardAbjurationScriberTitle=防护学者 Feature/&PowerWizardAbjurationArcaneWardBG3Description=你的法术残留的魔力会在你周围形成一道护盾,保护你免受伤害。每次施放防护法术时,护盾的强度都会增加,增加的数值与法术等级相同,最高可达你法师等级的 2 倍。\当你受到伤害时,护盾会阻挡与其强度相等的伤害,并且其强度会降低 1。\n每次长时间休息后,护盾的强度都会重置,并变为与你的法师等级相同。 -Feature/&PowerWizardAbjurationArcaneWardDescription=当你施放 1 级及以上的防护法术时,你会在自己身上形成一个魔法护盾,该护盾会持续到你完成长时间休息。护盾的生命值等于你的法师等级的两倍 + 你的智力调整值。每当你受到伤害时,护盾都会代替你承受伤害。每当你施放 1 级及以上的防护法术时,护盾都会恢复等于法术等级两倍的生命值。 +Feature/&PowerWizardAbjurationArcaneWardDescription=当你施放 1 级及以上的防护法术时,你会在自己身上形成一个魔法护盾,该护盾会持续到你完成长时间休息。护盾的生命值等于你的法师等级的两倍 + 你的智力调整值。每当你受到伤害时,护盾都会代替你承受伤害。每当你施放 1 级及以上的防护法术时,护盾都会恢复生命值,其数量等于消耗的法术位等级的 2 倍。 Feature/&PowerWizardAbjurationArcaneWardReduceDamageTitle=秘法守卫 Feature/&PowerWizardAbjurationArcaneWardTitle=秘法守卫 Feature/&PowerWizardAbjurationImprovedAbjurationDescription=将你的熟练加值添加到法术反制和驱散魔法能力检查中。 Feature/&PowerWizardAbjurationImprovedAbjurationTitle=强化防护 Feature/&PowerWizardAbjurationProjectedWardDescription=当你 30 英尺范围内可见的盟友受到伤害时,你可以使用你的反应使你的奥术守卫吸收该伤害。如果此伤害使守卫的生命值降至 0,则被守卫的生物将承受所有剩余伤害。 Feature/&PowerWizardAbjurationProjectedWardTitle=预计病房 +Feature/&PowerWizardAbjurationRechargeArcaneWardDescription=作为奖励行动,消耗一个法术位,让你的奥术守卫恢复相当于消耗法术位等级 2 倍的生命值。 +Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=充能奥术守卫 Feature/&PowerWizardAbjurationSpellResistanceDescription=在对抗法术的豁免检定和抵抗法术伤害方面获得优势。 Feature/&PowerWizardAbjurationSpellResistanceTitle=法术抗力 Feedback/&ArcaneWard={0} 具有 {1} 并且减少伤害 {2} +Feedback/&ArcaneWardRecharge={0} 的 {1} 恢复 {2} 点生命值。 Feedback/&ProjectedWard={0}使用{1}减少{2}受到的伤害 Reaction/&SpendPowerProjectedWardDescription={0} 即将受到伤害。{1} 可以做出反应并投射奥术守卫来减少伤害。 Reaction/&SpendPowerProjectedWardReactDescription=使用奥术守卫吸收伤害。 Reaction/&SpendPowerProjectedWardReactTitle=项目沃德 Reaction/&SpendPowerProjectedWardTitle=预计病房 +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardDescription=消耗一个法术位,使你的奥术守卫恢复相当于消耗法术位等级 2 倍的生命值。 +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactDescription=消耗法术位 +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactTitle=充电病房 +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardTitle=充能奥术守卫 +Reaction/&SubitemSelectPowerWizardAbjurationRechargeArcaneWardTitle=选择槽位 Subclass/&WizardAbjurationDescription=防护系强调阻挡、驱逐或保护魔法。这是一项令人骄傲和尊敬的职业。当恶灵需要驱魔、重要地点必须防范魔法监视以及通往其他存在位面的门户必须关闭时,人们就会寻求这个系的成员,他们被称为防护师。 Subclass/&WizardAbjurationTitle=放弃 Tag/&AbjurerSpellSpecialTagTitle=子类法术 Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=您拥有 {0} 个奥术守卫,总数量为 {1}。\n当您受到伤害时,守卫会阻挡与其强度相等的伤害量,并且其强度会降低 1。在您施放防护系法术后,守卫的强度会根据法术等级而增加,最高可达您法师等级的 2 倍。 -Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=您拥有 {0} 个奥术守卫,总数量为 {1} 个。\n每当您受到伤害时,守卫都会减少伤害,减幅等于其数值,并减少防止的伤害量。每当您施放 1 级及以上的防护法术时,守卫都会恢复等于该法术等级两倍的生命值。 +Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=您拥有 {0} 个奥术守卫,总数量为 {1} 个。\n每当您受到伤害时,守卫都会减少伤害,减少的数值等于所防止的伤害量。每当您施放 1 级及以上的防护法术时,守卫都会恢复生命值,其数量等于所消耗法术位等级的 2 倍。 From b39b027baa7400d826bea559958e83e7e968058d Mon Sep 17 00:00:00 2001 From: BradS Date: Thu, 31 Oct 2024 13:00:58 -0700 Subject: [PATCH 10/85] Fix crash with Projected Ward on non-characters --- SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs b/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs index 32ac5f87b0..bfa006eee4 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs @@ -534,7 +534,7 @@ public IEnumerator OnTryAlterOutcomeAttack( RulesetAttackMode attackMode, RulesetEffect rulesetEffect) { - if (action.AttackRollOutcome == RollOutcome.Failure) + if (action.AttackRollOutcome == RollOutcome.Failure || defender.RulesetCharacter == null) { yield break; } @@ -551,6 +551,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( SavingThrowData savingThrowData, bool hasHitVisual) { + if(defender.RulesetCharacter == null) { yield break; } var effectDescription = savingThrowData.EffectDescription; var canForceHalfDamage = attacker != null && savingThrowData.SourceDefinition is SpellDefinition spell From 00fa3b2a7248e2820810a3ccb531b4a8b8ee4138 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 31 Oct 2024 15:47:22 -0700 Subject: [PATCH 11/85] fix stacking Bardic Inspiration on attacks fix #5014 --- .../Patches/CharacterActionAttackPatcher.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs index 7617e147fa..1d4d72d909 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs @@ -278,8 +278,7 @@ internal static IEnumerator ExecuteImpl(CharacterActionAttack __instance) // BEGIN PATCH //BUGFIX: vanilla doesn't add the bardic die roll to attack success delta - if (__instance.AttackRollOutcome == RollOutcome.Success && - __instance.BardicDieRoll > 0) + if (__instance.BardicDieRoll > 0) { __instance.AttackSuccessDelta += __instance.BardicDieRoll; } From bde64ad10de51a423529dca892804d66149a0b45 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 31 Oct 2024 16:04:48 -0700 Subject: [PATCH 12/85] add Wizard Graviturgist gravity well power toggle --- .../ActionDefinition/GravityWellToggle.json | 74 +++++++++++++++++++ .../UnfinishedBusinessBlueprints/Assets.txt | 3 + .../WizardGraviturgist.json | 5 ++ .../ActionAffinityGravityWellToggle.json | 50 +++++++++++++ .../Api/GameExtensions/EnumExtensions.cs | 1 + .../ChangelogHistory.txt | 7 +- .../Models/CustomActionIdContext.cs | 11 ++- .../Subclasses/WizardGraviturgist.cs | 11 ++- .../de/SubClasses/WizardGraviturgist-de.txt | 2 + .../en/SubClasses/WizardGraviturgist-en.txt | 2 + .../es/SubClasses/WizardGraviturgist-es.txt | 2 + .../fr/SubClasses/WizardGraviturgist-fr.txt | 2 + .../it/SubClasses/WizardGraviturgist-it.txt | 2 + .../ja/SubClasses/WizardGraviturgist-ja.txt | 2 + .../ko/SubClasses/WizardGraviturgist-ko.txt | 2 + .../SubClasses/WizardGraviturgist-pt-BR.txt | 2 + .../ru/SubClasses/WizardGraviturgist-ru.txt | 2 + .../SubClasses/WizardGraviturgist-zh-CN.txt | 2 + 18 files changed, 177 insertions(+), 5 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/GravityWellToggle.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityGravityWellToggle.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/GravityWellToggle.json b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/GravityWellToggle.json new file mode 100644 index 0000000000..39708741c6 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/GravityWellToggle.json @@ -0,0 +1,74 @@ +{ + "$type": "ActionDefinition, Assembly-CSharp", + "id": 9079, + "actionType": "NoCost", + "actionScope": "All", + "pairedActionId": "NoAction", + "usesPerTurn": -1, + "classNameOverride": "Toggle", + "requiresAuthorization": true, + "stealthBreakerBehavior": "None", + "feedbackOnHoverType": "None", + "iterativeTargeting": false, + "canTriggerBattle": false, + "parameter": "None", + "formType": "Large", + "overrideGuiActionType": false, + "overridenGuiActionType": "Main", + "focusCameraOnAction": false, + "addedConditionName": "", + "removedConditionName": "", + "preventsSerialization": false, + "baseActionForFailureTooltips": null, + "activatedPower": "Definition:PowerMonkStunningStrike:5e112de763b0d40428c65e6b825a2f74", + "displayPowerTooltip": false, + "dieType": "D10", + "abilityScore": "Dexterity", + "addLevel": false, + "maxCells": 1, + "targetType": "Sphere", + "targetParameter": 1, + "matchingCondition": "", + "particlePrefab": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "soundEvent": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Action/&GravityWellToggleTitle", + "description": "Action/&GravityWellToggleDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f039effbc135454c9bb55de2851472b1", + "m_SubObjectName": "MetamagicToggle", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "cef3a8c0-6400-5474-8c85-2bc531d1f09b", + "contentPack": 9999, + "name": "GravityWellToggle" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index da3bb1dabc..3c0e6b30c4 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -50,6 +50,7 @@ FeatCrusherToggle ActionDefinition ActionDefinition be86cb95-c859-56c6-85c0-22d0 ForcePoweredStrikeToggle ActionDefinition ActionDefinition 7539c495-7bc8-51d6-82e3-ca97211ecd5a GloomBladeToggle ActionDefinition ActionDefinition 39cc625c-5121-5265-b113-bec2403455e2 GrappleOnUnarmedToggle ActionDefinition ActionDefinition 905bb431-ccf9-5e27-90e6-3c1fda1e981e +GravityWellToggle ActionDefinition ActionDefinition cef3a8c0-6400-5474-8c85-2bc531d1f09b HailOfBladesToggle ActionDefinition ActionDefinition d8a54013-ea97-5387-bb2d-2e5c69a0553e ImpishWrathToggle ActionDefinition ActionDefinition ef8a2e31-1745-5809-8b37-c88c56239583 InventorInfusion ActionDefinition ActionDefinition 642db154-e1fa-5314-a5f5-685937d12c3b @@ -1664,6 +1665,7 @@ ActionAffinityFeatShieldTechniques FeatureDefinitionActionAffinity FeatureDefini ActionAffinityForcePoweredStrikeToggle FeatureDefinitionActionAffinity FeatureDefinition cbbd4334-c6c1-5523-a29d-08e16284f63f ActionAffinityGloomBladeToggle FeatureDefinitionActionAffinity FeatureDefinition 9072bd79-baa3-5e84-ac35-92c73dae5ed0 ActionAffinityGrappleOnUnarmedToggle FeatureDefinitionActionAffinity FeatureDefinition a4891995-4db5-5484-aabe-b86340b9fbe2 +ActionAffinityGravityWellToggle FeatureDefinitionActionAffinity FeatureDefinition 7384e03c-b244-5c70-b1ef-f1c73eadf997 ActionAffinityHailOfBladesToggle FeatureDefinitionActionAffinity FeatureDefinition 869c1170-11cd-5c19-88fe-eba8456f7fda ActionAffinityHeroicInfusion FeatureDefinitionActionAffinity FeatureDefinition edbfbc22-adb1-5e9f-9267-77d8638c7447 ActionAffinityImpForestInnateCunning FeatureDefinitionActionAffinity FeatureDefinition 5692e3e8-fb5c-5eee-8d61-ed7e369f75e7 @@ -4339,6 +4341,7 @@ ActionAffinityFeatShieldTechniques FeatureDefinitionActionAffinity FeatureDefini ActionAffinityForcePoweredStrikeToggle FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity cbbd4334-c6c1-5523-a29d-08e16284f63f ActionAffinityGloomBladeToggle FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 9072bd79-baa3-5e84-ac35-92c73dae5ed0 ActionAffinityGrappleOnUnarmedToggle FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity a4891995-4db5-5484-aabe-b86340b9fbe2 +ActionAffinityGravityWellToggle FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 7384e03c-b244-5c70-b1ef-f1c73eadf997 ActionAffinityHailOfBladesToggle FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 869c1170-11cd-5c19-88fe-eba8456f7fda ActionAffinityHeroicInfusion FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity edbfbc22-adb1-5e9f-9267-77d8638c7447 ActionAffinityImpForestInnateCunning FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 5692e3e8-fb5c-5eee-8d61-ed7e369f75e7 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/CharacterSubclassDefinition/WizardGraviturgist.json b/Diagnostics/UnfinishedBusinessBlueprints/CharacterSubclassDefinition/WizardGraviturgist.json index 935cb249d1..10c2ea028b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/CharacterSubclassDefinition/WizardGraviturgist.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/CharacterSubclassDefinition/WizardGraviturgist.json @@ -21,6 +21,11 @@ "featureDefinition": "Definition:PowerWizardGraviturgistGravityWell:faf3975c-aac0-5eab-b363-62a253150e4d", "level": 6 }, + { + "$type": "FeatureUnlockByLevel, Assembly-CSharp", + "featureDefinition": "Definition:ActionAffinityGravityWellToggle:7384e03c-b244-5c70-b1ef-f1c73eadf997", + "level": 6 + }, { "$type": "FeatureUnlockByLevel, Assembly-CSharp", "featureDefinition": "Definition:PowerWizardGraviturgistViolentAttraction:643279dd-430f-5388-95a0-5a31d68ca973", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityGravityWellToggle.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityGravityWellToggle.json new file mode 100644 index 0000000000..7515c133bc --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityGravityWellToggle.json @@ -0,0 +1,50 @@ +{ + "$type": "FeatureDefinitionActionAffinity, Assembly-CSharp", + "allowedActionTypes": [ + true, + true, + true, + true, + true, + true + ], + "eitherMainOrBonus": false, + "maxAttacksNumber": -1, + "forbiddenActions": [], + "authorizedActions": [ + 9079 + ], + "restrictedActions": [], + "actionExecutionModifiers": [], + "specialBehaviour": "None", + "randomBehaviorDie": "D10", + "randomBehaviourOptions": [], + "rechargeReactionsAtEveryTurn": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "7384e03c-b244-5c70-b1ef-f1c73eadf997", + "contentPack": 9999, + "name": "ActionAffinityGravityWellToggle" +} \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs index 34a6b3ce97..6b4c00580d 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs @@ -81,6 +81,7 @@ internal enum ExtraActionId PowerAttackToggle, DeadEyeToggle, OverChannelToggle, + GravityWellToggle, PrioritizeAction = 10000 } diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 13ef190cd3..b79864482f 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -4,9 +4,10 @@ - added Character > Classes > 'Enable Wizard to learn Scholar at level 2' [OneDnd] - added Character > Subclasses > 'Swap Abjurer abjuration savant with 5e 2024 version' [OneDnd] - added Character > Subclasses > 'Swap Evoker evocation savant with 5e 2024 version' [OneDnd] -- added recharge bonus action to Wizard Abjuration arcane ward -- improved Wizard Graviturgist descriptions, SFX, and behaviors -- renamed mod UI tabletop sections to 5e 2014, and 5e 2024 +- added Wizard Abjuration arcane ward recharge bonus action +- added Wizard Graviturgist gravity well power toggle +- fixed Wizard Abjuration projected ward crash on gadgets +- fixed Wizard Graviturgist descriptions, SFX, and behaviors KNOWN ISSUES: diff --git a/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs b/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs index 24d369f1fd..5c3d149e92 100644 --- a/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs +++ b/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs @@ -50,7 +50,8 @@ public static class CustomActionIdContext (Id)ExtraActionId.CleavingAttackToggle, (Id)ExtraActionId.PowerAttackToggle, (Id)ExtraActionId.DeadEyeToggle, - (Id)ExtraActionId.OverChannelToggle + (Id)ExtraActionId.OverChannelToggle, + (Id)ExtraActionId.GravityWellToggle ]; private static readonly List ExtraActionIdPowers = @@ -405,6 +406,14 @@ private static void BuildCustomToggleActions() .SetActionId(ExtraActionId.OverChannelToggle) .OverrideClassName("Toggle") .AddToDB(); + + ActionDefinitionBuilder + .Create(MetamagicToggle, "GravityWellToggle") + .SetOrUpdateGuiPresentation(Category.Action) + .RequiresAuthorization() + .SetActionId(ExtraActionId.GravityWellToggle) + .OverrideClassName("Toggle") + .AddToDB(); } private static void BuildFarStepAction() diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardGraviturgist.cs b/SolastaUnfinishedBusiness/Subclasses/WizardGraviturgist.cs index c5fd8a4c7b..4652511372 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardGraviturgist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardGraviturgist.cs @@ -10,6 +10,7 @@ using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ConditionDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionActionAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; namespace SolastaUnfinishedBusiness.Subclasses; @@ -136,6 +137,12 @@ public WizardGraviturgist() // Gravity Well + var actionAffinityGravityWellToggle = FeatureDefinitionActionAffinityBuilder + .Create(ActionAffinitySorcererMetamagicToggle, "ActionAffinityGravityWellToggle") + .SetGuiPresentationNoContent(true) + .SetAuthorizedActions((ActionDefinitions.Id)ExtraActionId.GravityWellToggle) + .AddToDB(); + var powerGravityWell = FeatureDefinitionPowerBuilder .Create($"Power{Name}GravityWell") .SetGuiPresentation(Category.Feature) @@ -151,6 +158,8 @@ public WizardGraviturgist() .SetMotionForm(MotionForm.MotionType.PushFromOrigin, 1) .Build()) .Build()) + .AddCustomSubFeatures(new ValidatorsValidatePowerUse(c => + c.IsToggleEnabled((ActionDefinitions.Id)ExtraActionId.OverChannelToggle))) .AddToDB(); // LEVEL 10 @@ -279,7 +288,7 @@ public WizardGraviturgist() .Create(Name) .SetGuiPresentation(Category.Subclass, Sprites.GetSprite(Name, Resources.WizardGravityMage, 256)) .AddFeaturesAtLevel(2, powerDensity, powerDensityIncrease, powerDensityDecrease) - .AddFeaturesAtLevel(6, powerGravityWell) + .AddFeaturesAtLevel(6, actionAffinityGravityWellToggle, powerGravityWell) .AddFeaturesAtLevel(10, powerViolentAttraction) .AddFeaturesAtLevel(14, powerEventHorizon) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardGraviturgist-de.txt b/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardGraviturgist-de.txt index 9efb71d32c..4ccd081f9c 100644 --- a/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardGraviturgist-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardGraviturgist-de.txt @@ -1,3 +1,5 @@ +Action/&GravityWellToggleDescription=Schwerkraftbrunnen aktivieren/deaktivieren +Action/&GravityWellToggleTitle=Schwerkraftbrunnen Condition/&ConditionWizardGraviturgistDensityDecreaseDescription=Geschwindigkeit um 2 erhöht. Nachteil bei Stärkeprüfungen und Rettungswürfen. Condition/&ConditionWizardGraviturgistDensityDecreaseTitle=Verringerte Dichte Condition/&ConditionWizardGraviturgistDensityIncreaseDescription=Geschwindigkeit um 2 verringert. Vorteil bei Stärkeprüfungen und Rettungswürfen. diff --git a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardGraviturgist-en.txt b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardGraviturgist-en.txt index 0d631469af..e66819d1e7 100644 --- a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardGraviturgist-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardGraviturgist-en.txt @@ -22,3 +22,5 @@ Feedback/&AdditionalDamageViolentAttractionFormat=Violent Attraction! Feedback/&AdditionalDamageViolentAttractionLine={0} performs a violent attraction attack on {1} (+{2}) Subclass/&WizardGraviturgistDescription=Understanding and mastering the forces that draw bodies of matter together or drive them apart, the students of the Graviturgy arcane tradition learn to further bend and manipulate the violent energy of gravity to their benefit, and the terrible detriment of their enemies. Subclass/&WizardGraviturgistTitle=Graviturgist +Action/&GravityWellToggleDescription=Activate/Deactivate Gravity Well +Action/&GravityWellToggleTitle=Gravity Well diff --git a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardGraviturgist-es.txt b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardGraviturgist-es.txt index 6114790cca..201fd74a13 100644 --- a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardGraviturgist-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardGraviturgist-es.txt @@ -1,3 +1,5 @@ +Action/&GravityWellToggleDescription=Activar/desactivar pozo de gravedad +Action/&GravityWellToggleTitle=Pozo de gravedad Condition/&ConditionWizardGraviturgistDensityDecreaseDescription=Velocidad aumentada en 2. Desventaja en pruebas de Fuerza y tiros de salvación. Condition/&ConditionWizardGraviturgistDensityDecreaseTitle=Densidad reducida Condition/&ConditionWizardGraviturgistDensityIncreaseDescription=Velocidad reducida en 2. Ventaja en pruebas de Fuerza y tiradas de salvación. diff --git a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardGraviturgist-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardGraviturgist-fr.txt index 6dfe47e3e1..721b193f1f 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardGraviturgist-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardGraviturgist-fr.txt @@ -1,3 +1,5 @@ +Action/&GravityWellToggleDescription=Activer/désactiver le puits de gravité +Action/&GravityWellToggleTitle=Puits de gravité Condition/&ConditionWizardGraviturgistDensityDecreaseDescription=Vitesse augmentée de 2. Désavantage aux tests de Force et aux jets de sauvegarde. Condition/&ConditionWizardGraviturgistDensityDecreaseTitle=Densité diminuée Condition/&ConditionWizardGraviturgistDensityIncreaseDescription=Vitesse diminuée de 2. Avantage aux tests de Force et aux jets de sauvegarde. diff --git a/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardGraviturgist-it.txt b/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardGraviturgist-it.txt index cea3817fd2..468d0cc622 100644 --- a/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardGraviturgist-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardGraviturgist-it.txt @@ -1,3 +1,5 @@ +Action/&GravityWellToggleDescription=Attiva/disattiva Gravity Well +Action/&GravityWellToggleTitle=Pozzo gravitazionale Condition/&ConditionWizardGraviturgistDensityDecreaseDescription=Velocità aumentata di 2. Svantaggio nelle prove di Forza e nei tiri salvezza. Condition/&ConditionWizardGraviturgistDensityDecreaseTitle=Densità ridotta Condition/&ConditionWizardGraviturgistDensityIncreaseDescription=Velocità ridotta di 2. Vantaggio nelle prove di Forza e nei tiri salvezza. diff --git a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardGraviturgist-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardGraviturgist-ja.txt index a2c1dd8504..0494fd1673 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardGraviturgist-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardGraviturgist-ja.txt @@ -1,3 +1,5 @@ +Action/&GravityWellToggleDescription=重力井戸を有効化/無効化 +Action/&GravityWellToggleTitle=重力井戸 Condition/&ConditionWizardGraviturgistDensityDecreaseDescription=速度が 2 増加。体力チェックとセーヴィング スローに不利。 Condition/&ConditionWizardGraviturgistDensityDecreaseTitle=密度の低下 Condition/&ConditionWizardGraviturgistDensityIncreaseDescription=スピードが 2 減少。筋力チェックとセーヴィング スローで有利。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardGraviturgist-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardGraviturgist-ko.txt index 15ba42451a..9339533e86 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardGraviturgist-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardGraviturgist-ko.txt @@ -1,3 +1,5 @@ +Action/&GravityWellToggleDescription=중력 우물 활성화/비활성화 +Action/&GravityWellToggleTitle=중력 우물 Condition/&ConditionWizardGraviturgistDensityDecreaseDescription=속도가 2만큼 증가했습니다. 근력 판정과 내성 굴림에 불리합니다. Condition/&ConditionWizardGraviturgistDensityDecreaseTitle=밀도 감소 Condition/&ConditionWizardGraviturgistDensityIncreaseDescription=속도가 2만큼 감소했습니다. 근력 판정과 내성 굴림에 유리합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardGraviturgist-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardGraviturgist-pt-BR.txt index 0159564807..cf23ef8777 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardGraviturgist-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardGraviturgist-pt-BR.txt @@ -1,3 +1,5 @@ +Action/&GravityWellToggleDescription=Ativar/Desativar Poço Gravitacional +Action/&GravityWellToggleTitle=Poço de gravidade Condition/&ConditionWizardGraviturgistDensityDecreaseDescription=Velocidade aumentada em 2. Desvantagem em testes de Força e testes de resistência. Condition/&ConditionWizardGraviturgistDensityDecreaseTitle=Densidade Diminuída Condition/&ConditionWizardGraviturgistDensityIncreaseDescription=Velocidade reduzida em 2. Vantagem em testes de Força e testes de resistência. diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardGraviturgist-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardGraviturgist-ru.txt index a62f3c9685..e0fd6d9dfa 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardGraviturgist-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardGraviturgist-ru.txt @@ -1,3 +1,5 @@ +Action/&GravityWellToggleDescription=Активировать/Деактивировать Gravity Well +Action/&GravityWellToggleTitle=Гравитационный колодец Condition/&ConditionWizardGraviturgistDensityDecreaseDescription=Скорость увеличена на 2. Помеха на проверки и спасброски Силы. Condition/&ConditionWizardGraviturgistDensityDecreaseTitle=Уменьшенная плотность Condition/&ConditionWizardGraviturgistDensityIncreaseDescription=Скорость уменьшена на 2. Преимущество на проверки и спасброски Силы. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardGraviturgist-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardGraviturgist-zh-CN.txt index 7a66662eb3..7fa6bd7680 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardGraviturgist-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardGraviturgist-zh-CN.txt @@ -1,3 +1,5 @@ +Action/&GravityWellToggleDescription=启动/关闭重力井 +Action/&GravityWellToggleTitle=重力井 Condition/&ConditionWizardGraviturgistDensityDecreaseDescription=移动速度增加 2 尺。在力量检定和豁免检定上具有劣势。 Condition/&ConditionWizardGraviturgistDensityDecreaseTitle=降低密度 Condition/&ConditionWizardGraviturgistDensityIncreaseDescription=移动速度降低 2 尺。在力量检定和豁免检定上具有优势。 From a45c1e0e319da47cde8fdbaa41058c19391cba7c Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 31 Oct 2024 17:36:19 -0700 Subject: [PATCH 13/85] add visual effects to Projected Ward --- .../Subclasses/WizardAbjuration.cs | 13 +++++++++---- .../en/SubClasses/WizardAbjuration-en.txt | 12 ++++++------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs b/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs index bfa006eee4..a111e2db43 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs @@ -15,6 +15,7 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionDamageAffinitys; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSavingThrowAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSubclassChoices; using Resources = SolastaUnfinishedBusiness.Properties.Resources; @@ -302,11 +303,11 @@ private static FeatureDefinitionPower BuildRechargeArcaneWard() var powerRechargeArcaneWard = FeatureDefinitionPowerBuilder .Create($"Power{Name}RechargeArcaneWard") .SetGuiPresentation(Category.Feature, - $"Feature/&Power{Name}RechargeArcaneWardDescription", - FeatureDefinitionPowers.PowerTraditionCourtMageSpellShield) + $"Feature/&Power{Name}RechargeArcaneWardDescription", PowerTraditionCourtMageSpellShield) .SetUsesFixed(ActivationTime.BonusAction) .SetShowCasting(false) .AddToDB(); + powerRechargeArcaneWard.AddCustomSubFeatures(new CustomBehaviorRechargeArcaneWard(powerRechargeArcaneWard)); return powerRechargeArcaneWard; @@ -339,7 +340,6 @@ private static void ArcaneWardModifyDamage( if (!HasActiveArcaneWard(character)) { return; } var ward = character.GetRemainingPowerCharges(PowerArcaneWard); - var prevented = ward <= damage ? ward : damage; var spent = IsBg3Mode ? 1 : prevented; @@ -551,7 +551,8 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( SavingThrowData savingThrowData, bool hasHitVisual) { - if(defender.RulesetCharacter == null) { yield break; } + if (defender.RulesetCharacter == null) { yield break; } + var effectDescription = savingThrowData.EffectDescription; var canForceHalfDamage = attacker != null && savingThrowData.SourceDefinition is SpellDefinition spell @@ -607,6 +608,10 @@ void ReactionValidated() activeCondition.sourceGuid = helper.RulesetCharacter.Guid; + EffectHelpers.StartVisualEffect(helper, helper, + Counterspell, EffectHelpers.EffectType.Caster); + EffectHelpers.StartVisualEffect(defender, defender, + PowerTraditionCourtMageSpellShield, EffectHelpers.EffectType.Caster); defender.RulesetCharacter.AddConditionOfCategory( AttributeDefinitions.TagEffect, activeCondition, false); diff --git a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardAbjuration-en.txt b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardAbjuration-en.txt index 418db4a974..496b026758 100644 --- a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardAbjuration-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardAbjuration-en.txt @@ -7,26 +7,26 @@ Feature/&PowerWizardAbjurationArcaneWardBG3Description=The residual magic of you Feature/&PowerWizardAbjurationArcaneWardDescription=When you cast an abjuration spell of 1st+ level, you create a magical ward on yourself that lasts until you finish a long rest. The ward has hit points equal to twice your wizard level + your Intelligence modifier. Whenever you take damage, the ward takes the damage instead. Whenever you cast an abjuration spell of 1st+ level, the ward regains a number of hit points equal to 2x the level of the expended spell slot. Feature/&PowerWizardAbjurationArcaneWardReduceDamageTitle=Arcane Ward Feature/&PowerWizardAbjurationArcaneWardTitle=Arcane Ward -Feature/&PowerWizardAbjurationRechargeArcaneWardDescription=As a bonus action, expend a spell slot to have your Arcane Ward regains a Hit Points equal to 2x the level of the expended spell slot.. -Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=Recharge Arcane Ward Feature/&PowerWizardAbjurationImprovedAbjurationDescription=Add your Proficiency Bonus to Counterspell and Dispel Magic ability checks. Feature/&PowerWizardAbjurationImprovedAbjurationTitle=Improved Abjuration Feature/&PowerWizardAbjurationProjectedWardDescription=When an ally that you can see within 30 feet of you takes damage, you can use your reaction to cause your Arcane Ward to absorb that damage. If this damage reduces the ward to 0 hit points, the warded creature takes any remaining damage. Feature/&PowerWizardAbjurationProjectedWardTitle=Projected Ward +Feature/&PowerWizardAbjurationRechargeArcaneWardDescription=As a bonus action, expend a spell slot to have your Arcane Ward regains a Hit Points equal to 2x the level of the expended spell slot.. +Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=Recharge Arcane Ward Feature/&PowerWizardAbjurationSpellResistanceDescription=Gain advantage on saving throws against spells, and resistance to spell damage. Feature/&PowerWizardAbjurationSpellResistanceTitle=Spell Resistance Feedback/&ArcaneWard={0} has {1} and reduces damage by {2} Feedback/&ArcaneWardRecharge={0}'s {1} regains {2} Hit Points. Feedback/&ProjectedWard={0} uses {1} to reduce damage taken by {2} +Reaction/&SpendPowerProjectedWardDescription={0} is about to take damage. {1} can react and project their Arcane Ward to reduce the damage. +Reaction/&SpendPowerProjectedWardReactDescription=Absorb damage with your Arcane Ward. +Reaction/&SpendPowerProjectedWardReactTitle=Project Ward +Reaction/&SpendPowerProjectedWardTitle=Projected Ward Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardDescription=Expend a spell slot to have your Arcane Ward regains a Hit Points equal to 2x the level of the expended spell slot. Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactDescription=Expend spell slot Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactTitle=Recharge Ward Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardTitle=Recharge Arcane Ward Reaction/&SubitemSelectPowerWizardAbjurationRechargeArcaneWardTitle=Select slot -Reaction/&SpendPowerProjectedWardDescription={0} is about to take damage. {1} can react and project their Arcane Ward to reduce the damage. -Reaction/&SpendPowerProjectedWardReactDescription=Absorb damage with your Arcane Ward. -Reaction/&SpendPowerProjectedWardReactTitle=Project Ward -Reaction/&SpendPowerProjectedWardTitle=Projected Ward Subclass/&WizardAbjurationDescription=The School of Abjuration emphasizes magic that blocks, banishes, or protects. It is a proud and respected vocation.Called abjurers, members of this school are sought when baleful spirits require exorcism, when important locations must be guarded against magical spying, and when portals to other planes of existence must be closed. Subclass/&WizardAbjurationTitle=Abjurer Tag/&AbjurerSpellSpecialTagTitle=Subclass Spells From 554b0403d42577f1773652a95e23c09ec405b69b Mon Sep 17 00:00:00 2001 From: BradS Date: Thu, 31 Oct 2024 20:03:49 -0700 Subject: [PATCH 14/85] Enable Wildfire Spirit to act if summoner is incapacitated --- SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs index afe13e2c54..31082d2728 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs @@ -588,8 +588,10 @@ private static bool IsCommanded(RulesetCharacter character) return true; } - //can act if summoner is KO - return summoner.IsUnconscious || + //can act if summoner is Incapacitated + return summoner.IsIncapacitated || + summoner.HasAnyFeature(FeatureDefinitionActionAffinitys.ActionAffinityConditionIncapacitated) || + summoner.isDeadOrDyingOrUnconscious || //can act if summoner commanded summoner.HasConditionOfType(ConditionCommandSpirit); } From eb1f8e0e64a8afc505cb47fc228331030aa2e22e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 31 Oct 2024 21:01:07 -0700 Subject: [PATCH 15/85] improve EnableSurprisedToEnforceDisadvantage to also replace the condition description on switch --- SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index 61a1242fd8..83c7a089f5 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -547,12 +547,15 @@ internal static void SwitchOneDndSurprisedEnforceDisadvantage() if (Main.Settings.EnableSurprisedToEnforceDisadvantage) { ConditionDefinitions.ConditionSurprised.Features.SetRange(CombatAffinityConditionSurprised); + ConditionDefinitions.ConditionSurprised.GuiPresentation.Description = Gui.NoLocalization; } else { ConditionDefinitions.ConditionSurprised.Features.SetRange( FeatureDefinitionActionAffinitys.ActionAffinityConditionSurprised, FeatureDefinitionMovementAffinitys.MovementAffinityConditionSurprised); + ConditionDefinitions.ConditionSurprised.GuiPresentation.Description = + "Rules/&ConditionSurprisedDescription"; } } From bea71c0e1d6c16b8ee82738d34449608df75857b Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 31 Oct 2024 21:28:07 -0700 Subject: [PATCH 16/85] fix recurrent effects interaction with immunity from proxies -fix #5018 --- .../Patches/RuleDefinitionsPatcher.cs | 13 +++++++++ .../Patches/RulesetEffectSpellPatcher.cs | 27 ++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Patches/RuleDefinitionsPatcher.cs b/SolastaUnfinishedBusiness/Patches/RuleDefinitionsPatcher.cs index d2e7763068..d32e4fef8d 100644 --- a/SolastaUnfinishedBusiness/Patches/RuleDefinitionsPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RuleDefinitionsPatcher.cs @@ -47,6 +47,19 @@ public static void Postfix( } } + //BUGFIX: immunity from positions was incorrectly using < instead of <= to calculate the final result + [HarmonyPatch(typeof(RuleDefinitions), nameof(IsPositionImmuneToSpell))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class IsPositionImmuneToSpell_Patch + { + [UsedImplicitly] + public static void Postfix(out bool __result, int spellLevel, int totalSpellLevel) + { + __result = spellLevel <= totalSpellLevel; + } + } + [HarmonyPatch(typeof(RuleDefinitions), nameof(TryGetAncestryDamageTypeFromCharacter))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] [UsedImplicitly] diff --git a/SolastaUnfinishedBusiness/Patches/RulesetEffectSpellPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetEffectSpellPatcher.cs index 80d0161ce3..04c9b7b5ab 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetEffectSpellPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetEffectSpellPatcher.cs @@ -9,6 +9,7 @@ using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Behaviors.Specific; using SolastaUnfinishedBusiness.Models; +using TA; using static RuleDefinitions; namespace SolastaUnfinishedBusiness.Patches; @@ -16,13 +17,37 @@ namespace SolastaUnfinishedBusiness.Patches; [UsedImplicitly] public static class RulesetEffectSpellPatcher { - //PATCH: supports CasterLevelTable with recurrent effects [HarmonyPatch(typeof(RulesetEffectSpell), nameof(RulesetEffectSpell.ApplyEffectOnCharacter))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] [UsedImplicitly] // ReSharper disable once InconsistentNaming public static class ApplyEffectOnCharacter_Patch { + //BUGFIX: prevent recurrent effects from applying on positions with spell immunity + [UsedImplicitly] + public static bool Prefix( + RulesetEffectSpell __instance, + RulesetActor targetCharacter, + bool hasValidPosition, + int3 targetPosition) + { + var spellDefinition = __instance.SpellDefinition; + var rulesetSource = EffectHelpers.GetCharacterByGuid(__instance.SourceGuid); + var source = GameLocationCharacter.GetFromActor(rulesetSource); + + if (!hasValidPosition || + !IsPositionImmuneToSpell(targetPosition, source.LocationPosition, spellDefinition.SpellLevel, + out var spellLevel)) + { + return true; + } + + targetCharacter.ImmuneToSpellLevel?.Invoke(targetCharacter, spellDefinition, spellLevel); + + return false; + } + + //PATCH: supports CasterLevelTable with recurrent effects [UsedImplicitly] public static IEnumerable Transpiler([NotNull] IEnumerable instructions) { From 1e004779517e9b8ddc9a715f3e121158478fd211 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 31 Oct 2024 21:32:51 -0700 Subject: [PATCH 17/85] fix Charmed by Hypnotic Pattern not getting considered at incapacitated checks [VANILLA] --- .../Api/DatabaseHelper-RELEASE.cs | 3 +++ .../ChangelogHistory.txt | 4 ++++ .../Patches/RulesetCharacterPatcher.cs | 23 +++++++++++++++---- .../Subclasses/CircleOfTheWildfire.cs | 1 - 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 4331265e01..d1e4a879c6 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -308,6 +308,9 @@ internal static class CharacterSubclassDefinitions internal static class ConditionDefinitions { + internal static ConditionDefinition ConditionCharmedByHypnoticPattern { get; } = + GetDefinition("ConditionCharmedByHypnoticPattern"); + internal static ConditionDefinition ConditionHeavilyEncumbered { get; } = GetDefinition("ConditionHeavilyEncumbered"); diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index b79864482f..a255512a74 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -6,6 +6,10 @@ - added Character > Subclasses > 'Swap Evoker evocation savant with 5e 2024 version' [OneDnd] - added Wizard Abjuration arcane ward recharge bonus action - added Wizard Graviturgist gravity well power toggle +- fixed bardic inspiration on attack rolls not stacking with similar behaviors [VANILLA] +- fixed Charmed by Hypnotic Pattern not getting considered at incapacitated checks [VANILLA] +- fixed Circle of Wildfire spirit allowed actions when summoner is incapacitated +- fixed recurrent effects interaction with immunity from proxies [VANILLA] - fixed Wizard Abjuration projected ward crash on gadgets - fixed Wizard Graviturgist descriptions, SFX, and behaviors diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs index 8e74b0b08b..804e61288e 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs @@ -1,6 +1,4 @@ -// using SolastaUnfinishedBusiness.Classes; - -using System; +using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; @@ -24,7 +22,6 @@ using static FeatureDefinitionAttributeModifier; using static ActionDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; -// using static SolastaUnfinishedBusiness.Api.DatabaseHelper.DecisionPackageDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionMagicAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; @@ -294,6 +291,24 @@ public static void Postfix(RulesetCharacter __instance, ref bool __result) } } + //BUGFIX: Charmed by Hypnotic Pattern isn't marking isIncapacitated as true as it parent is charmed + [HarmonyPatch(typeof(RulesetCharacter), nameof(RulesetCharacter.RefreshConditionFlags))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class RefreshConditionFlags_Patch + { + [UsedImplicitly] + public static void Postfix(RulesetCharacter __instance) + { + if (!__instance.IsIncapacitated && __instance.HasConditionOfCategoryAndType( + AttributeDefinitions.TagEffect, + DatabaseHelper.ConditionDefinitions.ConditionCharmedByHypnoticPattern.Name)) + { + __instance.isIncapacitated = true; + } + } + } + [HarmonyPatch(typeof(RulesetCharacter), nameof(RulesetCharacter.FindFirstRetargetableEffect))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] [UsedImplicitly] diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs index 31082d2728..afc5313d68 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs @@ -590,7 +590,6 @@ private static bool IsCommanded(RulesetCharacter character) //can act if summoner is Incapacitated return summoner.IsIncapacitated || - summoner.HasAnyFeature(FeatureDefinitionActionAffinitys.ActionAffinityConditionIncapacitated) || summoner.isDeadOrDyingOrUnconscious || //can act if summoner commanded summoner.HasConditionOfType(ConditionCommandSpirit); From 899867216c8c19d7105dc1d465e2b01b92724e27 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 31 Oct 2024 21:57:06 -0700 Subject: [PATCH 18/85] fix Charmed by Hypnotic Pattern not getting considered on incapacitated checks --- .../ConditionForestGuardianBarkWard.json | 3 +- ...nditionForestGuardianImprovedBarkWard.json | 3 +- .../ConditionGrappleSource.json | 3 +- .../ConditionGrappleSourceWithGrappler.json | 3 +- ...ditionGrappleSourceWithGrapplerLarger.json | 3 +- ...ionMartialForceKnightForceBulwarkSelf.json | 3 +- .../ConditionMonkSuperiorDefense.json | 3 +- .../GameLocationCharacterExtensions.cs | 2 +- .../Builders/ConditionDefinitionBuilder.cs | 6 ++++ .../ChangelogHistory.txt | 2 +- .../FightingStyles/Executioner.cs | 32 ++++++++++--------- .../Models/CharacterUAContext.cs | 1 + .../Models/GrappleContext.cs | 3 ++ .../Models/Level20Context.cs | 4 +-- .../Models/Level20SubclassesContext.cs | 21 ++++++------ SolastaUnfinishedBusiness/Races/Oligath.cs | 2 +- .../Subclasses/Builders/GambitsBuilders.cs | 4 +-- .../Subclasses/CircleOfTheForestGuardian.cs | 2 ++ .../Subclasses/MartialForceKnight.cs | 1 + .../Subclasses/MartialWarlord.cs | 4 +-- .../Subclasses/RoguishDuelist.cs | 2 +- 21 files changed, 65 insertions(+), 42 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionForestGuardianBarkWard.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionForestGuardianBarkWard.json index aa5aaecaa2..62e848d4d4 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionForestGuardianBarkWard.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionForestGuardianBarkWard.json @@ -63,7 +63,8 @@ "Definition:ConditionSwallowedShamblingMound:10cc7c5600c606f43b33ab8775ebfc68", "Definition:ConditionUnconscious:2d543b2740ecddd4a977d8a706a8a2c9", "Definition:ConditionBanishedByBanishment:2e051532-eaa9-5f4c-8af2-2c47b3a8f501", - "Definition:ConditionBanishingSmiteEnemy:ba2fe0a0-1836-5755-af0e-876571bae0d2" + "Definition:ConditionBanishingSmiteEnemy:ba2fe0a0-1836-5755-af0e-876571bae0d2", + "Definition:ConditionCharmedByHypnoticPattern:5396f18314418ed449b0cd42f887aae1" ], "additionalDamageWhenHit": false, "additionalDamageTypeDetermination": "Specific", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionForestGuardianImprovedBarkWard.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionForestGuardianImprovedBarkWard.json index a4b0acab5e..b0dfdd279f 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionForestGuardianImprovedBarkWard.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionForestGuardianImprovedBarkWard.json @@ -65,7 +65,8 @@ "Definition:ConditionSwallowedShamblingMound:10cc7c5600c606f43b33ab8775ebfc68", "Definition:ConditionUnconscious:2d543b2740ecddd4a977d8a706a8a2c9", "Definition:ConditionBanishedByBanishment:2e051532-eaa9-5f4c-8af2-2c47b3a8f501", - "Definition:ConditionBanishingSmiteEnemy:ba2fe0a0-1836-5755-af0e-876571bae0d2" + "Definition:ConditionBanishingSmiteEnemy:ba2fe0a0-1836-5755-af0e-876571bae0d2", + "Definition:ConditionCharmedByHypnoticPattern:5396f18314418ed449b0cd42f887aae1" ], "additionalDamageWhenHit": false, "additionalDamageTypeDetermination": "Specific", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSource.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSource.json index 4bdf3004d1..14d1af0169 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSource.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSource.json @@ -70,7 +70,8 @@ "Definition:ConditionBanishedByBanishment:2e051532-eaa9-5f4c-8af2-2c47b3a8f501", "Definition:ConditionBanishingSmiteEnemy:ba2fe0a0-1836-5755-af0e-876571bae0d2", "Definition:ConditionRogueDeviousStrikeKnockOut:8276a494-262e-545d-953e-203075253407", - "Definition:ConditionInvocationTombOfFrost:b433cd22-643e-528e-b1a6-c061171d5460" + "Definition:ConditionInvocationTombOfFrost:b433cd22-643e-528e-b1a6-c061171d5460", + "Definition:ConditionCharmedByHypnoticPattern:5396f18314418ed449b0cd42f887aae1" ], "additionalDamageWhenHit": false, "additionalDamageTypeDetermination": "Specific", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSourceWithGrappler.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSourceWithGrappler.json index 50f4dd4858..d5fe4f16e4 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSourceWithGrappler.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSourceWithGrappler.json @@ -69,7 +69,8 @@ "Definition:ConditionBanishedByBanishment:2e051532-eaa9-5f4c-8af2-2c47b3a8f501", "Definition:ConditionBanishingSmiteEnemy:ba2fe0a0-1836-5755-af0e-876571bae0d2", "Definition:ConditionRogueDeviousStrikeKnockOut:8276a494-262e-545d-953e-203075253407", - "Definition:ConditionInvocationTombOfFrost:b433cd22-643e-528e-b1a6-c061171d5460" + "Definition:ConditionInvocationTombOfFrost:b433cd22-643e-528e-b1a6-c061171d5460", + "Definition:ConditionCharmedByHypnoticPattern:5396f18314418ed449b0cd42f887aae1" ], "additionalDamageWhenHit": false, "additionalDamageTypeDetermination": "Specific", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSourceWithGrapplerLarger.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSourceWithGrapplerLarger.json index c9c5bb8bcf..b931cd5293 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSourceWithGrapplerLarger.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSourceWithGrapplerLarger.json @@ -70,7 +70,8 @@ "Definition:ConditionBanishedByBanishment:2e051532-eaa9-5f4c-8af2-2c47b3a8f501", "Definition:ConditionBanishingSmiteEnemy:ba2fe0a0-1836-5755-af0e-876571bae0d2", "Definition:ConditionRogueDeviousStrikeKnockOut:8276a494-262e-545d-953e-203075253407", - "Definition:ConditionInvocationTombOfFrost:b433cd22-643e-528e-b1a6-c061171d5460" + "Definition:ConditionInvocationTombOfFrost:b433cd22-643e-528e-b1a6-c061171d5460", + "Definition:ConditionCharmedByHypnoticPattern:5396f18314418ed449b0cd42f887aae1" ], "additionalDamageWhenHit": false, "additionalDamageTypeDetermination": "Specific", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMartialForceKnightForceBulwarkSelf.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMartialForceKnightForceBulwarkSelf.json index 76aa78c308..75d4b0d8a8 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMartialForceKnightForceBulwarkSelf.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMartialForceKnightForceBulwarkSelf.json @@ -63,7 +63,8 @@ "Definition:ConditionSwallowedShamblingMound:10cc7c5600c606f43b33ab8775ebfc68", "Definition:ConditionUnconscious:2d543b2740ecddd4a977d8a706a8a2c9", "Definition:ConditionBanishedByBanishment:2e051532-eaa9-5f4c-8af2-2c47b3a8f501", - "Definition:ConditionBanishingSmiteEnemy:ba2fe0a0-1836-5755-af0e-876571bae0d2" + "Definition:ConditionBanishingSmiteEnemy:ba2fe0a0-1836-5755-af0e-876571bae0d2", + "Definition:ConditionCharmedByHypnoticPattern:5396f18314418ed449b0cd42f887aae1" ], "additionalDamageWhenHit": false, "additionalDamageTypeDetermination": "Specific", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMonkSuperiorDefense.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMonkSuperiorDefense.json index 8cd3ea9d5e..fc6a3d1a8d 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMonkSuperiorDefense.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMonkSuperiorDefense.json @@ -75,7 +75,8 @@ "Definition:ConditionSwallowedRemorhaz:1bf833241755e684fbef755a54de3fd6", "Definition:ConditionSwallowedShamblingMound:10cc7c5600c606f43b33ab8775ebfc68", "Definition:ConditionUnconscious:2d543b2740ecddd4a977d8a706a8a2c9", - "Definition:ConditionBanishedByBanishment:2e051532-eaa9-5f4c-8af2-2c47b3a8f501" + "Definition:ConditionBanishedByBanishment:2e051532-eaa9-5f4c-8af2-2c47b3a8f501", + "Definition:ConditionCharmedByHypnoticPattern:5396f18314418ed449b0cd42f887aae1" ], "additionalDamageWhenHit": false, "additionalDamageTypeDetermination": "Specific", diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs index 09b997acbc..f75e1a429b 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs @@ -638,8 +638,8 @@ internal static bool CanAct(this GameLocationCharacter character) return rulesetCharacter is { IsDeadOrDyingOrUnconscious: false } && !character.IsCharging && !character.MoveStepInProgress && + !rulesetCharacter.IsIncapacitated && !rulesetCharacter.HasConditionOfTypeOrSubType(RuleDefinitions.ConditionProne) && - !rulesetCharacter.HasConditionOfTypeOrSubType(RuleDefinitions.ConditionIncapacitated) && !rulesetCharacter.HasConditionOfTypeOrSubType(RuleDefinitions.ConditionStunned) && !rulesetCharacter.HasConditionOfTypeOrSubType(RuleDefinitions.ConditionParalyzed); } diff --git a/SolastaUnfinishedBusiness/Builders/ConditionDefinitionBuilder.cs b/SolastaUnfinishedBusiness/Builders/ConditionDefinitionBuilder.cs index e51f6248bf..e9b47dfea0 100644 --- a/SolastaUnfinishedBusiness/Builders/ConditionDefinitionBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/ConditionDefinitionBuilder.cs @@ -61,6 +61,12 @@ internal ConditionDefinitionBuilder SetBrain( return this; } + internal ConditionDefinitionBuilder AddCancellingConditions(params ConditionDefinition[] values) + { + Definition.cancellingConditions.AddRange(values); + return this; + } + internal ConditionDefinitionBuilder SetCancellingConditions(params ConditionDefinition[] values) { Definition.cancellingConditions.SetRange(values); diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index a255512a74..9841a914c1 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -7,7 +7,7 @@ - added Wizard Abjuration arcane ward recharge bonus action - added Wizard Graviturgist gravity well power toggle - fixed bardic inspiration on attack rolls not stacking with similar behaviors [VANILLA] -- fixed Charmed by Hypnotic Pattern not getting considered at incapacitated checks [VANILLA] +- fixed Charmed by Hypnotic Pattern not getting considered on incapacitated checks [VANILLA] - fixed Circle of Wildfire spirit allowed actions when summoner is incapacitated - fixed recurrent effects interaction with immunity from proxies [VANILLA] - fixed Wizard Abjuration projected ward crash on gadgets diff --git a/SolastaUnfinishedBusiness/FightingStyles/Executioner.cs b/SolastaUnfinishedBusiness/FightingStyles/Executioner.cs index 3c7eb8942e..9b663f9b65 100644 --- a/SolastaUnfinishedBusiness/FightingStyles/Executioner.cs +++ b/SolastaUnfinishedBusiness/FightingStyles/Executioner.cs @@ -77,27 +77,29 @@ internal override bool IsValid( if (survivalistLevel >= 11) { - return rulesetDefender.HasAnyConditionOfTypeOrSubType( + return + defender.RulesetCharacter?.IsIncapacitated == true || + rulesetDefender.HasAnyConditionOfTypeOrSubType( + ConditionBlinded, + ConditionFrightened, + ConditionRestrained, + ConditionGrappled, + ConditionParalyzed, + ConditionProne, + ConditionStunned, + ConditionDefinitions.ConditionHindered.Name); + } + + return + defender.RulesetCharacter?.IsIncapacitated == true || + rulesetDefender.HasAnyConditionOfTypeOrSubType( ConditionBlinded, ConditionFrightened, ConditionRestrained, ConditionGrappled, - ConditionIncapacitated, ConditionParalyzed, ConditionProne, - ConditionStunned, - ConditionDefinitions.ConditionHindered.Name); - } - - return rulesetDefender.HasAnyConditionOfTypeOrSubType( - ConditionBlinded, - ConditionFrightened, - ConditionRestrained, - ConditionGrappled, - ConditionIncapacitated, - ConditionParalyzed, - ConditionProne, - ConditionStunned); + ConditionStunned); } } } diff --git a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs index df23e97c8a..616ce63268 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs @@ -701,6 +701,7 @@ internal static void SwitchBarbarianFightingStyle() .SetCancellingConditions( DatabaseRepository.GetDatabase().Where(x => x.IsSubtypeOf(ConditionIncapacitated)).ToArray()) + .AddCancellingConditions(ConditionDefinitions.ConditionCharmedByHypnoticPattern) .AddToDB(), ConditionForm.ConditionOperation.Add) .Build()) diff --git a/SolastaUnfinishedBusiness/Models/GrappleContext.cs b/SolastaUnfinishedBusiness/Models/GrappleContext.cs index 8b163417d0..a1a0e755b8 100644 --- a/SolastaUnfinishedBusiness/Models/GrappleContext.cs +++ b/SolastaUnfinishedBusiness/Models/GrappleContext.cs @@ -162,6 +162,7 @@ internal static void LateLoad() .SetCancellingConditions( DatabaseRepository.GetDatabase().Where(x => x.IsSubtypeOf(ConditionIncapacitated)).ToArray()) + .AddCancellingConditions(ConditionDefinitions.ConditionCharmedByHypnoticPattern) .SetConditionParticleReference(ConditionDefinitions.ConditionSlowed) .AddToDB(); @@ -177,6 +178,7 @@ internal static void LateLoad() .SetCancellingConditions( DatabaseRepository.GetDatabase().Where(x => x.IsSubtypeOf(ConditionIncapacitated)).ToArray()) + .AddCancellingConditions(ConditionDefinitions.ConditionCharmedByHypnoticPattern) .SetConditionParticleReference(ConditionDefinitions.ConditionSlowed) .AddToDB(); @@ -193,6 +195,7 @@ internal static void LateLoad() .SetCancellingConditions( DatabaseRepository.GetDatabase().Where(x => x.IsSubtypeOf(ConditionIncapacitated)).ToArray()) + .AddCancellingConditions(ConditionDefinitions.ConditionCharmedByHypnoticPattern) .SetConditionParticleReference(ConditionDefinitions.ConditionSlowed) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Models/Level20Context.cs b/SolastaUnfinishedBusiness/Models/Level20Context.cs index 9b55d9a5d1..c321b83f4e 100644 --- a/SolastaUnfinishedBusiness/Models/Level20Context.cs +++ b/SolastaUnfinishedBusiness/Models/Level20Context.cs @@ -977,9 +977,9 @@ public IEnumerator OnPhysicalAttackInitiatedOnMe( ActionModifier attackModifier, RulesetAttackMode attackMode) { - var rulesetDefender = defender.RulesetActor; + var rulesetDefender = defender.RulesetCharacter; - if (rulesetDefender.HasConditionOfTypeOrSubType(ConditionIncapacitated)) + if (rulesetDefender.IsIncapacitated) { yield break; } diff --git a/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs b/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs index 09525d9c49..4d441acede 100644 --- a/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs +++ b/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs @@ -2123,16 +2123,17 @@ internal override bool IsValid( return false; } - return rulesetDefender.HasAnyConditionOfTypeOrSubType( - ConditionBlinded, - ConditionFrightened, - ConditionRestrained, - ConditionGrappled, - ConditionIncapacitated, - ConditionParalyzed, - ConditionPoisoned, - ConditionProne, - ConditionStunned); + return + defender.RulesetCharacter?.IsIncapacitated == true || + rulesetDefender.HasAnyConditionOfTypeOrSubType( + ConditionBlinded, + ConditionFrightened, + ConditionRestrained, + ConditionGrappled, + ConditionParalyzed, + ConditionPoisoned, + ConditionProne, + ConditionStunned); } } diff --git a/SolastaUnfinishedBusiness/Races/Oligath.cs b/SolastaUnfinishedBusiness/Races/Oligath.cs index c72a7468d1..48513fd4cb 100644 --- a/SolastaUnfinishedBusiness/Races/Oligath.cs +++ b/SolastaUnfinishedBusiness/Races/Oligath.cs @@ -175,7 +175,7 @@ public IEnumerator OnTryAlterOutcomeAttack( if (helper != defender || !helper.IsReactionAvailable() || rulesetHelper is not { IsDeadOrUnconscious: false } || - rulesetHelper.HasConditionOfTypeOrSubType(ConditionIncapacitated) || + rulesetHelper.IsIncapacitated || rulesetHelper.HasConditionOfTypeOrSubType(ConditionStunned) || rulesetHelper.HasConditionOfTypeOrSubType(ConditionParalyzed) || rulesetHelper.GetRemainingUsesOfPower(usablePower) == 0) diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs index 9871fb1f86..cc6c0403dd 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs @@ -1882,8 +1882,8 @@ public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter return false; } - if (!target.RulesetCharacter.HasAnyConditionOfTypeOrSubType( - ConditionIncapacitated, ConditionParalyzed, ConditionRestrained)) + if (!target.RulesetCharacter.IsIncapacitated && + !target.RulesetCharacter.HasAnyConditionOfTypeOrSubType(ConditionParalyzed, ConditionRestrained)) { return true; } diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheForestGuardian.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheForestGuardian.cs index 3e325eb72f..0bf5c6892b 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheForestGuardian.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheForestGuardian.cs @@ -72,6 +72,7 @@ public CircleOfTheForestGuardian() .SetCancellingConditions( DatabaseRepository.GetDatabase().Where(x => x.IsSubtypeOf(ConditionIncapacitated)).ToArray()) + .AddCancellingConditions(ConditionDefinitions.ConditionCharmedByHypnoticPattern) .AddCustomSubFeatures(new CharacterTurnStartListenerBarkWard(powerSuperiorBarkWard)) .CopyParticleReferences(PowerRangerSwiftBladeBattleFocus) .AddToDB(); @@ -83,6 +84,7 @@ public CircleOfTheForestGuardian() .SetCancellingConditions( DatabaseRepository.GetDatabase().Where(x => x.IsSubtypeOf(ConditionIncapacitated)).ToArray()) + .AddCancellingConditions(ConditionDefinitions.ConditionCharmedByHypnoticPattern) .SetParentCondition(conditionBarkWard) .SetFeatures(FeatureDefinitionDamageAffinitys.DamageAffinityPoisonImmunity) .AddCustomSubFeatures(new CharacterTurnStartListenerBarkWard(powerSuperiorBarkWard)) diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialForceKnight.cs b/SolastaUnfinishedBusiness/Subclasses/MartialForceKnight.cs index e9f82df882..e2305e387b 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialForceKnight.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialForceKnight.cs @@ -375,6 +375,7 @@ public MartialForceKnight() .SetCancellingConditions( DatabaseRepository.GetDatabase().Where(x => x.IsSubtypeOf(ConditionIncapacitated)).ToArray()) + .AddCancellingConditions(ConditionDefinitions.ConditionCharmedByHypnoticPattern) .AddCustomSubFeatures(new OnConditionAddedOrRemovedForceBulwark(conditionForceBulwark)) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs b/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs index 854e48afb8..f18b878955 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs @@ -430,8 +430,8 @@ public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter } var isValid = - !target.RulesetCharacter - .HasAnyConditionOfTypeOrSubType(ConditionIncapacitated, ConditionParalyzed, ConditionRestrained); + !target.RulesetCharacter.IsIncapacitated && + !target.RulesetCharacter.HasAnyConditionOfTypeOrSubType(ConditionParalyzed, ConditionRestrained); if (!isValid) { diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishDuelist.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishDuelist.cs index 27b82b7b5c..9139d82791 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishDuelist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishDuelist.cs @@ -177,10 +177,10 @@ public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnMe( var rulesetDefender = defender.RulesetCharacter; if (!ValidatorsWeapon.IsMeleeOrUnarmed(attackMode) || + rulesetDefender.IsIncapacitated || rulesetDefender.HasAnyConditionOfTypeOrSubType( conditionReflexiveParty.Name, ConditionDefinitions.ConditionDazzled.Name, - ConditionDefinitions.ConditionIncapacitated.Name, ConditionDefinitions.ConditionShocked.Name, ConditionDefinitions.ConditionSlowed.Name)) { From b9a63b111bb9d2c03c522feabc127540e4a273ce Mon Sep 17 00:00:00 2001 From: mikm1 Date: Fri, 1 Nov 2024 09:51:36 -0400 Subject: [PATCH 19/85] initial commit Barkskin OneDnd version --- .../Displays/GeneralDisplay.cs | 7 ++++ .../Displays/SpellsDisplay.cs | 7 ++++ .../Models/SrdAndHouseRulesContext.cs | 32 ++++++++++++++++--- SolastaUnfinishedBusiness/Settings.cs | 1 + .../Translations/en/Others-en.txt | 1 + .../Translations/en/Settings-en.txt | 1 + .../Translations/en/Spells/Spells01-en.txt | 1 + 7 files changed, 45 insertions(+), 5 deletions(-) diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index ab2d5aba61..67889ddd11 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -423,6 +423,13 @@ private static void DisplayOneDnd() SrdAndHouseRulesContext.SwitchOneDndHealingSpellsBuf(); } + toggle = Main.Settings.SwapOneDndBarkskinSpell; + if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndBarkskinSpell"), ref toggle, UI.AutoWidth())) + { + Main.Settings.SwapOneDndBarkskinSpell = toggle; + SrdAndHouseRulesContext.SwapOneDndBarkskinSpell(); + } + UI.Label(); toggle = Main.Settings.SwapAbjurationSavant; diff --git a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs index 11e249abb1..53c571a282 100644 --- a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs @@ -147,6 +147,13 @@ private static void DisplaySpellsGeneral() SrdAndHouseRulesContext.SwitchOneDndHealingSpellsBuf(); } + toggle = Main.Settings.SwapOneDndBarkskinSpell; + if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndBarkskinSpell"), ref toggle, UI.AutoWidth())) + { + Main.Settings.SwapOneDndBarkskinSpell = toggle; + SrdAndHouseRulesContext.SwapOneDndBarkskinSpell(); + } + UI.Label(); toggle = Main.Settings.AllowHasteCasting; diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index 83c7a089f5..25edff1b0d 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -107,6 +107,7 @@ internal static void LateLoad() LoadAfterRestIdentify(); LoadAllowTargetingSelectionWhenCastingChainLightningSpell(); LoadSenseNormalVisionRangeMultiplier(); + SwapOneDndBarkskinSpell(); SwitchAddBleedingToLesserRestoration(); SwitchAllowClubsToBeThrown(); SwitchChangeSleetStormToCube(); @@ -125,17 +126,17 @@ internal static void LateLoad() SwitchOneDndPaladinLayOnHandAsBonusAction(); SwitchOneDndHealingPotionBonusAction(); SwitchOneDndHealingSpellsBuf(); + SwitchOneDndWizardScholar(); + SwitchOneDndWizardSchoolOfMagicLearningLevel(); + SwitchOneDndPaladinLearnSpellCastingAtOne(); + SwitchOneDndRangerLearnSpellCastingAtOne(); + SwitchOneDndSurprisedEnforceDisadvantage(); SwitchRecurringEffectOnEntangle(); SwitchRingOfRegenerationHealRate(); SwitchSchoolRestrictionsFromShadowCaster(); SwitchSchoolRestrictionsFromSpellBlade(); SwitchUniversalSylvanArmorAndLightbringer(); SwitchUseHeightOneCylinderEffect(); - SwitchOneDndWizardScholar(); - SwitchOneDndWizardSchoolOfMagicLearningLevel(); - SwitchOneDndPaladinLearnSpellCastingAtOne(); - SwitchOneDndRangerLearnSpellCastingAtOne(); - SwitchOneDndSurprisedEnforceDisadvantage(); NoTwinnedBladeCantrips(); ModifyGravitySlam(); } @@ -439,6 +440,27 @@ internal static void SwitchOfficialFoodRationsWeight() } } + internal static void SwapOneDndBarkskinSpell() + { + if (Main.Settings.SwapOneDndBarkskinSpell) + { + Barkskin.requiresConcentration = false; + Barkskin.castingTime = ActivationTime.BonusAction; + FeatureDefinitionAttributeModifiers.AttributeModifierBarkskin.modifierValue = 17; + Barkskin.GuiPresentation.description = "Spell/&BarkskinOneDndDescription"; + ConditionBarkskin.GuiPresentation.description = "Rules/&ConditionOneDndBarkskinDescription"; + } + else + { + Barkskin.requiresConcentration = true; + Barkskin.castingTime = ActivationTime.Action; + FeatureDefinitionAttributeModifiers.AttributeModifierBarkskin.modifierValue = 16; + Barkskin.GuiPresentation.description = "Spell/&BarkskinDescription"; + ConditionBarkskin.GuiPresentation.description = "Rules/&ConditionBarkskinDescription"; + } + + } + internal static void SwitchOneDndWizardSchoolOfMagicLearningLevel() { var schools = DatabaseRepository.GetDatabase() diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 0f50bbaad9..a92d8a6796 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -366,6 +366,7 @@ public class Settings : UnityModManager.ModSettings public bool EnableRelearnSpells { get; set; } public bool AllowDisplayingOfficialSpells { get; set; } public bool AllowDisplayingNonSuggestedSpells { get; set; } + public bool SwapOneDndBarkskinSpell { get; set; } public SerializableDictionary SpellListSliderPosition { get; set; } = []; public SerializableDictionary> SpellListSpellEnabled { get; set; } = []; diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 38c220f7f4..578e4ab6c6 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -264,6 +264,7 @@ Rules/&ActivationTypeOnPowerActivatedAutoTitle=Auto Power Rules/&ActivationTypeOnRageStartAutomaticTitle=Auto Rage Start Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Auto Creature Reduced to Zero HP Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Auto Sneak Attack +Rules/&ConditionOneDndBarkskinDescription=The creature's Armor Class becomes at least 17. Rules/&CounterFormDismissCreatureFormat=Dismisses a target conjured creature Rules/&MotionFormPullOnTop=Pull on top Rules/&MotionFormPushDownFormat=Push down {0} diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 88a44999e1..6162a42f83 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -299,6 +299,7 @@ ModUi/&SwapAbjurationSavant=Swap Abjurer Abjuration Sa ModUi/&SwapCraftedItemAndRecipeIcons=+ Swap recipe and crafted item icons in shop ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip features ModUi/&SwapEvocationSavant=Swap Evoker Evocation Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] +ModUi/&SwapOneDndBarkskinSpell=Swap Barkskin with 5e 2024 version [Bonus action, no concentration, AC set to 17.] ModUi/&TableTopButton=Select Tabletop content ModUi/&TableTopHelp1=• Following sections re-group and duplicate 5e 2014 and 2024 settings scattered across the mod for your convenience ModUi/&TableTopHelp2=• Press the button to select only tabletop content under Character tab, and select all options below for a true TT experience diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt index 2bdfa38132..051e70d8d7 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt @@ -70,6 +70,7 @@ Reaction/&SpendSpellSlotElementalInfusionReactDescription=Absorb the incoming da Reaction/&SpendSpellSlotElementalInfusionReactTitle=Absorb Element Reaction/&SpendSpellSlotElementalInfusionTitle=Incoming Element Attack! Reaction/&SubitemSelectElementalInfusionTitle=Select a slot. +Spell/&BarkskinOneDndDescription=Gives you or an ally you can touch an AC of at least 17. Spell/&CausticZapDescription=You send a jolt of green energy toward the target momentarily disorientating them as the spell burn some of their armor. The spell targets one enemy with a spell attack and deals 1d4 acid and 1d6 lightning damage and applies the dazzled condition. Spell/&CausticZapTitle=Caustic Zap Spell/&ChaosBoltDescription=Make a ranged spell attack against a target. On a hit, the target takes 2d8 + 1d6 damage. Choose one of the d8s. The number rolled on that die determines the attack's damage type:\n{0}\nIf you roll the same number on both d8s, you can use your free action to target a different creature of your choice. Make a new attack roll against the new target, and make a new damage roll, which could cause the chaotic energy to leap again. A creature can be damaged only once by each casting of this spell. From 5e9ca32dacf50221944a5d27a3871b553738d4b4 Mon Sep 17 00:00:00 2001 From: BradS Date: Fri, 1 Nov 2024 13:25:54 -0700 Subject: [PATCH 20/85] Change Improved Abjuration to modify existing spell EffectForms --- .../Subclasses/WizardAbjuration.cs | 81 ++++++++++++------- 1 file changed, 51 insertions(+), 30 deletions(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs b/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs index a111e2db43..e44135a07d 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs @@ -122,49 +122,24 @@ public WizardAbjuration() //////// // Lv.10 Improved Abjuration - var powerCounterSpell = FeatureDefinitionPowerBuilder + var powerCounterSpellAffinity = FeatureDefinitionPowerBuilder .Create($"Power{Name}CounterSpell") .SetGuiPresentationNoContent(true) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) - .SetUsesFixed(ActivationTime.Reaction, RechargeRate.ShortRest) - .SetEffectDescription(EffectDescriptionBuilder.Create() - .SetDurationData(DurationType.Instantaneous, 1) - .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) - .SetParticleEffectParameters(Counterspell) - .SetEffectForms(EffectFormBuilder.Create() - .SetCounterForm(CounterForm.CounterType.InterruptSpellcasting, 3, 10, true, true) - .Build()) - .Build()) + .AddCustomSubFeatures(new ModifyCounterspellAddProficiency()) .AddToDB(); - var powerCounterDispel = FeatureDefinitionPowerBuilder + var powerCounterDispelAffinity = FeatureDefinitionPowerBuilder .Create($"Power{Name}CounterDispel") .SetGuiPresentationNoContent(true) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) - .SetUsesFixed(ActivationTime.Action, RechargeRate.ShortRest) - .SetEffectDescription(EffectDescriptionBuilder.Create() - .SetDurationData(DurationType.Instantaneous, 1) - .SetTargetingData( - Side.All, - RangeType.Distance, 24, - TargetType.IndividualsUnique, 1, 2, - ActionDefinitions.ItemSelectionType.Equiped) - .SetParticleEffectParameters(DispelMagic) - .SetEffectForms(EffectFormBuilder.Create() - .SetCounterForm(CounterForm.CounterType.DissipateSpells, 3, 10, true, true) - .Build()) - .Build()) + .AddCustomSubFeatures(new ModifyDispelMagicAddProficiency()) .AddToDB(); var featureSetImprovedAbjuration = FeatureDefinitionFeatureSetBuilder .Create($"FeatureSet{Name}ImprovedAbjuration") .SetGuiPresentation($"Power{Name}ImprovedAbjuration", Category.Feature) - .SetFeatureSet(powerCounterSpell, powerCounterDispel) + .SetFeatureSet(powerCounterSpellAffinity, powerCounterDispelAffinity) .AddToDB(); - powerCounterDispel.EffectDescription.targetFilteringMethod = - TargetFilteringMethod.CharacterGadgetEffectProxyItems; - powerCounterDispel.EffectDescription.targetFilteringTag = TargetFilteringTag.No; //////// // Lv.14 Spell Resistance @@ -627,6 +602,52 @@ void ReactionValidated() } } + private sealed class ModifyCounterspellAddProficiency() : IModifyEffectDescription + { + EffectDescription IModifyEffectDescription.GetEffectDescription(BaseDefinition definition, EffectDescription effectDescription, RulesetCharacter character, RulesetEffect rulesetEffect) + { + return EffectDescriptionBuilder + .Create(Counterspell.EffectDescription) + .SetEffectForms(EffectFormBuilder.Create() + .SetCounterForm(CounterForm.CounterType.InterruptSpellcasting, 3, 10, true, true) + .Build()) + .Build(); + } + + bool IModifyEffectDescription.IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) + { + return character.GetClassLevel(CharacterClassDefinitions.Wizard) >= 10 && + definition == Counterspell; + } + } + + private sealed class ModifyDispelMagicAddProficiency() : IModifyEffectDescription + { + EffectDescription IModifyEffectDescription.GetEffectDescription(BaseDefinition definition, EffectDescription effectDescription, RulesetCharacter character, RulesetEffect rulesetEffect) + { + return EffectDescriptionBuilder.Create(DispelMagic) + .SetEffectForms( + EffectFormBuilder.Create() + .SetCounterForm(CounterForm.CounterType.DissipateSpells, 3, 10, true, true) + .SetCreatedBy(true) + .SetBonusMode(AddBonusMode.None) + .Build(), + EffectFormBuilder.Create() + .SetAlterationForm(AlterationForm.Type.DissipateSpell) + .SetCreatedBy(true) + .SetBonusMode(AddBonusMode.None) + .Build() + ) + .Build(); + } + + bool IModifyEffectDescription.IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) + { + return character.GetClassLevel(CharacterClassDefinitions.Wizard) >= 10 && + definition == DispelMagic; + } + } + private sealed class MagicEffectBeforeHitConfirmedOnMeSpellResistance(ConditionDefinition conditionSpellResistance) : IMagicEffectBeforeHitConfirmedOnMe { From 5d3f3162636534048165ba5819bbe1169f0650df Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 1 Nov 2024 19:26:27 -0700 Subject: [PATCH 21/85] update translations --- SolastaUnfinishedBusiness/Translations/de/Others-de.txt | 1 + SolastaUnfinishedBusiness/Translations/de/Settings-de.txt | 1 + .../Translations/de/Spells/Spells01-de.txt | 1 + SolastaUnfinishedBusiness/Translations/en/Settings-en.txt | 2 +- .../Translations/en/SubClasses/WizardGraviturgist-en.txt | 4 ++-- SolastaUnfinishedBusiness/Translations/es/Others-es.txt | 1 + SolastaUnfinishedBusiness/Translations/es/Settings-es.txt | 1 + .../Translations/es/Spells/Spells01-es.txt | 1 + SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt | 1 + SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt | 1 + .../Translations/fr/Spells/Spells01-fr.txt | 1 + SolastaUnfinishedBusiness/Translations/it/Others-it.txt | 1 + SolastaUnfinishedBusiness/Translations/it/Settings-it.txt | 1 + .../Translations/it/Spells/Spells01-it.txt | 1 + SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt | 1 + SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt | 1 + .../Translations/ja/Spells/Spells01-ja.txt | 1 + SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt | 1 + SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt | 1 + .../Translations/ko/Spells/Spells01-ko.txt | 1 + SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt | 1 + .../Translations/pt-BR/Settings-pt-BR.txt | 1 + .../Translations/pt-BR/Spells/Spells01-pt-BR.txt | 1 + SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt | 1 + SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt | 1 + .../Translations/ru/Spells/Spells01-ru.txt | 1 + SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt | 1 + .../Translations/zh-CN/Settings-zh-CN.txt | 1 + .../Translations/zh-CN/Spells/Spells01-zh-CN.txt | 1 + 29 files changed, 30 insertions(+), 3 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 4c42e375ec..91a996ef9d 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -264,6 +264,7 @@ Rules/&ActivationTypeOnPowerActivatedAutoTitle=Auto Power Rules/&ActivationTypeOnRageStartAutomaticTitle=Automatischer Wutstart Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Automatische Kreatur auf null HP reduziert Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Automatischer Schleichangriff +Rules/&ConditionOneDndBarkskinDescription=Die Rüstungsklasse der Kreatur beträgt mindestens 17. Rules/&CounterFormDismissCreatureFormat=Entlässt eine gewünschte heraufbeschworene Kreatur Rules/&MotionFormPullOnTop=Ziehen Sie es oben an Rules/&MotionFormPushDownFormat=Drücken Sie {0} nach unten diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index c38d38db40..c3b1f52c0d 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -299,6 +299,7 @@ ModUi/&SwapAbjurationSavant=Tauschen Sie Abjurer Abjur ModUi/&SwapCraftedItemAndRecipeIcons=+ Rezepte und Symbole für hergestellte Gegenstände im Shop austauschen ModUi/&SwapEvocationPotentCantripAndSculptSpell=Tauschen Sie die Funktionen Evoker Sculpt Spells und Potent Cantrip aus ModUi/&SwapEvocationSavant=Tauschen Sie Evoker Evocation Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] +ModUi/&SwapOneDndBarkskinSpell=Tauschen Sie Barkskin gegen die 5e 2024-Version aus [Bonusaktion, keine Konzentration, AC auf 17 eingestellt] ModUi/&TableTopButton=Tabletop-Inhalt auswählen ModUi/&TableTopHelp1=• In den folgenden Abschnitten werden die im Mod verstreuten Einstellungen für 5e 2014 und 2024 neu gruppiert und dupliziert, damit Sie es einfacher haben ModUi/&TableTopHelp2=• Drücken Sie die Taste, um unter der Registerkarte „Charakter“ nur Tabletop-Inhalte auszuwählen, und wählen Sie alle Optionen darunter für ein echtes TT-Erlebnis aus diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt index 173493861b..e59157cef9 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt @@ -70,6 +70,7 @@ Reaction/&SpendSpellSlotElementalInfusionReactDescription=Absorbieren Sie das ei Reaction/&SpendSpellSlotElementalInfusionReactTitle=Element absorbieren Reaction/&SpendSpellSlotElementalInfusionTitle=Elementarangriff steht bevor! Reaction/&SubitemSelectElementalInfusionTitle=Wählen Sie einen Steckplatz aus. +Spell/&BarkskinOneDndDescription=Verleiht Ihnen oder einem Verbündeten, den Sie berühren können, eine AC von mindestens 17. Spell/&CausticZapDescription=Sie senden einen grünen Energiestoß auf das Ziel und desorientieren es kurzzeitig, während der Zauber einen Teil seiner Rüstung verbrennt. Der Zauber zielt mit einem Zauberangriff auf einen Feind und verursacht 1W4 Säure- und 1W6 Blitzschaden und verursacht den Zustand der Geblendung. Spell/&CausticZapTitle=Ätzender Zap Spell/&ChaosBoltDescription=Führe einen Fernangriff mit Zauber gegen ein Ziel aus. Bei einem Treffer erleidet das Ziel 2W8 + 1W6 Schaden. Wähle einen der W8. Die gewürfelte Zahl bestimmt die Schadensart des Angriffs:\n{0}\nWenn du auf beiden W8 dieselbe Zahl würfelst, kannst du deine freie Aktion nutzen, um eine andere Kreatur deiner Wahl anzuvisieren. Führe einen neuen Angriffswurf gegen das neue Ziel aus und führe einen neuen Schadenswurf aus, der die chaotische Energie erneut auslösen könnte. Eine Kreatur kann durch jedes Wirken dieses Zaubers nur einmal Schaden erleiden. diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 6162a42f83..aeedc4fbbf 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -299,7 +299,7 @@ ModUi/&SwapAbjurationSavant=Swap Abjurer Abjuration Sa ModUi/&SwapCraftedItemAndRecipeIcons=+ Swap recipe and crafted item icons in shop ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip features ModUi/&SwapEvocationSavant=Swap Evoker Evocation Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] -ModUi/&SwapOneDndBarkskinSpell=Swap Barkskin with 5e 2024 version [Bonus action, no concentration, AC set to 17.] +ModUi/&SwapOneDndBarkskinSpell=Swap Barkskin with 5e 2024 version [bonus action, no concentration, AC set to 17] ModUi/&TableTopButton=Select Tabletop content ModUi/&TableTopHelp1=• Following sections re-group and duplicate 5e 2014 and 2024 settings scattered across the mod for your convenience ModUi/&TableTopHelp2=• Press the button to select only tabletop content under Character tab, and select all options below for a true TT experience diff --git a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardGraviturgist-en.txt b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardGraviturgist-en.txt index e66819d1e7..061959e091 100644 --- a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardGraviturgist-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardGraviturgist-en.txt @@ -1,3 +1,5 @@ +Action/&GravityWellToggleDescription=Activate/Deactivate Gravity Well +Action/&GravityWellToggleTitle=Gravity Well Condition/&ConditionWizardGraviturgistDensityDecreaseDescription=Speed increased by 2. Disadvantage on Strength checks and saving throws. Condition/&ConditionWizardGraviturgistDensityDecreaseTitle=Decreased Density Condition/&ConditionWizardGraviturgistDensityIncreaseDescription=Speed decreased by 2. Advantage on Strength checks and saving throws. @@ -22,5 +24,3 @@ Feedback/&AdditionalDamageViolentAttractionFormat=Violent Attraction! Feedback/&AdditionalDamageViolentAttractionLine={0} performs a violent attraction attack on {1} (+{2}) Subclass/&WizardGraviturgistDescription=Understanding and mastering the forces that draw bodies of matter together or drive them apart, the students of the Graviturgy arcane tradition learn to further bend and manipulate the violent energy of gravity to their benefit, and the terrible detriment of their enemies. Subclass/&WizardGraviturgistTitle=Graviturgist -Action/&GravityWellToggleDescription=Activate/Deactivate Gravity Well -Action/&GravityWellToggleTitle=Gravity Well diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index 5a0d22b427..decaef2133 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -264,6 +264,7 @@ Rules/&ActivationTypeOnPowerActivatedAutoTitle=Apagado automático Rules/&ActivationTypeOnRageStartAutomaticTitle=Inicio de furia automática Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Criatura automática reducida a cero HP Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Ataque furtivo automático +Rules/&ConditionOneDndBarkskinDescription=La clase de armadura de la criatura pasa a ser al menos 17. Rules/&CounterFormDismissCreatureFormat=Despierta a una criatura conjurada objetivo. Rules/&MotionFormPullOnTop=Tirar de la parte superior Rules/&MotionFormPushDownFormat=Empuja hacia abajo {0} diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 0924c1385b..b2c74c9a60 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -300,6 +300,7 @@ ModUi/&SwapAbjurationSavant=Intercambia Abjurador Sabi ModUi/&SwapCraftedItemAndRecipeIcons=+ Intercambia íconos de recetas y objetos elaborados en la tienda ModUi/&SwapEvocationPotentCantripAndSculptSpell=Intercambia las características de Evocador, Hechizos de escultura y Truco potente ModUi/&SwapEvocationSavant=Intercambia Evocador Sabio de la evocación con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de ranura] +ModUi/&SwapOneDndBarkskinSpell=Intercambia Piel de corteza con la versión 5e 2024 [acción adicional, sin concentración, CA establecida en 17] ModUi/&TableTopButton=Seleccionar contenido de Tabletop ModUi/&TableTopHelp1=• Las siguientes secciones reagrupan y duplican las configuraciones de 5e 2014 y 2024 esparcidas por el mod para tu conveniencia. ModUi/&TableTopHelp2=• Presiona el botón para seleccionar solo contenido de mesa en la pestaña Personaje y selecciona todas las opciones a continuación para una verdadera experiencia TT diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt index 1adc0675a2..f158268731 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt @@ -70,6 +70,7 @@ Reaction/&SpendSpellSlotElementalInfusionReactDescription=Absorber el elemento d Reaction/&SpendSpellSlotElementalInfusionReactTitle=Elemento absorbente Reaction/&SpendSpellSlotElementalInfusionTitle=¡Ataque elemental entrante! Reaction/&SubitemSelectElementalInfusionTitle=Seleccione una ranura. +Spell/&BarkskinOneDndDescription=Te otorga a ti o a un aliado con el que puedas tocar una CA de al menos 17. Spell/&CausticZapDescription=Envías una descarga de energía verde hacia el objetivo, desorientándolo momentáneamente mientras el hechizo quema parte de su armadura. El hechizo apunta a un enemigo con un ataque de hechizo y causa 1d4 de daño de ácido y 1d6 de daño de relámpago, y aplica el estado de deslumbramiento. Spell/&CausticZapTitle=Zap cáustico Spell/&ChaosBoltDescription=Realiza un ataque de hechizo a distancia contra un objetivo. Si impacta, el objetivo recibe 2d8 + 1d6 de daño. Elige uno de los d8. El número que salga en ese dado determina el tipo de daño del ataque:\n{0}\nSi sacas el mismo número en ambos d8, puedes usar tu acción gratuita para atacar a una criatura diferente de tu elección. Realiza una nueva tirada de ataque contra el nuevo objetivo y una nueva tirada de daño, que podría hacer que la energía caótica salte de nuevo. Una criatura solo puede resultar dañada una vez por cada lanzamiento de este hechizo. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 21dd0855c7..424459efb0 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -264,6 +264,7 @@ Rules/&ActivationTypeOnPowerActivatedAutoTitle=Puissance automatique Rules/&ActivationTypeOnRageStartAutomaticTitle=Démarrage automatique de la rage Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Créature automatique réduite à zéro PV Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Attaque furtive automatique +Rules/&ConditionOneDndBarkskinDescription=La classe d'armure de la créature devient au moins 17. Rules/&CounterFormDismissCreatureFormat=Renvoie une créature invoquée ciblée Rules/&MotionFormPullOnTop=Tirer sur le dessus Rules/&MotionFormPushDownFormat=Appuyez sur {0} diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 225acc101b..a3bf4a9356 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -299,6 +299,7 @@ ModUi/&SwapAbjurationSavant=Échangez Abjurer Abjurati ModUi/&SwapCraftedItemAndRecipeIcons=+ Échangez les icônes de recettes et d'objets fabriqués dans la boutique ModUi/&SwapEvocationPotentCantripAndSculptSpell=Échangez les fonctionnalités Évocateur Sculpture des sorts et Puissant tour de passe-passe ModUi/&SwapEvocationSavant=Échangez Evoker Evocation Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] +ModUi/&SwapOneDndBarkskinSpell=Échangez Barkskin avec la version 5e 2024 [action bonus, pas de concentration, CA réglée à 17] ModUi/&TableTopButton=Sélectionnez le contenu de la table ModUi/&TableTopHelp1=• Les sections suivantes regroupent et dupliquent les paramètres 5e 2014 et 2024 dispersés dans le mod pour votre commodité ModUi/&TableTopHelp2=• Appuyez sur le bouton pour sélectionner uniquement le contenu de table sous l'onglet Personnage et sélectionnez toutes les options ci-dessous pour une véritable expérience TT diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt index 6df0fb3373..d3e603fcb6 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt @@ -70,6 +70,7 @@ Reaction/&SpendSpellSlotElementalInfusionReactDescription=Absorber l'élément d Reaction/&SpendSpellSlotElementalInfusionReactTitle=Absorber l'élément Reaction/&SpendSpellSlotElementalInfusionTitle=Attaque d'élément entrante ! Reaction/&SubitemSelectElementalInfusionTitle=Sélectionnez un emplacement. +Spell/&BarkskinOneDndDescription=Vous donne, à vous ou à un allié que vous pouvez toucher, une CA d'au moins 17. Spell/&CausticZapDescription=Vous envoyez une décharge d'énergie verte vers la cible, la désorientant momentanément tandis que le sort brûle une partie de son armure. Le sort cible un ennemi avec une attaque magique et inflige 1d4 dégâts d'acide et 1d6 dégâts de foudre et applique l'état d'éblouissement. Spell/&CausticZapTitle=Zap caustique Spell/&ChaosBoltDescription=Lancez une attaque à distance contre une cible. En cas de succès, la cible subit 2d8 + 1d6 dégâts. Choisissez l'un des d8. Le nombre obtenu sur ce dé détermine le type de dégâts de l'attaque :\n{0}\nSi vous obtenez le même nombre sur les deux d8, vous pouvez utiliser votre action libre pour cibler une autre créature de votre choix. Lancez un nouveau jet d'attaque contre la nouvelle cible, puis un nouveau jet de dégâts, ce qui pourrait faire bondir à nouveau l'énergie chaotique. Une créature ne peut être blessée qu'une seule fois par lancement de ce sort. diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 5bf54a8b7b..98f3707ba1 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -264,6 +264,7 @@ Rules/&ActivationTypeOnPowerActivatedAutoTitle=Accensione automatica Rules/&ActivationTypeOnRageStartAutomaticTitle=Avvio automatico della rabbia Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Creatura automatica ridotta a zero HP Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Attacco furtivo automatico +Rules/&ConditionOneDndBarkskinDescription=La Classe Armatura della creatura diventa almeno 17. Rules/&CounterFormDismissCreatureFormat=Congeda una creatura bersaglio evocata Rules/&MotionFormPullOnTop=Tirare in alto Rules/&MotionFormPushDownFormat=Spingere verso il basso {0} diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index a61822102d..43a0ed459a 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -299,6 +299,7 @@ ModUi/&SwapAbjurationSavant=Sostituisci Abjurer Abjura ModUi/&SwapCraftedItemAndRecipeIcons=+ Scambia le icone delle ricette e degli oggetti realizzati nel negozio ModUi/&SwapEvocationPotentCantripAndSculptSpell=Scambia le funzionalità Sculpt Spells e Potent Cantrip di Evoker ModUi/&SwapEvocationSavant=Sostituisci Evocatore Sapiente dell'evocazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] +ModUi/&SwapOneDndBarkskinSpell=Sostituisci Barkskin con la versione 5e 2024 [azione bonus, nessuna concentrazione, CA impostata a 17] ModUi/&TableTopButton=Seleziona contenuto Tabletop ModUi/&TableTopHelp1=• Le sezioni seguenti raggruppano e duplicano le impostazioni 5e 2014 e 2024 sparse nella mod per la tua comodità ModUi/&TableTopHelp2=• Premi il pulsante per selezionare solo il contenuto del tavolo nella scheda Personaggio e seleziona tutte le opzioni sottostanti per una vera esperienza TT diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt index 9f39780b50..fd2b257e99 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt @@ -70,6 +70,7 @@ Reaction/&SpendSpellSlotElementalInfusionReactDescription=Assorbe l'elemento dan Reaction/&SpendSpellSlotElementalInfusionReactTitle=Assorbi Elemento Reaction/&SpendSpellSlotElementalInfusionTitle=Attacco Elementale in arrivo! Reaction/&SubitemSelectElementalInfusionTitle=Seleziona uno slot. +Spell/&BarkskinOneDndDescription=Fornisce a te o a un alleato che puoi toccare una CA di almeno 17. Spell/&CausticZapDescription=Invii una scossa di energia verde verso il bersaglio, disorientandolo momentaneamente mentre l'incantesimo brucia parte della sua armatura. L'incantesimo prende di mira un nemico con un attacco magico e infligge 1d4 danni da acido e 1d6 da fulmine, e applica la condizione abbagliato. Spell/&CausticZapTitle=Zap caustico Spell/&ChaosBoltDescription=Esegui un attacco magico a distanza contro un bersaglio. Se colpisce, il bersaglio subisce 2d8 + 1d6 danni. Scegli uno dei d8. Il numero tirato su quel dado determina il tipo di danno dell'attacco:\n{0}\nSe tiri lo stesso numero su entrambi i d8, puoi usare la tua azione gratuita per prendere di mira una creatura diversa a tua scelta. Esegui un nuovo tiro per colpire contro il nuovo bersaglio e un nuovo tiro per i danni, che potrebbe far balzare di nuovo l'energia caotica. Una creatura può essere danneggiata solo una volta da ogni lancio di questo incantesimo. diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index 0a8efbaee8..2b25d5fc75 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -264,6 +264,7 @@ Rules/&ActivationTypeOnPowerActivatedAutoTitle=オートパワー Rules/&ActivationTypeOnRageStartAutomaticTitle=オートレイジスタート Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=自動クリーチャーのHPがゼロに減少 Rules/&ActivationTypeOnSneakAttackHitAutoTitle=オートスニークアタック +Rules/&ConditionOneDndBarkskinDescription=クリーチャーのアーマー クラスは少なくとも 17 になります。 Rules/&CounterFormDismissCreatureFormat=対象の召喚されたクリーチャーを退ける Rules/&MotionFormPullOnTop=上に引っ張る Rules/&MotionFormPushDownFormat={0}を押し下げる diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 71d6eba03f..9dc6a8f540 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -299,6 +299,7 @@ ModUi/&SwapAbjurationSavant=Abjurer Abjuration Savant< ModUi/&SwapCraftedItemAndRecipeIcons=+ ショップでレシピとクラフトアイテムのアイコンを交換 ModUi/&SwapEvocationPotentCantripAndSculptSpell=エヴォーカーのスカルプトスペルポテンシャルキャントリップの機能を入れ替えます ModUi/&SwapEvocationSavant=Evoker Evocation Savant を 5e 2024 バージョンの [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびにさらに 1 つ習得する] と入れ替えます +ModUi/&SwapOneDndBarkskinSpell=Barkskin を 5e 2024 バージョンの [ボーナス アクション、集中力なし、AC を 17 に設定] と交換します。 ModUi/&TableTopButton=テーブルトップコンテンツを選択 ModUi/&TableTopHelp1=• 以下のセクションでは、利便性のために、mod 全体に散らばっている 5e 2014 および 2024 設定を再グループ化して複製します。 ModUi/&TableTopHelp2=• ボタンを押してキャラクタータブのテーブルトップコンテンツのみを選択し、以下のすべてのオプションを選択して真のTT体験を味わってください。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt index 56b29d47c3..aad09fcf7c 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt @@ -70,6 +70,7 @@ Reaction/&SpendSpellSlotElementalInfusionReactDescription=受けるダメージ Reaction/&SpendSpellSlotElementalInfusionReactTitle=エレメントを吸収 Reaction/&SpendSpellSlotElementalInfusionTitle=エレメントアタック到来! Reaction/&SubitemSelectElementalInfusionTitle=スロットを選択します。 +Spell/&BarkskinOneDndDescription=あなたまたはあなたが触れることができる味方に少なくとも 17 の AC を与えます。 Spell/&CausticZapDescription=ターゲットに向かって緑のエネルギーの衝撃を送り、呪文が鎧の一部を燃やすと、ターゲットは一時的に方向感覚を失います。この呪文は敵 1 体を呪文攻撃で対象とし、1d4 の酸ダメージと 1d6 の雷ダメージを与え、幻惑状態を適用します。 Spell/&CausticZapTitle=カウスティックザップ Spell/&ChaosBoltDescription=ターゲットに対して遠隔呪文攻撃を行います。命中すると、ターゲットは 2d8 + 1d6 のダメージを受けます。d8 のうち 1 つを選択します。そのダイスで出た目によって、攻撃のダメージの種類が決まります:\n{0}\n両方の d8 で同じ目が出た場合、自由行動を使用して、選択した別のクリーチャーをターゲットにすることができます。新しいターゲットに対して新しい攻撃ロールを行い、新しいダメージ ロールを行います。これにより、混沌のエネルギーが再び跳ね上がる可能性があります。クリーチャーは、この呪文を唱えるたびに 1 回だけダメージを受ける可能性があります。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 057e98e920..1f57c07f83 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -264,6 +264,7 @@ Rules/&ActivationTypeOnPowerActivatedAutoTitle=자동 전원 Rules/&ActivationTypeOnRageStartAutomaticTitle=자동 분노 시작 Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=자동 생명체의 HP가 0으로 감소했습니다. Rules/&ActivationTypeOnSneakAttackHitAutoTitle=자동 몰래 공격 +Rules/&ConditionOneDndBarkskinDescription=해당 생물의 방어력이 최소 17이 됩니다. Rules/&CounterFormDismissCreatureFormat=소환된 대상 생물을 해제합니다. Rules/&MotionFormPullOnTop=위로 당겨 올리다 Rules/&MotionFormPushDownFormat={0}을 누르세요 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index f7b92a88b7..17dfa79f4c 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -299,6 +299,7 @@ ModUi/&SwapAbjurationSavant=Abjurer Abjuration Savant< ModUi/&SwapCraftedItemAndRecipeIcons=+ 상점에서 레시피와 제작 아이템 아이콘 교환 ModUi/&SwapEvocationPotentCantripAndSculptSpell=소환사 조각 주문강력한 주문 기능을 교체하세요 ModUi/&SwapEvocationSavant=Evoker Evocation Savant를 5e 2024 버전으로 교체하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개씩 더 배우기] +ModUi/&SwapOneDndBarkskinSpell=Barkskin을 5e 2024 버전 [보너스 액션, 집중 없음, AC 17로 설정]과 교환하세요 ModUi/&TableTopButton=테이블탑 콘텐츠 선택 ModUi/&TableTopHelp1=• 다음 섹션은 편의를 위해 모드 전체에 분산된 5e 2014 및 2024 설정을 다시 그룹화하고 복제합니다. ModUi/&TableTopHelp2=• 캐릭터 탭에서 테이블탑 콘텐츠만 선택하려면 버튼을 누르고, 진정한 TT 경험을 위해 아래의 모든 옵션을 선택하세요. diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt index 7b94a5e7ce..3896d9cfa6 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt @@ -70,6 +70,7 @@ Reaction/&SpendSpellSlotElementalInfusionReactDescription=들어오는 피해 Reaction/&SpendSpellSlotElementalInfusionReactTitle=요소를 흡수 Reaction/&SpendSpellSlotElementalInfusionTitle=들어오는 요소 공격! Reaction/&SubitemSelectElementalInfusionTitle=슬롯을 선택하세요. +Spell/&BarkskinOneDndDescription=당신이나 당신이 접촉할 수 있는 아군에게 최소 17의 AC를 부여합니다. Spell/&CausticZapDescription=주문이 갑옷의 일부를 태울 때 대상을 향해 녹색 에너지 충격을 보내 순간적으로 방향 감각을 잃게 만듭니다. 이 주문은 주문 공격으로 적 한 명을 대상으로 하며 1d4의 산성 피해와 1d6의 번개 피해를 입히고 눈부신 상태를 적용합니다. Spell/&CausticZapTitle=가성 Zap Spell/&ChaosBoltDescription=대상에게 원거리 주문 공격을 합니다. 명중 시 대상은 2d8 + 1d6의 피해를 입습니다. d8 중 하나를 선택합니다. 해당 주사위에 나온 숫자가 공격의 피해 유형을 결정합니다:\n{0}\n두 d8 모두에서 같은 숫자가 나오면 자유 행동을 사용하여 원하는 다른 생물을 대상으로 지정할 수 있습니다. 새로운 대상에게 새로운 공격 굴림을 하고 새로운 피해 굴림을 합니다. 그러면 혼돈 에너지가 다시 뛸 수 있습니다. 생물은 이 주문을 시전할 때마다 한 번만 피해를 입을 수 있습니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 311abfd637..25447a2bb5 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -264,6 +264,7 @@ Rules/&ActivationTypeOnPowerActivatedAutoTitle=Alimentação automática Rules/&ActivationTypeOnRageStartAutomaticTitle=Início de raiva automática Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Criatura Automática Reduzida a Zero HP Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Ataque furtivo automático +Rules/&ConditionOneDndBarkskinDescription=A Classe de Armadura da criatura se torna pelo menos 17. Rules/&CounterFormDismissCreatureFormat=Dispensa uma criatura alvo conjurada Rules/&MotionFormPullOnTop=Puxe para cima Rules/&MotionFormPushDownFormat=Empurre para baixo {0} diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 5a3ecbc0ac..2bc7efcee3 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -299,6 +299,7 @@ ModUi/&SwapAbjurationSavant=Troque Abjurador Sábio da ModUi/&SwapCraftedItemAndRecipeIcons=+ Troque ícones de receitas e itens criados na loja ModUi/&SwapEvocationPotentCantripAndSculptSpell=Troque os recursos Evocador Magias de Escultura e Truque Potente ModUi/&SwapEvocationSavant=Troque Evocador Sábio da Evocação pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] +ModUi/&SwapOneDndBarkskinSpell=Troque Barkskin pela versão 5e 2024 [ação bônus, sem concentração, CA definida como 17] ModUi/&TableTopButton=Selecionar conteúdo de mesa ModUi/&TableTopHelp1=• As seções a seguir reagrupam e duplicam as configurações 5e 2014 e 2024 espalhadas pelo mod para sua conveniência ModUi/&TableTopHelp2=• Pressione o botão para selecionar apenas o conteúdo da mesa na aba Personagem e selecione todas as opções abaixo para uma verdadeira experiência TT diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt index c2ec4d06d6..86fc5d10d6 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt @@ -70,6 +70,7 @@ Reaction/&SpendSpellSlotElementalInfusionReactDescription=Absorva o elemento de Reaction/&SpendSpellSlotElementalInfusionReactTitle=Absorver Elemento Reaction/&SpendSpellSlotElementalInfusionTitle=Ataque Elemental Chegando! Reaction/&SubitemSelectElementalInfusionTitle=Selecione um slot. +Spell/&BarkskinOneDndDescription=Concede a você ou a um aliado que você pode tocar uma CA de pelo menos 17. Spell/&CausticZapDescription=Você envia um choque de energia verde em direção ao alvo, desorientando-o momentaneamente enquanto a magia queima parte de sua armadura. A magia alveja um inimigo com um ataque de magia e causa 1d4 de dano ácido e 1d6 de dano de raio e aplica a condição ofuscado. Spell/&CausticZapTitle=Zap cáustico Spell/&ChaosBoltDescription=Faça um ataque mágico à distância contra um alvo. Em um acerto, o alvo recebe 2d8 + 1d6 de dano. Escolha um dos d8s. O número rolado naquele dado determina o tipo de dano do ataque:\n{0}\nSe você rolar o mesmo número em ambos os d8s, você pode usar sua ação livre para alvejar uma criatura diferente de sua escolha. Faça uma nova jogada de ataque contra o novo alvo, e faça uma nova jogada de dano, o que pode fazer a energia caótica saltar novamente. Uma criatura pode ser danificada apenas uma vez por cada conjuração desta magia. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 870a9f824c..d08bc66ade 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -264,6 +264,7 @@ Rules/&ActivationTypeOnPowerActivatedAutoTitle=Автоматическое ум Rules/&ActivationTypeOnRageStartAutomaticTitle=Автоматическое начало ярости Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Автоматическое уменьшение хитов существа до нуля Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Автоматическая скрытая атака +Rules/&ConditionOneDndBarkskinDescription=Класс брони существа становится не ниже 17. Rules/&CounterFormDismissCreatureFormat=Отпускает призванное существо Rules/&MotionFormPullOnTop=Тянуть наверх Rules/&MotionFormPushDownFormat=Толкуть вниз {0} diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 7581c366a2..14b1a845c2 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -299,6 +299,7 @@ ModUi/&SwapAbjurationSavant=Поменяйте Abjurer + Заменить значок рецепта значком создаваемого предмета в магазине ModUi/&SwapEvocationPotentCantripAndSculptSpell=Поменять местами умения Волшебника школы Воплощения Построение заклинаний и Мощный заговор [OneDnd] ModUi/&SwapEvocationSavant=Поменяйте Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] +ModUi/&SwapOneDndBarkskinSpell=Поменяйте Barkskin на версию 5e 2024 [бонусное действие, нет концентрации, AC установлен на 17] ModUi/&TableTopButton=Выберите содержимое Tabletop ModUi/&TableTopHelp1=• Следующие разделы перегруппированы и дублируют настройки 5e 2014 и 2024, разбросанные по всему моду для вашего удобства. ModUi/&TableTopHelp2=• Нажмите кнопку, чтобы выбрать только настольный контент на вкладке «Персонаж», и выберите все параметры ниже, чтобы получить настоящий опыт TT diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt index 8536f2f04e..c975c1393f 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt @@ -70,6 +70,7 @@ Reaction/&SpendSpellSlotElementalInfusionReactDescription=Поглощает с Reaction/&SpendSpellSlotElementalInfusionReactTitle=Поглотить стихию Reaction/&SpendSpellSlotElementalInfusionTitle=Входящая стихийная атака! Reaction/&SubitemSelectElementalInfusionTitle=Выберите ячейку. +Spell/&BarkskinOneDndDescription=Дает вам или союзнику, к которому вы можете прикоснуться, КБ не менее 17. Spell/&CausticZapDescription=Вы посылаете в цель разряд зелёной энергии, на мгновение дезориентируя её, пока заклинание сжигает часть её брони. Заклинание поражает одного противника атакой заклинанием, наносит 1d4 урона кислотой и 1d6 урона электричеством, а также накладывает состояние ослепления. Spell/&CausticZapTitle=Едкий заряд Spell/&ChaosBoltDescription=Вы бросаете волнистую, трепещущую массу хаотической энергии в одно существо в радиусе действия. Совершите дальнобойную атаку заклинанием по существу. При попадании цель получает 2d8 + 1d6 урона. Выберите одну из брошенных костей d8. Выпавшее число определяет вид урона атаки:\n{0}\nЕсли вы выбрасываете одинаковое значение на обоих к8, свободным действием вы можете выбрать другое существо по вашему выбору. Совершите новый бросок атаки против новой цели и совершите новый бросок урона, который может привести к тому, что хаотическая энергия снова перескочит. Существо может получить урон от этого заклинания только один раз за каждое его наложение. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 40eaf8da96..15c14102d3 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -264,6 +264,7 @@ Rules/&ActivationTypeOnPowerActivatedAutoTitle=自动启用能力 Rules/&ActivationTypeOnRageStartAutomaticTitle=自动开始狂暴 Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=自动生物生命值降至零 Rules/&ActivationTypeOnSneakAttackHitAutoTitle=自动偷袭 +Rules/&ConditionOneDndBarkskinDescription=该生物的防御等级至少变为 17。 Rules/&CounterFormDismissCreatureFormat=解散一个目标召唤生物 Rules/&MotionFormPullOnTop=拉至顶部 Rules/&MotionFormPushDownFormat=下推{0} diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 113ce3cf47..87f2c7659d 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -299,6 +299,7 @@ ModUi/&SwapAbjurationSavant=将 Abjurer Abjuration Sav ModUi/&SwapCraftedItemAndRecipeIcons=+ 在商店中交换配方和制作物品图标 ModUi/&SwapEvocationPotentCantripAndSculptSpell=交换召唤师 塑形法术强效咒语功能 ModUi/&SwapEvocationSavant=将 Evoker Evocation Savant 与 5e 2024 版本交换 [获得后学习 2 个学校法术,每次提升一个槽位等级时再学习 1 个] +ModUi/&SwapOneDndBarkskinSpell=将 Barkskin 与 5e 2024 版本交换[奖励行动,无集中力,AC 设置为 17] ModUi/&TableTopButton=选择桌面内容 ModUi/&TableTopHelp1=• 以下部分重新分组并复制了分散在模块中的 5e 2014 和 2024 设置,以方便您使用 ModUi/&TableTopHelp2=• 按下按钮仅选择角色选项卡下的桌面内容,并选择以下所有选项以获得真正的 TT 体验 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt index 13ee1669f3..1a6a9827fd 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt @@ -70,6 +70,7 @@ Reaction/&SpendSpellSlotElementalInfusionReactDescription=吸收来袭的伤害 Reaction/&SpendSpellSlotElementalInfusionReactTitle=吸收元素 Reaction/&SpendSpellSlotElementalInfusionTitle=元素攻击袭来! Reaction/&SubitemSelectElementalInfusionTitle=选择一个法术位。 +Spell/&BarkskinOneDndDescription=让您或您的盟友能够触摸至少 17 的 AC。 Spell/&CausticZapDescription=你向目标发射一股绿色能量,使他们暂时迷失方向,同时法术会烧毁他们的一些护甲。该法术以单个敌人为目标进行法术攻击,造成 1d4 强酸和 1d6 闪电伤害,并施加眩晕状态。 Spell/&CausticZapTitle=酸蚀震击 Spell/&ChaosBoltDescription=对目标进行远程法术攻击。命中后,目标受到 2d8 + 1d6 伤害。选择其中一个 d8。该骰子上掷出的数字决定了攻击的伤害类型:\n{0}\n如果两个 d8 上掷出的数字相同,则可以使用自由行动来瞄准您选择的其他生物。对新目标进行新的攻击掷骰,并进行新的伤害掷骰,这可能会导致混沌能量再次跳跃。每次施放此法术只能对生物造成一次伤害。 From 2fff5323b266898a9334a2eda4f0e1e3dbf99c5b Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 1 Nov 2024 20:53:39 -0700 Subject: [PATCH 22/85] add Bard tabletop 5e 2024 settings --- .../Api/DatabaseHelper-RELEASE.cs | 15 ++++-- .../ChangelogHistory.txt | 5 +- .../Displays/ClassesDisplay.cs | 25 +++++++++ .../Displays/GeneralDisplay.cs | 52 +++++++++++++++++-- .../Models/SrdAndHouseRulesContext.cs | 50 +++++++++++++++++- SolastaUnfinishedBusiness/Settings.cs | 5 +- SolastaUnfinishedBusiness/Settings/empty.xml | 9 ++-- .../Settings/zappastuff.xml | 5 ++ .../Translations/de/Settings-de.txt | 19 ++++--- .../Translations/en/Settings-en.txt | 19 ++++--- .../Translations/es/Settings-es.txt | 19 ++++--- .../Translations/fr/Settings-fr.txt | 19 ++++--- .../Translations/it/Settings-it.txt | 19 ++++--- .../Translations/ja/Settings-ja.txt | 19 ++++--- .../Translations/ko/Settings-ko.txt | 19 ++++--- .../Translations/pt-BR/Settings-pt-BR.txt | 19 ++++--- .../Translations/ru/Settings-ru.txt | 19 ++++--- .../Translations/zh-CN/Settings-zh-CN.txt | 19 ++++--- 18 files changed, 262 insertions(+), 94 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index d1e4a879c6..bb39713b4b 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -308,6 +308,9 @@ internal static class CharacterSubclassDefinitions internal static class ConditionDefinitions { + internal static ConditionDefinition ConditionBardicInspiration { get; } = + GetDefinition("ConditionBardicInspiration"); + internal static ConditionDefinition ConditionCharmedByHypnoticPattern { get; } = GetDefinition("ConditionCharmedByHypnoticPattern"); @@ -548,9 +551,6 @@ internal static class ConditionDefinitions internal static ConditionDefinition ConditionHindered_By_Frost { get; } = GetDefinition("ConditionHindered_By_Frost"); - internal static ConditionDefinition ConditionHitByDirtyFighting { get; } = - GetDefinition("ConditionHitByDirtyFighting"); - internal static ConditionDefinition ConditionHopeless { get; } = GetDefinition("ConditionHopeless"); @@ -1737,6 +1737,12 @@ internal static class FeatureDefinitionMoveModes internal static class FeatureDefinitionPointPools { + internal static FeatureDefinitionPointPool PointPoolBardExpertiseLevel3 { get; } = + GetDefinition("PointPoolBardExpertiseLevel3"); + + internal static FeatureDefinitionPointPool PointPoolBardExpertiseLevel10 { get; } = + GetDefinition("PointPoolBardExpertiseLevel10"); + internal static FeatureDefinitionPointPool PointPoolAbilityScoreImprovement { get; } = GetDefinition("PointPoolAbilityScoreImprovement"); @@ -2429,6 +2435,9 @@ internal static class FeatureDefinitionRestHealingModifiers { internal static FeatureDefinitionRestHealingModifier RestHealingModifierBardHealingBallad { get; } = GetDefinition("RestHealingModifierBardHealingBallad"); + + internal static FeatureDefinitionRestHealingModifier RestHealingModifierBardSongOfRest { get; } = + GetDefinition("RestHealingModifierBardSongOfRest"); } internal static class FeatureDefinitionSavingThrowAffinitys diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 9841a914c1..023b6b37e8 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,7 +1,10 @@ 1.5.97.37: +- added Character > Classes > 'Change Bard bardic inspiration duration to 1hr instead of 10 minutes' [OneDnd] +- added Character > Classes > 'Enable Bard Expertise at levels 2 and 9 instead of 3 and 10' [OneDnd] - added Character > Classes > 'Enable Ritual casting on all casters' [OneDnd] -- added Character > Classes > 'Enable Wizard to learn Scholar at level 2' [OneDnd] +- added Character > Classes > 'Remove Bard song of rest at level 2' [OneDnd] +- added Character > Spells > 'Swap Barkskin with 5e 2024 version' [OneDnd] - added Character > Subclasses > 'Swap Abjurer abjuration savant with 5e 2024 version' [OneDnd] - added Character > Subclasses > 'Swap Evoker evocation savant with 5e 2024 version' [OneDnd] - added Wizard Abjuration arcane ward recharge bonus action diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index d814967e88..2a1528ac69 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -36,6 +36,31 @@ internal static void DisplayClasses() CharacterContext.SwitchScimitarWeaponSpecialization(); } + UI.Label(); + UI.Label("" + Gui.Localize("Class/&BardTitle") + ":"); + UI.Label(); + + toggle = Main.Settings.ChangeBardicInspirationDurationToOneHour; + if (UI.Toggle(Gui.Localize("ModUi/&ChangeBardicInspirationDurationToOneHour"), ref toggle, UI.AutoWidth())) + { + Main.Settings.ChangeBardicInspirationDurationToOneHour = toggle; + SrdAndHouseRulesContext.SwitchOneDndBardicInspirationDurationToOneHour(); + } + + toggle = Main.Settings.EnableBardExpertiseOneLevelBefore; + if (UI.Toggle(Gui.Localize("ModUi/&EnableBardExpertiseOneLevelBefore"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableBardExpertiseOneLevelBefore = toggle; + SrdAndHouseRulesContext.SwitchOneDndBardExpertiseOneLevelBefore(); + } + + toggle = Main.Settings.RemoveBardSongOfRest; + if (UI.Toggle(Gui.Localize("ModUi/&RemoveBardSongOfRest"), ref toggle, UI.AutoWidth())) + { + Main.Settings.RemoveBardSongOfRest = toggle; + SrdAndHouseRulesContext.SwitchOneDndRemoveBardSongOfRest(); + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&BarbarianTitle") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 67889ddd11..78dab18358 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -260,13 +260,33 @@ private static void DisplayOneDnd() SrdAndHouseRulesContext.SwitchDruidAllowMetalArmor(); } - toggle = Main.Settings.EnableRitualOnAllCasters; - if (UI.Toggle(Gui.Localize("ModUi/&EnableRitualOnAllCasters"), ref toggle, UI.AutoWidth())) + UI.Label(); + UI.Label("" + Gui.Localize("Class/&BardTitle") + ":"); + UI.Label(); + + toggle = Main.Settings.ChangeBardicInspirationDurationToOneHour; + if (UI.Toggle(Gui.Localize("ModUi/&ChangeBardicInspirationDurationToOneHour"), ref toggle, UI.AutoWidth())) { - Main.Settings.EnableRitualOnAllCasters = toggle; - SrdAndHouseRulesContext.SwitchEnableRitualOnAllCasters(); + Main.Settings.ChangeBardicInspirationDurationToOneHour = toggle; + SrdAndHouseRulesContext.SwitchOneDndBardicInspirationDurationToOneHour(); } + toggle = Main.Settings.EnableBardExpertiseOneLevelBefore; + if (UI.Toggle(Gui.Localize("ModUi/&EnableBardExpertiseOneLevelBefore"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableBardExpertiseOneLevelBefore = toggle; + SrdAndHouseRulesContext.SwitchOneDndBardExpertiseOneLevelBefore(); + } + + toggle = Main.Settings.RemoveBardSongOfRest; + if (UI.Toggle(Gui.Localize("ModUi/&RemoveBardSongOfRest"), ref toggle, UI.AutoWidth())) + { + Main.Settings.RemoveBardSongOfRest = toggle; + SrdAndHouseRulesContext.SwitchOneDndRemoveBardSongOfRest(); + } + + UI.Label(); + UI.Label("" + Gui.Localize("Class/&BarbarianTitle") + ":"); UI.Label(); toggle = Main.Settings.EnableBarbarianBrutalStrike; @@ -302,6 +322,8 @@ private static void DisplayOneDnd() CharacterContext.SwitchBarbarianRegainOneRageAtShortRest(); } + UI.Label(); + UI.Label("" + Gui.Localize("Class/&FighterTitle") + ":"); UI.Label(); toggle = Main.Settings.AddFighterLevelToIndomitableSavingReroll; @@ -311,6 +333,8 @@ private static void DisplayOneDnd() CharacterContext.SwitchFighterLevelToIndomitableSavingReroll(); } + UI.Label(); + UI.Label("" + Gui.Localize("Class/&MonkTitle") + ":"); UI.Label(); toggle = Main.Settings.EnableMonkBodyAndMindToReplacePerfectSelf; @@ -352,6 +376,8 @@ private static void DisplayOneDnd() CharacterContext.SwitchMonkSuperiorDefenseToReplaceEmptyBody(); } + UI.Label(); + UI.Label("" + Gui.Localize("Class/&PaladinTitle") + ":"); UI.Label(); toggle = Main.Settings.EnablePaladinLayOnHandsAsBonusAction; @@ -374,6 +400,8 @@ private static void DisplayOneDnd() SrdAndHouseRulesContext.SwitchOneDndPaladinLearnSpellCastingAtOne(); } + UI.Label(); + UI.Label("" + Gui.Localize("Class/&RangerTitle") + ":"); UI.Label(); toggle = Main.Settings.EnableRangerSpellCastingAtLevel1; @@ -383,6 +411,8 @@ private static void DisplayOneDnd() SrdAndHouseRulesContext.SwitchOneDndRangerLearnSpellCastingAtOne(); } + UI.Label(); + UI.Label("" + Gui.Localize("Class/&RogueTitle") + ":"); UI.Label(); toggle = Main.Settings.EnableRogueCunningStrike; @@ -392,6 +422,8 @@ private static void DisplayOneDnd() CharacterContext.SwitchRogueCunningStrike(); } + UI.Label(); + UI.Label("" + Gui.Localize("Class/&WizardTitle") + ":"); UI.Label(); toggle = Main.Settings.EnableWizardToLearnScholarAtLevel2; @@ -408,6 +440,8 @@ private static void DisplayOneDnd() SrdAndHouseRulesContext.SwitchOneDndWizardSchoolOfMagicLearningLevel(); } + UI.Label(); + UI.Label("" + Gui.Localize("ModUi/&DocsSpells") + ":"); UI.Label(); toggle = Main.Settings.EnableCastersToCountMaxPreparedFromTable; @@ -423,6 +457,13 @@ private static void DisplayOneDnd() SrdAndHouseRulesContext.SwitchOneDndHealingSpellsBuf(); } + toggle = Main.Settings.EnableRitualOnAllCasters; + if (UI.Toggle(Gui.Localize("ModUi/&EnableRitualOnAllCasters"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableRitualOnAllCasters = toggle; + SrdAndHouseRulesContext.SwitchEnableRitualOnAllCasters(); + } + toggle = Main.Settings.SwapOneDndBarkskinSpell; if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndBarkskinSpell"), ref toggle, UI.AutoWidth())) { @@ -430,6 +471,8 @@ private static void DisplayOneDnd() SrdAndHouseRulesContext.SwapOneDndBarkskinSpell(); } + UI.Label(); + UI.Label("" + Gui.Localize("ModUi/&DocsSubclasses") + ":"); UI.Label(); toggle = Main.Settings.SwapAbjurationSavant; @@ -761,6 +804,7 @@ private static void DisplayTabletop() UI.Label(); toggle = Main.Settings.EnableBardHealingBalladOnLongRest; + // ReSharper disable once InvertIf if (UI.Toggle(Gui.Localize("ModUi/&EnableBardHealingBalladOnLongRest"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardHealingBalladOnLongRest = toggle; diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index 25edff1b0d..092b35d16c 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -21,6 +21,7 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ItemDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionRegenerations; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionFeatureSets; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionRestHealingModifiers; namespace SolastaUnfinishedBusiness.Models; @@ -458,7 +459,6 @@ internal static void SwapOneDndBarkskinSpell() Barkskin.GuiPresentation.description = "Spell/&BarkskinDescription"; ConditionBarkskin.GuiPresentation.description = "Rules/&ConditionBarkskinDescription"; } - } internal static void SwitchOneDndWizardSchoolOfMagicLearningLevel() @@ -588,6 +588,54 @@ internal static void SwitchOneDndPaladinLayOnHandAsBonusAction() : ActivationTime.Action; } + internal static void SwitchOneDndBardExpertiseOneLevelBefore() + { + var level = Main.Settings.EnableBardExpertiseOneLevelBefore ? 2 : 3; + + foreach (var featureUnlock in Ranger.FeatureUnlocks + .Where(x => x.FeatureDefinition == FeatureDefinitionPointPools.PointPoolBardExpertiseLevel3)) + { + featureUnlock.level = level; + } + + level = Main.Settings.EnableBardExpertiseOneLevelBefore ? 9 : 10; + + foreach (var featureUnlock in Ranger.FeatureUnlocks + .Where(x => x.FeatureDefinition == FeatureDefinitionPointPools.PointPoolBardExpertiseLevel10)) + { + featureUnlock.level = level; + } + + Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchOneDndBardicInspirationDurationToOneHour() + { + if (Main.Settings.ChangeBardicInspirationDurationToOneHour) + { + ConditionDefinitions.ConditionBardicInspiration.durationType = DurationType.Hour; + ConditionDefinitions.ConditionBardicInspiration.durationParameter = 1; + } + else + { + ConditionDefinitions.ConditionBardicInspiration.durationType = DurationType.Minute; + ConditionDefinitions.ConditionBardicInspiration.durationParameter = 10; + } + } + + internal static void SwitchOneDndRemoveBardSongOfRest() + { + Bard.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == RestHealingModifierBardSongOfRest); + + if (!Main.Settings.RemoveBardSongOfRest) + { + Bard.FeatureUnlocks.Add(new FeatureUnlockByLevel(RestHealingModifierBardSongOfRest, 2)); + } + + Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + internal static void SwitchOneDndHealingPotionBonusAction() { if (Main.Settings.OneDndHealingPotionBonusAction) diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index a92d8a6796..516df9ddc1 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -262,6 +262,9 @@ public class Settings : UnityModManager.ModSettings public bool AllowDruidToWearMetalArmor { get; set; } public bool EnableRitualOnAllCasters { get; set; } public bool GrantScimitarSpecializationToBardRogue { get; set; } + public bool EnableBardExpertiseOneLevelBefore { get; set; } + public bool ChangeBardicInspirationDurationToOneHour { get; set; } + public bool RemoveBardSongOfRest { get; set; } public bool EnableBarbarianBrutalStrike { get; set; } public bool DisableBarbarianBrutalCritical { get; set; } public bool EnableBarbarianFightingStyle { get; set; } @@ -361,12 +364,12 @@ public class Settings : UnityModManager.ModSettings public bool FixEldritchBlastRange { get; set; } public bool ModifyGravitySlam { get; set; } public bool EnableOneDndHealingSpellsBuf { get; set; } + public bool SwapOneDndBarkskinSpell { get; set; } public bool AllowHasteCasting { get; set; } public bool AllowStackedMaterialComponent { get; set; } public bool EnableRelearnSpells { get; set; } public bool AllowDisplayingOfficialSpells { get; set; } public bool AllowDisplayingNonSuggestedSpells { get; set; } - public bool SwapOneDndBarkskinSpell { get; set; } public SerializableDictionary SpellListSliderPosition { get; set; } = []; public SerializableDictionary> SpellListSpellEnabled { get; set; } = []; diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index e845b8ec8b..0a54cf2bac 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -546,7 +546,11 @@ false en false + false false + false + false + false false false false @@ -634,6 +638,7 @@ false false false + false false false false @@ -1029,8 +1034,4 @@ false false false - 0 - false - false - false \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index 07e4eced75..5665d13073 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -588,7 +588,11 @@ false en true + false false + false + false + false true true true @@ -899,6 +903,7 @@ true true true + false true true false diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index c3b1f52c0d..9e99b6e581 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -40,6 +40,7 @@ ModUi/&BlindedConditionDontAllowAttackOfOpportunity=Keine Gelegenheitsangriffe a ModUi/&Blueprints=Blaupausen ModUi/&Campaigns=Kampagnen ModUi/&Category=Kategorie +ModUi/&ChangeBardicInspirationDurationToOneHour=Ändern Sie die Dauer von Bardic Inspiration auf 1 Stunde statt 10 Minuten. ModUi/&ChangeDragonbornElementalBreathUsages=Ändere die Verwendung des Elementaratems von Dragonborn in einen CON-Modifikator pro kurzer Pause. ModUi/&ChangeSleetStormToCube=Ändern Sie Schneeregen, um einen Würfel statt eines Zylinders zu verwenden. ModUi/&Changelog=Änderungsprotokoll @@ -59,7 +60,7 @@ ModUi/&CriticalOption1=1: Summiere das maximale Er ModUi/&CriticalOption2=2: Wirf alle Schadenswürfel, die das höchstmögliche Ergebnis erzielen, erneut und addiere es zum Gesamtschaden ModUi/&CriticalOption3=3: Verdoppeln Sie den Gesamtschaden Ihres Angriffs, anstatt zusätzliche Würfel zu werfen. [(XdY+Z)*2] ModUi/&DisableAutoEquip=Automatisches Ausrüsten von Gegenständen im Inventar deaktivieren -ModUi/&DisableBarbarianBrutalCritical=+ Deaktivieren Sie außerdem Brutal Critical auf den Stufen 9, 13 und 17 +ModUi/&DisableBarbarianBrutalCritical=+ Deaktivieren Sie außerdem Brutal Critical auf den Stufen 9, 13 und 17 ModUi/&DisableCastSpellPreRequisitesOnModFeats=Deaktivieren Sie die Voraussetzungen für das Wirken von Zaubern bei Mod feats [Neustart erforderlich] ModUi/&DisableClassPrerequisitesOnModFeats=Deaktivieren Sie Levelvoraussetzungen für Talente ModUi/&DisableMultilineSpellOffering=Deaktivieren Sie das Anbieten von mehrzeiligen Zaubersprüchen in der Aktionsleiste [hauptsächlich für Controller-Benutzer, die Helden ohne Multicaster verwenden] @@ -101,6 +102,7 @@ ModUi/&EnableBarbarianBrutalStrike=Aktiviere Brutal StrikeKampfstil auf Stufe 2. ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Aktivieren Sie den Buff und Debuff von Reckless Attack, um ihn zu Beginn der nächsten Runde zu beenden. ModUi/&EnableBarbarianRegainOneRageAtShortRest=Aktiviere die Wiedererlangung einer Wut-Anwendung während einer kurzen Pause auf Level 7 +ModUi/&EnableBardExpertiseOneLevelBefore=Aktivieren Sie Expertise auf den Stufen 2 und 9 statt 3 und 10. ModUi/&EnableBardHealingBalladOnLongRest=Aktivieren Sie College of Hope Healing Ballad bei langer Pause ModUi/&EnableBetaContent=Beta-Inhalte aktivieren [Neustart erforderlich] ModUi/&EnableCancelEditOnRightMouseClick=Abbruchaktionen mit rechtem Mausklick aktivieren @@ -143,20 +145,20 @@ ModUi/&EnableMulticlass=Aktivieren Sie Multiclass < ModUi/&EnableOneDndHealingSpellsBuf=Aktiviere den Heilungswürfel-Buff für Wunden heilen, Heilendes Wort, Massenheilung von Wunden und Massenheilungswort. ModUi/&EnablePaladinLayOnHandsAsBonusAction=Aktiviere Handauflegen als Bonusaktion ModUi/&EnablePaladinSmiteAsBonusAction=Aktiviere Smite als Bonusaktion -ModUi/&EnablePaladinSpellCastingAtLevel1=Ermöglicht Paladin, Zaubersprüche auf Stufe 1 statt 2 zu erlangen [OneDnd] +ModUi/&EnablePaladinSpellCastingAtLevel1=Aktiviere Zauberwirken auf Stufe 1 statt 2. ModUi/&EnablePcgRandom=Aktivieren Sie einen besseren Zufallsgenerator-Algorithmus [https://www.pcg-random.org] ModUi/&EnableProneAction=Aktivieren Sie die Aktion In die Hocke gehen [Sie können kostenlos in die Hocke gehen] ModUi/&EnablePullPushOnVerticalDirection=Aktivieren Sie Push- und Pull-Bewegungseffekte, damit diese auch auf der Auf-/Ab-Achse funktionieren ModUi/&EnableRangerNatureShroudAt10=Aktivieren Sie die Funktion Nature's Veil auf Stufe 10 [als Bonusaktion können Sie bis zum Beginn der nächsten Runde auf magische Weise unsichtbar werden] -ModUi/&EnableRangerSpellCastingAtLevel1=Ermöglicht Ranger, Zaubersprüche auf Stufe 1 statt 2 zu erlangen. +ModUi/&EnableRangerSpellCastingAtLevel1=Aktiviere Zauberwirken auf Stufe 1 statt 2. ModUi/&EnableRelearnSpells=Aktivieren Sie die Auswahl von Zaubersprüchen oder Zaubersprüchen, die Sie bereits aus anderen Quellen gelernt haben. ModUi/&EnableRespecAction=Aktivieren Sie RESPEC nach der Rest-Aktion [RESPEC nicht während einer Multiplayer-Sitzung verwenden] -ModUi/&EnableRitualOnAllCasters=Aktivieren Sie das Wirken von Ritualen für alle Zauberer +ModUi/&EnableRitualOnAllCasters=Aktivieren Sie das Wirken von Ritualen für alle Zauberer. ModUi/&EnableRogueCunningStrike=Aktiviere Cunning Strike und Devious Strike auf den Leveln 5 und 14 [du lässt 1 Schleichangriffswürfel für zusätzliche Treffereffekte weg] ModUi/&EnableRogueFightingStyle=Aktiviere die Auswahl Kampfstil auf Stufe 2. ModUi/&EnableRogueSteadyAim=Aktivieren Sie Zielen ohne Unterbrechung auf Stufe 3 [Bonusaktion verschafft einen Vorteil bei Ihrem nächsten Angriffswurf in der aktuellen Runde, wenn Sie sich noch nicht bewegt haben] ModUi/&EnableRogueStrSaving=Aktiviere Hoodlum DEX- oder STR-Modifikatoren bei Cunning/Devious Strike, Debilitating/Improved Strike und Hail of Blades -ModUi/&EnableSignatureSpellsRelearn=Aktivieren Sie die Vorbereitung der Signaturzauber des Zauberers bei jeder langen Pause [statt einmal auf Stufe 20] +ModUi/&EnableSignatureSpellsRelearn=Aktiviere, dass Signaturzauber bei jeder langen Pause vorbereitet werden [statt einmal auf Stufe 20] ModUi/&EnableSorcererMagicalGuidance=Aktiviere Magische Führung auf Stufe 5. ModUi/&EnableSorcererQuickenedAction=Aktivieren Sie die Aktion Beschleunigter Zauber, um das Wirken des Hauptaktionszaubers mit angewandter beschleunigter Metamagie zu ermöglichen. ModUi/&EnableSortingDungeonMakerAssets=Aktivieren Sie die Sortierung von Assets im Dungeon Maker-Editor. @@ -168,8 +170,8 @@ ModUi/&EnableTooltipDistance=Aktivieren Sie die Anzeige der Entfernung in den To ModUi/&EnableUnarmedMainAttackAction=Aktiviere die Aktion Unbewaffneter Angriff [wenn der Akteur eine Waffe im Hauptkampf hat, ein Mönch ist oder Handwickel oder Panzerhandschuhe ausgerüstet hat] ModUi/&EnableUpcastConjureElementalAndFey=Aktiviere Upcast von Elementar beschwören und Feenbeschwören ModUi/&EnableVariablePlaceholdersOnTexts=Aktivieren Sie variable Platzhalter in Beschreibungen [verwenden Sie {VARIABLE_NAME} als Platzhalter] -ModUi/&EnableWizardToLearnScholarAtLevel2=Aktiviere Wizard, um Scholar auf Level 2 zu erlernen -ModUi/&EnableWizardToLearnSchoolAtLevel3=Aktivieren Sie Wizard, um die Schule der Magie auf Stufe 3 statt auf Stufe 2 zu erwerben +ModUi/&EnableWizardToLearnScholarAtLevel2=Aktiviere Gelehrter auf Stufe 2 +ModUi/&EnableWizardToLearnSchoolAtLevel3=Aktiviere die Schule der Magie auf Level 3 statt auf Level 2. ModUi/&EnablesAsiAndFeat=Aktivieren Sie sowohl die Erhöhung der Attributwerte als auch die Auswahl von Talenten [anstelle einer exklusiven Auswahl] ModUi/&EncounterPercentageChance=Prozentuale Wahrscheinlichkeit für Zufallsbegegnungen festlegen ModUi/&Encounters=Begegnungen @@ -198,7 +200,7 @@ ModUi/&FullyControlConjurations=Vollständige Kontrolle über Beschwörungen ModUi/&Gameplay=Spielablauf ModUi/&General=Allgemeines: ModUi/&GeneralMenu=Allgemein -ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Verleihen Sie Barden und Schurken die Waffenspezialisierung Krummsäbel +ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Verleiht Barden und Schurken die Waffenspezialisierung mit dem Krummsäbel ModUi/&GridSelectedColor=Ändern Sie die Bewegung Rasterfarbe ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Verstecke die visuellen Effekte von Ausgängen und Teleportern, falls sie noch nicht entdeckt wurden ModUi/&HideMonsterHitPoints=Zeigt die Gesundheit von Monstern in Schritten von 25 % / 50 % / 75 % / 100 % an, statt in exakten Trefferpunkten. @@ -250,6 +252,7 @@ ModUi/&Races=Rennen ModUi/&RecipeCost=Kosten des Rezepts ModUi/&RelicForgeries=Reliquienfälschungen ModUi/&RemoveAttunementRequirements=Abstimmungsanforderungen entfernen [Neustart erforderlich] +ModUi/&RemoveBardSongOfRest=Entferne Song of Rest auf Level 2 ModUi/&RemoveBugVisualModels=Ersetzen Sie im Spiel spinnenähnliche Modelle durch bärenähnliche Modelle [Spinnenphobie] [Neustart erforderlich] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Humanoidenfilter bei Grauenhaftem Gelächter entfernen ModUi/&RemoveRecurringEffectOnEntangle=Wende den Verstricken-Effekt nur beim Zaubern an und erzwinge außerdem eine Stärkeprüfung, um sich von den Ranken zu befreien. diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index aeedc4fbbf..735cd60640 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -40,6 +40,7 @@ ModUi/&BlindedConditionDontAllowAttackOfOpportunity=Enable no attacks of opportu ModUi/&Blueprints=Blueprints ModUi/&Campaigns=Campaigns ModUi/&Category=Category +ModUi/&ChangeBardicInspirationDurationToOneHour=Change Bardic Inspiration duration to 1hr instead of 10 minutes ModUi/&ChangeDragonbornElementalBreathUsages=Change Dragonborn elemental breath usages to CON modifier per short rest ModUi/&ChangeSleetStormToCube=Change Sleet Storm to use a cube instead of a cylinder ModUi/&Changelog=Change Log @@ -59,7 +60,7 @@ ModUi/&CriticalOption1=1: sum the maximum result f ModUi/&CriticalOption2=2: keep re-rolling any damage dice that roll the highest possible result and add it to the total damage ModUi/&CriticalOption3=3: Double your attack's total damage instead of rolling additional dice. [(XdY+Z)*2] ModUi/&DisableAutoEquip=Disable auto-equip of items in inventory -ModUi/&DisableBarbarianBrutalCritical=+ Also disable Brutal Critical at levels 9, 13 and 17 +ModUi/&DisableBarbarianBrutalCritical=+ Also disable Brutal Critical at levels 9, 13 and 17 ModUi/&DisableCastSpellPreRequisitesOnModFeats=Disable cast spell pre-requisites on mod feats [Requires Restart] ModUi/&DisableClassPrerequisitesOnModFeats=Disable level pre-requisites on feats ModUi/&DisableMultilineSpellOffering=Disable multi-line spell offering on action bar [mainly for controller users using non multicaster heroes] @@ -101,6 +102,7 @@ ModUi/&EnableBarbarianBrutalStrike=Enable Brutal Strike a ModUi/&EnableBarbarianFightingStyle=Enable Fighting Style choice at level 2 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Enable Reckless Attack buff and debuff to finish at start of next turn ModUi/&EnableBarbarianRegainOneRageAtShortRest=Enable regain one Rage use over a short rest at level 7 +ModUi/&EnableBardExpertiseOneLevelBefore=Enable Expertise at levels 2 and 9 instead of 3 and 10 ModUi/&EnableBardHealingBalladOnLongRest=Enable College of Hope Healing Ballad on long rest ModUi/&EnableBetaContent=Enable beta content [Requires Restart] ModUi/&EnableCancelEditOnRightMouseClick=Enable cancel actions with right mouse click @@ -143,20 +145,20 @@ ModUi/&EnableMulticlass=Enable multiclass Cure Wounds, Healing Word, Mass Cure Wounds, and Mass Healing Word ModUi/&EnablePaladinLayOnHandsAsBonusAction=Enable Lay on Hands as bonus action ModUi/&EnablePaladinSmiteAsBonusAction=Enable Smite as bonus action -ModUi/&EnablePaladinSpellCastingAtLevel1=Enable Paladin acquire spellcasting at level 1 instead of 2 +ModUi/&EnablePaladinSpellCastingAtLevel1=Enable spellcasting at level 1 instead of 2 ModUi/&EnablePcgRandom=Enable a better random generator algorithm [https://www.pcg-random.org] ModUi/&EnableProneAction=Enable the Fall Prone action [you can fall prone at no cost] ModUi/&EnablePullPushOnVerticalDirection=Enable push and pull motion effects to also work on up/down axis ModUi/&EnableRangerNatureShroudAt10=Enable Nature's Veil feature at level 10 [as a bonus action, you can magically become invisible until start of next turn] -ModUi/&EnableRangerSpellCastingAtLevel1=Enable Ranger acquire spellcasting at level 1 instead of 2 +ModUi/&EnableRangerSpellCastingAtLevel1=Enable spellcasting at level 1 instead of 2 ModUi/&EnableRelearnSpells=Enable selection of cantrips or spells already learned from other sources ModUi/&EnableRespecAction=Enable the RESPEC after rest action [don't use RESPEC during a multiplayer session] -ModUi/&EnableRitualOnAllCasters=Enable Ritual casting on all casters +ModUi/&EnableRitualOnAllCasters=Enable Ritual casting on all casters ModUi/&EnableRogueCunningStrike=Enable Cunning Strike and Devious Strike at levels 5 and 14 [you let forgo 1 sneak attack dice for additional hit effects] ModUi/&EnableRogueFightingStyle=Enable Fighting Style choice at level 2 ModUi/&EnableRogueSteadyAim=Enable Steady Aim at level 3 [bonus action gives advantage on your next attack roll in the current turn if you haven't moved yet] ModUi/&EnableRogueStrSaving=Enable Hoodlum DEX or STR modifiers on Cunning/Devious Strike, Debilitating/Improved Strike, and Hail of Blades -ModUi/&EnableSignatureSpellsRelearn=Enable Wizard signature spells to be prepared every long rest [instead of once at level 20] +ModUi/&EnableSignatureSpellsRelearn=Enable Signature Spells to be prepared every long rest [instead of once at level 20] ModUi/&EnableSorcererMagicalGuidance=Enable Magical Guidance at level 5 ModUi/&EnableSorcererQuickenedAction=Enable Quickened Spell action to allow cast main action spell with quickened metamagic applied ModUi/&EnableSortingDungeonMakerAssets=Enable assets sorting on Dungeon Maker editor @@ -168,8 +170,8 @@ ModUi/&EnableTooltipDistance=Enable showing distance on tooltips when hovering o ModUi/&EnableUnarmedMainAttackAction=Enable the Unarmed Attack action [if actor has weapon in main, is a Monk or has handwraps or gauntlet equipped] ModUi/&EnableUpcastConjureElementalAndFey=Enable upcast of Conjure Elemental and Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Enable variable placeholders on descriptions [use {VARIABLE_NAME} as placeholder] -ModUi/&EnableWizardToLearnScholarAtLevel2=Enable Wizard to learn Scholar at level 2 -ModUi/&EnableWizardToLearnSchoolAtLevel3=Enable Wizard to acquire the School of Magic at level 3 instead of 2 +ModUi/&EnableWizardToLearnScholarAtLevel2=Enable Scholar at level 2 +ModUi/&EnableWizardToLearnSchoolAtLevel3=Enable School of Magic at level 3 instead of 2 ModUi/&EnablesAsiAndFeat=Enable both attribute scores increase and feats selection [instead of an exclusive choice] ModUi/&EncounterPercentageChance=Set random encounters percentage chances ModUi/&Encounters=Encounters @@ -198,7 +200,7 @@ ModUi/&FullyControlConjurations=Fully control conjurations [an ModUi/&Gameplay=Gameplay ModUi/&General=General: ModUi/&GeneralMenu=General -ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Grant Scimitar Weapon Specialization to Bards and Rogues +ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Grant Scimitar Weapon Specialization to Bards and Rogues ModUi/&GridSelectedColor=Change the movement grid color ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Hide exits and teleporters visual effects if not discovered yet ModUi/&HideMonsterHitPoints=Display Monsters' health in steps of 25% / 50% / 75% / 100% instead of exact hit points @@ -250,6 +252,7 @@ ModUi/&Races=Races ModUi/&RecipeCost=Recipe's cost ModUi/&RelicForgeries=Relic Forgeries ModUi/&RemoveAttunementRequirements=Remove attunement requirements [Requires Restart] +ModUi/&RemoveBardSongOfRest=Remove Song of Rest at level 2 ModUi/&RemoveBugVisualModels=Replace spider like models with bear like models in the game [arachnophobia] [Requires Restart] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Remove humanoid filter on Hideous Laughter ModUi/&RemoveRecurringEffectOnEntangle=Only apply Entangle effect at casting time and also force a strength check to break free from the vines diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index b2c74c9a60..623918c114 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -41,6 +41,7 @@ ModUi/&BlindedConditionDontAllowAttackOfOpportunity=No habilites ataques de opor ModUi/&Blueprints=Planos ModUi/&Campaigns=Campañas ModUi/&Category=Categoría +ModUi/&ChangeBardicInspirationDurationToOneHour=Cambiar la duración de Inspiración bárdica a 1 hora en lugar de 10 minutos ModUi/&ChangeDragonbornElementalBreathUsages=Cambiar los usos del aliento elemental de Dragonborn a modificador CON por cada descanso corto ModUi/&ChangeSleetStormToCube=Cambie Tormenta de aguanieve para utilizar un cubo en lugar de un cilindro ModUi/&Changelog=Registro de cambios @@ -60,7 +61,7 @@ ModUi/&CriticalOption1=1: suma el resultado máxim ModUi/&CriticalOption2=2: sigue tirando los dados de daño que obtengan el resultado más alto posible y añádelo al daño total. ModUi/&CriticalOption3=3: Duplica el daño total de tu ataque en lugar de tirar dados adicionales. [(XdY+Z)*2] ModUi/&DisableAutoEquip=Deshabilitar el equipamiento automático de artículos en el inventario -ModUi/&DisableBarbarianBrutalCritical=+ Desactiva también el Crítico brutal en los niveles 9, 13 y 17 +ModUi/&DisableBarbarianBrutalCritical=+ Desactiva también el Crítico brutal en los niveles 9, 13 y 17 ModUi/&DisableCastSpellPreRequisitesOnModFeats=Deshabilitar los requisitos previos para lanzar hechizos en el mod dotes [Requiere reinicio] ModUi/&DisableClassPrerequisitesOnModFeats=Deshabilitar los requisitos previos de nivel en dotes ModUi/&DisableMultilineSpellOffering=Desactivar la oferta de hechizos multilínea en la barra de acción [principalmente para usuarios de controlador que usan héroes que no son multicaster] @@ -102,6 +103,7 @@ ModUi/&EnableBarbarianBrutalStrike=Habilita Golpe brutal ModUi/&EnableBarbarianFightingStyle=Habilitar la opción Estilo de lucha en el nivel 2 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Habilitar el beneficio y desventaja de Ataque imprudente para que finalicen al comienzo del siguiente turno ModUi/&EnableBarbarianRegainOneRageAtShortRest=Permite recuperar un uso de Furia durante un descanso corto en el nivel 7 +ModUi/&EnableBardExpertiseOneLevelBefore=Habilitar Experiencia en los niveles 2 y 9 en lugar de 3 y 10 ModUi/&EnableBardHealingBalladOnLongRest=Habilitar Colegio de la Esperanza Balada curativa en descanso prolongado ModUi/&EnableBetaContent=Habilitar contenido beta [Requiere reinicio] ModUi/&EnableCancelEditOnRightMouseClick=Habilitar acciones de cancelación con clic derecho del mouse @@ -144,20 +146,20 @@ ModUi/&EnableMulticlass=Habilitar multiclase Curar heridas, Palabra de curación, Curar heridas en masa y Palabra de curación en masa ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Imposición de manos como acción adicional ModUi/&EnablePaladinSmiteAsBonusAction=Habilitar Castigar como acción adicional -ModUi/&EnablePaladinSpellCastingAtLevel1=Permite que el Paladín adquiera lanzamiento de hechizos en el nivel 1 en lugar de 2 [OneDnd] +ModUi/&EnablePaladinSpellCastingAtLevel1=Habilitar el lanzamiento de hechizos en el nivel 1 en lugar del 2 ModUi/&EnablePcgRandom=Habilitar un mejor algoritmo generador aleatorio [https://www.pcg-random.org] ModUi/&EnableProneAction=Habilita la acción Caer boca abajo [puedes caer boca abajo sin costo] ModUi/&EnablePullPushOnVerticalDirection=Habilite los efectos de movimiento de empujar y tirar para que funcionen también en el eje arriba/abajo ModUi/&EnableRangerNatureShroudAt10=Habilita la característica Velo de la Naturaleza en el nivel 10 [como acción adicional, puedes volverte invisible mágicamente hasta el comienzo del siguiente turno] -ModUi/&EnableRangerSpellCastingAtLevel1=Habilitar Ranger para adquirir lanzamiento de hechizos en el nivel 1 en lugar de 2 +ModUi/&EnableRangerSpellCastingAtLevel1=Habilitar el lanzamiento de hechizos en el nivel 1 en lugar del 2 ModUi/&EnableRelearnSpells=Habilitar la selección de trucos o hechizos ya aprendidos de otras fuentes ModUi/&EnableRespecAction=Habilitar la acción RESPECT después del descanso [no usar RESPECT durante una sesión multijugador] -ModUi/&EnableRitualOnAllCasters=Habilitar el lanzamiento de Ritual para todos los lanzadores +ModUi/&EnableRitualOnAllCasters=Habilitar el lanzamiento de Ritual para todos los lanzadores ModUi/&EnableRogueCunningStrike=Habilita Golpe astuto y Golpe tortuoso en los niveles 5 y 14 [dejas de usar 1 dado de ataque furtivo para obtener efectos de golpe adicionales] ModUi/&EnableRogueFightingStyle=Habilitar la opción Estilo de lucha en el nivel 2 ModUi/&EnableRogueSteadyAim=Habilita Apunta firme en el nivel 3 [la acción adicional otorga ventaja en tu próxima tirada de ataque en el turno actual si aún no te has movido] ModUi/&EnableRogueStrSaving=Habilita los modificadores de DES o STR de Hoodlum en Golpe astuto/desviado, Golpe debilitante/mejorado y Lluvia de espadas -ModUi/&EnableSignatureSpellsRelearn=Permite que los hechizos característicos del Mago se preparen cada descanso prolongado [en lugar de una vez en el nivel 20] +ModUi/&EnableSignatureSpellsRelearn=Permite que los hechizos exclusivos se preparen cada descanso prolongado [en lugar de una vez en el nivel 20] ModUi/&EnableSorcererMagicalGuidance=Habilitar Guía mágica en el nivel 5 ModUi/&EnableSorcererQuickenedAction=Habilitar la acción Hechizo acelerado para permitir lanzar un hechizo de acción principal con metamagia acelerada aplicada ModUi/&EnableSortingDungeonMakerAssets=Habilitar la clasificación de activos en el editor de Dungeon Maker @@ -169,8 +171,8 @@ ModUi/&EnableTooltipDistance=Habilitar la visualización de la distancia en las ModUi/&EnableUnarmedMainAttackAction=Habilitar la acción Ataque desarmado [si el actor tiene un arma en el personaje principal, es un Monje o tiene vendas o guanteletes equipados] ModUi/&EnableUpcastConjureElementalAndFey=Habilitar la conversión ascendente de Conjurar elemental y Conjurar feérico ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posición de variables en las descripciones [use {VARIABLE_NAME} como marcador de posición] -ModUi/&EnableWizardToLearnScholarAtLevel2=Habilitar Wizard para aprender Scholar en el nivel 2 -ModUi/&EnableWizardToLearnSchoolAtLevel3=Permite que Mago adquiera la escuela de magia en el nivel 3 en lugar de 2 +ModUi/&EnableWizardToLearnScholarAtLevel2=Habilitar Scholar en el nivel 2 +ModUi/&EnableWizardToLearnSchoolAtLevel3=Habilitar Escuela de Magia en el nivel 3 en lugar de 2 ModUi/&EnablesAsiAndFeat=Habilitar tanto el aumento de las puntuaciones de atributos como la selección de dotes [en lugar de una elección exclusiva] ModUi/&EncounterPercentageChance=Establecer porcentajes de posibilidades de encuentros aleatorios ModUi/&Encounters=Encuentros @@ -199,7 +201,7 @@ ModUi/&FullyControlConjurations=Controla completamente los conjuros General: ModUi/&GeneralMenu=General -ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Otorga la especialización en armas Cimitarra a los bardos y a los pícaros +ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Otorga la especialización en armas a los bardos y a los pícaros ModUi/&GridSelectedColor=Cambiar el movimiento color de la cuadrícula ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Ocultar los efectos visuales de las salidas y los teletransportadores si aún no se han descubierto ModUi/&HideMonsterHitPoints=Muestra la salud de los monstruos en pasos de 25% / 50% / 75% / 100% en lugar de puntos de vida exactos. @@ -251,6 +253,7 @@ ModUi/&Races=Razas ModUi/&RecipeCost=Costo de la receta ModUi/&RelicForgeries=Falsificaciones de reliquias ModUi/&RemoveAttunementRequirements=Eliminar requisitos de sintonización [Requiere reinicio] +ModUi/&RemoveBardSongOfRest=Eliminar Canción de descanso en el nivel 2 ModUi/&RemoveBugVisualModels=Reemplaza los modelos tipo araña por modelos tipo oso en el juego. [arachnophobia] [Requiere reinicio] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Eliminar filtro humanoide en Risas espantosas ModUi/&RemoveRecurringEffectOnEntangle=Solo aplica el efecto Enredar en el momento del lanzamiento y también fuerza una prueba de fuerza para liberarte de las enredaderas. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index a3bf4a9356..0e4506e88a 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -40,6 +40,7 @@ ModUi/&BlindedConditionDontAllowAttackOfOpportunity=N'activez aucune attaque d'o ModUi/&Blueprints=Plans ModUi/&Campaigns=Campagnes ModUi/&Category=Catégorie +ModUi/&ChangeBardicInspirationDurationToOneHour=Changez la durée de Inspiration bardique à 1 h au lieu de 10 minutes ModUi/&ChangeDragonbornElementalBreathUsages=Changez les utilisations du souffle élémentaire de Dragonborn en modificateur de CON par repos court ModUi/&ChangeSleetStormToCube=Changez Sleet Storm pour utiliser un cube au lieu d'un cylindre ModUi/&Changelog=Journal des modifications @@ -59,7 +60,7 @@ ModUi/&CriticalOption1=1 : additionnez le résult ModUi/&CriticalOption2=2 : continuez à relancer tous les dés de dégâts qui obtiennent le résultat le plus élevé possible et ajoutez-le au total des dégâts ModUi/&CriticalOption3=3 : doublez les dégâts totaux de votre attaque au lieu de lancer des dés supplémentaires. [(XdY+Z)*2] ModUi/&DisableAutoEquip=Désactiver l'équipement automatique des objets dans l'inventaire -ModUi/&DisableBarbarianBrutalCritical=+ Désactivez également les critiques brutaux aux niveaux 9, 13 et 17 +ModUi/&DisableBarbarianBrutalCritical=+ Désactivez également Brutal Critical aux niveaux 9, 13 et 17 ModUi/&DisableCastSpellPreRequisitesOnModFeats=Désactiver les prérequis de lancement de sorts sur le mod feats [Nécessite un redémarrage] ModUi/&DisableClassPrerequisitesOnModFeats=Désactiver les prérequis de niveau sur les exploits ModUi/&DisableMultilineSpellOffering=Désactiver l'offre de sorts multilignes sur la barre d'action [principalement pour les utilisateurs de contrôleur utilisant des héros non multicasters] @@ -101,6 +102,7 @@ ModUi/&EnableBarbarianBrutalStrike=Activez Frappe brutale ModUi/&EnableBarbarianFightingStyle=Activer le choix du Style de combat au niveau 2 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Activez le buff et le debuff Attaque imprudente pour qu'ils se terminent au début du prochain tour ModUi/&EnableBarbarianRegainOneRageAtShortRest=Permet de récupérer une utilisation de Rage sur un repos court au niveau 7 +ModUi/&EnableBardExpertiseOneLevelBefore=Activer l'Expertise aux niveaux 2 et 9 au lieu de 3 et 10 ModUi/&EnableBardHealingBalladOnLongRest=Activer la Ballade de guérison de College of Hope lors d'un repos prolongé ModUi/&EnableBetaContent=Activer le contenu bêta [Nécessite un redémarrage] ModUi/&EnableCancelEditOnRightMouseClick=Activer les actions d'annulation avec un clic droit de la souris @@ -143,20 +145,20 @@ ModUi/&EnableMulticlass=Activer multiclasse Soin des blessures, Mot de soin, Soin de masse des blessures et Mot de soin de masse ModUi/&EnablePaladinLayOnHandsAsBonusAction=Activer Imposition des mains comme action bonus ModUi/&EnablePaladinSmiteAsBonusAction=Activer Smite comme action bonus -ModUi/&EnablePaladinSpellCastingAtLevel1=Permettre au Paladin d'acquérir le lancement de sorts au niveau 1 au lieu de 2 [OneDnd] +ModUi/&EnablePaladinSpellCastingAtLevel1=Activer le lancement de sorts au niveau 1 au lieu de 2 ModUi/&EnablePcgRandom=Activer un meilleur algorithme de générateur aléatoire [https://www.pcg-random.org] ModUi/&EnableProneAction=Activer l'action Tomber à plat ventre [vous pouvez tomber à plat ventre sans frais] ModUi/&EnablePullPushOnVerticalDirection=Activez les effets de mouvement de poussée et de traction pour qu'ils fonctionnent également sur l'axe haut/bas ModUi/&EnableRangerNatureShroudAt10=Activez la fonction Voile de la nature au niveau 10 [en tant qu'action bonus, vous pouvez devenir invisible par magie jusqu'au début du prochain tour] -ModUi/&EnableRangerSpellCastingAtLevel1=Permettre au Ranger d'acquérir le lancement de sorts au niveau 1 au lieu de 2 +ModUi/&EnableRangerSpellCastingAtLevel1=Activer le lancement de sorts au niveau 1 au lieu de 2 ModUi/&EnableRelearnSpells=Activer la sélection de sorts ou de sorts déjà appris à partir d'autres sources ModUi/&EnableRespecAction=Activer l'action RESPEC après le repos [ne pas utiliser RESPEC pendant une session multijoueur] -ModUi/&EnableRitualOnAllCasters=Activer le lancement de rituel sur tous les lanceurs +ModUi/&EnableRitualOnAllCasters=Activer le lancement de rituel sur tous les lanceurs de sorts ModUi/&EnableRogueCunningStrike=Activez Cunning Strike et Devious Strike aux niveaux 5 et 14 [vous renoncez à 1 dé d'attaque sournoise pour des effets de coup supplémentaires] ModUi/&EnableRogueFightingStyle=Activer le choix du Style de combat au niveau 2 ModUi/&EnableRogueSteadyAim=Activez la Visée constante au niveau 3 [l'action bonus donne un avantage sur votre prochain jet d'attaque dans le tour en cours si vous n'avez pas encore bougé] ModUi/&EnableRogueStrSaving=Activez les modificateurs DEX ou STR de Hoodlum sur Cunning/Durious Strike, Délicieuse/Améliorée Strike et Hail of Blades -ModUi/&EnableSignatureSpellsRelearn=Permettre aux sorts de signature du Sorcier d'être préparés à chaque repos long [au lieu d'une fois au niveau 20] +ModUi/&EnableSignatureSpellsRelearn=Activer les sorts signatures pour qu'ils soient préparés à chaque repos long [au lieu d'une fois au niveau 20] ModUi/&EnableSorcererMagicalGuidance=Activer la guidance magique au niveau 5 ModUi/&EnableSorcererQuickenedAction=Activez l'action Sort accéléré pour permettre de lancer le sort d'action principal avec la métamagie accélérée appliquée ModUi/&EnableSortingDungeonMakerAssets=Activer le tri des ressources sur l'éditeur Dungeon Maker @@ -168,8 +170,8 @@ ModUi/&EnableTooltipDistance=Activer l'affichage de la distance dans les info-bu ModUi/&EnableUnarmedMainAttackAction=Activer l'action Attaque à mains nues [si l'acteur a une arme dans l'arme principale, est un moine ou a des bandages ou un gantelet équipés] ModUi/&EnableUpcastConjureElementalAndFey=Activer la conversion ascendante de Conjure Elemental et Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Activer les espaces réservés aux variables dans les descriptions [utiliser {VARIABLE_NAME} comme espace réservé] -ModUi/&EnableWizardToLearnScholarAtLevel2=Activer Wizard pour apprendre Scholar au niveau 2 -ModUi/&EnableWizardToLearnSchoolAtLevel3=Activer le magicien pour acquérir l'école de magie au niveau 3 au lieu de 2 +ModUi/&EnableWizardToLearnScholarAtLevel2=Activer Scholar au niveau 2 +ModUi/&EnableWizardToLearnSchoolAtLevel3=Activer l'École de magie au niveau 3 au lieu de 2 ModUi/&EnablesAsiAndFeat=Activer à la fois l'augmentation des scores d'attributs et la sélection des exploits [au lieu d'un choix exclusif] ModUi/&EncounterPercentageChance=Définir des pourcentages de chances de rencontres aléatoires ModUi/&Encounters=Rencontres @@ -198,7 +200,7 @@ ModUi/&FullyControlConjurations=Contrôlez entièrement les invocations Général : ModUi/&GeneralMenu=Général -ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Accorder la spécialisation en arme Cimeterre aux bardes et aux voleurs +ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Accorder la spécialisation en arme Cimeterre aux bardes et aux voleurs ModUi/&GridSelectedColor=Changer la couleur de la grille de mouvement ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Masquer les sorties et les effets visuels des téléporteurs s'ils ne sont pas encore découverts ModUi/&HideMonsterHitPoints=Affiche la santé des monstres par paliers de 25 % / 50 % / 75 % / 100 % au lieu des points de vie exacts @@ -250,6 +252,7 @@ ModUi/&Races=Les courses ModUi/&RecipeCost=Coût de la recette ModUi/&RelicForgeries=Contrefaçons de reliques ModUi/&RemoveAttunementRequirements=Supprimer les exigences d'harmonisation [Nécessite un redémarrage] +ModUi/&RemoveBardSongOfRest=Supprimez Chant de repos au niveau 2 ModUi/&RemoveBugVisualModels=Remplacez les modèles ressemblant à des araignées par des modèles ressemblant à des ours dans le jeu [arachnophobie] [Nécessite un redémarrage] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Supprimer le filtre humanoïde sur Hideous Laugher ModUi/&RemoveRecurringEffectOnEntangle=Appliquez uniquement l'effet Enchevêtrement au moment de l'incantation et forcez également un test de force pour vous libérer des vignes diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 43a0ed459a..74ffb5d418 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -40,6 +40,7 @@ ModUi/&BlindedConditionDontAllowAttackOfOpportunity=Non abilitare attacchi di op ModUi/&Blueprints=Progetti ModUi/&Campaigns=Campagne ModUi/&Category=Categoria +ModUi/&ChangeBardicInspirationDurationToOneHour=Modifica la durata di Ispirazione bardica a 1 ora invece di 10 minuti ModUi/&ChangeDragonbornElementalBreathUsages=Cambia l'uso del respiro elementale di Dragonborn in modificatore COS per riposo breve ModUi/&ChangeSleetStormToCube=Cambia Tempesta di nevischio per usare un cubo invece di un cilindro ModUi/&Changelog=Registro delle modifiche @@ -59,7 +60,7 @@ ModUi/&CriticalOption1=1: somma il risultato massi ModUi/&CriticalOption2=2: continua a rilanciare tutti i dadi danno che danno il risultato più alto possibile e aggiungili al danno totale ModUi/&CriticalOption3=3: Raddoppia il danno totale del tuo attacco invece di tirare dadi aggiuntivi. [(XdY+Z)*2] ModUi/&DisableAutoEquip=Disabilita l'equipaggiamento automatico degli oggetti nell'inventario -ModUi/&DisableBarbarianBrutalCritical=+ Disattiva anche Brutal Critical ai livelli 9, 13 e 17 +ModUi/&DisableBarbarianBrutalCritical=+ Disattiva anche Brutal Critical ai livelli 9, 13 e 17 ModUi/&DisableCastSpellPreRequisitesOnModFeats=Disabilita i prerequisiti per lanciare incantesimi sui mod talenti [Richiede riavvio] ModUi/&DisableClassPrerequisitesOnModFeats=Disattiva i prerequisiti di livello per imprese ModUi/&DisableMultilineSpellOffering=Disabilita l'offerta di incantesimi multi-linea sulla barra delle azioni [principalmente per gli utenti controller che usano eroi non multicaster] @@ -101,6 +102,7 @@ ModUi/&EnableBarbarianBrutalStrike=Abilita Colpo Brutale ModUi/&EnableBarbarianFightingStyle=Abilita la scelta Stile di combattimento al livello 2 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Abilita il buff e il debuff Attacco sconsiderato per terminare all'inizio del turno successivo ModUi/&EnableBarbarianRegainOneRageAtShortRest=Abilita il recupero di un utilizzo di Rabbia durante un breve riposo al livello 7 +ModUi/&EnableBardExpertiseOneLevelBefore=Abilita Competenza ai livelli 2 e 9 invece che 3 e 10 ModUi/&EnableBardHealingBalladOnLongRest=Abilita College of Hope Ballata curativa durante il riposo lungo ModUi/&EnableBetaContent=Abilita contenuto beta [Richiede riavvio] ModUi/&EnableCancelEditOnRightMouseClick=Abilita l'annullamento delle azioni con il clic destro del mouse @@ -143,20 +145,20 @@ ModUi/&EnableMulticlass=Abilita multiclasse Cura Ferite, Parola Curativa, Cura Ferite di Massa e Parola Curativa di Massa ModUi/&EnablePaladinLayOnHandsAsBonusAction=Abilita Imposizione delle mani come azione bonus ModUi/&EnablePaladinSmiteAsBonusAction=Abilita Colpisci come azione bonus -ModUi/&EnablePaladinSpellCastingAtLevel1=Abilita Paladino ad acquisire lancio di incantesimi al livello 1 invece che 2 [OneDnd] +ModUi/&EnablePaladinSpellCastingAtLevel1=Abilita lancio di incantesimi al livello 1 invece che 2 ModUi/&EnablePcgRandom=Abilita un algoritmo di generazione casuale migliore [https://www.pcg-random.org] ModUi/&EnableProneAction=Abilita l'azione Cadi prono [puoi cadere prono senza alcun costo] ModUi/&EnablePullPushOnVerticalDirection=Abilita gli effetti di movimento push e pull per funzionare anche sull'asse su/giù ModUi/&EnableRangerNatureShroudAt10=Abilita la funzione Velo della Natura al livello 10 [come azione bonus, puoi diventare magicamente invisibile fino all'inizio del turno successivo] -ModUi/&EnableRangerSpellCastingAtLevel1=Abilita Ranger ad acquisire lancio di incantesimi al livello 1 invece che 2 +ModUi/&EnableRangerSpellCastingAtLevel1=Abilita lancio di incantesimi al livello 1 invece che 2 ModUi/&EnableRelearnSpells=Abilita la selezione di trucchetti o incantesimi già appresi da altre fonti ModUi/&EnableRespecAction=Abilita RESPEC dopo l'azione di riposo [non usare RESPEC durante una sessione multigiocatore] -ModUi/&EnableRitualOnAllCasters=Abilita il lancio di Rituale su tutti i lanciatori +ModUi/&EnableRitualOnAllCasters=Abilita il lancio di Rituale su tutti gli incantatori ModUi/&EnableRogueCunningStrike=Abilita Colpo astuto e Colpo subdolo ai livelli 5 e 14 [rinuncia a 1 dado di attacco furtivo per effetti di colpo aggiuntivi] ModUi/&EnableRogueFightingStyle=Abilita la scelta Stile di combattimento al livello 2 ModUi/&EnableRogueSteadyAim=Abilita Mira Fissa al livello 3 [l'azione bonus fornisce vantaggio al tuo prossimo tiro di attacco nel turno corrente se non ti sei ancora mosso] ModUi/&EnableRogueStrSaving=Abilita i modificatori DEX o STR di Hoodlum su Colpo astuto/subdolo, Colpo debilitante/migliorato e Grandine di lame -ModUi/&EnableSignatureSpellsRelearn=Abilita gli incantesimi distintivi del Mago da preparare a ogni riposo lungo [invece di una volta al livello 20] +ModUi/&EnableSignatureSpellsRelearn=Abilita la preparazione degli incantesimi distintivi a ogni riposo lungo [invece di una volta al livello 20] ModUi/&EnableSorcererMagicalGuidance=Abilita Guida magica al livello 5 ModUi/&EnableSorcererQuickenedAction=Abilita l'azione Incantesimo accelerato per consentire il lancio dell'incantesimo di azione principale con metamagia accelerata applicata ModUi/&EnableSortingDungeonMakerAssets=Abilita l'ordinamento delle risorse nell'editor di Dungeon Maker @@ -168,8 +170,8 @@ ModUi/&EnableTooltipDistance=Abilita la visualizzazione della distanza nei sugge ModUi/&EnableUnarmedMainAttackAction=Abilita l'azione Attacco disarmato [se l'attore ha un'arma nel personaggio principale, è un monaco o ha fasce o guanto equipaggiati] ModUi/&EnableUpcastConjureElementalAndFey=Abilita l'upcast di Evoca Elementale e Evoca Fata ModUi/&EnableVariablePlaceholdersOnTexts=Abilita segnaposto variabili nelle descrizioni [usa {VARIABLE_NAME} come segnaposto] -ModUi/&EnableWizardToLearnScholarAtLevel2=Abilita Wizard per apprendere Scholar al livello 2 -ModUi/&EnableWizardToLearnSchoolAtLevel3=Abilita Wizard ad acquisire la scuola di magia al livello 3 invece che 2 +ModUi/&EnableWizardToLearnScholarAtLevel2=Abilita Studioso al livello 2 +ModUi/&EnableWizardToLearnSchoolAtLevel3=Abilita Scuola di Magia al livello 3 invece che 2 ModUi/&EnablesAsiAndFeat=Abilita sia l'aumento dei punteggi degli attributi che la selezione delle imprese [invece di una scelta esclusiva] ModUi/&EncounterPercentageChance=Imposta le percentuali di probabilità di incontri casuali ModUi/&Encounters=Incontri @@ -198,7 +200,7 @@ ModUi/&FullyControlConjurations=Controllo completo delle evocazioni Generale: ModUi/&GeneralMenu=Generale -ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Concedi la specializzazione in arma Scimitar ai bardi e ai ladri +ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Concedi Scimitar Specializzazione nelle armi a bardi e ladri ModUi/&GridSelectedColor=Cambia il colore della griglia del movimento ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Nascondi gli effetti visivi delle uscite e dei teletrasporti se non sono ancora stati scoperti ModUi/&HideMonsterHitPoints=Visualizza la salute dei mostri in incrementi del 25% / 50% / 75% / 100% invece dei punti ferita esatti @@ -250,6 +252,7 @@ ModUi/&Races=Razze ModUi/&RecipeCost=Costo della ricetta ModUi/&RelicForgeries=Falsificazioni di reliquie ModUi/&RemoveAttunementRequirements=Rimuovi i requisiti di sintonizzazione [Richiede riavvio] +ModUi/&RemoveBardSongOfRest=Rimuovi Canzone del Riposo al livello 2 ModUi/&RemoveBugVisualModels=Sostituisci i modelli simili a ragni con modelli simili a orsi nel gioco [aracnofobia] [Richiede riavvio] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Rimuovi filtro umanoide su Risata orribile ModUi/&RemoveRecurringEffectOnEntangle=Applica l'effetto Intrappolamento solo al momento del lancio e forza anche un controllo di forza per liberarti dai tralci diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 9dc6a8f540..0abe2f354b 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -40,6 +40,7 @@ ModUi/&BlindedConditionDontAllowAttackOfOpportunity=盲目吟遊詩人のインスピレーションの持続時間を10分から1時間に変更 ModUi/&ChangeDragonbornElementalBreathUsages=Dragonborn のエレメンタルブレスの使用量を短い休憩ごとの CON 修正値に変更します ModUi/&ChangeSleetStormToCube=Sleet Storm を、円柱の代わりに立方体を使用するように変更します。 ModUi/&Changelog=変更ログ @@ -59,7 +60,7 @@ ModUi/&CriticalOption1=1: ダメージダイスの ModUi/&CriticalOption2=2: 可能な限り最高の結果を出したダメージダイスを再度振り直し、合計ダメージに加えます。 ModUi/&CriticalOption3=3: 追加のサイコロを振る代わりに、攻撃の合計ダメージを 2 倍にします。[(XdY+Z)*2] ModUi/&DisableAutoEquip=インベントリ内のアイテムの自動装備を無効にする -ModUi/&DisableBarbarianBrutalCritical=+ レベル 9、13、17 で Brutal Critical も無効にします +ModUi/&DisableBarbarianBrutalCritical=+ レベル 9、13、17 で Brutal Critical も無効にします ModUi/&DisableCastSpellPreRequisitesOnModFeats=モッド feats の呪文詠唱の前提条件を無効にします [再起動が必要] ModUi/&DisableClassPrerequisitesOnModFeats=特技のレベル前提条件を無効にする ModUi/&DisableMultilineSpellOffering=アクションバーでの複数行の呪文の提供を無効にする [主に非マルチキャスターヒーローを使用するコントローラーユーザー向け] @@ -101,6 +102,7 @@ ModUi/&EnableBarbarianBrutalStrike=レベル9、13、17で残忍 ModUi/&EnableBarbarianFightingStyle=レベル2で戦闘スタイルの選択を有効にする ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=無謀な攻撃の強化と弱体化を有効にして、次のターンの開始時に終了します ModUi/&EnableBarbarianRegainOneRageAtShortRest=レベル 7 で、短い休憩中に 1 回の Rage 使用を回復できるようになります。 +ModUi/&EnableBardExpertiseOneLevelBefore=エキスパートをレベル3と10ではなくレベル2と9で有効にする ModUi/&EnableBardHealingBalladOnLongRest=長い休息時に希望の大学の癒しのバラードを有効にする ModUi/&EnableBetaContent=ベータ版コンテンツを有効にする [再起動が必要] ModUi/&EnableCancelEditOnRightMouseClick=マウスの右クリックでキャンセルアクションを有効にする @@ -143,20 +145,20 @@ ModUi/&EnableMulticlass=マルチクラスを有効にす ModUi/&EnableOneDndHealingSpellsBuf=治癒の傷、治癒の言葉、大量治癒の傷、大量治癒の言葉に治癒ダイスバフを有効にします ModUi/&EnablePaladinLayOnHandsAsBonusAction=ボーナスアクションとして手を置くを有効にする ModUi/&EnablePaladinSmiteAsBonusAction=ボーナスアクションとしてスマイトを有効にする -ModUi/&EnablePaladinSpellCastingAtLevel1=パラディンがレベル 2 ではなくレベル 1 で 呪文詠唱 を獲得できるようにします [OneDnd] +ModUi/&EnablePaladinSpellCastingAtLevel1=呪文発動をレベル2ではなくレベル1で有効にする ModUi/&EnablePcgRandom=より優れたランダム生成アルゴリズムを有効にする [https://www.pcg-random.org] ModUi/&EnableProneAction=うつ伏せになるアクションを有効にする [コストをかけずにうつ伏せになることができます] ModUi/&EnablePullPushOnVerticalDirection=プッシュとプルのモーション効果を上下軸でも有効にします ModUi/&EnableRangerNatureShroudAt10=レベル 10 で 自然のベール 機能を有効にします [ボーナス アクションとして、次のターンの開始時まで魔法で透明になることができます] -ModUi/&EnableRangerSpellCastingAtLevel1=レンジャーがレベル2ではなくレベル1で呪文詠唱を獲得できるようにします +ModUi/&EnableRangerSpellCastingAtLevel1=呪文発動をレベル2ではなくレベル1で有効にする ModUi/&EnableRelearnSpells=他のソースからすでに学習したキャントリップや呪文を選択できるようにする ModUi/&EnableRespecAction=休憩アクション後に RESPEC を有効にします [マルチプレイヤーセッション中は RESPEC を使用しないでください] -ModUi/&EnableRitualOnAllCasters=すべてのキャスター儀式の詠唱を有効にする +ModUi/&EnableRitualOnAllCasters=すべてのキャスターに儀式の詠唱を有効にする ModUi/&EnableRogueCunningStrike=レベル 5 と 14 で 狡猾な一撃 と 邪悪な一撃 を有効にします [追加のヒット効果を得るために、スニーク アタック ダイスを 1 つ放棄します] ModUi/&EnableRogueFightingStyle=レベル2で戦闘スタイルの選択を有効にする ModUi/&EnableRogueSteadyAim=レベル 3 で Steady Aim を有効にします [ボーナス アクションにより、まだ移動していない場合、現在のターンの次の攻撃ロールにアドバンテージが与えられます] ModUi/&EnableRogueStrSaving=狡猾/悪意ある一撃衰弱/強化一撃ヘイル オブ ブレード悪党 の DEX または STR 修飾子を有効にします -ModUi/&EnableSignatureSpellsRelearn=ウィザードのシグネチャー スペルを、大休憩ごとに準備できるようにします [レベル 20 で 1 回ではなく] +ModUi/&EnableSignatureSpellsRelearn=シグネチャー スペル を、長い休憩ごとに準備できるようにします [レベル 20 で 1 回ではなく] ModUi/&EnableSorcererMagicalGuidance=レベル5で魔法のガイダンスを有効にする ModUi/&EnableSorcererQuickenedAction=クイック呪文アクションを有効にすると、クイック呪文メタマジックを適用したメインアクション呪文をキャストできるようになります。 ModUi/&EnableSortingDungeonMakerAssets=ダンジョンメーカーエディタでアセットの並べ替えを有効にする @@ -168,8 +170,8 @@ ModUi/&EnableTooltipDistance=戦闘中のキャラクターにマウスを移動 ModUi/&EnableUnarmedMainAttackAction=素手攻撃アクションを有効にする [アクターがメインに武器を持っているか、モンクを持っているか、ハンドラップまたはガントレットを装備している場合] ModUi/&EnableUpcastConjureElementalAndFey=エレメンタル召喚とフェイ召喚のアップキャストを有効にする ModUi/&EnableVariablePlaceholdersOnTexts=説明に変数プレースホルダーを有効にする [プレースホルダーとして {VARIABLE_NAME} を使用する] -ModUi/&EnableWizardToLearnScholarAtLevel2=ウィザードがレベル2で学者を習得できるようにする -ModUi/&EnableWizardToLearnSchoolAtLevel3=ウィザードがレベル2ではなくレベル3で魔法の学校を取得できるようにします +ModUi/&EnableWizardToLearnScholarAtLevel2=レベル2で学者を有効にする +ModUi/&EnableWizardToLearnSchoolAtLevel3=魔法学校をレベル2ではなくレベル3で有効にする ModUi/&EnablesAsiAndFeat=属性スコアの増加と 特技 の選択の両方を有効にします [排他的選択の代わりに] ModUi/&EncounterPercentageChance=ランダムエンカウントの確率を設定する ModUi/&Encounters=出会い @@ -198,7 +200,7 @@ ModUi/&FullyControlConjurations=召喚を完全に制御します 一般: ModUi/&GeneralMenu=一般的な -ModUi/&GrantScimitarSpecializationToBarkMonkRogue=吟遊詩人と盗賊にシミターの武器特化を付与します +ModUi/&GrantScimitarSpecializationToBarkMonkRogue=吟遊詩人盗賊にシミターの武器特化を付与します ModUi/&GridSelectedColor=動きのグリッドの色を変更します ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=まだ発見されていない場合は出口とテレポーターの視覚効果を非表示にします ModUi/&HideMonsterHitPoints=モンスターの体力を正確なヒットポイントではなく、25% / 50% / 75% / 100% の単位で表示します。 @@ -250,6 +252,7 @@ ModUi/&Races=レース ModUi/&RecipeCost=レシピのコスト ModUi/&RelicForgeries=遺物の偽造 ModUi/&RemoveAttunementRequirements=調整要件を削除します [再起動が必要です] +ModUi/&RemoveBardSongOfRest=レベル2で安息の歌を削除します ModUi/&RemoveBugVisualModels=ゲーム内のクモのようなモデルをクマのようなモデルに置き換えます [クモ恐怖症] [再起動が必要] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Hideous Laughter のヒューマノイド フィルターを削除します ModUi/&RemoveRecurringEffectOnEntangle=絡みつく効果は詠唱時にのみ適用され、蔓から逃れるには筋力チェックも強制される。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 17dfa79f4c..5775830eff 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -40,6 +40,7 @@ ModUi/&BlindedConditionDontAllowAttackOfOpportunity=눈이 멀었 ModUi/&Blueprints=청사진 ModUi/&Campaigns=캠페인 ModUi/&Category=범주 +ModUi/&ChangeBardicInspirationDurationToOneHour=바드 영감 지속 시간을 10분 대신 1시간으로 변경 ModUi/&ChangeDragonbornElementalBreathUsages=드래곤본 원소 숨결 사용을 짧은 휴식당 CON 수정치로 변경 ModUi/&ChangeSleetStormToCube=눈보라 폭풍을 실린더 대신 큐브를 사용하도록 변경합니다. ModUi/&Changelog=변경 로그 @@ -59,7 +60,7 @@ ModUi/&CriticalOption1=1: 데미지 주사위의 ModUi/&CriticalOption2=2: 가능한 가장 높은 결과가 나오는 모든 데미지 주사위를 계속 다시 굴려 총 데미지에 추가합니다. ModUi/&CriticalOption3=3: 추가 주사위를 굴리는 대신 공격의 총 데미지를 두 배로 늘립니다. [(XdY+Z)*2] ModUi/&DisableAutoEquip=인벤토리에 있는 아이템의 자동 장착을 비활성화합니다. -ModUi/&DisableBarbarianBrutalCritical=+ 레벨 9, 13, 17에서 잔혹한 치명타도 비활성화합니다. +ModUi/&DisableBarbarianBrutalCritical=+ 레벨 9, 13, 17에서 잔혹한 치명타도 비활성화합니다. ModUi/&DisableCastSpellPreRequisitesOnModFeats=특기 모드에서 주문 시전 전제 조건 비활성화 [재시작 필요] ModUi/&DisableClassPrerequisitesOnModFeats=특기에 레벨 전제 조건 비활성화 ModUi/&DisableMultilineSpellOffering=액션 바에서 다중 줄 주문 제공 비활성화 [주로 멀티캐스터 영웅을 사용하지 않는 컨트롤러 사용자를 위해] @@ -101,6 +102,7 @@ ModUi/&EnableBarbarianBrutalStrike=레벨 9, 13, 17에서 잔혹 ModUi/&EnableBarbarianFightingStyle=레벨 2에서 격투 스타일 선택 가능 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=다음 턴 시작 시 무모한 공격 버프와 디버프가 완료되도록 활성화합니다. ModUi/&EnableBarbarianRegainOneRageAtShortRest=7레벨에서 짧은 휴식 시간 동안 격노 한 번 회복 가능 +ModUi/&EnableBardExpertiseOneLevelBefore=레벨 3과 10 대신 레벨 2와 9에서 전문성을 활성화합니다. ModUi/&EnableBardHealingBalladOnLongRest=긴 휴식 시 College of Hope 힐링 발라드 활성화 ModUi/&EnableBetaContent=베타 콘텐츠 활성화 [재시작 필요] ModUi/&EnableCancelEditOnRightMouseClick=마우스 오른쪽 클릭으로 취소 작업 활성화 @@ -143,20 +145,20 @@ ModUi/&EnableMulticlass=다중클래스 활성화 < ModUi/&EnableOneDndHealingSpellsBuf=상처 치료, 치유의 말씀, 대량 상처 치료, 대량 치유의 말씀에 치유 주사위 버프를 활성화합니다. ModUi/&EnablePaladinLayOnHandsAsBonusAction=안수를 보너스 액션으로 활성화합니다. ModUi/&EnablePaladinSmiteAsBonusAction=Smite를 보너스 액션으로 활성화합니다. -ModUi/&EnablePaladinSpellCastingAtLevel1=성기사가 레벨 2가 아닌 레벨 1에서 주문 시전 능력을 획득할 수 있도록 합니다 [OneDnd] +ModUi/&EnablePaladinSpellCastingAtLevel1=레벨 2 대신 레벨 1에서 주문 시전을 활성화합니다. ModUi/&EnablePcgRandom=더 나은 난수 생성 알고리즘을 활성화하세요 [https://www.pcg-random.org] ModUi/&EnableProneAction=엎드려 넘어짐 동작을 활성화하세요 [비용 없이 엎드려 넘어질 수 있습니다] ModUi/&EnablePullPushOnVerticalDirection=위/아래 축에서도 푸시 및 풀 모션 효과를 작동하도록 설정 ModUi/&EnableRangerNatureShroudAt10=레벨 10에서 자연의 베일 기능을 활성화합니다. [보너스 액션으로 다음 턴이 시작될 때까지 마법으로 투명해질 수 있습니다.] -ModUi/&EnableRangerSpellCastingAtLevel1=레인저가 레벨 2가 아닌 레벨 1에서 주문 시전 능력을 획득할 수 있도록 합니다. +ModUi/&EnableRangerSpellCastingAtLevel1=레벨 2 대신 레벨 1에서 주문 시전을 활성화합니다. ModUi/&EnableRelearnSpells=다른 출처에서 이미 배운 주문이나 주문 선택 가능 ModUi/&EnableRespecAction=휴식 동작 후 RESPEC 활성화 [멀티플레이어 세션 동안 RESPEC 사용하지 마세요] -ModUi/&EnableRitualOnAllCasters=모든 캐스터에게 의식 주문을 활성화합니다. +ModUi/&EnableRitualOnAllCasters=모든 시전자에 의식 시전 활성화 ModUi/&EnableRogueCunningStrike=레벨 5와 14에서 교활한 일격과 사악한 일격을 활성화합니다. [추가 적중 효과를 위해 몰래 공격 주사위 1개를 포기합니다] ModUi/&EnableRogueFightingStyle=레벨 2에서 격투 스타일 선택 가능 ModUi/&EnableRogueSteadyAim=레벨 3에서 안정적인 조준을 활성화합니다. [현재 턴에서 아직 이동하지 않았다면 다음 공격 굴림에 보너스 액션이 유리해집니다.] ModUi/&EnableRogueStrSaving=교활한/사악한 일격, 약화시키는/향상된 일격, 칼날 우박후드럼 DEX 또는 STR 수정치를 활성화합니다. -ModUi/&EnableSignatureSpellsRelearn=마법사 고유 주문을 긴 휴식마다 준비할 수 있도록 합니다. [레벨 20에서 한 번만] +ModUi/&EnableSignatureSpellsRelearn=긴 휴식마다 특징 주문을 준비할 수 있게 합니다. [레벨 20에서 한 번만] ModUi/&EnableSorcererMagicalGuidance=레벨 5에서 마법의 안내를 활성화합니다. ModUi/&EnableSorcererQuickenedAction=빠른 주문 동작을 활성화하여 빠른 메타매직이 적용된 주요 동작 주문을 시전할 수 있습니다. ModUi/&EnableSortingDungeonMakerAssets=Dungeon Maker 편집기에서 자산 정렬 활성화 @@ -168,8 +170,8 @@ ModUi/&EnableTooltipDistance=전투 중 캐릭터 위에 마우스를 올려 놓 ModUi/&EnableUnarmedMainAttackAction=비무장 공격 동작 활성화 [액터가 기본 무기를 장착하고 있거나, 수도사이거나, 핸드랩 또는 건틀릿을 장착한 경우] ModUi/&EnableUpcastConjureElementalAndFey=원소 소환과 요정 소환의 업캐스트를 활성화합니다. ModUi/&EnableVariablePlaceholdersOnTexts=설명에 변수 플레이스홀더 활성화 [플레이스홀더로 {VARIABLE_NAME} 사용] -ModUi/&EnableWizardToLearnScholarAtLevel2=마법사를 활성화하여 레벨 2에서 학자를 배우세요 -ModUi/&EnableWizardToLearnSchoolAtLevel3=마법사가 레벨 2가 아닌 레벨 3에서 마법 학교를 획득할 수 있도록 설정 +ModUi/&EnableWizardToLearnScholarAtLevel2=레벨 2에서 학자 활성화 +ModUi/&EnableWizardToLearnSchoolAtLevel3=마법 학교를 2레벨 대신 3레벨로 활성화합니다. ModUi/&EnablesAsiAndFeat=속성 점수 증가와 특기 선택을 모두 활성화합니다. [독점 선택 대신] ModUi/&EncounterPercentageChance=무작위 만남 확률 설정 ModUi/&Encounters=만남 @@ -198,7 +200,7 @@ ModUi/&FullyControlConjurations=[동물, 정령 등]일반: ModUi/&GeneralMenu=일반적인 -ModUi/&GrantScimitarSpecializationToBarkMonkRogue=바드와 도적에게 무기 전문화를 부여합니다. +ModUi/&GrantScimitarSpecializationToBarkMonkRogue=바드도적에게 무기 전문화를 부여합니다. ModUi/&GridSelectedColor=움직임 변경 격자 색상 ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=아직 발견되지 않았다면 출구와 텔레포터 시각 효과를 숨깁니다. ModUi/&HideMonsterHitPoints=정확한 체력 대신 25% / 50% / 75% / 100% 단계로 몬스터의 체력을 표시합니다. @@ -250,6 +252,7 @@ ModUi/&Races=종족 ModUi/&RecipeCost=레시피 비용 ModUi/&RelicForgeries=유물 위조 ModUi/&RemoveAttunementRequirements=조율 요구 사항 제거 [재시작 필요] +ModUi/&RemoveBardSongOfRest=레벨 2에서 휴식의 노래를 제거합니다. ModUi/&RemoveBugVisualModels=게임에서 거미와 유사한 모델을 곰과 유사한 모델로 교체 [거미공포증] [재시작 필요] ModUi/&RemoveHumanoidFilterOnHideousLaughter=끔찍한 웃음에서 인간형 필터를 제거하세요 ModUi/&RemoveRecurringEffectOnEntangle=시전 시에만 얽힘 효과를 적용하고 덩굴에서 벗어나기 위해 힘 검사를 강제로 시행합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 2bc7efcee3..c7624fbefe 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -40,6 +40,7 @@ ModUi/&BlindedConditionDontAllowAttackOfOpportunity=Não habilite ataques de opo ModUi/&Blueprints=Projetos ModUi/&Campaigns=Campanhas ModUi/&Category=Categoria +ModUi/&ChangeBardicInspirationDurationToOneHour=Alterar a duração de Inspiração Bárdica para 1 hora em vez de 10 minutos ModUi/&ChangeDragonbornElementalBreathUsages=Alterar usos de sopro elemental de Dragonborn para modificador CON por descanso curto ModUi/&ChangeSleetStormToCube=Alterar Sleet Storm para usar um cubo em vez de um cilindro ModUi/&Changelog=Registro de alterações @@ -59,7 +60,7 @@ ModUi/&CriticalOption1=1: some o resultado máximo ModUi/&CriticalOption2=2: continue rolando novamente todos os dados de dano que rolarem o maior resultado possível e adicione-os ao dano total ModUi/&CriticalOption3=3: Duplique o dano total do seu ataque em vez de rolar dados adicionais. [(XdY+Z)*2] ModUi/&DisableAutoEquip=Desabilitar equipamento automático de itens no inventário -ModUi/&DisableBarbarianBrutalCritical=+ Também desabilite Brutal Critical nos níveis 9, 13 e 17 +ModUi/&DisableBarbarianBrutalCritical=+ Também desabilite Brutal Critical nos níveis 9, 13 e 17 ModUi/&DisableCastSpellPreRequisitesOnModFeats=Desabilitar pré-requisitos de conjuração de magias em talentos do mod [Requer reinicialização] ModUi/&DisableClassPrerequisitesOnModFeats=Desabilitar pré-requisitos de nível em talentos ModUi/&DisableMultilineSpellOffering=Desabilitar oferta de magia multi-linha na barra de ação [principalmente para usuários de controle que usam heróis não multicaster] @@ -101,6 +102,7 @@ ModUi/&EnableBarbarianBrutalStrike=Habilitar Golpe Brutal ModUi/&EnableBarbarianFightingStyle=Habilitar a escolha Estilo de luta no nível 2 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Habilitar o bônus e o debuff Ataque Reckless para terminar no início do próximo turno ModUi/&EnableBarbarianRegainOneRageAtShortRest=Habilitar recuperar um uso de Fúria durante um descanso curto no nível 7 +ModUi/&EnableBardExpertiseOneLevelBefore=Habilitar Expertise nos níveis 2 e 9 em vez de 3 e 10 ModUi/&EnableBardHealingBalladOnLongRest=Habilitar College of Hope Healing Ballad em descanso longo ModUi/&EnableBetaContent=Habilitar conteúdo beta [Requer reinicialização] ModUi/&EnableCancelEditOnRightMouseClick=Habilitar ações de cancelamento com clique direito do mouse @@ -143,20 +145,20 @@ ModUi/&EnableMulticlass=Habilitar multiclasse Curar Ferimentos, Palavra de Cura, Curar Ferimentos em Massa e Palavra de Cura em Massa ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Impor as Mãos como ação bônus ModUi/&EnablePaladinSmiteAsBonusAction=Habilitar Smite como ação bônus -ModUi/&EnablePaladinSpellCastingAtLevel1=Habilitar Paladino a adquirir conjuração de magias no nível 1 em vez de 2 [OneDnd] +ModUi/&EnablePaladinSpellCastingAtLevel1=Habilitar conjuração de feitiços no nível 1 em vez de 2 ModUi/&EnablePcgRandom=Habilitar um algoritmo de gerador aleatório melhor [https://www.pcg-random.org] ModUi/&EnableProneAction=Habilite a ação Cair de bruços [você pode cair de bruços sem nenhum custo] ModUi/&EnablePullPushOnVerticalDirection=Habilitar efeitos de movimento de empurrar e puxar para também funcionarem no eixo para cima/baixo ModUi/&EnableRangerNatureShroudAt10=Habilite o recurso Véu da Natureza no nível 10 [como uma ação bônus, você pode magicamente ficar invisível até o início do próximo turno] -ModUi/&EnableRangerSpellCastingAtLevel1=Habilitar Ranger a adquirir conjuração no nível 1 em vez de 2 +ModUi/&EnableRangerSpellCastingAtLevel1=Habilitar conjuração de feitiços no nível 1 em vez de 2 ModUi/&EnableRelearnSpells=Habilitar seleção de truques ou magias já aprendidas de outras fontes ModUi/&EnableRespecAction=Habilitar RESPEC após a ação de descanso [não usar RESPEC durante uma sessão multijogador] -ModUi/&EnableRitualOnAllCasters=Habilitar a conjuração de Ritual em todos os conjuradores +ModUi/&EnableRitualOnAllCasters=Habilitar a conjuração de Ritual em todos os conjuradores ModUi/&EnableRogueCunningStrike=Habilite Golpe Astuto e Golpe Desonesto nos níveis 5 e 14 [você deixa de lado 1 dado de ataque furtivo para efeitos de acerto adicionais] ModUi/&EnableRogueFightingStyle=Habilitar a escolha Estilo de luta no nível 2 ModUi/&EnableRogueSteadyAim=Habilite Miração Firme no nível 3 [ação bônus dá vantagem na sua próxima jogada de ataque no turno atual se você ainda não se moveu] ModUi/&EnableRogueStrSaving=Habilitar modificadores de DEX ou FOR de Hoodlum em Cunning/Devious Strike, Debilitating/Improved Strike e Hail of Blades -ModUi/&EnableSignatureSpellsRelearn=Habilitar que as magias de assinatura do Mago sejam preparadas a cada descanso longo [em vez de uma vez no nível 20] +ModUi/&EnableSignatureSpellsRelearn=Habilitar Feitiços de Assinatura para serem preparados a cada descanso longo [em vez de uma vez no nível 20] ModUi/&EnableSorcererMagicalGuidance=Habilitar Orientação Mágica no nível 5 ModUi/&EnableSorcererQuickenedAction=Habilitar ação Feitiço Acelerado para permitir conjurar feitiço de ação principal com metamagia acelerada aplicada ModUi/&EnableSortingDungeonMakerAssets=Habilitar classificação de ativos no editor do Dungeon Maker @@ -168,8 +170,8 @@ ModUi/&EnableTooltipDistance=Habilitar a exibição da distância nas dicas de f ModUi/&EnableUnarmedMainAttackAction=Habilitar a ação Ataque Desarmado [se o ator tiver arma principal, for um Monge ou tiver bandanas ou manoplas equipadas] ModUi/&EnableUpcastConjureElementalAndFey=Habilitar upcast de Conjure Elemental e Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posição variáveis em descrições [usar {VARIABLE_NAME} como marcador de posição] -ModUi/&EnableWizardToLearnScholarAtLevel2=Habilitar Wizard para aprender Scholar no nível 2 -ModUi/&EnableWizardToLearnSchoolAtLevel3=Permitir que Wizard adquira a escola de magia no nível 3 em vez de 2 +ModUi/&EnableWizardToLearnScholarAtLevel2=Habilitar Scholar no nível 2 +ModUi/&EnableWizardToLearnSchoolAtLevel3=Habilitar Escola de Magia no nível 3 em vez de 2 ModUi/&EnablesAsiAndFeat=Habilitar aumento de pontuação de atributos e seleção de talentos [em vez de uma escolha exclusiva] ModUi/&EncounterPercentageChance=Defina chances percentuais de encontros aleatórios ModUi/&Encounters=Encontros @@ -198,7 +200,7 @@ ModUi/&FullyControlConjurations=Controle total de conjurações Geral: ModUi/&GeneralMenu=Em geral -ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Conceda Especialização em Arma Cimitarra para Bardos e Ladinos +ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Conceda Especialização em Armas de Cimitarra para Bardos e Ladinos ModUi/&GridSelectedColor=Alterar o movimento cor da grade ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Ocultar saídas e efeitos visuais de teletransporte se ainda não foram descobertos ModUi/&HideMonsterHitPoints=Exibir a saúde dos monstros em etapas de 25% / 50% / 75% / 100% em vez de pontos de vida exatos @@ -250,6 +252,7 @@ ModUi/&Races=Corridas ModUi/&RecipeCost=Custo da receita ModUi/&RelicForgeries=Falsificações de relíquias ModUi/&RemoveAttunementRequirements=Remover requisitos de sintonização [Requer reinicialização] +ModUi/&RemoveBardSongOfRest=Remova Canção do Descanso no nível 2 ModUi/&RemoveBugVisualModels=Substitua modelos semelhantes a aranhas por modelos semelhantes a ursos no jogo [aracnofobia] [Requer reinicialização] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Remover filtro humanoide em Risada Hedionda ModUi/&RemoveRecurringEffectOnEntangle=Aplique o efeito Entangle somente no momento do lançamento e também force um teste de força para se libertar das videiras diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 14b1a845c2..6e4a8ebe51 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -40,6 +40,7 @@ ModUi/&BlindedConditionDontAllowAttackOfOpportunity=Отключить атак ModUi/&Blueprints=Чертежи ModUi/&Campaigns=Кампании ModUi/&Category=Категория +ModUi/&ChangeBardicInspirationDurationToOneHour=Измените длительность Бардского вдохновения на 1 час вместо 10 минут. ModUi/&ChangeDragonbornElementalBreathUsages=Изменить количество использований Драконорождёнными стихийного дыхания на модификатор ТЕЛ до короткого отдыха ModUi/&ChangeSleetStormToCube=Использовать для Метели куб вместо цилиндра ModUi/&Changelog=Список изменений @@ -59,7 +60,7 @@ ModUi/&CriticalOption1=1: суммирует ма ModUi/&CriticalOption2=2: продолжает кидать кость урона, на которой выпало максимальное значение, и добавляет его к урону ModUi/&CriticalOption3=3: полностью удваивает урон вместо бросания дополнительных костей. [(XdY+Z)*2] ModUi/&DisableAutoEquip=Отключить автонадевание предметов в инвентаре -ModUi/&DisableBarbarianBrutalCritical=+ Также отключить Сильный критический удар на уровнях 9, 13 и 17 +ModUi/&DisableBarbarianBrutalCritical=+ Также отключите Brutal Critical на уровнях 9, 13 и 17 ModUi/&DisableCastSpellPreRequisitesOnModFeats=Отключить обязательные условия наложения заклинаний для черт из этого мода [Необходим перезапуск] ModUi/&DisableClassPrerequisitesOnModFeats=Отключить требования по уровню для черт ModUi/&DisableMultilineSpellOffering=Отключить многострочное отображение заклинаний на панели действий [в первую очередь для пользователей контроллеров, играющих за персонажей, не являющихся мультикастерами] @@ -101,6 +102,7 @@ ModUi/&EnableBarbarianBrutalStrike=Включить Жесток ModUi/&EnableBarbarianFightingStyle=Включить выбор Боевого стиля на уровне 2 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Включить завершение эффектов Безрассудной атаки в начале следующего хода ModUi/&EnableBarbarianRegainOneRageAtShortRest=Включить на уровне 7 возможность восстанавливать один заряд Ярости за короткий отдых +ModUi/&EnableBardExpertiseOneLevelBefore=Включить Экспертизу на уровнях 2 и 9 вместо 3 и 10 ModUi/&EnableBardHealingBalladOnLongRest=Включить Бардам коллегии надежды работу умения Целительная баллада при длительном отдыхе ModUi/&EnableBetaContent=Включить бета-контент [Необходим перезапуск] ModUi/&EnableCancelEditOnRightMouseClick=Включить отмену действия правым кликом мыши @@ -143,20 +145,20 @@ ModUi/&EnableMulticlass=Включить мультикласси ModUi/&EnableOneDndHealingSpellsBuf=Включить улучшение костей лечения для Лечения ран, Лечащего слова, Множественного лечения ран и Множественного лечащего слова [OneDnd] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Включить Наложение рук бонусным действием [OneDnd] ModUi/&EnablePaladinSmiteAsBonusAction=Включить Кару бонусным действием [OneDnd] -ModUi/&EnablePaladinSpellCastingAtLevel1=Включить Паладину возможность наложения заклинаний на 1-м уровне вместо 2-го [OneDnd] +ModUi/&EnablePaladinSpellCastingAtLevel1=Включить заклинание на уровне 1 вместо 2 ModUi/&EnablePcgRandom=Включить улучшенный алгоритм генерации случайных чисел [https://www.pcg-random.org] ModUi/&EnableProneAction=Включить действие Упасть ничком [вы можете упасть ничком без затрат каких-либо действий] ModUi/&EnablePullPushOnVerticalDirection=Включить работу эффектов толкания и притяжения по вертикальным осям ModUi/&EnableRangerNatureShroudAt10=Включить умение Природная завеса на уровне 10 [бонусным действием вы можете волшебным образом стать невидимым до начала следующего хода] -ModUi/&EnableRangerSpellCastingAtLevel1=Включить Следопыту возможность наложения заклинаний на 1-м уровне вместо 2-го [OneDnd] +ModUi/&EnableRangerSpellCastingAtLevel1=Включить заклинание на уровне 1 вместо 2 ModUi/&EnableRelearnSpells=Включить возможность выбирать заговоры или заклинания, уже известные из других источников ModUi/&EnableRespecAction=Включить возможность РЕСПЕКа после отдыха [не используйте РЕСПЕК в многопользовательских сессиях] -ModUi/&EnableRitualOnAllCasters=Включить ритуальное заклинание для всех заклинателей +ModUi/&EnableRitualOnAllCasters=Включить Ритуал для всех заклинателей ModUi/&EnableRogueCunningStrike=Включить умения Хитрого удара и Коварного удара на уровнях 5 и 14 соответственно [вы отказываетесь от 1 кости скрытой атаки для применения дополнительных эффектов] ModUi/&EnableRogueFightingStyle=Включить выбор Боевого стиля на уровне 2 ModUi/&EnableRogueSteadyAim=Включить Точное прицеливание на уровне 3 [бонусным действием даёт преимущество на следующий бросок атаки в текущем ходу, если вы ещё не перемещались] ModUi/&EnableRogueStrSaving=Включить модификаторы DEX или STR Hoodlum для Cunning/Devious Strike, Debilitating/Improved Strike и Hail of Blades -ModUi/&EnableSignatureSpellsRelearn=Включить Волшебникам подготовку фирменных заклинаний после каждого продолжительного отдыха [вместо того, чтобы выбирать их один раз на 20-м уровне] +ModUi/&EnableSignatureSpellsRelearn=Включить подготовку фирменных заклинаний при каждом продолжительном отдыхе [вместо одного раза на уровне 20] ModUi/&EnableSorcererMagicalGuidance=Включить Волшебное указание на уровне 5 ModUi/&EnableSorcererQuickenedAction=Включить действие Ускоренное заклинание, позволяющее накладывать заклинание основного действия с применением метамагии Ускоренного заклинания. ModUi/&EnableSortingDungeonMakerAssets=Включить сортировку ассетов в редакторе Создателя Подземелий @@ -168,8 +170,8 @@ ModUi/&EnableTooltipDistance=Включить отображение расст ModUi/&EnableUnarmedMainAttackAction=Включить действие Безоружная атака [если персонаж держит оружие в основной руке и он Монах, или если он использует Обмотки или Перчатки] ModUi/&EnableUpcastConjureElementalAndFey=Включить возможность накладывать на высоких уровнях Призыв элементаля и Призыв феи ModUi/&EnableVariablePlaceholdersOnTexts=Включить заглушки для переменных описаний [использовать {VARIABLE_NAME} в качесте заглушки] -ModUi/&EnableWizardToLearnScholarAtLevel2=Разрешить Мастеру изучать Ученого на уровне 2 -ModUi/&EnableWizardToLearnSchoolAtLevel3=Включить Волшебнику изучение магических традиций на 3-м уровне вместо 2-го [OneDnd] +ModUi/&EnableWizardToLearnScholarAtLevel2=Включить Академию на уровне 2 +ModUi/&EnableWizardToLearnSchoolAtLevel3=Включить Школу магии на уровне 3 вместо 2 ModUi/&EnablesAsiAndFeat=Включить возможность и повышать характеристики, и выбирать черту одновременно [вместо того, чтобы делать выбор между этими вариантами] ModUi/&EncounterPercentageChance=Вероятность случайных событий в процентах ModUi/&Encounters=События @@ -198,7 +200,7 @@ ModUi/&FullyControlConjurations=Полностью контролировать ModUi/&Gameplay=Игровой процесс ModUi/&General=Основные: ModUi/&GeneralMenu=Основные -ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Дать Специализацию на оружии скимитаров Бардам и Плутам +ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Предоставить «Специализацию на оружии» «Скимитар» Бардам и Разбойникам ModUi/&GridSelectedColor=Изменить цвет сетки перемещения ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Скрыть визуальные эффекты выходов и телепортов, если они ещё не открыты ModUi/&HideMonsterHitPoints=Отображать здоровье противников в относительных 25% / 50% / 75% / 100% вместо точных значений хитов @@ -250,6 +252,7 @@ ModUi/&Races=Расы ModUi/&RecipeCost=Стоимость рецепта ModUi/&RelicForgeries=Поддельные реликвии ModUi/&RemoveAttunementRequirements=Убрать требования настройки [Необходим перезапуск] +ModUi/&RemoveBardSongOfRest=Удалить Песнь покоя на уровне 2 ModUi/&RemoveBugVisualModels=Заменить паукообразные модельки в игре на медведеобразные [арахнофобия] [Необходим перезапуск] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Убрать гуманоидный фильтр на Жуткий смех ModUi/&RemoveRecurringEffectOnEntangle=Применять эффект Опутывания только на время действия заклинания, а также принудительно совершать проверку Силы, чтобы вырваться из лоз diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 87f2c7659d..a59bfcfcff 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -40,6 +40,7 @@ ModUi/&BlindedConditionDontAllowAttackOfOpportunity=当失明吟游诗人灵感的持续时间从 10 分钟改为 1 小时 ModUi/&ChangeDragonbornElementalBreathUsages=将Dragonborn元素气息用法更改为每次短暂休息后的体质修正 ModUi/&ChangeSleetStormToCube=将 Sleet Storm 改为使用立方体,而不是圆柱体 ModUi/&Changelog=变更日志 @@ -59,7 +60,7 @@ ModUi/&CriticalOption1=1:将伤害骰子的最 ModUi/&CriticalOption2=2:继续重新掷出任何掷出最高可能结果的伤害骰子,并将其添加到总伤害中 ModUi/&CriticalOption3=3:将攻击的总伤害加倍,而不是掷额外的骰子。[(XdY+Z)*2] ModUi/&DisableAutoEquip=禁用库存中的物品自动装备 -ModUi/&DisableBarbarianBrutalCritical=+ 同时禁用 9、13 和 17 级的残酷暴击 +ModUi/&DisableBarbarianBrutalCritical=+ 同时禁用 9、13 和 17 级的残酷暴击 ModUi/&DisableCastSpellPreRequisitesOnModFeats=禁用 mod feats 上的施法先决条件[需要重启] ModUi/&DisableClassPrerequisitesOnModFeats=禁用功绩的级别先决条件 ModUi/&DisableMultilineSpellOffering=禁用操作栏上的多行法术提供[主要针对使用非多路施法者英雄的控制器用户] @@ -101,6 +102,7 @@ ModUi/&EnableBarbarianBrutalStrike=在 9、13 和 17 级启用残 ModUi/&EnableBarbarianFightingStyle=在第 2 级启用战斗风格选择 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=启用鲁莽攻击增益效果和减益效果,在下一回合开始时结束 ModUi/&EnableBarbarianRegainOneRageAtShortRest=在第 7 级时,允许在短暂休息后恢复一次怒气 +ModUi/&EnableBardExpertiseOneLevelBefore=在 2 级和 9 级(而不是 3 级和 10 级)启用专业知识 ModUi/&EnableBardHealingBalladOnLongRest=长时间休息时启用希望学院 治愈之歌 ModUi/&EnableBetaContent=启用测试版内容[需要重启] ModUi/&EnableCancelEditOnRightMouseClick=通过鼠标右键单击启用取消操作 @@ -143,20 +145,20 @@ ModUi/&EnableMulticlass=启用多类 治愈伤口、治愈之言、群体治愈伤口和群体治愈之言上启用治疗骰子增益 ModUi/&EnablePaladinLayOnHandsAsBonusAction=启用圣疗术作为奖励行动 ModUi/&EnablePaladinSmiteAsBonusAction=启用 Smite 作为奖励行动 -ModUi/&EnablePaladinSpellCastingAtLevel1=使圣骑士能够以 1 级(而非 2 级)获得施法能力[OneDnd] +ModUi/&EnablePaladinSpellCastingAtLevel1=在 1 级(而非 2 级)启用施法 ModUi/&EnablePcgRandom=启用更好的随机生成器算法[https://www.pcg-random.org] ModUi/&EnableProneAction=启用倒地动作[你可以无代价倒地] ModUi/&EnablePullPushOnVerticalDirection=使推拉运动效果也适用于上/下轴 ModUi/&EnableRangerNatureShroudAt10=在 10 级时启用自然面纱功能[作为奖励行动,您可以神奇地隐身,直到下一回合开始] -ModUi/&EnableRangerSpellCastingAtLevel1=使Ranger在 1 级(而非 2 级)获得施法能力 +ModUi/&EnableRangerSpellCastingAtLevel1=在 1 级(而非 2 级)启用施法 ModUi/&EnableRelearnSpells=可以选择已从其他来源学到的法术或咒语 ModUi/&EnableRespecAction=休息操作后启用 RESPEC [在多人游戏会话期间不要使用 RESPEC] -ModUi/&EnableRitualOnAllCasters=允许所有施法者施放仪式 +ModUi/&EnableRitualOnAllCasters=对所有施法者启用仪式施法 ModUi/&EnableRogueCunningStrike=在等级 5 和 14 时启用狡猾打击和阴险打击 [你放弃 1 个偷袭骰子以获得额外的命中效果] ModUi/&EnableRogueFightingStyle=在第 2 级启用战斗风格选择 ModUi/&EnableRogueSteadyAim=在 3 级时启用稳定瞄准 [如果您尚未移动,则奖励行动会在当前回合的下一次攻击掷骰中提供优势] ModUi/&EnableRogueStrSaving=在狡猾/狡诈打击削弱/强化打击刀锋风暴上启用Hoodlum DEX 或 STR 修正 -ModUi/&EnableSignatureSpellsRelearn=允许每次长时间休息时准备巫师标志性法术[而不是在 20 级时准备一次] +ModUi/&EnableSignatureSpellsRelearn=每次长时间休息时都可准备招牌法术[而不是在 20 级时准备一次] ModUi/&EnableSorcererMagicalGuidance=在 5 级时启用魔法指引 ModUi/&EnableSorcererQuickenedAction=启用加速法术动作以允许施放应用了加速超魔法的主要动作法术 ModUi/&EnableSortingDungeonMakerAssets=在 Dungeon Maker 编辑器上启用资产排序 @@ -168,8 +170,8 @@ ModUi/&EnableTooltipDistance=在战斗中将鼠标悬停在角色上时启用在 ModUi/&EnableUnarmedMainAttackAction=启用徒手攻击动作[如果演员主武器为武器、是僧侣或装备有手套铁手套] ModUi/&EnableUpcastConjureElementalAndFey=启用 Conjure Elemental 和 Conjure Fey 的向上转换 ModUi/&EnableVariablePlaceholdersOnTexts=在描述中启用变量占位符[使用 {VARIABLE_NAME} 作为占位符] -ModUi/&EnableWizardToLearnScholarAtLevel2=使巫师能够学习 2 级的学者 -ModUi/&EnableWizardToLearnSchoolAtLevel3=使巫师能够以 3 级(而非 2 级)获得魔法学派 +ModUi/&EnableWizardToLearnScholarAtLevel2=启用 2 级 Scholar +ModUi/&EnableWizardToLearnSchoolAtLevel3=在 3 级(而非 2 级)启用魔法学校 ModUi/&EnablesAsiAndFeat=同时启用属性得分增加和专长选择[而不是独占选择] ModUi/&EncounterPercentageChance=设置随机遭遇的百分比几率 ModUi/&Encounters=遭遇 @@ -198,7 +200,7 @@ ModUi/&FullyControlConjurations=完全控制召唤物[动物 ModUi/&Gameplay=游戏玩法 ModUi/&General=常规: ModUi/&GeneralMenu=一般的 -ModUi/&GrantScimitarSpecializationToBarkMonkRogue=授予弯刀武器专长吟游诗人和盗贼 +ModUi/&GrantScimitarSpecializationToBarkMonkRogue=授予吟游诗人盗贼弯刀武器专长 ModUi/&GridSelectedColor=更改移动网格颜色 ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=如果尚未发现,则隐藏出口和传送器的视觉效果 ModUi/&HideMonsterHitPoints=以 25% / 50% / 75% / 100% 的步长显示怪物的生命值,而不是精确的生命值 @@ -250,6 +252,7 @@ ModUi/&Races=种族 ModUi/&RecipeCost=食谱成本 ModUi/&RelicForgeries=文物伪造 ModUi/&RemoveAttunementRequirements=删除调谐要求[需要重启] +ModUi/&RemoveBardSongOfRest=删除 2 级的休息之歌 ModUi/&RemoveBugVisualModels=在游戏中将蜘蛛类模型替换为熊类模型[蜘蛛恐惧症] [需要重启] ModUi/&RemoveHumanoidFilterOnHideousLaughter=删除Hideous Laughter上的人形过滤器 ModUi/&RemoveRecurringEffectOnEntangle=仅在施法时应用纠缠效果,并强制进行力量检查以摆脱藤蔓 From e4c9be5e1c3296accf6ac30245f901870c2bdf37 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 1 Nov 2024 22:19:26 -0700 Subject: [PATCH 23/85] add Warlock tabletop 5e 2024 settings --- .../UnfinishedBusinessBlueprints/Assets.txt | 4 + .../PointPoolWarlockInvocation1.json | 39 ++ .../PowerWarlockMagicalCunning.json | 353 ++++++++++++++++++ .../Api/DatabaseHelper-RELEASE.cs | 6 + .../Displays/ClassesDisplay.cs | 19 +- .../Displays/GeneralDisplay.cs | 18 + .../Models/SrdAndHouseRulesContext.cs | 61 +++ SolastaUnfinishedBusiness/Settings.cs | 2 + SolastaUnfinishedBusiness/Settings/empty.xml | 6 + .../Settings/zappastuff.xml | 4 +- .../Translations/de/Settings-de.txt | 2 + .../Translations/en/Others-en.txt | 2 + .../Translations/en/Settings-en.txt | 2 + .../Translations/es/Settings-es.txt | 2 + .../Translations/fr/Settings-fr.txt | 2 + .../Translations/it/Settings-it.txt | 2 + .../Translations/ja/Settings-ja.txt | 2 + .../Translations/ko/Settings-ko.txt | 2 + .../Translations/pt-BR/Settings-pt-BR.txt | 2 + .../Translations/ru/Settings-ru.txt | 2 + .../Translations/zh-CN/Settings-zh-CN.txt | 2 + 21 files changed, 532 insertions(+), 2 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolWarlockInvocation1.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 3c0e6b30c4..2bd16308c1 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -3003,6 +3003,7 @@ PointPoolShadarKaiAbilityScoreIncrease FeatureDefinitionPointPool FeatureDefinit PointPoolSpellMasterBonusCantrips FeatureDefinitionPointPool FeatureDefinition 04019140-cb72-5190-b298-69924eb4ee44 PointPoolTacticianSharpMindExpertise FeatureDefinitionPointPool FeatureDefinition ccc6b1b8-3fc3-5a24-8401-bd5e40cdef40 PointPoolTacticianSharpMindSkill FeatureDefinitionPointPool FeatureDefinition 7a987cf5-d9a8-5b9b-86ef-0c9c413650aa +PointPoolWarlockInvocation1 FeatureDefinitionPointPool FeatureDefinition 1f9c927d-6e2a-53a3-b1b0-17a8049703bf PointPoolWarlockInvocation18 FeatureDefinitionPointPool FeatureDefinition 4f5dc4ea-5261-5aef-98fd-10e4d5c86a57 PointPoolWarlockMysticArcanum9 FeatureDefinitionPointPool FeatureDefinition 4d67ee2f-bae9-590d-a253-ab2806576012 PointPoolWizardScholar FeatureDefinitionPointPool FeatureDefinition c071935d-bc4d-56d5-910c-30556ad61f78 @@ -3980,6 +3981,7 @@ PowerUseModifierTacticianGambitPoolRemarkableTechnique FeatureDefinitionPowerUse PowerVanishSummon FeatureDefinitionPower FeatureDefinition 2e2b66aa-217d-5063-9073-32f0dca0efb1 PowerVitriolicSphere FeatureDefinitionPower FeatureDefinition 4c5d9fc8-78f1-57e9-831e-737b954d8e16 PowerWarlockEldritchMaster FeatureDefinitionPower FeatureDefinition 8d5bb433-7ede-51cb-bb6b-e04405ea891c +PowerWarlockMagicalCunning FeatureDefinitionPower FeatureDefinition 0ad289b1-119a-5b46-8458-93c9ff03b358 PowerWarMagicDeflectionShroud FeatureDefinitionPower FeatureDefinition b5c601a4-9730-5b46-b6c0-a86559e6c990 PowerWarMagicSurge FeatureDefinitionPower FeatureDefinition 9a1b80e2-b285-55c6-be5c-fcbba31faed4 PowerWayOfSilhouetteDarkness FeatureDefinitionPower FeatureDefinition fb406968-b055-586f-9a1a-2b4e4f28a8ce @@ -5832,6 +5834,7 @@ PointPoolShadarKaiAbilityScoreIncrease FeatureDefinitionPointPool FeatureDefinit PointPoolSpellMasterBonusCantrips FeatureDefinitionPointPool FeatureDefinitionPointPool 04019140-cb72-5190-b298-69924eb4ee44 PointPoolTacticianSharpMindExpertise FeatureDefinitionPointPool FeatureDefinitionPointPool ccc6b1b8-3fc3-5a24-8401-bd5e40cdef40 PointPoolTacticianSharpMindSkill FeatureDefinitionPointPool FeatureDefinitionPointPool 7a987cf5-d9a8-5b9b-86ef-0c9c413650aa +PointPoolWarlockInvocation1 FeatureDefinitionPointPool FeatureDefinitionPointPool 1f9c927d-6e2a-53a3-b1b0-17a8049703bf PointPoolWarlockInvocation18 FeatureDefinitionPointPool FeatureDefinitionPointPool 4f5dc4ea-5261-5aef-98fd-10e4d5c86a57 PointPoolWarlockMysticArcanum9 FeatureDefinitionPointPool FeatureDefinitionPointPool 4d67ee2f-bae9-590d-a253-ab2806576012 PointPoolWizardScholar FeatureDefinitionPointPool FeatureDefinitionPointPool c071935d-bc4d-56d5-910c-30556ad61f78 @@ -6802,6 +6805,7 @@ PowerTraditionSurvivalPhysicalPerfection FeatureDefinitionPower FeatureDefinitio PowerVanishSummon FeatureDefinitionPower FeatureDefinitionPower 2e2b66aa-217d-5063-9073-32f0dca0efb1 PowerVitriolicSphere FeatureDefinitionPower FeatureDefinitionPower 4c5d9fc8-78f1-57e9-831e-737b954d8e16 PowerWarlockEldritchMaster FeatureDefinitionPower FeatureDefinitionPower 8d5bb433-7ede-51cb-bb6b-e04405ea891c +PowerWarlockMagicalCunning FeatureDefinitionPower FeatureDefinitionPower 0ad289b1-119a-5b46-8458-93c9ff03b358 PowerWarMagicDeflectionShroud FeatureDefinitionPower FeatureDefinitionPower b5c601a4-9730-5b46-b6c0-a86559e6c990 PowerWarMagicSurge FeatureDefinitionPower FeatureDefinitionPower 9a1b80e2-b285-55c6-be5c-fcbba31faed4 PowerWayOfSilhouetteDarkness FeatureDefinitionPower FeatureDefinitionPower fb406968-b055-586f-9a1a-2b4e4f28a8ce diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolWarlockInvocation1.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolWarlockInvocation1.json new file mode 100644 index 0000000000..d5ebe1548c --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolWarlockInvocation1.json @@ -0,0 +1,39 @@ +{ + "$type": "FeatureDefinitionPointPool, Assembly-CSharp", + "poolType": "Invocation", + "poolAmount": 1, + "restrictedChoices": [], + "uniqueChoices": true, + "spellListOverride": null, + "ritualOnly": false, + "minSpellLevel": 0, + "maxSpellLevel": 9, + "extraSpellsTag": "", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PointPoolWarlockInvocationInitialTitle", + "description": "Feature/&PointPoolWarlockInvocationInitialDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "1f9c927d-6e2a-53a3-b1b0-17a8049703bf", + "contentPack": 9999, + "name": "PointPoolWarlockInvocation1" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json new file mode 100644 index 0000000000..3ffa070c00 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json @@ -0,0 +1,353 @@ +{ + "$type": "FeatureDefinitionPower, Assembly-CSharp", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "All", + "durationType": "Instantaneous", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "SpellSlots", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "spellSlotsForm": { + "$type": "SpellSlotsForm, Assembly-CSharp", + "type": "RecoverHalfLevelUp", + "maxSlotLevel": 5, + "sorceryPointsGain": 1, + "powerDefinition": null + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "Rest", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "LongRest", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": false, + "showCasting": true, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerWarlockMagicalCunningTitle", + "description": "Feature/&PowerWarlockMagicalCunningDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "2bf0219b0c22319438c2677f84818891", + "m_SubObjectName": "ArcaneRecovery", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "0ad289b1-119a-5b46-8458-93c9ff03b358", + "contentPack": 9999, + "name": "PowerWarlockMagicalCunning" +} \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index bb39713b4b..16a1b859a9 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -1802,6 +1802,12 @@ internal static class FeatureDefinitionPointPools internal static FeatureDefinitionPointPool PointPoolWizardSkillPoints { get; } = GetDefinition("PointPoolWizardSkillPoints"); + + internal static FeatureDefinitionPointPool PointPoolWarlockInvocation2 { get; } = + GetDefinition("PointPoolWarlockInvocation2"); + + internal static FeatureDefinitionPointPool PointPoolWarlockInvocation5 { get; } = + GetDefinition("PointPoolWarlockInvocation5"); } internal static class FeatureDefinitionPowers diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index 2a1528ac69..eeb89b630b 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -316,9 +316,26 @@ internal static void DisplayClasses() } UI.Label(); - UI.Label("" + Gui.Localize("Class/&WizardTitle") + ":"); + UI.Label("" + Gui.Localize("Class/&WarlockTitle") + ":"); UI.Label(); + toggle = Main.Settings.EnableWarlockMagicalCunningAtLevel2; + if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockMagicalCunningAtLevel2"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableWarlockMagicalCunningAtLevel2 = toggle; + SrdAndHouseRulesContext.SwitchOneDndWarlockMagicalCunningAtLevel2(); + } + + toggle = Main.Settings.SwapWarlockToUseOneDndInvocationProgression; + if (UI.Toggle(Gui.Localize("ModUi/&SwapWarlockToUseOneDndInvocationProgression"), ref toggle, UI.AutoWidth())) + { + Main.Settings.SwapWarlockToUseOneDndInvocationProgression = toggle; + SrdAndHouseRulesContext.SwitchOneDndWarlockInvocationsProgression(); + } + + UI.Label(); + UI.Label("" + Gui.Localize("Class/&WizardTitle") + ":"); + UI.Label(); toggle = Main.Settings.EnableWizardToLearnScholarAtLevel2; if (UI.Toggle(Gui.Localize("ModUi/&EnableWizardToLearnScholarAtLevel2"), ref toggle, UI.AutoWidth())) diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 78dab18358..a21184c883 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -422,6 +422,24 @@ private static void DisplayOneDnd() CharacterContext.SwitchRogueCunningStrike(); } + UI.Label(); + UI.Label("" + Gui.Localize("Class/&WarlockTitle") + ":"); + UI.Label(); + + toggle = Main.Settings.EnableWarlockMagicalCunningAtLevel2; + if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockMagicalCunningAtLevel2"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableWarlockMagicalCunningAtLevel2 = toggle; + SrdAndHouseRulesContext.SwitchOneDndWarlockMagicalCunningAtLevel2(); + } + + toggle = Main.Settings.SwapWarlockToUseOneDndInvocationProgression; + if (UI.Toggle(Gui.Localize("ModUi/&SwapWarlockToUseOneDndInvocationProgression"), ref toggle, UI.AutoWidth())) + { + Main.Settings.SwapWarlockToUseOneDndInvocationProgression = toggle; + SrdAndHouseRulesContext.SwitchOneDndWarlockInvocationsProgression(); + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&WizardTitle") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index 092b35d16c..65ddb4516d 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -100,6 +100,29 @@ internal static class SrdAndHouseRulesContext SkillDefinitions.Religion) .AddToDB(); + private static readonly FeatureDefinitionPower PowerWarlockMagicalCunning = FeatureDefinitionPowerBuilder + .Create("PowerWarlockMagicalCunning") + .SetGuiPresentation(Category.Feature, PowerWizardArcaneRecovery) + .SetUsesFixed(ActivationTime.Rest, RechargeRate.LongRest) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetTargetingData(Side.All, RangeType.Self, 0, TargetType.Self) + .SetEffectForms( + EffectFormBuilder + .Create() + .SetSpellForm(5) + .Build()) + .SetParticleEffectParameters(PowerWizardArcaneRecovery) + .Build()) + .AddToDB(); + + private static readonly FeatureDefinitionPointPool PointPoolWarlockInvocation1 = FeatureDefinitionPointPoolBuilder + .Create(FeatureDefinitionPointPools.PointPoolWarlockInvocation2, "PointPoolWarlockInvocation1") + .SetGuiPresentation("PointPoolWarlockInvocationInitial", Category.Feature) + .SetPool(HeroDefinitions.PointsPoolType.Invocation, 1) + .AddToDB(); + private static SpellDefinition ConjureElementalInvisibleStalker { get; set; } internal static void LateLoad() @@ -696,6 +719,44 @@ internal static void SwitchOneDndWizardScholar() Wizard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } + internal static void SwitchOneDndWarlockMagicalCunningAtLevel2() + { + if (Main.Settings.EnableWarlockMagicalCunningAtLevel2) + { + Warlock.FeatureUnlocks.Add(new FeatureUnlockByLevel(PowerWarlockMagicalCunning, 2)); + } + else + { + Warlock.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PowerWarlockMagicalCunning); + } + + Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchOneDndWarlockInvocationsProgression() + { + if (Main.Settings.SwapWarlockToUseOneDndInvocationProgression) + { + Warlock.FeatureUnlocks.Add(new FeatureUnlockByLevel(PointPoolWarlockInvocation1, 1)); + FeatureDefinitionPointPools.PointPoolWarlockInvocation2.GuiPresentation.Title = + "Feature/&PointPoolWarlockInvocationAdditionalTitle"; + FeatureDefinitionPointPools.PointPoolWarlockInvocation2.GuiPresentation.Description = + "Feature/&PointPoolWarlockInvocationAdditionalDescription"; + FeatureDefinitionPointPools.PointPoolWarlockInvocation5.poolAmount = 2; + } + else + { + Warlock.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PointPoolWarlockInvocation1); + FeatureDefinitionPointPools.PointPoolWarlockInvocation2.GuiPresentation.Title = + "Feature/&PointPoolWarlockInvocationInitialTitle"; + FeatureDefinitionPointPools.PointPoolWarlockInvocation2.GuiPresentation.Description = + "Feature/&PointPoolWarlockInvocationInitialDescription"; + FeatureDefinitionPointPools.PointPoolWarlockInvocation5.poolAmount = 1; + } + + Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + internal static void SwitchFilterOnHideousLaughter() { HideousLaughter.effectDescription.restrictedCreatureFamilies.Clear(); diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 516df9ddc1..b0c2a187fc 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -296,6 +296,8 @@ public class Settings : UnityModManager.ModSettings public bool EnableSorcererMagicalGuidance { get; set; } public bool EnableSorcererQuickenedAction { get; set; } public bool HideQuickenedActionWhenMetamagicOff { get; set; } + public bool EnableWarlockMagicalCunningAtLevel2 { get; set; } + public bool SwapWarlockToUseOneDndInvocationProgression { get; set; } public bool EnableWizardToLearnScholarAtLevel2 { get; set; } public bool EnableWizardToLearnSchoolAtLevel3 { get; set; } public bool EnableSignatureSpellsRelearn { get; set; } diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index 0a54cf2bac..91cbc12d4e 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -583,6 +583,8 @@ false false false + false + false false false false @@ -1034,4 +1036,8 @@ false false false + 0 + false + false + false \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index 5665d13073..3c90ae226c 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -1,6 +1,6 @@ - 2 + 3 0 0 false @@ -625,6 +625,8 @@ true true false + false + false false false false diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 9e99b6e581..a8d65984a2 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -170,6 +170,7 @@ ModUi/&EnableTooltipDistance=Aktivieren Sie die Anzeige der Entfernung in den To ModUi/&EnableUnarmedMainAttackAction=Aktiviere die Aktion Unbewaffneter Angriff [wenn der Akteur eine Waffe im Hauptkampf hat, ein Mönch ist oder Handwickel oder Panzerhandschuhe ausgerüstet hat] ModUi/&EnableUpcastConjureElementalAndFey=Aktiviere Upcast von Elementar beschwören und Feenbeschwören ModUi/&EnableVariablePlaceholdersOnTexts=Aktivieren Sie variable Platzhalter in Beschreibungen [verwenden Sie {VARIABLE_NAME} als Platzhalter] +ModUi/&EnableWarlockMagicalCunningAtLevel2=Aktiviere Magische List auf Stufe 2. ModUi/&EnableWizardToLearnScholarAtLevel2=Aktiviere Gelehrter auf Stufe 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Aktiviere die Schule der Magie auf Level 3 statt auf Level 2. ModUi/&EnablesAsiAndFeat=Aktivieren Sie sowohl die Erhöhung der Attributwerte als auch die Auswahl von Talenten [anstelle einer exklusiven Auswahl] @@ -303,6 +304,7 @@ ModUi/&SwapCraftedItemAndRecipeIcons=+ Rezepte und Symbole für hergestellte ModUi/&SwapEvocationPotentCantripAndSculptSpell=Tauschen Sie die Funktionen Evoker Sculpt Spells und Potent Cantrip aus ModUi/&SwapEvocationSavant=Tauschen Sie Evoker Evocation Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] ModUi/&SwapOneDndBarkskinSpell=Tauschen Sie Barkskin gegen die 5e 2024-Version aus [Bonusaktion, keine Konzentration, AC auf 17 eingestellt] +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Tauschen Sie den Fortschritt der Anrufungen mit der Version 5e 2024 aus. ModUi/&TableTopButton=Tabletop-Inhalt auswählen ModUi/&TableTopHelp1=• In den folgenden Abschnitten werden die im Mod verstreuten Einstellungen für 5e 2014 und 2024 neu gruppiert und dupliziert, damit Sie es einfacher haben ModUi/&TableTopHelp2=• Drücken Sie die Taste, um unter der Registerkarte „Charakter“ nur Tabletop-Inhalte auszuwählen, und wählen Sie alle Optionen darunter für ein echtes TT-Erlebnis aus diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 578e4ab6c6..a0c4f907c6 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -95,6 +95,8 @@ Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=If you fail a saving throw, you can reroll it with a bonus equal to your Fighter level. If you do so, you must use the new roll, and you can't use this feature again until you finish a long rest. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Expanded Spells +Feature/&PowerWarlockMagicalCunningTitle=Magical Cunning +Feature/&PowerWarlockMagicalCunningDescription=You can use your bonus action to regain a number of expended pact slots no more than equal to half your maximum (round up). Once you use this feature, you can't do so again until you finish a long rest. Feature/&FeatureMonkBodyAndMindDescription=You have honed your body and mind to new heights. Your Dexterity and Wisdom increase by 4. Feature/&FeatureMonkBodyAndMindTitle=Body and Mind Feature/&FeatureMonkHeightenedMetabolismDescription=Your training has pushed your body and mind to new levels. Your Flurry of Blows, Patient Defense, and Step of the Wind gain the following benefits:\n• Flurry of Blows: When you use Flurry of Blows, you make three Unarmed Strikes with it instead of two.\n• Patient Defense: When you use Patient Defense, you gain a number of temporary hit points equal to two rolls of your Martial Arts die.\n• Step of the Wind: When you use either Step of the Wind feature (Disengage or Dash), you also gain the benefits of the other effect. diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 735cd60640..35a0efc80f 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -170,6 +170,7 @@ ModUi/&EnableTooltipDistance=Enable showing distance on tooltips when hovering o ModUi/&EnableUnarmedMainAttackAction=Enable the Unarmed Attack action [if actor has weapon in main, is a Monk or has handwraps or gauntlet equipped] ModUi/&EnableUpcastConjureElementalAndFey=Enable upcast of Conjure Elemental and Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Enable variable placeholders on descriptions [use {VARIABLE_NAME} as placeholder] +ModUi/&EnableWarlockMagicalCunningAtLevel2=Enable Magical Cunning at level 2 ModUi/&EnableWizardToLearnScholarAtLevel2=Enable Scholar at level 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Enable School of Magic at level 3 instead of 2 ModUi/&EnablesAsiAndFeat=Enable both attribute scores increase and feats selection [instead of an exclusive choice] @@ -303,6 +304,7 @@ ModUi/&SwapCraftedItemAndRecipeIcons=+ Swap recipe and crafted item icons in ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip features ModUi/&SwapEvocationSavant=Swap Evoker Evocation Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] ModUi/&SwapOneDndBarkskinSpell=Swap Barkskin with 5e 2024 version [bonus action, no concentration, AC set to 17] +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Swap Invocations progression with 5e 2024 version ModUi/&TableTopButton=Select Tabletop content ModUi/&TableTopHelp1=• Following sections re-group and duplicate 5e 2014 and 2024 settings scattered across the mod for your convenience ModUi/&TableTopHelp2=• Press the button to select only tabletop content under Character tab, and select all options below for a true TT experience diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 623918c114..afbbd9c6c7 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -171,6 +171,7 @@ ModUi/&EnableTooltipDistance=Habilitar la visualización de la distancia en las ModUi/&EnableUnarmedMainAttackAction=Habilitar la acción Ataque desarmado [si el actor tiene un arma en el personaje principal, es un Monje o tiene vendas o guanteletes equipados] ModUi/&EnableUpcastConjureElementalAndFey=Habilitar la conversión ascendente de Conjurar elemental y Conjurar feérico ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posición de variables en las descripciones [use {VARIABLE_NAME} como marcador de posición] +ModUi/&EnableWarlockMagicalCunningAtLevel2=Habilita Astucia mágica en el nivel 2 ModUi/&EnableWizardToLearnScholarAtLevel2=Habilitar Scholar en el nivel 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Habilitar Escuela de Magia en el nivel 3 en lugar de 2 ModUi/&EnablesAsiAndFeat=Habilitar tanto el aumento de las puntuaciones de atributos como la selección de dotes [en lugar de una elección exclusiva] @@ -304,6 +305,7 @@ ModUi/&SwapCraftedItemAndRecipeIcons=+ Intercambia íconos de recetas y objet ModUi/&SwapEvocationPotentCantripAndSculptSpell=Intercambia las características de Evocador, Hechizos de escultura y Truco potente ModUi/&SwapEvocationSavant=Intercambia Evocador Sabio de la evocación con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de ranura] ModUi/&SwapOneDndBarkskinSpell=Intercambia Piel de corteza con la versión 5e 2024 [acción adicional, sin concentración, CA establecida en 17] +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Intercambia la progresión de Invocaciones con la versión 5e 2024 ModUi/&TableTopButton=Seleccionar contenido de Tabletop ModUi/&TableTopHelp1=• Las siguientes secciones reagrupan y duplican las configuraciones de 5e 2014 y 2024 esparcidas por el mod para tu conveniencia. ModUi/&TableTopHelp2=• Presiona el botón para seleccionar solo contenido de mesa en la pestaña Personaje y selecciona todas las opciones a continuación para una verdadera experiencia TT diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 0e4506e88a..3cd7303850 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -170,6 +170,7 @@ ModUi/&EnableTooltipDistance=Activer l'affichage de la distance dans les info-bu ModUi/&EnableUnarmedMainAttackAction=Activer l'action Attaque à mains nues [si l'acteur a une arme dans l'arme principale, est un moine ou a des bandages ou un gantelet équipés] ModUi/&EnableUpcastConjureElementalAndFey=Activer la conversion ascendante de Conjure Elemental et Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Activer les espaces réservés aux variables dans les descriptions [utiliser {VARIABLE_NAME} comme espace réservé] +ModUi/&EnableWarlockMagicalCunningAtLevel2=Activer la ruse magique au niveau 2 ModUi/&EnableWizardToLearnScholarAtLevel2=Activer Scholar au niveau 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Activer l'École de magie au niveau 3 au lieu de 2 ModUi/&EnablesAsiAndFeat=Activer à la fois l'augmentation des scores d'attributs et la sélection des exploits [au lieu d'un choix exclusif] @@ -303,6 +304,7 @@ ModUi/&SwapCraftedItemAndRecipeIcons=+ Échangez les icônes de recettes et d ModUi/&SwapEvocationPotentCantripAndSculptSpell=Échangez les fonctionnalités Évocateur Sculpture des sorts et Puissant tour de passe-passe ModUi/&SwapEvocationSavant=Échangez Evoker Evocation Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] ModUi/&SwapOneDndBarkskinSpell=Échangez Barkskin avec la version 5e 2024 [action bonus, pas de concentration, CA réglée à 17] +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Échangez la progression des Invocations avec la version 5e 2024 ModUi/&TableTopButton=Sélectionnez le contenu de la table ModUi/&TableTopHelp1=• Les sections suivantes regroupent et dupliquent les paramètres 5e 2014 et 2024 dispersés dans le mod pour votre commodité ModUi/&TableTopHelp2=• Appuyez sur le bouton pour sélectionner uniquement le contenu de table sous l'onglet Personnage et sélectionnez toutes les options ci-dessous pour une véritable expérience TT diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 74ffb5d418..50ec958a5d 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -170,6 +170,7 @@ ModUi/&EnableTooltipDistance=Abilita la visualizzazione della distanza nei sugge ModUi/&EnableUnarmedMainAttackAction=Abilita l'azione Attacco disarmato [se l'attore ha un'arma nel personaggio principale, è un monaco o ha fasce o guanto equipaggiati] ModUi/&EnableUpcastConjureElementalAndFey=Abilita l'upcast di Evoca Elementale e Evoca Fata ModUi/&EnableVariablePlaceholdersOnTexts=Abilita segnaposto variabili nelle descrizioni [usa {VARIABLE_NAME} come segnaposto] +ModUi/&EnableWarlockMagicalCunningAtLevel2=Abilita Astuzia magica al livello 2 ModUi/&EnableWizardToLearnScholarAtLevel2=Abilita Studioso al livello 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Abilita Scuola di Magia al livello 3 invece che 2 ModUi/&EnablesAsiAndFeat=Abilita sia l'aumento dei punteggi degli attributi che la selezione delle imprese [invece di una scelta esclusiva] @@ -303,6 +304,7 @@ ModUi/&SwapCraftedItemAndRecipeIcons=+ Scambia le icone delle ricette e degli ModUi/&SwapEvocationPotentCantripAndSculptSpell=Scambia le funzionalità Sculpt Spells e Potent Cantrip di Evoker ModUi/&SwapEvocationSavant=Sostituisci Evocatore Sapiente dell'evocazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] ModUi/&SwapOneDndBarkskinSpell=Sostituisci Barkskin con la versione 5e 2024 [azione bonus, nessuna concentrazione, CA impostata a 17] +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Scambia la progressione delle Invocazioni con la versione 5e 2024 ModUi/&TableTopButton=Seleziona contenuto Tabletop ModUi/&TableTopHelp1=• Le sezioni seguenti raggruppano e duplicano le impostazioni 5e 2014 e 2024 sparse nella mod per la tua comodità ModUi/&TableTopHelp2=• Premi il pulsante per selezionare solo il contenuto del tavolo nella scheda Personaggio e seleziona tutte le opzioni sottostanti per una vera esperienza TT diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 0abe2f354b..c4847c55a4 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -170,6 +170,7 @@ ModUi/&EnableTooltipDistance=戦闘中のキャラクターにマウスを移動 ModUi/&EnableUnarmedMainAttackAction=素手攻撃アクションを有効にする [アクターがメインに武器を持っているか、モンクを持っているか、ハンドラップまたはガントレットを装備している場合] ModUi/&EnableUpcastConjureElementalAndFey=エレメンタル召喚とフェイ召喚のアップキャストを有効にする ModUi/&EnableVariablePlaceholdersOnTexts=説明に変数プレースホルダーを有効にする [プレースホルダーとして {VARIABLE_NAME} を使用する] +ModUi/&EnableWarlockMagicalCunningAtLevel2=レベル2で魔法の狡猾さを有効にする ModUi/&EnableWizardToLearnScholarAtLevel2=レベル2で学者を有効にする ModUi/&EnableWizardToLearnSchoolAtLevel3=魔法学校をレベル2ではなくレベル3で有効にする ModUi/&EnablesAsiAndFeat=属性スコアの増加と 特技 の選択の両方を有効にします [排他的選択の代わりに] @@ -303,6 +304,7 @@ ModUi/&SwapCraftedItemAndRecipeIcons=+ ショップでレシピとクラフ ModUi/&SwapEvocationPotentCantripAndSculptSpell=エヴォーカーのスカルプトスペルポテンシャルキャントリップの機能を入れ替えます ModUi/&SwapEvocationSavant=Evoker Evocation Savant を 5e 2024 バージョンの [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびにさらに 1 つ習得する] と入れ替えます ModUi/&SwapOneDndBarkskinSpell=Barkskin を 5e 2024 バージョンの [ボーナス アクション、集中力なし、AC を 17 に設定] と交換します。 +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Invocations の進行を 5e 2024 バージョンと入れ替える ModUi/&TableTopButton=テーブルトップコンテンツを選択 ModUi/&TableTopHelp1=• 以下のセクションでは、利便性のために、mod 全体に散らばっている 5e 2014 および 2024 設定を再グループ化して複製します。 ModUi/&TableTopHelp2=• ボタンを押してキャラクタータブのテーブルトップコンテンツのみを選択し、以下のすべてのオプションを選択して真のTT体験を味わってください。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 5775830eff..13b57d443e 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -170,6 +170,7 @@ ModUi/&EnableTooltipDistance=전투 중 캐릭터 위에 마우스를 올려 놓 ModUi/&EnableUnarmedMainAttackAction=비무장 공격 동작 활성화 [액터가 기본 무기를 장착하고 있거나, 수도사이거나, 핸드랩 또는 건틀릿을 장착한 경우] ModUi/&EnableUpcastConjureElementalAndFey=원소 소환과 요정 소환의 업캐스트를 활성화합니다. ModUi/&EnableVariablePlaceholdersOnTexts=설명에 변수 플레이스홀더 활성화 [플레이스홀더로 {VARIABLE_NAME} 사용] +ModUi/&EnableWarlockMagicalCunningAtLevel2=레벨 2에서 마법의 교활함을 활성화합니다. ModUi/&EnableWizardToLearnScholarAtLevel2=레벨 2에서 학자 활성화 ModUi/&EnableWizardToLearnSchoolAtLevel3=마법 학교를 2레벨 대신 3레벨로 활성화합니다. ModUi/&EnablesAsiAndFeat=속성 점수 증가와 특기 선택을 모두 활성화합니다. [독점 선택 대신] @@ -303,6 +304,7 @@ ModUi/&SwapCraftedItemAndRecipeIcons=+ 상점에서 레시피와 제작 아 ModUi/&SwapEvocationPotentCantripAndSculptSpell=소환사 조각 주문강력한 주문 기능을 교체하세요 ModUi/&SwapEvocationSavant=Evoker Evocation Savant를 5e 2024 버전으로 교체하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개씩 더 배우기] ModUi/&SwapOneDndBarkskinSpell=Barkskin을 5e 2024 버전 [보너스 액션, 집중 없음, AC 17로 설정]과 교환하세요 +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Invocations 진행을 5e 2024 버전으로 바꾸세요 ModUi/&TableTopButton=테이블탑 콘텐츠 선택 ModUi/&TableTopHelp1=• 다음 섹션은 편의를 위해 모드 전체에 분산된 5e 2014 및 2024 설정을 다시 그룹화하고 복제합니다. ModUi/&TableTopHelp2=• 캐릭터 탭에서 테이블탑 콘텐츠만 선택하려면 버튼을 누르고, 진정한 TT 경험을 위해 아래의 모든 옵션을 선택하세요. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index c7624fbefe..f8962825e2 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -170,6 +170,7 @@ ModUi/&EnableTooltipDistance=Habilitar a exibição da distância nas dicas de f ModUi/&EnableUnarmedMainAttackAction=Habilitar a ação Ataque Desarmado [se o ator tiver arma principal, for um Monge ou tiver bandanas ou manoplas equipadas] ModUi/&EnableUpcastConjureElementalAndFey=Habilitar upcast de Conjure Elemental e Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posição variáveis em descrições [usar {VARIABLE_NAME} como marcador de posição] +ModUi/&EnableWarlockMagicalCunningAtLevel2=Habilitar Astúcia Mágica no nível 2 ModUi/&EnableWizardToLearnScholarAtLevel2=Habilitar Scholar no nível 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Habilitar Escola de Magia no nível 3 em vez de 2 ModUi/&EnablesAsiAndFeat=Habilitar aumento de pontuação de atributos e seleção de talentos [em vez de uma escolha exclusiva] @@ -303,6 +304,7 @@ ModUi/&SwapCraftedItemAndRecipeIcons=+ Troque ícones de receitas e itens cri ModUi/&SwapEvocationPotentCantripAndSculptSpell=Troque os recursos Evocador Magias de Escultura e Truque Potente ModUi/&SwapEvocationSavant=Troque Evocador Sábio da Evocação pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] ModUi/&SwapOneDndBarkskinSpell=Troque Barkskin pela versão 5e 2024 [ação bônus, sem concentração, CA definida como 17] +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Troque a progressão de Invocações pela versão 5e 2024 ModUi/&TableTopButton=Selecionar conteúdo de mesa ModUi/&TableTopHelp1=• As seções a seguir reagrupam e duplicam as configurações 5e 2014 e 2024 espalhadas pelo mod para sua conveniência ModUi/&TableTopHelp2=• Pressione o botão para selecionar apenas o conteúdo da mesa na aba Personagem e selecione todas as opções abaixo para uma verdadeira experiência TT diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 6e4a8ebe51..84db0fa7a8 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -170,6 +170,7 @@ ModUi/&EnableTooltipDistance=Включить отображение расст ModUi/&EnableUnarmedMainAttackAction=Включить действие Безоружная атака [если персонаж держит оружие в основной руке и он Монах, или если он использует Обмотки или Перчатки] ModUi/&EnableUpcastConjureElementalAndFey=Включить возможность накладывать на высоких уровнях Призыв элементаля и Призыв феи ModUi/&EnableVariablePlaceholdersOnTexts=Включить заглушки для переменных описаний [использовать {VARIABLE_NAME} в качесте заглушки] +ModUi/&EnableWarlockMagicalCunningAtLevel2=Включить Магическую хитрость на уровне 2 ModUi/&EnableWizardToLearnScholarAtLevel2=Включить Академию на уровне 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Включить Школу магии на уровне 3 вместо 2 ModUi/&EnablesAsiAndFeat=Включить возможность и повышать характеристики, и выбирать черту одновременно [вместо того, чтобы делать выбор между этими вариантами] @@ -303,6 +304,7 @@ ModUi/&SwapCraftedItemAndRecipeIcons=+ Заменить значок реце ModUi/&SwapEvocationPotentCantripAndSculptSpell=Поменять местами умения Волшебника школы Воплощения Построение заклинаний и Мощный заговор [OneDnd] ModUi/&SwapEvocationSavant=Поменяйте Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] ModUi/&SwapOneDndBarkskinSpell=Поменяйте Barkskin на версию 5e 2024 [бонусное действие, нет концентрации, AC установлен на 17] +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Поменять местами прогрессию Invocations с версией 5e 2024 ModUi/&TableTopButton=Выберите содержимое Tabletop ModUi/&TableTopHelp1=• Следующие разделы перегруппированы и дублируют настройки 5e 2014 и 2024, разбросанные по всему моду для вашего удобства. ModUi/&TableTopHelp2=• Нажмите кнопку, чтобы выбрать только настольный контент на вкладке «Персонаж», и выберите все параметры ниже, чтобы получить настоящий опыт TT diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index a59bfcfcff..4a6eae97e3 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -170,6 +170,7 @@ ModUi/&EnableTooltipDistance=在战斗中将鼠标悬停在角色上时启用在 ModUi/&EnableUnarmedMainAttackAction=启用徒手攻击动作[如果演员主武器为武器、是僧侣或装备有手套铁手套] ModUi/&EnableUpcastConjureElementalAndFey=启用 Conjure Elemental 和 Conjure Fey 的向上转换 ModUi/&EnableVariablePlaceholdersOnTexts=在描述中启用变量占位符[使用 {VARIABLE_NAME} 作为占位符] +ModUi/&EnableWarlockMagicalCunningAtLevel2=在第 2 级启用魔法狡猾 ModUi/&EnableWizardToLearnScholarAtLevel2=启用 2 级 Scholar ModUi/&EnableWizardToLearnSchoolAtLevel3=在 3 级(而非 2 级)启用魔法学校 ModUi/&EnablesAsiAndFeat=同时启用属性得分增加和专长选择[而不是独占选择] @@ -303,6 +304,7 @@ ModUi/&SwapCraftedItemAndRecipeIcons=+ 在商店中交换配方和制作物 ModUi/&SwapEvocationPotentCantripAndSculptSpell=交换召唤师 塑形法术强效咒语功能 ModUi/&SwapEvocationSavant=将 Evoker Evocation Savant 与 5e 2024 版本交换 [获得后学习 2 个学校法术,每次提升一个槽位等级时再学习 1 个] ModUi/&SwapOneDndBarkskinSpell=将 Barkskin 与 5e 2024 版本交换[奖励行动,无集中力,AC 设置为 17] +ModUi/&SwapWarlockToUseOneDndInvocationProgression=将 Invocations 进程与 5e 2024 版本交换 ModUi/&TableTopButton=选择桌面内容 ModUi/&TableTopHelp1=• 以下部分重新分组并复制了分散在模块中的 5e 2014 和 2024 设置,以方便您使用 ModUi/&TableTopHelp2=• 按下按钮仅选择角色选项卡下的桌面内容,并选择以下所有选项以获得真正的 TT 体验 From 393bcb0e43ef9c7ca2db93c135a01d8584cc8df7 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 2 Nov 2024 08:30:55 -0700 Subject: [PATCH 24/85] minor fixes on recently added one dnd settings --- .../ChangelogHistory.txt | 2 ++ .../Displays/ClassesDisplay.cs | 20 +++++++------ .../Displays/GeneralDisplay.cs | 28 ++++++++++--------- .../Displays/SpellsDisplay.cs | 7 +++-- .../Models/SrdAndHouseRulesContext.cs | 25 +++++++++++++++++ .../Patches/RulesetCharacterHeroPatcher.cs | 2 +- SolastaUnfinishedBusiness/Settings.cs | 2 +- SolastaUnfinishedBusiness/Settings/empty.xml | 2 +- .../Settings/zappastuff.xml | 2 +- .../Translations/de/Others-de.txt | 2 ++ .../Translations/de/Settings-de.txt | 10 +++---- .../Translations/en/Settings-en.txt | 10 +++---- .../Translations/es/Others-es.txt | 2 ++ .../Translations/es/Settings-es.txt | 10 +++---- .../Translations/fr/Others-fr.txt | 2 ++ .../Translations/fr/Settings-fr.txt | 10 +++---- .../Translations/it/Others-it.txt | 2 ++ .../Translations/it/Settings-it.txt | 10 +++---- .../Translations/ja/Others-ja.txt | 2 ++ .../Translations/ja/Settings-ja.txt | 10 +++---- .../Translations/ko/Others-ko.txt | 2 ++ .../Translations/ko/Settings-ko.txt | 10 +++---- .../Translations/pt-BR/Others-pt-BR.txt | 2 ++ .../Translations/pt-BR/Settings-pt-BR.txt | 10 +++---- .../Translations/ru/Others-ru.txt | 2 ++ .../Translations/ru/Settings-ru.txt | 10 +++---- .../Translations/zh-CN/Others-zh-CN.txt | 2 ++ .../Translations/zh-CN/Settings-zh-CN.txt | 10 +++---- 28 files changed, 130 insertions(+), 78 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 023b6b37e8..982a918bfe 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -3,7 +3,9 @@ - added Character > Classes > 'Change Bard bardic inspiration duration to 1hr instead of 10 minutes' [OneDnd] - added Character > Classes > 'Enable Bard Expertise at levels 2 and 9 instead of 3 and 10' [OneDnd] - added Character > Classes > 'Enable Ritual casting on all casters' [OneDnd] +- added Character > Classes > 'Enable Warlock magical cunning at level 2' [OneDnd] - added Character > Classes > 'Remove Bard song of rest at level 2' [OneDnd] +- added Character > Classes > 'Swap Warlock invocations progression with 5e 2024 version' [OneDnd] - added Character > Spells > 'Swap Barkskin with 5e 2024 version' [OneDnd] - added Character > Subclasses > 'Swap Abjurer abjuration savant with 5e 2024 version' [OneDnd] - added Character > Subclasses > 'Swap Evoker evocation savant with 5e 2024 version' [OneDnd] diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index eeb89b630b..8bac7f657c 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -15,14 +15,7 @@ internal static void DisplayClasses() UI.Label(); - var toggle = Main.Settings.AllowDruidToWearMetalArmor; - if (UI.Toggle(Gui.Localize("ModUi/&AllowDruidToWearMetalArmor"), ref toggle, UI.AutoWidth())) - { - Main.Settings.AllowDruidToWearMetalArmor = toggle; - SrdAndHouseRulesContext.SwitchDruidAllowMetalArmor(); - } - - toggle = Main.Settings.EnableRitualOnAllCasters; + var toggle = Main.Settings.EnableRitualOnAllCasters; if (UI.Toggle(Gui.Localize("ModUi/&EnableRitualOnAllCasters"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRitualOnAllCasters = toggle; @@ -105,6 +98,17 @@ internal static void DisplayClasses() CharacterContext.SwitchBarbarianRegainOneRageAtShortRest(); } + UI.Label(); + UI.Label("" + Gui.Localize("Class/&DruidTitle") + ":"); + UI.Label(); + + toggle = Main.Settings.AllowDruidToWearMetalArmor; + if (UI.Toggle(Gui.Localize("ModUi/&AllowDruidToWearMetalArmor"), ref toggle, UI.AutoWidth())) + { + Main.Settings.AllowDruidToWearMetalArmor = toggle; + SrdAndHouseRulesContext.SwitchDruidAllowMetalArmor(); + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&FighterTitle") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index a21184c883..62980df90e 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -242,8 +242,6 @@ private static void DisplayOneDnd() SrdAndHouseRulesContext.SwitchOneDndSurprisedEnforceDisadvantage(); } - UI.Label(); - toggle = Main.Settings.OneDndHealingPotionBonusAction; if (UI.Toggle(Gui.Localize("ModUi/&OneDndHealingPotionBonusAction"), ref toggle, UI.AutoWidth())) { @@ -251,14 +249,6 @@ private static void DisplayOneDnd() SrdAndHouseRulesContext.SwitchOneDndHealingPotionBonusAction(); } - UI.Label(); - - toggle = Main.Settings.AllowDruidToWearMetalArmor; - if (UI.Toggle(Gui.Localize("ModUi/&AllowDruidToWearMetalArmor"), ref toggle, UI.AutoWidth())) - { - Main.Settings.AllowDruidToWearMetalArmor = toggle; - SrdAndHouseRulesContext.SwitchDruidAllowMetalArmor(); - } UI.Label(); UI.Label("" + Gui.Localize("Class/&BardTitle") + ":"); @@ -322,6 +312,17 @@ private static void DisplayOneDnd() CharacterContext.SwitchBarbarianRegainOneRageAtShortRest(); } + UI.Label(); + UI.Label("" + Gui.Localize("Class/&DruidTitle") + ":"); + UI.Label(); + + toggle = Main.Settings.AllowDruidToWearMetalArmor; + if (UI.Toggle(Gui.Localize("ModUi/&AllowDruidToWearMetalArmor"), ref toggle, UI.AutoWidth())) + { + Main.Settings.AllowDruidToWearMetalArmor = toggle; + SrdAndHouseRulesContext.SwitchDruidAllowMetalArmor(); + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&FighterTitle") + ":"); UI.Label(); @@ -462,10 +463,11 @@ private static void DisplayOneDnd() UI.Label("" + Gui.Localize("ModUi/&DocsSpells") + ":"); UI.Label(); - toggle = Main.Settings.EnableCastersToCountMaxPreparedFromTable; - if (UI.Toggle(Gui.Localize("ModUi/&EnableCastersToCountMaxPreparedFromTable"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.EnableOneDnDPreparedSpellsTables; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDnDPreparedSpellsTables"), ref toggle, UI.AutoWidth())) { - Main.Settings.EnableCastersToCountMaxPreparedFromTable = toggle; + Main.Settings.EnableOneDnDPreparedSpellsTables = toggle; + SrdAndHouseRulesContext.SwitchOneDndPreparedSpellsTables(); } toggle = Main.Settings.EnableOneDndHealingSpellsBuf; diff --git a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs index 53c571a282..ac05f7959a 100644 --- a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs @@ -33,10 +33,11 @@ private static void DisplaySpellsGeneral() SrdAndHouseRulesContext.SwitchAllowBladeCantripsToUseReach(); } - toggle = Main.Settings.EnableCastersToCountMaxPreparedFromTable; - if (UI.Toggle(Gui.Localize("ModUi/&EnableCastersToCountMaxPreparedFromTable"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.EnableOneDnDPreparedSpellsTables; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDnDPreparedSpellsTables"), ref toggle, UI.AutoWidth())) { - Main.Settings.EnableCastersToCountMaxPreparedFromTable = toggle; + Main.Settings.EnableOneDnDPreparedSpellsTables = toggle; + SrdAndHouseRulesContext.SwitchOneDndPreparedSpellsTables(); } toggle = Main.Settings.QuickCastLightCantripOnWornItemsFirst; diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index 65ddb4516d..7ceafd56da 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -145,9 +145,16 @@ internal static void LateLoad() SwitchAllowBladeCantripsToUseReach(); SwitchHastedCasing(); SwitchMagicStaffFoci(); + SwitchEnableRitualOnAllCasters(); SwitchAllowTargetingSelectionWhenCastingChainLightningSpell(); SwitchOfficialFoodRationsWeight(); + SwitchOneDndPreparedSpellsTables(); SwitchOneDndPaladinLayOnHandAsBonusAction(); + SwitchOneDndRemoveBardSongOfRest(); + SwitchOneDndBardicInspirationDurationToOneHour(); + SwitchOneDndBardExpertiseOneLevelBefore(); + SwitchOneDndWarlockInvocationsProgression(); + SwitchOneDndWarlockMagicalCunningAtLevel2(); SwitchOneDndHealingPotionBonusAction(); SwitchOneDndHealingSpellsBuf(); SwitchOneDndWizardScholar(); @@ -604,6 +611,24 @@ internal static void SwitchOneDndSurprisedEnforceDisadvantage() } } + internal static void SwitchOneDndPreparedSpellsTables() + { + if (Main.Settings.EnableOneDnDPreparedSpellsTables) + { + FeatureDefinitionCastSpells.CastSpellBard.knownSpells = + [4, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16, 16, 17, 17, 18, 18, 19, 20, 21, 22]; + FeatureDefinitionCastSpells.CastSpellSorcerer.knownSpells = + [2, 4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 16, 17, 17, 18, 18, 19, 20, 21, 22]; + } + else + { + FeatureDefinitionCastSpells.CastSpellBard.knownSpells = + [4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 15, 16, 18, 19, 19, 20, 22, 22, 22]; + FeatureDefinitionCastSpells.CastSpellSorcerer.knownSpells = + [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15]; + } + } + internal static void SwitchOneDndPaladinLayOnHandAsBonusAction() { PowerPaladinLayOnHands.activationTime = Main.Settings.EnablePaladinLayOnHandsAsBonusAction diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs index 98c0700ace..d99cae19d7 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs @@ -1285,7 +1285,7 @@ public static bool Prefix( return true; } - if (!Main.Settings.EnableCastersToCountMaxPreparedFromTable || + if (!Main.Settings.EnableOneDnDPreparedSpellsTables || !PreparedSpells.TryGetValue(spellRepertoire.SpellCastingClass, out var preparedSpells)) { return true; diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index b0c2a187fc..c7e43d79e7 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -351,7 +351,7 @@ public class Settings : UnityModManager.ModSettings // public bool AllowBladeCantripsToUseReach { get; set; } - public bool EnableCastersToCountMaxPreparedFromTable { get; set; } + public bool EnableOneDnDPreparedSpellsTables { get; set; } public bool QuickCastLightCantripOnWornItemsFirst { get; set; } public bool IllusionSpellsAutomaticallyFailAgainstTrueSightInRange { get; set; } public bool AllowTargetingSelectionWhenCastingChainLightningSpell { get; set; } diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index 91cbc12d4e..7f0334a526 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -623,7 +623,7 @@ 4 false - false + false false false diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index 3c90ae226c..d40b223290 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -888,7 +888,7 @@ MetamagicWidenedSpell true - false + false false true diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 91a996ef9d..a069d293c6 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -183,6 +183,8 @@ Feature/&PowerTeleportSummonDescription=Sie können sich an jeden Ort im Umkreis Feature/&PowerTeleportSummonTitle=Teleport Feature/&PowerVanishSummonDescription=Sie können Ihre Beschwörung verschwinden lassen. Feature/&PowerVanishSummonTitle=Verschwinden +Feature/&PowerWarlockMagicalCunningDescription=Sie können Ihre Bonusaktion nutzen, um eine Anzahl verbrauchter Paktplätze zurückzugewinnen, die höchstens der Hälfte Ihres Maximums entspricht (aufgerundet). Sobald Sie diese Funktion nutzen, können Sie dies nicht erneut tun, bis Sie eine lange Pause beendet haben. +Feature/&PowerWarlockMagicalCunningTitle=Magische List Feature/&ToolGainChoicesPluralDescription=Wählen Sie {0} dieser Tools: {1} Feature/&ToolGainChoicesSingleDescription=Wählen Sie eines dieser Tools: {1} Feature/&VisionBlindsightDescription=Sie leiden an Blindsicht. diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index a8d65984a2..88c4a1c88c 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -103,11 +103,10 @@ ModUi/&EnableBarbarianFightingStyle=Aktiviere die Auswahl Kampfst ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Aktivieren Sie den Buff und Debuff von Reckless Attack, um ihn zu Beginn der nächsten Runde zu beenden. ModUi/&EnableBarbarianRegainOneRageAtShortRest=Aktiviere die Wiedererlangung einer Wut-Anwendung während einer kurzen Pause auf Level 7 ModUi/&EnableBardExpertiseOneLevelBefore=Aktivieren Sie Expertise auf den Stufen 2 und 9 statt 3 und 10. -ModUi/&EnableBardHealingBalladOnLongRest=Aktivieren Sie College of Hope Healing Ballad bei langer Pause +ModUi/&EnableBardHealingBalladOnLongRest=Aktivieren Sie College of Hope Healing Ballad bei langer Pause ModUi/&EnableBetaContent=Beta-Inhalte aktivieren [Neustart erforderlich] ModUi/&EnableCancelEditOnRightMouseClick=Abbruchaktionen mit rechtem Mausklick aktivieren ModUi/&EnableCantripsTriggeringOnWarMagic=Erlaube Cantrips, um einen zusätzlichen Bonusangriff von Kriegsmagie auszulösen -ModUi/&EnableCastersToCountMaxPreparedFromTable=Aktivieren Sie alle vorbereiteten Caster, um die maximale Anzahl vorbereiteter Caster aus einer Tabelle statt aus einer Formel zu ermitteln. ModUi/&EnableCharactersOnFireToEmitLight=Charaktere, die brennen, sollten Licht ausstrahlen [Lichtwürfel, Feuerelementar, Feuernarr, Feuerfischadler, Feuerspinne und Familie der Feuerzustände] ModUi/&EnableCustomPortraits=Aktivieren Sie Benutzerdefinierte Porträts ModUi/&EnableCustomPortraitsHelp=• Platzieren Sie Ihre benutzerdefinierten Porträts in den Unterordnern Personal oder PreGen, benannt nach dem Vornamen des Helden [z. B.: Anton, Celia, Nialla usw.]\n• Verwenden Sie PNG-Bilder mit einer Größe von 256 x 384 Pixeln und einer Transparenzebene [verwenden Sie GIMP für beste Ergebnisse] @@ -142,6 +141,7 @@ ModUi/&EnableMonkImprovedUnarmoredMovementToMoveOnTheWall=Aktivieren Sie Überlegene Verteidigung, um Leeren Körper auf Level 18 zu ersetzen. ModUi/&EnableMonkWeaponSpecialization=Aktiviere Waffenspezialisierung auf den Stufen 2 und 11 [der ausgewählte Waffentyp wird für dich zu einer Mönchswaffe] ModUi/&EnableMulticlass=Aktivieren Sie Multiclass [Neustart erforderlich] +ModUi/&EnableOneDnDPreparedSpellsTables=Ermöglichen Sie allen Zauberern die Verwendung neuer vorbereiteter Zaubertabellen [Barde, Kleriker, Druide, Paladin, Waldläufer, Zauberer, Magier] ModUi/&EnableOneDndHealingSpellsBuf=Aktiviere den Heilungswürfel-Buff für Wunden heilen, Heilendes Wort, Massenheilung von Wunden und Massenheilungswort. ModUi/&EnablePaladinLayOnHandsAsBonusAction=Aktiviere Handauflegen als Bonusaktion ModUi/&EnablePaladinSmiteAsBonusAction=Aktiviere Smite als Bonusaktion @@ -299,10 +299,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=Füllen Sie Gorims Laden mit ModUi/&StockHugoStoreWithAdditionalFoci=Füllen Sie Hugos Laden mit Arkanstab, Druidenhals, Stab und Keule als Fokusgegenstände. ModUi/&Subclasses=Unterklassen ModUi/&Subraces=Unterrassen -ModUi/&SwapAbjurationSavant=Tauschen Sie Abjurer Abjuration Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] +ModUi/&SwapAbjurationSavant=Tauschen Sie Abjurer Abjuration Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erwerben, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] ModUi/&SwapCraftedItemAndRecipeIcons=+ Rezepte und Symbole für hergestellte Gegenstände im Shop austauschen -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Tauschen Sie die Funktionen Evoker Sculpt Spells und Potent Cantrip aus -ModUi/&SwapEvocationSavant=Tauschen Sie Evoker Evocation Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Tauschen Sie die Funktionen Evoker Sculpt Spells und Potent Cantrip aus +ModUi/&SwapEvocationSavant=Tauschen Sie Evoker Evocation Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] ModUi/&SwapOneDndBarkskinSpell=Tauschen Sie Barkskin gegen die 5e 2024-Version aus [Bonusaktion, keine Konzentration, AC auf 17 eingestellt] ModUi/&SwapWarlockToUseOneDndInvocationProgression=Tauschen Sie den Fortschritt der Anrufungen mit der Version 5e 2024 aus. ModUi/&TableTopButton=Tabletop-Inhalt auswählen diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 35a0efc80f..28afdb64ed 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -103,11 +103,11 @@ ModUi/&EnableBarbarianFightingStyle=Enable Fighting Style ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Enable Reckless Attack buff and debuff to finish at start of next turn ModUi/&EnableBarbarianRegainOneRageAtShortRest=Enable regain one Rage use over a short rest at level 7 ModUi/&EnableBardExpertiseOneLevelBefore=Enable Expertise at levels 2 and 9 instead of 3 and 10 -ModUi/&EnableBardHealingBalladOnLongRest=Enable College of Hope Healing Ballad on long rest +ModUi/&EnableBardHealingBalladOnLongRest=Enable College of Hope Healing Ballad on long rest ModUi/&EnableBetaContent=Enable beta content [Requires Restart] ModUi/&EnableCancelEditOnRightMouseClick=Enable cancel actions with right mouse click ModUi/&EnableCantripsTriggeringOnWarMagic=Allow cantrips to trigger War Magic extra bonus attack -ModUi/&EnableCastersToCountMaxPreparedFromTable=Enable all Prepared Casters to determine max prepared count from a table instead of a formula +ModUi/&EnableOneDnDPreparedSpellsTables=Enable all Casters to use new prepared spells tables [Bard, Cleric, Druid, Paladin, Ranger, Sorcerer, Wizard] ModUi/&EnableCharactersOnFireToEmitLight=Characters On Fire should emit light [Cube of Light, Fire Elemental, Fire Jester, Fire Osprey, Fire Spider, and on fire condition family] ModUi/&EnableCustomPortraits=Enable Custom Portraits ModUi/&EnableCustomPortraitsHelp=• Place your custom portraits under subfolders Personal or PreGen, named after the hero first name [i.e.: Anton, Celia, Nialla, etc.]\n• Use PNG images, 256 x 384 pixels in size, with a transparency layer [use GIMP for best results] @@ -299,10 +299,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=Stock Gorim's store with all ModUi/&StockHugoStoreWithAdditionalFoci=Stock Hugo's store with Arcane Staff, Druid Neck, Staff and Club set as foci items ModUi/&Subclasses=Subclasses ModUi/&Subraces=Subraces -ModUi/&SwapAbjurationSavant=Swap Abjurer Abjuration Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] +ModUi/&SwapAbjurationSavant=Swap Abjurer Abjuration Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] ModUi/&SwapCraftedItemAndRecipeIcons=+ Swap recipe and crafted item icons in shop -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip features -ModUi/&SwapEvocationSavant=Swap Evoker Evocation Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip features +ModUi/&SwapEvocationSavant=Swap Evoker Evocation Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] ModUi/&SwapOneDndBarkskinSpell=Swap Barkskin with 5e 2024 version [bonus action, no concentration, AC set to 17] ModUi/&SwapWarlockToUseOneDndInvocationProgression=Swap Invocations progression with 5e 2024 version ModUi/&TableTopButton=Select Tabletop content diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index decaef2133..ab85d5a7c7 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -183,6 +183,8 @@ Feature/&PowerTeleportSummonDescription=Puedes teletransportarte a cualquier ubi Feature/&PowerTeleportSummonTitle=Teletransportarse Feature/&PowerVanishSummonDescription=Puedes hacer que tu invocación desaparezca. Feature/&PowerVanishSummonTitle=Desaparecer +Feature/&PowerWarlockMagicalCunningDescription=Puedes usar tu acción adicional para recuperar una cantidad de espacios de pacto gastados que no sea mayor que la mitad de tu máximo (redondeado hacia arriba). Una vez que uses esta función, no podrás volver a hacerlo hasta que termines un descanso prolongado. +Feature/&PowerWarlockMagicalCunningTitle=Astucia mágica Feature/&ToolGainChoicesPluralDescription=Elija {0} de estas herramientas: {1} Feature/&ToolGainChoicesSingleDescription=Elija una de estas herramientas: {1} Feature/&VisionBlindsightDescription=Tienes visión ciega. diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index afbbd9c6c7..789a562907 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -104,11 +104,10 @@ ModUi/&EnableBarbarianFightingStyle=Habilitar la opción Estilo d ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Habilitar el beneficio y desventaja de Ataque imprudente para que finalicen al comienzo del siguiente turno ModUi/&EnableBarbarianRegainOneRageAtShortRest=Permite recuperar un uso de Furia durante un descanso corto en el nivel 7 ModUi/&EnableBardExpertiseOneLevelBefore=Habilitar Experiencia en los niveles 2 y 9 en lugar de 3 y 10 -ModUi/&EnableBardHealingBalladOnLongRest=Habilitar Colegio de la Esperanza Balada curativa en descanso prolongado +ModUi/&EnableBardHealingBalladOnLongRest=Habilitar College of Hope Healing Ballad en descanso largo ModUi/&EnableBetaContent=Habilitar contenido beta [Requiere reinicio] ModUi/&EnableCancelEditOnRightMouseClick=Habilitar acciones de cancelación con clic derecho del mouse ModUi/&EnableCantripsTriggeringOnWarMagic=Permitir que los trucos activen el ataque adicional adicional de Magia de guerra -ModUi/&EnableCastersToCountMaxPreparedFromTable=Permitir que todos los lanzadores preparados determinen el recuento máximo de preparaciones a partir de una tabla en lugar de una fórmula ModUi/&EnableCharactersOnFireToEmitLight=Los personajes On Fire deben emitir luz [Cubo de luz, Elemental de fuego, Bufón de fuego, Águila pescadora de fuego, Araña de fuego y familia de condición en llamas] ModUi/&EnableCustomPortraits=Habilitar Retratos personalizados ModUi/&EnableCustomPortraitsHelp=• Coloca tus retratos personalizados en las subcarpetas Personal o PreGen, nombradas como el nombre del héroe [es decir: Anton, Celia, Nialla, etc.]\n• Usa imágenes PNG, de 256 x 384 píxeles de tamaño, con una capa de transparencia [usa GIMP para obtener mejores resultados] @@ -143,6 +142,7 @@ ModUi/&EnableMonkImprovedUnarmoredMovementToMoveOnTheWall=Habilite Defensa superior para reemplazar Cuerpo vacío en el nivel 18 ModUi/&EnableMonkWeaponSpecialization=Habilita la Especialización en armas en los niveles 2 y 11 [el tipo de arma seleccionado se convierte en un arma de monje para ti] ModUi/&EnableMulticlass=Habilitar multiclase [Requiere reinicio] +ModUi/&EnableOneDnDPreparedSpellsTables=Permitir que todos los lanzadores de conjuros utilicen las nuevas tablas de conjuros preparadas [Bardo, Clérigo, Druida, Paladín, Explorador, Hechicero, Mago] ModUi/&EnableOneDndHealingSpellsBuf=Habilitar la mejora de dados de curación en Curar heridas, Palabra de curación, Curar heridas en masa y Palabra de curación en masa ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Imposición de manos como acción adicional ModUi/&EnablePaladinSmiteAsBonusAction=Habilitar Castigar como acción adicional @@ -300,10 +300,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=Llena la tienda de Gorim con ModUi/&StockHugoStoreWithAdditionalFoci=Llena la tienda de Hugo con Bastón Arcano, Cuello de Druida, Bastón y Maza como elementos de foco ModUi/&Subclasses=Subclases ModUi/&Subraces=Subrazas -ModUi/&SwapAbjurationSavant=Intercambia Abjurador Sabio de la abjuración con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de espacio] +ModUi/&SwapAbjurationSavant=Intercambia Abjurador Sabio de la abjuración con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de espacio] ModUi/&SwapCraftedItemAndRecipeIcons=+ Intercambia íconos de recetas y objetos elaborados en la tienda -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Intercambia las características de Evocador, Hechizos de escultura y Truco potente -ModUi/&SwapEvocationSavant=Intercambia Evocador Sabio de la evocación con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de ranura] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Intercambia las características de Evocador, Hechizos de escultura y Truco potente +ModUi/&SwapEvocationSavant=Intercambia Evocador Sabio de la evocación con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de ranura] ModUi/&SwapOneDndBarkskinSpell=Intercambia Piel de corteza con la versión 5e 2024 [acción adicional, sin concentración, CA establecida en 17] ModUi/&SwapWarlockToUseOneDndInvocationProgression=Intercambia la progresión de Invocaciones con la versión 5e 2024 ModUi/&TableTopButton=Seleccionar contenido de Tabletop diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 424459efb0..811e5f5d43 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -183,6 +183,8 @@ Feature/&PowerTeleportSummonDescription=Vous pouvez vous téléporter à n'impor Feature/&PowerTeleportSummonTitle=Téléportation Feature/&PowerVanishSummonDescription=Vous pouvez faire disparaître votre invocation. Feature/&PowerVanishSummonTitle=Disparaître +Feature/&PowerWarlockMagicalCunningDescription=Vous pouvez utiliser votre action bonus pour récupérer un nombre d'emplacements de pacte dépensés ne dépassant pas la moitié de votre maximum (arrondir à l'entier supérieur). Une fois que vous avez utilisé cette fonctionnalité, vous ne pouvez plus le faire avant d'avoir terminé un repos long. +Feature/&PowerWarlockMagicalCunningTitle=Ruse magique Feature/&ToolGainChoicesPluralDescription=Choisissez {0} de ces outils : {1} Feature/&ToolGainChoicesSingleDescription=Choisissez l'un de ces outils : {1} Feature/&VisionBlindsightDescription=Vous avez la vision aveugle. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 3cd7303850..45b6563099 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -103,11 +103,10 @@ ModUi/&EnableBarbarianFightingStyle=Activer le choix du Style de ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Activez le buff et le debuff Attaque imprudente pour qu'ils se terminent au début du prochain tour ModUi/&EnableBarbarianRegainOneRageAtShortRest=Permet de récupérer une utilisation de Rage sur un repos court au niveau 7 ModUi/&EnableBardExpertiseOneLevelBefore=Activer l'Expertise aux niveaux 2 et 9 au lieu de 3 et 10 -ModUi/&EnableBardHealingBalladOnLongRest=Activer la Ballade de guérison de College of Hope lors d'un repos prolongé +ModUi/&EnableBardHealingBalladOnLongRest=Activez College of Hope Healing Ballad en mode repos prolongé ModUi/&EnableBetaContent=Activer le contenu bêta [Nécessite un redémarrage] ModUi/&EnableCancelEditOnRightMouseClick=Activer les actions d'annulation avec un clic droit de la souris ModUi/&EnableCantripsTriggeringOnWarMagic=Autoriser les tours de passe-passe à déclencher une attaque bonus supplémentaire de Magie de guerre -ModUi/&EnableCastersToCountMaxPreparedFromTable=Activez tous les rouleaux préparés pour déterminer le nombre maximal de rouleaux préparés à partir d'un tableau au lieu d'une formule ModUi/&EnableCharactersOnFireToEmitLight=Les personnages En feu doivent émettre de la lumière [Cube de lumière, Élémentaire de feu, Bouffon de feu, Balbuzard pêcheur de feu, Araignée de feu et famille de conditions en feu] ModUi/&EnableCustomPortraits=Activer les portraits personnalisés ModUi/&EnableCustomPortraitsHelp=• Placez vos portraits personnalisés dans les sous-dossiers Personal ou PreGen, nommés d'après le prénom du héros [c'est-à-dire : Anton, Celia, Nialla, etc.]\n• Utilisez des images PNG, de 256 x 384 pixels, avec un calque de transparence [utilisez GIMP pour de meilleurs résultats] @@ -142,6 +141,7 @@ ModUi/&EnableMonkImprovedUnarmoredMovementToMoveOnTheWall=Activez Défense supérieure pour remplacer le Corps vide au niveau 18 ModUi/&EnableMonkWeaponSpecialization=Activez la spécialisation des armes aux niveaux 2 et 11 [le type d'arme sélectionné devient une arme de moine pour vous] ModUi/&EnableMulticlass=Activer multiclasse [Nécessite un redémarrage] +ModUi/&EnableOneDnDPreparedSpellsTables=Permettre à tous les lanceurs de sorts d'utiliser les nouvelles tables de sorts préparés [Barde, Clerc, Druide, Paladin, Rôdeur, Sorcier, Magicien] ModUi/&EnableOneDndHealingSpellsBuf=Activer le buff des dés de soin sur Soin des blessures, Mot de soin, Soin de masse des blessures et Mot de soin de masse ModUi/&EnablePaladinLayOnHandsAsBonusAction=Activer Imposition des mains comme action bonus ModUi/&EnablePaladinSmiteAsBonusAction=Activer Smite comme action bonus @@ -299,10 +299,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=Remplissez le magasin de Gori ModUi/&StockHugoStoreWithAdditionalFoci=Remplissez la boutique Hugo avec le bâton arcanique, le cou de druide, le bâton et le club définis comme objets prioritaires ModUi/&Subclasses=Sous-classes ModUi/&Subraces=Sous-races -ModUi/&SwapAbjurationSavant=Échangez Abjurer Abjuration Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] +ModUi/&SwapAbjurationSavant=Échangez Abjurer Abjuration Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] ModUi/&SwapCraftedItemAndRecipeIcons=+ Échangez les icônes de recettes et d'objets fabriqués dans la boutique -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Échangez les fonctionnalités Évocateur Sculpture des sorts et Puissant tour de passe-passe -ModUi/&SwapEvocationSavant=Échangez Evoker Evocation Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Échangez les fonctionnalités Évocateur Sculpture Sorts et Potent Cantrip +ModUi/&SwapEvocationSavant=Échangez Evoker Evocation Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] ModUi/&SwapOneDndBarkskinSpell=Échangez Barkskin avec la version 5e 2024 [action bonus, pas de concentration, CA réglée à 17] ModUi/&SwapWarlockToUseOneDndInvocationProgression=Échangez la progression des Invocations avec la version 5e 2024 ModUi/&TableTopButton=Sélectionnez le contenu de la table diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 98f3707ba1..ff5e241e2c 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -183,6 +183,8 @@ Feature/&PowerTeleportSummonDescription=Puoi teletrasportarti in qualsiasi luogo Feature/&PowerTeleportSummonTitle=Teletrasporto Feature/&PowerVanishSummonDescription=Puoi far svanire la tua evocazione. Feature/&PowerVanishSummonTitle=Svanire +Feature/&PowerWarlockMagicalCunningDescription=Puoi usare la tua azione bonus per recuperare un numero di slot patto spesi non superiore alla metà del tuo massimo (arrotondato per eccesso). Una volta usata questa caratteristica, non puoi più farlo finché non finisci un riposo lungo. +Feature/&PowerWarlockMagicalCunningTitle=Astuzia magica Feature/&ToolGainChoicesPluralDescription=Scegli {0} di questi strumenti: {1} Feature/&ToolGainChoicesSingleDescription=Scegli uno di questi strumenti: {1} Feature/&VisionBlindsightDescription=Hai la vista cieca. diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 50ec958a5d..4c5e271047 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -103,11 +103,10 @@ ModUi/&EnableBarbarianFightingStyle=Abilita la scelta Stile di co ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Abilita il buff e il debuff Attacco sconsiderato per terminare all'inizio del turno successivo ModUi/&EnableBarbarianRegainOneRageAtShortRest=Abilita il recupero di un utilizzo di Rabbia durante un breve riposo al livello 7 ModUi/&EnableBardExpertiseOneLevelBefore=Abilita Competenza ai livelli 2 e 9 invece che 3 e 10 -ModUi/&EnableBardHealingBalladOnLongRest=Abilita College of Hope Ballata curativa durante il riposo lungo +ModUi/&EnableBardHealingBalladOnLongRest=Abilita College of Hope Ballata curativa durante il riposo lungo ModUi/&EnableBetaContent=Abilita contenuto beta [Richiede riavvio] ModUi/&EnableCancelEditOnRightMouseClick=Abilita l'annullamento delle azioni con il clic destro del mouse ModUi/&EnableCantripsTriggeringOnWarMagic=Consenti ai trucchetti di attivare l'attacco bonus extra Magia di guerra -ModUi/&EnableCastersToCountMaxPreparedFromTable=Abilita tutti i caster preparati per determinare il conteggio massimo preparato da una tabella anziché da una formula ModUi/&EnableCharactersOnFireToEmitLight=I personaggi In fiamme dovrebbero emettere luce [Cubo di luce, Elementale di fuoco, Giullare di fuoco, Falco pescatore di fuoco, Ragno di fuoco e famiglia di condizioni in fiamme] ModUi/&EnableCustomPortraits=Abilita Ritratti personalizzati ModUi/&EnableCustomPortraitsHelp=• Posiziona i tuoi ritratti personalizzati nelle sottocartelle Personale o PreGen, chiamate con il nome dell'eroe [ad esempio: Anton, Celia, Nialla, ecc.]\n• Utilizza immagini PNG, di dimensioni 256 x 384 pixel, con un livello di trasparenza [utilizza GIMP per risultati migliori] @@ -142,6 +141,7 @@ ModUi/&EnableMonkImprovedUnarmoredMovementToMoveOnTheWall=Abilita Difesa superiore per sostituire Corpo vuoto al livello 18 ModUi/&EnableMonkWeaponSpecialization=Abilita Specializzazione nelle armi ai livelli 2 e 11 [il tipo di arma selezionato diventa per te un'arma da monaco] ModUi/&EnableMulticlass=Abilita multiclasse [Richiede riavvio] +ModUi/&EnableOneDnDPreparedSpellsTables=Abilita tutti i incantatori a usare le nuove tabelle degli incantesimi preparati [Bardo, Chierico, Druido, Paladino, Ranger, Stregone, Mago] ModUi/&EnableOneDndHealingSpellsBuf=Abilita il potenziamento dei dadi curativi su Cura Ferite, Parola Curativa, Cura Ferite di Massa e Parola Curativa di Massa ModUi/&EnablePaladinLayOnHandsAsBonusAction=Abilita Imposizione delle mani come azione bonus ModUi/&EnablePaladinSmiteAsBonusAction=Abilita Colpisci come azione bonus @@ -299,10 +299,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=Riempi il negozio di Gorim co ModUi/&StockHugoStoreWithAdditionalFoci=Fai scorta nel negozio di Hugo con Bastone Arcano, Collo del Druido, Bastone e Mazza impostati come oggetti principali ModUi/&Subclasses=Sottoclassi ModUi/&Subraces=Sottorazze -ModUi/&SwapAbjurationSavant=Sostituisci Abjurer Abjuration Savant con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] +ModUi/&SwapAbjurationSavant=Sostituisci Abjurer Savant dell'Abjurazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] ModUi/&SwapCraftedItemAndRecipeIcons=+ Scambia le icone delle ricette e degli oggetti realizzati nel negozio -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Scambia le funzionalità Sculpt Spells e Potent Cantrip di Evoker -ModUi/&SwapEvocationSavant=Sostituisci Evocatore Sapiente dell'evocazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Scambia le funzionalità Evocatore Incantesimi di Scultura e Trucchetto Potente +ModUi/&SwapEvocationSavant=Sostituisci Evocatore Sapiente dell'evocazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] ModUi/&SwapOneDndBarkskinSpell=Sostituisci Barkskin con la versione 5e 2024 [azione bonus, nessuna concentrazione, CA impostata a 17] ModUi/&SwapWarlockToUseOneDndInvocationProgression=Scambia la progressione delle Invocazioni con la versione 5e 2024 ModUi/&TableTopButton=Seleziona contenuto Tabletop diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index 2b25d5fc75..1018d4697d 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -183,6 +183,8 @@ Feature/&PowerTeleportSummonDescription=キャスターから 5 フィート以 Feature/&PowerTeleportSummonTitle=テレポート Feature/&PowerVanishSummonDescription=召喚を消滅させることができます。 Feature/&PowerVanishSummonTitle=消え去る +Feature/&PowerWarlockMagicalCunningDescription=ボーナス アクションを使用して、消費した契約スロットの数を、最大値の半分 (切り上げ) まで回復できます。この機能を一度使用すると、大休憩を終了するまで再度使用することはできません。 +Feature/&PowerWarlockMagicalCunningTitle=魔法の狡猾さ Feature/&ToolGainChoicesPluralDescription=次のツールから {0} 個を選択してください: {1} Feature/&ToolGainChoicesSingleDescription=次のツールのいずれかを選択します: {1} Feature/&VisionBlindsightDescription=あなたは盲目です。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index c4847c55a4..1c36249e60 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -103,11 +103,10 @@ ModUi/&EnableBarbarianFightingStyle=レベル2で戦闘スタイ ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=無謀な攻撃の強化と弱体化を有効にして、次のターンの開始時に終了します ModUi/&EnableBarbarianRegainOneRageAtShortRest=レベル 7 で、短い休憩中に 1 回の Rage 使用を回復できるようになります。 ModUi/&EnableBardExpertiseOneLevelBefore=エキスパートをレベル3と10ではなくレベル2と9で有効にする -ModUi/&EnableBardHealingBalladOnLongRest=長い休息時に希望の大学の癒しのバラードを有効にする +ModUi/&EnableBardHealingBalladOnLongRest=長い休息時に希望の大学 癒しのバラードを有効にする ModUi/&EnableBetaContent=ベータ版コンテンツを有効にする [再起動が必要] ModUi/&EnableCancelEditOnRightMouseClick=マウスの右クリックでキャンセルアクションを有効にする ModUi/&EnableCantripsTriggeringOnWarMagic=呪文で戦争魔法の追加ボーナス攻撃を発動できるようにする -ModUi/&EnableCastersToCountMaxPreparedFromTable=すべての準備済みキャスターを有効にして、数式ではなく表から最大準備数を決定できるようにします。 ModUi/&EnableCharactersOnFireToEmitLight=On Fire のキャラクターは、[Cube of Light、Fire Elemental、Fire Jester、Fire Osprey、Fire Spider、および On Fire 状態ファミリー] を発するはずです。 ModUi/&EnableCustomPortraits=カスタムポートレートを有効にする ModUi/&EnableCustomPortraitsHelp=• カスタムポートレートを、主人公のファーストネームにちなんで名付けたサブフォルダ Personal または PreGen に配置します [例: Anton、Celia、Nialla など]\n• 透明レイヤー付きの 256 x 384 ピクセルの PNG 画像を使用します [最良の結果を得るには GIMP を使用します] @@ -142,6 +141,7 @@ ModUi/&EnableMonkImprovedUnarmoredMovementToMoveOnTheWall=非装 ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=レベル18で優れた防御力を有効にして空の体を置き換えます ModUi/&EnableMonkWeaponSpecialization=レベル 2 と 11 で 武器特化 を有効にします [選択した武器の種類がモンク武器になります] ModUi/&EnableMulticlass=マルチクラスを有効にする [再起動が必要] +ModUi/&EnableOneDnDPreparedSpellsTables=すべての キャスター が新しい準備済み呪文テーブル [吟遊詩人、聖職者、ドルイド、パラディン、レンジャー、ソーサラー、ウィザード] を使用できるようにします。 ModUi/&EnableOneDndHealingSpellsBuf=治癒の傷、治癒の言葉、大量治癒の傷、大量治癒の言葉に治癒ダイスバフを有効にします ModUi/&EnablePaladinLayOnHandsAsBonusAction=ボーナスアクションとして手を置くを有効にする ModUi/&EnablePaladinSmiteAsBonusAction=ボーナスアクションとしてスマイトを有効にする @@ -299,10 +299,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=ゴリムの店に魔法以 ModUi/&StockHugoStoreWithAdditionalFoci=ヒューゴの店に、アーケイン スタッフ、ドルイド ネック、スタッフ、クラブをフォーカス アイテムとして設定して在庫します。 ModUi/&Subclasses=サブクラス ModUi/&Subraces=亜種族 -ModUi/&SwapAbjurationSavant=Abjurer Abjuration Savant を 5e 2024 バージョンの [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびに 1 つずつ追加で習得する] と入れ替えます +ModUi/&SwapAbjurationSavant=Abjurer Abjuration Savant を 5e 2024 バージョンの [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびに 1 つずつ追加で習得する] と入れ替えます ModUi/&SwapCraftedItemAndRecipeIcons=+ ショップでレシピとクラフトアイテムのアイコンを交換 -ModUi/&SwapEvocationPotentCantripAndSculptSpell=エヴォーカーのスカルプトスペルポテンシャルキャントリップの機能を入れ替えます -ModUi/&SwapEvocationSavant=Evoker Evocation Savant を 5e 2024 バージョンの [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびにさらに 1 つ習得する] と入れ替えます +ModUi/&SwapEvocationPotentCantripAndSculptSpell=エヴォーカースカルプトスペルとポテンシャルキャントリップの機能を入れ替えます +ModUi/&SwapEvocationSavant=Evoker Evocation Savant を 5e 2024 バージョン [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびにさらに 1 つ習得する] と入れ替えます ModUi/&SwapOneDndBarkskinSpell=Barkskin を 5e 2024 バージョンの [ボーナス アクション、集中力なし、AC を 17 に設定] と交換します。 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Invocations の進行を 5e 2024 バージョンと入れ替える ModUi/&TableTopButton=テーブルトップコンテンツを選択 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 1f57c07f83..f64b395665 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -183,6 +183,8 @@ Feature/&PowerTeleportSummonDescription=시전자로부터 5피트 이내의 어 Feature/&PowerTeleportSummonTitle=텔레포트 Feature/&PowerVanishSummonDescription=소환을 사라지게 할 수 있습니다. Feature/&PowerVanishSummonTitle=사라지다 +Feature/&PowerWarlockMagicalCunningDescription=보너스 액션을 사용하면 최대치의 절반 이하(올림)의 소모된 계약 슬롯을 회복할 수 있습니다. 이 기능을 사용하면 긴 휴식을 마칠 때까지 다시 사용할 수 없습니다. +Feature/&PowerWarlockMagicalCunningTitle=마법의 교활함 Feature/&ToolGainChoicesPluralDescription=다음 도구 중 {0}개를 선택하세요: {1} Feature/&ToolGainChoicesSingleDescription=다음 도구 중 하나를 선택하십시오: {1} Feature/&VisionBlindsightDescription=당신은 시력이 없습니다. diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 13b57d443e..e89a75a95d 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -103,11 +103,10 @@ ModUi/&EnableBarbarianFightingStyle=레벨 2에서 격투 스타 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=다음 턴 시작 시 무모한 공격 버프와 디버프가 완료되도록 활성화합니다. ModUi/&EnableBarbarianRegainOneRageAtShortRest=7레벨에서 짧은 휴식 시간 동안 격노 한 번 회복 가능 ModUi/&EnableBardExpertiseOneLevelBefore=레벨 3과 10 대신 레벨 2와 9에서 전문성을 활성화합니다. -ModUi/&EnableBardHealingBalladOnLongRest=긴 휴식 시 College of Hope 힐링 발라드 활성화 +ModUi/&EnableBardHealingBalladOnLongRest=긴 휴식 시 College of Hope 힐링 발라드 활성화 ModUi/&EnableBetaContent=베타 콘텐츠 활성화 [재시작 필요] ModUi/&EnableCancelEditOnRightMouseClick=마우스 오른쪽 클릭으로 취소 작업 활성화 ModUi/&EnableCantripsTriggeringOnWarMagic=주문이 전쟁 마법 추가 보너스 공격을 발동하도록 허용합니다. -ModUi/&EnableCastersToCountMaxPreparedFromTable=공식 대신 표에서 최대 준비 개수를 결정하려면 모든 준비된 캐스터를 활성화하세요. ModUi/&EnableCharactersOnFireToEmitLight=불타는 캐릭터는 빛을 내야 합니다. [빛의 큐브, 불의 정령, 불의 광대, 불의 물수리, 불의 거미, 불의 상태 패밀리] ModUi/&EnableCustomPortraits=사용자 정의 초상화 활성화 ModUi/&EnableCustomPortraitsHelp=• 영웅의 이름을 따서 Personal 또는 PreGen 하위 폴더에 사용자 지정 초상화를 넣습니다. [예: Anton, Celia, Nialla 등]\n• 투명 레이어가 있는 256 x 384픽셀 크기의 PNG 이미지를 사용합니다. [최상의 결과를 위해 GIMP를 사용하세요] @@ -142,6 +141,7 @@ ModUi/&EnableMonkImprovedUnarmoredMovementToMoveOnTheWall=개선 ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=레벨 18에서 빈 몸을 대체하기 위해 우수한 방어력을 활성화합니다. ModUi/&EnableMonkWeaponSpecialization=레벨 2와 11에서 무기 전문화를 활성화합니다. [선택한 무기 유형이 당신에게 수도사 무기가 됩니다] ModUi/&EnableMulticlass=다중클래스 활성화 [재시작 필요] +ModUi/&EnableOneDnDPreparedSpellsTables=모든 주문자가 새로 준비된 주문표 [바드, 성직자, 드루이드, 성기사, 레인저, 마법사, 마법사]를 사용할 수 있도록 합니다. ModUi/&EnableOneDndHealingSpellsBuf=상처 치료, 치유의 말씀, 대량 상처 치료, 대량 치유의 말씀에 치유 주사위 버프를 활성화합니다. ModUi/&EnablePaladinLayOnHandsAsBonusAction=안수를 보너스 액션으로 활성화합니다. ModUi/&EnablePaladinSmiteAsBonusAction=Smite를 보너스 액션으로 활성화합니다. @@ -299,10 +299,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=고림의 상점에 마법이 ModUi/&StockHugoStoreWithAdditionalFoci=비전 지팡이, 드루이드 목, 지팡이 및 클럽 세트를 초점 아이템으로 휴고의 상점에 비축하세요. ModUi/&Subclasses=서브클래스 ModUi/&Subraces=아종 -ModUi/&SwapAbjurationSavant=Abjurer Abjuration Savant를 5e 2024 버전과 교환하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] +ModUi/&SwapAbjurationSavant=Abjurer Abjuration Savant를 5e 2024 버전과 교환하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] ModUi/&SwapCraftedItemAndRecipeIcons=+ 상점에서 레시피와 제작 아이템 아이콘 교환 -ModUi/&SwapEvocationPotentCantripAndSculptSpell=소환사 조각 주문강력한 주문 기능을 교체하세요 -ModUi/&SwapEvocationSavant=Evoker Evocation Savant를 5e 2024 버전으로 교체하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개씩 더 배우기] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=소환사 조각 주문과 강력한 주문 기능을 교체하세요 +ModUi/&SwapEvocationSavant=Evoker Evocation Savant를 5e 2024 버전으로 교체하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] ModUi/&SwapOneDndBarkskinSpell=Barkskin을 5e 2024 버전 [보너스 액션, 집중 없음, AC 17로 설정]과 교환하세요 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Invocations 진행을 5e 2024 버전으로 바꾸세요 ModUi/&TableTopButton=테이블탑 콘텐츠 선택 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 25447a2bb5..72c6fca04e 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -183,6 +183,8 @@ Feature/&PowerTeleportSummonDescription=Você pode se teletransportar para qualq Feature/&PowerTeleportSummonTitle=Teleporte Feature/&PowerVanishSummonDescription=Você pode fazer sua invocação desaparecer. Feature/&PowerVanishSummonTitle=Desaparecer +Feature/&PowerWarlockMagicalCunningDescription=Você pode usar sua ação bônus para recuperar um número de slots de pacto gastos não mais do que igual à metade do seu máximo (arredondado para cima). Depois de usar esse recurso, você não pode fazer isso novamente até terminar um descanso longo. +Feature/&PowerWarlockMagicalCunningTitle=Astúcia Mágica Feature/&ToolGainChoicesPluralDescription=Escolha {0} destas ferramentas: {1} Feature/&ToolGainChoicesSingleDescription=Escolha uma destas ferramentas: {1} Feature/&VisionBlindsightDescription=Você tem visão cega. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index f8962825e2..672523b15e 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -103,11 +103,10 @@ ModUi/&EnableBarbarianFightingStyle=Habilitar a escolha Estilo de ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Habilitar o bônus e o debuff Ataque Reckless para terminar no início do próximo turno ModUi/&EnableBarbarianRegainOneRageAtShortRest=Habilitar recuperar um uso de Fúria durante um descanso curto no nível 7 ModUi/&EnableBardExpertiseOneLevelBefore=Habilitar Expertise nos níveis 2 e 9 em vez de 3 e 10 -ModUi/&EnableBardHealingBalladOnLongRest=Habilitar College of Hope Healing Ballad em descanso longo +ModUi/&EnableBardHealingBalladOnLongRest=Habilitar College of Hope Healing Ballad em descanso longo ModUi/&EnableBetaContent=Habilitar conteúdo beta [Requer reinicialização] ModUi/&EnableCancelEditOnRightMouseClick=Habilitar ações de cancelamento com clique direito do mouse ModUi/&EnableCantripsTriggeringOnWarMagic=Permitir que truques desencadeiem um ataque bônus extra de Magia de Guerra -ModUi/&EnableCastersToCountMaxPreparedFromTable=Permitir que todos os Rodízios Preparados determinem a contagem máxima preparada a partir de uma tabela em vez de uma fórmula ModUi/&EnableCharactersOnFireToEmitLight=Personagens Em Chamas devem emitir luz [Cubo de Luz, Elemental de Fogo, Bobo da Corte de Fogo, Águia Pescadora de Fogo, Aranha de Fogo e família de condição em chamas] ModUi/&EnableCustomPortraits=Habilitar Retratos personalizados ModUi/&EnableCustomPortraitsHelp=• Coloque seus retratos personalizados em subpastas Pessoal ou PreGen, nomeadas com base no primeiro nome do herói [por exemplo: Anton, Celia, Nialla, etc.]\n• Use imagens PNG, com tamanho de 256 x 384 pixels, com uma camada de transparência [use o GIMP para obter melhores resultados] @@ -142,6 +141,7 @@ ModUi/&EnableMonkImprovedUnarmoredMovementToMoveOnTheWall=Habilitar Defesa Superior para substituir Corpo Vazio no nível 18 ModUi/&EnableMonkWeaponSpecialization=Habilite Especialização em Armas nos níveis 2 e 11 [o tipo de arma selecionado se torna uma arma de monge para você] ModUi/&EnableMulticlass=Habilitar multiclasse [Requer reinicialização] +ModUi/&EnableOneDnDPreparedSpellsTables=Permitir que todos os Conjuradores usem novas tabelas de magias preparadas [Bardo, Clérigo, Druida, Paladino, Patrulheiro, Feiticeiro, Mago] ModUi/&EnableOneDndHealingSpellsBuf=Habilitar bônus de dados de cura em Curar Ferimentos, Palavra de Cura, Curar Ferimentos em Massa e Palavra de Cura em Massa ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Impor as Mãos como ação bônus ModUi/&EnablePaladinSmiteAsBonusAction=Habilitar Smite como ação bônus @@ -299,10 +299,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=Estoque a loja de Gorim com t ModUi/&StockHugoStoreWithAdditionalFoci=Estoque a loja de Hugo com Cajado Arcano, Pescoço de Druida, Cajado e Clube definidos como itens focais ModUi/&Subclasses=Subclasses ModUi/&Subraces=Sub-raças -ModUi/&SwapAbjurationSavant=Troque Abjurador Sábio da Abjuração pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] +ModUi/&SwapAbjurationSavant=Troque Abjurador Sábio da Abjuração pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] ModUi/&SwapCraftedItemAndRecipeIcons=+ Troque ícones de receitas e itens criados na loja -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Troque os recursos Evocador Magias de Escultura e Truque Potente -ModUi/&SwapEvocationSavant=Troque Evocador Sábio da Evocação pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Troque os recursos Evocador Magias de Esculpir e Truque Potente +ModUi/&SwapEvocationSavant=Troque Evocador Sábio da Evocação pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] ModUi/&SwapOneDndBarkskinSpell=Troque Barkskin pela versão 5e 2024 [ação bônus, sem concentração, CA definida como 17] ModUi/&SwapWarlockToUseOneDndInvocationProgression=Troque a progressão de Invocações pela versão 5e 2024 ModUi/&TableTopButton=Selecionar conteúdo de mesa diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index d08bc66ade..129538112b 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -183,6 +183,8 @@ Feature/&PowerTeleportSummonDescription=Вы можете телепортиро Feature/&PowerTeleportSummonTitle=Телепортироваться Feature/&PowerVanishSummonDescription=Вы можете заставить призванное существо исчезнуть. Feature/&PowerVanishSummonTitle=Исчезновение +Feature/&PowerWarlockMagicalCunningDescription=Вы можете использовать бонусное действие, чтобы восстановить количество использованных слотов пакта, не более половины вашего максимума (округлять вверх). После того, как вы воспользуетесь этой функцией, вы не сможете сделать это снова, пока не закончите длительный отдых. +Feature/&PowerWarlockMagicalCunningTitle=Магическая хитрость Feature/&ToolGainChoicesPluralDescription=Выберите {0} из этих инструментов: {1} Feature/&ToolGainChoicesSingleDescription=Выберите один из этих инструментов: {1} Feature/&VisionBlindsightDescription=Вы обладаете слепым зрением. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 84db0fa7a8..e8ea189780 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -103,11 +103,10 @@ ModUi/&EnableBarbarianFightingStyle=Включить выбор ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Включить завершение эффектов Безрассудной атаки в начале следующего хода ModUi/&EnableBarbarianRegainOneRageAtShortRest=Включить на уровне 7 возможность восстанавливать один заряд Ярости за короткий отдых ModUi/&EnableBardExpertiseOneLevelBefore=Включить Экспертизу на уровнях 2 и 9 вместо 3 и 10 -ModUi/&EnableBardHealingBalladOnLongRest=Включить Бардам коллегии надежды работу умения Целительная баллада при длительном отдыхе +ModUi/&EnableBardHealingBalladOnLongRest=Включить Колледж Надежды Исцеляющая баллада при длительном отдыхе ModUi/&EnableBetaContent=Включить бета-контент [Необходим перезапуск] ModUi/&EnableCancelEditOnRightMouseClick=Включить отмену действия правым кликом мыши ModUi/&EnableCantripsTriggeringOnWarMagic=Разрешить срабатывание дополнительной бонусной атаки Боевой магии от заговоров -ModUi/&EnableCastersToCountMaxPreparedFromTable=Включить всем заклинателям с Подготовкой заклинаний определение максимального количества подготовленных заклинаний из таблицы вместо формулы [OneDnd] ModUi/&EnableCharactersOnFireToEmitLight=Горящие персонажи должны излучать свет [Куб света, Огненный элементаль, Огненный балагур, Огненная скопа, Огненный паук, а также любые горящие существа] ModUi/&EnableCustomPortraits=Включить Пользовательские портреты ModUi/&EnableCustomPortraitsHelp=• Поместите свои пользовательские портреты в подпапки Personal или PreGen с именами, соответствующими именам героев [т.е.: Антон, Селия, Ниалла и т. д.]\n• Используйте изображения размером 256 x 384 пикселей с прозрачным фоном [для достижения наилучших результатов используйте GIMP] @@ -142,6 +141,7 @@ ModUi/&EnableMonkImprovedUnarmoredMovementToMoveOnTheWall=Позволить и ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Включить Превосходную защиту вместо Пустого тела на уровне 18 ModUi/&EnableMonkWeaponSpecialization=Включить Специализацию на оружии на уровнях 2 и 11 [оружие выбранного типа становится для вас оружием монаха] ModUi/&EnableMulticlass=Включить мультиклассирование [Необходим перезапуск] +ModUi/&EnableOneDnDPreparedSpellsTables=Разрешить всем заклинателям использовать новые подготовленные таблицы заклинаний [Бард, Клирик, Друид, Паладин, Рейнджер, Колдун, Волшебник] ModUi/&EnableOneDndHealingSpellsBuf=Включить улучшение костей лечения для Лечения ран, Лечащего слова, Множественного лечения ран и Множественного лечащего слова [OneDnd] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Включить Наложение рук бонусным действием [OneDnd] ModUi/&EnablePaladinSmiteAsBonusAction=Включить Кару бонусным действием [OneDnd] @@ -299,10 +299,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=Пополнить магаз ModUi/&StockHugoStoreWithAdditionalFoci=Пополнить магазин Хьюго наборами магических фокусировок: Магических посохов, Друидических подвесок, Жезлов и Дубинок ModUi/&Subclasses=Архетипы ModUi/&Subraces=Подрасы -ModUi/&SwapAbjurationSavant=Поменяйте Abjurer Abjuration Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] +ModUi/&SwapAbjurationSavant=Поменяйте Abjurer Abjuration Savant на версию 5e 2024 [изучите 2 школьных заклинания при получении, изучайте еще 1 каждый раз, когда получаете уровень слота] ModUi/&SwapCraftedItemAndRecipeIcons=+ Заменить значок рецепта значком создаваемого предмета в магазине -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Поменять местами умения Волшебника школы Воплощения Построение заклинаний и Мощный заговор [OneDnd] -ModUi/&SwapEvocationSavant=Поменяйте Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Поменяйте местами функции Вызывателя Скульптурных заклинаний и Мощного колдовства +ModUi/&SwapEvocationSavant=Замените Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] ModUi/&SwapOneDndBarkskinSpell=Поменяйте Barkskin на версию 5e 2024 [бонусное действие, нет концентрации, AC установлен на 17] ModUi/&SwapWarlockToUseOneDndInvocationProgression=Поменять местами прогрессию Invocations с версией 5e 2024 ModUi/&TableTopButton=Выберите содержимое Tabletop diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 15c14102d3..1bbd34c208 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -183,6 +183,8 @@ Feature/&PowerTeleportSummonDescription=你可以传送到施法者 5 尺以内 Feature/&PowerTeleportSummonTitle=传送 Feature/&PowerVanishSummonDescription=你可以让你的召唤物消失。 Feature/&PowerVanishSummonTitle=消失 +Feature/&PowerWarlockMagicalCunningDescription=你可以使用奖励行动来恢复已消耗的契约槽数量,但不超过最大值的一半(向上取整)。一旦你使用此功能,你就不能再这样做,直到你完成一次长休。 +Feature/&PowerWarlockMagicalCunningTitle=魔法狡猾 Feature/&ToolGainChoicesPluralDescription=从这些工具中选择 {0}:{1} Feature/&ToolGainChoicesSingleDescription=选择以下工具之一:{1} Feature/&VisionBlindsightDescription=你有盲视。 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 4a6eae97e3..53e267cb15 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -103,11 +103,10 @@ ModUi/&EnableBarbarianFightingStyle=在第 2 级启用战斗风 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=启用鲁莽攻击增益效果和减益效果,在下一回合开始时结束 ModUi/&EnableBarbarianRegainOneRageAtShortRest=在第 7 级时,允许在短暂休息后恢复一次怒气 ModUi/&EnableBardExpertiseOneLevelBefore=在 2 级和 9 级(而不是 3 级和 10 级)启用专业知识 -ModUi/&EnableBardHealingBalladOnLongRest=长时间休息时启用希望学院 治愈之歌 +ModUi/&EnableBardHealingBalladOnLongRest=长时间休息时启用希望学院 治愈之歌 ModUi/&EnableBetaContent=启用测试版内容[需要重启] ModUi/&EnableCancelEditOnRightMouseClick=通过鼠标右键单击启用取消操作 ModUi/&EnableCantripsTriggeringOnWarMagic=允许戏法触发战争魔法额外奖励攻击 -ModUi/&EnableCastersToCountMaxPreparedFromTable=使所有准备好的施法者能够从表格而不是公式中确定最大准备数量 ModUi/&EnableCharactersOnFireToEmitLight=着火的角色应该发光[光之立方体、火元素、火小丑、火鱼鹰、火蜘蛛和着火状态家族] ModUi/&EnableCustomPortraits=启用自定义肖像 ModUi/&EnableCustomPortraitsHelp=• 将自定义肖像放在子文件夹 PersonalPreGen 下,并以英雄名字命名[例如:Anton、Celia、Nialla 等]\n• 使用 PNG 图像,大小为 256 x 384 像素,带有透明层[使用 GIMP 可获得最佳效果] @@ -142,6 +141,7 @@ ModUi/&EnableMonkImprovedUnarmoredMovementToMoveOnTheWall=启用 ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=在 18 级时启用超级防御来替代空虚之身 ModUi/&EnableMonkWeaponSpecialization=在 2 级和 11 级时启用武器专精 [所选武器类型将成为你的武僧武器] ModUi/&EnableMulticlass=启用多类 [需要重启] +ModUi/&EnableOneDnDPreparedSpellsTables=允许所有施法者使用新的准备好的法术表[吟游诗人、牧师、德鲁伊、圣骑士、游侠、术士、魔法师] ModUi/&EnableOneDndHealingSpellsBuf=在治愈伤口、治愈之言、群体治愈伤口和群体治愈之言上启用治疗骰子增益 ModUi/&EnablePaladinLayOnHandsAsBonusAction=启用圣疗术作为奖励行动 ModUi/&EnablePaladinSmiteAsBonusAction=启用 Smite 作为奖励行动 @@ -299,10 +299,10 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=将所有非魔法乐器存 ModUi/&StockHugoStoreWithAdditionalFoci=将 奥术法杖、德鲁伊项链、法杖 和 棍棒 设置为焦点物品,放入 Hugo 的商店 ModUi/&Subclasses=子类 ModUi/&Subraces=亚种 -ModUi/&SwapAbjurationSavant=将 Abjurer Abjuration Savant 与 5e 2024 版本交换 [获得后学习 2 个学校法术,每次提升一个槽位等级时再学习 1 个] +ModUi/&SwapAbjurationSavant=将Abjurer Abjuration Savant 与 5e 2024 版本交换[获得时学习 2 个学校法术,每次获得一个插槽等级时再学习 1 个] ModUi/&SwapCraftedItemAndRecipeIcons=+ 在商店中交换配方和制作物品图标 -ModUi/&SwapEvocationPotentCantripAndSculptSpell=交换召唤师 塑形法术强效咒语功能 -ModUi/&SwapEvocationSavant=将 Evoker Evocation Savant 与 5e 2024 版本交换 [获得后学习 2 个学校法术,每次提升一个槽位等级时再学习 1 个] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=交换召唤师 塑形法术和强力法术功能 +ModUi/&SwapEvocationSavant=将Evoker Evocation Savant 与 5e 2024 版本交换[获得时学习 2 个学校法术,每次获得一个插槽等级时再学习 1 个] ModUi/&SwapOneDndBarkskinSpell=将 Barkskin 与 5e 2024 版本交换[奖励行动,无集中力,AC 设置为 17] ModUi/&SwapWarlockToUseOneDndInvocationProgression=将 Invocations 进程与 5e 2024 版本交换 ModUi/&TableTopButton=选择桌面内容 From b3c5bdbf2ca970a5bba7a2cc015bc0cb078b882c Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 2 Nov 2024 10:24:48 -0700 Subject: [PATCH 25/85] add Fighter tabletop 5e 2024 settings --- .../Behaviors/ModifyPowerPoolAmount.cs | 19 ++++++++++- .../ChangelogHistory.txt | 3 ++ .../Displays/ClassesDisplay.cs | 13 ++++++++ .../Displays/GeneralDisplay.cs | 24 ++++++++++++++ .../Models/CharacterContext.cs | 32 +++++++++++++++++++ SolastaUnfinishedBusiness/Settings.cs | 2 ++ SolastaUnfinishedBusiness/Settings/empty.xml | 6 ++-- .../Settings/zappastuff.xml | 4 ++- .../Translations/de/Settings-de.txt | 10 +++--- .../Translations/en/Others-en.txt | 4 +-- .../Translations/en/Settings-en.txt | 12 ++++--- .../Translations/es/Settings-es.txt | 10 +++--- .../es/SubClasses/WizardAbjuration-es.txt | 2 +- .../es/SubClasses/WizardGraviturgist-es.txt | 6 ++-- .../Translations/fr/Settings-fr.txt | 10 +++--- .../Translations/it/Settings-it.txt | 10 +++--- .../Translations/ja/Settings-ja.txt | 10 +++--- .../Translations/ko/Settings-ko.txt | 10 +++--- .../Translations/pt-BR/Settings-pt-BR.txt | 10 +++--- .../Translations/ru/Settings-ru.txt | 10 +++--- .../Translations/zh-CN/Settings-zh-CN.txt | 10 +++--- 21 files changed, 164 insertions(+), 53 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/ModifyPowerPoolAmount.cs b/SolastaUnfinishedBusiness/Behaviors/ModifyPowerPoolAmount.cs index 629e24aa1a..2a898c4ce9 100644 --- a/SolastaUnfinishedBusiness/Behaviors/ModifyPowerPoolAmount.cs +++ b/SolastaUnfinishedBusiness/Behaviors/ModifyPowerPoolAmount.cs @@ -28,8 +28,24 @@ public int PoolChangeAmount(RulesetCharacter character) AttributeDefinitions.TagEffect, Attribute, out var activeCondition) ? activeCondition.Amount : 0), + PowerPoolBonusCalculationType.SecondWind2024 => GetSecondWindUsages(), _ => Value }; + + int GetSecondWindUsages() + { + if (!Main.Settings.SwapSecondWindToUseOneDndUsagesProgression) + { + return 1; + } + + return character.GetClassLevel(Attribute) switch + { + >= 10 => 4, + >= 4 => 3, + _ => 2 + }; + } } } @@ -50,5 +66,6 @@ public enum PowerPoolBonusCalculationType ClassLevel, Attribute, AttributeModifier, - ConditionAmount + ConditionAmount, + SecondWind2024 } diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 982a918bfe..975d42024e 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,11 +1,14 @@ 1.5.97.37: +- added Character > Classes > 'Add persuasion to Fighter skill options at level 1' [OneDnd] - added Character > Classes > 'Change Bard bardic inspiration duration to 1hr instead of 10 minutes' [OneDnd] - added Character > Classes > 'Enable Bard Expertise at levels 2 and 9 instead of 3 and 10' [OneDnd] - added Character > Classes > 'Enable Ritual casting on all casters' [OneDnd] - added Character > Classes > 'Enable Warlock magical cunning at level 2' [OneDnd] - added Character > Classes > 'Remove Bard song of rest at level 2' [OneDnd] +- added Character > Classes > 'Swap Fighter second wind to use 5e 2024 usages progression' [OneDnd] - added Character > Classes > 'Swap Warlock invocations progression with 5e 2024 version' [OneDnd] +- added Character > Spells > 'Enable all casters to use new prepared spells tables' [OneDnd] - added Character > Spells > 'Swap Barkskin with 5e 2024 version' [OneDnd] - added Character > Subclasses > 'Swap Abjurer abjuration savant with 5e 2024 version' [OneDnd] - added Character > Subclasses > 'Swap Evoker evocation savant with 5e 2024 version' [OneDnd] diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index 8bac7f657c..3b7c0fcc70 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -120,6 +120,13 @@ internal static void DisplayClasses() CharacterContext.SwitchFighterLevelToIndomitableSavingReroll(); } + toggle = Main.Settings.AddPersuasionToFighterSkillOptions; + if (UI.Toggle(Gui.Localize("ModUi/&AddPersuasionToFighterSkillOptions"), ref toggle, UI.AutoWidth())) + { + Main.Settings.AddPersuasionToFighterSkillOptions = toggle; + CharacterContext.SwitchPersuasionToFighterSkillOptions(); + } + toggle = Main.Settings.EnableFighterWeaponSpecialization; if (UI.Toggle(Gui.Localize("ModUi/&EnableFighterWeaponSpecialization"), ref toggle, UI.AutoWidth())) { @@ -127,6 +134,12 @@ internal static void DisplayClasses() CharacterContext.SwitchFighterWeaponSpecialization(); } + toggle = Main.Settings.SwapSecondWindToUseOneDndUsagesProgression; + if (UI.Toggle(Gui.Localize("ModUi/&SwapSecondWindToUseOneDndUsagesProgression"), ref toggle, UI.AutoWidth())) + { + Main.Settings.SwapSecondWindToUseOneDndUsagesProgression = toggle; + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&MonkTitle") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 62980df90e..969a4a62c5 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -334,6 +334,19 @@ private static void DisplayOneDnd() CharacterContext.SwitchFighterLevelToIndomitableSavingReroll(); } + toggle = Main.Settings.AddPersuasionToFighterSkillOptions; + if (UI.Toggle(Gui.Localize("ModUi/&AddPersuasionToFighterSkillOptions"), ref toggle, UI.AutoWidth())) + { + Main.Settings.AddPersuasionToFighterSkillOptions = toggle; + CharacterContext.SwitchPersuasionToFighterSkillOptions(); + } + + toggle = Main.Settings.SwapSecondWindToUseOneDndUsagesProgression; + if (UI.Toggle(Gui.Localize("ModUi/&SwapSecondWindToUseOneDndUsagesProgression"), ref toggle, UI.AutoWidth())) + { + Main.Settings.SwapSecondWindToUseOneDndUsagesProgression = toggle; + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&MonkTitle") + ":"); UI.Label(); @@ -459,6 +472,17 @@ private static void DisplayOneDnd() SrdAndHouseRulesContext.SwitchOneDndWizardSchoolOfMagicLearningLevel(); } + UI.Label(); + UI.Label("" + Gui.Localize("ModUi/&DocsRaces") + ":"); + UI.Label(); + + toggle = Main.Settings.EnableAlternateHuman; + if (UI.Toggle(Gui.Localize("ModUi/&EnableAlternateHuman"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableAlternateHuman = toggle; + CharacterContext.SwitchFirstLevelTotalFeats(); + } + UI.Label(); UI.Label("" + Gui.Localize("ModUi/&DocsSpells") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index dda51388c2..a89f138ec3 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -204,6 +204,7 @@ internal static void LateLoad() LoadSorcererQuickened(); LoadVision(); LoadVisuals(); + LoadSecondWindToUseOneDndUsagesProgression(); BuildBarbarianBrutalStrike(); BuildRogueCunningStrike(); SwitchAsiAndFeat(); @@ -217,6 +218,7 @@ internal static void LateLoad() SwitchDruidKindredBeastToUseCustomInvocationPools(); SwitchEveryFourLevelsFeats(); SwitchEveryFourLevelsFeats(true); + SwitchPersuasionToFighterSkillOptions(); SwitchFighterLevelToIndomitableSavingReroll(); SwitchFighterWeaponSpecialization(); SwitchFirstLevelTotalFeats(); @@ -669,6 +671,36 @@ internal static void SwitchFighterLevelToIndomitableSavingReroll() : "Feature/&IndomitableResistanceDescription"; } + internal static void SwitchPersuasionToFighterSkillOptions() + { + if (Main.Settings.AddPersuasionToFighterSkillOptions) + { + PointPoolFighterSkillPoints.restrictedChoices.TryAdd(SkillDefinitions.Persuasion); + } + else + { + PointPoolFighterSkillPoints.restrictedChoices.Remove(SkillDefinitions.Persuasion); + } + } + + private static void LoadSecondWindToUseOneDndUsagesProgression() + { + PowerFighterSecondWind.AddCustomSubFeatures( + HasModifiedUses.Marker, + new ModifyPowerPoolAmount + { + PowerPool = PowerFighterSecondWind, + Type = PowerPoolBonusCalculationType.SecondWind2024, + Attribute = FighterClass + }, + new ModifyPowerPoolAmount + { + PowerPool = PowerFighterSecondWind, + Type = PowerPoolBonusCalculationType.SecondWind2024, + Attribute = FighterClass + }); + } + internal static void SwitchFighterWeaponSpecialization() { var levels = new[] { 8, 16 }; diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index c7e43d79e7..02f5ee0e93 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -271,6 +271,8 @@ public class Settings : UnityModManager.ModSettings public bool EnableBarbarianRecklessSameBuffDebuffDuration { get; set; } public bool EnableBarbarianRegainOneRageAtShortRest { get; set; } public bool AddFighterLevelToIndomitableSavingReroll { get; set; } + public bool AddPersuasionToFighterSkillOptions { get; set; } + public bool SwapSecondWindToUseOneDndUsagesProgression { get; set; } public bool EnableFighterWeaponSpecialization { get; set; } public bool AddHumanoidFavoredEnemyToRanger { get; set; } public bool EnableRangerNatureShroudAt10 { get; set; } diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index 7f0334a526..6ec6555302 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -557,6 +557,8 @@ false false false + false + false false false false @@ -1036,8 +1038,4 @@ false false false - 0 - false - false - false \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index d40b223290..84c2d92199 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -1,6 +1,6 @@ - 3 + 4 0 0 false @@ -599,6 +599,8 @@ true true true + false + false false true true diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 88c4a1c88c..13e54f5657 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -9,6 +9,7 @@ ModUi/&AddFighterLevelToIndomitableSavingReroll=Füge die Klassenstufe als Bonus ModUi/&AddHumanoidFavoredEnemyToRanger=Aktivieren Sie Humanoide als bevorzugte Feinde ModUi/&AddNewWeaponsAndRecipesToShops=Neue Waffen und Rezepte zu den Läden hinzufügen [Handbandagen, Hellebarden, Piken, lange Streitkolben, Handarmbrüste] [Neustart erforderlich] ModUi/&AddPaladinSmiteToggle=Fügen Sie einen Schalter hinzu, um Paladinen zu erlauben, Smites nur bei kritischen Treffern zu aktivieren [nützlich, um Reaktionsaufforderungen zu minimieren] +ModUi/&AddPersuasionToFighterSkillOptions=Fügen Sie Überredung zu den Fertigkeitsoptionen auf Stufe 1 hinzu ModUi/&AddPickPocketableLoot=Beute, die durch Taschendiebstahl gestohlen werden kann, hinzufügen [empfohlen, wenn die Fähigkeit Taschendiebstahl aktiviert ist] ModUi/&AddToStore={0} hinzufügen ModUi/&Advanced=Erweitert: [Neustart erforderlich] @@ -96,7 +97,7 @@ ModUi/&EnableAdditionalIconsOnLevelMap=Zusätzliche Symbole für Lager, Ausgäng ModUi/&EnableAdditionalItemsInDungeonMaker=Modifizierte Elemente zum Editor hinzufügen ModUi/&EnableAlternateHuman=Aktiviere den alternativen Menschen [+1 Talent / +2 Attributauswahl / +1 Fertigkeit] ModUi/&EnableAlternateVotingSystem=Alternatives Abstimmungssystem aktivieren [Auswahlgewicht = Stimmen * Charisma-Modifikator des Helden] -ModUi/&EnableBG3AbjurationArcaneWard=Aktivieren Sie die Abjurer Arcane Ward-Implementierung, damit sie sich wie BG3 verhält +ModUi/&EnableBG3AbjurationArcaneWard=Aktivieren Sie die Implementierung von Abjurer Arcane Ward, damit sie sich wie BG3 verhält ModUi/&EnableBG3AbjurationArcaneWardHelp=[Verringert sich jedes Mal um 1, wenn Schaden verhindert wird, statt um verhinderten Schaden. Es ist nicht nötig, einen Bannzauber zu wirken, um aktiv zu sein,\naber der Maximalwert beträgt 2x Zaubererstufe statt 2x Zaubererstufe + INT-Mod und wird bei einer langen Pause nur auf die Hälfte aufgeladen] ModUi/&EnableBarbarianBrutalStrike=Aktiviere Brutal Strike und Brutal Strike Improvement auf den Leveln 9, 13 und 17. ModUi/&EnableBarbarianFightingStyle=Aktiviere die Auswahl Kampfstil auf Stufe 2. @@ -157,7 +158,7 @@ ModUi/&EnableRitualOnAllCasters=Aktivieren Sie das Wirken von Rit ModUi/&EnableRogueCunningStrike=Aktiviere Cunning Strike und Devious Strike auf den Leveln 5 und 14 [du lässt 1 Schleichangriffswürfel für zusätzliche Treffereffekte weg] ModUi/&EnableRogueFightingStyle=Aktiviere die Auswahl Kampfstil auf Stufe 2. ModUi/&EnableRogueSteadyAim=Aktivieren Sie Zielen ohne Unterbrechung auf Stufe 3 [Bonusaktion verschafft einen Vorteil bei Ihrem nächsten Angriffswurf in der aktuellen Runde, wenn Sie sich noch nicht bewegt haben] -ModUi/&EnableRogueStrSaving=Aktiviere Hoodlum DEX- oder STR-Modifikatoren bei Cunning/Devious Strike, Debilitating/Improved Strike und Hail of Blades +ModUi/&EnableRogueStrSaving=Aktivieren Sie Hoodlum DEX- oder STR-Modifikatoren bei Cunning/Devious Strike ModUi/&EnableSignatureSpellsRelearn=Aktiviere, dass Signaturzauber bei jeder langen Pause vorbereitet werden [statt einmal auf Stufe 20] ModUi/&EnableSorcererMagicalGuidance=Aktiviere Magische Führung auf Stufe 5. ModUi/&EnableSorcererQuickenedAction=Aktivieren Sie die Aktion Beschleunigter Zauber, um das Wirken des Hauptaktionszaubers mit angewandter beschleunigter Metamagie zu ermöglichen. @@ -300,10 +301,11 @@ ModUi/&StockHugoStoreWithAdditionalFoci=Füllen Sie Hugos Laden mit Unterklassen ModUi/&Subraces=Unterrassen ModUi/&SwapAbjurationSavant=Tauschen Sie Abjurer Abjuration Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erwerben, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] -ModUi/&SwapCraftedItemAndRecipeIcons=+ Rezepte und Symbole für hergestellte Gegenstände im Shop austauschen -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Tauschen Sie die Funktionen Evoker Sculpt Spells und Potent Cantrip aus +ModUi/&SwapCraftedItemAndRecipeIcons=+ Rezepte und Symbole für hergestellte Gegenstände im Shop austauschenModUi/&SwapEvocationSavant=Tauschen Sie Evoker Evocation Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Tauschen Sie die Funktionen Evoker Sculpt Spells und Potent Cantrip aus ModUi/&SwapEvocationSavant=Tauschen Sie Evoker Evocation Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] ModUi/&SwapOneDndBarkskinSpell=Tauschen Sie Barkskin gegen die 5e 2024-Version aus [Bonusaktion, keine Konzentration, AC auf 17 eingestellt] +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Tauschen Sie Second Wind aus, um den Nutzungsfortschritt von 5e 2024 zu verwenden. ModUi/&SwapWarlockToUseOneDndInvocationProgression=Tauschen Sie den Fortschritt der Anrufungen mit der Version 5e 2024 aus. ModUi/&TableTopButton=Tabletop-Inhalt auswählen ModUi/&TableTopHelp1=• In den folgenden Abschnitten werden die im Mod verstreuten Einstellungen für 5e 2014 und 2024 neu gruppiert und dupliziert, damit Sie es einfacher haben diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index a0c4f907c6..edd948ddde 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -95,8 +95,6 @@ Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=If you fail a saving throw, you can reroll it with a bonus equal to your Fighter level. If you do so, you must use the new roll, and you can't use this feature again until you finish a long rest. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Expanded Spells -Feature/&PowerWarlockMagicalCunningTitle=Magical Cunning -Feature/&PowerWarlockMagicalCunningDescription=You can use your bonus action to regain a number of expended pact slots no more than equal to half your maximum (round up). Once you use this feature, you can't do so again until you finish a long rest. Feature/&FeatureMonkBodyAndMindDescription=You have honed your body and mind to new heights. Your Dexterity and Wisdom increase by 4. Feature/&FeatureMonkBodyAndMindTitle=Body and Mind Feature/&FeatureMonkHeightenedMetabolismDescription=Your training has pushed your body and mind to new levels. Your Flurry of Blows, Patient Defense, and Step of the Wind gain the following benefits:\n• Flurry of Blows: When you use Flurry of Blows, you make three Unarmed Strikes with it instead of two.\n• Patient Defense: When you use Patient Defense, you gain a number of temporary hit points equal to two rolls of your Martial Arts die.\n• Step of the Wind: When you use either Step of the Wind feature (Disengage or Dash), you also gain the benefits of the other effect. @@ -185,6 +183,8 @@ Feature/&PowerTeleportSummonDescription=You can teleport to any location within Feature/&PowerTeleportSummonTitle=Teleport Feature/&PowerVanishSummonDescription=You can make your summon vanish. Feature/&PowerVanishSummonTitle=Vanish +Feature/&PowerWarlockMagicalCunningDescription=You can use your bonus action to regain a number of expended pact slots no more than equal to half your maximum (round up). Once you use this feature, you can't do so again until you finish a long rest. +Feature/&PowerWarlockMagicalCunningTitle=Magical Cunning Feature/&ToolGainChoicesPluralDescription=Choose {0} of these tools: {1} Feature/&ToolGainChoicesSingleDescription=Choose one of these tools: {1} Feature/&VisionBlindsightDescription=You have blindsight. diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 28afdb64ed..aa02cd3973 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -9,6 +9,7 @@ ModUi/&AddFighterLevelToIndomitableSavingReroll=Add the class level as a bonus t ModUi/&AddHumanoidFavoredEnemyToRanger=Enable Humanoid preferred enemies ModUi/&AddNewWeaponsAndRecipesToShops=Add new weapons and recipes to shops [hand wraps, halberds, pikes, long maces, hand crossbows] [Requires Restart] ModUi/&AddPaladinSmiteToggle=Add a toggle to allow Paladins to only enable smites on critical hits [useful to minimize reaction prompts] +ModUi/&AddPersuasionToFighterSkillOptions=Add Persuasion to skill options at level 1 ModUi/&AddPickPocketableLoot=Add pickpocketable loot [suggested if Pickpocket feat is enabled] ModUi/&AddToStore=Add {0} ModUi/&Advanced=Advanced: [Requires Restart] @@ -96,7 +97,7 @@ ModUi/&EnableAdditionalIconsOnLevelMap=Enable additional icons for camps, exits ModUi/&EnableAdditionalItemsInDungeonMaker=Add modded items to Editor ModUi/&EnableAlternateHuman=Enable the alternate Human [+1 feat / +2 attribute choices / +1 skill] ModUi/&EnableAlternateVotingSystem=Enable alternate voting system [choice weight = votes * hero Charisma modifier] -ModUi/&EnableBG3AbjurationArcaneWard=Enable Abjurer Arcane Ward implementation to behave like BG3 +ModUi/&EnableBG3AbjurationArcaneWard=Enable Abjurer Arcane Ward implementation to behave like BG3 ModUi/&EnableBG3AbjurationArcaneWardHelp=[Decrease by 1 each time it prevents damage, instead of by damage prevented. No need to cast abjuration spell to be active\nbut max value is 2x Wizard level instead of 2x Wizard level + INT mod and is only recharged to half on a long rest] ModUi/&EnableBarbarianBrutalStrike=Enable Brutal Strike and Brutal Strike Improvement at levels 9, 13 and 17 ModUi/&EnableBarbarianFightingStyle=Enable Fighting Style choice at level 2 @@ -107,7 +108,6 @@ ModUi/&EnableBardHealingBalladOnLongRest=Enable College of Hope [Requires Restart] ModUi/&EnableCancelEditOnRightMouseClick=Enable cancel actions with right mouse click ModUi/&EnableCantripsTriggeringOnWarMagic=Allow cantrips to trigger War Magic extra bonus attack -ModUi/&EnableOneDnDPreparedSpellsTables=Enable all Casters to use new prepared spells tables [Bard, Cleric, Druid, Paladin, Ranger, Sorcerer, Wizard] ModUi/&EnableCharactersOnFireToEmitLight=Characters On Fire should emit light [Cube of Light, Fire Elemental, Fire Jester, Fire Osprey, Fire Spider, and on fire condition family] ModUi/&EnableCustomPortraits=Enable Custom Portraits ModUi/&EnableCustomPortraitsHelp=• Place your custom portraits under subfolders Personal or PreGen, named after the hero first name [i.e.: Anton, Celia, Nialla, etc.]\n• Use PNG images, 256 x 384 pixels in size, with a transparency layer [use GIMP for best results] @@ -142,6 +142,7 @@ ModUi/&EnableMonkImprovedUnarmoredMovementToMoveOnTheWall=Enable ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Enable Superior Defense to replace Empty Body at level 18 ModUi/&EnableMonkWeaponSpecialization=Enable Weapon Specialization at levels 2 and 11 [the selected weapon type becomes a monk weapon to you] ModUi/&EnableMulticlass=Enable multiclass [Requires Restart] +ModUi/&EnableOneDnDPreparedSpellsTables=Enable all Casters to use new prepared spells tables [Bard, Cleric, Druid, Paladin, Ranger, Sorcerer, Wizard] ModUi/&EnableOneDndHealingSpellsBuf=Enable healing dice buff on Cure Wounds, Healing Word, Mass Cure Wounds, and Mass Healing Word ModUi/&EnablePaladinLayOnHandsAsBonusAction=Enable Lay on Hands as bonus action ModUi/&EnablePaladinSmiteAsBonusAction=Enable Smite as bonus action @@ -157,7 +158,7 @@ ModUi/&EnableRitualOnAllCasters=Enable Ritual casting on ModUi/&EnableRogueCunningStrike=Enable Cunning Strike and Devious Strike at levels 5 and 14 [you let forgo 1 sneak attack dice for additional hit effects] ModUi/&EnableRogueFightingStyle=Enable Fighting Style choice at level 2 ModUi/&EnableRogueSteadyAim=Enable Steady Aim at level 3 [bonus action gives advantage on your next attack roll in the current turn if you haven't moved yet] -ModUi/&EnableRogueStrSaving=Enable Hoodlum DEX or STR modifiers on Cunning/Devious Strike, Debilitating/Improved Strike, and Hail of Blades +ModUi/&EnableRogueStrSaving=Enable Hoodlum DEX or STR modifiers on Cunning/Devious Strike ModUi/&EnableSignatureSpellsRelearn=Enable Signature Spells to be prepared every long rest [instead of once at level 20] ModUi/&EnableSorcererMagicalGuidance=Enable Magical Guidance at level 5 ModUi/&EnableSorcererQuickenedAction=Enable Quickened Spell action to allow cast main action spell with quickened metamagic applied @@ -171,7 +172,7 @@ ModUi/&EnableUnarmedMainAttackAction=Enable the Unarmed AttackConjure Elemental and Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Enable variable placeholders on descriptions [use {VARIABLE_NAME} as placeholder] ModUi/&EnableWarlockMagicalCunningAtLevel2=Enable Magical Cunning at level 2 -ModUi/&EnableWizardToLearnScholarAtLevel2=Enable Scholar at level 2 +ModUi/&EnableWizardToLearnScholarAtLevel2=Enable Scholar at level 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Enable School of Magic at level 3 instead of 2 ModUi/&EnablesAsiAndFeat=Enable both attribute scores increase and feats selection [instead of an exclusive choice] ModUi/&EncounterPercentageChance=Set random encounters percentage chances @@ -301,9 +302,10 @@ ModUi/&Subclasses=Subclasses ModUi/&Subraces=Subraces ModUi/&SwapAbjurationSavant=Swap Abjurer Abjuration Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] ModUi/&SwapCraftedItemAndRecipeIcons=+ Swap recipe and crafted item icons in shop -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip features +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip features ModUi/&SwapEvocationSavant=Swap Evoker Evocation Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] ModUi/&SwapOneDndBarkskinSpell=Swap Barkskin with 5e 2024 version [bonus action, no concentration, AC set to 17] +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Swap Second Wind to use 5e 2024 usages progression ModUi/&SwapWarlockToUseOneDndInvocationProgression=Swap Invocations progression with 5e 2024 version ModUi/&TableTopButton=Select Tabletop content ModUi/&TableTopHelp1=• Following sections re-group and duplicate 5e 2014 and 2024 settings scattered across the mod for your convenience diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 789a562907..592c5b7f86 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -10,6 +10,7 @@ ModUi/&AddFighterLevelToIndomitableSavingReroll=Añade el nivel de clase como bo ModUi/&AddHumanoidFavoredEnemyToRanger=Habilitar enemigos preferidos humanoides ModUi/&AddNewWeaponsAndRecipesToShops=Añade nuevas armas y recetas a las tiendas [vendas de mano, alabardas, picas, mazas largas, ballestas de mano] [Requiere reinicio] ModUi/&AddPaladinSmiteToggle=Agregar un interruptor para permitir que los Paladines solo habiliten golpes críticos. [útil para minimizar las solicitudes de reacción] +ModUi/&AddPersuasionToFighterSkillOptions=Añade Persuasión a las opciones de habilidad en el nivel 1 ModUi/&AddPickPocketableLoot=Agregar botín que se pueda robar [sugerido si la dote Robar está habilitada] ModUi/&AddToStore=Agregar {0} ModUi/&Advanced=Avanzado: [Requiere reinicio] @@ -97,7 +98,7 @@ ModUi/&EnableAdditionalIconsOnLevelMap=Habilitar íconos adicionales para campam ModUi/&EnableAdditionalItemsInDungeonMaker=Agregar elementos modificados al editor ModUi/&EnableAlternateHuman=Habilitar el Humano alternativo [+1 dote / +2 opciones de atributo / +1 habilidad] ModUi/&EnableAlternateVotingSystem=Habilitar sistema de votación alternativo [peso de la elección = votos * modificador de Carisma del héroe] -ModUi/&EnableBG3AbjurationArcaneWard=Habilitar la implementación de Abjurer Arcane Ward para que se comporte como BG3 +ModUi/&EnableBG3AbjurationArcaneWard=Habilitar la implementación de Arcane Ward de Abjurer para que se comporte como BG3 ModUi/&EnableBG3AbjurationArcaneWardHelp=[Disminuye en 1 cada vez que previene daño, en lugar de por el daño prevenido. No es necesario lanzar un hechizo de abjuración para estar activo\npero el valor máximo es 2 veces el nivel de mago en lugar de 2 veces el nivel de mago + mod de INT y solo se recarga a la mitad en un descanso prolongado] ModUi/&EnableBarbarianBrutalStrike=Habilita Golpe brutal y Mejora de golpe brutal en los niveles 9, 13 y 17 ModUi/&EnableBarbarianFightingStyle=Habilitar la opción Estilo de lucha en el nivel 2 @@ -158,7 +159,7 @@ ModUi/&EnableRitualOnAllCasters=Habilitar el lanzamiento de Ritua ModUi/&EnableRogueCunningStrike=Habilita Golpe astuto y Golpe tortuoso en los niveles 5 y 14 [dejas de usar 1 dado de ataque furtivo para obtener efectos de golpe adicionales] ModUi/&EnableRogueFightingStyle=Habilitar la opción Estilo de lucha en el nivel 2 ModUi/&EnableRogueSteadyAim=Habilita Apunta firme en el nivel 3 [la acción adicional otorga ventaja en tu próxima tirada de ataque en el turno actual si aún no te has movido] -ModUi/&EnableRogueStrSaving=Habilita los modificadores de DES o STR de Hoodlum en Golpe astuto/desviado, Golpe debilitante/mejorado y Lluvia de espadas +ModUi/&EnableRogueStrSaving=Habilitar los modificadores DEX o STR de Hoodlum en Golpe astuto/desviado ModUi/&EnableSignatureSpellsRelearn=Permite que los hechizos exclusivos se preparen cada descanso prolongado [en lugar de una vez en el nivel 20] ModUi/&EnableSorcererMagicalGuidance=Habilitar Guía mágica en el nivel 5 ModUi/&EnableSorcererQuickenedAction=Habilitar la acción Hechizo acelerado para permitir lanzar un hechizo de acción principal con metamagia acelerada aplicada @@ -301,10 +302,11 @@ ModUi/&StockHugoStoreWithAdditionalFoci=Llena la tienda de Hugo con Subclases ModUi/&Subraces=Subrazas ModUi/&SwapAbjurationSavant=Intercambia Abjurador Sabio de la abjuración con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de espacio] -ModUi/&SwapCraftedItemAndRecipeIcons=+ Intercambia íconos de recetas y objetos elaborados en la tienda -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Intercambia las características de Evocador, Hechizos de escultura y Truco potente +ModUi/&SwapCraftedItemAndRecipeIcons=+ Intercambia íconos de recetas y objetos elaborados en la tiendaModUi/&SwapEvocationSavant=Intercambia Evocador Sabio de la evocación con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de ranura] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Intercambia las características de Evocador, Hechizos de escultura y Truco potente ModUi/&SwapEvocationSavant=Intercambia Evocador Sabio de la evocación con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de ranura] ModUi/&SwapOneDndBarkskinSpell=Intercambia Piel de corteza con la versión 5e 2024 [acción adicional, sin concentración, CA establecida en 17] +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Cambia Second Wind para usar la progresión de usos de 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Intercambia la progresión de Invocaciones con la versión 5e 2024 ModUi/&TableTopButton=Seleccionar contenido de Tabletop ModUi/&TableTopHelp1=• Las siguientes secciones reagrupan y duplican las configuraciones de 5e 2014 y 2024 esparcidas por el mod para tu conveniencia. diff --git a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardAbjuration-es.txt b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardAbjuration-es.txt index 761a06e79e..b09f22297f 100644 --- a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardAbjuration-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardAbjuration-es.txt @@ -17,7 +17,7 @@ Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=Recargar guardián arcano Feature/&PowerWizardAbjurationSpellResistanceDescription=Obtén ventaja en las tiradas de salvación contra hechizos y resistencia al daño de hechizos. Feature/&PowerWizardAbjurationSpellResistanceTitle=Resistencia a hechizos Feedback/&ArcaneWard={0} tiene {1} y reduce el daño en {2} -Feedback/&ArcaneWardRecharge=El {1} ​​de {0} recupera {2} puntos de vida. +Feedback/&ArcaneWardRecharge=El {1} de {0} recupera {2} puntos de vida. Feedback/&ProjectedWard={0} usa {1} para reducir el daño recibido por {2} Reaction/&SpendPowerProjectedWardDescription={0} está a punto de recibir daño. {1} puede reaccionar y proyectar su Guardián Arcano para reducir el daño. Reaction/&SpendPowerProjectedWardReactDescription=Absorbe daño con tu Guardián Arcano. diff --git a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardGraviturgist-es.txt b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardGraviturgist-es.txt index 201fd74a13..a8d9263ef5 100644 --- a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardGraviturgist-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardGraviturgist-es.txt @@ -10,11 +10,11 @@ Condition/&ConditionWizardGraviturgistEventHorizonSelfTitle=Horizonte de eventos Condition/&ConditionWizardGraviturgistEventHorizonTitle=Horizonte de eventos Condition/&ConditionWizardGraviturgistViolentAttractionDescription=La criatura hace 1d10 de daño adicional con un arma o un ataque desarmado una vez durante su turno. Condition/&ConditionWizardGraviturgistViolentAttractionTitle=Atracción violenta -Feature/&PowerWizardGraviturgistDensityDecreaseDescription=Puedes usar tu acción para reducir la densidad de una criatura que puedas ver a 30 pies de ti, aumentando su velocidad al caminar y su distancia de salto en 10 pies y haciéndola capaz de realizar saltos de máxima distancia sin riesgo, a costa de una desventaja en las pruebas de Fuerza y ​​las tiradas de salvación. Puedes usar esta característica una cantidad de veces por descanso corto igual a tu modificador de Inteligencia, y comparte la cantidad de usos con Aumentar densidad. +Feature/&PowerWizardGraviturgistDensityDecreaseDescription=Puedes usar tu acción para reducir la densidad de una criatura que puedas ver a 30 pies de ti, aumentando su velocidad al caminar y su distancia de salto en 10 pies y haciéndola capaz de realizar saltos de máxima distancia sin riesgo, a costa de una desventaja en las pruebas de Fuerza y las tiradas de salvación. Puedes usar esta característica una cantidad de veces por descanso corto igual a tu modificador de Inteligencia, y comparte la cantidad de usos con Aumentar densidad. Feature/&PowerWizardGraviturgistDensityDecreaseTitle=Disminuir la densidad -Feature/&PowerWizardGraviturgistDensityIncreaseDescription=Puedes usar tu acción para aumentar la densidad de una criatura que puedas ver a 30 pies de ti, reduciendo su velocidad en 10 pies con ventaja en las pruebas de Fuerza y ​​las tiradas de salvación. Puedes usar esta característica una cantidad de veces por descanso corto igual a tu modificador de Inteligencia, y comparte la cantidad de usos con Reducir densidad. +Feature/&PowerWizardGraviturgistDensityIncreaseDescription=Puedes usar tu acción para aumentar la densidad de una criatura que puedas ver a 30 pies de ti, reduciendo su velocidad en 10 pies con ventaja en las pruebas de Fuerza y las tiradas de salvación. Puedes usar esta característica una cantidad de veces por descanso corto igual a tu modificador de Inteligencia, y comparte la cantidad de usos con Reducir densidad. Feature/&PowerWizardGraviturgistDensityIncreaseTitle=Aumentar la densidad -Feature/&PowerWizardGraviturgistEventHorizonDescription=Puedes usar tu acción para emitir mágicamente un poderoso campo de energía gravitatoria que atrae a otras criaturas durante hasta 1 minuto. Mientras dure, siempre que una criatura hostil hacia ti comience su turno a 30 pies o menos de ti, debe realizar una tirada de salvación de Fuerza contra la CD de tu salvación de conjuros. Si falla, sufre 2d10 puntos de daño por fuerza y ​​su velocidad se reduce a 0 hasta el comienzo de su siguiente turno. Si tiene éxito, sufre la mitad de daño y su velocidad se reduce a la mitad. Puedes usar esta característica una vez por cada descanso prolongado. +Feature/&PowerWizardGraviturgistEventHorizonDescription=Puedes usar tu acción para emitir mágicamente un poderoso campo de energía gravitatoria que atrae a otras criaturas durante hasta 1 minuto. Mientras dure, siempre que una criatura hostil hacia ti comience su turno a 30 pies o menos de ti, debe realizar una tirada de salvación de Fuerza contra la CD de tu salvación de conjuros. Si falla, sufre 2d10 puntos de daño por fuerza y su velocidad se reduce a 0 hasta el comienzo de su siguiente turno. Si tiene éxito, sufre la mitad de daño y su velocidad se reduce a la mitad. Puedes usar esta característica una vez por cada descanso prolongado. Feature/&PowerWizardGraviturgistEventHorizonTitle=Horizonte de eventos Feature/&PowerWizardGraviturgistGravityWellDescription=A partir del nivel 6, las criaturas golpeadas por tus ataques de hechizos son empujadas 1 celda lejos de ti. Feature/&PowerWizardGraviturgistGravityWellTitle=Pozo de gravedad diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 45b6563099..6759bf6708 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -9,6 +9,7 @@ ModUi/&AddFighterLevelToIndomitableSavingReroll=Ajoutez le niveau de classe comm ModUi/&AddHumanoidFavoredEnemyToRanger=Activer les ennemis préférés des humanoïdes ModUi/&AddNewWeaponsAndRecipesToShops=Ajoutez de nouvelles armes et recettes aux magasins [bandages de main, hallebardes, piques, longues masses, arbalètes à main] [Nécessite un redémarrage] ModUi/&AddPaladinSmiteToggle=Ajoutez une option permettant aux paladins d'activer uniquement les coups critiques [utile pour minimiser les invites de réaction] +ModUi/&AddPersuasionToFighterSkillOptions=Ajoutez Persuasion aux options de compétence au niveau 1 ModUi/&AddPickPocketableLoot=Ajouter un butin pouvant être volé à la tire [suggéré si l'exploit Pickpocket est activé] ModUi/&AddToStore=Ajouter {0} ModUi/&Advanced=Avancé : [Nécessite un redémarrage] @@ -96,7 +97,7 @@ ModUi/&EnableAdditionalIconsOnLevelMap=Activer des icônes supplémentaires pour ModUi/&EnableAdditionalItemsInDungeonMaker=Ajouter des éléments modifiés à l'éditeur ModUi/&EnableAlternateHuman=Activer l'Humain alternatif [+1 don / +2 choix d'attributs / +1 compétence] ModUi/&EnableAlternateVotingSystem=Activer un système de vote alternatif [poids du choix = votes * modificateur de charisme du héros] -ModUi/&EnableBG3AbjurationArcaneWard=Activer l'implémentation de Arcane Ward d'Abjurer pour qu'elle se comporte comme BG3 +ModUi/&EnableBG3AbjurationArcaneWard=Activer l'implémentation d'Abjurer Arcane Ward pour qu'elle se comporte comme BG3 ModUi/&EnableBG3AbjurationArcaneWardHelp=[Diminue de 1 à chaque fois qu'il prévient les dégâts, au lieu de diminuer en fonction des dégâts prévenus. Pas besoin de lancer le sort d'abjuration pour être actif\nmais la valeur maximale est 2x niveau de sorcier au lieu de 2x niveau de sorcier + mod INT et ne se recharge qu'à moitié lors d'un repos long] ModUi/&EnableBarbarianBrutalStrike=Activez Frappe brutale et Amélioration de la frappe brutale aux niveaux 9, 13 et 17 ModUi/&EnableBarbarianFightingStyle=Activer le choix du Style de combat au niveau 2 @@ -157,7 +158,7 @@ ModUi/&EnableRitualOnAllCasters=Activer le lancement de rituelCunning Strike et Devious Strike aux niveaux 5 et 14 [vous renoncez à 1 dé d'attaque sournoise pour des effets de coup supplémentaires] ModUi/&EnableRogueFightingStyle=Activer le choix du Style de combat au niveau 2 ModUi/&EnableRogueSteadyAim=Activez la Visée constante au niveau 3 [l'action bonus donne un avantage sur votre prochain jet d'attaque dans le tour en cours si vous n'avez pas encore bougé] -ModUi/&EnableRogueStrSaving=Activez les modificateurs DEX ou STR de Hoodlum sur Cunning/Durious Strike, Délicieuse/Améliorée Strike et Hail of Blades +ModUi/&EnableRogueStrSaving=Activer les modificateurs DEX ou STR de Hoodlum sur Cunning/Devious Strike ModUi/&EnableSignatureSpellsRelearn=Activer les sorts signatures pour qu'ils soient préparés à chaque repos long [au lieu d'une fois au niveau 20] ModUi/&EnableSorcererMagicalGuidance=Activer la guidance magique au niveau 5 ModUi/&EnableSorcererQuickenedAction=Activez l'action Sort accéléré pour permettre de lancer le sort d'action principal avec la métamagie accélérée appliquée @@ -300,10 +301,11 @@ ModUi/&StockHugoStoreWithAdditionalFoci=Remplissez la boutique Hugo avec le Sous-classes ModUi/&Subraces=Sous-races ModUi/&SwapAbjurationSavant=Échangez Abjurer Abjuration Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] -ModUi/&SwapCraftedItemAndRecipeIcons=+ Échangez les icônes de recettes et d'objets fabriqués dans la boutique -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Échangez les fonctionnalités Évocateur Sculpture Sorts et Potent Cantrip +ModUi/&SwapCraftedItemAndRecipeIcons=+ Échangez les icônes de recettes et d'objets fabriqués dans la boutiqueModUi/&SwapEvocationSavant=Échangez Evoker Evocation Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Échangez les fonctionnalités Sculpt Spells d'Evoker et Potent Cantrip ModUi/&SwapEvocationSavant=Échangez Evoker Evocation Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] ModUi/&SwapOneDndBarkskinSpell=Échangez Barkskin avec la version 5e 2024 [action bonus, pas de concentration, CA réglée à 17] +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Remplacez Second Wind pour utiliser la progression des utilisations 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Échangez la progression des Invocations avec la version 5e 2024 ModUi/&TableTopButton=Sélectionnez le contenu de la table ModUi/&TableTopHelp1=• Les sections suivantes regroupent et dupliquent les paramètres 5e 2014 et 2024 dispersés dans le mod pour votre commodité diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 4c5e271047..37cc43b900 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -9,6 +9,7 @@ ModUi/&AddFighterLevelToIndomitableSavingReroll=Aggiungere il livello di classe ModUi/&AddHumanoidFavoredEnemyToRanger=Abilita i nemici preferiti Umanoidi ModUi/&AddNewWeaponsAndRecipesToShops=Aggiungi nuove armi e ricette ai negozi [fasce per le mani, alabarde, picche, mazze lunghe, balestre a mano] [Richiede riavvio] ModUi/&AddPaladinSmiteToggle=Aggiungi un'opzione per consentire ai Paladini di abilitare le punizioni solo sui colpi critici [utile per ridurre al minimo le richieste di reazione] +ModUi/&AddPersuasionToFighterSkillOptions=Aggiungi Persuasione alle opzioni delle abilità al livello 1 ModUi/&AddPickPocketableLoot=Aggiungi bottino borseggiabile [suggerito se è abilitata l'abilità Borsino] ModUi/&AddToStore=Aggiungi {0} ModUi/&Advanced=Avanzato: [Richiede riavvio] @@ -96,7 +97,7 @@ ModUi/&EnableAdditionalIconsOnLevelMap=Abilita icone aggiuntive per campi, uscit ModUi/&EnableAdditionalItemsInDungeonMaker=Aggiungi elementi modificati all'editor ModUi/&EnableAlternateHuman=Abilita l'alternativa Umano [+1 talento / +2 scelte attributo / +1 abilità] ModUi/&EnableAlternateVotingSystem=Abilita il sistema di voto alternativo [peso della scelta = voti * modificatore Carisma dell'eroe] -ModUi/&EnableBG3AbjurationArcaneWard=Abilita l'implementazione di Abjurer Arcane Ward per comportarsi come BG3 +ModUi/&EnableBG3AbjurationArcaneWard=Abilita l'implementazione di Abjurer Arcane Ward per comportarsi come BG3 ModUi/&EnableBG3AbjurationArcaneWardHelp=[Diminuisce di 1 ogni volta che previene danni, invece di per danni prevenuti. Non c'è bisogno di lanciare un incantesimo di abjurazione per essere attivo\nma il valore massimo è 2x livello mago invece di 2x livello mago + mod INT e si ricarica solo a metà con un riposo lungo] ModUi/&EnableBarbarianBrutalStrike=Abilita Colpo Brutale e Miglioramento Colpo Brutale ai livelli 9, 13 e 17 ModUi/&EnableBarbarianFightingStyle=Abilita la scelta Stile di combattimento al livello 2 @@ -157,7 +158,7 @@ ModUi/&EnableRitualOnAllCasters=Abilita il lancio di RitualeColpo astuto e Colpo subdolo ai livelli 5 e 14 [rinuncia a 1 dado di attacco furtivo per effetti di colpo aggiuntivi] ModUi/&EnableRogueFightingStyle=Abilita la scelta Stile di combattimento al livello 2 ModUi/&EnableRogueSteadyAim=Abilita Mira Fissa al livello 3 [l'azione bonus fornisce vantaggio al tuo prossimo tiro di attacco nel turno corrente se non ti sei ancora mosso] -ModUi/&EnableRogueStrSaving=Abilita i modificatori DEX o STR di Hoodlum su Colpo astuto/subdolo, Colpo debilitante/migliorato e Grandine di lame +ModUi/&EnableRogueStrSaving=Abilita i modificatori DEX o STR di Hoodlum su Colpo astuto/subdolo ModUi/&EnableSignatureSpellsRelearn=Abilita la preparazione degli incantesimi distintivi a ogni riposo lungo [invece di una volta al livello 20] ModUi/&EnableSorcererMagicalGuidance=Abilita Guida magica al livello 5 ModUi/&EnableSorcererQuickenedAction=Abilita l'azione Incantesimo accelerato per consentire il lancio dell'incantesimo di azione principale con metamagia accelerata applicata @@ -300,10 +301,11 @@ ModUi/&StockHugoStoreWithAdditionalFoci=Fai scorta nel negozio di Hugo con Sottoclassi ModUi/&Subraces=Sottorazze ModUi/&SwapAbjurationSavant=Sostituisci Abjurer Savant dell'Abjurazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] -ModUi/&SwapCraftedItemAndRecipeIcons=+ Scambia le icone delle ricette e degli oggetti realizzati nel negozio -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Scambia le funzionalità Evocatore Incantesimi di Scultura e Trucchetto Potente +ModUi/&SwapCraftedItemAndRecipeIcons=+ Scambia le icone delle ricette e degli oggetti realizzati nel negozioModUi/&SwapEvocationSavant=Sostituisci Evocatore Sapiente dell'evocazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Scambia le funzionalità Evocatore Incantesimi di Scultura e Trucchetto Potente ModUi/&SwapEvocationSavant=Sostituisci Evocatore Sapiente dell'evocazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] ModUi/&SwapOneDndBarkskinSpell=Sostituisci Barkskin con la versione 5e 2024 [azione bonus, nessuna concentrazione, CA impostata a 17] +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Sostituisci Second Wind per usare la progressione di utilizzo 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Scambia la progressione delle Invocazioni con la versione 5e 2024 ModUi/&TableTopButton=Seleziona contenuto Tabletop ModUi/&TableTopHelp1=• Le sezioni seguenti raggruppano e duplicano le impostazioni 5e 2014 e 2024 sparse nella mod per la tua comodità diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 1c36249e60..c8848cfbe2 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -9,6 +9,7 @@ ModUi/&AddFighterLevelToIndomitableSavingReroll=不屈の抵抗ヒューマノイド優先敵を有効にする ModUi/&AddNewWeaponsAndRecipesToShops=新しい武器とレシピをショップに追加します [ハンドラップ、ハルバード、パイク、ロングメイス、ハンドクロスボウ] [再起動が必要です] ModUi/&AddPaladinSmiteToggle=パラディンがクリティカルヒット時にのみスマイトを有効にするようにするトグルを追加します [反応プロンプトを最小限に抑えるのに役立ちます] +ModUi/&AddPersuasionToFighterSkillOptions=レベル1のスキルオプションに説得を追加します ModUi/&AddPickPocketableLoot=スリ可能な戦利品を追加 [スリ 能力が有効になっている場合に推奨] ModUi/&AddToStore={0} を追加 ModUi/&Advanced=詳細: [再起動が必要] @@ -96,7 +97,7 @@ ModUi/&EnableAdditionalIconsOnLevelMap=レベルマップ上のキャンプ、 ModUi/&EnableAdditionalItemsInDungeonMaker=エディターに改造アイテムを追加する ModUi/&EnableAlternateHuman=代替の 人間 を有効にする [+1 特技 / +2 属性選択 / +1 スキル] ModUi/&EnableAlternateVotingSystem=代替投票システムを有効にする [選択の重み = 投票数 * ヒーローのカリスマ性補正値] -ModUi/&EnableBG3AbjurationArcaneWard=Abjurer Arcane Ward 実装を有効にして、BG3 のように動作させます。 +ModUi/&EnableBG3AbjurationArcaneWard=AbjurerArcane Ward 実装を有効にして、BG3 のように動作させます。 ModUi/&EnableBG3AbjurationArcaneWardHelp=[ダメージを防ぐたびに 1 減少します (防いだダメージの数ではありません)。有効にするために防御呪文を唱える必要はありません\nただし、最大値はウィザード レベルの 2 倍 (ウィザード レベル + INT 修正値の 2 倍) であり、長い休憩でのみ半分に再充電されます] ModUi/&EnableBarbarianBrutalStrike=レベル9、13、17で残忍な一撃と残忍な一撃の改善を有効にする ModUi/&EnableBarbarianFightingStyle=レベル2で戦闘スタイルの選択を有効にする @@ -157,7 +158,7 @@ ModUi/&EnableRitualOnAllCasters=すべてのキャスターに儀 ModUi/&EnableRogueCunningStrike=レベル 5 と 14 で 狡猾な一撃 と 邪悪な一撃 を有効にします [追加のヒット効果を得るために、スニーク アタック ダイスを 1 つ放棄します] ModUi/&EnableRogueFightingStyle=レベル2で戦闘スタイルの選択を有効にする ModUi/&EnableRogueSteadyAim=レベル 3 で Steady Aim を有効にします [ボーナス アクションにより、まだ移動していない場合、現在のターンの次の攻撃ロールにアドバンテージが与えられます] -ModUi/&EnableRogueStrSaving=狡猾/悪意ある一撃衰弱/強化一撃ヘイル オブ ブレード悪党 の DEX または STR 修飾子を有効にします +ModUi/&EnableRogueStrSaving=狡猾な一撃/悪巧みの一撃に悪党のDEXまたはSTR修飾子を有効にする ModUi/&EnableSignatureSpellsRelearn=シグネチャー スペル を、長い休憩ごとに準備できるようにします [レベル 20 で 1 回ではなく] ModUi/&EnableSorcererMagicalGuidance=レベル5で魔法のガイダンスを有効にする ModUi/&EnableSorcererQuickenedAction=クイック呪文アクションを有効にすると、クイック呪文メタマジックを適用したメインアクション呪文をキャストできるようになります。 @@ -300,10 +301,11 @@ ModUi/&StockHugoStoreWithAdditionalFoci=ヒューゴの店に、 ModUi/&Subclasses=サブクラス ModUi/&Subraces=亜種族 ModUi/&SwapAbjurationSavant=Abjurer Abjuration Savant を 5e 2024 バージョンの [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびに 1 つずつ追加で習得する] と入れ替えます -ModUi/&SwapCraftedItemAndRecipeIcons=+ ショップでレシピとクラフトアイテムのアイコンを交換 -ModUi/&SwapEvocationPotentCantripAndSculptSpell=エヴォーカースカルプトスペルとポテンシャルキャントリップの機能を入れ替えます +ModUi/&SwapCraftedItemAndRecipeIcons=+ ショップでレシピとクラフトアイテムのアイコンを交換ModUi/&SwapEvocationSavant=Evoker Evocation Savant を 5e 2024 バージョン [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびにさらに 1 つ習得する] と入れ替えます +ModUi/&SwapEvocationPotentCantripAndSculptSpell=エヴォーカースカルプトスペルとポテンシャルキャントリップの機能を入れ替えます ModUi/&SwapEvocationSavant=Evoker Evocation Savant を 5e 2024 バージョン [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびにさらに 1 つ習得する] と入れ替えます ModUi/&SwapOneDndBarkskinSpell=Barkskin を 5e 2024 バージョンの [ボーナス アクション、集中力なし、AC を 17 に設定] と交換します。 +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=セカンド ウィンド を 5e 2024 の使用進行に置き換える ModUi/&SwapWarlockToUseOneDndInvocationProgression=Invocations の進行を 5e 2024 バージョンと入れ替える ModUi/&TableTopButton=テーブルトップコンテンツを選択 ModUi/&TableTopHelp1=• 以下のセクションでは、利便性のために、mod 全体に散らばっている 5e 2014 および 2024 設定を再グループ化して複製します。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index e89a75a95d..d4b8e9349d 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -9,6 +9,7 @@ ModUi/&AddFighterLevelToIndomitableSavingReroll=불굴의 저항 ModUi/&AddHumanoidFavoredEnemyToRanger=인간형 선호 적 활성화 ModUi/&AddNewWeaponsAndRecipesToShops=상점에 새로운 무기와 제조법을 추가하세요 [손가락 묶는 무기, 도끼창, 창, 긴 메이스, 손 석궁] [재시작 필요] ModUi/&AddPaladinSmiteToggle=성기사가 치명타에만 스마이트를 사용할 수 있도록 토글을 추가합니다. [반응 프롬프트를 최소화하는 데 유용함] +ModUi/&AddPersuasionToFighterSkillOptions=1레벨 스킬 옵션에 설득을 추가합니다. ModUi/&AddPickPocketableLoot=주머니털이 가능한 전리품 추가 [주머니털이 특기가 활성화된 경우 추천] ModUi/&AddToStore={0} 추가 ModUi/&Advanced=고급: [재시작 필요] @@ -96,7 +97,7 @@ ModUi/&EnableAdditionalIconsOnLevelMap=레벨 맵에서 캠프, 출구 및 텔 ModUi/&EnableAdditionalItemsInDungeonMaker=편집기에 수정된 항목 추가 ModUi/&EnableAlternateHuman=대체 인간 [+1 특기 / +2 속성 선택 / +1 기술]을 활성화합니다. ModUi/&EnableAlternateVotingSystem=대체 투표 시스템 활성화 [선택 가중치 = 투표 수 * 영웅 카리스마 수정치] -ModUi/&EnableBG3AbjurationArcaneWard=Abjurer Arcane Ward 구현을 BG3처럼 동작하도록 활성화 +ModUi/&EnableBG3AbjurationArcaneWard=Abjurer Arcane Ward 구현을 BG3처럼 동작하도록 활성화합니다. ModUi/&EnableBG3AbjurationArcaneWardHelp=[피해를 방지할 때마다 1씩 감소, 방지한 피해에 따라 감소하는 것이 아님. 활성화하려면 금지 주문을 시전할 필요가 없음\n하지만 최대값은 위저드 레벨의 2배 + INT 수정치 대신 위저드 레벨의 2배이며 긴 휴식 시에만 절반으로 재충전됨] ModUi/&EnableBarbarianBrutalStrike=레벨 9, 13, 17에서 잔혹한 일격과 잔혹한 일격 개선을 활성화합니다. ModUi/&EnableBarbarianFightingStyle=레벨 2에서 격투 스타일 선택 가능 @@ -157,7 +158,7 @@ ModUi/&EnableRitualOnAllCasters=모든 시전자에 의식교활한 일격과 사악한 일격을 활성화합니다. [추가 적중 효과를 위해 몰래 공격 주사위 1개를 포기합니다] ModUi/&EnableRogueFightingStyle=레벨 2에서 격투 스타일 선택 가능 ModUi/&EnableRogueSteadyAim=레벨 3에서 안정적인 조준을 활성화합니다. [현재 턴에서 아직 이동하지 않았다면 다음 공격 굴림에 보너스 액션이 유리해집니다.] -ModUi/&EnableRogueStrSaving=교활한/사악한 일격, 약화시키는/향상된 일격, 칼날 우박후드럼 DEX 또는 STR 수정치를 활성화합니다. +ModUi/&EnableRogueStrSaving=교활한/사악한 일격에 후드럼 DEX 또는 STR 수정치를 활성화합니다. ModUi/&EnableSignatureSpellsRelearn=긴 휴식마다 특징 주문을 준비할 수 있게 합니다. [레벨 20에서 한 번만] ModUi/&EnableSorcererMagicalGuidance=레벨 5에서 마법의 안내를 활성화합니다. ModUi/&EnableSorcererQuickenedAction=빠른 주문 동작을 활성화하여 빠른 메타매직이 적용된 주요 동작 주문을 시전할 수 있습니다. @@ -300,10 +301,11 @@ ModUi/&StockHugoStoreWithAdditionalFoci=비전 지팡이, ModUi/&Subclasses=서브클래스 ModUi/&Subraces=아종 ModUi/&SwapAbjurationSavant=Abjurer Abjuration Savant를 5e 2024 버전과 교환하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] -ModUi/&SwapCraftedItemAndRecipeIcons=+ 상점에서 레시피와 제작 아이템 아이콘 교환 -ModUi/&SwapEvocationPotentCantripAndSculptSpell=소환사 조각 주문과 강력한 주문 기능을 교체하세요 +ModUi/&SwapCraftedItemAndRecipeIcons=+ 상점에서 레시피와 제작 아이템 아이콘 교환ModUi/&SwapEvocationSavant=Evoker Evocation Savant를 5e 2024 버전으로 교체하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=소환사 조각 주문과 강력한 주문 기능을 교체하세요 ModUi/&SwapEvocationSavant=Evoker Evocation Savant를 5e 2024 버전으로 교체하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] ModUi/&SwapOneDndBarkskinSpell=Barkskin을 5e 2024 버전 [보너스 액션, 집중 없음, AC 17로 설정]과 교환하세요 +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Second Wind를 5e 2024 사용 진행을 사용하도록 바꾸세요. ModUi/&SwapWarlockToUseOneDndInvocationProgression=Invocations 진행을 5e 2024 버전으로 바꾸세요 ModUi/&TableTopButton=테이블탑 콘텐츠 선택 ModUi/&TableTopHelp1=• 다음 섹션은 편의를 위해 모드 전체에 분산된 5e 2014 및 2024 설정을 다시 그룹화하고 복제합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 672523b15e..53b03cad0c 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -9,6 +9,7 @@ ModUi/&AddFighterLevelToIndomitableSavingReroll=Adicione o nível de classe como ModUi/&AddHumanoidFavoredEnemyToRanger=Habilitar inimigos preferenciais Humanoides ModUi/&AddNewWeaponsAndRecipesToShops=Adicionar novas armas e receitas às lojas [bandagens de mão, alabardas, lanças, maças longas, bestas de mão] [Requer reinicialização] ModUi/&AddPaladinSmiteToggle=Adicione uma alternância para permitir que Paladinos habilitem golpes somente em acertos críticos [útil para minimizar prompts de reação] +ModUi/&AddPersuasionToFighterSkillOptions=Adicione Persuasão às opções de habilidade no nível 1 ModUi/&AddPickPocketableLoot=Adicionar saque que pode ser roubado [sugerido se o talento Batedor de carteira estiver habilitado] ModUi/&AddToStore=Adicionar {0} ModUi/&Advanced=Avançado: [Requer reinicialização] @@ -96,7 +97,7 @@ ModUi/&EnableAdditionalIconsOnLevelMap=Habilitar ícones adicionais para acampam ModUi/&EnableAdditionalItemsInDungeonMaker=Adicionar itens modificados ao Editor ModUi/&EnableAlternateHuman=Habilitar o Humano alternativo [+1 talento / +2 escolhas de atributo / +1 habilidade] ModUi/&EnableAlternateVotingSystem=Habilitar sistema de votação alternativo [peso da escolha = votos * modificador de Carisma do herói] -ModUi/&EnableBG3AbjurationArcaneWard=Habilitar a implementação Abjurer Arcane Ward para se comportar como BG3 +ModUi/&EnableBG3AbjurationArcaneWard=Habilitar a implementação Abjurer Arcane Ward para se comportar como BG3 ModUi/&EnableBG3AbjurationArcaneWardHelp=[Diminui em 1 cada vez que previne dano, em vez de por dano prevenido. Não há necessidade de conjurar magia de abjuração para ser ativo,\nmas o valor máximo é 2x nível de mago em vez de 2x nível de mago + mod INT e só é recarregado pela metade em um descanso longo] ModUi/&EnableBarbarianBrutalStrike=Habilitar Golpe Brutal e Melhoria do Golpe Brutal nos níveis 9, 13 e 17 ModUi/&EnableBarbarianFightingStyle=Habilitar a escolha Estilo de luta no nível 2 @@ -157,7 +158,7 @@ ModUi/&EnableRitualOnAllCasters=Habilitar a conjuração de Ritua ModUi/&EnableRogueCunningStrike=Habilite Golpe Astuto e Golpe Desonesto nos níveis 5 e 14 [você deixa de lado 1 dado de ataque furtivo para efeitos de acerto adicionais] ModUi/&EnableRogueFightingStyle=Habilitar a escolha Estilo de luta no nível 2 ModUi/&EnableRogueSteadyAim=Habilite Miração Firme no nível 3 [ação bônus dá vantagem na sua próxima jogada de ataque no turno atual se você ainda não se moveu] -ModUi/&EnableRogueStrSaving=Habilitar modificadores de DEX ou FOR de Hoodlum em Cunning/Devious Strike, Debilitating/Improved Strike e Hail of Blades +ModUi/&EnableRogueStrSaving=Habilitar modificadores de DEX ou FOR de Hoodlum em Cunning/Devious Strike ModUi/&EnableSignatureSpellsRelearn=Habilitar Feitiços de Assinatura para serem preparados a cada descanso longo [em vez de uma vez no nível 20] ModUi/&EnableSorcererMagicalGuidance=Habilitar Orientação Mágica no nível 5 ModUi/&EnableSorcererQuickenedAction=Habilitar ação Feitiço Acelerado para permitir conjurar feitiço de ação principal com metamagia acelerada aplicada @@ -300,10 +301,11 @@ ModUi/&StockHugoStoreWithAdditionalFoci=Estoque a loja de Hugo com Subclasses ModUi/&Subraces=Sub-raças ModUi/&SwapAbjurationSavant=Troque Abjurador Sábio da Abjuração pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] -ModUi/&SwapCraftedItemAndRecipeIcons=+ Troque ícones de receitas e itens criados na loja -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Troque os recursos Evocador Magias de Esculpir e Truque Potente +ModUi/&SwapCraftedItemAndRecipeIcons=+ Troque ícones de receitas e itens criados na lojaModUi/&SwapEvocationSavant=Troque Evocador Sábio da Evocação pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Troque os recursos Evocador Magias de Esculpir e Truque Potente ModUi/&SwapEvocationSavant=Troque Evocador Sábio da Evocação pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] ModUi/&SwapOneDndBarkskinSpell=Troque Barkskin pela versão 5e 2024 [ação bônus, sem concentração, CA definida como 17] +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Troque Segundo Vento para usar a progressão de usos do 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Troque a progressão de Invocações pela versão 5e 2024 ModUi/&TableTopButton=Selecionar conteúdo de mesa ModUi/&TableTopHelp1=• As seções a seguir reagrupam e duplicam as configurações 5e 2014 e 2024 espalhadas pelo mod para sua conveniência diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index e8ea189780..97c4021792 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -9,6 +9,7 @@ ModUi/&AddFighterLevelToIndomitableSavingReroll=Добавлять уровен ModUi/&AddHumanoidFavoredEnemyToRanger=Включить Гуманоидов в список предпочтительных противников ModUi/&AddNewWeaponsAndRecipesToShops=Добавить новые оружия и рецепты в магазины [обмотки, алебарды, пики, длинные булавы, ручные арбалеты] [Необходим перезапуск] ModUi/&AddPaladinSmiteToggle=Добавить переключатель, чтобы позволить Паладинам использовать кару только при критах [полезно для уменьшения количества запросов на реакции] +ModUi/&AddPersuasionToFighterSkillOptions=Добавьте Убеждение к параметрам навыков на уровне 1 ModUi/&AddPickPocketableLoot=Добавить лута для кражи [рекомендуется, если черта Кража включена] ModUi/&AddToStore=Добавить {0} ModUi/&Advanced=Продвинутый: [Необходим перезапуск] @@ -96,7 +97,7 @@ ModUi/&EnableAdditionalIconsOnLevelMap=Включить дополнительн ModUi/&EnableAdditionalItemsInDungeonMaker=Добавить предметы мода в редактор ModUi/&EnableAlternateHuman=Включить альтернативное происхождение Человека [+1 черта / +2 очка характеристик / +1 навык] ModUi/&EnableAlternateVotingSystem=Включить альтернативную систему голосования [весомость выбора = голоса * модификатор Харизмы героя] -ModUi/&EnableBG3AbjurationArcaneWard=Включить реализацию Магической защиты Волшебника школы Ограждения как в BG3 +ModUi/&EnableBG3AbjurationArcaneWard=Включить реализацию Abjurer Arcane Ward для работы как BG3 ModUi/&EnableBG3AbjurationArcaneWardHelp=[Уменьшать на 1 каждый раз при предотвращении урона вместо уменьшения на количество предотвращённого урона. Нет необходимости в накладывании заклинания школы Ограждения для активации,\nно максимальные хиты защиты равны двукратному уровню Волшебника без модификатора ИНТ, восстанавливается наполовину после долгого отдыха] ModUi/&EnableBarbarianBrutalStrike=Включить Жестокий удар и Улучшенный жестокий удар на уровнях 9, 13 и 17 ModUi/&EnableBarbarianFightingStyle=Включить выбор Боевого стиля на уровне 2 @@ -157,7 +158,7 @@ ModUi/&EnableRitualOnAllCasters=Включить РитуалХитрого удара и Коварного удара на уровнях 5 и 14 соответственно [вы отказываетесь от 1 кости скрытой атаки для применения дополнительных эффектов] ModUi/&EnableRogueFightingStyle=Включить выбор Боевого стиля на уровне 2 ModUi/&EnableRogueSteadyAim=Включить Точное прицеливание на уровне 3 [бонусным действием даёт преимущество на следующий бросок атаки в текущем ходу, если вы ещё не перемещались] -ModUi/&EnableRogueStrSaving=Включить модификаторы DEX или STR Hoodlum для Cunning/Devious Strike, Debilitating/Improved Strike и Hail of Blades +ModUi/&EnableRogueStrSaving=Включить модификаторы DEX или STR Hoodlum для Cunning/Devious Strike ModUi/&EnableSignatureSpellsRelearn=Включить подготовку фирменных заклинаний при каждом продолжительном отдыхе [вместо одного раза на уровне 20] ModUi/&EnableSorcererMagicalGuidance=Включить Волшебное указание на уровне 5 ModUi/&EnableSorcererQuickenedAction=Включить действие Ускоренное заклинание, позволяющее накладывать заклинание основного действия с применением метамагии Ускоренного заклинания. @@ -300,10 +301,11 @@ ModUi/&StockHugoStoreWithAdditionalFoci=Пополнить магазин Хью ModUi/&Subclasses=Архетипы ModUi/&Subraces=Подрасы ModUi/&SwapAbjurationSavant=Поменяйте Abjurer Abjuration Savant на версию 5e 2024 [изучите 2 школьных заклинания при получении, изучайте еще 1 каждый раз, когда получаете уровень слота] -ModUi/&SwapCraftedItemAndRecipeIcons=+ Заменить значок рецепта значком создаваемого предмета в магазине -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Поменяйте местами функции Вызывателя Скульптурных заклинаний и Мощного колдовства +ModUi/&SwapCraftedItemAndRecipeIcons=+ Заменить значок рецепта значком создаваемого предмета в магазинеModUi/&SwapEvocationSavant=Замените Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Поменяйте местами функции Evoker Sculpt Spells и Potent Cantrip ModUi/&SwapEvocationSavant=Замените Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] ModUi/&SwapOneDndBarkskinSpell=Поменяйте Barkskin на версию 5e 2024 [бонусное действие, нет концентрации, AC установлен на 17] +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Поменяйте Второе дыхание на использование прогрессии использования 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Поменять местами прогрессию Invocations с версией 5e 2024 ModUi/&TableTopButton=Выберите содержимое Tabletop ModUi/&TableTopHelp1=• Следующие разделы перегруппированы и дублируют настройки 5e 2014 и 2024, разбросанные по всему моду для вашего удобства. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 53e267cb15..309d346fd2 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -9,6 +9,7 @@ ModUi/&AddFighterLevelToIndomitableSavingReroll=将职业等级作为奖励添 ModUi/&AddHumanoidFavoredEnemyToRanger=启用人形首选敌人 ModUi/&AddNewWeaponsAndRecipesToShops=在商店中添加新武器和配方[手套、戟、长矛、长锤、手弩] [需要重启] ModUi/&AddPaladinSmiteToggle=添加一个开关以允许圣骑士仅在暴击时启用惩击[有助于最大限度地减少反应提示] +ModUi/&AddPersuasionToFighterSkillOptions=将说服添加到 1 级技能选项中 ModUi/&AddPickPocketableLoot=添加可扒窃的战利品[建议在启用扒窃功能时添加] ModUi/&AddToStore=添加 {0} ModUi/&Advanced=高级: [需要重启] @@ -96,7 +97,7 @@ ModUi/&EnableAdditionalIconsOnLevelMap=在关卡地图上启用营地、出口 ModUi/&EnableAdditionalItemsInDungeonMaker=将经过修改的物品添加到编辑器 ModUi/&EnableAlternateHuman=启用替代人类 [+1 专长 / +2 属性选择 / +1 技能] ModUi/&EnableAlternateVotingSystem=启用替代投票系统[选择权重 = 投票数 * 英雄魅力调整值] -ModUi/&EnableBG3AbjurationArcaneWard=启用 Abjurer Arcane Ward 实现,使其行为类似于 BG3 +ModUi/&EnableBG3AbjurationArcaneWard=启用 Abjurer Arcane Ward 实现,使其行为类似于 BG3 ModUi/&EnableBG3AbjurationArcaneWardHelp=[每次防止伤害时减少 1,而不是通过防止伤害来减少。无需施放驱散法术即可激活\n但最大值是 2x 巫师等级,而不是 2x 巫师等级 + INT mod,并且长时间休息只能恢复到一半] ModUi/&EnableBarbarianBrutalStrike=在 9、13 和 17 级启用残酷打击和残酷打击改进 ModUi/&EnableBarbarianFightingStyle=在第 2 级启用战斗风格选择 @@ -157,7 +158,7 @@ ModUi/&EnableRitualOnAllCasters=对所有施法者启用仪式狡猾打击和阴险打击 [你放弃 1 个偷袭骰子以获得额外的命中效果] ModUi/&EnableRogueFightingStyle=在第 2 级启用战斗风格选择 ModUi/&EnableRogueSteadyAim=在 3 级时启用稳定瞄准 [如果您尚未移动,则奖励行动会在当前回合的下一次攻击掷骰中提供优势] -ModUi/&EnableRogueStrSaving=在狡猾/狡诈打击削弱/强化打击刀锋风暴上启用Hoodlum DEX 或 STR 修正 +ModUi/&EnableRogueStrSaving=在狡猾/卑鄙的打击上启用Hoodlum DEX 或 STR 修正 ModUi/&EnableSignatureSpellsRelearn=每次长时间休息时都可准备招牌法术[而不是在 20 级时准备一次] ModUi/&EnableSorcererMagicalGuidance=在 5 级时启用魔法指引 ModUi/&EnableSorcererQuickenedAction=启用加速法术动作以允许施放应用了加速超魔法的主要动作法术 @@ -300,10 +301,11 @@ ModUi/&StockHugoStoreWithAdditionalFoci=将 奥术法杖 ModUi/&Subclasses=子类 ModUi/&Subraces=亚种 ModUi/&SwapAbjurationSavant=将Abjurer Abjuration Savant 与 5e 2024 版本交换[获得时学习 2 个学校法术,每次获得一个插槽等级时再学习 1 个] -ModUi/&SwapCraftedItemAndRecipeIcons=+ 在商店中交换配方和制作物品图标 -ModUi/&SwapEvocationPotentCantripAndSculptSpell=交换召唤师 塑形法术和强力法术功能 +ModUi/&SwapCraftedItemAndRecipeIcons=+ 在商店中交换配方和制作物品图标ModUi/&SwapEvocationSavant=将Evoker Evocation Savant 与 5e 2024 版本交换[获得时学习 2 个学校法术,每次获得一个插槽等级时再学习 1 个] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=交换召唤师 塑形法术和强力法术功能 ModUi/&SwapEvocationSavant=将Evoker Evocation Savant 与 5e 2024 版本交换[获得时学习 2 个学校法术,每次获得一个插槽等级时再学习 1 个] ModUi/&SwapOneDndBarkskinSpell=将 Barkskin 与 5e 2024 版本交换[奖励行动,无集中力,AC 设置为 17] +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=交换 Second Wind 以使用 5e 2024 使用进度 ModUi/&SwapWarlockToUseOneDndInvocationProgression=将 Invocations 进程与 5e 2024 版本交换 ModUi/&TableTopButton=选择桌面内容 ModUi/&TableTopHelp1=• 以下部分重新分组并复制了分散在模块中的 5e 2014 和 2024 设置,以方便您使用 From 5a418453301901061c3a5be09b91eef078173100 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 2 Nov 2024 11:48:09 -0700 Subject: [PATCH 26/85] add Character > Classes > 'Swap Monk unarmed strike to use 5e 2024 die type progression' [OneDnd] --- .../ChangelogHistory.txt | 1 + .../Displays/ClassesDisplay.cs | 7 ++++ .../Displays/GeneralDisplay.cs | 7 ++++ .../Models/CharacterContext.cs | 1 + .../Models/CharacterUAContext.cs | 35 ++++++++++++++++ SolastaUnfinishedBusiness/Settings.cs | 1 + SolastaUnfinishedBusiness/Settings/empty.xml | 1 + .../Settings/zappastuff.xml | 41 ++++++++++--------- .../Translations/de/Settings-de.txt | 1 + .../Translations/en/Settings-en.txt | 1 + .../Translations/es/Settings-es.txt | 1 + .../Translations/fr/Settings-fr.txt | 1 + .../Translations/it/Settings-it.txt | 1 + .../Translations/ja/Settings-ja.txt | 1 + .../Translations/ko/Settings-ko.txt | 1 + .../Translations/pt-BR/Settings-pt-BR.txt | 1 + .../Translations/ru/Settings-ru.txt | 1 + .../Translations/zh-CN/Settings-zh-CN.txt | 1 + 18 files changed, 84 insertions(+), 20 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 975d42024e..2f5c9bbdc4 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -7,6 +7,7 @@ - added Character > Classes > 'Enable Warlock magical cunning at level 2' [OneDnd] - added Character > Classes > 'Remove Bard song of rest at level 2' [OneDnd] - added Character > Classes > 'Swap Fighter second wind to use 5e 2024 usages progression' [OneDnd] +- added Character > Classes > 'Swap Monk unarmed strike to use 5e 2024 die type progression' [OneDnd] - added Character > Classes > 'Swap Warlock invocations progression with 5e 2024 version' [OneDnd] - added Character > Spells > 'Enable all casters to use new prepared spells tables' [OneDnd] - added Character > Spells > 'Swap Barkskin with 5e 2024 version' [OneDnd] diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index 3b7c0fcc70..a65525322e 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -220,6 +220,13 @@ internal static void DisplayClasses() CharacterContext.SwitchMonkWeaponSpecialization(); } + toggle = Main.Settings.SwapMonkToUseOneDndUnarmedDieTypeProgression; + if (UI.Toggle(Gui.Localize("ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression"), ref toggle, UI.AutoWidth())) + { + Main.Settings.SwapMonkToUseOneDndUnarmedDieTypeProgression = toggle; + CharacterContext.SwitchOneDndMonkUnarmedDieTypeProgression(); + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&PaladinTitle") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 969a4a62c5..8861074b48 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -390,6 +390,13 @@ private static void DisplayOneDnd() CharacterContext.SwitchMonkSuperiorDefenseToReplaceEmptyBody(); } + toggle = Main.Settings.SwapMonkToUseOneDndUnarmedDieTypeProgression; + if (UI.Toggle(Gui.Localize("ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression"), ref toggle, UI.AutoWidth())) + { + Main.Settings.SwapMonkToUseOneDndUnarmedDieTypeProgression = toggle; + CharacterContext.SwitchOneDndMonkUnarmedDieTypeProgression(); + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&PaladinTitle") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index a89f138ec3..0102ee1a64 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -224,6 +224,7 @@ internal static void LateLoad() SwitchFirstLevelTotalFeats(); SwitchProneAction(); SwitchHelpPower(); + SwitchOneDndMonkUnarmedDieTypeProgression(); SwitchMonkAbundantKi(); SwitchMonkFightingStyle(); SwitchMonkDoNotRequireAttackActionForFlurry(); diff --git a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs index 616ce63268..f6dc785a25 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs @@ -957,6 +957,41 @@ internal static void SwitchMonkWeaponSpecialization() } } + private static readonly List MonkUnarmedDieTypeByRank = + [.. AttackModifierMonkMartialArtsImprovedDamage.DieTypeByRankTable]; + + private static readonly List MonkUnarmedDieTypeByRank2024 = + [ + new() { dieType = DieType.D6, rank = 1 }, + new() { dieType = DieType.D6, rank = 2 }, + new() { dieType = DieType.D6, rank = 3 }, + new() { dieType = DieType.D6, rank = 4 }, + new() { dieType = DieType.D8, rank = 5 }, + new() { dieType = DieType.D8, rank = 6 }, + new() { dieType = DieType.D8, rank = 7 }, + new() { dieType = DieType.D8, rank = 8 }, + new() { dieType = DieType.D8, rank = 9 }, + new() { dieType = DieType.D8, rank = 10 }, + new() { dieType = DieType.D10, rank = 11 }, + new() { dieType = DieType.D10, rank = 12 }, + new() { dieType = DieType.D10, rank = 13 }, + new() { dieType = DieType.D10, rank = 14 }, + new() { dieType = DieType.D10, rank = 15 }, + new() { dieType = DieType.D10, rank = 16 }, + new() { dieType = DieType.D12, rank = 17 }, + new() { dieType = DieType.D12, rank = 18 }, + new() { dieType = DieType.D12, rank = 19 }, + new() { dieType = DieType.D12, rank = 20 } + ]; + + internal static void SwitchOneDndMonkUnarmedDieTypeProgression() + { + AttackModifierMonkMartialArtsImprovedDamage.dieTypeByRankTable = + Main.Settings.SwapMonkToUseOneDndUnarmedDieTypeProgression + ? MonkUnarmedDieTypeByRank2024 + : MonkUnarmedDieTypeByRank; + } + private sealed class CustomBehaviorHeightenedMetabolism( ConditionDefinition conditionFlurryOfBlowsHeightenedMetabolism, ConditionDefinition conditionFlurryOfBlowsFreedomHeightenedMetabolism) diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 02f5ee0e93..91a47a16fc 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -287,6 +287,7 @@ public class Settings : UnityModManager.ModSettings public bool EnableMonkSuperiorDefenseToReplaceEmptyBody { get; set; } public bool EnableMonkBodyAndMindToReplacePerfectSelf { get; set; } public bool EnableMonkWeaponSpecialization { get; set; } + public bool SwapMonkToUseOneDndUnarmedDieTypeProgression { get; set; } public bool AddPaladinSmiteToggle { get; set; } public bool EnablePaladinLayOnHandsAsBonusAction { get; set; } public bool EnablePaladinSmiteAsBonusAction { get; set; } diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index 6ec6555302..d90072fda7 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -574,6 +574,7 @@ false false false + false false false false diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index 84c2d92199..f627f73647 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -1,6 +1,6 @@ - 4 + 1 0 0 false @@ -269,7 +269,7 @@ true true true - false + true true false true @@ -521,7 +521,7 @@ true true true - false + true true true true @@ -588,23 +588,23 @@ false en true - false + true false - false - false - false + true + true + true true true true true true true - false - false + true + true false true true - false + true true true @@ -616,10 +616,11 @@ true true false + true true - false + true false - false + true true true false @@ -627,10 +628,10 @@ true true false - false - false - false - false + true + true + true + true false false false @@ -890,7 +891,7 @@ MetamagicWidenedSpell true - false + true false true @@ -907,7 +908,7 @@ true true true - false + true true true false @@ -1432,8 +1433,8 @@ false false 2 - false - false + true + true true diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 13e54f5657..0c9949cf0f 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -304,6 +304,7 @@ ModUi/&SwapAbjurationSavant=Tauschen Sie Abjurer Abjuratio ModUi/&SwapCraftedItemAndRecipeIcons=+ Rezepte und Symbole für hergestellte Gegenstände im Shop austauschenModUi/&SwapEvocationSavant=Tauschen Sie Evoker Evocation Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] ModUi/&SwapEvocationPotentCantripAndSculptSpell=Tauschen Sie die Funktionen Evoker Sculpt Spells und Potent Cantrip aus ModUi/&SwapEvocationSavant=Tauschen Sie Evoker Evocation Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Tauschen Sie Unbewaffneter Angriff aus, um die Würfeltyp-Progression von 5e 2024 zu verwenden ModUi/&SwapOneDndBarkskinSpell=Tauschen Sie Barkskin gegen die 5e 2024-Version aus [Bonusaktion, keine Konzentration, AC auf 17 eingestellt] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Tauschen Sie Second Wind aus, um den Nutzungsfortschritt von 5e 2024 zu verwenden. ModUi/&SwapWarlockToUseOneDndInvocationProgression=Tauschen Sie den Fortschritt der Anrufungen mit der Version 5e 2024 aus. diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index aa02cd3973..8d01e1badf 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -304,6 +304,7 @@ ModUi/&SwapAbjurationSavant=Swap Abjurer Abjuration Savant ModUi/&SwapCraftedItemAndRecipeIcons=+ Swap recipe and crafted item icons in shop ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip features ModUi/&SwapEvocationSavant=Swap Evoker Evocation Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Swap Unarmed Attack to use 5e 2024 die type progression ModUi/&SwapOneDndBarkskinSpell=Swap Barkskin with 5e 2024 version [bonus action, no concentration, AC set to 17] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Swap Second Wind to use 5e 2024 usages progression ModUi/&SwapWarlockToUseOneDndInvocationProgression=Swap Invocations progression with 5e 2024 version diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 592c5b7f86..394dc70885 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -305,6 +305,7 @@ ModUi/&SwapAbjurationSavant=Intercambia Abjurador Sabio de ModUi/&SwapCraftedItemAndRecipeIcons=+ Intercambia íconos de recetas y objetos elaborados en la tiendaModUi/&SwapEvocationSavant=Intercambia Evocador Sabio de la evocación con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de ranura] ModUi/&SwapEvocationPotentCantripAndSculptSpell=Intercambia las características de Evocador, Hechizos de escultura y Truco potente ModUi/&SwapEvocationSavant=Intercambia Evocador Sabio de la evocación con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de ranura] +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Cambia Ataque desarmado para usar la progresión de tipo de dado de 5e 2024 ModUi/&SwapOneDndBarkskinSpell=Intercambia Piel de corteza con la versión 5e 2024 [acción adicional, sin concentración, CA establecida en 17] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Cambia Second Wind para usar la progresión de usos de 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Intercambia la progresión de Invocaciones con la versión 5e 2024 diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 6759bf6708..e9e6f95333 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -304,6 +304,7 @@ ModUi/&SwapAbjurationSavant=Échangez Abjurer Abjuration S ModUi/&SwapCraftedItemAndRecipeIcons=+ Échangez les icônes de recettes et d'objets fabriqués dans la boutiqueModUi/&SwapEvocationSavant=Échangez Evoker Evocation Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] ModUi/&SwapEvocationPotentCantripAndSculptSpell=Échangez les fonctionnalités Sculpt Spells d'Evoker et Potent Cantrip ModUi/&SwapEvocationSavant=Échangez Evoker Evocation Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Remplacez Attaque non armée par la progression du type de dé 5e 2024 ModUi/&SwapOneDndBarkskinSpell=Échangez Barkskin avec la version 5e 2024 [action bonus, pas de concentration, CA réglée à 17] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Remplacez Second Wind pour utiliser la progression des utilisations 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Échangez la progression des Invocations avec la version 5e 2024 diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 37cc43b900..1f1caa1786 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -304,6 +304,7 @@ ModUi/&SwapAbjurationSavant=Sostituisci Abjurer Savant del ModUi/&SwapCraftedItemAndRecipeIcons=+ Scambia le icone delle ricette e degli oggetti realizzati nel negozioModUi/&SwapEvocationSavant=Sostituisci Evocatore Sapiente dell'evocazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] ModUi/&SwapEvocationPotentCantripAndSculptSpell=Scambia le funzionalità Evocatore Incantesimi di Scultura e Trucchetto Potente ModUi/&SwapEvocationSavant=Sostituisci Evocatore Sapiente dell'evocazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Sostituisci Attacco disarmato per usare la progressione del tipo di dado 5e 2024 ModUi/&SwapOneDndBarkskinSpell=Sostituisci Barkskin con la versione 5e 2024 [azione bonus, nessuna concentrazione, CA impostata a 17] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Sostituisci Second Wind per usare la progressione di utilizzo 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Scambia la progressione delle Invocazioni con la versione 5e 2024 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index c8848cfbe2..4621df16ec 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -304,6 +304,7 @@ ModUi/&SwapAbjurationSavant=Abjurer Abjuration Savant+ ショップでレシピとクラフトアイテムのアイコンを交換ModUi/&SwapEvocationSavant=Evoker Evocation Savant を 5e 2024 バージョン [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびにさらに 1 つ習得する] と入れ替えます ModUi/&SwapEvocationPotentCantripAndSculptSpell=エヴォーカースカルプトスペルとポテンシャルキャントリップの機能を入れ替えます ModUi/&SwapEvocationSavant=Evoker Evocation Savant を 5e 2024 バージョン [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびにさらに 1 つ習得する] と入れ替えます +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Unarmed Attack を 5e 2024 ダイスタイプの進行に置き換える ModUi/&SwapOneDndBarkskinSpell=Barkskin を 5e 2024 バージョンの [ボーナス アクション、集中力なし、AC を 17 に設定] と交換します。 ModUi/&SwapSecondWindToUseOneDndUsagesProgression=セカンド ウィンド を 5e 2024 の使用進行に置き換える ModUi/&SwapWarlockToUseOneDndInvocationProgression=Invocations の進行を 5e 2024 バージョンと入れ替える diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index d4b8e9349d..4330919447 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -304,6 +304,7 @@ ModUi/&SwapAbjurationSavant=Abjurer Abjuration Savant+ 상점에서 레시피와 제작 아이템 아이콘 교환ModUi/&SwapEvocationSavant=Evoker Evocation Savant를 5e 2024 버전으로 교체하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] ModUi/&SwapEvocationPotentCantripAndSculptSpell=소환사 조각 주문과 강력한 주문 기능을 교체하세요 ModUi/&SwapEvocationSavant=Evoker Evocation Savant를 5e 2024 버전으로 교체하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=비무장 공격을 5e 2024 주사위 유형 진행을 사용하도록 바꾸세요. ModUi/&SwapOneDndBarkskinSpell=Barkskin을 5e 2024 버전 [보너스 액션, 집중 없음, AC 17로 설정]과 교환하세요 ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Second Wind를 5e 2024 사용 진행을 사용하도록 바꾸세요. ModUi/&SwapWarlockToUseOneDndInvocationProgression=Invocations 진행을 5e 2024 버전으로 바꾸세요 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 53b03cad0c..e7fd682258 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -304,6 +304,7 @@ ModUi/&SwapAbjurationSavant=Troque Abjurador Sábio da Abj ModUi/&SwapCraftedItemAndRecipeIcons=+ Troque ícones de receitas e itens criados na lojaModUi/&SwapEvocationSavant=Troque Evocador Sábio da Evocação pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] ModUi/&SwapEvocationPotentCantripAndSculptSpell=Troque os recursos Evocador Magias de Esculpir e Truque Potente ModUi/&SwapEvocationSavant=Troque Evocador Sábio da Evocação pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Troque Ataque Desarmado para usar a progressão do tipo de dado 5e 2024 ModUi/&SwapOneDndBarkskinSpell=Troque Barkskin pela versão 5e 2024 [ação bônus, sem concentração, CA definida como 17] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Troque Segundo Vento para usar a progressão de usos do 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Troque a progressão de Invocações pela versão 5e 2024 diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 97c4021792..5f62766b5c 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -304,6 +304,7 @@ ModUi/&SwapAbjurationSavant=Поменяйте Abjurer Abj ModUi/&SwapCraftedItemAndRecipeIcons=+ Заменить значок рецепта значком создаваемого предмета в магазинеModUi/&SwapEvocationSavant=Замените Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] ModUi/&SwapEvocationPotentCantripAndSculptSpell=Поменяйте местами функции Evoker Sculpt Spells и Potent Cantrip ModUi/&SwapEvocationSavant=Замените Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Поменяйте Безоружная атака на использование прогрессии типа кубика 5e 2024 ModUi/&SwapOneDndBarkskinSpell=Поменяйте Barkskin на версию 5e 2024 [бонусное действие, нет концентрации, AC установлен на 17] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Поменяйте Второе дыхание на использование прогрессии использования 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Поменять местами прогрессию Invocations с версией 5e 2024 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 309d346fd2..54cf87af91 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -304,6 +304,7 @@ ModUi/&SwapAbjurationSavant=将Abjurer Abjuration Savant+ 在商店中交换配方和制作物品图标ModUi/&SwapEvocationSavant=将Evoker Evocation Savant 与 5e 2024 版本交换[获得时学习 2 个学校法术,每次获得一个插槽等级时再学习 1 个] ModUi/&SwapEvocationPotentCantripAndSculptSpell=交换召唤师 塑形法术和强力法术功能 ModUi/&SwapEvocationSavant=将Evoker Evocation Savant 与 5e 2024 版本交换[获得时学习 2 个学校法术,每次获得一个插槽等级时再学习 1 个] +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=切换徒手攻击以使用 5e 2024 骰子类型进程 ModUi/&SwapOneDndBarkskinSpell=将 Barkskin 与 5e 2024 版本交换[奖励行动,无集中力,AC 设置为 17] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=交换 Second Wind 以使用 5e 2024 使用进度 ModUi/&SwapWarlockToUseOneDndInvocationProgression=将 Invocations 进程与 5e 2024 版本交换 From 254c85317d716f7ed9d52190812af6a9a9e3a8ff Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 2 Nov 2024 13:43:46 -0700 Subject: [PATCH 27/85] add Remove Blind Sense at 14 and remove hidden sort future features to always sort --- .../Api/DatabaseHelper-RELEASE.cs | 3 + .../Displays/ClassesDisplay.cs | 13 +++- .../Displays/GeneralDisplay.cs | 35 +++++---- .../Models/CharacterContext.cs | 17 +--- .../Models/CharacterUAContext.cs | 78 +++++++------------ .../Models/ClassesContext.cs | 7 +- .../Models/RacesContext.cs | 7 +- .../Models/SubclassesContext.cs | 8 +- SolastaUnfinishedBusiness/Settings.cs | 4 +- SolastaUnfinishedBusiness/Settings/empty.xml | 2 +- .../Settings/zappastuff.xml | 2 +- .../Translations/de/Others-de.txt | 2 +- .../Translations/de/Settings-de.txt | 3 +- .../Translations/en/Others-en.txt | 2 +- .../Translations/en/Settings-en.txt | 3 +- .../Translations/es/Others-es.txt | 2 +- .../Translations/es/Settings-es.txt | 3 +- .../Translations/fr/Others-fr.txt | 2 +- .../Translations/fr/Settings-fr.txt | 3 +- .../Translations/it/Others-it.txt | 2 +- .../Translations/it/Settings-it.txt | 3 +- .../Translations/ja/Others-ja.txt | 2 +- .../Translations/ja/Settings-ja.txt | 3 +- .../Translations/ko/Others-ko.txt | 2 +- .../Translations/ko/Settings-ko.txt | 3 +- .../Translations/pt-BR/Others-pt-BR.txt | 2 +- .../Translations/pt-BR/Settings-pt-BR.txt | 3 +- .../Translations/ru/Others-ru.txt | 2 +- .../Translations/ru/Settings-ru.txt | 3 +- .../Translations/zh-CN/Others-zh-CN.txt | 2 +- .../Translations/zh-CN/Settings-zh-CN.txt | 3 +- 31 files changed, 104 insertions(+), 122 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 16a1b859a9..38ea82d6a3 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -2507,6 +2507,9 @@ internal static FeatureDefinitionSavingThrowAffinity internal static class FeatureDefinitionSenses { + internal static FeatureDefinitionSense SenseRogueBlindsense { get; } = + GetDefinition("SenseRogueBlindsense"); + internal static FeatureDefinitionSense SenseBlindSight6 { get; } = GetDefinition("SenseBlindSight6"); diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index a65525322e..83124fc2b9 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -274,10 +274,10 @@ internal static void DisplayClasses() CharacterContext.SwitchRangerHumanoidFavoredEnemy(); } - toggle = Main.Settings.EnableRangerNatureShroudAt10; - if (UI.Toggle(Gui.Localize("ModUi/&EnableRangerNatureShroudAt10"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.EnableRangerNatureShroudAt14; + if (UI.Toggle(Gui.Localize("ModUi/&EnableRangerNatureShroudAt14"), ref toggle, UI.AutoWidth())) { - Main.Settings.EnableRangerNatureShroudAt10 = toggle; + Main.Settings.EnableRangerNatureShroudAt14 = toggle; CharacterContext.SwitchRangerNatureShroud(); } @@ -313,6 +313,13 @@ internal static void DisplayClasses() CharacterContext.SwitchRogueSteadyAim(); } + toggle = Main.Settings.RemoveRogueBlindSense; + if (UI.Toggle(Gui.Localize("ModUi/&RemoveRogueBlindSense"), ref toggle, UI.AutoWidth())) + { + Main.Settings.RemoveRogueBlindSense = toggle; + CharacterContext.SwitchRogueBlindSense(); + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&SorcererTitle") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 8861074b48..53745822f1 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -425,6 +425,13 @@ private static void DisplayOneDnd() UI.Label("" + Gui.Localize("Class/&RangerTitle") + ":"); UI.Label(); + toggle = Main.Settings.EnableRangerNatureShroudAt14; + if (UI.Toggle(Gui.Localize("ModUi/&EnableRangerNatureShroudAt14"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableRangerNatureShroudAt14 = toggle; + CharacterContext.SwitchRangerNatureShroud(); + } + toggle = Main.Settings.EnableRangerSpellCastingAtLevel1; if (UI.Toggle(Gui.Localize("ModUi/&EnableRangerSpellCastingAtLevel1"), ref toggle, UI.AutoWidth())) { @@ -443,6 +450,20 @@ private static void DisplayOneDnd() CharacterContext.SwitchRogueCunningStrike(); } + toggle = Main.Settings.EnableRogueSteadyAim; + if (UI.Toggle(Gui.Localize("ModUi/&EnableRogueSteadyAim"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableRogueSteadyAim = toggle; + CharacterContext.SwitchRogueSteadyAim(); + } + + toggle = Main.Settings.RemoveRogueBlindSense; + if (UI.Toggle(Gui.Localize("ModUi/&RemoveRogueBlindSense"), ref toggle, UI.AutoWidth())) + { + Main.Settings.RemoveRogueBlindSense = toggle; + CharacterContext.SwitchRogueBlindSense(); + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&WarlockTitle") + ":"); UI.Label(); @@ -778,20 +799,6 @@ private static void DisplayTabletop() UI.Label(); - toggle = Main.Settings.EnableRangerNatureShroudAt10; - if (UI.Toggle(Gui.Localize("ModUi/&EnableRangerNatureShroudAt10"), ref toggle, UI.AutoWidth())) - { - Main.Settings.EnableRangerNatureShroudAt10 = toggle; - CharacterContext.SwitchRangerNatureShroud(); - } - - toggle = Main.Settings.EnableRogueSteadyAim; - if (UI.Toggle(Gui.Localize("ModUi/&EnableRogueSteadyAim"), ref toggle, UI.AutoWidth())) - { - Main.Settings.EnableRogueSteadyAim = toggle; - CharacterContext.SwitchRogueSteadyAim(); - } - toggle = Main.Settings.EnableSorcererMagicalGuidance; if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcererMagicalGuidance"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index 0102ee1a64..4fa643d6e4 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -176,7 +176,7 @@ internal static partial class CharacterContext private static readonly FeatureDefinitionPower FeatureDefinitionPowerNatureShroud = FeatureDefinitionPowerBuilder .Create("PowerRangerNatureShroud") .SetGuiPresentation(Category.Feature, Invisibility) - .SetUsesProficiencyBonus(ActivationTime.BonusAction) + .SetUsesAbilityBonus(ActivationTime.BonusAction, RechargeRate.LongRest, AttributeDefinitions.Wisdom) .SetEffectDescription( EffectDescriptionBuilder .Create() @@ -657,10 +657,7 @@ bool ShouldBe2Points() } } - if (Main.Settings.EnableSortingFutureFeatures) - { - characterClassDefinition.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } + characterClassDefinition.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } } @@ -724,10 +721,7 @@ internal static void SwitchFighterWeaponSpecialization() } } - if (Main.Settings.EnableSortingFutureFeatures) - { - Fighter.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } + Fighter.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchFirstLevelTotalFeats() @@ -983,10 +977,7 @@ internal static void SwitchSorcererMagicalGuidance() x.level == 5 && x.FeatureDefinition == FeatureSorcererMagicalGuidance); } - if (Main.Settings.EnableSortingFutureFeatures) - { - Sorcerer.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } + Sorcerer.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchScimitarWeaponSpecialization() diff --git a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs index f6dc785a25..b4b176366c 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs @@ -537,10 +537,7 @@ internal static void SwitchBarbarianBrutalStrike() x.level == 17 && x.FeatureDefinition == _featureSetBarbarianBrutalStrikeImprovement17); } - if (Main.Settings.EnableSortingFutureFeatures) - { - Barbarian.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } + Barbarian.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchBarbarianBrutalCritical() @@ -578,10 +575,7 @@ internal static void SwitchBarbarianBrutalCritical() } } - if (Main.Settings.EnableSortingFutureFeatures) - { - Barbarian.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } + Barbarian.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchBarbarianRecklessSameBuffDebuffDuration() @@ -611,10 +605,7 @@ internal static void SwitchBarbarianFightingStyle() x.level == 2 && x.FeatureDefinition == FightingStyleChoiceBarbarian); } - if (Main.Settings.EnableSortingFutureFeatures) - { - Barbarian.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } + Barbarian.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } #endregion @@ -791,10 +782,7 @@ internal static void SwitchMonkAbundantKi() x.FeatureDefinition == AttributeModifierMonkAbundantKi); } - if (Main.Settings.EnableSortingFutureFeatures) - { - Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } + Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchMonkFightingStyle() @@ -811,10 +799,7 @@ internal static void SwitchMonkFightingStyle() x.FeatureDefinition == FightingStyleChoiceMonk); } - if (Main.Settings.EnableSortingFutureFeatures) - { - Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } + Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack() @@ -887,10 +872,7 @@ internal static void SwitchMonkHeightenedMetabolism() x.FeatureDefinition == PowerMonkStepOfTheWindHeightenedMetabolism)); } - if (Main.Settings.EnableSortingFutureFeatures) - { - Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } + Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchMonkSuperiorDefenseToReplaceEmptyBody() @@ -905,10 +887,7 @@ internal static void SwitchMonkSuperiorDefenseToReplaceEmptyBody() ? new FeatureUnlockByLevel(PowerMonkSuperiorDefense, 18) : new FeatureUnlockByLevel(Level20Context.PowerMonkEmptyBody, 18)); - if (Main.Settings.EnableSortingFutureFeatures) - { - Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } + Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchMonkBodyAndMindToReplacePerfectSelf() @@ -923,10 +902,7 @@ internal static void SwitchMonkBodyAndMindToReplacePerfectSelf() ? new FeatureUnlockByLevel(FeatureMonkBodyAndMind, 20) : new FeatureUnlockByLevel(Level20Context.FeatureMonkPerfectSelf, 20)); - if (Main.Settings.EnableSortingFutureFeatures) - { - Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } + Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchMonkWeaponSpecialization() @@ -951,10 +927,7 @@ internal static void SwitchMonkWeaponSpecialization() } } - if (Main.Settings.EnableSortingFutureFeatures) - { - Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } + Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } private static readonly List MonkUnarmedDieTypeByRank = @@ -1128,10 +1101,10 @@ internal static void SwitchRangerHumanoidFavoredEnemy() internal static void SwitchRangerNatureShroud() { - if (Main.Settings.EnableRangerNatureShroudAt10) + if (Main.Settings.EnableRangerNatureShroudAt14) { Ranger.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(FeatureDefinitionPowerNatureShroud, 10)); + new FeatureUnlockByLevel(FeatureDefinitionPowerNatureShroud, 14)); } else { @@ -1140,10 +1113,7 @@ internal static void SwitchRangerNatureShroud() && x.FeatureDefinition == FeatureDefinitionPowerNatureShroud); } - if (Main.Settings.EnableSortingFutureFeatures) - { - Ranger.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } + Ranger.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } #endregion @@ -1738,10 +1708,7 @@ internal static void SwitchRogueCunningStrike() Rogue.FeatureUnlocks.RemoveAll(x => x.level == 14 && x.FeatureDefinition == _featureSetRogueDeviousStrike); } - if (Main.Settings.EnableSortingFutureFeatures) - { - Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } + Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchRogueFightingStyle() @@ -1756,10 +1723,7 @@ internal static void SwitchRogueFightingStyle() Rogue.FeatureUnlocks.RemoveAll(x => x.level == 2 && x.FeatureDefinition == FightingStyleChoiceRogue); } - if (Main.Settings.EnableSortingFutureFeatures) - { - Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } + Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchRogueSteadyAim() @@ -1774,10 +1738,20 @@ internal static void SwitchRogueSteadyAim() x.level == 3 && x.FeatureDefinition == PowerFeatSteadyAim); } - if (Main.Settings.EnableSortingFutureFeatures) + Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchRogueBlindSense() + { + Rogue.FeatureUnlocks.RemoveAll(x => + x.level == 3 && x.FeatureDefinition == FeatureDefinitionSenses.SenseRogueBlindsense); + + if (!Main.Settings.RemoveRogueBlindSense) { - Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + Rogue.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(FeatureDefinitionSenses.SenseRogueBlindsense, 14)); } + + Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } private static void SwitchRogueStrSaving() diff --git a/SolastaUnfinishedBusiness/Models/ClassesContext.cs b/SolastaUnfinishedBusiness/Models/ClassesContext.cs index f231fb2150..9a66dc3cd0 100644 --- a/SolastaUnfinishedBusiness/Models/ClassesContext.cs +++ b/SolastaUnfinishedBusiness/Models/ClassesContext.cs @@ -10,10 +10,7 @@ internal static void Load() { InventorClass.Build(); - if (Main.Settings.EnableSortingFutureFeatures) - { - DatabaseRepository.GetDatabase() - .Do(x => x.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock)); - } + DatabaseRepository.GetDatabase() + .Do(x => x.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock)); } } diff --git a/SolastaUnfinishedBusiness/Models/RacesContext.cs b/SolastaUnfinishedBusiness/Models/RacesContext.cs index dde4b6a4df..6768b727b8 100644 --- a/SolastaUnfinishedBusiness/Models/RacesContext.cs +++ b/SolastaUnfinishedBusiness/Models/RacesContext.cs @@ -68,11 +68,8 @@ internal static void Load() Main.Settings.SubraceEnabled.Remove(name); } - if (Main.Settings.EnableSortingFutureFeatures) - { - DatabaseRepository.GetDatabase() - .Do(x => x.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock)); - } + DatabaseRepository.GetDatabase() + .Do(x => x.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock)); } private static void LoadRace([NotNull] CharacterRaceDefinition characterRaceDefinition) diff --git a/SolastaUnfinishedBusiness/Models/SubclassesContext.cs b/SolastaUnfinishedBusiness/Models/SubclassesContext.cs index 9bde09b3ed..1a3f9e16a3 100644 --- a/SolastaUnfinishedBusiness/Models/SubclassesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SubclassesContext.cs @@ -52,12 +52,8 @@ internal static void Load() kvp.Value.RemoveAll(x => subclasses.Contains(x)); } - // sorting - if (Main.Settings.EnableSortingFutureFeatures) - { - DatabaseRepository.GetDatabase() - .Do(x => x.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock)); - } + DatabaseRepository.GetDatabase() + .Do(x => x.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock)); } internal static void LateLoad() diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 91a47a16fc..d8a5d73c2f 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -58,7 +58,6 @@ public class Settings : UnityModManager.ModSettings public bool EnableSameWidthInvocationSelection { get; set; } = true; public bool EnableSortingFightingStyles { get; set; } = true; public bool EnableSortingSubclasses { get; set; } = true; - public bool EnableSortingFutureFeatures { get; set; } = true; public bool FixAsianLanguagesTextWrap { get; set; } = true; public bool KeepCharactersPanelOpenAndHeroSelectedAfterLevelUp { get; set; } = true; public bool DisableStreamlinedMultiLevelUp { get; set; } = true; @@ -275,7 +274,7 @@ public class Settings : UnityModManager.ModSettings public bool SwapSecondWindToUseOneDndUsagesProgression { get; set; } public bool EnableFighterWeaponSpecialization { get; set; } public bool AddHumanoidFavoredEnemyToRanger { get; set; } - public bool EnableRangerNatureShroudAt10 { get; set; } + public bool EnableRangerNatureShroudAt14 { get; set; } public bool EnableRangerSpellCastingAtLevel1 { get; set; } public bool EnableMonkAbundantKi { get; set; } public bool EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack { get; set; } @@ -296,6 +295,7 @@ public class Settings : UnityModManager.ModSettings public bool EnableRogueCunningStrike { get; set; } public bool EnableRogueFightingStyle { get; set; } public bool EnableRogueSteadyAim { get; set; } + public bool RemoveRogueBlindSense { get; set; } public bool EnableSorcererMagicalGuidance { get; set; } public bool EnableSorcererQuickenedAction { get; set; } public bool HideQuickenedActionWhenMetamagicOff { get; set; } diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index d90072fda7..b590ed14bb 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -561,7 +561,7 @@ false false false - false + false false false false diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index f627f73647..602c257226 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -603,7 +603,7 @@ true false true - true + true true true true diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index a069d293c6..989cb095a0 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -159,7 +159,7 @@ Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=Sie können 1 Ki- Feature/&PowerMonkStepOfTheWindHeightenedMetabolismTitle=Schritt des Windes Feature/&PowerMonkSuperiorDefenseDescription=Als freie Aktion können Sie 3 Ki-Punkte ausgeben, um sich 1 Minute lang oder bis Sie handlungsunfähig werden, perfekt gegen Schaden zu wappnen. Während dieser Zeit sind Sie gegen alle Schäden außer Machtschaden resistent. Feature/&PowerMonkSuperiorDefenseTitle=Überlegene Verteidigung -Feature/&PowerRangerNatureShroudDescription=Sie nutzen die Kräfte der Natur, um sich kurzzeitig vor Blicken zu verstecken. Als Bonusaktion können Sie sich bis zum Beginn Ihres nächsten Zuges auf magische Weise unsichtbar machen, zusammen mit der gesamten Ausrüstung, die Sie tragen oder bei sich haben. Sie können diese Funktion so oft verwenden, wie Ihr Fertigkeitsbonus beträgt, und Sie erhalten alle verbrauchten Anwendungen zurück, wenn Sie eine lange Pause beenden. +Feature/&PowerRangerNatureShroudDescription=Sie nutzen die Kräfte der Natur, um sich kurzzeitig vor Blicken zu verstecken. Als Bonusaktion können Sie sich bis zum Beginn Ihres nächsten Zuges auf magische Weise unsichtbar machen, zusammen mit der gesamten Ausrüstung, die Sie tragen oder bei sich haben. Sie können diese Funktion so oft verwenden, wie Ihr Weisheitsattributmodifikator es vorgibt, und Sie erhalten alle verbrauchten Anwendungen zurück, wenn Sie eine lange Pause beenden. Feature/&PowerRangerNatureShroudTitle=Schleier der Natur Feature/&PowerRogueCunningStrikeDescription=Sie haben raffinierte Möglichkeiten entwickelt, Ihren Schleichangriff einzusetzen. Wenn Sie Schleichangriffsschaden verursachen, können Sie auf Schleichangriffswürfel verzichten und stattdessen zusätzliche Cunning Strike-Effekte hinzufügen. Feature/&PowerRogueCunningStrikeDisarmDescription=Das Ziel muss einen Rettungswurf für Geschicklichkeit bestehen oder ist bis zum Ende seines nächsten Zuges bei allen Angriffen im Nachteil. diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 0c9949cf0f..0342255f28 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -150,7 +150,7 @@ ModUi/&EnablePaladinSpellCastingAtLevel1=Aktiviere Zauberwirken[https://www.pcg-random.org] ModUi/&EnableProneAction=Aktivieren Sie die Aktion In die Hocke gehen [Sie können kostenlos in die Hocke gehen] ModUi/&EnablePullPushOnVerticalDirection=Aktivieren Sie Push- und Pull-Bewegungseffekte, damit diese auch auf der Auf-/Ab-Achse funktionieren -ModUi/&EnableRangerNatureShroudAt10=Aktivieren Sie die Funktion Nature's Veil auf Stufe 10 [als Bonusaktion können Sie bis zum Beginn der nächsten Runde auf magische Weise unsichtbar werden] +ModUi/&EnableRangerNatureShroudAt14=Aktivieren Sie die Funktion Nature's Veil auf Stufe 14 [als Bonusaktion können Sie bis zum Beginn der nächsten Runde auf magische Weise unsichtbar werden] ModUi/&EnableRangerSpellCastingAtLevel1=Aktiviere Zauberwirken auf Stufe 1 statt 2. ModUi/&EnableRelearnSpells=Aktivieren Sie die Auswahl von Zaubersprüchen oder Zaubersprüchen, die Sie bereits aus anderen Quellen gelernt haben. ModUi/&EnableRespecAction=Aktivieren Sie RESPEC nach der Rest-Aktion [RESPEC nicht während einer Multiplayer-Sitzung verwenden] @@ -258,6 +258,7 @@ ModUi/&RemoveBardSongOfRest=Entferne Song of Rest auf Lev ModUi/&RemoveBugVisualModels=Ersetzen Sie im Spiel spinnenähnliche Modelle durch bärenähnliche Modelle [Spinnenphobie] [Neustart erforderlich] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Humanoidenfilter bei Grauenhaftem Gelächter entfernen ModUi/&RemoveRecurringEffectOnEntangle=Wende den Verstricken-Effekt nur beim Zaubern an und erzwinge außerdem eine Stärkeprüfung, um sich von den Ranken zu befreien. +ModUi/&RemoveRogueBlindSense=Entferne Blind Sense auf Level 14 ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Schulbeschränkungen von Shadowcaster entfernen ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Schulbeschränkungen von Spellblade entfernen ModUi/&RestockAntiquarians=Antiquariat auffüllen [Halman Summer] diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index edd948ddde..fca460aaab 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -159,7 +159,7 @@ Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=You can spend 1 K Feature/&PowerMonkStepOfTheWindHeightenedMetabolismTitle=Step of the Wind Feature/&PowerMonkSuperiorDefenseDescription=As a free action, you can spend 3 Ki Points to perfectly bolster yourself against harm for 1 minute or until you become incapacitated. During that time, you have resistance to all damage except Force damage. Feature/&PowerMonkSuperiorDefenseTitle=Superior Defense -Feature/&PowerRangerNatureShroudDescription=You draw on the powers of nature to hide yourself from view briefly. As a bonus action, you can magically become invisible, along with any equipment you are wearing or carrying, until the start of your next turn. You can use this feature a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest. +Feature/&PowerRangerNatureShroudDescription=You draw on the powers of nature to hide yourself from view briefly. As a bonus action, you can magically become invisible, along with any equipment you are wearing or carrying, until the start of your next turn. You can use this feature a number of times equal to your Wisdom attribute modifier, and you regain all expended uses when you finish a long rest. Feature/&PowerRangerNatureShroudTitle=Nature's Veil Feature/&PowerRogueCunningStrikeDescription=You have developed cunning ways to use your Sneak Attack. When you deal Sneak Attack damage, you can forgo Sneak Attack dice to add instead additional Cunning Strike effects. Feature/&PowerRogueCunningStrikeDisarmDescription=The target must succeed on a Dexterity saving throw, or have disadvantage on all attacks until end of its next turn. diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 8d01e1badf..15ad31199d 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -150,7 +150,7 @@ ModUi/&EnablePaladinSpellCastingAtLevel1=Enable spellcasting[https://www.pcg-random.org] ModUi/&EnableProneAction=Enable the Fall Prone action [you can fall prone at no cost] ModUi/&EnablePullPushOnVerticalDirection=Enable push and pull motion effects to also work on up/down axis -ModUi/&EnableRangerNatureShroudAt10=Enable Nature's Veil feature at level 10 [as a bonus action, you can magically become invisible until start of next turn] +ModUi/&EnableRangerNatureShroudAt14=Enable Nature's Veil feature at level 14 [as a bonus action, you can magically become invisible until start of next turn] ModUi/&EnableRangerSpellCastingAtLevel1=Enable spellcasting at level 1 instead of 2 ModUi/&EnableRelearnSpells=Enable selection of cantrips or spells already learned from other sources ModUi/&EnableRespecAction=Enable the RESPEC after rest action [don't use RESPEC during a multiplayer session] @@ -258,6 +258,7 @@ ModUi/&RemoveBardSongOfRest=Remove Song of Rest at level ModUi/&RemoveBugVisualModels=Replace spider like models with bear like models in the game [arachnophobia] [Requires Restart] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Remove humanoid filter on Hideous Laughter ModUi/&RemoveRecurringEffectOnEntangle=Only apply Entangle effect at casting time and also force a strength check to break free from the vines +ModUi/&RemoveRogueBlindSense=Remove Blind Sense at level 14 ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Remove school restrictions from Shadowcaster ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Remove school restrictions from Spellblade ModUi/&RestockAntiquarians=Restock Antiquarians [Halman Summer] diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index ab85d5a7c7..4f37279e5f 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -159,7 +159,7 @@ Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=Puedes gastar 1 p Feature/&PowerMonkStepOfTheWindHeightenedMetabolismTitle=Paso del viento Feature/&PowerMonkSuperiorDefenseDescription=Como acción gratuita, puedes gastar 3 puntos Ki para reforzarte perfectamente contra el daño durante 1 minuto o hasta que quedes incapacitado. Durante ese tiempo, tienes resistencia a todo el daño excepto al daño de la Fuerza. Feature/&PowerMonkSuperiorDefenseTitle=Defensa superior -Feature/&PowerRangerNatureShroudDescription=Recurres a los poderes de la naturaleza para ocultarte de la vista por un breve período. Como acción adicional, puedes volverte invisible mágicamente, junto con cualquier equipo que lleves puesto o que lleves encima, hasta el comienzo de tu siguiente turno. Puedes usar esta característica una cantidad de veces igual a tu bonificación por competencia y recuperas todos los usos gastados cuando terminas un descanso prolongado. +Feature/&PowerRangerNatureShroudDescription=Recurres a los poderes de la naturaleza para ocultarte de la vista durante un breve período. Como acción adicional, puedes volverte invisible mágicamente, junto con cualquier equipo que lleves puesto o que lleves encima, hasta el comienzo de tu siguiente turno. Puedes usar esta característica una cantidad de veces igual a tu modificador de atributo Sabiduría, y recuperas todos los usos gastados cuando terminas un descanso prolongado. Feature/&PowerRangerNatureShroudTitle=El velo de la naturaleza Feature/&PowerRogueCunningStrikeDescription=Has desarrollado formas astutas de usar tu ataque furtivo. Cuando infliges daño con un ataque furtivo, puedes prescindir de los dados de ataque furtivo para añadir en su lugar efectos adicionales de golpe astuto. Feature/&PowerRogueCunningStrikeDisarmDescription=El objetivo debe tener éxito en una tirada de salvación de Destreza, o tendrá desventaja en todos los ataques hasta el final de su siguiente turno. diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 394dc70885..c08ca45879 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -151,7 +151,7 @@ ModUi/&EnablePaladinSpellCastingAtLevel1=Habilitar el lanzamiento ModUi/&EnablePcgRandom=Habilitar un mejor algoritmo generador aleatorio [https://www.pcg-random.org] ModUi/&EnableProneAction=Habilita la acción Caer boca abajo [puedes caer boca abajo sin costo] ModUi/&EnablePullPushOnVerticalDirection=Habilite los efectos de movimiento de empujar y tirar para que funcionen también en el eje arriba/abajo -ModUi/&EnableRangerNatureShroudAt10=Habilita la característica Velo de la Naturaleza en el nivel 10 [como acción adicional, puedes volverte invisible mágicamente hasta el comienzo del siguiente turno] +ModUi/&EnableRangerNatureShroudAt14=Habilita la característica Velo de la Naturaleza en el nivel 14 [como acción adicional, puedes volverte invisible mágicamente hasta el comienzo del siguiente turno] ModUi/&EnableRangerSpellCastingAtLevel1=Habilitar el lanzamiento de hechizos en el nivel 1 en lugar del 2 ModUi/&EnableRelearnSpells=Habilitar la selección de trucos o hechizos ya aprendidos de otras fuentes ModUi/&EnableRespecAction=Habilitar la acción RESPECT después del descanso [no usar RESPECT durante una sesión multijugador] @@ -259,6 +259,7 @@ ModUi/&RemoveBardSongOfRest=Eliminar Canción de descanso ModUi/&RemoveBugVisualModels=Reemplaza los modelos tipo araña por modelos tipo oso en el juego. [arachnophobia] [Requiere reinicio] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Eliminar filtro humanoide en Risas espantosas ModUi/&RemoveRecurringEffectOnEntangle=Solo aplica el efecto Enredar en el momento del lanzamiento y también fuerza una prueba de fuerza para liberarte de las enredaderas. +ModUi/&RemoveRogueBlindSense=Elimina el Sentido ciego en el nivel 14 ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Eliminar las restricciones escolares de Shadowcaster ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Eliminar las restricciones escolares de Spellblade ModUi/&RestockAntiquarians=Reposición de Anticuarios [Halman Summer] diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 811e5f5d43..e21118dd5f 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -159,7 +159,7 @@ Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=Vous pouvez dépe Feature/&PowerMonkStepOfTheWindHeightenedMetabolismTitle=Le pas du vent Feature/&PowerMonkSuperiorDefenseDescription=En tant qu'action libre, vous pouvez dépenser 3 points de Ki pour vous protéger parfaitement contre les dégâts pendant 1 minute ou jusqu'à ce que vous soyez neutralisé. Pendant ce temps, vous bénéficiez d'une résistance à tous les dégâts, sauf les dégâts de Force. Feature/&PowerMonkSuperiorDefenseTitle=Défense supérieure -Feature/&PowerRangerNatureShroudDescription=Vous faites appel aux pouvoirs de la nature pour vous cacher temporairement de la vue. En tant qu'action bonus, vous pouvez devenir invisible par magie, ainsi que tout équipement que vous portez ou transportez, jusqu'au début de votre prochain tour. Vous pouvez utiliser cette capacité un nombre de fois égal à votre bonus de maîtrise, et vous récupérez toutes les utilisations dépensées lorsque vous terminez un repos long. +Feature/&PowerRangerNatureShroudDescription=Vous faites appel aux pouvoirs de la nature pour vous cacher temporairement de la vue. En tant qu'action bonus, vous pouvez devenir invisible par magie, ainsi que tout équipement que vous portez ou transportez, jusqu'au début de votre prochain tour. Vous pouvez utiliser cette capacité un nombre de fois égal à votre modificateur d'attribut Sagesse, et vous récupérez toutes les utilisations dépensées lorsque vous terminez un repos long. Feature/&PowerRangerNatureShroudTitle=Le voile de la nature Feature/&PowerRogueCunningStrikeDescription=Vous avez développé des moyens astucieux pour utiliser votre Attaque sournoise. Lorsque vous infligez des dégâts d'Attaque sournoise, vous pouvez renoncer aux dés d'Attaque sournoise pour ajouter à la place des effets de Frappe sournoise supplémentaires. Feature/&PowerRogueCunningStrikeDisarmDescription=La cible doit réussir un jet de sauvegarde de Dextérité ou avoir un désavantage sur toutes les attaques jusqu'à la fin de son prochain tour. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index e9e6f95333..4559107967 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -150,7 +150,7 @@ ModUi/&EnablePaladinSpellCastingAtLevel1=Activer le lancement de ModUi/&EnablePcgRandom=Activer un meilleur algorithme de générateur aléatoire [https://www.pcg-random.org] ModUi/&EnableProneAction=Activer l'action Tomber à plat ventre [vous pouvez tomber à plat ventre sans frais] ModUi/&EnablePullPushOnVerticalDirection=Activez les effets de mouvement de poussée et de traction pour qu'ils fonctionnent également sur l'axe haut/bas -ModUi/&EnableRangerNatureShroudAt10=Activez la fonction Voile de la nature au niveau 10 [en tant qu'action bonus, vous pouvez devenir invisible par magie jusqu'au début du prochain tour] +ModUi/&EnableRangerNatureShroudAt14=Activez la fonction Voile de la nature au niveau 14 [en tant qu'action bonus, vous pouvez devenir invisible par magie jusqu'au début du prochain tour] ModUi/&EnableRangerSpellCastingAtLevel1=Activer le lancement de sorts au niveau 1 au lieu de 2 ModUi/&EnableRelearnSpells=Activer la sélection de sorts ou de sorts déjà appris à partir d'autres sources ModUi/&EnableRespecAction=Activer l'action RESPEC après le repos [ne pas utiliser RESPEC pendant une session multijoueur] @@ -258,6 +258,7 @@ ModUi/&RemoveBardSongOfRest=Supprimez Chant de repos au n ModUi/&RemoveBugVisualModels=Remplacez les modèles ressemblant à des araignées par des modèles ressemblant à des ours dans le jeu [arachnophobie] [Nécessite un redémarrage] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Supprimer le filtre humanoïde sur Hideous Laugher ModUi/&RemoveRecurringEffectOnEntangle=Appliquez uniquement l'effet Enchevêtrement au moment de l'incantation et forcez également un test de force pour vous libérer des vignes +ModUi/&RemoveRogueBlindSense=Supprimez Blind Sense au niveau 14 ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Supprimer les restrictions scolaires de Shadowcaster ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Supprimer les restrictions scolaires de Spellblade ModUi/&RestockAntiquarians=Réapprovisionner les antiquaires [Halman Summer] diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index ff5e241e2c..9f9413b7ca 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -159,7 +159,7 @@ Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=Puoi spendere 1 p Feature/&PowerMonkStepOfTheWindHeightenedMetabolismTitle=Passo del vento Feature/&PowerMonkSuperiorDefenseDescription=Come azione gratuita, puoi spendere 3 Punti Ki per rafforzarti perfettamente contro i danni per 1 minuto o finché non diventi inabile. Durante quel periodo, hai resistenza a tutti i danni, eccetto i danni da Forza. Feature/&PowerMonkSuperiorDefenseTitle=Difesa superiore -Feature/&PowerRangerNatureShroudDescription=Attingi ai poteri della natura per nasconderti brevemente alla vista. Come azione bonus, puoi diventare magicamente invisibile, insieme a qualsiasi equipaggiamento tu stia indossando o trasportando, fino all'inizio del tuo turno successivo. Puoi usare questa caratteristica un numero di volte pari al tuo bonus di competenza e recuperi tutti gli usi spesi quando termini un riposo lungo. +Feature/&PowerRangerNatureShroudDescription=Attingi ai poteri della natura per nasconderti brevemente alla vista. Come azione bonus, puoi diventare magicamente invisibile, insieme a qualsiasi equipaggiamento tu stia indossando o trasportando, fino all'inizio del tuo turno successivo. Puoi usare questa caratteristica un numero di volte pari al tuo modificatore di attributo Saggezza e recuperi tutti gli usi spesi quando termini un riposo lungo. Feature/&PowerRangerNatureShroudTitle=Velo della natura Feature/&PowerRogueCunningStrikeDescription=Hai sviluppato dei modi astuti per usare il tuo Attacco furtivo. Quando infliggi danni da Attacco furtivo, puoi rinunciare ai dadi da Attacco furtivo per aggiungere invece effetti aggiuntivi di Colpo furtivo. Feature/&PowerRogueCunningStrikeDisarmDescription=Il bersaglio deve superare un tiro salvezza su Destrezza, altrimenti avrà svantaggio a tutti gli attacchi fino alla fine del suo turno successivo. diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 1f1caa1786..fa81b8fcba 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -150,7 +150,7 @@ ModUi/&EnablePaladinSpellCastingAtLevel1=Abilita lancio di incant ModUi/&EnablePcgRandom=Abilita un algoritmo di generazione casuale migliore [https://www.pcg-random.org] ModUi/&EnableProneAction=Abilita l'azione Cadi prono [puoi cadere prono senza alcun costo] ModUi/&EnablePullPushOnVerticalDirection=Abilita gli effetti di movimento push e pull per funzionare anche sull'asse su/giù -ModUi/&EnableRangerNatureShroudAt10=Abilita la funzione Velo della Natura al livello 10 [come azione bonus, puoi diventare magicamente invisibile fino all'inizio del turno successivo] +ModUi/&EnableRangerNatureShroudAt14=Abilita la funzione Velo della Natura al livello 14 [come azione bonus, puoi diventare magicamente invisibile fino all'inizio del turno successivo] ModUi/&EnableRangerSpellCastingAtLevel1=Abilita lancio di incantesimi al livello 1 invece che 2 ModUi/&EnableRelearnSpells=Abilita la selezione di trucchetti o incantesimi già appresi da altre fonti ModUi/&EnableRespecAction=Abilita RESPEC dopo l'azione di riposo [non usare RESPEC durante una sessione multigiocatore] @@ -258,6 +258,7 @@ ModUi/&RemoveBardSongOfRest=Rimuovi Canzone del Riposo al ModUi/&RemoveBugVisualModels=Sostituisci i modelli simili a ragni con modelli simili a orsi nel gioco [aracnofobia] [Richiede riavvio] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Rimuovi filtro umanoide su Risata orribile ModUi/&RemoveRecurringEffectOnEntangle=Applica l'effetto Intrappolamento solo al momento del lancio e forza anche un controllo di forza per liberarti dai tralci +ModUi/&RemoveRogueBlindSense=Rimuovi Senso cieco al livello 14 ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Rimuovi le restrizioni scolastiche da Shadowcaster ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Rimuovi le restrizioni scolastiche da Spellblade ModUi/&RestockAntiquarians=Rifornisci gli antiquari [Estate Halman] diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index 1018d4697d..e770894ed9 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -159,7 +159,7 @@ Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=1 気ポイント Feature/&PowerMonkStepOfTheWindHeightenedMetabolismTitle=風のステップ Feature/&PowerMonkSuperiorDefenseDescription=無料のアクションとして、3 Ki ポイントを消費して、1 分間または無力化されるまで、危害に対して完全に強化することができます。その間、あなたはフォースダメージを除くすべてのダメージに対する耐性を持ちます。 Feature/&PowerMonkSuperiorDefenseTitle=優れた防御力 -Feature/&PowerRangerNatureShroudDescription=自然の力を利用して、一時的に視界から身を隠すことができます。ボーナス アクションとして、次のターンの開始時まで、着ている装備や持ち運んでいる装備品とともに魔法のように透明になることができます。この機能は熟練度ボーナスに等しい回数だけ使用でき、長い休憩が終了すると消費した使用量はすべて回復します。 +Feature/&PowerRangerNatureShroudDescription=自然の力を利用して、一時的に視界から身を隠すことができます。ボーナス アクションとして、次のターンの開始時まで、着用または所持している装備とともに魔法的に透明になることができます。この特徴は、あなたの「知恵」属性の修正値に等しい回数使用でき、大休憩を終えると消費した使用回数をすべて回復します。 Feature/&PowerRangerNatureShroudTitle=自然のベール Feature/&PowerRogueCunningStrikeDescription=あなたはスニークアタックを使用する狡猾な方法を開発しました。 Sneak Attack ダメージを与えるとき、Sneak Attack ダイスを無視して、代わりに追加の Cunning Strike 効果を追加することができます。 Feature/&PowerRogueCunningStrikeDisarmDescription=ターゲットは、器用さのセーヴィング・スローに成功するか、次のターンの終わりまですべての攻撃で不利になる必要があります。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 4621df16ec..edab500393 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -150,7 +150,7 @@ ModUi/&EnablePaladinSpellCastingAtLevel1=呪文発動を ModUi/&EnablePcgRandom=より優れたランダム生成アルゴリズムを有効にする [https://www.pcg-random.org] ModUi/&EnableProneAction=うつ伏せになるアクションを有効にする [コストをかけずにうつ伏せになることができます] ModUi/&EnablePullPushOnVerticalDirection=プッシュとプルのモーション効果を上下軸でも有効にします -ModUi/&EnableRangerNatureShroudAt10=レベル 10 で 自然のベール 機能を有効にします [ボーナス アクションとして、次のターンの開始時まで魔法で透明になることができます] +ModUi/&EnableRangerNatureShroudAt14=レベル 14 で 自然のベール 機能を有効にします [ボーナス アクションとして、次のターンの開始時まで魔法で透明になることができます] ModUi/&EnableRangerSpellCastingAtLevel1=呪文発動をレベル2ではなくレベル1で有効にする ModUi/&EnableRelearnSpells=他のソースからすでに学習したキャントリップや呪文を選択できるようにする ModUi/&EnableRespecAction=休憩アクション後に RESPEC を有効にします [マルチプレイヤーセッション中は RESPEC を使用しないでください] @@ -258,6 +258,7 @@ ModUi/&RemoveBardSongOfRest=レベル2で安息の歌を ModUi/&RemoveBugVisualModels=ゲーム内のクモのようなモデルをクマのようなモデルに置き換えます [クモ恐怖症] [再起動が必要] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Hideous Laughter のヒューマノイド フィルターを削除します ModUi/&RemoveRecurringEffectOnEntangle=絡みつく効果は詠唱時にのみ適用され、蔓から逃れるには筋力チェックも強制される。 +ModUi/&RemoveRogueBlindSense=レベル14でブラインドセンスを削除します ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Shadowcaster から学校制限を削除します ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Spellblade から学校制限を削除します ModUi/&RestockAntiquarians=古物商の補充 [ハルマン サマー] diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index f64b395665..f1972fa303 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -159,7 +159,7 @@ Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=당신은 1 Ki Feature/&PowerMonkStepOfTheWindHeightenedMetabolismTitle=바람의 발걸음 Feature/&PowerMonkSuperiorDefenseDescription=무료 행동으로 3개의 Ki 포인트를 사용하여 1분 동안 또는 무력화될 때까지 피해로부터 자신을 완벽하게 강화할 수 있습니다. 그 동안 포스 데미지를 제외한 모든 데미지에 대한 저항력을 갖게 됩니다. Feature/&PowerMonkSuperiorDefenseTitle=우수한 방어력 -Feature/&PowerRangerNatureShroudDescription=당신은 자연의 힘을 이용하여 잠시 동안 자신의 모습을 숨길 수 있습니다. 보너스 액션으로, 다음 턴이 시작될 때까지 입고 있거나 들고 있는 모든 장비와 함께 마법처럼 투명해질 수 있습니다. 이 기능은 숙련도 보너스만큼 여러 번 사용할 수 있으며, 긴 휴식을 마치면 소모한 사용 횟수를 모두 회복합니다. +Feature/&PowerRangerNatureShroudDescription=자연의 힘을 빌려 잠시 동안 시야에서 숨습니다. 보너스 액션으로, 다음 턴이 시작될 때까지 착용하거나 휴대하는 모든 장비와 함께 마법처럼 보이지 않게 될 수 있습니다. 이 기능은 지혜 속성 수정치와 같은 횟수만큼 사용할 수 있으며, 긴 휴식을 마치면 소모한 모든 사용 횟수를 회복합니다. Feature/&PowerRangerNatureShroudTitle=자연의 베일 Feature/&PowerRogueCunningStrikeDescription=당신은 몰래 공격을 사용하는 교활한 방법을 개발했습니다. 은밀한 공격 피해를 입힐 때 은밀한 공격 주사위 대신 추가 교활한 일격 효과를 추가할 수 있습니다. Feature/&PowerRogueCunningStrikeDisarmDescription=대상은 민첩 내성 굴림에 성공해야 하며, 그렇지 않으면 다음 턴이 끝날 때까지 모든 공격에 불이익을 받습니다. diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 4330919447..78977d4eac 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -150,7 +150,7 @@ ModUi/&EnablePaladinSpellCastingAtLevel1=레벨 2 대신 레벨 1에서 [https://www.pcg-random.org] ModUi/&EnableProneAction=엎드려 넘어짐 동작을 활성화하세요 [비용 없이 엎드려 넘어질 수 있습니다] ModUi/&EnablePullPushOnVerticalDirection=위/아래 축에서도 푸시 및 풀 모션 효과를 작동하도록 설정 -ModUi/&EnableRangerNatureShroudAt10=레벨 10에서 자연의 베일 기능을 활성화합니다. [보너스 액션으로 다음 턴이 시작될 때까지 마법으로 투명해질 수 있습니다.] +ModUi/&EnableRangerNatureShroudAt14=레벨 14에서 자연의 베일 기능을 활성화합니다. [보너스 액션으로 다음 턴이 시작될 때까지 마법으로 투명해질 수 있습니다.] ModUi/&EnableRangerSpellCastingAtLevel1=레벨 2 대신 레벨 1에서 주문 시전을 활성화합니다. ModUi/&EnableRelearnSpells=다른 출처에서 이미 배운 주문이나 주문 선택 가능 ModUi/&EnableRespecAction=휴식 동작 후 RESPEC 활성화 [멀티플레이어 세션 동안 RESPEC 사용하지 마세요] @@ -258,6 +258,7 @@ ModUi/&RemoveBardSongOfRest=레벨 2에서 휴식의 노래[거미공포증] [재시작 필요] ModUi/&RemoveHumanoidFilterOnHideousLaughter=끔찍한 웃음에서 인간형 필터를 제거하세요 ModUi/&RemoveRecurringEffectOnEntangle=시전 시에만 얽힘 효과를 적용하고 덩굴에서 벗어나기 위해 힘 검사를 강제로 시행합니다. +ModUi/&RemoveRogueBlindSense=레벨 14에서 맹감각 제거 ModUi/&RemoveSchoolRestrictionsFromShadowCaster=섀도우캐스터의 학교 제한을 해제하세요 ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Spellblade에서 학교 제한을 해제하세요 ModUi/&RestockAntiquarians=골동품점 재고 보충 [할먼 서머] diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 72c6fca04e..64e6bd89de 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -159,7 +159,7 @@ Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=Você pode gastar Feature/&PowerMonkStepOfTheWindHeightenedMetabolismTitle=Passo do Vento Feature/&PowerMonkSuperiorDefenseDescription=Como uma ação livre, você pode gastar 3 Pontos de Ki para se reforçar perfeitamente contra dano por 1 minuto ou até ficar incapacitado. Durante esse tempo, você tem resistência a todo dano, exceto dano de Força. Feature/&PowerMonkSuperiorDefenseTitle=Defesa Superior -Feature/&PowerRangerNatureShroudDescription=Você usa os poderes da natureza para se esconder brevemente da vista. Como uma ação bônus, você pode magicamente se tornar invisível, junto com qualquer equipamento que esteja vestindo ou carregando, até o início do seu próximo turno. Você pode usar essa habilidade um número de vezes igual ao seu bônus de proficiência, e você recupera todos os usos gastos quando termina um descanso longo. +Feature/&PowerRangerNatureShroudDescription=Você usa os poderes da natureza para se esconder brevemente da vista. Como uma ação bônus, você pode magicamente se tornar invisível, junto com qualquer equipamento que esteja vestindo ou carregando, até o início do seu próximo turno. Você pode usar essa habilidade um número de vezes igual ao seu modificador de atributo Sabedoria, e você recupera todos os usos gastos quando termina um descanso longo. Feature/&PowerRangerNatureShroudTitle=Véu da Natureza Feature/&PowerRogueCunningStrikeDescription=Você desenvolveu maneiras astutas de usar seu Ataque Furtivo. Quando você causa dano de Ataque Furtivo, você pode abrir mão dos dados de Ataque Furtivo para adicionar efeitos adicionais de Ataque Astuto. Feature/&PowerRogueCunningStrikeDisarmDescription=O alvo deve ser bem-sucedido em um teste de resistência de Destreza ou terá desvantagem em todos os ataques até o final do próximo turno. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index e7fd682258..adecb8a9ae 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -150,7 +150,7 @@ ModUi/&EnablePaladinSpellCastingAtLevel1=Habilitar conjuração d ModUi/&EnablePcgRandom=Habilitar um algoritmo de gerador aleatório melhor [https://www.pcg-random.org] ModUi/&EnableProneAction=Habilite a ação Cair de bruços [você pode cair de bruços sem nenhum custo] ModUi/&EnablePullPushOnVerticalDirection=Habilitar efeitos de movimento de empurrar e puxar para também funcionarem no eixo para cima/baixo -ModUi/&EnableRangerNatureShroudAt10=Habilite o recurso Véu da Natureza no nível 10 [como uma ação bônus, você pode magicamente ficar invisível até o início do próximo turno] +ModUi/&EnableRangerNatureShroudAt14=Habilite o recurso Véu da Natureza no nível 14 [como uma ação bônus, você pode magicamente ficar invisível até o início do próximo turno] ModUi/&EnableRangerSpellCastingAtLevel1=Habilitar conjuração de feitiços no nível 1 em vez de 2 ModUi/&EnableRelearnSpells=Habilitar seleção de truques ou magias já aprendidas de outras fontes ModUi/&EnableRespecAction=Habilitar RESPEC após a ação de descanso [não usar RESPEC durante uma sessão multijogador] @@ -258,6 +258,7 @@ ModUi/&RemoveBardSongOfRest=Remova Canção do Descanso n ModUi/&RemoveBugVisualModels=Substitua modelos semelhantes a aranhas por modelos semelhantes a ursos no jogo [aracnofobia] [Requer reinicialização] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Remover filtro humanoide em Risada Hedionda ModUi/&RemoveRecurringEffectOnEntangle=Aplique o efeito Entangle somente no momento do lançamento e também force um teste de força para se libertar das videiras +ModUi/&RemoveRogueBlindSense=Remova Sentido Cego no nível 14 ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Remover restrições escolares de Shadowcaster ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Remover restrições escolares de Spellblade ModUi/&RestockAntiquarians=Reabastecer Antiquários [Verão Halman] diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 129538112b..1ef0eab4fe 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -159,7 +159,7 @@ Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=Вы можете Feature/&PowerMonkStepOfTheWindHeightenedMetabolismTitle=Поступь ветра Feature/&PowerMonkSuperiorDefenseDescription=Свободным действием вы можете потратить 3 очка ци, чтобы надёжно защитить себя от урона на 1 минуту или до тех пор, пока не станете недееспособны. В течение этого времени вы обладаете сопротивлением ко всему урону, кроме урона силовым полем. Feature/&PowerMonkSuperiorDefenseTitle=Превосходная защита -Feature/&PowerRangerNatureShroudDescription=Вы обращаетесь к силам природы, чтобы они ненадолго скрыли вас от посторонних глаз. Бонусным действием вы можете магическим образом стать невидимым вместе со своим снаряжением, которое вы несёте или носите, до начала вашего следующего хода. Вы можете использовать это умение количество раз, равное вашему бонусу мастерства. Вы восстанавливаете все потраченные использования после окончания продолжительного отдыха. +Feature/&PowerRangerNatureShroudDescription=Вы черпаете силы природы, чтобы ненадолго скрыться из виду. В качестве бонусного действия вы можете магически стать невидимым вместе со всем снаряжением, которое вы носите или несете, до начала вашего следующего хода. Вы можете использовать эту способность количество раз, равное модификатору атрибута Мудрости, и вы восстановите все использованные использования, когда закончите продолжительный отдых. Feature/&PowerRangerNatureShroudTitle=Природная завеса Feature/&PowerRogueCunningStrikeDescription=Вы разработали хитрые способы использования Скрытой атаки. Когда вы наносите урон Скрытой атакой, вы можете отказаться от костей Скрытой атаки, чтобы добавить вместо этого дополнительные эффекты Хитрого удара. Feature/&PowerRogueCunningStrikeDisarmDescription=Цель должна преуспеть в спасброске Ловкости или получит помеху на все атаки до конца своего следующего хода. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 5f62766b5c..b3cc151ab3 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -150,7 +150,7 @@ ModUi/&EnablePaladinSpellCastingAtLevel1=Включить зак ModUi/&EnablePcgRandom=Включить улучшенный алгоритм генерации случайных чисел [https://www.pcg-random.org] ModUi/&EnableProneAction=Включить действие Упасть ничком [вы можете упасть ничком без затрат каких-либо действий] ModUi/&EnablePullPushOnVerticalDirection=Включить работу эффектов толкания и притяжения по вертикальным осям -ModUi/&EnableRangerNatureShroudAt10=Включить умение Природная завеса на уровне 10 [бонусным действием вы можете волшебным образом стать невидимым до начала следующего хода] +ModUi/&EnableRangerNatureShroudAt14=Включить функцию Nature's Veil на уровне 14 [в качестве бонусного действия вы можете магическим образом стать невидимым до начала следующего хода] ModUi/&EnableRangerSpellCastingAtLevel1=Включить заклинание на уровне 1 вместо 2 ModUi/&EnableRelearnSpells=Включить возможность выбирать заговоры или заклинания, уже известные из других источников ModUi/&EnableRespecAction=Включить возможность РЕСПЕКа после отдыха [не используйте РЕСПЕК в многопользовательских сессиях] @@ -258,6 +258,7 @@ ModUi/&RemoveBardSongOfRest=Удалить Песнь покоя< ModUi/&RemoveBugVisualModels=Заменить паукообразные модельки в игре на медведеобразные [арахнофобия] [Необходим перезапуск] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Убрать гуманоидный фильтр на Жуткий смех ModUi/&RemoveRecurringEffectOnEntangle=Применять эффект Опутывания только на время действия заклинания, а также принудительно совершать проверку Силы, чтобы вырваться из лоз +ModUi/&RemoveRogueBlindSense=Удалить Слепое чувство на уровне 14 ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Снять ограничения по школе заклинаний с Заклинателя теней ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Снять ограничения по школе заклинаний с Боевого волшебника ModUi/&RestockAntiquarians=Пополнять Антикваров [Халман Саммер] diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 1bbd34c208..f5c1876b8c 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -159,7 +159,7 @@ Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=在你的回合 Feature/&PowerMonkStepOfTheWindHeightenedMetabolismTitle=飞檐走壁 Feature/&PowerMonkSuperiorDefenseDescription=以一个自由动作,你可以花费 3 点气来完美地增强自己免受伤害,持续 1 分钟或直到你失能。在此期间,你对除力场伤害之外的所有伤害都有抗性。 Feature/&PowerMonkSuperiorDefenseTitle=无懈可击 -Feature/&PowerRangerNatureShroudDescription=你利用自然的力量来暂时隐藏自己。作为一个附贈动作,你可以魔法地变得隐形,连同你穿着或携带的任何装备,直到你的下一个回合开始。你可以使用此特性的次数等于你的熟练加值,并且当你完成长休后,你将重获所有使用次数。 +Feature/&PowerRangerNatureShroudDescription=你利用自然的力量短暂地隐藏自己。作为奖励行动,你可以神奇地隐形,连同你穿着或携带的任何装备,直到你的下一回合开始。你可以使用此功能的次数等于你的智慧属性修正值,当你完成长时间休息时,你可以恢复所有已消耗的使用次数。 Feature/&PowerRangerNatureShroudTitle=自然面纱 Feature/&PowerRogueCunningStrikeDescription=你已经开发出巧妙的方法来使用你的偷袭。当你造成偷袭伤害时,你可以放弃偷袭骰来添加额外的狡诈打击效果。 Feature/&PowerRogueCunningStrikeDisarmDescription=目标必须成功通过敏捷豁免,否则在下回合结束之前所有攻击都处于劣势。 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 54cf87af91..4be308328b 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -150,7 +150,7 @@ ModUi/&EnablePaladinSpellCastingAtLevel1=在 1 级(而非 2 级)启用[https://www.pcg-random.org] ModUi/&EnableProneAction=启用倒地动作[你可以无代价倒地] ModUi/&EnablePullPushOnVerticalDirection=使推拉运动效果也适用于上/下轴 -ModUi/&EnableRangerNatureShroudAt10=在 10 级时启用自然面纱功能[作为奖励行动,您可以神奇地隐身,直到下一回合开始] +ModUi/&EnableRangerNatureShroudAt14=在 14 级时启用自然面纱功能[作为奖励行动,你可以神奇地隐身,直到下一回合开始] ModUi/&EnableRangerSpellCastingAtLevel1=在 1 级(而非 2 级)启用施法 ModUi/&EnableRelearnSpells=可以选择已从其他来源学到的法术或咒语 ModUi/&EnableRespecAction=休息操作后启用 RESPEC [在多人游戏会话期间不要使用 RESPEC] @@ -258,6 +258,7 @@ ModUi/&RemoveBardSongOfRest=删除 2 级的休息之歌 ModUi/&RemoveBugVisualModels=在游戏中将蜘蛛类模型替换为熊类模型[蜘蛛恐惧症] [需要重启] ModUi/&RemoveHumanoidFilterOnHideousLaughter=删除Hideous Laughter上的人形过滤器 ModUi/&RemoveRecurringEffectOnEntangle=仅在施法时应用纠缠效果,并强制进行力量检查以摆脱藤蔓 +ModUi/&RemoveRogueBlindSense=移除 14 级的盲感 ModUi/&RemoveSchoolRestrictionsFromShadowCaster=删除 Shadowcaster 中的学校限制 ModUi/&RemoveSchoolRestrictionsFromSpellBlade=删除 Spellblade 中的学校限制 ModUi/&RestockAntiquarians=重新进货古董商[Halman Summer] From c553c49941c7ba5782ad2afff524d84a46b6e425 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 2 Nov 2024 13:50:36 -0700 Subject: [PATCH 28/85] fix code smell --- .../Subclasses/WizardAbjuration.cs | 74 +++++++++++-------- 1 file changed, 44 insertions(+), 30 deletions(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs b/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs index e44135a07d..2e24eaa458 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs @@ -602,49 +602,63 @@ void ReactionValidated() } } - private sealed class ModifyCounterspellAddProficiency() : IModifyEffectDescription + private sealed class ModifyCounterspellAddProficiency : IModifyEffectDescription { - EffectDescription IModifyEffectDescription.GetEffectDescription(BaseDefinition definition, EffectDescription effectDescription, RulesetCharacter character, RulesetEffect rulesetEffect) + private static readonly EffectForm EffectForm = EffectFormBuilder.Create() + .SetCounterForm(CounterForm.CounterType.InterruptSpellcasting, 3, 10, true, true) + .Build(); + + EffectDescription IModifyEffectDescription.GetEffectDescription( + BaseDefinition definition, + EffectDescription effectDescription, + RulesetCharacter character, + RulesetEffect rulesetEffect) { - return EffectDescriptionBuilder - .Create(Counterspell.EffectDescription) - .SetEffectForms(EffectFormBuilder.Create() - .SetCounterForm(CounterForm.CounterType.InterruptSpellcasting, 3, 10, true, true) - .Build()) - .Build(); + effectDescription.EffectForms.SetRange(EffectForm); + + return effectDescription; } - bool IModifyEffectDescription.IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) + bool IModifyEffectDescription.IsValid( + BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) { - return character.GetClassLevel(CharacterClassDefinitions.Wizard) >= 10 && - definition == Counterspell; + return character.GetSubclassLevel(CharacterClassDefinitions.Wizard, Name) >= 10 && + definition == Counterspell; } } - private sealed class ModifyDispelMagicAddProficiency() : IModifyEffectDescription + private sealed class ModifyDispelMagicAddProficiency : IModifyEffectDescription { - EffectDescription IModifyEffectDescription.GetEffectDescription(BaseDefinition definition, EffectDescription effectDescription, RulesetCharacter character, RulesetEffect rulesetEffect) + private static readonly List EffectForms = + [ + EffectFormBuilder.Create() + .SetCounterForm(CounterForm.CounterType.DissipateSpells, 3, 10, true, true) + .SetCreatedBy(true) + .SetBonusMode(AddBonusMode.None) + .Build(), + EffectFormBuilder.Create() + .SetAlterationForm(AlterationForm.Type.DissipateSpell) + .SetCreatedBy(true) + .SetBonusMode(AddBonusMode.None) + .Build() + ]; + + EffectDescription IModifyEffectDescription.GetEffectDescription( + BaseDefinition definition, + EffectDescription effectDescription, + RulesetCharacter character, + RulesetEffect rulesetEffect) { - return EffectDescriptionBuilder.Create(DispelMagic) - .SetEffectForms( - EffectFormBuilder.Create() - .SetCounterForm(CounterForm.CounterType.DissipateSpells, 3, 10, true, true) - .SetCreatedBy(true) - .SetBonusMode(AddBonusMode.None) - .Build(), - EffectFormBuilder.Create() - .SetAlterationForm(AlterationForm.Type.DissipateSpell) - .SetCreatedBy(true) - .SetBonusMode(AddBonusMode.None) - .Build() - ) - .Build(); + effectDescription.EffectForms.SetRange(EffectForms); + + return effectDescription; } - bool IModifyEffectDescription.IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) + bool IModifyEffectDescription.IsValid( + BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) { - return character.GetClassLevel(CharacterClassDefinitions.Wizard) >= 10 && - definition == DispelMagic; + return character.GetSubclassLevel(CharacterClassDefinitions.Wizard, Name) >= 10 && + definition == DispelMagic; } } From 7216df4123f8067cdc304be4f0ea8bbdccb99d6d Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 2 Nov 2024 16:04:39 -0700 Subject: [PATCH 29/85] add Druid tabletop 5e 2024 settings --- .../UnfinishedBusinessBlueprints/Assets.txt | 15 ++++ .../AbilityCheckDruidPrimalOrderMagician.json | 58 +++++++++++++++ .../FeatureSetDruidPrimalOrder.json | 41 +++++++++++ .../FeatureSetDruidPrimalOrderMagician.json | 41 +++++++++++ .../FeatureSetDruidPrimalOrderWarden.json | 41 +++++++++++ .../PointPoolDruidPrimalOrderMagician.json | 39 ++++++++++ ...roficiencyDruidPrimalOrderWardenArmor.json | 35 +++++++++ ...oficiencyDruidPrimalOrderWardenWeapon.json | 35 +++++++++ .../ChangelogHistory.txt | 2 + .../Displays/ClassesDisplay.cs | 24 ++++-- .../Displays/GeneralDisplay.cs | 15 ++++ .../Displays/SpellsDisplay.cs | 7 ++ .../Models/CustomActionIdContext.cs | 2 +- .../Models/SrdAndHouseRulesContext.cs | 73 +++++++++++++++++++ SolastaUnfinishedBusiness/Settings.cs | 6 +- SolastaUnfinishedBusiness/Settings/empty.xml | 12 ++- .../Translations/de/Others-de.txt | 6 ++ .../Translations/de/Settings-de.txt | 2 + .../Translations/en/Others-en.txt | 6 ++ .../Translations/en/Settings-en.txt | 2 + .../Translations/es/Others-es.txt | 6 ++ .../Translations/es/Settings-es.txt | 2 + .../Translations/fr/Others-fr.txt | 6 ++ .../Translations/fr/Settings-fr.txt | 2 + .../Translations/it/Others-it.txt | 6 ++ .../Translations/it/Settings-it.txt | 2 + .../Translations/ja/Others-ja.txt | 6 ++ .../Translations/ja/Settings-ja.txt | 2 + .../Translations/ko/Others-ko.txt | 6 ++ .../Translations/ko/Settings-ko.txt | 2 + .../Translations/pt-BR/Others-pt-BR.txt | 6 ++ .../Translations/pt-BR/Settings-pt-BR.txt | 2 + .../Translations/ru/Others-ru.txt | 6 ++ .../Translations/ru/Settings-ru.txt | 2 + .../Translations/zh-CN/Others-zh-CN.txt | 6 ++ .../Translations/zh-CN/Settings-zh-CN.txt | 2 + 36 files changed, 512 insertions(+), 14 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckDruidPrimalOrderMagician.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionFeatureSet/FeatureSetDruidPrimalOrder.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionFeatureSet/FeatureSetDruidPrimalOrderMagician.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionFeatureSet/FeatureSetDruidPrimalOrderWarden.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolDruidPrimalOrderMagician.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionProficiency/ProficiencyDruidPrimalOrderWardenArmor.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionProficiency/ProficiencyDruidPrimalOrderWardenWeapon.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 2bd16308c1..6e4f3c0985 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -1637,6 +1637,7 @@ AbilityCheckAffinityStaggeringSmite FeatureDefinitionAbilityCheckAffinity Featur AbilityCheckAffinitySynapticStatic FeatureDefinitionAbilityCheckAffinity FeatureDefinition 999b7c02-c882-58c6-a529-7e9011466ef4 AbilityCheckAffinityWizardGraviturgistDensityDecrease FeatureDefinitionAbilityCheckAffinity FeatureDefinition b0521612-ec96-5c7a-ba8a-6155864d9e8e AbilityCheckAffinityWizardGraviturgistDensityIncrease FeatureDefinitionAbilityCheckAffinity FeatureDefinition 64b503f6-282e-58c8-a372-26b0da078f3b +AbilityCheckDruidPrimalOrderMagician FeatureDefinitionAbilityCheckAffinity FeatureDefinition 17719c44-7926-5cef-893f-8ab66f8fc85b AbilityCheckRangerSurvivalistAnalyticalMind FeatureDefinitionAbilityCheckAffinity FeatureDefinition bb200e27-5cfe-5e79-a96e-7187cbb59644 ActionAffinityAmazingDisplayToggle FeatureDefinitionActionAffinity FeatureDefinition 783907ba-e039-59be-a628-8c934d32ac60 ActionAffinityArcaneArcherToggle FeatureDefinitionActionAffinity FeatureDefinition be08f921-ba8c-5368-948c-f9a7ae0eef85 @@ -2562,6 +2563,9 @@ FeatureSetDomainTempestBonusProficiency FeatureDefinitionFeatureSet FeatureDefin FeatureSetDomainTempestDestructiveWrath FeatureDefinitionFeatureSet FeatureDefinition 57c68e83-7ee5-51f9-b83b-f068dc46de71 FeatureSetDomainTempestStormborn FeatureDefinitionFeatureSet FeatureDefinition efa2d88f-e805-56e3-924c-e9cae68385e8 FeatureSetDomainTempestWrathOfTheStorm FeatureDefinitionFeatureSet FeatureDefinition 8facc09d-1f7d-5a1b-af53-a4206c92c9f3 +FeatureSetDruidPrimalOrder FeatureDefinitionFeatureSet FeatureDefinition 8c13d9a8-6b1c-578d-87d7-16944bf38a71 +FeatureSetDruidPrimalOrderMagician FeatureDefinitionFeatureSet FeatureDefinition 6df44161-0c8e-5b8a-a5e4-83650a86d507 +FeatureSetDruidPrimalOrderWarden FeatureDefinitionFeatureSet FeatureDefinition 39159dec-d35e-5f73-acce-f4b802f31220 FeatureSetElementalistKnowledge FeatureDefinitionFeatureSet FeatureDefinition 124b3ffc-2b20-5343-ba86-bd05de252e84 FeatureSetFairyAbilityScoreIncrease FeatureDefinitionFeatureSet FeatureDefinition ede8915e-ee24-56ad-8735-59186ff05ea3 FeatureSetFairyFlight FeatureDefinitionFeatureSet FeatureDefinition 4188c373-9edd-5b39-ba6f-2aedd3d40ac1 @@ -2969,6 +2973,7 @@ PointPoolBattlebornAbilityScore FeatureDefinitionPointPool FeatureDefinition ed5 PointPoolCrystalWyrmkinInnateKnowledge FeatureDefinitionPointPool FeatureDefinition c50af733-f8f6-5645-a9fd-1757be3ba088 PointPoolDomainNatureCantrip FeatureDefinitionPointPool FeatureDefinition 9f0158e9-c393-5a45-af4b-3018b94255db PointPoolDomainNatureSkills FeatureDefinitionPointPool FeatureDefinition c174a89d-083e-5ff2-8577-c5be0255339a +PointPoolDruidPrimalOrderMagician FeatureDefinitionPointPool FeatureDefinition 2ceebfa6-8df1-54bc-845b-dc9160b99df6 PointPoolFairyAbilityScore FeatureDefinitionPointPool FeatureDefinition 620a9be9-8104-5e16-b9e5-45398f40a68f PointPoolFeatEldritchAdept FeatureDefinitionPointPool FeatureDefinition a8dc46a2-e036-5b90-b508-9c908cdce872 PointPoolFeatMagicInitiateBardCantrip FeatureDefinitionPointPool FeatureDefinition 56da36c9-595f-5089-9de0-b2eca1393580 @@ -4091,6 +4096,8 @@ ProficiencyDomainInsightAvatarOfKnowledgeSavingThrow FeatureDefinitionProficienc ProficiencyDomainNatureHeavyArmor FeatureDefinitionProficiency FeatureDefinition 763c3faa-6a62-521b-8135-7cd40b47ce7e ProficiencyDomainTempestHeavyArmor FeatureDefinitionProficiency FeatureDefinition 6abfab75-bc69-56d4-af65-13f8aaa7440e ProficiencyDomainTempestMartialWeapons FeatureDefinitionProficiency FeatureDefinition 8cbb115b-7b9a-5c2c-b57b-558e313dfa24 +ProficiencyDruidPrimalOrderWardenArmor FeatureDefinitionProficiency FeatureDefinition 94c806fc-dcf0-5efd-b3fc-f44f78f2fd0f +ProficiencyDruidPrimalOrderWardenWeapon FeatureDefinitionProficiency FeatureDefinition 8ac84c21-61bc-5a85-97bb-abd4628e37a0 ProficiencyEmpoweredKnowledgeAcrobatics FeatureDefinitionProficiency FeatureDefinition 1985aa4b-7e5d-5723-b499-4c02c9779963 ProficiencyEmpoweredKnowledgeAnimalHandling FeatureDefinitionProficiency FeatureDefinition 1c8a7e5b-f52e-5756-ad58-8fb133fb4d78 ProficiencyEmpoweredKnowledgeArcana FeatureDefinitionProficiency FeatureDefinition 50e6cff4-2c2f-519b-98c5-41aea6f0a2c0 @@ -4315,6 +4322,7 @@ AbilityCheckAffinityStaggeringSmite FeatureDefinitionAbilityCheckAffinity Featur AbilityCheckAffinitySynapticStatic FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 999b7c02-c882-58c6-a529-7e9011466ef4 AbilityCheckAffinityWizardGraviturgistDensityDecrease FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity b0521612-ec96-5c7a-ba8a-6155864d9e8e AbilityCheckAffinityWizardGraviturgistDensityIncrease FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 64b503f6-282e-58c8-a372-26b0da078f3b +AbilityCheckDruidPrimalOrderMagician FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 17719c44-7926-5cef-893f-8ab66f8fc85b AbilityCheckRangerSurvivalistAnalyticalMind FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity bb200e27-5cfe-5e79-a96e-7187cbb59644 ActionAffinityAmazingDisplayToggle FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 783907ba-e039-59be-a628-8c934d32ac60 ActionAffinityArcaneArcherToggle FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity be08f921-ba8c-5368-948c-f9a7ae0eef85 @@ -4574,6 +4582,7 @@ AbilityCheckAffinityStaggeringSmite FeatureDefinitionAbilityCheckAffinity Featur AbilityCheckAffinitySynapticStatic FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 999b7c02-c882-58c6-a529-7e9011466ef4 AbilityCheckAffinityWizardGraviturgistDensityDecrease FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity b0521612-ec96-5c7a-ba8a-6155864d9e8e AbilityCheckAffinityWizardGraviturgistDensityIncrease FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 64b503f6-282e-58c8-a372-26b0da078f3b +AbilityCheckDruidPrimalOrderMagician FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 17719c44-7926-5cef-893f-8ab66f8fc85b AbilityCheckRangerSurvivalistAnalyticalMind FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity bb200e27-5cfe-5e79-a96e-7187cbb59644 AncestryPathOfTheElementsBlizzard FeatureDefinitionAncestry FeatureDefinitionAffinity 641734eb-6b25-5f30-a4b6-e1305d8abb54 AncestryPathOfTheElementsStorm FeatureDefinitionAncestry FeatureDefinitionAffinity 18135f9f-fb3f-59e4-a259-e73936605af6 @@ -5478,6 +5487,9 @@ FeatureSetDomainTempestBonusProficiency FeatureDefinitionFeatureSet FeatureDefin FeatureSetDomainTempestDestructiveWrath FeatureDefinitionFeatureSet FeatureDefinitionFeatureSet 57c68e83-7ee5-51f9-b83b-f068dc46de71 FeatureSetDomainTempestStormborn FeatureDefinitionFeatureSet FeatureDefinitionFeatureSet efa2d88f-e805-56e3-924c-e9cae68385e8 FeatureSetDomainTempestWrathOfTheStorm FeatureDefinitionFeatureSet FeatureDefinitionFeatureSet 8facc09d-1f7d-5a1b-af53-a4206c92c9f3 +FeatureSetDruidPrimalOrder FeatureDefinitionFeatureSet FeatureDefinitionFeatureSet 8c13d9a8-6b1c-578d-87d7-16944bf38a71 +FeatureSetDruidPrimalOrderMagician FeatureDefinitionFeatureSet FeatureDefinitionFeatureSet 6df44161-0c8e-5b8a-a5e4-83650a86d507 +FeatureSetDruidPrimalOrderWarden FeatureDefinitionFeatureSet FeatureDefinitionFeatureSet 39159dec-d35e-5f73-acce-f4b802f31220 FeatureSetElementalistKnowledge FeatureDefinitionFeatureSet FeatureDefinitionFeatureSet 124b3ffc-2b20-5343-ba86-bd05de252e84 FeatureSetFairyAbilityScoreIncrease FeatureDefinitionFeatureSet FeatureDefinitionFeatureSet ede8915e-ee24-56ad-8735-59186ff05ea3 FeatureSetFairyFlight FeatureDefinitionFeatureSet FeatureDefinitionFeatureSet 4188c373-9edd-5b39-ba6f-2aedd3d40ac1 @@ -5800,6 +5812,7 @@ PointPoolBattlebornAbilityScore FeatureDefinitionPointPool FeatureDefinitionPoin PointPoolCrystalWyrmkinInnateKnowledge FeatureDefinitionPointPool FeatureDefinitionPointPool c50af733-f8f6-5645-a9fd-1757be3ba088 PointPoolDomainNatureCantrip FeatureDefinitionPointPool FeatureDefinitionPointPool 9f0158e9-c393-5a45-af4b-3018b94255db PointPoolDomainNatureSkills FeatureDefinitionPointPool FeatureDefinitionPointPool c174a89d-083e-5ff2-8577-c5be0255339a +PointPoolDruidPrimalOrderMagician FeatureDefinitionPointPool FeatureDefinitionPointPool 2ceebfa6-8df1-54bc-845b-dc9160b99df6 PointPoolFairyAbilityScore FeatureDefinitionPointPool FeatureDefinitionPointPool 620a9be9-8104-5e16-b9e5-45398f40a68f PointPoolFeatEldritchAdept FeatureDefinitionPointPool FeatureDefinitionPointPool a8dc46a2-e036-5b90-b508-9c908cdce872 PointPoolFeatMagicInitiateBardCantrip FeatureDefinitionPointPool FeatureDefinitionPointPool 56da36c9-595f-5089-9de0-b2eca1393580 @@ -6927,6 +6940,8 @@ ProficiencyDomainInsightAvatarOfKnowledgeSavingThrow FeatureDefinitionProficienc ProficiencyDomainNatureHeavyArmor FeatureDefinitionProficiency FeatureDefinitionProficiency 763c3faa-6a62-521b-8135-7cd40b47ce7e ProficiencyDomainTempestHeavyArmor FeatureDefinitionProficiency FeatureDefinitionProficiency 6abfab75-bc69-56d4-af65-13f8aaa7440e ProficiencyDomainTempestMartialWeapons FeatureDefinitionProficiency FeatureDefinitionProficiency 8cbb115b-7b9a-5c2c-b57b-558e313dfa24 +ProficiencyDruidPrimalOrderWardenArmor FeatureDefinitionProficiency FeatureDefinitionProficiency 94c806fc-dcf0-5efd-b3fc-f44f78f2fd0f +ProficiencyDruidPrimalOrderWardenWeapon FeatureDefinitionProficiency FeatureDefinitionProficiency 8ac84c21-61bc-5a85-97bb-abd4628e37a0 ProficiencyEmpoweredKnowledgeAcrobatics FeatureDefinitionProficiency FeatureDefinitionProficiency 1985aa4b-7e5d-5723-b499-4c02c9779963 ProficiencyEmpoweredKnowledgeAnimalHandling FeatureDefinitionProficiency FeatureDefinitionProficiency 1c8a7e5b-f52e-5756-ad58-8fb133fb4d78 ProficiencyEmpoweredKnowledgeArcana FeatureDefinitionProficiency FeatureDefinitionProficiency 50e6cff4-2c2f-519b-98c5-41aea6f0a2c0 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckDruidPrimalOrderMagician.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckDruidPrimalOrderMagician.json new file mode 100644 index 0000000000..bb85c0912e --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckDruidPrimalOrderMagician.json @@ -0,0 +1,58 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Intelligence", + "proficiencyName": "Arcana", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D6", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + }, + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Intelligence", + "proficiencyName": "Nature", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D6", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&FeatureSetDruidPrimalOrderMagicianTitle", + "description": "Feature/&FeatureSetDruidPrimalOrderMagicianDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "17719c44-7926-5cef-893f-8ab66f8fc85b", + "contentPack": 9999, + "name": "AbilityCheckDruidPrimalOrderMagician" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionFeatureSet/FeatureSetDruidPrimalOrder.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionFeatureSet/FeatureSetDruidPrimalOrder.json new file mode 100644 index 0000000000..d778ca4a29 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionFeatureSet/FeatureSetDruidPrimalOrder.json @@ -0,0 +1,41 @@ +{ + "$type": "FeatureDefinitionFeatureSet, Assembly-CSharp", + "featureSet": [ + "Definition:FeatureSetDruidPrimalOrderMagician:6df44161-0c8e-5b8a-a5e4-83650a86d507", + "Definition:FeatureSetDruidPrimalOrderWarden:39159dec-d35e-5f73-acce-f4b802f31220" + ], + "mode": "Exclusion", + "ancestryDamageTypeMap": [], + "ancestryType": "Sorcerer", + "defaultSelection": 0, + "uniqueChoices": false, + "enumerateInDescription": false, + "hasRacialAffinity": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&FeatureSetDruidPrimalOrderTitle", + "description": "Feature/&FeatureSetDruidPrimalOrderDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "8c13d9a8-6b1c-578d-87d7-16944bf38a71", + "contentPack": 9999, + "name": "FeatureSetDruidPrimalOrder" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionFeatureSet/FeatureSetDruidPrimalOrderMagician.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionFeatureSet/FeatureSetDruidPrimalOrderMagician.json new file mode 100644 index 0000000000..aa194406b8 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionFeatureSet/FeatureSetDruidPrimalOrderMagician.json @@ -0,0 +1,41 @@ +{ + "$type": "FeatureDefinitionFeatureSet, Assembly-CSharp", + "featureSet": [ + "Definition:AbilityCheckDruidPrimalOrderMagician:17719c44-7926-5cef-893f-8ab66f8fc85b", + "Definition:PointPoolDruidPrimalOrderMagician:2ceebfa6-8df1-54bc-845b-dc9160b99df6" + ], + "mode": "Union", + "ancestryDamageTypeMap": [], + "ancestryType": "Sorcerer", + "defaultSelection": 0, + "uniqueChoices": false, + "enumerateInDescription": false, + "hasRacialAffinity": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&FeatureSetDruidPrimalOrderMagicianTitle", + "description": "Feature/&FeatureSetDruidPrimalOrderMagicianDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "6df44161-0c8e-5b8a-a5e4-83650a86d507", + "contentPack": 9999, + "name": "FeatureSetDruidPrimalOrderMagician" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionFeatureSet/FeatureSetDruidPrimalOrderWarden.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionFeatureSet/FeatureSetDruidPrimalOrderWarden.json new file mode 100644 index 0000000000..5e4ea14716 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionFeatureSet/FeatureSetDruidPrimalOrderWarden.json @@ -0,0 +1,41 @@ +{ + "$type": "FeatureDefinitionFeatureSet, Assembly-CSharp", + "featureSet": [ + "Definition:ProficiencyDruidPrimalOrderWardenArmor:94c806fc-dcf0-5efd-b3fc-f44f78f2fd0f", + "Definition:ProficiencyDruidPrimalOrderWardenWeapon:8ac84c21-61bc-5a85-97bb-abd4628e37a0" + ], + "mode": "Union", + "ancestryDamageTypeMap": [], + "ancestryType": "Sorcerer", + "defaultSelection": 0, + "uniqueChoices": false, + "enumerateInDescription": false, + "hasRacialAffinity": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&FeatureSetDruidPrimalOrderWardenTitle", + "description": "Feature/&FeatureSetDruidPrimalOrderWardenDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "39159dec-d35e-5f73-acce-f4b802f31220", + "contentPack": 9999, + "name": "FeatureSetDruidPrimalOrderWarden" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolDruidPrimalOrderMagician.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolDruidPrimalOrderMagician.json new file mode 100644 index 0000000000..9fac1184ac --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolDruidPrimalOrderMagician.json @@ -0,0 +1,39 @@ +{ + "$type": "FeatureDefinitionPointPool, Assembly-CSharp", + "poolType": "Cantrip", + "poolAmount": 1, + "restrictedChoices": [], + "uniqueChoices": false, + "spellListOverride": null, + "ritualOnly": false, + "minSpellLevel": 0, + "maxSpellLevel": 0, + "extraSpellsTag": "", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "2ceebfa6-8df1-54bc-845b-dc9160b99df6", + "contentPack": 9999, + "name": "PointPoolDruidPrimalOrderMagician" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionProficiency/ProficiencyDruidPrimalOrderWardenArmor.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionProficiency/ProficiencyDruidPrimalOrderWardenArmor.json new file mode 100644 index 0000000000..c9f3ec0e24 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionProficiency/ProficiencyDruidPrimalOrderWardenArmor.json @@ -0,0 +1,35 @@ +{ + "$type": "FeatureDefinitionProficiency, Assembly-CSharp", + "proficiencyType": "Armor", + "proficiencies": [ + "MediumArmorCategory" + ], + "forbiddenItemTags": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "94c806fc-dcf0-5efd-b3fc-f44f78f2fd0f", + "contentPack": 9999, + "name": "ProficiencyDruidPrimalOrderWardenArmor" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionProficiency/ProficiencyDruidPrimalOrderWardenWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionProficiency/ProficiencyDruidPrimalOrderWardenWeapon.json new file mode 100644 index 0000000000..5993c8530c --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionProficiency/ProficiencyDruidPrimalOrderWardenWeapon.json @@ -0,0 +1,35 @@ +{ + "$type": "FeatureDefinitionProficiency, Assembly-CSharp", + "proficiencyType": "Weapon", + "proficiencies": [ + "MartialWeaponCategory" + ], + "forbiddenItemTags": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "8ac84c21-61bc-5a85-97bb-abd4628e37a0", + "contentPack": 9999, + "name": "ProficiencyDruidPrimalOrderWardenWeapon" +} \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 2f5c9bbdc4..02a60a6340 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,11 +1,13 @@ 1.5.97.37: +- added Character > Classes > 'Add Druid primal order at level 1 and remove medium armor proficiency' [OneDnd] - added Character > Classes > 'Add persuasion to Fighter skill options at level 1' [OneDnd] - added Character > Classes > 'Change Bard bardic inspiration duration to 1hr instead of 10 minutes' [OneDnd] - added Character > Classes > 'Enable Bard Expertise at levels 2 and 9 instead of 3 and 10' [OneDnd] - added Character > Classes > 'Enable Ritual casting on all casters' [OneDnd] - added Character > Classes > 'Enable Warlock magical cunning at level 2' [OneDnd] - added Character > Classes > 'Remove Bard song of rest at level 2' [OneDnd] +- added Character > Classes > 'Swap Druid weapon proficiency with 5e 2024 version' [OneDnd] - added Character > Classes > 'Swap Fighter second wind to use 5e 2024 usages progression' [OneDnd] - added Character > Classes > 'Swap Monk unarmed strike to use 5e 2024 die type progression' [OneDnd] - added Character > Classes > 'Swap Warlock invocations progression with 5e 2024 version' [OneDnd] diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index 83124fc2b9..dbe617a41c 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -15,14 +15,7 @@ internal static void DisplayClasses() UI.Label(); - var toggle = Main.Settings.EnableRitualOnAllCasters; - if (UI.Toggle(Gui.Localize("ModUi/&EnableRitualOnAllCasters"), ref toggle, UI.AutoWidth())) - { - Main.Settings.EnableRitualOnAllCasters = toggle; - SrdAndHouseRulesContext.SwitchEnableRitualOnAllCasters(); - } - - toggle = Main.Settings.GrantScimitarSpecializationToBardRogue; + var toggle = Main.Settings.GrantScimitarSpecializationToBardRogue; if (UI.Toggle(Gui.Localize("ModUi/&GrantScimitarSpecializationToBarkMonkRogue"), ref toggle, UI.AutoWidth())) { Main.Settings.GrantScimitarSpecializationToBardRogue = toggle; @@ -109,6 +102,21 @@ internal static void DisplayClasses() SrdAndHouseRulesContext.SwitchDruidAllowMetalArmor(); } + toggle = Main.Settings.AddDruidPrimalOrderAndRemoveMediumArmorProficiency; + if (UI.Toggle(Gui.Localize("ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency"), ref toggle, + UI.AutoWidth())) + { + Main.Settings.AddDruidPrimalOrderAndRemoveMediumArmorProficiency = toggle; + SrdAndHouseRulesContext.SwitchDruidPrimalOrderAndRemoveMediumArmorProficiency(); + } + + toggle = Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd; + if (UI.Toggle(Gui.Localize("ModUi/&SwapDruidWeaponProficiencyToUseOneDnd"), ref toggle, UI.AutoWidth())) + { + Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd = toggle; + SrdAndHouseRulesContext.SwitchDruidWeaponProficiencyToUseOneDnd(); + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&FighterTitle") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 53745822f1..d2cab8d144 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -323,6 +323,21 @@ private static void DisplayOneDnd() SrdAndHouseRulesContext.SwitchDruidAllowMetalArmor(); } + toggle = Main.Settings.AddDruidPrimalOrderAndRemoveMediumArmorProficiency; + if (UI.Toggle(Gui.Localize("ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency"), ref toggle, + UI.AutoWidth())) + { + Main.Settings.AddDruidPrimalOrderAndRemoveMediumArmorProficiency = toggle; + SrdAndHouseRulesContext.SwitchDruidPrimalOrderAndRemoveMediumArmorProficiency(); + } + + toggle = Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd; + if (UI.Toggle(Gui.Localize("ModUi/&SwapDruidWeaponProficiencyToUseOneDnd"), ref toggle, UI.AutoWidth())) + { + Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd = toggle; + SrdAndHouseRulesContext.SwitchDruidWeaponProficiencyToUseOneDnd(); + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&FighterTitle") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs index ac05f7959a..0256a12fc0 100644 --- a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs @@ -40,6 +40,13 @@ private static void DisplaySpellsGeneral() SrdAndHouseRulesContext.SwitchOneDndPreparedSpellsTables(); } + toggle = Main.Settings.EnableRitualOnAllCasters; + if (UI.Toggle(Gui.Localize("ModUi/&EnableRitualOnAllCasters"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableRitualOnAllCasters = toggle; + SrdAndHouseRulesContext.SwitchEnableRitualOnAllCasters(); + } + toggle = Main.Settings.QuickCastLightCantripOnWornItemsFirst; if (UI.Toggle(Gui.Localize("ModUi/&QuickCastLightCantripOnWornItemsFirst"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs b/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs index 5c3d149e92..a265c5eba8 100644 --- a/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs +++ b/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs @@ -406,7 +406,7 @@ private static void BuildCustomToggleActions() .SetActionId(ExtraActionId.OverChannelToggle) .OverrideClassName("Toggle") .AddToDB(); - + ActionDefinitionBuilder .Create(MetamagicToggle, "GravityWellToggle") .SetOrUpdateGuiPresentation(Category.Action) diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index 7ceafd56da..8650cfed44 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -123,6 +123,49 @@ internal static class SrdAndHouseRulesContext .SetPool(HeroDefinitions.PointsPoolType.Invocation, 1) .AddToDB(); + private static readonly FeatureDefinitionFeatureSet FeatureSetDruidPrimalOrder = FeatureDefinitionFeatureSetBuilder + .Create("FeatureSetDruidPrimalOrder") + .SetGuiPresentation(Category.Feature) + .SetMode(FeatureDefinitionFeatureSet.FeatureSetMode.Exclusion) + .SetFeatureSet( + FeatureDefinitionFeatureSetBuilder + .Create("FeatureSetDruidPrimalOrderMagician") + .SetGuiPresentation(Category.Feature) + .SetFeatureSet( + FeatureDefinitionAbilityCheckAffinityBuilder + .Create("AbilityCheckDruidPrimalOrderMagician") + .SetGuiPresentation("FeatureSetDruidPrimalOrderMagician", Category.Feature) + .BuildAndSetAffinityGroups(CharacterAbilityCheckAffinity.None, DieType.D6, 1, + AbilityCheckGroupOperation.AddDie, + (AttributeDefinitions.Intelligence, SkillDefinitions.Arcana), + (AttributeDefinitions.Intelligence, SkillDefinitions.Nature)) + .AddToDB(), + FeatureDefinitionPointPoolBuilder + .Create("PointPoolDruidPrimalOrderMagician") + .SetGuiPresentationNoContent(true) + .SetSpellOrCantripPool(HeroDefinitions.PointsPoolType.Cantrip, 1) + .AddToDB()) + .AddToDB(), + FeatureDefinitionFeatureSetBuilder + .Create("FeatureSetDruidPrimalOrderWarden") + .SetGuiPresentation(Category.Feature) + .SetFeatureSet( + FeatureDefinitionProficiencyBuilder + .Create("ProficiencyDruidPrimalOrderWardenArmor") + .SetGuiPresentationNoContent(true) + .SetProficiencies(ProficiencyType.Armor, EquipmentDefinitions.MediumArmorCategory) + .AddToDB(), + FeatureDefinitionProficiencyBuilder + .Create("ProficiencyDruidPrimalOrderWardenWeapon") + .SetGuiPresentationNoContent(true) + .SetProficiencies(ProficiencyType.Weapon, EquipmentDefinitions.MartialWeaponCategory) + .AddToDB()) + .AddToDB()) + .AddToDB(); + + private static readonly List DruidWeaponsCategories = + [.. FeatureDefinitionProficiencys.ProficiencyDruidWeapon.Proficiencies]; + private static SpellDefinition ConjureElementalInvisibleStalker { get; set; } internal static void LateLoad() @@ -138,6 +181,8 @@ internal static void LateLoad() SwitchColdResistanceAndImmunityAlsoGrantsWeatherImmunity(); SwitchConditionBlindedShouldNotAllowOpportunityAttack(); SwitchDruidAllowMetalArmor(); + SwitchDruidWeaponProficiencyToUseOneDnd(); + SwitchDruidPrimalOrderAndRemoveMediumArmorProficiency(); SwitchEldritchBlastRange(); SwitchEnableUpcastConjureElementalAndFey(); SwitchFilterOnHideousLaughter(); @@ -362,6 +407,34 @@ internal static void SwitchDruidAllowMetalArmor() } } + internal static void SwitchDruidPrimalOrderAndRemoveMediumArmorProficiency() + { + if (Main.Settings.AddDruidPrimalOrderAndRemoveMediumArmorProficiency) + { + FeatureDefinitionProficiencys.ProficiencyDruidArmor.Proficiencies.Remove( + EquipmentDefinitions.MediumArmorCategory); + + Druid.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetDruidPrimalOrder, 1)); + } + else + { + FeatureDefinitionProficiencys.ProficiencyDruidArmor.Proficiencies.TryAdd( + EquipmentDefinitions.MediumArmorCategory); + + Druid.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureSetDruidPrimalOrder); + } + + Druid.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchDruidWeaponProficiencyToUseOneDnd() + { + FeatureDefinitionProficiencys.ProficiencyDruidWeapon.proficiencies = + Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd + ? [WeaponCategoryDefinitions.SimpleWeaponCategory.Name] + : DruidWeaponsCategories; + } + internal static void SwitchEnableRitualOnAllCasters() { var subclasses = SharedSpellsContext.SubclassCasterType.Keys.Select(GetDefinition); diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index d8a5d73c2f..5232ab2ac0 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -258,8 +258,6 @@ public class Settings : UnityModManager.ModSettings // Characters - Classes // - public bool AllowDruidToWearMetalArmor { get; set; } - public bool EnableRitualOnAllCasters { get; set; } public bool GrantScimitarSpecializationToBardRogue { get; set; } public bool EnableBardExpertiseOneLevelBefore { get; set; } public bool ChangeBardicInspirationDurationToOneHour { get; set; } @@ -269,6 +267,9 @@ public class Settings : UnityModManager.ModSettings public bool EnableBarbarianFightingStyle { get; set; } public bool EnableBarbarianRecklessSameBuffDebuffDuration { get; set; } public bool EnableBarbarianRegainOneRageAtShortRest { get; set; } + public bool AllowDruidToWearMetalArmor { get; set; } + public bool AddDruidPrimalOrderAndRemoveMediumArmorProficiency { get; set; } + public bool SwapDruidWeaponProficiencyToUseOneDnd { get; set; } public bool AddFighterLevelToIndomitableSavingReroll { get; set; } public bool AddPersuasionToFighterSkillOptions { get; set; } public bool SwapSecondWindToUseOneDndUsagesProgression { get; set; } @@ -355,6 +356,7 @@ public class Settings : UnityModManager.ModSettings public bool AllowBladeCantripsToUseReach { get; set; } public bool EnableOneDnDPreparedSpellsTables { get; set; } + public bool EnableRitualOnAllCasters { get; set; } public bool QuickCastLightCantripOnWornItemsFirst { get; set; } public bool IllusionSpellsAutomaticallyFailAgainstTrueSightInRange { get; set; } public bool AllowTargetingSelectionWhenCastingChainLightningSpell { get; set; } diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index b590ed14bb..1c8b66a659 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -216,7 +216,6 @@ true true true - true true true true @@ -545,8 +544,6 @@ false false en - false - false false false false @@ -556,6 +553,9 @@ false false false + false + false + false false false false @@ -583,6 +583,7 @@ false false false + false false false false @@ -627,6 +628,7 @@ false false + false false false @@ -1039,4 +1041,8 @@ false false false + 0 + false + false + false \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 989cb095a0..701a295406 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -106,6 +106,12 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=Verbesserung des brut Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=Der zusätzliche Schaden, den Ihr brutaler Schlag verursacht, erhöht sich auf 2W10. Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Verbesserung des brutalen Schlags Feature/&FeatureSetBarbarianBrutalStrikeTitle=Brutaler Schlag +Feature/&FeatureSetDruidPrimalOrderDescription=Du hast dich einer der folgenden heiligen Rollen deiner Wahl verschrieben.\n• Magier. Du kennst einen zusätzlichen Zauberspruch aus der Zauberliste des Druiden. Darüber hinaus verleiht dir deine mystische Verbindung zur Natur einen Bonus auf deine Intelligenzprüfungen (Arkanes oder Natur). Der Bonus beträgt 1W6.\n• Wächter. Du bist für den Kampf ausgebildet und erlangst Kenntnisse im Umgang mit Kriegswaffen und im Umgang mit mittlerer Rüstung. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Du kennst einen zusätzlichen Zauberspruch aus der Zauberliste des Druiden. Außerdem verleiht dir deine mystische Verbindung zur Natur einen Bonus auf deine Intelligenzwürfe (Arkanes oder Natur). Der Bonus beträgt 1W6. +Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Zauberer +Feature/&FeatureSetDruidPrimalOrderTitle=Ursprüngliche Ordnung +Feature/&FeatureSetDruidPrimalOrderWardenDescription=Durch die Ausbildung für den Kampf erlangen Sie Fertigkeiten im Umgang mit Kampfwaffen und werden mit mittlerer Rüstung geschult. +Feature/&FeatureSetDruidPrimalOrderWardenTitle=Aufseher Feature/&FeatureSetRageExtendedDescription=Im Kampf kämpfst du mit urwüchsiger Wildheit. In deinem Zug kannst du als Bonusaktion in Wut geraten. Dies verschafft dir Vorteile bei Stärkewürfen und -würfen, einen anfänglichen Bonus von +2 auf Nahkampfangriffsschaden und Widerstand gegen Hieb-, Schlag- und Stichschaden. Du erhältst diese Vorteile nur, wenn du keine schwere Rüstung trägst. Hält 1 Minute an oder endet, wenn du seit deinem letzten Zug nicht angegriffen oder Schaden erlitten hast.\n Du beginnst mit 2 Wutzuständen, die nach einer langen Ruhepause erneuert werden. Auf Stufe 7 erhältst du nach einer kurzen Ruhepause einen Wutpunkt zurück. Feature/&FeatureSorcererMagicalGuidanceDescription=Sie können Ihre innere Quelle der Magie nutzen, um zu versuchen, aus Misserfolgen Erfolge zu zaubern. Wenn Sie einen Fähigkeitstest machen, der fehlschlägt, können Sie 1 Zauberpunkt ausgeben, um den W20 erneut zu würfeln, und Sie müssen den neuen Wurf verwenden, wodurch Sie den Misserfolg möglicherweise in einen Erfolg verwandeln können. Feature/&FeatureSorcererMagicalGuidanceTitle=Magische Führung diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 0342255f28..2d38bdf355 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Füge den Zustand Blutung[Munition, Rezepte, Kits usw.] [Neustart erforderlich] ModUi/&AddDarknessPerceptiveToDarkRaces=Aktiviere Dunkelheitswahrnehmung bei Dunkelelf, Dunkelkobold und Grauem Zwerg \n[gewährt einen Vorteil bei Wahrnehmungsprüfungen im unbeleuchteten Zustand oder in magischer Dunkelheit] ModUi/&AddDexModifierToEnemiesInitiativeRoll=DEX-Modifikator zu Feinden hinzufügen Initiative Roll +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Füge Primal Order auf Level 1 hinzu und entferne Medium Armor Proficiency ModUi/&AddFighterLevelToIndomitableSavingReroll=Füge die Klassenstufe als Bonus zur Wiederholung des Rettungswurfs für Unbezwingbaren Widerstand hinzu ModUi/&AddHumanoidFavoredEnemyToRanger=Aktivieren Sie Humanoide als bevorzugte Feinde ModUi/&AddNewWeaponsAndRecipesToShops=Neue Waffen und Rezepte zu den Läden hinzufügen [Handbandagen, Hellebarden, Piken, lange Streitkolben, Handarmbrüste] [Neustart erforderlich] @@ -303,6 +304,7 @@ ModUi/&Subclasses=Unterklassen ModUi/&Subraces=Unterrassen ModUi/&SwapAbjurationSavant=Tauschen Sie Abjurer Abjuration Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erwerben, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] ModUi/&SwapCraftedItemAndRecipeIcons=+ Rezepte und Symbole für hergestellte Gegenstände im Shop austauschenModUi/&SwapEvocationSavant=Tauschen Sie Evoker Evocation Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] +ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Tauschen Sie Waffenfertigkeit mit der Version 5e 2024 aus [einfache Waffen statt Waffentypen, aber Sie verlieren die Krummsäbelfertigkeit] ModUi/&SwapEvocationPotentCantripAndSculptSpell=Tauschen Sie die Funktionen Evoker Sculpt Spells und Potent Cantrip aus ModUi/&SwapEvocationSavant=Tauschen Sie Evoker Evocation Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Tauschen Sie Unbewaffneter Angriff aus, um die Würfeltyp-Progression von 5e 2024 zu verwenden diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index fca460aaab..586574bc6c 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -106,6 +106,12 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=Brutal Strike Improve Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=The extra damage your Brutal Strike deals increases to 2d10. Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Brutal Strike Improvement Feature/&FeatureSetBarbarianBrutalStrikeTitle=Brutal Strike +Feature/&FeatureSetDruidPrimalOrderDescription=You have dedicated yourself to one of the following sacred roles of your choice.\n• Magician. You know one extra cantrip from the Druid spell list. In addition, your mystical connection to nature gives you a bonus to your Intelligence (Arcana or Nature) checks. The bonus equals 1D6.\n• Warden. Trained for battle, you gain proficiency with Martial weapons and training with Medium Armor. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=You know one extra cantrip from the Druid spell list. In addition, your mystical connection to nature gives you a bonus to your Intelligence (Arcana or Nature) checks. The bonus equals 1D6. +Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Magician +Feature/&FeatureSetDruidPrimalOrderTitle=Primal Order +Feature/&FeatureSetDruidPrimalOrderWardenDescription=Trained for battle, you gain proficiency with Martial weapons and training with Medium Armor. +Feature/&FeatureSetDruidPrimalOrderWardenTitle=Warden Feature/&FeatureSetRageExtendedDescription=In battle, you fight with primal ferocity. On your turn, you can enter a rage as a bonus action. This grants you advantage on strength saves and checks, an initial +2 bonus to melee attack damage, and resistance to slashing, bludgeoning, and piercing damage. You gain these benefits only if you are not wearing heavy armor. Lasts for 1 minute or ends if you have not attacked or suffered damage since your last turn.\n You start with 2 rages, renewed after a long rest. At level 7, you regain one rage point after a short rest. Feature/&FeatureSorcererMagicalGuidanceDescription=You can tap into your inner wellspring of magic to try and conjure success from failure. When you make an ability check that fails, you can spend 1 sorcery point to reroll the d20, and you must use the new roll, potentially turning the failure into a success. Feature/&FeatureSorcererMagicalGuidanceTitle=Magical Guidance diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 15ad31199d..f305cdcc64 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Add the Bleeding co ModUi/&AddCustomIconsToOfficialItems=Add custom icons to official game items [ammunition, recipes, kits, etc.] [Requires Restart] ModUi/&AddDarknessPerceptiveToDarkRaces=Enable Darkness Perceptive on Darkelf, Dark Kobold, and Gray Dwarf \n[grants advantage on perception checks when unlit or under magical darkness] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Add DEX modifier to enemies Initiative Roll +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Enable Primal Order at level 1 and remove Medium Armor Proficiency ModUi/&AddFighterLevelToIndomitableSavingReroll=Add the class level as a bonus to Indomitable Resistance saving throw reroll ModUi/&AddHumanoidFavoredEnemyToRanger=Enable Humanoid preferred enemies ModUi/&AddNewWeaponsAndRecipesToShops=Add new weapons and recipes to shops [hand wraps, halberds, pikes, long maces, hand crossbows] [Requires Restart] @@ -303,6 +304,7 @@ ModUi/&Subclasses=Subclasses ModUi/&Subraces=Subraces ModUi/&SwapAbjurationSavant=Swap Abjurer Abjuration Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] ModUi/&SwapCraftedItemAndRecipeIcons=+ Swap recipe and crafted item icons in shop +ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Swap Weapon Proficiency with 5e 2024 version [simple weapons instead of weapon types but you lose Scimitar proficiency] ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip features ModUi/&SwapEvocationSavant=Swap Evoker Evocation Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Swap Unarmed Attack to use 5e 2024 die type progression diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index 4f37279e5f..792a9d84fa 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -106,6 +106,12 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=Mejora de Brutal Stri Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=El daño adicional que inflige tu Golpe Brutal aumenta a 2d10. Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Mejora de Brutal Strike Feature/&FeatureSetBarbarianBrutalStrikeTitle=Golpe brutal +Feature/&FeatureSetDruidPrimalOrderDescription=Te has dedicado a uno de los siguientes roles sagrados de tu elección.\n• Mago. Conoces un truco adicional de la lista de conjuros del Druida. Además, tu conexión mística con la naturaleza te otorga una bonificación a tus pruebas de Inteligencia (Arcana o Naturaleza). La bonificación es igual a 1D6.\n• Guardián. Entrenado para la batalla, obtienes competencia con armas marciales y entrenamiento con armaduras medianas. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Conoces un truco adicional de la lista de conjuros del druida. Además, tu conexión mística con la naturaleza te otorga una bonificación a tus pruebas de Inteligencia (Arcana o Naturaleza). La bonificación equivale a 1D6. +Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Mago +Feature/&FeatureSetDruidPrimalOrderTitle=Orden primordial +Feature/&FeatureSetDruidPrimalOrderWardenDescription=Entrenado para la batalla, adquirirás competencia con armas marciales y entrenamiento con armadura media. +Feature/&FeatureSetDruidPrimalOrderWardenTitle=Guardián Feature/&FeatureSetRageExtendedDescription=En batalla, luchas con ferocidad primaria. En tu turno, puedes entrar en furia como acción adicional. Esto te otorga ventaja en salvaciones y controles de fuerza, una bonificación inicial de +2 al daño de ataque cuerpo a cuerpo y resistencia al daño cortante, contundente y perforante. Obtienes estos beneficios solo si no llevas armadura pesada. Dura 1 minuto o termina si no has atacado ni sufrido daño desde tu último turno.\n Comienzas con 2 furias, que se renuevan después de un descanso prolongado. En el nivel 7, recuperas un punto de furia después de un descanso breve. Feature/&FeatureSorcererMagicalGuidanceDescription=Puedes recurrir a tu fuente interior de magia para intentar conjurar el éxito a partir del fracaso. Cuando realizas una prueba de característica que falla, puedes gastar 1 punto de hechicería para volver a tirar el d20 y debes usar la nueva tirada, lo que potencialmente convierte el fracaso en un éxito. Feature/&FeatureSorcererMagicalGuidanceTitle=Guía mágica diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index c08ca45879..9fa4f93ea1 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -6,6 +6,7 @@ ModUi/&AddBleedingToLesserRestoration=Agregue la condición Sangr ModUi/&AddCustomIconsToOfficialItems=Añade íconos personalizados a los elementos oficiales del juego [municiones, recetas, kits, etc.] [Requiere reinicio] ModUi/&AddDarknessPerceptiveToDarkRaces=Habilita Percepción de la oscuridad en Darkelf, Kóbold oscuro y Enano gris \n[otorga ventaja en las pruebas de percepción cuando no está iluminado o bajo oscuridad mágica] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Añade el modificador DEX a los enemigos Tiro de iniciativa +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Añade Orden primigenia en el nivel 1 y elimina Competencia en armadura media ModUi/&AddFighterLevelToIndomitableSavingReroll=Añade el nivel de clase como bonificación a la repetición de la tirada de salvación de Resistencia indomable. ModUi/&AddHumanoidFavoredEnemyToRanger=Habilitar enemigos preferidos humanoides ModUi/&AddNewWeaponsAndRecipesToShops=Añade nuevas armas y recetas a las tiendas [vendas de mano, alabardas, picas, mazas largas, ballestas de mano] [Requiere reinicio] @@ -304,6 +305,7 @@ ModUi/&Subclasses=Subclases ModUi/&Subraces=Subrazas ModUi/&SwapAbjurationSavant=Intercambia Abjurador Sabio de la abjuración con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de espacio] ModUi/&SwapCraftedItemAndRecipeIcons=+ Intercambia íconos de recetas y objetos elaborados en la tiendaModUi/&SwapEvocationSavant=Intercambia Evocador Sabio de la evocación con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de ranura] +ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Cambia la competencia con armas por la versión 5e 2024 [armas simples en lugar de tipos de armas pero pierdes la competencia con cimitarra] ModUi/&SwapEvocationPotentCantripAndSculptSpell=Intercambia las características de Evocador, Hechizos de escultura y Truco potente ModUi/&SwapEvocationSavant=Intercambia Evocador Sabio de la evocación con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de ranura] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Cambia Ataque desarmado para usar la progresión de tipo de dado de 5e 2024 diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index e21118dd5f..46ce5d1a31 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -106,6 +106,12 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=Amélioration de la f Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=Les dégâts supplémentaires infligés par votre Frappe brutale augmentent à 2d10. Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Amélioration des frappes brutales Feature/&FeatureSetBarbarianBrutalStrikeTitle=Grève brutale +Feature/&FeatureSetDruidPrimalOrderDescription=Vous vous êtes consacré à l'un des rôles sacrés suivants de votre choix.\n• Magicien. Vous connaissez un sort supplémentaire de la liste des sorts du Druide. De plus, votre connexion mystique avec la nature vous confère un bonus à vos tests d'Intelligence (Arcanes ou Nature). Le bonus est égal à 1D6.\n• Gardien. Entraîné au combat, vous maîtrisez les armes martiales et vous vous entraînez aux armures intermédiaires. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Vous connaissez un sort supplémentaire de la liste des sorts du druide. De plus, votre connexion mystique avec la nature vous confère un bonus à vos tests d'Intelligence (Arcanes ou Nature). Le bonus est égal à 1D6. +Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Magicien +Feature/&FeatureSetDruidPrimalOrderTitle=Ordre primordial +Feature/&FeatureSetDruidPrimalOrderWardenDescription=Entraîné au combat, vous acquérez une maîtrise des armes martiales et une formation avec une armure moyenne. +Feature/&FeatureSetDruidPrimalOrderWardenTitle=Directeur Feature/&FeatureSetRageExtendedDescription=Au combat, vous combattez avec une férocité primitive. À votre tour, vous pouvez entrer en rage en tant qu'action bonus. Cela vous confère un avantage aux jets de sauvegarde et aux tests de Force, un bonus initial de +2 aux dégâts d'attaque au corps à corps et une résistance aux dégâts tranchants, contondants et perforants. Vous ne bénéficiez de ces avantages que si vous ne portez pas d'armure lourde. Dure 1 minute ou prend fin si vous n'avez pas attaqué ou subi de dégâts depuis votre dernier tour.\n Vous commencez avec 2 rages, renouvelées après un repos long. Au niveau 7, vous regagnez un point de rage après un repos court. Feature/&FeatureSorcererMagicalGuidanceDescription=Vous pouvez puiser dans votre source intérieure de magie pour tenter de transformer un échec en succès. Lorsque vous faites un test de caractéristique qui échoue, vous pouvez dépenser 1 point de sorcellerie pour relancer le d20, et vous devez utiliser le nouveau jet, ce qui peut potentiellement transformer l'échec en succès. Feature/&FeatureSorcererMagicalGuidanceTitle=Guidance magique diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 4559107967..248557f7c4 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Ajoutez la condition Saigne ModUi/&AddCustomIconsToOfficialItems=Ajoutez des icônes personnalisées aux éléments de jeu officiels [munitions, recettes, kits, etc.] [Nécessite un redémarrage] ModUi/&AddDarknessPerceptiveToDarkRaces=Activez la Perception des Ténèbres sur Darkelf, Dark Kobold et Gray Dwarf \n[accorde un avantage aux tests de perception lorsqu'il n'est pas éclairé ou sous l'obscurité magique] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Ajoutez un modificateur DEX aux ennemis Initiative Roll +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Ajoutez Ordre primordial au niveau 1 et supprimez Maîtrise de l'armure moyenne ModUi/&AddFighterLevelToIndomitableSavingReroll=Ajoutez le niveau de classe comme bonus à la relance du jet de sauvegarde de Résistance indomptable ModUi/&AddHumanoidFavoredEnemyToRanger=Activer les ennemis préférés des humanoïdes ModUi/&AddNewWeaponsAndRecipesToShops=Ajoutez de nouvelles armes et recettes aux magasins [bandages de main, hallebardes, piques, longues masses, arbalètes à main] [Nécessite un redémarrage] @@ -303,6 +304,7 @@ ModUi/&Subclasses=Sous-classes ModUi/&Subraces=Sous-races ModUi/&SwapAbjurationSavant=Échangez Abjurer Abjuration Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] ModUi/&SwapCraftedItemAndRecipeIcons=+ Échangez les icônes de recettes et d'objets fabriqués dans la boutiqueModUi/&SwapEvocationSavant=Échangez Evoker Evocation Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] +ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Échangez Maîtrise des armes avec la version 5e 2024 [armes simples au lieu de types d'armes mais vous perdez la maîtrise du cimeterre] ModUi/&SwapEvocationPotentCantripAndSculptSpell=Échangez les fonctionnalités Sculpt Spells d'Evoker et Potent Cantrip ModUi/&SwapEvocationSavant=Échangez Evoker Evocation Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Remplacez Attaque non armée par la progression du type de dé 5e 2024 diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 9f9413b7ca..227bbd8b1c 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -106,6 +106,12 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=Miglioramento del col Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=Il danno extra inflitto dal tuo Colpo Brutale aumenta a 2d10. Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Miglioramento del colpo brutale Feature/&FeatureSetBarbarianBrutalStrikeTitle=Colpo brutale +Feature/&FeatureSetDruidPrimalOrderDescription=Ti sei dedicato a uno dei seguenti ruoli sacri a tua scelta.\n• Mago. Conosci un trucchetto extra dalla lista degli incantesimi del Druido. Inoltre, la tua connessione mistica con la natura ti dà un bonus alle tue prove di Intelligenza (Arcano o Natura). Il bonus è pari a 1D6.\n• Guardiano. Addestrato per la battaglia, ottieni competenza con le armi da guerra e addestramento con le armature medie. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Conosci un trucchetto extra dalla lista degli incantesimi del Druido. Inoltre, la tua connessione mistica con la natura ti dà un bonus alle tue prove di Intelligenza (Arcano o Natura). Il bonus è pari a 1D6. +Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Mago +Feature/&FeatureSetDruidPrimalOrderTitle=Ordine primordiale +Feature/&FeatureSetDruidPrimalOrderWardenDescription=Una volta addestrato per la battaglia, acquisisci competenza nell'uso delle armi da guerra e ti alleni con le armature medie. +Feature/&FeatureSetDruidPrimalOrderWardenTitle=Guardiano Feature/&FeatureSetRageExtendedDescription=In battaglia, combatti con ferocia primordiale. Nel tuo turno, puoi entrare in ira come azione bonus. Ciò ti garantisce un vantaggio sui tiri salvezza e sulle prove di forza, un bonus iniziale di +2 ai danni da attacco in mischia e resistenza ai danni taglienti, contundenti e perforanti. Ottieni questi benefici solo se non indossi un'armatura pesante. Dura 1 minuto o termina se non hai attaccato o subito danni dal tuo ultimo turno. \n Inizi con 2 ira, rinnovate dopo un lungo riposo. Al livello 7, recuperi un punto ira dopo un breve riposo. Feature/&FeatureSorcererMagicalGuidanceDescription=Puoi attingere alla tua fonte interiore di magia per provare a evocare il successo dal fallimento. Quando fai una prova di abilità che fallisce, puoi spendere 1 punto stregoneria per rilanciare il d20 e devi usare il nuovo tiro, trasformando potenzialmente il fallimento in un successo. Feature/&FeatureSorcererMagicalGuidanceTitle=Guida magica diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index fa81b8fcba..3565365c43 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Aggiungi la condizione Sang ModUi/&AddCustomIconsToOfficialItems=Aggiungi icone personalizzate agli oggetti di gioco ufficiali [munizioni, ricette, kit, ecc.] [Richiede il riavvio] ModUi/&AddDarknessPerceptiveToDarkRaces=Abilita Percezione dell'oscurità su Elfo scuro, Kobold oscuro e Nano grigio \n[concede vantaggio sui controlli di percezione quando non è illuminato o sotto oscurità magica] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Aggiungi modificatore DEX al tiro di iniziativa dei nemici +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Aggiungi Ordine Primordiale al livello 1 e rimuovi Competenza in Armatura Media ModUi/&AddFighterLevelToIndomitableSavingReroll=Aggiungere il livello di classe come bonus al tiro salvezza ripetuto di Resistenza indomabile. ModUi/&AddHumanoidFavoredEnemyToRanger=Abilita i nemici preferiti Umanoidi ModUi/&AddNewWeaponsAndRecipesToShops=Aggiungi nuove armi e ricette ai negozi [fasce per le mani, alabarde, picche, mazze lunghe, balestre a mano] [Richiede riavvio] @@ -303,6 +304,7 @@ ModUi/&Subclasses=Sottoclassi ModUi/&Subraces=Sottorazze ModUi/&SwapAbjurationSavant=Sostituisci Abjurer Savant dell'Abjurazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] ModUi/&SwapCraftedItemAndRecipeIcons=+ Scambia le icone delle ricette e degli oggetti realizzati nel negozioModUi/&SwapEvocationSavant=Sostituisci Evocatore Sapiente dell'evocazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] +ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Sostituisci Competenza nelle armi con la versione 5e 2024 [armi semplici invece di tipi di armi ma perdi competenza nella Scimitarra] ModUi/&SwapEvocationPotentCantripAndSculptSpell=Scambia le funzionalità Evocatore Incantesimi di Scultura e Trucchetto Potente ModUi/&SwapEvocationSavant=Sostituisci Evocatore Sapiente dell'evocazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Sostituisci Attacco disarmato per usare la progressione del tipo di dado 5e 2024 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index e770894ed9..69a8cd1066 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -106,6 +106,12 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=ブルータルスト Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=Brutal Strike が与える追加ダメージは 2d10 に増加します。 Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=ブルータルストライクの改善 Feature/&FeatureSetBarbarianBrutalStrikeTitle=ブルータル・ストライク +Feature/&FeatureSetDruidPrimalOrderDescription=あなたは、あなたが選んだ以下の神聖な役割の 1 つに身を捧げています。\n• 魔術師。あなたはドルイド呪文リストから追加の呪文を 1 つ知っています。さらに、自然との神秘的なつながりにより、知力 (神秘学または自然) 判定にボーナスが与えられます。ボーナスは 1D6 です。\n• 監視者。戦闘の訓練を受け、あなたは軍用武器の熟練度と中装鎧の訓練を得ます。 +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=ドルイド呪文リストから追加の呪文を 1 つ知っています。さらに、自然との神秘的なつながりにより、知力 (神秘学または自然) 判定にボーナスが与えられます。ボーナスは 1D6 です。 +Feature/&FeatureSetDruidPrimalOrderMagicianTitle=マジシャン +Feature/&FeatureSetDruidPrimalOrderTitle=原始秩序 +Feature/&FeatureSetDruidPrimalOrderWardenDescription=戦闘の訓練を受け、あなたは格闘武器の熟練度と中型鎧の訓練を習得します。 +Feature/&FeatureSetDruidPrimalOrderWardenTitle=ウォーデン Feature/&FeatureSetRageExtendedDescription=戦闘では、根源的な凶暴性で戦います。自分のターンでは、ボーナス アクションとして激怒を入力できます。これにより、体力のセーブとチェックで有利になり、近接攻撃のダメージに最初の +2 ボーナスが与えられ、斬撃、殴打、突き刺しのダメージに対する耐性が得られます。これらの利点は、重装備を着用していない場合にのみ得られます。 1 分間持続するか、最後のターン以降に攻撃やダメージを受けていない場合は終了します。\n 2 つの激怒から始まり、長い休息の後に更新されます。レベル 7 では、短い休憩の後、怒りポイントが 1 回復します。 Feature/&FeatureSorcererMagicalGuidanceDescription=自分の内なる魔法の泉を利用して、失敗から成功を呼び起こすことができます。能力チェックが失敗した場合、1 ソーサリー ポイントを使って d20 を再ロールすることができ、新しいロールを使用する必要があるため、失敗が成功に変わる可能性があります。 Feature/&FeatureSorcererMagicalGuidanceTitle=魔法の導き diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index edab500393..23a0ee990f 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Greater と [弾薬、レシピ、キットなど] [再起動が必要] ModUi/&AddDarknessPerceptiveToDarkRaces=ダークエルフ、ダークコボルド、グレイドワーフに闇知覚を有効にする \n[照明が消えているときや魔法の暗闇にいるときに知覚判定に有利を与える] ModUi/&AddDexModifierToEnemiesInitiativeRoll=敵に DEX 修飾子を追加する イニシアティブ ロール +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=レベル 1 に Primal Order を追加し、Medium Armor Proficiency を削除します ModUi/&AddFighterLevelToIndomitableSavingReroll=不屈の抵抗セーヴィングスローの再ロールにクラスレベルをボーナスとして追加します ModUi/&AddHumanoidFavoredEnemyToRanger=ヒューマノイド優先敵を有効にする ModUi/&AddNewWeaponsAndRecipesToShops=新しい武器とレシピをショップに追加します [ハンドラップ、ハルバード、パイク、ロングメイス、ハンドクロスボウ] [再起動が必要です] @@ -303,6 +304,7 @@ ModUi/&Subclasses=サブクラス ModUi/&Subraces=亜種族 ModUi/&SwapAbjurationSavant=Abjurer Abjuration Savant を 5e 2024 バージョンの [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびに 1 つずつ追加で習得する] と入れ替えます ModUi/&SwapCraftedItemAndRecipeIcons=+ ショップでレシピとクラフトアイテムのアイコンを交換ModUi/&SwapEvocationSavant=Evoker Evocation Savant を 5e 2024 バージョン [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびにさらに 1 つ習得する] と入れ替えます +ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=武器熟練度を5e 2024バージョン[武器タイプの代わりにシンプルな武器ですが、シミター熟練度は失われます]と入れ替えます ModUi/&SwapEvocationPotentCantripAndSculptSpell=エヴォーカースカルプトスペルとポテンシャルキャントリップの機能を入れ替えます ModUi/&SwapEvocationSavant=Evoker Evocation Savant を 5e 2024 バージョン [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびにさらに 1 つ習得する] と入れ替えます ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Unarmed Attack を 5e 2024 ダイスタイプの進行に置き換える diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index f1972fa303..096c62fd84 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -106,6 +106,12 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=잔혹한 일격 개 Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=잔인한 일격이 주는 추가 피해는 2d10으로 증가합니다. Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=잔혹한 일격 개선 Feature/&FeatureSetBarbarianBrutalStrikeTitle=잔인한 일격 +Feature/&FeatureSetDruidPrimalOrderDescription=당신은 선택한 다음 신성한 역할 중 하나에 헌신했습니다.\n• 마법사. 당신은 드루이드 주문 목록에서 추가 주문 하나를 알고 있습니다. 게다가, 자연과의 신비로운 연결은 당신에게 지능(비전 또는 자연) 검사에 보너스를 줍니다. 보너스는 1D6과 같습니다.\n• 감시자. 전투를 위해 훈련받았으며, 당신은 무술 무기에 능숙해지고 중갑옷에 대한 훈련을 받습니다. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=드루이드 주문 목록에서 캔트립을 하나 더 알고 있습니다. 게다가 자연과의 신비로운 연결로 지능(아카나 또는 자연) 검사에 보너스를 받습니다. 보너스는 1D6입니다. +Feature/&FeatureSetDruidPrimalOrderMagicianTitle=마술사 +Feature/&FeatureSetDruidPrimalOrderTitle=원초적 순서 +Feature/&FeatureSetDruidPrimalOrderWardenDescription=전투 훈련을 받으면 무술 무기를 능숙하게 다루고 중갑옷을 다루는 훈련을 받습니다. +Feature/&FeatureSetDruidPrimalOrderWardenTitle=파수꾼 Feature/&FeatureSetRageExtendedDescription=전투에서는 원시적인 잔인함으로 싸웁니다. 자신의 차례에 보너스 행동으로 분노를 입력할 수 있습니다. 이를 통해 힘 세이브 및 체크에 이점을 부여하고 근접 공격 데미지에 초기 +2 보너스를 부여하며 슬래시, 곤봉 및 관통 데미지에 대한 저항력을 부여합니다. 무거운 갑옷을 입지 않은 경우에만 이러한 이점을 얻을 수 있습니다. 1분 동안 지속되거나 마지막 턴 이후 공격을 받거나 피해를 입지 않은 경우 종료됩니다.\n 2개의 분노로 시작하고 오랜 휴식 후 갱신됩니다. 레벨 7에서는 잠시 휴식을 취한 후 분노 포인트 1을 회복합니다. Feature/&FeatureSorcererMagicalGuidanceDescription=당신은 실패로부터 성공을 시도하고 이끌어내기 위해 내면의 마법의 원천을 활용할 수 있습니다. 능력 검사에 실패하면 1마법 포인트를 사용하여 d20을 다시 굴릴 수 있고 새 굴림을 사용해야 잠재적으로 실패가 성공으로 바뀔 수 있습니다. Feature/&FeatureSorcererMagicalGuidanceTitle=마법의 인도 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 78977d4eac..c62e8cfe7a 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=상위 및 [탄약, 레시피, 키트 등] [재시작 필요] ModUi/&AddDarknessPerceptiveToDarkRaces=다크엘프, 다크 코볼드, 그레이 드워프에게 어둠 지각을 활성화합니다. \n[조명이 없거나 마법적 어둠에 있을 때 지각 검사에 유리합니다] ModUi/&AddDexModifierToEnemiesInitiativeRoll=적에게 DEX 수정치를 추가합니다 이니셔티브 롤 +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=레벨 1에서 원시 질서를 추가하고 중간 방어구 숙련도를 제거합니다. ModUi/&AddFighterLevelToIndomitableSavingReroll=불굴의 저항력 세이빙 스로우 재시전에 보너스로 클래스 레벨을 추가합니다. ModUi/&AddHumanoidFavoredEnemyToRanger=인간형 선호 적 활성화 ModUi/&AddNewWeaponsAndRecipesToShops=상점에 새로운 무기와 제조법을 추가하세요 [손가락 묶는 무기, 도끼창, 창, 긴 메이스, 손 석궁] [재시작 필요] @@ -303,6 +304,7 @@ ModUi/&Subclasses=서브클래스 ModUi/&Subraces=아종 ModUi/&SwapAbjurationSavant=Abjurer Abjuration Savant를 5e 2024 버전과 교환하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] ModUi/&SwapCraftedItemAndRecipeIcons=+ 상점에서 레시피와 제작 아이템 아이콘 교환ModUi/&SwapEvocationSavant=Evoker Evocation Savant를 5e 2024 버전으로 교체하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] +ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=무기 숙련도를 5e 2024 버전으로 바꾸세요 [무기 유형 대신 단순 무기를 사용하지만, 곡도 숙련도는 잃습니다] ModUi/&SwapEvocationPotentCantripAndSculptSpell=소환사 조각 주문과 강력한 주문 기능을 교체하세요 ModUi/&SwapEvocationSavant=Evoker Evocation Savant를 5e 2024 버전으로 교체하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=비무장 공격을 5e 2024 주사위 유형 진행을 사용하도록 바꾸세요. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 64e6bd89de..bf26c8900a 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -106,6 +106,12 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=Melhoria do Ataque Br Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=O dano extra causado pelo seu Ataque Brutal aumenta para 2d10. Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Melhoria do Ataque Brutal Feature/&FeatureSetBarbarianBrutalStrikeTitle=Ataque Brutal +Feature/&FeatureSetDruidPrimalOrderDescription=Você se dedicou a um dos seguintes papéis sagrados de sua escolha.\n• Mago. Você conhece um truque extra da lista de magias do Druida. Além disso, sua conexão mística com a natureza lhe dá um bônus em seus testes de Inteligência (Arcana ou Natureza). O bônus é igual a 1D6.\n• Guardião. Treinado para a batalha, você ganha proficiência com armas Marciais e treinamento com Armadura Média. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Você conhece um truque extra da lista de magias de Druida. Além disso, sua conexão mística com a natureza lhe dá um bônus para seus testes de Inteligência (Arcana ou Natureza). O bônus é igual a 1D6. +Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Mágico +Feature/&FeatureSetDruidPrimalOrderTitle=Ordem Primordial +Feature/&FeatureSetDruidPrimalOrderWardenDescription=Treinado para a batalha, você ganha proficiência com armas marciais e treinamento com armaduras médias. +Feature/&FeatureSetDruidPrimalOrderWardenTitle=Diretor Feature/&FeatureSetRageExtendedDescription=Em batalha, você luta com ferocidade primitiva. No seu turno, você pode entrar em fúria como uma ação bônus. Isso lhe concede vantagem em testes de resistência e força, um bônus inicial de +2 para dano de ataque corpo a corpo e resistência a dano cortante, contundente e perfurante. Você ganha esses benefícios somente se não estiver usando armadura pesada. Dura 1 minuto ou termina se você não tiver atacado ou sofrido dano desde seu último turno.\n Você começa com 2 fúrias, renovadas após um longo descanso. No nível 7, você recupera um ponto de fúria após um descanso curto. Feature/&FeatureSorcererMagicalGuidanceDescription=Você pode acessar sua fonte interna de magia para tentar conjurar sucesso a partir do fracasso. Quando você faz um teste de habilidade que falha, você pode gastar 1 ponto de feitiçaria para rolar novamente o d20, e você deve usar o novo teste, potencialmente transformando o fracasso em um sucesso. Feature/&FeatureSorcererMagicalGuidanceTitle=Orientação Mágica diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index adecb8a9ae..ed0d8df925 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Adicione a condição Sangr ModUi/&AddCustomIconsToOfficialItems=Adicionar ícones personalizados aos itens oficiais do jogo [munição, receitas, kits, etc.] [Requer reinicialização] ModUi/&AddDarknessPerceptiveToDarkRaces=Habilitar Percepção da Escuridão em Elfo Escuro, Kobold Escuro e Anão Cinzento \n[concede vantagem em testes de percepção quando apagado ou sob escuridão mágica] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Adicione modificador de DEX aos inimigos Teste de Iniciativa +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Adicione Ordem Primordial no nível 1 e remova Proficiência em Armadura Média ModUi/&AddFighterLevelToIndomitableSavingReroll=Adicione o nível de classe como um bônus para a nova jogada de resistência de Resistência Indomável ModUi/&AddHumanoidFavoredEnemyToRanger=Habilitar inimigos preferenciais Humanoides ModUi/&AddNewWeaponsAndRecipesToShops=Adicionar novas armas e receitas às lojas [bandagens de mão, alabardas, lanças, maças longas, bestas de mão] [Requer reinicialização] @@ -303,6 +304,7 @@ ModUi/&Subclasses=Subclasses ModUi/&Subraces=Sub-raças ModUi/&SwapAbjurationSavant=Troque Abjurador Sábio da Abjuração pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] ModUi/&SwapCraftedItemAndRecipeIcons=+ Troque ícones de receitas e itens criados na lojaModUi/&SwapEvocationSavant=Troque Evocador Sábio da Evocação pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] +ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Troque Proficiência em Arma pela versão 5e 2024 [armas simples em vez de tipos de armas, mas você perde a proficiência em Cimitarra] ModUi/&SwapEvocationPotentCantripAndSculptSpell=Troque os recursos Evocador Magias de Esculpir e Truque Potente ModUi/&SwapEvocationSavant=Troque Evocador Sábio da Evocação pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Troque Ataque Desarmado para usar a progressão do tipo de dado 5e 2024 diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 1ef0eab4fe..a5761a3a0c 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -106,6 +106,12 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=Улучшенный Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=Дополнительный урон от Жестокого удара увеличивается до 2d10. Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Улучшенный жестокий удар Feature/&FeatureSetBarbarianBrutalStrikeTitle=Жестокий удар +Feature/&FeatureSetDruidPrimalOrderDescription=Вы посвятили себя одной из следующих священных ролей по вашему выбору.\n• Маг. Вы знаете один дополнительный заговор из списка заклинаний друида. Кроме того, ваша мистическая связь с природой дает вам бонус к проверкам Интеллекта (Магия или Природа). Бонус равен 1D6.\n• Страж. Обученный битве, вы приобретаете мастерство владения боевым оружием и тренировку со средней броней. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Вы знаете один дополнительный фокус из списка заклинаний Друида. Кроме того, ваша мистическая связь с природой дает вам бонус к проверкам Интеллекта (Магия или Природа). Бонус равен 1D6. +Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Волшебник +Feature/&FeatureSetDruidPrimalOrderTitle=Первоначальный порядок +Feature/&FeatureSetDruidPrimalOrderWardenDescription=Пройдя подготовку к бою, вы приобретаете навыки владения боевым оружием и учитесь носить средние доспехи. +Feature/&FeatureSetDruidPrimalOrderWardenTitle=Надзиратель Feature/&FeatureSetRageExtendedDescription=В бою вы сражаетесь с первобытной свирепостью. В свой ход вы можете бонусным действием войти в состояние ярости. В состоянии ярости вы получаете следующие преимущества, если не носите тяжёлую броню:\n• Вы совершаете с преимуществом проверки и спасброски Силы.\n• Если вы совершаете рукопашную атаку оружием, используя Силу, вы получаете бонус к броску урона, изначально равный +2, этот урон растёт с уровнем.\n• Вы получаете сопротивление дробящему, колющему и рубящему урону.\n Ваша ярость длится 1 минуту. Она прекращается раньше, если вы потеряли сознание или если вы закончили свой ход, не получив урон или не атаковав враждебное по отношению к вам существо с момента окончания вашего прошлого хода.\n Вы начинаете с двумя использованиями Ярости, восстанавливающимися после продолжительного отдыха. На уровне 7 вы восстанавливаете одно использование Ярости после завершения короткого отдыха. Feature/&FeatureSorcererMagicalGuidanceDescription=Вы можете использовать свой внутренний источник магии, чтобы попытаться обратить неудачу в успех. Когда вы совершаете проверку характеристики и проваливаете её, вы можете потратить 1 единицу чародейства, чтобы перебросить d20, потенциально превращая провал в успех, но должны использовать новый бросок. Feature/&FeatureSorcererMagicalGuidanceTitle=Волшебное указание diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index b3cc151ab3..391fc70386 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Добавить Крово ModUi/&AddCustomIconsToOfficialItems=Добавить кастомные значки к официальным игровым предметам [боеприпасы, рецепты, наборы и т.д.] [Необходим перезапуск] ModUi/&AddDarknessPerceptiveToDarkRaces=Включить Восприятие тьмы для рас Тёмных эльфов, Тёмных кобольдов и Серых дварфов \n[даёт преимущество при проверках восприятия, когда персонаж не на свету или находится в магической темноте] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Добавлять модификатор Ловкости к броскам Инициативы противников +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Добавьте Первобытный порядок на уровне 1 и удалите Среднее владение броней ModUi/&AddFighterLevelToIndomitableSavingReroll=Добавлять уровень класса к повторным спасброскам умения Упорный ModUi/&AddHumanoidFavoredEnemyToRanger=Включить Гуманоидов в список предпочтительных противников ModUi/&AddNewWeaponsAndRecipesToShops=Добавить новые оружия и рецепты в магазины [обмотки, алебарды, пики, длинные булавы, ручные арбалеты] [Необходим перезапуск] @@ -303,6 +304,7 @@ ModUi/&Subclasses=Архетипы ModUi/&Subraces=Подрасы ModUi/&SwapAbjurationSavant=Поменяйте Abjurer Abjuration Savant на версию 5e 2024 [изучите 2 школьных заклинания при получении, изучайте еще 1 каждый раз, когда получаете уровень слота] ModUi/&SwapCraftedItemAndRecipeIcons=+ Заменить значок рецепта значком создаваемого предмета в магазинеModUi/&SwapEvocationSavant=Замените Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] +ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Поменяйте Владение оружием на версию 5e 2024 [простое оружие вместо типов оружия, но вы теряете владение ятаганом] ModUi/&SwapEvocationPotentCantripAndSculptSpell=Поменяйте местами функции Evoker Sculpt Spells и Potent Cantrip ModUi/&SwapEvocationSavant=Замените Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Поменяйте Безоружная атака на использование прогрессии типа кубика 5e 2024 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index f5c1876b8c..01e5b550b4 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -106,6 +106,12 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=精通凶蛮打击 Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=你的凶蛮打击造成的额外伤害提升至 2d10。 Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=精通凶蛮打击 Feature/&FeatureSetBarbarianBrutalStrikeTitle=凶蛮打击 +Feature/&FeatureSetDruidPrimalOrderDescription=您已将自己献身于以下您选择的神圣角色之一。\n• 魔法师。您从德鲁伊法术列表中多掌握一个法术。此外,您与自然的神秘联系为您的智力(奥术或自然)检定带来加值。加值等于 1D6。\n• 守望者。您接受过战斗训练,能够熟练使用军用武器并接受过中型盔甲训练。 +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=你从德鲁伊法术列表中多掌握一个法术。此外,你与自然的神秘联系为你的智力(奥术或自然)检定带来加值。加值等于 1D6。 +Feature/&FeatureSetDruidPrimalOrderMagicianTitle=魔术师 +Feature/&FeatureSetDruidPrimalOrderTitle=原始秩序 +Feature/&FeatureSetDruidPrimalOrderWardenDescription=经过战斗训练,您可以熟练使用军用武器并接受中型盔甲训练。 +Feature/&FeatureSetDruidPrimalOrderWardenTitle=典狱长 Feature/&FeatureSetRageExtendedDescription=在战斗中,你会以原始的凶猛进行战斗。在你的回合中,你可以输入狂怒作为附赠动作。这使你在力量豁免和检定上获得优势,近战攻击伤害初始 +2 加值,以及对挥砍、钝击和穿刺伤害的抗性。仅当你不穿着重甲时你才能获得这些好处。持续 1 分钟,如果自上回合以来你没有攻击或受到伤害,则结束。\n你以 2 点怒气开始,在长休后恢复。 7 级时,短休后你会恢复 1 点怒气。 Feature/&FeatureSorcererMagicalGuidanceDescription=你可以利用你内在的魔法源泉,尝试从失败中变出成功。当你的属性检定失败时,你可以花费 1 个术法点来重掷 d20,并且你必须使用新的掷骰结果,有可能将失败变成成功。 Feature/&FeatureSorcererMagicalGuidanceTitle=魔法指引 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 4be308328b..3d8a59d930 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=将出血状况添 ModUi/&AddCustomIconsToOfficialItems=为官方游戏物品添加自定义图标[弹药、配方、工具包等] [需要重启] ModUi/&AddDarknessPerceptiveToDarkRaces=对暗精灵、黑暗狗头人和灰矮人启用黑暗感知 \n[在无光或在魔法黑暗下时在感知检查上获得优势] ModUi/&AddDexModifierToEnemiesInitiativeRoll=为敌人添加 DEX 修正值主动掷骰 +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=在 1 级添加 原始秩序 并移除 中等护甲熟练度 ModUi/&AddFighterLevelToIndomitableSavingReroll=将职业等级作为奖励添加到不屈抵抗豁免检定重掷中 ModUi/&AddHumanoidFavoredEnemyToRanger=启用人形首选敌人 ModUi/&AddNewWeaponsAndRecipesToShops=在商店中添加新武器和配方[手套、戟、长矛、长锤、手弩] [需要重启] @@ -303,6 +304,7 @@ ModUi/&Subclasses=子类 ModUi/&Subraces=亚种 ModUi/&SwapAbjurationSavant=将Abjurer Abjuration Savant 与 5e 2024 版本交换[获得时学习 2 个学校法术,每次获得一个插槽等级时再学习 1 个] ModUi/&SwapCraftedItemAndRecipeIcons=+ 在商店中交换配方和制作物品图标ModUi/&SwapEvocationSavant=将Evoker Evocation Savant 与 5e 2024 版本交换[获得时学习 2 个学校法术,每次获得一个插槽等级时再学习 1 个] +ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=将武器熟练度与 5e 2024 版本交换[简单武器代替武器类型,但失去弯刀熟练度] ModUi/&SwapEvocationPotentCantripAndSculptSpell=交换召唤师 塑形法术和强力法术功能 ModUi/&SwapEvocationSavant=将Evoker Evocation Savant 与 5e 2024 版本交换[获得时学习 2 个学校法术,每次获得一个插槽等级时再学习 1 个] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=切换徒手攻击以使用 5e 2024 骰子类型进程 From 70362b9f728877f6902256972fe733209d332bfe Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 2 Nov 2024 16:04:58 -0700 Subject: [PATCH 30/85] minor clean up --- .../PowerRangerNatureShroud.json | 4 +- .../PowerWizardAbjurationCounterDispel.json | 220 +++-------------- .../PowerWizardAbjurationCounterSpell.json | 222 +++--------------- .../Subclasses/WizardGraviturgist.cs | 4 +- 4 files changed, 71 insertions(+), 379 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRangerNatureShroud.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRangerNatureShroud.json index 6f0114a049..d6dda36ab2 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRangerNatureShroud.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRangerNatureShroud.json @@ -311,9 +311,9 @@ "rechargeRate": "LongRest", "costPerUse": 1, "spellcastingFeature": null, - "usesDetermination": "ProficiencyBonus", + "usesDetermination": "AbilityBonusPlusFixed", "abilityScoreDetermination": "Explicit", - "usesAbilityScoreName": "Charisma", + "usesAbilityScoreName": "Wisdom", "fixedUsesPerRecharge": 0, "abilityScore": "Intelligence", "attackHitComputation": "AbilityScore", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardAbjurationCounterDispel.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardAbjurationCounterDispel.json index 61020784fb..cd049fcf3b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardAbjurationCounterDispel.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardAbjurationCounterDispel.json @@ -2,11 +2,11 @@ "$type": "FeatureDefinitionPower, Assembly-CSharp", "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Distance", - "rangeParameter": 24, + "rangeType": "Self", + "rangeParameter": 0, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], - "targetType": "IndividualsUnique", + "targetType": "Self", "itemSelectionType": "Equiped", "targetParameter": 1, "targetParameter2": 2, @@ -17,7 +17,7 @@ "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "CharacterGadgetEffectProxyItems", + "targetFilteringMethod": "AllCharacterAndGadgets", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, @@ -30,7 +30,7 @@ "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, - "targetSide": "All", + "targetSide": "Enemy", "durationType": "Instantaneous", "durationParameter": 1, "endOfEffect": "EndOfTurn", @@ -41,7 +41,7 @@ "grantedConditionOnSave": null, "rollSaveOnlyIfRelevantForms": false, "hasShoveRoll": false, - "createdByCharacter": true, + "createdByCharacter": false, "difficultyClassComputation": "SpellCastingFeature", "savingThrowDifficultyAbility": "Wisdom", "fixedSavingThrowDifficultyClass": 15, @@ -60,36 +60,7 @@ "effectPoolAmount": 60, "effectApplication": "All", "effectFormFilters": [], - "effectForms": [ - { - "$type": "EffectForm, Assembly-CSharp", - "formType": "Counter", - "addBonusMode": "None", - "applyLevel": "No", - "levelType": "ClassLevel", - "levelMultiplier": 1, - "diceByLevelTable": [], - "createdByCharacter": true, - "createdByCondition": false, - "hasSavingThrow": false, - "savingThrowAffinity": "None", - "dcModifier": 0, - "canSaveToCancel": false, - "saveOccurence": "EndOfTurn", - "counterForm": { - "$type": "CounterForm, Assembly-CSharp", - "type": "DissipateSpells", - "automaticSpellLevel": 3, - "checkBaseDC": 10, - "addSpellCastingAbility": true, - "addProficiencyBonus": true, - "addAbilityBonus": false, - "abilityToAdd": "" - }, - "hasFilterId": false, - "filterId": 0 - } - ], + "effectForms": [], "specialFormsDescription": "", "effectAdvancement": { "$type": "EffectAdvancement, Assembly-CSharp", @@ -114,158 +85,33 @@ "offsetImpactTimePerTarget": 0.0, "effectParticleParameters": { "$type": "EffectParticleParameters, Assembly-CSharp", - "casterParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "a6ca7038401125c4096926082f9acb33", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "casterSelfParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "6a8b8119774067740a6895a72319a60d", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "casterQuickSpellParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "targetParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "effectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "21e21b4d608aa6b4ea89119fc05c9e56", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "effectSubTargetParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "zoneParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "beforeImpactParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "impactParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectImpactParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectCellStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectCellParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectCellEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectSurfaceStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectSurfaceParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectSurfaceEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, + "casterParticleReference": null, + "casterSelfParticleReference": null, + "casterQuickSpellParticleReference": null, + "targetParticleReference": null, + "effectParticleReference": null, + "effectSubTargetParticleReference": null, + "zoneParticleReference": null, + "beforeImpactParticleReference": null, + "impactParticleReference": null, + "activeEffectImpactParticleReference": null, + "activeEffectCellStartParticleReference": null, + "activeEffectCellParticleReference": null, + "activeEffectCellEndParticleReference": null, + "activeEffectSurfaceStartParticleReference": null, + "activeEffectSurfaceParticleReference": null, + "activeEffectSurfaceEndParticleReference": null, "activeEffectSurfaceParticlePerIndex": "", "activeEffectSurfaceParticlePerIndexCount": 0, - "emissiveBorderCellStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderCellParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderCellEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderSurfaceStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderSurfaceParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderSurfaceEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "conditionStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "conditionParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "conditionEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, + "emissiveBorderCellStartParticleReference": null, + "emissiveBorderCellParticleReference": null, + "emissiveBorderCellEndParticleReference": null, + "emissiveBorderSurfaceStartParticleReference": null, + "emissiveBorderSurfaceParticleReference": null, + "emissiveBorderSurfaceEndParticleReference": null, + "conditionStartParticleReference": null, + "conditionParticleReference": null, + "conditionEndParticleReference": null, "forceApplyZoneParticle": false, "applyEmissionColorOnWeapons": false, "emissionColor": { @@ -309,7 +155,7 @@ "canUseInDialog": false, "disableIfConditionIsOwned": null, "disableIfTargetConditionIsOwned": null, - "rechargeRate": "ShortRest", + "rechargeRate": "AtWill", "costPerUse": 1, "spellcastingFeature": null, "usesDetermination": "Fixed", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardAbjurationCounterSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardAbjurationCounterSpell.json index 7db555f1a4..314fd466e8 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardAbjurationCounterSpell.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWizardAbjurationCounterSpell.json @@ -2,12 +2,12 @@ "$type": "FeatureDefinitionPower, Assembly-CSharp", "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Distance", - "rangeParameter": 12, + "rangeType": "Self", + "rangeParameter": 0, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], - "targetType": "IndividualsUnique", - "itemSelectionType": "None", + "targetType": "Self", + "itemSelectionType": "Equiped", "targetParameter": 1, "targetParameter2": 2, "emissiveBorder": "None", @@ -17,7 +17,7 @@ "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "CharacterOnly", + "targetFilteringMethod": "AllCharacterAndGadgets", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, @@ -41,7 +41,7 @@ "grantedConditionOnSave": null, "rollSaveOnlyIfRelevantForms": false, "hasShoveRoll": false, - "createdByCharacter": true, + "createdByCharacter": false, "difficultyClassComputation": "SpellCastingFeature", "savingThrowDifficultyAbility": "Wisdom", "fixedSavingThrowDifficultyClass": 15, @@ -60,36 +60,7 @@ "effectPoolAmount": 60, "effectApplication": "All", "effectFormFilters": [], - "effectForms": [ - { - "$type": "EffectForm, Assembly-CSharp", - "formType": "Counter", - "addBonusMode": "None", - "applyLevel": "No", - "levelType": "ClassLevel", - "levelMultiplier": 1, - "diceByLevelTable": [], - "createdByCharacter": true, - "createdByCondition": false, - "hasSavingThrow": false, - "savingThrowAffinity": "None", - "dcModifier": 0, - "canSaveToCancel": false, - "saveOccurence": "EndOfTurn", - "counterForm": { - "$type": "CounterForm, Assembly-CSharp", - "type": "InterruptSpellcasting", - "automaticSpellLevel": 3, - "checkBaseDC": 10, - "addSpellCastingAbility": true, - "addProficiencyBonus": true, - "addAbilityBonus": false, - "abilityToAdd": "" - }, - "hasFilterId": false, - "filterId": 0 - } - ], + "effectForms": [], "specialFormsDescription": "", "effectAdvancement": { "$type": "EffectAdvancement, Assembly-CSharp", @@ -114,158 +85,33 @@ "offsetImpactTimePerTarget": 0.0, "effectParticleParameters": { "$type": "EffectParticleParameters, Assembly-CSharp", - "casterParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "2987ab28a75b4b9488822c04bf2c7833", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "casterSelfParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "casterQuickSpellParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "targetParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "effectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "effectSubTargetParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "zoneParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "ee0bbc9c177ea3b4e9440e87dbb3f77e", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "beforeImpactParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "impactParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "f93c33eb8373a334abc48b2bdbe12ed4", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectImpactParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectCellStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectCellParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectCellEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectSurfaceStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectSurfaceParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectSurfaceEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, + "casterParticleReference": null, + "casterSelfParticleReference": null, + "casterQuickSpellParticleReference": null, + "targetParticleReference": null, + "effectParticleReference": null, + "effectSubTargetParticleReference": null, + "zoneParticleReference": null, + "beforeImpactParticleReference": null, + "impactParticleReference": null, + "activeEffectImpactParticleReference": null, + "activeEffectCellStartParticleReference": null, + "activeEffectCellParticleReference": null, + "activeEffectCellEndParticleReference": null, + "activeEffectSurfaceStartParticleReference": null, + "activeEffectSurfaceParticleReference": null, + "activeEffectSurfaceEndParticleReference": null, "activeEffectSurfaceParticlePerIndex": "", "activeEffectSurfaceParticlePerIndexCount": 0, - "emissiveBorderCellStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderCellParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderCellEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderSurfaceStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderSurfaceParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderSurfaceEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "conditionStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "conditionParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "conditionEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, + "emissiveBorderCellStartParticleReference": null, + "emissiveBorderCellParticleReference": null, + "emissiveBorderCellEndParticleReference": null, + "emissiveBorderSurfaceStartParticleReference": null, + "emissiveBorderSurfaceParticleReference": null, + "emissiveBorderSurfaceEndParticleReference": null, + "conditionStartParticleReference": null, + "conditionParticleReference": null, + "conditionEndParticleReference": null, "forceApplyZoneParticle": false, "applyEmissionColorOnWeapons": false, "emissionColor": { @@ -293,7 +139,7 @@ "delegatedToAction": false, "surrogateToSpell": null, "triggeredBySpecialMove": false, - "activationTime": "Reaction", + "activationTime": "Action", "autoActivationRequiredTargetSenseType": "None", "autoActivationRequiredTargetCreatureTag": "", "autoActivationPowerTag": "", @@ -309,7 +155,7 @@ "canUseInDialog": false, "disableIfConditionIsOwned": null, "disableIfTargetConditionIsOwned": null, - "rechargeRate": "ShortRest", + "rechargeRate": "AtWill", "costPerUse": 1, "spellcastingFeature": null, "usesDetermination": "Fixed", diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardGraviturgist.cs b/SolastaUnfinishedBusiness/Subclasses/WizardGraviturgist.cs index 4652511372..ad9f8f2567 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardGraviturgist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardGraviturgist.cs @@ -142,7 +142,7 @@ public WizardGraviturgist() .SetGuiPresentationNoContent(true) .SetAuthorizedActions((ActionDefinitions.Id)ExtraActionId.GravityWellToggle) .AddToDB(); - + var powerGravityWell = FeatureDefinitionPowerBuilder .Create($"Power{Name}GravityWell") .SetGuiPresentation(Category.Feature) @@ -159,7 +159,7 @@ public WizardGraviturgist() .Build()) .Build()) .AddCustomSubFeatures(new ValidatorsValidatePowerUse(c => - c.IsToggleEnabled((ActionDefinitions.Id)ExtraActionId.OverChannelToggle))) + c.IsToggleEnabled((ActionDefinitions.Id)ExtraActionId.OverChannelToggle))) .AddToDB(); // LEVEL 10 From 4e5830916c2c0c6d46719be43ee9598e9ef1da43 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 2 Nov 2024 17:12:38 -0700 Subject: [PATCH 31/85] add Sorcerer Innate Sorcery --- .../UnfinishedBusinessBlueprints/Assets.txt | 6 + .../ConditionSorcererInnateSorcery.json | 157 ++++++++ .../MagicAffinitySorcererInnateSorcery.json | 80 ++++ .../PowerSorcererInnateSorcery.json | 355 ++++++++++++++++++ .../ChangelogHistory.txt | 6 +- .../Displays/ClassesDisplay.cs | 7 + .../Displays/GeneralDisplay.cs | 11 + .../Models/CharacterContext.cs | 38 ++ SolastaUnfinishedBusiness/Settings.cs | 1 + .../Translations/de/Others-de.txt | 4 + .../Translations/de/Settings-de.txt | 1 + .../Translations/en/Others-en.txt | 4 + .../Translations/en/Settings-en.txt | 7 +- .../Translations/es/Others-es.txt | 4 + .../Translations/es/Settings-es.txt | 1 + .../Translations/fr/Others-fr.txt | 4 + .../Translations/fr/Settings-fr.txt | 1 + .../Translations/it/Others-it.txt | 4 + .../Translations/it/Settings-it.txt | 1 + .../Translations/ja/Others-ja.txt | 4 + .../Translations/ja/Settings-ja.txt | 1 + .../Translations/ko/Others-ko.txt | 4 + .../Translations/ko/Settings-ko.txt | 1 + .../Translations/pt-BR/Others-pt-BR.txt | 4 + .../Translations/pt-BR/Settings-pt-BR.txt | 1 + .../Translations/ru/Others-ru.txt | 4 + .../Translations/ru/Settings-ru.txt | 1 + .../Translations/zh-CN/Others-zh-CN.txt | 4 + .../Translations/zh-CN/Settings-zh-CN.txt | 1 + 29 files changed, 712 insertions(+), 5 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererInnateSorcery.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionMagicAffinity/MagicAffinitySorcererInnateSorcery.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcererInnateSorcery.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 6e4f3c0985..67e3a4936b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -1163,6 +1163,7 @@ ConditionSickeningRadianceExhausted5 ConditionDefinition ConditionDefinition edd ConditionSickeningRadianceMark ConditionDefinition ConditionDefinition e7c8bace-e63a-541f-a8a1-74ef61590f5a ConditionSignatureSpells ConditionDefinition ConditionDefinition 7d490159-e05b-5c67-ab55-1763b1188d63 ConditionSkinOfRetribution ConditionDefinition ConditionDefinition 756ee728-5506-5f03-b552-b94004839697 +ConditionSorcererInnateSorcery ConditionDefinition ConditionDefinition 46acd2cd-23a7-5de2-ae49-f58fe443f95e ConditionSorcererQuickenedCastMain ConditionDefinition ConditionDefinition fcc009a6-3b9b-513a-865f-ed6c5e37bfdf ConditionSorcerousSorrAkkathBloodOfSorrAkkath ConditionDefinition ConditionDefinition dc2b991d-480d-56a3-8811-9dddcf7d32e5 ConditionSorcerousWildMagicChaos ConditionDefinition ConditionDefinition f4e35435-a9a4-5885-a484-933dcc257c9f @@ -2883,6 +2884,7 @@ MagicAffinityRangerArcanist FeatureDefinitionMagicAffinity FeatureDefinition 4b7 MagicAffinityRiftWalkerExpandedSpells FeatureDefinitionMagicAffinity FeatureDefinition 18a81672-abf4-557e-b8b8-9c8ead0e6545 MagicAffinityRoguishArcaneScoundrelGuilefulCasting FeatureDefinitionMagicAffinity FeatureDefinition f527511d-da26-5e82-bb1b-1385d658650e MagicAffinitySorcererChildRiftMagicMastery FeatureDefinitionMagicAffinity FeatureDefinition 18708d69-1ac6-5234-b497-a705bd1f8a73 +MagicAffinitySorcererInnateSorcery FeatureDefinitionMagicAffinity FeatureDefinition a60b8174-62f9-5fed-9457-e078db2d6815 MagicAffinitySorcerousFieldManipulatorArcaneManipulation FeatureDefinitionMagicAffinity FeatureDefinition a354d041-96dd-5982-8633-5506050a82cc MagicAffinitySorcerousSorrAkkathDarknessAffinity FeatureDefinitionMagicAffinity FeatureDefinition 33563ac8-6f69-52ba-bd14-2c28e3f792fd MagicAffinitySoulBladeExpandedSpells FeatureDefinitionMagicAffinity FeatureDefinition 3ccab35a-8074-5d5e-b5ab-4f278f9f5fd2 @@ -3892,6 +3894,7 @@ PowerSorcererDraconicBloodlineAweOrFearPresence FeatureDefinitionPower FeatureDe PowerSorcererDraconicBloodlineAwePresence FeatureDefinitionPowerSharedPool FeatureDefinition 09931585-27de-5a10-98b4-3a6f55d39bd3 PowerSorcererDraconicBloodlineFearPresence FeatureDefinitionPowerSharedPool FeatureDefinition c31634e0-3835-536d-862d-1239c6275d0d PowerSorcererHauntedSoulPossession FeatureDefinitionPower FeatureDefinition 16bb8bd8-a7fa-5f1d-a549-4caef1f84b2f +PowerSorcererInnateSorcery FeatureDefinitionPower FeatureDefinition 430973a2-776a-552e-b1ef-db8a94f16535 PowerSorcererManaPainterManaOverflow FeatureDefinitionPower FeatureDefinition 80a079bf-e75f-50eb-a663-f6e823b38315 PowerSorcererSorcerousRestoration FeatureDefinitionPower FeatureDefinition bf26017f-af9f-564c-a1fe-8c26eded1cdc PowerSorcerousFieldManipulatorDisplacement FeatureDefinitionPower FeatureDefinition 164244c9-e119-530c-bfef-3c9b33618f9e @@ -4910,6 +4913,7 @@ MagicAffinityRangerArcanist FeatureDefinitionMagicAffinity FeatureDefinitionAffi MagicAffinityRiftWalkerExpandedSpells FeatureDefinitionMagicAffinity FeatureDefinitionAffinity 18a81672-abf4-557e-b8b8-9c8ead0e6545 MagicAffinityRoguishArcaneScoundrelGuilefulCasting FeatureDefinitionMagicAffinity FeatureDefinitionAffinity f527511d-da26-5e82-bb1b-1385d658650e MagicAffinitySorcererChildRiftMagicMastery FeatureDefinitionMagicAffinity FeatureDefinitionAffinity 18708d69-1ac6-5234-b497-a705bd1f8a73 +MagicAffinitySorcererInnateSorcery FeatureDefinitionMagicAffinity FeatureDefinitionAffinity a60b8174-62f9-5fed-9457-e078db2d6815 MagicAffinitySorcerousFieldManipulatorArcaneManipulation FeatureDefinitionMagicAffinity FeatureDefinitionAffinity a354d041-96dd-5982-8633-5506050a82cc MagicAffinitySorcerousSorrAkkathDarknessAffinity FeatureDefinitionMagicAffinity FeatureDefinitionAffinity 33563ac8-6f69-52ba-bd14-2c28e3f792fd MagicAffinitySoulBladeExpandedSpells FeatureDefinitionMagicAffinity FeatureDefinitionAffinity 3ccab35a-8074-5d5e-b5ab-4f278f9f5fd2 @@ -5726,6 +5730,7 @@ MagicAffinityRangerArcanist FeatureDefinitionMagicAffinity FeatureDefinitionMagi MagicAffinityRiftWalkerExpandedSpells FeatureDefinitionMagicAffinity FeatureDefinitionMagicAffinity 18a81672-abf4-557e-b8b8-9c8ead0e6545 MagicAffinityRoguishArcaneScoundrelGuilefulCasting FeatureDefinitionMagicAffinity FeatureDefinitionMagicAffinity f527511d-da26-5e82-bb1b-1385d658650e MagicAffinitySorcererChildRiftMagicMastery FeatureDefinitionMagicAffinity FeatureDefinitionMagicAffinity 18708d69-1ac6-5234-b497-a705bd1f8a73 +MagicAffinitySorcererInnateSorcery FeatureDefinitionMagicAffinity FeatureDefinitionMagicAffinity a60b8174-62f9-5fed-9457-e078db2d6815 MagicAffinitySorcerousFieldManipulatorArcaneManipulation FeatureDefinitionMagicAffinity FeatureDefinitionMagicAffinity a354d041-96dd-5982-8633-5506050a82cc MagicAffinitySorcerousSorrAkkathDarknessAffinity FeatureDefinitionMagicAffinity FeatureDefinitionMagicAffinity 33563ac8-6f69-52ba-bd14-2c28e3f792fd MagicAffinitySoulBladeExpandedSpells FeatureDefinitionMagicAffinity FeatureDefinitionMagicAffinity 3ccab35a-8074-5d5e-b5ab-4f278f9f5fd2 @@ -6746,6 +6751,7 @@ PowerSorcererDraconicBloodlineAweOrFearPresence FeatureDefinitionPower FeatureDe PowerSorcererDraconicBloodlineAwePresence FeatureDefinitionPowerSharedPool FeatureDefinitionPower 09931585-27de-5a10-98b4-3a6f55d39bd3 PowerSorcererDraconicBloodlineFearPresence FeatureDefinitionPowerSharedPool FeatureDefinitionPower c31634e0-3835-536d-862d-1239c6275d0d PowerSorcererHauntedSoulPossession FeatureDefinitionPower FeatureDefinitionPower 16bb8bd8-a7fa-5f1d-a549-4caef1f84b2f +PowerSorcererInnateSorcery FeatureDefinitionPower FeatureDefinitionPower 430973a2-776a-552e-b1ef-db8a94f16535 PowerSorcererManaPainterManaOverflow FeatureDefinitionPower FeatureDefinitionPower 80a079bf-e75f-50eb-a663-f6e823b38315 PowerSorcererSorcerousRestoration FeatureDefinitionPower FeatureDefinitionPower bf26017f-af9f-564c-a1fe-8c26eded1cdc PowerSorcerousFieldManipulatorDisplacement FeatureDefinitionPower FeatureDefinitionPower 164244c9-e119-530c-bfef-3c9b33618f9e diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererInnateSorcery.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererInnateSorcery.json new file mode 100644 index 0000000000..051cb12b2d --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererInnateSorcery.json @@ -0,0 +1,157 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:MagicAffinitySorcererInnateSorcery:a60b8174-62f9-5fed-9457-e078db2d6815" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "recurrentEffectParticleReference": null, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionSorcererInnateSorceryTitle", + "description": "Condition/&ConditionSorcererInnateSorceryDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "46acd2cd-23a7-5de2-ae49-f58fe443f95e", + "contentPack": 9999, + "name": "ConditionSorcererInnateSorcery" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionMagicAffinity/MagicAffinitySorcererInnateSorcery.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionMagicAffinity/MagicAffinitySorcererInnateSorcery.json new file mode 100644 index 0000000000..de6e6acb6a --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionMagicAffinity/MagicAffinitySorcererInnateSorcery.json @@ -0,0 +1,80 @@ +{ + "$type": "FeatureDefinitionMagicAffinity, Assembly-CSharp", + "preparedSpellModifier": "None", + "saveDCModifierType": "FlatValue", + "saveDCModifier": 1, + "spellAttackModifierType": "None", + "spellAttackModifier": 0, + "spellImmunities": [], + "maxSpellLevelImmunity": -1, + "concentrationAffinity": "None", + "overConcentrationThreshold": -1, + "castingAffinity": "Normal", + "spellcastingSuccessDC": 10, + "forceHalfDamageOnCantrips": false, + "cantripRetribution": false, + "forcedSavingThrowAffinity": "None", + "forcedSpellDefinition": null, + "impairedSpeech": false, + "somaticWithWeaponOrShield": false, + "somaticWithWeapon": false, + "canUseProficientWeaponAsFocus": false, + "rangeSpellNoProximityPenalty": false, + "targetSelfOverride": null, + "usesWarList": false, + "warListSlotBonus": 1, + "ritualCasting": "None", + "canLearnRitualScrolls": false, + "scribeAdvantageType": "None", + "scribeDurationMultiplier": 1.0, + "scribeCostMultiplier": 1.0, + "additionalScribedSpells": 0, + "additionalKnownSpellsCount": 0, + "warListSpells": [], + "counterspellAffinity": "None", + "spellsCounterAffinity": "None", + "extendedSpellList": null, + "addBonusToEffectSaveDC": "None", + "spellWithModifiedSaveDC": null, + "powerWithModifiedSaveDC": null, + "bonusToEffectSaveDC": 0, + "deviceTagsAutoIdentifying": [], + "autoIdentifyPossessedMagicalItems": false, + "ignoreClassRestrictionsOnMagicalItems": false, + "additionalSlots": [], + "metamagicOptions": [], + "preserveSlotRoll": false, + "preserveSlotThreshold": 20, + "preserveSlotLevelCap": 5, + "healingPerSpentSorceryPoint": 0, + "sorceryPointAlteredParticle": null, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "a60b8174-62f9-5fed-9457-e078db2d6815", + "contentPack": 9999, + "name": "MagicAffinitySorcererInnateSorcery" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcererInnateSorcery.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcererInnateSorcery.json new file mode 100644 index 0000000000..64353ccaa5 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcererInnateSorcery.json @@ -0,0 +1,355 @@ +{ + "$type": "FeatureDefinitionPower, Assembly-CSharp", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionSorcererInnateSorcery", + "conditionDefinition": "Definition:ConditionSorcererInnateSorcery:46acd2cd-23a7-5de2-ae49-f58fe443f95e", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "BonusAction", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "LongRest", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 2, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": false, + "showCasting": true, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerSorcererInnateSorceryTitle", + "description": "Feature/&PowerSorcererInnateSorceryDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "430973a2-776a-552e-b1ef-db8a94f16535", + "contentPack": 9999, + "name": "PowerSorcererInnateSorcery" +} \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 02a60a6340..a13d229041 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -4,20 +4,22 @@ - added Character > Classes > 'Add persuasion to Fighter skill options at level 1' [OneDnd] - added Character > Classes > 'Change Bard bardic inspiration duration to 1hr instead of 10 minutes' [OneDnd] - added Character > Classes > 'Enable Bard Expertise at levels 2 and 9 instead of 3 and 10' [OneDnd] -- added Character > Classes > 'Enable Ritual casting on all casters' [OneDnd] -- added Character > Classes > 'Enable Warlock magical cunning at level 2' [OneDnd] +- added Character > Classes > 'Enable Sorcerer innate sorcery at level 1' [OneDnd] +- added Character > Classes > 'Enable Warlock magical cunning at level 2' [OneDnd] - added Character > Classes > 'Remove Bard song of rest at level 2' [OneDnd] - added Character > Classes > 'Swap Druid weapon proficiency with 5e 2024 version' [OneDnd] - added Character > Classes > 'Swap Fighter second wind to use 5e 2024 usages progression' [OneDnd] - added Character > Classes > 'Swap Monk unarmed strike to use 5e 2024 die type progression' [OneDnd] - added Character > Classes > 'Swap Warlock invocations progression with 5e 2024 version' [OneDnd] - added Character > Spells > 'Enable all casters to use new prepared spells tables' [OneDnd] +- added Character > Spells > 'Enable Ritual casting on all casters' [OneDnd] - added Character > Spells > 'Swap Barkskin with 5e 2024 version' [OneDnd] - added Character > Subclasses > 'Swap Abjurer abjuration savant with 5e 2024 version' [OneDnd] - added Character > Subclasses > 'Swap Evoker evocation savant with 5e 2024 version' [OneDnd] - added Wizard Abjuration arcane ward recharge bonus action - added Wizard Graviturgist gravity well power toggle - fixed bardic inspiration on attack rolls not stacking with similar behaviors [VANILLA] +- fixed campaigns translator to avoid location titles and break campaigns - fixed Charmed by Hypnotic Pattern not getting considered on incapacitated checks [VANILLA] - fixed Circle of Wildfire spirit allowed actions when summoner is incapacitated - fixed recurrent effects interaction with immunity from proxies [VANILLA] diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index dbe617a41c..922aefe04c 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -332,6 +332,13 @@ internal static void DisplayClasses() UI.Label("" + Gui.Localize("Class/&SorcererTitle") + ":"); UI.Label(); + toggle = Main.Settings.EnableSorcererInnateSorcery; + if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcererInnateSorcery"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableSorcererInnateSorcery = toggle; + CharacterContext.SwitchSorcererInnateSorcery(); + } + toggle = Main.Settings.EnableSorcererMagicalGuidance; if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcererMagicalGuidance"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index d2cab8d144..366243a056 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -479,6 +479,17 @@ private static void DisplayOneDnd() CharacterContext.SwitchRogueBlindSense(); } + UI.Label(); + UI.Label("" + Gui.Localize("Class/&SorcererTitle") + ":"); + UI.Label(); + + toggle = Main.Settings.EnableSorcererInnateSorcery; + if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcererInnateSorcery"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableSorcererInnateSorcery = toggle; + CharacterContext.SwitchSorcererInnateSorcery(); + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&WarlockTitle") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index 4fa643d6e4..f1183f2b74 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -187,6 +187,29 @@ internal static partial class CharacterContext .Build()) .AddToDB(); + private static readonly FeatureDefinitionPower PowerSorcererInnateSorcery = FeatureDefinitionPowerBuilder + .Create("PowerSorcererInnateSorcery") + .SetGuiPresentation(Category.Feature) + .SetUsesFixed(ActivationTime.BonusAction, RechargeRate.LongRest, 1, 2) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) + .SetEffectForms(EffectFormBuilder.ConditionForm( + ConditionDefinitionBuilder + .Create("ConditionSorcererInnateSorcery") + .SetGuiPresentation(Category.Condition) + .SetFeatures( + FeatureDefinitionMagicAffinityBuilder + .Create("MagicAffinitySorcererInnateSorcery") + .SetGuiPresentationNoContent(true) + .SetCastingModifiers(0, SpellParamsModifierType.None, 1) + .AddToDB()) + .AddToDB())) + .Build()) + .AddToDB(); + private static int PreviousTotalFeatsGrantedFirstLevel { get; set; } = -1; private static bool PreviousAlternateHuman { get; set; } @@ -965,6 +988,21 @@ private static void SwitchRangerToUseCustomInvocationPools() rangerSurvivalist.FeatureUnlocks.SetRange(replacedFeatures); } + internal static void SwitchSorcererInnateSorcery() + { + if (Main.Settings.EnableSorcererInnateSorcery) + { + Sorcerer.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(PowerSorcererInnateSorcery, 1)); + } + else + { + Sorcerer.FeatureUnlocks.RemoveAll(x => + x.level == 1 && x.FeatureDefinition == PowerSorcererInnateSorcery); + } + + Sorcerer.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + internal static void SwitchSorcererMagicalGuidance() { if (Main.Settings.EnableSorcererMagicalGuidance) diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 5232ab2ac0..c791c19317 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -297,6 +297,7 @@ public class Settings : UnityModManager.ModSettings public bool EnableRogueFightingStyle { get; set; } public bool EnableRogueSteadyAim { get; set; } public bool RemoveRogueBlindSense { get; set; } + public bool EnableSorcererInnateSorcery { get; set; } public bool EnableSorcererMagicalGuidance { get; set; } public bool EnableSorcererQuickenedAction { get; set; } public bool HideQuickenedActionWhenMetamagicOff { get; set; } diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 701a295406..d7e0c2c527 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -52,6 +52,8 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=Grappling Condition/&ConditionGrappleSourceWithGrapplerTitle=Grappling Condition/&ConditionGrappleTargetDescription=Ihre Geschwindigkeit wird auf Null reduziert. Condition/&ConditionGrappleTargetTitle=Gepackt +Condition/&ConditionSorcererInnateSorceryDescription=+1 Zauberrettungs-SG und Vorteil bei Zauberangriffswürfen. +Condition/&ConditionSorcererInnateSorceryTitle=Angeborene Zauberei Condition/&ConditionLightSensitivityDescription=Sie haben einen Nachteil bei Weisheitswürfen (Wahrnehmung) bei hellem Licht und erleiden einen Malus von -1W4 bei Angriffswürfen. Condition/&ConditionLightSensitivityTitle=Lichtempfindlichkeit Condition/&ConditionLightlyObscuredDescription=Die Sicht ist leicht getrübt. Nachteil bei Rettungswürfen für Weisheit (Wahrnehmung). @@ -185,6 +187,8 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=Ausschlagen Feature/&PowerRogueDeviousStrikeObscureDescription=Das Ziel muss einen Rettungswurf für Geschicklichkeit bestehen oder ist bis zum Ende seines nächsten Zuges geblendet. Feature/&PowerRogueDeviousStrikeObscureTitle=Obskur Feature/&PowerRogueDeviousStrikeTitle=Hinterhältiger Schlag +Feature/&PowerSorcererInnateSorceryDescription=Als Bonusaktion können Sie diese Magie 1 Minute lang entfesseln, wobei Sie die folgenden Vorteile erlangen:\n•Der Rettungswurf-SG Ihrer Zaubererzauber erhöht sich um 1.\n•Sie haben einen Vorteil bei den Angriffswürfen der Zaubererzauber, die Sie wirken.\n•Sie können diese Funktion zweimal verwenden und erhalten alle verbrauchten Anwendungen zurück, wenn Sie eine Lange Rast beenden. +Feature/&PowerSorcererInnateSorceryTitle=Angeborene Zauberei Feature/&PowerTeleportSummonDescription=Sie können sich an jeden Ort im Umkreis von 1,5 m um den Zauberer teleportieren. Feature/&PowerTeleportSummonTitle=Teleport Feature/&PowerVanishSummonDescription=Sie können Ihre Beschwörung verschwinden lassen. diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 2d38bdf355..7c9ffbd21e 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -161,6 +161,7 @@ ModUi/&EnableRogueFightingStyle=Aktiviere die Auswahl KampfstilZielen ohne Unterbrechung auf Stufe 3 [Bonusaktion verschafft einen Vorteil bei Ihrem nächsten Angriffswurf in der aktuellen Runde, wenn Sie sich noch nicht bewegt haben] ModUi/&EnableRogueStrSaving=Aktivieren Sie Hoodlum DEX- oder STR-Modifikatoren bei Cunning/Devious Strike ModUi/&EnableSignatureSpellsRelearn=Aktiviere, dass Signaturzauber bei jeder langen Pause vorbereitet werden [statt einmal auf Stufe 20] +ModUi/&EnableSorcererInnateSorcery=Aktiviere Angeborene Zauberei auf Stufe 1. ModUi/&EnableSorcererMagicalGuidance=Aktiviere Magische Führung auf Stufe 5. ModUi/&EnableSorcererQuickenedAction=Aktivieren Sie die Aktion Beschleunigter Zauber, um das Wirken des Hauptaktionszaubers mit angewandter beschleunigter Metamagie zu ermöglichen. ModUi/&EnableSortingDungeonMakerAssets=Aktivieren Sie die Sortierung von Assets im Dungeon Maker-Editor. diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 586574bc6c..849ba82cc3 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -52,6 +52,8 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=Grappling Condition/&ConditionGrappleSourceWithGrapplerTitle=Grappling Condition/&ConditionGrappleTargetDescription=Your speed is reduced to zero. Condition/&ConditionGrappleTargetTitle=Grappled +Condition/&ConditionSorcererInnateSorceryDescription=+1 spell save DC and advantage on spell attack rolls. +Condition/&ConditionSorcererInnateSorceryTitle=Innate Sorcery Condition/&ConditionLightSensitivityDescription=You have Disadvantage on Wisdom (Perception) checks in bright light and suffers a -1d4 penalty on attack rolls. Condition/&ConditionLightSensitivityTitle=Light Sensitivity Condition/&ConditionLightlyObscuredDescription=Vision is lightly obscured. Disadvantage on wisdom (perception) saving throws. @@ -185,6 +187,8 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=Knock Out Feature/&PowerRogueDeviousStrikeObscureDescription=The target must succeed on a Dexterity saving throw, or be blinded until end of its next turn. Feature/&PowerRogueDeviousStrikeObscureTitle=Obscure Feature/&PowerRogueDeviousStrikeTitle=Devious Strike +Feature/&PowerSorcererInnateSorceryDescription=As a Bonus Action, you can unleash that magic for 1 minute, during which you gain the following benefits:\n•The spell save DC of your Sorcerer spells increases by 1.\n•You have Advantage on the attack rolls of Sorcerer spells you cast.\n•You can use this feature twice, and you regain all expended uses of it when you finish a Long Rest. +Feature/&PowerSorcererInnateSorceryTitle=Innate Sorcery Feature/&PowerTeleportSummonDescription=You can teleport to any location within 5 ft from the caster. Feature/&PowerTeleportSummonTitle=Teleport Feature/&PowerVanishSummonDescription=You can make your summon vanish. diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index f305cdcc64..405f9f75a3 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -16,7 +16,7 @@ ModUi/&AddToStore=Add {0} ModUi/&Advanced=Advanced: [Requires Restart] ModUi/&AdvancedHelp=• ATTENTION: These settings will require the player to have this mod installed ModUi/&AllowAllPlayersOnNarrativeSequences=+ Allow all players on narrative sequences -ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Allow allies to perceive GloomStalker when in natural darkness +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Allow allies to perceive GloomStalker when in natural darkness ModUi/&AllowAnyClassToWearSylvanArmor=Allow any class to wear Sylvan Armor or Lightbringer Clothes ModUi/&AllowBladeCantripsToUseReach=Allow Blade Cantrips to use reach instead of 5 ft ModUi/&AllowClubsToBeThrown=Allow Clubs to be thrown like Daggers or Hand Axes @@ -161,6 +161,7 @@ ModUi/&EnableRogueFightingStyle=Enable Fighting Style cho ModUi/&EnableRogueSteadyAim=Enable Steady Aim at level 3 [bonus action gives advantage on your next attack roll in the current turn if you haven't moved yet] ModUi/&EnableRogueStrSaving=Enable Hoodlum DEX or STR modifiers on Cunning/Devious Strike ModUi/&EnableSignatureSpellsRelearn=Enable Signature Spells to be prepared every long rest [instead of once at level 20] +ModUi/&EnableSorcererInnateSorcery=Enable Innate Sorcery at level 1 ModUi/&EnableSorcererMagicalGuidance=Enable Magical Guidance at level 5 ModUi/&EnableSorcererQuickenedAction=Enable Quickened Spell action to allow cast main action spell with quickened metamagic applied ModUi/&EnableSortingDungeonMakerAssets=Enable assets sorting on Dungeon Maker editor @@ -260,8 +261,8 @@ ModUi/&RemoveBugVisualModels=Replace spider like models with bear like models in ModUi/&RemoveHumanoidFilterOnHideousLaughter=Remove humanoid filter on Hideous Laughter ModUi/&RemoveRecurringEffectOnEntangle=Only apply Entangle effect at casting time and also force a strength check to break free from the vines ModUi/&RemoveRogueBlindSense=Remove Blind Sense at level 14 -ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Remove school restrictions from Shadowcaster -ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Remove school restrictions from Spellblade +ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Remove school restrictions from Shadowcaster +ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Remove school restrictions from Spellblade ModUi/&RestockAntiquarians=Restock Antiquarians [Halman Summer] ModUi/&RestockArcaneum=Restock Arcaneum [Heddlon Surespell] ModUi/&RestockCircleOfDanantar=Restock Circle of Danantar [Joriel Foxeye] diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index 792a9d84fa..fbf6f57bdc 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -52,6 +52,8 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=Aferramiento Condition/&ConditionGrappleSourceWithGrapplerTitle=Aferramiento Condition/&ConditionGrappleTargetDescription=Tu velocidad se reduce a cero. Condition/&ConditionGrappleTargetTitle=Agarrado +Condition/&ConditionSorcererInnateSorceryDescription=+1 CD de salvación de hechizo y ventaja en tiradas de ataque de hechizo. +Condition/&ConditionSorcererInnateSorceryTitle=Hechicería innata Condition/&ConditionLightSensitivityDescription=Tienes Desventaja en las pruebas de Sabiduría (Percepción) en luz brillante y sufres una penalización de -1d4 en las tiradas de ataque. Condition/&ConditionLightSensitivityTitle=Sensibilidad a la luz Condition/&ConditionLightlyObscuredDescription=La visión está ligeramente oscurecida. Desventaja en las tiradas de salvación de sabiduría (percepción). @@ -185,6 +187,8 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=Knockear Feature/&PowerRogueDeviousStrikeObscureDescription=El objetivo debe tener éxito en una tirada de salvación de Destreza o quedará cegado hasta el final de su siguiente turno. Feature/&PowerRogueDeviousStrikeObscureTitle=Oscuro Feature/&PowerRogueDeviousStrikeTitle=Golpe desviado +Feature/&PowerSorcererInnateSorceryDescription=Como Acción Bonus, puedes desatar esa magia durante 1 minuto, durante el cual obtienes los siguientes beneficios:\n•La CD de salvación de hechizos de tus hechizos de Hechicero aumenta en 1.\n•Tienes Ventaja en las tiradas de ataque de los hechizos de Hechicero que lances.\n•Puedes usar esta característica dos veces, y recuperas todos los usos gastados de la misma cuando terminas un Descanso Largo. +Feature/&PowerSorcererInnateSorceryTitle=Hechicería innata Feature/&PowerTeleportSummonDescription=Puedes teletransportarte a cualquier ubicación dentro de un radio de 5 pies del lanzador. Feature/&PowerTeleportSummonTitle=Teletransportarse Feature/&PowerVanishSummonDescription=Puedes hacer que tu invocación desaparezca. diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 9fa4f93ea1..e4ff425042 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -162,6 +162,7 @@ ModUi/&EnableRogueFightingStyle=Habilitar la opción Estilo de lu ModUi/&EnableRogueSteadyAim=Habilita Apunta firme en el nivel 3 [la acción adicional otorga ventaja en tu próxima tirada de ataque en el turno actual si aún no te has movido] ModUi/&EnableRogueStrSaving=Habilitar los modificadores DEX o STR de Hoodlum en Golpe astuto/desviado ModUi/&EnableSignatureSpellsRelearn=Permite que los hechizos exclusivos se preparen cada descanso prolongado [en lugar de una vez en el nivel 20] +ModUi/&EnableSorcererInnateSorcery=Habilitar Hechicería innata en el nivel 1 ModUi/&EnableSorcererMagicalGuidance=Habilitar Guía mágica en el nivel 5 ModUi/&EnableSorcererQuickenedAction=Habilitar la acción Hechizo acelerado para permitir lanzar un hechizo de acción principal con metamagia acelerada aplicada ModUi/&EnableSortingDungeonMakerAssets=Habilitar la clasificación de activos en el editor de Dungeon Maker diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 46ce5d1a31..5a3d9a5d53 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -52,6 +52,8 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=Grappling Condition/&ConditionGrappleSourceWithGrapplerTitle=Grappling Condition/&ConditionGrappleTargetDescription=Votre vitesse est réduite à zéro. Condition/&ConditionGrappleTargetTitle=Grappiné +Condition/&ConditionSorcererInnateSorceryDescription=+1 DD de sauvegarde des sorts et avantage sur les jets d'attaque des sorts. +Condition/&ConditionSorcererInnateSorceryTitle=Sorcellerie innée Condition/&ConditionLightSensitivityDescription=Vous avez un désavantage sur les tests de Sagesse (Perception) en pleine lumière et subissez une pénalité de -1d4 sur les jets d'attaque. Condition/&ConditionLightSensitivityTitle=Sensibilité à la lumière Condition/&ConditionLightlyObscuredDescription=La vision est légèrement obscurcie. Désavantage aux jets de sauvegarde de sagesse (perception). @@ -185,6 +187,8 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=Assommer Feature/&PowerRogueDeviousStrikeObscureDescription=La cible doit réussir un jet de sauvegarde de Dextérité, ou être aveuglée jusqu'à la fin de son prochain tour. Feature/&PowerRogueDeviousStrikeObscureTitle=Obscur Feature/&PowerRogueDeviousStrikeTitle=Frappe sournoise +Feature/&PowerSorcererInnateSorceryDescription=En tant qu'action bonus, vous pouvez libérer cette magie pendant 1 minute, durant laquelle vous obtenez les avantages suivants :\n• Le DD de sauvegarde des sorts de Sorcier augmente de 1.\n• Vous avez l'Avantage sur les jets d'attaque des sorts de Sorcier que vous lancez.\n• Vous pouvez utiliser cette fonctionnalité deux fois, et vous récupérez toutes les utilisations dépensées lorsque vous terminez un Repos Long. +Feature/&PowerSorcererInnateSorceryTitle=Sorcellerie innée Feature/&PowerTeleportSummonDescription=Vous pouvez vous téléporter à n'importe quel endroit dans un rayon de 5 pieds du lanceur de sorts. Feature/&PowerTeleportSummonTitle=Téléportation Feature/&PowerVanishSummonDescription=Vous pouvez faire disparaître votre invocation. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 248557f7c4..84de3a001b 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -161,6 +161,7 @@ ModUi/&EnableRogueFightingStyle=Activer le choix du Style de comb ModUi/&EnableRogueSteadyAim=Activez la Visée constante au niveau 3 [l'action bonus donne un avantage sur votre prochain jet d'attaque dans le tour en cours si vous n'avez pas encore bougé] ModUi/&EnableRogueStrSaving=Activer les modificateurs DEX ou STR de Hoodlum sur Cunning/Devious Strike ModUi/&EnableSignatureSpellsRelearn=Activer les sorts signatures pour qu'ils soient préparés à chaque repos long [au lieu d'une fois au niveau 20] +ModUi/&EnableSorcererInnateSorcery=Activer la Sorcellerie innée au niveau 1 ModUi/&EnableSorcererMagicalGuidance=Activer la guidance magique au niveau 5 ModUi/&EnableSorcererQuickenedAction=Activez l'action Sort accéléré pour permettre de lancer le sort d'action principal avec la métamagie accélérée appliquée ModUi/&EnableSortingDungeonMakerAssets=Activer le tri des ressources sur l'éditeur Dungeon Maker diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 227bbd8b1c..449f5669ee 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -52,6 +52,8 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=Lotta Condition/&ConditionGrappleSourceWithGrapplerTitle=Lotta Condition/&ConditionGrappleTargetDescription=La tua velocità è ridotta a zero. Condition/&ConditionGrappleTargetTitle=Alle prese +Condition/&ConditionSorcererInnateSorceryDescription=+1 CD dei tiri salvezza degli incantesimi e vantaggio ai tiri per colpire con incantesimo. +Condition/&ConditionSorcererInnateSorceryTitle=Stregoneria innata Condition/&ConditionLightSensitivityDescription=Hai Svantaggio alle prove di Saggezza (Percezione) in condizioni di luce intensa e subisci una penalità di -1d4 ai Tiri per Colpire. Condition/&ConditionLightSensitivityTitle=Sensibilità alla luce Condition/&ConditionLightlyObscuredDescription=La vista è leggermente oscurata. Svantaggio nei tiri salvezza sulla saggezza (percezione). @@ -185,6 +187,8 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=Tramortire Feature/&PowerRogueDeviousStrikeObscureDescription=Il bersaglio deve superare un tiro salvezza su Destrezza, altrimenti rimarrà accecato fino alla fine del suo turno successivo. Feature/&PowerRogueDeviousStrikeObscureTitle=Oscuro Feature/&PowerRogueDeviousStrikeTitle=Colpo subdolo +Feature/&PowerSorcererInnateSorceryDescription=Come azione bonus, puoi scatenare quella magia per 1 minuto, durante il quale ottieni i seguenti benefici:\n• La CD del tiro salvezza degli incantesimi dei tuoi incantesimi da stregone aumenta di 1.\n• Hai vantaggio sui tiri per colpire degli incantesimi da stregone che lanci.\n• Puoi usare questa caratteristica due volte e recuperi tutti gli usi spesi quando completi un riposo lungo. +Feature/&PowerSorcererInnateSorceryTitle=Stregoneria innata Feature/&PowerTeleportSummonDescription=Puoi teletrasportarti in qualsiasi luogo entro 1,5 metri dall'incantatore. Feature/&PowerTeleportSummonTitle=Teletrasporto Feature/&PowerVanishSummonDescription=Puoi far svanire la tua evocazione. diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 3565365c43..a937ff175f 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -161,6 +161,7 @@ ModUi/&EnableRogueFightingStyle=Abilita la scelta Stile di combat ModUi/&EnableRogueSteadyAim=Abilita Mira Fissa al livello 3 [l'azione bonus fornisce vantaggio al tuo prossimo tiro di attacco nel turno corrente se non ti sei ancora mosso] ModUi/&EnableRogueStrSaving=Abilita i modificatori DEX o STR di Hoodlum su Colpo astuto/subdolo ModUi/&EnableSignatureSpellsRelearn=Abilita la preparazione degli incantesimi distintivi a ogni riposo lungo [invece di una volta al livello 20] +ModUi/&EnableSorcererInnateSorcery=Abilita Stregoneria Innata al livello 1 ModUi/&EnableSorcererMagicalGuidance=Abilita Guida magica al livello 5 ModUi/&EnableSorcererQuickenedAction=Abilita l'azione Incantesimo accelerato per consentire il lancio dell'incantesimo di azione principale con metamagia accelerata applicata ModUi/&EnableSortingDungeonMakerAssets=Abilita l'ordinamento delle risorse nell'editor di Dungeon Maker diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index 69a8cd1066..29b395cba6 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -52,6 +52,8 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=グラップリング Condition/&ConditionGrappleSourceWithGrapplerTitle=グラップリング Condition/&ConditionGrappleTargetDescription=速度がゼロになります。 Condition/&ConditionGrappleTargetTitle=格闘 +Condition/&ConditionSorcererInnateSorceryDescription=呪文セーヴ DC が +1 され、呪文攻撃ロールにアドバンテージが与えられます。 +Condition/&ConditionSorcererInnateSorceryTitle=生来の魔術 Condition/&ConditionLightSensitivityDescription=あなたは明るい光の下での知恵(知覚)判定に不利を持ち、攻撃ロールに-1d4のペナルティを受けます。 Condition/&ConditionLightSensitivityTitle=光感度 Condition/&ConditionLightlyObscuredDescription=視界が軽く遮られます。知恵(知覚)セービングスローのデメリット。 @@ -185,6 +187,8 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=ノックアウト Feature/&PowerRogueDeviousStrikeObscureDescription=ターゲットは器用さセーヴィング・スローに成功するか、次のターンの終わりまで盲目状態でなければなりません。 Feature/&PowerRogueDeviousStrikeObscureTitle=あいまいな Feature/&PowerRogueDeviousStrikeTitle=デビアス・ストライク +Feature/&PowerSorcererInnateSorceryDescription=ボーナス アクションとして、その魔法を 1 分間発揮できます。その間、次の利点が得られます:\n•ソーサラー呪文の呪文セーヴ DC が 1 増加します。\n•ソーサラー呪文の攻撃ロールにアドバンテージを得ます。\n•この特徴は 2 回使用でき、大休憩を終了すると消費した使用回数をすべて回復します。 +Feature/&PowerSorcererInnateSorceryTitle=生来の魔術 Feature/&PowerTeleportSummonDescription=キャスターから 5 フィート以内の任意の場所にテレポートできます。 Feature/&PowerTeleportSummonTitle=テレポート Feature/&PowerVanishSummonDescription=召喚を消滅させることができます。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 23a0ee990f..a1834fdad9 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -161,6 +161,7 @@ ModUi/&EnableRogueFightingStyle=レベル2で戦闘スタイルSteady Aim を有効にします [ボーナス アクションにより、まだ移動していない場合、現在のターンの次の攻撃ロールにアドバンテージが与えられます] ModUi/&EnableRogueStrSaving=狡猾な一撃/悪巧みの一撃に悪党のDEXまたはSTR修飾子を有効にする ModUi/&EnableSignatureSpellsRelearn=シグネチャー スペル を、長い休憩ごとに準備できるようにします [レベル 20 で 1 回ではなく] +ModUi/&EnableSorcererInnateSorcery=レベル 1 で 生来の魔術 を有効にする ModUi/&EnableSorcererMagicalGuidance=レベル5で魔法のガイダンスを有効にする ModUi/&EnableSorcererQuickenedAction=クイック呪文アクションを有効にすると、クイック呪文メタマジックを適用したメインアクション呪文をキャストできるようになります。 ModUi/&EnableSortingDungeonMakerAssets=ダンジョンメーカーエディタでアセットの並べ替えを有効にする diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 096c62fd84..5f26f8d517 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -52,6 +52,8 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=그래플링 Condition/&ConditionGrappleSourceWithGrapplerTitle=그래플링 Condition/&ConditionGrappleTargetDescription=속도가 0으로 감소합니다. Condition/&ConditionGrappleTargetTitle=씨름하다 +Condition/&ConditionSorcererInnateSorceryDescription=주문 저장 DC에 +1이 추가되고 주문 공격 굴림에 유리해집니다. +Condition/&ConditionSorcererInnateSorceryTitle=타고난 마법 Condition/&ConditionLightSensitivityDescription=당신은 밝은 빛에서 지혜(지각) 판정에 불리함을 갖고 공격 굴림에 -1d4 페널티를 받습니다. Condition/&ConditionLightSensitivityTitle=빛 감도 Condition/&ConditionLightlyObscuredDescription=시야가 살짝 흐려집니다. 지혜(지각) 내성 굴림에 불리함. @@ -185,6 +187,8 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=녹아웃 Feature/&PowerRogueDeviousStrikeObscureDescription=대상은 민첩 내성 굴림에 성공해야 하며, 그렇지 않으면 다음 턴이 끝날 때까지 눈이 멀게 됩니다. Feature/&PowerRogueDeviousStrikeObscureTitle=모호 Feature/&PowerRogueDeviousStrikeTitle=사악한 일격 +Feature/&PowerSorcererInnateSorceryDescription=보너스 액션으로 1분 동안 해당 마법을 풀어놓을 수 있으며, 그동안 다음과 같은 혜택을 얻습니다:\n• 마법사 주문의 주문 저장 DC가 1만큼 증가합니다.\n• 시전하는 마법사 주문의 공격 굴림에 유리합니다.\n• 이 기능을 두 번 사용할 수 있으며, 긴 휴식을 마치면 사용된 모든 사용 횟수를 회복합니다. +Feature/&PowerSorcererInnateSorceryTitle=타고난 마법 Feature/&PowerTeleportSummonDescription=시전자로부터 5피트 이내의 어느 위치로든 순간이동할 수 있습니다. Feature/&PowerTeleportSummonTitle=텔레포트 Feature/&PowerVanishSummonDescription=소환을 사라지게 할 수 있습니다. diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index c62e8cfe7a..c70e9f0882 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -161,6 +161,7 @@ ModUi/&EnableRogueFightingStyle=레벨 2에서 격투 스타일안정적인 조준을 활성화합니다. [현재 턴에서 아직 이동하지 않았다면 다음 공격 굴림에 보너스 액션이 유리해집니다.] ModUi/&EnableRogueStrSaving=교활한/사악한 일격에 후드럼 DEX 또는 STR 수정치를 활성화합니다. ModUi/&EnableSignatureSpellsRelearn=긴 휴식마다 특징 주문을 준비할 수 있게 합니다. [레벨 20에서 한 번만] +ModUi/&EnableSorcererInnateSorcery=1레벨에서 선천적 마법을 활성화합니다. ModUi/&EnableSorcererMagicalGuidance=레벨 5에서 마법의 안내를 활성화합니다. ModUi/&EnableSorcererQuickenedAction=빠른 주문 동작을 활성화하여 빠른 메타매직이 적용된 주요 동작 주문을 시전할 수 있습니다. ModUi/&EnableSortingDungeonMakerAssets=Dungeon Maker 편집기에서 자산 정렬 활성화 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index bf26c8900a..5d3a3cd920 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -52,6 +52,8 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=Lutando Condition/&ConditionGrappleSourceWithGrapplerTitle=Lutando Condition/&ConditionGrappleTargetDescription=Sua velocidade é reduzida a zero. Condition/&ConditionGrappleTargetTitle=Agarrado +Condition/&ConditionSorcererInnateSorceryDescription=+1 CD de resistência à magia e vantagem em jogadas de ataque com magia. +Condition/&ConditionSorcererInnateSorceryTitle=Feitiçaria Inata Condition/&ConditionLightSensitivityDescription=Você tem Desvantagem em testes de Sabedoria (Percepção) em luz forte e sofre uma penalidade de -1d4 em jogadas de ataque. Condition/&ConditionLightSensitivityTitle=Sensibilidade à luz Condition/&ConditionLightlyObscuredDescription=A visão é levemente obscurecida. Desvantagem em testes de resistência de sabedoria (percepção). @@ -185,6 +187,8 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=Suprimir Feature/&PowerRogueDeviousStrikeObscureDescription=O alvo deve ser bem-sucedido em um teste de resistência de Destreza ou ficará cego até o final do próximo turno. Feature/&PowerRogueDeviousStrikeObscureTitle=Obscurecer Feature/&PowerRogueDeviousStrikeTitle=Ataque Desonesto +Feature/&PowerSorcererInnateSorceryDescription=Como uma Ação Bônus, você pode liberar essa magia por 1 minuto, durante o qual você ganha os seguintes benefícios:\n•A CD de resistência de magias de seus feitiços de Feiticeiro aumenta em 1.\n•Você tem Vantagem nas jogadas de ataque de feitiços de Feiticeiro que você conjura.\n•Você pode usar essa habilidade duas vezes, e você recupera todos os usos gastos dela quando termina um Descanso Longo. +Feature/&PowerSorcererInnateSorceryTitle=Feitiçaria Inata Feature/&PowerTeleportSummonDescription=Você pode se teletransportar para qualquer local a até 1,5 metro do lançador. Feature/&PowerTeleportSummonTitle=Teleporte Feature/&PowerVanishSummonDescription=Você pode fazer sua invocação desaparecer. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index ed0d8df925..1f3df48967 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -161,6 +161,7 @@ ModUi/&EnableRogueFightingStyle=Habilitar a escolha Estilo de lut ModUi/&EnableRogueSteadyAim=Habilite Miração Firme no nível 3 [ação bônus dá vantagem na sua próxima jogada de ataque no turno atual se você ainda não se moveu] ModUi/&EnableRogueStrSaving=Habilitar modificadores de DEX ou FOR de Hoodlum em Cunning/Devious Strike ModUi/&EnableSignatureSpellsRelearn=Habilitar Feitiços de Assinatura para serem preparados a cada descanso longo [em vez de uma vez no nível 20] +ModUi/&EnableSorcererInnateSorcery=Habilitar Feitiçaria Inata no nível 1 ModUi/&EnableSorcererMagicalGuidance=Habilitar Orientação Mágica no nível 5 ModUi/&EnableSorcererQuickenedAction=Habilitar ação Feitiço Acelerado para permitir conjurar feitiço de ação principal com metamagia acelerada aplicada ModUi/&EnableSortingDungeonMakerAssets=Habilitar classificação de ativos no editor do Dungeon Maker diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index a5761a3a0c..0819761ddb 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -52,6 +52,8 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=Захват Condition/&ConditionGrappleSourceWithGrapplerTitle=Захват Condition/&ConditionGrappleTargetDescription=Ваша скорость снижена до нуля. Condition/&ConditionGrappleTargetTitle=Схваченный +Condition/&ConditionSorcererInnateSorceryDescription=+1 к сложности спасброска заклинаний и преимущество при бросках атаки заклинаниями. +Condition/&ConditionSorcererInnateSorceryTitle=Врожденное Колдовство Condition/&ConditionLightSensitivityDescription=Вы совершаете с помехой проверки Мудрости (Восприятие) при ярком свете и получаете штраф -1d4 к броскам атаки. Condition/&ConditionLightSensitivityTitle=Светочувствительность Condition/&ConditionLightlyObscuredDescription=Существо в слабо заслонённой местности. Помеха на проверки Мудрости (Восприятие). @@ -185,6 +187,8 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=Нокаут Feature/&PowerRogueDeviousStrikeObscureDescription=Цель должна преуспеть в спасброске Ловкости или будет ослеплена до конца своего следующего хода. Feature/&PowerRogueDeviousStrikeObscureTitle=Затемнение Feature/&PowerRogueDeviousStrikeTitle=Коварный удар +Feature/&PowerSorcererInnateSorceryDescription=В качестве бонусного действия вы можете высвободить эту магию на 1 минуту, в течение которой вы получаете следующие преимущества:\n•Сложность спасброска от заклинаний колдуна увеличивается на 1.\n•Вы получаете преимущество на броски атаки заклинаний колдуна, которые вы применяете.\n•Вы можете использовать эту способность дважды, и вы восстанавливаете все потраченные ею использования, когда заканчиваете длительный отдых. +Feature/&PowerSorcererInnateSorceryTitle=Врожденное Колдовство Feature/&PowerTeleportSummonDescription=Вы можете телепортироваться в любое место в пределах 5 футов от заклинателя. Feature/&PowerTeleportSummonTitle=Телепортироваться Feature/&PowerVanishSummonDescription=Вы можете заставить призванное существо исчезнуть. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 391fc70386..c463718cfd 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -161,6 +161,7 @@ ModUi/&EnableRogueFightingStyle=Включить выбор Бо ModUi/&EnableRogueSteadyAim=Включить Точное прицеливание на уровне 3 [бонусным действием даёт преимущество на следующий бросок атаки в текущем ходу, если вы ещё не перемещались] ModUi/&EnableRogueStrSaving=Включить модификаторы DEX или STR Hoodlum для Cunning/Devious Strike ModUi/&EnableSignatureSpellsRelearn=Включить подготовку фирменных заклинаний при каждом продолжительном отдыхе [вместо одного раза на уровне 20] +ModUi/&EnableSorcererInnateSorcery=Включить Врожденное колдовство на уровне 1 ModUi/&EnableSorcererMagicalGuidance=Включить Волшебное указание на уровне 5 ModUi/&EnableSorcererQuickenedAction=Включить действие Ускоренное заклинание, позволяющее накладывать заклинание основного действия с применением метамагии Ускоренного заклинания. ModUi/&EnableSortingDungeonMakerAssets=Включить сортировку ассетов в редакторе Создателя Подземелий diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 01e5b550b4..675972db09 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -52,6 +52,8 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=擒抱 Condition/&ConditionGrappleSourceWithGrapplerTitle=擒抱 Condition/&ConditionGrappleTargetDescription=你的速度减为零。 Condition/&ConditionGrappleTargetTitle=被擒抱 +Condition/&ConditionSorcererInnateSorceryDescription=+1 法术豁免 DC 和法术攻击掷骰优势。 +Condition/&ConditionSorcererInnateSorceryTitle=天生魔法 Condition/&ConditionLightSensitivityDescription=你在强光下的感知(察觉)检定处于劣势,并且在攻击检定上受到 -1d4 惩罚。 Condition/&ConditionLightSensitivityTitle=光照敏感 Condition/&ConditionLightlyObscuredDescription=视线被轻度遮蔽。感知(察觉)豁免检定的劣势。 @@ -185,6 +187,8 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=击晕 Feature/&PowerRogueDeviousStrikeObscureDescription=目标必须成功通过敏捷豁免,否则将被目盲直至下回合结束。 Feature/&PowerRogueDeviousStrikeObscureTitle=遮蔽 Feature/&PowerRogueDeviousStrikeTitle=狡诈打击 +Feature/&PowerSorcererInnateSorceryDescription=作为奖励行动,您可以释放魔法 1 分钟,在此期间您将获得以下好处:\n• 您的巫师法术的法术豁免 DC 增加 1。\n• 您在施放的巫师法术的攻击掷骰上具有优势。\n• 您可以使用此功能两次,并且在完成长时间休息后,您可以恢复所有已用完的使用次数。 +Feature/&PowerSorcererInnateSorceryTitle=天生魔法 Feature/&PowerTeleportSummonDescription=你可以传送到施法者 5 尺以内的任何位置。 Feature/&PowerTeleportSummonTitle=传送 Feature/&PowerVanishSummonDescription=你可以让你的召唤物消失。 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 3d8a59d930..043d6f00bc 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -161,6 +161,7 @@ ModUi/&EnableRogueFightingStyle=在第 2 级启用战斗风格稳定瞄准 [如果您尚未移动,则奖励行动会在当前回合的下一次攻击掷骰中提供优势] ModUi/&EnableRogueStrSaving=在狡猾/卑鄙的打击上启用Hoodlum DEX 或 STR 修正 ModUi/&EnableSignatureSpellsRelearn=每次长时间休息时都可准备招牌法术[而不是在 20 级时准备一次] +ModUi/&EnableSorcererInnateSorcery=在第 1 级启用天生巫术 ModUi/&EnableSorcererMagicalGuidance=在 5 级时启用魔法指引 ModUi/&EnableSorcererQuickenedAction=启用加速法术动作以允许施放应用了加速超魔法的主要动作法术 ModUi/&EnableSortingDungeonMakerAssets=在 Dungeon Maker 编辑器上启用资产排序 From 806974ad2cf88d6a7b9f7b671ce739710011e495 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 2 Nov 2024 19:48:52 -0700 Subject: [PATCH 32/85] update translations --- SolastaUnfinishedBusiness/Translations/de/Others-de.txt | 6 ++++-- SolastaUnfinishedBusiness/Translations/en/Others-en.txt | 6 ++++-- SolastaUnfinishedBusiness/Translations/es/Others-es.txt | 6 ++++-- SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt | 6 ++++-- SolastaUnfinishedBusiness/Translations/it/Others-it.txt | 6 ++++-- SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt | 6 ++++-- SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt | 6 ++++-- .../Translations/pt-BR/Others-pt-BR.txt | 6 ++++-- SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt | 6 ++++-- .../Translations/zh-CN/Others-zh-CN.txt | 6 ++++-- 10 files changed, 40 insertions(+), 20 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index d7e0c2c527..a149a2117b 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -52,8 +52,6 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=Grappling Condition/&ConditionGrappleSourceWithGrapplerTitle=Grappling Condition/&ConditionGrappleTargetDescription=Ihre Geschwindigkeit wird auf Null reduziert. Condition/&ConditionGrappleTargetTitle=Gepackt -Condition/&ConditionSorcererInnateSorceryDescription=+1 Zauberrettungs-SG und Vorteil bei Zauberangriffswürfen. -Condition/&ConditionSorcererInnateSorceryTitle=Angeborene Zauberei Condition/&ConditionLightSensitivityDescription=Sie haben einen Nachteil bei Weisheitswürfen (Wahrnehmung) bei hellem Licht und erleiden einen Malus von -1W4 bei Angriffswürfen. Condition/&ConditionLightSensitivityTitle=Lichtempfindlichkeit Condition/&ConditionLightlyObscuredDescription=Die Sicht ist leicht getrübt. Nachteil bei Rettungswürfen für Weisheit (Wahrnehmung). @@ -64,6 +62,8 @@ Condition/&ConditionRogueCunningStrikeDisarmedTitle=Entwaffnet Condition/&ConditionRogueDeviousStrikeDazedDescription=Sie können weder Reaktionen noch Bonusaktionen verwenden und können sich in Ihrem Zug bewegen oder andere Aktionen ausführen, nicht beides. Condition/&ConditionRogueDeviousStrikeDazedTitle=Benommen Condition/&ConditionRogueDeviousStrikeKnockOutTitle=Ausgeknockt +Condition/&ConditionSorcererInnateSorceryDescription=+1 Zauberrettungs-SG und Vorteil bei Zauberangriffswürfen. +Condition/&ConditionSorcererInnateSorceryTitle=Angeborene Zauberei Condition/&ConditionStaggeringBlowAoODescription=Sie können bis zum Beginn Ihres nächsten Zuges keine Gelegenheitsangriffe durchführen. Condition/&ConditionStaggeringBlowAoOTitle=Erschütternder Schlag Condition/&ConditionStopMovementTitle=Gestoppt @@ -198,6 +198,8 @@ Feature/&PowerWarlockMagicalCunningTitle=Magische List Feature/&ToolGainChoicesPluralDescription=Wählen Sie {0} dieser Tools: {1} Feature/&ToolGainChoicesSingleDescription=Wählen Sie eines dieser Tools: {1} Feature/&VisionBlindsightDescription=Sie leiden an Blindsicht. +Feature/&FeatureBardSuperiorInspiration2024Description=Wenn Sie die Initiative ergreifen, erhalten Sie verbrauchte Anwendungen der Bardischen Inspiration zurück, bis Sie zwei haben, wenn Sie weniger haben. +Feature/&FeatureBardSuperiorInspiration2024Title=Überlegene Inspiration Feedback/&AdditionalDamageBrutalStrikeFormat=Brutaler Schlag Feedback/&AdditionalDamageBrutalStrikeLine=Brutaler Schlag verursacht zusätzlichen +{2} Schaden! Feedback/&AdditionalDamageSunderingBlowFormat=Trennender Schlag diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 849ba82cc3..c18e6aa17f 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -52,8 +52,6 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=Grappling Condition/&ConditionGrappleSourceWithGrapplerTitle=Grappling Condition/&ConditionGrappleTargetDescription=Your speed is reduced to zero. Condition/&ConditionGrappleTargetTitle=Grappled -Condition/&ConditionSorcererInnateSorceryDescription=+1 spell save DC and advantage on spell attack rolls. -Condition/&ConditionSorcererInnateSorceryTitle=Innate Sorcery Condition/&ConditionLightSensitivityDescription=You have Disadvantage on Wisdom (Perception) checks in bright light and suffers a -1d4 penalty on attack rolls. Condition/&ConditionLightSensitivityTitle=Light Sensitivity Condition/&ConditionLightlyObscuredDescription=Vision is lightly obscured. Disadvantage on wisdom (perception) saving throws. @@ -64,6 +62,8 @@ Condition/&ConditionRogueCunningStrikeDisarmedTitle=Disarmed Condition/&ConditionRogueDeviousStrikeDazedDescription=You cannot use reactions or bonus actions, and can move or take other actions in your turn, not both. Condition/&ConditionRogueDeviousStrikeDazedTitle=Dazed Condition/&ConditionRogueDeviousStrikeKnockOutTitle=Knocked Out +Condition/&ConditionSorcererInnateSorceryDescription=+1 spell save DC and advantage on spell attack rolls. +Condition/&ConditionSorcererInnateSorceryTitle=Innate Sorcery Condition/&ConditionStaggeringBlowAoODescription=You can't make Opportunity Attacks until the start of your next turn. Condition/&ConditionStaggeringBlowAoOTitle=Staggering Blow Condition/&ConditionStopMovementTitle=Stopped @@ -198,6 +198,8 @@ Feature/&PowerWarlockMagicalCunningTitle=Magical Cunning Feature/&ToolGainChoicesPluralDescription=Choose {0} of these tools: {1} Feature/&ToolGainChoicesSingleDescription=Choose one of these tools: {1} Feature/&VisionBlindsightDescription=You have blindsight. +Feature/&FeatureBardSuperiorInspiration2024Description=When you roll Initiative, you regain expended uses of Bardic Inspiration until you have two if you have fewer that that. +Feature/&FeatureBardSuperiorInspiration2024Title=Superior Inspiration Feedback/&AdditionalDamageBrutalStrikeFormat=Brutal Strike Feedback/&AdditionalDamageBrutalStrikeLine=Brutal Strike deals extra +{2} damage! Feedback/&AdditionalDamageSunderingBlowFormat=Sundering Blow diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index fbf6f57bdc..ae254e4cf5 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -52,8 +52,6 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=Aferramiento Condition/&ConditionGrappleSourceWithGrapplerTitle=Aferramiento Condition/&ConditionGrappleTargetDescription=Tu velocidad se reduce a cero. Condition/&ConditionGrappleTargetTitle=Agarrado -Condition/&ConditionSorcererInnateSorceryDescription=+1 CD de salvación de hechizo y ventaja en tiradas de ataque de hechizo. -Condition/&ConditionSorcererInnateSorceryTitle=Hechicería innata Condition/&ConditionLightSensitivityDescription=Tienes Desventaja en las pruebas de Sabiduría (Percepción) en luz brillante y sufres una penalización de -1d4 en las tiradas de ataque. Condition/&ConditionLightSensitivityTitle=Sensibilidad a la luz Condition/&ConditionLightlyObscuredDescription=La visión está ligeramente oscurecida. Desventaja en las tiradas de salvación de sabiduría (percepción). @@ -64,6 +62,8 @@ Condition/&ConditionRogueCunningStrikeDisarmedTitle=Desarmado Condition/&ConditionRogueDeviousStrikeDazedDescription=No puedes usar reacciones ni acciones adicionales, y puedes moverte o realizar otras acciones en tu turno, pero no ambas. Condition/&ConditionRogueDeviousStrikeDazedTitle=Aturdido Condition/&ConditionRogueDeviousStrikeKnockOutTitle=Noqueado +Condition/&ConditionSorcererInnateSorceryDescription=+1 CD de salvación de hechizo y ventaja en tiradas de ataque de hechizo. +Condition/&ConditionSorcererInnateSorceryTitle=Hechicería innata Condition/&ConditionStaggeringBlowAoODescription=No puedes realizar ataques de oportunidad hasta el comienzo de tu siguiente turno. Condition/&ConditionStaggeringBlowAoOTitle=Golpe asombroso Condition/&ConditionStopMovementTitle=Interrumpido @@ -198,6 +198,8 @@ Feature/&PowerWarlockMagicalCunningTitle=Astucia mágica Feature/&ToolGainChoicesPluralDescription=Elija {0} de estas herramientas: {1} Feature/&ToolGainChoicesSingleDescription=Elija una de estas herramientas: {1} Feature/&VisionBlindsightDescription=Tienes visión ciega. +Feature/&FeatureBardSuperiorInspiration2024Description=Cuando tiras Iniciativa, recuperas los usos gastados de Inspiración bárdica hasta que tengas dos si tienes menos que eso. +Feature/&FeatureBardSuperiorInspiration2024Title=Inspiración superior Feedback/&AdditionalDamageBrutalStrikeFormat=Golpe brutal Feedback/&AdditionalDamageBrutalStrikeLine=¡Golpe brutal inflige +{2} de daño adicional! Feedback/&AdditionalDamageSunderingBlowFormat=Golpe desgarrador diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 5a3d9a5d53..b05e83e088 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -52,8 +52,6 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=Grappling Condition/&ConditionGrappleSourceWithGrapplerTitle=Grappling Condition/&ConditionGrappleTargetDescription=Votre vitesse est réduite à zéro. Condition/&ConditionGrappleTargetTitle=Grappiné -Condition/&ConditionSorcererInnateSorceryDescription=+1 DD de sauvegarde des sorts et avantage sur les jets d'attaque des sorts. -Condition/&ConditionSorcererInnateSorceryTitle=Sorcellerie innée Condition/&ConditionLightSensitivityDescription=Vous avez un désavantage sur les tests de Sagesse (Perception) en pleine lumière et subissez une pénalité de -1d4 sur les jets d'attaque. Condition/&ConditionLightSensitivityTitle=Sensibilité à la lumière Condition/&ConditionLightlyObscuredDescription=La vision est légèrement obscurcie. Désavantage aux jets de sauvegarde de sagesse (perception). @@ -64,6 +62,8 @@ Condition/&ConditionRogueCunningStrikeDisarmedTitle=Désarmé Condition/&ConditionRogueDeviousStrikeDazedDescription=Vous ne pouvez pas utiliser de réactions ou d'actions bonus, et pouvez vous déplacer ou effectuer d'autres actions pendant votre tour, mais pas les deux. Condition/&ConditionRogueDeviousStrikeDazedTitle=Étourdi Condition/&ConditionRogueDeviousStrikeKnockOutTitle=Assommé +Condition/&ConditionSorcererInnateSorceryDescription=+1 DD de sauvegarde des sorts et avantage sur les jets d'attaque des sorts. +Condition/&ConditionSorcererInnateSorceryTitle=Sorcellerie innée Condition/&ConditionStaggeringBlowAoODescription=Vous ne pouvez pas effectuer d'attaques d'opportunité avant le début de votre prochain tour. Condition/&ConditionStaggeringBlowAoOTitle=Coup de foudre Condition/&ConditionStopMovementTitle=Arrêté @@ -198,6 +198,8 @@ Feature/&PowerWarlockMagicalCunningTitle=Ruse magique Feature/&ToolGainChoicesPluralDescription=Choisissez {0} de ces outils : {1} Feature/&ToolGainChoicesSingleDescription=Choisissez l'un de ces outils : {1} Feature/&VisionBlindsightDescription=Vous avez la vision aveugle. +Feature/&FeatureBardSuperiorInspiration2024Description=Lorsque vous lancez Initiative, vous récupérez les utilisations dépensées d'Inspiration bardique jusqu'à ce que vous en ayez deux si vous en avez moins. +Feature/&FeatureBardSuperiorInspiration2024Title=Inspiration supérieure Feedback/&AdditionalDamageBrutalStrikeFormat=Grève brutale Feedback/&AdditionalDamageBrutalStrikeLine=Frappe brutale inflige +{2} dégâts supplémentaires ! Feedback/&AdditionalDamageSunderingBlowFormat=Coup destructeur diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 449f5669ee..0217237943 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -52,8 +52,6 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=Lotta Condition/&ConditionGrappleSourceWithGrapplerTitle=Lotta Condition/&ConditionGrappleTargetDescription=La tua velocità è ridotta a zero. Condition/&ConditionGrappleTargetTitle=Alle prese -Condition/&ConditionSorcererInnateSorceryDescription=+1 CD dei tiri salvezza degli incantesimi e vantaggio ai tiri per colpire con incantesimo. -Condition/&ConditionSorcererInnateSorceryTitle=Stregoneria innata Condition/&ConditionLightSensitivityDescription=Hai Svantaggio alle prove di Saggezza (Percezione) in condizioni di luce intensa e subisci una penalità di -1d4 ai Tiri per Colpire. Condition/&ConditionLightSensitivityTitle=Sensibilità alla luce Condition/&ConditionLightlyObscuredDescription=La vista è leggermente oscurata. Svantaggio nei tiri salvezza sulla saggezza (percezione). @@ -64,6 +62,8 @@ Condition/&ConditionRogueCunningStrikeDisarmedTitle=Disarmato Condition/&ConditionRogueDeviousStrikeDazedDescription=Non puoi usare reazioni o azioni bonus e puoi muoverti o compiere altre azioni durante il tuo turno, ma non entrambe le cose. Condition/&ConditionRogueDeviousStrikeDazedTitle=Stordito Condition/&ConditionRogueDeviousStrikeKnockOutTitle=Sbalordito +Condition/&ConditionSorcererInnateSorceryDescription=+1 CD dei tiri salvezza degli incantesimi e vantaggio ai tiri per colpire con incantesimo. +Condition/&ConditionSorcererInnateSorceryTitle=Stregoneria innata Condition/&ConditionStaggeringBlowAoODescription=Non puoi effettuare Attacchi di Opportunità prima dell'inizio del tuo prossimo turno. Condition/&ConditionStaggeringBlowAoOTitle=Colpo sconcertante Condition/&ConditionStopMovementTitle=Fermato @@ -198,6 +198,8 @@ Feature/&PowerWarlockMagicalCunningTitle=Astuzia magica Feature/&ToolGainChoicesPluralDescription=Scegli {0} di questi strumenti: {1} Feature/&ToolGainChoicesSingleDescription=Scegli uno di questi strumenti: {1} Feature/&VisionBlindsightDescription=Hai la vista cieca. +Feature/&FeatureBardSuperiorInspiration2024Description=Quando tiri per l'Iniziativa, recuperi gli usi spesi di Ispirazione Bardica finché non ne hai due, se ne hai meno. +Feature/&FeatureBardSuperiorInspiration2024Title=Ispirazione superiore Feedback/&AdditionalDamageBrutalStrikeFormat=Colpo brutale Feedback/&AdditionalDamageBrutalStrikeLine=Colpo Brutale infligge +{2} danni extra! Feedback/&AdditionalDamageSunderingBlowFormat=Colpo dirompente diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index 29b395cba6..e38eb5c7ef 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -52,8 +52,6 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=グラップリング Condition/&ConditionGrappleSourceWithGrapplerTitle=グラップリング Condition/&ConditionGrappleTargetDescription=速度がゼロになります。 Condition/&ConditionGrappleTargetTitle=格闘 -Condition/&ConditionSorcererInnateSorceryDescription=呪文セーヴ DC が +1 され、呪文攻撃ロールにアドバンテージが与えられます。 -Condition/&ConditionSorcererInnateSorceryTitle=生来の魔術 Condition/&ConditionLightSensitivityDescription=あなたは明るい光の下での知恵(知覚)判定に不利を持ち、攻撃ロールに-1d4のペナルティを受けます。 Condition/&ConditionLightSensitivityTitle=光感度 Condition/&ConditionLightlyObscuredDescription=視界が軽く遮られます。知恵(知覚)セービングスローのデメリット。 @@ -64,6 +62,8 @@ Condition/&ConditionRogueCunningStrikeDisarmedTitle=武装解除 Condition/&ConditionRogueDeviousStrikeDazedDescription=リアクションやボーナス アクションを使用することはできません。また、自分の番に移動または他のアクションを実行することはできますが、両方を実行することはできません。 Condition/&ConditionRogueDeviousStrikeDazedTitle=放心状態 Condition/&ConditionRogueDeviousStrikeKnockOutTitle=ノックアウト +Condition/&ConditionSorcererInnateSorceryDescription=呪文セーヴ DC が +1 され、呪文攻撃ロールにアドバンテージが与えられます。 +Condition/&ConditionSorcererInnateSorceryTitle=生来の魔術 Condition/&ConditionStaggeringBlowAoODescription=次のターンの開始まで、機会攻撃を行うことはできません。 Condition/&ConditionStaggeringBlowAoOTitle=よろめきの一撃 Condition/&ConditionStopMovementTitle=停止 @@ -198,6 +198,8 @@ Feature/&PowerWarlockMagicalCunningTitle=魔法の狡猾さ Feature/&ToolGainChoicesPluralDescription=次のツールから {0} 個を選択してください: {1} Feature/&ToolGainChoicesSingleDescription=次のツールのいずれかを選択します: {1} Feature/&VisionBlindsightDescription=あなたは盲目です。 +Feature/&FeatureBardSuperiorInspiration2024Description=イニシアティブをロールすると、消費したバード インスピレーションの使用回数が 2 回になるまで回復します (2 回未満の場合)。 +Feature/&FeatureBardSuperiorInspiration2024Title=優れたインスピレーション Feedback/&AdditionalDamageBrutalStrikeFormat=ブルータル・ストライク Feedback/&AdditionalDamageBrutalStrikeLine=残忍な一撃は追加の +{2} ダメージを与える! Feedback/&AdditionalDamageSunderingBlowFormat=サンダーブロウ diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 5f26f8d517..5fd3a054e3 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -52,8 +52,6 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=그래플링 Condition/&ConditionGrappleSourceWithGrapplerTitle=그래플링 Condition/&ConditionGrappleTargetDescription=속도가 0으로 감소합니다. Condition/&ConditionGrappleTargetTitle=씨름하다 -Condition/&ConditionSorcererInnateSorceryDescription=주문 저장 DC에 +1이 추가되고 주문 공격 굴림에 유리해집니다. -Condition/&ConditionSorcererInnateSorceryTitle=타고난 마법 Condition/&ConditionLightSensitivityDescription=당신은 밝은 빛에서 지혜(지각) 판정에 불리함을 갖고 공격 굴림에 -1d4 페널티를 받습니다. Condition/&ConditionLightSensitivityTitle=빛 감도 Condition/&ConditionLightlyObscuredDescription=시야가 살짝 흐려집니다. 지혜(지각) 내성 굴림에 불리함. @@ -64,6 +62,8 @@ Condition/&ConditionRogueCunningStrikeDisarmedTitle=무장해제 Condition/&ConditionRogueDeviousStrikeDazedDescription=반응이나 보너스 행동을 사용할 수 없으며, 자신의 차례에 이동하거나 다른 행동을 취할 수 있습니다. 둘 다 할 수는 없습니다. Condition/&ConditionRogueDeviousStrikeDazedTitle=멍해짐 Condition/&ConditionRogueDeviousStrikeKnockOutTitle=쓰러지 다 +Condition/&ConditionSorcererInnateSorceryDescription=주문 저장 DC에 +1이 추가되고 주문 공격 굴림에 유리해집니다. +Condition/&ConditionSorcererInnateSorceryTitle=타고난 마법 Condition/&ConditionStaggeringBlowAoODescription=다음 턴이 시작될 때까지 기회 공격을 할 수 없습니다. Condition/&ConditionStaggeringBlowAoOTitle=엄청난 타격 Condition/&ConditionStopMovementTitle=중지됨 @@ -198,6 +198,8 @@ Feature/&PowerWarlockMagicalCunningTitle=마법의 교활함 Feature/&ToolGainChoicesPluralDescription=다음 도구 중 {0}개를 선택하세요: {1} Feature/&ToolGainChoicesSingleDescription=다음 도구 중 하나를 선택하십시오: {1} Feature/&VisionBlindsightDescription=당신은 시력이 없습니다. +Feature/&FeatureBardSuperiorInspiration2024Description=주도권을 굴릴 때, 바드 영감의 소모한 사용 횟수를 회복합니다. 소모한 사용 횟수가 두 개보다 적다면 다시 두 개를 사용할 수 있습니다. +Feature/&FeatureBardSuperiorInspiration2024Title=뛰어난 영감 Feedback/&AdditionalDamageBrutalStrikeFormat=잔인한 일격 Feedback/&AdditionalDamageBrutalStrikeLine=잔인한 일격이 추가로 +{2} 피해를 입힙니다! Feedback/&AdditionalDamageSunderingBlowFormat=가르는 일격 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 5d3a3cd920..87e21ef235 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -52,8 +52,6 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=Lutando Condition/&ConditionGrappleSourceWithGrapplerTitle=Lutando Condition/&ConditionGrappleTargetDescription=Sua velocidade é reduzida a zero. Condition/&ConditionGrappleTargetTitle=Agarrado -Condition/&ConditionSorcererInnateSorceryDescription=+1 CD de resistência à magia e vantagem em jogadas de ataque com magia. -Condition/&ConditionSorcererInnateSorceryTitle=Feitiçaria Inata Condition/&ConditionLightSensitivityDescription=Você tem Desvantagem em testes de Sabedoria (Percepção) em luz forte e sofre uma penalidade de -1d4 em jogadas de ataque. Condition/&ConditionLightSensitivityTitle=Sensibilidade à luz Condition/&ConditionLightlyObscuredDescription=A visão é levemente obscurecida. Desvantagem em testes de resistência de sabedoria (percepção). @@ -64,6 +62,8 @@ Condition/&ConditionRogueCunningStrikeDisarmedTitle=Desarmado Condition/&ConditionRogueDeviousStrikeDazedDescription=Você não pode usar reações ou ações bônus e pode se mover ou realizar outras ações no seu turno, não ambos. Condition/&ConditionRogueDeviousStrikeDazedTitle=Atordoado Condition/&ConditionRogueDeviousStrikeKnockOutTitle=Nocauteado +Condition/&ConditionSorcererInnateSorceryDescription=+1 CD de resistência à magia e vantagem em jogadas de ataque com magia. +Condition/&ConditionSorcererInnateSorceryTitle=Feitiçaria Inata Condition/&ConditionStaggeringBlowAoODescription=Você não pode fazer Ataques de Oportunidade até o início do seu próximo turno. Condition/&ConditionStaggeringBlowAoOTitle=Golpe cambaleante Condition/&ConditionStopMovementTitle=Parou @@ -198,6 +198,8 @@ Feature/&PowerWarlockMagicalCunningTitle=Astúcia Mágica Feature/&ToolGainChoicesPluralDescription=Escolha {0} destas ferramentas: {1} Feature/&ToolGainChoicesSingleDescription=Escolha uma destas ferramentas: {1} Feature/&VisionBlindsightDescription=Você tem visão cega. +Feature/&FeatureBardSuperiorInspiration2024Description=Ao rolar Iniciativa, você recupera os usos gastos de Inspiração Bárdica até que você tenha dois, se tiver menos que isso. +Feature/&FeatureBardSuperiorInspiration2024Title=Inspiração Superior Feedback/&AdditionalDamageBrutalStrikeFormat=Ataque Brutal Feedback/&AdditionalDamageBrutalStrikeLine=Ataque Brutal causa dano extra de +{2}! Feedback/&AdditionalDamageSunderingBlowFormat=Golpe de separação diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 0819761ddb..4df8ed3f02 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -52,8 +52,6 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=Захват Condition/&ConditionGrappleSourceWithGrapplerTitle=Захват Condition/&ConditionGrappleTargetDescription=Ваша скорость снижена до нуля. Condition/&ConditionGrappleTargetTitle=Схваченный -Condition/&ConditionSorcererInnateSorceryDescription=+1 к сложности спасброска заклинаний и преимущество при бросках атаки заклинаниями. -Condition/&ConditionSorcererInnateSorceryTitle=Врожденное Колдовство Condition/&ConditionLightSensitivityDescription=Вы совершаете с помехой проверки Мудрости (Восприятие) при ярком свете и получаете штраф -1d4 к броскам атаки. Condition/&ConditionLightSensitivityTitle=Светочувствительность Condition/&ConditionLightlyObscuredDescription=Существо в слабо заслонённой местности. Помеха на проверки Мудрости (Восприятие). @@ -64,6 +62,8 @@ Condition/&ConditionRogueCunningStrikeDisarmedTitle=Разоружён Condition/&ConditionRogueDeviousStrikeDazedDescription=Вы не можете совершать реакции или бонусные действия, а также должны выбрать что-то одно - перемещаться или совершать другие действия в свой ход. Condition/&ConditionRogueDeviousStrikeDazedTitle=Ошеломлён Condition/&ConditionRogueDeviousStrikeKnockOutTitle=Нокаутирован +Condition/&ConditionSorcererInnateSorceryDescription=+1 к сложности спасброска заклинаний и преимущество при бросках атаки заклинаниями. +Condition/&ConditionSorcererInnateSorceryTitle=Врожденное Колдовство Condition/&ConditionStaggeringBlowAoODescription=Вы не можете совершать атаки по возможности до начала вашего следующего хода. Condition/&ConditionStaggeringBlowAoOTitle=Ошеломляющий удар Condition/&ConditionStopMovementTitle=Остановлен @@ -198,6 +198,8 @@ Feature/&PowerWarlockMagicalCunningTitle=Магическая хитрость Feature/&ToolGainChoicesPluralDescription=Выберите {0} из этих инструментов: {1} Feature/&ToolGainChoicesSingleDescription=Выберите один из этих инструментов: {1} Feature/&VisionBlindsightDescription=Вы обладаете слепым зрением. +Feature/&FeatureBardSuperiorInspiration2024Description=При броске Инициативы вы восстанавливаете потраченные использования Бардовского вдохновения, пока у вас их не будет два, если у вас их меньше. +Feature/&FeatureBardSuperiorInspiration2024Title=Превосходное вдохновение Feedback/&AdditionalDamageBrutalStrikeFormat=Жестокий удар Feedback/&AdditionalDamageBrutalStrikeLine=Жестокий удар наносит дополнительно +{2} урона! Feedback/&AdditionalDamageSunderingBlowFormat=Раскалывающий удар diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 675972db09..f8ce5c9d1a 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -52,8 +52,6 @@ Condition/&ConditionGrappleSourceWithGrapplerLargerTitle=擒抱 Condition/&ConditionGrappleSourceWithGrapplerTitle=擒抱 Condition/&ConditionGrappleTargetDescription=你的速度减为零。 Condition/&ConditionGrappleTargetTitle=被擒抱 -Condition/&ConditionSorcererInnateSorceryDescription=+1 法术豁免 DC 和法术攻击掷骰优势。 -Condition/&ConditionSorcererInnateSorceryTitle=天生魔法 Condition/&ConditionLightSensitivityDescription=你在强光下的感知(察觉)检定处于劣势,并且在攻击检定上受到 -1d4 惩罚。 Condition/&ConditionLightSensitivityTitle=光照敏感 Condition/&ConditionLightlyObscuredDescription=视线被轻度遮蔽。感知(察觉)豁免检定的劣势。 @@ -64,6 +62,8 @@ Condition/&ConditionRogueCunningStrikeDisarmedTitle=解除武装 Condition/&ConditionRogueDeviousStrikeDazedDescription=你在回合内只能选择进行移动或者一个动作,无法在同回合内进行二者。你也不能执行附赠动作和反应。 Condition/&ConditionRogueDeviousStrikeDazedTitle=恍惚 Condition/&ConditionRogueDeviousStrikeKnockOutTitle=被击败 +Condition/&ConditionSorcererInnateSorceryDescription=+1 法术豁免 DC 和法术攻击掷骰优势。 +Condition/&ConditionSorcererInnateSorceryTitle=天生魔法 Condition/&ConditionStaggeringBlowAoODescription=在你的下一个回合开始之前你不能进行借机攻击。 Condition/&ConditionStaggeringBlowAoOTitle=失衡殴击 Condition/&ConditionStopMovementTitle=无法移动 @@ -198,6 +198,8 @@ Feature/&PowerWarlockMagicalCunningTitle=魔法狡猾 Feature/&ToolGainChoicesPluralDescription=从这些工具中选择 {0}:{1} Feature/&ToolGainChoicesSingleDescription=选择以下工具之一:{1} Feature/&VisionBlindsightDescription=你有盲视。 +Feature/&FeatureBardSuperiorInspiration2024Description=当你掷主动权时,如果你拥有的吟游诗人灵感少于两次,你将重新获得已消耗的吟游诗人灵感,直到你拥有两次。 +Feature/&FeatureBardSuperiorInspiration2024Title=卓越灵感 Feedback/&AdditionalDamageBrutalStrikeFormat=凶蛮打击 Feedback/&AdditionalDamageBrutalStrikeLine=凶蛮打击造成额外 +{2} 伤害! Feedback/&AdditionalDamageSunderingBlowFormat=粉碎殴击 From 76e9a0b88a1acbdd09b1635a5a00b33927374d62 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 2 Nov 2024 19:49:30 -0700 Subject: [PATCH 33/85] fix translator to not translate location names --- .../Models/TranslatorContext.cs | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/TranslatorContext.cs b/SolastaUnfinishedBusiness/Models/TranslatorContext.cs index c2f4eff195..8763d041b7 100644 --- a/SolastaUnfinishedBusiness/Models/TranslatorContext.cs +++ b/SolastaUnfinishedBusiness/Models/TranslatorContext.cs @@ -558,8 +558,8 @@ private static IEnumerator TranslateUserCampaignRoutine( [NotNull] string exportName, UserCampaign userCampaign) { - const string LoreOperation = "LoreOperation"; - const string SetLocationStatus = "SetLocationStatus"; + // const string LoreOperation = "LoreOperation"; + // const string SetLocationStatus = "SetLocationStatus"; yield return null; @@ -595,7 +595,7 @@ private static IEnumerator TranslateUserCampaignRoutine( // USER LOCATIONS foreach (var userLocation in userCampaign.UserLocations) { - userLocation.Title = Translate(userLocation.Title, languageCode); + // userLocation.Title = Translate(userLocation.Title, languageCode); userLocation.Description = Translate(userLocation.Description, languageCode); foreach (var gadget in userLocation.GadgetsByName.Values) @@ -609,9 +609,9 @@ private static IEnumerator TranslateUserCampaignRoutine( case "Speech": case "Banter": case "BanterLines": - case "DestinationLocation": + // case "DestinationLocation": case "ExitLore": - case "WaypointTitle": + // case "WaypointTitle": parameterValue.StringValue = Translate(parameterValue.StringValue, languageCode); parameterValue.StringsList = parameterValue.StringsList @@ -625,8 +625,8 @@ private static IEnumerator TranslateUserCampaignRoutine( { destination.DisplayedTitle = Translate(destination.DisplayedTitle, languageCode); // magicSkySword : the location name is actually the location id, so we must let it equal to the location id - destination.UserLocationName = - Translate(destination.UserLocationName, languageCode); + // destination.UserLocationName = + // Translate(destination.UserLocationName, languageCode); } break; @@ -651,11 +651,11 @@ private static IEnumerator TranslateUserCampaignRoutine( dialogLine.TextLine = Translate(dialogLine.TextLine, languageCode); } - foreach (var functor in userDialogState.functors - .Where(functor => functor.type is SetLocationStatus or LoreOperation)) - { - functor.StringParameter = Translate(functor.StringParameter, languageCode); - } + // foreach (var functor in userDialogState.functors + // .Where(functor => functor.type is SetLocationStatus or LoreOperation)) + // { + // functor.StringParameter = Translate(functor.StringParameter, languageCode); + // } } } @@ -687,11 +687,11 @@ private static IEnumerator TranslateUserCampaignRoutine( userQuestStep.Title = Translate(userQuestStep.Title, languageCode); userQuestStep.Description = Translate(userQuestStep.Description, languageCode); - foreach (var outStart in userQuestStep.onStartFunctors - .Where(outStart => outStart.type is SetLocationStatus or LoreOperation)) - { - outStart.StringParameter = Translate(outStart.StringParameter, languageCode); - } + // foreach (var outStart in userQuestStep.onStartFunctors + // .Where(outStart => outStart.type is SetLocationStatus or LoreOperation)) + // { + // outStart.StringParameter = Translate(outStart.StringParameter, languageCode); + // } foreach (var outcome in userQuestStep.OutcomesTable) { @@ -708,11 +708,11 @@ QuestDefinitions.QuestValidatorType.LeaveLocation or _ => outcome.validatorDescription.StringParameter }; - foreach (var outComplete in outcome.OnCompleteFunctors - .Where(outComplete => outComplete.type is SetLocationStatus or LoreOperation)) - { - outComplete.StringParameter = Translate(outComplete.StringParameter, languageCode); - } + // foreach (var outComplete in outcome.OnCompleteFunctors + // .Where(outComplete => outComplete.type is SetLocationStatus or LoreOperation)) + // { + // outComplete.StringParameter = Translate(outComplete.StringParameter, languageCode); + // } } } } From 7bf42e5ec54e446b3bdfd5222f7e2c0800aaf47e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 2 Nov 2024 19:50:04 -0700 Subject: [PATCH 34/85] finish PowerSorcererInnateSorcery --- .../Models/CharacterContext.cs | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index f1183f2b74..10c0090b22 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -189,7 +189,7 @@ internal static partial class CharacterContext private static readonly FeatureDefinitionPower PowerSorcererInnateSorcery = FeatureDefinitionPowerBuilder .Create("PowerSorcererInnateSorcery") - .SetGuiPresentation(Category.Feature) + .SetGuiPresentation(Category.Feature, PowerTraditionShockArcanistGreaterArcaneShock) .SetUsesFixed(ActivationTime.BonusAction, RechargeRate.LongRest, 1, 2) .SetEffectDescription( EffectDescriptionBuilder @@ -199,14 +199,16 @@ internal static partial class CharacterContext .SetEffectForms(EffectFormBuilder.ConditionForm( ConditionDefinitionBuilder .Create("ConditionSorcererInnateSorcery") - .SetGuiPresentation(Category.Condition) + .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionConjuredCreature) .SetFeatures( FeatureDefinitionMagicAffinityBuilder .Create("MagicAffinitySorcererInnateSorcery") - .SetGuiPresentationNoContent(true) + .SetGuiPresentation("PowerSorcererInnateSorcery", Category.Feature) .SetCastingModifiers(0, SpellParamsModifierType.None, 1) .AddToDB()) + .AddCustomSubFeatures(new ModifyAttackActionModifierInnateSorcery()) .AddToDB())) + .SetParticleEffectParameters(Shield) .Build()) .AddToDB(); @@ -265,6 +267,7 @@ internal static void LateLoad() SwitchRogueFightingStyle(); SwitchRogueSteadyAim(); SwitchRogueStrSaving(); + SwitchSorcererInnateSorcery(); SwitchSorcererMagicalGuidance(); SwitchScimitarWeaponSpecialization(); SwitchBardHealingBalladOnLongRest(); @@ -1261,6 +1264,29 @@ private static bool IsSubRace(CharacterRaceDefinition raceDefinition) .Any(crd => crd.SubRaces.Contains(raceDefinition)); } + private sealed class ModifyAttackActionModifierInnateSorcery : IModifyAttackActionModifier + { + private readonly TrendInfo _trendInfo = + new(1, FeatureSourceType.CharacterFeature, "PowerSorcererInnateSorcery", null); + + public void OnAttackComputeModifier( + RulesetCharacter myself, + RulesetCharacter defender, + BattleDefinitions.AttackProximity attackProximity, + RulesetAttackMode attackMode, + string effectName, + ref ActionModifier attackModifier) + { + if (attackProximity is not + (BattleDefinitions.AttackProximity.MagicRange or BattleDefinitions.AttackProximity.MagicReach)) + { + return; + } + + attackModifier.AttackAdvantageTrends.Add(_trendInfo); + } + } + private sealed class TryAlterOutcomeAttributeCheckSorcererMagicalGuidance : ITryAlterOutcomeAttributeCheck { public IEnumerator OnTryAlterAttributeCheck( From c8dd56a398561009a8707e498353bf9112fe1293 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 2 Nov 2024 20:21:35 -0700 Subject: [PATCH 35/85] update collaterals --- .../UnfinishedBusinessBlueprints/Assets.txt | 3 ++ .../ConditionSorcererInnateSorcery.json | 6 +-- .../FeatureBardSuperiorInspiration2024.json | 30 +++++++++++++ .../AutoPreparedSpellsBardWordOfCreation.json | 43 +++++++++++++++++++ .../MagicAffinitySorcererInnateSorcery.json | 6 +-- .../PowerSorcererInnateSorcery.json | 14 +++--- .../ChangelogHistory.txt | 5 ++- .../Translations/de/Others-de.txt | 6 ++- .../Translations/de/Settings-de.txt | 3 ++ .../Translations/en/Others-en.txt | 6 ++- .../Translations/en/Settings-en.txt | 11 +++-- .../Translations/es/Others-es.txt | 6 ++- .../Translations/es/Settings-es.txt | 3 ++ .../Translations/fr/Others-fr.txt | 6 ++- .../Translations/fr/Settings-fr.txt | 3 ++ .../Translations/it/Others-it.txt | 6 ++- .../Translations/it/Settings-it.txt | 3 ++ .../Translations/ja/Others-ja.txt | 6 ++- .../Translations/ja/Settings-ja.txt | 3 ++ .../Translations/ko/Others-ko.txt | 6 ++- .../Translations/ko/Settings-ko.txt | 3 ++ .../Translations/pt-BR/Others-pt-BR.txt | 6 ++- .../Translations/pt-BR/Settings-pt-BR.txt | 3 ++ .../Translations/ru/Others-ru.txt | 6 ++- .../Translations/ru/Settings-ru.txt | 3 ++ .../Translations/zh-CN/Others-zh-CN.txt | 6 ++- .../Translations/zh-CN/Settings-zh-CN.txt | 3 ++ 27 files changed, 167 insertions(+), 38 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/FeatureBardSuperiorInspiration2024.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAutoPreparedSpells/AutoPreparedSpellsBardWordOfCreation.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 67e3a4936b..3b7863fef1 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -2045,6 +2045,7 @@ AttributeModifierWendigoDexterityAbilityScoreIncrease FeatureDefinitionAttribute AttributeModifierWendigoStrengthAbilityScoreIncrease FeatureDefinitionAttributeModifier FeatureDefinition 3862f3be-8838-57af-a425-d85714a2dfba AutoPreparedSpellsAncientForest FeatureDefinitionAutoPreparedSpells FeatureDefinition d8e3a948-e182-50a1-9ef4-f013a8a0436f AutoPreparedSpellsArcanist FeatureDefinitionAutoPreparedSpells FeatureDefinition 82245fef-4569-5ac9-8e11-8447d946aa5c +AutoPreparedSpellsBardWordOfCreation FeatureDefinitionAutoPreparedSpells FeatureDefinition bb747a1f-f939-58b0-a0f9-c2ffb381efdd AutoPreparedSpellsCircleOfTheCosmosConstellationMap FeatureDefinitionAutoPreparedSpells FeatureDefinition ee4daf40-cb0e-5508-a21c-48e14f0d912f AutoPreparedSpellsCircleOfTheLife FeatureDefinitionAutoPreparedSpells FeatureDefinition 62509286-9488-565a-b80e-27c089bff36f AutoPreparedSpellsCircleOfTheWildfire FeatureDefinitionAutoPreparedSpells FeatureDefinition 419c465d-a412-5c6a-b608-23e931953e12 @@ -2344,6 +2345,7 @@ FeatureAdaptiveStrategy FeatureDefinitionFeatureSet FeatureDefinition 233c2b1c-b FeatureAlwaysReady FeatureDefinition FeatureDefinition 4f421b5c-5783-5b84-861c-08700dea1535 FeatureAstralReach FeatureDefinition FeatureDefinition 038ffe12-debd-5087-bb29-627893d8a094 FeatureBardSuperiorInspiration FeatureDefinition FeatureDefinition e9869341-0ef1-545b-847f-92f5231d49ae +FeatureBardSuperiorInspiration2024 FeatureDefinition FeatureDefinition f7384378-33f7-518c-8ea5-05d78104d4e8 FeatureCaveWyrmkinChargingStrike FeatureDefinition FeatureDefinition ed7d158f-c1b3-5a2a-9523-277e5a52089c FeatureCaveWyrmkinPowerfulClaws FeatureDefinition FeatureDefinition 848a881d-6f83-541e-b9c2-e071dfb4b0f1 FeatureCelestialRadiantSoul FeatureDefinition FeatureDefinition 25abe76c-934b-50a1-bb06-e205cd576d0c @@ -5147,6 +5149,7 @@ FeaturePathOfTheSavageryFuriousDefense FeatureDefinitionAttributeModifier Featur FeatureWarMagicDurableMagic FeatureDefinitionAttributeModifier FeatureDefinitionAttributeModifier d87407db-9e4a-5146-a9d4-712696f39e21 AutoPreparedSpellsAncientForest FeatureDefinitionAutoPreparedSpells FeatureDefinitionAutoPreparedSpells d8e3a948-e182-50a1-9ef4-f013a8a0436f AutoPreparedSpellsArcanist FeatureDefinitionAutoPreparedSpells FeatureDefinitionAutoPreparedSpells 82245fef-4569-5ac9-8e11-8447d946aa5c +AutoPreparedSpellsBardWordOfCreation FeatureDefinitionAutoPreparedSpells FeatureDefinitionAutoPreparedSpells bb747a1f-f939-58b0-a0f9-c2ffb381efdd AutoPreparedSpellsCircleOfTheCosmosConstellationMap FeatureDefinitionAutoPreparedSpells FeatureDefinitionAutoPreparedSpells ee4daf40-cb0e-5508-a21c-48e14f0d912f AutoPreparedSpellsCircleOfTheLife FeatureDefinitionAutoPreparedSpells FeatureDefinitionAutoPreparedSpells 62509286-9488-565a-b80e-27c089bff36f AutoPreparedSpellsCircleOfTheWildfire FeatureDefinitionAutoPreparedSpells FeatureDefinitionAutoPreparedSpells 419c465d-a412-5c6a-b608-23e931953e12 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererInnateSorcery.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererInnateSorcery.json index 051cb12b2d..3792ec5d35 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererInnateSorcery.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererInnateSorcery.json @@ -134,9 +134,9 @@ "description": "Condition/&ConditionSorcererInnateSorceryDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "6f6332b4e90598d429c91c2e6862a8f3", + "m_SubObjectName": "Pentagram", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/FeatureBardSuperiorInspiration2024.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/FeatureBardSuperiorInspiration2024.json new file mode 100644 index 0000000000..fa19ad2570 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/FeatureBardSuperiorInspiration2024.json @@ -0,0 +1,30 @@ +{ + "$type": "FeatureDefinition, Assembly-CSharp", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&FeatureBardSuperiorInspiration2024Title", + "description": "Feature/&FeatureBardSuperiorInspiration2024Description", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "f7384378-33f7-518c-8ea5-05d78104d4e8", + "contentPack": 9999, + "name": "FeatureBardSuperiorInspiration2024" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAutoPreparedSpells/AutoPreparedSpellsBardWordOfCreation.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAutoPreparedSpells/AutoPreparedSpellsBardWordOfCreation.json new file mode 100644 index 0000000000..536ddcc83e --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAutoPreparedSpells/AutoPreparedSpellsBardWordOfCreation.json @@ -0,0 +1,43 @@ +{ + "$type": "FeatureDefinitionAutoPreparedSpells, Assembly-CSharp", + "autopreparedTag": "College", + "autoPreparedSpellsGroups": [ + { + "$type": "FeatureDefinitionAutoPreparedSpells+AutoPreparedSpellsGroup, Assembly-CSharp", + "classLevel": 9, + "spellsList": [ + "Definition:PowerWordHeal:f9e2477f-fbee-5778-8ffc-c0380c0dea7d", + "Definition:PowerWordKill:7d618d6a-004a-539e-a996-e180936abe9c" + ] + } + ], + "spellcastingClass": "Definition:Bard:8d8eb73e8e6c7d24789c3381ab0acccb", + "affinityRace": null, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&AutoPreparedSpellsBardWordOfCreationTitle", + "description": "Feature/&AutoPreparedSpellsBardWordOfCreationDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "bb747a1f-f939-58b0-a0f9-c2ffb381efdd", + "contentPack": 9999, + "name": "AutoPreparedSpellsBardWordOfCreation" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionMagicAffinity/MagicAffinitySorcererInnateSorcery.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionMagicAffinity/MagicAffinitySorcererInnateSorcery.json index de6e6acb6a..a872791046 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionMagicAffinity/MagicAffinitySorcererInnateSorcery.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionMagicAffinity/MagicAffinitySorcererInnateSorcery.json @@ -52,9 +52,9 @@ "otherCharacterFamilyRestrictions": [], "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, - "title": "Feature/&NoContentTitle", - "description": "Feature/&NoContentTitle", + "hidden": false, + "title": "Feature/&PowerSorcererInnateSorceryTitle", + "description": "Feature/&PowerSorcererInnateSorceryDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", "m_AssetGUID": "", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcererInnateSorcery.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcererInnateSorcery.json index 64353ccaa5..5507dd2107 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcererInnateSorcery.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcererInnateSorcery.json @@ -115,7 +115,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_AssetGUID": "6a8b8119774067740a6895a72319a60d", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -127,7 +127,7 @@ }, "casterQuickSpellParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "68726c9b0b4ffc7499d07d4b4c4f4ec1", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -249,7 +249,7 @@ }, "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "a9d1125f03ed66a4482a3dc3be9308fc", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -261,7 +261,7 @@ }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "e3712590851cdf84ba480fad91059b34", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -332,9 +332,9 @@ "description": "Feature/&PowerSorcererInnateSorceryDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "56a5d67727cb7f04a9f3e84e0276fa94", + "m_SubObjectName": "GreaterArcaneShock", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index a13d229041..861f1f8b42 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -2,10 +2,13 @@ - added Character > Classes > 'Add Druid primal order at level 1 and remove medium armor proficiency' [OneDnd] - added Character > Classes > 'Add persuasion to Fighter skill options at level 1' [OneDnd] -- added Character > Classes > 'Change Bard bardic inspiration duration to 1hr instead of 10 minutes' [OneDnd] +- added Character > Classes > 'Change Bard bardic inspiration duration to 1hr instead of 10 minutes' [OneDnd] - added Character > Classes > 'Enable Bard Expertise at levels 2 and 9 instead of 3 and 10' [OneDnd] +- added Character > Classes > 'Enable Bard superior inspiration at level 18 instead of 20' [OneDnd] +- added Character > Classes > 'Enable Bard words of creation at level 18' [OneDnd] - added Character > Classes > 'Enable Sorcerer innate sorcery at level 1' [OneDnd] - added Character > Classes > 'Enable Warlock magical cunning at level 2' [OneDnd] +- added Character > Classes > 'Remove Bard magical secrets at levels 14 and 18' [OneDnd] - added Character > Classes > 'Remove Bard song of rest at level 2' [OneDnd] - added Character > Classes > 'Swap Druid weapon proficiency with 5e 2024 version' [OneDnd] - added Character > Classes > 'Swap Fighter second wind to use 5e 2024 usages progression' [OneDnd] diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index a149a2117b..3b8e56a86d 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -93,10 +93,14 @@ Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=Kampfkunst – Bon Feature/&AttributeModifierDazzledTitle=Geblendet Feature/&AttributeModifierMonkAbundantKiDescription=Fügen Sie Ihrem Ki-Punkte-Pool die Hälfte Ihres Kompetenzbonus (abgerundet) hinzu. Feature/&AttributeModifierMonkAbundantKiTitle=Reichlich Ki +Feature/&AutoPreparedSpellsBardWordOfCreationDescription=Du hast zwei der wichtigsten Worte der Schöpfung gemeistert: die Worte des Lebens und des Todes. Du hast daher immer die Zauber „Machtwort heilen“ und „Machtwort töten“ parat. Wenn du einen der Zauber wirkst, kannst du damit eine zweite Kreatur anvisieren, wenn sich diese innerhalb von 10 Fuß vom ersten Ziel befindet. +Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Welten der Schöpfung Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=Wenn dir ein Rettungswurf misslingt, kannst du ihn mit einem Bonus wiederholen, der deiner Kämpferstufe entspricht. Wenn du das tust, musst du den neuen Wurf verwenden und kannst diese Funktion nicht erneut verwenden, bis du eine lange Pause beendet hast. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Erweiterte Zauber +Feature/&FeatureBardSuperiorInspiration2024Description=Wenn Sie die Initiative ergreifen, erhalten Sie verbrauchte Anwendungen der Bardischen Inspiration zurück, bis Sie zwei haben, wenn Sie weniger haben. +Feature/&FeatureBardSuperiorInspiration2024Title=Überlegene Inspiration Feature/&FeatureMonkBodyAndMindDescription=Sie haben Ihren Körper und Geist auf ein neues Niveau gebracht. Ihre Geschicklichkeit und Weisheit erhöhen sich um 4. Feature/&FeatureMonkBodyAndMindTitle=Körper und Geist Feature/&FeatureMonkHeightenedMetabolismDescription=Ihr Training hat Ihren Körper und Geist auf ein neues Niveau gebracht. Ihr Schlaghagel, Ihre Geduldige Verteidigung und Ihr Schritt des Windes erhalten die folgenden Vorteile:\n• Schlaghagel: Wenn Sie Schlaghagel verwenden, führen Sie damit drei waffenlose Schläge aus, anstatt zwei.\n• Geduldige Verteidigung: Wenn Sie Geduldige Verteidigung verwenden, erhalten Sie eine Anzahl temporärer Trefferpunkte, die zwei Würfen Ihres Kampfkunstwürfels entspricht.\n• Schritt des Windes: Wenn Sie eine der beiden Funktionen des Schritts des Windes (Entfernen oder Sprinten) verwenden, erhalten Sie auch die Vorteile des anderen Effekts. @@ -198,8 +202,6 @@ Feature/&PowerWarlockMagicalCunningTitle=Magische List Feature/&ToolGainChoicesPluralDescription=Wählen Sie {0} dieser Tools: {1} Feature/&ToolGainChoicesSingleDescription=Wählen Sie eines dieser Tools: {1} Feature/&VisionBlindsightDescription=Sie leiden an Blindsicht. -Feature/&FeatureBardSuperiorInspiration2024Description=Wenn Sie die Initiative ergreifen, erhalten Sie verbrauchte Anwendungen der Bardischen Inspiration zurück, bis Sie zwei haben, wenn Sie weniger haben. -Feature/&FeatureBardSuperiorInspiration2024Title=Überlegene Inspiration Feedback/&AdditionalDamageBrutalStrikeFormat=Brutaler Schlag Feedback/&AdditionalDamageBrutalStrikeLine=Brutaler Schlag verursacht zusätzlichen +{2} Schaden! Feedback/&AdditionalDamageSunderingBlowFormat=Trennender Schlag diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 7c9ffbd21e..ad434fde71 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -106,6 +106,8 @@ ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Aktivieren Sie den Buff und ModUi/&EnableBarbarianRegainOneRageAtShortRest=Aktiviere die Wiedererlangung einer Wut-Anwendung während einer kurzen Pause auf Level 7 ModUi/&EnableBardExpertiseOneLevelBefore=Aktivieren Sie Expertise auf den Stufen 2 und 9 statt 3 und 10. ModUi/&EnableBardHealingBalladOnLongRest=Aktivieren Sie College of Hope Healing Ballad bei langer Pause +ModUi/&EnableBardSuperiorInspirationAtLevel18=Aktiviere Überlegene Inspiration auf Level 18 statt 20 und gewähre außerdem zwei Aufladungen statt einer +ModUi/&EnableBardWordsOfCreationAtLevel20=Aktiviere Worte der Schöpfung auf Level 20 ModUi/&EnableBetaContent=Beta-Inhalte aktivieren [Neustart erforderlich] ModUi/&EnableCancelEditOnRightMouseClick=Abbruchaktionen mit rechtem Mausklick aktivieren ModUi/&EnableCantripsTriggeringOnWarMagic=Erlaube Cantrips, um einen zusätzlichen Bonusangriff von Kriegsmagie auszulösen @@ -256,6 +258,7 @@ ModUi/&Races=Rennen ModUi/&RecipeCost=Kosten des Rezepts ModUi/&RelicForgeries=Reliquienfälschungen ModUi/&RemoveAttunementRequirements=Abstimmungsanforderungen entfernen [Neustart erforderlich] +ModUi/&RemoveBardMagicalSecretAt14And18=Entfernen Sie Magisches Geheimnis bei 14 und 18 ModUi/&RemoveBardSongOfRest=Entferne Song of Rest auf Level 2 ModUi/&RemoveBugVisualModels=Ersetzen Sie im Spiel spinnenähnliche Modelle durch bärenähnliche Modelle [Spinnenphobie] [Neustart erforderlich] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Humanoidenfilter bei Grauenhaftem Gelächter entfernen diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index c18e6aa17f..fa48b53fcd 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -93,10 +93,14 @@ Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=Martial Arts - Bon Feature/&AttributeModifierDazzledTitle=Dazzled Feature/&AttributeModifierMonkAbundantKiDescription=Add half your proficiency bonus (rounded down) to your Ki Points pool. Feature/&AttributeModifierMonkAbundantKiTitle=Abundant Ki +Feature/&AutoPreparedSpellsBardWordOfCreationDescription=You have mastered two of the prime Words of Creation: the words of life and death. You therefore always have the Power Word Heal and Power Word Kill spells prepared. When you cast either spell, you can target a second creature with it if the creature is within 10 feet of the first target. +Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Worlds of Creation Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=If you fail a saving throw, you can reroll it with a bonus equal to your Fighter level. If you do so, you must use the new roll, and you can't use this feature again until you finish a long rest. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Expanded Spells +Feature/&FeatureBardSuperiorInspiration2024Description=When you roll Initiative, you regain expended uses of Bardic Inspiration until you have two if you have fewer that that. +Feature/&FeatureBardSuperiorInspiration2024Title=Superior Inspiration Feature/&FeatureMonkBodyAndMindDescription=You have honed your body and mind to new heights. Your Dexterity and Wisdom increase by 4. Feature/&FeatureMonkBodyAndMindTitle=Body and Mind Feature/&FeatureMonkHeightenedMetabolismDescription=Your training has pushed your body and mind to new levels. Your Flurry of Blows, Patient Defense, and Step of the Wind gain the following benefits:\n• Flurry of Blows: When you use Flurry of Blows, you make three Unarmed Strikes with it instead of two.\n• Patient Defense: When you use Patient Defense, you gain a number of temporary hit points equal to two rolls of your Martial Arts die.\n• Step of the Wind: When you use either Step of the Wind feature (Disengage or Dash), you also gain the benefits of the other effect. @@ -198,8 +202,6 @@ Feature/&PowerWarlockMagicalCunningTitle=Magical Cunning Feature/&ToolGainChoicesPluralDescription=Choose {0} of these tools: {1} Feature/&ToolGainChoicesSingleDescription=Choose one of these tools: {1} Feature/&VisionBlindsightDescription=You have blindsight. -Feature/&FeatureBardSuperiorInspiration2024Description=When you roll Initiative, you regain expended uses of Bardic Inspiration until you have two if you have fewer that that. -Feature/&FeatureBardSuperiorInspiration2024Title=Superior Inspiration Feedback/&AdditionalDamageBrutalStrikeFormat=Brutal Strike Feedback/&AdditionalDamageBrutalStrikeLine=Brutal Strike deals extra +{2} damage! Feedback/&AdditionalDamageSunderingBlowFormat=Sundering Blow diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 405f9f75a3..af7ebdec4a 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -106,6 +106,8 @@ ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Enable Reckl ModUi/&EnableBarbarianRegainOneRageAtShortRest=Enable regain one Rage use over a short rest at level 7 ModUi/&EnableBardExpertiseOneLevelBefore=Enable Expertise at levels 2 and 9 instead of 3 and 10 ModUi/&EnableBardHealingBalladOnLongRest=Enable College of Hope Healing Ballad on long rest +ModUi/&EnableBardSuperiorInspirationAtLevel18=Enable Superior Inspiration at level 18 instead of 20 and also grant two recharges instead of 1 +ModUi/&EnableBardWordsOfCreationAtLevel20=Enable Words of Creation at level 20 ModUi/&EnableBetaContent=Enable beta content [Requires Restart] ModUi/&EnableCancelEditOnRightMouseClick=Enable cancel actions with right mouse click ModUi/&EnableCantripsTriggeringOnWarMagic=Allow cantrips to trigger War Magic extra bonus attack @@ -256,6 +258,7 @@ ModUi/&Races=Races ModUi/&RecipeCost=Recipe's cost ModUi/&RelicForgeries=Relic Forgeries ModUi/&RemoveAttunementRequirements=Remove attunement requirements [Requires Restart] +ModUi/&RemoveBardMagicalSecretAt14And18=Remove Magical Secret at levels 14 and 18 ModUi/&RemoveBardSongOfRest=Remove Song of Rest at level 2 ModUi/&RemoveBugVisualModels=Replace spider like models with bear like models in the game [arachnophobia] [Requires Restart] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Remove humanoid filter on Hideous Laughter @@ -306,12 +309,12 @@ ModUi/&Subraces=Subraces ModUi/&SwapAbjurationSavant=Swap Abjurer Abjuration Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] ModUi/&SwapCraftedItemAndRecipeIcons=+ Swap recipe and crafted item icons in shop ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Swap Weapon Proficiency with 5e 2024 version [simple weapons instead of weapon types but you lose Scimitar proficiency] -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip features +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip on progression ModUi/&SwapEvocationSavant=Swap Evoker Evocation Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] -ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Swap Unarmed Attack to use 5e 2024 die type progression +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Enable Unarmed Attack to use 5e 2024 die type progression ModUi/&SwapOneDndBarkskinSpell=Swap Barkskin with 5e 2024 version [bonus action, no concentration, AC set to 17] -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Swap Second Wind to use 5e 2024 usages progression -ModUi/&SwapWarlockToUseOneDndInvocationProgression=Swap Invocations progression with 5e 2024 version +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Enable Second Wind to use 5e 2024 usages progression +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Enable Invocations o use 5e 2024 progression ModUi/&TableTopButton=Select Tabletop content ModUi/&TableTopHelp1=• Following sections re-group and duplicate 5e 2014 and 2024 settings scattered across the mod for your convenience ModUi/&TableTopHelp2=• Press the button to select only tabletop content under Character tab, and select all options below for a true TT experience diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index ae254e4cf5..2e535df318 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -93,10 +93,14 @@ Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=Artes marciales: B Feature/&AttributeModifierDazzledTitle=Deslumbrado Feature/&AttributeModifierMonkAbundantKiDescription=Añade la mitad de tu bonificación de competencia (redondeada hacia abajo) a tu reserva de puntos Ki. Feature/&AttributeModifierMonkAbundantKiTitle=Ki abundante +Feature/&AutoPreparedSpellsBardWordOfCreationDescription=Has dominado dos de las palabras principales de la creación: las palabras de vida y muerte. Por lo tanto, siempre tienes preparados los hechizos Palabra de poder sanar y Palabra de poder matar. Cuando lanzas cualquiera de los hechizos, puedes seleccionar una segunda criatura con él si la criatura está a 10 pies o menos del primer objetivo. +Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Mundos de la creación Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=Si fallas una tirada de salvación, puedes repetirla con una bonificación igual a tu nivel de luchador. Si lo haces, debes usar la nueva tirada y no puedes volver a usar esta característica hasta que termines un descanso prolongado. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Hechizos ampliados +Feature/&FeatureBardSuperiorInspiration2024Description=Cuando tiras Iniciativa, recuperas los usos gastados de Inspiración bárdica hasta que tengas dos si tienes menos que eso. +Feature/&FeatureBardSuperiorInspiration2024Title=Inspiración superior Feature/&FeatureMonkBodyAndMindDescription=Has perfeccionado tu cuerpo y tu mente hasta alcanzar nuevas cotas. Tu destreza y sabiduría aumentan en 4. Feature/&FeatureMonkBodyAndMindTitle=Cuerpo y mente Feature/&FeatureMonkHeightenedMetabolismDescription=Tu entrenamiento ha llevado tu cuerpo y tu mente a nuevos niveles. Tus Ráfaga de golpes, Defensa paciente y Paso del viento obtienen los siguientes beneficios:\n• Ráfaga de golpes: cuando usas Ráfaga de golpes, realizas tres Golpes sin armas con ella en lugar de dos.\n• Defensa paciente: cuando usas Defensa paciente, obtienes una cantidad de puntos de golpe temporales igual a dos tiradas de tu dado de Artes marciales.\n• Paso del viento: cuando usas cualquiera de las características de Paso del viento (Desengancharse o Correr), también obtienes los beneficios del otro efecto. @@ -198,8 +202,6 @@ Feature/&PowerWarlockMagicalCunningTitle=Astucia mágica Feature/&ToolGainChoicesPluralDescription=Elija {0} de estas herramientas: {1} Feature/&ToolGainChoicesSingleDescription=Elija una de estas herramientas: {1} Feature/&VisionBlindsightDescription=Tienes visión ciega. -Feature/&FeatureBardSuperiorInspiration2024Description=Cuando tiras Iniciativa, recuperas los usos gastados de Inspiración bárdica hasta que tengas dos si tienes menos que eso. -Feature/&FeatureBardSuperiorInspiration2024Title=Inspiración superior Feedback/&AdditionalDamageBrutalStrikeFormat=Golpe brutal Feedback/&AdditionalDamageBrutalStrikeLine=¡Golpe brutal inflige +{2} de daño adicional! Feedback/&AdditionalDamageSunderingBlowFormat=Golpe desgarrador diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index e4ff425042..c47ad3297e 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -107,6 +107,8 @@ ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Habilitar el beneficio y de ModUi/&EnableBarbarianRegainOneRageAtShortRest=Permite recuperar un uso de Furia durante un descanso corto en el nivel 7 ModUi/&EnableBardExpertiseOneLevelBefore=Habilitar Experiencia en los niveles 2 y 9 en lugar de 3 y 10 ModUi/&EnableBardHealingBalladOnLongRest=Habilitar College of Hope Healing Ballad en descanso largo +ModUi/&EnableBardSuperiorInspirationAtLevel18=Habilita Inspiración superior en el nivel 18 en lugar de 20 y también otorga dos recargas en lugar de 1. +ModUi/&EnableBardWordsOfCreationAtLevel20=Habilita Palabras de creación en el nivel 20 ModUi/&EnableBetaContent=Habilitar contenido beta [Requiere reinicio] ModUi/&EnableCancelEditOnRightMouseClick=Habilitar acciones de cancelación con clic derecho del mouse ModUi/&EnableCantripsTriggeringOnWarMagic=Permitir que los trucos activen el ataque adicional adicional de Magia de guerra @@ -257,6 +259,7 @@ ModUi/&Races=Razas ModUi/&RecipeCost=Costo de la receta ModUi/&RelicForgeries=Falsificaciones de reliquias ModUi/&RemoveAttunementRequirements=Eliminar requisitos de sintonización [Requiere reinicio] +ModUi/&RemoveBardMagicalSecretAt14And18=Eliminar Secreto Mágico en 14 y 18 ModUi/&RemoveBardSongOfRest=Eliminar Canción de descanso en el nivel 2 ModUi/&RemoveBugVisualModels=Reemplaza los modelos tipo araña por modelos tipo oso en el juego. [arachnophobia] [Requiere reinicio] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Eliminar filtro humanoide en Risas espantosas diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index b05e83e088..d766b7ad3a 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -93,10 +93,14 @@ Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=Arts martiaux - Bo Feature/&AttributeModifierDazzledTitle=Ébloui Feature/&AttributeModifierMonkAbundantKiDescription=Ajoutez la moitié de votre bonus de maîtrise (arrondi à l'inférieur) à votre réserve de points Ki. Feature/&AttributeModifierMonkAbundantKiTitle=Ki abondant +Feature/&AutoPreparedSpellsBardWordOfCreationDescription=Vous maîtrisez deux des principaux mots de la création : les mots de vie et de mort. Vous avez donc toujours les sorts Mot de pouvoir Soin et Mot de pouvoir Tuer prêts. Lorsque vous lancez l'un de ces sorts, vous pouvez cibler une seconde créature avec celui-ci si celle-ci se trouve à 3 mètres ou moins de la première cible. +Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Mondes de la Création Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=Si vous ratez un jet de sauvegarde, vous pouvez le relancer avec un bonus égal à votre niveau de Combattant. Dans ce cas, vous devez utiliser le nouveau jet et vous ne pouvez pas utiliser cette fonction à nouveau avant d'avoir terminé un repos long. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Sorts étendus +Feature/&FeatureBardSuperiorInspiration2024Description=Lorsque vous lancez Initiative, vous récupérez les utilisations dépensées d'Inspiration bardique jusqu'à ce que vous en ayez deux si vous en avez moins. +Feature/&FeatureBardSuperiorInspiration2024Title=Inspiration supérieure Feature/&FeatureMonkBodyAndMindDescription=Vous avez perfectionné votre corps et votre esprit vers de nouveaux sommets. Votre Dextérité et votre Sagesse augmentent de 4. Feature/&FeatureMonkBodyAndMindTitle=Corps et esprit Feature/&FeatureMonkHeightenedMetabolismDescription=Votre entraînement a poussé votre corps et votre esprit à de nouveaux sommets. Vos effets Déluge de coups, Défense patiente et Pas du vent vous confèrent les avantages suivants :\n• Déluge de coups : lorsque vous utilisez Déluge de coups, vous effectuez trois attaques à mains nues au lieu de deux.\n• Défense patiente : lorsque vous utilisez Défense patiente, vous gagnez un nombre de points de vie temporaires égal à deux lancers de votre dé d'arts martiaux.\n• Pas du vent : lorsque vous utilisez l'une des fonctions Pas du vent (Désengagement ou Flèche), vous bénéficiez également des avantages de l'autre effet. @@ -198,8 +202,6 @@ Feature/&PowerWarlockMagicalCunningTitle=Ruse magique Feature/&ToolGainChoicesPluralDescription=Choisissez {0} de ces outils : {1} Feature/&ToolGainChoicesSingleDescription=Choisissez l'un de ces outils : {1} Feature/&VisionBlindsightDescription=Vous avez la vision aveugle. -Feature/&FeatureBardSuperiorInspiration2024Description=Lorsque vous lancez Initiative, vous récupérez les utilisations dépensées d'Inspiration bardique jusqu'à ce que vous en ayez deux si vous en avez moins. -Feature/&FeatureBardSuperiorInspiration2024Title=Inspiration supérieure Feedback/&AdditionalDamageBrutalStrikeFormat=Grève brutale Feedback/&AdditionalDamageBrutalStrikeLine=Frappe brutale inflige +{2} dégâts supplémentaires ! Feedback/&AdditionalDamageSunderingBlowFormat=Coup destructeur diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 84de3a001b..b24b9e41c2 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -106,6 +106,8 @@ ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Activez le buff et le debuf ModUi/&EnableBarbarianRegainOneRageAtShortRest=Permet de récupérer une utilisation de Rage sur un repos court au niveau 7 ModUi/&EnableBardExpertiseOneLevelBefore=Activer l'Expertise aux niveaux 2 et 9 au lieu de 3 et 10 ModUi/&EnableBardHealingBalladOnLongRest=Activez College of Hope Healing Ballad en mode repos prolongé +ModUi/&EnableBardSuperiorInspirationAtLevel18=Activez Inspiration supérieure au niveau 18 au lieu de 20 et accordez également deux recharges au lieu d'une +ModUi/&EnableBardWordsOfCreationAtLevel20=Activer les Paroles de création au niveau 20 ModUi/&EnableBetaContent=Activer le contenu bêta [Nécessite un redémarrage] ModUi/&EnableCancelEditOnRightMouseClick=Activer les actions d'annulation avec un clic droit de la souris ModUi/&EnableCantripsTriggeringOnWarMagic=Autoriser les tours de passe-passe à déclencher une attaque bonus supplémentaire de Magie de guerre @@ -256,6 +258,7 @@ ModUi/&Races=Les courses ModUi/&RecipeCost=Coût de la recette ModUi/&RelicForgeries=Contrefaçons de reliques ModUi/&RemoveAttunementRequirements=Supprimer les exigences d'harmonisation [Nécessite un redémarrage] +ModUi/&RemoveBardMagicalSecretAt14And18=Supprimer Secret magique à 14 et 18 ModUi/&RemoveBardSongOfRest=Supprimez Chant de repos au niveau 2 ModUi/&RemoveBugVisualModels=Remplacez les modèles ressemblant à des araignées par des modèles ressemblant à des ours dans le jeu [arachnophobie] [Nécessite un redémarrage] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Supprimer le filtre humanoïde sur Hideous Laugher diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 0217237943..bba869d7b1 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -93,10 +93,14 @@ Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=Arti marziali - Bo Feature/&AttributeModifierDazzledTitle=Abbagliato Feature/&AttributeModifierMonkAbundantKiDescription=Aggiungi metà del tuo bonus di competenza (arrotondato per difetto) al tuo pool di Punti Ki. Feature/&AttributeModifierMonkAbundantKiTitle=Ki abbondante +Feature/&AutoPreparedSpellsBardWordOfCreationDescription=Hai padroneggiato due delle principali Parole della Creazione: le parole di vita e di morte. Pertanto hai sempre pronti gli incantesimi Power Word Heal e Power Word Kill. Quando lanci uno dei due incantesimi, puoi bersagliare una seconda creatura con esso se la creatura si trova entro 10 piedi dal primo bersaglio. +Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Mondi della creazione Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=Se fallisci un tiro salvezza, puoi rilanciarlo con un bonus pari al tuo livello da Guerriero. Se lo fai, devi usare il nuovo tiro e non puoi usare di nuovo questa caratteristica finché non finisci un riposo lungo. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Incantesimi espansi +Feature/&FeatureBardSuperiorInspiration2024Description=Quando tiri per l'Iniziativa, recuperi gli usi spesi di Ispirazione Bardica finché non ne hai due, se ne hai meno. +Feature/&FeatureBardSuperiorInspiration2024Title=Ispirazione superiore Feature/&FeatureMonkBodyAndMindDescription=Hai affinato il tuo corpo e la tua mente a nuove vette. La tua Destrezza e Saggezza aumentano di 4. Feature/&FeatureMonkBodyAndMindTitle=Corpo e mente Feature/&FeatureMonkHeightenedMetabolismDescription=Il tuo allenamento ha spinto il tuo corpo e la tua mente a nuovi livelli. La tua Raffica di Colpi, Difesa Paziente e Passo del Vento ottengono i seguenti benefici:\n• Raffica di Colpi: quando usi Raffica di Colpi, esegui tre Colpi Senz'Armi invece di due.\n• Difesa Paziente: quando usi Difesa Paziente, ottieni un numero di punti ferita temporanei pari a due tiri del tuo dado Arti Marziali.\n• Passo del Vento: quando usi una delle caratteristiche di Passo del Vento (Disimpegno o Scatto), ottieni anche i benefici dell'altro effetto. @@ -198,8 +202,6 @@ Feature/&PowerWarlockMagicalCunningTitle=Astuzia magica Feature/&ToolGainChoicesPluralDescription=Scegli {0} di questi strumenti: {1} Feature/&ToolGainChoicesSingleDescription=Scegli uno di questi strumenti: {1} Feature/&VisionBlindsightDescription=Hai la vista cieca. -Feature/&FeatureBardSuperiorInspiration2024Description=Quando tiri per l'Iniziativa, recuperi gli usi spesi di Ispirazione Bardica finché non ne hai due, se ne hai meno. -Feature/&FeatureBardSuperiorInspiration2024Title=Ispirazione superiore Feedback/&AdditionalDamageBrutalStrikeFormat=Colpo brutale Feedback/&AdditionalDamageBrutalStrikeLine=Colpo Brutale infligge +{2} danni extra! Feedback/&AdditionalDamageSunderingBlowFormat=Colpo dirompente diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index a937ff175f..e51280cfaf 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -106,6 +106,8 @@ ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Abilita il buff e il debuff ModUi/&EnableBarbarianRegainOneRageAtShortRest=Abilita il recupero di un utilizzo di Rabbia durante un breve riposo al livello 7 ModUi/&EnableBardExpertiseOneLevelBefore=Abilita Competenza ai livelli 2 e 9 invece che 3 e 10 ModUi/&EnableBardHealingBalladOnLongRest=Abilita College of Hope Ballata curativa durante il riposo lungo +ModUi/&EnableBardSuperiorInspirationAtLevel18=Abilita Ispirazione superiore al livello 18 invece che 20 e concedi anche due ricariche invece di 1 +ModUi/&EnableBardWordsOfCreationAtLevel20=Abilita Parole di Creazione al livello 20 ModUi/&EnableBetaContent=Abilita contenuto beta [Richiede riavvio] ModUi/&EnableCancelEditOnRightMouseClick=Abilita l'annullamento delle azioni con il clic destro del mouse ModUi/&EnableCantripsTriggeringOnWarMagic=Consenti ai trucchetti di attivare l'attacco bonus extra Magia di guerra @@ -256,6 +258,7 @@ ModUi/&Races=Razze ModUi/&RecipeCost=Costo della ricetta ModUi/&RelicForgeries=Falsificazioni di reliquie ModUi/&RemoveAttunementRequirements=Rimuovi i requisiti di sintonizzazione [Richiede riavvio] +ModUi/&RemoveBardMagicalSecretAt14And18=Rimuovi Segreto magico a 14 e 18 ModUi/&RemoveBardSongOfRest=Rimuovi Canzone del Riposo al livello 2 ModUi/&RemoveBugVisualModels=Sostituisci i modelli simili a ragni con modelli simili a orsi nel gioco [aracnofobia] [Richiede riavvio] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Rimuovi filtro umanoide su Risata orribile diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index e38eb5c7ef..d460ba1717 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -93,10 +93,14 @@ Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=マーシャルア Feature/&AttributeModifierDazzledTitle=AC Penalty Feature/&AttributeModifierMonkAbundantKiDescription=熟練度ボーナスの半分(切り捨て)を Ki ポイント プールに追加します。 Feature/&AttributeModifierMonkAbundantKiTitle=豊かな気 +Feature/&AutoPreparedSpellsBardWordOfCreationDescription=あなたは創造の御言葉のうち、生命と死の御言葉の 2 つをマスターしました。そのため、あなたは常にパワー ワード ヒール呪文とパワー ワード キル呪文を準備しています。いずれかの呪文を唱えるときに、クリーチャーが最初のターゲットから 10 フィート以内にいる場合、2 番目のクリーチャーをその呪文でターゲットにすることができます。 +Feature/&AutoPreparedSpellsBardWordOfCreationTitle=創造の世界 Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=セーヴィング スローに失敗した場合は、ファイター レベルに等しいボーナスを獲得して再ロールできます。その場合は、新しいロールを使用する必要があり、長い休憩が終了するまでこの機能を再度使用することはできません。 Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=拡張された呪文 +Feature/&FeatureBardSuperiorInspiration2024Description=イニシアティブをロールすると、消費したバード インスピレーションの使用回数が 2 回になるまで回復します (2 回未満の場合)。 +Feature/&FeatureBardSuperiorInspiration2024Title=優れたインスピレーション Feature/&FeatureMonkBodyAndMindDescription=あなたは肉体と精神を新たな高みにまで磨き上げました。あなたの器用さと知恵は 4 増加します。 Feature/&FeatureMonkBodyAndMindTitle=体と心 Feature/&FeatureMonkHeightenedMetabolismDescription=あなたのトレーニングはあなたの体と心を新たなレベルに押し上げました。 Flurry of Blows、Patient Defense、Step of the Wind には次の利点があります:\n• Flurry of Blows: Flurry of Blows を使用すると、素手攻撃を 2 回ではなく 3 回行うことができます。\n• 患者の防御: 患者の防御を使用すると、格闘技ダイスの 2 ロールに等しい一時的なヒット ポイントを獲得します。\n• 風のステップ: 風のステップの機能 (離脱またはダッシュ) を使用すると、他の効果の恩恵も受けます。 @@ -198,8 +202,6 @@ Feature/&PowerWarlockMagicalCunningTitle=魔法の狡猾さ Feature/&ToolGainChoicesPluralDescription=次のツールから {0} 個を選択してください: {1} Feature/&ToolGainChoicesSingleDescription=次のツールのいずれかを選択します: {1} Feature/&VisionBlindsightDescription=あなたは盲目です。 -Feature/&FeatureBardSuperiorInspiration2024Description=イニシアティブをロールすると、消費したバード インスピレーションの使用回数が 2 回になるまで回復します (2 回未満の場合)。 -Feature/&FeatureBardSuperiorInspiration2024Title=優れたインスピレーション Feedback/&AdditionalDamageBrutalStrikeFormat=ブルータル・ストライク Feedback/&AdditionalDamageBrutalStrikeLine=残忍な一撃は追加の +{2} ダメージを与える! Feedback/&AdditionalDamageSunderingBlowFormat=サンダーブロウ diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index a1834fdad9..3b6fd27e6d 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -106,6 +106,8 @@ ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=無謀な攻 ModUi/&EnableBarbarianRegainOneRageAtShortRest=レベル 7 で、短い休憩中に 1 回の Rage 使用を回復できるようになります。 ModUi/&EnableBardExpertiseOneLevelBefore=エキスパートをレベル3と10ではなくレベル2と9で有効にする ModUi/&EnableBardHealingBalladOnLongRest=長い休息時に希望の大学 癒しのバラードを有効にする +ModUi/&EnableBardSuperiorInspirationAtLevel18=優れたインスピレーションをレベル20ではなくレベル18で有効化し、リチャージ回数を1回ではなく2回付与する +ModUi/&EnableBardWordsOfCreationAtLevel20=レベル20で創造の言葉を有効にする ModUi/&EnableBetaContent=ベータ版コンテンツを有効にする [再起動が必要] ModUi/&EnableCancelEditOnRightMouseClick=マウスの右クリックでキャンセルアクションを有効にする ModUi/&EnableCantripsTriggeringOnWarMagic=呪文で戦争魔法の追加ボーナス攻撃を発動できるようにする @@ -256,6 +258,7 @@ ModUi/&Races=レース ModUi/&RecipeCost=レシピのコスト ModUi/&RelicForgeries=遺物の偽造 ModUi/&RemoveAttunementRequirements=調整要件を削除します [再起動が必要です] +ModUi/&RemoveBardMagicalSecretAt14And18=14と18の魔法の秘密を削除します ModUi/&RemoveBardSongOfRest=レベル2で安息の歌を削除します ModUi/&RemoveBugVisualModels=ゲーム内のクモのようなモデルをクマのようなモデルに置き換えます [クモ恐怖症] [再起動が必要] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Hideous Laughter のヒューマノイド フィルターを削除します diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 5fd3a054e3..29b1e12b1a 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -93,10 +93,14 @@ Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=무술 - 보너스 Feature/&AttributeModifierDazzledTitle=AC Penalty Feature/&AttributeModifierMonkAbundantKiDescription=당신의 숙련도 보너스 절반(반올림)을 Ki 포인트 풀에 추가하십시오. Feature/&AttributeModifierMonkAbundantKiTitle=풍부한 기 +Feature/&AutoPreparedSpellsBardWordOfCreationDescription=당신은 창조의 두 가지 주요 단어, 즉 생명과 죽음의 단어를 마스터했습니다. 따라서 당신은 항상 파워 워드 힐과 파워 워드 킬 주문을 준비합니다. 두 주문을 시전할 때, 생물이 첫 번째 대상에서 10피트 이내에 있는 경우 두 번째 생물을 대상으로 지정할 수 있습니다. +Feature/&AutoPreparedSpellsBardWordOfCreationTitle=창조의 세계 Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=내성 굴림에 실패하면 파이터 레벨과 동일한 보너스를 받아 다시 굴릴 수 있습니다. 그럴 경우 새 롤을 사용해야 하며, 긴 휴식을 마칠 때까지 이 기능을 다시 사용할 수 없습니다. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=확장된 주문 +Feature/&FeatureBardSuperiorInspiration2024Description=주도권을 굴릴 때, 바드 영감의 소모한 사용 횟수를 회복합니다. 소모한 사용 횟수가 두 개보다 적다면 다시 두 개를 사용할 수 있습니다. +Feature/&FeatureBardSuperiorInspiration2024Title=뛰어난 영감 Feature/&FeatureMonkBodyAndMindDescription=당신은 몸과 마음을 새로운 차원으로 연마했습니다. 민첩성과 지혜가 4 증가합니다. Feature/&FeatureMonkBodyAndMindTitle=몸과 마음 Feature/&FeatureMonkHeightenedMetabolismDescription=당신의 훈련은 당신의 몸과 마음을 새로운 수준으로 끌어 올렸습니다. Flurry of Blows, Patient Defense 및 Step of the Wind는 다음과 같은 이점을 얻습니다.\n• Flurry of Blows: Flurry of Blows를 사용하면 2번이 아닌 3번의 비무장 공격이 가능합니다.\n• 환자 방어 : 환자 방어를 사용하면 무술 주사위 굴림 2개에 해당하는 임시 체력을 얻습니다.\n• 바람의 발걸음: 바람의 발걸음 기능(해제 또는 돌진)을 사용하면 다른 효과의 이점도 얻습니다. @@ -198,8 +202,6 @@ Feature/&PowerWarlockMagicalCunningTitle=마법의 교활함 Feature/&ToolGainChoicesPluralDescription=다음 도구 중 {0}개를 선택하세요: {1} Feature/&ToolGainChoicesSingleDescription=다음 도구 중 하나를 선택하십시오: {1} Feature/&VisionBlindsightDescription=당신은 시력이 없습니다. -Feature/&FeatureBardSuperiorInspiration2024Description=주도권을 굴릴 때, 바드 영감의 소모한 사용 횟수를 회복합니다. 소모한 사용 횟수가 두 개보다 적다면 다시 두 개를 사용할 수 있습니다. -Feature/&FeatureBardSuperiorInspiration2024Title=뛰어난 영감 Feedback/&AdditionalDamageBrutalStrikeFormat=잔인한 일격 Feedback/&AdditionalDamageBrutalStrikeLine=잔인한 일격이 추가로 +{2} 피해를 입힙니다! Feedback/&AdditionalDamageSunderingBlowFormat=가르는 일격 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index c70e9f0882..2db1beb79f 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -106,6 +106,8 @@ ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=다음 턴 시작 시 격노 한 번 회복 가능 ModUi/&EnableBardExpertiseOneLevelBefore=레벨 3과 10 대신 레벨 2와 9에서 전문성을 활성화합니다. ModUi/&EnableBardHealingBalladOnLongRest=긴 휴식 시 College of Hope 힐링 발라드 활성화 +ModUi/&EnableBardSuperiorInspirationAtLevel18=레벨 20 대신 레벨 18에서 우수한 영감을 활성화하고 1회 대신 2회 충전을 허용합니다. +ModUi/&EnableBardWordsOfCreationAtLevel20=레벨 20에서 창조의 말씀을 활성화합니다. ModUi/&EnableBetaContent=베타 콘텐츠 활성화 [재시작 필요] ModUi/&EnableCancelEditOnRightMouseClick=마우스 오른쪽 클릭으로 취소 작업 활성화 ModUi/&EnableCantripsTriggeringOnWarMagic=주문이 전쟁 마법 추가 보너스 공격을 발동하도록 허용합니다. @@ -256,6 +258,7 @@ ModUi/&Races=종족 ModUi/&RecipeCost=레시피 비용 ModUi/&RelicForgeries=유물 위조 ModUi/&RemoveAttunementRequirements=조율 요구 사항 제거 [재시작 필요] +ModUi/&RemoveBardMagicalSecretAt14And18=14와 18에서 마법의 비밀을 제거하세요 ModUi/&RemoveBardSongOfRest=레벨 2에서 휴식의 노래를 제거합니다. ModUi/&RemoveBugVisualModels=게임에서 거미와 유사한 모델을 곰과 유사한 모델로 교체 [거미공포증] [재시작 필요] ModUi/&RemoveHumanoidFilterOnHideousLaughter=끔찍한 웃음에서 인간형 필터를 제거하세요 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 87e21ef235..239514a499 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -93,10 +93,14 @@ Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=Artes Marciais - A Feature/&AttributeModifierDazzledTitle=Deslumbrado Feature/&AttributeModifierMonkAbundantKiDescription=Adicione metade do seu bônus de proficiência (arredondado para baixo) ao seu conjunto de Pontos Ki. Feature/&AttributeModifierMonkAbundantKiTitle=Ki abundante +Feature/&AutoPreparedSpellsBardWordOfCreationDescription=Você dominou duas das principais Palavras da Criação: as palavras de vida e morte. Portanto, você sempre tem as magias Palavra de Poder Cura e Palavra de Poder Matar preparadas. Quando você conjura qualquer uma das magias, você pode mirar em uma segunda criatura com ela se a criatura estiver a até 10 pés do primeiro alvo. +Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Mundos da Criação Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=Se você falhar em um teste de resistência, você pode refazê-lo com um bônus igual ao seu nível de Guerreiro. Se fizer isso, você deve usar o novo teste, e você não pode usar esse recurso novamente até terminar um descanso longo. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Feitiços Expandidos +Feature/&FeatureBardSuperiorInspiration2024Description=Ao rolar Iniciativa, você recupera os usos gastos de Inspiração Bárdica até que você tenha dois, se tiver menos que isso. +Feature/&FeatureBardSuperiorInspiration2024Title=Inspiração Superior Feature/&FeatureMonkBodyAndMindDescription=Você afiou seu corpo e mente a novos patamares. Sua Destreza e Sabedoria aumentam em 4. Feature/&FeatureMonkBodyAndMindTitle=Corpo e mente Feature/&FeatureMonkHeightenedMetabolismDescription=Seu treinamento levou seu corpo e mente a novos níveis. Sua Rajada de Golpes, Defesa Paciente e Passo do Vento ganham os seguintes benefícios:\n• Rajada de Golpes: Quando você usa Rajada de Golpes, você faz três Ataques Desarmados com ela em vez de dois.\n• Defesa Paciente: Quando você usa Defesa Paciente, você ganha um número de pontos de vida temporários igual a duas rolagens do seu dado de Artes Marciais.\n• Passo do Vento: Quando você usa qualquer um dos recursos Passo do Vento (Desengatar ou Disparar), você também ganha os benefícios do outro efeito. @@ -198,8 +202,6 @@ Feature/&PowerWarlockMagicalCunningTitle=Astúcia Mágica Feature/&ToolGainChoicesPluralDescription=Escolha {0} destas ferramentas: {1} Feature/&ToolGainChoicesSingleDescription=Escolha uma destas ferramentas: {1} Feature/&VisionBlindsightDescription=Você tem visão cega. -Feature/&FeatureBardSuperiorInspiration2024Description=Ao rolar Iniciativa, você recupera os usos gastos de Inspiração Bárdica até que você tenha dois, se tiver menos que isso. -Feature/&FeatureBardSuperiorInspiration2024Title=Inspiração Superior Feedback/&AdditionalDamageBrutalStrikeFormat=Ataque Brutal Feedback/&AdditionalDamageBrutalStrikeLine=Ataque Brutal causa dano extra de +{2}! Feedback/&AdditionalDamageSunderingBlowFormat=Golpe de separação diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 1f3df48967..0f71c9d4a5 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -106,6 +106,8 @@ ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Habilitar o bônus e o debu ModUi/&EnableBarbarianRegainOneRageAtShortRest=Habilitar recuperar um uso de Fúria durante um descanso curto no nível 7 ModUi/&EnableBardExpertiseOneLevelBefore=Habilitar Expertise nos níveis 2 e 9 em vez de 3 e 10 ModUi/&EnableBardHealingBalladOnLongRest=Habilitar College of Hope Healing Ballad em descanso longo +ModUi/&EnableBardSuperiorInspirationAtLevel18=Habilita Inspiração Superior no nível 18 em vez de 20 e também concede duas recargas em vez de 1 +ModUi/&EnableBardWordsOfCreationAtLevel20=Habilitar Palavras de Criação no nível 20 ModUi/&EnableBetaContent=Habilitar conteúdo beta [Requer reinicialização] ModUi/&EnableCancelEditOnRightMouseClick=Habilitar ações de cancelamento com clique direito do mouse ModUi/&EnableCantripsTriggeringOnWarMagic=Permitir que truques desencadeiem um ataque bônus extra de Magia de Guerra @@ -256,6 +258,7 @@ ModUi/&Races=Corridas ModUi/&RecipeCost=Custo da receita ModUi/&RelicForgeries=Falsificações de relíquias ModUi/&RemoveAttunementRequirements=Remover requisitos de sintonização [Requer reinicialização] +ModUi/&RemoveBardMagicalSecretAt14And18=Remova Segredo Mágico em 14 e 18 ModUi/&RemoveBardSongOfRest=Remova Canção do Descanso no nível 2 ModUi/&RemoveBugVisualModels=Substitua modelos semelhantes a aranhas por modelos semelhantes a ursos no jogo [aracnofobia] [Requer reinicialização] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Remover filtro humanoide em Risada Hedionda diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 4df8ed3f02..774ffd3733 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -93,10 +93,14 @@ Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=Боевые ис Feature/&AttributeModifierDazzledTitle=Ослеплён Feature/&AttributeModifierMonkAbundantKiDescription=Добавьте половину бонуса мастерства (округленного в меньшую сторону) к вашему запасу очков Ки. Feature/&AttributeModifierMonkAbundantKiTitle=Обильная Ци +Feature/&AutoPreparedSpellsBardWordOfCreationDescription=Вы освоили два главных Слова Творения: слова жизни и смерти. Поэтому у вас всегда есть заклинания Power Word Heal и Power Word Kill. Когда вы произносите любое из этих заклинаний, вы можете нацелить его на второе существо, если оно находится в пределах 10 футов от первой цели. +Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Миры творения Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=Вы можете перебросить проваленный спасбросок с бонусом, равным вашему уровню Воина, и должны использовать новый результат. После этого вы можете повторно использовать это умение только после завершения продолжительного отдыха. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Расширенные заклинания +Feature/&FeatureBardSuperiorInspiration2024Description=При броске Инициативы вы восстанавливаете потраченные использования Бардовского вдохновения, пока у вас их не будет два, если у вас их меньше. +Feature/&FeatureBardSuperiorInspiration2024Title=Превосходное вдохновение Feature/&FeatureMonkBodyAndMindDescription=Вы развили свои тело и разум до невероятных высот. Ваши значения Ловкости и Мудрости увеличиваются на 4. Feature/&FeatureMonkBodyAndMindTitle=Тело и разум Feature/&FeatureMonkHeightenedMetabolismDescription=Ваши тренировки вывели ваши тело и разум на новый уровень. Ваши умения Шквал ударов, Терпеливая оборона и Поступь ветра получают следующие преимущества:\n• Шквал ударов: Когда вы используете Шквал ударов, вы наносите три безоружных удара вместо двух.\n• Терпеливая оборона: Когда вы используете Терпеливую оборону, вы получаете количество временных хитов, равное броску двух ваших костей боевых искусств.\n• Поступь ветра: Когда вы используете одно из действий с помощью Поступи ветра (Отход или Рывок), вы также получаете преимущества другого из них. @@ -198,8 +202,6 @@ Feature/&PowerWarlockMagicalCunningTitle=Магическая хитрость Feature/&ToolGainChoicesPluralDescription=Выберите {0} из этих инструментов: {1} Feature/&ToolGainChoicesSingleDescription=Выберите один из этих инструментов: {1} Feature/&VisionBlindsightDescription=Вы обладаете слепым зрением. -Feature/&FeatureBardSuperiorInspiration2024Description=При броске Инициативы вы восстанавливаете потраченные использования Бардовского вдохновения, пока у вас их не будет два, если у вас их меньше. -Feature/&FeatureBardSuperiorInspiration2024Title=Превосходное вдохновение Feedback/&AdditionalDamageBrutalStrikeFormat=Жестокий удар Feedback/&AdditionalDamageBrutalStrikeLine=Жестокий удар наносит дополнительно +{2} урона! Feedback/&AdditionalDamageSunderingBlowFormat=Раскалывающий удар diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index c463718cfd..2fe446bca6 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -106,6 +106,8 @@ ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Включить завер ModUi/&EnableBarbarianRegainOneRageAtShortRest=Включить на уровне 7 возможность восстанавливать один заряд Ярости за короткий отдых ModUi/&EnableBardExpertiseOneLevelBefore=Включить Экспертизу на уровнях 2 и 9 вместо 3 и 10 ModUi/&EnableBardHealingBalladOnLongRest=Включить Колледж Надежды Исцеляющая баллада при длительном отдыхе +ModUi/&EnableBardSuperiorInspirationAtLevel18=Включить Превосходное вдохновение на уровне 18 вместо 20, а также предоставить две перезарядки вместо 1 +ModUi/&EnableBardWordsOfCreationAtLevel20=Включить Слова Творения на уровне 20 ModUi/&EnableBetaContent=Включить бета-контент [Необходим перезапуск] ModUi/&EnableCancelEditOnRightMouseClick=Включить отмену действия правым кликом мыши ModUi/&EnableCantripsTriggeringOnWarMagic=Разрешить срабатывание дополнительной бонусной атаки Боевой магии от заговоров @@ -256,6 +258,7 @@ ModUi/&Races=Расы ModUi/&RecipeCost=Стоимость рецепта ModUi/&RelicForgeries=Поддельные реликвии ModUi/&RemoveAttunementRequirements=Убрать требования настройки [Необходим перезапуск] +ModUi/&RemoveBardMagicalSecretAt14And18=Удалить Волшебный секрет на 14 и 18 ModUi/&RemoveBardSongOfRest=Удалить Песнь покоя на уровне 2 ModUi/&RemoveBugVisualModels=Заменить паукообразные модельки в игре на медведеобразные [арахнофобия] [Необходим перезапуск] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Убрать гуманоидный фильтр на Жуткий смех diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index f8ce5c9d1a..0d0cff9e59 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -93,10 +93,14 @@ Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=武术 - 额外徒 Feature/&AttributeModifierDazzledTitle=AC Penalty Feature/&AttributeModifierMonkAbundantKiDescription=将你的一半熟练度奖励(向下舍入)添加到你的 Ki 点数池中。 Feature/&AttributeModifierMonkAbundantKiTitle=气量充沛 +Feature/&AutoPreparedSpellsBardWordOfCreationDescription=您已掌握了两个主要的创世之语:生命之语和死亡之语。因此,您始终准备好强力之语治疗和强力之语杀戮法术。当您施放任一法术时,如果该生物距离第一个目标 10 英尺以内,则可以将其作为第二个生物的目标。 +Feature/&AutoPreparedSpellsBardWordOfCreationTitle=创造世界 Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=如果你的豁免检定失败,你可以重骰该豁免并获得等于你的战士等级的加值。不过你必须采用重掷的结果。你必须完成一次长休才能再次使用该特性。 Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=扩展法术 +Feature/&FeatureBardSuperiorInspiration2024Description=当你掷主动权时,如果你拥有的吟游诗人灵感少于两次,你将重新获得已消耗的吟游诗人灵感,直到你拥有两次。 +Feature/&FeatureBardSuperiorInspiration2024Title=卓越灵感 Feature/&FeatureMonkBodyAndMindDescription=你行满功成,身心性命皆已突破超然境界。你的敏捷和感知增加 4 点。 Feature/&FeatureMonkBodyAndMindTitle=身心合一 Feature/&FeatureMonkHeightenedMetabolismDescription=你的训练已将你的身与心推至全新境界。你的疾风连击、坚强防御和飞檐走壁将获得以下好处:\n• 疾风连击:使用疾风连击时,你可以进行三次徒手攻击,而不是两次。\n• 坚强防御:使用坚强防御时,你将获得临时生命值,数量等于你掷出的两枚武艺骰。\n• 飞檐走壁:使用任一飞檐走壁特性(撤离或疾走)时,你还会获得其他效果的好处。 @@ -198,8 +202,6 @@ Feature/&PowerWarlockMagicalCunningTitle=魔法狡猾 Feature/&ToolGainChoicesPluralDescription=从这些工具中选择 {0}:{1} Feature/&ToolGainChoicesSingleDescription=选择以下工具之一:{1} Feature/&VisionBlindsightDescription=你有盲视。 -Feature/&FeatureBardSuperiorInspiration2024Description=当你掷主动权时,如果你拥有的吟游诗人灵感少于两次,你将重新获得已消耗的吟游诗人灵感,直到你拥有两次。 -Feature/&FeatureBardSuperiorInspiration2024Title=卓越灵感 Feedback/&AdditionalDamageBrutalStrikeFormat=凶蛮打击 Feedback/&AdditionalDamageBrutalStrikeLine=凶蛮打击造成额外 +{2} 伤害! Feedback/&AdditionalDamageSunderingBlowFormat=粉碎殴击 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 043d6f00bc..168ecadaf7 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -106,6 +106,8 @@ ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=启用鲁莽 ModUi/&EnableBarbarianRegainOneRageAtShortRest=在第 7 级时,允许在短暂休息后恢复一次怒气 ModUi/&EnableBardExpertiseOneLevelBefore=在 2 级和 9 级(而不是 3 级和 10 级)启用专业知识 ModUi/&EnableBardHealingBalladOnLongRest=长时间休息时启用希望学院 治愈之歌 +ModUi/&EnableBardSuperiorInspirationAtLevel18=在 18 级(而非 20 级)启用卓越灵感,并且授予 2 次充能(而非 1 次) +ModUi/&EnableBardWordsOfCreationAtLevel20=在 20 级时启用创世圣言 ModUi/&EnableBetaContent=启用测试版内容[需要重启] ModUi/&EnableCancelEditOnRightMouseClick=通过鼠标右键单击启用取消操作 ModUi/&EnableCantripsTriggeringOnWarMagic=允许戏法触发战争魔法额外奖励攻击 @@ -256,6 +258,7 @@ ModUi/&Races=种族 ModUi/&RecipeCost=食谱成本 ModUi/&RelicForgeries=文物伪造 ModUi/&RemoveAttunementRequirements=删除调谐要求[需要重启] +ModUi/&RemoveBardMagicalSecretAt14And18=删除 14 和 18 处的魔法秘密 ModUi/&RemoveBardSongOfRest=删除 2 级的休息之歌 ModUi/&RemoveBugVisualModels=在游戏中将蜘蛛类模型替换为熊类模型[蜘蛛恐惧症] [需要重启] ModUi/&RemoveHumanoidFilterOnHideousLaughter=删除Hideous Laughter上的人形过滤器 From 2d5d040cb33c2e9396f1597fd6d0ba5a4f06ef60 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 2 Nov 2024 21:07:26 -0700 Subject: [PATCH 36/85] add Bard OneDnd tabletop settings --- .../Api/DatabaseHelper-RELEASE.cs | 3 + .../Displays/ClassesDisplay.cs | 37 ++++++-- .../Displays/GeneralDisplay.cs | 38 ++++++-- .../Models/Level20Context.cs | 88 ++++++++++++++++--- .../Models/SpellsContext.cs | 6 +- .../Models/SrdAndHouseRulesContext.cs | 71 ++++++++++++--- SolastaUnfinishedBusiness/Settings.cs | 9 +- 7 files changed, 206 insertions(+), 46 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 38ea82d6a3..b638bc05f2 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -1812,6 +1812,9 @@ internal static class FeatureDefinitionPointPools internal static class FeatureDefinitionPowers { + internal static FeatureDefinitionPower PowerTraditionShockArcanistGreaterArcaneShock { get; } = + GetDefinition("PowerTraditionShockArcanistGreaterArcaneShock"); + internal static FeatureDefinitionPower PowerBerserkerFrenzy { get; } = GetDefinition("PowerBerserkerFrenzy"); diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index 922aefe04c..42ec157fe1 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -30,14 +30,35 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&ChangeBardicInspirationDurationToOneHour"), ref toggle, UI.AutoWidth())) { Main.Settings.ChangeBardicInspirationDurationToOneHour = toggle; - SrdAndHouseRulesContext.SwitchOneDndBardicInspirationDurationToOneHour(); + SrdAndHouseRulesContext.SwitchOneDndChangeBardicInspirationDurationToOneHour(); } toggle = Main.Settings.EnableBardExpertiseOneLevelBefore; if (UI.Toggle(Gui.Localize("ModUi/&EnableBardExpertiseOneLevelBefore"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardExpertiseOneLevelBefore = toggle; - SrdAndHouseRulesContext.SwitchOneDndBardExpertiseOneLevelBefore(); + SrdAndHouseRulesContext.SwitchOneDndEnableBardExpertiseOneLevelBefore(); + } + + toggle = Main.Settings.EnableBardSuperiorInspirationAtLevel18; + if (UI.Toggle(Gui.Localize("ModUi/&EnableBardSuperiorInspirationAtLevel18"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableBardSuperiorInspirationAtLevel18 = toggle; + SrdAndHouseRulesContext.SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); + } + + toggle = Main.Settings.EnableBardWordsOfCreationAtLevel20; + if (UI.Toggle(Gui.Localize("ModUi/&EnableBardSuperiorInspirationAtLevel18"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableBardWordsOfCreationAtLevel20 = toggle; + SrdAndHouseRulesContext.SwitchOneDndEnableBardWordsOfCreationAtLevel20(); + } + + toggle = Main.Settings.RemoveBardMagicalSecretAt14And18; + if (UI.Toggle(Gui.Localize("ModUi/&RemoveBardMagicalSecretAt14And18"), ref toggle, UI.AutoWidth())) + { + Main.Settings.RemoveBardMagicalSecretAt14And18 = toggle; + SrdAndHouseRulesContext.SwitchOneDndRemoveBardMagicalSecretAt14And18(); } toggle = Main.Settings.RemoveBardSongOfRest; @@ -95,19 +116,19 @@ internal static void DisplayClasses() UI.Label("" + Gui.Localize("Class/&DruidTitle") + ":"); UI.Label(); - toggle = Main.Settings.AllowDruidToWearMetalArmor; + toggle = Main.Settings.EnableDruidToUseMetalArmor; if (UI.Toggle(Gui.Localize("ModUi/&AllowDruidToWearMetalArmor"), ref toggle, UI.AutoWidth())) { - Main.Settings.AllowDruidToWearMetalArmor = toggle; - SrdAndHouseRulesContext.SwitchDruidAllowMetalArmor(); + Main.Settings.EnableDruidToUseMetalArmor = toggle; + SrdAndHouseRulesContext.SwitchOneDnDEnableDruidToUseMetalArmor(); } - toggle = Main.Settings.AddDruidPrimalOrderAndRemoveMediumArmorProficiency; + toggle = Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency; if (UI.Toggle(Gui.Localize("ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency"), ref toggle, UI.AutoWidth())) { - Main.Settings.AddDruidPrimalOrderAndRemoveMediumArmorProficiency = toggle; - SrdAndHouseRulesContext.SwitchDruidPrimalOrderAndRemoveMediumArmorProficiency(); + Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency = toggle; + SrdAndHouseRulesContext.SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); } toggle = Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd; diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 366243a056..6814a3ba30 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -249,7 +249,6 @@ private static void DisplayOneDnd() SrdAndHouseRulesContext.SwitchOneDndHealingPotionBonusAction(); } - UI.Label(); UI.Label("" + Gui.Localize("Class/&BardTitle") + ":"); UI.Label(); @@ -258,14 +257,35 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&ChangeBardicInspirationDurationToOneHour"), ref toggle, UI.AutoWidth())) { Main.Settings.ChangeBardicInspirationDurationToOneHour = toggle; - SrdAndHouseRulesContext.SwitchOneDndBardicInspirationDurationToOneHour(); + SrdAndHouseRulesContext.SwitchOneDndChangeBardicInspirationDurationToOneHour(); } toggle = Main.Settings.EnableBardExpertiseOneLevelBefore; if (UI.Toggle(Gui.Localize("ModUi/&EnableBardExpertiseOneLevelBefore"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardExpertiseOneLevelBefore = toggle; - SrdAndHouseRulesContext.SwitchOneDndBardExpertiseOneLevelBefore(); + SrdAndHouseRulesContext.SwitchOneDndEnableBardExpertiseOneLevelBefore(); + } + + toggle = Main.Settings.EnableBardSuperiorInspirationAtLevel18; + if (UI.Toggle(Gui.Localize("ModUi/&EnableBardSuperiorInspirationAtLevel18"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableBardSuperiorInspirationAtLevel18 = toggle; + SrdAndHouseRulesContext.SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); + } + + toggle = Main.Settings.EnableBardWordsOfCreationAtLevel20; + if (UI.Toggle(Gui.Localize("ModUi/&EnableBardSuperiorInspirationAtLevel18"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableBardWordsOfCreationAtLevel20 = toggle; + SrdAndHouseRulesContext.SwitchOneDndEnableBardWordsOfCreationAtLevel20(); + } + + toggle = Main.Settings.RemoveBardMagicalSecretAt14And18; + if (UI.Toggle(Gui.Localize("ModUi/&RemoveBardMagicalSecretAt14And18"), ref toggle, UI.AutoWidth())) + { + Main.Settings.RemoveBardMagicalSecretAt14And18 = toggle; + SrdAndHouseRulesContext.SwitchOneDndRemoveBardMagicalSecretAt14And18(); } toggle = Main.Settings.RemoveBardSongOfRest; @@ -316,19 +336,19 @@ private static void DisplayOneDnd() UI.Label("" + Gui.Localize("Class/&DruidTitle") + ":"); UI.Label(); - toggle = Main.Settings.AllowDruidToWearMetalArmor; + toggle = Main.Settings.EnableDruidToUseMetalArmor; if (UI.Toggle(Gui.Localize("ModUi/&AllowDruidToWearMetalArmor"), ref toggle, UI.AutoWidth())) { - Main.Settings.AllowDruidToWearMetalArmor = toggle; - SrdAndHouseRulesContext.SwitchDruidAllowMetalArmor(); + Main.Settings.EnableDruidToUseMetalArmor = toggle; + SrdAndHouseRulesContext.SwitchOneDnDEnableDruidToUseMetalArmor(); } - toggle = Main.Settings.AddDruidPrimalOrderAndRemoveMediumArmorProficiency; + toggle = Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency; if (UI.Toggle(Gui.Localize("ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency"), ref toggle, UI.AutoWidth())) { - Main.Settings.AddDruidPrimalOrderAndRemoveMediumArmorProficiency = toggle; - SrdAndHouseRulesContext.SwitchDruidPrimalOrderAndRemoveMediumArmorProficiency(); + Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency = toggle; + SrdAndHouseRulesContext.SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); } toggle = Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd; diff --git a/SolastaUnfinishedBusiness/Models/Level20Context.cs b/SolastaUnfinishedBusiness/Models/Level20Context.cs index c321b83f4e..301fa2dc70 100644 --- a/SolastaUnfinishedBusiness/Models/Level20Context.cs +++ b/SolastaUnfinishedBusiness/Models/Level20Context.cs @@ -26,6 +26,7 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSenses; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellListDefinitions; +using static SolastaUnfinishedBusiness.Builders.Features.AutoPreparedSpellsGroupBuilder; using static SolastaUnfinishedBusiness.Builders.Features.FeatureDefinitionCastSpellBuilder; using Resources = SolastaUnfinishedBusiness.Properties.Resources; @@ -87,6 +88,31 @@ internal static class Level20Context .AddCustomSubFeatures(new BattleStartedListenerMonkPerfectSelf()) .AddToDB(); + internal static readonly FeatureDefinitionAutoPreparedSpells AutoPreparedSpellsBardWordOfCreation = + FeatureDefinitionAutoPreparedSpellsBuilder + .Create("AutoPreparedSpellsBardWordOfCreation") + .SetGuiPresentation(Category.Feature) + .SetAutoTag("College") + .SetSpellcastingClass(Bard) + .SetPreparedSpellGroups(BuildSpellGroup(9, SpellsContext.PowerWordHeal, SpellsContext.PowerWordKill)) + .AddCustomSubFeatures(new CustomBehaviorBardWordOfCreation()) + .AddToDB(); + + internal static readonly FeatureDefinition FeatureBardSuperiorInspiration = FeatureDefinitionBuilder + .Create("FeatureBardSuperiorInspiration") + .SetGuiPresentation(Category.Feature) + .AddToDB(); + + internal static readonly FeatureDefinition FeatureBardSuperiorInspiration2024 = FeatureDefinitionBuilder + .Create("FeatureBardSuperiorInspiration2024") + .SetGuiPresentation(Category.Feature) + .AddToDB(); + + internal static readonly FeatureDefinitionPointPool PointPoolBardMagicalSecrets18 = + FeatureDefinitionPointPoolBuilder + .Create(PointPoolBardMagicalSecrets14, "PointPoolBardMagicalSecrets18") + .AddToDB(); + internal static void Load() { BarbarianLoad(); @@ -197,22 +223,16 @@ private static void BarbarianLoad() private static void BardLoad() { - var pointPoolBardMagicalSecrets18 = FeatureDefinitionPointPoolBuilder - .Create(PointPoolBardMagicalSecrets14, "PointPoolBardMagicalSecrets18") - .AddToDB(); - - var featureBardSuperiorInspiration = FeatureDefinitionBuilder - .Create("FeatureBardSuperiorInspiration") - .SetGuiPresentation(Category.Feature) - .AddToDB(); + FeatureBardSuperiorInspiration.AddCustomSubFeatures( + new BattleStartedListenerBardSuperiorInspiration(FeatureBardSuperiorInspiration)); - featureBardSuperiorInspiration.AddCustomSubFeatures( - new BattleStartedListenerBardSuperiorInspiration(featureBardSuperiorInspiration)); + FeatureBardSuperiorInspiration2024.AddCustomSubFeatures( + new BattleStartedListenerBardSuperiorInspiration(FeatureBardSuperiorInspiration2024)); Bard.FeatureUnlocks.AddRange( - new FeatureUnlockByLevel(pointPoolBardMagicalSecrets18, 18), + new FeatureUnlockByLevel(PointPoolBardMagicalSecrets18, 18), new FeatureUnlockByLevel(FeatureSetAbilityScoreChoice, 19), - new FeatureUnlockByLevel(featureBardSuperiorInspiration, 20) + new FeatureUnlockByLevel(FeatureBardSuperiorInspiration, 20) ); EnumerateSlotsPerLevel( @@ -590,6 +610,40 @@ private static void InitExperienceThresholdsTable() ExperienceThresholds = experience; } + private sealed class CustomBehaviorBardWordOfCreation : IModifyEffectDescription, IFilterTargetingCharacter + { + public bool EnforceFullSelection => false; + + public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter target) + { + if (__instance.SelectionService.SelectedTargets.Count == 0 || + __instance.SelectionService.SelectedTargets[0].IsWithinRange(target, 2)) + { + return true; + } + + __instance.actionModifier.FailureFlags.Add("Failure/&SecondTargetNotWithinRange"); + + return false; + } + + public bool IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) + { + return definition == SpellsContext.PowerWordHeal || definition == SpellsContext.PowerWordKill; + } + + public EffectDescription GetEffectDescription( + BaseDefinition definition, + EffectDescription effectDescription, + RulesetCharacter character, + RulesetEffect rulesetEffect) + { + effectDescription.targetParameter = 2; + + return effectDescription; + } + } + // // HELPERS // @@ -1061,19 +1115,25 @@ void ReactionValidated() } } + private sealed class BattleStartedListenerBardSuperiorInspiration(FeatureDefinition featureDefinition) : ICharacterBattleStartedListener { public void OnCharacterBattleStarted(GameLocationCharacter locationCharacter, bool surprise) { var character = locationCharacter.RulesetCharacter; + var limit = Main.Settings.EnableBardSuperiorInspirationAtLevel18 ? 2 : 1; - if (character is not { RemainingBardicInspirations: 0 }) + if (character.RemainingBardicInspirations >= limit) { return; } - character.usedBardicInspiration--; + while (character.RemainingBardicInspirations < limit) + { + character.usedBardicInspiration--; + } + character.BardicInspirationAltered?.Invoke(character, character.RemainingBardicInspirations); character.LogCharacterUsedFeature(featureDefinition); } diff --git a/SolastaUnfinishedBusiness/Models/SpellsContext.cs b/SolastaUnfinishedBusiness/Models/SpellsContext.cs index a879c7abe3..2d9cfdb004 100644 --- a/SolastaUnfinishedBusiness/Models/SpellsContext.cs +++ b/SolastaUnfinishedBusiness/Models/SpellsContext.cs @@ -50,6 +50,8 @@ internal static class SpellsContext internal static readonly SpellDefinition MantleOfThorns = BuildMantleOfThorns(); internal static readonly SpellDefinition MirrorImage = BuildMirrorImage(); internal static readonly SpellDefinition PetalStorm = BuildPetalStorm(); + internal static readonly SpellDefinition PowerWordHeal = BuildPowerWordHeal(); + internal static readonly SpellDefinition PowerWordKill = BuildPowerWordKill(); internal static readonly SpellDefinition PsychicWhip = BuildPsychicWhip(); internal static readonly SpellDefinition PulseWave = BuildPulseWave(); internal static readonly SpellDefinition SearingSmite = BuildSearingSmite(); @@ -396,8 +398,8 @@ internal static void LateLoad() RegisterSpell(BuildInvulnerability(), 0, SpellListWizard); RegisterSpell(BuildMassHeal(), 0, SpellListCleric); RegisterSpell(BuildMeteorSwarmSingleTarget(), 0, SpellListSorcerer, SpellListWizard); - RegisterSpell(BuildPowerWordHeal(), 0, SpellListBard, SpellListCleric); - RegisterSpell(BuildPowerWordKill(), 0, SpellListBard, SpellListSorcerer, SpellListWarlock, SpellListWizard); + RegisterSpell(PowerWordHeal, 0, SpellListBard, SpellListCleric); + RegisterSpell(PowerWordKill, 0, SpellListBard, SpellListSorcerer, SpellListWarlock, SpellListWizard); RegisterSpell(BuildPsychicScream(), 0, SpellListBard, SpellListSorcerer, SpellListWarlock, SpellListWizard); RegisterSpell(BuildTimeStop(), 0, SpellListWizard, SpellListSorcerer); RegisterSpell(BuildShapechange(), 0, SpellListDruid, SpellListWizard); diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index 8650cfed44..f9f9c24a3f 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -180,9 +180,9 @@ internal static void LateLoad() SwitchChangeSleetStormToCube(); SwitchColdResistanceAndImmunityAlsoGrantsWeatherImmunity(); SwitchConditionBlindedShouldNotAllowOpportunityAttack(); - SwitchDruidAllowMetalArmor(); + SwitchOneDnDEnableDruidToUseMetalArmor(); SwitchDruidWeaponProficiencyToUseOneDnd(); - SwitchDruidPrimalOrderAndRemoveMediumArmorProficiency(); + SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); SwitchEldritchBlastRange(); SwitchEnableUpcastConjureElementalAndFey(); SwitchFilterOnHideousLaughter(); @@ -195,9 +195,12 @@ internal static void LateLoad() SwitchOfficialFoodRationsWeight(); SwitchOneDndPreparedSpellsTables(); SwitchOneDndPaladinLayOnHandAsBonusAction(); + SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); + SwitchOneDndEnableBardWordsOfCreationAtLevel20(); SwitchOneDndRemoveBardSongOfRest(); - SwitchOneDndBardicInspirationDurationToOneHour(); - SwitchOneDndBardExpertiseOneLevelBefore(); + SwitchOneDndRemoveBardMagicalSecretAt14And18(); + SwitchOneDndChangeBardicInspirationDurationToOneHour(); + SwitchOneDndEnableBardExpertiseOneLevelBefore(); SwitchOneDndWarlockInvocationsProgression(); SwitchOneDndWarlockMagicalCunningAtLevel2(); SwitchOneDndHealingPotionBonusAction(); @@ -388,9 +391,9 @@ internal static void SwitchUniversalSylvanArmorAndLightbringer() WizardClothes_Alternate.RequiredAttunementClasses.AddRange(allowedClasses); } - internal static void SwitchDruidAllowMetalArmor() + internal static void SwitchOneDnDEnableDruidToUseMetalArmor() { - var active = Main.Settings.AllowDruidToWearMetalArmor; + var active = Main.Settings.EnableDruidToUseMetalArmor; if (active) { @@ -407,9 +410,9 @@ internal static void SwitchDruidAllowMetalArmor() } } - internal static void SwitchDruidPrimalOrderAndRemoveMediumArmorProficiency() + internal static void SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency() { - if (Main.Settings.AddDruidPrimalOrderAndRemoveMediumArmorProficiency) + if (Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency) { FeatureDefinitionProficiencys.ProficiencyDruidArmor.Proficiencies.Remove( EquipmentDefinitions.MediumArmorCategory); @@ -709,7 +712,7 @@ internal static void SwitchOneDndPaladinLayOnHandAsBonusAction() : ActivationTime.Action; } - internal static void SwitchOneDndBardExpertiseOneLevelBefore() + internal static void SwitchOneDndEnableBardExpertiseOneLevelBefore() { var level = Main.Settings.EnableBardExpertiseOneLevelBefore ? 2 : 3; @@ -730,7 +733,7 @@ internal static void SwitchOneDndBardExpertiseOneLevelBefore() Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } - internal static void SwitchOneDndBardicInspirationDurationToOneHour() + internal static void SwitchOneDndChangeBardicInspirationDurationToOneHour() { if (Main.Settings.ChangeBardicInspirationDurationToOneHour) { @@ -757,6 +760,54 @@ internal static void SwitchOneDndRemoveBardSongOfRest() Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } + internal static void SwitchOneDndRemoveBardMagicalSecretAt14And18() + { + Bard.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == FeatureDefinitionPointPools.PointPoolBardMagicalSecrets14 || + x.FeatureDefinition == Level20Context.PointPoolBardMagicalSecrets18); + + if (!Main.Settings.RemoveBardMagicalSecretAt14And18) + { + Bard.FeatureUnlocks.AddRange( + new FeatureUnlockByLevel(FeatureDefinitionPointPools.PointPoolBardMagicalSecrets14, 14), + new FeatureUnlockByLevel(Level20Context.PointPoolBardMagicalSecrets18, 18)); + } + + Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchOneDndEnableBardSuperiorInspirationAtLevel18() + { + if (Main.Settings.RemoveBardMagicalSecretAt14And18) + { + Bard.FeatureUnlocks.Add( + new FeatureUnlockByLevel(Level20Context.FeatureBardSuperiorInspiration2024, 18)); + } + else + { + Bard.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == Level20Context.FeatureBardSuperiorInspiration2024); + } + + Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchOneDndEnableBardWordsOfCreationAtLevel20() + { + if (Main.Settings.RemoveBardMagicalSecretAt14And18) + { + Bard.FeatureUnlocks.Add( + new FeatureUnlockByLevel(Level20Context.AutoPreparedSpellsBardWordOfCreation, 20)); + } + else + { + Bard.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == Level20Context.AutoPreparedSpellsBardWordOfCreation); + } + + Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + internal static void SwitchOneDndHealingPotionBonusAction() { if (Main.Settings.OneDndHealingPotionBonusAction) diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index c791c19317..858800714b 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -259,16 +259,19 @@ public class Settings : UnityModManager.ModSettings // public bool GrantScimitarSpecializationToBardRogue { get; set; } - public bool EnableBardExpertiseOneLevelBefore { get; set; } public bool ChangeBardicInspirationDurationToOneHour { get; set; } + public bool EnableBardExpertiseOneLevelBefore { get; set; } + public bool EnableBardSuperiorInspirationAtLevel18 { get; set; } + public bool EnableBardWordsOfCreationAtLevel20 { get; set; } + public bool RemoveBardMagicalSecretAt14And18 { get; set; } public bool RemoveBardSongOfRest { get; set; } public bool EnableBarbarianBrutalStrike { get; set; } public bool DisableBarbarianBrutalCritical { get; set; } public bool EnableBarbarianFightingStyle { get; set; } public bool EnableBarbarianRecklessSameBuffDebuffDuration { get; set; } public bool EnableBarbarianRegainOneRageAtShortRest { get; set; } - public bool AllowDruidToWearMetalArmor { get; set; } - public bool AddDruidPrimalOrderAndRemoveMediumArmorProficiency { get; set; } + public bool EnableDruidToUseMetalArmor { get; set; } + public bool EnableDruidPrimalOrderAndRemoveMediumArmorProficiency { get; set; } public bool SwapDruidWeaponProficiencyToUseOneDnd { get; set; } public bool AddFighterLevelToIndomitableSavingReroll { get; set; } public bool AddPersuasionToFighterSkillOptions { get; set; } From 0cf03aa05f51eda1f54f46c5ad4b25f8372ad8cf Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 2 Nov 2024 21:46:45 -0700 Subject: [PATCH 37/85] minor tweaks --- .../Displays/ClassesDisplay.cs | 2 +- .../Displays/GeneralDisplay.cs | 2 +- SolastaUnfinishedBusiness/Settings/empty.xml | 14 +++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index 42ec157fe1..d0b3d8473c 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -48,7 +48,7 @@ internal static void DisplayClasses() } toggle = Main.Settings.EnableBardWordsOfCreationAtLevel20; - if (UI.Toggle(Gui.Localize("ModUi/&EnableBardSuperiorInspirationAtLevel18"), ref toggle, UI.AutoWidth())) + if (UI.Toggle(Gui.Localize("ModUi/&EnableBardWordsOfCreationAtLevel20"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardWordsOfCreationAtLevel20 = toggle; SrdAndHouseRulesContext.SwitchOneDndEnableBardWordsOfCreationAtLevel20(); diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 6814a3ba30..76584e3676 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -275,7 +275,7 @@ private static void DisplayOneDnd() } toggle = Main.Settings.EnableBardWordsOfCreationAtLevel20; - if (UI.Toggle(Gui.Localize("ModUi/&EnableBardSuperiorInspirationAtLevel18"), ref toggle, UI.AutoWidth())) + if (UI.Toggle(Gui.Localize("ModUi/&EnableBardWordsOfCreationAtLevel20"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardWordsOfCreationAtLevel20 = toggle; SrdAndHouseRulesContext.SwitchOneDndEnableBardWordsOfCreationAtLevel20(); diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index 1c8b66a659..64597575dd 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -545,16 +545,19 @@ false en false - false false + false + false + false + false false false false false false false - false - false + false + false false false false @@ -584,6 +587,7 @@ false false false + false false false false @@ -1041,8 +1045,4 @@ false false false - 0 - false - false - false \ No newline at end of file From b8ee48a149da1cda362e8ee6742f770a46698c22 Mon Sep 17 00:00:00 2001 From: Silvergriffon Date: Sun, 3 Nov 2024 02:23:43 -0500 Subject: [PATCH 38/85] Subspells for OneDnd version of Guidance --- .../Displays/GeneralDisplay.cs | 7 ++ .../Displays/SpellsDisplay.cs | 7 ++ .../Models/SrdAndHouseRulesContext.cs | 97 +++++++++++++++++++ SolastaUnfinishedBusiness/Settings.cs | 3 +- .../Translations/en/Settings-en.txt | 4 + .../Translations/en/Spells/Cantrips-en.txt | 73 ++++++++++++++ 6 files changed, 190 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 76584e3676..a3e4f850ea 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -589,6 +589,13 @@ private static void DisplayOneDnd() SrdAndHouseRulesContext.SwapOneDndBarkskinSpell(); } + toggle = Main.Settings.SwapOneDndGuidanceSpell; + if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndGuidanceSpell"), ref toggle, UI.AutoWidth())) + { + Main.Settings.SwapOneDndGuidanceSpell = toggle; + SrdAndHouseRulesContext.SwapOneDndGuidanceSpell(); + } + UI.Label(); UI.Label("" + Gui.Localize("ModUi/&DocsSubclasses") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs index 0256a12fc0..d4f5080c1e 100644 --- a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs @@ -162,6 +162,13 @@ private static void DisplaySpellsGeneral() SrdAndHouseRulesContext.SwapOneDndBarkskinSpell(); } + toggle = Main.Settings.SwapOneDndGuidanceSpell; + if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndGuidanceSpell"), ref toggle, UI.AutoWidth())) + { + Main.Settings.SwapOneDndGuidanceSpell = toggle; + SrdAndHouseRulesContext.SwapOneDndGuidanceSpell(); + } + UI.Label(); toggle = Main.Settings.AllowHasteCasting; diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index f9f9c24a3f..9c89acc171 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -14,6 +14,7 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ConditionDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MonsterDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionAbilityCheckAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionConditionAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSenses; @@ -168,13 +169,39 @@ internal static class SrdAndHouseRulesContext private static SpellDefinition ConjureElementalInvisibleStalker { get; set; } + private static readonly List<(string, string)> GuidanceProficiencyPairs = + [ + (AttributeDefinitions.Dexterity, SkillDefinitions.Acrobatics), + (AttributeDefinitions.Wisdom, SkillDefinitions.AnimalHandling), + (AttributeDefinitions.Intelligence, SkillDefinitions.Arcana), + (AttributeDefinitions.Strength, SkillDefinitions.Athletics), + (AttributeDefinitions.Charisma, SkillDefinitions.Deception), + (AttributeDefinitions.Intelligence, SkillDefinitions.History), + (AttributeDefinitions.Wisdom, SkillDefinitions.Insight), + (AttributeDefinitions.Charisma, SkillDefinitions.Intimidation), + (AttributeDefinitions.Intelligence, SkillDefinitions.Investigation), + (AttributeDefinitions.Wisdom, SkillDefinitions.Medecine), + (AttributeDefinitions.Intelligence, SkillDefinitions.Nature), + (AttributeDefinitions.Wisdom, SkillDefinitions.Perception), + (AttributeDefinitions.Charisma, SkillDefinitions.Performance), + (AttributeDefinitions.Charisma, SkillDefinitions.Persuasion), + (AttributeDefinitions.Intelligence, SkillDefinitions.Religion), + (AttributeDefinitions.Dexterity, SkillDefinitions.SleightOfHand), + (AttributeDefinitions.Dexterity, SkillDefinitions.Stealth), + (AttributeDefinitions.Wisdom, SkillDefinitions.Survival) + ]; + + private static List GuidanceSubSpells = new List(); + internal static void LateLoad() { BuildConjureElementalInvisibleStalker(); + BuildOneDndGuidanceSubspells(); LoadAfterRestIdentify(); LoadAllowTargetingSelectionWhenCastingChainLightningSpell(); LoadSenseNormalVisionRangeMultiplier(); SwapOneDndBarkskinSpell(); + SwapOneDndGuidanceSpell(); SwitchAddBleedingToLesserRestoration(); SwitchAllowClubsToBeThrown(); SwitchChangeSleetStormToCube(); @@ -567,6 +594,76 @@ internal static void SwapOneDndBarkskinSpell() } } + private static void BuildOneDndGuidanceSubspells() + { + foreach (var (attribute, skill) in GuidanceProficiencyPairs) + { + var proficiencypair = (attribute, skill); + var affinity = $"AbilityCheckAffinityGuidance{skill}"; + var condition = $"ConditionGuidance{skill}"; + + GuidanceSubSpells.Add( + SpellDefinitionBuilder + .Create($"Guidance{skill}") + .SetGuiPresentation(Category.Spell, Guidance.GuiPresentation.SpriteReference) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolDivination) + .SetSpellLevel(0) + .SetCastingTime(ActivationTime.Action) + .SetMaterialComponent(MaterialComponentType.None) + .SetVerboseComponent(true) + .SetSomaticComponent(true) + .SetRequiresConcentration(true) + .SetVocalSpellSameType(VocalSpellSemeType.Buff) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Ally, RangeType.Touch, 0, TargetType.IndividualsUnique) + .SetEffectForms(EffectFormBuilder.ConditionForm( + ConditionDefinitionBuilder + .Create(ConditionGuided, condition) + .SetGuiPresentation(Category.Condition, ConditionGuided) + .SetSpecialInterruptions(ConditionInterruption.None) + .SetFeatures( + FeatureDefinitionAbilityCheckAffinityBuilder + .Create(AbilityCheckAffinityGuided, affinity) + .SetGuiPresentationNoContent(true) + .BuildAndSetAffinityGroups( + CharacterAbilityCheckAffinity.None, DieType.D4, 1, AbilityCheckGroupOperation.AddDie, + abilityProficiencyPairs: (proficiencypair)) + .AddToDB()) + .AddToDB())) + .SetParticleEffectParameters(Guidance) + .Build()) + .AddToDB()); + } + } + + internal static void SwapOneDndGuidanceSpell() + { + foreach (var spell in GuidanceSubSpells) + { + spell.implemented = false; + } + + if (Main.Settings.SwapOneDndGuidanceSpell) + { + Guidance.spellsBundle = true; + Guidance.SubspellsList.SetRange(GuidanceSubSpells); + Guidance.compactSubspellsTooltip = true; + Guidance.EffectDescription.EffectForms.Clear(); + Guidance.GuiPresentation.description = "Spell/&OneDndGuidanceDescription"; + } + else + { + Guidance.spellsBundle = false; + Guidance.SubspellsList.Clear(); + Guidance.EffectDescription.EffectForms.SetRange(EffectFormBuilder.ConditionForm(ConditionGuided)); + Guidance.GuiPresentation.description = "Spell/&GuidanceDescription"; + } + + } + internal static void SwitchOneDndWizardSchoolOfMagicLearningLevel() { var schools = DatabaseRepository.GetDatabase() diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 858800714b..eb9c5fa7a0 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -375,12 +375,13 @@ public class Settings : UnityModManager.ModSettings public bool FixEldritchBlastRange { get; set; } public bool ModifyGravitySlam { get; set; } public bool EnableOneDndHealingSpellsBuf { get; set; } - public bool SwapOneDndBarkskinSpell { get; set; } public bool AllowHasteCasting { get; set; } public bool AllowStackedMaterialComponent { get; set; } public bool EnableRelearnSpells { get; set; } public bool AllowDisplayingOfficialSpells { get; set; } public bool AllowDisplayingNonSuggestedSpells { get; set; } + public bool SwapOneDndBarkskinSpell { get; set; } + public bool SwapOneDndGuidanceSpell { get; set; } public SerializableDictionary SpellListSliderPosition { get; set; } = []; public SerializableDictionary> SpellListSpellEnabled { get; set; } = []; diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index af7ebdec4a..653c768075 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -315,6 +315,10 @@ ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Enable Unarme ModUi/&SwapOneDndBarkskinSpell=Swap Barkskin with 5e 2024 version [bonus action, no concentration, AC set to 17] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Enable Second Wind to use 5e 2024 usages progression ModUi/&SwapWarlockToUseOneDndInvocationProgression=Enable Invocations o use 5e 2024 progression +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip features +ModUi/&SwapEvocationSavant=Swap Evoker Evocation Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] +ModUi/&SwapOneDndBarkskinSpell=Swap Barkskin with 5e 2024 version [Bonus action, no concentration, AC set to 17.] +ModUi/&SwapOneDndGuidanceSpell=Swap Guidance with 5e 2024 version [Choose one skill at casting and get bonus for up to 1 minute.] ModUi/&TableTopButton=Select Tabletop content ModUi/&TableTopHelp1=• Following sections re-group and duplicate 5e 2014 and 2024 settings scattered across the mod for your convenience ModUi/&TableTopHelp2=• Press the button to select only tabletop content under Character tab, and select all options below for a true TT experience diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt index 03c25e0d12..e6ce70199b 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt @@ -2,6 +2,42 @@ Condition/&ConditionAcidClawsDescription=-1 to AC. Condition/&ConditionAcidClawsTitle=Acid Burn Condition/&ConditionBoomingBladeSheathedDescription=You are sheathed in booming energy. If you willingly move 5 ft or more, you take thunder damage. Condition/&ConditionBoomingBladeSheathedTitle=Sheathed +Condition/&ConditionGuidanceAcrobaticsDescription=Add 1d4 to Acrobatics checks for up to 1 minute. +Condition/&ConditionGuidanceAcrobaticsTitle=Guided Acrobatics +Condition/&ConditionGuidanceAnimal HandlingDescription=Add 1d4 to Animal Handling checks for up to 1 minute. +Condition/&ConditionGuidanceAnimal HandlingTitle=Guided Animal Handling +Condition/&ConditionGuidanceArcanaDescription=Add 1d4 to Arcana checks for up to 1 minute. +Condition/&ConditionGuidanceArcanaTitle=Guided Arcana +Condition/&ConditionGuidanceAthleticsDescription=Add 1d4 to Athletics checks for up to 1 minute. +Condition/&ConditionGuidanceAthleticsTitle=Guided Athletics +Condition/&ConditionGuidanceDeceptionDescription=Add 1d4 to Deception checks for up to 1 minute. +Condition/&ConditionGuidanceDeceptionTitle=Guided Deception +Condition/&ConditionGuidanceHistoryDescription=Add 1d4 to History checks for up to 1 minute. +Condition/&ConditionGuidanceHistoryTitle=Guided History +Condition/&ConditionGuidanceInsightDescription=Add 1d4 to Insight checks for up to 1 minute. +Condition/&ConditionGuidanceInsightTitle=Guided Insight +Condition/&ConditionGuidanceIntimidationDescription=Add 1d4 to Intimidation checks for up to 1 minute. +Condition/&ConditionGuidanceIntimidationTitle=Guided Intimidation +Condition/&ConditionGuidanceInvestigationDescription=Add 1d4 to Investigation checks for up to 1 minute. +Condition/&ConditionGuidanceInvestigationTitle=Guided Investigation +Condition/&ConditionGuidanceMedecineDescription=Add 1d4 to Medecine checks for up to 1 minute. +Condition/&ConditionGuidanceMedecineTitle=Guided Medecine +Condition/&ConditionGuidanceNatureDescription=Add 1d4 to Nature checks for up to 1 minute. +Condition/&ConditionGuidanceNatureTitle=Guided Nature +Condition/&ConditionGuidancePerceptionDescription=Add 1d4 to Perception checks for up to 1 minute. +Condition/&ConditionGuidancePerceptionTitle=Guided Perception +Condition/&ConditionGuidancePerformanceDescription=Add 1d4 to Performance checks for up to 1 minute. +Condition/&ConditionGuidancePerformanceTitle=Guided Performance +Condition/&ConditionGuidancePersuasionDescription=Add 1d4 to Persuasion checks for up to 1 minute. +Condition/&ConditionGuidancePersuasionTitle=Guided Persuasion +Condition/&ConditionGuidanceReligionDescription=Add 1d4 to Religion checks for up to 1 minute. +Condition/&ConditionGuidanceReligionTitle=Guided Religion +Condition/&ConditionGuidanceSleightOfHandDescription=Add 1d4 to SleightOfHand checks for up to 1 minute. +Condition/&ConditionGuidanceSleightOfHandTitle=Guided SleightOfHand +Condition/&ConditionGuidanceStealthDescription=Add 1d4 to Stealth checks for up to 1 minute. +Condition/&ConditionGuidanceStealthTitle=Guided Stealth +Condition/&ConditionGuidanceSurvivalDescription=Add 1d4 to Survival checks for up to 1 minute. +Condition/&ConditionGuidanceSurvivalTitle=Guided Survival Condition/&ConditionMindSpikeDescription=Subtracts 1d4 from the next saving throw. Condition/&ConditionMindSpikeTitle=Mind Sliver Condition/&ConditionStarryWispDescription=Can't benefit from the Invisible condition. @@ -33,6 +69,42 @@ Spell/&CreateBonfireDescription=You create a bonfire on ground that you can see Spell/&CreateBonfireTitle=Create Bonfire Spell/&EnduringStingDescription=You sap the vitality of one creature you can see in range. The target must succeed on a Constitution saving throw or take 1d4 necrotic damage and fall prone. Spell/&EnduringStingTitle=Sapping Sting +Spell/&GuidanceAcrobaticsDescription=Add 1d4 to Acrobatics checks for up to 1 minute. +Spell/&GuidanceAcrobaticsTitle=Guided Acrobatics +Spell/&GuidanceAnimalHandlingDescription=Add 1d4 to Animal Handling checks for up to 1 minute. +Spell/&GuidanceAnimalHandlingTitle=Guided Animal Handling +Spell/&GuidanceArcanaDescription=Add 1d4 to Arcana checks for up to 1 minute. +Spell/&GuidanceArcanaTitle=Guided Arcana +Spell/&GuidanceAthleticsDescription=Add 1d4 to Athletics checks for up to 1 minute. +Spell/&GuidanceAthleticsTitle=Guided Athletics +Spell/&GuidanceDeceptionDescription=Add 1d4 to Deception checks for up to 1 minute. +Spell/&GuidanceDeceptionTitle=Guided Deception +Spell/&GuidanceHistoryDescription=Add 1d4 to History checks for up to 1 minute. +Spell/&GuidanceHistoryTitle=Guided History +Spell/&GuidanceInsightDescription=Add 1d4 to Insight checks for up to 1 minute. +Spell/&GuidanceInsightTitle=Guided Insight +Spell/&GuidanceIntimidationDescription=Add 1d4 to Intimidation checks for up to 1 minute. +Spell/&GuidanceIntimidationTitle=Guided Intimidation +Spell/&GuidanceInvestigationDescription=Add 1d4 to Investigation checks for up to 1 minute. +Spell/&GuidanceInvestigationTitle=Guided Investigation +Spell/&GuidanceMedecineDescription=Add 1d4 to Medecine checks for up to 1 minute. +Spell/&GuidanceMedecineTitle=Guided Medecine +Spell/&GuidanceNatureDescription=Add 1d4 to Nature checks for up to 1 minute. +Spell/&GuidanceNatureTitle=Guided Nature +Spell/&GuidancePerceptionDescription=Add 1d4 to Perception checks for up to 1 minute. +Spell/&GuidancePerceptionTitle=Guided Perception +Spell/&GuidancePerformanceDescription=Add 1d4 to Performance checks for up to 1 minute. +Spell/&GuidancePerformanceTitle=Guided Performance +Spell/&GuidancePersuasionDescription=Add 1d4 to Persuasion checks for up to 1 minute. +Spell/&GuidancePersuasionTitle=Guided Persuasion +Spell/&GuidanceReligionDescription=Add 1d4 to Religion checks for up to 1 minute. +Spell/&GuidanceReligionTitle=Guided Religion +Spell/&GuidanceSleightOfHandDescription=Add 1d4 to SleightOfHand checks for up to 1 minute. +Spell/&GuidanceSleightOfHandTitle=Guided SleightOfHand +Spell/&GuidanceStealthDescription=Add 1d4 to Stealth checks for up to 1 minute. +Spell/&GuidanceStealthTitle=Guided Stealth +Spell/&GuidanceSurvivalDescription=Add 1d4 to Survival checks for up to 1 minute. +Spell/&GuidanceSurvivalTitle=Guided Survival Spell/&IlluminatingSphereDescription=Causes light sources such as torches and mana lamps in the area of effect to light up. Spell/&IlluminatingSphereTitle=Illuminating Sphere Spell/&InfestationDescription=You cause a cloud of mites, fleas, and other parasites to appear momentarily on one creature you can see within range. The target must succeed on a Constitution saving throw, or it takes 1d6 poison damage and moves 5 ft in a random direction. The spell's damage increases by an additional die at 5th, 11th and 17th level. @@ -45,6 +117,7 @@ Spell/&MindSpikeDescription=You drive a disorienting spike of psychic energy int Spell/&MindSpikeTitle=Mind Sliver Spell/&MinorLifestealDescription=You drain vital energy from a nearby enemy creature. Make a melee spell attack against a creature within 5 ft of you. On a hit, the creature takes 1d6 necrotic damage, and you heal for half the damage dealt (rounded down). This spell has no effect on undead and constructs. The spell's damage increases by an additional die at 5th, 11th and 17th level. Spell/&MinorLifestealTitle=Minor Lifesteal +Spell/&OneDndGuidanceDescription=You touch a willing creature and choose a skill. Until the spell ends, the creature adds ld4 to any ability check using the chosen skill. Spell/&PrimalSavageryDescription=You channel primal magic to cause your teeth or fingernails to sharpen, ready to deliver a corrosive attack. Make a melee spell attack against one creature within 5 ft of you. On a hit, the target takes 1d10 acid damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. Spell/&PrimalSavageryTitle=Primal Savagery Spell/&ResonatingStrikeDescription=You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within {0} distance. On a hit, the target suffers the weapon attack's normal effects, and you can cause green fire to leap from the target to a different creature of your choice that you can see within 5 ft of it. The second creature takes fire damage equal to your spellcasting ability modifier. At 5th level, the melee attack deals an extra 1d8 fire damage to the target on a hit, and the fire damage to the second creature increases to 1d8 + your spellcasting ability modifier. Both damage rolls increase by 1d8 at 11th and 17th levels. From 8c36763025688af1ffddc850d8249dc4db8e1531 Mon Sep 17 00:00:00 2001 From: Silvergriffon Date: Sun, 3 Nov 2024 02:59:41 -0500 Subject: [PATCH 39/85] cleanup after merge --- SolastaUnfinishedBusiness/Settings.cs | 5 +++-- SolastaUnfinishedBusiness/Translations/en/Settings-en.txt | 5 +---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index eb9c5fa7a0..3890538ef1 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -375,13 +375,14 @@ public class Settings : UnityModManager.ModSettings public bool FixEldritchBlastRange { get; set; } public bool ModifyGravitySlam { get; set; } public bool EnableOneDndHealingSpellsBuf { get; set; } + public bool SwapOneDndBarkskinSpell { get; set; } + public bool SwapOneDndGuidanceSpell { get; set; } public bool AllowHasteCasting { get; set; } public bool AllowStackedMaterialComponent { get; set; } public bool EnableRelearnSpells { get; set; } public bool AllowDisplayingOfficialSpells { get; set; } public bool AllowDisplayingNonSuggestedSpells { get; set; } - public bool SwapOneDndBarkskinSpell { get; set; } - public bool SwapOneDndGuidanceSpell { get; set; } + public SerializableDictionary SpellListSliderPosition { get; set; } = []; public SerializableDictionary> SpellListSpellEnabled { get; set; } = []; diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 653c768075..6f0127f26c 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -313,12 +313,9 @@ ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Evoker Evocation Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Enable Unarmed Attack to use 5e 2024 die type progression ModUi/&SwapOneDndBarkskinSpell=Swap Barkskin with 5e 2024 version [bonus action, no concentration, AC set to 17] +ModUi/&SwapOneDndGuidanceSpell=Swap Guidance with 5e 2024 version [Choose one skill at casting and get bonus for up to 1 minute.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Enable Second Wind to use 5e 2024 usages progression ModUi/&SwapWarlockToUseOneDndInvocationProgression=Enable Invocations o use 5e 2024 progression -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip features -ModUi/&SwapEvocationSavant=Swap Evoker Evocation Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] -ModUi/&SwapOneDndBarkskinSpell=Swap Barkskin with 5e 2024 version [Bonus action, no concentration, AC set to 17.] -ModUi/&SwapOneDndGuidanceSpell=Swap Guidance with 5e 2024 version [Choose one skill at casting and get bonus for up to 1 minute.] ModUi/&TableTopButton=Select Tabletop content ModUi/&TableTopHelp1=• Following sections re-group and duplicate 5e 2014 and 2024 settings scattered across the mod for your convenience ModUi/&TableTopHelp2=• Press the button to select only tabletop content under Character tab, and select all options below for a true TT experience From 6ef825af259c74c65481849184777d82f91d22dc Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 08:23:34 -0800 Subject: [PATCH 40/85] possibly fix #5026 --- .../Patches/CharacterActionMagicEffectPatcher.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs index 5133ad1c07..ac9a5acff9 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs @@ -1005,16 +1005,6 @@ private static IEnumerator ExecuteMagicAttack( bool firstTarget, bool checkMagicalAttackDamage) { - // BEGIN PATCH - - //BUGFIX: avoid effect proxies interacting with each other - if (target.RulesetCharacter is RulesetCharacterEffectProxy) - { - yield break; - } - - // END PATCH - var battleManager = ServiceRepository.GetService() as GameLocationBattleManager; From 57c211f4b073e7fd1f339041bc5bb68407925548 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 08:34:54 -0800 Subject: [PATCH 41/85] update translations --- .../Translations/de/Settings-de.txt | 1 + .../Translations/de/Spells/Cantrips-de.txt | 73 +++++++++++++++++++ .../Translations/en/Others-en.txt | 2 +- .../Translations/es/Settings-es.txt | 1 + .../Translations/es/Spells/Cantrips-es.txt | 73 +++++++++++++++++++ .../Translations/fr/Settings-fr.txt | 1 + .../Translations/fr/Spells/Cantrips-fr.txt | 73 +++++++++++++++++++ .../Translations/it/Settings-it.txt | 1 + .../Translations/it/Spells/Cantrips-it.txt | 73 +++++++++++++++++++ .../Translations/ja/Settings-ja.txt | 1 + .../Translations/ja/Spells/Cantrips-ja.txt | 73 +++++++++++++++++++ .../Translations/ko/Settings-ko.txt | 1 + .../Translations/ko/Spells/Cantrips-ko.txt | 73 +++++++++++++++++++ .../Translations/pt-BR/Settings-pt-BR.txt | 1 + .../pt-BR/Spells/Cantrips-pt-BR.txt | 73 +++++++++++++++++++ .../Translations/ru/Settings-ru.txt | 1 + .../Translations/ru/Spells/Cantrips-ru.txt | 73 +++++++++++++++++++ .../Translations/zh-CN/Settings-zh-CN.txt | 1 + .../zh-CN/Spells/Cantrips-zh-CN.txt | 73 +++++++++++++++++++ 19 files changed, 667 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index ad434fde71..04da65d35d 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -313,6 +313,7 @@ ModUi/&SwapEvocationPotentCantripAndSculptSpell=Tauschen Sie die Funktionen E ModUi/&SwapEvocationSavant=Tauschen Sie Evoker Evocation Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Tauschen Sie Unbewaffneter Angriff aus, um die Würfeltyp-Progression von 5e 2024 zu verwenden ModUi/&SwapOneDndBarkskinSpell=Tauschen Sie Barkskin gegen die 5e 2024-Version aus [Bonusaktion, keine Konzentration, AC auf 17 eingestellt] +ModUi/&SwapOneDndGuidanceSpell=Tauschen Sie Anleitung gegen Version 5e 2024 aus [Wählen Sie beim Zaubern eine Fertigkeit aus und erhalten Sie bis zu 1 Minute lang einen Bonus.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Tauschen Sie Second Wind aus, um den Nutzungsfortschritt von 5e 2024 zu verwenden. ModUi/&SwapWarlockToUseOneDndInvocationProgression=Tauschen Sie den Fortschritt der Anrufungen mit der Version 5e 2024 aus. ModUi/&TableTopButton=Tabletop-Inhalt auswählen diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt index 1adbb65cec..4f8823ac0c 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt @@ -2,6 +2,42 @@ Condition/&ConditionAcidClawsDescription=-1 bis AC. Condition/&ConditionAcidClawsTitle=Säure brennen Condition/&ConditionBoomingBladeSheathedDescription=Du bist von dröhnender Energie umgeben. Wenn du dich freiwillig 1,5 Meter oder mehr bewegst, erleidest du Donnerschaden. Condition/&ConditionBoomingBladeSheathedTitle=Ummantelt +Condition/&ConditionGuidanceAcrobaticsDescription=Füge bis zu 1 Minute lang 1W4 zu Akrobatikprüfungen hinzu. +Condition/&ConditionGuidanceAcrobaticsTitle=Geführte Akrobatik +Condition/&ConditionGuidanceAnimal HandlingDescription=Füge bis zu 1 Minute lang 1W4 zu Fertigkeitsprüfungen im Umgang mit Tieren hinzu. +Condition/&ConditionGuidanceAnimal HandlingTitle=Geführter Umgang mit Tieren +Condition/&ConditionGuidanceArcanaDescription=Füge bis zu 1 Minute lang 1W4 zu Arcana-Checks hinzu. +Condition/&ConditionGuidanceArcanaTitle=Geführte Arkana +Condition/&ConditionGuidanceAthleticsDescription=Füge bis zu 1 Minute lang 1W4 zu Athletikprüfungen hinzu. +Condition/&ConditionGuidanceAthleticsTitle=Geführte Leichtathletik +Condition/&ConditionGuidanceDeceptionDescription=Füge bis zu 1 Minute lang 1W4 zu Täuschungswürfen hinzu. +Condition/&ConditionGuidanceDeceptionTitle=Geführte Täuschung +Condition/&ConditionGuidanceHistoryDescription=Fügen Sie bis zu 1 Minute lang 1W4 zu den Verlaufsprüfungen hinzu. +Condition/&ConditionGuidanceHistoryTitle=Geführte Geschichte +Condition/&ConditionGuidanceInsightDescription=Füge bis zu 1 Minute lang 1W4 zu Einsichtsprüfungen hinzu. +Condition/&ConditionGuidanceInsightTitle=Geführte Einblicke +Condition/&ConditionGuidanceIntimidationDescription=Füge bis zu 1 Minute lang 1W4 zu Einschüchterungswürfen hinzu. +Condition/&ConditionGuidanceIntimidationTitle=Geführte Einschüchterung +Condition/&ConditionGuidanceInvestigationDescription=Füge bis zu 1 Minute lang 1W4 zu Ermittlungsprüfungen hinzu. +Condition/&ConditionGuidanceInvestigationTitle=Geführte Untersuchung +Condition/&ConditionGuidanceMedecineDescription=Füge bis zu 1 Minute lang 1W4 zu Medizinprüfungen hinzu. +Condition/&ConditionGuidanceMedecineTitle=Geleitete Medizin +Condition/&ConditionGuidanceNatureDescription=Füge bis zu 1 Minute lang 1W4 zu Naturwürfen hinzu. +Condition/&ConditionGuidanceNatureTitle=Geführte Natur +Condition/&ConditionGuidancePerceptionDescription=Füge bis zu 1 Minute lang 1W4 zu Wahrnehmungsprüfungen hinzu. +Condition/&ConditionGuidancePerceptionTitle=Geführte Wahrnehmung +Condition/&ConditionGuidancePerformanceDescription=Füge bis zu 1 Minute lang 1W4 zu Leistungsprüfungen hinzu. +Condition/&ConditionGuidancePerformanceTitle=Geführte Leistung +Condition/&ConditionGuidancePersuasionDescription=Füge bis zu 1 Minute lang 1W4 zu Überzeugungswürfen hinzu. +Condition/&ConditionGuidancePersuasionTitle=Geführte Überzeugung +Condition/&ConditionGuidanceReligionDescription=Füge bis zu 1 Minute lang 1W4 zu Religionsprüfungen hinzu. +Condition/&ConditionGuidanceReligionTitle=Geleitete Religion +Condition/&ConditionGuidanceSleightOfHandDescription=Füge bis zu 1 Minute lang 1W4 zu Taschenspielertrick-Prüfungen hinzu. +Condition/&ConditionGuidanceSleightOfHandTitle=Geführter Taschenspielertrick +Condition/&ConditionGuidanceStealthDescription=Füge bis zu 1 Minute lang 1W4 zu Stealth-Checks hinzu. +Condition/&ConditionGuidanceStealthTitle=Geführte Tarnung +Condition/&ConditionGuidanceSurvivalDescription=Füge bis zu 1 Minute lang 1W4 zu Überlebenswürfen hinzu. +Condition/&ConditionGuidanceSurvivalTitle=Geführtes Überleben Condition/&ConditionMindSpikeDescription=Subtrahiert 1W4 vom nächsten Rettungswurf. Condition/&ConditionMindSpikeTitle=Gedankensplitter Condition/&ConditionStarryWispDescription=Der Zustand „Unsichtbar“ kann nicht profitieren. @@ -33,6 +69,42 @@ Spell/&CreateBonfireDescription=Du entzündest ein Lagerfeuer auf dem Boden, das Spell/&CreateBonfireTitle=Lagerfeuer erstellen Spell/&EnduringStingDescription=Du entziehst einem sichtbaren Wesen in Reichweite die Lebenskraft. Das Ziel muss einen Rettungswurf für Konstitution bestehen oder erleidet 1W4 nekrotischen Schaden und fällt zu Boden. Spell/&EnduringStingTitle=Schwächlicher Stich +Spell/&GuidanceAcrobaticsDescription=Füge bis zu 1 Minute lang 1W4 zu Akrobatikprüfungen hinzu. +Spell/&GuidanceAcrobaticsTitle=Geführte Akrobatik +Spell/&GuidanceAnimalHandlingDescription=Füge bis zu 1 Minute lang 1W4 zu Fertigkeitsprüfungen im Umgang mit Tieren hinzu. +Spell/&GuidanceAnimalHandlingTitle=Geführter Umgang mit Tieren +Spell/&GuidanceArcanaDescription=Füge bis zu 1 Minute lang 1W4 zu Arcana-Checks hinzu. +Spell/&GuidanceArcanaTitle=Geführte Arkana +Spell/&GuidanceAthleticsDescription=Füge bis zu 1 Minute lang 1W4 zu Athletikprüfungen hinzu. +Spell/&GuidanceAthleticsTitle=Geführte Leichtathletik +Spell/&GuidanceDeceptionDescription=Füge bis zu 1 Minute lang 1W4 zu Täuschungswürfen hinzu. +Spell/&GuidanceDeceptionTitle=Geführte Täuschung +Spell/&GuidanceHistoryDescription=Fügen Sie bis zu 1 Minute lang 1W4 zu den Verlaufsprüfungen hinzu. +Spell/&GuidanceHistoryTitle=Geführte Geschichte +Spell/&GuidanceInsightDescription=Füge bis zu 1 Minute lang 1W4 zu Einsichtsprüfungen hinzu. +Spell/&GuidanceInsightTitle=Geführte Einblicke +Spell/&GuidanceIntimidationDescription=Füge bis zu 1 Minute lang 1W4 zu Einschüchterungswürfen hinzu. +Spell/&GuidanceIntimidationTitle=Geführte Einschüchterung +Spell/&GuidanceInvestigationDescription=Füge bis zu 1 Minute lang 1W4 zu Ermittlungsprüfungen hinzu. +Spell/&GuidanceInvestigationTitle=Geführte Untersuchung +Spell/&GuidanceMedecineDescription=Füge bis zu 1 Minute lang 1W4 zu Medizinprüfungen hinzu. +Spell/&GuidanceMedecineTitle=Geleitete Medizin +Spell/&GuidanceNatureDescription=Füge bis zu 1 Minute lang 1W4 zu Naturwürfen hinzu. +Spell/&GuidanceNatureTitle=Geführte Natur +Spell/&GuidancePerceptionDescription=Füge bis zu 1 Minute lang 1W4 zu Wahrnehmungsprüfungen hinzu. +Spell/&GuidancePerceptionTitle=Geführte Wahrnehmung +Spell/&GuidancePerformanceDescription=Füge bis zu 1 Minute lang 1W4 zu Leistungsprüfungen hinzu. +Spell/&GuidancePerformanceTitle=Geführte Leistung +Spell/&GuidancePersuasionDescription=Füge bis zu 1 Minute lang 1W4 zu Überzeugungswürfen hinzu. +Spell/&GuidancePersuasionTitle=Geführte Überzeugung +Spell/&GuidanceReligionDescription=Füge bis zu 1 Minute lang 1W4 zu Religionsprüfungen hinzu. +Spell/&GuidanceReligionTitle=Geleitete Religion +Spell/&GuidanceSleightOfHandDescription=Füge bis zu 1 Minute lang 1W4 zu Taschenspielertrick-Prüfungen hinzu. +Spell/&GuidanceSleightOfHandTitle=Geführter Taschenspielertrick +Spell/&GuidanceStealthDescription=Füge bis zu 1 Minute lang 1W4 zu Stealth-Checks hinzu. +Spell/&GuidanceStealthTitle=Geführte Tarnung +Spell/&GuidanceSurvivalDescription=Füge bis zu 1 Minute lang 1W4 zu Überlebenswürfen hinzu. +Spell/&GuidanceSurvivalTitle=Geführtes Überleben Spell/&IlluminatingSphereDescription=Bewirkt, dass Lichtquellen wie Fackeln und Manalampen im Wirkungsbereich aufleuchten. Spell/&IlluminatingSphereTitle=Leuchtende Kugel Spell/&InfestationDescription=Du lässt eine Wolke aus Milben, Flöhen und anderen Parasiten kurzzeitig auf einer Kreatur erscheinen, die du in Reichweite sehen kannst. Das Ziel muss einen Konstitutionsrettungswurf bestehen, sonst erleidet es 1W6 Giftschaden und bewegt sich 5 Fuß in eine zufällige Richtung. Der Schaden des Zaubers erhöht sich auf der 5., 11. und 17. Stufe um einen zusätzlichen Würfel. @@ -45,6 +117,7 @@ Spell/&MindSpikeDescription=Du treibst einen desorientierenden Strahl psychische Spell/&MindSpikeTitle=Gedankensplitter Spell/&MinorLifestealDescription=Du entziehst einer feindlichen Kreatur in der Nähe Lebensenergie. Führe einen Nahkampfangriff mit einem Zauber gegen eine Kreatur aus, die sich in einem Umkreis von 1,5 m um dich befindet. Bei einem Treffer erleidet die Kreatur 1W6 nekrotischen Schaden und du wirst um die Hälfte des zugefügten Schadens geheilt (abgerundet). Dieser Zauber hat keine Wirkung auf Untote und Konstrukte. Der Schaden des Zaubers erhöht sich auf der 5., 11. und 17. Stufe um einen zusätzlichen Würfel. Spell/&MinorLifestealTitle=Geringer Lebensraub +Spell/&OneDndGuidanceDescription=Du berührst eine willige Kreatur und wählst eine Fertigkeit. Bis der Zauber endet, fügt die Kreatur jedem Fähigkeitscheck, bei dem die gewählte Fertigkeit zum Einsatz kommt, ld4 hinzu. Spell/&PrimalSavageryDescription=Du kanalisierst Urmagie, um deine Zähne oder Fingernägel zu schärfen und bist bereit für einen ätzenden Angriff. Führe einen Nahkampfangriff mit einem Zauber gegen eine Kreatur innerhalb von 1,5 m um dich herum aus. Bei einem Treffer erleidet das Ziel 1W10 Säureschaden. Der Schaden des Zaubers erhöht sich auf der 5., 11. und 17. Stufe um einen weiteren Würfel. Spell/&PrimalSavageryTitle=Ursprüngliche Wildheit Spell/&ResonatingStrikeDescription=Du schwingst die Waffe, die du beim Zaubern benutzt hast, und führst damit einen Nahkampfangriff gegen eine Kreatur innerhalb von {0} Entfernung aus. Bei einem Treffer erleidet das Ziel die normalen Effekte des Waffenangriffs und du kannst grünes Feuer vom Ziel auf eine andere Kreatur deiner Wahl überspringen lassen, die du innerhalb von 5 Fuß Entfernung sehen kannst. Die zweite Kreatur erleidet Feuerschaden in Höhe deines Zauberfähigkeitsmodifikators. Auf der 5. Stufe fügt der Nahkampfangriff dem Ziel bei einem Treffer zusätzliche 1W8 Feuerschaden zu und der Feuerschaden der zweiten Kreatur erhöht sich auf 1W8 + deinen Zauberfähigkeitsmodifikator. Beide Schadenswürfe erhöhen sich auf der 11. und 17. Stufe um 1W8. diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index fa48b53fcd..a7c7460132 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -94,7 +94,7 @@ Feature/&AttributeModifierDazzledTitle=Dazzled Feature/&AttributeModifierMonkAbundantKiDescription=Add half your proficiency bonus (rounded down) to your Ki Points pool. Feature/&AttributeModifierMonkAbundantKiTitle=Abundant Ki Feature/&AutoPreparedSpellsBardWordOfCreationDescription=You have mastered two of the prime Words of Creation: the words of life and death. You therefore always have the Power Word Heal and Power Word Kill spells prepared. When you cast either spell, you can target a second creature with it if the creature is within 10 feet of the first target. -Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Worlds of Creation +Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Words of Creation Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=If you fail a saving throw, you can reroll it with a bonus equal to your Fighter level. If you do so, you must use the new roll, and you can't use this feature again until you finish a long rest. Feature/&ExpandedSpellsDescription={0}\n\n diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index c47ad3297e..de89f523a2 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -314,6 +314,7 @@ ModUi/&SwapEvocationPotentCantripAndSculptSpell=Intercambia las características ModUi/&SwapEvocationSavant=Intercambia Evocador Sabio de la evocación con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de ranura] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Cambia Ataque desarmado para usar la progresión de tipo de dado de 5e 2024 ModUi/&SwapOneDndBarkskinSpell=Intercambia Piel de corteza con la versión 5e 2024 [acción adicional, sin concentración, CA establecida en 17] +ModUi/&SwapOneDndGuidanceSpell=Intercambia Orientación con la versión 5e 2024 [Elige una habilidad al lanzar hechizos y obtén una bonificación de hasta 1 minuto.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Cambia Second Wind para usar la progresión de usos de 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Intercambia la progresión de Invocaciones con la versión 5e 2024 ModUi/&TableTopButton=Seleccionar contenido de Tabletop diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt index fa6a70ac96..614874bc72 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt @@ -2,6 +2,42 @@ Condition/&ConditionAcidClawsDescription=-1 a CA. Condition/&ConditionAcidClawsTitle=Quemadura por ácido Condition/&ConditionBoomingBladeSheathedDescription=Estás envuelto en una energía explosiva. Si te mueves voluntariamente 1,5 m o más, recibirás daño por trueno. Condition/&ConditionBoomingBladeSheathedTitle=Envainado +Condition/&ConditionGuidanceAcrobaticsDescription=Añade 1d4 a las pruebas de Acrobacias durante hasta 1 minuto. +Condition/&ConditionGuidanceAcrobaticsTitle=Acrobacias guiadas +Condition/&ConditionGuidanceAnimal HandlingDescription=Añade 1d4 a las pruebas de Trato con animales durante hasta 1 minuto. +Condition/&ConditionGuidanceAnimal HandlingTitle=Manejo guiado de animales +Condition/&ConditionGuidanceArcanaDescription=Añade 1d4 a las pruebas de Arcanos durante hasta 1 minuto. +Condition/&ConditionGuidanceArcanaTitle=Arcanos guiados +Condition/&ConditionGuidanceAthleticsDescription=Añade 1d4 a las pruebas de Atletismo durante hasta 1 minuto. +Condition/&ConditionGuidanceAthleticsTitle=Atletismo guiado +Condition/&ConditionGuidanceDeceptionDescription=Añade 1d4 a las pruebas de Engaño durante hasta 1 minuto. +Condition/&ConditionGuidanceDeceptionTitle=Engaño guiado +Condition/&ConditionGuidanceHistoryDescription=Añade 1d4 a las pruebas de Historia durante hasta 1 minuto. +Condition/&ConditionGuidanceHistoryTitle=Historia guiada +Condition/&ConditionGuidanceInsightDescription=Añade 1d4 a las pruebas de Perspicacia durante hasta 1 minuto. +Condition/&ConditionGuidanceInsightTitle=Visión guiada +Condition/&ConditionGuidanceIntimidationDescription=Añade 1d4 a las pruebas de Intimidación durante hasta 1 minuto. +Condition/&ConditionGuidanceIntimidationTitle=Intimidación guiada +Condition/&ConditionGuidanceInvestigationDescription=Añade 1d4 a las pruebas de Investigación durante hasta 1 minuto. +Condition/&ConditionGuidanceInvestigationTitle=Investigación guiada +Condition/&ConditionGuidanceMedecineDescription=Añade 1d4 a las pruebas de Medicina durante hasta 1 minuto. +Condition/&ConditionGuidanceMedecineTitle=Medicina guiada +Condition/&ConditionGuidanceNatureDescription=Añade 1d4 a las pruebas de Naturaleza durante hasta 1 minuto. +Condition/&ConditionGuidanceNatureTitle=Naturaleza guiada +Condition/&ConditionGuidancePerceptionDescription=Añade 1d4 a las pruebas de Percepción durante hasta 1 minuto. +Condition/&ConditionGuidancePerceptionTitle=Percepción guiada +Condition/&ConditionGuidancePerformanceDescription=Añade 1d4 a las pruebas de Rendimiento durante hasta 1 minuto. +Condition/&ConditionGuidancePerformanceTitle=Actuación guiada +Condition/&ConditionGuidancePersuasionDescription=Añade 1d4 a las pruebas de Persuasión durante hasta 1 minuto. +Condition/&ConditionGuidancePersuasionTitle=Persuasión guiada +Condition/&ConditionGuidanceReligionDescription=Añade 1d4 a las pruebas de Religión durante hasta 1 minuto. +Condition/&ConditionGuidanceReligionTitle=Religión guiada +Condition/&ConditionGuidanceSleightOfHandDescription=Añade 1d4 a las pruebas de Juego de manos durante hasta 1 minuto. +Condition/&ConditionGuidanceSleightOfHandTitle=Juego de manos guiado +Condition/&ConditionGuidanceStealthDescription=Añade 1d4 a las pruebas de Sigilo durante hasta 1 minuto. +Condition/&ConditionGuidanceStealthTitle=Sigilo guiado +Condition/&ConditionGuidanceSurvivalDescription=Añade 1d4 a las pruebas de Supervivencia durante hasta 1 minuto. +Condition/&ConditionGuidanceSurvivalTitle=Supervivencia guiada Condition/&ConditionMindSpikeDescription=Resta 1d4 de la siguiente tirada de salvación. Condition/&ConditionMindSpikeTitle=Mente fragmentada Condition/&ConditionStarryWispDescription=No puede beneficiarse de la condición Invisible. @@ -33,6 +69,42 @@ Spell/&CreateBonfireDescription=Creas una hoguera en el suelo que puedas ver den Spell/&CreateBonfireTitle=Crear hoguera Spell/&EnduringStingDescription=Absorbes la vitalidad de una criatura que puedas ver dentro del alcance. El objetivo debe superar una tirada de salvación de Constitución o recibirá 1d4 de daño necrótico y caerá al suelo. Spell/&EnduringStingTitle=Picadura de socavón +Spell/&GuidanceAcrobaticsDescription=Añade 1d4 a las pruebas de Acrobacias durante hasta 1 minuto. +Spell/&GuidanceAcrobaticsTitle=Acrobacias guiadas +Spell/&GuidanceAnimalHandlingDescription=Añade 1d4 a las pruebas de Trato con animales durante hasta 1 minuto. +Spell/&GuidanceAnimalHandlingTitle=Manejo guiado de animales +Spell/&GuidanceArcanaDescription=Añade 1d4 a las pruebas de Arcanos durante hasta 1 minuto. +Spell/&GuidanceArcanaTitle=Arcanos guiados +Spell/&GuidanceAthleticsDescription=Añade 1d4 a las pruebas de Atletismo durante hasta 1 minuto. +Spell/&GuidanceAthleticsTitle=Atletismo guiado +Spell/&GuidanceDeceptionDescription=Añade 1d4 a las pruebas de Engaño durante hasta 1 minuto. +Spell/&GuidanceDeceptionTitle=Engaño guiado +Spell/&GuidanceHistoryDescription=Añade 1d4 a las pruebas de Historia durante hasta 1 minuto. +Spell/&GuidanceHistoryTitle=Historia guiada +Spell/&GuidanceInsightDescription=Añade 1d4 a las pruebas de Perspicacia durante hasta 1 minuto. +Spell/&GuidanceInsightTitle=Visión guiada +Spell/&GuidanceIntimidationDescription=Añade 1d4 a las pruebas de Intimidación durante hasta 1 minuto. +Spell/&GuidanceIntimidationTitle=Intimidación guiada +Spell/&GuidanceInvestigationDescription=Añade 1d4 a las pruebas de Investigación durante hasta 1 minuto. +Spell/&GuidanceInvestigationTitle=Investigación guiada +Spell/&GuidanceMedecineDescription=Añade 1d4 a las pruebas de Medicina durante hasta 1 minuto. +Spell/&GuidanceMedecineTitle=Medicina guiada +Spell/&GuidanceNatureDescription=Añade 1d4 a las pruebas de Naturaleza durante hasta 1 minuto. +Spell/&GuidanceNatureTitle=Naturaleza guiada +Spell/&GuidancePerceptionDescription=Añade 1d4 a las pruebas de Percepción durante hasta 1 minuto. +Spell/&GuidancePerceptionTitle=Percepción guiada +Spell/&GuidancePerformanceDescription=Añade 1d4 a las pruebas de Rendimiento durante hasta 1 minuto. +Spell/&GuidancePerformanceTitle=Actuación guiada +Spell/&GuidancePersuasionDescription=Añade 1d4 a las pruebas de Persuasión durante hasta 1 minuto. +Spell/&GuidancePersuasionTitle=Persuasión guiada +Spell/&GuidanceReligionDescription=Añade 1d4 a las pruebas de Religión durante hasta 1 minuto. +Spell/&GuidanceReligionTitle=Religión guiada +Spell/&GuidanceSleightOfHandDescription=Añade 1d4 a las pruebas de Juego de manos durante hasta 1 minuto. +Spell/&GuidanceSleightOfHandTitle=Juego de manos guiado +Spell/&GuidanceStealthDescription=Añade 1d4 a las pruebas de Sigilo durante hasta 1 minuto. +Spell/&GuidanceStealthTitle=Sigilo guiado +Spell/&GuidanceSurvivalDescription=Añade 1d4 a las pruebas de Supervivencia durante hasta 1 minuto. +Spell/&GuidanceSurvivalTitle=Supervivencia guiada Spell/&IlluminatingSphereDescription=Provoca que las fuentes de luz, como antorchas y lámparas de maná, en el área de efecto se iluminen. Spell/&IlluminatingSphereTitle=Esfera iluminadora Spell/&InfestationDescription=Provocas que una nube de ácaros, pulgas y otros parásitos aparezca momentáneamente sobre una criatura que puedas ver dentro del alcance. El objetivo debe superar una tirada de salvación de Constitución o sufrirá 1d6 puntos de daño por veneno y se moverá 5 pies en una dirección aleatoria. El daño del conjuro aumenta en un dado adicional en los niveles 5, 11 y 17. @@ -45,6 +117,7 @@ Spell/&MindSpikeDescription=Lanzas una descarga desorientadora de energía psíq Spell/&MindSpikeTitle=Mente fragmentada Spell/&MinorLifestealDescription=Drenas energía vital de una criatura enemiga cercana. Realiza un ataque de hechizo cuerpo a cuerpo contra una criatura a 5 pies o menos de ti. Si impactas, la criatura sufre 1d6 puntos de daño necrótico y tú te curas la mitad del daño infligido (redondeado hacia abajo). Este hechizo no tiene efecto sobre muertos vivientes y constructos. El daño del hechizo aumenta en un dado adicional en los niveles 5, 11 y 17. Spell/&MinorLifestealTitle=Robo de vida menor +Spell/&OneDndGuidanceDescription=Tocas a una criatura voluntaria y eliges una habilidad. Hasta que el hechizo termine, la criatura suma 1d4 a cualquier prueba de característica que utilice la habilidad elegida. Spell/&PrimalSavageryDescription=Canalizas magia primigenia para afilar tus dientes o uñas, listos para lanzar un ataque corrosivo. Realiza un ataque de hechizo cuerpo a cuerpo contra una criatura a 5 pies o menos de ti. Si impactas, el objetivo sufre 1d10 de daño por ácido. El daño del hechizo aumenta en un dado adicional en los niveles 5, 11 y 17. Spell/&PrimalSavageryTitle=Salvaje primigenio Spell/&ResonatingStrikeDescription=Blandes el arma utilizada para lanzar el conjuro y realizas un ataque cuerpo a cuerpo con ella contra una criatura que se encuentre dentro de una distancia de {0}. Si impactas, el objetivo sufre los efectos normales del ataque con arma y puedes hacer que un fuego verde salte del objetivo a una criatura diferente de tu elección que puedas ver a 5 pies de él. La segunda criatura recibe daño por fuego igual a tu modificador por característica de lanzamiento de conjuros. A nivel 5, el ataque cuerpo a cuerpo inflige 1d8 de daño por fuego adicional al objetivo si impactas, y el daño por fuego a la segunda criatura aumenta a 1d8 + tu modificador por característica de lanzamiento de conjuros. Ambas tiradas de daño aumentan en 1d8 en los niveles 11 y 17. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index b24b9e41c2..fd828086e1 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -313,6 +313,7 @@ ModUi/&SwapEvocationPotentCantripAndSculptSpell=Échangez les fonctionnalités < ModUi/&SwapEvocationSavant=Échangez Evoker Evocation Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Remplacez Attaque non armée par la progression du type de dé 5e 2024 ModUi/&SwapOneDndBarkskinSpell=Échangez Barkskin avec la version 5e 2024 [action bonus, pas de concentration, CA réglée à 17] +ModUi/&SwapOneDndGuidanceSpell=Échangez Guidage avec la version 5e 2024 [Choisissez une compétence au lancement et obtenez un bonus jusqu'à 1 minute.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Remplacez Second Wind pour utiliser la progression des utilisations 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Échangez la progression des Invocations avec la version 5e 2024 ModUi/&TableTopButton=Sélectionnez le contenu de la table diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt index ab28184e8d..d2b72d78f7 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt @@ -2,6 +2,42 @@ Condition/&ConditionAcidClawsDescription=-1 à AC. Condition/&ConditionAcidClawsTitle=Brûlures acides Condition/&ConditionBoomingBladeSheathedDescription=Vous êtes enveloppé d'une énergie tonitruante. Si vous vous déplacez volontairement de 1,50 m ou plus, vous subissez des dégâts de foudre. Condition/&ConditionBoomingBladeSheathedTitle=Gainé +Condition/&ConditionGuidanceAcrobaticsDescription=Ajoutez 1d4 aux tests d'acrobatie pendant 1 minute maximum. +Condition/&ConditionGuidanceAcrobaticsTitle=Acrobaties guidées +Condition/&ConditionGuidanceAnimal HandlingDescription=Ajoutez 1d4 aux tests de Dressage d'animaux pendant 1 minute maximum. +Condition/&ConditionGuidanceAnimal HandlingTitle=Manipulation guidée d'animaux +Condition/&ConditionGuidanceArcanaDescription=Ajoutez 1d4 aux tests d'Arcanes pendant 1 minute maximum. +Condition/&ConditionGuidanceArcanaTitle=Arcanes guidés +Condition/&ConditionGuidanceAthleticsDescription=Ajoutez 1d4 aux tests d'Athlétisme pendant 1 minute maximum. +Condition/&ConditionGuidanceAthleticsTitle=Athlétisme guidé +Condition/&ConditionGuidanceDeceptionDescription=Ajoutez 1d4 aux tests de Tromperie pendant 1 minute maximum. +Condition/&ConditionGuidanceDeceptionTitle=Tromperie guidée +Condition/&ConditionGuidanceHistoryDescription=Ajoutez 1d4 aux tests d'Histoire pendant 1 minute maximum. +Condition/&ConditionGuidanceHistoryTitle=Histoire guidée +Condition/&ConditionGuidanceInsightDescription=Ajoutez 1d4 aux tests de Perspicacité pendant 1 minute maximum. +Condition/&ConditionGuidanceInsightTitle=Connaissance guidée +Condition/&ConditionGuidanceIntimidationDescription=Ajoutez 1d4 aux tests d'Intimidation pendant 1 minute maximum. +Condition/&ConditionGuidanceIntimidationTitle=Intimidation guidée +Condition/&ConditionGuidanceInvestigationDescription=Ajoutez 1d4 aux tests d'investigation pendant 1 minute maximum. +Condition/&ConditionGuidanceInvestigationTitle=Enquête guidée +Condition/&ConditionGuidanceMedecineDescription=Ajoutez 1d4 aux tests de Médecine pendant 1 minute maximum. +Condition/&ConditionGuidanceMedecineTitle=Médecine guidée +Condition/&ConditionGuidanceNatureDescription=Ajoutez 1d4 aux tests de Nature pendant 1 minute maximum. +Condition/&ConditionGuidanceNatureTitle=Nature guidée +Condition/&ConditionGuidancePerceptionDescription=Ajoutez 1d4 aux tests de Perception pendant 1 minute maximum. +Condition/&ConditionGuidancePerceptionTitle=Perception guidée +Condition/&ConditionGuidancePerformanceDescription=Ajoutez 1d4 aux tests de performance pendant 1 minute maximum. +Condition/&ConditionGuidancePerformanceTitle=Performance guidée +Condition/&ConditionGuidancePersuasionDescription=Ajoutez 1d4 aux tests de Persuasion pendant 1 minute maximum. +Condition/&ConditionGuidancePersuasionTitle=Persuasion guidée +Condition/&ConditionGuidanceReligionDescription=Ajoutez 1d4 aux tests de Religion pendant 1 minute maximum. +Condition/&ConditionGuidanceReligionTitle=Religion guidée +Condition/&ConditionGuidanceSleightOfHandDescription=Ajoutez 1d4 aux tests de Tour de passe-passe pendant 1 minute maximum. +Condition/&ConditionGuidanceSleightOfHandTitle=Tour de passe-passe guidé +Condition/&ConditionGuidanceStealthDescription=Ajoutez 1d4 aux tests de Discrétion pendant 1 minute maximum. +Condition/&ConditionGuidanceStealthTitle=Furtivité guidée +Condition/&ConditionGuidanceSurvivalDescription=Ajoutez 1d4 aux tests de Survie pendant 1 minute maximum. +Condition/&ConditionGuidanceSurvivalTitle=Survie guidée Condition/&ConditionMindSpikeDescription=Soustrait 1d4 du prochain jet de sauvegarde. Condition/&ConditionMindSpikeTitle=Esprit effilé Condition/&ConditionStarryWispDescription=Ne peut pas bénéficier de la condition Invisible. @@ -33,6 +69,42 @@ Spell/&CreateBonfireDescription=Vous créez un feu de joie sur le sol que vous p Spell/&CreateBonfireTitle=Créer un feu de joie Spell/&EnduringStingDescription=Vous sapez la vitalité d'une créature visible à portée. La cible doit réussir un jet de sauvegarde de Constitution ou subir 1d4 dégâts nécrotiques et tomber à terre. Spell/&EnduringStingTitle=Piqûre sapante +Spell/&GuidanceAcrobaticsDescription=Ajoutez 1d4 aux tests d'acrobatie pendant 1 minute maximum. +Spell/&GuidanceAcrobaticsTitle=Acrobaties guidées +Spell/&GuidanceAnimalHandlingDescription=Ajoutez 1d4 aux tests de Dressage d'animaux pendant 1 minute maximum. +Spell/&GuidanceAnimalHandlingTitle=Manipulation guidée d'animaux +Spell/&GuidanceArcanaDescription=Ajoutez 1d4 aux tests d'Arcanes pendant 1 minute maximum. +Spell/&GuidanceArcanaTitle=Arcanes guidés +Spell/&GuidanceAthleticsDescription=Ajoutez 1d4 aux tests d'Athlétisme pendant 1 minute maximum. +Spell/&GuidanceAthleticsTitle=Athlétisme guidé +Spell/&GuidanceDeceptionDescription=Ajoutez 1d4 aux tests de Tromperie pendant 1 minute maximum. +Spell/&GuidanceDeceptionTitle=Tromperie guidée +Spell/&GuidanceHistoryDescription=Ajoutez 1d4 aux tests d'Histoire pendant 1 minute maximum. +Spell/&GuidanceHistoryTitle=Histoire guidée +Spell/&GuidanceInsightDescription=Ajoutez 1d4 aux tests de Perspicacité pendant 1 minute maximum. +Spell/&GuidanceInsightTitle=Connaissance guidée +Spell/&GuidanceIntimidationDescription=Ajoutez 1d4 aux tests d'Intimidation pendant 1 minute maximum. +Spell/&GuidanceIntimidationTitle=Intimidation guidée +Spell/&GuidanceInvestigationDescription=Ajoutez 1d4 aux tests d'investigation pendant 1 minute maximum. +Spell/&GuidanceInvestigationTitle=Enquête guidée +Spell/&GuidanceMedecineDescription=Ajoutez 1d4 aux tests de Médecine pendant 1 minute maximum. +Spell/&GuidanceMedecineTitle=Médecine guidée +Spell/&GuidanceNatureDescription=Ajoutez 1d4 aux tests de Nature pendant 1 minute maximum. +Spell/&GuidanceNatureTitle=Nature guidée +Spell/&GuidancePerceptionDescription=Ajoutez 1d4 aux tests de Perception pendant 1 minute maximum. +Spell/&GuidancePerceptionTitle=Perception guidée +Spell/&GuidancePerformanceDescription=Ajoutez 1d4 aux tests de performance pendant 1 minute maximum. +Spell/&GuidancePerformanceTitle=Performance guidée +Spell/&GuidancePersuasionDescription=Ajoutez 1d4 aux tests de Persuasion pendant 1 minute maximum. +Spell/&GuidancePersuasionTitle=Persuasion guidée +Spell/&GuidanceReligionDescription=Ajoutez 1d4 aux tests de Religion pendant 1 minute maximum. +Spell/&GuidanceReligionTitle=Religion guidée +Spell/&GuidanceSleightOfHandDescription=Ajoutez 1d4 aux tests de Tour de passe-passe pendant 1 minute maximum. +Spell/&GuidanceSleightOfHandTitle=Tour de passe-passe guidé +Spell/&GuidanceStealthDescription=Ajoutez 1d4 aux tests de Discrétion pendant 1 minute maximum. +Spell/&GuidanceStealthTitle=Furtivité guidée +Spell/&GuidanceSurvivalDescription=Ajoutez 1d4 aux tests de Survie pendant 1 minute maximum. +Spell/&GuidanceSurvivalTitle=Survie guidée Spell/&IlluminatingSphereDescription=Provoque l'allumage des sources lumineuses telles que les torches et les lampes de mana dans la zone d'effet. Spell/&IlluminatingSphereTitle=Sphère lumineuse Spell/&InfestationDescription=Vous faites apparaître momentanément un nuage d'acariens, de puces et d'autres parasites sur une créature que vous pouvez voir à portée. La cible doit réussir un jet de sauvegarde de Constitution, sinon elle subit 1d6 dégâts de poison et se déplace de 1,50 mètre dans une direction aléatoire. Les dégâts du sort augmentent d'un dé supplémentaire aux niveaux 5, 11 et 17. @@ -45,6 +117,7 @@ Spell/&MindSpikeDescription=Vous envoyez une décharge d'énergie psychique dés Spell/&MindSpikeTitle=Ruban mental Spell/&MinorLifestealDescription=Vous drainez l'énergie vitale d'une créature ennemie proche. Lancez une attaque de sort au corps à corps contre une créature à 1,50 m ou moins de vous. En cas de succès, la créature subit 1d6 dégâts nécrotiques et vous récupérez la moitié des dégâts infligés (arrondis à l'inférieur). Ce sort n'a aucun effet sur les morts-vivants et les créatures artificielles. Les dégâts du sort augmentent d'un dé supplémentaire aux niveaux 5, 11 et 17. Spell/&MinorLifestealTitle=Vol de vie mineur +Spell/&OneDndGuidanceDescription=Vous touchez une créature consentante et choisissez une compétence. Jusqu'à la fin du sort, la créature ajoute ld4 à tout test de caractéristique utilisant la compétence choisie. Spell/&PrimalSavageryDescription=Vous canalisez la magie primitive pour aiguiser vos dents ou vos ongles, prêts à lancer une attaque corrosive. Lancez une attaque de sort au corps à corps contre une créature à 1,50 m ou moins de vous. En cas de succès, la cible subit 1d10 dégâts d'acide. Les dégâts du sort augmentent d'un dé supplémentaire aux niveaux 5, 11 et 17. Spell/&PrimalSavageryTitle=La sauvagerie primitive Spell/&ResonatingStrikeDescription=Vous brandissez l'arme utilisée pour lancer le sort et effectuez une attaque au corps à corps contre une créature à une distance de {0}. En cas de succès, la cible subit les effets normaux de l'attaque avec l'arme et vous pouvez faire jaillir du feu vert de la cible vers une autre créature de votre choix que vous pouvez voir à 1,50 m ou moins d'elle. La seconde créature subit des dégâts de feu égaux à votre modificateur de caractéristique d'incantation. Au niveau 5, l'attaque au corps à corps inflige 1d8 dégâts de feu supplémentaires à la cible en cas de succès et les dégâts de feu infligés à la seconde créature augmentent à 1d8 + votre modificateur de caractéristique d'incantation. Les deux jets de dégâts augmentent de 1d8 aux niveaux 11 et 17. diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index e51280cfaf..2847c8af66 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -313,6 +313,7 @@ ModUi/&SwapEvocationPotentCantripAndSculptSpell=Scambia le funzionalità Evoc ModUi/&SwapEvocationSavant=Sostituisci Evocatore Sapiente dell'evocazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Sostituisci Attacco disarmato per usare la progressione del tipo di dado 5e 2024 ModUi/&SwapOneDndBarkskinSpell=Sostituisci Barkskin con la versione 5e 2024 [azione bonus, nessuna concentrazione, CA impostata a 17] +ModUi/&SwapOneDndGuidanceSpell=Sostituisci Guida con la versione 5e 2024 [Scegli un'abilità durante il lancio e ottieni un bonus fino a 1 minuto.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Sostituisci Second Wind per usare la progressione di utilizzo 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Scambia la progressione delle Invocazioni con la versione 5e 2024 ModUi/&TableTopButton=Seleziona contenuto Tabletop diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt index 7bf39d5f5d..ee3f1e84e9 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt @@ -2,6 +2,42 @@ Condition/&ConditionAcidClawsDescription=-1 a CA. Condition/&ConditionAcidClawsTitle=Ustione da acido Condition/&ConditionBoomingBladeSheathedDescription=Sei avvolto in un'energia rimbombante. Se ti sposti volontariamente di 5 piedi o più, subisci danni da tuono. Condition/&ConditionBoomingBladeSheathedTitle=Guainata +Condition/&ConditionGuidanceAcrobaticsDescription=Aggiungi 1d4 alle prove di Acrobazia per un massimo di 1 minuto. +Condition/&ConditionGuidanceAcrobaticsTitle=Acrobazie guidate +Condition/&ConditionGuidanceAnimal HandlingDescription=Aggiungere 1d4 alle prove di Addestramento Animali per un massimo di 1 minuto. +Condition/&ConditionGuidanceAnimal HandlingTitle=Gestione guidata degli animali +Condition/&ConditionGuidanceArcanaDescription=Aggiungi 1d4 alle prove di Arcano per un massimo di 1 minuto. +Condition/&ConditionGuidanceArcanaTitle=Arcani guidati +Condition/&ConditionGuidanceAthleticsDescription=Aggiungi 1d4 alle prove di Atletica per un massimo di 1 minuto. +Condition/&ConditionGuidanceAthleticsTitle=Atletica guidata +Condition/&ConditionGuidanceDeceptionDescription=Aggiungi 1d4 alle prove di Inganno per un massimo di 1 minuto. +Condition/&ConditionGuidanceDeceptionTitle=Inganno guidato +Condition/&ConditionGuidanceHistoryDescription=Aggiungi 1d4 alle prove di Storia per un massimo di 1 minuto. +Condition/&ConditionGuidanceHistoryTitle=Storia guidata +Condition/&ConditionGuidanceInsightDescription=Aggiungi 1d4 alle prove di Intuizione per un massimo di 1 minuto. +Condition/&ConditionGuidanceInsightTitle=Intuizione guidata +Condition/&ConditionGuidanceIntimidationDescription=Aggiungere 1d4 alle prove di Intimidazione per un massimo di 1 minuto. +Condition/&ConditionGuidanceIntimidationTitle=Intimidazione guidata +Condition/&ConditionGuidanceInvestigationDescription=Aggiungere 1d4 alle prove di Investigazione per un massimo di 1 minuto. +Condition/&ConditionGuidanceInvestigationTitle=Indagine guidata +Condition/&ConditionGuidanceMedecineDescription=Aggiungi 1d4 alle prove di Medicina per un massimo di 1 minuto. +Condition/&ConditionGuidanceMedecineTitle=Medicina guidata +Condition/&ConditionGuidanceNatureDescription=Aggiungi 1d4 alle prove di Natura per un massimo di 1 minuto. +Condition/&ConditionGuidanceNatureTitle=Natura guidata +Condition/&ConditionGuidancePerceptionDescription=Aggiungi 1d4 alle prove di Percezione per un massimo di 1 minuto. +Condition/&ConditionGuidancePerceptionTitle=Percezione guidata +Condition/&ConditionGuidancePerformanceDescription=Aggiungi 1d4 alle prove di Prestazione per un massimo di 1 minuto. +Condition/&ConditionGuidancePerformanceTitle=Prestazioni guidate +Condition/&ConditionGuidancePersuasionDescription=Aggiungi 1d4 alle prove di Persuasione per un massimo di 1 minuto. +Condition/&ConditionGuidancePersuasionTitle=Persuasione guidata +Condition/&ConditionGuidanceReligionDescription=Aggiungi 1d4 alle prove di Religione per un massimo di 1 minuto. +Condition/&ConditionGuidanceReligionTitle=Religione guidata +Condition/&ConditionGuidanceSleightOfHandDescription=Aggiungi 1d4 alle prove di Rapidità di Mano per un massimo di 1 minuto. +Condition/&ConditionGuidanceSleightOfHandTitle=Gioco di prestigio guidato +Condition/&ConditionGuidanceStealthDescription=Aggiungere 1d4 alle prove di Furtività fino a 1 minuto. +Condition/&ConditionGuidanceStealthTitle=Furtività guidata +Condition/&ConditionGuidanceSurvivalDescription=Aggiungere 1d4 alle prove di Sopravvivenza per un massimo di 1 minuto. +Condition/&ConditionGuidanceSurvivalTitle=Sopravvivenza guidata Condition/&ConditionMindSpikeDescription=Sottrae 1d4 dal tiro salvezza successivo. Condition/&ConditionMindSpikeTitle=Frammento di Mente Condition/&ConditionStarryWispDescription=Non può trarre beneficio dalla condizione Invisibile. @@ -33,6 +69,42 @@ Spell/&CreateBonfireDescription=Crei un falò su un terreno che puoi vedere entr Spell/&CreateBonfireTitle=Crea Falò Spell/&EnduringStingDescription=Prosciuga la vitalità di una creatura che puoi vedere nel raggio d'azione. Il bersaglio deve superare un tiro salvezza su Costituzione o subire 1d4 danni necrotici e cadere prono. Spell/&EnduringStingTitle=Puntura indebolente +Spell/&GuidanceAcrobaticsDescription=Aggiungi 1d4 alle prove di Acrobazia per un massimo di 1 minuto. +Spell/&GuidanceAcrobaticsTitle=Acrobazie guidate +Spell/&GuidanceAnimalHandlingDescription=Aggiungere 1d4 alle prove di Addestramento Animali per un massimo di 1 minuto. +Spell/&GuidanceAnimalHandlingTitle=Gestione guidata degli animali +Spell/&GuidanceArcanaDescription=Aggiungi 1d4 alle prove di Arcano per un massimo di 1 minuto. +Spell/&GuidanceArcanaTitle=Arcani guidati +Spell/&GuidanceAthleticsDescription=Aggiungi 1d4 alle prove di Atletica per un massimo di 1 minuto. +Spell/&GuidanceAthleticsTitle=Atletica guidata +Spell/&GuidanceDeceptionDescription=Aggiungi 1d4 alle prove di Inganno per un massimo di 1 minuto. +Spell/&GuidanceDeceptionTitle=Inganno guidato +Spell/&GuidanceHistoryDescription=Aggiungi 1d4 alle prove di Storia per un massimo di 1 minuto. +Spell/&GuidanceHistoryTitle=Storia guidata +Spell/&GuidanceInsightDescription=Aggiungi 1d4 alle prove di Intuizione per un massimo di 1 minuto. +Spell/&GuidanceInsightTitle=Intuizione guidata +Spell/&GuidanceIntimidationDescription=Aggiungere 1d4 alle prove di Intimidazione per un massimo di 1 minuto. +Spell/&GuidanceIntimidationTitle=Intimidazione guidata +Spell/&GuidanceInvestigationDescription=Aggiungere 1d4 alle prove di Investigazione per un massimo di 1 minuto. +Spell/&GuidanceInvestigationTitle=Indagine guidata +Spell/&GuidanceMedecineDescription=Aggiungi 1d4 alle prove di Medicina per un massimo di 1 minuto. +Spell/&GuidanceMedecineTitle=Medicina guidata +Spell/&GuidanceNatureDescription=Aggiungi 1d4 alle prove di Natura per un massimo di 1 minuto. +Spell/&GuidanceNatureTitle=Natura guidata +Spell/&GuidancePerceptionDescription=Aggiungi 1d4 alle prove di Percezione per un massimo di 1 minuto. +Spell/&GuidancePerceptionTitle=Percezione guidata +Spell/&GuidancePerformanceDescription=Aggiungi 1d4 alle prove di Prestazione per un massimo di 1 minuto. +Spell/&GuidancePerformanceTitle=Prestazioni guidate +Spell/&GuidancePersuasionDescription=Aggiungi 1d4 alle prove di Persuasione per un massimo di 1 minuto. +Spell/&GuidancePersuasionTitle=Persuasione guidata +Spell/&GuidanceReligionDescription=Aggiungi 1d4 alle prove di Religione per un massimo di 1 minuto. +Spell/&GuidanceReligionTitle=Religione guidata +Spell/&GuidanceSleightOfHandDescription=Aggiungi 1d4 alle prove di Rapidità di Mano per un massimo di 1 minuto. +Spell/&GuidanceSleightOfHandTitle=Gioco di prestigio guidato +Spell/&GuidanceStealthDescription=Aggiungere 1d4 alle prove di Furtività fino a 1 minuto. +Spell/&GuidanceStealthTitle=Furtività guidata +Spell/&GuidanceSurvivalDescription=Aggiungere 1d4 alle prove di Sopravvivenza per un massimo di 1 minuto. +Spell/&GuidanceSurvivalTitle=Sopravvivenza guidata Spell/&IlluminatingSphereDescription=Fa sì che fonti di luce come torce e lampade di mana nell'area d'effetto si accendano. Spell/&IlluminatingSphereTitle=Sfera illuminante Spell/&InfestationDescription=Fai apparire momentaneamente una nuvola di acari, pulci e altri parassiti su una creatura che puoi vedere entro il raggio d'azione. Il bersaglio deve superare un tiro salvezza su Costituzione, altrimenti subisce 1d6 danni da veleno e si muove di 5 piedi in una direzione casuale. Il danno dell'incantesimo aumenta di un dado aggiuntivo al 5°, 11° e 17° livello. @@ -45,6 +117,7 @@ Spell/&MindSpikeDescription=Scagli una scarica disorientante di energia psichica Spell/&MindSpikeTitle=Frammento di Mente Spell/&MinorLifestealDescription=Drenare energia vitale da una creatura nemica vicina. Effettuare un attacco con incantesimo in mischia contro una creatura entro 5 piedi da te. In caso di colpo, la creatura subisce 1d6 danni necrotici e tu guarisci per metà dei danni inflitti (arrotondati per difetto). Questo incantesimo non ha effetto su non morti e costrutti. Il danno dell'incantesimo aumenta di un dado aggiuntivo al 5°, 11° e 17° livello. Spell/&MinorLifestealTitle=Furto di vita minore +Spell/&OneDndGuidanceDescription=Tocchi una creatura consenziente e scegli un'abilità. Finché l'incantesimo non termina, la creatura aggiunge ld4 a qualsiasi prova di abilità usando l'abilità scelta. Spell/&PrimalSavageryDescription=Incanalate la magia primordiale per far affilare i vostri denti o le vostre unghie, pronti a sferrare un attacco corrosivo. Fate un attacco con incantesimo in mischia contro una creatura entro 5 piedi da voi. Se colpisce, il bersaglio subisce 1d10 danni da acido. Il danno dell'incantesimo aumenta di un dado aggiuntivo al 5°, 11° e 17° livello. Spell/&PrimalSavageryTitle=Selvaggina primordiale Spell/&ResonatingStrikeDescription=Brandisci l'arma usata per lanciare l'incantesimo e fai un attacco in mischia con essa contro una creatura entro {0} di distanza. Se colpisce, il bersaglio subisce i normali effetti dell'attacco con l'arma e puoi far balzare del fuoco verde dal bersaglio a una creatura diversa a tua scelta che puoi vedere entro 5 piedi da esso. La seconda creatura subisce danni da fuoco pari al tuo modificatore di abilità di lancio di incantesimi. Al 5° livello, l'attacco in mischia infligge 1d8 danni da fuoco extra al bersaglio se colpisce e i danni da fuoco alla seconda creatura aumentano a 1d8 + il tuo modificatore di abilità di lancio di incantesimi. Entrambi i tiri per i danni aumentano di 1d8 all'11° e al 17° livello. diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 3b6fd27e6d..adb3cfaf12 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -313,6 +313,7 @@ ModUi/&SwapEvocationPotentCantripAndSculptSpell=エヴォーカーのEvoker Evocation Savant を 5e 2024 バージョン [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびにさらに 1 つ習得する] と入れ替えます ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Unarmed Attack を 5e 2024 ダイスタイプの進行に置き換える ModUi/&SwapOneDndBarkskinSpell=Barkskin を 5e 2024 バージョンの [ボーナス アクション、集中力なし、AC を 17 に設定] と交換します。 +ModUi/&SwapOneDndGuidanceSpell=ガイダンスを5e 2024バージョンと入れ替えます [発動時にスキルを1つ選択し、最大1分間ボーナスを獲得します。] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=セカンド ウィンド を 5e 2024 の使用進行に置き換える ModUi/&SwapWarlockToUseOneDndInvocationProgression=Invocations の進行を 5e 2024 バージョンと入れ替える ModUi/&TableTopButton=テーブルトップコンテンツを選択 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt index ba9c119e17..476184b4ab 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt @@ -2,6 +2,42 @@ Condition/&ConditionAcidClawsDescription=アーマークラスが1下がりま Condition/&ConditionAcidClawsTitle=アシッドバーン Condition/&ConditionBoomingBladeSheathedDescription=あなたは轟くエネルギーに包まれています。あなたが自発的に 5 フィート以上移動すると、雷のダメージを受けます。 Condition/&ConditionBoomingBladeSheathedTitle=鞘付き +Condition/&ConditionGuidanceAcrobaticsDescription=最大 1 分間、アクロバット判定に 1d4 を追加します。 +Condition/&ConditionGuidanceAcrobaticsTitle=ガイド付きアクロバット +Condition/&ConditionGuidanceAnimal HandlingDescription=最大 1 分間、動物の扱いの判定に 1d4 を追加します。 +Condition/&ConditionGuidanceAnimal HandlingTitle=動物の扱い方ガイド +Condition/&ConditionGuidanceArcanaDescription=最大 1 分間、魔法判定に 1d4 を追加します。 +Condition/&ConditionGuidanceArcanaTitle=ガイド付きアルカナ +Condition/&ConditionGuidanceAthleticsDescription=最大 1 分間、運動能力判定に 1d4 を追加します。 +Condition/&ConditionGuidanceAthleticsTitle=ガイド付き陸上競技 +Condition/&ConditionGuidanceDeceptionDescription=最大 1 分間、欺瞞判定に 1d4 を追加します。 +Condition/&ConditionGuidanceDeceptionTitle=誘導欺瞞 +Condition/&ConditionGuidanceHistoryDescription=最大 1 分間、履歴チェックに 1d4 を追加します。 +Condition/&ConditionGuidanceHistoryTitle=ガイド付き歴史 +Condition/&ConditionGuidanceInsightDescription=最大 1 分間、洞察力判定に 1d4 を追加します。 +Condition/&ConditionGuidanceInsightTitle=ガイド付きインサイト +Condition/&ConditionGuidanceIntimidationDescription=最大 1 分間、威嚇判定に 1d4 を追加します。 +Condition/&ConditionGuidanceIntimidationTitle=誘導脅迫 +Condition/&ConditionGuidanceInvestigationDescription=最大 1 分間、調査判定に 1d4 を追加します。 +Condition/&ConditionGuidanceInvestigationTitle=ガイド付き調査 +Condition/&ConditionGuidanceMedecineDescription=最大 1 分間、医療チェックに 1d4 を追加します。 +Condition/&ConditionGuidanceMedecineTitle=ガイド付き医療 +Condition/&ConditionGuidanceNatureDescription=最大 1 分間、自然判定に 1d4 を追加します。 +Condition/&ConditionGuidanceNatureTitle=ガイド付き自然 +Condition/&ConditionGuidancePerceptionDescription=最大 1 分間、知覚判定に 1d4 を追加します。 +Condition/&ConditionGuidancePerceptionTitle=ガイド付き知覚 +Condition/&ConditionGuidancePerformanceDescription=最大 1 分間、パフォーマンス チェックに 1d4 を追加します。 +Condition/&ConditionGuidancePerformanceTitle=ガイド付きパフォーマンス +Condition/&ConditionGuidancePersuasionDescription=最大 1 分間、説得判定に 1d4 を追加します。 +Condition/&ConditionGuidancePersuasionTitle=誘導による説得 +Condition/&ConditionGuidanceReligionDescription=最大 1 分間、宗教判定に 1d4 を追加します。 +Condition/&ConditionGuidanceReligionTitle=導かれた宗教 +Condition/&ConditionGuidanceSleightOfHandDescription=最長 1 分間、SleightOfHand 判定に 1d4 を追加します。 +Condition/&ConditionGuidanceSleightOfHandTitle=ガイド付き SleightOfHand +Condition/&ConditionGuidanceStealthDescription=最大 1 分間、ステルス チェックに 1d4 を追加します。 +Condition/&ConditionGuidanceStealthTitle=誘導ステルス +Condition/&ConditionGuidanceSurvivalDescription=最大 1 分間、生存判定に 1d4 を追加します。 +Condition/&ConditionGuidanceSurvivalTitle=ガイド付きサバイバル Condition/&ConditionMindSpikeDescription=次のセーヴィング スローから 1d4 を減算します。 Condition/&ConditionMindSpikeTitle=マインドスライバー Condition/&ConditionStarryWispDescription=不可視状態の恩恵を受けることはできません。 @@ -33,6 +69,42 @@ Spell/&CreateBonfireDescription=範囲内で見ることができる地面に焚 Spell/&CreateBonfireTitle=焚き火を作る Spell/&EnduringStingDescription=範囲内に見える1匹の生き物の活力を奪います。ターゲットは憲法セーヴィング・スローに成功するか、1d4 の壊死ダメージを受けて伏せる必要があります。 Spell/&EnduringStingTitle=サッピング・スティング +Spell/&GuidanceAcrobaticsDescription=最大 1 分間、アクロバット判定に 1d4 を追加します。 +Spell/&GuidanceAcrobaticsTitle=ガイド付きアクロバット +Spell/&GuidanceAnimalHandlingDescription=最大 1 分間、動物の扱いの判定に 1d4 を追加します。 +Spell/&GuidanceAnimalHandlingTitle=動物の扱い方ガイド +Spell/&GuidanceArcanaDescription=最大 1 分間、魔法判定に 1d4 を追加します。 +Spell/&GuidanceArcanaTitle=ガイド付きアルカナ +Spell/&GuidanceAthleticsDescription=最大 1 分間、運動能力判定に 1d4 を追加します。 +Spell/&GuidanceAthleticsTitle=ガイド付き陸上競技 +Spell/&GuidanceDeceptionDescription=最大 1 分間、欺瞞判定に 1d4 を追加します。 +Spell/&GuidanceDeceptionTitle=誘導欺瞞 +Spell/&GuidanceHistoryDescription=最大 1 分間、履歴チェックに 1d4 を追加します。 +Spell/&GuidanceHistoryTitle=ガイド付き歴史 +Spell/&GuidanceInsightDescription=最大 1 分間、洞察力判定に 1d4 を追加します。 +Spell/&GuidanceInsightTitle=ガイド付きインサイト +Spell/&GuidanceIntimidationDescription=最大 1 分間、威嚇判定に 1d4 を追加します。 +Spell/&GuidanceIntimidationTitle=誘導脅迫 +Spell/&GuidanceInvestigationDescription=最大 1 分間、調査判定に 1d4 を追加します。 +Spell/&GuidanceInvestigationTitle=ガイド付き調査 +Spell/&GuidanceMedecineDescription=最大 1 分間、医療チェックに 1d4 を追加します。 +Spell/&GuidanceMedecineTitle=ガイド付き医療 +Spell/&GuidanceNatureDescription=最大 1 分間、自然判定に 1d4 を追加します。 +Spell/&GuidanceNatureTitle=ガイド付き自然 +Spell/&GuidancePerceptionDescription=最大 1 分間、知覚判定に 1d4 を追加します。 +Spell/&GuidancePerceptionTitle=ガイド付き知覚 +Spell/&GuidancePerformanceDescription=最大 1 分間、パフォーマンス チェックに 1d4 を追加します。 +Spell/&GuidancePerformanceTitle=ガイド付きパフォーマンス +Spell/&GuidancePersuasionDescription=最大 1 分間、説得判定に 1d4 を追加します。 +Spell/&GuidancePersuasionTitle=誘導による説得 +Spell/&GuidanceReligionDescription=最大 1 分間、宗教判定に 1d4 を追加します。 +Spell/&GuidanceReligionTitle=導かれた宗教 +Spell/&GuidanceSleightOfHandDescription=最長 1 分間、SleightOfHand 判定に 1d4 を追加します。 +Spell/&GuidanceSleightOfHandTitle=ガイド付き SleightOfHand +Spell/&GuidanceStealthDescription=最大 1 分間、ステルス チェックに 1d4 を追加します。 +Spell/&GuidanceStealthTitle=誘導ステルス +Spell/&GuidanceSurvivalDescription=最大 1 分間、生存判定に 1d4 を追加します。 +Spell/&GuidanceSurvivalTitle=ガイド付きサバイバル Spell/&IlluminatingSphereDescription=効果範囲内のトーチやマナランプなどの光源を発光させる。 Spell/&IlluminatingSphereTitle=イルミネーションスフィア Spell/&InfestationDescription=範囲内にいる、あなたが見ることができる 1 体のクリーチャーに、ダニ、ノミ、その他の寄生虫の群れを一瞬出現させます。ターゲットは耐久力セーヴィング スローに成功しなければならず、失敗すると 1d6 の毒ダメージを受け、ランダムな方向に 5 フィート移動します。呪文のダメージは、レベル 5、11、17 でダイス 1 個ずつ増加します。 @@ -45,6 +117,7 @@ Spell/&MindSpikeDescription=あなたは、範囲内に見える 1 匹の生き Spell/&MindSpikeTitle=マインドスライバー Spell/&MinorLifestealDescription=近くの敵クリーチャーから生命力を吸収します。5 フィート以内のクリーチャーに対して近接呪文攻撃を行います。命中すると、クリーチャーは 1d6 の死傷ダメージを受け、与えたダメージの半分 (端数切り捨て) だけ回復します。この呪文はアンデッドや構築物には効果がありません。呪文のダメージは 5、11、17 レベルでダイス 1 個ずつ増加します。 Spell/&MinorLifestealTitle=マイナーライフスティール +Spell/&OneDndGuidanceDescription=同意するクリーチャーに触れ、スキルを選択します。呪文が終了するまで、クリーチャーは選択したスキルを使用する能力値チェックに ld4 を追加します。 Spell/&PrimalSavageryDescription=原始の魔法を流して歯や爪を鋭くし、腐食攻撃を仕掛ける準備を整えます。5 フィート以内にいる 1 体のクリーチャーに対して近接呪文攻撃を行います。命中すると、ターゲットは 1d10 の酸ダメージを受けます。呪文のダメージは 5、11、17 レベルでダイス 1 個ずつ増加します。 Spell/&PrimalSavageryTitle=原始的な野蛮さ Spell/&ResonatingStrikeDescription=呪文を唱える際に使用した武器を振りかざし、{0} 距離内の 1 体のクリーチャーに対して近接攻撃を行います。命中すると、ターゲットは武器攻撃の通常の効果を受け、ターゲットから 5 フィート以内にいる、あなたが見ることができる別のクリーチャー 1 体に向かって緑色の炎を飛び移らせることができます。2 番目のクリーチャーは、あなたの呪文発動能力修正値に等しい火炎ダメージを受けます。5 レベルの時点で、近接攻撃は命中時にターゲットに追加で 1d8 の火炎ダメージを与え、2 番目のクリーチャーへの火炎ダメージは 1d8 + あなたの呪文発動能力修正値に増加します。両方のダメージ ロールは、11 レベルと 17 レベルで 1d8 増加します。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 2db1beb79f..4c31e65e17 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -313,6 +313,7 @@ ModUi/&SwapEvocationPotentCantripAndSculptSpell=소환사 ModUi/&SwapEvocationSavant=Evoker Evocation Savant를 5e 2024 버전으로 교체하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=비무장 공격을 5e 2024 주사위 유형 진행을 사용하도록 바꾸세요. ModUi/&SwapOneDndBarkskinSpell=Barkskin을 5e 2024 버전 [보너스 액션, 집중 없음, AC 17로 설정]과 교환하세요 +ModUi/&SwapOneDndGuidanceSpell=가이드를 5e 2024 버전으로 바꾸세요 [시전 시 스킬 하나를 선택하면 최대 1분 동안 보너스를 받습니다.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Second Wind를 5e 2024 사용 진행을 사용하도록 바꾸세요. ModUi/&SwapWarlockToUseOneDndInvocationProgression=Invocations 진행을 5e 2024 버전으로 바꾸세요 ModUi/&TableTopButton=테이블탑 콘텐츠 선택 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt index ad3b5ab0b4..a1987cb55f 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt @@ -2,6 +2,42 @@ Condition/&ConditionAcidClawsDescription=방어구 등급이 1 감소합니다. Condition/&ConditionAcidClawsTitle=산성 화상 Condition/&ConditionBoomingBladeSheathedDescription=당신은 폭발하는 에너지에 싸여 있습니다. 만약 당신이 5피트 이상 기꺼이 이동한다면, 당신은 천둥 피해를 입습니다. Condition/&ConditionBoomingBladeSheathedTitle=외장형 +Condition/&ConditionGuidanceAcrobaticsDescription=최대 1분 동안 곡예 검사에 1d4를 추가합니다. +Condition/&ConditionGuidanceAcrobaticsTitle=가이드 아크로바틱 +Condition/&ConditionGuidanceAnimal HandlingDescription=최대 1분 동안 동물 취급 검사에 1d4를 추가합니다. +Condition/&ConditionGuidanceAnimal HandlingTitle=안내 동물 취급 +Condition/&ConditionGuidanceArcanaDescription=최대 1분 동안 아르카나 검사에 1d4를 추가합니다. +Condition/&ConditionGuidanceArcanaTitle=가이드 아르카나 +Condition/&ConditionGuidanceAthleticsDescription=최대 1분 동안 운동 능력 검사에 1d4를 추가합니다. +Condition/&ConditionGuidanceAthleticsTitle=가이드 운동 +Condition/&ConditionGuidanceDeceptionDescription=최대 1분 동안 속임수 판정에 1d4를 추가합니다. +Condition/&ConditionGuidanceDeceptionTitle=유도된 속임수 +Condition/&ConditionGuidanceHistoryDescription=최대 1분 동안 역사 검사에 1d4를 추가합니다. +Condition/&ConditionGuidanceHistoryTitle=가이드 역사 +Condition/&ConditionGuidanceInsightDescription=최대 1분 동안 통찰 검사에 1d4를 추가합니다. +Condition/&ConditionGuidanceInsightTitle=가이드된 통찰력 +Condition/&ConditionGuidanceIntimidationDescription=최대 1분 동안 위협 판정에 1d4를 추가합니다. +Condition/&ConditionGuidanceIntimidationTitle=유도된 위협 +Condition/&ConditionGuidanceInvestigationDescription=최대 1분 동안 조사 검사에 1d4를 추가합니다. +Condition/&ConditionGuidanceInvestigationTitle=가이드 조사 +Condition/&ConditionGuidanceMedecineDescription=최대 1분 동안 의학 검사에 1d4를 추가합니다. +Condition/&ConditionGuidanceMedecineTitle=가이드 의학 +Condition/&ConditionGuidanceNatureDescription=최대 1분 동안 자연 검사에 1d4를 추가합니다. +Condition/&ConditionGuidanceNatureTitle=가이드 자연 +Condition/&ConditionGuidancePerceptionDescription=최대 1분 동안 지각 검사에 1d4를 추가합니다. +Condition/&ConditionGuidancePerceptionTitle=가이드된 지각 +Condition/&ConditionGuidancePerformanceDescription=최대 1분 동안 성과 검사에 1d4를 추가합니다. +Condition/&ConditionGuidancePerformanceTitle=가이드 성능 +Condition/&ConditionGuidancePersuasionDescription=최대 1분 동안 설득 검사에 1d4를 추가합니다. +Condition/&ConditionGuidancePersuasionTitle=가이드 설득 +Condition/&ConditionGuidanceReligionDescription=최대 1분 동안 종교 검사에 1d4를 추가합니다. +Condition/&ConditionGuidanceReligionTitle=가이드 종교 +Condition/&ConditionGuidanceSleightOfHandDescription=최대 1분 동안 손재주 검사에 1d4를 추가합니다. +Condition/&ConditionGuidanceSleightOfHandTitle=가이드 슬라이트오브핸드 +Condition/&ConditionGuidanceStealthDescription=최대 1분 동안 은신 검사에 1d4를 추가합니다. +Condition/&ConditionGuidanceStealthTitle=가이드 스텔스 +Condition/&ConditionGuidanceSurvivalDescription=최대 1분 동안 생존 검사에 1d4를 추가합니다. +Condition/&ConditionGuidanceSurvivalTitle=가이드 생존 Condition/&ConditionMindSpikeDescription=다음 내성 굴림에서 1d4를 뺍니다. Condition/&ConditionMindSpikeTitle=마인드 슬라이버 Condition/&ConditionStarryWispDescription=투명 상태의 이점을 누릴 수 없습니다. @@ -33,6 +69,42 @@ Spell/&CreateBonfireDescription=범위 내에서 볼 수 있는 땅에 모닥불 Spell/&CreateBonfireTitle=모닥불 만들기 Spell/&EnduringStingDescription=범위 내에서 볼 수 있는 생물 하나의 생명력을 약화시킵니다. 대상은 건강 내성 굴림에 성공해야 하며 그렇지 않으면 1d4의 괴사 피해를 입고 넘어지기 쉽습니다. Spell/&EnduringStingTitle=수액 찌르기 +Spell/&GuidanceAcrobaticsDescription=최대 1분 동안 곡예 검사에 1d4를 추가합니다. +Spell/&GuidanceAcrobaticsTitle=가이드 아크로바틱 +Spell/&GuidanceAnimalHandlingDescription=최대 1분 동안 동물 취급 검사에 1d4를 추가합니다. +Spell/&GuidanceAnimalHandlingTitle=안내 동물 취급 +Spell/&GuidanceArcanaDescription=최대 1분 동안 아르카나 검사에 1d4를 추가합니다. +Spell/&GuidanceArcanaTitle=가이드 아르카나 +Spell/&GuidanceAthleticsDescription=최대 1분 동안 운동 능력 검사에 1d4를 추가합니다. +Spell/&GuidanceAthleticsTitle=가이드 운동 +Spell/&GuidanceDeceptionDescription=최대 1분 동안 속임수 판정에 1d4를 추가합니다. +Spell/&GuidanceDeceptionTitle=유도된 속임수 +Spell/&GuidanceHistoryDescription=최대 1분 동안 역사 검사에 1d4를 추가합니다. +Spell/&GuidanceHistoryTitle=가이드 역사 +Spell/&GuidanceInsightDescription=최대 1분 동안 통찰 검사에 1d4를 추가합니다. +Spell/&GuidanceInsightTitle=가이드된 통찰력 +Spell/&GuidanceIntimidationDescription=최대 1분 동안 위협 판정에 1d4를 추가합니다. +Spell/&GuidanceIntimidationTitle=유도된 위협 +Spell/&GuidanceInvestigationDescription=최대 1분 동안 조사 검사에 1d4를 추가합니다. +Spell/&GuidanceInvestigationTitle=가이드 조사 +Spell/&GuidanceMedecineDescription=최대 1분 동안 의학 검사에 1d4를 추가합니다. +Spell/&GuidanceMedecineTitle=가이드 의학 +Spell/&GuidanceNatureDescription=최대 1분 동안 자연 검사에 1d4를 추가합니다. +Spell/&GuidanceNatureTitle=가이드 자연 +Spell/&GuidancePerceptionDescription=최대 1분 동안 지각 검사에 1d4를 추가합니다. +Spell/&GuidancePerceptionTitle=가이드된 지각 +Spell/&GuidancePerformanceDescription=최대 1분 동안 성과 검사에 1d4를 추가합니다. +Spell/&GuidancePerformanceTitle=가이드 성능 +Spell/&GuidancePersuasionDescription=최대 1분 동안 설득 검사에 1d4를 추가합니다. +Spell/&GuidancePersuasionTitle=가이드 설득 +Spell/&GuidanceReligionDescription=최대 1분 동안 종교 검사에 1d4를 추가합니다. +Spell/&GuidanceReligionTitle=가이드 종교 +Spell/&GuidanceSleightOfHandDescription=최대 1분 동안 손재주 검사에 1d4를 추가합니다. +Spell/&GuidanceSleightOfHandTitle=가이드 슬라이트오브핸드 +Spell/&GuidanceStealthDescription=최대 1분 동안 은신 검사에 1d4를 추가합니다. +Spell/&GuidanceStealthTitle=가이드 스텔스 +Spell/&GuidanceSurvivalDescription=최대 1분 동안 생존 검사에 1d4를 추가합니다. +Spell/&GuidanceSurvivalTitle=가이드 생존 Spell/&IlluminatingSphereDescription=효과 영역에 있는 횃불, 마나 램프 등의 광원이 빛을 발하게 합니다. Spell/&IlluminatingSphereTitle=조명 구체 Spell/&InfestationDescription=범위 내에서 볼 수 있는 한 생명체에게 진드기, 벼룩, 기타 기생충 구름이 잠깐 나타나게 합니다. 대상은 체질 구원 굴림에 성공해야 하며, 그렇지 않으면 1d6 독 피해를 입고 무작위 방향으로 5피트 이동합니다. 이 주문의 피해는 5, 11, 17레벨에서 주사위가 하나 더 늘어납니다. @@ -45,6 +117,7 @@ Spell/&MindSpikeDescription=당신은 범위 내에서 볼 수 있는 한 생물 Spell/&MindSpikeTitle=마인드 슬라이버 Spell/&MinorLifestealDescription=근처의 적 생물로부터 생명력을 소모합니다. 5피트 이내의 생물에게 근접 주문 공격을 합니다. 적중 시 생물은 1d6의 괴사 피해를 입고, 당신은 입힌 피해의 절반만큼 회복합니다(반올림). 이 주문은 언데드와 구조물에는 효과가 없습니다. 이 주문의 피해는 5, 11, 17레벨에서 주사위가 하나 더 늘어납니다. Spell/&MinorLifestealTitle=사소한 생명력 훔치기 +Spell/&OneDndGuidanceDescription=당신은 기꺼이 하는 생물을 만지고 기술을 선택합니다. 주문이 끝날 때까지 생물은 선택한 기술을 사용하는 모든 능력 검사에 ld4를 추가합니다. Spell/&PrimalSavageryDescription=당신은 원시 마법을 사용하여 이빨이나 손톱을 날카롭게 만들어 부식성 공격을 가할 준비를 합니다. 5피트 이내의 생물 한 마리에게 근접 주문 공격을 합니다. 적중 시 대상은 1d10의 산성 피해를 입습니다. 주문의 피해는 5, 11, 17레벨에서 주사위 하나 더 증가합니다. Spell/&PrimalSavageryTitle=원시적 야만성 Spell/&ResonatingStrikeDescription=주문을 시전하는 데 사용된 무기를 휘두르고 {0} 거리 내에 있는 한 생명체에게 근접 공격을 합니다. 명중 시 대상은 무기 공격의 일반적인 효과를 받고, 대상에서 5피트 이내에 보이는 다른 생명체에게 녹색 불이 튀어오르게 할 수 있습니다. 두 번째 생명체는 주문 시전 능력 수정치와 같은 화염 피해를 입습니다. 5레벨에서 근접 공격은 명중 시 대상에게 추가로 1d8 화염 피해를 입히고, 두 번째 생명체에게 입히는 화염 피해는 1d8 + 주문 시전 능력 수정치로 증가합니다. 두 피해 굴림 모두 11레벨과 17레벨에서 1d8씩 증가합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 0f71c9d4a5..70ded88ca3 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -313,6 +313,7 @@ ModUi/&SwapEvocationPotentCantripAndSculptSpell=Troque os recursos EvocadorEvocador Sábio da Evocação pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Troque Ataque Desarmado para usar a progressão do tipo de dado 5e 2024 ModUi/&SwapOneDndBarkskinSpell=Troque Barkskin pela versão 5e 2024 [ação bônus, sem concentração, CA definida como 17] +ModUi/&SwapOneDndGuidanceSpell=Troque Orientação pela versão 5e 2024 [Escolha uma habilidade na conjuração e ganhe bônus por até 1 minuto.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Troque Segundo Vento para usar a progressão de usos do 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Troque a progressão de Invocações pela versão 5e 2024 ModUi/&TableTopButton=Selecionar conteúdo de mesa diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt index c9820acb47..5f51c2362d 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt @@ -2,6 +2,42 @@ Condition/&ConditionAcidClawsDescription=-1 para CA. Condition/&ConditionAcidClawsTitle=Queimadura ácida Condition/&ConditionBoomingBladeSheathedDescription=Você está envolto em energia estrondosa. Se você se mover voluntariamente 5 pés ou mais, você recebe dano de trovão. Condition/&ConditionBoomingBladeSheathedTitle=Embainhado +Condition/&ConditionGuidanceAcrobaticsDescription=Adicione 1d4 aos testes de Acrobacia por até 1 minuto. +Condition/&ConditionGuidanceAcrobaticsTitle=Acrobacias guiadas +Condition/&ConditionGuidanceAnimal HandlingDescription=Adicione 1d4 aos testes de Lidar com Animais por até 1 minuto. +Condition/&ConditionGuidanceAnimal HandlingTitle=Manejo guiado de animais +Condition/&ConditionGuidanceArcanaDescription=Adicione 1d4 aos testes de Arcanismo por até 1 minuto. +Condition/&ConditionGuidanceArcanaTitle=Arcanos Guiados +Condition/&ConditionGuidanceAthleticsDescription=Adicione 1d4 aos testes de Atletismo por até 1 minuto. +Condition/&ConditionGuidanceAthleticsTitle=Atletismo Guiado +Condition/&ConditionGuidanceDeceptionDescription=Adicione 1d4 aos testes de Enganação por até 1 minuto. +Condition/&ConditionGuidanceDeceptionTitle=Engano guiado +Condition/&ConditionGuidanceHistoryDescription=Adicione 1d4 aos testes de História por até 1 minuto. +Condition/&ConditionGuidanceHistoryTitle=História Guiada +Condition/&ConditionGuidanceInsightDescription=Adicione 1d4 aos testes de Intuição por até 1 minuto. +Condition/&ConditionGuidanceInsightTitle=Insight guiado +Condition/&ConditionGuidanceIntimidationDescription=Adicione 1d4 aos testes de Intimidação por até 1 minuto. +Condition/&ConditionGuidanceIntimidationTitle=Intimidação Guiada +Condition/&ConditionGuidanceInvestigationDescription=Adicione 1d4 aos testes de Investigação por até 1 minuto. +Condition/&ConditionGuidanceInvestigationTitle=Investigação Guiada +Condition/&ConditionGuidanceMedecineDescription=Adicione 1d4 aos testes de Medicina por até 1 minuto. +Condition/&ConditionGuidanceMedecineTitle=Medicina Guiada +Condition/&ConditionGuidanceNatureDescription=Adicione 1d4 aos testes de Natureza por até 1 minuto. +Condition/&ConditionGuidanceNatureTitle=Natureza Guiada +Condition/&ConditionGuidancePerceptionDescription=Adicione 1d4 aos testes de Percepção por até 1 minuto. +Condition/&ConditionGuidancePerceptionTitle=Percepção Guiada +Condition/&ConditionGuidancePerformanceDescription=Adicione 1d4 aos testes de Desempenho por até 1 minuto. +Condition/&ConditionGuidancePerformanceTitle=Desempenho Guiado +Condition/&ConditionGuidancePersuasionDescription=Adicione 1d4 aos testes de Persuasão por até 1 minuto. +Condition/&ConditionGuidancePersuasionTitle=Persuasão Guiada +Condition/&ConditionGuidanceReligionDescription=Adicione 1d4 aos testes de Religião por até 1 minuto. +Condition/&ConditionGuidanceReligionTitle=Religião Guiada +Condition/&ConditionGuidanceSleightOfHandDescription=Adicione 1d4 aos testes de Prestidigitação por até 1 minuto. +Condition/&ConditionGuidanceSleightOfHandTitle=Prestidigitação guiada +Condition/&ConditionGuidanceStealthDescription=Adicione 1d4 aos testes de Furtividade por até 1 minuto. +Condition/&ConditionGuidanceStealthTitle=Furtividade guiada +Condition/&ConditionGuidanceSurvivalDescription=Adicione 1d4 aos testes de Sobrevivência por até 1 minuto. +Condition/&ConditionGuidanceSurvivalTitle=Sobrevivência Guiada Condition/&ConditionMindSpikeDescription=Subtrai 1d4 do próximo teste de resistência. Condition/&ConditionMindSpikeTitle=Lasca Mental Condition/&ConditionStarryWispDescription=Não é possível se beneficiar da condição Invisível. @@ -33,6 +69,42 @@ Spell/&CreateBonfireDescription=Você cria uma fogueira no chão que você pode Spell/&CreateBonfireTitle=Criar fogueira Spell/&EnduringStingDescription=Você suga a vitalidade de uma criatura que você pode ver no alcance. O alvo deve ter sucesso em um teste de resistência de Constituição ou sofrer 1d4 de dano necrótico e cair prostrado. Spell/&EnduringStingTitle=Picada de Sapping +Spell/&GuidanceAcrobaticsDescription=Adicione 1d4 aos testes de Acrobacia por até 1 minuto. +Spell/&GuidanceAcrobaticsTitle=Acrobacias guiadas +Spell/&GuidanceAnimalHandlingDescription=Adicione 1d4 aos testes de Lidar com Animais por até 1 minuto. +Spell/&GuidanceAnimalHandlingTitle=Manejo guiado de animais +Spell/&GuidanceArcanaDescription=Adicione 1d4 aos testes de Arcanismo por até 1 minuto. +Spell/&GuidanceArcanaTitle=Arcanos Guiados +Spell/&GuidanceAthleticsDescription=Adicione 1d4 aos testes de Atletismo por até 1 minuto. +Spell/&GuidanceAthleticsTitle=Atletismo Guiado +Spell/&GuidanceDeceptionDescription=Adicione 1d4 aos testes de Enganação por até 1 minuto. +Spell/&GuidanceDeceptionTitle=Engano guiado +Spell/&GuidanceHistoryDescription=Adicione 1d4 aos testes de História por até 1 minuto. +Spell/&GuidanceHistoryTitle=História Guiada +Spell/&GuidanceInsightDescription=Adicione 1d4 aos testes de Intuição por até 1 minuto. +Spell/&GuidanceInsightTitle=Insight guiado +Spell/&GuidanceIntimidationDescription=Adicione 1d4 aos testes de Intimidação por até 1 minuto. +Spell/&GuidanceIntimidationTitle=Intimidação Guiada +Spell/&GuidanceInvestigationDescription=Adicione 1d4 aos testes de Investigação por até 1 minuto. +Spell/&GuidanceInvestigationTitle=Investigação Guiada +Spell/&GuidanceMedecineDescription=Adicione 1d4 aos testes de Medicina por até 1 minuto. +Spell/&GuidanceMedecineTitle=Medicina Guiada +Spell/&GuidanceNatureDescription=Adicione 1d4 aos testes de Natureza por até 1 minuto. +Spell/&GuidanceNatureTitle=Natureza Guiada +Spell/&GuidancePerceptionDescription=Adicione 1d4 aos testes de Percepção por até 1 minuto. +Spell/&GuidancePerceptionTitle=Percepção Guiada +Spell/&GuidancePerformanceDescription=Adicione 1d4 aos testes de Desempenho por até 1 minuto. +Spell/&GuidancePerformanceTitle=Desempenho Guiado +Spell/&GuidancePersuasionDescription=Adicione 1d4 aos testes de Persuasão por até 1 minuto. +Spell/&GuidancePersuasionTitle=Persuasão Guiada +Spell/&GuidanceReligionDescription=Adicione 1d4 aos testes de Religião por até 1 minuto. +Spell/&GuidanceReligionTitle=Religião Guiada +Spell/&GuidanceSleightOfHandDescription=Adicione 1d4 aos testes de Prestidigitação por até 1 minuto. +Spell/&GuidanceSleightOfHandTitle=Prestidigitação guiada +Spell/&GuidanceStealthDescription=Adicione 1d4 aos testes de Furtividade por até 1 minuto. +Spell/&GuidanceStealthTitle=Furtividade guiada +Spell/&GuidanceSurvivalDescription=Adicione 1d4 aos testes de Sobrevivência por até 1 minuto. +Spell/&GuidanceSurvivalTitle=Sobrevivência Guiada Spell/&IlluminatingSphereDescription=Faz com que fontes de luz como tochas e lâmpadas de mana na área de efeito se iluminem. Spell/&IlluminatingSphereTitle=Esfera Iluminadora Spell/&InfestationDescription=Você faz com que uma nuvem de ácaros, pulgas e outros parasitas apareçam momentaneamente em uma criatura que você possa ver dentro do alcance. O alvo deve ter sucesso em um teste de resistência de Constituição, ou ele recebe 1d6 de dano de veneno e se move 5 pés em uma direção aleatória. O dano da magia aumenta em um dado adicional no 5º, 11º e 17º nível. @@ -45,6 +117,7 @@ Spell/&MindSpikeDescription=Você enfia um pico desorientador de energia psíqui Spell/&MindSpikeTitle=Lasca Mental Spell/&MinorLifestealDescription=Você drena energia vital de uma criatura inimiga próxima. Faça um ataque mágico corpo a corpo contra uma criatura a até 5 pés de você. Em um acerto, a criatura recebe 1d6 de dano necrótico, e você se cura pela metade do dano causado (arredondado para baixo). Esta magia não tem efeito em mortos-vivos e constructos. O dano da magia aumenta em um dado adicional no 5º, 11º e 17º nível. Spell/&MinorLifestealTitle=Roubo de vida menor +Spell/&OneDndGuidanceDescription=Você toca uma criatura disposta e escolhe uma perícia. Até que a magia termine, a criatura adiciona ld4 a qualquer teste de habilidade usando a perícia escolhida. Spell/&PrimalSavageryDescription=Você canaliza magia primitiva para fazer seus dentes ou unhas ficarem afiados, prontos para desferir um ataque corrosivo. Faça um ataque de magia corpo a corpo contra uma criatura a até 5 pés de você. Em um acerto, o alvo recebe 1d10 de dano ácido. O dano da magia aumenta em um dado adicional no 5º, 11º e 17º nível. Spell/&PrimalSavageryTitle=Selvageria Primordial Spell/&ResonatingStrikeDescription=Você brande a arma usada na conjuração da magia e faz um ataque corpo a corpo com ela contra uma criatura dentro de {0} de distância. Em um acerto, o alvo sofre os efeitos normais do ataque da arma, e você pode fazer fogo verde saltar do alvo para uma criatura diferente de sua escolha que você possa ver dentro de 5 pés dele. A segunda criatura sofre dano de fogo igual ao seu modificador de habilidade de conjuração. No 5º nível, o ataque corpo a corpo causa 1d8 de dano de fogo extra ao alvo em um acerto, e o dano de fogo à segunda criatura aumenta para 1d8 + seu modificador de habilidade de conjuração. Ambas as jogadas de dano aumentam em 1d8 no 11º e 17º níveis. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 2fe446bca6..8f2aaa46c4 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -313,6 +313,7 @@ ModUi/&SwapEvocationPotentCantripAndSculptSpell=Поменяйте местам ModUi/&SwapEvocationSavant=Замените Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Поменяйте Безоружная атака на использование прогрессии типа кубика 5e 2024 ModUi/&SwapOneDndBarkskinSpell=Поменяйте Barkskin на версию 5e 2024 [бонусное действие, нет концентрации, AC установлен на 17] +ModUi/&SwapOneDndGuidanceSpell=Поменяйте руководство с версией 5e 2024 [Выберите один навык при касте и получите бонус на срок до 1 минуты.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Поменяйте Второе дыхание на использование прогрессии использования 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Поменять местами прогрессию Invocations с версией 5e 2024 ModUi/&TableTopButton=Выберите содержимое Tabletop diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt index 99ef522bfe..574b6b6dfc 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt @@ -2,6 +2,42 @@ Condition/&ConditionAcidClawsDescription=-1 КД. Condition/&ConditionAcidClawsTitle=Кислотный ожог Condition/&ConditionBoomingBladeSheathedDescription=Вы окутаны бушующей энергией. Если вы добровольно переместитесь на 5 футов и более, вы получите урон звуком. Condition/&ConditionBoomingBladeSheathedTitle=Окутан громом +Condition/&ConditionGuidanceAcrobaticsDescription=Добавьте 1d4 к проверкам Акробатики на срок до 1 минуты. +Condition/&ConditionGuidanceAcrobaticsTitle=Управляемая акробатика +Condition/&ConditionGuidanceAnimal HandlingDescription=Добавьте 1d4 к проверкам Ухода за животными на срок до 1 минуты. +Condition/&ConditionGuidanceAnimal HandlingTitle=Управляемое обращение с животными +Condition/&ConditionGuidanceArcanaDescription=Добавьте 1d4 к проверкам Арканы на срок до 1 минуты. +Condition/&ConditionGuidanceArcanaTitle=Направляемые Арканы +Condition/&ConditionGuidanceAthleticsDescription=Добавьте 1d4 к проверкам Атлетики на срок до 1 минуты. +Condition/&ConditionGuidanceAthleticsTitle=Легкая атлетика под руководством инструктора +Condition/&ConditionGuidanceDeceptionDescription=Добавьте 1d4 к проверкам Обмана на срок до 1 минуты. +Condition/&ConditionGuidanceDeceptionTitle=Управляемый обман +Condition/&ConditionGuidanceHistoryDescription=Добавьте 1d4 к проверкам Истории на срок до 1 минуты. +Condition/&ConditionGuidanceHistoryTitle=История под руководством +Condition/&ConditionGuidanceInsightDescription=Добавьте 1d4 к проверкам Проницательности на срок до 1 минуты. +Condition/&ConditionGuidanceInsightTitle=Направляемое понимание +Condition/&ConditionGuidanceIntimidationDescription=Добавьте 1d4 к проверкам Запугивания на срок до 1 минуты. +Condition/&ConditionGuidanceIntimidationTitle=Направленное запугивание +Condition/&ConditionGuidanceInvestigationDescription=Добавьте 1d4 к проверкам Расследования на срок до 1 минуты. +Condition/&ConditionGuidanceInvestigationTitle=Направляемое расследование +Condition/&ConditionGuidanceMedecineDescription=Добавьте 1d4 к проверкам Медицины на срок до 1 минуты. +Condition/&ConditionGuidanceMedecineTitle=Направленная медицина +Condition/&ConditionGuidanceNatureDescription=Добавьте 1d4 к проверкам Природы на срок до 1 минуты. +Condition/&ConditionGuidanceNatureTitle=Природа под руководством гида +Condition/&ConditionGuidancePerceptionDescription=Добавьте 1d4 к проверкам Восприятия на срок до 1 минуты. +Condition/&ConditionGuidancePerceptionTitle=Направляемое восприятие +Condition/&ConditionGuidancePerformanceDescription=Добавьте 1d4 к проверкам производительности на срок до 1 минуты. +Condition/&ConditionGuidancePerformanceTitle=Управляемая производительность +Condition/&ConditionGuidancePersuasionDescription=Добавьте 1d4 к проверкам Убеждения на срок до 1 минуты. +Condition/&ConditionGuidancePersuasionTitle=Направляемое убеждение +Condition/&ConditionGuidanceReligionDescription=Добавьте 1d4 к проверкам религии на срок до 1 минуты. +Condition/&ConditionGuidanceReligionTitle=Направляемая религия +Condition/&ConditionGuidanceSleightOfHandDescription=Добавьте 1d4 к проверкам SleightOfHand на срок до 1 минуты. +Condition/&ConditionGuidanceSleightOfHandTitle=Управляемая ловкость рук +Condition/&ConditionGuidanceStealthDescription=Добавьте 1d4 к проверкам Скрытности на срок до 1 минуты. +Condition/&ConditionGuidanceStealthTitle=Управляемая скрытность +Condition/&ConditionGuidanceSurvivalDescription=Добавьте 1d4 к проверкам Выживания на срок до 1 минуты. +Condition/&ConditionGuidanceSurvivalTitle=Управляемое выживание Condition/&ConditionMindSpikeDescription=Вычитает 1d4 из следующего спасброска. Condition/&ConditionMindSpikeTitle=Расщепление разума Condition/&ConditionStarryWispDescription=Не получает преимущества от состояния Невидимости @@ -33,6 +69,42 @@ Spell/&CreateBonfireDescription=Вы создаёте огонь на повер Spell/&CreateBonfireTitle=Сотворение костра Spell/&EnduringStingDescription=Вы вытягиваете жизненные силы одного видимого существа в пределах дистанции. Цель должна преуспеть в спасброске Телосложения, иначе получит 1d4 урона некротической энергией и упадёт ничком. Spell/&EnduringStingTitle=Иссушающий укол +Spell/&GuidanceAcrobaticsDescription=Добавьте 1d4 к проверкам Акробатики на срок до 1 минуты. +Spell/&GuidanceAcrobaticsTitle=Управляемая акробатика +Spell/&GuidanceAnimalHandlingDescription=Добавьте 1d4 к проверкам Ухода за животными на срок до 1 минуты. +Spell/&GuidanceAnimalHandlingTitle=Управляемое обращение с животными +Spell/&GuidanceArcanaDescription=Добавьте 1d4 к проверкам Арканы на срок до 1 минуты. +Spell/&GuidanceArcanaTitle=Направляемые Арканы +Spell/&GuidanceAthleticsDescription=Добавьте 1d4 к проверкам Атлетики на срок до 1 минуты. +Spell/&GuidanceAthleticsTitle=Легкая атлетика под руководством инструктора +Spell/&GuidanceDeceptionDescription=Добавьте 1d4 к проверкам Обмана на срок до 1 минуты. +Spell/&GuidanceDeceptionTitle=Управляемый обман +Spell/&GuidanceHistoryDescription=Добавьте 1d4 к проверкам Истории на срок до 1 минуты. +Spell/&GuidanceHistoryTitle=История под руководством +Spell/&GuidanceInsightDescription=Добавьте 1d4 к проверкам Проницательности на срок до 1 минуты. +Spell/&GuidanceInsightTitle=Направляемое понимание +Spell/&GuidanceIntimidationDescription=Добавьте 1d4 к проверкам Запугивания на срок до 1 минуты. +Spell/&GuidanceIntimidationTitle=Направленное запугивание +Spell/&GuidanceInvestigationDescription=Добавьте 1d4 к проверкам Расследования на срок до 1 минуты. +Spell/&GuidanceInvestigationTitle=Направляемое расследование +Spell/&GuidanceMedecineDescription=Добавьте 1d4 к проверкам Медицины на срок до 1 минуты. +Spell/&GuidanceMedecineTitle=Направленная медицина +Spell/&GuidanceNatureDescription=Добавьте 1d4 к проверкам Природы на срок до 1 минуты. +Spell/&GuidanceNatureTitle=Природа под руководством гида +Spell/&GuidancePerceptionDescription=Добавьте 1d4 к проверкам Восприятия на срок до 1 минуты. +Spell/&GuidancePerceptionTitle=Направляемое восприятие +Spell/&GuidancePerformanceDescription=Добавьте 1d4 к проверкам производительности на срок до 1 минуты. +Spell/&GuidancePerformanceTitle=Управляемая производительность +Spell/&GuidancePersuasionDescription=Добавьте 1d4 к проверкам Убеждения на срок до 1 минуты. +Spell/&GuidancePersuasionTitle=Направляемое убеждение +Spell/&GuidanceReligionDescription=Добавьте 1d4 к проверкам религии на срок до 1 минуты. +Spell/&GuidanceReligionTitle=Направляемая религия +Spell/&GuidanceSleightOfHandDescription=Добавьте 1d4 к проверкам SleightOfHand на срок до 1 минуты. +Spell/&GuidanceSleightOfHandTitle=Управляемая ловкость рук +Spell/&GuidanceStealthDescription=Добавьте 1d4 к проверкам Скрытности на срок до 1 минуты. +Spell/&GuidanceStealthTitle=Управляемая скрытность +Spell/&GuidanceSurvivalDescription=Добавьте 1d4 к проверкам Выживания на срок до 1 минуты. +Spell/&GuidanceSurvivalTitle=Управляемое выживание Spell/&IlluminatingSphereDescription=Заставляет источники света, такие как факелы и лампы маны, загораться в зоне действия эффекта. Spell/&IlluminatingSphereTitle=Освещающая сфера Spell/&InfestationDescription=Вы вызываете клещей, блох и других паразитов, которые мгновенно обволакивают одно существо, которое вы можете видеть в пределах дистанции. Цель должна преуспеть в спасброске Телосложения, иначе получит 1d6 урона ядом и переместится на 5 футов в случайном направлении. Урон заклинания увеличивается на одну дополнительную кость, когда вы достигаете 5-го, 11-го и 17-го уровня. @@ -45,6 +117,7 @@ Spell/&MindSpikeDescription=Вы отправляете дезориентиру Spell/&MindSpikeTitle=Расщепление разума Spell/&MinorLifestealDescription=Вы вытягиваете жизненную энергию из ближайшего враждебного существа. Совершите рукопашную атаку заклинанием по существу в пределах 5 футов от вас. Цель получает 1d6 некротического урона при попадании, а вы исцеляете количество хитов, равное половине нанесённого урона (с округлением вниз). Это заклинание не оказывает эффекта на нежить и конструкты. Урон заклинания увеличивается на одну дополнительную кость на уровнях 5, 11 и 17. Spell/&MinorLifestealTitle=Малое похищение жизни +Spell/&OneDndGuidanceDescription=Вы касаетесь согласного существа и выбираете навык. Пока заклинание не закончится, существо добавляет ld4 к любой проверке способности, используя выбранный навык. Spell/&PrimalSavageryDescription=Вы направляете первобытную магию, затачивающую ваши зубы или ногти, и готовитесь к агрессивной атаке. Совершите рукопашную атаку заклинанием против одного существа в пределах 5 футов от вас. При попадании цель получает 1d10 урона кислотой. Урон заклинания увеличивается на одну дополнительную кость, когда вы достигаете 5-го, 11-го и 17-го уровня. Spell/&PrimalSavageryTitle=Первобытная дикость Spell/&ResonatingStrikeDescription=Вы взмахиваете оружием, выбранным в качестве материального компонента, и совершаете рукопашную атаку оружием против одного существа в пределах {0}. При попадании цель подвергается обычному эффекту атаки этим оружием, и вы можете заставить зелёный огонь перекинуться от цели к другому существу по вашему выбору, которое вы можете видеть в пределах 5 футов от цели. Второе существо получает урон огнём, равный вашему модификатору базовой характеристики. На 5-м уровне рукопашная атака наносит дополнительно 1d8 урона огнём, а урон, получаемый вторым существом, увеличивается до 1d8 + ваш модификатор базовой характеристики. Оба этих урона увеличиваются на 1d8 на 11-м уровне (2d8 и 2d8) и 17-м уровне (3d8 и 3d8). diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 168ecadaf7..25b645b745 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -313,6 +313,7 @@ ModUi/&SwapEvocationPotentCantripAndSculptSpell=交换召唤师 Evoker Evocation Savant 与 5e 2024 版本交换[获得时学习 2 个学校法术,每次获得一个插槽等级时再学习 1 个] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=切换徒手攻击以使用 5e 2024 骰子类型进程 ModUi/&SwapOneDndBarkskinSpell=将 Barkskin 与 5e 2024 版本交换[奖励行动,无集中力,AC 设置为 17] +ModUi/&SwapOneDndGuidanceSpell=将Guidance与 5e 2024 版本交换[施法时选择一项技能并获得最多 1 分钟的奖励。] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=交换 Second Wind 以使用 5e 2024 使用进度 ModUi/&SwapWarlockToUseOneDndInvocationProgression=将 Invocations 进程与 5e 2024 版本交换 ModUi/&TableTopButton=选择桌面内容 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt index f43010dc59..e056c8f437 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt @@ -2,6 +2,42 @@ Condition/&ConditionAcidClawsDescription=护甲等级降低 1。 Condition/&ConditionAcidClawsTitle=强酸灼伤 Condition/&ConditionBoomingBladeSheathedDescription=你被轰隆隆的能量所笼罩。如果你主动移动 5 英尺或以上,你就会受到雷击伤害。 Condition/&ConditionBoomingBladeSheathedTitle=被笼罩 +Condition/&ConditionGuidanceAcrobaticsDescription=将 1d4 添加到杂技检查中,最长可持续 1 分钟。 +Condition/&ConditionGuidanceAcrobaticsTitle=杂技指导 +Condition/&ConditionGuidanceAnimal HandlingDescription=在动物处理检查中添加 1d4,最长 1 分钟。 +Condition/&ConditionGuidanceAnimal HandlingTitle=引导动物处理 +Condition/&ConditionGuidanceArcanaDescription=将 1d4 添加到奥术检查中,持续最多 1 分钟。 +Condition/&ConditionGuidanceArcanaTitle=奥秘指引 +Condition/&ConditionGuidanceAthleticsDescription=在运动检查中添加 1d4,最长可持续 1 分钟。 +Condition/&ConditionGuidanceAthleticsTitle=指导田径运动 +Condition/&ConditionGuidanceDeceptionDescription=将 1d4 添加到欺骗检查中,持续最多 1 分钟。 +Condition/&ConditionGuidanceDeceptionTitle=引导式欺骗 +Condition/&ConditionGuidanceHistoryDescription=将 1d4 添加到历史检查中,最长可持续 1 分钟。 +Condition/&ConditionGuidanceHistoryTitle=引导历史 +Condition/&ConditionGuidanceInsightDescription=将 1d4 添加到洞察检查,持续最多 1 分钟。 +Condition/&ConditionGuidanceInsightTitle=引导式洞察 +Condition/&ConditionGuidanceIntimidationDescription=在恐吓检查中添加 1d4,持续最多 1 分钟。 +Condition/&ConditionGuidanceIntimidationTitle=引导式恐吓 +Condition/&ConditionGuidanceInvestigationDescription=将 1d4 添加到调查检查中,最长持续 1 分钟。 +Condition/&ConditionGuidanceInvestigationTitle=引导式调查 +Condition/&ConditionGuidanceMedecineDescription=将 1d4 添加到医疗检查中,最长可持续 1 分钟。 +Condition/&ConditionGuidanceMedecineTitle=引导医学 +Condition/&ConditionGuidanceNatureDescription=将 1d4 添加到自然检查中,持续最多 1 分钟。 +Condition/&ConditionGuidanceNatureTitle=引导自然 +Condition/&ConditionGuidancePerceptionDescription=将 1d4 添加到感知检查中,持续最多 1 分钟。 +Condition/&ConditionGuidancePerceptionTitle=引导感知 +Condition/&ConditionGuidancePerformanceDescription=将 1d4 添加到性能检查中,最长 1 分钟。 +Condition/&ConditionGuidancePerformanceTitle=引导式表现 +Condition/&ConditionGuidancePersuasionDescription=将 1d4 添加到说服检查中,持续最多 1 分钟。 +Condition/&ConditionGuidancePersuasionTitle=引导式说服 +Condition/&ConditionGuidanceReligionDescription=在宗教检查中添加 1d4,持续最多 1 分钟。 +Condition/&ConditionGuidanceReligionTitle=引导宗教 +Condition/&ConditionGuidanceSleightOfHandDescription=将 1d4 添加到 SleightOfHand 检查中,最长可达 1 分钟。 +Condition/&ConditionGuidanceSleightOfHandTitle=引导手法 +Condition/&ConditionGuidanceStealthDescription=将 1d4 添加到隐身检查,持续最多 1 分钟。 +Condition/&ConditionGuidanceStealthTitle=制导隐身 +Condition/&ConditionGuidanceSurvivalDescription=在生存检查中添加 1d4,最长持续 1 分钟。 +Condition/&ConditionGuidanceSurvivalTitle=生存指南 Condition/&ConditionMindSpikeDescription=从下一次豁免检定中减去 1d4。 Condition/&ConditionMindSpikeTitle=心灵之楔 Condition/&ConditionStarryWispDescription=无法从隐形状态中受益。 @@ -33,6 +69,42 @@ Spell/&CreateBonfireDescription=你在可见范围内的地面上生起篝火。 Spell/&CreateBonfireTitle=创造篝火 Spell/&EnduringStingDescription=你削弱了范围内你能看到的一个生物的生命力。目标必须通过一次体质豁免检定,否则将受到 1d4 黯蚀伤害并倒地。 Spell/&EnduringStingTitle=削弱芒刺 +Spell/&GuidanceAcrobaticsDescription=将 1d4 添加到杂技检查中,最长可持续 1 分钟。 +Spell/&GuidanceAcrobaticsTitle=杂技指导 +Spell/&GuidanceAnimalHandlingDescription=在动物处理检查中添加 1d4,最长 1 分钟。 +Spell/&GuidanceAnimalHandlingTitle=引导动物处理 +Spell/&GuidanceArcanaDescription=将 1d4 添加到奥术检查中,持续最多 1 分钟。 +Spell/&GuidanceArcanaTitle=奥秘指引 +Spell/&GuidanceAthleticsDescription=在运动检查中添加 1d4,最长可持续 1 分钟。 +Spell/&GuidanceAthleticsTitle=指导田径运动 +Spell/&GuidanceDeceptionDescription=将 1d4 添加到欺骗检查中,持续最多 1 分钟。 +Spell/&GuidanceDeceptionTitle=引导式欺骗 +Spell/&GuidanceHistoryDescription=将 1d4 添加到历史检查中,最长可持续 1 分钟。 +Spell/&GuidanceHistoryTitle=引导历史 +Spell/&GuidanceInsightDescription=将 1d4 添加到洞察检查,持续最多 1 分钟。 +Spell/&GuidanceInsightTitle=引导式洞察 +Spell/&GuidanceIntimidationDescription=在恐吓检查中添加 1d4,持续最多 1 分钟。 +Spell/&GuidanceIntimidationTitle=引导式恐吓 +Spell/&GuidanceInvestigationDescription=将 1d4 添加到调查检查中,最长持续 1 分钟。 +Spell/&GuidanceInvestigationTitle=引导式调查 +Spell/&GuidanceMedecineDescription=将 1d4 添加到医疗检查中,最长可持续 1 分钟。 +Spell/&GuidanceMedecineTitle=引导医学 +Spell/&GuidanceNatureDescription=将 1d4 添加到自然检查中,持续最多 1 分钟。 +Spell/&GuidanceNatureTitle=引导自然 +Spell/&GuidancePerceptionDescription=将 1d4 添加到感知检查中,持续最多 1 分钟。 +Spell/&GuidancePerceptionTitle=引导感知 +Spell/&GuidancePerformanceDescription=将 1d4 添加到性能检查中,最长 1 分钟。 +Spell/&GuidancePerformanceTitle=引导式表现 +Spell/&GuidancePersuasionDescription=将 1d4 添加到说服检查中,持续最多 1 分钟。 +Spell/&GuidancePersuasionTitle=引导式说服 +Spell/&GuidanceReligionDescription=在宗教检查中添加 1d4,持续最多 1 分钟。 +Spell/&GuidanceReligionTitle=引导宗教 +Spell/&GuidanceSleightOfHandDescription=将 1d4 添加到 SleightOfHand 检查中,最长可达 1 分钟。 +Spell/&GuidanceSleightOfHandTitle=引导手法 +Spell/&GuidanceStealthDescription=将 1d4 添加到隐身检查,持续最多 1 分钟。 +Spell/&GuidanceStealthTitle=制导隐身 +Spell/&GuidanceSurvivalDescription=在生存检查中添加 1d4,最长持续 1 分钟。 +Spell/&GuidanceSurvivalTitle=生存指南 Spell/&IlluminatingSphereDescription=使效果区域内的火把和法力灯等光源点亮。 Spell/&IlluminatingSphereTitle=照明法球 Spell/&InfestationDescription=你让一团螨虫、跳蚤和其他寄生虫瞬间出现在你能看到的范围内的一个生物身上。目标必须成功通过体质豁免检定,否则会受到 1d6 毒素伤害并向随机方向移动 5 英尺。该法术的伤害在第 5、11 和 17 级时增加一个额外的骰子。 @@ -45,6 +117,7 @@ Spell/&MindSpikeDescription=你将一股令人迷惑的精神能量刺入施法 Spell/&MindSpikeTitle=心灵之楔 Spell/&MinorLifestealDescription=你吸取附近敌方生物的生命能量。对你 5 英尺范围内的生物进行近战法术攻击。命中后,该生物将受到 1d6 坏死性伤害,而你可治愈所造成伤害的一半(向下取整)。此法术对亡灵和构造体无效。法术的伤害在第 5、11 和 17 级时增加一个额外的骰子。 Spell/&MinorLifestealTitle=次级吸血 +Spell/&OneDndGuidanceDescription=你触摸一个自愿的生物并选择一项技能。在法术结束之前,该生物使用所选技能的任何能力检定都会增加 ld4。 Spell/&PrimalSavageryDescription=你引导原始魔法,使你的牙齿或指甲变得锋利,准备发动腐蚀性攻击。对你 5 英尺范围内的一个生物进行近战法术攻击。命中后,目标受到 1d10 酸性伤害。法术伤害在第 5、11 和 17 级时增加一个额外的骰子。 Spell/&PrimalSavageryTitle=原初蛮击 Spell/&ResonatingStrikeDescription=你挥舞施展法术时使用的武器,用它对距离 {0} 内的一个生物进行近战攻击。命中后,目标将受到武器攻击的正常效果,你可以让绿色火焰从目标跳跃到你选择的 5 英尺内可见的另一个生物上。第二个生物受到的火焰伤害等于你的施法能力调整值。在第 5 级,近战攻击命中后会对目标造成额外的 1d8 点火焰伤害,对第二个生物的火焰伤害增加到 1d8 + 你的施法能力调整值。在 11 级和 17 级时,两个伤害掷骰都增加 1d8。 From 3bc90c5659358a9041b0bb4252ef4598ff96b2f5 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 08:35:06 -0800 Subject: [PATCH 42/85] start models reorg --- .../Displays/ClassesDisplay.cs | 32 +- .../Displays/CraftingAndItems.cs | 2 +- .../Displays/GeneralDisplay.cs | 46 +- .../Displays/RulesDisplay.cs | 2 +- .../Displays/SpellsDisplay.cs | 10 +- .../Models/OneDndContext.cs | 680 ++++++++++++++++++ .../Models/SrdAndHouseRulesContext.cs | 652 ----------------- 7 files changed, 726 insertions(+), 698 deletions(-) create mode 100644 SolastaUnfinishedBusiness/Models/OneDndContext.cs diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index d0b3d8473c..b905e3512e 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -30,42 +30,42 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&ChangeBardicInspirationDurationToOneHour"), ref toggle, UI.AutoWidth())) { Main.Settings.ChangeBardicInspirationDurationToOneHour = toggle; - SrdAndHouseRulesContext.SwitchOneDndChangeBardicInspirationDurationToOneHour(); + OneDndContext.SwitchOneDndChangeBardicInspirationDurationToOneHour(); } toggle = Main.Settings.EnableBardExpertiseOneLevelBefore; if (UI.Toggle(Gui.Localize("ModUi/&EnableBardExpertiseOneLevelBefore"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardExpertiseOneLevelBefore = toggle; - SrdAndHouseRulesContext.SwitchOneDndEnableBardExpertiseOneLevelBefore(); + OneDndContext.SwitchOneDndEnableBardExpertiseOneLevelBefore(); } toggle = Main.Settings.EnableBardSuperiorInspirationAtLevel18; if (UI.Toggle(Gui.Localize("ModUi/&EnableBardSuperiorInspirationAtLevel18"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardSuperiorInspirationAtLevel18 = toggle; - SrdAndHouseRulesContext.SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); + OneDndContext.SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); } toggle = Main.Settings.EnableBardWordsOfCreationAtLevel20; if (UI.Toggle(Gui.Localize("ModUi/&EnableBardWordsOfCreationAtLevel20"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardWordsOfCreationAtLevel20 = toggle; - SrdAndHouseRulesContext.SwitchOneDndEnableBardWordsOfCreationAtLevel20(); + OneDndContext.SwitchOneDndEnableBardWordsOfCreationAtLevel20(); } toggle = Main.Settings.RemoveBardMagicalSecretAt14And18; if (UI.Toggle(Gui.Localize("ModUi/&RemoveBardMagicalSecretAt14And18"), ref toggle, UI.AutoWidth())) { Main.Settings.RemoveBardMagicalSecretAt14And18 = toggle; - SrdAndHouseRulesContext.SwitchOneDndRemoveBardMagicalSecretAt14And18(); + OneDndContext.SwitchOneDndRemoveBardMagicalSecretAt14And18(); } toggle = Main.Settings.RemoveBardSongOfRest; if (UI.Toggle(Gui.Localize("ModUi/&RemoveBardSongOfRest"), ref toggle, UI.AutoWidth())) { Main.Settings.RemoveBardSongOfRest = toggle; - SrdAndHouseRulesContext.SwitchOneDndRemoveBardSongOfRest(); + OneDndContext.SwitchOneDndRemoveBardSongOfRest(); } UI.Label(); @@ -120,7 +120,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&AllowDruidToWearMetalArmor"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableDruidToUseMetalArmor = toggle; - SrdAndHouseRulesContext.SwitchOneDnDEnableDruidToUseMetalArmor(); + OneDndContext.SwitchOneDnDEnableDruidToUseMetalArmor(); } toggle = Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency; @@ -128,14 +128,14 @@ internal static void DisplayClasses() UI.AutoWidth())) { Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency = toggle; - SrdAndHouseRulesContext.SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); + OneDndContext.SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); } toggle = Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd; if (UI.Toggle(Gui.Localize("ModUi/&SwapDruidWeaponProficiencyToUseOneDnd"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd = toggle; - SrdAndHouseRulesContext.SwitchDruidWeaponProficiencyToUseOneDnd(); + OneDndContext.SwitchDruidWeaponProficiencyToUseOneDnd(); } UI.Label(); @@ -270,7 +270,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnablePaladinLayOnHandsAsBonusAction"), ref toggle, UI.AutoWidth())) { Main.Settings.EnablePaladinLayOnHandsAsBonusAction = toggle; - SrdAndHouseRulesContext.SwitchOneDndPaladinLayOnHandAsBonusAction(); + OneDndContext.SwitchOneDndPaladinLayOnHandAsBonusAction(); } toggle = Main.Settings.EnablePaladinSmiteAsBonusAction; @@ -283,7 +283,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnablePaladinSpellCastingAtLevel1"), ref toggle, UI.AutoWidth())) { Main.Settings.EnablePaladinSpellCastingAtLevel1 = toggle; - SrdAndHouseRulesContext.SwitchOneDndPaladinLearnSpellCastingAtOne(); + OneDndContext.SwitchOneDndPaladinLearnSpellCastingAtOne(); } toggle = Main.Settings.ShowChannelDivinityOnPortrait; @@ -314,7 +314,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableRangerSpellCastingAtLevel1"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRangerSpellCastingAtLevel1 = toggle; - SrdAndHouseRulesContext.SwitchOneDndRangerLearnSpellCastingAtOne(); + OneDndContext.SwitchOneDndRangerLearnSpellCastingAtOne(); } UI.Label(); @@ -390,14 +390,14 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockMagicalCunningAtLevel2"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableWarlockMagicalCunningAtLevel2 = toggle; - SrdAndHouseRulesContext.SwitchOneDndWarlockMagicalCunningAtLevel2(); + OneDndContext.SwitchOneDndWarlockMagicalCunningAtLevel2(); } toggle = Main.Settings.SwapWarlockToUseOneDndInvocationProgression; if (UI.Toggle(Gui.Localize("ModUi/&SwapWarlockToUseOneDndInvocationProgression"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapWarlockToUseOneDndInvocationProgression = toggle; - SrdAndHouseRulesContext.SwitchOneDndWarlockInvocationsProgression(); + OneDndContext.SwitchOneDndWarlockInvocationsProgression(); } UI.Label(); @@ -408,14 +408,14 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableWizardToLearnScholarAtLevel2"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableWizardToLearnScholarAtLevel2 = toggle; - SrdAndHouseRulesContext.SwitchOneDndWizardScholar(); + OneDndContext.SwitchOneDndWizardScholar(); } toggle = Main.Settings.EnableWizardToLearnSchoolAtLevel3; if (UI.Toggle(Gui.Localize("ModUi/&EnableWizardToLearnSchoolAtLevel3"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableWizardToLearnSchoolAtLevel3 = toggle; - SrdAndHouseRulesContext.SwitchOneDndWizardSchoolOfMagicLearningLevel(); + OneDndContext.SwitchOneDndWizardSchoolOfMagicLearningLevel(); } toggle = Main.Settings.EnableSignatureSpellsRelearn; diff --git a/SolastaUnfinishedBusiness/Displays/CraftingAndItems.cs b/SolastaUnfinishedBusiness/Displays/CraftingAndItems.cs index b435cbb93e..bcc5e81c99 100644 --- a/SolastaUnfinishedBusiness/Displays/CraftingAndItems.cs +++ b/SolastaUnfinishedBusiness/Displays/CraftingAndItems.cs @@ -151,7 +151,7 @@ internal static void DisplayCraftingAndItems() if (UI.Toggle(Gui.Localize("ModUi/&OneDndHealingPotionBonusAction"), ref toggle, UI.AutoWidth())) { Main.Settings.OneDndHealingPotionBonusAction = toggle; - SrdAndHouseRulesContext.SwitchOneDndHealingPotionBonusAction(); + OneDndContext.SwitchOneDndHealingPotionBonusAction(); } toggle = Main.Settings.KeepInvisibilityWhenUsingItems; diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index a3e4f850ea..cce236590e 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -239,14 +239,14 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableSurprisedToEnforceDisadvantage"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableSurprisedToEnforceDisadvantage = toggle; - SrdAndHouseRulesContext.SwitchOneDndSurprisedEnforceDisadvantage(); + OneDndContext.SwitchOneDndSurprisedEnforceDisadvantage(); } toggle = Main.Settings.OneDndHealingPotionBonusAction; if (UI.Toggle(Gui.Localize("ModUi/&OneDndHealingPotionBonusAction"), ref toggle, UI.AutoWidth())) { Main.Settings.OneDndHealingPotionBonusAction = toggle; - SrdAndHouseRulesContext.SwitchOneDndHealingPotionBonusAction(); + OneDndContext.SwitchOneDndHealingPotionBonusAction(); } UI.Label(); @@ -257,42 +257,42 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&ChangeBardicInspirationDurationToOneHour"), ref toggle, UI.AutoWidth())) { Main.Settings.ChangeBardicInspirationDurationToOneHour = toggle; - SrdAndHouseRulesContext.SwitchOneDndChangeBardicInspirationDurationToOneHour(); + OneDndContext.SwitchOneDndChangeBardicInspirationDurationToOneHour(); } toggle = Main.Settings.EnableBardExpertiseOneLevelBefore; if (UI.Toggle(Gui.Localize("ModUi/&EnableBardExpertiseOneLevelBefore"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardExpertiseOneLevelBefore = toggle; - SrdAndHouseRulesContext.SwitchOneDndEnableBardExpertiseOneLevelBefore(); + OneDndContext.SwitchOneDndEnableBardExpertiseOneLevelBefore(); } toggle = Main.Settings.EnableBardSuperiorInspirationAtLevel18; if (UI.Toggle(Gui.Localize("ModUi/&EnableBardSuperiorInspirationAtLevel18"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardSuperiorInspirationAtLevel18 = toggle; - SrdAndHouseRulesContext.SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); + OneDndContext.SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); } toggle = Main.Settings.EnableBardWordsOfCreationAtLevel20; if (UI.Toggle(Gui.Localize("ModUi/&EnableBardWordsOfCreationAtLevel20"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardWordsOfCreationAtLevel20 = toggle; - SrdAndHouseRulesContext.SwitchOneDndEnableBardWordsOfCreationAtLevel20(); + OneDndContext.SwitchOneDndEnableBardWordsOfCreationAtLevel20(); } toggle = Main.Settings.RemoveBardMagicalSecretAt14And18; if (UI.Toggle(Gui.Localize("ModUi/&RemoveBardMagicalSecretAt14And18"), ref toggle, UI.AutoWidth())) { Main.Settings.RemoveBardMagicalSecretAt14And18 = toggle; - SrdAndHouseRulesContext.SwitchOneDndRemoveBardMagicalSecretAt14And18(); + OneDndContext.SwitchOneDndRemoveBardMagicalSecretAt14And18(); } toggle = Main.Settings.RemoveBardSongOfRest; if (UI.Toggle(Gui.Localize("ModUi/&RemoveBardSongOfRest"), ref toggle, UI.AutoWidth())) { Main.Settings.RemoveBardSongOfRest = toggle; - SrdAndHouseRulesContext.SwitchOneDndRemoveBardSongOfRest(); + OneDndContext.SwitchOneDndRemoveBardSongOfRest(); } UI.Label(); @@ -340,7 +340,7 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&AllowDruidToWearMetalArmor"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableDruidToUseMetalArmor = toggle; - SrdAndHouseRulesContext.SwitchOneDnDEnableDruidToUseMetalArmor(); + OneDndContext.SwitchOneDnDEnableDruidToUseMetalArmor(); } toggle = Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency; @@ -348,14 +348,14 @@ private static void DisplayOneDnd() UI.AutoWidth())) { Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency = toggle; - SrdAndHouseRulesContext.SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); + OneDndContext.SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); } toggle = Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd; if (UI.Toggle(Gui.Localize("ModUi/&SwapDruidWeaponProficiencyToUseOneDnd"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd = toggle; - SrdAndHouseRulesContext.SwitchDruidWeaponProficiencyToUseOneDnd(); + OneDndContext.SwitchDruidWeaponProficiencyToUseOneDnd(); } UI.Label(); @@ -440,7 +440,7 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnablePaladinLayOnHandsAsBonusAction"), ref toggle, UI.AutoWidth())) { Main.Settings.EnablePaladinLayOnHandsAsBonusAction = toggle; - SrdAndHouseRulesContext.SwitchOneDndPaladinLayOnHandAsBonusAction(); + OneDndContext.SwitchOneDndPaladinLayOnHandAsBonusAction(); } toggle = Main.Settings.EnablePaladinSmiteAsBonusAction; @@ -453,7 +453,7 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnablePaladinSpellCastingAtLevel1"), ref toggle, UI.AutoWidth())) { Main.Settings.EnablePaladinSpellCastingAtLevel1 = toggle; - SrdAndHouseRulesContext.SwitchOneDndPaladinLearnSpellCastingAtOne(); + OneDndContext.SwitchOneDndPaladinLearnSpellCastingAtOne(); } UI.Label(); @@ -471,7 +471,7 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableRangerSpellCastingAtLevel1"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRangerSpellCastingAtLevel1 = toggle; - SrdAndHouseRulesContext.SwitchOneDndRangerLearnSpellCastingAtOne(); + OneDndContext.SwitchOneDndRangerLearnSpellCastingAtOne(); } UI.Label(); @@ -518,14 +518,14 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockMagicalCunningAtLevel2"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableWarlockMagicalCunningAtLevel2 = toggle; - SrdAndHouseRulesContext.SwitchOneDndWarlockMagicalCunningAtLevel2(); + OneDndContext.SwitchOneDndWarlockMagicalCunningAtLevel2(); } toggle = Main.Settings.SwapWarlockToUseOneDndInvocationProgression; if (UI.Toggle(Gui.Localize("ModUi/&SwapWarlockToUseOneDndInvocationProgression"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapWarlockToUseOneDndInvocationProgression = toggle; - SrdAndHouseRulesContext.SwitchOneDndWarlockInvocationsProgression(); + OneDndContext.SwitchOneDndWarlockInvocationsProgression(); } UI.Label(); @@ -536,14 +536,14 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableWizardToLearnScholarAtLevel2"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableWizardToLearnScholarAtLevel2 = toggle; - SrdAndHouseRulesContext.SwitchOneDndWizardScholar(); + OneDndContext.SwitchOneDndWizardScholar(); } toggle = Main.Settings.EnableWizardToLearnSchoolAtLevel3; if (UI.Toggle(Gui.Localize("ModUi/&EnableWizardToLearnSchoolAtLevel3"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableWizardToLearnSchoolAtLevel3 = toggle; - SrdAndHouseRulesContext.SwitchOneDndWizardSchoolOfMagicLearningLevel(); + OneDndContext.SwitchOneDndWizardSchoolOfMagicLearningLevel(); } UI.Label(); @@ -565,35 +565,35 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDnDPreparedSpellsTables"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableOneDnDPreparedSpellsTables = toggle; - SrdAndHouseRulesContext.SwitchOneDndPreparedSpellsTables(); + OneDndContext.SwitchOneDndPreparedSpellsTables(); } toggle = Main.Settings.EnableOneDndHealingSpellsBuf; if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndHealingSpellsBuf"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableOneDndHealingSpellsBuf = toggle; - SrdAndHouseRulesContext.SwitchOneDndHealingSpellsBuf(); + OneDndContext.SwitchOneDndHealingSpellsBuf(); } toggle = Main.Settings.EnableRitualOnAllCasters; if (UI.Toggle(Gui.Localize("ModUi/&EnableRitualOnAllCasters"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRitualOnAllCasters = toggle; - SrdAndHouseRulesContext.SwitchEnableRitualOnAllCasters(); + OneDndContext.SwitchEnableRitualOnAllCasters(); } toggle = Main.Settings.SwapOneDndBarkskinSpell; if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndBarkskinSpell"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapOneDndBarkskinSpell = toggle; - SrdAndHouseRulesContext.SwapOneDndBarkskinSpell(); + OneDndContext.SwapOneDndBarkskinSpell(); } toggle = Main.Settings.SwapOneDndGuidanceSpell; if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndGuidanceSpell"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapOneDndGuidanceSpell = toggle; - SrdAndHouseRulesContext.SwapOneDndGuidanceSpell(); + OneDndContext.SwapOneDndGuidanceSpell(); } UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs index 46436fb058..7510cbaf5b 100644 --- a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs @@ -383,7 +383,7 @@ internal static void DisplayRules() if (UI.Toggle(Gui.Localize("ModUi/&EnableSurprisedToEnforceDisadvantage"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableSurprisedToEnforceDisadvantage = toggle; - SrdAndHouseRulesContext.SwitchOneDndSurprisedEnforceDisadvantage(); + OneDndContext.SwitchOneDndSurprisedEnforceDisadvantage(); } toggle = Main.Settings.EnableTeleportToRemoveRestrained; diff --git a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs index d4f5080c1e..ca5b825b40 100644 --- a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs @@ -37,14 +37,14 @@ private static void DisplaySpellsGeneral() if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDnDPreparedSpellsTables"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableOneDnDPreparedSpellsTables = toggle; - SrdAndHouseRulesContext.SwitchOneDndPreparedSpellsTables(); + OneDndContext.SwitchOneDndPreparedSpellsTables(); } toggle = Main.Settings.EnableRitualOnAllCasters; if (UI.Toggle(Gui.Localize("ModUi/&EnableRitualOnAllCasters"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRitualOnAllCasters = toggle; - SrdAndHouseRulesContext.SwitchEnableRitualOnAllCasters(); + OneDndContext.SwitchEnableRitualOnAllCasters(); } toggle = Main.Settings.QuickCastLightCantripOnWornItemsFirst; @@ -152,21 +152,21 @@ private static void DisplaySpellsGeneral() if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndHealingSpellsBuf"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableOneDndHealingSpellsBuf = toggle; - SrdAndHouseRulesContext.SwitchOneDndHealingSpellsBuf(); + OneDndContext.SwitchOneDndHealingSpellsBuf(); } toggle = Main.Settings.SwapOneDndBarkskinSpell; if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndBarkskinSpell"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapOneDndBarkskinSpell = toggle; - SrdAndHouseRulesContext.SwapOneDndBarkskinSpell(); + OneDndContext.SwapOneDndBarkskinSpell(); } toggle = Main.Settings.SwapOneDndGuidanceSpell; if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndGuidanceSpell"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapOneDndGuidanceSpell = toggle; - SrdAndHouseRulesContext.SwapOneDndGuidanceSpell(); + OneDndContext.SwapOneDndGuidanceSpell(); } UI.Label(); diff --git a/SolastaUnfinishedBusiness/Models/OneDndContext.cs b/SolastaUnfinishedBusiness/Models/OneDndContext.cs new file mode 100644 index 0000000000..ad1c765d9c --- /dev/null +++ b/SolastaUnfinishedBusiness/Models/OneDndContext.cs @@ -0,0 +1,680 @@ +using System.Collections.Generic; +using System.Linq; +using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Api.GameExtensions; +using SolastaUnfinishedBusiness.Api.LanguageExtensions; +using SolastaUnfinishedBusiness.Builders; +using SolastaUnfinishedBusiness.Builders.Features; +using SolastaUnfinishedBusiness.Interfaces; +using SolastaUnfinishedBusiness.Validators; +using TA.AI; +using static ActionDefinitions; +using static RuleDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ConditionDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MonsterDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionConditionAffinitys; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSenses; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ItemDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionRegenerations; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionFeatureSets; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionRestHealingModifiers; + +namespace SolastaUnfinishedBusiness.Models; + +internal static class OneDndContext +{ + private static readonly FeatureDefinitionCombatAffinity CombatAffinityConditionSurprised = + FeatureDefinitionCombatAffinityBuilder + .Create("CombatAffinityConditionSurprised") + .SetGuiPresentationNoContent(true) + .SetInitiativeAffinity(AdvantageType.Disadvantage) + .AddToDB(); + + private static readonly FeatureDefinitionPointPool PointPoolWizardScholar = FeatureDefinitionPointPoolBuilder + .Create("PointPoolWizardScholar") + .SetGuiPresentation(Category.Feature) + .SetPool(HeroDefinitions.PointsPoolType.Expertise, 1) + .RestrictChoices( + SkillDefinitions.Arcana, + SkillDefinitions.History, + SkillDefinitions.Investigation, + SkillDefinitions.Medecine, + SkillDefinitions.Nature, + SkillDefinitions.Religion) + .AddToDB(); + + private static readonly FeatureDefinitionPower PowerWarlockMagicalCunning = FeatureDefinitionPowerBuilder + .Create("PowerWarlockMagicalCunning") + .SetGuiPresentation(Category.Feature, PowerWizardArcaneRecovery) + .SetUsesFixed(ActivationTime.Rest, RechargeRate.LongRest) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetTargetingData(Side.All, RangeType.Self, 0, TargetType.Self) + .SetEffectForms( + EffectFormBuilder + .Create() + .SetSpellForm(5) + .Build()) + .SetParticleEffectParameters(PowerWizardArcaneRecovery) + .Build()) + .AddToDB(); + + private static readonly FeatureDefinitionPointPool PointPoolWarlockInvocation1 = FeatureDefinitionPointPoolBuilder + .Create(FeatureDefinitionPointPools.PointPoolWarlockInvocation2, "PointPoolWarlockInvocation1") + .SetGuiPresentation("PointPoolWarlockInvocationInitial", Category.Feature) + .SetPool(HeroDefinitions.PointsPoolType.Invocation, 1) + .AddToDB(); + + private static readonly FeatureDefinitionFeatureSet FeatureSetDruidPrimalOrder = FeatureDefinitionFeatureSetBuilder + .Create("FeatureSetDruidPrimalOrder") + .SetGuiPresentation(Category.Feature) + .SetMode(FeatureDefinitionFeatureSet.FeatureSetMode.Exclusion) + .SetFeatureSet( + FeatureDefinitionFeatureSetBuilder + .Create("FeatureSetDruidPrimalOrderMagician") + .SetGuiPresentation(Category.Feature) + .SetFeatureSet( + FeatureDefinitionAbilityCheckAffinityBuilder + .Create("AbilityCheckDruidPrimalOrderMagician") + .SetGuiPresentation("FeatureSetDruidPrimalOrderMagician", Category.Feature) + .BuildAndSetAffinityGroups(CharacterAbilityCheckAffinity.None, DieType.D6, 1, + AbilityCheckGroupOperation.AddDie, + (AttributeDefinitions.Intelligence, SkillDefinitions.Arcana), + (AttributeDefinitions.Intelligence, SkillDefinitions.Nature)) + .AddToDB(), + FeatureDefinitionPointPoolBuilder + .Create("PointPoolDruidPrimalOrderMagician") + .SetGuiPresentationNoContent(true) + .SetSpellOrCantripPool(HeroDefinitions.PointsPoolType.Cantrip, 1) + .AddToDB()) + .AddToDB(), + FeatureDefinitionFeatureSetBuilder + .Create("FeatureSetDruidPrimalOrderWarden") + .SetGuiPresentation(Category.Feature) + .SetFeatureSet( + FeatureDefinitionProficiencyBuilder + .Create("ProficiencyDruidPrimalOrderWardenArmor") + .SetGuiPresentationNoContent(true) + .SetProficiencies(ProficiencyType.Armor, EquipmentDefinitions.MediumArmorCategory) + .AddToDB(), + FeatureDefinitionProficiencyBuilder + .Create("ProficiencyDruidPrimalOrderWardenWeapon") + .SetGuiPresentationNoContent(true) + .SetProficiencies(ProficiencyType.Weapon, EquipmentDefinitions.MartialWeaponCategory) + .AddToDB()) + .AddToDB()) + .AddToDB(); + + private static readonly List DruidWeaponsCategories = + [.. FeatureDefinitionProficiencys.ProficiencyDruidWeapon.Proficiencies]; + + private static readonly List<(string, string)> GuidanceProficiencyPairs = + [ + (AttributeDefinitions.Dexterity, SkillDefinitions.Acrobatics), + (AttributeDefinitions.Wisdom, SkillDefinitions.AnimalHandling), + (AttributeDefinitions.Intelligence, SkillDefinitions.Arcana), + (AttributeDefinitions.Strength, SkillDefinitions.Athletics), + (AttributeDefinitions.Charisma, SkillDefinitions.Deception), + (AttributeDefinitions.Intelligence, SkillDefinitions.History), + (AttributeDefinitions.Wisdom, SkillDefinitions.Insight), + (AttributeDefinitions.Charisma, SkillDefinitions.Intimidation), + (AttributeDefinitions.Intelligence, SkillDefinitions.Investigation), + (AttributeDefinitions.Wisdom, SkillDefinitions.Medecine), + (AttributeDefinitions.Intelligence, SkillDefinitions.Nature), + (AttributeDefinitions.Wisdom, SkillDefinitions.Perception), + (AttributeDefinitions.Charisma, SkillDefinitions.Performance), + (AttributeDefinitions.Charisma, SkillDefinitions.Persuasion), + (AttributeDefinitions.Intelligence, SkillDefinitions.Religion), + (AttributeDefinitions.Dexterity, SkillDefinitions.SleightOfHand), + (AttributeDefinitions.Dexterity, SkillDefinitions.Stealth), + (AttributeDefinitions.Wisdom, SkillDefinitions.Survival) + ]; + + private static readonly List GuidanceSubSpells = []; + + internal static void LateLoad() + { + BuildOneDndGuidanceSubspells(); + SwapOneDndBarkskinSpell(); + SwapOneDndGuidanceSpell(); + SwitchOneDnDEnableDruidToUseMetalArmor(); + SwitchDruidWeaponProficiencyToUseOneDnd(); + SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); + SwitchEnableRitualOnAllCasters(); + SwitchOneDndPreparedSpellsTables(); + SwitchOneDndPaladinLayOnHandAsBonusAction(); + SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); + SwitchOneDndEnableBardWordsOfCreationAtLevel20(); + SwitchOneDndRemoveBardSongOfRest(); + SwitchOneDndRemoveBardMagicalSecretAt14And18(); + SwitchOneDndChangeBardicInspirationDurationToOneHour(); + SwitchOneDndEnableBardExpertiseOneLevelBefore(); + SwitchOneDndWarlockInvocationsProgression(); + SwitchOneDndWarlockMagicalCunningAtLevel2(); + SwitchOneDndHealingPotionBonusAction(); + SwitchOneDndHealingSpellsBuf(); + SwitchOneDndWizardScholar(); + SwitchOneDndWizardSchoolOfMagicLearningLevel(); + SwitchOneDndPaladinLearnSpellCastingAtOne(); + SwitchOneDndRangerLearnSpellCastingAtOne(); + SwitchOneDndSurprisedEnforceDisadvantage(); + } + + + internal static void SwitchOneDnDEnableDruidToUseMetalArmor() + { + var active = Main.Settings.EnableDruidToUseMetalArmor; + + if (active) + { + FeatureDefinitionProficiencys.ProficiencyDruidArmor.ForbiddenItemTags.Clear(); + } + else + { + if (!FeatureDefinitionProficiencys.ProficiencyDruidArmor.ForbiddenItemTags.Contains( + TagsDefinitions.ItemTagMetal)) + { + FeatureDefinitionProficiencys.ProficiencyDruidArmor.ForbiddenItemTags.Add( + TagsDefinitions.ItemTagMetal); + } + } + } + + internal static void SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency() + { + if (Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency) + { + FeatureDefinitionProficiencys.ProficiencyDruidArmor.Proficiencies.Remove( + EquipmentDefinitions.MediumArmorCategory); + + Druid.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetDruidPrimalOrder, 1)); + } + else + { + FeatureDefinitionProficiencys.ProficiencyDruidArmor.Proficiencies.TryAdd( + EquipmentDefinitions.MediumArmorCategory); + + Druid.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureSetDruidPrimalOrder); + } + + Druid.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchDruidWeaponProficiencyToUseOneDnd() + { + FeatureDefinitionProficiencys.ProficiencyDruidWeapon.proficiencies = + Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd + ? [WeaponCategoryDefinitions.SimpleWeaponCategory.Name] + : DruidWeaponsCategories; + } + + internal static void SwitchEnableRitualOnAllCasters() + { + var subclasses = SharedSpellsContext.SubclassCasterType.Keys.Select(GetDefinition); + + if (Main.Settings.EnableRitualOnAllCasters) + { + Paladin.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetClericRitualCasting, + Main.Settings.EnablePaladinSpellCastingAtLevel1 ? 1 : 2)); + Ranger.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetClericRitualCasting, + Main.Settings.EnableRangerSpellCastingAtLevel1 ? 1 : 2)); + Sorcerer.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetClericRitualCasting, 1)); + } + else + { + Paladin.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureSetClericRitualCasting); + Ranger.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureSetClericRitualCasting); + Sorcerer.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureSetClericRitualCasting); + } + + Paladin.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + Ranger.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + Sorcerer.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + + foreach (var subclass in subclasses) + { + if (Main.Settings.EnableRitualOnAllCasters) + { + subclass.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetClericRitualCasting, 3)); + } + else + { + subclass.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureSetClericRitualCasting); + } + + subclass.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + } + + internal static void SwapOneDndBarkskinSpell() + { + if (Main.Settings.SwapOneDndBarkskinSpell) + { + Barkskin.requiresConcentration = false; + Barkskin.castingTime = ActivationTime.BonusAction; + FeatureDefinitionAttributeModifiers.AttributeModifierBarkskin.modifierValue = 17; + Barkskin.GuiPresentation.description = "Spell/&BarkskinOneDndDescription"; + ConditionBarkskin.GuiPresentation.description = "Rules/&ConditionOneDndBarkskinDescription"; + } + else + { + Barkskin.requiresConcentration = true; + Barkskin.castingTime = ActivationTime.Action; + FeatureDefinitionAttributeModifiers.AttributeModifierBarkskin.modifierValue = 16; + Barkskin.GuiPresentation.description = "Spell/&BarkskinDescription"; + ConditionBarkskin.GuiPresentation.description = "Rules/&ConditionBarkskinDescription"; + } + } + + private static void BuildOneDndGuidanceSubspells() + { + foreach (var (attribute, skill) in GuidanceProficiencyPairs) + { + var proficiencyPair = (attribute, skill); + var affinity = $"AbilityCheckAffinityGuidance{skill}"; + var condition = $"ConditionGuidance{skill}"; + + GuidanceSubSpells.Add( + SpellDefinitionBuilder + .Create($"Guidance{skill}") + .SetGuiPresentation(Category.Spell, Guidance.GuiPresentation.SpriteReference) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolDivination) + .SetSpellLevel(0) + .SetCastingTime(ActivationTime.Action) + .SetMaterialComponent(MaterialComponentType.None) + .SetVerboseComponent(true) + .SetSomaticComponent(true) + .SetRequiresConcentration(true) + .SetVocalSpellSameType(VocalSpellSemeType.Buff) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Ally, RangeType.Touch, 0, TargetType.IndividualsUnique) + .SetEffectForms(EffectFormBuilder.ConditionForm( + ConditionDefinitionBuilder + .Create(ConditionGuided, condition) + .SetGuiPresentation(Category.Condition, ConditionGuided) + .SetSpecialInterruptions(ConditionInterruption.None) + .SetFeatures( + FeatureDefinitionAbilityCheckAffinityBuilder + .Create(affinity) + .SetGuiPresentationNoContent(true) + .BuildAndSetAffinityGroups(CharacterAbilityCheckAffinity.None, DieType.D4, + 1, AbilityCheckGroupOperation.AddDie, proficiencyPair) + .AddToDB()) + .AddToDB())) + .SetParticleEffectParameters(Guidance) + .Build()) + .AddToDB()); + } + } + + internal static void SwapOneDndGuidanceSpell() + { + foreach (var spell in GuidanceSubSpells) + { + spell.implemented = false; + } + + if (Main.Settings.SwapOneDndGuidanceSpell) + { + Guidance.spellsBundle = true; + Guidance.SubspellsList.SetRange(GuidanceSubSpells); + Guidance.compactSubspellsTooltip = true; + Guidance.EffectDescription.EffectForms.Clear(); + Guidance.GuiPresentation.description = "Spell/&OneDndGuidanceDescription"; + } + else + { + Guidance.spellsBundle = false; + Guidance.SubspellsList.Clear(); + Guidance.EffectDescription.EffectForms.SetRange(EffectFormBuilder.ConditionForm(ConditionGuided)); + Guidance.GuiPresentation.description = "Spell/&GuidanceDescription"; + } + } + + internal static void SwitchOneDndWizardSchoolOfMagicLearningLevel() + { + var schools = DatabaseRepository.GetDatabase() + .Where(x => + FeatureDefinitionSubclassChoices.SubclassChoiceWizardArcaneTraditions.Subclasses.Contains(x.Name) || + x.Name.StartsWith(WizardClass)) + .ToList(); + + var fromLevel = 3; + var toLevel = 2; + + if (Main.Settings.EnableWizardToLearnSchoolAtLevel3) + { + fromLevel = 2; + toLevel = 3; + } + + foreach (var featureUnlock in schools + .SelectMany(school => school.FeatureUnlocks + .Where(featureUnlock => featureUnlock.level == fromLevel))) + { + featureUnlock.level = toLevel; + } + + foreach (var featureUnlock in Wizard.FeatureUnlocks.Where(featureUnlock => featureUnlock.level == fromLevel)) + { + featureUnlock.level = toLevel; + } + + foreach (var school in schools) + { + school.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + Wizard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchOneDndPaladinLearnSpellCastingAtOne() + { + var level = Main.Settings.EnablePaladinSpellCastingAtLevel1 ? 1 : 2; + + foreach (var featureUnlock in Paladin.FeatureUnlocks + .Where(x => x.FeatureDefinition == FeatureDefinitionCastSpells.CastSpellPaladin)) + { + featureUnlock.level = level; + } + + // allows back and forth compatibility with EnableRitualOnAllCasters + foreach (var featureUnlock in Paladin.FeatureUnlocks + .Where(x => x.FeatureDefinition == FeatureSetClericRitualCasting)) + { + featureUnlock.level = level; + } + + Paladin.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + + if (Main.Settings.EnablePaladinSpellCastingAtLevel1) + { + FeatureDefinitionCastSpells.CastSpellPaladin.slotsPerLevels = SharedSpellsContext.HalfRoundUpCastingSlots; + SharedSpellsContext.ClassCasterType[PaladinClass] = + FeatureDefinitionCastSpellBuilder.CasterProgression.HalfRoundUp; + } + else + { + FeatureDefinitionCastSpells.CastSpellPaladin.slotsPerLevels = SharedSpellsContext.HalfCastingSlots; + SharedSpellsContext.ClassCasterType[PaladinClass] = + FeatureDefinitionCastSpellBuilder.CasterProgression.Half; + } + } + + internal static void SwitchOneDndRangerLearnSpellCastingAtOne() + { + var level = Main.Settings.EnableRangerSpellCastingAtLevel1 ? 1 : 2; + + foreach (var featureUnlock in Ranger.FeatureUnlocks + .Where(x => x.FeatureDefinition == FeatureDefinitionCastSpells.CastSpellRanger)) + { + featureUnlock.level = level; + } + + // allows back and forth compatibility with EnableRitualOnAllCasters + foreach (var featureUnlock in Ranger.FeatureUnlocks + .Where(x => x.FeatureDefinition == FeatureSetClericRitualCasting)) + { + featureUnlock.level = level; + } + + Ranger.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + + if (Main.Settings.EnableRangerSpellCastingAtLevel1) + { + FeatureDefinitionCastSpells.CastSpellRanger.slotsPerLevels = SharedSpellsContext.HalfRoundUpCastingSlots; + SharedSpellsContext.ClassCasterType[RangerClass] = + FeatureDefinitionCastSpellBuilder.CasterProgression.HalfRoundUp; + } + else + { + FeatureDefinitionCastSpells.CastSpellRanger.slotsPerLevels = SharedSpellsContext.HalfCastingSlots; + SharedSpellsContext.ClassCasterType[RangerClass] = + FeatureDefinitionCastSpellBuilder.CasterProgression.Half; + } + } + + internal static void SwitchOneDndSurprisedEnforceDisadvantage() + { + if (Main.Settings.EnableSurprisedToEnforceDisadvantage) + { + ConditionDefinitions.ConditionSurprised.Features.SetRange(CombatAffinityConditionSurprised); + ConditionDefinitions.ConditionSurprised.GuiPresentation.Description = Gui.NoLocalization; + } + else + { + ConditionDefinitions.ConditionSurprised.Features.SetRange( + FeatureDefinitionActionAffinitys.ActionAffinityConditionSurprised, + FeatureDefinitionMovementAffinitys.MovementAffinityConditionSurprised); + ConditionDefinitions.ConditionSurprised.GuiPresentation.Description = + "Rules/&ConditionSurprisedDescription"; + } + } + + internal static void SwitchOneDndPreparedSpellsTables() + { + if (Main.Settings.EnableOneDnDPreparedSpellsTables) + { + FeatureDefinitionCastSpells.CastSpellBard.knownSpells = + [4, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16, 16, 17, 17, 18, 18, 19, 20, 21, 22]; + FeatureDefinitionCastSpells.CastSpellSorcerer.knownSpells = + [2, 4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 16, 17, 17, 18, 18, 19, 20, 21, 22]; + } + else + { + FeatureDefinitionCastSpells.CastSpellBard.knownSpells = + [4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 15, 16, 18, 19, 19, 20, 22, 22, 22]; + FeatureDefinitionCastSpells.CastSpellSorcerer.knownSpells = + [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15]; + } + } + + internal static void SwitchOneDndPaladinLayOnHandAsBonusAction() + { + PowerPaladinLayOnHands.activationTime = Main.Settings.EnablePaladinLayOnHandsAsBonusAction + ? ActivationTime.BonusAction + : ActivationTime.Action; + } + + internal static void SwitchOneDndEnableBardExpertiseOneLevelBefore() + { + var level = Main.Settings.EnableBardExpertiseOneLevelBefore ? 2 : 3; + + foreach (var featureUnlock in Ranger.FeatureUnlocks + .Where(x => x.FeatureDefinition == FeatureDefinitionPointPools.PointPoolBardExpertiseLevel3)) + { + featureUnlock.level = level; + } + + level = Main.Settings.EnableBardExpertiseOneLevelBefore ? 9 : 10; + + foreach (var featureUnlock in Ranger.FeatureUnlocks + .Where(x => x.FeatureDefinition == FeatureDefinitionPointPools.PointPoolBardExpertiseLevel10)) + { + featureUnlock.level = level; + } + + Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchOneDndChangeBardicInspirationDurationToOneHour() + { + if (Main.Settings.ChangeBardicInspirationDurationToOneHour) + { + ConditionDefinitions.ConditionBardicInspiration.durationType = DurationType.Hour; + ConditionDefinitions.ConditionBardicInspiration.durationParameter = 1; + } + else + { + ConditionDefinitions.ConditionBardicInspiration.durationType = DurationType.Minute; + ConditionDefinitions.ConditionBardicInspiration.durationParameter = 10; + } + } + + internal static void SwitchOneDndRemoveBardSongOfRest() + { + Bard.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == RestHealingModifierBardSongOfRest); + + if (!Main.Settings.RemoveBardSongOfRest) + { + Bard.FeatureUnlocks.Add(new FeatureUnlockByLevel(RestHealingModifierBardSongOfRest, 2)); + } + + Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchOneDndRemoveBardMagicalSecretAt14And18() + { + Bard.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == FeatureDefinitionPointPools.PointPoolBardMagicalSecrets14 || + x.FeatureDefinition == Level20Context.PointPoolBardMagicalSecrets18); + + if (!Main.Settings.RemoveBardMagicalSecretAt14And18) + { + Bard.FeatureUnlocks.AddRange( + new FeatureUnlockByLevel(FeatureDefinitionPointPools.PointPoolBardMagicalSecrets14, 14), + new FeatureUnlockByLevel(Level20Context.PointPoolBardMagicalSecrets18, 18)); + } + + Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchOneDndEnableBardSuperiorInspirationAtLevel18() + { + if (Main.Settings.RemoveBardMagicalSecretAt14And18) + { + Bard.FeatureUnlocks.Add( + new FeatureUnlockByLevel(Level20Context.FeatureBardSuperiorInspiration2024, 18)); + } + else + { + Bard.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == Level20Context.FeatureBardSuperiorInspiration2024); + } + + Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchOneDndEnableBardWordsOfCreationAtLevel20() + { + if (Main.Settings.RemoveBardMagicalSecretAt14And18) + { + Bard.FeatureUnlocks.Add( + new FeatureUnlockByLevel(Level20Context.AutoPreparedSpellsBardWordOfCreation, 20)); + } + else + { + Bard.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == Level20Context.AutoPreparedSpellsBardWordOfCreation); + } + + Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchOneDndHealingPotionBonusAction() + { + if (Main.Settings.OneDndHealingPotionBonusAction) + { + PowerFunctionPotionOfHealing.activationTime = ActivationTime.BonusAction; + PowerFunctionPotionOfHealingOther.activationTime = ActivationTime.BonusAction; + PowerFunctionPotionOfGreaterHealing.activationTime = ActivationTime.BonusAction; + PowerFunctionPotionOfGreaterHealingOther.activationTime = ActivationTime.BonusAction; + PowerFunctionPotionOfSuperiorHealing.activationTime = ActivationTime.BonusAction; + PowerFunctionPotionOfSuperiorHealingOther.activationTime = ActivationTime.BonusAction; + PowerFunctionPotionRemedy.activationTime = ActivationTime.BonusAction; + PowerFunctionRemedyOther.activationTime = ActivationTime.BonusAction; + PowerFunctionAntitoxin.activationTime = ActivationTime.BonusAction; + } + else + { + PowerFunctionPotionOfHealing.activationTime = ActivationTime.Action; + PowerFunctionPotionOfHealingOther.activationTime = ActivationTime.Action; + PowerFunctionPotionOfGreaterHealing.activationTime = ActivationTime.Action; + PowerFunctionPotionOfGreaterHealingOther.activationTime = ActivationTime.Action; + PowerFunctionPotionOfSuperiorHealing.activationTime = ActivationTime.Action; + PowerFunctionPotionOfSuperiorHealingOther.activationTime = ActivationTime.Action; + PowerFunctionPotionRemedy.activationTime = ActivationTime.Action; + PowerFunctionRemedyOther.activationTime = ActivationTime.Action; + PowerFunctionAntitoxin.activationTime = ActivationTime.Action; + } + } + + internal static void SwitchOneDndHealingSpellsBuf() + { + var dice = Main.Settings.EnableOneDndHealingSpellsBuf ? 2 : 1; + + // Cure Wounds, Healing Word got buf on base damage and add dice + CureWounds.effectDescription.EffectForms[0].healingForm.diceNumber = dice; + CureWounds.effectDescription.effectAdvancement.additionalDicePerIncrement = dice; + HealingWord.effectDescription.EffectForms[0].healingForm.diceNumber = dice; + HealingWord.effectDescription.effectAdvancement.additionalDicePerIncrement = dice; + + // Mass Cure Wounds and Mass Healing Word only got buf on base damage + MassHealingWord.effectDescription.EffectForms[0].healingForm.diceNumber = dice; + + dice = Main.Settings.EnableOneDndHealingSpellsBuf ? 5 : 3; + + MassCureWounds.effectDescription.EffectForms[0].healingForm.diceNumber = dice; + } + + internal static void SwitchOneDndWizardScholar() + { + if (Main.Settings.EnableWizardToLearnScholarAtLevel2) + { + Wizard.FeatureUnlocks.Add(new FeatureUnlockByLevel(PointPoolWizardScholar, 2)); + } + else + { + Wizard.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PointPoolWizardScholar); + } + + Wizard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchOneDndWarlockMagicalCunningAtLevel2() + { + if (Main.Settings.EnableWarlockMagicalCunningAtLevel2) + { + Warlock.FeatureUnlocks.Add(new FeatureUnlockByLevel(PowerWarlockMagicalCunning, 2)); + } + else + { + Warlock.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PowerWarlockMagicalCunning); + } + + Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchOneDndWarlockInvocationsProgression() + { + if (Main.Settings.SwapWarlockToUseOneDndInvocationProgression) + { + Warlock.FeatureUnlocks.Add(new FeatureUnlockByLevel(PointPoolWarlockInvocation1, 1)); + FeatureDefinitionPointPools.PointPoolWarlockInvocation2.GuiPresentation.Title = + "Feature/&PointPoolWarlockInvocationAdditionalTitle"; + FeatureDefinitionPointPools.PointPoolWarlockInvocation2.GuiPresentation.Description = + "Feature/&PointPoolWarlockInvocationAdditionalDescription"; + FeatureDefinitionPointPools.PointPoolWarlockInvocation5.poolAmount = 2; + } + else + { + Warlock.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PointPoolWarlockInvocation1); + FeatureDefinitionPointPools.PointPoolWarlockInvocation2.GuiPresentation.Title = + "Feature/&PointPoolWarlockInvocationInitialTitle"; + FeatureDefinitionPointPools.PointPoolWarlockInvocation2.GuiPresentation.Description = + "Feature/&PointPoolWarlockInvocationInitialDescription"; + FeatureDefinitionPointPools.PointPoolWarlockInvocation5.poolAmount = 1; + } + + Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } +} diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index 9c89acc171..dba3cff020 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -14,15 +14,11 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ConditionDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MonsterDefinitions; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionAbilityCheckAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionConditionAffinitys; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSenses; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ItemDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionRegenerations; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionFeatureSets; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionRestHealingModifiers; namespace SolastaUnfinishedBusiness.Models; @@ -81,135 +77,19 @@ internal static class SrdAndHouseRulesContext private static readonly DecisionPackageDefinition DecisionPackageRestrained = AiContext.BuildDecisionPackageBreakFree(ConditionRestrainedByEntangle.Name); - private static readonly FeatureDefinitionCombatAffinity CombatAffinityConditionSurprised = - FeatureDefinitionCombatAffinityBuilder - .Create("CombatAffinityConditionSurprised") - .SetGuiPresentationNoContent(true) - .SetInitiativeAffinity(AdvantageType.Disadvantage) - .AddToDB(); - - private static readonly FeatureDefinitionPointPool PointPoolWizardScholar = FeatureDefinitionPointPoolBuilder - .Create("PointPoolWizardScholar") - .SetGuiPresentation(Category.Feature) - .SetPool(HeroDefinitions.PointsPoolType.Expertise, 1) - .RestrictChoices( - SkillDefinitions.Arcana, - SkillDefinitions.History, - SkillDefinitions.Investigation, - SkillDefinitions.Medecine, - SkillDefinitions.Nature, - SkillDefinitions.Religion) - .AddToDB(); - - private static readonly FeatureDefinitionPower PowerWarlockMagicalCunning = FeatureDefinitionPowerBuilder - .Create("PowerWarlockMagicalCunning") - .SetGuiPresentation(Category.Feature, PowerWizardArcaneRecovery) - .SetUsesFixed(ActivationTime.Rest, RechargeRate.LongRest) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetTargetingData(Side.All, RangeType.Self, 0, TargetType.Self) - .SetEffectForms( - EffectFormBuilder - .Create() - .SetSpellForm(5) - .Build()) - .SetParticleEffectParameters(PowerWizardArcaneRecovery) - .Build()) - .AddToDB(); - - private static readonly FeatureDefinitionPointPool PointPoolWarlockInvocation1 = FeatureDefinitionPointPoolBuilder - .Create(FeatureDefinitionPointPools.PointPoolWarlockInvocation2, "PointPoolWarlockInvocation1") - .SetGuiPresentation("PointPoolWarlockInvocationInitial", Category.Feature) - .SetPool(HeroDefinitions.PointsPoolType.Invocation, 1) - .AddToDB(); - - private static readonly FeatureDefinitionFeatureSet FeatureSetDruidPrimalOrder = FeatureDefinitionFeatureSetBuilder - .Create("FeatureSetDruidPrimalOrder") - .SetGuiPresentation(Category.Feature) - .SetMode(FeatureDefinitionFeatureSet.FeatureSetMode.Exclusion) - .SetFeatureSet( - FeatureDefinitionFeatureSetBuilder - .Create("FeatureSetDruidPrimalOrderMagician") - .SetGuiPresentation(Category.Feature) - .SetFeatureSet( - FeatureDefinitionAbilityCheckAffinityBuilder - .Create("AbilityCheckDruidPrimalOrderMagician") - .SetGuiPresentation("FeatureSetDruidPrimalOrderMagician", Category.Feature) - .BuildAndSetAffinityGroups(CharacterAbilityCheckAffinity.None, DieType.D6, 1, - AbilityCheckGroupOperation.AddDie, - (AttributeDefinitions.Intelligence, SkillDefinitions.Arcana), - (AttributeDefinitions.Intelligence, SkillDefinitions.Nature)) - .AddToDB(), - FeatureDefinitionPointPoolBuilder - .Create("PointPoolDruidPrimalOrderMagician") - .SetGuiPresentationNoContent(true) - .SetSpellOrCantripPool(HeroDefinitions.PointsPoolType.Cantrip, 1) - .AddToDB()) - .AddToDB(), - FeatureDefinitionFeatureSetBuilder - .Create("FeatureSetDruidPrimalOrderWarden") - .SetGuiPresentation(Category.Feature) - .SetFeatureSet( - FeatureDefinitionProficiencyBuilder - .Create("ProficiencyDruidPrimalOrderWardenArmor") - .SetGuiPresentationNoContent(true) - .SetProficiencies(ProficiencyType.Armor, EquipmentDefinitions.MediumArmorCategory) - .AddToDB(), - FeatureDefinitionProficiencyBuilder - .Create("ProficiencyDruidPrimalOrderWardenWeapon") - .SetGuiPresentationNoContent(true) - .SetProficiencies(ProficiencyType.Weapon, EquipmentDefinitions.MartialWeaponCategory) - .AddToDB()) - .AddToDB()) - .AddToDB(); - - private static readonly List DruidWeaponsCategories = - [.. FeatureDefinitionProficiencys.ProficiencyDruidWeapon.Proficiencies]; - private static SpellDefinition ConjureElementalInvisibleStalker { get; set; } - private static readonly List<(string, string)> GuidanceProficiencyPairs = - [ - (AttributeDefinitions.Dexterity, SkillDefinitions.Acrobatics), - (AttributeDefinitions.Wisdom, SkillDefinitions.AnimalHandling), - (AttributeDefinitions.Intelligence, SkillDefinitions.Arcana), - (AttributeDefinitions.Strength, SkillDefinitions.Athletics), - (AttributeDefinitions.Charisma, SkillDefinitions.Deception), - (AttributeDefinitions.Intelligence, SkillDefinitions.History), - (AttributeDefinitions.Wisdom, SkillDefinitions.Insight), - (AttributeDefinitions.Charisma, SkillDefinitions.Intimidation), - (AttributeDefinitions.Intelligence, SkillDefinitions.Investigation), - (AttributeDefinitions.Wisdom, SkillDefinitions.Medecine), - (AttributeDefinitions.Intelligence, SkillDefinitions.Nature), - (AttributeDefinitions.Wisdom, SkillDefinitions.Perception), - (AttributeDefinitions.Charisma, SkillDefinitions.Performance), - (AttributeDefinitions.Charisma, SkillDefinitions.Persuasion), - (AttributeDefinitions.Intelligence, SkillDefinitions.Religion), - (AttributeDefinitions.Dexterity, SkillDefinitions.SleightOfHand), - (AttributeDefinitions.Dexterity, SkillDefinitions.Stealth), - (AttributeDefinitions.Wisdom, SkillDefinitions.Survival) - ]; - - private static List GuidanceSubSpells = new List(); - internal static void LateLoad() { BuildConjureElementalInvisibleStalker(); - BuildOneDndGuidanceSubspells(); LoadAfterRestIdentify(); LoadAllowTargetingSelectionWhenCastingChainLightningSpell(); LoadSenseNormalVisionRangeMultiplier(); - SwapOneDndBarkskinSpell(); - SwapOneDndGuidanceSpell(); SwitchAddBleedingToLesserRestoration(); SwitchAllowClubsToBeThrown(); SwitchChangeSleetStormToCube(); SwitchColdResistanceAndImmunityAlsoGrantsWeatherImmunity(); SwitchConditionBlindedShouldNotAllowOpportunityAttack(); - SwitchOneDnDEnableDruidToUseMetalArmor(); - SwitchDruidWeaponProficiencyToUseOneDnd(); - SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); SwitchEldritchBlastRange(); SwitchEnableUpcastConjureElementalAndFey(); SwitchFilterOnHideousLaughter(); @@ -217,26 +97,8 @@ internal static void LateLoad() SwitchAllowBladeCantripsToUseReach(); SwitchHastedCasing(); SwitchMagicStaffFoci(); - SwitchEnableRitualOnAllCasters(); SwitchAllowTargetingSelectionWhenCastingChainLightningSpell(); SwitchOfficialFoodRationsWeight(); - SwitchOneDndPreparedSpellsTables(); - SwitchOneDndPaladinLayOnHandAsBonusAction(); - SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); - SwitchOneDndEnableBardWordsOfCreationAtLevel20(); - SwitchOneDndRemoveBardSongOfRest(); - SwitchOneDndRemoveBardMagicalSecretAt14And18(); - SwitchOneDndChangeBardicInspirationDurationToOneHour(); - SwitchOneDndEnableBardExpertiseOneLevelBefore(); - SwitchOneDndWarlockInvocationsProgression(); - SwitchOneDndWarlockMagicalCunningAtLevel2(); - SwitchOneDndHealingPotionBonusAction(); - SwitchOneDndHealingSpellsBuf(); - SwitchOneDndWizardScholar(); - SwitchOneDndWizardSchoolOfMagicLearningLevel(); - SwitchOneDndPaladinLearnSpellCastingAtOne(); - SwitchOneDndRangerLearnSpellCastingAtOne(); - SwitchOneDndSurprisedEnforceDisadvantage(); SwitchRecurringEffectOnEntangle(); SwitchRingOfRegenerationHealRate(); SwitchSchoolRestrictionsFromShadowCaster(); @@ -418,91 +280,6 @@ internal static void SwitchUniversalSylvanArmorAndLightbringer() WizardClothes_Alternate.RequiredAttunementClasses.AddRange(allowedClasses); } - internal static void SwitchOneDnDEnableDruidToUseMetalArmor() - { - var active = Main.Settings.EnableDruidToUseMetalArmor; - - if (active) - { - FeatureDefinitionProficiencys.ProficiencyDruidArmor.ForbiddenItemTags.Clear(); - } - else - { - if (!FeatureDefinitionProficiencys.ProficiencyDruidArmor.ForbiddenItemTags.Contains( - TagsDefinitions.ItemTagMetal)) - { - FeatureDefinitionProficiencys.ProficiencyDruidArmor.ForbiddenItemTags.Add( - TagsDefinitions.ItemTagMetal); - } - } - } - - internal static void SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency() - { - if (Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency) - { - FeatureDefinitionProficiencys.ProficiencyDruidArmor.Proficiencies.Remove( - EquipmentDefinitions.MediumArmorCategory); - - Druid.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetDruidPrimalOrder, 1)); - } - else - { - FeatureDefinitionProficiencys.ProficiencyDruidArmor.Proficiencies.TryAdd( - EquipmentDefinitions.MediumArmorCategory); - - Druid.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureSetDruidPrimalOrder); - } - - Druid.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchDruidWeaponProficiencyToUseOneDnd() - { - FeatureDefinitionProficiencys.ProficiencyDruidWeapon.proficiencies = - Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd - ? [WeaponCategoryDefinitions.SimpleWeaponCategory.Name] - : DruidWeaponsCategories; - } - - internal static void SwitchEnableRitualOnAllCasters() - { - var subclasses = SharedSpellsContext.SubclassCasterType.Keys.Select(GetDefinition); - - if (Main.Settings.EnableRitualOnAllCasters) - { - Paladin.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetClericRitualCasting, - Main.Settings.EnablePaladinSpellCastingAtLevel1 ? 1 : 2)); - Ranger.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetClericRitualCasting, - Main.Settings.EnableRangerSpellCastingAtLevel1 ? 1 : 2)); - Sorcerer.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetClericRitualCasting, 1)); - } - else - { - Paladin.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureSetClericRitualCasting); - Ranger.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureSetClericRitualCasting); - Sorcerer.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureSetClericRitualCasting); - } - - Paladin.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - Ranger.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - Sorcerer.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - - foreach (var subclass in subclasses) - { - if (Main.Settings.EnableRitualOnAllCasters) - { - subclass.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetClericRitualCasting, 3)); - } - else - { - subclass.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureSetClericRitualCasting); - } - - subclass.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - } - internal static void SwitchMagicStaffFoci() { if (!Main.Settings.MakeAllMagicStaveArcaneFoci) @@ -574,435 +351,6 @@ internal static void SwitchOfficialFoodRationsWeight() } } - internal static void SwapOneDndBarkskinSpell() - { - if (Main.Settings.SwapOneDndBarkskinSpell) - { - Barkskin.requiresConcentration = false; - Barkskin.castingTime = ActivationTime.BonusAction; - FeatureDefinitionAttributeModifiers.AttributeModifierBarkskin.modifierValue = 17; - Barkskin.GuiPresentation.description = "Spell/&BarkskinOneDndDescription"; - ConditionBarkskin.GuiPresentation.description = "Rules/&ConditionOneDndBarkskinDescription"; - } - else - { - Barkskin.requiresConcentration = true; - Barkskin.castingTime = ActivationTime.Action; - FeatureDefinitionAttributeModifiers.AttributeModifierBarkskin.modifierValue = 16; - Barkskin.GuiPresentation.description = "Spell/&BarkskinDescription"; - ConditionBarkskin.GuiPresentation.description = "Rules/&ConditionBarkskinDescription"; - } - } - - private static void BuildOneDndGuidanceSubspells() - { - foreach (var (attribute, skill) in GuidanceProficiencyPairs) - { - var proficiencypair = (attribute, skill); - var affinity = $"AbilityCheckAffinityGuidance{skill}"; - var condition = $"ConditionGuidance{skill}"; - - GuidanceSubSpells.Add( - SpellDefinitionBuilder - .Create($"Guidance{skill}") - .SetGuiPresentation(Category.Spell, Guidance.GuiPresentation.SpriteReference) - .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolDivination) - .SetSpellLevel(0) - .SetCastingTime(ActivationTime.Action) - .SetMaterialComponent(MaterialComponentType.None) - .SetVerboseComponent(true) - .SetSomaticComponent(true) - .SetRequiresConcentration(true) - .SetVocalSpellSameType(VocalSpellSemeType.Buff) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Minute, 1) - .SetTargetingData(Side.Ally, RangeType.Touch, 0, TargetType.IndividualsUnique) - .SetEffectForms(EffectFormBuilder.ConditionForm( - ConditionDefinitionBuilder - .Create(ConditionGuided, condition) - .SetGuiPresentation(Category.Condition, ConditionGuided) - .SetSpecialInterruptions(ConditionInterruption.None) - .SetFeatures( - FeatureDefinitionAbilityCheckAffinityBuilder - .Create(AbilityCheckAffinityGuided, affinity) - .SetGuiPresentationNoContent(true) - .BuildAndSetAffinityGroups( - CharacterAbilityCheckAffinity.None, DieType.D4, 1, AbilityCheckGroupOperation.AddDie, - abilityProficiencyPairs: (proficiencypair)) - .AddToDB()) - .AddToDB())) - .SetParticleEffectParameters(Guidance) - .Build()) - .AddToDB()); - } - } - - internal static void SwapOneDndGuidanceSpell() - { - foreach (var spell in GuidanceSubSpells) - { - spell.implemented = false; - } - - if (Main.Settings.SwapOneDndGuidanceSpell) - { - Guidance.spellsBundle = true; - Guidance.SubspellsList.SetRange(GuidanceSubSpells); - Guidance.compactSubspellsTooltip = true; - Guidance.EffectDescription.EffectForms.Clear(); - Guidance.GuiPresentation.description = "Spell/&OneDndGuidanceDescription"; - } - else - { - Guidance.spellsBundle = false; - Guidance.SubspellsList.Clear(); - Guidance.EffectDescription.EffectForms.SetRange(EffectFormBuilder.ConditionForm(ConditionGuided)); - Guidance.GuiPresentation.description = "Spell/&GuidanceDescription"; - } - - } - - internal static void SwitchOneDndWizardSchoolOfMagicLearningLevel() - { - var schools = DatabaseRepository.GetDatabase() - .Where(x => - FeatureDefinitionSubclassChoices.SubclassChoiceWizardArcaneTraditions.Subclasses.Contains(x.Name) || - x.Name.StartsWith(WizardClass)) - .ToList(); - - var fromLevel = 3; - var toLevel = 2; - - if (Main.Settings.EnableWizardToLearnSchoolAtLevel3) - { - fromLevel = 2; - toLevel = 3; - } - - foreach (var featureUnlock in schools - .SelectMany(school => school.FeatureUnlocks - .Where(featureUnlock => featureUnlock.level == fromLevel))) - { - featureUnlock.level = toLevel; - } - - foreach (var featureUnlock in Wizard.FeatureUnlocks.Where(featureUnlock => featureUnlock.level == fromLevel)) - { - featureUnlock.level = toLevel; - } - - foreach (var school in schools) - { - school.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - Wizard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchOneDndPaladinLearnSpellCastingAtOne() - { - var level = Main.Settings.EnablePaladinSpellCastingAtLevel1 ? 1 : 2; - - foreach (var featureUnlock in Paladin.FeatureUnlocks - .Where(x => x.FeatureDefinition == FeatureDefinitionCastSpells.CastSpellPaladin)) - { - featureUnlock.level = level; - } - - // allows back and forth compatibility with EnableRitualOnAllCasters - foreach (var featureUnlock in Paladin.FeatureUnlocks - .Where(x => x.FeatureDefinition == FeatureSetClericRitualCasting)) - { - featureUnlock.level = level; - } - - Paladin.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - - if (Main.Settings.EnablePaladinSpellCastingAtLevel1) - { - FeatureDefinitionCastSpells.CastSpellPaladin.slotsPerLevels = SharedSpellsContext.HalfRoundUpCastingSlots; - SharedSpellsContext.ClassCasterType[PaladinClass] = - FeatureDefinitionCastSpellBuilder.CasterProgression.HalfRoundUp; - } - else - { - FeatureDefinitionCastSpells.CastSpellPaladin.slotsPerLevels = SharedSpellsContext.HalfCastingSlots; - SharedSpellsContext.ClassCasterType[PaladinClass] = - FeatureDefinitionCastSpellBuilder.CasterProgression.Half; - } - } - - internal static void SwitchOneDndRangerLearnSpellCastingAtOne() - { - var level = Main.Settings.EnableRangerSpellCastingAtLevel1 ? 1 : 2; - - foreach (var featureUnlock in Ranger.FeatureUnlocks - .Where(x => x.FeatureDefinition == FeatureDefinitionCastSpells.CastSpellRanger)) - { - featureUnlock.level = level; - } - - // allows back and forth compatibility with EnableRitualOnAllCasters - foreach (var featureUnlock in Ranger.FeatureUnlocks - .Where(x => x.FeatureDefinition == FeatureSetClericRitualCasting)) - { - featureUnlock.level = level; - } - - Ranger.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - - if (Main.Settings.EnableRangerSpellCastingAtLevel1) - { - FeatureDefinitionCastSpells.CastSpellRanger.slotsPerLevels = SharedSpellsContext.HalfRoundUpCastingSlots; - SharedSpellsContext.ClassCasterType[RangerClass] = - FeatureDefinitionCastSpellBuilder.CasterProgression.HalfRoundUp; - } - else - { - FeatureDefinitionCastSpells.CastSpellRanger.slotsPerLevels = SharedSpellsContext.HalfCastingSlots; - SharedSpellsContext.ClassCasterType[RangerClass] = - FeatureDefinitionCastSpellBuilder.CasterProgression.Half; - } - } - - internal static void SwitchOneDndSurprisedEnforceDisadvantage() - { - if (Main.Settings.EnableSurprisedToEnforceDisadvantage) - { - ConditionDefinitions.ConditionSurprised.Features.SetRange(CombatAffinityConditionSurprised); - ConditionDefinitions.ConditionSurprised.GuiPresentation.Description = Gui.NoLocalization; - } - else - { - ConditionDefinitions.ConditionSurprised.Features.SetRange( - FeatureDefinitionActionAffinitys.ActionAffinityConditionSurprised, - FeatureDefinitionMovementAffinitys.MovementAffinityConditionSurprised); - ConditionDefinitions.ConditionSurprised.GuiPresentation.Description = - "Rules/&ConditionSurprisedDescription"; - } - } - - internal static void SwitchOneDndPreparedSpellsTables() - { - if (Main.Settings.EnableOneDnDPreparedSpellsTables) - { - FeatureDefinitionCastSpells.CastSpellBard.knownSpells = - [4, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16, 16, 17, 17, 18, 18, 19, 20, 21, 22]; - FeatureDefinitionCastSpells.CastSpellSorcerer.knownSpells = - [2, 4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 16, 17, 17, 18, 18, 19, 20, 21, 22]; - } - else - { - FeatureDefinitionCastSpells.CastSpellBard.knownSpells = - [4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 15, 16, 18, 19, 19, 20, 22, 22, 22]; - FeatureDefinitionCastSpells.CastSpellSorcerer.knownSpells = - [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15]; - } - } - - internal static void SwitchOneDndPaladinLayOnHandAsBonusAction() - { - PowerPaladinLayOnHands.activationTime = Main.Settings.EnablePaladinLayOnHandsAsBonusAction - ? ActivationTime.BonusAction - : ActivationTime.Action; - } - - internal static void SwitchOneDndEnableBardExpertiseOneLevelBefore() - { - var level = Main.Settings.EnableBardExpertiseOneLevelBefore ? 2 : 3; - - foreach (var featureUnlock in Ranger.FeatureUnlocks - .Where(x => x.FeatureDefinition == FeatureDefinitionPointPools.PointPoolBardExpertiseLevel3)) - { - featureUnlock.level = level; - } - - level = Main.Settings.EnableBardExpertiseOneLevelBefore ? 9 : 10; - - foreach (var featureUnlock in Ranger.FeatureUnlocks - .Where(x => x.FeatureDefinition == FeatureDefinitionPointPools.PointPoolBardExpertiseLevel10)) - { - featureUnlock.level = level; - } - - Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchOneDndChangeBardicInspirationDurationToOneHour() - { - if (Main.Settings.ChangeBardicInspirationDurationToOneHour) - { - ConditionDefinitions.ConditionBardicInspiration.durationType = DurationType.Hour; - ConditionDefinitions.ConditionBardicInspiration.durationParameter = 1; - } - else - { - ConditionDefinitions.ConditionBardicInspiration.durationType = DurationType.Minute; - ConditionDefinitions.ConditionBardicInspiration.durationParameter = 10; - } - } - - internal static void SwitchOneDndRemoveBardSongOfRest() - { - Bard.FeatureUnlocks.RemoveAll(x => - x.FeatureDefinition == RestHealingModifierBardSongOfRest); - - if (!Main.Settings.RemoveBardSongOfRest) - { - Bard.FeatureUnlocks.Add(new FeatureUnlockByLevel(RestHealingModifierBardSongOfRest, 2)); - } - - Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchOneDndRemoveBardMagicalSecretAt14And18() - { - Bard.FeatureUnlocks.RemoveAll(x => - x.FeatureDefinition == FeatureDefinitionPointPools.PointPoolBardMagicalSecrets14 || - x.FeatureDefinition == Level20Context.PointPoolBardMagicalSecrets18); - - if (!Main.Settings.RemoveBardMagicalSecretAt14And18) - { - Bard.FeatureUnlocks.AddRange( - new FeatureUnlockByLevel(FeatureDefinitionPointPools.PointPoolBardMagicalSecrets14, 14), - new FeatureUnlockByLevel(Level20Context.PointPoolBardMagicalSecrets18, 18)); - } - - Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchOneDndEnableBardSuperiorInspirationAtLevel18() - { - if (Main.Settings.RemoveBardMagicalSecretAt14And18) - { - Bard.FeatureUnlocks.Add( - new FeatureUnlockByLevel(Level20Context.FeatureBardSuperiorInspiration2024, 18)); - } - else - { - Bard.FeatureUnlocks.RemoveAll(x => - x.FeatureDefinition == Level20Context.FeatureBardSuperiorInspiration2024); - } - - Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchOneDndEnableBardWordsOfCreationAtLevel20() - { - if (Main.Settings.RemoveBardMagicalSecretAt14And18) - { - Bard.FeatureUnlocks.Add( - new FeatureUnlockByLevel(Level20Context.AutoPreparedSpellsBardWordOfCreation, 20)); - } - else - { - Bard.FeatureUnlocks.RemoveAll(x => - x.FeatureDefinition == Level20Context.AutoPreparedSpellsBardWordOfCreation); - } - - Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchOneDndHealingPotionBonusAction() - { - if (Main.Settings.OneDndHealingPotionBonusAction) - { - PowerFunctionPotionOfHealing.activationTime = ActivationTime.BonusAction; - PowerFunctionPotionOfHealingOther.activationTime = ActivationTime.BonusAction; - PowerFunctionPotionOfGreaterHealing.activationTime = ActivationTime.BonusAction; - PowerFunctionPotionOfGreaterHealingOther.activationTime = ActivationTime.BonusAction; - PowerFunctionPotionOfSuperiorHealing.activationTime = ActivationTime.BonusAction; - PowerFunctionPotionOfSuperiorHealingOther.activationTime = ActivationTime.BonusAction; - PowerFunctionPotionRemedy.activationTime = ActivationTime.BonusAction; - PowerFunctionRemedyOther.activationTime = ActivationTime.BonusAction; - PowerFunctionAntitoxin.activationTime = ActivationTime.BonusAction; - } - else - { - PowerFunctionPotionOfHealing.activationTime = ActivationTime.Action; - PowerFunctionPotionOfHealingOther.activationTime = ActivationTime.Action; - PowerFunctionPotionOfGreaterHealing.activationTime = ActivationTime.Action; - PowerFunctionPotionOfGreaterHealingOther.activationTime = ActivationTime.Action; - PowerFunctionPotionOfSuperiorHealing.activationTime = ActivationTime.Action; - PowerFunctionPotionOfSuperiorHealingOther.activationTime = ActivationTime.Action; - PowerFunctionPotionRemedy.activationTime = ActivationTime.Action; - PowerFunctionRemedyOther.activationTime = ActivationTime.Action; - PowerFunctionAntitoxin.activationTime = ActivationTime.Action; - } - } - - internal static void SwitchOneDndHealingSpellsBuf() - { - var dice = Main.Settings.EnableOneDndHealingSpellsBuf ? 2 : 1; - - // Cure Wounds, Healing Word got buf on base damage and add dice - CureWounds.effectDescription.EffectForms[0].healingForm.diceNumber = dice; - CureWounds.effectDescription.effectAdvancement.additionalDicePerIncrement = dice; - HealingWord.effectDescription.EffectForms[0].healingForm.diceNumber = dice; - HealingWord.effectDescription.effectAdvancement.additionalDicePerIncrement = dice; - - // Mass Cure Wounds and Mass Healing Word only got buf on base damage - MassHealingWord.effectDescription.EffectForms[0].healingForm.diceNumber = dice; - - dice = Main.Settings.EnableOneDndHealingSpellsBuf ? 5 : 3; - - MassCureWounds.effectDescription.EffectForms[0].healingForm.diceNumber = dice; - } - - internal static void SwitchOneDndWizardScholar() - { - if (Main.Settings.EnableWizardToLearnScholarAtLevel2) - { - Wizard.FeatureUnlocks.Add(new FeatureUnlockByLevel(PointPoolWizardScholar, 2)); - } - else - { - Wizard.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PointPoolWizardScholar); - } - - Wizard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchOneDndWarlockMagicalCunningAtLevel2() - { - if (Main.Settings.EnableWarlockMagicalCunningAtLevel2) - { - Warlock.FeatureUnlocks.Add(new FeatureUnlockByLevel(PowerWarlockMagicalCunning, 2)); - } - else - { - Warlock.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PowerWarlockMagicalCunning); - } - - Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchOneDndWarlockInvocationsProgression() - { - if (Main.Settings.SwapWarlockToUseOneDndInvocationProgression) - { - Warlock.FeatureUnlocks.Add(new FeatureUnlockByLevel(PointPoolWarlockInvocation1, 1)); - FeatureDefinitionPointPools.PointPoolWarlockInvocation2.GuiPresentation.Title = - "Feature/&PointPoolWarlockInvocationAdditionalTitle"; - FeatureDefinitionPointPools.PointPoolWarlockInvocation2.GuiPresentation.Description = - "Feature/&PointPoolWarlockInvocationAdditionalDescription"; - FeatureDefinitionPointPools.PointPoolWarlockInvocation5.poolAmount = 2; - } - else - { - Warlock.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PointPoolWarlockInvocation1); - FeatureDefinitionPointPools.PointPoolWarlockInvocation2.GuiPresentation.Title = - "Feature/&PointPoolWarlockInvocationInitialTitle"; - FeatureDefinitionPointPools.PointPoolWarlockInvocation2.GuiPresentation.Description = - "Feature/&PointPoolWarlockInvocationInitialDescription"; - FeatureDefinitionPointPools.PointPoolWarlockInvocation5.poolAmount = 1; - } - - Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - internal static void SwitchFilterOnHideousLaughter() { HideousLaughter.effectDescription.restrictedCreatureFamilies.Clear(); From 6b6154311b72296a78cd97453aa78b2fa2bcf8f3 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 09:16:31 -0800 Subject: [PATCH 43/85] continue models reorg --- .../ChangelogHistory.txt | 20 +- .../Displays/ClassesDisplay.cs | 30 +- .../Displays/GeneralDisplay.cs | 30 +- .../Models/BootContext.cs | 16 +- .../Models/CharacterContext.cs | 113 +- .../Models/CharacterUAContext.cs | 837 +------------- .../Models/OneDndContext.cs | 1005 ++++++++++++++++- 7 files changed, 1022 insertions(+), 1029 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 861f1f8b42..112f45dadc 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,24 +1,6 @@ 1.5.97.37: -- added Character > Classes > 'Add Druid primal order at level 1 and remove medium armor proficiency' [OneDnd] -- added Character > Classes > 'Add persuasion to Fighter skill options at level 1' [OneDnd] -- added Character > Classes > 'Change Bard bardic inspiration duration to 1hr instead of 10 minutes' [OneDnd] -- added Character > Classes > 'Enable Bard Expertise at levels 2 and 9 instead of 3 and 10' [OneDnd] -- added Character > Classes > 'Enable Bard superior inspiration at level 18 instead of 20' [OneDnd] -- added Character > Classes > 'Enable Bard words of creation at level 18' [OneDnd] -- added Character > Classes > 'Enable Sorcerer innate sorcery at level 1' [OneDnd] -- added Character > Classes > 'Enable Warlock magical cunning at level 2' [OneDnd] -- added Character > Classes > 'Remove Bard magical secrets at levels 14 and 18' [OneDnd] -- added Character > Classes > 'Remove Bard song of rest at level 2' [OneDnd] -- added Character > Classes > 'Swap Druid weapon proficiency with 5e 2024 version' [OneDnd] -- added Character > Classes > 'Swap Fighter second wind to use 5e 2024 usages progression' [OneDnd] -- added Character > Classes > 'Swap Monk unarmed strike to use 5e 2024 die type progression' [OneDnd] -- added Character > Classes > 'Swap Warlock invocations progression with 5e 2024 version' [OneDnd] -- added Character > Spells > 'Enable all casters to use new prepared spells tables' [OneDnd] -- added Character > Spells > 'Enable Ritual casting on all casters' [OneDnd] -- added Character > Spells > 'Swap Barkskin with 5e 2024 version' [OneDnd] -- added Character > Subclasses > 'Swap Abjurer abjuration savant with 5e 2024 version' [OneDnd] -- added Character > Subclasses > 'Swap Evoker evocation savant with 5e 2024 version' [OneDnd] +- added many new settings under tabletop 5e 2024 section - added Wizard Abjuration arcane ward recharge bonus action - added Wizard Graviturgist gravity well power toggle - fixed bardic inspiration on attack rolls not stacking with similar behaviors [VANILLA] diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index b905e3512e..78d912025d 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -77,8 +77,8 @@ internal static void DisplayClasses() { Main.Settings.EnableBarbarianBrutalStrike = toggle; Main.Settings.DisableBarbarianBrutalCritical = toggle; - CharacterContext.SwitchBarbarianBrutalStrike(); - CharacterContext.SwitchBarbarianBrutalCritical(); + OneDndContext.SwitchBarbarianBrutalStrike(); + OneDndContext.SwitchBarbarianBrutalCritical(); } if (Main.Settings.EnableBarbarianBrutalStrike) @@ -87,7 +87,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&DisableBarbarianBrutalCritical"), ref toggle, UI.AutoWidth())) { Main.Settings.DisableBarbarianBrutalCritical = toggle; - CharacterContext.SwitchBarbarianBrutalCritical(); + OneDndContext.SwitchBarbarianBrutalCritical(); } } @@ -102,14 +102,14 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBarbarianRecklessSameBuffDebuffDuration = toggle; - CharacterContext.SwitchBarbarianRecklessSameBuffDebuffDuration(); + OneDndContext.SwitchBarbarianRecklessSameBuffDebuffDuration(); } toggle = Main.Settings.EnableBarbarianRegainOneRageAtShortRest; if (UI.Toggle(Gui.Localize("ModUi/&EnableBarbarianRegainOneRageAtShortRest"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBarbarianRegainOneRageAtShortRest = toggle; - CharacterContext.SwitchBarbarianRegainOneRageAtShortRest(); + OneDndContext.SwitchBarbarianRegainOneRageAtShortRest(); } UI.Label(); @@ -146,14 +146,14 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&AddFighterLevelToIndomitableSavingReroll"), ref toggle, UI.AutoWidth())) { Main.Settings.AddFighterLevelToIndomitableSavingReroll = toggle; - CharacterContext.SwitchFighterLevelToIndomitableSavingReroll(); + OneDndContext.SwitchFighterLevelToIndomitableSavingReroll(); } toggle = Main.Settings.AddPersuasionToFighterSkillOptions; if (UI.Toggle(Gui.Localize("ModUi/&AddPersuasionToFighterSkillOptions"), ref toggle, UI.AutoWidth())) { Main.Settings.AddPersuasionToFighterSkillOptions = toggle; - CharacterContext.SwitchPersuasionToFighterSkillOptions(); + OneDndContext.SwitchPersuasionToFighterSkillOptions(); } toggle = Main.Settings.EnableFighterWeaponSpecialization; @@ -185,7 +185,7 @@ internal static void DisplayClasses() UI.AutoWidth())) { Main.Settings.EnableMonkBodyAndMindToReplacePerfectSelf = toggle; - CharacterContext.SwitchMonkBodyAndMindToReplacePerfectSelf(); + OneDndContext.SwitchMonkBodyAndMindToReplacePerfectSelf(); } toggle = Main.Settings.EnableMonkFightingStyle; @@ -199,7 +199,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableMonkDoNotRequireAttackActionForFlurry"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableMonkDoNotRequireAttackActionForFlurry = toggle; - CharacterContext.SwitchMonkDoNotRequireAttackActionForFlurry(); + OneDndContext.SwitchMonkDoNotRequireAttackActionForFlurry(); } toggle = Main.Settings.EnableMonkHandwrapsUseGauntletSlot; @@ -215,7 +215,7 @@ internal static void DisplayClasses() UI.AutoWidth())) { Main.Settings.EnableMonkHeightenedMetabolism = toggle; - CharacterContext.SwitchMonkHeightenedMetabolism(); + OneDndContext.SwitchMonkHeightenedMetabolism(); } toggle = Main.Settings.EnableMonkImprovedUnarmoredMovementToMoveOnTheWall; @@ -231,7 +231,7 @@ internal static void DisplayClasses() UI.AutoWidth())) { Main.Settings.EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack = toggle; - CharacterContext.SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack(); + OneDndContext.SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack(); } toggle = Main.Settings.EnableMonkSuperiorDefenseToReplaceEmptyBody; @@ -239,7 +239,7 @@ internal static void DisplayClasses() UI.AutoWidth())) { Main.Settings.EnableMonkSuperiorDefenseToReplaceEmptyBody = toggle; - CharacterContext.SwitchMonkSuperiorDefenseToReplaceEmptyBody(); + OneDndContext.SwitchMonkSuperiorDefenseToReplaceEmptyBody(); } toggle = Main.Settings.EnableMonkWeaponSpecialization; @@ -253,7 +253,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapMonkToUseOneDndUnarmedDieTypeProgression = toggle; - CharacterContext.SwitchOneDndMonkUnarmedDieTypeProgression(); + OneDndContext.SwitchOneDndMonkUnarmedDieTypeProgression(); } UI.Label(); @@ -307,7 +307,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableRangerNatureShroudAt14"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRangerNatureShroudAt14 = toggle; - CharacterContext.SwitchRangerNatureShroud(); + OneDndContext.SwitchRangerNatureShroud(); } toggle = Main.Settings.EnableRangerSpellCastingAtLevel1; @@ -357,7 +357,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcererInnateSorcery"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableSorcererInnateSorcery = toggle; - CharacterContext.SwitchSorcererInnateSorcery(); + OneDndContext.SwitchSorcererInnateSorcery(); } toggle = Main.Settings.EnableSorcererMagicalGuidance; diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index cce236590e..9f96b618b6 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -304,8 +304,8 @@ private static void DisplayOneDnd() { Main.Settings.EnableBarbarianBrutalStrike = toggle; Main.Settings.DisableBarbarianBrutalCritical = toggle; - CharacterContext.SwitchBarbarianBrutalStrike(); - CharacterContext.SwitchBarbarianBrutalCritical(); + OneDndContext.SwitchBarbarianBrutalStrike(); + OneDndContext.SwitchBarbarianBrutalCritical(); } if (Main.Settings.EnableBarbarianBrutalStrike) @@ -314,7 +314,7 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&DisableBarbarianBrutalCritical"), ref toggle, UI.AutoWidth())) { Main.Settings.DisableBarbarianBrutalCritical = toggle; - CharacterContext.SwitchBarbarianBrutalCritical(); + OneDndContext.SwitchBarbarianBrutalCritical(); } } @@ -322,14 +322,14 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBarbarianRecklessSameBuffDebuffDuration = toggle; - CharacterContext.SwitchBarbarianRecklessSameBuffDebuffDuration(); + OneDndContext.SwitchBarbarianRecklessSameBuffDebuffDuration(); } toggle = Main.Settings.EnableBarbarianRegainOneRageAtShortRest; if (UI.Toggle(Gui.Localize("ModUi/&EnableBarbarianRegainOneRageAtShortRest"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBarbarianRegainOneRageAtShortRest = toggle; - CharacterContext.SwitchBarbarianRegainOneRageAtShortRest(); + OneDndContext.SwitchBarbarianRegainOneRageAtShortRest(); } UI.Label(); @@ -366,14 +366,14 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&AddFighterLevelToIndomitableSavingReroll"), ref toggle, UI.AutoWidth())) { Main.Settings.AddFighterLevelToIndomitableSavingReroll = toggle; - CharacterContext.SwitchFighterLevelToIndomitableSavingReroll(); + OneDndContext.SwitchFighterLevelToIndomitableSavingReroll(); } toggle = Main.Settings.AddPersuasionToFighterSkillOptions; if (UI.Toggle(Gui.Localize("ModUi/&AddPersuasionToFighterSkillOptions"), ref toggle, UI.AutoWidth())) { Main.Settings.AddPersuasionToFighterSkillOptions = toggle; - CharacterContext.SwitchPersuasionToFighterSkillOptions(); + OneDndContext.SwitchPersuasionToFighterSkillOptions(); } toggle = Main.Settings.SwapSecondWindToUseOneDndUsagesProgression; @@ -391,14 +391,14 @@ private static void DisplayOneDnd() UI.AutoWidth())) { Main.Settings.EnableMonkBodyAndMindToReplacePerfectSelf = toggle; - CharacterContext.SwitchMonkBodyAndMindToReplacePerfectSelf(); + OneDndContext.SwitchMonkBodyAndMindToReplacePerfectSelf(); } toggle = Main.Settings.EnableMonkDoNotRequireAttackActionForFlurry; if (UI.Toggle(Gui.Localize("ModUi/&EnableMonkDoNotRequireAttackActionForFlurry"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableMonkDoNotRequireAttackActionForFlurry = toggle; - CharacterContext.SwitchMonkDoNotRequireAttackActionForFlurry(); + OneDndContext.SwitchMonkDoNotRequireAttackActionForFlurry(); } toggle = Main.Settings.EnableMonkHeightenedMetabolism; @@ -406,7 +406,7 @@ private static void DisplayOneDnd() UI.AutoWidth())) { Main.Settings.EnableMonkHeightenedMetabolism = toggle; - CharacterContext.SwitchMonkHeightenedMetabolism(); + OneDndContext.SwitchMonkHeightenedMetabolism(); } toggle = Main.Settings.EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack; @@ -414,7 +414,7 @@ private static void DisplayOneDnd() UI.AutoWidth())) { Main.Settings.EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack = toggle; - CharacterContext.SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack(); + OneDndContext.SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack(); } toggle = Main.Settings.EnableMonkSuperiorDefenseToReplaceEmptyBody; @@ -422,14 +422,14 @@ private static void DisplayOneDnd() UI.AutoWidth())) { Main.Settings.EnableMonkSuperiorDefenseToReplaceEmptyBody = toggle; - CharacterContext.SwitchMonkSuperiorDefenseToReplaceEmptyBody(); + OneDndContext.SwitchMonkSuperiorDefenseToReplaceEmptyBody(); } toggle = Main.Settings.SwapMonkToUseOneDndUnarmedDieTypeProgression; if (UI.Toggle(Gui.Localize("ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapMonkToUseOneDndUnarmedDieTypeProgression = toggle; - CharacterContext.SwitchOneDndMonkUnarmedDieTypeProgression(); + OneDndContext.SwitchOneDndMonkUnarmedDieTypeProgression(); } UI.Label(); @@ -464,7 +464,7 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableRangerNatureShroudAt14"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRangerNatureShroudAt14 = toggle; - CharacterContext.SwitchRangerNatureShroud(); + OneDndContext.SwitchRangerNatureShroud(); } toggle = Main.Settings.EnableRangerSpellCastingAtLevel1; @@ -507,7 +507,7 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcererInnateSorcery"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableSorcererInnateSorcery = toggle; - CharacterContext.SwitchSorcererInnateSorcery(); + OneDndContext.SwitchSorcererInnateSorcery(); } UI.Label(); diff --git a/SolastaUnfinishedBusiness/Models/BootContext.cs b/SolastaUnfinishedBusiness/Models/BootContext.cs index 05d3e57750..8fbd8bc9bb 100644 --- a/SolastaUnfinishedBusiness/Models/BootContext.cs +++ b/SolastaUnfinishedBusiness/Models/BootContext.cs @@ -51,11 +51,6 @@ internal static void Startup() CustomWeaponsContext.Load(); CustomItemsContext.Load(); PowerBundleContext.Load(); - - // - // other stuff that can be loaded in any order - // - ToolsContext.Load(); CharacterExportContext.Load(); DmProEditorContext.Load(); @@ -120,17 +115,19 @@ internal static void Startup() // Set anything on subs that depends on spells and others SrdAndHouseRulesContext.LateLoad(); + OneDndContext.LateLoad(); + SubclassesContext.LateLoad(); InventorClass.LateLoadSpellStoringItem(); LightingAndObscurementContext.LateLoad(); GrappleContext.LateLoad(); - // Save by location initialization depends on services to be ready - SaveByLocationContext.LateLoad(); - // Spell Points should load closer to the bottom after all other blueprints initiated SpellPointsContext.LateLoad(); + // Save by location initialization depends on services to be ready + SaveByLocationContext.LateLoad(); + // Recache all gui collections GuiWrapperContext.Recache(); @@ -141,13 +138,12 @@ internal static void Startup() DocumentationContext.DumpDocumentation(); ModUi.LoadTabletopDefinitions(); - AddExtraTooltipDefinitions(); - // Manages update or welcome messages UpdateContext.Load(); // Log invalid user campaign LogMissingReferencesInUserCampaigns(); + AddExtraTooltipDefinitions(); // Fix condition UI DatabaseHelper.FeatureDefinitionCombatAffinitys.CombatAffinityForeknowledge.GuiPresentation.Description = diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index 10c0090b22..f422e506dc 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -173,45 +173,6 @@ internal static partial class CharacterContext .Build()) .AddToDB(); - private static readonly FeatureDefinitionPower FeatureDefinitionPowerNatureShroud = FeatureDefinitionPowerBuilder - .Create("PowerRangerNatureShroud") - .SetGuiPresentation(Category.Feature, Invisibility) - .SetUsesAbilityBonus(ActivationTime.BonusAction, RechargeRate.LongRest, AttributeDefinitions.Wisdom) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) - .SetDurationData(DurationType.Round, 0, TurnOccurenceType.StartOfTurn) - .SetEffectForms(EffectFormBuilder.ConditionForm(ConditionDefinitions.ConditionInvisible)) - .SetParticleEffectParameters(PowerDruidCircleBalanceBalanceOfPower) - .Build()) - .AddToDB(); - - private static readonly FeatureDefinitionPower PowerSorcererInnateSorcery = FeatureDefinitionPowerBuilder - .Create("PowerSorcererInnateSorcery") - .SetGuiPresentation(Category.Feature, PowerTraditionShockArcanistGreaterArcaneShock) - .SetUsesFixed(ActivationTime.BonusAction, RechargeRate.LongRest, 1, 2) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Minute, 1) - .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) - .SetEffectForms(EffectFormBuilder.ConditionForm( - ConditionDefinitionBuilder - .Create("ConditionSorcererInnateSorcery") - .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionConjuredCreature) - .SetFeatures( - FeatureDefinitionMagicAffinityBuilder - .Create("MagicAffinitySorcererInnateSorcery") - .SetGuiPresentation("PowerSorcererInnateSorcery", Category.Feature) - .SetCastingModifiers(0, SpellParamsModifierType.None, 1) - .AddToDB()) - .AddCustomSubFeatures(new ModifyAttackActionModifierInnateSorcery()) - .AddToDB())) - .SetParticleEffectParameters(Shield) - .Build()) - .AddToDB(); - private static int PreviousTotalFeatsGrantedFirstLevel { get; set; } = -1; private static bool PreviousAlternateHuman { get; set; } @@ -224,50 +185,35 @@ internal static void LateLoad() LoadAdditionalNames(); LoadEpicArray(); LoadFeatsPointPools(); - LoadMonkHeightenedMetabolism(); LoadMonkWeaponSpecialization(); LoadSorcererQuickened(); LoadVision(); LoadVisuals(); LoadSecondWindToUseOneDndUsagesProgression(); - BuildBarbarianBrutalStrike(); BuildRogueCunningStrike(); SwitchAsiAndFeat(); - SwitchBarbarianBrutalStrike(); - SwitchBarbarianBrutalCritical(); - SwitchBarbarianRecklessSameBuffDebuffDuration(); - SwitchBarbarianRegainOneRageAtShortRest(); SwitchBarbarianFightingStyle(); SwitchDarknessPerceptive(); SwitchDragonbornElementalBreathUsages(); SwitchDruidKindredBeastToUseCustomInvocationPools(); SwitchEveryFourLevelsFeats(); SwitchEveryFourLevelsFeats(true); - SwitchPersuasionToFighterSkillOptions(); - SwitchFighterLevelToIndomitableSavingReroll(); SwitchFighterWeaponSpecialization(); SwitchFirstLevelTotalFeats(); SwitchProneAction(); SwitchHelpPower(); - SwitchOneDndMonkUnarmedDieTypeProgression(); SwitchMonkAbundantKi(); SwitchMonkFightingStyle(); - SwitchMonkDoNotRequireAttackActionForFlurry(); SwitchMonkImprovedUnarmoredMovementToMoveOnTheWall(); - SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack(); - SwitchMonkHeightenedMetabolism(); - SwitchMonkSuperiorDefenseToReplaceEmptyBody(); - SwitchMonkBodyAndMindToReplacePerfectSelf(); SwitchMonkWeaponSpecialization(); SwitchPathOfTheElementsElementalFuryToUseCustomInvocationPools(); SwitchRangerHumanoidFavoredEnemy(); - SwitchRangerNatureShroud(); SwitchRangerToUseCustomInvocationPools(); SwitchRogueCunningStrike(); SwitchRogueFightingStyle(); SwitchRogueSteadyAim(); SwitchRogueStrSaving(); - SwitchSorcererInnateSorcery(); + SwitchSorcererMagicalGuidance(); SwitchScimitarWeaponSpecialization(); SwitchBardHealingBalladOnLongRest(); @@ -687,26 +633,6 @@ bool ShouldBe2Points() } } - internal static void SwitchFighterLevelToIndomitableSavingReroll() - { - UseIndomitableResistance.GuiPresentation.description = - Main.Settings.AddFighterLevelToIndomitableSavingReroll - ? "Feature/&EnhancedIndomitableResistanceDescription" - : "Feature/&IndomitableResistanceDescription"; - } - - internal static void SwitchPersuasionToFighterSkillOptions() - { - if (Main.Settings.AddPersuasionToFighterSkillOptions) - { - PointPoolFighterSkillPoints.restrictedChoices.TryAdd(SkillDefinitions.Persuasion); - } - else - { - PointPoolFighterSkillPoints.restrictedChoices.Remove(SkillDefinitions.Persuasion); - } - } - private static void LoadSecondWindToUseOneDndUsagesProgression() { PowerFighterSecondWind.AddCustomSubFeatures( @@ -991,21 +917,6 @@ private static void SwitchRangerToUseCustomInvocationPools() rangerSurvivalist.FeatureUnlocks.SetRange(replacedFeatures); } - internal static void SwitchSorcererInnateSorcery() - { - if (Main.Settings.EnableSorcererInnateSorcery) - { - Sorcerer.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(PowerSorcererInnateSorcery, 1)); - } - else - { - Sorcerer.FeatureUnlocks.RemoveAll(x => - x.level == 1 && x.FeatureDefinition == PowerSorcererInnateSorcery); - } - - Sorcerer.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - internal static void SwitchSorcererMagicalGuidance() { if (Main.Settings.EnableSorcererMagicalGuidance) @@ -1264,28 +1175,6 @@ private static bool IsSubRace(CharacterRaceDefinition raceDefinition) .Any(crd => crd.SubRaces.Contains(raceDefinition)); } - private sealed class ModifyAttackActionModifierInnateSorcery : IModifyAttackActionModifier - { - private readonly TrendInfo _trendInfo = - new(1, FeatureSourceType.CharacterFeature, "PowerSorcererInnateSorcery", null); - - public void OnAttackComputeModifier( - RulesetCharacter myself, - RulesetCharacter defender, - BattleDefinitions.AttackProximity attackProximity, - RulesetAttackMode attackMode, - string effectName, - ref ActionModifier attackModifier) - { - if (attackProximity is not - (BattleDefinitions.AttackProximity.MagicRange or BattleDefinitions.AttackProximity.MagicReach)) - { - return; - } - - attackModifier.AttackAdvantageTrends.Add(_trendInfo); - } - } private sealed class TryAlterOutcomeAttributeCheckSorcererMagicalGuidance : ITryAlterOutcomeAttributeCheck { diff --git a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs index b4b176366c..ee9453ed77 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs @@ -2,9 +2,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; -using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; -using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Behaviors.Specific; using SolastaUnfinishedBusiness.Builders; @@ -18,12 +16,9 @@ using UnityEngine.AddressableAssets; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ActionDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionActionAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionAttackModifiers; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionAttributeModifiers; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionDamageAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionFeatureSets; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionMovementAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; @@ -108,613 +103,47 @@ internal static partial class CharacterContext #region Barbarian - private const string BrutalStrike = "BarbarianBrutalStrike"; - - private static ConditionDefinition _conditionBrutalStrike; - private static ConditionDefinition _conditionHamstringBlow; - private static ConditionDefinition _conditionStaggeringBlow; - private static ConditionDefinition _conditionStaggeringBlowAoO; - private static ConditionDefinition _conditionSunderingBlow; - private static FeatureDefinitionFeatureSet _featureSetBarbarianBrutalStrike; - private static FeatureDefinitionFeatureSet _featureSetBarbarianBrutalStrikeImprovement13; - private static FeatureDefinitionFeatureSet _featureSetBarbarianBrutalStrikeImprovement17; - - private static void BuildBarbarianBrutalStrike() - { - const string BrutalStrikeImprovement13 = "BarbarianBrutalStrikeImprovement13"; - const string BrutalStrikeImprovement17 = "BarbarianBrutalStrikeImprovement17"; - - var additionalDamageBrutalStrike = - FeatureDefinitionAdditionalDamageBuilder - .Create("AdditionalDamageBrutalStrike") - .SetGuiPresentationNoContent(true) - .SetNotificationTag("BrutalStrike") - .SetDamageDice(DieType.D10, 1) - .SetAdvancement(AdditionalDamageAdvancement.ClassLevel, 1, 1, 8, 9) - .SetRequiredProperty(RestrictedContextRequiredProperty.Weapon) - .AddCustomSubFeatures( - ClassHolder.Barbarian, - new ValidateContextInsteadOfRestrictedProperty((_, _, character, _, _, _, _) => (OperationType.Set, - character.IsToggleEnabled((ActionDefinitions.Id)ExtraActionId.BrutalStrikeToggle)))) - .AddToDB(); - - _conditionBrutalStrike = ConditionDefinitionBuilder - .Create($"Condition{BrutalStrike}") - .SetGuiPresentationNoContent(true) - .SetSilent(Silent.WhenAddedOrRemoved) - .SetFeatures(additionalDamageBrutalStrike) - .SetSpecialInterruptions(ConditionInterruption.Attacks) - .AddToDB(); - - var powerPool = FeatureDefinitionPowerBuilder - .Create($"Power{BrutalStrike}") - .SetGuiPresentation(Category.Feature) - .SetUsesFixed(ActivationTime.NoCost) - .SetShowCasting(false) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Round, 1) - .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.Individuals) - .Build()) - .AddToDB(); - - powerPool.AddCustomSubFeatures( - ModifyPowerVisibility.Hidden, new CustomBehaviorBrutalStrike(powerPool)); - - // Forceful Blow - - var powerForcefulBlow = FeatureDefinitionPowerSharedPoolBuilder - .Create($"Power{BrutalStrike}ForcefulBlow") - .SetGuiPresentation(Category.Feature) - .SetSharedPool(ActivationTime.NoCost, powerPool) - .SetShowCasting(false) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) - .AddToDB(); - - // Hamstring Blow - - var powerHamstringBlow = FeatureDefinitionPowerSharedPoolBuilder - .Create($"Power{BrutalStrike}HamstringBlow") - .SetGuiPresentation(Category.Feature) - .SetSharedPool(ActivationTime.NoCost, powerPool) - .SetShowCasting(false) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) - .AddToDB(); - - _conditionHamstringBlow = ConditionDefinitionBuilder - .Create("ConditionHamstringBlow") - .SetGuiPresentation($"Power{BrutalStrike}HamstringBlow", Category.Feature, - ConditionDefinitions.ConditionHindered) - .SetPossessive() - .SetConditionType(ConditionType.Detrimental) - .SetFeatures( - FeatureDefinitionMovementAffinityBuilder - .Create("MovementAffinityHamstringBlow") - .SetGuiPresentation($"Power{BrutalStrike}HamstringBlow", Category.Feature, Gui.NoLocalization) - .SetBaseSpeedAdditiveModifier(-3) - .AddToDB()) - .CopyParticleReferences(ConditionDefinitions.ConditionSlowed) - .AddToDB(); - - _conditionHamstringBlow.GuiPresentation.description = Gui.EmptyContent; - - // Staggering Blow - - var powerStaggeringBlow = FeatureDefinitionPowerSharedPoolBuilder - .Create($"Power{BrutalStrike}StaggeringBlow") - .SetGuiPresentation(Category.Feature) - .SetSharedPool(ActivationTime.NoCost, powerPool) - .SetShowCasting(false) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) - .AddToDB(); - - _conditionStaggeringBlow = ConditionDefinitionBuilder - .Create("ConditionStaggeringBlow") - .SetGuiPresentation($"Power{BrutalStrike}StaggeringBlow", Category.Feature, - ConditionDefinitions.ConditionDazzled) - .SetSilent(Silent.WhenRemoved) - .SetPossessive() - .SetConditionType(ConditionType.Detrimental) - .SetFeatures( - FeatureDefinitionSavingThrowAffinityBuilder - .Create("SavingThrowAffinityStaggeringBlow") - .SetGuiPresentation($"Power{BrutalStrike}StaggeringBlow", Category.Feature, Gui.NoLocalization) - .SetAffinities(CharacterSavingThrowAffinity.Disadvantage, false, - AttributeDefinitions.AbilityScoreNames) - .AddToDB()) - .AddSpecialInterruptions(ConditionInterruption.SavingThrow) - .CopyParticleReferences(ConditionDefinitions.ConditionDazzled) - .AddToDB(); - - _conditionStaggeringBlow.GuiPresentation.description = Gui.EmptyContent; - - _conditionStaggeringBlowAoO = ConditionDefinitionBuilder - .Create("ConditionStaggeringBlowAoO") - .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionDazzled) - .SetSilent(Silent.WhenAdded) - .SetPossessive() - .SetConditionType(ConditionType.Detrimental) - .SetFeatures(SrdAndHouseRulesContext.ActionAffinityConditionBlind) - .AddToDB(); - - // Sundering Blow - - var additionalDamageSunderingBlow = FeatureDefinitionAdditionalDamageBuilder - .Create($"AdditionalDamage{BrutalStrike}SunderingBlow") - .SetGuiPresentationNoContent(true) - .SetNotificationTag("SunderingBlow") - .SetDamageDice(DieType.D10, 1) - .AddToDB(); - - var conditionSunderingBlowAlly = ConditionDefinitionBuilder - .Create("ConditionSunderingBlowAlly") - .SetGuiPresentationNoContent(true) - .SetSilent(Silent.WhenAddedOrRemoved) - .SetFeatures(additionalDamageSunderingBlow) - .SetSpecialInterruptions(ConditionInterruption.Attacks) - .AddToDB(); - - var powerSunderingBlow = FeatureDefinitionPowerSharedPoolBuilder - .Create($"Power{BrutalStrike}SunderingBlow") - .SetGuiPresentation(Category.Feature) - .SetSharedPool(ActivationTime.NoCost, powerPool) - .SetShowCasting(false) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) - .AddToDB(); - - _conditionSunderingBlow = ConditionDefinitionBuilder - .Create("ConditionSunderingBlow") - .SetGuiPresentation($"Power{BrutalStrike}SunderingBlow", Category.Feature, - ConditionDefinitions.ConditionTargetedByGuidingBolt) - .SetPossessive() - .SetConditionType(ConditionType.Detrimental) - .AddCustomSubFeatures(new CustomBehaviorSunderingBlow(powerSunderingBlow, conditionSunderingBlowAlly)) - .SetSpecialInterruptions(ExtraConditionInterruption.AfterWasAttackedNotBySource) - .CopyParticleReferences(ConditionDefinitions.ConditionLeadByExampleMarked) - .AddToDB(); - - // MAIN - - PowerBundle.RegisterPowerBundle(powerPool, true, - powerForcefulBlow, powerHamstringBlow, powerStaggeringBlow, powerSunderingBlow); - - var actionAffinityToggle = FeatureDefinitionActionAffinityBuilder - .Create(ActionAffinitySorcererMetamagicToggle, "ActionAffinityBrutalStrikeToggle") - .SetGuiPresentationNoContent(true) - .SetAuthorizedActions((ActionDefinitions.Id)ExtraActionId.BrutalStrikeToggle) - .AddToDB(); - - _featureSetBarbarianBrutalStrike = FeatureDefinitionFeatureSetBuilder - .Create($"FeatureSet{BrutalStrike}") - .SetGuiPresentation(Category.Feature) - .AddFeatureSet(powerPool, actionAffinityToggle, powerForcefulBlow, powerHamstringBlow) - .AddToDB(); - - _featureSetBarbarianBrutalStrikeImprovement13 = FeatureDefinitionFeatureSetBuilder - .Create($"FeatureSet{BrutalStrikeImprovement13}") - .SetGuiPresentation(Category.Feature) - .AddFeatureSet(powerStaggeringBlow, powerSunderingBlow) - .AddToDB(); - - _featureSetBarbarianBrutalStrikeImprovement17 = FeatureDefinitionFeatureSetBuilder - .Create($"FeatureSet{BrutalStrikeImprovement17}") - .SetGuiPresentation(Category.Feature) - .AddToDB(); - } - - private sealed class CustomBehaviorBrutalStrike(FeatureDefinitionPower powerBarbarianBrutalStrike) - : IPhysicalAttackBeforeHitConfirmedOnEnemy, IPhysicalAttackFinishedByMe - { - private static readonly EffectForm ForcefulBlowForm = EffectFormBuilder - .Create() - .SetMotionForm(MotionForm.MotionType.PushFromOrigin, 3) - .Build(); - - public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( - GameLocationBattleManager battleManager, - GameLocationCharacter attacker, - GameLocationCharacter defender, - ActionModifier actionModifier, - RulesetAttackMode attackMode, - bool rangedAttack, - AdvantageType advantageType, - List actualEffectForms, - bool firstTarget, - bool criticalHit) - { - var rulesetAttacker = attacker.RulesetCharacter; - - if (!attacker.OnceInMyTurnIsValid(BrutalStrike) || - !rulesetAttacker.IsToggleEnabled((ActionDefinitions.Id)ExtraActionId.BrutalStrikeToggle) || - !rulesetAttacker.HasConditionOfCategoryAndType( - AttributeDefinitions.TagCombat, ConditionDefinitions.ConditionReckless.Name)) - { - yield break; - } - - rulesetAttacker.InflictCondition( - _conditionBrutalStrike.Name, - DurationType.Round, - 0, - TurnOccurenceType.StartOfTurn, - AttributeDefinitions.TagEffect, - rulesetAttacker.guid, - rulesetAttacker.CurrentFaction.Name, - 1, - _conditionBrutalStrike.Name, - 0, - 0, - 0); - - var usablePower = PowerProvider.Get(powerBarbarianBrutalStrike, rulesetAttacker); - - yield return attacker.MyReactToSpendPowerBundle( - usablePower, - [defender], - attacker, - powerBarbarianBrutalStrike.Name, - reactionValidated: ReactionValidated, - battleManager: battleManager); - - yield break; - - void ReactionValidated(ReactionRequestSpendBundlePower reactionRequest) - { - // determine selected power to collect cost - var option = reactionRequest.SelectedSubOption; - var subPowers = powerBarbarianBrutalStrike.GetBundle()?.SubPowers; - - if (subPowers == null) - { - return; - } - - var selectedPower = subPowers[option]; - - switch (selectedPower.Name) - { - case $"Power{BrutalStrike}ForcefulBlow": - actualEffectForms.Add(ForcefulBlowForm); - break; - case $"Power{BrutalStrike}HamstringBlow": - InflictCondition(rulesetAttacker, defender.RulesetCharacter, _conditionHamstringBlow.Name); - break; - case $"Power{BrutalStrike}StaggeringBlow": - InflictCondition(rulesetAttacker, defender.RulesetCharacter, _conditionStaggeringBlow.Name); - InflictCondition(rulesetAttacker, defender.RulesetCharacter, _conditionStaggeringBlowAoO.Name); - break; - case $"Power{BrutalStrike}SunderingBlow": - InflictCondition(rulesetAttacker, defender.RulesetCharacter, _conditionSunderingBlow.Name); - break; - } - } - } - - public IEnumerator OnPhysicalAttackFinishedByMe(GameLocationBattleManager battleManager, CharacterAction action, - GameLocationCharacter attacker, GameLocationCharacter defender, RulesetAttackMode attackMode, - RollOutcome rollOutcome, int damageAmount) - { - var rulesetAttacker = attacker.RulesetCharacter; - - if (!rulesetAttacker.IsToggleEnabled((ActionDefinitions.Id)ExtraActionId.BrutalStrikeToggle) || - !rulesetAttacker.HasConditionOfCategoryAndType( - AttributeDefinitions.TagCombat, ConditionDefinitions.ConditionReckless.Name)) - { - yield break; - } - - attacker.UsedSpecialFeatures.TryAdd(BrutalStrike, 0); - } - - private static void InflictCondition( - RulesetCharacter rulesetAttacker, RulesetCharacter rulesetDefender, string conditionName) - { - rulesetDefender.InflictCondition( - conditionName, - DurationType.Round, - 1, - (TurnOccurenceType)ExtraTurnOccurenceType.StartOfSourceTurn, - AttributeDefinitions.TagEffect, - rulesetAttacker.guid, - rulesetAttacker.CurrentFaction.Name, - 1, - conditionName, - 0, - 0, - 0); - } - } - - private sealed class CustomBehaviorSunderingBlow( - FeatureDefinitionPower powerSunderingBlow, - ConditionDefinition conditionSunderingBlowAlly) : IPhysicalAttackInitiatedOnMe, IMagicEffectAttackInitiatedOnMe - { - public IEnumerator OnMagicEffectAttackInitiatedOnMe( - CharacterActionMagicEffect action, - RulesetEffect activeEffect, - GameLocationCharacter attacker, - GameLocationCharacter defender, - ActionModifier attackModifier, - bool firstTarget, - bool checkMagicalAttackDamage) - { - var damageType = activeEffect.EffectDescription.FindFirstDamageForm()?.DamageType; - var rulesetAttacker = attacker.RulesetCharacter; - - if (damageType == null || - rulesetAttacker == null || - rulesetAttacker is RulesetCharacterEffectProxy) - { - yield break; - } - - AddBonusAttackAndDamageRoll(attacker.RulesetCharacter, defender.RulesetActor, attackModifier); - } - - public IEnumerator OnPhysicalAttackInitiatedOnMe( - GameLocationBattleManager battleManager, - CharacterAction action, - GameLocationCharacter attacker, - GameLocationCharacter defender, - ActionModifier attackModifier, - RulesetAttackMode attackMode) - { - var damageType = attackMode.EffectDescription.FindFirstDamageForm()?.DamageType; - var rulesetAttacker = attacker.RulesetCharacter; - - if (damageType == null || - rulesetAttacker == null || - rulesetAttacker is RulesetCharacterEffectProxy) - { - yield break; - } - - AddBonusAttackAndDamageRoll(attacker.RulesetCharacter, defender.RulesetActor, attackModifier); - } - - private void AddBonusAttackAndDamageRoll( - RulesetCharacter rulesetAttacker, - RulesetActor rulesetDefender, - ActionModifier actionModifier) - { - if (!rulesetDefender.TryGetConditionOfCategoryAndType( - AttributeDefinitions.TagEffect, _conditionSunderingBlow.Name, out var activeCondition)) - { - return; - } - - var rulesetSource = EffectHelpers.GetCharacterByGuid(activeCondition.SourceGuid); - - if (rulesetAttacker == rulesetSource) - { - return; - } - - rulesetDefender.RemoveCondition(activeCondition); - - var bonusAttackRoll = - rulesetAttacker.RollDie(DieType.D10, RollContext.None, false, AdvantageType.None, out _, out _); - - actionModifier.AttackRollModifier += bonusAttackRoll; - actionModifier.AttacktoHitTrends.Add(new TrendInfo( - bonusAttackRoll, FeatureSourceType.CharacterFeature, powerSunderingBlow.Name, powerSunderingBlow)); - - rulesetAttacker.InflictCondition( - conditionSunderingBlowAlly.Name, - DurationType.Round, - 0, - TurnOccurenceType.EndOfTurn, - AttributeDefinitions.TagEffect, - rulesetAttacker.guid, - FactionDefinitions.Party.Name, - 1, - conditionSunderingBlowAlly.Name, - 0, - 0, - 0); - } - } - - internal static void SwitchBarbarianBrutalStrike() + internal static void SwitchBarbarianFightingStyle() { - if (Main.Settings.EnableBarbarianBrutalStrike) + if (Main.Settings.EnableBarbarianFightingStyle) { Barbarian.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(_featureSetBarbarianBrutalStrike, 9)); - Barbarian.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(_featureSetBarbarianBrutalStrikeImprovement13, 13)); - Barbarian.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(_featureSetBarbarianBrutalStrikeImprovement17, 17)); + new FeatureUnlockByLevel(FightingStyleChoiceBarbarian, 2)); } else { Barbarian.FeatureUnlocks.RemoveAll(x => - x.level == 9 && x.FeatureDefinition == _featureSetBarbarianBrutalStrike); - Barbarian.FeatureUnlocks.RemoveAll(x => - x.level == 13 && x.FeatureDefinition == _featureSetBarbarianBrutalStrikeImprovement13); - Barbarian.FeatureUnlocks.RemoveAll(x => - x.level == 17 && x.FeatureDefinition == _featureSetBarbarianBrutalStrikeImprovement17); - } - - Barbarian.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchBarbarianBrutalCritical() - { - if (Main.Settings.DisableBarbarianBrutalCritical) - { - Barbarian.FeatureUnlocks.RemoveAll(x => - x.level == 9 && x.FeatureDefinition == FeatureSetBarbarianBrutalCritical); - Barbarian.FeatureUnlocks.RemoveAll(x => - x.level == 13 && x.FeatureDefinition == AttributeModifierBarbarianBrutalCriticalAdd); - Barbarian.FeatureUnlocks.RemoveAll(x => - x.level == 17 && x.FeatureDefinition == AttributeModifierBarbarianBrutalCriticalAdd); - } - else - { - if (!Barbarian.FeatureUnlocks.Exists(x => - x.level == 9 && x.FeatureDefinition == FeatureSetBarbarianBrutalCritical)) - { - Barbarian.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(FeatureSetBarbarianBrutalCritical, 9)); - } - - if (!Barbarian.FeatureUnlocks.Exists(x => - x.level == 13 && x.FeatureDefinition == AttributeModifierBarbarianBrutalCriticalAdd)) - { - Barbarian.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(AttributeModifierBarbarianBrutalCriticalAdd, 13)); - } - - if (!Barbarian.FeatureUnlocks.Exists(x => - x.level == 17 && x.FeatureDefinition == AttributeModifierBarbarianBrutalCriticalAdd)) - { - Barbarian.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(AttributeModifierBarbarianBrutalCriticalAdd, 17)); - } + x.level == 2 && x.FeatureDefinition == FightingStyleChoiceBarbarian); } Barbarian.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } - internal static void SwitchBarbarianRecklessSameBuffDebuffDuration() - { - RecklessAttack.GuiPresentation.description = Main.Settings.EnableBarbarianRecklessSameBuffDebuffDuration - ? "Action/&RecklessAttackExtendedDescription" - : "Action/&RecklessAttackDescription"; - } + #endregion - internal static void SwitchBarbarianRegainOneRageAtShortRest() - { - FeatureSetBarbarianRage.GuiPresentation.description = Main.Settings.EnableBarbarianRegainOneRageAtShortRest - ? "Feature/&FeatureSetRageExtendedDescription" - : "Feature/&FeatureSetRageDescription"; - } + #region Ranger - internal static void SwitchBarbarianFightingStyle() + internal static void SwitchRangerHumanoidFavoredEnemy() { - if (Main.Settings.EnableBarbarianFightingStyle) + if (Main.Settings.AddHumanoidFavoredEnemyToRanger) { - Barbarian.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(FightingStyleChoiceBarbarian, 2)); + AdditionalDamageRangerFavoredEnemyChoice.featureSet.Add(CommonBuilders + .AdditionalDamageMarshalFavoredEnemyHumanoid); } else { - Barbarian.FeatureUnlocks.RemoveAll(x => - x.level == 2 && x.FeatureDefinition == FightingStyleChoiceBarbarian); + AdditionalDamageRangerFavoredEnemyChoice.featureSet.Remove(CommonBuilders + .AdditionalDamageMarshalFavoredEnemyHumanoid); } - Barbarian.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + AdditionalDamageRangerFavoredEnemyChoice.FeatureSet.Sort((x, y) => + string.Compare(x.FormatTitle(), y.FormatTitle(), StringComparison.CurrentCulture)); } #endregion #region Monk - private static readonly FeatureDefinition FeatureMonkHeightenedMetabolism = FeatureDefinitionBuilder - .Create("FeatureMonkHeightenedMetabolism") - .SetGuiPresentation(Category.Feature) - .AddCustomSubFeatures( - new CustomBehaviorHeightenedMetabolism( - ConditionDefinitionBuilder - .Create("ConditionMonkFlurryOfBlowsHeightenedMetabolism") - .SetGuiPresentationNoContent(true) - .SetSilent(Silent.WhenAddedOrRemoved) - .SetFeatures( - FeatureDefinitionAttackModifierBuilder - .Create(AttackModifierMonkFlurryOfBlowsUnarmedStrikeBonus, - "AttackModifierMonkFlurryOfBlowsUnarmedStrikeBonusHeightenedMetabolism") - .SetUnarmedStrike(3) - .AddToDB()) - .AddToDB(), - ConditionDefinitionBuilder - .Create("ConditionMonkFlurryOfBlowsFreedomHeightenedMetabolism") - .SetGuiPresentationNoContent(true) - .SetSilent(Silent.WhenAddedOrRemoved) - .SetFeatures( - FeatureDefinitionAttackModifierBuilder - .Create(AttackModifierMonkFlurryOfBlowsUnarmedStrikeBonusFreedom, - "AttackModifierMonkFlurryOfBlowsUnarmedStrikeBonusFreedomHeightenedMetabolism") - .SetUnarmedStrike(4) - .AddToDB()) - .AddToDB())) - .AddToDB(); - - private static readonly FeatureDefinitionPower PowerMonkStepOfTheWindHeightenedMetabolism = - FeatureDefinitionPowerBuilder - .Create("PowerMonkStepOfTheWindHeightenedMetabolism") - .SetGuiPresentation(Category.Feature, - Sprites.GetSprite("PowerStepOfTheWind", Resources.PowerStepOfTheWind, 256, 128)) - .SetUsesFixed(ActivationTime.BonusAction, RechargeRate.KiPoints) - .SetEffectDescription( - EffectDescriptionBuilder - .Create(PowerMonkStepOfTheWindDash) - .SetDurationData(DurationType.Round) - .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) - .AddEffectForms(PowerMonkStepOftheWindDisengage.EffectDescription.EffectForms[0]) - .SetCasterEffectParameters(PowerOathOfTirmarGoldenSpeech) - .Build()) - .AddToDB(); - - private static readonly FeatureDefinitionPower PowerMonkSuperiorDefense = FeatureDefinitionPowerBuilder - .Create("PowerMonkSuperiorDefense") - .SetGuiPresentation(Category.Feature, - Sprites.GetSprite("PowerMonkSuperiorDefense", Resources.PowerMonkSuperiorDefense, 256, 128)) - .SetUsesFixed(ActivationTime.NoCost, RechargeRate.KiPoints, 3, 3) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Minute, 1) - .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) - .SetEffectForms( - EffectFormBuilder - .Create() - .SetConditionForm( - ConditionDefinitionBuilder - .Create("ConditionMonkSuperiorDefense") - .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionAuraOfProtection) - .SetPossessive() - .AddFeatures( - DamageAffinityAcidResistance, - DamageAffinityBludgeoningResistanceTrue, - DamageAffinityColdResistance, - DamageAffinityFireResistance, - DamageAffinityLightningResistance, - DamageAffinityNecroticResistance, - DamageAffinityPiercingResistanceTrue, - DamageAffinityPoisonResistance, - DamageAffinityPsychicResistance, - DamageAffinityRadiantResistance, - DamageAffinitySlashingResistanceTrue, - DamageAffinityThunderResistance) - .SetConditionParticleReference(ConditionDefinitions.ConditionHolyAura) - .SetCancellingConditions( - DatabaseRepository.GetDatabase().Where(x => - x.IsSubtypeOf(ConditionIncapacitated)).ToArray()) - .AddCancellingConditions(ConditionDefinitions.ConditionCharmedByHypnoticPattern) - .AddToDB(), - ConditionForm.ConditionOperation.Add) - .Build()) - .SetCasterEffectParameters(PowerOathOfTirmarGoldenSpeech) - .Build()) - .AddToDB(); - - private static readonly FeatureDefinition FeatureMonkBodyAndMind = FeatureDefinitionBuilder - .Create("FeatureMonkBodyAndMind") - .SetGuiPresentation(Category.Feature) - .AddCustomSubFeatures(new CustomLevelUpLogicMonkBodyAndMind()) - .AddToDB(); - - private static void LoadMonkHeightenedMetabolism() - { - var validatePower = new ValidatorsValidatePowerUse(c => - !Main.Settings.EnableMonkHeightenedMetabolism || c.GetClassLevel(Monk) < 10); - - PowerMonkStepOfTheWindDash.AddCustomSubFeatures(validatePower); - PowerMonkStepOftheWindDisengage.AddCustomSubFeatures(validatePower); - } - private static void LoadMonkWeaponSpecialization() { var weaponTypeDefinitions = new List @@ -802,39 +231,6 @@ internal static void SwitchMonkFightingStyle() Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } - internal static void SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack() - { - if (Main.Settings.EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack) - { - PowerMonkMartialArts.GuiPresentation.description = - "Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusDescription"; - PowerMonkMartialArts.GuiPresentation.title = - "Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle"; - PowerMonkMartialArts.GuiPresentation.hidden = true; - PowerMonkMartialArts.activationTime = ActivationTime.NoCost; - } - else - { - PowerMonkMartialArts.GuiPresentation.description = "Action/&MartialArtsDescription"; - PowerMonkMartialArts.GuiPresentation.title = "Action/&MartialArtsTitle"; - PowerMonkMartialArts.GuiPresentation.hidden = false; - PowerMonkMartialArts.activationTime = ActivationTime.OnAttackHitMartialArts; - } - - if (Main.Settings.EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack) - { - Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - } - - internal static void SwitchMonkDoNotRequireAttackActionForFlurry() - { - FeatureSetMonkFlurryOfBlows.GuiPresentation.description = - Main.Settings.EnableMonkDoNotRequireAttackActionForFlurry - ? "Feature/&FeatureSetAlternateMonkFlurryOfBlowsDescription" - : "Feature/&FeatureSetMonkFlurryOfBlowsDescription"; - } - internal static void SwitchMonkImprovedUnarmoredMovementToMoveOnTheWall() { if (Main.Settings.EnableMonkImprovedUnarmoredMovementToMoveOnTheWall) @@ -855,56 +251,6 @@ internal static void SwitchMonkImprovedUnarmoredMovementToMoveOnTheWall() } } - internal static void SwitchMonkHeightenedMetabolism() - { - if (Main.Settings.EnableMonkHeightenedMetabolism) - { - Monk.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(FeatureMonkHeightenedMetabolism, 10)); - Monk.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(PowerMonkStepOfTheWindHeightenedMetabolism, 10)); - } - else - { - Monk.FeatureUnlocks - .RemoveAll(x => x.level == 10 && - (x.FeatureDefinition == FeatureMonkHeightenedMetabolism || - x.FeatureDefinition == PowerMonkStepOfTheWindHeightenedMetabolism)); - } - - Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchMonkSuperiorDefenseToReplaceEmptyBody() - { - Monk.FeatureUnlocks - .RemoveAll(x => x.level == 18 && - (x.FeatureDefinition == Level20Context.PowerMonkEmptyBody || - x.FeatureDefinition == PowerMonkSuperiorDefense)); - - Monk.FeatureUnlocks.TryAdd( - Main.Settings.EnableMonkSuperiorDefenseToReplaceEmptyBody - ? new FeatureUnlockByLevel(PowerMonkSuperiorDefense, 18) - : new FeatureUnlockByLevel(Level20Context.PowerMonkEmptyBody, 18)); - - Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchMonkBodyAndMindToReplacePerfectSelf() - { - Monk.FeatureUnlocks - .RemoveAll(x => x.level == 20 && - (x.FeatureDefinition == Level20Context.FeatureMonkPerfectSelf || - x.FeatureDefinition == FeatureMonkBodyAndMind)); - - Monk.FeatureUnlocks.TryAdd( - Main.Settings.EnableMonkBodyAndMindToReplacePerfectSelf - ? new FeatureUnlockByLevel(FeatureMonkBodyAndMind, 20) - : new FeatureUnlockByLevel(Level20Context.FeatureMonkPerfectSelf, 20)); - - Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - internal static void SwitchMonkWeaponSpecialization() { var levels = new[] { 2, 11 }; @@ -930,123 +276,6 @@ internal static void SwitchMonkWeaponSpecialization() Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } - private static readonly List MonkUnarmedDieTypeByRank = - [.. AttackModifierMonkMartialArtsImprovedDamage.DieTypeByRankTable]; - - private static readonly List MonkUnarmedDieTypeByRank2024 = - [ - new() { dieType = DieType.D6, rank = 1 }, - new() { dieType = DieType.D6, rank = 2 }, - new() { dieType = DieType.D6, rank = 3 }, - new() { dieType = DieType.D6, rank = 4 }, - new() { dieType = DieType.D8, rank = 5 }, - new() { dieType = DieType.D8, rank = 6 }, - new() { dieType = DieType.D8, rank = 7 }, - new() { dieType = DieType.D8, rank = 8 }, - new() { dieType = DieType.D8, rank = 9 }, - new() { dieType = DieType.D8, rank = 10 }, - new() { dieType = DieType.D10, rank = 11 }, - new() { dieType = DieType.D10, rank = 12 }, - new() { dieType = DieType.D10, rank = 13 }, - new() { dieType = DieType.D10, rank = 14 }, - new() { dieType = DieType.D10, rank = 15 }, - new() { dieType = DieType.D10, rank = 16 }, - new() { dieType = DieType.D12, rank = 17 }, - new() { dieType = DieType.D12, rank = 18 }, - new() { dieType = DieType.D12, rank = 19 }, - new() { dieType = DieType.D12, rank = 20 } - ]; - - internal static void SwitchOneDndMonkUnarmedDieTypeProgression() - { - AttackModifierMonkMartialArtsImprovedDamage.dieTypeByRankTable = - Main.Settings.SwapMonkToUseOneDndUnarmedDieTypeProgression - ? MonkUnarmedDieTypeByRank2024 - : MonkUnarmedDieTypeByRank; - } - - private sealed class CustomBehaviorHeightenedMetabolism( - ConditionDefinition conditionFlurryOfBlowsHeightenedMetabolism, - ConditionDefinition conditionFlurryOfBlowsFreedomHeightenedMetabolism) - : IModifyEffectDescription, IMagicEffectFinishedByMe - { - private readonly EffectForm _effectForm = - EffectFormBuilder.ConditionForm(conditionFlurryOfBlowsHeightenedMetabolism); - - private readonly EffectForm _effectFormFreedom = - EffectFormBuilder.ConditionForm(conditionFlurryOfBlowsFreedomHeightenedMetabolism); - - public IEnumerator OnMagicEffectFinishedByMe( - CharacterAction action, - GameLocationCharacter attacker, - List targets) - { - var definition = action.ActionParams.activeEffect.SourceDefinition; - - if (definition != PowerMonkPatientDefense && - definition != PowerMonkPatientDefenseSurvival3 && - definition != PowerMonkPatientDefenseSurvival6) - { - yield break; - } - - var rulesetCharacter = action.ActingCharacter.RulesetCharacter; - var dieType = rulesetCharacter.GetMonkDieType(); - var tempHp = rulesetCharacter.RollDiceAndSum(dieType, RollContext.HealValueRoll, 2, []); - - rulesetCharacter.ReceiveTemporaryHitPoints( - tempHp, DurationType.Round, 1, TurnOccurenceType.StartOfTurn, rulesetCharacter.Guid); - } - - public bool IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) - { - return Main.Settings.EnableMonkHeightenedMetabolism && - character.GetClassLevel(Monk) >= 10 && - (definition == PowerMonkFlurryOfBlows || - definition == PowerTraditionFreedomFlurryOfBlowsSwiftStepsImprovement || - definition == PowerTraditionFreedomFlurryOfBlowsUnendingStrikesImprovement); - } - - public EffectDescription GetEffectDescription( - BaseDefinition definition, - EffectDescription effectDescription, - RulesetCharacter character, - RulesetEffect rulesetEffect) - { - if (definition == PowerMonkFlurryOfBlows) - { - effectDescription.EffectForms.TryAdd(_effectForm); - } - else if (definition == PowerTraditionFreedomFlurryOfBlowsSwiftStepsImprovement) - { - effectDescription.EffectForms.TryAdd(_effectForm); - } - else if (definition == PowerTraditionFreedomFlurryOfBlowsUnendingStrikesImprovement) - { - effectDescription.EffectForms.TryAdd(_effectFormFreedom); - } - - return effectDescription; - } - } - - private sealed class CustomLevelUpLogicMonkBodyAndMind : ICustomLevelUpLogic - { - public void ApplyFeature([NotNull] RulesetCharacterHero hero, string tag) - { - hero.ModifyAttributeAndMax(AttributeDefinitions.Dexterity, 4); - hero.ModifyAttributeAndMax(AttributeDefinitions.Wisdom, 4); - hero.RefreshAll(); - } - - public void RemoveFeature([NotNull] RulesetCharacterHero hero, string tag) - { - hero.ModifyAttributeAndMax(AttributeDefinitions.Dexterity, -4); - hero.ModifyAttributeAndMax(AttributeDefinitions.Wisdom, -4); - hero.RefreshAll(); - } - } - internal sealed class MonkWeaponSpecialization { internal WeaponTypeDefinition WeaponType { get; set; } @@ -1080,44 +309,6 @@ internal MonkWeaponSpecializationDiceUpgrade(WeaponTypeDefinition weaponTypeDefi #endregion - #region Ranger - - internal static void SwitchRangerHumanoidFavoredEnemy() - { - if (Main.Settings.AddHumanoidFavoredEnemyToRanger) - { - AdditionalDamageRangerFavoredEnemyChoice.featureSet.Add(CommonBuilders - .AdditionalDamageMarshalFavoredEnemyHumanoid); - } - else - { - AdditionalDamageRangerFavoredEnemyChoice.featureSet.Remove(CommonBuilders - .AdditionalDamageMarshalFavoredEnemyHumanoid); - } - - AdditionalDamageRangerFavoredEnemyChoice.FeatureSet.Sort((x, y) => - string.Compare(x.FormatTitle(), y.FormatTitle(), StringComparison.CurrentCulture)); - } - - internal static void SwitchRangerNatureShroud() - { - if (Main.Settings.EnableRangerNatureShroudAt14) - { - Ranger.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(FeatureDefinitionPowerNatureShroud, 14)); - } - else - { - Ranger.FeatureUnlocks - .RemoveAll(x => x.level == 10 - && x.FeatureDefinition == FeatureDefinitionPowerNatureShroud); - } - - Ranger.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - #endregion - #region Rogue private const string FeatSteadyAim = "FeatSteadyAim"; diff --git a/SolastaUnfinishedBusiness/Models/OneDndContext.cs b/SolastaUnfinishedBusiness/Models/OneDndContext.cs index ad1c765d9c..d5a67d6d04 100644 --- a/SolastaUnfinishedBusiness/Models/OneDndContext.cs +++ b/SolastaUnfinishedBusiness/Models/OneDndContext.cs @@ -1,33 +1,41 @@ -using System.Collections.Generic; +using System.Collections; +using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; +using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Api.LanguageExtensions; +using SolastaUnfinishedBusiness.Behaviors; +using SolastaUnfinishedBusiness.Behaviors.Specific; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; +using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Interfaces; +using SolastaUnfinishedBusiness.Properties; using SolastaUnfinishedBusiness.Validators; -using TA.AI; using static ActionDefinitions; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ConditionDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MonsterDefinitions; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionConditionAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSenses; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ItemDefinitions; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionRegenerations; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionFeatureSets; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionRestHealingModifiers; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ActionDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionActionAffinitys; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionAttributeModifiers; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionMovementAffinitys; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPointPools; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionProficiencys; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionAttackModifiers; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionDamageAffinitys; namespace SolastaUnfinishedBusiness.Models; internal static class OneDndContext { - private static readonly FeatureDefinitionCombatAffinity CombatAffinityConditionSurprised = + private static readonly FeatureDefinitionCombatAffinity CombatAffinityConditionSurprised = FeatureDefinitionCombatAffinityBuilder .Create("CombatAffinityConditionSurprised") .SetGuiPresentationNoContent(true) @@ -65,7 +73,7 @@ internal static class OneDndContext .AddToDB(); private static readonly FeatureDefinitionPointPool PointPoolWarlockInvocation1 = FeatureDefinitionPointPoolBuilder - .Create(FeatureDefinitionPointPools.PointPoolWarlockInvocation2, "PointPoolWarlockInvocation1") + .Create(PointPoolWarlockInvocation2, "PointPoolWarlockInvocation1") .SetGuiPresentation("PointPoolWarlockInvocationInitial", Category.Feature) .SetPool(HeroDefinitions.PointsPoolType.Invocation, 1) .AddToDB(); @@ -111,7 +119,7 @@ internal static class OneDndContext .AddToDB(); private static readonly List DruidWeaponsCategories = - [.. FeatureDefinitionProficiencys.ProficiencyDruidWeapon.Proficiencies]; + [.. ProficiencyDruidWeapon.Proficiencies]; private static readonly List<(string, string)> GuidanceProficiencyPairs = [ @@ -136,10 +144,52 @@ internal static class OneDndContext ]; private static readonly List GuidanceSubSpells = []; - - internal static void LateLoad() + + private static readonly FeatureDefinitionPower PowerSorcererInnateSorcery = FeatureDefinitionPowerBuilder + .Create("PowerSorcererInnateSorcery") + .SetGuiPresentation(Category.Feature, PowerTraditionShockArcanistGreaterArcaneShock) + .SetUsesFixed(ActivationTime.BonusAction, RechargeRate.LongRest, 1, 2) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) + .SetEffectForms(EffectFormBuilder.ConditionForm( + ConditionDefinitionBuilder + .Create("ConditionSorcererInnateSorcery") + .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionConjuredCreature) + .SetFeatures( + FeatureDefinitionMagicAffinityBuilder + .Create("MagicAffinitySorcererInnateSorcery") + .SetGuiPresentation("PowerSorcererInnateSorcery", Category.Feature) + .SetCastingModifiers(0, SpellParamsModifierType.None, 1) + .AddToDB()) + .AddCustomSubFeatures(new ModifyAttackActionModifierInnateSorcery()) + .AddToDB())) + .SetParticleEffectParameters(Shield) + .Build()) + .AddToDB(); + + private static readonly FeatureDefinitionPower FeatureDefinitionPowerNatureShroud = FeatureDefinitionPowerBuilder + .Create("PowerRangerNatureShroud") + .SetGuiPresentation(Category.Feature, Invisibility) + .SetUsesAbilityBonus(ActivationTime.BonusAction, RechargeRate.LongRest, AttributeDefinitions.Wisdom) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) + .SetDurationData(DurationType.Round, 0, TurnOccurenceType.StartOfTurn) + .SetEffectForms(EffectFormBuilder.ConditionForm(ConditionDefinitions.ConditionInvisible)) + .SetParticleEffectParameters(PowerDruidCircleBalanceBalanceOfPower) + .Build()) + .AddToDB(); + + internal static void LateLoad() { + BuildBarbarianBrutalStrike(); BuildOneDndGuidanceSubspells(); + LoadMonkHeightenedMetabolism(); + SwapOneDndBarkskinSpell(); SwapOneDndGuidanceSpell(); SwitchOneDnDEnableDruidToUseMetalArmor(); @@ -163,23 +213,57 @@ internal static void LateLoad() SwitchOneDndPaladinLearnSpellCastingAtOne(); SwitchOneDndRangerLearnSpellCastingAtOne(); SwitchOneDndSurprisedEnforceDisadvantage(); + SwitchRangerNatureShroud(); + SwitchBarbarianBrutalStrike(); + SwitchBarbarianBrutalCritical(); + SwitchBarbarianRecklessSameBuffDebuffDuration(); + SwitchBarbarianRegainOneRageAtShortRest(); + + SwitchPersuasionToFighterSkillOptions(); + SwitchFighterLevelToIndomitableSavingReroll(); + SwitchSorcererInnateSorcery(); + SwitchMonkHeightenedMetabolism(); + SwitchMonkSuperiorDefenseToReplaceEmptyBody(); + SwitchMonkBodyAndMindToReplacePerfectSelf(); + SwitchOneDndMonkUnarmedDieTypeProgression(); + SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack(); + SwitchMonkDoNotRequireAttackActionForFlurry(); + } + + internal static void SwitchFighterLevelToIndomitableSavingReroll() + { + UseIndomitableResistance.GuiPresentation.description = + Main.Settings.AddFighterLevelToIndomitableSavingReroll + ? "Feature/&EnhancedIndomitableResistanceDescription" + : "Feature/&IndomitableResistanceDescription"; + } + + internal static void SwitchPersuasionToFighterSkillOptions() + { + if (Main.Settings.AddPersuasionToFighterSkillOptions) + { + PointPoolFighterSkillPoints.restrictedChoices.TryAdd(SkillDefinitions.Persuasion); + } + else + { + PointPoolFighterSkillPoints.restrictedChoices.Remove(SkillDefinitions.Persuasion); + } } - - + internal static void SwitchOneDnDEnableDruidToUseMetalArmor() { var active = Main.Settings.EnableDruidToUseMetalArmor; if (active) { - FeatureDefinitionProficiencys.ProficiencyDruidArmor.ForbiddenItemTags.Clear(); + ProficiencyDruidArmor.ForbiddenItemTags.Clear(); } else { - if (!FeatureDefinitionProficiencys.ProficiencyDruidArmor.ForbiddenItemTags.Contains( + if (!ProficiencyDruidArmor.ForbiddenItemTags.Contains( TagsDefinitions.ItemTagMetal)) { - FeatureDefinitionProficiencys.ProficiencyDruidArmor.ForbiddenItemTags.Add( + ProficiencyDruidArmor.ForbiddenItemTags.Add( TagsDefinitions.ItemTagMetal); } } @@ -189,14 +273,14 @@ internal static void SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency { if (Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency) { - FeatureDefinitionProficiencys.ProficiencyDruidArmor.Proficiencies.Remove( + ProficiencyDruidArmor.Proficiencies.Remove( EquipmentDefinitions.MediumArmorCategory); Druid.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetDruidPrimalOrder, 1)); } else { - FeatureDefinitionProficiencys.ProficiencyDruidArmor.Proficiencies.TryAdd( + ProficiencyDruidArmor.Proficiencies.TryAdd( EquipmentDefinitions.MediumArmorCategory); Druid.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureSetDruidPrimalOrder); @@ -207,7 +291,7 @@ internal static void SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency internal static void SwitchDruidWeaponProficiencyToUseOneDnd() { - FeatureDefinitionProficiencys.ProficiencyDruidWeapon.proficiencies = + ProficiencyDruidWeapon.proficiencies = Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd ? [WeaponCategoryDefinitions.SimpleWeaponCategory.Name] : DruidWeaponsCategories; @@ -250,14 +334,14 @@ internal static void SwitchEnableRitualOnAllCasters() subclass.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } } - + internal static void SwapOneDndBarkskinSpell() { if (Main.Settings.SwapOneDndBarkskinSpell) { Barkskin.requiresConcentration = false; Barkskin.castingTime = ActivationTime.BonusAction; - FeatureDefinitionAttributeModifiers.AttributeModifierBarkskin.modifierValue = 17; + AttributeModifierBarkskin.modifierValue = 17; Barkskin.GuiPresentation.description = "Spell/&BarkskinOneDndDescription"; ConditionBarkskin.GuiPresentation.description = "Rules/&ConditionOneDndBarkskinDescription"; } @@ -265,7 +349,7 @@ internal static void SwapOneDndBarkskinSpell() { Barkskin.requiresConcentration = true; Barkskin.castingTime = ActivationTime.Action; - FeatureDefinitionAttributeModifiers.AttributeModifierBarkskin.modifierValue = 16; + AttributeModifierBarkskin.modifierValue = 16; Barkskin.GuiPresentation.description = "Spell/&BarkskinDescription"; ConditionBarkskin.GuiPresentation.description = "Rules/&ConditionBarkskinDescription"; } @@ -452,8 +536,8 @@ internal static void SwitchOneDndSurprisedEnforceDisadvantage() else { ConditionDefinitions.ConditionSurprised.Features.SetRange( - FeatureDefinitionActionAffinitys.ActionAffinityConditionSurprised, - FeatureDefinitionMovementAffinitys.MovementAffinityConditionSurprised); + ActionAffinityConditionSurprised, + MovementAffinityConditionSurprised); ConditionDefinitions.ConditionSurprised.GuiPresentation.Description = "Rules/&ConditionSurprisedDescription"; } @@ -489,7 +573,7 @@ internal static void SwitchOneDndEnableBardExpertiseOneLevelBefore() var level = Main.Settings.EnableBardExpertiseOneLevelBefore ? 2 : 3; foreach (var featureUnlock in Ranger.FeatureUnlocks - .Where(x => x.FeatureDefinition == FeatureDefinitionPointPools.PointPoolBardExpertiseLevel3)) + .Where(x => x.FeatureDefinition == PointPoolBardExpertiseLevel3)) { featureUnlock.level = level; } @@ -497,7 +581,7 @@ internal static void SwitchOneDndEnableBardExpertiseOneLevelBefore() level = Main.Settings.EnableBardExpertiseOneLevelBefore ? 9 : 10; foreach (var featureUnlock in Ranger.FeatureUnlocks - .Where(x => x.FeatureDefinition == FeatureDefinitionPointPools.PointPoolBardExpertiseLevel10)) + .Where(x => x.FeatureDefinition == PointPoolBardExpertiseLevel10)) { featureUnlock.level = level; } @@ -535,13 +619,13 @@ internal static void SwitchOneDndRemoveBardSongOfRest() internal static void SwitchOneDndRemoveBardMagicalSecretAt14And18() { Bard.FeatureUnlocks.RemoveAll(x => - x.FeatureDefinition == FeatureDefinitionPointPools.PointPoolBardMagicalSecrets14 || + x.FeatureDefinition == PointPoolBardMagicalSecrets14 || x.FeatureDefinition == Level20Context.PointPoolBardMagicalSecrets18); if (!Main.Settings.RemoveBardMagicalSecretAt14And18) { Bard.FeatureUnlocks.AddRange( - new FeatureUnlockByLevel(FeatureDefinitionPointPools.PointPoolBardMagicalSecrets14, 14), + new FeatureUnlockByLevel(PointPoolBardMagicalSecrets14, 14), new FeatureUnlockByLevel(Level20Context.PointPoolBardMagicalSecrets18, 18)); } @@ -640,6 +724,39 @@ internal static void SwitchOneDndWizardScholar() Wizard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } + + internal static void SwitchSorcererInnateSorcery() + { + if (Main.Settings.EnableSorcererInnateSorcery) + { + Sorcerer.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(PowerSorcererInnateSorcery, 1)); + } + else + { + Sorcerer.FeatureUnlocks.RemoveAll(x => + x.level == 1 && x.FeatureDefinition == PowerSorcererInnateSorcery); + } + + Sorcerer.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchRangerNatureShroud() + { + if (Main.Settings.EnableRangerNatureShroudAt14) + { + Ranger.FeatureUnlocks.TryAdd( + new FeatureUnlockByLevel(FeatureDefinitionPowerNatureShroud, 14)); + } + else + { + Ranger.FeatureUnlocks + .RemoveAll(x => x.level == 10 + && x.FeatureDefinition == FeatureDefinitionPowerNatureShroud); + } + + Ranger.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + internal static void SwitchOneDndWarlockMagicalCunningAtLevel2() { if (Main.Settings.EnableWarlockMagicalCunningAtLevel2) @@ -659,22 +776,840 @@ internal static void SwitchOneDndWarlockInvocationsProgression() if (Main.Settings.SwapWarlockToUseOneDndInvocationProgression) { Warlock.FeatureUnlocks.Add(new FeatureUnlockByLevel(PointPoolWarlockInvocation1, 1)); - FeatureDefinitionPointPools.PointPoolWarlockInvocation2.GuiPresentation.Title = + PointPoolWarlockInvocation2.GuiPresentation.Title = "Feature/&PointPoolWarlockInvocationAdditionalTitle"; - FeatureDefinitionPointPools.PointPoolWarlockInvocation2.GuiPresentation.Description = + PointPoolWarlockInvocation2.GuiPresentation.Description = "Feature/&PointPoolWarlockInvocationAdditionalDescription"; - FeatureDefinitionPointPools.PointPoolWarlockInvocation5.poolAmount = 2; + PointPoolWarlockInvocation5.poolAmount = 2; } else { Warlock.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PointPoolWarlockInvocation1); - FeatureDefinitionPointPools.PointPoolWarlockInvocation2.GuiPresentation.Title = + PointPoolWarlockInvocation2.GuiPresentation.Title = "Feature/&PointPoolWarlockInvocationInitialTitle"; - FeatureDefinitionPointPools.PointPoolWarlockInvocation2.GuiPresentation.Description = + PointPoolWarlockInvocation2.GuiPresentation.Description = "Feature/&PointPoolWarlockInvocationInitialDescription"; - FeatureDefinitionPointPools.PointPoolWarlockInvocation5.poolAmount = 1; + PointPoolWarlockInvocation5.poolAmount = 1; } Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } + + private sealed class ModifyAttackActionModifierInnateSorcery : IModifyAttackActionModifier + { + private readonly TrendInfo _trendInfo = + new(1, FeatureSourceType.CharacterFeature, "PowerSorcererInnateSorcery", null); + + public void OnAttackComputeModifier( + RulesetCharacter myself, + RulesetCharacter defender, + BattleDefinitions.AttackProximity attackProximity, + RulesetAttackMode attackMode, + string effectName, + ref ActionModifier attackModifier) + { + if (attackProximity is not + (BattleDefinitions.AttackProximity.MagicRange or BattleDefinitions.AttackProximity.MagicReach)) + { + return; + } + + attackModifier.AttackAdvantageTrends.Add(_trendInfo); + } + } + + #region Monk + + private sealed class CustomBehaviorHeightenedMetabolism( + ConditionDefinition conditionFlurryOfBlowsHeightenedMetabolism, + ConditionDefinition conditionFlurryOfBlowsFreedomHeightenedMetabolism) + : IModifyEffectDescription, IMagicEffectFinishedByMe + { + private readonly EffectForm _effectForm = + EffectFormBuilder.ConditionForm(conditionFlurryOfBlowsHeightenedMetabolism); + + private readonly EffectForm _effectFormFreedom = + EffectFormBuilder.ConditionForm(conditionFlurryOfBlowsFreedomHeightenedMetabolism); + + public IEnumerator OnMagicEffectFinishedByMe( + CharacterAction action, + GameLocationCharacter attacker, + List targets) + { + var definition = action.ActionParams.activeEffect.SourceDefinition; + + if (definition != PowerMonkPatientDefense && + definition != PowerMonkPatientDefenseSurvival3 && + definition != PowerMonkPatientDefenseSurvival6) + { + yield break; + } + + var rulesetCharacter = action.ActingCharacter.RulesetCharacter; + var dieType = rulesetCharacter.GetMonkDieType(); + var tempHp = rulesetCharacter.RollDiceAndSum(dieType, RollContext.HealValueRoll, 2, []); + + rulesetCharacter.ReceiveTemporaryHitPoints( + tempHp, DurationType.Round, 1, TurnOccurenceType.StartOfTurn, rulesetCharacter.Guid); + } + + public bool IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) + { + return Main.Settings.EnableMonkHeightenedMetabolism && + character.GetClassLevel(Monk) >= 10 && + (definition == PowerMonkFlurryOfBlows || + definition == PowerTraditionFreedomFlurryOfBlowsSwiftStepsImprovement || + definition == PowerTraditionFreedomFlurryOfBlowsUnendingStrikesImprovement); + } + + public EffectDescription GetEffectDescription( + BaseDefinition definition, + EffectDescription effectDescription, + RulesetCharacter character, + RulesetEffect rulesetEffect) + { + if (definition == PowerMonkFlurryOfBlows) + { + effectDescription.EffectForms.TryAdd(_effectForm); + } + else if (definition == PowerTraditionFreedomFlurryOfBlowsSwiftStepsImprovement) + { + effectDescription.EffectForms.TryAdd(_effectForm); + } + else if (definition == PowerTraditionFreedomFlurryOfBlowsUnendingStrikesImprovement) + { + effectDescription.EffectForms.TryAdd(_effectFormFreedom); + } + + return effectDescription; + } + } + + private sealed class CustomLevelUpLogicMonkBodyAndMind : ICustomLevelUpLogic + { + public void ApplyFeature([NotNull] RulesetCharacterHero hero, string tag) + { + hero.ModifyAttributeAndMax(AttributeDefinitions.Dexterity, 4); + hero.ModifyAttributeAndMax(AttributeDefinitions.Wisdom, 4); + hero.RefreshAll(); + } + + public void RemoveFeature([NotNull] RulesetCharacterHero hero, string tag) + { + hero.ModifyAttributeAndMax(AttributeDefinitions.Dexterity, -4); + hero.ModifyAttributeAndMax(AttributeDefinitions.Wisdom, -4); + hero.RefreshAll(); + } + } + + private static readonly FeatureDefinition FeatureMonkHeightenedMetabolism = FeatureDefinitionBuilder + .Create("FeatureMonkHeightenedMetabolism") + .SetGuiPresentation(Category.Feature) + .AddCustomSubFeatures( + new CustomBehaviorHeightenedMetabolism( + ConditionDefinitionBuilder + .Create("ConditionMonkFlurryOfBlowsHeightenedMetabolism") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .SetFeatures( + FeatureDefinitionAttackModifierBuilder + .Create(AttackModifierMonkFlurryOfBlowsUnarmedStrikeBonus, + "AttackModifierMonkFlurryOfBlowsUnarmedStrikeBonusHeightenedMetabolism") + .SetUnarmedStrike(3) + .AddToDB()) + .AddToDB(), + ConditionDefinitionBuilder + .Create("ConditionMonkFlurryOfBlowsFreedomHeightenedMetabolism") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .SetFeatures( + FeatureDefinitionAttackModifierBuilder + .Create(AttackModifierMonkFlurryOfBlowsUnarmedStrikeBonusFreedom, + "AttackModifierMonkFlurryOfBlowsUnarmedStrikeBonusFreedomHeightenedMetabolism") + .SetUnarmedStrike(4) + .AddToDB()) + .AddToDB())) + .AddToDB(); + + private static readonly FeatureDefinitionPower PowerMonkStepOfTheWindHeightenedMetabolism = + FeatureDefinitionPowerBuilder + .Create("PowerMonkStepOfTheWindHeightenedMetabolism") + .SetGuiPresentation(Category.Feature, + Sprites.GetSprite("PowerStepOfTheWind", Resources.PowerStepOfTheWind, 256, 128)) + .SetUsesFixed(ActivationTime.BonusAction, RechargeRate.KiPoints) + .SetEffectDescription( + EffectDescriptionBuilder + .Create(PowerMonkStepOfTheWindDash) + .SetDurationData(DurationType.Round) + .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) + .AddEffectForms(PowerMonkStepOftheWindDisengage.EffectDescription.EffectForms[0]) + .SetCasterEffectParameters(PowerOathOfTirmarGoldenSpeech) + .Build()) + .AddToDB(); + + private static readonly FeatureDefinitionPower PowerMonkSuperiorDefense = FeatureDefinitionPowerBuilder + .Create("PowerMonkSuperiorDefense") + .SetGuiPresentation(Category.Feature, + Sprites.GetSprite("PowerMonkSuperiorDefense", Resources.PowerMonkSuperiorDefense, 256, 128)) + .SetUsesFixed(ActivationTime.NoCost, RechargeRate.KiPoints, 3, 3) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) + .SetEffectForms( + EffectFormBuilder + .Create() + .SetConditionForm( + ConditionDefinitionBuilder + .Create("ConditionMonkSuperiorDefense") + .SetGuiPresentation(Category.Condition, ConditionAuraOfProtection) + .SetPossessive() + .AddFeatures( + DamageAffinityAcidResistance, + DamageAffinityBludgeoningResistanceTrue, + DamageAffinityColdResistance, + DamageAffinityFireResistance, + DamageAffinityLightningResistance, + DamageAffinityNecroticResistance, + DamageAffinityPiercingResistanceTrue, + DamageAffinityPoisonResistance, + DamageAffinityPsychicResistance, + DamageAffinityRadiantResistance, + DamageAffinitySlashingResistanceTrue, + DamageAffinityThunderResistance) + .SetConditionParticleReference(ConditionHolyAura) + .SetCancellingConditions( + DatabaseRepository.GetDatabase().Where(x => + x.IsSubtypeOf(RuleDefinitions.ConditionIncapacitated)).ToArray()) + .AddCancellingConditions(ConditionCharmedByHypnoticPattern) + .AddToDB(), + ConditionForm.ConditionOperation.Add) + .Build()) + .SetCasterEffectParameters(PowerOathOfTirmarGoldenSpeech) + .Build()) + .AddToDB(); + + private static readonly FeatureDefinition FeatureMonkBodyAndMind = FeatureDefinitionBuilder + .Create("FeatureMonkBodyAndMind") + .SetGuiPresentation(Category.Feature) + .AddCustomSubFeatures(new CustomLevelUpLogicMonkBodyAndMind()) + .AddToDB(); + + private static void LoadMonkHeightenedMetabolism() + { + var validatePower = new ValidatorsValidatePowerUse(c => + !Main.Settings.EnableMonkHeightenedMetabolism || c.GetClassLevel(Monk) < 10); + + PowerMonkStepOfTheWindDash.AddCustomSubFeatures(validatePower); + PowerMonkStepOftheWindDisengage.AddCustomSubFeatures(validatePower); + } + + internal static void SwitchMonkDoNotRequireAttackActionForFlurry() + { + FeatureSetMonkFlurryOfBlows.GuiPresentation.description = + Main.Settings.EnableMonkDoNotRequireAttackActionForFlurry + ? "Feature/&FeatureSetAlternateMonkFlurryOfBlowsDescription" + : "Feature/&FeatureSetMonkFlurryOfBlowsDescription"; + } + + private static readonly List MonkUnarmedDieTypeByRank = + [.. AttackModifierMonkMartialArtsImprovedDamage.DieTypeByRankTable]; + + private static readonly List MonkUnarmedDieTypeByRank2024 = + [ + new() { dieType = DieType.D6, rank = 1 }, + new() { dieType = DieType.D6, rank = 2 }, + new() { dieType = DieType.D6, rank = 3 }, + new() { dieType = DieType.D6, rank = 4 }, + new() { dieType = DieType.D8, rank = 5 }, + new() { dieType = DieType.D8, rank = 6 }, + new() { dieType = DieType.D8, rank = 7 }, + new() { dieType = DieType.D8, rank = 8 }, + new() { dieType = DieType.D8, rank = 9 }, + new() { dieType = DieType.D8, rank = 10 }, + new() { dieType = DieType.D10, rank = 11 }, + new() { dieType = DieType.D10, rank = 12 }, + new() { dieType = DieType.D10, rank = 13 }, + new() { dieType = DieType.D10, rank = 14 }, + new() { dieType = DieType.D10, rank = 15 }, + new() { dieType = DieType.D10, rank = 16 }, + new() { dieType = DieType.D12, rank = 17 }, + new() { dieType = DieType.D12, rank = 18 }, + new() { dieType = DieType.D12, rank = 19 }, + new() { dieType = DieType.D12, rank = 20 } + ]; + + internal static void SwitchOneDndMonkUnarmedDieTypeProgression() + { + AttackModifierMonkMartialArtsImprovedDamage.dieTypeByRankTable = + Main.Settings.SwapMonkToUseOneDndUnarmedDieTypeProgression + ? MonkUnarmedDieTypeByRank2024 + : MonkUnarmedDieTypeByRank; + } + + internal static void SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack() + { + if (Main.Settings.EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack) + { + PowerMonkMartialArts.GuiPresentation.description = + "Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusDescription"; + PowerMonkMartialArts.GuiPresentation.title = + "Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle"; + PowerMonkMartialArts.GuiPresentation.hidden = true; + PowerMonkMartialArts.activationTime = ActivationTime.NoCost; + } + else + { + PowerMonkMartialArts.GuiPresentation.description = "Action/&MartialArtsDescription"; + PowerMonkMartialArts.GuiPresentation.title = "Action/&MartialArtsTitle"; + PowerMonkMartialArts.GuiPresentation.hidden = false; + PowerMonkMartialArts.activationTime = ActivationTime.OnAttackHitMartialArts; + } + + if (Main.Settings.EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack) + { + Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + } + + internal static void SwitchMonkHeightenedMetabolism() + { + if (Main.Settings.EnableMonkHeightenedMetabolism) + { + Monk.FeatureUnlocks.TryAdd( + new FeatureUnlockByLevel(FeatureMonkHeightenedMetabolism, 10)); + Monk.FeatureUnlocks.TryAdd( + new FeatureUnlockByLevel(PowerMonkStepOfTheWindHeightenedMetabolism, 10)); + } + else + { + Monk.FeatureUnlocks + .RemoveAll(x => x.level == 10 && + (x.FeatureDefinition == FeatureMonkHeightenedMetabolism || + x.FeatureDefinition == PowerMonkStepOfTheWindHeightenedMetabolism)); + } + + Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchMonkSuperiorDefenseToReplaceEmptyBody() + { + Monk.FeatureUnlocks + .RemoveAll(x => x.level == 18 && + (x.FeatureDefinition == Level20Context.PowerMonkEmptyBody || + x.FeatureDefinition == PowerMonkSuperiorDefense)); + + Monk.FeatureUnlocks.TryAdd( + Main.Settings.EnableMonkSuperiorDefenseToReplaceEmptyBody + ? new FeatureUnlockByLevel(PowerMonkSuperiorDefense, 18) + : new FeatureUnlockByLevel(Level20Context.PowerMonkEmptyBody, 18)); + + Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchMonkBodyAndMindToReplacePerfectSelf() + { + Monk.FeatureUnlocks + .RemoveAll(x => x.level == 20 && + (x.FeatureDefinition == Level20Context.FeatureMonkPerfectSelf || + x.FeatureDefinition == FeatureMonkBodyAndMind)); + + Monk.FeatureUnlocks.TryAdd( + Main.Settings.EnableMonkBodyAndMindToReplacePerfectSelf + ? new FeatureUnlockByLevel(FeatureMonkBodyAndMind, 20) + : new FeatureUnlockByLevel(Level20Context.FeatureMonkPerfectSelf, 20)); + + Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + #endregion + + #region Barbarian + + private const string BrutalStrike = "BarbarianBrutalStrike"; + + private static ConditionDefinition _conditionBrutalStrike; + private static ConditionDefinition _conditionHamstringBlow; + private static ConditionDefinition _conditionStaggeringBlow; + private static ConditionDefinition _conditionStaggeringBlowAoO; + private static ConditionDefinition _conditionSunderingBlow; + private static FeatureDefinitionFeatureSet _featureSetBarbarianBrutalStrike; + private static FeatureDefinitionFeatureSet _featureSetBarbarianBrutalStrikeImprovement13; + private static FeatureDefinitionFeatureSet _featureSetBarbarianBrutalStrikeImprovement17; + + private static void BuildBarbarianBrutalStrike() + { + const string BrutalStrikeImprovement13 = "BarbarianBrutalStrikeImprovement13"; + const string BrutalStrikeImprovement17 = "BarbarianBrutalStrikeImprovement17"; + + var additionalDamageBrutalStrike = + FeatureDefinitionAdditionalDamageBuilder + .Create("AdditionalDamageBrutalStrike") + .SetGuiPresentationNoContent(true) + .SetNotificationTag("BrutalStrike") + .SetDamageDice(DieType.D10, 1) + .SetAdvancement(AdditionalDamageAdvancement.ClassLevel, 1, 1, 8, 9) + .SetRequiredProperty(RestrictedContextRequiredProperty.Weapon) + .AddCustomSubFeatures( + ClassHolder.Barbarian, + new ValidateContextInsteadOfRestrictedProperty((_, _, character, _, _, _, _) => (OperationType.Set, + character.IsToggleEnabled((Id)ExtraActionId.BrutalStrikeToggle)))) + .AddToDB(); + + _conditionBrutalStrike = ConditionDefinitionBuilder + .Create($"Condition{BrutalStrike}") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .SetFeatures(additionalDamageBrutalStrike) + .SetSpecialInterruptions(ConditionInterruption.Attacks) + .AddToDB(); + + var powerPool = FeatureDefinitionPowerBuilder + .Create($"Power{BrutalStrike}") + .SetGuiPresentation(Category.Feature) + .SetUsesFixed(ActivationTime.NoCost) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Round, 1) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.Individuals) + .Build()) + .AddToDB(); + + powerPool.AddCustomSubFeatures( + ModifyPowerVisibility.Hidden, new CustomBehaviorBrutalStrike(powerPool)); + + // Forceful Blow + + var powerForcefulBlow = FeatureDefinitionPowerSharedPoolBuilder + .Create($"Power{BrutalStrike}ForcefulBlow") + .SetGuiPresentation(Category.Feature) + .SetSharedPool(ActivationTime.NoCost, powerPool) + .SetShowCasting(false) + .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) + .AddToDB(); + + // Hamstring Blow + + var powerHamstringBlow = FeatureDefinitionPowerSharedPoolBuilder + .Create($"Power{BrutalStrike}HamstringBlow") + .SetGuiPresentation(Category.Feature) + .SetSharedPool(ActivationTime.NoCost, powerPool) + .SetShowCasting(false) + .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) + .AddToDB(); + + _conditionHamstringBlow = ConditionDefinitionBuilder + .Create("ConditionHamstringBlow") + .SetGuiPresentation($"Power{BrutalStrike}HamstringBlow", Category.Feature, + ConditionHindered) + .SetPossessive() + .SetConditionType(ConditionType.Detrimental) + .SetFeatures( + FeatureDefinitionMovementAffinityBuilder + .Create("MovementAffinityHamstringBlow") + .SetGuiPresentation($"Power{BrutalStrike}HamstringBlow", Category.Feature, Gui.NoLocalization) + .SetBaseSpeedAdditiveModifier(-3) + .AddToDB()) + .CopyParticleReferences(ConditionSlowed) + .AddToDB(); + + _conditionHamstringBlow.GuiPresentation.description = Gui.EmptyContent; + + // Staggering Blow + + var powerStaggeringBlow = FeatureDefinitionPowerSharedPoolBuilder + .Create($"Power{BrutalStrike}StaggeringBlow") + .SetGuiPresentation(Category.Feature) + .SetSharedPool(ActivationTime.NoCost, powerPool) + .SetShowCasting(false) + .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) + .AddToDB(); + + _conditionStaggeringBlow = ConditionDefinitionBuilder + .Create("ConditionStaggeringBlow") + .SetGuiPresentation($"Power{BrutalStrike}StaggeringBlow", Category.Feature, + ConditionDazzled) + .SetSilent(Silent.WhenRemoved) + .SetPossessive() + .SetConditionType(ConditionType.Detrimental) + .SetFeatures( + FeatureDefinitionSavingThrowAffinityBuilder + .Create("SavingThrowAffinityStaggeringBlow") + .SetGuiPresentation($"Power{BrutalStrike}StaggeringBlow", Category.Feature, Gui.NoLocalization) + .SetAffinities(CharacterSavingThrowAffinity.Disadvantage, false, + AttributeDefinitions.AbilityScoreNames) + .AddToDB()) + .AddSpecialInterruptions(ConditionInterruption.SavingThrow) + .CopyParticleReferences(ConditionDazzled) + .AddToDB(); + + _conditionStaggeringBlow.GuiPresentation.description = Gui.EmptyContent; + + _conditionStaggeringBlowAoO = ConditionDefinitionBuilder + .Create("ConditionStaggeringBlowAoO") + .SetGuiPresentation(Category.Condition, ConditionDazzled) + .SetSilent(Silent.WhenAdded) + .SetPossessive() + .SetConditionType(ConditionType.Detrimental) + .SetFeatures(SrdAndHouseRulesContext.ActionAffinityConditionBlind) + .AddToDB(); + + // Sundering Blow + + var additionalDamageSunderingBlow = FeatureDefinitionAdditionalDamageBuilder + .Create($"AdditionalDamage{BrutalStrike}SunderingBlow") + .SetGuiPresentationNoContent(true) + .SetNotificationTag("SunderingBlow") + .SetDamageDice(DieType.D10, 1) + .AddToDB(); + + var conditionSunderingBlowAlly = ConditionDefinitionBuilder + .Create("ConditionSunderingBlowAlly") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .SetFeatures(additionalDamageSunderingBlow) + .SetSpecialInterruptions(ConditionInterruption.Attacks) + .AddToDB(); + + var powerSunderingBlow = FeatureDefinitionPowerSharedPoolBuilder + .Create($"Power{BrutalStrike}SunderingBlow") + .SetGuiPresentation(Category.Feature) + .SetSharedPool(ActivationTime.NoCost, powerPool) + .SetShowCasting(false) + .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) + .AddToDB(); + + _conditionSunderingBlow = ConditionDefinitionBuilder + .Create("ConditionSunderingBlow") + .SetGuiPresentation($"Power{BrutalStrike}SunderingBlow", Category.Feature, + ConditionTargetedByGuidingBolt) + .SetPossessive() + .SetConditionType(ConditionType.Detrimental) + .AddCustomSubFeatures(new CustomBehaviorSunderingBlow(powerSunderingBlow, conditionSunderingBlowAlly)) + .SetSpecialInterruptions(ExtraConditionInterruption.AfterWasAttackedNotBySource) + .CopyParticleReferences(ConditionLeadByExampleMarked) + .AddToDB(); + + // MAIN + + PowerBundle.RegisterPowerBundle(powerPool, true, + powerForcefulBlow, powerHamstringBlow, powerStaggeringBlow, powerSunderingBlow); + + var actionAffinityToggle = FeatureDefinitionActionAffinityBuilder + .Create(ActionAffinitySorcererMetamagicToggle, "ActionAffinityBrutalStrikeToggle") + .SetGuiPresentationNoContent(true) + .SetAuthorizedActions((Id)ExtraActionId.BrutalStrikeToggle) + .AddToDB(); + + _featureSetBarbarianBrutalStrike = FeatureDefinitionFeatureSetBuilder + .Create($"FeatureSet{BrutalStrike}") + .SetGuiPresentation(Category.Feature) + .AddFeatureSet(powerPool, actionAffinityToggle, powerForcefulBlow, powerHamstringBlow) + .AddToDB(); + + _featureSetBarbarianBrutalStrikeImprovement13 = FeatureDefinitionFeatureSetBuilder + .Create($"FeatureSet{BrutalStrikeImprovement13}") + .SetGuiPresentation(Category.Feature) + .AddFeatureSet(powerStaggeringBlow, powerSunderingBlow) + .AddToDB(); + + _featureSetBarbarianBrutalStrikeImprovement17 = FeatureDefinitionFeatureSetBuilder + .Create($"FeatureSet{BrutalStrikeImprovement17}") + .SetGuiPresentation(Category.Feature) + .AddToDB(); + } + + private sealed class CustomBehaviorBrutalStrike(FeatureDefinitionPower powerBarbarianBrutalStrike) + : IPhysicalAttackBeforeHitConfirmedOnEnemy, IPhysicalAttackFinishedByMe + { + private static readonly EffectForm ForcefulBlowForm = EffectFormBuilder + .Create() + .SetMotionForm(MotionForm.MotionType.PushFromOrigin, 3) + .Build(); + + public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( + GameLocationBattleManager battleManager, + GameLocationCharacter attacker, + GameLocationCharacter defender, + ActionModifier actionModifier, + RulesetAttackMode attackMode, + bool rangedAttack, + AdvantageType advantageType, + List actualEffectForms, + bool firstTarget, + bool criticalHit) + { + var rulesetAttacker = attacker.RulesetCharacter; + + if (!attacker.OnceInMyTurnIsValid(BrutalStrike) || + !rulesetAttacker.IsToggleEnabled((Id)ExtraActionId.BrutalStrikeToggle) || + !rulesetAttacker.HasConditionOfCategoryAndType( + AttributeDefinitions.TagCombat, ConditionDefinitions.ConditionReckless.Name)) + { + yield break; + } + + rulesetAttacker.InflictCondition( + _conditionBrutalStrike.Name, + DurationType.Round, + 0, + TurnOccurenceType.StartOfTurn, + AttributeDefinitions.TagEffect, + rulesetAttacker.guid, + rulesetAttacker.CurrentFaction.Name, + 1, + _conditionBrutalStrike.Name, + 0, + 0, + 0); + + var usablePower = PowerProvider.Get(powerBarbarianBrutalStrike, rulesetAttacker); + + yield return attacker.MyReactToSpendPowerBundle( + usablePower, + [defender], + attacker, + powerBarbarianBrutalStrike.Name, + reactionValidated: ReactionValidated, + battleManager: battleManager); + + yield break; + + void ReactionValidated(ReactionRequestSpendBundlePower reactionRequest) + { + // determine selected power to collect cost + var option = reactionRequest.SelectedSubOption; + var subPowers = powerBarbarianBrutalStrike.GetBundle()?.SubPowers; + + if (subPowers == null) + { + return; + } + + var selectedPower = subPowers[option]; + + switch (selectedPower.Name) + { + case $"Power{BrutalStrike}ForcefulBlow": + actualEffectForms.Add(ForcefulBlowForm); + break; + case $"Power{BrutalStrike}HamstringBlow": + InflictCondition(rulesetAttacker, defender.RulesetCharacter, _conditionHamstringBlow.Name); + break; + case $"Power{BrutalStrike}StaggeringBlow": + InflictCondition(rulesetAttacker, defender.RulesetCharacter, _conditionStaggeringBlow.Name); + InflictCondition(rulesetAttacker, defender.RulesetCharacter, _conditionStaggeringBlowAoO.Name); + break; + case $"Power{BrutalStrike}SunderingBlow": + InflictCondition(rulesetAttacker, defender.RulesetCharacter, _conditionSunderingBlow.Name); + break; + } + } + } + + public IEnumerator OnPhysicalAttackFinishedByMe(GameLocationBattleManager battleManager, CharacterAction action, + GameLocationCharacter attacker, GameLocationCharacter defender, RulesetAttackMode attackMode, + RollOutcome rollOutcome, int damageAmount) + { + var rulesetAttacker = attacker.RulesetCharacter; + + if (!rulesetAttacker.IsToggleEnabled((Id)ExtraActionId.BrutalStrikeToggle) || + !rulesetAttacker.HasConditionOfCategoryAndType( + AttributeDefinitions.TagCombat, ConditionDefinitions.ConditionReckless.Name)) + { + yield break; + } + + attacker.UsedSpecialFeatures.TryAdd(BrutalStrike, 0); + } + + private static void InflictCondition( + RulesetCharacter rulesetAttacker, RulesetCharacter rulesetDefender, string conditionName) + { + rulesetDefender.InflictCondition( + conditionName, + DurationType.Round, + 1, + (TurnOccurenceType)ExtraTurnOccurenceType.StartOfSourceTurn, + AttributeDefinitions.TagEffect, + rulesetAttacker.guid, + rulesetAttacker.CurrentFaction.Name, + 1, + conditionName, + 0, + 0, + 0); + } + } + + private sealed class CustomBehaviorSunderingBlow( + FeatureDefinitionPower powerSunderingBlow, + ConditionDefinition conditionSunderingBlowAlly) : IPhysicalAttackInitiatedOnMe, IMagicEffectAttackInitiatedOnMe + { + public IEnumerator OnMagicEffectAttackInitiatedOnMe( + CharacterActionMagicEffect action, + RulesetEffect activeEffect, + GameLocationCharacter attacker, + GameLocationCharacter defender, + ActionModifier attackModifier, + bool firstTarget, + bool checkMagicalAttackDamage) + { + var damageType = activeEffect.EffectDescription.FindFirstDamageForm()?.DamageType; + var rulesetAttacker = attacker.RulesetCharacter; + + if (damageType == null || + rulesetAttacker == null || + rulesetAttacker is RulesetCharacterEffectProxy) + { + yield break; + } + + AddBonusAttackAndDamageRoll(attacker.RulesetCharacter, defender.RulesetActor, attackModifier); + } + + public IEnumerator OnPhysicalAttackInitiatedOnMe( + GameLocationBattleManager battleManager, + CharacterAction action, + GameLocationCharacter attacker, + GameLocationCharacter defender, + ActionModifier attackModifier, + RulesetAttackMode attackMode) + { + var damageType = attackMode.EffectDescription.FindFirstDamageForm()?.DamageType; + var rulesetAttacker = attacker.RulesetCharacter; + + if (damageType == null || + rulesetAttacker == null || + rulesetAttacker is RulesetCharacterEffectProxy) + { + yield break; + } + + AddBonusAttackAndDamageRoll(attacker.RulesetCharacter, defender.RulesetActor, attackModifier); + } + + private void AddBonusAttackAndDamageRoll( + RulesetCharacter rulesetAttacker, + RulesetActor rulesetDefender, + ActionModifier actionModifier) + { + if (!rulesetDefender.TryGetConditionOfCategoryAndType( + AttributeDefinitions.TagEffect, _conditionSunderingBlow.Name, out var activeCondition)) + { + return; + } + + var rulesetSource = EffectHelpers.GetCharacterByGuid(activeCondition.SourceGuid); + + if (rulesetAttacker == rulesetSource) + { + return; + } + + rulesetDefender.RemoveCondition(activeCondition); + + var bonusAttackRoll = + rulesetAttacker.RollDie(DieType.D10, RollContext.None, false, AdvantageType.None, out _, out _); + + actionModifier.AttackRollModifier += bonusAttackRoll; + actionModifier.AttacktoHitTrends.Add(new TrendInfo( + bonusAttackRoll, FeatureSourceType.CharacterFeature, powerSunderingBlow.Name, powerSunderingBlow)); + + rulesetAttacker.InflictCondition( + conditionSunderingBlowAlly.Name, + DurationType.Round, + 0, + TurnOccurenceType.EndOfTurn, + AttributeDefinitions.TagEffect, + rulesetAttacker.guid, + FactionDefinitions.Party.Name, + 1, + conditionSunderingBlowAlly.Name, + 0, + 0, + 0); + } + } + + internal static void SwitchBarbarianBrutalStrike() + { + if (Main.Settings.EnableBarbarianBrutalStrike) + { + Barbarian.FeatureUnlocks.TryAdd( + new FeatureUnlockByLevel(_featureSetBarbarianBrutalStrike, 9)); + Barbarian.FeatureUnlocks.TryAdd( + new FeatureUnlockByLevel(_featureSetBarbarianBrutalStrikeImprovement13, 13)); + Barbarian.FeatureUnlocks.TryAdd( + new FeatureUnlockByLevel(_featureSetBarbarianBrutalStrikeImprovement17, 17)); + } + else + { + Barbarian.FeatureUnlocks.RemoveAll(x => + x.level == 9 && x.FeatureDefinition == _featureSetBarbarianBrutalStrike); + Barbarian.FeatureUnlocks.RemoveAll(x => + x.level == 13 && x.FeatureDefinition == _featureSetBarbarianBrutalStrikeImprovement13); + Barbarian.FeatureUnlocks.RemoveAll(x => + x.level == 17 && x.FeatureDefinition == _featureSetBarbarianBrutalStrikeImprovement17); + } + + Barbarian.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchBarbarianBrutalCritical() + { + if (Main.Settings.DisableBarbarianBrutalCritical) + { + Barbarian.FeatureUnlocks.RemoveAll(x => + x.level == 9 && x.FeatureDefinition == FeatureSetBarbarianBrutalCritical); + Barbarian.FeatureUnlocks.RemoveAll(x => + x.level == 13 && x.FeatureDefinition == AttributeModifierBarbarianBrutalCriticalAdd); + Barbarian.FeatureUnlocks.RemoveAll(x => + x.level == 17 && x.FeatureDefinition == AttributeModifierBarbarianBrutalCriticalAdd); + } + else + { + if (!Barbarian.FeatureUnlocks.Exists(x => + x.level == 9 && x.FeatureDefinition == FeatureSetBarbarianBrutalCritical)) + { + Barbarian.FeatureUnlocks.TryAdd( + new FeatureUnlockByLevel(FeatureSetBarbarianBrutalCritical, 9)); + } + + if (!Barbarian.FeatureUnlocks.Exists(x => + x.level == 13 && x.FeatureDefinition == AttributeModifierBarbarianBrutalCriticalAdd)) + { + Barbarian.FeatureUnlocks.TryAdd( + new FeatureUnlockByLevel(AttributeModifierBarbarianBrutalCriticalAdd, 13)); + } + + if (!Barbarian.FeatureUnlocks.Exists(x => + x.level == 17 && x.FeatureDefinition == AttributeModifierBarbarianBrutalCriticalAdd)) + { + Barbarian.FeatureUnlocks.TryAdd( + new FeatureUnlockByLevel(AttributeModifierBarbarianBrutalCriticalAdd, 17)); + } + } + + Barbarian.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchBarbarianRecklessSameBuffDebuffDuration() + { + RecklessAttack.GuiPresentation.description = Main.Settings.EnableBarbarianRecklessSameBuffDebuffDuration + ? "Action/&RecklessAttackExtendedDescription" + : "Action/&RecklessAttackDescription"; + } + + internal static void SwitchBarbarianRegainOneRageAtShortRest() + { + FeatureSetBarbarianRage.GuiPresentation.description = Main.Settings.EnableBarbarianRegainOneRageAtShortRest + ? "Feature/&FeatureSetRageExtendedDescription" + : "Feature/&FeatureSetRageDescription"; + } + + #endregion } From 8bb4c0e62ef9cc1c97b8a53bd1f6931b42e6166c Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 09:17:38 -0800 Subject: [PATCH 44/85] update diagnostics note missing condition translation --- ...-GuiPresentation-MissingTranslation-en.txt | 2 + .../UnfinishedBusinessBlueprints/Assets.txt | 90 +++++ .../ConditionGuidanceAcrobatics.json | 294 +++++++++++++++ .../ConditionGuidanceAnimalHandling.json | 294 +++++++++++++++ .../ConditionGuidanceArcana.json | 294 +++++++++++++++ .../ConditionGuidanceAthletics.json | 294 +++++++++++++++ .../ConditionGuidanceDeception.json | 294 +++++++++++++++ .../ConditionGuidanceHistory.json | 294 +++++++++++++++ .../ConditionGuidanceInsight.json | 294 +++++++++++++++ .../ConditionGuidanceIntimidation.json | 294 +++++++++++++++ .../ConditionGuidanceInvestigation.json | 294 +++++++++++++++ .../ConditionGuidanceMedecine.json | 294 +++++++++++++++ .../ConditionGuidanceNature.json | 294 +++++++++++++++ .../ConditionGuidancePerception.json | 294 +++++++++++++++ .../ConditionGuidancePerformance.json | 294 +++++++++++++++ .../ConditionGuidancePersuasion.json | 294 +++++++++++++++ .../ConditionGuidanceReligion.json | 294 +++++++++++++++ .../ConditionGuidanceSleightOfHand.json | 294 +++++++++++++++ .../ConditionGuidanceStealth.json | 294 +++++++++++++++ .../ConditionGuidanceSurvival.json | 294 +++++++++++++++ ...bilityCheckAffinityGuidanceAcrobatics.json | 47 +++ ...tyCheckAffinityGuidanceAnimalHandling.json | 47 +++ .../AbilityCheckAffinityGuidanceArcana.json | 47 +++ ...AbilityCheckAffinityGuidanceAthletics.json | 47 +++ ...AbilityCheckAffinityGuidanceDeception.json | 47 +++ .../AbilityCheckAffinityGuidanceHistory.json | 47 +++ .../AbilityCheckAffinityGuidanceInsight.json | 47 +++ ...lityCheckAffinityGuidanceIntimidation.json | 47 +++ ...ityCheckAffinityGuidanceInvestigation.json | 47 +++ .../AbilityCheckAffinityGuidanceMedecine.json | 47 +++ .../AbilityCheckAffinityGuidanceNature.json | 47 +++ ...bilityCheckAffinityGuidancePerception.json | 47 +++ ...ilityCheckAffinityGuidancePerformance.json | 47 +++ ...bilityCheckAffinityGuidancePersuasion.json | 47 +++ .../AbilityCheckAffinityGuidanceReligion.json | 47 +++ ...ityCheckAffinityGuidanceSleightOfHand.json | 47 +++ .../AbilityCheckAffinityGuidanceStealth.json | 47 +++ .../AbilityCheckAffinityGuidanceSurvival.json | 47 +++ .../SpellDefinition/GuidanceAcrobatics.json | 346 ++++++++++++++++++ .../GuidanceAnimalHandling.json | 346 ++++++++++++++++++ .../SpellDefinition/GuidanceArcana.json | 346 ++++++++++++++++++ .../SpellDefinition/GuidanceAthletics.json | 346 ++++++++++++++++++ .../SpellDefinition/GuidanceDeception.json | 346 ++++++++++++++++++ .../SpellDefinition/GuidanceHistory.json | 346 ++++++++++++++++++ .../SpellDefinition/GuidanceInsight.json | 346 ++++++++++++++++++ .../SpellDefinition/GuidanceIntimidation.json | 346 ++++++++++++++++++ .../GuidanceInvestigation.json | 346 ++++++++++++++++++ .../SpellDefinition/GuidanceMedecine.json | 346 ++++++++++++++++++ .../SpellDefinition/GuidanceNature.json | 346 ++++++++++++++++++ .../SpellDefinition/GuidancePerception.json | 346 ++++++++++++++++++ .../SpellDefinition/GuidancePerformance.json | 346 ++++++++++++++++++ .../SpellDefinition/GuidancePersuasion.json | 346 ++++++++++++++++++ .../SpellDefinition/GuidanceReligion.json | 346 ++++++++++++++++++ .../GuidanceSleightOfHand.json | 346 ++++++++++++++++++ .../SpellDefinition/GuidanceStealth.json | 346 ++++++++++++++++++ .../SpellDefinition/GuidanceSurvival.json | 346 ++++++++++++++++++ 56 files changed, 12458 insertions(+) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceAcrobatics.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceAnimalHandling.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceArcana.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceAthletics.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceDeception.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceHistory.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceInsight.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceIntimidation.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceInvestigation.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceMedecine.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceNature.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidancePerception.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidancePerformance.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidancePersuasion.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceReligion.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceSleightOfHand.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceStealth.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceSurvival.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceAcrobatics.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceAnimalHandling.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceArcana.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceAthletics.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceDeception.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceHistory.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceInsight.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceIntimidation.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceInvestigation.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceMedecine.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceNature.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidancePerception.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidancePerformance.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidancePersuasion.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceReligion.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceSleightOfHand.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceStealth.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceSurvival.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceAcrobatics.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceAnimalHandling.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceArcana.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceAthletics.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceDeception.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceHistory.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceInsight.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceIntimidation.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceInvestigation.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceMedecine.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceNature.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidancePerception.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidancePerformance.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidancePersuasion.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceReligion.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceSleightOfHand.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceStealth.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceSurvival.json diff --git a/Diagnostics/CE-Definitions-GuiPresentation-MissingTranslation-en.txt b/Diagnostics/CE-Definitions-GuiPresentation-MissingTranslation-en.txt index e69de29bb2..0d32dc9784 100644 --- a/Diagnostics/CE-Definitions-GuiPresentation-MissingTranslation-en.txt +++ b/Diagnostics/CE-Definitions-GuiPresentation-MissingTranslation-en.txt @@ -0,0 +1,2 @@ +ConditionGuidanceAnimalHandling Title='Condition/&ConditionGuidanceAnimalHandlingTitle'. +ConditionGuidanceAnimalHandling Description='Condition/&ConditionGuidanceAnimalHandlingDescription'. diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 3b7863fef1..802371e6f9 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -869,6 +869,24 @@ ConditionGrappleTarget ConditionDefinition ConditionDefinition 9394c6ee-622a-58b ConditionGravity ConditionDefinition ConditionDefinition 769144d3-9ceb-5f25-8e2a-9d73962ba8f6 ConditionGrayDwarfStoneStrength ConditionDefinition ConditionDefinition 589ea78b-5040-5d01-9537-dbe11d38c032 ConditionGreatWeapon ConditionDefinition ConditionDefinition 5bf3a74e-e67d-55d6-8862-91359e32db5c +ConditionGuidanceAcrobatics ConditionDefinition ConditionDefinition db73a2c7-128c-57e3-a6c5-9fdb6dbdaf9d +ConditionGuidanceAnimalHandling ConditionDefinition ConditionDefinition fd296e79-fe34-5d99-b73c-4d6124675b2e +ConditionGuidanceArcana ConditionDefinition ConditionDefinition aae2c417-5b5c-5631-b35f-37f43786724d +ConditionGuidanceAthletics ConditionDefinition ConditionDefinition 2e0d3f2b-2236-5b5a-8b8a-b4841a4bff45 +ConditionGuidanceDeception ConditionDefinition ConditionDefinition 3d4ef6c1-6751-59b4-99e6-d1b2c6a30a77 +ConditionGuidanceHistory ConditionDefinition ConditionDefinition 7432cfab-2c97-5950-a7e3-331f169bfa1d +ConditionGuidanceInsight ConditionDefinition ConditionDefinition 59640a9c-5c5a-576a-bba3-7e24bac37b8d +ConditionGuidanceIntimidation ConditionDefinition ConditionDefinition af93e888-8d17-50c2-a755-9e8a857f2b8a +ConditionGuidanceInvestigation ConditionDefinition ConditionDefinition 16a35b73-af3f-5202-b01f-007cc5310b7d +ConditionGuidanceMedecine ConditionDefinition ConditionDefinition 807a96b9-cfa5-5915-8bec-ad62286134bb +ConditionGuidanceNature ConditionDefinition ConditionDefinition 2d24988e-8061-558f-bfb4-bfb6cc124acb +ConditionGuidancePerception ConditionDefinition ConditionDefinition d56218d6-1d87-54f7-8301-aeea7f57b864 +ConditionGuidancePerformance ConditionDefinition ConditionDefinition a5906e4c-0436-5ab3-ad12-2f5e8c73476f +ConditionGuidancePersuasion ConditionDefinition ConditionDefinition a6b05bcb-8142-54c4-b0ae-d73162df982e +ConditionGuidanceReligion ConditionDefinition ConditionDefinition e2a340de-a820-5517-a1d6-70af1cc48684 +ConditionGuidanceSleightOfHand ConditionDefinition ConditionDefinition 9605dad3-bf94-5d14-a486-9d96e641fab4 +ConditionGuidanceStealth ConditionDefinition ConditionDefinition 9b815e94-1a2c-5a11-aecf-3e3f085948cf +ConditionGuidanceSurvival ConditionDefinition ConditionDefinition 0b2bb73b-7167-512f-b5b2-b42dd6dc292d ConditionHamstringBlow ConditionDefinition ConditionDefinition 0aa44d9a-7768-5522-bda2-21861cfc6910 ConditionHatredArdentHate ConditionDefinition ConditionDefinition c9abe651-5aed-5a08-96aa-e6720101c276 ConditionHeroicInfusion ConditionDefinition ConditionDefinition 6429a198-5027-5a66-8e22-494f70ed97b6 @@ -1618,6 +1636,24 @@ AbilityCheckAffinityFeatDungeonDelver FeatureDefinitionAbilityCheckAffinity Feat AbilityCheckAffinityFeatPickPocket FeatureDefinitionAbilityCheckAffinity FeatureDefinition 30c18aff-792b-5d16-9579-80acfb7fcd89 AbilityCheckAffinityGlovesOfThievery FeatureDefinitionAbilityCheckAffinity FeatureDefinition bd2e1ae0-5cea-58d0-9289-f133773bf6f5 AbilityCheckAffinityGrayDwarfStoneStrength FeatureDefinitionAbilityCheckAffinity FeatureDefinition d8074ff6-f67c-57b7-ad03-1bdc39eaa6f4 +AbilityCheckAffinityGuidanceAcrobatics FeatureDefinitionAbilityCheckAffinity FeatureDefinition 697b5995-24f2-5edd-b7f3-925ca9a18e4a +AbilityCheckAffinityGuidanceAnimalHandling FeatureDefinitionAbilityCheckAffinity FeatureDefinition e934c92c-cca0-5e88-82bc-9bd022ae29bb +AbilityCheckAffinityGuidanceArcana FeatureDefinitionAbilityCheckAffinity FeatureDefinition 23a4c8d5-d980-541a-a136-7db769265048 +AbilityCheckAffinityGuidanceAthletics FeatureDefinitionAbilityCheckAffinity FeatureDefinition 82ad0479-861c-50c4-8667-7b72adde4ae8 +AbilityCheckAffinityGuidanceDeception FeatureDefinitionAbilityCheckAffinity FeatureDefinition 1a97bf31-18a6-58f4-80a1-99c015ebfdd1 +AbilityCheckAffinityGuidanceHistory FeatureDefinitionAbilityCheckAffinity FeatureDefinition 3245286f-9adf-55e0-9f8a-f83239983e2d +AbilityCheckAffinityGuidanceInsight FeatureDefinitionAbilityCheckAffinity FeatureDefinition b098c984-7555-54ff-b96f-f8b6043a539f +AbilityCheckAffinityGuidanceIntimidation FeatureDefinitionAbilityCheckAffinity FeatureDefinition e7f692ad-b231-528a-a725-e862ec33ea77 +AbilityCheckAffinityGuidanceInvestigation FeatureDefinitionAbilityCheckAffinity FeatureDefinition dd85e235-b591-5d8e-95b9-05a439a6c57c +AbilityCheckAffinityGuidanceMedecine FeatureDefinitionAbilityCheckAffinity FeatureDefinition 804a595a-2da1-56b0-bd20-d9d41ec51d65 +AbilityCheckAffinityGuidanceNature FeatureDefinitionAbilityCheckAffinity FeatureDefinition 6ceba102-960f-5247-a836-0677e4600fee +AbilityCheckAffinityGuidancePerception FeatureDefinitionAbilityCheckAffinity FeatureDefinition e2ba76d5-a6ac-5407-afb8-148fa6fdd0cf +AbilityCheckAffinityGuidancePerformance FeatureDefinitionAbilityCheckAffinity FeatureDefinition f7a9418e-49dd-5163-98f8-ba46b20bedab +AbilityCheckAffinityGuidancePersuasion FeatureDefinitionAbilityCheckAffinity FeatureDefinition 21b08416-aee6-5b94-abb7-7582c03598f0 +AbilityCheckAffinityGuidanceReligion FeatureDefinitionAbilityCheckAffinity FeatureDefinition 95df67a0-7fa5-5a5c-97cf-71d0b11ad179 +AbilityCheckAffinityGuidanceSleightOfHand FeatureDefinitionAbilityCheckAffinity FeatureDefinition 2dc8d080-b5c5-5a92-83aa-ab3fff41e8fb +AbilityCheckAffinityGuidanceStealth FeatureDefinitionAbilityCheckAffinity FeatureDefinition bd6b6a2a-8ff0-5e19-bd6d-3c6c8501184b +AbilityCheckAffinityGuidanceSurvival FeatureDefinitionAbilityCheckAffinity FeatureDefinition 9ccf15a7-2aac-5a51-b39c-4d0a3bb7e54d AbilityCheckAffinityInnovationArmorInfiltratorMode FeatureDefinitionAbilityCheckAffinity FeatureDefinition 8befdffd-6ce1-5b48-b4ea-07e246fb2539 AbilityCheckAffinityInnovationWeaponSummonSteelDefenderSkills FeatureDefinitionAbilityCheckAffinity FeatureDefinition 14a673f1-254d-544e-bbbe-7988ddbeeecc AbilityCheckAffinityInvocationPerniciousCloak FeatureDefinitionAbilityCheckAffinity FeatureDefinition 36dbc460-a18e-529a-a6bc-9e5340c00cab @@ -4307,6 +4343,24 @@ AbilityCheckAffinityFeatDungeonDelver FeatureDefinitionAbilityCheckAffinity Feat AbilityCheckAffinityFeatPickPocket FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 30c18aff-792b-5d16-9579-80acfb7fcd89 AbilityCheckAffinityGlovesOfThievery FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity bd2e1ae0-5cea-58d0-9289-f133773bf6f5 AbilityCheckAffinityGrayDwarfStoneStrength FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity d8074ff6-f67c-57b7-ad03-1bdc39eaa6f4 +AbilityCheckAffinityGuidanceAcrobatics FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 697b5995-24f2-5edd-b7f3-925ca9a18e4a +AbilityCheckAffinityGuidanceAnimalHandling FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity e934c92c-cca0-5e88-82bc-9bd022ae29bb +AbilityCheckAffinityGuidanceArcana FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 23a4c8d5-d980-541a-a136-7db769265048 +AbilityCheckAffinityGuidanceAthletics FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 82ad0479-861c-50c4-8667-7b72adde4ae8 +AbilityCheckAffinityGuidanceDeception FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 1a97bf31-18a6-58f4-80a1-99c015ebfdd1 +AbilityCheckAffinityGuidanceHistory FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 3245286f-9adf-55e0-9f8a-f83239983e2d +AbilityCheckAffinityGuidanceInsight FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity b098c984-7555-54ff-b96f-f8b6043a539f +AbilityCheckAffinityGuidanceIntimidation FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity e7f692ad-b231-528a-a725-e862ec33ea77 +AbilityCheckAffinityGuidanceInvestigation FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity dd85e235-b591-5d8e-95b9-05a439a6c57c +AbilityCheckAffinityGuidanceMedecine FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 804a595a-2da1-56b0-bd20-d9d41ec51d65 +AbilityCheckAffinityGuidanceNature FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 6ceba102-960f-5247-a836-0677e4600fee +AbilityCheckAffinityGuidancePerception FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity e2ba76d5-a6ac-5407-afb8-148fa6fdd0cf +AbilityCheckAffinityGuidancePerformance FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity f7a9418e-49dd-5163-98f8-ba46b20bedab +AbilityCheckAffinityGuidancePersuasion FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 21b08416-aee6-5b94-abb7-7582c03598f0 +AbilityCheckAffinityGuidanceReligion FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 95df67a0-7fa5-5a5c-97cf-71d0b11ad179 +AbilityCheckAffinityGuidanceSleightOfHand FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 2dc8d080-b5c5-5a92-83aa-ab3fff41e8fb +AbilityCheckAffinityGuidanceStealth FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity bd6b6a2a-8ff0-5e19-bd6d-3c6c8501184b +AbilityCheckAffinityGuidanceSurvival FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 9ccf15a7-2aac-5a51-b39c-4d0a3bb7e54d AbilityCheckAffinityInnovationArmorInfiltratorMode FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 8befdffd-6ce1-5b48-b4ea-07e246fb2539 AbilityCheckAffinityInnovationWeaponSummonSteelDefenderSkills FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 14a673f1-254d-544e-bbbe-7988ddbeeecc AbilityCheckAffinityInvocationPerniciousCloak FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 36dbc460-a18e-529a-a6bc-9e5340c00cab @@ -4567,6 +4621,24 @@ AbilityCheckAffinityFeatDungeonDelver FeatureDefinitionAbilityCheckAffinity Feat AbilityCheckAffinityFeatPickPocket FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 30c18aff-792b-5d16-9579-80acfb7fcd89 AbilityCheckAffinityGlovesOfThievery FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity bd2e1ae0-5cea-58d0-9289-f133773bf6f5 AbilityCheckAffinityGrayDwarfStoneStrength FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity d8074ff6-f67c-57b7-ad03-1bdc39eaa6f4 +AbilityCheckAffinityGuidanceAcrobatics FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 697b5995-24f2-5edd-b7f3-925ca9a18e4a +AbilityCheckAffinityGuidanceAnimalHandling FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity e934c92c-cca0-5e88-82bc-9bd022ae29bb +AbilityCheckAffinityGuidanceArcana FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 23a4c8d5-d980-541a-a136-7db769265048 +AbilityCheckAffinityGuidanceAthletics FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 82ad0479-861c-50c4-8667-7b72adde4ae8 +AbilityCheckAffinityGuidanceDeception FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 1a97bf31-18a6-58f4-80a1-99c015ebfdd1 +AbilityCheckAffinityGuidanceHistory FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 3245286f-9adf-55e0-9f8a-f83239983e2d +AbilityCheckAffinityGuidanceInsight FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity b098c984-7555-54ff-b96f-f8b6043a539f +AbilityCheckAffinityGuidanceIntimidation FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity e7f692ad-b231-528a-a725-e862ec33ea77 +AbilityCheckAffinityGuidanceInvestigation FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity dd85e235-b591-5d8e-95b9-05a439a6c57c +AbilityCheckAffinityGuidanceMedecine FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 804a595a-2da1-56b0-bd20-d9d41ec51d65 +AbilityCheckAffinityGuidanceNature FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 6ceba102-960f-5247-a836-0677e4600fee +AbilityCheckAffinityGuidancePerception FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity e2ba76d5-a6ac-5407-afb8-148fa6fdd0cf +AbilityCheckAffinityGuidancePerformance FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity f7a9418e-49dd-5163-98f8-ba46b20bedab +AbilityCheckAffinityGuidancePersuasion FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 21b08416-aee6-5b94-abb7-7582c03598f0 +AbilityCheckAffinityGuidanceReligion FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 95df67a0-7fa5-5a5c-97cf-71d0b11ad179 +AbilityCheckAffinityGuidanceSleightOfHand FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 2dc8d080-b5c5-5a92-83aa-ab3fff41e8fb +AbilityCheckAffinityGuidanceStealth FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity bd6b6a2a-8ff0-5e19-bd6d-3c6c8501184b +AbilityCheckAffinityGuidanceSurvival FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 9ccf15a7-2aac-5a51-b39c-4d0a3bb7e54d AbilityCheckAffinityInnovationArmorInfiltratorMode FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 8befdffd-6ce1-5b48-b4ea-07e246fb2539 AbilityCheckAffinityInnovationWeaponSummonSteelDefenderSkills FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 14a673f1-254d-544e-bbbe-7988ddbeeecc AbilityCheckAffinityInvocationPerniciousCloak FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 36dbc460-a18e-529a-a6bc-9e5340c00cab @@ -12329,6 +12401,24 @@ GiftOfAlacrity SpellDefinition SpellDefinition cfc1affd-8762-5031-b552-4a48251d7 Glibness SpellDefinition SpellDefinition 6fff4ed6-1408-5410-9bb6-16392e1e6b15 GravityFissure SpellDefinition SpellDefinition e230eac9-00f7-5e9f-86f8-51c2796721cd GravitySinkhole SpellDefinition SpellDefinition 42bea70d-ddc5-5295-8c18-c6b6b9c3abf6 +GuidanceAcrobatics SpellDefinition SpellDefinition 0b67e602-8cdd-5895-b2eb-79fe105bcfa8 +GuidanceAnimalHandling SpellDefinition SpellDefinition d3e9541e-66c4-5341-93c7-8651d1176b50 +GuidanceArcana SpellDefinition SpellDefinition 04833df6-7e85-5a5e-afe8-30c75327e20f +GuidanceAthletics SpellDefinition SpellDefinition b53259e2-acf7-5bfa-947e-2a69b75420f6 +GuidanceDeception SpellDefinition SpellDefinition 83175a5b-cf19-543c-935f-fc14f15959f7 +GuidanceHistory SpellDefinition SpellDefinition 24af67aa-68f3-5c12-84cb-461d6e7b5ad2 +GuidanceInsight SpellDefinition SpellDefinition b4bfb968-db84-566b-a6e3-12dcb89ad513 +GuidanceIntimidation SpellDefinition SpellDefinition 63f9dc73-d0b9-5c14-ad02-29771f7542b2 +GuidanceInvestigation SpellDefinition SpellDefinition fca727f4-84dd-51e6-a460-fafe1a26467c +GuidanceMedecine SpellDefinition SpellDefinition dc15b395-4e7f-5139-a42a-72ecf2acab48 +GuidanceNature SpellDefinition SpellDefinition 4d4c51ea-243f-5a9d-9a63-65f588be5aa9 +GuidancePerception SpellDefinition SpellDefinition 9af80be7-7041-52d5-bc39-2fbb6528721b +GuidancePerformance SpellDefinition SpellDefinition 35b200b1-35d6-50b4-ab07-d218e83ff4a0 +GuidancePersuasion SpellDefinition SpellDefinition 71808d45-db86-54c5-a9a9-f011a0fd9781 +GuidanceReligion SpellDefinition SpellDefinition 0e37999a-296e-5710-b3ff-62aa7dd870d8 +GuidanceSleightOfHand SpellDefinition SpellDefinition 89ca1a5a-79fb-5d09-acb5-6254df3c87f8 +GuidanceStealth SpellDefinition SpellDefinition 2dd8187b-5c3f-5c08-afd2-b37d7efd54aa +GuidanceSurvival SpellDefinition SpellDefinition b06df896-f23c-5b62-bdf5-bdfe6dd3dd9d HeroicInfusion SpellDefinition SpellDefinition cf5c6a2f-ae52-59d6-a88d-31bb5d00c17d HolyWeapon SpellDefinition SpellDefinition ed4a2ccf-c199-5f4c-bfc3-7bc8a584e4ce HungerOfTheVoid SpellDefinition SpellDefinition fa794ede-4149-54ed-914d-f25cd55fb5b4 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceAcrobatics.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceAcrobatics.json new file mode 100644 index 0000000000..3fe30181a9 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceAcrobatics.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidanceAcrobatics:697b5995-24f2-5edd-b7f3-925ca9a18e4a" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidanceAcrobaticsTitle", + "description": "Condition/&ConditionGuidanceAcrobaticsDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "db73a2c7-128c-57e3-a6c5-9fdb6dbdaf9d", + "contentPack": 9999, + "name": "ConditionGuidanceAcrobatics" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceAnimalHandling.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceAnimalHandling.json new file mode 100644 index 0000000000..452bce2f89 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceAnimalHandling.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidanceAnimalHandling:e934c92c-cca0-5e88-82bc-9bd022ae29bb" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidanceAnimalHandlingTitle", + "description": "Condition/&ConditionGuidanceAnimalHandlingDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "fd296e79-fe34-5d99-b73c-4d6124675b2e", + "contentPack": 9999, + "name": "ConditionGuidanceAnimalHandling" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceArcana.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceArcana.json new file mode 100644 index 0000000000..b423cf6f70 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceArcana.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidanceArcana:23a4c8d5-d980-541a-a136-7db769265048" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidanceArcanaTitle", + "description": "Condition/&ConditionGuidanceArcanaDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "aae2c417-5b5c-5631-b35f-37f43786724d", + "contentPack": 9999, + "name": "ConditionGuidanceArcana" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceAthletics.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceAthletics.json new file mode 100644 index 0000000000..3cf800970d --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceAthletics.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidanceAthletics:82ad0479-861c-50c4-8667-7b72adde4ae8" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidanceAthleticsTitle", + "description": "Condition/&ConditionGuidanceAthleticsDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "2e0d3f2b-2236-5b5a-8b8a-b4841a4bff45", + "contentPack": 9999, + "name": "ConditionGuidanceAthletics" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceDeception.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceDeception.json new file mode 100644 index 0000000000..2ec5345ce9 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceDeception.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidanceDeception:1a97bf31-18a6-58f4-80a1-99c015ebfdd1" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidanceDeceptionTitle", + "description": "Condition/&ConditionGuidanceDeceptionDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "3d4ef6c1-6751-59b4-99e6-d1b2c6a30a77", + "contentPack": 9999, + "name": "ConditionGuidanceDeception" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceHistory.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceHistory.json new file mode 100644 index 0000000000..987216eedf --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceHistory.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidanceHistory:3245286f-9adf-55e0-9f8a-f83239983e2d" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidanceHistoryTitle", + "description": "Condition/&ConditionGuidanceHistoryDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "7432cfab-2c97-5950-a7e3-331f169bfa1d", + "contentPack": 9999, + "name": "ConditionGuidanceHistory" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceInsight.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceInsight.json new file mode 100644 index 0000000000..4acae4427c --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceInsight.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidanceInsight:b098c984-7555-54ff-b96f-f8b6043a539f" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidanceInsightTitle", + "description": "Condition/&ConditionGuidanceInsightDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "59640a9c-5c5a-576a-bba3-7e24bac37b8d", + "contentPack": 9999, + "name": "ConditionGuidanceInsight" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceIntimidation.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceIntimidation.json new file mode 100644 index 0000000000..8b59e65244 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceIntimidation.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidanceIntimidation:e7f692ad-b231-528a-a725-e862ec33ea77" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidanceIntimidationTitle", + "description": "Condition/&ConditionGuidanceIntimidationDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "af93e888-8d17-50c2-a755-9e8a857f2b8a", + "contentPack": 9999, + "name": "ConditionGuidanceIntimidation" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceInvestigation.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceInvestigation.json new file mode 100644 index 0000000000..138597be06 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceInvestigation.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidanceInvestigation:dd85e235-b591-5d8e-95b9-05a439a6c57c" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidanceInvestigationTitle", + "description": "Condition/&ConditionGuidanceInvestigationDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "16a35b73-af3f-5202-b01f-007cc5310b7d", + "contentPack": 9999, + "name": "ConditionGuidanceInvestigation" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceMedecine.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceMedecine.json new file mode 100644 index 0000000000..849ca1ceae --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceMedecine.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidanceMedecine:804a595a-2da1-56b0-bd20-d9d41ec51d65" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidanceMedecineTitle", + "description": "Condition/&ConditionGuidanceMedecineDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "807a96b9-cfa5-5915-8bec-ad62286134bb", + "contentPack": 9999, + "name": "ConditionGuidanceMedecine" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceNature.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceNature.json new file mode 100644 index 0000000000..abd585d5fa --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceNature.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidanceNature:6ceba102-960f-5247-a836-0677e4600fee" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidanceNatureTitle", + "description": "Condition/&ConditionGuidanceNatureDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "2d24988e-8061-558f-bfb4-bfb6cc124acb", + "contentPack": 9999, + "name": "ConditionGuidanceNature" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidancePerception.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidancePerception.json new file mode 100644 index 0000000000..44882ae8e2 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidancePerception.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidancePerception:e2ba76d5-a6ac-5407-afb8-148fa6fdd0cf" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidancePerceptionTitle", + "description": "Condition/&ConditionGuidancePerceptionDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "d56218d6-1d87-54f7-8301-aeea7f57b864", + "contentPack": 9999, + "name": "ConditionGuidancePerception" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidancePerformance.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidancePerformance.json new file mode 100644 index 0000000000..5f6465a4a4 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidancePerformance.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidancePerformance:f7a9418e-49dd-5163-98f8-ba46b20bedab" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidancePerformanceTitle", + "description": "Condition/&ConditionGuidancePerformanceDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "a5906e4c-0436-5ab3-ad12-2f5e8c73476f", + "contentPack": 9999, + "name": "ConditionGuidancePerformance" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidancePersuasion.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidancePersuasion.json new file mode 100644 index 0000000000..080b669be0 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidancePersuasion.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidancePersuasion:21b08416-aee6-5b94-abb7-7582c03598f0" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidancePersuasionTitle", + "description": "Condition/&ConditionGuidancePersuasionDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "a6b05bcb-8142-54c4-b0ae-d73162df982e", + "contentPack": 9999, + "name": "ConditionGuidancePersuasion" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceReligion.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceReligion.json new file mode 100644 index 0000000000..e0f3e66ebb --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceReligion.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidanceReligion:95df67a0-7fa5-5a5c-97cf-71d0b11ad179" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidanceReligionTitle", + "description": "Condition/&ConditionGuidanceReligionDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "e2a340de-a820-5517-a1d6-70af1cc48684", + "contentPack": 9999, + "name": "ConditionGuidanceReligion" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceSleightOfHand.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceSleightOfHand.json new file mode 100644 index 0000000000..98ba096e07 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceSleightOfHand.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidanceSleightOfHand:2dc8d080-b5c5-5a92-83aa-ab3fff41e8fb" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidanceSleightOfHandTitle", + "description": "Condition/&ConditionGuidanceSleightOfHandDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "9605dad3-bf94-5d14-a486-9d96e641fab4", + "contentPack": 9999, + "name": "ConditionGuidanceSleightOfHand" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceStealth.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceStealth.json new file mode 100644 index 0000000000..d70ec3974a --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceStealth.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidanceStealth:bd6b6a2a-8ff0-5e19-bd6d-3c6c8501184b" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidanceStealthTitle", + "description": "Condition/&ConditionGuidanceStealthDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "9b815e94-1a2c-5a11-aecf-3e3f085948cf", + "contentPack": 9999, + "name": "ConditionGuidanceStealth" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceSurvival.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceSurvival.json new file mode 100644 index 0000000000..c76e21b0be --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGuidanceSurvival.json @@ -0,0 +1,294 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AbilityCheckAffinityGuidanceSurvival:9ccf15a7-2aac-5a51-b39c-4d0a3bb7e54d" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "None" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Condition/&ConditionGuidanceSurvivalTitle", + "description": "Condition/&ConditionGuidanceSurvivalDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "f13223f6db6229143b50b9afcee438ce", + "m_SubObjectName": "ConditionGuided", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "0b2bb73b-7167-512f-b5b2-b42dd6dc292d", + "contentPack": 9999, + "name": "ConditionGuidanceSurvival" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceAcrobatics.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceAcrobatics.json new file mode 100644 index 0000000000..4557ea3573 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceAcrobatics.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Dexterity", + "proficiencyName": "Acrobatics", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "697b5995-24f2-5edd-b7f3-925ca9a18e4a", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidanceAcrobatics" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceAnimalHandling.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceAnimalHandling.json new file mode 100644 index 0000000000..670677aca3 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceAnimalHandling.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Wisdom", + "proficiencyName": "AnimalHandling", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "e934c92c-cca0-5e88-82bc-9bd022ae29bb", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidanceAnimalHandling" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceArcana.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceArcana.json new file mode 100644 index 0000000000..520157428c --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceArcana.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Intelligence", + "proficiencyName": "Arcana", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "23a4c8d5-d980-541a-a136-7db769265048", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidanceArcana" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceAthletics.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceAthletics.json new file mode 100644 index 0000000000..c8d843cf37 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceAthletics.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Strength", + "proficiencyName": "Athletics", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "82ad0479-861c-50c4-8667-7b72adde4ae8", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidanceAthletics" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceDeception.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceDeception.json new file mode 100644 index 0000000000..d7e31d45e2 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceDeception.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Charisma", + "proficiencyName": "Deception", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "1a97bf31-18a6-58f4-80a1-99c015ebfdd1", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidanceDeception" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceHistory.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceHistory.json new file mode 100644 index 0000000000..56aa1cade1 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceHistory.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Intelligence", + "proficiencyName": "History", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "3245286f-9adf-55e0-9f8a-f83239983e2d", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidanceHistory" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceInsight.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceInsight.json new file mode 100644 index 0000000000..814c0a9b4f --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceInsight.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Wisdom", + "proficiencyName": "Insight", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "b098c984-7555-54ff-b96f-f8b6043a539f", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidanceInsight" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceIntimidation.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceIntimidation.json new file mode 100644 index 0000000000..3477f364e2 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceIntimidation.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Charisma", + "proficiencyName": "Intimidation", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "e7f692ad-b231-528a-a725-e862ec33ea77", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidanceIntimidation" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceInvestigation.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceInvestigation.json new file mode 100644 index 0000000000..e20ab17398 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceInvestigation.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Intelligence", + "proficiencyName": "Investigation", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "dd85e235-b591-5d8e-95b9-05a439a6c57c", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidanceInvestigation" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceMedecine.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceMedecine.json new file mode 100644 index 0000000000..74cc83ca3e --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceMedecine.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Wisdom", + "proficiencyName": "Medecine", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "804a595a-2da1-56b0-bd20-d9d41ec51d65", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidanceMedecine" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceNature.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceNature.json new file mode 100644 index 0000000000..3950795c52 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceNature.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Intelligence", + "proficiencyName": "Nature", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "6ceba102-960f-5247-a836-0677e4600fee", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidanceNature" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidancePerception.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidancePerception.json new file mode 100644 index 0000000000..75c202c607 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidancePerception.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Wisdom", + "proficiencyName": "Perception", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "e2ba76d5-a6ac-5407-afb8-148fa6fdd0cf", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidancePerception" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidancePerformance.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidancePerformance.json new file mode 100644 index 0000000000..23496a69e2 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidancePerformance.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Charisma", + "proficiencyName": "Performance", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "f7a9418e-49dd-5163-98f8-ba46b20bedab", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidancePerformance" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidancePersuasion.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidancePersuasion.json new file mode 100644 index 0000000000..1441b0a480 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidancePersuasion.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Charisma", + "proficiencyName": "Persuasion", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "21b08416-aee6-5b94-abb7-7582c03598f0", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidancePersuasion" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceReligion.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceReligion.json new file mode 100644 index 0000000000..61f6c0e825 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceReligion.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Intelligence", + "proficiencyName": "Religion", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "95df67a0-7fa5-5a5c-97cf-71d0b11ad179", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidanceReligion" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceSleightOfHand.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceSleightOfHand.json new file mode 100644 index 0000000000..6afb1e5044 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceSleightOfHand.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Dexterity", + "proficiencyName": "SleightOfHand", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "2dc8d080-b5c5-5a92-83aa-ab3fff41e8fb", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidanceSleightOfHand" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceStealth.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceStealth.json new file mode 100644 index 0000000000..059ad1d502 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceStealth.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Dexterity", + "proficiencyName": "Stealth", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "bd6b6a2a-8ff0-5e19-bd6d-3c6c8501184b", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidanceStealth" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceSurvival.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceSurvival.json new file mode 100644 index 0000000000..13e4ec232c --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckAffinityGuidanceSurvival.json @@ -0,0 +1,47 @@ +{ + "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", + "useControllerAbilityChecks": false, + "affinityGroups": [ + { + "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", + "abilityScoreName": "Wisdom", + "proficiencyName": "Survival", + "affinity": "None", + "abilityCheckGroupOperation": "AddDie", + "abilityCheckModifierDiceNumber": 1, + "abilityCheckModifierDieType": "D4", + "abilityCheckContext": "None", + "lightingContext": "Irrelevant" + } + ], + "substractBardicDieRoll": false, + "myselfFamilyRestrictions": [], + "otherCharacterFamilyRestrictions": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "9ccf15a7-2aac-5a51-b39c-4d0a3bb7e54d", + "contentPack": 9999, + "name": "AbilityCheckAffinityGuidanceSurvival" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceAcrobatics.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceAcrobatics.json new file mode 100644 index 0000000000..f8a8e1f10a --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceAcrobatics.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidanceAcrobatics", + "conditionDefinition": "Definition:ConditionGuidanceAcrobatics:db73a2c7-128c-57e3-a6c5-9fdb6dbdaf9d", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidanceAcrobaticsTitle", + "description": "Spell/&GuidanceAcrobaticsDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "0b67e602-8cdd-5895-b2eb-79fe105bcfa8", + "contentPack": 9999, + "name": "GuidanceAcrobatics" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceAnimalHandling.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceAnimalHandling.json new file mode 100644 index 0000000000..c5c09f6729 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceAnimalHandling.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidanceAnimalHandling", + "conditionDefinition": "Definition:ConditionGuidanceAnimalHandling:fd296e79-fe34-5d99-b73c-4d6124675b2e", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidanceAnimalHandlingTitle", + "description": "Spell/&GuidanceAnimalHandlingDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "d3e9541e-66c4-5341-93c7-8651d1176b50", + "contentPack": 9999, + "name": "GuidanceAnimalHandling" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceArcana.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceArcana.json new file mode 100644 index 0000000000..bdded99d2d --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceArcana.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidanceArcana", + "conditionDefinition": "Definition:ConditionGuidanceArcana:aae2c417-5b5c-5631-b35f-37f43786724d", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidanceArcanaTitle", + "description": "Spell/&GuidanceArcanaDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "04833df6-7e85-5a5e-afe8-30c75327e20f", + "contentPack": 9999, + "name": "GuidanceArcana" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceAthletics.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceAthletics.json new file mode 100644 index 0000000000..8f5b2a8be9 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceAthletics.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidanceAthletics", + "conditionDefinition": "Definition:ConditionGuidanceAthletics:2e0d3f2b-2236-5b5a-8b8a-b4841a4bff45", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidanceAthleticsTitle", + "description": "Spell/&GuidanceAthleticsDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "b53259e2-acf7-5bfa-947e-2a69b75420f6", + "contentPack": 9999, + "name": "GuidanceAthletics" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceDeception.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceDeception.json new file mode 100644 index 0000000000..6e2fc8a150 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceDeception.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidanceDeception", + "conditionDefinition": "Definition:ConditionGuidanceDeception:3d4ef6c1-6751-59b4-99e6-d1b2c6a30a77", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidanceDeceptionTitle", + "description": "Spell/&GuidanceDeceptionDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "83175a5b-cf19-543c-935f-fc14f15959f7", + "contentPack": 9999, + "name": "GuidanceDeception" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceHistory.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceHistory.json new file mode 100644 index 0000000000..3fa99e7d45 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceHistory.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidanceHistory", + "conditionDefinition": "Definition:ConditionGuidanceHistory:7432cfab-2c97-5950-a7e3-331f169bfa1d", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidanceHistoryTitle", + "description": "Spell/&GuidanceHistoryDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "24af67aa-68f3-5c12-84cb-461d6e7b5ad2", + "contentPack": 9999, + "name": "GuidanceHistory" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceInsight.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceInsight.json new file mode 100644 index 0000000000..d87e05d466 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceInsight.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidanceInsight", + "conditionDefinition": "Definition:ConditionGuidanceInsight:59640a9c-5c5a-576a-bba3-7e24bac37b8d", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidanceInsightTitle", + "description": "Spell/&GuidanceInsightDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "b4bfb968-db84-566b-a6e3-12dcb89ad513", + "contentPack": 9999, + "name": "GuidanceInsight" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceIntimidation.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceIntimidation.json new file mode 100644 index 0000000000..fa284f7643 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceIntimidation.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidanceIntimidation", + "conditionDefinition": "Definition:ConditionGuidanceIntimidation:af93e888-8d17-50c2-a755-9e8a857f2b8a", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidanceIntimidationTitle", + "description": "Spell/&GuidanceIntimidationDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "63f9dc73-d0b9-5c14-ad02-29771f7542b2", + "contentPack": 9999, + "name": "GuidanceIntimidation" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceInvestigation.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceInvestigation.json new file mode 100644 index 0000000000..ef9f85ee43 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceInvestigation.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidanceInvestigation", + "conditionDefinition": "Definition:ConditionGuidanceInvestigation:16a35b73-af3f-5202-b01f-007cc5310b7d", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidanceInvestigationTitle", + "description": "Spell/&GuidanceInvestigationDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "fca727f4-84dd-51e6-a460-fafe1a26467c", + "contentPack": 9999, + "name": "GuidanceInvestigation" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceMedecine.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceMedecine.json new file mode 100644 index 0000000000..a11ce4f2c7 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceMedecine.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidanceMedecine", + "conditionDefinition": "Definition:ConditionGuidanceMedecine:807a96b9-cfa5-5915-8bec-ad62286134bb", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidanceMedecineTitle", + "description": "Spell/&GuidanceMedecineDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "dc15b395-4e7f-5139-a42a-72ecf2acab48", + "contentPack": 9999, + "name": "GuidanceMedecine" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceNature.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceNature.json new file mode 100644 index 0000000000..c7ceff9e98 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceNature.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidanceNature", + "conditionDefinition": "Definition:ConditionGuidanceNature:2d24988e-8061-558f-bfb4-bfb6cc124acb", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidanceNatureTitle", + "description": "Spell/&GuidanceNatureDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "4d4c51ea-243f-5a9d-9a63-65f588be5aa9", + "contentPack": 9999, + "name": "GuidanceNature" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidancePerception.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidancePerception.json new file mode 100644 index 0000000000..890bb06bd2 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidancePerception.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidancePerception", + "conditionDefinition": "Definition:ConditionGuidancePerception:d56218d6-1d87-54f7-8301-aeea7f57b864", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidancePerceptionTitle", + "description": "Spell/&GuidancePerceptionDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "9af80be7-7041-52d5-bc39-2fbb6528721b", + "contentPack": 9999, + "name": "GuidancePerception" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidancePerformance.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidancePerformance.json new file mode 100644 index 0000000000..87f5b6a8a0 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidancePerformance.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidancePerformance", + "conditionDefinition": "Definition:ConditionGuidancePerformance:a5906e4c-0436-5ab3-ad12-2f5e8c73476f", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidancePerformanceTitle", + "description": "Spell/&GuidancePerformanceDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "35b200b1-35d6-50b4-ab07-d218e83ff4a0", + "contentPack": 9999, + "name": "GuidancePerformance" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidancePersuasion.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidancePersuasion.json new file mode 100644 index 0000000000..e95b6bb54d --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidancePersuasion.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidancePersuasion", + "conditionDefinition": "Definition:ConditionGuidancePersuasion:a6b05bcb-8142-54c4-b0ae-d73162df982e", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidancePersuasionTitle", + "description": "Spell/&GuidancePersuasionDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "71808d45-db86-54c5-a9a9-f011a0fd9781", + "contentPack": 9999, + "name": "GuidancePersuasion" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceReligion.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceReligion.json new file mode 100644 index 0000000000..6ef3f55cd5 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceReligion.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidanceReligion", + "conditionDefinition": "Definition:ConditionGuidanceReligion:e2a340de-a820-5517-a1d6-70af1cc48684", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidanceReligionTitle", + "description": "Spell/&GuidanceReligionDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "0e37999a-296e-5710-b3ff-62aa7dd870d8", + "contentPack": 9999, + "name": "GuidanceReligion" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceSleightOfHand.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceSleightOfHand.json new file mode 100644 index 0000000000..ea79b39637 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceSleightOfHand.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidanceSleightOfHand", + "conditionDefinition": "Definition:ConditionGuidanceSleightOfHand:9605dad3-bf94-5d14-a486-9d96e641fab4", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidanceSleightOfHandTitle", + "description": "Spell/&GuidanceSleightOfHandDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "89ca1a5a-79fb-5d09-acb5-6254df3c87f8", + "contentPack": 9999, + "name": "GuidanceSleightOfHand" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceStealth.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceStealth.json new file mode 100644 index 0000000000..2295d0f8d0 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceStealth.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidanceStealth", + "conditionDefinition": "Definition:ConditionGuidanceStealth:9b815e94-1a2c-5a11-aecf-3e3f085948cf", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidanceStealthTitle", + "description": "Spell/&GuidanceStealthDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "2dd8187b-5c3f-5c08-afd2-b37d7efd54aa", + "contentPack": 9999, + "name": "GuidanceStealth" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceSurvival.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceSurvival.json new file mode 100644 index 0000000000..d349053513 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GuidanceSurvival.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": false, + "schoolOfMagic": "SchoolDivination", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGuidanceSurvival", + "conditionDefinition": "Definition:ConditionGuidanceSurvival:0b2bb73b-7167-512f-b5b2-b42dd6dc292d", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6aae1d0efdb832644a0cb391f8ca694b", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e8465e6ac0ce301439f8108686d7c4f6", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "ed176c7e0f8312541a9a98eb5bf58bac", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "cf559b01e96f41c4ea3c5c10bfc3d231", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GuidanceSurvivalTitle", + "description": "Spell/&GuidanceSurvivalDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "c998113ef5d03374ab0a5542bc3b8d52", + "m_SubObjectName": "Guidance", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "b06df896-f23c-5b62-bdf5-bdfe6dd3dd9d", + "contentPack": 9999, + "name": "GuidanceSurvival" +} \ No newline at end of file From ae81bee786d34e30159076d3897bec0c0fb4b021 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 10:02:07 -0800 Subject: [PATCH 45/85] continue models reorg --- .../Displays/ClassesDisplay.cs | 62 +-- .../Displays/CraftingAndItems.cs | 6 +- .../Displays/GeneralDisplay.cs | 100 ++--- .../Displays/RulesDisplay.cs | 18 +- .../Displays/SpellsDisplay.cs | 14 +- .../Displays/SubclassesDisplay.cs | 2 +- .../Models/BootContext.cs | 2 +- .../Models/CharacterContext.cs | 62 +-- .../Models/GrappleContext.cs | 14 +- .../Models/LightingAndObscurementContext.cs | 2 +- .../Models/SrdAndHouseRulesContext.cs | 272 ------------- .../Models/Tabletop2014Context.cs | 371 ++++++++++++++++++ ...neDndContext.cs => Tabletop2024Context.cs} | 4 +- .../NarrativeDirectionManagerPatcher.cs | 2 +- .../Spells/SpellBuildersLevel01.cs | 2 +- .../Subclasses/RangerWildMaster.cs | 12 +- 16 files changed, 487 insertions(+), 458 deletions(-) create mode 100644 SolastaUnfinishedBusiness/Models/Tabletop2014Context.cs rename SolastaUnfinishedBusiness/Models/{OneDndContext.cs => Tabletop2024Context.cs} (99%) diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index 78d912025d..b1c66a7538 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -30,42 +30,42 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&ChangeBardicInspirationDurationToOneHour"), ref toggle, UI.AutoWidth())) { Main.Settings.ChangeBardicInspirationDurationToOneHour = toggle; - OneDndContext.SwitchOneDndChangeBardicInspirationDurationToOneHour(); + Tabletop2024Context.SwitchOneDndChangeBardicInspirationDurationToOneHour(); } toggle = Main.Settings.EnableBardExpertiseOneLevelBefore; if (UI.Toggle(Gui.Localize("ModUi/&EnableBardExpertiseOneLevelBefore"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardExpertiseOneLevelBefore = toggle; - OneDndContext.SwitchOneDndEnableBardExpertiseOneLevelBefore(); + Tabletop2024Context.SwitchOneDndEnableBardExpertiseOneLevelBefore(); } toggle = Main.Settings.EnableBardSuperiorInspirationAtLevel18; if (UI.Toggle(Gui.Localize("ModUi/&EnableBardSuperiorInspirationAtLevel18"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardSuperiorInspirationAtLevel18 = toggle; - OneDndContext.SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); + Tabletop2024Context.SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); } toggle = Main.Settings.EnableBardWordsOfCreationAtLevel20; if (UI.Toggle(Gui.Localize("ModUi/&EnableBardWordsOfCreationAtLevel20"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardWordsOfCreationAtLevel20 = toggle; - OneDndContext.SwitchOneDndEnableBardWordsOfCreationAtLevel20(); + Tabletop2024Context.SwitchOneDndEnableBardWordsOfCreationAtLevel20(); } toggle = Main.Settings.RemoveBardMagicalSecretAt14And18; if (UI.Toggle(Gui.Localize("ModUi/&RemoveBardMagicalSecretAt14And18"), ref toggle, UI.AutoWidth())) { Main.Settings.RemoveBardMagicalSecretAt14And18 = toggle; - OneDndContext.SwitchOneDndRemoveBardMagicalSecretAt14And18(); + Tabletop2024Context.SwitchOneDndRemoveBardMagicalSecretAt14And18(); } toggle = Main.Settings.RemoveBardSongOfRest; if (UI.Toggle(Gui.Localize("ModUi/&RemoveBardSongOfRest"), ref toggle, UI.AutoWidth())) { Main.Settings.RemoveBardSongOfRest = toggle; - OneDndContext.SwitchOneDndRemoveBardSongOfRest(); + Tabletop2024Context.SwitchOneDndRemoveBardSongOfRest(); } UI.Label(); @@ -77,8 +77,8 @@ internal static void DisplayClasses() { Main.Settings.EnableBarbarianBrutalStrike = toggle; Main.Settings.DisableBarbarianBrutalCritical = toggle; - OneDndContext.SwitchBarbarianBrutalStrike(); - OneDndContext.SwitchBarbarianBrutalCritical(); + Tabletop2024Context.SwitchBarbarianBrutalStrike(); + Tabletop2024Context.SwitchBarbarianBrutalCritical(); } if (Main.Settings.EnableBarbarianBrutalStrike) @@ -87,7 +87,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&DisableBarbarianBrutalCritical"), ref toggle, UI.AutoWidth())) { Main.Settings.DisableBarbarianBrutalCritical = toggle; - OneDndContext.SwitchBarbarianBrutalCritical(); + Tabletop2024Context.SwitchBarbarianBrutalCritical(); } } @@ -102,14 +102,14 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBarbarianRecklessSameBuffDebuffDuration = toggle; - OneDndContext.SwitchBarbarianRecklessSameBuffDebuffDuration(); + Tabletop2024Context.SwitchBarbarianRecklessSameBuffDebuffDuration(); } toggle = Main.Settings.EnableBarbarianRegainOneRageAtShortRest; if (UI.Toggle(Gui.Localize("ModUi/&EnableBarbarianRegainOneRageAtShortRest"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBarbarianRegainOneRageAtShortRest = toggle; - OneDndContext.SwitchBarbarianRegainOneRageAtShortRest(); + Tabletop2024Context.SwitchBarbarianRegainOneRageAtShortRest(); } UI.Label(); @@ -120,7 +120,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&AllowDruidToWearMetalArmor"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableDruidToUseMetalArmor = toggle; - OneDndContext.SwitchOneDnDEnableDruidToUseMetalArmor(); + Tabletop2024Context.SwitchOneDnDEnableDruidToUseMetalArmor(); } toggle = Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency; @@ -128,14 +128,14 @@ internal static void DisplayClasses() UI.AutoWidth())) { Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency = toggle; - OneDndContext.SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); + Tabletop2024Context.SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); } toggle = Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd; if (UI.Toggle(Gui.Localize("ModUi/&SwapDruidWeaponProficiencyToUseOneDnd"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd = toggle; - OneDndContext.SwitchDruidWeaponProficiencyToUseOneDnd(); + Tabletop2024Context.SwitchDruidWeaponProficiencyToUseOneDnd(); } UI.Label(); @@ -146,14 +146,14 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&AddFighterLevelToIndomitableSavingReroll"), ref toggle, UI.AutoWidth())) { Main.Settings.AddFighterLevelToIndomitableSavingReroll = toggle; - OneDndContext.SwitchFighterLevelToIndomitableSavingReroll(); + Tabletop2024Context.SwitchFighterLevelToIndomitableSavingReroll(); } toggle = Main.Settings.AddPersuasionToFighterSkillOptions; if (UI.Toggle(Gui.Localize("ModUi/&AddPersuasionToFighterSkillOptions"), ref toggle, UI.AutoWidth())) { Main.Settings.AddPersuasionToFighterSkillOptions = toggle; - OneDndContext.SwitchPersuasionToFighterSkillOptions(); + Tabletop2024Context.SwitchPersuasionToFighterSkillOptions(); } toggle = Main.Settings.EnableFighterWeaponSpecialization; @@ -185,7 +185,7 @@ internal static void DisplayClasses() UI.AutoWidth())) { Main.Settings.EnableMonkBodyAndMindToReplacePerfectSelf = toggle; - OneDndContext.SwitchMonkBodyAndMindToReplacePerfectSelf(); + Tabletop2024Context.SwitchMonkBodyAndMindToReplacePerfectSelf(); } toggle = Main.Settings.EnableMonkFightingStyle; @@ -199,7 +199,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableMonkDoNotRequireAttackActionForFlurry"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableMonkDoNotRequireAttackActionForFlurry = toggle; - OneDndContext.SwitchMonkDoNotRequireAttackActionForFlurry(); + Tabletop2024Context.SwitchMonkDoNotRequireAttackActionForFlurry(); } toggle = Main.Settings.EnableMonkHandwrapsUseGauntletSlot; @@ -215,7 +215,7 @@ internal static void DisplayClasses() UI.AutoWidth())) { Main.Settings.EnableMonkHeightenedMetabolism = toggle; - OneDndContext.SwitchMonkHeightenedMetabolism(); + Tabletop2024Context.SwitchMonkHeightenedMetabolism(); } toggle = Main.Settings.EnableMonkImprovedUnarmoredMovementToMoveOnTheWall; @@ -231,7 +231,7 @@ internal static void DisplayClasses() UI.AutoWidth())) { Main.Settings.EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack = toggle; - OneDndContext.SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack(); + Tabletop2024Context.SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack(); } toggle = Main.Settings.EnableMonkSuperiorDefenseToReplaceEmptyBody; @@ -239,7 +239,7 @@ internal static void DisplayClasses() UI.AutoWidth())) { Main.Settings.EnableMonkSuperiorDefenseToReplaceEmptyBody = toggle; - OneDndContext.SwitchMonkSuperiorDefenseToReplaceEmptyBody(); + Tabletop2024Context.SwitchMonkSuperiorDefenseToReplaceEmptyBody(); } toggle = Main.Settings.EnableMonkWeaponSpecialization; @@ -253,7 +253,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapMonkToUseOneDndUnarmedDieTypeProgression = toggle; - OneDndContext.SwitchOneDndMonkUnarmedDieTypeProgression(); + Tabletop2024Context.SwitchOneDndMonkUnarmedDieTypeProgression(); } UI.Label(); @@ -270,7 +270,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnablePaladinLayOnHandsAsBonusAction"), ref toggle, UI.AutoWidth())) { Main.Settings.EnablePaladinLayOnHandsAsBonusAction = toggle; - OneDndContext.SwitchOneDndPaladinLayOnHandAsBonusAction(); + Tabletop2024Context.SwitchOneDndPaladinLayOnHandAsBonusAction(); } toggle = Main.Settings.EnablePaladinSmiteAsBonusAction; @@ -283,7 +283,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnablePaladinSpellCastingAtLevel1"), ref toggle, UI.AutoWidth())) { Main.Settings.EnablePaladinSpellCastingAtLevel1 = toggle; - OneDndContext.SwitchOneDndPaladinLearnSpellCastingAtOne(); + Tabletop2024Context.SwitchOneDndPaladinLearnSpellCastingAtOne(); } toggle = Main.Settings.ShowChannelDivinityOnPortrait; @@ -307,14 +307,14 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableRangerNatureShroudAt14"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRangerNatureShroudAt14 = toggle; - OneDndContext.SwitchRangerNatureShroud(); + Tabletop2024Context.SwitchRangerNatureShroud(); } toggle = Main.Settings.EnableRangerSpellCastingAtLevel1; if (UI.Toggle(Gui.Localize("ModUi/&EnableRangerSpellCastingAtLevel1"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRangerSpellCastingAtLevel1 = toggle; - OneDndContext.SwitchOneDndRangerLearnSpellCastingAtOne(); + Tabletop2024Context.SwitchOneDndRangerLearnSpellCastingAtOne(); } UI.Label(); @@ -357,7 +357,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcererInnateSorcery"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableSorcererInnateSorcery = toggle; - OneDndContext.SwitchSorcererInnateSorcery(); + Tabletop2024Context.SwitchSorcererInnateSorcery(); } toggle = Main.Settings.EnableSorcererMagicalGuidance; @@ -390,14 +390,14 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockMagicalCunningAtLevel2"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableWarlockMagicalCunningAtLevel2 = toggle; - OneDndContext.SwitchOneDndWarlockMagicalCunningAtLevel2(); + Tabletop2024Context.SwitchOneDndWarlockMagicalCunningAtLevel2(); } toggle = Main.Settings.SwapWarlockToUseOneDndInvocationProgression; if (UI.Toggle(Gui.Localize("ModUi/&SwapWarlockToUseOneDndInvocationProgression"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapWarlockToUseOneDndInvocationProgression = toggle; - OneDndContext.SwitchOneDndWarlockInvocationsProgression(); + Tabletop2024Context.SwitchOneDndWarlockInvocationsProgression(); } UI.Label(); @@ -408,14 +408,14 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableWizardToLearnScholarAtLevel2"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableWizardToLearnScholarAtLevel2 = toggle; - OneDndContext.SwitchOneDndWizardScholar(); + Tabletop2024Context.SwitchOneDndWizardScholar(); } toggle = Main.Settings.EnableWizardToLearnSchoolAtLevel3; if (UI.Toggle(Gui.Localize("ModUi/&EnableWizardToLearnSchoolAtLevel3"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableWizardToLearnSchoolAtLevel3 = toggle; - OneDndContext.SwitchOneDndWizardSchoolOfMagicLearningLevel(); + Tabletop2024Context.SwitchOneDndWizardSchoolOfMagicLearningLevel(); } toggle = Main.Settings.EnableSignatureSpellsRelearn; diff --git a/SolastaUnfinishedBusiness/Displays/CraftingAndItems.cs b/SolastaUnfinishedBusiness/Displays/CraftingAndItems.cs index bcc5e81c99..54d2848e30 100644 --- a/SolastaUnfinishedBusiness/Displays/CraftingAndItems.cs +++ b/SolastaUnfinishedBusiness/Displays/CraftingAndItems.cs @@ -122,7 +122,7 @@ internal static void DisplayCraftingAndItems() if (UI.Toggle(Gui.Localize("ModUi/&UseOfficialFoodRationsWeight"), ref toggle, UI.AutoWidth())) { Main.Settings.UseOfficialFoodRationsWeight = toggle; - SrdAndHouseRulesContext.SwitchOfficialFoodRationsWeight(); + Tabletop2014Context.SwitchOfficialFoodRationsWeight(); } toggle = Main.Settings.MakeAllMagicStaveArcaneFoci; @@ -136,7 +136,7 @@ internal static void DisplayCraftingAndItems() if (UI.Toggle(Gui.Localize("ModUi/&FixRingOfRegenerationHealRate"), ref toggle, UI.AutoWidth())) { Main.Settings.FixRingOfRegenerationHealRate = toggle; - SrdAndHouseRulesContext.SwitchRingOfRegenerationHealRate(); + Tabletop2014Context.SwitchRingOfRegenerationHealRate(); } UI.Label(); @@ -151,7 +151,7 @@ internal static void DisplayCraftingAndItems() if (UI.Toggle(Gui.Localize("ModUi/&OneDndHealingPotionBonusAction"), ref toggle, UI.AutoWidth())) { Main.Settings.OneDndHealingPotionBonusAction = toggle; - OneDndContext.SwitchOneDndHealingPotionBonusAction(); + Tabletop2024Context.SwitchOneDndHealingPotionBonusAction(); } toggle = Main.Settings.KeepInvisibilityWhenUsingItems; diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 9f96b618b6..a095299c7e 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -239,14 +239,14 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableSurprisedToEnforceDisadvantage"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableSurprisedToEnforceDisadvantage = toggle; - OneDndContext.SwitchOneDndSurprisedEnforceDisadvantage(); + Tabletop2024Context.SwitchOneDndSurprisedEnforceDisadvantage(); } toggle = Main.Settings.OneDndHealingPotionBonusAction; if (UI.Toggle(Gui.Localize("ModUi/&OneDndHealingPotionBonusAction"), ref toggle, UI.AutoWidth())) { Main.Settings.OneDndHealingPotionBonusAction = toggle; - OneDndContext.SwitchOneDndHealingPotionBonusAction(); + Tabletop2024Context.SwitchOneDndHealingPotionBonusAction(); } UI.Label(); @@ -257,42 +257,42 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&ChangeBardicInspirationDurationToOneHour"), ref toggle, UI.AutoWidth())) { Main.Settings.ChangeBardicInspirationDurationToOneHour = toggle; - OneDndContext.SwitchOneDndChangeBardicInspirationDurationToOneHour(); + Tabletop2024Context.SwitchOneDndChangeBardicInspirationDurationToOneHour(); } toggle = Main.Settings.EnableBardExpertiseOneLevelBefore; if (UI.Toggle(Gui.Localize("ModUi/&EnableBardExpertiseOneLevelBefore"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardExpertiseOneLevelBefore = toggle; - OneDndContext.SwitchOneDndEnableBardExpertiseOneLevelBefore(); + Tabletop2024Context.SwitchOneDndEnableBardExpertiseOneLevelBefore(); } toggle = Main.Settings.EnableBardSuperiorInspirationAtLevel18; if (UI.Toggle(Gui.Localize("ModUi/&EnableBardSuperiorInspirationAtLevel18"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardSuperiorInspirationAtLevel18 = toggle; - OneDndContext.SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); + Tabletop2024Context.SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); } toggle = Main.Settings.EnableBardWordsOfCreationAtLevel20; if (UI.Toggle(Gui.Localize("ModUi/&EnableBardWordsOfCreationAtLevel20"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardWordsOfCreationAtLevel20 = toggle; - OneDndContext.SwitchOneDndEnableBardWordsOfCreationAtLevel20(); + Tabletop2024Context.SwitchOneDndEnableBardWordsOfCreationAtLevel20(); } toggle = Main.Settings.RemoveBardMagicalSecretAt14And18; if (UI.Toggle(Gui.Localize("ModUi/&RemoveBardMagicalSecretAt14And18"), ref toggle, UI.AutoWidth())) { Main.Settings.RemoveBardMagicalSecretAt14And18 = toggle; - OneDndContext.SwitchOneDndRemoveBardMagicalSecretAt14And18(); + Tabletop2024Context.SwitchOneDndRemoveBardMagicalSecretAt14And18(); } toggle = Main.Settings.RemoveBardSongOfRest; if (UI.Toggle(Gui.Localize("ModUi/&RemoveBardSongOfRest"), ref toggle, UI.AutoWidth())) { Main.Settings.RemoveBardSongOfRest = toggle; - OneDndContext.SwitchOneDndRemoveBardSongOfRest(); + Tabletop2024Context.SwitchOneDndRemoveBardSongOfRest(); } UI.Label(); @@ -304,8 +304,8 @@ private static void DisplayOneDnd() { Main.Settings.EnableBarbarianBrutalStrike = toggle; Main.Settings.DisableBarbarianBrutalCritical = toggle; - OneDndContext.SwitchBarbarianBrutalStrike(); - OneDndContext.SwitchBarbarianBrutalCritical(); + Tabletop2024Context.SwitchBarbarianBrutalStrike(); + Tabletop2024Context.SwitchBarbarianBrutalCritical(); } if (Main.Settings.EnableBarbarianBrutalStrike) @@ -314,7 +314,7 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&DisableBarbarianBrutalCritical"), ref toggle, UI.AutoWidth())) { Main.Settings.DisableBarbarianBrutalCritical = toggle; - OneDndContext.SwitchBarbarianBrutalCritical(); + Tabletop2024Context.SwitchBarbarianBrutalCritical(); } } @@ -322,14 +322,14 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBarbarianRecklessSameBuffDebuffDuration = toggle; - OneDndContext.SwitchBarbarianRecklessSameBuffDebuffDuration(); + Tabletop2024Context.SwitchBarbarianRecklessSameBuffDebuffDuration(); } toggle = Main.Settings.EnableBarbarianRegainOneRageAtShortRest; if (UI.Toggle(Gui.Localize("ModUi/&EnableBarbarianRegainOneRageAtShortRest"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBarbarianRegainOneRageAtShortRest = toggle; - OneDndContext.SwitchBarbarianRegainOneRageAtShortRest(); + Tabletop2024Context.SwitchBarbarianRegainOneRageAtShortRest(); } UI.Label(); @@ -340,7 +340,7 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&AllowDruidToWearMetalArmor"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableDruidToUseMetalArmor = toggle; - OneDndContext.SwitchOneDnDEnableDruidToUseMetalArmor(); + Tabletop2024Context.SwitchOneDnDEnableDruidToUseMetalArmor(); } toggle = Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency; @@ -348,14 +348,14 @@ private static void DisplayOneDnd() UI.AutoWidth())) { Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency = toggle; - OneDndContext.SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); + Tabletop2024Context.SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); } toggle = Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd; if (UI.Toggle(Gui.Localize("ModUi/&SwapDruidWeaponProficiencyToUseOneDnd"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd = toggle; - OneDndContext.SwitchDruidWeaponProficiencyToUseOneDnd(); + Tabletop2024Context.SwitchDruidWeaponProficiencyToUseOneDnd(); } UI.Label(); @@ -366,14 +366,14 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&AddFighterLevelToIndomitableSavingReroll"), ref toggle, UI.AutoWidth())) { Main.Settings.AddFighterLevelToIndomitableSavingReroll = toggle; - OneDndContext.SwitchFighterLevelToIndomitableSavingReroll(); + Tabletop2024Context.SwitchFighterLevelToIndomitableSavingReroll(); } toggle = Main.Settings.AddPersuasionToFighterSkillOptions; if (UI.Toggle(Gui.Localize("ModUi/&AddPersuasionToFighterSkillOptions"), ref toggle, UI.AutoWidth())) { Main.Settings.AddPersuasionToFighterSkillOptions = toggle; - OneDndContext.SwitchPersuasionToFighterSkillOptions(); + Tabletop2024Context.SwitchPersuasionToFighterSkillOptions(); } toggle = Main.Settings.SwapSecondWindToUseOneDndUsagesProgression; @@ -391,14 +391,14 @@ private static void DisplayOneDnd() UI.AutoWidth())) { Main.Settings.EnableMonkBodyAndMindToReplacePerfectSelf = toggle; - OneDndContext.SwitchMonkBodyAndMindToReplacePerfectSelf(); + Tabletop2024Context.SwitchMonkBodyAndMindToReplacePerfectSelf(); } toggle = Main.Settings.EnableMonkDoNotRequireAttackActionForFlurry; if (UI.Toggle(Gui.Localize("ModUi/&EnableMonkDoNotRequireAttackActionForFlurry"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableMonkDoNotRequireAttackActionForFlurry = toggle; - OneDndContext.SwitchMonkDoNotRequireAttackActionForFlurry(); + Tabletop2024Context.SwitchMonkDoNotRequireAttackActionForFlurry(); } toggle = Main.Settings.EnableMonkHeightenedMetabolism; @@ -406,7 +406,7 @@ private static void DisplayOneDnd() UI.AutoWidth())) { Main.Settings.EnableMonkHeightenedMetabolism = toggle; - OneDndContext.SwitchMonkHeightenedMetabolism(); + Tabletop2024Context.SwitchMonkHeightenedMetabolism(); } toggle = Main.Settings.EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack; @@ -414,7 +414,7 @@ private static void DisplayOneDnd() UI.AutoWidth())) { Main.Settings.EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack = toggle; - OneDndContext.SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack(); + Tabletop2024Context.SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack(); } toggle = Main.Settings.EnableMonkSuperiorDefenseToReplaceEmptyBody; @@ -422,14 +422,14 @@ private static void DisplayOneDnd() UI.AutoWidth())) { Main.Settings.EnableMonkSuperiorDefenseToReplaceEmptyBody = toggle; - OneDndContext.SwitchMonkSuperiorDefenseToReplaceEmptyBody(); + Tabletop2024Context.SwitchMonkSuperiorDefenseToReplaceEmptyBody(); } toggle = Main.Settings.SwapMonkToUseOneDndUnarmedDieTypeProgression; if (UI.Toggle(Gui.Localize("ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapMonkToUseOneDndUnarmedDieTypeProgression = toggle; - OneDndContext.SwitchOneDndMonkUnarmedDieTypeProgression(); + Tabletop2024Context.SwitchOneDndMonkUnarmedDieTypeProgression(); } UI.Label(); @@ -440,7 +440,7 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnablePaladinLayOnHandsAsBonusAction"), ref toggle, UI.AutoWidth())) { Main.Settings.EnablePaladinLayOnHandsAsBonusAction = toggle; - OneDndContext.SwitchOneDndPaladinLayOnHandAsBonusAction(); + Tabletop2024Context.SwitchOneDndPaladinLayOnHandAsBonusAction(); } toggle = Main.Settings.EnablePaladinSmiteAsBonusAction; @@ -453,7 +453,7 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnablePaladinSpellCastingAtLevel1"), ref toggle, UI.AutoWidth())) { Main.Settings.EnablePaladinSpellCastingAtLevel1 = toggle; - OneDndContext.SwitchOneDndPaladinLearnSpellCastingAtOne(); + Tabletop2024Context.SwitchOneDndPaladinLearnSpellCastingAtOne(); } UI.Label(); @@ -464,14 +464,14 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableRangerNatureShroudAt14"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRangerNatureShroudAt14 = toggle; - OneDndContext.SwitchRangerNatureShroud(); + Tabletop2024Context.SwitchRangerNatureShroud(); } toggle = Main.Settings.EnableRangerSpellCastingAtLevel1; if (UI.Toggle(Gui.Localize("ModUi/&EnableRangerSpellCastingAtLevel1"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRangerSpellCastingAtLevel1 = toggle; - OneDndContext.SwitchOneDndRangerLearnSpellCastingAtOne(); + Tabletop2024Context.SwitchOneDndRangerLearnSpellCastingAtOne(); } UI.Label(); @@ -507,7 +507,7 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcererInnateSorcery"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableSorcererInnateSorcery = toggle; - OneDndContext.SwitchSorcererInnateSorcery(); + Tabletop2024Context.SwitchSorcererInnateSorcery(); } UI.Label(); @@ -518,14 +518,14 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockMagicalCunningAtLevel2"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableWarlockMagicalCunningAtLevel2 = toggle; - OneDndContext.SwitchOneDndWarlockMagicalCunningAtLevel2(); + Tabletop2024Context.SwitchOneDndWarlockMagicalCunningAtLevel2(); } toggle = Main.Settings.SwapWarlockToUseOneDndInvocationProgression; if (UI.Toggle(Gui.Localize("ModUi/&SwapWarlockToUseOneDndInvocationProgression"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapWarlockToUseOneDndInvocationProgression = toggle; - OneDndContext.SwitchOneDndWarlockInvocationsProgression(); + Tabletop2024Context.SwitchOneDndWarlockInvocationsProgression(); } UI.Label(); @@ -536,14 +536,14 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableWizardToLearnScholarAtLevel2"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableWizardToLearnScholarAtLevel2 = toggle; - OneDndContext.SwitchOneDndWizardScholar(); + Tabletop2024Context.SwitchOneDndWizardScholar(); } toggle = Main.Settings.EnableWizardToLearnSchoolAtLevel3; if (UI.Toggle(Gui.Localize("ModUi/&EnableWizardToLearnSchoolAtLevel3"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableWizardToLearnSchoolAtLevel3 = toggle; - OneDndContext.SwitchOneDndWizardSchoolOfMagicLearningLevel(); + Tabletop2024Context.SwitchOneDndWizardSchoolOfMagicLearningLevel(); } UI.Label(); @@ -565,35 +565,35 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDnDPreparedSpellsTables"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableOneDnDPreparedSpellsTables = toggle; - OneDndContext.SwitchOneDndPreparedSpellsTables(); + Tabletop2024Context.SwitchOneDndPreparedSpellsTables(); } toggle = Main.Settings.EnableOneDndHealingSpellsBuf; if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndHealingSpellsBuf"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableOneDndHealingSpellsBuf = toggle; - OneDndContext.SwitchOneDndHealingSpellsBuf(); + Tabletop2024Context.SwitchOneDndHealingSpellsBuf(); } toggle = Main.Settings.EnableRitualOnAllCasters; if (UI.Toggle(Gui.Localize("ModUi/&EnableRitualOnAllCasters"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRitualOnAllCasters = toggle; - OneDndContext.SwitchEnableRitualOnAllCasters(); + Tabletop2024Context.SwitchEnableRitualOnAllCasters(); } toggle = Main.Settings.SwapOneDndBarkskinSpell; if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndBarkskinSpell"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapOneDndBarkskinSpell = toggle; - OneDndContext.SwapOneDndBarkskinSpell(); + Tabletop2024Context.SwapOneDndBarkskinSpell(); } toggle = Main.Settings.SwapOneDndGuidanceSpell; if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndGuidanceSpell"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapOneDndGuidanceSpell = toggle; - OneDndContext.SwapOneDndGuidanceSpell(); + Tabletop2024Context.SwapOneDndGuidanceSpell(); } UI.Label(); @@ -643,21 +643,21 @@ private static void DisplayTabletop() if (UI.Toggle(Gui.Localize("ModUi/&EnableProneAction"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableProneAction = toggle; - CharacterContext.SwitchProneAction(); + Tabletop2014Context.SwitchProneAction(); } toggle = Main.Settings.EnableGrappleAction; if (UI.Toggle(Gui.Localize("ModUi/&EnableGrappleAction"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableGrappleAction = toggle; - GrappleContext.SwitchGrappleAction(); + Tabletop2014Context.SwitchGrappleAction(); } toggle = Main.Settings.EnableHelpAction; if (UI.Toggle(Gui.Localize("ModUi/&EnableHelpAction"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableHelpAction = toggle; - CharacterContext.SwitchHelpPower(); + Tabletop2014Context.SwitchHelpPower(); } toggle = Main.Settings.EnableUnarmedMainAttackAction; @@ -674,7 +674,7 @@ private static void DisplayTabletop() UI.AutoWidth())) { Main.Settings.BlindedConditionDontAllowAttackOfOpportunity = toggle; - SrdAndHouseRulesContext.SwitchConditionBlindedShouldNotAllowOpportunityAttack(); + Tabletop2014Context.SwitchConditionBlindedShouldNotAllowOpportunityAttack(); } toggle = Main.Settings.UseOfficialLightingObscurementAndVisionRules; @@ -788,7 +788,7 @@ private static void DisplayTabletop() if (!toggle) { Main.Settings.ModifyGravitySlam = false; - SrdAndHouseRulesContext.ToggleGravitySlamModification(); + Tabletop2014Context.ToggleGravitySlamModification(); } } @@ -796,7 +796,7 @@ private static void DisplayTabletop() if (UI.Toggle(Gui.Localize("ModUi/&FullyControlConjurations"), ref toggle, UI.AutoWidth())) { Main.Settings.FullyControlConjurations = toggle; - SrdAndHouseRulesContext.SwitchFullyControlConjurations(); + Tabletop2014Context.SwitchFullyControlConjurations(); } UI.Label(); @@ -814,7 +814,7 @@ private static void DisplayTabletop() UI.AutoWidth())) { Main.Settings.ColdResistanceAlsoGrantsImmunityToChilledCondition = toggle; - SrdAndHouseRulesContext.SwitchColdResistanceAndImmunityAlsoGrantsWeatherImmunity(); + Tabletop2014Context.SwitchColdResistanceAndImmunityAlsoGrantsWeatherImmunity(); } toggle = Main.Settings.ColdImmunityAlsoGrantsImmunityToChilledAndFrozenCondition; @@ -822,7 +822,7 @@ private static void DisplayTabletop() UI.AutoWidth())) { Main.Settings.ColdImmunityAlsoGrantsImmunityToChilledAndFrozenCondition = toggle; - SrdAndHouseRulesContext.SwitchColdResistanceAndImmunityAlsoGrantsWeatherImmunity(); + Tabletop2014Context.SwitchColdResistanceAndImmunityAlsoGrantsWeatherImmunity(); } UI.Label(); @@ -831,7 +831,7 @@ private static void DisplayTabletop() if (UI.Toggle(Gui.Localize("ModUi/&UseOfficialFoodRationsWeight"), ref toggle, UI.AutoWidth())) { Main.Settings.UseOfficialFoodRationsWeight = toggle; - SrdAndHouseRulesContext.SwitchOfficialFoodRationsWeight(); + Tabletop2014Context.SwitchOfficialFoodRationsWeight(); } toggle = Main.Settings.FixRingOfRegenerationHealRate; @@ -839,7 +839,7 @@ private static void DisplayTabletop() if (UI.Toggle(Gui.Localize("ModUi/&FixRingOfRegenerationHealRate"), ref toggle, UI.AutoWidth())) { Main.Settings.FixRingOfRegenerationHealRate = toggle; - SrdAndHouseRulesContext.SwitchRingOfRegenerationHealRate(); + Tabletop2014Context.SwitchRingOfRegenerationHealRate(); } UI.Label(); @@ -909,7 +909,7 @@ private static void DisplayTabletop() if (UI.Toggle(Gui.Localize("ModUi/&FixEldritchBlastRange"), ref toggle, UI.AutoWidth())) { Main.Settings.FixEldritchBlastRange = toggle; - SrdAndHouseRulesContext.SwitchEldritchBlastRange(); + Tabletop2014Context.SwitchEldritchBlastRange(); } UI.Label(); @@ -919,7 +919,7 @@ private static void DisplayTabletop() if (UI.Toggle(Gui.Localize("ModUi/&EnableBardHealingBalladOnLongRest"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardHealingBalladOnLongRest = toggle; - CharacterContext.SwitchBardHealingBalladOnLongRest(); + Tabletop2014Context.SwitchBardHealingBalladOnLongRest(); } } } diff --git a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs index 7510cbaf5b..68677033f7 100644 --- a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs @@ -92,21 +92,21 @@ internal static void DisplayRules() if (UI.Toggle(Gui.Localize("ModUi/&EnableProneAction"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableProneAction = toggle; - CharacterContext.SwitchProneAction(); + Tabletop2014Context.SwitchProneAction(); } toggle = Main.Settings.EnableGrappleAction; if (UI.Toggle(Gui.Localize("ModUi/&EnableGrappleAction"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableGrappleAction = toggle; - GrappleContext.SwitchGrappleAction(); + Tabletop2014Context.SwitchGrappleAction(); } toggle = Main.Settings.EnableHelpAction; if (UI.Toggle(Gui.Localize("ModUi/&EnableHelpAction"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableHelpAction = toggle; - CharacterContext.SwitchHelpPower(); + Tabletop2014Context.SwitchHelpPower(); } toggle = Main.Settings.EnableRespecAction; @@ -201,7 +201,7 @@ internal static void DisplayRules() UI.AutoWidth())) { Main.Settings.BlindedConditionDontAllowAttackOfOpportunity = toggle; - SrdAndHouseRulesContext.SwitchConditionBlindedShouldNotAllowOpportunityAttack(); + Tabletop2014Context.SwitchConditionBlindedShouldNotAllowOpportunityAttack(); } toggle = Main.Settings.UseOfficialLightingObscurementAndVisionRules; @@ -360,7 +360,7 @@ internal static void DisplayRules() if (!toggle) { Main.Settings.ModifyGravitySlam = false; - SrdAndHouseRulesContext.ToggleGravitySlamModification(); + Tabletop2014Context.ToggleGravitySlamModification(); } } @@ -368,7 +368,7 @@ internal static void DisplayRules() if (UI.Toggle(Gui.Localize("ModUi/&FullyControlConjurations"), ref toggle, UI.AutoWidth())) { Main.Settings.FullyControlConjurations = toggle; - SrdAndHouseRulesContext.SwitchFullyControlConjurations(); + Tabletop2014Context.SwitchFullyControlConjurations(); } UI.Label(); @@ -383,7 +383,7 @@ internal static void DisplayRules() if (UI.Toggle(Gui.Localize("ModUi/&EnableSurprisedToEnforceDisadvantage"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableSurprisedToEnforceDisadvantage = toggle; - OneDndContext.SwitchOneDndSurprisedEnforceDisadvantage(); + Tabletop2024Context.SwitchOneDndSurprisedEnforceDisadvantage(); } toggle = Main.Settings.EnableTeleportToRemoveRestrained; @@ -405,7 +405,7 @@ internal static void DisplayRules() UI.AutoWidth())) { Main.Settings.ColdResistanceAlsoGrantsImmunityToChilledCondition = toggle; - SrdAndHouseRulesContext.SwitchColdResistanceAndImmunityAlsoGrantsWeatherImmunity(); + Tabletop2014Context.SwitchColdResistanceAndImmunityAlsoGrantsWeatherImmunity(); } toggle = Main.Settings.ColdImmunityAlsoGrantsImmunityToChilledAndFrozenCondition; @@ -413,7 +413,7 @@ internal static void DisplayRules() UI.AutoWidth())) { Main.Settings.ColdImmunityAlsoGrantsImmunityToChilledAndFrozenCondition = toggle; - SrdAndHouseRulesContext.SwitchColdResistanceAndImmunityAlsoGrantsWeatherImmunity(); + Tabletop2014Context.SwitchColdResistanceAndImmunityAlsoGrantsWeatherImmunity(); } UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs index ca5b825b40..e617a9295b 100644 --- a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs @@ -37,14 +37,14 @@ private static void DisplaySpellsGeneral() if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDnDPreparedSpellsTables"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableOneDnDPreparedSpellsTables = toggle; - OneDndContext.SwitchOneDndPreparedSpellsTables(); + Tabletop2024Context.SwitchOneDndPreparedSpellsTables(); } toggle = Main.Settings.EnableRitualOnAllCasters; if (UI.Toggle(Gui.Localize("ModUi/&EnableRitualOnAllCasters"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRitualOnAllCasters = toggle; - OneDndContext.SwitchEnableRitualOnAllCasters(); + Tabletop2024Context.SwitchEnableRitualOnAllCasters(); } toggle = Main.Settings.QuickCastLightCantripOnWornItemsFirst; @@ -136,14 +136,14 @@ private static void DisplaySpellsGeneral() if (UI.Toggle(Gui.Localize("ModUi/&FixEldritchBlastRange"), ref toggle, UI.AutoWidth())) { Main.Settings.FixEldritchBlastRange = toggle; - SrdAndHouseRulesContext.SwitchEldritchBlastRange(); + Tabletop2014Context.SwitchEldritchBlastRange(); } toggle = Main.Settings.ModifyGravitySlam; if (UI.Toggle(Gui.Localize("ModUi/&ModifyGravitySlam"), ref toggle, UI.AutoWidth())) { Main.Settings.ModifyGravitySlam = toggle && Main.Settings.EnablePullPushOnVerticalDirection; - SrdAndHouseRulesContext.ToggleGravitySlamModification(); + Tabletop2014Context.ToggleGravitySlamModification(); } UI.Label(); @@ -152,21 +152,21 @@ private static void DisplaySpellsGeneral() if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndHealingSpellsBuf"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableOneDndHealingSpellsBuf = toggle; - OneDndContext.SwitchOneDndHealingSpellsBuf(); + Tabletop2024Context.SwitchOneDndHealingSpellsBuf(); } toggle = Main.Settings.SwapOneDndBarkskinSpell; if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndBarkskinSpell"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapOneDndBarkskinSpell = toggle; - OneDndContext.SwapOneDndBarkskinSpell(); + Tabletop2024Context.SwapOneDndBarkskinSpell(); } toggle = Main.Settings.SwapOneDndGuidanceSpell; if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndGuidanceSpell"), ref toggle, UI.AutoWidth())) { Main.Settings.SwapOneDndGuidanceSpell = toggle; - OneDndContext.SwapOneDndGuidanceSpell(); + Tabletop2024Context.SwapOneDndGuidanceSpell(); } UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/SubclassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/SubclassesDisplay.cs index 8d97dc96f8..12b197d5ec 100644 --- a/SolastaUnfinishedBusiness/Displays/SubclassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SubclassesDisplay.cs @@ -49,7 +49,7 @@ private static void DisplaySubclassesGeneral() if (UI.Toggle(Gui.Localize("ModUi/&EnableBardHealingBalladOnLongRest"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBardHealingBalladOnLongRest = toggle; - CharacterContext.SwitchBardHealingBalladOnLongRest(); + Tabletop2014Context.SwitchBardHealingBalladOnLongRest(); } toggle = Main.Settings.EnableRogueStrSaving; diff --git a/SolastaUnfinishedBusiness/Models/BootContext.cs b/SolastaUnfinishedBusiness/Models/BootContext.cs index 8fbd8bc9bb..66c61f495d 100644 --- a/SolastaUnfinishedBusiness/Models/BootContext.cs +++ b/SolastaUnfinishedBusiness/Models/BootContext.cs @@ -115,7 +115,7 @@ internal static void Startup() // Set anything on subs that depends on spells and others SrdAndHouseRulesContext.LateLoad(); - OneDndContext.LateLoad(); + Tabletop2024Context.LateLoad(); SubclassesContext.LateLoad(); InventorClass.LateLoadSpellStoringItem(); diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index f422e506dc..d4fa142fe6 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -124,19 +124,6 @@ internal static partial class CharacterContext .Setup(InvocationPoolTypeCustom.Pools.RangerPreferredEnemy) .AddToDB(); - internal static readonly FeatureDefinitionPower FeatureDefinitionPowerHelpAction = FeatureDefinitionPowerBuilder - .Create("PowerHelp") - .SetGuiPresentation(Category.Feature, Sprites.GetSprite("PowerHelp", Resources.PowerHelp, 256, 128)) - .SetUsesFixed(ActivationTime.Action) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Round, 1, TurnOccurenceType.EndOfSourceTurn) - .SetTargetingData(Side.Enemy, RangeType.Touch, 0, TargetType.IndividualsUnique) - .SetEffectForms(EffectFormBuilder.ConditionForm(CustomConditionsContext.Distracted)) - .Build()) - .SetUniqueInstance() - .AddToDB(); internal static readonly FeatureDefinitionPower PowerTeleportSummon = FeatureDefinitionPowerBuilder .Create("PowerTeleportSummon") @@ -181,7 +168,6 @@ internal static void LateLoad() FlexibleBackgroundsContext.Load(); FlexibleBackgroundsContext.SwitchFlexibleBackgrounds(); FlexibleRacesContext.SwitchFlexibleRaces(); - GrappleContext.SwitchGrappleAction(); LoadAdditionalNames(); LoadEpicArray(); LoadFeatsPointPools(); @@ -200,8 +186,6 @@ internal static void LateLoad() SwitchEveryFourLevelsFeats(true); SwitchFighterWeaponSpecialization(); SwitchFirstLevelTotalFeats(); - SwitchProneAction(); - SwitchHelpPower(); SwitchMonkAbundantKi(); SwitchMonkFightingStyle(); SwitchMonkImprovedUnarmoredMovementToMoveOnTheWall(); @@ -213,10 +197,9 @@ internal static void LateLoad() SwitchRogueFightingStyle(); SwitchRogueSteadyAim(); SwitchRogueStrSaving(); - SwitchSorcererMagicalGuidance(); SwitchScimitarWeaponSpecialization(); - SwitchBardHealingBalladOnLongRest(); + SwitchSubclassAncestriesToUseCustomInvocationPools( "PathClaw", PathClaw, FeatureSetPathClawDragonAncestry, InvocationPoolPathClawDraconicChoice, @@ -688,43 +671,6 @@ internal static void SwitchFirstLevelTotalFeats() LoadRacesLevel1Feats(Main.Settings.TotalFeatsGrantedFirstLevel, Main.Settings.EnableAlternateHuman); } - internal static void SwitchHelpPower() - { - var dbCharacterRaceDefinition = DatabaseRepository.GetDatabase(); - var subRaces = dbCharacterRaceDefinition - .SelectMany(x => x.SubRaces); - var races = dbCharacterRaceDefinition - .Where(x => !subRaces.Contains(x)); - - if (Main.Settings.EnableHelpAction) - { - foreach (var characterRaceDefinition in races - .Where(a => !a.FeatureUnlocks.Exists(x => - x.Level == 1 && x.FeatureDefinition == FeatureDefinitionPowerHelpAction))) - { - characterRaceDefinition.FeatureUnlocks.Add( - new FeatureUnlockByLevel(FeatureDefinitionPowerHelpAction, 1)); - } - } - else - { - foreach (var characterRaceDefinition in races - .Where(a => a.FeatureUnlocks.Exists(x => - x.Level == 1 && x.FeatureDefinition == FeatureDefinitionPowerHelpAction))) - { - characterRaceDefinition.FeatureUnlocks.RemoveAll(x => - x.Level == 1 && x.FeatureDefinition == FeatureDefinitionPowerHelpAction); - } - } - } - - internal static void SwitchProneAction() - { - DropProne.actionType = ActionDefinitions.ActionType.NoCost; - DropProne.formType = Main.Settings.EnableProneAction - ? ActionDefinitions.ActionFormType.Small - : ActionDefinitions.ActionFormType.Invisible; - } internal static void SwitchDarknessPerceptive() { @@ -949,12 +895,6 @@ internal static void SwitchScimitarWeaponSpecialization() } } - internal static void SwitchBardHealingBalladOnLongRest() - { - FeatureDefinitionRestHealingModifiers.RestHealingModifierBardHealingBallad.applyDuringLongRest = - Main.Settings.EnableBardHealingBalladOnLongRest; - } - private static void SwitchSubclassAncestriesToUseCustomInvocationPools( string name, CharacterSubclassDefinition characterSubclassDefinition, diff --git a/SolastaUnfinishedBusiness/Models/GrappleContext.cs b/SolastaUnfinishedBusiness/Models/GrappleContext.cs index a1a0e755b8..2163b7fef4 100644 --- a/SolastaUnfinishedBusiness/Models/GrappleContext.cs +++ b/SolastaUnfinishedBusiness/Models/GrappleContext.cs @@ -66,7 +66,7 @@ internal static class GrappleContext .AddCustomSubFeatures(new PowerOrSpellFinishedByMeDisableGrapple()) .AddToDB(); - private static readonly ActionDefinition ActionGrapple = ActionDefinitionBuilder + internal static readonly ActionDefinition ActionGrapple = ActionDefinitionBuilder .Create($"Action{Grapple}") .SetGuiPresentation(Category.Action, AttackFree) .OverrideClassName("UsePower") @@ -77,7 +77,7 @@ internal static class GrappleContext .SetFormType(ActionDefinitions.ActionFormType.Large) .AddToDB(); - private static readonly ActionDefinition ActionDisableGrapple = ActionDefinitionBuilder + internal static readonly ActionDefinition ActionDisableGrapple = ActionDefinitionBuilder .Create($"Action{DisableGrapple}") .SetGuiPresentation(Category.Action, AttackFree) .OverrideClassName("UsePower") @@ -226,16 +226,6 @@ internal static void LateLoad() } } - internal static void SwitchGrappleAction() - { - ActionGrapple.formType = Main.Settings.EnableGrappleAction - ? ActionDefinitions.ActionFormType.Large - : ActionDefinitions.ActionFormType.Invisible; - - ActionDisableGrapple.formType = Main.Settings.EnableGrappleAction - ? ActionDefinitions.ActionFormType.Large - : ActionDefinitions.ActionFormType.Invisible; - } internal static void ValidateGrappleAfterForcedMove(GameLocationCharacter target) { diff --git a/SolastaUnfinishedBusiness/Models/LightingAndObscurementContext.cs b/SolastaUnfinishedBusiness/Models/LightingAndObscurementContext.cs index 6749f65ce0..c3ef1af4f5 100644 --- a/SolastaUnfinishedBusiness/Models/LightingAndObscurementContext.cs +++ b/SolastaUnfinishedBusiness/Models/LightingAndObscurementContext.cs @@ -954,7 +954,7 @@ internal static void SwitchOfficialObscurementRules() CombatAffinityHeavilyObscuredSelf.nullifiedBySelfSenses = [Type.Truesight, Type.Blindsight]; } - SrdAndHouseRulesContext.SwitchConditionBlindedShouldNotAllowOpportunityAttack(); + Tabletop2014Context.SwitchConditionBlindedShouldNotAllowOpportunityAttack(); } private static void SwitchCombatAffinityInvisibleSenses() diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index dba3cff020..7ac6936446 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -14,11 +14,9 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ConditionDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MonsterDefinitions; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionConditionAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSenses; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ItemDefinitions; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionRegenerations; namespace SolastaUnfinishedBusiness.Models; @@ -26,36 +24,6 @@ internal static class SrdAndHouseRulesContext { private const string InvisibleStalkerSubspellName = "ConjureElementalInvisibleStalker"; - internal static readonly HashSet ConjuredMonsters = - [ - ConjuredOneBeastTiger_Drake, - ConjuredTwoBeast_Direwolf, - ConjuredFourBeast_BadlandsSpider, - ConjuredEightBeast_Wolf, - - // Conjure minor elemental (4) - SkarnGhoul, // CR 2 - WindSnake, // CR 2 - Fire_Jester, // CR 1 - - // Conjure woodland beings (4) - not implemented - - // Conjure elemental (5) - Air_Elemental, // CR 5 - Fire_Elemental, // CR 5 - Earth_Elemental, // CR 5 - - InvisibleStalker, // CR 6 - - // Conjure fey (6) - FeyGiantApe, // CR 6 - FeyGiant_Eagle, // CR 5 - FeyBear, // CR 4 - Green_Hag, // CR 3 - FeyWolf, // CR 2 - FeyDriad - ]; - private static readonly Dictionary Tags = []; private static readonly List MonstersThatEmitLight = @@ -67,13 +35,6 @@ internal static class SrdAndHouseRulesContext Fire_Spider ]; - internal static readonly FeatureDefinitionActionAffinity ActionAffinityConditionBlind = - FeatureDefinitionActionAffinityBuilder - .Create("ActionAffinityConditionBlind") - .SetGuiPresentationNoContent(true) - .SetForbiddenActions(Id.AttackOpportunity) - .AddToDB(); - private static readonly DecisionPackageDefinition DecisionPackageRestrained = AiContext.BuildDecisionPackageBreakFree(ConditionRestrainedByEntangle.Name); @@ -88,25 +49,18 @@ internal static void LateLoad() SwitchAddBleedingToLesserRestoration(); SwitchAllowClubsToBeThrown(); SwitchChangeSleetStormToCube(); - SwitchColdResistanceAndImmunityAlsoGrantsWeatherImmunity(); - SwitchConditionBlindedShouldNotAllowOpportunityAttack(); - SwitchEldritchBlastRange(); SwitchEnableUpcastConjureElementalAndFey(); SwitchFilterOnHideousLaughter(); - SwitchFullyControlConjurations(); SwitchAllowBladeCantripsToUseReach(); SwitchHastedCasing(); SwitchMagicStaffFoci(); SwitchAllowTargetingSelectionWhenCastingChainLightningSpell(); - SwitchOfficialFoodRationsWeight(); SwitchRecurringEffectOnEntangle(); - SwitchRingOfRegenerationHealRate(); SwitchSchoolRestrictionsFromShadowCaster(); SwitchSchoolRestrictionsFromSpellBlade(); SwitchUniversalSylvanArmorAndLightbringer(); SwitchUseHeightOneCylinderEffect(); NoTwinnedBladeCantrips(); - ModifyGravitySlam(); } private static void LoadSenseNormalVisionRangeMultiplier() @@ -297,20 +251,6 @@ internal static void SwitchMagicStaffFoci() } } - internal static void SwitchConditionBlindedShouldNotAllowOpportunityAttack() - { - if (Main.Settings.BlindedConditionDontAllowAttackOfOpportunity) - { - ConditionDefinitions.ConditionBlinded.Features.TryAdd(ActionAffinityConditionBlind); - LightingAndObscurementContext.ConditionBlindedByDarkness.Features.TryAdd(ActionAffinityConditionBlind); - } - else - { - ConditionDefinitions.ConditionBlinded.Features.Remove(ActionAffinityConditionBlind); - LightingAndObscurementContext.ConditionBlindedByDarkness.Features.Remove(ActionAffinityConditionBlind); - } - } - private static void LoadAllowTargetingSelectionWhenCastingChainLightningSpell() { ChainLightning.AddCustomSubFeatures(new FilterTargetingCharacterChainLightning()); @@ -334,23 +274,6 @@ internal static void SwitchAllowTargetingSelectionWhenCastingChainLightningSpell } } - internal static void SwitchOfficialFoodRationsWeight() - { - var foodSrdWeight = Food_Ration; - var foodForagedSrdWeight = Food_Ration_Foraged; - - if (Main.Settings.UseOfficialFoodRationsWeight) - { - foodSrdWeight.weight = 2.0f; - foodForagedSrdWeight.weight = 2.0f; - } - else - { - foodSrdWeight.weight = 3.0f; - foodForagedSrdWeight.weight = 3.0f; - } - } - internal static void SwitchFilterOnHideousLaughter() { HideousLaughter.effectDescription.restrictedCreatureFamilies.Clear(); @@ -407,33 +330,6 @@ internal static void SwitchChangeSleetStormToCube() } } - internal static void SwitchEldritchBlastRange() - { - EldritchBlast.effectDescription.rangeParameter = Main.Settings.FixEldritchBlastRange ? 24 : 16; - } - - internal static void SwitchRingOfRegenerationHealRate() - { - var ringDefinition = RegenerationRing; - - if (Main.Settings.FixRingOfRegenerationHealRate) - { - // Heal by 1 hp per 3 minutes which is roughly the same as - // RAW of 1d6 (avg 3.5) every 10 minutes. - ringDefinition.tickType = DurationType.Minute; - ringDefinition.tickNumber = 3; - ringDefinition.diceNumber = 1; - } - else - { - ringDefinition.tickType = DurationType.Round; - ringDefinition.tickNumber = 1; - ringDefinition.diceNumber = 2; - } - - ringDefinition.dieType = DieType.D1; - } - internal static void SwitchUseHeightOneCylinderEffect() { // always applicable @@ -586,141 +482,6 @@ private static void BuildConjureElementalInvisibleStalker() } } - internal static void SwitchColdResistanceAndImmunityAlsoGrantsWeatherImmunity() - { - foreach (var featureSet in DatabaseRepository.GetDatabase()) - { - if (Main.Settings.ColdResistanceAlsoGrantsImmunityToChilledCondition) - { - if (featureSet.FeatureSet.Contains(FeatureDefinitionDamageAffinitys.DamageAffinityColdResistance)) - { - featureSet.FeatureSet.TryAdd(ConditionAffinityWeatherChilledImmunity); - featureSet.FeatureSet.TryAdd(ConditionAffinityWeatherFrozenImmunity); - } - } - else - { - featureSet.FeatureSet.Remove(ConditionAffinityWeatherChilledImmunity); - featureSet.FeatureSet.Remove(ConditionAffinityWeatherFrozenImmunity); - } - - if (Main.Settings.ColdImmunityAlsoGrantsImmunityToChilledAndFrozenCondition) - { - // ReSharper disable once InvertIf - if (featureSet.FeatureSet.Contains(FeatureDefinitionDamageAffinitys.DamageAffinityColdImmunity)) - { - featureSet.FeatureSet.TryAdd(ConditionAffinityWeatherChilledImmunity); - featureSet.FeatureSet.TryAdd(ConditionAffinityWeatherChilledInsteadOfFrozenImmunity); - featureSet.FeatureSet.TryAdd(ConditionAffinityWeatherFrozenImmunity); - } - } - else - { - featureSet.FeatureSet.Remove(ConditionAffinityWeatherChilledImmunity); - featureSet.FeatureSet.Remove(ConditionAffinityWeatherChilledInsteadOfFrozenImmunity); - featureSet.FeatureSet.Remove(ConditionAffinityWeatherFrozenImmunity); - } - } - - foreach (var condition in DatabaseRepository.GetDatabase()) - { - if (Main.Settings.ColdResistanceAlsoGrantsImmunityToChilledCondition) - { - if (condition.Features.Contains(FeatureDefinitionDamageAffinitys.DamageAffinityColdResistance)) - { - condition.Features.TryAdd(ConditionAffinityWeatherChilledImmunity); - condition.Features.TryAdd(ConditionAffinityWeatherFrozenImmunity); - } - } - else - { - condition.Features.Remove(ConditionAffinityWeatherChilledImmunity); - condition.Features.Remove(ConditionAffinityWeatherFrozenImmunity); - } - - if (Main.Settings.ColdImmunityAlsoGrantsImmunityToChilledAndFrozenCondition) - { - // ReSharper disable once InvertIf - if (condition.Features.Contains(FeatureDefinitionDamageAffinitys.DamageAffinityColdImmunity)) - { - condition.Features.TryAdd(ConditionAffinityWeatherChilledImmunity); - condition.Features.TryAdd(ConditionAffinityWeatherChilledInsteadOfFrozenImmunity); - condition.Features.TryAdd(ConditionAffinityWeatherFrozenImmunity); - } - } - else - { - condition.Features.Remove(ConditionAffinityWeatherChilledImmunity); - condition.Features.Remove(ConditionAffinityWeatherChilledInsteadOfFrozenImmunity); - condition.Features.Remove(ConditionAffinityWeatherFrozenImmunity); - } - } - - foreach (var item in DatabaseRepository.GetDatabase()) - { - if (Main.Settings.ColdResistanceAlsoGrantsImmunityToChilledCondition) - { - var itemProperty = item.staticProperties.FirstOrDefault(x => - x.FeatureDefinition == FeatureDefinitionDamageAffinitys.DamageAffinityColdResistance); - - if (itemProperty != null) - { - item.staticProperties.TryAdd(new ItemPropertyDescription(itemProperty) - { - featureDefinition = ConditionAffinityWeatherChilledImmunity - }); - item.staticProperties.TryAdd(new ItemPropertyDescription(itemProperty) - { - featureDefinition = ConditionAffinityWeatherFrozenImmunity - }); - } - } - else - { - item.staticProperties.RemoveAll(x => x.FeatureDefinition == ConditionAffinityWeatherChilledImmunity); - item.staticProperties.RemoveAll(x => x.FeatureDefinition == ConditionAffinityWeatherFrozenImmunity); - } - - if (Main.Settings.ColdImmunityAlsoGrantsImmunityToChilledAndFrozenCondition) - { - var itemProperty = item.staticProperties.FirstOrDefault(x => - x.FeatureDefinition == FeatureDefinitionDamageAffinitys.DamageAffinityColdImmunity); - - // ReSharper disable once InvertIf - if (itemProperty != null) - { - item.staticProperties.TryAdd(new ItemPropertyDescription(itemProperty) - { - featureDefinition = ConditionAffinityWeatherChilledImmunity - }); - item.staticProperties.TryAdd(new ItemPropertyDescription(itemProperty) - { - featureDefinition = ConditionAffinityWeatherChilledInsteadOfFrozenImmunity - }); - item.staticProperties.TryAdd(new ItemPropertyDescription(itemProperty) - { - featureDefinition = ConditionAffinityWeatherFrozenImmunity - }); - } - } - else - { - item.staticProperties.RemoveAll(x => x.FeatureDefinition == ConditionAffinityWeatherChilledImmunity); - item.staticProperties.RemoveAll(x => - x.FeatureDefinition == ConditionAffinityWeatherChilledInsteadOfFrozenImmunity); - item.staticProperties.RemoveAll(x => x.FeatureDefinition == ConditionAffinityWeatherFrozenImmunity); - } - } - } - - internal static void SwitchFullyControlConjurations() - { - foreach (var conjuredMonster in ConjuredMonsters) - { - conjuredMonster.fullyControlledWhenAllied = Main.Settings.FullyControlConjurations; - } - } - internal static void SwitchAllowClubsToBeThrown() { var db = DatabaseRepository.GetDatabase(); @@ -977,37 +738,4 @@ internal sealed class NoTwinned public static NoTwinned Mark { get; } = new(); } - - #region Gravity Slam - - private static EffectDescription _gravitySlamVanilla; - private static EffectDescription _gravitySlamModified; - - private static void ModifyGravitySlam() - { - _gravitySlamVanilla = GravitySlam.EffectDescription; - - _gravitySlamModified = EffectDescriptionBuilder.Create(_gravitySlamVanilla) - .SetTargetingData(Side.All, RangeType.Distance, 20, TargetType.Cylinder, 4, 10) - .AddEffectForms(EffectFormBuilder.MotionForm(ExtraMotionType.PushDown, 10)) - .Build(); - - ToggleGravitySlamModification(); - } - - internal static void ToggleGravitySlamModification() - { - if (Main.Settings.EnablePullPushOnVerticalDirection && Main.Settings.ModifyGravitySlam) - { - GravitySlam.effectDescription = _gravitySlamModified; - } - else - { - GravitySlam.effectDescription = _gravitySlamVanilla; - } - - Global.RefreshControlledCharacter(); - } - - #endregion } diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2014Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2014Context.cs new file mode 100644 index 0000000000..e0b9651e06 --- /dev/null +++ b/SolastaUnfinishedBusiness/Models/Tabletop2014Context.cs @@ -0,0 +1,371 @@ +using System.Collections.Generic; +using System.Linq; +using SolastaUnfinishedBusiness.Api.GameExtensions; +using SolastaUnfinishedBusiness.Builders; +using SolastaUnfinishedBusiness.Builders.Features; +using SolastaUnfinishedBusiness.CustomUI; +using SolastaUnfinishedBusiness.Properties; +using static ActionDefinitions; +using static RuleDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ActionDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MonsterDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionConditionAffinitys; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ItemDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionRegenerations; + +namespace SolastaUnfinishedBusiness.Models; + +public class Tabletop2014Context +{ + internal static readonly HashSet ConjuredMonsters = + [ + ConjuredOneBeastTiger_Drake, + ConjuredTwoBeast_Direwolf, + ConjuredFourBeast_BadlandsSpider, + ConjuredEightBeast_Wolf, + + // Conjure minor elemental (4) + SkarnGhoul, // CR 2 + WindSnake, // CR 2 + Fire_Jester, // CR 1 + + // Conjure woodland beings (4) - not implemented + + // Conjure elemental (5) + Air_Elemental, // CR 5 + Fire_Elemental, // CR 5 + Earth_Elemental, // CR 5 + + InvisibleStalker, // CR 6 + + // Conjure fey (6) + FeyGiantApe, // CR 6 + FeyGiant_Eagle, // CR 5 + FeyBear, // CR 4 + Green_Hag, // CR 3 + FeyWolf, // CR 2 + FeyDriad + ]; + + internal static readonly FeatureDefinitionActionAffinity ActionAffinityConditionBlind = + FeatureDefinitionActionAffinityBuilder + .Create("ActionAffinityConditionBlind") + .SetGuiPresentationNoContent(true) + .SetForbiddenActions(Id.AttackOpportunity) + .AddToDB(); + + internal static readonly FeatureDefinitionPower FeatureDefinitionPowerHelpAction = FeatureDefinitionPowerBuilder + .Create("PowerHelp") + .SetGuiPresentation(Category.Feature, Sprites.GetSprite("PowerHelp", Resources.PowerHelp, 256, 128)) + .SetUsesFixed(ActivationTime.Action) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Round, 1, TurnOccurenceType.EndOfSourceTurn) + .SetTargetingData(Side.Enemy, RangeType.Touch, 0, TargetType.IndividualsUnique) + .SetEffectForms(EffectFormBuilder.ConditionForm(CustomConditionsContext.Distracted)) + .Build()) + .SetUniqueInstance() + .AddToDB(); + + internal static void SwitchFullyControlConjurations() + { + foreach (var conjuredMonster in ConjuredMonsters) + { + conjuredMonster.fullyControlledWhenAllied = Main.Settings.FullyControlConjurations; + } + } + + internal static void LateLoad() + { + ModifyGravitySlam(); + SwitchProneAction(); + SwitchHelpPower(); + SwitchGrappleAction(); + SwitchFullyControlConjurations(); + SwitchConditionBlindedShouldNotAllowOpportunityAttack(); + SwitchColdResistanceAndImmunityAlsoGrantsWeatherImmunity(); + SwitchOfficialFoodRationsWeight(); + SwitchRingOfRegenerationHealRate(); + SwitchEldritchBlastRange(); + SwitchBardHealingBalladOnLongRest(); + } + + + internal static void SwitchEldritchBlastRange() + { + EldritchBlast.effectDescription.rangeParameter = Main.Settings.FixEldritchBlastRange ? 24 : 16; + } + + + internal static void SwitchBardHealingBalladOnLongRest() + { + FeatureDefinitionRestHealingModifiers.RestHealingModifierBardHealingBallad.applyDuringLongRest = + Main.Settings.EnableBardHealingBalladOnLongRest; + } + + internal static void SwitchRingOfRegenerationHealRate() + { + var ringDefinition = RegenerationRing; + + if (Main.Settings.FixRingOfRegenerationHealRate) + { + // Heal by 1 hp per 3 minutes which is roughly the same as + // RAW of 1d6 (avg 3.5) every 10 minutes. + ringDefinition.tickType = DurationType.Minute; + ringDefinition.tickNumber = 3; + ringDefinition.diceNumber = 1; + } + else + { + ringDefinition.tickType = DurationType.Round; + ringDefinition.tickNumber = 1; + ringDefinition.diceNumber = 2; + } + + ringDefinition.dieType = DieType.D1; + } + + internal static void SwitchOfficialFoodRationsWeight() + { + var foodSrdWeight = Food_Ration; + var foodForagedSrdWeight = Food_Ration_Foraged; + + if (Main.Settings.UseOfficialFoodRationsWeight) + { + foodSrdWeight.weight = 2.0f; + foodForagedSrdWeight.weight = 2.0f; + } + else + { + foodSrdWeight.weight = 3.0f; + foodForagedSrdWeight.weight = 3.0f; + } + } + + internal static void SwitchColdResistanceAndImmunityAlsoGrantsWeatherImmunity() + { + foreach (var featureSet in DatabaseRepository.GetDatabase()) + { + if (Main.Settings.ColdResistanceAlsoGrantsImmunityToChilledCondition) + { + if (featureSet.FeatureSet.Contains(FeatureDefinitionDamageAffinitys.DamageAffinityColdResistance)) + { + featureSet.FeatureSet.TryAdd(ConditionAffinityWeatherChilledImmunity); + featureSet.FeatureSet.TryAdd(ConditionAffinityWeatherFrozenImmunity); + } + } + else + { + featureSet.FeatureSet.Remove(ConditionAffinityWeatherChilledImmunity); + featureSet.FeatureSet.Remove(ConditionAffinityWeatherFrozenImmunity); + } + + if (Main.Settings.ColdImmunityAlsoGrantsImmunityToChilledAndFrozenCondition) + { + // ReSharper disable once InvertIf + if (featureSet.FeatureSet.Contains(FeatureDefinitionDamageAffinitys.DamageAffinityColdImmunity)) + { + featureSet.FeatureSet.TryAdd(ConditionAffinityWeatherChilledImmunity); + featureSet.FeatureSet.TryAdd(ConditionAffinityWeatherChilledInsteadOfFrozenImmunity); + featureSet.FeatureSet.TryAdd(ConditionAffinityWeatherFrozenImmunity); + } + } + else + { + featureSet.FeatureSet.Remove(ConditionAffinityWeatherChilledImmunity); + featureSet.FeatureSet.Remove(ConditionAffinityWeatherChilledInsteadOfFrozenImmunity); + featureSet.FeatureSet.Remove(ConditionAffinityWeatherFrozenImmunity); + } + } + + foreach (var condition in DatabaseRepository.GetDatabase()) + { + if (Main.Settings.ColdResistanceAlsoGrantsImmunityToChilledCondition) + { + if (condition.Features.Contains(FeatureDefinitionDamageAffinitys.DamageAffinityColdResistance)) + { + condition.Features.TryAdd(ConditionAffinityWeatherChilledImmunity); + condition.Features.TryAdd(ConditionAffinityWeatherFrozenImmunity); + } + } + else + { + condition.Features.Remove(ConditionAffinityWeatherChilledImmunity); + condition.Features.Remove(ConditionAffinityWeatherFrozenImmunity); + } + + if (Main.Settings.ColdImmunityAlsoGrantsImmunityToChilledAndFrozenCondition) + { + // ReSharper disable once InvertIf + if (condition.Features.Contains(FeatureDefinitionDamageAffinitys.DamageAffinityColdImmunity)) + { + condition.Features.TryAdd(ConditionAffinityWeatherChilledImmunity); + condition.Features.TryAdd(ConditionAffinityWeatherChilledInsteadOfFrozenImmunity); + condition.Features.TryAdd(ConditionAffinityWeatherFrozenImmunity); + } + } + else + { + condition.Features.Remove(ConditionAffinityWeatherChilledImmunity); + condition.Features.Remove(ConditionAffinityWeatherChilledInsteadOfFrozenImmunity); + condition.Features.Remove(ConditionAffinityWeatherFrozenImmunity); + } + } + + foreach (var item in DatabaseRepository.GetDatabase()) + { + if (Main.Settings.ColdResistanceAlsoGrantsImmunityToChilledCondition) + { + var itemProperty = item.staticProperties.FirstOrDefault(x => + x.FeatureDefinition == FeatureDefinitionDamageAffinitys.DamageAffinityColdResistance); + + if (itemProperty != null) + { + item.staticProperties.TryAdd(new ItemPropertyDescription(itemProperty) + { + featureDefinition = ConditionAffinityWeatherChilledImmunity + }); + item.staticProperties.TryAdd(new ItemPropertyDescription(itemProperty) + { + featureDefinition = ConditionAffinityWeatherFrozenImmunity + }); + } + } + else + { + item.staticProperties.RemoveAll(x => x.FeatureDefinition == ConditionAffinityWeatherChilledImmunity); + item.staticProperties.RemoveAll(x => x.FeatureDefinition == ConditionAffinityWeatherFrozenImmunity); + } + + if (Main.Settings.ColdImmunityAlsoGrantsImmunityToChilledAndFrozenCondition) + { + var itemProperty = item.staticProperties.FirstOrDefault(x => + x.FeatureDefinition == FeatureDefinitionDamageAffinitys.DamageAffinityColdImmunity); + + // ReSharper disable once InvertIf + if (itemProperty != null) + { + item.staticProperties.TryAdd(new ItemPropertyDescription(itemProperty) + { + featureDefinition = ConditionAffinityWeatherChilledImmunity + }); + item.staticProperties.TryAdd(new ItemPropertyDescription(itemProperty) + { + featureDefinition = ConditionAffinityWeatherChilledInsteadOfFrozenImmunity + }); + item.staticProperties.TryAdd(new ItemPropertyDescription(itemProperty) + { + featureDefinition = ConditionAffinityWeatherFrozenImmunity + }); + } + } + else + { + item.staticProperties.RemoveAll(x => x.FeatureDefinition == ConditionAffinityWeatherChilledImmunity); + item.staticProperties.RemoveAll(x => + x.FeatureDefinition == ConditionAffinityWeatherChilledInsteadOfFrozenImmunity); + item.staticProperties.RemoveAll(x => x.FeatureDefinition == ConditionAffinityWeatherFrozenImmunity); + } + } + } + + internal static void SwitchConditionBlindedShouldNotAllowOpportunityAttack() + { + if (Main.Settings.BlindedConditionDontAllowAttackOfOpportunity) + { + ConditionDefinitions.ConditionBlinded.Features.TryAdd(ActionAffinityConditionBlind); + LightingAndObscurementContext.ConditionBlindedByDarkness.Features.TryAdd(ActionAffinityConditionBlind); + } + else + { + ConditionDefinitions.ConditionBlinded.Features.Remove(ActionAffinityConditionBlind); + LightingAndObscurementContext.ConditionBlindedByDarkness.Features.Remove(ActionAffinityConditionBlind); + } + } + + internal static void SwitchGrappleAction() + { + GrappleContext.ActionGrapple.formType = Main.Settings.EnableGrappleAction + ? ActionFormType.Large + : ActionFormType.Invisible; + + GrappleContext.ActionDisableGrapple.formType = Main.Settings.EnableGrappleAction + ? ActionFormType.Large + : ActionFormType.Invisible; + } + + internal static void SwitchProneAction() + { + DropProne.actionType = ActionType.NoCost; + DropProne.formType = Main.Settings.EnableProneAction + ? ActionFormType.Small + : ActionFormType.Invisible; + } + + + internal static void SwitchHelpPower() + { + var dbCharacterRaceDefinition = DatabaseRepository.GetDatabase(); + var subRaces = dbCharacterRaceDefinition + .SelectMany(x => x.SubRaces); + var races = dbCharacterRaceDefinition + .Where(x => !subRaces.Contains(x)); + + if (Main.Settings.EnableHelpAction) + { + foreach (var characterRaceDefinition in races + .Where(a => !a.FeatureUnlocks.Exists(x => + x.Level == 1 && x.FeatureDefinition == FeatureDefinitionPowerHelpAction))) + { + characterRaceDefinition.FeatureUnlocks.Add( + new FeatureUnlockByLevel(FeatureDefinitionPowerHelpAction, 1)); + } + } + else + { + foreach (var characterRaceDefinition in races + .Where(a => a.FeatureUnlocks.Exists(x => + x.Level == 1 && x.FeatureDefinition == FeatureDefinitionPowerHelpAction))) + { + characterRaceDefinition.FeatureUnlocks.RemoveAll(x => + x.Level == 1 && x.FeatureDefinition == FeatureDefinitionPowerHelpAction); + } + } + } + + #region Gravity Slam + + private static EffectDescription _gravitySlamVanilla; + private static EffectDescription _gravitySlamModified; + + private static void ModifyGravitySlam() + { + _gravitySlamVanilla = GravitySlam.EffectDescription; + + _gravitySlamModified = EffectDescriptionBuilder.Create(_gravitySlamVanilla) + .SetTargetingData(Side.All, RangeType.Distance, 20, TargetType.Cylinder, 4, 10) + .AddEffectForms(EffectFormBuilder.MotionForm(ExtraMotionType.PushDown, 10)) + .Build(); + + ToggleGravitySlamModification(); + } + + internal static void ToggleGravitySlamModification() + { + if (Main.Settings.EnablePullPushOnVerticalDirection && Main.Settings.ModifyGravitySlam) + { + GravitySlam.effectDescription = _gravitySlamModified; + } + else + { + GravitySlam.effectDescription = _gravitySlamVanilla; + } + + Global.RefreshControlledCharacter(); + } + + #endregion +} diff --git a/SolastaUnfinishedBusiness/Models/OneDndContext.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs similarity index 99% rename from SolastaUnfinishedBusiness/Models/OneDndContext.cs rename to SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index d5a67d6d04..207c3aa420 100644 --- a/SolastaUnfinishedBusiness/Models/OneDndContext.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -33,7 +33,7 @@ namespace SolastaUnfinishedBusiness.Models; -internal static class OneDndContext +internal static class Tabletop2024Context { private static readonly FeatureDefinitionCombatAffinity CombatAffinityConditionSurprised = FeatureDefinitionCombatAffinityBuilder @@ -1254,7 +1254,7 @@ private static void BuildBarbarianBrutalStrike() .SetSilent(Silent.WhenAdded) .SetPossessive() .SetConditionType(ConditionType.Detrimental) - .SetFeatures(SrdAndHouseRulesContext.ActionAffinityConditionBlind) + .SetFeatures(Tabletop2014Context.ActionAffinityConditionBlind) .AddToDB(); // Sundering Blow diff --git a/SolastaUnfinishedBusiness/Patches/NarrativeDirectionManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/NarrativeDirectionManagerPatcher.cs index 6f7ba78df3..a773bd2130 100644 --- a/SolastaUnfinishedBusiness/Patches/NarrativeDirectionManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/NarrativeDirectionManagerPatcher.cs @@ -23,7 +23,7 @@ public static void Prefix(List involvedGameCharacters) { involvedGameCharacters.RemoveAll( x => x.RulesetCharacter is RulesetCharacterMonster rulesetCharacterMonster - && SrdAndHouseRulesContext.ConjuredMonsters.Contains(rulesetCharacterMonster + && Tabletop2014Context.ConjuredMonsters.Contains(rulesetCharacterMonster .MonsterDefinition)); } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 939bddb129..caa5a88690 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -2589,7 +2589,7 @@ internal static SpellDefinition BuildFindFamiliar() MovementAffinityNoClimb, MovementAffinityNoSpecialMoves, FeatureDefinitionConditionAffinitys.ConditionAffinityProneImmunity, - CharacterContext.FeatureDefinitionPowerHelpAction, + Tabletop2014Context.FeatureDefinitionPowerHelpAction, CharacterContext.PowerTeleportSummon, CharacterContext.PowerVanishSummon) .SetMonsterPresentation( diff --git a/SolastaUnfinishedBusiness/Subclasses/RangerWildMaster.cs b/SolastaUnfinishedBusiness/Subclasses/RangerWildMaster.cs index c673ae60fc..18a03ad472 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RangerWildMaster.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RangerWildMaster.cs @@ -498,7 +498,7 @@ private static FeatureDefinitionPowerSharedPool BuildBeastCompanionBear( .Create(monsterDefinition, Name + monsterDefinition.name + "03") .SetGuiPresentation(MonsterDefinitions.BlackBear.GuiPresentation) .SetMonsterPresentation(MonsterDefinitions.BlackBear.MonsterPresentation) - .AddFeatures(CharacterContext.FeatureDefinitionPowerHelpAction) + .AddFeatures(Tabletop2014Context.FeatureDefinitionPowerHelpAction) .AddFeatures(monsterAdditionalFeatures) .SetArmorClass(BaseAC + 2) .SetAbilityScores(16, 12, 16, 10, 12, 8) @@ -533,7 +533,7 @@ private static FeatureDefinitionPowerSharedPool BuildBeastCompanionBear( .Create(monsterDefinition, Name + monsterDefinition.name + "11") .SetGuiPresentation(MonsterDefinitions.BlackBear.GuiPresentation) .SetMonsterPresentation(MonsterDefinitions.BlackBear.MonsterPresentation) - .AddFeatures(CharacterContext.FeatureDefinitionPowerHelpAction) + .AddFeatures(Tabletop2014Context.FeatureDefinitionPowerHelpAction) .AddFeatures(monsterAdditionalFeatures) .SetArmorClass(BaseAC + 2) .SetAbilityScores(16, 12, 16, 10, 12, 8) @@ -610,7 +610,7 @@ private static FeatureDefinitionPowerSharedPool BuildBeastCompanionEagle( .Create(monsterDefinition, Name + monsterDefinition.name + "03") .SetGuiPresentation(MonsterDefinitions.Giant_Eagle.GuiPresentation) .SetMonsterPresentation(MonsterDefinitions.Giant_Eagle.MonsterPresentation) - .AddFeatures(CharacterContext.FeatureDefinitionPowerHelpAction) + .AddFeatures(Tabletop2014Context.FeatureDefinitionPowerHelpAction) .AddFeatures(monsterAdditionalFeatures) .SetArmorClass(BaseAC + 1) .SetAbilityScores(10, 16, 12, 14, 8, 14) @@ -645,7 +645,7 @@ private static FeatureDefinitionPowerSharedPool BuildBeastCompanionEagle( .Create(monsterDefinition, Name + monsterDefinition.name + "11") .SetGuiPresentation(MonsterDefinitions.Giant_Eagle.GuiPresentation) .SetMonsterPresentation(MonsterDefinitions.Giant_Eagle.MonsterPresentation) - .AddFeatures(CharacterContext.FeatureDefinitionPowerHelpAction) + .AddFeatures(Tabletop2014Context.FeatureDefinitionPowerHelpAction) .AddFeatures(monsterAdditionalFeatures) .SetArmorClass(BaseAC + 1) .SetAbilityScores(10, 16, 12, 14, 8, 14) @@ -701,7 +701,7 @@ private static FeatureDefinitionPowerSharedPool BuildBeastCompanionWolf( .Create(monsterDefinition, Name + monsterDefinition.name + "03") .SetGuiPresentation(MonsterDefinitions.AlphaWolf.GuiPresentation) .SetMonsterPresentation(MonsterDefinitions.AlphaWolf.MonsterPresentation) - .AddFeatures(CharacterContext.FeatureDefinitionPowerHelpAction) + .AddFeatures(Tabletop2014Context.FeatureDefinitionPowerHelpAction) .AddFeatures(monsterAdditionalFeatures) .SetArmorClass(BaseAC + 1) .SetAbilityScores(12, 16, 14, 14, 8, 10) @@ -727,7 +727,7 @@ private static FeatureDefinitionPowerSharedPool BuildBeastCompanionWolf( .Create(monsterDefinition, Name + monsterDefinition.name + "11") .SetGuiPresentation(MonsterDefinitions.AlphaWolf.GuiPresentation) .SetMonsterPresentation(MonsterDefinitions.AlphaWolf.MonsterPresentation) - .AddFeatures(CharacterContext.FeatureDefinitionPowerHelpAction) + .AddFeatures(Tabletop2014Context.FeatureDefinitionPowerHelpAction) .AddFeatures(monsterAdditionalFeatures) .SetCreatureTags(BeastCompanionTag) .SetArmorClass(BaseAC + 1) From dc51c8f52f33366cbd692b29e311777a41cc4fd9 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 10:04:22 -0800 Subject: [PATCH 46/85] ops --- SolastaUnfinishedBusiness/Models/BootContext.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/SolastaUnfinishedBusiness/Models/BootContext.cs b/SolastaUnfinishedBusiness/Models/BootContext.cs index 66c61f495d..dad13ce171 100644 --- a/SolastaUnfinishedBusiness/Models/BootContext.cs +++ b/SolastaUnfinishedBusiness/Models/BootContext.cs @@ -115,6 +115,7 @@ internal static void Startup() // Set anything on subs that depends on spells and others SrdAndHouseRulesContext.LateLoad(); + Tabletop2014Context.LateLoad(); Tabletop2024Context.LateLoad(); SubclassesContext.LateLoad(); From 8db0c543ba17763ca63765df1c38519c2aaa6b57 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 10:55:39 -0800 Subject: [PATCH 47/85] continue models reorg --- .../Displays/ClassesDisplay.cs | 28 +- .../Displays/GeneralDisplay.cs | 8 +- .../FightingStyles/AstralReach.cs | 6 +- .../FightingStyles/BlindFighting.cs | 6 +- .../FightingStyles/Crippling.cs | 6 +- .../FightingStyles/Executioner.cs | 6 +- .../FightingStyles/HandAndAHalf.cs | 6 +- .../FightingStyles/Interception.cs | 6 +- .../FightingStyles/Lunger.cs | 6 +- .../FightingStyles/RemarkableTechnique.cs | 6 +- .../FightingStyles/Torchbearer.cs | 6 +- .../Models/CharacterContext.cs | 166 +-- .../Models/CharacterUAContext.cs | 972 --------------- .../Models/ClassesContext.cs | 537 ++++++++- .../Models/CustomWeaponsContext.cs | 25 - .../Models/DeitiesContext.cs | 66 -- .../Models/DelegatesContext.cs | 1056 ----------------- .../Models/FixesContext.cs | 2 +- .../Models/Tabletop2024Context.cs | 631 +++++++++- .../Subclasses/RoguishDuelist.cs | 2 +- .../Subclasses/RoguishOpportunist.cs | 2 +- .../Subclasses/RoguishUmbralStalker.cs | 4 +- .../Validators/ValidatorsCharacter.cs | 2 +- 23 files changed, 1224 insertions(+), 2331 deletions(-) delete mode 100644 SolastaUnfinishedBusiness/Models/CharacterUAContext.cs delete mode 100644 SolastaUnfinishedBusiness/Models/DeitiesContext.cs delete mode 100644 SolastaUnfinishedBusiness/Models/DelegatesContext.cs diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index b1c66a7538..f70eb79ea1 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -19,7 +19,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&GrantScimitarSpecializationToBarkMonkRogue"), ref toggle, UI.AutoWidth())) { Main.Settings.GrantScimitarSpecializationToBardRogue = toggle; - CharacterContext.SwitchScimitarWeaponSpecialization(); + ClassesContext.SwitchScimitarWeaponSpecialization(); } UI.Label(); @@ -95,7 +95,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableBarbarianFightingStyle"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableBarbarianFightingStyle = toggle; - CharacterContext.SwitchBarbarianFightingStyle(); + ClassesContext.SwitchBarbarianFightingStyle(); } toggle = Main.Settings.EnableBarbarianRecklessSameBuffDebuffDuration; @@ -160,7 +160,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableFighterWeaponSpecialization"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableFighterWeaponSpecialization = toggle; - CharacterContext.SwitchFighterWeaponSpecialization(); + ClassesContext.SwitchFighterWeaponSpecialization(); } toggle = Main.Settings.SwapSecondWindToUseOneDndUsagesProgression; @@ -177,7 +177,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableMonkAbundantKi"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableMonkAbundantKi = toggle; - CharacterContext.SwitchMonkAbundantKi(); + ClassesContext.SwitchMonkAbundantKi(); } toggle = Main.Settings.EnableMonkBodyAndMindToReplacePerfectSelf; @@ -192,7 +192,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableMonkFightingStyle"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableMonkFightingStyle = toggle; - CharacterContext.SwitchMonkFightingStyle(); + ClassesContext.SwitchMonkFightingStyle(); } toggle = Main.Settings.EnableMonkDoNotRequireAttackActionForFlurry; @@ -207,7 +207,7 @@ internal static void DisplayClasses() UI.AutoWidth())) { Main.Settings.EnableMonkHandwrapsUseGauntletSlot = toggle; - CustomWeaponsContext.UpdateHandWrapsUseGauntletSlot(); + ClassesContext.UpdateHandWrapsUseGauntletSlot(); } toggle = Main.Settings.EnableMonkHeightenedMetabolism; @@ -223,7 +223,7 @@ internal static void DisplayClasses() UI.AutoWidth())) { Main.Settings.EnableMonkImprovedUnarmoredMovementToMoveOnTheWall = toggle; - CharacterContext.SwitchMonkImprovedUnarmoredMovementToMoveOnTheWall(); + ClassesContext.SwitchMonkImprovedUnarmoredMovementToMoveOnTheWall(); } toggle = Main.Settings.EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack; @@ -246,7 +246,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableMonkWeaponSpecialization"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableMonkWeaponSpecialization = toggle; - CharacterContext.SwitchMonkWeaponSpecialization(); + ClassesContext.SwitchMonkWeaponSpecialization(); } toggle = Main.Settings.SwapMonkToUseOneDndUnarmedDieTypeProgression; @@ -300,7 +300,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&AddHumanoidFavoredEnemyToRanger"), ref toggle, UI.AutoWidth())) { Main.Settings.AddHumanoidFavoredEnemyToRanger = toggle; - CharacterContext.SwitchRangerHumanoidFavoredEnemy(); + ClassesContext.SwitchRangerHumanoidFavoredEnemy(); } toggle = Main.Settings.EnableRangerNatureShroudAt14; @@ -325,28 +325,28 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableRogueCunningStrike"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRogueCunningStrike = toggle; - CharacterContext.SwitchRogueCunningStrike(); + Tabletop2024Context.SwitchRogueCunningStrike(); } toggle = Main.Settings.EnableRogueFightingStyle; if (UI.Toggle(Gui.Localize("ModUi/&EnableRogueFightingStyle"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRogueFightingStyle = toggle; - CharacterContext.SwitchRogueFightingStyle(); + ClassesContext.SwitchRogueFightingStyle(); } toggle = Main.Settings.EnableRogueSteadyAim; if (UI.Toggle(Gui.Localize("ModUi/&EnableRogueSteadyAim"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRogueSteadyAim = toggle; - CharacterContext.SwitchRogueSteadyAim(); + Tabletop2024Context.SwitchRogueSteadyAim(); } toggle = Main.Settings.RemoveRogueBlindSense; if (UI.Toggle(Gui.Localize("ModUi/&RemoveRogueBlindSense"), ref toggle, UI.AutoWidth())) { Main.Settings.RemoveRogueBlindSense = toggle; - CharacterContext.SwitchRogueBlindSense(); + Tabletop2024Context.SwitchRogueBlindSense(); } UI.Label(); @@ -364,7 +364,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcererMagicalGuidance"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableSorcererMagicalGuidance = toggle; - CharacterContext.SwitchSorcererMagicalGuidance(); + ClassesContext.SwitchSorcererMagicalGuidance(); } toggle = Main.Settings.EnableSorcererQuickenedAction; diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index a095299c7e..59ee0be38d 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -482,21 +482,21 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableRogueCunningStrike"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRogueCunningStrike = toggle; - CharacterContext.SwitchRogueCunningStrike(); + Tabletop2024Context.SwitchRogueCunningStrike(); } toggle = Main.Settings.EnableRogueSteadyAim; if (UI.Toggle(Gui.Localize("ModUi/&EnableRogueSteadyAim"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRogueSteadyAim = toggle; - CharacterContext.SwitchRogueSteadyAim(); + Tabletop2024Context.SwitchRogueSteadyAim(); } toggle = Main.Settings.RemoveRogueBlindSense; if (UI.Toggle(Gui.Localize("ModUi/&RemoveRogueBlindSense"), ref toggle, UI.AutoWidth())) { Main.Settings.RemoveRogueBlindSense = toggle; - CharacterContext.SwitchRogueBlindSense(); + Tabletop2024Context.SwitchRogueBlindSense(); } UI.Label(); @@ -856,7 +856,7 @@ private static void DisplayTabletop() if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcererMagicalGuidance"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableSorcererMagicalGuidance = toggle; - CharacterContext.SwitchSorcererMagicalGuidance(); + ClassesContext.SwitchSorcererMagicalGuidance(); } toggle = Main.Settings.EnableSorcererQuickenedAction; diff --git a/SolastaUnfinishedBusiness/FightingStyles/AstralReach.cs b/SolastaUnfinishedBusiness/FightingStyles/AstralReach.cs index a8dbc77219..12e7d96207 100644 --- a/SolastaUnfinishedBusiness/FightingStyles/AstralReach.cs +++ b/SolastaUnfinishedBusiness/FightingStyles/AstralReach.cs @@ -31,9 +31,9 @@ internal sealed class AstralReach : AbstractFightingStyle internal override List FightingStyleChoice => [ - CharacterContext.FightingStyleChoiceBarbarian, - CharacterContext.FightingStyleChoiceMonk, - CharacterContext.FightingStyleChoiceRogue, + ClassesContext.FightingStyleChoiceBarbarian, + ClassesContext.FightingStyleChoiceMonk, + ClassesContext.FightingStyleChoiceRogue, FightingStyleChampionAdditional, FightingStyleFighter, FightingStylePaladin, diff --git a/SolastaUnfinishedBusiness/FightingStyles/BlindFighting.cs b/SolastaUnfinishedBusiness/FightingStyles/BlindFighting.cs index 4589b6c437..1eb029a11e 100644 --- a/SolastaUnfinishedBusiness/FightingStyles/BlindFighting.cs +++ b/SolastaUnfinishedBusiness/FightingStyles/BlindFighting.cs @@ -23,9 +23,9 @@ internal class BlindFighting : AbstractFightingStyle internal override List FightingStyleChoice => [ - CharacterContext.FightingStyleChoiceBarbarian, - CharacterContext.FightingStyleChoiceMonk, - CharacterContext.FightingStyleChoiceRogue, + ClassesContext.FightingStyleChoiceBarbarian, + ClassesContext.FightingStyleChoiceMonk, + ClassesContext.FightingStyleChoiceRogue, FightingStyleChampionAdditional, FightingStyleFighter, FightingStylePaladin, diff --git a/SolastaUnfinishedBusiness/FightingStyles/Crippling.cs b/SolastaUnfinishedBusiness/FightingStyles/Crippling.cs index 9771ceb361..42e3acaabf 100644 --- a/SolastaUnfinishedBusiness/FightingStyles/Crippling.cs +++ b/SolastaUnfinishedBusiness/FightingStyles/Crippling.cs @@ -38,9 +38,9 @@ internal sealed class Crippling : AbstractFightingStyle internal override List FightingStyleChoice => [ - CharacterContext.FightingStyleChoiceBarbarian, - CharacterContext.FightingStyleChoiceMonk, - CharacterContext.FightingStyleChoiceRogue, + ClassesContext.FightingStyleChoiceBarbarian, + ClassesContext.FightingStyleChoiceMonk, + ClassesContext.FightingStyleChoiceRogue, FightingStyleChampionAdditional, FightingStyleFighter, FightingStylePaladin, diff --git a/SolastaUnfinishedBusiness/FightingStyles/Executioner.cs b/SolastaUnfinishedBusiness/FightingStyles/Executioner.cs index 9b663f9b65..ded35f1103 100644 --- a/SolastaUnfinishedBusiness/FightingStyles/Executioner.cs +++ b/SolastaUnfinishedBusiness/FightingStyles/Executioner.cs @@ -37,9 +37,9 @@ internal sealed class Executioner : AbstractFightingStyle internal override List FightingStyleChoice => [ - CharacterContext.FightingStyleChoiceBarbarian, - CharacterContext.FightingStyleChoiceMonk, - CharacterContext.FightingStyleChoiceRogue, + ClassesContext.FightingStyleChoiceBarbarian, + ClassesContext.FightingStyleChoiceMonk, + ClassesContext.FightingStyleChoiceRogue, FightingStyleChampionAdditional, FightingStyleFighter, FightingStylePaladin, diff --git a/SolastaUnfinishedBusiness/FightingStyles/HandAndAHalf.cs b/SolastaUnfinishedBusiness/FightingStyles/HandAndAHalf.cs index c207346151..80469c8332 100644 --- a/SolastaUnfinishedBusiness/FightingStyles/HandAndAHalf.cs +++ b/SolastaUnfinishedBusiness/FightingStyles/HandAndAHalf.cs @@ -35,9 +35,9 @@ internal sealed class HandAndAHalf : AbstractFightingStyle internal override List FightingStyleChoice => [ - CharacterContext.FightingStyleChoiceBarbarian, - CharacterContext.FightingStyleChoiceMonk, - CharacterContext.FightingStyleChoiceRogue, + ClassesContext.FightingStyleChoiceBarbarian, + ClassesContext.FightingStyleChoiceMonk, + ClassesContext.FightingStyleChoiceRogue, FightingStyleChampionAdditional, FightingStyleFighter, FightingStylePaladin, diff --git a/SolastaUnfinishedBusiness/FightingStyles/Interception.cs b/SolastaUnfinishedBusiness/FightingStyles/Interception.cs index 8e5dd1ac2f..e4e14d9ced 100644 --- a/SolastaUnfinishedBusiness/FightingStyles/Interception.cs +++ b/SolastaUnfinishedBusiness/FightingStyles/Interception.cs @@ -54,9 +54,9 @@ internal sealed class Interception : AbstractFightingStyle internal override List FightingStyleChoice => [ - CharacterContext.FightingStyleChoiceBarbarian, - CharacterContext.FightingStyleChoiceMonk, - CharacterContext.FightingStyleChoiceRogue, + ClassesContext.FightingStyleChoiceBarbarian, + ClassesContext.FightingStyleChoiceMonk, + ClassesContext.FightingStyleChoiceRogue, FightingStyleChampionAdditional, FightingStyleFighter, FightingStylePaladin, diff --git a/SolastaUnfinishedBusiness/FightingStyles/Lunger.cs b/SolastaUnfinishedBusiness/FightingStyles/Lunger.cs index 50c5d719c8..343c6bcbc5 100644 --- a/SolastaUnfinishedBusiness/FightingStyles/Lunger.cs +++ b/SolastaUnfinishedBusiness/FightingStyles/Lunger.cs @@ -35,9 +35,9 @@ internal sealed class Lunger : AbstractFightingStyle internal override List FightingStyleChoice => [ - CharacterContext.FightingStyleChoiceBarbarian, - CharacterContext.FightingStyleChoiceMonk, - CharacterContext.FightingStyleChoiceRogue, + ClassesContext.FightingStyleChoiceBarbarian, + ClassesContext.FightingStyleChoiceMonk, + ClassesContext.FightingStyleChoiceRogue, FightingStyleChampionAdditional, FightingStyleFighter, FightingStylePaladin, diff --git a/SolastaUnfinishedBusiness/FightingStyles/RemarkableTechnique.cs b/SolastaUnfinishedBusiness/FightingStyles/RemarkableTechnique.cs index 7097bada88..f18634ce36 100644 --- a/SolastaUnfinishedBusiness/FightingStyles/RemarkableTechnique.cs +++ b/SolastaUnfinishedBusiness/FightingStyles/RemarkableTechnique.cs @@ -24,9 +24,9 @@ internal sealed class RemarkableTechnique : AbstractFightingStyle internal override List FightingStyleChoice => [ - CharacterContext.FightingStyleChoiceBarbarian, - CharacterContext.FightingStyleChoiceMonk, - CharacterContext.FightingStyleChoiceRogue, + ClassesContext.FightingStyleChoiceBarbarian, + ClassesContext.FightingStyleChoiceMonk, + ClassesContext.FightingStyleChoiceRogue, FightingStyleChampionAdditional, FightingStyleFighter, FightingStylePaladin, diff --git a/SolastaUnfinishedBusiness/FightingStyles/Torchbearer.cs b/SolastaUnfinishedBusiness/FightingStyles/Torchbearer.cs index b2c8745042..e1fe4a44da 100644 --- a/SolastaUnfinishedBusiness/FightingStyles/Torchbearer.cs +++ b/SolastaUnfinishedBusiness/FightingStyles/Torchbearer.cs @@ -56,9 +56,9 @@ internal sealed class Torchbearer : AbstractFightingStyle internal override List FightingStyleChoice => [ - CharacterContext.FightingStyleChoiceBarbarian, - CharacterContext.FightingStyleChoiceMonk, - CharacterContext.FightingStyleChoiceRogue, + ClassesContext.FightingStyleChoiceBarbarian, + ClassesContext.FightingStyleChoiceMonk, + ClassesContext.FightingStyleChoiceRogue, FightingStyleChampionAdditional, FightingStyleFighter, FightingStyleRanger diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index d4fa142fe6..e3e068b36e 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -4,7 +4,6 @@ using System.Linq; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; -using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Api.LanguageExtensions; using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Builders; @@ -17,7 +16,6 @@ using SolastaUnfinishedBusiness.Validators; using TA; using static RuleDefinitions; -using static FeatureDefinitionAttributeModifier; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ActionDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; @@ -26,14 +24,13 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionFeatureSets; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPointPools; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionProficiencys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSenses; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MorphotypeElementDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; namespace SolastaUnfinishedBusiness.Models; -internal static partial class CharacterContext +internal static class CharacterContext { internal const int MinInitialFeats = 0; internal const int MaxInitialFeats = 4; // don't increase this value to avoid issue reports on crazy scenarios @@ -44,12 +41,6 @@ internal static partial class CharacterContext internal const int ModMaxAttribute = 17; internal const int ModBuyPoints = 35; - private static readonly FeatureDefinition FeatureSorcererMagicalGuidance = FeatureDefinitionBuilder - .Create("FeatureSorcererMagicalGuidance") - .SetGuiPresentation(Category.Feature) - .AddCustomSubFeatures(new TryAlterOutcomeAttributeCheckSorcererMagicalGuidance()) - .AddToDB(); - internal static readonly ConditionDefinition ConditionIndomitableSaving = ConditionDefinitionBuilder .Create("ConditionIndomitableSaving") .SetGuiPresentationNoContent(true) @@ -58,13 +49,6 @@ internal static partial class CharacterContext .SetSpecialInterruptions(ConditionInterruption.SavingThrow) .AddToDB(); - private static readonly FeatureDefinitionAttributeModifier AttributeModifierMonkAbundantKi = - FeatureDefinitionAttributeModifierBuilder - .Create("AttributeModifierMonkAbundantKi") - .SetGuiPresentation(Category.Feature) - .SetModifier(AttributeModifierOperation.AddHalfProficiencyBonus, AttributeDefinitions.KiPoints) - .SetSituationalContext(SituationalContext.NotWearingArmorOrShield) - .AddToDB(); private static readonly FeatureDefinitionAbilityCheckAffinity AbilityCheckAffinityDarknessPerceptive = FeatureDefinitionAbilityCheckAffinityBuilder @@ -75,12 +59,6 @@ internal static partial class CharacterContext .AddCustomSubFeatures(ValidatorsCharacter.IsUnlitOrDarkness) .AddToDB(); - private static readonly FeatureDefinitionCustomInvocationPool InvocationPoolMonkWeaponSpecialization = - CustomInvocationPoolDefinitionBuilder - .Create("InvocationPoolMonkWeaponSpecialization") - .SetGuiPresentation("InvocationPoolMonkWeaponSpecializationLearn", Category.Feature) - .Setup(InvocationPoolTypeCustom.Pools.MonkWeaponSpecialization) - .AddToDB(); private static readonly FeatureDefinitionCustomInvocationPool InvocationPoolPathClawDraconicChoice = CustomInvocationPoolDefinitionBuilder @@ -171,49 +149,31 @@ internal static void LateLoad() LoadAdditionalNames(); LoadEpicArray(); LoadFeatsPointPools(); - LoadMonkWeaponSpecialization(); LoadSorcererQuickened(); LoadVision(); LoadVisuals(); LoadSecondWindToUseOneDndUsagesProgression(); - BuildRogueCunningStrike(); + SwitchAsiAndFeat(); - SwitchBarbarianFightingStyle(); SwitchDarknessPerceptive(); SwitchDragonbornElementalBreathUsages(); SwitchDruidKindredBeastToUseCustomInvocationPools(); SwitchEveryFourLevelsFeats(); SwitchEveryFourLevelsFeats(true); - SwitchFighterWeaponSpecialization(); SwitchFirstLevelTotalFeats(); - SwitchMonkAbundantKi(); - SwitchMonkFightingStyle(); - SwitchMonkImprovedUnarmoredMovementToMoveOnTheWall(); - SwitchMonkWeaponSpecialization(); SwitchPathOfTheElementsElementalFuryToUseCustomInvocationPools(); - SwitchRangerHumanoidFavoredEnemy(); + SwitchRangerToUseCustomInvocationPools(); - SwitchRogueCunningStrike(); - SwitchRogueFightingStyle(); - SwitchRogueSteadyAim(); - SwitchRogueStrSaving(); - SwitchSorcererMagicalGuidance(); - SwitchScimitarWeaponSpecialization(); SwitchSubclassAncestriesToUseCustomInvocationPools( "PathClaw", PathClaw, FeatureSetPathClawDragonAncestry, InvocationPoolPathClawDraconicChoice, InvocationPoolTypeCustom.Pools.PathClawDraconicChoice); + SwitchSubclassAncestriesToUseCustomInvocationPools( "Sorcerer", SorcerousDraconicBloodline, FeatureSetSorcererDraconicChoice, InvocationPoolSorcererDraconicChoice, InvocationPoolTypeCustom.Pools.SorcererDraconicChoice); - - //keeping for compatibility - _ = FeatureDefinitionBuilder - .Create("ActionAffinitySorcererQuickened") - .SetGuiPresentationNoContent(true) - .AddToDB(); } private static void AddNameToRace(CharacterRaceDefinition raceDefinition, string gender, string name) @@ -238,6 +198,8 @@ private static void AddNameToRace(CharacterRaceDefinition raceDefinition, string private static void LoadAdditionalNames() { + char[] separator = ['\t']; + if (!SettingsContext.GuiModManagerInstance.UnlockAdditionalLoreFriendlyNames) { return; @@ -248,7 +210,7 @@ private static void LoadAdditionalNames() foreach (var line in lines) { - var columns = line.Split(Separator, 3); + var columns = line.Split(separator, 3); if (columns.Length != 3) { @@ -634,30 +596,6 @@ private static void LoadSecondWindToUseOneDndUsagesProgression() }); } - internal static void SwitchFighterWeaponSpecialization() - { - var levels = new[] { 8, 16 }; - - if (Main.Settings.EnableFighterWeaponSpecialization) - { - foreach (var level in levels) - { - Fighter.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(MartialWeaponMaster.InvocationPoolSpecialization, level)); - } - } - else - { - foreach (var level in levels) - { - Fighter.FeatureUnlocks - .RemoveAll(x => x.level == level && - x.FeatureDefinition == MartialWeaponMaster.InvocationPoolSpecialization); - } - } - - Fighter.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } internal static void SwitchFirstLevelTotalFeats() { @@ -863,38 +801,6 @@ private static void SwitchRangerToUseCustomInvocationPools() rangerSurvivalist.FeatureUnlocks.SetRange(replacedFeatures); } - internal static void SwitchSorcererMagicalGuidance() - { - if (Main.Settings.EnableSorcererMagicalGuidance) - { - Sorcerer.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(FeatureSorcererMagicalGuidance, 5)); - } - else - { - Sorcerer.FeatureUnlocks.RemoveAll(x => - x.level == 5 && x.FeatureDefinition == FeatureSorcererMagicalGuidance); - } - - Sorcerer.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchScimitarWeaponSpecialization() - { - var proficiencies = new List { ProficiencyBardWeapon, ProficiencyRogueWeapon }; - - foreach (var proficiency in proficiencies) - { - if (Main.Settings.GrantScimitarSpecializationToBardRogue) - { - proficiency.Proficiencies.TryAdd(WeaponTypeDefinitions.ScimitarType.Name); - } - else - { - proficiency.Proficiencies.Remove(WeaponTypeDefinitions.ScimitarType.Name); - } - } - } - private static void SwitchSubclassAncestriesToUseCustomInvocationPools( string name, CharacterSubclassDefinition characterSubclassDefinition, @@ -1116,64 +1022,6 @@ private static bool IsSubRace(CharacterRaceDefinition raceDefinition) } - private sealed class TryAlterOutcomeAttributeCheckSorcererMagicalGuidance : ITryAlterOutcomeAttributeCheck - { - public IEnumerator OnTryAlterAttributeCheck( - GameLocationBattleManager battleManager, - AbilityCheckData abilityCheckData, - GameLocationCharacter defender, - GameLocationCharacter helper) - { - var rulesetHelper = helper.RulesetCharacter; - - if (abilityCheckData.AbilityCheckRoll == 0 || - abilityCheckData.AbilityCheckRollOutcome != RollOutcome.Failure || - helper != defender || - rulesetHelper.RemainingSorceryPoints == 0) - { - yield break; - } - - yield return helper.MyReactToDoNothing( - ExtraActionId.DoNothingFree, - defender, - "MagicalGuidanceCheck", - "CustomReactionMagicalGuidanceCheckDescription" - .Formatted(Category.Reaction, defender.Name, helper.Name), - ReactionValidated, - battleManager: battleManager, - resource: ReactionResourceSorceryPoints.Instance); - - yield break; - - void ReactionValidated() - { - rulesetHelper.SpendSorceryPoints(1); - - var dieRoll = rulesetHelper.RollDie(DieType.D20, RollContext.None, false, AdvantageType.None, out _, - out _); - var previousRoll = abilityCheckData.AbilityCheckRoll; - - abilityCheckData.AbilityCheckSuccessDelta += dieRoll - abilityCheckData.AbilityCheckRoll; - abilityCheckData.AbilityCheckRoll = dieRoll; - abilityCheckData.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckSuccessDelta >= 0 - ? RollOutcome.Success - : RollOutcome.Failure; - - rulesetHelper.LogCharacterActivatesAbility( - "Feature/&FeatureSorcererMagicalGuidanceTitle", - "Feedback/&MagicalGuidanceCheckToHitRoll", - extra: - [ - (dieRoll > previousRoll ? ConsoleStyleDuplet.ParameterType.Positive : ConsoleStyleDuplet.ParameterType.Negative, - dieRoll.ToString()), - (previousRoll > dieRoll ? ConsoleStyleDuplet.ParameterType.Positive : ConsoleStyleDuplet.ParameterType.Negative, - previousRoll.ToString()) - ]); - } - } - } - private sealed class FilterTargetingPositionPowerTeleportSummon : IFilterTargetingPosition { public IEnumerator ComputeValidPositions(CursorLocationSelectPosition cursorLocationSelectPosition) diff --git a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs deleted file mode 100644 index ee9453ed77..0000000000 --- a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs +++ /dev/null @@ -1,972 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using SolastaUnfinishedBusiness.Api.GameExtensions; -using SolastaUnfinishedBusiness.Behaviors; -using SolastaUnfinishedBusiness.Behaviors.Specific; -using SolastaUnfinishedBusiness.Builders; -using SolastaUnfinishedBusiness.Builders.Features; -using SolastaUnfinishedBusiness.CustomUI; -using SolastaUnfinishedBusiness.Interfaces; -using SolastaUnfinishedBusiness.Properties; -using SolastaUnfinishedBusiness.Subclasses; -using SolastaUnfinishedBusiness.Validators; -using TA; -using UnityEngine.AddressableAssets; -using static RuleDefinitions; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionActionAffinitys; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionAttackModifiers; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionFeatureSets; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionMovementAffinitys; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; - -namespace SolastaUnfinishedBusiness.Models; - -internal static partial class CharacterContext -{ - internal static readonly FeatureDefinitionFightingStyleChoice FightingStyleChoiceBarbarian = - FeatureDefinitionFightingStyleChoiceBuilder - .Create("FightingStyleChoiceBarbarian") - .SetGuiPresentation("FighterFightingStyle", Category.Feature) - .SetFightingStyles( - // BlindFighting - // Crippling - // Defense - "Dueling", - // Executioner - "GreatWeapon", - // HandAndAHalf - // Interception - // Lunger - // Merciless - // Protection - // Pugilist - // RemarkableTechnique - // RopeIpUp - // ShieldExpert - // Torchbearer - "TwoWeapon") - .AddToDB(); - - internal static readonly FeatureDefinitionFightingStyleChoice FightingStyleChoiceMonk = - FeatureDefinitionFightingStyleChoiceBuilder - .Create("FightingStyleChoiceMonk") - .SetGuiPresentation("FighterFightingStyle", Category.Feature) - .SetFightingStyles( - "Archery", - // BlindFighting - // Crippling - // Defense - "Dueling", - // Executioner - // GreatWeapon - // HandAndAHalf - // Interception - // Lunger - // Merciless - // Protection - // Pugilist - // RemarkableTechnique - // RopeIpUp - // ShieldExpert - // Torchbearer - "TwoWeapon") - .AddToDB(); - - internal static readonly FeatureDefinitionFightingStyleChoice FightingStyleChoiceRogue = - FeatureDefinitionFightingStyleChoiceBuilder - .Create("FightingStyleChoiceRogue") - .SetGuiPresentation("FighterFightingStyle", Category.Feature) - .SetFightingStyles( - "Archery", - // BlindFighting - // Crippling - "Defense", - // Dueling - // Executioner - // GreatWeapon - // HandAndAHalf - // Interception - // Lunger - // Merciless - // Protection - // Pugilist - // RemarkableTechnique - // RopeIpUp - // ShieldExpert - // Torchbearer - "TwoWeapon") - .AddToDB(); - - #region Barbarian - - internal static void SwitchBarbarianFightingStyle() - { - if (Main.Settings.EnableBarbarianFightingStyle) - { - Barbarian.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(FightingStyleChoiceBarbarian, 2)); - } - else - { - Barbarian.FeatureUnlocks.RemoveAll(x => - x.level == 2 && x.FeatureDefinition == FightingStyleChoiceBarbarian); - } - - Barbarian.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - #endregion - - #region Ranger - - internal static void SwitchRangerHumanoidFavoredEnemy() - { - if (Main.Settings.AddHumanoidFavoredEnemyToRanger) - { - AdditionalDamageRangerFavoredEnemyChoice.featureSet.Add(CommonBuilders - .AdditionalDamageMarshalFavoredEnemyHumanoid); - } - else - { - AdditionalDamageRangerFavoredEnemyChoice.featureSet.Remove(CommonBuilders - .AdditionalDamageMarshalFavoredEnemyHumanoid); - } - - AdditionalDamageRangerFavoredEnemyChoice.FeatureSet.Sort((x, y) => - string.Compare(x.FormatTitle(), y.FormatTitle(), StringComparison.CurrentCulture)); - } - - #endregion - - #region Monk - - private static void LoadMonkWeaponSpecialization() - { - var weaponTypeDefinitions = new List - { - WeaponTypeDefinitions.BattleaxeType, - WeaponTypeDefinitions.LightCrossbowType, - WeaponTypeDefinitions.LongbowType, - WeaponTypeDefinitions.LongswordType, - WeaponTypeDefinitions.MorningstarType, - WeaponTypeDefinitions.RapierType, - WeaponTypeDefinitions.ScimitarType, - WeaponTypeDefinitions.ShortbowType, - WeaponTypeDefinitions.WarhammerType, - CustomWeaponsContext.HandXbowWeaponType - }; - - foreach (var weaponTypeDefinition in weaponTypeDefinitions) - { - var weaponTypeName = weaponTypeDefinition.Name; - - var featureMonkWeaponSpecialization = FeatureDefinitionProficiencyBuilder - .Create($"FeatureMonkWeaponSpecialization{weaponTypeName}") - .SetGuiPresentationNoContent(true) - .SetProficiencies(ProficiencyType.Weapon, weaponTypeName) - .AddCustomSubFeatures( - new MonkWeaponSpecialization { WeaponType = weaponTypeDefinition }) - .AddToDB(); - - if (!weaponTypeDefinition.IsBow && !weaponTypeDefinition.IsCrossbow) - { - featureMonkWeaponSpecialization.AddCustomSubFeatures( - new AddTagToWeapon(TagsDefinitions.WeaponTagFinesse, TagsDefinitions.Criticity.Important, - ValidatorsWeapon.IsOfWeaponType(weaponTypeDefinition)) - ); - } - - // ensure we get dice upgrade on these - AttackModifierMonkMartialArtsImprovedDamage.AddCustomSubFeatures( - new MonkWeaponSpecializationDiceUpgrade(weaponTypeDefinition)); - - _ = CustomInvocationDefinitionBuilder - .Create($"CustomInvocationMonkWeaponSpecialization{weaponTypeName}") - .SetGuiPresentation( - weaponTypeDefinition.GuiPresentation.Title, - weaponTypeDefinition.GuiPresentation.Description, - CustomWeaponsContext.GetStandardWeaponOfType(weaponTypeDefinition.Name)) - .SetPoolType(InvocationPoolTypeCustom.Pools.MonkWeaponSpecialization) - .SetGrantedFeature(featureMonkWeaponSpecialization) - .AddCustomSubFeatures(ModifyInvocationVisibility.Marker) - .AddToDB(); - } - } - - internal static void SwitchMonkAbundantKi() - { - if (Main.Settings.EnableMonkAbundantKi) - { - Monk.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(AttributeModifierMonkAbundantKi, 2)); - } - else - { - Monk.FeatureUnlocks - .RemoveAll(x => x.level == 2 && - x.FeatureDefinition == AttributeModifierMonkAbundantKi); - } - - Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchMonkFightingStyle() - { - if (Main.Settings.EnableMonkFightingStyle) - { - Monk.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(FightingStyleChoiceMonk, 2)); - } - else - { - Monk.FeatureUnlocks - .RemoveAll(x => x.level == 2 && - x.FeatureDefinition == FightingStyleChoiceMonk); - } - - Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchMonkImprovedUnarmoredMovementToMoveOnTheWall() - { - if (Main.Settings.EnableMonkImprovedUnarmoredMovementToMoveOnTheWall) - { - MovementAffinityMonkUnarmoredMovementImproved.GuiPresentation.description = - "Feature/&MonkAlternateUnarmoredMovementImprovedDescription"; - MovementAffinityMonkUnarmoredMovementImproved.GuiPresentation.title = - "Feature/&MonkAlternateUnarmoredMovementImprovedTitle"; - MovementAffinityMonkUnarmoredMovementImproved.canMoveOnWalls = true; - } - else - { - MovementAffinityMonkUnarmoredMovementImproved.GuiPresentation.description = - "Feature/&MonkUnarmoredMovementImprovedDescription"; - MovementAffinityMonkUnarmoredMovementImproved.GuiPresentation.title = - "Feature/&MonkUnarmoredMovementImprovedTitle"; - MovementAffinityMonkUnarmoredMovementImproved.canMoveOnWalls = false; - } - } - - internal static void SwitchMonkWeaponSpecialization() - { - var levels = new[] { 2, 11 }; - - if (Main.Settings.EnableMonkWeaponSpecialization) - { - foreach (var level in levels) - { - Monk.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(InvocationPoolMonkWeaponSpecialization, level)); - } - } - else - { - foreach (var level in levels) - { - Monk.FeatureUnlocks - .RemoveAll(x => x.level == level && - x.FeatureDefinition == InvocationPoolMonkWeaponSpecialization); - } - } - - Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal sealed class MonkWeaponSpecialization - { - internal WeaponTypeDefinition WeaponType { get; set; } - } - - private sealed class MonkWeaponSpecializationDiceUpgrade : IValidateContextInsteadOfRestrictedProperty - { - private readonly WeaponTypeDefinition _weaponTypeDefinition; - - internal MonkWeaponSpecializationDiceUpgrade(WeaponTypeDefinition weaponTypeDefinition) - { - _weaponTypeDefinition = weaponTypeDefinition; - } - - public (OperationType, bool) ValidateContext( - BaseDefinition definition, - IRestrictedContextProvider provider, - RulesetCharacter character, - ItemDefinition itemDefinition, - bool rangedAttack, RulesetAttackMode attackMode, - RulesetEffect rulesetEffect) - { - var attackModeWeaponType = - (attackMode?.SourceDefinition as ItemDefinition)?.WeaponDescription.WeaponTypeDefinition; - - return (OperationType.Or, - character.GetSubFeaturesByType().Exists( - x => x._weaponTypeDefinition == attackModeWeaponType)); - } - } - - #endregion - - #region Rogue - - private const string FeatSteadyAim = "FeatSteadyAim"; - - private static readonly FeatureDefinitionPower PowerFeatSteadyAim = FeatureDefinitionPowerBuilder - .Create($"Power{FeatSteadyAim}") - .SetGuiPresentation(Category.Feature, Sprites.GetSprite(FeatSteadyAim, Resources.PowerSteadyAim, 256, 128)) - .SetUsesFixed(ActivationTime.BonusAction) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Round) - .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) - .SetEffectForms( - EffectFormBuilder - .Create() - .SetConditionForm( - ConditionDefinitionBuilder - .Create($"Condition{FeatSteadyAim}Advantage") - .SetGuiPresentation(Category.Condition, - ConditionDefinitions.ConditionGuided) - .SetPossessive() - .SetSilent(Silent.WhenAddedOrRemoved) - .SetSpecialInterruptions(ConditionInterruption.Attacks) - .AddFeatures( - FeatureDefinitionCombatAffinityBuilder - .Create($"CombatAffinity{FeatSteadyAim}") - .SetGuiPresentation($"Power{FeatSteadyAim}", Category.Feature, - Gui.NoLocalization) - .SetMyAttackAdvantage(AdvantageType.Advantage) - .AddToDB()) - .AddToDB(), - ConditionForm.ConditionOperation.Add) - .Build(), - EffectFormBuilder - .Create() - .SetConditionForm( - ConditionDefinitionBuilder - .Create($"Condition{FeatSteadyAim}Restrained") - .SetGuiPresentation(Category.Condition) - .SetSilent(Silent.WhenAddedOrRemoved) - .AddFeatures(MovementAffinityConditionRestrained) - .AddToDB(), - ConditionForm.ConditionOperation.Add) - .Build()) - .SetParticleEffectParameters(PowerFunctionWandFearCommand) - .SetImpactEffectParameters(new AssetReference()) - .Build()) - .AddCustomSubFeatures( - new ValidatorsValidatePowerUse(c => GameLocationCharacter.GetFromActor(c) is { UsedTacticalMoves: 0 })) - .AddToDB(); - - internal static readonly ConditionDefinition ConditionReduceSneakDice = ConditionDefinitionBuilder - .Create("ConditionReduceSneakDice") - .SetGuiPresentationNoContent(true) - .SetSilent(Silent.WhenAddedOrRemoved) - .SetConditionType(ConditionType.Detrimental) - .SetAmountOrigin(ConditionDefinition.OriginOfAmount.Fixed) - .SetSpecialInterruptions(ConditionInterruption.Attacks) - .AddToDB(); - - private static FeatureDefinitionFeatureSet _featureSetRogueCunningStrike; - private static FeatureDefinitionFeatureSet _featureSetRogueDeviousStrike; - private static readonly char[] Separator = ['\t']; - - private static void BuildRogueCunningStrike() - { - const string Cunning = "RogueCunningStrike"; - const string Devious = "RogueDeviousStrike"; - - var powerPool = FeatureDefinitionPowerBuilder - .Create($"Power{Cunning}") - .SetGuiPresentation(Category.Feature) - .SetUsesFixed(ActivationTime.NoCost) - .SetShowCasting(false) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Round, 1) - .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.Individuals) - .Build()) - .AddToDB(); - - // Disarm - - var combatAffinityDisarmed = FeatureDefinitionCombatAffinityBuilder - .Create($"CombatAffinity{Cunning}Disarmed") - .SetGuiPresentation($"Condition{Cunning}Disarmed", Category.Condition, Gui.NoLocalization) - .SetMyAttackAdvantage(AdvantageType.Disadvantage) - .AddToDB(); - - var conditionDisarmed = ConditionDefinitionBuilder - .Create($"Condition{Cunning}Disarmed") - .SetGuiPresentation(Category.Condition, Gui.EmptyContent, ConditionDefinitions.ConditionBaned) - .SetConditionType(ConditionType.Detrimental) - .AddFeatures(combatAffinityDisarmed) - .AddToDB(); - - var powerDisarm = FeatureDefinitionPowerSharedPoolBuilder - .Create($"Power{Cunning}Disarm") - .SetGuiPresentation(Category.Feature) - .SetSharedPool(ActivationTime.NoCost, powerPool) - .SetShowCasting(false) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Round, 1) - .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) - .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, - EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) - .SetEffectForms( - EffectFormBuilder - .Create() - .HasSavingThrow(EffectSavingThrowType.Negates) - .SetConditionForm(conditionDisarmed, ConditionForm.ConditionOperation.Add) - .Build()) - .Build()) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden, PowerUsesSneakDiceTooltipModifier.Instance) - .AddToDB(); - - // Poison - - var powerPoison = FeatureDefinitionPowerSharedPoolBuilder - .Create($"Power{Cunning}Poison") - .SetGuiPresentation(Category.Feature) - .SetSharedPool(ActivationTime.NoCost, powerPool) - .SetShowCasting(false) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Minute, 1) - .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) - .SetSavingThrowData(false, AttributeDefinitions.Constitution, false, - EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) - .SetEffectForms( - EffectFormBuilder - .Create() - .HasSavingThrow(EffectSavingThrowType.Negates, TurnOccurenceType.EndOfTurn, true) - .SetConditionForm( - ConditionDefinitions.ConditionPoisoned, ConditionForm.ConditionOperation.Add) - .Build()) - .Build()) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden, PowerUsesSneakDiceTooltipModifier.Instance) - .AddToDB(); - - // Trip - - var powerTrip = FeatureDefinitionPowerSharedPoolBuilder - .Create($"Power{Cunning}Trip") - .SetGuiPresentation(Category.Feature) - .SetSharedPool(ActivationTime.NoCost, powerPool) - .SetShowCasting(false) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) - .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, - EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) - .SetEffectForms( - EffectFormBuilder - .Create() - .HasSavingThrow(EffectSavingThrowType.Negates) - .SetMotionForm(MotionForm.MotionType.FallProne) - .Build()) - .Build()) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden, PowerUsesSneakDiceTooltipModifier.Instance) - .AddToDB(); - - // Withdraw - - var powerWithdraw = FeatureDefinitionPowerSharedPoolBuilder - .Create($"Power{Cunning}Withdraw") - .SetGuiPresentation(Category.Feature) - .SetSharedPool(ActivationTime.NoCost, powerPool) - .SetShowCasting(false) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Round) - .SetTargetingData(Side.Ally, RangeType.Distance, 12, TargetType.Position) - .Build()) - .AddCustomSubFeatures( - ModifyPowerVisibility.Hidden, - PowerUsesSneakDiceTooltipModifier.Instance, - new CustomBehaviorWithdraw()) - .AddToDB(); - - // - // DEVIOUS STRIKES - LEVEL 14 - // - - // Dazed - - var actionAffinityDazedOnlyMovement = FeatureDefinitionActionAffinityBuilder - .Create($"ActionAffinity{Devious}DazedOnlyMovement") - .SetGuiPresentationNoContent(true) - .SetAllowedActionTypes(false, false, freeOnce: false, reaction: false, noCost: false) - .AddToDB(); - - var conditionDazedOnlyMovement = ConditionDefinitionBuilder - .Create($"Condition{Devious}DazedOnlyMovement") - .SetGuiPresentationNoContent(true) - .SetSilent(Silent.WhenAddedOrRemoved) - .SetConditionType(ConditionType.Detrimental) - .AddFeatures(actionAffinityDazedOnlyMovement) - .AddToDB(); - - var actionAffinityDazed = FeatureDefinitionActionAffinityBuilder - .Create($"ActionAffinity{Devious}Dazed") - .SetGuiPresentationNoContent(true) - .SetAllowedActionTypes(reaction: false, bonus: false) - .AddToDB(); - - var conditionDazed = ConditionDefinitionBuilder - .Create(ConditionDefinitions.ConditionDazzled, $"Condition{Devious}Dazed") - .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionDazzled) - .SetConditionType(ConditionType.Detrimental) - .SetFeatures(actionAffinityDazed) - .AddCustomSubFeatures(new ActionFinishedByMeDazed(conditionDazedOnlyMovement)) - .AddToDB(); - - var powerDaze = FeatureDefinitionPowerSharedPoolBuilder - .Create($"Power{Devious}Daze") - .SetGuiPresentation(Category.Feature) - .SetSharedPool(ActivationTime.NoCost, powerPool, 2) - .SetShowCasting(false) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Round, 1) - .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) - .SetSavingThrowData(false, AttributeDefinitions.Constitution, false, - EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) - .SetEffectForms( - EffectFormBuilder - .Create() - .HasSavingThrow(EffectSavingThrowType.Negates) - .SetConditionForm(conditionDazed, ConditionForm.ConditionOperation.Add) - .Build()) - .Build()) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden, PowerUsesSneakDiceTooltipModifier.Instance) - .AddToDB(); - - // Knock Out - - var conditionKnockOut = ConditionDefinitionBuilder - .Create(ConditionDefinitions.ConditionIncapacitated, $"Condition{Devious}KnockOut") - .SetGuiPresentation(Category.Condition, Gui.EmptyContent, ConditionDefinitions.ConditionAsleep) - .SetParentCondition(ConditionDefinitions.ConditionIncapacitated) - .SetFeatures() - .SetSpecialInterruptions(ConditionInterruption.Damaged) - .AddToDB(); - - var powerKnockOut = FeatureDefinitionPowerSharedPoolBuilder - .Create($"Power{Devious}KnockOut") - .SetGuiPresentation(Category.Feature) - .SetSharedPool(ActivationTime.NoCost, powerPool, 5) - .SetShowCasting(false) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden, PowerUsesSneakDiceTooltipModifier.Instance) - .AddToDB(); - - var powerKnockOutApply = FeatureDefinitionPowerBuilder - .Create($"Power{Devious}KnockOutApply") - .SetGuiPresentation($"Power{Devious}KnockOut", Category.Feature, hidden: true) - .SetUsesFixed(ActivationTime.NoCost) - .SetShowCasting(false) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Minute, 1) - .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) - .SetSavingThrowData(false, AttributeDefinitions.Constitution, false, - EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) - .SetEffectForms( - EffectFormBuilder - .Create() - .HasSavingThrow(EffectSavingThrowType.Negates, TurnOccurenceType.EndOfTurn, true) - .SetConditionForm(conditionKnockOut, ConditionForm.ConditionOperation.Add) - .Build()) - .Build()) - .AddToDB(); - - // Obscure - - var powerObscure = FeatureDefinitionPowerSharedPoolBuilder - .Create($"Power{Devious}Obscure") - .SetGuiPresentation(Category.Feature) - .SetSharedPool(ActivationTime.NoCost, powerPool, 3) - .SetShowCasting(false) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Round, 1) - .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) - .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, - EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) - .SetEffectForms( - EffectFormBuilder - .Create() - .HasSavingThrow(EffectSavingThrowType.Negates) - .SetConditionForm(ConditionDefinitions.ConditionBlinded, - ConditionForm.ConditionOperation.Add) - .Build()) - .Build()) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden, PowerUsesSneakDiceTooltipModifier.Instance) - .AddToDB(); - - // MAIN - - powerPool.AddCustomSubFeatures( - ModifyPowerVisibility.Hidden, - new CustomBehaviorCunningStrike(powerPool, powerKnockOut, powerKnockOutApply, powerWithdraw)); - - PowerBundle.RegisterPowerBundle(powerPool, true, - powerDisarm, powerPoison, powerTrip, powerWithdraw, powerDaze, powerKnockOut, powerObscure); - - var actionAffinityToggle = FeatureDefinitionActionAffinityBuilder - .Create(ActionAffinitySorcererMetamagicToggle, "ActionAffinityCunningStrikeToggle") - .SetGuiPresentationNoContent(true) - .SetAuthorizedActions((ActionDefinitions.Id)ExtraActionId.CunningStrikeToggle) - .AddToDB(); - - _featureSetRogueCunningStrike = FeatureDefinitionFeatureSetBuilder - .Create($"FeatureSet{Cunning}") - .SetGuiPresentation($"Power{Cunning}", Category.Feature) - .AddFeatureSet(powerPool, actionAffinityToggle, powerDisarm, powerPoison, powerTrip, powerWithdraw) - .AddToDB(); - - _featureSetRogueDeviousStrike = FeatureDefinitionFeatureSetBuilder - .Create($"FeatureSet{Devious}") - .SetGuiPresentation($"Power{Devious}", Category.Feature) - .AddFeatureSet(powerDaze, powerKnockOut, powerObscure) - .AddToDB(); - } - - internal static bool IsSneakAttackValid( - ActionModifier attackModifier, - GameLocationCharacter attacker, - GameLocationCharacter defender) - { - // only trigger if it hasn't used sneak attack yet - if (!attacker.OncePerTurnIsValid("AdditionalDamageRogueSneakAttack") || - !attacker.OncePerTurnIsValid("AdditionalDamageRoguishHoodlumNonFinesseSneakAttack") || - !attacker.OncePerTurnIsValid("AdditionalDamageRoguishDuelistDaringDuel") || - !attacker.OncePerTurnIsValid("AdditionalDamageRoguishUmbralStalkerDeadlyShadows")) - { - return false; - } - - var advantageType = ComputeAdvantage(attackModifier.AttackAdvantageTrends); - - return advantageType switch - { - AdvantageType.Advantage => true, - AdvantageType.Disadvantage => false, - _ => - // it's an attack with a nearby enemy (standard sneak attack) - ServiceRepository.GetService() - .IsConsciousCharacterOfSideNextToCharacter(defender, attacker.Side, attacker) || - // it's a Duelist and target is dueling with him - RoguishDuelist.TargetIsDuelingWithRoguishDuelist(attacker, defender, advantageType) || - // it's an Umbral Stalker and source or target are in dim light or darkness - RoguishUmbralStalker.SourceOrTargetAreNotBright(attacker, defender, advantageType) - }; - } - - private sealed class CustomBehaviorCunningStrike( - FeatureDefinitionPower powerRogueCunningStrike, - FeatureDefinitionPower powerKnockOut, - FeatureDefinitionPower powerKnockOutApply, - FeatureDefinitionPower powerWithdraw) - : IPhysicalAttackBeforeHitConfirmedOnEnemy, IPhysicalAttackFinishedByMe - { - private FeatureDefinitionPower _selectedPower; - - public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( - GameLocationBattleManager battleManager, - GameLocationCharacter attacker, - GameLocationCharacter defender, - ActionModifier actionModifier, - RulesetAttackMode attackMode, - bool rangedAttack, - AdvantageType advantageType, - List actualEffectForms, - bool firstTarget, - bool criticalHit) - { - _selectedPower = null; - - var rulesetAttacker = attacker.RulesetCharacter; - - if (!rulesetAttacker.IsToggleEnabled((ActionDefinitions.Id)ExtraActionId.CunningStrikeToggle) || - !IsSneakAttackValid(actionModifier, attacker, defender)) - { - yield break; - } - - var usablePower = PowerProvider.Get(powerRogueCunningStrike, rulesetAttacker); - - yield return attacker.MyReactToSpendPowerBundle( - usablePower, - [defender], - attacker, - powerRogueCunningStrike.Name, - reactionValidated: ReactionValidated, - battleManager: battleManager); - - yield break; - - void ReactionValidated(ReactionRequestSpendBundlePower reactionRequest) - { - // determine selected power to collect cost - var option = reactionRequest.SelectedSubOption; - var subPowers = powerRogueCunningStrike.GetBundle()?.SubPowers; - - if (subPowers == null) - { - return; - } - - _selectedPower = subPowers[option]; - - // inflict condition passing power cost on amount to be deducted later on from sneak dice - rulesetAttacker.InflictCondition( - ConditionReduceSneakDice.Name, - DurationType.Round, - 0, - TurnOccurenceType.EndOfTurn, - AttributeDefinitions.TagEffect, - rulesetAttacker.guid, - rulesetAttacker.CurrentFaction.Name, - 1, - ConditionReduceSneakDice.Name, - _selectedPower.CostPerUse, - 0, - 0); - } - } - - // handle Knock Out exception which should apply condition after attack - public IEnumerator OnPhysicalAttackFinishedByMe( - GameLocationBattleManager battleManager, - CharacterAction action, - GameLocationCharacter attacker, - GameLocationCharacter defender, - RulesetAttackMode attackMode, - RollOutcome rollOutcome, - int damageAmount) - { - if (_selectedPower == powerKnockOut) - { - yield return HandleKnockOut(attacker, defender); - } - else if (_selectedPower == powerWithdraw) - { - yield return HandleWithdraw(action, attacker); - } - - _selectedPower = null; - } - - private IEnumerator HandleWithdraw(CharacterAction action, GameLocationCharacter attacker) - { - yield return GameUiContext.SelectPosition(action, powerWithdraw); - - var rulesetAttacker = attacker.RulesetCharacter; - var position = action.ActionParams.Positions[0]; - var distance = int3.Distance(attacker.LocationPosition, position); - - attacker.UsedTacticalMoves -= (int)distance; - - if (attacker.UsedTacticalMoves < 0) - { - attacker.UsedTacticalMoves = 0; - } - - attacker.UsedTacticalMovesChanged?.Invoke(attacker); - - rulesetAttacker.InflictCondition( - ConditionDisengaging, - DurationType.Round, - 0, - TurnOccurenceType.EndOfTurn, - // all disengaging in game is set under TagCombat (why?) - AttributeDefinitions.TagCombat, - rulesetAttacker.Guid, - rulesetAttacker.CurrentFaction.Name, - 1, - ConditionDisengaging, - 0, - 0, - 0); - - attacker.MyExecuteActionTacticalMove(position); - } - - private IEnumerator HandleKnockOut(GameLocationCharacter attacker, GameLocationCharacter defender) - { - var rulesetDefender = defender.RulesetActor; - - if (rulesetDefender is not { IsDeadOrDyingOrUnconscious: false }) - { - yield break; - } - - var rulesetAttacker = attacker.RulesetCharacter; - var usablePower = PowerProvider.Get(powerKnockOutApply, rulesetAttacker); - - attacker.MyExecuteActionSpendPower(usablePower, defender); - } - } - - private sealed class ActionFinishedByMeDazed( - // ReSharper disable once SuggestBaseTypeForParameterInConstructor - ConditionDefinition conditionDazedOnlyMovement) : IActionFinishedByMe - { - public IEnumerator OnActionFinishedByMe(CharacterAction characterAction) - { - if (characterAction is not (CharacterActionMove or CharacterActionDash)) - { - yield break; - } - - var rulesetCharacter = characterAction.ActingCharacter.RulesetCharacter; - - rulesetCharacter.InflictCondition( - conditionDazedOnlyMovement.Name, - DurationType.Round, - 0, - TurnOccurenceType.EndOfTurn, - AttributeDefinitions.TagEffect, - rulesetCharacter.guid, - rulesetCharacter.CurrentFaction.Name, - 1, - conditionDazedOnlyMovement.Name, - 0, - 0, - 0); - } - } - - private sealed class CustomBehaviorWithdraw : IFilterTargetingPosition, IIgnoreInvisibilityInterruptionCheck - { - public IEnumerator ComputeValidPositions(CursorLocationSelectPosition cursorLocationSelectPosition) - { - cursorLocationSelectPosition.validPositionsCache.Clear(); - - var actingCharacter = cursorLocationSelectPosition.ActionParams.ActingCharacter; - var positioningService = ServiceRepository.GetService(); - var visibilityService = ServiceRepository.GetService(); - - var halfMaxTacticalMoves = (actingCharacter.MaxTacticalMoves + 1) / 2; // half-rounded up - var boxInt = new BoxInt(actingCharacter.LocationPosition, int3.zero, int3.zero); - - boxInt.Inflate(halfMaxTacticalMoves, 0, halfMaxTacticalMoves); - - foreach (var position in boxInt.EnumerateAllPositionsWithin()) - { - if (!visibilityService.MyIsCellPerceivedByCharacter(position, actingCharacter) || - !positioningService.CanPlaceCharacter( - actingCharacter, position, CellHelpers.PlacementMode.Station) || - !positioningService.CanCharacterStayAtPosition_Floor( - actingCharacter, position, onlyCheckCellsWithRealGround: true)) - { - continue; - } - - cursorLocationSelectPosition.validPositionsCache.Add(position); - - if (cursorLocationSelectPosition.stopwatch.Elapsed.TotalMilliseconds > 0.5) - { - yield return null; - } - } - } - } - - internal static void SwitchRogueCunningStrike() - { - if (Main.Settings.EnableRogueCunningStrike) - { - Rogue.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(_featureSetRogueCunningStrike, 5)); - Rogue.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(_featureSetRogueDeviousStrike, 14)); - } - else - { - Rogue.FeatureUnlocks.RemoveAll(x => x.level == 5 && x.FeatureDefinition == _featureSetRogueCunningStrike); - Rogue.FeatureUnlocks.RemoveAll(x => x.level == 14 && x.FeatureDefinition == _featureSetRogueDeviousStrike); - } - - Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchRogueFightingStyle() - { - if (Main.Settings.EnableRogueFightingStyle) - { - Rogue.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(FightingStyleChoiceRogue, 2)); - } - else - { - Rogue.FeatureUnlocks.RemoveAll(x => x.level == 2 && x.FeatureDefinition == FightingStyleChoiceRogue); - } - - Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchRogueSteadyAim() - { - if (Main.Settings.EnableRogueSteadyAim) - { - Rogue.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(PowerFeatSteadyAim, 3)); - } - else - { - Rogue.FeatureUnlocks.RemoveAll(x => - x.level == 3 && x.FeatureDefinition == PowerFeatSteadyAim); - } - - Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - internal static void SwitchRogueBlindSense() - { - Rogue.FeatureUnlocks.RemoveAll(x => - x.level == 3 && x.FeatureDefinition == FeatureDefinitionSenses.SenseRogueBlindsense); - - if (!Main.Settings.RemoveRogueBlindSense) - { - Rogue.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(FeatureDefinitionSenses.SenseRogueBlindsense, 14)); - } - - Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - - private static void SwitchRogueStrSaving() - { - var powerNames = new List - { - "PowerRogueCunningStrikeDisarm", - //"PowerRogueCunningStrikePoison", - "PowerRogueCunningStrikeTrip", - //"PowerRogueCunningStrikeWithdraw", - //"PowerRogueDeviousStrikeDaze", - //"PowerRogueDeviousStrikeKnockOut", - "PowerRogueDeviousStrikeObscure", - "PowerRoguishOpportunistDebilitatingStrike", - "PowerRoguishOpportunistImprovedDebilitatingStrike", - "PowerRoguishBladeCallerHailOfBlades" - }; - - foreach (var power in DatabaseRepository.GetDatabase() - .Where(x => powerNames.Contains(x.Name))) - { - power.AddCustomSubFeatures(new ModifyEffectDescriptionSavingThrowRogue(power)); - } - } - - #endregion -} diff --git a/SolastaUnfinishedBusiness/Models/ClassesContext.cs b/SolastaUnfinishedBusiness/Models/ClassesContext.cs index 9a66dc3cd0..19bae91e63 100644 --- a/SolastaUnfinishedBusiness/Models/ClassesContext.cs +++ b/SolastaUnfinishedBusiness/Models/ClassesContext.cs @@ -1,6 +1,27 @@ -using HarmonyLib; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using HarmonyLib; +using SolastaUnfinishedBusiness.Api.GameExtensions; +using SolastaUnfinishedBusiness.Api.Helpers; +using SolastaUnfinishedBusiness.Api.LanguageExtensions; +using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Builders; +using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.Classes; +using SolastaUnfinishedBusiness.CustomUI; +using SolastaUnfinishedBusiness.Interfaces; +using SolastaUnfinishedBusiness.Subclasses; +using SolastaUnfinishedBusiness.Validators; +using static RuleDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionProficiencys; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionAttackModifiers; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionMovementAffinitys; +using static FeatureDefinitionAttributeModifier; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionFeatureSets; namespace SolastaUnfinishedBusiness.Models; @@ -12,5 +33,519 @@ internal static void Load() DatabaseRepository.GetDatabase() .Do(x => x.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock)); + + LoadMonkWeaponSpecialization(); + + SwitchScimitarWeaponSpecialization(); + SwitchBarbarianFightingStyle(); + SwitchFighterWeaponSpecialization(); + SwitchMonkAbundantKi(); + SwitchMonkFightingStyle(); + SwitchMonkImprovedUnarmoredMovementToMoveOnTheWall(); + SwitchMonkWeaponSpecialization(); + SwitchRangerHumanoidFavoredEnemy(); + SwitchRogueFightingStyle(); + SwitchRogueStrSaving(); + SwitchSorcererMagicalGuidance(); + UpdateHandWrapsUseGauntletSlot(); + } + + #region _General + + internal static void SwitchScimitarWeaponSpecialization() + { + var proficiencies = new List { ProficiencyBardWeapon, ProficiencyRogueWeapon }; + + foreach (var proficiency in proficiencies) + { + if (Main.Settings.GrantScimitarSpecializationToBardRogue) + { + proficiency.Proficiencies.TryAdd(WeaponTypeDefinitions.ScimitarType.Name); + } + else + { + proficiency.Proficiencies.Remove(WeaponTypeDefinitions.ScimitarType.Name); + } + } + } + + #endregion + + #region Fighter + + internal static void SwitchFighterWeaponSpecialization() + { + var levels = new[] { 8, 16 }; + + if (Main.Settings.EnableFighterWeaponSpecialization) + { + foreach (var level in levels) + { + Fighter.FeatureUnlocks.TryAdd( + new FeatureUnlockByLevel(MartialWeaponMaster.InvocationPoolSpecialization, level)); + } + } + else + { + foreach (var level in levels) + { + Fighter.FeatureUnlocks + .RemoveAll(x => x.level == level && + x.FeatureDefinition == MartialWeaponMaster.InvocationPoolSpecialization); + } + } + + Fighter.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + #endregion + + #region Ranger + + internal static void SwitchRangerHumanoidFavoredEnemy() + { + if (Main.Settings.AddHumanoidFavoredEnemyToRanger) + { + AdditionalDamageRangerFavoredEnemyChoice.featureSet.Add(CommonBuilders + .AdditionalDamageMarshalFavoredEnemyHumanoid); + } + else + { + AdditionalDamageRangerFavoredEnemyChoice.featureSet.Remove(CommonBuilders + .AdditionalDamageMarshalFavoredEnemyHumanoid); + } + + AdditionalDamageRangerFavoredEnemyChoice.FeatureSet.Sort((x, y) => + string.Compare(x.FormatTitle(), y.FormatTitle(), StringComparison.CurrentCulture)); + } + + #endregion + + #region Barbarian + + internal static readonly FeatureDefinitionFightingStyleChoice FightingStyleChoiceBarbarian = + FeatureDefinitionFightingStyleChoiceBuilder + .Create("FightingStyleChoiceBarbarian") + .SetGuiPresentation("FighterFightingStyle", Category.Feature) + .SetFightingStyles( + // BlindFighting + // Crippling + // Defense + "Dueling", + // Executioner + "GreatWeapon", + // HandAndAHalf + // Interception + // Lunger + // Merciless + // Protection + // Pugilist + // RemarkableTechnique + // RopeIpUp + // ShieldExpert + // Torchbearer + "TwoWeapon") + .AddToDB(); + + internal static void SwitchBarbarianFightingStyle() + { + if (Main.Settings.EnableBarbarianFightingStyle) + { + Barbarian.FeatureUnlocks.TryAdd( + new FeatureUnlockByLevel(FightingStyleChoiceBarbarian, 2)); + } + else + { + Barbarian.FeatureUnlocks.RemoveAll(x => + x.level == 2 && x.FeatureDefinition == FightingStyleChoiceBarbarian); + } + + Barbarian.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + #endregion + + #region Monk + + private static readonly FeatureDefinitionAttributeModifier AttributeModifierMonkAbundantKi = + FeatureDefinitionAttributeModifierBuilder + .Create("AttributeModifierMonkAbundantKi") + .SetGuiPresentation(Category.Feature) + .SetModifier(AttributeModifierOperation.AddHalfProficiencyBonus, AttributeDefinitions.KiPoints) + .SetSituationalContext(SituationalContext.NotWearingArmorOrShield) + .AddToDB(); + + internal static readonly FeatureDefinitionFightingStyleChoice FightingStyleChoiceMonk = + FeatureDefinitionFightingStyleChoiceBuilder + .Create("FightingStyleChoiceMonk") + .SetGuiPresentation("FighterFightingStyle", Category.Feature) + .SetFightingStyles( + "Archery", + // BlindFighting + // Crippling + // Defense + "Dueling", + // Executioner + // GreatWeapon + // HandAndAHalf + // Interception + // Lunger + // Merciless + // Protection + // Pugilist + // RemarkableTechnique + // RopeIpUp + // ShieldExpert + // Torchbearer + "TwoWeapon") + .AddToDB(); + + + private static readonly FeatureDefinitionCustomInvocationPool InvocationPoolMonkWeaponSpecialization = + CustomInvocationPoolDefinitionBuilder + .Create("InvocationPoolMonkWeaponSpecialization") + .SetGuiPresentation("InvocationPoolMonkWeaponSpecializationLearn", Category.Feature) + .Setup(InvocationPoolTypeCustom.Pools.MonkWeaponSpecialization) + .AddToDB(); + + private static void LoadMonkWeaponSpecialization() + { + var weaponTypeDefinitions = new List + { + WeaponTypeDefinitions.BattleaxeType, + WeaponTypeDefinitions.LightCrossbowType, + WeaponTypeDefinitions.LongbowType, + WeaponTypeDefinitions.LongswordType, + WeaponTypeDefinitions.MorningstarType, + WeaponTypeDefinitions.RapierType, + WeaponTypeDefinitions.ScimitarType, + WeaponTypeDefinitions.ShortbowType, + WeaponTypeDefinitions.WarhammerType, + CustomWeaponsContext.HandXbowWeaponType + }; + + foreach (var weaponTypeDefinition in weaponTypeDefinitions) + { + var weaponTypeName = weaponTypeDefinition.Name; + + var featureMonkWeaponSpecialization = FeatureDefinitionProficiencyBuilder + .Create($"FeatureMonkWeaponSpecialization{weaponTypeName}") + .SetGuiPresentationNoContent(true) + .SetProficiencies(ProficiencyType.Weapon, weaponTypeName) + .AddCustomSubFeatures( + new MonkWeaponSpecialization { WeaponType = weaponTypeDefinition }) + .AddToDB(); + + if (!weaponTypeDefinition.IsBow && !weaponTypeDefinition.IsCrossbow) + { + featureMonkWeaponSpecialization.AddCustomSubFeatures( + new AddTagToWeapon(TagsDefinitions.WeaponTagFinesse, TagsDefinitions.Criticity.Important, + ValidatorsWeapon.IsOfWeaponType(weaponTypeDefinition)) + ); + } + + // ensure we get dice upgrade on these + AttackModifierMonkMartialArtsImprovedDamage.AddCustomSubFeatures( + new MonkWeaponSpecializationDiceUpgrade(weaponTypeDefinition)); + + _ = CustomInvocationDefinitionBuilder + .Create($"CustomInvocationMonkWeaponSpecialization{weaponTypeName}") + .SetGuiPresentation( + weaponTypeDefinition.GuiPresentation.Title, + weaponTypeDefinition.GuiPresentation.Description, + CustomWeaponsContext.GetStandardWeaponOfType(weaponTypeDefinition.Name)) + .SetPoolType(InvocationPoolTypeCustom.Pools.MonkWeaponSpecialization) + .SetGrantedFeature(featureMonkWeaponSpecialization) + .AddCustomSubFeatures(ModifyInvocationVisibility.Marker) + .AddToDB(); + } + } + + internal static void SwitchMonkAbundantKi() + { + if (Main.Settings.EnableMonkAbundantKi) + { + Monk.FeatureUnlocks.TryAdd( + new FeatureUnlockByLevel(AttributeModifierMonkAbundantKi, 2)); + } + else + { + Monk.FeatureUnlocks + .RemoveAll(x => x.level == 2 && + x.FeatureDefinition == AttributeModifierMonkAbundantKi); + } + + Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchMonkFightingStyle() + { + if (Main.Settings.EnableMonkFightingStyle) + { + Monk.FeatureUnlocks.TryAdd( + new FeatureUnlockByLevel(FightingStyleChoiceMonk, 2)); + } + else + { + Monk.FeatureUnlocks + .RemoveAll(x => x.level == 2 && + x.FeatureDefinition == FightingStyleChoiceMonk); + } + + Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchMonkImprovedUnarmoredMovementToMoveOnTheWall() + { + if (Main.Settings.EnableMonkImprovedUnarmoredMovementToMoveOnTheWall) + { + MovementAffinityMonkUnarmoredMovementImproved.GuiPresentation.description = + "Feature/&MonkAlternateUnarmoredMovementImprovedDescription"; + MovementAffinityMonkUnarmoredMovementImproved.GuiPresentation.title = + "Feature/&MonkAlternateUnarmoredMovementImprovedTitle"; + MovementAffinityMonkUnarmoredMovementImproved.canMoveOnWalls = true; + } + else + { + MovementAffinityMonkUnarmoredMovementImproved.GuiPresentation.description = + "Feature/&MonkUnarmoredMovementImprovedDescription"; + MovementAffinityMonkUnarmoredMovementImproved.GuiPresentation.title = + "Feature/&MonkUnarmoredMovementImprovedTitle"; + MovementAffinityMonkUnarmoredMovementImproved.canMoveOnWalls = false; + } + } + + internal static void SwitchMonkWeaponSpecialization() + { + var levels = new[] { 2, 11 }; + + if (Main.Settings.EnableMonkWeaponSpecialization) + { + foreach (var level in levels) + { + Monk.FeatureUnlocks.TryAdd( + new FeatureUnlockByLevel(InvocationPoolMonkWeaponSpecialization, level)); + } + } + else + { + foreach (var level in levels) + { + Monk.FeatureUnlocks + .RemoveAll(x => x.level == level && + x.FeatureDefinition == InvocationPoolMonkWeaponSpecialization); + } + } + + Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + + internal static void UpdateHandWrapsUseGauntletSlot() + { + foreach (var item in DatabaseRepository.GetDatabase()) + { + if (item is not { WeaponDescription.weaponType: EquipmentDefinitions.WeaponTypeUnarmedStrike }) + { + continue; + } + + if (item == ItemDefinitions.UnarmedStrikeBase) { continue; } + + if (Main.Settings.EnableMonkHandwrapsUseGauntletSlot) + { + item.SlotTypes.Add(EquipmentDefinitions.SlotTypeGloves); + item.SlotsWhereActive.Add(EquipmentDefinitions.SlotTypeGloves); + } + else + { + item.SlotTypes.Remove(EquipmentDefinitions.SlotTypeGloves); + item.SlotsWhereActive.Remove(EquipmentDefinitions.SlotTypeGloves); + } + } + } + + internal sealed class MonkWeaponSpecialization + { + internal WeaponTypeDefinition WeaponType { get; set; } } + + private sealed class MonkWeaponSpecializationDiceUpgrade : IValidateContextInsteadOfRestrictedProperty + { + private readonly WeaponTypeDefinition _weaponTypeDefinition; + + internal MonkWeaponSpecializationDiceUpgrade(WeaponTypeDefinition weaponTypeDefinition) + { + _weaponTypeDefinition = weaponTypeDefinition; + } + + public (OperationType, bool) ValidateContext( + BaseDefinition definition, + IRestrictedContextProvider provider, + RulesetCharacter character, + ItemDefinition itemDefinition, + bool rangedAttack, RulesetAttackMode attackMode, + RulesetEffect rulesetEffect) + { + var attackModeWeaponType = + (attackMode?.SourceDefinition as ItemDefinition)?.WeaponDescription.WeaponTypeDefinition; + + return (OperationType.Or, + character.GetSubFeaturesByType().Exists( + x => x._weaponTypeDefinition == attackModeWeaponType)); + } + } + + #endregion + + #region Rogue + + internal static readonly FeatureDefinitionFightingStyleChoice FightingStyleChoiceRogue = + FeatureDefinitionFightingStyleChoiceBuilder + .Create("FightingStyleChoiceRogue") + .SetGuiPresentation("FighterFightingStyle", Category.Feature) + .SetFightingStyles( + "Archery", + // BlindFighting + // Crippling + "Defense", + // Dueling + // Executioner + // GreatWeapon + // HandAndAHalf + // Interception + // Lunger + // Merciless + // Protection + // Pugilist + // RemarkableTechnique + // RopeIpUp + // ShieldExpert + // Torchbearer + "TwoWeapon") + .AddToDB(); + + internal static void SwitchRogueFightingStyle() + { + if (Main.Settings.EnableRogueFightingStyle) + { + Rogue.FeatureUnlocks.TryAdd( + new FeatureUnlockByLevel(FightingStyleChoiceRogue, 2)); + } + else + { + Rogue.FeatureUnlocks.RemoveAll(x => x.level == 2 && x.FeatureDefinition == FightingStyleChoiceRogue); + } + + Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + private static void SwitchRogueStrSaving() + { + var powerNames = new List + { + "PowerRogueCunningStrikeDisarm", + //"PowerRogueCunningStrikePoison", + "PowerRogueCunningStrikeTrip", + //"PowerRogueCunningStrikeWithdraw", + //"PowerRogueDeviousStrikeDaze", + //"PowerRogueDeviousStrikeKnockOut", + "PowerRogueDeviousStrikeObscure", + "PowerRoguishOpportunistDebilitatingStrike", + "PowerRoguishOpportunistImprovedDebilitatingStrike", + "PowerRoguishBladeCallerHailOfBlades" + }; + + foreach (var power in DatabaseRepository.GetDatabase() + .Where(x => powerNames.Contains(x.Name))) + { + power.AddCustomSubFeatures(new ModifyEffectDescriptionSavingThrowRogue(power)); + } + } + + #endregion + + #region Sorcerer + + private static readonly FeatureDefinition FeatureSorcererMagicalGuidance = FeatureDefinitionBuilder + .Create("FeatureSorcererMagicalGuidance") + .SetGuiPresentation(Category.Feature) + .AddCustomSubFeatures(new TryAlterOutcomeAttributeCheckSorcererMagicalGuidance()) + .AddToDB(); + + internal static void SwitchSorcererMagicalGuidance() + { + if (Main.Settings.EnableSorcererMagicalGuidance) + { + Sorcerer.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(FeatureSorcererMagicalGuidance, 5)); + } + else + { + Sorcerer.FeatureUnlocks.RemoveAll(x => + x.level == 5 && x.FeatureDefinition == FeatureSorcererMagicalGuidance); + } + + Sorcerer.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + + private sealed class TryAlterOutcomeAttributeCheckSorcererMagicalGuidance : ITryAlterOutcomeAttributeCheck + { + public IEnumerator OnTryAlterAttributeCheck( + GameLocationBattleManager battleManager, + AbilityCheckData abilityCheckData, + GameLocationCharacter defender, + GameLocationCharacter helper) + { + var rulesetHelper = helper.RulesetCharacter; + + if (abilityCheckData.AbilityCheckRoll == 0 || + abilityCheckData.AbilityCheckRollOutcome != RollOutcome.Failure || + helper != defender || + rulesetHelper.RemainingSorceryPoints == 0) + { + yield break; + } + + yield return helper.MyReactToDoNothing( + ExtraActionId.DoNothingFree, + defender, + "MagicalGuidanceCheck", + "CustomReactionMagicalGuidanceCheckDescription" + .Formatted(Category.Reaction, defender.Name, helper.Name), + ReactionValidated, + battleManager: battleManager, + resource: ReactionResourceSorceryPoints.Instance); + + yield break; + + void ReactionValidated() + { + rulesetHelper.SpendSorceryPoints(1); + + var dieRoll = rulesetHelper.RollDie(DieType.D20, RollContext.None, false, AdvantageType.None, out _, + out _); + var previousRoll = abilityCheckData.AbilityCheckRoll; + + abilityCheckData.AbilityCheckSuccessDelta += dieRoll - abilityCheckData.AbilityCheckRoll; + abilityCheckData.AbilityCheckRoll = dieRoll; + abilityCheckData.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckSuccessDelta >= 0 + ? RollOutcome.Success + : RollOutcome.Failure; + + rulesetHelper.LogCharacterActivatesAbility( + "Feature/&FeatureSorcererMagicalGuidanceTitle", + "Feedback/&MagicalGuidanceCheckToHitRoll", + extra: + [ + (dieRoll > previousRoll ? ConsoleStyleDuplet.ParameterType.Positive : ConsoleStyleDuplet.ParameterType.Negative, + dieRoll.ToString()), + (previousRoll > dieRoll ? ConsoleStyleDuplet.ParameterType.Positive : ConsoleStyleDuplet.ParameterType.Negative, + previousRoll.ToString()) + ]); + } + } + } + + #endregion } diff --git a/SolastaUnfinishedBusiness/Models/CustomWeaponsContext.cs b/SolastaUnfinishedBusiness/Models/CustomWeaponsContext.cs index 1886afc092..c06b2d6596 100644 --- a/SolastaUnfinishedBusiness/Models/CustomWeaponsContext.cs +++ b/SolastaUnfinishedBusiness/Models/CustomWeaponsContext.cs @@ -63,7 +63,6 @@ internal static void Load() BuildThunderGauntlet(); BuildLightningLauncher(); BuildUnarmedStrikeClaws(); - UpdateHandWrapsUseGauntletSlot(); } [NotNull] @@ -783,30 +782,6 @@ internal static ItemDefinition GetStandardWeaponOfType(string type) item.WeaponDescription.WeaponTypeDefinition.Name == type); } - internal static void UpdateHandWrapsUseGauntletSlot() - { - foreach (var item in DatabaseRepository.GetDatabase()) - { - if (item is not { WeaponDescription.weaponType: EquipmentDefinitions.WeaponTypeUnarmedStrike }) - { - continue; - } - - if (item == ItemDefinitions.UnarmedStrikeBase) { continue; } - - if (Main.Settings.EnableMonkHandwrapsUseGauntletSlot) - { - item.SlotTypes.Add(EquipmentDefinitions.SlotTypeGloves); - item.SlotsWhereActive.Add(EquipmentDefinitions.SlotTypeGloves); - } - else - { - item.SlotTypes.Remove(EquipmentDefinitions.SlotTypeGloves); - item.SlotsWhereActive.Remove(EquipmentDefinitions.SlotTypeGloves); - } - } - } - internal static void ModifyUnarmedAttackWithGauntlet(RulesetCharacterHero hero, ref ItemDefinition itemDefinition, ref WeaponDescription weaponDescription, ref RulesetItem weapon) { diff --git a/SolastaUnfinishedBusiness/Models/DeitiesContext.cs b/SolastaUnfinishedBusiness/Models/DeitiesContext.cs deleted file mode 100644 index e93df191b4..0000000000 --- a/SolastaUnfinishedBusiness/Models/DeitiesContext.cs +++ /dev/null @@ -1,66 +0,0 @@ -#if false -using System.Collections.Generic; -using System.Linq; -using JetBrains.Annotations; -using static RuleDefinitions; -using static FeatureDefinitionAttributeModifier; - -namespace SolastaUnfinishedBusiness.Models; - -internal static class DeitiesContext -{ - internal static HashSet Deities { get; private set; } = new(); - - internal static void Load() - { - // sorting - Deities = Deities.OrderBy(x => x.FormatTitle()).ToHashSet(); - - // settings paring - foreach (var name in Main.Settings.DeityEnabled - .Where(name => Deities.All(x => x.Name != name)) - .ToArray()) - { - Main.Settings.DeityEnabled.Remove(name); - } - } - - [UsedImplicitly] - internal static void LoadDeity([NotNull] DeityDefinition deityDefinition) - { - if (!Deities.Contains(deityDefinition)) - { - Deities.Add(deityDefinition); - } - - UpdateDeityVisibility(deityDefinition); - } - - private static void UpdateDeityVisibility([NotNull] BaseDefinition deityDefinition) - { - deityDefinition.GuiPresentation.hidden = - !Main.Settings.DeityEnabled.Contains(deityDefinition.Name); - } - - internal static void Switch(DeityDefinition deityDefinition, bool active) - { - if (!Deities.Contains(deityDefinition)) - { - return; - } - - var name = deityDefinition.Name; - - if (active) - { - Main.Settings.DeityEnabled.TryAdd(name); - } - else - { - Main.Settings.DeityEnabled.Remove(name); - } - - UpdateDeityVisibility(deityDefinition); - } -} -#endif diff --git a/SolastaUnfinishedBusiness/Models/DelegatesContext.cs b/SolastaUnfinishedBusiness/Models/DelegatesContext.cs deleted file mode 100644 index 20f2a87f49..0000000000 --- a/SolastaUnfinishedBusiness/Models/DelegatesContext.cs +++ /dev/null @@ -1,1056 +0,0 @@ -#if false -using SolastaUnfinishedBusiness.Api.GameExtensions; -using SolastaUnfinishedBusiness.Interfaces; -using SolastaUnfinishedBusiness.Subclasses; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.RecipeDefinitions; - -namespace SolastaUnfinishedBusiness.Models; - -internal static class DelegatesContext -{ - internal static void LateLoad() - { - var gameService = ServiceRepository.GetService(); - - gameService.GameCreated += GameCreated; - gameService.GameDestroying += GameDestroying; - } - - // - // IGameService - // - - private static void GameCreated() - { - Main.Info("Game Created"); - - var gameLocationService = ServiceRepository.GetService(); - - gameLocationService.LocationReady += LocationReady; - gameLocationService.LocationUnloading += LocationUnloading; - } - - private static void GameDestroying() - { - Main.Info("Game Destroying"); - - var gameLocationService = ServiceRepository.GetService(); - - gameLocationService.LocationReady -= LocationReady; - gameLocationService.LocationUnloading -= LocationUnloading; - } - - // - // IGameLocationService - // - - private static void LocationReady(string locationDefinitionName, string userLocationTitle) - { - Main.Info("Location Ready"); - - var characterService = ServiceRepository.GetService(); - - // characterService.CharacterCreated += CharacterCreated; - // characterService.CharacterRevealed += CharacterRevealed; - // characterService.CharacterKilled += CharacterKilled; - // characterService.CharacterDestroying += CharacterDestroying; - - var actionService = ServiceRepository.GetService(); - - actionService.ActionStarted += ActionStarted; - - actionService.ActionChainStarted += ActionChainStarted; - actionService.ActionChainFinished += ActionChainFinished; - actionService.MagicEffectPreparing += MagicEffectPreparing; - actionService.MagicEffectPreparingOnTarget += MagicEffectPreparingOnTarget; - actionService.MagicEffectLaunch += MagicEffectLaunch; - actionService.MagicEffectCastOnTarget += MagicEffectCastOnTarget; - actionService.MagicEffectCastOnZone += MagicEffectCastOnZone; - actionService.MagicEffectBeforeHitTarget += MagicEffectBeforeHitTarget; - actionService.MagicEffectHitTarget += MagicEffectHitTarget; - actionService.SpellCast += SpellCast; - actionService.ActionUsed += ActionUsed; - actionService.ShoveActionUsed += ShoveActionUsed; - actionService.ItemUsed += ItemUsed; - - foreach (var gameLocationCharacter in characterService.ValidCharacters) - { - // gameLocationCharacter.Placed += Placed; - // gameLocationCharacter.MoveStarted += MoveStarted; - // gameLocationCharacter.PrepareChargeStarted += PrepareChargeStarted; - // gameLocationCharacter.ChargeStarted += ChargeStarted; - // gameLocationCharacter.ChargeEnded += ChargeEnded; - // gameLocationCharacter.ChargeAborted += ChargeAborted; - // gameLocationCharacter.UpdateMotions += UpdateMotions; - // gameLocationCharacter.TeleportStarted += TeleportStarted; - // gameLocationCharacter.Moved += Moved; - // gameLocationCharacter.Rotated += Rotated; - // gameLocationCharacter.Stopped += Stopped; - // gameLocationCharacter.FallStarted += FallStarted; - // gameLocationCharacter.FallStopped += FallStopped; - // gameLocationCharacter.CrawlStarted += CrawlStarted; - // gameLocationCharacter.BurrowStarted += BurrowStarted; - // gameLocationCharacter.BurrowEnded += BurrowEnded; - // gameLocationCharacter.JumpStarted += JumpStarted; - // gameLocationCharacter.JumpFinished += JumpFinished; - // gameLocationCharacter.VaultStarted += VaultStarted; - // gameLocationCharacter.VaultFinished += VaultFinished; - // gameLocationCharacter.ClimbStarted += ClimbStarted; - // gameLocationCharacter.ClimbFinished += ClimbFinished; - // gameLocationCharacter.ChangeSurfaceStarted += ChangeSurfaceStarted; - // gameLocationCharacter.AttackStart += AttackStart; - // gameLocationCharacter.AttackImpactStart += AttackImpactStart; - // gameLocationCharacter.DeflectAttackStart += DeflectAttackStart; - // gameLocationCharacter.ManipulateStart += ManipulateStart; - // gameLocationCharacter.ManipulateEnd += ManipulateEnd; - // gameLocationCharacter.ShoveStart += ShoveStart; - // gameLocationCharacter.CastingStart += CastingStart; - // gameLocationCharacter.HitStart += HitStart; - // gameLocationCharacter.PathFailed += PathFailed; - // gameLocationCharacter.DialogStarted += DialogStarted; - // gameLocationCharacter.DialogEnded += DialogEnded; - // gameLocationCharacter.DialogChoiceStarted += DialogChoiceStarted; - // gameLocationCharacter.DialogChoiceEnded += DialogChoiceEnded; - // gameLocationCharacter.SpeechStarted += SpeechStarted; - // gameLocationCharacter.SpeechEnded += SpeechEnded; - // gameLocationCharacter.ListenStarted += ListenStarted; - // gameLocationCharacter.ListenEnded += ListenEnded; - // gameLocationCharacter.AdditionalAnimationStarted += AdditionalAnimationStarted; - // gameLocationCharacter.TextFeedbackRequested += TextFeedbackRequested; - // gameLocationCharacter.InGameDialogLineRequested += InGameDialogLineRequested; - // gameLocationCharacter.AlreadySuccessful += AlreadySuccessful; - // gameLocationCharacter.AlreadyFailed += AlreadyFailed; - // gameLocationCharacter.ProneStatusChanged += ProneStatusChanged; - // gameLocationCharacter.IsAngryStatusChanged += IsAngryStatusChanged; - // gameLocationCharacter.UsedTacticalMovesChanged += UsedTacticalMovesChanged; - // gameLocationCharacter.CurrentMonsterAttackChanged += CurrentMonsterAttackChanged; - // gameLocationCharacter.DisolveStarted += DissolveStarted; - - var rulesetCharacter = gameLocationCharacter.RulesetCharacter; - - // rulesetCharacter.ConditionAdded += ConditionAdded; - // rulesetCharacter.ConditionRemoved += ConditionRemoved; - // rulesetCharacter.ConditionRemovedForVisual += ConditionRemovedForVisual; - // rulesetCharacter.ConditionOccurenceReached += ConditionOccurenceReached; - // rulesetCharacter.ConditionSaveRerollRequested += ConditionSaveRerollRequested; - // rulesetCharacter.ImmuneToSpell += ImmuneToSpell; - // rulesetCharacter.ImmuneToSpellLevel += ImmuneToSpellLevel; - // rulesetCharacter.ImmuneToDamage += ImmuneToDamage; - // rulesetCharacter.DamageAltered += DamageAltered; - // rulesetCharacter.ImmuneToCondition += ImmuneToCondition; - // rulesetCharacter.SaveRolled += SaveRolled; - // rulesetCharacter.DieRerolled += DieRerolled; - // rulesetCharacter.AttackInitiated += AttackInitiated; - // rulesetCharacter.AttackRolled += AttackRolled; - // rulesetCharacter.IncomingAttackRolled += IncomingAttackRolled; - // rulesetCharacter.AttackAutomaticHit += AttackAutomaticHit; - // rulesetCharacter.AttackAutomaticCritical += AttackAutomaticCritical; - // rulesetCharacter.DamageFormsTriggered += DamageFormsTriggered; - // rulesetCharacter.HealingFormsTriggered += HealingFormsTriggered; - // rulesetCharacter.IncomingDamageNotified += IncomingDamageNotified; - // rulesetCharacter.AbilityScoreIncreased += AbilityScoreIncreased; - // rulesetCharacter.DamageHalved += DamageHalved; - // rulesetCharacter.DamageReduced += DamageReduced; - // rulesetCharacter.ReplacedAbilityScoreForSave += ReplacedAbilityScoreForSave; - // rulesetCharacter.AdditionalSaveDieRolled += AdditionalSaveDieRolled; - // rulesetCharacter.DamageReceived += DamageReceived; - // rulesetCharacter.AlterationInflicted += AlterationInflicted; - // rulesetCharacter.SpellDissipated += SpellDissipated; - // rulesetCharacter.TagRevealed += TagRevealed; - // rulesetCharacter.ActorReplaced += ActorReplaced; - - if (rulesetCharacter is not RulesetCharacterHero rulesetCharacterHero) - { - return; - } - - // rulesetCharacterHero.ItemEquipedCallback += ItemEquipped; - - // rulesetCharacterHero.CharacterInventory.ItemEquiped += ItemEquiped; - // rulesetCharacterHero.CharacterInventory.ItemAltered += ItemAltered; - // rulesetCharacterHero.CharacterInventory.ItemUnequiped += ItemUnequiped; - // rulesetCharacterHero.CharacterInventory.ItemReleased += ItemReleased; - } - } - - private static void LocationUnloading(string locationDefinitionName, string userLocationTitle) - { - Main.Info("Location Unloading"); - - var characterService = ServiceRepository.GetService(); - - // characterService.CharacterCreated -= CharacterCreated; - // characterService.CharacterRevealed -= CharacterRevealed; - // characterService.CharacterKilled -= CharacterKilled; - // characterService.CharacterDestroying -= CharacterDestroying; - - var actionService = ServiceRepository.GetService(); - - actionService.ActionStarted -= ActionStarted; - actionService.ActionChainStarted -= ActionChainStarted; - actionService.ActionChainFinished -= ActionChainFinished; - actionService.MagicEffectPreparing -= MagicEffectPreparing; - actionService.MagicEffectPreparingOnTarget -= MagicEffectPreparingOnTarget; - actionService.MagicEffectLaunch -= MagicEffectLaunch; - actionService.MagicEffectCastOnTarget -= MagicEffectCastOnTarget; - actionService.MagicEffectCastOnZone -= MagicEffectCastOnZone; - actionService.MagicEffectBeforeHitTarget -= MagicEffectBeforeHitTarget; - actionService.MagicEffectHitTarget -= MagicEffectHitTarget; - actionService.SpellCast -= SpellCast; - actionService.ActionUsed -= ActionUsed; - actionService.ShoveActionUsed -= ShoveActionUsed; - actionService.ItemUsed -= ItemUsed; - - foreach (var gameLocationCharacter in characterService.ValidCharacters) - { - // gameLocationCharacter.Placed -= Placed; - // gameLocationCharacter.MoveStarted -= MoveStarted; - // gameLocationCharacter.PrepareChargeStarted -= PrepareChargeStarted; - // gameLocationCharacter.ChargeStarted -= ChargeStarted; - // gameLocationCharacter.ChargeEnded -= ChargeEnded; - // gameLocationCharacter.ChargeAborted -= ChargeAborted; - // gameLocationCharacter.UpdateMotions -= UpdateMotions; - // gameLocationCharacter.TeleportStarted -= TeleportStarted; - // gameLocationCharacter.Moved -= Moved; - // gameLocationCharacter.Rotated -= Rotated; - // gameLocationCharacter.Stopped -= Stopped; - // gameLocationCharacter.FallStarted -= FallStarted; - // gameLocationCharacter.FallStopped -= FallStopped; - // gameLocationCharacter.CrawlStarted -= CrawlStarted; - // gameLocationCharacter.BurrowStarted -= BurrowStarted; - // gameLocationCharacter.BurrowEnded -= BurrowEnded; - // gameLocationCharacter.JumpStarted -= JumpStarted; - // gameLocationCharacter.JumpFinished -= JumpFinished; - // gameLocationCharacter.VaultStarted -= VaultStarted; - // gameLocationCharacter.VaultFinished -= VaultFinished; - // gameLocationCharacter.ClimbStarted -= ClimbStarted; - // gameLocationCharacter.ClimbFinished -= ClimbFinished; - // gameLocationCharacter.ChangeSurfaceStarted -= ChangeSurfaceStarted; - // gameLocationCharacter.AttackStart -= AttackStart; - // gameLocationCharacter.AttackImpactStart -= AttackImpactStart; - // gameLocationCharacter.DeflectAttackStart -= DeflectAttackStart; - // gameLocationCharacter.ManipulateStart -= ManipulateStart; - // gameLocationCharacter.ManipulateEnd -= ManipulateEnd; - // gameLocationCharacter.ShoveStart -= ShoveStart; - // gameLocationCharacter.CastingStart -= CastingStart; - // gameLocationCharacter.HitStart -= HitStart; - // gameLocationCharacter.PathFailed -= PathFailed; - // gameLocationCharacter.DialogStarted -= DialogStarted; - // gameLocationCharacter.DialogEnded -= DialogEnded; - // gameLocationCharacter.DialogChoiceStarted -= DialogChoiceStarted; - // gameLocationCharacter.DialogChoiceEnded -= DialogChoiceEnded; - // gameLocationCharacter.SpeechStarted -= SpeechStarted; - // gameLocationCharacter.SpeechEnded -= SpeechEnded; - // gameLocationCharacter.ListenStarted -= ListenStarted; - // gameLocationCharacter.ListenEnded -= ListenEnded; - // gameLocationCharacter.AdditionalAnimationStarted -= AdditionalAnimationStarted; - // gameLocationCharacter.TextFeedbackRequested -= TextFeedbackRequested; - // gameLocationCharacter.InGameDialogLineRequested -= InGameDialogLineRequested; - // gameLocationCharacter.AlreadySuccessful -= AlreadySuccessful; - // gameLocationCharacter.AlreadyFailed -= AlreadyFailed; - // gameLocationCharacter.ProneStatusChanged -= ProneStatusChanged; - // gameLocationCharacter.IsAngryStatusChanged -= IsAngryStatusChanged; - // gameLocationCharacter.UsedTacticalMovesChanged -= UsedTacticalMovesChanged; - // gameLocationCharacter.CurrentMonsterAttackChanged -= CurrentMonsterAttackChanged; - // gameLocationCharacter.DisolveStarted -= DissolveStarted; - - var rulesetCharacter = gameLocationCharacter.RulesetCharacter; - - // rulesetCharacter.ConditionAdded -= ConditionAdded; - // rulesetCharacter.ConditionRemoved -= ConditionRemoved; - // rulesetCharacter.ConditionRemovedForVisual -= ConditionRemovedForVisual; - // rulesetCharacter.ConditionOccurenceReached -= ConditionOccurenceReached; - // rulesetCharacter.ConditionSaveRerollRequested -= ConditionSaveRerollRequested; - // rulesetCharacter.ImmuneToSpell -= ImmuneToSpell; - // rulesetCharacter.ImmuneToSpellLevel -= ImmuneToSpellLevel; - // rulesetCharacter.ImmuneToDamage -= ImmuneToDamage; - // rulesetCharacter.DamageAltered -= DamageAltered; - // rulesetCharacter.ImmuneToCondition -= ImmuneToCondition; - // rulesetCharacter.SaveRolled -= SaveRolled; - // rulesetCharacter.DieRerolled -= DieRerolled; - // rulesetCharacter.AttackInitiated -= AttackInitiated; - // rulesetCharacter.AttackRolled -= AttackRolled; - // rulesetCharacter.IncomingAttackRolled -= IncomingAttackRolled; - // rulesetCharacter.AttackAutomaticHit -= AttackAutomaticHit; - // rulesetCharacter.AttackAutomaticCritical -= AttackAutomaticCritical; - // rulesetCharacter.DamageFormsTriggered -= DamageFormsTriggered; - // rulesetCharacter.HealingFormsTriggered -= HealingFormsTriggered; - // rulesetCharacter.IncomingDamageNotified -= IncomingDamageNotified; - // rulesetCharacter.AbilityScoreIncreased -= AbilityScoreIncreased; - // rulesetCharacter.DamageHalved -= DamageHalved; - // rulesetCharacter.DamageReduced -= DamageReduced; - // rulesetCharacter.ReplacedAbilityScoreForSave -= ReplacedAbilityScoreForSave; - // rulesetCharacter.AdditionalSaveDieRolled -= AdditionalSaveDieRolled; - // rulesetCharacter.DamageReceived -= DamageReceived; - // rulesetCharacter.AlterationInflicted -= AlterationInflicted; - // rulesetCharacter.SpellDissipated -= SpellDissipated; - // rulesetCharacter.TagRevealed -= TagRevealed; - // rulesetCharacter.ActorReplaced -= ActorReplaced; - - if (rulesetCharacter is not RulesetCharacterHero rulesetCharacterHero) - { - return; - } - - // rulesetCharacterHero.ItemEquipedCallback -= ItemEquipped; - // rulesetCharacterHero.CharacterInventory.ItemEquiped -= ItemEquiped; - // rulesetCharacterHero.CharacterInventory.ItemAltered -= ItemAltered; - // rulesetCharacterHero.CharacterInventory.ItemUnequiped -= ItemUnequiped; - // rulesetCharacterHero.CharacterInventory.ItemReleased -= ItemReleased; - } - } - - // - // IGameLocationCharacterService - // - - private static void CharacterCreated(GameLocationCharacter gameLocationCharacter) - { - Main.Info($"{gameLocationCharacter.Name} Character Created"); - } - - private static void CharacterRevealed(GameLocationCharacter character) - { - Main.Info($"{character.Name} Character Revealed"); - } - - private static void CharacterDestroying(GameLocationCharacter gameLocationCharacter) - { - Main.Info($"{gameLocationCharacter.Name} Character Destroying"); - } - - private static void CharacterKilled(GameLocationCharacter character, bool considerDead) - { - Main.Info($"{character.Name} Character Killed"); - } - - // - // RulesetCharacterHero - // - - private static void ItemEquipped(RulesetCharacterHero hero, RulesetItem item) - { - Main.Info($"{hero.Name} Item Equipped Hero"); - - WizardBladeDancer.OnItemEquipped(hero); - CollegeOfWarDancer.OnItemEquipped(hero); - } - - // - // CharacterInventory - // - - private static void ItemEquiped( - RulesetInventory characterInventory, - RulesetInventorySlot slot, - RulesetItem item) - { - Main.Info("Item Equipped"); - } - - private static void ItemAltered( - RulesetInventory characterInventory, - RulesetInventorySlot slot, - RulesetItem item) - { - Main.Info("Item Altered"); - } - - private static void ItemUnequiped( - RulesetInventory characterInventory, - RulesetInventorySlot slot, - RulesetItem item) - { - Main.Info("Item Unequipped"); - } - - private static void ItemReleased(RulesetItem item, bool canKeep) - { - Main.Info("Item Released"); - } - - // - // IGameLocationActionService - // - - private static void ActionStarted(CharacterAction characterAction) - { - Main.Info($"{characterAction.ActingCharacter?.Name} -> {characterAction.ActionDefinition.Name} STARTED"); - - Global.ActionStarted(characterAction); - } - - private static void ActionChainStarted(CharacterActionChainParams characterActionChainParams) - { - Main.Info($"{characterActionChainParams.ActingCharacter.Name} Action Chain Started"); - } - - private static void ActionChainFinished( - CharacterActionChainParams characterActionChainParams, - bool aborted) - { - Main.Info($"{characterActionChainParams.ActingCharacter.Name} Action Chain Finished"); - } - - private static void MagicEffectPreparing(ref ActionDefinitions.MagicEffectCastData data) - { - Main.Info($"{data.Caster.Name} Magic Effect Preparing"); - } - - private static void MagicEffectPreparingOnTarget(ref ActionDefinitions.MagicEffectCastData data) - { - Main.Info($"{data.Caster.Name} Magic Effect Preparing On Target"); - } - - private static void MagicEffectLaunch(ref ActionDefinitions.MagicEffectCastData data) - { - Main.Info($"{data.Caster.Name} Magic Effect Launch"); - } - - private static void MagicEffectCastOnTarget(ref ActionDefinitions.MagicEffectCastData data) - { - Main.Info($"{data.Caster.Name} Magic Effect Cast On Target"); - } - - private static void MagicEffectCastOnZone(ref ActionDefinitions.MagicEffectCastData data) - { - Main.Info($"{data.Caster.Name} Magic Effect Cast On Zone"); - } - - private static void MagicEffectBeforeHitTarget(ref ActionDefinitions.MagicEffectCastData data) - { - Main.Info($"{data.Caster.Name} Magic Effect Before Hit Target"); - } - - private static void MagicEffectHitTarget(ref ActionDefinitions.MagicEffectCastData data) - { - Main.Info($"{data.Caster.Name} Magic Effect Hit Target"); - } - - private static void SpellCast(string spellDefinitionName, int fromDevice) - { - Main.Info($"{spellDefinitionName} Spell Cast"); - } - - private static void ActionUsed( - GameLocationCharacter actingCharacter, - CharacterActionParams actionParams, - ActionDefinition actionDefinition) - { - Main.Info($"{actingCharacter.Name} -> {actionDefinition.Name} FINISHED"); - } - - private static void ShoveActionUsed( - GameLocationCharacter actingCharacter, - GameLocationCharacter attackingCharacter, - ActionDefinition actionDefinition, - bool success) - { - Main.Info($"{actingCharacter.Name} Shove Action Used"); - } - - private static void ItemUsed(string itemDefinitionName) - { - Main.Info("Item Used"); - } - - // - // GameLocationCharacter - // - - private static void Placed(GameLocationCharacter character, int3 location) - { - Main.Info($"{character.Name} Placed"); - } - - private static void MoveStarted(ref GameLocationCharacterDefinitions.MoveStartedParameters parameters) - { - Main.Info("Move Started"); - } - - private static void PrepareChargeStarted( - GameLocationCharacter character, - CharacterActionParams actionParams) - { - Main.Info($"{character.Name} Prepare Charge Started"); - } - - private static void ChargeStarted( - GameLocationCharacter character, - CharacterActionParams actionParams) - { - Main.Info($"{character.Name} Charge Started"); - } - - private static void ChargeEnded( - GameLocationCharacter character, - CharacterActionParams actionParams) - { - Main.Info($"{character.Name} Charge Ended"); - } - - private static void ChargeAborted( - GameLocationCharacter character, - CharacterActionParams actionParams) - { - Main.Info($"{character.Name} Charge Aborted"); - } - - private static void TeleportStarted( - GameLocationCharacter character, - int3 destination, - LocationDefinitions.Orientation destinationOrientation, - bool sendEvent) - { - Main.Info($"{character.Name} Teleport Started"); - } - - private static void Moved(ref GameLocationCharacterDefinitions.MovedParameters parameters) - { - Main.Info("Moved"); - } - - private static void Stopped(CharacterAction.InterruptionType interruption) - { - Main.Info("Stopped"); - } - - private static void FallStarted( - GameLocationCharacter character, - int3 source, - int3 destination, - bool featherFall) - { - Main.Info($"{character.Name} Fall Started"); - } - - private static void FallStopped( - GameLocationCharacter character, - int3 source, - int3 destination) - { - Main.Info($"{character.Name} Fall Stopped"); - } - - private static void CrawlStarted(GameLocationCharacter character) - { - Main.Info($"{character.Name} Crawl Started"); - } - - private static void BurrowStarted(GameLocationCharacter character) - { - Main.Info($"{character.Name} Burrow Started"); - } - - private static void BurrowEnded(GameLocationCharacter character) - { - Main.Info($"{character.Name} Burrow Ended"); - } - - private static void JumpStarted( - int3 source, - int3 destination, - LocationDefinitions.Orientation orientation, - bool useMomentum, - bool dragonJump, - bool buletteLeap) - { - Main.Info("Jump Started"); - } - - private static void JumpFinished( - GameLocationCharacter character, - int3 source, - int3 destination, - bool jumpFailed) - { - Main.Info($"{character.Name} Jump Finished"); - } - - private static void VaultStarted( - int3 source, - int3 destination, - LocationDefinitions.Orientation orientation, - float distance, - float duration) - { - Main.Info("Vault Started"); - } - - private static void VaultFinished(int3 source, int3 destination) - { - Main.Info("Vault Finished"); - } - - private static void ClimbStarted( - GameLocationCharacter character, - int3 source, - int3 destination, - LocationDefinitions.Orientation orientation, - float climbingDirection, - bool lastMove, - bool fastClimb) - { - Main.Info($"{character.Name} Climb Started"); - } - - private static void ClimbFinished( - GameLocationCharacter character, - int3 source, - int3 destination, - bool easyClimb) - { - Main.Info($"{character.Name} Climb Finished"); - } - - private static void ChangeSurfaceStarted( - GameLocationCharacter character, - int3 destinationPosition, - LocationDefinitions.Orientation destinationOrientation, - CellFlags.Side destinationSide, - RuleDefinitions.MoveMode moveMode, - ActionDefinitions.MoveStance moveStance, - bool difficultTerrain, - bool lastMove) - { - Main.Info($"{character.Name} Change Surface Started"); - } - - private static void AttackStart( - GameLocationCharacter attacker, - GameLocationCharacter defender, - RuleDefinitions.RollOutcome outcome, - CharacterActionParams actionParams, - RulesetAttackMode attackMode, - ActionModifier attackModifier) - { - Main.Info($"{attacker.Name},{defender.Name} Attack Start"); - - //PATCH: support for `IOnAttackHitEffect` - calls before attack handlers - var character = attacker.RulesetCharacter; - - if (character == null) - { - return; - } - - var features = character.GetSubFeaturesByType(); - - foreach (var effect in features) - { - effect.BeforeOnAttackHit(attacker, defender, outcome, actionParams, attackMode, attackModifier); - } - } - - private static void AttackImpactStart( - GameLocationCharacter attacker, - GameLocationCharacter defender, - RuleDefinitions.RollOutcome outcome, - CharacterActionParams actionParams, - RulesetAttackMode attackMode, - ActionModifier attackModifier) - { - Main.Info($"{attacker.Name},{defender.Name}Attack Impact Start"); - - //PATCH: support for `IOnAttackHitEffect` - calls after attack handlers - var character = attacker.RulesetCharacter; - - if (character == null) - { - return; - } - - var features = character.GetSubFeaturesByType(); - - foreach (var effect in features) - { - effect.AfterOnAttackHit(attacker, defender, outcome, actionParams, attackMode, attackModifier); - } - } - - private static void DeflectAttackStart( - GameLocationCharacter blocker, - GameLocationCharacter attacker, - bool isMonkDeflectMissile) - { - Main.Info($"{blocker.Name},{attacker.Name} Deflect Attack Start"); - } - - private static void ManipulateStart( - GameLocationCharacter character, - AnimationDefinitions.ManipulationType animation) - { - Main.Info($"{character.Name} Manipulate Start"); - } - - private static void ManipulateEnd(GameLocationCharacter character) - { - Main.Info($"{character.Name} Manipulate End"); - } - - private static void ShoveStart( - GameLocationCharacter attacker, - GameLocationCharacter target, - bool success) - { - Main.Info($"{attacker.Name},{target.Name} Shove Start"); - } - - private static void CastingStart( - ref ActionDefinitions.MagicEffectCastData magicEffectCastData) - { - Main.Info("Casting Start"); - } - - private static void HitStart(GameLocationCharacter character) - { - Main.Info($"{character.Name} Hit Start"); - } - - private static void PathFailed(GameLocationCharacter character) - { - Main.Info($"{character.Name} Path Failed"); - } - - private static void DialogStarted( - GameLocationCharacter character, - NarrativeSequence narrativeSequence) - { - Main.Info($"{character.Name} Dialog Started"); - } - - private static void DialogEnded( - GameLocationCharacter character, - NarrativeSequence narrativeSequence) - { - Main.Info($"{character.Name} Dialog Ended"); - } - - private static void DialogChoiceStarted(GameLocationCharacter character) - { - Main.Info($"{character.Name} Dialog Choice Started"); - } - - private static void DialogChoiceEnded(GameLocationCharacter character) - { - Main.Info($"{character.Name} Dialog Choice Ended"); - } - - private static void SpeechStarted( - ref GameLocationCharacterDefinitions.SpeechStartedParameters parameters) - { - Main.Info("Speech Started"); - } - - private static void SpeechEnded(GameLocationCharacter character, bool forceStop) - { - Main.Info($"{character.Name} Speech Ended"); - } - - private static void ListenStarted( - GameLocationCharacter character, - GameLocationCharacter speaker, - bool lookAtOverriden, - bool facialExpressionOverriden) - { - Main.Info($"{character.Name} Listen Started"); - } - - private static void ListenEnded( - GameLocationCharacter character, - GameLocationCharacter speaker) - { - Main.Info($"{character.Name} Listen Ended"); - } - - private static void TextFeedbackRequested( - GameLocationCharacter character, - string colorStyle, - string text) - { - Main.Info($"{character.Name} Text Feedback Requested"); - } - - private static void InGameDialogLineRequested( - GameLocationCharacter character, - string line, - float duration, - bool banterPoolElement, - bool spoken) - { - Main.Info($"{character.Name} In Game Dialog Line Requested"); - } - - private static void AlreadySuccessful(GameLocationCharacter character) - { - Main.Info($"{character.Name} Already Successful"); - } - - private static void AlreadyFailed(GameLocationCharacter character) - { - Main.Info($"{character.Name} Already Failed"); - } - - private static void ProneStatusChanged(GameLocationCharacter character) - { - Main.Info($"{character.Name} Prone Status Changed"); - } - - private static void IsAngryStatusChanged(GameLocationCharacter character, bool status) - { - Main.Info($"{character.Name} IsAngry Status Changed"); - } - - private static void UsedTacticalMovesChanged(GameLocationCharacter character) - { - Main.Info($"{character.Name} Used Tactical Moves Changed"); - } - - private static void CurrentMonsterAttackChanged( - GameLocationCharacter character, - MonsterAttackDefinition monsterAttackDefinition, - Action graphicsRefreshedCallback) - { - Main.Info($"{character.Name} Current Monster Attack Changed"); - } - - private static void DissolveStarted(GameLocationCharacter character) - { - Main.Info($"{character.Name} Dissolve Started"); - } - - // - // RulesetCharacter - // - - private static void ConditionAdded(RulesetActor character, RulesetCondition addedActiveCondition) - { - Main.Info("ConditionAdded"); - } - - private static void ConditionRemoved(RulesetActor character, RulesetCondition removedActiveCondition) - { - Main.Info("ConditionRemoved"); - } - - private static void ConditionRemovedForVisual( - RulesetActor character, - RulesetCondition removedActiveCondition, - bool showGraphics = true) - { - Main.Info("ConditionRemovedForVisual"); - } - - private static void ConditionOccurenceReached(RulesetActor character, RulesetCondition removedActiveCondition) - { - Main.Info("ConditionOccurenceReached"); - } - - private static void ConditionSaveRerollRequested(RulesetActor character, RulesetCondition activeCondition, - RuleDefinitions.AdvantageType advantageType, bool removeOnSuccess, out bool success) - { - Main.Info("ConditionSaveRerollRequested"); - } - - private static void ImmuneToSpell(RulesetActor character, SpellDefinition spellDefinition) - { - Main.Info("ImmuneToSpell"); - } - - private static void ImmuneToSpellLevel(RulesetActor character, SpellDefinition spellDefinition, int maxSpellLevel) - { - Main.Info("ImmuneToSpellLevel"); - } - - private static void ImmuneToDamage(RulesetActor character, string damageType, bool silent) - { - Main.Info("ImmuneToDamage"); - } - - private static void DamageAltered( - RulesetActor character, - string damageType, - RuleDefinitions.DamageAffinityType damageAffinityType, - int flatDamageReduction, - bool silent) - { - Main.Info("DamageAltered"); - } - - private static void ImmuneToCondition(RulesetActor character, string conditionName, ulong sourceGuid) - { - Main.Info("ImmuneToCondition"); - } - - private static void SaveRolled( - RulesetActor character, - string abilityScoreName, - BaseDefinition sourceDefinition, - RuleDefinitions.RollOutcome outcome, - int saveDc, - int totalRoll, - int saveRoll, - int firstRoll, - int secondRoll, - int rollModifier, - List modifierTrends, - List advantageTrends, - bool hasHitVisual) - { - Main.Info("SaveRolled"); - } - - private static void DieRerolled( - RulesetActor character, - RuleDefinitions.DieType dieType, - int previousValue, - int newValue, - string localizationKey) - { - Main.Info("DieRerolled"); - } - - private static void AttackInitiated( - RulesetActor character, - int firstRoll, - int secondRoll, - int modifier, - RuleDefinitions.AdvantageType advantageType) - { - Main.Info("AttackInitiated"); - } - - private static void AttackRolled( - RulesetActor character, - RulesetActor target, - BaseDefinition attackMethod, - RuleDefinitions.RollOutcome outcome, - int attackRoll, - int rawRoll, - int modifier, - List toHitTrends, - List advantageTrends, - bool opportunity = false, - ActionDefinitions.ReactionCounterAttackType reactionCounterAttackType = - ActionDefinitions.ReactionCounterAttackType.None) - { - Main.Info("AttackRolled"); - } - - private static void IncomingAttackRolled( - RulesetActor character, - RulesetActor target, - BaseDefinition attackMethod, - bool rangeAttack, - RuleDefinitions.RollOutcome outcome, - int attackRoll, - int rawRoll, - int modifier, - List toHitTrends, - List advantageTrends, - bool opportunity = false) - { - Main.Info("IncomingAttackRolled"); - } - - private static void AttackAutomaticHit(RulesetActor character, RulesetActor target, BaseDefinition attackMethod) - { - Main.Info("AttackAutomaticHit"); - } - - private static void AttackAutomaticCritical(RulesetActor target) - { - Main.Info("AttackAutomaticCritical"); - } - - private static void DamageFormsTriggered(RulesetActor character, List damageInfos) - { - Main.Info("DamageFormsTriggered"); - } - - private static void HealingFormsTriggered(RulesetActor character, List healingInfos) - { - Main.Info("HealingFormsTriggered"); - } - - private static void IncomingDamageNotified( - RulesetActor character, - RuleDefinitions.EffectSourceType damageType, - BaseDefinition attackVectorDefinition) - { - Main.Info("IncomingDamageNotified"); - } - - private static void AbilityScoreIncreased( - RulesetActor character, - string abilityScore, - int valueIncrease, - int maxIncrease) - { - Main.Info("AbilityScoreIncreased"); - } - - private static void DamageHalved(RulesetActor character, FeatureDefinition feature) - { - Main.Info("DamageHalved"); - } - - private static void DamageReduced(RulesetActor character, FeatureDefinition feature, int reductionAmount) - { - Main.Info("DamageReduced"); - } - - private static void ReplacedAbilityScoreForSave( - RulesetActor saver, - FeatureDefinition feature, - string originalAbilityScore, - string replacedAbilityScore) - { - Main.Info("ReplacedAbilityScoreForSave"); - } - - private static void AdditionalSaveDieRolled( - RulesetActor character, - RuleDefinitions.TrendInfo trendInfo) - { - Main.Info("AdditionalSaveDieRolled"); - } - - private static void DamageReceived( - RulesetActor target, - int damage, - string damageType, - ulong sourceGuid, - RollInfo rollInfo) - { - Main.Info("DamageReceived"); - } - - private static void AlterationInflicted( - RulesetActor source, - RulesetActor target, - AlterationForm.Type alterationType) - { - Main.Info("AlterationInflicted"); - } - - private static void SpellDissipated( - RulesetActor source, - RulesetActor target, - SpellDefinition spellDefinition, - bool success) - { - Main.Info("SpellDissipated"); - } - - private static void TagRevealed(RulesetActor actor, string revealedTag) - { - Main.Info("TagRevealed"); - } - - private static void ActorReplaced(RulesetActor originalActor, RulesetActor newActor) - { - Main.Info("ActorReplaced"); - } -} -#endif diff --git a/SolastaUnfinishedBusiness/Models/FixesContext.cs b/SolastaUnfinishedBusiness/Models/FixesContext.cs index 5f42f04a4d..88fac47a89 100644 --- a/SolastaUnfinishedBusiness/Models/FixesContext.cs +++ b/SolastaUnfinishedBusiness/Models/FixesContext.cs @@ -945,7 +945,7 @@ public void ModifyAdditionalDamage( // handle rogue cunning strike feature if (rulesetAttacker.TryGetConditionOfCategoryAndType( - TagEffect, CharacterContext.ConditionReduceSneakDice.Name, + TagEffect, Tabletop2024Context.ConditionReduceSneakDice.Name, out var activeCondition)) { var newDiceNumber = Math.Max(damageForm.diceNumber - activeCondition.amount, 0); diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 207c3aa420..2dc5cef55c 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -12,7 +12,10 @@ using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Properties; +using SolastaUnfinishedBusiness.Subclasses; using SolastaUnfinishedBusiness.Validators; +using TA; +using UnityEngine.AddressableAssets; using static ActionDefinitions; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; @@ -187,7 +190,9 @@ internal static class Tabletop2024Context internal static void LateLoad() { BuildBarbarianBrutalStrike(); + BuildRogueCunningStrike(); BuildOneDndGuidanceSubspells(); + LoadMonkHeightenedMetabolism(); SwapOneDndBarkskinSpell(); @@ -218,7 +223,9 @@ internal static void LateLoad() SwitchBarbarianBrutalCritical(); SwitchBarbarianRecklessSameBuffDebuffDuration(); SwitchBarbarianRegainOneRageAtShortRest(); - + SwitchRogueBlindSense(); + SwitchRogueCunningStrike(); + SwitchRogueSteadyAim(); SwitchPersuasionToFighterSkillOptions(); SwitchFighterLevelToIndomitableSavingReroll(); SwitchSorcererInnateSorcery(); @@ -1612,4 +1619,626 @@ internal static void SwitchBarbarianRegainOneRageAtShortRest() } #endregion + + #region Rogue + + private const string FeatSteadyAim = "FeatSteadyAim"; + + private static readonly FeatureDefinitionPower PowerFeatSteadyAim = FeatureDefinitionPowerBuilder + .Create($"Power{FeatSteadyAim}") + .SetGuiPresentation(Category.Feature, Sprites.GetSprite(FeatSteadyAim, Resources.PowerSteadyAim, 256, 128)) + .SetUsesFixed(ActivationTime.BonusAction) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Round) + .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) + .SetEffectForms( + EffectFormBuilder + .Create() + .SetConditionForm( + ConditionDefinitionBuilder + .Create($"Condition{FeatSteadyAim}Advantage") + .SetGuiPresentation(Category.Condition, + ConditionGuided) + .SetPossessive() + .SetSilent(Silent.WhenAddedOrRemoved) + .SetSpecialInterruptions(ConditionInterruption.Attacks) + .AddFeatures( + FeatureDefinitionCombatAffinityBuilder + .Create($"CombatAffinity{FeatSteadyAim}") + .SetGuiPresentation($"Power{FeatSteadyAim}", Category.Feature, + Gui.NoLocalization) + .SetMyAttackAdvantage(AdvantageType.Advantage) + .AddToDB()) + .AddToDB(), + ConditionForm.ConditionOperation.Add) + .Build(), + EffectFormBuilder + .Create() + .SetConditionForm( + ConditionDefinitionBuilder + .Create($"Condition{FeatSteadyAim}Restrained") + .SetGuiPresentation(Category.Condition) + .SetSilent(Silent.WhenAddedOrRemoved) + .AddFeatures(MovementAffinityConditionRestrained) + .AddToDB(), + ConditionForm.ConditionOperation.Add) + .Build()) + .SetParticleEffectParameters(PowerFunctionWandFearCommand) + .SetImpactEffectParameters(new AssetReference()) + .Build()) + .AddCustomSubFeatures( + new ValidatorsValidatePowerUse(c => GameLocationCharacter.GetFromActor(c) is { UsedTacticalMoves: 0 })) + .AddToDB(); + + internal static readonly ConditionDefinition ConditionReduceSneakDice = ConditionDefinitionBuilder + .Create("ConditionReduceSneakDice") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .SetConditionType(ConditionType.Detrimental) + .SetAmountOrigin(ConditionDefinition.OriginOfAmount.Fixed) + .SetSpecialInterruptions(ConditionInterruption.Attacks) + .AddToDB(); + + private static FeatureDefinitionFeatureSet _featureSetRogueCunningStrike; + private static FeatureDefinitionFeatureSet _featureSetRogueDeviousStrike; + + private static void BuildRogueCunningStrike() + { + const string Cunning = "RogueCunningStrike"; + const string Devious = "RogueDeviousStrike"; + + var powerPool = FeatureDefinitionPowerBuilder + .Create($"Power{Cunning}") + .SetGuiPresentation(Category.Feature) + .SetUsesFixed(ActivationTime.NoCost) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Round, 1) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.Individuals) + .Build()) + .AddToDB(); + + // Disarm + + var combatAffinityDisarmed = FeatureDefinitionCombatAffinityBuilder + .Create($"CombatAffinity{Cunning}Disarmed") + .SetGuiPresentation($"Condition{Cunning}Disarmed", Category.Condition, Gui.NoLocalization) + .SetMyAttackAdvantage(AdvantageType.Disadvantage) + .AddToDB(); + + var conditionDisarmed = ConditionDefinitionBuilder + .Create($"Condition{Cunning}Disarmed") + .SetGuiPresentation(Category.Condition, Gui.EmptyContent, ConditionBaned) + .SetConditionType(ConditionType.Detrimental) + .AddFeatures(combatAffinityDisarmed) + .AddToDB(); + + var powerDisarm = FeatureDefinitionPowerSharedPoolBuilder + .Create($"Power{Cunning}Disarm") + .SetGuiPresentation(Category.Feature) + .SetSharedPool(ActivationTime.NoCost, powerPool) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Round, 1) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) + .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, + EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetConditionForm(conditionDisarmed, ConditionForm.ConditionOperation.Add) + .Build()) + .Build()) + .AddCustomSubFeatures(ModifyPowerVisibility.Hidden, PowerUsesSneakDiceTooltipModifier.Instance) + .AddToDB(); + + // Poison + + var powerPoison = FeatureDefinitionPowerSharedPoolBuilder + .Create($"Power{Cunning}Poison") + .SetGuiPresentation(Category.Feature) + .SetSharedPool(ActivationTime.NoCost, powerPool) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) + .SetSavingThrowData(false, AttributeDefinitions.Constitution, false, + EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates, TurnOccurenceType.EndOfTurn, true) + .SetConditionForm( + ConditionDefinitions.ConditionPoisoned, ConditionForm.ConditionOperation.Add) + .Build()) + .Build()) + .AddCustomSubFeatures(ModifyPowerVisibility.Hidden, PowerUsesSneakDiceTooltipModifier.Instance) + .AddToDB(); + + // Trip + + var powerTrip = FeatureDefinitionPowerSharedPoolBuilder + .Create($"Power{Cunning}Trip") + .SetGuiPresentation(Category.Feature) + .SetSharedPool(ActivationTime.NoCost, powerPool) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) + .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, + EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetMotionForm(MotionForm.MotionType.FallProne) + .Build()) + .Build()) + .AddCustomSubFeatures(ModifyPowerVisibility.Hidden, PowerUsesSneakDiceTooltipModifier.Instance) + .AddToDB(); + + // Withdraw + + var powerWithdraw = FeatureDefinitionPowerSharedPoolBuilder + .Create($"Power{Cunning}Withdraw") + .SetGuiPresentation(Category.Feature) + .SetSharedPool(ActivationTime.NoCost, powerPool) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Round) + .SetTargetingData(Side.Ally, RangeType.Distance, 12, TargetType.Position) + .Build()) + .AddCustomSubFeatures( + ModifyPowerVisibility.Hidden, + PowerUsesSneakDiceTooltipModifier.Instance, + new CustomBehaviorWithdraw()) + .AddToDB(); + + // + // DEVIOUS STRIKES - LEVEL 14 + // + + // Dazed + + var actionAffinityDazedOnlyMovement = FeatureDefinitionActionAffinityBuilder + .Create($"ActionAffinity{Devious}DazedOnlyMovement") + .SetGuiPresentationNoContent(true) + .SetAllowedActionTypes(false, false, freeOnce: false, reaction: false, noCost: false) + .AddToDB(); + + var conditionDazedOnlyMovement = ConditionDefinitionBuilder + .Create($"Condition{Devious}DazedOnlyMovement") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .SetConditionType(ConditionType.Detrimental) + .AddFeatures(actionAffinityDazedOnlyMovement) + .AddToDB(); + + var actionAffinityDazed = FeatureDefinitionActionAffinityBuilder + .Create($"ActionAffinity{Devious}Dazed") + .SetGuiPresentationNoContent(true) + .SetAllowedActionTypes(reaction: false, bonus: false) + .AddToDB(); + + var conditionDazed = ConditionDefinitionBuilder + .Create(ConditionDazzled, $"Condition{Devious}Dazed") + .SetGuiPresentation(Category.Condition, ConditionDazzled) + .SetConditionType(ConditionType.Detrimental) + .SetFeatures(actionAffinityDazed) + .AddCustomSubFeatures(new ActionFinishedByMeDazed(conditionDazedOnlyMovement)) + .AddToDB(); + + var powerDaze = FeatureDefinitionPowerSharedPoolBuilder + .Create($"Power{Devious}Daze") + .SetGuiPresentation(Category.Feature) + .SetSharedPool(ActivationTime.NoCost, powerPool, 2) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Round, 1) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) + .SetSavingThrowData(false, AttributeDefinitions.Constitution, false, + EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetConditionForm(conditionDazed, ConditionForm.ConditionOperation.Add) + .Build()) + .Build()) + .AddCustomSubFeatures(ModifyPowerVisibility.Hidden, PowerUsesSneakDiceTooltipModifier.Instance) + .AddToDB(); + + // Knock Out + + var conditionKnockOut = ConditionDefinitionBuilder + .Create(ConditionDefinitions.ConditionIncapacitated, $"Condition{Devious}KnockOut") + .SetGuiPresentation(Category.Condition, Gui.EmptyContent, ConditionDefinitions.ConditionAsleep) + .SetParentCondition(ConditionDefinitions.ConditionIncapacitated) + .SetFeatures() + .SetSpecialInterruptions(ConditionInterruption.Damaged) + .AddToDB(); + + var powerKnockOut = FeatureDefinitionPowerSharedPoolBuilder + .Create($"Power{Devious}KnockOut") + .SetGuiPresentation(Category.Feature) + .SetSharedPool(ActivationTime.NoCost, powerPool, 5) + .SetShowCasting(false) + .AddCustomSubFeatures(ModifyPowerVisibility.Hidden, PowerUsesSneakDiceTooltipModifier.Instance) + .AddToDB(); + + var powerKnockOutApply = FeatureDefinitionPowerBuilder + .Create($"Power{Devious}KnockOutApply") + .SetGuiPresentation($"Power{Devious}KnockOut", Category.Feature, hidden: true) + .SetUsesFixed(ActivationTime.NoCost) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) + .SetSavingThrowData(false, AttributeDefinitions.Constitution, false, + EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates, TurnOccurenceType.EndOfTurn, true) + .SetConditionForm(conditionKnockOut, ConditionForm.ConditionOperation.Add) + .Build()) + .Build()) + .AddToDB(); + + // Obscure + + var powerObscure = FeatureDefinitionPowerSharedPoolBuilder + .Create($"Power{Devious}Obscure") + .SetGuiPresentation(Category.Feature) + .SetSharedPool(ActivationTime.NoCost, powerPool, 3) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Round, 1) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) + .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, + EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetConditionForm(ConditionDefinitions.ConditionBlinded, + ConditionForm.ConditionOperation.Add) + .Build()) + .Build()) + .AddCustomSubFeatures(ModifyPowerVisibility.Hidden, PowerUsesSneakDiceTooltipModifier.Instance) + .AddToDB(); + + // MAIN + + powerPool.AddCustomSubFeatures( + ModifyPowerVisibility.Hidden, + new CustomBehaviorCunningStrike(powerPool, powerKnockOut, powerKnockOutApply, powerWithdraw)); + + PowerBundle.RegisterPowerBundle(powerPool, true, + powerDisarm, powerPoison, powerTrip, powerWithdraw, powerDaze, powerKnockOut, powerObscure); + + var actionAffinityToggle = FeatureDefinitionActionAffinityBuilder + .Create(ActionAffinitySorcererMetamagicToggle, "ActionAffinityCunningStrikeToggle") + .SetGuiPresentationNoContent(true) + .SetAuthorizedActions((Id)ExtraActionId.CunningStrikeToggle) + .AddToDB(); + + _featureSetRogueCunningStrike = FeatureDefinitionFeatureSetBuilder + .Create($"FeatureSet{Cunning}") + .SetGuiPresentation($"Power{Cunning}", Category.Feature) + .AddFeatureSet(powerPool, actionAffinityToggle, powerDisarm, powerPoison, powerTrip, powerWithdraw) + .AddToDB(); + + _featureSetRogueDeviousStrike = FeatureDefinitionFeatureSetBuilder + .Create($"FeatureSet{Devious}") + .SetGuiPresentation($"Power{Devious}", Category.Feature) + .AddFeatureSet(powerDaze, powerKnockOut, powerObscure) + .AddToDB(); + } + + internal static void SwitchRogueSteadyAim() + { + if (Main.Settings.EnableRogueSteadyAim) + { + Rogue.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(PowerFeatSteadyAim, 3)); + } + else + { + Rogue.FeatureUnlocks.RemoveAll(x => + x.level == 3 && x.FeatureDefinition == PowerFeatSteadyAim); + } + + Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static void SwitchRogueBlindSense() + { + Rogue.FeatureUnlocks.RemoveAll(x => + x.level == 3 && x.FeatureDefinition == FeatureDefinitionSenses.SenseRogueBlindsense); + + if (!Main.Settings.RemoveRogueBlindSense) + { + Rogue.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(FeatureDefinitionSenses.SenseRogueBlindsense, 14)); + } + + Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + internal static bool IsSneakAttackValid( + ActionModifier attackModifier, + GameLocationCharacter attacker, + GameLocationCharacter defender) + { + // only trigger if it hasn't used sneak attack yet + if (!attacker.OncePerTurnIsValid("AdditionalDamageRogueSneakAttack") || + !attacker.OncePerTurnIsValid("AdditionalDamageRoguishHoodlumNonFinesseSneakAttack") || + !attacker.OncePerTurnIsValid("AdditionalDamageRoguishDuelistDaringDuel") || + !attacker.OncePerTurnIsValid("AdditionalDamageRoguishUmbralStalkerDeadlyShadows")) + { + return false; + } + + var advantageType = ComputeAdvantage(attackModifier.AttackAdvantageTrends); + + return advantageType switch + { + AdvantageType.Advantage => true, + AdvantageType.Disadvantage => false, + _ => + // it's an attack with a nearby enemy (standard sneak attack) + ServiceRepository.GetService() + .IsConsciousCharacterOfSideNextToCharacter(defender, attacker.Side, attacker) || + // it's a Duelist and target is dueling with him + RoguishDuelist.TargetIsDuelingWithRoguishDuelist(attacker, defender, advantageType) || + // it's an Umbral Stalker and source or target are in dim light or darkness + RoguishUmbralStalker.SourceOrTargetAreNotBright(attacker, defender, advantageType) + }; + } + + private sealed class CustomBehaviorCunningStrike( + FeatureDefinitionPower powerRogueCunningStrike, + FeatureDefinitionPower powerKnockOut, + FeatureDefinitionPower powerKnockOutApply, + FeatureDefinitionPower powerWithdraw) + : IPhysicalAttackBeforeHitConfirmedOnEnemy, IPhysicalAttackFinishedByMe + { + private FeatureDefinitionPower _selectedPower; + + public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( + GameLocationBattleManager battleManager, + GameLocationCharacter attacker, + GameLocationCharacter defender, + ActionModifier actionModifier, + RulesetAttackMode attackMode, + bool rangedAttack, + AdvantageType advantageType, + List actualEffectForms, + bool firstTarget, + bool criticalHit) + { + _selectedPower = null; + + var rulesetAttacker = attacker.RulesetCharacter; + + if (!rulesetAttacker.IsToggleEnabled((Id)ExtraActionId.CunningStrikeToggle) || + !IsSneakAttackValid(actionModifier, attacker, defender)) + { + yield break; + } + + var usablePower = PowerProvider.Get(powerRogueCunningStrike, rulesetAttacker); + + yield return attacker.MyReactToSpendPowerBundle( + usablePower, + [defender], + attacker, + powerRogueCunningStrike.Name, + reactionValidated: ReactionValidated, + battleManager: battleManager); + + yield break; + + void ReactionValidated(ReactionRequestSpendBundlePower reactionRequest) + { + // determine selected power to collect cost + var option = reactionRequest.SelectedSubOption; + var subPowers = powerRogueCunningStrike.GetBundle()?.SubPowers; + + if (subPowers == null) + { + return; + } + + _selectedPower = subPowers[option]; + + // inflict condition passing power cost on amount to be deducted later on from sneak dice + rulesetAttacker.InflictCondition( + ConditionReduceSneakDice.Name, + DurationType.Round, + 0, + TurnOccurenceType.EndOfTurn, + AttributeDefinitions.TagEffect, + rulesetAttacker.guid, + rulesetAttacker.CurrentFaction.Name, + 1, + ConditionReduceSneakDice.Name, + _selectedPower.CostPerUse, + 0, + 0); + } + } + + // handle Knock Out exception which should apply condition after attack + public IEnumerator OnPhysicalAttackFinishedByMe( + GameLocationBattleManager battleManager, + CharacterAction action, + GameLocationCharacter attacker, + GameLocationCharacter defender, + RulesetAttackMode attackMode, + RollOutcome rollOutcome, + int damageAmount) + { + if (_selectedPower == powerKnockOut) + { + yield return HandleKnockOut(attacker, defender); + } + else if (_selectedPower == powerWithdraw) + { + yield return HandleWithdraw(action, attacker); + } + + _selectedPower = null; + } + + private IEnumerator HandleWithdraw(CharacterAction action, GameLocationCharacter attacker) + { + yield return GameUiContext.SelectPosition(action, powerWithdraw); + + var rulesetAttacker = attacker.RulesetCharacter; + var position = action.ActionParams.Positions[0]; + var distance = int3.Distance(attacker.LocationPosition, position); + + attacker.UsedTacticalMoves -= (int)distance; + + if (attacker.UsedTacticalMoves < 0) + { + attacker.UsedTacticalMoves = 0; + } + + attacker.UsedTacticalMovesChanged?.Invoke(attacker); + + rulesetAttacker.InflictCondition( + RuleDefinitions.ConditionDisengaging, + DurationType.Round, + 0, + TurnOccurenceType.EndOfTurn, + // all disengaging in game is set under TagCombat (why?) + AttributeDefinitions.TagCombat, + rulesetAttacker.Guid, + rulesetAttacker.CurrentFaction.Name, + 1, + RuleDefinitions.ConditionDisengaging, + 0, + 0, + 0); + + attacker.MyExecuteActionTacticalMove(position); + } + + private IEnumerator HandleKnockOut(GameLocationCharacter attacker, GameLocationCharacter defender) + { + var rulesetDefender = defender.RulesetActor; + + if (rulesetDefender is not { IsDeadOrDyingOrUnconscious: false }) + { + yield break; + } + + var rulesetAttacker = attacker.RulesetCharacter; + var usablePower = PowerProvider.Get(powerKnockOutApply, rulesetAttacker); + + attacker.MyExecuteActionSpendPower(usablePower, defender); + } + } + + private sealed class ActionFinishedByMeDazed( + // ReSharper disable once SuggestBaseTypeForParameterInConstructor + ConditionDefinition conditionDazedOnlyMovement) : IActionFinishedByMe + { + public IEnumerator OnActionFinishedByMe(CharacterAction characterAction) + { + if (characterAction is not (CharacterActionMove or CharacterActionDash)) + { + yield break; + } + + var rulesetCharacter = characterAction.ActingCharacter.RulesetCharacter; + + rulesetCharacter.InflictCondition( + conditionDazedOnlyMovement.Name, + DurationType.Round, + 0, + TurnOccurenceType.EndOfTurn, + AttributeDefinitions.TagEffect, + rulesetCharacter.guid, + rulesetCharacter.CurrentFaction.Name, + 1, + conditionDazedOnlyMovement.Name, + 0, + 0, + 0); + } + } + + private sealed class CustomBehaviorWithdraw : IFilterTargetingPosition, IIgnoreInvisibilityInterruptionCheck + { + public IEnumerator ComputeValidPositions(CursorLocationSelectPosition cursorLocationSelectPosition) + { + cursorLocationSelectPosition.validPositionsCache.Clear(); + + var actingCharacter = cursorLocationSelectPosition.ActionParams.ActingCharacter; + var positioningService = ServiceRepository.GetService(); + var visibilityService = ServiceRepository.GetService(); + + var halfMaxTacticalMoves = (actingCharacter.MaxTacticalMoves + 1) / 2; // half-rounded up + var boxInt = new BoxInt(actingCharacter.LocationPosition, int3.zero, int3.zero); + + boxInt.Inflate(halfMaxTacticalMoves, 0, halfMaxTacticalMoves); + + foreach (var position in boxInt.EnumerateAllPositionsWithin()) + { + if (!visibilityService.MyIsCellPerceivedByCharacter(position, actingCharacter) || + !positioningService.CanPlaceCharacter( + actingCharacter, position, CellHelpers.PlacementMode.Station) || + !positioningService.CanCharacterStayAtPosition_Floor( + actingCharacter, position, onlyCheckCellsWithRealGround: true)) + { + continue; + } + + cursorLocationSelectPosition.validPositionsCache.Add(position); + + if (cursorLocationSelectPosition.stopwatch.Elapsed.TotalMilliseconds > 0.5) + { + yield return null; + } + } + } + } + + internal static void SwitchRogueCunningStrike() + { + if (Main.Settings.EnableRogueCunningStrike) + { + Rogue.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(_featureSetRogueCunningStrike, 5)); + Rogue.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(_featureSetRogueDeviousStrike, 14)); + } + else + { + Rogue.FeatureUnlocks.RemoveAll(x => x.level == 5 && x.FeatureDefinition == _featureSetRogueCunningStrike); + Rogue.FeatureUnlocks.RemoveAll(x => x.level == 14 && x.FeatureDefinition == _featureSetRogueDeviousStrike); + } + + Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + #endregion } diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishDuelist.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishDuelist.cs index 9139d82791..d5492e2adc 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishDuelist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishDuelist.cs @@ -327,7 +327,7 @@ public IEnumerator OnPhysicalAttackInitiatedByMe( ActionModifier attackModifier, RulesetAttackMode attackMode) { - var isSneakAttackValid = CharacterContext.IsSneakAttackValid(attackModifier, attacker, defender); + var isSneakAttackValid = Tabletop2024Context.IsSneakAttackValid(attackModifier, attacker, defender); if (isSneakAttackValid) { diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs index b853de06be..332d160353 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs @@ -235,7 +235,7 @@ public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( bool firstTarget, bool criticalHit) { - if (!CharacterContext.IsSneakAttackValid(actionModifier, attacker, defender)) + if (!Tabletop2024Context.IsSneakAttackValid(actionModifier, attacker, defender)) { yield break; } diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs index 86e9718799..580cb1c6ee 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs @@ -307,7 +307,7 @@ public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( bool firstTarget, bool criticalHit) { - if (!CharacterContext.IsSneakAttackValid(actionModifier, attacker, defender)) + if (!Tabletop2024Context.IsSneakAttackValid(actionModifier, attacker, defender)) { yield break; } @@ -504,7 +504,7 @@ public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( bool firstTarget, bool criticalHit) { - if (!CharacterContext.IsSneakAttackValid(actionModifier, attacker, defender)) + if (!Tabletop2024Context.IsSneakAttackValid(actionModifier, attacker, defender)) { yield break; } diff --git a/SolastaUnfinishedBusiness/Validators/ValidatorsCharacter.cs b/SolastaUnfinishedBusiness/Validators/ValidatorsCharacter.cs index 7e9cc3318c..95b02991dd 100644 --- a/SolastaUnfinishedBusiness/Validators/ValidatorsCharacter.cs +++ b/SolastaUnfinishedBusiness/Validators/ValidatorsCharacter.cs @@ -317,7 +317,7 @@ internal static void RegisterWeaponTypeUsed( [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static bool IsMonkWeapon(this RulesetActor character, WeaponDescription weaponDescription) { - var monkWeaponSpecializations = character.GetSubFeaturesByType(); + var monkWeaponSpecializations = character.GetSubFeaturesByType(); return weaponDescription == null || weaponDescription.IsMonkWeaponOrUnarmed() || From c5732c2c5e396de9837b000c648efa7ac9fd9ec4 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 11:05:36 -0800 Subject: [PATCH 48/85] move AiContext now AiHelpers / ResourceLocatorContext now ResourceLocatorHelper off models into Api/Helpers --- .../AiContext.cs => Api/Helpers/AiHelpers.cs} | 5 ++--- .../Helpers/ResourceLocatorHelper.cs} | 5 ++--- SolastaUnfinishedBusiness/Models/BootContext.cs | 3 ++- .../Models/GrappleContext.cs | 4 ++-- .../Models/SrdAndHouseRulesContext.cs | 5 +++-- .../Activities/ActivitiesBreakFreePatcher.cs | 13 ++++++------- .../Patches/CharacterActionBreakFreePatcher.cs | 13 ++++++------- .../Patches/CharacterActionPanelPatcher.cs | 4 ++-- .../Spells/SpellBuildersLevel01.cs | 16 ++++++++-------- .../Spells/SpellBuildersLevel02.cs | 14 +++++++------- .../Spells/SpellBuildersLevel06.cs | 6 +++--- .../Subclasses/OathOfAncients.cs | 6 +++--- 12 files changed, 46 insertions(+), 48 deletions(-) rename SolastaUnfinishedBusiness/{Models/AiContext.cs => Api/Helpers/AiHelpers.cs} (98%) rename SolastaUnfinishedBusiness/{Models/ResourceLocatorContext.cs => Api/Helpers/ResourceLocatorHelper.cs} (95%) diff --git a/SolastaUnfinishedBusiness/Models/AiContext.cs b/SolastaUnfinishedBusiness/Api/Helpers/AiHelpers.cs similarity index 98% rename from SolastaUnfinishedBusiness/Models/AiContext.cs rename to SolastaUnfinishedBusiness/Api/Helpers/AiHelpers.cs index ebad9f5dab..3c81ff08a5 100644 --- a/SolastaUnfinishedBusiness/Models/AiContext.cs +++ b/SolastaUnfinishedBusiness/Api/Helpers/AiHelpers.cs @@ -1,7 +1,6 @@ using System; using System.Linq; using JetBrains.Annotations; -using SolastaUnfinishedBusiness.Api; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.LanguageExtensions; using SolastaUnfinishedBusiness.Builders; @@ -12,9 +11,9 @@ using Object = UnityEngine.Object; using Random = TA.AI.Considerations.Random; -namespace SolastaUnfinishedBusiness.Models; +namespace SolastaUnfinishedBusiness.Api.Helpers; -internal static class AiContext +internal static class AiHelpers { internal static ActivityScorerDefinition CreateActivityScorer( DecisionDefinition baseDecision, string name, diff --git a/SolastaUnfinishedBusiness/Models/ResourceLocatorContext.cs b/SolastaUnfinishedBusiness/Api/Helpers/ResourceLocatorHelper.cs similarity index 95% rename from SolastaUnfinishedBusiness/Models/ResourceLocatorContext.cs rename to SolastaUnfinishedBusiness/Api/Helpers/ResourceLocatorHelper.cs index 4cc7065f80..a29aaea8c9 100644 --- a/SolastaUnfinishedBusiness/Models/ResourceLocatorContext.cs +++ b/SolastaUnfinishedBusiness/Api/Helpers/ResourceLocatorHelper.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using JetBrains.Annotations; -using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.CustomUI; using UnityEngine; using UnityEngine.AddressableAssets; @@ -9,9 +8,9 @@ using UnityEngine.ResourceManagement.ResourceLocations; using UnityEngine.ResourceManagement.ResourceProviders; -namespace SolastaUnfinishedBusiness.Models; +namespace SolastaUnfinishedBusiness.Api.Helpers; -internal static class ResourceLocatorContext +internal static class ResourceLocatorHelper { internal static void Load() { diff --git a/SolastaUnfinishedBusiness/Models/BootContext.cs b/SolastaUnfinishedBusiness/Models/BootContext.cs index dad13ce171..5eb976f8bd 100644 --- a/SolastaUnfinishedBusiness/Models/BootContext.cs +++ b/SolastaUnfinishedBusiness/Models/BootContext.cs @@ -2,6 +2,7 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SolastaUnfinishedBusiness.Api; +using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Behaviors.Specific; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Classes; @@ -28,7 +29,7 @@ internal static void Startup() // Load Portraits, Translations and Resources Locator after TranslatorContext.Load(); - ResourceLocatorContext.Load(); + ResourceLocatorHelper.Load(); // Fixes spell slots and progressions early on FixesContext.Load(); diff --git a/SolastaUnfinishedBusiness/Models/GrappleContext.cs b/SolastaUnfinishedBusiness/Models/GrappleContext.cs index 2163b7fef4..fce1b95921 100644 --- a/SolastaUnfinishedBusiness/Models/GrappleContext.cs +++ b/SolastaUnfinishedBusiness/Models/GrappleContext.cs @@ -118,13 +118,13 @@ internal static void LateLoad() (SituationalContext)ExtraSituationalContext.IsConditionSource; var battlePackage = - AiContext.BuildDecisionPackageBreakFree(ConditionGrappleTargetName, AiContext.RandomType.RandomMediumLow); + AiHelpers.BuildDecisionPackageBreakFree(ConditionGrappleTargetName, AiHelpers.RandomType.RandomMediumLow); var conditionGrappleTarget = ConditionDefinitionBuilder .Create(ConditionGrappleTargetName) .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionHindered) .SetConditionType(ConditionType.Detrimental) - .SetFixedAmount((int)AiContext.BreakFreeType.DoStrengthOrDexterityContestCheckAgainstStrengthAthletics) + .SetFixedAmount((int)AiHelpers.BreakFreeType.DoStrengthOrDexterityContestCheckAgainstStrengthAthletics) .SetBrain(battlePackage, true) .SetFeatures( ActionAffinityGrappled, diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index 7ac6936446..7485d9b434 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -2,6 +2,7 @@ using System.Linq; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; +using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Api.LanguageExtensions; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; @@ -36,7 +37,7 @@ internal static class SrdAndHouseRulesContext ]; private static readonly DecisionPackageDefinition DecisionPackageRestrained = - AiContext.BuildDecisionPackageBreakFree(ConditionRestrainedByEntangle.Name); + AiHelpers.BuildDecisionPackageBreakFree(ConditionRestrainedByEntangle.Name); private static SpellDefinition ConjureElementalInvisibleStalker { get; set; } @@ -293,7 +294,7 @@ internal static void SwitchRecurringEffectOnEntangle() Entangle.effectDescription.EffectForms[2].canSaveToCancel = false; ConditionRestrainedByEntangle.Features.Add(FeatureDefinitionActionAffinitys.ActionAffinityGrappled); ConditionRestrainedByEntangle.amountOrigin = ConditionDefinition.OriginOfAmount.Fixed; - ConditionRestrainedByEntangle.baseAmount = (int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC; + ConditionRestrainedByEntangle.baseAmount = (int)AiHelpers.BreakFreeType.DoStrengthCheckAgainstCasterDC; ConditionRestrainedByEntangle.addBehavior = true; ConditionRestrainedByEntangle.battlePackage = DecisionPackageRestrained; } diff --git a/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs index 5dd00b1079..d2cfe474dd 100644 --- a/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs @@ -5,7 +5,6 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Interfaces; -using SolastaUnfinishedBusiness.Models; using TA.AI.Activities; using static RuleDefinitions; @@ -24,7 +23,7 @@ public static IEnumerator Postfix([NotNull] IEnumerator values, AiLocationCharac { var gameLocationCharacter = character.GameLocationCharacter; var rulesetCharacter = gameLocationCharacter.RulesetCharacter; - var restrainingCondition = AiContext.GetRestrainingCondition(rulesetCharacter); + var restrainingCondition = AiHelpers.GetRestrainingCondition(rulesetCharacter); if (restrainingCondition == null) { @@ -36,23 +35,23 @@ public static IEnumerator Postfix([NotNull] IEnumerator values, AiLocationCharac yield break; } - var action = (AiContext.BreakFreeType)restrainingCondition.Amount; + var action = (AiHelpers.BreakFreeType)restrainingCondition.Amount; var success = true; switch (action) { - case AiContext.BreakFreeType.DoNoCheckAndRemoveCondition: + case AiHelpers.BreakFreeType.DoNoCheckAndRemoveCondition: break; - case AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC: + case AiHelpers.BreakFreeType.DoStrengthCheckAgainstCasterDC: yield return RollAttributeCheck(AttributeDefinitions.Strength); break; - case AiContext.BreakFreeType.DoWisdomCheckAgainstCasterDC: + case AiHelpers.BreakFreeType.DoWisdomCheckAgainstCasterDC: yield return RollAttributeCheck(AttributeDefinitions.Wisdom); break; - case AiContext.BreakFreeType.DoStrengthOrDexterityContestCheckAgainstStrengthAthletics: + case AiHelpers.BreakFreeType.DoStrengthOrDexterityContestCheckAgainstStrengthAthletics: var rulesetSource = EffectHelpers.GetCharacterByGuid(restrainingCondition.SourceGuid); var source = GameLocationCharacter.GetFromActor(rulesetSource); var abilityCheckData = new AbilityCheckData diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs index 63f7f8790a..cb3c395c74 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs @@ -5,7 +5,6 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Interfaces; -using SolastaUnfinishedBusiness.Models; using static RuleDefinitions; namespace SolastaUnfinishedBusiness.Patches; @@ -31,7 +30,7 @@ private static IEnumerator Process(CharacterActionBreakFree __instance) { var character = __instance.ActingCharacter; var rulesetCharacter = character.RulesetCharacter; - var restrainingCondition = AiContext.GetRestrainingCondition(rulesetCharacter); + var restrainingCondition = AiHelpers.GetRestrainingCondition(rulesetCharacter); if (restrainingCondition == null) { @@ -39,7 +38,7 @@ private static IEnumerator Process(CharacterActionBreakFree __instance) } var sourceGuid = restrainingCondition.SourceGuid; - var action = (AiContext.BreakFreeType)restrainingCondition.Amount; + var action = (AiHelpers.BreakFreeType)restrainingCondition.Amount; var actionModifier = new ActionModifier(); var checkDC = 10; var success = false; @@ -48,23 +47,23 @@ private static IEnumerator Process(CharacterActionBreakFree __instance) switch (action) { - case AiContext.BreakFreeType.DoNoCheckAndRemoveCondition: + case AiHelpers.BreakFreeType.DoNoCheckAndRemoveCondition: rulesetCharacter.RemoveCondition(restrainingCondition); yield break; - case AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC: + case AiHelpers.BreakFreeType.DoStrengthCheckAgainstCasterDC: { CalculateDC(AttributeDefinitions.Strength); yield return RollAbilityCheck(); break; } - case AiContext.BreakFreeType.DoWisdomCheckAgainstCasterDC: + case AiHelpers.BreakFreeType.DoWisdomCheckAgainstCasterDC: { CalculateDC(AttributeDefinitions.Wisdom); yield return RollAbilityCheck(); break; } - case AiContext.BreakFreeType.DoStrengthOrDexterityContestCheckAgainstStrengthAthletics: + case AiHelpers.BreakFreeType.DoStrengthOrDexterityContestCheckAgainstStrengthAthletics: { var rulesetSource = EffectHelpers.GetCharacterByGuid(sourceGuid); var source = GameLocationCharacter.GetFromActor(rulesetSource); diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionPanelPatcher.cs index fee3c0d45a..49bf3bb2e1 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionPanelPatcher.cs @@ -292,11 +292,11 @@ public static class SelectBreakFreeMode_Patch public static bool Prefix(CharacterActionPanel __instance) { var rulesetCharacter = __instance.GuiCharacter.RulesetCharacter; - var restrainingCondition = AiContext.GetRestrainingCondition(rulesetCharacter); + var restrainingCondition = AiHelpers.GetRestrainingCondition(rulesetCharacter); // if not a modded strength check condition let vanilla handle // this works as so far there is no way an ally should be forced to do a DoWisdomCheckAgainstCasterDC - if (restrainingCondition?.Amount != (int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC) + if (restrainingCondition?.Amount != (int)AiHelpers.BreakFreeType.DoStrengthCheckAgainstCasterDC) { return true; } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index caa5a88690..3070a53757 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -210,14 +210,14 @@ internal static SpellDefinition BuildEnsnaringStrike() { const string NAME = "EnsnaringStrike"; - var battlePackage = AiContext.BuildDecisionPackageBreakFree("ConditionGrappledRestrainedEnsnared"); + var battlePackage = AiHelpers.BuildDecisionPackageBreakFree("ConditionGrappledRestrainedEnsnared"); var conditionEnsnared = ConditionDefinitionBuilder .Create("ConditionGrappledRestrainedEnsnared") .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionRestrained) .SetConditionType(ConditionType.Detrimental) .SetParentCondition(ConditionDefinitions.ConditionRestrained) - .SetFixedAmount((int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC) + .SetFixedAmount((int)AiHelpers.BreakFreeType.DoStrengthCheckAgainstCasterDC) .SetBrain(battlePackage, true) .SetFeatures(ActionAffinityGrappled) .CopyParticleReferences(Entangle) @@ -449,12 +449,12 @@ internal static SpellDefinition BuildWrathfulSmite() { const string NAME = "WrathfulSmite"; - var battlePackage = AiContext.BuildDecisionPackageBreakFree($"Condition{NAME}Enemy"); + var battlePackage = AiHelpers.BuildDecisionPackageBreakFree($"Condition{NAME}Enemy"); var conditionEnemy = ConditionDefinitionBuilder .Create(ConditionDefinitions.ConditionFrightened, $"Condition{NAME}Enemy") .SetParentCondition(ConditionDefinitions.ConditionFrightened) - .SetFixedAmount((int)AiContext.BreakFreeType.DoWisdomCheckAgainstCasterDC) + .SetFixedAmount((int)AiHelpers.BreakFreeType.DoWisdomCheckAgainstCasterDC) .SetBrain(battlePackage, true) .SetFeatures(ActionAffinityGrappled) .AddToDB(); @@ -645,14 +645,14 @@ internal static SpellDefinition BuildVileBrew() { const string NAME = "VileBrew"; - var battlePackage = AiContext.BuildDecisionPackageBreakFree( - $"Condition{NAME}", AiContext.RandomType.RandomMedium); + var battlePackage = AiHelpers.BuildDecisionPackageBreakFree( + $"Condition{NAME}", AiHelpers.RandomType.RandomMedium); var conditionVileBrew = ConditionDefinitionBuilder .Create($"Condition{NAME}") .SetGuiPresentation(Category.Condition, ConditionAcidArrowed) .SetConditionType(ConditionType.Detrimental) - .SetFixedAmount((int)AiContext.BreakFreeType.DoNoCheckAndRemoveCondition) + .SetFixedAmount((int)AiHelpers.BreakFreeType.DoNoCheckAndRemoveCondition) .SetBrain(battlePackage, true) .SetFeatures(ActionAffinityGrappled) // need special duration here to enforce the recurrent damage at start of turn @@ -1252,7 +1252,7 @@ internal static SpellDefinition BuildCommand() const string ConditionApproachName = $"Condition{NAME}Approach"; - var scorerApproach = AiContext.CreateActivityScorer(FixesContext.DecisionMoveAfraid, "MoveScorer_Approach"); + var scorerApproach = AiHelpers.CreateActivityScorer(FixesContext.DecisionMoveAfraid, "MoveScorer_Approach"); // invert PenalizeFearSourceProximityAtPosition if brain character has condition approach and enemy is condition source scorerApproach.scorer.WeightedConsiderations[2].Consideration.stringParameter = ConditionApproachName; diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs index 4050b7b16a..1a99882935 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs @@ -76,15 +76,15 @@ internal static SpellDefinition BuildBindingIce() const string NAME = "BindingIce"; var spriteReference = Sprites.GetSprite("WinterBreath", Resources.WinterBreath, 128); - var battlePackage = AiContext.BuildDecisionPackageBreakFree( - "ConditionGrappledRestrainedIceBound", AiContext.RandomType.RandomMedium); + var battlePackage = AiHelpers.BuildDecisionPackageBreakFree( + "ConditionGrappledRestrainedIceBound", AiHelpers.RandomType.RandomMedium); var conditionGrappledRestrainedIceBound = ConditionDefinitionBuilder .Create("ConditionGrappledRestrainedIceBound") .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionRestrained) .SetConditionType(ConditionType.Detrimental) .SetParentCondition(ConditionDefinitions.ConditionRestrained) - .SetFixedAmount((int)AiContext.BreakFreeType.DoNoCheckAndRemoveCondition) + .SetFixedAmount((int)AiHelpers.BreakFreeType.DoNoCheckAndRemoveCondition) .SetBrain(battlePackage, true) .SetFeatures(ActionAffinityGrappled) .AddToDB(); @@ -270,14 +270,14 @@ internal static SpellDefinition BuildNoxiousSpray() .AddToDB(); var battlePackage = - AiContext.BuildDecisionPackageBreakFree($"Condition{NAME}", AiContext.RandomType.NoRandom); + AiHelpers.BuildDecisionPackageBreakFree($"Condition{NAME}", AiHelpers.RandomType.NoRandom); var conditionNoxiousSpray = ConditionDefinitionBuilder .Create(ConditionPheromoned, $"Condition{NAME}") .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionDiseased) .SetConditionType(ConditionType.Detrimental) .SetPossessive() - .SetFixedAmount((int)AiContext.BreakFreeType.DoNoCheckAndRemoveCondition) + .SetFixedAmount((int)AiHelpers.BreakFreeType.DoNoCheckAndRemoveCondition) .SetBrain(battlePackage, true) .SetFeatures(actionAffinityNoxiousSpray, ActionAffinityGrappled) .AddToDB(); @@ -420,14 +420,14 @@ internal static SpellDefinition BuildWeb() { const string NAME = "SpellWeb"; - var battlePackage = AiContext.BuildDecisionPackageBreakFree($"ConditionGrappledRestrained{NAME}"); + var battlePackage = AiHelpers.BuildDecisionPackageBreakFree($"ConditionGrappledRestrained{NAME}"); var conditionRestrainedBySpellWeb = ConditionDefinitionBuilder .Create($"ConditionGrappledRestrained{NAME}") .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionRestrained) .SetConditionType(ConditionType.Detrimental) .SetParentCondition(ConditionDefinitions.ConditionRestrained) - .SetFixedAmount((int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC) + .SetFixedAmount((int)AiHelpers.BreakFreeType.DoStrengthCheckAgainstCasterDC) .SetBrain(battlePackage, true) .SetFeatures(ActionAffinityGrappled) .AddFeatures([.. LightingAndObscurementContext.ConditionLightlyObscured.Features]) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs index aa39454add..795f4c02aa 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using SolastaUnfinishedBusiness.Api.GameExtensions; +using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Api.LanguageExtensions; using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Behaviors.Specific; @@ -10,7 +11,6 @@ using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Interfaces; -using SolastaUnfinishedBusiness.Models; using SolastaUnfinishedBusiness.Subclasses; using SolastaUnfinishedBusiness.Validators; using TA; @@ -732,7 +732,7 @@ internal static SpellDefinition BuildFlashFreeze() { const string NAME = "FlashFreeze"; - var battlePackage = AiContext.BuildDecisionPackageBreakFree($"Condition{NAME}"); + var battlePackage = AiHelpers.BuildDecisionPackageBreakFree($"Condition{NAME}"); var conditionFlashFreeze = ConditionDefinitionBuilder .Create($"Condition{NAME}") @@ -741,7 +741,7 @@ internal static SpellDefinition BuildFlashFreeze() .SetConditionType(ConditionType.Detrimental) .SetParentCondition(ConditionDefinitions.ConditionRestrained) .SetPossessive() - .SetFixedAmount((int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC) + .SetFixedAmount((int)AiHelpers.BreakFreeType.DoStrengthCheckAgainstCasterDC) .SetBrain(battlePackage, true) .SetFeatures(ActionAffinityGrappled) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs b/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs index 8d4c51368f..0957c6508b 100644 --- a/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs +++ b/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs @@ -1,11 +1,11 @@ using System.Collections; using System.Collections.Generic; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Interfaces; -using SolastaUnfinishedBusiness.Models; using SolastaUnfinishedBusiness.Properties; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; @@ -58,14 +58,14 @@ public OathOfAncients() .SetSpellcastingClass(CharacterClassDefinitions.Paladin) .AddToDB(); - var battlePackage = AiContext.BuildDecisionPackageBreakFree($"Condition{Name}NaturesWrath"); + var battlePackage = AiHelpers.BuildDecisionPackageBreakFree($"Condition{Name}NaturesWrath"); var conditionNaturesWrath = ConditionDefinitionBuilder .Create($"Condition{Name}NaturesWrath") .SetGuiPresentation(ConditionDefinitions.ConditionRestrained.GuiPresentation) .SetConditionType(ConditionType.Detrimental) .SetParentCondition(ConditionDefinitions.ConditionRestrained) - .SetFixedAmount((int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC) + .SetFixedAmount((int)AiHelpers.BreakFreeType.DoStrengthCheckAgainstCasterDC) .SetBrain(battlePackage, true) .SetFeatures(ActionAffinityGrappled) .AddToDB(); From 1df2f1db9049396ece903c5951eb6729bcecfef3 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 15:36:23 -0800 Subject: [PATCH 49/85] continue models reorg --- .../Displays/BackgroundsAndRacesDisplay.cs | 6 +- .../Displays/GeneralDisplay.cs | 24 +- .../Displays/ProficienciesDisplay.cs | 10 +- .../Displays/SpellsDisplay.cs | 22 +- .../Models/BootContext.cs | 3 + .../Models/CharacterContext.cs | 435 +----------------- .../Models/FeatsContext.cs | 277 +++++++++++ .../Models/RacesContext.cs | 100 ++++ .../Models/Tabletop2014Context.cs | 2 +- .../Models/Tabletop2024Context.cs | 83 +++- .../Patches/RulesetCharacterPatcher.cs | 4 +- SolastaUnfinishedBusiness/Settings.cs | 6 +- SolastaUnfinishedBusiness/Settings/empty.xml | 4 +- .../Settings/zappastuff.xml | 4 +- .../Translations/de/Settings-de.txt | 6 +- .../Translations/en/Settings-en.txt | 8 +- .../Translations/es/Settings-es.txt | 6 +- .../Translations/fr/Settings-fr.txt | 6 +- .../Translations/it/Settings-it.txt | 6 +- .../Translations/ja/Settings-ja.txt | 6 +- .../Translations/ko/Settings-ko.txt | 6 +- .../Translations/pt-BR/Settings-pt-BR.txt | 6 +- .../Translations/ru/Settings-ru.txt | 6 +- .../Translations/zh-CN/Settings-zh-CN.txt | 6 +- 24 files changed, 525 insertions(+), 517 deletions(-) diff --git a/SolastaUnfinishedBusiness/Displays/BackgroundsAndRacesDisplay.cs b/SolastaUnfinishedBusiness/Displays/BackgroundsAndRacesDisplay.cs index deaf54516a..1f8b96773e 100644 --- a/SolastaUnfinishedBusiness/Displays/BackgroundsAndRacesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/BackgroundsAndRacesDisplay.cs @@ -43,14 +43,14 @@ private static void DisplayBackgroundsAndRacesGeneral() if (UI.Toggle(Gui.Localize("ModUi/&ChangeDragonbornElementalBreathUsages"), ref toggle, UI.AutoWidth())) { Main.Settings.ChangeDragonbornElementalBreathUsages = toggle; - CharacterContext.SwitchDragonbornElementalBreathUsages(); + RacesContext.SwitchDragonbornElementalBreathUsages(); } toggle = Main.Settings.EnableAlternateHuman; if (UI.Toggle(Gui.Localize("ModUi/&EnableAlternateHuman"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableAlternateHuman = toggle; - CharacterContext.SwitchFirstLevelTotalFeats(); + FeatsContext.SwitchFirstLevelTotalFeats(); } toggle = Main.Settings.UseOfficialSmallRacesDisWithHeavyWeapons; @@ -79,7 +79,7 @@ private static void DisplayBackgroundsAndRacesGeneral() if (UI.Toggle(Gui.Localize("ModUi/&AddDarknessPerceptiveToDarkRaces"), ref toggle, UI.AutoWidth())) { Main.Settings.AddDarknessPerceptiveToDarkRaces = toggle; - CharacterContext.SwitchDarknessPerceptive(); + RacesContext.SwitchDarknessPerceptive(); } UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 59ee0be38d..518e99fe9a 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -554,7 +554,7 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableAlternateHuman"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableAlternateHuman = toggle; - CharacterContext.SwitchFirstLevelTotalFeats(); + FeatsContext.SwitchFirstLevelTotalFeats(); } UI.Label(); @@ -568,10 +568,10 @@ private static void DisplayOneDnd() Tabletop2024Context.SwitchOneDndPreparedSpellsTables(); } - toggle = Main.Settings.EnableOneDndHealingSpellsBuf; - if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndHealingSpellsBuf"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.EnableOneDndHealingSpellsUpgrade; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndHealingSpellsUpgrade"), ref toggle, UI.AutoWidth())) { - Main.Settings.EnableOneDndHealingSpellsBuf = toggle; + Main.Settings.EnableOneDndHealingSpellsUpgrade = toggle; Tabletop2024Context.SwitchOneDndHealingSpellsBuf(); } @@ -582,18 +582,18 @@ private static void DisplayOneDnd() Tabletop2024Context.SwitchEnableRitualOnAllCasters(); } - toggle = Main.Settings.SwapOneDndBarkskinSpell; - if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndBarkskinSpell"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.EnableOneDndBarkskinSpell; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndBarkskinSpell"), ref toggle, UI.AutoWidth())) { - Main.Settings.SwapOneDndBarkskinSpell = toggle; - Tabletop2024Context.SwapOneDndBarkskinSpell(); + Main.Settings.EnableOneDndBarkskinSpell = toggle; + Tabletop2024Context.EnableOneDndBarkskinSpell(); } - toggle = Main.Settings.SwapOneDndGuidanceSpell; - if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndGuidanceSpell"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.EnableOneDndGuidanceSpell; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndGuidanceSpell"), ref toggle, UI.AutoWidth())) { - Main.Settings.SwapOneDndGuidanceSpell = toggle; - Tabletop2024Context.SwapOneDndGuidanceSpell(); + Main.Settings.EnableOneDndGuidanceSpell = toggle; + Tabletop2024Context.EnableOneDndGuidanceSpell(); } UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/ProficienciesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ProficienciesDisplay.cs index fd09f73171..f820f2ef9c 100644 --- a/SolastaUnfinishedBusiness/Displays/ProficienciesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ProficienciesDisplay.cs @@ -46,11 +46,11 @@ private static void DisplayProficienciesGeneral() var intValue = Main.Settings.TotalFeatsGrantedFirstLevel; if (UI.Slider(Gui.Localize("ModUi/&TotalFeatsGrantedFirstLevel"), ref intValue, - CharacterContext.MinInitialFeats, CharacterContext.MaxInitialFeats, 0, "", + FeatsContext.MinInitialFeats, FeatsContext.MaxInitialFeats, 0, "", UI.AutoWidth())) { Main.Settings.TotalFeatsGrantedFirstLevel = intValue; - CharacterContext.SwitchFirstLevelTotalFeats(); + FeatsContext.SwitchFirstLevelTotalFeats(); } UI.Label(); @@ -59,21 +59,21 @@ private static void DisplayProficienciesGeneral() if (UI.Toggle(Gui.Localize("ModUi/&EnablesAsiAndFeat"), ref toggle, UI.AutoWidth())) { Main.Settings.EnablesAsiAndFeat = toggle; - CharacterContext.SwitchAsiAndFeat(); + FeatsContext.SwitchAsiAndFeat(); } toggle = Main.Settings.EnableFeatsAtEveryFourLevels; if (UI.Toggle(Gui.Localize("ModUi/&EnableFeatsAtEvenLevels"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableFeatsAtEveryFourLevels = toggle; - CharacterContext.SwitchEveryFourLevelsFeats(); + FeatsContext.SwitchEveryFourLevelsFeats(); } toggle = Main.Settings.EnableFeatsAtEveryFourLevelsMiddle; if (UI.Toggle(Gui.Localize("ModUi/&EnableFeatsAtEvenLevelsMiddle"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableFeatsAtEveryFourLevelsMiddle = toggle; - CharacterContext.SwitchEveryFourLevelsFeats(true); + FeatsContext.SwitchEveryFourLevelsFeats(true); } UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs index e617a9295b..40641100d2 100644 --- a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs @@ -148,25 +148,25 @@ private static void DisplaySpellsGeneral() UI.Label(); - toggle = Main.Settings.EnableOneDndHealingSpellsBuf; - if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndHealingSpellsBuf"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.EnableOneDndHealingSpellsUpgrade; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndHealingSpellsUpgrade"), ref toggle, UI.AutoWidth())) { - Main.Settings.EnableOneDndHealingSpellsBuf = toggle; + Main.Settings.EnableOneDndHealingSpellsUpgrade = toggle; Tabletop2024Context.SwitchOneDndHealingSpellsBuf(); } - toggle = Main.Settings.SwapOneDndBarkskinSpell; - if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndBarkskinSpell"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.EnableOneDndBarkskinSpell; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndBarkskinSpell"), ref toggle, UI.AutoWidth())) { - Main.Settings.SwapOneDndBarkskinSpell = toggle; - Tabletop2024Context.SwapOneDndBarkskinSpell(); + Main.Settings.EnableOneDndBarkskinSpell = toggle; + Tabletop2024Context.EnableOneDndBarkskinSpell(); } - toggle = Main.Settings.SwapOneDndGuidanceSpell; - if (UI.Toggle(Gui.Localize("ModUi/&SwapOneDndGuidanceSpell"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.EnableOneDndGuidanceSpell; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndGuidanceSpell"), ref toggle, UI.AutoWidth())) { - Main.Settings.SwapOneDndGuidanceSpell = toggle; - Tabletop2024Context.SwapOneDndGuidanceSpell(); + Main.Settings.EnableOneDndGuidanceSpell = toggle; + Tabletop2024Context.EnableOneDndGuidanceSpell(); } UI.Label(); diff --git a/SolastaUnfinishedBusiness/Models/BootContext.cs b/SolastaUnfinishedBusiness/Models/BootContext.cs index 5eb976f8bd..53bdf09769 100644 --- a/SolastaUnfinishedBusiness/Models/BootContext.cs +++ b/SolastaUnfinishedBusiness/Models/BootContext.cs @@ -58,6 +58,9 @@ internal static void Startup() GameUiContext.Load(); InputContext.Load(); + // only bootstrap for now + FeatsContext.Load(); + // Fighting Styles must be loaded before feats to allow feats to generate corresponding fighting style ones. FightingStyleContext.Load(); diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index e3e068b36e..96671e31bc 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -2,7 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.Linq; -using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.LanguageExtensions; using SolastaUnfinishedBusiness.Behaviors; @@ -13,7 +12,6 @@ using SolastaUnfinishedBusiness.Properties; using SolastaUnfinishedBusiness.Races; using SolastaUnfinishedBusiness.Subclasses; -using SolastaUnfinishedBusiness.Validators; using TA; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; @@ -22,9 +20,7 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterRaceDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterSubclassDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionFeatureSets; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPointPools; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSenses; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MorphotypeElementDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; @@ -32,34 +28,11 @@ namespace SolastaUnfinishedBusiness.Models; internal static class CharacterContext { - internal const int MinInitialFeats = 0; - internal const int MaxInitialFeats = 4; // don't increase this value to avoid issue reports on crazy scenarios - internal const int GameMaxAttribute = 15; internal const int GameBuyPoints = 27; - internal const int ModMaxAttribute = 17; internal const int ModBuyPoints = 35; - internal static readonly ConditionDefinition ConditionIndomitableSaving = ConditionDefinitionBuilder - .Create("ConditionIndomitableSaving") - .SetGuiPresentationNoContent(true) - .SetSilent(Silent.WhenAddedOrRemoved) - .AddCustomSubFeatures(new RollSavingThrowInitiatedIndomitableSaving()) - .SetSpecialInterruptions(ConditionInterruption.SavingThrow) - .AddToDB(); - - - private static readonly FeatureDefinitionAbilityCheckAffinity AbilityCheckAffinityDarknessPerceptive = - FeatureDefinitionAbilityCheckAffinityBuilder - .Create("AbilityCheckAffinityDarknessPerceptive") - .SetGuiPresentation(Category.Feature) - .BuildAndSetAffinityGroups(CharacterAbilityCheckAffinity.Advantage, - abilityProficiencyPairs: (AttributeDefinitions.Wisdom, SkillDefinitions.Perception)) - .AddCustomSubFeatures(ValidatorsCharacter.IsUnlitOrDarkness) - .AddToDB(); - - private static readonly FeatureDefinitionCustomInvocationPool InvocationPoolPathClawDraconicChoice = CustomInvocationPoolDefinitionBuilder .Create("InvocationPoolPathClawDraconicChoice") @@ -102,7 +75,6 @@ internal static class CharacterContext .Setup(InvocationPoolTypeCustom.Pools.RangerPreferredEnemy) .AddToDB(); - internal static readonly FeatureDefinitionPower PowerTeleportSummon = FeatureDefinitionPowerBuilder .Create("PowerTeleportSummon") .SetGuiPresentation(Category.Feature, DimensionDoor) @@ -138,38 +110,19 @@ internal static class CharacterContext .Build()) .AddToDB(); - private static int PreviousTotalFeatsGrantedFirstLevel { get; set; } = -1; - private static bool PreviousAlternateHuman { get; set; } - internal static void LateLoad() { - FlexibleBackgroundsContext.Load(); - FlexibleBackgroundsContext.SwitchFlexibleBackgrounds(); - FlexibleRacesContext.SwitchFlexibleRaces(); LoadAdditionalNames(); LoadEpicArray(); - LoadFeatsPointPools(); - LoadSorcererQuickened(); - LoadVision(); LoadVisuals(); - LoadSecondWindToUseOneDndUsagesProgression(); - - SwitchAsiAndFeat(); - SwitchDarknessPerceptive(); - SwitchDragonbornElementalBreathUsages(); + LoadSorcererQuickened(); SwitchDruidKindredBeastToUseCustomInvocationPools(); - SwitchEveryFourLevelsFeats(); - SwitchEveryFourLevelsFeats(true); - SwitchFirstLevelTotalFeats(); SwitchPathOfTheElementsElementalFuryToUseCustomInvocationPools(); - SwitchRangerToUseCustomInvocationPools(); - SwitchSubclassAncestriesToUseCustomInvocationPools( "PathClaw", PathClaw, FeatureSetPathClawDragonAncestry, InvocationPoolPathClawDraconicChoice, InvocationPoolTypeCustom.Pools.PathClawDraconicChoice); - SwitchSubclassAncestriesToUseCustomInvocationPools( "Sorcerer", SorcerousDraconicBloodline, FeatureSetSorcererDraconicChoice, InvocationPoolSorcererDraconicChoice, @@ -251,23 +204,6 @@ private static void LoadEpicArray() : [15, 14, 13, 12, 10, 8]; } - private static void LoadFeatsPointPools() - { - // create feats point pools - // +1 here as need to count the Alternate Human Feat - for (var i = 1; i <= MaxInitialFeats + 1; i++) - { - var s = i.ToString(); - - _ = FeatureDefinitionPointPoolBuilder - .Create($"PointPool{i}BonusFeats") - .SetGuiPresentation( - Gui.Format("Feature/&PointPoolSelectBonusFeatsTitle", s), - Gui.Format("Feature/&PointPoolSelectBonusFeatsDescription", s)) - .SetPool(HeroDefinitions.PointsPoolType.Feat, i) - .AddToDB(); - } - } private static void LoadSorcererQuickened() { @@ -288,29 +224,6 @@ private static void LoadSorcererQuickened() .AddToDB(); } - private static void LoadVision() - { - if (Main.Settings.DisableSenseDarkVisionFromAllRaces) - { - foreach (var featureUnlocks in DatabaseRepository.GetDatabase() - .Select(crd => crd.FeatureUnlocks)) - { - featureUnlocks.RemoveAll(x => x.FeatureDefinition == SenseDarkvision); - // Half-orcs have a different darkvision. - featureUnlocks.RemoveAll(x => x.FeatureDefinition == SenseDarkvision12); - } - } - - // ReSharper disable once InvertIf - if (Main.Settings.DisableSenseSuperiorDarkVisionFromAllRaces) - { - foreach (var featureUnlocks in DatabaseRepository.GetDatabase() - .Select(crd => crd.FeatureUnlocks)) - { - featureUnlocks.RemoveAll(x => x.FeatureDefinition == SenseSuperiorDarkvision); - } - } - } private static void LoadVisuals() { @@ -449,37 +362,6 @@ private static void LoadVisuals() .Default; } - internal static void SwitchAsiAndFeat() - { - FeatureSetAbilityScoreChoice.mode = Main.Settings.EnablesAsiAndFeat - ? FeatureDefinitionFeatureSet.FeatureSetMode.Union - : FeatureDefinitionFeatureSet.FeatureSetMode.Exclusion; - } - - internal static void SwitchDragonbornElementalBreathUsages() - { - var powers = DatabaseRepository.GetDatabase() - .Where(x => - x.Name.StartsWith("PowerDragonbornBreathWeapon") || - x.Name == "PowerFeatDragonFear"); - - foreach (var power in powers) - { - if (Main.Settings.ChangeDragonbornElementalBreathUsages) - { - power.usesAbilityScoreName = AttributeDefinitions.Constitution; - power.usesDetermination = UsesDetermination.AbilityBonusPlusFixed; - power.fixedUsesPerRecharge = 0; - } - else - { - power.usesAbilityScoreName = AttributeDefinitions.Charisma; - power.usesDetermination = UsesDetermination.Fixed; - power.fixedUsesPerRecharge = 1; - } - } - } - private static void SwitchDruidKindredBeastToUseCustomInvocationPools() { var kindredSpirits = FeatureSetKindredSpiritChoice.FeatureSet; @@ -528,119 +410,6 @@ private static void SwitchDruidKindredBeastToUseCustomInvocationPools() CircleKindred.FeatureUnlocks.SetRange(replacedFeatures); } - internal static void SwitchEveryFourLevelsFeats(bool isMiddle = false) - { - var levels = isMiddle ? new[] { 6, 14 } : [2, 10, 18]; - var dbCharacterClassDefinition = DatabaseRepository.GetDatabase(); - var pointPool1BonusFeats = GetDefinition("PointPool1BonusFeats"); - var pointPool2BonusFeats = GetDefinition("PointPool2BonusFeats"); - var enable = isMiddle - ? Main.Settings.EnableFeatsAtEveryFourLevelsMiddle - : Main.Settings.EnableFeatsAtEveryFourLevels; - - foreach (var characterClassDefinition in dbCharacterClassDefinition) - { - foreach (var level in levels) - { - var featureUnlockPointPool1 = new FeatureUnlockByLevel(pointPool1BonusFeats, level); - var featureUnlockPointPool2 = new FeatureUnlockByLevel(pointPool2BonusFeats, level); - - if (enable) - { - characterClassDefinition.FeatureUnlocks.Add(ShouldBe2Points() - ? featureUnlockPointPool2 - : featureUnlockPointPool1); - } - else - { - if (ShouldBe2Points()) - { - characterClassDefinition.FeatureUnlocks.RemoveAll(x => - x.FeatureDefinition == pointPool2BonusFeats && x.level == level); - } - else - { - characterClassDefinition.FeatureUnlocks.RemoveAll(x => - x.FeatureDefinition == pointPool1BonusFeats && x.level == level); - } - } - - continue; - - bool ShouldBe2Points() - { - return (characterClassDefinition == Rogue && level is 10 && !isMiddle) || - (characterClassDefinition == Fighter && level is 6 or 14 && isMiddle); - } - } - - characterClassDefinition.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - } - - private static void LoadSecondWindToUseOneDndUsagesProgression() - { - PowerFighterSecondWind.AddCustomSubFeatures( - HasModifiedUses.Marker, - new ModifyPowerPoolAmount - { - PowerPool = PowerFighterSecondWind, - Type = PowerPoolBonusCalculationType.SecondWind2024, - Attribute = FighterClass - }, - new ModifyPowerPoolAmount - { - PowerPool = PowerFighterSecondWind, - Type = PowerPoolBonusCalculationType.SecondWind2024, - Attribute = FighterClass - }); - } - - - internal static void SwitchFirstLevelTotalFeats() - { - if (PreviousTotalFeatsGrantedFirstLevel > -1) - { - UnloadRacesLevel1Feats(PreviousTotalFeatsGrantedFirstLevel, PreviousAlternateHuman); - } - - PreviousTotalFeatsGrantedFirstLevel = Main.Settings.TotalFeatsGrantedFirstLevel; - PreviousAlternateHuman = Main.Settings.EnableAlternateHuman; - LoadRacesLevel1Feats(Main.Settings.TotalFeatsGrantedFirstLevel, Main.Settings.EnableAlternateHuman); - } - - - internal static void SwitchDarknessPerceptive() - { - var races = new List - { - RaceKoboldBuilder.SubraceDarkKobold, - SubraceDarkelfBuilder.SubraceDarkelf, - SubraceGrayDwarfBuilder.SubraceGrayDwarf - }; - - if (Main.Settings.AddDarknessPerceptiveToDarkRaces) - { - foreach (var characterRaceDefinition in races - .Where(a => !a.FeatureUnlocks.Exists(x => - x.Level == 1 && x.FeatureDefinition == AbilityCheckAffinityDarknessPerceptive))) - { - characterRaceDefinition.FeatureUnlocks.Add( - new FeatureUnlockByLevel(AbilityCheckAffinityDarknessPerceptive, 1)); - } - } - else - { - foreach (var characterRaceDefinition in races - .Where(a => a.FeatureUnlocks.Exists(x => - x.Level == 1 && x.FeatureDefinition == AbilityCheckAffinityDarknessPerceptive))) - { - characterRaceDefinition.FeatureUnlocks.RemoveAll(x => - x.Level == 1 && x.FeatureDefinition == AbilityCheckAffinityDarknessPerceptive); - } - } - } - private static void SwitchPathOfTheElementsElementalFuryToUseCustomInvocationPools() { var elementalFuries = PathOfTheElements.FeatureSetElementalFury.FeatureSet; @@ -852,176 +621,6 @@ private static void SwitchSubclassAncestriesToUseCustomInvocationPools( characterSubclassDefinition.FeatureUnlocks.SetRange(replacedFeatures); } - private static void BuildFeatureUnlocks( - int initialFeats, - bool alternateHuman, - [CanBeNull] out FeatureUnlockByLevel featureUnlockByLevelNonHuman, - [CanBeNull] out FeatureUnlockByLevel featureUnlockByLevelHuman) - { - string name; - - featureUnlockByLevelNonHuman = null; - featureUnlockByLevelHuman = null; - - switch (initialFeats) - { - case 0: - { - if (alternateHuman) - { - featureUnlockByLevelHuman = new FeatureUnlockByLevel(PointPoolBonusFeat, 1); - } - - break; - } - case 1: - { - featureUnlockByLevelNonHuman = new FeatureUnlockByLevel(PointPoolBonusFeat, 1); - - name = "PointPool2BonusFeats"; - if (alternateHuman && TryGetDefinition(name, out var pointPool2BonusFeats)) - { - featureUnlockByLevelHuman = new FeatureUnlockByLevel(pointPool2BonusFeats, 1); - } - - break; - } - case > 1: - { - name = $"PointPool{initialFeats}BonusFeats"; - if (TryGetDefinition(name, out var featureDefinitionPointPool)) - { - featureUnlockByLevelNonHuman = new FeatureUnlockByLevel(featureDefinitionPointPool, 1); - } - - name = $"PointPool{initialFeats + 1}BonusFeats"; - if (alternateHuman && TryGetDefinition(name, out var pointPoolXBonusFeats)) - { - featureUnlockByLevelHuman = new FeatureUnlockByLevel(pointPoolXBonusFeats, 1); - } - - break; - } - } - } - - private static void LoadRacesLevel1Feats(int initialFeats, bool alternateHuman) - { - var human = Human; - - BuildFeatureUnlocks(initialFeats, alternateHuman, out var featureUnlockByLevelNonHuman, - out var featureUnlockByLevelHuman); - - foreach (var characterRaceDefinition in DatabaseRepository.GetDatabase()) - { - if (IsSubRace(characterRaceDefinition)) - { - continue; - } - - if (alternateHuman && characterRaceDefinition == human) - { - if (featureUnlockByLevelHuman != null) - { - human.FeatureUnlocks.Add(featureUnlockByLevelHuman); - } - - var pointPoolAbilityScoreImprovement = - new FeatureUnlockByLevel(PointPoolAbilityScoreImprovement, 1); - human.FeatureUnlocks.Add(pointPoolAbilityScoreImprovement); - - var pointPoolHumanSkillPool = new FeatureUnlockByLevel(PointPoolHumanSkillPool, 1); - human.FeatureUnlocks.Add(pointPoolHumanSkillPool); - - Remove(human, - FeatureDefinitionAttributeModifiers - .AttributeModifierHumanAbilityScoreIncrease); - } - else - { - if (featureUnlockByLevelNonHuman != null) - { - characterRaceDefinition.FeatureUnlocks.Add(featureUnlockByLevelNonHuman); - } - } - } - } - - private static void UnloadRacesLevel1Feats(int initialFeats, bool alternateHuman) - { - var human = Human; - - BuildFeatureUnlocks(initialFeats, alternateHuman, - out var featureUnlockByLevelNonHuman, - out var featureUnlockByLevelHuman); - - foreach (var characterRaceDefinition in DatabaseRepository.GetDatabase()) - { - if (IsSubRace(characterRaceDefinition)) - { - continue; - } - - if (alternateHuman && characterRaceDefinition == human) - { - if (featureUnlockByLevelHuman != null) - { - Remove(human, featureUnlockByLevelHuman); - } - - Remove(human, PointPoolAbilityScoreImprovement); - Remove(human, PointPoolHumanSkillPool); - - var humanAttributeIncrease = new FeatureUnlockByLevel( - FeatureDefinitionAttributeModifiers.AttributeModifierHumanAbilityScoreIncrease, 1); - - human.FeatureUnlocks.Add(humanAttributeIncrease); - } - else - { - if (featureUnlockByLevelNonHuman != null) - { - Remove(characterRaceDefinition, featureUnlockByLevelNonHuman); - } - } - } - } - - private static void Remove( - [NotNull] CharacterRaceDefinition characterRaceDefinition, - BaseDefinition toRemove) - { - var ndx = -1; - - for (var i = 0; i < characterRaceDefinition.FeatureUnlocks.Count; i++) - { - if (characterRaceDefinition.FeatureUnlocks[i].Level == 1 && - characterRaceDefinition.FeatureUnlocks[i].FeatureDefinition == toRemove) - { - ndx = i; - } - } - - if (ndx >= 0) - { - characterRaceDefinition.FeatureUnlocks.RemoveAt(ndx); - } - } - - private static void Remove( - [NotNull] CharacterRaceDefinition characterRaceDefinition, - [NotNull] FeatureUnlockByLevel featureUnlockByLevel) - { - Remove(characterRaceDefinition, featureUnlockByLevel.FeatureDefinition); - } - - private static bool IsSubRace(CharacterRaceDefinition raceDefinition) - { - return DatabaseRepository.GetDatabase() - .Any(crd => crd.SubRaces.Contains(raceDefinition)); - } - - private sealed class FilterTargetingPositionPowerTeleportSummon : IFilterTargetingPosition { public IEnumerator ComputeValidPositions(CursorLocationSelectPosition cursorLocationSelectPosition) @@ -1052,36 +651,4 @@ public IEnumerator ComputeValidPositions(CursorLocationSelectPosition cursorLoca } } } - - private sealed class RollSavingThrowInitiatedIndomitableSaving : IRollSavingThrowInitiated - { - public void OnSavingThrowInitiated( - RulesetActor rulesetActorCaster, - RulesetActor rulesetActorDefender, - ref int saveBonus, - ref string abilityScoreName, - BaseDefinition sourceDefinition, - List modifierTrends, - List advantageTrends, - ref int rollModifier, - ref int saveDC, - ref bool hasHitVisual, - RollOutcome outcome, - int outcomeDelta, - List effectForms) - { - if (rulesetActorDefender is not RulesetCharacterHero rulesetCharacterDefender) - { - return; - } - - var classLevel = rulesetCharacterDefender.GetClassLevel(Fighter); - - rollModifier += classLevel; - modifierTrends.Add( - new TrendInfo(classLevel, FeatureSourceType.CharacterFeature, - FeatureDefinitionAttributeModifiers.AttributeModifierFighterIndomitable.Name, - FeatureDefinitionAttributeModifiers.AttributeModifierFighterIndomitable)); - } - } } diff --git a/SolastaUnfinishedBusiness/Models/FeatsContext.cs b/SolastaUnfinishedBusiness/Models/FeatsContext.cs index 7312046154..2d7c074df6 100644 --- a/SolastaUnfinishedBusiness/Models/FeatsContext.cs +++ b/SolastaUnfinishedBusiness/Models/FeatsContext.cs @@ -4,10 +4,17 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.LanguageExtensions; +using SolastaUnfinishedBusiness.Builders; +using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Feats; using UnityEngine; using UnityEngine.UI; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionFeatureSets; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterRaceDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPointPools; namespace SolastaUnfinishedBusiness.Models; @@ -17,9 +24,22 @@ internal static class FeatsContext internal const int Width = 300; internal const int Height = 44; internal const int Spacing = 5; + internal const int MinInitialFeats = 0; + internal const int MaxInitialFeats = 4; // don't increase this value to avoid issue reports on crazy scenarios internal static HashSet Feats { get; private set; } = []; internal static HashSet FeatGroups { get; private set; } = []; + private static int PreviousTotalFeatsGrantedFirstLevel { get; set; } = -1; + private static bool PreviousAlternateHuman { get; set; } + + internal static void Load() + { + LoadFeatsPointPools(); + SwitchAsiAndFeat(); + SwitchFirstLevelTotalFeats(); + SwitchEveryFourLevelsFeats(); + SwitchEveryFourLevelsFeats(true); + } internal static void LateLoad() { @@ -307,6 +327,263 @@ internal static void ForceSameWidth(RectTransform table, bool active, FeatSubPan LayoutRebuilder.ForceRebuildLayoutImmediate(table); } + private static void LoadFeatsPointPools() + { + // create feats point pools + // +1 here as need to count the Alternate Human Feat + for (var i = 1; i <= MaxInitialFeats + 1; i++) + { + var s = i.ToString(); + + _ = FeatureDefinitionPointPoolBuilder + .Create($"PointPool{i}BonusFeats") + .SetGuiPresentation( + Gui.Format("Feature/&PointPoolSelectBonusFeatsTitle", s), + Gui.Format("Feature/&PointPoolSelectBonusFeatsDescription", s)) + .SetPool(HeroDefinitions.PointsPoolType.Feat, i) + .AddToDB(); + } + } + + internal static void SwitchFirstLevelTotalFeats() + { + if (PreviousTotalFeatsGrantedFirstLevel > -1) + { + UnloadRacesLevel1Feats(PreviousTotalFeatsGrantedFirstLevel, PreviousAlternateHuman); + } + + PreviousTotalFeatsGrantedFirstLevel = Main.Settings.TotalFeatsGrantedFirstLevel; + PreviousAlternateHuman = Main.Settings.EnableAlternateHuman; + LoadRacesLevel1Feats(Main.Settings.TotalFeatsGrantedFirstLevel, Main.Settings.EnableAlternateHuman); + } + + private static void LoadRacesLevel1Feats(int initialFeats, bool alternateHuman) + { + var human = Human; + + BuildFeatureUnlocks(initialFeats, alternateHuman, out var featureUnlockByLevelNonHuman, + out var featureUnlockByLevelHuman); + + foreach (var characterRaceDefinition in DatabaseRepository.GetDatabase()) + { + if (IsSubRace(characterRaceDefinition)) + { + continue; + } + + if (alternateHuman && characterRaceDefinition == human) + { + if (featureUnlockByLevelHuman != null) + { + human.FeatureUnlocks.Add(featureUnlockByLevelHuman); + } + + var pointPoolAbilityScoreImprovement = + new FeatureUnlockByLevel(PointPoolAbilityScoreImprovement, 1); + human.FeatureUnlocks.Add(pointPoolAbilityScoreImprovement); + + var pointPoolHumanSkillPool = new FeatureUnlockByLevel(PointPoolHumanSkillPool, 1); + human.FeatureUnlocks.Add(pointPoolHumanSkillPool); + + Remove(human, + FeatureDefinitionAttributeModifiers + .AttributeModifierHumanAbilityScoreIncrease); + } + else + { + if (featureUnlockByLevelNonHuman != null) + { + characterRaceDefinition.FeatureUnlocks.Add(featureUnlockByLevelNonHuman); + } + } + } + } + + private static void UnloadRacesLevel1Feats(int initialFeats, bool alternateHuman) + { + var human = Human; + + BuildFeatureUnlocks(initialFeats, alternateHuman, + out var featureUnlockByLevelNonHuman, + out var featureUnlockByLevelHuman); + + foreach (var characterRaceDefinition in DatabaseRepository.GetDatabase()) + { + if (IsSubRace(characterRaceDefinition)) + { + continue; + } + + if (alternateHuman && characterRaceDefinition == human) + { + if (featureUnlockByLevelHuman != null) + { + Remove(human, featureUnlockByLevelHuman); + } + + Remove(human, PointPoolAbilityScoreImprovement); + Remove(human, PointPoolHumanSkillPool); + + var humanAttributeIncrease = new FeatureUnlockByLevel( + FeatureDefinitionAttributeModifiers.AttributeModifierHumanAbilityScoreIncrease, 1); + + human.FeatureUnlocks.Add(humanAttributeIncrease); + } + else + { + if (featureUnlockByLevelNonHuman != null) + { + Remove(characterRaceDefinition, featureUnlockByLevelNonHuman); + } + } + } + } + + private static void Remove( + [NotNull] CharacterRaceDefinition characterRaceDefinition, + BaseDefinition toRemove) + { + var ndx = -1; + + for (var i = 0; i < characterRaceDefinition.FeatureUnlocks.Count; i++) + { + if (characterRaceDefinition.FeatureUnlocks[i].Level == 1 && + characterRaceDefinition.FeatureUnlocks[i].FeatureDefinition == toRemove) + { + ndx = i; + } + } + + if (ndx >= 0) + { + characterRaceDefinition.FeatureUnlocks.RemoveAt(ndx); + } + } + + private static void Remove( + [NotNull] CharacterRaceDefinition characterRaceDefinition, + [NotNull] FeatureUnlockByLevel featureUnlockByLevel) + { + Remove(characterRaceDefinition, featureUnlockByLevel.FeatureDefinition); + } + + private static bool IsSubRace(CharacterRaceDefinition raceDefinition) + { + return DatabaseRepository.GetDatabase() + .Any(crd => crd.SubRaces.Contains(raceDefinition)); + } + + internal static void SwitchAsiAndFeat() + { + FeatureSetAbilityScoreChoice.mode = Main.Settings.EnablesAsiAndFeat + ? FeatureDefinitionFeatureSet.FeatureSetMode.Union + : FeatureDefinitionFeatureSet.FeatureSetMode.Exclusion; + } + + + internal static void SwitchEveryFourLevelsFeats(bool isMiddle = false) + { + var levels = isMiddle ? new[] { 6, 14 } : [2, 10, 18]; + var dbCharacterClassDefinition = DatabaseRepository.GetDatabase(); + var pointPool1BonusFeats = GetDefinition("PointPool1BonusFeats"); + var pointPool2BonusFeats = GetDefinition("PointPool2BonusFeats"); + var enable = isMiddle + ? Main.Settings.EnableFeatsAtEveryFourLevelsMiddle + : Main.Settings.EnableFeatsAtEveryFourLevels; + + foreach (var characterClassDefinition in dbCharacterClassDefinition) + { + foreach (var level in levels) + { + var featureUnlockPointPool1 = new FeatureUnlockByLevel(pointPool1BonusFeats, level); + var featureUnlockPointPool2 = new FeatureUnlockByLevel(pointPool2BonusFeats, level); + + if (enable) + { + characterClassDefinition.FeatureUnlocks.Add(ShouldBe2Points() + ? featureUnlockPointPool2 + : featureUnlockPointPool1); + } + else + { + if (ShouldBe2Points()) + { + characterClassDefinition.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == pointPool2BonusFeats && x.level == level); + } + else + { + characterClassDefinition.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == pointPool1BonusFeats && x.level == level); + } + } + + continue; + + bool ShouldBe2Points() + { + return (characterClassDefinition == Rogue && level is 10 && !isMiddle) || + (characterClassDefinition == Fighter && level is 6 or 14 && isMiddle); + } + } + + characterClassDefinition.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + } + + private static void BuildFeatureUnlocks( + int initialFeats, + bool alternateHuman, + [CanBeNull] out FeatureUnlockByLevel featureUnlockByLevelNonHuman, + [CanBeNull] out FeatureUnlockByLevel featureUnlockByLevelHuman) + { + string name; + + featureUnlockByLevelNonHuman = null; + featureUnlockByLevelHuman = null; + + switch (initialFeats) + { + case 0: + { + if (alternateHuman) + { + featureUnlockByLevelHuman = new FeatureUnlockByLevel(PointPoolBonusFeat, 1); + } + + break; + } + case 1: + { + featureUnlockByLevelNonHuman = new FeatureUnlockByLevel(PointPoolBonusFeat, 1); + + name = "PointPool2BonusFeats"; + if (alternateHuman && TryGetDefinition(name, out var pointPool2BonusFeats)) + { + featureUnlockByLevelHuman = new FeatureUnlockByLevel(pointPool2BonusFeats, 1); + } + + break; + } + case > 1: + { + name = $"PointPool{initialFeats}BonusFeats"; + if (TryGetDefinition(name, out var featureDefinitionPointPool)) + { + featureUnlockByLevelNonHuman = new FeatureUnlockByLevel(featureDefinitionPointPool, 1); + } + + name = $"PointPool{initialFeats + 1}BonusFeats"; + if (alternateHuman && TryGetDefinition(name, out var pointPoolXBonusFeats)) + { + featureUnlockByLevelHuman = new FeatureUnlockByLevel(pointPoolXBonusFeats, 1); + } + + break; + } + } + } + internal sealed class HideFromFeats { internal static readonly HideFromFeats Marker = new(); diff --git a/SolastaUnfinishedBusiness/Models/RacesContext.cs b/SolastaUnfinishedBusiness/Models/RacesContext.cs index 6768b727b8..e37338935f 100644 --- a/SolastaUnfinishedBusiness/Models/RacesContext.cs +++ b/SolastaUnfinishedBusiness/Models/RacesContext.cs @@ -3,12 +3,25 @@ using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Builders; +using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.Races; +using SolastaUnfinishedBusiness.Validators; +using static RuleDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSenses; namespace SolastaUnfinishedBusiness.Models; internal static class RacesContext { + private static readonly FeatureDefinitionAbilityCheckAffinity AbilityCheckAffinityDarknessPerceptive = + FeatureDefinitionAbilityCheckAffinityBuilder + .Create("AbilityCheckAffinityDarknessPerceptive") + .SetGuiPresentation(Category.Feature) + .BuildAndSetAffinityGroups(CharacterAbilityCheckAffinity.Advantage, + abilityProficiencyPairs: (AttributeDefinitions.Wisdom, SkillDefinitions.Perception)) + .AddCustomSubFeatures(ValidatorsCharacter.IsUnlitOrDarkness) + .AddToDB(); + internal static Dictionary RaceScaleMap { get; } = []; internal static HashSet Races { get; private set; } = []; internal static HashSet Subraces { get; private set; } = []; @@ -70,6 +83,14 @@ internal static void Load() DatabaseRepository.GetDatabase() .Do(x => x.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock)); + + // final bootstrap + LoadVision(); + SwitchDarknessPerceptive(); + SwitchDragonbornElementalBreathUsages(); + FlexibleBackgroundsContext.Load(); + FlexibleBackgroundsContext.SwitchFlexibleBackgrounds(); + FlexibleRacesContext.SwitchFlexibleRaces(); } private static void LoadRace([NotNull] CharacterRaceDefinition characterRaceDefinition) @@ -143,4 +164,83 @@ internal static void SwitchSubrace(CharacterRaceDefinition characterRaceDefiniti UpdateSubraceVisibility(characterRaceDefinition); } + + private static void LoadVision() + { + if (Main.Settings.DisableSenseDarkVisionFromAllRaces) + { + foreach (var featureUnlocks in DatabaseRepository.GetDatabase() + .Select(crd => crd.FeatureUnlocks)) + { + featureUnlocks.RemoveAll(x => x.FeatureDefinition == SenseDarkvision); + // Half-orcs have a different darkvision. + featureUnlocks.RemoveAll(x => x.FeatureDefinition == SenseDarkvision12); + } + } + + // ReSharper disable once InvertIf + if (Main.Settings.DisableSenseSuperiorDarkVisionFromAllRaces) + { + foreach (var featureUnlocks in DatabaseRepository.GetDatabase() + .Select(crd => crd.FeatureUnlocks)) + { + featureUnlocks.RemoveAll(x => x.FeatureDefinition == SenseSuperiorDarkvision); + } + } + } + + internal static void SwitchDarknessPerceptive() + { + var races = new List + { + RaceKoboldBuilder.SubraceDarkKobold, + SubraceDarkelfBuilder.SubraceDarkelf, + SubraceGrayDwarfBuilder.SubraceGrayDwarf + }; + + if (Main.Settings.AddDarknessPerceptiveToDarkRaces) + { + foreach (var characterRaceDefinition in races + .Where(a => !a.FeatureUnlocks.Exists(x => + x.Level == 1 && x.FeatureDefinition == AbilityCheckAffinityDarknessPerceptive))) + { + characterRaceDefinition.FeatureUnlocks.Add( + new FeatureUnlockByLevel(AbilityCheckAffinityDarknessPerceptive, 1)); + } + } + else + { + foreach (var characterRaceDefinition in races + .Where(a => a.FeatureUnlocks.Exists(x => + x.Level == 1 && x.FeatureDefinition == AbilityCheckAffinityDarknessPerceptive))) + { + characterRaceDefinition.FeatureUnlocks.RemoveAll(x => + x.Level == 1 && x.FeatureDefinition == AbilityCheckAffinityDarknessPerceptive); + } + } + } + + internal static void SwitchDragonbornElementalBreathUsages() + { + var powers = DatabaseRepository.GetDatabase() + .Where(x => + x.Name.StartsWith("PowerDragonbornBreathWeapon") || + x.Name == "PowerFeatDragonFear"); + + foreach (var power in powers) + { + if (Main.Settings.ChangeDragonbornElementalBreathUsages) + { + power.usesAbilityScoreName = AttributeDefinitions.Constitution; + power.usesDetermination = UsesDetermination.AbilityBonusPlusFixed; + power.fixedUsesPerRecharge = 0; + } + else + { + power.usesAbilityScoreName = AttributeDefinitions.Charisma; + power.usesDetermination = UsesDetermination.Fixed; + power.fixedUsesPerRecharge = 1; + } + } + } } diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2014Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2014Context.cs index e0b9651e06..181df36c29 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2014Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2014Context.cs @@ -17,7 +17,7 @@ namespace SolastaUnfinishedBusiness.Models; -public class Tabletop2014Context +internal static class Tabletop2014Context { internal static readonly HashSet ConjuredMonsters = [ diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 2dc5cef55c..873f39a7e0 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -187,16 +187,25 @@ internal static class Tabletop2024Context .Build()) .AddToDB(); + internal static readonly ConditionDefinition ConditionIndomitableSaving = ConditionDefinitionBuilder + .Create("ConditionIndomitableSaving") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .AddCustomSubFeatures(new RollSavingThrowInitiatedIndomitableSaving()) + .SetSpecialInterruptions(ConditionInterruption.SavingThrow) + .AddToDB(); + internal static void LateLoad() { BuildBarbarianBrutalStrike(); BuildRogueCunningStrike(); BuildOneDndGuidanceSubspells(); - + LoadMonkHeightenedMetabolism(); + LoadSecondWindToUseOneDndUsagesProgression(); - SwapOneDndBarkskinSpell(); - SwapOneDndGuidanceSpell(); + EnableOneDndBarkskinSpell(); + EnableOneDndGuidanceSpell(); SwitchOneDnDEnableDruidToUseMetalArmor(); SwitchDruidWeaponProficiencyToUseOneDnd(); SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); @@ -237,6 +246,25 @@ internal static void LateLoad() SwitchMonkDoNotRequireAttackActionForFlurry(); } + + private static void LoadSecondWindToUseOneDndUsagesProgression() + { + PowerFighterSecondWind.AddCustomSubFeatures( + HasModifiedUses.Marker, + new ModifyPowerPoolAmount + { + PowerPool = PowerFighterSecondWind, + Type = PowerPoolBonusCalculationType.SecondWind2024, + Attribute = FighterClass + }, + new ModifyPowerPoolAmount + { + PowerPool = PowerFighterSecondWind, + Type = PowerPoolBonusCalculationType.SecondWind2024, + Attribute = FighterClass + }); + } + internal static void SwitchFighterLevelToIndomitableSavingReroll() { UseIndomitableResistance.GuiPresentation.description = @@ -342,9 +370,9 @@ internal static void SwitchEnableRitualOnAllCasters() } } - internal static void SwapOneDndBarkskinSpell() + internal static void EnableOneDndBarkskinSpell() { - if (Main.Settings.SwapOneDndBarkskinSpell) + if (Main.Settings.EnableOneDndBarkskinSpell) { Barkskin.requiresConcentration = false; Barkskin.castingTime = ActivationTime.BonusAction; @@ -406,14 +434,14 @@ private static void BuildOneDndGuidanceSubspells() } } - internal static void SwapOneDndGuidanceSpell() + internal static void EnableOneDndGuidanceSpell() { foreach (var spell in GuidanceSubSpells) { spell.implemented = false; } - if (Main.Settings.SwapOneDndGuidanceSpell) + if (Main.Settings.EnableOneDndGuidanceSpell) { Guidance.spellsBundle = true; Guidance.SubspellsList.SetRange(GuidanceSubSpells); @@ -579,7 +607,7 @@ internal static void SwitchOneDndEnableBardExpertiseOneLevelBefore() { var level = Main.Settings.EnableBardExpertiseOneLevelBefore ? 2 : 3; - foreach (var featureUnlock in Ranger.FeatureUnlocks + foreach (var featureUnlock in Bard.FeatureUnlocks .Where(x => x.FeatureDefinition == PointPoolBardExpertiseLevel3)) { featureUnlock.level = level; @@ -587,7 +615,7 @@ internal static void SwitchOneDndEnableBardExpertiseOneLevelBefore() level = Main.Settings.EnableBardExpertiseOneLevelBefore ? 9 : 10; - foreach (var featureUnlock in Ranger.FeatureUnlocks + foreach (var featureUnlock in Bard.FeatureUnlocks .Where(x => x.FeatureDefinition == PointPoolBardExpertiseLevel10)) { featureUnlock.level = level; @@ -701,7 +729,7 @@ internal static void SwitchOneDndHealingPotionBonusAction() internal static void SwitchOneDndHealingSpellsBuf() { - var dice = Main.Settings.EnableOneDndHealingSpellsBuf ? 2 : 1; + var dice = Main.Settings.EnableOneDndHealingSpellsUpgrade ? 2 : 1; // Cure Wounds, Healing Word got buf on base damage and add dice CureWounds.effectDescription.EffectForms[0].healingForm.diceNumber = dice; @@ -712,7 +740,7 @@ internal static void SwitchOneDndHealingSpellsBuf() // Mass Cure Wounds and Mass Healing Word only got buf on base damage MassHealingWord.effectDescription.EffectForms[0].healingForm.diceNumber = dice; - dice = Main.Settings.EnableOneDndHealingSpellsBuf ? 5 : 3; + dice = Main.Settings.EnableOneDndHealingSpellsUpgrade ? 5 : 3; MassCureWounds.effectDescription.EffectForms[0].healingForm.diceNumber = dice; } @@ -802,6 +830,39 @@ internal static void SwitchOneDndWarlockInvocationsProgression() Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } + + private sealed class RollSavingThrowInitiatedIndomitableSaving : IRollSavingThrowInitiated + { + public void OnSavingThrowInitiated( + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, + ref int saveBonus, + ref string abilityScoreName, + BaseDefinition sourceDefinition, + List modifierTrends, + List advantageTrends, + ref int rollModifier, + ref int saveDC, + ref bool hasHitVisual, + RollOutcome outcome, + int outcomeDelta, + List effectForms) + { + if (rulesetActorDefender is not RulesetCharacterHero rulesetCharacterDefender) + { + return; + } + + var classLevel = rulesetCharacterDefender.GetClassLevel(Fighter); + + rollModifier += classLevel; + modifierTrends.Add( + new TrendInfo(classLevel, FeatureSourceType.CharacterFeature, + AttributeModifierFighterIndomitable.Name, + AttributeModifierFighterIndomitable)); + } + } + private sealed class ModifyAttackActionModifierInnateSorcery : IModifyAttackActionModifier { private readonly TrendInfo _trendInfo = diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs index 804e61288e..7b6354e05e 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs @@ -257,7 +257,7 @@ public static void Prefix(RulesetCharacter __instance) } __instance.InflictCondition( - CharacterContext.ConditionIndomitableSaving.Name, + Tabletop2024Context.ConditionIndomitableSaving.Name, DurationType.Round, 1, TurnOccurenceType.StartOfTurn, @@ -265,7 +265,7 @@ public static void Prefix(RulesetCharacter __instance) __instance.Guid, __instance.CurrentFaction.Name, 1, - CharacterContext.ConditionIndomitableSaving.Name, + Tabletop2024Context.ConditionIndomitableSaving.Name, 0, 0, 0); diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 3890538ef1..738740fbc3 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -374,9 +374,9 @@ public class Settings : UnityModManager.ModSettings public bool UseHeightOneCylinderEffect { get; set; } public bool FixEldritchBlastRange { get; set; } public bool ModifyGravitySlam { get; set; } - public bool EnableOneDndHealingSpellsBuf { get; set; } - public bool SwapOneDndBarkskinSpell { get; set; } - public bool SwapOneDndGuidanceSpell { get; set; } + public bool EnableOneDndHealingSpellsUpgrade { get; set; } + public bool EnableOneDndBarkskinSpell { get; set; } + public bool EnableOneDndGuidanceSpell { get; set; } public bool AllowHasteCasting { get; set; } public bool AllowStackedMaterialComponent { get; set; } public bool EnableRelearnSpells { get; set; } diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index 64597575dd..f01a8067b4 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -648,8 +648,8 @@ false false false - false - false + false + false false false false diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index 602c257226..53be3f0cc0 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -907,8 +907,8 @@ true true true - true - true + true + true true true false diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 04da65d35d..5976ec7704 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -146,7 +146,7 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Aktiviere Übe ModUi/&EnableMonkWeaponSpecialization=Aktiviere Waffenspezialisierung auf den Stufen 2 und 11 [der ausgewählte Waffentyp wird für dich zu einer Mönchswaffe] ModUi/&EnableMulticlass=Aktivieren Sie Multiclass [Neustart erforderlich] ModUi/&EnableOneDnDPreparedSpellsTables=Ermöglichen Sie allen Zauberern die Verwendung neuer vorbereiteter Zaubertabellen [Barde, Kleriker, Druide, Paladin, Waldläufer, Zauberer, Magier] -ModUi/&EnableOneDndHealingSpellsBuf=Aktiviere den Heilungswürfel-Buff für Wunden heilen, Heilendes Wort, Massenheilung von Wunden und Massenheilungswort. +ModUi/&EnableOneDndHealingSpellsUpgrade=Aktiviere den Heilungswürfel-Buff für Wunden heilen, Heilendes Wort, Massenheilung von Wunden und Massenheilungswort. ModUi/&EnablePaladinLayOnHandsAsBonusAction=Aktiviere Handauflegen als Bonusaktion ModUi/&EnablePaladinSmiteAsBonusAction=Aktiviere Smite als Bonusaktion ModUi/&EnablePaladinSpellCastingAtLevel1=Aktiviere Zauberwirken auf Stufe 1 statt 2. @@ -312,8 +312,8 @@ ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Tauschen Sie Waffenf ModUi/&SwapEvocationPotentCantripAndSculptSpell=Tauschen Sie die Funktionen Evoker Sculpt Spells und Potent Cantrip aus ModUi/&SwapEvocationSavant=Tauschen Sie Evoker Evocation Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Tauschen Sie Unbewaffneter Angriff aus, um die Würfeltyp-Progression von 5e 2024 zu verwenden -ModUi/&SwapOneDndBarkskinSpell=Tauschen Sie Barkskin gegen die 5e 2024-Version aus [Bonusaktion, keine Konzentration, AC auf 17 eingestellt] -ModUi/&SwapOneDndGuidanceSpell=Tauschen Sie Anleitung gegen Version 5e 2024 aus [Wählen Sie beim Zaubern eine Fertigkeit aus und erhalten Sie bis zu 1 Minute lang einen Bonus.] +ModUi/&EnableOneDndBarkskinSpell=Tauschen Sie Barkskin gegen die 5e 2024-Version aus [Bonusaktion, keine Konzentration, AC auf 17 eingestellt] +ModUi/&EnableOneDndGuidanceSpell=Tauschen Sie Anleitung gegen Version 5e 2024 aus [Wählen Sie beim Zaubern eine Fertigkeit aus und erhalten Sie bis zu 1 Minute lang einen Bonus.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Tauschen Sie Second Wind aus, um den Nutzungsfortschritt von 5e 2024 zu verwenden. ModUi/&SwapWarlockToUseOneDndInvocationProgression=Tauschen Sie den Fortschritt der Anrufungen mit der Version 5e 2024 aus. ModUi/&TableTopButton=Tabletop-Inhalt auswählen diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 6f0127f26c..2af6f330d1 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -146,7 +146,7 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Enable Superio ModUi/&EnableMonkWeaponSpecialization=Enable Weapon Specialization at levels 2 and 11 [the selected weapon type becomes a monk weapon to you] ModUi/&EnableMulticlass=Enable multiclass [Requires Restart] ModUi/&EnableOneDnDPreparedSpellsTables=Enable all Casters to use new prepared spells tables [Bard, Cleric, Druid, Paladin, Ranger, Sorcerer, Wizard] -ModUi/&EnableOneDndHealingSpellsBuf=Enable healing dice buff on Cure Wounds, Healing Word, Mass Cure Wounds, and Mass Healing Word +ModUi/&EnableOneDndHealingSpellsUpgrade=Enable Cure Wounds, Healing Word, Mass Cure Wounds, and Mass Healing Word spells 5e version ModUi/&EnablePaladinLayOnHandsAsBonusAction=Enable Lay on Hands as bonus action ModUi/&EnablePaladinSmiteAsBonusAction=Enable Smite as bonus action ModUi/&EnablePaladinSpellCastingAtLevel1=Enable spellcasting at level 1 instead of 2 @@ -312,10 +312,10 @@ ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Swap Weapon Proficie ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip on progression ModUi/&SwapEvocationSavant=Swap Evoker Evocation Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Enable Unarmed Attack to use 5e 2024 die type progression -ModUi/&SwapOneDndBarkskinSpell=Swap Barkskin with 5e 2024 version [bonus action, no concentration, AC set to 17] -ModUi/&SwapOneDndGuidanceSpell=Swap Guidance with 5e 2024 version [Choose one skill at casting and get bonus for up to 1 minute.] +ModUi/&EnableOneDndBarkskinSpell=Enable Barkskin spell 5e 2024 version [bonus action, no concentration, AC set to 17] +ModUi/&EnableOneDndGuidanceSpell=Enable Guidance spell 5e 2024 version [Choose one skill at casting and get bonus for up to 1 minute.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Enable Second Wind to use 5e 2024 usages progression -ModUi/&SwapWarlockToUseOneDndInvocationProgression=Enable Invocations o use 5e 2024 progression +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Enable Invocations to use 5e 2024 progression ModUi/&TableTopButton=Select Tabletop content ModUi/&TableTopHelp1=• Following sections re-group and duplicate 5e 2014 and 2024 settings scattered across the mod for your convenience ModUi/&TableTopHelp2=• Press the button to select only tabletop content under Character tab, and select all options below for a true TT experience diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index de89f523a2..7e0859fb12 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -147,7 +147,7 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Habilita Defen ModUi/&EnableMonkWeaponSpecialization=Habilita la Especialización en armas en los niveles 2 y 11 [el tipo de arma seleccionado se convierte en un arma de monje para ti] ModUi/&EnableMulticlass=Habilitar multiclase [Requiere reinicio] ModUi/&EnableOneDnDPreparedSpellsTables=Permitir que todos los lanzadores de conjuros utilicen las nuevas tablas de conjuros preparadas [Bardo, Clérigo, Druida, Paladín, Explorador, Hechicero, Mago] -ModUi/&EnableOneDndHealingSpellsBuf=Habilitar la mejora de dados de curación en Curar heridas, Palabra de curación, Curar heridas en masa y Palabra de curación en masa +ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar la mejora de dados de curación en Curar heridas, Palabra de curación, Curar heridas en masa y Palabra de curación en masa ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Imposición de manos como acción adicional ModUi/&EnablePaladinSmiteAsBonusAction=Habilitar Castigar como acción adicional ModUi/&EnablePaladinSpellCastingAtLevel1=Habilitar el lanzamiento de hechizos en el nivel 1 en lugar del 2 @@ -313,8 +313,8 @@ ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Cambia la competenci ModUi/&SwapEvocationPotentCantripAndSculptSpell=Intercambia las características de Evocador, Hechizos de escultura y Truco potente ModUi/&SwapEvocationSavant=Intercambia Evocador Sabio de la evocación con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de ranura] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Cambia Ataque desarmado para usar la progresión de tipo de dado de 5e 2024 -ModUi/&SwapOneDndBarkskinSpell=Intercambia Piel de corteza con la versión 5e 2024 [acción adicional, sin concentración, CA establecida en 17] -ModUi/&SwapOneDndGuidanceSpell=Intercambia Orientación con la versión 5e 2024 [Elige una habilidad al lanzar hechizos y obtén una bonificación de hasta 1 minuto.] +ModUi/&EnableOneDndBarkskinSpell=Intercambia Piel de corteza con la versión 5e 2024 [acción adicional, sin concentración, CA establecida en 17] +ModUi/&EnableOneDndGuidanceSpell=Intercambia Orientación con la versión 5e 2024 [Elige una habilidad al lanzar hechizos y obtén una bonificación de hasta 1 minuto.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Cambia Second Wind para usar la progresión de usos de 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Intercambia la progresión de Invocaciones con la versión 5e 2024 ModUi/&TableTopButton=Seleccionar contenido de Tabletop diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index fd828086e1..4e28d29370 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -146,7 +146,7 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Activez la Dé ModUi/&EnableMonkWeaponSpecialization=Activez la spécialisation des armes aux niveaux 2 et 11 [le type d'arme sélectionné devient une arme de moine pour vous] ModUi/&EnableMulticlass=Activer multiclasse [Nécessite un redémarrage] ModUi/&EnableOneDnDPreparedSpellsTables=Permettre à tous les lanceurs de sorts d'utiliser les nouvelles tables de sorts préparés [Barde, Clerc, Druide, Paladin, Rôdeur, Sorcier, Magicien] -ModUi/&EnableOneDndHealingSpellsBuf=Activer le buff des dés de soin sur Soin des blessures, Mot de soin, Soin de masse des blessures et Mot de soin de masse +ModUi/&EnableOneDndHealingSpellsUpgrade=Activer le buff des dés de soin sur Soin des blessures, Mot de soin, Soin de masse des blessures et Mot de soin de masse ModUi/&EnablePaladinLayOnHandsAsBonusAction=Activer Imposition des mains comme action bonus ModUi/&EnablePaladinSmiteAsBonusAction=Activer Smite comme action bonus ModUi/&EnablePaladinSpellCastingAtLevel1=Activer le lancement de sorts au niveau 1 au lieu de 2 @@ -312,8 +312,8 @@ ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Échangez Maîtrise ModUi/&SwapEvocationPotentCantripAndSculptSpell=Échangez les fonctionnalités Sculpt Spells d'Evoker et Potent Cantrip ModUi/&SwapEvocationSavant=Échangez Evoker Evocation Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Remplacez Attaque non armée par la progression du type de dé 5e 2024 -ModUi/&SwapOneDndBarkskinSpell=Échangez Barkskin avec la version 5e 2024 [action bonus, pas de concentration, CA réglée à 17] -ModUi/&SwapOneDndGuidanceSpell=Échangez Guidage avec la version 5e 2024 [Choisissez une compétence au lancement et obtenez un bonus jusqu'à 1 minute.] +ModUi/&EnableOneDndBarkskinSpell=Échangez Barkskin avec la version 5e 2024 [action bonus, pas de concentration, CA réglée à 17] +ModUi/&EnableOneDndGuidanceSpell=Échangez Guidage avec la version 5e 2024 [Choisissez une compétence au lancement et obtenez un bonus jusqu'à 1 minute.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Remplacez Second Wind pour utiliser la progression des utilisations 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Échangez la progression des Invocations avec la version 5e 2024 ModUi/&TableTopButton=Sélectionnez le contenu de la table diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 2847c8af66..7c1bbdb860 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -146,7 +146,7 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Abilita Difesa ModUi/&EnableMonkWeaponSpecialization=Abilita Specializzazione nelle armi ai livelli 2 e 11 [il tipo di arma selezionato diventa per te un'arma da monaco] ModUi/&EnableMulticlass=Abilita multiclasse [Richiede riavvio] ModUi/&EnableOneDnDPreparedSpellsTables=Abilita tutti i incantatori a usare le nuove tabelle degli incantesimi preparati [Bardo, Chierico, Druido, Paladino, Ranger, Stregone, Mago] -ModUi/&EnableOneDndHealingSpellsBuf=Abilita il potenziamento dei dadi curativi su Cura Ferite, Parola Curativa, Cura Ferite di Massa e Parola Curativa di Massa +ModUi/&EnableOneDndHealingSpellsUpgrade=Abilita il potenziamento dei dadi curativi su Cura Ferite, Parola Curativa, Cura Ferite di Massa e Parola Curativa di Massa ModUi/&EnablePaladinLayOnHandsAsBonusAction=Abilita Imposizione delle mani come azione bonus ModUi/&EnablePaladinSmiteAsBonusAction=Abilita Colpisci come azione bonus ModUi/&EnablePaladinSpellCastingAtLevel1=Abilita lancio di incantesimi al livello 1 invece che 2 @@ -312,8 +312,8 @@ ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Sostituisci Competen ModUi/&SwapEvocationPotentCantripAndSculptSpell=Scambia le funzionalità Evocatore Incantesimi di Scultura e Trucchetto Potente ModUi/&SwapEvocationSavant=Sostituisci Evocatore Sapiente dell'evocazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Sostituisci Attacco disarmato per usare la progressione del tipo di dado 5e 2024 -ModUi/&SwapOneDndBarkskinSpell=Sostituisci Barkskin con la versione 5e 2024 [azione bonus, nessuna concentrazione, CA impostata a 17] -ModUi/&SwapOneDndGuidanceSpell=Sostituisci Guida con la versione 5e 2024 [Scegli un'abilità durante il lancio e ottieni un bonus fino a 1 minuto.] +ModUi/&EnableOneDndBarkskinSpell=Sostituisci Barkskin con la versione 5e 2024 [azione bonus, nessuna concentrazione, CA impostata a 17] +ModUi/&EnableOneDndGuidanceSpell=Sostituisci Guida con la versione 5e 2024 [Scegli un'abilità durante il lancio e ottieni un bonus fino a 1 minuto.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Sostituisci Second Wind per usare la progressione di utilizzo 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Scambia la progressione delle Invocazioni con la versione 5e 2024 ModUi/&TableTopButton=Seleziona contenuto Tabletop diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index adb3cfaf12..c172e37dd7 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -146,7 +146,7 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=レベル18で ModUi/&EnableMonkWeaponSpecialization=レベル 2 と 11 で 武器特化 を有効にします [選択した武器の種類がモンク武器になります] ModUi/&EnableMulticlass=マルチクラスを有効にする [再起動が必要] ModUi/&EnableOneDnDPreparedSpellsTables=すべての キャスター が新しい準備済み呪文テーブル [吟遊詩人、聖職者、ドルイド、パラディン、レンジャー、ソーサラー、ウィザード] を使用できるようにします。 -ModUi/&EnableOneDndHealingSpellsBuf=治癒の傷、治癒の言葉、大量治癒の傷、大量治癒の言葉に治癒ダイスバフを有効にします +ModUi/&EnableOneDndHealingSpellsUpgrade=治癒の傷、治癒の言葉、大量治癒の傷、大量治癒の言葉に治癒ダイスバフを有効にします ModUi/&EnablePaladinLayOnHandsAsBonusAction=ボーナスアクションとして手を置くを有効にする ModUi/&EnablePaladinSmiteAsBonusAction=ボーナスアクションとしてスマイトを有効にする ModUi/&EnablePaladinSpellCastingAtLevel1=呪文発動をレベル2ではなくレベル1で有効にする @@ -312,8 +312,8 @@ ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=武器熟練度エヴォーカースカルプトスペルとポテンシャルキャントリップの機能を入れ替えます ModUi/&SwapEvocationSavant=Evoker Evocation Savant を 5e 2024 バージョン [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびにさらに 1 つ習得する] と入れ替えます ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Unarmed Attack を 5e 2024 ダイスタイプの進行に置き換える -ModUi/&SwapOneDndBarkskinSpell=Barkskin を 5e 2024 バージョンの [ボーナス アクション、集中力なし、AC を 17 に設定] と交換します。 -ModUi/&SwapOneDndGuidanceSpell=ガイダンスを5e 2024バージョンと入れ替えます [発動時にスキルを1つ選択し、最大1分間ボーナスを獲得します。] +ModUi/&EnableOneDndBarkskinSpell=Barkskin を 5e 2024 バージョンの [ボーナス アクション、集中力なし、AC を 17 に設定] と交換します。 +ModUi/&EnableOneDndGuidanceSpell=ガイダンスを5e 2024バージョンと入れ替えます [発動時にスキルを1つ選択し、最大1分間ボーナスを獲得します。] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=セカンド ウィンド を 5e 2024 の使用進行に置き換える ModUi/&SwapWarlockToUseOneDndInvocationProgression=Invocations の進行を 5e 2024 バージョンと入れ替える ModUi/&TableTopButton=テーブルトップコンテンツを選択 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 4c31e65e17..ac36c0422a 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -146,7 +146,7 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=레벨 18에서 무기 전문화를 활성화합니다. [선택한 무기 유형이 당신에게 수도사 무기가 됩니다] ModUi/&EnableMulticlass=다중클래스 활성화 [재시작 필요] ModUi/&EnableOneDnDPreparedSpellsTables=모든 주문자가 새로 준비된 주문표 [바드, 성직자, 드루이드, 성기사, 레인저, 마법사, 마법사]를 사용할 수 있도록 합니다. -ModUi/&EnableOneDndHealingSpellsBuf=상처 치료, 치유의 말씀, 대량 상처 치료, 대량 치유의 말씀에 치유 주사위 버프를 활성화합니다. +ModUi/&EnableOneDndHealingSpellsUpgrade=상처 치료, 치유의 말씀, 대량 상처 치료, 대량 치유의 말씀에 치유 주사위 버프를 활성화합니다. ModUi/&EnablePaladinLayOnHandsAsBonusAction=안수를 보너스 액션으로 활성화합니다. ModUi/&EnablePaladinSmiteAsBonusAction=Smite를 보너스 액션으로 활성화합니다. ModUi/&EnablePaladinSpellCastingAtLevel1=레벨 2 대신 레벨 1에서 주문 시전을 활성화합니다. @@ -312,8 +312,8 @@ ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=무기 숙련도소환사 조각 주문과 강력한 주문 기능을 교체하세요 ModUi/&SwapEvocationSavant=Evoker Evocation Savant를 5e 2024 버전으로 교체하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=비무장 공격을 5e 2024 주사위 유형 진행을 사용하도록 바꾸세요. -ModUi/&SwapOneDndBarkskinSpell=Barkskin을 5e 2024 버전 [보너스 액션, 집중 없음, AC 17로 설정]과 교환하세요 -ModUi/&SwapOneDndGuidanceSpell=가이드를 5e 2024 버전으로 바꾸세요 [시전 시 스킬 하나를 선택하면 최대 1분 동안 보너스를 받습니다.] +ModUi/&EnableOneDndBarkskinSpell=Barkskin을 5e 2024 버전 [보너스 액션, 집중 없음, AC 17로 설정]과 교환하세요 +ModUi/&EnableOneDndGuidanceSpell=가이드를 5e 2024 버전으로 바꾸세요 [시전 시 스킬 하나를 선택하면 최대 1분 동안 보너스를 받습니다.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Second Wind를 5e 2024 사용 진행을 사용하도록 바꾸세요. ModUi/&SwapWarlockToUseOneDndInvocationProgression=Invocations 진행을 5e 2024 버전으로 바꾸세요 ModUi/&TableTopButton=테이블탑 콘텐츠 선택 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 70ded88ca3..cd171ae01f 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -146,7 +146,7 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Habilitar Defe ModUi/&EnableMonkWeaponSpecialization=Habilite Especialização em Armas nos níveis 2 e 11 [o tipo de arma selecionado se torna uma arma de monge para você] ModUi/&EnableMulticlass=Habilitar multiclasse [Requer reinicialização] ModUi/&EnableOneDnDPreparedSpellsTables=Permitir que todos os Conjuradores usem novas tabelas de magias preparadas [Bardo, Clérigo, Druida, Paladino, Patrulheiro, Feiticeiro, Mago] -ModUi/&EnableOneDndHealingSpellsBuf=Habilitar bônus de dados de cura em Curar Ferimentos, Palavra de Cura, Curar Ferimentos em Massa e Palavra de Cura em Massa +ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar bônus de dados de cura em Curar Ferimentos, Palavra de Cura, Curar Ferimentos em Massa e Palavra de Cura em Massa ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Impor as Mãos como ação bônus ModUi/&EnablePaladinSmiteAsBonusAction=Habilitar Smite como ação bônus ModUi/&EnablePaladinSpellCastingAtLevel1=Habilitar conjuração de feitiços no nível 1 em vez de 2 @@ -312,8 +312,8 @@ ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Troque Proficiência ModUi/&SwapEvocationPotentCantripAndSculptSpell=Troque os recursos Evocador Magias de Esculpir e Truque Potente ModUi/&SwapEvocationSavant=Troque Evocador Sábio da Evocação pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Troque Ataque Desarmado para usar a progressão do tipo de dado 5e 2024 -ModUi/&SwapOneDndBarkskinSpell=Troque Barkskin pela versão 5e 2024 [ação bônus, sem concentração, CA definida como 17] -ModUi/&SwapOneDndGuidanceSpell=Troque Orientação pela versão 5e 2024 [Escolha uma habilidade na conjuração e ganhe bônus por até 1 minuto.] +ModUi/&EnableOneDndBarkskinSpell=Troque Barkskin pela versão 5e 2024 [ação bônus, sem concentração, CA definida como 17] +ModUi/&EnableOneDndGuidanceSpell=Troque Orientação pela versão 5e 2024 [Escolha uma habilidade na conjuração e ganhe bônus por até 1 minuto.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Troque Segundo Vento para usar a progressão de usos do 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Troque a progressão de Invocações pela versão 5e 2024 ModUi/&TableTopButton=Selecionar conteúdo de mesa diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 8f2aaa46c4..5167f9c71f 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -146,7 +146,7 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Включить Специализацию на оружии на уровнях 2 и 11 [оружие выбранного типа становится для вас оружием монаха] ModUi/&EnableMulticlass=Включить мультиклассирование [Необходим перезапуск] ModUi/&EnableOneDnDPreparedSpellsTables=Разрешить всем заклинателям использовать новые подготовленные таблицы заклинаний [Бард, Клирик, Друид, Паладин, Рейнджер, Колдун, Волшебник] -ModUi/&EnableOneDndHealingSpellsBuf=Включить улучшение костей лечения для Лечения ран, Лечащего слова, Множественного лечения ран и Множественного лечащего слова [OneDnd] +ModUi/&EnableOneDndHealingSpellsUpgrade=Включить улучшение костей лечения для Лечения ран, Лечащего слова, Множественного лечения ран и Множественного лечащего слова [OneDnd] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Включить Наложение рук бонусным действием [OneDnd] ModUi/&EnablePaladinSmiteAsBonusAction=Включить Кару бонусным действием [OneDnd] ModUi/&EnablePaladinSpellCastingAtLevel1=Включить заклинание на уровне 1 вместо 2 @@ -312,8 +312,8 @@ ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Поменяйте ModUi/&SwapEvocationPotentCantripAndSculptSpell=Поменяйте местами функции Evoker Sculpt Spells и Potent Cantrip ModUi/&SwapEvocationSavant=Замените Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Поменяйте Безоружная атака на использование прогрессии типа кубика 5e 2024 -ModUi/&SwapOneDndBarkskinSpell=Поменяйте Barkskin на версию 5e 2024 [бонусное действие, нет концентрации, AC установлен на 17] -ModUi/&SwapOneDndGuidanceSpell=Поменяйте руководство с версией 5e 2024 [Выберите один навык при касте и получите бонус на срок до 1 минуты.] +ModUi/&EnableOneDndBarkskinSpell=Поменяйте Barkskin на версию 5e 2024 [бонусное действие, нет концентрации, AC установлен на 17] +ModUi/&EnableOneDndGuidanceSpell=Поменяйте руководство с версией 5e 2024 [Выберите один навык при касте и получите бонус на срок до 1 минуты.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Поменяйте Второе дыхание на использование прогрессии использования 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Поменять местами прогрессию Invocations с версией 5e 2024 ModUi/&TableTopButton=Выберите содержимое Tabletop diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 25b645b745..1bea03b260 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -146,7 +146,7 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=在 18 级时启用武器专精 [所选武器类型将成为你的武僧武器] ModUi/&EnableMulticlass=启用多类 [需要重启] ModUi/&EnableOneDnDPreparedSpellsTables=允许所有施法者使用新的准备好的法术表[吟游诗人、牧师、德鲁伊、圣骑士、游侠、术士、魔法师] -ModUi/&EnableOneDndHealingSpellsBuf=在治愈伤口、治愈之言、群体治愈伤口和群体治愈之言上启用治疗骰子增益 +ModUi/&EnableOneDndHealingSpellsUpgrade=在治愈伤口、治愈之言、群体治愈伤口和群体治愈之言上启用治疗骰子增益 ModUi/&EnablePaladinLayOnHandsAsBonusAction=启用圣疗术作为奖励行动 ModUi/&EnablePaladinSmiteAsBonusAction=启用 Smite 作为奖励行动 ModUi/&EnablePaladinSpellCastingAtLevel1=在 1 级(而非 2 级)启用施法 @@ -312,8 +312,8 @@ ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=将武器熟练度召唤师 塑形法术和强力法术功能 ModUi/&SwapEvocationSavant=将Evoker Evocation Savant 与 5e 2024 版本交换[获得时学习 2 个学校法术,每次获得一个插槽等级时再学习 1 个] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=切换徒手攻击以使用 5e 2024 骰子类型进程 -ModUi/&SwapOneDndBarkskinSpell=将 Barkskin 与 5e 2024 版本交换[奖励行动,无集中力,AC 设置为 17] -ModUi/&SwapOneDndGuidanceSpell=将Guidance与 5e 2024 版本交换[施法时选择一项技能并获得最多 1 分钟的奖励。] +ModUi/&EnableOneDndBarkskinSpell=将 Barkskin 与 5e 2024 版本交换[奖励行动,无集中力,AC 设置为 17] +ModUi/&EnableOneDndGuidanceSpell=将Guidance与 5e 2024 版本交换[施法时选择一项技能并获得最多 1 分钟的奖励。] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=交换 Second Wind 以使用 5e 2024 使用进度 ModUi/&SwapWarlockToUseOneDndInvocationProgression=将 Invocations 进程与 5e 2024 版本交换 ModUi/&TableTopButton=选择桌面内容 From 9c462eec97c9099cc8908a23ebac7515681befbf Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 16:05:24 -0800 Subject: [PATCH 50/85] continue models reorg --- .../Displays/CraftingAndItems.cs | 6 +- .../Displays/GeneralDisplay.cs | 2 +- .../Displays/SpellsDisplay.cs | 18 +- .../Displays/SubclassesDisplay.cs | 4 +- SolastaUnfinishedBusiness/Feats/ClassFeats.cs | 4 +- .../Models/BootContext.cs | 3 +- .../Models/CustomItemsContext.cs | 233 +++++- .../Models/FixesContext.cs | 24 + .../Models/RacesContext.cs | 20 + .../{CharacterContext.cs => RulesContext.cs} | 138 +++- .../Models/SpellsContext.cs | 330 +++++++- .../Models/SrdAndHouseRulesContext.cs | 742 ------------------ .../Models/SubclassesContext.cs | 39 + .../Models/Tabletop2014Context.cs | 2 - .../Patches/AttackEvaluationParamsPatcher.cs | 6 +- ...CharacterStageAbilityScoresPanelPatcher.cs | 16 +- .../GameLocationCharacterManagerPatcher.cs | 2 +- .../Patches/RulesetActorPatcher.cs | 2 +- .../Patches/RulesetCharacterHeroPatcher.cs | 2 +- .../Patches/RulesetCharacterPatcher.cs | 2 +- .../WieldedConfigurationSelectorPatcher.cs | 2 +- .../Spells/SpellBuildersCantrips.cs | 6 +- .../Spells/SpellBuildersLevel01.cs | 4 +- .../Subclasses/InnovationWeapon.cs | 4 +- 24 files changed, 807 insertions(+), 804 deletions(-) rename SolastaUnfinishedBusiness/Models/{CharacterContext.cs => RulesContext.cs} (85%) delete mode 100644 SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs diff --git a/SolastaUnfinishedBusiness/Displays/CraftingAndItems.cs b/SolastaUnfinishedBusiness/Displays/CraftingAndItems.cs index 54d2848e30..8fad656c1d 100644 --- a/SolastaUnfinishedBusiness/Displays/CraftingAndItems.cs +++ b/SolastaUnfinishedBusiness/Displays/CraftingAndItems.cs @@ -108,14 +108,14 @@ internal static void DisplayCraftingAndItems() if (UI.Toggle(Gui.Localize("ModUi/&AllowAnyClassToWearSylvanArmor"), ref toggle, UI.AutoWidth())) { Main.Settings.AllowAnyClassToWearSylvanArmor = toggle; - SrdAndHouseRulesContext.SwitchUniversalSylvanArmorAndLightbringer(); + CustomItemsContext.SwitchUniversalSylvanArmorAndLightbringer(); } toggle = Main.Settings.AllowClubsToBeThrown; if (UI.Toggle(Gui.Localize("ModUi/&AllowClubsToBeThrown"), ref toggle, UI.AutoWidth())) { Main.Settings.AllowClubsToBeThrown = toggle; - SrdAndHouseRulesContext.SwitchAllowClubsToBeThrown(); + CustomItemsContext.SwitchAllowClubsToBeThrown(); } toggle = Main.Settings.UseOfficialFoodRationsWeight; @@ -129,7 +129,7 @@ internal static void DisplayCraftingAndItems() if (UI.Toggle(Gui.Localize("ModUi/&MakeAllMagicStaveArcaneFoci"), ref toggle, UI.AutoWidth())) { Main.Settings.MakeAllMagicStaveArcaneFoci = toggle; - SrdAndHouseRulesContext.SwitchMagicStaffFoci(); + CustomItemsContext.SwitchMagicStaffFoci(); } toggle = Main.Settings.FixRingOfRegenerationHealRate; diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 518e99fe9a..0fcc2b1e3b 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -902,7 +902,7 @@ private static void DisplayTabletop() if (UI.Toggle(Gui.Localize("ModUi/&RemoveRecurringEffectOnEntangle"), ref toggle, UI.AutoWidth())) { Main.Settings.RemoveRecurringEffectOnEntangle = toggle; - SrdAndHouseRulesContext.SwitchRecurringEffectOnEntangle(); + SpellsContext.SwitchRecurringEffectOnEntangle(); } toggle = Main.Settings.FixEldritchBlastRange; diff --git a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs index 40641100d2..a90292612d 100644 --- a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs @@ -30,7 +30,7 @@ private static void DisplaySpellsGeneral() if (UI.Toggle(Gui.Localize("ModUi/&AllowBladeCantripsToUseReach"), ref toggle, UI.AutoWidth())) { Main.Settings.AllowBladeCantripsToUseReach = toggle; - SrdAndHouseRulesContext.SwitchAllowBladeCantripsToUseReach(); + SpellsContext.SwitchAllowBladeCantripsToUseReach(); } toggle = Main.Settings.EnableOneDnDPreparedSpellsTables; @@ -67,21 +67,21 @@ private static void DisplaySpellsGeneral() UI.AutoWidth())) { Main.Settings.AllowTargetingSelectionWhenCastingChainLightningSpell = toggle; - SrdAndHouseRulesContext.SwitchAllowTargetingSelectionWhenCastingChainLightningSpell(); + SpellsContext.SwitchAllowTargetingSelectionWhenCastingChainLightningSpell(); } toggle = Main.Settings.RemoveHumanoidFilterOnHideousLaughter; if (UI.Toggle(Gui.Localize("ModUi/&RemoveHumanoidFilterOnHideousLaughter"), ref toggle, UI.AutoWidth())) { Main.Settings.RemoveHumanoidFilterOnHideousLaughter = toggle; - SrdAndHouseRulesContext.SwitchFilterOnHideousLaughter(); + SpellsContext.SwitchFilterOnHideousLaughter(); } toggle = Main.Settings.AddBleedingToLesserRestoration; if (UI.Toggle(Gui.Localize("ModUi/&AddBleedingToLesserRestoration"), ref toggle, UI.AutoWidth())) { Main.Settings.AddBleedingToLesserRestoration = toggle; - SrdAndHouseRulesContext.SwitchAddBleedingToLesserRestoration(); + SpellsContext.SwitchAddBleedingToLesserRestoration(); } toggle = Main.Settings.BestowCurseNoConcentrationRequiredForSlotLevel5OrAbove; @@ -95,7 +95,7 @@ private static void DisplaySpellsGeneral() if (UI.Toggle(Gui.Localize("ModUi/&RemoveRecurringEffectOnEntangle"), ref toggle, UI.AutoWidth())) { Main.Settings.RemoveRecurringEffectOnEntangle = toggle; - SrdAndHouseRulesContext.SwitchRecurringEffectOnEntangle(); + SpellsContext.SwitchRecurringEffectOnEntangle(); } toggle = Main.Settings.EnableUpcastConjureElementalAndFey; @@ -103,7 +103,7 @@ private static void DisplaySpellsGeneral() { Main.Settings.EnableUpcastConjureElementalAndFey = toggle; Main.Settings.OnlyShowMostPowerfulUpcastConjuredElementalOrFey = false; - SrdAndHouseRulesContext.SwitchEnableUpcastConjureElementalAndFey(); + SpellsContext.SwitchEnableUpcastConjureElementalAndFey(); } if (Main.Settings.EnableUpcastConjureElementalAndFey) @@ -122,14 +122,14 @@ private static void DisplaySpellsGeneral() if (UI.Toggle(Gui.Localize("ModUi/&ChangeSleetStormToCube"), ref toggle, UI.AutoWidth())) { Main.Settings.ChangeSleetStormToCube = toggle; - SrdAndHouseRulesContext.SwitchChangeSleetStormToCube(); + SpellsContext.SwitchChangeSleetStormToCube(); } toggle = Main.Settings.UseHeightOneCylinderEffect; if (UI.Toggle(Gui.Localize("ModUi/&UseHeightOneCylinderEffect"), ref toggle, UI.AutoWidth())) { Main.Settings.UseHeightOneCylinderEffect = toggle; - SrdAndHouseRulesContext.SwitchUseHeightOneCylinderEffect(); + SpellsContext.SwitchUseHeightOneCylinderEffect(); } toggle = Main.Settings.FixEldritchBlastRange; @@ -175,7 +175,7 @@ private static void DisplaySpellsGeneral() if (UI.Toggle(Gui.Localize("ModUi/&AllowHasteCasting"), ref toggle, UI.AutoWidth())) { Main.Settings.AllowHasteCasting = toggle; - SrdAndHouseRulesContext.SwitchHastedCasing(); + SpellsContext.SwitchHastedCasing(); } toggle = Main.Settings.AllowStackedMaterialComponent; diff --git a/SolastaUnfinishedBusiness/Displays/SubclassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/SubclassesDisplay.cs index 12b197d5ec..05bba64266 100644 --- a/SolastaUnfinishedBusiness/Displays/SubclassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SubclassesDisplay.cs @@ -87,14 +87,14 @@ private static void DisplaySubclassesGeneral() if (UI.Toggle(Gui.Localize("ModUi/&RemoveSchoolRestrictionsFromShadowCaster"), ref toggle, UI.AutoWidth())) { Main.Settings.RemoveSchoolRestrictionsFromShadowCaster = toggle; - SrdAndHouseRulesContext.SwitchSchoolRestrictionsFromShadowCaster(); + SubclassesContext.SwitchSchoolRestrictionsFromShadowCaster(); } toggle = Main.Settings.RemoveSchoolRestrictionsFromSpellBlade; if (UI.Toggle(Gui.Localize("ModUi/&RemoveSchoolRestrictionsFromSpellBlade"), ref toggle, UI.AutoWidth())) { Main.Settings.RemoveSchoolRestrictionsFromSpellBlade = toggle; - SrdAndHouseRulesContext.SwitchSchoolRestrictionsFromSpellBlade(); + SubclassesContext.SwitchSchoolRestrictionsFromSpellBlade(); } UI.Label(); diff --git a/SolastaUnfinishedBusiness/Feats/ClassFeats.cs b/SolastaUnfinishedBusiness/Feats/ClassFeats.cs index 1a39511e14..322ef95c57 100644 --- a/SolastaUnfinishedBusiness/Feats/ClassFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/ClassFeats.cs @@ -220,8 +220,8 @@ private static FeatDefinitionWithPrerequisites BuildExpandTheHunt() .SetFeatures( AttributeModifierCreed_Of_Maraike, FeatureDefinitionPointPools.PointPoolBackgroundLanguageChoice_one, - CharacterContext.InvocationPoolRangerPreferredEnemy, - CharacterContext.InvocationPoolRangerTerrainType) + RulesContext.InvocationPoolRangerPreferredEnemy, + RulesContext.InvocationPoolRangerTerrainType) .SetValidators(ValidatorsFeat.IsRangerLevel4) .AddToDB(); } diff --git a/SolastaUnfinishedBusiness/Models/BootContext.cs b/SolastaUnfinishedBusiness/Models/BootContext.cs index 53bdf09769..32a0834b6e 100644 --- a/SolastaUnfinishedBusiness/Models/BootContext.cs +++ b/SolastaUnfinishedBusiness/Models/BootContext.cs @@ -91,7 +91,7 @@ internal static void Startup() FeatsContext.LateLoad(); // Late initialized to allow feats and races from other mods - CharacterContext.LateLoad(); + RulesContext.LateLoad(); // Custom invocations InvocationsContext.LateLoad(); @@ -118,7 +118,6 @@ internal static void Startup() SharedSpellsContext.LateLoad(); // Set anything on subs that depends on spells and others - SrdAndHouseRulesContext.LateLoad(); Tabletop2014Context.LateLoad(); Tabletop2024Context.LateLoad(); diff --git a/SolastaUnfinishedBusiness/Models/CustomItemsContext.cs b/SolastaUnfinishedBusiness/Models/CustomItemsContext.cs index a13b576386..730a0d62aa 100644 --- a/SolastaUnfinishedBusiness/Models/CustomItemsContext.cs +++ b/SolastaUnfinishedBusiness/Models/CustomItemsContext.cs @@ -1,11 +1,20 @@ -using SolastaUnfinishedBusiness.Builders; +using System.Collections.Generic; +using System.Linq; +using SolastaUnfinishedBusiness.Api.GameExtensions; +using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; +using SolastaUnfinishedBusiness.Interfaces; +using SolastaUnfinishedBusiness.Validators; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; +using static RuleDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ItemDefinitions; namespace SolastaUnfinishedBusiness.Models; internal static class CustomItemsContext { + private static readonly Dictionary Tags = []; private static ItemDefinition _helmOfAwareness; private static ItemDefinition _glovesOfThievery; @@ -16,16 +25,22 @@ internal static void Load() { _helmOfAwareness ??= BuildHelmOfAwareness(); _glovesOfThievery ??= BuildGlovesOfThievery(); + + LoadAfterRestIdentify(); + + SwitchAllowClubsToBeThrown(); + SwitchUniversalSylvanArmorAndLightbringer(); + SwitchMagicStaffFoci(); } private static ItemDefinition BuildHelmOfAwareness() { var item = ItemDefinitionBuilder .Create("HelmOfAwareness") - .SetGuiPresentation(Category.Item, ItemDefinitions.HelmOfComprehendingLanguages) - .SetItemPresentation(ItemDefinitions.HelmOfComprehendingLanguages) + .SetGuiPresentation(Category.Item, HelmOfComprehendingLanguages) + .SetItemPresentation(HelmOfComprehendingLanguages) .SetMerchantCategory(MerchantCategoryDefinitions.MagicDevice) - .SetItemRarity(RuleDefinitions.ItemRarity.Rare) + .SetItemRarity(ItemRarity.Rare) .MakeMagical() .RequireAttunement() .SetSlotTypes(SlotTypeDefinitions.HeadSlot, SlotTypeDefinitions.ContainerSlot) @@ -55,10 +70,10 @@ private static ItemDefinition BuildGlovesOfThievery() { var item = ItemDefinitionBuilder .Create("GlovesOfThievery") - .SetGuiPresentation(Category.Item, ItemDefinitions.GlovesOfMissileSnaring) - .SetItemPresentation(ItemDefinitions.GlovesOfMissileSnaring) + .SetGuiPresentation(Category.Item, GlovesOfMissileSnaring) + .SetItemPresentation(GlovesOfMissileSnaring) .SetMerchantCategory(MerchantCategoryDefinitions.MagicDevice) - .SetItemRarity(RuleDefinitions.ItemRarity.Uncommon) + .SetItemRarity(ItemRarity.Uncommon) .MakeMagical() .NoAttunement() .SetSlotTypes(SlotTypeDefinitions.GlovesSlot, SlotTypeDefinitions.ContainerSlot) @@ -71,9 +86,9 @@ private static ItemDefinition BuildGlovesOfThievery() .Create("AbilityCheckAffinityGlovesOfThievery") .SetGuiPresentation("GlovesOfThievery", Category.Item, Gui.NoLocalization) .BuildAndSetAffinityGroups( - RuleDefinitions.CharacterAbilityCheckAffinity.None, - RuleDefinitions.DieType.D1, 5, - RuleDefinitions.AbilityCheckGroupOperation.AddDie, + CharacterAbilityCheckAffinity.None, + DieType.D1, 5, + AbilityCheckGroupOperation.AddDie, (AttributeDefinitions.Dexterity, SkillDefinitions.SleightOfHand), (AttributeDefinitions.Dexterity, ToolDefinitions.ThievesToolsType)) .AddToDB(), false)) @@ -84,4 +99,202 @@ private static ItemDefinition BuildGlovesOfThievery() MerchantContext.AddItem(item, ShopItemType.MagicItemUncommon); return item; } + + private static void LoadAfterRestIdentify() + { + const string AfterRestIdentifyName = "PowerAfterRestIdentify"; + + RestActivityDefinitionBuilder + .Create("RestActivityShortRestIdentify") + .SetGuiPresentation(AfterRestIdentifyName, Category.Feature) + .AddCustomSubFeatures(new ValidateRestActivity(false, false)) + .SetRestData( + RestDefinitions.RestStage.AfterRest, + RestType.ShortRest, + RestActivityDefinition.ActivityCondition.None, + PowerBundleContext.UseCustomRestPowerFunctorName, + AfterRestIdentifyName) + .AddToDB(); + + RestActivityDefinitionBuilder + .Create("RestActivityLongRestIdentify") + .SetGuiPresentation(AfterRestIdentifyName, Category.Feature) + .AddCustomSubFeatures(new ValidateRestActivity(false, false)) + .SetRestData( + RestDefinitions.RestStage.AfterRest, + RestType.LongRest, + RestActivityDefinition.ActivityCondition.None, + PowerBundleContext.UseCustomRestPowerFunctorName, + AfterRestIdentifyName) + .AddToDB(); + + var afterRestIdentifyCondition = ConditionDefinitionBuilder + .Create("AfterRestIdentify") + .SetGuiPresentation(Category.Condition) + .AddCustomSubFeatures(OnConditionAddedOrRemovedIdentifyItems.Mark) + .AddToDB(); + + FeatureDefinitionPowerBuilder + .Create(AfterRestIdentifyName) + .SetGuiPresentation(Category.Feature, hidden: true) + .AddCustomSubFeatures(CanIdentifyOnRest.Mark) + .SetUsesFixed(ActivationTime.Rest) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetTargetingData( + Side.Ally, + RangeType.Self, + 1, + TargetType.Self) + .SetDurationData( + DurationType.Minute, + 1) + .SetEffectForms( + EffectFormBuilder + .Create() + .SetConditionForm( + afterRestIdentifyCondition, + ConditionForm.ConditionOperation.Add) + .Build()) + .Build()) + .AddToDB(); + } + + internal static void SwitchAllowClubsToBeThrown() + { + var db = DatabaseRepository.GetDatabase(); + + foreach (var itemDefinition in db + .Where(x => x.IsWeapon && + x.WeaponDescription.WeaponTypeDefinition == WeaponTypeDefinitions.ClubType)) + { + if (Main.Settings.AllowClubsToBeThrown) + { + itemDefinition.WeaponDescription.WeaponTags.Add(TagsDefinitions.WeaponTagThrown); + itemDefinition.WeaponDescription.maxRange = 10; + } + else + { + itemDefinition.WeaponDescription.WeaponTags.Remove(TagsDefinitions.WeaponTagThrown); + itemDefinition.WeaponDescription.maxRange = 5; + } + } + } + + internal static void SwitchUniversalSylvanArmorAndLightbringer() + { + GreenmageArmor.RequiredAttunementClasses.Clear(); + WizardClothes_Alternate.RequiredAttunementClasses.Clear(); + + if (Main.Settings.AllowAnyClassToWearSylvanArmor) + { + return; + } + + var allowedClasses = new[] { Wizard, Sorcerer, Warlock }; + + GreenmageArmor.RequiredAttunementClasses.AddRange(allowedClasses); + WizardClothes_Alternate.RequiredAttunementClasses.AddRange(allowedClasses); + } + + internal static void SwitchMagicStaffFoci() + { + if (!Main.Settings.MakeAllMagicStaveArcaneFoci) + { + return; + } + + foreach (var item in DatabaseRepository.GetDatabase() + .Where(x => x.IsWeapon) // WeaponDescription could be null + .Where(x => x.WeaponDescription.WeaponType == EquipmentDefinitions.WeaponTypeQuarterstaff) + .Where(x => x.Magical && !x.Name.Contains("OfHealing"))) + { + item.IsFocusItem = true; + item.FocusItemDescription.focusType = EquipmentDefinitions.FocusType.Arcane; + } + } + + internal static bool IsAttackModeInvalid(RulesetCharacter character, RulesetAttackMode mode) + { + if (character is not RulesetCharacterHero hero) + { + return false; + } + + return IsHandCrossbowUseInvalid(mode.sourceObject as RulesetItem, hero, + hero.GetItemInSlot(EquipmentDefinitions.SlotTypeMainHand), + hero.GetItemInSlot(EquipmentDefinitions.SlotTypeOffHand)); + } + + internal static bool IsHandCrossbowUseInvalid( + RulesetItem item, + RulesetCharacterHero hero, + RulesetItem main, + RulesetItem off) + { + if (Main.Settings.IgnoreHandXbowFreeHandRequirements) + { + return false; + } + + if (item == null || hero == null) + { + return false; + } + + Tags.Clear(); + item.FillTags(Tags, hero, true); + + if (!Tags.ContainsKey(TagsDefinitions.WeaponTagAmmunition) || + Tags.ContainsKey(TagsDefinitions.WeaponTagTwoHanded)) + { + return false; + } + + if (main == item && off != null) + { + return true; + } + + return off == item + && main != null + && main.ItemDefinition.WeaponDescription?.WeaponType != WeaponTypeDefinitions.UnarmedStrikeType.Name; + } + + + private sealed class CanIdentifyOnRest : IValidatePowerUse + { + private CanIdentifyOnRest() + { + } + + public static CanIdentifyOnRest Mark { get; } = new(); + + public bool CanUsePower(RulesetCharacter character, FeatureDefinitionPower power) + { + //does this work properly for wild-shaped heroes? + if (character is not RulesetCharacterHero hero) + { + return false; + } + + return Main.Settings.IdentifyAfterRest && hero.HasNonIdentifiedItems(); + } + } + + private sealed class OnConditionAddedOrRemovedIdentifyItems : IOnConditionAddedOrRemoved + { + public static OnConditionAddedOrRemovedIdentifyItems Mark { get; } = new(); + + public void OnConditionAdded(RulesetCharacter target, RulesetCondition rulesetCondition) + { + target.GetOriginalHero()?.AutoIdentifyInventoryItems(); + } + + public void OnConditionRemoved(RulesetCharacter target, RulesetCondition rulesetCondition) + { + // empty + } + } } diff --git a/SolastaUnfinishedBusiness/Models/FixesContext.cs b/SolastaUnfinishedBusiness/Models/FixesContext.cs index 88fac47a89..f81eab1b31 100644 --- a/SolastaUnfinishedBusiness/Models/FixesContext.cs +++ b/SolastaUnfinishedBusiness/Models/FixesContext.cs @@ -94,6 +94,7 @@ internal static void LateLoad() FixPaladinAurasDisplayOnActionBar(); ReportDashing(); FixSpikeGrowthAffectingAir(); + NoTwinnedBladeCantrips(); // fix Dazzled attribute modifier UI previously displaying Daaaaal on attribute modifier AttributeModifierDazzled.GuiPresentation.title = "Feature/&AttributeModifierDazzledTitle"; @@ -103,6 +104,11 @@ internal static void LateLoad() Main.Settings.OverridePartySize = Math.Min(Main.Settings.OverridePartySize, ToolsContext.MaxPartySize); } + private static void NoTwinnedBladeCantrips() + { + MetamagicOptionDefinitions.MetamagicTwinnedSpell.AddCustomSubFeatures(NoTwinned.Validator); + } + private static void InitMagicAffinitiesAndCastSpells() { // required to avoid issues on how game calculates caster / spell levels and some trace error messages @@ -765,6 +771,24 @@ private static void AddAdditionalActionTitles() DatabaseHelper.ActionDefinitions.ActionSurge.GuiPresentation.Title; } + internal sealed class NoTwinned + { + public static readonly ValidateMetamagicApplication Validator = + (RulesetCharacter _, RulesetEffectSpell spell, MetamagicOptionDefinition _, ref bool result, + ref string failure) => + { + if (!spell.SpellDefinition.HasSubFeatureOfType()) + { + return; + } + + result = false; + failure = "Failure/&FailureFlagInvalidSingleTarget"; + }; + + public static NoTwinned Mark { get; } = new(); + } + private sealed class AllowRerollDiceGreatWeapon : IAllowRerollDice { public bool IsValid(RulesetActor rulesetActor, bool attackModeDamage, DamageForm damageForm) diff --git a/SolastaUnfinishedBusiness/Models/RacesContext.cs b/SolastaUnfinishedBusiness/Models/RacesContext.cs index e37338935f..9300242399 100644 --- a/SolastaUnfinishedBusiness/Models/RacesContext.cs +++ b/SolastaUnfinishedBusiness/Models/RacesContext.cs @@ -2,6 +2,8 @@ using System.Linq; using HarmonyLib; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Api; +using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.Races; @@ -243,4 +245,22 @@ internal static void SwitchDragonbornElementalBreathUsages() } } } + + internal static void HandleSmallRaces(BattleDefinitions.AttackEvaluationParams evaluationParams) + { + if (!Main.Settings.UseOfficialSmallRacesDisWithHeavyWeapons) + { + return; + } + + var hero = evaluationParams.attacker.RulesetCharacter.GetOriginalHero(); + + if (hero?.RaceDefinition.SizeDefinition == DatabaseHelper.CharacterSizeDefinitions.Small && + evaluationParams.attackMode is { SourceDefinition: ItemDefinition { IsWeapon: true } itemDefinition } && + itemDefinition.WeaponDescription.WeaponTags.Contains(TagsDefinitions.WeaponTagHeavy)) + { + evaluationParams.attackModifier.AttackAdvantageTrends.Add( + new TrendInfo(-1, FeatureSourceType.Unknown, "Feedback/&SmallRace", null)); + } + } } diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/RulesContext.cs similarity index 85% rename from SolastaUnfinishedBusiness/Models/CharacterContext.cs rename to SolastaUnfinishedBusiness/Models/RulesContext.cs index 96671e31bc..545b1ef06b 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/RulesContext.cs @@ -23,10 +23,13 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MorphotypeElementDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ConditionDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MonsterDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSenses; namespace SolastaUnfinishedBusiness.Models; -internal static class CharacterContext +internal static class RulesContext { internal const int GameMaxAttribute = 15; internal const int GameBuyPoints = 27; @@ -110,10 +113,20 @@ internal static class CharacterContext .Build()) .AddToDB(); + private static readonly List MonstersThatEmitLight = + [ + CubeOfLight, + Fire_Elemental, + Fire_Jester, + Fire_Osprey, + Fire_Spider + ]; + internal static void LateLoad() { LoadAdditionalNames(); LoadEpicArray(); + LoadSenseNormalVisionRangeMultiplier(); LoadVisuals(); LoadSorcererQuickened(); SwitchDruidKindredBeastToUseCustomInvocationPools(); @@ -129,6 +142,31 @@ internal static void LateLoad() InvocationPoolTypeCustom.Pools.SorcererDraconicChoice); } + private static void LoadSenseNormalVisionRangeMultiplier() + { + _ = ConditionDefinitionBuilder + .Create("ConditionSenseNormalVision24") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .SetFeatures(FeatureDefinitionSenseBuilder + .Create(SenseNormalVision, "SenseNormalVision24") + .SetSense(SenseMode.Type.NormalVision, 24) + .AddToDB()) + .SetSpecialInterruptions(ConditionInterruption.BattleEnd) + .AddToDB(); + + _ = ConditionDefinitionBuilder + .Create("ConditionSenseNormalVision48") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .SetFeatures(FeatureDefinitionSenseBuilder + .Create(SenseNormalVision, "SenseNormalVision48") + .SetSense(SenseMode.Type.NormalVision, 48) + .AddToDB()) + .SetSpecialInterruptions(ConditionInterruption.BattleEnd) + .AddToDB(); + } + private static void AddNameToRace(CharacterRaceDefinition raceDefinition, string gender, string name) { var racePresentation = raceDefinition.RacePresentation; @@ -621,6 +659,104 @@ private static void SwitchSubclassAncestriesToUseCustomInvocationPools( characterSubclassDefinition.FeatureUnlocks.SetRange(replacedFeatures); } + internal static void AddLightSourceIfNeeded(GameLocationCharacter gameLocationCharacter) + { + if (!Main.Settings.EnableCharactersOnFireToEmitLight) + { + return; + } + + if (gameLocationCharacter.RulesetCharacter is not RulesetCharacterMonster rulesetCharacterMonster) + { + return; + } + + if (!MonstersThatEmitLight.Contains(rulesetCharacterMonster.MonsterDefinition)) + { + return; + } + + AddLightSource(gameLocationCharacter, rulesetCharacterMonster, "ShouldEmitLightFromMonster"); + } + + internal static void AddLightSourceIfNeeded(RulesetActor rulesetActor, RulesetCondition rulesetCondition) + { + if (!Main.Settings.EnableCharactersOnFireToEmitLight) + { + return; + } + + if (rulesetCondition == null || !rulesetCondition.ConditionDefinition.IsSubtypeOf(ConditionOnFire.Name)) + { + return; + } + + if (rulesetActor is not RulesetCharacter rulesetCharacter) + { + return; + } + + var gameLocationCharacter = GameLocationCharacter.GetFromActor(rulesetCharacter); + + if (gameLocationCharacter == null) + { + return; + } + + AddLightSource(gameLocationCharacter, rulesetCharacter, "ShouldEmitLightFromCondition"); + } + + private static void AddLightSource( + GameLocationCharacter gameLocationCharacter, + RulesetCharacter rulesetCharacter, + string name) + { + var lightSourceForm = Shine.EffectDescription.EffectForms[0].LightSourceForm; + + rulesetCharacter.PersonalLightSource?.Unregister(); + rulesetCharacter.PersonalLightSource = new RulesetLightSource( + lightSourceForm.Color, + 2, + 4, + lightSourceForm.GraphicsPrefabAssetGUID, + LightSourceType.Basic, + name, + rulesetCharacter.Guid); + + rulesetCharacter.PersonalLightSource.Register(true); + + ServiceRepository.GetService()? + .AddCharacterLightSource(gameLocationCharacter, rulesetCharacter.PersonalLightSource); + } + + internal static void RemoveLightSourceIfNeeded(RulesetActor rulesetActor, RulesetCondition rulesetCondition) + { + if (rulesetCondition == null || + !rulesetCondition.ConditionDefinition.IsSubtypeOf(ConditionOnFire.Name)) + { + return; + } + + if (rulesetActor is not RulesetCharacter rulesetCharacter || + rulesetCharacter.PersonalLightSource == null) // if using extinguish fire light source will come null here + { + return; + } + + var gameLocationCharacter = GameLocationCharacter.GetFromActor(rulesetCharacter); + + if (gameLocationCharacter == null) + { + return; + } + + ServiceRepository.GetService()? + .RemoveCharacterLightSource(gameLocationCharacter, rulesetCharacter.PersonalLightSource); + + rulesetCharacter.PersonalLightSource.Unregister(); + rulesetCharacter.PersonalLightSource = null; + } + private sealed class FilterTargetingPositionPowerTeleportSummon : IFilterTargetingPosition { public IEnumerator ComputeValidPositions(CursorLocationSelectPosition cursorLocationSelectPosition) diff --git a/SolastaUnfinishedBusiness/Models/SpellsContext.cs b/SolastaUnfinishedBusiness/Models/SpellsContext.cs index 2d9cfdb004..95b4a2d3e0 100644 --- a/SolastaUnfinishedBusiness/Models/SpellsContext.cs +++ b/SolastaUnfinishedBusiness/Models/SpellsContext.cs @@ -1,19 +1,29 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; -using SolastaUnfinishedBusiness.Api; using SolastaUnfinishedBusiness.Api.GameExtensions; +using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Classes; using SolastaUnfinishedBusiness.Displays; +using SolastaUnfinishedBusiness.Interfaces; +using TA.AI; using static SolastaUnfinishedBusiness.Spells.SpellBuilders; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellListDefinitions; +using static ActionDefinitions; +using static RuleDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ConditionDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MonsterDefinitions; namespace SolastaUnfinishedBusiness.Models; internal static class SpellsContext { + private const string InvisibleStalkerSubspellName = "ConjureElementalInvisibleStalker"; + internal static readonly Dictionary SpellsChildMaster = []; internal static readonly Dictionary SpellListContextTab = []; @@ -24,6 +34,9 @@ internal static class SpellsContext .FinalizeSpells(false) .AddToDB(); + private static readonly DecisionPackageDefinition DecisionPackageRestrained = + AiHelpers.BuildDecisionPackageBreakFree(ConditionRestrainedByEntangle.Name); + // ReSharper disable once InconsistentNaming private static readonly SortedList spellLists = []; private static readonly Dictionary> SpellSpellListMap = []; @@ -65,6 +78,8 @@ internal static class SpellsContext internal static readonly SpellDefinition Web = BuildWeb(); internal static readonly SpellDefinition Wrack = BuildWrack(); internal static readonly SpellDefinition WrathfulSmite = BuildWrathfulSmite(); + + private static SpellDefinition ConjureElementalInvisibleStalker { get; set; } internal static HashSet Spells { get; private set; } = []; [NotNull] @@ -78,7 +93,7 @@ internal static SortedList SpellLists } // only this sub matters for spell selection. this might change if we add additional subs to mod - var characterSubclass = DatabaseHelper.CharacterSubclassDefinitions.TraditionLight; + var characterSubclass = CharacterSubclassDefinitions.TraditionLight; var title = characterSubclass.FormatTitle(); @@ -299,8 +314,8 @@ internal static void LateLoad() RegisterSpell(BuildBorrowedKnowledge(), 0, SpellListBard, SpellListCleric, SpellListWarlock, SpellListWizard); RegisterSpell(BuildCloudOfDaggers(), 0, SpellListBard, SpellListSorcerer, SpellListWarlock, SpellListWizard); RegisterSpell(ColorBurst, 0, SpellListSorcerer, SpellListWizard, spellListInventorClass); - DatabaseHelper.SpellDefinitions.ConjureGoblinoids.contentPack = CeContentPackContext.CeContentPack; - RegisterSpell(DatabaseHelper.SpellDefinitions.ConjureGoblinoids, 0, SpellListDruid, SpellListRanger); + ConjureGoblinoids.contentPack = CeContentPackContext.CeContentPack; + RegisterSpell(ConjureGoblinoids, 0, SpellListDruid, SpellListRanger); RegisterSpell(BuildKineticJaunt(), 0, SpellListBard, SpellListSorcerer, SpellListWizard, spellListInventorClass); RegisterSpell(BuildNoxiousSpray(), 0, SpellListDruid, SpellListSorcerer, SpellListWarlock, SpellListWizard); @@ -436,6 +451,23 @@ internal static void LateLoad() SpellsChildMaster.TryAdd(child, parent); } } + + // bootstrap + + BuildConjureElementalInvisibleStalker(); + + LoadAllowTargetingSelectionWhenCastingChainLightningSpell(); + + + SwitchAddBleedingToLesserRestoration(); + SwitchChangeSleetStormToCube(); + SwitchEnableUpcastConjureElementalAndFey(); + SwitchFilterOnHideousLaughter(); + SwitchAllowBladeCantripsToUseReach(); + SwitchHastedCasing(); + SwitchAllowTargetingSelectionWhenCastingChainLightningSpell(); + SwitchRecurringEffectOnEntangle(); + SwitchUseHeightOneCylinderEffect(); } private static void RegisterSpell( @@ -508,7 +540,7 @@ private static void RegisterSpell( foreach (var spellSniperClass in spellSniperClasses) { if (spellDefinition.SpellLevel == 0 && - DatabaseHelper.TryGetDefinition( + TryGetDefinition( $"SpellListFeatSpellSniper{spellSniperClass.Name}", out var spellListSniper)) { spellListSniper.AddSpell(spellDefinition); @@ -516,6 +548,264 @@ private static void RegisterSpell( } } + private static void LoadAllowTargetingSelectionWhenCastingChainLightningSpell() + { + ChainLightning.AddCustomSubFeatures(new FilterTargetingCharacterChainLightning()); + } + + internal static void SwitchAllowTargetingSelectionWhenCastingChainLightningSpell() + { + var spell = ChainLightning.EffectDescription; + + if (Main.Settings.AllowTargetingSelectionWhenCastingChainLightningSpell) + { + spell.targetType = TargetType.IndividualsUnique; + spell.targetParameter = 4; + spell.effectAdvancement.additionalTargetsPerIncrement = 1; + } + else + { + spell.targetType = TargetType.ArcFromIndividual; + spell.targetParameter = 3; + spell.effectAdvancement.additionalTargetsPerIncrement = 0; + } + } + + internal static void SwitchFilterOnHideousLaughter() + { + HideousLaughter.effectDescription.restrictedCreatureFamilies.Clear(); + + if (!Main.Settings.RemoveHumanoidFilterOnHideousLaughter) + { + HideousLaughter.effectDescription.restrictedCreatureFamilies.Add(CharacterFamilyDefinitions.Humanoid.Name); + } + } + + internal static void SwitchRecurringEffectOnEntangle() + { + // Remove recurring effect on Entangle (as per SRD, any creature is only affected at cast time) + if (Main.Settings.RemoveRecurringEffectOnEntangle) + { + Entangle.effectDescription.recurrentEffect = RecurrentEffect.OnActivation; + Entangle.effectDescription.EffectForms[2].canSaveToCancel = false; + ConditionRestrainedByEntangle.Features.Add(FeatureDefinitionActionAffinitys.ActionAffinityGrappled); + ConditionRestrainedByEntangle.amountOrigin = ConditionDefinition.OriginOfAmount.Fixed; + ConditionRestrainedByEntangle.baseAmount = (int)AiHelpers.BreakFreeType.DoStrengthCheckAgainstCasterDC; + ConditionRestrainedByEntangle.addBehavior = true; + ConditionRestrainedByEntangle.battlePackage = DecisionPackageRestrained; + } + else + { + Entangle.effectDescription.recurrentEffect = + RecurrentEffect.OnActivation | RecurrentEffect.OnTurnEnd | RecurrentEffect.OnEnter; + Entangle.effectDescription.EffectForms[2].canSaveToCancel = true; + ConditionRestrainedByEntangle.Features.Remove(FeatureDefinitionActionAffinitys.ActionAffinityGrappled); + ConditionRestrainedByEntangle.amountOrigin = ConditionDefinition.OriginOfAmount.None; + ConditionRestrainedByEntangle.baseAmount = 0; + ConditionRestrainedByEntangle.addBehavior = false; + ConditionRestrainedByEntangle.battlePackage = null; + } + } + + internal static void SwitchChangeSleetStormToCube() + { + var sleetStormEffect = SleetStorm.EffectDescription; + + if (Main.Settings.ChangeSleetStormToCube) + { + // Set to Cube side 8, default height + sleetStormEffect.targetType = TargetType.Cube; + sleetStormEffect.targetParameter = 8; + sleetStormEffect.targetParameter2 = 0; + } + else + { + // Restore to cylinder radius 4, height 3 + sleetStormEffect.targetType = TargetType.Cylinder; + sleetStormEffect.targetParameter = 4; + sleetStormEffect.targetParameter2 = 3; + } + } + + internal static void SwitchUseHeightOneCylinderEffect() + { + // always applicable + ClearTargetParameter2ForTargetTypeCube(); + + // Change SpikeGrowth to be height 1 round cylinder/sphere + var spikeGrowthEffect = SpikeGrowth.EffectDescription; + + spikeGrowthEffect.targetParameter = 4; + + if (Main.Settings.UseHeightOneCylinderEffect) + { + // Set to Cylinder radius 4, height 1 + spikeGrowthEffect.targetType = TargetType.Cylinder; + spikeGrowthEffect.targetParameter2 = 1; + } + else + { + // Restore default of Sphere radius 4 + spikeGrowthEffect.targetType = TargetType.Sphere; + spikeGrowthEffect.targetParameter2 = 0; + } + + // Spells with TargetType.Cube and defaults values of (tp, tp2) + // Note that tp2 should be 0 for Cube and is ignored in game. + // BlackTentacles: (4, 2) + // Entangle: (4, 1) + // FaerieFire: (4, 2) + // FlamingSphere: (3, 2) <- a flaming sphere is a cube? + // Grease: (2, 2) + // HypnoticPattern: (6, 2) + // Slow: (8, 2) + // Thunderwave: (3, 2) + + // Change Black Tentacles, Entangle, Grease to be height 1 square cylinder/cube + if (Main.Settings.UseHeightOneCylinderEffect) + { + // Setting height switches to square cylinder (if originally cube) + SetHeight(BlackTentacles, 1); + SetHeight(Entangle, 1); + SetHeight(Grease, 1); + } + else + { + // Setting height to 0 restores original behaviour + SetHeight(BlackTentacles, 0); + SetHeight(Entangle, 0); + SetHeight(Grease, 0); + } + + return; + + static void SetHeight([NotNull] IMagicEffect spellDefinition, int height) + { + spellDefinition.EffectDescription.targetParameter2 = height; + } + + static void ClearTargetParameter2ForTargetTypeCube() + { + foreach (var sd in DatabaseRepository + .GetDatabase() + .Where(sd => + sd.EffectDescription.TargetType is TargetType.Cube + or TargetType.CubeWithOffset)) + { + // TargetParameter2 is not used by TargetType.Cube but has random values assigned. + // We are going to use it to create a square cylinder with height so set to zero for all spells with TargetType.Cube. + sd.EffectDescription.targetParameter2 = 0; + } + } + } + + internal static void SwitchAllowBladeCantripsToUseReach() + { + var db = DatabaseRepository.GetDatabase(); + var cantrips = new List { "BoomingBlade", "ResonatingStrike", "SunlightBlade" }; + + foreach (var bladeCantrip in db.Where(x => cantrips.Contains(x.Name))) + { + var text = Main.Settings.AllowBladeCantripsToUseReach ? "Feedback/&WithinReach" : "Feedback/&Within5Ft"; + + bladeCantrip.GuiPresentation.Description = Gui.Format($"Spell/&{bladeCantrip.Name}Description", text); + } + } + + internal static void SwitchHastedCasing() + { + var restrictedActions = FeatureDefinitionAdditionalActions.AdditionalActionHasted.RestrictedActions; + if (Main.Settings.AllowHasteCasting) + { + restrictedActions.TryAdd(Id.CastMain); + } + else + { + restrictedActions.RemoveAll(id => id == Id.CastMain); + } + } + + internal static void SwitchAddBleedingToLesserRestoration() + { + var cf = LesserRestoration.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.Condition); + + if (cf != null) + { + if (Main.Settings.AddBleedingToLesserRestoration) + { + cf.ConditionForm.ConditionsList.TryAdd(ConditionBleeding); + } + else + { + cf.ConditionForm.ConditionsList.Remove(ConditionBleeding); + } + } + + var cfg = GreaterRestoration.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.Condition); + + if (cfg == null) + { + return; + } + + // NOTE: using the same setting as for Lesser Restoration for compatibility + if (Main.Settings.AddBleedingToLesserRestoration) + { + cfg.ConditionForm.ConditionsList.TryAdd(ConditionBleeding); + } + else + { + cfg.ConditionForm.ConditionsList.Remove(ConditionBleeding); + } + } + + /// + /// Allow conjurations to fully controlled party members instead of AI controlled. + /// + private static void BuildConjureElementalInvisibleStalker() + { + ConjureElementalInvisibleStalker = SpellDefinitionBuilder + .Create(ConjureElementalFire, InvisibleStalkerSubspellName) + .SetOrUpdateGuiPresentation("Spell/&ConjureElementalInvisibleStalkerTitle", + "Spell/&ConjureElementalDescription") + .AddToDB(); + + var summonForm = ConjureElementalInvisibleStalker + .EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.Summon)?.SummonForm; + + if (summonForm != null) + { + summonForm.monsterDefinitionName = InvisibleStalker.Name; + } + } + + + internal static void SwitchEnableUpcastConjureElementalAndFey() + { + if (!Main.Settings.EnableUpcastConjureElementalAndFey) + { + ConjureElemental.SubspellsList.Remove(ConjureElementalInvisibleStalker); + + return; + } + + ConfigureAdvancement(ConjureFey); + ConfigureAdvancement(ConjureElemental); + ConfigureAdvancement(ConjureMinorElementals); + ConjureElemental.SubspellsList.Add(ConjureElementalInvisibleStalker); + + return; + + // Set advancement at spell level, not sub-spell + static void ConfigureAdvancement([NotNull] IMagicEffect spell) + { + var advancement = spell.EffectDescription.EffectAdvancement; + + advancement.effectIncrementMethod = EffectIncrementMethod.PerAdditionalSlotLevel; + advancement.additionalSpellLevelPerIncrement = 1; + } + } + internal sealed class SpellListContext { internal SpellListContext(SpellListDefinition spellListDefinition) @@ -687,7 +977,7 @@ internal void Switch([NotNull] SpellDefinition spellDefinition, bool active) SpellList.AddSpell(spellDefinition); // sync shock arcanist list with wizard - if (SpellList == SpellListWizard && spellDefinition.SchoolOfMagic == RuleDefinitions.SchoolEvocation) + if (SpellList == SpellListWizard && spellDefinition.SchoolOfMagic == SchoolEvocation) { SpellListShockArcanist.AddSpell(spellDefinition); } @@ -702,7 +992,7 @@ internal void Switch([NotNull] SpellDefinition spellDefinition, bool active) } // sync shock arcanist list with wizard - if (SpellList == SpellListWizard && spellDefinition.SchoolOfMagic == RuleDefinitions.SchoolEvocation) + if (SpellList == SpellListWizard && spellDefinition.SchoolOfMagic == SchoolEvocation) { foreach (var spellsByLevel in SpellListShockArcanist.SpellsByLevel) { @@ -714,4 +1004,30 @@ internal void Switch([NotNull] SpellDefinition spellDefinition, bool active) } } } + + private sealed class FilterTargetingCharacterChainLightning : IFilterTargetingCharacter + { + public bool EnforceFullSelection => false; + + public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter target) + { + var selectedTargets = __instance.SelectionService.SelectedTargets; + + if (selectedTargets.Count == 0) + { + return true; + } + + var firstTarget = selectedTargets[0]; + + var isValid = firstTarget.IsWithinRange(target, 6); + + if (!isValid) + { + __instance.actionModifier.FailureFlags.Add("Failure/&SecondTargetNotWithinRange"); + } + + return isValid; + } + } } diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs deleted file mode 100644 index 7485d9b434..0000000000 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ /dev/null @@ -1,742 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using JetBrains.Annotations; -using SolastaUnfinishedBusiness.Api.GameExtensions; -using SolastaUnfinishedBusiness.Api.Helpers; -using SolastaUnfinishedBusiness.Api.LanguageExtensions; -using SolastaUnfinishedBusiness.Builders; -using SolastaUnfinishedBusiness.Builders.Features; -using SolastaUnfinishedBusiness.Interfaces; -using SolastaUnfinishedBusiness.Validators; -using TA.AI; -using static ActionDefinitions; -using static RuleDefinitions; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ConditionDefinitions; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MonsterDefinitions; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSenses; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ItemDefinitions; - -namespace SolastaUnfinishedBusiness.Models; - -internal static class SrdAndHouseRulesContext -{ - private const string InvisibleStalkerSubspellName = "ConjureElementalInvisibleStalker"; - - private static readonly Dictionary Tags = []; - - private static readonly List MonstersThatEmitLight = - [ - CubeOfLight, - Fire_Elemental, - Fire_Jester, - Fire_Osprey, - Fire_Spider - ]; - - private static readonly DecisionPackageDefinition DecisionPackageRestrained = - AiHelpers.BuildDecisionPackageBreakFree(ConditionRestrainedByEntangle.Name); - - private static SpellDefinition ConjureElementalInvisibleStalker { get; set; } - - internal static void LateLoad() - { - BuildConjureElementalInvisibleStalker(); - LoadAfterRestIdentify(); - LoadAllowTargetingSelectionWhenCastingChainLightningSpell(); - LoadSenseNormalVisionRangeMultiplier(); - SwitchAddBleedingToLesserRestoration(); - SwitchAllowClubsToBeThrown(); - SwitchChangeSleetStormToCube(); - SwitchEnableUpcastConjureElementalAndFey(); - SwitchFilterOnHideousLaughter(); - SwitchAllowBladeCantripsToUseReach(); - SwitchHastedCasing(); - SwitchMagicStaffFoci(); - SwitchAllowTargetingSelectionWhenCastingChainLightningSpell(); - SwitchRecurringEffectOnEntangle(); - SwitchSchoolRestrictionsFromShadowCaster(); - SwitchSchoolRestrictionsFromSpellBlade(); - SwitchUniversalSylvanArmorAndLightbringer(); - SwitchUseHeightOneCylinderEffect(); - NoTwinnedBladeCantrips(); - } - - private static void LoadSenseNormalVisionRangeMultiplier() - { - _ = ConditionDefinitionBuilder - .Create("ConditionSenseNormalVision24") - .SetGuiPresentationNoContent(true) - .SetSilent(Silent.WhenAddedOrRemoved) - .SetFeatures(FeatureDefinitionSenseBuilder - .Create(SenseNormalVision, "SenseNormalVision24") - .SetSense(SenseMode.Type.NormalVision, 24) - .AddToDB()) - .SetSpecialInterruptions(ConditionInterruption.BattleEnd) - .AddToDB(); - - _ = ConditionDefinitionBuilder - .Create("ConditionSenseNormalVision48") - .SetGuiPresentationNoContent(true) - .SetSilent(Silent.WhenAddedOrRemoved) - .SetFeatures(FeatureDefinitionSenseBuilder - .Create(SenseNormalVision, "SenseNormalVision48") - .SetSense(SenseMode.Type.NormalVision, 48) - .AddToDB()) - .SetSpecialInterruptions(ConditionInterruption.BattleEnd) - .AddToDB(); - } - - internal static void SwitchSchoolRestrictionsFromShadowCaster() - { - if (Main.Settings.RemoveSchoolRestrictionsFromShadowCaster) - { - FeatureDefinitionCastSpells.CastSpellShadowcaster.RestrictedSchools.Clear(); - } - else - { - FeatureDefinitionCastSpells.CastSpellShadowcaster.RestrictedSchools.SetRange( - SchoolAbjuration, - SchoolDivination, - SchoolIllusion, - SchoolNecromancy); - } - } - - internal static void SwitchSchoolRestrictionsFromSpellBlade() - { - if (Main.Settings.RemoveSchoolRestrictionsFromSpellBlade) - { - FeatureDefinitionCastSpells.CastSpellMartialSpellBlade.RestrictedSchools.Clear(); - } - else - { - FeatureDefinitionCastSpells.CastSpellMartialSpellBlade.RestrictedSchools.SetRange( - SchoolConjuration, - SchoolEnchantement, - SchoolEvocation, - SchoolTransmutation); - } - } - - internal static void AddLightSourceIfNeeded(GameLocationCharacter gameLocationCharacter) - { - if (!Main.Settings.EnableCharactersOnFireToEmitLight) - { - return; - } - - if (gameLocationCharacter.RulesetCharacter is not RulesetCharacterMonster rulesetCharacterMonster) - { - return; - } - - if (!MonstersThatEmitLight.Contains(rulesetCharacterMonster.MonsterDefinition)) - { - return; - } - - AddLightSource(gameLocationCharacter, rulesetCharacterMonster, "ShouldEmitLightFromMonster"); - } - - internal static void AddLightSourceIfNeeded(RulesetActor rulesetActor, RulesetCondition rulesetCondition) - { - if (!Main.Settings.EnableCharactersOnFireToEmitLight) - { - return; - } - - if (rulesetCondition == null || !rulesetCondition.ConditionDefinition.IsSubtypeOf(ConditionOnFire.Name)) - { - return; - } - - if (rulesetActor is not RulesetCharacter rulesetCharacter) - { - return; - } - - var gameLocationCharacter = GameLocationCharacter.GetFromActor(rulesetCharacter); - - if (gameLocationCharacter == null) - { - return; - } - - AddLightSource(gameLocationCharacter, rulesetCharacter, "ShouldEmitLightFromCondition"); - } - - private static void AddLightSource( - GameLocationCharacter gameLocationCharacter, - RulesetCharacter rulesetCharacter, - string name) - { - var lightSourceForm = Shine.EffectDescription.EffectForms[0].LightSourceForm; - - rulesetCharacter.PersonalLightSource?.Unregister(); - rulesetCharacter.PersonalLightSource = new RulesetLightSource( - lightSourceForm.Color, - 2, - 4, - lightSourceForm.GraphicsPrefabAssetGUID, - LightSourceType.Basic, - name, - rulesetCharacter.Guid); - - rulesetCharacter.PersonalLightSource.Register(true); - - ServiceRepository.GetService()? - .AddCharacterLightSource(gameLocationCharacter, rulesetCharacter.PersonalLightSource); - } - - internal static void RemoveLightSourceIfNeeded(RulesetActor rulesetActor, RulesetCondition rulesetCondition) - { - if (rulesetCondition == null || - !rulesetCondition.ConditionDefinition.IsSubtypeOf(ConditionOnFire.Name)) - { - return; - } - - if (rulesetActor is not RulesetCharacter rulesetCharacter || - rulesetCharacter.PersonalLightSource == null) // if using extinguish fire light source will come null here - { - return; - } - - var gameLocationCharacter = GameLocationCharacter.GetFromActor(rulesetCharacter); - - if (gameLocationCharacter == null) - { - return; - } - - ServiceRepository.GetService()? - .RemoveCharacterLightSource(gameLocationCharacter, rulesetCharacter.PersonalLightSource); - - rulesetCharacter.PersonalLightSource.Unregister(); - rulesetCharacter.PersonalLightSource = null; - } - - internal static void SwitchUniversalSylvanArmorAndLightbringer() - { - GreenmageArmor.RequiredAttunementClasses.Clear(); - WizardClothes_Alternate.RequiredAttunementClasses.Clear(); - - if (Main.Settings.AllowAnyClassToWearSylvanArmor) - { - return; - } - - var allowedClasses = new[] { Wizard, Sorcerer, Warlock }; - - GreenmageArmor.RequiredAttunementClasses.AddRange(allowedClasses); - WizardClothes_Alternate.RequiredAttunementClasses.AddRange(allowedClasses); - } - - internal static void SwitchMagicStaffFoci() - { - if (!Main.Settings.MakeAllMagicStaveArcaneFoci) - { - return; - } - - foreach (var item in DatabaseRepository.GetDatabase() - .Where(x => x.IsWeapon) // WeaponDescription could be null - .Where(x => x.WeaponDescription.WeaponType == EquipmentDefinitions.WeaponTypeQuarterstaff) - .Where(x => x.Magical && !x.Name.Contains("OfHealing"))) - { - item.IsFocusItem = true; - item.FocusItemDescription.focusType = EquipmentDefinitions.FocusType.Arcane; - } - } - - private static void LoadAllowTargetingSelectionWhenCastingChainLightningSpell() - { - ChainLightning.AddCustomSubFeatures(new FilterTargetingCharacterChainLightning()); - } - - internal static void SwitchAllowTargetingSelectionWhenCastingChainLightningSpell() - { - var spell = ChainLightning.EffectDescription; - - if (Main.Settings.AllowTargetingSelectionWhenCastingChainLightningSpell) - { - spell.targetType = TargetType.IndividualsUnique; - spell.targetParameter = 4; - spell.effectAdvancement.additionalTargetsPerIncrement = 1; - } - else - { - spell.targetType = TargetType.ArcFromIndividual; - spell.targetParameter = 3; - spell.effectAdvancement.additionalTargetsPerIncrement = 0; - } - } - - internal static void SwitchFilterOnHideousLaughter() - { - HideousLaughter.effectDescription.restrictedCreatureFamilies.Clear(); - - if (!Main.Settings.RemoveHumanoidFilterOnHideousLaughter) - { - HideousLaughter.effectDescription.restrictedCreatureFamilies.Add(CharacterFamilyDefinitions.Humanoid.Name); - } - } - - internal static void SwitchRecurringEffectOnEntangle() - { - // Remove recurring effect on Entangle (as per SRD, any creature is only affected at cast time) - if (Main.Settings.RemoveRecurringEffectOnEntangle) - { - Entangle.effectDescription.recurrentEffect = RecurrentEffect.OnActivation; - Entangle.effectDescription.EffectForms[2].canSaveToCancel = false; - ConditionRestrainedByEntangle.Features.Add(FeatureDefinitionActionAffinitys.ActionAffinityGrappled); - ConditionRestrainedByEntangle.amountOrigin = ConditionDefinition.OriginOfAmount.Fixed; - ConditionRestrainedByEntangle.baseAmount = (int)AiHelpers.BreakFreeType.DoStrengthCheckAgainstCasterDC; - ConditionRestrainedByEntangle.addBehavior = true; - ConditionRestrainedByEntangle.battlePackage = DecisionPackageRestrained; - } - else - { - Entangle.effectDescription.recurrentEffect = - RecurrentEffect.OnActivation | RecurrentEffect.OnTurnEnd | RecurrentEffect.OnEnter; - Entangle.effectDescription.EffectForms[2].canSaveToCancel = true; - ConditionRestrainedByEntangle.Features.Remove(FeatureDefinitionActionAffinitys.ActionAffinityGrappled); - ConditionRestrainedByEntangle.amountOrigin = ConditionDefinition.OriginOfAmount.None; - ConditionRestrainedByEntangle.baseAmount = 0; - ConditionRestrainedByEntangle.addBehavior = false; - ConditionRestrainedByEntangle.battlePackage = null; - } - } - - internal static void SwitchChangeSleetStormToCube() - { - var sleetStormEffect = SleetStorm.EffectDescription; - - if (Main.Settings.ChangeSleetStormToCube) - { - // Set to Cube side 8, default height - sleetStormEffect.targetType = TargetType.Cube; - sleetStormEffect.targetParameter = 8; - sleetStormEffect.targetParameter2 = 0; - } - else - { - // Restore to cylinder radius 4, height 3 - sleetStormEffect.targetType = TargetType.Cylinder; - sleetStormEffect.targetParameter = 4; - sleetStormEffect.targetParameter2 = 3; - } - } - - internal static void SwitchUseHeightOneCylinderEffect() - { - // always applicable - ClearTargetParameter2ForTargetTypeCube(); - - // Change SpikeGrowth to be height 1 round cylinder/sphere - var spikeGrowthEffect = SpikeGrowth.EffectDescription; - - spikeGrowthEffect.targetParameter = 4; - - if (Main.Settings.UseHeightOneCylinderEffect) - { - // Set to Cylinder radius 4, height 1 - spikeGrowthEffect.targetType = TargetType.Cylinder; - spikeGrowthEffect.targetParameter2 = 1; - } - else - { - // Restore default of Sphere radius 4 - spikeGrowthEffect.targetType = TargetType.Sphere; - spikeGrowthEffect.targetParameter2 = 0; - } - - // Spells with TargetType.Cube and defaults values of (tp, tp2) - // Note that tp2 should be 0 for Cube and is ignored in game. - // BlackTentacles: (4, 2) - // Entangle: (4, 1) - // FaerieFire: (4, 2) - // FlamingSphere: (3, 2) <- a flaming sphere is a cube? - // Grease: (2, 2) - // HypnoticPattern: (6, 2) - // Slow: (8, 2) - // Thunderwave: (3, 2) - - // Change Black Tentacles, Entangle, Grease to be height 1 square cylinder/cube - if (Main.Settings.UseHeightOneCylinderEffect) - { - // Setting height switches to square cylinder (if originally cube) - SetHeight(BlackTentacles, 1); - SetHeight(Entangle, 1); - SetHeight(Grease, 1); - } - else - { - // Setting height to 0 restores original behaviour - SetHeight(BlackTentacles, 0); - SetHeight(Entangle, 0); - SetHeight(Grease, 0); - } - - return; - - static void SetHeight([NotNull] IMagicEffect spellDefinition, int height) - { - spellDefinition.EffectDescription.targetParameter2 = height; - } - - static void ClearTargetParameter2ForTargetTypeCube() - { - foreach (var sd in DatabaseRepository - .GetDatabase() - .Where(sd => - sd.EffectDescription.TargetType is TargetType.Cube - or TargetType.CubeWithOffset)) - { - // TargetParameter2 is not used by TargetType.Cube but has random values assigned. - // We are going to use it to create a square cylinder with height so set to zero for all spells with TargetType.Cube. - sd.EffectDescription.targetParameter2 = 0; - } - } - } - - internal static void SwitchAllowBladeCantripsToUseReach() - { - var db = DatabaseRepository.GetDatabase(); - var cantrips = new List { "BoomingBlade", "ResonatingStrike", "SunlightBlade" }; - - foreach (var bladeCantrip in db.Where(x => cantrips.Contains(x.Name))) - { - var text = Main.Settings.AllowBladeCantripsToUseReach ? "Feedback/&WithinReach" : "Feedback/&Within5Ft"; - - bladeCantrip.GuiPresentation.Description = Gui.Format($"Spell/&{bladeCantrip.Name}Description", text); - } - } - - internal static void SwitchHastedCasing() - { - var restrictedActions = FeatureDefinitionAdditionalActions.AdditionalActionHasted.RestrictedActions; - if (Main.Settings.AllowHasteCasting) - { - restrictedActions.TryAdd(Id.CastMain); - } - else - { - restrictedActions.RemoveAll(id => id == Id.CastMain); - } - } - - internal static void SwitchAddBleedingToLesserRestoration() - { - var cf = LesserRestoration.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.Condition); - - if (cf != null) - { - if (Main.Settings.AddBleedingToLesserRestoration) - { - cf.ConditionForm.ConditionsList.TryAdd(ConditionBleeding); - } - else - { - cf.ConditionForm.ConditionsList.Remove(ConditionBleeding); - } - } - - var cfg = GreaterRestoration.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.Condition); - - if (cfg == null) - { - return; - } - - // NOTE: using the same setting as for Lesser Restoration for compatibility - if (Main.Settings.AddBleedingToLesserRestoration) - { - cfg.ConditionForm.ConditionsList.TryAdd(ConditionBleeding); - } - else - { - cfg.ConditionForm.ConditionsList.Remove(ConditionBleeding); - } - } - - /// - /// Allow conjurations to fully controlled party members instead of AI controlled. - /// - private static void BuildConjureElementalInvisibleStalker() - { - ConjureElementalInvisibleStalker = SpellDefinitionBuilder - .Create(ConjureElementalFire, InvisibleStalkerSubspellName) - .SetOrUpdateGuiPresentation("Spell/&ConjureElementalInvisibleStalkerTitle", - "Spell/&ConjureElementalDescription") - .AddToDB(); - - var summonForm = ConjureElementalInvisibleStalker - .EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.Summon)?.SummonForm; - - if (summonForm != null) - { - summonForm.monsterDefinitionName = InvisibleStalker.Name; - } - } - - internal static void SwitchAllowClubsToBeThrown() - { - var db = DatabaseRepository.GetDatabase(); - - foreach (var itemDefinition in db - .Where(x => x.IsWeapon && - x.WeaponDescription.WeaponTypeDefinition == WeaponTypeDefinitions.ClubType)) - { - if (Main.Settings.AllowClubsToBeThrown) - { - itemDefinition.WeaponDescription.WeaponTags.Add(TagsDefinitions.WeaponTagThrown); - itemDefinition.WeaponDescription.maxRange = 10; - } - else - { - itemDefinition.WeaponDescription.WeaponTags.Remove(TagsDefinitions.WeaponTagThrown); - itemDefinition.WeaponDescription.maxRange = 5; - } - } - } - - internal static void SwitchEnableUpcastConjureElementalAndFey() - { - if (!Main.Settings.EnableUpcastConjureElementalAndFey) - { - ConjureElemental.SubspellsList.Remove(ConjureElementalInvisibleStalker); - - return; - } - - ConfigureAdvancement(ConjureFey); - ConfigureAdvancement(ConjureElemental); - ConfigureAdvancement(ConjureMinorElementals); - ConjureElemental.SubspellsList.Add(ConjureElementalInvisibleStalker); - - return; - - // Set advancement at spell level, not sub-spell - static void ConfigureAdvancement([NotNull] IMagicEffect spell) - { - var advancement = spell.EffectDescription.EffectAdvancement; - - advancement.effectIncrementMethod = EffectIncrementMethod.PerAdditionalSlotLevel; - advancement.additionalSpellLevelPerIncrement = 1; - } - } - - private static void LoadAfterRestIdentify() - { - const string AfterRestIdentifyName = "PowerAfterRestIdentify"; - - RestActivityDefinitionBuilder - .Create("RestActivityShortRestIdentify") - .SetGuiPresentation(AfterRestIdentifyName, Category.Feature) - .AddCustomSubFeatures(new ValidateRestActivity(false, false)) - .SetRestData( - RestDefinitions.RestStage.AfterRest, - RestType.ShortRest, - RestActivityDefinition.ActivityCondition.None, - PowerBundleContext.UseCustomRestPowerFunctorName, - AfterRestIdentifyName) - .AddToDB(); - - RestActivityDefinitionBuilder - .Create("RestActivityLongRestIdentify") - .SetGuiPresentation(AfterRestIdentifyName, Category.Feature) - .AddCustomSubFeatures(new ValidateRestActivity(false, false)) - .SetRestData( - RestDefinitions.RestStage.AfterRest, - RestType.LongRest, - RestActivityDefinition.ActivityCondition.None, - PowerBundleContext.UseCustomRestPowerFunctorName, - AfterRestIdentifyName) - .AddToDB(); - - var afterRestIdentifyCondition = ConditionDefinitionBuilder - .Create("AfterRestIdentify") - .SetGuiPresentation(Category.Condition) - .AddCustomSubFeatures(OnConditionAddedOrRemovedIdentifyItems.Mark) - .AddToDB(); - - FeatureDefinitionPowerBuilder - .Create(AfterRestIdentifyName) - .SetGuiPresentation(Category.Feature, hidden: true) - .AddCustomSubFeatures(CanIdentifyOnRest.Mark) - .SetUsesFixed(ActivationTime.Rest) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetTargetingData( - Side.Ally, - RangeType.Self, - 1, - TargetType.Self) - .SetDurationData( - DurationType.Minute, - 1) - .SetEffectForms( - EffectFormBuilder - .Create() - .SetConditionForm( - afterRestIdentifyCondition, - ConditionForm.ConditionOperation.Add) - .Build()) - .Build()) - .AddToDB(); - } - - internal static bool IsAttackModeInvalid(RulesetCharacter character, RulesetAttackMode mode) - { - if (character is not RulesetCharacterHero hero) - { - return false; - } - - return IsHandCrossbowUseInvalid(mode.sourceObject as RulesetItem, hero, - hero.GetItemInSlot(EquipmentDefinitions.SlotTypeMainHand), - hero.GetItemInSlot(EquipmentDefinitions.SlotTypeOffHand)); - } - - internal static bool IsHandCrossbowUseInvalid( - RulesetItem item, - RulesetCharacterHero hero, - RulesetItem main, - RulesetItem off) - { - if (Main.Settings.IgnoreHandXbowFreeHandRequirements) - { - return false; - } - - if (item == null || hero == null) - { - return false; - } - - Tags.Clear(); - item.FillTags(Tags, hero, true); - - if (!Tags.ContainsKey(TagsDefinitions.WeaponTagAmmunition) || - Tags.ContainsKey(TagsDefinitions.WeaponTagTwoHanded)) - { - return false; - } - - if (main == item && off != null) - { - return true; - } - - return off == item - && main != null - && main.ItemDefinition.WeaponDescription?.WeaponType != WeaponTypeDefinitions.UnarmedStrikeType.Name; - } - - internal static void HandleSmallRaces(BattleDefinitions.AttackEvaluationParams evaluationParams) - { - if (!Main.Settings.UseOfficialSmallRacesDisWithHeavyWeapons) - { - return; - } - - var hero = evaluationParams.attacker.RulesetCharacter.GetOriginalHero(); - - if (hero?.RaceDefinition.SizeDefinition == CharacterSizeDefinitions.Small && - evaluationParams.attackMode is { SourceDefinition: ItemDefinition { IsWeapon: true } itemDefinition } && - itemDefinition.WeaponDescription.WeaponTags.Contains(TagsDefinitions.WeaponTagHeavy)) - { - evaluationParams.attackModifier.AttackAdvantageTrends.Add( - new TrendInfo(-1, FeatureSourceType.Unknown, "Feedback/&SmallRace", null)); - } - } - - private static void NoTwinnedBladeCantrips() - { - MetamagicOptionDefinitions.MetamagicTwinnedSpell.AddCustomSubFeatures(NoTwinned.Validator); - } - - private sealed class FilterTargetingCharacterChainLightning : IFilterTargetingCharacter - { - public bool EnforceFullSelection => false; - - public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter target) - { - var selectedTargets = __instance.SelectionService.SelectedTargets; - - if (selectedTargets.Count == 0) - { - return true; - } - - var firstTarget = selectedTargets[0]; - - var isValid = firstTarget.IsWithinRange(target, 6); - - if (!isValid) - { - __instance.actionModifier.FailureFlags.Add("Failure/&SecondTargetNotWithinRange"); - } - - return isValid; - } - } - - private sealed class CanIdentifyOnRest : IValidatePowerUse - { - private CanIdentifyOnRest() - { - } - - public static CanIdentifyOnRest Mark { get; } = new(); - - public bool CanUsePower(RulesetCharacter character, FeatureDefinitionPower power) - { - //does this work properly for wild-shaped heroes? - if (character is not RulesetCharacterHero hero) - { - return false; - } - - return Main.Settings.IdentifyAfterRest && hero.HasNonIdentifiedItems(); - } - } - - private sealed class OnConditionAddedOrRemovedIdentifyItems : IOnConditionAddedOrRemoved - { - public static OnConditionAddedOrRemovedIdentifyItems Mark { get; } = new(); - - public void OnConditionAdded(RulesetCharacter target, RulesetCondition rulesetCondition) - { - target.GetOriginalHero()?.AutoIdentifyInventoryItems(); - } - - public void OnConditionRemoved(RulesetCharacter target, RulesetCondition rulesetCondition) - { - // empty - } - } - - internal sealed class NoTwinned - { - public static readonly ValidateMetamagicApplication Validator = - (RulesetCharacter _, RulesetEffectSpell spell, MetamagicOptionDefinition _, ref bool result, - ref string failure) => - { - if (!spell.SpellDefinition.HasSubFeatureOfType()) - { - return; - } - - result = false; - failure = "Failure/&FailureFlagInvalidSingleTarget"; - }; - - public static NoTwinned Mark { get; } = new(); - } -} diff --git a/SolastaUnfinishedBusiness/Models/SubclassesContext.cs b/SolastaUnfinishedBusiness/Models/SubclassesContext.cs index 1a3f9e16a3..f01c81d318 100644 --- a/SolastaUnfinishedBusiness/Models/SubclassesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SubclassesContext.cs @@ -8,6 +8,8 @@ using SolastaUnfinishedBusiness.Classes; using SolastaUnfinishedBusiness.Displays; using SolastaUnfinishedBusiness.Subclasses; +using static RuleDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper; namespace SolastaUnfinishedBusiness.Models; @@ -54,6 +56,10 @@ internal static void Load() DatabaseRepository.GetDatabase() .Do(x => x.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock)); + + // bootstrap + SwitchSchoolRestrictionsFromShadowCaster(); + SwitchSchoolRestrictionsFromSpellBlade(); } internal static void LateLoad() @@ -125,6 +131,39 @@ internal static void SelectTabletopSet(bool toggle) } } + + internal static void SwitchSchoolRestrictionsFromShadowCaster() + { + if (Main.Settings.RemoveSchoolRestrictionsFromShadowCaster) + { + FeatureDefinitionCastSpells.CastSpellShadowcaster.RestrictedSchools.Clear(); + } + else + { + FeatureDefinitionCastSpells.CastSpellShadowcaster.RestrictedSchools.SetRange( + SchoolAbjuration, + SchoolDivination, + SchoolIllusion, + SchoolNecromancy); + } + } + + internal static void SwitchSchoolRestrictionsFromSpellBlade() + { + if (Main.Settings.RemoveSchoolRestrictionsFromSpellBlade) + { + FeatureDefinitionCastSpells.CastSpellMartialSpellBlade.RestrictedSchools.Clear(); + } + else + { + FeatureDefinitionCastSpells.CastSpellMartialSpellBlade.RestrictedSchools.SetRange( + SchoolConjuration, + SchoolEnchantement, + SchoolEvocation, + SchoolTransmutation); + } + } + internal sealed class KlassListContext { internal KlassListContext(CharacterClassDefinition characterClassDefinition) diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2014Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2014Context.cs index 181df36c29..a7be560635 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2014Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2014Context.cs @@ -93,13 +93,11 @@ internal static void LateLoad() SwitchBardHealingBalladOnLongRest(); } - internal static void SwitchEldritchBlastRange() { EldritchBlast.effectDescription.rangeParameter = Main.Settings.FixEldritchBlastRange ? 24 : 16; } - internal static void SwitchBardHealingBalladOnLongRest() { FeatureDefinitionRestHealingModifiers.RestHealingModifierBardHealingBallad.applyDuringLongRest = diff --git a/SolastaUnfinishedBusiness/Patches/AttackEvaluationParamsPatcher.cs b/SolastaUnfinishedBusiness/Patches/AttackEvaluationParamsPatcher.cs index 95c7120eed..d2654560b1 100644 --- a/SolastaUnfinishedBusiness/Patches/AttackEvaluationParamsPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/AttackEvaluationParamsPatcher.cs @@ -54,7 +54,7 @@ public static void Postfix( FlankingAndHigherGround.HandleHigherGround(__instance); //PATCH: apply small races rules - SrdAndHouseRulesContext.HandleSmallRaces(__instance); + RacesContext.HandleSmallRaces(__instance); //PATCH: allow for `MeleeHit` effects to have reach changed, unless `Distant Spell` metamagic is used if (metamagicOption is { Type: MetamagicType.DistantSpell }) @@ -84,7 +84,7 @@ public static void Postfix( FlankingAndHigherGround.HandleHigherGround(__instance); //PATCH: apply small races rules - SrdAndHouseRulesContext.HandleSmallRaces(__instance); + RacesContext.HandleSmallRaces(__instance); } } @@ -106,7 +106,7 @@ public static void Postfix( FlankingAndHigherGround.HandleHigherGround(__instance); //PATCH: apply small races rules - SrdAndHouseRulesContext.HandleSmallRaces(__instance); + RacesContext.HandleSmallRaces(__instance); } } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageAbilityScoresPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageAbilityScoresPanelPatcher.cs index 5ece8a2a47..c10fb8e391 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageAbilityScoresPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageAbilityScoresPanelPatcher.cs @@ -28,9 +28,9 @@ public static IEnumerable Transpiler([NotNull] IEnumerable instruction.opcode == OpCodes.Ldc_I4_S && - instruction.operand.ToString() == CharacterContext.GameBuyPoints.ToString(), + instruction.operand.ToString() == RulesContext.GameBuyPoints.ToString(), -1, "CharacterStageAbilityScoresPanel.Reset", - new CodeInstruction(OpCodes.Ldc_I4_S, CharacterContext.ModBuyPoints)); + new CodeInstruction(OpCodes.Ldc_I4_S, RulesContext.ModBuyPoints)); } } @@ -52,19 +52,19 @@ public static IEnumerable Transpiler([NotNull] IEnumerable instruction.opcode == OpCodes.Ldc_R4 && instruction.operand.ToString() == - CharacterContext.GameBuyPoints.ToString(), + RulesContext.GameBuyPoints.ToString(), -1, "CharacterStageAbilityScoresPanel.Refresh.1", - new CodeInstruction(OpCodes.Ldc_R4, 1f * CharacterContext.ModBuyPoints)) + new CodeInstruction(OpCodes.Ldc_R4, 1f * RulesContext.ModBuyPoints)) .ReplaceCode(instruction => instruction.opcode == OpCodes.Ldc_I4_S && instruction.operand.ToString() == - CharacterContext.GameBuyPoints.ToString(), + RulesContext.GameBuyPoints.ToString(), -1, "CharacterStageAbilityScoresPanel.Refresh.2", - new CodeInstruction(OpCodes.Ldc_I4_S, CharacterContext.ModBuyPoints)) + new CodeInstruction(OpCodes.Ldc_I4_S, RulesContext.ModBuyPoints)) .ReplaceCode(instruction => instruction.opcode == OpCodes.Ldc_I4_S && instruction.operand.ToString() == - CharacterContext.GameMaxAttribute.ToString(), + RulesContext.GameMaxAttribute.ToString(), -1, "CharacterStageAbilityScoresPanel.Refresh.3", - new CodeInstruction(OpCodes.Ldc_I4_S, CharacterContext.ModMaxAttribute)); + new CodeInstruction(OpCodes.Ldc_I4_S, RulesContext.ModMaxAttribute)); } } } diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs index 7cd419dc1b..57842d1817 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs @@ -42,7 +42,7 @@ public static class RevealCharacter_Patch [UsedImplicitly] public static void Postfix(GameLocationCharacter character) { - SrdAndHouseRulesContext.AddLightSourceIfNeeded(character); + RulesContext.AddLightSourceIfNeeded(character); } } diff --git a/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs index 3b5e05cad8..76411e9ff7 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs @@ -135,7 +135,7 @@ public static void Prefix( [UsedImplicitly] public static void Postfix(RulesetActor __instance, RulesetCondition newCondition) { - SrdAndHouseRulesContext.AddLightSourceIfNeeded(__instance, newCondition); + RulesContext.AddLightSourceIfNeeded(__instance, newCondition); var definition = newCondition.ConditionDefinition; diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs index d99cae19d7..021bbbea00 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs @@ -677,7 +677,7 @@ public static void Postfix(RulesetCharacterHero __instance) CustomWeaponsContext.TryAddMainActionUnarmedAttacks(__instance); //PATCH: remove invalid attacks to prevent hand crossbows use with no free hand - __instance.AttackModes.RemoveAll(mode => SrdAndHouseRulesContext.IsAttackModeInvalid(__instance, mode)); + __instance.AttackModes.RemoveAll(mode => CustomItemsContext.IsAttackModeInvalid(__instance, mode)); //refresh character if needed after postfix if (_callRefresh && __instance.CharacterRefreshed != null) diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs index 7b6354e05e..4aab2786ab 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs @@ -445,7 +445,7 @@ public static void Postfix(RulesetCharacter __instance, RulesetCondition activeC ProcessConditionsMatchingInterruptionSourceRageStop(__instance, activeCondition); //PATCH: support 'EnableCharactersOnFireToEmitLight' - SrdAndHouseRulesContext.RemoveLightSourceIfNeeded(__instance, activeCondition); + RulesContext.RemoveLightSourceIfNeeded(__instance, activeCondition); //PATCH: notifies custom condition features that condition is removed var definition = activeCondition.ConditionDefinition; diff --git a/SolastaUnfinishedBusiness/Patches/WieldedConfigurationSelectorPatcher.cs b/SolastaUnfinishedBusiness/Patches/WieldedConfigurationSelectorPatcher.cs index 50962fd93c..ad587f36ca 100644 --- a/SolastaUnfinishedBusiness/Patches/WieldedConfigurationSelectorPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/WieldedConfigurationSelectorPatcher.cs @@ -60,7 +60,7 @@ private static void AddHandXbowWarning( { if (!warning || warning.gameObject.activeSelf - || !SrdAndHouseRulesContext.IsHandCrossbowUseInvalid(slot.equipedItem, hero, + || !CustomItemsContext.IsHandCrossbowUseInvalid(slot.equipedItem, hero, configuration.MainHandSlot.EquipedItem, configuration.OffHandSlot.EquipedItem)) { return; diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 40359ed10e..02444d3ba4 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -753,7 +753,7 @@ internal static SpellDefinition BuildSunlightBlade() ConditionForm.ConditionOperation.Add, true)) .SetParticleEffectParameters(DivineFavor) .Build()) - .AddCustomSubFeatures(SrdAndHouseRulesContext.NoTwinned.Mark, new AttackAfterMagicEffect()) + .AddCustomSubFeatures(FixesContext.NoTwinned.Mark, new AttackAfterMagicEffect()) .AddToDB(); return spell; @@ -1019,7 +1019,7 @@ internal static SpellDefinition BuildBoomingBlade() ConditionForm.ConditionOperation.Add, true)) .SetParticleEffectParameters(Shatter) .Build()) - .AddCustomSubFeatures(SrdAndHouseRulesContext.NoTwinned.Mark, new AttackAfterMagicEffect()) + .AddCustomSubFeatures(FixesContext.NoTwinned.Mark, new AttackAfterMagicEffect()) .AddToDB(); // need to use same spell reference so power texts update properly on AllowBladeCantripsToUseReach setting @@ -1131,7 +1131,7 @@ internal static SpellDefinition BuildResonatingStrike() .SetImpactEffectParameters(new AssetReference()) .Build()) .AddCustomSubFeatures( - SrdAndHouseRulesContext.NoTwinned.Mark, + FixesContext.NoTwinned.Mark, // order matters here as CustomBehaviorResonatingStrike.IFilterTargetingCharacter // should trigger before AttackAfterMagicEffect.IFilterTargetingCharacter new CustomBehaviorResonatingStrike(), diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 3070a53757..8e4f6b96aa 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -2590,8 +2590,8 @@ internal static SpellDefinition BuildFindFamiliar() MovementAffinityNoSpecialMoves, FeatureDefinitionConditionAffinitys.ConditionAffinityProneImmunity, Tabletop2014Context.FeatureDefinitionPowerHelpAction, - CharacterContext.PowerTeleportSummon, - CharacterContext.PowerVanishSummon) + RulesContext.PowerTeleportSummon, + RulesContext.PowerVanishSummon) .SetMonsterPresentation( MonsterPresentationBuilder .Create() diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationWeapon.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationWeapon.cs index f328270305..d7b6fd9e9f 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationWeapon.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationWeapon.cs @@ -396,8 +396,8 @@ private static MonsterDefinition BuildSteelDefenderMonster() FeatureDefinitionConditionAffinitys.ConditionAffinityCharmImmunity, FeatureDefinitionConditionAffinitys.ConditionAffinityExhaustionImmunity, FeatureDefinitionConditionAffinitys.ConditionAffinityPoisonImmunity, - CharacterContext.PowerTeleportSummon, - CharacterContext.PowerVanishSummon) + RulesContext.PowerTeleportSummon, + RulesContext.PowerVanishSummon) .SetCreatureTags(SteelDefenderTag) .SetDefaultFaction(FactionDefinitions.Party) .SetFullyControlledWhenAllied(true) From 52efc1374bbeb3894920d89fc8654d6a3ca03241 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 16:17:14 -0800 Subject: [PATCH 51/85] move LevelUpContext into Helpers --- .../RulesetCharacterHeroExtensions.cs | 6 +- .../Helpers/LevelUpHelper.cs} | 8 +-- .../CustomUI/CustomInvocationSubPanel.cs | 4 +- .../Displays/PartyEditor.cs | 10 +-- .../Models/MulticlassContext.cs | 16 ++--- .../Models/MulticlassGameUiContext.cs | 13 ++-- .../Patches/ArchetypesPreviewModalPatcher.cs | 7 +- .../CharacterBuildingManagerPatcher.cs | 66 +++++++++---------- .../Patches/CharacterEditionScreenPatcher.cs | 3 +- ...haracterStageClassSelectionPanelPatcher.cs | 10 +-- ...haracterStageDeitySelectionPanelPatcher.cs | 6 +- ...StageFightingStyleSelectionPanelPatcher.cs | 4 +- .../CharacterStageLevelGainsPanelPatcher.cs | 11 ++-- ...acterStageSubclassSelectionPanelPatcher.cs | 6 +- .../Patches/FeatureDescriptionItemPatcher.cs | 4 +- .../HigherLevelFeaturesModalPatcher.cs | 8 +-- .../Patches/RulesetCharacterHeroPatcher.cs | 2 +- .../Patches/RulesetCharacterPatcher.cs | 2 +- .../Patches/SpellBoxPatcher.cs | 9 +-- .../Patches/SpellsByLevelGroupPatcher.cs | 4 +- .../Subclasses/DomainNature.cs | 4 +- 21 files changed, 102 insertions(+), 101 deletions(-) rename SolastaUnfinishedBusiness/{Models/LevelUpContext.cs => Api/Helpers/LevelUpHelper.cs} (99%) diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterHeroExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterHeroExtensions.cs index 68d35985c0..19f0155c7c 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterHeroExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterHeroExtensions.cs @@ -1,7 +1,7 @@ using System.Linq; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Behaviors; -using SolastaUnfinishedBusiness.Models; namespace SolastaUnfinishedBusiness.Api.GameExtensions; @@ -98,8 +98,8 @@ internal static void GrantAcquiredSpellWithTagFromSubclassPool( this RulesetCharacterHero hero, string subClassName, string tag) { var heroBuildingData = hero.GetHeroBuildingData(); - var selectedClass = LevelUpContext.GetSelectedClass(hero); - var classLevel = LevelUpContext.GetSelectedClassLevel(hero); + var selectedClass = LevelUpHelper.GetSelectedClass(hero); + var classLevel = LevelUpHelper.GetSelectedClassLevel(hero); // it's indeed TagClass as this is how spell pools are offered in vanilla when from subclass var poolName = $"{AttributeDefinitions.TagClass}{selectedClass!.Name}{classLevel}{subClassName}{tag}"; diff --git a/SolastaUnfinishedBusiness/Models/LevelUpContext.cs b/SolastaUnfinishedBusiness/Api/Helpers/LevelUpHelper.cs similarity index 99% rename from SolastaUnfinishedBusiness/Models/LevelUpContext.cs rename to SolastaUnfinishedBusiness/Api/Helpers/LevelUpHelper.cs index 5b97145328..60d3d6dad0 100644 --- a/SolastaUnfinishedBusiness/Models/LevelUpContext.cs +++ b/SolastaUnfinishedBusiness/Api/Helpers/LevelUpHelper.cs @@ -3,19 +3,19 @@ using System.Linq; using HarmonyLib; using JetBrains.Annotations; -using SolastaUnfinishedBusiness.Api; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.LanguageExtensions; using SolastaUnfinishedBusiness.Classes; using SolastaUnfinishedBusiness.Feats; using SolastaUnfinishedBusiness.Interfaces; +using SolastaUnfinishedBusiness.Models; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ItemDefinitions; -namespace SolastaUnfinishedBusiness.Models; +namespace SolastaUnfinishedBusiness.Api.Helpers; -internal static class LevelUpContext +internal static class LevelUpHelper { internal const string ExtraClassTag = ""; //""@Class"; internal const string ExtraSubclassTag = ""; //""@Subclass"; @@ -284,7 +284,7 @@ private static HashSet CacheAllowedAutoPreparedSpells( } } - return allowedAutoPreparedSpells.ToHashSet(); + return [.. allowedAutoPreparedSpells]; } [NotNull] diff --git a/SolastaUnfinishedBusiness/CustomUI/CustomInvocationSubPanel.cs b/SolastaUnfinishedBusiness/CustomUI/CustomInvocationSubPanel.cs index 38bb1dec8a..f5921862a4 100644 --- a/SolastaUnfinishedBusiness/CustomUI/CustomInvocationSubPanel.cs +++ b/SolastaUnfinishedBusiness/CustomUI/CustomInvocationSubPanel.cs @@ -2,9 +2,9 @@ using System.Collections.Generic; using System.Linq; using SolastaUnfinishedBusiness.Api; +using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Api.LanguageExtensions; using SolastaUnfinishedBusiness.Feats; -using SolastaUnfinishedBusiness.Models; using UnityEngine; namespace SolastaUnfinishedBusiness.CustomUI; @@ -53,7 +53,7 @@ internal static List CustomInvocationsProficiencies(RulesetCharacterHero internal static List OnlyStandardInvocationProficiencies(RulesetCharacterHero hero) { - var selectedClass = LevelUpContext.GetSelectedClass(hero); + var selectedClass = LevelUpHelper.GetSelectedClass(hero); if (selectedClass != DatabaseHelper.CharacterClassDefinitions.Warlock && !hero.TrainedFeats.Exists(x => x.Name == OtherFeats.FeatEldritchAdept)) diff --git a/SolastaUnfinishedBusiness/Displays/PartyEditor.cs b/SolastaUnfinishedBusiness/Displays/PartyEditor.cs index e1470479f3..a172a84b8b 100644 --- a/SolastaUnfinishedBusiness/Displays/PartyEditor.cs +++ b/SolastaUnfinishedBusiness/Displays/PartyEditor.cs @@ -3,9 +3,9 @@ using System; using System.Collections.Generic; using System.Linq; +using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Api.LanguageExtensions; using SolastaUnfinishedBusiness.DataViewer; -using SolastaUnfinishedBusiness.Models; using UnityEngine; using static SolastaUnfinishedBusiness.Api.ModKit.UI; @@ -314,7 +314,7 @@ ToolTypeDefinition tool when chr.TrainedToolTypes.Contains(tool) => () => chr.UsablePowers.Add(usablePower); } - LevelUpContext.RecursiveGrantCustomFeatures( + LevelUpHelper.RecursiveGrantCustomFeatures( chr, AttributeDefinitions.TagFeat, feat.Features); } : null, @@ -334,7 +334,7 @@ ToolTypeDefinition tool when chr.TrainedToolTypes.Contains(tool) => () => } } - LevelUpContext.RecursiveRemoveCustomFeatures( + LevelUpHelper.RecursiveRemoveCustomFeatures( chr, AttributeDefinitions.TagFeat, feat.Features); } : null @@ -371,7 +371,7 @@ ToolTypeDefinition tool when chr.TrainedToolTypes.Contains(tool) => () => ? () => { chr.TrainInvocations([def]); - LevelUpContext.RecursiveGrantCustomFeatures( + LevelUpHelper.RecursiveGrantCustomFeatures( chr, null, [def.grantedFeature]); } : null, @@ -384,7 +384,7 @@ ToolTypeDefinition tool when chr.TrainedToolTypes.Contains(tool) => () => chr.usablePowers.RemoveAll(x => x.PowerDefinition == power); } - LevelUpContext.RecursiveRemoveCustomFeatures( + LevelUpHelper.RecursiveRemoveCustomFeatures( chr, null, [def.grantedFeature]); } : null diff --git a/SolastaUnfinishedBusiness/Models/MulticlassContext.cs b/SolastaUnfinishedBusiness/Models/MulticlassContext.cs index df63550abd..9d18e1b751 100644 --- a/SolastaUnfinishedBusiness/Models/MulticlassContext.cs +++ b/SolastaUnfinishedBusiness/Models/MulticlassContext.cs @@ -228,7 +228,7 @@ private static IEnumerable ClassesAndLevelsTranspiler( [NotNull] IEnumerable instructions) { var classesAndLevelsMethod = typeof(RulesetCharacterHero).GetMethod("get_ClassesAndLevels"); - var getClassLevelMethod = new Func(LevelUpContext.GetSelectedClassLevel).Method; + var getClassLevelMethod = new Func(LevelUpHelper.GetSelectedClassLevel).Method; return instructions.ReplaceCall(classesAndLevelsMethod, -1, @@ -241,7 +241,7 @@ private static IEnumerable ClassesHistoryTranspiler( [NotNull] IEnumerable instructions) { var classesHistoryMethod = typeof(RulesetCharacterHero).GetMethod("get_ClassesHistory"); - var getClassLevelMethod = new Func(LevelUpContext.GetSelectedClassLevel).Method; + var getClassLevelMethod = new Func(LevelUpHelper.GetSelectedClassLevel).Method; return instructions.ReplaceCall(classesHistoryMethod, -1, @@ -305,7 +305,7 @@ private static void PatchClassLevel() private static bool ShouldEquipmentBeAssigned([NotNull] CharacterHeroBuildingData heroBuildingData) { var hero = heroBuildingData.HeroCharacter; - var isLevelingUp = LevelUpContext.IsLevelingUp(hero); + var isLevelingUp = LevelUpHelper.IsLevelingUp(hero); return !isLevelingUp; } @@ -450,22 +450,22 @@ private static List ClassFilteredFeatureUnlocks( CharacterClassDefinition characterClassDefinition, [NotNull] RulesetCharacterHero rulesetCharacterHero) { var firstClass = rulesetCharacterHero.ClassesHistory[0]; - var selectedClass = LevelUpContext.GetSelectedClass(rulesetCharacterHero) ?? characterClassDefinition; - var selectedSubClass = LevelUpContext.GetSelectedSubclass(rulesetCharacterHero); + var selectedClass = LevelUpHelper.GetSelectedClass(rulesetCharacterHero) ?? characterClassDefinition; + var selectedSubClass = LevelUpHelper.GetSelectedSubclass(rulesetCharacterHero); var filteredFeatureUnlockByLevels = selectedClass.FeatureUnlocks.ToList(); // // supports a better MC UI offering // - if (LevelUpContext.IsLevelingUp(rulesetCharacterHero) - && LevelUpContext.IsClassSelectionStage(rulesetCharacterHero) + if (LevelUpHelper.IsLevelingUp(rulesetCharacterHero) + && LevelUpHelper.IsClassSelectionStage(rulesetCharacterHero) && selectedSubClass) { filteredFeatureUnlockByLevels.AddRange(selectedSubClass.FeatureUnlocks); } // don't mess up with very first class taken - if (!LevelUpContext.IsMulticlass(rulesetCharacterHero) || firstClass == selectedClass) + if (!LevelUpHelper.IsMulticlass(rulesetCharacterHero) || firstClass == selectedClass) { return characterClassDefinition.FeatureUnlocks; } diff --git a/SolastaUnfinishedBusiness/Models/MulticlassGameUiContext.cs b/SolastaUnfinishedBusiness/Models/MulticlassGameUiContext.cs index 3668dbf6dc..1857f6507c 100644 --- a/SolastaUnfinishedBusiness/Models/MulticlassGameUiContext.cs +++ b/SolastaUnfinishedBusiness/Models/MulticlassGameUiContext.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Api.LanguageExtensions; using UnityEngine; using UnityEngine.UI; @@ -539,7 +540,7 @@ from spell in feature.ExtendedSpellList .OfType()) { var maxLevel = - LevelUpContext.GetMaxAutoPrepSpellsLevel(localHeroCharacter, featureDefinitionAutoPreparedSpells); + LevelUpHelper.GetMaxAutoPrepSpellsLevel(localHeroCharacter, featureDefinitionAutoPreparedSpells); foreach (var spells in featureDefinitionAutoPreparedSpells.AutoPreparedSpellsGroups .SelectMany(preparedSpellsGroup => preparedSpellsGroup.SpellsList @@ -578,7 +579,7 @@ from spell in feature.ExtendedSpellList } //Properly tag and not allow to pick spells that are auto-prepared from various features - LevelUpContext.EnumerateExtraSpells(group.extraSpellsMap, localHeroCharacter); + LevelUpHelper.EnumerateExtraSpells(group.extraSpellsMap, localHeroCharacter); // this is required to support when other caster is whole list var keys = group.extraSpellsMap.Keys.Where(x => !allSpells.Contains(x)); @@ -659,7 +660,7 @@ private static void FilterMulticlassBleeding( var spellLevel = __instance.SpellLevel; // avoids auto prepared spells from other classes to bleed in - var allowedAutoPreparedSpells = LevelUpContext.GetAllowedAutoPreparedSpells(caster) + var allowedAutoPreparedSpells = LevelUpHelper.GetAllowedAutoPreparedSpells(caster) .Where(x => x.SpellLevel == spellLevel); autoPreparedSpells.SetRange(allowedAutoPreparedSpells); @@ -667,9 +668,9 @@ private static void FilterMulticlassBleeding( //Select allowed spells - all spells if list is overriden by the pool, or all allowed spells of current level var allowedSpells = spellsOverriden ? [..allSpells] - : LevelUpContext.GetAllowedSpells(caster).Where(x => x.SpellLevel == spellLevel).ToArray(); + : LevelUpHelper.GetAllowedSpells(caster).Where(x => x.SpellLevel == spellLevel).ToArray(); - var otherClassesKnownSpells = LevelUpContext.GetOtherClassesKnownSpells(caster) + var otherClassesKnownSpells = LevelUpHelper.GetOtherClassesKnownSpells(caster) .Where(x => x.Key.SpellLevel == spellLevel).ToArray(); allSpells.RemoveAll(x => !allowedSpells.Contains(x) && otherClassesKnownSpells.All(p => p.Key != x)); @@ -721,7 +722,7 @@ private static void CollectAllAutoPreparedSpells( foreach (var featureDefinitionAutoPreparedSpells in hero.FeaturesToBrowse .OfType()) { - var maxLevel = LevelUpContext.GetMaxAutoPrepSpellsLevel(hero, featureDefinitionAutoPreparedSpells); + var maxLevel = LevelUpHelper.GetMaxAutoPrepSpellsLevel(hero, featureDefinitionAutoPreparedSpells); foreach (var spell in from preparedSpellsGroup in featureDefinitionAutoPreparedSpells .AutoPreparedSpellsGroups diff --git a/SolastaUnfinishedBusiness/Patches/ArchetypesPreviewModalPatcher.cs b/SolastaUnfinishedBusiness/Patches/ArchetypesPreviewModalPatcher.cs index e6bef2baad..6b5dbd685b 100644 --- a/SolastaUnfinishedBusiness/Patches/ArchetypesPreviewModalPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/ArchetypesPreviewModalPatcher.cs @@ -6,7 +6,6 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api; using SolastaUnfinishedBusiness.Api.Helpers; -using SolastaUnfinishedBusiness.Models; using UnityEngine; using UnityEngine.UI; @@ -30,8 +29,8 @@ private static int Level([NotNull] FeatureUnlockByLevel featureUnlockByLevel) return featureUnlockByLevel.Level; } - var isLevelingUp = LevelUpContext.IsLevelingUp(hero); - var selectedClass = LevelUpContext.GetSelectedClass(hero); + var isLevelingUp = LevelUpHelper.IsLevelingUp(hero); + var selectedClass = LevelUpHelper.GetSelectedClass(hero); if (selectedClass && isLevelingUp @@ -69,7 +68,7 @@ public static void Prefix(ArchetypesPreviewModal __instance, ref List su if (hero != null) { - var selectedClass = LevelUpContext.GetSelectedClass(hero); + var selectedClass = LevelUpHelper.GetSelectedClass(hero); if (selectedClass && hero.ClassesAndSubclasses.TryGetValue(selectedClass, out var characterSubclassDefinition)) diff --git a/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs index 5995efc95e..31e75b538c 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs @@ -30,7 +30,7 @@ public static class CreateNewCharacter_Patch public static void Postfix([NotNull] CharacterBuildingManager __instance) { //PATCH: registers the hero getting created - LevelUpContext.RegisterHero(__instance.CurrentLocalHeroCharacter, false); + LevelUpHelper.RegisterHero(__instance.CurrentLocalHeroCharacter, false); } } @@ -137,7 +137,7 @@ public static void Prefix([NotNull] RulesetCharacterHero hero, ref bool force) } //PATCH: registers the hero leveling up - LevelUpContext.RegisterHero(hero, true); + LevelUpHelper.RegisterHero(hero, true); } } @@ -150,7 +150,7 @@ public static class FinalizeCharacter_Patch public static void Prefix([NotNull] CharacterBuildingManager __instance, [NotNull] RulesetCharacterHero hero) { //PATCH: grants race features - LevelUpContext.GrantRaceFeatures(__instance, hero); + LevelUpHelper.GrantRaceFeatures(__instance, hero); //PATCH: grants repertoires and cantrips from backgrounds if (hero.ClassesHistory.Count == 1) @@ -171,8 +171,8 @@ public static void Prefix([NotNull] CharacterBuildingManager __instance, [NotNul } //PATCH: grants custom features - LevelUpContext.GrantCustomFeaturesFromFeats(hero); - LevelUpContext.GrantCustomFeatures(hero); + LevelUpHelper.GrantCustomFeaturesFromFeats(hero); + LevelUpHelper.GrantCustomFeatures(hero); } [UsedImplicitly] @@ -186,16 +186,16 @@ public static void Postfix(CharacterBuildingManager __instance, [NotNull] Rulese hero.GrantAcquiredSpellWithTagFromSubclassPool(WizardEvocation.Name, WizardEvocation.SpellTag); //PATCH: grants spell repertoires and respective selected spells from feats - LevelUpContext.GrantSpellsOrCantripsFromFeatCastSpell(__instance, hero); + LevelUpHelper.GrantSpellsOrCantripsFromFeatCastSpell(__instance, hero); //PATCH: keeps spell repertoires sorted by class title but ancestry one is always kept first - LevelUpContext.SortHeroRepertoires(hero); + LevelUpHelper.SortHeroRepertoires(hero); //PATCH: adds whole list caster spells to KnownSpells collection to improve the MC spell selection UI // LevelUpContext.UpdateKnownSpellsForWholeCasters(hero); //PATCH: unregisters the hero leveling up - LevelUpContext.UnregisterHero(hero); + LevelUpHelper.UnregisterHero(hero); } } @@ -208,17 +208,17 @@ public static class AssignClassLevel_Patch public static bool Prefix([NotNull] RulesetCharacterHero hero, CharacterClassDefinition classDefinition) { //PATCH: captures the desired class - LevelUpContext.SetSelectedClass(hero, classDefinition); + LevelUpHelper.SetSelectedClass(hero, classDefinition); //PATCH: ensures this doesn't get executed in the class panel level up screen - var isLevelingUp = LevelUpContext.IsLevelingUp(hero); - var isClassSelectionStage = LevelUpContext.IsClassSelectionStage(hero); + var isLevelingUp = LevelUpHelper.IsLevelingUp(hero); + var isClassSelectionStage = LevelUpHelper.IsClassSelectionStage(hero); var result = isLevelingUp && isClassSelectionStage; if (result) { //PATCH: grants items for new class if required - LevelUpContext.GrantItemsIfRequired(hero); + LevelUpHelper.GrantItemsIfRequired(hero); } return !result; @@ -234,7 +234,7 @@ public static class AssignSubclass_Patch public static void Prefix([NotNull] RulesetCharacterHero hero, CharacterSubclassDefinition subclassDefinition) { //PATCH: captures the desired sub class - LevelUpContext.SetSelectedSubclass(hero, subclassDefinition); + LevelUpHelper.SetSelectedSubclass(hero, subclassDefinition); } } @@ -247,8 +247,8 @@ public static class GrantFeatures_Patch public static bool Prefix([NotNull] RulesetCharacterHero hero) { //PATCH: ensures this doesn't get executed in the class panel level up screen - var isLevelingUp = LevelUpContext.IsLevelingUp(hero); - var isClassSelectionStage = LevelUpContext.IsClassSelectionStage(hero); + var isLevelingUp = LevelUpHelper.IsLevelingUp(hero); + var isClassSelectionStage = LevelUpHelper.IsClassSelectionStage(hero); return !(isLevelingUp && isClassSelectionStage); } @@ -353,17 +353,17 @@ public static class UnassignLastClassLevel_Patch public static bool Prefix([NotNull] RulesetCharacterHero hero) { //PATCH: un-captures the desired class - LevelUpContext.SetSelectedClass(hero, null); + LevelUpHelper.SetSelectedClass(hero, null); //PATCH: ensures this doesn't get executed in the class panel level up screen - var isLevelingUp = LevelUpContext.IsLevelingUp(hero); - var isClassSelectionStage = LevelUpContext.IsClassSelectionStage(hero); + var isLevelingUp = LevelUpHelper.IsLevelingUp(hero); + var isClassSelectionStage = LevelUpHelper.IsClassSelectionStage(hero); var result = isLevelingUp && isClassSelectionStage; if (result) { //PATCH: removes items from new class if required - LevelUpContext.RemoveItemsIfRequired(hero); + LevelUpHelper.RemoveItemsIfRequired(hero); } return !result; @@ -382,11 +382,11 @@ public static bool Prefix([NotNull] RulesetCharacterHero hero) DomainNature.ResetCantripSubclassPool(hero); //PATCH: un-captures the desired subclass - LevelUpContext.SetSelectedSubclass(hero, null); + LevelUpHelper.SetSelectedSubclass(hero, null); //PATCH: ensures this doesn't get executed in the class panel level up screen - var isLevelingUp = LevelUpContext.IsLevelingUp(hero); - var isClassSelectionStage = LevelUpContext.IsClassSelectionStage(hero); + var isLevelingUp = LevelUpHelper.IsLevelingUp(hero); + var isClassSelectionStage = LevelUpHelper.IsClassSelectionStage(hero); var result = isLevelingUp && isClassSelectionStage; return !result; @@ -402,8 +402,8 @@ public static class UntrainLastFightingStyle_Patch public static bool Prefix([NotNull] RulesetCharacterHero hero) { //PATCH: ensures this doesn't get executed in the class panel level up screen - var isLevelingUp = LevelUpContext.IsLevelingUp(hero); - var isClassSelectionStage = LevelUpContext.IsClassSelectionStage(hero); + var isLevelingUp = LevelUpHelper.IsLevelingUp(hero); + var isClassSelectionStage = LevelUpHelper.IsClassSelectionStage(hero); var result = isLevelingUp && isClassSelectionStage; return !result; @@ -421,7 +421,7 @@ public static void Postfix( List __result) { //PATCH: ensures the level up process only presents / offers spells from current class - LevelUpContext.EnumerateKnownAndAcquiredSpells(heroBuildingData, __result); + LevelUpHelper.EnumerateKnownAndAcquiredSpells(heroBuildingData, __result); } } @@ -455,13 +455,13 @@ public static bool Prefix( return false; } - var isMulticlass = LevelUpContext.IsMulticlass(hero); + var isMulticlass = LevelUpHelper.IsMulticlass(hero); if (!isMulticlass) { return true; } - var selectedClass = LevelUpContext.GetSelectedClass(hero); + var selectedClass = LevelUpHelper.GetSelectedClass(hero); if (!selectedClass) { @@ -571,9 +571,9 @@ public static bool Prefix( [NotNull] CharacterHeroBuildingData heroBuildingData) { var hero = heroBuildingData.HeroCharacter; - var selectedClass = LevelUpContext.GetSelectedClass(hero); - var selectedSubclass = LevelUpContext.GetSelectedSubclass(hero); - var selectedClassLevel = LevelUpContext.GetSelectedClassLevel(hero); + var selectedClass = LevelUpHelper.GetSelectedClass(hero); + var selectedSubclass = LevelUpHelper.GetSelectedSubclass(hero); + var selectedClassLevel = LevelUpHelper.GetSelectedClassLevel(hero); // we filter out any repertoire that was granted from feats foreach (var spellRepertoire in hero.SpellRepertoires @@ -755,7 +755,7 @@ public static void Prefix( } } - LevelUpContext.RebuildCharacterStageProficiencyPanel(heroBuildingData.LevelingUp); + LevelUpHelper.RebuildCharacterStageProficiencyPanel(heroBuildingData.LevelingUp); } } @@ -799,7 +799,7 @@ public static void Prefix( } } - LevelUpContext.RebuildCharacterStageProficiencyPanel(heroBuildingData.LevelingUp); + LevelUpHelper.RebuildCharacterStageProficiencyPanel(heroBuildingData.LevelingUp); } } @@ -845,7 +845,7 @@ public static void Prefix( } } - LevelUpContext.RebuildCharacterStageProficiencyPanel(heroBuildingData.LevelingUp); + LevelUpHelper.RebuildCharacterStageProficiencyPanel(heroBuildingData.LevelingUp); } } } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterEditionScreenPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterEditionScreenPatcher.cs index 3a4ac92297..a01e66664c 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterEditionScreenPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterEditionScreenPatcher.cs @@ -1,6 +1,7 @@ using System.Diagnostics.CodeAnalysis; using HarmonyLib; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Models; @@ -35,7 +36,7 @@ public static class DoAbort_Patch public static void Prefix([NotNull] CharacterEditionScreen __instance) { //PATCH: Unregisters hero from level up context (MULTICLASS) - LevelUpContext.UnregisterHero(__instance.currentHero); + LevelUpHelper.UnregisterHero(__instance.currentHero); } } } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageClassSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageClassSelectionPanelPatcher.cs index efe069ad8c..5d1f796173 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageClassSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageClassSelectionPanelPatcher.cs @@ -31,13 +31,13 @@ public static void Prefix([NotNull] CharacterStageClassSelectionPanel __instance __instance.compatibleClasses.SetRange(visibleClasses); - if (!LevelUpContext.IsLevelingUp(__instance.currentHero)) + if (!LevelUpHelper.IsLevelingUp(__instance.currentHero)) { return; } //PATCH: mark we started selecting classes (MULTICLASS) - LevelUpContext.SetIsClassSelectionStage(__instance.currentHero, true); + LevelUpHelper.SetIsClassSelectionStage(__instance.currentHero, true); //PATCH: apply in/out logic (MULTICLASS) MulticlassInOutRulesContext.EnumerateHeroAllowedClassDefinitions( @@ -73,8 +73,8 @@ private static int Level( [NotNull] FeatureUnlockByLevel featureUnlockByLevel, [NotNull] RulesetCharacterHero hero) { - var isLevelingUp = LevelUpContext.IsLevelingUp(hero); - var selectedClass = LevelUpContext.GetSelectedClass(hero); + var isLevelingUp = LevelUpHelper.IsLevelingUp(hero); + var selectedClass = LevelUpHelper.GetSelectedClass(hero); if (!isLevelingUp) { @@ -123,7 +123,7 @@ public static class Refresh_Patch { private static bool SetActive([NotNull] RulesetCharacterHero currentHero) { - return !LevelUpContext.IsLevelingUp(currentHero); + return !LevelUpHelper.IsLevelingUp(currentHero); } [NotNull] diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageDeitySelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageDeitySelectionPanelPatcher.cs index 7df125e5a3..9820ad4300 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageDeitySelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageDeitySelectionPanelPatcher.cs @@ -1,7 +1,7 @@ using System.Diagnostics.CodeAnalysis; using HarmonyLib; using JetBrains.Annotations; -using SolastaUnfinishedBusiness.Models; +using SolastaUnfinishedBusiness.Api.Helpers; namespace SolastaUnfinishedBusiness.Patches; @@ -17,9 +17,9 @@ public static class UpdateRelevance_Patch public static void Postfix([NotNull] CharacterStageDeitySelectionPanel __instance) { //PATCH: updates this panel relevance (MULTICLASS) - if (LevelUpContext.IsLevelingUp(__instance.currentHero)) + if (LevelUpHelper.IsLevelingUp(__instance.currentHero)) { - __instance.isRelevant = LevelUpContext.RequiresDeity(__instance.currentHero); + __instance.isRelevant = LevelUpHelper.RequiresDeity(__instance.currentHero); } } } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageFightingStyleSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageFightingStyleSelectionPanelPatcher.cs index 89aaac3a2a..d2e7a645c0 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageFightingStyleSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageFightingStyleSelectionPanelPatcher.cs @@ -3,7 +3,7 @@ using System.Linq; using HarmonyLib; using JetBrains.Annotations; -using SolastaUnfinishedBusiness.Models; +using SolastaUnfinishedBusiness.Api.Helpers; using UnityEngine; using UnityEngine.UI; @@ -80,7 +80,7 @@ public static void Postfix( } var hero = __instance.currentHero; - var lastGainedSubclass = LevelUpContext.GetSelectedSubclass(hero); + var lastGainedSubclass = LevelUpHelper.GetSelectedSubclass(hero); if (!lastGainedSubclass) { diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageLevelGainsPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageLevelGainsPanelPatcher.cs index 00a1b55e47..73fa9cef52 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageLevelGainsPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageLevelGainsPanelPatcher.cs @@ -6,7 +6,6 @@ using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.Helpers; -using SolastaUnfinishedBusiness.Models; namespace SolastaUnfinishedBusiness.Patches; @@ -25,13 +24,13 @@ public static void GetLastAssignedClassAndLevel( out CharacterClassDefinition lastClassDefinition, out int level) { - if (LevelUpContext.IsLevelingUp(hero)) + if (LevelUpHelper.IsLevelingUp(hero)) { //PATCH: mark we are beyond selecting classes (MULTICLASS) - LevelUpContext.SetIsClassSelectionStage(hero, false); + LevelUpHelper.SetIsClassSelectionStage(hero, false); //PATCH: gets my own class and level for level up (MULTICLASS) - lastClassDefinition = LevelUpContext.GetSelectedClass(hero); + lastClassDefinition = LevelUpHelper.GetSelectedClass(hero); level = hero.ClassesHistory.Count; } else @@ -65,10 +64,10 @@ public static class RefreshSpellcastingFeatures_Patch private static List SpellRepertoires( [NotNull] RulesetCharacterHero rulesetCharacterHero) { - if (LevelUpContext.IsLevelingUp(rulesetCharacterHero) && LevelUpContext.IsMulticlass(rulesetCharacterHero)) + if (LevelUpHelper.IsLevelingUp(rulesetCharacterHero) && LevelUpHelper.IsMulticlass(rulesetCharacterHero)) { return rulesetCharacterHero.SpellRepertoires - .Where(x => LevelUpContext.IsRepertoireFromSelectedClassSubclass(rulesetCharacterHero, x)) + .Where(x => LevelUpHelper.IsRepertoireFromSelectedClassSubclass(rulesetCharacterHero, x)) .ToList(); } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageSubclassSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageSubclassSelectionPanelPatcher.cs index 9f3e6dfaaa..32c9fe6c0f 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageSubclassSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageSubclassSelectionPanelPatcher.cs @@ -2,7 +2,7 @@ using System.Diagnostics.CodeAnalysis; using HarmonyLib; using JetBrains.Annotations; -using SolastaUnfinishedBusiness.Models; +using SolastaUnfinishedBusiness.Api.Helpers; using UnityEngine; using UnityEngine.UI; @@ -55,8 +55,8 @@ public static class UpdateRelevance_Patch public static void Postfix([NotNull] CharacterStageSubclassSelectionPanel __instance) { //PATCH: updates this panel relevance (MULTICLASS) - if (LevelUpContext.IsLevelingUp(__instance.currentHero) - && LevelUpContext.RequiresDeity(__instance.currentHero)) + if (LevelUpHelper.IsLevelingUp(__instance.currentHero) + && LevelUpHelper.RequiresDeity(__instance.currentHero)) { __instance.isRelevant = false; } diff --git a/SolastaUnfinishedBusiness/Patches/FeatureDescriptionItemPatcher.cs b/SolastaUnfinishedBusiness/Patches/FeatureDescriptionItemPatcher.cs index c0c2425c99..662fd93d25 100644 --- a/SolastaUnfinishedBusiness/Patches/FeatureDescriptionItemPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/FeatureDescriptionItemPatcher.cs @@ -1,7 +1,7 @@ using System.Diagnostics.CodeAnalysis; using HarmonyLib; using JetBrains.Annotations; -using SolastaUnfinishedBusiness.Models; +using SolastaUnfinishedBusiness.Api.Helpers; namespace SolastaUnfinishedBusiness.Patches; @@ -24,7 +24,7 @@ public static void Postfix([NotNull] FeatureDescriptionItem __instance) return; } - var isClassSelectionStage = LevelUpContext.IsClassSelectionStage(hero); + var isClassSelectionStage = LevelUpHelper.IsClassSelectionStage(hero); if (!isClassSelectionStage) { diff --git a/SolastaUnfinishedBusiness/Patches/HigherLevelFeaturesModalPatcher.cs b/SolastaUnfinishedBusiness/Patches/HigherLevelFeaturesModalPatcher.cs index ebaf80e168..601dce21c7 100644 --- a/SolastaUnfinishedBusiness/Patches/HigherLevelFeaturesModalPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/HigherLevelFeaturesModalPatcher.cs @@ -1,7 +1,7 @@ using System.Diagnostics.CodeAnalysis; using HarmonyLib; using JetBrains.Annotations; -using SolastaUnfinishedBusiness.Models; +using SolastaUnfinishedBusiness.Api.Helpers; namespace SolastaUnfinishedBusiness.Patches; @@ -24,9 +24,9 @@ public static void Prefix(ref int achievementLevel) } //PATCH: filters out features already taken on class display (MULTICLASS) - var isLevelingUp = LevelUpContext.IsLevelingUp(hero); - var isClassSelectionStage = LevelUpContext.IsClassSelectionStage(hero); - var selectedClass = LevelUpContext.GetSelectedClass(hero); + var isLevelingUp = LevelUpHelper.IsLevelingUp(hero); + var isClassSelectionStage = LevelUpHelper.IsClassSelectionStage(hero); + var selectedClass = LevelUpHelper.GetSelectedClass(hero); if (selectedClass && isLevelingUp diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs index 021bbbea00..09c48cfed0 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs @@ -1084,7 +1084,7 @@ public static class AddClassLevel_Patch [UsedImplicitly] public static bool Prefix([NotNull] RulesetCharacterHero __instance, CharacterClassDefinition classDefinition) { - var isLevelingUp = LevelUpContext.IsLevelingUp(__instance); + var isLevelingUp = LevelUpHelper.IsLevelingUp(__instance); if (!isLevelingUp) { diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs index 4aab2786ab..466c8d24b9 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs @@ -1763,7 +1763,7 @@ public static bool Prefix( if (!spellcastingClass && spellRepertoire.SpellCastingSubclass) { - spellcastingClass = LevelUpContext.GetClassForSubclass(spellRepertoire.SpellCastingSubclass); + spellcastingClass = LevelUpHelper.GetClassForSubclass(spellRepertoire.SpellCastingSubclass); } //END PATCH diff --git a/SolastaUnfinishedBusiness/Patches/SpellBoxPatcher.cs b/SolastaUnfinishedBusiness/Patches/SpellBoxPatcher.cs index 1e052ff7d2..64e7c30e24 100644 --- a/SolastaUnfinishedBusiness/Patches/SpellBoxPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/SpellBoxPatcher.cs @@ -2,6 +2,7 @@ using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api; +using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Models; namespace SolastaUnfinishedBusiness.Patches; @@ -28,8 +29,8 @@ public static void Prefix( } //PATCH: show actual class/subclass name in the multiclass tag during spell selection on level up - if (tag.StartsWith(LevelUpContext.ExtraClassTag) - || tag.StartsWith(LevelUpContext.ExtraSubclassTag)) + if (tag.StartsWith(LevelUpHelper.ExtraClassTag) + || tag.StartsWith(LevelUpHelper.ExtraSubclassTag)) { //store original extra tag and reset both - actual texts would be handled on Postfix for this case _extraTag = tag; @@ -77,13 +78,13 @@ public static void Postfix(SpellBox __instance) switch (type) { - case LevelUpContext.ExtraClassTag when + case LevelUpHelper.ExtraClassTag when DatabaseHelper.TryGetDefinition(name, out var classDef): name = classDef.FormatTitle(); __instance.autoPreparedTooltip.Content = Gui.Format(CLASS_FORMAT, name); break; - case LevelUpContext.ExtraSubclassTag when + case LevelUpHelper.ExtraSubclassTag when DatabaseHelper.TryGetDefinition(name, out var subDef): name = subDef.FormatTitle(); __instance.autoPreparedTooltip.Content = Gui.Format(SUBCLASS_FORMAT, name); diff --git a/SolastaUnfinishedBusiness/Patches/SpellsByLevelGroupPatcher.cs b/SolastaUnfinishedBusiness/Patches/SpellsByLevelGroupPatcher.cs index d88fb58de6..0757c1b4d8 100644 --- a/SolastaUnfinishedBusiness/Patches/SpellsByLevelGroupPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/SpellsByLevelGroupPatcher.cs @@ -2,7 +2,7 @@ using System.Diagnostics.CodeAnalysis; using HarmonyLib; using JetBrains.Annotations; -using SolastaUnfinishedBusiness.Models; +using SolastaUnfinishedBusiness.Api.Helpers; namespace SolastaUnfinishedBusiness.Patches; @@ -19,7 +19,7 @@ public static void Prefix(RulesetCharacter caster, Dictionary Date: Sun, 3 Nov 2024 16:19:10 -0800 Subject: [PATCH 52/85] move MulticlassGameUiContext into CustomUI --- .../MulticlassGameUi.cs} | 5 +++-- .../CustomUI/ReactionRequestSpendSpellSlotExtended.cs | 4 ++-- .../Patches/CharacterEditionScreenPatcher.cs | 2 +- .../Patches/CharacterPlateDetailedPatcher.cs | 5 +++-- .../Patches/CharacterReactionSubitemPatcher.cs | 5 +++-- .../Patches/CharacterStageSpellSelectionPanelPatcher.cs | 3 ++- .../Patches/CharactersStatsPanelPatcher.cs | 5 +++-- .../Patches/FlexibleCastingItemPatcher.cs | 5 +++-- SolastaUnfinishedBusiness/Patches/GuiCharacterPatcher.cs | 6 +++--- .../Patches/ReactionRequestCastSpellPatcher.cs | 3 ++- SolastaUnfinishedBusiness/Patches/SlotStatusTablePatcher.cs | 5 +++-- .../Patches/SpellRepertoirePanelPatcher.cs | 3 ++- 12 files changed, 30 insertions(+), 21 deletions(-) rename SolastaUnfinishedBusiness/{Models/MulticlassGameUiContext.cs => CustomUI/MulticlassGameUi.cs} (99%) diff --git a/SolastaUnfinishedBusiness/Models/MulticlassGameUiContext.cs b/SolastaUnfinishedBusiness/CustomUI/MulticlassGameUi.cs similarity index 99% rename from SolastaUnfinishedBusiness/Models/MulticlassGameUiContext.cs rename to SolastaUnfinishedBusiness/CustomUI/MulticlassGameUi.cs index 1857f6507c..237499f891 100644 --- a/SolastaUnfinishedBusiness/Models/MulticlassGameUiContext.cs +++ b/SolastaUnfinishedBusiness/CustomUI/MulticlassGameUi.cs @@ -5,13 +5,14 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Api.LanguageExtensions; +using SolastaUnfinishedBusiness.Models; using UnityEngine; using UnityEngine.UI; using static RuleDefinitions; -namespace SolastaUnfinishedBusiness.Models; +namespace SolastaUnfinishedBusiness.CustomUI; -internal static class MulticlassGameUiContext +internal static class MulticlassGameUi { private static readonly float[] FontSizes = [17f, 17f, 16f, 14.75f, 13.5f, 13.5f, 13.5f]; diff --git a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendSpellSlotExtended.cs b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendSpellSlotExtended.cs index 13d5a068ed..748763d9db 100644 --- a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendSpellSlotExtended.cs +++ b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendSpellSlotExtended.cs @@ -24,12 +24,12 @@ internal ReactionRequestSpendSpellSlotExtended(CharacterActionParams actionParam { var minLevel = SharedSpellsContext.GetWarlockSpellLevel(hero); - selected = MulticlassGameUiContext.AddAvailableSubLevels(SubOptionsAvailability, hero, spellRepertoire, + selected = MulticlassGameUi.AddAvailableSubLevels(SubOptionsAvailability, hero, spellRepertoire, minLevel, minLevel); } else { - selected = MulticlassGameUiContext.AddAvailableSubLevels(SubOptionsAvailability, hero, spellRepertoire, + selected = MulticlassGameUi.AddAvailableSubLevels(SubOptionsAvailability, hero, spellRepertoire, actionParams.IntParameter); } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterEditionScreenPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterEditionScreenPatcher.cs index a01e66664c..94d47bc6f7 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterEditionScreenPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterEditionScreenPatcher.cs @@ -23,7 +23,7 @@ public static void Postfix(CharacterEditionScreen __instance) CustomInvocationSelectionPanel.InsertPanel(__instance); //PATCH: adds the Multiclass class selection panel to the level up screen (MULTICLASS) - MulticlassGameUiContext.SetupLevelUpClassSelectionStep(__instance); + MulticlassGameUi.SetupLevelUpClassSelectionStep(__instance); } } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterPlateDetailedPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterPlateDetailedPatcher.cs index 80b0e1ae3b..00a32e59ab 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterPlateDetailedPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterPlateDetailedPatcher.cs @@ -1,6 +1,7 @@ using System.Diagnostics.CodeAnalysis; using HarmonyLib; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Models; namespace SolastaUnfinishedBusiness.Patches; @@ -32,9 +33,9 @@ public static void Postfix(CharacterPlateDetailed __instance) classesCount = guiCharacter.Snapshot.Classes.Length; } - __instance.classLabel.Text = MulticlassGameUiContext.GetAllClassesLabel(guiCharacter, separator) ?? + __instance.classLabel.Text = MulticlassGameUi.GetAllClassesLabel(guiCharacter, separator) ?? __instance.classLabel.Text; - __instance.classLabel.TMP_Text.fontSize = MulticlassGameUiContext.GetFontSize(classesCount); + __instance.classLabel.TMP_Text.fontSize = MulticlassGameUi.GetFontSize(classesCount); } } } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterReactionSubitemPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterReactionSubitemPatcher.cs index e18077972d..946e78bd8a 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterReactionSubitemPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterReactionSubitemPatcher.cs @@ -2,6 +2,7 @@ using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; +using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Models; using UnityEngine; @@ -48,7 +49,7 @@ public static void Postfix( spellRepertoire.GetSlotsNumber(slotLevel, out var totalSlotsRemainingCount, out var totalSlotsCount); - MulticlassGameUiContext.PaintPactSlotsAlternate( + MulticlassGameUi.PaintPactSlotsAlternate( hero, totalSlotsCount, totalSlotsRemainingCount, slotLevel, __instance.slotStatusTable); } @@ -63,7 +64,7 @@ public static class Unbind_Patch public static void Prefix(CharacterReactionSubitem __instance) { //PATCH: ensures slot colors are white before getting back to pool - MulticlassGameUiContext.PaintSlotsWhite(__instance.slotStatusTable); + MulticlassGameUi.PaintSlotsWhite(__instance.slotStatusTable); //PATCH: disables tooltip on Unbind. //default implementation doesn't use tooltips, so we are cleaning up after custom warcaster and bundled power binds diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageSpellSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageSpellSelectionPanelPatcher.cs index 6ca2958d8a..5adc63d133 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageSpellSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageSpellSelectionPanelPatcher.cs @@ -5,6 +5,7 @@ using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.Helpers; +using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Models; using UnityEngine; using UnityEngine.UI; @@ -42,7 +43,7 @@ public static IEnumerable Transpiler([NotNull] IEnumerable(MulticlassGameUiContext.SpellsByLevelGroupBindLearning).Method; + >(MulticlassGameUi.SpellsByLevelGroupBindLearning).Method; return instructions.ReplaceCalls(bindMethod, "CharacterStageSpellSelectionPanel.Refresh", new CodeInstruction(OpCodes.Ldarg_0), diff --git a/SolastaUnfinishedBusiness/Patches/CharactersStatsPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharactersStatsPanelPatcher.cs index 9614a6abda..21cf488dab 100644 --- a/SolastaUnfinishedBusiness/Patches/CharactersStatsPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharactersStatsPanelPatcher.cs @@ -1,6 +1,7 @@ using System.Diagnostics.CodeAnalysis; using HarmonyLib; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Models; namespace SolastaUnfinishedBusiness.Patches; @@ -24,8 +25,8 @@ public static void Postfix(CharacterStatsPanel __instance) } __instance.hitDiceBox.ValueLabel.Text = - MulticlassGameUiContext.GetAllClassesHitDiceLabel(__instance.guiCharacter, out var dieTypeCount); - __instance.hitDiceBox.ValueLabel.TMP_Text.fontSize = MulticlassGameUiContext.GetFontSize(dieTypeCount); + MulticlassGameUi.GetAllClassesHitDiceLabel(__instance.guiCharacter, out var dieTypeCount); + __instance.hitDiceBox.ValueLabel.TMP_Text.fontSize = MulticlassGameUi.GetFontSize(dieTypeCount); } } } diff --git a/SolastaUnfinishedBusiness/Patches/FlexibleCastingItemPatcher.cs b/SolastaUnfinishedBusiness/Patches/FlexibleCastingItemPatcher.cs index 98d6fd9248..ee2aabe41f 100644 --- a/SolastaUnfinishedBusiness/Patches/FlexibleCastingItemPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/FlexibleCastingItemPatcher.cs @@ -2,6 +2,7 @@ using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; +using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Models; namespace SolastaUnfinishedBusiness.Patches; @@ -38,7 +39,7 @@ public static void Postfix( return; } - MulticlassGameUiContext.PaintPactSlotsAlternate( + MulticlassGameUi.PaintPactSlotsAlternate( hero, maxSlots, remainingSlots, slotLevel, __instance.slotStatusTable); } } @@ -54,7 +55,7 @@ public static void Prefix(FlexibleCastingItem __instance) SpellPointsContext.RefreshActionPanelAfterFlexibleCastingItem(); //PATCH: ensures slot colors are white before getting back to pool (MULTICLASS) - MulticlassGameUiContext.PaintSlotsWhite(__instance.slotStatusTable); + MulticlassGameUi.PaintSlotsWhite(__instance.slotStatusTable); } } } diff --git a/SolastaUnfinishedBusiness/Patches/GuiCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/GuiCharacterPatcher.cs index 028bbbab09..5b65624c4f 100644 --- a/SolastaUnfinishedBusiness/Patches/GuiCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GuiCharacterPatcher.cs @@ -119,7 +119,7 @@ public static class LevelAndClassAndSubclass_Getter_Patch [UsedImplicitly] public static void Postfix(GuiCharacter __instance, ref string __result) { - __result = MulticlassGameUiContext.GetAllClassesLabel(__instance, ' ') ?? __result; + __result = MulticlassGameUi.GetAllClassesLabel(__instance, ' ') ?? __result; } } @@ -132,7 +132,7 @@ public static class ClassAndLevel_Getter_Patch [UsedImplicitly] public static void Postfix(GuiCharacter __instance, ref string __result) { - __result = MulticlassGameUiContext.GetAllClassesLabel(__instance, ' ') ?? __result; + __result = MulticlassGameUi.GetAllClassesLabel(__instance, ' ') ?? __result; } } @@ -145,7 +145,7 @@ public static class LevelAndExperienceTooltip_Getter_Patch [UsedImplicitly] public static void Postfix(GuiCharacter __instance, ref string __result) { - __result = MulticlassGameUiContext.GetLevelAndExperienceTooltip(__instance) ?? __result; + __result = MulticlassGameUi.GetLevelAndExperienceTooltip(__instance) ?? __result; } } diff --git a/SolastaUnfinishedBusiness/Patches/ReactionRequestCastSpellPatcher.cs b/SolastaUnfinishedBusiness/Patches/ReactionRequestCastSpellPatcher.cs index fc00048e37..b14331cf5a 100644 --- a/SolastaUnfinishedBusiness/Patches/ReactionRequestCastSpellPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/ReactionRequestCastSpellPatcher.cs @@ -3,6 +3,7 @@ using System.Linq; using HarmonyLib; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Models; namespace SolastaUnfinishedBusiness.Patches; @@ -64,7 +65,7 @@ public static void Postfix(ReactionRequestCastSpell __instance) var spellLevel = rulesetEffectSpell.SpellDefinition.SpellLevel; var selected = - MulticlassGameUiContext.AddAvailableSubLevels(optionsAvailability, hero, repertoire, spellLevel); + MulticlassGameUi.AddAvailableSubLevels(optionsAvailability, hero, repertoire, spellLevel); if (selected >= 0) { diff --git a/SolastaUnfinishedBusiness/Patches/SlotStatusTablePatcher.cs b/SolastaUnfinishedBusiness/Patches/SlotStatusTablePatcher.cs index e2c0a2959c..27db77fd27 100644 --- a/SolastaUnfinishedBusiness/Patches/SlotStatusTablePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/SlotStatusTablePatcher.cs @@ -6,6 +6,7 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.Helpers; +using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Models; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; @@ -87,7 +88,7 @@ public static void Postfix( spellRepertoire.GetSlotsNumber(spellLevel, out var totalSlotsRemainingCount, out var totalSlotsCount); - MulticlassGameUiContext.PaintPactSlots( + MulticlassGameUi.PaintPactSlots( hero, totalSlotsCount, totalSlotsRemainingCount, @@ -110,7 +111,7 @@ public static class Unbind_Patch [UsedImplicitly] public static void Prefix(SlotStatusTable __instance) { - MulticlassGameUiContext.PaintSlotsWhite(__instance.table); + MulticlassGameUi.PaintSlotsWhite(__instance.table); } } } diff --git a/SolastaUnfinishedBusiness/Patches/SpellRepertoirePanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/SpellRepertoirePanelPatcher.cs index ab66c9769c..d991c70d1d 100644 --- a/SolastaUnfinishedBusiness/Patches/SpellRepertoirePanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/SpellRepertoirePanelPatcher.cs @@ -6,6 +6,7 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api; using SolastaUnfinishedBusiness.Api.Helpers; +using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Models; using TMPro; using UnityEngine; @@ -25,7 +26,7 @@ public static class Bind_Patch public static void Postfix(SpellRepertoirePanel __instance) { //PATCH: filters how spells and slots are displayed on inspection (MULTICLASS) - MulticlassGameUiContext.RebuildSlotsTable(__instance); + MulticlassGameUi.RebuildSlotsTable(__instance); //PATCH: displays sorcery point box for sorcerers only if (!Main.Settings.EnableDisplaySorceryPointBoxSorcererOnly) From 7e8e41ee8b8ae82509ca11a99574c56c265f342e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 16:21:31 -0800 Subject: [PATCH 53/85] move DmProRendererContext into CustomUI --- .../DungeonMakerCustomRooms.cs} | 5 +++-- .../Patches/BaseBlueprintPatcher.cs | 3 ++- .../Patches/WorldLocationPatcher.cs | 11 ++++++----- 3 files changed, 11 insertions(+), 8 deletions(-) rename SolastaUnfinishedBusiness/{Models/DmProRendererContext.cs => CustomUI/DungeonMakerCustomRooms.cs} (98%) diff --git a/SolastaUnfinishedBusiness/Models/DmProRendererContext.cs b/SolastaUnfinishedBusiness/CustomUI/DungeonMakerCustomRooms.cs similarity index 98% rename from SolastaUnfinishedBusiness/Models/DmProRendererContext.cs rename to SolastaUnfinishedBusiness/CustomUI/DungeonMakerCustomRooms.cs index d22a231936..87748c83ee 100644 --- a/SolastaUnfinishedBusiness/Models/DmProRendererContext.cs +++ b/SolastaUnfinishedBusiness/CustomUI/DungeonMakerCustomRooms.cs @@ -4,13 +4,14 @@ using AwesomeTechnologies.VegetationSystem; using AwesomeTechnologies.VegetationSystem.Biomes; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Models; using UnityEngine; using Object = UnityEngine.Object; using Random = System.Random; -namespace SolastaUnfinishedBusiness.Models; +namespace SolastaUnfinishedBusiness.CustomUI; -internal static class DmProRendererContext +internal static class DungeonMakerCustomRooms { private const int Margin = 25; private const int FlatRoomSize = 12; diff --git a/SolastaUnfinishedBusiness/Patches/BaseBlueprintPatcher.cs b/SolastaUnfinishedBusiness/Patches/BaseBlueprintPatcher.cs index d39c048e98..f5b7c55a63 100644 --- a/SolastaUnfinishedBusiness/Patches/BaseBlueprintPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/BaseBlueprintPatcher.cs @@ -1,6 +1,7 @@ using System.Diagnostics.CodeAnalysis; using HarmonyLib; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Models; namespace SolastaUnfinishedBusiness.Patches; @@ -22,7 +23,7 @@ public static bool Prefix( bool perspective) { //PATCH: ensures custom props display the proper icon (DMP) - return DmProRendererContext.ExtendedGetAssetKey( + return DungeonMakerCustomRooms.ExtendedGetAssetKey( __instance, ref __result, prefabByEnvironmentDescription, environmentDefinition, perspective); } } diff --git a/SolastaUnfinishedBusiness/Patches/WorldLocationPatcher.cs b/SolastaUnfinishedBusiness/Patches/WorldLocationPatcher.cs index 2e9c0dfe26..0184474df8 100644 --- a/SolastaUnfinishedBusiness/Patches/WorldLocationPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/WorldLocationPatcher.cs @@ -5,6 +5,7 @@ using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.Helpers; +using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Models; using UnityEngine; @@ -22,14 +23,14 @@ public static class BuildFromUserLocation_Patch [UsedImplicitly] public static void Prefix(WorldLocation __instance, UserLocation userLocation) { - DmProRendererContext.GetTemplateVegetationMaskArea(__instance); - DmProRendererContext.SetupLocationTerrain(__instance, userLocation); + DungeonMakerCustomRooms.GetTemplateVegetationMaskArea(__instance); + DungeonMakerCustomRooms.SetupLocationTerrain(__instance, userLocation); } [UsedImplicitly] public static void Postfix(WorldLocation __instance) { - DmProRendererContext.FixFlatRoomReflectionProbe(__instance); + DungeonMakerCustomRooms.FixFlatRoomReflectionProbe(__instance); } [NotNull] @@ -37,9 +38,9 @@ public static void Postfix(WorldLocation __instance) public static IEnumerable Transpiler([NotNull] IEnumerable instructions) { var setLocalPositionMethod = typeof(Transform).GetMethod("set_localPosition"); - var setupFlatRoomsMethod = new Action(DmProRendererContext.SetupFlatRooms).Method; + var setupFlatRoomsMethod = new Action(DungeonMakerCustomRooms.SetupFlatRooms).Method; var addVegetationMaskAreaMethod = - new Action(DmProRendererContext.AddVegetationMaskArea).Method; + new Action(DungeonMakerCustomRooms.AddVegetationMaskArea).Method; return instructions.ReplaceCall(setLocalPositionMethod, 1, From 187339a7e009085fe9c64e85e89b7292fdfeb7b2 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 16:26:04 -0800 Subject: [PATCH 54/85] major reorg --- .../Helpers/MulticlassInOutRulesHelper.cs} | 4 +-- .../Behaviors/Specific/PowerBundle.cs | 2 +- .../CustomUI/DungeonMakerCustomRooms.cs | 4 +-- .../Displays/CampaignsDisplay.cs | 32 +++++++++---------- .../Displays/EncountersDisplay.cs | 22 ++++++------- .../Feats/MeleeCombatFeats.cs | 4 +-- .../Models/BootContext.cs | 6 ++-- .../{GameUiContext.cs => CampaignsContext.cs} | 2 +- ...ditorContext.cs => DungeonMakerContext.cs} | 2 +- ...erSpawnContext.cs => EncountersContext.cs} | 2 +- .../Models/InputContext.cs | 22 ++++++------- .../Models/SettingsContext.cs | 4 +-- .../Models/Tabletop2024Context.cs | 2 +- ...haracterStageClassSelectionPanelPatcher.cs | 2 +- ...erStageProficiencySelectionPanelPatcher.cs | 2 +- .../CursorLocationSelectTargetPatcher.cs | 2 +- .../Patches/DebugCameraPatcher.cs | 4 +-- .../GadgetBlueprintSelectionPanelPatcher.cs | 2 +- .../Patches/GameGadgetPatcher.cs | 4 +-- .../Patches/GameLocationManagerPatcher.cs | 2 +- .../GameLocationTargetingManagerPatcher.cs | 2 +- .../Patches/GuiCharacterPatcher.cs | 2 +- .../Patches/HealthGaugeGroupPatcher.cs | 2 +- .../Patches/MetaMagicSubPanelPatcher.cs | 2 +- .../Patches/MovementHelperPatcher.cs | 4 +-- .../PropBlueprintSelectionPanelPatcher.cs | 2 +- .../RoomBlueprintSelectionPanelPatcher.cs | 2 +- .../Patches/RulesetCharacterPatcher.cs | 8 ++--- .../Patches/SpellSelectionPanelPatcher.cs | 4 +-- .../Patches/UserCampaignPoolManagerPatcher.cs | 2 +- .../Patches/UserLocationPoolManagerPatcher.cs | 2 +- .../UserLocationSettingsModalPatcher.cs | 2 +- .../Patches/WorldGadgetPatcher.cs | 2 +- SolastaUnfinishedBusiness/Settings.cs | 20 ++++++------ .../Subclasses/PathOfTheWildMagic.cs | 6 ++-- .../Subclasses/PatronArchfey.cs | 2 +- .../Subclasses/SorcerousWildMagic.cs | 2 +- 37 files changed, 96 insertions(+), 96 deletions(-) rename SolastaUnfinishedBusiness/{Models/MulticlassInOutRulesContext.cs => Api/Helpers/MulticlassInOutRulesHelper.cs} (98%) rename SolastaUnfinishedBusiness/Models/{GameUiContext.cs => CampaignsContext.cs} (99%) rename SolastaUnfinishedBusiness/Models/{DmProEditorContext.cs => DungeonMakerContext.cs} (99%) rename SolastaUnfinishedBusiness/Models/{EncounterSpawnContext.cs => EncountersContext.cs} (99%) diff --git a/SolastaUnfinishedBusiness/Models/MulticlassInOutRulesContext.cs b/SolastaUnfinishedBusiness/Api/Helpers/MulticlassInOutRulesHelper.cs similarity index 98% rename from SolastaUnfinishedBusiness/Models/MulticlassInOutRulesContext.cs rename to SolastaUnfinishedBusiness/Api/Helpers/MulticlassInOutRulesHelper.cs index 8bb7bc80c1..f8fdc326da 100644 --- a/SolastaUnfinishedBusiness/Models/MulticlassInOutRulesContext.cs +++ b/SolastaUnfinishedBusiness/Api/Helpers/MulticlassInOutRulesHelper.cs @@ -8,9 +8,9 @@ using static RuleDefinitions; using static FeatureDefinitionAttributeModifier; -namespace SolastaUnfinishedBusiness.Models; +namespace SolastaUnfinishedBusiness.Api.Helpers; -internal static class MulticlassInOutRulesContext +internal static class MulticlassInOutRulesHelper { internal static void EnumerateHeroAllowedClassDefinitions([NotNull] RulesetCharacterHero hero, [NotNull] List allowedClasses, out int selectedClass) diff --git a/SolastaUnfinishedBusiness/Behaviors/Specific/PowerBundle.cs b/SolastaUnfinishedBusiness/Behaviors/Specific/PowerBundle.cs index 120f944483..e5a4ffb98a 100644 --- a/SolastaUnfinishedBusiness/Behaviors/Specific/PowerBundle.cs +++ b/SolastaUnfinishedBusiness/Behaviors/Specific/PowerBundle.cs @@ -190,7 +190,7 @@ internal static void UpdateUsageForPowerPool( // refresh character control panel after power pool usage is updated // needed for custom point pools on portrait to update properly in some cases - GameUiContext.GameHud.RefreshCharacterControlPanel(); + CampaignsContext.GameHud.RefreshCharacterControlPanel(); } internal static int GetRemainingPowerUses(this RulesetCharacter character, [NotNull] FeatureDefinitionPower power) diff --git a/SolastaUnfinishedBusiness/CustomUI/DungeonMakerCustomRooms.cs b/SolastaUnfinishedBusiness/CustomUI/DungeonMakerCustomRooms.cs index 87748c83ee..2d25c0035a 100644 --- a/SolastaUnfinishedBusiness/CustomUI/DungeonMakerCustomRooms.cs +++ b/SolastaUnfinishedBusiness/CustomUI/DungeonMakerCustomRooms.cs @@ -65,7 +65,7 @@ internal static void SetupLocationTerrain([NotNull] WorldLocation worldLocation, { const int BORDER = 2; - var isIndoor = !DmProEditorContext.OutdoorRooms.Contains(userRoom.RoomBlueprint.name); + var isIndoor = !DungeonMakerContext.OutdoorRooms.Contains(userRoom.RoomBlueprint.name); var px = userRoom.Position.x; var py = userRoom.Position.y; var oh = userRoom.OrientedHeight; @@ -212,7 +212,7 @@ static void DisableWalls([NotNull] Transform transform) internal static void AddVegetationMaskArea(Transform roomTransform, UserRoom userRoom) { if (!TemplateVegetationMaskArea || - DmProEditorContext.OutdoorRooms.Contains(userRoom.RoomBlueprint.name)) + DungeonMakerContext.OutdoorRooms.Contains(userRoom.RoomBlueprint.name)) { return; } diff --git a/SolastaUnfinishedBusiness/Displays/CampaignsDisplay.cs b/SolastaUnfinishedBusiness/Displays/CampaignsDisplay.cs index a15ed90588..b92bb4f149 100644 --- a/SolastaUnfinishedBusiness/Displays/CampaignsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/CampaignsDisplay.cs @@ -260,31 +260,31 @@ internal static void DisplayGameUi() UI.Label(); - var color = GameUiContext.HighContrastColorStrings[Main.Settings.HighContrastTargetingAoeSelectedColor]; + var color = CampaignsContext.HighContrastColorStrings[Main.Settings.HighContrastTargetingAoeSelectedColor]; var title = Gui.Localize("ModUi/&HighContrastTargetingAoeColor").Replace("$$$$$$", color); UI.ActionButton(title, () => { Main.Settings.HighContrastTargetingAoeSelectedColor = - (Main.Settings.HighContrastTargetingAoeSelectedColor + 1) % GameUiContext.HighContrastColors.Length; + (Main.Settings.HighContrastTargetingAoeSelectedColor + 1) % CampaignsContext.HighContrastColors.Length; }, UI.Width(300f)); - color = GameUiContext.HighContrastColorStrings[Main.Settings.HighContrastTargetingSingleSelectedColor]; + color = CampaignsContext.HighContrastColorStrings[Main.Settings.HighContrastTargetingSingleSelectedColor]; title = Gui.Localize("ModUi/&HighContrastTargetingSingleColor").Replace("$$$$$$", color); UI.ActionButton(title, () => { Main.Settings.HighContrastTargetingSingleSelectedColor = - (Main.Settings.HighContrastTargetingSingleSelectedColor + 1) % GameUiContext.HighContrastColors.Length; + (Main.Settings.HighContrastTargetingSingleSelectedColor + 1) % CampaignsContext.HighContrastColors.Length; }, UI.Width(300f)); - color = GameUiContext.GridColorStrings[Main.Settings.GridSelectedColor]; + color = CampaignsContext.GridColorStrings[Main.Settings.GridSelectedColor]; title = Gui.Localize("ModUi/&GridSelectedColor").Replace("$$$$$$", color); UI.ActionButton(title, () => { - Main.Settings.GridSelectedColor = (Main.Settings.GridSelectedColor + 1) % GameUiContext.GridColors.Length; - GameUiContext.UpdateMovementGrid(); + Main.Settings.GridSelectedColor = (Main.Settings.GridSelectedColor + 1) % CampaignsContext.GridColors.Length; + CampaignsContext.UpdateMovementGrid(); }, UI.Width(300f)); intValue = Main.Settings.MovementGridWidthModifier; @@ -292,7 +292,7 @@ internal static void DisplayGameUi() UI.Width(100f))) { Main.Settings.MovementGridWidthModifier = intValue; - GameUiContext.UpdateMovementGrid(); + CampaignsContext.UpdateMovementGrid(); } intValue = Main.Settings.OutlineGridWidthModifier; @@ -300,7 +300,7 @@ internal static void DisplayGameUi() UI.Width(100f))) { Main.Settings.OutlineGridWidthModifier = intValue; - GameUiContext.UpdateMovementGrid(); + CampaignsContext.UpdateMovementGrid(); } intValue = Main.Settings.OutlineGridWidthSpeed; @@ -308,7 +308,7 @@ internal static void DisplayGameUi() UI.Width(100f))) { Main.Settings.OutlineGridWidthSpeed = intValue; - GameUiContext.UpdateMovementGrid(); + CampaignsContext.UpdateMovementGrid(); } #endregion @@ -475,7 +475,7 @@ private static void DisplayFormationGrid() UI.ActionButton(Gui.Localize("ModUi/&FormationResetAllSets"), () => { _selectedForSwap = false; - GameUiContext.ResetAllFormationGrids(); + CampaignsContext.ResetAllFormationGrids(); }, UI.Width(110f)); @@ -483,7 +483,7 @@ private static void DisplayFormationGrid() { _selectedForSwap = false; Main.Settings.FormationGridSelectedSet = selectedSet; - GameUiContext.FillDefinitionFromFormationGrid(); + CampaignsContext.FillDefinitionFromFormationGrid(); } UI.Label(Gui.Localize("ModUi/&FormationHelp1")); @@ -491,7 +491,7 @@ private static void DisplayFormationGrid() UI.Label(); - for (var y = 0; y < GameUiContext.GridSize; y++) + for (var y = 0; y < CampaignsContext.GridSize; y++) { using (UI.HorizontalScope()) { @@ -501,7 +501,7 @@ private static void DisplayFormationGrid() UI.ActionButton(Gui.Localize("ModUi/&FormationResetThisSet"), () => { _selectedForSwap = false; - GameUiContext.ResetFormationGrid(Main.Settings.FormationGridSelectedSet); + CampaignsContext.ResetFormationGrid(Main.Settings.FormationGridSelectedSet); }, UI.Width(110f)); } @@ -510,7 +510,7 @@ private static void DisplayFormationGrid() UI.Label("", UI.Width(110f)); } - for (var x = 0; x < GameUiContext.GridSize; x++) + for (var x = 0; x < CampaignsContext.GridSize; x++) { var saveColor = GUI.color; string label; @@ -547,7 +547,7 @@ private static void DisplayFormationGrid() Main.Settings.FormationGridSets[selectedSet][_selectedY][_selectedX], Main.Settings.FormationGridSets[selectedSet][localY][localX]); - GameUiContext.FillDefinitionFromFormationGrid(); + CampaignsContext.FillDefinitionFromFormationGrid(); _selectedForSwap = false; } diff --git a/SolastaUnfinishedBusiness/Displays/EncountersDisplay.cs b/SolastaUnfinishedBusiness/Displays/EncountersDisplay.cs index 41c58c8bb9..bd2ce2cf56 100644 --- a/SolastaUnfinishedBusiness/Displays/EncountersDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/EncountersDisplay.cs @@ -329,28 +329,28 @@ private static void DisplayEncountersTable() UI.AutoWidth()); UI.Label(); - if (EncountersSpawnContext.EncounterCharacters.Count == 0) + if (EncountersContext.EncounterCharacters.Count == 0) { UI.Label("Encounter table is empty...".Red().Bold()); } else { - for (var index = 0; index < EncountersSpawnContext.EncounterCharacters.Count; index++) + for (var index = 0; index < EncountersContext.EncounterCharacters.Count; index++) { // Prevent captured closure var index2 = index; - switch (EncountersSpawnContext.EncounterCharacters[index2]) + switch (EncountersContext.EncounterCharacters[index2]) { case RulesetCharacterMonster rulesetCharacterMonster: DisplayMonsterStats(rulesetCharacterMonster.MonsterDefinition, "-", - () => EncountersSpawnContext.RemoveFromEncounter(index2)); + () => EncountersContext.RemoveFromEncounter(index2)); break; case RulesetCharacterHero rulesetCharacterHero: DisplayHeroStats(rulesetCharacterHero, "-", - () => EncountersSpawnContext.RemoveFromEncounter(index2)); + () => EncountersContext.RemoveFromEncounter(index2)); break; } } @@ -363,13 +363,13 @@ internal static void DisplayBestiary() { UI.Label(); UI.Label( - $". Click + to add up to {EncountersSpawnContext.MaxEncounterCharacters} characters to the encounter list"); + $". Click + to add up to {EncountersContext.MaxEncounterCharacters} characters to the encounter list"); UI.Label(); - foreach (var monsterDefinition in EncountersSpawnContext.GetMonsters()) + foreach (var monsterDefinition in EncountersContext.GetMonsters()) { DisplayMonsterStats(monsterDefinition, "+", - () => EncountersSpawnContext.AddToEncounter(monsterDefinition)); + () => EncountersContext.AddToEncounter(monsterDefinition)); } } @@ -379,12 +379,12 @@ internal static void DisplayNpcs() { UI.Label(); UI.Label( - $". Click + to add up to {EncountersSpawnContext.MaxEncounterCharacters} characters to the encounter list"); + $". Click + to add up to {EncountersContext.MaxEncounterCharacters} characters to the encounter list"); UI.Label(); - foreach (var hero in EncountersSpawnContext.GetHeroes()) + foreach (var hero in EncountersContext.GetHeroes()) { - DisplayHeroStats(hero, "+", () => EncountersSpawnContext.AddToEncounter(hero)); + DisplayHeroStats(hero, "+", () => EncountersContext.AddToEncounter(hero)); } } } diff --git a/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs b/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs index 6dfd39868d..be3f61c787 100644 --- a/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs @@ -1200,7 +1200,7 @@ private static FeatDefinition BuildCrusherStr() .SetFeatures( AttributeModifierCreed_Of_Einar, FeatureFeatCrusher, - GameUiContext.ActionAffinityFeatCrusherToggle) + CampaignsContext.ActionAffinityFeatCrusherToggle) .SetFeatFamily(GroupFeats.Crusher) .SetAbilityScorePrerequisite(AttributeDefinitions.Strength, 13) .AddToDB(); @@ -1214,7 +1214,7 @@ private static FeatDefinition BuildCrusherCon() .SetFeatures( AttributeModifierCreed_Of_Arun, FeatureFeatCrusher, - GameUiContext.ActionAffinityFeatCrusherToggle) + CampaignsContext.ActionAffinityFeatCrusherToggle) .SetFeatFamily(GroupFeats.Crusher) .SetAbilityScorePrerequisite(AttributeDefinitions.Constitution, 13) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Models/BootContext.cs b/SolastaUnfinishedBusiness/Models/BootContext.cs index 32a0834b6e..e695bad0fd 100644 --- a/SolastaUnfinishedBusiness/Models/BootContext.cs +++ b/SolastaUnfinishedBusiness/Models/BootContext.cs @@ -22,7 +22,7 @@ internal static void Startup() ItemDefinitionVerification.Load(); EffectFormVerification.Load(); #endif - GameUiContext.ModifyActionMaps(); + CampaignsContext.ModifyActionMaps(); // STEP 0: Cache TA definitions for diagnostics and export DiagnosticsContext.CacheTaDefinitions(); @@ -54,8 +54,8 @@ internal static void Startup() PowerBundleContext.Load(); ToolsContext.Load(); CharacterExportContext.Load(); - DmProEditorContext.Load(); - GameUiContext.Load(); + DungeonMakerContext.Load(); + CampaignsContext.Load(); InputContext.Load(); // only bootstrap for now diff --git a/SolastaUnfinishedBusiness/Models/GameUiContext.cs b/SolastaUnfinishedBusiness/Models/CampaignsContext.cs similarity index 99% rename from SolastaUnfinishedBusiness/Models/GameUiContext.cs rename to SolastaUnfinishedBusiness/Models/CampaignsContext.cs index ebe706176c..2f4c34dd1d 100644 --- a/SolastaUnfinishedBusiness/Models/GameUiContext.cs +++ b/SolastaUnfinishedBusiness/Models/CampaignsContext.cs @@ -23,7 +23,7 @@ namespace SolastaUnfinishedBusiness.Models; -internal static class GameUiContext +internal static class CampaignsContext { internal static bool IsVttCameraEnabled; diff --git a/SolastaUnfinishedBusiness/Models/DmProEditorContext.cs b/SolastaUnfinishedBusiness/Models/DungeonMakerContext.cs similarity index 99% rename from SolastaUnfinishedBusiness/Models/DmProEditorContext.cs rename to SolastaUnfinishedBusiness/Models/DungeonMakerContext.cs index 90598d0f45..2cbe427e89 100644 --- a/SolastaUnfinishedBusiness/Models/DmProEditorContext.cs +++ b/SolastaUnfinishedBusiness/Models/DungeonMakerContext.cs @@ -14,7 +14,7 @@ namespace SolastaUnfinishedBusiness.Models; -internal static class DmProEditorContext +internal static class DungeonMakerContext { private const string BackupFolder = "../UserContentBackup"; internal static readonly List OutdoorRooms = []; diff --git a/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs b/SolastaUnfinishedBusiness/Models/EncountersContext.cs similarity index 99% rename from SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs rename to SolastaUnfinishedBusiness/Models/EncountersContext.cs index c8b30ccf37..d9ae750659 100644 --- a/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs +++ b/SolastaUnfinishedBusiness/Models/EncountersContext.cs @@ -12,7 +12,7 @@ namespace SolastaUnfinishedBusiness.Models; -internal static class EncountersSpawnContext +internal static class EncountersContext { internal const int MaxEncounterCharacters = 16; diff --git a/SolastaUnfinishedBusiness/Models/InputContext.cs b/SolastaUnfinishedBusiness/Models/InputContext.cs index 30f02c857e..1fc6e33dfe 100644 --- a/SolastaUnfinishedBusiness/Models/InputContext.cs +++ b/SolastaUnfinishedBusiness/Models/InputContext.cs @@ -123,38 +123,38 @@ internal static void HandleInput(GameLocationBaseScreen gameLocationBaseScreen, CharacterExportContext.ExportInspectedCharacter(); return; case InputCommandsExtra.ToggleHud: - GameUiContext.GameHud.ShowAll(gameLocationBaseScreen); + CampaignsContext.GameHud.ShowAll(gameLocationBaseScreen); return; case InputCommandsExtra.DebugOverlay: ServiceRepository.GetService()?.ToggleActivation(); return; case InputCommandsExtra.TeleportParty: - GameUiContext.Teleporter.ConfirmTeleportParty(GameUiContext.Teleporter.GetEncounterPosition); + CampaignsContext.Teleporter.ConfirmTeleportParty(CampaignsContext.Teleporter.GetEncounterPosition); return; case InputCommandsExtra.RejoinParty: - GameUiContext.Teleporter.ConfirmTeleportParty(GameUiContext.Teleporter.GetLeaderPosition); + CampaignsContext.Teleporter.ConfirmTeleportParty(CampaignsContext.Teleporter.GetLeaderPosition); return; case InputCommandsExtra.VttCamera: - GameUiContext.ToggleVttCamera(); + CampaignsContext.ToggleVttCamera(); return; case InputCommandsExtra.SpawnEncounter - when EncountersSpawnContext.EncounterCharacters.Count > 0: - EncountersSpawnContext.ConfirmStageEncounter(); + when EncountersContext.EncounterCharacters.Count > 0: + EncountersContext.ConfirmStageEncounter(); return; case InputCommandsExtra.FormationSet1 when isSinglePlayer: - GameUiContext.SetFormationGrid(0); + CampaignsContext.SetFormationGrid(0); return; case InputCommandsExtra.FormationSet2 when isSinglePlayer: - GameUiContext.SetFormationGrid(1); + CampaignsContext.SetFormationGrid(1); return; case InputCommandsExtra.FormationSet3 when isSinglePlayer: - GameUiContext.SetFormationGrid(2); + CampaignsContext.SetFormationGrid(2); return; case InputCommandsExtra.FormationSet4 when isSinglePlayer: - GameUiContext.SetFormationGrid(3); + CampaignsContext.SetFormationGrid(3); return; case InputCommandsExtra.FormationSet5 when isSinglePlayer: - GameUiContext.SetFormationGrid(4); + CampaignsContext.SetFormationGrid(4); return; case InputCommandsExtra.Hide: foreach (var selectedCharacter in ServiceRepository diff --git a/SolastaUnfinishedBusiness/Models/SettingsContext.cs b/SolastaUnfinishedBusiness/Models/SettingsContext.cs index c904f88700..8b758987ba 100644 --- a/SolastaUnfinishedBusiness/Models/SettingsContext.cs +++ b/SolastaUnfinishedBusiness/Models/SettingsContext.cs @@ -184,7 +184,7 @@ public string EmpressGarbAppearance set { _empressGarbAppearance = value; - GameUiContext.SwitchEmpressGarb(); + CampaignsContext.SwitchEmpressGarb(); UserPreferences.SetValue("Settings/Gui/EmpressGarbAppearance", _empressGarbAppearance); } } @@ -195,7 +195,7 @@ public bool HideCrownOfMagister set { _hideCrownOfMagister = value; - GameUiContext.SwitchCrownOfTheMagister(); + CampaignsContext.SwitchCrownOfTheMagister(); UserPreferences.SetValue("Settings/Gui/HideCrownOfMagister", _hideCrownOfMagister); } } diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 873f39a7e0..1c9198f067 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -2171,7 +2171,7 @@ public IEnumerator OnPhysicalAttackFinishedByMe( private IEnumerator HandleWithdraw(CharacterAction action, GameLocationCharacter attacker) { - yield return GameUiContext.SelectPosition(action, powerWithdraw); + yield return CampaignsContext.SelectPosition(action, powerWithdraw); var rulesetAttacker = attacker.RulesetCharacter; var position = action.ActionParams.Positions[0]; diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageClassSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageClassSelectionPanelPatcher.cs index 5d1f796173..e66c4e38bb 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageClassSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageClassSelectionPanelPatcher.cs @@ -40,7 +40,7 @@ public static void Prefix([NotNull] CharacterStageClassSelectionPanel __instance LevelUpHelper.SetIsClassSelectionStage(__instance.currentHero, true); //PATCH: apply in/out logic (MULTICLASS) - MulticlassInOutRulesContext.EnumerateHeroAllowedClassDefinitions( + MulticlassInOutRulesHelper.EnumerateHeroAllowedClassDefinitions( __instance.currentHero, __instance.compatibleClasses, out __instance.selectedClass); diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageProficiencySelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageProficiencySelectionPanelPatcher.cs index f31d07ab08..f53a828a40 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageProficiencySelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageProficiencySelectionPanelPatcher.cs @@ -148,7 +148,7 @@ public static class EnterStage_Patch [UsedImplicitly] public static void Prefix(CharacterStageProficiencySelectionPanel __instance) { - GameUiContext.RefreshMetamagicOffering(__instance.metamagicSubPanel); + CampaignsContext.RefreshMetamagicOffering(__instance.metamagicSubPanel); } } } diff --git a/SolastaUnfinishedBusiness/Patches/CursorLocationSelectTargetPatcher.cs b/SolastaUnfinishedBusiness/Patches/CursorLocationSelectTargetPatcher.cs index 69c3dd2ad6..ae2b063718 100644 --- a/SolastaUnfinishedBusiness/Patches/CursorLocationSelectTargetPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CursorLocationSelectTargetPatcher.cs @@ -567,7 +567,7 @@ public static class RefreshHover_Patch public static void Postfix(CursorLocationSelectTarget __instance) { __instance.affectedCharacterColor = - GameUiContext.HighContrastColors[Main.Settings.HighContrastTargetingSingleSelectedColor]; + CampaignsContext.HighContrastColors[Main.Settings.HighContrastTargetingSingleSelectedColor]; } } } diff --git a/SolastaUnfinishedBusiness/Patches/DebugCameraPatcher.cs b/SolastaUnfinishedBusiness/Patches/DebugCameraPatcher.cs index d8caf1d302..a45a5e57d7 100644 --- a/SolastaUnfinishedBusiness/Patches/DebugCameraPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/DebugCameraPatcher.cs @@ -27,7 +27,7 @@ public static class UpdateFreeCamera_Patch [UsedImplicitly] public static bool Prefix(DebugCamera __instance) { - if (!GameUiContext.IsVttCameraEnabled) + if (!CampaignsContext.IsVttCameraEnabled) { return true; } @@ -129,7 +129,7 @@ public static class UpdateOrbitalCamera_Patch [UsedImplicitly] public static bool Prefix(DebugCamera __instance) { - if (!GameUiContext.IsVttCameraEnabled) + if (!CampaignsContext.IsVttCameraEnabled) { return true; } diff --git a/SolastaUnfinishedBusiness/Patches/GadgetBlueprintSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/GadgetBlueprintSelectionPanelPatcher.cs index 501276c784..3076f34532 100644 --- a/SolastaUnfinishedBusiness/Patches/GadgetBlueprintSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GadgetBlueprintSelectionPanelPatcher.cs @@ -22,7 +22,7 @@ public static bool Prefix(GadgetBlueprint left, GadgetBlueprint right, ref int _ return true; } - __result = DmProEditorContext.Compare(left, right); + __result = DungeonMakerContext.Compare(left, right); return false; } diff --git a/SolastaUnfinishedBusiness/Patches/GameGadgetPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameGadgetPatcher.cs index f42a9d4254..50b466f761 100644 --- a/SolastaUnfinishedBusiness/Patches/GameGadgetPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameGadgetPatcher.cs @@ -25,7 +25,7 @@ public static void Postfix(GameGadget __instance, ref bool __result) return; } - GameUiContext.ComputeIsRevealedExtended(__instance, ref __result); + CampaignsContext.ComputeIsRevealedExtended(__instance, ref __result); } } @@ -64,7 +64,7 @@ public static void Postfix(GameGadget __instance, int conditionIndex, bool state return; } - GameUiContext.HideExitsAndTeleportersGizmosIfNotDiscovered(__instance, conditionIndex, state); + CampaignsContext.HideExitsAndTeleportersGizmosIfNotDiscovered(__instance, conditionIndex, state); } } } diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationManagerPatcher.cs index e4d1c51cf0..be18201836 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationManagerPatcher.cs @@ -115,7 +115,7 @@ public static void Postfix(GameLocationManager __instance) foreach (var worldGadget in worldGadgets) { - GameUiContext.SetTeleporterGadgetActiveAnimation(worldGadget); + CampaignsContext.SetTeleporterGadgetActiveAnimation(worldGadget); } } } diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationTargetingManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationTargetingManagerPatcher.cs index ac8a064fb3..df9436704d 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationTargetingManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationTargetingManagerPatcher.cs @@ -158,7 +158,7 @@ public static class RefreshHover_Patch public static void Postfix(CursorLocationGeometricShape __instance) { __instance.affectedCharacterColor = - GameUiContext.HighContrastColors[Main.Settings.HighContrastTargetingAoeSelectedColor]; + CampaignsContext.HighContrastColors[Main.Settings.HighContrastTargetingAoeSelectedColor]; } } } diff --git a/SolastaUnfinishedBusiness/Patches/GuiCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/GuiCharacterPatcher.cs index 5b65624c4f..80caaa91a1 100644 --- a/SolastaUnfinishedBusiness/Patches/GuiCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GuiCharacterPatcher.cs @@ -234,7 +234,7 @@ public static void Postfix(GuiCharacter __instance, Image healthGauge, float par var ratio = Mathf.Clamp(__instance.CurrentHitPoints / (float)__instance.HitPoints, 0.0f, 1f); - ratio = GameUiContext.GetSteppedHealthRatio(ratio); + ratio = CampaignsContext.GetSteppedHealthRatio(ratio); healthGauge.rectTransform.offsetMax = new Vector2(healthGauge.rectTransform.offsetMax.x, (float)(-parentHeight * (1.0 - ratio))); diff --git a/SolastaUnfinishedBusiness/Patches/HealthGaugeGroupPatcher.cs b/SolastaUnfinishedBusiness/Patches/HealthGaugeGroupPatcher.cs index 56a7b9cc07..bb9b5a5f62 100644 --- a/SolastaUnfinishedBusiness/Patches/HealthGaugeGroupPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/HealthGaugeGroupPatcher.cs @@ -36,7 +36,7 @@ public static void Postfix(HealthGaugeGroup __instance) var ratio = Mathf.Clamp( __instance.GuiCharacter.CurrentHitPoints / (float)__instance.GuiCharacter.HitPoints, 0.0f, 1f); - ratio = GameUiContext.GetSteppedHealthRatio(ratio); + ratio = CampaignsContext.GetSteppedHealthRatio(ratio); __instance.gaugeRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, __instance.gaugeMaxWidth * ratio); diff --git a/SolastaUnfinishedBusiness/Patches/MetaMagicSubPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/MetaMagicSubPanelPatcher.cs index 98084af8f1..74f1f65856 100644 --- a/SolastaUnfinishedBusiness/Patches/MetaMagicSubPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/MetaMagicSubPanelPatcher.cs @@ -16,7 +16,7 @@ public static class RefreshActions_Patch [UsedImplicitly] public static void Prefix(MetaMagicSubPanel __instance) { - GameUiContext.RefreshMetamagicOffering(__instance); + CampaignsContext.RefreshMetamagicOffering(__instance); } } } diff --git a/SolastaUnfinishedBusiness/Patches/MovementHelperPatcher.cs b/SolastaUnfinishedBusiness/Patches/MovementHelperPatcher.cs index b81a388291..882ef857c1 100644 --- a/SolastaUnfinishedBusiness/Patches/MovementHelperPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/MovementHelperPatcher.cs @@ -25,7 +25,7 @@ public static bool Prefix(MovementHelper __instance, bool isHighlighted) // BEGIN PATCH // var color = new Color(1f, 1f, 1f, isHighlighted ? 1f : 0.2f); - var color = GameUiContext.GetGridColor(isHighlighted); + var color = CampaignsContext.GetGridColor(isHighlighted); // END PATCH var height = new Vector3(0.0f, __instance.movementGridShadowHeightOffset, 0.0f); @@ -143,7 +143,7 @@ public static bool Prefix(MovementHelper __instance, bool isHighlighted) // BEGIN PATCH // var color = new Color(1f, 1f, 1f, isHighlighted ? 1f : 0.2f); - var color = GameUiContext.GetGridColor(isHighlighted); + var color = CampaignsContext.GetGridColor(isHighlighted); // END PATCH for (var index = 0; index < __instance.movementOutlines.Count; ++index) diff --git a/SolastaUnfinishedBusiness/Patches/PropBlueprintSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/PropBlueprintSelectionPanelPatcher.cs index 415ddab784..d79051184a 100644 --- a/SolastaUnfinishedBusiness/Patches/PropBlueprintSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/PropBlueprintSelectionPanelPatcher.cs @@ -22,7 +22,7 @@ public static bool Prefix(PropBlueprint left, PropBlueprint right, ref int __res return true; } - __result = DmProEditorContext.Compare(left, right); + __result = DungeonMakerContext.Compare(left, right); return false; } diff --git a/SolastaUnfinishedBusiness/Patches/RoomBlueprintSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/RoomBlueprintSelectionPanelPatcher.cs index e26338fdb2..bac2abd4a3 100644 --- a/SolastaUnfinishedBusiness/Patches/RoomBlueprintSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RoomBlueprintSelectionPanelPatcher.cs @@ -22,7 +22,7 @@ public static bool Prefix(RoomBlueprint left, RoomBlueprint right, ref int __res return true; } - __result = DmProEditorContext.Compare(left, right); + __result = DungeonMakerContext.Compare(left, right); return false; } diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs index 466c8d24b9..b452b455c9 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs @@ -2136,17 +2136,17 @@ public static void Postfix(RulesetCharacter __instance) switch (Main.Settings.AddPaladinSmiteToggle) { case true: - if (!hero.HasAnyFeature(GameUiContext.ActionAffinityPaladinSmiteToggle)) + if (!hero.HasAnyFeature(CampaignsContext.ActionAffinityPaladinSmiteToggle)) { - hero.ActiveFeatures[tag].Add(GameUiContext.ActionAffinityPaladinSmiteToggle); + hero.ActiveFeatures[tag].Add(CampaignsContext.ActionAffinityPaladinSmiteToggle); hero.EnableToggle((Id)ExtraActionId.PaladinSmiteToggle); } break; case false: - if (hero.HasAnyFeature(GameUiContext.ActionAffinityPaladinSmiteToggle)) + if (hero.HasAnyFeature(CampaignsContext.ActionAffinityPaladinSmiteToggle)) { - hero.ActiveFeatures[tag].Remove(GameUiContext.ActionAffinityPaladinSmiteToggle); + hero.ActiveFeatures[tag].Remove(CampaignsContext.ActionAffinityPaladinSmiteToggle); } hero.EnableToggle((Id)ExtraActionId.PaladinSmiteToggle); diff --git a/SolastaUnfinishedBusiness/Patches/SpellSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/SpellSelectionPanelPatcher.cs index 2997185238..fbdb2e1e34 100644 --- a/SolastaUnfinishedBusiness/Patches/SpellSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/SpellSelectionPanelPatcher.cs @@ -47,7 +47,7 @@ public static void Postfix( ActionDefinitions.ActionType actionType, bool cantripOnly) { - GameUiContext.SpellSelectionPanelMultilineBind( + CampaignsContext.SpellSelectionPanelMultilineBind( __instance, caster, spellCastEngaged, actionType, cantripOnly); } @@ -79,7 +79,7 @@ public static class Unbind_Patch [UsedImplicitly] public static void Postfix() { - GameUiContext.SpellSelectionPanelMultilineUnbind(); + CampaignsContext.SpellSelectionPanelMultilineUnbind(); } } } diff --git a/SolastaUnfinishedBusiness/Patches/UserCampaignPoolManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/UserCampaignPoolManagerPatcher.cs index cd3cf3bfaf..68a6a5c747 100644 --- a/SolastaUnfinishedBusiness/Patches/UserCampaignPoolManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/UserCampaignPoolManagerPatcher.cs @@ -23,7 +23,7 @@ public static class SaveUserCampaign_Patch public static IEnumerable Transpiler([NotNull] IEnumerable instructions) { var deleteMethod = typeof(File).GetMethod("Delete"); - var backupAndDeleteMethod = new Action(DmProEditorContext.BackupAndDelete).Method; + var backupAndDeleteMethod = new Action(DungeonMakerContext.BackupAndDelete).Method; return instructions.ReplaceCalls(deleteMethod, "UserCampaignPoolManager.SaveUserCampaign", new CodeInstruction(OpCodes.Ldarg_1), diff --git a/SolastaUnfinishedBusiness/Patches/UserLocationPoolManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/UserLocationPoolManagerPatcher.cs index f2fb7a9d87..5fdb8dab6f 100644 --- a/SolastaUnfinishedBusiness/Patches/UserLocationPoolManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/UserLocationPoolManagerPatcher.cs @@ -23,7 +23,7 @@ public static class SaveUserLocation_Patch public static IEnumerable Transpiler([NotNull] IEnumerable instructions) { var deleteMethod = typeof(File).GetMethod("Delete"); - var backupAndDeleteMethod = new Action(DmProEditorContext.BackupAndDelete).Method; + var backupAndDeleteMethod = new Action(DungeonMakerContext.BackupAndDelete).Method; return instructions.ReplaceCalls(deleteMethod, "UserLocationPoolManager.SaveUserLocation", new CodeInstruction(OpCodes.Ldarg_1), diff --git a/SolastaUnfinishedBusiness/Patches/UserLocationSettingsModalPatcher.cs b/SolastaUnfinishedBusiness/Patches/UserLocationSettingsModalPatcher.cs index fa0ea8e164..aa31dd984f 100644 --- a/SolastaUnfinishedBusiness/Patches/UserLocationSettingsModalPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/UserLocationSettingsModalPatcher.cs @@ -1,7 +1,7 @@ using System.Diagnostics.CodeAnalysis; using HarmonyLib; using JetBrains.Annotations; -using static SolastaUnfinishedBusiness.Models.DmProEditorContext; +using static SolastaUnfinishedBusiness.Models.DungeonMakerContext; namespace SolastaUnfinishedBusiness.Patches; diff --git a/SolastaUnfinishedBusiness/Patches/WorldGadgetPatcher.cs b/SolastaUnfinishedBusiness/Patches/WorldGadgetPatcher.cs index 0d0a2af839..d32d777002 100644 --- a/SolastaUnfinishedBusiness/Patches/WorldGadgetPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/WorldGadgetPatcher.cs @@ -22,7 +22,7 @@ public static void Prefix(WorldGadget __instance, ref bool visible) return; } - GameUiContext.SetHighlightVisibilityExtended(__instance, ref visible); + CampaignsContext.SetHighlightVisibilityExtended(__instance, ref visible); } } } diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 738740fbc3..606c89353a 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -176,24 +176,24 @@ public class Settings : UnityModManager.ModSettings public int[][][] FormationGridSets { get; set; } = [ [ - new int[GameUiContext.GridSize], new int[GameUiContext.GridSize], new int[GameUiContext.GridSize], - new int[GameUiContext.GridSize], new int[GameUiContext.GridSize] + new int[CampaignsContext.GridSize], new int[CampaignsContext.GridSize], new int[CampaignsContext.GridSize], + new int[CampaignsContext.GridSize], new int[CampaignsContext.GridSize] ], [ - new int[GameUiContext.GridSize], new int[GameUiContext.GridSize], new int[GameUiContext.GridSize], - new int[GameUiContext.GridSize], new int[GameUiContext.GridSize] + new int[CampaignsContext.GridSize], new int[CampaignsContext.GridSize], new int[CampaignsContext.GridSize], + new int[CampaignsContext.GridSize], new int[CampaignsContext.GridSize] ], [ - new int[GameUiContext.GridSize], new int[GameUiContext.GridSize], new int[GameUiContext.GridSize], - new int[GameUiContext.GridSize], new int[GameUiContext.GridSize] + new int[CampaignsContext.GridSize], new int[CampaignsContext.GridSize], new int[CampaignsContext.GridSize], + new int[CampaignsContext.GridSize], new int[CampaignsContext.GridSize] ], [ - new int[GameUiContext.GridSize], new int[GameUiContext.GridSize], new int[GameUiContext.GridSize], - new int[GameUiContext.GridSize], new int[GameUiContext.GridSize] + new int[CampaignsContext.GridSize], new int[CampaignsContext.GridSize], new int[CampaignsContext.GridSize], + new int[CampaignsContext.GridSize], new int[CampaignsContext.GridSize] ], [ - new int[GameUiContext.GridSize], new int[GameUiContext.GridSize], new int[GameUiContext.GridSize], - new int[GameUiContext.GridSize], new int[GameUiContext.GridSize] + new int[CampaignsContext.GridSize], new int[CampaignsContext.GridSize], new int[CampaignsContext.GridSize], + new int[CampaignsContext.GridSize], new int[CampaignsContext.GridSize] ] ]; diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs index 953bb356dd..f5cc6877ee 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs @@ -874,7 +874,7 @@ public IEnumerator HandleWildSurge(GameLocationCharacter character, GameLocation if (reactingOutOfTurn) { - GameUiContext.ResetCamera(); + CampaignsContext.ResetCamera(); PreventEnemyAction(attacker, rulesetCharacter); } @@ -900,7 +900,7 @@ public IEnumerator HandleWildSurge(GameLocationCharacter character, GameLocation yield break; } - GameUiContext.ResetCamera(); + CampaignsContext.ResetCamera(); PreventEnemyAction(attacker, rulesetCharacter); } @@ -925,7 +925,7 @@ public IEnumerator HandleWildSurge(GameLocationCharacter character, GameLocation yield break; } - GameUiContext.ResetCamera(); + CampaignsContext.ResetCamera(); PreventEnemyAction(attacker, rulesetCharacter); cursorService.ActivateCursor(actionParams); diff --git a/SolastaUnfinishedBusiness/Subclasses/PatronArchfey.cs b/SolastaUnfinishedBusiness/Subclasses/PatronArchfey.cs index 7f852024d8..fb66fbd1a8 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PatronArchfey.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PatronArchfey.cs @@ -408,7 +408,7 @@ public IEnumerator OnPhysicalAttackFinishedOnMe( private IEnumerator SelectPositionAndExecutePower(GameLocationCharacter defender) { - GameUiContext.ResetCamera(); + CampaignsContext.ResetCamera(); var rulesetDefender = defender.RulesetCharacter; var cursorManager = ServiceRepository.GetService() as CursorManager; diff --git a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs index 6a14c2a23b..10061bb0fe 100644 --- a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs @@ -1568,7 +1568,7 @@ private sealed class PowerOrSpellInitiatedByMeTeleport { public IEnumerator OnPowerOrSpellInitiatedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) { - yield return GameUiContext.SelectPosition(action, PowerTeleport); + yield return CampaignsContext.SelectPosition(action, PowerTeleport); } } From a1e14b2f72d0af3bffdb8b733d8fda81b6a80108 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 16:52:48 -0800 Subject: [PATCH 55/85] major reorg --- .../ChangelogHistory.txt | 2 +- .../Displays/CampaignsDisplay.cs | 6 +- .../Displays/ClassesDisplay.cs | 20 ++--- .../Displays/GeneralDisplay.cs | 20 ++--- .../Models/BootContext.cs | 9 +-- .../Models/FeatsContext.cs | 4 +- .../Models/FixesContext.cs | 3 + .../Models/Tabletop2024Context.cs | 76 +++++++------------ .../Patches/BaseBlueprintPatcher.cs | 1 - .../Patches/CharacterEditionScreenPatcher.cs | 1 - .../Patches/CharacterPlateDetailedPatcher.cs | 1 - ...haracterStageClassSelectionPanelPatcher.cs | 1 - ...haracterStageSpellSelectionPanelPatcher.cs | 1 - .../Patches/CharactersStatsPanelPatcher.cs | 1 - .../Patches/SpellRepertoirePanelPatcher.cs | 1 - .../Patches/WorldLocationPatcher.cs | 1 - SolastaUnfinishedBusiness/Settings.cs | 6 +- SolastaUnfinishedBusiness/Settings/empty.xml | 6 +- .../Settings/zappastuff.xml | 2 +- .../Translations/en/Settings-en.txt | 12 +-- 20 files changed, 73 insertions(+), 101 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 112f45dadc..b1a701b327 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,6 +1,6 @@ 1.5.97.37: -- added many new settings under tabletop 5e 2024 section +- added 20+ new settings under tabletop 5e 2024 section - added Wizard Abjuration arcane ward recharge bonus action - added Wizard Graviturgist gravity well power toggle - fixed bardic inspiration on attack rolls not stacking with similar behaviors [VANILLA] diff --git a/SolastaUnfinishedBusiness/Displays/CampaignsDisplay.cs b/SolastaUnfinishedBusiness/Displays/CampaignsDisplay.cs index b92bb4f149..759d0cd10f 100644 --- a/SolastaUnfinishedBusiness/Displays/CampaignsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/CampaignsDisplay.cs @@ -275,7 +275,8 @@ internal static void DisplayGameUi() UI.ActionButton(title, () => { Main.Settings.HighContrastTargetingSingleSelectedColor = - (Main.Settings.HighContrastTargetingSingleSelectedColor + 1) % CampaignsContext.HighContrastColors.Length; + (Main.Settings.HighContrastTargetingSingleSelectedColor + 1) % + CampaignsContext.HighContrastColors.Length; }, UI.Width(300f)); color = CampaignsContext.GridColorStrings[Main.Settings.GridSelectedColor]; @@ -283,7 +284,8 @@ internal static void DisplayGameUi() UI.ActionButton(title, () => { - Main.Settings.GridSelectedColor = (Main.Settings.GridSelectedColor + 1) % CampaignsContext.GridColors.Length; + Main.Settings.GridSelectedColor = + (Main.Settings.GridSelectedColor + 1) % CampaignsContext.GridColors.Length; CampaignsContext.UpdateMovementGrid(); }, UI.Width(300f)); diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index f70eb79ea1..873506f88e 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -61,11 +61,11 @@ internal static void DisplayClasses() Tabletop2024Context.SwitchOneDndRemoveBardMagicalSecretAt14And18(); } - toggle = Main.Settings.RemoveBardSongOfRest; - if (UI.Toggle(Gui.Localize("ModUi/&RemoveBardSongOfRest"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.RemoveBardSongOfRestAt2; + if (UI.Toggle(Gui.Localize("ModUi/&RemoveBardSongOfRestAt2"), ref toggle, UI.AutoWidth())) { - Main.Settings.RemoveBardSongOfRest = toggle; - Tabletop2024Context.SwitchOneDndRemoveBardSongOfRest(); + Main.Settings.RemoveBardSongOfRestAt2 = toggle; + Tabletop2024Context.SwitchOneDndRemoveBardSongOfRestAt2(); } UI.Label(); @@ -116,11 +116,11 @@ internal static void DisplayClasses() UI.Label("" + Gui.Localize("Class/&DruidTitle") + ":"); UI.Label(); - toggle = Main.Settings.EnableDruidToUseMetalArmor; + toggle = Main.Settings.EnableDruidUseMetalArmor; if (UI.Toggle(Gui.Localize("ModUi/&AllowDruidToWearMetalArmor"), ref toggle, UI.AutoWidth())) { - Main.Settings.EnableDruidToUseMetalArmor = toggle; - Tabletop2024Context.SwitchOneDnDEnableDruidToUseMetalArmor(); + Main.Settings.EnableDruidUseMetalArmor = toggle; + Tabletop2024Context.SwitchOneDnDEnableDruidUseMetalArmor(); } toggle = Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency; @@ -131,10 +131,10 @@ internal static void DisplayClasses() Tabletop2024Context.SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); } - toggle = Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd; - if (UI.Toggle(Gui.Localize("ModUi/&SwapDruidWeaponProficiencyToUseOneDnd"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.SwapDruidToUseOneDndWeaponProficiency; + if (UI.Toggle(Gui.Localize("ModUi/&SwapDruidToUseOneDndWeaponProficiency"), ref toggle, UI.AutoWidth())) { - Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd = toggle; + Main.Settings.SwapDruidToUseOneDndWeaponProficiency = toggle; Tabletop2024Context.SwitchDruidWeaponProficiencyToUseOneDnd(); } diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 0fcc2b1e3b..c8e27cac0a 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -288,11 +288,11 @@ private static void DisplayOneDnd() Tabletop2024Context.SwitchOneDndRemoveBardMagicalSecretAt14And18(); } - toggle = Main.Settings.RemoveBardSongOfRest; - if (UI.Toggle(Gui.Localize("ModUi/&RemoveBardSongOfRest"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.RemoveBardSongOfRestAt2; + if (UI.Toggle(Gui.Localize("ModUi/&RemoveBardSongOfRestAt2"), ref toggle, UI.AutoWidth())) { - Main.Settings.RemoveBardSongOfRest = toggle; - Tabletop2024Context.SwitchOneDndRemoveBardSongOfRest(); + Main.Settings.RemoveBardSongOfRestAt2 = toggle; + Tabletop2024Context.SwitchOneDndRemoveBardSongOfRestAt2(); } UI.Label(); @@ -336,11 +336,11 @@ private static void DisplayOneDnd() UI.Label("" + Gui.Localize("Class/&DruidTitle") + ":"); UI.Label(); - toggle = Main.Settings.EnableDruidToUseMetalArmor; + toggle = Main.Settings.EnableDruidUseMetalArmor; if (UI.Toggle(Gui.Localize("ModUi/&AllowDruidToWearMetalArmor"), ref toggle, UI.AutoWidth())) { - Main.Settings.EnableDruidToUseMetalArmor = toggle; - Tabletop2024Context.SwitchOneDnDEnableDruidToUseMetalArmor(); + Main.Settings.EnableDruidUseMetalArmor = toggle; + Tabletop2024Context.SwitchOneDnDEnableDruidUseMetalArmor(); } toggle = Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency; @@ -351,10 +351,10 @@ private static void DisplayOneDnd() Tabletop2024Context.SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); } - toggle = Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd; - if (UI.Toggle(Gui.Localize("ModUi/&SwapDruidWeaponProficiencyToUseOneDnd"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.SwapDruidToUseOneDndWeaponProficiency; + if (UI.Toggle(Gui.Localize("ModUi/&SwapDruidToUseOneDndWeaponProficiency"), ref toggle, UI.AutoWidth())) { - Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd = toggle; + Main.Settings.SwapDruidToUseOneDndWeaponProficiency = toggle; Tabletop2024Context.SwitchDruidWeaponProficiencyToUseOneDnd(); } diff --git a/SolastaUnfinishedBusiness/Models/BootContext.cs b/SolastaUnfinishedBusiness/Models/BootContext.cs index e695bad0fd..9d64de4d7b 100644 --- a/SolastaUnfinishedBusiness/Models/BootContext.cs +++ b/SolastaUnfinishedBusiness/Models/BootContext.cs @@ -1,7 +1,6 @@ using System.IO; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using SolastaUnfinishedBusiness.Api; using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Behaviors.Specific; using SolastaUnfinishedBusiness.Builders; @@ -145,13 +144,9 @@ internal static void Startup() // Manages update or welcome messages UpdateContext.Load(); - // Log invalid user campaign - LogMissingReferencesInUserCampaigns(); + //TODO: find a better place to implement these AddExtraTooltipDefinitions(); - - // Fix condition UI - DatabaseHelper.FeatureDefinitionCombatAffinitys.CombatAffinityForeknowledge.GuiPresentation.Description = - Gui.NoLocalization; + LogMissingReferencesInUserCampaigns(); // Enable mod Main.Enable(); diff --git a/SolastaUnfinishedBusiness/Models/FeatsContext.cs b/SolastaUnfinishedBusiness/Models/FeatsContext.cs index 2d7c074df6..1d315e6a14 100644 --- a/SolastaUnfinishedBusiness/Models/FeatsContext.cs +++ b/SolastaUnfinishedBusiness/Models/FeatsContext.cs @@ -344,7 +344,7 @@ private static void LoadFeatsPointPools() .AddToDB(); } } - + internal static void SwitchFirstLevelTotalFeats() { if (PreviousTotalFeatsGrantedFirstLevel > -1) @@ -356,7 +356,7 @@ internal static void SwitchFirstLevelTotalFeats() PreviousAlternateHuman = Main.Settings.EnableAlternateHuman; LoadRacesLevel1Feats(Main.Settings.TotalFeatsGrantedFirstLevel, Main.Settings.EnableAlternateHuman); } - + private static void LoadRacesLevel1Feats(int initialFeats, bool alternateHuman) { var human = Human; diff --git a/SolastaUnfinishedBusiness/Models/FixesContext.cs b/SolastaUnfinishedBusiness/Models/FixesContext.cs index f81eab1b31..90a46d3a42 100644 --- a/SolastaUnfinishedBusiness/Models/FixesContext.cs +++ b/SolastaUnfinishedBusiness/Models/FixesContext.cs @@ -53,6 +53,9 @@ internal static void Load() internal static void LateLoad() { + // fix condition UI + FeatureDefinitionCombatAffinitys.CombatAffinityForeknowledge.GuiPresentation.Description = Gui.NoLocalization; + // fix demonic influence duration and combat log (conditions with ForcedBehavior should have special duration) ConditionDefinitions.ConditionUnderDemonicInfluence.specialDuration = true; ConditionDefinitions.ConditionUnderDemonicInfluence.durationType = DurationType.Hour; diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 1c9198f067..6bbd817685 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -200,13 +200,11 @@ internal static void LateLoad() BuildBarbarianBrutalStrike(); BuildRogueCunningStrike(); BuildOneDndGuidanceSubspells(); - LoadMonkHeightenedMetabolism(); LoadSecondWindToUseOneDndUsagesProgression(); - EnableOneDndBarkskinSpell(); EnableOneDndGuidanceSpell(); - SwitchOneDnDEnableDruidToUseMetalArmor(); + SwitchOneDnDEnableDruidUseMetalArmor(); SwitchDruidWeaponProficiencyToUseOneDnd(); SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); SwitchEnableRitualOnAllCasters(); @@ -214,7 +212,7 @@ internal static void LateLoad() SwitchOneDndPaladinLayOnHandAsBonusAction(); SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); SwitchOneDndEnableBardWordsOfCreationAtLevel20(); - SwitchOneDndRemoveBardSongOfRest(); + SwitchOneDndRemoveBardSongOfRestAt2(); SwitchOneDndRemoveBardMagicalSecretAt14And18(); SwitchOneDndChangeBardicInspirationDurationToOneHour(); SwitchOneDndEnableBardExpertiseOneLevelBefore(); @@ -246,7 +244,6 @@ internal static void LateLoad() SwitchMonkDoNotRequireAttackActionForFlurry(); } - private static void LoadSecondWindToUseOneDndUsagesProgression() { PowerFighterSecondWind.AddCustomSubFeatures( @@ -285,9 +282,9 @@ internal static void SwitchPersuasionToFighterSkillOptions() } } - internal static void SwitchOneDnDEnableDruidToUseMetalArmor() + internal static void SwitchOneDnDEnableDruidUseMetalArmor() { - var active = Main.Settings.EnableDruidToUseMetalArmor; + var active = Main.Settings.EnableDruidUseMetalArmor; if (active) { @@ -327,7 +324,7 @@ internal static void SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency internal static void SwitchDruidWeaponProficiencyToUseOneDnd() { ProficiencyDruidWeapon.proficiencies = - Main.Settings.SwapDruidWeaponProficiencyToUseOneDnd + Main.Settings.SwapDruidToUseOneDndWeaponProficiency ? [WeaponCategoryDefinitions.SimpleWeaponCategory.Name] : DruidWeaponsCategories; } @@ -638,12 +635,12 @@ internal static void SwitchOneDndChangeBardicInspirationDurationToOneHour() } } - internal static void SwitchOneDndRemoveBardSongOfRest() + internal static void SwitchOneDndRemoveBardSongOfRestAt2() { Bard.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == RestHealingModifierBardSongOfRest); - if (!Main.Settings.RemoveBardSongOfRest) + if (!Main.Settings.RemoveBardSongOfRestAt2) { Bard.FeatureUnlocks.Add(new FeatureUnlockByLevel(RestHealingModifierBardSongOfRest, 2)); } @@ -669,32 +666,28 @@ internal static void SwitchOneDndRemoveBardMagicalSecretAt14And18() internal static void SwitchOneDndEnableBardSuperiorInspirationAtLevel18() { - if (Main.Settings.RemoveBardMagicalSecretAt14And18) - { - Bard.FeatureUnlocks.Add( - new FeatureUnlockByLevel(Level20Context.FeatureBardSuperiorInspiration2024, 18)); - } - else - { - Bard.FeatureUnlocks.RemoveAll(x => - x.FeatureDefinition == Level20Context.FeatureBardSuperiorInspiration2024); - } + Bard.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == Level20Context.FeatureBardSuperiorInspiration || + x.FeatureDefinition == Level20Context.FeatureBardSuperiorInspiration2024); + + Bard.FeatureUnlocks.Add( + Main.Settings.EnableBardSuperiorInspirationAtLevel18 + ? new FeatureUnlockByLevel(Level20Context.FeatureBardSuperiorInspiration2024, 18) + : new FeatureUnlockByLevel(Level20Context.FeatureBardSuperiorInspiration, 20)); Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchOneDndEnableBardWordsOfCreationAtLevel20() { - if (Main.Settings.RemoveBardMagicalSecretAt14And18) + Bard.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == Level20Context.AutoPreparedSpellsBardWordOfCreation); + + if (Main.Settings.EnableBardWordsOfCreationAtLevel20) { Bard.FeatureUnlocks.Add( new FeatureUnlockByLevel(Level20Context.AutoPreparedSpellsBardWordOfCreation, 20)); } - else - { - Bard.FeatureUnlocks.RemoveAll(x => - x.FeatureDefinition == Level20Context.AutoPreparedSpellsBardWordOfCreation); - } Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } @@ -747,61 +740,50 @@ internal static void SwitchOneDndHealingSpellsBuf() internal static void SwitchOneDndWizardScholar() { + Wizard.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PointPoolWizardScholar); + if (Main.Settings.EnableWizardToLearnScholarAtLevel2) { Wizard.FeatureUnlocks.Add(new FeatureUnlockByLevel(PointPoolWizardScholar, 2)); } - else - { - Wizard.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PointPoolWizardScholar); - } Wizard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } - internal static void SwitchSorcererInnateSorcery() { + Sorcerer.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PowerSorcererInnateSorcery); + if (Main.Settings.EnableSorcererInnateSorcery) { Sorcerer.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(PowerSorcererInnateSorcery, 1)); } - else - { - Sorcerer.FeatureUnlocks.RemoveAll(x => - x.level == 1 && x.FeatureDefinition == PowerSorcererInnateSorcery); - } Sorcerer.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchRangerNatureShroud() { + Ranger.FeatureUnlocks + .RemoveAll(x => x.FeatureDefinition == FeatureDefinitionPowerNatureShroud); + if (Main.Settings.EnableRangerNatureShroudAt14) { Ranger.FeatureUnlocks.TryAdd( new FeatureUnlockByLevel(FeatureDefinitionPowerNatureShroud, 14)); } - else - { - Ranger.FeatureUnlocks - .RemoveAll(x => x.level == 10 - && x.FeatureDefinition == FeatureDefinitionPowerNatureShroud); - } Ranger.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchOneDndWarlockMagicalCunningAtLevel2() { + Warlock.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PowerWarlockMagicalCunning); + if (Main.Settings.EnableWarlockMagicalCunningAtLevel2) { Warlock.FeatureUnlocks.Add(new FeatureUnlockByLevel(PowerWarlockMagicalCunning, 2)); } - else - { - Warlock.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PowerWarlockMagicalCunning); - } Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } @@ -830,7 +812,6 @@ internal static void SwitchOneDndWarlockInvocationsProgression() Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } - private sealed class RollSavingThrowInitiatedIndomitableSaving : IRollSavingThrowInitiated { public void OnSavingThrowInitiated( @@ -1196,7 +1177,6 @@ internal static void SwitchMonkBodyAndMindToReplacePerfectSelf() #region Barbarian private const string BrutalStrike = "BarbarianBrutalStrike"; - private static ConditionDefinition _conditionBrutalStrike; private static ConditionDefinition _conditionHamstringBlow; private static ConditionDefinition _conditionStaggeringBlow; diff --git a/SolastaUnfinishedBusiness/Patches/BaseBlueprintPatcher.cs b/SolastaUnfinishedBusiness/Patches/BaseBlueprintPatcher.cs index f5b7c55a63..504b930010 100644 --- a/SolastaUnfinishedBusiness/Patches/BaseBlueprintPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/BaseBlueprintPatcher.cs @@ -2,7 +2,6 @@ using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.CustomUI; -using SolastaUnfinishedBusiness.Models; namespace SolastaUnfinishedBusiness.Patches; diff --git a/SolastaUnfinishedBusiness/Patches/CharacterEditionScreenPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterEditionScreenPatcher.cs index 94d47bc6f7..da853f1450 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterEditionScreenPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterEditionScreenPatcher.cs @@ -3,7 +3,6 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.CustomUI; -using SolastaUnfinishedBusiness.Models; namespace SolastaUnfinishedBusiness.Patches; diff --git a/SolastaUnfinishedBusiness/Patches/CharacterPlateDetailedPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterPlateDetailedPatcher.cs index 00a32e59ab..6b17ae8a47 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterPlateDetailedPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterPlateDetailedPatcher.cs @@ -2,7 +2,6 @@ using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.CustomUI; -using SolastaUnfinishedBusiness.Models; namespace SolastaUnfinishedBusiness.Patches; diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageClassSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageClassSelectionPanelPatcher.cs index e66c4e38bb..0a040acaa8 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageClassSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageClassSelectionPanelPatcher.cs @@ -8,7 +8,6 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Api.LanguageExtensions; -using SolastaUnfinishedBusiness.Models; using UnityEngine; namespace SolastaUnfinishedBusiness.Patches; diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageSpellSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageSpellSelectionPanelPatcher.cs index 5adc63d133..e4a7dbe119 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageSpellSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageSpellSelectionPanelPatcher.cs @@ -6,7 +6,6 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.CustomUI; -using SolastaUnfinishedBusiness.Models; using UnityEngine; using UnityEngine.UI; diff --git a/SolastaUnfinishedBusiness/Patches/CharactersStatsPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharactersStatsPanelPatcher.cs index 21cf488dab..2e01a7ee4c 100644 --- a/SolastaUnfinishedBusiness/Patches/CharactersStatsPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharactersStatsPanelPatcher.cs @@ -2,7 +2,6 @@ using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.CustomUI; -using SolastaUnfinishedBusiness.Models; namespace SolastaUnfinishedBusiness.Patches; diff --git a/SolastaUnfinishedBusiness/Patches/SpellRepertoirePanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/SpellRepertoirePanelPatcher.cs index d991c70d1d..92ee500cfb 100644 --- a/SolastaUnfinishedBusiness/Patches/SpellRepertoirePanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/SpellRepertoirePanelPatcher.cs @@ -7,7 +7,6 @@ using SolastaUnfinishedBusiness.Api; using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.CustomUI; -using SolastaUnfinishedBusiness.Models; using TMPro; using UnityEngine; using static SolastaUnfinishedBusiness.Models.Level20Context; diff --git a/SolastaUnfinishedBusiness/Patches/WorldLocationPatcher.cs b/SolastaUnfinishedBusiness/Patches/WorldLocationPatcher.cs index 0184474df8..41c5711203 100644 --- a/SolastaUnfinishedBusiness/Patches/WorldLocationPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/WorldLocationPatcher.cs @@ -6,7 +6,6 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.CustomUI; -using SolastaUnfinishedBusiness.Models; using UnityEngine; namespace SolastaUnfinishedBusiness.Patches; diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 606c89353a..9f6efec2d2 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -264,15 +264,15 @@ public class Settings : UnityModManager.ModSettings public bool EnableBardSuperiorInspirationAtLevel18 { get; set; } public bool EnableBardWordsOfCreationAtLevel20 { get; set; } public bool RemoveBardMagicalSecretAt14And18 { get; set; } - public bool RemoveBardSongOfRest { get; set; } + public bool RemoveBardSongOfRestAt2 { get; set; } public bool EnableBarbarianBrutalStrike { get; set; } public bool DisableBarbarianBrutalCritical { get; set; } public bool EnableBarbarianFightingStyle { get; set; } public bool EnableBarbarianRecklessSameBuffDebuffDuration { get; set; } public bool EnableBarbarianRegainOneRageAtShortRest { get; set; } - public bool EnableDruidToUseMetalArmor { get; set; } + public bool EnableDruidUseMetalArmor { get; set; } public bool EnableDruidPrimalOrderAndRemoveMediumArmorProficiency { get; set; } - public bool SwapDruidWeaponProficiencyToUseOneDnd { get; set; } + public bool SwapDruidToUseOneDndWeaponProficiency { get; set; } public bool AddFighterLevelToIndomitableSavingReroll { get; set; } public bool AddPersuasionToFighterSkillOptions { get; set; } public bool SwapSecondWindToUseOneDndUsagesProgression { get; set; } diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index f01a8067b4..276118804d 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -550,15 +550,15 @@ false false false - false + false false false false false false - false + false false - false + false false false false diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index 53be3f0cc0..28da2630e4 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -592,7 +592,7 @@ false true true - true + true true true true diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 2af6f330d1..2d3f6a5823 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -22,7 +22,7 @@ ModUi/&AllowBladeCantripsToUseReach=Allow Blade Cantrips ModUi/&AllowClubsToBeThrown=Allow Clubs to be thrown like Daggers or Hand Axes ModUi/&AllowDisplayingNonSuggestedSpells=Allow mod non suggested spells on each list ModUi/&AllowDisplayingOfficialSpells=Allow game official spells on each list -ModUi/&AllowDruidToWearMetalArmor=Allow Druid to wear metal armor +ModUi/&AllowDruidToWearMetalArmor=Remove Metal Armor restrictions ModUi/&AllowDungeonsMaxLevel20=Allow dungeons with max level 20 ModUi/&AllowFlightSuspend=Allow temporarily suspending flight from items and spells [does not affect wildshape or flying races] ModUi/&AllowGadgetsAndPropsToBePlacedAnywhere=Enable CTRL click to bypass any check when placing gadgets or props @@ -146,7 +146,9 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Enable Superio ModUi/&EnableMonkWeaponSpecialization=Enable Weapon Specialization at levels 2 and 11 [the selected weapon type becomes a monk weapon to you] ModUi/&EnableMulticlass=Enable multiclass [Requires Restart] ModUi/&EnableOneDnDPreparedSpellsTables=Enable all Casters to use new prepared spells tables [Bard, Cleric, Druid, Paladin, Ranger, Sorcerer, Wizard] -ModUi/&EnableOneDndHealingSpellsUpgrade=Enable Cure Wounds, Healing Word, Mass Cure Wounds, and Mass Healing Word spells 5e version +ModUi/&EnableOneDndBarkskinSpell=Enable Barkskin 5e 2024 spell version [bonus action, no concentration, AC set to 17] +ModUi/&EnableOneDndGuidanceSpell=Enable Guidance 5e 2024 spell version [Choose one skill at casting and get bonus for up to 1 minute.] +ModUi/&EnableOneDndHealingSpellsUpgrade=Enable Cure Wounds, Healing Word, Mass Cure Wounds, and Mass Healing Word 5e 2024 spells version ModUi/&EnablePaladinLayOnHandsAsBonusAction=Enable Lay on Hands as bonus action ModUi/&EnablePaladinSmiteAsBonusAction=Enable Smite as bonus action ModUi/&EnablePaladinSpellCastingAtLevel1=Enable spellcasting at level 1 instead of 2 @@ -259,7 +261,7 @@ ModUi/&RecipeCost=Recipe's cost ModUi/&RelicForgeries=Relic Forgeries ModUi/&RemoveAttunementRequirements=Remove attunement requirements [Requires Restart] ModUi/&RemoveBardMagicalSecretAt14And18=Remove Magical Secret at levels 14 and 18 -ModUi/&RemoveBardSongOfRest=Remove Song of Rest at level 2 +ModUi/&RemoveBardSongOfRestAt2=Remove Song of Rest at level 2 ModUi/&RemoveBugVisualModels=Replace spider like models with bear like models in the game [arachnophobia] [Requires Restart] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Remove humanoid filter on Hideous Laughter ModUi/&RemoveRecurringEffectOnEntangle=Only apply Entangle effect at casting time and also force a strength check to break free from the vines @@ -308,12 +310,10 @@ ModUi/&Subclasses=Subclasses ModUi/&Subraces=Subraces ModUi/&SwapAbjurationSavant=Swap Abjurer Abjuration Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] ModUi/&SwapCraftedItemAndRecipeIcons=+ Swap recipe and crafted item icons in shop -ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Swap Weapon Proficiency with 5e 2024 version [simple weapons instead of weapon types but you lose Scimitar proficiency] +ModUi/&SwapDruidToUseOneDndWeaponProficiency=Enable Simple Weapons proficiency [instead of individual weapon types but you lose Scimitar proficiency] ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip on progression ModUi/&SwapEvocationSavant=Swap Evoker Evocation Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Enable Unarmed Attack to use 5e 2024 die type progression -ModUi/&EnableOneDndBarkskinSpell=Enable Barkskin spell 5e 2024 version [bonus action, no concentration, AC set to 17] -ModUi/&EnableOneDndGuidanceSpell=Enable Guidance spell 5e 2024 version [Choose one skill at casting and get bonus for up to 1 minute.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Enable Second Wind to use 5e 2024 usages progression ModUi/&SwapWarlockToUseOneDndInvocationProgression=Enable Invocations to use 5e 2024 progression ModUi/&TableTopButton=Select Tabletop content From a33335936cfe69f738b3d2559ec25fc76b365525 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 16:53:17 -0800 Subject: [PATCH 56/85] update RU settings --- SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 5167f9c71f..951bdb3f49 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -146,6 +146,8 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Включить Специализацию на оружии на уровнях 2 и 11 [оружие выбранного типа становится для вас оружием монаха] ModUi/&EnableMulticlass=Включить мультиклассирование [Необходим перезапуск] ModUi/&EnableOneDnDPreparedSpellsTables=Разрешить всем заклинателям использовать новые подготовленные таблицы заклинаний [Бард, Клирик, Друид, Паладин, Рейнджер, Колдун, Волшебник] +ModUi/&EnableOneDndBarkskinSpell=Поменяйте Barkskin на версию 5e 2024 [бонусное действие, нет концентрации, AC установлен на 17] +ModUi/&EnableOneDndGuidanceSpell=Поменяйте руководство с версией 5e 2024 [Выберите один навык при касте и получите бонус на срок до 1 минуты.] ModUi/&EnableOneDndHealingSpellsUpgrade=Включить улучшение костей лечения для Лечения ран, Лечащего слова, Множественного лечения ран и Множественного лечащего слова [OneDnd] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Включить Наложение рук бонусным действием [OneDnd] ModUi/&EnablePaladinSmiteAsBonusAction=Включить Кару бонусным действием [OneDnd] @@ -259,7 +261,7 @@ ModUi/&RecipeCost=Стоимость рецепта ModUi/&RelicForgeries=Поддельные реликвии ModUi/&RemoveAttunementRequirements=Убрать требования настройки [Необходим перезапуск] ModUi/&RemoveBardMagicalSecretAt14And18=Удалить Волшебный секрет на 14 и 18 -ModUi/&RemoveBardSongOfRest=Удалить Песнь покоя на уровне 2 +ModUi/&RemoveBardSongOfRestAt2=Удалить Песнь покоя на уровне 2 ModUi/&RemoveBugVisualModels=Заменить паукообразные модельки в игре на медведеобразные [арахнофобия] [Необходим перезапуск] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Убрать гуманоидный фильтр на Жуткий смех ModUi/&RemoveRecurringEffectOnEntangle=Применять эффект Опутывания только на время действия заклинания, а также принудительно совершать проверку Силы, чтобы вырваться из лоз @@ -308,12 +310,10 @@ ModUi/&Subclasses=Архетипы ModUi/&Subraces=Подрасы ModUi/&SwapAbjurationSavant=Поменяйте Abjurer Abjuration Savant на версию 5e 2024 [изучите 2 школьных заклинания при получении, изучайте еще 1 каждый раз, когда получаете уровень слота] ModUi/&SwapCraftedItemAndRecipeIcons=+ Заменить значок рецепта значком создаваемого предмета в магазинеModUi/&SwapEvocationSavant=Замените Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] -ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Поменяйте Владение оружием на версию 5e 2024 [простое оружие вместо типов оружия, но вы теряете владение ятаганом] +ModUi/&SwapDruidToUseOneDndWeaponProficiency=Поменяйте Владение оружием на версию 5e 2024 [простое оружие вместо типов оружия, но вы теряете владение ятаганом] ModUi/&SwapEvocationPotentCantripAndSculptSpell=Поменяйте местами функции Evoker Sculpt Spells и Potent Cantrip ModUi/&SwapEvocationSavant=Замените Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Поменяйте Безоружная атака на использование прогрессии типа кубика 5e 2024 -ModUi/&EnableOneDndBarkskinSpell=Поменяйте Barkskin на версию 5e 2024 [бонусное действие, нет концентрации, AC установлен на 17] -ModUi/&EnableOneDndGuidanceSpell=Поменяйте руководство с версией 5e 2024 [Выберите один навык при касте и получите бонус на срок до 1 минуты.] ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Поменяйте Второе дыхание на использование прогрессии использования 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Поменять местами прогрессию Invocations с версией 5e 2024 ModUi/&TableTopButton=Выберите содержимое Tabletop From 383e96935a8a1e51777bc333257ef6dc204d7bba Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 17:26:56 -0800 Subject: [PATCH 57/85] minor spells tweaks --- SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs | 1 + SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 8e4f6b96aa..4ad4859c7d 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -2861,6 +2861,7 @@ internal static SpellDefinition BuildWitchBolt() .SetGuiPresentation(Category.Condition, ConditionShocked) .SetPossessive() .SetConditionType(ConditionType.Detrimental) + .SetConditionParticleReference(PowerTraditionShockArcanistArcaneFury) .AddToDB(); var powerWitchBolt = FeatureDefinitionPowerBuilder diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs index 1a99882935..3861d8d126 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs @@ -235,6 +235,7 @@ internal static SpellDefinition BuildKineticJaunt() var spell = SpellDefinitionBuilder .Create(NAME) .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.KineticJaunt, 128)) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolTransmutation) .SetSpellLevel(2) .SetCastingTime(ActivationTime.Action) .SetMaterialComponent(MaterialComponentType.None) From 3829fa65fd46de21ab938c24755047e7ca5fcb79 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 17:50:18 -0800 Subject: [PATCH 58/85] review mod UI --- .../ChangelogHistory.txt | 1 + .../Displays/ClassesDisplay.cs | 9 +- .../Displays/GeneralDisplay.cs | 33 +++--- .../Displays/RulesDisplay.cs | 2 +- .../Displays/SpellsDisplay.cs | 95 ++++++++-------- .../Models/Tabletop2014Context.cs | 27 +++-- .../Models/Tabletop2024Context.cs | 101 +++++++----------- SolastaUnfinishedBusiness/Settings.cs | 3 +- .../Translations/de/Others-de.txt | 5 +- .../Translations/de/Settings-de.txt | 60 +++++------ .../Translations/en/Others-en.txt | 3 +- .../Translations/es/Others-es.txt | 5 +- .../Translations/es/Settings-es.txt | 57 +++++----- .../Translations/fr/Others-fr.txt | 5 +- .../Translations/fr/Settings-fr.txt | 52 ++++----- .../Translations/it/Others-it.txt | 5 +- .../Translations/it/Settings-it.txt | 40 +++---- .../Translations/ja/Others-ja.txt | 5 +- .../Translations/ja/Settings-ja.txt | 62 +++++------ .../Translations/ko/Others-ko.txt | 5 +- .../Translations/ko/Settings-ko.txt | 50 ++++----- .../Translations/pt-BR/Feats/Caster-pt-BR.txt | 2 +- .../Translations/pt-BR/Others-pt-BR.txt | 5 +- .../Translations/pt-BR/Settings-pt-BR.txt | 56 +++++----- .../Translations/ru/Others-ru.txt | 5 +- .../Translations/zh-CN/Others-zh-CN.txt | 5 +- .../Translations/zh-CN/Settings-zh-CN.txt | 64 +++++------ 27 files changed, 349 insertions(+), 413 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index b1a701b327..e1eaa04dac 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -7,6 +7,7 @@ - fixed campaigns translator to avoid location titles and break campaigns - fixed Charmed by Hypnotic Pattern not getting considered on incapacitated checks [VANILLA] - fixed Circle of Wildfire spirit allowed actions when summoner is incapacitated +- fixed Dispel Magic and similar not considering proxies - fixed recurrent effects interaction with immunity from proxies [VANILLA] - fixed Wizard Abjuration projected ward crash on gadgets - fixed Wizard Graviturgist descriptions, SFX, and behaviors diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index 873506f88e..82a9961155 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -128,7 +128,7 @@ internal static void DisplayClasses() UI.AutoWidth())) { Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency = toggle; - Tabletop2024Context.SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); + Tabletop2024Context.SwitchDruidPrimalOrderAndRemoveMediumArmorProficiency(); } toggle = Main.Settings.SwapDruidToUseOneDndWeaponProficiency; @@ -386,13 +386,6 @@ internal static void DisplayClasses() UI.Label("" + Gui.Localize("Class/&WarlockTitle") + ":"); UI.Label(); - toggle = Main.Settings.EnableWarlockMagicalCunningAtLevel2; - if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockMagicalCunningAtLevel2"), ref toggle, UI.AutoWidth())) - { - Main.Settings.EnableWarlockMagicalCunningAtLevel2 = toggle; - Tabletop2024Context.SwitchOneDndWarlockMagicalCunningAtLevel2(); - } - toggle = Main.Settings.SwapWarlockToUseOneDndInvocationProgression; if (UI.Toggle(Gui.Localize("ModUi/&SwapWarlockToUseOneDndInvocationProgression"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index c8e27cac0a..da320dc151 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -348,7 +348,7 @@ private static void DisplayOneDnd() UI.AutoWidth())) { Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency = toggle; - Tabletop2024Context.SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); + Tabletop2024Context.SwitchDruidPrimalOrderAndRemoveMediumArmorProficiency(); } toggle = Main.Settings.SwapDruidToUseOneDndWeaponProficiency; @@ -514,13 +514,6 @@ private static void DisplayOneDnd() UI.Label("" + Gui.Localize("Class/&WarlockTitle") + ":"); UI.Label(); - toggle = Main.Settings.EnableWarlockMagicalCunningAtLevel2; - if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockMagicalCunningAtLevel2"), ref toggle, UI.AutoWidth())) - { - Main.Settings.EnableWarlockMagicalCunningAtLevel2 = toggle; - Tabletop2024Context.SwitchOneDndWarlockMagicalCunningAtLevel2(); - } - toggle = Main.Settings.SwapWarlockToUseOneDndInvocationProgression; if (UI.Toggle(Gui.Localize("ModUi/&SwapWarlockToUseOneDndInvocationProgression"), ref toggle, UI.AutoWidth())) { @@ -568,32 +561,34 @@ private static void DisplayOneDnd() Tabletop2024Context.SwitchOneDndPreparedSpellsTables(); } - toggle = Main.Settings.EnableOneDndHealingSpellsUpgrade; - if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndHealingSpellsUpgrade"), ref toggle, UI.AutoWidth())) - { - Main.Settings.EnableOneDndHealingSpellsUpgrade = toggle; - Tabletop2024Context.SwitchOneDndHealingSpellsBuf(); - } - toggle = Main.Settings.EnableRitualOnAllCasters; if (UI.Toggle(Gui.Localize("ModUi/&EnableRitualOnAllCasters"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableRitualOnAllCasters = toggle; - Tabletop2024Context.SwitchEnableRitualOnAllCasters(); + Tabletop2024Context.SwitchSpellRitualOnAllCasters(); } + UI.Label(); + toggle = Main.Settings.EnableOneDndBarkskinSpell; if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndBarkskinSpell"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableOneDndBarkskinSpell = toggle; - Tabletop2024Context.EnableOneDndBarkskinSpell(); + Tabletop2024Context.SwitchOneDndSpellBarkskin(); + } + + toggle = Main.Settings.EnableOneDndHealingSpellsUpgrade; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndHealingSpellsUpgrade"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableOneDndHealingSpellsUpgrade = toggle; + Tabletop2024Context.SwitchOneDndHealingSpellsBuf(); } toggle = Main.Settings.EnableOneDndGuidanceSpell; if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndGuidanceSpell"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableOneDndGuidanceSpell = toggle; - Tabletop2024Context.EnableOneDndGuidanceSpell(); + Tabletop2024Context.SwitchOneDndSpellGuidance(); } UI.Label(); @@ -788,7 +783,7 @@ private static void DisplayTabletop() if (!toggle) { Main.Settings.ModifyGravitySlam = false; - Tabletop2014Context.ToggleGravitySlamModification(); + Tabletop2014Context.SwitchGravitySlam(); } } diff --git a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs index 68677033f7..4e1020e8d8 100644 --- a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs @@ -360,7 +360,7 @@ internal static void DisplayRules() if (!toggle) { Main.Settings.ModifyGravitySlam = false; - Tabletop2014Context.ToggleGravitySlamModification(); + Tabletop2014Context.SwitchGravitySlam(); } } diff --git a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs index a90292612d..c03869e2b8 100644 --- a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs @@ -33,20 +33,6 @@ private static void DisplaySpellsGeneral() SpellsContext.SwitchAllowBladeCantripsToUseReach(); } - toggle = Main.Settings.EnableOneDnDPreparedSpellsTables; - if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDnDPreparedSpellsTables"), ref toggle, UI.AutoWidth())) - { - Main.Settings.EnableOneDnDPreparedSpellsTables = toggle; - Tabletop2024Context.SwitchOneDndPreparedSpellsTables(); - } - - toggle = Main.Settings.EnableRitualOnAllCasters; - if (UI.Toggle(Gui.Localize("ModUi/&EnableRitualOnAllCasters"), ref toggle, UI.AutoWidth())) - { - Main.Settings.EnableRitualOnAllCasters = toggle; - Tabletop2024Context.SwitchEnableRitualOnAllCasters(); - } - toggle = Main.Settings.QuickCastLightCantripOnWornItemsFirst; if (UI.Toggle(Gui.Localize("ModUi/&QuickCastLightCantripOnWornItemsFirst"), ref toggle, UI.AutoWidth())) { @@ -55,11 +41,11 @@ private static void DisplaySpellsGeneral() UI.Label(); - toggle = Main.Settings.IllusionSpellsAutomaticallyFailAgainstTrueSightInRange; - if (UI.Toggle(Gui.Localize("ModUi/&IllusionSpellsAutomaticallyFailAgainstTrueSightInRange"), ref toggle, - UI.AutoWidth())) + toggle = Main.Settings.AddBleedingToLesserRestoration; + if (UI.Toggle(Gui.Localize("ModUi/&AddBleedingToLesserRestoration"), ref toggle, UI.AutoWidth())) { - Main.Settings.IllusionSpellsAutomaticallyFailAgainstTrueSightInRange = toggle; + Main.Settings.AddBleedingToLesserRestoration = toggle; + SpellsContext.SwitchAddBleedingToLesserRestoration(); } toggle = Main.Settings.AllowTargetingSelectionWhenCastingChainLightningSpell; @@ -70,20 +56,6 @@ private static void DisplaySpellsGeneral() SpellsContext.SwitchAllowTargetingSelectionWhenCastingChainLightningSpell(); } - toggle = Main.Settings.RemoveHumanoidFilterOnHideousLaughter; - if (UI.Toggle(Gui.Localize("ModUi/&RemoveHumanoidFilterOnHideousLaughter"), ref toggle, UI.AutoWidth())) - { - Main.Settings.RemoveHumanoidFilterOnHideousLaughter = toggle; - SpellsContext.SwitchFilterOnHideousLaughter(); - } - - toggle = Main.Settings.AddBleedingToLesserRestoration; - if (UI.Toggle(Gui.Localize("ModUi/&AddBleedingToLesserRestoration"), ref toggle, UI.AutoWidth())) - { - Main.Settings.AddBleedingToLesserRestoration = toggle; - SpellsContext.SwitchAddBleedingToLesserRestoration(); - } - toggle = Main.Settings.BestowCurseNoConcentrationRequiredForSlotLevel5OrAbove; if (UI.Toggle(Gui.Localize("ModUi/&BestowCurseNoConcentrationRequiredForSlotLevel5OrAbove"), ref toggle, UI.AutoWidth())) @@ -91,13 +63,6 @@ private static void DisplaySpellsGeneral() Main.Settings.BestowCurseNoConcentrationRequiredForSlotLevel5OrAbove = toggle; } - toggle = Main.Settings.RemoveRecurringEffectOnEntangle; - if (UI.Toggle(Gui.Localize("ModUi/&RemoveRecurringEffectOnEntangle"), ref toggle, UI.AutoWidth())) - { - Main.Settings.RemoveRecurringEffectOnEntangle = toggle; - SpellsContext.SwitchRecurringEffectOnEntangle(); - } - toggle = Main.Settings.EnableUpcastConjureElementalAndFey; if (UI.Toggle(Gui.Localize("ModUi/&EnableUpcastConjureElementalAndFey"), ref toggle, UI.AutoWidth())) { @@ -116,6 +81,27 @@ private static void DisplaySpellsGeneral() } } + toggle = Main.Settings.IllusionSpellsAutomaticallyFailAgainstTrueSightInRange; + if (UI.Toggle(Gui.Localize("ModUi/&IllusionSpellsAutomaticallyFailAgainstTrueSightInRange"), ref toggle, + UI.AutoWidth())) + { + Main.Settings.IllusionSpellsAutomaticallyFailAgainstTrueSightInRange = toggle; + } + + toggle = Main.Settings.RemoveRecurringEffectOnEntangle; + if (UI.Toggle(Gui.Localize("ModUi/&RemoveRecurringEffectOnEntangle"), ref toggle, UI.AutoWidth())) + { + Main.Settings.RemoveRecurringEffectOnEntangle = toggle; + SpellsContext.SwitchRecurringEffectOnEntangle(); + } + + toggle = Main.Settings.RemoveHumanoidFilterOnHideousLaughter; + if (UI.Toggle(Gui.Localize("ModUi/&RemoveHumanoidFilterOnHideousLaughter"), ref toggle, UI.AutoWidth())) + { + Main.Settings.RemoveHumanoidFilterOnHideousLaughter = toggle; + SpellsContext.SwitchFilterOnHideousLaughter(); + } + UI.Label(); toggle = Main.Settings.ChangeSleetStormToCube; @@ -143,30 +129,47 @@ private static void DisplaySpellsGeneral() if (UI.Toggle(Gui.Localize("ModUi/&ModifyGravitySlam"), ref toggle, UI.AutoWidth())) { Main.Settings.ModifyGravitySlam = toggle && Main.Settings.EnablePullPushOnVerticalDirection; - Tabletop2014Context.ToggleGravitySlamModification(); + Tabletop2014Context.SwitchGravitySlam(); } + UI.Label(); UI.Label(); - toggle = Main.Settings.EnableOneDndHealingSpellsUpgrade; - if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndHealingSpellsUpgrade"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.EnableOneDnDPreparedSpellsTables; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDnDPreparedSpellsTables"), ref toggle, UI.AutoWidth())) { - Main.Settings.EnableOneDndHealingSpellsUpgrade = toggle; - Tabletop2024Context.SwitchOneDndHealingSpellsBuf(); + Main.Settings.EnableOneDnDPreparedSpellsTables = toggle; + Tabletop2024Context.SwitchOneDndPreparedSpellsTables(); } + toggle = Main.Settings.EnableRitualOnAllCasters; + if (UI.Toggle(Gui.Localize("ModUi/&EnableRitualOnAllCasters"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableRitualOnAllCasters = toggle; + Tabletop2024Context.SwitchSpellRitualOnAllCasters(); + } + + UI.Label(); + toggle = Main.Settings.EnableOneDndBarkskinSpell; if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndBarkskinSpell"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableOneDndBarkskinSpell = toggle; - Tabletop2024Context.EnableOneDndBarkskinSpell(); + Tabletop2024Context.SwitchOneDndSpellBarkskin(); + } + + toggle = Main.Settings.EnableOneDndHealingSpellsUpgrade; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndHealingSpellsUpgrade"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableOneDndHealingSpellsUpgrade = toggle; + Tabletop2024Context.SwitchOneDndHealingSpellsBuf(); } toggle = Main.Settings.EnableOneDndGuidanceSpell; if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndGuidanceSpell"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableOneDndGuidanceSpell = toggle; - Tabletop2024Context.EnableOneDndGuidanceSpell(); + Tabletop2024Context.SwitchOneDndSpellGuidance(); } UI.Label(); diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2014Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2014Context.cs index a7be560635..ee29e7738c 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2014Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2014Context.cs @@ -80,17 +80,18 @@ internal static void SwitchFullyControlConjurations() internal static void LateLoad() { - ModifyGravitySlam(); - SwitchProneAction(); - SwitchHelpPower(); - SwitchGrappleAction(); - SwitchFullyControlConjurations(); - SwitchConditionBlindedShouldNotAllowOpportunityAttack(); + LoadGravitySlam(); + SwitchBardHealingBalladOnLongRest(); SwitchColdResistanceAndImmunityAlsoGrantsWeatherImmunity(); + SwitchConditionBlindedShouldNotAllowOpportunityAttack(); + SwitchEldritchBlastRange(); + SwitchFullyControlConjurations(); + SwitchGrappleAction(); + SwitchGravitySlam(); + SwitchHelpPower(); SwitchOfficialFoodRationsWeight(); + SwitchProneAction(); SwitchRingOfRegenerationHealRate(); - SwitchEldritchBlastRange(); - SwitchBardHealingBalladOnLongRest(); } internal static void SwitchEldritchBlastRange() @@ -339,19 +340,17 @@ internal static void SwitchHelpPower() private static EffectDescription _gravitySlamVanilla; private static EffectDescription _gravitySlamModified; - private static void ModifyGravitySlam() + private static void LoadGravitySlam() { _gravitySlamVanilla = GravitySlam.EffectDescription; - - _gravitySlamModified = EffectDescriptionBuilder.Create(_gravitySlamVanilla) + _gravitySlamModified = EffectDescriptionBuilder + .Create(_gravitySlamVanilla) .SetTargetingData(Side.All, RangeType.Distance, 20, TargetType.Cylinder, 4, 10) .AddEffectForms(EffectFormBuilder.MotionForm(ExtraMotionType.PushDown, 10)) .Build(); - - ToggleGravitySlamModification(); } - internal static void ToggleGravitySlamModification() + internal static void SwitchGravitySlam() { if (Main.Settings.EnablePullPushOnVerticalDirection && Main.Settings.ModifyGravitySlam) { diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 6bbd817685..b3c60beb6f 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -58,23 +58,6 @@ internal static class Tabletop2024Context SkillDefinitions.Religion) .AddToDB(); - private static readonly FeatureDefinitionPower PowerWarlockMagicalCunning = FeatureDefinitionPowerBuilder - .Create("PowerWarlockMagicalCunning") - .SetGuiPresentation(Category.Feature, PowerWizardArcaneRecovery) - .SetUsesFixed(ActivationTime.Rest, RechargeRate.LongRest) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetTargetingData(Side.All, RangeType.Self, 0, TargetType.Self) - .SetEffectForms( - EffectFormBuilder - .Create() - .SetSpellForm(5) - .Build()) - .SetParticleEffectParameters(PowerWizardArcaneRecovery) - .Build()) - .AddToDB(); - private static readonly FeatureDefinitionPointPool PointPoolWarlockInvocation1 = FeatureDefinitionPointPoolBuilder .Create(PointPoolWarlockInvocation2, "PointPoolWarlockInvocation1") .SetGuiPresentation("PointPoolWarlockInvocationInitial", Category.Feature) @@ -160,7 +143,7 @@ internal static class Tabletop2024Context .SetEffectForms(EffectFormBuilder.ConditionForm( ConditionDefinitionBuilder .Create("ConditionSorcererInnateSorcery") - .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionConjuredCreature) + .SetGuiPresentation(Category.Condition, ConditionSpiritGuardians) .SetFeatures( FeatureDefinitionMagicAffinityBuilder .Create("MagicAffinitySorcererInnateSorcery") @@ -169,7 +152,7 @@ internal static class Tabletop2024Context .AddToDB()) .AddCustomSubFeatures(new ModifyAttackActionModifierInnateSorcery()) .AddToDB())) - .SetParticleEffectParameters(Shield) + .SetCasterEffectParameters(PowerSorcererDraconicElementalResistance) .Build()) .AddToDB(); @@ -198,50 +181,49 @@ internal static class Tabletop2024Context internal static void LateLoad() { BuildBarbarianBrutalStrike(); - BuildRogueCunningStrike(); BuildOneDndGuidanceSubspells(); + BuildRogueCunningStrike(); LoadMonkHeightenedMetabolism(); LoadSecondWindToUseOneDndUsagesProgression(); - EnableOneDndBarkskinSpell(); - EnableOneDndGuidanceSpell(); - SwitchOneDnDEnableDruidUseMetalArmor(); + SwitchBarbarianBrutalCritical(); + SwitchBarbarianBrutalStrike(); + SwitchBarbarianRecklessSameBuffDebuffDuration(); + SwitchBarbarianRegainOneRageAtShortRest(); + SwitchDruidPrimalOrderAndRemoveMediumArmorProficiency(); SwitchDruidWeaponProficiencyToUseOneDnd(); - SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency(); - SwitchEnableRitualOnAllCasters(); - SwitchOneDndPreparedSpellsTables(); - SwitchOneDndPaladinLayOnHandAsBonusAction(); - SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); - SwitchOneDndEnableBardWordsOfCreationAtLevel20(); - SwitchOneDndRemoveBardSongOfRestAt2(); - SwitchOneDndRemoveBardMagicalSecretAt14And18(); + SwitchSpellRitualOnAllCasters(); + SwitchFighterLevelToIndomitableSavingReroll(); + SwitchMonkBodyAndMindToReplacePerfectSelf(); + SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack(); + SwitchMonkDoNotRequireAttackActionForFlurry(); + SwitchMonkHeightenedMetabolism(); + SwitchMonkSuperiorDefenseToReplaceEmptyBody(); SwitchOneDndChangeBardicInspirationDurationToOneHour(); SwitchOneDndEnableBardExpertiseOneLevelBefore(); - SwitchOneDndWarlockInvocationsProgression(); - SwitchOneDndWarlockMagicalCunningAtLevel2(); + SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); + SwitchOneDndEnableBardWordsOfCreationAtLevel20(); + SwitchOneDnDEnableDruidUseMetalArmor(); SwitchOneDndHealingPotionBonusAction(); SwitchOneDndHealingSpellsBuf(); - SwitchOneDndWizardScholar(); - SwitchOneDndWizardSchoolOfMagicLearningLevel(); + SwitchOneDndMonkUnarmedDieTypeProgression(); + SwitchOneDndPaladinLayOnHandAsBonusAction(); SwitchOneDndPaladinLearnSpellCastingAtOne(); + SwitchOneDndPreparedSpellsTables(); SwitchOneDndRangerLearnSpellCastingAtOne(); + SwitchOneDndRemoveBardMagicalSecretAt14And18(); + SwitchOneDndRemoveBardSongOfRestAt2(); + SwitchOneDndSpellBarkskin(); + SwitchOneDndSpellGuidance(); SwitchOneDndSurprisedEnforceDisadvantage(); + SwitchOneDndWarlockInvocationsProgression(); + SwitchOneDndWizardScholar(); + SwitchOneDndWizardSchoolOfMagicLearningLevel(); + SwitchPersuasionToFighterSkillOptions(); SwitchRangerNatureShroud(); - SwitchBarbarianBrutalStrike(); - SwitchBarbarianBrutalCritical(); - SwitchBarbarianRecklessSameBuffDebuffDuration(); - SwitchBarbarianRegainOneRageAtShortRest(); SwitchRogueBlindSense(); SwitchRogueCunningStrike(); SwitchRogueSteadyAim(); - SwitchPersuasionToFighterSkillOptions(); - SwitchFighterLevelToIndomitableSavingReroll(); SwitchSorcererInnateSorcery(); - SwitchMonkHeightenedMetabolism(); - SwitchMonkSuperiorDefenseToReplaceEmptyBody(); - SwitchMonkBodyAndMindToReplacePerfectSelf(); - SwitchOneDndMonkUnarmedDieTypeProgression(); - SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack(); - SwitchMonkDoNotRequireAttackActionForFlurry(); } private static void LoadSecondWindToUseOneDndUsagesProgression() @@ -301,7 +283,7 @@ internal static void SwitchOneDnDEnableDruidUseMetalArmor() } } - internal static void SwitchEnableDruidPrimalOrderAndRemoveMediumArmorProficiency() + internal static void SwitchDruidPrimalOrderAndRemoveMediumArmorProficiency() { if (Main.Settings.EnableDruidPrimalOrderAndRemoveMediumArmorProficiency) { @@ -329,7 +311,7 @@ internal static void SwitchDruidWeaponProficiencyToUseOneDnd() : DruidWeaponsCategories; } - internal static void SwitchEnableRitualOnAllCasters() + internal static void SwitchSpellRitualOnAllCasters() { var subclasses = SharedSpellsContext.SubclassCasterType.Keys.Select(GetDefinition); @@ -367,7 +349,7 @@ internal static void SwitchEnableRitualOnAllCasters() } } - internal static void EnableOneDndBarkskinSpell() + internal static void SwitchOneDndSpellBarkskin() { if (Main.Settings.EnableOneDndBarkskinSpell) { @@ -431,7 +413,7 @@ private static void BuildOneDndGuidanceSubspells() } } - internal static void EnableOneDndGuidanceSpell() + internal static void SwitchOneDndSpellGuidance() { foreach (var spell in GuidanceSubSpells) { @@ -776,18 +758,6 @@ internal static void SwitchRangerNatureShroud() Ranger.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } - internal static void SwitchOneDndWarlockMagicalCunningAtLevel2() - { - Warlock.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PowerWarlockMagicalCunning); - - if (Main.Settings.EnableWarlockMagicalCunningAtLevel2) - { - Warlock.FeatureUnlocks.Add(new FeatureUnlockByLevel(PowerWarlockMagicalCunning, 2)); - } - - Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - internal static void SwitchOneDndWarlockInvocationsProgression() { if (Main.Settings.SwapWarlockToUseOneDndInvocationProgression) @@ -1095,6 +1065,11 @@ internal static void SwitchOneDndMonkUnarmedDieTypeProgression() Main.Settings.SwapMonkToUseOneDndUnarmedDieTypeProgression ? MonkUnarmedDieTypeByRank2024 : MonkUnarmedDieTypeByRank; + + AttackModifierMonkMartialArtsImprovedDamage.GuiPresentation.Description = + Main.Settings.SwapMonkToUseOneDndUnarmedDieTypeProgression + ? "Feature/&AttackModifierMonkMartialArtsExtendedDescription" + : "Feature/&AttackModifierMonkMartialArtsDescription"; } internal static void SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack() diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 9f6efec2d2..abb3f95182 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -304,7 +304,6 @@ public class Settings : UnityModManager.ModSettings public bool EnableSorcererMagicalGuidance { get; set; } public bool EnableSorcererQuickenedAction { get; set; } public bool HideQuickenedActionWhenMetamagicOff { get; set; } - public bool EnableWarlockMagicalCunningAtLevel2 { get; set; } public bool SwapWarlockToUseOneDndInvocationProgression { get; set; } public bool EnableWizardToLearnScholarAtLevel2 { get; set; } public bool EnableWizardToLearnSchoolAtLevel3 { get; set; } @@ -374,8 +373,8 @@ public class Settings : UnityModManager.ModSettings public bool UseHeightOneCylinderEffect { get; set; } public bool FixEldritchBlastRange { get; set; } public bool ModifyGravitySlam { get; set; } - public bool EnableOneDndHealingSpellsUpgrade { get; set; } public bool EnableOneDndBarkskinSpell { get; set; } + public bool EnableOneDndHealingSpellsUpgrade { get; set; } public bool EnableOneDndGuidanceSpell { get; set; } public bool AllowHasteCasting { get; set; } public bool AllowStackedMaterialComponent { get; set; } diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 3b8e56a86d..6f6f9923f1 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -88,6 +88,7 @@ Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=Sie haben einen Vorte Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=Dunkelheit wahrnehmend Feature/&AlwaysBeardDescription={0} % Chance, einen prächtigen Bart wachsen zu lassen! Feature/&AncestryLevelUpDraconicDescription=Ihre Drachenabstammung verleiht Ihnen eine Affinität zur Schadensart {0}. +Feature/&AttackModifierMonkMartialArtsExtendedDescription=Sie können anstelle des normalen Schadens Ihres unbewaffneten Schlags oder Ihrer Mönchswaffe einen W6 würfeln, wenn Sie keine Rüstung oder keinen Schild tragen. Dieser Würfel ändert sich, wenn Sie Mönchsstufen erreichen (W8 auf der 5. Stufe, W10 auf der 11. Stufe). Sie können Geschicklichkeit anstelle von Stärke für die Angriffs- und Schadenswürfe Ihrer unbewaffneten Schläge und Mönchswaffen verwenden. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusDescription=Sie können einen unbewaffneten Schlag als Bonusaktion ausführen. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=Kampfkunst – Bonus unbewaffneter Schlag Feature/&AttributeModifierDazzledTitle=Geblendet @@ -197,8 +198,6 @@ Feature/&PowerTeleportSummonDescription=Sie können sich an jeden Ort im Umkreis Feature/&PowerTeleportSummonTitle=Teleport Feature/&PowerVanishSummonDescription=Sie können Ihre Beschwörung verschwinden lassen. Feature/&PowerVanishSummonTitle=Verschwinden -Feature/&PowerWarlockMagicalCunningDescription=Sie können Ihre Bonusaktion nutzen, um eine Anzahl verbrauchter Paktplätze zurückzugewinnen, die höchstens der Hälfte Ihres Maximums entspricht (aufgerundet). Sobald Sie diese Funktion nutzen, können Sie dies nicht erneut tun, bis Sie eine lange Pause beendet haben. -Feature/&PowerWarlockMagicalCunningTitle=Magische List Feature/&ToolGainChoicesPluralDescription=Wählen Sie {0} dieser Tools: {1} Feature/&ToolGainChoicesSingleDescription=Wählen Sie eines dieser Tools: {1} Feature/&VisionBlindsightDescription=Sie leiden an Blindsicht. @@ -349,8 +348,6 @@ Tooltip/&PreReqMustKnow=Muss man wissen {0} Tooltip/&Tag9000Title=Benutzerdefinierter Effekt Tooltip/&TagDamageChaosBoltTitle=Chaotischer Schaden Tooltip/&TagUnfinishedBusinessTitle=Unerledigte Aufgabe -Tooltip/&TargetMustNotBeSurprised=Das Ziel darf nicht überrascht werden -Tooltip/&TargetMustUnderstandYou=Das Ziel muss Ihren Befehl verstehen UI/&CustomFeatureSelectionStageDescription=Wählen Sie zusätzliche Funktionen für Ihre Klasse/Unterklasse aus. UI/&CustomFeatureSelectionStageFeatures=Merkmale UI/&CustomFeatureSelectionStageNotDone=Sie müssen alle verfügbaren Funktionen auswählen, bevor Sie fortfahren diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 5976ec7704..4c62c6d18d 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -5,7 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Füge den Zustand Blutung[Munition, Rezepte, Kits usw.] [Neustart erforderlich] ModUi/&AddDarknessPerceptiveToDarkRaces=Aktiviere Dunkelheitswahrnehmung bei Dunkelelf, Dunkelkobold und Grauem Zwerg \n[gewährt einen Vorteil bei Wahrnehmungsprüfungen im unbeleuchteten Zustand oder in magischer Dunkelheit] ModUi/&AddDexModifierToEnemiesInitiativeRoll=DEX-Modifikator zu Feinden hinzufügen Initiative Roll -ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Füge Primal Order auf Level 1 hinzu und entferne Medium Armor Proficiency +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Aktiviere Primal Order auf Level 1 und entferne Medium Armor Proficiency ModUi/&AddFighterLevelToIndomitableSavingReroll=Füge die Klassenstufe als Bonus zur Wiederholung des Rettungswurfs für Unbezwingbaren Widerstand hinzu ModUi/&AddHumanoidFavoredEnemyToRanger=Aktivieren Sie Humanoide als bevorzugte Feinde ModUi/&AddNewWeaponsAndRecipesToShops=Neue Waffen und Rezepte zu den Läden hinzufügen [Handbandagen, Hellebarden, Piken, lange Streitkolben, Handarmbrüste] [Neustart erforderlich] @@ -16,17 +16,17 @@ ModUi/&AddToStore={0} hinzufügen ModUi/&Advanced=Erweitert: [Neustart erforderlich] ModUi/&AdvancedHelp=• ACHTUNG: Diese Einstellungen erfordern, dass der Spieler diesen Mod installiert hat ModUi/&AllowAllPlayersOnNarrativeSequences=+ Alle Spieler in Erzählsequenzen zulassen -ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Erlaubt Verbündeten, GloomStalker in natürlicher Dunkelheit wahrzunehmen +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Erlaubt Verbündeten, GloomStalker in natürlicher Dunkelheit wahrzunehmen ModUi/&AllowAnyClassToWearSylvanArmor=Erlaubt jeder Klasse, Sylvan-Rüstung oder Lichtbringer-Kleidung zu tragen ModUi/&AllowBladeCantripsToUseReach=Erlaube Blade Cantrips, eine Reichweite statt 5 Fuß zu verwenden. ModUi/&AllowClubsToBeThrown=Ermöglicht das Werfen von Keulen wie Dolche oder Faustäxte. -ModUi/&AllowDisplayingNonSuggestedSpells=Erlaube Mods, die keine vorgeschlagenen Zaubersprüche auf jeder Liste haben +ModUi/&AllowDisplayingNonSuggestedSpells=Erlaube Mods, die nicht vorgeschlagene Zaubersprüche auf jeder Liste ModUi/&AllowDisplayingOfficialSpells=Offizielle Spielzauber auf jeder Liste zulassen -ModUi/&AllowDruidToWearMetalArmor=Erlaubt Druiden, eine Metallrüstung zu tragen +ModUi/&AllowDruidToWearMetalArmor=Entfernen Sie die Einschränkungen für Metal Armor ModUi/&AllowDungeonsMaxLevel20=Erlaube Dungeons mit max. Level 20 ModUi/&AllowFlightSuspend=Erlaubt die vorübergehende Aussetzung des Flugs durch Gegenstände und Zauber [betrifft keine Wildform- oder Flugrassen] ModUi/&AllowGadgetsAndPropsToBePlacedAnywhere=Aktivieren Sie STRG-Klick, um alle Überprüfungen beim Platzieren von Gadgets oder Requisiten zu umgehen -ModUi/&AllowHasteCasting=Ermöglicht das Wirken von Zaubersprüchen mit zusätzlicher Aktion durch Beschleunigung [Sie sind weiterhin auf 1 Hauptaktionszauber pro Runde beschränkt] +ModUi/&AllowHasteCasting=Erlaubt das Wirken von Zaubersprüchen mit zusätzlicher Aktion durch Beschleunigung [Sie sind weiterhin auf 1 Hauptaktionszauber pro Runde beschränkt] ModUi/&AllowHornsOnAllRaces=Hörner bei allen Rassen zulassen [die Ergebnisse können je nach Rasse, Kopf und Horn schrecklich aussehen] ModUi/&AllowMoreRealStateOnRestPanel=Realistischeren Status im Ruhebereich zulassen [Aktionen nach dem Ruhebereich im Bereich davor und Wiederherstellungsfunktionen im Bereich danach ausblenden] ModUi/&AllowStackedMaterialComponent=Gestapelte Materialkomponente zulassen [z. B. 2x500gp Diamant entsprechen 1000gp Diamant] @@ -37,7 +37,7 @@ ModUi/&Backgrounds=Hintergründe ModUi/&BackgroundsAndRaces=Hintergründe und Rassen ModUi/&Basic=Grundlegend: ModUi/&Bestiary=Bestiarium -ModUi/&BestowCurseNoConcentrationRequiredForSlotLevel5OrAbove=Fluch verleihen erfordert keine Konzentration, wenn es mit einem Zauberplatz L5+ gewirkt wird. +ModUi/&BestowCurseNoConcentrationRequiredForSlotLevel5OrAbove=Verfluchen erfordert keine Konzentration, wenn es mit einem Zauberplatz L5+ gewirkt wird. ModUi/&BlindedConditionDontAllowAttackOfOpportunity=Keine Gelegenheitsangriffe aktivieren, wenn Sie geblendet sind ModUi/&Blueprints=Blaupausen ModUi/&Campaigns=Kampagnen @@ -59,7 +59,7 @@ ModUi/&CreditsAndDiagnostics=Credits & Diagnose ModUi/&Critical=Kritischer Treffer: ModUi/&CriticalOption0=0: Spielvorgabe, wirf beliebige Schadenswürfel zweimal, addiere das Ergebnis und füge Modifikatoren hinzu [XdY+XdY+Z] ModUi/&CriticalOption1=1: Summiere das maximale Ergebnis der Schadenswürfel und addiere es zum Schaden des Angriffs [XdY+(X*Y)+Z] -ModUi/&CriticalOption2=2: Wirf alle Schadenswürfel, die das höchstmögliche Ergebnis erzielen, erneut und addiere es zum Gesamtschaden +ModUi/&CriticalOption2=2: Wirf alle Schadenswürfel, die das höchstmögliche Ergebnis erzielen, erneut und addiere sie zum Gesamtschaden ModUi/&CriticalOption3=3: Verdoppeln Sie den Gesamtschaden Ihres Angriffs, anstatt zusätzliche Würfel zu werfen. [(XdY+Z)*2] ModUi/&DisableAutoEquip=Automatisches Ausrüsten von Gegenständen im Inventar deaktivieren ModUi/&DisableBarbarianBrutalCritical=+ Deaktivieren Sie außerdem Brutal Critical auf den Stufen 9, 13 und 17 @@ -104,7 +104,7 @@ ModUi/&EnableBarbarianBrutalStrike=Aktiviere Brutal StrikeKampfstil auf Stufe 2. ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Aktivieren Sie den Buff und Debuff von Reckless Attack, um ihn zu Beginn der nächsten Runde zu beenden. ModUi/&EnableBarbarianRegainOneRageAtShortRest=Aktiviere die Wiedererlangung einer Wut-Anwendung während einer kurzen Pause auf Level 7 -ModUi/&EnableBardExpertiseOneLevelBefore=Aktivieren Sie Expertise auf den Stufen 2 und 9 statt 3 und 10. +ModUi/&EnableBardExpertiseOneLevelBefore=Aktivieren Sie Expertise auf den Stufen 2 und 9 statt auf 3 und 10. ModUi/&EnableBardHealingBalladOnLongRest=Aktivieren Sie College of Hope Healing Ballad bei langer Pause ModUi/&EnableBardSuperiorInspirationAtLevel18=Aktiviere Überlegene Inspiration auf Level 18 statt 20 und gewähre außerdem zwei Aufladungen statt einer ModUi/&EnableBardWordsOfCreationAtLevel20=Aktiviere Worte der Schöpfung auf Level 20 @@ -114,8 +114,8 @@ ModUi/&EnableCantripsTriggeringOnWarMagic=Erlaube Cantrips, um einen zusätzlich ModUi/&EnableCharactersOnFireToEmitLight=Charaktere, die brennen, sollten Licht ausstrahlen [Lichtwürfel, Feuerelementar, Feuernarr, Feuerfischadler, Feuerspinne und Familie der Feuerzustände] ModUi/&EnableCustomPortraits=Aktivieren Sie Benutzerdefinierte Porträts ModUi/&EnableCustomPortraitsHelp=• Platzieren Sie Ihre benutzerdefinierten Porträts in den Unterordnern Personal oder PreGen, benannt nach dem Vornamen des Helden [z. B.: Anton, Celia, Nialla usw.]\n• Verwenden Sie PNG-Bilder mit einer Größe von 256 x 384 Pixeln und einer Transparenzebene [verwenden Sie GIMP für beste Ergebnisse] -ModUi/&EnableDungeonMakerModdedContent=Aktivieren Sie Dungeon Maker Pro\n[einschließlich flacher Räume, Dungeon-Größen von 150 x 150 und 200 x 200 und ohne Schnickschnack, indem Sie Elemente aus allen Umgebungen mischen] -ModUi/&EnableElevationCameraToStayAtPosition=+ Aktivieren Sie die Höhenkamera während des Gefechts, damit sie nach der Deaktivierung an ihrer Position bleibt und ihre Reichweite verdreifacht. +ModUi/&EnableDungeonMakerModdedContent=Aktivieren Sie Dungeon Maker Pro\n[einschließlich flacher Räume, Dungeon-Größen von 150 x 150 und 200 x 200 und ohne Schnickschnack, indem Sie Assets aus allen Umgebungen mischen] +ModUi/&EnableElevationCameraToStayAtPosition=+ Aktivieren Sie die Höhenkamera während des Gefechts, damit sie nach der Deaktivierung an ihrer Position bleibt und ihre Reichweite verdreifacht ModUi/&EnableEpicPointsAndArray=Aktiviere ein episches 35-Punkte-Kaufsystem und -Array [17,15,13,12,10,8] [Neustart erforderlich] ModUi/&EnableExtendedProficienciesPanelDisplay=Anzeige des erweiterten Kompetenzfelds aktivieren [Arkane Schüsse, Infusionen, Manöver und Vielseitigkeit]\n[Leistungseinbußen bei der Charakterüberprüfung. Verwendung auf eigene Gefahr] ModUi/&EnableFeatsAtEvenLevels=Aktiviere die Auswahl von Fähigkeiten auf den Stufen 2, 10 und 18 @@ -146,7 +146,9 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Aktiviere Übe ModUi/&EnableMonkWeaponSpecialization=Aktiviere Waffenspezialisierung auf den Stufen 2 und 11 [der ausgewählte Waffentyp wird für dich zu einer Mönchswaffe] ModUi/&EnableMulticlass=Aktivieren Sie Multiclass [Neustart erforderlich] ModUi/&EnableOneDnDPreparedSpellsTables=Ermöglichen Sie allen Zauberern die Verwendung neuer vorbereiteter Zaubertabellen [Barde, Kleriker, Druide, Paladin, Waldläufer, Zauberer, Magier] -ModUi/&EnableOneDndHealingSpellsUpgrade=Aktiviere den Heilungswürfel-Buff für Wunden heilen, Heilendes Wort, Massenheilung von Wunden und Massenheilungswort. +ModUi/&EnableOneDndBarkskinSpell=Aktiviere Barkskin 5e 2024 Zauberversion [Bonusaktion, keine Konzentration, AC auf 17 gesetzt] +ModUi/&EnableOneDndGuidanceSpell=Aktivieren Sie die Zauberversion Anleitung 5e 2024 [Wählen Sie beim Zaubern eine Fertigkeit aus und erhalten Sie bis zu 1 Minute lang einen Bonus.] +ModUi/&EnableOneDndHealingSpellsUpgrade=Aktiviere die Zauberversionen Wunden heilen, Heilendes Wort, Massenheilung von Wunden und Massenheilendes Wort 5e 2024 ModUi/&EnablePaladinLayOnHandsAsBonusAction=Aktiviere Handauflegen als Bonusaktion ModUi/&EnablePaladinSmiteAsBonusAction=Aktiviere Smite als Bonusaktion ModUi/&EnablePaladinSpellCastingAtLevel1=Aktiviere Zauberwirken auf Stufe 1 statt 2. @@ -223,7 +225,7 @@ ModUi/&Items=Artikel: ModUi/&ItemsHelp1=Öffnen Sie den Charakterüberprüfungsbildschirm, um Helden Gegenstände hinzuzufügen... ModUi/&ItemsHelp2=Drücken Sie +, um Elemente zum Bodencontainer hinzuzufügen ModUi/&KeepInvisibilityWhenUsingItems=Aktivieren Sie die Verwendung von Elementen, ohne die Unsichtbarkeit zu beeinträchtigen. -ModUi/&KeepStealthOnHeroIfPerceivedDuringSurpriseAttack=Aktualisiere die Tarnung des Helden nach einem Angriff, wenn er in einer Überraschungsrunde wahrgenommen wird [nur erster Held] +ModUi/&KeepStealthOnHeroIfPerceivedDuringSurpriseAttack=Aktualisiere die Tarnung des Helden nach einem Angriff, wenn dieser in einer Überraschungsrunde wahrgenommen wird [nur erster Held] ModUi/&MakeAllMagicStaveArcaneFoci=Machen Sie alle Zauberstäbe zu arkanen Fokussen [außer dem Stab der Heilung, der universell ist] ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Markieren Sie auch die Position unsichtbarer Teleporter auf der Levelkarte, nachdem Sie diese entdeckt haben ModUi/&MaxAllowedClasses=Maximal zulässige Klassen @@ -234,7 +236,7 @@ ModUi/&MovementGridWidthModifier=Multiplizieren Sie die Breite des ModUi/&MulticlassKeyHelp=Ein SHIFT-Klick auf einen Zauber kehrt den Typ des verbrauchten Repertoireplatzes um\n[Hexenmeister verbraucht weiße Zauberplätze und andere verbrauchen grüne Paktplätze] ModUi/&Multiplayer=Mehrspieler: ModUi/&MultiplyTheExperienceGainedBy=Multipliziere die gewonnene Erfahrung um [%] -ModUi/&NeverMoveCameraOnEnemyTurn=+ Die Kamera bewegt sich nie, während der Gegner am Zug ist +ModUi/&NeverMoveCameraOnEnemyTurn=+ Die Kamera bewegt sich nie während der Züge des Gegners ModUi/&NoExperienceOnLevelUp=Für den Levelaufstieg ist keine Erfahrung erforderlich ModUi/&OfficialObscurementRulesCancelAdvDisPairs=+ Aufheben von Vorteil / Nachteil geblendeten, unsichtbaren und wahrgenommenen Paaren [nützlich in Verbindung mit offiziellen Vorteil / Nachteil-Regeln] ModUi/&OfficialObscurementRulesHeavilyObscuredAsProjectileBlocker=+ stark verdeckte Bereiche in Projektilblocker ändern [Cloud Kill, Nebelwolke, Brandwolke, Blütenblattsturm, Schneeregensturm, Stinkende Wolke] @@ -258,15 +260,15 @@ ModUi/&Races=Rennen ModUi/&RecipeCost=Kosten des Rezepts ModUi/&RelicForgeries=Reliquienfälschungen ModUi/&RemoveAttunementRequirements=Abstimmungsanforderungen entfernen [Neustart erforderlich] -ModUi/&RemoveBardMagicalSecretAt14And18=Entfernen Sie Magisches Geheimnis bei 14 und 18 -ModUi/&RemoveBardSongOfRest=Entferne Song of Rest auf Level 2 +ModUi/&RemoveBardMagicalSecretAt14And18=Entferne Magisches Geheimnis auf den Ebenen 14 und 18 +ModUi/&RemoveBardSongOfRestAt2=Entferne Song of Rest auf Level 2 ModUi/&RemoveBugVisualModels=Ersetzen Sie im Spiel spinnenähnliche Modelle durch bärenähnliche Modelle [Spinnenphobie] [Neustart erforderlich] -ModUi/&RemoveHumanoidFilterOnHideousLaughter=Humanoidenfilter bei Grauenhaftem Gelächter entfernen +ModUi/&RemoveHumanoidFilterOnHideousLaughter=Humanoidenfilter bei Greuelhaftes Gelächter entfernen ModUi/&RemoveRecurringEffectOnEntangle=Wende den Verstricken-Effekt nur beim Zaubern an und erzwinge außerdem eine Stärkeprüfung, um sich von den Ranken zu befreien. ModUi/&RemoveRogueBlindSense=Entferne Blind Sense auf Level 14 -ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Schulbeschränkungen von Shadowcaster entfernen -ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Schulbeschränkungen von Spellblade entfernen -ModUi/&RestockAntiquarians=Antiquariat auffüllen [Halman Summer] +ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Schulbeschränkungen von Shadowcaster entfernen +ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Schulbeschränkungen von Spellblade entfernen +ModUi/&RestockAntiquarians=Antiquariatslager auffüllen [Halman Summer] ModUi/&RestockArcaneum=Arkaneum auffüllen [Heddlon Surespell] ModUi/&RestockCircleOfDanantar=Kreis von Danantar auffüllen [Joriel Foxeye] ModUi/&RestockHelp=• Überschreiben Sie die Standardeinstellungen, um zu erzwingen, dass der gesamte Lagerbestand des Händlers im Laufe der Zeit wieder aufgefüllt wird [ausgenommen Handbücher und Folianten]\n• Beachten Sie, dass es bei manchen Artikeln bis zu 7 Spieltage dauern kann, bis der Lagerbestand wieder aufgefüllt wird. @@ -287,7 +289,7 @@ ModUi/&SettingsLoad=• Eine exportierte Einstellung laden ModUi/&SettingsOpenFolder=Exportierten Einstellungsordner öffnen ModUi/&SettingsRefresh=Aktualisieren ModUi/&SettingsRemove=Entfernen -ModUi/&ShowButtonWithControlledMonsterInfo=Schaltfläche anzeigen, die Informationen über kontrollierte Monster öffnet [wildförmige Druiden, Beschwörungen, NPC-Anhänger usw.] +ModUi/&ShowButtonWithControlledMonsterInfo=Schaltfläche anzeigen, die Informationen über kontrollierte Monster öffnet [wild geformte Druiden, Beschwörungen, NPC-Anhänger usw.] ModUi/&ShowChannelDivinityOnPortrait=Zeigt an, wie viele Channel Divinity-Anwendungen ein Held auf seinem Portrait hat, ähnlich wie Zauberpunkte. ModUi/&ShowCraftedItemOnRecipeIcon=Symbol für hergestellte Gegenstände neben Rezeptgegenständen im Shop und Inventar anzeigen [Wenn Sie mit der Maus darüber fahren, wird ein Tooltip für hergestellte Gegenstände angezeigt] ModUi/&ShowCraftingRecipeInDetailedTooltips=Herstellungsrezept in ausführlichen Tooltips anzeigen @@ -307,17 +309,15 @@ ModUi/&StockHugoStoreWithAdditionalFoci=Füllen Sie Hugos Laden mit Unterklassen ModUi/&Subraces=Unterrassen ModUi/&SwapAbjurationSavant=Tauschen Sie Abjurer Abjuration Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erwerben, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] -ModUi/&SwapCraftedItemAndRecipeIcons=+ Rezepte und Symbole für hergestellte Gegenstände im Shop austauschenModUi/&SwapEvocationSavant=Tauschen Sie Evoker Evocation Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] -ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Tauschen Sie Waffenfertigkeit mit der Version 5e 2024 aus [einfache Waffen statt Waffentypen, aber Sie verlieren die Krummsäbelfertigkeit] -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Tauschen Sie die Funktionen Evoker Sculpt Spells und Potent Cantrip aus +ModUi/&SwapCraftedItemAndRecipeIcons=+ Rezepte und Symbole für hergestellte Gegenstände im Shop austauschen +ModUi/&SwapDruidToUseOneDndWeaponProficiency=Aktivieren Sie die Fertigkeit Einfache Waffen [anstelle einzelner Waffentypen, aber Sie verlieren die Fertigkeit Krummsäbel] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Tauschen Sie Evoker Sculpt Spells und Potent Cantrip beim Fortschreiten aus ModUi/&SwapEvocationSavant=Tauschen Sie Evoker Evocation Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] -ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Tauschen Sie Unbewaffneter Angriff aus, um die Würfeltyp-Progression von 5e 2024 zu verwenden -ModUi/&EnableOneDndBarkskinSpell=Tauschen Sie Barkskin gegen die 5e 2024-Version aus [Bonusaktion, keine Konzentration, AC auf 17 eingestellt] -ModUi/&EnableOneDndGuidanceSpell=Tauschen Sie Anleitung gegen Version 5e 2024 aus [Wählen Sie beim Zaubern eine Fertigkeit aus und erhalten Sie bis zu 1 Minute lang einen Bonus.] -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Tauschen Sie Second Wind aus, um den Nutzungsfortschritt von 5e 2024 zu verwenden. -ModUi/&SwapWarlockToUseOneDndInvocationProgression=Tauschen Sie den Fortschritt der Anrufungen mit der Version 5e 2024 aus. +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Aktivieren Sie Unbewaffneter Angriff, um die Würfeltyp-Progression von 5e 2024 zu verwenden +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Aktivieren Sie Second Wind, um den Nutzungsfortschritt von 5e 2024 zu nutzen +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Aktivieren Sie Anrufe, um die 5e 2024-Progression zu nutzen ModUi/&TableTopButton=Tabletop-Inhalt auswählen -ModUi/&TableTopHelp1=• In den folgenden Abschnitten werden die im Mod verstreuten Einstellungen für 5e 2014 und 2024 neu gruppiert und dupliziert, damit Sie es einfacher haben +ModUi/&TableTopHelp1=• In den folgenden Abschnitten werden die im Mod verstreuten Einstellungen für 5e 2014 und 2024 neu gruppiert und dupliziert, damit Sie es einfacher haben. ModUi/&TableTopHelp2=• Drücken Sie die Taste, um unter der Registerkarte „Charakter“ nur Tabletop-Inhalte auszuwählen, und wählen Sie alle Optionen darunter für ein echtes TT-Erlebnis aus ModUi/&Tabletop=Tabletop [5e 2014]: ModUi/&TargetLanguage=Zielsprache @@ -343,4 +343,4 @@ ModUi/&UseOfficialFoodRationsWeight=Aktivieren Sie eine Lebensmit ModUi/&UseOfficialObscurementRules=Aktiviere die Kampfregeln Beleuchtung, Verdunkelung und Sicht ModUi/&UseOfficialObscurementRulesHelp=[Angreifer, der wahrnimmt, Verteidiger, der es nicht wahrnehmen kann, erhält ADV, und Angreifer, der es nicht wahrnimmt, Verteidiger, der es wahrnehmen kann, erhält DIS\n stark verdeckte Bereiche verursachen den Zustand der Erblindung, wobei Angriffswürfe gegen die Kreatur ADV haben und die Angriffswürfe der Kreatur DIS haben\n alle Distanzzauber, die auf Einzelpersonen zielen, können nicht gewirkt werden, wenn der Angreifer keine Sicht hat, außer denen, bei denen nicht klar angegeben ist, dass Sicht erforderlich ist] ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=Aktivieren Kleine Rassen haben einen Nachteil beim Tragen schwerer Waffen -ModUi/&WildSurgeDieRollThreshold=Setze den Schwellenwert für die Chance des Sorcerer Wild Magic-Würfels:\n[Wild Surge wird ausgelöst, wenn der Würfelwert kleiner oder gleich dem Schwellenwert ist] +ModUi/&WildSurgeDieRollThreshold=Setze den Schwellenwert für die Chance des Sorcerer Wild Magic-Würfels:\n[Wild Surge wird ausgelöst, wenn der Würfel kleiner oder gleich dem Schwellenwert ist] diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index a7c7460132..865a3a1f46 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -88,6 +88,7 @@ Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=You have Advantage on Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=Darkness Perceptive Feature/&AlwaysBeardDescription={0}% chances to grow a glorious beard! Feature/&AncestryLevelUpDraconicDescription=Your draconic ancestry gives you an affinity to {0} damage type. +Feature/&AttackModifierMonkMartialArtsExtendedDescription=You can roll a d6 in place of the normal damage of your unarmed strike or monk weapon while not wearing any armor or shield. This die changes as you gain monk levels (d8 at the 5th level, d10 at the 11th level). You can use dexterity instead of strength for the attack and damage rolls of your unarmed strikes and monk weapons. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusDescription=You can make one unarmed strike as a bonus action. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=Martial Arts - Bonus Unarmed Strike Feature/&AttributeModifierDazzledTitle=Dazzled @@ -197,8 +198,6 @@ Feature/&PowerTeleportSummonDescription=You can teleport to any location within Feature/&PowerTeleportSummonTitle=Teleport Feature/&PowerVanishSummonDescription=You can make your summon vanish. Feature/&PowerVanishSummonTitle=Vanish -Feature/&PowerWarlockMagicalCunningDescription=You can use your bonus action to regain a number of expended pact slots no more than equal to half your maximum (round up). Once you use this feature, you can't do so again until you finish a long rest. -Feature/&PowerWarlockMagicalCunningTitle=Magical Cunning Feature/&ToolGainChoicesPluralDescription=Choose {0} of these tools: {1} Feature/&ToolGainChoicesSingleDescription=Choose one of these tools: {1} Feature/&VisionBlindsightDescription=You have blindsight. diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index 2e535df318..a5950d1313 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -88,6 +88,7 @@ Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=Tienes Ventaja en las Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=Percepción de la oscuridad Feature/&AlwaysBeardDescription=¡{0}% de posibilidades de que te crezca una barba gloriosa! Feature/&AncestryLevelUpDraconicDescription=Tu ascendencia dracónica te otorga una afinidad con el tipo de daño {0}. +Feature/&AttackModifierMonkMartialArtsExtendedDescription=Puedes tirar un d6 en lugar del daño normal de tu ataque sin armas o de tu arma de monje mientras no lleves armadura ni escudo. Este dado cambia a medida que subes de nivel de monje (d8 en el nivel 5, d10 en el nivel 11). Puedes usar destreza en lugar de fuerza para las tiradas de ataque y daño de tus ataques sin armas y de tus armas de monje. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusDescription=Puedes realizar un ataque desarmado como acción adicional. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=Artes marciales: Bonificación de golpe sin armas Feature/&AttributeModifierDazzledTitle=Deslumbrado @@ -197,8 +198,6 @@ Feature/&PowerTeleportSummonDescription=Puedes teletransportarte a cualquier ubi Feature/&PowerTeleportSummonTitle=Teletransportarse Feature/&PowerVanishSummonDescription=Puedes hacer que tu invocación desaparezca. Feature/&PowerVanishSummonTitle=Desaparecer -Feature/&PowerWarlockMagicalCunningDescription=Puedes usar tu acción adicional para recuperar una cantidad de espacios de pacto gastados que no sea mayor que la mitad de tu máximo (redondeado hacia arriba). Una vez que uses esta función, no podrás volver a hacerlo hasta que termines un descanso prolongado. -Feature/&PowerWarlockMagicalCunningTitle=Astucia mágica Feature/&ToolGainChoicesPluralDescription=Elija {0} de estas herramientas: {1} Feature/&ToolGainChoicesSingleDescription=Elija una de estas herramientas: {1} Feature/&VisionBlindsightDescription=Tienes visión ciega. @@ -349,8 +348,6 @@ Tooltip/&PreReqMustKnow=Debe saber {0} Tooltip/&Tag9000Title=Efecto personalizado Tooltip/&TagDamageChaosBoltTitle=Daño caótico Tooltip/&TagUnfinishedBusinessTitle=Negocios inconclusos -Tooltip/&TargetMustNotBeSurprised=El objetivo no debe sorprenderse -Tooltip/&TargetMustUnderstandYou=El objetivo debe comprender tu orden UI/&CustomFeatureSelectionStageDescription=Seleccione funciones adicionales para su clase/subclase. UI/&CustomFeatureSelectionStageFeatures=Características UI/&CustomFeatureSelectionStageNotDone=Debe seleccionar todas las funciones disponibles antes de continuar diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 7e0859fb12..4d802e071a 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -1,32 +1,31 @@ -[la oleada salvaje se activa si los resultados son menores o iguales al umbral] ModUi/&AccountForAllDiceOnFollowUpStrike=Añade todos los efectos adicionales del arma base a la dote Golpe de seguimiento -ModUi/&AccountForAllDiceOnSavageAttack=Añade todos los dados del daño del arma base a las características que agregan daño del arma base en lugar de solo 1 dado. [Ataque salvaje, armas a 2 manos, etc.] +ModUi/&AccountForAllDiceOnSavageAttack=Agrega todos los dados del daño del arma base a las características que agregan daño del arma base en lugar de solo 1 dado. [Ataque salvaje, armas a 2 manos, etc.] ModUi/&AddAllToStore=Agregue a continuación a las tiendas [estas son recetas de juegos reutilizadas en otras categorías de armas] ModUi/&AddBleedingToLesserRestoration=Agregue la condición Sangrado a las eliminadas por Mayor y Restauración menor ModUi/&AddCustomIconsToOfficialItems=Añade íconos personalizados a los elementos oficiales del juego [municiones, recetas, kits, etc.] [Requiere reinicio] ModUi/&AddDarknessPerceptiveToDarkRaces=Habilita Percepción de la oscuridad en Darkelf, Kóbold oscuro y Enano gris \n[otorga ventaja en las pruebas de percepción cuando no está iluminado o bajo oscuridad mágica] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Añade el modificador DEX a los enemigos Tiro de iniciativa -ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Añade Orden primigenia en el nivel 1 y elimina Competencia en armadura media +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Habilita Orden primigenia en el nivel 1 y elimina Competencia en armadura media ModUi/&AddFighterLevelToIndomitableSavingReroll=Añade el nivel de clase como bonificación a la repetición de la tirada de salvación de Resistencia indomable. ModUi/&AddHumanoidFavoredEnemyToRanger=Habilitar enemigos preferidos humanoides ModUi/&AddNewWeaponsAndRecipesToShops=Añade nuevas armas y recetas a las tiendas [vendas de mano, alabardas, picas, mazas largas, ballestas de mano] [Requiere reinicio] ModUi/&AddPaladinSmiteToggle=Agregar un interruptor para permitir que los Paladines solo habiliten golpes críticos. [útil para minimizar las solicitudes de reacción] ModUi/&AddPersuasionToFighterSkillOptions=Añade Persuasión a las opciones de habilidad en el nivel 1 -ModUi/&AddPickPocketableLoot=Agregar botín que se pueda robar [sugerido si la dote Robar está habilitada] +ModUi/&AddPickPocketableLoot=Añadir botín hurtable [sugerido si la dote Hurto está habilitada] ModUi/&AddToStore=Agregar {0} ModUi/&Advanced=Avanzado: [Requiere reinicio] ModUi/&AdvancedHelp=• ATENCIÓN: Estas configuraciones requerirán que el jugador tenga este mod instalado ModUi/&AllowAllPlayersOnNarrativeSequences=+ Permitir a todos los jugadores en secuencias narrativas -ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permitir que los aliados perciban a GloomStalker cuando están en oscuridad natural +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permitir que los aliados perciban a GloomStalker cuando se encuentran en oscuridad natural ModUi/&AllowAnyClassToWearSylvanArmor=Permitir que cualquier clase use Armadura de Sylvan o Ropa de Portador de Luz -ModUi/&AllowBladeCantripsToUseReach=Permitir que los trucos de espadas utilicen el alcance en lugar de 5 pies +ModUi/&AllowBladeCantripsToUseReach=Permitir que los trucos de espada utilicen alcance en lugar de 5 pies ModUi/&AllowClubsToBeThrown=Permitir que los garrotes se arrojen como dagas o hachas de mano ModUi/&AllowDisplayingNonSuggestedSpells=Permitir hechizos no sugeridos por mods en cada lista ModUi/&AllowDisplayingOfficialSpells=Permitir hechizos oficiales del juego en cada lista -ModUi/&AllowDruidToWearMetalArmor=Permitir que el druida use armadura de metal +ModUi/&AllowDruidToWearMetalArmor=Eliminar las restricciones de Metal Armor ModUi/&AllowDungeonsMaxLevel20=Permitir mazmorras con nivel máximo 20 ModUi/&AllowFlightSuspend=Permitir suspender temporalmente el vuelo de objetos y hechizos [no afecta a las razas voladoras ni a las de forma salvaje] -ModUi/&AllowGadgetsAndPropsToBePlacedAnywhere=Habilite el clic con CTRL para omitir cualquier verificación al colocar dispositivos o accesorios +ModUi/&AllowGadgetsAndPropsToBePlacedAnywhere=Habilite el clic con la tecla CTRL para omitir cualquier verificación al colocar dispositivos o accesorios ModUi/&AllowHasteCasting=Permite lanzar hechizos con acción adicional al estar en modo Acelerado [aún estás limitado a 1 hechizo de acción principal por ronda] ModUi/&AllowHornsOnAllRaces=Permitir cuernos en todas las razas [los resultados pueden verse terribles dependiendo de la raza, la cabeza y el cuerno] ModUi/&AllowMoreRealStateOnRestPanel=Permitir más estado real en el panel de descanso [ocultar las acciones posteriores al descanso en el panel anterior y las funciones de recuperación en el panel posterior] @@ -111,7 +110,7 @@ ModUi/&EnableBardSuperiorInspirationAtLevel18=Habilita Inspiraci ModUi/&EnableBardWordsOfCreationAtLevel20=Habilita Palabras de creación en el nivel 20 ModUi/&EnableBetaContent=Habilitar contenido beta [Requiere reinicio] ModUi/&EnableCancelEditOnRightMouseClick=Habilitar acciones de cancelación con clic derecho del mouse -ModUi/&EnableCantripsTriggeringOnWarMagic=Permitir que los trucos activen el ataque adicional adicional de Magia de guerra +ModUi/&EnableCantripsTriggeringOnWarMagic=Permitir que los trucos activen un ataque adicional adicional de Magia de guerra ModUi/&EnableCharactersOnFireToEmitLight=Los personajes On Fire deben emitir luz [Cubo de luz, Elemental de fuego, Bufón de fuego, Águila pescadora de fuego, Araña de fuego y familia de condición en llamas] ModUi/&EnableCustomPortraits=Habilitar Retratos personalizados ModUi/&EnableCustomPortraitsHelp=• Coloca tus retratos personalizados en las subcarpetas Personal o PreGen, nombradas como el nombre del héroe [es decir: Anton, Celia, Nialla, etc.]\n• Usa imágenes PNG, de 256 x 384 píxeles de tamaño, con una capa de transparencia [usa GIMP para obtener mejores resultados] @@ -137,17 +136,19 @@ ModUi/&EnableLoggingInvalidReferencesInUserCampaigns=Habilitar el registro de re ModUi/&EnableMinInOutAttributes=+ Hacer cumplir los requisitos mínimos de puntuación de habilidad para entrar y salir ModUi/&EnableMonkAbundantKi=Habilita Ki abundante en el nivel 2 [obtienes Ki adicional equivalente a la mitad de la bonificación de competencia redondeada hacia arriba] ModUi/&EnableMonkBodyAndMindToReplacePerfectSelf=Habilita Cuerpo y Mente para reemplazar a Perfección Personal en el nivel 20 -ModUi/&EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack=Habilitar Artes marciales - Golpes sin armas adicionales para que no requieran una acción de ataque antes de su uso +ModUi/&EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack=Habilitar Artes marciales: golpes sin armas adicionales para que no requieran una acción de ataque antes de su uso ModUi/&EnableMonkDoNotRequireAttackActionForFlurry=Habilitar Ráfaga de golpes para que no requiera una acción de ataque antes de su uso ModUi/&EnableMonkFightingStyle=Habilitar la opción Estilo de lucha en el nivel 2 -ModUi/&EnableMonkHandwrapsUseGauntletSlot=Habilite Manos y Guanteletes para que funcionen en la ranura del guantelete +ModUi/&EnableMonkHandwrapsUseGauntletSlot=Habilitar Manos y Guanteletes para que funcionen en la ranura de guantelete ModUi/&EnableMonkHeightenedMetabolism=Habilita Metabolismo acelerado en el nivel 10. [Ráfaga de golpes, Defensa paciente y Paso del viento obtienen beneficios adicionales] ModUi/&EnableMonkImprovedUnarmoredMovementToMoveOnTheWall=Habilite Movimiento sin armadura mejorado para moverse por superficies verticales sin caerse ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Habilita Defensa superior para reemplazar Cuerpo vacío en el nivel 18 ModUi/&EnableMonkWeaponSpecialization=Habilita la Especialización en armas en los niveles 2 y 11 [el tipo de arma seleccionado se convierte en un arma de monje para ti] ModUi/&EnableMulticlass=Habilitar multiclase [Requiere reinicio] ModUi/&EnableOneDnDPreparedSpellsTables=Permitir que todos los lanzadores de conjuros utilicen las nuevas tablas de conjuros preparadas [Bardo, Clérigo, Druida, Paladín, Explorador, Hechicero, Mago] -ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar la mejora de dados de curación en Curar heridas, Palabra de curación, Curar heridas en masa y Palabra de curación en masa +ModUi/&EnableOneDndBarkskinSpell=Habilitar la versión del hechizo Corteza 5e 2024 [acción adicional, sin concentración, CA establecida en 17] +ModUi/&EnableOneDndGuidanceSpell=Habilitar Orientación versión del hechizo 5e 2024 [Elige una habilidad al lanzar y obtén una bonificación por hasta 1 minuto.] +ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar los hechizos Curar heridas, Palabra de sanación, Curar heridas en masa y Palabra de sanación en masa de la versión 5e 2024 ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Imposición de manos como acción adicional ModUi/&EnablePaladinSmiteAsBonusAction=Habilitar Castigar como acción adicional ModUi/&EnablePaladinSpellCastingAtLevel1=Habilitar el lanzamiento de hechizos en el nivel 1 en lugar del 2 @@ -170,7 +171,7 @@ ModUi/&EnableSorcererQuickenedAction=Habilitar la acción Hechizo ModUi/&EnableSortingDungeonMakerAssets=Habilitar la clasificación de activos en el editor de Dungeon Maker ModUi/&EnableStatsOnHeroTooltip=Mostrar estadísticas en la información sobre herramientas del héroe [es decir: golpes críticos, fallos críticos, etc.] ModUi/&EnableSumD20OnAlternateVotingSystem=+ Además, cada héroe suma un D20 en la tirada para darle un poco de aleatoriedad. [peso de la elección = votos * modificador de Carisma del héroe + tirada del D20] -ModUi/&EnableSurprisedToEnforceDisadvantage=Habilite la condición Sorprendido para imponer una desventaja de iniciativa en lugar de saltarse una ronda +ModUi/&EnableSurprisedToEnforceDisadvantage=Habilite la condición Sorprendido para imponer una desventaja de iniciativa en lugar de omitir una ronda ModUi/&EnableTeleportToRemoveRestrained=Habilite Teletransporte para eliminar todas las condiciones restringidas del objetivo ModUi/&EnableTooltipDistance=Habilitar la visualización de la distancia en las descripciones emergentes al pasar el cursor sobre un personaje en combate ModUi/&EnableUnarmedMainAttackAction=Habilitar la acción Ataque desarmado [si el actor tiene un arma en el personaje principal, es un Monje o tiene vendas o guanteletes equipados] @@ -179,7 +180,7 @@ ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posición de va ModUi/&EnableWarlockMagicalCunningAtLevel2=Habilita Astucia mágica en el nivel 2 ModUi/&EnableWizardToLearnScholarAtLevel2=Habilitar Scholar en el nivel 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Habilitar Escuela de Magia en el nivel 3 en lugar de 2 -ModUi/&EnablesAsiAndFeat=Habilitar tanto el aumento de las puntuaciones de atributos como la selección de dotes [en lugar de una elección exclusiva] +ModUi/&EnablesAsiAndFeat=Habilitar el aumento de las puntuaciones de atributos y la selección de dotes [en lugar de una elección exclusiva] ModUi/&EncounterPercentageChance=Establecer porcentajes de posibilidades de encuentros aleatorios ModUi/&Encounters=Encuentros ModUi/&EnemiesAlwaysRollInitiative=+ Los enemigos siempre tiran iniciativa en lugar de un valor forzado [es decir: Asesino Sorak] @@ -208,7 +209,7 @@ ModUi/&Gameplay=Jugabilidad ModUi/&General=General: ModUi/&GeneralMenu=General ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Otorga la especialización en armas a los bardos y a los pícaros -ModUi/&GridSelectedColor=Cambiar el movimiento color de la cuadrícula +ModUi/&GridSelectedColor=Cambiar el movimiento color de la cuadrícula ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Ocultar los efectos visuales de las salidas y los teletransportadores si aún no se han descubierto ModUi/&HideMonsterHitPoints=Muestra la salud de los monstruos en pasos de 25% / 50% / 75% / 100% en lugar de puntos de vida exactos. ModUi/&HideQuickenedActionWhenMetamagicOff=+ Ocultar esta acción cuando la opción metamágica esté desactivada @@ -217,7 +218,7 @@ ModUi/&HighContrastTargetingSingleColor=Cambiar criaturas individuales identificar objetos mágicos durante un descanso corto o largo. ModUi/&IgnoreHandXbowFreeHandRequirements=No se requiere mano libre para utilizar Ballestas de mano ModUi/&IllusionSpellsAutomaticallyFailAgainstTrueSightInRange=Los hechizos de ilusión fallan automáticamente contra objetivos con TrueSight dentro del alcance. -ModUi/&IncreaseGameTimeBy=Aumenta el tiempo de juego en +ModUi/&IncreaseGameTimeBy=Aumenta el tiempo de juego mediante ModUi/&IncreaseMaxAttunedItems=Aumenta el máximo de Elementos armonizados a 4 en el nivel 10 y a 5 en el nivel 18. ModUi/&Invocations=Invocaciones ModUi/&Items=Artículos: @@ -259,14 +260,14 @@ ModUi/&Races=Razas ModUi/&RecipeCost=Costo de la receta ModUi/&RelicForgeries=Falsificaciones de reliquias ModUi/&RemoveAttunementRequirements=Eliminar requisitos de sintonización [Requiere reinicio] -ModUi/&RemoveBardMagicalSecretAt14And18=Eliminar Secreto Mágico en 14 y 18 -ModUi/&RemoveBardSongOfRest=Eliminar Canción de descanso en el nivel 2 +ModUi/&RemoveBardMagicalSecretAt14And18=Elimina Secreto mágico en los niveles 14 y 18 +ModUi/&RemoveBardSongOfRestAt2=Eliminar Canción de descanso en el nivel 2 ModUi/&RemoveBugVisualModels=Reemplaza los modelos tipo araña por modelos tipo oso en el juego. [arachnophobia] [Requiere reinicio] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Eliminar filtro humanoide en Risas espantosas ModUi/&RemoveRecurringEffectOnEntangle=Solo aplica el efecto Enredar en el momento del lanzamiento y también fuerza una prueba de fuerza para liberarte de las enredaderas. ModUi/&RemoveRogueBlindSense=Elimina el Sentido ciego en el nivel 14 -ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Eliminar las restricciones escolares de Shadowcaster -ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Eliminar las restricciones escolares de Spellblade +ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Eliminar las restricciones escolares de Shadowcaster +ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Eliminar las restricciones escolares de Spellblade ModUi/&RestockAntiquarians=Reposición de Anticuarios [Halman Summer] ModUi/&RestockArcaneum=Reposición de Arcaneum [Heddlon Surespell] ModUi/&RestockCircleOfDanantar=Reposición del Círculo de Danantar [Joriel Foxeye] @@ -308,15 +309,13 @@ ModUi/&StockHugoStoreWithAdditionalFoci=Llena la tienda de Hugo con Subclases ModUi/&Subraces=Subrazas ModUi/&SwapAbjurationSavant=Intercambia Abjurador Sabio de la abjuración con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de espacio] -ModUi/&SwapCraftedItemAndRecipeIcons=+ Intercambia íconos de recetas y objetos elaborados en la tiendaModUi/&SwapEvocationSavant=Intercambia Evocador Sabio de la evocación con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de ranura] -ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Cambia la competencia con armas por la versión 5e 2024 [armas simples en lugar de tipos de armas pero pierdes la competencia con cimitarra] -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Intercambia las características de Evocador, Hechizos de escultura y Truco potente +ModUi/&SwapCraftedItemAndRecipeIcons=+ Intercambia íconos de recetas y objetos elaborados en la tienda +ModUi/&SwapDruidToUseOneDndWeaponProficiency=Habilita la competencia en Armas simples [en lugar de tipos de armas individuales pero pierdes la competencia en Cimitarra] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Intercambia Evocador, hechizos de escultura y truco potente al progresar. ModUi/&SwapEvocationSavant=Intercambia Evocador Sabio de la evocación con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de ranura] -ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Cambia Ataque desarmado para usar la progresión de tipo de dado de 5e 2024 -ModUi/&EnableOneDndBarkskinSpell=Intercambia Piel de corteza con la versión 5e 2024 [acción adicional, sin concentración, CA establecida en 17] -ModUi/&EnableOneDndGuidanceSpell=Intercambia Orientación con la versión 5e 2024 [Elige una habilidad al lanzar hechizos y obtén una bonificación de hasta 1 minuto.] -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Cambia Second Wind para usar la progresión de usos de 5e 2024 -ModUi/&SwapWarlockToUseOneDndInvocationProgression=Intercambia la progresión de Invocaciones con la versión 5e 2024 +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Habilite Ataque desarmado para usar la progresión de tipo de dado 5e 2024 +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Habilitar Second Wind para usar la progresión de usos de 5e 2024 +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Habilitar Invocaciones para usar la progresión 5e 2024 ModUi/&TableTopButton=Seleccionar contenido de Tabletop ModUi/&TableTopHelp1=• Las siguientes secciones reagrupan y duplican las configuraciones de 5e 2014 y 2024 esparcidas por el mod para tu conveniencia. ModUi/&TableTopHelp2=• Presiona el botón para seleccionar solo contenido de mesa en la pestaña Personaje y selecciona todas las opciones a continuación para una verdadera experiencia TT @@ -344,4 +343,4 @@ ModUi/&UseOfficialFoodRationsWeight=Habilitar ración de alimento ModUi/&UseOfficialObscurementRules=Habilitar las reglas de combate de iluminación, oscurecimiento y visión ModUi/&UseOfficialObscurementRulesHelp=[el atacante que percibe al defensor que no puede percibirlo obtiene ADV, y el atacante que no percibe al defensor que puede percibirlo obtiene DIS\n las áreas muy oscurecidas infligen condición de ceguera, donde las tiradas de ataque contra la criatura tienen ADV, y las tiradas de ataque de la criatura tienen DIS\n todos los hechizos de distancia dirigidos a individuos no se pueden lanzar si el atacante no tiene vista, excepto los que claramente no indican que se requiere vista] ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=Permitir que las razas pequeñas tengan desventaja al manejar armas pesadas -ModUi/&WildSurgeDieRollThreshold=Establecer umbral de dados de probabilidad de Magia salvaje de hechicero: +ModUi/&WildSurgeDieRollThreshold=Establecer umbral de dados de probabilidad de Magia salvaje de hechicero:<99}[la oleada salvaje se activa si los resultados son menores o iguales al umbral] diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index d766b7ad3a..00cf4cbab3 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -88,6 +88,7 @@ Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=Vous avez un avantage Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=Perception des ténèbres Feature/&AlwaysBeardDescription={0}% de chances de faire pousser une barbe glorieuse ! Feature/&AncestryLevelUpDraconicDescription=Votre ascendance draconique vous donne une affinité avec le type de dégâts {0}. +Feature/&AttackModifierMonkMartialArtsExtendedDescription=Vous pouvez lancer un d6 à la place des dégâts normaux de votre attaque à mains nues ou de votre arme de moine lorsque vous ne portez pas d'armure ou de bouclier. Ce dé change à mesure que vous gagnez des niveaux de moine (d8 au niveau 5, d10 au niveau 11). Vous pouvez utiliser la dextérité au lieu de la force pour les jets d'attaque et de dégâts de vos attaques à mains nues et de vos armes de moine. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusDescription=Vous pouvez effectuer une attaque non armée en tant qu'action bonus. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=Arts martiaux - Bonus de frappe à mains nues Feature/&AttributeModifierDazzledTitle=Ébloui @@ -197,8 +198,6 @@ Feature/&PowerTeleportSummonDescription=Vous pouvez vous téléporter à n'impor Feature/&PowerTeleportSummonTitle=Téléportation Feature/&PowerVanishSummonDescription=Vous pouvez faire disparaître votre invocation. Feature/&PowerVanishSummonTitle=Disparaître -Feature/&PowerWarlockMagicalCunningDescription=Vous pouvez utiliser votre action bonus pour récupérer un nombre d'emplacements de pacte dépensés ne dépassant pas la moitié de votre maximum (arrondir à l'entier supérieur). Une fois que vous avez utilisé cette fonctionnalité, vous ne pouvez plus le faire avant d'avoir terminé un repos long. -Feature/&PowerWarlockMagicalCunningTitle=Ruse magique Feature/&ToolGainChoicesPluralDescription=Choisissez {0} de ces outils : {1} Feature/&ToolGainChoicesSingleDescription=Choisissez l'un de ces outils : {1} Feature/&VisionBlindsightDescription=Vous avez la vision aveugle. @@ -349,8 +348,6 @@ Tooltip/&PreReqMustKnow=A savoir {0} Tooltip/&Tag9000Title=Effet personnalisé Tooltip/&TagDamageChaosBoltTitle=Dégâts chaotiques Tooltip/&TagUnfinishedBusinessTitle=Inachevé -Tooltip/&TargetMustNotBeSurprised=La cible ne doit pas être surprise -Tooltip/&TargetMustUnderstandYou=La cible doit comprendre votre commande UI/&CustomFeatureSelectionStageDescription=Sélectionnez des fonctionnalités supplémentaires pour votre classe/sous-classe. UI/&CustomFeatureSelectionStageFeatures=Caractéristiques UI/&CustomFeatureSelectionStageNotDone=Vous devez sélectionner toutes les fonctionnalités disponibles avant de continuer diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 4e28d29370..3946ff684a 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -5,31 +5,31 @@ ModUi/&AddBleedingToLesserRestoration=Ajoutez la condition Saigne ModUi/&AddCustomIconsToOfficialItems=Ajoutez des icônes personnalisées aux éléments de jeu officiels [munitions, recettes, kits, etc.] [Nécessite un redémarrage] ModUi/&AddDarknessPerceptiveToDarkRaces=Activez la Perception des Ténèbres sur Darkelf, Dark Kobold et Gray Dwarf \n[accorde un avantage aux tests de perception lorsqu'il n'est pas éclairé ou sous l'obscurité magique] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Ajoutez un modificateur DEX aux ennemis Initiative Roll -ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Ajoutez Ordre primordial au niveau 1 et supprimez Maîtrise de l'armure moyenne +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Activez Ordre primordial au niveau 1 et supprimez la Maîtrise de l'armure moyenne ModUi/&AddFighterLevelToIndomitableSavingReroll=Ajoutez le niveau de classe comme bonus à la relance du jet de sauvegarde de Résistance indomptable ModUi/&AddHumanoidFavoredEnemyToRanger=Activer les ennemis préférés des humanoïdes ModUi/&AddNewWeaponsAndRecipesToShops=Ajoutez de nouvelles armes et recettes aux magasins [bandages de main, hallebardes, piques, longues masses, arbalètes à main] [Nécessite un redémarrage] -ModUi/&AddPaladinSmiteToggle=Ajoutez une option permettant aux paladins d'activer uniquement les coups critiques [utile pour minimiser les invites de réaction] +ModUi/&AddPaladinSmiteToggle=Ajoutez une option pour permettre aux paladins d'activer uniquement les coups critiques [utile pour minimiser les invites de réaction] ModUi/&AddPersuasionToFighterSkillOptions=Ajoutez Persuasion aux options de compétence au niveau 1 ModUi/&AddPickPocketableLoot=Ajouter un butin pouvant être volé à la tire [suggéré si l'exploit Pickpocket est activé] ModUi/&AddToStore=Ajouter {0} ModUi/&Advanced=Avancé : [Nécessite un redémarrage] ModUi/&AdvancedHelp=• ATTENTION : Ces paramètres nécessiteront que le joueur ait installé ce mod ModUi/&AllowAllPlayersOnNarrativeSequences=+ Autoriser tous les joueurs sur les séquences narratives -ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permettre aux alliés de percevoir GloomStalker lorsqu'ils sont dans l'obscurité naturelle +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permettre aux alliés de percevoir GloomStalker lorsqu'ils sont dans l'obscurité naturelle ModUi/&AllowAnyClassToWearSylvanArmor=Autoriser n'importe quelle classe à porter une armure sylvestre ou des vêtements de porteur de lumière -ModUi/&AllowBladeCantripsToUseReach=Autoriser les sorties de lame à utiliser la portée au lieu de 5 pieds +ModUi/&AllowBladeCantripsToUseReach=Autoriser les sorties de lame à utiliser la portée au lieu de 1,50 m ModUi/&AllowClubsToBeThrown=Autoriser les matraques à être lancées comme des dagues ou des haches à main ModUi/&AllowDisplayingNonSuggestedSpells=Autoriser les sorts non suggérés par le mod sur chaque liste ModUi/&AllowDisplayingOfficialSpells=Autoriser les sorts officiels du jeu sur chaque liste -ModUi/&AllowDruidToWearMetalArmor=Autoriser le Druide à porter une armure en métal +ModUi/&AllowDruidToWearMetalArmor=Supprimer les restrictions de Armure métallique ModUi/&AllowDungeonsMaxLevel20=Autoriser les donjons avec un niveau maximum de 20 ModUi/&AllowFlightSuspend=Autoriser la suspension temporaire du vol des objets et des sorts [n'affecte pas les races de forme sauvage ou volantes] ModUi/&AllowGadgetsAndPropsToBePlacedAnywhere=Activez le clic CTRL pour contourner toute vérification lors du placement de gadgets ou d'accessoires ModUi/&AllowHasteCasting=Autoriser le lancement de sorts avec une action supplémentaire en étant accéléré [vous êtes toujours limité à 1 sort d'action principale par tour] ModUi/&AllowHornsOnAllRaces=Autoriser les cornes sur toutes les races [les résultats peuvent être terribles selon la race, la tête et la corne] ModUi/&AllowMoreRealStateOnRestPanel=Autoriser plus d'état réel sur le panneau de repos [masquer les actions après le repos sur le panneau avant et les fonctions de récupération sur le panneau après] -ModUi/&AllowStackedMaterialComponent=Autoriser les composants de matériaux empilés [par exemple, 2x500gp de diamant équivalent à 1000gp de diamant] +ModUi/&AllowStackedMaterialComponent=Autoriser les composants de matériaux empilés [par exemple, 2x500gp diamant équivaut à 1000gp diamant] ModUi/&AllowTargetingSelectionWhenCastingChainLightningSpell=Autoriser la sélection de la cible lors du lancement du sort Chaîne d'éclairs ModUi/&AltOnlyHighlightItemsInPartyFieldOfView=La touche ALT met en surbrillance uniquement les gadgets dans le champ de vision du groupe [donjons personnalisés uniquement] ModUi/&ArcaneShieldstaffOptions=Autoriser l'harmonisation de Arcane Shieldstaff avec n'importe quelle classe @@ -93,7 +93,7 @@ ModUi/&DungeonMaker=Créateur de donjons ModUi/&DungeonMakerBasicHelp=• Ces paramètres ne nécessiteront pas que le joueur ait installé ce mod ModUi/&Effects=Effets ModUi/&EnableActionSwitching=Activer la barre de changement d'action [utile pour avoir un contrôle total sur votre séquence d'actions] -ModUi/&EnableAdditionalBackstoryDisplay=Activer l'affichage d'une histoire supplémentaire lors de l'inspection en arrière-plan +ModUi/&EnableAdditionalBackstoryDisplay=Activer l'affichage d'une trame de fond supplémentaire lors de l'inspection en arrière-plan ModUi/&EnableAdditionalIconsOnLevelMap=Activer des icônes supplémentaires pour les camps, les sorties et les téléporteurs sur la carte des niveaux ModUi/&EnableAdditionalItemsInDungeonMaker=Ajouter des éléments modifiés à l'éditeur ModUi/&EnableAlternateHuman=Activer l'Humain alternatif [+1 don / +2 choix d'attributs / +1 compétence] @@ -139,14 +139,16 @@ ModUi/&EnableMonkBodyAndMindToReplacePerfectSelf=Activez Corps et ModUi/&EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack=Activez Arts martiaux - Bonus de frappes à mains nues pour ne pas nécessiter d'action d'attaque avant utilisation ModUi/&EnableMonkDoNotRequireAttackActionForFlurry=Activez Flurry of Blows pour ne pas nécessiter d'action d'attaque avant utilisation ModUi/&EnableMonkFightingStyle=Activer le choix du Style de combat au niveau 2 -ModUi/&EnableMonkHandwrapsUseGauntletSlot=Activez les bandages et les gantelets pour qu'ils fonctionnent dans l'emplacement des gantelets +ModUi/&EnableMonkHandwrapsUseGauntletSlot=Activer les bandages et les gantelets pour fonctionner dans l'emplacement du gantelet ModUi/&EnableMonkHeightenedMetabolism=Activez le Métabolisme renforcé au niveau 10 [Rafale de coups, Défense patiente et Pas du vent gagnent des avantages supplémentaires] ModUi/&EnableMonkImprovedUnarmoredMovementToMoveOnTheWall=Activez Mouvement sans armure amélioré pour vous déplacer le long des surfaces verticales sans tomber ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Activez la Défense supérieure pour remplacer le Corps vide au niveau 18 ModUi/&EnableMonkWeaponSpecialization=Activez la spécialisation des armes aux niveaux 2 et 11 [le type d'arme sélectionné devient une arme de moine pour vous] ModUi/&EnableMulticlass=Activer multiclasse [Nécessite un redémarrage] ModUi/&EnableOneDnDPreparedSpellsTables=Permettre à tous les lanceurs de sorts d'utiliser les nouvelles tables de sorts préparés [Barde, Clerc, Druide, Paladin, Rôdeur, Sorcier, Magicien] -ModUi/&EnableOneDndHealingSpellsUpgrade=Activer le buff des dés de soin sur Soin des blessures, Mot de soin, Soin de masse des blessures et Mot de soin de masse +ModUi/&EnableOneDndBarkskinSpell=Activer Écorce 5e 2024 version du sort [action bonus, pas de concentration, CA fixée à 17] +ModUi/&EnableOneDndGuidanceSpell=Activer Guidage 5e version du sort 2024 [Choisissez une compétence au lancement et obtenez un bonus jusqu'à 1 minute.] +ModUi/&EnableOneDndHealingSpellsUpgrade=Activer les sorts Soin des blessures, Mot de guérison, Soin de masse des blessures et Mot de guérison de masse version 5e 2024 ModUi/&EnablePaladinLayOnHandsAsBonusAction=Activer Imposition des mains comme action bonus ModUi/&EnablePaladinSmiteAsBonusAction=Activer Smite comme action bonus ModUi/&EnablePaladinSpellCastingAtLevel1=Activer le lancement de sorts au niveau 1 au lieu de 2 @@ -202,7 +204,7 @@ ModUi/&FormationHelp3=• Cliquez sur 2 boutons pour échanger leurs positions ModUi/&FormationResetAllSets=Réinitialiser tout ModUi/&FormationResetThisSet=Réinitialiser ceci ModUi/&FormationSelected=Ensemble de formation {0} sélectionné -ModUi/&FullyControlConjurations=Contrôlez entièrement les invocations [animaux, élémentaux, etc.] +ModUi/&FullyControlConjurations=Contrôlez entièrement les conjurations [animaux, élémentaires, etc.] ModUi/&Gameplay=Gameplay ModUi/&General=Général : ModUi/&GeneralMenu=Général @@ -217,7 +219,7 @@ ModUi/&IdentifyAfterRest=Ajoutez un pouvoir pour identifier les o ModUi/&IgnoreHandXbowFreeHandRequirements=Ne nécessite pas de main libre pour utiliser les arbalètes à main ModUi/&IllusionSpellsAutomaticallyFailAgainstTrueSightInRange=Les sorts d'illusion échouent automatiquement contre les cibles ayant TrueSight à portée ModUi/&IncreaseGameTimeBy=Augmenter le temps de jeu de -ModUi/&IncreaseMaxAttunedItems=Augmentez le nombre maximum d'objets harmonisés à 4 au niveau 10 et à 5 au niveau 18 +ModUi/&IncreaseMaxAttunedItems=Augmentez le nombre maximum d'objets accordés à 4 au niveau 10 et à 5 au niveau 18 ModUi/&Invocations=Invocations ModUi/&Items=Articles : ModUi/&ItemsHelp1=Ouvrez l'écran d'inspection des personnages pour ajouter des objets aux héros... @@ -229,7 +231,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Marquez également l'emplacement ModUi/&MaxAllowedClasses=Nombre maximal de cours autorisés ModUi/&Merchants=Commerçants : ModUi/&Metamagic=Métamagie -ModUi/&ModifyGravitySlam=Modifier le sort Gravity Slam pour tirer les cibles affectées vers le bas et être un cylindre au lieu d'une sphère\n[nécessite l'activation des effets de mouvement de poussée et de traction pour fonctionner sur l'axe haut/bas] +ModUi/&ModifyGravitySlam=Modifier le sort Gravity Slam pour attirer les cibles affectées vers le bas et être un cylindre au lieu d'une sphère\n[nécessite l'activation des effets de mouvement de poussée et de traction pour fonctionner sur l'axe haut/bas] ModUi/&MovementGridWidthModifier=Multipliez la largeur de la grille de mouvement par [%] ModUi/&MulticlassKeyHelp=SHIFT cliquez sur un sort pour inverser le type d'emplacement de répertoire par défaut consommé\n[Warlock dépense des emplacements de sorts blancs et les autres dépensent des emplacements de sorts verts de pacte] ModUi/&Multiplayer=Multijoueur : @@ -258,17 +260,17 @@ ModUi/&Races=Les courses ModUi/&RecipeCost=Coût de la recette ModUi/&RelicForgeries=Contrefaçons de reliques ModUi/&RemoveAttunementRequirements=Supprimer les exigences d'harmonisation [Nécessite un redémarrage] -ModUi/&RemoveBardMagicalSecretAt14And18=Supprimer Secret magique à 14 et 18 -ModUi/&RemoveBardSongOfRest=Supprimez Chant de repos au niveau 2 +ModUi/&RemoveBardMagicalSecretAt14And18=Supprimez le secret magique aux niveaux 14 et 18 +ModUi/&RemoveBardSongOfRestAt2=Supprimez Chant de repos au niveau 2 ModUi/&RemoveBugVisualModels=Remplacez les modèles ressemblant à des araignées par des modèles ressemblant à des ours dans le jeu [arachnophobie] [Nécessite un redémarrage] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Supprimer le filtre humanoïde sur Hideous Laugher ModUi/&RemoveRecurringEffectOnEntangle=Appliquez uniquement l'effet Enchevêtrement au moment de l'incantation et forcez également un test de force pour vous libérer des vignes ModUi/&RemoveRogueBlindSense=Supprimez Blind Sense au niveau 14 -ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Supprimer les restrictions scolaires de Shadowcaster -ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Supprimer les restrictions scolaires de Spellblade +ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Supprimer les restrictions scolaires de Shadowcaster +ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Supprimer les restrictions scolaires de Spellblade ModUi/&RestockAntiquarians=Réapprovisionner les antiquaires [Halman Summer] ModUi/&RestockArcaneum=Réapprovisionner Arcaneum [Sort de sûreté Heddlon] -ModUi/&RestockCircleOfDanantar=Réapprovisionner le Cercle de Danantar [Joriel Foxeye] +ModUi/&RestockCircleOfDanantar=Cercle de réapprovisionnement de Danantar [Joriel Foxeye] ModUi/&RestockHelp=• Remplacer les valeurs par défaut pour forcer le réapprovisionnement de tous les stocks des marchands au fil du temps [à l'exception des manuels et des tomes]\n• Notez que certains objets peuvent prendre jusqu'à 7 jours de jeu pour être réapprovisionnés ModUi/&RestockTowerOfKnowledge=Réapprovisionner la Tour de la Connaissance [Maddy Greenisle] ModUi/&Rollback=Retour en arrière @@ -307,15 +309,13 @@ ModUi/&StockHugoStoreWithAdditionalFoci=Remplissez la boutique Hugo avec le Sous-classes ModUi/&Subraces=Sous-races ModUi/&SwapAbjurationSavant=Échangez Abjurer Abjuration Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] -ModUi/&SwapCraftedItemAndRecipeIcons=+ Échangez les icônes de recettes et d'objets fabriqués dans la boutiqueModUi/&SwapEvocationSavant=Échangez Evoker Evocation Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] -ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Échangez Maîtrise des armes avec la version 5e 2024 [armes simples au lieu de types d'armes mais vous perdez la maîtrise du cimeterre] -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Échangez les fonctionnalités Sculpt Spells d'Evoker et Potent Cantrip +ModUi/&SwapCraftedItemAndRecipeIcons=+ Échangez les icônes de recettes et d'objets fabriqués dans la boutique +ModUi/&SwapDruidToUseOneDndWeaponProficiency=Activer la maîtrise des armes simples [au lieu des types d'armes individuels, mais vous perdez la maîtrise du cimeterre] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Échangez les sorts de sculpture de l'évocateur et le sort de cantrip puissant au fil de la progression ModUi/&SwapEvocationSavant=Échangez Evoker Evocation Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] -ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Remplacez Attaque non armée par la progression du type de dé 5e 2024 -ModUi/&EnableOneDndBarkskinSpell=Échangez Barkskin avec la version 5e 2024 [action bonus, pas de concentration, CA réglée à 17] -ModUi/&EnableOneDndGuidanceSpell=Échangez Guidage avec la version 5e 2024 [Choisissez une compétence au lancement et obtenez un bonus jusqu'à 1 minute.] -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Remplacez Second Wind pour utiliser la progression des utilisations 5e 2024 -ModUi/&SwapWarlockToUseOneDndInvocationProgression=Échangez la progression des Invocations avec la version 5e 2024 +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Activez Attaque non armée pour utiliser la progression du type de dé 5e 2024 +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Activez Second Wind pour utiliser la progression des utilisations 5e 2024 +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Activez les invocations pour utiliser la progression 5e 2024 ModUi/&TableTopButton=Sélectionnez le contenu de la table ModUi/&TableTopHelp1=• Les sections suivantes regroupent et dupliquent les paramètres 5e 2014 et 2024 dispersés dans le mod pour votre commodité ModUi/&TableTopHelp2=• Appuyez sur le bouton pour sélectionner uniquement le contenu de table sous l'onglet Personnage et sélectionnez toutes les options ci-dessous pour une véritable expérience TT @@ -335,7 +335,7 @@ ModUi/&UseElfFaceModelsOnTieflings=Utilisez les modèles de visage Tentacules noirs, Enchevêtrement, Graisse [carré] ou Croissance en pointes [rond] ModUi/&UseMathFlankingRules=+ Utilisez des mathématiques précises pour déterminer le flanquement [peut avoir un impact sur les performances sur les machines lentes] ModUi/&UseOfficialAdvantageDisadvantageRules=Activer les règles avantage / désavantage [si les circonstances font qu'un jet a les deux, vous êtes considéré comme n'ayant aucun des deux] -ModUi/&UseOfficialFlankingRules=Activer les règles de flanking [un attaquant a l'avantage si un allié est du côté opposé à la cible] +ModUi/&UseOfficialFlankingRules=Activer les règles de flanquement [un attaquant a l'avantage si un allié est du côté opposé à la cible] ModUi/&UseOfficialFlankingRulesAlsoForRanged=+ Activer également pour les attaques à distance [désactiver les calculs précis] ModUi/&UseOfficialFlankingRulesAlsoForReach=+ Activer également les attaques de portée [désactiver les calculs précis] ModUi/&UseOfficialFlankingRulesButAddAttackModifier=+ Au lieu d'un avantage, accordez +1 au jet d'attaque diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index bba869d7b1..62d958ffcb 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -88,6 +88,7 @@ Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=Hai Vantaggio nelle p Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=Percezione dell'oscurità Feature/&AlwaysBeardDescription={0}% di possibilità di farti crescere una barba gloriosa! Feature/&AncestryLevelUpDraconicDescription=La tua discendenza draconica ti conferisce un'affinità con il tipo di danno {0}. +Feature/&AttackModifierMonkMartialArtsExtendedDescription=Puoi tirare un d6 al posto del danno normale del tuo colpo senz'armi o arma da monaco mentre non indossi alcuna armatura o scudo. Questo dado cambia man mano che guadagni livelli da monaco (d8 al 5° livello, d10 all'11° livello). Puoi usare la destrezza al posto della forza per i tiri per colpire e per i danni dei tuoi colpi senz'armi e delle tue armi da monaco. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusDescription=Puoi effettuare un colpo senz'armi come azione bonus. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=Arti marziali - Bonus colpo senza armi Feature/&AttributeModifierDazzledTitle=Abbagliato @@ -197,8 +198,6 @@ Feature/&PowerTeleportSummonDescription=Puoi teletrasportarti in qualsiasi luogo Feature/&PowerTeleportSummonTitle=Teletrasporto Feature/&PowerVanishSummonDescription=Puoi far svanire la tua evocazione. Feature/&PowerVanishSummonTitle=Svanire -Feature/&PowerWarlockMagicalCunningDescription=Puoi usare la tua azione bonus per recuperare un numero di slot patto spesi non superiore alla metà del tuo massimo (arrotondato per eccesso). Una volta usata questa caratteristica, non puoi più farlo finché non finisci un riposo lungo. -Feature/&PowerWarlockMagicalCunningTitle=Astuzia magica Feature/&ToolGainChoicesPluralDescription=Scegli {0} di questi strumenti: {1} Feature/&ToolGainChoicesSingleDescription=Scegli uno di questi strumenti: {1} Feature/&VisionBlindsightDescription=Hai la vista cieca. @@ -349,8 +348,6 @@ Tooltip/&PreReqMustKnow=Bisogna sapere {0} Tooltip/&Tag9000Title=Effetto personalizzato Tooltip/&TagDamageChaosBoltTitle=Danno caotico Tooltip/&TagUnfinishedBusinessTitle=Lavoro incompleto -Tooltip/&TargetMustNotBeSurprised=Il bersaglio non deve essere sorpreso -Tooltip/&TargetMustUnderstandYou=Il bersaglio deve capire il tuo comando UI/&CustomFeatureSelectionStageDescription=Seleziona funzionalità extra per la tua classe/sottoclasse. UI/&CustomFeatureSelectionStageFeatures=Caratteristiche UI/&CustomFeatureSelectionStageNotDone=È necessario selezionare tutte le funzionalità disponibili prima di procedere diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 7c1bbdb860..3833010701 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -5,7 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Aggiungi la condizione Sang ModUi/&AddCustomIconsToOfficialItems=Aggiungi icone personalizzate agli oggetti di gioco ufficiali [munizioni, ricette, kit, ecc.] [Richiede il riavvio] ModUi/&AddDarknessPerceptiveToDarkRaces=Abilita Percezione dell'oscurità su Elfo scuro, Kobold oscuro e Nano grigio \n[concede vantaggio sui controlli di percezione quando non è illuminato o sotto oscurità magica] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Aggiungi modificatore DEX al tiro di iniziativa dei nemici -ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Aggiungi Ordine Primordiale al livello 1 e rimuovi Competenza in Armatura Media +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Abilita Ordine Primordiale al livello 1 e rimuovi Competenza in Armatura Media ModUi/&AddFighterLevelToIndomitableSavingReroll=Aggiungere il livello di classe come bonus al tiro salvezza ripetuto di Resistenza indomabile. ModUi/&AddHumanoidFavoredEnemyToRanger=Abilita i nemici preferiti Umanoidi ModUi/&AddNewWeaponsAndRecipesToShops=Aggiungi nuove armi e ricette ai negozi [fasce per le mani, alabarde, picche, mazze lunghe, balestre a mano] [Richiede riavvio] @@ -16,13 +16,13 @@ ModUi/&AddToStore=Aggiungi {0} ModUi/&Advanced=Avanzato: [Richiede riavvio] ModUi/&AdvancedHelp=• ATTENZIONE: Queste impostazioni richiederanno che il giocatore abbia installato questa mod ModUi/&AllowAllPlayersOnNarrativeSequences=+ Consenti a tutti i giocatori di partecipare alle sequenze narrative -ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Consenti agli alleati di percepire GloomStalker quando si trovano nell'oscurità naturale +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Consenti agli alleati di percepire GloomStalker quando si trovano nell'oscurità naturale ModUi/&AllowAnyClassToWearSylvanArmor=Consenti a qualsiasi classe di indossare Armatura silvana o Vestiti del Portatore di Luce ModUi/&AllowBladeCantripsToUseReach=Consenti a Trucchetti Lama di usare la portata invece di 5 piedi ModUi/&AllowClubsToBeThrown=Consentire che i mazze vengano lanciati come pugnali o asce ModUi/&AllowDisplayingNonSuggestedSpells=Consenti mod incantesimi non suggeriti in ogni elenco ModUi/&AllowDisplayingOfficialSpells=Consenti incantesimi ufficiali di gioco su ogni elenco -ModUi/&AllowDruidToWearMetalArmor=Consenti al Druido di indossare un'armatura di metallo +ModUi/&AllowDruidToWearMetalArmor=Rimuovi le restrizioni per Armatura metallica ModUi/&AllowDungeonsMaxLevel20=Consenti dungeon con livello massimo 20 ModUi/&AllowFlightSuspend=Consenti la sospensione temporanea del volo da oggetti e incantesimi [non influisce sulle razze di forma selvaggia o volanti] ModUi/&AllowGadgetsAndPropsToBePlacedAnywhere=Abilita il clic CTRL per ignorare qualsiasi controllo quando si posizionano gadget o oggetti di scena @@ -67,7 +67,7 @@ ModUi/&DisableCastSpellPreRequisitesOnModFeats=Disabilita i prerequisiti per lan ModUi/&DisableClassPrerequisitesOnModFeats=Disattiva i prerequisiti di livello per imprese ModUi/&DisableMultilineSpellOffering=Disabilita l'offerta di incantesimi multi-linea sulla barra delle azioni [principalmente per gli utenti controller che usano eroi non multicaster] ModUi/&DisableRacePrerequisitesOnModFeats=Disattiva i prerequisiti di razza per le imprese -ModUi/&DisableSenseDarkVisionFromAllRaces=Disattiva Sense Dark Vision da tutte le razze giocabili [Richiede riavvio] +ModUi/&DisableSenseDarkVisionFromAllRaces=Disattiva Visione oscura da tutte le razze giocabili [Richiede riavvio] ModUi/&DisableSenseSuperiorDarkVisionFromAllRaces=Disattiva Visione oscura superiore da tutte le razze giocabili [Richiede riavvio] ModUi/&DisableUnofficialTranslations=Disabilita il supporto alle traduzioni non ufficiali per velocizzare la mod [a meno che non parli cinese, italiano, giapponese, coreano o spagnolo] ModUi/&DisplayAllKnownSpellsDuringLevelUp=+ Mostra tutti gli incantesimi conosciuti delle altre classi durante l'aumento di livello @@ -126,7 +126,7 @@ ModUi/&EnableFlexibleRaces=Abilita razze flessibili [assegna p ModUi/&EnableGrappleAction=Abilita l'azione Afferramento ModUi/&EnableHelpAction=Abilita l'azione Aiuto [puoi aiutare una creatura amica ad attaccare una creatura entro 1 cella da te] ModUi/&EnableHeroWithBestProficiencyToRollChoice=Abilita l'eroe con la migliore competenza a effettuare scelte di dialogo [funziona ma le narrazioni sembrano strane nelle campagne ufficiali] -ModUi/&EnableHigherGroundRules=Abilita le regole per terreno più alto [+1 per colpire se si attacca da un terreno più alto] +ModUi/&EnableHigherGroundRules=Abilita le regole terreno più alto [+1 per colpire se si attacca da un terreno più alto] ModUi/&EnableInventoryFilteringAndSorting=Abilita il filtraggio e l'ordinamento dell'inventario ModUi/&EnableInventoryTaintNonProficientItemsRed=Tingi di rosso qualsiasi oggetto con cui l'eroe non è competente ModUi/&EnableInventoryTintKnownRecipesRed=Tinta ricette note rosso @@ -146,7 +146,9 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Abilita Difesa ModUi/&EnableMonkWeaponSpecialization=Abilita Specializzazione nelle armi ai livelli 2 e 11 [il tipo di arma selezionato diventa per te un'arma da monaco] ModUi/&EnableMulticlass=Abilita multiclasse [Richiede riavvio] ModUi/&EnableOneDnDPreparedSpellsTables=Abilita tutti i incantatori a usare le nuove tabelle degli incantesimi preparati [Bardo, Chierico, Druido, Paladino, Ranger, Stregone, Mago] -ModUi/&EnableOneDndHealingSpellsUpgrade=Abilita il potenziamento dei dadi curativi su Cura Ferite, Parola Curativa, Cura Ferite di Massa e Parola Curativa di Massa +ModUi/&EnableOneDndBarkskinSpell=Abilita la versione dell'incantesimo Barkskin 5e 2024 [azione bonus, nessuna concentrazione, CA impostata a 17] +ModUi/&EnableOneDndGuidanceSpell=Abilita la versione dell'incantesimo Guida 5e 2024 [Scegli un'abilità al momento del lancio e ottieni un bonus fino a 1 minuto.] +ModUi/&EnableOneDndHealingSpellsUpgrade=Abilita Cura Ferite, Parola Guaritrice, Cura Ferite di Massa e Parola Guaritrice di Massa versione incantesimi 5e 2024 ModUi/&EnablePaladinLayOnHandsAsBonusAction=Abilita Imposizione delle mani come azione bonus ModUi/&EnablePaladinSmiteAsBonusAction=Abilita Colpisci come azione bonus ModUi/&EnablePaladinSpellCastingAtLevel1=Abilita lancio di incantesimi al livello 1 invece che 2 @@ -258,14 +260,14 @@ ModUi/&Races=Razze ModUi/&RecipeCost=Costo della ricetta ModUi/&RelicForgeries=Falsificazioni di reliquie ModUi/&RemoveAttunementRequirements=Rimuovi i requisiti di sintonizzazione [Richiede riavvio] -ModUi/&RemoveBardMagicalSecretAt14And18=Rimuovi Segreto magico a 14 e 18 -ModUi/&RemoveBardSongOfRest=Rimuovi Canzone del Riposo al livello 2 +ModUi/&RemoveBardMagicalSecretAt14And18=Rimuovi Segreto magico ai livelli 14 e 18 +ModUi/&RemoveBardSongOfRestAt2=Rimuovi Canzone del Riposo al livello 2 ModUi/&RemoveBugVisualModels=Sostituisci i modelli simili a ragni con modelli simili a orsi nel gioco [aracnofobia] [Richiede riavvio] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Rimuovi filtro umanoide su Risata orribile ModUi/&RemoveRecurringEffectOnEntangle=Applica l'effetto Intrappolamento solo al momento del lancio e forza anche un controllo di forza per liberarti dai tralci ModUi/&RemoveRogueBlindSense=Rimuovi Senso cieco al livello 14 -ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Rimuovi le restrizioni scolastiche da Shadowcaster -ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Rimuovi le restrizioni scolastiche da Spellblade +ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Rimuovi le restrizioni scolastiche da Shadowcaster +ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Rimuovi le restrizioni scolastiche da Spellblade ModUi/&RestockAntiquarians=Rifornisci gli antiquari [Estate Halman] ModUi/&RestockArcaneum=Rifornimento Arcaneum [Heddlon Surespell] ModUi/&RestockCircleOfDanantar=Rifornimento Cerchio di Danantar [Joriel Foxeye] @@ -307,15 +309,13 @@ ModUi/&StockHugoStoreWithAdditionalFoci=Fai scorta nel negozio di Hugo con Sottoclassi ModUi/&Subraces=Sottorazze ModUi/&SwapAbjurationSavant=Sostituisci Abjurer Savant dell'Abjurazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] -ModUi/&SwapCraftedItemAndRecipeIcons=+ Scambia le icone delle ricette e degli oggetti realizzati nel negozioModUi/&SwapEvocationSavant=Sostituisci Evocatore Sapiente dell'evocazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] -ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Sostituisci Competenza nelle armi con la versione 5e 2024 [armi semplici invece di tipi di armi ma perdi competenza nella Scimitarra] -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Scambia le funzionalità Evocatore Incantesimi di Scultura e Trucchetto Potente +ModUi/&SwapCraftedItemAndRecipeIcons=+ Scambia le icone delle ricette e degli oggetti realizzati nel negozio +ModUi/&SwapDruidToUseOneDndWeaponProficiency=Abilita la competenza in Armi semplici [invece di tipi di armi individuali ma perdi la competenza in Scimitarra] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Sostituisci Evocatore Incantesimi di Scultura e Trucchetto Potente durante la progressione ModUi/&SwapEvocationSavant=Sostituisci Evocatore Sapiente dell'evocazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] -ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Sostituisci Attacco disarmato per usare la progressione del tipo di dado 5e 2024 -ModUi/&EnableOneDndBarkskinSpell=Sostituisci Barkskin con la versione 5e 2024 [azione bonus, nessuna concentrazione, CA impostata a 17] -ModUi/&EnableOneDndGuidanceSpell=Sostituisci Guida con la versione 5e 2024 [Scegli un'abilità durante il lancio e ottieni un bonus fino a 1 minuto.] -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Sostituisci Second Wind per usare la progressione di utilizzo 5e 2024 -ModUi/&SwapWarlockToUseOneDndInvocationProgression=Scambia la progressione delle Invocazioni con la versione 5e 2024 +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Abilita Attacco disarmato per usare la progressione del tipo di dado 5e 2024 +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Abilita Second Wind per usare la progressione di utilizzo 5e 2024 +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Abilita Invocazioni per usare la progressione 5e 2024 ModUi/&TableTopButton=Seleziona contenuto Tabletop ModUi/&TableTopHelp1=• Le sezioni seguenti raggruppano e duplicano le impostazioni 5e 2014 e 2024 sparse nella mod per la tua comodità ModUi/&TableTopHelp2=• Premi il pulsante per selezionare solo il contenuto del tavolo nella scheda Personaggio e seleziona tutte le opzioni sottostanti per una vera esperienza TT @@ -342,5 +342,5 @@ ModUi/&UseOfficialFlankingRulesButAddAttackModifier=+ Invece di vantaggio, co ModUi/&UseOfficialFoodRationsWeight=Abilita razione alimentare del peso di 2 libbre ModUi/&UseOfficialObscurementRules=Abilita le regole di combattimento illuminazione, oscuramento e visione ModUi/&UseOfficialObscurementRulesHelp=[l'attaccante che percepisce il difensore che non riesce a percepirlo ottiene ADV, e l'attaccante che non percepisce il difensore che riesce a percepirlo ottiene DIS\n le aree pesantemente oscurate infliggono la condizione di accecamento, dove i tiri per colpire contro la creatura hanno ADV, e i tiri per colpire della creatura hanno DIS\n tutti gli incantesimi a distanza che prendono di mira gli individui non possono essere lanciati se l'attaccante non ha vista, eccetto quelli che chiaramente non dichiarano che la vista è richiesta] -ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=Abilita le razze piccole che hanno svantaggi quando impugnano armi pesanti -ModUi/&WildSurgeDieRollThreshold=Imposta la soglia di probabilità di dado Magia selvaggia dello stregone:{99[L'ondata selvaggia si innesca se i tiri sono inferiori o uguali alla soglia] +ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=Abilita le razze piccole che hanno svantaggio quando impugnano armi pesanti +ModUi/&WildSurgeDieRollThreshold=Imposta la soglia di probabilità di dado Magia selvaggia dello stregone:\n[L'ondata selvaggia si innesca se i tiri sono inferiori o uguali alla soglia] diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index d460ba1717..afc7d3bd8a 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -88,6 +88,7 @@ Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=照明がついてい Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=闇の知覚 Feature/&AlwaysBeardDescription={0}% の確率で立派なひげが生えてきます。 Feature/&AncestryLevelUpDraconicDescription=あなたの竜族の祖先は、あなたに {0} のダメージ タイプへの親和性を与えます。 +Feature/&AttackModifierMonkMartialArtsExtendedDescription=鎧や盾を装備していないときに、素手攻撃や僧侶武器の通常のダメージの代わりに d6 を振ることができます。このダイスは僧侶レベルが上がるにつれて変化します (5 レベルで d8、11 レベルで d10)。素手攻撃や僧侶武器の攻撃ロールとダメージ ロールには、筋力の代わりに器用さを使用できます。 Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusDescription=ボーナスアクションとして素手攻撃を 1 回行うことができます。 Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=マーシャルアーツ - ボーナス素手打撃 Feature/&AttributeModifierDazzledTitle=AC Penalty @@ -197,8 +198,6 @@ Feature/&PowerTeleportSummonDescription=キャスターから 5 フィート以 Feature/&PowerTeleportSummonTitle=テレポート Feature/&PowerVanishSummonDescription=召喚を消滅させることができます。 Feature/&PowerVanishSummonTitle=消え去る -Feature/&PowerWarlockMagicalCunningDescription=ボーナス アクションを使用して、消費した契約スロットの数を、最大値の半分 (切り上げ) まで回復できます。この機能を一度使用すると、大休憩を終了するまで再度使用することはできません。 -Feature/&PowerWarlockMagicalCunningTitle=魔法の狡猾さ Feature/&ToolGainChoicesPluralDescription=次のツールから {0} 個を選択してください: {1} Feature/&ToolGainChoicesSingleDescription=次のツールのいずれかを選択します: {1} Feature/&VisionBlindsightDescription=あなたは盲目です。 @@ -349,8 +348,6 @@ Tooltip/&PreReqMustKnow={0} を知っておく必要があります Tooltip/&Tag9000Title=カスタムエフェクト Tooltip/&TagDamageChaosBoltTitle=カオスダメージ Tooltip/&TagUnfinishedBusinessTitle=未完の仕事 -Tooltip/&TargetMustNotBeSurprised=ターゲットは驚いてはいけない -Tooltip/&TargetMustUnderstandYou=ターゲットはあなたのコマンドを理解する必要があります UI/&CustomFeatureSelectionStageDescription=クラス/サブクラスの追加機能を選択します。 UI/&CustomFeatureSelectionStageFeatures=特徴 UI/&CustomFeatureSelectionStageNotDone=続行する前に、利用可能な機能をすべて選択する必要があります diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index c172e37dd7..680ebaa33a 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -1,11 +1,11 @@ ModUi/&AccountForAllDiceOnFollowUpStrike=基本武器のすべての追加効果を追撃攻撃特技に追加します ModUi/&AccountForAllDiceOnSavageAttack=基本武器ダメージからのすべてのダイスを、1 つのダイスのみではなく、基本武器ダメージを追加する機能に追加します [サベージ アタック、2H 武器など] ModUi/&AddAllToStore=以下をショップに追加します [これらは他の武器カテゴリで再利用されたゲームレシピです] -ModUi/&AddBleedingToLesserRestoration=Greater と Lesser Restoration によって除去された状態に加えて、Bleeding 状態を追加します。 +ModUi/&AddBleedingToLesserRestoration=Greater と Lesser Restoration によって解除された状態に加えて、Bleeding 状態を追加します。 ModUi/&AddCustomIconsToOfficialItems=公式ゲームアイテムにカスタムアイコンを追加します [弾薬、レシピ、キットなど] [再起動が必要] ModUi/&AddDarknessPerceptiveToDarkRaces=ダークエルフ、ダークコボルド、グレイドワーフに闇知覚を有効にする \n[照明が消えているときや魔法の暗闇にいるときに知覚判定に有利を与える] ModUi/&AddDexModifierToEnemiesInitiativeRoll=敵に DEX 修飾子を追加する イニシアティブ ロール -ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=レベル 1 に Primal Order を追加し、Medium Armor Proficiency を削除します +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=レベル 1 で Primal Order を有効にし、Medium Armor Proficiency を削除します。 ModUi/&AddFighterLevelToIndomitableSavingReroll=不屈の抵抗セーヴィングスローの再ロールにクラスレベルをボーナスとして追加します ModUi/&AddHumanoidFavoredEnemyToRanger=ヒューマノイド優先敵を有効にする ModUi/&AddNewWeaponsAndRecipesToShops=新しい武器とレシピをショップに追加します [ハンドラップ、ハルバード、パイク、ロングメイス、ハンドクロスボウ] [再起動が必要です] @@ -16,13 +16,13 @@ ModUi/&AddToStore={0} を追加 ModUi/&Advanced=詳細: [再起動が必要] ModUi/&AdvancedHelp=• 注意: これらの設定を行うには、プレイヤーがこのMODをインストールしている必要があります。 ModUi/&AllowAllPlayersOnNarrativeSequences=+ ナラティブ シーケンスですべてのプレイヤーを許可する -ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=自然の暗闇にいるときに味方が GloomStalker を感知できるようにする +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=自然の暗闇にいるときに味方がGloomStalkerを感知できるようにする ModUi/&AllowAnyClassToWearSylvanArmor=どのクラスでも シルヴァンアーマー または ライトブリンガー服 を着用できるようにします ModUi/&AllowBladeCantripsToUseReach=ブレード・カントリップが5フィートではなくリーチを使用できるようにする ModUi/&AllowClubsToBeThrown=クラブをダガーやハンドアックスのように投げられるようになります ModUi/&AllowDisplayingNonSuggestedSpells=各リストでmodの非推奨呪文を許可する ModUi/&AllowDisplayingOfficialSpells=各リストでゲーム公式呪文を許可する -ModUi/&AllowDruidToWearMetalArmor=ドルイドが金属鎧を着用できるようにする +ModUi/&AllowDruidToWearMetalArmor=金属装甲の制限を解除 ModUi/&AllowDungeonsMaxLevel20=最大レベル20のダンジョンを許可する ModUi/&AllowFlightSuspend=アイテムや呪文による飛行を一時的に停止できるようにします [ワイルドシェイプや飛行種族には影響しません] ModUi/&AllowGadgetsAndPropsToBePlacedAnywhere=ガジェットや小道具を配置する際のチェックをバイパスするために、CTRL クリックを有効にします @@ -114,10 +114,10 @@ ModUi/&EnableCantripsTriggeringOnWarMagic=呪文で戦争魔法On Fire のキャラクターは、[Cube of Light、Fire Elemental、Fire Jester、Fire Osprey、Fire Spider、および On Fire 状態ファミリー] を発するはずです。 ModUi/&EnableCustomPortraits=カスタムポートレートを有効にする ModUi/&EnableCustomPortraitsHelp=• カスタムポートレートを、主人公のファーストネームにちなんで名付けたサブフォルダ Personal または PreGen に配置します [例: Anton、Celia、Nialla など]\n• 透明レイヤー付きの 256 x 384 ピクセルの PNG 画像を使用します [最良の結果を得るには GIMP を使用します] -ModUi/&EnableDungeonMakerModdedContent=Dungeon Maker Pro を有効にします{99>[フラットな部屋、150x150 および 200x200 のダンジョン サイズ、あらゆる環境からの無駄のない混合アセットを含む] +ModUi/&EnableDungeonMakerModdedContent=Dungeon Maker Pro を有効にします\n[フラットな部屋、150x150 および 200x200 のダンジョン サイズ、あらゆる環境からの無駄のない混合アセットを含む] ModUi/&EnableElevationCameraToStayAtPosition=+ 戦闘中に高度カメラを有効にすると、無効になった後もその位置に留まり、範囲が 3 倍になります -ModUi/&EnableEpicPointsAndArray=壮大な 35 ポイント購入システムと配列を有効にします [17,15,13,12,10,8] [再起動が必要] -ModUi/&EnableExtendedProficienciesPanelDisplay=拡張熟練度パネルの表示を有効にする [アーケイン ショット、インフュージョン、マニューバ、および汎用性]{99>[キャラクター検査時にパフォーマンスが低下します。自己責任で使用してください] +ModUi/&EnableEpicPointsAndArray=壮大な 35 ポイント購入システムと配列を有効にします [17,15,13,​​12,10,8] [再起動が必要] +ModUi/&EnableExtendedProficienciesPanelDisplay=拡張熟練度パネルの表示を有効にする [アーケイン ショット、インフュージョン、マニューバ、および汎用性]\n[キャラクター検査時にパフォーマンスが低下します。自己責任で使用してください] ModUi/&EnableFeatsAtEvenLevels=レベル2、10、18で特技選択を有効にする ModUi/&EnableFeatsAtEvenLevelsMiddle=レベル6と14で特技選択を有効にする ModUi/&EnableFighterWeaponSpecialization=レベル 8 と 16 で 武器特化 を有効にします [命中とダメージが +1 になりますが、他の武器タイプでは不利になります] @@ -146,7 +146,9 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=レベル18で ModUi/&EnableMonkWeaponSpecialization=レベル 2 と 11 で 武器特化 を有効にします [選択した武器の種類がモンク武器になります] ModUi/&EnableMulticlass=マルチクラスを有効にする [再起動が必要] ModUi/&EnableOneDnDPreparedSpellsTables=すべての キャスター が新しい準備済み呪文テーブル [吟遊詩人、聖職者、ドルイド、パラディン、レンジャー、ソーサラー、ウィザード] を使用できるようにします。 -ModUi/&EnableOneDndHealingSpellsUpgrade=治癒の傷、治癒の言葉、大量治癒の傷、大量治癒の言葉に治癒ダイスバフを有効にします +ModUi/&EnableOneDndBarkskinSpell=樹皮の皮 5e 2024 呪文バージョンを有効にする [ボーナスアクション、集中力なし、AC を 17 に設定] +ModUi/&EnableOneDndGuidanceSpell=ガイダンス 5e 2024 呪文バージョンを有効にします [発動時にスキルを 1 つ選択し、最大 1 分間ボーナスを獲得します。] +ModUi/&EnableOneDndHealingSpellsUpgrade=Cure Wounds、Healing Word、Mass Cure Wounds、Mass Healing Word 5e 2024 呪文バージョンを有効にする ModUi/&EnablePaladinLayOnHandsAsBonusAction=ボーナスアクションとして手を置くを有効にする ModUi/&EnablePaladinSmiteAsBonusAction=ボーナスアクションとしてスマイトを有効にする ModUi/&EnablePaladinSpellCastingAtLevel1=呪文発動をレベル2ではなくレベル1で有効にする @@ -187,7 +189,7 @@ ModUi/&FactionHelp=派閥関係を変更するには、公式 ModUi/&FactionRelations=派閥: ModUi/&FasterTimeModifier=スペースバーを押したときのゲーム時間の変更 ModUi/&FeatGroups=特技グループ -ModUi/&FeatGroupsHelp=• 各グループは、類似の 特技 [例: 信条、戦闘スタイル、メタマジックなど] を統合したものです\n• これらのグループの特技は、熟練度選択ステージで直接表示されなくなります\n• グループを選択すると、ゲーム画面を整理するためにドロップダウン リストで表示されます +ModUi/&FeatGroupsHelp=• 各グループは、類似の 特技 [例: 信条、戦闘スタイル、メタマジックなど] を統合したものです\n• これらのグループの特技は、熟練度選択ステージで直接表示されなくなります\n• グループを選択すると、ゲーム画面を整理するためにドロップダウンリストに表示されます ModUi/&Feats=特技 ModUi/&FightingStyles=戦闘スタイル ModUi/&FixAsianLanguagesTextWrap=アジア言語のゲーム UI テキストの折り返しを修正 [再起動が必要] @@ -206,7 +208,7 @@ ModUi/&FullyControlConjurations=召喚を完全に制御します 一般: ModUi/&GeneralMenu=一般的な -ModUi/&GrantScimitarSpecializationToBarkMonkRogue=吟遊詩人盗賊にシミターの武器特化を付与します +ModUi/&GrantScimitarSpecializationToBarkMonkRogue=シミターの武器特化を吟遊詩人盗賊に付与します ModUi/&GridSelectedColor=動きのグリッドの色を変更します ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=まだ発見されていない場合は出口とテレポーターの視覚効果を非表示にします ModUi/&HideMonsterHitPoints=モンスターの体力を正確なヒットポイントではなく、25% / 50% / 75% / 100% の単位で表示します。 @@ -229,18 +231,18 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ 発見後、レベルマップ上 ModUi/&MaxAllowedClasses=最大許容クラス数 ModUi/&Merchants=商人: ModUi/&Metamagic=メタマジック -ModUi/&ModifyGravitySlam=重力スラム 呪文を変更して、影響を受けたターゲットを引き下げ、球体ではなく円筒形になるようにします{99>[上下軸でプッシュおよびプル モーション エフェクトを有効にするには を有効にする必要があります] +ModUi/&ModifyGravitySlam=重力スラム 呪文を変更して、影響を受けたターゲットを引き下げ、球体ではなく円筒形になるようにします\n[上下軸でプッシュおよびプル モーション エフェクトを有効にするには を有効にする必要があります] ModUi/&MovementGridWidthModifier=移動グリッドの幅を [%] で乗算します -ModUi/&MulticlassKeyHelp=SHIFT キーを押しながら呪文をクリックすると、消費されるデフォルトのレパートリー スロットの種類が反転します{99>[ウォーロック は白の呪文スロットを消費し、その他のプレイヤーはパクトの緑の呪文スロットを消費します] +ModUi/&MulticlassKeyHelp=SHIFT キーを押しながら呪文をクリックすると、消費されるデフォルトのレパートリー スロットの種類が反転します\n[ウォーロック は白の呪文スロットを消費し、その他の呪文スロットはパクトの緑の呪文スロットを消費します] ModUi/&Multiplayer=マルチプレイヤー: ModUi/&MultiplyTheExperienceGainedBy=獲得経験値を [%] 倍にします ModUi/&NeverMoveCameraOnEnemyTurn=+ 敵のターン中はカメラが動かない ModUi/&NoExperienceOnLevelUp=レベルアップに経験は必要ありません -ModUi/&OfficialObscurementRulesCancelAdvDisPairs=+ 盲目、不可視、知覚されたペアの 利点 / 不利 をキャンセルします [公式の 利点 / 不利 ルールと併用すると便利です] +ModUi/&OfficialObscurementRulesCancelAdvDisPairs=+ 盲目、不可視、知覚のペアの 利点 / 不利 をキャンセルします [公式の 利点 / 不利 ルールと併用すると便利です] ModUi/&OfficialObscurementRulesHeavilyObscuredAsProjectileBlocker=+ 非常に遮蔽されたエリアを投射物ブロッカーに変更します [クラウドキル、霧雲、焼夷雲、花びら嵐、みぞれ嵐、悪臭雲] ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ 不可視のクリーチャーは、非常に隠蔽されており、ターゲットにすることができます。そのクリーチャーに対する攻撃ロールは不利となり、そのクリーチャーの攻撃ロールは有利となります ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ 魔法で隠された領域を、発射物ブロッカー [闇 呪文効果の任意のソース] -ModUi/&OfficialObscurementRulesTweakMonsters=+ 必要に応じてモンスターと NPC に Darkvision、BlindSight、TrueSight を追加します +ModUi/&OfficialObscurementRulesTweakMonsters=+ 適切な場合はいつでも、モンスターと NPC に Darkvision、BlindSight、TrueSight を追加します ModUi/&OfficialObscurementRulesTweakMonstersHelp=[設定のコレクション MonstersThatShouldHaveDarkvisionMonstersThatShouldHaveTrueSightMonstersThatShouldHaveBlindSight] ModUi/&OneDnd=テーブルトップ [5e 2024]: ModUi/&OneDndHealingPotionBonusAction=治癒ポーションと解毒剤の使用時にボーナスアクションを有効にする @@ -252,20 +254,20 @@ ModUi/&OverridePartySize=パーティーサイズを上書きする ModUi/&Patches=パッチ: ModUi/&PortraitsOpenFolder=ポートレートフォルダを開く ModUi/&PrimedItems=プライムアイテム -ModUi/&QuickCastLightCantripOnWornItemsFirst=クイックキャストライトカントリップを有効にすると、頭、首、または胴体に装備したアイテムを最初に使用できます。 -ModUi/&RaceLightSensitivityApplyOutdoorsOnly=Darkelf、Dark Kobold、Gray Dwarf の Light Sensitivity を有効にすると、屋外でのみトリガーされます{99>[ロード画面なしでアクセス可能な屋外の場所の屋内エリアは、ゲーム エンジンによって屋外とみなされます] +ModUi/&QuickCastLightCantripOnWornItemsFirst=クイックキャストライトカントリップを有効にすると、頭、首、または胴体に装備するアイテムを最初に使用できます。 +ModUi/&RaceLightSensitivityApplyOutdoorsOnly=Darkelf、Dark Kobold、Gray Dwarf の Light Sensitivity を有効にすると、屋外でのみトリガーされます\n[ロード画面なしでアクセス可能な屋外の場所の屋内エリアは、ゲーム エンジンによって屋外とみなされます] ModUi/&Races=レース ModUi/&RecipeCost=レシピのコスト ModUi/&RelicForgeries=遺物の偽造 ModUi/&RemoveAttunementRequirements=調整要件を削除します [再起動が必要です] -ModUi/&RemoveBardMagicalSecretAt14And18=14と18の魔法の秘密を削除します -ModUi/&RemoveBardSongOfRest=レベル2で安息の歌を削除します +ModUi/&RemoveBardMagicalSecretAt14And18=レベル14と18で魔法の秘密を削除します +ModUi/&RemoveBardSongOfRestAt2=レベル2で安息の歌を削除します ModUi/&RemoveBugVisualModels=ゲーム内のクモのようなモデルをクマのようなモデルに置き換えます [クモ恐怖症] [再起動が必要] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Hideous Laughter のヒューマノイド フィルターを削除します ModUi/&RemoveRecurringEffectOnEntangle=絡みつく効果は詠唱時にのみ適用され、蔓から逃れるには筋力チェックも強制される。 ModUi/&RemoveRogueBlindSense=レベル14でブラインドセンスを削除します -ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Shadowcaster から学校制限を削除します -ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Spellblade から学校制限を削除します +ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Shadowcaster から学校制限を削除します +ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Spellblade から学校制限を削除します ModUi/&RestockAntiquarians=古物商の補充 [ハルマン サマー] ModUi/&RestockArcaneum=アーケイナムを補充 [ヘドロン シュアスペル] ModUi/&RestockCircleOfDanantar=ダナンターのサークル [ジョリエル・フォックスアイ] を補充 @@ -307,15 +309,13 @@ ModUi/&StockHugoStoreWithAdditionalFoci=ヒューゴの店に、 ModUi/&Subclasses=サブクラス ModUi/&Subraces=亜種族 ModUi/&SwapAbjurationSavant=Abjurer Abjuration Savant を 5e 2024 バージョンの [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびに 1 つずつ追加で習得する] と入れ替えます -ModUi/&SwapCraftedItemAndRecipeIcons=+ ショップでレシピとクラフトアイテムのアイコンを交換ModUi/&SwapEvocationSavant=Evoker Evocation Savant を 5e 2024 バージョン [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびにさらに 1 つ習得する] と入れ替えます -ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=武器熟練度を5e 2024バージョン[武器タイプの代わりにシンプルな武器ですが、シミター熟練度は失われます]と入れ替えます -ModUi/&SwapEvocationPotentCantripAndSculptSpell=エヴォーカースカルプトスペルとポテンシャルキャントリップの機能を入れ替えます +ModUi/&SwapCraftedItemAndRecipeIcons=+ ショップでレシピとクラフトアイテムのアイコンを交換 +ModUi/&SwapDruidToUseOneDndWeaponProficiency=シンプル武器の熟練度を有効にします [個別の武器タイプではなく、シミターの熟練度を失います] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=進行時にエヴォーカースカルプトスペルとポテンシャルキャントリップを入れ替える ModUi/&SwapEvocationSavant=Evoker Evocation Savant を 5e 2024 バージョン [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびにさらに 1 つ習得する] と入れ替えます -ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Unarmed Attack を 5e 2024 ダイスタイプの進行に置き換える -ModUi/&EnableOneDndBarkskinSpell=Barkskin を 5e 2024 バージョンの [ボーナス アクション、集中力なし、AC を 17 に設定] と交換します。 -ModUi/&EnableOneDndGuidanceSpell=ガイダンスを5e 2024バージョンと入れ替えます [発動時にスキルを1つ選択し、最大1分間ボーナスを獲得します。] -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=セカンド ウィンド を 5e 2024 の使用進行に置き換える -ModUi/&SwapWarlockToUseOneDndInvocationProgression=Invocations の進行を 5e 2024 バージョンと入れ替える +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=非武装攻撃を有効にすると、5e 2024 ダイスタイプの進行が使用可能になります。 +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=セカンドウィンドを有効にして、5e 2024の使用状況の進行を使用します +ModUi/&SwapWarlockToUseOneDndInvocationProgression=5e 2024の進行状況を使用するには、Invocationsを有効にします ModUi/&TableTopButton=テーブルトップコンテンツを選択 ModUi/&TableTopHelp1=• 以下のセクションでは、利便性のために、mod 全体に散らばっている 5e 2014 および 2024 設定を再グループ化して複製します。 ModUi/&TableTopHelp2=• ボタンを押してキャラクタータブのテーブルトップコンテンツのみを選択し、以下のすべてのオプションを選択して真のTT体験を味わってください。 @@ -334,13 +334,13 @@ ModUi/&UseAlternateSpellPointsSystemHelp=[L01: 04 ModUi/&UseElfFaceModelsOnTieflings=エルフの顔モデルをティフリングに使用します ModUi/&UseHeightOneCylinderEffect=ブラック テンタクルズ、エンタングル、グリース [square] または スパイク グロース [round] をキャストするときに、高さ 1 のシリンダー効果を使用します。 ModUi/&UseMathFlankingRules=+ 側面攻撃を決定するために正確な計算を使用する [低速マシンではパフォーマンスに影響する可能性があります] -ModUi/&UseOfficialAdvantageDisadvantageRules=利点 / 不利 ルールを有効にする [状況によりロールに両方が含まれる場合、どちらも含まれていないとみなされます] +ModUi/&UseOfficialAdvantageDisadvantageRules=有利/不利ルールを有効にする [状況によりロールに両方が含まれる場合、どちらも含まれていないとみなされます] ModUi/&UseOfficialFlankingRules=側面攻撃ルールを有効にする [味方がターゲットの反対側にいる場合、攻撃側は有利になる] ModUi/&UseOfficialFlankingRulesAlsoForRanged=+ 遠距離攻撃にも有効にする [正確な計算を無効にする] ModUi/&UseOfficialFlankingRulesAlsoForReach=+ リーチ攻撃も有効にする [正確な計算を無効にする] ModUi/&UseOfficialFlankingRulesButAddAttackModifier=+ アドバンテージの代わりに攻撃ロールに +1 を付与 ModUi/&UseOfficialFoodRationsWeight=食料配給の重量を2ポンドにする ModUi/&UseOfficialObscurementRules=照明、遮蔽、視界戦闘ルールを有効にする -ModUi/&UseOfficialObscurementRulesHelp=[それを知覚する攻撃者は ADV を獲得し、それを知覚しない攻撃者は DIS を獲得します。それを知覚できる防御者は DIS を獲得します\n 非常に隠された領域は盲目状態を引き起こし、クリーチャーに対する攻撃ロールには ADV が付与され、クリーチャーの攻撃ロールには DIS が付与されます\n 攻撃者に視力がない場合、個人をターゲットとするすべての遠距離呪文は発動できません。ただし、視力が必要であると明確に述べられていない呪文は除きます] +ModUi/&UseOfficialObscurementRulesHelp=[それを知覚する攻撃者は ADV を獲得し、それを知覚しない攻撃者は DIS を獲得します。それを知覚できる防御者は DIS を獲得します\n 非常に隠された領域は盲目状態を引き起こし、クリーチャーに対する攻撃ロールには ADV が付与され、クリーチャーの攻撃ロールには DIS が付与されます\n 攻撃者が視力を持たない場合、個人をターゲットとするすべての遠距離呪文は、視力が必要であると明確に述べられていない呪文を除いて、キャストできません] ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=小型種族が重火器を使用する際に不利になるようにする -ModUi/&WildSurgeDieRollThreshold=ソーサラー ワイルド マジック の確率ダイスしきい値を設定します:{99>[ロールがしきい値以下であればワイルド サージが発動します] +ModUi/&WildSurgeDieRollThreshold=ソーサラー ワイルド マジック の確率ダイスしきい値を設定します:\n[ロールがしきい値以下であればワイルド サージが発動します] diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 29b1e12b1a..538ead4b4a 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -88,6 +88,7 @@ Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=불이 켜지지 않 Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=어둠 감지 Feature/&AlwaysBeardDescription=멋진 수염이 자랄 확률은 {0}%입니다! Feature/&AncestryLevelUpDraconicDescription=귀하의 용족 조상은 귀하에게 {0} 피해 유형과의 친화성을 부여합니다. +Feature/&AttackModifierMonkMartialArtsExtendedDescription=갑옷이나 방패를 착용하지 않은 상태에서는 무장하지 않은 타격이나 몽크 무기의 일반적인 피해 대신 d6을 굴릴 수 있습니다. 이 주사위는 몽크 레벨이 오르면서 바뀝니다(5레벨에서 d8, 11레벨에서 d10). 무장하지 않은 타격과 몽크 무기의 공격 및 피해 굴림에는 힘 대신 민첩성을 사용할 수 있습니다. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusDescription=보너스 행동으로 비무장 공격을 1회 할 수 있습니다. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=무술 - 보너스 비무장 공격 Feature/&AttributeModifierDazzledTitle=AC Penalty @@ -197,8 +198,6 @@ Feature/&PowerTeleportSummonDescription=시전자로부터 5피트 이내의 어 Feature/&PowerTeleportSummonTitle=텔레포트 Feature/&PowerVanishSummonDescription=소환을 사라지게 할 수 있습니다. Feature/&PowerVanishSummonTitle=사라지다 -Feature/&PowerWarlockMagicalCunningDescription=보너스 액션을 사용하면 최대치의 절반 이하(올림)의 소모된 계약 슬롯을 회복할 수 있습니다. 이 기능을 사용하면 긴 휴식을 마칠 때까지 다시 사용할 수 없습니다. -Feature/&PowerWarlockMagicalCunningTitle=마법의 교활함 Feature/&ToolGainChoicesPluralDescription=다음 도구 중 {0}개를 선택하세요: {1} Feature/&ToolGainChoicesSingleDescription=다음 도구 중 하나를 선택하십시오: {1} Feature/&VisionBlindsightDescription=당신은 시력이 없습니다. @@ -349,8 +348,6 @@ Tooltip/&PreReqMustKnow={0}을(를) 알아야 합니다. Tooltip/&Tag9000Title=맞춤 효과 Tooltip/&TagDamageChaosBoltTitle=혼돈스러운 피해 Tooltip/&TagUnfinishedBusinessTitle=끝나지 않은 사업 -Tooltip/&TargetMustNotBeSurprised=타겟은 놀라지 않아야 합니다. -Tooltip/&TargetMustUnderstandYou=타겟은 당신의 명령을 이해해야 합니다 UI/&CustomFeatureSelectionStageDescription=클래스/하위 클래스에 대한 추가 기능을 선택하세요. UI/&CustomFeatureSelectionStageFeatures=특징 UI/&CustomFeatureSelectionStageNotDone=계속하기 전에 사용 가능한 모든 기능을 선택해야 합니다. diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index ac36c0422a..dac4dc61c8 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -5,7 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=상위 및 [탄약, 레시피, 키트 등] [재시작 필요] ModUi/&AddDarknessPerceptiveToDarkRaces=다크엘프, 다크 코볼드, 그레이 드워프에게 어둠 지각을 활성화합니다. \n[조명이 없거나 마법적 어둠에 있을 때 지각 검사에 유리합니다] ModUi/&AddDexModifierToEnemiesInitiativeRoll=적에게 DEX 수정치를 추가합니다 이니셔티브 롤 -ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=레벨 1에서 원시 질서를 추가하고 중간 방어구 숙련도를 제거합니다. +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=레벨 1에서 원시 질서를 활성화하고 중간 방어구 숙련도를 제거합니다. ModUi/&AddFighterLevelToIndomitableSavingReroll=불굴의 저항력 세이빙 스로우 재시전에 보너스로 클래스 레벨을 추가합니다. ModUi/&AddHumanoidFavoredEnemyToRanger=인간형 선호 적 활성화 ModUi/&AddNewWeaponsAndRecipesToShops=상점에 새로운 무기와 제조법을 추가하세요 [손가락 묶는 무기, 도끼창, 창, 긴 메이스, 손 석궁] [재시작 필요] @@ -16,17 +16,17 @@ ModUi/&AddToStore={0} 추가 ModUi/&Advanced=고급: [재시작 필요] ModUi/&AdvancedHelp=• 주의: 이러한 설정을 사용하려면 플레이어에 이 모드가 설치되어 있어야 합니다. ModUi/&AllowAllPlayersOnNarrativeSequences=+ 내러티브 시퀀스에서 모든 플레이어 허용 -ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=자연스러운 어둠 속에서 아군이 GloomStalker를 인식하도록 허용합니다. +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=자연스러운 어둠 속에서 아군이 GloomStalker를 인식하도록 허용합니다. ModUi/&AllowAnyClassToWearSylvanArmor=모든 직업군이 실반 갑옷 또는 빛을 가져오는 옷을 착용할 수 있도록 허용합니다. ModUi/&AllowBladeCantripsToUseReach=블레이드 캔트립이 5피트 대신 도달 범위를 사용하도록 허용 ModUi/&AllowClubsToBeThrown=곤봉을 단검이나 손도끼처럼 던질 수 있도록 허용합니다. ModUi/&AllowDisplayingNonSuggestedSpells=각 목록에 제안되지 않은 주문 허용 ModUi/&AllowDisplayingOfficialSpells=각 목록에 게임 공식 주문 허용 -ModUi/&AllowDruidToWearMetalArmor=드루이드가 금속 갑옷을 착용할 수 있도록 허용 +ModUi/&AllowDruidToWearMetalArmor=금속 갑옷 제한 제거 ModUi/&AllowDungeonsMaxLevel20=최대 레벨 20인 던전 허용 ModUi/&AllowFlightSuspend=아이템과 주문의 비행을 일시적으로 중단할 수 있습니다. [야생형이나 비행 종족에는 영향을 미치지 않습니다.] ModUi/&AllowGadgetsAndPropsToBePlacedAnywhere=가젯이나 소품을 배치할 때 모든 검사를 우회하려면 CTRL 클릭을 활성화하세요. -ModUi/&AllowHasteCasting=서두름으로 인해 추가 액션이 있는 주문 시전이 허용됩니다. [라운드당 주요 액션 주문은 여전히 1개로 제한됩니다.] +ModUi/&AllowHasteCasting=서두름으로 인해 추가 액션이 있는 주문 시전이 허용됩니다. [라운드당 주요 액션 주문은 여전히 ​​1개로 제한됩니다.] ModUi/&AllowHornsOnAllRaces=모든 종족에 뿔 허용 [종족, 머리, 뿔에 따라 결과가 끔찍해 보일 수 있음] ModUi/&AllowMoreRealStateOnRestPanel=휴식 패널에서 더 많은 실제 상태 허용 [이전 패널에서 휴식 작업 숨기기 및 이후 패널에서 복구 기능 숨기기] ModUi/&AllowStackedMaterialComponent=중첩된 재료 구성요소 허용 [예: 2x500gp 다이아몬드는 1000gp 다이아몬드와 동일함] @@ -50,7 +50,7 @@ ModUi/&Character=성격 ModUi/&CharactersPool=캐릭터 풀 ModUi/&Classes=수업 ModUi/&ColdImmunityAlsoGrantsImmunityToChilledAndFrozenCondition=추위 면역은 또한 냉각 및 동결 조건에 대한 면역을 부여합니다. -ModUi/&ColdResistanceAlsoGrantsImmunityToChilledCondition=저온 저항은 냉각 상태에 대한 면역성을 부여하고 동결 상태를 냉각 상태로 감소시킵니다. +ModUi/&ColdResistanceAlsoGrantsImmunityToChilledCondition=저온 저항은 냉각 상태에 대한 면역성을 부여하고 동결 상태를 냉각 상태로 줄입니다. ModUi/&Combat=전투: ModUi/&Crafting=제작: ModUi/&CraftingItems=제작 및 아이템 @@ -67,7 +67,7 @@ ModUi/&DisableCastSpellPreRequisitesOnModFeats=특기 모 ModUi/&DisableClassPrerequisitesOnModFeats=특기에 레벨 전제 조건 비활성화 ModUi/&DisableMultilineSpellOffering=액션 바에서 다중 줄 주문 제공 비활성화 [주로 멀티캐스터 영웅을 사용하지 않는 컨트롤러 사용자를 위해] ModUi/&DisableRacePrerequisitesOnModFeats=특기에 대한 종족 전제 조건 비활성화 -ModUi/&DisableSenseDarkVisionFromAllRaces=모든 플레이 가능 종족의 어둠의 시야 감지를 비활성화합니다 [재시작 필요] +ModUi/&DisableSenseDarkVisionFromAllRaces=모든 플레이 가능 종족의 어둠의 시야 감지를 비활성화합니다. [재시작 필요] ModUi/&DisableSenseSuperiorDarkVisionFromAllRaces=모든 플레이 가능 종족의 Superior Sense Dark Vision 비활성화 [재시작 필요] ModUi/&DisableUnofficialTranslations=비공식 번역 지원을 비활성화하여 모드 속도를 높이세요 [중국어, 이탈리아어, 일본어, 한국어 또는 스페인어를 하지 않는 한] ModUi/&DisplayAllKnownSpellsDuringLevelUp=+ 레벨업 중 다른 클래스의 알려진 모든 주문을 표시합니다. @@ -92,7 +92,7 @@ ModUi/&DontFollowMargin=+ 영웅이 화면 가장자리 밖에 ModUi/&DungeonMaker=던전메이커 ModUi/&DungeonMakerBasicHelp=• 이러한 설정은 플레이어가 이 모드를 설치하도록 요구하지 않습니다. ModUi/&Effects=효과 -ModUi/&EnableActionSwitching=동작 전환 막대 활성화 [동작 순서를 완벽하게 제어하는 데 유용함] +ModUi/&EnableActionSwitching=동작 전환 막대 활성화 [동작 순서를 완벽하게 제어하는 ​​데 유용함] ModUi/&EnableAdditionalBackstoryDisplay=배경 검사에서 추가 배경 스토리 표시 활성화 ModUi/&EnableAdditionalIconsOnLevelMap=레벨 맵에서 캠프, 출구 및 텔레포터에 대한 추가 아이콘 활성화 ModUi/&EnableAdditionalItemsInDungeonMaker=편집기에 수정된 항목 추가 @@ -136,7 +136,7 @@ ModUi/&EnableLoggingInvalidReferencesInUserCampaigns=사용자 정의 캠페인 ModUi/&EnableMinInOutAttributes=+ 최소 입출력 전제 조건 능력치 적용 ModUi/&EnableMonkAbundantKi=2레벨에서 풍부한 기를 활성화합니다. [숙련도 보너스의 절반에 해당하는 추가 기를 얻습니다(올림)] ModUi/&EnableMonkBodyAndMindToReplacePerfectSelf=레벨 20에서 완벽한 자아를 대체하기 위해 신체와 정신을 활성화합니다. -ModUi/&EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack=무술 - 보너스 비무장 타격을 활성화하여 사용 전에 공격 동작이 필요하지 않도록 합니다. +ModUi/&EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack=무술 - 보너스 비무장 타격을 활성화하면 사용 전에 공격 동작이 필요하지 않습니다. ModUi/&EnableMonkDoNotRequireAttackActionForFlurry=사용 전에 공격 동작이 필요하지 않도록 Flurry of Blows를 활성화합니다. ModUi/&EnableMonkFightingStyle=레벨 2에서 격투 스타일 선택 가능 ModUi/&EnableMonkHandwrapsUseGauntletSlot=핸드랩과 건틀릿이 건틀릿 슬롯에서 작동하도록 활성화합니다. @@ -146,7 +146,9 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=레벨 18에서 무기 전문화를 활성화합니다. [선택한 무기 유형이 당신에게 수도사 무기가 됩니다] ModUi/&EnableMulticlass=다중클래스 활성화 [재시작 필요] ModUi/&EnableOneDnDPreparedSpellsTables=모든 주문자가 새로 준비된 주문표 [바드, 성직자, 드루이드, 성기사, 레인저, 마법사, 마법사]를 사용할 수 있도록 합니다. -ModUi/&EnableOneDndHealingSpellsUpgrade=상처 치료, 치유의 말씀, 대량 상처 치료, 대량 치유의 말씀에 치유 주사위 버프를 활성화합니다. +ModUi/&EnableOneDndBarkskinSpell=Barkskin 5e 2024 주문 버전 활성화 [보너스 액션, 집중 없음, AC 17로 설정] +ModUi/&EnableOneDndGuidanceSpell=지침 5e 2024 주문 버전을 활성화합니다. [시전 시 스킬 하나를 선택하고 최대 1분 동안 보너스를 받습니다.] +ModUi/&EnableOneDndHealingSpellsUpgrade=상처 치료, 치유의 말씀, 대량 상처 치료, 대량 치유의 말씀 5e 2024 주문 버전을 활성화합니다. ModUi/&EnablePaladinLayOnHandsAsBonusAction=안수를 보너스 액션으로 활성화합니다. ModUi/&EnablePaladinSmiteAsBonusAction=Smite를 보너스 액션으로 활성화합니다. ModUi/&EnablePaladinSpellCastingAtLevel1=레벨 2 대신 레벨 1에서 주문 시전을 활성화합니다. @@ -164,7 +166,7 @@ ModUi/&EnableRogueSteadyAim=레벨 3에서 안정적인 조준교활한/사악한 일격에 후드럼 DEX 또는 STR 수정치를 활성화합니다. ModUi/&EnableSignatureSpellsRelearn=긴 휴식마다 특징 주문을 준비할 수 있게 합니다. [레벨 20에서 한 번만] ModUi/&EnableSorcererInnateSorcery=1레벨에서 선천적 마법을 활성화합니다. -ModUi/&EnableSorcererMagicalGuidance=레벨 5에서 마법의 안내를 활성화합니다. +ModUi/&EnableSorcererMagicalGuidance=레벨 5에서 ​​마법의 안내를 활성화합니다. ModUi/&EnableSorcererQuickenedAction=빠른 주문 동작을 활성화하여 빠른 메타매직이 적용된 주요 동작 주문을 시전할 수 있습니다. ModUi/&EnableSortingDungeonMakerAssets=Dungeon Maker 편집기에서 자산 정렬 활성화 ModUi/&EnableStatsOnHeroTooltip=영웅의 툴팁에 통계 표시 [예: 치명타, 치명타 실패 등] @@ -200,7 +202,7 @@ ModUi/&FormationHelp1=• 숫자 버튼을 사용하여 주어진 세트를 편 ModUi/&FormationHelp2=• @는 상대적인 영웅 위치를 나타냅니다. ModUi/&FormationHelp3=• 2개의 버튼을 클릭하여 위치를 바꾸십시오. ModUi/&FormationResetAllSets=모두 재설정 -ModUi/&FormationResetThisSet=이것을 재설정합니다 +ModUi/&FormationResetThisSet=이것을 재설정 ModUi/&FormationSelected=형성 세트 {0} 선택됨 ModUi/&FullyControlConjurations=[동물, 정령 등]의 주문을 완벽하게 제어합니다. ModUi/&Gameplay=게임 플레이 @@ -231,7 +233,7 @@ ModUi/&Merchants=상인: ModUi/&Metamagic=메타매직 ModUi/&ModifyGravitySlam=Gravity Slam 주문을 수정하여 영향을 받는 대상을 아래로 끌어내리고 구가 아닌 원통형이 되게 함\n[위/아래 축에서 밀기 및 당기기 동작 효과가 작동해야 함] ModUi/&MovementGridWidthModifier=이동 그리드 너비를 [%]로 곱합니다. -ModUi/&MulticlassKeyHelp=SHIFT로 주문을 클릭하면 소모된 기본 레퍼토리 슬롯 유형이 반전됩니다.\n[워록은 흰색 주문 슬롯을 소모하고 다른 워록은 녹색 계약 주문 슬롯을 소모합니다.] +ModUi/&MulticlassKeyHelp=SHIFT로 주문을 클릭하면 소모된 기본 레퍼토리 슬롯 유형이 반전됩니다.\n[워록은 흰색 주문 슬롯을 소모하고 다른 이들은 계약 녹색 주문 슬롯을 소모합니다] ModUi/&Multiplayer=멀티플레이어: ModUi/&MultiplyTheExperienceGainedBy=획득한 경험치를 [%] 곱합니다. ModUi/&NeverMoveCameraOnEnemyTurn=+ 적의 턴 동안 카메라는 절대 움직이지 않습니다. @@ -258,14 +260,14 @@ ModUi/&Races=종족 ModUi/&RecipeCost=레시피 비용 ModUi/&RelicForgeries=유물 위조 ModUi/&RemoveAttunementRequirements=조율 요구 사항 제거 [재시작 필요] -ModUi/&RemoveBardMagicalSecretAt14And18=14와 18에서 마법의 비밀을 제거하세요 -ModUi/&RemoveBardSongOfRest=레벨 2에서 휴식의 노래를 제거합니다. +ModUi/&RemoveBardMagicalSecretAt14And18=레벨 14와 18에서 마법의 비밀을 제거하세요 +ModUi/&RemoveBardSongOfRestAt2=레벨 2에서 휴식의 노래를 제거합니다. ModUi/&RemoveBugVisualModels=게임에서 거미와 유사한 모델을 곰과 유사한 모델로 교체 [거미공포증] [재시작 필요] ModUi/&RemoveHumanoidFilterOnHideousLaughter=끔찍한 웃음에서 인간형 필터를 제거하세요 ModUi/&RemoveRecurringEffectOnEntangle=시전 시에만 얽힘 효과를 적용하고 덩굴에서 벗어나기 위해 힘 검사를 강제로 시행합니다. ModUi/&RemoveRogueBlindSense=레벨 14에서 맹감각 제거 -ModUi/&RemoveSchoolRestrictionsFromShadowCaster=섀도우캐스터의 학교 제한을 해제하세요 -ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Spellblade에서 학교 제한을 해제하세요 +ModUi/&RemoveSchoolRestrictionsFromShadowCaster=섀도우캐스터에서 학교 제한을 제거하세요 +ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Spellblade에서 학교 제한을 제거하세요 ModUi/&RestockAntiquarians=골동품점 재고 보충 [할먼 서머] ModUi/&RestockArcaneum=아르케네움 재보급 [헤들론 슈어스펠] ModUi/&RestockCircleOfDanantar=다난타르 서클 재입고 [조리엘 폭스아이] @@ -307,15 +309,13 @@ ModUi/&StockHugoStoreWithAdditionalFoci=비전 지팡이, ModUi/&Subclasses=서브클래스 ModUi/&Subraces=아종 ModUi/&SwapAbjurationSavant=Abjurer Abjuration Savant를 5e 2024 버전과 교환하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] -ModUi/&SwapCraftedItemAndRecipeIcons=+ 상점에서 레시피와 제작 아이템 아이콘 교환ModUi/&SwapEvocationSavant=Evoker Evocation Savant를 5e 2024 버전으로 교체하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] -ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=무기 숙련도를 5e 2024 버전으로 바꾸세요 [무기 유형 대신 단순 무기를 사용하지만, 곡도 숙련도는 잃습니다] -ModUi/&SwapEvocationPotentCantripAndSculptSpell=소환사 조각 주문과 강력한 주문 기능을 교체하세요 +ModUi/&SwapCraftedItemAndRecipeIcons=+ 상점에서 레시피와 제작 아이템 아이콘 교환 +ModUi/&SwapDruidToUseOneDndWeaponProficiency=간단한 무기 숙련도를 활성화합니다. [개별 무기 유형 대신 검 숙련도를 잃습니다] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=진행 중 소환사 조각 주문과 강력한 주문을 교체하세요. ModUi/&SwapEvocationSavant=Evoker Evocation Savant를 5e 2024 버전으로 교체하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] -ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=비무장 공격을 5e 2024 주사위 유형 진행을 사용하도록 바꾸세요. -ModUi/&EnableOneDndBarkskinSpell=Barkskin을 5e 2024 버전 [보너스 액션, 집중 없음, AC 17로 설정]과 교환하세요 -ModUi/&EnableOneDndGuidanceSpell=가이드를 5e 2024 버전으로 바꾸세요 [시전 시 스킬 하나를 선택하면 최대 1분 동안 보너스를 받습니다.] -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Second Wind를 5e 2024 사용 진행을 사용하도록 바꾸세요. -ModUi/&SwapWarlockToUseOneDndInvocationProgression=Invocations 진행을 5e 2024 버전으로 바꾸세요 +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=비무장 공격을 활성화하여 5e 2024 주사위 유형 진행을 사용합니다. +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Second Wind를 활성화하여 5e 2024 사용 진행을 사용하세요. +ModUi/&SwapWarlockToUseOneDndInvocationProgression=5e 2024 진행을 사용하려면 호출을 활성화하세요. ModUi/&TableTopButton=테이블탑 콘텐츠 선택 ModUi/&TableTopHelp1=• 다음 섹션은 편의를 위해 모드 전체에 분산된 5e 2014 및 2024 설정을 다시 그룹화하고 복제합니다. ModUi/&TableTopHelp2=• 캐릭터 탭에서 테이블탑 콘텐츠만 선택하려면 버튼을 누르고, 진정한 TT 경험을 위해 아래의 모든 옵션을 선택하세요. @@ -333,7 +333,7 @@ ModUi/&UseAlternateSpellPointsSystem=변형 주문 포인트[L01: 04 L02: 06 L03: 14 L04: 17 L05: 27 L06: 32 L07: 38 L08: 44 L09: 57 L10: 64\nL11: 73 L12: 73 L13: 83 L14: 83 L15: 94 L16: 94 L17: 107 L18: 114 L19: 123 L20: 133\n주문 시전 비용은 SL1: 2 SL2: 3 SL3: 5 SL4: 6 SL5: 7 SL6: 9 SL7: 10 SL8: 11 SL9: 13\n이 시스템에서는 짧은 휴식 슬롯 회복 기능이 작동하지 않습니다] ModUi/&UseElfFaceModelsOnTieflings=티플링에 엘프 얼굴 모델을 사용하세요 ModUi/&UseHeightOneCylinderEffect=검은 촉수, 얽힘, 기름 [사각형] 또는 스파이크 성장 [둥근 모양]을 시전할 때 높이 1의 원통 효과를 사용하세요. -ModUi/&UseMathFlankingRules=+ 정확한 수학을 사용하여 플랭킹을 결정합니다. [느린 컴퓨터에서는 성능에 영향을 미칠 수 있음] +ModUi/&UseMathFlankingRules=+ 정확한 수학을 사용하여 플랭킹을 결정합니다. [느린 컴퓨터의 경우 성능에 영향을 미칠 수 있음] ModUi/&UseOfficialAdvantageDisadvantageRules=이점/단점 규칙을 활성화합니다. [두 가지가 모두 나타나는 상황이 발생하면 두 가지 모두 없는 것으로 간주됩니다] ModUi/&UseOfficialFlankingRules=측면 공격 규칙 활성화 [아군이 타겟의 반대편에 있는 경우 공격자가 유리함] ModUi/&UseOfficialFlankingRulesAlsoForRanged=+ 원거리 공격에도 활성화 [정밀한 수학 비활성화] diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Feats/Caster-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Feats/Caster-pt-BR.txt index 781b7b5c5e..cd9aacedf0 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Feats/Caster-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Feats/Caster-pt-BR.txt @@ -4,7 +4,7 @@ Feat/&FeatAegisTouchedIntDescription=Aumente seu atributo Inteligência em 1, at Feat/&FeatAegisTouchedIntTitle=Égide Tocada [Int] Feat/&FeatAegisTouchedWisDescription=Aumente seu atributo Sabedoria em 1, até um máximo de 20.\nVocê ganha a habilidade de conjurar as magias escudo da fé, proteção contra o mal e o bem e proteção contra veneno uma vez por descanso longo, e você pode conjurar essas magias com seus espaços de magia. Feat/&FeatAegisTouchedWisTitle=Égide Tocada [Sab] -Feat/&FeatCelestialTouchedChaDescription=Aumente seu atributo Carisma em 1, até um máximo de 20.\nVocê ganha a habilidade de lançar a palavra de cura, curar ferimentos e restauração menor magias uma vez por descanso longo, e você pode lançar essas magias com seus espaços de magia. +Feat/&FeatCelestialTouchedChaDescription=Aumente seu atributo Carisma em 1, até um máximo de 20.\nVocê ganha a habilidade de lançar a palavra de cura, curar ferimentos e restauração menor magias uma vez por descanso longo, e você pode lançar essas magias com seus espaços de magia. Feat/&FeatCelestialTouchedChaTitle=Celestial Tocado [Cha] Feat/&FeatCelestialTouchedIntDescription=Aumente seu atributo Inteligência em 1, até um máximo de 20.\nVocê ganha a habilidade de conjurar as magias palavra de cura, curar ferimentos e restauração menor uma vez por descanso longo, e você pode conjurar essas magias com seus espaços de magia. Feat/&FeatCelestialTouchedIntTitle=Tocado Celestial [Int] diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 239514a499..6d5139311f 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -88,6 +88,7 @@ Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=Você tem Vantagem em Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=Escuridão Perceptiva Feature/&AlwaysBeardDescription={0}% de chances de deixar uma barba gloriosa crescer! Feature/&AncestryLevelUpDraconicDescription=Sua ancestralidade dracônica lhe dá afinidade com o tipo de dano {0}. +Feature/&AttackModifierMonkMartialArtsExtendedDescription=Você pode rolar um d6 no lugar do dano normal do seu ataque desarmado ou arma de monge enquanto não estiver usando nenhuma armadura ou escudo. Este dado muda conforme você ganha níveis de monge (d8 no 5º nível, d10 no 11º nível). Você pode usar destreza em vez de força para as jogadas de ataque e dano dos seus ataques desarmados e armas de monge. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusDescription=Você pode fazer um ataque desarmado como uma ação bônus. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=Artes Marciais - Ataque Desarmado Bônus Feature/&AttributeModifierDazzledTitle=Deslumbrado @@ -197,8 +198,6 @@ Feature/&PowerTeleportSummonDescription=Você pode se teletransportar para qualq Feature/&PowerTeleportSummonTitle=Teleporte Feature/&PowerVanishSummonDescription=Você pode fazer sua invocação desaparecer. Feature/&PowerVanishSummonTitle=Desaparecer -Feature/&PowerWarlockMagicalCunningDescription=Você pode usar sua ação bônus para recuperar um número de slots de pacto gastos não mais do que igual à metade do seu máximo (arredondado para cima). Depois de usar esse recurso, você não pode fazer isso novamente até terminar um descanso longo. -Feature/&PowerWarlockMagicalCunningTitle=Astúcia Mágica Feature/&ToolGainChoicesPluralDescription=Escolha {0} destas ferramentas: {1} Feature/&ToolGainChoicesSingleDescription=Escolha uma destas ferramentas: {1} Feature/&VisionBlindsightDescription=Você tem visão cega. @@ -349,8 +348,6 @@ Tooltip/&PreReqMustKnow=Preciso saber {0} Tooltip/&Tag9000Title=Efeito personalizado Tooltip/&TagDamageChaosBoltTitle=Dano Caótico Tooltip/&TagUnfinishedBusinessTitle=Negócios inacabados -Tooltip/&TargetMustNotBeSurprised=O alvo não deve ser surpreendido -Tooltip/&TargetMustUnderstandYou=O alvo deve entender seu comando UI/&CustomFeatureSelectionStageDescription=Selecione recursos extras para sua classe/subclasse. UI/&CustomFeatureSelectionStageFeatures=Características UI/&CustomFeatureSelectionStageNotDone=Você deve selecionar todos os recursos disponíveis antes de prosseguir diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index cd171ae01f..9c1955a4bb 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -4,8 +4,8 @@ ModUi/&AddAllToStore=Adicione abaixo às lojas [estas são rec ModUi/&AddBleedingToLesserRestoration=Adicione a condição Sangramento àquelas removidas por Maior e Menor Restauração ModUi/&AddCustomIconsToOfficialItems=Adicionar ícones personalizados aos itens oficiais do jogo [munição, receitas, kits, etc.] [Requer reinicialização] ModUi/&AddDarknessPerceptiveToDarkRaces=Habilitar Percepção da Escuridão em Elfo Escuro, Kobold Escuro e Anão Cinzento \n[concede vantagem em testes de percepção quando apagado ou sob escuridão mágica] -ModUi/&AddDexModifierToEnemiesInitiativeRoll=Adicione modificador de DEX aos inimigos Teste de Iniciativa -ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Adicione Ordem Primordial no nível 1 e remova Proficiência em Armadura Média +ModUi/&AddDexModifierToEnemiesInitiativeRoll=Adicione modificador de DEX aos inimigos Rolagem de Iniciativa +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Habilite Ordem Primordial no nível 1 e remova Proficiência em Armadura Média ModUi/&AddFighterLevelToIndomitableSavingReroll=Adicione o nível de classe como um bônus para a nova jogada de resistência de Resistência Indomável ModUi/&AddHumanoidFavoredEnemyToRanger=Habilitar inimigos preferenciais Humanoides ModUi/&AddNewWeaponsAndRecipesToShops=Adicionar novas armas e receitas às lojas [bandagens de mão, alabardas, lanças, maças longas, bestas de mão] [Requer reinicialização] @@ -16,13 +16,13 @@ ModUi/&AddToStore=Adicionar {0} ModUi/&Advanced=Avançado: [Requer reinicialização] ModUi/&AdvancedHelp=• ATENÇÃO: Essas configurações exigirão que o jogador tenha este mod instalado ModUi/&AllowAllPlayersOnNarrativeSequences=+ Permitir todos os jogadores em sequências narrativas -ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permitir que aliados percebam GloomStalker quando na escuridão natural +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permitir que aliados percebam GloomStalker quando na escuridão natural ModUi/&AllowAnyClassToWearSylvanArmor=Permitir que qualquer classe use Armadura Silvestre ou Roupas de Portador da Luz ModUi/&AllowBladeCantripsToUseReach=Permitir que Blade Cantrips usem alcance em vez de 5 pés ModUi/&AllowClubsToBeThrown=Permitir que Clubs sejam lançados como Daggers ou Hand Axes ModUi/&AllowDisplayingNonSuggestedSpells=Permitir mod feitiços não sugeridos em cada lista ModUi/&AllowDisplayingOfficialSpells=Permitir magias oficiais do jogo em cada lista -ModUi/&AllowDruidToWearMetalArmor=Permitir que Druida use armadura de metal +ModUi/&AllowDruidToWearMetalArmor=Remover restrições de Armadura de Metal ModUi/&AllowDungeonsMaxLevel20=Permitir masmorras com nível máximo 20 ModUi/&AllowFlightSuspend=Permitir a suspensão temporária do voo de itens e magias [não afeta raças selvagens ou voadoras] ModUi/&AllowGadgetsAndPropsToBePlacedAnywhere=Habilitar clique CTRL para ignorar qualquer verificação ao colocar gadgets ou adereços @@ -67,8 +67,8 @@ ModUi/&DisableCastSpellPreRequisitesOnModFeats=Desabilitar pré-requisitos de co ModUi/&DisableClassPrerequisitesOnModFeats=Desabilitar pré-requisitos de nível em talentos ModUi/&DisableMultilineSpellOffering=Desabilitar oferta de magia multi-linha na barra de ação [principalmente para usuários de controle que usam heróis não multicaster] ModUi/&DisableRacePrerequisitesOnModFeats=Desabilitar pré-requisitos de corrida em talentos -ModUi/&DisableSenseDarkVisionFromAllRaces=Desabilitar Sense Dark Vision de todas as raças jogáveis [Requer reinicialização] -ModUi/&DisableSenseSuperiorDarkVisionFromAllRaces=Desabilitar Sentido Superior de Visão no Escuro de todas as raças jogáveis [Requer reinicialização] +ModUi/&DisableSenseDarkVisionFromAllRaces=Desabilitar Sense Dark Vision de todas as raças jogáveis ​​[Requer reinicialização] +ModUi/&DisableSenseSuperiorDarkVisionFromAllRaces=Desabilitar Sentido Superior de Visão no Escuro de todas as raças jogáveis ​​[Requer reinicialização] ModUi/&DisableUnofficialTranslations=Desabilite o suporte a traduções não oficiais para acelerar o mod [a menos que eu fale chinês, italiano, japonês, coreano ou espanhol] ModUi/&DisplayAllKnownSpellsDuringLevelUp=+ Exibe todas as magias conhecidas de outras classes durante o aumento de nível ModUi/&DisplayPactSlotsOnSpellSelectionPanel=+ Exibir espaços de pacto Warlock na seleção de magia em vez do painel de personagem @@ -124,7 +124,7 @@ ModUi/&EnableFighterWeaponSpecialization=Habilite Especializaçã ModUi/&EnableFlexibleBackgrounds=Habilitar fundos flexíveis [selecione habilidades e proficiências em ferramentas dos fundos] ModUi/&EnableFlexibleRaces=Habilitar raças flexíveis [atribuir pontos de habilidade em vez dos padrões raciais] ModUi/&EnableGrappleAction=Habilitar a ação Grapple -ModUi/&EnableHelpAction=Habilite a ação Ajuda [você pode ajudar uma criatura aliada a atacar uma criatura dentro de 1 célula de você] +ModUi/&EnableHelpAction=Habilite a ação Ajudar [você pode ajudar uma criatura aliada a atacar uma criatura dentro de 1 célula de você] ModUi/&EnableHeroWithBestProficiencyToRollChoice=Permita que o herói com melhor proficiência role escolhas de diálogo [funciona, mas as narrações parecem estranhas em campanhas oficiais] ModUi/&EnableHigherGroundRules=Habilitar regras de terreno mais alto [+1 para acertar se estiver atacando de um terreno mais alto] ModUi/&EnableInventoryFilteringAndSorting=Habilitar filtragem e classificação de inventário @@ -146,7 +146,9 @@ ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Habilitar Defe ModUi/&EnableMonkWeaponSpecialization=Habilite Especialização em Armas nos níveis 2 e 11 [o tipo de arma selecionado se torna uma arma de monge para você] ModUi/&EnableMulticlass=Habilitar multiclasse [Requer reinicialização] ModUi/&EnableOneDnDPreparedSpellsTables=Permitir que todos os Conjuradores usem novas tabelas de magias preparadas [Bardo, Clérigo, Druida, Paladino, Patrulheiro, Feiticeiro, Mago] -ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar bônus de dados de cura em Curar Ferimentos, Palavra de Cura, Curar Ferimentos em Massa e Palavra de Cura em Massa +ModUi/&EnableOneDndBarkskinSpell=Habilitar Barkskin versão de magia 5e 2024 [ação bônus, sem concentração, CA definida como 17] +ModUi/&EnableOneDndGuidanceSpell=Habilitar Orientação versão de magia 5e 2024 [Escolha uma habilidade na conjuração e ganhe bônus por até 1 minuto.] +ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar Curar Ferimentos, Palavra de Cura, Curar Ferimentos em Massa e Palavra de Cura em Massa versão de feitiços 5e 2024 ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Impor as Mãos como ação bônus ModUi/&EnablePaladinSmiteAsBonusAction=Habilitar Smite como ação bônus ModUi/&EnablePaladinSpellCastingAtLevel1=Habilitar conjuração de feitiços no nível 1 em vez de 2 @@ -172,16 +174,16 @@ ModUi/&EnableSumD20OnAlternateVotingSystem=+ Além disso, cada herói adicion ModUi/&EnableSurprisedToEnforceDisadvantage=Habilitar a condição Surpreso para impor desvantagem de iniciativa em vez de pular uma rodada ModUi/&EnableTeleportToRemoveRestrained=Habilitar Teletransporte para remover todas as condições restritas do alvo ModUi/&EnableTooltipDistance=Habilitar a exibição da distância nas dicas de ferramentas ao passar o mouse sobre um personagem em combate -ModUi/&EnableUnarmedMainAttackAction=Habilitar a ação Ataque Desarmado [se o ator tiver arma principal, for um Monge ou tiver bandanas ou manoplas equipadas] +ModUi/&EnableUnarmedMainAttackAction=Habilitar a ação Ataque Desarmado [se o ator tiver uma arma principal, for um Monge ou tiver bandanas ou manoplas equipadas] ModUi/&EnableUpcastConjureElementalAndFey=Habilitar upcast de Conjure Elemental e Conjure Fey -ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posição variáveis em descrições [usar {VARIABLE_NAME} como marcador de posição] +ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posição variáveis ​​em descrições [usar {VARIABLE_NAME} como marcador de posição] ModUi/&EnableWarlockMagicalCunningAtLevel2=Habilitar Astúcia Mágica no nível 2 ModUi/&EnableWizardToLearnScholarAtLevel2=Habilitar Scholar no nível 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Habilitar Escola de Magia no nível 3 em vez de 2 ModUi/&EnablesAsiAndFeat=Habilitar aumento de pontuação de atributos e seleção de talentos [em vez de uma escolha exclusiva] ModUi/&EncounterPercentageChance=Defina chances percentuais de encontros aleatórios ModUi/&Encounters=Encontros -ModUi/&EnemiesAlwaysRollInitiative=+ Os inimigos sempre rolam iniciativa em vez de um valor forçado [por exemplo: Sorak Assassin] +ModUi/&EnemiesAlwaysRollInitiative=+ Os inimigos sempre rolam a iniciativa em vez de um valor forçado [por exemplo: Sorak Assassin] ModUi/&ExpandAll=Expandir tudo ModUi/&FactionHelp=Carregue um jogo de campanha oficial para modificar as relações de facção... ModUi/&FactionRelations=Facções: @@ -190,7 +192,7 @@ ModUi/&FeatGroups=Grupos de talentos ModUi/&FeatGroupsHelp=• Cada grupo é uma consolidação de talentos semelhantes [por exemplo: credos, estilos de luta, metamagia, etc.]\n• Os talentos nesses grupos não serão mais diretamente visíveis no estágio de seleção de proficiência\n• O grupo, quando selecionado, os oferece em uma lista suspensa para organizar a tela do jogo ModUi/&Feats=Feitos ModUi/&FightingStyles=Estilos de luta -ModUi/&FixAsianLanguagesTextWrap=Corrigir quebra de texto da IU do jogo em idiomas asiáticos [Requer reinicialização] +ModUi/&FixAsianLanguagesTextWrap=Corrigir quebra de texto da interface do usuário do jogo em idiomas asiáticos [Requer reinicialização] ModUi/&FixEldritchBlastRange=Use o intervalo de 24 células com Explosão Eldritch [em vez de 12] ModUi/&FixRingOfRegenerationHealRate=Defina a taxa de cura do Anel de Regeneração para 1 HP a cada 3 minutos ModUi/&FlightSuspendWingedBoots=+ Use as regras oficiais das Botas Aladas [duração restante não contada quando o voo é suspenso] @@ -252,20 +254,20 @@ ModUi/&OverridePartySize=Substituir o tamanho do grupo ModUi/&Patches=Correções: ModUi/&PortraitsOpenFolder=Abrir pasta de retratos ModUi/&PrimedItems=Itens preparados -ModUi/&QuickCastLightCantripOnWornItemsFirst=Habilite o lançamento rápido Light Cantrip para usar itens usados na cabeça, pescoço ou tronco primeiro +ModUi/&QuickCastLightCantripOnWornItemsFirst=Habilite o lançamento rápido Light Cantrip para usar itens usados ​​na cabeça, pescoço ou tronco primeiro ModUi/&RaceLightSensitivityApplyOutdoorsOnly=Habilite Sensibilidade à Luz em Darkelf, Dark Kobold e Gray Dwarf para serem acionados somente em ambientes externos\n[áreas internas em locais externos acessíveis sem uma tela de carregamento são consideradas externas pelo mecanismo do jogo] ModUi/&Races=Corridas ModUi/&RecipeCost=Custo da receita ModUi/&RelicForgeries=Falsificações de relíquias ModUi/&RemoveAttunementRequirements=Remover requisitos de sintonização [Requer reinicialização] -ModUi/&RemoveBardMagicalSecretAt14And18=Remova Segredo Mágico em 14 e 18 -ModUi/&RemoveBardSongOfRest=Remova Canção do Descanso no nível 2 +ModUi/&RemoveBardMagicalSecretAt14And18=Remova Segredo Mágico nos níveis 14 e 18 +ModUi/&RemoveBardSongOfRestAt2=Remova Canção do Descanso no nível 2 ModUi/&RemoveBugVisualModels=Substitua modelos semelhantes a aranhas por modelos semelhantes a ursos no jogo [aracnofobia] [Requer reinicialização] -ModUi/&RemoveHumanoidFilterOnHideousLaughter=Remover filtro humanoide em Risada Hedionda +ModUi/&RemoveHumanoidFilterOnHideousLaughter=Remova o filtro humanoide em Risada Hedionda ModUi/&RemoveRecurringEffectOnEntangle=Aplique o efeito Entangle somente no momento do lançamento e também force um teste de força para se libertar das videiras ModUi/&RemoveRogueBlindSense=Remova Sentido Cego no nível 14 -ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Remover restrições escolares de Shadowcaster -ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Remover restrições escolares de Spellblade +ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Remover restrições escolares de Shadowcaster +ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Remover restrições escolares de Spellblade ModUi/&RestockAntiquarians=Reabastecer Antiquários [Verão Halman] ModUi/&RestockArcaneum=Reabastecer Arcaneum [Heddlon Surespell] ModUi/&RestockCircleOfDanantar=Reabastecer Círculo de Danantar [Joriel Foxeye] @@ -280,14 +282,14 @@ ModUi/&SelectSuggested=Selecione Sugerido ModUi/&SelectTabletop=Selecione Mesa ModUi/&SenseNormalVisionRangeMultiplier=Modificar alcance da Visão Normal [somente em batalhas] ModUi/&Services=Serviços -ModUi/&SetBeltOfDwarvenKindBeardChances=Cinturão da raça dos anões chance de aparecimento de barba +ModUi/&SetBeltOfDwarvenKindBeardChances=Cinturão da Espécie Anã chance de aparecimento de barba ModUi/&SettingsExport=Exportar ModUi/&SettingsHelp=• Como host, você pode exportar sua configuração atual, abrir a pasta de exportações e compartilhar facilmente com seus colegas\n• Como convidado, você pode abrir a pasta de exportações, colar o arquivo compartilhado do host e carregá-lo [Requer reinicialização] ModUi/&SettingsLoad=• Carregar uma configuração exportada ModUi/&SettingsOpenFolder=Abrir pasta de configurações exportadas ModUi/&SettingsRefresh=Atualizar ModUi/&SettingsRemove=Remover -ModUi/&ShowButtonWithControlledMonsterInfo=Mostrar botão que abre informações sobre o monstro controlado [druidas de formato selvagem, invocações, seguidores de NPCs, etc.] +ModUi/&ShowButtonWithControlledMonsterInfo=Mostrar botão que abre informações sobre monstros controlados [druidas de formato selvagem, invocações, seguidores de NPCs, etc.] ModUi/&ShowChannelDivinityOnPortrait=Mostre quantos usos de Canalizar Divindade um herói tem em seu retrato, semelhante a pontos de feitiçaria ModUi/&ShowCraftedItemOnRecipeIcon=Mostrar ícone de item criado próximo ao item de receita na loja e no inventário [Passar o mouse sobre ele mostrará a dica de ferramenta para o item criado] ModUi/&ShowCraftingRecipeInDetailedTooltips=Mostrar receita de criação em dicas de ferramentas detalhadas @@ -307,15 +309,13 @@ ModUi/&StockHugoStoreWithAdditionalFoci=Estoque a loja de Hugo com Subclasses ModUi/&Subraces=Sub-raças ModUi/&SwapAbjurationSavant=Troque Abjurador Sábio da Abjuração pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] -ModUi/&SwapCraftedItemAndRecipeIcons=+ Troque ícones de receitas e itens criados na lojaModUi/&SwapEvocationSavant=Troque Evocador Sábio da Evocação pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] -ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=Troque Proficiência em Arma pela versão 5e 2024 [armas simples em vez de tipos de armas, mas você perde a proficiência em Cimitarra] -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Troque os recursos Evocador Magias de Esculpir e Truque Potente +ModUi/&SwapCraftedItemAndRecipeIcons=+ Troque ícones de receitas e itens criados na loja +ModUi/&SwapDruidToUseOneDndWeaponProficiency=Habilitar proficiência em Armas Simples [em vez de tipos de armas individuais, mas você perde proficiência em Cimitarra] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Troque Evocador Magias de Esculpir e Truque Potente na progressão ModUi/&SwapEvocationSavant=Troque Evocador Sábio da Evocação pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] -ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Troque Ataque Desarmado para usar a progressão do tipo de dado 5e 2024 -ModUi/&EnableOneDndBarkskinSpell=Troque Barkskin pela versão 5e 2024 [ação bônus, sem concentração, CA definida como 17] -ModUi/&EnableOneDndGuidanceSpell=Troque Orientação pela versão 5e 2024 [Escolha uma habilidade na conjuração e ganhe bônus por até 1 minuto.] -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Troque Segundo Vento para usar a progressão de usos do 5e 2024 -ModUi/&SwapWarlockToUseOneDndInvocationProgression=Troque a progressão de Invocações pela versão 5e 2024 +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Habilitar Ataque Desarmado para usar a progressão do tipo de dado 5e 2024 +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Habilitar Second Wind para usar a progressão de usos do 5e 2024 +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Habilitar Invocações para usar a progressão 5e 2024 ModUi/&TableTopButton=Selecionar conteúdo de mesa ModUi/&TableTopHelp1=• As seções a seguir reagrupam e duplicam as configurações 5e 2014 e 2024 espalhadas pelo mod para sua conveniência ModUi/&TableTopHelp2=• Pressione o botão para selecionar apenas o conteúdo da mesa na aba Personagem e selecione todas as opções abaixo para uma verdadeira experiência TT diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 774ffd3733..c4821b2059 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -88,6 +88,7 @@ Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=Вы совершае Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=Восприятие тьмы Feature/&AlwaysBeardDescription=Шанс {0}% отрастить великолепную бороду! Feature/&AncestryLevelUpDraconicDescription=Ваше драконье наследие роднит вас со стихией {0}. +Feature/&AttackModifierMonkMartialArtsExtendedDescription=Вы можете бросить d6 вместо обычного урона от безоружного удара или монашеского оружия, не надевая доспехи или щита. Этот кубик меняется по мере получения вами уровней монаха (d8 на 5-м уровне, d10 на 11-м уровне). Вы можете использовать ловкость вместо силы для бросков атаки и урона от безоружных ударов и монашеского оружия. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusDescription=Бонусным действием вы можете совершить один безоружный удар. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=Боевые искусства — бонусный безоружный удар Feature/&AttributeModifierDazzledTitle=Ослеплён @@ -197,8 +198,6 @@ Feature/&PowerTeleportSummonDescription=Вы можете телепортиро Feature/&PowerTeleportSummonTitle=Телепортироваться Feature/&PowerVanishSummonDescription=Вы можете заставить призванное существо исчезнуть. Feature/&PowerVanishSummonTitle=Исчезновение -Feature/&PowerWarlockMagicalCunningDescription=Вы можете использовать бонусное действие, чтобы восстановить количество использованных слотов пакта, не более половины вашего максимума (округлять вверх). После того, как вы воспользуетесь этой функцией, вы не сможете сделать это снова, пока не закончите длительный отдых. -Feature/&PowerWarlockMagicalCunningTitle=Магическая хитрость Feature/&ToolGainChoicesPluralDescription=Выберите {0} из этих инструментов: {1} Feature/&ToolGainChoicesSingleDescription=Выберите один из этих инструментов: {1} Feature/&VisionBlindsightDescription=Вы обладаете слепым зрением. @@ -349,8 +348,6 @@ Tooltip/&PreReqMustKnow=Должен знать {0} Tooltip/&Tag9000Title=Кастомный эффект Tooltip/&TagDamageChaosBoltTitle=Хаотичный урон Tooltip/&TagUnfinishedBusinessTitle=Неоконченное Дело -Tooltip/&TargetMustNotBeSurprised=Цель не должна быть застигнута врасплох -Tooltip/&TargetMustUnderstandYou=Цель должна понимать ваш приказ UI/&CustomFeatureSelectionStageDescription=Выберите дополнительные черты для вашего класса/архетипа. UI/&CustomFeatureSelectionStageFeatures=Черты UI/&CustomFeatureSelectionStageNotDone=Вы должны выбрать все черты перед продолжением diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 0d0cff9e59..249d4551e4 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -88,6 +88,7 @@ Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=在未点亮或处于 Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=黑暗感知 Feature/&AlwaysBeardDescription={0}% 的机会长出漂亮的胡子! Feature/&AncestryLevelUpDraconicDescription=你的龙类血统赋予你对 {0} 伤害类型的亲和。 +Feature/&AttackModifierMonkMartialArtsExtendedDescription=您可以在不穿任何盔甲或盾牌的情况下掷出 d6 来代替徒手攻击或僧侣武器的正常伤害。随着您获得僧侣等级(5 级时为 d8,11 级时为 d10),此骰子会发生变化。您可以使用敏捷代替力量来进行徒手攻击和僧侣武器的攻击和伤害掷骰。 Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusDescription=你可以以附赠动作进行一次徒手攻击。 Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=武术 - 额外徒手打击 Feature/&AttributeModifierDazzledTitle=AC Penalty @@ -197,8 +198,6 @@ Feature/&PowerTeleportSummonDescription=你可以传送到施法者 5 尺以内 Feature/&PowerTeleportSummonTitle=传送 Feature/&PowerVanishSummonDescription=你可以让你的召唤物消失。 Feature/&PowerVanishSummonTitle=消失 -Feature/&PowerWarlockMagicalCunningDescription=你可以使用奖励行动来恢复已消耗的契约槽数量,但不超过最大值的一半(向上取整)。一旦你使用此功能,你就不能再这样做,直到你完成一次长休。 -Feature/&PowerWarlockMagicalCunningTitle=魔法狡猾 Feature/&ToolGainChoicesPluralDescription=从这些工具中选择 {0}:{1} Feature/&ToolGainChoicesSingleDescription=选择以下工具之一:{1} Feature/&VisionBlindsightDescription=你有盲视。 @@ -349,8 +348,6 @@ Tooltip/&PreReqMustKnow=需要已知 {0} Tooltip/&Tag9000Title=自定义效果 Tooltip/&TagDamageChaosBoltTitle=混沌伤害 Tooltip/&TagUnfinishedBusinessTitle=未竟之业 -Tooltip/&TargetMustNotBeSurprised=目标不能感到惊讶 -Tooltip/&TargetMustUnderstandYou=目标必须理解你的命令 UI/&CustomFeatureSelectionStageDescription=为你的职业/子职业选择额外的特性。 UI/&CustomFeatureSelectionStageFeatures=专长 UI/&CustomFeatureSelectionStageNotDone=在继续之前,你必须选择所有可用特性 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 1bea03b260..dec1c05ea9 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -1,11 +1,11 @@ ModUi/&AccountForAllDiceOnFollowUpStrike=将基础武器的所有附加效果添加到后续打击专长中 ModUi/&AccountForAllDiceOnSavageAttack=将基础武器伤害中的所有骰子添加到添加基础武器伤害的功能中,而不仅仅是 1 个骰子[野蛮攻击、双手武器等] -ModUi/&AddAllToStore=添加到以下商店[这些是其他武器类别上重复使用的游戏配方] +ModUi/&AddAllToStore=添加到商店[这些是其他武器类别上重复使用的游戏配方] ModUi/&AddBleedingToLesserRestoration=将出血状况添加到较大和较小恢复所消除的状况中 ModUi/&AddCustomIconsToOfficialItems=为官方游戏物品添加自定义图标[弹药、配方、工具包等] [需要重启] ModUi/&AddDarknessPerceptiveToDarkRaces=对暗精灵、黑暗狗头人和灰矮人启用黑暗感知 \n[在无光或在魔法黑暗下时在感知检查上获得优势] ModUi/&AddDexModifierToEnemiesInitiativeRoll=为敌人添加 DEX 修正值主动掷骰 -ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=在 1 级添加 原始秩序 并移除 中等护甲熟练度 +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=在 1 级启用原始秩序并移除中等护甲熟练度 ModUi/&AddFighterLevelToIndomitableSavingReroll=将职业等级作为奖励添加到不屈抵抗豁免检定重掷中 ModUi/&AddHumanoidFavoredEnemyToRanger=启用人形首选敌人 ModUi/&AddNewWeaponsAndRecipesToShops=在商店中添加新武器和配方[手套、戟、长矛、长锤、手弩] [需要重启] @@ -16,13 +16,13 @@ ModUi/&AddToStore=添加 {0} ModUi/&Advanced=高级: [需要重启] ModUi/&AdvancedHelp=• 注意:这些设置需要玩家安装此模组 ModUi/&AllowAllPlayersOnNarrativeSequences=+ 允许所有玩家参与叙事序列 -ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=允许盟友在自然黑暗中感知GloomStalker +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=允许盟友在自然黑暗中感知GloomStalker ModUi/&AllowAnyClassToWearSylvanArmor=允许任何职业穿戴Sylvan Armor或Lightbringer Clothes ModUi/&AllowBladeCantripsToUseReach=允许剑术戏法使用触及范围,而不是 5 英尺 -ModUi/&AllowClubsToBeThrown=允许将棍棒像匕首或手斧一样投掷 +ModUi/&AllowClubsToBeThrown=允许像投掷匕首或手斧那样投掷棍棒 ModUi/&AllowDisplayingNonSuggestedSpells=允许每个列表中的 mod 非建议咒语 ModUi/&AllowDisplayingOfficialSpells=允许每个列表中的游戏官方咒语 -ModUi/&AllowDruidToWearMetalArmor=允许德鲁伊穿戴金属盔甲 +ModUi/&AllowDruidToWearMetalArmor=删除金属装甲限制 ModUi/&AllowDungeonsMaxLevel20=允许最高等级为 20 的地下城 ModUi/&AllowFlightSuspend=允许暂时中止因物品和法术而产生的飞行[不影响野性变身或飞行种族] ModUi/&AllowGadgetsAndPropsToBePlacedAnywhere=启用CTRL单击以在放置小工具或道具时绕过任何检查 @@ -60,7 +60,7 @@ ModUi/&Critical=致命一击: ModUi/&CriticalOption0=0:游戏默认,掷任意伤害骰子两次,添加结果并添加修正[XdY+XdY+Z] ModUi/&CriticalOption1=1:将伤害骰子的最大结果相加,并将其添加到攻击的伤害中[XdY+(X*Y)+Z] ModUi/&CriticalOption2=2:继续重新掷出任何掷出最高可能结果的伤害骰子,并将其添加到总伤害中 -ModUi/&CriticalOption3=3:将攻击的总伤害加倍,而不是掷额外的骰子。[(XdY+Z)*2] +ModUi/&CriticalOption3=3:将你的攻击总伤害加倍,而不是掷额外的骰子。[(XdY+Z)*2] ModUi/&DisableAutoEquip=禁用库存中的物品自动装备 ModUi/&DisableBarbarianBrutalCritical=+ 同时禁用 9、13 和 17 级的残酷暴击 ModUi/&DisableCastSpellPreRequisitesOnModFeats=禁用 mod feats 上的施法先决条件[需要重启] @@ -114,13 +114,13 @@ ModUi/&EnableCantripsTriggeringOnWarMagic=允许戏法触发战 ModUi/&EnableCharactersOnFireToEmitLight=着火的角色应该发光[光之立方体、火元素、火小丑、火鱼鹰、火蜘蛛和着火状态家族] ModUi/&EnableCustomPortraits=启用自定义肖像 ModUi/&EnableCustomPortraitsHelp=• 将自定义肖像放在子文件夹 PersonalPreGen 下,并以英雄名字命名[例如:Anton、Celia、Nialla 等]\n• 使用 PNG 图像,大小为 256 x 384 像素,带有透明层[使用 GIMP 可获得最佳效果] -ModUi/&EnableDungeonMakerModdedContent=启用 Dungeon Maker Pro{99>[包括平面房间、150x150 和 200x200 地牢大小,以及来自所有环境的简洁混合资产] +ModUi/&EnableDungeonMakerModdedContent=启用 Dungeon Maker Pro\n[包括平面房间、150x150 和 200x200 地牢大小,以及来自所有环境的简洁混合资产] ModUi/&EnableElevationCameraToStayAtPosition=+ 战斗中启用仰角相机,禁用后可保持在原位,且范围增加三倍 -ModUi/&EnableEpicPointsAndArray=启用史诗 35 点购买系统和阵列 [17,15,13,12,10,8] [需要重启] -ModUi/&EnableExtendedProficienciesPanelDisplay=启用扩展熟练度面板显示[奥术射击、灌注、操控和多功能性]{99>[角色检查时性能受到影响。使用风险自负] +ModUi/&EnableEpicPointsAndArray=启用史诗 35 点购买系统和阵列 [17,15,13,​​12,10,8] [需要重启] +ModUi/&EnableExtendedProficienciesPanelDisplay=启用扩展熟练度面板显示[奥术射击、灌注、操控和多功能性]\n[角色检查时性能受到影响。使用风险自负] ModUi/&EnableFeatsAtEvenLevels=在 2、10 和 18 级启用专长选择 ModUi/&EnableFeatsAtEvenLevelsMiddle=在 6 级和 14 级时启用专长选择 -ModUi/&EnableFighterWeaponSpecialization=在 8 级和 16 级时启用武器专精 [命中率和伤害 +1,但使用其他武器类型时处于劣势] +ModUi/&EnableFighterWeaponSpecialization=在 8 级和 16 级时启用武器专精 [命中率和伤害力 +1,但使用其他武器类型时处于劣势] ModUi/&EnableFlexibleBackgrounds=启用灵活背景[从背景中选择技能和工具熟练程度] ModUi/&EnableFlexibleRaces=启用灵活种族[分配能力得分点而不是种族默认值] ModUi/&EnableGrappleAction=启用抓钩动作 @@ -142,11 +142,13 @@ ModUi/&EnableMonkFightingStyle=在第 2 级启用战斗风格手套和护手能够在护手槽中发挥作用 ModUi/&EnableMonkHeightenedMetabolism=在 10 级时启用增强新陈代谢 [连击耐心防御风之脚步获得额外好处] ModUi/&EnableMonkImprovedUnarmoredMovementToMoveOnTheWall=启用改进的无装甲移动以沿垂直表面移动而不会掉落 -ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=在 18 级时启用超级防御来替代空虚之身 +ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=启用超级防御来替换 18 级时的空虚之身 ModUi/&EnableMonkWeaponSpecialization=在 2 级和 11 级时启用武器专精 [所选武器类型将成为你的武僧武器] ModUi/&EnableMulticlass=启用多类 [需要重启] ModUi/&EnableOneDnDPreparedSpellsTables=允许所有施法者使用新的准备好的法术表[吟游诗人、牧师、德鲁伊、圣骑士、游侠、术士、魔法师] -ModUi/&EnableOneDndHealingSpellsUpgrade=在治愈伤口、治愈之言、群体治愈伤口和群体治愈之言上启用治疗骰子增益 +ModUi/&EnableOneDndBarkskinSpell=启用 Barkskin 5e 2024 法术版本 [奖励行动,无专注,AC 设置为 17] +ModUi/&EnableOneDndGuidanceSpell=启用Guidance 5e 2024 法术版本[施法时选择一项技能并获得最多 1 分钟的奖励。] +ModUi/&EnableOneDndHealingSpellsUpgrade=启用治疗伤口、治疗之语、群体治疗伤口和群体治疗之语法术 5e 版本 ModUi/&EnablePaladinLayOnHandsAsBonusAction=启用圣疗术作为奖励行动 ModUi/&EnablePaladinSmiteAsBonusAction=启用 Smite 作为奖励行动 ModUi/&EnablePaladinSpellCastingAtLevel1=在 1 级(而非 2 级)启用施法 @@ -155,10 +157,10 @@ ModUi/&EnableProneAction=启用倒地动作自然面纱功能[作为奖励行动,你可以神奇地隐身,直到下一回合开始] ModUi/&EnableRangerSpellCastingAtLevel1=在 1 级(而非 2 级)启用施法 -ModUi/&EnableRelearnSpells=可以选择已从其他来源学到的法术或咒语 +ModUi/&EnableRelearnSpells=可以选择已从其他来源学到的戏法或法术 ModUi/&EnableRespecAction=休息操作后启用 RESPEC [在多人游戏会话期间不要使用 RESPEC] ModUi/&EnableRitualOnAllCasters=对所有施法者启用仪式施法 -ModUi/&EnableRogueCunningStrike=在等级 5 和 14 时启用狡猾打击和阴险打击 [你放弃 1 个偷袭骰子以获得额外的命中效果] +ModUi/&EnableRogueCunningStrike=在 5 级和 14 级启用狡猾打击和阴险打击 [你放弃 1 个偷袭骰子以获得额外的命中效果] ModUi/&EnableRogueFightingStyle=在第 2 级启用战斗风格选择 ModUi/&EnableRogueSteadyAim=在 3 级时启用稳定瞄准 [如果您尚未移动,则奖励行动会在当前回合的下一次攻击掷骰中提供优势] ModUi/&EnableRogueStrSaving=在狡猾/卑鄙的打击上启用Hoodlum DEX 或 STR 修正 @@ -202,7 +204,7 @@ ModUi/&FormationHelp3=• 点击任意两个按钮即可交换其位置 ModUi/&FormationResetAllSets=全部重置 ModUi/&FormationResetThisSet=重置 ModUi/&FormationSelected=已选择阵型设置 {0} -ModUi/&FullyControlConjurations=完全控制召唤物[动物、元素等] +ModUi/&FullyControlConjurations=完全控制召唤术[动物、元素等] ModUi/&Gameplay=游戏玩法 ModUi/&General=常规: ModUi/&GeneralMenu=一般的 @@ -229,9 +231,9 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ 发现后也在关卡地图上标 ModUi/&MaxAllowedClasses=最大允许类别 ModUi/&Merchants=商家: ModUi/&Metamagic=超魔法 -ModUi/&ModifyGravitySlam=修改重力猛击法术,将受影响的目标拉下,并将其变为圆柱体而不是球体{99>[需要启用推拉运动效果才能在上/下轴上工作] +ModUi/&ModifyGravitySlam=修改重力猛击法术,将受影响的目标拉下,并将其变为圆柱体而不是球体\n[需要启用推拉运动效果才能在上/下轴上工作] ModUi/&MovementGridWidthModifier=将移动网格宽度乘以 [%] -ModUi/&MulticlassKeyHelp=SHIFT 点击一个法术会反转所消耗的默认法术槽类型{99>[术士 消耗白色法术槽,其他人消耗契约绿色法术槽] +ModUi/&MulticlassKeyHelp=SHIFT 点击一个法术会反转所消耗的默认法术槽类型\n[术士 消耗白色法术槽,其他人消耗契约绿色法术槽] ModUi/&Multiplayer=多人游戏: ModUi/&MultiplyTheExperienceGainedBy=将获得的经验乘以 [%] ModUi/&NeverMoveCameraOnEnemyTurn=+ 敌人回合时镜头永不移动 @@ -253,19 +255,19 @@ ModUi/&Patches=补丁: ModUi/&PortraitsOpenFolder=打开肖像文件夹 ModUi/&PrimedItems=Prime 物品 ModUi/&QuickCastLightCantripOnWornItemsFirst=启用快速施放Light Cantrip以首先使用头部、颈部或躯干穿戴的物品 -ModUi/&RaceLightSensitivityApplyOutdoorsOnly=启用 Darkelf、Dark Kobold 和 Gray Dwarf 上的 光敏感度,以便仅在户外触发{99>[无需加载屏幕即可进入的户外位置的室内区域被游戏引擎视为户外区域] +ModUi/&RaceLightSensitivityApplyOutdoorsOnly=启用 Darkelf、Dark Kobold 和 Gray Dwarf 上的 光敏感度,以便仅在户外触发\n[无需加载屏幕即可进入的户外位置的室内区域被游戏引擎视为户外区域] ModUi/&Races=种族 ModUi/&RecipeCost=食谱成本 ModUi/&RelicForgeries=文物伪造 ModUi/&RemoveAttunementRequirements=删除调谐要求[需要重启] -ModUi/&RemoveBardMagicalSecretAt14And18=删除 14 和 18 处的魔法秘密 -ModUi/&RemoveBardSongOfRest=删除 2 级的休息之歌 +ModUi/&RemoveBardMagicalSecretAt14And18=删除 14 级和 18 级的魔法秘密 +ModUi/&RemoveBardSongOfRestAt2=删除 2 级的休息之歌 ModUi/&RemoveBugVisualModels=在游戏中将蜘蛛类模型替换为熊类模型[蜘蛛恐惧症] [需要重启] ModUi/&RemoveHumanoidFilterOnHideousLaughter=删除Hideous Laughter上的人形过滤器 ModUi/&RemoveRecurringEffectOnEntangle=仅在施法时应用纠缠效果,并强制进行力量检查以摆脱藤蔓 ModUi/&RemoveRogueBlindSense=移除 14 级的盲感 -ModUi/&RemoveSchoolRestrictionsFromShadowCaster=删除 Shadowcaster 中的学校限制 -ModUi/&RemoveSchoolRestrictionsFromSpellBlade=删除 Spellblade 中的学校限制 +ModUi/&RemoveSchoolRestrictionsFromShadowCaster=移除Shadowcaster的学校限制 +ModUi/&RemoveSchoolRestrictionsFromSpellBlade=移除 Spellblade 的学校限制 ModUi/&RestockAntiquarians=重新进货古董商[Halman Summer] ModUi/&RestockArcaneum=重新进货秘法 [赫德隆绝法术] ModUi/&RestockCircleOfDanantar=重新进货达南塔之环 [Joriel Foxeye] @@ -288,7 +290,7 @@ ModUi/&SettingsOpenFolder=打开导出的设置文件夹 ModUi/&SettingsRefresh=刷新 ModUi/&SettingsRemove=消除 ModUi/&ShowButtonWithControlledMonsterInfo=显示打开有关控制怪物的信息的按钮[野性德鲁伊、召唤物、NPC 追随者等] -ModUi/&ShowChannelDivinityOnPortrait=在英雄肖像上显示其拥有多少次引导神性,类似于魔法点数 +ModUi/&ShowChannelDivinityOnPortrait=显示英雄肖像上有多少次引导神性,类似于魔法点数 ModUi/&ShowCraftedItemOnRecipeIcon=在商店和库存中的配方物品附近显示制作物品图标[将鼠标悬停在其上将显示制作物品的工具提示] ModUi/&ShowCraftingRecipeInDetailedTooltips=在详细的工具提示中显示制作配方 ModUi/&ShowDescriptions=显示描述 @@ -307,15 +309,13 @@ ModUi/&StockHugoStoreWithAdditionalFoci=将 奥术法杖 ModUi/&Subclasses=子类 ModUi/&Subraces=亚种 ModUi/&SwapAbjurationSavant=将Abjurer Abjuration Savant 与 5e 2024 版本交换[获得时学习 2 个学校法术,每次获得一个插槽等级时再学习 1 个] -ModUi/&SwapCraftedItemAndRecipeIcons=+ 在商店中交换配方和制作物品图标ModUi/&SwapEvocationSavant=将Evoker Evocation Savant 与 5e 2024 版本交换[获得时学习 2 个学校法术,每次获得一个插槽等级时再学习 1 个] -ModUi/&SwapDruidWeaponProficiencyToUseOneDnd=将武器熟练度与 5e 2024 版本交换[简单武器代替武器类型,但失去弯刀熟练度] -ModUi/&SwapEvocationPotentCantripAndSculptSpell=交换召唤师 塑形法术和强力法术功能 +ModUi/&SwapCraftedItemAndRecipeIcons=+ 在商店中交换配方和制作物品图标 +ModUi/&SwapDruidToUseOneDndWeaponProficiency=启用简单武器熟练度[而不是单个武器类型,但你会失去弯刀熟练度] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=在进度中交换召唤师 塑形法术和强效戏法 ModUi/&SwapEvocationSavant=将Evoker Evocation Savant 与 5e 2024 版本交换[获得时学习 2 个学校法术,每次获得一个插槽等级时再学习 1 个] -ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=切换徒手攻击以使用 5e 2024 骰子类型进程 -ModUi/&EnableOneDndBarkskinSpell=将 Barkskin 与 5e 2024 版本交换[奖励行动,无集中力,AC 设置为 17] -ModUi/&EnableOneDndGuidanceSpell=将Guidance与 5e 2024 版本交换[施法时选择一项技能并获得最多 1 分钟的奖励。] -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=交换 Second Wind 以使用 5e 2024 使用进度 -ModUi/&SwapWarlockToUseOneDndInvocationProgression=将 Invocations 进程与 5e 2024 版本交换 +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=启用徒手攻击以使用 5e 2024 骰子类型进程 +ModUi/&SwapSecondWindToUseOneDndUsagesProgression=启用 Second Wind 以使用 5e 2024 使用进度 +ModUi/&SwapWarlockToUseOneDndInvocationProgression=启用 Invocations 以使用 5e 2024 进程 ModUi/&TableTopButton=选择桌面内容 ModUi/&TableTopHelp1=• 以下部分重新分组并复制了分散在模块中的 5e 2014 和 2024 设置,以方便您使用 ModUi/&TableTopHelp2=• 按下按钮仅选择角色选项卡下的桌面内容,并选择以下所有选项以获得真正的 TT 体验 @@ -343,4 +343,4 @@ ModUi/&UseOfficialFoodRationsWeight=启用重量为 2 磅的食 ModUi/&UseOfficialObscurementRules=启用照明、遮蔽和视觉战斗规则 ModUi/&UseOfficialObscurementRulesHelp=[能感知到防御者但无法感知到攻击者的防御者会获得 ADV,无法感知到攻击者但可以感知到防御者会获得 DIS\n 被严重遮挡的区域会造成致盲状态,对生物的攻击掷骰获得 ADV,而生物的攻击掷骰获得 DIS\n 如果攻击者没有视力,则无法施放针对个人的所有远距离法术,除了那些明确未说明需要视力的法术] ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=使小型种族在使用重型武器时处于劣势 -ModUi/&WildSurgeDieRollThreshold=设置巫师狂野魔法几率骰子阈值:{99>[如果掷出的骰子小于或等于阈值,则触发狂野涌动] +ModUi/&WildSurgeDieRollThreshold=设置巫师狂野魔法几率骰子阈值:\n[如果掷出的骰子小于或等于阈值,则触发狂野涌动] From ad61560756dee5cfc585d2316a25560a8e01df87 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 18:50:44 -0800 Subject: [PATCH 59/85] update collaterals --- .../UnfinishedBusinessBlueprints/Assets.txt | 3 - .../ConditionGrappleSource.json | 2 +- .../ConditionGrappleSourceWithGrappler.json | 2 +- ...ditionGrappleSourceWithGrapplerLarger.json | 2 +- .../ConditionMonkSuperiorDefense.json | 2 + .../ConditionSorcererInnateSorcery.json | 4 +- .../ConditionWitchBolt.json | 16 +- .../ActionAffinitySorcererQuickened.json | 30 -- .../PowerSorcererInnateSorcery.json | 8 +- .../PowerWarlockMagicalCunning.json | 353 ------------------ .../SpellDefinition/KineticJaunt.json | 2 +- .../Translations/de/Settings-de.txt | 3 +- .../Translations/en/Settings-en.txt | 3 +- .../Translations/es/Settings-es.txt | 3 +- .../Translations/fr/Settings-fr.txt | 3 +- .../Translations/it/Settings-it.txt | 3 +- .../Translations/ja/Settings-ja.txt | 3 +- .../Translations/ko/Settings-ko.txt | 3 +- .../Translations/pt-BR/Settings-pt-BR.txt | 3 +- .../Translations/ru/Settings-ru.txt | 3 +- .../Translations/zh-CN/Settings-zh-CN.txt | 3 +- 21 files changed, 40 insertions(+), 414 deletions(-) delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/ActionAffinitySorcererQuickened.json delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 802371e6f9..034bff9ffe 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -1752,7 +1752,6 @@ ActionAffinityRangerWildMasterBeastCompanionDisengageMain FeatureDefinitionActio ActionAffinityRogueDeviousStrikeDazed FeatureDefinitionActionAffinity FeatureDefinition 4acf5836-6199-5c3c-8686-7d2b1ba9858f ActionAffinityRogueDeviousStrikeDazedOnlyMovement FeatureDefinitionActionAffinity FeatureDefinition 287a07de-dab8-5761-9d93-cf44c7f4ed60 ActionAffinityRoguishDuelistSwirlingDance FeatureDefinitionActionAffinity FeatureDefinition 2fc02396-1a32-57a7-a7bd-63a427dd840a -ActionAffinitySorcererQuickened FeatureDefinition FeatureDefinition 38bb8988-a558-5c0c-8145-02d893f70586 ActionAffinitySorcerousPsionMindSculpt FeatureDefinitionActionAffinity FeatureDefinition b44a69ae-520c-5492-ab2b-307fcbd5fc12 ActionAffinitySorcerousPsionSupremeWill FeatureDefinitionActionAffinity FeatureDefinition 9f270f78-1a1d-5c51-94bf-0d59799b2a98 ActionAffinitySpellShieldRangedDefense FeatureDefinitionPower FeatureDefinition cc7a8cde-d4d4-5b3b-bba0-78c87c1f0489 @@ -4027,7 +4026,6 @@ PowerUseModifierTacticianGambitPoolRemarkableTechnique FeatureDefinitionPowerUse PowerVanishSummon FeatureDefinitionPower FeatureDefinition 2e2b66aa-217d-5063-9073-32f0dca0efb1 PowerVitriolicSphere FeatureDefinitionPower FeatureDefinition 4c5d9fc8-78f1-57e9-831e-737b954d8e16 PowerWarlockEldritchMaster FeatureDefinitionPower FeatureDefinition 8d5bb433-7ede-51cb-bb6b-e04405ea891c -PowerWarlockMagicalCunning FeatureDefinitionPower FeatureDefinition 0ad289b1-119a-5b46-8458-93c9ff03b358 PowerWarMagicDeflectionShroud FeatureDefinitionPower FeatureDefinition b5c601a4-9730-5b46-b6c0-a86559e6c990 PowerWarMagicSurge FeatureDefinitionPower FeatureDefinition 9a1b80e2-b285-55c6-be5c-fcbba31faed4 PowerWayOfSilhouetteDarkness FeatureDefinitionPower FeatureDefinition fb406968-b055-586f-9a1a-2b4e4f28a8ce @@ -6899,7 +6897,6 @@ PowerTraditionSurvivalPhysicalPerfection FeatureDefinitionPower FeatureDefinitio PowerVanishSummon FeatureDefinitionPower FeatureDefinitionPower 2e2b66aa-217d-5063-9073-32f0dca0efb1 PowerVitriolicSphere FeatureDefinitionPower FeatureDefinitionPower 4c5d9fc8-78f1-57e9-831e-737b954d8e16 PowerWarlockEldritchMaster FeatureDefinitionPower FeatureDefinitionPower 8d5bb433-7ede-51cb-bb6b-e04405ea891c -PowerWarlockMagicalCunning FeatureDefinitionPower FeatureDefinitionPower 0ad289b1-119a-5b46-8458-93c9ff03b358 PowerWarMagicDeflectionShroud FeatureDefinitionPower FeatureDefinitionPower b5c601a4-9730-5b46-b6c0-a86559e6c990 PowerWarMagicSurge FeatureDefinitionPower FeatureDefinitionPower 9a1b80e2-b285-55c6-be5c-fcbba31faed4 PowerWayOfSilhouetteDarkness FeatureDefinitionPower FeatureDefinitionPower fb406968-b055-586f-9a1a-2b4e4f28a8ce diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSource.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSource.json index 14d1af0169..ce251f8f73 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSource.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSource.json @@ -69,8 +69,8 @@ "Definition:ConditionUnconscious:2d543b2740ecddd4a977d8a706a8a2c9", "Definition:ConditionBanishedByBanishment:2e051532-eaa9-5f4c-8af2-2c47b3a8f501", "Definition:ConditionBanishingSmiteEnemy:ba2fe0a0-1836-5755-af0e-876571bae0d2", - "Definition:ConditionRogueDeviousStrikeKnockOut:8276a494-262e-545d-953e-203075253407", "Definition:ConditionInvocationTombOfFrost:b433cd22-643e-528e-b1a6-c061171d5460", + "Definition:ConditionRogueDeviousStrikeKnockOut:8276a494-262e-545d-953e-203075253407", "Definition:ConditionCharmedByHypnoticPattern:5396f18314418ed449b0cd42f887aae1" ], "additionalDamageWhenHit": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSourceWithGrappler.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSourceWithGrappler.json index d5fe4f16e4..ed16629bb3 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSourceWithGrappler.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSourceWithGrappler.json @@ -68,8 +68,8 @@ "Definition:ConditionUnconscious:2d543b2740ecddd4a977d8a706a8a2c9", "Definition:ConditionBanishedByBanishment:2e051532-eaa9-5f4c-8af2-2c47b3a8f501", "Definition:ConditionBanishingSmiteEnemy:ba2fe0a0-1836-5755-af0e-876571bae0d2", - "Definition:ConditionRogueDeviousStrikeKnockOut:8276a494-262e-545d-953e-203075253407", "Definition:ConditionInvocationTombOfFrost:b433cd22-643e-528e-b1a6-c061171d5460", + "Definition:ConditionRogueDeviousStrikeKnockOut:8276a494-262e-545d-953e-203075253407", "Definition:ConditionCharmedByHypnoticPattern:5396f18314418ed449b0cd42f887aae1" ], "additionalDamageWhenHit": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSourceWithGrapplerLarger.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSourceWithGrapplerLarger.json index b931cd5293..bfd23dbab2 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSourceWithGrapplerLarger.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSourceWithGrapplerLarger.json @@ -69,8 +69,8 @@ "Definition:ConditionUnconscious:2d543b2740ecddd4a977d8a706a8a2c9", "Definition:ConditionBanishedByBanishment:2e051532-eaa9-5f4c-8af2-2c47b3a8f501", "Definition:ConditionBanishingSmiteEnemy:ba2fe0a0-1836-5755-af0e-876571bae0d2", - "Definition:ConditionRogueDeviousStrikeKnockOut:8276a494-262e-545d-953e-203075253407", "Definition:ConditionInvocationTombOfFrost:b433cd22-643e-528e-b1a6-c061171d5460", + "Definition:ConditionRogueDeviousStrikeKnockOut:8276a494-262e-545d-953e-203075253407", "Definition:ConditionCharmedByHypnoticPattern:5396f18314418ed449b0cd42f887aae1" ], "additionalDamageWhenHit": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMonkSuperiorDefense.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMonkSuperiorDefense.json index fc6a3d1a8d..e550093c1b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMonkSuperiorDefense.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMonkSuperiorDefense.json @@ -76,6 +76,8 @@ "Definition:ConditionSwallowedShamblingMound:10cc7c5600c606f43b33ab8775ebfc68", "Definition:ConditionUnconscious:2d543b2740ecddd4a977d8a706a8a2c9", "Definition:ConditionBanishedByBanishment:2e051532-eaa9-5f4c-8af2-2c47b3a8f501", + "Definition:ConditionBanishingSmiteEnemy:ba2fe0a0-1836-5755-af0e-876571bae0d2", + "Definition:ConditionInvocationTombOfFrost:b433cd22-643e-528e-b1a6-c061171d5460", "Definition:ConditionCharmedByHypnoticPattern:5396f18314418ed449b0cd42f887aae1" ], "additionalDamageWhenHit": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererInnateSorcery.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererInnateSorcery.json index 3792ec5d35..1429734d91 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererInnateSorcery.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererInnateSorcery.json @@ -134,8 +134,8 @@ "description": "Condition/&ConditionSorcererInnateSorceryDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "6f6332b4e90598d429c91c2e6862a8f3", - "m_SubObjectName": "Pentagram", + "m_AssetGUID": "6999cc364fd0b374a8acf35bac34d694", + "m_SubObjectName": "ConditionFrightened", "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWitchBolt.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWitchBolt.json index d09602091c..8d1488e7f2 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWitchBolt.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWitchBolt.json @@ -39,20 +39,20 @@ "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_SubObjectName": "", + "m_SubObjectType": "" }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "ac98fb418f31a2e4ab3b1cca628fddf0", + "m_SubObjectName": "", + "m_SubObjectType": "" }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "97e767b1f63cc0441a5d292f06a0a75f", + "m_SubObjectName": "", + "m_SubObjectType": "" }, "recurrentEffectParticleReference": null, "characterShaderReference": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/ActionAffinitySorcererQuickened.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/ActionAffinitySorcererQuickened.json deleted file mode 100644 index 036002b88a..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/ActionAffinitySorcererQuickened.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "$type": "FeatureDefinition, Assembly-CSharp", - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, - "title": "Feature/&NoContentTitle", - "description": "Feature/&NoContentTitle", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "38bb8988-a558-5c0c-8145-02d893f70586", - "contentPack": 9999, - "name": "ActionAffinitySorcererQuickened" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcererInnateSorcery.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcererInnateSorcery.json index 5507dd2107..54b754e584 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcererInnateSorcery.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcererInnateSorcery.json @@ -115,7 +115,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "6a8b8119774067740a6895a72319a60d", + "m_AssetGUID": "94705f3ef20195442b2d38ac29286eed", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -127,7 +127,7 @@ }, "casterQuickSpellParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "68726c9b0b4ffc7499d07d4b4c4f4ec1", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -249,7 +249,7 @@ }, "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "a9d1125f03ed66a4482a3dc3be9308fc", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -261,7 +261,7 @@ }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "e3712590851cdf84ba480fad91059b34", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json deleted file mode 100644 index 3ffa070c00..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json +++ /dev/null @@ -1,353 +0,0 @@ -{ - "$type": "FeatureDefinitionPower, Assembly-CSharp", - "effectDescription": { - "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Self", - "rangeParameter": 0, - "halfDamageOnAMiss": false, - "hitAffinitiesByTargetTag": [], - "targetType": "Self", - "itemSelectionType": "None", - "targetParameter": 1, - "targetParameter2": 2, - "emissiveBorder": "None", - "emissiveParameter": 1, - "requiresTargetProximity": false, - "targetProximityDistance": 6, - "targetExcludeCaster": false, - "canBePlacedOnCharacter": true, - "affectOnlyGround": false, - "targetFilteringMethod": "CharacterOnly", - "targetFilteringTag": "No", - "requiresVisibilityForPosition": true, - "inviteOptionalAlly": false, - "slotTypes": [], - "recurrentEffect": "No", - "retargetAfterDeath": false, - "retargetActionType": "Bonus", - "poolFilterDiceNumber": 5, - "poolFilterDieType": "D8", - "trapRangeType": "Triggerer", - "targetConditionName": "", - "targetConditionAsset": null, - "targetSide": "All", - "durationType": "Instantaneous", - "durationParameter": 1, - "endOfEffect": "EndOfTurn", - "hasSavingThrow": false, - "disableSavingThrowOnAllies": false, - "savingThrowAbility": "Dexterity", - "ignoreCover": false, - "grantedConditionOnSave": null, - "rollSaveOnlyIfRelevantForms": false, - "hasShoveRoll": false, - "createdByCharacter": true, - "difficultyClassComputation": "SpellCastingFeature", - "savingThrowDifficultyAbility": "Wisdom", - "fixedSavingThrowDifficultyClass": 15, - "savingThrowAffinitiesBySense": [], - "savingThrowAffinitiesByFamily": [], - "damageAffinitiesByFamily": [], - "advantageForEnemies": false, - "canBeDispersed": false, - "hasVelocity": false, - "velocityCellsPerRound": 2, - "velocityType": "AwayFromSourceOriginalPosition", - "restrictedCreatureFamilies": [], - "immuneCreatureFamilies": [], - "restrictedCharacterSizes": [], - "hasLimitedEffectPool": false, - "effectPoolAmount": 60, - "effectApplication": "All", - "effectFormFilters": [], - "effectForms": [ - { - "$type": "EffectForm, Assembly-CSharp", - "formType": "SpellSlots", - "addBonusMode": "None", - "applyLevel": "No", - "levelType": "ClassLevel", - "levelMultiplier": 1, - "diceByLevelTable": [], - "createdByCharacter": true, - "createdByCondition": false, - "hasSavingThrow": false, - "savingThrowAffinity": "None", - "dcModifier": 0, - "canSaveToCancel": false, - "saveOccurence": "EndOfTurn", - "spellSlotsForm": { - "$type": "SpellSlotsForm, Assembly-CSharp", - "type": "RecoverHalfLevelUp", - "maxSlotLevel": 5, - "sorceryPointsGain": 1, - "powerDefinition": null - }, - "hasFilterId": false, - "filterId": 0 - } - ], - "specialFormsDescription": "", - "effectAdvancement": { - "$type": "EffectAdvancement, Assembly-CSharp", - "effectIncrementMethod": "None", - "incrementMultiplier": 1, - "additionalTargetsPerIncrement": 0, - "additionalSubtargetsPerIncrement": 0, - "additionalDicePerIncrement": 0, - "additionalSpellLevelPerIncrement": 0, - "additionalSummonsPerIncrement": 0, - "additionalHPPerIncrement": 0, - "additionalTempHPPerIncrement": 0, - "additionalTargetCellsPerIncrement": 0, - "additionalItemBonus": 0, - "additionalWeaponDie": 0, - "alteredDuration": "None" - }, - "speedType": "Instant", - "speedParameter": 10.0, - "offsetImpactTimeBasedOnDistance": false, - "offsetImpactTimeBasedOnDistanceFactor": 0.1, - "offsetImpactTimePerTarget": 0.0, - "effectParticleParameters": { - "$type": "EffectParticleParameters, Assembly-CSharp", - "casterParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "casterSelfParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "casterQuickSpellParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "targetParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "effectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "effectSubTargetParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "zoneParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "beforeImpactParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "impactParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectImpactParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectCellStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectCellParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectCellEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectSurfaceStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectSurfaceParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectSurfaceEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectSurfaceParticlePerIndex": "", - "activeEffectSurfaceParticlePerIndexCount": 0, - "emissiveBorderCellStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderCellParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderCellEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderSurfaceStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderSurfaceParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderSurfaceEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "conditionStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "conditionParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "conditionEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "forceApplyZoneParticle": false, - "applyEmissionColorOnWeapons": false, - "emissionColor": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "emissionColorFadeInDuration": 0.0, - "emissionColorFadeOutDuration": 0.0 - }, - "effectAIParameters": { - "$type": "EffectAIParameters, Assembly-CSharp", - "aoeScoreMultiplier": 1.0, - "cooldownForCaster": 0, - "cooldownForBattle": 0, - "sortingScoreMultiplier": 1.0, - "dynamicCooldown": false - }, - "animationMagicEffect": "Animation0", - "lightCounterDispellsEffect": false, - "hideSavingThrowAnimation": false - }, - "delegatedToAction": false, - "surrogateToSpell": null, - "triggeredBySpecialMove": false, - "activationTime": "Rest", - "autoActivationRequiredTargetSenseType": "None", - "autoActivationRequiredTargetCreatureTag": "", - "autoActivationPowerTag": "", - "triggeringPower": null, - "copyTargetingFromTriggeringPower": false, - "reactionContext": "None", - "damageTypes": [], - "reactionName": "", - "reactionActingCharacterParamIdx": 0, - "reactionAttackerParamIdx": -1, - "hasCastingFailure": false, - "castingSuccessComputation": "CasterLevel", - "canUseInDialog": false, - "disableIfConditionIsOwned": null, - "disableIfTargetConditionIsOwned": null, - "rechargeRate": "LongRest", - "costPerUse": 1, - "spellcastingFeature": null, - "usesDetermination": "Fixed", - "abilityScoreDetermination": "Explicit", - "usesAbilityScoreName": "Charisma", - "fixedUsesPerRecharge": 1, - "abilityScore": "Intelligence", - "attackHitComputation": "AbilityScore", - "fixedAttackHit": 0, - "abilityScoreBonusToAttack": false, - "proficiencyBonusToAttack": false, - "uniqueInstance": false, - "showCasting": true, - "shortTitleOverride": "", - "overriddenPower": null, - "includeBaseDescription": false, - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": false, - "title": "Feature/&PowerWarlockMagicalCunningTitle", - "description": "Feature/&PowerWarlockMagicalCunningDescription", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "2bf0219b0c22319438c2677f84818891", - "m_SubObjectName": "ArcaneRecovery", - "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "0ad289b1-119a-5b46-8458-93c9ff03b358", - "contentPack": 9999, - "name": "PowerWarlockMagicalCunning" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/KineticJaunt.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/KineticJaunt.json index 6e7f7236a1..27b4d5ed37 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/KineticJaunt.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/KineticJaunt.json @@ -4,7 +4,7 @@ "subspellsList": [], "compactSubspellsTooltip": false, "implemented": true, - "schoolOfMagic": "SchoolEvocation", + "schoolOfMagic": "SchoolTransmutation", "spellLevel": 2, "ritual": false, "uniqueInstance": false, diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 4c62c6d18d..44e5e373be 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -165,7 +165,7 @@ ModUi/&EnableRogueFightingStyle=Aktiviere die Auswahl KampfstilZielen ohne Unterbrechung auf Stufe 3 [Bonusaktion verschafft einen Vorteil bei Ihrem nächsten Angriffswurf in der aktuellen Runde, wenn Sie sich noch nicht bewegt haben] ModUi/&EnableRogueStrSaving=Aktivieren Sie Hoodlum DEX- oder STR-Modifikatoren bei Cunning/Devious Strike ModUi/&EnableSignatureSpellsRelearn=Aktiviere, dass Signaturzauber bei jeder langen Pause vorbereitet werden [statt einmal auf Stufe 20] -ModUi/&EnableSorcererInnateSorcery=Aktiviere Angeborene Zauberei auf Stufe 1. +ModUi/&EnableSorcererInnateSorceryAt1=Aktiviere Angeborene Zauberei auf Stufe 1. ModUi/&EnableSorcererMagicalGuidance=Aktiviere Magische Führung auf Stufe 5. ModUi/&EnableSorcererQuickenedAction=Aktivieren Sie die Aktion Beschleunigter Zauber, um das Wirken des Hauptaktionszaubers mit angewandter beschleunigter Metamagie zu ermöglichen. ModUi/&EnableSortingDungeonMakerAssets=Aktivieren Sie die Sortierung von Assets im Dungeon Maker-Editor. @@ -178,6 +178,7 @@ ModUi/&EnableUnarmedMainAttackAction=Aktiviere die Aktion Unbewaf ModUi/&EnableUpcastConjureElementalAndFey=Aktiviere Upcast von Elementar beschwören und Feenbeschwören ModUi/&EnableVariablePlaceholdersOnTexts=Aktivieren Sie variable Platzhalter in Beschreibungen [verwenden Sie {VARIABLE_NAME} als Platzhalter] ModUi/&EnableWarlockMagicalCunningAtLevel2=Aktiviere Magische List auf Stufe 2. +ModUi/&EnableWarlockToLearnPatronAtLevel3=Aktivieren Sie Patron auf Stufe 3 statt auf Stufe 1. ModUi/&EnableWizardToLearnScholarAtLevel2=Aktiviere Gelehrter auf Stufe 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Aktiviere die Schule der Magie auf Level 3 statt auf Level 2. ModUi/&EnablesAsiAndFeat=Aktivieren Sie sowohl die Erhöhung der Attributwerte als auch die Auswahl von Talenten [anstelle einer exklusiven Auswahl] diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 2d3f6a5823..c135187e55 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -24,6 +24,7 @@ ModUi/&AllowDisplayingNonSuggestedSpells=Allow mod non suggested spells on each ModUi/&AllowDisplayingOfficialSpells=Allow game official spells on each list ModUi/&AllowDruidToWearMetalArmor=Remove Metal Armor restrictions ModUi/&AllowDungeonsMaxLevel20=Allow dungeons with max level 20 +ModUi/&EnableWarlockToLearnPatronAtLevel3=Enable Patron at level 3 instead of 1 ModUi/&AllowFlightSuspend=Allow temporarily suspending flight from items and spells [does not affect wildshape or flying races] ModUi/&AllowGadgetsAndPropsToBePlacedAnywhere=Enable CTRL click to bypass any check when placing gadgets or props ModUi/&AllowHasteCasting=Allow casting spells with extra action from being Hasted [you are still limited to 1 main action spell per round] @@ -165,7 +166,7 @@ ModUi/&EnableRogueFightingStyle=Enable Fighting Style cho ModUi/&EnableRogueSteadyAim=Enable Steady Aim at level 3 [bonus action gives advantage on your next attack roll in the current turn if you haven't moved yet] ModUi/&EnableRogueStrSaving=Enable Hoodlum DEX or STR modifiers on Cunning/Devious Strike ModUi/&EnableSignatureSpellsRelearn=Enable Signature Spells to be prepared every long rest [instead of once at level 20] -ModUi/&EnableSorcererInnateSorcery=Enable Innate Sorcery at level 1 +ModUi/&EnableSorcererInnateSorceryAt1=Enable Innate Sorcery at level 1 ModUi/&EnableSorcererMagicalGuidance=Enable Magical Guidance at level 5 ModUi/&EnableSorcererQuickenedAction=Enable Quickened Spell action to allow cast main action spell with quickened metamagic applied ModUi/&EnableSortingDungeonMakerAssets=Enable assets sorting on Dungeon Maker editor diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 4d802e071a..2a272bb28a 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -165,7 +165,7 @@ ModUi/&EnableRogueFightingStyle=Habilitar la opción Estilo de lu ModUi/&EnableRogueSteadyAim=Habilita Apunta firme en el nivel 3 [la acción adicional otorga ventaja en tu próxima tirada de ataque en el turno actual si aún no te has movido] ModUi/&EnableRogueStrSaving=Habilitar los modificadores DEX o STR de Hoodlum en Golpe astuto/desviado ModUi/&EnableSignatureSpellsRelearn=Permite que los hechizos exclusivos se preparen cada descanso prolongado [en lugar de una vez en el nivel 20] -ModUi/&EnableSorcererInnateSorcery=Habilitar Hechicería innata en el nivel 1 +ModUi/&EnableSorcererInnateSorceryAt1=Habilitar Hechicería innata en el nivel 1 ModUi/&EnableSorcererMagicalGuidance=Habilitar Guía mágica en el nivel 5 ModUi/&EnableSorcererQuickenedAction=Habilitar la acción Hechizo acelerado para permitir lanzar un hechizo de acción principal con metamagia acelerada aplicada ModUi/&EnableSortingDungeonMakerAssets=Habilitar la clasificación de activos en el editor de Dungeon Maker @@ -178,6 +178,7 @@ ModUi/&EnableUnarmedMainAttackAction=Habilitar la acción Ataque ModUi/&EnableUpcastConjureElementalAndFey=Habilitar la conversión ascendente de Conjurar elemental y Conjurar feérico ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posición de variables en las descripciones [use {VARIABLE_NAME} como marcador de posición] ModUi/&EnableWarlockMagicalCunningAtLevel2=Habilita Astucia mágica en el nivel 2 +ModUi/&EnableWarlockToLearnPatronAtLevel3=Habilitar Patron en el nivel 3 en lugar del 1 ModUi/&EnableWizardToLearnScholarAtLevel2=Habilitar Scholar en el nivel 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Habilitar Escuela de Magia en el nivel 3 en lugar de 2 ModUi/&EnablesAsiAndFeat=Habilitar el aumento de las puntuaciones de atributos y la selección de dotes [en lugar de una elección exclusiva] diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 3946ff684a..07e3182fed 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -165,7 +165,7 @@ ModUi/&EnableRogueFightingStyle=Activer le choix du Style de comb ModUi/&EnableRogueSteadyAim=Activez la Visée constante au niveau 3 [l'action bonus donne un avantage sur votre prochain jet d'attaque dans le tour en cours si vous n'avez pas encore bougé] ModUi/&EnableRogueStrSaving=Activer les modificateurs DEX ou STR de Hoodlum sur Cunning/Devious Strike ModUi/&EnableSignatureSpellsRelearn=Activer les sorts signatures pour qu'ils soient préparés à chaque repos long [au lieu d'une fois au niveau 20] -ModUi/&EnableSorcererInnateSorcery=Activer la Sorcellerie innée au niveau 1 +ModUi/&EnableSorcererInnateSorceryAt1=Activer la Sorcellerie innée au niveau 1 ModUi/&EnableSorcererMagicalGuidance=Activer la guidance magique au niveau 5 ModUi/&EnableSorcererQuickenedAction=Activez l'action Sort accéléré pour permettre de lancer le sort d'action principal avec la métamagie accélérée appliquée ModUi/&EnableSortingDungeonMakerAssets=Activer le tri des ressources sur l'éditeur Dungeon Maker @@ -178,6 +178,7 @@ ModUi/&EnableUnarmedMainAttackAction=Activer l'action Attaque à ModUi/&EnableUpcastConjureElementalAndFey=Activer la conversion ascendante de Conjure Elemental et Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Activer les espaces réservés aux variables dans les descriptions [utiliser {VARIABLE_NAME} comme espace réservé] ModUi/&EnableWarlockMagicalCunningAtLevel2=Activer la ruse magique au niveau 2 +ModUi/&EnableWarlockToLearnPatronAtLevel3=Activer Patron au niveau 3 au lieu de 1 ModUi/&EnableWizardToLearnScholarAtLevel2=Activer Scholar au niveau 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Activer l'École de magie au niveau 3 au lieu de 2 ModUi/&EnablesAsiAndFeat=Activer à la fois l'augmentation des scores d'attributs et la sélection des exploits [au lieu d'un choix exclusif] diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 3833010701..919512f32e 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -165,7 +165,7 @@ ModUi/&EnableRogueFightingStyle=Abilita la scelta Stile di combat ModUi/&EnableRogueSteadyAim=Abilita Mira Fissa al livello 3 [l'azione bonus fornisce vantaggio al tuo prossimo tiro di attacco nel turno corrente se non ti sei ancora mosso] ModUi/&EnableRogueStrSaving=Abilita i modificatori DEX o STR di Hoodlum su Colpo astuto/subdolo ModUi/&EnableSignatureSpellsRelearn=Abilita la preparazione degli incantesimi distintivi a ogni riposo lungo [invece di una volta al livello 20] -ModUi/&EnableSorcererInnateSorcery=Abilita Stregoneria Innata al livello 1 +ModUi/&EnableSorcererInnateSorceryAt1=Abilita Stregoneria Innata al livello 1 ModUi/&EnableSorcererMagicalGuidance=Abilita Guida magica al livello 5 ModUi/&EnableSorcererQuickenedAction=Abilita l'azione Incantesimo accelerato per consentire il lancio dell'incantesimo di azione principale con metamagia accelerata applicata ModUi/&EnableSortingDungeonMakerAssets=Abilita l'ordinamento delle risorse nell'editor di Dungeon Maker @@ -178,6 +178,7 @@ ModUi/&EnableUnarmedMainAttackAction=Abilita l'azione Attacco dis ModUi/&EnableUpcastConjureElementalAndFey=Abilita l'upcast di Evoca Elementale e Evoca Fata ModUi/&EnableVariablePlaceholdersOnTexts=Abilita segnaposto variabili nelle descrizioni [usa {VARIABLE_NAME} come segnaposto] ModUi/&EnableWarlockMagicalCunningAtLevel2=Abilita Astuzia magica al livello 2 +ModUi/&EnableWarlockToLearnPatronAtLevel3=Abilita Patron al livello 3 invece che 1 ModUi/&EnableWizardToLearnScholarAtLevel2=Abilita Studioso al livello 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Abilita Scuola di Magia al livello 3 invece che 2 ModUi/&EnablesAsiAndFeat=Abilita sia l'aumento dei punteggi degli attributi che la selezione delle imprese [invece di una scelta esclusiva] diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 680ebaa33a..21234a21e8 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -165,7 +165,7 @@ ModUi/&EnableRogueFightingStyle=レベル2で戦闘スタイルSteady Aim を有効にします [ボーナス アクションにより、まだ移動していない場合、現在のターンの次の攻撃ロールにアドバンテージが与えられます] ModUi/&EnableRogueStrSaving=狡猾な一撃/悪巧みの一撃に悪党のDEXまたはSTR修飾子を有効にする ModUi/&EnableSignatureSpellsRelearn=シグネチャー スペル を、長い休憩ごとに準備できるようにします [レベル 20 で 1 回ではなく] -ModUi/&EnableSorcererInnateSorcery=レベル 1 で 生来の魔術 を有効にする +ModUi/&EnableSorcererInnateSorceryAt1=レベル 1 で 生来の魔術 を有効にする ModUi/&EnableSorcererMagicalGuidance=レベル5で魔法のガイダンスを有効にする ModUi/&EnableSorcererQuickenedAction=クイック呪文アクションを有効にすると、クイック呪文メタマジックを適用したメインアクション呪文をキャストできるようになります。 ModUi/&EnableSortingDungeonMakerAssets=ダンジョンメーカーエディタでアセットの並べ替えを有効にする @@ -178,6 +178,7 @@ ModUi/&EnableUnarmedMainAttackAction=素手攻撃アク ModUi/&EnableUpcastConjureElementalAndFey=エレメンタル召喚とフェイ召喚のアップキャストを有効にする ModUi/&EnableVariablePlaceholdersOnTexts=説明に変数プレースホルダーを有効にする [プレースホルダーとして {VARIABLE_NAME} を使用する] ModUi/&EnableWarlockMagicalCunningAtLevel2=レベル2で魔法の狡猾さを有効にする +ModUi/&EnableWarlockToLearnPatronAtLevel3=パトロンをレベル1ではなくレベル3で有効にする ModUi/&EnableWizardToLearnScholarAtLevel2=レベル2で学者を有効にする ModUi/&EnableWizardToLearnSchoolAtLevel3=魔法学校をレベル2ではなくレベル3で有効にする ModUi/&EnablesAsiAndFeat=属性スコアの増加と 特技 の選択の両方を有効にします [排他的選択の代わりに] diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index dac4dc61c8..2ab926c8bb 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -165,7 +165,7 @@ ModUi/&EnableRogueFightingStyle=레벨 2에서 격투 스타일안정적인 조준을 활성화합니다. [현재 턴에서 아직 이동하지 않았다면 다음 공격 굴림에 보너스 액션이 유리해집니다.] ModUi/&EnableRogueStrSaving=교활한/사악한 일격에 후드럼 DEX 또는 STR 수정치를 활성화합니다. ModUi/&EnableSignatureSpellsRelearn=긴 휴식마다 특징 주문을 준비할 수 있게 합니다. [레벨 20에서 한 번만] -ModUi/&EnableSorcererInnateSorcery=1레벨에서 선천적 마법을 활성화합니다. +ModUi/&EnableSorcererInnateSorceryAt1=1레벨에서 선천적 마법을 활성화합니다. ModUi/&EnableSorcererMagicalGuidance=레벨 5에서 ​​마법의 안내를 활성화합니다. ModUi/&EnableSorcererQuickenedAction=빠른 주문 동작을 활성화하여 빠른 메타매직이 적용된 주요 동작 주문을 시전할 수 있습니다. ModUi/&EnableSortingDungeonMakerAssets=Dungeon Maker 편집기에서 자산 정렬 활성화 @@ -178,6 +178,7 @@ ModUi/&EnableUnarmedMainAttackAction=비무장 공격 동 ModUi/&EnableUpcastConjureElementalAndFey=원소 소환과 요정 소환의 업캐스트를 활성화합니다. ModUi/&EnableVariablePlaceholdersOnTexts=설명에 변수 플레이스홀더 활성화 [플레이스홀더로 {VARIABLE_NAME} 사용] ModUi/&EnableWarlockMagicalCunningAtLevel2=레벨 2에서 마법의 교활함을 활성화합니다. +ModUi/&EnableWarlockToLearnPatronAtLevel3=레벨 1 대신 레벨 3에서 후원자 활성화 ModUi/&EnableWizardToLearnScholarAtLevel2=레벨 2에서 학자 활성화 ModUi/&EnableWizardToLearnSchoolAtLevel3=마법 학교를 2레벨 대신 3레벨로 활성화합니다. ModUi/&EnablesAsiAndFeat=속성 점수 증가와 특기 선택을 모두 활성화합니다. [독점 선택 대신] diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 9c1955a4bb..0329f317c6 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -165,7 +165,7 @@ ModUi/&EnableRogueFightingStyle=Habilitar a escolha Estilo de lut ModUi/&EnableRogueSteadyAim=Habilite Miração Firme no nível 3 [ação bônus dá vantagem na sua próxima jogada de ataque no turno atual se você ainda não se moveu] ModUi/&EnableRogueStrSaving=Habilitar modificadores de DEX ou FOR de Hoodlum em Cunning/Devious Strike ModUi/&EnableSignatureSpellsRelearn=Habilitar Feitiços de Assinatura para serem preparados a cada descanso longo [em vez de uma vez no nível 20] -ModUi/&EnableSorcererInnateSorcery=Habilitar Feitiçaria Inata no nível 1 +ModUi/&EnableSorcererInnateSorceryAt1=Habilitar Feitiçaria Inata no nível 1 ModUi/&EnableSorcererMagicalGuidance=Habilitar Orientação Mágica no nível 5 ModUi/&EnableSorcererQuickenedAction=Habilitar ação Feitiço Acelerado para permitir conjurar feitiço de ação principal com metamagia acelerada aplicada ModUi/&EnableSortingDungeonMakerAssets=Habilitar classificação de ativos no editor do Dungeon Maker @@ -178,6 +178,7 @@ ModUi/&EnableUnarmedMainAttackAction=Habilitar a ação Ataque De ModUi/&EnableUpcastConjureElementalAndFey=Habilitar upcast de Conjure Elemental e Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posição variáveis ​​em descrições [usar {VARIABLE_NAME} como marcador de posição] ModUi/&EnableWarlockMagicalCunningAtLevel2=Habilitar Astúcia Mágica no nível 2 +ModUi/&EnableWarlockToLearnPatronAtLevel3=Habilitar Patrono no nível 3 em vez de 1 ModUi/&EnableWizardToLearnScholarAtLevel2=Habilitar Scholar no nível 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Habilitar Escola de Magia no nível 3 em vez de 2 ModUi/&EnablesAsiAndFeat=Habilitar aumento de pontuação de atributos e seleção de talentos [em vez de uma escolha exclusiva] diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 951bdb3f49..5f86fa81f5 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -165,7 +165,7 @@ ModUi/&EnableRogueFightingStyle=Включить выбор Бо ModUi/&EnableRogueSteadyAim=Включить Точное прицеливание на уровне 3 [бонусным действием даёт преимущество на следующий бросок атаки в текущем ходу, если вы ещё не перемещались] ModUi/&EnableRogueStrSaving=Включить модификаторы DEX или STR Hoodlum для Cunning/Devious Strike ModUi/&EnableSignatureSpellsRelearn=Включить подготовку фирменных заклинаний при каждом продолжительном отдыхе [вместо одного раза на уровне 20] -ModUi/&EnableSorcererInnateSorcery=Включить Врожденное колдовство на уровне 1 +ModUi/&EnableSorcererInnateSorceryAt1=Включить Врожденное колдовство на уровне 1 ModUi/&EnableSorcererMagicalGuidance=Включить Волшебное указание на уровне 5 ModUi/&EnableSorcererQuickenedAction=Включить действие Ускоренное заклинание, позволяющее накладывать заклинание основного действия с применением метамагии Ускоренного заклинания. ModUi/&EnableSortingDungeonMakerAssets=Включить сортировку ассетов в редакторе Создателя Подземелий @@ -178,6 +178,7 @@ ModUi/&EnableUnarmedMainAttackAction=Включить действие Призыв элементаля и Призыв феи ModUi/&EnableVariablePlaceholdersOnTexts=Включить заглушки для переменных описаний [использовать {VARIABLE_NAME} в качесте заглушки] ModUi/&EnableWarlockMagicalCunningAtLevel2=Включить Магическую хитрость на уровне 2 +ModUi/&EnableWarlockToLearnPatronAtLevel3=Включить Покровителя на уровне 3 вместо 1 ModUi/&EnableWizardToLearnScholarAtLevel2=Включить Академию на уровне 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Включить Школу магии на уровне 3 вместо 2 ModUi/&EnablesAsiAndFeat=Включить возможность и повышать характеристики, и выбирать черту одновременно [вместо того, чтобы делать выбор между этими вариантами] diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index dec1c05ea9..5ebd376199 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -165,7 +165,7 @@ ModUi/&EnableRogueFightingStyle=在第 2 级启用战斗风格稳定瞄准 [如果您尚未移动,则奖励行动会在当前回合的下一次攻击掷骰中提供优势] ModUi/&EnableRogueStrSaving=在狡猾/卑鄙的打击上启用Hoodlum DEX 或 STR 修正 ModUi/&EnableSignatureSpellsRelearn=每次长时间休息时都可准备招牌法术[而不是在 20 级时准备一次] -ModUi/&EnableSorcererInnateSorcery=在第 1 级启用天生巫术 +ModUi/&EnableSorcererInnateSorceryAt1=在第 1 级启用天生巫术 ModUi/&EnableSorcererMagicalGuidance=在 5 级时启用魔法指引 ModUi/&EnableSorcererQuickenedAction=启用加速法术动作以允许施放应用了加速超魔法的主要动作法术 ModUi/&EnableSortingDungeonMakerAssets=在 Dungeon Maker 编辑器上启用资产排序 @@ -178,6 +178,7 @@ ModUi/&EnableUnarmedMainAttackAction=启用徒手攻击 ModUi/&EnableUpcastConjureElementalAndFey=启用 Conjure Elemental 和 Conjure Fey 的向上转换 ModUi/&EnableVariablePlaceholdersOnTexts=在描述中启用变量占位符[使用 {VARIABLE_NAME} 作为占位符] ModUi/&EnableWarlockMagicalCunningAtLevel2=在第 2 级启用魔法狡猾 +ModUi/&EnableWarlockToLearnPatronAtLevel3=在 3 级(而非 1 级)启用 Patron ModUi/&EnableWizardToLearnScholarAtLevel2=启用 2 级 Scholar ModUi/&EnableWizardToLearnSchoolAtLevel3=在 3 级(而非 2 级)启用魔法学校 ModUi/&EnablesAsiAndFeat=同时启用属性得分增加和专长选择[而不是独占选择] From 82adbf8aadae85486d9af101baf0812c977001ca Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 19:50:13 -0800 Subject: [PATCH 60/85] add warlock tabletop 2024 settings and minor fixes on others --- ...-GuiPresentation-MissingTranslation-en.txt | 2 - .../Behaviors/ModifyPowerPoolAmount.cs | 2 +- .../Displays/ClassesDisplay.cs | 23 ++- .../Displays/GeneralDisplay.cs | 23 ++- SolastaUnfinishedBusiness/Displays/_ModUi.cs | 5 +- .../Models/Tabletop2024Context.cs | 146 +++++++++--------- SolastaUnfinishedBusiness/Settings.cs | 7 +- SolastaUnfinishedBusiness/Settings/empty.xml | 9 +- .../Settings/zappastuff.xml | 45 +++--- .../Translations/de/Settings-de.txt | 4 +- .../Translations/de/Spells/Cantrips-de.txt | 4 +- .../Translations/en/Settings-en.txt | 6 +- .../Translations/en/Spells/Cantrips-en.txt | 4 +- .../Translations/es/Settings-es.txt | 4 +- .../Translations/es/Spells/Cantrips-es.txt | 4 +- .../Translations/fr/Settings-fr.txt | 4 +- .../Translations/fr/Spells/Cantrips-fr.txt | 4 +- .../Translations/it/Settings-it.txt | 4 +- .../Translations/it/Spells/Cantrips-it.txt | 4 +- .../Translations/ja/Settings-ja.txt | 4 +- .../Translations/ja/Spells/Cantrips-ja.txt | 4 +- .../Translations/ko/Settings-ko.txt | 4 +- .../Translations/ko/Spells/Cantrips-ko.txt | 4 +- .../Translations/pt-BR/Settings-pt-BR.txt | 4 +- .../pt-BR/Spells/Cantrips-pt-BR.txt | 4 +- .../Translations/ru/Settings-ru.txt | 4 +- .../Translations/ru/Spells/Cantrips-ru.txt | 4 +- .../Translations/zh-CN/Settings-zh-CN.txt | 4 +- .../zh-CN/Spells/Cantrips-zh-CN.txt | 4 +- 29 files changed, 181 insertions(+), 163 deletions(-) diff --git a/Diagnostics/CE-Definitions-GuiPresentation-MissingTranslation-en.txt b/Diagnostics/CE-Definitions-GuiPresentation-MissingTranslation-en.txt index 0d32dc9784..e69de29bb2 100644 --- a/Diagnostics/CE-Definitions-GuiPresentation-MissingTranslation-en.txt +++ b/Diagnostics/CE-Definitions-GuiPresentation-MissingTranslation-en.txt @@ -1,2 +0,0 @@ -ConditionGuidanceAnimalHandling Title='Condition/&ConditionGuidanceAnimalHandlingTitle'. -ConditionGuidanceAnimalHandling Description='Condition/&ConditionGuidanceAnimalHandlingDescription'. diff --git a/SolastaUnfinishedBusiness/Behaviors/ModifyPowerPoolAmount.cs b/SolastaUnfinishedBusiness/Behaviors/ModifyPowerPoolAmount.cs index 2a898c4ce9..365a961052 100644 --- a/SolastaUnfinishedBusiness/Behaviors/ModifyPowerPoolAmount.cs +++ b/SolastaUnfinishedBusiness/Behaviors/ModifyPowerPoolAmount.cs @@ -34,7 +34,7 @@ public int PoolChangeAmount(RulesetCharacter character) int GetSecondWindUsages() { - if (!Main.Settings.SwapSecondWindToUseOneDndUsagesProgression) + if (!Main.Settings.EnableSecondWindToUseOneDndUsagesProgression) { return 1; } diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index 82a9961155..b69c48da1a 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -163,10 +163,10 @@ internal static void DisplayClasses() ClassesContext.SwitchFighterWeaponSpecialization(); } - toggle = Main.Settings.SwapSecondWindToUseOneDndUsagesProgression; - if (UI.Toggle(Gui.Localize("ModUi/&SwapSecondWindToUseOneDndUsagesProgression"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.EnableSecondWindToUseOneDndUsagesProgression; + if (UI.Toggle(Gui.Localize("ModUi/&EnableSecondWindToUseOneDndUsagesProgression"), ref toggle, UI.AutoWidth())) { - Main.Settings.SwapSecondWindToUseOneDndUsagesProgression = toggle; + Main.Settings.EnableSecondWindToUseOneDndUsagesProgression = toggle; } UI.Label(); @@ -353,10 +353,10 @@ internal static void DisplayClasses() UI.Label("" + Gui.Localize("Class/&SorcererTitle") + ":"); UI.Label(); - toggle = Main.Settings.EnableSorcererInnateSorcery; - if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcererInnateSorcery"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.EnableSorcererInnateSorceryAt1; + if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcererInnateSorceryAt1"), ref toggle, UI.AutoWidth())) { - Main.Settings.EnableSorcererInnateSorcery = toggle; + Main.Settings.EnableSorcererInnateSorceryAt1 = toggle; Tabletop2024Context.SwitchSorcererInnateSorcery(); } @@ -386,10 +386,17 @@ internal static void DisplayClasses() UI.Label("" + Gui.Localize("Class/&WarlockTitle") + ":"); UI.Label(); - toggle = Main.Settings.SwapWarlockToUseOneDndInvocationProgression; + toggle = Main.Settings.EnableWarlockToLearnPatronAtLevel3; + if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockToLearnPatronAtLevel3"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableWarlockToLearnPatronAtLevel3 = toggle; + Tabletop2024Context.SwitchOneDndWarlockSchoolOfMagicLearningLevel(); + } + + toggle = Main.Settings.EnableWarlockToUseOneDndInvocationProgression; if (UI.Toggle(Gui.Localize("ModUi/&SwapWarlockToUseOneDndInvocationProgression"), ref toggle, UI.AutoWidth())) { - Main.Settings.SwapWarlockToUseOneDndInvocationProgression = toggle; + Main.Settings.EnableWarlockToUseOneDndInvocationProgression = toggle; Tabletop2024Context.SwitchOneDndWarlockInvocationsProgression(); } diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index da320dc151..3b338a3259 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -376,10 +376,10 @@ private static void DisplayOneDnd() Tabletop2024Context.SwitchPersuasionToFighterSkillOptions(); } - toggle = Main.Settings.SwapSecondWindToUseOneDndUsagesProgression; - if (UI.Toggle(Gui.Localize("ModUi/&SwapSecondWindToUseOneDndUsagesProgression"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.EnableSecondWindToUseOneDndUsagesProgression; + if (UI.Toggle(Gui.Localize("ModUi/&EnableSecondWindToUseOneDndUsagesProgression"), ref toggle, UI.AutoWidth())) { - Main.Settings.SwapSecondWindToUseOneDndUsagesProgression = toggle; + Main.Settings.EnableSecondWindToUseOneDndUsagesProgression = toggle; } UI.Label(); @@ -503,10 +503,10 @@ private static void DisplayOneDnd() UI.Label("" + Gui.Localize("Class/&SorcererTitle") + ":"); UI.Label(); - toggle = Main.Settings.EnableSorcererInnateSorcery; - if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcererInnateSorcery"), ref toggle, UI.AutoWidth())) + toggle = Main.Settings.EnableSorcererInnateSorceryAt1; + if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcererInnateSorceryAt1"), ref toggle, UI.AutoWidth())) { - Main.Settings.EnableSorcererInnateSorcery = toggle; + Main.Settings.EnableSorcererInnateSorceryAt1 = toggle; Tabletop2024Context.SwitchSorcererInnateSorcery(); } @@ -514,10 +514,17 @@ private static void DisplayOneDnd() UI.Label("" + Gui.Localize("Class/&WarlockTitle") + ":"); UI.Label(); - toggle = Main.Settings.SwapWarlockToUseOneDndInvocationProgression; + toggle = Main.Settings.EnableWarlockToLearnPatronAtLevel3; + if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockToLearnPatronAtLevel3"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableWarlockToLearnPatronAtLevel3 = toggle; + Tabletop2024Context.SwitchOneDndWarlockSchoolOfMagicLearningLevel(); + } + + toggle = Main.Settings.EnableWarlockToUseOneDndInvocationProgression; if (UI.Toggle(Gui.Localize("ModUi/&SwapWarlockToUseOneDndInvocationProgression"), ref toggle, UI.AutoWidth())) { - Main.Settings.SwapWarlockToUseOneDndInvocationProgression = toggle; + Main.Settings.EnableWarlockToUseOneDndInvocationProgression = toggle; Tabletop2024Context.SwitchOneDndWarlockInvocationsProgression(); } diff --git a/SolastaUnfinishedBusiness/Displays/_ModUi.cs b/SolastaUnfinishedBusiness/Displays/_ModUi.cs index 3a54cc3356..81db741f4c 100644 --- a/SolastaUnfinishedBusiness/Displays/_ModUi.cs +++ b/SolastaUnfinishedBusiness/Displays/_ModUi.cs @@ -24,11 +24,10 @@ namespace SolastaUnfinishedBusiness.Displays; -// ReSharper disable once ClassNeverInstantiated.Global internal static class ModUi { internal const int DontDisplayDescription = 4; - internal const float PixelsPerColumn = 230; + internal const float PixelsPerColumn = 220; internal static readonly HashSet TabletopDefinitionNames = [ @@ -97,7 +96,7 @@ internal static class ModUi "FeatEldritchAdept", "FeatFellHanded", "FeatGiftOfTheChromaticDragon", - "FeatGiftOfTheGemDragon", + "FeatGroupGiftOfTheGemDragon", "FeatGroupAthlete", "FeatGroupBalefulScion", "FeatGroupChef", diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index b3c60beb6f..21d0bb5254 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -215,6 +215,7 @@ internal static void LateLoad() SwitchOneDndSpellBarkskin(); SwitchOneDndSpellGuidance(); SwitchOneDndSurprisedEnforceDisadvantage(); + SwitchOneDndWarlockSchoolOfMagicLearningLevel(); SwitchOneDndWarlockInvocationsProgression(); SwitchOneDndWizardScholar(); SwitchOneDndWizardSchoolOfMagicLearningLevel(); @@ -228,15 +229,10 @@ internal static void LateLoad() private static void LoadSecondWindToUseOneDndUsagesProgression() { + PowerFighterSecondWind.fixedUsesPerRecharge = 0; PowerFighterSecondWind.AddCustomSubFeatures( HasModifiedUses.Marker, new ModifyPowerPoolAmount - { - PowerPool = PowerFighterSecondWind, - Type = PowerPoolBonusCalculationType.SecondWind2024, - Attribute = FighterClass - }, - new ModifyPowerPoolAmount { PowerPool = PowerFighterSecondWind, Type = PowerPoolBonusCalculationType.SecondWind2024, @@ -474,6 +470,43 @@ internal static void SwitchOneDndWizardSchoolOfMagicLearningLevel() Wizard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } + internal static void SwitchOneDndWarlockSchoolOfMagicLearningLevel() + { + var patrons = DatabaseRepository.GetDatabase() + .Where(x => x.Name.StartsWith("Patron")) + .ToList(); + + var fromLevel = 3; + var toLevel = 1; + + if (Main.Settings.EnableWarlockToLearnPatronAtLevel3) + { + fromLevel = 1; + toLevel = 3; + } + + foreach (var featureUnlock in patrons + .SelectMany(patron => patron.FeatureUnlocks + .Where(featureUnlock => + featureUnlock.level == fromLevel && + featureUnlock.FeatureDefinition.Name != "FeatureEldritchVersatilityUnLearn1"))) + { + featureUnlock.level = toLevel; + } + + foreach (var featureUnlock in Warlock.FeatureUnlocks.Where(featureUnlock => featureUnlock.level == fromLevel)) + { + featureUnlock.level = toLevel; + } + + foreach (var patron in patrons) + { + patron.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + + Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + internal static void SwitchOneDndPaladinLearnSpellCastingAtOne() { var level = Main.Settings.EnablePaladinSpellCastingAtLevel1 ? 1 : 2; @@ -736,7 +769,7 @@ internal static void SwitchSorcererInnateSorcery() { Sorcerer.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PowerSorcererInnateSorcery); - if (Main.Settings.EnableSorcererInnateSorcery) + if (Main.Settings.EnableSorcererInnateSorceryAt1) { Sorcerer.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(PowerSorcererInnateSorcery, 1)); } @@ -760,7 +793,7 @@ internal static void SwitchRangerNatureShroud() internal static void SwitchOneDndWarlockInvocationsProgression() { - if (Main.Settings.SwapWarlockToUseOneDndInvocationProgression) + if (Main.Settings.EnableWarlockToUseOneDndInvocationProgression) { Warlock.FeatureUnlocks.Add(new FeatureUnlockByLevel(PointPoolWarlockInvocation1, 1)); PointPoolWarlockInvocation2.GuiPresentation.Title = @@ -1099,6 +1132,10 @@ internal static void SwitchMonkDoNotRequireAttackActionForBonusUnarmoredAttack() internal static void SwitchMonkHeightenedMetabolism() { + Monk.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == FeatureMonkHeightenedMetabolism || + x.FeatureDefinition == PowerMonkStepOfTheWindHeightenedMetabolism); + if (Main.Settings.EnableMonkHeightenedMetabolism) { Monk.FeatureUnlocks.TryAdd( @@ -1106,23 +1143,15 @@ internal static void SwitchMonkHeightenedMetabolism() Monk.FeatureUnlocks.TryAdd( new FeatureUnlockByLevel(PowerMonkStepOfTheWindHeightenedMetabolism, 10)); } - else - { - Monk.FeatureUnlocks - .RemoveAll(x => x.level == 10 && - (x.FeatureDefinition == FeatureMonkHeightenedMetabolism || - x.FeatureDefinition == PowerMonkStepOfTheWindHeightenedMetabolism)); - } Monk.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchMonkSuperiorDefenseToReplaceEmptyBody() { - Monk.FeatureUnlocks - .RemoveAll(x => x.level == 18 && - (x.FeatureDefinition == Level20Context.PowerMonkEmptyBody || - x.FeatureDefinition == PowerMonkSuperiorDefense)); + Monk.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == Level20Context.PowerMonkEmptyBody || + x.FeatureDefinition == PowerMonkSuperiorDefense); Monk.FeatureUnlocks.TryAdd( Main.Settings.EnableMonkSuperiorDefenseToReplaceEmptyBody @@ -1134,10 +1163,9 @@ internal static void SwitchMonkSuperiorDefenseToReplaceEmptyBody() internal static void SwitchMonkBodyAndMindToReplacePerfectSelf() { - Monk.FeatureUnlocks - .RemoveAll(x => x.level == 20 && - (x.FeatureDefinition == Level20Context.FeatureMonkPerfectSelf || - x.FeatureDefinition == FeatureMonkBodyAndMind)); + Monk.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == Level20Context.FeatureMonkPerfectSelf || + x.FeatureDefinition == FeatureMonkBodyAndMind); Monk.FeatureUnlocks.TryAdd( Main.Settings.EnableMonkBodyAndMindToReplacePerfectSelf @@ -1560,6 +1588,11 @@ private void AddBonusAttackAndDamageRoll( internal static void SwitchBarbarianBrutalStrike() { + Barbarian.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == _featureSetBarbarianBrutalStrike || + x.FeatureDefinition == _featureSetBarbarianBrutalStrikeImprovement13 || + x.FeatureDefinition == _featureSetBarbarianBrutalStrikeImprovement17); + if (Main.Settings.EnableBarbarianBrutalStrike) { Barbarian.FeatureUnlocks.TryAdd( @@ -1569,52 +1602,22 @@ internal static void SwitchBarbarianBrutalStrike() Barbarian.FeatureUnlocks.TryAdd( new FeatureUnlockByLevel(_featureSetBarbarianBrutalStrikeImprovement17, 17)); } - else - { - Barbarian.FeatureUnlocks.RemoveAll(x => - x.level == 9 && x.FeatureDefinition == _featureSetBarbarianBrutalStrike); - Barbarian.FeatureUnlocks.RemoveAll(x => - x.level == 13 && x.FeatureDefinition == _featureSetBarbarianBrutalStrikeImprovement13); - Barbarian.FeatureUnlocks.RemoveAll(x => - x.level == 17 && x.FeatureDefinition == _featureSetBarbarianBrutalStrikeImprovement17); - } Barbarian.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchBarbarianBrutalCritical() { - if (Main.Settings.DisableBarbarianBrutalCritical) - { - Barbarian.FeatureUnlocks.RemoveAll(x => - x.level == 9 && x.FeatureDefinition == FeatureSetBarbarianBrutalCritical); - Barbarian.FeatureUnlocks.RemoveAll(x => - x.level == 13 && x.FeatureDefinition == AttributeModifierBarbarianBrutalCriticalAdd); - Barbarian.FeatureUnlocks.RemoveAll(x => - x.level == 17 && x.FeatureDefinition == AttributeModifierBarbarianBrutalCriticalAdd); - } - else - { - if (!Barbarian.FeatureUnlocks.Exists(x => - x.level == 9 && x.FeatureDefinition == FeatureSetBarbarianBrutalCritical)) - { - Barbarian.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(FeatureSetBarbarianBrutalCritical, 9)); - } + Barbarian.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == FeatureSetBarbarianBrutalCritical || + x.FeatureDefinition == AttributeModifierBarbarianBrutalCriticalAdd); - if (!Barbarian.FeatureUnlocks.Exists(x => - x.level == 13 && x.FeatureDefinition == AttributeModifierBarbarianBrutalCriticalAdd)) - { - Barbarian.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(AttributeModifierBarbarianBrutalCriticalAdd, 13)); - } - - if (!Barbarian.FeatureUnlocks.Exists(x => - x.level == 17 && x.FeatureDefinition == AttributeModifierBarbarianBrutalCriticalAdd)) - { - Barbarian.FeatureUnlocks.TryAdd( - new FeatureUnlockByLevel(AttributeModifierBarbarianBrutalCriticalAdd, 17)); - } + if (!Main.Settings.DisableBarbarianBrutalCritical) + { + Barbarian.FeatureUnlocks.AddRange( + new FeatureUnlockByLevel(FeatureSetBarbarianBrutalCritical, 9), + new FeatureUnlockByLevel(AttributeModifierBarbarianBrutalCriticalAdd, 13), + new FeatureUnlockByLevel(AttributeModifierBarbarianBrutalCriticalAdd, 17)); } Barbarian.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); @@ -1972,23 +1975,19 @@ private static void BuildRogueCunningStrike() internal static void SwitchRogueSteadyAim() { + Rogue.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PowerFeatSteadyAim); + if (Main.Settings.EnableRogueSteadyAim) { Rogue.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(PowerFeatSteadyAim, 3)); } - else - { - Rogue.FeatureUnlocks.RemoveAll(x => - x.level == 3 && x.FeatureDefinition == PowerFeatSteadyAim); - } Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } internal static void SwitchRogueBlindSense() { - Rogue.FeatureUnlocks.RemoveAll(x => - x.level == 3 && x.FeatureDefinition == FeatureDefinitionSenses.SenseRogueBlindsense); + Rogue.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == FeatureDefinitionSenses.SenseRogueBlindsense); if (!Main.Settings.RemoveRogueBlindSense) { @@ -2242,16 +2241,15 @@ public IEnumerator ComputeValidPositions(CursorLocationSelectPosition cursorLoca internal static void SwitchRogueCunningStrike() { + Rogue.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == _featureSetRogueCunningStrike || + x.FeatureDefinition == _featureSetRogueDeviousStrike); + if (Main.Settings.EnableRogueCunningStrike) { Rogue.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(_featureSetRogueCunningStrike, 5)); Rogue.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(_featureSetRogueDeviousStrike, 14)); } - else - { - Rogue.FeatureUnlocks.RemoveAll(x => x.level == 5 && x.FeatureDefinition == _featureSetRogueCunningStrike); - Rogue.FeatureUnlocks.RemoveAll(x => x.level == 14 && x.FeatureDefinition == _featureSetRogueDeviousStrike); - } Rogue.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index abb3f95182..e23b157b7b 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -275,7 +275,7 @@ public class Settings : UnityModManager.ModSettings public bool SwapDruidToUseOneDndWeaponProficiency { get; set; } public bool AddFighterLevelToIndomitableSavingReroll { get; set; } public bool AddPersuasionToFighterSkillOptions { get; set; } - public bool SwapSecondWindToUseOneDndUsagesProgression { get; set; } + public bool EnableSecondWindToUseOneDndUsagesProgression { get; set; } public bool EnableFighterWeaponSpecialization { get; set; } public bool AddHumanoidFavoredEnemyToRanger { get; set; } public bool EnableRangerNatureShroudAt14 { get; set; } @@ -300,11 +300,12 @@ public class Settings : UnityModManager.ModSettings public bool EnableRogueFightingStyle { get; set; } public bool EnableRogueSteadyAim { get; set; } public bool RemoveRogueBlindSense { get; set; } - public bool EnableSorcererInnateSorcery { get; set; } + public bool EnableSorcererInnateSorceryAt1 { get; set; } public bool EnableSorcererMagicalGuidance { get; set; } public bool EnableSorcererQuickenedAction { get; set; } public bool HideQuickenedActionWhenMetamagicOff { get; set; } - public bool SwapWarlockToUseOneDndInvocationProgression { get; set; } + public bool EnableWarlockToLearnPatronAtLevel3 { get; set; } + public bool EnableWarlockToUseOneDndInvocationProgression { get; set; } public bool EnableWizardToLearnScholarAtLevel2 { get; set; } public bool EnableWizardToLearnSchoolAtLevel3 { get; set; } public bool EnableSignatureSpellsRelearn { get; set; } diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index 276118804d..89ee1a46be 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -587,12 +587,12 @@ false false false - false + false false false false - false - false + false + false false false false @@ -648,8 +648,9 @@ false false false - false false + false + false false false false diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index 28da2630e4..c550c67d69 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -216,7 +216,6 @@ true true true - true false true true @@ -240,7 +239,7 @@ true false false - true + false true false false @@ -502,15 +501,15 @@ - false - false + true + true false - false + true false - false - false - false - false + true + true + true + true true true true @@ -581,26 +580,30 @@ true true true - false - true + true + false false false false en - true - true false - true true + true + true + true + true true true true true true true + true + true + true true true - true + true false true true @@ -625,11 +628,13 @@ true false true + true + true true true - false - true - true + true + true + true true true false @@ -892,6 +897,7 @@ true true + true false true @@ -907,8 +913,9 @@ true true true - true true + true + true true true false diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 44e5e373be..d964c9b286 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -164,6 +164,7 @@ ModUi/&EnableRogueCunningStrike=Aktiviere Cunning Strike ModUi/&EnableRogueFightingStyle=Aktiviere die Auswahl Kampfstil auf Stufe 2. ModUi/&EnableRogueSteadyAim=Aktivieren Sie Zielen ohne Unterbrechung auf Stufe 3 [Bonusaktion verschafft einen Vorteil bei Ihrem nächsten Angriffswurf in der aktuellen Runde, wenn Sie sich noch nicht bewegt haben] ModUi/&EnableRogueStrSaving=Aktivieren Sie Hoodlum DEX- oder STR-Modifikatoren bei Cunning/Devious Strike +ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Aktivieren Sie Second Wind, um den Nutzungsfortschritt von 5e 2024 zu nutzen ModUi/&EnableSignatureSpellsRelearn=Aktiviere, dass Signaturzauber bei jeder langen Pause vorbereitet werden [statt einmal auf Stufe 20] ModUi/&EnableSorcererInnateSorceryAt1=Aktiviere Angeborene Zauberei auf Stufe 1. ModUi/&EnableSorcererMagicalGuidance=Aktiviere Magische Führung auf Stufe 5. @@ -241,7 +242,7 @@ ModUi/&NeverMoveCameraOnEnemyTurn=+ Die Kamera bewegt sich nie während der Z ModUi/&NoExperienceOnLevelUp=Für den Levelaufstieg ist keine Erfahrung erforderlich ModUi/&OfficialObscurementRulesCancelAdvDisPairs=+ Aufheben von Vorteil / Nachteil geblendeten, unsichtbaren und wahrgenommenen Paaren [nützlich in Verbindung mit offiziellen Vorteil / Nachteil-Regeln] ModUi/&OfficialObscurementRulesHeavilyObscuredAsProjectileBlocker=+ stark verdeckte Bereiche in Projektilblocker ändern [Cloud Kill, Nebelwolke, Brandwolke, Blütenblattsturm, Schneeregensturm, Stinkende Wolke] -ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Unsichtbare Kreaturen sind stark verdeckt und können zum Ziel werden, Angriffswürfe gegen die Kreatur haben einen Nachteil und die Angriffswürfe der Kreatur haben einen Vorteil +ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Unsichtbare Kreaturen sind stark verdeckt, können das Ziel sein, Angriffswürfe gegen sie haben einen Nachteil und die Angriffswürfe der Kreatur haben einen Vorteil ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ magisch verborgene Bereiche in Projektilblocker ändern [jede Quelle des Zaubereffekts Dunkelheit] ModUi/&OfficialObscurementRulesTweakMonsters=+ Füge Monstern und NPCs bei Bedarf Dunkelsicht, Blindsicht und Wahrsicht hinzu ModUi/&OfficialObscurementRulesTweakMonstersHelp=[Einstellungssammlungen Monster, die über Dunkelsicht verfügen sollten, Monster, die über echte Sicht verfügen sollten, Monster, die über blinde Sicht verfügen sollten] @@ -315,7 +316,6 @@ ModUi/&SwapDruidToUseOneDndWeaponProficiency=Aktivieren Sie die Fertigkeit Evoker Sculpt Spells und Potent Cantrip beim Fortschreiten aus ModUi/&SwapEvocationSavant=Tauschen Sie Evoker Evocation Savant gegen die 5e 2024-Version aus [lernen Sie 2 Schulzauber, wenn Sie sie erhalten, lernen Sie 1 weiteren jedes Mal, wenn Sie ein Slot-Level erreichen] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Aktivieren Sie Unbewaffneter Angriff, um die Würfeltyp-Progression von 5e 2024 zu verwenden -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Aktivieren Sie Second Wind, um den Nutzungsfortschritt von 5e 2024 zu nutzen ModUi/&SwapWarlockToUseOneDndInvocationProgression=Aktivieren Sie Anrufe, um die 5e 2024-Progression zu nutzen ModUi/&TableTopButton=Tabletop-Inhalt auswählen ModUi/&TableTopHelp1=• In den folgenden Abschnitten werden die im Mod verstreuten Einstellungen für 5e 2014 und 2024 neu gruppiert und dupliziert, damit Sie es einfacher haben. diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt index 4f8823ac0c..48dea620ce 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt @@ -4,8 +4,8 @@ Condition/&ConditionBoomingBladeSheathedDescription=Du bist von dröhnender Ener Condition/&ConditionBoomingBladeSheathedTitle=Ummantelt Condition/&ConditionGuidanceAcrobaticsDescription=Füge bis zu 1 Minute lang 1W4 zu Akrobatikprüfungen hinzu. Condition/&ConditionGuidanceAcrobaticsTitle=Geführte Akrobatik -Condition/&ConditionGuidanceAnimal HandlingDescription=Füge bis zu 1 Minute lang 1W4 zu Fertigkeitsprüfungen im Umgang mit Tieren hinzu. -Condition/&ConditionGuidanceAnimal HandlingTitle=Geführter Umgang mit Tieren +Condition/&ConditionGuidanceAnimalHandlingDescription=Füge bis zu 1 Minute lang 1W4 zu Fertigkeitsprüfungen im Umgang mit Tieren hinzu. +Condition/&ConditionGuidanceAnimalHandlingTitle=Geführter Umgang mit Tieren Condition/&ConditionGuidanceArcanaDescription=Füge bis zu 1 Minute lang 1W4 zu Arcana-Checks hinzu. Condition/&ConditionGuidanceArcanaTitle=Geführte Arkana Condition/&ConditionGuidanceAthleticsDescription=Füge bis zu 1 Minute lang 1W4 zu Athletikprüfungen hinzu. diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index c135187e55..79143f004e 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -24,7 +24,6 @@ ModUi/&AllowDisplayingNonSuggestedSpells=Allow mod non suggested spells on each ModUi/&AllowDisplayingOfficialSpells=Allow game official spells on each list ModUi/&AllowDruidToWearMetalArmor=Remove Metal Armor restrictions ModUi/&AllowDungeonsMaxLevel20=Allow dungeons with max level 20 -ModUi/&EnableWarlockToLearnPatronAtLevel3=Enable Patron at level 3 instead of 1 ModUi/&AllowFlightSuspend=Allow temporarily suspending flight from items and spells [does not affect wildshape or flying races] ModUi/&AllowGadgetsAndPropsToBePlacedAnywhere=Enable CTRL click to bypass any check when placing gadgets or props ModUi/&AllowHasteCasting=Allow casting spells with extra action from being Hasted [you are still limited to 1 main action spell per round] @@ -165,6 +164,7 @@ ModUi/&EnableRogueCunningStrike=Enable Cunning Strike and ModUi/&EnableRogueFightingStyle=Enable Fighting Style choice at level 2 ModUi/&EnableRogueSteadyAim=Enable Steady Aim at level 3 [bonus action gives advantage on your next attack roll in the current turn if you haven't moved yet] ModUi/&EnableRogueStrSaving=Enable Hoodlum DEX or STR modifiers on Cunning/Devious Strike +ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Enable Second Wind to use 5e 2024 usages progression ModUi/&EnableSignatureSpellsRelearn=Enable Signature Spells to be prepared every long rest [instead of once at level 20] ModUi/&EnableSorcererInnateSorceryAt1=Enable Innate Sorcery at level 1 ModUi/&EnableSorcererMagicalGuidance=Enable Magical Guidance at level 5 @@ -179,6 +179,7 @@ ModUi/&EnableUnarmedMainAttackAction=Enable the Unarmed AttackConjure Elemental and Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Enable variable placeholders on descriptions [use {VARIABLE_NAME} as placeholder] ModUi/&EnableWarlockMagicalCunningAtLevel2=Enable Magical Cunning at level 2 +ModUi/&EnableWarlockToLearnPatronAtLevel3=Enable Patron at level 3 instead of 1 ModUi/&EnableWizardToLearnScholarAtLevel2=Enable Scholar at level 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Enable School of Magic at level 3 instead of 2 ModUi/&EnablesAsiAndFeat=Enable both attribute scores increase and feats selection [instead of an exclusive choice] @@ -241,7 +242,7 @@ ModUi/&NeverMoveCameraOnEnemyTurn=+ Camera never moves during enemy turns ModUi/&NoExperienceOnLevelUp=No experience is required to level up ModUi/&OfficialObscurementRulesCancelAdvDisPairs=+ Cancel advantage / disadvantage blinded, invisible, and perceived pairs [useful in conjunction with official advantage / disadvantage rules] ModUi/&OfficialObscurementRulesHeavilyObscuredAsProjectileBlocker=+ Change heavily obscured areas to be projectile blockers [Cloud Kill, Fog Cloud, Incendiary Cloud, Petal Storm, Sleet Storm, Stinking Cloud] -ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Invisible creatures are heavily obscured and can be target, attack rolls against the creature have disadvantage, and the creature's attack rolls have advantage +ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Invisible creatures are heavily obscured, can be target, attack rolls against have disadvantage, and the creature's attack rolls have advantage ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ Change magically obscured areas to be projectile blockers [any source of the Darkness spell effect] ModUi/&OfficialObscurementRulesTweakMonsters=+ Add Darkvision, BlindSight, and TrueSight to monsters and NPCs whenever appropriate ModUi/&OfficialObscurementRulesTweakMonstersHelp=[settings' collections MonstersThatShouldHaveDarkvision, MonstersThatShouldHaveTrueSight, MonstersThatShouldHaveBlindSight] @@ -315,7 +316,6 @@ ModUi/&SwapDruidToUseOneDndWeaponProficiency=Enable Simple Weapon ModUi/&SwapEvocationPotentCantripAndSculptSpell=Swap Evoker Sculpt Spells and Potent Cantrip on progression ModUi/&SwapEvocationSavant=Swap Evoker Evocation Savant with 5e 2024 version [learn 2 school spells when acquired, learn 1 more every time you gain a slot level] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Enable Unarmed Attack to use 5e 2024 die type progression -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Enable Second Wind to use 5e 2024 usages progression ModUi/&SwapWarlockToUseOneDndInvocationProgression=Enable Invocations to use 5e 2024 progression ModUi/&TableTopButton=Select Tabletop content ModUi/&TableTopHelp1=• Following sections re-group and duplicate 5e 2014 and 2024 settings scattered across the mod for your convenience diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt index e6ce70199b..d020bae500 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt @@ -4,8 +4,8 @@ Condition/&ConditionBoomingBladeSheathedDescription=You are sheathed in booming Condition/&ConditionBoomingBladeSheathedTitle=Sheathed Condition/&ConditionGuidanceAcrobaticsDescription=Add 1d4 to Acrobatics checks for up to 1 minute. Condition/&ConditionGuidanceAcrobaticsTitle=Guided Acrobatics -Condition/&ConditionGuidanceAnimal HandlingDescription=Add 1d4 to Animal Handling checks for up to 1 minute. -Condition/&ConditionGuidanceAnimal HandlingTitle=Guided Animal Handling +Condition/&ConditionGuidanceAnimalHandlingDescription=Add 1d4 to Animal Handling checks for up to 1 minute. +Condition/&ConditionGuidanceAnimalHandlingTitle=Guided Animal Handling Condition/&ConditionGuidanceArcanaDescription=Add 1d4 to Arcana checks for up to 1 minute. Condition/&ConditionGuidanceArcanaTitle=Guided Arcana Condition/&ConditionGuidanceAthleticsDescription=Add 1d4 to Athletics checks for up to 1 minute. diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 2a272bb28a..7f592c2603 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -164,6 +164,7 @@ ModUi/&EnableRogueCunningStrike=Habilita Golpe astuto y < ModUi/&EnableRogueFightingStyle=Habilitar la opción Estilo de lucha en el nivel 2 ModUi/&EnableRogueSteadyAim=Habilita Apunta firme en el nivel 3 [la acción adicional otorga ventaja en tu próxima tirada de ataque en el turno actual si aún no te has movido] ModUi/&EnableRogueStrSaving=Habilitar los modificadores DEX o STR de Hoodlum en Golpe astuto/desviado +ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Habilitar Second Wind para usar la progresión de usos de 5e 2024 ModUi/&EnableSignatureSpellsRelearn=Permite que los hechizos exclusivos se preparen cada descanso prolongado [en lugar de una vez en el nivel 20] ModUi/&EnableSorcererInnateSorceryAt1=Habilitar Hechicería innata en el nivel 1 ModUi/&EnableSorcererMagicalGuidance=Habilitar Guía mágica en el nivel 5 @@ -241,7 +242,7 @@ ModUi/&NeverMoveCameraOnEnemyTurn=+ La cámara nunca se mueve durante los tur ModUi/&NoExperienceOnLevelUp=No se requiere experiencia para subir de nivel. ModUi/&OfficialObscurementRulesCancelAdvDisPairs=+ Cancelar los pares ventaja / desventaja cegados, invisibles y percibidos [útil junto con las reglas oficiales de ventaja / desventaja] ModUi/&OfficialObscurementRulesHeavilyObscuredAsProjectileBlocker=+ Cambia las áreas muy oscurecidas para que sean bloqueadores de proyectiles [Nube asesina, Nube de niebla, Nube incendiaria, Tormenta de pétalos, Tormenta de aguanieve, Nube apestosa] -ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Las criaturas invisibles están muy oscurecidas y pueden ser objetivo, las tiradas de ataque contra la criatura tienen desventaja y las tiradas de ataque de la criatura tienen ventaja +ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Las criaturas invisibles están muy oscurecidas, pueden ser objetivo, las tiradas de ataque contra ellas tienen desventaja y las tiradas de ataque de la criatura tienen ventaja ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ Cambiar las áreas oscuras mágicamente para que sean bloqueadores de proyectiles [cualquier fuente del efecto del hechizo Oscuridad] ModUi/&OfficialObscurementRulesTweakMonsters=+ Agrega Visión en la oscuridad, Vista ciega y Vista verdadera a monstruos y PNJ cuando sea apropiado ModUi/&OfficialObscurementRulesTweakMonstersHelp=[colecciones de configuraciones MonstruosQueDeberíanTenerVisiónOscura, MonstruosQueDeberíanTenerVistaVerdadera, MonstruosQueDeberíanTenerVistaCiego] @@ -315,7 +316,6 @@ ModUi/&SwapDruidToUseOneDndWeaponProficiency=Habilita la competencia en Evocador, hechizos de escultura y truco potente al progresar. ModUi/&SwapEvocationSavant=Intercambia Evocador Sabio de la evocación con la versión 5e 2024 [aprende 2 hechizos de la escuela cuando los adquieres, aprende 1 más cada vez que ganas un nivel de ranura] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Habilite Ataque desarmado para usar la progresión de tipo de dado 5e 2024 -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Habilitar Second Wind para usar la progresión de usos de 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Habilitar Invocaciones para usar la progresión 5e 2024 ModUi/&TableTopButton=Seleccionar contenido de Tabletop ModUi/&TableTopHelp1=• Las siguientes secciones reagrupan y duplican las configuraciones de 5e 2014 y 2024 esparcidas por el mod para tu conveniencia. diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt index 614874bc72..7e0212624c 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt @@ -4,8 +4,8 @@ Condition/&ConditionBoomingBladeSheathedDescription=Estás envuelto en una energ Condition/&ConditionBoomingBladeSheathedTitle=Envainado Condition/&ConditionGuidanceAcrobaticsDescription=Añade 1d4 a las pruebas de Acrobacias durante hasta 1 minuto. Condition/&ConditionGuidanceAcrobaticsTitle=Acrobacias guiadas -Condition/&ConditionGuidanceAnimal HandlingDescription=Añade 1d4 a las pruebas de Trato con animales durante hasta 1 minuto. -Condition/&ConditionGuidanceAnimal HandlingTitle=Manejo guiado de animales +Condition/&ConditionGuidanceAnimalHandlingDescription=Añade 1d4 a las pruebas de Trato con animales durante hasta 1 minuto. +Condition/&ConditionGuidanceAnimalHandlingTitle=Manejo guiado de animales Condition/&ConditionGuidanceArcanaDescription=Añade 1d4 a las pruebas de Arcanos durante hasta 1 minuto. Condition/&ConditionGuidanceArcanaTitle=Arcanos guiados Condition/&ConditionGuidanceAthleticsDescription=Añade 1d4 a las pruebas de Atletismo durante hasta 1 minuto. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 07e3182fed..e33f8f305b 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -164,6 +164,7 @@ ModUi/&EnableRogueCunningStrike=Activez Cunning Strike et ModUi/&EnableRogueFightingStyle=Activer le choix du Style de combat au niveau 2 ModUi/&EnableRogueSteadyAim=Activez la Visée constante au niveau 3 [l'action bonus donne un avantage sur votre prochain jet d'attaque dans le tour en cours si vous n'avez pas encore bougé] ModUi/&EnableRogueStrSaving=Activer les modificateurs DEX ou STR de Hoodlum sur Cunning/Devious Strike +ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Activez Second Wind pour utiliser la progression des utilisations 5e 2024 ModUi/&EnableSignatureSpellsRelearn=Activer les sorts signatures pour qu'ils soient préparés à chaque repos long [au lieu d'une fois au niveau 20] ModUi/&EnableSorcererInnateSorceryAt1=Activer la Sorcellerie innée au niveau 1 ModUi/&EnableSorcererMagicalGuidance=Activer la guidance magique au niveau 5 @@ -241,7 +242,7 @@ ModUi/&NeverMoveCameraOnEnemyTurn=+ La caméra ne bouge jamais pendant les to ModUi/&NoExperienceOnLevelUp=Aucune expérience n'est requise pour passer au niveau supérieur ModUi/&OfficialObscurementRulesCancelAdvDisPairs=+ Annuler les paires avantage / inconvénient aveuglées, invisibles et perçues [utile en conjonction avec les règles officielles avantage / inconvénient] ModUi/&OfficialObscurementRulesHeavilyObscuredAsProjectileBlocker=+ Changez les zones fortement obscurcies en bloqueurs de projectiles [Nuage tueur, Nuage de brouillard, Nuage incendiaire, Tempête de pétales, Tempête de grésil, Nuage puant] -ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Les créatures invisibles sont fortement masquées et peuvent être ciblées, les jets d'attaque contre la créature ont un désavantage et les jets d'attaque de la créature ont un avantage +ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Les créatures invisibles sont fortement masquées, peuvent être ciblées, les jets d'attaque contre ont un désavantage et les jets d'attaque de la créature ont un avantage ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ Changez les zones obscurcies par magie en bloqueurs de projectiles [toute source de l'effet du sort Ténèbres] ModUi/&OfficialObscurementRulesTweakMonsters=+ Ajoutez Darkvision, BlindSight et TrueSight aux monstres et aux PNJ lorsque cela est approprié ModUi/&OfficialObscurementRulesTweakMonstersHelp=[collections de paramètres MonstersThatShouldHaveDarkvision, MonstersThatShouldHaveTrueSight, MonstersThatShouldHaveBlindSight] @@ -315,7 +316,6 @@ ModUi/&SwapDruidToUseOneDndWeaponProficiency=Activer la maîtrise des Evoker Evocation Savant avec la version 5e 2024 [apprenez 2 sorts d'école une fois acquis, apprenez-en 1 de plus à chaque fois que vous gagnez un niveau d'emplacement] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Activez Attaque non armée pour utiliser la progression du type de dé 5e 2024 -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Activez Second Wind pour utiliser la progression des utilisations 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Activez les invocations pour utiliser la progression 5e 2024 ModUi/&TableTopButton=Sélectionnez le contenu de la table ModUi/&TableTopHelp1=• Les sections suivantes regroupent et dupliquent les paramètres 5e 2014 et 2024 dispersés dans le mod pour votre commodité diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt index d2b72d78f7..cbdfb2e164 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt @@ -4,8 +4,8 @@ Condition/&ConditionBoomingBladeSheathedDescription=Vous êtes enveloppé d'une Condition/&ConditionBoomingBladeSheathedTitle=Gainé Condition/&ConditionGuidanceAcrobaticsDescription=Ajoutez 1d4 aux tests d'acrobatie pendant 1 minute maximum. Condition/&ConditionGuidanceAcrobaticsTitle=Acrobaties guidées -Condition/&ConditionGuidanceAnimal HandlingDescription=Ajoutez 1d4 aux tests de Dressage d'animaux pendant 1 minute maximum. -Condition/&ConditionGuidanceAnimal HandlingTitle=Manipulation guidée d'animaux +Condition/&ConditionGuidanceAnimalHandlingDescription=Ajoutez 1d4 aux tests de Dressage d'animaux pendant 1 minute maximum. +Condition/&ConditionGuidanceAnimalHandlingTitle=Manipulation guidée d'animaux Condition/&ConditionGuidanceArcanaDescription=Ajoutez 1d4 aux tests d'Arcanes pendant 1 minute maximum. Condition/&ConditionGuidanceArcanaTitle=Arcanes guidés Condition/&ConditionGuidanceAthleticsDescription=Ajoutez 1d4 aux tests d'Athlétisme pendant 1 minute maximum. diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 919512f32e..253e9dc525 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -164,6 +164,7 @@ ModUi/&EnableRogueCunningStrike=Abilita Colpo astuto e Stile di combattimento al livello 2 ModUi/&EnableRogueSteadyAim=Abilita Mira Fissa al livello 3 [l'azione bonus fornisce vantaggio al tuo prossimo tiro di attacco nel turno corrente se non ti sei ancora mosso] ModUi/&EnableRogueStrSaving=Abilita i modificatori DEX o STR di Hoodlum su Colpo astuto/subdolo +ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Abilita Second Wind per usare la progressione di utilizzo 5e 2024 ModUi/&EnableSignatureSpellsRelearn=Abilita la preparazione degli incantesimi distintivi a ogni riposo lungo [invece di una volta al livello 20] ModUi/&EnableSorcererInnateSorceryAt1=Abilita Stregoneria Innata al livello 1 ModUi/&EnableSorcererMagicalGuidance=Abilita Guida magica al livello 5 @@ -241,7 +242,7 @@ ModUi/&NeverMoveCameraOnEnemyTurn=+ La telecamera non si muove mai durante i ModUi/&NoExperienceOnLevelUp=Non è richiesta esperienza per salire di livello ModUi/&OfficialObscurementRulesCancelAdvDisPairs=+ Annulla vantaggio / svantaggio coppie accecate, invisibili e percepite [utile in combinazione con le regole ufficiali vantaggio / svantaggio] ModUi/&OfficialObscurementRulesHeavilyObscuredAsProjectileBlocker=+ Cambia le aree pesantemente oscurate in bloccanti proiettili [Nube Uccisiva, Nube Nebbiosa, Nube Incendiaria, Tempesta di Petali, Tempesta di Nevischio, Nube Puzzolente] -ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Le creature invisibili sono pesantemente oscurate e possono essere bersaglio, i tiri per colpire contro la creatura hanno svantaggio e i tiri per colpire della creatura hanno vantaggio +ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Le creature invisibili sono pesantemente oscurate, possono essere bersaglio, i tiri per colpire contro hanno svantaggio e i tiri per colpire della creatura hanno vantaggio ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ Cambia le aree oscurate magicamente in bloccanti proiettili [qualsiasi fonte dell'effetto dell'incantesimo Oscurità] ModUi/&OfficialObscurementRulesTweakMonsters=+ Aggiungi Visione Oscura, Vista Cieca e Vista Vera a mostri e PNG quando appropriato ModUi/&OfficialObscurementRulesTweakMonstersHelp=[raccolte di impostazioni MonstersThatShouldHaveDarkvision, MonstersThatShouldHaveTrueSight, MonstersThatShouldHaveBlindSight] @@ -315,7 +316,6 @@ ModUi/&SwapDruidToUseOneDndWeaponProficiency=Abilita la competenza in Evocatore Incantesimi di Scultura e Trucchetto Potente durante la progressione ModUi/&SwapEvocationSavant=Sostituisci Evocatore Sapiente dell'evocazione con la versione 5e 2024 [impara 2 incantesimi della scuola quando acquisiti, imparane 1 in più ogni volta che guadagni un livello slot] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Abilita Attacco disarmato per usare la progressione del tipo di dado 5e 2024 -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Abilita Second Wind per usare la progressione di utilizzo 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Abilita Invocazioni per usare la progressione 5e 2024 ModUi/&TableTopButton=Seleziona contenuto Tabletop ModUi/&TableTopHelp1=• Le sezioni seguenti raggruppano e duplicano le impostazioni 5e 2014 e 2024 sparse nella mod per la tua comodità diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt index ee3f1e84e9..96d43aa4fa 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt @@ -4,8 +4,8 @@ Condition/&ConditionBoomingBladeSheathedDescription=Sei avvolto in un'energia ri Condition/&ConditionBoomingBladeSheathedTitle=Guainata Condition/&ConditionGuidanceAcrobaticsDescription=Aggiungi 1d4 alle prove di Acrobazia per un massimo di 1 minuto. Condition/&ConditionGuidanceAcrobaticsTitle=Acrobazie guidate -Condition/&ConditionGuidanceAnimal HandlingDescription=Aggiungere 1d4 alle prove di Addestramento Animali per un massimo di 1 minuto. -Condition/&ConditionGuidanceAnimal HandlingTitle=Gestione guidata degli animali +Condition/&ConditionGuidanceAnimalHandlingDescription=Aggiungere 1d4 alle prove di Addestramento Animali per un massimo di 1 minuto. +Condition/&ConditionGuidanceAnimalHandlingTitle=Gestione guidata degli animali Condition/&ConditionGuidanceArcanaDescription=Aggiungi 1d4 alle prove di Arcano per un massimo di 1 minuto. Condition/&ConditionGuidanceArcanaTitle=Arcani guidati Condition/&ConditionGuidanceAthleticsDescription=Aggiungi 1d4 alle prove di Atletica per un massimo di 1 minuto. diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 21234a21e8..ffb84435fd 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -164,6 +164,7 @@ ModUi/&EnableRogueCunningStrike=レベル 5 と 14 で 狡猾な ModUi/&EnableRogueFightingStyle=レベル2で戦闘スタイルの選択を有効にする ModUi/&EnableRogueSteadyAim=レベル 3 で Steady Aim を有効にします [ボーナス アクションにより、まだ移動していない場合、現在のターンの次の攻撃ロールにアドバンテージが与えられます] ModUi/&EnableRogueStrSaving=狡猾な一撃/悪巧みの一撃に悪党のDEXまたはSTR修飾子を有効にする +ModUi/&EnableSecondWindToUseOneDndUsagesProgression=セカンドウィンドを有効にして、5e 2024の使用状況の進行を使用します ModUi/&EnableSignatureSpellsRelearn=シグネチャー スペル を、長い休憩ごとに準備できるようにします [レベル 20 で 1 回ではなく] ModUi/&EnableSorcererInnateSorceryAt1=レベル 1 で 生来の魔術 を有効にする ModUi/&EnableSorcererMagicalGuidance=レベル5で魔法のガイダンスを有効にする @@ -241,7 +242,7 @@ ModUi/&NeverMoveCameraOnEnemyTurn=+ 敵のターン中はカメラが動か ModUi/&NoExperienceOnLevelUp=レベルアップに経験は必要ありません ModUi/&OfficialObscurementRulesCancelAdvDisPairs=+ 盲目、不可視、知覚のペアの 利点 / 不利 をキャンセルします [公式の 利点 / 不利 ルールと併用すると便利です] ModUi/&OfficialObscurementRulesHeavilyObscuredAsProjectileBlocker=+ 非常に遮蔽されたエリアを投射物ブロッカーに変更します [クラウドキル、霧雲、焼夷雲、花びら嵐、みぞれ嵐、悪臭雲] -ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ 不可視のクリーチャーは、非常に隠蔽されており、ターゲットにすることができます。そのクリーチャーに対する攻撃ロールは不利となり、そのクリーチャーの攻撃ロールは有利となります +ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ 不可視のクリーチャーは、非常に隠蔽され、ターゲットにすることができ、そのクリーチャーに対する攻撃ロールは不利となり、そのクリーチャーの攻撃ロールは有利となる ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ 魔法で隠された領域を、発射物ブロッカー [闇 呪文効果の任意のソース] ModUi/&OfficialObscurementRulesTweakMonsters=+ 適切な場合はいつでも、モンスターと NPC に Darkvision、BlindSight、TrueSight を追加します ModUi/&OfficialObscurementRulesTweakMonstersHelp=[設定のコレクション MonstersThatShouldHaveDarkvisionMonstersThatShouldHaveTrueSightMonstersThatShouldHaveBlindSight] @@ -315,7 +316,6 @@ ModUi/&SwapDruidToUseOneDndWeaponProficiency=シンプル武器エヴォーカーのスカルプトスペルとポテンシャルキャントリップを入れ替える ModUi/&SwapEvocationSavant=Evoker Evocation Savant を 5e 2024 バージョン [取得時に 2 つの学校呪文を習得し、スロット レベルが上がるたびにさらに 1 つ習得する] と入れ替えます ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=非武装攻撃を有効にすると、5e 2024 ダイスタイプの進行が使用可能になります。 -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=セカンドウィンドを有効にして、5e 2024の使用状況の進行を使用します ModUi/&SwapWarlockToUseOneDndInvocationProgression=5e 2024の進行状況を使用するには、Invocationsを有効にします ModUi/&TableTopButton=テーブルトップコンテンツを選択 ModUi/&TableTopHelp1=• 以下のセクションでは、利便性のために、mod 全体に散らばっている 5e 2014 および 2024 設定を再グループ化して複製します。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt index 476184b4ab..704552406d 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt @@ -4,8 +4,8 @@ Condition/&ConditionBoomingBladeSheathedDescription=あなたは轟くエネル Condition/&ConditionBoomingBladeSheathedTitle=鞘付き Condition/&ConditionGuidanceAcrobaticsDescription=最大 1 分間、アクロバット判定に 1d4 を追加します。 Condition/&ConditionGuidanceAcrobaticsTitle=ガイド付きアクロバット -Condition/&ConditionGuidanceAnimal HandlingDescription=最大 1 分間、動物の扱いの判定に 1d4 を追加します。 -Condition/&ConditionGuidanceAnimal HandlingTitle=動物の扱い方ガイド +Condition/&ConditionGuidanceAnimalHandlingDescription=最大 1 分間、動物の扱いの判定に 1d4 を追加します。 +Condition/&ConditionGuidanceAnimalHandlingTitle=動物の扱い方ガイド Condition/&ConditionGuidanceArcanaDescription=最大 1 分間、魔法判定に 1d4 を追加します。 Condition/&ConditionGuidanceArcanaTitle=ガイド付きアルカナ Condition/&ConditionGuidanceAthleticsDescription=最大 1 分間、運動能力判定に 1d4 を追加します。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 2ab926c8bb..c69d8ca53c 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -164,6 +164,7 @@ ModUi/&EnableRogueCunningStrike=레벨 5와 14에서 교활한 ModUi/&EnableRogueFightingStyle=레벨 2에서 격투 스타일 선택 가능 ModUi/&EnableRogueSteadyAim=레벨 3에서 안정적인 조준을 활성화합니다. [현재 턴에서 아직 이동하지 않았다면 다음 공격 굴림에 보너스 액션이 유리해집니다.] ModUi/&EnableRogueStrSaving=교활한/사악한 일격에 후드럼 DEX 또는 STR 수정치를 활성화합니다. +ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Second Wind를 활성화하여 5e 2024 사용 진행을 사용하세요. ModUi/&EnableSignatureSpellsRelearn=긴 휴식마다 특징 주문을 준비할 수 있게 합니다. [레벨 20에서 한 번만] ModUi/&EnableSorcererInnateSorceryAt1=1레벨에서 선천적 마법을 활성화합니다. ModUi/&EnableSorcererMagicalGuidance=레벨 5에서 ​​마법의 안내를 활성화합니다. @@ -241,7 +242,7 @@ ModUi/&NeverMoveCameraOnEnemyTurn=+ 적의 턴 동안 카메라는 절대 움 ModUi/&NoExperienceOnLevelUp=레벨업에 경험치는 필요하지 않습니다. ModUi/&OfficialObscurementRulesCancelAdvDisPairs=+ 이점 / 단점을 취소합니다. 보이지 않는 쌍, 보이지 않는 쌍, 인식된 쌍 [공식 이점 / 단점 규칙과 함께 사용하면 유용함] ModUi/&OfficialObscurementRulesHeavilyObscuredAsProjectileBlocker=+ 매우 가려진 영역을 투사체 차단 장치로 변경 [죽음의 구름, 안개 구름, 방화 구름, 꽃잎 폭풍, 진눈깨비 폭풍, 악취 나는 구름] -ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ 보이지 않는 생물은 심하게 가려져 있어 대상이 될 수 있으며, 생물에 대한 공격 굴림은 불리하고 생물의 공격 굴림은 유리합니다. +ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ 보이지 않는 생물은 심하게 가려져 있고, 대상이 될 수 있으며, 공격 굴림에 불리한 점이 있고, 생물의 공격 굴림에 유리한 점이 있습니다. ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ 마법적으로 가려진 영역을 투사체 차단 장치로 변경 [어둠 주문 효과의 모든 소스] ModUi/&OfficialObscurementRulesTweakMonsters=+ 적절한 경우 몬스터와 NPC에게 암흑 시야, 맹시력, 진시력을 추가합니다. ModUi/&OfficialObscurementRulesTweakMonstersHelp=[설정 컬렉션 어둠의 시야를 가져야 하는 괴물, 진정한 시야를 가져야 하는 괴물, 눈먼 시야를 가져야 하는 괴물] @@ -315,7 +316,6 @@ ModUi/&SwapDruidToUseOneDndWeaponProficiency=간단한 무기소환사 조각 주문과 강력한 주문을 교체하세요. ModUi/&SwapEvocationSavant=Evoker Evocation Savant를 5e 2024 버전으로 교체하세요 [획득 시 학교 주문 2개 배우기, 슬롯 레벨이 올라갈 때마다 1개 더 배우기] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=비무장 공격을 활성화하여 5e 2024 주사위 유형 진행을 사용합니다. -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Second Wind를 활성화하여 5e 2024 사용 진행을 사용하세요. ModUi/&SwapWarlockToUseOneDndInvocationProgression=5e 2024 진행을 사용하려면 호출을 활성화하세요. ModUi/&TableTopButton=테이블탑 콘텐츠 선택 ModUi/&TableTopHelp1=• 다음 섹션은 편의를 위해 모드 전체에 분산된 5e 2014 및 2024 설정을 다시 그룹화하고 복제합니다. diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt index a1987cb55f..78c5c3a27e 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt @@ -4,8 +4,8 @@ Condition/&ConditionBoomingBladeSheathedDescription=당신은 폭발하는 에 Condition/&ConditionBoomingBladeSheathedTitle=외장형 Condition/&ConditionGuidanceAcrobaticsDescription=최대 1분 동안 곡예 검사에 1d4를 추가합니다. Condition/&ConditionGuidanceAcrobaticsTitle=가이드 아크로바틱 -Condition/&ConditionGuidanceAnimal HandlingDescription=최대 1분 동안 동물 취급 검사에 1d4를 추가합니다. -Condition/&ConditionGuidanceAnimal HandlingTitle=안내 동물 취급 +Condition/&ConditionGuidanceAnimalHandlingDescription=최대 1분 동안 동물 취급 검사에 1d4를 추가합니다. +Condition/&ConditionGuidanceAnimalHandlingTitle=안내 동물 취급 Condition/&ConditionGuidanceArcanaDescription=최대 1분 동안 아르카나 검사에 1d4를 추가합니다. Condition/&ConditionGuidanceArcanaTitle=가이드 아르카나 Condition/&ConditionGuidanceAthleticsDescription=최대 1분 동안 운동 능력 검사에 1d4를 추가합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 0329f317c6..eb76ef3e27 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -164,6 +164,7 @@ ModUi/&EnableRogueCunningStrike=Habilite Golpe Astuto e < ModUi/&EnableRogueFightingStyle=Habilitar a escolha Estilo de luta no nível 2 ModUi/&EnableRogueSteadyAim=Habilite Miração Firme no nível 3 [ação bônus dá vantagem na sua próxima jogada de ataque no turno atual se você ainda não se moveu] ModUi/&EnableRogueStrSaving=Habilitar modificadores de DEX ou FOR de Hoodlum em Cunning/Devious Strike +ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Habilitar Second Wind para usar a progressão de usos do 5e 2024 ModUi/&EnableSignatureSpellsRelearn=Habilitar Feitiços de Assinatura para serem preparados a cada descanso longo [em vez de uma vez no nível 20] ModUi/&EnableSorcererInnateSorceryAt1=Habilitar Feitiçaria Inata no nível 1 ModUi/&EnableSorcererMagicalGuidance=Habilitar Orientação Mágica no nível 5 @@ -241,7 +242,7 @@ ModUi/&NeverMoveCameraOnEnemyTurn=+ A câmera nunca se move durante os turnos ModUi/&NoExperienceOnLevelUp=Não é necessária experiência para subir de nível ModUi/&OfficialObscurementRulesCancelAdvDisPairs=+ Cancelar vantagem / desvantagem pares cegos, invisíveis e percebidos [útil em conjunto com as regras oficiais de vantagem / desvantagem] ModUi/&OfficialObscurementRulesHeavilyObscuredAsProjectileBlocker=+ Alterar áreas fortemente obscurecidas para serem bloqueadores de projéteis [Nuvem Mortal, Nuvem de Névoa, Nuvem Incendiária, Tempestade de Pétalas, Tempestade de Granizo, Nuvem Fedorenta] -ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Criaturas invisíveis são fortemente obscurecidas e podem ser alvos, jogadas de ataque contra a criatura têm desvantagem, e as jogadas de ataque da criatura têm vantagem +ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Criaturas invisíveis são fortemente obscurecidas, podem ser alvos, jogadas de ataque contra elas têm desvantagem e as jogadas de ataque da criatura têm vantagem ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ Alterar áreas magicamente obscurecidas para serem bloqueadores de projéteis [qualquer fonte do efeito do feitiço Escuridão] ModUi/&OfficialObscurementRulesTweakMonsters=+ Adicione Visão no Escuro, Visão Cega e Visão Verdadeira aos monstros e PNJs sempre que apropriado ModUi/&OfficialObscurementRulesTweakMonstersHelp=[configurações de coleções MonstrosQueDeveriamTerVisãoNoEscuro, MonstrosQueDeveriamTerVisãoVerdadeira, MonstrosQueDeveriamTerVisãoCega] @@ -315,7 +316,6 @@ ModUi/&SwapDruidToUseOneDndWeaponProficiency=Habilitar proficiência em Evocador Magias de Esculpir e Truque Potente na progressão ModUi/&SwapEvocationSavant=Troque Evocador Sábio da Evocação pela versão 5e 2024 [aprenda 2 magias da escola quando adquiridas, aprenda mais 1 sempre que ganhar um nível de slot] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Habilitar Ataque Desarmado para usar a progressão do tipo de dado 5e 2024 -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Habilitar Second Wind para usar a progressão de usos do 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Habilitar Invocações para usar a progressão 5e 2024 ModUi/&TableTopButton=Selecionar conteúdo de mesa ModUi/&TableTopHelp1=• As seções a seguir reagrupam e duplicam as configurações 5e 2014 e 2024 espalhadas pelo mod para sua conveniência diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt index 5f51c2362d..e3f7c1916b 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt @@ -4,8 +4,8 @@ Condition/&ConditionBoomingBladeSheathedDescription=Você está envolto em energ Condition/&ConditionBoomingBladeSheathedTitle=Embainhado Condition/&ConditionGuidanceAcrobaticsDescription=Adicione 1d4 aos testes de Acrobacia por até 1 minuto. Condition/&ConditionGuidanceAcrobaticsTitle=Acrobacias guiadas -Condition/&ConditionGuidanceAnimal HandlingDescription=Adicione 1d4 aos testes de Lidar com Animais por até 1 minuto. -Condition/&ConditionGuidanceAnimal HandlingTitle=Manejo guiado de animais +Condition/&ConditionGuidanceAnimalHandlingDescription=Adicione 1d4 aos testes de Lidar com Animais por até 1 minuto. +Condition/&ConditionGuidanceAnimalHandlingTitle=Manejo guiado de animais Condition/&ConditionGuidanceArcanaDescription=Adicione 1d4 aos testes de Arcanismo por até 1 minuto. Condition/&ConditionGuidanceArcanaTitle=Arcanos Guiados Condition/&ConditionGuidanceAthleticsDescription=Adicione 1d4 aos testes de Atletismo por até 1 minuto. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 5f86fa81f5..5874ba2a09 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -164,6 +164,7 @@ ModUi/&EnableRogueCunningStrike=Включить умения Х ModUi/&EnableRogueFightingStyle=Включить выбор Боевого стиля на уровне 2 ModUi/&EnableRogueSteadyAim=Включить Точное прицеливание на уровне 3 [бонусным действием даёт преимущество на следующий бросок атаки в текущем ходу, если вы ещё не перемещались] ModUi/&EnableRogueStrSaving=Включить модификаторы DEX или STR Hoodlum для Cunning/Devious Strike +ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Поменяйте Второе дыхание на использование прогрессии использования 5e 2024 ModUi/&EnableSignatureSpellsRelearn=Включить подготовку фирменных заклинаний при каждом продолжительном отдыхе [вместо одного раза на уровне 20] ModUi/&EnableSorcererInnateSorceryAt1=Включить Врожденное колдовство на уровне 1 ModUi/&EnableSorcererMagicalGuidance=Включить Волшебное указание на уровне 5 @@ -241,7 +242,7 @@ ModUi/&NeverMoveCameraOnEnemyTurn=+ Неподвижная камера во ModUi/&NoExperienceOnLevelUp=Отключить систему повышения уровня на основе полученного опыта ModUi/&OfficialObscurementRulesCancelAdvDisPairs=+ Отменить преимущество/помеху для ослеплённых, невидимых и видимых [полезно в сочетании с официальными правилами преимущества/помехи] ModUi/&OfficialObscurementRulesHeavilyObscuredAsProjectileBlocker=+ Позволить сильно заслонённой местности блокировать снаряды [Облако смерти, Туманное облако, Зажигательное облако, Шквал лепестков, Метель, Зловонное облако] -ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Невидимые существа являются сильно заслонёнными и могут быть целью, броски атаки по таким существам совершаются с помехой, а броски атаки существа - с преимуществом +ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Невидимые существа сильно скрыты, могут быть целью, броски атаки против них имеют помеху, а броски атаки существа имеют преимущество ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ Позволить магически заслонённой местности блокировать снаряды [любой источник эффекта заклинания Тьма] ModUi/&OfficialObscurementRulesTweakMonsters=+ Добавить Тёмное зрение, Слепое зрение и Истинное зрение монстрам и NPC, когда это целесообразно ModUi/&OfficialObscurementRulesTweakMonstersHelp=[списки MonstersThatShouldHaveDarkvision, MonstersThatShouldHaveTrueSight, MonstersThatShouldHaveBlindSight находятся в настройках] @@ -315,7 +316,6 @@ ModUi/&SwapDruidToUseOneDndWeaponProficiency=Поменяйте ModUi/&SwapEvocationPotentCantripAndSculptSpell=Поменяйте местами функции Evoker Sculpt Spells и Potent Cantrip ModUi/&SwapEvocationSavant=Замените Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Поменяйте Безоружная атака на использование прогрессии типа кубика 5e 2024 -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=Поменяйте Второе дыхание на использование прогрессии использования 5e 2024 ModUi/&SwapWarlockToUseOneDndInvocationProgression=Поменять местами прогрессию Invocations с версией 5e 2024 ModUi/&TableTopButton=Выберите содержимое Tabletop ModUi/&TableTopHelp1=• Следующие разделы перегруппированы и дублируют настройки 5e 2014 и 2024, разбросанные по всему моду для вашего удобства. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt index 574b6b6dfc..463a96d0af 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt @@ -4,8 +4,8 @@ Condition/&ConditionBoomingBladeSheathedDescription=Вы окутаны бушу Condition/&ConditionBoomingBladeSheathedTitle=Окутан громом Condition/&ConditionGuidanceAcrobaticsDescription=Добавьте 1d4 к проверкам Акробатики на срок до 1 минуты. Condition/&ConditionGuidanceAcrobaticsTitle=Управляемая акробатика -Condition/&ConditionGuidanceAnimal HandlingDescription=Добавьте 1d4 к проверкам Ухода за животными на срок до 1 минуты. -Condition/&ConditionGuidanceAnimal HandlingTitle=Управляемое обращение с животными +Condition/&ConditionGuidanceAnimalHandlingDescription=Добавьте 1d4 к проверкам Ухода за животными на срок до 1 минуты. +Condition/&ConditionGuidanceAnimalHandlingTitle=Управляемое обращение с животными Condition/&ConditionGuidanceArcanaDescription=Добавьте 1d4 к проверкам Арканы на срок до 1 минуты. Condition/&ConditionGuidanceArcanaTitle=Направляемые Арканы Condition/&ConditionGuidanceAthleticsDescription=Добавьте 1d4 к проверкам Атлетики на срок до 1 минуты. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 5ebd376199..aa7bd2f4ec 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -164,6 +164,7 @@ ModUi/&EnableRogueCunningStrike=在 5 级和 14 级启用狡猾 ModUi/&EnableRogueFightingStyle=在第 2 级启用战斗风格选择 ModUi/&EnableRogueSteadyAim=在 3 级时启用稳定瞄准 [如果您尚未移动,则奖励行动会在当前回合的下一次攻击掷骰中提供优势] ModUi/&EnableRogueStrSaving=在狡猾/卑鄙的打击上启用Hoodlum DEX 或 STR 修正 +ModUi/&EnableSecondWindToUseOneDndUsagesProgression=启用 Second Wind 以使用 5e 2024 使用进度 ModUi/&EnableSignatureSpellsRelearn=每次长时间休息时都可准备招牌法术[而不是在 20 级时准备一次] ModUi/&EnableSorcererInnateSorceryAt1=在第 1 级启用天生巫术 ModUi/&EnableSorcererMagicalGuidance=在 5 级时启用魔法指引 @@ -241,7 +242,7 @@ ModUi/&NeverMoveCameraOnEnemyTurn=+ 敌人回合时镜头永不移动 ModUi/&NoExperienceOnLevelUp=无需经验即可升级 ModUi/&OfficialObscurementRulesCancelAdvDisPairs=+ 取消优势/劣势盲注、隐形和感知对[与官方优势/劣势规则结合使用时有用] ModUi/&OfficialObscurementRulesHeavilyObscuredAsProjectileBlocker=+ 将严重遮挡的区域更改为投射物阻挡者[云雾杀戮、浓雾云、燃烧云、花瓣风暴、雨夹雪风暴、臭云] -ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ 隐形生物被严重遮挡,可成为目标,对该生物的攻击掷骰具有劣势,而该生物的攻击掷骰具有优势 +ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ 隐形生物被严重遮挡,可能成为目标,对其的攻击检定具有劣势,而该生物的攻击检定具有优势 ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ 将魔法遮蔽区域更改为投射物阻挡者[任何黑暗法术效果来源] ModUi/&OfficialObscurementRulesTweakMonsters=+ 在适当的情况下为怪物和 NPC 添加 Darkvision、BlindSight 和 TrueSight ModUi/&OfficialObscurementRulesTweakMonstersHelp=[设置的集合MonstersThatShouldHaveDarkvisionMonstersThatShouldHaveTrueSightMonstersThatShouldHaveBlindSight] @@ -315,7 +316,6 @@ ModUi/&SwapDruidToUseOneDndWeaponProficiency=启用简单武器召唤师 塑形法术和强效戏法 ModUi/&SwapEvocationSavant=将Evoker Evocation Savant 与 5e 2024 版本交换[获得时学习 2 个学校法术,每次获得一个插槽等级时再学习 1 个] ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=启用徒手攻击以使用 5e 2024 骰子类型进程 -ModUi/&SwapSecondWindToUseOneDndUsagesProgression=启用 Second Wind 以使用 5e 2024 使用进度 ModUi/&SwapWarlockToUseOneDndInvocationProgression=启用 Invocations 以使用 5e 2024 进程 ModUi/&TableTopButton=选择桌面内容 ModUi/&TableTopHelp1=• 以下部分重新分组并复制了分散在模块中的 5e 2014 和 2024 设置,以方便您使用 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt index e056c8f437..33ff15ac2f 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt @@ -4,8 +4,8 @@ Condition/&ConditionBoomingBladeSheathedDescription=你被轰隆隆的能量所 Condition/&ConditionBoomingBladeSheathedTitle=被笼罩 Condition/&ConditionGuidanceAcrobaticsDescription=将 1d4 添加到杂技检查中,最长可持续 1 分钟。 Condition/&ConditionGuidanceAcrobaticsTitle=杂技指导 -Condition/&ConditionGuidanceAnimal HandlingDescription=在动物处理检查中添加 1d4,最长 1 分钟。 -Condition/&ConditionGuidanceAnimal HandlingTitle=引导动物处理 +Condition/&ConditionGuidanceAnimalHandlingDescription=在动物处理检查中添加 1d4,最长 1 分钟。 +Condition/&ConditionGuidanceAnimalHandlingTitle=引导动物处理 Condition/&ConditionGuidanceArcanaDescription=将 1d4 添加到奥术检查中,持续最多 1 分钟。 Condition/&ConditionGuidanceArcanaTitle=奥秘指引 Condition/&ConditionGuidanceAthleticsDescription=在运动检查中添加 1d4,最长可持续 1 分钟。 From 2e263fbce142f2cdc37c04e9fd53143c45eb1d19 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 3 Nov 2024 20:13:21 -0800 Subject: [PATCH 61/85] add patch to bypass spell req if new warlock invocations progression and tweak bard expertise desc if one level before --- .../Models/Tabletop2024Context.cs | 11 ++++++++ .../Patches/GuiInvocationDefinitionPatcher.cs | 27 +++++++++++++++++-- .../Translations/de/Others-de.txt | 1 + .../Translations/en/Others-en.txt | 1 + .../Translations/es/Others-es.txt | 1 + .../Translations/fr/Others-fr.txt | 1 + .../Translations/it/Others-it.txt | 1 + .../Translations/ja/Others-ja.txt | 1 + .../Translations/ko/Others-ko.txt | 1 + .../Translations/pt-BR/Others-pt-BR.txt | 1 + .../Translations/ru/Others-ru.txt | 1 + .../Translations/zh-CN/Others-zh-CN.txt | 1 + 12 files changed, 46 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 21d0bb5254..1a5f273bbf 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -633,6 +633,17 @@ internal static void SwitchOneDndEnableBardExpertiseOneLevelBefore() featureUnlock.level = level; } + if (Main.Settings.EnableBardExpertiseOneLevelBefore) + { + PointPoolBardExpertiseLevel3.GuiPresentation.description = "Feature/&BardExpertiseExtendedDescription"; + PointPoolBardExpertiseLevel10.GuiPresentation.description = "Feature/&BardExpertiseExtendedDescription"; + } + else + { + PointPoolBardExpertiseLevel3.GuiPresentation.description = "Feature/&BardExpertiseDescription"; + PointPoolBardExpertiseLevel10.GuiPresentation.description = "Feature/&BardExpertiseDescription"; + } + Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } diff --git a/SolastaUnfinishedBusiness/Patches/GuiInvocationDefinitionPatcher.cs b/SolastaUnfinishedBusiness/Patches/GuiInvocationDefinitionPatcher.cs index ecf6776b7f..117b39ae11 100644 --- a/SolastaUnfinishedBusiness/Patches/GuiInvocationDefinitionPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GuiInvocationDefinitionPatcher.cs @@ -29,6 +29,24 @@ private static int TryGetAttributeValue( return hero.GetClassLevel(DatabaseHelper.CharacterClassDefinitions.Warlock); } + //PATCH: allow warlocks to bypass spell knowledge on level 1 if using new warlock 2024 invocations progression + private static bool HasKnowledgeOfSpell(RulesetSpellRepertoire spellRepertoire, SpellDefinition spellDefinition) + { + if (!Main.Settings.EnableWarlockToUseOneDndInvocationProgression) + { + return spellRepertoire.HasKnowledgeOfSpell(spellDefinition); + } + + var screen = Gui.GuiService.GetScreen(); + + if (!screen) + { + return spellRepertoire.HasKnowledgeOfSpell(spellDefinition); + } + + return screen.Visible || spellRepertoire.HasKnowledgeOfSpell(spellDefinition); + } + [NotNull] [UsedImplicitly] public static IEnumerable Transpiler([NotNull] IEnumerable instructions) @@ -36,9 +54,14 @@ public static IEnumerable Transpiler([NotNull] IEnumerable(TryGetAttributeValue).Method)) + .ReplaceCalls(typeof(RulesetSpellRepertoire).GetMethod("HasKnowledgeOfSpell"), + // ReSharper disable once StringLiteralTypo + "GuiInvocationDefinition.IsInvocationMacthingPrerequisites2", new CodeInstruction(OpCodes.Call, - new Func(TryGetAttributeValue).Method)); + new Func(HasKnowledgeOfSpell).Method)); } [UsedImplicitly] diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 6f6f9923f1..63a1df7ecf 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -96,6 +96,7 @@ Feature/&AttributeModifierMonkAbundantKiDescription=Fügen Sie Ihrem Ki-Punkte-P Feature/&AttributeModifierMonkAbundantKiTitle=Reichlich Ki Feature/&AutoPreparedSpellsBardWordOfCreationDescription=Du hast zwei der wichtigsten Worte der Schöpfung gemeistert: die Worte des Lebens und des Todes. Du hast daher immer die Zauber „Machtwort heilen“ und „Machtwort töten“ parat. Wenn du einen der Zauber wirkst, kannst du damit eine zweite Kreatur anvisieren, wenn sich diese innerhalb von 10 Fuß vom ersten Ziel befindet. Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Welten der Schöpfung +Feature/&BardExpertiseExtendedDescription=Wählen Sie zwei Ihrer Fertigkeiten aus. Ihr Fertigkeitsbonus wird für jeden Fähigkeitstest verdoppelt, bei dem Sie eine der gewählten Fertigkeiten verwenden. Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=Wenn dir ein Rettungswurf misslingt, kannst du ihn mit einem Bonus wiederholen, der deiner Kämpferstufe entspricht. Wenn du das tust, musst du den neuen Wurf verwenden und kannst diese Funktion nicht erneut verwenden, bis du eine lange Pause beendet hast. Feature/&ExpandedSpellsDescription={0}\n\n diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 865a3a1f46..d8621c10df 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -96,6 +96,7 @@ Feature/&AttributeModifierMonkAbundantKiDescription=Add half your proficiency bo Feature/&AttributeModifierMonkAbundantKiTitle=Abundant Ki Feature/&AutoPreparedSpellsBardWordOfCreationDescription=You have mastered two of the prime Words of Creation: the words of life and death. You therefore always have the Power Word Heal and Power Word Kill spells prepared. When you cast either spell, you can target a second creature with it if the creature is within 10 feet of the first target. Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Words of Creation +Feature/&BardExpertiseExtendedDescription=Choose two of your skill proficiencies. Your proficiency bonus is doubled for any ability check you make that uses either of the chosen proficiencies. Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=If you fail a saving throw, you can reroll it with a bonus equal to your Fighter level. If you do so, you must use the new roll, and you can't use this feature again until you finish a long rest. Feature/&ExpandedSpellsDescription={0}\n\n diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index a5950d1313..88f9b26b7d 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -96,6 +96,7 @@ Feature/&AttributeModifierMonkAbundantKiDescription=Añade la mitad de tu bonifi Feature/&AttributeModifierMonkAbundantKiTitle=Ki abundante Feature/&AutoPreparedSpellsBardWordOfCreationDescription=Has dominado dos de las palabras principales de la creación: las palabras de vida y muerte. Por lo tanto, siempre tienes preparados los hechizos Palabra de poder sanar y Palabra de poder matar. Cuando lanzas cualquiera de los hechizos, puedes seleccionar una segunda criatura con él si la criatura está a 10 pies o menos del primer objetivo. Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Mundos de la creación +Feature/&BardExpertiseExtendedDescription=Elige dos de tus competencias de habilidad. Tu bonificación por competencia se duplica en cualquier prueba de habilidad que hagas que utilice cualquiera de las competencias elegidas. Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=Si fallas una tirada de salvación, puedes repetirla con una bonificación igual a tu nivel de luchador. Si lo haces, debes usar la nueva tirada y no puedes volver a usar esta característica hasta que termines un descanso prolongado. Feature/&ExpandedSpellsDescription={0}\n\n diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 00cf4cbab3..716748758b 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -96,6 +96,7 @@ Feature/&AttributeModifierMonkAbundantKiDescription=Ajoutez la moitié de votre Feature/&AttributeModifierMonkAbundantKiTitle=Ki abondant Feature/&AutoPreparedSpellsBardWordOfCreationDescription=Vous maîtrisez deux des principaux mots de la création : les mots de vie et de mort. Vous avez donc toujours les sorts Mot de pouvoir Soin et Mot de pouvoir Tuer prêts. Lorsque vous lancez l'un de ces sorts, vous pouvez cibler une seconde créature avec celui-ci si celle-ci se trouve à 3 mètres ou moins de la première cible. Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Mondes de la Création +Feature/&BardExpertiseExtendedDescription=Choisissez deux de vos compétences de maîtrise. Votre bonus de maîtrise est doublé pour tout test de caractéristique que vous effectuez qui utilise l'une des compétences choisies. Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=Si vous ratez un jet de sauvegarde, vous pouvez le relancer avec un bonus égal à votre niveau de Combattant. Dans ce cas, vous devez utiliser le nouveau jet et vous ne pouvez pas utiliser cette fonction à nouveau avant d'avoir terminé un repos long. Feature/&ExpandedSpellsDescription={0}\n\n diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 62d958ffcb..26443affd6 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -96,6 +96,7 @@ Feature/&AttributeModifierMonkAbundantKiDescription=Aggiungi metà del tuo bonus Feature/&AttributeModifierMonkAbundantKiTitle=Ki abbondante Feature/&AutoPreparedSpellsBardWordOfCreationDescription=Hai padroneggiato due delle principali Parole della Creazione: le parole di vita e di morte. Pertanto hai sempre pronti gli incantesimi Power Word Heal e Power Word Kill. Quando lanci uno dei due incantesimi, puoi bersagliare una seconda creatura con esso se la creatura si trova entro 10 piedi dal primo bersaglio. Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Mondi della creazione +Feature/&BardExpertiseExtendedDescription=Scegli due delle tue competenze in abilità. Il tuo bonus di competenza è raddoppiato per ogni controllo di abilità che fai che usa una delle competenze scelte. Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=Se fallisci un tiro salvezza, puoi rilanciarlo con un bonus pari al tuo livello da Guerriero. Se lo fai, devi usare il nuovo tiro e non puoi usare di nuovo questa caratteristica finché non finisci un riposo lungo. Feature/&ExpandedSpellsDescription={0}\n\n diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index afc7d3bd8a..7ebd16b095 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -96,6 +96,7 @@ Feature/&AttributeModifierMonkAbundantKiDescription=熟練度ボーナスの半 Feature/&AttributeModifierMonkAbundantKiTitle=豊かな気 Feature/&AutoPreparedSpellsBardWordOfCreationDescription=あなたは創造の御言葉のうち、生命と死の御言葉の 2 つをマスターしました。そのため、あなたは常にパワー ワード ヒール呪文とパワー ワード キル呪文を準備しています。いずれかの呪文を唱えるときに、クリーチャーが最初のターゲットから 10 フィート以内にいる場合、2 番目のクリーチャーをその呪文でターゲットにすることができます。 Feature/&AutoPreparedSpellsBardWordOfCreationTitle=創造の世界 +Feature/&BardExpertiseExtendedDescription=技能熟練度を 2 つ選択します。選択した熟練度のいずれかを使用する能力チェックでは、熟練度ボーナスが 2 倍になります。 Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=セーヴィング スローに失敗した場合は、ファイター レベルに等しいボーナスを獲得して再ロールできます。その場合は、新しいロールを使用する必要があり、長い休憩が終了するまでこの機能を再度使用することはできません。 Feature/&ExpandedSpellsDescription={0}\n\n diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 538ead4b4a..1fd2f70e96 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -96,6 +96,7 @@ Feature/&AttributeModifierMonkAbundantKiDescription=당신의 숙련도 보너 Feature/&AttributeModifierMonkAbundantKiTitle=풍부한 기 Feature/&AutoPreparedSpellsBardWordOfCreationDescription=당신은 창조의 두 가지 주요 단어, 즉 생명과 죽음의 단어를 마스터했습니다. 따라서 당신은 항상 파워 워드 힐과 파워 워드 킬 주문을 준비합니다. 두 주문을 시전할 때, 생물이 첫 번째 대상에서 10피트 이내에 있는 경우 두 번째 생물을 대상으로 지정할 수 있습니다. Feature/&AutoPreparedSpellsBardWordOfCreationTitle=창조의 세계 +Feature/&BardExpertiseExtendedDescription=두 가지 기술 숙련도를 선택하세요. 선택한 숙련도 중 하나를 사용하는 능력 검사에 대해 숙련도 보너스가 두 배가 됩니다. Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=내성 굴림에 실패하면 파이터 레벨과 동일한 보너스를 받아 다시 굴릴 수 있습니다. 그럴 경우 새 롤을 사용해야 하며, 긴 휴식을 마칠 때까지 이 기능을 다시 사용할 수 없습니다. Feature/&ExpandedSpellsDescription={0}\n\n diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 6d5139311f..24810f8834 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -96,6 +96,7 @@ Feature/&AttributeModifierMonkAbundantKiDescription=Adicione metade do seu bônu Feature/&AttributeModifierMonkAbundantKiTitle=Ki abundante Feature/&AutoPreparedSpellsBardWordOfCreationDescription=Você dominou duas das principais Palavras da Criação: as palavras de vida e morte. Portanto, você sempre tem as magias Palavra de Poder Cura e Palavra de Poder Matar preparadas. Quando você conjura qualquer uma das magias, você pode mirar em uma segunda criatura com ela se a criatura estiver a até 10 pés do primeiro alvo. Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Mundos da Criação +Feature/&BardExpertiseExtendedDescription=Escolha duas de suas proficiências de perícia. Seu bônus de proficiência é dobrado para qualquer teste de habilidade que você fizer que use qualquer uma das proficiências escolhidas. Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=Se você falhar em um teste de resistência, você pode refazê-lo com um bônus igual ao seu nível de Guerreiro. Se fizer isso, você deve usar o novo teste, e você não pode usar esse recurso novamente até terminar um descanso longo. Feature/&ExpandedSpellsDescription={0}\n\n diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index c4821b2059..c8b3db0baf 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -96,6 +96,7 @@ Feature/&AttributeModifierMonkAbundantKiDescription=Добавьте полов Feature/&AttributeModifierMonkAbundantKiTitle=Обильная Ци Feature/&AutoPreparedSpellsBardWordOfCreationDescription=Вы освоили два главных Слова Творения: слова жизни и смерти. Поэтому у вас всегда есть заклинания Power Word Heal и Power Word Kill. Когда вы произносите любое из этих заклинаний, вы можете нацелить его на второе существо, если оно находится в пределах 10 футов от первой цели. Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Миры творения +Feature/&BardExpertiseExtendedDescription=Выберите два из ваших навыков. Ваш бонус мастерства удваивается за любую проверку способности, которую вы делаете, используя любой из выбранных навыков. Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=Вы можете перебросить проваленный спасбросок с бонусом, равным вашему уровню Воина, и должны использовать новый результат. После этого вы можете повторно использовать это умение только после завершения продолжительного отдыха. Feature/&ExpandedSpellsDescription={0}\n\n diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 249d4551e4..e72b3d2716 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -96,6 +96,7 @@ Feature/&AttributeModifierMonkAbundantKiDescription=将你的一半熟练度奖 Feature/&AttributeModifierMonkAbundantKiTitle=气量充沛 Feature/&AutoPreparedSpellsBardWordOfCreationDescription=您已掌握了两个主要的创世之语:生命之语和死亡之语。因此,您始终准备好强力之语治疗和强力之语杀戮法术。当您施放任一法术时,如果该生物距离第一个目标 10 英尺以内,则可以将其作为第二个生物的目标。 Feature/&AutoPreparedSpellsBardWordOfCreationTitle=创造世界 +Feature/&BardExpertiseExtendedDescription=选择两项技能熟练度。使用所选熟练度之一进行的任何能力检定,您的熟练度奖励都会翻倍。 Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=如果你的豁免检定失败,你可以重骰该豁免并获得等于你的战士等级的加值。不过你必须采用重掷的结果。你必须完成一次长休才能再次使用该特性。 Feature/&ExpandedSpellsDescription={0}\n\n From d817f8e9a59fd9ee6dbfaa8a6183472506e705e8 Mon Sep 17 00:00:00 2001 From: Dovel Date: Mon, 4 Nov 2024 12:56:00 +0300 Subject: [PATCH 62/85] update russian translation --- .../Translations/ru/Others-ru.txt | 38 ++--- .../Translations/ru/Settings-ru.txt | 98 ++++++------ .../Translations/ru/Spells/Cantrips-ru.txt | 146 +++++++++--------- .../Translations/ru/Spells/Spells01-ru.txt | 2 +- .../ru/SubClasses/WizardAbjuration-ru.txt | 26 ++-- .../ru/SubClasses/WizardEvocation-ru.txt | 6 +- .../ru/SubClasses/WizardGraviturgist-ru.txt | 24 +-- 7 files changed, 170 insertions(+), 170 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index c8b3db0baf..aa69318df4 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -62,8 +62,8 @@ Condition/&ConditionRogueCunningStrikeDisarmedTitle=Разоружён Condition/&ConditionRogueDeviousStrikeDazedDescription=Вы не можете совершать реакции или бонусные действия, а также должны выбрать что-то одно - перемещаться или совершать другие действия в свой ход. Condition/&ConditionRogueDeviousStrikeDazedTitle=Ошеломлён Condition/&ConditionRogueDeviousStrikeKnockOutTitle=Нокаутирован -Condition/&ConditionSorcererInnateSorceryDescription=+1 к сложности спасброска заклинаний и преимущество при бросках атаки заклинаниями. -Condition/&ConditionSorcererInnateSorceryTitle=Врожденное Колдовство +Condition/&ConditionSorcererInnateSorceryDescription=+1 к Сл спасброска заклинаний и преимущество на броски атаки заклинаниями. +Condition/&ConditionSorcererInnateSorceryTitle=Врождённое чародейство Condition/&ConditionStaggeringBlowAoODescription=Вы не можете совершать атаки по возможности до начала вашего следующего хода. Condition/&ConditionStaggeringBlowAoOTitle=Ошеломляющий удар Condition/&ConditionStopMovementTitle=Остановлен @@ -88,20 +88,20 @@ Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=Вы совершае Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=Восприятие тьмы Feature/&AlwaysBeardDescription=Шанс {0}% отрастить великолепную бороду! Feature/&AncestryLevelUpDraconicDescription=Ваше драконье наследие роднит вас со стихией {0}. -Feature/&AttackModifierMonkMartialArtsExtendedDescription=Вы можете бросить d6 вместо обычного урона от безоружного удара или монашеского оружия, не надевая доспехи или щита. Этот кубик меняется по мере получения вами уровней монаха (d8 на 5-м уровне, d10 на 11-м уровне). Вы можете использовать ловкость вместо силы для бросков атаки и урона от безоружных ударов и монашеского оружия. +Feature/&AttackModifierMonkMartialArtsExtendedDescription=Вы можете использовать d6 вместо обычной кости урона ваших безоружных ударов или атак монашеским оружием. Эта кость увеличивается с вашим уровнем монаха (d8 на 5-м уровне, d10 на 11-м уровне). Вы можете использовать Ловкость вместо Силы для бросков атак и урона ваших безоружных ударов и атак монашеским оружием. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusDescription=Бонусным действием вы можете совершить один безоружный удар. Feature/&AttackModifierMonkMartialArtsUnarmedStrikeBonusTitle=Боевые искусства — бонусный безоружный удар Feature/&AttributeModifierDazzledTitle=Ослеплён Feature/&AttributeModifierMonkAbundantKiDescription=Добавьте половину бонуса мастерства (округленного в меньшую сторону) к вашему запасу очков Ки. Feature/&AttributeModifierMonkAbundantKiTitle=Обильная Ци -Feature/&AutoPreparedSpellsBardWordOfCreationDescription=Вы освоили два главных Слова Творения: слова жизни и смерти. Поэтому у вас всегда есть заклинания Power Word Heal и Power Word Kill. Когда вы произносите любое из этих заклинаний, вы можете нацелить его на второе существо, если оно находится в пределах 10 футов от первой цели. -Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Миры творения -Feature/&BardExpertiseExtendedDescription=Выберите два из ваших навыков. Ваш бонус мастерства удваивается за любую проверку способности, которую вы делаете, используя любой из выбранных навыков. +Feature/&AutoPreparedSpellsBardWordOfCreationDescription=Вы освоили два Слова Творения: слова жизни и смерти. Поэтому у вас всегда подготовлены заклинания Слово силы: Исцеление и Слово силы: Смерть. Когда вы накладываете любое из этих заклинаний, вы можете нацелить его на второе существо, если оно находится в пределах 10 футов от первой цели. +Feature/&AutoPreparedSpellsBardWordOfCreationTitle=Слова творения +Feature/&BardExpertiseExtendedDescription=Выберите 2 навыка из тех, которыми вы владеете. Ваш бонус мастерства для этих навыков удваивается. Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&EnhancedIndomitableResistanceDescription=Вы можете перебросить проваленный спасбросок с бонусом, равным вашему уровню Воина, и должны использовать новый результат. После этого вы можете повторно использовать это умение только после завершения продолжительного отдыха. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Расширенные заклинания -Feature/&FeatureBardSuperiorInspiration2024Description=При броске Инициативы вы восстанавливаете потраченные использования Бардовского вдохновения, пока у вас их не будет два, если у вас их меньше. +Feature/&FeatureBardSuperiorInspiration2024Description=Когда вы совершаете бросок инициативы, вы восстанавливаете потраченные кости Бардовского вдохновения до максимального количества в две кости, если у вас их меньше. Feature/&FeatureBardSuperiorInspiration2024Title=Превосходное вдохновение Feature/&FeatureMonkBodyAndMindDescription=Вы развили свои тело и разум до невероятных высот. Ваши значения Ловкости и Мудрости увеличиваются на 4. Feature/&FeatureMonkBodyAndMindTitle=Тело и разум @@ -114,12 +114,12 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=Улучшенный Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=Дополнительный урон от Жестокого удара увеличивается до 2d10. Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Улучшенный жестокий удар Feature/&FeatureSetBarbarianBrutalStrikeTitle=Жестокий удар -Feature/&FeatureSetDruidPrimalOrderDescription=Вы посвятили себя одной из следующих священных ролей по вашему выбору.\n• Маг. Вы знаете один дополнительный заговор из списка заклинаний друида. Кроме того, ваша мистическая связь с природой дает вам бонус к проверкам Интеллекта (Магия или Природа). Бонус равен 1D6.\n• Страж. Обученный битве, вы приобретаете мастерство владения боевым оружием и тренировку со средней броней. -Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Вы знаете один дополнительный фокус из списка заклинаний Друида. Кроме того, ваша мистическая связь с природой дает вам бонус к проверкам Интеллекта (Магия или Природа). Бонус равен 1D6. -Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Волшебник -Feature/&FeatureSetDruidPrimalOrderTitle=Первоначальный порядок -Feature/&FeatureSetDruidPrimalOrderWardenDescription=Пройдя подготовку к бою, вы приобретаете навыки владения боевым оружием и учитесь носить средние доспехи. -Feature/&FeatureSetDruidPrimalOrderWardenTitle=Надзиратель +Feature/&FeatureSetDruidPrimalOrderDescription=Вы посвятили себя одной из следующих сакральных ролей по вашему выбору.\n• Маг. Вы знаете один дополнительный заговор из списка заклинаний Друида. Кроме того, ваша мистическая связь с природой даёт вам бонус к проверкам Интеллекта (Магия или Природа). Бонус равен 1d6.\n• Хранитель. Обучившись сражениям, вы получаете владения воинским оружием и средней бронёй. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Вы знаете один дополнительный заговор из списка заклинаний Друида. Кроме того, ваша мистическая связь с природой даёт вам бонус к проверкам Интеллекта (Магия или Природа). Бонус равен 1d6. +Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Маг +Feature/&FeatureSetDruidPrimalOrderTitle=Первобытный порядок +Feature/&FeatureSetDruidPrimalOrderWardenDescription=Обучившись сражениям, вы получаете владения воинским оружием и средней бронёй. +Feature/&FeatureSetDruidPrimalOrderWardenTitle=Хранитель Feature/&FeatureSetRageExtendedDescription=В бою вы сражаетесь с первобытной свирепостью. В свой ход вы можете бонусным действием войти в состояние ярости. В состоянии ярости вы получаете следующие преимущества, если не носите тяжёлую броню:\n• Вы совершаете с преимуществом проверки и спасброски Силы.\n• Если вы совершаете рукопашную атаку оружием, используя Силу, вы получаете бонус к броску урона, изначально равный +2, этот урон растёт с уровнем.\n• Вы получаете сопротивление дробящему, колющему и рубящему урону.\n Ваша ярость длится 1 минуту. Она прекращается раньше, если вы потеряли сознание или если вы закончили свой ход, не получив урон или не атаковав враждебное по отношению к вам существо с момента окончания вашего прошлого хода.\n Вы начинаете с двумя использованиями Ярости, восстанавливающимися после продолжительного отдыха. На уровне 7 вы восстанавливаете одно использование Ярости после завершения короткого отдыха. Feature/&FeatureSorcererMagicalGuidanceDescription=Вы можете использовать свой внутренний источник магии, чтобы попытаться обратить неудачу в успех. Когда вы совершаете проверку характеристики и проваливаете её, вы можете потратить 1 единицу чародейства, чтобы перебросить d20, потенциально превращая провал в успех, но должны использовать новый бросок. Feature/&FeatureSorcererMagicalGuidanceTitle=Волшебное указание @@ -153,8 +153,8 @@ Feature/&InvocationPoolSorcererDraconicChoiceLearnTitle=Наследие дра Feature/&MagicAffinityPatronExpandedSpellsDescription={0}\n\n Feature/&MonkAlternateUnarmoredMovementImprovedDescription=На 9-м уровне вы получаете возможность в свой ход перемещаться по вертикальным поверхностям, не падая во время движения. Feature/&MonkAlternateUnarmoredMovementImprovedTitle=Улучшенное движение без доспехов -Feature/&PointPoolWizardScholarDescription=Изучая магию, вы также специализировались в академической области изучения. Выберите один из следующих навыков, в котором вы имеете мастерство: Аркана, История, Расследование, Медицина, Природа или Религия. У вас есть Экспертиза в выбранном навыке. -Feature/&PointPoolWizardScholarTitle=Ученый +Feature/&PointPoolWizardScholarDescription=Изучая магию, вы также специализировались в научной сфере исследований. Выберите один из следующих навыков, которым вы владеете: Магия, История, Расследование, Медицина, Природа или Религия. Вы получаете компетентность в выбранном навыке. +Feature/&PointPoolWizardScholarTitle=Учёный Feature/&PowerAfterRestIdentifyDescription=Опознайте все магические предметы в инвентаре. Feature/&PowerAfterRestIdentifyTitle=Опознание Feature/&PowerBarbarianBrutalStrikeDescription=Жестокий удар TBD @@ -173,7 +173,7 @@ Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=Вы можете Feature/&PowerMonkStepOfTheWindHeightenedMetabolismTitle=Поступь ветра Feature/&PowerMonkSuperiorDefenseDescription=Свободным действием вы можете потратить 3 очка ци, чтобы надёжно защитить себя от урона на 1 минуту или до тех пор, пока не станете недееспособны. В течение этого времени вы обладаете сопротивлением ко всему урону, кроме урона силовым полем. Feature/&PowerMonkSuperiorDefenseTitle=Превосходная защита -Feature/&PowerRangerNatureShroudDescription=Вы черпаете силы природы, чтобы ненадолго скрыться из виду. В качестве бонусного действия вы можете магически стать невидимым вместе со всем снаряжением, которое вы носите или несете, до начала вашего следующего хода. Вы можете использовать эту способность количество раз, равное модификатору атрибута Мудрости, и вы восстановите все использованные использования, когда закончите продолжительный отдых. +Feature/&PowerRangerNatureShroudDescription=Вы обращаетесь к силам природы, чтобы они ненадолго скрыли вас от посторонних глаз. Бонусным действием вы можете магическим образом стать невидимым вместе со своим снаряжением, которое вы несёте или носите, до начала вашего следующего хода. Вы можете использовать это умение количество раз, равное вашему модификатору Мудрости. Вы восстанавливаете все потраченные использования после окончания продолжительного отдыха. Feature/&PowerRangerNatureShroudTitle=Природная завеса Feature/&PowerRogueCunningStrikeDescription=Вы разработали хитрые способы использования Скрытой атаки. Когда вы наносите урон Скрытой атакой, вы можете отказаться от костей Скрытой атаки, чтобы добавить вместо этого дополнительные эффекты Хитрого удара. Feature/&PowerRogueCunningStrikeDisarmDescription=Цель должна преуспеть в спасброске Ловкости или получит помеху на все атаки до конца своего следующего хода. @@ -193,8 +193,8 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=Нокаут Feature/&PowerRogueDeviousStrikeObscureDescription=Цель должна преуспеть в спасброске Ловкости или будет ослеплена до конца своего следующего хода. Feature/&PowerRogueDeviousStrikeObscureTitle=Затемнение Feature/&PowerRogueDeviousStrikeTitle=Коварный удар -Feature/&PowerSorcererInnateSorceryDescription=В качестве бонусного действия вы можете высвободить эту магию на 1 минуту, в течение которой вы получаете следующие преимущества:\n•Сложность спасброска от заклинаний колдуна увеличивается на 1.\n•Вы получаете преимущество на броски атаки заклинаний колдуна, которые вы применяете.\n•Вы можете использовать эту способность дважды, и вы восстанавливаете все потраченные ею использования, когда заканчиваете длительный отдых. -Feature/&PowerSorcererInnateSorceryTitle=Врожденное Колдовство +Feature/&PowerSorcererInnateSorceryDescription=Бонусным действием вы можете высвободить эту магию на 1 минуту, в течение которой вы получаете следующие преимущества:\n• Сл спасбросков ваших заклинаний Чародея увеличивается на 1.\n• Вы получаете преимущество на броски атаки заклинаний Чародея.\n• Вы можете воспользоваться этой способностью дважды, и вы восстанавливаете все потраченные использования, когда заканчиваете продолжительный отдых. +Feature/&PowerSorcererInnateSorceryTitle=Врождённое чародейство Feature/&PowerTeleportSummonDescription=Вы можете телепортироваться в любое место в пределах 5 футов от заклинателя. Feature/&PowerTeleportSummonTitle=Телепортироваться Feature/&PowerVanishSummonDescription=Вы можете заставить призванное существо исчезнуть. @@ -280,7 +280,7 @@ Rules/&ActivationTypeOnPowerActivatedAutoTitle=Автоматическое ум Rules/&ActivationTypeOnRageStartAutomaticTitle=Автоматическое начало ярости Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Автоматическое уменьшение хитов существа до нуля Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Автоматическая скрытая атака -Rules/&ConditionOneDndBarkskinDescription=Класс брони существа становится не ниже 17. +Rules/&ConditionOneDndBarkskinDescription=КД существа становится не ниже 17. Rules/&CounterFormDismissCreatureFormat=Отпускает призванное существо Rules/&MotionFormPullOnTop=Тянуть наверх Rules/&MotionFormPushDownFormat=Толкуть вниз {0} diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 5874ba2a09..95af0e99d0 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -5,24 +5,24 @@ ModUi/&AddBleedingToLesserRestoration=Добавить Крово ModUi/&AddCustomIconsToOfficialItems=Добавить кастомные значки к официальным игровым предметам [боеприпасы, рецепты, наборы и т.д.] [Необходим перезапуск] ModUi/&AddDarknessPerceptiveToDarkRaces=Включить Восприятие тьмы для рас Тёмных эльфов, Тёмных кобольдов и Серых дварфов \n[даёт преимущество при проверках восприятия, когда персонаж не на свету или находится в магической темноте] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Добавлять модификатор Ловкости к броскам Инициативы противников -ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Добавьте Первобытный порядок на уровне 1 и удалите Среднее владение броней +ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Включить Первобытный порядок на уровне 1 и убрать Владение средней бронёй ModUi/&AddFighterLevelToIndomitableSavingReroll=Добавлять уровень класса к повторным спасброскам умения Упорный ModUi/&AddHumanoidFavoredEnemyToRanger=Включить Гуманоидов в список предпочтительных противников ModUi/&AddNewWeaponsAndRecipesToShops=Добавить новые оружия и рецепты в магазины [обмотки, алебарды, пики, длинные булавы, ручные арбалеты] [Необходим перезапуск] ModUi/&AddPaladinSmiteToggle=Добавить переключатель, чтобы позволить Паладинам использовать кару только при критах [полезно для уменьшения количества запросов на реакции] -ModUi/&AddPersuasionToFighterSkillOptions=Добавьте Убеждение к параметрам навыков на уровне 1 +ModUi/&AddPersuasionToFighterSkillOptions=Добавить Убеждение к выбору навыков на уровне 1 ModUi/&AddPickPocketableLoot=Добавить лута для кражи [рекомендуется, если черта Кража включена] ModUi/&AddToStore=Добавить {0} ModUi/&Advanced=Продвинутый: [Необходим перезапуск] ModUi/&AdvancedHelp=• ВНИМАНИЕ: Для этих настроек необходимо, чтобы у игрока был установлен этот мод ModUi/&AllowAllPlayersOnNarrativeSequences=+ Позволить всем игрокам участвовать в нарративных последовательностях -ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Позволить союзникам замечать Сумрачного охотника в естественной темноте +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Позволить союзникам замечать Сумрачного охотника в естественной темноте ModUi/&AllowAnyClassToWearSylvanArmor=Позволить всем классам носить Доспехи Сильвана или Одежды Несущего свет ModUi/&AllowBladeCantripsToUseReach=Позволить Заговорам клинков использовать досягаемость персонажа вместо обычных 5 футов ModUi/&AllowClubsToBeThrown=Позволить метать Дубинки, как Кинжалы или Топорики ModUi/&AllowDisplayingNonSuggestedSpells=Отображать не рекомендуемые заклинания модификации в каждом списке ModUi/&AllowDisplayingOfficialSpells=Отображать официальные заклинания игры в каждом списке -ModUi/&AllowDruidToWearMetalArmor=Позволить Друидам носить металлическую броню [OneDnd] +ModUi/&AllowDruidToWearMetalArmor=Снять ограничения на Металлическую броню ModUi/&AllowDungeonsMaxLevel20=Разрешить подземелья с максимальным уровнем 20 ModUi/&AllowFlightSuspend=Разрешить временно приостанавливать полёт при использовании предметов и заклинаний [не затрагивает Дикий облик и летающие расы] ModUi/&AllowGadgetsAndPropsToBePlacedAnywhere=Включить CTRL-клик для обхода любого требования при размещении устройств или реквизита @@ -42,7 +42,7 @@ ModUi/&BlindedConditionDontAllowAttackOfOpportunity=Отключить атак ModUi/&Blueprints=Чертежи ModUi/&Campaigns=Кампании ModUi/&Category=Категория -ModUi/&ChangeBardicInspirationDurationToOneHour=Измените длительность Бардского вдохновения на 1 час вместо 10 минут. +ModUi/&ChangeBardicInspirationDurationToOneHour=Изменить длительность Вдохновения барда на 1 час вместо 10 минут ModUi/&ChangeDragonbornElementalBreathUsages=Изменить количество использований Драконорождёнными стихийного дыхания на модификатор ТЕЛ до короткого отдыха ModUi/&ChangeSleetStormToCube=Использовать для Метели куб вместо цилиндра ModUi/&Changelog=Список изменений @@ -62,7 +62,7 @@ ModUi/&CriticalOption1=1: суммирует ма ModUi/&CriticalOption2=2: продолжает кидать кость урона, на которой выпало максимальное значение, и добавляет его к урону ModUi/&CriticalOption3=3: полностью удваивает урон вместо бросания дополнительных костей. [(XdY+Z)*2] ModUi/&DisableAutoEquip=Отключить автонадевание предметов в инвентаре -ModUi/&DisableBarbarianBrutalCritical=+ Также отключите Brutal Critical на уровнях 9, 13 и 17 +ModUi/&DisableBarbarianBrutalCritical=+ Также отключить Сильный критический удар на уровнях 9, 13 и 17 ModUi/&DisableCastSpellPreRequisitesOnModFeats=Отключить обязательные условия наложения заклинаний для черт из этого мода [Необходим перезапуск] ModUi/&DisableClassPrerequisitesOnModFeats=Отключить требования по уровню для черт ModUi/&DisableMultilineSpellOffering=Отключить многострочное отображение заклинаний на панели действий [в первую очередь для пользователей контроллеров, играющих за персонажей, не являющихся мультикастерами] @@ -98,16 +98,16 @@ ModUi/&EnableAdditionalIconsOnLevelMap=Включить дополнительн ModUi/&EnableAdditionalItemsInDungeonMaker=Добавить предметы мода в редактор ModUi/&EnableAlternateHuman=Включить альтернативное происхождение Человека [+1 черта / +2 очка характеристик / +1 навык] ModUi/&EnableAlternateVotingSystem=Включить альтернативную систему голосования [весомость выбора = голоса * модификатор Харизмы героя] -ModUi/&EnableBG3AbjurationArcaneWard=Включить реализацию Abjurer Arcane Ward для работы как BG3 +ModUi/&EnableBG3AbjurationArcaneWard=Включить реализацию Магической защиты Волшебника школы Ограждения как в BG3 ModUi/&EnableBG3AbjurationArcaneWardHelp=[Уменьшать на 1 каждый раз при предотвращении урона вместо уменьшения на количество предотвращённого урона. Нет необходимости в накладывании заклинания школы Ограждения для активации,\nно максимальные хиты защиты равны двукратному уровню Волшебника без модификатора ИНТ, восстанавливается наполовину после долгого отдыха] ModUi/&EnableBarbarianBrutalStrike=Включить Жестокий удар и Улучшенный жестокий удар на уровнях 9, 13 и 17 ModUi/&EnableBarbarianFightingStyle=Включить выбор Боевого стиля на уровне 2 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Включить завершение эффектов Безрассудной атаки в начале следующего хода ModUi/&EnableBarbarianRegainOneRageAtShortRest=Включить на уровне 7 возможность восстанавливать один заряд Ярости за короткий отдых -ModUi/&EnableBardExpertiseOneLevelBefore=Включить Экспертизу на уровнях 2 и 9 вместо 3 и 10 -ModUi/&EnableBardHealingBalladOnLongRest=Включить Колледж Надежды Исцеляющая баллада при длительном отдыхе -ModUi/&EnableBardSuperiorInspirationAtLevel18=Включить Превосходное вдохновение на уровне 18 вместо 20, а также предоставить две перезарядки вместо 1 -ModUi/&EnableBardWordsOfCreationAtLevel20=Включить Слова Творения на уровне 20 +ModUi/&EnableBardExpertiseOneLevelBefore=Включить Компетентность на уровнях 2 и 9 вместо 3 и 10 +ModUi/&EnableBardHealingBalladOnLongRest=Включить Бардам коллегии надежды работу умения Целительная баллада при длительном отдыхе +ModUi/&EnableBardSuperiorInspirationAtLevel18=Включить Превосходное вдохновение на уровне 18 вместо 20, а также давать 2 использования вместо 1 +ModUi/&EnableBardWordsOfCreationAtLevel20=Включить Слова творения на уровне 20 ModUi/&EnableBetaContent=Включить бета-контент [Необходим перезапуск] ModUi/&EnableCancelEditOnRightMouseClick=Включить отмену действия правым кликом мыши ModUi/&EnableCantripsTriggeringOnWarMagic=Разрешить срабатывание дополнительной бонусной атаки Боевой магии от заговоров @@ -145,43 +145,43 @@ ModUi/&EnableMonkImprovedUnarmoredMovementToMoveOnTheWall=Позволить и ModUi/&EnableMonkSuperiorDefenseToReplaceEmptyBody=Включить Превосходную защиту вместо Пустого тела на уровне 18 ModUi/&EnableMonkWeaponSpecialization=Включить Специализацию на оружии на уровнях 2 и 11 [оружие выбранного типа становится для вас оружием монаха] ModUi/&EnableMulticlass=Включить мультиклассирование [Необходим перезапуск] -ModUi/&EnableOneDnDPreparedSpellsTables=Разрешить всем заклинателям использовать новые подготовленные таблицы заклинаний [Бард, Клирик, Друид, Паладин, Рейнджер, Колдун, Волшебник] -ModUi/&EnableOneDndBarkskinSpell=Поменяйте Barkskin на версию 5e 2024 [бонусное действие, нет концентрации, AC установлен на 17] -ModUi/&EnableOneDndGuidanceSpell=Поменяйте руководство с версией 5e 2024 [Выберите один навык при касте и получите бонус на срок до 1 минуты.] -ModUi/&EnableOneDndHealingSpellsUpgrade=Включить улучшение костей лечения для Лечения ран, Лечащего слова, Множественного лечения ран и Множественного лечащего слова [OneDnd] -ModUi/&EnablePaladinLayOnHandsAsBonusAction=Включить Наложение рук бонусным действием [OneDnd] -ModUi/&EnablePaladinSmiteAsBonusAction=Включить Кару бонусным действием [OneDnd] -ModUi/&EnablePaladinSpellCastingAtLevel1=Включить заклинание на уровне 1 вместо 2 +ModUi/&EnableOneDnDPreparedSpellsTables=Включить всем Заклинателям использовать новые таблицы подготовленных заклинаний [Бард, Жрец, Друид, Паладин, Следопыт, Чародей, Волшебник] +ModUi/&EnableOneDndBarkskinSpell=Включить версию заклинания Дубовая кора из 5e 2024 [бонусное действие, не требует концентрации, КД на 17] +ModUi/&EnableOneDndGuidanceSpell=Включить версию заклинания Указание из 5e 2024 [Выберите один навык при наложении и получите бонус на срок до 1 минуты.] +ModUi/&EnableOneDndHealingSpellsUpgrade=Включить версии заклинаний Лечение ран, Лечащее слово, Множественное лечение ран и Множественное лечащее слово из 5e 2024 +ModUi/&EnablePaladinLayOnHandsAsBonusAction=Включить Наложение рук бонусным действием +ModUi/&EnablePaladinSmiteAsBonusAction=Включить Кару бонусным действием +ModUi/&EnablePaladinSpellCastingAtLevel1=Включить возможность наложения заклинаний на 1-м уровне вместо 2-го ModUi/&EnablePcgRandom=Включить улучшенный алгоритм генерации случайных чисел [https://www.pcg-random.org] ModUi/&EnableProneAction=Включить действие Упасть ничком [вы можете упасть ничком без затрат каких-либо действий] ModUi/&EnablePullPushOnVerticalDirection=Включить работу эффектов толкания и притяжения по вертикальным осям -ModUi/&EnableRangerNatureShroudAt14=Включить функцию Nature's Veil на уровне 14 [в качестве бонусного действия вы можете магическим образом стать невидимым до начала следующего хода] -ModUi/&EnableRangerSpellCastingAtLevel1=Включить заклинание на уровне 1 вместо 2 +ModUi/&EnableRangerNatureShroudAt14=Включить умение Природная завеса на уровне 14 [бонусным действием вы можете волшебным образом стать невидимым до начала следующего хода] +ModUi/&EnableRangerSpellCastingAtLevel1=Включить возможность наложения заклинаний на 1-м уровне вместо 2-го ModUi/&EnableRelearnSpells=Включить возможность выбирать заговоры или заклинания, уже известные из других источников ModUi/&EnableRespecAction=Включить возможность РЕСПЕКа после отдыха [не используйте РЕСПЕК в многопользовательских сессиях] -ModUi/&EnableRitualOnAllCasters=Включить Ритуал для всех заклинателей +ModUi/&EnableRitualOnAllCasters=Включить Ритуальное колдовство для всех заклинателей ModUi/&EnableRogueCunningStrike=Включить умения Хитрого удара и Коварного удара на уровнях 5 и 14 соответственно [вы отказываетесь от 1 кости скрытой атаки для применения дополнительных эффектов] ModUi/&EnableRogueFightingStyle=Включить выбор Боевого стиля на уровне 2 ModUi/&EnableRogueSteadyAim=Включить Точное прицеливание на уровне 3 [бонусным действием даёт преимущество на следующий бросок атаки в текущем ходу, если вы ещё не перемещались] -ModUi/&EnableRogueStrSaving=Включить модификаторы DEX или STR Hoodlum для Cunning/Devious Strike -ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Поменяйте Второе дыхание на использование прогрессии использования 5e 2024 -ModUi/&EnableSignatureSpellsRelearn=Включить подготовку фирменных заклинаний при каждом продолжительном отдыхе [вместо одного раза на уровне 20] -ModUi/&EnableSorcererInnateSorceryAt1=Включить Врожденное колдовство на уровне 1 +ModUi/&EnableRogueStrSaving=Включить Головорезу использование модификаторов ЛОВ или СИЛ для Хитрого/Коварного удара +ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Включить прогрессию использований Второго дыхания из 5e 2024 +ModUi/&EnableSignatureSpellsRelearn=Включить подготовку Фирменных заклинаний после каждого продолжительного отдыха [вместо того, чтобы выбирать их один раз на 20-м уровне] +ModUi/&EnableSorcererInnateSorceryAt1=Включить Врождённое чародейство на уровне 1 ModUi/&EnableSorcererMagicalGuidance=Включить Волшебное указание на уровне 5 ModUi/&EnableSorcererQuickenedAction=Включить действие Ускоренное заклинание, позволяющее накладывать заклинание основного действия с применением метамагии Ускоренного заклинания. ModUi/&EnableSortingDungeonMakerAssets=Включить сортировку ассетов в редакторе Создателя Подземелий ModUi/&EnableStatsOnHeroTooltip=Отображать статистику на всплывающей подсказке о герое [например: критические удары, критические промахи и т.д.] ModUi/&EnableSumD20OnAlternateVotingSystem=+ Также каждый герой добавляет к весомости результат броска D20 для привнесения элемента случайности [весомость выбора = голоса * модификатор Харизмы героя + бросок D20] -ModUi/&EnableSurprisedToEnforceDisadvantage=Включить изменения для состояния Застигнут врасплох: бросок инициативы совершается с помехой вместо пропуска раунда [OneDnd] +ModUi/&EnableSurprisedToEnforceDisadvantage=Включить изменения для состояния Застигнут врасплох: бросок инициативы совершается с помехой вместо пропуска раунда ModUi/&EnableTeleportToRemoveRestrained=Включить возможность Телепортации снимать все состояния задержки с цели ModUi/&EnableTooltipDistance=Включить отображение расстояния во всплывающей подсказке панели при наведении курсора на персонажа в бою ModUi/&EnableUnarmedMainAttackAction=Включить действие Безоружная атака [если персонаж держит оружие в основной руке и он Монах, или если он использует Обмотки или Перчатки] ModUi/&EnableUpcastConjureElementalAndFey=Включить возможность накладывать на высоких уровнях Призыв элементаля и Призыв феи ModUi/&EnableVariablePlaceholdersOnTexts=Включить заглушки для переменных описаний [использовать {VARIABLE_NAME} в качесте заглушки] ModUi/&EnableWarlockMagicalCunningAtLevel2=Включить Магическую хитрость на уровне 2 -ModUi/&EnableWarlockToLearnPatronAtLevel3=Включить Покровителя на уровне 3 вместо 1 -ModUi/&EnableWizardToLearnScholarAtLevel2=Включить Академию на уровне 2 -ModUi/&EnableWizardToLearnSchoolAtLevel3=Включить Школу магии на уровне 3 вместо 2 +ModUi/&EnableWarlockToLearnPatronAtLevel3=Включить выбор Покровителя на 3-м уровне вместо 1-го +ModUi/&EnableWizardToLearnScholarAtLevel2=Включить Учёного на уровне 2 +ModUi/&EnableWizardToLearnSchoolAtLevel3=Включить изучение Магических традиций на 3-м уровне вместо 2-го ModUi/&EnablesAsiAndFeat=Включить возможность и повышать характеристики, и выбирать черту одновременно [вместо того, чтобы делать выбор между этими вариантами] ModUi/&EncounterPercentageChance=Вероятность случайных событий в процентах ModUi/&Encounters=События @@ -210,7 +210,7 @@ ModUi/&FullyControlConjurations=Полностью контролировать ModUi/&Gameplay=Игровой процесс ModUi/&General=Основные: ModUi/&GeneralMenu=Основные -ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Предоставить «Специализацию на оружии» «Скимитар» Бардам и Разбойникам +ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Дать Специализацию на оружии скимитаров Бардам и Плутам ModUi/&GridSelectedColor=Изменить цвет сетки перемещения ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Скрыть визуальные эффекты выходов и телепортов, если они ещё не открыты ModUi/&HideMonsterHitPoints=Отображать здоровье противников в относительных 25% / 50% / 75% / 100% вместо точных значений хитов @@ -242,12 +242,12 @@ ModUi/&NeverMoveCameraOnEnemyTurn=+ Неподвижная камера во ModUi/&NoExperienceOnLevelUp=Отключить систему повышения уровня на основе полученного опыта ModUi/&OfficialObscurementRulesCancelAdvDisPairs=+ Отменить преимущество/помеху для ослеплённых, невидимых и видимых [полезно в сочетании с официальными правилами преимущества/помехи] ModUi/&OfficialObscurementRulesHeavilyObscuredAsProjectileBlocker=+ Позволить сильно заслонённой местности блокировать снаряды [Облако смерти, Туманное облако, Зажигательное облако, Шквал лепестков, Метель, Зловонное облако] -ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Невидимые существа сильно скрыты, могут быть целью, броски атаки против них имеют помеху, а броски атаки существа имеют преимущество +ModUi/&OfficialObscurementRulesInvisibleCreaturesCanBeTarget=+ Невидимые существа являются сильно заслонёнными, могут быть целью, броски атаки по которой совершаются с помехой, а броски атаки существа - с преимуществом ModUi/&OfficialObscurementRulesMagicalDarknessAsProjectileBlocker=+ Позволить магически заслонённой местности блокировать снаряды [любой источник эффекта заклинания Тьма] ModUi/&OfficialObscurementRulesTweakMonsters=+ Добавить Тёмное зрение, Слепое зрение и Истинное зрение монстрам и NPC, когда это целесообразно ModUi/&OfficialObscurementRulesTweakMonstersHelp=[списки MonstersThatShouldHaveDarkvision, MonstersThatShouldHaveTrueSight, MonstersThatShouldHaveBlindSight находятся в настройках] -ModUi/&OneDnd=Столешница [5e 2024]: -ModUi/&OneDndHealingPotionBonusAction=Включить использование Лечебных Зелий и Антитоксинов бонусным действием [OneDnd] +ModUi/&OneDnd=Настольные правила [5e 2024]: +ModUi/&OneDndHealingPotionBonusAction=Включить использование Лечебных Зелий и Антитоксинов бонусным действием ModUi/&OnlyShowMostPowerfulUpcastConjuredElementalOrFey=+ Показывать только самых мощных существ в списке призыва ModUi/&OutlineGridWidthModifier=Увеличить толщину контура сетки передвижения на множитель [%] ModUi/&OutlineGridWidthSpeed=Увеличить скорость анимации контура сетки передвижения на множитель [%] @@ -262,14 +262,14 @@ ModUi/&Races=Расы ModUi/&RecipeCost=Стоимость рецепта ModUi/&RelicForgeries=Поддельные реликвии ModUi/&RemoveAttunementRequirements=Убрать требования настройки [Необходим перезапуск] -ModUi/&RemoveBardMagicalSecretAt14And18=Удалить Волшебный секрет на 14 и 18 -ModUi/&RemoveBardSongOfRestAt2=Удалить Песнь покоя на уровне 2 +ModUi/&RemoveBardMagicalSecretAt14And18=Убрать Тайны магии на уровнях 14 и 18 +ModUi/&RemoveBardSongOfRestAt2=Убрать Песнь отдыха на уровне 2 ModUi/&RemoveBugVisualModels=Заменить паукообразные модельки в игре на медведеобразные [арахнофобия] [Необходим перезапуск] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Убрать гуманоидный фильтр на Жуткий смех ModUi/&RemoveRecurringEffectOnEntangle=Применять эффект Опутывания только на время действия заклинания, а также принудительно совершать проверку Силы, чтобы вырваться из лоз -ModUi/&RemoveRogueBlindSense=Удалить Слепое чувство на уровне 14 -ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Снять ограничения по школе заклинаний с Заклинателя теней -ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Снять ограничения по школе заклинаний с Боевого волшебника +ModUi/&RemoveRogueBlindSense=Убрать Слепое зрение на уровне 14 +ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Снять ограничения по школе заклинаний с Заклинателя теней +ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Снять ограничения по школе заклинаний с Боевого волшебника ModUi/&RestockAntiquarians=Пополнять Антикваров [Халман Саммер] ModUi/&RestockArcaneum=Пополнять Арканеум [Хеддлон Щёспелл] ModUi/&RestockCircleOfDanantar=Пополнять Круг Данантара [Джориэль Фокси] @@ -310,17 +310,17 @@ ModUi/&StockGorimStoreWithAllNonMagicalInstruments=Пополнить магаз ModUi/&StockHugoStoreWithAdditionalFoci=Пополнить магазин Хьюго наборами магических фокусировок: Магических посохов, Друидических подвесок, Жезлов и Дубинок ModUi/&Subclasses=Архетипы ModUi/&Subraces=Подрасы -ModUi/&SwapAbjurationSavant=Поменяйте Abjurer Abjuration Savant на версию 5e 2024 [изучите 2 школьных заклинания при получении, изучайте еще 1 каждый раз, когда получаете уровень слота] -ModUi/&SwapCraftedItemAndRecipeIcons=+ Заменить значок рецепта значком создаваемого предмета в магазинеModUi/&SwapEvocationSavant=Замените Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] -ModUi/&SwapDruidToUseOneDndWeaponProficiency=Поменяйте Владение оружием на версию 5e 2024 [простое оружие вместо типов оружия, но вы теряете владение ятаганом] -ModUi/&SwapEvocationPotentCantripAndSculptSpell=Поменяйте местами функции Evoker Sculpt Spells и Potent Cantrip -ModUi/&SwapEvocationSavant=Замените Evoker Evocation Savant на версию 5e 2024 [выучите 2 школьных заклинания при получении, выучите еще 1 каждый раз, когда получаете уровень слота] -ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Поменяйте Безоружная атака на использование прогрессии типа кубика 5e 2024 -ModUi/&SwapWarlockToUseOneDndInvocationProgression=Поменять местами прогрессию Invocations с версией 5e 2024 -ModUi/&TableTopButton=Выберите содержимое Tabletop -ModUi/&TableTopHelp1=• Следующие разделы перегруппированы и дублируют настройки 5e 2014 и 2024, разбросанные по всему моду для вашего удобства. -ModUi/&TableTopHelp2=• Нажмите кнопку, чтобы выбрать только настольный контент на вкладке «Персонаж», и выберите все параметры ниже, чтобы получить настоящий опыт TT -ModUi/&Tabletop=Столешница [5e 2014]: +ModUi/&SwapAbjurationSavant=Поменять умение Волшебника школы Ограждения Мастер ограждения на версию 5e 2024 [изучите 2 заклинания школы при получении умения, изучите ещё 1 каждый раз, когда увеличиваете уровень ячейки] +ModUi/&SwapCraftedItemAndRecipeIcons=+ Заменить значок рецепта значком создаваемого предмета в магазине +ModUi/&SwapDruidToUseOneDndWeaponProficiency=Включить владение Простым оружием [вместо отдельных видов оружия, однако теряется владение скимитаром] +ModUi/&SwapEvocationPotentCantripAndSculptSpell=Поменять местами в очерёдности развития умения Волшебника школы Воплощения Построение заклинаний и Мощный заговор +ModUi/&SwapEvocationSavant=Поменять умения Волшебника школы Воплощения Мастер воплощения на версию 5e 2024 [изучите 2 заклинания школы при получении умения, изучите ещё 1 каждый раз, когда увеличиваете уровень ячейки] +ModUi/&SwapMonkToUseOneDndUnarmedDieTypeProgression=Включить прогрессию типа кости Безоружной атаки по версии 5e 2024 +ModUi/&SwapWarlockToUseOneDndInvocationProgression=Поменять прогрессию Воззваний на версию 5e 2024 +ModUi/&TableTopButton=Выбрать Настольные правила +ModUi/&TableTopHelp1=• Следующие разделы перегруппируют и дублируют настройки 5e 2014 и 2024, разбросанные по всему моду для вашего удобства +ModUi/&TableTopHelp2=• Нажмите кнопку, чтобы выбрать только Настольные правила на вкладке Персонажа, и включите все параметры ниже, чтобы получить настоящий опыт настольной игры +ModUi/&Tabletop=Настольные правила [5e 2014]: ModUi/&TargetLanguage=Язык перевода ModUi/&TotalCraftingTimeModifier=Уменьшить время крафта на ModUi/&TotalFeatsGrantedFirstLevel=Общее количество черт, получаемых на первом уровне diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt index 463a96d0af..5a477f0b68 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt @@ -2,42 +2,42 @@ Condition/&ConditionAcidClawsDescription=-1 КД. Condition/&ConditionAcidClawsTitle=Кислотный ожог Condition/&ConditionBoomingBladeSheathedDescription=Вы окутаны бушующей энергией. Если вы добровольно переместитесь на 5 футов и более, вы получите урон звуком. Condition/&ConditionBoomingBladeSheathedTitle=Окутан громом -Condition/&ConditionGuidanceAcrobaticsDescription=Добавьте 1d4 к проверкам Акробатики на срок до 1 минуты. -Condition/&ConditionGuidanceAcrobaticsTitle=Управляемая акробатика -Condition/&ConditionGuidanceAnimalHandlingDescription=Добавьте 1d4 к проверкам Ухода за животными на срок до 1 минуты. -Condition/&ConditionGuidanceAnimalHandlingTitle=Управляемое обращение с животными -Condition/&ConditionGuidanceArcanaDescription=Добавьте 1d4 к проверкам Арканы на срок до 1 минуты. -Condition/&ConditionGuidanceArcanaTitle=Направляемые Арканы -Condition/&ConditionGuidanceAthleticsDescription=Добавьте 1d4 к проверкам Атлетики на срок до 1 минуты. -Condition/&ConditionGuidanceAthleticsTitle=Легкая атлетика под руководством инструктора -Condition/&ConditionGuidanceDeceptionDescription=Добавьте 1d4 к проверкам Обмана на срок до 1 минуты. -Condition/&ConditionGuidanceDeceptionTitle=Управляемый обман -Condition/&ConditionGuidanceHistoryDescription=Добавьте 1d4 к проверкам Истории на срок до 1 минуты. -Condition/&ConditionGuidanceHistoryTitle=История под руководством -Condition/&ConditionGuidanceInsightDescription=Добавьте 1d4 к проверкам Проницательности на срок до 1 минуты. -Condition/&ConditionGuidanceInsightTitle=Направляемое понимание -Condition/&ConditionGuidanceIntimidationDescription=Добавьте 1d4 к проверкам Запугивания на срок до 1 минуты. -Condition/&ConditionGuidanceIntimidationTitle=Направленное запугивание -Condition/&ConditionGuidanceInvestigationDescription=Добавьте 1d4 к проверкам Расследования на срок до 1 минуты. -Condition/&ConditionGuidanceInvestigationTitle=Направляемое расследование -Condition/&ConditionGuidanceMedecineDescription=Добавьте 1d4 к проверкам Медицины на срок до 1 минуты. -Condition/&ConditionGuidanceMedecineTitle=Направленная медицина -Condition/&ConditionGuidanceNatureDescription=Добавьте 1d4 к проверкам Природы на срок до 1 минуты. -Condition/&ConditionGuidanceNatureTitle=Природа под руководством гида -Condition/&ConditionGuidancePerceptionDescription=Добавьте 1d4 к проверкам Восприятия на срок до 1 минуты. -Condition/&ConditionGuidancePerceptionTitle=Направляемое восприятие -Condition/&ConditionGuidancePerformanceDescription=Добавьте 1d4 к проверкам производительности на срок до 1 минуты. -Condition/&ConditionGuidancePerformanceTitle=Управляемая производительность -Condition/&ConditionGuidancePersuasionDescription=Добавьте 1d4 к проверкам Убеждения на срок до 1 минуты. -Condition/&ConditionGuidancePersuasionTitle=Направляемое убеждение -Condition/&ConditionGuidanceReligionDescription=Добавьте 1d4 к проверкам религии на срок до 1 минуты. -Condition/&ConditionGuidanceReligionTitle=Направляемая религия -Condition/&ConditionGuidanceSleightOfHandDescription=Добавьте 1d4 к проверкам SleightOfHand на срок до 1 минуты. -Condition/&ConditionGuidanceSleightOfHandTitle=Управляемая ловкость рук -Condition/&ConditionGuidanceStealthDescription=Добавьте 1d4 к проверкам Скрытности на срок до 1 минуты. -Condition/&ConditionGuidanceStealthTitle=Управляемая скрытность -Condition/&ConditionGuidanceSurvivalDescription=Добавьте 1d4 к проверкам Выживания на срок до 1 минуты. -Condition/&ConditionGuidanceSurvivalTitle=Управляемое выживание +Condition/&ConditionGuidanceAcrobaticsDescription=Вы добавляете 1d4 к проверкам Акробатики на срок до 1 минуты. +Condition/&ConditionGuidanceAcrobaticsTitle=Указание на акробатику +Condition/&ConditionGuidanceAnimalHandlingDescription=Вы добавляете 1d4 к проверкам Ухода за животными на срок до 1 минуты. +Condition/&ConditionGuidanceAnimalHandlingTitle=Указание на уход за животными +Condition/&ConditionGuidanceArcanaDescription=Вы добавляете 1d4 к проверкам Магии на срок до 1 минуты. +Condition/&ConditionGuidanceArcanaTitle=Указание на магию +Condition/&ConditionGuidanceAthleticsDescription=Вы добавляете 1d4 к проверкам Атлетики на срок до 1 минуты. +Condition/&ConditionGuidanceAthleticsTitle=Указание на атлетику +Condition/&ConditionGuidanceDeceptionDescription=Вы добавляете 1d4 к проверкам Обмана на срок до 1 минуты. +Condition/&ConditionGuidanceDeceptionTitle=Указание на обман +Condition/&ConditionGuidanceHistoryDescription=Вы добавляете 1d4 к проверкам Истории на срок до 1 минуты. +Condition/&ConditionGuidanceHistoryTitle=Указание на историю +Condition/&ConditionGuidanceInsightDescription=Вы добавляете 1d4 к проверкам Проницательности на срок до 1 минуты. +Condition/&ConditionGuidanceInsightTitle=Указание на проницательность +Condition/&ConditionGuidanceIntimidationDescription=Вы добавляете 1d4 к проверкам Запугивания на срок до 1 минуты. +Condition/&ConditionGuidanceIntimidationTitle=Указание на запугивание +Condition/&ConditionGuidanceInvestigationDescription=Вы добавляете 1d4 к проверкам Расследования на срок до 1 минуты. +Condition/&ConditionGuidanceInvestigationTitle=Указание на расследование +Condition/&ConditionGuidanceMedecineDescription=Вы добавляете 1d4 к проверкам Медицины на срок до 1 минуты. +Condition/&ConditionGuidanceMedecineTitle=Указание на медицину +Condition/&ConditionGuidanceNatureDescription=Вы добавляете 1d4 к проверкам Природы на срок до 1 минуты. +Condition/&ConditionGuidanceNatureTitle=Указание на природу +Condition/&ConditionGuidancePerceptionDescription=Вы добавляете 1d4 к проверкам Восприятия на срок до 1 минуты. +Condition/&ConditionGuidancePerceptionTitle=Указание на восприятие +Condition/&ConditionGuidancePerformanceDescription=Вы добавляете 1d4 к проверкам Выступления на срок до 1 минуты. +Condition/&ConditionGuidancePerformanceTitle=Указание на выступление +Condition/&ConditionGuidancePersuasionDescription=Вы добавляете 1d4 к проверкам Убеждения на срок до 1 минуты. +Condition/&ConditionGuidancePersuasionTitle=Указание на убеждение +Condition/&ConditionGuidanceReligionDescription=Вы добавляете 1d4 к проверкам Религии на срок до 1 минуты. +Condition/&ConditionGuidanceReligionTitle=Указание на религию +Condition/&ConditionGuidanceSleightOfHandDescription=Вы добавляете 1d4 к проверкам Ловкости рук на срок до 1 минуты. +Condition/&ConditionGuidanceSleightOfHandTitle=Указание на ловкость рук +Condition/&ConditionGuidanceStealthDescription=Вы добавляете 1d4 к проверкам Скрытности на срок до 1 минуты. +Condition/&ConditionGuidanceStealthTitle=Указание на скрытность +Condition/&ConditionGuidanceSurvivalDescription=Вы добавляете 1d4 к проверкам Выживания на срок до 1 минуты. +Condition/&ConditionGuidanceSurvivalTitle=Указание на выживание Condition/&ConditionMindSpikeDescription=Вычитает 1d4 из следующего спасброска. Condition/&ConditionMindSpikeTitle=Расщепление разума Condition/&ConditionStarryWispDescription=Не получает преимущества от состояния Невидимости @@ -69,42 +69,42 @@ Spell/&CreateBonfireDescription=Вы создаёте огонь на повер Spell/&CreateBonfireTitle=Сотворение костра Spell/&EnduringStingDescription=Вы вытягиваете жизненные силы одного видимого существа в пределах дистанции. Цель должна преуспеть в спасброске Телосложения, иначе получит 1d4 урона некротической энергией и упадёт ничком. Spell/&EnduringStingTitle=Иссушающий укол -Spell/&GuidanceAcrobaticsDescription=Добавьте 1d4 к проверкам Акробатики на срок до 1 минуты. -Spell/&GuidanceAcrobaticsTitle=Управляемая акробатика -Spell/&GuidanceAnimalHandlingDescription=Добавьте 1d4 к проверкам Ухода за животными на срок до 1 минуты. -Spell/&GuidanceAnimalHandlingTitle=Управляемое обращение с животными -Spell/&GuidanceArcanaDescription=Добавьте 1d4 к проверкам Арканы на срок до 1 минуты. -Spell/&GuidanceArcanaTitle=Направляемые Арканы -Spell/&GuidanceAthleticsDescription=Добавьте 1d4 к проверкам Атлетики на срок до 1 минуты. -Spell/&GuidanceAthleticsTitle=Легкая атлетика под руководством инструктора -Spell/&GuidanceDeceptionDescription=Добавьте 1d4 к проверкам Обмана на срок до 1 минуты. -Spell/&GuidanceDeceptionTitle=Управляемый обман -Spell/&GuidanceHistoryDescription=Добавьте 1d4 к проверкам Истории на срок до 1 минуты. -Spell/&GuidanceHistoryTitle=История под руководством -Spell/&GuidanceInsightDescription=Добавьте 1d4 к проверкам Проницательности на срок до 1 минуты. -Spell/&GuidanceInsightTitle=Направляемое понимание -Spell/&GuidanceIntimidationDescription=Добавьте 1d4 к проверкам Запугивания на срок до 1 минуты. -Spell/&GuidanceIntimidationTitle=Направленное запугивание -Spell/&GuidanceInvestigationDescription=Добавьте 1d4 к проверкам Расследования на срок до 1 минуты. -Spell/&GuidanceInvestigationTitle=Направляемое расследование -Spell/&GuidanceMedecineDescription=Добавьте 1d4 к проверкам Медицины на срок до 1 минуты. -Spell/&GuidanceMedecineTitle=Направленная медицина -Spell/&GuidanceNatureDescription=Добавьте 1d4 к проверкам Природы на срок до 1 минуты. -Spell/&GuidanceNatureTitle=Природа под руководством гида -Spell/&GuidancePerceptionDescription=Добавьте 1d4 к проверкам Восприятия на срок до 1 минуты. -Spell/&GuidancePerceptionTitle=Направляемое восприятие -Spell/&GuidancePerformanceDescription=Добавьте 1d4 к проверкам производительности на срок до 1 минуты. -Spell/&GuidancePerformanceTitle=Управляемая производительность -Spell/&GuidancePersuasionDescription=Добавьте 1d4 к проверкам Убеждения на срок до 1 минуты. -Spell/&GuidancePersuasionTitle=Направляемое убеждение -Spell/&GuidanceReligionDescription=Добавьте 1d4 к проверкам религии на срок до 1 минуты. -Spell/&GuidanceReligionTitle=Направляемая религия -Spell/&GuidanceSleightOfHandDescription=Добавьте 1d4 к проверкам SleightOfHand на срок до 1 минуты. -Spell/&GuidanceSleightOfHandTitle=Управляемая ловкость рук -Spell/&GuidanceStealthDescription=Добавьте 1d4 к проверкам Скрытности на срок до 1 минуты. -Spell/&GuidanceStealthTitle=Управляемая скрытность -Spell/&GuidanceSurvivalDescription=Добавьте 1d4 к проверкам Выживания на срок до 1 минуты. -Spell/&GuidanceSurvivalTitle=Управляемое выживание +Spell/&GuidanceAcrobaticsDescription=Вы добавляете 1d4 к проверкам Акробатики на срок до 1 минуты. +Spell/&GuidanceAcrobaticsTitle=Указание на акробатику +Spell/&GuidanceAnimalHandlingDescription=Вы добавляете 1d4 к проверкам Ухода за животными на срок до 1 минуты. +Spell/&GuidanceAnimalHandlingTitle=Указание на уход за животными +Spell/&GuidanceArcanaDescription=Вы добавляете 1d4 к проверкам Магии на срок до 1 минуты. +Spell/&GuidanceArcanaTitle=Указание на магию +Spell/&GuidanceAthleticsDescription=Вы добавляете 1d4 к проверкам Атлетики на срок до 1 минуты. +Spell/&GuidanceAthleticsTitle=Указание на атлетику +Spell/&GuidanceDeceptionDescription=Вы добавляете 1d4 к проверкам Обмана на срок до 1 минуты. +Spell/&GuidanceDeceptionTitle=Указание на обман +Spell/&GuidanceHistoryDescription=Вы добавляете 1d4 к проверкам Истории на срок до 1 минуты. +Spell/&GuidanceHistoryTitle=Указание на историю +Spell/&GuidanceInsightDescription=Вы добавляете 1d4 к проверкам Проницательности на срок до 1 минуты. +Spell/&GuidanceInsightTitle=Указание на проницательность +Spell/&GuidanceIntimidationDescription=Вы добавляете 1d4 к проверкам Запугивания на срок до 1 минуты. +Spell/&GuidanceIntimidationTitle=Указание на запугивание +Spell/&GuidanceInvestigationDescription=Вы добавляете 1d4 к проверкам Расследования на срок до 1 минуты. +Spell/&GuidanceInvestigationTitle=Указание на расследование +Spell/&GuidanceMedecineDescription=Вы добавляете 1d4 к проверкам Медицины на срок до 1 минуты. +Spell/&GuidanceMedecineTitle=Указание на медицину +Spell/&GuidanceNatureDescription=Вы добавляете 1d4 к проверкам Природы на срок до 1 минуты. +Spell/&GuidanceNatureTitle=Указание на природу +Spell/&GuidancePerceptionDescription=Вы добавляете 1d4 к проверкам Восприятия на срок до 1 минуты. +Spell/&GuidancePerceptionTitle=Указание на восприятие +Spell/&GuidancePerformanceDescription=Вы добавляете 1d4 к проверкам Выступления на срок до 1 минуты. +Spell/&GuidancePerformanceTitle=Указание на выступление +Spell/&GuidancePersuasionDescription=Вы добавляете 1d4 к проверкам Убеждения на срок до 1 минуты. +Spell/&GuidancePersuasionTitle=Указание на убеждение +Spell/&GuidanceReligionDescription=Вы добавляете 1d4 к проверкам Религии на срок до 1 минуты. +Spell/&GuidanceReligionTitle=Указание на религию +Spell/&GuidanceSleightOfHandDescription=Вы добавляете 1d4 к проверкам Ловкости рук на срок до 1 минуты. +Spell/&GuidanceSleightOfHandTitle=Указание на ловкость рук +Spell/&GuidanceStealthDescription=Вы добавляете 1d4 к проверкам Скрытности на срок до 1 минуты. +Spell/&GuidanceStealthTitle=Указание на скрытность +Spell/&GuidanceSurvivalDescription=Вы добавляете 1d4 к проверкам Выживания на срок до 1 минуты. +Spell/&GuidanceSurvivalTitle=Указание на выживание Spell/&IlluminatingSphereDescription=Заставляет источники света, такие как факелы и лампы маны, загораться в зоне действия эффекта. Spell/&IlluminatingSphereTitle=Освещающая сфера Spell/&InfestationDescription=Вы вызываете клещей, блох и других паразитов, которые мгновенно обволакивают одно существо, которое вы можете видеть в пределах дистанции. Цель должна преуспеть в спасброске Телосложения, иначе получит 1d6 урона ядом и переместится на 5 футов в случайном направлении. Урон заклинания увеличивается на одну дополнительную кость, когда вы достигаете 5-го, 11-го и 17-го уровня. @@ -117,7 +117,7 @@ Spell/&MindSpikeDescription=Вы отправляете дезориентиру Spell/&MindSpikeTitle=Расщепление разума Spell/&MinorLifestealDescription=Вы вытягиваете жизненную энергию из ближайшего враждебного существа. Совершите рукопашную атаку заклинанием по существу в пределах 5 футов от вас. Цель получает 1d6 некротического урона при попадании, а вы исцеляете количество хитов, равное половине нанесённого урона (с округлением вниз). Это заклинание не оказывает эффекта на нежить и конструкты. Урон заклинания увеличивается на одну дополнительную кость на уровнях 5, 11 и 17. Spell/&MinorLifestealTitle=Малое похищение жизни -Spell/&OneDndGuidanceDescription=Вы касаетесь согласного существа и выбираете навык. Пока заклинание не закончится, существо добавляет ld4 к любой проверке способности, используя выбранный навык. +Spell/&OneDndGuidanceDescription=Вы касаетесь одного согласного существа и выбираете навык. Пока заклинание активно, существо добавляет 1d4 к любой проверке характеристики в выбранном навыке. Spell/&PrimalSavageryDescription=Вы направляете первобытную магию, затачивающую ваши зубы или ногти, и готовитесь к агрессивной атаке. Совершите рукопашную атаку заклинанием против одного существа в пределах 5 футов от вас. При попадании цель получает 1d10 урона кислотой. Урон заклинания увеличивается на одну дополнительную кость, когда вы достигаете 5-го, 11-го и 17-го уровня. Spell/&PrimalSavageryTitle=Первобытная дикость Spell/&ResonatingStrikeDescription=Вы взмахиваете оружием, выбранным в качестве материального компонента, и совершаете рукопашную атаку оружием против одного существа в пределах {0}. При попадании цель подвергается обычному эффекту атаки этим оружием, и вы можете заставить зелёный огонь перекинуться от цели к другому существу по вашему выбору, которое вы можете видеть в пределах 5 футов от цели. Второе существо получает урон огнём, равный вашему модификатору базовой характеристики. На 5-м уровне рукопашная атака наносит дополнительно 1d8 урона огнём, а урон, получаемый вторым существом, увеличивается до 1d8 + ваш модификатор базовой характеристики. Оба этих урона увеличиваются на 1d8 на 11-м уровне (2d8 и 2d8) и 17-м уровне (3d8 и 3d8). diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt index c975c1393f..f9168b29ea 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt @@ -70,7 +70,7 @@ Reaction/&SpendSpellSlotElementalInfusionReactDescription=Поглощает с Reaction/&SpendSpellSlotElementalInfusionReactTitle=Поглотить стихию Reaction/&SpendSpellSlotElementalInfusionTitle=Входящая стихийная атака! Reaction/&SubitemSelectElementalInfusionTitle=Выберите ячейку. -Spell/&BarkskinOneDndDescription=Дает вам или союзнику, к которому вы можете прикоснуться, КБ не менее 17. +Spell/&BarkskinOneDndDescription=Даёт вам или союзнику, которого вы можете коснуться, КБ не меньше 17. Spell/&CausticZapDescription=Вы посылаете в цель разряд зелёной энергии, на мгновение дезориентируя её, пока заклинание сжигает часть её брони. Заклинание поражает одного противника атакой заклинанием, наносит 1d4 урона кислотой и 1d6 урона электричеством, а также накладывает состояние ослепления. Spell/&CausticZapTitle=Едкий заряд Spell/&ChaosBoltDescription=Вы бросаете волнистую, трепещущую массу хаотической энергии в одно существо в радиусе действия. Совершите дальнобойную атаку заклинанием по существу. При попадании цель получает 2d8 + 1d6 урона. Выберите одну из брошенных костей d8. Выпавшее число определяет вид урона атаки:\n{0}\nЕсли вы выбрасываете одинаковое значение на обоих к8, свободным действием вы можете выбрать другое существо по вашему выбору. Совершите новый бросок атаки против новой цели и совершите новый бросок урона, который может привести к тому, что хаотическая энергия снова перескочит. Существо может получить урон от этого заклинания только один раз за каждое его наложение. diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardAbjuration-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardAbjuration-ru.txt index 5cfb57511a..a51475b746 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardAbjuration-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardAbjuration-ru.txt @@ -1,34 +1,34 @@ Condition/&ConditionWizardAbjurationArcaneWardTitle=Магическая защита -Feature/&MagicAffinityWizardAbjurationSavant2024Description=Выберите два заклинания волшебника из школы Отречения и добавьте их в свою книгу заклинаний бесплатно. Кроме того, всякий раз, когда вы получаете доступ к новому уровню слотов заклинаний в этом классе, вы можете добавить одно заклинание волшебника из школы Отречения в свою книгу заклинаний бесплатно. -Feature/&MagicAffinityWizardAbjurationSavant2024Title=Эвокация Савант +Feature/&MagicAffinityWizardAbjurationSavant2024Description=Выберите два заклинания Волшебника из школы Ограждения и бесплатно добавьте их в свою книгу заклинаний. Кроме того, каждый раз, когда вы получаете доступ к ячейкам заклинаний более высокого уровня в этом классе, вы можете бесплатно добавить одно заклинание Волшебника из школы Ограждения в свою книгу заклинаний. +Feature/&MagicAffinityWizardAbjurationSavant2024Title=Мастер ограждения Feature/&MagicAffinityWizardAbjurationScriberDescription=Золото и время, которое вы тратите на копирование заклинания школы Ограждения в свою книгу заклинаний, уменьшаются вдвое. Feature/&MagicAffinityWizardAbjurationScriberTitle=Мастер ограждения Feature/&PowerWizardAbjurationArcaneWardBG3Description=Остаточная магия от ваших заклинаний сплетается в оберег, защищающий вас от урона. Каждый раз, когда вы накладываете заклинание школы Ограждения, интенсивность защиты увеличивается на уровень заклинания, вплоть до двукратного значения вашего уровня Волшебника.\nКогда вы получаете урон, защита блокирует количество урона, равное её интенсивности, а сама интенсивность уменьшается на 1.\nПосле продолжительного отдыха интенсивность защиты сбрасывается и становится равной вашему уровню Волшебника. -Feature/&PowerWizardAbjurationArcaneWardDescription=Когда вы произносите заклинание отречения 1-го+ уровня, вы создаете на себе магическую защиту, которая действует до тех пор, пока вы не закончите длительный отдых. У защиты есть очки здоровья, равные удвоенному вашему уровню волшебника + ваш модификатор интеллекта. Всякий раз, когда вы получаете урон, защита получает урон вместо вас. Всякий раз, когда вы произносите заклинание отречения 1-го+ уровня, защита восстанавливает количество очков здоровья, равное 2-кратному уровню израсходованного слота заклинания. +Feature/&PowerWizardAbjurationArcaneWardDescription=Когда вы накладываете заклинание школы Ограждения 1-го уровня или выше, вы можете одновременно с этим использовать прядь магии для создания магической защиты, существующей до окончания продолжительного отдыха. Защита имеет максимальные хиты, равные вашему удвоенному уровню волшебника + модификатор Интеллекта. Когда вы получаете урон, его вместо вас получает защита. Если вы накладываете заклинание школы Ограждения 1-го уровня или выше, защита восстанавливает количество хитов, равное удвоенному уровню потраченной ячейки заклинания. Feature/&PowerWizardAbjurationArcaneWardReduceDamageTitle=Магическая защита Feature/&PowerWizardAbjurationArcaneWardTitle=Магическая защита Feature/&PowerWizardAbjurationImprovedAbjurationDescription=Когда вы накладываете заклинание школы Ограждения, которое требует совершить проверку характеристики частью накладываемого заклинания (как в случае заклинаний Контрзаклинание и Рассеивание магии), вы добавляете к этой проверке ваш бонус мастерства. Feature/&PowerWizardAbjurationImprovedAbjurationTitle=Улучшенное ограждение Feature/&PowerWizardAbjurationProjectedWardDescription=Когда видимое вами существо, находящееся в пределах 30 футов от вас, получает урон, вы можете реакцией поглотить этот урон вашей «Магической защитой». Если урон опускает хиты защиты до 0, то защищаемое существо получает весь оставшийся урон. Feature/&PowerWizardAbjurationProjectedWardTitle=Проекция защиты -Feature/&PowerWizardAbjurationRechargeArcaneWardDescription=В качестве бонусного действия потратьте ячейку заклинания, чтобы ваш Arcane Ward восстановил очки здоровья, равные удвоенному уровню потраченной ячейки заклинания. -Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=Перезарядка Arcane Ward +Feature/&PowerWizardAbjurationRechargeArcaneWardDescription=Бонусным действием вы тратите ячейку заклинания, чтобы ваша Магическая защита восстановила количество хитов, равное удвоенному уровню потраченной ячейки заклинания. +Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=Перезарядка магической защиты Feature/&PowerWizardAbjurationSpellResistanceDescription=Вы совершаете спасброски от заклинаний с преимуществом. Кроме того, вы получаете сопротивление урону от заклинаний. Feature/&PowerWizardAbjurationSpellResistanceTitle=Сопротивление заклинаниям Feedback/&ArcaneWard={0} использует {1} и уменьшает урон на {2} -Feedback/&ArcaneWardRecharge={1} {0} восстанавливает {2} очков здоровья. +Feedback/&ArcaneWardRecharge={1} {0} восстанавливает {2} хитов. Feedback/&ProjectedWard={0} использует {1} для уменьшения урона по {2} Reaction/&SpendPowerProjectedWardDescription={0} вот-вот получит урон. {1} может реакцией спроецировать свою Магическую защиту, чтобы уменьшить урон. Reaction/&SpendPowerProjectedWardReactDescription=Поглотить урон Магической защитой. Reaction/&SpendPowerProjectedWardReactTitle=Проекция защиты Reaction/&SpendPowerProjectedWardTitle=Проекция защиты -Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardDescription=Потратьте ячейку заклинания, чтобы ваш Arcane Ward восстановил очки здоровья, равные удвоенному уровню потраченной ячейки заклинания. -Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactDescription=Расходовать слот заклинания -Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactTitle=Перезарядка палаты -Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardTitle=Перезарядка Arcane Ward -Reaction/&SubitemSelectPowerWizardAbjurationRechargeArcaneWardTitle=Выберите слот +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardDescription=Вы тратите ячейку заклинания, чтобы ваша Магическая защита восстановила количество хитов, равное удвоенному уровню потраченной ячейки заклинания. +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactDescription=Потратить ячейку заклинания +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactTitle=Перезарядка Магической защиты +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardTitle=Перезарядка Магической защиты +Reaction/&SubitemSelectPowerWizardAbjurationRechargeArcaneWardTitle=Выбрать ячейку Subclass/&WizardAbjurationDescription=Школа Ограждения делает упор на магию блокировки, изгнания и защиты. Это гордое и уважаемое призвание. Называемые оградителями, члены этой школы становятся востребованными, когда злобные духи нуждаются в экзорцизме, когда важные места должны быть защищены от магического шпионажа, и когда порталы на другие планы бытия должны быть закрыты. Subclass/&WizardAbjurationTitle=Ограждение -Tag/&AbjurerSpellSpecialTagTitle=Заклинания подкласса +Tag/&AbjurerSpellSpecialTagTitle=Заклинания архетипа Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=У вас есть {0} из {1} Магической защиты.\nКогда вы получаете урон, защита блокирует количество урона, равное её интенсивности, а сама интенсивность уменьшается на 1. Каждый раз, когда вы накладываете заклинание школы Ограждения, интенсивность защиты увеличивается на уровень заклинания, вплоть до двукратного значения вашего уровня Волшебника. -Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=У вас есть {0} из {1} Arcane Ward.\nВсякий раз, когда вы получаете урон, вард уменьшает урон на его значение и уменьшается на количество предотвращенного урона. Всякий раз, когда вы произносите заклинание отречения 1-го+ уровня, вард восстанавливает количество очков здоровья, равное 2-кратному уровню израсходованного слота заклинания. +Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat=У вас есть {0} из {1} Магической защиты.\nКогда вы получаете урон, его вместо вас получает защита. Если вы накладываете заклинание школы Ограждения 1-го уровня или выше, защита восстанавливает количество хитов, равное удвоенному уровню потраченной ячейки заклинания. diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardEvocation-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardEvocation-ru.txt index 3a0042e569..48b33071f5 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardEvocation-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardEvocation-ru.txt @@ -8,10 +8,10 @@ Feature/&FeatureWizardEvocationSculptSpellsDescription=Когда вы накл Feature/&FeatureWizardEvocationSculptSpellsTitle=Построение заклинаний Feature/&MagicAffinityWizardEvocationPotentCantripDescription=Ваши наносящие урон заговоры воздействуют даже на тех существ, которые избегают основного эффекта. Если существо преуспевает в спасброске от вашего заговора, оно получает половину урона от него (если есть), но не получает дополнительных эффектов от него. Если вы поражаете существо заговором, требующим броска атаки, вы добавляете свой бонус мастерства к одному броску урона этого заговора. Feature/&MagicAffinityWizardEvocationPotentCantripTitle=Мощный заговор -Feature/&MagicAffinityWizardEvocationSavant2024Description=Выберите два заклинания Волшебника из школы Вызова и добавьте их в свою книгу заклинаний бесплатно. Кроме того, всякий раз, когда вы получаете доступ к новому уровню слотов заклинаний в этом классе, вы можете добавить одно заклинание Волшебника из школы Вызова в свою книгу заклинаний бесплатно. -Feature/&MagicAffinityWizardEvocationSavant2024Title=Эвокация Савант +Feature/&MagicAffinityWizardEvocationSavant2024Description=Выберите два заклинания Волшебника из школы Воплощения и бесплатно добавьте их в свою книгу заклинаний. Кроме того, каждый раз, когда вы получаете доступ к ячейкам заклинаний более высокого уровня в этом классе, вы можете бесплатно добавить одно заклинание Волшебника из школы Воплощения в свою книгу заклинаний. +Feature/&MagicAffinityWizardEvocationSavant2024Title=Мастер воплощения Feature/&MagicAffinityWizardEvocationSavantDescription=Золото и время, которое вы тратите на копирование заклинания школы Воплощения в свою книгу заклинаний, уменьшаются вдвое. Feature/&MagicAffinityWizardEvocationSavantTitle=Мастер воплощения Subclass/&WizardEvocationDescription=Вы сосредоточили свои исследования на магии, которая создаёт могущественные стихийные эффекты, такие как ледяной холод, жгучее пламя, раскатистый гром, трещащие молнии и едкая кислота. Некоторые боевые маги находят своё призвание в армии, идя на службу в артиллерию и уничтожая вражеские армии издалека. Другие используют свои впечатляющие возможности, чтобы защитить слабых. Остальные же ищут свою собственную выгоду на поприще бандита, искателя приключений или начинающего тирана. Subclass/&WizardEvocationTitle=Воплощение -Tag/&EvokerSpellSpecialTagTitle=Заклинания подкласса +Tag/&EvokerSpellSpecialTagTitle=Заклинания архетипа diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardGraviturgist-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardGraviturgist-ru.txt index e0fd6d9dfa..41220cc444 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardGraviturgist-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardGraviturgist-ru.txt @@ -1,24 +1,24 @@ -Action/&GravityWellToggleDescription=Активировать/Деактивировать Gravity Well +Action/&GravityWellToggleDescription=Активировать/деактивировать Гравитационный колодец Action/&GravityWellToggleTitle=Гравитационный колодец -Condition/&ConditionWizardGraviturgistDensityDecreaseDescription=Скорость увеличена на 2. Помеха на проверки и спасброски Силы. -Condition/&ConditionWizardGraviturgistDensityDecreaseTitle=Уменьшенная плотность -Condition/&ConditionWizardGraviturgistDensityIncreaseDescription=Скорость уменьшена на 2. Преимущество на проверки и спасброски Силы. -Condition/&ConditionWizardGraviturgistDensityIncreaseTitle=Увеличенная плотность +Condition/&ConditionWizardGraviturgistDensityDecreaseDescription=Скорость увеличена на 10 футов. Помеха на проверки и спасброски Силы. +Condition/&ConditionWizardGraviturgistDensityDecreaseTitle=Уменьшенный вес +Condition/&ConditionWizardGraviturgistDensityIncreaseDescription=Скорость уменьшена на 10 футов. Преимущество на проверки и спасброски Силы. +Condition/&ConditionWizardGraviturgistDensityIncreaseTitle=Увеличенный вес Condition/&ConditionWizardGraviturgistEventHorizonDescription=Скорость уменьшена до нуля Condition/&ConditionWizardGraviturgistEventHorizonSelfDescription=Наносит 2d10 урона силовым полем каждый ход и уменьшает скорость врагов до нуля при провале спасброска Силы. Condition/&ConditionWizardGraviturgistEventHorizonSelfTitle=Горизонт событий Condition/&ConditionWizardGraviturgistEventHorizonTitle=Горизонт событий -Condition/&ConditionWizardGraviturgistViolentAttractionDescription=Существо наносит дополнительный урон 1d10 оружием или безоружной атакой один раз за свой ход. +Condition/&ConditionWizardGraviturgistViolentAttractionDescription=Один раз в свой ход существо наносит дополнительно 1d10 урона атакой оружием или безоружным ударом. Condition/&ConditionWizardGraviturgistViolentAttractionTitle=Агрессивное притяжение -Feature/&PowerWizardGraviturgistDensityDecreaseDescription=Вы можете использовать свое действие, чтобы уменьшить плотность существа, которое вы можете видеть в пределах 30 футов от вас, увеличивая его скорость ходьбы и дальность прыжка на 10 футов и позволяя ему совершать прыжки на максимальное расстояние без риска, ценой недостатка в проверках Силы и спасбросках. Вы можете использовать эту способность количество раз за короткий отдых, равное вашему модификатору Интеллекта, и она делит количество использований с Увеличенной плотностью. -Feature/&PowerWizardGraviturgistDensityDecreaseTitle=Уменьшить плотность -Feature/&PowerWizardGraviturgistDensityIncreaseDescription=Вы можете использовать свое действие, чтобы увеличить плотность существа, которое вы можете видеть в пределах 30 футов от вас, уменьшив его скорость на 10 футов с преимуществом при проверках Силы и спасбросках. Вы можете использовать эту способность количество раз за короткий отдых, равное вашему модификатору Интеллекта, и она делит количество использований с Уменьшением плотности. -Feature/&PowerWizardGraviturgistDensityIncreaseTitle=Увеличить плотность -Feature/&PowerWizardGraviturgistEventHorizonDescription=Вы можете использовать свое действие, чтобы магически испустить мощное поле гравитационной энергии, которое тянет других существ на срок до 1 минуты. В течение этого времени, когда существо, враждебное вам, начинает свой ход в пределах 30 футов от вас, оно должно сделать спасбросок Силы против вашего DC спасброска заклинания. При провале спасброска оно получает 2d10 урона силой, а его скорость снижается до 0 до начала следующего хода. При успешном спасброске оно получает вдвое меньше урона, а его скорость уменьшается вдвое. Вы можете использовать эту способность один раз за длительный отдых. +Feature/&PowerWizardGraviturgistDensityDecreaseDescription=Вы можете действием волшебным образом уменьшить вес одного существа, которое вы можете видеть в пределах 30 футов от вас, увеличивая его скорость ходьбы и расстояние прыжка на 10 футов и позволяя ему совершать прыжки на максимальную дистанцию без риска, однако оно совершает с помехой проверки и спасброски Силы. Вы можете использовать эту способность количество раз, равное вашему модификатору Интеллекта, до короткого отдыха. Количество её использований является общим с умением Увеличить вес. +Feature/&PowerWizardGraviturgistDensityDecreaseTitle=Уменьшить вес +Feature/&PowerWizardGraviturgistDensityIncreaseDescription=Вы можете действием волшебным образом увеличить вес одного существа, которое вы можете видеть в пределах 30 футов от вас, уменьшив его скорость на 10 футов, однако оно совершает с преимуществом проверки и спасброски Силы. Вы можете использовать эту способность количество раз, равное вашему модификатору Интеллекта, до короткого отдыха. Количество её использований является общим с умением Уменьшить вес. +Feature/&PowerWizardGraviturgistDensityIncreaseTitle=Увеличить вес +Feature/&PowerWizardGraviturgistEventHorizonDescription=Вы можете действием волшебным образом начать излучать мощное поле гравитационной энергии, которое воздействует на других существ в течение 1 минуты. В течение этого времени, когда существо, враждебное вам, начинает свой ход в пределах 30 футов от вас, оно должно совершить спасбросок Силы против Сл спасброска ваших заклинаний. При провале оно получает 2к10 урона силовым полем, а его скорость уменьшается до 0 до начала его следующего хода. При успехе оно получает вдвое меньше урона, и его скорость уменьшается вдвое. Вы можете использовать эту способность один раз до продолжительного отдыха. Feature/&PowerWizardGraviturgistEventHorizonTitle=Горизонт событий Feature/&PowerWizardGraviturgistGravityWellDescription=Начиная с 6-го уровня, существа, поражённые вашими атаками заклинанаями, отталкиваются на 1 клетку от вас. Feature/&PowerWizardGraviturgistGravityWellTitle=Гравитационный колодец -Feature/&PowerWizardGraviturgistViolentAttractionDescription=Вы можете использовать бонусное действие, чтобы увеличить ударную силу одного союзника, которого вы видите в пределах 60 футов от вас, на 1 минуту. Существо наносит дополнительный урон 1d10 оружием или безоружной атакой один раз за свой ход. Вы можете использовать эту способность количество раз за длительный отдых, равное вашему модификатору Интеллекта. +Feature/&PowerWizardGraviturgistViolentAttractionDescription=Вы можете бонусным действием на 1 минуту увеличить силу удара одного союзника, которого можете видеть в пределах 60 футов. Один раз в свой ход существо наносит дополнительно 1d10 урона атакой оружием или безоружным ударом. Вы можете использовать эту способность количество раз, равное вашему модификатору Интеллекта, до продолжительного отдыха. Feature/&PowerWizardGraviturgistViolentAttractionTitle=Агрессивное притяжение Feedback/&AdditionalDamageViolentAttractionFormat=Агрессивное притяжение! Feedback/&AdditionalDamageViolentAttractionLine={0} совершает атаку с агрессивным притяжением по {1} (+{2}) From 38d83611b268717ef3d33b271e6e868d558aa2cd Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 4 Nov 2024 15:14:54 -0800 Subject: [PATCH 63/85] fix abjurer / evoker learning sub spells on higher levels --- .../Api/GameExtensions/RulesetCharacterHeroExtensions.cs | 5 ++--- SolastaUnfinishedBusiness/ChangelogHistory.txt | 2 +- .../Patches/CharacterBuildingManagerPatcher.cs | 9 +++++++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterHeroExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterHeroExtensions.cs index 19f0155c7c..8a0dbd71b1 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterHeroExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterHeroExtensions.cs @@ -94,14 +94,13 @@ internal static bool IsWieldingTwoHandedWeapon([NotNull] this RulesetCharacterHe } #endif - internal static void GrantAcquiredSpellWithTagFromSubclassPool( - this RulesetCharacterHero hero, string subClassName, string tag) + internal static void GrantAcquiredSpellWithTagFromSubclassPool(this RulesetCharacterHero hero, string tag) { var heroBuildingData = hero.GetHeroBuildingData(); var selectedClass = LevelUpHelper.GetSelectedClass(hero); var classLevel = LevelUpHelper.GetSelectedClassLevel(hero); // it's indeed TagClass as this is how spell pools are offered in vanilla when from subclass - var poolName = $"{AttributeDefinitions.TagClass}{selectedClass!.Name}{classLevel}{subClassName}{tag}"; + var poolName = $"{AttributeDefinitions.TagClass}{selectedClass!.Name}{classLevel}{tag}"; if (!heroBuildingData.AcquiredSpells.TryGetValue(poolName, out var spells)) { diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index e1eaa04dac..96f049980f 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -7,7 +7,7 @@ - fixed campaigns translator to avoid location titles and break campaigns - fixed Charmed by Hypnotic Pattern not getting considered on incapacitated checks [VANILLA] - fixed Circle of Wildfire spirit allowed actions when summoner is incapacitated -- fixed Dispel Magic and similar not considering proxies +- fixed Dispel Magic and similar not considering proxy effects - fixed recurrent effects interaction with immunity from proxies [VANILLA] - fixed Wizard Abjuration projected ward crash on gadgets - fixed Wizard Graviturgist descriptions, SFX, and behaviors diff --git a/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs index 31e75b538c..e6fdbb1cbd 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs @@ -182,8 +182,13 @@ public static void Postfix(CharacterBuildingManager __instance, [NotNull] Rulese DomainNature.GrantCantripFromSubclassPool(hero); //PATCH: grant spells for these 2 subs as pools with tags aren't granted from subs if not at sub 1st level - hero.GrantAcquiredSpellWithTagFromSubclassPool(WizardAbjuration.Name, WizardAbjuration.SpellTag); - hero.GrantAcquiredSpellWithTagFromSubclassPool(WizardEvocation.Name, WizardEvocation.SpellTag); + var selectedClass = LevelUpHelper.GetSelectedClass(hero); + + if (selectedClass == DatabaseHelper.CharacterClassDefinitions.Wizard) + { + hero.GrantAcquiredSpellWithTagFromSubclassPool(WizardAbjuration.SpellTag); + hero.GrantAcquiredSpellWithTagFromSubclassPool(WizardEvocation.SpellTag); + } //PATCH: grants spell repertoires and respective selected spells from feats LevelUpHelper.GrantSpellsOrCantripsFromFeatCastSpell(__instance, hero); From 671f78be4f6bb32d0a427bbe1de69a03b8030205 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 4 Nov 2024 22:22:52 -0800 Subject: [PATCH 64/85] fix Bard, Fighter, Warlock tabletop 2024 settings --- .../UnfinishedBusinessBlueprints/Assets.txt | 7 +- .../ConditionSorcererInnateSorcery.json | 4 +- .../AbilityCheckDruidPrimalOrderMagician.json | 58 ------- .../CastSpellDomainNature.json | 2 +- .../FeatureSetDruidPrimalOrderMagician.json | 1 - .../PointPoolDruidPrimalOrderMagician.json | 2 +- .../InvocationPactBlade.json | 38 +++++ .../InvocationPactChain.json | 38 +++++ .../InvocationPactTome.json | 38 +++++ .../SpellListDomainNature.json | 95 ----------- Documentation/Feats.md | 2 +- Documentation/Spells.md | 2 +- .../Api/DatabaseHelper-RELEASE.cs | 12 ++ .../Displays/ClassesDisplay.cs | 3 +- .../Displays/GeneralDisplay.cs | 3 +- .../Models/InvocationsContext.cs | 2 +- .../Models/Level20Context.cs | 17 +- .../Models/Tabletop2024Context.cs | 147 +++++++++++++++--- .../CharacterBuildingManagerPatcher.cs | 136 +++++++++++++++- .../Patches/GuiInvocationDefinitionPatcher.cs | 130 ++++++++++------ .../Patches/RulesetCharacterPatcher.cs | 33 +++- .../Spells/SpellBuildersLevel09.cs | 21 +++ .../Builders/InvocationsBuilders.cs | 30 ++-- .../Subclasses/DomainNature.cs | 46 +----- .../Subclasses/WizardAbjuration.cs | 2 +- .../Subclasses/WizardEvocation.cs | 4 +- .../Translations/de/Others-de.txt | 3 +- .../Translations/en/Others-en.txt | 3 +- .../Translations/es/Others-es.txt | 3 +- .../Translations/fr/Others-fr.txt | 3 +- .../Translations/it/Others-it.txt | 3 +- .../Translations/ja/Others-ja.txt | 3 +- .../Translations/ko/Others-ko.txt | 3 +- .../Translations/pt-BR/Others-pt-BR.txt | 3 +- .../Translations/ru/Others-ru.txt | 3 +- .../Translations/zh-CN/Others-zh-CN.txt | 3 +- 36 files changed, 577 insertions(+), 326 deletions(-) delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckDruidPrimalOrderMagician.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/InvocationDefinition/InvocationPactBlade.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/InvocationDefinition/InvocationPactChain.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/InvocationDefinition/InvocationPactTome.json delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellListDefinition/SpellListDomainNature.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 034bff9ffe..223de7631b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -1674,7 +1674,6 @@ AbilityCheckAffinityStaggeringSmite FeatureDefinitionAbilityCheckAffinity Featur AbilityCheckAffinitySynapticStatic FeatureDefinitionAbilityCheckAffinity FeatureDefinition 999b7c02-c882-58c6-a529-7e9011466ef4 AbilityCheckAffinityWizardGraviturgistDensityDecrease FeatureDefinitionAbilityCheckAffinity FeatureDefinition b0521612-ec96-5c7a-ba8a-6155864d9e8e AbilityCheckAffinityWizardGraviturgistDensityIncrease FeatureDefinitionAbilityCheckAffinity FeatureDefinition 64b503f6-282e-58c8-a372-26b0da078f3b -AbilityCheckDruidPrimalOrderMagician FeatureDefinitionAbilityCheckAffinity FeatureDefinition 17719c44-7926-5cef-893f-8ab66f8fc85b AbilityCheckRangerSurvivalistAnalyticalMind FeatureDefinitionAbilityCheckAffinity FeatureDefinition bb200e27-5cfe-5e79-a96e-7187cbb59644 ActionAffinityAmazingDisplayToggle FeatureDefinitionActionAffinity FeatureDefinition 783907ba-e039-59be-a628-8c934d32ac60 ActionAffinityArcaneArcherToggle FeatureDefinitionActionAffinity FeatureDefinition be08f921-ba8c-5368-948c-f9a7ae0eef85 @@ -4379,7 +4378,6 @@ AbilityCheckAffinityStaggeringSmite FeatureDefinitionAbilityCheckAffinity Featur AbilityCheckAffinitySynapticStatic FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 999b7c02-c882-58c6-a529-7e9011466ef4 AbilityCheckAffinityWizardGraviturgistDensityDecrease FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity b0521612-ec96-5c7a-ba8a-6155864d9e8e AbilityCheckAffinityWizardGraviturgistDensityIncrease FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 64b503f6-282e-58c8-a372-26b0da078f3b -AbilityCheckDruidPrimalOrderMagician FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity 17719c44-7926-5cef-893f-8ab66f8fc85b AbilityCheckRangerSurvivalistAnalyticalMind FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAbilityCheckAffinity bb200e27-5cfe-5e79-a96e-7187cbb59644 ActionAffinityAmazingDisplayToggle FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 783907ba-e039-59be-a628-8c934d32ac60 ActionAffinityArcaneArcherToggle FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity be08f921-ba8c-5368-948c-f9a7ae0eef85 @@ -4657,7 +4655,6 @@ AbilityCheckAffinityStaggeringSmite FeatureDefinitionAbilityCheckAffinity Featur AbilityCheckAffinitySynapticStatic FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 999b7c02-c882-58c6-a529-7e9011466ef4 AbilityCheckAffinityWizardGraviturgistDensityDecrease FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity b0521612-ec96-5c7a-ba8a-6155864d9e8e AbilityCheckAffinityWizardGraviturgistDensityIncrease FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 64b503f6-282e-58c8-a372-26b0da078f3b -AbilityCheckDruidPrimalOrderMagician FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity 17719c44-7926-5cef-893f-8ab66f8fc85b AbilityCheckRangerSurvivalistAnalyticalMind FeatureDefinitionAbilityCheckAffinity FeatureDefinitionAffinity bb200e27-5cfe-5e79-a96e-7187cbb59644 AncestryPathOfTheElementsBlizzard FeatureDefinitionAncestry FeatureDefinitionAffinity 641734eb-6b25-5f30-a4b6-e1305d8abb54 AncestryPathOfTheElementsStorm FeatureDefinitionAncestry FeatureDefinitionAffinity 18135f9f-fb3f-59e4-a259-e73936605af6 @@ -7769,6 +7766,9 @@ InvocationImprovedPactWeapon InvocationDefinition InvocationDefinition 29559951- InvocationInexorableHex InvocationDefinitionWithPrerequisites InvocationDefinition 15b275f3-08cd-5a6e-ba08-163467332c6f InvocationKinesis InvocationDefinition InvocationDefinition d45460d1-dd03-5bfa-8dc8-c69f135119da InvocationNecroticBlast InvocationDefinition InvocationDefinition e9bf3e2e-f721-56bd-9877-fb082152ab1d +InvocationPactBlade InvocationDefinition InvocationDefinition 1e6ab0eb-40bb-5132-9a6e-da4e541bcec1 +InvocationPactChain InvocationDefinition InvocationDefinition c298dfee-53b9-5c04-b5df-3228b9dfc29b +InvocationPactTome InvocationDefinition InvocationDefinition f4d2a81e-3612-5281-aec9-8bef63895c58 InvocationPerniciousCloak InvocationDefinition InvocationDefinition e920de0a-fee1-503a-bfac-fe9e88c9f685 InvocationPoisonousBlast InvocationDefinition InvocationDefinition ca106510-82f8-5c01-b8e5-cc5e0fb15c30 InvocationPsychicBlast InvocationDefinition InvocationDefinition 70ab493e-a835-5d92-a37c-8b983d0d8e6b @@ -12857,7 +12857,6 @@ SpellListBackgroundDevoted SpellListDefinition SpellListDefinition 7d820750-3307 SpellListBolgrif SpellListDefinition SpellListDefinition 3fc52c3c-e2e2-516e-8c9c-06ef13b2ffd9 SpellListCelestial SpellListDefinition SpellListDefinition e36b57f2-ed56-57b1-9525-de4da5517180 SpellListDarkelf SpellListDefinition SpellListDefinition 8145b021-dc93-598a-be91-978e71d0732f -SpellListDomainNature SpellListDefinition SpellListDefinition 7f7e1d16-393f-547d-af30-33ae65d39912 SpellListDraconicKobold SpellListDefinition SpellListDefinition 6d6fbcad-5330-5bb5-958e-a2b75ad198e1 SpellListElementalist SpellListDefinition SpellListDefinition 355a3a12-a0de-5347-9f15-7a0142365b14 SpellListEmpty SpellListDefinition SpellListDefinition 1c3a87f5-1edb-52ec-b63f-4fa05467a586 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererInnateSorcery.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererInnateSorcery.json index 1429734d91..bebb313aa8 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererInnateSorcery.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererInnateSorcery.json @@ -134,8 +134,8 @@ "description": "Condition/&ConditionSorcererInnateSorceryDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "6999cc364fd0b374a8acf35bac34d694", - "m_SubObjectName": "ConditionFrightened", + "m_AssetGUID": "6de0173309bec82429f3ed8af187b216", + "m_SubObjectName": "ConditionProtectedBySpiritGuardians", "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckDruidPrimalOrderMagician.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckDruidPrimalOrderMagician.json deleted file mode 100644 index bb85c0912e..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAbilityCheckAffinity/AbilityCheckDruidPrimalOrderMagician.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "$type": "FeatureDefinitionAbilityCheckAffinity, Assembly-CSharp", - "useControllerAbilityChecks": false, - "affinityGroups": [ - { - "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Intelligence", - "proficiencyName": "Arcana", - "affinity": "None", - "abilityCheckGroupOperation": "AddDie", - "abilityCheckModifierDiceNumber": 1, - "abilityCheckModifierDieType": "D6", - "abilityCheckContext": "None", - "lightingContext": "Irrelevant" - }, - { - "$type": "FeatureDefinitionAbilityCheckAffinity+AbilityCheckAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Intelligence", - "proficiencyName": "Nature", - "affinity": "None", - "abilityCheckGroupOperation": "AddDie", - "abilityCheckModifierDiceNumber": 1, - "abilityCheckModifierDieType": "D6", - "abilityCheckContext": "None", - "lightingContext": "Irrelevant" - } - ], - "substractBardicDieRoll": false, - "myselfFamilyRestrictions": [], - "otherCharacterFamilyRestrictions": [], - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": false, - "title": "Feature/&FeatureSetDruidPrimalOrderMagicianTitle", - "description": "Feature/&FeatureSetDruidPrimalOrderMagicianDescription", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "17719c44-7926-5cef-893f-8ab66f8fc85b", - "contentPack": 9999, - "name": "AbilityCheckDruidPrimalOrderMagician" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionCastSpell/CastSpellDomainNature.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionCastSpell/CastSpellDomainNature.json index a1b2c5fde6..90f381ceec 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionCastSpell/CastSpellDomainNature.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionCastSpell/CastSpellDomainNature.json @@ -5,7 +5,7 @@ "spellcastingParametersComputation": "Dynamic", "staticDCValue": 10, "staticToHitValue": 4, - "spellListDefinition": "Definition:SpellListDomainNature:7f7e1d16-393f-547d-af30-33ae65d39912", + "spellListDefinition": "Definition:SpellListDruid:f192117ea9cbe334cba0849993779ae8", "restrictedSchools": [], "spellKnowledge": "Selection", "fixedSpellTag": "", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionFeatureSet/FeatureSetDruidPrimalOrderMagician.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionFeatureSet/FeatureSetDruidPrimalOrderMagician.json index aa194406b8..a9887b83dd 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionFeatureSet/FeatureSetDruidPrimalOrderMagician.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionFeatureSet/FeatureSetDruidPrimalOrderMagician.json @@ -1,7 +1,6 @@ { "$type": "FeatureDefinitionFeatureSet, Assembly-CSharp", "featureSet": [ - "Definition:AbilityCheckDruidPrimalOrderMagician:17719c44-7926-5cef-893f-8ab66f8fc85b", "Definition:PointPoolDruidPrimalOrderMagician:2ceebfa6-8df1-54bc-845b-dc9160b99df6" ], "mode": "Union", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolDruidPrimalOrderMagician.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolDruidPrimalOrderMagician.json index 9fac1184ac..53e70b5f8b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolDruidPrimalOrderMagician.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPointPool/PointPoolDruidPrimalOrderMagician.json @@ -8,7 +8,7 @@ "ritualOnly": false, "minSpellLevel": 0, "maxSpellLevel": 0, - "extraSpellsTag": "", + "extraSpellsTag": "PrimalOrder", "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", "hidden": true, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/InvocationDefinition/InvocationPactBlade.json b/Diagnostics/UnfinishedBusinessBlueprints/InvocationDefinition/InvocationPactBlade.json new file mode 100644 index 0000000000..846616e501 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/InvocationDefinition/InvocationPactBlade.json @@ -0,0 +1,38 @@ +{ + "$type": "InvocationDefinition, Assembly-CSharp", + "requiredKnownSpell": null, + "requiredLevel": 1, + "requiredPact": null, + "grantedFeature": "Definition:FeatureSetPactBlade:a29909bbaef089a4392c12fdee2db8fc", + "grantedSpell": null, + "consumesSpellSlot": false, + "longRestRecharge": false, + "overrideMaterialComponent": true, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&FeatureSetPactBladeTitle", + "description": "Feature/&FeatureSetPactBladeDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "1e6ab0eb-40bb-5132-9a6e-da4e541bcec1", + "contentPack": 9999, + "name": "InvocationPactBlade" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/InvocationDefinition/InvocationPactChain.json b/Diagnostics/UnfinishedBusinessBlueprints/InvocationDefinition/InvocationPactChain.json new file mode 100644 index 0000000000..52708e8864 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/InvocationDefinition/InvocationPactChain.json @@ -0,0 +1,38 @@ +{ + "$type": "InvocationDefinition, Assembly-CSharp", + "requiredKnownSpell": null, + "requiredLevel": 1, + "requiredPact": null, + "grantedFeature": "Definition:FeatureSetPactChain:101749129eb42a74583471b1f8dc44b7", + "grantedSpell": null, + "consumesSpellSlot": false, + "longRestRecharge": false, + "overrideMaterialComponent": true, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&FeatureSetPactChainTitle", + "description": "Feature/&FeatureSetPactChainDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "c298dfee-53b9-5c04-b5df-3228b9dfc29b", + "contentPack": 9999, + "name": "InvocationPactChain" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/InvocationDefinition/InvocationPactTome.json b/Diagnostics/UnfinishedBusinessBlueprints/InvocationDefinition/InvocationPactTome.json new file mode 100644 index 0000000000..84d3e5c348 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/InvocationDefinition/InvocationPactTome.json @@ -0,0 +1,38 @@ +{ + "$type": "InvocationDefinition, Assembly-CSharp", + "requiredKnownSpell": null, + "requiredLevel": 1, + "requiredPact": null, + "grantedFeature": "Definition:PointPoolPactTome:791b6d9070630584794cf4f664ec24f0", + "grantedSpell": null, + "consumesSpellSlot": false, + "longRestRecharge": false, + "overrideMaterialComponent": true, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&FeatureSetPactTomeTitle", + "description": "Feature/&FeatureSetPactTomeDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "f4d2a81e-3612-5281-aec9-8bef63895c58", + "contentPack": 9999, + "name": "InvocationPactTome" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellListDefinition/SpellListDomainNature.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellListDefinition/SpellListDomainNature.json deleted file mode 100644 index f1d0a83157..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellListDefinition/SpellListDomainNature.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "$type": "SpellListDefinition, Assembly-CSharp", - "hasCantrips": true, - "maxSpellLevel": 0, - "spellsByLevel": [ - { - "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", - "level": 0, - "spells": [ - "Definition:AnnoyingBee:d380ed36cd287394d8ddc88115fd8fa1", - "Definition:Guidance:94ed96edd24acbe4f87e72375221868a", - "Definition:PoisonSpray:d3aec91794deb6646b41c246e57a1f1e", - "Definition:ProduceFlame:99a59d41bc8a00a458199a4c2e7d9571", - "Definition:Resistance:384dce9da39ad4e4b82106fa7829c17c", - "Definition:Shillelagh:2143d3cd84db2c540b80fe022d0adf1d", - "Definition:Sparkle:ac43e07871656cd4db792bdbdc77ac44", - "Definition:VenomousSpike:804bffd98d2384c4b9c01ebb30f3cbee" - ] - }, - { - "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", - "level": 1, - "spells": [] - }, - { - "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", - "level": 2, - "spells": [] - }, - { - "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", - "level": 3, - "spells": [] - }, - { - "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", - "level": 4, - "spells": [] - }, - { - "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", - "level": 5, - "spells": [] - }, - { - "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", - "level": 6, - "spells": [] - }, - { - "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", - "level": 7, - "spells": [] - }, - { - "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", - "level": 8, - "spells": [] - }, - { - "$type": "SpellListDefinition+SpellsByLevelDuplet, Assembly-CSharp", - "level": 9, - "spells": [] - } - ], - "compositeSpellList": false, - "sourceSpellLists": [], - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, - "title": "Feature/&NoContentTitle", - "description": "Feature/&NoContentTitle", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "7f7e1d16-393f-547d-af30-33ae65d39912", - "contentPack": 9999, - "name": "SpellListDomainNature" -} \ No newline at end of file diff --git a/Documentation/Feats.md b/Documentation/Feats.md index 1eb1368628..cd0ff6eaf4 100644 --- a/Documentation/Feats.md +++ b/Documentation/Feats.md @@ -353,7 +353,7 @@ You've manifested some of the power of chromatic dragons, granting you the follo • Chromatic Infusion: As a bonus action, you can touch a simple or martial weapon and infuse it with one of the following damage types: acid, cold, fire, lightning, or poison. For the next minute, the weapon deals an extra 1d4 damage of the chosen type when it hits. After you use this bonus action, you can't do so again until you finish a long rest. • Reactive Resistance: When you take acid, cold, fire, lightning, or poison damage, you can use your reaction to give yourself resistance to that instance of damage until the end of its turn. You can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest. -# 71. - Gift of the Gem Dragon [UB] +# 71. - *Gift of the Gem Dragon* © [UB] Increase one of your mental attributes by 1, to a maximum of 20. • When you take damage from a creature that is within 10 feet of you, you can use your reaction to emanate telekinetic energy. The creature that dealt damage to you must make a Strength saving throw (DC equals 8 + your proficiency bonus + the ability modifier of the score increased by this feat). On a failed save, the creature takes 2d8 force damage, is pushed up to 10 feet away from you, and is forced prone. On a successful save, the creature takes half as much damage and isn't pushed nor forced prone. You can use this reaction a number of times equal to your proficiency bonus, and you regain all expended uses when you finish a long rest. diff --git a/Documentation/Spells.md b/Documentation/Spells.md index ae0a829007..eeb0296e59 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -784,7 +784,7 @@ Paralyze a humanoid you can see for a limited time. Make an ally invisible for a limited time. -# 131. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] [UB] +# 131. - *Kinetic Jaunt* © (S) level 2 Transmutation [Concentration] [UB] **[Artificer, Bard, Sorcerer, Wizard]** diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index b638bc05f2..0a8b38b9ac 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -1554,6 +1554,9 @@ internal static class FeatureDefinitionEquipmentAffinitys internal static class FeatureDefinitionFeatureSets { + internal static FeatureDefinitionFeatureSet FeatureSetPactSelection { get; } = + GetDefinition("FeatureSetPactSelection"); + internal static FeatureDefinitionFeatureSet FeatureSetClericRitualCasting { get; } = GetDefinition("FeatureSetClericRitualCasting"); @@ -2640,6 +2643,9 @@ internal static class GadgetDefinitions internal static class InvocationDefinitions { + internal static InvocationDefinition ArmorOfShadows { get; } = + GetDefinition("ArmorOfShadows"); + internal static InvocationDefinition DevilsSight { get; } = GetDefinition("DevilsSight"); @@ -3343,6 +3349,12 @@ internal static class MonsterAttackDefinitions internal static class MonsterDefinitions { + internal static MonsterDefinition ShamblingMound_MonsterDefinition { get; } = + GetDefinition("ShamblingMound_MonsterDefinition"); + + internal static MonsterDefinition ShamblingMound_MonsterDefinition_POI_ONLY { get; } = + GetDefinition("ShamblingMound_MonsterDefinition_POI_ONLY"); + internal static MonsterDefinition Wraith { get; } = GetDefinition("Wraith"); diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index b69c48da1a..d994f9a90f 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -167,6 +167,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableSecondWindToUseOneDndUsagesProgression"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableSecondWindToUseOneDndUsagesProgression = toggle; + Tabletop2024Context.SwitchSecondWindToUseOneDndUsagesProgression(); } UI.Label(); @@ -390,7 +391,7 @@ internal static void DisplayClasses() if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockToLearnPatronAtLevel3"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableWarlockToLearnPatronAtLevel3 = toggle; - Tabletop2024Context.SwitchOneDndWarlockSchoolOfMagicLearningLevel(); + Tabletop2024Context.SwitchOneDndWarlockPatronLearningLevel(); } toggle = Main.Settings.EnableWarlockToUseOneDndInvocationProgression; diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 3b338a3259..ca0f4eb836 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -380,6 +380,7 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableSecondWindToUseOneDndUsagesProgression"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableSecondWindToUseOneDndUsagesProgression = toggle; + Tabletop2024Context.SwitchSecondWindToUseOneDndUsagesProgression(); } UI.Label(); @@ -518,7 +519,7 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockToLearnPatronAtLevel3"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableWarlockToLearnPatronAtLevel3 = toggle; - Tabletop2024Context.SwitchOneDndWarlockSchoolOfMagicLearningLevel(); + Tabletop2024Context.SwitchOneDndWarlockPatronLearningLevel(); } toggle = Main.Settings.EnableWarlockToUseOneDndInvocationProgression; diff --git a/SolastaUnfinishedBusiness/Models/InvocationsContext.cs b/SolastaUnfinishedBusiness/Models/InvocationsContext.cs index a5e7d0c391..895412c5cb 100644 --- a/SolastaUnfinishedBusiness/Models/InvocationsContext.cs +++ b/SolastaUnfinishedBusiness/Models/InvocationsContext.cs @@ -37,7 +37,7 @@ internal static void LateLoad() LoadInvocation(BuildBreakerAndBanisher()); LoadInvocation(BuildCallOfTheBeast()); LoadInvocation(BuildDiscerningGaze()); - LoadInvocation(BuildEldritchMind()); + LoadInvocation(EldritchMind); LoadInvocation(BuildEldritchSmite()); LoadInvocation(BuildGiftOfTheEverLivingOnes()); LoadInvocation(BuildGiftOfTheHunter()); diff --git a/SolastaUnfinishedBusiness/Models/Level20Context.cs b/SolastaUnfinishedBusiness/Models/Level20Context.cs index 301fa2dc70..b22707947c 100644 --- a/SolastaUnfinishedBusiness/Models/Level20Context.cs +++ b/SolastaUnfinishedBusiness/Models/Level20Context.cs @@ -610,23 +610,8 @@ private static void InitExperienceThresholdsTable() ExperienceThresholds = experience; } - private sealed class CustomBehaviorBardWordOfCreation : IModifyEffectDescription, IFilterTargetingCharacter + private sealed class CustomBehaviorBardWordOfCreation : IModifyEffectDescription { - public bool EnforceFullSelection => false; - - public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter target) - { - if (__instance.SelectionService.SelectedTargets.Count == 0 || - __instance.SelectionService.SelectedTargets[0].IsWithinRange(target, 2)) - { - return true; - } - - __instance.actionModifier.FailureFlags.Add("Failure/&SecondTargetNotWithinRange"); - - return false; - } - public bool IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) { return definition == SpellsContext.PowerWordHeal || definition == SpellsContext.PowerWordKill; diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 1a5f273bbf..97158bb500 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -1,4 +1,5 @@ -using System.Collections; +using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; @@ -13,6 +14,7 @@ using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Properties; using SolastaUnfinishedBusiness.Subclasses; +using SolastaUnfinishedBusiness.Subclasses.Builders; using SolastaUnfinishedBusiness.Validators; using TA; using UnityEngine.AddressableAssets; @@ -73,18 +75,11 @@ internal static class Tabletop2024Context .Create("FeatureSetDruidPrimalOrderMagician") .SetGuiPresentation(Category.Feature) .SetFeatureSet( - FeatureDefinitionAbilityCheckAffinityBuilder - .Create("AbilityCheckDruidPrimalOrderMagician") - .SetGuiPresentation("FeatureSetDruidPrimalOrderMagician", Category.Feature) - .BuildAndSetAffinityGroups(CharacterAbilityCheckAffinity.None, DieType.D6, 1, - AbilityCheckGroupOperation.AddDie, - (AttributeDefinitions.Intelligence, SkillDefinitions.Arcana), - (AttributeDefinitions.Intelligence, SkillDefinitions.Nature)) - .AddToDB(), FeatureDefinitionPointPoolBuilder .Create("PointPoolDruidPrimalOrderMagician") .SetGuiPresentationNoContent(true) - .SetSpellOrCantripPool(HeroDefinitions.PointsPoolType.Cantrip, 1) + .SetSpellOrCantripPool(HeroDefinitions.PointsPoolType.Cantrip, 1, extraSpellsTag: "PrimalOrder") + .AddCustomSubFeatures(new ModifyAbilityCheckDruidPrimalOrder()) .AddToDB()) .AddToDB(), FeatureDefinitionFeatureSetBuilder @@ -143,7 +138,7 @@ internal static class Tabletop2024Context .SetEffectForms(EffectFormBuilder.ConditionForm( ConditionDefinitionBuilder .Create("ConditionSorcererInnateSorcery") - .SetGuiPresentation(Category.Condition, ConditionSpiritGuardians) + .SetGuiPresentation(Category.Condition, ConditionAuraOfCourage) .SetFeatures( FeatureDefinitionMagicAffinityBuilder .Create("MagicAffinitySorcererInnateSorcery") @@ -178,6 +173,25 @@ internal static class Tabletop2024Context .SetSpecialInterruptions(ConditionInterruption.SavingThrow) .AddToDB(); + private static readonly InvocationDefinition InvocationPactBlade = InvocationDefinitionBuilder + .Create("InvocationPactBlade") + .SetGuiPresentation(FeatureSetPactBlade.GuiPresentation) + .SetGrantedFeature(FeatureSetPactBlade) + .AddToDB(); + + private static readonly InvocationDefinition InvocationPactChain = InvocationDefinitionBuilder + .Create("InvocationPactChain") + .SetGuiPresentation(FeatureSetPactChain.GuiPresentation) + .SetGrantedFeature(FeatureSetPactChain) + .AddToDB(); + + private static readonly InvocationDefinition InvocationPactTome = InvocationDefinitionBuilder + .Create("InvocationPactTome") + // need to build a new gui presentation to be able to hide this and don't affect the set itself + .SetGuiPresentation(FeatureSetPactTome.GuiPresentation.Title, FeatureSetPactTome.GuiPresentation.Description) + .SetGrantedFeature(FeatureSetPactTome.FeatureSet[0]) // grant pool directly instead of feature set + .AddToDB(); + internal static void LateLoad() { BuildBarbarianBrutalStrike(); @@ -215,7 +229,7 @@ internal static void LateLoad() SwitchOneDndSpellBarkskin(); SwitchOneDndSpellGuidance(); SwitchOneDndSurprisedEnforceDisadvantage(); - SwitchOneDndWarlockSchoolOfMagicLearningLevel(); + SwitchOneDndWarlockPatronLearningLevel(); SwitchOneDndWarlockInvocationsProgression(); SwitchOneDndWizardScholar(); SwitchOneDndWizardSchoolOfMagicLearningLevel(); @@ -224,6 +238,7 @@ internal static void LateLoad() SwitchRogueBlindSense(); SwitchRogueCunningStrike(); SwitchRogueSteadyAim(); + SwitchSecondWindToUseOneDndUsagesProgression(); SwitchSorcererInnateSorcery(); } @@ -248,6 +263,13 @@ internal static void SwitchFighterLevelToIndomitableSavingReroll() : "Feature/&IndomitableResistanceDescription"; } + internal static void SwitchSecondWindToUseOneDndUsagesProgression() + { + PowerFighterSecondWind.rechargeRate = Main.Settings.EnableSecondWindToUseOneDndUsagesProgression + ? RechargeRate.LongRest + : RechargeRate.ShortRest; + } + internal static void SwitchPersuasionToFighterSkillOptions() { if (Main.Settings.AddPersuasionToFighterSkillOptions) @@ -457,10 +479,12 @@ internal static void SwitchOneDndWizardSchoolOfMagicLearningLevel() featureUnlock.level = toLevel; } - foreach (var featureUnlock in Wizard.FeatureUnlocks.Where(featureUnlock => featureUnlock.level == fromLevel)) - { - featureUnlock.level = toLevel; - } + // change spell casting level on Wizard itself + Wizard.FeatureUnlocks + .FirstOrDefault(x => + x.FeatureDefinition == FeatureDefinitionSubclassChoices.SubclassChoiceWizardArcaneTraditions)! + .level = + toLevel; foreach (var school in schools) { @@ -470,7 +494,7 @@ internal static void SwitchOneDndWizardSchoolOfMagicLearningLevel() Wizard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } - internal static void SwitchOneDndWarlockSchoolOfMagicLearningLevel() + internal static void SwitchOneDndWarlockPatronLearningLevel() { var patrons = DatabaseRepository.GetDatabase() .Where(x => x.Name.StartsWith("Patron")) @@ -479,6 +503,12 @@ internal static void SwitchOneDndWarlockSchoolOfMagicLearningLevel() var fromLevel = 3; var toLevel = 1; + // handle this exception that adds features at levels 2 and 3 on sub + var patronEldritchSurge = GetDefinition(PatronEldritchSurge.Name); + + patronEldritchSurge.FeatureUnlocks.RemoveAll(x => + x.Level <= 3 && x.FeatureDefinition == EldritchVersatilityBuilders.UnLearn1Versatility); + if (Main.Settings.EnableWarlockToLearnPatronAtLevel3) { fromLevel = 1; @@ -487,18 +517,25 @@ internal static void SwitchOneDndWarlockSchoolOfMagicLearningLevel() foreach (var featureUnlock in patrons .SelectMany(patron => patron.FeatureUnlocks - .Where(featureUnlock => - featureUnlock.level == fromLevel && - featureUnlock.FeatureDefinition.Name != "FeatureEldritchVersatilityUnLearn1"))) + .Where(featureUnlock => featureUnlock.level == fromLevel))) { featureUnlock.level = toLevel; } - foreach (var featureUnlock in Warlock.FeatureUnlocks.Where(featureUnlock => featureUnlock.level == fromLevel)) + // put things back if it should not be changed + if (!Main.Settings.EnableWarlockToLearnPatronAtLevel3) { - featureUnlock.level = toLevel; + patronEldritchSurge.FeatureUnlocks.AddRange( + new FeatureUnlockByLevel(EldritchVersatilityBuilders.UnLearn1Versatility, 2), + new FeatureUnlockByLevel(EldritchVersatilityBuilders.UnLearn1Versatility, 3)); } + // change spell casting level on Warlock itself + Warlock.FeatureUnlocks + .FirstOrDefault(x => + x.FeatureDefinition == FeatureDefinitionSubclassChoices.SubclassChoiceWarlockOtherworldlyPatrons)! + .level = toLevel; + foreach (var patron in patrons) { patron.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); @@ -804,6 +841,9 @@ internal static void SwitchRangerNatureShroud() internal static void SwitchOneDndWarlockInvocationsProgression() { + Warlock.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == FeatureSetPactSelection); + if (Main.Settings.EnableWarlockToUseOneDndInvocationProgression) { Warlock.FeatureUnlocks.Add(new FeatureUnlockByLevel(PointPoolWarlockInvocation1, 1)); @@ -812,6 +852,21 @@ internal static void SwitchOneDndWarlockInvocationsProgression() PointPoolWarlockInvocation2.GuiPresentation.Description = "Feature/&PointPoolWarlockInvocationAdditionalDescription"; PointPoolWarlockInvocation5.poolAmount = 2; + + foreach (var invocation in DatabaseRepository.GetDatabase() + .Where(x => + x.requiredLevel == 1 && + x != InvocationDefinitions.ArmorOfShadows && + x != InvocationsBuilders.EldritchMind && + (InvocationsContext.Invocations.Contains(x) || + x.ContentPack != CeContentPackContext.CeContentPack))) + { + invocation.requiredLevel = 2; + } + + InvocationPactBlade.GuiPresentation.hidden = false; + InvocationPactChain.GuiPresentation.hidden = false; + InvocationPactTome.GuiPresentation.hidden = false; } else { @@ -821,11 +876,59 @@ internal static void SwitchOneDndWarlockInvocationsProgression() PointPoolWarlockInvocation2.GuiPresentation.Description = "Feature/&PointPoolWarlockInvocationInitialDescription"; PointPoolWarlockInvocation5.poolAmount = 1; + + foreach (var invocation in DatabaseRepository.GetDatabase() + .Where(x => + x.requiredLevel == 2 && + x != InvocationDefinitions.ArmorOfShadows && + x != InvocationsBuilders.EldritchMind && + (InvocationsContext.Invocations.Contains(x) || + x.ContentPack != CeContentPackContext.CeContentPack))) + { + invocation.requiredLevel = 1; + } + + InvocationPactBlade.GuiPresentation.hidden = true; + InvocationPactChain.GuiPresentation.hidden = true; + InvocationPactTome.GuiPresentation.hidden = true; + + Warlock.FeatureUnlocks.Add(new FeatureUnlockByLevel(FeatureSetPactSelection, 3)); } + GuiWrapperContext.RecacheInvocations(); + Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } + private sealed class ModifyAbilityCheckDruidPrimalOrder : IModifyAbilityCheck + { + public void MinRoll( + RulesetCharacter character, + int baseBonus, + string abilityScoreName, + string proficiencyName, + List advantageTrends, + List modifierTrends, + ref int rollModifier, + ref int minRoll) + { + if (abilityScoreName is not AttributeDefinitions.Intelligence || + proficiencyName is not (SkillDefinitions.Arcana or SkillDefinitions.Nature)) + { + return; + } + + var intelligence = character.TryGetAttributeValue(AttributeDefinitions.Intelligence); + var intMod = AttributeDefinitions.ComputeAbilityScoreModifier(intelligence); + var modifier = Math.Max(intMod, 1); + + rollModifier += modifier; + + modifierTrends.Add(new TrendInfo(modifier, FeatureSourceType.CharacterFeature, + "FeatureSetDruidPrimalOrderMagician", null)); + } + } + private sealed class RollSavingThrowInitiatedIndomitableSaving : IRollSavingThrowInitiated { public void OnSavingThrowInitiated( diff --git a/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs index e6fdbb1cbd..843f4ae5cf 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs @@ -41,6 +41,8 @@ public static class TrainInvocation_Patch { [UsedImplicitly] public static void Prefix( + CharacterBuildingManager __instance, + CharacterHeroBuildingData heroBuildingData, InvocationDefinition invocation, ref bool checkPool) { @@ -49,6 +51,34 @@ public static void Prefix( { checkPool = false; } + + if (invocation.GrantedFeature is not FeatureDefinitionPointPool featureDefinitionPointPool) + { + return; + } + + if (!heroBuildingData.PointPoolStacks.TryGetValue( + featureDefinitionPointPool.PoolType, out var pointPoolStack)) + { + return; + } + + var hero = __instance.CurrentLocalHeroCharacter; + + __instance.GetLastAssignedClassAndLevel(hero, out var classDefinition, out var level); + + var finaTag = AttributeDefinitions.GetClassTag(classDefinition, level) + + featureDefinitionPointPool.ExtraSpellsTag; + + if (pointPoolStack.ActivePools + .TryGetValue(finaTag + featureDefinitionPointPool.ExtraSpellsTag, out var pool)) + { + pool.maxPoints += featureDefinitionPointPool.poolAmount; + } + else + { + __instance.ApplyFeatureDefinitionPointPool(heroBuildingData, featureDefinitionPointPool, finaTag); + } } } @@ -75,8 +105,45 @@ public static void Prefix( [UsedImplicitly] public static class UntrainInvocation_Patch { + private static void UndoGrantPool( + CharacterBuildingManager __instance, + CharacterHeroBuildingData heroBuildingData, + InvocationDefinition invocation) + { + if (invocation.GrantedFeature is not FeatureDefinitionPointPool featureDefinitionPointPool) + { + return; + } + + if (!heroBuildingData.PointPoolStacks.TryGetValue(featureDefinitionPointPool.PoolType, + out var pointPoolStack)) + { + return; + } + + var hero = __instance.CurrentLocalHeroCharacter; + + __instance.GetLastAssignedClassAndLevel(hero, out var classDefinition, out var level); + + var finaTag = AttributeDefinitions.GetClassTag(classDefinition, level) + + featureDefinitionPointPool.ExtraSpellsTag + featureDefinitionPointPool.ExtraSpellsTag; + + if (!pointPoolStack.ActivePools.TryGetValue(finaTag, out var pool)) + { + return; + } + + pool.maxPoints -= featureDefinitionPointPool.poolAmount; + + if (pool.maxPoints == 0) + { + pointPoolStack.ActivePools.Remove(finaTag); + } + } + [UsedImplicitly] public static bool Prefix( + CharacterBuildingManager __instance, CharacterHeroBuildingData heroBuildingData, InvocationDefinition invocation, string tag) @@ -84,6 +151,8 @@ public static bool Prefix( //PATCH: do not check or modify point pools when dealing with custom invocations if (invocation is not InvocationDefinitionCustom) { + UndoGrantPool(__instance, heroBuildingData, invocation); + return true; } @@ -178,8 +247,10 @@ public static void Prefix([NotNull] CharacterBuildingManager __instance, [NotNul [UsedImplicitly] public static void Postfix(CharacterBuildingManager __instance, [NotNull] RulesetCharacterHero hero) { - //PATCH: grants cantrip selected by a Domain Nature on level 1 - DomainNature.GrantCantripFromSubclassPool(hero); + //PATCH: grants cantrip that for whatever reason vanilla has a hard time granting ;-) + GrantCantripFromCustomAcquiredPool(hero, "DomainNature"); + GrantCantripFromCustomAcquiredPool(hero, "PactTome"); + GrantCantripFromCustomAcquiredPool(hero, "PrimalOrder"); //PATCH: grant spells for these 2 subs as pools with tags aren't granted from subs if not at sub 1st level var selectedClass = LevelUpHelper.GetSelectedClass(hero); @@ -187,7 +258,7 @@ public static void Postfix(CharacterBuildingManager __instance, [NotNull] Rulese if (selectedClass == DatabaseHelper.CharacterClassDefinitions.Wizard) { hero.GrantAcquiredSpellWithTagFromSubclassPool(WizardAbjuration.SpellTag); - hero.GrantAcquiredSpellWithTagFromSubclassPool(WizardEvocation.SpellTag); + hero.GrantAcquiredSpellWithTagFromSubclassPool(WizardEvocation.SpellTag); } //PATCH: grants spell repertoires and respective selected spells from feats @@ -202,6 +273,65 @@ public static void Postfix(CharacterBuildingManager __instance, [NotNull] Rulese //PATCH: unregisters the hero leveling up LevelUpHelper.UnregisterHero(hero); } + + private static void GrantCantripFromCustomAcquiredPool(RulesetCharacterHero hero, string name) + { + var repertoire = hero.SpellRepertoires + .FirstOrDefault(x => LevelUpHelper.IsRepertoireFromSelectedClassSubclass(hero, x)); + + if (repertoire == null) + { + return; + } + + var heroBuildingData = hero.GetHeroBuildingData(); + var selectedClassLevel = LevelUpHelper.GetSelectedClassLevel(hero); + + var selectedClass = LevelUpHelper.GetSelectedClass(hero); + var classTag = AttributeDefinitions.GetClassTag(selectedClass, selectedClassLevel); + var classPoolName = $"{classTag}{name}"; + + // consider cantrips from classes + if (heroBuildingData.AcquiredCantrips.TryGetValue(classPoolName, out var cantrips1)) + { + foreach (var cantrip in cantrips1) + { + hero.GrantCantrip(cantrip, repertoire.SpellCastingFeature, name); + } + } + + // consider cantrips from feats / invocations / etc. + classPoolName = $"{classTag}{name}{name}"; + + if (heroBuildingData.AcquiredCantrips.TryGetValue(classPoolName, out var cantrips2)) + { + foreach (var cantrip in cantrips2) + { + hero.GrantCantrip(cantrip, repertoire.SpellCastingFeature, name); + } + } + + var selectedSubclass = LevelUpHelper.GetSelectedSubclass(hero); + + if (!selectedSubclass) + { + return; + } + + // consider cantrips from subclasses + var subclassTag = AttributeDefinitions.GetSubclassTag(selectedClass, 1, selectedSubclass); + var subclassPoolName = $"{subclassTag}{name}"; + + if (!heroBuildingData.AcquiredCantrips.TryGetValue(subclassPoolName, out var cantrips3)) + { + return; + } + + foreach (var cantrip in cantrips3) + { + hero.GrantCantrip(cantrip, repertoire.SpellCastingFeature, name); + } + } } [HarmonyPatch(typeof(CharacterBuildingManager), nameof(CharacterBuildingManager.AssignClassLevel))] diff --git a/SolastaUnfinishedBusiness/Patches/GuiInvocationDefinitionPatcher.cs b/SolastaUnfinishedBusiness/Patches/GuiInvocationDefinitionPatcher.cs index 117b39ae11..ff417b3af3 100644 --- a/SolastaUnfinishedBusiness/Patches/GuiInvocationDefinitionPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GuiInvocationDefinitionPatcher.cs @@ -1,12 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Reflection.Emit; +using System.Diagnostics.CodeAnalysis; +using System.Linq; using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api; using SolastaUnfinishedBusiness.Api.GameExtensions; -using SolastaUnfinishedBusiness.Api.Helpers; namespace SolastaUnfinishedBusiness.Patches; @@ -21,68 +18,113 @@ public static class GuiInvocationDefinitionPatcher // ReSharper disable once IdentifierTypo public static class IsInvocationMacthingPrerequisites_Patch { - //PATCH: return class level instead of char level on invocations selection (MULTICLASS) - private static int TryGetAttributeValue( + [UsedImplicitly] + public static bool Prefix( + ref bool __result, + InvocationDefinition invocation, RulesetCharacterHero hero, - string attributeName) + out string prerequisiteOutput) { - return hero.GetClassLevel(DatabaseHelper.CharacterClassDefinitions.Warlock); + __result = IsInvocationMatchingPrerequisites(invocation, hero, out prerequisiteOutput); + + return false; } - //PATCH: allow warlocks to bypass spell knowledge on level 1 if using new warlock 2024 invocations progression - private static bool HasKnowledgeOfSpell(RulesetSpellRepertoire spellRepertoire, SpellDefinition spellDefinition) + private static bool IsInvocationMatchingPrerequisites( + InvocationDefinition invocation, + RulesetCharacterHero hero, + out string prerequisiteOutput) { - if (!Main.Settings.EnableWarlockToUseOneDndInvocationProgression) + var isValid = true; + + prerequisiteOutput = string.Empty; + + if (invocation.RequiredLevel > 1) { - return spellRepertoire.HasKnowledgeOfSpell(spellDefinition); - } + var text = invocation.RequiredLevel.ToString(); - var screen = Gui.GuiService.GetScreen(); + if (hero != null && invocation.RequiredLevel > + hero.GetClassLevel(DatabaseHelper.CharacterClassDefinitions.Warlock)) + { + isValid = false; + text = Gui.Colorize(text, "EA7171"); + } - if (!screen) + prerequisiteOutput += Gui.Format("Tooltip/&InvocationPrerequisiteLevelFormat", text); + } + + if (invocation.RequiredKnownSpell) { - return spellRepertoire.HasKnowledgeOfSpell(spellDefinition); + if (!string.IsNullOrEmpty(prerequisiteOutput)) + { + prerequisiteOutput += "\n"; + } + + var text = Gui.Localize(invocation.RequiredKnownSpell.GuiPresentation.Title); + + if (hero != null) + { + var hasSpell = hero.SpellRepertoires.Any(spellRepertoire => + spellRepertoire.HasKnowledgeOfSpell(invocation.RequiredKnownSpell)); + + if (!hasSpell) + { + isValid = false; + text = Gui.Colorize(text, "EA7171"); + } + } + + prerequisiteOutput += Gui.Format("Tooltip/&InvocationPrerequisiteKnownSpellFormat", text); } - return screen.Visible || spellRepertoire.HasKnowledgeOfSpell(spellDefinition); - } + // ReSharper disable once InvertIf + if (invocation.RequiredPact) + { + if (!string.IsNullOrEmpty(prerequisiteOutput)) + { + prerequisiteOutput += "\n"; + } - [NotNull] - [UsedImplicitly] - public static IEnumerable Transpiler([NotNull] IEnumerable instructions) - { - return instructions - .ReplaceCalls(typeof(RulesetEntity).GetMethod("TryGetAttributeValue"), - // ReSharper disable once StringLiteralTypo - "GuiInvocationDefinition.IsInvocationMacthingPrerequisites1", - new CodeInstruction(OpCodes.Call, - new Func(TryGetAttributeValue).Method)) - .ReplaceCalls(typeof(RulesetSpellRepertoire).GetMethod("HasKnowledgeOfSpell"), - // ReSharper disable once StringLiteralTypo - "GuiInvocationDefinition.IsInvocationMacthingPrerequisites2", - new CodeInstruction(OpCodes.Call, - new Func(HasKnowledgeOfSpell).Method)); - } + var text = Gui.Localize(invocation.RequiredPact.GuiPresentation.Title); + + if (hero != null) + { + var hasPact = hero.ActiveFeatures.Any(activeFeature => + activeFeature.Value.Contains(invocation.RequiredPact)); + + //PATCH: supports pacts as invocations as in tabletop 2024 + if (!hasPact && + Main.Settings.EnableWarlockToUseOneDndInvocationProgression) + { + var invocationPactName = invocation.RequiredPact.Name.Replace("FeatureSet", "Invocation"); + + hasPact = hero.TrainedInvocations.Any(x => x.Name == invocationPactName); + } + + if (!hasPact) + { + isValid = false; + text = Gui.Colorize(text, "EA7171"); + } + } + + prerequisiteOutput += Gui.Format("Tooltip/&InvocationPrerequisitePactTitle", text); + } - [UsedImplicitly] - public static void Postfix( - ref bool __result, - InvocationDefinition invocation, - RulesetCharacterHero hero, - ref string prerequisiteOutput) - { //PATCH: Enforces Invocations With PreRequisites if (invocation is not InvocationDefinitionWithPrerequisites invocationDefinitionWithPrerequisites || invocationDefinitionWithPrerequisites.Validators.Count == 0) { - return; + return isValid; } var (result, output) = invocationDefinitionWithPrerequisites.Validate(invocationDefinitionWithPrerequisites, hero); - __result = __result && result; + isValid = isValid && result; prerequisiteOutput += '\n' + output; + + return isValid; } } diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs index b452b455c9..d823561b1e 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs @@ -1664,13 +1664,15 @@ public static void Postfix(RulesetCharacter __instance, RestType restType, bool } } - // ReSharper disable once InvertIf + //TODO: time to make this an interface to support scenarios like below + //PATCH: support for Barbarians to regain one rage point at short rests from level 7 if (Main.Settings.EnableBarbarianRegainOneRageAtShortRest && restType == RestType.ShortRest && - __instance.GetClassLevel(Barbarian) >= 7) + __instance.GetClassLevel(Barbarian) >= 7 && + __instance.UsedRagePoints > 0) { - if (__instance.UsedRagePoints > 0 && !simulate) + if (!simulate) { __instance.UsedRagePoints--; } @@ -1679,6 +1681,31 @@ public static void Postfix(RulesetCharacter __instance, RestType restType, bool .FirstOrDefault(attributeModifier => attributeModifier.ModifiedAttribute == AttributeDefinitions.RagePoints)); } + + //PATCH: support for Fighters to regain one second wind usage at short rests + // ReSharper disable once InvertIf + var fighterClassLevel = __instance.GetClassLevel(Fighter); + + if (Main.Settings.EnableSecondWindToUseOneDndUsagesProgression && + restType == RestType.ShortRest && + fighterClassLevel >= 1) + { + var usablePower = PowerProvider.Get(PowerFighterSecondWind, __instance); + var maxUses = __instance.GetMaxUsesOfPower(usablePower); + var remainingUses = __instance.GetRemainingUsesOfPower(usablePower); + + // ReSharper disable once InvertIf + if (remainingUses != maxUses) + { + if (!simulate) + { + // cannot call RepayUse() here as a dynamic pool + usablePower.remainingUses++; + } + + __instance.recoveredFeatures.Add(PowerFighterSecondWind); + } + } } [UsedImplicitly] diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel09.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel09.cs index 17ac66c808..7c06d90e2e 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel09.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel09.cs @@ -236,6 +236,7 @@ internal static SpellDefinition BuildPowerWordHeal() .Build()) .SetParticleEffectParameters(Regenerate) .Build()) + .AddCustomSubFeatures(new CustomBehaviorPowerWordKillOrHeal()) .AddToDB(); } @@ -266,6 +267,7 @@ internal static SpellDefinition BuildPowerWordKill() .Build()) .SetParticleEffectParameters(FingerOfDeath) .Build()) + .AddCustomSubFeatures(new CustomBehaviorPowerWordKillOrHeal()) .AddToDB(); } @@ -360,6 +362,25 @@ internal static SpellDefinition BuildPsychicScream() #endregion + // required to support Bard level 20 feature Words of Creations (only scenario where these spells have a 2nd target) + private sealed class CustomBehaviorPowerWordKillOrHeal : IFilterTargetingCharacter + { + public bool EnforceFullSelection => false; + + public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter target) + { + if (__instance.SelectionService.SelectedTargets.Count == 0 || + __instance.SelectionService.SelectedTargets[0].IsWithinRange(target, 2)) + { + return true; + } + + __instance.actionModifier.FailureFlags.Add("Failure/&SecondTargetNotWithinRange"); + + return false; + } + } + #region Time Stop internal static SpellDefinition BuildTimeStop() diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs index 5fb2467dd1..88d7ae1df7 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs @@ -31,7 +31,19 @@ internal static class InvocationsBuilders internal const string EldritchSmiteTag = "EldritchSmite"; private static InvocationDefinition _graspingBlast; - public static InvocationDefinition GraspingBlast => _graspingBlast ??= BuildGraspingBlast(); + + internal static readonly InvocationDefinition EldritchMind = InvocationDefinitionBuilder + .Create("InvocationEldritchMind") + .SetGuiPresentation(Category.Invocation, InvocationDefinitions.EldritchSpear) + .SetGrantedFeature( + FeatureDefinitionMagicAffinityBuilder + .Create("MagicAffinityInvocationEldritchMind") + .SetGuiPresentation("InvocationEldritchMind", Category.Invocation) + .SetConcentrationModifiers(ConcentrationAffinity.Advantage) + .AddToDB()) + .AddToDB(); + + internal static InvocationDefinition GraspingBlast => _graspingBlast ??= BuildGraspingBlast(); internal static InvocationDefinition BuildEldritchSmite() { @@ -178,22 +190,6 @@ internal static InvocationDefinition BuildTrickstersEscape() .AddToDB(); } - internal static InvocationDefinition BuildEldritchMind() - { - const string NAME = "InvocationEldritchMind"; - - return InvocationDefinitionBuilder - .Create(NAME) - .SetGuiPresentation(Category.Invocation, InvocationDefinitions.EldritchSpear) - .SetGrantedFeature( - FeatureDefinitionMagicAffinityBuilder - .Create("MagicAffinityInvocationEldritchMind") - .SetGuiPresentation(NAME, Category.Invocation) - .SetConcentrationModifiers(ConcentrationAffinity.Advantage) - .AddToDB()) - .AddToDB(); - } - private static InvocationDefinition BuildGraspingBlast() { const string NAME = "InvocationGraspingBlast"; diff --git a/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs b/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs index 51e0861134..86ab301b49 100644 --- a/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs +++ b/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs @@ -35,9 +35,6 @@ public sealed class DomainNature : AbstractSubclass DamageTypeThunder ]; - private static FeatureDefinitionCastSpell _castSpellDomainNature; - private static CharacterSubclassDefinition _domainNature; - public DomainNature() { var divinePowerPrefix = Gui.Localize("Feature/&ClericChannelDivinityTitle") + ": "; @@ -57,27 +54,18 @@ public DomainNature() // LEVEL 01 - Acolyte of Nature - var spellListDomainNature = SpellListDefinitionBuilder - .Create($"SpellList{Name}") - .SetGuiPresentationNoContent(true) - .FinalizeSpells() - .AddToDB(); - - //explicitly re-use druid spell list, so custom cantrips selected for druid will show here - spellListDomainNature.SpellsByLevel[0].Spells = SpellListDefinitions.SpellListDruid.SpellsByLevel[0].Spells; - - _castSpellDomainNature = FeatureDefinitionCastSpellBuilder + // kept for backward compatibility + _ = FeatureDefinitionCastSpellBuilder .Create(FeatureDefinitionCastSpells.CastSpellElfHigh, $"CastSpell{Name}") .SetGuiPresentationNoContent(true) .SetSpellCastingAbility(AttributeDefinitions.Wisdom) - .SetSpellList(spellListDomainNature) + .SetSpellList(SpellListDefinitions.SpellListDruid) .AddToDB(); var pointPoolCantrip = FeatureDefinitionPointPoolBuilder .Create($"PointPool{Name}Cantrip") .SetGuiPresentationNoContent(true) - .SetSpellOrCantripPool(HeroDefinitions.PointsPoolType.Cantrip, 1, SpellListDefinitions.SpellListDruid, - "DomainNature") + .SetSpellOrCantripPool(HeroDefinitions.PointsPoolType.Cantrip, 1, SpellListDefinitions.SpellListDruid, Name) .AddToDB(); var pointPoolSkills = FeatureDefinitionPointPoolBuilder @@ -249,7 +237,7 @@ public DomainNature() // MAIN - _domainNature = CharacterSubclassDefinitionBuilder + Subclass = CharacterSubclassDefinitionBuilder .Create(Name) .SetGuiPresentation(Category.Subclass, Sprites.GetSprite(Name, Resources.DomainNature, 256)) .AddFeaturesAtLevel(1, @@ -261,8 +249,6 @@ public DomainNature() .AddFeaturesAtLevel(17, featureSetMasterOfNature) .AddFeaturesAtLevel(20, Level20SubclassesContext.PowerClericDivineInterventionImprovementCleric) .AddToDB(); - - Subclass = _domainNature; } internal override CharacterClassDefinition Klass => CharacterClassDefinitions.Cleric; @@ -284,28 +270,6 @@ internal static void ResetCantripSubclassPool(RulesetCharacterHero hero) } } - internal static void GrantCantripFromSubclassPool(RulesetCharacterHero hero) - { - var heroBuildingData = hero.GetHeroBuildingData(); - - if (!heroBuildingData.AcquiredCantrips.TryGetValue(AcquiredCantripsPoolName, out var cantrips)) - { - return; - } - - var selectedClass = LevelUpHelper.GetSelectedClass(hero); - var selectedSubclass = LevelUpHelper.GetSelectedSubclass(hero); - var subclassTag = AttributeDefinitions.GetSubclassTag(selectedClass, 1, selectedSubclass); - - hero.ActiveFeatures[subclassTag].Add(_castSpellDomainNature); - hero.GrantSpellRepertoire(_castSpellDomainNature, null, _domainNature, null); - - foreach (var cantrip in cantrips) - { - hero.GrantCantrip(cantrip, _castSpellDomainNature); - } - } - private sealed class CustomBehaviorDampenElements(ConditionDefinition conditionDampenElements) : IMagicEffectBeforeHitConfirmedOnMe, ITryAlterOutcomeAttack { diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs b/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs index 2e24eaa458..07f50976e2 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardAbjuration.cs @@ -25,7 +25,7 @@ namespace SolastaUnfinishedBusiness.Subclasses; [UsedImplicitly] public sealed class WizardAbjuration : AbstractSubclass { - internal const string Name = "WizardAbjuration"; + private const string Name = "WizardAbjuration"; internal const string SpellTag = "Abjurer"; private const string ArcaneWardConditionName = $"Condition{Name}ArcaneWard"; private const string ProjectedWardConditionName = $"Condition{Name}ProjectedWard"; diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardEvocation.cs b/SolastaUnfinishedBusiness/Subclasses/WizardEvocation.cs index 1becaeab4c..b761b5a749 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardEvocation.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardEvocation.cs @@ -21,9 +21,9 @@ namespace SolastaUnfinishedBusiness.Subclasses; [UsedImplicitly] public sealed class WizardEvocation : AbstractSubclass { - internal const string Name = "WizardEvocation"; - + private const string Name = "WizardEvocation"; internal const string SpellTag = "Evoker"; + // // these lists contain all evocation spells that do damage in a non-vanilla way so they also get bonus // diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 63a1df7ecf..20408dbfd6 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -115,7 +115,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=Der zusätzlich Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Verbesserung des brutalen Schlags Feature/&FeatureSetBarbarianBrutalStrikeTitle=Brutaler Schlag Feature/&FeatureSetDruidPrimalOrderDescription=Du hast dich einer der folgenden heiligen Rollen deiner Wahl verschrieben.\n• Magier. Du kennst einen zusätzlichen Zauberspruch aus der Zauberliste des Druiden. Darüber hinaus verleiht dir deine mystische Verbindung zur Natur einen Bonus auf deine Intelligenzprüfungen (Arkanes oder Natur). Der Bonus beträgt 1W6.\n• Wächter. Du bist für den Kampf ausgebildet und erlangst Kenntnisse im Umgang mit Kriegswaffen und im Umgang mit mittlerer Rüstung. -Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Du kennst einen zusätzlichen Zauberspruch aus der Zauberliste des Druiden. Außerdem verleiht dir deine mystische Verbindung zur Natur einen Bonus auf deine Intelligenzwürfe (Arkanes oder Natur). Der Bonus beträgt 1W6. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Du kennst einen zusätzlichen Zauberspruch aus der Zauberliste des Druiden. Außerdem verleiht dir deine mystische Verbindung zur Natur einen Bonus auf deine Intelligenzwürfe (Arkanes oder Natur). Der Bonus entspricht deinem Weisheitsmodifikator (mindestens + 1). Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Zauberer Feature/&FeatureSetDruidPrimalOrderTitle=Ursprüngliche Ordnung Feature/&FeatureSetDruidPrimalOrderWardenDescription=Durch die Ausbildung für den Kampf erlangen Sie Fertigkeiten im Umgang mit Kampfwaffen und werden mit mittlerer Rüstung geschult. @@ -325,6 +325,7 @@ Screen/&SubclassClassExtraSpellDescriptionFormat=Du kennst diesen Zauber aus der Screen/&SwitchConfigurationDescription=Wechseln Sie bei Ihren ausgerüsteten Gegenständen zu dieser Konfiguration: {0}.\nHalten Sie die STRG-Taste gedrückt, um die andere Hand möglichst beizubehalten. Spell/&ConjureElementalInvisibleStalkerTitle=Elementar beschwören [Unsichtbarer Pirscher] Stage/&IdentityMorphotypeEyeHeader=Augenstil +Tag/&PrimalOrderCantripSpecialTagTitle=Zauberspruch der Urordnung ToolTip/&CheckBoxDefaultPartyTitle=Aktivieren Sie dieses Kontrollkästchen, um Ihre Standardgruppe festzulegen, wenn Sie neue Abenteuer beginnen oder benutzerdefinierte Orte testen. Sie können bis zu {0} Helden nach dem First-In/First-Out-Prinzip auswählen. Tooltip/&AdvancementByCasterLevelFormat=Auf den Charakterstufen 5, 11 und 17 Tooltip/&ChannelDivinityPortraitPoolFormat=Sie haben {0} von {1} Anwendungen von Channel Divinity.\nAlle Anwendungen werden nach einer kurzen oder langen Pause wiederhergestellt. diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index d8621c10df..5ac78bc16f 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -115,7 +115,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=The extra damag Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Brutal Strike Improvement Feature/&FeatureSetBarbarianBrutalStrikeTitle=Brutal Strike Feature/&FeatureSetDruidPrimalOrderDescription=You have dedicated yourself to one of the following sacred roles of your choice.\n• Magician. You know one extra cantrip from the Druid spell list. In addition, your mystical connection to nature gives you a bonus to your Intelligence (Arcana or Nature) checks. The bonus equals 1D6.\n• Warden. Trained for battle, you gain proficiency with Martial weapons and training with Medium Armor. -Feature/&FeatureSetDruidPrimalOrderMagicianDescription=You know one extra cantrip from the Druid spell list. In addition, your mystical connection to nature gives you a bonus to your Intelligence (Arcana or Nature) checks. The bonus equals 1D6. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=You know one extra cantrip from the Druid spell list. In addition, your mystical connection to nature gives you a bonus to your Intelligence (Arcana or Nature) checks. The bonus equals your Wisdom modifier (minimum + 1). Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Magician Feature/&FeatureSetDruidPrimalOrderTitle=Primal Order Feature/&FeatureSetDruidPrimalOrderWardenDescription=Trained for battle, you gain proficiency with Martial weapons and training with Medium Armor. @@ -325,6 +325,7 @@ Screen/&SubclassClassExtraSpellDescriptionFormat=You know this spell from {0} su Screen/&SwitchConfigurationDescription=Switch your equipped items to this configuration: {0}.\nHold CTRL to keep off-hand if possible. Spell/&ConjureElementalInvisibleStalkerTitle=Conjure Elemental [Invisible Stalker] Stage/&IdentityMorphotypeEyeHeader=Eye Style +Tag/&PrimalOrderCantripSpecialTagTitle=Primal Order Cantrip ToolTip/&CheckBoxDefaultPartyTitle=Check this box to set your default party when starting new adventures or testing custom locations. You can select up to {0} heroes in a first-in / first-out basis Tooltip/&AdvancementByCasterLevelFormat=At character levels 5, 11, and 17 Tooltip/&ChannelDivinityPortraitPoolFormat=You have {0} out of {1} uses of Channel Divinity.\nAll uses are restored on short or long rest. diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index 88f9b26b7d..295b941d0c 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -115,7 +115,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=El daño adicio Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Mejora de Brutal Strike Feature/&FeatureSetBarbarianBrutalStrikeTitle=Golpe brutal Feature/&FeatureSetDruidPrimalOrderDescription=Te has dedicado a uno de los siguientes roles sagrados de tu elección.\n• Mago. Conoces un truco adicional de la lista de conjuros del Druida. Además, tu conexión mística con la naturaleza te otorga una bonificación a tus pruebas de Inteligencia (Arcana o Naturaleza). La bonificación es igual a 1D6.\n• Guardián. Entrenado para la batalla, obtienes competencia con armas marciales y entrenamiento con armaduras medianas. -Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Conoces un truco adicional de la lista de conjuros del druida. Además, tu conexión mística con la naturaleza te otorga una bonificación a tus pruebas de Inteligencia (Arcana o Naturaleza). La bonificación equivale a 1D6. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Conoces un truco adicional de la lista de conjuros del druida. Además, tu conexión mística con la naturaleza te otorga una bonificación a tus pruebas de Inteligencia (Arcana o Naturaleza). La bonificación es igual a tu modificador de Sabiduría (mínimo + 1). Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Mago Feature/&FeatureSetDruidPrimalOrderTitle=Orden primordial Feature/&FeatureSetDruidPrimalOrderWardenDescription=Entrenado para la batalla, adquirirás competencia con armas marciales y entrenamiento con armadura media. @@ -325,6 +325,7 @@ Screen/&SubclassClassExtraSpellDescriptionFormat=Conoces este hechizo de la subc Screen/&SwitchConfigurationDescription=Cambia los objetos equipados a esta configuración: {0}.\nMantén presionada la tecla CTRL para mantener la mano izquierda si es posible. Spell/&ConjureElementalInvisibleStalkerTitle=Conjurar elemental [Acosador invisible] Stage/&IdentityMorphotypeEyeHeader=Estilo de ojos +Tag/&PrimalOrderCantripSpecialTagTitle=Truco de la Orden Primordial ToolTip/&CheckBoxDefaultPartyTitle=Marca esta casilla para configurar tu grupo predeterminado al iniciar nuevas aventuras o probar ubicaciones personalizadas. Puedes seleccionar hasta {0} héroes por orden de llegada Tooltip/&AdvancementByCasterLevelFormat=En los niveles de personaje 5, 11 y 17 Tooltip/&ChannelDivinityPortraitPoolFormat=Tienes {0} de {1} usos de Canalizar divinidad.\nTodos los usos se restauran con descansos cortos o prolongados. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 716748758b..0a056fb982 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -115,7 +115,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=Les dégâts su Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Amélioration des frappes brutales Feature/&FeatureSetBarbarianBrutalStrikeTitle=Grève brutale Feature/&FeatureSetDruidPrimalOrderDescription=Vous vous êtes consacré à l'un des rôles sacrés suivants de votre choix.\n• Magicien. Vous connaissez un sort supplémentaire de la liste des sorts du Druide. De plus, votre connexion mystique avec la nature vous confère un bonus à vos tests d'Intelligence (Arcanes ou Nature). Le bonus est égal à 1D6.\n• Gardien. Entraîné au combat, vous maîtrisez les armes martiales et vous vous entraînez aux armures intermédiaires. -Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Vous connaissez un sort supplémentaire de la liste des sorts du druide. De plus, votre connexion mystique avec la nature vous confère un bonus à vos tests d'Intelligence (Arcanes ou Nature). Le bonus est égal à 1D6. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Vous connaissez un sort supplémentaire de la liste des sorts du druide. De plus, votre connexion mystique avec la nature vous confère un bonus à vos tests d'Intelligence (Arcanes ou Nature). Le bonus est égal à votre modificateur de Sagesse (minimum + 1). Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Magicien Feature/&FeatureSetDruidPrimalOrderTitle=Ordre primordial Feature/&FeatureSetDruidPrimalOrderWardenDescription=Entraîné au combat, vous acquérez une maîtrise des armes martiales et une formation avec une armure moyenne. @@ -325,6 +325,7 @@ Screen/&SubclassClassExtraSpellDescriptionFormat=Vous connaissez ce sort de la s Screen/&SwitchConfigurationDescription=Changez vos objets équipés selon cette configuration : {0}.\nMaintenez la touche CTRL enfoncée pour garder la main secondaire si possible. Spell/&ConjureElementalInvisibleStalkerTitle=Invocation d'élémentaire [Invisible Stalker] Stage/&IdentityMorphotypeEyeHeader=Style des yeux +Tag/&PrimalOrderCantripSpecialTagTitle=Sort de l'Ordre Primaire ToolTip/&CheckBoxDefaultPartyTitle=Cochez cette case pour définir votre groupe par défaut lorsque vous démarrez de nouvelles aventures ou testez des emplacements personnalisés. Vous pouvez sélectionner jusqu'à {0} héros selon le principe du premier entré/premier sorti Tooltip/&AdvancementByCasterLevelFormat=Aux niveaux de personnage 5, 11 et 17 Tooltip/&ChannelDivinityPortraitPoolFormat=Vous avez {0} utilisations sur {1} de Canalisation divine.\nToutes les utilisations sont restaurées lors d'un repos court ou long. diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 26443affd6..6bd37fec70 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -115,7 +115,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=Il danno extra Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Miglioramento del colpo brutale Feature/&FeatureSetBarbarianBrutalStrikeTitle=Colpo brutale Feature/&FeatureSetDruidPrimalOrderDescription=Ti sei dedicato a uno dei seguenti ruoli sacri a tua scelta.\n• Mago. Conosci un trucchetto extra dalla lista degli incantesimi del Druido. Inoltre, la tua connessione mistica con la natura ti dà un bonus alle tue prove di Intelligenza (Arcano o Natura). Il bonus è pari a 1D6.\n• Guardiano. Addestrato per la battaglia, ottieni competenza con le armi da guerra e addestramento con le armature medie. -Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Conosci un trucchetto extra dalla lista degli incantesimi del Druido. Inoltre, la tua connessione mistica con la natura ti dà un bonus alle tue prove di Intelligenza (Arcano o Natura). Il bonus è pari a 1D6. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Conosci un trucchetto extra dalla lista degli incantesimi del Druido. Inoltre, la tua connessione mistica con la natura ti dà un bonus alle tue prove di Intelligenza (Arcano o Natura). Il bonus è pari al tuo modificatore di Saggezza (minimo + 1). Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Mago Feature/&FeatureSetDruidPrimalOrderTitle=Ordine primordiale Feature/&FeatureSetDruidPrimalOrderWardenDescription=Una volta addestrato per la battaglia, acquisisci competenza nell'uso delle armi da guerra e ti alleni con le armature medie. @@ -325,6 +325,7 @@ Screen/&SubclassClassExtraSpellDescriptionFormat=Conosci questo incantesimo dell Screen/&SwitchConfigurationDescription=Sostituisci gli oggetti equipaggiati con questa configurazione: {0}.\nSe possibile, tieni premuto CTRL per tenerli nella mano secondaria. Spell/&ConjureElementalInvisibleStalkerTitle=Evoca Elementale [Invisibile Stalker] Stage/&IdentityMorphotypeEyeHeader=Stile degli occhi +Tag/&PrimalOrderCantripSpecialTagTitle=Trucchetto dell'Ordine Primordiale ToolTip/&CheckBoxDefaultPartyTitle=Seleziona questa casella per impostare il tuo gruppo predefinito quando inizi nuove avventure o quando provi luoghi personalizzati. Puoi selezionare fino a {0} eroi in base al primo arrivato/primo uscito Tooltip/&AdvancementByCasterLevelFormat=Ai livelli dei personaggi 5, 11 e 17 Tooltip/&ChannelDivinityPortraitPoolFormat=Hai {0} utilizzi su {1} di Incanalare Divinità.\nTutti gli utilizzi vengono ripristinati con un riposo breve o lungo. diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index 7ebd16b095..75c7a3924f 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -115,7 +115,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=Brutal Strike Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=ブルータルストライクの改善 Feature/&FeatureSetBarbarianBrutalStrikeTitle=ブルータル・ストライク Feature/&FeatureSetDruidPrimalOrderDescription=あなたは、あなたが選んだ以下の神聖な役割の 1 つに身を捧げています。\n• 魔術師。あなたはドルイド呪文リストから追加の呪文を 1 つ知っています。さらに、自然との神秘的なつながりにより、知力 (神秘学または自然) 判定にボーナスが与えられます。ボーナスは 1D6 です。\n• 監視者。戦闘の訓練を受け、あなたは軍用武器の熟練度と中装鎧の訓練を得ます。 -Feature/&FeatureSetDruidPrimalOrderMagicianDescription=ドルイド呪文リストから追加の呪文を 1 つ知っています。さらに、自然との神秘的なつながりにより、知力 (神秘学または自然) 判定にボーナスが与えられます。ボーナスは 1D6 です。 +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=ドルイド呪文リストから追加の呪文を 1 つ知っています。さらに、自然との神秘的なつながりにより、知力 (秘術または自然) 判定にボーナスが与えられます。ボーナスは、あなたの知恵修正値 (最小 + 1) に等しくなります。 Feature/&FeatureSetDruidPrimalOrderMagicianTitle=マジシャン Feature/&FeatureSetDruidPrimalOrderTitle=原始秩序 Feature/&FeatureSetDruidPrimalOrderWardenDescription=戦闘の訓練を受け、あなたは格闘武器の熟練度と中型鎧の訓練を習得します。 @@ -325,6 +325,7 @@ Screen/&SubclassClassExtraSpellDescriptionFormat=あなたはこの呪文を{0} Screen/&SwitchConfigurationDescription=装備しているアイテムを次の構成に切り替えます: {0}。\nCTRL キーを押したままにして、可能であれば手を離してください。 Spell/&ConjureElementalInvisibleStalkerTitle=コンジュア・エレメンタル [インビジブル・ストーカー] Stage/&IdentityMorphotypeEyeHeader=アイスタイル +Tag/&PrimalOrderCantripSpecialTagTitle=原始秩序の呪文 ToolTip/&CheckBoxDefaultPartyTitle=新しい冒険を開始するとき、またはカスタムの場所をテストするときにデフォルトのパーティーを設定するには、このボックスをチェックします。先入れ先出し方式で最大 {0} 人のヒーローを選択できます Tooltip/&AdvancementByCasterLevelFormat=キャラクターレベル5、11、17の場合 Tooltip/&ChannelDivinityPortraitPoolFormat=チャンネル ディヴィニティの使用回数は {1} 回中 {0} 回です。\nすべての使用量は短時間または長期の休憩で回復します。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 1fd2f70e96..7c1059c387 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -115,7 +115,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=잔인한 일 Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=잔혹한 일격 개선 Feature/&FeatureSetBarbarianBrutalStrikeTitle=잔인한 일격 Feature/&FeatureSetDruidPrimalOrderDescription=당신은 선택한 다음 신성한 역할 중 하나에 헌신했습니다.\n• 마법사. 당신은 드루이드 주문 목록에서 추가 주문 하나를 알고 있습니다. 게다가, 자연과의 신비로운 연결은 당신에게 지능(비전 또는 자연) 검사에 보너스를 줍니다. 보너스는 1D6과 같습니다.\n• 감시자. 전투를 위해 훈련받았으며, 당신은 무술 무기에 능숙해지고 중갑옷에 대한 훈련을 받습니다. -Feature/&FeatureSetDruidPrimalOrderMagicianDescription=드루이드 주문 목록에서 캔트립을 하나 더 알고 있습니다. 게다가 자연과의 신비로운 연결로 지능(아카나 또는 자연) 검사에 보너스를 받습니다. 보너스는 1D6입니다. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=드루이드 주문 목록에서 캔트립을 하나 더 알고 있습니다. 게다가 자연과의 신비로운 연결로 지능(아카나 또는 자연) 검사에 보너스를 받습니다. 보너스는 지혜 수정치(최소 + 1)와 같습니다. Feature/&FeatureSetDruidPrimalOrderMagicianTitle=마술사 Feature/&FeatureSetDruidPrimalOrderTitle=원초적 순서 Feature/&FeatureSetDruidPrimalOrderWardenDescription=전투 훈련을 받으면 무술 무기를 능숙하게 다루고 중갑옷을 다루는 훈련을 받습니다. @@ -325,6 +325,7 @@ Screen/&SubclassClassExtraSpellDescriptionFormat=당신은 {0} 하위 클래스 Screen/&SwitchConfigurationDescription=장착된 항목을 다음 구성으로 전환하세요: {0}.\n가능하면 손을 떼지 않으려면 Ctrl 키를 누르세요. Spell/&ConjureElementalInvisibleStalkerTitle=정령 소환 [투명 추적자] Stage/&IdentityMorphotypeEyeHeader=아이 스타일 +Tag/&PrimalOrderCantripSpecialTagTitle=원시 주문 주문 ToolTip/&CheckBoxDefaultPartyTitle=새로운 모험을 시작하거나 사용자 지정 위치를 테스트할 때 기본 파티를 설정하려면 이 상자를 선택하세요. 선입선출 방식으로 최대 {0}명의 영웅을 선택할 수 있습니다. Tooltip/&AdvancementByCasterLevelFormat=캐릭터 레벨 5, 11, 17에서 Tooltip/&ChannelDivinityPortraitPoolFormat=Channel Divinity를 {1}회 사용 중 {0}회 사용했습니다.\n짧거나 긴 휴식을 취하면 모든 사용이 복원됩니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 24810f8834..7fc6a8144d 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -115,7 +115,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=O dano extra ca Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Melhoria do Ataque Brutal Feature/&FeatureSetBarbarianBrutalStrikeTitle=Ataque Brutal Feature/&FeatureSetDruidPrimalOrderDescription=Você se dedicou a um dos seguintes papéis sagrados de sua escolha.\n• Mago. Você conhece um truque extra da lista de magias do Druida. Além disso, sua conexão mística com a natureza lhe dá um bônus em seus testes de Inteligência (Arcana ou Natureza). O bônus é igual a 1D6.\n• Guardião. Treinado para a batalha, você ganha proficiência com armas Marciais e treinamento com Armadura Média. -Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Você conhece um truque extra da lista de magias de Druida. Além disso, sua conexão mística com a natureza lhe dá um bônus para seus testes de Inteligência (Arcana ou Natureza). O bônus é igual a 1D6. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Você conhece um truque extra da lista de magias de Druida. Além disso, sua conexão mística com a natureza lhe dá um bônus para seus testes de Inteligência (Arcana ou Natureza). O bônus é igual ao seu modificador de Sabedoria (mínimo + 1). Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Mágico Feature/&FeatureSetDruidPrimalOrderTitle=Ordem Primordial Feature/&FeatureSetDruidPrimalOrderWardenDescription=Treinado para a batalha, você ganha proficiência com armas marciais e treinamento com armaduras médias. @@ -325,6 +325,7 @@ Screen/&SubclassClassExtraSpellDescriptionFormat=Você conhece essa magia da sub Screen/&SwitchConfigurationDescription=Troque seus itens equipados para esta configuração: {0}.\nSegure CTRL para manter a mão secundária, se possível. Spell/&ConjureElementalInvisibleStalkerTitle=Conjurar Elemental [Perseguidor Invisível] Stage/&IdentityMorphotypeEyeHeader=Estilo dos olhos +Tag/&PrimalOrderCantripSpecialTagTitle=Truque da Ordem Primordial ToolTip/&CheckBoxDefaultPartyTitle=Marque esta caixa para definir seu grupo padrão ao iniciar novas aventuras ou testar locais personalizados. Você pode selecionar até {0} heróis em uma base de primeiro a entrar / primeiro a sair Tooltip/&AdvancementByCasterLevelFormat=Nos níveis de personagem 5, 11 e 17 Tooltip/&ChannelDivinityPortraitPoolFormat=Você tem {0} de {1} usos de Canalizar Divindade.\nTodos os usos são restaurados em descansos curtos ou longos. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index aa69318df4..2ee44a03a9 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -115,7 +115,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=Дополни Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Улучшенный жестокий удар Feature/&FeatureSetBarbarianBrutalStrikeTitle=Жестокий удар Feature/&FeatureSetDruidPrimalOrderDescription=Вы посвятили себя одной из следующих сакральных ролей по вашему выбору.\n• Маг. Вы знаете один дополнительный заговор из списка заклинаний Друида. Кроме того, ваша мистическая связь с природой даёт вам бонус к проверкам Интеллекта (Магия или Природа). Бонус равен 1d6.\n• Хранитель. Обучившись сражениям, вы получаете владения воинским оружием и средней бронёй. -Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Вы знаете один дополнительный заговор из списка заклинаний Друида. Кроме того, ваша мистическая связь с природой даёт вам бонус к проверкам Интеллекта (Магия или Природа). Бонус равен 1d6. +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Вы знаете один дополнительный заговор из списка заклинаний Друида. Кроме того, ваша мистическая связь с природой даёт вам бонус к проверкам Интеллекта (Магия или Природа). Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Маг Feature/&FeatureSetDruidPrimalOrderTitle=Первобытный порядок Feature/&FeatureSetDruidPrimalOrderWardenDescription=Обучившись сражениям, вы получаете владения воинским оружием и средней бронёй. @@ -325,6 +325,7 @@ Screen/&SubclassClassExtraSpellDescriptionFormat=Вам известно это Screen/&SwitchConfigurationDescription=Поменять экипированные предметы на эту конфигурацию: {0}.\nЗажмите CTRL, чтобы оставить предмет в левой руке, если возможно. Spell/&ConjureElementalInvisibleStalkerTitle=Призыв элементаля [Невидимый охотник] Stage/&IdentityMorphotypeEyeHeader=Вид глаз +Tag/&PrimalOrderCantripSpecialTagTitle=Колдовство Первобытного Порядка ToolTip/&CheckBoxDefaultPartyTitle=Отметьте этот пункт, чтобы задать группу по умолчанию для начала нового приключения или тестирования кастомных локаций. Вы можете выбрать вплоть до {0} персонажей по приципу первый на вход / первый на выход Tooltip/&AdvancementByCasterLevelFormat=На уровнях персонажа 5, 11 и 17. Tooltip/&ChannelDivinityPortraitPoolFormat=У вас {0} из {1} использований Божественного канала.\nВсе использования восстановятся после короткого или продолжительного отдыха. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index e72b3d2716..02575d60a0 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -115,7 +115,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=你的凶蛮打 Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=精通凶蛮打击 Feature/&FeatureSetBarbarianBrutalStrikeTitle=凶蛮打击 Feature/&FeatureSetDruidPrimalOrderDescription=您已将自己献身于以下您选择的神圣角色之一。\n• 魔法师。您从德鲁伊法术列表中多掌握一个法术。此外,您与自然的神秘联系为您的智力(奥术或自然)检定带来加值。加值等于 1D6。\n• 守望者。您接受过战斗训练,能够熟练使用军用武器并接受过中型盔甲训练。 -Feature/&FeatureSetDruidPrimalOrderMagicianDescription=你从德鲁伊法术列表中多掌握一个法术。此外,你与自然的神秘联系为你的智力(奥术或自然)检定带来加值。加值等于 1D6。 +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=您从德鲁伊法术列表中多掌握一个法术。此外,您与自然的神秘联系为您的智力(奥术或自然)检定带来加值。加值等于您的智慧调整值(最小值 + 1)。 Feature/&FeatureSetDruidPrimalOrderMagicianTitle=魔术师 Feature/&FeatureSetDruidPrimalOrderTitle=原始秩序 Feature/&FeatureSetDruidPrimalOrderWardenDescription=经过战斗训练,您可以熟练使用军用武器并接受中型盔甲训练。 @@ -325,6 +325,7 @@ Screen/&SubclassClassExtraSpellDescriptionFormat=你从 {0} 子职知道这个 Screen/&SwitchConfigurationDescription=将你装备的物品切换到此配置:{0}。\n如果可能,按住 CTRL 以保持副手状态。 Spell/&ConjureElementalInvisibleStalkerTitle=元素咒唤【隐形潜伏怪】 Stage/&IdentityMorphotypeEyeHeader=眼型 +Tag/&PrimalOrderCantripSpecialTagTitle=元始秩序戏法 ToolTip/&CheckBoxDefaultPartyTitle=在开始新的冒险或测试自定义位置时,选中此框以设置你的默认队伍。你最多可以选择 {0} 个英雄,以先进先出的方式进行 Tooltip/&AdvancementByCasterLevelFormat=角色等级为 5、11 和 17 时 Tooltip/&ChannelDivinityPortraitPoolFormat=你有 {0} 次使用引导神力,共 {1} 次。\n所有使用次数都在短休或长休后恢复。 From 9bf601fb9d6403b47e1bfa64588cf84a2788cc85 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 4 Nov 2024 22:24:18 -0800 Subject: [PATCH 65/85] fix Sickening Radiance exhaustion immunity on constructs, elementals, undead, and constructs --- SolastaUnfinishedBusiness/ChangelogHistory.txt | 1 + SolastaUnfinishedBusiness/Settings/empty.xml | 6 +++++- .../Spells/SpellBuildersLevel04.cs | 10 ++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 96f049980f..298e6efbc9 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -9,6 +9,7 @@ - fixed Circle of Wildfire spirit allowed actions when summoner is incapacitated - fixed Dispel Magic and similar not considering proxy effects - fixed recurrent effects interaction with immunity from proxies [VANILLA] +- fixed Sickening Radiance exhaustion immunity on constructs, elementals, undead, and constructs - fixed Wizard Abjuration projected ward crash on gadgets - fixed Wizard Graviturgist descriptions, SFX, and behaviors diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index 89ee1a46be..a69b79f459 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -561,7 +561,7 @@ false false false - false + false false false false @@ -1046,4 +1046,8 @@ false false false + 0 + false + false + false \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs index 1be304e26a..221c884e8a 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs @@ -712,6 +712,16 @@ private void HandleExhaustedCondition( conditionName = conditionsExhausted[0].Name; } + if (rulesetTarget is RulesetCharacterMonster rulesetMonster && + (rulesetMonster.MonsterDefinition == MonsterDefinitions.ShamblingMound_MonsterDefinition || + rulesetMonster.MonsterDefinition == MonsterDefinitions.ShamblingMound_MonsterDefinition_POI_ONLY || + rulesetMonster.MonsterDefinition.CharacterFamily == CharacterFamilyDefinitions.Construct.Name || + rulesetMonster.MonsterDefinition.CharacterFamily == CharacterFamilyDefinitions.Elemental.Name || + rulesetMonster.MonsterDefinition.CharacterFamily == CharacterFamilyDefinitions.Undead.Name)) + { + return; + } + if (conditionName != string.Empty) { rulesetTarget.InflictCondition( From 9b956e53570a17a7d20efc106e054f9bda3286c8 Mon Sep 17 00:00:00 2001 From: Dovel Date: Tue, 5 Nov 2024 13:27:07 +0300 Subject: [PATCH 66/85] update russian translation --- SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 2ee44a03a9..7bb446e36c 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -115,7 +115,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=Дополни Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Улучшенный жестокий удар Feature/&FeatureSetBarbarianBrutalStrikeTitle=Жестокий удар Feature/&FeatureSetDruidPrimalOrderDescription=Вы посвятили себя одной из следующих сакральных ролей по вашему выбору.\n• Маг. Вы знаете один дополнительный заговор из списка заклинаний Друида. Кроме того, ваша мистическая связь с природой даёт вам бонус к проверкам Интеллекта (Магия или Природа). Бонус равен 1d6.\n• Хранитель. Обучившись сражениям, вы получаете владения воинским оружием и средней бронёй. -Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Вы знаете один дополнительный заговор из списка заклинаний Друида. Кроме того, ваша мистическая связь с природой даёт вам бонус к проверкам Интеллекта (Магия или Природа). +Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Вы знаете один дополнительный заговор из списка заклинаний Друида. Кроме того, ваша мистическая связь с природой даёт вам бонус к проверкам Интеллекта (Магия или Природа). Бонус равен вашему модификатору Мудрости (минимум 1). Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Маг Feature/&FeatureSetDruidPrimalOrderTitle=Первобытный порядок Feature/&FeatureSetDruidPrimalOrderWardenDescription=Обучившись сражениям, вы получаете владения воинским оружием и средней бронёй. @@ -325,7 +325,7 @@ Screen/&SubclassClassExtraSpellDescriptionFormat=Вам известно это Screen/&SwitchConfigurationDescription=Поменять экипированные предметы на эту конфигурацию: {0}.\nЗажмите CTRL, чтобы оставить предмет в левой руке, если возможно. Spell/&ConjureElementalInvisibleStalkerTitle=Призыв элементаля [Невидимый охотник] Stage/&IdentityMorphotypeEyeHeader=Вид глаз -Tag/&PrimalOrderCantripSpecialTagTitle=Колдовство Первобытного Порядка +Tag/&PrimalOrderCantripSpecialTagTitle=Заговор Первобытного порядка ToolTip/&CheckBoxDefaultPartyTitle=Отметьте этот пункт, чтобы задать группу по умолчанию для начала нового приключения или тестирования кастомных локаций. Вы можете выбрать вплоть до {0} персонажей по приципу первый на вход / первый на выход Tooltip/&AdvancementByCasterLevelFormat=На уровнях персонажа 5, 11 и 17. Tooltip/&ChannelDivinityPortraitPoolFormat=У вас {0} из {1} использований Божественного канала.\nВсе использования восстановятся после короткого или продолжительного отдыха. From f561334b7070f0a98022d6bbb5e0a374c9b0be4e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 5 Nov 2024 08:27:29 -0800 Subject: [PATCH 67/85] update translations --- SolastaUnfinishedBusiness/Translations/de/Others-de.txt | 2 +- SolastaUnfinishedBusiness/Translations/en/Others-en.txt | 2 +- SolastaUnfinishedBusiness/Translations/es/Others-es.txt | 2 +- SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt | 2 +- SolastaUnfinishedBusiness/Translations/it/Others-it.txt | 2 +- SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt | 2 +- SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt | 2 +- SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt | 2 +- SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 20408dbfd6..49f6e91cfc 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -114,7 +114,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=Verbesserung des brut Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=Der zusätzliche Schaden, den Ihr brutaler Schlag verursacht, erhöht sich auf 2W10. Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Verbesserung des brutalen Schlags Feature/&FeatureSetBarbarianBrutalStrikeTitle=Brutaler Schlag -Feature/&FeatureSetDruidPrimalOrderDescription=Du hast dich einer der folgenden heiligen Rollen deiner Wahl verschrieben.\n• Magier. Du kennst einen zusätzlichen Zauberspruch aus der Zauberliste des Druiden. Darüber hinaus verleiht dir deine mystische Verbindung zur Natur einen Bonus auf deine Intelligenzprüfungen (Arkanes oder Natur). Der Bonus beträgt 1W6.\n• Wächter. Du bist für den Kampf ausgebildet und erlangst Kenntnisse im Umgang mit Kriegswaffen und im Umgang mit mittlerer Rüstung. +Feature/&FeatureSetDruidPrimalOrderDescription=Du hast dich einer der folgenden heiligen Rollen deiner Wahl verschrieben.\n• Magier. Du kennst einen zusätzlichen Zauberspruch aus der Zauberliste des Druiden. Darüber hinaus gibt dir deine mystische Verbindung zur Natur einen Bonus auf deine Intelligenzprüfungen (Arkanes oder Natur). Der Bonus entspricht deinem Weisheitsmodifikator (mindestens + 1).\n• Wächter. Du bist für den Kampf ausgebildet und erlangst Kenntnisse im Umgang mit Kriegswaffen und im Umgang mit mittlerer Rüstung. Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Du kennst einen zusätzlichen Zauberspruch aus der Zauberliste des Druiden. Außerdem verleiht dir deine mystische Verbindung zur Natur einen Bonus auf deine Intelligenzwürfe (Arkanes oder Natur). Der Bonus entspricht deinem Weisheitsmodifikator (mindestens + 1). Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Zauberer Feature/&FeatureSetDruidPrimalOrderTitle=Ursprüngliche Ordnung diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 5ac78bc16f..c2b4cbb7a3 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -114,7 +114,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=Brutal Strike Improve Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=The extra damage your Brutal Strike deals increases to 2d10. Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Brutal Strike Improvement Feature/&FeatureSetBarbarianBrutalStrikeTitle=Brutal Strike -Feature/&FeatureSetDruidPrimalOrderDescription=You have dedicated yourself to one of the following sacred roles of your choice.\n• Magician. You know one extra cantrip from the Druid spell list. In addition, your mystical connection to nature gives you a bonus to your Intelligence (Arcana or Nature) checks. The bonus equals 1D6.\n• Warden. Trained for battle, you gain proficiency with Martial weapons and training with Medium Armor. +Feature/&FeatureSetDruidPrimalOrderDescription=You have dedicated yourself to one of the following sacred roles of your choice.\n• Magician. You know one extra cantrip from the Druid spell list. In addition, your mystical connection to nature gives you a bonus to your Intelligence (Arcana or Nature) checks. The bonus equals your Wisdom modifier (minimum + 1).\n• Warden. Trained for battle, you gain proficiency with Martial weapons and training with Medium Armor. Feature/&FeatureSetDruidPrimalOrderMagicianDescription=You know one extra cantrip from the Druid spell list. In addition, your mystical connection to nature gives you a bonus to your Intelligence (Arcana or Nature) checks. The bonus equals your Wisdom modifier (minimum + 1). Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Magician Feature/&FeatureSetDruidPrimalOrderTitle=Primal Order diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index 295b941d0c..0fc0e0f238 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -114,7 +114,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=Mejora de Brutal Stri Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=El daño adicional que inflige tu Golpe Brutal aumenta a 2d10. Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Mejora de Brutal Strike Feature/&FeatureSetBarbarianBrutalStrikeTitle=Golpe brutal -Feature/&FeatureSetDruidPrimalOrderDescription=Te has dedicado a uno de los siguientes roles sagrados de tu elección.\n• Mago. Conoces un truco adicional de la lista de conjuros del Druida. Además, tu conexión mística con la naturaleza te otorga una bonificación a tus pruebas de Inteligencia (Arcana o Naturaleza). La bonificación es igual a 1D6.\n• Guardián. Entrenado para la batalla, obtienes competencia con armas marciales y entrenamiento con armaduras medianas. +Feature/&FeatureSetDruidPrimalOrderDescription=Te has dedicado a uno de los siguientes roles sagrados de tu elección.\n• Mago. Conoces un truco adicional de la lista de conjuros del Druida. Además, tu conexión mística con la naturaleza te otorga una bonificación a tus pruebas de Inteligencia (Arcana o Naturaleza). La bonificación es igual a tu modificador de Sabiduría (mínimo + 1).\n• Guardián. Entrenado para la batalla, obtienes competencia con armas marciales y entrenamiento con armaduras medianas. Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Conoces un truco adicional de la lista de conjuros del druida. Además, tu conexión mística con la naturaleza te otorga una bonificación a tus pruebas de Inteligencia (Arcana o Naturaleza). La bonificación es igual a tu modificador de Sabiduría (mínimo + 1). Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Mago Feature/&FeatureSetDruidPrimalOrderTitle=Orden primordial diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 0a056fb982..34d4009110 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -114,7 +114,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=Amélioration de la f Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=Les dégâts supplémentaires infligés par votre Frappe brutale augmentent à 2d10. Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Amélioration des frappes brutales Feature/&FeatureSetBarbarianBrutalStrikeTitle=Grève brutale -Feature/&FeatureSetDruidPrimalOrderDescription=Vous vous êtes consacré à l'un des rôles sacrés suivants de votre choix.\n• Magicien. Vous connaissez un sort supplémentaire de la liste des sorts du Druide. De plus, votre connexion mystique avec la nature vous confère un bonus à vos tests d'Intelligence (Arcanes ou Nature). Le bonus est égal à 1D6.\n• Gardien. Entraîné au combat, vous maîtrisez les armes martiales et vous vous entraînez aux armures intermédiaires. +Feature/&FeatureSetDruidPrimalOrderDescription=Vous vous êtes consacré à l'un des rôles sacrés suivants de votre choix.\n• Magicien. Vous connaissez un sort supplémentaire de la liste des sorts du Druide. De plus, votre connexion mystique avec la nature vous confère un bonus à vos tests d'Intelligence (Arcanes ou Nature). Le bonus est égal à votre modificateur de Sagesse (minimum + 1).\n• Gardien. Entraîné au combat, vous maîtrisez les armes martiales et vous vous entraînez aux armures intermédiaires. Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Vous connaissez un sort supplémentaire de la liste des sorts du druide. De plus, votre connexion mystique avec la nature vous confère un bonus à vos tests d'Intelligence (Arcanes ou Nature). Le bonus est égal à votre modificateur de Sagesse (minimum + 1). Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Magicien Feature/&FeatureSetDruidPrimalOrderTitle=Ordre primordial diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 6bd37fec70..12f1477c96 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -114,7 +114,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=Miglioramento del col Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=Il danno extra inflitto dal tuo Colpo Brutale aumenta a 2d10. Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Miglioramento del colpo brutale Feature/&FeatureSetBarbarianBrutalStrikeTitle=Colpo brutale -Feature/&FeatureSetDruidPrimalOrderDescription=Ti sei dedicato a uno dei seguenti ruoli sacri a tua scelta.\n• Mago. Conosci un trucchetto extra dalla lista degli incantesimi del Druido. Inoltre, la tua connessione mistica con la natura ti dà un bonus alle tue prove di Intelligenza (Arcano o Natura). Il bonus è pari a 1D6.\n• Guardiano. Addestrato per la battaglia, ottieni competenza con le armi da guerra e addestramento con le armature medie. +Feature/&FeatureSetDruidPrimalOrderDescription=Ti sei dedicato a uno dei seguenti ruoli sacri a tua scelta.\n• Mago. Conosci un trucchetto extra dalla lista degli incantesimi del Druido. Inoltre, la tua connessione mistica con la natura ti dà un bonus alle tue prove di Intelligenza (Arcano o Natura). Il bonus è pari al tuo modificatore di Saggezza (minimo + 1).\n• Guardiano. Addestrato per la battaglia, ottieni competenza con le armi da guerra e addestramento con le armature medie. Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Conosci un trucchetto extra dalla lista degli incantesimi del Druido. Inoltre, la tua connessione mistica con la natura ti dà un bonus alle tue prove di Intelligenza (Arcano o Natura). Il bonus è pari al tuo modificatore di Saggezza (minimo + 1). Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Mago Feature/&FeatureSetDruidPrimalOrderTitle=Ordine primordiale diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index 75c7a3924f..91cc838eef 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -114,7 +114,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=ブルータルスト Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=Brutal Strike が与える追加ダメージは 2d10 に増加します。 Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=ブルータルストライクの改善 Feature/&FeatureSetBarbarianBrutalStrikeTitle=ブルータル・ストライク -Feature/&FeatureSetDruidPrimalOrderDescription=あなたは、あなたが選んだ以下の神聖な役割の 1 つに身を捧げています。\n• 魔術師。あなたはドルイド呪文リストから追加の呪文を 1 つ知っています。さらに、自然との神秘的なつながりにより、知力 (神秘学または自然) 判定にボーナスが与えられます。ボーナスは 1D6 です。\n• 監視者。戦闘の訓練を受け、あなたは軍用武器の熟練度と中装鎧の訓練を得ます。 +Feature/&FeatureSetDruidPrimalOrderDescription=あなたは、あなたが選んだ以下の神聖な役割の 1 つに身を捧げています。\n• 魔術師。あなたはドルイド呪文リストから 1 つの追加の呪文を知っています。さらに、自然との神秘的なつながりにより、知力 (神秘または自然) チェックにボーナスが与えられます。ボーナスは、あなたの知恵修正値 (最小 + 1) に等しくなります。\n• 監視者。戦闘の訓練を受け、あなたは軍用武器の熟練度と中装の訓練を得ます。 Feature/&FeatureSetDruidPrimalOrderMagicianDescription=ドルイド呪文リストから追加の呪文を 1 つ知っています。さらに、自然との神秘的なつながりにより、知力 (秘術または自然) 判定にボーナスが与えられます。ボーナスは、あなたの知恵修正値 (最小 + 1) に等しくなります。 Feature/&FeatureSetDruidPrimalOrderMagicianTitle=マジシャン Feature/&FeatureSetDruidPrimalOrderTitle=原始秩序 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 7c1059c387..e8e3ac6ae1 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -114,7 +114,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=잔혹한 일격 개 Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=잔인한 일격이 주는 추가 피해는 2d10으로 증가합니다. Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=잔혹한 일격 개선 Feature/&FeatureSetBarbarianBrutalStrikeTitle=잔인한 일격 -Feature/&FeatureSetDruidPrimalOrderDescription=당신은 선택한 다음 신성한 역할 중 하나에 헌신했습니다.\n• 마법사. 당신은 드루이드 주문 목록에서 추가 주문 하나를 알고 있습니다. 게다가, 자연과의 신비로운 연결은 당신에게 지능(비전 또는 자연) 검사에 보너스를 줍니다. 보너스는 1D6과 같습니다.\n• 감시자. 전투를 위해 훈련받았으며, 당신은 무술 무기에 능숙해지고 중갑옷에 대한 훈련을 받습니다. +Feature/&FeatureSetDruidPrimalOrderDescription=당신은 선택한 다음 신성한 역할 중 하나에 헌신했습니다.\n• 마법사. 당신은 드루이드 주문 목록에서 추가 주문 하나를 알고 있습니다. 게다가, 자연과의 신비로운 연결은 당신에게 지능(비전 또는 자연) 검사에 보너스를 제공합니다. 보너스는 당신의 지혜 수정치(최소 +1)와 같습니다.\n• 감시자. 전투를 위해 훈련받았으며, 당신은 무술 무기에 능숙해지고 중갑옷에 대한 훈련을 받습니다. Feature/&FeatureSetDruidPrimalOrderMagicianDescription=드루이드 주문 목록에서 캔트립을 하나 더 알고 있습니다. 게다가 자연과의 신비로운 연결로 지능(아카나 또는 자연) 검사에 보너스를 받습니다. 보너스는 지혜 수정치(최소 + 1)와 같습니다. Feature/&FeatureSetDruidPrimalOrderMagicianTitle=마술사 Feature/&FeatureSetDruidPrimalOrderTitle=원초적 순서 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 7fc6a8144d..3865964298 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -114,7 +114,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=Melhoria do Ataque Br Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=O dano extra causado pelo seu Ataque Brutal aumenta para 2d10. Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=Melhoria do Ataque Brutal Feature/&FeatureSetBarbarianBrutalStrikeTitle=Ataque Brutal -Feature/&FeatureSetDruidPrimalOrderDescription=Você se dedicou a um dos seguintes papéis sagrados de sua escolha.\n• Mago. Você conhece um truque extra da lista de magias do Druida. Além disso, sua conexão mística com a natureza lhe dá um bônus em seus testes de Inteligência (Arcana ou Natureza). O bônus é igual a 1D6.\n• Guardião. Treinado para a batalha, você ganha proficiência com armas Marciais e treinamento com Armadura Média. +Feature/&FeatureSetDruidPrimalOrderDescription=Você se dedicou a um dos seguintes papéis sagrados de sua escolha.\n• Mago. Você conhece um truque extra da lista de magias do Druida. Além disso, sua conexão mística com a natureza lhe dá um bônus em seus testes de Inteligência (Arcana ou Natureza). O bônus é igual ao seu modificador de Sabedoria (mínimo + 1).\n• Guardião. Treinado para a batalha, você ganha proficiência com armas Marciais e treinamento com Armadura Média. Feature/&FeatureSetDruidPrimalOrderMagicianDescription=Você conhece um truque extra da lista de magias de Druida. Além disso, sua conexão mística com a natureza lhe dá um bônus para seus testes de Inteligência (Arcana ou Natureza). O bônus é igual ao seu modificador de Sabedoria (mínimo + 1). Feature/&FeatureSetDruidPrimalOrderMagicianTitle=Mágico Feature/&FeatureSetDruidPrimalOrderTitle=Ordem Primordial diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 02575d60a0..3f02f5b87e 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -114,7 +114,7 @@ Feature/&FeatureSetBarbarianBrutalStrikeImprovement13Title=精通凶蛮打击 Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Description=你的凶蛮打击造成的额外伤害提升至 2d10。 Feature/&FeatureSetBarbarianBrutalStrikeImprovement17Title=精通凶蛮打击 Feature/&FeatureSetBarbarianBrutalStrikeTitle=凶蛮打击 -Feature/&FeatureSetDruidPrimalOrderDescription=您已将自己献身于以下您选择的神圣角色之一。\n• 魔法师。您从德鲁伊法术列表中多掌握一个法术。此外,您与自然的神秘联系为您的智力(奥术或自然)检定带来加值。加值等于 1D6。\n• 守望者。您接受过战斗训练,能够熟练使用军用武器并接受过中型盔甲训练。 +Feature/&FeatureSetDruidPrimalOrderDescription=您已将自己献身于以下您选择的神圣角色之一。\n• 魔法师。您从德鲁伊法术列表中多掌握一个法术。此外,您与自然的神秘联系为您的智力(奥术或自然)检定带来加值。加值等于您的智慧调整值(最小值 + 1)。\n• 守望者。您接受过战斗训练,熟练掌握军用武器并接受过中型盔甲训练。 Feature/&FeatureSetDruidPrimalOrderMagicianDescription=您从德鲁伊法术列表中多掌握一个法术。此外,您与自然的神秘联系为您的智力(奥术或自然)检定带来加值。加值等于您的智慧调整值(最小值 + 1)。 Feature/&FeatureSetDruidPrimalOrderMagicianTitle=魔术师 Feature/&FeatureSetDruidPrimalOrderTitle=原始秩序 From 61662199a126e2de1611cf91e7cfaf09d6199467 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 5 Nov 2024 13:44:29 -0800 Subject: [PATCH 68/85] fix melee and range hit powers damage form dice advancement under multiclass scenarios --- .../ChangelogHistory.txt | 1 + .../RulesetImplementationManagerPatcher.cs | 47 +++++++++++++++++-- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 298e6efbc9..d43a711dff 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -8,6 +8,7 @@ - fixed Charmed by Hypnotic Pattern not getting considered on incapacitated checks [VANILLA] - fixed Circle of Wildfire spirit allowed actions when summoner is incapacitated - fixed Dispel Magic and similar not considering proxy effects +- fixed melee and range hit powers damage form dice advancement under multiclass scenarios - fixed recurrent effects interaction with immunity from proxies [VANILLA] - fixed Sickening Radiance exhaustion immunity on constructs, elementals, undead, and constructs - fixed Wizard Abjuration projected ward crash on gadgets diff --git a/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerPatcher.cs index 8dbb173ffc..8fa74cb4d4 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerPatcher.cs @@ -319,10 +319,49 @@ public static IEnumerable Transpiler([NotNull] IEnumerable( RollDamage).Method; - return instructions.ReplaceCalls(rollDamageMethod, - "RulesetImplementationManager.ApplyDamageForm", - new CodeInstruction(OpCodes.Ldarg_2), - new CodeInstruction(OpCodes.Call, myRollDamageMethod)); + var getDiceOfRankMethod = typeof(DiceByRank).GetMethod("GetDiceOfRank"); + var myGetDiceOfRankMethod = + new Func, bool, EffectForm, RulesetImplementationDefinitions.ApplyFormsParams, + int>(GetDiceOfRank).Method; + + return instructions + .ReplaceCalls(rollDamageMethod, + "RulesetImplementationManager.RollDamage", + new CodeInstruction(OpCodes.Ldarg_2), + new CodeInstruction(OpCodes.Call, myRollDamageMethod)) + .ReplaceCalls(getDiceOfRankMethod, + "RulesetImplementationManager.GetDiceOfRank", + new CodeInstruction(OpCodes.Ldarg_1), + new CodeInstruction(OpCodes.Ldarg_2), + new CodeInstruction(OpCodes.Call, myGetDiceOfRankMethod)); + } + + //PATCH: allows dice advancement to play nicely with MULTICLASS + private static int GetDiceOfRank( + int rank, + List table, + bool allowEmptyEntries, + EffectForm effectForm, + RulesetImplementationDefinitions.ApplyFormsParams formsParams) + { + if (formsParams.activeEffect.SourceDefinition is not FeatureDefinitionPower featureDefinitionPower) + { + return DiceByRank.GetDiceOfRank(rank, table, allowEmptyEntries); + } + + var character = formsParams.sourceCharacter; + var klass = character.FindClassHoldingFeature(featureDefinitionPower); + var klassLevel = character.GetClassLevel(klass); + + rank = effectForm.LevelType switch + { + LevelSourceType.ClassLevel => klassLevel, + LevelSourceType.ClassLevelHalfUp => Mathf.CeilToInt(0.5f * klassLevel), + LevelSourceType.EffectLevel => formsParams.activeEffect.EffectLevel, + _ => rank + }; + + return DiceByRank.GetDiceOfRank(rank, table, allowEmptyEntries); } } From 5060d9233df412dcfb864d01cf9d1e672457c292 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 5 Nov 2024 15:07:31 -0800 Subject: [PATCH 69/85] update diagnostics --- .../UnfinishedBusinessBlueprints/Assets.txt | 10 +- .../ConditionHatredArdentHate.json | 2 +- ...tialCommanderPeerlessCommanderSavings.json | 2 +- .../ConditionRoyalKnightSpiritedSurge.json | 2 +- .../ConditionSavingThrowAdvantage.json | 159 ++++++++++++++++++ .../SavingThrowAffinityHatredArdentHate.json | 117 ------------- ...nityMartialCommanderPeerlessCommander.json | 117 ------------- ...ThrowAffinityRoyalKnightSpiritedSurge.json | 117 ------------- 8 files changed, 163 insertions(+), 363 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSavingThrowAdvantage.json delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionSavingThrowAffinity/SavingThrowAffinityHatredArdentHate.json delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionSavingThrowAffinity/SavingThrowAffinityMartialCommanderPeerlessCommander.json delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionSavingThrowAffinity/SavingThrowAffinityRoyalKnightSpiritedSurge.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 223de7631b..86856d2987 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -1159,6 +1159,7 @@ ConditionRoyalKnightInspiringSurge ConditionDefinition ConditionDefinition e0818 ConditionRoyalKnightSpiritedSurge ConditionDefinition ConditionDefinition 1385a45e-ff65-5ede-819f-4f212183fee5 ConditionSanctuary ConditionDefinition ConditionDefinition a81385c4-353b-5e6d-b3d8-c69f99443eb0 ConditionSanctuaryReduceDamage ConditionDefinition ConditionDefinition d015058d-9975-55d5-8be9-29126572624c +ConditionSavingThrowAdvantage ConditionDefinition ConditionDefinition 7265d2c9-c101-53f9-8270-e3bc2ed7cfa8 ConditionScornfulPrayer ConditionDefinition ConditionDefinition c537a98e-c3e4-55a6-a0d6-b3e325492624 ConditionSearingSmite ConditionDefinition ConditionDefinition dc927e03-08a7-5033-98d8-3adee1d952fd ConditionSenseNormalVision24 ConditionDefinition ConditionDefinition 1845364e-e920-535d-8dc8-c3513a2c151c @@ -4267,13 +4268,11 @@ SavingThrowAffinityCircleOfMagicalNegation FeatureDefinitionSavingThrowAffinity SavingThrowAffinityDruidWildshape FeatureDefinitionSavingThrowAffinity FeatureDefinition 8a2527d3-8766-572c-9350-ea4d3374d4db SavingThrowAffinityGrayDwarfIllusion FeatureDefinitionSavingThrowAffinity FeatureDefinition a792f4fd-c7aa-5803-9fae-6fda9fbe175b SavingThrowAffinityGrayDwarfStoneStrength FeatureDefinitionSavingThrowAffinity FeatureDefinition a05ffebc-50da-5db7-a48c-e789b7d2216c -SavingThrowAffinityHatredArdentHate FeatureDefinitionSavingThrowAffinity FeatureDefinition 2df3fa04-f4e9-52cf-8526-864b45c274ec SavingThrowAffinityInnovationAlchemyDamagePsychic FeatureDefinitionSavingThrowAffinity FeatureDefinition 5f150330-ebe1-53ac-8b9b-25779acb946c SavingThrowAffinityInnovationAlchemyDamageThunder FeatureDefinitionSavingThrowAffinity FeatureDefinition d39b7b59-8a83-5e76-a6cc-b32a39310850 SavingThrowAffinityInnovationWeaponSummonSteelDefender FeatureDefinitionSavingThrowAffinity FeatureDefinition c68b000a-ea4f-5b16-8356-e59a77464220 SavingThrowAffinityIntellectFortress FeatureDefinitionSavingThrowAffinity FeatureDefinition 87adb0af-6410-5a1e-852b-19bb394b6ac0 SavingThrowAffinityMartialArcaneArcherEnfeeblingArrow FeatureDefinitionSavingThrowAffinity FeatureDefinition d8938195-e19b-5145-80ef-f5101fc8b7dc -SavingThrowAffinityMartialCommanderPeerlessCommander FeatureDefinitionSavingThrowAffinity FeatureDefinition dcd49c7c-bc39-57df-a8e9-fcce11317373 SavingThrowAffinityOathOfAncientsElderChampionEnemy FeatureDefinitionSavingThrowAffinity FeatureDefinition 092e88b9-0b01-5c94-91e8-052d4b0ecdc4 SavingThrowAffinityOathOfDevotionHolyNimbus FeatureDefinition FeatureDefinition f51b2530-8752-5f2f-b3f7-99e118a99732 SavingThrowAffinityOathOfDreadAspectOfDreadEnemy FeatureDefinitionSavingThrowAffinity FeatureDefinition 58677567-e738-5819-bda6-b18a5fd0e80f @@ -4283,7 +4282,6 @@ SavingThrowAffinityRoguishAcrobatSwiftWind FeatureDefinitionSavingThrowAffinity SavingThrowAffinityRoguishArcaneScoundrelDistractingAmbush FeatureDefinitionSavingThrowAffinity FeatureDefinition 1679b032-2a91-5682-948a-307ae8fb86ce SavingThrowAffinityRoguishOpportunistDebilitatingStrike FeatureDefinitionSavingThrowAffinity FeatureDefinition 9606365c-6ee2-55cd-9a61-915464c3f215 SavingThrowAffinityRoguishOpportunistImprovedDebilitatingStrike FeatureDefinitionSavingThrowAffinity FeatureDefinition cdea0f41-45eb-564e-a83d-13a6a7787d3d -SavingThrowAffinityRoyalKnightSpiritedSurge FeatureDefinitionSavingThrowAffinity FeatureDefinition a88e2078-1c9a-57ea-8789-506e26ac6489 SavingThrowAffinitySickeningRadianceExhausted3 FeatureDefinitionSavingThrowAffinity FeatureDefinition bb2186f4-5847-5e4a-a3dc-f613ad953662 SavingThrowAffinitySorcerousSorrAkkathDarknessAffinity FeatureDefinitionSavingThrowAffinity FeatureDefinition 01d34613-f72b-596c-872f-ec312d19f26b SavingThrowAffinitySoulExpulsion FeatureDefinitionSavingThrowAffinity FeatureDefinition 76748aa6-df93-5909-8f20-1f7577272aa7 @@ -5005,13 +5003,11 @@ SavingThrowAffinityCircleOfMagicalNegation FeatureDefinitionSavingThrowAffinity SavingThrowAffinityDruidWildshape FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity 8a2527d3-8766-572c-9350-ea4d3374d4db SavingThrowAffinityGrayDwarfIllusion FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity a792f4fd-c7aa-5803-9fae-6fda9fbe175b SavingThrowAffinityGrayDwarfStoneStrength FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity a05ffebc-50da-5db7-a48c-e789b7d2216c -SavingThrowAffinityHatredArdentHate FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity 2df3fa04-f4e9-52cf-8526-864b45c274ec SavingThrowAffinityInnovationAlchemyDamagePsychic FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity 5f150330-ebe1-53ac-8b9b-25779acb946c SavingThrowAffinityInnovationAlchemyDamageThunder FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity d39b7b59-8a83-5e76-a6cc-b32a39310850 SavingThrowAffinityInnovationWeaponSummonSteelDefender FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity c68b000a-ea4f-5b16-8356-e59a77464220 SavingThrowAffinityIntellectFortress FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity 87adb0af-6410-5a1e-852b-19bb394b6ac0 SavingThrowAffinityMartialArcaneArcherEnfeeblingArrow FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity d8938195-e19b-5145-80ef-f5101fc8b7dc -SavingThrowAffinityMartialCommanderPeerlessCommander FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity dcd49c7c-bc39-57df-a8e9-fcce11317373 SavingThrowAffinityOathOfAncientsElderChampionEnemy FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity 092e88b9-0b01-5c94-91e8-052d4b0ecdc4 SavingThrowAffinityOathOfDreadAspectOfDreadEnemy FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity 58677567-e738-5819-bda6-b18a5fd0e80f SavingThrowAffinityOathOfTirmarInquisitorZeal FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity d549a9e7-6736-55e7-a176-8a6c550b7cd3 @@ -5020,7 +5016,6 @@ SavingThrowAffinityRoguishAcrobatSwiftWind FeatureDefinitionSavingThrowAffinity SavingThrowAffinityRoguishArcaneScoundrelDistractingAmbush FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity 1679b032-2a91-5682-948a-307ae8fb86ce SavingThrowAffinityRoguishOpportunistDebilitatingStrike FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity 9606365c-6ee2-55cd-9a61-915464c3f215 SavingThrowAffinityRoguishOpportunistImprovedDebilitatingStrike FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity cdea0f41-45eb-564e-a83d-13a6a7787d3d -SavingThrowAffinityRoyalKnightSpiritedSurge FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity a88e2078-1c9a-57ea-8789-506e26ac6489 SavingThrowAffinitySickeningRadianceExhausted3 FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity bb2186f4-5847-5e4a-a3dc-f613ad953662 SavingThrowAffinitySorcerousSorrAkkathDarknessAffinity FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity 01d34613-f72b-596c-872f-ec312d19f26b SavingThrowAffinitySoulExpulsion FeatureDefinitionSavingThrowAffinity FeatureDefinitionAffinity 76748aa6-df93-5909-8f20-1f7577272aa7 @@ -7141,13 +7136,11 @@ SavingThrowAffinityCircleOfMagicalNegation FeatureDefinitionSavingThrowAffinity SavingThrowAffinityDruidWildshape FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity 8a2527d3-8766-572c-9350-ea4d3374d4db SavingThrowAffinityGrayDwarfIllusion FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity a792f4fd-c7aa-5803-9fae-6fda9fbe175b SavingThrowAffinityGrayDwarfStoneStrength FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity a05ffebc-50da-5db7-a48c-e789b7d2216c -SavingThrowAffinityHatredArdentHate FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity 2df3fa04-f4e9-52cf-8526-864b45c274ec SavingThrowAffinityInnovationAlchemyDamagePsychic FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity 5f150330-ebe1-53ac-8b9b-25779acb946c SavingThrowAffinityInnovationAlchemyDamageThunder FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity d39b7b59-8a83-5e76-a6cc-b32a39310850 SavingThrowAffinityInnovationWeaponSummonSteelDefender FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity c68b000a-ea4f-5b16-8356-e59a77464220 SavingThrowAffinityIntellectFortress FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity 87adb0af-6410-5a1e-852b-19bb394b6ac0 SavingThrowAffinityMartialArcaneArcherEnfeeblingArrow FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity d8938195-e19b-5145-80ef-f5101fc8b7dc -SavingThrowAffinityMartialCommanderPeerlessCommander FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity dcd49c7c-bc39-57df-a8e9-fcce11317373 SavingThrowAffinityOathOfAncientsElderChampionEnemy FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity 092e88b9-0b01-5c94-91e8-052d4b0ecdc4 SavingThrowAffinityOathOfDreadAspectOfDreadEnemy FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity 58677567-e738-5819-bda6-b18a5fd0e80f SavingThrowAffinityOathOfTirmarInquisitorZeal FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity d549a9e7-6736-55e7-a176-8a6c550b7cd3 @@ -7156,7 +7149,6 @@ SavingThrowAffinityRoguishAcrobatSwiftWind FeatureDefinitionSavingThrowAffinity SavingThrowAffinityRoguishArcaneScoundrelDistractingAmbush FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity 1679b032-2a91-5682-948a-307ae8fb86ce SavingThrowAffinityRoguishOpportunistDebilitatingStrike FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity 9606365c-6ee2-55cd-9a61-915464c3f215 SavingThrowAffinityRoguishOpportunistImprovedDebilitatingStrike FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity cdea0f41-45eb-564e-a83d-13a6a7787d3d -SavingThrowAffinityRoyalKnightSpiritedSurge FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity a88e2078-1c9a-57ea-8789-506e26ac6489 SavingThrowAffinitySickeningRadianceExhausted3 FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity bb2186f4-5847-5e4a-a3dc-f613ad953662 SavingThrowAffinitySorcerousSorrAkkathDarknessAffinity FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity 01d34613-f72b-596c-872f-ec312d19f26b SavingThrowAffinitySoulExpulsion FeatureDefinitionSavingThrowAffinity FeatureDefinitionSavingThrowAffinity 76748aa6-df93-5909-8f20-1f7577272aa7 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionHatredArdentHate.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionHatredArdentHate.json index b1058d6f5a..a45354857b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionHatredArdentHate.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionHatredArdentHate.json @@ -4,7 +4,7 @@ "parentCondition": null, "conditionType": "Beneficial", "features": [ - "Definition:SavingThrowAffinityHatredArdentHate:2df3fa04-f4e9-52cf-8526-864b45c274ec" + "Definition:SavingThrowAffinityAdvantageToAll:43ef34e25f37fc64bbc7af455a107f8f" ], "allowMultipleInstances": false, "silentWhenAdded": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMartialCommanderPeerlessCommanderSavings.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMartialCommanderPeerlessCommanderSavings.json index 72454e0db9..cf8b9b1649 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMartialCommanderPeerlessCommanderSavings.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMartialCommanderPeerlessCommanderSavings.json @@ -4,7 +4,7 @@ "parentCondition": null, "conditionType": "Beneficial", "features": [ - "Definition:SavingThrowAffinityMartialCommanderPeerlessCommander:dcd49c7c-bc39-57df-a8e9-fcce11317373" + "Definition:SavingThrowAffinityAdvantageToAll:43ef34e25f37fc64bbc7af455a107f8f" ], "allowMultipleInstances": false, "silentWhenAdded": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionRoyalKnightSpiritedSurge.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionRoyalKnightSpiritedSurge.json index 3b4d71fb85..2ca62ab8c8 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionRoyalKnightSpiritedSurge.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionRoyalKnightSpiritedSurge.json @@ -7,7 +7,7 @@ "Definition:AbilityCheckAffinityRoyalKnightSpiritedSurge:9ea3e9f5-b9c3-582b-a259-14941c002fe6", "Definition:AdditionalActionSurgedMain:13b583b9acea2c74ebf7f540c8f5d43d", "Definition:CombatAffinityRoyalKnightSpiritedSurge:d42e798e-d827-549d-a6dc-d07844fec664", - "Definition:SavingThrowAffinityRoyalKnightSpiritedSurge:a88e2078-1c9a-57ea-8789-506e26ac6489" + "Definition:SavingThrowAffinityAdvantageToAll:43ef34e25f37fc64bbc7af455a107f8f" ], "allowMultipleInstances": false, "silentWhenAdded": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSavingThrowAdvantage.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSavingThrowAdvantage.json new file mode 100644 index 0000000000..e0c944c460 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSavingThrowAdvantage.json @@ -0,0 +1,159 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:SavingThrowAffinityAdvantageToAll:43ef34e25f37fc64bbc7af455a107f8f" + ], + "allowMultipleInstances": false, + "silentWhenAdded": true, + "silentWhenRemoved": true, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "SavingThrow" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "recurrentEffectParticleReference": null, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "7265d2c9-c101-53f9-8270-e3bc2ed7cfa8", + "contentPack": 9999, + "name": "ConditionSavingThrowAdvantage" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionSavingThrowAffinity/SavingThrowAffinityHatredArdentHate.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionSavingThrowAffinity/SavingThrowAffinityHatredArdentHate.json deleted file mode 100644 index 28aab3072b..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionSavingThrowAffinity/SavingThrowAffinityHatredArdentHate.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "$type": "FeatureDefinitionSavingThrowAffinity, Assembly-CSharp", - "useControllerSavingThrows": false, - "priorityAbilityScore": "", - "affinityGroups": [ - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Charisma", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - }, - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Constitution", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - }, - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Dexterity", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - }, - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Intelligence", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - }, - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Strength", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - }, - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Wisdom", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - } - ], - "indomitableSavingThrows": 0, - "canBorrowLuck": false, - "canUseDiamondSoul": false, - "myselfFamilyRestrictions": [], - "otherCharacterFamilyRestrictions": [], - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": false, - "title": "Feature/&PowerHatredArdentHateTitle", - "description": "Feature/&PowerHatredArdentHateDescription", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "2df3fa04-f4e9-52cf-8526-864b45c274ec", - "contentPack": 9999, - "name": "SavingThrowAffinityHatredArdentHate" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionSavingThrowAffinity/SavingThrowAffinityMartialCommanderPeerlessCommander.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionSavingThrowAffinity/SavingThrowAffinityMartialCommanderPeerlessCommander.json deleted file mode 100644 index 2ec8fa021d..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionSavingThrowAffinity/SavingThrowAffinityMartialCommanderPeerlessCommander.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "$type": "FeatureDefinitionSavingThrowAffinity, Assembly-CSharp", - "useControllerSavingThrows": false, - "priorityAbilityScore": "", - "affinityGroups": [ - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Charisma", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - }, - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Constitution", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - }, - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Dexterity", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - }, - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Intelligence", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - }, - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Strength", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - }, - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Wisdom", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - } - ], - "indomitableSavingThrows": 0, - "canBorrowLuck": false, - "canUseDiamondSoul": false, - "myselfFamilyRestrictions": [], - "otherCharacterFamilyRestrictions": [], - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": false, - "title": "Condition/&ConditionMartialCommanderPeerlessCommanderSavingsTitle", - "description": "Feature/&NoContentTitle", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "dcd49c7c-bc39-57df-a8e9-fcce11317373", - "contentPack": 9999, - "name": "SavingThrowAffinityMartialCommanderPeerlessCommander" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionSavingThrowAffinity/SavingThrowAffinityRoyalKnightSpiritedSurge.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionSavingThrowAffinity/SavingThrowAffinityRoyalKnightSpiritedSurge.json deleted file mode 100644 index 0691efc752..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionSavingThrowAffinity/SavingThrowAffinityRoyalKnightSpiritedSurge.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "$type": "FeatureDefinitionSavingThrowAffinity, Assembly-CSharp", - "useControllerSavingThrows": false, - "priorityAbilityScore": "", - "affinityGroups": [ - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Charisma", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - }, - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Constitution", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - }, - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Dexterity", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - }, - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Intelligence", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - }, - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Strength", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - }, - { - "$type": "FeatureDefinitionSavingThrowAffinity+SavingThrowAffinityGroup, Assembly-CSharp", - "abilityScoreName": "Wisdom", - "affinity": "Advantage", - "savingThrowModifierType": "AddDice", - "savingThrowModifierDiceNumber": 0, - "savingThrowModifierDieType": "D1", - "restrictedForms": [], - "restrictedSchools": [], - "restrictedSpells": [], - "restrictedPowers": [], - "savingThrowContext": "None" - } - ], - "indomitableSavingThrows": 0, - "canBorrowLuck": false, - "canUseDiamondSoul": false, - "myselfFamilyRestrictions": [], - "otherCharacterFamilyRestrictions": [], - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": false, - "title": "Feature/&PowerRoyalKnightSpiritedSurgeTitle", - "description": "Feature/&NoContentTitle", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "a88e2078-1c9a-57ea-8789-506e26ac6489", - "contentPack": 9999, - "name": "SavingThrowAffinityRoyalKnightSpiritedSurge" -} \ No newline at end of file From 33acd3e935305ef398decb78ebfca2414c329b50 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 5 Nov 2024 15:07:50 -0800 Subject: [PATCH 70/85] update translations --- SolastaUnfinishedBusiness/Translations/de/Others-de.txt | 6 ++++++ SolastaUnfinishedBusiness/Translations/de/Settings-de.txt | 1 + SolastaUnfinishedBusiness/Translations/en/Others-en.txt | 6 ++++++ SolastaUnfinishedBusiness/Translations/en/Settings-en.txt | 1 + SolastaUnfinishedBusiness/Translations/es/Others-es.txt | 6 ++++++ SolastaUnfinishedBusiness/Translations/es/Settings-es.txt | 1 + SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt | 6 ++++++ SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt | 1 + SolastaUnfinishedBusiness/Translations/it/Others-it.txt | 6 ++++++ SolastaUnfinishedBusiness/Translations/it/Settings-it.txt | 1 + SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt | 6 ++++++ SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt | 1 + SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt | 6 ++++++ SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt | 1 + .../Translations/pt-BR/Others-pt-BR.txt | 6 ++++++ .../Translations/pt-BR/Settings-pt-BR.txt | 1 + SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt | 6 ++++++ SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt | 1 + .../Translations/zh-CN/Others-zh-CN.txt | 6 ++++++ .../Translations/zh-CN/Settings-zh-CN.txt | 1 + 20 files changed, 70 insertions(+) diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 49f6e91cfc..4774822219 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -167,6 +167,7 @@ Feature/&PowerBarbarianBrutalStrikeStaggeringBlowTitle=Erschütternder Schlag Feature/&PowerBarbarianBrutalStrikeSunderingBlowDescription=Dein Schlag hinterlässt eine Lücke in der Verteidigung der Kreatur für einen Verbündeten bis zum Beginn deines nächsten Zuges. Der nächste Angriffswurf einer anderen Kreatur als dir gegen das Ziel erhält einen Bonus von 1W10 auf Angriffs- und Schadenswurf. Feature/&PowerBarbarianBrutalStrikeSunderingBlowTitle=Trennender Schlag Feature/&PowerBarbarianBrutalStrikeTitle=Brutaler Schlag +Feature/&PowerBardCountercharmExtendedDescription=Sie können Musiknoten oder Machtwörter verwenden, um gedankenbeeinflussende Effekte zu unterbrechen. Wenn Sie oder eine Kreatur in einem Umkreis von 30 Fuß einen Rettungswurf gegen einen Effekt, der den Zustand „Bezaubert“ oder „Verängstigt“ auslöst, nicht schaffen, können Sie eine Reaktion ausführen, um den Rettungswurf zu wiederholen, und der neue Wurf hat einen Vorteil. Feature/&PowerHelpDescription=Sie können einer befreundeten Kreatur dabei helfen, eine Kreatur innerhalb von 1,5 m von Ihnen anzugreifen. Sie täuschen vor, lenken das Ziel ab oder schließen sich auf andere Weise zusammen, um den Angriff Ihres Verbündeten effektiver zu machen. Wenn Ihr Verbündeter das Ziel vor Ihrem nächsten Zug angreift, wird der erste Angriffswurf mit Vorteil ausgeführt. Feature/&PowerHelpTitle=Helfen Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=Sie können 1 Ki-Punkt ausgeben, um in Ihrem Zug sowohl die Aktion „Ausklinken“ als auch die Aktion „Sprinten“ als Bonusaktion auszuführen, und Ihre Sprungdistanz wird für den Zug verdoppelt. @@ -245,6 +246,11 @@ Reaction/&CastSpellInRetributionDescription={0} greift {1} an! Du kannst als Ant Reaction/&CastSpellInRetributionReactDescription=Klicken Sie hier, um {0} zu wirken. Reaction/&CastSpellInRetributionReactTitle=Zauber wirken Reaction/&CastSpellInRetributionTitle=Reaktionszauber wirken +Reaction/&CustomReactionBardCounterCharmDescriptionAlly={0} hat einen Rettungswurf gegen {2} von {1} nicht geschafft. Du kannst reagieren und den Rettungswurf mit Vorteil wiederholen. +Reaction/&CustomReactionBardCounterCharmDescriptionSelf={0} hat einen Rettungswurf gegen {2} von {1} nicht geschafft und kann reagieren, indem er den Rettungswurf mit Vorteil wiederholt. +Reaction/&CustomReactionBardCounterCharmReactDescription=Wiederholen Sie den Save mit Vorteil. +Reaction/&CustomReactionBardCounterCharmReactTitle=Gegenzauber +Reaction/&CustomReactionBardCounterCharmTitle=Gegenzauber Reaction/&CustomReactionMagicalGuidanceCheckDescription=Ein Kontrollwurf ist Ihnen misslungen. Sie können 1 Zauberpunkt ausgeben, um einen W20 zu würfeln und den Kontrollwurf zu ersetzen. Reaction/&CustomReactionMagicalGuidanceCheckReactDescription=Würfeln Sie einen W20, um den Kontrollwurf zu ersetzen. Reaction/&CustomReactionMagicalGuidanceCheckReactTitle=Magische Führung diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index d964c9b286..8fb814976f 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -104,6 +104,7 @@ ModUi/&EnableBarbarianBrutalStrike=Aktiviere Brutal StrikeKampfstil auf Stufe 2. ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Aktivieren Sie den Buff und Debuff von Reckless Attack, um ihn zu Beginn der nächsten Runde zu beenden. ModUi/&EnableBarbarianRegainOneRageAtShortRest=Aktiviere die Wiedererlangung einer Wut-Anwendung während einer kurzen Pause auf Level 7 +ModUi/&EnableBardCounterCharmAsReactionAtLevel7=Aktiviere Gegenzauber auf Stufe 7 als Reaktion statt auf Stufe 6 als Aktion ModUi/&EnableBardExpertiseOneLevelBefore=Aktivieren Sie Expertise auf den Stufen 2 und 9 statt auf 3 und 10. ModUi/&EnableBardHealingBalladOnLongRest=Aktivieren Sie College of Hope Healing Ballad bei langer Pause ModUi/&EnableBardSuperiorInspirationAtLevel18=Aktiviere Überlegene Inspiration auf Level 18 statt 20 und gewähre außerdem zwei Aufladungen statt einer diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index c2b4cbb7a3..ed385f734a 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -167,6 +167,7 @@ Feature/&PowerBarbarianBrutalStrikeStaggeringBlowTitle=Staggering Blow Feature/&PowerBarbarianBrutalStrikeSunderingBlowDescription=Your blow leaves an opening in the creature's defense for an ally until the start of your next turn. The next attack roll made by a creature other than you against the target gains a 1d10 bonus to attack and damage roll. Feature/&PowerBarbarianBrutalStrikeSunderingBlowTitle=Sundering Blow Feature/&PowerBarbarianBrutalStrikeTitle=Brutal Strike +Feature/&PowerBardCountercharmExtendedDescription=You can use musical notes or words of power to disrupt mind-influencing effects. If you or a creature within 30 feet of you fails a saving throw against an effect that applies the Charmed or Frightened condition, you can take a Reaction to cause the save to be rerolled, and the new roll has Advantage. Feature/&PowerHelpDescription=You can aid a friendly creature in attacking a creature within 5 ft of you. You feint, distract the target, or in some other way team up to make your ally's attack more effective. If your ally attacks the target before your next turn, the first attack roll is made with advantage. Feature/&PowerHelpTitle=Help Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=You can spend 1 Ki point to take both the Disengage and Dash action as a bonus action on your turn, and your jump distance is doubled for the turn. @@ -245,6 +246,11 @@ Reaction/&CastSpellInRetributionDescription={0} is attacking {1}! You can cast { Reaction/&CastSpellInRetributionReactDescription=Click to cast {0}. Reaction/&CastSpellInRetributionReactTitle=Cast Spell Reaction/&CastSpellInRetributionTitle=Cast Reaction Spell +Reaction/&CustomReactionBardCounterCharmDescriptionAlly={0} failed a saving roll against {1}'s {2}. You can react to reroll the save with advantage. +Reaction/&CustomReactionBardCounterCharmDescriptionSelf={0} failed a saving roll against {1}'s {2} and can react to reroll the save with advantage. +Reaction/&CustomReactionBardCounterCharmReactDescription=Reroll the save with advantage. +Reaction/&CustomReactionBardCounterCharmReactTitle=Countercharm +Reaction/&CustomReactionBardCounterCharmTitle=Countercharm Reaction/&CustomReactionMagicalGuidanceCheckDescription=You failed a check roll. You can spend 1 sorcery point to roll a d20 and replace the check roll. Reaction/&CustomReactionMagicalGuidanceCheckReactDescription=Roll a d20 to replace the check roll. Reaction/&CustomReactionMagicalGuidanceCheckReactTitle=Magical Guidance diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 79143f004e..0bb0e4ea31 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -104,6 +104,7 @@ ModUi/&EnableBarbarianBrutalStrike=Enable Brutal Strike a ModUi/&EnableBarbarianFightingStyle=Enable Fighting Style choice at level 2 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Enable Reckless Attack buff and debuff to finish at start of next turn ModUi/&EnableBarbarianRegainOneRageAtShortRest=Enable regain one Rage use over a short rest at level 7 +ModUi/&EnableBardCounterCharmAsReactionAtLevel7=Enable Countercharm at level 7 as a reaction instead of level 6 as an action ModUi/&EnableBardExpertiseOneLevelBefore=Enable Expertise at levels 2 and 9 instead of 3 and 10 ModUi/&EnableBardHealingBalladOnLongRest=Enable College of Hope Healing Ballad on long rest ModUi/&EnableBardSuperiorInspirationAtLevel18=Enable Superior Inspiration at level 18 instead of 20 and also grant two recharges instead of 1 diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index 0fc0e0f238..3bff974156 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -167,6 +167,7 @@ Feature/&PowerBarbarianBrutalStrikeStaggeringBlowTitle=Golpe asombroso Feature/&PowerBarbarianBrutalStrikeSunderingBlowDescription=Tu golpe deja una abertura en la defensa de la criatura para un aliado hasta el comienzo de tu siguiente turno. La siguiente tirada de ataque realizada por una criatura que no seas tú contra el objetivo obtiene una bonificación de 1d10 a la tirada de ataque y daño. Feature/&PowerBarbarianBrutalStrikeSunderingBlowTitle=Golpe desgarrador Feature/&PowerBarbarianBrutalStrikeTitle=Golpe brutal +Feature/&PowerBardCountercharmExtendedDescription=Puedes usar notas musicales o palabras de poder para interrumpir los efectos que influyen en la mente. Si tú o una criatura a 30 pies de ti falla una tirada de salvación contra un efecto que aplica la condición de Encantado o Asustado, puedes realizar una Reacción para hacer que se repita la tirada de salvación y la nueva tirada tenga Ventaja. Feature/&PowerHelpDescription=Puedes ayudar a una criatura amiga a atacar a una criatura que se encuentre a 5 pies de ti. Fintas, distraes al objetivo o de alguna otra forma te unes para hacer que el ataque de tu aliado sea más efectivo. Si tu aliado ataca al objetivo antes de tu siguiente turno, la primera tirada de ataque se realiza con ventaja. Feature/&PowerHelpTitle=Ayuda Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=Puedes gastar 1 punto Ki para realizar las acciones Desenganchar y Correr como acción adicional en tu turno, y tu distancia de salto se duplica durante ese turno. @@ -245,6 +246,11 @@ Reaction/&CastSpellInRetributionDescription=¡{0} está atacando a {1}! ¡Puedes Reaction/&CastSpellInRetributionReactDescription=Haz clic para lanzar {0}. Reaction/&CastSpellInRetributionReactTitle=Lanzar hechizo Reaction/&CastSpellInRetributionTitle=Hechizo de reacción +Reaction/&CustomReactionBardCounterCharmDescriptionAlly={0} falló una tirada de salvación contra {2} de {1}. Puedes reaccionar para repetir la tirada de salvación con ventaja. +Reaction/&CustomReactionBardCounterCharmDescriptionSelf={0} falló una tirada de salvación contra {2} de {1} y puede reaccionar para repetir la tirada de salvación con ventaja. +Reaction/&CustomReactionBardCounterCharmReactDescription=Repetir la tirada guardada con ventaja. +Reaction/&CustomReactionBardCounterCharmReactTitle=Contrahechizo +Reaction/&CustomReactionBardCounterCharmTitle=Contrahechizo Reaction/&CustomReactionMagicalGuidanceCheckDescription=Fallaste una tirada de verificación. Puedes gastar 1 punto de hechicería para tirar un d20 y reemplazar la tirada de verificación. Reaction/&CustomReactionMagicalGuidanceCheckReactDescription=Tira un d20 para reemplazar la tirada de control. Reaction/&CustomReactionMagicalGuidanceCheckReactTitle=Guía mágica diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 7f592c2603..78e391ca04 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -104,6 +104,7 @@ ModUi/&EnableBarbarianBrutalStrike=Habilita Golpe brutal ModUi/&EnableBarbarianFightingStyle=Habilitar la opción Estilo de lucha en el nivel 2 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Habilitar el beneficio y desventaja de Ataque imprudente para que finalicen al comienzo del siguiente turno ModUi/&EnableBarbarianRegainOneRageAtShortRest=Permite recuperar un uso de Furia durante un descanso corto en el nivel 7 +ModUi/&EnableBardCounterCharmAsReactionAtLevel7=Habilitar Contraencantamiento en el nivel 7 como reacción en lugar del nivel 6 como acción ModUi/&EnableBardExpertiseOneLevelBefore=Habilitar Experiencia en los niveles 2 y 9 en lugar de 3 y 10 ModUi/&EnableBardHealingBalladOnLongRest=Habilitar College of Hope Healing Ballad en descanso largo ModUi/&EnableBardSuperiorInspirationAtLevel18=Habilita Inspiración superior en el nivel 18 en lugar de 20 y también otorga dos recargas en lugar de 1. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 34d4009110..5dd97df664 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -167,6 +167,7 @@ Feature/&PowerBarbarianBrutalStrikeStaggeringBlowTitle=Coup de foudre Feature/&PowerBarbarianBrutalStrikeSunderingBlowDescription=Votre coup laisse une ouverture dans la défense de la créature pour un allié jusqu'au début de votre prochain tour. Le prochain jet d'attaque effectué par une créature autre que vous contre la cible bénéficie d'un bonus de 1d10 aux jets d'attaque et de dégâts. Feature/&PowerBarbarianBrutalStrikeSunderingBlowTitle=Coup destructeur Feature/&PowerBarbarianBrutalStrikeTitle=Grève brutale +Feature/&PowerBardCountercharmExtendedDescription=Vous pouvez utiliser des notes de musique ou des mots de pouvoir pour perturber les effets d'influence mentale. Si vous ou une créature à 9 mètres de vous ratez un jet de sauvegarde contre un effet qui applique la condition Charmé ou Effrayé, vous pouvez effectuer une Réaction pour que le jet de sauvegarde soit relancé, et le nouveau jet a l'Avantage. Feature/&PowerHelpDescription=Vous pouvez aider une créature alliée à attaquer une créature située à 1,50 m de vous. Vous feignez, distrayez la cible ou faites équipe d'une autre manière pour rendre l'attaque de votre allié plus efficace. Si votre allié attaque la cible avant votre prochain tour, le premier jet d'attaque est effectué avec avantage. Feature/&PowerHelpTitle=Aide Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=Vous pouvez dépenser 1 point Ki pour effectuer à la fois l'action Désengagement et l'action Flèche en tant qu'action bonus pendant votre tour, et votre distance de saut est doublée pour le tour. @@ -245,6 +246,11 @@ Reaction/&CastSpellInRetributionDescription={0} attaque {1} ! Vous pouvez lance Reaction/&CastSpellInRetributionReactDescription=Cliquez pour lancer {0}. Reaction/&CastSpellInRetributionReactTitle=Lancer un sort Reaction/&CastSpellInRetributionTitle=Lancer un sort de réaction +Reaction/&CustomReactionBardCounterCharmDescriptionAlly={0} a raté un jet de sauvegarde contre le {2} de {1}. Vous pouvez réagir pour relancer le jet de sauvegarde avec avantage. +Reaction/&CustomReactionBardCounterCharmDescriptionSelf={0} a échoué à un jet de sauvegarde contre le {2} de {1} et peut réagir pour relancer le jet de sauvegarde avec avantage. +Reaction/&CustomReactionBardCounterCharmReactDescription=Relancez la sauvegarde avec avantage. +Reaction/&CustomReactionBardCounterCharmReactTitle=Contre-charme +Reaction/&CustomReactionBardCounterCharmTitle=Contre-charme Reaction/&CustomReactionMagicalGuidanceCheckDescription=Vous avez raté un jet de test. Vous pouvez dépenser 1 point de sorcellerie pour lancer un d20 et remplacer le jet de test. Reaction/&CustomReactionMagicalGuidanceCheckReactDescription=Lancez un d20 pour remplacer le jet de contrôle. Reaction/&CustomReactionMagicalGuidanceCheckReactTitle=Guidance magique diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index e33f8f305b..ec0aa42480 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -104,6 +104,7 @@ ModUi/&EnableBarbarianBrutalStrike=Activez Frappe brutale ModUi/&EnableBarbarianFightingStyle=Activer le choix du Style de combat au niveau 2 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Activez le buff et le debuff Attaque imprudente pour qu'ils se terminent au début du prochain tour ModUi/&EnableBarbarianRegainOneRageAtShortRest=Permet de récupérer une utilisation de Rage sur un repos court au niveau 7 +ModUi/&EnableBardCounterCharmAsReactionAtLevel7=Activez Contre-charme au niveau 7 en tant que réaction au lieu du niveau 6 en tant qu'action ModUi/&EnableBardExpertiseOneLevelBefore=Activer l'Expertise aux niveaux 2 et 9 au lieu de 3 et 10 ModUi/&EnableBardHealingBalladOnLongRest=Activez College of Hope Healing Ballad en mode repos prolongé ModUi/&EnableBardSuperiorInspirationAtLevel18=Activez Inspiration supérieure au niveau 18 au lieu de 20 et accordez également deux recharges au lieu d'une diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 12f1477c96..30c2d55ead 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -167,6 +167,7 @@ Feature/&PowerBarbarianBrutalStrikeStaggeringBlowTitle=Colpo sconcertante Feature/&PowerBarbarianBrutalStrikeSunderingBlowDescription=Il tuo colpo lascia un'apertura nella difesa della creatura per un alleato fino all'inizio del tuo turno successivo. Il prossimo tiro di attacco effettuato da una creatura diversa da te contro il bersaglio ottiene un bonus di 1d10 al tiro di attacco e di danno. Feature/&PowerBarbarianBrutalStrikeSunderingBlowTitle=Colpo dirompente Feature/&PowerBarbarianBrutalStrikeTitle=Colpo brutale +Feature/&PowerBardCountercharmExtendedDescription=Puoi usare note musicali o parole di potere per interrompere gli effetti che influenzano la mente. Se tu o una creatura entro 30 piedi da te fallite un tiro salvezza contro un effetto che applica la condizione Charmed o Frightened, puoi usare una Reazione per far sì che il tiro salvezza venga ripetuto e il nuovo tiro ha Vantaggio. Feature/&PowerHelpDescription=Puoi aiutare una creatura amica ad attaccare una creatura entro 5 piedi da te. Fingi, distrai il bersaglio o fai squadra in qualche altro modo per rendere più efficace l'attacco del tuo alleato. Se il tuo alleato attacca il bersaglio prima del tuo turno successivo, il primo tiro di attacco viene effettuato con vantaggio. Feature/&PowerHelpTitle=Aiuto Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=Puoi spendere 1 punto Ki per eseguire sia l'azione Disimpegno che quella Scatto come azione bonus durante il tuo turno, e la distanza del tuo salto raddoppia per quel turno. @@ -245,6 +246,11 @@ Reaction/&CastSpellInRetributionDescription={0} sta attaccando {1}! Puoi lanciar Reaction/&CastSpellInRetributionReactDescription=Fai clic per trasmettere {0}. Reaction/&CastSpellInRetributionReactTitle=Lanciare un incantesimo Reaction/&CastSpellInRetributionTitle=Lancia incantesimo di reazione +Reaction/&CustomReactionBardCounterCharmDescriptionAlly={0} ha fallito un tiro salvezza contro {2} di {1}. Puoi reagire e ripetere il tiro salvezza con vantaggio. +Reaction/&CustomReactionBardCounterCharmDescriptionSelf={0} ha fallito un tiro salvezza contro {2} di {1} e può reagire ripetendo il tiro salvezza con vantaggio. +Reaction/&CustomReactionBardCounterCharmReactDescription=Ripeti il ​​tiro salvezza con vantaggio. +Reaction/&CustomReactionBardCounterCharmReactTitle=Controfascino +Reaction/&CustomReactionBardCounterCharmTitle=Controfascino Reaction/&CustomReactionMagicalGuidanceCheckDescription=Hai fallito un tiro di controllo. Puoi spendere 1 punto stregoneria per tirare un d20 e sostituire il tiro di controllo. Reaction/&CustomReactionMagicalGuidanceCheckReactDescription=Tira un d20 per sostituire il tiro di controllo. Reaction/&CustomReactionMagicalGuidanceCheckReactTitle=Guida magica diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 253e9dc525..d00b54faed 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -104,6 +104,7 @@ ModUi/&EnableBarbarianBrutalStrike=Abilita Colpo Brutale ModUi/&EnableBarbarianFightingStyle=Abilita la scelta Stile di combattimento al livello 2 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Abilita il buff e il debuff Attacco sconsiderato per terminare all'inizio del turno successivo ModUi/&EnableBarbarianRegainOneRageAtShortRest=Abilita il recupero di un utilizzo di Rabbia durante un breve riposo al livello 7 +ModUi/&EnableBardCounterCharmAsReactionAtLevel7=Abilita Contrafascino al livello 7 come reazione invece che al livello 6 come azione ModUi/&EnableBardExpertiseOneLevelBefore=Abilita Competenza ai livelli 2 e 9 invece che 3 e 10 ModUi/&EnableBardHealingBalladOnLongRest=Abilita College of Hope Ballata curativa durante il riposo lungo ModUi/&EnableBardSuperiorInspirationAtLevel18=Abilita Ispirazione superiore al livello 18 invece che 20 e concedi anche due ricariche invece di 1 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index 91cc838eef..49dfa2df4c 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -167,6 +167,7 @@ Feature/&PowerBarbarianBrutalStrikeStaggeringBlowTitle=よろめきの一撃 Feature/&PowerBarbarianBrutalStrikeSunderingBlowDescription=あなたの打撃は、次のターンの開始まで、味方のクリーチャーの防御に隙を残します。あなた以外のクリーチャーがターゲットに対して行う次の攻撃ロールは、攻撃ロールとダメージロールに1d10のボーナスを得る。 Feature/&PowerBarbarianBrutalStrikeSunderingBlowTitle=サンダーブロウ Feature/&PowerBarbarianBrutalStrikeTitle=ブルータル・ストライク +Feature/&PowerBardCountercharmExtendedDescription=音符や力の言葉を使って、精神に影響を与える効果を妨害することができます。あなたまたはあなたの 30 フィート以内のクリーチャーが魅了状態または恐怖状態を適用する効果に対するセーヴィング スローに失敗した場合、反応を行ってセーヴィングを再ロールすることができ、新しいロールにはアドバンテージが与えられます。 Feature/&PowerHelpDescription=味方のクリーチャーが自分から 5 フィート以内のクリーチャーを攻撃するのを助けることができます。フェイントをかけたり、ターゲットの気をそらしたり、その他の方法でチームを組んで味方の攻撃をより効果的にします。次のターンの前に味方がターゲットを攻撃した場合、最初の攻撃ロールは有利に行われます。 Feature/&PowerHelpTitle=ヘルプ Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=1 気ポイントを消費して、自分のターンにボーナス アクションとして離脱とダッシュの両方のアクションを実行でき、そのターンのジャンプ距離が 2 倍になります。 @@ -245,6 +246,11 @@ Reaction/&CastSpellInRetributionDescription={0} が {1} を攻撃しています Reaction/&CastSpellInRetributionReactDescription=クリックして {0} をキャストします。 Reaction/&CastSpellInRetributionReactTitle=おまじない Reaction/&CastSpellInRetributionTitle=リアクションスペルを唱える +Reaction/&CustomReactionBardCounterCharmDescriptionAlly={0}{1}{2} に対するセーヴィング ロールに失敗しました。反応して、有利な状態でセーヴィングを再ロールすることができます。 +Reaction/&CustomReactionBardCounterCharmDescriptionSelf={0}{1}{2} に対するセーヴィング ロールに失敗しましたが、反応してセーヴィングを有利に再ロールすることができます。 +Reaction/&CustomReactionBardCounterCharmReactDescription=セーブを有利に再ロールします。 +Reaction/&CustomReactionBardCounterCharmReactTitle=カウンターチャーム +Reaction/&CustomReactionBardCounterCharmTitle=カウンターチャーム Reaction/&CustomReactionMagicalGuidanceCheckDescription=チェックロールに失敗しました。あなたは1ソーサリーポイントを消費してd20をロールし、チェックロールを交換することができます。 Reaction/&CustomReactionMagicalGuidanceCheckReactDescription=D20 をロールしてチェックロールを交換します。 Reaction/&CustomReactionMagicalGuidanceCheckReactTitle=魔法の導き diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index ffb84435fd..eda39f70db 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -104,6 +104,7 @@ ModUi/&EnableBarbarianBrutalStrike=レベル9、13、17で残忍 ModUi/&EnableBarbarianFightingStyle=レベル2で戦闘スタイルの選択を有効にする ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=無謀な攻撃の強化と弱体化を有効にして、次のターンの開始時に終了します ModUi/&EnableBarbarianRegainOneRageAtShortRest=レベル 7 で、短い休憩中に 1 回の Rage 使用を回復できるようになります。 +ModUi/&EnableBardCounterCharmAsReactionAtLevel7=カウンターチャームをレベル6のアクションではなく、レベル7のリアクションとして有効にします ModUi/&EnableBardExpertiseOneLevelBefore=エキスパートをレベル3と10ではなくレベル2と9で有効にする ModUi/&EnableBardHealingBalladOnLongRest=長い休息時に希望の大学 癒しのバラードを有効にする ModUi/&EnableBardSuperiorInspirationAtLevel18=優れたインスピレーションをレベル20ではなくレベル18で有効化し、リチャージ回数を1回ではなく2回付与する diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index e8e3ac6ae1..2637fa5eb8 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -167,6 +167,7 @@ Feature/&PowerBarbarianBrutalStrikeStaggeringBlowTitle=엄청난 타격 Feature/&PowerBarbarianBrutalStrikeSunderingBlowDescription=당신의 타격은 당신의 다음 턴이 시작될 때까지 아군을 위해 생물의 방어에 틈을 남깁니다. 당신이 아닌 생물이 목표에 대해 행하는 다음 공격 굴림은 공격 굴림과 피해 굴림에 1d10의 보너스를 얻습니다. Feature/&PowerBarbarianBrutalStrikeSunderingBlowTitle=가르는 일격 Feature/&PowerBarbarianBrutalStrikeTitle=잔인한 일격 +Feature/&PowerBardCountercharmExtendedDescription=음악적 음표나 힘의 말을 사용하여 정신에 영향을 미치는 효과를 방해할 수 있습니다. 당신이나 30피트 이내의 생물이 Charmed 또는 Frightened 조건을 적용하는 효과에 대한 세이빙 스로우에 실패하면, 당신은 반응을 취하여 세이브를 다시 굴릴 수 있으며, 새로운 굴림에는 이점이 있습니다. Feature/&PowerHelpDescription=당신은 당신으로부터 5피트 내의 생물을 공격하는 아군 생물을 도울 수 있습니다. 당신은 가장하거나, 대상의 주의를 분산시키거나, 다른 방식으로 협력하여 아군의 공격을 더욱 효과적으로 만듭니다. 당신의 다음 턴 전에 당신의 동료가 목표물을 공격한다면, 첫 번째 공격 굴림이 유리하게 이루어집니다. Feature/&PowerHelpTitle=돕다 Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=당신은 1 Ki 포인트를 소비하여 당신의 턴에 보너스 액션으로 Disengage와 Dash 액션을 모두 취할 수 있으며, 점프 거리는 턴 동안 두 배가 됩니다. @@ -245,6 +246,11 @@ Reaction/&CastSpellInRetributionDescription={0}이(가) {1}을(를) 공격하고 Reaction/&CastSpellInRetributionReactDescription={0}을(를) 전송하려면 클릭하세요. Reaction/&CastSpellInRetributionReactTitle=주문 시전 Reaction/&CastSpellInRetributionTitle=시전 반응 주문 +Reaction/&CustomReactionBardCounterCharmDescriptionAlly={0}이(가) {1}{2}에 대한 세이브 롤에 실패했습니다. 이점을 가지고 세이브를 다시 굴릴 수 있습니다. +Reaction/&CustomReactionBardCounterCharmDescriptionSelf={0}은(는) {1}{2}에 대한 세이빙 롤에 실패했으며, 유리하게 세이브를 다시 굴릴 수 있습니다. +Reaction/&CustomReactionBardCounterCharmReactDescription=세이브를 유리하게 다시 굴립니다. +Reaction/&CustomReactionBardCounterCharmReactTitle=카운터챠름 +Reaction/&CustomReactionBardCounterCharmTitle=카운터챠름 Reaction/&CustomReactionMagicalGuidanceCheckDescription=당신은 수표 판정에 실패했습니다. 1마법 포인트를 사용하여 d20을 굴리고 체크 롤을 교체할 수 있습니다. Reaction/&CustomReactionMagicalGuidanceCheckReactDescription=체크 롤을 교체하려면 d20을 굴립니다. Reaction/&CustomReactionMagicalGuidanceCheckReactTitle=마법의 인도 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index c69d8ca53c..0ab8445a87 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -104,6 +104,7 @@ ModUi/&EnableBarbarianBrutalStrike=레벨 9, 13, 17에서 잔혹 ModUi/&EnableBarbarianFightingStyle=레벨 2에서 격투 스타일 선택 가능 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=다음 턴 시작 시 무모한 공격 버프와 디버프가 완료되도록 활성화합니다. ModUi/&EnableBarbarianRegainOneRageAtShortRest=7레벨에서 짧은 휴식 시간 동안 격노 한 번 회복 가능 +ModUi/&EnableBardCounterCharmAsReactionAtLevel7=레벨 6의 액션 대신 레벨 7의 반응으로 카운터챠밍을 활성화합니다. ModUi/&EnableBardExpertiseOneLevelBefore=레벨 3과 10 대신 레벨 2와 9에서 전문성을 활성화합니다. ModUi/&EnableBardHealingBalladOnLongRest=긴 휴식 시 College of Hope 힐링 발라드 활성화 ModUi/&EnableBardSuperiorInspirationAtLevel18=레벨 20 대신 레벨 18에서 우수한 영감을 활성화하고 1회 대신 2회 충전을 허용합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 3865964298..4f832ce213 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -167,6 +167,7 @@ Feature/&PowerBarbarianBrutalStrikeStaggeringBlowTitle=Golpe cambaleante Feature/&PowerBarbarianBrutalStrikeSunderingBlowDescription=Seu golpe deixa uma abertura na defesa da criatura para um aliado até o início do seu próximo turno. A próxima jogada de ataque feita por uma criatura que não seja você contra o alvo ganha um bônus de 1d10 para jogada de ataque e dano. Feature/&PowerBarbarianBrutalStrikeSunderingBlowTitle=Golpe de separação Feature/&PowerBarbarianBrutalStrikeTitle=Ataque Brutal +Feature/&PowerBardCountercharmExtendedDescription=Você pode usar notas musicais ou palavras de poder para interromper efeitos de influência mental. Se você ou uma criatura a até 30 pés de você falhar em um teste de resistência contra um efeito que aplique a condição Encantado ou Amedrontado, você pode usar uma Reação para fazer com que o teste seja refeito, e o novo teste tem Vantagem. Feature/&PowerHelpDescription=Você pode ajudar uma criatura aliada a atacar uma criatura a até 5 pés de você. Você finge, distrai o alvo ou de alguma outra forma se junta para tornar o ataque do seu aliado mais efetivo. Se seu aliado atacar o alvo antes do seu próximo turno, a primeira jogada de ataque é feita com vantagem. Feature/&PowerHelpTitle=Ajuda Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=Você pode gastar 1 ponto de Ki para realizar as ações Desvencilhar e Correr como uma ação bônus no seu turno, e sua distância de salto é dobrada no turno. @@ -245,6 +246,11 @@ Reaction/&CastSpellInRetributionDescription={0} está atacando {1}! Você pode c Reaction/&CastSpellInRetributionReactDescription=Clique para transmitir {0}. Reaction/&CastSpellInRetributionReactTitle=Feitiço lançado Reaction/&CastSpellInRetributionTitle=Reação de Lançamento de Feitiço +Reaction/&CustomReactionBardCounterCharmDescriptionAlly={0} falhou em um teste de resistência contra {2} de {1}. Você pode reagir para repetir o teste de resistência com vantagem. +Reaction/&CustomReactionBardCounterCharmDescriptionSelf={0} falhou em um teste de resistência contra {2} de {1} e pode reagir e repetir o teste com vantagem. +Reaction/&CustomReactionBardCounterCharmReactDescription=Repita a defesa com vantagem. +Reaction/&CustomReactionBardCounterCharmReactTitle=Contrafeitiço +Reaction/&CustomReactionBardCounterCharmTitle=Contrafeitiço Reaction/&CustomReactionMagicalGuidanceCheckDescription=Você falhou em um teste. Você pode gastar 1 ponto de feitiçaria para rolar um d20 e substituir o teste. Reaction/&CustomReactionMagicalGuidanceCheckReactDescription=Role um d20 para substituir o teste. Reaction/&CustomReactionMagicalGuidanceCheckReactTitle=Orientação Mágica diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index eb76ef3e27..2562fbe76e 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -104,6 +104,7 @@ ModUi/&EnableBarbarianBrutalStrike=Habilitar Golpe Brutal ModUi/&EnableBarbarianFightingStyle=Habilitar a escolha Estilo de luta no nível 2 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Habilitar o bônus e o debuff Ataque Reckless para terminar no início do próximo turno ModUi/&EnableBarbarianRegainOneRageAtShortRest=Habilitar recuperar um uso de Fúria durante um descanso curto no nível 7 +ModUi/&EnableBardCounterCharmAsReactionAtLevel7=Habilitar Contrafeitiço no nível 7 como uma reação em vez do nível 6 como uma ação ModUi/&EnableBardExpertiseOneLevelBefore=Habilitar Expertise nos níveis 2 e 9 em vez de 3 e 10 ModUi/&EnableBardHealingBalladOnLongRest=Habilitar College of Hope Healing Ballad em descanso longo ModUi/&EnableBardSuperiorInspirationAtLevel18=Habilita Inspiração Superior no nível 18 em vez de 20 e também concede duas recargas em vez de 1 diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 7bb446e36c..1a130b79d5 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -167,6 +167,7 @@ Feature/&PowerBarbarianBrutalStrikeStaggeringBlowTitle=Ошеломляющий Feature/&PowerBarbarianBrutalStrikeSunderingBlowDescription=Ваш удар оставляет брешь в обороне существа до начала вашего следующего хода. Следующий бросок атаки по цели, совершённый существом, отличным от вас, получает бонус 1d10 к броскам атаки и урона. Feature/&PowerBarbarianBrutalStrikeSunderingBlowTitle=Раскалывающий удар Feature/&PowerBarbarianBrutalStrikeTitle=Жестокий удар +Feature/&PowerBardCountercharmExtendedDescription=Вы можете использовать музыкальные ноты или слова силы, чтобы прерывать эффекты, влияющие на разум. Если вы или существо в радиусе 30 футов от вас проваливаете спасбросок против эффекта, который накладывает состояние «Зачарованный» или «Испуганный», вы можете совершить Реакцию, чтобы перебросить спасбросок, и новый бросок будет иметь Преимущество. Feature/&PowerHelpDescription=Вы можете помочь дружественному существу атаковать другое существо, находящееся в пределах 5 футов от вас. Вы совершаете финт, отвлекаете цель или каким-то другим образом делаете атаку союзника более эффективной. Если ваш союзник атакует цель до начала вашего следующего хода, первый бросок атаки совершается с преимуществом. Feature/&PowerHelpTitle=Помощь Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=Вы можете потратить 1 очко ци в свой ход, чтобы получить бонусным действием преимущества от действий Отход и Рывок одновременно. В этот ход дальность ваших прыжков удваивается. @@ -245,6 +246,11 @@ Reaction/&CastSpellInRetributionDescription={0} атакует {1}! В отве Reaction/&CastSpellInRetributionReactDescription=Нажмите, чтобы наложить {0}. Reaction/&CastSpellInRetributionReactTitle=Наложить заклинание Reaction/&CastSpellInRetributionTitle=Наложить заклинание реакцией +Reaction/&CustomReactionBardCounterCharmDescriptionAlly={0} провалил спасбросок против {2} {1}. Вы можете отреагировать, чтобы перебросить спасбросок с преимуществом. +Reaction/&CustomReactionBardCounterCharmDescriptionSelf={0} провалил спасбросок против {2} {1} и может отреагировать, чтобы перебросить спасбросок с преимуществом. +Reaction/&CustomReactionBardCounterCharmReactDescription=Перебросьте сейв с преимуществом. +Reaction/&CustomReactionBardCounterCharmReactTitle=Контрчарм +Reaction/&CustomReactionBardCounterCharmTitle=Контрчарм Reaction/&CustomReactionMagicalGuidanceCheckDescription=Вы провалили проверку. Вы можете потратить 1 единичу чародейства, чтобы перебросить d20 и заменить результат броска проверки. Reaction/&CustomReactionMagicalGuidanceCheckReactDescription=Бросьте d20, чтобы заменить результат броска проверки. Reaction/&CustomReactionMagicalGuidanceCheckReactTitle=Волшебное указание diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 95af0e99d0..d39e72fce0 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -104,6 +104,7 @@ ModUi/&EnableBarbarianBrutalStrike=Включить Жесток ModUi/&EnableBarbarianFightingStyle=Включить выбор Боевого стиля на уровне 2 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=Включить завершение эффектов Безрассудной атаки в начале следующего хода ModUi/&EnableBarbarianRegainOneRageAtShortRest=Включить на уровне 7 возможность восстанавливать один заряд Ярости за короткий отдых +ModUi/&EnableBardCounterCharmAsReactionAtLevel7=Включить Контрчарм на уровне 7 как реакцию вместо уровня 6 как действие ModUi/&EnableBardExpertiseOneLevelBefore=Включить Компетентность на уровнях 2 и 9 вместо 3 и 10 ModUi/&EnableBardHealingBalladOnLongRest=Включить Бардам коллегии надежды работу умения Целительная баллада при длительном отдыхе ModUi/&EnableBardSuperiorInspirationAtLevel18=Включить Превосходное вдохновение на уровне 18 вместо 20, а также давать 2 использования вместо 1 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 3f02f5b87e..387ac68361 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -167,6 +167,7 @@ Feature/&PowerBarbarianBrutalStrikeStaggeringBlowTitle=失衡殴击 Feature/&PowerBarbarianBrutalStrikeSunderingBlowDescription=你的打击会在该生物的防御中为盟友留下一个缺口,直到你的下一个回合开始。除你之外的生物对目标进行的下一次攻击检定获得 1d10 的攻击和伤害检定加值。 Feature/&PowerBarbarianBrutalStrikeSunderingBlowTitle=粉碎殴击 Feature/&PowerBarbarianBrutalStrikeTitle=凶蛮打击 +Feature/&PowerBardCountercharmExtendedDescription=你可以使用音符或充满力量的词语来破坏影响心灵的效果。如果你或你 30 英尺范围内的生物未能通过豁免检定来对抗施加魅惑或恐惧状态的效果,你可以做出反应来重新进行豁免检定,并且新的检定结果具有优势。 Feature/&PowerHelpDescription=你可以帮助友方生物攻击距离你 5 尺以内的生物。你佯攻、分散目标的注意力,或以其他方式联合起来使你的盟友的攻击更有效。如果你的盟友在你的下一轮之前攻击目标,则第一次攻击检定具有优势。 Feature/&PowerHelpTitle=帮助 Feature/&PowerMonkStepOfTheWindHeightenedMetabolismDescription=在你的回合中,你可以花费 1 点气以一个附赠动作的形式来执行撤离和疾走行动作,同时使你该回合内的跳跃距离翻倍。 @@ -245,6 +246,11 @@ Reaction/&CastSpellInRetributionDescription={0} 正在攻击 {1}!你可以施 Reaction/&CastSpellInRetributionReactDescription=单击以施放 {0}。 Reaction/&CastSpellInRetributionReactTitle=施法 Reaction/&CastSpellInRetributionTitle=施放反应法术 +Reaction/&CustomReactionBardCounterCharmDescriptionAlly={0> 未能成功对抗 {1>{2>。您可以做出反应,重新进行具有优势的豁免。 +Reaction/&CustomReactionBardCounterCharmDescriptionSelf={0 在对抗 {1{2 时未能成功进行豁免检定,可以做出反应,重新进行豁免检定并获得优势。 +Reaction/&CustomReactionBardCounterCharmReactDescription=重新掷骰子以获得优势。 +Reaction/&CustomReactionBardCounterCharmReactTitle=反制咒语 +Reaction/&CustomReactionBardCounterCharmTitle=反制咒语 Reaction/&CustomReactionMagicalGuidanceCheckDescription=你未能通过检定掷骰。你可以花费 1 个术法点来投掷 d20 并替换检定掷骰。 Reaction/&CustomReactionMagicalGuidanceCheckReactDescription=投掷 d20 以替换检定掷骰。 Reaction/&CustomReactionMagicalGuidanceCheckReactTitle=魔法指引 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index aa7bd2f4ec..6946427885 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -104,6 +104,7 @@ ModUi/&EnableBarbarianBrutalStrike=在 9、13 和 17 级启用残 ModUi/&EnableBarbarianFightingStyle=在第 2 级启用战斗风格选择 ModUi/&EnableBarbarianRecklessSameBuffDebuffDuration=启用鲁莽攻击增益效果和减益效果,在下一回合开始时结束 ModUi/&EnableBarbarianRegainOneRageAtShortRest=在第 7 级时,允许在短暂休息后恢复一次怒气 +ModUi/&EnableBardCounterCharmAsReactionAtLevel7=在 7 级启用 Countercharm 作为反应,而不是在 6 级启用作为动作 ModUi/&EnableBardExpertiseOneLevelBefore=在 2 级和 9 级(而不是 3 级和 10 级)启用专业知识 ModUi/&EnableBardHealingBalladOnLongRest=长时间休息时启用希望学院 治愈之歌 ModUi/&EnableBardSuperiorInspirationAtLevel18=在 18 级(而非 20 级)启用卓越灵感,并且授予 2 次充能(而非 1 次) From a0dea6833b256174711b7cf2daaea1fde0d3c7c6 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 5 Nov 2024 15:09:29 -0800 Subject: [PATCH 71/85] prefer vanilla SavingThrowAffinityAdvantageToAll --- SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs | 6 ++++++ .../Models/Level20SubclassesContext.cs | 9 +-------- .../Subclasses/MartialRoyalKnight.cs | 8 +------- SolastaUnfinishedBusiness/Subclasses/OathOfHatred.cs | 8 +------- 4 files changed, 9 insertions(+), 22 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 0a8b38b9ac..0bbdce61f8 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -1815,6 +1815,9 @@ internal static class FeatureDefinitionPointPools internal static class FeatureDefinitionPowers { + internal static FeatureDefinitionPower PowerBardCountercharm { get; } = + GetDefinition("PowerBardCountercharm"); + internal static FeatureDefinitionPower PowerTraditionShockArcanistGreaterArcaneShock { get; } = GetDefinition("PowerTraditionShockArcanistGreaterArcaneShock"); @@ -2454,6 +2457,9 @@ internal static class FeatureDefinitionRestHealingModifiers internal static class FeatureDefinitionSavingThrowAffinitys { + internal static FeatureDefinitionSavingThrowAffinity SavingThrowAffinityAdvantageToAll { get; } = + GetDefinition("SavingThrowAffinityAdvantageToAll"); + internal static FeatureDefinitionSavingThrowAffinity SavingThrowAffinitySpellResistance { get; } = GetDefinition("SavingThrowAffinitySpellResistance"); diff --git a/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs b/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs index 4d441acede..12f6f6eaf8 100644 --- a/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs +++ b/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs @@ -463,14 +463,7 @@ private static void FighterLoad() .Create("ConditionMartialCommanderPeerlessCommanderSavings") .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionMagicallyArmored) .SetPossessive() - .AddFeatures( - FeatureDefinitionSavingThrowAffinityBuilder - .Create("SavingThrowAffinityMartialCommanderPeerlessCommander") - .SetGuiPresentation("ConditionMartialCommanderPeerlessCommanderSavings", Category.Condition, - Gui.NoLocalization) - .SetAffinities(CharacterSavingThrowAffinity.Advantage, false, - AttributeDefinitions.AbilityScoreNames) - .AddToDB()) + .SetFeatures(FeatureDefinitionSavingThrowAffinitys.SavingThrowAffinityAdvantageToAll) .SetSpecialInterruptions(ConditionInterruption.SavingThrow) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs b/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs index 53a7ebb108..86f29fa845 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs @@ -144,12 +144,6 @@ public MartialRoyalKnight() const string POWER_SPIRITED_SURGE = $"Power{Name}SpiritedSurge"; - var savingThrowAffinitySpiritedSurge = FeatureDefinitionSavingThrowAffinityBuilder - .Create($"SavingThrowAffinity{Name}SpiritedSurge") - .SetGuiPresentation(POWER_SPIRITED_SURGE, Category.Feature, Gui.NoLocalization) - .SetAffinities(CharacterSavingThrowAffinity.Advantage, false, AttributeDefinitions.AbilityScoreNames) - .AddToDB(); - var combatAffinitySpiritedSurge = FeatureDefinitionCombatAffinityBuilder .Create($"CombatAffinity{Name}SpiritedSurge") .SetGuiPresentation(POWER_SPIRITED_SURGE, Category.Feature, Gui.NoLocalization) @@ -169,7 +163,7 @@ public MartialRoyalKnight() FeatureDefinitionAdditionalActions.AdditionalActionSurgedMain, abilityCheckAffinitySpiritedSurge, combatAffinitySpiritedSurge, - savingThrowAffinitySpiritedSurge) + FeatureDefinitionSavingThrowAffinitys.SavingThrowAffinityAdvantageToAll) .AddToDB(); var powerSpiritedSurge = FeatureDefinitionPowerBuilder diff --git a/SolastaUnfinishedBusiness/Subclasses/OathOfHatred.cs b/SolastaUnfinishedBusiness/Subclasses/OathOfHatred.cs index 5b1126ed38..5faa624584 100644 --- a/SolastaUnfinishedBusiness/Subclasses/OathOfHatred.cs +++ b/SolastaUnfinishedBusiness/Subclasses/OathOfHatred.cs @@ -146,17 +146,11 @@ public OathOfHatred() // Level 20 // - var savingThrowAffinityHatredArdentHate = FeatureDefinitionSavingThrowAffinityBuilder - .Create("SavingThrowAffinityHatredArdentHate") - .SetGuiPresentation("PowerHatredArdentHate", Category.Feature) - .SetAffinities(CharacterSavingThrowAffinity.Advantage, false, AttributeDefinitions.AbilityScoreNames) - .AddToDB(); - var conditionHatredArdentHate = ConditionDefinitionBuilder .Create("ConditionHatredArdentHate") .SetGuiPresentation(Category.Condition, ConditionDispellingEvilAndGood) .SetPossessive() - .AddFeatures(savingThrowAffinityHatredArdentHate) + .AddFeatures(FeatureDefinitionSavingThrowAffinitys.SavingThrowAffinityAdvantageToAll) .AddToDB(); var powerHatredArdentHate = FeatureDefinitionPowerBuilder From 28a23622aba896f0f910b70ea26d3abefe37b053 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 5 Nov 2024 15:10:02 -0800 Subject: [PATCH 72/85] fix cantrips custom pools on level up --- .../Behaviors/ModifyPowerVisibility.cs | 11 ++--------- .../Patches/CharacterBuildingManagerPatcher.cs | 17 +++++++++++++++-- .../Subclasses/DomainNature.cs | 10 ---------- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/ModifyPowerVisibility.cs b/SolastaUnfinishedBusiness/Behaviors/ModifyPowerVisibility.cs index 8260f87b5e..c6c717c239 100644 --- a/SolastaUnfinishedBusiness/Behaviors/ModifyPowerVisibility.cs +++ b/SolastaUnfinishedBusiness/Behaviors/ModifyPowerVisibility.cs @@ -9,7 +9,7 @@ internal delegate bool IsPowerVisibleHandler( FeatureDefinitionPower power, ActionType actionType); -internal class ModifyPowerVisibility +internal class ModifyPowerVisibility(IsPowerVisibleHandler handler) { internal static readonly ModifyPowerVisibility Default = new((_, power, actionType) => { @@ -33,16 +33,9 @@ internal class ModifyPowerVisibility internal static readonly ModifyPowerVisibility Visible = new((_, _, _) => true); internal static readonly ModifyPowerVisibility NotInCombat = new((_, _, _) => Gui.Battle == null); - private readonly IsPowerVisibleHandler _handler; - - protected ModifyPowerVisibility(IsPowerVisibleHandler handler) - { - _handler = handler; - } - internal bool IsVisible(RulesetCharacter character, FeatureDefinitionPower power, ActionType actionType) { - return _handler(character, power, actionType); + return handler(character, power, actionType); } internal static bool IsPowerHidden(RulesetCharacter character, RulesetUsablePower power, ActionType actionType) diff --git a/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs index 843f4ae5cf..86544698b3 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs @@ -510,11 +510,24 @@ public static bool Prefix([NotNull] RulesetCharacterHero hero) [UsedImplicitly] public static class UnassignLastSubclass_Patch { + private static void ResetCantripsPool(RulesetCharacterHero hero, string poolName) + { + var buildingData = hero.GetHeroBuildingData(); + + if (buildingData.PointPoolStacks.TryGetValue(HeroDefinitions.PointsPoolType.Cantrip, out var pointPool)) + { + pointPool.ActivePools.Remove(poolName); + } + } + [UsedImplicitly] public static bool Prefix([NotNull] RulesetCharacterHero hero) { - //PATCH: avoid Domain Nature to break level up with the cantrip it gets - DomainNature.ResetCantripSubclassPool(hero); + //PATCH: avoid Druid Primal Order to break level up with the cantrip pool it gets + ResetCantripsPool(hero, $"{AttributeDefinitions.TagClass}PrimalOrder"); + + //PATCH: avoid Domain Nature to break level up with the cantrip pool it gets + ResetCantripsPool(hero, $"{AttributeDefinitions.TagSubclass}Cleric1DomainNatureDomainNature"); //PATCH: un-captures the desired subclass LevelUpHelper.SetSelectedSubclass(hero, null); diff --git a/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs b/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs index 86ab301b49..4d64c0c1c2 100644 --- a/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs +++ b/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs @@ -260,16 +260,6 @@ public DomainNature() internal override DeityDefinition DeityDefinition => DeityDefinitions.Maraike; - internal static void ResetCantripSubclassPool(RulesetCharacterHero hero) - { - var buildingData = hero.GetHeroBuildingData(); - - if (buildingData.PointPoolStacks.TryGetValue(HeroDefinitions.PointsPoolType.Cantrip, out var pointPool)) - { - pointPool.ActivePools.Remove(AcquiredCantripsPoolName); - } - } - private sealed class CustomBehaviorDampenElements(ConditionDefinition conditionDampenElements) : IMagicEffectBeforeHitConfirmedOnMe, ITryAlterOutcomeAttack { From 137d467e7b9789049c440ebde9c57782d9a3ece2 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 5 Nov 2024 15:11:05 -0800 Subject: [PATCH 73/85] add EnableBardCounterCharmAsReactionAtLevel7 --- .../Displays/ClassesDisplay.cs | 7 ++ .../Displays/GeneralDisplay.cs | 7 ++ .../Models/Tabletop2024Context.cs | 106 ++++++++++++++++++ SolastaUnfinishedBusiness/Settings.cs | 1 + 4 files changed, 121 insertions(+) diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index d994f9a90f..743e94b4ae 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -33,6 +33,13 @@ internal static void DisplayClasses() Tabletop2024Context.SwitchOneDndChangeBardicInspirationDurationToOneHour(); } + toggle = Main.Settings.EnableBardCounterCharmAsReactionAtLevel7; + if (UI.Toggle(Gui.Localize("ModUi/&EnableBardCounterCharmAsReactionAtLevel7"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableBardCounterCharmAsReactionAtLevel7 = toggle; + Tabletop2024Context.SwitchOneDndEnableBardCounterCharmAsReactionAtLevel7(); + } + toggle = Main.Settings.EnableBardExpertiseOneLevelBefore; if (UI.Toggle(Gui.Localize("ModUi/&EnableBardExpertiseOneLevelBefore"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index ca0f4eb836..f0bd725b75 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -260,6 +260,13 @@ private static void DisplayOneDnd() Tabletop2024Context.SwitchOneDndChangeBardicInspirationDurationToOneHour(); } + toggle = Main.Settings.EnableBardCounterCharmAsReactionAtLevel7; + if (UI.Toggle(Gui.Localize("ModUi/&EnableBardCounterCharmAsReactionAtLevel7"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableBardCounterCharmAsReactionAtLevel7 = toggle; + Tabletop2024Context.SwitchOneDndEnableBardCounterCharmAsReactionAtLevel7(); + } + toggle = Main.Settings.EnableBardExpertiseOneLevelBefore; if (UI.Toggle(Gui.Localize("ModUi/&EnableBardExpertiseOneLevelBefore"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 97158bb500..6fded535b9 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -192,6 +192,14 @@ internal static class Tabletop2024Context .SetGrantedFeature(FeatureSetPactTome.FeatureSet[0]) // grant pool directly instead of feature set .AddToDB(); + private static readonly ConditionDefinition ConditionSavingThrowAdvantage = ConditionDefinitionBuilder + .Create("ConditionSavingThrowAdvantage") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .SetFeatures(FeatureDefinitionSavingThrowAffinitys.SavingThrowAffinityAdvantageToAll) + .SetSpecialInterruptions(ConditionInterruption.SavingThrow) + .AddToDB(); + internal static void LateLoad() { BuildBarbarianBrutalStrike(); @@ -199,6 +207,7 @@ internal static void LateLoad() BuildRogueCunningStrike(); LoadMonkHeightenedMetabolism(); LoadSecondWindToUseOneDndUsagesProgression(); + LoadOneDndEnableBardCounterCharmAsReactionAtLevel7(); SwitchBarbarianBrutalCritical(); SwitchBarbarianBrutalStrike(); SwitchBarbarianRecklessSameBuffDebuffDuration(); @@ -213,6 +222,7 @@ internal static void LateLoad() SwitchMonkHeightenedMetabolism(); SwitchMonkSuperiorDefenseToReplaceEmptyBody(); SwitchOneDndChangeBardicInspirationDurationToOneHour(); + SwitchOneDndEnableBardCounterCharmAsReactionAtLevel7(); SwitchOneDndEnableBardExpertiseOneLevelBefore(); SwitchOneDndEnableBardSuperiorInspirationAtLevel18(); SwitchOneDndEnableBardWordsOfCreationAtLevel20(); @@ -652,6 +662,32 @@ internal static void SwitchOneDndPaladinLayOnHandAsBonusAction() : ActivationTime.Action; } + private static void LoadOneDndEnableBardCounterCharmAsReactionAtLevel7() + { + PowerBardCountercharm.AddCustomSubFeatures( + new ModifyPowerVisibility((_, _, _) => !Main.Settings.EnableBardCounterCharmAsReactionAtLevel7), + new TryAlterOutcomeSavingThrowBardCounterCharm()); + } + + internal static void SwitchOneDndEnableBardCounterCharmAsReactionAtLevel7() + { + var level = Main.Settings.EnableBardCounterCharmAsReactionAtLevel7 ? 7 : 6; + + Bard.FeatureUnlocks.FirstOrDefault(x => x.FeatureDefinition == PowerBardCountercharm)!.level = level; + if (Main.Settings.EnableBardExpertiseOneLevelBefore) + { + PowerBardCountercharm.GuiPresentation.description = "Feature/&PowerBardCountercharmExtendedDescription"; + PowerBardCountercharm.activationTime = ActivationTime.NoCost; + } + else + { + PowerBardCountercharm.GuiPresentation.description = "Feature/&PowerBardCountercharmDescription"; + PowerBardCountercharm.activationTime = ActivationTime.Action; + } + + Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + internal static void SwitchOneDndEnableBardExpertiseOneLevelBefore() { var level = Main.Settings.EnableBardExpertiseOneLevelBefore ? 2 : 3; @@ -900,6 +936,76 @@ internal static void SwitchOneDndWarlockInvocationsProgression() Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } + private sealed class TryAlterOutcomeSavingThrowBardCounterCharm : ITryAlterOutcomeSavingThrow + { + public IEnumerator OnTryAlterOutcomeSavingThrow( + GameLocationBattleManager battleManager, + GameLocationCharacter attacker, + GameLocationCharacter defender, + GameLocationCharacter helper, + SavingThrowData savingThrowData, + bool hasHitVisual) + { + if (!Main.Settings.EnableBardCounterCharmAsReactionAtLevel7) + { + yield break; + } + + if (savingThrowData.SaveOutcome != RollOutcome.Success && + savingThrowData.EffectDescription.EffectForms.Any(x => + x.HasSavingThrow && + x.FormType == EffectForm.EffectFormType.Condition && + (x.ConditionForm.ConditionDefinition.IsSubtypeOf(ConditionDefinitions.ConditionCharmed.Name) || + x.ConditionForm.ConditionDefinition.IsSubtypeOf(ConditionDefinitions.ConditionFrightened.Name))) && + helper.CanReact() && + helper.CanPerceiveTarget(defender)) + { + yield return helper.MyReactToDoNothing( + ExtraActionId.DoNothingReaction, + defender, + "BardCounterCharm", + FormatReactionDescription(savingThrowData.Title, attacker, defender, helper), + ReactionValidated); + } + + yield break; + + void ReactionValidated() + { + var rulesetDefender = defender.RulesetCharacter; + + rulesetDefender.InflictCondition( + ConditionSavingThrowAdvantage.Name, + DurationType.Round, + 1, + TurnOccurenceType.StartOfTurn, + AttributeDefinitions.TagEffect, + rulesetDefender.guid, + rulesetDefender.CurrentFaction.Name, + 1, + ConditionSavingThrowAdvantage.Name, + 0, + 0, + 0); + + TryAlterOutcomeSavingThrow.TryRerollSavingThrow(attacker, defender, savingThrowData, hasHitVisual); + } + } + + private static string FormatReactionDescription( + string sourceTitle, + [CanBeNull] GameLocationCharacter attacker, + GameLocationCharacter defender, + GameLocationCharacter helper) + { + var text = defender == helper ? "Self" : "Ally"; + + return $"CustomReactionBardCounterCharmDescription{text}" + .Formatted(Category.Reaction, defender.Name, attacker?.Name ?? ReactionRequestCustom.EnvTitle, + sourceTitle); + } + } + private sealed class ModifyAbilityCheckDruidPrimalOrder : IModifyAbilityCheck { public void MinRoll( diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index e23b157b7b..be14b263d4 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -260,6 +260,7 @@ public class Settings : UnityModManager.ModSettings public bool GrantScimitarSpecializationToBardRogue { get; set; } public bool ChangeBardicInspirationDurationToOneHour { get; set; } + public bool EnableBardCounterCharmAsReactionAtLevel7 { get; set; } public bool EnableBardExpertiseOneLevelBefore { get; set; } public bool EnableBardSuperiorInspirationAtLevel18 { get; set; } public bool EnableBardWordsOfCreationAtLevel20 { get; set; } From 3ff375c2adaf1846cfb5cc56cf4b24e5fbb61d62 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 5 Nov 2024 16:09:17 -0800 Subject: [PATCH 74/85] add additional tweaks to rogue 2024 --- .../Api/DatabaseHelper-RELEASE.cs | 3 +++ .../Displays/ClassesDisplay.cs | 7 +++++++ .../Displays/GeneralDisplay.cs | 7 +++++++ .../Models/Level20Context.cs | 10 +++------- .../Models/Tabletop2024Context.cs | 15 +++++++++++++++ SolastaUnfinishedBusiness/Settings.cs | 1 + .../Translations/de/Level20-de.txt | 6 +++--- .../Translations/de/Others-de.txt | 1 + .../Translations/de/Settings-de.txt | 1 + .../Translations/en/Level20-en.txt | 6 +++--- .../Translations/en/Others-en.txt | 1 + .../Translations/en/Settings-en.txt | 1 + .../Translations/es/Level20-es.txt | 6 +++--- .../Translations/es/Others-es.txt | 1 + .../Translations/es/Settings-es.txt | 1 + .../Translations/fr/Level20-fr.txt | 6 +++--- .../Translations/fr/Others-fr.txt | 1 + .../Translations/fr/Settings-fr.txt | 1 + .../Translations/it/Level20-it.txt | 6 +++--- .../Translations/it/Others-it.txt | 1 + .../Translations/it/Settings-it.txt | 1 + .../Translations/ja/Level20-ja.txt | 6 +++--- .../Translations/ja/Others-ja.txt | 1 + .../Translations/ja/Settings-ja.txt | 1 + .../Translations/ko/Level20-ko.txt | 6 +++--- .../Translations/ko/Others-ko.txt | 1 + .../Translations/ko/Settings-ko.txt | 1 + .../Translations/pt-BR/Level20-pt-BR.txt | 6 +++--- .../Translations/pt-BR/Others-pt-BR.txt | 1 + .../Translations/pt-BR/Settings-pt-BR.txt | 1 + .../Translations/ru/Level20-ru.txt | 6 +++--- .../Translations/ru/Others-ru.txt | 1 + .../Translations/ru/Settings-ru.txt | 1 + .../Translations/zh-CN/Level20-zh-CN.txt | 6 +++--- .../Translations/zh-CN/Others-zh-CN.txt | 1 + .../Translations/zh-CN/Settings-zh-CN.txt | 1 + 36 files changed, 86 insertions(+), 37 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 0bbdce61f8..378e21567c 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -2283,6 +2283,9 @@ internal static class FeatureDefinitionPowers internal static class FeatureDefinitionProficiencys { + internal static FeatureDefinitionProficiency ProficiencyRogueSlipperyMind { get; } = + GetDefinition("ProficiencyRogueSlipperyMind"); + internal static FeatureDefinitionProficiency ProficiencyElfWeaponTraining { get; } = GetDefinition("ProficiencyElfWeaponTraining"); diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index 743e94b4ae..c783dd32fa 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -357,6 +357,13 @@ internal static void DisplayClasses() Tabletop2024Context.SwitchRogueBlindSense(); } + toggle = Main.Settings.EnableRogueSlipperyMind; + if (UI.Toggle(Gui.Localize("ModUi/&EnableRogueSlipperyMind"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableRogueSlipperyMind = toggle; + Tabletop2024Context.SwitchRogueSlipperyMind(); + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&SorcererTitle") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index f0bd725b75..f6db1dae6e 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -507,6 +507,13 @@ private static void DisplayOneDnd() Tabletop2024Context.SwitchRogueBlindSense(); } + toggle = Main.Settings.EnableRogueSlipperyMind; + if (UI.Toggle(Gui.Localize("ModUi/&EnableRogueSlipperyMind"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableRogueSlipperyMind = toggle; + Tabletop2024Context.SwitchRogueSlipperyMind(); + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&SorcererTitle") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Models/Level20Context.cs b/SolastaUnfinishedBusiness/Models/Level20Context.cs index b22707947c..754423d64f 100644 --- a/SolastaUnfinishedBusiness/Models/Level20Context.cs +++ b/SolastaUnfinishedBusiness/Models/Level20Context.cs @@ -1089,13 +1089,9 @@ public IEnumerator OnTryAlterOutcomeAttack( void ReactionValidated() { - var delta = -action.AttackSuccessDelta; - - action.AttackRollOutcome = RollOutcome.Success; - action.AttackSuccessDelta += delta; - action.AttackRoll += delta; - attackModifier.AttackRollModifier += delta; - attackModifier.AttacktoHitTrends.Add(new TrendInfo(delta, FeatureSourceType.Power, power.Name, power)); + action.AttackRoll = 20; + action.AttackRollOutcome = RollOutcome.CriticalSuccess; + action.AttackSuccessDelta = 0; } } } diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 6fded535b9..f0dd4e728a 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -2193,6 +2193,21 @@ private static void BuildRogueCunningStrike() .AddToDB(); } + internal static void SwitchRogueSlipperyMind() + { + ProficiencyRogueSlipperyMind.Proficiencies.Remove(AttributeDefinitions.Charisma); + + if (Main.Settings.EnableRogueSlipperyMind) + { + ProficiencyRogueSlipperyMind.Proficiencies.Add(AttributeDefinitions.Charisma); + ProficiencyRogueSlipperyMind.GuiPresentation.description = "Feature/&RogueSlipperyMindExtendedDescription"; + } + else + { + ProficiencyRogueSlipperyMind.GuiPresentation.description = "Feature/&RogueSlipperyMindDescription"; + } + } + internal static void SwitchRogueSteadyAim() { Rogue.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PowerFeatSteadyAim); diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index be14b263d4..99fc68a9e1 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -299,6 +299,7 @@ public class Settings : UnityModManager.ModSettings public bool ShowChannelDivinityOnPortrait { get; set; } public bool EnableRogueCunningStrike { get; set; } public bool EnableRogueFightingStyle { get; set; } + public bool EnableRogueSlipperyMind { get; set; } public bool EnableRogueSteadyAim { get; set; } public bool RemoveRogueBlindSense { get; set; } public bool EnableSorcererInnateSorceryAt1 { get; set; } diff --git a/SolastaUnfinishedBusiness/Translations/de/Level20-de.txt b/SolastaUnfinishedBusiness/Translations/de/Level20-de.txt index 3ee8766669..03d95393de 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Level20-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Level20-de.txt @@ -121,7 +121,7 @@ Feature/&PowerPaladinAuraOfCourage18Description=Gewährt Verbündeten im Umkreis Feature/&PowerPaladinAuraOfCourage18Title=Verbesserte Aura des Mutes Feature/&PowerPaladinAuraOfProtection18Description=Sie und Ihre Verbündeten im Umkreis von 30 Fuß können nicht erschreckt werden. Feature/&PowerPaladinAuraOfProtection18Title=Verbesserte Aura des Schutzes -Feature/&PowerRogueStrokeOfLuckDescription=Sie haben ein unheimliches Talent dafür, im entscheidenden Moment erfolgreich zu sein. Wenn Ihr Angriff ein Ziel in Reichweite verfehlt, können Sie den Fehlschlag in einen Treffer verwandeln. +Feature/&PowerRogueStrokeOfLuckDescription=Sie haben ein unheimliches Talent dafür, erfolgreich zu sein, wenn es darauf ankommt. Wenn Ihr Angriff ein Ziel in Reichweite verfehlt, können Sie den Fehlschlag in einen kritischen Treffer verwandeln. Sie können diese Funktion einmal pro kurzer oder langer Pause nutzen. Feature/&PowerRogueStrokeOfLuckTitle=Glückssträhne Feature/&PowerRoguishShadowcasterShadowFormDescription=Ab der 17. Stufe können Sie Ihre Bonusaktion nutzen, um sich für eine Minute auf magische Weise in eine Schattenform zu verwandeln. In dieser Form erhalten Sie die folgenden Vorteile:\n• Sie sind gegen alle Schadensarten außer Strahlungsschaden resistent.\n• Sie sind immun gegen schwieriges Gelände.\n• Sie provozieren keine Gelegenheitsangriffe. Feature/&PowerRoguishShadowcasterShadowFormTitle=Schattenform @@ -153,8 +153,8 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=Sie können 1 Ki zahlen, um 1 Reaction/&SpendPowerPhysicalPerfectionReactDescription=Sie können 1 Ki zahlen, um 1 Trefferpunkt wiederherzustellen. Reaction/&SpendPowerPhysicalPerfectionReactTitle=Heilen Reaction/&SpendPowerPhysicalPerfectionTitle=Körperliche Perfektion -Reaction/&SpendPowerRogueStrokeOfLuckDescription=Nutzen Sie Ihren Glücksfall, um diesen Angriff automatisch erfolgreich durchzuführen. -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Nutzen Sie Ihren Glücksfall, um diesen Angriff automatisch erfolgreich durchzuführen. +Reaction/&SpendPowerRogueStrokeOfLuckDescription=Nutzen Sie Ihren Glücksfall, um den Angriffswurf automatisch in einen kritischen Treffer zu verwandeln. +Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Nutzen Sie Ihren Glücksfall, um den Angriffswurf automatisch in einen kritischen Treffer zu verwandeln. Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=Gelingen Reaction/&SpendPowerRogueStrokeOfLuckTitle=Glückssträhne RestActivity/&RestActivitySignatureSpellsDescription=Sie können Ihre Signaturzauber einmal auswählen. diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 4774822219..29b6d618dd 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -200,6 +200,7 @@ Feature/&PowerTeleportSummonDescription=Sie können sich an jeden Ort im Umkreis Feature/&PowerTeleportSummonTitle=Teleport Feature/&PowerVanishSummonDescription=Sie können Ihre Beschwörung verschwinden lassen. Feature/&PowerVanishSummonTitle=Verschwinden +Feature/&RogueSlipperyMindExtendedDescription=Sie haben größere mentale Stärke erlangt. Sie erlangen Kompetenz bei Weisheits- und Charismarettungswürfen. Feature/&ToolGainChoicesPluralDescription=Wählen Sie {0} dieser Tools: {1} Feature/&ToolGainChoicesSingleDescription=Wählen Sie eines dieser Tools: {1} Feature/&VisionBlindsightDescription=Sie leiden an Blindsicht. diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 8fb814976f..7ca695cb1b 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -163,6 +163,7 @@ ModUi/&EnableRespecAction=Aktivieren Sie RESPEC nach der ModUi/&EnableRitualOnAllCasters=Aktivieren Sie das Wirken von Ritualen für alle Zauberer. ModUi/&EnableRogueCunningStrike=Aktiviere Cunning Strike und Devious Strike auf den Leveln 5 und 14 [du lässt 1 Schleichangriffswürfel für zusätzliche Treffereffekte weg] ModUi/&EnableRogueFightingStyle=Aktiviere die Auswahl Kampfstil auf Stufe 2. +ModUi/&EnableRogueSlipperyMind=Tauschen Sie Slippery Mind gegen die 5e 2024-Version aus [Sie erhalten neben Weisheit auch Kenntnisse in Charismarettungswürfen] ModUi/&EnableRogueSteadyAim=Aktivieren Sie Zielen ohne Unterbrechung auf Stufe 3 [Bonusaktion verschafft einen Vorteil bei Ihrem nächsten Angriffswurf in der aktuellen Runde, wenn Sie sich noch nicht bewegt haben] ModUi/&EnableRogueStrSaving=Aktivieren Sie Hoodlum DEX- oder STR-Modifikatoren bei Cunning/Devious Strike ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Aktivieren Sie Second Wind, um den Nutzungsfortschritt von 5e 2024 zu nutzen diff --git a/SolastaUnfinishedBusiness/Translations/en/Level20-en.txt b/SolastaUnfinishedBusiness/Translations/en/Level20-en.txt index bc10ffd78c..4c9c396ac4 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Level20-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Level20-en.txt @@ -121,7 +121,7 @@ Feature/&PowerPaladinAuraOfCourage18Description=Grant a saving throw bonus to al Feature/&PowerPaladinAuraOfCourage18Title=Improved Aura of Courage Feature/&PowerPaladinAuraOfProtection18Description=You and your allies within 30ft cannot be frightened. Feature/&PowerPaladinAuraOfProtection18Title=Improved Aura of Protection -Feature/&PowerRogueStrokeOfLuckDescription=You have an uncanny knack for succeeding when you need to. If your attack misses a target within range, you can turn the miss into a hit. +Feature/&PowerRogueStrokeOfLuckDescription=You have an uncanny knack for succeeding when you need to. If your attack misses a target within range, you can turn the miss into a critical hit. You can use this feature once per short or long rest. Feature/&PowerRogueStrokeOfLuckTitle=Stroke of Luck Feature/&PowerRoguishShadowcasterShadowFormDescription=Starting at 17th level, you can use your bonus action to magically transform yourself into a shadowy form for one minute. While in this form, you gain the following benefits:\n• You have resistance to all damage types except radiant.\n• You are immune to difficult terrains.\n• You don't provoke opportunity attacks. Feature/&PowerRoguishShadowcasterShadowFormTitle=Shadow Form @@ -153,8 +153,8 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=You can pay 1 Ki to restore 1 Reaction/&SpendPowerPhysicalPerfectionReactDescription=You can pay 1 Ki to restore 1 hit points. Reaction/&SpendPowerPhysicalPerfectionReactTitle=Heal Reaction/&SpendPowerPhysicalPerfectionTitle=Physical Perfection -Reaction/&SpendPowerRogueStrokeOfLuckDescription=Use your stroke of Luck to automatically succeed on this attack. -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Use your stroke of Luck to automatically succeed on this attack. +Reaction/&SpendPowerRogueStrokeOfLuckDescription=Use your stroke of Luck to automatically turn the attack roll into a critical hit. +Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Use your stroke of Luck to automatically turn the attack roll into a critical hit. Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=Succeed Reaction/&SpendPowerRogueStrokeOfLuckTitle=Stroke of Luck RestActivity/&RestActivitySignatureSpellsDescription=You can select your signature spells once. diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index ed385f734a..67212f6f0a 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -151,6 +151,7 @@ Feature/&InvocationPoolRangerTerrainTypeAffinityLearnTitle=Terrain Type Affinity Feature/&InvocationPoolSorcererDraconicChoiceLearnDescription=Select a Sorcerer draconic ancestry. Feature/&InvocationPoolSorcererDraconicChoiceLearnTitle=Draconic Ancestry Feature/&MagicAffinityPatronExpandedSpellsDescription={0}\n\n +Feature/&RogueSlipperyMindExtendedDescription=You have acquired greater mental strength. You gain proficiency in Wisdom and Charisma saving throws. Feature/&MonkAlternateUnarmoredMovementImprovedDescription=Starting at the 9th level, you gain the ability to move along vertical surfaces without falling. Feature/&MonkAlternateUnarmoredMovementImprovedTitle=Unarmored Movement - Improved Feature/&PointPoolWizardScholarDescription=While studying magic, you also specialized in an academic field of study. Choose one of the following skills in which you have proficiency: Arcana, History, Investigation, Medicine, Nature, or Religion. You have Expertise in the chosen skill. diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 0bb0e4ea31..e390630acf 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -165,6 +165,7 @@ ModUi/&EnableRogueCunningStrike=Enable Cunning Strike and ModUi/&EnableRogueFightingStyle=Enable Fighting Style choice at level 2 ModUi/&EnableRogueSteadyAim=Enable Steady Aim at level 3 [bonus action gives advantage on your next attack roll in the current turn if you haven't moved yet] ModUi/&EnableRogueStrSaving=Enable Hoodlum DEX or STR modifiers on Cunning/Devious Strike +ModUi/&EnableRogueSlipperyMind=Swap Slippery Mind with 5e 2024 version [you also gain proficiency in charisma saving throws in addition to wisdom] ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Enable Second Wind to use 5e 2024 usages progression ModUi/&EnableSignatureSpellsRelearn=Enable Signature Spells to be prepared every long rest [instead of once at level 20] ModUi/&EnableSorcererInnateSorceryAt1=Enable Innate Sorcery at level 1 diff --git a/SolastaUnfinishedBusiness/Translations/es/Level20-es.txt b/SolastaUnfinishedBusiness/Translations/es/Level20-es.txt index fa21e25230..e8f5eca7f1 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Level20-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Level20-es.txt @@ -121,7 +121,7 @@ Feature/&PowerPaladinAuraOfCourage18Description=Otorga una bonificación a la ti Feature/&PowerPaladinAuraOfCourage18Title=Aura de coraje mejorada Feature/&PowerPaladinAuraOfProtection18Description=Ni tú ni tus aliados que se encuentren a 30 pies de distancia podrán tener miedo. Feature/&PowerPaladinAuraOfProtection18Title=Aura de protección mejorada -Feature/&PowerRogueStrokeOfLuckDescription=Tienes una habilidad especial para tener éxito cuando lo necesitas. Si tu ataque no alcanza a un objetivo dentro del alcance, puedes convertir el error en un golpe. +Feature/&PowerRogueStrokeOfLuckDescription=Tienes una habilidad especial para triunfar cuando lo necesitas. Si tu ataque no alcanza a un objetivo dentro del alcance, puedes convertir el fallo en un golpe crítico. Puedes usar esta característica una vez por descanso corto o largo. Feature/&PowerRogueStrokeOfLuckTitle=Golpe de suerte Feature/&PowerRoguishShadowcasterShadowFormDescription=A partir del nivel 17, puedes usar tu acción adicional para transformarte mágicamente en una forma sombría durante un minuto. Mientras estés en esta forma, obtienes los siguientes beneficios:\n• Tienes resistencia a todos los tipos de daño excepto al radiante.\n• Eres inmune a los terrenos difíciles.\n• No provocas ataques de oportunidad. Feature/&PowerRoguishShadowcasterShadowFormTitle=Forma de sombra @@ -153,8 +153,8 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=Puedes pagar 1 Ki para restaur Reaction/&SpendPowerPhysicalPerfectionReactDescription=Puedes pagar 1 Ki para restaurar 1 punto de vida. Reaction/&SpendPowerPhysicalPerfectionReactTitle=Sanar Reaction/&SpendPowerPhysicalPerfectionTitle=Perfección física -Reaction/&SpendPowerRogueStrokeOfLuckDescription=Utiliza tu golpe de suerte para tener éxito automáticamente en este ataque. -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Utiliza tu golpe de suerte para tener éxito automáticamente en este ataque. +Reaction/&SpendPowerRogueStrokeOfLuckDescription=Usa tu golpe de suerte para convertir automáticamente la tirada de ataque en un golpe crítico. +Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Usa tu golpe de suerte para convertir automáticamente la tirada de ataque en un golpe crítico. Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=Tener éxito Reaction/&SpendPowerRogueStrokeOfLuckTitle=Golpe de suerte RestActivity/&RestActivitySignatureSpellsDescription=Puedes seleccionar tus hechizos característicos una vez. diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index 3bff974156..f3405ed4e9 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -200,6 +200,7 @@ Feature/&PowerTeleportSummonDescription=Puedes teletransportarte a cualquier ubi Feature/&PowerTeleportSummonTitle=Teletransportarse Feature/&PowerVanishSummonDescription=Puedes hacer que tu invocación desaparezca. Feature/&PowerVanishSummonTitle=Desaparecer +Feature/&RogueSlipperyMindExtendedDescription=Has adquirido mayor fuerza mental. Ganas competencia en tiradas de salvación de Sabiduría y Carisma. Feature/&ToolGainChoicesPluralDescription=Elija {0} de estas herramientas: {1} Feature/&ToolGainChoicesSingleDescription=Elija una de estas herramientas: {1} Feature/&VisionBlindsightDescription=Tienes visión ciega. diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 78e391ca04..4339ab411f 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -163,6 +163,7 @@ ModUi/&EnableRespecAction=Habilitar la acción RESPECT de ModUi/&EnableRitualOnAllCasters=Habilitar el lanzamiento de Ritual para todos los lanzadores ModUi/&EnableRogueCunningStrike=Habilita Golpe astuto y Golpe tortuoso en los niveles 5 y 14 [dejas de usar 1 dado de ataque furtivo para obtener efectos de golpe adicionales] ModUi/&EnableRogueFightingStyle=Habilitar la opción Estilo de lucha en el nivel 2 +ModUi/&EnableRogueSlipperyMind=Intercambia Mente resbaladiza con la versión 5e 2024 [además de sabiduría, también obtienes competencia en tiradas de salvación de carisma] ModUi/&EnableRogueSteadyAim=Habilita Apunta firme en el nivel 3 [la acción adicional otorga ventaja en tu próxima tirada de ataque en el turno actual si aún no te has movido] ModUi/&EnableRogueStrSaving=Habilitar los modificadores DEX o STR de Hoodlum en Golpe astuto/desviado ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Habilitar Second Wind para usar la progresión de usos de 5e 2024 diff --git a/SolastaUnfinishedBusiness/Translations/fr/Level20-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Level20-fr.txt index 07ab87c556..1593591201 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Level20-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Level20-fr.txt @@ -121,7 +121,7 @@ Feature/&PowerPaladinAuraOfCourage18Description=Accordez un bonus de jet de sauv Feature/&PowerPaladinAuraOfCourage18Title=Aura de courage améliorée Feature/&PowerPaladinAuraOfProtection18Description=Vous et vos alliés dans un rayon de 9 mètres ne pouvez pas être effrayés. Feature/&PowerPaladinAuraOfProtection18Title=Aura de protection améliorée -Feature/&PowerRogueStrokeOfLuckDescription=Vous avez un don incroyable pour réussir quand il le faut. Si votre attaque rate une cible à portée, vous pouvez transformer cet échec en coup sûr. +Feature/&PowerRogueStrokeOfLuckDescription=Vous avez un don incroyable pour réussir quand il le faut. Si votre attaque rate une cible à portée, vous pouvez transformer cet échec en coup critique. Vous pouvez utiliser cette fonction une fois par repos court ou long. Feature/&PowerRogueStrokeOfLuckTitle=Coup de chance Feature/&PowerRoguishShadowcasterShadowFormDescription=À partir du niveau 17, vous pouvez utiliser votre action bonus pour vous transformer magiquement en une forme ténébreuse pendant une minute. Sous cette forme, vous bénéficiez des avantages suivants :\n• Vous êtes résistant à tous les types de dégâts, sauf radiants.\n• Vous êtes immunisé contre les terrains difficiles.\n• Vous ne provoquez pas d'attaques d'opportunité. Feature/&PowerRoguishShadowcasterShadowFormTitle=Forme d'ombre @@ -153,8 +153,8 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=Vous pouvez payer 1 Ki pour re Reaction/&SpendPowerPhysicalPerfectionReactDescription=Vous pouvez payer 1 Ki pour restaurer 1 point de vie. Reaction/&SpendPowerPhysicalPerfectionReactTitle=Guérir Reaction/&SpendPowerPhysicalPerfectionTitle=Perfection physique -Reaction/&SpendPowerRogueStrokeOfLuckDescription=Utilisez votre coup de chance pour réussir automatiquement cette attaque. -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Utilisez votre coup de chance pour réussir automatiquement cette attaque. +Reaction/&SpendPowerRogueStrokeOfLuckDescription=Utilisez votre coup de chance pour transformer automatiquement le jet d'attaque en coup critique. +Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Utilisez votre coup de chance pour transformer automatiquement le jet d'attaque en coup critique. Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=Réussir Reaction/&SpendPowerRogueStrokeOfLuckTitle=Coup de chance RestActivity/&RestActivitySignatureSpellsDescription=Vous pouvez sélectionner vos sorts de signature une fois. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 5dd97df664..717d536f31 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -200,6 +200,7 @@ Feature/&PowerTeleportSummonDescription=Vous pouvez vous téléporter à n'impor Feature/&PowerTeleportSummonTitle=Téléportation Feature/&PowerVanishSummonDescription=Vous pouvez faire disparaître votre invocation. Feature/&PowerVanishSummonTitle=Disparaître +Feature/&RogueSlipperyMindExtendedDescription=Vous avez acquis une plus grande force mentale. Vous maîtrisez les jets de sauvegarde de Sagesse et de Charisme. Feature/&ToolGainChoicesPluralDescription=Choisissez {0} de ces outils : {1} Feature/&ToolGainChoicesSingleDescription=Choisissez l'un de ces outils : {1} Feature/&VisionBlindsightDescription=Vous avez la vision aveugle. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index ec0aa42480..2f1e838c81 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -163,6 +163,7 @@ ModUi/&EnableRespecAction=Activer l'action RESPEC après ModUi/&EnableRitualOnAllCasters=Activer le lancement de rituel sur tous les lanceurs de sorts ModUi/&EnableRogueCunningStrike=Activez Cunning Strike et Devious Strike aux niveaux 5 et 14 [vous renoncez à 1 dé d'attaque sournoise pour des effets de coup supplémentaires] ModUi/&EnableRogueFightingStyle=Activer le choix du Style de combat au niveau 2 +ModUi/&EnableRogueSlipperyMind=Échangez Slippery Mind avec la version 5e 2024 [vous obtenez également la maîtrise des jets de sauvegarde de charisme en plus de la sagesse] ModUi/&EnableRogueSteadyAim=Activez la Visée constante au niveau 3 [l'action bonus donne un avantage sur votre prochain jet d'attaque dans le tour en cours si vous n'avez pas encore bougé] ModUi/&EnableRogueStrSaving=Activer les modificateurs DEX ou STR de Hoodlum sur Cunning/Devious Strike ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Activez Second Wind pour utiliser la progression des utilisations 5e 2024 diff --git a/SolastaUnfinishedBusiness/Translations/it/Level20-it.txt b/SolastaUnfinishedBusiness/Translations/it/Level20-it.txt index 5ad808134d..c4ae8df7c0 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Level20-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Level20-it.txt @@ -121,7 +121,7 @@ Feature/&PowerPaladinAuraOfCourage18Description=Concedi un bonus al tiro salvezz Feature/&PowerPaladinAuraOfCourage18Title=Aura di coraggio migliorata Feature/&PowerPaladinAuraOfProtection18Description=Tu e i tuoi alleati entro 30 piedi non potete essere spaventati. Feature/&PowerPaladinAuraOfProtection18Title=Aura di protezione migliorata -Feature/&PowerRogueStrokeOfLuckDescription=Hai un talento straordinario per avere successo quando è necessario. Se il tuo attacco manca un bersaglio nel raggio d'azione, puoi trasformare il mancato attacco in un colpo a segno. +Feature/&PowerRogueStrokeOfLuckDescription=Hai un'abilità straordinaria per avere successo quando serve. Se il tuo attacco manca un bersaglio entro il raggio d'azione, puoi trasformare il colpo mancato in un colpo critico. Puoi usare questa caratteristica una volta per riposo breve o lungo. Feature/&PowerRogueStrokeOfLuckTitle=Colpo di fortuna Feature/&PowerRoguishShadowcasterShadowFormDescription=A partire dal 17° livello, puoi usare la tua azione bonus per trasformarti magicamente in una forma oscura per un minuto. Mentre sei in questa forma, ottieni i seguenti benefici:\n• Hai resistenza a tutti i tipi di danno tranne quello radiante.\n• Sei immune ai terreni difficili.\n• Non provochi attacchi di opportunità. Feature/&PowerRoguishShadowcasterShadowFormTitle=Forma d'ombra @@ -153,8 +153,8 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=Puoi pagare 1 Ki per ripristin Reaction/&SpendPowerPhysicalPerfectionReactDescription=Puoi pagare 1 Ki per ripristinare 1 punto ferita. Reaction/&SpendPowerPhysicalPerfectionReactTitle=Guarire Reaction/&SpendPowerPhysicalPerfectionTitle=Perfezione fisica -Reaction/&SpendPowerRogueStrokeOfLuckDescription=Usa il tuo colpo di fortuna per portare a termine automaticamente questo attacco. -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Usa il tuo colpo di fortuna per portare a termine automaticamente questo attacco. +Reaction/&SpendPowerRogueStrokeOfLuckDescription=Usa il tuo colpo di Fortuna per trasformare automaticamente il tiro d'attacco in un colpo critico. +Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Usa il tuo colpo di Fortuna per trasformare automaticamente il tiro d'attacco in un colpo critico. Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=Avere successo Reaction/&SpendPowerRogueStrokeOfLuckTitle=Colpo di fortuna RestActivity/&RestActivitySignatureSpellsDescription=Puoi selezionare i tuoi incantesimi distintivi una sola volta. diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 30c2d55ead..de546a6d78 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -200,6 +200,7 @@ Feature/&PowerTeleportSummonDescription=Puoi teletrasportarti in qualsiasi luogo Feature/&PowerTeleportSummonTitle=Teletrasporto Feature/&PowerVanishSummonDescription=Puoi far svanire la tua evocazione. Feature/&PowerVanishSummonTitle=Svanire +Feature/&RogueSlipperyMindExtendedDescription=Hai acquisito una maggiore forza mentale. Ottieni competenza nei tiri salvezza su Saggezza e Carisma. Feature/&ToolGainChoicesPluralDescription=Scegli {0} di questi strumenti: {1} Feature/&ToolGainChoicesSingleDescription=Scegli uno di questi strumenti: {1} Feature/&VisionBlindsightDescription=Hai la vista cieca. diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index d00b54faed..581865b058 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -163,6 +163,7 @@ ModUi/&EnableRespecAction=Abilita RESPEC dopo l'azione di ModUi/&EnableRitualOnAllCasters=Abilita il lancio di Rituale su tutti gli incantatori ModUi/&EnableRogueCunningStrike=Abilita Colpo astuto e Colpo subdolo ai livelli 5 e 14 [rinuncia a 1 dado di attacco furtivo per effetti di colpo aggiuntivi] ModUi/&EnableRogueFightingStyle=Abilita la scelta Stile di combattimento al livello 2 +ModUi/&EnableRogueSlipperyMind=Sostituisci Mente Sfuggente con la versione 5e 2024 [oltre alla saggezza, ottieni anche competenza nei tiri salvezza sul Carisma] ModUi/&EnableRogueSteadyAim=Abilita Mira Fissa al livello 3 [l'azione bonus fornisce vantaggio al tuo prossimo tiro di attacco nel turno corrente se non ti sei ancora mosso] ModUi/&EnableRogueStrSaving=Abilita i modificatori DEX o STR di Hoodlum su Colpo astuto/subdolo ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Abilita Second Wind per usare la progressione di utilizzo 5e 2024 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Level20-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Level20-ja.txt index ee910cc152..6b1eb06db7 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Level20-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Level20-ja.txt @@ -121,7 +121,7 @@ Feature/&PowerPaladinAuraOfCourage18Description=30フィート以内の味方に Feature/&PowerPaladinAuraOfCourage18Title=勇気のオーラの向上 Feature/&PowerPaladinAuraOfProtection18Description=あなたと 30 フィート以内の仲間は恐怖を感じません。 Feature/&PowerPaladinAuraOfProtection18Title=改良された保護のオーラ -Feature/&PowerRogueStrokeOfLuckDescription=あなたには、必要なときに成功する驚くべき才能があります。攻撃が範囲内のターゲットに当たらなかった場合、そのミスをヒットに変えることができます。 +Feature/&PowerRogueStrokeOfLuckDescription=あなたには、必要なときに成功する不思議な才能があります。攻撃が範囲内のターゲットを逃した場合、そのミスをクリティカル ヒットに変えることができます。この機能は、短い休憩または長い休憩ごとに 1 回使用できます。 Feature/&PowerRogueStrokeOfLuckTitle=幸運のストローク Feature/&PowerRoguishShadowcasterShadowFormDescription=17 レベルからは、ボーナス アクションを使用して、1 分間魔法のように自分自身を影の形に変えることができます。この形態にいる間、次の利点が得られます。\n• 放射を除くすべてのダメージ タイプに対する耐性があります。\n• 困難な地形に対して耐性があります。\n• 機会攻撃を誘発しません。 Feature/&PowerRoguishShadowcasterShadowFormTitle=シャドウフォーム @@ -153,8 +153,8 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=1 Ki を支払うと 1 ヒッ Reaction/&SpendPowerPhysicalPerfectionReactDescription=1 Ki を支払うと 1 ヒット ポイントを回復できます。 Reaction/&SpendPowerPhysicalPerfectionReactTitle=癒す Reaction/&SpendPowerPhysicalPerfectionTitle=肉体的な完璧さ -Reaction/&SpendPowerRogueStrokeOfLuckDescription=幸運を利用して、この攻撃を自動的に成功させます。 -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=幸運を利用して、この攻撃を自動的に成功させましょう。 +Reaction/&SpendPowerRogueStrokeOfLuckDescription=幸運を利用して、攻撃ロールを自動的にクリティカル ヒットに変えます。 +Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=幸運を利用して、攻撃ロールを自動的にクリティカル ヒットに変えます。 Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=成功する Reaction/&SpendPowerRogueStrokeOfLuckTitle=幸運のストローク RestActivity/&RestActivitySignatureSpellsDescription=シグネチャー呪文は 1 回選択できます。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index 49dfa2df4c..d2805ab341 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -200,6 +200,7 @@ Feature/&PowerTeleportSummonDescription=キャスターから 5 フィート以 Feature/&PowerTeleportSummonTitle=テレポート Feature/&PowerVanishSummonDescription=召喚を消滅させることができます。 Feature/&PowerVanishSummonTitle=消え去る +Feature/&RogueSlipperyMindExtendedDescription=あなたはより大きな精神力を獲得しました。あなたは知恵と魅力のセーヴィング スローに習熟しました。 Feature/&ToolGainChoicesPluralDescription=次のツールから {0} 個を選択してください: {1} Feature/&ToolGainChoicesSingleDescription=次のツールのいずれかを選択します: {1} Feature/&VisionBlindsightDescription=あなたは盲目です。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index eda39f70db..db8fa6342e 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -163,6 +163,7 @@ ModUi/&EnableRespecAction=休憩アクション後に RESPEC儀式の詠唱を有効にする ModUi/&EnableRogueCunningStrike=レベル 5 と 14 で 狡猾な一撃 と 邪悪な一撃 を有効にします [追加のヒット効果を得るために、スニーク アタック ダイスを 1 つ放棄します] ModUi/&EnableRogueFightingStyle=レベル2で戦闘スタイルの選択を有効にする +ModUi/&EnableRogueSlipperyMind=Slippery Mind を 5e 2024 版と入れ替えます [知恵に加えて、カリスマ セーヴィング スローの熟練度も得られます] ModUi/&EnableRogueSteadyAim=レベル 3 で Steady Aim を有効にします [ボーナス アクションにより、まだ移動していない場合、現在のターンの次の攻撃ロールにアドバンテージが与えられます] ModUi/&EnableRogueStrSaving=狡猾な一撃/悪巧みの一撃に悪党のDEXまたはSTR修飾子を有効にする ModUi/&EnableSecondWindToUseOneDndUsagesProgression=セカンドウィンドを有効にして、5e 2024の使用状況の進行を使用します diff --git a/SolastaUnfinishedBusiness/Translations/ko/Level20-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Level20-ko.txt index b1348e3f66..b96c62efbb 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Level20-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Level20-ko.txt @@ -121,7 +121,7 @@ Feature/&PowerPaladinAuraOfCourage18Description=30피트 내의 아군에게 내 Feature/&PowerPaladinAuraOfCourage18Title=향상된 용기의 오라 Feature/&PowerPaladinAuraOfProtection18Description=당신과 30피트 내의 당신의 동료들은 겁을 먹을 수 없습니다. Feature/&PowerPaladinAuraOfProtection18Title=향상된 보호의 오라 -Feature/&PowerRogueStrokeOfLuckDescription=당신은 필요할 때 성공할 수 있는 놀라운 재주를 가지고 있습니다. 공격이 범위 내의 대상을 놓치면 그 실패를 적중으로 바꿀 수 있습니다. +Feature/&PowerRogueStrokeOfLuckDescription=당신은 필요할 때 성공하는 기이한 재주를 가지고 있습니다. 당신의 공격이 범위 내의 타겟을 놓친다면, 당신은 그 놓친 것을 치명타로 바꿀 수 있습니다. 당신은 짧은 휴식이나 긴 휴식당 한 번 이 기능을 사용할 수 있습니다. Feature/&PowerRogueStrokeOfLuckTitle=행운의 뇌졸중 Feature/&PowerRoguishShadowcasterShadowFormDescription=17레벨부터 보너스 액션을 사용하여 1분 동안 마법처럼 자신을 그림자 형태로 변신시킬 수 있습니다. 이 형태에서는 다음과 같은 이점을 얻습니다.\n• 복사를 제외한 모든 피해 유형에 대한 저항력을 갖습니다.\n• 어려운 지형에 면역입니다.\n• 기회 공격을 유발하지 않습니다. Feature/&PowerRoguishShadowcasterShadowFormTitle=그림자 형태 @@ -153,8 +153,8 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=1Ki를 지불하면 1HP를 회 Reaction/&SpendPowerPhysicalPerfectionReactDescription=1Ki를 지불하면 1HP를 회복할 수 있습니다. Reaction/&SpendPowerPhysicalPerfectionReactTitle=치유하다 Reaction/&SpendPowerPhysicalPerfectionTitle=육체적 완벽함 -Reaction/&SpendPowerRogueStrokeOfLuckDescription=이 공격에 자동으로 성공하려면 행운을 사용하세요. -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=이 공격에 자동으로 성공하려면 행운을 사용하세요. +Reaction/&SpendPowerRogueStrokeOfLuckDescription=행운의 타격을 사용해 공격 굴림을 자동으로 치명타로 바꾸세요. +Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=행운의 타격을 사용해 공격 굴림을 자동으로 치명타로 바꾸세요. Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=성공하다 Reaction/&SpendPowerRogueStrokeOfLuckTitle=행운의 뇌졸중 RestActivity/&RestActivitySignatureSpellsDescription=시그니처 주문은 한 번만 선택할 수 있습니다. diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 2637fa5eb8..786a6ee753 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -200,6 +200,7 @@ Feature/&PowerTeleportSummonDescription=시전자로부터 5피트 이내의 어 Feature/&PowerTeleportSummonTitle=텔레포트 Feature/&PowerVanishSummonDescription=소환을 사라지게 할 수 있습니다. Feature/&PowerVanishSummonTitle=사라지다 +Feature/&RogueSlipperyMindExtendedDescription=당신은 더 큰 정신력을 얻었습니다. 당신은 지혜와 카리스마 세이빙 스로우에 능숙해집니다. Feature/&ToolGainChoicesPluralDescription=다음 도구 중 {0}개를 선택하세요: {1} Feature/&ToolGainChoicesSingleDescription=다음 도구 중 하나를 선택하십시오: {1} Feature/&VisionBlindsightDescription=당신은 시력이 없습니다. diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 0ab8445a87..6fccb35a2a 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -163,6 +163,7 @@ ModUi/&EnableRespecAction=휴식 동작 후 RESPEC 활성 ModUi/&EnableRitualOnAllCasters=모든 시전자에 의식 시전 활성화 ModUi/&EnableRogueCunningStrike=레벨 5와 14에서 교활한 일격과 사악한 일격을 활성화합니다. [추가 적중 효과를 위해 몰래 공격 주사위 1개를 포기합니다] ModUi/&EnableRogueFightingStyle=레벨 2에서 격투 스타일 선택 가능 +ModUi/&EnableRogueSlipperyMind=Slippery Mind를 5e 2024 버전과 교환하세요 [지혜 외에도 카리스마 세이빙 스로우에 능숙해짐] ModUi/&EnableRogueSteadyAim=레벨 3에서 안정적인 조준을 활성화합니다. [현재 턴에서 아직 이동하지 않았다면 다음 공격 굴림에 보너스 액션이 유리해집니다.] ModUi/&EnableRogueStrSaving=교활한/사악한 일격에 후드럼 DEX 또는 STR 수정치를 활성화합니다. ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Second Wind를 활성화하여 5e 2024 사용 진행을 사용하세요. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Level20-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Level20-pt-BR.txt index e9d35a9674..0ee562ac1f 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Level20-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Level20-pt-BR.txt @@ -121,7 +121,7 @@ Feature/&PowerPaladinAuraOfCourage18Description=Conceda um bônus de teste de re Feature/&PowerPaladinAuraOfCourage18Title=Aura de Coragem Melhorada Feature/&PowerPaladinAuraOfProtection18Description=Você e seus aliados em um raio de 9 metros não podem ser assustados. Feature/&PowerPaladinAuraOfProtection18Title=Aura de Proteção Aprimorada -Feature/&PowerRogueStrokeOfLuckDescription=Você tem um talento incrível para ter sucesso quando precisa. Se seu ataque errar um alvo dentro do alcance, você pode transformar o erro em um acerto. +Feature/&PowerRogueStrokeOfLuckDescription=Você tem um talento incrível para ter sucesso quando precisa. Se seu ataque errar um alvo dentro do alcance, você pode transformar o erro em um acerto crítico. Você pode usar esse recurso uma vez por descanso curto ou longo. Feature/&PowerRogueStrokeOfLuckTitle=Golpe de sorte Feature/&PowerRoguishShadowcasterShadowFormDescription=A partir do 17º nível, você pode usar sua ação bônus para se transformar magicamente em uma forma sombria por um minuto. Enquanto estiver nesta forma, você ganha os seguintes benefícios:\n• Você tem resistência a todos os tipos de dano, exceto radiante.\n• Você é imune a terrenos difíceis.\n• Você não provoca ataques de oportunidade. Feature/&PowerRoguishShadowcasterShadowFormTitle=Forma de Sombra @@ -153,8 +153,8 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=Você pode pagar 1 Ki para res Reaction/&SpendPowerPhysicalPerfectionReactDescription=Você pode pagar 1 Ki para restaurar 1 ponto de vida. Reaction/&SpendPowerPhysicalPerfectionReactTitle=Curar Reaction/&SpendPowerPhysicalPerfectionTitle=Perfeição Física -Reaction/&SpendPowerRogueStrokeOfLuckDescription=Use seu golpe de sorte para ter sucesso automático neste ataque. -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Use seu golpe de sorte para ter sucesso automático neste ataque. +Reaction/&SpendPowerRogueStrokeOfLuckDescription=Use seu golpe de sorte para transformar automaticamente a jogada de ataque em um acerto crítico. +Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Use seu golpe de sorte para transformar automaticamente a jogada de ataque em um acerto crítico. Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=Ter sucesso Reaction/&SpendPowerRogueStrokeOfLuckTitle=Golpe de sorte RestActivity/&RestActivitySignatureSpellsDescription=Você pode selecionar suas magias de assinatura uma vez. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 4f832ce213..4a30d62956 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -200,6 +200,7 @@ Feature/&PowerTeleportSummonDescription=Você pode se teletransportar para qualq Feature/&PowerTeleportSummonTitle=Teleporte Feature/&PowerVanishSummonDescription=Você pode fazer sua invocação desaparecer. Feature/&PowerVanishSummonTitle=Desaparecer +Feature/&RogueSlipperyMindExtendedDescription=Você adquiriu maior força mental. Você ganha proficiência em testes de resistência de Sabedoria e Carisma. Feature/&ToolGainChoicesPluralDescription=Escolha {0} destas ferramentas: {1} Feature/&ToolGainChoicesSingleDescription=Escolha uma destas ferramentas: {1} Feature/&VisionBlindsightDescription=Você tem visão cega. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 2562fbe76e..08004713fa 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -163,6 +163,7 @@ ModUi/&EnableRespecAction=Habilitar RESPEC após a ação ModUi/&EnableRitualOnAllCasters=Habilitar a conjuração de Ritual em todos os conjuradores ModUi/&EnableRogueCunningStrike=Habilite Golpe Astuto e Golpe Desonesto nos níveis 5 e 14 [você deixa de lado 1 dado de ataque furtivo para efeitos de acerto adicionais] ModUi/&EnableRogueFightingStyle=Habilitar a escolha Estilo de luta no nível 2 +ModUi/&EnableRogueSlipperyMind=Troque Mente Escorregadia pela versão 5e 2024 [você também ganha proficiência em testes de resistência de carisma, além de sabedoria] ModUi/&EnableRogueSteadyAim=Habilite Miração Firme no nível 3 [ação bônus dá vantagem na sua próxima jogada de ataque no turno atual se você ainda não se moveu] ModUi/&EnableRogueStrSaving=Habilitar modificadores de DEX ou FOR de Hoodlum em Cunning/Devious Strike ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Habilitar Second Wind para usar a progressão de usos do 5e 2024 diff --git a/SolastaUnfinishedBusiness/Translations/ru/Level20-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Level20-ru.txt index f808580779..40d44ef5ad 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Level20-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Level20-ru.txt @@ -121,7 +121,7 @@ Feature/&PowerPaladinAuraOfCourage18Description=Вы даёте бонус к с Feature/&PowerPaladinAuraOfCourage18Title=Улучшенная аура отваги Feature/&PowerPaladinAuraOfProtection18Description=Вы и ваши союзники в радиусе 30 футов не могут быть испуганы. Feature/&PowerPaladinAuraOfProtection18Title=Улучшенная аура защиты -Feature/&PowerRogueStrokeOfLuckDescription=Вы получаете сверхъестественный дар преуспевать, когда это нужнее всего. Если ваша атака промахивается по цели, находящейся в пределах досягаемости, вы можете изменить промах на попадание. +Feature/&PowerRogueStrokeOfLuckDescription=У вас есть сверхъестественный талант добиваться успеха, когда это необходимо. Если ваша атака не попадает по цели в радиусе действия, вы можете превратить промах в критический удар. Вы можете использовать эту функцию один раз за короткий или длительный отдых. Feature/&PowerRogueStrokeOfLuckTitle=Удача Feature/&PowerRoguishShadowcasterShadowFormDescription=Начиная с 17-го уровня, вы можете использовать бонусное действие, чтобы магическим образом превратиться в призрачную фигуру на одну минуту. В этой форме вы получаете следующие преимущества:\n• Вы обладаете сопротивлением всему урону, кроме урона излучением.\n• Вы не получаете штрафов от труднопроходимой местности.\n• Вы не провоцируете атак по возможности. Feature/&PowerRoguishShadowcasterShadowFormTitle=Форма тени @@ -153,8 +153,8 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=Вы можете потрат Reaction/&SpendPowerPhysicalPerfectionReactDescription=Вы можете потратить 1 очко ци, чтобы восстановить 1 хит. Reaction/&SpendPowerPhysicalPerfectionReactTitle=Лечение Reaction/&SpendPowerPhysicalPerfectionTitle=Физическое совершенство -Reaction/&SpendPowerRogueStrokeOfLuckDescription=Используйте Удачу, чтобы автоматически преуспеть в этой атаке. -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Используйте Удачу, чтобы автоматически преуспеть в этой атаке. +Reaction/&SpendPowerRogueStrokeOfLuckDescription=Воспользуйтесь своей удачей, чтобы автоматически превратить атаку в критический удар. +Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Воспользуйтесь своей удачей, чтобы автоматически превратить атаку в критический удар. Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=Преуспейте в атаке Reaction/&SpendPowerRogueStrokeOfLuckTitle=Удача RestActivity/&RestActivitySignatureSpellsDescription=Вы можете выбрать свои фирменные заклинания один раз. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 1a130b79d5..dbc819c4dc 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -200,6 +200,7 @@ Feature/&PowerTeleportSummonDescription=Вы можете телепортиро Feature/&PowerTeleportSummonTitle=Телепортироваться Feature/&PowerVanishSummonDescription=Вы можете заставить призванное существо исчезнуть. Feature/&PowerVanishSummonTitle=Исчезновение +Feature/&RogueSlipperyMindExtendedDescription=Вы приобрели большую ментальную силу. Вы получаете мастерство в спасбросках Мудрости и Харизмы. Feature/&ToolGainChoicesPluralDescription=Выберите {0} из этих инструментов: {1} Feature/&ToolGainChoicesSingleDescription=Выберите один из этих инструментов: {1} Feature/&VisionBlindsightDescription=Вы обладаете слепым зрением. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index d39e72fce0..7c3c400c76 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -163,6 +163,7 @@ ModUi/&EnableRespecAction=Включить возможность Ритуальное колдовство для всех заклинателей ModUi/&EnableRogueCunningStrike=Включить умения Хитрого удара и Коварного удара на уровнях 5 и 14 соответственно [вы отказываетесь от 1 кости скрытой атаки для применения дополнительных эффектов] ModUi/&EnableRogueFightingStyle=Включить выбор Боевого стиля на уровне 2 +ModUi/&EnableRogueSlipperyMind=Поменяйте Slippery Mind на версию 5e 2024 [вы также получаете мастерство в спасбросках харизмы в дополнение к мудрости] ModUi/&EnableRogueSteadyAim=Включить Точное прицеливание на уровне 3 [бонусным действием даёт преимущество на следующий бросок атаки в текущем ходу, если вы ещё не перемещались] ModUi/&EnableRogueStrSaving=Включить Головорезу использование модификаторов ЛОВ или СИЛ для Хитрого/Коварного удара ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Включить прогрессию использований Второго дыхания из 5e 2024 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Level20-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Level20-zh-CN.txt index a1e86e6cf4..36a4d64926 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Level20-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Level20-zh-CN.txt @@ -121,7 +121,7 @@ Feature/&PowerPaladinAuraOfCourage18Description=为 30 尺内的盟友提供豁 Feature/&PowerPaladinAuraOfCourage18Title=精通勇气灵光 Feature/&PowerPaladinAuraOfProtection18Description=你和你 30 尺内的盟友不会被恐慌。 Feature/&PowerPaladinAuraOfProtection18Title=精通保护灵光 -Feature/&PowerRogueStrokeOfLuckDescription=你有一种不可思议的技巧,可以让你取得成功。当你攻击一个攻击范围内的敌人失手时,你可以使用反应动作使该次攻击命中。 +Feature/&PowerRogueStrokeOfLuckDescription=当你需要时,你拥有一种不可思议的本领来取得成功。如果你的攻击未击中射程内的目标,你可以将未击中转化为致命一击。你可以在短休或长休期间使用此功能一次。 Feature/&PowerRogueStrokeOfLuckTitle=幸运之击 Feature/&PowerRoguishShadowcasterShadowFormDescription=从第 17 级开始,你可以使用你的附赠动作将你自己化为暗影形态,持续一分钟。在这种形态下,你获得如下增益:\n• 你对除了光耀外的所有类型的伤害都有抗性。\n• 你免疫困难地形。\n• 你不会引发借机攻击。 Feature/&PowerRoguishShadowcasterShadowFormTitle=暗影形态 @@ -153,8 +153,8 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=使用 1 点气回复 1 点生 Reaction/&SpendPowerPhysicalPerfectionReactDescription=使用 1 点气回复 1 点生命值。 Reaction/&SpendPowerPhysicalPerfectionReactTitle=治疗 Reaction/&SpendPowerPhysicalPerfectionTitle=超凡体能 -Reaction/&SpendPowerRogueStrokeOfLuckDescription=利用你的运气来自动成功完成这次攻击。 -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=使用你的幸运之击自动命中该攻击。 +Reaction/&SpendPowerRogueStrokeOfLuckDescription=使用你的运气来自动将攻击掷骰变成致命一击。 +Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=使用你的运气来自动将攻击掷骰变成致命一击。 Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=成功命中 Reaction/&SpendPowerRogueStrokeOfLuckTitle=幸运之击 RestActivity/&RestActivitySignatureSpellsDescription=你可以选择一次你的招牌法术。 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 387ac68361..17acaefddf 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -200,6 +200,7 @@ Feature/&PowerTeleportSummonDescription=你可以传送到施法者 5 尺以内 Feature/&PowerTeleportSummonTitle=传送 Feature/&PowerVanishSummonDescription=你可以让你的召唤物消失。 Feature/&PowerVanishSummonTitle=消失 +Feature/&RogueSlipperyMindExtendedDescription=你获得了更强大的精神力量。你获得了智慧和魅力豁免熟练度。 Feature/&ToolGainChoicesPluralDescription=从这些工具中选择 {0}:{1} Feature/&ToolGainChoicesSingleDescription=选择以下工具之一:{1} Feature/&VisionBlindsightDescription=你有盲视。 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 6946427885..1b817393f2 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -163,6 +163,7 @@ ModUi/&EnableRespecAction=休息操作后启用 RESPEC 仪式施法 ModUi/&EnableRogueCunningStrike=在 5 级和 14 级启用狡猾打击和阴险打击 [你放弃 1 个偷袭骰子以获得额外的命中效果] ModUi/&EnableRogueFightingStyle=在第 2 级启用战斗风格选择 +ModUi/&EnableRogueSlipperyMind=将 Slippery Mind 与 5e 2024 版本交换[除了智慧之外,你还获得了魅力豁免的熟练程度] ModUi/&EnableRogueSteadyAim=在 3 级时启用稳定瞄准 [如果您尚未移动,则奖励行动会在当前回合的下一次攻击掷骰中提供优势] ModUi/&EnableRogueStrSaving=在狡猾/卑鄙的打击上启用Hoodlum DEX 或 STR 修正 ModUi/&EnableSecondWindToUseOneDndUsagesProgression=启用 Second Wind 以使用 5e 2024 使用进度 From a18ddbb29a80b64ffc733452babea89bac2e1fe3 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 5 Nov 2024 16:32:35 -0800 Subject: [PATCH 75/85] add magical cunning 2024 skeleton --- .../Displays/ClassesDisplay.cs | 20 +++++++++----- .../Displays/GeneralDisplay.cs | 26 ++++++++++++++----- SolastaUnfinishedBusiness/Settings.cs | 3 ++- .../Translations/de/Settings-de.txt | 1 + .../Translations/en/Others-en.txt | 2 +- .../Translations/en/Settings-en.txt | 3 ++- .../Translations/es/Settings-es.txt | 1 + .../Translations/fr/Settings-fr.txt | 1 + .../Translations/it/Settings-it.txt | 1 + .../Translations/ja/Settings-ja.txt | 1 + .../Translations/ko/Settings-ko.txt | 1 + .../Translations/pt-BR/Settings-pt-BR.txt | 1 + .../Translations/ru/Settings-ru.txt | 1 + .../Translations/zh-CN/Settings-zh-CN.txt | 1 + 14 files changed, 46 insertions(+), 17 deletions(-) diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index c783dd32fa..1cf0dee835 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -401,13 +401,6 @@ internal static void DisplayClasses() UI.Label("" + Gui.Localize("Class/&WarlockTitle") + ":"); UI.Label(); - toggle = Main.Settings.EnableWarlockToLearnPatronAtLevel3; - if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockToLearnPatronAtLevel3"), ref toggle, UI.AutoWidth())) - { - Main.Settings.EnableWarlockToLearnPatronAtLevel3 = toggle; - Tabletop2024Context.SwitchOneDndWarlockPatronLearningLevel(); - } - toggle = Main.Settings.EnableWarlockToUseOneDndInvocationProgression; if (UI.Toggle(Gui.Localize("ModUi/&SwapWarlockToUseOneDndInvocationProgression"), ref toggle, UI.AutoWidth())) { @@ -415,6 +408,19 @@ internal static void DisplayClasses() Tabletop2024Context.SwitchOneDndWarlockInvocationsProgression(); } + toggle = Main.Settings.EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20; + if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20 = toggle; + } + + toggle = Main.Settings.EnableWarlockToLearnPatronAtLevel3; + if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockToLearnPatronAtLevel3"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableWarlockToLearnPatronAtLevel3 = toggle; + Tabletop2024Context.SwitchOneDndWarlockPatronLearningLevel(); + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&WizardTitle") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index f6db1dae6e..0e803973bc 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -529,19 +529,25 @@ private static void DisplayOneDnd() UI.Label("" + Gui.Localize("Class/&WarlockTitle") + ":"); UI.Label(); - toggle = Main.Settings.EnableWarlockToLearnPatronAtLevel3; - if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockToLearnPatronAtLevel3"), ref toggle, UI.AutoWidth())) - { - Main.Settings.EnableWarlockToLearnPatronAtLevel3 = toggle; - Tabletop2024Context.SwitchOneDndWarlockPatronLearningLevel(); - } - toggle = Main.Settings.EnableWarlockToUseOneDndInvocationProgression; if (UI.Toggle(Gui.Localize("ModUi/&SwapWarlockToUseOneDndInvocationProgression"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableWarlockToUseOneDndInvocationProgression = toggle; Tabletop2024Context.SwitchOneDndWarlockInvocationsProgression(); } + + toggle = Main.Settings.EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20; + if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20 = toggle; + } + + toggle = Main.Settings.EnableWarlockToLearnPatronAtLevel3; + if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockToLearnPatronAtLevel3"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableWarlockToLearnPatronAtLevel3 = toggle; + Tabletop2024Context.SwitchOneDndWarlockPatronLearningLevel(); + } UI.Label(); UI.Label("" + Gui.Localize("Class/&WizardTitle") + ":"); @@ -572,6 +578,12 @@ private static void DisplayOneDnd() FeatsContext.SwitchFirstLevelTotalFeats(); } + toggle = Main.Settings.RaceLightSensitivityApplyOutdoorsOnly; + if (UI.Toggle(Gui.Localize("ModUi/&RaceLightSensitivityApplyOutdoorsOnly"), ref toggle, UI.AutoWidth())) + { + Main.Settings.RaceLightSensitivityApplyOutdoorsOnly = toggle; + } + UI.Label(); UI.Label("" + Gui.Localize("ModUi/&DocsSpells") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 99fc68a9e1..1358a92678 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -306,8 +306,9 @@ public class Settings : UnityModManager.ModSettings public bool EnableSorcererMagicalGuidance { get; set; } public bool EnableSorcererQuickenedAction { get; set; } public bool HideQuickenedActionWhenMetamagicOff { get; set; } - public bool EnableWarlockToLearnPatronAtLevel3 { get; set; } public bool EnableWarlockToUseOneDndInvocationProgression { get; set; } + public bool EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20 { get; set; } + public bool EnableWarlockToLearnPatronAtLevel3 { get; set; } public bool EnableWizardToLearnScholarAtLevel2 { get; set; } public bool EnableWizardToLearnSchoolAtLevel3 { get; set; } public bool EnableSignatureSpellsRelearn { get; set; } diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 7ca695cb1b..6c9f2411a7 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -181,6 +181,7 @@ ModUi/&EnableUnarmedMainAttackAction=Aktiviere die Aktion Unbewaf ModUi/&EnableUpcastConjureElementalAndFey=Aktiviere Upcast von Elementar beschwören und Feenbeschwören ModUi/&EnableVariablePlaceholdersOnTexts=Aktivieren Sie variable Platzhalter in Beschreibungen [verwenden Sie {VARIABLE_NAME} als Platzhalter] ModUi/&EnableWarlockMagicalCunningAtLevel2=Aktiviere Magische List auf Stufe 2. +ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Aktiviere Magische List auf Level 2 und verbessere Eldritch Master auf 20. ModUi/&EnableWarlockToLearnPatronAtLevel3=Aktivieren Sie Patron auf Stufe 3 statt auf Stufe 1. ModUi/&EnableWizardToLearnScholarAtLevel2=Aktiviere Gelehrter auf Stufe 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Aktiviere die Schule der Magie auf Level 3 statt auf Level 2. diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 67212f6f0a..bbe94156b9 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -151,7 +151,6 @@ Feature/&InvocationPoolRangerTerrainTypeAffinityLearnTitle=Terrain Type Affinity Feature/&InvocationPoolSorcererDraconicChoiceLearnDescription=Select a Sorcerer draconic ancestry. Feature/&InvocationPoolSorcererDraconicChoiceLearnTitle=Draconic Ancestry Feature/&MagicAffinityPatronExpandedSpellsDescription={0}\n\n -Feature/&RogueSlipperyMindExtendedDescription=You have acquired greater mental strength. You gain proficiency in Wisdom and Charisma saving throws. Feature/&MonkAlternateUnarmoredMovementImprovedDescription=Starting at the 9th level, you gain the ability to move along vertical surfaces without falling. Feature/&MonkAlternateUnarmoredMovementImprovedTitle=Unarmored Movement - Improved Feature/&PointPoolWizardScholarDescription=While studying magic, you also specialized in an academic field of study. Choose one of the following skills in which you have proficiency: Arcana, History, Investigation, Medicine, Nature, or Religion. You have Expertise in the chosen skill. @@ -201,6 +200,7 @@ Feature/&PowerTeleportSummonDescription=You can teleport to any location within Feature/&PowerTeleportSummonTitle=Teleport Feature/&PowerVanishSummonDescription=You can make your summon vanish. Feature/&PowerVanishSummonTitle=Vanish +Feature/&RogueSlipperyMindExtendedDescription=You have acquired greater mental strength. You gain proficiency in Wisdom and Charisma saving throws. Feature/&ToolGainChoicesPluralDescription=Choose {0} of these tools: {1} Feature/&ToolGainChoicesSingleDescription=Choose one of these tools: {1} Feature/&VisionBlindsightDescription=You have blindsight. diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index e390630acf..e2404ed2c4 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -163,9 +163,9 @@ ModUi/&EnableRespecAction=Enable the RESPEC after rest ac ModUi/&EnableRitualOnAllCasters=Enable Ritual casting on all casters ModUi/&EnableRogueCunningStrike=Enable Cunning Strike and Devious Strike at levels 5 and 14 [you let forgo 1 sneak attack dice for additional hit effects] ModUi/&EnableRogueFightingStyle=Enable Fighting Style choice at level 2 +ModUi/&EnableRogueSlipperyMind=Swap Slippery Mind with 5e 2024 version [you also gain proficiency in charisma saving throws in addition to wisdom] ModUi/&EnableRogueSteadyAim=Enable Steady Aim at level 3 [bonus action gives advantage on your next attack roll in the current turn if you haven't moved yet] ModUi/&EnableRogueStrSaving=Enable Hoodlum DEX or STR modifiers on Cunning/Devious Strike -ModUi/&EnableRogueSlipperyMind=Swap Slippery Mind with 5e 2024 version [you also gain proficiency in charisma saving throws in addition to wisdom] ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Enable Second Wind to use 5e 2024 usages progression ModUi/&EnableSignatureSpellsRelearn=Enable Signature Spells to be prepared every long rest [instead of once at level 20] ModUi/&EnableSorcererInnateSorceryAt1=Enable Innate Sorcery at level 1 @@ -181,6 +181,7 @@ ModUi/&EnableUnarmedMainAttackAction=Enable the Unarmed AttackConjure Elemental and Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Enable variable placeholders on descriptions [use {VARIABLE_NAME} as placeholder] ModUi/&EnableWarlockMagicalCunningAtLevel2=Enable Magical Cunning at level 2 +ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Enable Magical Cunning at level 2 and improve Eldritch Master at 20 ModUi/&EnableWarlockToLearnPatronAtLevel3=Enable Patron at level 3 instead of 1 ModUi/&EnableWizardToLearnScholarAtLevel2=Enable Scholar at level 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Enable School of Magic at level 3 instead of 2 diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 4339ab411f..898957df02 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -181,6 +181,7 @@ ModUi/&EnableUnarmedMainAttackAction=Habilitar la acción Ataque ModUi/&EnableUpcastConjureElementalAndFey=Habilitar la conversión ascendente de Conjurar elemental y Conjurar feérico ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posición de variables en las descripciones [use {VARIABLE_NAME} como marcador de posición] ModUi/&EnableWarlockMagicalCunningAtLevel2=Habilita Astucia mágica en el nivel 2 +ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Habilita Astucia mágica en el nivel 2 y mejora Maestro sobrenatural en el nivel 20. ModUi/&EnableWarlockToLearnPatronAtLevel3=Habilitar Patron en el nivel 3 en lugar del 1 ModUi/&EnableWizardToLearnScholarAtLevel2=Habilitar Scholar en el nivel 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Habilitar Escuela de Magia en el nivel 3 en lugar de 2 diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 2f1e838c81..01ed1d113c 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -181,6 +181,7 @@ ModUi/&EnableUnarmedMainAttackAction=Activer l'action Attaque à ModUi/&EnableUpcastConjureElementalAndFey=Activer la conversion ascendante de Conjure Elemental et Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Activer les espaces réservés aux variables dans les descriptions [utiliser {VARIABLE_NAME} comme espace réservé] ModUi/&EnableWarlockMagicalCunningAtLevel2=Activer la ruse magique au niveau 2 +ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Activez la ruse magique au niveau 2 et améliorez le maître eldritch à 20 ModUi/&EnableWarlockToLearnPatronAtLevel3=Activer Patron au niveau 3 au lieu de 1 ModUi/&EnableWizardToLearnScholarAtLevel2=Activer Scholar au niveau 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Activer l'École de magie au niveau 3 au lieu de 2 diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 581865b058..6b9ebe6aa5 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -181,6 +181,7 @@ ModUi/&EnableUnarmedMainAttackAction=Abilita l'azione Attacco dis ModUi/&EnableUpcastConjureElementalAndFey=Abilita l'upcast di Evoca Elementale e Evoca Fata ModUi/&EnableVariablePlaceholdersOnTexts=Abilita segnaposto variabili nelle descrizioni [usa {VARIABLE_NAME} come segnaposto] ModUi/&EnableWarlockMagicalCunningAtLevel2=Abilita Astuzia magica al livello 2 +ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Abilita Astuzia magica al livello 2 e migliora Maestro eldritch al livello 20 ModUi/&EnableWarlockToLearnPatronAtLevel3=Abilita Patron al livello 3 invece che 1 ModUi/&EnableWizardToLearnScholarAtLevel2=Abilita Studioso al livello 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Abilita Scuola di Magia al livello 3 invece che 2 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index db8fa6342e..e26d7f1c65 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -181,6 +181,7 @@ ModUi/&EnableUnarmedMainAttackAction=素手攻撃アク ModUi/&EnableUpcastConjureElementalAndFey=エレメンタル召喚とフェイ召喚のアップキャストを有効にする ModUi/&EnableVariablePlaceholdersOnTexts=説明に変数プレースホルダーを有効にする [プレースホルダーとして {VARIABLE_NAME} を使用する] ModUi/&EnableWarlockMagicalCunningAtLevel2=レベル2で魔法の狡猾さを有効にする +ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=レベル2で魔法の狡猾さを有効にし、レベル20でエルドリッチマスターを向上させる ModUi/&EnableWarlockToLearnPatronAtLevel3=パトロンをレベル1ではなくレベル3で有効にする ModUi/&EnableWizardToLearnScholarAtLevel2=レベル2で学者を有効にする ModUi/&EnableWizardToLearnSchoolAtLevel3=魔法学校をレベル2ではなくレベル3で有効にする diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 6fccb35a2a..dcb03fdae7 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -181,6 +181,7 @@ ModUi/&EnableUnarmedMainAttackAction=비무장 공격 동 ModUi/&EnableUpcastConjureElementalAndFey=원소 소환과 요정 소환의 업캐스트를 활성화합니다. ModUi/&EnableVariablePlaceholdersOnTexts=설명에 변수 플레이스홀더 활성화 [플레이스홀더로 {VARIABLE_NAME} 사용] ModUi/&EnableWarlockMagicalCunningAtLevel2=레벨 2에서 마법의 교활함을 활성화합니다. +ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=레벨 2에서 마법의 교활함을 활성화하고 레벨 20에서 엘드리치 마스터를 향상시킵니다. ModUi/&EnableWarlockToLearnPatronAtLevel3=레벨 1 대신 레벨 3에서 후원자 활성화 ModUi/&EnableWizardToLearnScholarAtLevel2=레벨 2에서 학자 활성화 ModUi/&EnableWizardToLearnSchoolAtLevel3=마법 학교를 2레벨 대신 3레벨로 활성화합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 08004713fa..7d058c605e 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -181,6 +181,7 @@ ModUi/&EnableUnarmedMainAttackAction=Habilitar a ação Ataque De ModUi/&EnableUpcastConjureElementalAndFey=Habilitar upcast de Conjure Elemental e Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posição variáveis ​​em descrições [usar {VARIABLE_NAME} como marcador de posição] ModUi/&EnableWarlockMagicalCunningAtLevel2=Habilitar Astúcia Mágica no nível 2 +ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Habilite Astúcia Mágica no nível 2 e melhore Mestre Eldritch no nível 20 ModUi/&EnableWarlockToLearnPatronAtLevel3=Habilitar Patrono no nível 3 em vez de 1 ModUi/&EnableWizardToLearnScholarAtLevel2=Habilitar Scholar no nível 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Habilitar Escola de Magia no nível 3 em vez de 2 diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 7c3c400c76..846a4236b7 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -181,6 +181,7 @@ ModUi/&EnableUnarmedMainAttackAction=Включить действие Призыв элементаля и Призыв феи ModUi/&EnableVariablePlaceholdersOnTexts=Включить заглушки для переменных описаний [использовать {VARIABLE_NAME} в качесте заглушки] ModUi/&EnableWarlockMagicalCunningAtLevel2=Включить Магическую хитрость на уровне 2 +ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Включите Магическую хитрость на уровне 2 и улучшите Мастера потусторонних сил на 20-м уровне. ModUi/&EnableWarlockToLearnPatronAtLevel3=Включить выбор Покровителя на 3-м уровне вместо 1-го ModUi/&EnableWizardToLearnScholarAtLevel2=Включить Учёного на уровне 2 ModUi/&EnableWizardToLearnSchoolAtLevel3=Включить изучение Магических традиций на 3-м уровне вместо 2-го diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 1b817393f2..f7ad054bde 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -181,6 +181,7 @@ ModUi/&EnableUnarmedMainAttackAction=启用徒手攻击 ModUi/&EnableUpcastConjureElementalAndFey=启用 Conjure Elemental 和 Conjure Fey 的向上转换 ModUi/&EnableVariablePlaceholdersOnTexts=在描述中启用变量占位符[使用 {VARIABLE_NAME} 作为占位符] ModUi/&EnableWarlockMagicalCunningAtLevel2=在第 2 级启用魔法狡猾 +ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=在 2 级启用魔法狡猾并在 20 级提升神秘大师 ModUi/&EnableWarlockToLearnPatronAtLevel3=在 3 级(而非 1 级)启用 Patron ModUi/&EnableWizardToLearnScholarAtLevel2=启用 2 级 Scholar ModUi/&EnableWizardToLearnSchoolAtLevel3=在 3 级(而非 2 级)启用魔法学校 From aa7962f39b1310cec41f557b6be88ca0acd7127a Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 5 Nov 2024 18:55:35 -0800 Subject: [PATCH 76/85] add magical cunning behaviors --- Documentation/Classes.md | 2 +- .../ChangelogHistory.txt | 4 +- .../Displays/ClassesDisplay.cs | 4 +- .../Displays/GeneralDisplay.cs | 6 +- .../Models/Level20Context.cs | 14 ++-- .../Models/Tabletop2024Context.cs | 80 +++++++++++++++++++ .../Translations/de/Others-de.txt | 6 ++ .../Translations/en/Others-en.txt | 6 ++ .../Translations/es/Others-es.txt | 6 ++ .../Translations/fr/Others-fr.txt | 6 ++ .../Translations/it/Others-it.txt | 6 ++ .../Translations/ja/Others-ja.txt | 6 ++ .../Translations/ko/Others-ko.txt | 6 ++ .../Translations/pt-BR/Others-pt-BR.txt | 6 ++ .../Translations/ru/Others-ru.txt | 6 ++ .../Translations/zh-CN/Others-zh-CN.txt | 6 ++ 16 files changed, 157 insertions(+), 13 deletions(-) diff --git a/Documentation/Classes.md b/Documentation/Classes.md index 56b57304d0..57236b8d46 100644 --- a/Documentation/Classes.md +++ b/Documentation/Classes.md @@ -1535,7 +1535,7 @@ Choose between increasing your ability scores or gaining a bonus feat. * Stroke of Luck -You have an uncanny knack for succeeding when you need to. If your attack misses a target within range, you can turn the miss into a hit. +You have an uncanny knack for succeeding when you need to. If your attack misses a target within range, you can turn the miss into a critical hit. You can use this feature once per short or long rest. diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index d43a711dff..5be68827db 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,13 +1,13 @@ 1.5.97.37: -- added 20+ new settings under tabletop 5e 2024 section +- added 25+ new settings under tabletop 5e 2024 section - added Wizard Abjuration arcane ward recharge bonus action - added Wizard Graviturgist gravity well power toggle - fixed bardic inspiration on attack rolls not stacking with similar behaviors [VANILLA] - fixed campaigns translator to avoid location titles and break campaigns - fixed Charmed by Hypnotic Pattern not getting considered on incapacitated checks [VANILLA] - fixed Circle of Wildfire spirit allowed actions when summoner is incapacitated -- fixed Dispel Magic and similar not considering proxy effects +- fixed Dispel Magic and similar not considering proxies - fixed melee and range hit powers damage form dice advancement under multiclass scenarios - fixed recurrent effects interaction with immunity from proxies [VANILLA] - fixed Sickening Radiance exhaustion immunity on constructs, elementals, undead, and constructs diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index 1cf0dee835..8212605400 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -409,9 +409,11 @@ internal static void DisplayClasses() } toggle = Main.Settings.EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20; - if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20"), ref toggle, UI.AutoWidth())) + if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20"), + ref toggle, UI.AutoWidth())) { Main.Settings.EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20 = toggle; + Tabletop2024Context.SwitchWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20(); } toggle = Main.Settings.EnableWarlockToLearnPatronAtLevel3; diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 0e803973bc..a4c92dd8be 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -535,11 +535,13 @@ private static void DisplayOneDnd() Main.Settings.EnableWarlockToUseOneDndInvocationProgression = toggle; Tabletop2024Context.SwitchOneDndWarlockInvocationsProgression(); } - + toggle = Main.Settings.EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20; - if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20"), ref toggle, UI.AutoWidth())) + if (UI.Toggle(Gui.Localize("ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20"), + ref toggle, UI.AutoWidth())) { Main.Settings.EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20 = toggle; + Tabletop2024Context.SwitchWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20(); } toggle = Main.Settings.EnableWarlockToLearnPatronAtLevel3; diff --git a/SolastaUnfinishedBusiness/Models/Level20Context.cs b/SolastaUnfinishedBusiness/Models/Level20Context.cs index 754423d64f..a5f68f6c9b 100644 --- a/SolastaUnfinishedBusiness/Models/Level20Context.cs +++ b/SolastaUnfinishedBusiness/Models/Level20Context.cs @@ -113,6 +113,12 @@ internal static class Level20Context .Create(PointPoolBardMagicalSecrets14, "PointPoolBardMagicalSecrets18") .AddToDB(); + internal static readonly FeatureDefinitionPower PowerWarlockEldritchMaster = FeatureDefinitionPowerBuilder + .Create(PowerWizardArcaneRecovery, PowerWarlockEldritchMasterName) + .SetGuiPresentation(Category.Feature) + .SetUsesFixed(ActivationTime.Minute1, RechargeRate.LongRest) + .AddToDB(); + internal static void Load() { BarbarianLoad(); @@ -525,17 +531,11 @@ private static void WarlockLoad() .SetPool(HeroDefinitions.PointsPoolType.Invocation, 1) .AddToDB(); - var powerWarlockEldritchMaster = FeatureDefinitionPowerBuilder - .Create(PowerWizardArcaneRecovery, PowerWarlockEldritchMasterName) - .SetGuiPresentation(Category.Feature) - .SetUsesFixed(ActivationTime.Minute1, RechargeRate.LongRest) - .AddToDB(); - Warlock.FeatureUnlocks.AddRange( new FeatureUnlockByLevel(pointPoolWarlockMysticArcanum9, 17), new FeatureUnlockByLevel(pointPoolWarlockInvocation18, 18), new FeatureUnlockByLevel(FeatureSetAbilityScoreChoice, 19), - new FeatureUnlockByLevel(powerWarlockEldritchMaster, 20) + new FeatureUnlockByLevel(PowerWarlockEldritchMaster, 20) ); CastSpellWarlock.KnownSpells.SetRange(SharedSpellsContext.WarlockKnownSpells); diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index f0dd4e728a..8bd43f4fc8 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -200,6 +200,25 @@ internal static class Tabletop2024Context .SetSpecialInterruptions(ConditionInterruption.SavingThrow) .AddToDB(); + private static readonly FeatureDefinitionPower PowerWarlockMagicalCunning = FeatureDefinitionPowerBuilder + .Create("PowerWarlockMagicalCunning") + .SetGuiPresentation(Category.Feature, PowerWizardArcaneRecovery) + .SetUsesFixed(ActivationTime.Minute1, RechargeRate.LongRest) + .AddCustomSubFeatures(new PowerOrSpellFinishedByMeMagicalCunning()) + .AddToDB(); + + private static readonly FeatureDefinition FeatureEldritchMaster = FeatureDefinitionBuilder + .Create("FeatureEldritchMaster") + .SetGuiPresentation(Category.Feature) + .AddToDB(); + + private static readonly FeatureDefinitionPower PowerSorcerousRestoration = FeatureDefinitionPowerBuilder + .Create(PowerSorcererManaPainterTap, "PowerSorcerousRestoration") + .SetOrUpdateGuiPresentation(Category.Feature) + .SetUsesFixed(ActivationTime.Minute1, RechargeRate.LongRest) + .AddCustomSubFeatures(new PowerOrSpellFinishedByMeMagicalCunning()) + .AddToDB(); + internal static void LateLoad() { BuildBarbarianBrutalStrike(); @@ -504,6 +523,27 @@ internal static void SwitchOneDndWizardSchoolOfMagicLearningLevel() Wizard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } + internal static void SwitchWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20() + { + Warlock.FeatureUnlocks.RemoveAll(x => + x.FeatureDefinition == PowerWarlockMagicalCunning || + x.FeatureDefinition == FeatureEldritchMaster || + x.FeatureDefinition == Level20Context.PowerWarlockEldritchMaster); + + if (!Main.Settings.EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20) + { + Warlock.FeatureUnlocks.AddRange( + new FeatureUnlockByLevel(PowerWarlockMagicalCunning, 2), + new FeatureUnlockByLevel(FeatureEldritchMaster, 20)); + } + else + { + Warlock.FeatureUnlocks.Add(new FeatureUnlockByLevel(Level20Context.PowerWarlockEldritchMaster, 20)); + } + + Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + internal static void SwitchOneDndWarlockPatronLearningLevel() { var patrons = DatabaseRepository.GetDatabase() @@ -936,6 +976,46 @@ internal static void SwitchOneDndWarlockInvocationsProgression() Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } + private sealed class PowerOrSpellFinishedByMeMagicalCunning : IPowerOrSpellFinishedByMe + { + public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) + { + var hero = action.ActingCharacter.RulesetCharacter.GetOriginalHero(); + + if (hero == null) + { + yield break; + } + + var repertoire = SharedSpellsContext.GetWarlockSpellRepertoire(hero); + + if (repertoire == null) + { + yield break; + } + + hero.ClassesAndLevels.TryGetValue(Warlock, out var warlockClassLevel); + + var slotLevel = SharedSpellsContext.IsMulticaster(hero) + ? SharedSpellsContext.PactMagicSlotsTab + : SharedSpellsContext.GetWarlockSpellLevel(hero); + var maxSlots = SharedSpellsContext.GetWarlockMaxSlots(hero); + var halfSlotsRoundUp = (maxSlots + 1) / (warlockClassLevel == 20 ? 1 : 2); + + if (!repertoire.usedSpellsSlots.TryGetValue(slotLevel, out var value)) + { + yield break; + } + + repertoire.usedSpellsSlots[slotLevel] -= Math.Min(value, halfSlotsRoundUp); + + if (value > 0) + { + repertoire.RepertoireRefreshed?.Invoke(repertoire); + } + } + } + private sealed class TryAlterOutcomeSavingThrowBardCounterCharm : ITryAlterOutcomeSavingThrow { public IEnumerator OnTryAlterOutcomeSavingThrow( diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 29b6d618dd..ba602b92bb 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -103,6 +103,8 @@ Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Erweiterte Zauber Feature/&FeatureBardSuperiorInspiration2024Description=Wenn Sie die Initiative ergreifen, erhalten Sie verbrauchte Anwendungen der Bardischen Inspiration zurück, bis Sie zwei haben, wenn Sie weniger haben. Feature/&FeatureBardSuperiorInspiration2024Title=Überlegene Inspiration +Feature/&FeatureEldritchMasterDescription=Wenn Sie Ihre Funktion „Magische List“ nutzen, erhalten Sie alle Ihre verbrauchten Zauberplätze für Paktmagie zurück. +Feature/&FeatureEldritchMasterTitle=Unheimlicher Meister Feature/&FeatureMonkBodyAndMindDescription=Sie haben Ihren Körper und Geist auf ein neues Niveau gebracht. Ihre Geschicklichkeit und Weisheit erhöhen sich um 4. Feature/&FeatureMonkBodyAndMindTitle=Körper und Geist Feature/&FeatureMonkHeightenedMetabolismDescription=Ihr Training hat Ihren Körper und Geist auf ein neues Niveau gebracht. Ihr Schlaghagel, Ihre Geduldige Verteidigung und Ihr Schritt des Windes erhalten die folgenden Vorteile:\n• Schlaghagel: Wenn Sie Schlaghagel verwenden, führen Sie damit drei waffenlose Schläge aus, anstatt zwei.\n• Geduldige Verteidigung: Wenn Sie Geduldige Verteidigung verwenden, erhalten Sie eine Anzahl temporärer Trefferpunkte, die zwei Würfen Ihres Kampfkunstwürfels entspricht.\n• Schritt des Windes: Wenn Sie eine der beiden Funktionen des Schritts des Windes (Entfernen oder Sprinten) verwenden, erhalten Sie auch die Vorteile des anderen Effekts. @@ -196,10 +198,14 @@ Feature/&PowerRogueDeviousStrikeObscureTitle=Obskur Feature/&PowerRogueDeviousStrikeTitle=Hinterhältiger Schlag Feature/&PowerSorcererInnateSorceryDescription=Als Bonusaktion können Sie diese Magie 1 Minute lang entfesseln, wobei Sie die folgenden Vorteile erlangen:\n•Der Rettungswurf-SG Ihrer Zaubererzauber erhöht sich um 1.\n•Sie haben einen Vorteil bei den Angriffswürfen der Zaubererzauber, die Sie wirken.\n•Sie können diese Funktion zweimal verwenden und erhalten alle verbrauchten Anwendungen zurück, wenn Sie eine Lange Rast beenden. Feature/&PowerSorcererInnateSorceryTitle=Angeborene Zauberei +Feature/&PowerSorcerousRestorationDescription=Wenn Sie eine kurze Rast beenden, können Sie verbrauchte Zauberpunkte zurückgewinnen, jedoch nicht mehr als eine Zahl, die der Hälfte Ihres Zaubererlevels entspricht (abgerundet). Sobald Sie diese Funktion verwenden, können Sie dies nicht erneut tun, bis Sie eine lange Rast beenden. +Feature/&PowerSorcerousRestorationTitle=Zauberhafte Wiederherstellung Feature/&PowerTeleportSummonDescription=Sie können sich an jeden Ort im Umkreis von 1,5 m um den Zauberer teleportieren. Feature/&PowerTeleportSummonTitle=Teleport Feature/&PowerVanishSummonDescription=Sie können Ihre Beschwörung verschwinden lassen. Feature/&PowerVanishSummonTitle=Verschwinden +Feature/&PowerWarlockMagicalCunningDescription=Sie können 1 Minute lang ein esoterisches Ritual durchführen. Am Ende erhalten Sie verbrauchte Paktmagie-Zauberplätze zurück, jedoch nicht mehr als eine Anzahl, die der Hälfte Ihres Maximums entspricht (aufgerundet). Sobald Sie diese Funktion verwenden, können Sie dies nicht erneut tun, bis Sie eine lange Pause beendet haben. +Feature/&PowerWarlockMagicalCunningTitle=Magische List Feature/&RogueSlipperyMindExtendedDescription=Sie haben größere mentale Stärke erlangt. Sie erlangen Kompetenz bei Weisheits- und Charismarettungswürfen. Feature/&ToolGainChoicesPluralDescription=Wählen Sie {0} dieser Tools: {1} Feature/&ToolGainChoicesSingleDescription=Wählen Sie eines dieser Tools: {1} diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index bbe94156b9..8baed378cc 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -103,6 +103,8 @@ Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Expanded Spells Feature/&FeatureBardSuperiorInspiration2024Description=When you roll Initiative, you regain expended uses of Bardic Inspiration until you have two if you have fewer that that. Feature/&FeatureBardSuperiorInspiration2024Title=Superior Inspiration +Feature/&FeatureEldritchMasterDescription=When you use your Magical Cunning feature, you regain all your expended Pact Magic spell slots. +Feature/&FeatureEldritchMasterTitle=Eldritch Master Feature/&FeatureMonkBodyAndMindDescription=You have honed your body and mind to new heights. Your Dexterity and Wisdom increase by 4. Feature/&FeatureMonkBodyAndMindTitle=Body and Mind Feature/&FeatureMonkHeightenedMetabolismDescription=Your training has pushed your body and mind to new levels. Your Flurry of Blows, Patient Defense, and Step of the Wind gain the following benefits:\n• Flurry of Blows: When you use Flurry of Blows, you make three Unarmed Strikes with it instead of two.\n• Patient Defense: When you use Patient Defense, you gain a number of temporary hit points equal to two rolls of your Martial Arts die.\n• Step of the Wind: When you use either Step of the Wind feature (Disengage or Dash), you also gain the benefits of the other effect. @@ -138,6 +140,8 @@ Feature/&InvocationPoolFeatWeaponMasterChoiceLearnDescription=Select new weapon Feature/&InvocationPoolFeatWeaponMasterChoiceLearnTitle=Weapon Master Feature/&InvocationPoolKindredSpiritChoiceLearnDescription=Select a Kindred Spirit for your Druid. Feature/&InvocationPoolKindredSpiritChoiceLearnTitle=Kindred Spirit +Feature/&PowerSorcerousRestorationTitle=Sorcerous Restoration +Feature/&PowerSorcerousRestorationDescription=When you finish a Short Rest, you can regain expended Sorcery Points, but no more than a number equal to half your Sorcerer level (round down). Once you use this feature, you can't do so again until you finish a Long Rest. Feature/&InvocationPoolMonkWeaponSpecializationLearnDescription=Select a new weapon type to become a monk weapon for you. Feature/&InvocationPoolMonkWeaponSpecializationLearnTitle=Monk Weapon Specialization Feature/&InvocationPoolPathClawDraconicChoiceLearnDescription=Select a Path of the Claw draconic ancestry. @@ -200,6 +204,8 @@ Feature/&PowerTeleportSummonDescription=You can teleport to any location within Feature/&PowerTeleportSummonTitle=Teleport Feature/&PowerVanishSummonDescription=You can make your summon vanish. Feature/&PowerVanishSummonTitle=Vanish +Feature/&PowerWarlockMagicalCunningDescription=You can perform an esoteric rite for 1 minute. At the end of it, you regain expended Pact Magic spell slots but no more than a number equal to half your maximum (round up). Once you use this feature, you can't do so again until you finish a Long Rest. +Feature/&PowerWarlockMagicalCunningTitle=Magical Cunning Feature/&RogueSlipperyMindExtendedDescription=You have acquired greater mental strength. You gain proficiency in Wisdom and Charisma saving throws. Feature/&ToolGainChoicesPluralDescription=Choose {0} of these tools: {1} Feature/&ToolGainChoicesSingleDescription=Choose one of these tools: {1} diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index f3405ed4e9..0e61eae37e 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -103,6 +103,8 @@ Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Hechizos ampliados Feature/&FeatureBardSuperiorInspiration2024Description=Cuando tiras Iniciativa, recuperas los usos gastados de Inspiración bárdica hasta que tengas dos si tienes menos que eso. Feature/&FeatureBardSuperiorInspiration2024Title=Inspiración superior +Feature/&FeatureEldritchMasterDescription=Cuando usas tu característica Astucia mágica, recuperas todos los espacios de hechizo de Magia de pacto gastados. +Feature/&FeatureEldritchMasterTitle=Maestro sobrenatural Feature/&FeatureMonkBodyAndMindDescription=Has perfeccionado tu cuerpo y tu mente hasta alcanzar nuevas cotas. Tu destreza y sabiduría aumentan en 4. Feature/&FeatureMonkBodyAndMindTitle=Cuerpo y mente Feature/&FeatureMonkHeightenedMetabolismDescription=Tu entrenamiento ha llevado tu cuerpo y tu mente a nuevos niveles. Tus Ráfaga de golpes, Defensa paciente y Paso del viento obtienen los siguientes beneficios:\n• Ráfaga de golpes: cuando usas Ráfaga de golpes, realizas tres Golpes sin armas con ella en lugar de dos.\n• Defensa paciente: cuando usas Defensa paciente, obtienes una cantidad de puntos de golpe temporales igual a dos tiradas de tu dado de Artes marciales.\n• Paso del viento: cuando usas cualquiera de las características de Paso del viento (Desengancharse o Correr), también obtienes los beneficios del otro efecto. @@ -196,10 +198,14 @@ Feature/&PowerRogueDeviousStrikeObscureTitle=Oscuro Feature/&PowerRogueDeviousStrikeTitle=Golpe desviado Feature/&PowerSorcererInnateSorceryDescription=Como Acción Bonus, puedes desatar esa magia durante 1 minuto, durante el cual obtienes los siguientes beneficios:\n•La CD de salvación de hechizos de tus hechizos de Hechicero aumenta en 1.\n•Tienes Ventaja en las tiradas de ataque de los hechizos de Hechicero que lances.\n•Puedes usar esta característica dos veces, y recuperas todos los usos gastados de la misma cuando terminas un Descanso Largo. Feature/&PowerSorcererInnateSorceryTitle=Hechicería innata +Feature/&PowerSorcerousRestorationDescription=Cuando terminas un descanso breve, puedes recuperar los puntos de hechicería que hayas gastado, pero no más de una cantidad igual a la mitad de tu nivel de hechicero (redondeando hacia abajo). Una vez que uses esta característica, no podrás volver a hacerlo hasta que termines un descanso prolongado. +Feature/&PowerSorcerousRestorationTitle=Restauración hechicera Feature/&PowerTeleportSummonDescription=Puedes teletransportarte a cualquier ubicación dentro de un radio de 5 pies del lanzador. Feature/&PowerTeleportSummonTitle=Teletransportarse Feature/&PowerVanishSummonDescription=Puedes hacer que tu invocación desaparezca. Feature/&PowerVanishSummonTitle=Desaparecer +Feature/&PowerWarlockMagicalCunningDescription=Puedes realizar un rito esotérico durante 1 minuto. Al final, recuperas los espacios de conjuro de Magia de pacto gastados, pero no más de una cantidad igual a la mitad de tu máximo (redondeando hacia arriba). Una vez que uses esta característica, no podrás volver a hacerlo hasta que termines un Descanso prolongado. +Feature/&PowerWarlockMagicalCunningTitle=Astucia mágica Feature/&RogueSlipperyMindExtendedDescription=Has adquirido mayor fuerza mental. Ganas competencia en tiradas de salvación de Sabiduría y Carisma. Feature/&ToolGainChoicesPluralDescription=Elija {0} de estas herramientas: {1} Feature/&ToolGainChoicesSingleDescription=Elija una de estas herramientas: {1} diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 717d536f31..aa5b526eef 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -103,6 +103,8 @@ Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Sorts étendus Feature/&FeatureBardSuperiorInspiration2024Description=Lorsque vous lancez Initiative, vous récupérez les utilisations dépensées d'Inspiration bardique jusqu'à ce que vous en ayez deux si vous en avez moins. Feature/&FeatureBardSuperiorInspiration2024Title=Inspiration supérieure +Feature/&FeatureEldritchMasterDescription=Lorsque vous utilisez votre fonction Ruse magique, vous récupérez tous vos emplacements de sorts de Magie du Pacte dépensés. +Feature/&FeatureEldritchMasterTitle=Maître occulte Feature/&FeatureMonkBodyAndMindDescription=Vous avez perfectionné votre corps et votre esprit vers de nouveaux sommets. Votre Dextérité et votre Sagesse augmentent de 4. Feature/&FeatureMonkBodyAndMindTitle=Corps et esprit Feature/&FeatureMonkHeightenedMetabolismDescription=Votre entraînement a poussé votre corps et votre esprit à de nouveaux sommets. Vos effets Déluge de coups, Défense patiente et Pas du vent vous confèrent les avantages suivants :\n• Déluge de coups : lorsque vous utilisez Déluge de coups, vous effectuez trois attaques à mains nues au lieu de deux.\n• Défense patiente : lorsque vous utilisez Défense patiente, vous gagnez un nombre de points de vie temporaires égal à deux lancers de votre dé d'arts martiaux.\n• Pas du vent : lorsque vous utilisez l'une des fonctions Pas du vent (Désengagement ou Flèche), vous bénéficiez également des avantages de l'autre effet. @@ -196,10 +198,14 @@ Feature/&PowerRogueDeviousStrikeObscureTitle=Obscur Feature/&PowerRogueDeviousStrikeTitle=Frappe sournoise Feature/&PowerSorcererInnateSorceryDescription=En tant qu'action bonus, vous pouvez libérer cette magie pendant 1 minute, durant laquelle vous obtenez les avantages suivants :\n• Le DD de sauvegarde des sorts de Sorcier augmente de 1.\n• Vous avez l'Avantage sur les jets d'attaque des sorts de Sorcier que vous lancez.\n• Vous pouvez utiliser cette fonctionnalité deux fois, et vous récupérez toutes les utilisations dépensées lorsque vous terminez un Repos Long. Feature/&PowerSorcererInnateSorceryTitle=Sorcellerie innée +Feature/&PowerSorcerousRestorationDescription=Lorsque vous terminez un Repos court, vous pouvez récupérer les points de sorcellerie dépensés, mais pas plus qu'un nombre égal à la moitié de votre niveau de sorcier (arrondir à l'inférieur). Une fois que vous avez utilisé cette fonctionnalité, vous ne pouvez plus le faire avant d'avoir terminé un Repos long. +Feature/&PowerSorcerousRestorationTitle=Restauration magique Feature/&PowerTeleportSummonDescription=Vous pouvez vous téléporter à n'importe quel endroit dans un rayon de 5 pieds du lanceur de sorts. Feature/&PowerTeleportSummonTitle=Téléportation Feature/&PowerVanishSummonDescription=Vous pouvez faire disparaître votre invocation. Feature/&PowerVanishSummonTitle=Disparaître +Feature/&PowerWarlockMagicalCunningDescription=Vous pouvez effectuer un rite ésotérique pendant 1 minute. À la fin de celui-ci, vous récupérez des emplacements de sorts de Magie du Pacte dépensés, mais pas plus d'un nombre égal à la moitié de votre maximum (arrondir à l'entier supérieur). Une fois que vous avez utilisé cette fonctionnalité, vous ne pouvez plus le faire avant d'avoir terminé un Repos long. +Feature/&PowerWarlockMagicalCunningTitle=Ruse magique Feature/&RogueSlipperyMindExtendedDescription=Vous avez acquis une plus grande force mentale. Vous maîtrisez les jets de sauvegarde de Sagesse et de Charisme. Feature/&ToolGainChoicesPluralDescription=Choisissez {0} de ces outils : {1} Feature/&ToolGainChoicesSingleDescription=Choisissez l'un de ces outils : {1} diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index de546a6d78..a45ff6ad9d 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -103,6 +103,8 @@ Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Incantesimi espansi Feature/&FeatureBardSuperiorInspiration2024Description=Quando tiri per l'Iniziativa, recuperi gli usi spesi di Ispirazione Bardica finché non ne hai due, se ne hai meno. Feature/&FeatureBardSuperiorInspiration2024Title=Ispirazione superiore +Feature/&FeatureEldritchMasterDescription=Quando utilizzi la tua caratteristica Astuzia Magica, recuperi tutti gli slot incantesimo Magia del Patto spesi. +Feature/&FeatureEldritchMasterTitle=Maestro Eldritch Feature/&FeatureMonkBodyAndMindDescription=Hai affinato il tuo corpo e la tua mente a nuove vette. La tua Destrezza e Saggezza aumentano di 4. Feature/&FeatureMonkBodyAndMindTitle=Corpo e mente Feature/&FeatureMonkHeightenedMetabolismDescription=Il tuo allenamento ha spinto il tuo corpo e la tua mente a nuovi livelli. La tua Raffica di Colpi, Difesa Paziente e Passo del Vento ottengono i seguenti benefici:\n• Raffica di Colpi: quando usi Raffica di Colpi, esegui tre Colpi Senz'Armi invece di due.\n• Difesa Paziente: quando usi Difesa Paziente, ottieni un numero di punti ferita temporanei pari a due tiri del tuo dado Arti Marziali.\n• Passo del Vento: quando usi una delle caratteristiche di Passo del Vento (Disimpegno o Scatto), ottieni anche i benefici dell'altro effetto. @@ -196,10 +198,14 @@ Feature/&PowerRogueDeviousStrikeObscureTitle=Oscuro Feature/&PowerRogueDeviousStrikeTitle=Colpo subdolo Feature/&PowerSorcererInnateSorceryDescription=Come azione bonus, puoi scatenare quella magia per 1 minuto, durante il quale ottieni i seguenti benefici:\n• La CD del tiro salvezza degli incantesimi dei tuoi incantesimi da stregone aumenta di 1.\n• Hai vantaggio sui tiri per colpire degli incantesimi da stregone che lanci.\n• Puoi usare questa caratteristica due volte e recuperi tutti gli usi spesi quando completi un riposo lungo. Feature/&PowerSorcererInnateSorceryTitle=Stregoneria innata +Feature/&PowerSorcerousRestorationDescription=Quando finisci un Riposo Breve, puoi recuperare i Punti Stregoneria spesi, ma non più di un numero pari alla metà del tuo livello da Stregone (arrotondato per difetto). Una volta che usi questa caratteristica, non puoi più farlo finché non finisci un Riposo Lungo. +Feature/&PowerSorcerousRestorationTitle=Restauro stregonesco Feature/&PowerTeleportSummonDescription=Puoi teletrasportarti in qualsiasi luogo entro 1,5 metri dall'incantatore. Feature/&PowerTeleportSummonTitle=Teletrasporto Feature/&PowerVanishSummonDescription=Puoi far svanire la tua evocazione. Feature/&PowerVanishSummonTitle=Svanire +Feature/&PowerWarlockMagicalCunningDescription=Puoi eseguire un rito esoterico per 1 minuto. Alla fine, recuperi gli slot incantesimo Pact Magic spesi, ma non più di un numero pari alla metà del tuo massimo (arrotondato per eccesso). Una volta che usi questa caratteristica, non puoi farlo di nuovo finché non finisci un Riposo Lungo. +Feature/&PowerWarlockMagicalCunningTitle=Astuzia magica Feature/&RogueSlipperyMindExtendedDescription=Hai acquisito una maggiore forza mentale. Ottieni competenza nei tiri salvezza su Saggezza e Carisma. Feature/&ToolGainChoicesPluralDescription=Scegli {0} di questi strumenti: {1} Feature/&ToolGainChoicesSingleDescription=Scegli uno di questi strumenti: {1} diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index d2805ab341..a57e7442e3 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -103,6 +103,8 @@ Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=拡張された呪文 Feature/&FeatureBardSuperiorInspiration2024Description=イニシアティブをロールすると、消費したバード インスピレーションの使用回数が 2 回になるまで回復します (2 回未満の場合)。 Feature/&FeatureBardSuperiorInspiration2024Title=優れたインスピレーション +Feature/&FeatureEldritchMasterDescription=魔法の狡猾な特徴を使用すると、消費した契約魔法の呪文スロットがすべて回復します。 +Feature/&FeatureEldritchMasterTitle=エルドリッチマスター Feature/&FeatureMonkBodyAndMindDescription=あなたは肉体と精神を新たな高みにまで磨き上げました。あなたの器用さと知恵は 4 増加します。 Feature/&FeatureMonkBodyAndMindTitle=体と心 Feature/&FeatureMonkHeightenedMetabolismDescription=あなたのトレーニングはあなたの体と心を新たなレベルに押し上げました。 Flurry of Blows、Patient Defense、Step of the Wind には次の利点があります:\n• Flurry of Blows: Flurry of Blows を使用すると、素手攻撃を 2 回ではなく 3 回行うことができます。\n• 患者の防御: 患者の防御を使用すると、格闘技ダイスの 2 ロールに等しい一時的なヒット ポイントを獲得します。\n• 風のステップ: 風のステップの機能 (離脱またはダッシュ) を使用すると、他の効果の恩恵も受けます。 @@ -196,10 +198,14 @@ Feature/&PowerRogueDeviousStrikeObscureTitle=あいまいな Feature/&PowerRogueDeviousStrikeTitle=デビアス・ストライク Feature/&PowerSorcererInnateSorceryDescription=ボーナス アクションとして、その魔法を 1 分間発揮できます。その間、次の利点が得られます:\n•ソーサラー呪文の呪文セーヴ DC が 1 増加します。\n•ソーサラー呪文の攻撃ロールにアドバンテージを得ます。\n•この特徴は 2 回使用でき、大休憩を終了すると消費した使用回数をすべて回復します。 Feature/&PowerSorcererInnateSorceryTitle=生来の魔術 +Feature/&PowerSorcerousRestorationDescription=小休憩を終えると、消費したソーサリー ポイントを回復できますが、ソーサラー レベルの半分 (切り捨て) を超えることはできません。この機能を一度使用すると、大休憩を終えるまで再度使用することはできません。 +Feature/&PowerSorcerousRestorationTitle=魔法の回復 Feature/&PowerTeleportSummonDescription=キャスターから 5 フィート以内の任意の場所にテレポートできます。 Feature/&PowerTeleportSummonTitle=テレポート Feature/&PowerVanishSummonDescription=召喚を消滅させることができます。 Feature/&PowerVanishSummonTitle=消え去る +Feature/&PowerWarlockMagicalCunningDescription=1 分間、秘教的な儀式を行うことができます。儀式の終了時に、消費した契約魔法の呪文スロットを回復しますが、最大値の半分 (切り上げ) を超えることはできません。この機能を一度使用すると、大休憩を終了するまで再度使用することはできません。 +Feature/&PowerWarlockMagicalCunningTitle=魔法の狡猾さ Feature/&RogueSlipperyMindExtendedDescription=あなたはより大きな精神力を獲得しました。あなたは知恵と魅力のセーヴィング スローに習熟しました。 Feature/&ToolGainChoicesPluralDescription=次のツールから {0} 個を選択してください: {1} Feature/&ToolGainChoicesSingleDescription=次のツールのいずれかを選択します: {1} diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 786a6ee753..9aa18f238b 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -103,6 +103,8 @@ Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=확장된 주문 Feature/&FeatureBardSuperiorInspiration2024Description=주도권을 굴릴 때, 바드 영감의 소모한 사용 횟수를 회복합니다. 소모한 사용 횟수가 두 개보다 적다면 다시 두 개를 사용할 수 있습니다. Feature/&FeatureBardSuperiorInspiration2024Title=뛰어난 영감 +Feature/&FeatureEldritchMasterDescription=마법의 교활함 기능을 사용하면 소모한 팩트 마법 주문 슬롯을 모두 회복합니다. +Feature/&FeatureEldritchMasterTitle=엘드리치 마스터 Feature/&FeatureMonkBodyAndMindDescription=당신은 몸과 마음을 새로운 차원으로 연마했습니다. 민첩성과 지혜가 4 증가합니다. Feature/&FeatureMonkBodyAndMindTitle=몸과 마음 Feature/&FeatureMonkHeightenedMetabolismDescription=당신의 훈련은 당신의 몸과 마음을 새로운 수준으로 끌어 올렸습니다. Flurry of Blows, Patient Defense 및 Step of the Wind는 다음과 같은 이점을 얻습니다.\n• Flurry of Blows: Flurry of Blows를 사용하면 2번이 아닌 3번의 비무장 공격이 가능합니다.\n• 환자 방어 : 환자 방어를 사용하면 무술 주사위 굴림 2개에 해당하는 임시 체력을 얻습니다.\n• 바람의 발걸음: 바람의 발걸음 기능(해제 또는 돌진)을 사용하면 다른 효과의 이점도 얻습니다. @@ -196,10 +198,14 @@ Feature/&PowerRogueDeviousStrikeObscureTitle=모호 Feature/&PowerRogueDeviousStrikeTitle=사악한 일격 Feature/&PowerSorcererInnateSorceryDescription=보너스 액션으로 1분 동안 해당 마법을 풀어놓을 수 있으며, 그동안 다음과 같은 혜택을 얻습니다:\n• 마법사 주문의 주문 저장 DC가 1만큼 증가합니다.\n• 시전하는 마법사 주문의 공격 굴림에 유리합니다.\n• 이 기능을 두 번 사용할 수 있으며, 긴 휴식을 마치면 사용된 모든 사용 횟수를 회복합니다. Feature/&PowerSorcererInnateSorceryTitle=타고난 마법 +Feature/&PowerSorcerousRestorationDescription=짧은 휴식을 마치면 사용한 마법 포인트를 회복할 수 있지만, 마법사 레벨의 절반(내림)을 넘을 수 없습니다. 이 기능을 사용하면 긴 휴식을 마치기 전까지는 다시 할 수 없습니다. +Feature/&PowerSorcerousRestorationTitle=마법의 회복 Feature/&PowerTeleportSummonDescription=시전자로부터 5피트 이내의 어느 위치로든 순간이동할 수 있습니다. Feature/&PowerTeleportSummonTitle=텔레포트 Feature/&PowerVanishSummonDescription=소환을 사라지게 할 수 있습니다. Feature/&PowerVanishSummonTitle=사라지다 +Feature/&PowerWarlockMagicalCunningDescription=1분 동안 비전 의식을 수행할 수 있습니다. 의식이 끝나면 사용한 Pact Magic 주문 슬롯을 회복하지만 최대치의 절반에 해당하는 수를 넘지 않습니다(올림). 이 기능을 사용하면 Long Rest를 마칠 때까지 다시 할 수 없습니다. +Feature/&PowerWarlockMagicalCunningTitle=마법의 교활함 Feature/&RogueSlipperyMindExtendedDescription=당신은 더 큰 정신력을 얻었습니다. 당신은 지혜와 카리스마 세이빙 스로우에 능숙해집니다. Feature/&ToolGainChoicesPluralDescription=다음 도구 중 {0}개를 선택하세요: {1} Feature/&ToolGainChoicesSingleDescription=다음 도구 중 하나를 선택하십시오: {1} diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 4a30d62956..074b289492 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -103,6 +103,8 @@ Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Feitiços Expandidos Feature/&FeatureBardSuperiorInspiration2024Description=Ao rolar Iniciativa, você recupera os usos gastos de Inspiração Bárdica até que você tenha dois, se tiver menos que isso. Feature/&FeatureBardSuperiorInspiration2024Title=Inspiração Superior +Feature/&FeatureEldritchMasterDescription=Ao usar sua habilidade Astúcia Mágica, você recupera todos os seus espaços de magia de Pacto gastos. +Feature/&FeatureEldritchMasterTitle=Mestre Eldritch Feature/&FeatureMonkBodyAndMindDescription=Você afiou seu corpo e mente a novos patamares. Sua Destreza e Sabedoria aumentam em 4. Feature/&FeatureMonkBodyAndMindTitle=Corpo e mente Feature/&FeatureMonkHeightenedMetabolismDescription=Seu treinamento levou seu corpo e mente a novos níveis. Sua Rajada de Golpes, Defesa Paciente e Passo do Vento ganham os seguintes benefícios:\n• Rajada de Golpes: Quando você usa Rajada de Golpes, você faz três Ataques Desarmados com ela em vez de dois.\n• Defesa Paciente: Quando você usa Defesa Paciente, você ganha um número de pontos de vida temporários igual a duas rolagens do seu dado de Artes Marciais.\n• Passo do Vento: Quando você usa qualquer um dos recursos Passo do Vento (Desengatar ou Disparar), você também ganha os benefícios do outro efeito. @@ -196,10 +198,14 @@ Feature/&PowerRogueDeviousStrikeObscureTitle=Obscurecer Feature/&PowerRogueDeviousStrikeTitle=Ataque Desonesto Feature/&PowerSorcererInnateSorceryDescription=Como uma Ação Bônus, você pode liberar essa magia por 1 minuto, durante o qual você ganha os seguintes benefícios:\n•A CD de resistência de magias de seus feitiços de Feiticeiro aumenta em 1.\n•Você tem Vantagem nas jogadas de ataque de feitiços de Feiticeiro que você conjura.\n•Você pode usar essa habilidade duas vezes, e você recupera todos os usos gastos dela quando termina um Descanso Longo. Feature/&PowerSorcererInnateSorceryTitle=Feitiçaria Inata +Feature/&PowerSorcerousRestorationDescription=Quando você termina um Descanso Curto, você pode recuperar Pontos de Feitiçaria gastos, mas não mais do que um número igual à metade do seu nível de Feiticeiro (arredondado para baixo). Uma vez que você usar esse recurso, você não pode fazê-lo novamente até terminar um Descanso Longo. +Feature/&PowerSorcerousRestorationTitle=Restauração Feiticeira Feature/&PowerTeleportSummonDescription=Você pode se teletransportar para qualquer local a até 1,5 metro do lançador. Feature/&PowerTeleportSummonTitle=Teleporte Feature/&PowerVanishSummonDescription=Você pode fazer sua invocação desaparecer. Feature/&PowerVanishSummonTitle=Desaparecer +Feature/&PowerWarlockMagicalCunningDescription=Você pode realizar um rito esotérico por 1 minuto. No final dele, você recupera os espaços de magia de Pacto Mágico gastos, mas não mais do que um número igual à metade do seu máximo (arredondado para cima). Depois de usar esse recurso, você não pode fazê-lo novamente até terminar um Descanso Longo. +Feature/&PowerWarlockMagicalCunningTitle=Astúcia Mágica Feature/&RogueSlipperyMindExtendedDescription=Você adquiriu maior força mental. Você ganha proficiência em testes de resistência de Sabedoria e Carisma. Feature/&ToolGainChoicesPluralDescription=Escolha {0} destas ferramentas: {1} Feature/&ToolGainChoicesSingleDescription=Escolha uma destas ferramentas: {1} diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index dbc819c4dc..6efa9102a8 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -103,6 +103,8 @@ Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Расширенные заклинания Feature/&FeatureBardSuperiorInspiration2024Description=Когда вы совершаете бросок инициативы, вы восстанавливаете потраченные кости Бардовского вдохновения до максимального количества в две кости, если у вас их меньше. Feature/&FeatureBardSuperiorInspiration2024Title=Превосходное вдохновение +Feature/&FeatureEldritchMasterDescription=При использовании способности «Магическая хитрость» вы восстанавливаете все потраченные ячейки заклинаний «Пакта магии». +Feature/&FeatureEldritchMasterTitle=Мастер Древних Feature/&FeatureMonkBodyAndMindDescription=Вы развили свои тело и разум до невероятных высот. Ваши значения Ловкости и Мудрости увеличиваются на 4. Feature/&FeatureMonkBodyAndMindTitle=Тело и разум Feature/&FeatureMonkHeightenedMetabolismDescription=Ваши тренировки вывели ваши тело и разум на новый уровень. Ваши умения Шквал ударов, Терпеливая оборона и Поступь ветра получают следующие преимущества:\n• Шквал ударов: Когда вы используете Шквал ударов, вы наносите три безоружных удара вместо двух.\n• Терпеливая оборона: Когда вы используете Терпеливую оборону, вы получаете количество временных хитов, равное броску двух ваших костей боевых искусств.\n• Поступь ветра: Когда вы используете одно из действий с помощью Поступи ветра (Отход или Рывок), вы также получаете преимущества другого из них. @@ -196,10 +198,14 @@ Feature/&PowerRogueDeviousStrikeObscureTitle=Затемнение Feature/&PowerRogueDeviousStrikeTitle=Коварный удар Feature/&PowerSorcererInnateSorceryDescription=Бонусным действием вы можете высвободить эту магию на 1 минуту, в течение которой вы получаете следующие преимущества:\n• Сл спасбросков ваших заклинаний Чародея увеличивается на 1.\n• Вы получаете преимущество на броски атаки заклинаний Чародея.\n• Вы можете воспользоваться этой способностью дважды, и вы восстанавливаете все потраченные использования, когда заканчиваете продолжительный отдых. Feature/&PowerSorcererInnateSorceryTitle=Врождённое чародейство +Feature/&PowerSorcerousRestorationDescription=Когда вы закончите Короткий Отдых, вы сможете восстановить потраченные Очки Колдовства, но не более, чем на половину вашего уровня Колдуна (округляя вниз). После того, как вы воспользуетесь этой функцией, вы не сможете сделать это снова, пока не закончите Длительный Отдых. +Feature/&PowerSorcerousRestorationTitle=Волшебное Восстановление Feature/&PowerTeleportSummonDescription=Вы можете телепортироваться в любое место в пределах 5 футов от заклинателя. Feature/&PowerTeleportSummonTitle=Телепортироваться Feature/&PowerVanishSummonDescription=Вы можете заставить призванное существо исчезнуть. Feature/&PowerVanishSummonTitle=Исчезновение +Feature/&PowerWarlockMagicalCunningDescription=Вы можете провести эзотерический ритуал в течение 1 минуты. По его завершении вы восстанавливаете израсходованные слоты заклинаний Pact Magic, но не более половины вашего максимума (округлять вверх). После того, как вы воспользуетесь этой функцией, вы не сможете сделать это снова, пока не закончите Long Rest. +Feature/&PowerWarlockMagicalCunningTitle=Магическая хитрость Feature/&RogueSlipperyMindExtendedDescription=Вы приобрели большую ментальную силу. Вы получаете мастерство в спасбросках Мудрости и Харизмы. Feature/&ToolGainChoicesPluralDescription=Выберите {0} из этих инструментов: {1} Feature/&ToolGainChoicesSingleDescription=Выберите один из этих инструментов: {1} diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 17acaefddf..85d4730f77 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -103,6 +103,8 @@ Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=扩展法术 Feature/&FeatureBardSuperiorInspiration2024Description=当你掷主动权时,如果你拥有的吟游诗人灵感少于两次,你将重新获得已消耗的吟游诗人灵感,直到你拥有两次。 Feature/&FeatureBardSuperiorInspiration2024Title=卓越灵感 +Feature/&FeatureEldritchMasterDescription=当你使用“魔法狡诈”功能时,你将恢复所有已消耗的“契约魔法”法术位。 +Feature/&FeatureEldritchMasterTitle=邪术大师 Feature/&FeatureMonkBodyAndMindDescription=你行满功成,身心性命皆已突破超然境界。你的敏捷和感知增加 4 点。 Feature/&FeatureMonkBodyAndMindTitle=身心合一 Feature/&FeatureMonkHeightenedMetabolismDescription=你的训练已将你的身与心推至全新境界。你的疾风连击、坚强防御和飞檐走壁将获得以下好处:\n• 疾风连击:使用疾风连击时,你可以进行三次徒手攻击,而不是两次。\n• 坚强防御:使用坚强防御时,你将获得临时生命值,数量等于你掷出的两枚武艺骰。\n• 飞檐走壁:使用任一飞檐走壁特性(撤离或疾走)时,你还会获得其他效果的好处。 @@ -196,10 +198,14 @@ Feature/&PowerRogueDeviousStrikeObscureTitle=遮蔽 Feature/&PowerRogueDeviousStrikeTitle=狡诈打击 Feature/&PowerSorcererInnateSorceryDescription=作为奖励行动,您可以释放魔法 1 分钟,在此期间您将获得以下好处:\n• 您的巫师法术的法术豁免 DC 增加 1。\n• 您在施放的巫师法术的攻击掷骰上具有优势。\n• 您可以使用此功能两次,并且在完成长时间休息后,您可以恢复所有已用完的使用次数。 Feature/&PowerSorcererInnateSorceryTitle=天生魔法 +Feature/&PowerSorcerousRestorationDescription=完成短暂休息后,您可以恢复消耗的魔法点数,但最多只能恢复魔法师等级的一半(向下取整)。一旦使用此功能,您就无法再次这样做,直到完成长时间休息为止。 +Feature/&PowerSorcerousRestorationTitle=魔法恢复 Feature/&PowerTeleportSummonDescription=你可以传送到施法者 5 尺以内的任何位置。 Feature/&PowerTeleportSummonTitle=传送 Feature/&PowerVanishSummonDescription=你可以让你的召唤物消失。 Feature/&PowerVanishSummonTitle=消失 +Feature/&PowerWarlockMagicalCunningDescription=您可以进行 1 分钟的秘传仪式。仪式结束时,您可以恢复已消耗的契约魔法法术位,但最多可恢复最大值的一半(向上取整)。使用此功能后,您无法再次执行此操作,直到完成长时间休息。 +Feature/&PowerWarlockMagicalCunningTitle=魔法狡猾 Feature/&RogueSlipperyMindExtendedDescription=你获得了更强大的精神力量。你获得了智慧和魅力豁免熟练度。 Feature/&ToolGainChoicesPluralDescription=从这些工具中选择 {0}:{1} Feature/&ToolGainChoicesSingleDescription=选择以下工具之一:{1} From 32fa4f9ec46a3a61cd0f70aca5345dad5eac4dad Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 5 Nov 2024 19:05:28 -0800 Subject: [PATCH 77/85] add Sorcerous Restoration --- SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs | 7 +++++++ SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs | 7 +++++++ .../Models/Tabletop2024Context.cs | 12 ++++++++++++ SolastaUnfinishedBusiness/Settings.cs | 1 + .../Translations/de/Settings-de.txt | 1 + .../Translations/en/Others-en.txt | 4 ++-- .../Translations/en/Settings-en.txt | 1 + .../Translations/es/Settings-es.txt | 1 + .../Translations/fr/Settings-fr.txt | 1 + .../Translations/it/Settings-it.txt | 1 + .../Translations/ja/Settings-ja.txt | 1 + .../Translations/ko/Settings-ko.txt | 1 + .../Translations/pt-BR/Settings-pt-BR.txt | 1 + .../Translations/ru/Settings-ru.txt | 1 + .../Translations/zh-CN/Settings-zh-CN.txt | 1 + 15 files changed, 39 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs index 8212605400..db93f73ad3 100644 --- a/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ClassesDisplay.cs @@ -397,6 +397,13 @@ internal static void DisplayClasses() } } + toggle = Main.Settings.EnableSorcerousRestorationAtLevel5; + if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcerousRestorationAtLevel5"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableSorcerousRestorationAtLevel5 = toggle; + Tabletop2024Context.SwitchSorcerousRestorationAtLevel5(); + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&WarlockTitle") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index a4c92dd8be..7a1b005521 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -525,6 +525,13 @@ private static void DisplayOneDnd() Tabletop2024Context.SwitchSorcererInnateSorcery(); } + toggle = Main.Settings.EnableSorcerousRestorationAtLevel5; + if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcerousRestorationAtLevel5"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableSorcerousRestorationAtLevel5 = toggle; + Tabletop2024Context.SwitchSorcerousRestorationAtLevel5(); + } + UI.Label(); UI.Label("" + Gui.Localize("Class/&WarlockTitle") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 8bd43f4fc8..554ccd18a1 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -901,6 +901,18 @@ internal static void SwitchSorcererInnateSorcery() Sorcerer.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } + internal static void SwitchSorcerousRestorationAtLevel5() + { + Sorcerer.FeatureUnlocks.RemoveAll(x => x.FeatureDefinition == PowerSorcerousRestoration); + + if (Main.Settings.EnableSorcerousRestorationAtLevel5) + { + Sorcerer.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(PowerSorcerousRestoration, 5)); + } + + Sorcerer.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); + } + internal static void SwitchRangerNatureShroud() { Ranger.FeatureUnlocks diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 1358a92678..dafe1304d3 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -306,6 +306,7 @@ public class Settings : UnityModManager.ModSettings public bool EnableSorcererMagicalGuidance { get; set; } public bool EnableSorcererQuickenedAction { get; set; } public bool HideQuickenedActionWhenMetamagicOff { get; set; } + public bool EnableSorcerousRestorationAtLevel5 { get; set; } public bool EnableWarlockToUseOneDndInvocationProgression { get; set; } public bool EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20 { get; set; } public bool EnableWarlockToLearnPatronAtLevel3 { get; set; } diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 6c9f2411a7..db5d857b1a 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -171,6 +171,7 @@ ModUi/&EnableSignatureSpellsRelearn=Aktiviere, dass Signaturzaube ModUi/&EnableSorcererInnateSorceryAt1=Aktiviere Angeborene Zauberei auf Stufe 1. ModUi/&EnableSorcererMagicalGuidance=Aktiviere Magische Führung auf Stufe 5. ModUi/&EnableSorcererQuickenedAction=Aktivieren Sie die Aktion Beschleunigter Zauber, um das Wirken des Hauptaktionszaubers mit angewandter beschleunigter Metamagie zu ermöglichen. +ModUi/&EnableSorcerousRestorationAtLevel5=Aktiviere Zauberhafte Wiederherstellung auf Stufe 5. ModUi/&EnableSortingDungeonMakerAssets=Aktivieren Sie die Sortierung von Assets im Dungeon Maker-Editor. ModUi/&EnableStatsOnHeroTooltip=Statistiken im Tooltip des Helden anzeigen [z. B.: kritische Treffer, kritische Fehlschläge usw.] ModUi/&EnableSumD20OnAlternateVotingSystem=+ Außerdem fügt jeder Held einen D20-Wurf zur Gewichtung hinzu, um ein wenig Zufälligkeit zu erzeugen [Wahlgewicht = Stimmen * Charisma-Modifikator des Helden + D20-Wurf] diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 8baed378cc..829c3ef642 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -140,8 +140,6 @@ Feature/&InvocationPoolFeatWeaponMasterChoiceLearnDescription=Select new weapon Feature/&InvocationPoolFeatWeaponMasterChoiceLearnTitle=Weapon Master Feature/&InvocationPoolKindredSpiritChoiceLearnDescription=Select a Kindred Spirit for your Druid. Feature/&InvocationPoolKindredSpiritChoiceLearnTitle=Kindred Spirit -Feature/&PowerSorcerousRestorationTitle=Sorcerous Restoration -Feature/&PowerSorcerousRestorationDescription=When you finish a Short Rest, you can regain expended Sorcery Points, but no more than a number equal to half your Sorcerer level (round down). Once you use this feature, you can't do so again until you finish a Long Rest. Feature/&InvocationPoolMonkWeaponSpecializationLearnDescription=Select a new weapon type to become a monk weapon for you. Feature/&InvocationPoolMonkWeaponSpecializationLearnTitle=Monk Weapon Specialization Feature/&InvocationPoolPathClawDraconicChoiceLearnDescription=Select a Path of the Claw draconic ancestry. @@ -200,6 +198,8 @@ Feature/&PowerRogueDeviousStrikeObscureTitle=Obscure Feature/&PowerRogueDeviousStrikeTitle=Devious Strike Feature/&PowerSorcererInnateSorceryDescription=As a Bonus Action, you can unleash that magic for 1 minute, during which you gain the following benefits:\n•The spell save DC of your Sorcerer spells increases by 1.\n•You have Advantage on the attack rolls of Sorcerer spells you cast.\n•You can use this feature twice, and you regain all expended uses of it when you finish a Long Rest. Feature/&PowerSorcererInnateSorceryTitle=Innate Sorcery +Feature/&PowerSorcerousRestorationDescription=When you finish a Short Rest, you can regain expended Sorcery Points, but no more than a number equal to half your Sorcerer level (round down). Once you use this feature, you can't do so again until you finish a Long Rest. +Feature/&PowerSorcerousRestorationTitle=Sorcerous Restoration Feature/&PowerTeleportSummonDescription=You can teleport to any location within 5 ft from the caster. Feature/&PowerTeleportSummonTitle=Teleport Feature/&PowerVanishSummonDescription=You can make your summon vanish. diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index e2404ed2c4..47e5745c05 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -171,6 +171,7 @@ ModUi/&EnableSignatureSpellsRelearn=Enable Signature SpellsInnate Sorcery at level 1 ModUi/&EnableSorcererMagicalGuidance=Enable Magical Guidance at level 5 ModUi/&EnableSorcererQuickenedAction=Enable Quickened Spell action to allow cast main action spell with quickened metamagic applied +ModUi/&EnableSorcerousRestorationAtLevel5=Enable Sorcerous Restoration at level 5 ModUi/&EnableSortingDungeonMakerAssets=Enable assets sorting on Dungeon Maker editor ModUi/&EnableStatsOnHeroTooltip=Display stats on hero's tooltip [i.e.: critical hits, critical failures, etc.] ModUi/&EnableSumD20OnAlternateVotingSystem=+ Also each hero adds a D20 roll to weight for a bit of randomness [choice weight = votes * hero Charisma modifier + D20 roll] diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 898957df02..1c1f3ca148 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -171,6 +171,7 @@ ModUi/&EnableSignatureSpellsRelearn=Permite que los hechizos excl ModUi/&EnableSorcererInnateSorceryAt1=Habilitar Hechicería innata en el nivel 1 ModUi/&EnableSorcererMagicalGuidance=Habilitar Guía mágica en el nivel 5 ModUi/&EnableSorcererQuickenedAction=Habilitar la acción Hechizo acelerado para permitir lanzar un hechizo de acción principal con metamagia acelerada aplicada +ModUi/&EnableSorcerousRestorationAtLevel5=Habilitar Restauración hechicera en el nivel 5 ModUi/&EnableSortingDungeonMakerAssets=Habilitar la clasificación de activos en el editor de Dungeon Maker ModUi/&EnableStatsOnHeroTooltip=Mostrar estadísticas en la información sobre herramientas del héroe [es decir: golpes críticos, fallos críticos, etc.] ModUi/&EnableSumD20OnAlternateVotingSystem=+ Además, cada héroe suma un D20 en la tirada para darle un poco de aleatoriedad. [peso de la elección = votos * modificador de Carisma del héroe + tirada del D20] diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 01ed1d113c..437bceb86a 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -171,6 +171,7 @@ ModUi/&EnableSignatureSpellsRelearn=Activer les sorts signatures< ModUi/&EnableSorcererInnateSorceryAt1=Activer la Sorcellerie innée au niveau 1 ModUi/&EnableSorcererMagicalGuidance=Activer la guidance magique au niveau 5 ModUi/&EnableSorcererQuickenedAction=Activez l'action Sort accéléré pour permettre de lancer le sort d'action principal avec la métamagie accélérée appliquée +ModUi/&EnableSorcerousRestorationAtLevel5=Activer la Restauration magique au niveau 5 ModUi/&EnableSortingDungeonMakerAssets=Activer le tri des ressources sur l'éditeur Dungeon Maker ModUi/&EnableStatsOnHeroTooltip=Afficher les statistiques dans l'infobulle du héros [c'est-à-dire : coups critiques, échecs critiques, etc.] ModUi/&EnableSumD20OnAlternateVotingSystem=+ De plus, chaque héros ajoute un jet de D20 pour pondérer un peu le caractère aléatoire [poids du choix = votes * modificateur de Charisme du héros + jet de D20] diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 6b9ebe6aa5..2bafc12671 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -171,6 +171,7 @@ ModUi/&EnableSignatureSpellsRelearn=Abilita la preparazione degli Stregoneria Innata al livello 1 ModUi/&EnableSorcererMagicalGuidance=Abilita Guida magica al livello 5 ModUi/&EnableSorcererQuickenedAction=Abilita l'azione Incantesimo accelerato per consentire il lancio dell'incantesimo di azione principale con metamagia accelerata applicata +ModUi/&EnableSorcerousRestorationAtLevel5=Abilita Restauro Stregonesco al livello 5 ModUi/&EnableSortingDungeonMakerAssets=Abilita l'ordinamento delle risorse nell'editor di Dungeon Maker ModUi/&EnableStatsOnHeroTooltip=Visualizza le statistiche nel tooltip dell'eroe [ad esempio: colpi critici, fallimenti critici, ecc.] ModUi/&EnableSumD20OnAlternateVotingSystem=+ Inoltre ogni eroe aggiunge un tiro di D20 al peso per un po' di casualità [peso della scelta = voti * modificatore del Carisma dell'eroe + tiro di D20] diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index e26d7f1c65..0a3c4ec926 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -171,6 +171,7 @@ ModUi/&EnableSignatureSpellsRelearn=シグネチャー スペル< ModUi/&EnableSorcererInnateSorceryAt1=レベル 1 で 生来の魔術 を有効にする ModUi/&EnableSorcererMagicalGuidance=レベル5で魔法のガイダンスを有効にする ModUi/&EnableSorcererQuickenedAction=クイック呪文アクションを有効にすると、クイック呪文メタマジックを適用したメインアクション呪文をキャストできるようになります。 +ModUi/&EnableSorcerousRestorationAtLevel5=レベル5で魔法による回復を有効にする ModUi/&EnableSortingDungeonMakerAssets=ダンジョンメーカーエディタでアセットの並べ替えを有効にする ModUi/&EnableStatsOnHeroTooltip=ヒーローのツールチップに統計情報を表示します [例: クリティカルヒット、クリティカル失敗など] ModUi/&EnableSumD20OnAlternateVotingSystem=+ また、各ヒーローはランダム性を高めるために D20 ロールを重みに追加します [選択重み = 投票数 * ヒーローのカリスマ修正値 + D20 ロール] diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index dcb03fdae7..470550664a 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -171,6 +171,7 @@ ModUi/&EnableSignatureSpellsRelearn=긴 휴식마다 특징 주 ModUi/&EnableSorcererInnateSorceryAt1=1레벨에서 선천적 마법을 활성화합니다. ModUi/&EnableSorcererMagicalGuidance=레벨 5에서 ​​마법의 안내를 활성화합니다. ModUi/&EnableSorcererQuickenedAction=빠른 주문 동작을 활성화하여 빠른 메타매직이 적용된 주요 동작 주문을 시전할 수 있습니다. +ModUi/&EnableSorcerousRestorationAtLevel5=레벨 5에서 마법 회복을 활성화합니다. ModUi/&EnableSortingDungeonMakerAssets=Dungeon Maker 편집기에서 자산 정렬 활성화 ModUi/&EnableStatsOnHeroTooltip=영웅의 툴팁에 통계 표시 [예: 치명타, 치명타 실패 등] ModUi/&EnableSumD20OnAlternateVotingSystem=+ 또한 각 영웅은 약간의 무작위성을 위해 D20 롤을 가중치에 추가합니다 [선택 가중치 = 투표 * 영웅 카리스마 수정치 + D20 롤] diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 7d058c605e..5b1afb970c 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -171,6 +171,7 @@ ModUi/&EnableSignatureSpellsRelearn=Habilitar Feitiços de Assina ModUi/&EnableSorcererInnateSorceryAt1=Habilitar Feitiçaria Inata no nível 1 ModUi/&EnableSorcererMagicalGuidance=Habilitar Orientação Mágica no nível 5 ModUi/&EnableSorcererQuickenedAction=Habilitar ação Feitiço Acelerado para permitir conjurar feitiço de ação principal com metamagia acelerada aplicada +ModUi/&EnableSorcerousRestorationAtLevel5=Habilitar Restauração Feiticeira no nível 5 ModUi/&EnableSortingDungeonMakerAssets=Habilitar classificação de ativos no editor do Dungeon Maker ModUi/&EnableStatsOnHeroTooltip=Exibir estatísticas na dica de ferramenta do herói [por exemplo: acertos críticos, falhas críticas, etc.] ModUi/&EnableSumD20OnAlternateVotingSystem=+ Além disso, cada herói adiciona um teste de D20 ao peso para um pouco de aleatoriedade [peso da escolha = votos * modificador de Carisma do herói + teste de D20] diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 846a4236b7..366a06a3d7 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -171,6 +171,7 @@ ModUi/&EnableSignatureSpellsRelearn=Включить подготовку Врождённое чародейство на уровне 1 ModUi/&EnableSorcererMagicalGuidance=Включить Волшебное указание на уровне 5 ModUi/&EnableSorcererQuickenedAction=Включить действие Ускоренное заклинание, позволяющее накладывать заклинание основного действия с применением метамагии Ускоренного заклинания. +ModUi/&EnableSorcerousRestorationAtLevel5=Включить Волшебное восстановление на уровне 5 ModUi/&EnableSortingDungeonMakerAssets=Включить сортировку ассетов в редакторе Создателя Подземелий ModUi/&EnableStatsOnHeroTooltip=Отображать статистику на всплывающей подсказке о герое [например: критические удары, критические промахи и т.д.] ModUi/&EnableSumD20OnAlternateVotingSystem=+ Также каждый герой добавляет к весомости результат броска D20 для привнесения элемента случайности [весомость выбора = голоса * модификатор Харизмы героя + бросок D20] diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index f7ad054bde..d175e54095 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -171,6 +171,7 @@ ModUi/&EnableSignatureSpellsRelearn=每次长时间休息时都可准备天生巫术 ModUi/&EnableSorcererMagicalGuidance=在 5 级时启用魔法指引 ModUi/&EnableSorcererQuickenedAction=启用加速法术动作以允许施放应用了加速超魔法的主要动作法术 +ModUi/&EnableSorcerousRestorationAtLevel5=在第 5 级启用魔法恢复 ModUi/&EnableSortingDungeonMakerAssets=在 Dungeon Maker 编辑器上启用资产排序 ModUi/&EnableStatsOnHeroTooltip=在英雄的工具提示上显示统计数据[例如:暴击、暴击失败等] ModUi/&EnableSumD20OnAlternateVotingSystem=+ 此外,每个英雄都会增加一个 D20 掷骰来增加权重,以增加一点随机性 [选择权重 = 投票数 * 英雄魅力调整值 + D20 掷骰] From 925e5adfd931e12c947075b3f101d2c42cc18c65 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 5 Nov 2024 19:15:24 -0800 Subject: [PATCH 78/85] update diagnostics --- .../UnfinishedBusinessBlueprints/Assets.txt | 5 + .../FeatureEldritchMaster.json | 30 ++ .../PowerSorcerousRestoration.json | 353 ++++++++++++++++++ .../PowerWarlockMagicalCunning.json | 202 ++++++++++ 4 files changed, 590 insertions(+) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/FeatureEldritchMaster.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousRestoration.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 86856d2987..961840a0a3 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -2398,6 +2398,7 @@ FeatureDomainOblivionKeeperOfOblivion FeatureDefinition FeatureDefinition 32c09e FeatureDomainSmithBlessedMetal FeatureDefinitionFeatureSet FeatureDefinition af616884-6e4e-54ea-93ec-6e13d7e5a730 FeatureDomainSunRisingDawn FeatureDefinition FeatureDefinition e0364f87-c1d7-559b-b655-4385b5266dcf FeatureDruidBeastSpells FeatureDefinition FeatureDefinition a5f5e743-c777-5fb0-a3c4-0e62fc31724b +FeatureEldritchMaster FeatureDefinition FeatureDefinition ba1d41ab-36db-5335-b7d7-2821bb927cdf FeatureEldritchVersatilityBattlefieldShorthand FeatureDefinition FeatureDefinition d19ee64d-b066-5114-9db8-c91b32f37614 FeatureEldritchVersatilityBlastBreakthrough FeatureDefinition FeatureDefinition dbbcf5b6-c589-598b-9d9e-7f615ea7bd71 FeatureEldritchVersatilityBlastEmpower FeatureDefinitionAdditionalDamage FeatureDefinition 79c3f7d9-7672-5462-abf0-e29b3764059b @@ -3946,6 +3947,7 @@ PowerSorcerousPsionPsychokinesisPoints FeatureDefinitionPower FeatureDefinition PowerSorcerousPsionPsychokinesisPointsDrag FeatureDefinitionPowerSharedPool FeatureDefinition e75b0140-389b-5673-81d2-765c198aafeb PowerSorcerousPsionPsychokinesisPointsPush FeatureDefinitionPowerSharedPool FeatureDefinition bd477ebb-45ec-5712-a201-4cda1faaf27e PowerSorcerousPsionSupremeWill FeatureDefinitionPower FeatureDefinition 753969d5-24af-5926-b5c0-3e155eac5020 +PowerSorcerousRestoration FeatureDefinitionPower FeatureDefinition e2f2af3f-8b75-54c5-ae22-32b4c5aca641 PowerSorcerousSorrAkkathTouchOfDarknessFixed FeatureDefinitionPower FeatureDefinition 347f99ae-b67c-5bb3-be35-18f95f9c96fd PowerSorcerousSorrAkkathTouchOfDarknessPoints FeatureDefinitionPower FeatureDefinition ec1c310d-2e7e-5918-bc22-53cd9a49d836 PowerSorcerousSpellBladeManaShield FeatureDefinitionPower FeatureDefinition 18b21ede-8691-5810-bca3-bede69be17be @@ -4026,6 +4028,7 @@ PowerUseModifierTacticianGambitPoolRemarkableTechnique FeatureDefinitionPowerUse PowerVanishSummon FeatureDefinitionPower FeatureDefinition 2e2b66aa-217d-5063-9073-32f0dca0efb1 PowerVitriolicSphere FeatureDefinitionPower FeatureDefinition 4c5d9fc8-78f1-57e9-831e-737b954d8e16 PowerWarlockEldritchMaster FeatureDefinitionPower FeatureDefinition 8d5bb433-7ede-51cb-bb6b-e04405ea891c +PowerWarlockMagicalCunning FeatureDefinitionPower FeatureDefinition 0ad289b1-119a-5b46-8458-93c9ff03b358 PowerWarMagicDeflectionShroud FeatureDefinitionPower FeatureDefinition b5c601a4-9730-5b46-b6c0-a86559e6c990 PowerWarMagicSurge FeatureDefinitionPower FeatureDefinition 9a1b80e2-b285-55c6-be5c-fcbba31faed4 PowerWayOfSilhouetteDarkness FeatureDefinitionPower FeatureDefinition fb406968-b055-586f-9a1a-2b4e4f28a8ce @@ -6831,6 +6834,7 @@ PowerSorcerousPsionPsychokinesisPoints FeatureDefinitionPower FeatureDefinitionP PowerSorcerousPsionPsychokinesisPointsDrag FeatureDefinitionPowerSharedPool FeatureDefinitionPower e75b0140-389b-5673-81d2-765c198aafeb PowerSorcerousPsionPsychokinesisPointsPush FeatureDefinitionPowerSharedPool FeatureDefinitionPower bd477ebb-45ec-5712-a201-4cda1faaf27e PowerSorcerousPsionSupremeWill FeatureDefinitionPower FeatureDefinitionPower 753969d5-24af-5926-b5c0-3e155eac5020 +PowerSorcerousRestoration FeatureDefinitionPower FeatureDefinitionPower e2f2af3f-8b75-54c5-ae22-32b4c5aca641 PowerSorcerousSorrAkkathTouchOfDarknessFixed FeatureDefinitionPower FeatureDefinitionPower 347f99ae-b67c-5bb3-be35-18f95f9c96fd PowerSorcerousSorrAkkathTouchOfDarknessPoints FeatureDefinitionPower FeatureDefinitionPower ec1c310d-2e7e-5918-bc22-53cd9a49d836 PowerSorcerousSpellBladeManaShield FeatureDefinitionPower FeatureDefinitionPower 18b21ede-8691-5810-bca3-bede69be17be @@ -6889,6 +6893,7 @@ PowerTraditionSurvivalPhysicalPerfection FeatureDefinitionPower FeatureDefinitio PowerVanishSummon FeatureDefinitionPower FeatureDefinitionPower 2e2b66aa-217d-5063-9073-32f0dca0efb1 PowerVitriolicSphere FeatureDefinitionPower FeatureDefinitionPower 4c5d9fc8-78f1-57e9-831e-737b954d8e16 PowerWarlockEldritchMaster FeatureDefinitionPower FeatureDefinitionPower 8d5bb433-7ede-51cb-bb6b-e04405ea891c +PowerWarlockMagicalCunning FeatureDefinitionPower FeatureDefinitionPower 0ad289b1-119a-5b46-8458-93c9ff03b358 PowerWarMagicDeflectionShroud FeatureDefinitionPower FeatureDefinitionPower b5c601a4-9730-5b46-b6c0-a86559e6c990 PowerWarMagicSurge FeatureDefinitionPower FeatureDefinitionPower 9a1b80e2-b285-55c6-be5c-fcbba31faed4 PowerWayOfSilhouetteDarkness FeatureDefinitionPower FeatureDefinitionPower fb406968-b055-586f-9a1a-2b4e4f28a8ce diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/FeatureEldritchMaster.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/FeatureEldritchMaster.json new file mode 100644 index 0000000000..86841ce089 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/FeatureEldritchMaster.json @@ -0,0 +1,30 @@ +{ + "$type": "FeatureDefinition, Assembly-CSharp", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&FeatureEldritchMasterTitle", + "description": "Feature/&FeatureEldritchMasterDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "ba1d41ab-36db-5335-b7d7-2821bb927cdf", + "contentPack": 9999, + "name": "FeatureEldritchMaster" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousRestoration.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousRestoration.json new file mode 100644 index 0000000000..84c227dc1d --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousRestoration.json @@ -0,0 +1,353 @@ +{ + "$type": "FeatureDefinitionPower, Assembly-CSharp", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "Equiped", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 30, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "AllCharacterAndGadgets", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Instantaneous", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "SpellSlots", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "StartOfTurn", + "spellSlotsForm": { + "$type": "SpellSlotsForm, Assembly-CSharp", + "type": "RecovererSorceryHalfLevelUp", + "maxSlotLevel": 5, + "sorceryPointsGain": 1, + "powerDefinition": null + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "Minute1", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "LongRest", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": false, + "showCasting": false, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerSorcerousRestorationTitle", + "description": "Feature/&PowerSorcerousRestorationDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "e2c44d1e3feaef940bd21546d73e51fb", + "m_SubObjectName": "ManaTap", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "e2f2af3f-8b75-54c5-ae22-32b4c5aca641", + "contentPack": 9999, + "name": "PowerSorcerousRestoration" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json new file mode 100644 index 0000000000..6a0e57c87a --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json @@ -0,0 +1,202 @@ + { + "$type": "FeatureDefinitionPower, Assembly-CSharp", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "Equiped", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "AllCharacterAndGadgets", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Instantaneous", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": false, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": null, + "casterSelfParticleReference": null, + "casterQuickSpellParticleReference": null, + "targetParticleReference": null, + "effectParticleReference": null, + "effectSubTargetParticleReference": null, + "zoneParticleReference": null, + "beforeImpactParticleReference": null, + "impactParticleReference": null, + "activeEffectImpactParticleReference": null, + "activeEffectCellStartParticleReference": null, + "activeEffectCellParticleReference": null, + "activeEffectCellEndParticleReference": null, + "activeEffectSurfaceStartParticleReference": null, + "activeEffectSurfaceParticleReference": null, + "activeEffectSurfaceEndParticleReference": null, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": null, + "emissiveBorderCellParticleReference": null, + "emissiveBorderCellEndParticleReference": null, + "emissiveBorderSurfaceStartParticleReference": null, + "emissiveBorderSurfaceParticleReference": null, + "emissiveBorderSurfaceEndParticleReference": null, + "conditionStartParticleReference": null, + "conditionParticleReference": null, + "conditionEndParticleReference": null, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "Minute1", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "LongRest", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": false, + "showCasting": true, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerWarlockMagicalCunningTitle", + "description": "Feature/&PowerWarlockMagicalCunningDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "2bf0219b0c22319438c2677f84818891", + "m_SubObjectName": "ArcaneRecovery", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "0ad289b1-119a-5b46-8458-93c9ff03b358", + "contentPack": 9999, + "name": "PowerWarlockMagicalCunning" +} \ No newline at end of file From 437376954b705aabe55e933b5cdaed0d5e2c13e3 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 5 Nov 2024 19:58:41 -0800 Subject: [PATCH 79/85] add RecoverSorceryHalfLevelDown --- .../PowerSorcerousRestoration.json | 2 +- .../PowerWarlockMagicalCunning.json | 2 +- .../Api/GameExtensions/EnumExtensions.cs | 5 +++++ .../Models/Tabletop2024Context.cs | 3 +++ .../Patches/GuiPatcher.cs | 18 ++++++++++++++++++ .../RulesetImplementationManagerPatcher.cs | 8 ++++++++ .../Translations/de/Others-de.txt | 1 + .../Translations/en/Others-en.txt | 1 + .../Translations/es/Others-es.txt | 1 + .../Translations/fr/Others-fr.txt | 1 + .../Translations/it/Others-it.txt | 1 + .../Translations/ja/Others-ja.txt | 1 + .../Translations/ko/Others-ko.txt | 1 + .../Translations/pt-BR/Others-pt-BR.txt | 1 + .../Translations/ru/Others-ru.txt | 1 + .../Translations/zh-CN/Others-zh-CN.txt | 1 + 16 files changed, 46 insertions(+), 2 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousRestoration.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousRestoration.json index 84c227dc1d..53c7c3ac9a 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousRestoration.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousRestoration.json @@ -78,7 +78,7 @@ "saveOccurence": "StartOfTurn", "spellSlotsForm": { "$type": "SpellSlotsForm, Assembly-CSharp", - "type": "RecovererSorceryHalfLevelUp", + "type": 9000, "maxSlotLevel": 5, "sorceryPointsGain": 1, "powerDefinition": null diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json index 6a0e57c87a..83937b43d2 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json @@ -1,4 +1,4 @@ - { +{ "$type": "FeatureDefinitionPower, Assembly-CSharp", "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs index 6b4c00580d..dd3e63d829 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs @@ -166,6 +166,11 @@ internal enum ExtraMotionType PushDown = 9001 } +internal enum ExtraEffectType +{ + RecoverSorceryHalfLevelDown = 9000 +} + internal enum ExtraPowerAttackHitComputation { // Fixed = PowerAttackHitComputation.Fixed, diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 554ccd18a1..f09f73beb9 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -221,6 +221,9 @@ internal static class Tabletop2024Context internal static void LateLoad() { + PowerSorcerousRestoration.EffectDescription.EffectForms[0].SpellSlotsForm.type = + (SpellSlotsForm.EffectType)ExtraEffectType.RecoverSorceryHalfLevelDown; + BuildBarbarianBrutalStrike(); BuildOneDndGuidanceSubspells(); BuildRogueCunningStrike(); diff --git a/SolastaUnfinishedBusiness/Patches/GuiPatcher.cs b/SolastaUnfinishedBusiness/Patches/GuiPatcher.cs index d17d3ed6f7..f23a1636c1 100644 --- a/SolastaUnfinishedBusiness/Patches/GuiPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GuiPatcher.cs @@ -68,6 +68,24 @@ public static void Postfix(ref string __result, MotionForm motionForm) } } + [HarmonyPatch(typeof(Gui), nameof(Gui.FormatSpellSlotsForm))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class FormatSpellSlotsForm_Patch + { + [UsedImplicitly] + public static void Postfix(ref string __result, SpellSlotsForm spellSlotsForm) + { + //PATCH: format extra motion types + __result = (ExtraEffectType)spellSlotsForm.Type switch + { + ExtraEffectType.RecoverSorceryHalfLevelDown => Gui.Localize( + "Rules/&SpellSlotFormRecoverSorceryHalfLevelDownFormat"), + _ => __result + }; + } + } + //PATCH: always displays a sign on attribute modifiers [HarmonyPatch(typeof(Gui), nameof(Gui.FormatTrendsList))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] diff --git a/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerPatcher.cs index 8fa74cb4d4..370e2ef2c6 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerPatcher.cs @@ -745,6 +745,14 @@ when SharedSpellsContext.RecoverySlots.TryGetValue(formsParams.activeEffect.Name formsParams.sourceCharacter.GainSorceryPoints(sorceryPointsGain); break; } + case (SpellSlotsForm.EffectType)ExtraEffectType.RecoverSorceryHalfLevelDown: + { + var currentValue = originalHero.ClassesAndLevels[Sorcerer]; + var sorceryPointsGain = currentValue / 2; + + formsParams.sourceCharacter.GainSorceryPoints(sorceryPointsGain); + break; + } case SpellSlotsForm.EffectType.RechargePower when formsParams.targetCharacter is RulesetCharacter: { foreach (var usablePower in originalHero.UsablePowers.Where(usablePower => diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index ba602b92bb..5cb8b52215 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -314,6 +314,7 @@ Rules/&SituationalContext9015Format=Ohne Rüstung oder mit leichter Rüstung und Rules/&SituationalContext9016Format=Ist keine Effektquelle mit Nahkampfwaffe in der Haupt- oder Nebenhand: Rules/&SituationalContext9017Format=Konzentriert sich auf den Zauber: Rules/&SituationalContext9018Format=Ist Effektquelle: +Rules/&SpellSlotFormRecoverSorceryHalfLevelDownFormat=Zauberpunkte bis zur Hälfte deiner Zaubererstufe wiederherstellen, abgerundet Rules/&TurnOccurenceEndOfSourceTurnFormat=Endquelle der Wende Screen/&ClassExtraSpellDescriptionFormat=Du kennst diesen Zauber aus dem {0}-Unterricht. Screen/&EditorLocationSize3Title=Riesig [MODIFIZIERT] diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 829c3ef642..7b1b9f656f 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -314,6 +314,7 @@ Rules/&SituationalContext9015Format=Wearing no armor or light armor with two han Rules/&SituationalContext9016Format=Is not effect source with melee weapon in main or off hand: Rules/&SituationalContext9017Format=Is concentrating on spell: Rules/&SituationalContext9018Format=Is effect source: +Rules/&SpellSlotFormRecoverSorceryHalfLevelDownFormat=Recover sorcery points up to half your sorcerer level, rounded down Rules/&TurnOccurenceEndOfSourceTurnFormat=End Source of Turn Screen/&ClassExtraSpellDescriptionFormat=You know this spell from {0} class. Screen/&EditorLocationSize3Title=Huge [MODDED] diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index 0e61eae37e..cbb1c79983 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -314,6 +314,7 @@ Rules/&SituationalContext9015Format=Sin armadura o con armadura ligera y con un Rules/&SituationalContext9016Format=No hay fuente de efecto con arma cuerpo a cuerpo en la mano principal o secundaria: Rules/&SituationalContext9017Format=Se concentra en el hechizo: Rules/&SituationalContext9018Format=¿Es la fuente del efecto?: +Rules/&SpellSlotFormRecoverSorceryHalfLevelDownFormat=Recupera puntos de hechicería hasta la mitad de tu nivel de hechicero, redondeado hacia abajo. Rules/&TurnOccurenceEndOfSourceTurnFormat=Fuente final del turno Screen/&ClassExtraSpellDescriptionFormat=Conoces este hechizo de la clase {0}. Screen/&EditorLocationSize3Title=Enorme [MODIFICADO] diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index aa5b526eef..992eef89f0 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -314,6 +314,7 @@ Rules/&SituationalContext9015Format=Ne portant aucune armure ou une armure lég Rules/&SituationalContext9016Format=N'est pas la source de l'effet avec l'arme de mêlée dans la main principale ou secondaire : Rules/&SituationalContext9017Format=Se concentre sur le sort : Rules/&SituationalContext9018Format=La source de l'effet est : +Rules/&SpellSlotFormRecoverSorceryHalfLevelDownFormat=Récupérez des points de sorcellerie jusqu'à la moitié de votre niveau de sorcier, arrondi à l'inférieur Rules/&TurnOccurenceEndOfSourceTurnFormat=Source de fin de tour Screen/&ClassExtraSpellDescriptionFormat=Vous connaissez ce sort de la classe {0}. Screen/&EditorLocationSize3Title=Énorme [MODIFIÉ] diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index a45ff6ad9d..e4329c461a 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -314,6 +314,7 @@ Rules/&SituationalContext9015Format=Senza armatura o con armatura leggera e con Rules/&SituationalContext9016Format=Non è una fonte di effetti con l'arma da mischia nella mano principale o secondaria: Rules/&SituationalContext9017Format=Si sta concentrando sull'incantesimo: Rules/&SituationalContext9018Format=L'effetto è la fonte: +Rules/&SpellSlotFormRecoverSorceryHalfLevelDownFormat=Recupera punti stregoneria fino alla metà del tuo livello da stregone, arrotondato per difetto Rules/&TurnOccurenceEndOfSourceTurnFormat=Fine della sorgente di svolta Screen/&ClassExtraSpellDescriptionFormat=Conosci questo incantesimo dalla classe {0}. Screen/&EditorLocationSize3Title=Enorme [MODIFICATO] diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index a57e7442e3..df9b033e10 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -314,6 +314,7 @@ Rules/&SituationalContext9015Format=鎧を着ていないか、両手のクォ Rules/&SituationalContext9016Format=メインまたはオフハンドの近接武器の効果ソースではありません: Rules/&SituationalContext9017Format=呪文に集中しています: Rules/&SituationalContext9018Format=効果源: +Rules/&SpellSlotFormRecoverSorceryHalfLevelDownFormat=ソーサリーポイントをソーサラーレベルの半分まで回復します(切り捨て)。 Rules/&TurnOccurenceEndOfSourceTurnFormat=ターンの終了元 Screen/&ClassExtraSpellDescriptionFormat=この呪文は {0} クラスで知っていますね。 Screen/&EditorLocationSize3Title=巨大な[MODD] diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 9aa18f238b..c7a958897f 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -314,6 +314,7 @@ Rules/&SituationalContext9015Format=갑옷을 입지 않거나 양손 육척봉 Rules/&SituationalContext9016Format=주손 또는 보조 손에 근접 무기가 있는 효과 소스가 아닙니다. Rules/&SituationalContext9017Format=주문에 집중하고 있습니다: Rules/&SituationalContext9018Format=효과의 원천은 다음과 같습니다: +Rules/&SpellSlotFormRecoverSorceryHalfLevelDownFormat=마법사 레벨의 절반까지 마법 포인트를 회복합니다(반올림). Rules/&TurnOccurenceEndOfSourceTurnFormat=턴의 최종 소스 Screen/&ClassExtraSpellDescriptionFormat=당신은 {0} 클래스에서 이 주문을 알고 있습니다. Screen/&EditorLocationSize3Title=거대한 [MODDED] diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 074b289492..a50f7be273 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -314,6 +314,7 @@ Rules/&SituationalContext9015Format=Sem armadura ou com armadura leve e com caja Rules/&SituationalContext9016Format=Não é fonte de efeito com arma corpo a corpo na mão principal ou secundária: Rules/&SituationalContext9017Format=Está se concentrando no feitiço: Rules/&SituationalContext9018Format=É fonte de efeito: +Rules/&SpellSlotFormRecoverSorceryHalfLevelDownFormat=Recupere pontos de feitiçaria até a metade do seu nível de feiticeiro, arredondado para baixo Rules/&TurnOccurenceEndOfSourceTurnFormat=Fim da fonte de giro Screen/&ClassExtraSpellDescriptionFormat=Você conhece esse feitiço da classe {0}. Screen/&EditorLocationSize3Title=Enorme [MODIFICADO] diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 6efa9102a8..624862ad90 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -314,6 +314,7 @@ Rules/&SituationalContext9015Format=Не носит брони, либо тол Rules/&SituationalContext9016Format=Не является источником эффекта с рукопашным оружием в одной из рук: Rules/&SituationalContext9017Format=Концентрируется на заклинании: Rules/&SituationalContext9018Format=Источник эффекта: +Rules/&SpellSlotFormRecoverSorceryHalfLevelDownFormat=Восстановите очки колдовства до половины вашего уровня колдуна, округленного в меньшую сторону. Rules/&TurnOccurenceEndOfSourceTurnFormat=Конец источника хода Screen/&ClassExtraSpellDescriptionFormat=Вам известно это заклинание от класса {0}. Screen/&EditorLocationSize3Title=Огромный [Модифицировано] diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 85d4730f77..41ae0ed650 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -314,6 +314,7 @@ Rules/&SituationalContext9015Format=双手持用木棒的无甲或轻甲: Rules/&SituationalContext9016Format=主手或副手近战武器不是效果源: Rules/&SituationalContext9017Format=专注于法术: Rules/&SituationalContext9018Format=是效果来源: +Rules/&SpellSlotFormRecoverSorceryHalfLevelDownFormat=恢复魔法点数,最多可恢复至魔法师等级的一半(四舍五入) Rules/&TurnOccurenceEndOfSourceTurnFormat=来源回合结束 Screen/&ClassExtraSpellDescriptionFormat=你从 {0} 职业知道这个法术。 Screen/&EditorLocationSize3Title=巨型【已修改】 From 2ac26ccd19f2b9dc67aef2b6c1982fda608a15ab Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 5 Nov 2024 20:43:14 -0800 Subject: [PATCH 80/85] improve stroke of luck --- .../Models/Level20Context.cs | 73 ++++++++++++++++++- .../Translations/de/Level20-de.txt | 5 -- .../Translations/en/Level20-en.txt | 8 +- .../Translations/es/Level20-es.txt | 5 -- .../Translations/fr/Level20-fr.txt | 5 -- .../Translations/it/Level20-it.txt | 5 -- .../Translations/ja/Level20-ja.txt | 5 -- .../Translations/ko/Level20-ko.txt | 5 -- .../Translations/pt-BR/Level20-pt-BR.txt | 5 -- .../Translations/ru/Level20-ru.txt | 5 -- .../Translations/zh-CN/Level20-zh-CN.txt | 5 -- 11 files changed, 74 insertions(+), 52 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/Level20Context.cs b/SolastaUnfinishedBusiness/Models/Level20Context.cs index a5f68f6c9b..f4dabc0503 100644 --- a/SolastaUnfinishedBusiness/Models/Level20Context.cs +++ b/SolastaUnfinishedBusiness/Models/Level20Context.cs @@ -1054,7 +1054,8 @@ public void ModifyWeaponAttackMode( } } - private class TryAlterOutcomeAttackRogueStrokeOfLuck(FeatureDefinitionPower power) : ITryAlterOutcomeAttack + private class TryAlterOutcomeAttackRogueStrokeOfLuck(FeatureDefinitionPower power) + : ITryAlterOutcomeAttack, ITryAlterOutcomeAttributeCheck, ITryAlterOutcomeSavingThrow { public int HandlerPriority => -10; @@ -1078,7 +1079,7 @@ public IEnumerator OnTryAlterOutcomeAttack( yield break; } - yield return attacker.MyReactToSpendPower( + yield return helper.MyReactToSpendPower( usablePower, attacker, "RogueStrokeOfLuck", @@ -1094,8 +1095,74 @@ void ReactionValidated() action.AttackSuccessDelta = 0; } } - } + public IEnumerator OnTryAlterAttributeCheck( + GameLocationBattleManager battleManager, + AbilityCheckData abilityCheckData, + GameLocationCharacter defender, + GameLocationCharacter helper) + { + var rulesetHelper = helper.RulesetCharacter; + var usablePower = PowerProvider.Get(power, rulesetHelper); + + if (abilityCheckData.AbilityCheckRollOutcome is not (RollOutcome.Failure or RollOutcome.CriticalFailure) || + helper != defender || + rulesetHelper.GetRemainingUsesOfPower(usablePower) == 0) + { + yield break; + } + + yield return helper.MyReactToSpendPower( + usablePower, + defender, + "RogueStrokeOfLuck", + reactionValidated: ReactionValidated, + battleManager: battleManager); + + yield break; + + void ReactionValidated() + { + abilityCheckData.AbilityCheckRoll = 20; + abilityCheckData.AbilityCheckSuccessDelta = 0; + abilityCheckData.AbilityCheckRollOutcome = RollOutcome.CriticalSuccess; + } + } + + public IEnumerator OnTryAlterOutcomeSavingThrow( + GameLocationBattleManager battleManager, + GameLocationCharacter attacker, + GameLocationCharacter defender, + GameLocationCharacter helper, + SavingThrowData savingThrowData, + bool hasHitVisual) + { + var rulesetHelper = helper.RulesetCharacter; + var usablePower = PowerProvider.Get(power, rulesetHelper); + + if (savingThrowData.SaveOutcome != RollOutcome.Failure || + helper != defender || + rulesetHelper.GetRemainingUsesOfPower(usablePower) == 0) + { + yield break; + } + + yield return helper.MyReactToSpendPower( + usablePower, + defender, + "RogueStrokeOfLuck", + reactionValidated: ReactionValidated, + battleManager: battleManager); + + yield break; + + void ReactionValidated() + { + savingThrowData.SaveOutcomeDelta = 0; + savingThrowData.SaveOutcome = RollOutcome.Success; + } + } + } private sealed class BattleStartedListenerBardSuperiorInspiration(FeatureDefinition featureDefinition) : ICharacterBattleStartedListener diff --git a/SolastaUnfinishedBusiness/Translations/de/Level20-de.txt b/SolastaUnfinishedBusiness/Translations/de/Level20-de.txt index 03d95393de..ff41547bcd 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Level20-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Level20-de.txt @@ -121,7 +121,6 @@ Feature/&PowerPaladinAuraOfCourage18Description=Gewährt Verbündeten im Umkreis Feature/&PowerPaladinAuraOfCourage18Title=Verbesserte Aura des Mutes Feature/&PowerPaladinAuraOfProtection18Description=Sie und Ihre Verbündeten im Umkreis von 30 Fuß können nicht erschreckt werden. Feature/&PowerPaladinAuraOfProtection18Title=Verbesserte Aura des Schutzes -Feature/&PowerRogueStrokeOfLuckDescription=Sie haben ein unheimliches Talent dafür, erfolgreich zu sein, wenn es darauf ankommt. Wenn Ihr Angriff ein Ziel in Reichweite verfehlt, können Sie den Fehlschlag in einen kritischen Treffer verwandeln. Sie können diese Funktion einmal pro kurzer oder langer Pause nutzen. Feature/&PowerRogueStrokeOfLuckTitle=Glückssträhne Feature/&PowerRoguishShadowcasterShadowFormDescription=Ab der 17. Stufe können Sie Ihre Bonusaktion nutzen, um sich für eine Minute auf magische Weise in eine Schattenform zu verwandeln. In dieser Form erhalten Sie die folgenden Vorteile:\n• Sie sind gegen alle Schadensarten außer Strahlungsschaden resistent.\n• Sie sind immun gegen schwieriges Gelände.\n• Sie provozieren keine Gelegenheitsangriffe. Feature/&PowerRoguishShadowcasterShadowFormTitle=Schattenform @@ -153,10 +152,6 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=Sie können 1 Ki zahlen, um 1 Reaction/&SpendPowerPhysicalPerfectionReactDescription=Sie können 1 Ki zahlen, um 1 Trefferpunkt wiederherzustellen. Reaction/&SpendPowerPhysicalPerfectionReactTitle=Heilen Reaction/&SpendPowerPhysicalPerfectionTitle=Körperliche Perfektion -Reaction/&SpendPowerRogueStrokeOfLuckDescription=Nutzen Sie Ihren Glücksfall, um den Angriffswurf automatisch in einen kritischen Treffer zu verwandeln. -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Nutzen Sie Ihren Glücksfall, um den Angriffswurf automatisch in einen kritischen Treffer zu verwandeln. -Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=Gelingen -Reaction/&SpendPowerRogueStrokeOfLuckTitle=Glückssträhne RestActivity/&RestActivitySignatureSpellsDescription=Sie können Ihre Signaturzauber einmal auswählen. RestActivity/&RestActivitySignatureSpellsTitle=Signaturzauber RestActivity/&RestActivitySpellMasteryDescription=Sie können Ihre Liste der Meisterungszauber ändern, wenn Sie eine lange Pause beendet haben. diff --git a/SolastaUnfinishedBusiness/Translations/en/Level20-en.txt b/SolastaUnfinishedBusiness/Translations/en/Level20-en.txt index 4c9c396ac4..8fa22d1b9a 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Level20-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Level20-en.txt @@ -121,7 +121,7 @@ Feature/&PowerPaladinAuraOfCourage18Description=Grant a saving throw bonus to al Feature/&PowerPaladinAuraOfCourage18Title=Improved Aura of Courage Feature/&PowerPaladinAuraOfProtection18Description=You and your allies within 30ft cannot be frightened. Feature/&PowerPaladinAuraOfProtection18Title=Improved Aura of Protection -Feature/&PowerRogueStrokeOfLuckDescription=You have an uncanny knack for succeeding when you need to. If your attack misses a target within range, you can turn the miss into a critical hit. You can use this feature once per short or long rest. +Feature/&PowerRogueStrokeOfLuckDescription=You have an uncanny knack for succeeding when you need to. If you fail a D20 test, you can turn the roll into a 20. Once you use this feature, you can't use it again until you finish a Short Rest or a Long Rest. Feature/&PowerRogueStrokeOfLuckTitle=Stroke of Luck Feature/&PowerRoguishShadowcasterShadowFormDescription=Starting at 17th level, you can use your bonus action to magically transform yourself into a shadowy form for one minute. While in this form, you gain the following benefits:\n• You have resistance to all damage types except radiant.\n• You are immune to difficult terrains.\n• You don't provoke opportunity attacks. Feature/&PowerRoguishShadowcasterShadowFormTitle=Shadow Form @@ -153,9 +153,9 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=You can pay 1 Ki to restore 1 Reaction/&SpendPowerPhysicalPerfectionReactDescription=You can pay 1 Ki to restore 1 hit points. Reaction/&SpendPowerPhysicalPerfectionReactTitle=Heal Reaction/&SpendPowerPhysicalPerfectionTitle=Physical Perfection -Reaction/&SpendPowerRogueStrokeOfLuckDescription=Use your stroke of Luck to automatically turn the attack roll into a critical hit. -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Use your stroke of Luck to automatically turn the attack roll into a critical hit. -Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=Succeed +Reaction/&SpendPowerRogueStrokeOfLuckDescription=Use your stroke of Luck to automatically turn the D20 test into a 20. +Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Use your stroke of Luck to automatically turn the D20 test into a 20. +Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=Stroke of Luck Reaction/&SpendPowerRogueStrokeOfLuckTitle=Stroke of Luck RestActivity/&RestActivitySignatureSpellsDescription=You can select your signature spells once. RestActivity/&RestActivitySignatureSpellsTitle=Signature Spells diff --git a/SolastaUnfinishedBusiness/Translations/es/Level20-es.txt b/SolastaUnfinishedBusiness/Translations/es/Level20-es.txt index e8f5eca7f1..4830396bfe 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Level20-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Level20-es.txt @@ -121,7 +121,6 @@ Feature/&PowerPaladinAuraOfCourage18Description=Otorga una bonificación a la ti Feature/&PowerPaladinAuraOfCourage18Title=Aura de coraje mejorada Feature/&PowerPaladinAuraOfProtection18Description=Ni tú ni tus aliados que se encuentren a 30 pies de distancia podrán tener miedo. Feature/&PowerPaladinAuraOfProtection18Title=Aura de protección mejorada -Feature/&PowerRogueStrokeOfLuckDescription=Tienes una habilidad especial para triunfar cuando lo necesitas. Si tu ataque no alcanza a un objetivo dentro del alcance, puedes convertir el fallo en un golpe crítico. Puedes usar esta característica una vez por descanso corto o largo. Feature/&PowerRogueStrokeOfLuckTitle=Golpe de suerte Feature/&PowerRoguishShadowcasterShadowFormDescription=A partir del nivel 17, puedes usar tu acción adicional para transformarte mágicamente en una forma sombría durante un minuto. Mientras estés en esta forma, obtienes los siguientes beneficios:\n• Tienes resistencia a todos los tipos de daño excepto al radiante.\n• Eres inmune a los terrenos difíciles.\n• No provocas ataques de oportunidad. Feature/&PowerRoguishShadowcasterShadowFormTitle=Forma de sombra @@ -153,10 +152,6 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=Puedes pagar 1 Ki para restaur Reaction/&SpendPowerPhysicalPerfectionReactDescription=Puedes pagar 1 Ki para restaurar 1 punto de vida. Reaction/&SpendPowerPhysicalPerfectionReactTitle=Sanar Reaction/&SpendPowerPhysicalPerfectionTitle=Perfección física -Reaction/&SpendPowerRogueStrokeOfLuckDescription=Usa tu golpe de suerte para convertir automáticamente la tirada de ataque en un golpe crítico. -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Usa tu golpe de suerte para convertir automáticamente la tirada de ataque en un golpe crítico. -Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=Tener éxito -Reaction/&SpendPowerRogueStrokeOfLuckTitle=Golpe de suerte RestActivity/&RestActivitySignatureSpellsDescription=Puedes seleccionar tus hechizos característicos una vez. RestActivity/&RestActivitySignatureSpellsTitle=Hechizos de firma RestActivity/&RestActivitySpellMasteryDescription=Puedes cambiar tu lista de hechizos de maestría cuando terminas un descanso largo. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Level20-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Level20-fr.txt index 1593591201..dea20389ef 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Level20-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Level20-fr.txt @@ -121,7 +121,6 @@ Feature/&PowerPaladinAuraOfCourage18Description=Accordez un bonus de jet de sauv Feature/&PowerPaladinAuraOfCourage18Title=Aura de courage améliorée Feature/&PowerPaladinAuraOfProtection18Description=Vous et vos alliés dans un rayon de 9 mètres ne pouvez pas être effrayés. Feature/&PowerPaladinAuraOfProtection18Title=Aura de protection améliorée -Feature/&PowerRogueStrokeOfLuckDescription=Vous avez un don incroyable pour réussir quand il le faut. Si votre attaque rate une cible à portée, vous pouvez transformer cet échec en coup critique. Vous pouvez utiliser cette fonction une fois par repos court ou long. Feature/&PowerRogueStrokeOfLuckTitle=Coup de chance Feature/&PowerRoguishShadowcasterShadowFormDescription=À partir du niveau 17, vous pouvez utiliser votre action bonus pour vous transformer magiquement en une forme ténébreuse pendant une minute. Sous cette forme, vous bénéficiez des avantages suivants :\n• Vous êtes résistant à tous les types de dégâts, sauf radiants.\n• Vous êtes immunisé contre les terrains difficiles.\n• Vous ne provoquez pas d'attaques d'opportunité. Feature/&PowerRoguishShadowcasterShadowFormTitle=Forme d'ombre @@ -153,10 +152,6 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=Vous pouvez payer 1 Ki pour re Reaction/&SpendPowerPhysicalPerfectionReactDescription=Vous pouvez payer 1 Ki pour restaurer 1 point de vie. Reaction/&SpendPowerPhysicalPerfectionReactTitle=Guérir Reaction/&SpendPowerPhysicalPerfectionTitle=Perfection physique -Reaction/&SpendPowerRogueStrokeOfLuckDescription=Utilisez votre coup de chance pour transformer automatiquement le jet d'attaque en coup critique. -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Utilisez votre coup de chance pour transformer automatiquement le jet d'attaque en coup critique. -Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=Réussir -Reaction/&SpendPowerRogueStrokeOfLuckTitle=Coup de chance RestActivity/&RestActivitySignatureSpellsDescription=Vous pouvez sélectionner vos sorts de signature une fois. RestActivity/&RestActivitySignatureSpellsTitle=Sorts de signature RestActivity/&RestActivitySpellMasteryDescription=Vous pouvez modifier votre liste de sorts de maîtrise lorsque vous terminez un long repos. diff --git a/SolastaUnfinishedBusiness/Translations/it/Level20-it.txt b/SolastaUnfinishedBusiness/Translations/it/Level20-it.txt index c4ae8df7c0..7e180d9d36 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Level20-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Level20-it.txt @@ -121,7 +121,6 @@ Feature/&PowerPaladinAuraOfCourage18Description=Concedi un bonus al tiro salvezz Feature/&PowerPaladinAuraOfCourage18Title=Aura di coraggio migliorata Feature/&PowerPaladinAuraOfProtection18Description=Tu e i tuoi alleati entro 30 piedi non potete essere spaventati. Feature/&PowerPaladinAuraOfProtection18Title=Aura di protezione migliorata -Feature/&PowerRogueStrokeOfLuckDescription=Hai un'abilità straordinaria per avere successo quando serve. Se il tuo attacco manca un bersaglio entro il raggio d'azione, puoi trasformare il colpo mancato in un colpo critico. Puoi usare questa caratteristica una volta per riposo breve o lungo. Feature/&PowerRogueStrokeOfLuckTitle=Colpo di fortuna Feature/&PowerRoguishShadowcasterShadowFormDescription=A partire dal 17° livello, puoi usare la tua azione bonus per trasformarti magicamente in una forma oscura per un minuto. Mentre sei in questa forma, ottieni i seguenti benefici:\n• Hai resistenza a tutti i tipi di danno tranne quello radiante.\n• Sei immune ai terreni difficili.\n• Non provochi attacchi di opportunità. Feature/&PowerRoguishShadowcasterShadowFormTitle=Forma d'ombra @@ -153,10 +152,6 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=Puoi pagare 1 Ki per ripristin Reaction/&SpendPowerPhysicalPerfectionReactDescription=Puoi pagare 1 Ki per ripristinare 1 punto ferita. Reaction/&SpendPowerPhysicalPerfectionReactTitle=Guarire Reaction/&SpendPowerPhysicalPerfectionTitle=Perfezione fisica -Reaction/&SpendPowerRogueStrokeOfLuckDescription=Usa il tuo colpo di Fortuna per trasformare automaticamente il tiro d'attacco in un colpo critico. -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Usa il tuo colpo di Fortuna per trasformare automaticamente il tiro d'attacco in un colpo critico. -Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=Avere successo -Reaction/&SpendPowerRogueStrokeOfLuckTitle=Colpo di fortuna RestActivity/&RestActivitySignatureSpellsDescription=Puoi selezionare i tuoi incantesimi distintivi una sola volta. RestActivity/&RestActivitySignatureSpellsTitle=Incantesimi distintivi RestActivity/&RestActivitySpellMasteryDescription=Puoi modificare l'elenco degli incantesimi di maestria una volta terminato un riposo lungo. diff --git a/SolastaUnfinishedBusiness/Translations/ja/Level20-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Level20-ja.txt index 6b1eb06db7..a7dc04f08a 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Level20-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Level20-ja.txt @@ -121,7 +121,6 @@ Feature/&PowerPaladinAuraOfCourage18Description=30フィート以内の味方に Feature/&PowerPaladinAuraOfCourage18Title=勇気のオーラの向上 Feature/&PowerPaladinAuraOfProtection18Description=あなたと 30 フィート以内の仲間は恐怖を感じません。 Feature/&PowerPaladinAuraOfProtection18Title=改良された保護のオーラ -Feature/&PowerRogueStrokeOfLuckDescription=あなたには、必要なときに成功する不思議な才能があります。攻撃が範囲内のターゲットを逃した場合、そのミスをクリティカル ヒットに変えることができます。この機能は、短い休憩または長い休憩ごとに 1 回使用できます。 Feature/&PowerRogueStrokeOfLuckTitle=幸運のストローク Feature/&PowerRoguishShadowcasterShadowFormDescription=17 レベルからは、ボーナス アクションを使用して、1 分間魔法のように自分自身を影の形に変えることができます。この形態にいる間、次の利点が得られます。\n• 放射を除くすべてのダメージ タイプに対する耐性があります。\n• 困難な地形に対して耐性があります。\n• 機会攻撃を誘発しません。 Feature/&PowerRoguishShadowcasterShadowFormTitle=シャドウフォーム @@ -153,10 +152,6 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=1 Ki を支払うと 1 ヒッ Reaction/&SpendPowerPhysicalPerfectionReactDescription=1 Ki を支払うと 1 ヒット ポイントを回復できます。 Reaction/&SpendPowerPhysicalPerfectionReactTitle=癒す Reaction/&SpendPowerPhysicalPerfectionTitle=肉体的な完璧さ -Reaction/&SpendPowerRogueStrokeOfLuckDescription=幸運を利用して、攻撃ロールを自動的にクリティカル ヒットに変えます。 -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=幸運を利用して、攻撃ロールを自動的にクリティカル ヒットに変えます。 -Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=成功する -Reaction/&SpendPowerRogueStrokeOfLuckTitle=幸運のストローク RestActivity/&RestActivitySignatureSpellsDescription=シグネチャー呪文は 1 回選択できます。 RestActivity/&RestActivitySignatureSpellsTitle=シグネチャースペル RestActivity/&RestActivitySpellMasteryDescription=長い休息が終わったら、マスタリー呪文のリストを変更できます。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Level20-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Level20-ko.txt index b96c62efbb..923d81aced 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Level20-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Level20-ko.txt @@ -121,7 +121,6 @@ Feature/&PowerPaladinAuraOfCourage18Description=30피트 내의 아군에게 내 Feature/&PowerPaladinAuraOfCourage18Title=향상된 용기의 오라 Feature/&PowerPaladinAuraOfProtection18Description=당신과 30피트 내의 당신의 동료들은 겁을 먹을 수 없습니다. Feature/&PowerPaladinAuraOfProtection18Title=향상된 보호의 오라 -Feature/&PowerRogueStrokeOfLuckDescription=당신은 필요할 때 성공하는 기이한 재주를 가지고 있습니다. 당신의 공격이 범위 내의 타겟을 놓친다면, 당신은 그 놓친 것을 치명타로 바꿀 수 있습니다. 당신은 짧은 휴식이나 긴 휴식당 한 번 이 기능을 사용할 수 있습니다. Feature/&PowerRogueStrokeOfLuckTitle=행운의 뇌졸중 Feature/&PowerRoguishShadowcasterShadowFormDescription=17레벨부터 보너스 액션을 사용하여 1분 동안 마법처럼 자신을 그림자 형태로 변신시킬 수 있습니다. 이 형태에서는 다음과 같은 이점을 얻습니다.\n• 복사를 제외한 모든 피해 유형에 대한 저항력을 갖습니다.\n• 어려운 지형에 면역입니다.\n• 기회 공격을 유발하지 않습니다. Feature/&PowerRoguishShadowcasterShadowFormTitle=그림자 형태 @@ -153,10 +152,6 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=1Ki를 지불하면 1HP를 회 Reaction/&SpendPowerPhysicalPerfectionReactDescription=1Ki를 지불하면 1HP를 회복할 수 있습니다. Reaction/&SpendPowerPhysicalPerfectionReactTitle=치유하다 Reaction/&SpendPowerPhysicalPerfectionTitle=육체적 완벽함 -Reaction/&SpendPowerRogueStrokeOfLuckDescription=행운의 타격을 사용해 공격 굴림을 자동으로 치명타로 바꾸세요. -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=행운의 타격을 사용해 공격 굴림을 자동으로 치명타로 바꾸세요. -Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=성공하다 -Reaction/&SpendPowerRogueStrokeOfLuckTitle=행운의 뇌졸중 RestActivity/&RestActivitySignatureSpellsDescription=시그니처 주문은 한 번만 선택할 수 있습니다. RestActivity/&RestActivitySignatureSpellsTitle=시그니처 주문 RestActivity/&RestActivitySpellMasteryDescription=긴 휴식을 마친 후 마스터리 주문 목록을 변경할 수 있습니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Level20-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Level20-pt-BR.txt index 0ee562ac1f..28ce0f6861 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Level20-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Level20-pt-BR.txt @@ -121,7 +121,6 @@ Feature/&PowerPaladinAuraOfCourage18Description=Conceda um bônus de teste de re Feature/&PowerPaladinAuraOfCourage18Title=Aura de Coragem Melhorada Feature/&PowerPaladinAuraOfProtection18Description=Você e seus aliados em um raio de 9 metros não podem ser assustados. Feature/&PowerPaladinAuraOfProtection18Title=Aura de Proteção Aprimorada -Feature/&PowerRogueStrokeOfLuckDescription=Você tem um talento incrível para ter sucesso quando precisa. Se seu ataque errar um alvo dentro do alcance, você pode transformar o erro em um acerto crítico. Você pode usar esse recurso uma vez por descanso curto ou longo. Feature/&PowerRogueStrokeOfLuckTitle=Golpe de sorte Feature/&PowerRoguishShadowcasterShadowFormDescription=A partir do 17º nível, você pode usar sua ação bônus para se transformar magicamente em uma forma sombria por um minuto. Enquanto estiver nesta forma, você ganha os seguintes benefícios:\n• Você tem resistência a todos os tipos de dano, exceto radiante.\n• Você é imune a terrenos difíceis.\n• Você não provoca ataques de oportunidade. Feature/&PowerRoguishShadowcasterShadowFormTitle=Forma de Sombra @@ -153,10 +152,6 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=Você pode pagar 1 Ki para res Reaction/&SpendPowerPhysicalPerfectionReactDescription=Você pode pagar 1 Ki para restaurar 1 ponto de vida. Reaction/&SpendPowerPhysicalPerfectionReactTitle=Curar Reaction/&SpendPowerPhysicalPerfectionTitle=Perfeição Física -Reaction/&SpendPowerRogueStrokeOfLuckDescription=Use seu golpe de sorte para transformar automaticamente a jogada de ataque em um acerto crítico. -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Use seu golpe de sorte para transformar automaticamente a jogada de ataque em um acerto crítico. -Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=Ter sucesso -Reaction/&SpendPowerRogueStrokeOfLuckTitle=Golpe de sorte RestActivity/&RestActivitySignatureSpellsDescription=Você pode selecionar suas magias de assinatura uma vez. RestActivity/&RestActivitySignatureSpellsTitle=Feitiços de Assinatura RestActivity/&RestActivitySpellMasteryDescription=Você pode alterar sua lista de magias de maestria ao terminar um descanso longo. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Level20-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Level20-ru.txt index 40d44ef5ad..bd47c2c59c 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Level20-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Level20-ru.txt @@ -121,7 +121,6 @@ Feature/&PowerPaladinAuraOfCourage18Description=Вы даёте бонус к с Feature/&PowerPaladinAuraOfCourage18Title=Улучшенная аура отваги Feature/&PowerPaladinAuraOfProtection18Description=Вы и ваши союзники в радиусе 30 футов не могут быть испуганы. Feature/&PowerPaladinAuraOfProtection18Title=Улучшенная аура защиты -Feature/&PowerRogueStrokeOfLuckDescription=У вас есть сверхъестественный талант добиваться успеха, когда это необходимо. Если ваша атака не попадает по цели в радиусе действия, вы можете превратить промах в критический удар. Вы можете использовать эту функцию один раз за короткий или длительный отдых. Feature/&PowerRogueStrokeOfLuckTitle=Удача Feature/&PowerRoguishShadowcasterShadowFormDescription=Начиная с 17-го уровня, вы можете использовать бонусное действие, чтобы магическим образом превратиться в призрачную фигуру на одну минуту. В этой форме вы получаете следующие преимущества:\n• Вы обладаете сопротивлением всему урону, кроме урона излучением.\n• Вы не получаете штрафов от труднопроходимой местности.\n• Вы не провоцируете атак по возможности. Feature/&PowerRoguishShadowcasterShadowFormTitle=Форма тени @@ -153,10 +152,6 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=Вы можете потрат Reaction/&SpendPowerPhysicalPerfectionReactDescription=Вы можете потратить 1 очко ци, чтобы восстановить 1 хит. Reaction/&SpendPowerPhysicalPerfectionReactTitle=Лечение Reaction/&SpendPowerPhysicalPerfectionTitle=Физическое совершенство -Reaction/&SpendPowerRogueStrokeOfLuckDescription=Воспользуйтесь своей удачей, чтобы автоматически превратить атаку в критический удар. -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=Воспользуйтесь своей удачей, чтобы автоматически превратить атаку в критический удар. -Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=Преуспейте в атаке -Reaction/&SpendPowerRogueStrokeOfLuckTitle=Удача RestActivity/&RestActivitySignatureSpellsDescription=Вы можете выбрать свои фирменные заклинания один раз. RestActivity/&RestActivitySignatureSpellsTitle=Фирменное заклинание RestActivity/&RestActivitySpellMasteryDescription=Вы можете изменить список мастерских заклинаний, когда закончите продолжительных отдых. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Level20-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Level20-zh-CN.txt index 36a4d64926..3613663e86 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Level20-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Level20-zh-CN.txt @@ -121,7 +121,6 @@ Feature/&PowerPaladinAuraOfCourage18Description=为 30 尺内的盟友提供豁 Feature/&PowerPaladinAuraOfCourage18Title=精通勇气灵光 Feature/&PowerPaladinAuraOfProtection18Description=你和你 30 尺内的盟友不会被恐慌。 Feature/&PowerPaladinAuraOfProtection18Title=精通保护灵光 -Feature/&PowerRogueStrokeOfLuckDescription=当你需要时,你拥有一种不可思议的本领来取得成功。如果你的攻击未击中射程内的目标,你可以将未击中转化为致命一击。你可以在短休或长休期间使用此功能一次。 Feature/&PowerRogueStrokeOfLuckTitle=幸运之击 Feature/&PowerRoguishShadowcasterShadowFormDescription=从第 17 级开始,你可以使用你的附赠动作将你自己化为暗影形态,持续一分钟。在这种形态下,你获得如下增益:\n• 你对除了光耀外的所有类型的伤害都有抗性。\n• 你免疫困难地形。\n• 你不会引发借机攻击。 Feature/&PowerRoguishShadowcasterShadowFormTitle=暗影形态 @@ -153,10 +152,6 @@ Reaction/&SpendPowerPhysicalPerfectionDescription=使用 1 点气回复 1 点生 Reaction/&SpendPowerPhysicalPerfectionReactDescription=使用 1 点气回复 1 点生命值。 Reaction/&SpendPowerPhysicalPerfectionReactTitle=治疗 Reaction/&SpendPowerPhysicalPerfectionTitle=超凡体能 -Reaction/&SpendPowerRogueStrokeOfLuckDescription=使用你的运气来自动将攻击掷骰变成致命一击。 -Reaction/&SpendPowerRogueStrokeOfLuckReactDescription=使用你的运气来自动将攻击掷骰变成致命一击。 -Reaction/&SpendPowerRogueStrokeOfLuckReactTitle=成功命中 -Reaction/&SpendPowerRogueStrokeOfLuckTitle=幸运之击 RestActivity/&RestActivitySignatureSpellsDescription=你可以选择一次你的招牌法术。 RestActivity/&RestActivitySignatureSpellsTitle=招牌法术 RestActivity/&RestActivitySpellMasteryDescription=当你完成长休后,你可以改变你的精通法术列表。 From 3d4d2e1761f37ad05523916179952eba4ccb2f4d Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 5 Nov 2024 21:00:33 -0800 Subject: [PATCH 81/85] minor fixes --- .../Models/Tabletop2024Context.cs | 7 +++++-- SolastaUnfinishedBusiness/Settings/empty.xml | 11 ++++++----- SolastaUnfinishedBusiness/Settings/zappastuff.xml | 7 ++++++- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index f09f73beb9..cafcb65d34 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -261,6 +261,9 @@ internal static void LateLoad() SwitchOneDndSpellBarkskin(); SwitchOneDndSpellGuidance(); SwitchOneDndSurprisedEnforceDisadvantage(); + SwitchSorcererInnateSorcery(); + SwitchSorcerousRestorationAtLevel5(); + SwitchWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20(); SwitchOneDndWarlockPatronLearningLevel(); SwitchOneDndWarlockInvocationsProgression(); SwitchOneDndWizardScholar(); @@ -269,9 +272,9 @@ internal static void LateLoad() SwitchRangerNatureShroud(); SwitchRogueBlindSense(); SwitchRogueCunningStrike(); + SwitchRogueSlipperyMind(); SwitchRogueSteadyAim(); SwitchSecondWindToUseOneDndUsagesProgression(); - SwitchSorcererInnateSorcery(); } private static void LoadSecondWindToUseOneDndUsagesProgression() @@ -533,7 +536,7 @@ internal static void SwitchWarlockMagicalCunningAtLevel2AndImprovedEldritchMaste x.FeatureDefinition == FeatureEldritchMaster || x.FeatureDefinition == Level20Context.PowerWarlockEldritchMaster); - if (!Main.Settings.EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20) + if (Main.Settings.EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20) { Warlock.FeatureUnlocks.AddRange( new FeatureUnlockByLevel(PowerWarlockMagicalCunning, 2), diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index a69b79f459..3ef999709c 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -546,6 +546,7 @@ en false false + false false false false @@ -585,14 +586,18 @@ false false false + false false false false false false false - false + false false + false + + false false false false @@ -1046,8 +1051,4 @@ false false false - 0 - false - false - false \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index c550c67d69..56c623b6a0 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -588,6 +588,7 @@ en false true + true true true true @@ -627,14 +628,18 @@ true true false + true true true true true true true - true + true true + true + + true true true false From 401ef790895cb1cf1738902c1d0bea6918cb6fe6 Mon Sep 17 00:00:00 2001 From: BradS Date: Wed, 6 Nov 2024 03:58:13 -0800 Subject: [PATCH 82/85] Fix Beast Barbarian reaction power texts --- SolastaUnfinishedBusiness/Subclasses/PathOfTheBeast.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheBeast.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheBeast.cs index 514e86a8f9..c3230f68f2 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheBeast.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheBeast.cs @@ -705,7 +705,7 @@ attackMode.SourceDefinition is not ItemDefinition item || usablePower, [defender], attacker, - "InfectiousFury", + "PowerInfectiousFury", battleManager: battleManager); } } @@ -838,7 +838,7 @@ public IEnumerator OnActionFinishedByMe(CharacterAction characterAction) usablePower, targets, character, - "CallTheHunt", + "PowerCallTheHunt", reactionValidated: ReactionValidated); yield break; From 675063e037d4306ee35d46f806789050dc540536 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 6 Nov 2024 15:58:40 -0800 Subject: [PATCH 83/85] many minor fixes after beta v37 QA --- .../Models/FixesContext.cs | 3 --- .../Models/SpellsContext.cs | 4 ++- .../Models/Tabletop2024Context.cs | 24 +++++++++-------- .../CharacterBuildingManagerPatcher.cs | 3 --- ...haracterStageClassSelectionPanelPatcher.cs | 26 +++++++++++++++++++ .../Spells/SpellBuildersCantrips.cs | 2 +- 6 files changed, 43 insertions(+), 19 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/FixesContext.cs b/SolastaUnfinishedBusiness/Models/FixesContext.cs index 90a46d3a42..122a2629b8 100644 --- a/SolastaUnfinishedBusiness/Models/FixesContext.cs +++ b/SolastaUnfinishedBusiness/Models/FixesContext.cs @@ -601,11 +601,8 @@ private static void FixMinorMagicEffectsIssues() private static void FixMeleeRetaliationWithReach() { // max possible reach in game is 15 ft - DamageAffinityFireImmunityRemorhaz.retaliateRangeCells = 3; - DamageAffinityFireImmunityYoungRemorhaz.retaliateRangeCells = 3; DamageAffinityPatronTreePiercingBranch.retaliateRangeCells = 3; DamageAffinityPatronTreePiercingBranchOneWithTheTree.retaliateRangeCells = 3; - DamageAffinityWightLord_NecroticImmunity.retaliateRangeCells = 3; } private static void FixMountaineerBonusShoveRestrictions() diff --git a/SolastaUnfinishedBusiness/Models/SpellsContext.cs b/SolastaUnfinishedBusiness/Models/SpellsContext.cs index 95b4a2d3e0..a8e0983562 100644 --- a/SolastaUnfinishedBusiness/Models/SpellsContext.cs +++ b/SolastaUnfinishedBusiness/Models/SpellsContext.cs @@ -251,8 +251,10 @@ internal static void LateLoad() RegisterSpell(kvp.Key, kvp.Value.Count, kvp.Value.ToArray()); } + // kept for backward compatibility + _ = BuildAcidClaw(); + // cantrips - RegisterSpell(BuildAcidClaw(), 0, SpellListDruid); RegisterSpell(AirBlast, 0, SpellListDruid, SpellListSorcerer, SpellListWizard); RegisterSpell(BuildBladeWard(), 0, SpellListBard, SpellListSorcerer, SpellListWarlock, SpellListWizard); RegisterSpell(BuildBoomingBlade(), 0, SpellListSorcerer, SpellListWarlock, SpellListWizard, diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index cafcb65d34..785d09edf5 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -204,6 +204,11 @@ internal static class Tabletop2024Context .Create("PowerWarlockMagicalCunning") .SetGuiPresentation(Category.Feature, PowerWizardArcaneRecovery) .SetUsesFixed(ActivationTime.Minute1, RechargeRate.LongRest) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetCasterEffectParameters(PowerSorcererManaPainterDrain) + .Build()) .AddCustomSubFeatures(new PowerOrSpellFinishedByMeMagicalCunning()) .AddToDB(); @@ -215,8 +220,6 @@ internal static class Tabletop2024Context private static readonly FeatureDefinitionPower PowerSorcerousRestoration = FeatureDefinitionPowerBuilder .Create(PowerSorcererManaPainterTap, "PowerSorcerousRestoration") .SetOrUpdateGuiPresentation(Category.Feature) - .SetUsesFixed(ActivationTime.Minute1, RechargeRate.LongRest) - .AddCustomSubFeatures(new PowerOrSpellFinishedByMeMagicalCunning()) .AddToDB(); internal static void LateLoad() @@ -720,7 +723,7 @@ internal static void SwitchOneDndEnableBardCounterCharmAsReactionAtLevel7() var level = Main.Settings.EnableBardCounterCharmAsReactionAtLevel7 ? 7 : 6; Bard.FeatureUnlocks.FirstOrDefault(x => x.FeatureDefinition == PowerBardCountercharm)!.level = level; - if (Main.Settings.EnableBardExpertiseOneLevelBefore) + if (Main.Settings.EnableBardCounterCharmAsReactionAtLevel7) { PowerBardCountercharm.GuiPresentation.description = "Feature/&PowerBardCountercharmExtendedDescription"; PowerBardCountercharm.activationTime = ActivationTime.NoCost; @@ -1055,8 +1058,8 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( x.FormType == EffectForm.EffectFormType.Condition && (x.ConditionForm.ConditionDefinition.IsSubtypeOf(ConditionDefinitions.ConditionCharmed.Name) || x.ConditionForm.ConditionDefinition.IsSubtypeOf(ConditionDefinitions.ConditionFrightened.Name))) && - helper.CanReact() && - helper.CanPerceiveTarget(defender)) + !helper.IsOppositeSide(defender.Side) && + helper.CanReact()) { yield return helper.MyReactToDoNothing( ExtraActionId.DoNothingReaction, @@ -1098,9 +1101,8 @@ private static string FormatReactionDescription( { var text = defender == helper ? "Self" : "Ally"; - return $"CustomReactionBardCounterCharmDescription{text}" - .Formatted(Category.Reaction, defender.Name, attacker?.Name ?? ReactionRequestCustom.EnvTitle, - sourceTitle); + return $"CustomReactionBardCounterCharmDescription{text}".Formatted( + Category.Reaction, defender.Name, attacker?.Name ?? ReactionRequestCustom.EnvTitle, sourceTitle); } } @@ -1122,9 +1124,9 @@ proficiencyName is not (SkillDefinitions.Arcana or SkillDefinitions.Nature)) return; } - var intelligence = character.TryGetAttributeValue(AttributeDefinitions.Intelligence); - var intMod = AttributeDefinitions.ComputeAbilityScoreModifier(intelligence); - var modifier = Math.Max(intMod, 1); + var wisdom = character.TryGetAttributeValue(AttributeDefinitions.Wisdom); + var wisMod = AttributeDefinitions.ComputeAbilityScoreModifier(wisdom); + var modifier = Math.Max(wisMod, 1); rollModifier += modifier; diff --git a/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs index 86544698b3..caafde0388 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs @@ -523,9 +523,6 @@ private static void ResetCantripsPool(RulesetCharacterHero hero, string poolName [UsedImplicitly] public static bool Prefix([NotNull] RulesetCharacterHero hero) { - //PATCH: avoid Druid Primal Order to break level up with the cantrip pool it gets - ResetCantripsPool(hero, $"{AttributeDefinitions.TagClass}PrimalOrder"); - //PATCH: avoid Domain Nature to break level up with the cantrip pool it gets ResetCantripsPool(hero, $"{AttributeDefinitions.TagSubclass}Cleric1DomainNatureDomainNature"); diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageClassSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageClassSelectionPanelPatcher.cs index 0a040acaa8..fb131351aa 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageClassSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageClassSelectionPanelPatcher.cs @@ -61,6 +61,32 @@ public static void Prefix([NotNull] CharacterStageClassSelectionPanel __instance } } + [HarmonyPatch(typeof(CharacterStageClassSelectionPanel), + nameof(CharacterStageClassSelectionPanel.RefreshCharacter))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class RefreshCharacter_Patch + { + private static void ResetCantripsPool(RulesetCharacterHero hero, string poolName) + { + var buildingData = hero.GetHeroBuildingData(); + + if (buildingData.PointPoolStacks.TryGetValue(HeroDefinitions.PointsPoolType.Cantrip, out var pointPool)) + { + pointPool.ActivePools.Remove(poolName); + } + } + + [UsedImplicitly] + public static void Prefix(CharacterStageClassSelectionPanel __instance) + { + var hero = __instance.currentHero; + + //PATCH: avoid Druid Primal Order to break level up with the cantrip pool it gets + ResetCantripsPool(hero, $"{AttributeDefinitions.TagClass}Druid1PrimalOrder"); + } + } + [HarmonyPatch(typeof(CharacterStageClassSelectionPanel), nameof(CharacterStageClassSelectionPanel.FillClassFeatures))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 02444d3ba4..6eee37667f 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -39,7 +39,7 @@ internal static SpellDefinition BuildAcidClaw() var spell = SpellDefinitionBuilder .Create(NAME) - .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.AcidClaws, 128)) + .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.AcidClaws, 128), hidden: true) .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolTransmutation) .SetSpellLevel(0) .SetCastingTime(ActivationTime.Action) From eb2508e82c14379f783ed000af996dee60bd15e7 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 6 Nov 2024 16:31:30 -0800 Subject: [PATCH 84/85] fix Counterspell integration with lighting and obscurement rules --- .../ChangelogHistory.txt | 1 + .../GameLocationBattleManagerPatcher.cs | 7 +++++++ .../Patches/RulesetCharacterPatcher.cs | 20 +++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 5be68827db..be1c87adb8 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -7,6 +7,7 @@ - fixed campaigns translator to avoid location titles and break campaigns - fixed Charmed by Hypnotic Pattern not getting considered on incapacitated checks [VANILLA] - fixed Circle of Wildfire spirit allowed actions when summoner is incapacitated +- fixed Counterspell integration with lighting and obscurement rules - fixed Dispel Magic and similar not considering proxies - fixed melee and range hit powers damage form dice advancement under multiclass scenarios - fixed recurrent effects interaction with immunity from proxies [VANILLA] diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationBattleManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationBattleManagerPatcher.cs index feb0281920..91d29bc506 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationBattleManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationBattleManagerPatcher.cs @@ -1006,6 +1006,9 @@ public static IEnumerator Postfix( [UsedImplicitly] public static class HandleSpellCast_Patch { + //PATCH: can only cast counter spell if self can perceive caster when lighting rules are enabled + public static GameLocationCharacter Caster { get; private set; } + [UsedImplicitly] public static IEnumerator Postfix( IEnumerator values, @@ -1015,11 +1018,15 @@ public static IEnumerator Postfix( RulesetSpellRepertoire selectedRepertoire, SpellDefinition selectedSpellDefinition) { + Caster = caster; + while (values.MoveNext()) { yield return values.Current; } + Caster = null; + // This also allows utilities out of battle var characterService = ServiceRepository.GetService(); var allyCharacters = characterService.PartyCharacters.Select(x => x.RulesetCharacter); diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs index d823561b1e..b12918189d 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs @@ -272,6 +272,26 @@ public static void Prefix(RulesetCharacter __instance) } } + //PATCH: can only cast counter spell if self can perceive caster when lighting rules are enabled + [HarmonyPatch(typeof(RulesetCharacter), nameof(RulesetCharacter.CanCastCounterSpell))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class CanCastCounterSpell_Patch + { + [UsedImplicitly] + public static void Postfix(RulesetCharacter __instance, ref bool __result) + { + if (!__result || !Main.Settings.UseOfficialLightingObscurementAndVisionRules) + { + return; + } + + var glc = GameLocationCharacter.GetFromActor(__instance); + + __result = glc.CanPerceiveTarget(GameLocationBattleManagerPatcher.HandleSpellCast_Patch.Caster); + } + } + [HarmonyPatch(typeof(RulesetCharacter), nameof(RulesetCharacter.IsWieldingMonkWeapon))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] [UsedImplicitly] From be028f83e118969e420108e47d43950f5f6ab378 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 6 Nov 2024 16:51:39 -0800 Subject: [PATCH 85/85] minor tweaks and prepare for `1.5.97.37` release --- .../PowerSorcerousRestoration.json | 2 +- .../PowerWarlockMagicalCunning.json | 179 ++++- .../SpellDefinition/AcidClaws.json | 2 +- Documentation/Classes.md | 2 +- Documentation/Spells.md | 660 +++++++++--------- SolastaUnfinishedBusiness/Info.json | 2 +- .../Patches/RulesetCharacterPatcher.cs | 2 +- .../SolastaUnfinishedBusiness.csproj | 2 +- .../Subclasses/DomainNature.cs | 1 - 9 files changed, 485 insertions(+), 367 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousRestoration.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousRestoration.json index 53c7c3ac9a..12713cb41e 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousRestoration.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousRestoration.json @@ -290,7 +290,7 @@ "delegatedToAction": false, "surrogateToSpell": null, "triggeredBySpecialMove": false, - "activationTime": "Minute1", + "activationTime": "Rest", "autoActivationRequiredTargetSenseType": "None", "autoActivationRequiredTargetCreatureTag": "", "autoActivationPowerTag": "", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json index 83937b43d2..4339a6c600 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWarlockMagicalCunning.json @@ -17,7 +17,7 @@ "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "AllCharacterAndGadgets", + "targetFilteringMethod": "CharacterOnly", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, @@ -41,7 +41,7 @@ "grantedConditionOnSave": null, "rollSaveOnlyIfRelevantForms": false, "hasShoveRoll": false, - "createdByCharacter": false, + "createdByCharacter": true, "difficultyClassComputation": "SpellCastingFeature", "savingThrowDifficultyAbility": "Wisdom", "fixedSavingThrowDifficultyClass": 15, @@ -85,33 +85,158 @@ "offsetImpactTimePerTarget": 0.0, "effectParticleParameters": { "$type": "EffectParticleParameters, Assembly-CSharp", - "casterParticleReference": null, - "casterSelfParticleReference": null, - "casterQuickSpellParticleReference": null, - "targetParticleReference": null, - "effectParticleReference": null, - "effectSubTargetParticleReference": null, - "zoneParticleReference": null, - "beforeImpactParticleReference": null, - "impactParticleReference": null, - "activeEffectImpactParticleReference": null, - "activeEffectCellStartParticleReference": null, - "activeEffectCellParticleReference": null, - "activeEffectCellEndParticleReference": null, - "activeEffectSurfaceStartParticleReference": null, - "activeEffectSurfaceParticleReference": null, - "activeEffectSurfaceEndParticleReference": null, + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "370bd5612dbadd74e83596f0937f0373", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, "activeEffectSurfaceParticlePerIndex": "", "activeEffectSurfaceParticlePerIndexCount": 0, - "emissiveBorderCellStartParticleReference": null, - "emissiveBorderCellParticleReference": null, - "emissiveBorderCellEndParticleReference": null, - "emissiveBorderSurfaceStartParticleReference": null, - "emissiveBorderSurfaceParticleReference": null, - "emissiveBorderSurfaceEndParticleReference": null, - "conditionStartParticleReference": null, - "conditionParticleReference": null, - "conditionEndParticleReference": null, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, "forceApplyZoneParticle": false, "applyEmissionColorOnWeapons": false, "emissionColor": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/AcidClaws.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/AcidClaws.json index d20e437572..641d68d8ac 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/AcidClaws.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/AcidClaws.json @@ -353,7 +353,7 @@ "vocalSpellSemeType": "Attack", "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", - "hidden": false, + "hidden": true, "title": "Spell/&AcidClawsTitle", "description": "Spell/&AcidClawsDescription", "spriteReference": { diff --git a/Documentation/Classes.md b/Documentation/Classes.md index 57236b8d46..2a69a045b9 100644 --- a/Documentation/Classes.md +++ b/Documentation/Classes.md @@ -1535,7 +1535,7 @@ Choose between increasing your ability scores or gaining a bonus feat. * Stroke of Luck -You have an uncanny knack for succeeding when you need to. If your attack misses a target within range, you can turn the miss into a critical hit. You can use this feature once per short or long rest. +You have an uncanny knack for succeeding when you need to. If you fail a D20 test, you can turn the roll into a 20. Once you use this feature, you can't use it again until you finish a Short Rest or a Long Rest. diff --git a/Documentation/Spells.md b/Documentation/Spells.md index eeb0296e59..095203ca11 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -1,322 +1,316 @@ -# 1. - Acid Claws (S) level 0 Transmutation [UB] - -**[Druid]** - -Your fingernails sharpen, ready to deliver a corrosive attack. Make a melee spell attack against one creature within 5 ft of you. On a hit, the target takes 1d8 acid damage and has AC lowered by 1 for 1 round (not stacking). - -# 2. - Acid Splash (V,S) level 0 Conjuration [SOL] +# 1. - Acid Splash (V,S) level 0 Conjuration [SOL] **[Artificer, Sorcerer, Wizard]** Launch an acid bolt. -# 3. - Annoying Bee (V,S) level 0 Illusion [SOL] +# 2. - Annoying Bee (V,S) level 0 Illusion [SOL] **[Druid, Sorcerer, Wizard]** The target sees an illusional bee harassing them and has disadvantage on concentration checks until the start of their next turn. -# 4. - *Blade Ward* © (V,S) level 0 Abjuration [UB] +# 3. - *Blade Ward* © (V,S) level 0 Abjuration [UB] **[Bard, Sorcerer, Warlock, Wizard]** You extend your hand and trace a sigil of warding in the air. Until the end of your next turn, you have resistance against bludgeoning, piercing, and slashing damage dealt by weapon attacks. -# 5. - *Booming Blade* © (M,S) level 0 Evocation [UB] +# 4. - *Booming Blade* © (M,S) level 0 Evocation [UB] **[Artificer, Sorcerer, Warlock, Wizard]** You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 ft distance. On a hit, the target suffers the weapon attack's normal effects and then becomes sheathed in booming energy until the start of your next turn. If the target willingly moves 5 ft or more before then, the target takes 1d8 thunder damage, and the spell ends. At 5th level, the melee attack deals an extra 1d8 thunder damage to the target on a hit, and the damage the target takes for moving increases to 2d8. Both damage rolls increase by 1d8 at 11th and 17th levels. -# 6. - Chill Touch (V,S) level 0 Necromancy [SOL] +# 5. - Chill Touch (V,S) level 0 Necromancy [SOL] **[Sorcerer, Warlock, Wizard]** Deal damage to one enemy and prevent healing for a limited time. -# 7. - *Create Bonfire* © (V,S) level 0 Conjuration [Concentration] [UB] +# 6. - *Create Bonfire* © (V,S) level 0 Conjuration [Concentration] [UB] **[Artificer, Druid, Sorcerer, Warlock, Wizard]** You create a bonfire on ground that you can see within range. Until the spell ends, the bonfire fills a 5-foot cube. Any creature in the bonfire's space when you cast the spell must succeed on a Dexterity saving throw or take 1d8 fire damage. A creature must also make the saving throw when it enters the bonfire's space or ends its turn there. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 8. - Dancing Lights (V,S) level 0 Evocation [Concentration] [SOL] +# 7. - Dancing Lights (V,S) level 0 Evocation [Concentration] [SOL] **[Bard, Sorcerer, Wizard]** Create dancing lights that move at your command. -# 9. - Dazzle (S) level 0 Illusion [SOL] +# 8. - Dazzle (S) level 0 Illusion [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Lower a target's AC and prevent reaction until the start of its next turn. -# 10. - Eldritch Blast (V,S) level 0 Evocation [SOL] +# 9. - Eldritch Blast (V,S) level 0 Evocation [SOL] **[Warlock]** Unleash a beam of crackling energy with a ranged spell attack against the target. On a hit, it takes 1d10 force damage. -# 11. - Fire Bolt (V,S) level 0 Evocation [SOL] +# 10. - Fire Bolt (V,S) level 0 Evocation [SOL] **[Artificer, Sorcerer, Wizard]** Launch a fire bolt. -# 12. - *Green-Flame Blade* © (M,S) level 0 Evocation [UB] +# 11. - *Green-Flame Blade* © (M,S) level 0 Evocation [UB] **[Artificer, Sorcerer, Warlock, Wizard]** You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 ft distance. On a hit, the target suffers the weapon attack's normal effects, and you can cause green fire to leap from the target to a different creature of your choice that you can see within 5 ft of it. The second creature takes fire damage equal to your spellcasting ability modifier. At 5th level, the melee attack deals an extra 1d8 fire damage to the target on a hit, and the fire damage to the second creature increases to 1d8 + your spellcasting ability modifier. Both damage rolls increase by 1d8 at 11th and 17th levels. -# 13. - Guidance (V,S) level 0 Divination [Concentration] [SOL] +# 12. - Guidance (V,S) level 0 Divination [Concentration] [SOL] **[Artificer, Cleric, Druid]** Increase an ally's ability checks for a limited time. -# 14. - *Gust* © (V,S) level 0 Transmutation [UB] +# 13. - *Gust* © (V,S) level 0 Transmutation [UB] **[Druid, Sorcerer, Wizard]** Fire a blast of focused air at your target. -# 15. - Illuminating Sphere (V,S) level 0 Enchantment [UB] +# 14. - Illuminating Sphere (V,S) level 0 Enchantment [UB] **[Bard, Sorcerer, Wizard]** Causes light sources such as torches and mana lamps in the area of effect to light up. -# 16. - *Infestation* © (V,S) level 0 Conjuration [UB] +# 15. - *Infestation* © (V,S) level 0 Conjuration [UB] **[Druid, Sorcerer, Warlock, Wizard]** You cause a cloud of mites, fleas, and other parasites to appear momentarily on one creature you can see within range. The target must succeed on a Constitution saving throw, or it takes 1d6 poison damage and moves 5 ft in a random direction. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 17. - Light (V) level 0 Evocation [SOL] +# 16. - Light (V) level 0 Evocation [SOL] **[Bard, Cleric, Sorcerer, Wizard]** An object you can touch emits a powerful light for a limited time. -# 18. - *Lightning Lure* © (V) level 0 Evocation [UB] +# 17. - *Lightning Lure* © (V) level 0 Evocation [UB] **[Artificer, Sorcerer, Warlock, Wizard]** You create a lash of lightning energy that strikes at one creature of your choice that you can see within 15 ft of you. The target must succeed on a Strength saving throw or be pulled up to 10 ft in a straight line toward you and then take 1d8 lightning damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 19. - *Mind Sliver* © (V) level 0 Enchantment [UB] +# 18. - *Mind Sliver* © (V) level 0 Enchantment [UB] **[Sorcerer, Warlock, Wizard]** You drive a disorienting spike of psychic energy into the mind of one creature you can see within range. The target must succeed on an Intelligence saving throw or take 1d6 psychic damage and subtract 1d4 from the next saving throw it makes before the end of your next turn. -# 20. - Minor Lifesteal (V,S) level 0 Necromancy [UB] +# 19. - Minor Lifesteal (V,S) level 0 Necromancy [UB] **[Bard, Sorcerer, Warlock, Wizard]** You drain vital energy from a nearby enemy creature. Make a melee spell attack against a creature within 5 ft of you. On a hit, the creature takes 1d6 necrotic damage, and you heal for half the damage dealt (rounded down). This spell has no effect on undead and constructs. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 21. - Poison Spray (V,S) level 0 Conjuration [SOL] +# 20. - Poison Spray (V,S) level 0 Conjuration [SOL] **[Artificer, Druid, Sorcerer, Warlock, Wizard]** Fire a poison spray at an enemy you can see, within range. -# 22. - *Primal Savagery* © (S) level 0 Transmutation [UB] +# 21. - *Primal Savagery* © (S) level 0 Transmutation [UB] **[Druid]** You channel primal magic to cause your teeth or fingernails to sharpen, ready to deliver a corrosive attack. Make a melee spell attack against one creature within 5 ft of you. On a hit, the target takes 1d10 acid damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 23. - Produce Flame (V,S) level 0 Conjuration [SOL] +# 22. - Produce Flame (V,S) level 0 Conjuration [SOL] **[Druid]** Conjures a flickering flame in your hand, which generates light or can be hurled to inflict fire damage. -# 24. - Ray of Frost (V,S) level 0 Evocation [SOL] +# 23. - Ray of Frost (V,S) level 0 Evocation [SOL] **[Artificer, Sorcerer, Wizard]** Launch a freezing ray at an enemy to damage and slow them. -# 25. - Resistance (V,S) level 0 Abjuration [Concentration] [SOL] +# 24. - Resistance (V,S) level 0 Abjuration [Concentration] [SOL] **[Artificer, Cleric, Druid]** Grant an ally a one-time bonus to saving throws. -# 26. - Sacred Flame (V,S) level 0 Evocation [SOL] +# 25. - Sacred Flame (V,S) level 0 Evocation [SOL] **[Cleric]** Strike an enemy with radiant damage. -# 27. - *Sapping Sting* © (V,S) level 0 Necromancy [UB] +# 26. - *Sapping Sting* © (V,S) level 0 Necromancy [UB] **[Wizard]** You sap the vitality of one creature you can see in range. The target must succeed on a Constitution saving throw or take 1d4 necrotic damage and fall prone. -# 28. - Shadow Armor (V,S) level 0 Abjuration [SOL] +# 27. - Shadow Armor (V,S) level 0 Abjuration [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Grants 3 temporary hit points for one minute. -# 29. - Shadow Dagger (V,S) level 0 Illusion [SOL] +# 28. - Shadow Dagger (V,S) level 0 Illusion [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Launches an illusionary dagger that causes psychic damage. -# 30. - Shillelagh (V,S) level 0 Transmutation [SOL] +# 29. - Shillelagh (V,S) level 0 Transmutation [SOL] **[Druid]** Conjures a magical club whose attacks are magical and use your spellcasting ability instead of strength. -# 31. - Shine (V,S) level 0 Conjuration [SOL] +# 30. - Shine (V,S) level 0 Conjuration [SOL] **[Cleric, Sorcerer, Wizard]** An enemy you can see becomes luminous for a while. -# 32. - Shocking Grasp (V,S) level 0 Evocation [SOL] +# 31. - Shocking Grasp (V,S) level 0 Evocation [SOL] **[Artificer, Sorcerer, Wizard]** Damage and daze an enemy on a successful touch. -# 33. - Spare the Dying (S) level 0 Necromancy [SOL] +# 32. - Spare the Dying (S) level 0 Necromancy [SOL] **[Artificer, Cleric]** Touch a dying ally to stabilize them. -# 34. - Sparkle (V,S) level 0 Enchantment [SOL] +# 33. - Sparkle (V,S) level 0 Enchantment [SOL] **[Bard, Cleric, Druid, Sorcerer, Warlock, Wizard]** Target up to three objects that can be illuminated and light them up immediately. -# 35. - *Starry Wisp* © (V,S) level 0 Evocation [UB] +# 34. - *Starry Wisp* © (V,S) level 0 Evocation [UB] **[Bard, Druid]** You launch a mote of light at one creature or object within range. Make a ranged spell attack against the target. On a hit, the target takes 1d8 Radiant damage, and until the end of your next turn, it emits Dim Light in a 10-foot radius and can't benefit from the Invisible condition. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 36. - Sunlit Blade (M,S) level 0 Evocation [UB] +# 35. - Sunlit Blade (M,S) level 0 Evocation [UB] **[Artificer, Sorcerer, Warlock, Wizard]** You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 ft distance. On a hit, the target suffers the weapon attack's normal effects, and is enveloped in glowing radiant energy, shedding dim light for the turn. Next attack against this creature while it is highlighted is done with advantage. At 5th level, the melee attack deals an extra 1d8 radiant damage to the target. The damage increases by another 1d8 at 11th and 17th levels. -# 37. - *Sword Burst* © (V,S) level 0 Enchantment [UB] +# 36. - *Sword Burst* © (V,S) level 0 Enchantment [UB] **[Artificer, Sorcerer, Warlock, Wizard]** You create a momentary circle of spectral blades that sweep around you. All other creatures within 5 ft of you must each succeed on a Dexterity saving throw or take 1d6 force damage. -# 38. - *Thorn Whip* © (V,S) level 0 Transmutation [UB] +# 37. - *Thorn Whip* © (V,S) level 0 Transmutation [UB] **[Artificer, Druid]** You create a long, whip-like vine covered in thorns that lashes out at your command toward a creature in range. Make a ranged spell attack against the target. If the attack hits, the creature takes 1d6 piercing damage, and you pull the creature up to 10 ft closer to you. -# 39. - *Thunderclap* © (V,S) level 0 Evocation [UB] +# 38. - *Thunderclap* © (V,S) level 0 Evocation [UB] **[Artificer, Bard, Druid, Sorcerer, Warlock, Wizard]** Create a burst of thundering sound, forcing creatures adjacent to you to make a Constitution saving throw or take 1d6 thunder damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 40. - *Toll the Dead* © (V,S) level 0 Necromancy [UB] +# 39. - *Toll the Dead* © (V,S) level 0 Necromancy [UB] **[Cleric, Warlock, Wizard]** You point at one creature you can see within range, and the sound of a dolorous bell fills the air around it for a moment. The target must succeed on a Wisdom saving throw or take 1d6 necrotic damage. If the target is missing any of its hit points, it instead takes 1d12 necrotic damage. -# 41. - True Strike (S) level 0 Divination [Concentration] [SOL] +# 40. - True Strike (S) level 0 Divination [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Increases your chance to hit a target you can see, one time. -# 42. - Venomous Spike (V,S) level 0 Enchantment [SOL] +# 41. - Venomous Spike (V,S) level 0 Enchantment [SOL] **[Druid]** A bone spike that pierces and poisons its target. -# 43. - Vicious Mockery (V) level 0 Enchantment [SOL] +# 42. - Vicious Mockery (V) level 0 Enchantment [SOL] **[Bard]** Unleash a torrent of magically-enhanced insults on a creature you can see. It must make a successful wisdom saving throw, or take psychic damage and have disadvantage on its next attack roll. The effect lasts until the end of its next turn. -# 44. - *Word of Radiance* © (V) level 0 Evocation [UB] +# 43. - *Word of Radiance* © (V) level 0 Evocation [UB] **[Cleric]** Create a brilliant flash of shimmering light, damaging all enemies around you. -# 45. - Wrack (V,S) level 0 Necromancy [UB] +# 44. - Wrack (V,S) level 0 Necromancy [UB] **[Cleric]** Unleash a wave of crippling pain at a creature within range. The target must make a Constitution saving throw or take 1d6 necrotic damage, and preventing them from dashing or disengaging. -# 46. - *Absorb Elements* © (S) level 1 Abjuration [UB] +# 45. - *Absorb Elements* © (S) level 1 Abjuration [UB] **[Druid, Ranger, Sorcerer, Wizard]** The spell captures some of the incoming energy, lessening its effect on you and storing it for your next melee attack. You have resistance to the triggering damage type until the start of your next turn. Also, the first time you hit with a melee attack on your next turn, the target takes an extra 1d6 damage of the triggering type, and the spell ends. When you cast this spell using a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each slot level above 1st. -# 47. - Animal Friendship (V,S) level 1 Enchantment [SOL] +# 46. - Animal Friendship (V,S) level 1 Enchantment [SOL] **[Bard, Druid, Ranger]** Choose a beast that you can see within the spell's range. The beast must make a Wisdom saving throw or be charmed for the spell's duration. -# 48. - *Armor of Agathys* © (V,S) level 1 Abjuration [UB] +# 47. - *Armor of Agathys* © (V,S) level 1 Abjuration [UB] **[Warlock]** A protective elemental skin envelops you, covering you and your gear. You gain 5 temporary hit points per spell level for the duration. In addition, if a creature hits you with a melee attack while you have these temporary hit points, the creature takes 5 cold damage per spell level. -# 49. - *Arms of Hadar* © (V,S) level 1 Evocation [UB] +# 48. - *Arms of Hadar* © (V,S) level 1 Evocation [UB] **[Warlock]** You invoke the power of malevolent forces. Tendrils of dark energy erupt from you and batter all creatures within 10 feet of you. Each creature in that area must make a Strength saving throw. On a failed save, a target takes 2d6 necrotic damage and can't take reactions until the start of your next turn. On a successful save, the creature takes half damage, but suffers no other effect. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. -# 50. - Bane (V,S) level 1 Enchantment [Concentration] [SOL] +# 49. - Bane (V,S) level 1 Enchantment [Concentration] [SOL] **[Bard, Cleric]** Reduce your enemies' attack and saving throws for a limited time. -# 51. - Bless (V,S) level 1 Enchantment [Concentration] [SOL] +# 50. - Bless (V,S) level 1 Enchantment [Concentration] [SOL] **[Cleric, Paladin]** Increase your allies' saving throws and attack rolls for a limited time. -# 52. - Burning Hands (V,S) level 1 Evocation [SOL] +# 51. - Burning Hands (V,S) level 1 Evocation [SOL] **[Sorcerer, Wizard]** Spray a cone of fire in front of you. -# 53. - Caustic Zap (V,S) level 1 Evocation [UB] +# 52. - Caustic Zap (V,S) level 1 Evocation [UB] **[Artificer, Sorcerer, Wizard]** You send a jolt of green energy toward the target momentarily disorientating them as the spell burn some of their armor. The spell targets one enemy with a spell attack and deals 1d4 acid and 1d6 lightning damage and applies the dazzled condition. -# 54. - *Chaos Bolt* © (V,S) level 1 Evocation [UB] +# 53. - *Chaos Bolt* © (V,S) level 1 Evocation [UB] **[Sorcerer]** @@ -327,25 +321,25 @@ Make a ranged spell attack against a target. On a hit, the target takes 2d8 + 1d 7: ◹ Psychic 8: ◼ Thunder If you roll the same number on both d8s, you can use your free action to target a different creature of your choice. Make a new attack roll against the new target, and make a new damage roll, which could cause the chaotic energy to leap again. A creature can be damaged only once by each casting of this spell. -# 55. - Charm Person (V,S) level 1 Enchantment [SOL] +# 54. - Charm Person (V,S) level 1 Enchantment [SOL] **[Bard, Druid, Sorcerer, Warlock, Wizard]** Makes an ally of an enemy. -# 56. - *Chromatic Orb* © (M,V,S) level 1 Evocation [UB] +# 55. - *Chromatic Orb* © (M,V,S) level 1 Evocation [UB] **[Sorcerer, Wizard]** You hurl a 4-inch-diameter sphere of energy at a creature that you can see within range. You choose acid, cold, fire, lightning, poison, or thunder for the type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose. -# 57. - Color Spray (V,S) level 1 Illusion [SOL] +# 56. - Color Spray (V,S) level 1 Illusion [SOL] **[Sorcerer, Wizard]** Spray a luminous cone that briefly blinds your enemies. Roll 6d10: the total is how many hit points of creatures this spell can affect. -# 58. - *Command* © (V) level 1 Enchantment [UB] +# 57. - *Command* © (V) level 1 Enchantment [UB] **[Bard, Cleric, Paladin]** @@ -353,438 +347,438 @@ You speak a one-word command to a creature you can see within range. The target You can only command creatures you share a language with. Humanoids are considered knowing Common. To command a non-humanoid creature, you must know Draconic for Dragons, Elvish for Fey, Giant for Giants, Infernal for Fiends and Terran for Elementals. Cannot target Undead or Surprised creatures. -# 59. - Comprehend Languages (V,S) level 1 Divination [SOL] +# 58. - Comprehend Languages (V,S) level 1 Divination [SOL] **[Bard, Sorcerer, Warlock, Wizard]** For the duration of the spell, you understand the literal meaning of any spoken words that you hear. -# 60. - Cure Wounds (V,S) level 1 Evocation [SOL] +# 59. - Cure Wounds (V,S) level 1 Evocation [SOL] **[Artificer, Bard, Cleric, Druid, Paladin, Ranger]** Heal an ally by touch. -# 61. - Detect Evil and Good (V,S) level 1 Divination [Concentration] [SOL] +# 60. - Detect Evil and Good (V,S) level 1 Divination [Concentration] [SOL] **[Cleric, Paladin]** Detect nearby creatures of evil or good nature. -# 62. - Detect Magic (V,S) level 1 Divination [Concentration] [SOL] +# 61. - Detect Magic (V,S) level 1 Divination [Concentration] [SOL] **[Artificer, Bard, Cleric, Druid, Paladin, Ranger, Sorcerer, Wizard]** Detect nearby magic objects or creatures. -# 63. - Detect Poison and Disease (V,S) level 1 Divination [Concentration] [SOL] +# 62. - Detect Poison and Disease (V,S) level 1 Divination [Concentration] [SOL] **[Druid]** TMP For the duration you sense the presence and location of poisonous creatures and diseases within 6 cells of you. -# 64. - *Dissonant Whispers* © (V) level 1 Enchantment [UB] +# 63. - *Dissonant Whispers* © (V) level 1 Enchantment [UB] **[Bard]** You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. -# 65. - Divine Favor (V,S) level 1 Evocation [Concentration] [SOL] +# 64. - Divine Favor (V,S) level 1 Evocation [Concentration] [SOL] **[Paladin]** Gain additional radiant damage for a limited time. -# 66. - *Earth Tremor* © (V,S) level 1 Evocation [UB] +# 65. - *Earth Tremor* © (V,S) level 1 Evocation [UB] **[Bard, Druid, Sorcerer, Wizard]** You strike the ground and unleash a tremor of seismic force, hurling up earth, rock, and sand. -# 67. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] [UB] +# 66. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] [UB] **[Ranger]** The next time you hit a creature with a weapon attack before this spell ends, a writhing mass of thorny vines appears at the point of impact, and the target must succeed on a Strength saving throw or be restrained by the magical vines until the spell ends.While restrained by this spell, the target takes 1d6 piercing damage at the start of each of its turns. A creature restrained by the vines can use its action to make a Strength check against your spell save DC. -# 68. - Entangle (V,S) level 1 Conjuration [Concentration] [SOL] +# 67. - Entangle (V,S) level 1 Conjuration [Concentration] [SOL] **[Druid]** Creatures in a four-cell square area are restrained if they fail a STR saving throw -# 69. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [SOL] +# 68. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Warlock, Wizard]** Gain movement points and become able to dash as a bonus action for a limited time. -# 70. - Faerie Fire (V) level 1 Evocation [Concentration] [SOL] +# 69. - Faerie Fire (V) level 1 Evocation [Concentration] [SOL] **[Artificer, Bard, Druid]** Highlight creatures to give advantage to anyone attacking them. -# 71. - False Life (V,S) level 1 Necromancy [SOL] +# 70. - False Life (V,S) level 1 Necromancy [SOL] **[Artificer, Sorcerer, Wizard]** Gain a few temporary hit points for a limited time. -# 72. - Feather Fall (V) level 1 Transmutation [SOL] +# 71. - Feather Fall (V) level 1 Transmutation [SOL] **[Artificer, Bard, Sorcerer, Wizard]** Provide a safe landing when you or an ally falls. -# 73. - *Find Familiar* © (V,S) level 1 Conjuration [UB] +# 72. - *Find Familiar* © (V,S) level 1 Conjuration [UB] **[Wizard]** You gain the service of a familiar. The familiar can use the help action, and you can cast any touch or melee hit spell through the familiar. -# 74. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [SOL] +# 73. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [SOL] **[Druid, Ranger, Sorcerer, Wizard]** Generate a sphere of thick fog for a limited time. The area is heavily obscured, penalizing creatures inside it that rely on sight. -# 75. - *Gift of Alacrity* © (V,S) level 1 Divination [UB] +# 74. - *Gift of Alacrity* © (V,S) level 1 Divination [UB] **[Wizard]** You touch a willing creature. For the duration, the target can add 1d8 to its initiative rolls. -# 76. - Goodberry (V,S) level 1 Transmutation [SOL] +# 75. - Goodberry (V,S) level 1 Transmutation [SOL] **[Druid, Ranger]** Creates 10 berries infused with magic. Eating a berry restores 1 hit point and provides sustenance for a long rest. Berries vanish after a long rest. -# 77. - Grease (V,S) level 1 Conjuration [SOL] +# 76. - Grease (V,S) level 1 Conjuration [SOL] **[Artificer, Wizard]** Cover an area of 2 x 2 cells with grease. Creatures trying to cross it may fall prone. -# 78. - Guiding Bolt (V,S) level 1 Evocation [SOL] +# 77. - Guiding Bolt (V,S) level 1 Evocation [SOL] **[Cleric]** Launch a radiant attack against an enemy and make them easy to hit. -# 79. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] [UB] +# 78. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] [UB] **[Ranger]** The next time you hit a creature with a ranged weapon attack before the spell ends, this spell creates a rain of thorns that sprouts from your ranged weapon or ammunition. In addition to the normal effect of the attack, the target of the attack and each creature within 5 feet of it must make a Dexterity saving throw. A creature takes 1d10 piercing damage on a failed save, or half as much damage on a successful one. -# 80. - Healing Word (V) level 1 Evocation [SOL] +# 79. - Healing Word (V) level 1 Evocation [SOL] **[Bard, Cleric, Druid]** Heal an ally you can see. -# 81. - Hellish Rebuke (V,S) level 1 Evocation [SOL] +# 80. - Hellish Rebuke (V,S) level 1 Evocation [SOL] **[Warlock]** When you are damaged by a creature within range, you can use your reaction to inflict fire damage back. -# 82. - Heroism (V,S) level 1 Enchantment [Concentration] [SOL] +# 81. - Heroism (V,S) level 1 Enchantment [Concentration] [SOL] **[Bard, Paladin]** An ally gains temporary hit points and cannot be frightened for a limited time. -# 83. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [SOL] +# 82. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [SOL] **[Bard, Wizard]** Make an enemy helpless with irresistible laughter. -# 84. - Hunter's Mark (V) level 1 Divination [Concentration] [SOL] +# 83. - Hunter's Mark (V) level 1 Divination [Concentration] [SOL] **[Ranger]** An enemy gets additional damage from you, and you can easily detect it for a limited time. -# 85. - *Ice Knife* © (S) level 1 Conjuration [UB] +# 84. - *Ice Knife* © (S) level 1 Conjuration [UB] **[Druid, Sorcerer, Wizard]** You create a shard of ice and fling it at one creature within range. Make a ranged spell attack against the target. On a hit, the target takes 1d10 piercing damage. Hit or miss, the shard then explodes. The target and each creature within 5 feet of the point where the ice exploded must succeed on a Dexterity saving throw or take 2d6 cold damage. When you cast this spell using a spell slot of 2nd level or higher, both the cold and piercing damage increase by 1 die for each slot level above 1st. -# 86. - Identify (M,V,S) level 1 Divination [SOL] +# 85. - Identify (M,V,S) level 1 Divination [SOL] **[Artificer, Bard, Wizard]** Identify the hidden properties of an object. -# 87. - Inflict Wounds (V,S) level 1 Necromancy [SOL] +# 86. - Inflict Wounds (V,S) level 1 Necromancy [SOL] **[Cleric]** Deal necrotic damage to an enemy you hit. -# 88. - Jump (V,S) level 1 Transmutation [SOL] +# 87. - Jump (V,S) level 1 Transmutation [SOL] **[Artificer, Druid, Ranger, Sorcerer, Wizard]** Increase an ally's jumping distance. -# 89. - Jump (V,S) level 1 Transmutation [SOL] +# 88. - Jump (V,S) level 1 Transmutation [SOL] Increase an ally's jumping distance. -# 90. - Longstrider (V,S) level 1 Transmutation [SOL] +# 89. - Longstrider (V,S) level 1 Transmutation [SOL] **[Artificer, Bard, Druid, Ranger, Wizard]** Increases an ally's speed by two cells per turn. -# 91. - Mage Armor (V,S) level 1 Abjuration [SOL] +# 90. - Mage Armor (V,S) level 1 Abjuration [SOL] **[Sorcerer, Wizard]** Provide magical armor to an ally who doesn't wear armor. -# 92. - Magic Missile (V,S) level 1 Evocation [SOL] +# 91. - Magic Missile (V,S) level 1 Evocation [SOL] **[Sorcerer, Wizard]** Strike one or more enemies with projectiles that can't miss. -# 93. - *Magnify Gravity* © (V,S) level 1 Transmutation [UB] +# 92. - *Magnify Gravity* © (V,S) level 1 Transmutation [UB] **[Wizard]** Sharply increase gravity in a 10-foot-radius sphere to crush and slow targets. -# 94. - Malediction (V,S) level 1 Enchantment [Concentration] [SOL] +# 93. - Malediction (V,S) level 1 Enchantment [Concentration] [SOL] **[Warlock]** Until the spell ends, whenever you hit a target with an attack you deal an extra 1d6 magical damage of the same type as the attack's damage. -# 95. - Mule (V,S) level 1 Transmutation [UB] +# 94. - Mule (V,S) level 1 Transmutation [UB] **[Bard, Sorcerer, Warlock, Wizard]** The recipient of this spell is able to ignore the effects of heavy loads or armor on movement speed. They can also carry slightly more weight. -# 96. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [SOL] +# 95. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [SOL] **[Cleric, Paladin, Warlock, Wizard]** Touch an ally to give them protection from evil or good creatures for a limited time. -# 97. - Radiant Motes (V,S) level 1 Evocation [UB] +# 96. - Radiant Motes (V,S) level 1 Evocation [UB] **[Artificer, Wizard]** Unleashes a swarm of 4 radiant projectiles that deal 1d4 radiant damage each. When you cast this spell using a spell slot of 2nd level or higher, the spell creates 1 more projectile for each slot above 1st. -# 98. - *Sanctuary* © (V,S) level 1 Abjuration [UB] +# 97. - *Sanctuary* © (V,S) level 1 Abjuration [UB] **[Artificer, Cleric]** You ward a creature within range against attack. Until the spell ends, any creature who targets the warded creature with an attack or a harmful spell must first make a Wisdom saving throw. On a failed save, the creature loses the attack or spell. This spell doesn't protect the warded creature from area effects. If the warded creature makes an attack or casts a spell, this spell ends. -# 99. - *Searing Smite* © (V) level 1 Evocation [Concentration] [UB] +# 98. - *Searing Smite* © (V) level 1 Evocation [Concentration] [UB] **[Paladin, Ranger]** The next time you hit a creature with a melee weapon attack during the spell's duration, your weapon flares with white-hot intensity, and the attack deals an extra 1d6 fire damage to the target and causes the target to ignite in flames. At the start of each of its turns until the spell ends, the target must make a Constitution saving throw. On a failed save, it takes 1d6 fire damage. On a successful save, the spells ends. If the target or a creature within 5 feet of it uses an action to put out the flames, or if some other effect douses the flames (such as the target being submerged in water), the spell ends. When you cast this spell using a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each slot level above 1st. -# 100. - Shield (V,S) level 1 Abjuration [SOL] +# 99. - Shield (V,S) level 1 Abjuration [SOL] **[Sorcerer, Wizard]** Increase your AC by 5 just before you would take a hit. -# 101. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [SOL] +# 100. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [SOL] **[Cleric, Paladin]** Increase an ally's AC by 2 for a limited time. -# 102. - Sleep (V,S) level 1 Enchantment [SOL] +# 101. - Sleep (V,S) level 1 Enchantment [SOL] **[Bard, Sorcerer, Wizard]** Put a number of creatures to sleep for a limited time. Roll 5d8: the total is how many hit points of creatures this spell can affect. -# 103. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] [UB] +# 102. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] [UB] **[Artificer, Sorcerer, Wizard]** A stream of acid emanates from you in a line 30 feet long and 5 feet wide in a direction you choose. Each creature in the line must succeed on a Dexterity saving throw or be covered in acid for the spell's duration or until a creature uses its action to scrape or wash the acid off itself or another creature. A creature covered in the acid takes 2d4 acid damage at start of each of its turns. When you cast this spell using a spell slot 2nd level or higher, the damage increases by 2d4 for each slot level above 1st. -# 104. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] [UB] +# 103. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] [UB] **[Paladin]** The first time you hit with a melee weapon attack during this spell's duration, your weapon rings with thunder that is audible within 300 feet of you, and the attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 feet away from you and knocked prone. -# 105. - Thunderwave (V,S) level 1 Evocation [SOL] +# 104. - Thunderwave (V,S) level 1 Evocation [SOL] **[Bard, Druid, Sorcerer, Wizard]** Emit a wave of force that causes damage and pushes creatures and objects away. -# 106. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation [SOL] +# 105. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation [SOL] When you are damaged by a creature withing range, you can use your reaction to inflict fire damage back at them. This tiefling version of the spell is more powerful than the common one but cannot use a higher level Spell Slot to increase damage. -# 107. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] [UB] +# 106. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** A beam of crackling, blue energy lances out toward a creature within range, forming a sustained arc of lightning between you and the target. Make a ranged spell attack against that creature. On a hit, the target takes 1d12 lightning damage, and on each of your turns for the duration, you can use your action to deal 1d12 lightning damage to the target automatically. The spell ends if you use your action to do anything else. The spell also ends if the target is ever outside the spell's range. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d12 for each slot level above 1st. -# 108. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] [UB] +# 107. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] [UB] **[Paladin]** The next time you hit with a melee weapon attack during this spell's duration, your attack deals an extra 1d6 psychic damage. Additionally, if the target is a creature, it must make a Wisdom saving throw or be frightened of you until the spell ends. As an action, the creature can make a Wisdom check against your spell save DC to steel its resolve and end this spell. -# 109. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] +# 108. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] **[Ranger]** You move like the wind. For the duration, your movement doesn't provoke opportunity attacks. Once before the spell ends, you can give yourself advantage on one weapon attack roll on your turn. That attack deals an extra 1d8 force damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn. -# 110. - Acid Arrow (V,S) level 2 Evocation [SOL] +# 109. - Acid Arrow (V,S) level 2 Evocation [SOL] **[Wizard]** Launch an acid arrow that deals some damage even if you miss your shot. -# 111. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation [UB] +# 110. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation [UB] **[Sorcerer, Wizard]** A line of roaring flame 30 feet long and 5 feet wide emanates from you in a direction you choose. Each creature in the line must make a Dexterity saving throw. A creature takes 3d10 fire damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d10 for each slot level above 2nd. -# 112. - Aid (V,S) level 2 Abjuration [SOL] +# 111. - Aid (V,S) level 2 Abjuration [SOL] **[Artificer, Cleric, Paladin]** Temporarily increases hit points for up to three allies. -# 113. - Barkskin (V,S) level 2 Transmutation [Concentration] [SOL] +# 112. - Barkskin (V,S) level 2 Transmutation [Concentration] [SOL] **[Druid, Ranger]** Gives you or an ally you can touch an AC of at least 16. -# 114. - Blindness (V) level 2 Necromancy [SOL] +# 113. - Blindness (V) level 2 Necromancy [SOL] **[Bard, Cleric, Sorcerer, Wizard]** Blind an enemy for one minute. -# 115. - Blur (V) level 2 Illusion [Concentration] [SOL] +# 114. - Blur (V) level 2 Illusion [Concentration] [SOL] **[Artificer, Sorcerer, Wizard]** Makes you blurry and harder to hit for up to one minute. -# 116. - *Borrowed Knowledge* © (V,S) level 2 Divination [UB] +# 115. - *Borrowed Knowledge* © (V,S) level 2 Divination [UB] **[Bard, Cleric, Warlock, Wizard]** You draw on knowledge from spirits of the past. Choose one skill in which you lack proficiency. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. -# 117. - Branding Smite (V) level 2 Evocation [Concentration] [SOL] +# 116. - Branding Smite (V) level 2 Evocation [Concentration] [SOL] **[Paladin]** Your next hit causes additional radiant damage and your target becomes luminous. -# 118. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [SOL] +# 117. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [SOL] **[Bard, Cleric]** Stops allies from being charmed or frightened and makes hostile humanoids indifferent. -# 119. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] [UB] +# 118. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] [UB] **[Bard, Sorcerer, Warlock, Wizard]** You fill the air with spinning daggers in a cube 5 feet on each side, centered on a point you choose within range. A creature takes 4d4 slashing damage when it enters the spell's area for the first time on a turn or starts its turn there. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 2d4 for each slot level above 2nd. -# 120. - Color Burst (V,S) level 2 Illusion [UB] +# 119. - Color Burst (V,S) level 2 Illusion [UB] **[Artificer, Sorcerer, Wizard]** Burst a luminous cube that briefly blinds anyone within 10 ft. 8d10 is how many hit points of creatures this spell can affect. -# 121. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] [UB] +# 120. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] [UB] **[Druid, Ranger]** Conjures 2 goblins who obey your orders unless you lose concentration. -# 122. - Darkness (V) level 2 Evocation [Concentration] [SOL] +# 121. - Darkness (V) level 2 Evocation [Concentration] [SOL] **[Sorcerer, Warlock, Wizard]** Create an area of magical darkness. -# 123. - Darkvision (V,S) level 2 Transmutation [SOL] +# 122. - Darkvision (V,S) level 2 Transmutation [SOL] **[Artificer, Druid, Ranger, Sorcerer, Wizard]** Grant Darkvision to the target. -# 124. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [SOL] +# 123. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Bard, Cleric, Druid]** Grant temporary powers to an ally for up to one hour. -# 125. - Find Traps (V,S) level 2 Evocation [SOL] +# 124. - Find Traps (V,S) level 2 Evocation [SOL] **[Cleric, Druid, Ranger]** Spot mechanical and magical traps, but not natural hazards. -# 126. - Flame Blade (V,S) level 2 Evocation [Concentration] [SOL] +# 125. - Flame Blade (V,S) level 2 Evocation [Concentration] [SOL] **[Druid]** Evokes a fiery blade for ten minutes that you can wield in battle. -# 127. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [SOL] +# 126. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [SOL] **[Druid, Wizard]** Summons a movable, burning sphere. -# 128. - Heat Metal (V,S) level 2 Transmutation [Concentration] [SOL] +# 127. - Heat Metal (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Bard, Druid]** Causes metallic armor worn by a target creature to glow red hot, causing fire damage and disadvantage to attack rolls and ability checks. The damage can be repeated every turn with a bonus action. -# 129. - Hold Person (V,S) level 2 Enchantment [Concentration] [SOL] +# 128. - Hold Person (V,S) level 2 Enchantment [Concentration] [SOL] **[Bard, Cleric, Druid, Sorcerer, Warlock, Wizard]** Paralyze a humanoid you can see for a limited time. -# 130. - Invisibility (V,S) level 2 Illusion [Concentration] [SOL] +# 129. - Invisibility (V,S) level 2 Illusion [Concentration] [SOL] **[Artificer, Bard, Sorcerer, Warlock, Wizard]** Make an ally invisible for a limited time. -# 131. - *Kinetic Jaunt* © (S) level 2 Transmutation [Concentration] [UB] +# 130. - *Kinetic Jaunt* © (S) level 2 Transmutation [Concentration] [UB] **[Artificer, Bard, Sorcerer, Wizard]** @@ -793,36 +787,36 @@ You magically empower your movement with dance like steps, giving yourself the f • You don't provoke opportunity attacks. • You can move through the space of any creature. -# 132. - Knock (V) level 2 Transmutation [SOL] +# 131. - Knock (V) level 2 Transmutation [SOL] **[Bard, Sorcerer, Wizard]** Magically open locked doors, chests, and the like. -# 133. - Lesser Restoration (V,S) level 2 Abjuration [SOL] +# 132. - Lesser Restoration (V,S) level 2 Abjuration [SOL] **[Artificer, Bard, Cleric, Druid, Paladin, Ranger]** Remove a detrimental condition from an ally. -# 134. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] +# 133. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Wizard]** Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 135. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] +# 134. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 136. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [SOL] +# 135. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Paladin, Wizard]** A nonmagical weapon becomes a +1 weapon for up to one hour. -# 137. - *Mirror Image* © (V,S) level 2 Illusion [UB] +# 136. - *Mirror Image* © (V,S) level 2 Illusion [UB] **[Bard, Sorcerer, Warlock, Wizard]** @@ -831,348 +825,348 @@ If you have 3 duplicates, you must roll a 6 or higher to change the attack's tar A duplicate's AC is equal to 10 + your Dexterity modifier. If an attack hits a duplicate, the duplicate is destroyed. A duplicate can be destroyed only by an attack that hits it. It ignores all other damage and effects. The spell ends when all three duplicates are destroyed. A creature is unaffected by this spell if it is Blinded, or has Blindsight, Truesight or Tremorsense (doesn't apply if you don't touch ground). -# 138. - Misty Step (V) level 2 Conjuration [SOL] +# 137. - Misty Step (V) level 2 Conjuration [SOL] **[Sorcerer, Warlock, Wizard]** Teleports you to a free cell you can see, no more than 6 cells away. -# 139. - Moon Beam (V,S) level 2 Evocation [Concentration] [SOL] +# 138. - Moon Beam (V,S) level 2 Evocation [Concentration] [SOL] **[Druid]** Conjures a vertical column of moonlight which causes radiant damage. Shapechangers have disadvantage on the save. -# 140. - Noxious Spray (V,S) level 2 Evocation [UB] +# 139. - Noxious Spray (V,S) level 2 Evocation [UB] **[Druid, Sorcerer, Warlock, Wizard]** You unleash a spray of noxious gases on a target within range. Make a ranged spell attack. On a hit, the target takes 4d6 poison damage and must succeed on a Constitution saving throw or spend all its next turn retching and heaving, unable to move or take actions. Constructs, elementals and undead are unaffected by this spell. When you cast this spell using a slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 141. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [SOL] +# 140. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [SOL] **[Druid, Ranger]** Make yourself and up to 5 allies stealthier for one hour. -# 142. - Petal Storm (V,S) level 2 Conjuration [Concentration] [UB] +# 141. - Petal Storm (V,S) level 2 Conjuration [Concentration] [UB] **[Druid]** Choose an unoccupied 15-foot cube of air that you can see within range. An elemental force of swirling winds appears in the cube and lasts for the spell's duration. The cloud heavily obscures its area. Any creature that enters the storm for the first time on a turn or starts its turn there must make a Strength saving throw. On a failed save, the creature takes 3d4 slashing damage. As a bonus action, you can move the storm up to 30 ft in any direction. -# 143. - Prayer of Healing (V) level 2 Evocation [SOL] +# 142. - Prayer of Healing (V) level 2 Evocation [SOL] **[Cleric]** Heal multiple allies at the same time. -# 144. - Protect Threshold (V,S) level 2 Abjuration [UB] +# 143. - Protect Threshold (V,S) level 2 Abjuration [UB] **[Cleric, Druid, Paladin]** Tracing arcane sigils along its boundary, you can ward a doorway, window, or other portal from entry. For the duration, an invisible eldritch creature stalks the warded portal. Any creature that attempts to pass through the portal must make a Wisdom saving throw or take 4d6 psychic damage, or half as much on a successful save. -# 145. - Protection from Poison (V,S) level 2 Abjuration [SOL] +# 144. - Protection from Poison (V,S) level 2 Abjuration [SOL] **[Artificer, Druid, Paladin, Ranger]** Cures and protects against poison. -# 146. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [SOL] +# 145. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [SOL] **[Sorcerer, Warlock, Wizard]** Weaken an enemy so they deal less damage for one minute. -# 147. - *Rime's Binding Ice* © (S) level 2 Evocation [UB] +# 146. - *Rime's Binding Ice* © (S) level 2 Evocation [UB] **[Sorcerer, Wizard]** A burst of cold energy emanates from you in a 30-foot cone. Each creature in that area must make a Constitution saving throw. On a failed save, a creature takes 3d8 cold damage and is hindered by ice formations for 1 minute, or until it uses an action to break away the ice. A creature hindered by ice has its speed reduced to 0. On a successful save, a creature takes half as much damage and isn't hindered by ice. -# 148. - Scorching Ray (V,S) level 2 Evocation [SOL] +# 147. - Scorching Ray (V,S) level 2 Evocation [SOL] **[Sorcerer, Wizard]** Fling rays of fire at one or more enemies. -# 149. - See Invisibility (V,S) level 2 Divination [SOL] +# 148. - See Invisibility (V,S) level 2 Divination [SOL] **[Artificer, Bard, Sorcerer, Wizard]** You can see invisible creatures. -# 150. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB] +# 149. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** You weave together threads of shadow to create a dagger of solidified gloom in your hand. It deals 2d8 psychic damage on a hit and has the finesse, light, and thrown properties. In addition, when you use it to attack a target that is in dim light or darkness, you make the attack roll with advantage. -# 151. - Shatter (V,S) level 2 Evocation [SOL] +# 150. - Shatter (V,S) level 2 Evocation [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Triggers a sudden noise that causes Thunder Damage in a 2-cell radius. -# 152. - Silence (V,S) level 2 Illusion [Concentration] [SOL] +# 151. - Silence (V,S) level 2 Illusion [Concentration] [SOL] **[Bard, Cleric, Ranger]** Creates a sphere four cells in radius, inside which sound cannot exist. Stops thunder damage and prevents spellcasting using verbal components. -# 153. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation [UB] +# 152. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation [UB] **[Sorcerer, Wizard]** A flurry of magic snowballs erupts from a point you choose within range. Each creature in a 3x3 cube centered on that point must make a Dexterity saving throw. A creature takes 3d8 cold damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd. -# 154. - Spider Climb (V,S) level 2 Transmutation [Concentration] [SOL] +# 153. - Spider Climb (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Warlock, Wizard]** Touch an ally to allow them to climb walls like a spider for a limited time. -# 155. - Spike Growth (V,S) level 2 Transmutation [Concentration] [SOL] +# 154. - Spike Growth (V,S) level 2 Transmutation [Concentration] [SOL] **[Druid, Ranger]** Grows spikes and thorns in the area, making the terrain difficult and causing damage for every cell of movement. -# 156. - Spiritual Weapon (V,S) level 2 Evocation [SOL] +# 155. - Spiritual Weapon (V,S) level 2 Evocation [SOL] **[Cleric]** Summon a weapon that fights for you. -# 157. - *Tasha's Mind Whip* © (V) level 2 Enchantment [UB] +# 156. - *Tasha's Mind Whip* © (V) level 2 Enchantment [UB] **[Sorcerer, Wizard]** You psychically lash out at one creature you can see within range. The target must make an Intelligence saving throw. On a failed save, the target takes 3d6 psychic damage, and it can't take a reaction until the end of its next turn. Moreover, on its next turn, it must choose whether it gets a move, an action, or a bonus action; it gets only one of the three. On a successful save, the target takes half as much damage and suffers none of the spell's other effects. When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 158. - *Warding Bond* © (V,S) level 2 Abjuration [SOL] +# 157. - *Warding Bond* © (V,S) level 2 Abjuration [SOL] Creates a bond with the target, who gains +1 AC, +1 to saving throws and resistance to all damage, but you share all damage it receives. Lasts for one hour. -# 159. - *Web* © (V,S) level 2 Conjuration [Concentration] [UB] +# 158. - *Web* © (V,S) level 2 Conjuration [Concentration] [UB] **[Artificer, Sorcerer, Wizard]** You conjure a mass of thick, sticky webbing at a point of your choice within range. The webs fill a 20-foot cube from that point for the duration. The webs are difficult terrain and lightly obscure their area. Each creature that enters them during its turn must make a Dexterity saving throw. On a failed save, the creature is restrained as long as it remains in the webs or until it breaks free. A creature restrained by the webs can use its actions to make a Strength check against your spell save DC. If it succeeds, it is no longer restrained. -# 160. - *Wither and Bloom* © (V,S) level 2 Necromancy [UB] +# 159. - *Wither and Bloom* © (V,S) level 2 Necromancy [UB] **[Druid, Sorcerer, Wizard]** You invoke both death and life upon a 10-foot-radius sphere centered on an ally. Each enemy in that area must make a Constitution saving throw, taking 2d6 necrotic damage on a failed save, or half as much damage on a successful one. In addition, the target spends and rolls one of its unspent Hit Dice and regain a number of hit points equal to the roll plus your spellcasting ability modifier. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot above 2nd, and the number of Hit Dice that can be spent and added to the healing roll increases by one for each slot above 2nd. -# 161. - Adder's Fangs (V,S) level 3 Conjuration [UB] +# 160. - Adder's Fangs (V,S) level 3 Conjuration [UB] **[Druid, Ranger, Sorcerer, Warlock]** You create the visage of a massive green snake that appears for an instant before bearing down on your foe. Choose a creature you can see within range. The target must make a constitution saving throw, taking 4d10 poison damage on a failure, or half as much damage on a successful one. A creature that fails its saving throw is also poisoned, and its speed is halved while poisoned by this spell. At the end of each of its turns, a target may make a constitution saving throw, ending the poison on a success. Otherwise, the poison lasts for 1 minute. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 162. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] [UB] +# 161. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] [UB] **[Artificer, Ranger, Sorcerer, Wizard]** The billowing flames of a dragon blast from your feet, granting you explosive speed. For the duration, your speed increases by 20 feet and moving doesn't provoke opportunity attacks. When you move within 5 feet of a creature, it takes 1d6 fire damage from your trail of heat. A creature can take this damage only once during a turn. When you cast this spell using a spell slot of 4th level or higher, increase your speed by 5 feet for each spell slot level above 3rd. The spell deals an additional 1d6 fire damage for each slot level above 3rd. -# 163. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] [UB] +# 162. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] [UB] **[Cleric, Paladin]** Healing energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. You can use a bonus action to cause one creature in the aura (including you) to regain 2d6 hit points. -# 164. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [SOL] +# 163. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [SOL] **[Cleric]** Raise hope and vitality. -# 165. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [SOL] +# 164. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [SOL] **[Bard, Cleric, Wizard]** Curses a creature you can touch. -# 166. - *Blinding Smite* © (V) level 3 Evocation [Concentration] [UB] +# 165. - *Blinding Smite* © (V) level 3 Evocation [Concentration] [UB] **[Paladin]** The next time you hit a creature with a melee weapon attack during this spell's duration, you weapon flares with a bright light, and the attack deals an extra 3d8 radiant damage to the target. Additionally, the target must succeed on a Constitution saving throw or be blinded until the spell ends. A creature blinded by this spell makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded. -# 167. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] +# 166. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] **[Druid]** Conjures a storm cloud from which you can call a vertical bolt of lightning to strike targets, dealing 3D10 lightning damage. Another bolt can be repeated every turn by using an action. -# 168. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [SOL] +# 167. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [SOL] **[Druid, Ranger]** Summon spirits in the form of beasts to help you in battle -# 169. - Corrupting Bolt (V,S) level 3 Necromancy [UB] +# 168. - Corrupting Bolt (V,S) level 3 Necromancy [UB] **[Sorcerer, Warlock, Wizard]** You can fire a pulse of necrotic energy that causes a creature's body to begin to wither and decay. Make a ranged attack against a creature. On a hit, the target takes 4d8 necrotic damage and must succeed a Constitution saving throw. On a failed saving throw, the next time you or an ally of yours hits the corrupted creature with an attack before the end of your next turn, the creature has vulnerability to all of that attack's damage, and then the corruption ends. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 170. - Counterspell (S) level 3 Abjuration [SOL] +# 169. - Counterspell (S) level 3 Abjuration [SOL] **[Sorcerer, Warlock, Wizard]** Interrupt an enemy's spellcasting. -# 171. - Create Food (S) level 3 Conjuration [SOL] +# 170. - Create Food (S) level 3 Conjuration [SOL] **[Artificer, Cleric, Paladin]** Conjure 15 units of food. -# 172. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] [UB] +# 171. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] [UB] **[Paladin]** Surround yourself with a magical aura. Allies within the aura gain a bonus 1d4 radiant damage on their attacks. -# 173. - Daylight (V,S) level 3 Evocation [SOL] +# 172. - Daylight (V,S) level 3 Evocation [SOL] **[Cleric, Druid, Paladin, Ranger, Sorcerer]** Summon a globe of bright light. -# 174. - Dispel Magic (V,S) level 3 Abjuration [SOL] +# 173. - Dispel Magic (V,S) level 3 Abjuration [SOL] **[Artificer, Bard, Cleric, Druid, Paladin, Sorcerer, Warlock, Wizard]** End active spells on a creature or object. -# 175. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] [UB] +# 174. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] [UB] **[Artificer, Druid, Paladin, Ranger]** Imbue a non-magical weapon with elemental magic. It gains a +1 to attack and damage rolls, and it gains 1d4 of the corresponding element's damage. When casting with a 5 or 6 spell slots, the effects increased by one die while casting at a spell slot 7 or higher increases the effects by 2. -# 176. - Fear (V,S) level 3 Illusion [Concentration] [SOL] +# 175. - Fear (V,S) level 3 Illusion [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Frighten creatures and force them to flee. -# 177. - Fireball (V,S) level 3 Evocation [SOL] +# 176. - Fireball (V,S) level 3 Evocation [SOL] **[Sorcerer, Wizard]** Launch a fireball that explodes from a point of your choosing. -# 178. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] [UB] +# 177. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] [UB] **[Artificer, Druid, Ranger, Sorcerer, Wizard]** You must be wielding a ranged weapon. When a target is hit by it, the target takes an extra 1d6 fire damage. The spell ends when twelve pieces of ammunition have been drawn from the quiver. When you cast this spell using a spell slot of 4th level or higher, the number of pieces of ammunition you can affect with this spell increases by two for each slot level above 3rd. -# 179. - Fly (V,S) level 3 Transmutation [Concentration] [SOL] +# 178. - Fly (V,S) level 3 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Warlock, Wizard]** An ally you touch gains the ability to fly for a limited time. -# 180. - Haste (V,S) level 3 Transmutation [Concentration] [SOL] +# 179. - Haste (V,S) level 3 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Wizard]** Make an ally faster and more agile, and grant them an additional action for a limited time. -# 181. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] [UB] +# 180. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] [UB] **[Warlock]** You open a gateway to the dark between the stars, a region infested with unknown horrors. A 20-foot-radius sphere of blackness and bitter cold appears, centered on a point with range and lasting for the duration. The area extinguishes light, and creatures within it are blinded. Any creature that starts its turn in the area takes 2d6 cold damage. Any creature that ends its turn in the area must succeed on a Dexterity saving throw or take 2d6 acid damage as milky, otherworldly tentacles rub against it. -# 182. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [SOL] +# 181. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Charms enemies to make them harmless until attacked, but also affects allies in range. -# 183. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] [UB] +# 182. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] [UB] **[Artificer, Bard, Sorcerer, Warlock, Wizard]** For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as advantage on Intelligence, Wisdom, and Charisma saving throws. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 184. - *Life Transference* © (V,S) level 3 Necromancy [UB] +# 183. - *Life Transference* © (V,S) level 3 Necromancy [UB] **[Cleric, Wizard]** You sacrifice some of your health to mend another creature's injuries. You take 4d8 necrotic damage, and one creature of your choice that you can see within range regains a number of hit points equal to twice the necrotic damage you take. When you cast this spell using a spell s lot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 185. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] [UB] +# 184. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] [UB] **[Ranger]** The next time you make a ranged weapon attack during the spell's duration, the weapon's ammunition, or the weapon itself if it's a thrown weapon, transforms into a bolt of lightning. Make the attack roll as normal. The target takes 3d8 lightning damage on a hit, or half as much damage on a miss. Whether you hit or miss, each creature within 10 feet of the target must make a Dexterity saving throw. Each of these creatures takes 2d8 lightning damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 4th level or higher, the damage for both effects of the spell increases by 1d8 for each slot level above 3rd. -# 186. - Lightning Bolt (V,S) level 3 Evocation [SOL] +# 185. - Lightning Bolt (V,S) level 3 Evocation [SOL] **[Sorcerer, Wizard]** Unleash a stroke of lightning in a direction of your choice, damaging everyone it touches. -# 187. - Mass Healing Word (V) level 3 Evocation [SOL] +# 186. - Mass Healing Word (V) level 3 Evocation [SOL] **[Cleric]** Instantly heals up to six allies you can see. -# 188. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [SOL] +# 187. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [SOL] **[Artificer, Cleric, Druid, Ranger, Sorcerer, Wizard]** Touch one willing creature to give them resistance to this damage type. -# 189. - *Pulse Wave* © (V,S) level 3 Evocation [UB] +# 188. - *Pulse Wave* © (V,S) level 3 Evocation [UB] **[Wizard]** You create intense pressure, unleash it in a 30-foot cone, and decide whether the pressure pulls or pushes creatures and objects. Each creature in that cone must make a Constitution saving throw. A creature takes 6d6 force damage on a failed save, or half as much damage on a successful one. And every creature that fails the save is either pulled 15 feet toward you or pushed 15 feet away from you, depending on the choice you made for the spell. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 and the distance pulled or pushed increases by 5 feet for each slot level above 3rd. -# 190. - Remove Curse (V,S) level 3 Abjuration [SOL] +# 189. - Remove Curse (V,S) level 3 Abjuration [SOL] **[Cleric, Paladin, Warlock, Wizard]** Removes all curses affecting the target. -# 191. - Revivify (M,V,S) level 3 Necromancy [SOL] +# 190. - Revivify (M,V,S) level 3 Necromancy [SOL] **[Artificer, Cleric, Paladin]** Brings one creature back to life, up to 1 minute after death. -# 192. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [SOL] +# 191. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [SOL] **[Druid, Sorcerer, Wizard]** Creates an area where the ground is slippery, vision is obscured, and concentration is harder. -# 193. - Slow (V,S) level 3 Transmutation [Concentration] [SOL] +# 192. - Slow (V,S) level 3 Transmutation [Concentration] [SOL] **[Sorcerer, Wizard]** Slows and impairs the actions of up to 6 creatures. -# 194. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [SOL] +# 193. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [SOL] **[Cleric]** Call forth spirits to protect you. -# 195. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] [UB] +# 194. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] [UB] **[Cleric, Paladin, Warlock, Wizard]** @@ -1181,444 +1175,444 @@ Until the spell ends, any attack you make deals 1d8 extra damage when you hit a In addition, any enemy creature within 10ft of you when you cast, or that enters or starts its turn in that range has its movement speed lowered by 10ft until start of its next turn. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for every two slot levels above 3rd. -# 196. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [SOL] +# 195. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [SOL] **[Bard, Sorcerer, Wizard]** Create a cloud of incapacitating, noxious gas. -# 197. - *Thunder Step* © (V) level 3 Conjuration [UB] +# 196. - *Thunder Step* © (V) level 3 Conjuration [UB] **[Sorcerer, Warlock, Wizard]** You teleport yourself to an unoccupied space you can see within range. Immediately after you disappear, a thunderous boom sounds, and each creature within 10 feet of the space you left must make a Constitution saving throw, taking 3d10 thunder damage on a failed save, or half as much damage on a successful one. You can also teleport one willing ally. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d10 for each slot level above 3rd. -# 198. - Tongues (V) level 3 Divination [SOL] +# 197. - Tongues (V) level 3 Divination [SOL] **[Bard, Cleric, Sorcerer, Warlock, Wizard]** Grants knowledge of all languages for one hour. -# 199. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [SOL] +# 198. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [SOL] **[Warlock, Wizard]** Grants you a life-draining melee attack for one minute. -# 200. - Wind Wall (V,S) level 3 Evocation [Concentration] [SOL] +# 199. - Wind Wall (V,S) level 3 Evocation [Concentration] [SOL] **[Druid, Ranger]** Create a wall of wind that causes damage, pushes creatures and objects away, and disperses fogs and gases. -# 201. - Winter's Breath (V,S) level 3 Conjuration [UB] +# 200. - Winter's Breath (V,S) level 3 Conjuration [UB] **[Druid, Sorcerer, Wizard]** Create a blast of cold wind to chill your enemies and knock them prone. -# 202. - *Aura of Life* © (V) level 4 Abjuration [Concentration] [UB] +# 201. - *Aura of Life* © (V) level 4 Abjuration [Concentration] [UB] **[Cleric, Paladin]** Life-preserving energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, has resistance to necrotic damage, and its hit point maximum can't be reduced. In addition, a non-hostile, living creature regains 1 hit point when it starts its turn in the aura with 0 hit points. -# 203. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] [UB] +# 202. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] [UB] **[Cleric, Paladin]** Purifying energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, can't become diseased, has resistance to poison damage, and has advantage on saving throws against effects that cause any of the following conditions: blinded, charmed, deafened, frightened, paralyzed, poisoned, and stunned. -# 204. - Banishment (V,S) level 4 Abjuration [Concentration] [SOL] +# 203. - Banishment (V,S) level 4 Abjuration [Concentration] [SOL] **[Cleric, Paladin, Sorcerer, Warlock, Wizard]** Banishes a creature as long as you concentrate. The creature can be permanently banished if it is extraplanar. -# 205. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [SOL] +# 204. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [SOL] **[Wizard]** Conjures black tentacles that restrain and damage creatures within the area of effect. -# 206. - Blessing of Rime (V,S) level 4 Evocation [UB] +# 205. - Blessing of Rime (V,S) level 4 Evocation [UB] **[Bard, Druid, Ranger]** You summon a chill wind that numbs the pain of your allies. Choose up to three creatures within range. Each creature gains 3d8 temporary hit points for the duration. While a creature has these hit points, if it would make a Constitution saving throw, it gains advantage on the roll. When you cast this spell using a spell slot of 5th level or higher, the temporary hit points increase by 1d8 for each slot level above 4th. -# 207. - Blight (V,S) level 4 Necromancy [SOL] +# 206. - Blight (V,S) level 4 Necromancy [SOL] **[Druid, Sorcerer, Warlock, Wizard]** Drains life from a creature, causing massive necrotic damage. -# 208. - Brain Bulwark (V) level 4 Abjuration [UB] +# 207. - Brain Bulwark (V) level 4 Abjuration [UB] **[Artificer, Bard, Sorcerer, Warlock, Wizard]** For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as Immunity to the Charmed, Frightened, Fear, Mind dominated and Mind controlled conditions. -# 209. - Confusion (V,S) level 4 Enchantment [Concentration] [SOL] +# 208. - Confusion (V,S) level 4 Enchantment [Concentration] [SOL] **[Bard, Druid, Sorcerer, Wizard]** Creates confusion and erratic behavior in a creature, possibly leading it to attack its allies. -# 210. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] [SOL] +# 209. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] [SOL] 4 elementals are conjured (CR 1/2). -# 211. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [SOL] +# 210. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [SOL] **[Druid, Wizard]** Conjure elemental creatures under your command, which are dismissed when the spell ends or is broken. -# 212. - Death Ward (V,S) level 4 Abjuration [SOL] +# 211. - Death Ward (V,S) level 4 Abjuration [SOL] **[Cleric, Paladin]** Protects the creature once against instant death or being reduced to 0 hit points. -# 213. - Dimension Door (V) level 4 Conjuration [SOL] +# 212. - Dimension Door (V) level 4 Conjuration [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Transfers the caster and a friendly creature to a specified destination. -# 214. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [SOL] +# 213. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [SOL] **[Druid, Sorcerer]** Grants you control over an enemy beast. -# 215. - Dreadful Omen (V,S) level 4 Enchantment [SOL] +# 214. - Dreadful Omen (V,S) level 4 Enchantment [SOL] **[Bard, Warlock]** You whisper dreadful words that cause immense mental anguish in your enemies. On a failed wisdom saving throw, they take psychic damage and become frightened until the end of their next turn, moving away from you as much as possible. On a successful save, they take half as much damage and are not frightened. -# 216. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] [UB] +# 215. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] [UB] **[Artificer, Druid, Warlock, Wizard]** Choose one creature you can see within range, and choose one of the following damage types: acid, cold, fire, lightning, or thunder. The target must succeed on a Constitution saving throw or be affected by the spell for its duration. The first time each turn the affected target takes non-recurrent damage of the chosen type, the target takes an extra 2d6 damage of that type. Moreover, the target loses any resistance to that damage type until the spell ends. When you cast this spell using a spell slot of 5th level or higher, you can target one additional creature for each slot level above 4th. The creatures must be within 30 feet of each other when you target them. -# 217. - Fire Shield (V,S) level 4 Evocation [SOL] +# 216. - Fire Shield (V,S) level 4 Evocation [SOL] **[Sorcerer, Wizard]** Grants resistance to fire or cold, and damages creatures attacking the caster with melee attacks. -# 218. - Freedom of Movement (V,S) level 4 Abjuration [SOL] +# 217. - Freedom of Movement (V,S) level 4 Abjuration [SOL] **[Artificer, Bard, Cleric, Druid, Ranger]** Grants immunity to movement restrictions, as well as being paralyzed or restrained. -# 219. - Giant Insect (V,S) level 4 Transmutation [Concentration] [SOL] +# 218. - Giant Insect (V,S) level 4 Transmutation [Concentration] [SOL] **[Druid]** Conjures a giant version of a natural insect or arthropod. -# 220. - *Gravity Sinkhole* © (V,S) level 4 Evocation [UB] +# 219. - *Gravity Sinkhole* © (V,S) level 4 Evocation [UB] **[Wizard]** A 20-foot-radius sphere of crushing force forms at a point you can see within range and tugs at the creatures there. Each creature in the sphere must make a Constitution saving throw. On a failed save, the creature takes 5d10 force damage, and is pulled in a straight line toward the center of the sphere, ending in an unoccupied space as close to the center as possible. On a successful save, the creature takes half as much damage and isn't pulled. When you cast this spell using a spell slot of 5th level or higher, the damage increases by 1d10 for each slot level above 4th. -# 221. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [SOL] +# 220. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [SOL] **[Bard, Sorcerer, Wizard]** Target becomes invisible for the duration, even when attacking or casting spells. -# 222. - Guardian of Faith (V) level 4 Conjuration [SOL] +# 221. - Guardian of Faith (V) level 4 Conjuration [SOL] **[Cleric]** Conjures a large spectral guardian that damages approaching enemies. -# 223. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] [UB] +# 222. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] [UB] **[Druid, Ranger]** A nature spirit answers your call and transforms you into a powerful guardian. The transformation lasts until the spell ends. You choose between a Beast or a Tree form. -# 224. - Ice Storm (V,S) level 4 Evocation [SOL] +# 223. - Ice Storm (V,S) level 4 Evocation [SOL] **[Druid, Sorcerer, Wizard]** Causes bludgeoning and cold damage in the area, and turns the ground into difficult terrain. -# 225. - Identify Creatures (V,S) level 4 Divination [SOL] +# 224. - Identify Creatures (V,S) level 4 Divination [SOL] **[Wizard]** Reveals full bestiary knowledge for the affected creatures. -# 226. - Irresistible Performance (V) level 4 Enchantment [UB] +# 225. - Irresistible Performance (V) level 4 Enchantment [UB] **[Bard]** You weave a song into the air, causing those who hear it to applaud its magnificence. All creatures of your choice inside a 30-foot-cube within range must make a Charisma saving throw or be forced to clap and shout until the start of your next turn. A creature that is charmed by you always fails this saving throw. A clapping creature cannot perform any actions that require their hands or mouth but can otherwise act normally. This spell has no effect on creatures that are immune to charm. -# 227. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration [UB] +# 226. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration [UB] **[Artificer, Wizard]** You conjure a phantom watchdog in an unoccupied space that you can see within range, where it remains for the duration. The hound has Darkvision up to 60 ft, Truesight up to 80 ft, is invisible to all creatures except you and can't be harmed. During each of your turns, the hound can attempt to bite one creature within 5 feet of it that is hostile to you as a free action. The hound's attack bonus is equal to your spellcasting ability modifier + your proficiency bonus. On a hit, it deals 4d8 piercing damage. -# 228. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [SOL] +# 227. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [SOL] **[Wizard]** Causes psychic damage to the target creature with each turn, unless a saving throw is successful or the effect ends. -# 229. - Psionic Blast (V) level 4 Evocation [UB] +# 228. - Psionic Blast (V) level 4 Evocation [UB] **[Sorcerer, Warlock, Wizard]** You unleash a debilitating wave of mental power in a 30-foot cone. Each creature in the area must make an Intelligence saving throw. On a failed save, a target takes 5d8 psychic damage, becomes dazzled and has its movement speed halved until the end of your next turn. On a successful save, a target only takes half as much damage. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 4th. -# 230. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment [UB] +# 229. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment [UB] **[Bard, Sorcerer, Warlock, Wizard]** You unleash a shimmering lance of psychic power from your forehead at a creature that you can see within range. It must succeed on an Intelligence saving throw or take 7d6 psychic damage and be incapacitated until the end of your next turn. On a successful save, the creature takes half damage and isn't incapacitated. At Higher Levels. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 for each slot level above 4th. -# 231. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] [UB] +# 230. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** Dim light spreads within a 30-foot-radius sphere centered on a point you choose within range. The light spreads around corners, and it lasts until the spell ends. When a creature moves into the spell's area for the first time on a turn or starts its turn there, that creature must succeed on a Constitution saving throw or take 4d10 radiant damage, and it suffers one level of exhaustion and emits a dim light in a 5-foot radius. This light makes it impossible for the creature to benefit from being invisible. The light and any levels of exhaustion caused by this spell go away when the spell ends. -# 232. - *Staggering Smite* © (V) level 4 Evocation [Concentration] [UB] +# 231. - *Staggering Smite* © (V) level 4 Evocation [Concentration] [UB] **[Paladin]** The next time you hit a creature with a melee weapon attack during this spell's duration, your weapon pierces both body and mind, and the attack deals an extra 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn. -# 233. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] +# 232. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] **[Artificer, Druid, Ranger, Sorcerer, Wizard]** Grants resistance to non-magical bludgeoning, slashing, and piercing damage. -# 234. - *Vitriolic Sphere* © (V,S) level 4 Evocation [UB] +# 233. - *Vitriolic Sphere* © (V,S) level 4 Evocation [UB] **[Sorcerer, Wizard]** You point at a place within range, and a glowing 1-foot ball of emerald acid streaks there and explodes in a 20-foot radius. Each creature in that area must make a Dexterity saving throw. On a failed save, a creature takes 10d4 acid damage and 5d4 acid damage at the end of its next turn. On a successful save, a creature takes half the initial damage and no damage at the end of its next turn. When you cast this spell using a spell slot of 5th level or higher, the initial damage increases by 2d4 for each slot level above 4th. -# 235. - Wall of Fire (V,S) level 4 Evocation [Concentration] [SOL] +# 234. - Wall of Fire (V,S) level 4 Evocation [Concentration] [SOL] **[Druid, Sorcerer, Wizard]** Create a burning wall that injures creatures in or next to it. -# 236. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] [UB] +# 235. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] [UB] **[Paladin]** The next time you hit a creature with a weapon attack before this spell ends, your weapon crackles with force, and the attack deals an extra 5d10 force damage to the target. Additionally, if this attack reduces the target to 50 hit points of fewer, you banish it. If the target is native to a different plane of existence than the on you're on, the target disappears, returning to its home plane. If the target is native to the plane you're on, the creature vanishes into a harmless demi-plane. While there, the target is incapacitated. It remains there until the spell ends, at which point the target reappears in the space it left or in the nearest unoccupied space if that space is occupied. -# 237. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] +# 236. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] **[Paladin]** Divine energy radiates from you, distorting and diffusing magical energy within 30 feet of you. Until the spell ends, the sphere moves with you, centered on you. For the duration, each friendly creature in the area, including you, has advantage on saving throws against spells and other magical effects. Additionally, when an affected creature succeeds on a saving throw made against a spell or magical effect that allows it to make a saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throws. -# 238. - Cloudkill (V,S) level 5 Conjuration [Concentration] [SOL] +# 237. - Cloudkill (V,S) level 5 Conjuration [Concentration] [SOL] **[Sorcerer, Wizard]** Creates an obscuring and poisonous cloud. The cloud moves every round. -# 239. - Cone of Cold (V,S) level 5 Evocation [SOL] +# 238. - Cone of Cold (V,S) level 5 Evocation [SOL] **[Sorcerer, Wizard]** Inflicts massive cold damage in the cone of effect. -# 240. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [SOL] +# 239. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [SOL] **[Druid, Wizard]** Conjures an elemental of the chosen element that fights alongside you. If you lose concentration, the elemental remains and becomes hostile. -# 241. - Contagion (V,S) level 5 Necromancy [SOL] +# 240. - Contagion (V,S) level 5 Necromancy [SOL] **[Cleric, Druid]** Hit a creature to inflict a disease from the options. -# 242. - *Dawn* © (V,S) level 5 Evocation [Concentration] [UB] +# 241. - *Dawn* © (V,S) level 5 Evocation [Concentration] [UB] **[Cleric, Wizard]** The light of dawn shines down on a location you specify within range. Until the spell ends, a 30-foot-radius, 40-foot-high cylinder of bright light glimmers there. This light is sunlight. When the cylinder appears, each creature in it must make a Constitution saving throw, taking 4d10 radiant damage on a failed save, or half as much damage on a successful one. A creature must also make this saving throw whenever it ends its turn in the cylinder. If you're within 60 feet of the cylinder, you can move it up to 60 feet as a bonus action on your turn. -# 243. - *Destructive Wave* © (V) level 5 Evocation [UB] +# 242. - *Destructive Wave* © (V) level 5 Evocation [UB] **[Paladin]** You strike the ground, creating a burst of divine energy that ripples outward from you. Each creature you choose within 30 feet of you must succeed on a Constitution saving throw or take 5d6 thunder damage, as well as 5d6 radiant or necrotic damage, and be knocked prone. A creature that succeeds on its saving throw takes half as much damage and isn't knocked prone. -# 244. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [SOL] +# 243. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [SOL] **[Cleric, Paladin]** Celestial, elementals, feys, fiends, and undead have disadvantage on attacks against you. This spell also allows you to cancel hostile enchantments or dismiss extraplanar creatures hit by your attacks once. -# 245. - Dominate Person (V,S) level 5 Enchantment [Concentration] [SOL] +# 244. - Dominate Person (V,S) level 5 Enchantment [Concentration] [SOL] **[Bard, Sorcerer, Wizard]** Grants you control over an enemy creature. -# 246. - *Far Step* © (V) level 5 Conjuration [Concentration] [UB] +# 245. - *Far Step* © (V) level 5 Conjuration [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** You teleport up to 60 ft to an unoccupied space you can see. On each of your turns before the spell ends, you can use a bonus action to teleport in this way again. -# 247. - Flame Strike (V,S) level 5 Evocation [SOL] +# 246. - Flame Strike (V,S) level 5 Evocation [SOL] **[Cleric]** Conjures a burning column of fire and radiance affecting all creatures inside. -# 248. - Greater Restoration (V,S) level 5 Abjuration [SOL] +# 247. - Greater Restoration (V,S) level 5 Abjuration [SOL] **[Artificer, Bard, Cleric, Druid]** Removes one detrimental condition, such as a charm or curse, or an effect that reduces an ability score or hit points. -# 249. - Hold Monster (V,S) level 5 Enchantment [Concentration] [SOL] +# 248. - Hold Monster (V,S) level 5 Enchantment [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Paralyzes a creature unless it succeeds a WIS saving throw. No effect on undead. -# 250. - *Holy Weapon* © (V,S) level 5 Evocation [Concentration] [UB] +# 249. - *Holy Weapon* © (V,S) level 5 Evocation [Concentration] [UB] **[Cleric, Paladin]** You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration. As a bonus action on your turn, if the weapon is within 30 ft, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success. -# 251. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] +# 250. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] **[Sorcerer, Wizard]** Flames wreathe one creature you can see within range. The target must make a Dexterity saving throw. It takes 8d6 fire damage on a failed save, or half as much damage on a successful one. On a failed save, the target also burns for the spell's duration. The burning target sheds bright light in a 30-foot radius and dim light for an additional 30 feet and takes 8d6 fire damage at the start of each of its turns. -# 252. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] +# 251. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] **[Cleric, Druid, Sorcerer]** Summons a sphere of biting insects. -# 253. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] +# 252. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] **[Druid]** Surround yourself with an aura of thorns. Those that start or walk through take 2d8 piercing damage. This damage scales at higher levels by 1d8 per slot. -# 254. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] +# 253. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] **[Bard, Cleric, Druid]** Heals up to 6 creatures. -# 255. - Mind Twist (V,S) level 5 Enchantment [SOL] +# 254. - Mind Twist (V,S) level 5 Enchantment [SOL] **[Sorcerer, Warlock, Wizard]** Causes massive psychic damage to all creatures around you, and incapacitates them if they fail their INT saving throw. -# 256. - Raise Dead (M,V,S) level 5 Necromancy [SOL] +# 255. - Raise Dead (M,V,S) level 5 Necromancy [SOL] **[Bard, Cleric, Paladin]** Brings one creature back to life, up to 10 days after death. -# 257. - *Skill Empowerment* © (V,S) level 5 Divination [UB] +# 256. - *Skill Empowerment* © (V,S) level 5 Divination [UB] **[Artificer, Bard, Sorcerer, Wizard]** Your magic deepens a creature's understanding of its own talent. You touch one willing creature and give it expertise in one skill of your choice; until the spell ends, the creature doubles its proficiency bonus for ability checks it makes that use the chosen skill. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. You must choose a skill in which the target is proficient and that isn't already benefiting from expertise. -# 258. - Sonic Boom (V,S) level 5 Evocation [UB] +# 257. - Sonic Boom (V,S) level 5 Evocation [UB] **[Sorcerer, Wizard]** A small orb the same color as the balloon used appears at a point you choose within range then expands with a loud crack into an explosion of force. Each creature in a 30-foot radius must make a Strength saving throw. A target is pushed up to 30 feet away from the center and dealt 6d8 thunder damage on a failed save, or half as much damage and no movement on a successful one. -# 259. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] +# 258. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] **[Ranger, Wizard]** You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage. You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed. -# 260. - *Swift Quiver* © (M,V,S) level 5 Transmutation [Concentration] [UB] +# 259. - *Swift Quiver* © (M,V,S) level 5 Transmutation [Concentration] [UB] **[Ranger]** You transmute your quiver so it automatically makes the ammunition leap into your hand when you reach for it. On each of your turns until the spell ends, you can use a bonus action to make two attacks with a ranged weapon. -# 261. - *Synaptic Static* © (V) level 5 Evocation [UB] +# 260. - *Synaptic Static* © (V) level 5 Evocation [UB] **[Bard, Sorcerer, Warlock, Wizard]** You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success. -# 262. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] +# 261. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] **[Sorcerer, Wizard]** You can try to move a Huge or smaller creature. Make an ability check with your spellcasting ability contested by the creature's Strength check. If you win the contest, you move the creature up to 30 feet in any direction, but not beyond the range of this spell. Until the end of your next turn, the creature is restrained in your telekinetic grip. On subsequent rounds, you can use your action to attempt to maintain your telekinetic grip on the creature by repeating the contest, or target a new creature, ending the restrained effect on the previously affected creature. -# 263. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] +# 262. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] **[Cleric]** Conjures a wall of razor sharp blades which causes 6d10 slashing damage to anyone crossing it -# 264. - Chain Lightning (V,S) level 6 Evocation [SOL] +# 263. - Chain Lightning (V,S) level 6 Evocation [SOL] **[Sorcerer, Wizard]** Target a creature with lightning, which can arc to 3 other targets within 6 cells. -# 265. - Circle of Death (M,V,S) level 6 Necromancy [SOL] +# 264. - Circle of Death (M,V,S) level 6 Necromancy [SOL] **[Sorcerer, Warlock, Wizard]** A sphere of negative energy causes Necrotic damage from a point you choose -# 266. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] +# 265. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] **[Druid, Warlock]** Conjures a fey creature of challenge rating 1 to 6 to fight alongside you. If you lose concentration, the creature stays but becomes hostile. -# 267. - Disintegrate (V,S) level 6 Transmutation [SOL] +# 266. - Disintegrate (V,S) level 6 Transmutation [SOL] **[Sorcerer, Wizard]** Causes massive force damage on the target, which can be disintegrated if reduced to 0 hit points -# 268. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] +# 267. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Your eyes gain a specific property which can target a creature each turn -# 269. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] +# 268. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] **[Sorcerer, Wizard]** @@ -1628,91 +1622,91 @@ You create a field of silvery light that surrounds a creature of your choice wit • If the creature is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, the creature instead takes no damage if it succeeds on the saving throw, and only half damage if it fails. As a bonus action on subsequent turns, you can move the field to another creature within 60 feet of the field. -# 270. - Flash Freeze (V,S) level 6 Evocation [UB] +# 269. - Flash Freeze (V,S) level 6 Evocation [UB] **[Druid, Sorcerer, Warlock]** You attempt to encase a creature you can see within range in a prison of solid ice. The target must make a Dexterity saving throw. On a failed save, the target takes 10d6 cold damage and becomes restrained in layers of thick ice. On a successful save, the target takes half as much damage and is not restrained. The spell can only be used on creatures up to large size. To break out, the restrained target can make a Strength check as an action against your spell save DC. On success, the target escapes and is no longer restrained. When you cast this spell using a spell slot of 7th level or higher, the cold damage increases by 2d6 for each slot level above 6th. -# 271. - Freezing Sphere (V,S) level 6 Evocation [SOL] +# 270. - Freezing Sphere (V,S) level 6 Evocation [SOL] **[Wizard]** Toss a huge ball of cold energy that explodes on impact -# 272. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] +# 271. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] **[Sorcerer, Wizard]** A sphere surrounding you prevents any spell up to 5th level to affect anyone inside it. -# 273. - *Gravity Fissure* © (V,S) level 6 Evocation [UB] +# 272. - *Gravity Fissure* © (V,S) level 6 Evocation [UB] **[Wizard]** You manifest a ravine of gravitational energy in a line originating from you that is 60 feet long, and 5 feet wide. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one. Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th. -# 274. - Harm (V,S) level 6 Necromancy [SOL] +# 273. - Harm (V,S) level 6 Necromancy [SOL] **[Cleric]** Inflicts devastating necrotic damage and reduces the maximum hit points accordingly. Cannot drop the target below 1 hit points -# 275. - Heal (V,S) level 6 Evocation [SOL] +# 274. - Heal (V,S) level 6 Evocation [SOL] **[Cleric, Druid]** Heals 70 hit points and also removes blindness and diseases -# 276. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] +# 275. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] **[Cleric, Druid]** Summons a feast which cures most ailments and grants immunity to poisonand being frightened, WIS save advantage, and increased maximum hitpoints -# 277. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] +# 276. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] **[Bard, Wizard]** Choose one target. They fall down laughing, becoming prone and incapacitated, and take psychic damage until they save at the end of one of their turns, or until the spell ends. -# 278. - Poison Wave (M,V,S) level 6 Evocation [UB] +# 277. - Poison Wave (M,V,S) level 6 Evocation [UB] **[Wizard]** A poisonous wave erupts from you, engulfing those close by. Each creature within the spell's radius must make a Constitution saving throw, taking 6d10 poison damage on a failure, or half as much damage on a successful one. A creature who fails their saving throw is also poisoned for 1 minute, and can repeat the saving throw at the end of each of its turn. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d10 for each slot level above 6th. -# 279. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] +# 278. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] **[Wizard]** You raise both hands as you evoke six transparent blades around you as a bonus action. When you cast this spell, and as a bonus action on each subsequent turn, you can throw one of these blades at a creature within 60 feet from you. Make a ranged spell attack. On a hit, the target takes 4d10 force damage. When you cast this spell using a spell slot of 7th level or higher, the damage of each blade increases by 1d10 for each slot level above 6th. -# 280. - *Scatter* © (V) level 6 Conjuration [UB] +# 279. - *Scatter* © (V) level 6 Conjuration [UB] **[Sorcerer, Warlock, Wizard]** The air quivers around up to five creatures of your choice that you can see within range. An unwilling creature must succeed on a Wisdom saving throw to resist this spell. You teleport each affected target to an unoccupied space that you can see within 120 feet of you. That space must be on the ground or on a floor. -# 281. - Shelter from Energy (V,S) level 6 Abjuration [UB] +# 280. - Shelter from Energy (V,S) level 6 Abjuration [UB] **[Cleric, Druid, Sorcerer, Wizard]** Choose one of the following damage types: acid, cold, fire, lightning, necrotic, radiant, or thunder, and then choose up to six willing creatures that you can see within range. For 1 hour, targets have resistance to that damage type. When you cast this spell using a spell slot of 7th level or higher, you may target up to one additional willing creature for each slot level above 6th. -# 282. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] +# 281. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] **[Druid, Sorcerer, Wizard]** You conjure a line of radiance which can burn and blind creatures in the line of effect; undead and oozes save with disadvantage. The beam can be retargeted each turn -# 283. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] +# 282. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** Uttering an incantation, you draw on the magic of the Lower Planes or Upper Planes (your choice) to transform yourself. -# 284. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] +# 283. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] **[Wizard]** @@ -1724,49 +1718,49 @@ You endow yourself with endurance and martial prowess fueled by magic. Until the • You can attack twice, instead of once, when you take the Attack action on your turn. Immediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion. -# 285. - True Seeing (V,S) level 6 Divination [SOL] +# 284. - True Seeing (V,S) level 6 Divination [SOL] **[Bard, Cleric, Sorcerer, Warlock, Wizard]** A creature you touch gains True Sight for one hour -# 286. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] +# 285. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] **[Druid]** Creates a wall of tough of needle-sharp thorns, that hurts and slows every creature in it. -# 287. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] +# 286. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] **[Bard, Wizard]** Summon a weapon that fights for you. -# 288. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] +# 287. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] **[Cleric]** Conjures a celestial creature of challenge rating 4 that fights alongside you. If you lose concentration, the creature is dismissed. -# 289. - *Crown of Stars* © (V,S) level 7 Evocation [UB] +# 288. - *Crown of Stars* © (V,S) level 7 Evocation [UB] **[Sorcerer, Warlock, Wizard]** Seven star-like motes of light appear and orbit your head until the spell ends. You can use a bonus action to send one of the motes streaking toward one creature or object within 120 feet of you. When you do so, make a ranged spell attack. On a hit, the target takes 4d12 radiant damage. Whether you hit or miss, the mote is expended. The spell ends early if you expend the last mote. If you have four or more motes remaining, they shed bright light in a 30-foot radius and dim light for an additional 30 feet. If you have one to three motes remaining, they shed dim light in a 30-foot radius. When you cast this spell using a spell slot of 8th level or higher, the number of motes created increases by two for each slot level above 7th. -# 290. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] +# 289. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] **[Sorcerer, Wizard]** Conjures a ball of fire that grows more powerful with time, detonating when a creature enters its space or when the spell ends. -# 291. - Divine Word (V) level 7 Evocation [SOL] +# 290. - Divine Word (V) level 7 Evocation [SOL] **[Cleric]** Utter a divine word that inflicts various negative conditions on enemies you can see, based on their HP. Also banishes all celestials, elementals, feys, and fiends if they fail their saving throws. -# 292. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] +# 291. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] **[Druid, Sorcerer, Wizard]** @@ -1775,216 +1769,216 @@ With a roar, you draw on the magic of dragons to transform yourself, taking on d • When you cast this spell, and as a bonus action on subsequent turns for the duration, you can exhale shimmering energy in a 60-foot cone. Each creature in that area must make a Dexterity saving throw, taking 6d8 force damage on a failed save, or half as much damage on a successful one. • Incorporeal wings sprout from your back, giving you a flying speed of 60 feet. -# 293. - Finger of Death (V,S) level 7 Necromancy [SOL] +# 292. - Finger of Death (V,S) level 7 Necromancy [SOL] **[Sorcerer, Warlock, Wizard]** Send negative energy coursing through a creature within range. -# 294. - Fire Storm (V,S) level 7 Evocation [SOL] +# 293. - Fire Storm (V,S) level 7 Evocation [SOL] **[Cleric, Druid, Sorcerer]** Causes a wide wall of roaring flames to burst up wherever you choose within range. -# 295. - Gravity Slam (V,S) level 7 Transmutation [SOL] +# 294. - Gravity Slam (V,S) level 7 Transmutation [SOL] **[Druid, Sorcerer, Warlock, Wizard]** Increase gravity to slam everyone in a specific area onto the ground. -# 296. - Prismatic Spray (V,S) level 7 Evocation [SOL] +# 295. - Prismatic Spray (V,S) level 7 Evocation [SOL] **[Sorcerer, Wizard]** Each creature within the cone of effect is randomly affected by one or two (roll 8 on d8) rays with the following effects: -# 297. - Regenerate (V,S) level 7 Transmutation [SOL] +# 296. - Regenerate (V,S) level 7 Transmutation [SOL] **[Bard, Cleric, Druid]** Touch a creature and stimulate its natural healing ability. -# 298. - Rescue the Dying (V) level 7 Transmutation [UB] +# 297. - Rescue the Dying (V) level 7 Transmutation [UB] **[Cleric, Druid]** With a word, you call positive energy into the target's body to heal and ward it. The target regains a number of hit points equal to 4d10 + 30. It also gains temporary hit points equal to half that amount and resistance to all damage, both lasting until the end of your next turn. When you cast this spell using a spell slot of 8th level or higher, the healing increases by 2d10 for each slot level above 7th. -# 299. - Resurrection (M,V,S) level 7 Necromancy [SOL] +# 298. - Resurrection (M,V,S) level 7 Necromancy [SOL] **[Bard, Cleric, Druid]** Brings one creature back to life, up to 100 years after death. -# 300. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] +# 299. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] **[Druid, Sorcerer, Wizard]** This spell reverses gravity in a 50-foot-radius, 100-foot-high cylinder centered on a point within range. -# 301. - Symbol (V,S) level 7 Abjuration [SOL] +# 300. - Symbol (V,S) level 7 Abjuration [SOL] **[Bard, Cleric, Wizard]** Inscribe a glyph on a surface. When an enemy starts its turn in the area or enters it, the glyph's effect is applied in a sphere with a 12-cell radius. -# 302. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] +# 301. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] **[Sorcerer, Wizard]** You draw the moisture from every creature in a 30-foot cube centered on a point you choose within range. Each creature in that area must make a Constitution saving throw. Constructs and undead aren't affected, and plants and ice elementals make this saving throw with disadvantage. A creature takes 10d8 necrotic damage on a failed save, or half as much damage on a successful one. -# 303. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] +# 302. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] **[Cleric]** A glowing blade of pure energy springs from your hand. On a hit, the target takes 6d8 radiant damage and must roll a Wisdom saving throw to avoid being stunned until the end of its next turn. -# 304. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] +# 303. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Grants you control over an enemy creature of any type. -# 305. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] +# 304. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] **[Cleric, Druid, Sorcerer]** You create a seismic disturbance that violently shakes the ground and the creatures standing on it for the duration of the spell. -# 306. - Feeblemind (V,S) level 8 Enchantment [SOL] +# 305. - Feeblemind (V,S) level 8 Enchantment [SOL] **[Bard, Druid, Warlock, Wizard]** You blast the mind of one creature, attempting to shatter its intellect and personality. The target takes 4d6 psychic damage and must make an Intelligence saving throw. On a failed save, the creature's Intelligence, Charisma and Wisdom scores become 1 and it is unable to cast spells. These effects last for 1 minute. -# 307. - *Glibness* © (V) level 8 Transmutation [UB] +# 306. - *Glibness* © (V) level 8 Transmutation [UB] **[Bard, Warlock]** Until the spell ends, when you make a Charisma check, you can replace the number you roll with a 15. -# 308. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] +# 307. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] **[Cleric]** Allies within 6 cells of you when you cast Holy Aura gain advantage on all saving throws, and other creatures have disadvantage on attack rolls against them until the spell ends. In addition, when a fiend or an undead hits an affected creature with a melee attack, they must succeed on a Constitution saving throw or be blinded until the spell ends. -# 309. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] +# 308. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] **[Sorcerer, Wizard]** A cloud of smoke appears in a sphere with a 4-cell radius. The cloud damages each creature inside it, and moves away from you each turn until the end of the spell's duration or until a moderate wind disperses the cloud. -# 310. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] +# 309. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] **[Warlock, Wizard]** Magical darkness spreads from a point you choose within range to fill a 60-foot-radius sphere until the spell ends. Shrieks, gibbering, and mad laughter can be heard within the sphere. On activation, and whenever a creature ends its turn in the sphere, it must make a Wisdom saving throw, taking 6d8 psychic damage on a failed save, or half as much damage on a successful one. -# 311. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] +# 310. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] **[Wizard]** You banish a creature that you can see within range into a labyrinthine demiplane. The target remains there for the spell's duration or until it escapes the maze. -# 312. - *Mind Blank* © (V,S) level 8 Transmutation [UB] +# 311. - *Mind Blank* © (V,S) level 8 Transmutation [UB] **[Bard, Wizard]** Until the spell ends, one willing creature you touch is immune to psychic damage, any effect that would sense its emotions or read its thoughts, divination spells, and the charmed condition. -# 313. - Power Word Stun (V) level 8 Enchantment [SOL] +# 312. - Power Word Stun (V) level 8 Enchantment [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Overwhelm the mind of a creature that has 150 hit points or fewer, leaving it stunned. -# 314. - Soul Expulsion (V,S) level 8 Necromancy [UB] +# 313. - Soul Expulsion (V,S) level 8 Necromancy [UB] **[Cleric, Sorcerer, Wizard]** You blast a foe's soul with magical power, causing it to glow with otherwordly light. Choose one creature that you can see within range, which must make a Charisma saving throw. On a failed saving throw, the target takes 11d8 necrotic damage and is stunned until the start of your next turn. On a successful saving throw, the target takes half damage and isn't stunned. Each enemy other than the target that is within 60 feet of the target must make a Wisdom saving throw. On a failed save, a creature takes 7d8 radiant damage and has disadvantage on attack rolls until the end of your next turn. On a successful saving throw a creature takes half damage and nothing else. When this spell targets undead, the spell ignores any resistance or immunity to necrotic damage, and the target has disadvantage on the saving throw. When you cast this spell using a spell slot of 9th level, both the necrotic damage and radiant damage increase by 2d8. -# 315. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] +# 314. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] **[Cleric, Wizard]** Creates a mobile globe that is impenetrable to enemy spells cast from outside it. -# 316. - Sunburst (V,S) level 8 Evocation [SOL] +# 315. - Sunburst (V,S) level 8 Evocation [SOL] **[Druid, Sorcerer, Wizard]** Brilliant sunlight blazes in a sphere with a 12-cell radius. Each creature that fails a Constitution saving throw takes radiant damage and is blinded for 1 minute. Any darkness created by a spell in the area is dispelled. -# 317. - Thunderstorm (V,S) level 8 Transmutation [SOL] +# 316. - Thunderstorm (V,S) level 8 Transmutation [SOL] **[Cleric, Druid, Wizard]** You create a blast of thunder in a sphere that causes thunder and lightning damage to everyone, and can blind or stun those who fail a CON saving throw. -# 318. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] +# 317. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] Turns other creatures in to beasts for one day. -# 319. - *Foresight* © (V,S) level 9 Transmutation [UB] +# 318. - *Foresight* © (V,S) level 9 Transmutation [UB] **[Bard, Druid, Warlock, Wizard]** You touch a willing creature and bestow a limited ability to see into the immediate future. For the duration, the target can't be surprised and has advantage on attack rolls, ability checks, and saving throws. Additionally, other creatures have disadvantage on attack rolls against the target for the duration. -# 320. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] +# 319. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] **[Wizard]** You are immune to all damage until the spell ends. -# 321. - *Mass Heal* © (V,S) level 9 Transmutation [UB] +# 320. - *Mass Heal* © (V,S) level 9 Transmutation [UB] **[Cleric]** A flood of healing energy flows from you into injured creatures around you. You restore 120 hit points each to 6 creatures that you can see within range. Creatures healed by this spell are also cured of all diseases and any effect making them blinded or deafened. This spell has no effect on undead or constructs. -# 322. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] +# 321. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] **[Sorcerer, Wizard]** Blazing orbs of fire plummet to the ground at a single point you can see within range. Each creature in a 40-foot-radius sphere centered on the point you choose must make a Dexterity saving throw. The sphere spreads around corners. A creature takes 20d6 fire damage and 20d6 bludgeoning damage on a failed save, or half as much damage on a successful one. A creature in the area of more than one fiery burst is affected only once. -# 323. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] +# 322. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] **[Bard, Cleric]** A wave of healing energy washes over the creature you touch. The target regains all its hit points. If the creature is charmed, frightened, paralyzed, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This spell has no effect on undead or constructs. -# 324. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] +# 323. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] **[Bard, Sorcerer, Warlock, Wizard]** You utter a word of power that can compel one creature you can see within range to die instantly. If the creature you choose has 100 hit points or fewer, it dies. Otherwise, the spell has no effect. -# 325. - *Psychic Scream* © (S) level 9 Enchantment [UB] +# 324. - *Psychic Scream* © (S) level 9 Enchantment [UB] **[Bard, Sorcerer, Warlock, Wizard]** You unleash the power of your mind to blast the intellect of up to ten creatures of your choice that you can see within range. Each target must make an Intelligence saving throw. On a failed save, a target takes 14d6 psychic damage and is stunned for 1 minute. On a successful save, a target takes half as much damage and isn't stunned. A stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the stunning effect ends. -# 326. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] +# 325. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] **[Druid, Wizard]** You assume the form of a different creature for the duration. The new form can be of any creature with a challenge rating equal to your level or lower. -# 327. - *Time Stop* © (V) level 9 Transmutation [UB] +# 326. - *Time Stop* © (V) level 9 Transmutation [UB] **[Sorcerer, Wizard]** You briefly stop the flow of time for everyone but yourself. No time passes for other creatures, while you take 1d4+1 turns in a row, during which you can use actions and move as normal. This spell ends if one of the actions you use during this period, or any effects that you create during this period, affects a creature other than you. -# 328. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] +# 327. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] **[Warlock, Wizard]** diff --git a/SolastaUnfinishedBusiness/Info.json b/SolastaUnfinishedBusiness/Info.json index b0d3155460..ccbdafd455 100644 --- a/SolastaUnfinishedBusiness/Info.json +++ b/SolastaUnfinishedBusiness/Info.json @@ -1,7 +1,7 @@ { "Id": "SolastaUnfinishedBusiness", "DisplayName": "[Un] Finished Business", - "Version": "1.5.97.36", + "Version": "1.5.97.37", "GameVersion": "1.5.97", "ManagerVersion": "0.24.0", "AssemblyName": "SolastaUnfinishedBusiness.dll", diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs index b12918189d..fb3a1de7a1 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs @@ -1703,9 +1703,9 @@ public static void Postfix(RulesetCharacter __instance, RestType restType, bool } //PATCH: support for Fighters to regain one second wind usage at short rests - // ReSharper disable once InvertIf var fighterClassLevel = __instance.GetClassLevel(Fighter); + // ReSharper disable once InvertIf if (Main.Settings.EnableSecondWindToUseOneDndUsagesProgression && restType == RestType.ShortRest && fighterClassLevel >= 1) diff --git a/SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj b/SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj index 077f7bda2f..796fb7e722 100644 --- a/SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj +++ b/SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj @@ -3,7 +3,7 @@ 12 net48 - 1.5.97.36 + 1.5.97.37 https://github.com/SolastaMods/SolastaUnfinishedBusiness git Debug Install;Release Install diff --git a/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs b/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs index 4d64c0c1c2..54e89f899e 100644 --- a/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs +++ b/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs @@ -24,7 +24,6 @@ namespace SolastaUnfinishedBusiness.Subclasses; public sealed class DomainNature : AbstractSubclass { private const string Name = "DomainNature"; - private const string AcquiredCantripsPoolName = $"{AttributeDefinitions.TagSubclass}Cleric1{Name}{Name}"; private static readonly string[] DampenElementsDamageTypes = [