diff --git a/game/engines/default/engine/Chat.lua b/game/engines/default/engine/Chat.lua index 243a744d529b90e9e3a02a6727dae2197198f166..eb702e0dea54c03eddaa12596cd7d75f2a3a5e2c 100644 --- a/game/engines/default/engine/Chat.lua +++ b/game/engines/default/engine/Chat.lua @@ -27,6 +27,7 @@ function _M:init(name, npc, player, data) self.chats = {} self.npc = npc self.player = player + self.name = name data = setmetatable(data or {}, {__index=_G}) local f, err = loadfile("/data/chats/"..name..".lua") diff --git a/game/engines/default/engine/Game.lua b/game/engines/default/engine/Game.lua index d083289f962402c2394a46d953f602b456086ff1..31781a9771b8f24bf32ade253cd399967da04c10 100644 --- a/game/engines/default/engine/Game.lua +++ b/game/engines/default/engine/Game.lua @@ -202,7 +202,7 @@ function _M:unregisterDialog(d) self.dialogs[d] = nil d:unload() -- Update positions - for i, id in ipairs(self.dialogs) do self.dialogs[id] = i end + for i, id in ipairs(self.dialogs) do id.__stack_id = i self.dialogs[id] = i end local last = self.dialogs[#self.dialogs] or self if last.key then last.key:setCurrent() end diff --git a/game/engines/default/engine/dialogs/Chat.lua b/game/engines/default/engine/dialogs/Chat.lua index 41e7ed44798a67de9f549b411a33306ff7d61e5a..9912a37e7076e7cc1d89ad0531cd7aeea7b92b4a 100644 --- a/game/engines/default/engine/dialogs/Chat.lua +++ b/game/engines/default/engine/dialogs/Chat.lua @@ -93,8 +93,8 @@ function _M:regen() d.__showup = false game:replaceDialog(self, d) end - function _M:resolveAuto() +--[[ if not self.chat:get(self.cur_id).auto then return end for i, a in ipairs(self.chat:get(self.cur_id).answers) do if not a.cond or a.cond(self.npc, self.player) then @@ -103,6 +103,7 @@ function _M:resolveAuto() end end end +]] end function _M:generateList() diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua index 163ebee170b27850259eabe3bae7dc38d3fe1af6..79c7ab9fbd63ac92cafc90f67eb2b6611b5fa33e 100644 --- a/game/modules/tome/class/Game.lua +++ b/game/modules/tome/class/Game.lua @@ -376,11 +376,20 @@ function _M:changeLevel(lev, zone, keep_old_lev, force_down) self.player:move(self.player.wild_x, self.player.wild_y, true) self.player.last_wilderness = self.zone.short_name else + local x, y if lev > old_lev and not force_down then - self.player:move(self.level.default_up.x, self.level.default_up.y, true) + x, y = self.level.default_up.x, self.level.default_up.y else - self.player:move(self.level.default_down.x, self.level.default_down.y, true) + x, y = self.level.default_down.x, self.level.default_down.y end + -- Check if there is already an actor at that location, if so move it + local blocking_actor = self.level.map(x, y, engine.Map.ACTOR) + if blocking_actor then + local newx, newy = util.findFreeGrid(x, y, 20, true, {[Map.ACTOR]=true}) + if newx and newy then blocking_actor:move(newx, newy, true) + else blocking_actor:teleportRandom(x, y, 200) end + end + self.player:move(x, y, true) end self.player.changed = true if self.to_re_add_actors then for act, _ in pairs(self.to_re_add_actors) do diff --git a/game/modules/tome/data/quests/high-peak.lua b/game/modules/tome/data/quests/high-peak.lua index 58ce90ac98a4365cbafebf61daa4350e92e6436f..8954ebe9288b73164b3d249b0919114c5a8049ef 100644 --- a/game/modules/tome/data/quests/high-peak.lua +++ b/game/modules/tome/data/quests/high-peak.lua @@ -115,6 +115,8 @@ function failed_mount_doom(self, level) end function win(self, how) + game:playMusic("Lords of the Sky.ogg") + if how == "full" then world:gainAchievement("WIN_FULL", game.player) elseif how == "aeryn-sacrifice" then world:gainAchievement("WIN_AERYN", game.player) elseif how == "self-sacrifice" then world:gainAchievement("WIN_SACRIFICE", game.player) @@ -123,3 +125,4 @@ function win(self, how) game.player.winner = how game:registerDialog(require("engine.dialogs.ShowText").new("Winner", "win", {playername=game.player.name, how=how}, game.w * 0.6)) end + diff --git a/game/modules/tome/data/talents/cunning/traps.lua b/game/modules/tome/data/talents/cunning/traps.lua index 5f48eedd1027e65ce4f4c348add625218829fe89..f038dd84504b47d5da4064d538aa4e2e1d7a316e 100644 --- a/game/modules/tome/data/talents/cunning/traps.lua +++ b/game/modules/tome/data/talents/cunning/traps.lua @@ -42,7 +42,7 @@ newTalent{ elseif lev == 4 then self:learnTalent(self.T_DISARMING_TRAP, true) elseif lev == 5 then - self:learnTalent(self.T_FREEZING_TRAP, true) + self:learnTalent(self.T_NIGHTSHADE_TRAP, true) end end, on_unlearn = function(self, t) @@ -56,7 +56,7 @@ newTalent{ elseif lev == 3 then self:unlearnTalent(self.T_DISARMING_TRAP) elseif lev == 4 then - self:unlearnTalent(self.T_FREEZING_TRAP) + self:unlearnTalent(self.T_NIGHTSHADE_TRAP) end end, info = function(self, t) @@ -426,7 +426,7 @@ newTalent{ } newTalent{ - name = "Freezing Trap", + name = "Nightshade Trap", type = {"cunning/traps", 1}, points = 1, cooldown = 8, @@ -444,15 +444,15 @@ newTalent{ local Trap = require "mod.class.Trap" local t = Trap.new{ type = "elemental", id_by_type=true, unided_name = "trap", - name = "freeze trap", color=colors.LIGHT_BLUE, + name = "nightshade trap", color=colors.LIGHT_BLUE, display = '^', dam = dam, faction = self.faction, check_hit = self:combatAttackDex(), triggered = function(self, x, y, who) - self:project({type="hit", x=x,y=y}, x, y, engine.DamageType.COLD, self.dam, {type="freeze"}) + self:project({type="hit", x=x,y=y}, x, y, engine.DamageType.NATURE, self.dam, {type="slime"}) if who:checkHit(self.check_hit, who:combatSpellResist(), 0, 95, 15) and who:canBe("stun") then - who:setEffect(who.EFF_FROZEN, 4, {src=self.summoner}) + who:setEffect(who.EFF_STUNNED, 4, {src=self.summoner}) end return true, true end, @@ -480,7 +480,7 @@ newTalent{ return true end, info = function(self, t) - return ([[Lay a freezing trap, doing %0.2f cold damage to a creature and freezing it for 4 turns.]]): + return ([[Lay a trap cotted with a potent venom, doing %0.2f nature damage to a creature and stunning it for 4 turns.]]): format(damDesc(self, DamageType.COLD, 20 + self:getCun() * 0.7 * self:getTalentLevel(self.T_TRAP_MASTERY))) end, } diff --git a/ideas/cunning.ods b/ideas/cunning.ods index c0782147de9b681bd40636b13a5d1d0815df1bbe..c53ce5bbf79f5c1fa7b5003385d59b6086881836 100644 Binary files a/ideas/cunning.ods and b/ideas/cunning.ods differ