diff --git a/game/engines/default/engine/Entity.lua b/game/engines/default/engine/Entity.lua index 0d1a702f87c01b4a0f36db0ecffd46f826b7793f..5c2ed05d8ad0c25e5dce8a546c34ec61ddb790fc 100644 --- a/game/engines/default/engine/Entity.lua +++ b/game/engines/default/engine/Entity.lua @@ -1,3 +1,4 @@ + -- TE4 - T-Engine 4 -- Copyright (C) 2009, 2010 Nicolas Casalini -- @@ -240,6 +241,7 @@ function _M:getEntityFinalSurface(tiles, w, h) if mos[i] then list[#list+1] = mos[i] end end local tex = core.map.mapObjectsToTexture(w, h, unpack(list)) + if not tex then return nil end _M.__mo_final_repo[self] = _M.__mo_final_repo[self] or {} _M.__mo_final_repo[self][id] = {surface=tex:toSurface(), tex=tex} return _M.__mo_final_repo[self][id].surface, _M.__mo_final_repo[self][id].tex diff --git a/game/engines/default/engine/utils.lua b/game/engines/default/engine/utils.lua index 047210ac7cba4550b01d0546d3c91ece9be68b37..e32f89d4da256f4183b07ed494f39d856adb9946 100644 --- a/game/engines/default/engine/utils.lua +++ b/game/engines/default/engine/utils.lua @@ -276,10 +276,12 @@ getmetatable(tmps).__index.drawColorString = function(s, font, str, x, y, r, g, local e = __uids[uid] if e then local surf = e:getEntityFinalSurface(game.level.map.tiles, font:lineSkip(), font:lineSkip()) - local w, h = surf:getSize() - s:merge(surf, x, y) - if h > max_h then max_h = h end - x = x + (w or 0) + if surf then + local w, h = surf:getSize() + s:merge(surf, x, y) + if h > max_h then max_h = h end + x = x + (w or 0) + end end elseif fontstyle then font:setStyle(fontstyle) @@ -328,10 +330,12 @@ getmetatable(tmps).__index.drawColorStringBlended = function(s, font, str, x, y, local e = __uids[uid] if e then local surf = e:getEntityFinalSurface(game.level.map.tiles, font:lineSkip(), font:lineSkip()) - local w, h = surf:getSize() - s:merge(surf, x, y) - if h > max_h then max_h = h end - x = x + (w or 0) + if surf then + local w, h = surf:getSize() + s:merge(surf, x, y) + if h > max_h then max_h = h end + x = x + (w or 0) + end end elseif fontstyle then font:setStyle(fontstyle) diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua index 9c60d59da99c7e662ba8ba4455d2b24d9391ed20..ab0b23b38a3d295fbd9d267324d9b3fc323c1018 100644 --- a/game/modules/tome/class/Actor.lua +++ b/game/modules/tome/class/Actor.lua @@ -322,7 +322,9 @@ end -- @param min_dist the minimun radius of of the effect, will never teleport closer. Defaults to 0 if not set -- @return true if the teleport worked function _M:teleportRandom(x, y, dist, min_dist) - + if game.level.data.no_teleport_south and y + dist > self.y then + y = self.y - dist + end return engine.Actor.teleportRandom(self, x, y, dist, min_dist) end diff --git a/game/modules/tome/data/zones/mount-doom/zone.lua b/game/modules/tome/data/zones/mount-doom/zone.lua index b94b9deb4fbbbf2e2e32402752ff4400df0cd325..7b787b986d0cb1caad7419b7dbc2e2c9d0d2e76d 100644 --- a/game/modules/tome/data/zones/mount-doom/zone.lua +++ b/game/modules/tome/data/zones/mount-doom/zone.lua @@ -30,6 +30,7 @@ return { persistant = "zone", no_level_connectivity = true, no_worldport = true, + no_teleport_south = true, ambiant_music = "Hold the Line.ogg", generator = { map = { @@ -54,7 +55,7 @@ return { }, post_process = function(level) - level.turn_counter = 700 * 10 + level.turn_counter = 640 * 10 end, on_enter = function(lev, old_lev, newzone)