diff options
Diffstat (limited to 'lib/mods/theme/scpt/s_udun.lua')
-rw-r--r-- | lib/mods/theme/scpt/s_udun.lua | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/lib/mods/theme/scpt/s_udun.lua b/lib/mods/theme/scpt/s_udun.lua new file mode 100644 index 00000000..c4266239 --- /dev/null +++ b/lib/mods/theme/scpt/s_udun.lua @@ -0,0 +1,180 @@ +-- handle the udun school + +DRAIN = add_spell +{ + ["name"] = "Drain", + ["school"] = {SCHOOL_UDUN, SCHOOL_MANA}, + ["level"] = 1, + ["mana"] = 0, + ["mana_max"] = 0, + ["fail"] = 20, + ["spell"] = function() + local ret, item, obj, o_name, add + + -- Ask for an item + ret, item = get_item("What item to drain?", "You have nothing you can drain", USE_INVEN, + function (obj) + if (obj.tval == TV_WAND) or (obj.tval == TV_ROD_MAIN) or (obj.tval == TV_STAFF) then + return TRUE + end + return FALSE + end + ) + + if ret == TRUE then + -- get the item + obj = get_object(item) + + add = 0 + if (obj.tval == TV_STAFF) or (obj.tval == TV_WAND) then + local kind = get_kind(obj) + + add = kind.level * obj.pval * obj.number + + -- Destroy it! + inven_item_increase(item, -99) + inven_item_describe(item) + inven_item_optimize(item) + end + if obj.tval == TV_ROD_MAIN then + add = obj.timeout + obj.timeout = 0; + + --Combine / Reorder the pack (later) + player.notice = bor(player.notice, PN_COMBINE, PN_REORDER) + player.window = bor(player.window, PW_INVEN, PW_EQUIP, PW_PLAYER) + end + increase_mana(add) + end + return TRUE + end, + ["info"] = function() + return "" + end, + ["desc"] = { + "Drains the mana contained in wands, staves and rods to increase yours", + } +} + +GENOCIDE = add_spell +{ + ["name"] = "Genocide", + ["school"] = {SCHOOL_UDUN, SCHOOL_NATURE}, + ["level"] = 25, + ["mana"] = 50, + ["mana_max"] = 50, + ["fail"] = 90, + ["stick"] = + { + ["charge"] = { 2, 2 }, + [TV_STAFF] = + { + ["rarity"] = 85, + ["base_level"] = { 1, 1 }, + ["max_level"] = { 5, 15 }, + }, + }, + ["spell"] = function() + local type + + type = 0 + if get_level(GENOCIDE) >= 10 then type = 1 end + if type == 0 then + genocide(TRUE) + return TRUE + else + if get_check("Genocide all monsters near you? ") == TRUE then + mass_genocide(TRUE) + else + genocide(TRUE) + end + return TRUE + end + end, + ["info"] = function() + return "" + end, + ["desc"] = { + "Genocides all monsters of a race on the level", + "At level 10 it can genocide all monsters near you" + } +} + +WRAITHFORM = add_spell +{ + ["name"] = "Wraithform", + ["school"] = {SCHOOL_UDUN, SCHOOL_CONVEYANCE}, + ["level"] = 30, + ["mana"] = 20, + ["mana_max"] = 40, + ["fail"] = 95, + ["inertia"] = { 4, 30 }, + ["spell"] = function() + return set_shadow(randint(30) + 20 + get_level(WRAITHFORM, 40)) + end, + ["info"] = function() + return "dur "..(20 + get_level(WRAITHFORM, 40)).."+d30" + end, + ["desc"] = { + "Turns you into an immaterial being", + } +} + +FLAMEOFUDUN = add_spell +{ + ["name"] = "Flame of Udun", + ["school"] = {SCHOOL_UDUN, SCHOOL_FIRE}, + ["level"] = 35, + ["mana"] = 70, + ["mana_max"] = 100, + ["fail"] = 95, + ["inertia"] = { 7, 15 }, + ["spell"] = function() + return set_mimic(randint(15) + 5 + get_level(FLAMEOFUDUN, 30), resolve_mimic_name("Balrog"), get_level(FLAMEOFUDUN)) + end, + ["info"] = function() + return "dur "..(5 + get_level(FLAMEOFUDUN, 30)).."+d15" + end, + ["desc"] = { + "Turns you into a powerful Balrog", + } +} + + +-- Return the number of Udun/Melkor spells in a given book +function udun_in_book(sval, pval) + local i, y, index, sch, s + + i = 0 + + -- Hack if the book is 255 it is a random book + if sval == 255 then + school_book[sval] = {pval} + end + -- Parse all spells + for index, s in school_book[sval] do + for index, sch in __spell_school[s] do + if sch == SCHOOL_UDUN then i = i + 1 end + if sch == SCHOOL_MELKOR then i = i + 1 end + end + end + return i +end + +-- Return the total level of spells +function levels_in_book(sval, pval) + local i, y, index, sch, s + + i = 0 + + -- Hack if the book is 255 it is a random book + if sval == 255 then + school_book[sval] = {pval} + end + + -- Parse all spells + for index, s in school_book[sval] do + i = i + __tmp_spells[s].level + end + return i +end |