diff --git a/game/engine/Zone.lua b/game/engine/Zone.lua index e01268106c2dcd2120b04359834b8c692b553140..5629fb20a87198c6e1417aa09e4d30893a384ce7 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 834bc9df64cc8fb9feeea209bd8d64153250261b..2cf7d957a66ea4122fab1d328a4bbe43215fdf93 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 9650f98c892b61f4b31381f2bcc03eb96a41a8cf..2638384344e94ee04a91942685909344c1d27220 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 d0c0a29b0e49e9a64006dc4a554f42004952e210..9de699e264ec9492d974973d6ba146521d575d72 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 75608c800f852c96012155391b61bfa6984e95d8..6f5f4899a5b598a3d86467062c11c95a8ebc568c 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 { [[ ]], [[ ]],