diff --git a/data/mods/Xedra_Evolved/effects/effects.json b/data/mods/Xedra_Evolved/effects/effects.json index 65701bdb5cee8..8141ef2850fa0 100644 --- a/data/mods/Xedra_Evolved/effects/effects.json +++ b/data/mods/Xedra_Evolved/effects/effects.json @@ -2160,6 +2160,52 @@ "desc": [ "People can definitely see you now." ], "rating": "bad" }, + { + "type": "effect_type", + "id": "effect_selkie_fog_cloak", + "name": [ "Cloak of Fog" ], + "desc": [ "The fog shields you from sight." ], + "apply_message": "", + "remove_message": "The fog begins to dissipate.", + "rating": "good", + "max_duration": "30 minutes", + "enchantments": [ "enchant_selkie_fog_cloak" ] + }, + { + "type": "effect_type", + "id": "effect_controlling_weather", + "//": "Hidden effect, used to distinguish magical quick weather change from the weather returning to normal", + "name": [ "" ], + "desc": [ "" ] + }, + { + "type": "effect_type", + "id": "effect_controlling_weather_fog", + "//": "Hidden effect, used to track magical summoned fog", + "name": [ "" ], + "desc": [ "" ] + }, + { + "type": "effect_type", + "id": "effect_controlling_weather_rains", + "//": "Hidden effect, used to track magical summoned rain", + "name": [ "" ], + "desc": [ "" ] + }, + { + "type": "effect_type", + "id": "effect_controlling_weather_rainstorm", + "//": "Hidden effect, used to track magical summoned rainstorms", + "name": [ "" ], + "desc": [ "" ] + }, + { + "type": "effect_type", + "id": "effect_controlling_weather_lightningstorm", + "//": "Hidden effect, used to track magical summoned lightning storms", + "name": [ "" ], + "desc": [ "" ] + }, { "type": "effect_type", "id": "called_daffodil", diff --git a/data/mods/Xedra_Evolved/effects/emit.json b/data/mods/Xedra_Evolved/effects/emit.json index e600c21f26396..8a4885a6d88a8 100644 --- a/data/mods/Xedra_Evolved/effects/emit.json +++ b/data/mods/Xedra_Evolved/effects/emit.json @@ -15,5 +15,12 @@ "intensity": 1, "chance": 100, "qty": 1 + }, + { + "id": "emit_obscuring_fog", + "type": "emit", + "field": "fd_obscuring_fog", + "intensity": 3, + "qty": 80 } ] diff --git a/data/mods/Xedra_Evolved/enchantments/spell.json b/data/mods/Xedra_Evolved/enchantments/spell.json new file mode 100644 index 0000000000000..8cb097e29f64e --- /dev/null +++ b/data/mods/Xedra_Evolved/enchantments/spell.json @@ -0,0 +1,9 @@ +[ + { + "type": "enchantment", + "id": "enchant_selkie_fog_cloak", + "condition": "ALWAYS", + "has": "HELD", + "emitter": "emit_obscuring_fog" + } +] diff --git a/data/mods/Xedra_Evolved/eocs/magic_weather_control.json b/data/mods/Xedra_Evolved/eocs/magic_weather_control.json new file mode 100644 index 0000000000000..2a0470ac7af36 --- /dev/null +++ b/data/mods/Xedra_Evolved/eocs/magic_weather_control.json @@ -0,0 +1,476 @@ +[ + { + "type": "effect_on_condition", + "//": "When calling this EoC, set u_weather_change_limit: 1) Light Drizzle, 2) Drizzle, 3) Rain, 4) Rainstorm, 5) Thunderstorm", + "//2": "This is designed for gradual weather change that steps up, to simulate clouds rolling in, rain beginning to fall, etc.", + "id": "EOC_WEATHER_CONTROL_INITIATE", + "condition": { "math": [ "weather('temperature')", ">", "from_fahrenheit( 31 )" ] }, + "effect": [ { "run_eocs": "EOC_WEATHER_CONTROL_ABOVE_FREEZING" } ], + "false_effect": [ { "run_eocs": "EOC_WEATHER_CONTROL_BELOW_FREEZING" } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_ABOVE_FREEZING", + "condition": { + "and": [ + { "not": { "is_weather": "magic_weather_light_drizzle" } }, + { "not": { "is_weather": "magic_weather_drizzle" } }, + { "not": { "is_weather": "magic_weather_rain" } }, + { "not": { "is_weather": "magic_weather_rainstorm" } }, + { "not": { "is_weather": "magic_weather_thunder" } }, + { "not": { "is_weather": "magic_weather_lightning" } } + ] + }, + "effect": [ + { + "run_eocs": [ + { + "id": "EOC_WEATHER_CONTROL_ABOVE_FREEZING_INITIATE", + "condition": { "and": [ { "not": { "is_weather": "cloudy" } } ] }, + "effect": [ + { "u_message": "As the clouds roll in, drops of rain begin to fall.", "type": "neutral" }, + { "math": [ "magic_weather_light_drizzle", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { + "queue_eocs": "EOC_WEATHER_CONTROL_LIGHT_DRIZZLE_TO_DRIZZLE", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + } + ], + "false_effect": [ + { "u_message": "The clouds churn as drops of rain begin to fall.", "type": "neutral" }, + { "math": [ "magic_weather_light_drizzle", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { + "queue_eocs": "EOC_WEATHER_CONTROL_LIGHT_DRIZZLE_TO_DRIZZLE", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + } + ] + } + ] + } + ], + "false_effect": [ + { + "if": { "is_weather": "magic_weather_light_drizzle" }, + "then": { "run_eocs": "EOC_WEATHER_CONTROL_LIGHT_DRIZZLE_TO_DRIZZLE" }, + "else": { + "if": { "is_weather": "magic_weather_drizzle" }, + "then": { "run_eocs": "EOC_WEATHER_CONTROL_DRIZZLE_TO_RAIN" }, + "else": { + "if": { "is_weather": "magic_weather_rain" }, + "then": { "run_eocs": "EOC_WEATHER_CONTROL_RAIN_TO_RAINSTORM" }, + "else": { + "if": { "is_weather": "magic_weather_rainstorm" }, + "then": { "run_eocs": "EOC_WEATHER_CONTROL_RAINSTORM_TO_THUNDERSTORM" }, + "else": { + "if": { "is_weather": "magic_weather_thunder" }, + "then": { "run_eocs": "EOC_WEATHER_CONTROL_THUNDERSTORM_TO_LIGHTNINGSTORM" } + } + } + } + } + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_LIGHT_DRIZZLE_TO_DRIZZLE", + "condition": { + "and": [ { "math": [ "magic_weather_light_drizzle", "==", "1" ] }, { "math": [ "u_weather_change_limit", ">=", "2" ] } ] + }, + "effect": [ + { "if": "u_is_outside", "then": { "u_message": "The rain picks up.", "type": "neutral" } }, + { "math": [ "magic_weather_light_drizzle", "=", "0" ] }, + { "math": [ "magic_weather_drizzle", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { + "queue_eocs": "EOC_WEATHER_CONTROL_DRIZZLE_TO_RAIN", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_DRIZZLE_TO_RAIN", + "condition": { "and": [ { "math": [ "magic_weather_drizzle", "==", "1" ] }, { "math": [ "u_weather_change_limit", ">=", "3" ] } ] }, + "effect": [ + { "if": "u_is_outside", "then": { "u_message": "The rain falls steadily now.", "type": "neutral" } }, + { "math": [ "magic_weather_drizzle", "=", "0" ] }, + { "math": [ "magic_weather_rain", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { + "queue_eocs": "EOC_WEATHER_CONTROL_RAIN_TO_RAINSTORM", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_RAIN_TO_RAINSTORM", + "condition": { "and": [ { "math": [ "magic_weather_rain", "==", "1" ] }, { "math": [ "u_weather_change_limit", ">=", "4" ] } ] }, + "effect": [ + { "if": "u_is_outside", "then": { "u_message": "The rain falls in lashing sheet.", "type": "neutral" } }, + { "math": [ "magic_weather_rain", "=", "0" ] }, + { "math": [ "magic_weather_rainstorm", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { + "queue_eocs": "EOC_WEATHER_CONTROL_RAINSTORM_TO_THUNDERSTORM", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_RAINSTORM_TO_THUNDERSTORM", + "condition": { "and": [ { "math": [ "magic_weather_rainstorm", "==", "1" ] }, { "math": [ "u_weather_change_limit", ">=", "5" ] } ] }, + "effect": [ + { "if": "u_is_outside", "then": { "u_message": "Thunder rumbles amid the driving rain.", "type": "neutral" } }, + { "math": [ "magic_weather_rainstorm", "=", "0" ] }, + { "math": [ "magic_weather_thunder", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { + "queue_eocs": "EOC_WEATHER_CONTROL_THUNDERSTORM_TO_LIGHTNINGSTORM", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_THUNDERSTORM_TO_LIGHTNINGSTORM", + "condition": { "and": [ { "math": [ "magic_weather_thunder", "==", "1" ] }, { "math": [ "u_weather_change_limit", ">=", "6" ] } ] }, + "effect": [ + { + "if": "u_is_outside", + "then": { "u_message": "The sky is continually illuminated by flashing lightning.", "type": "neutral" } + }, + { "math": [ "magic_weather_thunder", "=", "0" ] }, + { "math": [ "magic_weather_lightning", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_LOSE_EFFECT_RESET_VARIABLES", + "eoc_type": "EVENT", + "required_event": "character_loses_effect", + "condition": { "compare_string": [ "effect_controlling_weather", { "context_val": "effect" } ] }, + "effect": [ + { "math": [ "u_weather_change_limit", "=", "0" ] }, + { "queue_eocs": "EOC_WEATHER_CONTROL_DOWNGRADE", "time_in_future": 3 } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_DOWNGRADE", + "condition": { "math": [ "weather('temperature')", ">", "from_fahrenheit( 31 )" ] }, + "effect": [ { "run_eocs": "EOC_WEATHER_CONTROL_ABOVE_FREEZING_DOWNGRADE" } ], + "false_effect": [ { "run_eocs": "EOC_WEATHER_CONTROL_BELOW_FREEZING_DOWNGRADE" } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_ABOVE_FREEZING_DOWNGRADE", + "condition": { "not": { "u_has_effect": "effect_controlling_weather" } }, + "effect": [ + { "u_lose_effect": "effect_controlling_weather_rains" }, + { "u_lose_effect": "effect_controlling_weather_rainstorm" }, + { + "if": { "is_weather": "magic_weather_light_drizzle" }, + "then": { "run_eocs": "EOC_WEATHER_CONTROL_LIGHT_DRIZZLE_TO_NOTHING" }, + "else": { + "if": { "is_weather": "magic_weather_drizzle" }, + "then": { "run_eocs": "EOC_WEATHER_CONTROL_DRIZZLE_TO_LIGHT_DRIZZLE" }, + "else": { + "if": { "is_weather": "magic_weather_rain" }, + "then": { "run_eocs": "EOC_WEATHER_CONTROL_RAIN_TO_DRIZZLE" }, + "else": { + "if": { "is_weather": "magic_weather_rainstorm" }, + "then": { "run_eocs": "EOC_WEATHER_CONTROL_RAINSTORM_TO_RAIN" }, + "else": { + "if": { "is_weather": "magic_weather_thunder" }, + "then": { "run_eocs": "EOC_WEATHER_CONTROL_THUNDERSTORM_TO_RAINSTORM" }, + "else": { + "if": { "is_weather": "magic_weather_lightning" }, + "then": { "run_eocs": "EOC_WEATHER_CONTROL_LIGHTNINGSTORM_TO_THUNDERSTORM" } + } + } + } + } + } + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_LIGHTNINGSTORM_TO_THUNDERSTORM", + "condition": { "and": [ { "math": [ "magic_weather_lightning", "==", "1" ] }, { "math": [ "u_weather_change_limit", "<=", "5" ] } ] }, + "//": "Weather slowly decays back to normal", + "effect": [ + { "math": [ "magic_weather_lightning", "=", "0" ] }, + { "math": [ "magic_weather_thunder", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { + "if": { "u_has_effect": "effect_controlling_weather" }, + "then": { + "queue_eocs": "EOC_WEATHER_CONTROL_THUNDERSTORM_TO_RAINSTORM", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + }, + "else": { + "queue_eocs": "EOC_WEATHER_CONTROL_THUNDERSTORM_TO_RAINSTORM", + "time_in_future": [ + { "math": [ "min( (u_weather_stage_up_lower_bound * rng(2,5) ), 1800)" ] }, + { "math": [ "min( (u_weather_stage_up_upper_bound * rng(2,5) ), 1800)" ] } + ] + } + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_THUNDERSTORM_TO_RAINSTORM", + "condition": { "and": [ { "math": [ "magic_weather_thunder", "==", "1" ] }, { "math": [ "u_weather_change_limit", "<=", "4" ] } ] }, + "effect": [ + { "math": [ "magic_weather_thunder", "=", "0" ] }, + { "math": [ "magic_weather_rainstorm", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { + "if": { "u_has_effect": "effect_controlling_weather" }, + "then": { + "queue_eocs": "EOC_WEATHER_CONTROL_RAINSTORM_TO_RAIN", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + }, + "else": { + "queue_eocs": "EOC_WEATHER_CONTROL_RAINSTORM_TO_RAIN", + "time_in_future": [ + { "math": [ "min( (u_weather_stage_up_lower_bound * rng(2,5) ), 1800)" ] }, + { "math": [ "min( (u_weather_stage_up_upper_bound * rng(2,5) ), 1800)" ] } + ] + } + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_RAINSTORM_TO_RAIN", + "condition": { "and": [ { "math": [ "magic_weather_rainstorm", "==", "1" ] }, { "math": [ "u_weather_change_limit", "<=", "3" ] } ] }, + "effect": [ + { "math": [ "magic_weather_rainstorm", "=", "0" ] }, + { "math": [ "magic_weather_rain", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { + "if": { "u_has_effect": "effect_controlling_weather" }, + "then": { + "queue_eocs": "EOC_WEATHER_CONTROL_RAIN_TO_DRIZZLE", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + }, + "else": { + "queue_eocs": "EOC_WEATHER_CONTROL_RAIN_TO_DRIZZLE", + "time_in_future": [ + { "math": [ "min( (u_weather_stage_up_lower_bound * rng(2,5) ), 1800)" ] }, + { "math": [ "min( (u_weather_stage_up_upper_bound * rng(2,5) ), 1800)" ] } + ] + } + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_RAIN_TO_DRIZZLE", + "condition": { "and": [ { "math": [ "magic_weather_rain", "==", "1" ] }, { "math": [ "u_weather_change_limit", "<=", "2" ] } ] }, + "effect": [ + { "math": [ "magic_weather_rain", "=", "0" ] }, + { "math": [ "magic_weather_drizzle", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { + "if": { "u_has_effect": "effect_controlling_weather" }, + "then": { + "queue_eocs": "EOC_WEATHER_CONTROL_DRIZZLE_TO_LIGHT_DRIZZLE", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + }, + "else": { + "queue_eocs": "EOC_WEATHER_CONTROL_DRIZZLE_TO_LIGHT_DRIZZLE", + "time_in_future": [ + { "math": [ "min( (u_weather_stage_up_lower_bound * rng(2,5) ), 1800)" ] }, + { "math": [ "min( (u_weather_stage_up_upper_bound * rng(2,5) ), 1800)" ] } + ] + } + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_DRIZZLE_TO_LIGHT_DRIZZLE", + "condition": { "and": [ { "math": [ "magic_weather_drizzle", "==", "1" ] }, { "math": [ "u_weather_change_limit", "<=", "1" ] } ] }, + "effect": [ + { "math": [ "magic_weather_drizzle", "=", "0" ] }, + { "math": [ "magic_weather_light_drizzle", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { + "if": { "u_has_effect": "effect_controlling_weather" }, + "then": { + "queue_eocs": "EOC_WEATHER_CONTROL_LIGHT_DRIZZLE_TO_NOTHING", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + }, + "else": { + "queue_eocs": "EOC_WEATHER_CONTROL_LIGHT_DRIZZLE_TO_NOTHING", + "time_in_future": [ + { "math": [ "min( (u_weather_stage_up_lower_bound * rng(2,5) ), 1800)" ] }, + { "math": [ "min( (u_weather_stage_up_upper_bound * rng(2,5) ), 1800)" ] } + ] + } + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_LIGHT_DRIZZLE_TO_NOTHING", + "condition": { + "and": [ { "math": [ "magic_weather_light_drizzle", "==", "1" ] }, { "math": [ "u_weather_change_limit", "<=", "0" ] } ] + }, + "effect": [ { "math": [ "magic_weather_light_drizzle", "=", "0" ] }, { "run_eocs": "EOC_CALL_NEXT_WEATHER" } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_BELOW_FREEZING", + "condition": { + "and": [ + { "not": { "is_weather": "magic_weather_flurries" } }, + { "not": { "is_weather": "magic_weather_snowing" } }, + { "not": { "is_weather": "magic_weather_snowstorm" } } + ] + }, + "effect": [ + { + "run_eocs": [ + { + "id": "EOC_WEATHER_CONTROL_BELOW_FREEZING_INITIATE", + "condition": { "and": [ { "not": { "is_weather": "cloudy" } } ] }, + "effect": [ + { "u_message": "The sky clouds over as snow begins to drift down.", "type": "neutral" }, + { "math": [ "magic_weather_flurries", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { + "queue_eocs": "EOC_WEATHER_CONTROL_FLURRIES_TO_SNOWING", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + } + ], + "false_effect": [ + { "u_message": "Snow slowly begins to drift down from the clouds above.", "type": "neutral" }, + { "math": [ "magic_weather_flurries", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { + "queue_eocs": "EOC_WEATHER_CONTROL_FLURRIES_TO_SNOWING", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + } + ] + } + ] + } + ], + "false_effect": [ + { + "if": { "is_weather": "magic_weather_flurries" }, + "then": { "run_eocs": "EOC_WEATHER_CONTROL_FLURRIES_TO_SNOWING" }, + "else": { "if": { "is_weather": "magic_weather_snowing" }, "then": { "run_eocs": "EOC_WEATHER_CONTROL_SNOWING_TO_SNOWSTORM" } } + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_FLURRIES_TO_SNOWING", + "condition": { "and": [ { "math": [ "magic_weather_flurries", "==", "1" ] }, { "math": [ "u_weather_change_limit", ">=", "3" ] } ] }, + "effect": [ + { "if": "u_is_outside", "then": { "u_message": "Snow falls steadily now.", "type": "neutral" } }, + { "math": [ "magic_weather_flurries", "=", "0" ] }, + { "math": [ "magic_weather_snowing", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { + "queue_eocs": "EOC_WEATHER_CONTROL_SNOWING_TO_SNOWSTORM", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_SNOWING_TO_SNOWSTORM", + "condition": { "and": [ { "math": [ "magic_weather_snowing", "==", "1" ] }, { "math": [ "u_weather_change_limit", ">=", "5" ] } ] }, + "effect": [ + { "if": "u_is_outside", "then": { "u_message": "Snow falls thickly, obscuring your vision.", "type": "neutral" } }, + { "math": [ "magic_weather_snowing", "=", "0" ] }, + { "math": [ "magic_weather_snowstorm", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_BELOW_FREEZING_DOWNGRADE", + "condition": { "not": { "u_has_effect": "effect_controlling_weather" } }, + "effect": [ + { + "if": { "is_weather": "magic_weather_flurries" }, + "then": { "run_eocs": "EOC_WEATHER_CONTROL_FLURRIES_TO_NOTHING" }, + "else": { + "if": { "is_weather": "magic_weather_snowing" }, + "then": { "run_eocs": "EOC_WEATHER_CONTROL_SNOWING_TO_FLURRIES" }, + "else": { + "if": { "is_weather": "magic_weather_snowstorm" }, + "then": { "run_eocs": "EOC_WEATHER_CONTROL_SNOWSTORM_TO_SNOWING" } + } + } + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_SNOWSTORM_TO_SNOWING", + "condition": { "and": [ { "math": [ "magic_weather_snowstorm", "==", "1" ] }, { "math": [ "u_weather_change_limit", "<=", "4" ] } ] }, + "effect": [ + { "math": [ "magic_weather_snowstorm", "=", "0" ] }, + { "math": [ "magic_weather_snowing", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { + "if": { "u_has_effect": "effect_controlling_weather" }, + "then": { + "queue_eocs": "EOC_WEATHER_CONTROL_SNOWING_TO_FLURRIES", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + }, + "else": { + "queue_eocs": "EOC_WEATHER_CONTROL_SNOWING_TO_FLURRIES", + "time_in_future": [ + { "math": [ "min( (u_weather_stage_up_lower_bound * rng(2,5) ), 1800)" ] }, + { "math": [ "min( (u_weather_stage_up_upper_bound * rng(2,5) ), 1800)" ] } + ] + } + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_SNOWING_TO_FLURRIES", + "condition": { "and": [ { "math": [ "magic_weather_snowing", "==", "1" ] }, { "math": [ "u_weather_change_limit", "<=", "2" ] } ] }, + "effect": [ + { "math": [ "magic_weather_snowing", "=", "0" ] }, + { "math": [ "magic_weather_flurries", "=", "1" ] }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { + "if": { "u_has_effect": "effect_controlling_weather" }, + "then": { + "queue_eocs": "EOC_WEATHER_CONTROL_FLURRIES_TO_NOTHING", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + }, + "else": { + "queue_eocs": "EOC_WEATHER_CONTROL_FLURRIES_TO_NOTHING", + "time_in_future": [ + { "math": [ "min( (u_weather_stage_up_lower_bound * rng(2,5) ), 1800)" ] }, + { "math": [ "min( (u_weather_stage_up_upper_bound * rng(2,5) ), 1800)" ] } + ] + } + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_WEATHER_CONTROL_FLURRIES_TO_NOTHING", + "condition": { "and": [ { "math": [ "magic_weather_flurries", "==", "1" ] }, { "math": [ "u_weather_change_limit", "<=", "0" ] } ] }, + "effect": [ { "math": [ "magic_weather_flurries", "=", "0" ] }, { "run_eocs": "EOC_CALL_NEXT_WEATHER" } ] + } +] diff --git a/data/mods/Xedra_Evolved/eocs/misc_eoc.json b/data/mods/Xedra_Evolved/eocs/misc_eoc.json index f1b09916dd455..69c3744d1e2cf 100644 --- a/data/mods/Xedra_Evolved/eocs/misc_eoc.json +++ b/data/mods/Xedra_Evolved/eocs/misc_eoc.json @@ -249,5 +249,10 @@ "type": "effect_on_condition", "id": "EOC_REMOVE_LUNA_MISSION", "effect": { "remove_active_mission": "MISSION_KILL_LUNA_ATTUNED" } + }, + { + "type": "effect_on_condition", + "id": "EOC_CALL_NEXT_WEATHER", + "effect": [ "next_weather" ] } ] diff --git a/data/mods/Xedra_Evolved/field_type.json b/data/mods/Xedra_Evolved/field_type.json index 85506ebfa9bc3..375b64870e88c 100644 --- a/data/mods/Xedra_Evolved/field_type.json +++ b/data/mods/Xedra_Evolved/field_type.json @@ -225,5 +225,33 @@ "phase": "gas", "display_items": false, "display_field": true + }, + { + "id": "fd_obscuring_fog", + "type": "field_type", + "intensity_levels": [ + { + "name": "thick fog", + "sym": "~", + "dangerous": false, + "transparent": false, + "translucency": 8, + "color": "light_gray", + "scent_neutralization": 3 + }, + { "name": "very thick fog", "translucency": 12, "color": "light_gray", "scent_neutralization": 6 }, + { "name": "impenetrable fog", "translucency": 0, "color": "dark_gray", "scent_neutralization": 9 } + ], + "decay_amount_factor": 15, + "gas_absorption_factor": 5, + "percent_spread": 35, + "dirty_transparency_cache": true, + "has_fume": true, + "priority": 8, + "half_life": "7 minutes", + "phase": "gas", + "display_items": false, + "display_field": true, + "looks_like": "fd_smoke" } ] diff --git a/data/mods/Xedra_Evolved/jmath.json b/data/mods/Xedra_Evolved/jmath.json index 603201ad52f86..3de7956b105d1 100644 --- a/data/mods/Xedra_Evolved/jmath.json +++ b/data/mods/Xedra_Evolved/jmath.json @@ -143,5 +143,11 @@ "id": "pooka_shapeshift_traits", "num_args": 0, "return": "u_has_trait('ANTLERS') + u_has_trait('HORNS_CURLED') + u_has_trait('LUPINE_EARS') + u_has_trait('FELINE_EARS') + u_has_trait('CLAWS') + u_has_trait('CLAWS_ST') + u_has_trait('WINGS_BIRD') + u_has_trait('URSINE_FUR') + u_has_trait('CHITIN2') + u_has_trait('POOKA_QUADRUPED_TRAITS') + u_has_trait('LEAPING_LEGS') + u_has_trait('TAIL_FLUFFY') + u_has_trait('TAIL_LONG')" + }, + { + "type": "jmath_function", + "id": "selkie_has_weather_mastery", + "num_args": 0, + "return": "1 + (u_has_trait('SELKIE_CHANGE_WEATHER_MASTER') * 1.5)" } ] diff --git a/data/mods/Xedra_Evolved/mutations/playable_changeling.json b/data/mods/Xedra_Evolved/mutations/playable_changeling.json index f1c1c5e3a48ba..7d60971923234 100644 --- a/data/mods/Xedra_Evolved/mutations/playable_changeling.json +++ b/data/mods/Xedra_Evolved/mutations/playable_changeling.json @@ -1105,6 +1105,58 @@ } ] }, + { + "type": "mutation", + "id": "SELKIE_FOG_CLOAK", + "name": { "str": "Cloak of Fog" }, + "points": 2, + "description": "Surround yourself with a thick fog, obscuring your position.", + "category": [ "FAIR_FOLK_COMMONER_SELKIE" ], + "spells_learned": [ [ "selkie_fog_cloak_spell", 1 ] ] + }, + { + "type": "mutation", + "id": "SELKIE_CHANGE_WEATHER_DENSE_FOG", + "name": { "str": "Chant of Concealing Mists" }, + "points": 3, + "description": "Call up a thick mist, shrouding the nearby landscape.", + "prereqs": [ "SELKIE_FOG_CLOAK" ], + "prereqs2": [ "PARACLESIAN_INT_PER_1", "PARACLESIAN_INT_PER_2" ], + "category": [ "FAIR_FOLK_COMMONER_SELKIE" ], + "spells_learned": [ [ "selkie_change_weather_dense_fog_spell", 1 ] ] + }, + { + "type": "mutation", + "id": "SELKIE_CHANGE_WEATHER_RAIN", + "name": { "str": "Aria of the Droplets" }, + "points": 3, + "description": "Call a rain shower, letting the rains water the earth.", + "prereqs": [ "SELKIE_CHANGE_WEATHER_DENSE_FOG" ], + "prereqs2": [ "PARACLESIAN_INT_PER_1", "PARACLESIAN_INT_PER_2" ], + "category": [ "FAIR_FOLK_COMMONER_SELKIE" ], + "spells_learned": [ [ "selkie_change_weather_rains_spell", 1 ] ] + }, + { + "type": "mutation", + "id": "SELKIE_CHANGE_WEATHER_RAINSTORM", + "name": { "str": "Canticle of Rainstorms" }, + "points": 3, + "description": "Call a heavy rainstorm, soaking everything.", + "prereqs": [ "SELKIE_CHANGE_WEATHER_RAIN" ], + "category": [ "FAIR_FOLK_COMMONER_SELKIE" ], + "spells_learned": [ [ "selkie_change_weather_rainstorm_spell", 1 ] ] + }, + { + "type": "mutation", + "id": "SELKIE_CHANGE_WEATHER_LIGHTNINGSTORM", + "name": { "str": "Symphony of Levin" }, + "points": 3, + "description": "Call a lightning storm, .", + "prereqs": [ "SELKIE_CHANGE_WEATHER_RAINSTORM" ], + "category": [ "FAIR_FOLK_COMMONER_SELKIE" ], + "threshreq": [ "THRESH_FAIR_FOLK_COMMONER_SELKIE" ], + "spells_learned": [ [ "selkie_change_weather_lightningstorm_spell", 1 ] ] + }, { "type": "mutation", "id": "SELKIE_BREATHING_WATER", @@ -1177,6 +1229,17 @@ "category": [ "FAIR_FOLK_COMMONER_SELKIE" ], "flags": [ "WEBBED_HANDS", "WEBBED_FEET" ] }, + { + "type": "mutation", + "id": "SELKIE_CHANGE_WEATHER_MASTER", + "name": { "str": "Conductor of Storms" }, + "points": 6, + "description": "You are a master of meteorological enchantments, and your weather manipulations will last much longer.", + "prereqs": [ "SELKIE_CHANGE_WEATHER_RAINSTORM" ], + "prereqs2": [ "PARACLESIAN_INT_PER_1", "PARACLESIAN_INT_PER_2" ], + "category": [ "FAIR_FOLK_COMMONER_SELKIE" ], + "threshreq": [ "THRESH_FAIR_FOLK_COMMONER_SELKIE" ] + }, { "type": "mutation", "id": "PAINRESIST", diff --git a/data/mods/Xedra_Evolved/mutations/playable_changeling_eocs.json b/data/mods/Xedra_Evolved/mutations/playable_changeling_eocs.json index 2fc43d5407083..674379e24ae70 100644 --- a/data/mods/Xedra_Evolved/mutations/playable_changeling_eocs.json +++ b/data/mods/Xedra_Evolved/mutations/playable_changeling_eocs.json @@ -1518,5 +1518,199 @@ "id": "EOC_POOKA_SHAPESHIFT_FULL_COUGAR_deactivate_future", "//": "This is necessary because calling u_deactivate_trait from within the trait EoC does not work", "effect": { "u_deactivate_trait": "POOKA_SHAPESHIFT_FULL_COUGAR" } + }, + { + "type": "effect_on_condition", + "id": "EOC_SELKIE_FOG_CLOAK", + "condition": { "not": { "u_has_effect": "effect_selkie_fog_cloak" } }, + "effect": [ + { + "u_add_effect": "effect_selkie_fog_cloak", + "duration": { + "math": [ + "rng( ((u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 5.6) + (u_skill('deduction') * 51.2) + 135.4), ((u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 13.8) + (u_skill('deduction') * 123.05) + 498.5))" + ] + } + } + ], + "false_effect": [ { "u_lose_effect": "effect_selkie_fog_cloak" } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_SELKIE_CHANGE_WEATHER_DENSE_FOG", + "condition": { "math": [ "magic_weather_dense_fog", "!=", "1" ] }, + "effect": [ + { "u_message": "A thick fog begins to rise.", "type": "neutral" }, + { "math": [ "magic_weather_dense_fog", "=", "1" ] }, + { "u_add_effect": "effect_controlling_weather_fog", "duration": "6 hours" }, + { "queue_eocs": "EOC_CALL_NEXT_WEATHER", "time_in_future": [ "15 seconds", "45 seconds" ] }, + { + "queue_eocs": "EOC_SELKIE_CHANGE_WEATHER_DENSE_FOG_REMOVE", + "time_in_future": [ + { + "math": [ + "((u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 9.8) + (u_skill('deduction') * 34.53) + 203.10) * selkie_has_weather_mastery()" + ] + }, + { + "math": [ + "((u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 24.15) + (u_skill('deduction') * 102.75) + 747.75) * selkie_has_weather_mastery()" + ] + } + ] + } + ], + "false_effect": [ + { "u_message": "You release your command over the fog and it begins to disperse.", "type": "neutral" }, + { "math": [ "magic_weather_dense_fog", "=", "0" ] }, + { "u_lose_effect": "effect_controlling_weather_fog" }, + { "queue_eocs": "EOC_CALL_NEXT_WEATHER", "time_in_future": [ "15 seconds", "45 seconds" ] } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_SELKIE_CHANGE_WEATHER_DENSE_FOG_REMOVE", + "condition": { "math": [ "magic_weather_dense_fog", "==", "1" ] }, + "effect": [ + { "u_message": "The thick fog begins to disperse.", "type": "neutral" }, + { "u_lose_effect": "effect_controlling_weather_fog" }, + { "queue_eocs": "EOC_CALL_NEXT_WEATHER", "time_in_future": [ "15 seconds", "45 seconds" ] }, + { "math": [ "magic_weather_dense_fog", "=", "0" ] } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_SELKIE_CHANGE_WEATHER_RAINS", + "condition": { "math": [ "weather('temperature')", ">", "from_fahrenheit( 31 )" ] }, + "effect": [ { "run_eocs": "EOC_SELKIE_CHANGE_WEATHER_RAINS_NOT_WINTER" } ], + "false_effect": [ { "u_message": "The weather is too cold for you to control it.", "type": "bad" } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_SELKIE_CHANGE_WEATHER_RAINS_NOT_WINTER", + "condition": { + "and": [ + { "math": [ "u_weather_change_limit", "<=", "2" ] }, + { "not": { "u_has_effect": "effect_controlling_weather_rains" } } + ] + }, + "effect": [ + { + "run_eocs": [ + { + "id": "EOC_SELKIE_CHANGE_WEATHER_RAINS_INITIATE", + "condition": { "not": { "u_has_effect": "effect_controlling_weather_lightningstorm" } }, + "effect": [ + { "u_lose_effect": "effect_controlling_weather" }, + { "math": [ "u_weather_change_limit", "=", "3" ] }, + { "math": [ "u_weather_stage_up_lower_bound", "=", "60" ] }, + { "math": [ "u_weather_stage_up_upper_bound", "=", "180" ] }, + { "u_add_effect": "effect_controlling_weather_rains", "duration": "6 hours" }, + { + "u_add_effect": "effect_controlling_weather", + "duration": { + "math": [ + "rng( ( ( (u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 17.15) + (u_skill('deduction') * 60.43) + 355.43) * selkie_has_weather_mastery() ), ( ( (u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 42.26) + ( (u_skill('deduction') * 179.81) + 1233.79) * selkie_has_weather_mastery() ) ) )" + ] + } + }, + { + "queue_eocs": "EOC_WEATHER_CONTROL_INITIATE", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + } + ] + } + ] + } + ], + "false_effect": [ + { + "if": { "u_has_effect": "effect_controlling_weather_rains" }, + "then": [ { "math": [ "u_weather_change_limit", "=", "0" ] }, { "u_lose_effect": "effect_controlling_weather" } ], + "else": { "run_eocs": "EOC_SELKIE_CHANGE_WEATHER_RAINS_INITIATE" } + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_SELKIE_CHANGE_WEATHER_RAINSTORM", + "condition": { "math": [ "weather('temperature')", ">", "from_fahrenheit( 31 )" ] }, + "effect": [ { "run_eocs": "EOC_SELKIE_CHANGE_WEATHER_RAINSTORM_NOT_WINTER" } ], + "false_effect": [ { "u_message": "The weather is too cold for you to control it.", "type": "bad" } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_SELKIE_CHANGE_WEATHER_RAINSTORM_NOT_WINTER", + "condition": { + "and": [ + { "math": [ "u_weather_change_limit", "<=", "3" ] }, + { "not": { "u_has_effect": "effect_controlling_weather_rainstorm" } } + ] + }, + "effect": [ + { + "run_eocs": [ + { + "id": "EOC_SELKIE_CHANGE_WEATHER_RAINSTORM_INITIATE", + "condition": { "not": { "u_has_effect": "effect_controlling_weather_lightningstorm" } }, + "effect": [ + { "u_lose_effect": "effect_controlling_weather" }, + { "math": [ "u_weather_change_limit", "=", "4" ] }, + { "math": [ "u_weather_stage_up_lower_bound", "=", "60" ] }, + { "math": [ "u_weather_stage_up_upper_bound", "=", "180" ] }, + { "u_add_effect": "effect_controlling_weather_rainstorm", "duration": "6 hours" }, + { + "u_add_effect": "effect_controlling_weather", + "duration": { + "math": [ + "rng( ( ( (u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 17.15) + (u_skill('deduction') * 60.43) + 355.43) * selkie_has_weather_mastery() ), ( ( (u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 42.26) + ( (u_skill('deduction') * 179.81) + 1233.79) * selkie_has_weather_mastery() ) ) )" + ] + } + }, + { + "queue_eocs": "EOC_WEATHER_CONTROL_INITIATE", + "time_in_future": [ { "math": [ "u_weather_stage_up_lower_bound" ] }, { "math": [ "u_weather_stage_up_upper_bound" ] } ] + } + ] + } + ] + } + ], + "false_effect": [ + { + "if": { "u_has_effect": "effect_controlling_weather_rainstorm" }, + "then": [ { "math": [ "u_weather_change_limit", "=", "0" ] }, { "u_lose_effect": "effect_controlling_weather" } ], + "else": { "run_eocs": "EOC_SELKIE_CHANGE_WEATHER_RAINSTORM_INITIATE" } + } + ] + }, + { + "type": "effect_on_condition", + "id": "EOC_SELKIE_CHANGE_WEATHER_LIGHTNINGSTORM", + "condition": { "or": [ { "is_weather": "magic_weather_rainstorm" }, { "is_weather": "rainstorm" } ] }, + "effect": [ + { "math": [ "u_weather_change_limit", "=", "6" ] }, + { "math": [ "magic_weather_rainstorm", "=", "0" ] }, + { "math": [ "magic_weather_lightning", "=", "1" ] }, + { "u_add_effect": "effect_controlling_weather_lightningstorm", "duration": "6 hours" }, + { "u_add_effect": "effect_controlling_weather", "duration": "30 minutes" }, + { "run_eocs": "EOC_CALL_NEXT_WEATHER" }, + { "u_message": "The sky explodes in a frenzy of lightning!", "type": "mixed" }, + { + "queue_eocs": "EOC_SELKIE_CHANGE_WEATHER_LIGHTNINGSTORM_END", + "time_in_future": [ "10 minutes", "30 minutes" ] + } + ], + "false_effect": [ { "u_message": "You need a heavy rainstorm to agitate it into lightning.", "type": "bad" } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_SELKIE_CHANGE_WEATHER_LIGHTNINGSTORM_END", + "condition": { "math": [ "magic_weather_lightning", "==", "1" ] }, + "effect": [ + { "math": [ "u_weather_change_limit", "=", "0" ] }, + { "u_lose_effect": "effect_controlling_weather" }, + { "u_lose_effect": "effect_controlling_weather_lightningstorm" } + ] } ] diff --git a/data/mods/Xedra_Evolved/spells/changeling_spells.json b/data/mods/Xedra_Evolved/spells/changeling_spells.json index 03187322102bb..5ae93af33981b 100644 --- a/data/mods/Xedra_Evolved/spells/changeling_spells.json +++ b/data/mods/Xedra_Evolved/spells/changeling_spells.json @@ -262,6 +262,7 @@ "type": "SPELL", "name": "Friend to Birds and Beasts", "description": "You have learned to speak the secret tongues of birds and beasts and may use it to ask them for aid. Casting this spell on a mammal or a bird will ally them with you, causing them to defend you against your enemies.", + "message": "You whisper a few words in the language of beasts.", "valid_targets": [ "ally", "hostile" ], "flags": [ "VERBAL", "RECHARM", "RANDOM_DAMAGE", "RANDOM_DURATION", "NO_FAIL", "NO_PROJECTILE", "SILENT" ], "effect": "charm_monster", @@ -289,5 +290,173 @@ "math": [ "max(( 200 - (u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_POOKA') * 4) - (u_skill('deduction') * 8)), 50)" ] }, "targeted_monster_species": [ "MAMMAL", "BIRD" ] + }, + { + "id": "selkie_fog_cloak_spell", + "type": "SPELL", + "name": "Cloak of Fog", + "description": "Call a thick fog from the surrounding air, breaking line of sight with your enemies and obscuring your presence. Weave the glamour again to dispel it.", + "message": "Thick fog billows up around you.", + "valid_targets": [ "self" ], + "flags": [ "VERBAL", "RANDOM_DURATION", "NO_FAIL" ], + "effect": "effect_on_condition", + "effect_str": "EOC_SELKIE_FOG_CLOAK", + "shape": "blast", + "spell_class": "CHANGELING_MAGIC", + "difficulty": 3, + "max_level": 1, + "min_duration": { + "math": [ + "((u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 560) + (u_skill('deduction') * 5120) + 13540) * selkie_has_weather_mastery()" + ] + }, + "max_duration": { + "math": [ + "((u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 1380) + (u_skill('deduction') * 12305) + 49850) * selkie_has_weather_mastery()" + ] + }, + "energy_source": "MANA", + "base_energy_cost": { + "math": [ + "u_effect_intensity('effect_selkie_fog_cloak') > -1 ? 0 : max(( 450 - (u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 5) - (u_skill('deduction') * 15)), 100)" + ] + }, + "base_casting_time": { + "math": [ "max(( 100 - u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') - (u_skill('deduction') * 3)), 40)" ] + } + }, + { + "id": "selkie_change_weather_dense_fog_spell", + "type": "SPELL", + "name": "Chant of Obscuring Mists", + "description": "Manipulate the weather, pulling the water from the air and cause a thick fog to form and blanket the countryside. Weave the glamour again to dispel it.", + "message": "", + "valid_targets": [ "self" ], + "flags": [ "VERBAL", "RANDOM_DURATION", "NO_FAIL" ], + "effect": "effect_on_condition", + "effect_str": "EOC_SELKIE_CHANGE_WEATHER_DENSE_FOG", + "shape": "blast", + "spell_class": "CHANGELING_MAGIC", + "difficulty": 5, + "max_level": 1, + "min_duration": { + "math": [ + "((u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 980) + (u_skill('deduction') * 3453) + 20310) * selkie_has_weather_mastery()" + ] + }, + "max_duration": { + "math": [ + "((u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 2415) + (u_skill('deduction') * 10275) + 74775) * selkie_has_weather_mastery()" + ] + }, + "energy_source": "MANA", + "base_energy_cost": { + "math": [ + "u_effect_intensity('effect_controlling_weather_fog') > -1 ? 50 : max(( 750 - (u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 3) - (u_skill('deduction') * 25)), 400)" + ] + }, + "base_casting_time": { + "math": [ + "max(( 30000 - (u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 25) - (u_skill('deduction') * 500)), 6000)" + ] + } + }, + { + "id": "selkie_change_weather_rains_spell", + "type": "SPELL", + "name": "Aria of the Droplets", + "description": "Manipulate the weather, causing the sky to cloud over and rain to fall. Weave the glamour again to dispel it. You cannot control the weather if the temperature is too cold.", + "message": "", + "valid_targets": [ "self" ], + "flags": [ "VERBAL", "RANDOM_DURATION", "NO_FAIL" ], + "effect": "effect_on_condition", + "effect_str": "EOC_SELKIE_CHANGE_WEATHER_RAINS", + "shape": "blast", + "spell_class": "CHANGELING_MAGIC", + "difficulty": 6, + "max_level": 1, + "min_duration": { + "math": [ + "((u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 1715) + (u_skill('deduction') * 6043) + 35543) * selkie_has_weather_mastery()" + ] + }, + "max_duration": { + "math": [ + "((u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 4226) + (u_skill('deduction') * 17981) + 123379) * selkie_has_weather_mastery()" + ] + }, + "energy_source": "MANA", + "base_energy_cost": { + "math": [ + "u_effect_intensity('effect_controlling_weather_rains') > -1 ? 0 : max(( 950 - (u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 3) - (u_skill('deduction') * 25)), 450)" + ] + }, + "base_casting_time": { + "math": [ + "max(( 60000 - (u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 45) - (u_skill('deduction') * 1000)), 6000)" + ] + } + }, + { + "id": "selkie_change_weather_rainstorm_spell", + "type": "SPELL", + "name": "Canticle of Rainstorms", + "description": "Manipulate the weather, causing the sky to cloud over and heavy rains to fall. Weave the glamour again to dispel it. You cannot control the weather if the temperature is too cold.", + "message": "", + "valid_targets": [ "self" ], + "flags": [ "VERBAL", "RANDOM_DURATION", "NO_FAIL" ], + "effect": "effect_on_condition", + "effect_str": "EOC_SELKIE_CHANGE_WEATHER_RAINSTORM", + "shape": "blast", + "spell_class": "CHANGELING_MAGIC", + "difficulty": 7, + "max_level": 1, + "min_duration": { + "math": [ + "((u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 1715) + (u_skill('deduction') * 6043) + 35543) * selkie_has_weather_mastery()" + ] + }, + "max_duration": { + "math": [ + "((u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 4226) + (u_skill('deduction') * 17981) + 123379) * selkie_has_weather_mastery()" + ] + }, + "energy_source": "MANA", + "base_energy_cost": { + "math": [ + "u_effect_intensity('effect_controlling_weather_rainstorm') > -1 ? 0 : max(( 1200 - (u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 4) - (u_skill('deduction') * 25)), 600)" + ] + }, + "base_casting_time": { + "math": [ + "max(( 90000 - (u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 45) - (u_skill('deduction') * 1000)), 9000)" + ] + } + }, + { + "id": "selkie_change_weather_lightningstorm_spell", + "type": "SPELL", + "name": "Symphony of Levin", + "description": "Manipulate the weather, transforming a rainstorm into a violent lightning storm. It must already be raining heavily to transform the weather into a lightning storm, and a lightning storm cannot be controlled after the glamour is woven.", + "message": "", + "valid_targets": [ "self" ], + "flags": [ "VERBAL", "RANDOM_DURATION", "NO_FAIL" ], + "effect": "effect_on_condition", + "effect_str": "EOC_SELKIE_CHANGE_WEATHER_LIGHTNINGSTORM", + "shape": "blast", + "spell_class": "CHANGELING_MAGIC", + "difficulty": 9, + "max_level": 1, + "energy_source": "MANA", + "base_energy_cost": { + "math": [ + "u_effect_intensity('effect_controlling_weather_lightningstorm') > -1 ? 50 : max(( 500 - u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') - (u_skill('deduction') * 15)), 200)" + ] + }, + "base_casting_time": { + "math": [ + "max(( 9000 - (u_sum_traits_of_category_char_has('FAIR_FOLK_COMMONER_SELKIE') * 10) - (u_skill('deduction') * 250)), 1000)" + ] + } } ] diff --git a/data/mods/Xedra_Evolved/weather_eocs.json b/data/mods/Xedra_Evolved/weather_eocs.json new file mode 100644 index 0000000000000..195e2a185e02c --- /dev/null +++ b/data/mods/Xedra_Evolved/weather_eocs.json @@ -0,0 +1,36 @@ +[ + { + "type": "effect_on_condition", + "id": "magic_weather_thunder", + "recurrence": 1, + "global": true, + "condition": { + "and": [ + { "or": [ { "is_weather": "magic_weather_thunder" }, { "is_weather": "magic_weather_lightning" } ] }, + { "one_in_chance": 50 }, + { "math": [ "u_val('pos_z')", ">=", "0" ] } + ] + }, + "deactivate_condition": { "not": { "or": [ { "is_weather": "magic_weather_thunder" }, { "is_weather": "magic_weather_lightning" } ] } }, + "effect": [ + { "u_message": "You hear a distant rumble of thunder.", "sound": true }, + { "sound_effect": "thunder_far", "outdoor_event": true, "id": "environment" } + ] + }, + { + "type": "effect_on_condition", + "id": "magic_weather_lightning", + "recurrence": 1, + "global": true, + "condition": { + "and": [ { "is_weather": "magic_weather_lightning" }, { "one_in_chance": 600 }, { "math": [ "u_val('pos_z')", ">=", "0" ] } ] + }, + "deactivate_condition": { "not": { "is_weather": "magic_weather_lightning" } }, + "effect": [ + { "u_message": "A flash of lightning illuminates your surroundings!" }, + { "sound_effect": "thunder_near", "id": "environment" }, + "lightning", + { "custom_light_level": 100, "length": "1 seconds" } + ] + } +] diff --git a/data/mods/Xedra_Evolved/weather_type.json b/data/mods/Xedra_Evolved/weather_type.json index f6f68b639e460..b629bcbe1c8f7 100644 --- a/data/mods/Xedra_Evolved/weather_type.json +++ b/data/mods/Xedra_Evolved/weather_type.json @@ -18,5 +18,150 @@ "rains": false, "priority": 119, "condition": { "math": [ "blotted_sun", "==", "1" ] } + }, + { + "id": "magic_weather_thick_fog", + "type": "weather_type", + "name": "Dense Fog", + "color": "light_gray", + "map_color": "dark_gray_white", + "sym": "~", + "ranged_penalty": 9, + "sight_penalty": 2.6, + "light_modifier": -60, + "sun_multiplier": 0.2, + "sound_attn": 0, + "dangerous": false, + "precip": "none", + "rains": false, + "sound_category": "silent", + "priority": 119, + "condition": { "math": [ "magic_weather_dense_fog", "==", "1" ] } + }, + { + "id": "magic_weather_light_drizzle", + "type": "weather_type", + "name": "Light Drizzle", + "color": "light_blue", + "map_color": "h_light_blue", + "sym": ".", + "ranged_penalty": 0, + "sight_penalty": 1.01, + "light_modifier": -10, + "sun_multiplier": 0.2, + "sound_attn": 0, + "dangerous": false, + "precip": "very_light", + "rains": true, + "tiles_animation": "weather_rain_drop", + "weather_animation": { "factor": 0.01, "color": "light_blue", "sym": "," }, + "sound_category": "drizzle", + "priority": 114, + "condition": { "math": [ "magic_weather_light_drizzle", "==", "1" ] } + }, + { + "id": "magic_weather_drizzle", + "type": "weather_type", + "name": "Drizzle", + "color": "light_blue", + "map_color": "h_light_blue", + "sym": ".", + "ranged_penalty": 1, + "sight_penalty": 1.03, + "light_modifier": -20, + "sun_multiplier": 0.1, + "sound_attn": 1, + "dangerous": false, + "precip": "light", + "rains": true, + "tiles_animation": "weather_rain_drop", + "weather_animation": { "factor": 0.01, "color": "light_blue", "sym": "." }, + "sound_category": "drizzle", + "priority": 115, + "condition": { "math": [ "magic_weather_drizzle", "==", "1" ] } + }, + { + "id": "magic_weather_rain", + "type": "weather_type", + "name": "Rain", + "color": "blue", + "map_color": "h_blue", + "sym": "o", + "ranged_penalty": 3, + "sight_penalty": 1.1, + "light_modifier": -30, + "sun_multiplier": 0.03, + "sound_attn": 4, + "dangerous": false, + "precip": "heavy", + "rains": true, + "tiles_animation": "weather_rain_drop", + "weather_animation": { "factor": 0.02, "color": "light_blue", "sym": "," }, + "sound_category": "rainy", + "priority": 117, + "condition": { "math": [ "magic_weather_rain", "==", "1" ] } + }, + { + "id": "magic_weather_rainstorm", + "type": "weather_type", + "name": "Rain Storm", + "color": "blue", + "map_color": "i_blue", + "sym": "%", + "ranged_penalty": 6, + "sight_penalty": 1.2, + "light_modifier": -35, + "sun_multiplier": 0.01, + "sound_attn": 8, + "dangerous": false, + "precip": "heavy", + "rains": true, + "tiles_animation": "weather_rain_drop", + "weather_animation": { "factor": 0.04, "color": "blue", "sym": ";" }, + "sound_category": "rainstorm", + "priority": 118, + "condition": { "math": [ "magic_weather_rainstorm", "==", "1" ] } + }, + { + "id": "magic_weather_thunder", + "type": "weather_type", + "name": "Thunder Storm", + "color": "dark_gray", + "map_color": "i_blue", + "sym": "%", + "ranged_penalty": 4, + "sight_penalty": 1.2, + "light_modifier": -40, + "sun_multiplier": 0.01, + "sound_attn": 8, + "dangerous": false, + "precip": "heavy", + "rains": true, + "tiles_animation": "weather_rain_drop", + "weather_animation": { "factor": 0.02, "color": "light_blue", "sym": "." }, + "sound_category": "thunder", + "priority": 70, + "condition": { "math": [ "magic_weather_thunder", "==", "1" ] } + }, + { + "id": "magic_weather_lightning", + "type": "weather_type", + "name": "Lightning Storm", + "color": "yellow", + "map_color": "h_yellow", + "sym": "%", + "ranged_penalty": 4, + "sight_penalty": 1.25, + "light_modifier": -45, + "sun_multiplier": 0.01, + "sound_attn": 8, + "dangerous": false, + "precip": "heavy", + "rains": true, + "tiles_animation": "weather_rain_drop", + "weather_animation": { "factor": 0.04, "color": "light_blue", "sym": "," }, + "sound_category": "thunder", + "priority": 119, + "condition": { "math": [ "magic_weather_lightning", "==", "1" ] } } ]