diff --git a/data/mods/Magiclysm/Spells/druid.json b/data/mods/Magiclysm/Spells/druid.json index ab507e9381cad..f3f1cb4ed19e8 100644 --- a/data/mods/Magiclysm/Spells/druid.json +++ b/data/mods/Magiclysm/Spells/druid.json @@ -1420,5 +1420,116 @@ "//": "EoC to summon because summoned comestibles don't have timers", "id": "EOC_DRUID_GOODBERRY", "effect": [ { "u_spawn_item": "item_druid_goodberry", "count": 1, "suppress_message": true } ] + }, + { + "id": "druid_create_temporary_spring", + "type": "SPELL", + "name": "Fountain of the Depths", + "description": "Call to the waters beneath the earth and bring them to the surface, creating a natural spring. The waters will subside when the spell's duration ends.", + "flags": [ "CHANNELING_SPELL", "CONCENTRATE", "SILENT", "VERBAL" ], + "valid_targets": [ "self" ], + "spell_class": "DRUID", + "difficulty": 9, + "max_level": 15, + "effect": "effect_on_condition", + "effect_str": "EOC_DRUID_TEMPORARY_SPRING", + "shape": "blast", + "min_duration": 30000, + "max_duration": 255000, + "duration_increment": 15000, + "energy_source": "MANA", + "base_casting_time": 9000, + "base_energy_cost": 750, + "extra_effects": [ { "id": "eoc_channeling_setup", "hit_self": true } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_DRUID_TEMPORARY_SPRING", + "effect": [ + { + "if": { + "u_query_tile": "around", + "target_var": { "global_val": "druid_temporary_spring_location" }, + "message": "Select natural earth:" + }, + "then": { + "if": { "map_terrain_with_flag": "DIGGABLE", "loc": { "global_val": "druid_temporary_spring_location" } }, + "then": [ + { + "u_transform_radius": 0, + "ter_furn_transform": "ter_druid_create_spring", + "target_var": { "global_val": "druid_temporary_spring_location" } + }, + { + "u_transform_radius": 60, + "ter_furn_transform": "ter_druid_remove_spring", + "target_var": { "global_val": "druid_temporary_spring_location" }, + "time_in_future": { + "math": [ "( (u_spell_level('druid_create_temporary_spring') * 150) + 300 ) * ( channeling_proficiency_modifier() )" ] + } + } + ], + "else": { "u_message": "You can only call up a spring on natural earth." } + }, + "else": { "u_message": "Canceled" } + } + ] + }, + { + "id": "druid_turn_tree_into_treant", + "type": "SPELL", + "name": "Awakening of the Forest Guardian", + "description": "Grant a nearby tree awareness and mobility, letting it shake free from the soil and rise up to crush your enemies. It will root itself again when the spell expires.\n\nYou must be standing next to a tree for the spell to take effect.", + "flags": [ "TRANSFORMATION_SPELL", "CONCENTRATE", "SILENT", "VERBAL" ], + "valid_targets": [ "self" ], + "spell_class": "DRUID", + "difficulty": 12, + "max_level": 20, + "effect": "effect_on_condition", + "effect_str": "EOC_DRUID_TREE_AWAKENING", + "shape": "blast", + "min_duration": 15000, + "max_duration": 155000, + "duration_increment": 7000, + "energy_source": "MANA", + "base_casting_time": 500, + "base_energy_cost": 850, + "extra_effects": [ { "id": "eoc_transformation_setup", "hit_self": true } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_DRUID_TREE_AWAKENING", + "effect": [ + { + "u_map_run_eocs": [ + { + "id": "EOC_DRUID_TREE_AWAKENING_ACTION", + "effect": [ + { + "u_transform_radius": 0, + "ter_furn_transform": "ter_druid_tree_guardian_turn", + "target_var": { "context_val": "druid_tree_awakening_check" } + }, + { + "u_spawn_monster": "mon_treant_druid", + "real_count": 1, + "min_radius": 0, + "max_radius": 0, + "temporary_drop_items": true, + "lifespan": { + "math": [ "( (u_spell_level('druid_turn_tree_into_treant') * 70) + 150 ) * ( transformation_proficiency_modifier() )" ] + }, + "target_var": { "context_val": "druid_tree_awakening_check" } + } + ], + "false_effect": { "u_message": "You need to be standing next to a tree to awaken it.", "type": "bad" } + } + ], + "range": 1, + "store_coordinates_in": { "context_val": "druid_tree_awakening_check" }, + "stop_at_first": true, + "condition": { "map_terrain_with_flag": "TREE", "loc": { "context_val": "druid_tree_awakening_check" } } + } + ] } ] diff --git a/data/mods/Magiclysm/Spells/earthshaper.json b/data/mods/Magiclysm/Spells/earthshaper.json index 570b0c80b99d1..c2a24aeafd5a8 100644 --- a/data/mods/Magiclysm/Spells/earthshaper.json +++ b/data/mods/Magiclysm/Spells/earthshaper.json @@ -1274,5 +1274,55 @@ ] } ] + }, + { + "id": "earthshaper_diggable_teleport", + "type": "SPELL", + "name": "Earth Gate", + "description": "While standing on natural earth, sink into it and emerge from any other patch of natural earth within the spell's range.", + "message": "", + "valid_targets": [ "self" ], + "flags": [ "CONVEYANCE_SPELL", "VERBAL", "SOMATIC", "SILENT" ], + "effect": "effect_on_condition", + "effect_str": "EOC_EARTHSHAPER_EARTH_GATE_TELEPORT_CHECK", + "extra_effects": [ { "id": "eoc_conveyance_setup", "hit_self": true } ], + "shape": "blast", + "difficulty": 8, + "spell_class": "EARTHSHAPER", + "teachable": false, + "max_level": 20, + "energy_source": "MANA", + "base_energy_cost": 650, + "base_casting_time": 250 + }, + { + "type": "effect_on_condition", + "id": "EOC_EARTHSHAPER_EARTH_GATE_TELEPORT_CHECK", + "effect": [ + { + "if": { "u_is_on_terrain_with_flag": "DIGGABLE" }, + "then": [ + { + "if": { + "u_query_tile": "line_of_sight", + "target_var": { "global_val": "earthshaper_earth_gate_location" }, + "range": { "math": [ "( (u_spell_level('earthshaper_diggable_teleport') * 2) + 3) * conveyance_proficiency_modifier()" ] }, + "z_level": false, + "message": "Select nearby earth to gate to." + }, + "then": { + "if": { "map_terrain_with_flag": "DIGGABLE", "loc": { "global_val": "earthshaper_earth_gate_location" } }, + "then": [ + { "u_teleport": { "global_val": "earthshaper_earth_gate_location" }, "force": true }, + { "u_message": "You sink into the earth and re-emerge nearby.", "type": "neutral" } + ], + "else": { "u_message": "You must select a patch of earth to transport to." } + }, + "else": { "u_message": "Canceled" } + } + ], + "else": { "u_message": "You must be on the living earth to use Earth Gate.", "type": "bad" } + } + ] } ] diff --git a/data/mods/Magiclysm/Spells/kelvinist.json b/data/mods/Magiclysm/Spells/kelvinist.json index 04b3f6df0b6af..5cd1aa8240ab8 100644 --- a/data/mods/Magiclysm/Spells/kelvinist.json +++ b/data/mods/Magiclysm/Spells/kelvinist.json @@ -772,5 +772,68 @@ ] } ] + }, + { + "id": "kelvinist_set_everyone_on_fire", + "type": "SPELL", + "name": "Flames of the Apocalypse", + "description": "Force a large amount of burning mana into every hostile target affected by the spell, causing them to explode in flames. Knowledge of this spell required licensing and registration before the Cataclysm, but you're pretty sure the ATF isn't going to be hassling you any time soon.", + "valid_targets": [ "hostile", "ground" ], + "spell_class": "KELVINIST", + "flags": [ "EVOCATION_SPELL", "CONCENTRATE", "VERBAL", "SOMATIC" ], + "effect": "effect_on_condition", + "effect_str": "EOC_KELVINIST_SET_EVERYONE_ON_FIRE", + "components": "spell_components_kelvinist_set_everyone_on_fire", + "extra_effects": [ { "id": "eoc_evocation_setup", "hit_self": true } ], + "shape": "blast", + "difficulty": 15, + "max_level": 25, + "min_range": 5, + "max_range": 30, + "range_increment": 1, + "min_aoe": 2, + "max_aoe": 12, + "aoe_increment": 0.5, + "energy_source": "MANA", + "base_energy_cost": 1000, + "base_casting_time": 500 + }, + { + "type": "effect_on_condition", + "id": "EOC_KELVINIST_SET_EVERYONE_ON_FIRE", + "condition": "has_alpha", + "effect": [ + { "math": [ "u_kelvinist_explosion_level = n_spell_level('kelvinist_set_everyone_on_fire')" ] }, + { + "u_cast_spell": { + "id": "kelvinist_set_everyone_on_fire_secondary", + "min_level": { "math": [ "u_kelvinist_explosion_level" ] }, + "hit_self": true + } + } + ] + }, + { + "id": "kelvinist_set_everyone_on_fire_secondary", + "type": "SPELL", + "name": { "str": "Flames of the Apocalypse Target", "//~": "NO_I18N" }, + "description": { "str": "Stop hitting yourself (with the flames of the apocalypse). You should never see this.", "//~": "NO_I18N" }, + "valid_targets": [ "self", "ground", "ally", "hostile" ], + "flags": [ "EVOCATION_SPELL", "RANDOM_DAMAGE", "CONCENTRATE", "VERBAL", "SOMATIC", "SPLIT_DAMAGE" ], + "effect": "attack", + "effect_str": "onfire", + "shape": "blast", + "max_level": 25, + "min_damage": { "math": [ "(u_kelvinist_explosion_level * 4) + 25" ] }, + "max_damage": { "math": [ "(u_kelvinist_explosion_level * 10) + 45" ] }, + "damage_type": "heat", + "min_duration": 1000, + "max_duration": 2500, + "min_aoe": { "math": [ "(u_kelvinist_explosion_level * 0.333) + 0" ] }, + "max_aoe": { "math": [ "(u_kelvinist_explosion_level * 0.333) + 0" ] }, + "field_id": "fd_fire", + "min_field_intensity": 2, + "max_field_intensity": 3, + "field_chance": 2 } ] diff --git a/data/mods/Magiclysm/Spells/magus.json b/data/mods/Magiclysm/Spells/magus.json index 9a45efd2b4957..d6b20c5658e87 100644 --- a/data/mods/Magiclysm/Spells/magus.json +++ b/data/mods/Magiclysm/Spells/magus.json @@ -791,7 +791,7 @@ "effect": "ter_transform", "effect_str": "ter_magus_permanent_light", "shape": "blast", - "flags": [ "CONJURATION_SPELL", "SOMATIC", "VERBAL" ], + "flags": [ "CONJURATION_SPELL", "CONCENTRATE", "SOMATIC", "VERBAL" ], "components": "spell_components_magus_permanent_light", "max_level": 15, "spell_class": "MAGUS", @@ -804,5 +804,29 @@ "final_energy_cost": 1500, "energy_increment": -75, "extra_effects": [ { "id": "eoc_summon_setup", "hit_self": true } ] + }, + { + "id": "magus_cannot_move_attack_or_damage_target", + "type": "SPELL", + "name": "Adamantine Gaol", + "description": "Create an impenetrable shell of force around the target, preventing them from moving or acting for the spell's duration. The shell works in two directions and the target is also immune to all harm.\n\nAdamantine Gaol cannot be dispelled.", + "valid_targets": [ "ally", "hostile", "self" ], + "flags": [ "EVOCATION_SPELL", "VERBAL", "SOMATIC" ], + "extra_effects": [ { "id": "eoc_evocation_setup", "hit_self": true } ], + "effect": "attack", + "effect_str": "effect_magus_cannot_move_attack_or_damage_target", + "shape": "blast", + "spell_class": "MAGUS", + "energy_source": "MANA", + "difficulty": 10, + "base_casting_time": 75, + "base_energy_cost": 750, + "max_level": 20, + "min_range": 5, + "max_range": 30, + "range_increment": 1.5, + "min_duration": 600, + "max_duration": 2500, + "duration_increment": 100 } ] diff --git a/data/mods/Magiclysm/effects/effects.json b/data/mods/Magiclysm/effects/effects.json index e865596fdf1d3..793c3d78e22fb 100644 --- a/data/mods/Magiclysm/effects/effects.json +++ b/data/mods/Magiclysm/effects/effects.json @@ -1578,6 +1578,16 @@ "enchantments": [ { "values": [ { "value": "ATTACK_NOISE", "multiply": -1 }, { "value": "FOOTSTEP_NOISE", "multiply": -1 } ] } ], "flags": [ "MUTE" ] }, + { + "type": "effect_type", + "id": "effect_magus_cannot_move_attack_or_damage_target", + "name": [ "Adamantine Gaol" ], + "desc": [ "You are totally immobile and invulnerable." ], + "rating": "bad", + "show_in_info": true, + "remove_message": "You can move again.", + "flags": [ "CANNOT_ATTACK", "CANNOT_MOVE", "CANNOT_TAKE_DAMAGE" ] + }, { "type": "effect_type", "id": "effect_druid_traverse_the_wilds", diff --git a/data/mods/Magiclysm/furniture_and_terrain/terrain_druid.json b/data/mods/Magiclysm/furniture_and_terrain/terrain_druid.json index 73089e178225e..45b0f53c3bd36 100644 --- a/data/mods/Magiclysm/furniture_and_terrain/terrain_druid.json +++ b/data/mods/Magiclysm/furniture_and_terrain/terrain_druid.json @@ -77,5 +77,21 @@ "ter_set": "t_dirt", "items": [ { "item": "splinter", "count": [ 2, 5 ] } ] } + }, + { + "type": "terrain", + "id": "t_water_moving_sh_druid", + "//": "Exists to prevent spamming the fountain of the depths spell and only having one tile transform back.", + "name": "flowing shallow water", + "description": "The streaming water isn't too deep here. With a watertight container, you could gather fresh water from here. Not safe to drink as is, although probably safer than stagnant water.", + "looks_like": "t_water_moving_sh", + "symbol": "~", + "color": "light_blue", + "move_cost": 6, + "flags": [ "TRANSPARENT", "LIQUID", "NO_SCENT", "SWIMMABLE", "FISHABLE", "CURRENT", "SHALLOW_WATER" ], + "connect_groups": "WATER", + "connects_to": "WATER", + "liquid_source": { "id": "water" }, + "examine_action": "water_source" } ] diff --git a/data/mods/Magiclysm/itemgroups/itemgroups.json b/data/mods/Magiclysm/itemgroups/itemgroups.json index 30c1e8592ce73..5d46f0cf4c030 100644 --- a/data/mods/Magiclysm/itemgroups/itemgroups.json +++ b/data/mods/Magiclysm/itemgroups/itemgroups.json @@ -1242,7 +1242,13 @@ ], "prob": 10 }, - { "distribution": [ { "item": "recovery_spellbook", "prob": 10 } ], "prob": 5 } + { + "distribution": [ + { "item": "spell_scroll_magus_cannot_move_attack_or_damage_target", "prob": 10 }, + { "item": "recovery_spellbook", "prob": 10 } + ], + "prob": 5 + } ] }, { @@ -1345,7 +1351,8 @@ { "item": "spell_scroll_nova_flare", "prob": 50 }, { "item": "spell_scroll_cone_cold", "prob": 50 }, { "item": "spell_scroll_hoary_blast", "prob": 50 }, - { "item": "spell_scroll_kelvinist_no_emotion_spell", "prob": 20 } + { "item": "spell_scroll_kelvinist_no_emotion_spell", "prob": 20 }, + { "item": "spell_scroll_kelvinist_set_everyone_on_fire", "prob": 2 } ], "prob": 10 } @@ -1442,7 +1449,8 @@ { "item": "spell_scroll_eshaper_shardstorm", "prob": 50 }, { "item": "spell_scroll_earthshaper_reveal_world_map", "prob": 25 }, { "item": "spell_scroll_earthshaper_granite_aegis", "prob": 20 }, - { "item": "spell_scroll_earthshaper_sleep_in_earth", "prob": 20 } + { "item": "spell_scroll_earthshaper_sleep_in_earth", "prob": 20 }, + { "item": "spell_scroll_earthshaper_diggable_teleport", "prob": 30 } ], "prob": 10 } @@ -1546,9 +1554,16 @@ { "item": "spell_scroll_druidic_regrowth", "prob": 100 }, { "item": "spell_scroll_druidic_healing", "prob": 100 }, { "item": "spell_scroll_druid_beguile_savage_beast", "prob": 75 }, - { "item": "spell_scroll_druid_renew_forest_spell", "prob": 50 } + { "item": "spell_scroll_druid_create_temporary_spring", "prob": 75 } ], "prob": 10 + }, + { + "distribution": [ + { "item": "spell_scroll_druid_renew_forest_spell", "prob": 50 }, + { "item": "spell_scroll_druid_turn_tree_into_treant", "prob": 25 } + ], + "prob": 5 } ] }, diff --git a/data/mods/Magiclysm/itemgroups/spellbooks.json b/data/mods/Magiclysm/itemgroups/spellbooks.json index 0248ee2ece3ae..a0fb44b83fa95 100644 --- a/data/mods/Magiclysm/itemgroups/spellbooks.json +++ b/data/mods/Magiclysm/itemgroups/spellbooks.json @@ -236,18 +236,23 @@ [ "spell_scroll_obfuscated_body", 10 ], [ "spell_scroll_shape_of_dust", 30 ], [ "spell_scroll_summon_eshaper_golem", 30 ], + [ "spell_scroll_earthshaper_diggable_teleport", 25 ], [ "spell_scroll_druidic_healing", 20 ], + [ "spell_scroll_druid_turn_tree_into_treant", 5 ], [ "spell_scroll_summon_magic_motorcycle", 5 ], [ "spell_scroll_animist_spirit_walking", 10 ], [ "spell_scroll_magus_haste", 50 ], [ "spell_scroll_magus_permanent_light", 30 ], + [ "spell_scroll_magus_cannot_move_attack_or_damage_target", 10 ], [ "bio_sneeze_beam", 50 ], [ "spell_scroll_druid_beguile_savage_beast", 10 ], [ "spell_scroll_druid_thornskin", 20 ], + [ "spell_scroll_druid_create_temporary_spring", 10 ], [ "spell_scroll_druid_renew_forest_spell", 5 ], [ "spell_scroll_kelvinist_no_emotion_spell", 5 ], [ "spell_scroll_banishment_lesser", 30 ], [ "spell_scroll_nova_flare", 25 ], + [ "spell_scroll_kelvinist_set_everyone_on_fire", 3 ], [ "spell_scroll_magus_diamond_imbuement", 10 ], [ "spell_scroll_freezing_touch", 40 ], [ "spell_scroll_focused_bolt", 4 ], diff --git a/data/mods/Magiclysm/items/spell_scrolls.json b/data/mods/Magiclysm/items/spell_scrolls.json index d0739d769ef90..1b70a63cac9ac 100644 --- a/data/mods/Magiclysm/items/spell_scrolls.json +++ b/data/mods/Magiclysm/items/spell_scrolls.json @@ -2139,5 +2139,50 @@ "name": { "str": "Scroll of Carmine Infusion", "str_pl": "Scrolls of Carmine Infusion" }, "description": "Using water as a medium, restore some of your lost blood. Be more careful where you put that blood next time.", "use_action": { "type": "learn_spell", "spells": [ "biomancer_get_more_blood" ] } + }, + { + "type": "BOOK", + "copy-from": "spell_scroll", + "id": "spell_scroll_druid_create_temporary_spring", + "//": "Druid spell", + "name": { "str": "Scroll of Fountain of the Depths", "str_pl": "Scrolls of Fountain of the Depths" }, + "description": "Call up the hidden waters from the depths of the earth to the surface. Less convenient than a faucet, but the plumbing has been off for a while.", + "use_action": { "type": "learn_spell", "spells": [ "druid_create_temporary_spring" ] } + }, + { + "type": "BOOK", + "copy-from": "spell_scroll", + "id": "spell_scroll_magus_cannot_move_attack_or_damage_target", + "//": "Magus spell", + "name": { "str": "Scroll of Adamantine Gaol", "str_pl": "Scrolls of Adamantine Gaol" }, + "description": "Imprison the target in an impenetrable shell of force.", + "use_action": { "type": "learn_spell", "spells": [ "magus_cannot_move_attack_or_damage_target" ] } + }, + { + "type": "BOOK", + "copy-from": "spell_scroll", + "id": "spell_scroll_earthshaper_diggable_teleport", + "//": "Earthshaper spell", + "name": { "str": "Scroll of Earth Gate", "str_pl": "Scrolls of Earth Gate" }, + "description": "Sink into the ground and re-emerge somewhere nearby. More likely to keep you in shape than the ability to teleport to the kitchen from your bedroom.", + "use_action": { "type": "learn_spell", "spells": [ "earthshaper_diggable_teleport" ] } + }, + { + "type": "BOOK", + "copy-from": "spell_scroll", + "id": "spell_scroll_druid_turn_tree_into_treant", + "//": "Druid spell", + "name": { "str": "Scroll of Awakening of the Forest Guardian", "str_pl": "Scrolls of Awakening of the Forest Guardian" }, + "description": "Give motion and awareness to a tree, allowing it to shake free of the soil and crush your enemies.", + "use_action": { "type": "learn_spell", "spells": [ "druid_turn_tree_into_treant" ] } + }, + { + "type": "BOOK", + "copy-from": "spell_scroll", + "id": "spell_scroll_kelvinist_set_everyone_on_fire", + "//": "Kelvinist spell", + "name": { "str": "Scroll of Flames of the Apocalypse", "str_pl": "Scrolls of Flames of the Apocalypse" }, + "description": "Call forth an inner fire from every enemy in the spell's radius, causing multiple explosions.", + "use_action": { "type": "learn_spell", "spells": [ "kelvinist_set_everyone_on_fire" ] } } ] diff --git a/data/mods/Magiclysm/jmath.json b/data/mods/Magiclysm/jmath.json index 881499ce8445d..87a018c277d66 100644 --- a/data/mods/Magiclysm/jmath.json +++ b/data/mods/Magiclysm/jmath.json @@ -29,6 +29,12 @@ "num_args": 0, "return": "1 + ( (u_proficiency('prof_magic_restoration_beginner', 'format': 'percent') / 1000) + (u_proficiency('prof_magic_restoration_apprentice', 'format': 'percent') / 1000) + (u_proficiency('prof_magic_restoration_master', 'format': 'percent') / 1000) )" }, + { + "type": "jmath_function", + "id": "conveyance_proficiency_modifier", + "num_args": 0, + "return": "1 + ( (u_proficiency('prof_magic_conveyance_beginner', 'format': 'percent') / 1000) + (u_proficiency('prof_magic_conveyance_apprentice', 'format': 'percent') / 1000) + (u_proficiency('prof_magic_conveyance_master', 'format': 'percent') / 1000) )" + }, { "type": "jmath_function", "id": "transformation_proficiency_modifier", diff --git a/data/mods/Magiclysm/monstergroups.json b/data/mods/Magiclysm/monstergroups.json index 084a5aea57d8c..e3753c866d32e 100644 --- a/data/mods/Magiclysm/monstergroups.json +++ b/data/mods/Magiclysm/monstergroups.json @@ -475,7 +475,8 @@ { "monster": "mon_mossling", "weight": 8, "cost_multiplier": 2, "pack_size": [ 3, 6 ] }, { "monster": "mon_dryad", "weight": 8, "cost_multiplier": 2 }, { "monster": "mon_dryad", "weight": 3, "cost_multiplier": 2, "pack_size": [ 2, 4 ] }, - { "monster": "mon_brackenwight", "weight": 5, "cost_multiplier": 5 } + { "monster": "mon_brackenwight", "weight": 5, "cost_multiplier": 5 }, + { "monster": "mon_treant", "weight": 2, "cost_multiplier": 10 } ] }, { diff --git a/data/mods/Magiclysm/monsters/nature_spirits.json b/data/mods/Magiclysm/monsters/nature_spirits.json index 4d1addd8f42a2..cc3795de076a0 100644 --- a/data/mods/Magiclysm/monsters/nature_spirits.json +++ b/data/mods/Magiclysm/monsters/nature_spirits.json @@ -115,6 +115,114 @@ "death_function": { "corpse_type": "NO_CORPSE", "message": "The %s collapses into a massive pile of leaves and sticks." }, "death_drops": "brackenwight_drops" }, + { + "id": "mon_treant", + "type": "MONSTER", + "name": "treant", + "description": "A walking tree, slowly moving on a tangle of roots like a land-bound octopus, with its branches swaying in the wind. There is the vague suggestion of a face in the whorls of its bark.", + "default_faction": "forest_spirit_faction", + "species": [ "FOREST_SPIRIT" ], + "volume": "999000 ml", + "weight": "1000 kg", + "bodytype": "human", + "hp": 480, + "speed": 50, + "symbol": "T", + "color": "brown", + "aggression": -10, + "morale": 200, + "aggro_character": false, + "melee_skill": 7, + "melee_dice": 3, + "melee_dice_sides": 12, + "dodge": 0, + "armor": { "bash": 45, "cut": 10, "stab": 25, "bullet": 100, "heat": -40 }, + "vision_day": 30, + "vision_night": 6, + "grab_strength": 80, + "material": [ "wood" ], + "//": "3 grabs due to dozens of roots useable as grabbing appendages.", + "special_attacks": [ + { "id": "smash", "move_cost": 100, "attack_upper": true, "throw_strength": 50, "cooldown": 15 }, + { + "id": "grab", + "move_cost": 150, + "hit_dmg_u": "%1$s entwines your %2$s with a thicket of roots!", + "hit_dmg_npc": "%1$s entwines 's %2$s in a thicket of roots!", + "miss_msg_u": "%s tries to grab you, but you dodge!", + "miss_msg_npc": "%s tries to grab , but they dodge!", + "no_dmg_msg_u": "%1$s grabs your %2$s!", + "no_dmg_msg_npc": "%1$s grabs 's %2$s!" + }, + { + "id": "grab_2", + "move_cost": 150, + "hit_dmg_u": "%1$s entwines your %2$s with a thicket of roots!", + "hit_dmg_npc": "%1$s entwines 's %2$s in a thicket of roots!", + "miss_msg_u": "%s tries to grab you, but you dodge!", + "miss_msg_npc": "%s tries to grab , but they dodge!", + "no_dmg_msg_u": "%1$s grabs your %2$s!", + "no_dmg_msg_npc": "%1$s grabs 's %2$s!" + }, + { + "id": "grab_3", + "move_cost": 150, + "hit_dmg_u": "%1$s entwines your %2$s with a thicket of roots!", + "hit_dmg_npc": "%1$s entwines 's %2$s in a thicket of roots!", + "miss_msg_u": "%s tries to grab you, but you dodge!", + "miss_msg_npc": "%s tries to grab , but they dodge!", + "no_dmg_msg_u": "%1$s grabs your %2$s!", + "no_dmg_msg_npc": "%1$s grabs 's %2$s!" + }, + { + "type": "monster_attack", + "attack_type": "melee", + "id": "crush", + "cooldown": 5, + "move_cost": 150, + "condition": { "u_has_flag": "GRAB_FILTER" }, + "damage_max_instance": [ { "damage_type": "bash", "amount": 30, "armor_penetration": 20 } ], + "hit_dmg_u": "%1$s squeezes your %2$s with its roots!", + "hit_dmg_npc": "%1$s squeezes with its roots!", + "no_dmg_msg_u": "%1$s squeezes your %2$s, but your armor protects you.", + "no_dmg_msg_npc": "%1$s squeezes , but their armor protects them.", + "dodgeable": false, + "blockable": false + }, + { + "id": "slam", + "cooldown": 4, + "move_cost": 150, + "damage_max_instance": [ { "damage_type": "bash", "amount": 30, "armor_multiplier": 0.3 } ], + "dodgeable": true, + "blockable": false, + "range": 3, + "effects": [ { "id": "downed", "duration": [ 2, 4 ] }, { "id": "stunned", "duration": [ 1, 2 ] } ], + "hit_dmg_u": "%1$s's massive branches slam into your %2$s!", + "hit_dmg_npc": "%1$s's massive branches slam into !", + "miss_msg_u": "%1$s tries to slam its branchesinto you, but you dodge!", + "miss_msg_npc": "%1$s tries to slam its branches into , but they dodge!", + "no_dmg_msg_u": "%1$s's branches bounces off your %2$s.", + "no_dmg_msg_npc": "%1$s tries to club with its branches, but it fails to penetrate their armor." + } + ], + "anger_triggers": [ "FRIEND_DIED", "FRIEND_ATTACKED", "HURT" ], + "fear_triggers": [ "FIRE" ], + "flags": [ "SEES", "HEARS", "BASHES", "DESTROYS", "GRABS", "ATTACKMON", "NO_BREATHE", "PUSH_MON", "PUSH_VEH", "PATH_AVOID_FIRE" ], + "death_function": { "eoc": "EOC_TREANT_DEATH", "corpse_type": "NO_CORPSE", "message": "The %s returns to immobility." } + }, + { + "id": "mon_treant_druid", + "copy-from": "mon_treant", + "type": "MONSTER", + "name": "treant", + "default_faction": "player" + }, + { + "type": "effect_on_condition", + "id": "EOC_TREANT_DEATH", + "effect": [ { "npc_transform_radius": 0, "ter_furn_transform": "ter_druid_tree_guardian_turn_back" } ] + }, { "id": "mon_earth_gnome", "type": "MONSTER", diff --git a/data/mods/Magiclysm/requirements/spell_components.json b/data/mods/Magiclysm/requirements/spell_components.json index b1f955c59089d..abc16156080d1 100644 --- a/data/mods/Magiclysm/requirements/spell_components.json +++ b/data/mods/Magiclysm/requirements/spell_components.json @@ -330,5 +330,11 @@ "type": "requirement", "//": "Water for the Carmine Infusion spell", "components": [ [ [ "salt_water", 1 ], [ "water_clean", 1 ] ] ] + }, + { + "id": "spell_components_kelvinist_set_everyone_on_fire", + "type": "requirement", + "//": "Ruby for the Flames of the Apocalypse spell. Add crimsonite once discrete chunks of it exist", + "components": [ [ [ "ruby", 1 ] ] ] } ] diff --git a/data/mods/Magiclysm/ter_fur_transform/ter_fur_transform.json b/data/mods/Magiclysm/ter_fur_transform/ter_fur_transform.json index 5abec770156e5..b05885513b3ee 100644 --- a/data/mods/Magiclysm/ter_fur_transform/ter_fur_transform.json +++ b/data/mods/Magiclysm/ter_fur_transform/ter_fur_transform.json @@ -628,5 +628,65 @@ "message": "The imperishable light winks out." } ] + }, + { + "type": "ter_furn_transform", + "id": "ter_druid_create_spring", + "terrain": [ + { "result": "t_water_moving_sh_druid", "valid_flags": [ "DIGGABLE" ], "message": "Water bubbles forth from the earth." } + ] + }, + { + "type": "ter_furn_transform", + "id": "ter_druid_remove_spring", + "terrain": [ { "result": "t_dirt", "valid_terrain": [ "t_water_moving_sh_druid" ], "message": "The flow of water subsides." } ] + }, + { + "type": "ter_furn_transform", + "id": "ter_druid_", + "terrain": [ + { "result": "t_water_moving_sh_druid", "valid_flags": [ "DIGGABLE" ], "message": "Water bubbles forth from the earth." } + ] + }, + { + "type": "ter_furn_transform", + "id": "ter_druid_tree_guardian_turn", + "terrain": [ { "result": "t_grass", "valid_flags": [ "TREE" ], "message": "The tree shakes free of the soil." } ] + }, + { + "type": "ter_furn_transform", + "id": "ter_druid_tree_guardian_turn_back", + "terrain": [ + { + "result": [ + [ "t_tree_birch", 32 ], + [ "t_tree_elm", 32 ], + [ "t_tree_cottonwood", 32 ], + [ "t_tree_basswood", 32 ], + [ "t_tree_alder", 32 ], + [ "t_tree_pine", 64 ], + [ "t_tree_maple", 64 ], + [ "t_tree_willow", 64 ], + [ "t_tree_hickory", 32 ], + [ "t_tree_walnut", 16 ], + [ "t_tree_tupelo", 16 ], + [ "t_tree_nannyberry", 16 ], + [ "t_tree_butternut", 4 ], + [ "t_tree_chestnut", 8 ], + [ "t_tree_hazelnut", 2 ], + [ "t_tree_beech", 4 ], + [ "t_tree_blackjack", 8 ], + [ "t_tree_apple", 2 ], + [ "t_tree_cherry", 2 ], + [ "t_tree_juniper", 2 ], + [ "t_tree_pear", 2 ], + [ "t_tree_plum", 2 ], + [ "t_tree_elderberry", 2 ], + [ "t_tree_mulberry", 2 ], + [ "t_tree_sassafras", 3 ] + ], + "valid_flags": [ "BURROWABLE", "DIGGABLE", "COLLAPSES", "DOOR", "FLAT_SURF", "FUNGUS", "PLANTABLE", "ROAD", "ROUGH", "SHALLOW_WATER" ] + } + ] } ]