Skip to content
Snippets Groups Projects
Commit d1c36eeb authored by dg's avatar dg
Browse files

level "corrector" to handle nicer tiles

git-svn-id: http://svn.net-core.org/repos/t-engine4@2312 51575b47-30f0-44d4-a5cc-537603b46e54
parent 3c1b4989
No related branches found
No related tags found
No related merge requests found
Showing
with 175 additions and 11 deletions
......@@ -34,6 +34,7 @@ local Astar = require "engine.Astar"
local DirectPath = require "engine.DirectPath"
local Shader = require "engine.Shader"
local NicerTiles = require "mod.class.NicerTiles"
local GameState = require "mod.class.GameState"
local Store = require "mod.class.Store"
local Trap = require "mod.class.Trap"
......@@ -321,6 +322,7 @@ function _M:setupDisplayMode(reboot)
Map.tiles.use_images = true
if gfx.tiles == "ascii" then Map.tiles.use_images = false Map.tiles.force_back_color = {r=0, g=0, b=0, a=255} end
if gfx.tiles == "ascii_full" then Map.tiles.use_images = false end
if gfx.tiles == "shockbolt" then Map.tiles.nicer_tiles = true end
if self.level then
self.level.map:recreate()
......@@ -433,6 +435,10 @@ function _M:changeLevel(lev, zone, keep_old_lev, force_down)
end
self.zone:getLevel(self, lev, old_lev)
-- Post process walls
local nt = NicerTiles.new()
nt:postProcessLevelTiles(self.level)
-- Check if we need to switch the current guardian
self.state:zoneCheckBackupGuardian()
......
......@@ -109,7 +109,8 @@ function _M:makeTrees(base, max)
else
tbl = { makeTree(1, 16), }
end
table.sort(tbl, function(a,b) return a.display_y < b.display_y end)
table.sort(tbl, function(a,b) return a.display_scale < b.display_scale end)
for i = 1, #tbl do tbl[i].z = 16 + i - 1 end
return tbl
end
......
-- ToME - Tales of Maj'Eyal
-- Copyright (C) 2009, 2010 Nicolas Casalini
--
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
--
-- Nicolas Casalini "DarkGod"
-- darkgod@te4.org
require "engine.class"
local Map = require "engine.Map"
module(..., package.seeall, class.make)
function _M:init()
self.repo = {}
self.repl = {}
end
function _M:getTile(name)
if not name then return end
if self.repo[name] then return self.repo[name]
else
self.repo[name] = game.zone:makeEntityByName(game.level, "terrain", name)
return self.repo[name]
end
end
function _M:replace(i, j, g)
if g then
self.repl[#self.repl+1] = {i, j, g}
end
end
function _M:postProcessLevelTiles(level)
if not Map.tiles.nicer_tiles then return end
for i = 0, level.map.w - 1 do for j = 0, level.map.h - 1 do
local g = level.map(i, j, Map.TERRAIN)
if g.nice_tiler then
self["niceTile"..g.nice_tiler.method:capitalize()](self, level, i, j, g, g.nice_tiler)
end
end end
for i = 1, #self.repl do
local r = self.repl[i]
level.map(r[1], r[2], Map.TERRAIN, r[3])
end
end
-- Make walls have a pseudo 3D effect
function _M:niceTileWall3d(level, i, j, g, nt)
local gn = level.map(i, j-1, Map.TERRAIN) or {define_as = g.define_as}
local gs = level.map(i, j+1, Map.TERRAIN) or {define_as = g.define_as}
if gs.define_as ~= g.define_as and gn.define_as ~= g.define_as then self:replace(i, j, self:getTile(nt.north_south))
elseif gs.define_as ~= g.define_as then self:replace(i, j, self:getTile(nt.south))
elseif gn.define_as ~= g.define_as then self:replace(i, j, self:getTile(nt.north))
end
end
-- Make doors have a pseudo 3D effect
function _M:niceTileDoor3d(level, i, j, g, nt)
local gn = level.map(i, j-1, Map.TERRAIN)
local gs = level.map(i, j+1, Map.TERRAIN)
local gw = level.map(i-1, j, Map.TERRAIN)
local ge = level.map(i+1, j, Map.TERRAIN)
if gs and gs:check("block_move", i, j+1) and gn and gn:check("block_move", i, j-1) then self:replace(i, j, self:getTile(nt.north_south))
elseif gw and gw:check("block_move", i, j-1) and ge and ge:check("block_move", i+1, j) then self:replace(i, j, self:getTile(nt.west_east))
end
end
......@@ -31,7 +31,7 @@ newEntity{
}
newEntity{
define_as = "UP", image = "terrain/stair_up.png",
define_as = "UP", image = "terrain/marble_floor.png", add_displays = {class.new{image="terrain/stair_up.png"}},
name = "previous level",
display = '<', color_r=255, color_g=255, color_b=0,
notice = true,
......@@ -40,7 +40,7 @@ newEntity{
}
newEntity{
define_as = "DOWN", image = "terrain/stair_down.png",
define_as = "DOWN", image = "terrain/marble_floor.png", add_displays = {class.new{image="terrain/stair_down.png"}},
name = "next level",
display = '>', color_r=255, color_g=255, color_b=0,
notice = true,
......@@ -137,10 +137,14 @@ newEntity{
grow = "WALL",
}
-----------------------------------------
-- Walls
-----------------------------------------
newEntity{
define_as = "WALL",
name = "wall", image = "terrain/granite_wall1.png",
display = '#', color_r=255, color_g=255, color_b=255, back_color=colors.GREY,
nice_tiler = { method="wall3d", north="WALL_NORTH", south="WALL_SOUTH", north_south="WALL_NORTH_SOUTH" },
always_remember = true,
does_block_move = true,
can_pass = {pass_wall=1},
......@@ -148,7 +152,25 @@ newEntity{
air_level = -20,
dig = "FLOOR",
}
newEntity{ base = "WALL",
define_as = "WALL_NORTH",
image = "terrain/granite_wall1.png", add_displays = {class.new{image="terrain/granite_wall3.png", z=18, display_y=-engine.Map.tile_h}},
nice_tiler = false,
}
newEntity{ base = "WALL",
define_as = "WALL_NORTH_SOUTH",
image = "terrain/granite_wall2.png", add_displays = {class.new{image="terrain/granite_wall3.png", z=18, display_y=-engine.Map.tile_h}},
nice_tiler = false,
}
newEntity{ base = "WALL",
define_as = "WALL_SOUTH",
image = "terrain/granite_wall2.png", add_displays = {class.new{image="terrain/granite_wall3.png", z=18, display_y=-engine.Map.tile_h}},
nice_tiler = false,
}
-----------------------------------------
-- Big Walls
-----------------------------------------
newEntity{
define_as = "BIGWALL",
name = "wall", image = "terrain/bigwall.png",
......@@ -161,10 +183,14 @@ newEntity{
dig = "FLOOR",
}
-----------------------------------------
-- Hard Walls
-----------------------------------------
newEntity{
define_as = "HARDWALL",
name = "wall", image = "terrain/granite_wall1.png",
display = '#', color_r=255, color_g=255, color_b=255, back_color=colors.GREY,
nice_tiler = { method="wall3d", north="WALL_NORTH", south="WALL_SOUTH", north_south="WALL_NORTH_SOUTH" },
always_remember = true,
does_block_move = true,
block_sight = true,
......@@ -172,17 +198,71 @@ newEntity{
block_esp = true,
air_level = -20,
}
newEntity{ base = "HARDWALL",
define_as = "HARDWALL_NORTH",
image = "terrain/granite_wall1.png", add_displays = {class.new{image="terrain/granite_wall3.png", z=18, display_y=-engine.Map.tile_h}},
nice_tiler = false,
}
newEntity{ base = "HARDWALL",
define_as = "HARDWALL_NORTH_SOUTH",
image = "terrain/granite_wall2.png", add_displays = {class.new{image="terrain/granite_wall3.png", z=18, display_y=-engine.Map.tile_h}},
nice_tiler = false,
}
newEntity{ base = "HARDWALL",
define_as = "HARDWALL_SOUTH",
image = "terrain/granite_wall2.png", add_displays = {class.new{image="terrain/granite_wall3.png", z=18, display_y=-engine.Map.tile_h}},
nice_tiler = false,
}
-----------------------------------------
-- Doors
-----------------------------------------
newEntity{
define_as = "DOOR",
name = "door", image = "terrain/granite_door1.png",
display = '+', color_r=238, color_g=154, color_b=77, back_color=colors.DARK_UMBER,
nice_tiler = { method="door3d", north_south="DOOR_VERT", west_east="DOOR_NORTH_SOUTH" },
notice = true,
always_remember = true,
block_sight = true,
door_opened = "DOOR_OPEN",
dig = "DOOR_OPEN",
}
newEntity{
define_as = "DOOR_OPEN",
name = "open door", image="terrain/granite_door1_open.png",
display = "'", color_r=238, color_g=154, color_b=77, back_color=colors.DARK_GREY,
always_remember = true,
door_closed = "DOOR",
}
newEntity{ base = "DOOR",
define_as = "DOOR_NORTH_SOUTH",
image = "terrain/granite_door1.png", add_displays = {class.new{image="terrain/granite_wall3.png", z=18, display_y=-engine.Map.tile_h}},
nice_tiler = false,
door_opened = "DOOR_NORTH_SOUTH_OPEN",
}
newEntity{ base = "DOOR_OPEN",
define_as = "DOOR_NORTH_SOUTH_OPEN",
image = "terrain/marble_floor.png", add_displays = {class.new{image="terrain/granite_door1_open.png", z=17}, class.new{image="terrain/granite_wall3.png", z=18, display_y=-engine.Map.tile_h}},
nice_tiler = false,
door_closed = "DOOR_NORTH_SOUTH",
}
newEntity{ base = "DOOR",
define_as = "DOOR_VERT",
image = "terrain/granite_door1_vert.png", add_displays = {class.new{image="terrain/granite_door1_vert_north.png", z=18, display_y=-engine.Map.tile_h}},
door_opened = "DOOR_OPEN_VERT",
nice_tiler = false,
dig = "DOOR_OPEN_VERT",
}
newEntity{ base = "DOOR_OPEN",
define_as = "DOOR_OPEN_VERT",
image = "terrain/granite_door1_open_vert.png", add_displays = {class.new{image="terrain/granite_door1_open_vert_north.png", z=18, display_y=-engine.Map.tile_h}},
nice_tiler = false,
door_closed = "DOOR_VERT",
}
newEntity{
define_as = "DOOR_VAULT",
......@@ -198,14 +278,9 @@ newEntity{
dig = "DOOR_OPEN",
}
newEntity{
define_as = "DOOR_OPEN",
name = "open door", image = "terrain/granite_door1_open.png",
display = "'", color_r=238, color_g=154, color_b=77, back_color=colors.DARK_GREY,
always_remember = true,
door_closed = "DOOR",
}
-----------------------------------------
-- Ol
-----------------------------------------
newEntity{
define_as = "OLD_FLOOR",
name = "floor", image = "terrain/maze_floor.png",
......
game/modules/tome/data/gfx/shockbolt/terrain/granite_door1.png

9.78 KiB

game/modules/tome/data/gfx/shockbolt/terrain/granite_door1_open.png

10.5 KiB

game/modules/tome/data/gfx/shockbolt/terrain/granite_door1_open_vert.png

10.6 KiB

game/modules/tome/data/gfx/shockbolt/terrain/granite_door1_open_vert_north.png

6.18 KiB

game/modules/tome/data/gfx/shockbolt/terrain/granite_door1_vert.png

8.98 KiB

game/modules/tome/data/gfx/shockbolt/terrain/granite_door1_vert_north.png

5.04 KiB

game/modules/tome/data/gfx/shockbolt/terrain/granite_wall1.png

10.5 KiB

game/modules/tome/data/gfx/shockbolt/terrain/granite_wall2.png

10.1 KiB

game/modules/tome/data/gfx/shockbolt/terrain/granite_wall3.png

6.2 KiB

game/modules/tome/data/gfx/shockbolt/terrain/marble_floor.png

8.49 KiB

game/modules/tome/data/gfx/shockbolt/terrain/stair_down.png

7.83 KiB

game/modules/tome/data/gfx/shockbolt/terrain/stair_up.png

10.7 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment