diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua index 00767a5b614919ee0cc06e59cde981131791f997..5ed29c2acba1fbcb5a3aa1d85dd9cbe302f6efd4 100644 --- a/game/modules/tome/class/Actor.lua +++ b/game/modules/tome/class/Actor.lua @@ -183,6 +183,29 @@ function _M:probabilityTravel(x, y, dist) return true end +--- Reveals location surrounding the actor +function _M:doQuake(tg, x, y) + local locs = {} + local ms = {} + self:project(tg, x, y, function(tx, ty) + locs[#locs+1] = {x=tx,y=ty} + ms[#ms+1] = game.level.map.map[tx + ty * game.level.map.w] + end) + + while #locs > 0 do + local l = rng.tableRemove(locs) + local m = rng.tableRemove(ms) + game.level.map.map[l.x + l.y * game.level.map.w] = m + for k, e in pairs(m) do + if e.x and e.y and e.move then e:move(l.x, l.y, true) + elseif e.x and e.y then e.x, e.ly = l.x, l.y end + end + end + game.level.map:cleanFOV() + game.level.map.changed = true + game.level.map:redisplay() +end + --- Reveals location surrounding the actor function _M:magicMap(radius) radius = math.floor(radius) diff --git a/game/modules/tome/data/talents/gifts/cold-drake.lua b/game/modules/tome/data/talents/gifts/cold-drake.lua index 3e8651cfc458c19798067f0d1180b11342965c7a..f761f251073b1b1c34ceccc1e0e60ec21839ac6c 100644 --- a/game/modules/tome/data/talents/gifts/cold-drake.lua +++ b/game/modules/tome/data/talents/gifts/cold-drake.lua @@ -1,3 +1,5 @@ +local Object = require "engine.Object" + newTalent{ name = "Ice Claw", type = {"wild-gift/cold-drake", 1}, @@ -14,7 +16,7 @@ newTalent{ local x, y, target = self:getTarget(tg) if not x or not y or not target then return nil end if math.floor(core.fov.distance(self.x, self.y, x, y)) > 1 then return nil end - self:attackTargetWith(target, DamageType.COLD, 1.4 + self:getTalentLevel(t) / 8, true) + self:attackTarget(target, DamageType.COLD, 1.4 + self:getTalentLevel(t) / 8, true) return true end, info = function(self, t) @@ -59,11 +61,38 @@ newTalent{ cooldown = 30, range = 20, action = function(self, t) + local tg = {type="bolt", range=self:getTalentRange(t), nolock=true, talent=t} + local x, y = self:getTarget(tg) + if not x or not y then return nil end + local _ _, x, y = self:canProject(tg, x, y) + if game.level.map:checkEntity(x, y, Map.TERRAIN, "block_move") then return nil end + + local e = Object.new{ + old_feat = game.level.map(x, y, Map.TERRAIN), + name = "summoned ice wall", + display = '#', color=colors.LIGHT_BLUE, + always_remember = true, + block_move = true, + block_sight = false, + temporary = 4 + self:getTalentLevel(t), + x = x, y = y, + canAct = false, + act = function(self) + self:useEnergy() + self.temporary = self.temporary - 1 + if self.temporary <= 0 then + game.level.map(self.x, self.y, Map.TERRAIN, self.old_feat) + game.level:removeEntity(self) + game.level.map:redisplay() + end + end + } + game.level:addEntity(e) + game.level.map(x, y, Map.TERRAIN, e) return true end, info = function(self, t) - return ([[You slam your foot onto the ground, shaking the area around you in a radius of %d, damage and knocking back your foes. - The damage will increase with the Strength stat]]):format(2 + self:getTalentLevel(t) / 2) + return ([[Summons an icy wall for %d turns. Ice walls are transparent.]]):format(4 + self:getTalentLevel(t)) end, } diff --git a/game/modules/tome/data/talents/gifts/fire-drake.lua b/game/modules/tome/data/talents/gifts/fire-drake.lua index 608da9c6b118815ff6c4bd923cf234303ea8aa26..596a2f0837ed39c748d92c12dc91ee3c6e5f1cf3 100644 --- a/game/modules/tome/data/talents/gifts/fire-drake.lua +++ b/game/modules/tome/data/talents/gifts/fire-drake.lua @@ -3,7 +3,7 @@ newTalent{ type = {"wild-gift/fire-drake", 1}, require = gifts_req1, points = 5, - message = "@Source@ burrows into the ground!", + message = "@Source@ roars!", equilibrium = 3, cooldown = 20, range = 5, diff --git a/game/modules/tome/data/talents/gifts/sand-drake.lua b/game/modules/tome/data/talents/gifts/sand-drake.lua index c9aea813af0dfb95f4b5a27ff56efa59a80a8656..77a698a2373139b55363c28a549af9d1ca068e77 100644 --- a/game/modules/tome/data/talents/gifts/sand-drake.lua +++ b/game/modules/tome/data/talents/gifts/sand-drake.lua @@ -52,8 +52,9 @@ newTalent{ }, range = 20, action = function(self, t) - local tg = {type="ball", range=0, friendlyfire=false, radius=2 + self:getTalentLevel(t) / 2, talent=t} + local tg = {type="ball", range=0, friendlyfire=false, radius=2 + self:getTalentLevel(t) / 2, talent=t, no_restrict=true} self:project(tg, self.x, self.y, DamageType.PHYSKNOCKBACK, {dam=self:combatDamage() * 0.8, dist=4}) + self:doQuake(tg, self.x, self.y) return true end, info = function(self, t) diff --git a/game/modules/tome/data/talents/spells/earth.lua b/game/modules/tome/data/talents/spells/earth.lua index 6175ebe09d9f45211b70dbb1e2f017e83cc6ebfd..348c7bdb85df8e8e5846d0dfb44fc981daab54df 100644 --- a/game/modules/tome/data/talents/spells/earth.lua +++ b/game/modules/tome/data/talents/spells/earth.lua @@ -77,6 +77,7 @@ newTalent{ newTalent{ name = "Stone Wall", type = {"spell/earth",4}, + require = spells_req4, points = 5, cooldown = 12, mana = 70, @@ -123,7 +124,6 @@ newTalent{ return true end, - require = { stat = { mag=34 } }, info = function(self, t) return ([[Entombs yourself in a wall of stone for %d turns.]]):format(2 + self:combatSpellpower(0.03) * self:getTalentLevel(t)) end,