diff --git a/game/modules/tome/data/general/objects/staves.lua b/game/modules/tome/data/general/objects/staves.lua index 65eba5c8fdf563c55ff4b5cf0ef3da745490f357..4047bf2bca621a8c535759a45b04c2e7d08a0548 100644 --- a/game/modules/tome/data/general/objects/staves.lua +++ b/game/modules/tome/data/general/objects/staves.lua @@ -22,6 +22,7 @@ newEntity{ slot = "MAINHAND", slot_forbid = "OFFHAND", type = "weapon", subtype="staff", + twohanded = true, add_name = " (#COMBAT_DAMTYPE#)", display = "\\", color=colors.LIGHT_RED, image = resolvers.image_material("staff", "wood"), encumber = 5, diff --git a/game/modules/tome/data/quests/east-portal.lua b/game/modules/tome/data/quests/east-portal.lua index 88e36c1a1a241000525e6497ce57578c137976a8..7c90b9f1cead2ffaeb1a3b5548b0a12729276da5 100644 --- a/game/modules/tome/data/quests/east-portal.lua +++ b/game/modules/tome/data/quests/east-portal.lua @@ -112,7 +112,7 @@ remove_materials = function(self, player) end open_orthanc = function(self, player) - self:removeMaterials(player) + self:remove_materials(player) -- Reveal entrances local g = mod.class.Grid.new{ @@ -131,7 +131,7 @@ open_orthanc = function(self, player) end ask_east = function(self, player) - self:removeMaterials(player) + self:remove_materials(player) -- Swap the orbs! Tricky bastard! local orb_o, orb_item, orb_inven_id = player:findInAllInventories("Orb of Many Ways") @@ -146,6 +146,6 @@ ask_east = function(self, player) end tannen_tower = function(self, player) - game:changeLevel(1, "tannen-tower") + game:changeLevel(4, "tannen-tower") player:setQuestStatus(self.id, engine.Quest.COMPLETED, "trapped") end diff --git a/game/modules/tome/data/talents/misc/misc.lua b/game/modules/tome/data/talents/misc/misc.lua index e93b03542922fd7669354af738bf37d370c429fd..cfebd0fb75bbc6ec6969b70774f6dc6843dae5fd 100644 --- a/game/modules/tome/data/talents/misc/misc.lua +++ b/game/modules/tome/data/talents/misc/misc.lua @@ -143,12 +143,13 @@ newTalent{ return end - game:changeLevel(1, "town-angolwen") + self:setEffect(self.EFF_TELEPORT_ANGOLWEN, 40, {}) return true end, info = [[Allows a mage to teleport to the secret town of Angolwen. You have studied the magic arts there and have been granted a special portal spell to teleport there. - Nobody must learn about this spell and so it should never be used while seen by any creatures.]] + Nobody must learn about this spell and so it should never be used while seen by any creatures. + The spell will take time to activate, you must be out of sight of any creature when you cast it and when the teleportation takes effect.]] } -- Dunadan's power, a "weak" regeneration diff --git a/game/modules/tome/data/timed_effects.lua b/game/modules/tome/data/timed_effects.lua index 7168e25d2c234beba4c41a075c827a66be4773bf..026d339805fde1022173e1e542bf03527a8026cb 100644 --- a/game/modules/tome/data/timed_effects.lua +++ b/game/modules/tome/data/timed_effects.lua @@ -1764,6 +1764,36 @@ newEffect{ end, } +newEffect{ + name = "TELEPORT_ANGOLWEN", + desc = "Teleport: Angolwen", + long_desc = function(self, eff) return "The target is awaiting to be recalled back to Angolwen." end, + type = "magical", + status = "beneficial", + parameters = { }, + activate = function(self, eff) + end, + deactivate = function(self, eff) + local seen = false + -- Check for visible monsters, only see LOS actors, so telepathy wont prevent it + core.fov.calc_circle(self.x, self.y, 20, function(_, x, y) return game.level.map:opaque(x, y) end, function(_, x, y) + local actor = game.level.map(x, y, game.level.map.ACTOR) + if actor and actor ~= self then seen = true end + end, nil) + if seen then + game.log("There are creatures that could be watching you; you cannot take the risk to teleport to Angolwen.") + return + end + + if self:canBe("worldport") then + game.logPlayer(self, "You are yanked out of this place!") + game:changeLevel(1, "town-angolwen") + else + game.logPlayer(self, "Space restabilizes around you.") + end + end, +} + newEffect{ name = "RESOLVE", desc = "Resolve", diff --git a/game/modules/tome/data/zones/demon-plane/grids.lua b/game/modules/tome/data/zones/demon-plane/grids.lua index 73b06c17aa5fc9aee9e2cf050641ca079cb305e7..16f93f3b0b6d0071748b799252727d60be31bbb0 100644 --- a/game/modules/tome/data/zones/demon-plane/grids.lua +++ b/game/modules/tome/data/zones/demon-plane/grids.lua @@ -57,12 +57,12 @@ newEntity{ on_move = function(self, x, y, who) if who == game.player then require("engine.ui.Dialog"):yesnoPopup("Back and there again", "Enter the portal back to Middle-earth? (Warning loot Draebor first)", function(ret) - if ret then + if not ret then who.wild_x, who.wild_y = 72, 23 game:changeLevel(1, "wilderness") game.logPlayer(who, "#VIOLET#You enter the swirling portal and in the blink of an eye you are back to Middle-earth, on the eastern side of the Mirkwood forest.") end - end, "Enter", "Stay") + end, "Stay", "Enter") end end, } diff --git a/game/modules/tome/data/zones/demon-plane/npcs.lua b/game/modules/tome/data/zones/demon-plane/npcs.lua index 15286008f58de155eba516aaed22772e98ed9e07..6d9520099781f407a1b9b0d1bc17d5ba6aae3279 100644 --- a/game/modules/tome/data/zones/demon-plane/npcs.lua +++ b/game/modules/tome/data/zones/demon-plane/npcs.lua @@ -49,7 +49,7 @@ newEntity{ define_as = "DRAEBOR", body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 }, resolvers.drops{chance=100, nb=4, {ego_chance=100} }, --- resolvers.drops{chance=100, nb=1, {defined="ATHAME_WEST"} }, + resolvers.drops{chance=100, nb=1, {defined="BOOTS_OF_PHASING"} }, summon = { {type="demon", number=1, hasxp=false}, diff --git a/game/modules/tome/data/zones/demon-plane/objects.lua b/game/modules/tome/data/zones/demon-plane/objects.lua index 60dbf0e2416c5cef3c404aa7e9d4fb15f2f5cf3d..192c693a54a64900fc53974ce76be4b53863fd64 100644 --- a/game/modules/tome/data/zones/demon-plane/objects.lua +++ b/game/modules/tome/data/zones/demon-plane/objects.lua @@ -21,56 +21,30 @@ load("/data/general/objects/objects.lua") local Stats = require "engine.interface.ActorStats" --- Artifact, droped (and used!) by Bill the Stone Troll - -newEntity{ base = "BASE_GREATMAUL", - define_as = "GREATMAUL_BILL_TRUNK", - name = "Bill's Tree Trunk", unique=true, - desc = [[This is a big nasty looking tree trunk that Bill was using as a weapon. It could still serve this purpose, should you be strong enough to wield it!]], - require = { stat = { str=25 }, }, +newEntity{ base = "BASE_LEATHER_BOOT", + define_as = "BOOTS_OF_PHASING", + unique = true, + name = "Shifting Boots", + unided_name = "pair of shifting boots", + desc = [[Those leather boots can make anybody as annoying as their former possessor, Draebor.]], + color = colors.BLUE, rarity = false, - metallic = false, - cost = 5, - combat = { - dam = 30, - apr = 7, - physcrit = 1.5, - dammod = {str=1.3}, - damrange = 1.7, - }, - + cost = 200, + material_level = 5, wielder = { + combat_armor = 1, + combat_def = 7, + fatigue = 2, + talents_types_mastery = { ["spell/temporal"] = 0.1 }, + inc_stats = { [Stats.STAT_CUN] = 8, [Stats.STAT_DEX] = 4, }, }, -} -for i = 1, 5 do -newEntity{ base = "BASE_SCROLL", - define_as = "NOTE"..i, - name = "tattered paper scrap", lore="trollshaws-note-"..i, - desc = [[A paper scrap, left by an adventurer.]], - rarity = false, - is_magic_device = false, - encumberance = 0, -} -end - -newEntity{ base = "BASE_SHIELD", - define_as = "SANGUINE_SHIELD", - unided_name = "bloody shield", - name = "Sanguine Shield", unique=true, - desc = [["Though tarnished and spattered with blood, the emblem of the sun still manages to shine through on this shield.]], - require = { stat = { str=39 }, }, - cost = 120, - - special_combat = { - dam = 40, - physcrit = 9, - dammod = {str=1.2}, - }, - wielder = { - inc_stats = { [Stats.STAT_CON] = 5, }, - fatigue = 19, - resists = { [DamageType.BLIGHT] = 25, }, - life_regen = 5, - }, + max_power = 40, power_regen = 1, + use_power = { name = "blink to a nearby random location", power = 22, use = function(self, who) + game.level.map:particleEmitter(who.x, who.y, 1, "teleport") + who:teleportRandom(who.x, who.y, 10 + who:getMag(5)) + game.level.map:particleEmitter(who.x, who.y, 1, "teleport") + game.logSeen(who, "%s uses %s!", who.name:capitalize(), self:getName{no_count=true}) + return nil, true + end} } diff --git a/game/modules/tome/data/zones/tower-amon-sul/npcs.lua b/game/modules/tome/data/zones/tower-amon-sul/npcs.lua index 7fa9c98f8aaf58f8971050ee245b1479a2afbe01..aa33c74eda930357c92333807a8f54ccea124734 100644 --- a/game/modules/tome/data/zones/tower-amon-sul/npcs.lua +++ b/game/modules/tome/data/zones/tower-amon-sul/npcs.lua @@ -40,6 +40,7 @@ newEntity{ define_as = "SHADE_OF_ANGMAR", max_stamina = 85, rank = 4, size_category = 3, + undead = 1, infravision = 20, stats = { str=16, dex=12, cun=14, mag=25, con=16 }, instakill_immune = 1, @@ -77,6 +78,7 @@ newEntity{ define_as = "ANGMAR_FURY", infravision = 20, stats = { str=16, dex=12, cun=14, mag=25, con=16 }, + undead = 1, no_breath = 1, stone_immune = 1, confusion_immune = 1,