From 2f587f5eeaa1bddc59a1d427ab309e3e70e30ad7 Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Sun, 12 Sep 2010 23:18:54 +0000 Subject: [PATCH] Extracter the rooms loader of Roomer generator into a RoomsLoader taht is now alos used by Forest Added possible vaults to Eruan and the Trollshaws git-svn-id: http://svn.net-core.org/repos/t-engine4@1194 51575b47-30f0-44d4-a5cc-537603b46e54 --- .../default/engine/generator/map/Forest.lua | 24 +++- .../default/engine/generator/map/Roomer.lua | 107 +-------------- .../engine/generator/map/RoomsLoader.lua | 126 ++++++++++++++++++ .../default/engine/generator/map/Static.lua | 33 ++++- game/modules/tome/class/Game.lua | 2 +- .../tome/data/general/grids/forest.lua | 58 ++++++++ .../tome/data/general/grids/mountain.lua | 12 ++ .../tome/data/gfx/terrain/rock_grass.png | Bin 0 -> 1328 bytes .../tome/data/gfx/terrain/rock_grass_dark.png | Bin 0 -> 1308 bytes .../tome/data/maps/vaults/dragon_lair.lua | 45 +++++++ .../tome/data/maps/vaults/honey_glade.lua | 44 ++++++ .../data/maps/vaults/honey_glade_dark.lua | 44 ++++++ .../modules/tome/data/rooms/greater_vault.lua | 2 +- game/modules/tome/data/rooms/lesser_vault.lua | 56 ++++++++ game/modules/tome/data/zones/eruan/grids.lua | 2 + game/modules/tome/data/zones/eruan/zone.lua | 7 +- .../tome/data/zones/infinite-dungeon/zone.lua | 2 +- .../tome/data/zones/old-forest/zone.lua | 3 +- .../tome/data/zones/tol-falas/zone.lua | 4 +- .../tome/data/zones/trollshaws/zone.lua | 5 + 20 files changed, 464 insertions(+), 112 deletions(-) create mode 100644 game/engines/default/engine/generator/map/RoomsLoader.lua create mode 100644 game/modules/tome/data/gfx/terrain/rock_grass.png create mode 100644 game/modules/tome/data/gfx/terrain/rock_grass_dark.png create mode 100644 game/modules/tome/data/maps/vaults/dragon_lair.lua create mode 100644 game/modules/tome/data/maps/vaults/honey_glade.lua create mode 100644 game/modules/tome/data/maps/vaults/honey_glade_dark.lua create mode 100644 game/modules/tome/data/rooms/lesser_vault.lua diff --git a/game/engines/default/engine/generator/map/Forest.lua b/game/engines/default/engine/generator/map/Forest.lua index 57b67c8040..2f13be61d8 100644 --- a/game/engines/default/engine/generator/map/Forest.lua +++ b/game/engines/default/engine/generator/map/Forest.lua @@ -20,7 +20,8 @@ require "engine.class" local Map = require "engine.Map" require "engine.Generator" -module(..., package.seeall, class.inherit(engine.Generator)) +local RoomsLoader = require "engine.generator.map.RoomsLoader" +module(..., package.seeall, class.inherit(engine.Generator, RoomsLoader)) function _M:init(zone, map, level, data) engine.Generator.init(self, zone, map, level) @@ -40,6 +41,8 @@ function _M:init(zone, map, level, data) self.do_ponds.hurst = self.do_ponds.hurst or nil self.do_ponds.lacunarity = self.do_ponds.lacunarity or nil end + + RoomsLoader.init(self, data) end function _M:addPond(x, y, spots) @@ -114,6 +117,7 @@ function _M:generate(lev, old_lev) end local spots = {} + self.spots = spots if self.do_ponds then for i = 1, rng.range(self.do_ponds.nb[1], self.do_ponds.nb[2]) do @@ -121,6 +125,24 @@ function _M:generate(lev, old_lev) end end + local nb_room = util.getval(self.data.nb_rooms or 0) + local rooms = {} + while nb_room > 0 do + local rroom + while true do + rroom = self.rooms[rng.range(1, #self.rooms)] + if type(rroom) == "table" and rroom.chance_room then + if rng.percent(rroom.chance_room) then rroom = rroom[1] break end + else + break + end + end + + local r = self:roomAlloc(rroom, #rooms+1, lev, old_lev) + if r then rooms[#rooms+1] = r end + nb_room = nb_room - 1 + end + local ux, uy, dx, dy if self.data.edge_entrances then ux, uy, dx, dy, spots = self:makeStairsSides(lev, old_lev, self.data.edge_entrances, spots) diff --git a/game/engines/default/engine/generator/map/Roomer.lua b/game/engines/default/engine/generator/map/Roomer.lua index ca6e01448f..75cb2fe919 100644 --- a/game/engines/default/engine/generator/map/Roomer.lua +++ b/game/engines/default/engine/generator/map/Roomer.lua @@ -20,7 +20,8 @@ require "engine.class" local Map = require "engine.Map" require "engine.Generator" -module(..., package.seeall, class.inherit(engine.Generator)) +local RoomsLoader = require "engine.generator.map.RoomsLoader" +module(..., package.seeall, class.inherit(engine.Generator, RoomsLoader)) function _M:init(zone, map, level, data) engine.Generator.init(self, zone, map, level) @@ -31,102 +32,7 @@ function _M:init(zone, map, level, data) self.data.lite_room_chance = self.data.lite_room_chance or 25 self.grid_list = zone.grid_list - self.rooms = {} - for i, file in ipairs(data.rooms) do - if type(file) == "table" then - table.insert(self.rooms, {self:loadRoom(file[1]), chance_room=file[2]}) - else - table.insert(self.rooms, self:loadRoom(file)) - end - end -end - -function _M:loadRoom(file) - local f, err = loadfile("/data/rooms/"..file..".lua") - if not f and err then error(err) end - setfenv(f, setmetatable({ - Map = require("engine.Map"), - }, {__index=_G})) - local ret, err = f() - if not ret and err then error(err) end - - -- We got a room generator function, save it for later - if type(ret) == "function" then - print("loaded room generator",file,ret) - return ret - end - - -- Init the room with name and size - local t = { name=file, w=ret[1]:len(), h=#ret } - - -- Read the room map - for j, line in ipairs(ret) do - local i = 1 - for c in line:gmatch(".") do - t[i] = t[i] or {} - t[i][j] = c - i = i + 1 - end - end - print("loaded room",file,t.w,t.h) - - return t -end - ---- Make up a room -function _M:roomAlloc(room, id, lev, old_lev) - if type(room) == 'function' then - print("room generator", room, "is making a room") - room = room(self, id, lev, old_lev) - end - print("alloc", room.name) - -- Sanity check - if self.map.w - 2 - room.w < 2 or self.map.h - 2 - room.h < 2 then return false end - - local tries = 100 - while tries > 0 do - local ok = true - local x, y = rng.range(1, self.map.w - 2 - room.w), rng.range(1, self.map.h - 2 - room.h) - - -- Do we stomp ? - for i = 1, room.w do - for j = 1, room.h do - if self.map.room_map[i-1+x][j-1+y].room then ok = false break end - end - if not ok then break end - end - - if ok then - local is_lit = rng.percent(self.data.lite_room_chance) - - -- ok alloc it using the default generator or a specific one - local cx, cy - if room.generator then - cx, cy = room:generator(x, y, is_lit) - else - for i = 1, room.w do - for j = 1, room.h do - self.map.room_map[i-1+x][j-1+y].room = id - local c = room[i][j] - if c == '!' then - self.map.room_map[i-1+x][j-1+y].room = nil - self.map.room_map[i-1+x][j-1+y].can_open = true - self.map(i-1+x, j-1+y, Map.TERRAIN, self:resolve('#')) - else - self.map(i-1+x, j-1+y, Map.TERRAIN, self:resolve(c)) - end - if is_lit then self.map.lites(i-1+x, j-1+y, true) end - end - end - end - print("room allocated at", x, y,"with center",math.floor(x+(room.w-1)/2), math.floor(y+(room.h-1)/2)) - cx = cx or math.floor(x+(room.w-1)/2) - cy = cy or math.floor(y+(room.h-1)/2) - return { id=id, x=x, y=y, cx=cx, cy=cy, room=room } - end - tries = tries - 1 - end - return false + RoomsLoader.init(self, data) end --- Random tunnel dir @@ -336,17 +242,14 @@ function _M:generate(lev, old_lev) local spots = {} self.spots = spots - local nb_room = self.data.nb_rooms or 10 + local nb_room = util.getval(self.data.nb_rooms or 10) local rooms = {} while nb_room > 0 do local rroom while true do rroom = self.rooms[rng.range(1, #self.rooms)] if type(rroom) == "table" and rroom.chance_room then - if rng.percent(rroom.chance_room) then - rroom = rroom[1] - break - end + if rng.percent(rroom.chance_room) then rroom = rroom[1] break end else break end diff --git a/game/engines/default/engine/generator/map/RoomsLoader.lua b/game/engines/default/engine/generator/map/RoomsLoader.lua new file mode 100644 index 0000000000..4146ed4e95 --- /dev/null +++ b/game/engines/default/engine/generator/map/RoomsLoader.lua @@ -0,0 +1,126 @@ +-- TE4 - T-Engine 4 +-- 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" + +--- Generator interface that can use rooms +module(..., package.seeall, class.make) + +function _M:init(data) + self.rooms = {} + + if not data.rooms then return end + + for i, file in ipairs(data.rooms) do + if type(file) == "table" then + table.insert(self.rooms, {self:loadRoom(file[1]), chance_room=file[2]}) + else + table.insert(self.rooms, self:loadRoom(file)) + end + end +end + +function _M:loadRoom(file) + local f, err = loadfile("/data/rooms/"..file..".lua") + if not f and err then error(err) end + setfenv(f, setmetatable({ + Map = require("engine.Map"), + }, {__index=_G})) + local ret, err = f() + if not ret and err then error(err) end + + -- We got a room generator function, save it for later + if type(ret) == "function" then + print("loaded room generator",file,ret) + return ret + end + + -- Init the room with name and size + local t = { name=file, w=ret[1]:len(), h=#ret } + + -- Read the room map + for j, line in ipairs(ret) do + local i = 1 + for c in line:gmatch(".") do + t[i] = t[i] or {} + t[i][j] = c + i = i + 1 + end + end + print("loaded room",file,t.w,t.h) + + return t +end + +--- Make up a room +function _M:roomAlloc(room, id, lev, old_lev) + if type(room) == 'function' then + print("room generator", room, "is making a room") + room = room(self, id, lev, old_lev) + end + print("alloc", room.name) + -- Sanity check + if self.map.w - 2 - room.w < 2 or self.map.h - 2 - room.h < 2 then return false end + + local tries = 100 + while tries > 0 do + local ok = true + local x, y = rng.range(1, self.map.w - 2 - room.w), rng.range(1, self.map.h - 2 - room.h) + + -- Do we stomp ? + for i = 1, room.w do + for j = 1, room.h do + if self.map.room_map[i-1+x][j-1+y].room then ok = false break end + end + if not ok then break end + end + + if ok then + local is_lit = rng.percent(self.data.lite_room_chance) + + -- ok alloc it using the default generator or a specific one + local cx, cy + if room.generator then + cx, cy = room:generator(x, y, is_lit) + else + for i = 1, room.w do + for j = 1, room.h do + self.map.room_map[i-1+x][j-1+y].room = id + local c = room[i][j] + if c == '!' then + self.map.room_map[i-1+x][j-1+y].room = nil + self.map.room_map[i-1+x][j-1+y].can_open = true + self.map(i-1+x, j-1+y, Map.TERRAIN, self:resolve('#')) + else + self.map(i-1+x, j-1+y, Map.TERRAIN, self:resolve(c)) + end + if is_lit then self.map.lites(i-1+x, j-1+y, true) end + end + end + end + print("room allocated at", x, y,"with center",math.floor(x+(room.w-1)/2), math.floor(y+(room.h-1)/2)) + cx = cx or math.floor(x+(room.w-1)/2) + cy = cy or math.floor(y+(room.h-1)/2) + return { id=id, x=x, y=y, cx=cx, cy=cy, room=room } + end + tries = tries - 1 + end + return false +end diff --git a/game/engines/default/engine/generator/map/Static.lua b/game/engines/default/engine/generator/map/Static.lua index 02f6e751de..6ab1afa3b0 100644 --- a/game/engines/default/engine/generator/map/Static.lua +++ b/game/engines/default/engine/generator/map/Static.lua @@ -85,11 +85,21 @@ function _M:loadMap(file) local m = { w=ret[1]:len(), h=#ret } -- Read the map + local rotate = util.getval(g.rotates or "default") for j, line in ipairs(ret) do local i = 1 for c in line:gmatch(".") do - m[i] = m[i] or {} - m[i][j] = c + local ii, jj = i, j + + if rotate == "flipx" then ii, jj = m.w - i + 1, j + elseif rotate == "flipy" then ii, jj = i, m.h - j + 1 + elseif rotate == "90" then ii, jj = j, m.w - i + 1 + elseif rotate == "180" then ii, jj = m.w - i + 1, m.h - j + 1 + elseif rotate == "270" then ii, jj = m.h - j + 1, i + end + + m[ii] = m[ii] or {} + m[ii][jj] = c i = i + 1 end end @@ -99,6 +109,25 @@ function _M:loadMap(file) m.endx = g.endx or math.floor(m.w / 2) m.endy = g.endy or math.floor(m.h / 2) + if rotate == "flipx" then + m.startx = m.w - m.startx + 1 + m.endx = m.w - m.endx + 1 + elseif rotate == "flipy" then + m.starty = m.h - m.starty + 1 + m.endy = m.h - m.endy + 1 + elseif rotate == "90" then + m.startx, m.starty = m.starty, m.w - m.startx + 1 + m.endx, m.endy = m.endy, m.w - m.endx + 1 + m.w, m.h = m.h, m.w + elseif rotate == "180" then + m.startx, m.starty = m.w - m.startx + 1, m.h - m.starty + 1 + m.endx, m.endy = m.w - m.endx + 1, m.h - m.endy + 1 + elseif rotate == "270" then + m.startx, m.starty = m.h - m.starty + 1, m.startx + m.endx, m.endy = m.h - m.endy + 1, m.endx + m.w, m.h = m.h, m.w + end + self.gen_map = m self.tiles = t diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua index 6ab1cca73b..949b56b43b 100644 --- a/game/modules/tome/class/Game.lua +++ b/game/modules/tome/class/Game.lua @@ -524,7 +524,7 @@ function _M:setupCommands() end, [{"_g","ctrl"}] = function() if config.settings.tome.cheat then - self:changeLevel(1, "infinite-dungeon") + self:changeLevel(1, "eruan") -- self.player:grantQuest("test") end end, diff --git a/game/modules/tome/data/general/grids/forest.lua b/game/modules/tome/data/general/grids/forest.lua index b9e3c16d08..c307298a42 100644 --- a/game/modules/tome/data/general/grids/forest.lua +++ b/game/modules/tome/data/general/grids/forest.lua @@ -38,6 +38,21 @@ newEntity{ } end +for i = 1, 20 do +newEntity{ + define_as = "HARDTREE"..(i > 1 and i or ""), + name = "tall thick tree", + image = "terrain/grass.png", + add_displays = class:makeTrees("terrain/tree_alpha"), + display = '#', color=colors.LIGHT_GREEN, back_color={r=44,g=95,b=43}, + always_remember = true, + does_block_move = true, + block_sight = true, + block_sense = true, + block_esp = true, +} +end + newEntity{ define_as = "GRASS_DARK1", name = "grass", image = "terrain/grass_dark1.png", @@ -59,8 +74,51 @@ newEntity{ } end +for i = 1, 20 do +newEntity{ + define_as = "HARDTREE_DARK"..i, + name = "tall thick tree", image = "terrain/grass_dark1.png", + force_clone = true, + add_displays = class:makeTrees("terrain/tree_alpha"), + display = '#', color=colors.GREEN, back_color={r=44,g=95,b=43}, + always_remember = true, + does_block_move = true, + block_sight = true, + block_sense = true, + block_esp = true, +} +end + newEntity{ define_as = "FLOWER", name = "flower", image = "terrain/grass_flower3.png", display = ';', color=colors.YELLOW, back_color={r=44,g=95,b=43}, } + +newEntity{ + define_as = "ROCK_VAULT", + name = "huge lose rock", image = "terrain/rock_grass.png", + display = '+', color=colors.GREY, back_color={r=44,g=95,b=43}, + notice = true, + always_remember = true, + block_sight = true, + block_sense = true, + block_esp = true, + door_player_check = "This rock is loose, you think you can move it away.", + door_opened = "GRASS", + dig = "GRASS", +} + +newEntity{ + define_as = "ROCK_VAULT_DARK", + name = "huge lose rock", image = "terrain/rock_grass_dark.png", + display = '+', color=colors.GREY, back_color={r=44,g=95,b=43}, + notice = true, + always_remember = true, + block_sight = true, + block_sense = true, + block_esp = true, + door_player_check = "This rock is loose, you think you can move it away.", + door_opened = "GRASS_DARK1", + dig = "GRASS_DARK1", +} diff --git a/game/modules/tome/data/general/grids/mountain.lua b/game/modules/tome/data/general/grids/mountain.lua index 3141d9a7d5..8bbe4ae2e9 100644 --- a/game/modules/tome/data/general/grids/mountain.lua +++ b/game/modules/tome/data/general/grids/mountain.lua @@ -45,3 +45,15 @@ newEntity{ block_sight = true, dig = "ROCKY_GROUND", } + +newEntity{ + define_as = "HARDMOUNTAIN_WALL", + name = "hard rocky mountain", image = "terrain/rocky_mountain.png", + display = '#', color=colors.UMBER, back_color=colors.LIGHT_UMBER, + always_remember = true, + does_block_move = true, + block_sight = true, + block_sense = true, + block_esp = true, + air_level = -20, +} diff --git a/game/modules/tome/data/gfx/terrain/rock_grass.png b/game/modules/tome/data/gfx/terrain/rock_grass.png new file mode 100644 index 0000000000000000000000000000000000000000..92a096890d22a41a03cb55ed8b47fc7a25ea216f GIT binary patch literal 1328 zcmV-01<(44P)<h;3K|Lk000e1NJLTq001BW001Be0ssI2{21+{00006bW%=J0RI60 z0RJ~w8+`x(1m#IYK~zYIl~z4y8%Y%YEH7dr1~F^4*abBL32fpkT%<Z&y12rmT3n|I zq*8GRp)$oG7ITHl_zH2YRHSg>fLx?7=hERggbE=wDweQFgIUC|Ear;0dRi&Yg?q&^ z!_NEr-tV6C0Yo|i0H=az4&}fSTL*cmkR#F6^q09(107}Td9wKAQ~+!V1vb)yAjs^{ z8bGJfkpKeCTux<U-17?P5ep?U4JCmf2yEM4E|>h+_k93^)<8Ekw#gCzkQ!J5slk5f zeC>4!ix2=-j{u+?Snt)<)z$IwvFCZq<<hooV~jBdz+$nGQr7GB$sg0?XG2`8$IOY< zBjf?1IYcSv0Ru&DrY#i&!E(7gIXMBKlmb9bgkcCEj^jKFW0e=O1rhxqOi}<qwOS>_ z33{azU!|0+fbq;rr?6WB79j;7ZK)J!x7%zl2_<Hh9)=-{-tn8he4wvIC(}?t5NNHd z)ha_Vo6YFTY6u)DB|$_g8IZgO>`;M!*tSh@6F77j4u`|xkj}H&EN?Zb!8-jYdDwOe ziBrLT=^WO36$HVH7cYbmLI`7w5JGExbaa#?$zrh>jYdh5kom6bQUKyOzP`Q|U0o_8 znxj+(9XOFPh{y`tw)4RxW7%XWWf+F8>*5=t0tR3j3V_qqJ3tlaUA~AIqVaePpjN9< zRKqn*CKC<-wFh~r+U<4_1g4?5q)APIuwxH6p4DpAbzKri$WUN+{NMy3@7wLRX{dbS zTG1SG{hEy0@n$EmolXb9+1VM3Aoi1!6RkC&x>X9w$;xWEToNXShlgBHOq0n(O4;l6 z`u+ZFHtTdc^oIH%l_bY(Q^o=XOCWCQw{PEStzFl3U6%`rt)|1rk01N}{=>t=j&8O_ zDHVpH@B8vnQOAttC@@|OH&GnNbftLarD(0+y?aO3cDqekH=E7!ezRDMAWH+?YxR8J zCnz>aqBQ`jwQu_edqB2hy8}`N?;l)X5kelo`o;YH`}F0@mtVhrrE(h%htuhFI-L@a z5aRgwSO_s5kE1C1^5qMFySuy7(^F$i7=}rb02mAg0Mbw5=~k3p8;jDEoN~H)&=}zR zG#-x+4-Wy%=bOPudG#z=V%_XE<1ElR+MU4vmq-YJcn*u2-6nHeO8$udS&1~DwANu5 z_F6sa8BPV3B{rRwYtpuDO6o8Sd%fO&OOKmcw$#<t6*n>8_XmvunmU?e-@Jk-!K|`= z;(4Cuc|r)!^C*n<dVMq+iLSOjtD~c%D2gZm<#L%ar}&ouAcRPg#27=#JsOS57p7Q5 zfuJW+O5NYzYpow19&T=KT-VJHubuL)*X#M~U@+iHqC_$cWeMzAzh&V~O*ZJq<1x#n zr%b-@lNu_w;cyr?HO24QybxWz=X}`O>3*0$Z{EBih<MV)P5r$EFmCES_s>lh<#)RL zQ!B_?|Fi1Z2_oJnso(9JSHODNqHT$!_xt@?t#*2P>UrKj-D&aMtR7K%ZJusLUOJCV zr-EV;q67e<lpO%<A6#U2v&sf(v52QzL1S{USO6G}M(HO}zA(wJnc};<JJHqpCzD_3 z<N*p6o>Eu>PwCowwuSL=D$q^cyWCBGnk_dsH<SXVq0ro{E%`B-UxD{{eFrxCcRm<9 mJZWna2C*LTOnG+N=l%td5=1J5pn|Ue0000<MNUMnLSTZQ#B$I8 literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/terrain/rock_grass_dark.png b/game/modules/tome/data/gfx/terrain/rock_grass_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..5f085d3c81627a0e47f51ef16a5f5cbccd92f4a6 GIT binary patch literal 1308 zcmV+%1>^dOP)<h;3K|Lk000e1NJLTq001BW001Be0ssI2{21+{00006bW%=J0RI60 z0RJ~w8+`x(1kp)EK~zYIotCj{8%Y$#f07n4pv6ofg#{<rU_=ZFL6G8#lt$In`v<6S z>GI0^D_o{Xaa^VTiWsiA#*pH?g)sspMxZ4ux63k!K@4UQSG?7DB`1WtuUKYxXWpCn z-Z$^P*617{(O>|Ah$>?Qx4Q#9)ihu)OqD@n)$5F8yS$0uaTEbNMrl}&<5;E{V}Ps6 zE5Mu^zv?z3*e(|&8lV%s1&AD9E$xtvrD*Kp;Dc6oDvskY3?CjI0OuUg?RNY9zWr#| zM{Z*Q+96Oc|0m>`rO>=7whn*@zS?>cfJXnOCzHuwFzEOD)>`o)4pys`Qc7!W|FZ6t zlT{mAQ{;CUL7QF3kw>84>o|_Bwa=eF2f{G)bMid*NAXL7=rI8GK$GZ34CF_6seuLT z8EpmtP)d0Rp3kQBAfj>vir_Y)a*Pa%sSaU09s^oyzJol^z3Jx8YNOfXpnl3|G1YM# z8)JkJYb}tbsl4uyqm&Yg#FJNc(&T4*p!R4x3d7Kw^W<D#UteEe%Q#KbrZaIPhJuLO zZ6xH?2c{Ff#Z7e_$K7tXx&Gndq2KSfTCLS;m8NN{)spQG27_L&w_dNEbDuwdwil)y zQf0J5WZ;EVJKNi`Kq!)@Y&OsH!C>$-B$cZ#v#6uK;SHkNO^Y7lZ$6&`FJ8P5uJbLH z%cTzhh9E*u^>{pv<2bz3dwOjPcTW`=hT&i^5Ocx|;GEk#hbUVTi7{q89*38@DcoQ$ zH$6Q~6H2M8t1IC6_}H5eh(JULKGZ<KR`J$a;bb@*`U~Z;TrQPTNs>$^6Km~sI+gE| z2ZaDHvpQn}&<W01AGz7@v%|x~Ua!~d^*rOEmLLeKsse6rZzq#Unx;yrySqE@`|$Aa z;NSpgx7*9*QW8{p=0r<ve@0KYz&R(cZi{-$S_{|mIv$U;*4ElIO`GTTW&@$@I5x>N zIXyiUD!fH`E*1;F(ipRsNaV}Y3@9b26Z}k-QA9la<W_%J$;?8_VzDsBH1{<e4wX{# z`MfO4EX#oV`}>oV6X#r6mcrz0HUqk!l(|#xoqNotRffGVv&$LZ$9z5?4u>?-Dj>T0 zCIYohc3xHH++g-A@PEZ|Y!Vq|1n8XvtKa`0)8^brfilMAd7ey@;KI~dFHpSRW?FwI z!!Q(4=Xsta$q%f@M!(mS$;5v-Jw2UW&P;5ojLzmI5oFZ)q~GsLT0J;8`10ioptUZF z!d{r}Cly6eS(Xw2(JP?t>hjQPwY<2CqNvVXJESet3$)fZH#b0<rZ+b?gTdfw@$&HX zKroxl{7n)eNq%i{UWfN}R@b%peD3Ya)aKdcm)w=bVqszve5*4P*bCF*mz|#Ohx!?f zM#7B0eI_<&0`-mMCN{0$*GCmKd%EUSb8dj|$=4sE-T@@r0npjJgl)4`G^|U@b#ijj z?RM=)TfK7|%jqj;?slm6B{PV4W63m`V&sS*(PWAaXP_84GU`IQ2~dA4pe)PPY6TQU z(fy>VGq?UwJHEfaw--kGMqhr5h<3oHqR>3EWD1}&dPU>_qU{L+&HBihKTWZPY<7L* zM3H4#ic4u4n_bYx5@@Q7Ofxb>Znv}Z^U#mwn?~nDY?A5Yz4M(GyKSAsT<|aRnn37& Sa-g#S0000<MNUMnLSTZhCWFWT literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/maps/vaults/dragon_lair.lua b/game/modules/tome/data/maps/vaults/dragon_lair.lua new file mode 100644 index 0000000000..93718ed3b3 --- /dev/null +++ b/game/modules/tome/data/maps/vaults/dragon_lair.lua @@ -0,0 +1,45 @@ +-- ToME - Tales of Middle-Earth +-- 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 + +startx = 25 +starty = 6 + +defineTile('!', "ROCK_VAULT", nil, nil, nil, {room_map={special=false, room=false, can_open=true}}) +defineTile(' ', "SAND") +defineTile('X', "HARDMOUNTAIN_WALL") +defineTile('$', "SAND", {random_filter={add_levels=15}}) +defineTile('D', "SAND", {random_filter={add_levels=20}}, {random_filter={name="greater multi-hued wyrm", add_levels=50}}) +defineTile('d', "SAND", nil, {random_filter={name="multi-hued drake hatchling", add_levels=20}}) + +rotates = {"default", "90", "180", "270", "flipx", "flipy"} + +return { +[[ XXXXXXX X X XXX X ]], +[[ XXXd XXXXXXXXdXX XXXXXX ]], +[[XXXXXXX XXXX XXX XXX]], +[[XdXXX $$$ Xd XXX X XX]], +[[XX $$$$$ dXXX XX XX]], +[[Xd $$$D$$$ XXXX!XX]], +[[XX $$$$$ XXXXXXXX ]], +[[XXXXX $$$ XXXXXXXXXXXX]], +[[ XXX X XXX XXXXXXXXX ]], +[[ XXXX XXXXXX ddXXXXXX ]], +[[ XXXdXX XXXXXXXXXXXXX ]], +[[ XXXX XXXXXXXX ]], +} \ No newline at end of file diff --git a/game/modules/tome/data/maps/vaults/honey_glade.lua b/game/modules/tome/data/maps/vaults/honey_glade.lua new file mode 100644 index 0000000000..7981db1996 --- /dev/null +++ b/game/modules/tome/data/maps/vaults/honey_glade.lua @@ -0,0 +1,44 @@ +-- ToME - Tales of Middle-Earth +-- 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 + +defineTile('!', "ROCK_VAULT", nil, nil, nil, {room_map={special=false, room=false, can_open=true}}) +defineTile(' ', "GRASS") +defineTile('+', "DOOR") +defineTile('X', {"HARDTREE","HARDTREE2","HARDTREE3","HARDTREE4","HARDTREE5","HARDTREE6","HARDTREE7","HARDTREE8","HARDTREE9","HARDTREE10","HARDTREE11","HARDTREE12","HARDTREE13","HARDTREE14","HARDTREE15","HARDTREE16","HARDTREE17","HARDTREE18","HARDTREE19","HARDTREE20"}) +defineTile('^', "GRASS", nil, nil, {random_filter={add_levels=5}}) +defineTile('#', "GRASS", nil, {random_filter={name="honey tree"}}) +defineTile('q', "GRASS", {random_filter={add_levels=10}}, {random_filter={name="brown bear", add_levels=10}}) +defineTile('Q', "GRASS", {random_filter={add_levels=20}}, {random_filter={name="grizzly bear", add_levels=20}}) + +startx = 2 +starty = 10 + +return { +[[XXXXXXXXXX]], +[[XXX XXXX]], +[[XX #q# XXX]], +[[XX qQq XXX]], +[[XX #q# XXX]], +[[XXX XXXX]], +[[XXXX XXXXX]], +[[XXXX XXX]], +[[XXXXXX!XXX]], +[[XX^^^^ XXX]], +[[XX XXXXXXX]], +} diff --git a/game/modules/tome/data/maps/vaults/honey_glade_dark.lua b/game/modules/tome/data/maps/vaults/honey_glade_dark.lua new file mode 100644 index 0000000000..0aad549239 --- /dev/null +++ b/game/modules/tome/data/maps/vaults/honey_glade_dark.lua @@ -0,0 +1,44 @@ +-- ToME - Tales of Middle-Earth +-- 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 + +defineTile('!', "ROCK_VAULT_DARK", nil, nil, nil, {room_map={special=false, room=false, can_open=true}}) +defineTile(' ', "GRASS_DARK1") +defineTile('+', "DOOR") +defineTile('X', {"HARDTREE_DARK1","HARDTREE_DARK2","HARDTREE_DARK3","HARDTREE_DARK4","HARDTREE_DARK5","HARDTREE_DARK6","HARDTREE_DARK7","HARDTREE_DARK8","HARDTREE_DARK9","HARDTREE_DARK10","HARDTREE_DARK11","HARDTREE_DARK12","HARDTREE_DARK13","HARDTREE_DARK14","HARDTREE_DARK15","HARDTREE_DARK16","HARDTREE_DARK17","HARDTREE_DARK18","HARDTREE_DARK19","HARDTREE_DARK20"}) +defineTile('^', "GRASS_DARK1", nil, nil, {random_filter={add_levels=5}}) +defineTile('#', "GRASS_DARK1", nil, {random_filter={name="honey tree"}}) +defineTile('q', "GRASS_DARK1", {random_filter={add_levels=10}}, {random_filter={name="brown bear", add_levels=10}}) +defineTile('Q', "GRASS_DARK1", {random_filter={add_levels=20}}, {random_filter={name="grizzly bear", add_levels=20}}) + +startx = 2 +starty = 10 + +return { +[[XXXXXXXXXX]], +[[XXX XXXX]], +[[XX #q# XXX]], +[[XX qQq XXX]], +[[XX #q# XXX]], +[[XXX XXXX]], +[[XXXX XXXXX]], +[[XXXX XXX]], +[[XXXXXX!XXX]], +[[XX^^^^ XXX]], +[[XX XXXXXXX]], +} diff --git a/game/modules/tome/data/rooms/greater_vault.lua b/game/modules/tome/data/rooms/greater_vault.lua index 3a7a73e901..7fbe26d6c6 100644 --- a/game/modules/tome/data/rooms/greater_vault.lua +++ b/game/modules/tome/data/rooms/greater_vault.lua @@ -23,7 +23,7 @@ local list = { } return function(gen, id, lev, old_lev) - local vaultid = rng.table(gen.data.vaults_list or list) + local vaultid = rng.table(gen.data.greater_vaults_list or list) local vault_map = engine.Map.new(max_w, max_h) local Static = require("engine.generator.map.Static") local data = table.clone(gen.data) diff --git a/game/modules/tome/data/rooms/lesser_vault.lua b/game/modules/tome/data/rooms/lesser_vault.lua new file mode 100644 index 0000000000..d1a5c0cf81 --- /dev/null +++ b/game/modules/tome/data/rooms/lesser_vault.lua @@ -0,0 +1,56 @@ +-- ToME - Tales of Middle-Earth +-- 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 + +local max_w, max_h = 50, 50 +local list = { + "honey_glade", +} + +return function(gen, id, lev, old_lev) + local vaultid = rng.table(gen.data.lesser_vaults_list or list) + local vault_map = engine.Map.new(max_w, max_h) + local Static = require("engine.generator.map.Static") + local data = table.clone(gen.data) + data.map = "vaults/"..vaultid + + local old_map = gen.level.map + local old_game_level = game.level + game.level = gen.level + gen.level.map = vault_map + local vault = Static.new(gen.zone, vault_map, gen.level, data) + vault:generate(lev, old_lev) + game.level = old_game_level + gen.level.map = old_map + + local w = vault_map.w + local h = vault_map.h + return { name="lesser_vault-"..vaultid.."-"..w.."x"..h, w=w, h=h, generator = function(self, x, y, is_lit) + gen.map:import(vault_map, x, y) + vault_map:close() + -- Make it a room, and make it special so that we do not tunnel through + for i = x, x + w - 1 do for j = y, y + h - 1 do + gen.map.room_map[i][j].special = true + gen.map.room_map[i][j].room = id + end end + if vault.gen_map.startx and vault.gen_map.starty then + gen.spots[#gen.spots+1] = {x=vault.gen_map.startx + x, y=vault.gen_map.starty + y, check_connectivity="entrance", type="vault", subtype="lesser"} + return vault.gen_map.startx + x, vault.gen_map.starty + y + end + end} +end diff --git a/game/modules/tome/data/zones/eruan/grids.lua b/game/modules/tome/data/zones/eruan/grids.lua index 42797611be..cab6da50e5 100644 --- a/game/modules/tome/data/zones/eruan/grids.lua +++ b/game/modules/tome/data/zones/eruan/grids.lua @@ -19,7 +19,9 @@ load("/data/general/grids/basic.lua") load("/data/general/grids/water.lua") +load("/data/general/grids/forest.lua") load("/data/general/grids/sand.lua") +load("/data/general/grids/mountain.lua") newEntity{ define_as = "MOUNT_DOOM_PORTAL", diff --git a/game/modules/tome/data/zones/eruan/zone.lua b/game/modules/tome/data/zones/eruan/zone.lua index 7695e69820..f8e108d018 100644 --- a/game/modules/tome/data/zones/eruan/zone.lua +++ b/game/modules/tome/data/zones/eruan/zone.lua @@ -25,7 +25,7 @@ return { decay = {300, 800}, actor_adjust_level = function(zone, level, e) return zone.base_level + e:getRankLevelAdjust() + level.level-1 + rng.range(-1,2) end, width = 50, height = 50, --- all_remembered = true, + all_remembered = true, all_lited = true, persistant = "zone", ambiant_music = "Bazaar of Tal-Mashad.ogg", @@ -45,6 +45,11 @@ return { size = {w=25, h=25}, pond = {{0.6, "DEEP_WATER"}, {0.8, "SHALLOW_WATER"}}, }, + + nb_rooms = {1,2}, + rooms = {"greater_vault"}, + greater_vaults_list = {"dragon_lair"}, + lite_room_chance = 100, }, actor = { class = "engine.generator.actor.Random", diff --git a/game/modules/tome/data/zones/infinite-dungeon/zone.lua b/game/modules/tome/data/zones/infinite-dungeon/zone.lua index 43ffed9202..7ec6a03f35 100644 --- a/game/modules/tome/data/zones/infinite-dungeon/zone.lua +++ b/game/modules/tome/data/zones/infinite-dungeon/zone.lua @@ -36,7 +36,7 @@ return { -- rooms = {"simple", "pilar", {"money_vault",5}}, rooms = {"simple", "greater_vault"}, rooms_config = {pit={filters={{type="undead"}}}}, - vaults_list = {"double-t","crypt","treasure1","diggers"}, + greater_vaults_list = {"double-t","crypt","treasure1","diggers"}, lite_room_chance = 50, ['.'] = "FLOOR", ['#'] = "WALL", diff --git a/game/modules/tome/data/zones/old-forest/zone.lua b/game/modules/tome/data/zones/old-forest/zone.lua index 00e54e30ff..e5d4fabe68 100644 --- a/game/modules/tome/data/zones/old-forest/zone.lua +++ b/game/modules/tome/data/zones/old-forest/zone.lua @@ -34,8 +34,9 @@ return { class = "engine.generator.map.Roomer", nb_rooms = 10, edge_entrances = {6,4}, - rooms = {"forest_clearing"}, + rooms = {"forest_clearing", {"lesser_vault",8}}, rooms_config = {forest_clearing={pit_chance=5, filters={{type="insect", subtype="ant"}, {type="insect"}, {type="animal", subtype="snake"}, {type="animal", subtype="canine"}}}}, + lesser_vaults_list = {"honey_glade_dark"}, ['.'] = "GRASS_DARK1", ['#'] = {"TREE_DARK1","TREE_DARK2","TREE_DARK3","TREE_DARK4","TREE_DARK5","TREE_DARK6","TREE_DARK7","TREE_DARK8","TREE_DARK9","TREE_DARK10","TREE_DARK11","TREE_DARK12","TREE_DARK13","TREE_DARK14","TREE_DARK15","TREE_DARK16","TREE_DARK17","TREE_DARK18","TREE_DARK19","TREE_DARK20",}, up = "UP", diff --git a/game/modules/tome/data/zones/tol-falas/zone.lua b/game/modules/tome/data/zones/tol-falas/zone.lua index f175ede5e4..a2847f8e14 100644 --- a/game/modules/tome/data/zones/tol-falas/zone.lua +++ b/game/modules/tome/data/zones/tol-falas/zone.lua @@ -35,7 +35,7 @@ return { nb_rooms = 10, rooms = {"simple", "pilar", {"money_vault",5}, {"pit",7}, {"greater_vault",8}}, rooms_config = {pit={filters={{type="undead"}}}}, - vaults_list = {"double-t","crypt","treasure1","diggers"}, + greater_vaults_list = {"double-t","crypt","treasure1","diggers"}, lite_room_chance = 100, ['.'] = "FLOOR", ['#'] = "WALL", @@ -45,7 +45,7 @@ return { }, actor = { class = "engine.generator.actor.Random", - nb_npc = {0, 0}, + nb_npc = {20, 30}, guardian = "THE_MASTER", }, object = { diff --git a/game/modules/tome/data/zones/trollshaws/zone.lua b/game/modules/tome/data/zones/trollshaws/zone.lua index 3aa79d4782..8fcd3153a4 100644 --- a/game/modules/tome/data/zones/trollshaws/zone.lua +++ b/game/modules/tome/data/zones/trollshaws/zone.lua @@ -45,6 +45,11 @@ return { size = {w=25, h=25}, pond = {{0.6, "DEEP_WATER"}, {0.8, "SHALLOW_WATER"}}, }, + + nb_rooms = {0,0,0,0,1}, + rooms = {"lesser_vault"}, + greater_vaults_list = {"honey_tree"}, + lite_room_chance = 100, }, actor = { class = "engine.generator.actor.Random", -- GitLab