From b9ae13d6ec3d5d01c8ca83865876546cee487112 Mon Sep 17 00:00:00 2001 From: "romain.quinio" Date: Mon, 25 Jul 2016 00:00:17 +0200 Subject: [PATCH] Rework charm, heal and protect spells to use targeted decision #13 It simplifies things a lot and it's easier for the player: - Simplify the spell events (3 per spell type) - Remove the associated plots - Use scrippted trigger can_cast_spell_trigger to reduce duplication - Add some logging for casted spells (game.log), for future balance --- MOD/Witcher/common/objectives/W_plots.txt | 284 -------- .../scripted_triggers/W_scripted_triggers.txt | 11 + MOD/Witcher/decisions/W_spell_decisions.txt | 608 +++++++++++------- MOD/Witcher/events/W_plot_events.txt | 364 ----------- MOD/Witcher/events/W_spell_events.txt | 270 +++++--- MOD/Witcher/localisation/W_decisions.csv | 23 +- MOD/Witcher/localisation/W_objectives.csv | 12 - MOD/Witcher/localisation/W_plot_events.csv | 18 - MOD/Witcher/localisation/W_spell_events.csv | 21 +- 9 files changed, 605 insertions(+), 1006 deletions(-) diff --git a/MOD/Witcher/common/objectives/W_plots.txt b/MOD/Witcher/common/objectives/W_plots.txt index c8f3aee77..17af55b55 100644 --- a/MOD/Witcher/common/objectives/W_plots.txt +++ b/MOD/Witcher/common/objectives/W_plots.txt @@ -1,287 +1,3 @@ -# Charm character -plot_charm_character = { - type = realm_characters_plus - - # Plotter scope - potential = { - OR = { - AND = { - OR = { - trait = sorcerer - trait = source - } - NOT = { has_character_modifier = drained } - prisoner = no - NOT = { trait = incapable } - } - job_mage = { - OR = { - trait = sorcerer - trait = source - } - NOT = { has_character_modifier = drained } - prisoner = no - NOT = { trait = incapable } - } - } - } - - # Target allow trigger for when players target a specific character in the GUI - player_allow = { - NOT = { culture = wilderness } - is_within_diplo_range = FROM - ai = yes # To keep AI from using it against a player - NOT = { - has_opinion_modifier = { who = FROM modifier = opinion_charmed } - } - } - - # Target character scope - allow = { - NOT = { culture = wilderness } - is_within_diplo_range = FROM - ai = yes # To keep AI from using it against a player - NOT = { - has_opinion_modifier = { who = FROM modifier = opinion_charmed } - } - FROM = { - OR = { - spouse = { character = ROOT } - any_lover = { character = ROOT } - liege = { character = ROOT } - } - } - } - - chance = { - factor = 1 - modifier = { factor = 0.1 } - modifier = { factor = 0.1 FROM = { has_job_title = job_mage } } - # Rank - modifier = { factor = 2.0 ROOT = { liege = { character = FROM } } } - modifier = { factor = 1.5 ROOT = { higher_tier_than = duke } } - modifier = { factor = 1.5 ROOT = { higher_tier_than = king } } - modifier = { factor = 1.5 ROOT = { higher_tier_than = FROM } } - # Traits - modifier = { factor = 2.0 FROM = { trait = mystic } } - modifier = { factor = 2.0 FROM = { trait = kind } } - modifier = { factor = 2.0 FROM = { trait = gregarious } } - modifier = { factor = 2.0 FROM = { trait = charitable } } - # Opinion - modifier = { factor = 2.0 NOT = { opinion = { who = FROM value = 0 } } } - modifier = { factor = 2.0 NOT = { opinion = { who = FROM value = -25 } } } - modifier = { factor = 2.0 NOT = { opinion = { who = FROM value = -50 } } } - modifier = { factor = 2.0 NOT = { opinion = { who = FROM value = -75 } } } - } - - creation_effect = { - hidden_tooltip = { character_event = { id = plots.1 } } - } - - success = { - has_opinion_modifier = { who = FROM modifier = opinion_charmed } - } - - effect = { - custom_tooltip = { text = plot_charm_character_tooltip } - } - - abort = { - is_alive = no - } -} -# Heal character -plot_heal_character = { - type = realm_characters_plus - - # Plotter scope - potential = { - OR = { - AND = { - OR = { - trait = sorcerer - trait = source - } - NOT = { has_character_modifier = drained } - prisoner = no - NOT = { trait = incapable } - } - job_mage = { - OR = { - trait = sorcerer - trait = source - } - NOT = { has_character_modifier = drained } - prisoner = no - NOT = { trait = incapable } - } - } - } - - # Target allow trigger for when players target a specific character in the GUI - player_allow = { - NOT = { culture = wilderness } - is_within_diplo_range = FROM - OR = { - is_ill = yes - trait = wounded - trait = maimed - trait = infirm - trait = blinded - trait = eunuch - } - } - - # Target character scope - allow = { - NOT = { culture = wilderness } - is_within_diplo_range = FROM - OR = { - is_ill = yes - trait = wounded - trait = maimed - trait = infirm - trait = blinded - trait = eunuch - } - FROM = { - OR = { - spouse = { character = ROOT } - any_child = { character = ROOT } - } - } - } - - chance = { - factor = 1 - modifier = { factor = 0.1 } - modifier = { factor = 0.1 FROM = { has_job_title = job_mage } } - # Traits - modifier = { factor = 2.0 FROM = { trait = kind } } - modifier = { factor = 2.0 FROM = { trait = gregarious } } - modifier = { factor = 2.0 FROM = { trait = charitable } } - # Family - modifier = { factor = 5.0 dynasty = FROM } - modifier = { factor = 10.0 spouse = { character = FROM } } - modifier = { factor = 10.0 father = { character = FROM } } - modifier = { factor = 10.0 mother = { character = FROM } } - modifier = { factor = 10.0 any_lover = { character = FROM } } - # Opinion - modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 25 } } - modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 50 } } - modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 75 } } - modifier = { factor = 0 NOT = { reverse_opinion = { who = FROM value = 0 } } } - } - - creation_effect = { - hidden_tooltip = { character_event = { id = plots.10 } } - } - - success = { - NOT = { - is_ill = yes - trait = wounded - trait = maimed - trait = infirm - trait = blinded - trait = eunuch - } - } - - effect = { - custom_tooltip = { text = plot_heal_character_tooltip } - } - - abort = { - is_alive = no - } -} -# Protect character -plot_protect_character = { - type = realm_characters_plus - - # Plotter scope - potential = { - NOT = { culture = wilderness } - OR = { - AND = { - OR = { - trait = sorcerer - trait = source - } - NOT = { has_character_modifier = drained } - prisoner = no - NOT = { trait = incapable } - } - job_mage = { - OR = { - trait = sorcerer - trait = source - } - NOT = { has_character_modifier = drained } - prisoner = no - NOT = { trait = incapable } - } - } - } - - # Target allow trigger for when players target a specific character in the GUI - player_allow = { - NOT = { culture = wilderness } - is_within_diplo_range = FROM - NOT = { has_character_modifier = protection_spell } - } - - # Target character scope - allow = { - NOT = { culture = wilderness } - is_within_diplo_range = FROM - NOT = { has_character_modifier = protection_spell } - FROM = { - OR = { - spouse = { character = ROOT } - any_child = { character = ROOT } - } - } - } - - chance = { - factor = 1 - modifier = { factor = 0.1 } - modifier = { factor = 0.1 FROM = { has_job_title = job_mage } } - # Traits - modifier = { factor = 2.0 FROM = { trait = kind } } - modifier = { factor = 2.0 FROM = { trait = gregarious } } - modifier = { factor = 2.0 FROM = { trait = charitable } } - # Family - modifier = { factor = 5.0 dynasty = FROM } - modifier = { factor = 10.0 spouse = { character = FROM } } - modifier = { factor = 10.0 father = { character = FROM } } - modifier = { factor = 10.0 mother = { character = FROM } } - modifier = { factor = 10.0 any_lover = { character = FROM } } - # Opinion - modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 25 } } - modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 50 } } - modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 75 } } - modifier = { factor = 0 NOT = { reverse_opinion = { who = FROM value = 0 } } } - } - - creation_effect = { - hidden_tooltip = { character_event = { id = plots.20 } } - } - - success = { - has_character_modifier = protection_spell - } - - effect = { - custom_tooltip = { text = plot_protect_character_tooltip } - } - - abort = { - is_alive = no - } -} # Discredit fellow vassal - more accessible version of weaken fellow vassal plot_discredit_fellow_vassal = { type = realm_characters diff --git a/MOD/Witcher/common/scripted_triggers/W_scripted_triggers.txt b/MOD/Witcher/common/scripted_triggers/W_scripted_triggers.txt index 01eb7d686..2f4d3d363 100644 --- a/MOD/Witcher/common/scripted_triggers/W_scripted_triggers.txt +++ b/MOD/Witcher/common/scripted_triggers/W_scripted_triggers.txt @@ -21,4 +21,15 @@ can_be_mage_trigger = { NOT = { has_opinion_modifier = { who = PREV modifier = opinion_left_council } } NOT = { has_opinion_modifier = { who = PREV modifier = opinion_refused_council } } } +} + +# Checks that character is a capable spellcaster +# Does not check for drained modifier +can_cast_spell_trigger = { + OR = { + trait = sorcerer + trait = source + } + prisoner = no + NOT = { trait = incapable } } \ No newline at end of file diff --git a/MOD/Witcher/decisions/W_spell_decisions.txt b/MOD/Witcher/decisions/W_spell_decisions.txt index d80fcfea8..cafa266b8 100644 --- a/MOD/Witcher/decisions/W_spell_decisions.txt +++ b/MOD/Witcher/decisions/W_spell_decisions.txt @@ -1,40 +1,143 @@ -decisions = { - spell_heal_court_mage = { # Toggled - potential = { - OR = { - ai = yes - has_character_flag = spell_decisions_open +# FROM is the decision taker +# ROOT is the targeted character +targetted_decisions = { + + # Charm character via Court Mage + have_court_mage_cast_charm_spell = { + filter = sub_realm + ai_target_filter = sub_realm + + from_potential = { + job_mage = { + can_cast_spell_trigger = yes } + } + + potential = { NOT = { culture = wilderness } - job_mage = { - OR = { - trait = sorcerer - trait = source - } - prisoner = no - NOT = { trait = incapable } + is_within_diplo_range = FROM + ai = yes # To keep AI from using it against a player + } + + allow = { + job_mage = { NOT = { has_character_modifier = drained } } + NOT = { + has_opinion_modifier = { who = FROM modifier = opinion_charmed } + } + } + + effect = { + custom_tooltip = { text = spell_charm_tooltip } + hidden_tooltip = { + job_mage = { character_event = { id = spell.42 } } } } + + revoke_allowed = { + always = no + } + + ai_will_do = { + factor = 1 + modifier = { factor = 0.1 } + modifier = { factor = 0.1 FROM = { has_job_title = job_mage } } + modifier = { factor = 0.01 war = yes } + + # Rank + modifier = { factor = 2.0 FROM = { liege = { character = ROOT } } } + modifier = { factor = 1.5 higher_tier_than = duke } + modifier = { factor = 1.5 higher_tier_than = king } + modifier = { factor = 1.5 higher_tier_than = FROM } + # Traits + modifier = { factor = 2.0 FROM = { trait = mystic } } + modifier = { factor = 2.0 FROM = { trait = kind } } + modifier = { factor = 2.0 FROM = { trait = gregarious } } + modifier = { factor = 2.0 FROM = { trait = charitable } } + # Opinion + modifier = { factor = 2.0 NOT = { opinion = { who = FROM value = 0 } } } + modifier = { factor = 2.0 NOT = { opinion = { who = FROM value = -25 } } } + modifier = { factor = 2.0 NOT = { opinion = { who = FROM value = -50 } } } + modifier = { factor = 2.0 NOT = { opinion = { who = FROM value = -75 } } } + } + } + + # Charm character + cast_charm_spell = { + filter = sub_realm + ai_target_filter = sub_realm + + from_potential = { + can_cast_spell_trigger = yes + } + + potential = { + NOT = { culture = wilderness } + is_within_diplo_range = FROM + ai = yes # To keep AI from using it against a player + } + allow = { + FROM = { NOT = { has_character_modifier = drained } } + NOT = { + has_opinion_modifier = { who = FROM modifier = opinion_charmed } + } + } + + effect = { + custom_tooltip = { text = spell_charm_tooltip } + hidden_tooltip = { + FROM = { character_event = { id = spell.41 } } + } + } + + revoke_allowed = { + always = no + } + + ai_will_do = { + factor = 1 + modifier = { factor = 0.1 } + modifier = { factor = 0.1 FROM = { has_job_title = job_mage } } + modifier = { factor = 0.01 war = yes } + + # Rank + modifier = { factor = 2.0 FROM = { liege = { character = ROOT } } } + modifier = { factor = 1.5 higher_tier_than = duke } + modifier = { factor = 1.5 higher_tier_than = king } + modifier = { factor = 1.5 higher_tier_than = FROM } + # Traits + modifier = { factor = 2.0 FROM = { trait = mystic } } + modifier = { factor = 2.0 FROM = { trait = kind } } + modifier = { factor = 2.0 FROM = { trait = gregarious } } + modifier = { factor = 2.0 FROM = { trait = charitable } } + # Opinion + modifier = { factor = 2.0 NOT = { opinion = { who = FROM value = 0 } } } + modifier = { factor = 2.0 NOT = { opinion = { who = FROM value = -25 } } } + modifier = { factor = 2.0 NOT = { opinion = { who = FROM value = -50 } } } + modifier = { factor = 2.0 NOT = { opinion = { who = FROM value = -75 } } } + } + } + + # Heal character via Court Mage + have_court_mage_cast_heal_spell = { + filter = sub_realm + ai_target_filter = sub_realm + + from_potential = { job_mage = { - OR = { - trait = sorcerer - trait = source - } - NOT = { has_character_modifier = drained } + can_cast_spell_trigger = yes } + } + + potential = { + NOT = { culture = wilderness } + is_within_diplo_range = FROM + } + + allow = { + job_mage = { NOT = { has_character_modifier = drained } } OR = { - trait = ill - trait = pneumonic - trait = syphilitic - trait = leper - trait = has_tuberculosis - trait = has_typhoid_fever - trait = has_typhus - trait = has_bubonic_plague - trait = has_measles - trait = has_small_pox - trait = has_aztec_disease + is_ill = yes trait = wounded trait = maimed trait = infirm @@ -42,53 +145,84 @@ decisions = { trait = eunuch } } + effect = { custom_tooltip = { text = spell_heal_tooltip } - hidden_tooltip = { character_event = { id = spell.1 } } + hidden_tooltip = { + job_mage = { character_event = { id = spell.2 } } + } } + + revoke_allowed = { + always = no + } + ai_will_do = { factor = 1 modifier = { factor = 0.1 } - modifier = { factor = 4 NOT = { health = 2 } } - modifier = { factor = 3 NOT = { health = 3 } } - modifier = { factor = 2 NOT = { health = 4 } } - modifier = { factor = 5 trait = blinded } - modifier = { factor = 5 trait = infirm } modifier = { factor = 0.01 war = yes } + + # Health + modifier = { + factor = 4 + character = FROM # On self + NOT = { health = 2 } + } + modifier = { + factor = 3 + character = FROM # On self + NOT = { health = 3 } + } + modifier = { + factor = 2 + character = FROM # On self + NOT = { health = 4 } + } + modifier = { + factor = 5 + character = FROM # On self + OR = { + trait = blinded + trait = infirm + } + } + + # Traits + modifier = { factor = 2.0 FROM = { trait = kind } } + modifier = { factor = 2.0 FROM = { trait = gregarious } } + modifier = { factor = 2.0 FROM = { trait = charitable } } + # Family + modifier = { factor = 5.0 dynasty = FROM } + modifier = { factor = 10.0 spouse = { character = FROM } } + modifier = { factor = 10.0 father = { character = FROM } } + modifier = { factor = 10.0 mother = { character = FROM } } + modifier = { factor = 10.0 any_lover = { character = FROM } } + # Opinion + modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 25 } } + modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 50 } } + modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 75 } } + modifier = { factor = 0 NOT = { reverse_opinion = { who = FROM value = 0 } } } } } - spell_heal = { # Toggled + + # Heal character + cast_heal_spell = { + filter = sub_realm + ai_target_filter = sub_realm + + from_potential = { + can_cast_spell_trigger = yes + } + potential = { - OR = { - ai = yes - has_character_flag = spell_decisions_open - } NOT = { culture = wilderness } - OR = { - trait = sorcerer - trait = source - } - prisoner = no - NOT = { trait = incapable } + is_within_diplo_range = FROM } + allow = { + FROM = { NOT = { has_character_modifier = drained } } OR = { - trait = sorcerer - trait = source - } - NOT = { has_character_modifier = drained } - OR = { - trait = ill - trait = pneumonic - trait = syphilitic - trait = leper - trait = has_tuberculosis - trait = has_typhoid_fever - trait = has_typhus - trait = has_bubonic_plague - trait = has_measles - trait = has_small_pox - trait = has_aztec_disease + is_ill = yes trait = wounded trait = maimed trait = infirm @@ -96,22 +230,203 @@ decisions = { trait = eunuch } } + effect = { custom_tooltip = { text = spell_heal_tooltip } - hidden_tooltip = { character_event = { id = spell.2 } } + hidden_tooltip = { + FROM = { character_event = { id = spell.1 } } + } + } + + revoke_allowed = { + always = no + } + + ai_will_do = { + factor = 1 + modifier = { factor = 0.1 } + modifier = { factor = 0.1 FROM = { has_job_title = job_mage } } + modifier = { factor = 0.01 war = yes } + + # On self + modifier = { + factor = 4 + character = FROM + NOT = { health = 2 } + } + modifier = { + factor = 3 + character = FROM + NOT = { health = 3 } + } + modifier = { + factor = 2 + character = FROM + NOT = { health = 4 } + } + modifier = { + factor = 5 + character = FROM + OR = { + trait = blinded + trait = infirm + } + } + + # Traits + modifier = { factor = 2.0 FROM = { trait = kind } } + modifier = { factor = 2.0 FROM = { trait = gregarious } } + modifier = { factor = 2.0 FROM = { trait = charitable } } + # Family + modifier = { factor = 5.0 dynasty = FROM } + modifier = { factor = 10.0 spouse = { character = FROM } } + modifier = { factor = 10.0 father = { character = FROM } } + modifier = { factor = 10.0 mother = { character = FROM } } + modifier = { factor = 10.0 any_lover = { character = FROM } } + # Opinion + modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 25 } } + modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 50 } } + modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 75 } } + modifier = { factor = 0 NOT = { reverse_opinion = { who = FROM value = 0 } } } + } + } + + # Protect character via Court Mage + have_court_mage_cast_protect_spell = { + filter = sub_realm + ai_target_filter = sub_realm + + from_potential = { + job_mage = { + can_cast_spell_trigger = yes + } } + + potential = { + NOT = { culture = wilderness } + is_within_diplo_range = FROM + } + + allow = { + job_mage = { NOT = { has_character_modifier = drained } } + NOT = { has_character_modifier = protection_spell } + } + + effect = { + custom_tooltip = { text = spell_protection_tooltip } + hidden_tooltip = { + job_mage = { character_event = { id = spell.32 } } + } + } + + revoke_allowed = { + always = no + } + ai_will_do = { factor = 1 modifier = { factor = 0.1 } - modifier = { factor = 0.01 has_job_title = job_mage } - modifier = { factor = 4 NOT = { health = 2 } } - modifier = { factor = 3 NOT = { health = 3 } } - modifier = { factor = 2 NOT = { health = 4 } } - modifier = { factor = 5 trait = blinded } - modifier = { factor = 5 trait = infirm } modifier = { factor = 0.01 war = yes } + + # On self + modifier = { + factor = 2 + character = FROM + trait = craven + } + modifier = { + factor = 0.5 + character = FROM + trait = brave + } + + # Traits + modifier = { factor = 2.0 FROM = { trait = kind } } + modifier = { factor = 2.0 FROM = { trait = gregarious } } + modifier = { factor = 2.0 FROM = { trait = charitable } } + # Family + modifier = { factor = 5.0 dynasty = FROM } + modifier = { factor = 10.0 spouse = { character = FROM } } + modifier = { factor = 10.0 father = { character = FROM } } + modifier = { factor = 10.0 mother = { character = FROM } } + modifier = { factor = 10.0 any_lover = { character = FROM } } + # Opinion + modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 25 } } + modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 50 } } + modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 75 } } + modifier = { factor = 0 NOT = { reverse_opinion = { who = FROM value = 0 } } } } } + + # Protect character + cast_protect_spell = { + filter = sub_realm + ai_target_filter = sub_realm + + from_potential = { + can_cast_spell_trigger = yes + } + + potential = { + NOT = { culture = wilderness } + is_within_diplo_range = FROM + } + + allow = { + FROM = { NOT = { has_character_modifier = drained } } + NOT = { has_character_modifier = protection_spell } + } + + effect = { + custom_tooltip = { text = spell_protection_tooltip } + hidden_tooltip = { + FROM = { character_event = { id = spell.31 } } + } + } + + revoke_allowed = { + always = no + } + + ai_will_do = { + factor = 1 + modifier = { factor = 0.1 } + modifier = { factor = 0.01 war = yes } + modifier = { factor = 0.1 FROM = { has_job_title = job_mage } } + + # On self + modifier = { + factor = 2 + character = FROM + trait = craven + } + modifier = { + factor = 0.5 + character = FROM + trait = brave + } + + # Traits + modifier = { factor = 2.0 FROM = { trait = kind } } + modifier = { factor = 2.0 FROM = { trait = gregarious } } + modifier = { factor = 2.0 FROM = { trait = charitable } } + # Family + modifier = { factor = 5.0 dynasty = FROM } + modifier = { factor = 10.0 spouse = { character = FROM } } + modifier = { factor = 10.0 father = { character = FROM } } + modifier = { factor = 10.0 mother = { character = FROM } } + modifier = { factor = 10.0 any_lover = { character = FROM } } + # Opinion + modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 25 } } + modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 50 } } + modifier = { factor = 2.0 reverse_opinion = { who = FROM value = 75 } } + modifier = { factor = 0 NOT = { reverse_opinion = { who = FROM value = 0 } } } + } + } +} + + +decisions = { spell_glamour = { # Toggled potential = { OR = { @@ -119,18 +434,9 @@ decisions = { has_character_flag = spell_decisions_open } NOT = { culture = wilderness } - OR = { - trait = sorcerer - trait = source - } - prisoner = no - NOT = { trait = incapable } + can_cast_spell_trigger = yes } allow = { - OR = { - trait = sorcerer - trait = source - } NOT = { has_character_modifier = drained } OR = { NOT = { trait = fair } @@ -166,22 +472,11 @@ decisions = { } NOT = { culture = wilderness } job_mage = { - OR = { - trait = sorcerer - trait = source - } - prisoner = no - NOT = { trait = incapable } + can_cast_spell_trigger = yes } } allow = { - job_mage = { - OR = { - trait = sorcerer - trait = source - } - NOT = { has_character_modifier = drained } - } + NOT = { has_character_modifier = drained } } effect = { custom_tooltip = { text = spell_foresight_tooltip } @@ -198,18 +493,9 @@ decisions = { has_character_flag = spell_decisions_open } NOT = { culture = wilderness } - OR = { - trait = sorcerer - trait = source - } - prisoner = no - NOT = { trait = incapable } + can_cast_spell_trigger = yes } allow = { - OR = { - trait = sorcerer - trait = source - } NOT = { has_character_modifier = drained } } effect = { @@ -220,79 +506,7 @@ decisions = { factor = 0 } } - spell_protection_court_mage = { # Toggled - potential = { - OR = { - ai = yes - has_character_flag = spell_decisions_open - } - NOT = { culture = wilderness } - job_mage = { - OR = { - trait = sorcerer - trait = source - } - prisoner = no - NOT = { trait = incapable } - } - } - allow = { - job_mage = { - OR = { - trait = sorcerer - trait = source - } - NOT = { has_character_modifier = drained } - } - NOT = { has_character_modifier = protection_spell } - } - effect = { - custom_tooltip = { text = spell_protection_tooltip } - hidden_tooltip = { character_event = { id = spell.30 } } - } - ai_will_do = { - factor = 1 - modifier = { factor = 0.1 } - modifier = { factor = 2 trait = craven } - modifier = { factor = 0.5 trait = brave } - modifier = { factor = 0.01 war = yes } - } - } - spell_protection = { # Toggled - potential = { - OR = { - ai = yes - has_character_flag = spell_decisions_open - } - NOT = { culture = wilderness } - OR = { - trait = sorcerer - trait = source - } - prisoner = no - NOT = { trait = incapable } - } - allow = { - OR = { - trait = sorcerer - trait = source - } - NOT = { has_character_modifier = drained } - NOT = { has_character_modifier = protection_spell } - } - effect = { - custom_tooltip = { text = spell_protection_tooltip } - hidden_tooltip = { character_event = { id = spell.31 } } - } - ai_will_do = { - factor = 0 - modifier = { factor = 0.1 } - modifier = { factor = 0.01 has_job_title = job_mage } - modifier = { factor = 2 trait = craven } - modifier = { factor = 0.5 trait = brave } - modifier = { factor = 0.01 war = yes } - } - } + spell_siege_court_mage = { # Toggled potential = { OR = { @@ -301,20 +515,11 @@ decisions = { } NOT = { culture = wilderness } job_mage = { - OR = { - trait = sorcerer - trait = source - } - prisoner = no - NOT = { trait = incapable } + can_cast_spell_trigger = yes } } allow = { job_mage = { - OR = { - trait = sorcerer - trait = source - } NOT = { has_character_modifier = drained } OR = { siege = { is_attacker = yes } # The caster of spell needs to be a commander @@ -351,18 +556,9 @@ decisions = { has_character_flag = spell_decisions_open } NOT = { culture = wilderness } - OR = { - trait = sorcerer - trait = source - } - prisoner = no - NOT = { trait = incapable } + can_cast_spell_trigger = yes } allow = { - OR = { - trait = sorcerer - trait = source - } NOT = { has_character_modifier = drained } siege = { is_attacker = yes } # The caster of spell needs to be a commander } @@ -392,20 +588,11 @@ decisions = { } NOT = { culture = wilderness } job_mage = { - OR = { - trait = sorcerer - trait = source - } - prisoner = no - NOT = { trait = incapable } + can_cast_spell_trigger = yes } } allow = { job_mage = { - OR = { - trait = sorcerer - trait = source - } NOT = { has_character_modifier = drained } OR = { in_battle = yes # The caster of spell needs to be a commander @@ -541,18 +728,9 @@ decisions = { has_character_flag = spell_decisions_open } NOT = { culture = wilderness } - OR = { - trait = sorcerer - trait = source - } - prisoner = no - NOT = { trait = incapable } + can_cast_spell_trigger = yes } allow = { - OR = { - trait = sorcerer - trait = source - } NOT = { has_character_modifier = drained } in_battle = yes # The caster of spell needs to be a commander OR = { diff --git a/MOD/Witcher/events/W_plot_events.txt b/MOD/Witcher/events/W_plot_events.txt index 9af51ffc3..bf75d93c0 100644 --- a/MOD/Witcher/events/W_plot_events.txt +++ b/MOD/Witcher/events/W_plot_events.txt @@ -2,370 +2,6 @@ namespace = plots # TO DO - expand Discredit Fellow Vassal plot with few options giving prison reason # TO DO - make Discredit Fellow Vassal plot similar to Kill Character plot -########################################### -# Charm a character -########################################### -# Hidden - Decide who casts the spell -character_event = { - id = plots.1 - - hide_window = yes - is_triggered_only = yes - - option = { # Court magician is a sorcerer - name = OK - trigger = { - job_mage = { - OR = { - trait = sorcerer - trait = source - } - } - } - ai_chance = { factor = 1000 } - character_event = { id = plots.2 } - } - option = { # Ruler is a sorcerer - name = OK - trigger = { - OR = { - trait = sorcerer - trait = source - } - } - ai_chance = { factor = 1 } - character_event = { id = plots.3 } - } - option = { # An always available option just in case - name = OK - ai_chance = { factor = 0 } - } -} -# Court mage casts charm spell -character_event = { - id = plots.2 - desc = EVTDESCplots.2 - picture = GFX_evt_courtiers_talking - - trigger = { - has_plot = plot_charm_character - job_mage = { trait = sorcerer } - } - - mean_time_to_happen = { - days = 1 - } - - option = { - name = EVTOPTAplots.2 - job_mage = { - add_character_modifier = { name = drained duration = 180 } - hidden_tooltip = { character_event = { id = plots.4 } } - } - plot_target_char = { opinion = { modifier = opinion_charmed who = ROOT } } - } -} -# You cast charm spell -character_event = { - id = plots.3 - desc = EVTDESCplots.3 - picture = GFX_evt_courtiers_talking - - trigger = { - has_plot = plot_charm_character - trait = sorcerer - } - - mean_time_to_happen = { - days = 1 - } - - option = { - name = EVTOPTAplots.3 - add_character_modifier = { name = drained duration = 180 } - plot_target_char = { opinion = { modifier = opinion_charmed who = ROOT } } - } -} -# Court mage notification -character_event = { - id = plots.4 - desc = EVTDESCplots.4 - picture = GFX_evt_courtiers_talking - - is_triggered_only = yes - - notification = yes - - trigger = { - ai = no - } - - option = { - name = EVTOPTAplots.4 - add_character_modifier = { name = drained duration = 180 } - } -} - -########################################### -# Heal a character -########################################### -# Hidden - decide who casts the spell -character_event = { - id = plots.10 - - hide_window = yes - is_triggered_only = yes - - option = { # Court magician is a sorcerer - name = OK - trigger = { - job_mage = { - OR = { - trait = sorcerer - trait = source - } - } - } - ai_chance = { factor = 1000 } - character_event = { id = plots.11 } - } - option = { # Ruler is a sorcerer - name = OK - trigger = { - OR = { - trait = sorcerer - trait = source - } - } - ai_chance = { factor = 1 } - character_event = { id = plots.12 } - } - option = { # An always available option just in case - name = OK - ai_chance = { factor = 0 } - } -} -# Court mage casts heal spell -character_event = { - id = plots.11 - desc = EVTDESCplots.11 - picture = GFX_evt_recovery - - trigger = { - has_plot = plot_heal_character - job_mage = { - trait = sorcerer - } - } - - mean_time_to_happen = { - days = 1 - } - - option = { - name = EVTOPTAplots.11 - job_mage = { - add_character_modifier = { name = drained duration = 180 } - hidden_tooltip = { character_event = { id = plots.13 } } - } - plot_target_char = { - if = { limit = { trait = ill } remove_trait = ill } - if = { limit = { trait = pneumonic } remove_trait = pneumonic } - if = { limit = { trait = syphilitic } remove_trait = syphilitic } - if = { limit = { trait = leper } remove_trait = leper } - if = { limit = { trait = has_tuberculosis } remove_trait = has_tuberculosis } - if = { limit = { trait = has_typhoid_fever } remove_trait = has_typhoid_fever } - if = { limit = { trait = has_typhus } remove_trait = has_typhus } - if = { limit = { trait = has_bubonic_plague } remove_trait = has_bubonic_plague } - if = { limit = { trait = has_measles } remove_trait = has_measles } - if = { limit = { trait = has_small_pox } remove_trait = has_small_pox } - if = { limit = { trait = has_aztec_disease } remove_trait = has_aztec_disease } - if = { limit = { trait = wounded } remove_trait = wounded } - if = { limit = { trait = maimed } remove_trait = maimed } - if = { limit = { trait = infirm } remove_trait = infirm } - if = { limit = { trait = blinded } remove_trait = blinded } - if = { limit = { trait = eunuch } remove_trait = eunuch } - opinion = { modifier = opinion_grateful who = ROOT } - } - } -} -# You cast heal spell -character_event = { - id = plots.12 - desc = EVTDESCplots.12 - picture = GFX_evt_recovery - - trigger = { - has_plot = plot_heal_character - trait = sorcerer - } - - mean_time_to_happen = { - days = 1 - } - - option = { - name = EVTOPTAplots.12 - add_character_modifier = { name = drained duration = 180 } - plot_target_char = { - if = { limit = { trait = ill } remove_trait = ill } - if = { limit = { trait = pneumonic } remove_trait = pneumonic } - if = { limit = { trait = syphilitic } remove_trait = syphilitic } - if = { limit = { trait = leper } remove_trait = leper } - if = { limit = { trait = has_tuberculosis } remove_trait = has_tuberculosis } - if = { limit = { trait = has_typhoid_fever } remove_trait = has_typhoid_fever } - if = { limit = { trait = has_typhus } remove_trait = has_typhus } - if = { limit = { trait = has_bubonic_plague } remove_trait = has_bubonic_plague } - if = { limit = { trait = has_measles } remove_trait = has_measles } - if = { limit = { trait = has_small_pox } remove_trait = has_small_pox } - if = { limit = { trait = has_aztec_disease } remove_trait = has_aztec_disease } - if = { limit = { trait = wounded } remove_trait = wounded } - if = { limit = { trait = maimed } remove_trait = maimed } - if = { limit = { trait = infirm } remove_trait = infirm } - if = { limit = { trait = blinded } remove_trait = blinded } - if = { limit = { trait = eunuch } remove_trait = eunuch } - opinion = { modifier = opinion_grateful who = ROOT } - } - } -} -# Court mage notification -character_event = { - id = plots.13 - desc = EVTDESCplots.13 - picture = GFX_evt_recovery - - is_triggered_only = yes - - notification = yes - - trigger = { - ai = no - } - - option = { - name = EVTOPTAplots.13 - add_character_modifier = { name = drained duration = 180 } - } -} - -########################################### -# Protect a character -########################################### -# Hidden - decide who casts the spell -character_event = { - id = plots.20 - - hide_window = yes - is_triggered_only = yes - - option = { # Court magician is a sorcerer - name = OK - trigger = { - job_mage = { - OR = { - trait = sorcerer - trait = source - } - } - } - ai_chance = { factor = 1000 } - character_event = { id = plots.21 } - } - option = { # Ruler is a sorcerer - name = OK - trigger = { - OR = { - trait = sorcerer - trait = source - } - } - ai_chance = { factor = 1 } - character_event = { id = plots.22 } - } - option = { # An always available option just in case - name = OK - ai_chance = { factor = 0 } - } -} -# Court mage casts protect spell -character_event = { - id = plots.21 - desc = EVTDESCplots.21 - picture = GFX_evt_knight_kneeling - - trigger = { - has_plot = plot_protect_character - job_mage = { - OR = { - trait = sorcerer - trait = source - } - } - } - - mean_time_to_happen = { - days = 1 - } - - option = { - name = EVTOPTAplots.21 - job_mage = { - add_character_modifier = { name = drained duration = 180 } - hidden_tooltip = { character_event = { id = plots.23 } } - } - plot_target_char = { - add_character_modifier = { name = protection_spell duration = -1 } - opinion = { modifier = opinion_grateful who = ROOT } - } - } -} -# You cast protect spell -character_event = { - id = plots.22 - desc = EVTDESCplots.22 - picture = GFX_evt_knight_kneeling - - trigger = { - has_plot = plot_protect_character - OR = { - trait = sorcerer - trait = source - } - } - - mean_time_to_happen = { - days = 1 - } - - option = { - name = EVTOPTAplots.22 - add_character_modifier = { name = drained duration = 180 } - plot_target_char = { - add_character_modifier = { name = protection_spell duration = -1 } - opinion = { modifier = opinion_grateful who = ROOT } - } - } -} -# Court mage notification -character_event = { - id = plots.23 - desc = EVTDESCplots.23 - picture = GFX_evt_knight_kneeling - - is_triggered_only = yes - - notification = yes - - trigger = { - ai = no - } - - option = { - name = EVTOPTAplots.23 - add_character_modifier = { name = drained duration = 180 } - } -} - ########################################### # Discredit fellow vassal ########################################### diff --git a/MOD/Witcher/events/W_spell_events.txt b/MOD/Witcher/events/W_spell_events.txt index 133b01cd9..d1a650120 100644 --- a/MOD/Witcher/events/W_spell_events.txt +++ b/MOD/Witcher/events/W_spell_events.txt @@ -1,91 +1,99 @@ namespace = spell + +# There are 3 events per type of spell: + +# Event A: attempt to cast spell on target, caster gets drained +# The target is notified of the effect of the spell +# This event is logged, to be able to tune the balance of AI modifiers +# The spell casting happens as an event on the target rather than the caster, so that target could potentially react via magic +# ROOT = target +# FROM = caster +# FROMFROMFROM = requester + +# Event B: ping event for Event A, so that caster gets in FROM scope +# Fired from targeted decision by a caster +# ROOT = caster +# FROM = target +# FROMFROM = requester + +# Event C: liege asks the caster to cast a spell on the target, if caster agrees it triggers Event A +# Fired from targeted decision by a liege, using their Court Mage +# ROOT = caster +# FROM = target +# FROMFROM = requester + ################################################ -# Heal spell +# Heal spell (spell.0 -> spell.9) ################################################ -# Court mage casts heal spell + +# Cast heal spell +# ROOT = target +# FROM = caster +# FROMFROMFROM = requester character_event = { - id = spell.1 - desc = EVTDESCspell.1 + id = spell.0 + desc = EVTDESCspell.0 picture = GFX_evt_recovery is_triggered_only = yes option = { - name = EVTOPTAspell.1 - job_mage = { + name = EVTOPTAspell.0 + log = "[From.GetTitledName] is casting a heal spell on [Root.GetTitledName] by order of [FromFromFrom.GetTitledName]" + + cure_illness = yes + remove_trait = wounded + remove_trait = maimed + remove_trait = infirm + remove_trait = blinded + remove_trait = eunuch + + FROM = { add_character_modifier = { name = drained duration = 180 } - hidden_tooltip = {# Court mage notification - character_event = { id = spell.3 } - } } - if = { limit = { trait = ill } remove_trait = ill } - if = { limit = { trait = pneumonic } remove_trait = pneumonic } - if = { limit = { trait = syphilitic } remove_trait = syphilitic } - if = { limit = { trait = leper } remove_trait = leper } - if = { limit = { trait = has_tuberculosis } remove_trait = has_tuberculosis } - if = { limit = { trait = has_typhoid_fever } remove_trait = has_typhoid_fever } - if = { limit = { trait = has_typhus } remove_trait = has_typhus } - if = { limit = { trait = has_bubonic_plague } remove_trait = has_bubonic_plague } - if = { limit = { trait = has_measles } remove_trait = has_measles } - if = { limit = { trait = has_small_pox } remove_trait = has_small_pox } - if = { limit = { trait = has_aztec_disease } remove_trait = has_aztec_disease } - if = { limit = { trait = wounded } remove_trait = wounded } - if = { limit = { trait = maimed } remove_trait = maimed } - if = { limit = { trait = infirm } remove_trait = infirm } - if = { limit = { trait = blinded } remove_trait = blinded } - if = { limit = { trait = eunuch } remove_trait = eunuch } } } -# You cast heal spell + +# Ping event +# ROOT = caster +# FROM = target +# FROMFROM = requester character_event = { - id = spell.2 - desc = EVTDESCspell.2 - picture = GFX_evt_recovery + id = spell.1 is_triggered_only = yes + hide_window = yes option = { - name = EVTOPTAspell.1 - FROM = { add_character_modifier = { name = drained duration = 180 } } - if = { limit = { trait = ill } remove_trait = ill } - if = { limit = { trait = pneumonic } remove_trait = pneumonic } - if = { limit = { trait = syphilitic } remove_trait = syphilitic } - if = { limit = { trait = leper } remove_trait = leper } - if = { limit = { trait = has_tuberculosis } remove_trait = has_tuberculosis } - if = { limit = { trait = has_typhoid_fever } remove_trait = has_typhoid_fever } - if = { limit = { trait = has_typhus } remove_trait = has_typhus } - if = { limit = { trait = has_bubonic_plague } remove_trait = has_bubonic_plague } - if = { limit = { trait = has_measles } remove_trait = has_measles } - if = { limit = { trait = has_small_pox } remove_trait = has_small_pox } - if = { limit = { trait = has_aztec_disease } remove_trait = has_aztec_disease } - if = { limit = { trait = wounded } remove_trait = wounded } - if = { limit = { trait = maimed } remove_trait = maimed } - if = { limit = { trait = infirm } remove_trait = infirm } - if = { limit = { trait = blinded } remove_trait = blinded } - if = { limit = { trait = eunuch } remove_trait = eunuch } + name = OK + FROM = { + character_event = { id = spell.0 } + } } } -# Court mage notification + +# Caster is asked to cast heal spell +# ROOT = caster +# FROM = target +# FROMFROM = requester character_event = { - id = spell.3 - desc = EVTDESCspell.3 + id = spell.2 + desc = EVTDESCspell.2 picture = GFX_evt_recovery is_triggered_only = yes - trigger = { - ai = no - } - option = { - name = EVTOPTAspell.3 - add_character_modifier = { name = drained duration = 180 } + name = EVTOPTAspell.2 + FROM = { + character_event = { id = spell.0 } + } } } ################################################ -# Glamour spell +# Glamour spell (spell.10 -> spell.19) ################################################ # You cast glamour spell character_event = { @@ -98,18 +106,19 @@ character_event = { option = { name = EVTOPTAspell.10 FROM = { add_character_modifier = { name = drained duration = 180 } } + add_trait = fair - if = { limit = { trait = harelip } remove_trait = harelip } - if = { limit = { trait = hunchback } remove_trait = hunchback } - if = { limit = { trait = lisp } remove_trait = lisp } - if = { limit = { trait = stutter } remove_trait = stutter } - if = { limit = { trait = ugly } remove_trait = ugly } - if = { limit = { trait = dwarf } remove_trait = dwarf } + remove_trait = harelip + remove_trait = hunchback + remove_trait = lisp + remove_trait = stutter + remove_trait = ugly + remove_trait = dwarf } } ################################################ -# Foresight spell +# Foresight spell (spell.20 -> spell.29) ################################################ # Court mage casts foresight spell character_event = { @@ -190,15 +199,19 @@ character_event = { } option = { - name = EVTOPTAspell.3 + name = EVTOPTAspell.22 add_character_modifier = { name = drained duration = 180 } } } ################################################ -# Protection spell +# Protection spell (spell.30 -> spell.39) ################################################ -# Court mage casts protection spell + +# Cast protection spell +# ROOT = target +# FROM = caster +# FROMFROMFROM = requester character_event = { id = spell.30 desc = EVTDESCspell.30 @@ -208,30 +221,36 @@ character_event = { option = { name = EVTOPTAspell.30 - job_mage = { + log = "[From.GetTitledName] is casting a protection spell on [Root.GetTitledName] by order of [FromFromFrom.GetTitledName]" + add_character_modifier = { name = protection_spell duration = -1 } + FROM = { add_character_modifier = { name = drained duration = 180 } - hidden_tooltip = {# Court mage notification - character_event = { id = spell.32 } - } } - add_character_modifier = { name = protection_spell duration = -1 } } } -# You cast protection spell + +# Ping event +# ROOT = caster +# FROM = target +# FROMFROM = requester character_event = { id = spell.31 - desc = EVTDESCspell.31 - picture = GFX_evt_knight_kneeling is_triggered_only = yes + hide_window = yes option = { - name = EVTOPTAspell.30 - FROM = { add_character_modifier = { name = drained duration = 180 } } - add_character_modifier = { name = protection_spell duration = -1 } + name = OK + FROM = { + character_event = { id = spell.30 } + } } } -# Court mage notification + +# Caster is asked to cast protection spell +# ROOT = caster +# FROM = target +# FROMFROM = requester character_event = { id = spell.32 desc = EVTDESCspell.32 @@ -239,18 +258,79 @@ character_event = { is_triggered_only = yes - trigger = { - ai = no + option = { + name = EVTOPTAspell.32 + FROM = { + character_event = { id = spell.30 } + } } +} + +################################################ +# Charm spell (spell.40 -> spell.49) +################################################ + +# Cast charm spell +# ROOT = target +# FROM = caster +# FROMFROMFROM = requester +character_event = { + id = spell.40 + desc = EVTDESCspell.40 + picture = GFX_evt_courtiers_talking + + is_triggered_only = yes option = { - name = EVTOPTAspell.3 - add_character_modifier = { name = drained duration = 180 } + name = EVTOPTAspell.40 + log = "[From.GetTitledName] is casting a charm spell on [Root.GetTitledName] by order of [FromFromFrom.GetTitledName]" + opinion = { modifier = opinion_charmed who = FROMFROMFROM } + FROM = { + add_character_modifier = { name = drained duration = 180 } + } } } +# Ping event +# ROOT = caster +# FROM = target +# FROMFROM = requester +character_event = { + id = spell.41 + + is_triggered_only = yes + hide_window = yes + + option = { + name = OK + FROM = { + character_event = { id = spell.40 } + } + } +} + +# Caster is asked to cast charm spell +# ROOT = caster +# FROM = target +# FROMFROM = requester +character_event = { + id = spell.42 + desc = EVTDESCspell.42 + picture = GFX_evt_courtiers_talking + + is_triggered_only = yes + + option = { + name = EVTOPTAspell.42 + FROM = { + character_event = { id = spell.40 } + } + } +} + + ################################################ -# Siege spell +# Siege spell (spell.100 -> spell.199) ################################################ # Court mage casts meteor spell character_event = { @@ -339,7 +419,7 @@ character_event = { } option = { - name = EVTOPTAspell.3 + name = EVTOPTAspell.102 add_character_modifier = { name = drained duration = 360 } } } @@ -447,7 +527,7 @@ character_event = { } option = { - name = EVTOPTAspell.3 + name = EVTOPTAspell.112 add_character_modifier = { name = drained duration = 360 } } } @@ -555,7 +635,7 @@ character_event = { } option = { - name = EVTOPTAspell.3 + name = EVTOPTAspell.122 add_character_modifier = { name = drained duration = 360 } } } @@ -663,7 +743,7 @@ character_event = { } option = { - name = EVTOPTAspell.3 + name = EVTOPTAspell.132 add_character_modifier = { name = drained duration = 360 } } } @@ -771,7 +851,7 @@ character_event = { } option = { - name = EVTOPTAspell.3 + name = EVTOPTAspell.142 add_character_modifier = { name = drained duration = 360 } } } @@ -794,7 +874,7 @@ character_event = { } ################################################ -# Battle spell +# Battle spell (spell.200 -> spell.299) ################################################ # Court mage casts meteor spell character_event = { @@ -1037,7 +1117,7 @@ character_event = { } option = { - name = EVTOPTAspell.3 + name = EVTOPTAspell.202 add_character_modifier = { name = drained duration = 360 } } } @@ -1299,7 +1379,7 @@ character_event = { } option = { - name = EVTOPTAspell.3 + name = EVTOPTAspell.212 add_character_modifier = { name = drained duration = 360 } } } @@ -1562,7 +1642,7 @@ character_event = { } option = { - name = EVTOPTAspell.3 + name = EVTOPTAspell.222 add_character_modifier = { name = drained duration = 360 } } } @@ -1825,7 +1905,7 @@ character_event = { } option = { - name = EVTOPTAspell.3 + name = EVTOPTAspell.232 add_character_modifier = { name = drained duration = 360 } } } @@ -2087,7 +2167,7 @@ character_event = { } option = { - name = EVTOPTAspell.3 + name = EVTOPTAspell.242 add_character_modifier = { name = drained duration = 360 } } } diff --git a/MOD/Witcher/localisation/W_decisions.csv b/MOD/Witcher/localisation/W_decisions.csv index 80ef26dd3..ea6281a02 100644 --- a/MOD/Witcher/localisation/W_decisions.csv +++ b/MOD/Witcher/localisation/W_decisions.csv @@ -178,11 +178,16 @@ EVTTOOLTIPreligious.101;You embrace the Imperialist school of thought;;;;;;;;;;; restore_hierarch_in_wieczny_ognia;Restore the Hierarchy in Wieczny Ognia;;;;;;;;;;;;;x restore_hierarch_in_wieczny_ognia_desc;The Hierarch has lost control of his secular domain, but it is within my power to restore the City of Eternal Fire to him!;;;;;;;;;;;;;x # spell_decisions_W;;;;;;;;;;;;;; -spell_heal_court_mage;Have Court Mage Cast Heal;;;;;;;;;;;;;x -spell_heal_court_mage_desc;Heal can immediately close open wounds, mend broken bones and cure any illnesses.;;;;;;;;;;;;;x -spell_heal;Cast Heal;;;;;;;;;;;;;x -spell_heal_desc;Heal can immediately close open wounds, mend broken bones and cure any illnesses.;;;;;;;;;;;;;x -spell_heal_tooltip;§Y[Root.GetBestName]§! will lose all bad health traits except '§YStressed§!' and '§YDepressed§!';;;;;;;;;;;;;x +have_court_mage_cast_charm_spell;Have Court Mage Cast Charm;;;;;;;;;;;;;x +have_court_mage_cast_charm_spell_desc;Improves the opinion by charming the target with a magic spell;;;;;;;;;;;;;x +cast_charm_spell;Cast Charm;;;;;;;;;;;;;x +cast_charm_spell_desc;Charm the target with a magic spell;;;;;;;;;;;;;x +spell_charm_tooltip;§Y[Root.GetBestName]§! will have a better opinion of you for a time.;;;;;;;;;;;;;x +have_court_mage_cast_heal_spell;Have Court Mage Cast Heal;;;;;;;;;;;;;x +have_court_mage_cast_heal_spell_desc;Heal can immediately close open wounds, mend broken bones and cure any illnesses.;;;;;;;;;;;;;x +cast_heal_spell;Cast Heal;;;;;;;;;;;;;x +cast_heal_spell_desc;Heal can immediately close open wounds, mend broken bones and cure any illnesses.;;;;;;;;;;;;;x +spell_heal_tooltip;§Y[Root.GetBestName]§! will lose any bad health traits, except '§YStressed§!' and '§YDepressed§!';;;;;;;;;;;;;x spell_glamour;Cast Glamour;;;;;;;;;;;;;x spell_glamour_desc;With Glamour you can make yourself attractive by hiding the age and any bodily defects under a veil of magic.;;;;;;;;;;;;;x spell_glamour_tooltip;§Y[Root.GetBestName]§! will gain the trait '§YAttractive§!' and will lose all bad congenital traits;;;;;;;;;;;;;x @@ -191,10 +196,10 @@ spell_foresight_court_mage_desc;There are many dangers lurking around that could spell_foresight;Cast Foresight;;;;;;;;;;;;;x spell_foresight_desc;There are many dangers lurking around that could be easily avoided if you just knew about them. Foresight is the spell for just such cases.;;;;;;;;;;;;;x spell_foresight_tooltip;All plots against §Y[Root.GetBestName]§! will be revealed;;;;;;;;;;;;;x -spell_protection_court_mage;Have Court Mage Cast Protection;;;;;;;;;;;;;x -spell_protection_court_mage_desc;Protection can save you from untimely demise by hand of assassin or accident although it can't stop natural death.;;;;;;;;;;;;;x -spell_protection;Cast Protection;;;;;;;;;;;;;x -spell_protection_desc;Protection can save you from untimely demise by hand of assassin or accident although it can't stop natural death.;;;;;;;;;;;;;x +have_court_mage_cast_protect_spell;Have Court Mage Cast Protection;;;;;;;;;;;;;x +have_court_mage_cast_protect_spell_desc;Protection can save someone from untimely demise by hand of assassin or accident, although it can't stop natural death.;;;;;;;;;;;;;x +cast_protect_spell;Cast Protection;;;;;;;;;;;;;x +cast_protect_spell_desc;Protection can save someone from untimely demise by hand of assassin or accident, although it can't stop natural death.;;;;;;;;;;;;;x spell_protection_tooltip;§Y[Root.GetBestName]§! will be able to avoid death by unnatural cause once;;;;;;;;;;;;;x spell_siege_court_mage;Have Court Mage Assist Siege;;;;;;;;;;;;;x spell_siege_court_mage_desc;Siege is a long and tiring thing, but with support of magic you can speed it up considerably.;;;;;;;;;;;;;x diff --git a/MOD/Witcher/localisation/W_objectives.csv b/MOD/Witcher/localisation/W_objectives.csv index 48ea06ef5..b667bb573 100644 --- a/MOD/Witcher/localisation/W_objectives.csv +++ b/MOD/Witcher/localisation/W_objectives.csv @@ -53,18 +53,6 @@ faction_raise_tolerance_title;Raise Tolerance in [This.GetName];;;;;;;;;;;;;x faction_raise_tolerance_short;Raise Tolerance;;;;;;;;;;;;;x faction_raise_tolerance_desc;Members seek to raise the Tolerance in [This.GetName]. When sufficiently powerful, §Y[From.GetBestName]§! may present an ultimatum to §Y[From.Liege.GetBestName]§!.;;;;;;;;;;;;;x # W_plot;;;;;;;;;;;;;; -plot_charm_character_title;Charm [This.GetBestName];;;;;;;;;;;;;x -plot_charm_character_short;Charm Character;;;;;;;;;;;;;x -plot_charm_character_desc;[From.GetBestName] will improve [This.GetBestName] opinion of [From.GetHerHim]self by charming the target with a magic spell.\nPlot power doesn't affect this plot.;;;;;;;;;;;;;x -plot_charm_character_tooltip;§Y[This.GetBestName]'s§! opinion of §Y[From.GetBestName]§! will increase;;;;;;;;;;;;;x -plot_heal_character_title;Heal [This.GetBestName];;;;;;;;;;;;;x -plot_heal_character_short;Heal Character;;;;;;;;;;;;;x -plot_heal_character_desc;[From.GetBestName] will use heal spell on [This.GetBestName].\nPlot power doesn't affect this plot.;;;;;;;;;;;;;x -plot_heal_character_tooltip;§Y[This.GetBestName]§! will lose all bad health traits except '§YStressed§!' and '§YDepressed§!';;;;;;;;;;;;;x -plot_protect_character_title;Protect [This.GetBestName];;;;;;;;;;;;;x -plot_protect_character_short;Protect Character;;;;;;;;;;;;;x -plot_protect_character_desc;[From.GetBestName] will use protect spell on [This.GetBestName].\nPlot power doesn't affect this plot.;;;;;;;;;;;;;x -plot_protect_character_tooltip;§Y[This.GetBestName]§! will be able to avoid death by unnatural cause once;;;;;;;;;;;;;x plot_discredit_fellow_vassal_title;Discredit [This.GetBestName];;;;;;;;;;;;;x plot_discredit_fellow_vassal_short;Discredit Character;;;;;;;;;;;;;x plot_discredit_fellow_vassal_desc;[From.GetBestName] wants to discredit [This.GetBestName] in front of [From.Liege.GetBestName].;;;;;;;;;;;;;x diff --git a/MOD/Witcher/localisation/W_plot_events.csv b/MOD/Witcher/localisation/W_plot_events.csv index dbd2b156a..fd7e12194 100644 --- a/MOD/Witcher/localisation/W_plot_events.csv +++ b/MOD/Witcher/localisation/W_plot_events.csv @@ -1,22 +1,4 @@ #CODE;ENGLISH;FRENCH;GERMAN;;SPANISH;;;;;;;;;x -EVTDESCplots.2;Under your orders your court magician [Root.job_mage.GetTitledFirstName] cast a spell to make [Root.PlotTarget.GetTitledName] appreciate you more.;;;;;;;;;;;;;x -EVTOPTAplots.2;Ok.;;;;;;;;;;;;;x -EVTDESCplots.3;You cast a spell to make [Root.PlotTarget.GetTitledName] appreciate you more.;;;;;;;;;;;;;x -EVTOPTAplots.3;Ok.;;;;;;;;;;;;;x -EVTDESCplots.4;Under your lieges orders you cast a spell to make [Root.PlotTarget.GetTitledName] appreciate [From.GetHerHim] more.;;;;;;;;;;;;;x -EVTOPTAplots.4;Ok.;;;;;;;;;;;;;x -EVTDESCplots.11;Under your orders your court magician [Root.job_mage.GetTitledFirstName] casted a spell to heal [Root.PlotTarget.GetTitledName].;;;;;;;;;;;;;x -EVTOPTAplots.11;Ok.;;;;;;;;;;;;;x -EVTDESCplots.12;Your cast a spell to heal [Root.PlotTarget.GetTitledName].;;;;;;;;;;;;;x -EVTOPTAplots.12;Ok.;;;;;;;;;;;;;x -EVTDESCplots.13;Under your lieges orders you cast a spell to heal [Root.PlotTarget.GetTitledName].;;;;;;;;;;;;;x -EVTOPTAplots.13;Ok.;;;;;;;;;;;;;x -EVTDESCplots.21;Under your orders your court magician [Root.job_mage.GetTitledFirstName] casted a spell to protect [Root.PlotTarget.GetTitledName] from harm.;;;;;;;;;;;;;x -EVTOPTAplots.21;Ok.;;;;;;;;;;;;;x -EVTDESCplots.22;You cast a spell to protect [Root.PlotTarget.GetTitledName] from harm.;;;;;;;;;;;;;x -EVTOPTAplots.22;Ok.;;;;;;;;;;;;;x -EVTDESCplots.23;Under your lieges orders you cast a spell to protect [Root.PlotTarget.GetTitledName] from harm.;;;;;;;;;;;;;x -EVTOPTAplots.23;Ok.;;;;;;;;;;;;;x EVTDESCplots.100;What better way there is to ruin someone's reputation then with incriminating documents. And it's just a matter of forging them through right acquaintances.;;;;;;;;;;;;;x EVTOPTAplots.100;Now what could I make [Root.PlotTarget.GetTitledName] guilty of?;;;;;;;;;;;;;x EVTTOOLTIPplots.101;Present incriminating documents to [This.Liege.GetBestName];;;;;;;;;;;;;x diff --git a/MOD/Witcher/localisation/W_spell_events.csv b/MOD/Witcher/localisation/W_spell_events.csv index 66bb62e4f..634dc948d 100644 --- a/MOD/Witcher/localisation/W_spell_events.csv +++ b/MOD/Witcher/localisation/W_spell_events.csv @@ -1,19 +1,22 @@ #CODE;ENGLISH;FRENCH;GERMAN;;SPANISH;;;;;;;;;x -EVTDESCspell.1;Under your orders your court magician [Root.job_mage.GetTitledFirstName] cast a spell to heal you.;;;;;;;;;;;;;x -EVTOPTAspell.1;I feel alive!;;;;;;;;;;;;;x -EVTDESCspell.2;You cast a spell to heal yourself.;;;;;;;;;;;;;x -EVTDESCspell.3;Under your lieges orders you cast a spell to heal [From.GetHerHim].;;;;;;;;;;;;;x -EVTOPTAspell.3;Ok.;;;;;;;;;;;;;x +EVTDESCspell.0;All my illnesses have been cured by a magic spell !;;;;;;;;;;;;;x +EVTOPTAspell.0;I feel alive!;;;;;;;;;;;;;x +EVTDESCspell.2;Your liege is asking for a heal spell to be casted on [From.GetTitledFirstName];;;;;;;;;;;;;x +EVTOPTAspell.2;At once !;;;;;;;;;;;;;x EVTDESCspell.10;You cast a spell to veil your appearance with magic to beautiful in the eyes of others.;;;;;;;;;;;;;x EVTOPTAspell.10;Perfect!;;;;;;;;;;;;;x EVTDESCspell.20;Under your orders your court magician [Root.job_mage.GetTitledFirstName] cast a spell to predict any danger to you.;;;;;;;;;;;;;x EVTOPTAspell.20;Hmm...;;;;;;;;;;;;;x EVTDESCspell.21;You cast a spell to predict any danger to you.;;;;;;;;;;;;;x EVTDESCspell.22;Under your lieges orders you cast a spell to predict any danger to [From.GetHerHim].;;;;;;;;;;;;;x -EVTDESCspell.30;Under your orders your court magician [Root.job_mage.GetTitledFirstName] cast a spell to protect you from any danger.;;;;;;;;;;;;;x -EVTOPTAspell.30;Nothing will harm me now.;;;;;;;;;;;;;x -EVTDESCspell.31;You cast a spell to protect you from any danger.;;;;;;;;;;;;;x -EVTDESCspell.32;Under your lieges orders you cast a spell to protect [From.GetHerHim] from any danger.;;;;;;;;;;;;;x +EVTDESCspell.30;I'm now protected from any danger by a spell !;;;;;;;;;;;;;x +EVTOPTAspell.30;Nothing will harm me now !;;;;;;;;;;;;;x +EVTDESCspell.32;Your liege is asking for a protection spell to be casted on [From.GetTitledFirstName];;;;;;;;;;;;;x +EVTOPTAspell.32;At once !;;;;;;;;;;;;;x +EVTDESCspell.40;You now realize that your bad opinion of [FromFromFrom.GetTitledFirstName] was misguided, [FromFromFrom.GetSheHe] is actually really charming.;;;;;;;;;;;;;x +EVTOPTAspell.40;This is a strange feeling...;;;;;;;;;;;;;x +EVTDESCspell.42;Your liege is asking for a charm spell to be casted on [From.GetTitledFirstName];;;;;;;;;;;;;x +EVTOPTAspell.42;At once !;;;;;;;;;;;;;x EVTDESCspell.100;The court magician [Root.job_mage.GetTitledFirstName] started to chant a spell. The sky darkened and after a while meteors started to fall from sky shattering the walls of [Root.job_mage.Siege.GetName].;;;;;;;;;;;;;x EVTOPTAspell.100;Perfect.;;;;;;;;;;;;;x EVTDESCspell.101;You started to chant a spell. The sky darkened and after a while meteors started to fall from sky shattering the walls of [Root.Siege.GetName].;;;;;;;;;;;;;x