From e3c5d37887d031d1541fadd9ca2753ef545d6b89 Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Sat, 29 Jan 2011 22:52:12 +0000 Subject: [PATCH] Flying texts will not appear over unseen targets git-svn-id: http://svn.net-core.org/repos/t-engine4@2560 51575b47-30f0-44d4-a5cc-537603b46e54 --- game/modules/tome/class/Player.lua | 23 +++++++++++++---------- game/modules/tome/data/damage_types.lua | 6 +++--- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua index 5ecaff7e00..4e4a816586 100644 --- a/game/modules/tome/class/Player.lua +++ b/game/modules/tome/class/Player.lua @@ -276,8 +276,15 @@ local arcane_eye_true_seeing = function() return true, 100 end function _M:playerFOV() -- Clean FOV before computing it game.level.map:cleanFOV() + + -- Do wilderness stuff, nothing else + if game.zone.wilderness then + self:computeFOV(game.zone.wilderness_see_radius, "block_sight", function(x, y, dx, dy, sqdist) game.level.map:applyLite(x, y, wild_fovdist[sqdist]) end, true, true, true) + return + end + -- Compute ESP FOV, using cache - if not game.zone.wilderness then self:computeFOV(self.esp.range or 10, "block_esp", function(x, y) game.level.map:applyESP(x, y, 0.6) end, true, true, true) end + self:computeFOV(self.esp.range or 10, "block_esp", function(x, y) game.level.map:applyESP(x, y, 0.6) end, true, true, true) -- Handle Sense spell, a simple FOV, using cache. Note that this means some terrain features can be made to block sensing if self:attr("detect_range") then @@ -373,15 +380,11 @@ function _M:playerFOV() -- Compute both the normal and the lite FOV, using cache -- Do it last so it overrides others - if game.zone.wilderness_see_radius then - self:computeFOV(game.zone.wilderness_see_radius, "block_sight", function(x, y, dx, dy, sqdist) game.level.map:applyLite(x, y, wild_fovdist[sqdist]) end, true, true, true) - else - self:computeFOV(self.sight or 10, "block_sight", function(x, y, dx, dy, sqdist) - game.level.map:apply(x, y, fovdist[sqdist]) - end, true, false, true) - if self.lite <= 0 then game.level.map:applyLite(self.x, self.y) - else self:computeFOV(self.lite, "block_sight", function(x, y, dx, dy, sqdist) game.level.map:applyLite(x, y) end, true, true, true) end - end + self:computeFOV(self.sight or 10, "block_sight", function(x, y, dx, dy, sqdist) + game.level.map:apply(x, y, fovdist[sqdist]) + end, true, false, true) + if self.lite <= 0 then game.level.map:applyLite(self.x, self.y) + else self:computeFOV(self.lite, "block_sight", function(x, y, dx, dy, sqdist) game.level.map:applyLite(x, y) end, true, true, true) end end end diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua index c0a106e965..48005b1ab1 100644 --- a/game/modules/tome/data/damage_types.lua +++ b/game/modules/tome/data/damage_types.lua @@ -121,13 +121,13 @@ setDefaultProjector(function(src, x, y, type, dam, tmp, no_martyr) local sx, sy = game.level.map:getTileToScreen(x, y) if target:takeHit(dam, src) then - if rsrc == game.player or rtarget == game.player or game.party:hasMember(rsrc) or game.party:hasMember(rtarget) then + if game.level.map.seens(x, y) and (rsrc == game.player or rtarget == game.player or game.party:hasMember(rsrc) or game.party:hasMember(rtarget)) then game.flyers:add(sx, sy, 30, (rng.range(0,2)-1) * 0.5, -3, "Kill!", {255,0,255}) end elseif not DamageType:get(type).hideFlyer then - if rsrc == game.player or game.party:hasMember(rsrc) then + if game.level.map.seens(x, y) and (rsrc == game.player or game.party:hasMember(rsrc)) then game.flyers:add(sx, sy, 30, (rng.range(0,2)-1) * 0.5, -3, tostring(-math.ceil(dam)), {0,255,0}) - elseif rtarget == game.player or game.party:hasMember(rtarget) then + elseif game.level.map.seens(x, y) and (rtarget == game.player or game.party:hasMember(rtarget)) then game.flyers:add(sx, sy, 30, (rng.range(0,2)-1) * 0.5, -3, tostring(-math.ceil(dam)), {255,0,0}) end end -- GitLab