diff options
Diffstat (limited to 'lib/mods/theme/scpt/gods_new.lua')
-rw-r--r-- | lib/mods/theme/scpt/gods_new.lua | 454 |
1 files changed, 454 insertions, 0 deletions
diff --git a/lib/mods/theme/scpt/gods_new.lua b/lib/mods/theme/scpt/gods_new.lua new file mode 100644 index 00000000..8153d453 --- /dev/null +++ b/lib/mods/theme/scpt/gods_new.lua @@ -0,0 +1,454 @@ +-- This file contains all the new gods + +add_loadsave("GRACE_DELAY",0) + +function aule_stone_skin() +local type + if player.grace >= 10000 then + type = SHIELD_COUNTER + else + type = 0 + end + + set_shield(randint(10) + 10 + (player.grace / 100), 10 + (player.grace / 100), type, 2 + (player.grace / 200), 3 + (player.grace / 400)) +end + +GOD_AULE = add_god +{ + ["name"] = "Aule the Smith", + ["desc"] = + { + "Aule is a smith, and the creator of the Dwarves." + }, + ["hooks"] = + { + [HOOK_CALC_BONUS] = function() + if (player.pgod == GOD_AULE) and (player.grace > 0) then + -- Resist fire, not shown on the character screen (?) + if (player.grace > 5000) then + player.resist_fire = TRUE + end + + local bonus = player.grace / 5000 + if bonus > 5 then + bonus = 5 + end + player.to_h = player.to_h + bonus + player.dis_to_h = player.dis_to_h + bonus + player.to_d = player.to_d + bonus + player.dis_to_d = player.dis_to_d + bonus + + end + end, + [HOOK_PROCESS_WORLD] = function() + if (player.pgod == GOD_AULE) then + GRACE_DELAY = GRACE_DELAY + 1 + if GRACE_DELAY >= 15 then + -- Aule likes Dwarves and Dark Elves (Eol's influence here) + if + (get_race_name() ~= "Dwarf") and + (get_race_name() ~= "Petty-dwarf") and + (get_race_name() ~= "Gnome") and + (get_race_name() ~= "Dark-Elf") then + set_grace(player.grace - 1) + end + + -- Search inventory for axe or hammer - Gain 1 point of grace for each hammer or axe + for i = 0, INVEN_TOTAL - 1 do + if ((player.inventory(i).tval) == TV_AXE) then + set_grace(player.grace + 1) + end + if ((player.inventory(i).tval) == TV_HAFTED) then + if (((player.inventory(i).sval) == SV_WAR_HAMMER) or ((player.inventory(i).sval) == SV_LUCERN_HAMMER) or ((player.inventory(i).sval) == SV_GREAT_HAMMER)) then + set_grace(player.grace + 1) + end + end + end + + if (player.praying == TRUE) then + set_grace(player.grace - 2) + + -- Chance of casting Stoneskin if praying + local chance + if (player.grace >= 50000) then + chance = 50000 + else + chance = 50000 - player.grace + end + + if (randint(100000) <= 100000 / chance) then + aule_stone_skin() + msg_print("Aule casts Stone Skin on you.") + end + + end + GRACE_DELAY = 0 + end + + end + end, + [HOOK_SACRIFICE_GOD] = function() + if (player.pgod == GOD_AULE) then + local ret, item, obj, value + ret, item = get_item( + "Sacrifice which item? ", + "You have nothing to sacrifice.", + USE_INVEN, + function(obj) + -- perhaps restrict this only to metal armour and weapons + if (obj.found == OBJ_FOUND_SELFMADE) then + return TRUE + end + return FALSE + end + ) + + -- Item selected + if ret == TRUE then + -- Increase piety by the value of the item / 10 + -- object_value is not available in Lua, therefore I used the + -- cost of the base item, without magical boni + obj = get_object(item) + -- value = object_value(obj)/10 + value = k_info[obj.k_idx + 1].cost/10 + + set_grace(player.grace + value) + + -- remove the object + inven_item_increase(item, -1) + inven_item_optimize(item) + end + end + end, + [HOOK_MONSTER_DEATH] = function(m_idx) + if (player.pgod == GOD_AULE) then + m_ptr = monster(m_idx) + if + (m_ptr.r_idx == test_monster_name("Petty-dwarf")) or + (m_ptr.r_idx == test_monster_name("Petty-dwarf mage")) or + (m_ptr.r_idx == test_monster_name("Dark dwarven warrior")) or + (m_ptr.r_idx == test_monster_name("Dark dwarven smith")) or + (m_ptr.r_idx == test_monster_name("Dark dwarven lord")) or + (m_ptr.r_idx == test_monster_name("Dark dwarven priest")) or + (m_ptr.r_idx == test_monster_name("Dwarven warrior")) then + -- Aule dislikes you killing dwarves + set_grace(player.grace - 20) + end + if + (m_ptr.r_idx == test_monster_name("Nar, the Dwarf")) or + (m_ptr.r_idx == test_monster_name("Naugladur, Lord of Nogrod")) or + (m_ptr.r_idx == test_monster_name("Telchar the Smith")) or + (m_ptr.r_idx == test_monster_name("Fundin Bluecloak")) or + (m_ptr.r_idx == test_monster_name("Khim, Son of Mim")) or + (m_ptr.r_idx == test_monster_name("Ibun, Son of Mim")) or + (m_ptr.r_idx == test_monster_name("Mim, Betrayer of Turin")) then + -- These uniques earn a bigger penalty + set_grace(player.grace - 500) + end + end + end, + } +} + +GOD_VARDA = add_god +{ + ["name"] = "Varda Elentari", + ["desc"] = + { + "The Queen of the Stars. In light is her power and joy." + }, + ["hooks"] = + { + [HOOK_PROCESS_WORLD] = function() + if (player.pgod == GOD_VARDA) then + GRACE_DELAY = GRACE_DELAY + 1 + + -- piety increase if in light + if (GRACE_DELAY >= 15) then + if band(cave(player.py, player.px).info, CAVE_GLOW) ~= 0 then + set_grace(player.grace + 2) + end + if ( + (get_race_name() == "Orc") or + (get_race_name() == "Troll") or + (get_race_name() == "Dragon") or + (get_race_name() == "Demon")) then + -- Varda hates evils + set_grace(player.grace - 2) + else + set_grace(player.grace - 1) + end + + if (player.praying == TRUE) then + set_grace(player.grace - 1) + end + GRACE_DELAY = 0 + end + end + end, + [HOOK_CALC_LITE] = function() + if (player.pgod == GOD_VARDA) then + -- increase lite radius + player.cur_lite = player.cur_lite + 1 + end + end, + [HOOK_GF_EXEC] = function (target, who, type, dam, r, y, x, m_ptr) + if (player.pgod == GOD_VARDA) then + if ((type == GF_LITE) or (type == GF_LITE_WEAK)) then + -- Raise piety for using lite + set_grace(player.grace + 1) + end + end + end, + }, +} + +GOD_ULMO = add_god +{ + ["name"] = "Ulmo", + ["desc"] = + { + "Ulmo is called Lord of Waters, he rules all that is water on Arda." + }, + ["hooks"] = + { + [HOOK_CALC_BONUS] = function() + if (player.pgod == GOD_ULMO) then + player.water_breath = TRUE + end + if (player.pgod == GOD_ULMO) and (player.grace > 0) then + local bonus = player.grace / 5000 + if bonus > 5 then + bonus = 5 + end + + if ((player.grace > 1000) and (player.praying == TRUE)) then + player.resist_pois = TRUE + end + if ((player.grace > 15000) and (player.praying == TRUE)) then + player.magic_breath = TRUE + end + end + end, + + [HOOK_MONSTER_DEATH] = function(m_idx) + if (player.pgod == GOD_ULMO) then + m_ptr = monster(m_idx) + if + (m_ptr.r_idx == test_monster_name("Swordfish")) or + (m_ptr.r_idx == test_monster_name("Barracuda")) or + (m_ptr.r_idx == test_monster_name("Globefish")) or + (m_ptr.r_idx == test_monster_name("Aquatic bear")) or + (m_ptr.r_idx == test_monster_name("Pike")) or + (m_ptr.r_idx == test_monster_name("Electric eel")) or + (m_ptr.r_idx == test_monster_name("Giant crayfish")) or + (m_ptr.r_idx == test_monster_name("Mermaid")) or + (m_ptr.r_idx == test_monster_name("Leviathan")) or + (m_ptr.r_idx == test_monster_name("Box jellyfish")) or + (m_ptr.r_idx == test_monster_name("Giant piranha")) or + (m_ptr.r_idx == test_monster_name("Piranha")) or + (m_ptr.r_idx == test_monster_name("Ocean naga")) or + (m_ptr.r_idx == test_monster_name("Whale")) or + (m_ptr.r_idx == test_monster_name("Octopus")) or + (m_ptr.r_idx == test_monster_name("Giant octopus")) or + (m_ptr.r_idx == test_monster_name("Drowned soul")) or + (m_ptr.r_idx == test_monster_name("Tiger shark")) or + (m_ptr.r_idx == test_monster_name("Hammerhead shark")) or + (m_ptr.r_idx == test_monster_name("Great white shark")) or + (m_ptr.r_idx == test_monster_name("White shark")) or + (m_ptr.r_idx == test_monster_name("Stargazer")) or + (m_ptr.r_idx == test_monster_name("Flounder")) or + (m_ptr.r_idx == test_monster_name("Giant turtle")) or + (m_ptr.r_idx == test_monster_name("Killer whale")) or + (m_ptr.r_idx == test_monster_name("Water naga")) or + (m_ptr.r_idx == test_monster_name("Behemoth")) then + -- He doesn't like it if you kill these monsters + set_grace(player.grace - 20) + end + if + (m_ptr.r_idx == test_monster_name("Seahorse")) or + (m_ptr.r_idx == test_monster_name("Aquatic elven warrior")) or + (m_ptr.r_idx == test_monster_name("Aquatic elven mage")) or + (m_ptr.r_idx == test_monster_name("Wavelord")) or + (m_ptr.r_idx == test_monster_name("The Watcher in the Water")) then + -- These monsters earn higher penalties + set_grace(player.grace - 500) + end + end + end, + [HOOK_GF_EXEC] = function (target, who, type, dam, r, y, x, m_ptr) + if (player.pgod == GOD_ULMO) then + if ((type == GF_FIRE) or (type == GF_HELL_FIRE) or (type == GF_HOLY_FIRE) or (type == GF_LAVA_FLOW) or (type == GF_METEOR) or (type == GF_NUKE) or (type == GF_PLASMA)) then + -- Reduce piety for using any kind of fire magic + set_grace(player.grace - 5) + end + end + end, + [HOOK_PROCESS_WORLD] = function() + if (player.pgod == GOD_ULMO) then + GRACE_DELAY = GRACE_DELAY + 1 + if GRACE_DELAY >= 15 then + -- Ulmo likes the Edain (except Easterlings) + if + (get_race_name() == "Human") or + (get_race_name() == "Dunadan") or + (get_race_name() == "Druadan") or + (get_race_name() == "RohanKnight") then + set_grace(player.grace + 1) + + elseif ( + (get_race_name() == "Easterling") or + (get_race_name() == "Demon") or + (get_race_name() == "Orc")) then + -- hated races + set_grace(player.grace - 2) + else + set_grace(player.grace + 1) + end + + if (player.praying == TRUE) then + set_grace(player.grace - 1) + end + -- Search inventory for axe or hammer - Gain 1 point of grace for each hammer or axe + for i = 0, INVEN_TOTAL - 1 do + if ((player.inventory(i).tval) == TV_POLEARM) then + if ((player.inventory(i).sval) == SV_TRIDENT) then + set_grace(player.grace + 1) + end + end + end + + GRACE_DELAY = 0 + end + + end + end, + }, +} + +GOD_MANDOS = add_god +{ + ["name"] = "Mandos", + ["desc"] = + { + "The Doomsman of the Valar and keeper of the slain." + }, + ["hooks"] = + { + [HOOK_CALC_BONUS] = function() + if (player.pgod == GOD_MANDOS) then + player.resist_neth = TRUE + end + if (player.pgod == GOD_MANDOS) and (player.grace > 0) then + local bonus = player.grace / 5000 + if bonus > 5 then + bonus = 5 + end + + if ((player.grace > 10000) and (player.praying == TRUE)) then + player.resist_continuum = TRUE + end + + if ((player.grace > 20000) and (player.praying == TRUE)) then + player.immune_neth = TRUE + end + end + end, + [HOOK_PROCESS_WORLD] = function() + if (player.pgod == GOD_MANDOS) then + GRACE_DELAY = GRACE_DELAY + 1 + if GRACE_DELAY >= 15 then + -- He loves astral beings + if (get_subrace_name() == "LostSoul") then + set_grace(player.grace + 1) + end + + -- He likes High Elves only, though, as races + if (get_race_name() ~= "High-Elf") then + set_grace(player.grace - 1) + end + end + -- piety increase if (condition) + if (GRACE_DELAY >= 15) then + if ( + (get_subrace_name() == "Vampire") or + (get_race_name() == "Demon")) then + -- hated races + set_grace(player.grace - 10) + else + set_grace(player.grace + 2) + end + -- he really doesn't like to be disturbed + if (player.praying == TRUE) then + set_grace(player.grace - 5) + end + GRACE_DELAY = 0 + end + + end + end, + [HOOK_MONSTER_DEATH] = function(m_idx) + if (player.pgod == GOD_MANDOS) then + m_ptr = monster(m_idx) + if + (m_ptr.r_idx == test_monster_name("Vampire")) or + (m_ptr.r_idx == test_monster_name("Master vampire")) or + (m_ptr.r_idx == test_monster_name("Oriental vampire")) or + (m_ptr.r_idx == test_monster_name("Vampire lord")) or + (m_ptr.r_idx == test_monster_name("Vampire orc")) or + (m_ptr.r_idx == test_monster_name("Vampire yeek")) or + (m_ptr.r_idx == test_monster_name("Vampire ogre")) or + (m_ptr.r_idx == test_monster_name("Vampire troll")) or + (m_ptr.r_idx == test_monster_name("Vampire dwarf")) or + (m_ptr.r_idx == test_monster_name("Vampire gnome")) or + (m_ptr.r_idx == test_monster_name("Elder vampire")) then + -- He really likes it if you kill Vampires (but not the adventurer kind :P) + set_grace(player.grace + 50) + end + + if + (m_ptr.r_idx == test_monster_name("Vampire elf")) or + (m_ptr.r_idx == test_monster_name("Thuringwethil, the Vampire Messenger")) then + -- He *loves* it if you kill vampire Elves + -- He will also thank you extra kindly if you kill Thuringwethil + set_grace(player.grace + 200) + end + + if + (m_ptr.r_idx == test_monster_name("Dark elf")) or + (m_ptr.r_idx == test_monster_name("Dark elven druid")) or + (m_ptr.r_idx == test_monster_name("Eol, the Dark Elf")) or + (m_ptr.r_idx == test_monster_name("Maeglin, the Traitor of Gondolin")) or + (m_ptr.r_idx == test_monster_name("Dark elven mage")) or + (m_ptr.r_idx == test_monster_name("Dark elven warrior")) or + (m_ptr.r_idx == test_monster_name("Dark elven priest")) or + (m_ptr.r_idx == test_monster_name("Dark elven lord")) or + (m_ptr.r_idx == test_monster_name("Dark elven warlock")) or + (m_ptr.r_idx == test_monster_name("Dark elven sorcerer")) then + -- He doesn't like it if you kill normal Elves (means more work for him :P) + set_grace(player.grace - 20) + end + if + (m_ptr.r_idx == test_monster_name("Glorfindel of Rivendell")) or + (m_ptr.r_idx == test_monster_name("Finrod Felagund")) or + (m_ptr.r_idx == test_monster_name("Thranduil, King of the Wood Elves")) or + (m_ptr.r_idx == test_monster_name("Aquatic elven warrior")) or + (m_ptr.r_idx == test_monster_name("Aquatic elven mage")) or + (m_ptr.r_idx == test_monster_name("High-elven ranger")) or + (m_ptr.r_idx == test_monster_name("Elven archer")) then + -- He hates it if you kill coaligned Elves + set_grace(player.grace - 200) + end + if + (m_ptr.r_idx == test_monster_name("Child spirit")) or + (m_ptr.r_idx == test_monster_name("Young spirit")) or + (m_ptr.r_idx == test_monster_name("Mature spirit")) or + (m_ptr.r_idx == test_monster_name("Experienced spirit")) or + (m_ptr.r_idx == test_monster_name("Wise spirit")) then + -- He *hates* it if you kill the coaligned Spirits + set_grace(player.grace - 1000) + end + end + end + } +} |