From 794569cd348ee1479f9a5eb2f0e89dd2267cc24b Mon Sep 17 00:00:00 2001 From: "Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm" Date: Sat, 14 Dec 2024 20:34:12 -0600 Subject: [PATCH 1/7] Initial commit --- data/mods/Magiclysm/Spells/druid.json | 111 ++++++++++++++++++ data/mods/Magiclysm/Spells/earthshaper.json | 50 ++++++++ data/mods/Magiclysm/Spells/magus.json | 24 ++++ data/mods/Magiclysm/effects/effects.json | 10 ++ .../furniture_and_terrain/terrain_druid.json | 16 +++ .../mods/Magiclysm/itemgroups/itemgroups.json | 20 +++- .../mods/Magiclysm/itemgroups/spellbooks.json | 4 + data/mods/Magiclysm/items/spell_scrolls.json | 36 ++++++ data/mods/Magiclysm/jmath.json | 6 + data/mods/Magiclysm/monstergroups.json | 3 +- .../Magiclysm/monsters/nature_spirits.json | 61 ++++++++++ .../ter_fur_transform/ter_fur_transform.json | 60 ++++++++++ 12 files changed, 397 insertions(+), 4 deletions(-) diff --git a/data/mods/Magiclysm/Spells/druid.json b/data/mods/Magiclysm/Spells/druid.json index a72c51965136c..8baf5c2766ae6 100644 --- a/data/mods/Magiclysm/Spells/druid.json +++ b/data/mods/Magiclysm/Spells/druid.json @@ -1403,5 +1403,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": 10, + "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": 1250, + "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 c92b7af101302..1463b13fe5812 100644 --- a/data/mods/Magiclysm/Spells/earthshaper.json +++ b/data/mods/Magiclysm/Spells/earthshaper.json @@ -1292,5 +1292,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/magus.json b/data/mods/Magiclysm/Spells/magus.json index 9a45efd2b4957..11de59b391f12 100644 --- a/data/mods/Magiclysm/Spells/magus.json +++ b/data/mods/Magiclysm/Spells/magus.json @@ -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": [ "ENERVATION_SPELL", "VERBAL", "SOMATIC" ], + "extra_effects": [ { "id": "eoc_enervation_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": 1200, + "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 5d6022b3f4862..9db12a7381cc1 100644 --- a/data/mods/Magiclysm/effects/effects.json +++ b/data/mods/Magiclysm/effects/effects.json @@ -1400,6 +1400,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 b3dcc27b7733f..206697da2516f 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..aab6d11699a92 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 + } ] }, { @@ -1442,7 +1448,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 +1553,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..8129dc5fec5ca 100644 --- a/data/mods/Magiclysm/itemgroups/spellbooks.json +++ b/data/mods/Magiclysm/itemgroups/spellbooks.json @@ -236,14 +236,18 @@ [ "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 ], diff --git a/data/mods/Magiclysm/items/spell_scrolls.json b/data/mods/Magiclysm/items/spell_scrolls.json index d0739d769ef90..e7c4957094367 100644 --- a/data/mods/Magiclysm/items/spell_scrolls.json +++ b/data/mods/Magiclysm/items/spell_scrolls.json @@ -2139,5 +2139,41 @@ "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" ] } } ] 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 75476341f4777..93eaaf4a3da83 100644 --- a/data/mods/Magiclysm/monstergroups.json +++ b/data/mods/Magiclysm/monstergroups.json @@ -461,7 +461,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..a4f59d1b4ef9c 100644 --- a/data/mods/Magiclysm/monsters/nature_spirits.json +++ b/data/mods/Magiclysm/monsters/nature_spirits.json @@ -115,6 +115,67 @@ "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": 35, + "vision_night": 6, + "material": [ "wood" ], + "special_attacks": [ + { "id": "smash", "move_cost": 100, "attack_upper": true, "throw_strength": 50, "cooldown": 15 }, + { + "id": "slam", + "cooldown": 4, + "move_cost": 150, + "damage_max_instance": [ { "damage_type": "bash", "amount": 35, "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", "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/ter_fur_transform/ter_fur_transform.json b/data/mods/Magiclysm/ter_fur_transform/ter_fur_transform.json index ae71a1a4dadb0..397d4fa51045b 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" ] + } + ] } ] From 3d3b800a865a106da0731b933989cc78b797fcc0 Mon Sep 17 00:00:00 2001 From: "Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm" Date: Sat, 14 Dec 2024 20:41:41 -0600 Subject: [PATCH 2/7] Tweaks --- data/mods/Magiclysm/Spells/magus.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/mods/Magiclysm/Spells/magus.json b/data/mods/Magiclysm/Spells/magus.json index 11de59b391f12..7fbfe9306e359 100644 --- a/data/mods/Magiclysm/Spells/magus.json +++ b/data/mods/Magiclysm/Spells/magus.json @@ -811,8 +811,8 @@ "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": [ "ENERVATION_SPELL", "VERBAL", "SOMATIC" ], - "extra_effects": [ { "id": "eoc_enervation_setup", "hit_self": true } ], + "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", @@ -820,7 +820,7 @@ "energy_source": "MANA", "difficulty": 10, "base_casting_time": 75, - "base_energy_cost": 1200, + "base_energy_cost": 750, "max_level": 20, "min_range": 5, "max_range": 30, From 6b79985cfb65fc0cfda04a9f88b01092f52a65b7 Mon Sep 17 00:00:00 2001 From: "Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm" Date: Sat, 14 Dec 2024 20:50:03 -0600 Subject: [PATCH 3/7] Treant grabbing --- data/mods/Magiclysm/Spells/magus.json | 2 +- .../Magiclysm/monsters/nature_spirits.json | 53 +++++++++++++++++-- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/data/mods/Magiclysm/Spells/magus.json b/data/mods/Magiclysm/Spells/magus.json index 7fbfe9306e359..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", diff --git a/data/mods/Magiclysm/monsters/nature_spirits.json b/data/mods/Magiclysm/monsters/nature_spirits.json index a4f59d1b4ef9c..cc3795de076a0 100644 --- a/data/mods/Magiclysm/monsters/nature_spirits.json +++ b/data/mods/Magiclysm/monsters/nature_spirits.json @@ -137,16 +137,63 @@ "melee_dice_sides": 12, "dodge": 0, "armor": { "bash": 45, "cut": 10, "stab": 25, "bullet": 100, "heat": -40 }, - "vision_day": 35, + "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": 35, "armor_multiplier": 0.3 } ], + "damage_max_instance": [ { "damage_type": "bash", "amount": 30, "armor_multiplier": 0.3 } ], "dodgeable": true, "blockable": false, "range": 3, @@ -161,7 +208,7 @@ ], "anger_triggers": [ "FRIEND_DIED", "FRIEND_ATTACKED", "HURT" ], "fear_triggers": [ "FIRE" ], - "flags": [ "SEES", "HEARS", "BASHES", "DESTROYS", "ATTACKMON", "NO_BREATHE", "PUSH_MON", "PUSH_VEH", "PATH_AVOID_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." } }, { From bdc7d8a32a5e7a9830b66ce3ec141db6a44465b3 Mon Sep 17 00:00:00 2001 From: "Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm" Date: Sun, 15 Dec 2024 14:33:39 -0600 Subject: [PATCH 4/7] Change mana cost --- data/mods/Magiclysm/Spells/druid.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/mods/Magiclysm/Spells/druid.json b/data/mods/Magiclysm/Spells/druid.json index 8baf5c2766ae6..0c5a3c78b421f 100644 --- a/data/mods/Magiclysm/Spells/druid.json +++ b/data/mods/Magiclysm/Spells/druid.json @@ -1476,7 +1476,7 @@ "duration_increment": 7000, "energy_source": "MANA", "base_casting_time": 500, - "base_energy_cost": 1250, + "base_energy_cost": 850, "extra_effects": [ { "id": "eoc_transformation_setup", "hit_self": true } ] }, { From 8abd21f75d3c0afef5d5c68706390b64e9da1520 Mon Sep 17 00:00:00 2001 From: "Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm" Date: Mon, 16 Dec 2024 14:21:27 -0600 Subject: [PATCH 5/7] Raise Awakening of the Forest Guardian Difficulty --- data/mods/Magiclysm/Spells/druid.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/mods/Magiclysm/Spells/druid.json b/data/mods/Magiclysm/Spells/druid.json index 0c5a3c78b421f..b82277fc36bff 100644 --- a/data/mods/Magiclysm/Spells/druid.json +++ b/data/mods/Magiclysm/Spells/druid.json @@ -1466,7 +1466,7 @@ "flags": [ "TRANSFORMATION_SPELL", "CONCENTRATE", "SILENT", "VERBAL" ], "valid_targets": [ "self" ], "spell_class": "DRUID", - "difficulty": 10, + "difficulty": 12, "max_level": 20, "effect": "effect_on_condition", "effect_str": "EOC_DRUID_TREE_AWAKENING", From dad688dbe99556619261d83311d77770067e3111 Mon Sep 17 00:00:00 2001 From: "Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm" Date: Mon, 16 Dec 2024 15:10:42 -0600 Subject: [PATCH 6/7] Add Flames of the Apocalypse --- data/mods/Magiclysm/Spells/kelvinist.json | 63 +++++++++++++++++++ .../mods/Magiclysm/itemgroups/itemgroups.json | 3 +- .../mods/Magiclysm/itemgroups/spellbooks.json | 1 + data/mods/Magiclysm/items/spell_scrolls.json | 9 +++ .../requirements/spell_components.json | 6 ++ 5 files changed, 81 insertions(+), 1 deletion(-) diff --git a/data/mods/Magiclysm/Spells/kelvinist.json b/data/mods/Magiclysm/Spells/kelvinist.json index 04b3f6df0b6af..f50808b63543f 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", "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/itemgroups/itemgroups.json b/data/mods/Magiclysm/itemgroups/itemgroups.json index aab6d11699a92..5d46f0cf4c030 100644 --- a/data/mods/Magiclysm/itemgroups/itemgroups.json +++ b/data/mods/Magiclysm/itemgroups/itemgroups.json @@ -1351,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 } diff --git a/data/mods/Magiclysm/itemgroups/spellbooks.json b/data/mods/Magiclysm/itemgroups/spellbooks.json index 8129dc5fec5ca..a0fb44b83fa95 100644 --- a/data/mods/Magiclysm/itemgroups/spellbooks.json +++ b/data/mods/Magiclysm/itemgroups/spellbooks.json @@ -252,6 +252,7 @@ [ "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 e7c4957094367..1b70a63cac9ac 100644 --- a/data/mods/Magiclysm/items/spell_scrolls.json +++ b/data/mods/Magiclysm/items/spell_scrolls.json @@ -2175,5 +2175,14 @@ "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/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 ] ] ] } ] From 2c44b19f362315782a2d81f14a194018fda98790 Mon Sep 17 00:00:00 2001 From: "Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm" Date: Mon, 16 Dec 2024 16:47:30 -0600 Subject: [PATCH 7/7] Add missing RANDOM_DAMAGE to Flames of the Apocalypse --- data/mods/Magiclysm/Spells/kelvinist.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/mods/Magiclysm/Spells/kelvinist.json b/data/mods/Magiclysm/Spells/kelvinist.json index f50808b63543f..5cd1aa8240ab8 100644 --- a/data/mods/Magiclysm/Spells/kelvinist.json +++ b/data/mods/Magiclysm/Spells/kelvinist.json @@ -819,7 +819,7 @@ "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", "CONCENTRATE", "VERBAL", "SOMATIC", "SPLIT_DAMAGE" ], + "flags": [ "EVOCATION_SPELL", "RANDOM_DAMAGE", "CONCENTRATE", "VERBAL", "SOMATIC", "SPLIT_DAMAGE" ], "effect": "attack", "effect_str": "onfire", "shape": "blast",