diff options
Diffstat (limited to 'lib/mods/theme/scpt/s_mana.lua')
-rw-r--r-- | lib/mods/theme/scpt/s_mana.lua | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/lib/mods/theme/scpt/s_mana.lua b/lib/mods/theme/scpt/s_mana.lua new file mode 100644 index 00000000..736b06b0 --- /dev/null +++ b/lib/mods/theme/scpt/s_mana.lua @@ -0,0 +1,132 @@ +-- The mana school + +function get_manathrust_dam() + return 3 + get_level(MANATHRUST, 50), 1 + get_level(MANATHRUST, 20) +end + +MANATHRUST = add_spell +{ + ["name"] = "Manathrust", + ["school"] = SCHOOL_MANA, + ["level"] = 1, + ["mana"] = 1, + ["mana_max"] = 25, + ["fail"] = 10, + ["stick"] = + { + ["charge"] = { 7, 10 }, + [TV_WAND] = + { + ["rarity"] = 5, + ["base_level"] = { 1, 20 }, + ["max_level"] = { 15, 33 }, + }, + }, + ["spell"] = function() + local ret, dir + + ret, dir = get_aim_dir() + if ret == FALSE then return end + return fire_bolt(GF_MANA, dir, damroll(get_manathrust_dam())) + end, + ["info"] = function() + local x, y + + x, y = get_manathrust_dam() + return "dam "..x.."d"..y + end, + ["desc"] = { + "Conjures up mana into a powerful bolt", + "The damage is irresistible and will increase with level" + } +} + +DELCURSES = add_spell +{ + ["name"] = "Remove Curses", + ["school"] = SCHOOL_MANA, + ["level"] = 10, + ["mana"] = 20, + ["mana_max"] = 40, + ["fail"] = 30, + ["stick"] = + { + ["charge"] = { 3, 8 }, + [TV_STAFF] = + { + ["rarity"] = 70, + ["base_level"] = { 1, 5 }, + ["max_level"] = { 15, 50 }, + }, + }, + ["inertia"] = { 1, 10 }, + ["spell"] = function() + local done + + if get_level(DELCURSES, 50) >= 20 then done = remove_all_curse() + else done = remove_curse() end + if done == TRUE then msg_print("The curse is broken!") end + return done + end, + ["info"] = function() + return "" + end, + ["desc"] = { + "Remove curses of worn objects", + "At level 20 switches to *remove curses*" + } +} + +RESISTS = add_spell +{ + ["name"] = "Elemental Shield", + ["school"] = SCHOOL_MANA, + ["level"] = 20, + ["mana"] = 17, + ["mana_max"] = 20, + ["fail"] = 40, + ["inertia"] = { 2, 25 }, + ["spell"] = function() + local obvious + if player.oppose_fire == 0 then obvious = set_oppose_fire(randint(10) + 15 + get_level(RESISTS, 50)) end + if player.oppose_cold == 0 then obvious = is_obvious(set_oppose_cold(randint(10) + 15 + get_level(RESISTS, 50)), obvious) end + if player.oppose_elec == 0 then obvious = is_obvious(set_oppose_elec(randint(10) + 15 + get_level(RESISTS, 50)), obvious) end + if player.oppose_acid == 0 then obvious = is_obvious(set_oppose_acid(randint(10) + 15 + get_level(RESISTS, 50)), obvious) end + return obvious + end, + ["info"] = function() + return "dur "..(15 + get_level(RESISTS, 50)).."+d10" + end, + ["desc"] = { + "Provide resistances to the four basic elements", + } +} + +MANASHIELD = add_spell +{ + ["name"] = "Disruption Shield", + ["school"] = SCHOOL_MANA, + ["level"] = 45, + ["mana"] = 50, + ["mana_max"] = 50, + ["fail"] = 90, + ["inertia"] = { 9, 10}, + ["spell"] = function() + if get_level(MANASHIELD, 50) >= 5 then + if (player.invuln == 0) then + return set_invuln(randint(5) + 3 + get_level(MANASHIELD, 10)) + end + else + if (player.disrupt_shield == 0) then return set_disrupt_shield(randint(5) + 3 + get_level(MANASHIELD, 10)) end + end + end, + ["info"] = function() + return "dur "..(3 + get_level(MANASHIELD, 10)).."+d5" + end, + ["desc"] = { + "Uses mana instead of hp to take damage", + "At level 5 switches to Globe of Invulnerability.", + "The spell breaks as soon as a melee, shooting, throwing or magical", + "skill action is attempted, and lasts only a short time." + } +} |