From f08bb117df34e5175ce1b6b481c5d5a433d8251d Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Sat, 22 May 2010 02:13:40 +0000 Subject: [PATCH] Static map generator can request a specific A* connectivity check git-svn-id: http://svn.net-core.org/repos/t-engine4@671 51575b47-30f0-44d4-a5cc-537603b46e54 --- game/engine/Zone.lua | 2 ++ game/engine/generator/map/Static.lua | 18 ++++++++++++++++-- game/engine/utils.lua | 4 ++++ .../tome/data/maps/zones/flooded-cave-last.lua | 3 +++ .../data/maps/zones/tower-amon-sul-last.lua | 2 ++ 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/game/engine/Zone.lua b/game/engine/Zone.lua index e01268106c..5629fb20a8 100644 --- a/game/engine/Zone.lua +++ b/game/engine/Zone.lua @@ -485,6 +485,7 @@ function _M:newLevel(level_data, lev, old_lev, game) -- Check for connectivity from entrance to exit local a = Astar.new(map, game:getPlayer()) + print("[LEVEL GENERATION] checking entrance to exit A*", ux, uy, "to", dx, dy) if ux and uy and dx and dy and (ux ~= dx or uy ~= dy) and not a:calc(ux, uy, dx, dy) then print("Level unconnected, no way from entrance to exit", ux, uy, "to", dx, dy) level:removed() @@ -499,6 +500,7 @@ function _M:newLevel(level_data, lev, old_lev, game) else cx, cy = spot.check_connectivity.x, spot.check_connectivity.y end + print("[LEVEL GENERATION] checking A*", spot.x, spot.y, "to", cx, cy) if spot.x and spot.y and cx and cy and (spot.x ~= cx or spot.y ~= cy) and not a:calc(spot.x, spot.y, cx, cy) then print("Level unconnected, no way from", spot.x, spot.y, "to", cx, cy) level:removed() diff --git a/game/engine/generator/map/Static.lua b/game/engine/generator/map/Static.lua index 834bc9df64..2cf7d957a6 100644 --- a/game/engine/generator/map/Static.lua +++ b/game/engine/generator/map/Static.lua @@ -26,6 +26,7 @@ function _M:init(zone, map, level, data) engine.Generator.init(self, zone, map, level) self.grid_list = zone.grid_list self.subgen = {} + self.spots = {} self.data = data if data.adjust_level then @@ -68,6 +69,15 @@ function _M:loadMap(file) addData = function(t) table.merge(self.level.data, t, true) end, + checkConnectivity = function(dst, src) + self.spots[#self.spots+1] = {x=dst[1], y=dst[2], check_connectivity=src} + print("********************************************") + print("********************************************") + print(dst[1], dst[2], src) + print("********************************************") + print("********************************************") + print("********************************************") + end, } setfenv(f, setmetatable(g, {__index=_G})) local ret, err = f() @@ -113,6 +123,8 @@ function _M:resolve(typ, c) end function _M:generate(lev, old_lev) + local spots = {} + for i = 1, self.gen_map.w do for j = 1, self.gen_map.h do local c = self.gen_map[i][j] self.map(i-1, j-1, Map.TERRAIN, self:resolve("grid", c)) @@ -160,11 +172,13 @@ function _M:generate(lev, old_lev) self.level, data ) - local ux, uy, dx, dy = generator:generate(lev, old_lev) + local ux, uy, dx, dy, subspots = generator:generate(lev, old_lev) self.map:import(map, g.x, g.y) map:close() + table.append(self.spots, subspots) + if g.define_up then self.gen_map.startx, self.gen_map.starty = ux + g.x, uy + g.y end if g.define_down then self.gen_map.endx, self.gen_map.endy = dx + g.x, dy + g.y end end @@ -175,5 +189,5 @@ function _M:generate(lev, old_lev) if self.gen_map.startx and self.gen_map.starty then self.map.room_map[self.gen_map.endx][self.gen_map.endy].special = "exit" end - return self.gen_map.startx, self.gen_map.starty, self.gen_map.endx, self.gen_map.endy + return self.gen_map.startx, self.gen_map.starty, self.gen_map.endx, self.gen_map.endy, self.spots end diff --git a/game/engine/utils.lua b/game/engine/utils.lua index 9650f98c89..2638384344 100644 --- a/game/engine/utils.lua +++ b/game/engine/utils.lua @@ -62,6 +62,10 @@ function table.mergeAdd(dst, src, deep) end end +function table.append(dst, src) + for i = 1, #src do dst[#dst+1] = src[i] end +end + function table.reverse(t) local tt = {} for i, e in ipairs(t) do tt[e] = i end diff --git a/game/modules/tome/data/maps/zones/flooded-cave-last.lua b/game/modules/tome/data/maps/zones/flooded-cave-last.lua index d0c0a29b0e..9de699e264 100644 --- a/game/modules/tome/data/maps/zones/flooded-cave-last.lua +++ b/game/modules/tome/data/maps/zones/flooded-cave-last.lua @@ -22,6 +22,9 @@ defineTile('.', "WATER_FLOOR") defineTile('#', "WATER_WALL") defineTile('s', "WATER_FLOOR", nil, "UKLLMSWWIK") +startx = 0 +starty = 6 + return { [[##################################################]], [[##..............................................##]], diff --git a/game/modules/tome/data/maps/zones/tower-amon-sul-last.lua b/game/modules/tome/data/maps/zones/tower-amon-sul-last.lua index 75608c800f..6f5f4899a5 100644 --- a/game/modules/tome/data/maps/zones/tower-amon-sul-last.lua +++ b/game/modules/tome/data/maps/zones/tower-amon-sul-last.lua @@ -39,6 +39,8 @@ subGenerator{ define_up = true, } +checkConnectivity({26,44}, "entrance") + return { [[ ]], [[ ]], -- GitLab