summaryrefslogtreecommitdiff
path: root/lib/mods/theme/scpt/s_mandos.lua
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2012-03-04 15:53:46 +0100
committerBardur Arantsson <bardur@scientician.net>2012-03-29 19:59:21 +0200
commita1ebb9363e31ad449377a5794f1bf93d84e25bc8 (patch)
tree3722b20555e47d8c20283b75bfc37b9eb7ba767f /lib/mods/theme/scpt/s_mandos.lua
parent6be64d33039bf2ece3f50b3162b2da7f74ce2e4a (diff)
Import Theme repository into main repository
Diffstat (limited to 'lib/mods/theme/scpt/s_mandos.lua')
-rw-r--r--lib/mods/theme/scpt/s_mandos.lua186
1 files changed, 186 insertions, 0 deletions
diff --git a/lib/mods/theme/scpt/s_mandos.lua b/lib/mods/theme/scpt/s_mandos.lua
new file mode 100644
index 00000000..cc7e346a
--- /dev/null
+++ b/lib/mods/theme/scpt/s_mandos.lua
@@ -0,0 +1,186 @@
+-- Spells for the school of Mandos
+
+BOOK_MANDOS = 66
+
+-- precognition timer for high-level spell [from T-Plus by Ingeborg S. Norden]
+
+add_loadsave("tim_precognition",0)
+
+function set_precognition(v)
+ local notice = FALSE
+ if (v < 0) then v = 0 end
+ if (v > 10000) then v = 10000 end
+
+ -- Check if the state will change
+ if (v > 0) and (tim_precognition == 0) then
+ msg_print("You feel able to predict the future.")
+ notice = TRUE
+ elseif (v == 0) and (tim_precognition > 0) then
+ msg_print("You feel less able to predict the future.")
+ notice = TRUE
+ end
+
+ -- set the new value
+ tim_precognition = v
+
+ if (notice == TRUE) then
+ player.update = bor(player.update, PU_BONUS)
+ disturb(0,0)
+ end
+ return notice
+end
+
+-- related hooks
+
+add_hooks{
+ [HOOK_CALC_BONUS] = function()
+ if (tim_precognition > 0) then
+ --player.precognition = TRUE
+ apply_flags(0, 0, 0, TR4_PRECOGNITION, 0, 0, 0, 0, 0, 0, 0)
+ end
+ end,
+
+ [HOOK_PROCESS_WORLD] = function()
+ if (tim_precognition > 0) then
+ set_precognition(tim_precognition - 1)
+ end
+ end,
+}
+
+-- "Tears of Luthien" based on Holy Word from T-Plus
+MANDOS_TEARS_LUTHIEN = add_spell
+{
+ ["name"] = "Tears of Luthien",
+ ["school"] = {SCHOOL_MANDOS},
+ ["level"] = 5,
+ ["mana"] = 10,
+ ["mana_max"] = 100,
+ ["fail"] = 25,
+ ["piety"] = TRUE,
+ ["stat"] = A_WIS,
+ ["random"] = SKILL_SPIRITUALITY,
+ ["spell"] = function()
+ local level = get_level(MANDOS_TEARS_LUTHIEN, 30)
+ local obvious = hp_player(10 * level)
+ obvious = is_obvious (set_stun(0), obvious)
+ obvious = is_obvious (set_cut(0), obvious)
+ obvious = is_obvious (set_afraid(0), obvious)
+ return obvious
+ end,
+ ["info"] = function()
+ local level = get_level(MANDOS_TEARS_LUTHIEN, 30)
+ return "heals "..(10 * level)
+ end,
+ ["desc"] = {
+ "Calls upon the spirit of Luthien to ask Mandos for healing and succour."
+ }
+}
+
+-- "Spirit of the Feanturi" based on Restore Mind from T-Plus
+MANDOS_SPIRIT_FEANTURI = add_spell {
+ ["name"] = "Feanturi",
+ ["school"] = {SCHOOL_MANDOS},
+ ["level"] = 10,
+ ["mana"] = 40,
+ ["mana_max"] = 200,
+ ["fail"] = 50,
+ -- Uses piety to cast
+ ["piety"] = TRUE,
+ ["stat"] = A_WIS,
+ ["random"] = SKILL_SPIRITUALITY,
+ ["spell"] = function()
+ local level = get_level(MANDOS_SPIRIT_FEANTURI, 50)
+ local obvious
+ obvious = set_afraid(0)
+ obvious = is_obvious(set_confused(0), obvious)
+
+ if level >= 20 then
+ obvious = is_obvious(do_res_stat(A_WIS, TRUE), obvious)
+ obvious = is_obvious(do_res_stat(A_INT, TRUE), obvious)
+ end
+
+ if level >= 30 then
+ obvious = is_obvious(set_image(0), obvious)
+ obvious = is_obvious(heal_insanity(player.msane * level / 100), obvious)
+ end
+
+ return obvious
+ end,
+
+ ["info"] = function()
+ local level = get_level(MANDOS_SPIRIT_FEANTURI, 50)
+ if level >= 20 then
+ return "heals "..level.."%"
+ else
+ return ""
+ end
+ end,
+ ["desc"] = {
+ "Channels the power of Mandos to cure fear and confusion.",
+ "At level 20 it restores lost INT and WIS",
+ "At level 30 it cures hallucinations and restores a percentage of lost sanity"
+ }
+}
+
+-- "Tale of Doom" based on Foretell from T-Plus
+MANDOS_TALE_DOOM = add_spell
+{
+ ["name"] = "Tale of Doom",
+ ["school"] = {SCHOOL_MANDOS},
+ ["level"] = 25,
+ ["mana"] = 60,
+ ["mana_max"] = 300,
+ ["stat"] = A_WIS,
+ ["fail"] = 75,
+ -- Uses piety to cast
+ ["piety"] = TRUE,
+ ["stat"] = A_WIS,
+ ["random"] = SKILL_SPIRITUALITY,
+ ["spell"] = function()
+ return set_precognition(5 + get_level(MANDOS_TALE_DOOM,10))
+ end,
+ ["info"] = function()
+ return "dur "..(5 + get_level(MANDOS_TALE_DOOM,10))
+ end,
+ ["desc"] = {
+ "Allows you to predict the future for a short time."
+ }
+}
+
+-- "Call to the Halls" based on Call Blessed Soul from T-Plus
+MANDOS_CALL_HALLS= add_spell
+
+{
+ ["name"] = "Call to the Halls",
+ ["school"] = {SCHOOL_MANDOS},
+ ["level"] = 30,
+ ["mana"] = 80,
+ ["mana_max"] = 400,
+ ["fail"] = 95,
+ ["piety"] = TRUE,
+ ["stat"] = A_WIS,
+ ["random"] = SKILL_SPIRITUALITY,
+ ["spell"] = function()
+ local y, x, m_idx
+ local summons =
+ {
+ test_monster_name("Experienced spirit"),
+ test_monster_name("Wise spirit"),
+ }
+ y, x = find_position(player.py, player.px)
+ m_idx = place_monster_one(y, x, summons[rand_range(1, 2)], 0, FALSE, MSTATUS_FRIEND)
+ if m_idx ~= 0 then
+ monster_set_level(m_idx, 20 + get_level(MANDOS_CALL_HALLS, 70, 0))
+ return TRUE
+ end
+ end,
+
+ ["info"] = function()
+ return "level "..(get_level(MANDOS_CALL_HALLS, 70))
+ end,
+ ["desc"] = {
+ "Summons a leveled spirit from the Halls of Mandos",
+ "to fight for you."
+
+ }
+} \ No newline at end of file