From 783a5d86667e0cac6d13e5064afc82a2f1818303 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Tue, 20 Aug 2019 20:16:11 +0200 Subject: [PATCH 1/4] Add desert stone pyramids (still a bit buggy) --- init.lua | 11 +++++++---- room.lua | 40 ++++++++++++++++++++++++++++------------ 2 files changed, 35 insertions(+), 16 deletions(-) diff --git a/init.lua b/init.lua index 2848caa..193837f 100644 --- a/init.lua +++ b/init.lua @@ -35,7 +35,7 @@ end function tsm_pyramids.fill_chest(pos, stype, flood_sand) minetest.after(2, function() local sand = "default:sand" - if stype == "desert" then + if stype == "desert_sandstone" or stype == "desert_stone" then sand = "default:desert_sand" end local n = minetest.get_node(pos) @@ -262,7 +262,7 @@ minetest.register_on_generated(function(minp, maxp, seed) end if sand == "default:desert_sand" then -- Desert sandstone pyramid - minetest.after(0.8, make, p2, "default:desert_sandstone_brick", "default:desert_sandstone", "default:desert_stone", "default:desert_sand", "desert") + minetest.after(0.8, make, p2, "default:desert_sandstone_brick", "default:desert_sandstone", "default:desert_stone", "default:desert_sand", "desert_sandstone") else -- Sandstone pyramid minetest.after(0.8, make, p2, "default:sandstonebrick", "default:sandstone", "default:sandstone", "default:sand", "sandstone") @@ -295,7 +295,7 @@ minetest.register_chatcommand("spawnpyramid", { end local pos = player:get_pos() pos = vector.round(pos) - local s = math.random(1,2) + local s = math.random(1,3) local r = tonumber(param) local room_id if r then @@ -303,10 +303,13 @@ minetest.register_chatcommand("spawnpyramid", { end local ok, msg pos = vector.add(pos, {x=-11, y=-1, z=0}) + s = 3 if s == 1 then ok, msg = make(pos, "default:sandstonebrick", "default:sandstone", "default:sandstone", "default:sand", "sandstone", room_id) + elseif s == 2 then + ok, msg = make(pos, "default:desert_sandstone_brick", "default:desert_sandstone", "default:desert_stone", "default:desert_sand", "desert_sandstone", room_id) else - ok, msg = make(pos, "default:desert_sandstone_brick", "default:desert_sandstone", "default:desert_stone", "default:desert_sand", "desert", room_id) + ok, msg = make(pos, "default:desert_stonebrick", "default:desert_stone_block", "default:desert_stone", "default:desert_sand", "desert_stone", room_id) end if ok then return true, S("Pyramid generated at @1.", minetest.pos_to_string(pos)) diff --git a/room.lua b/room.lua index 1a7ffd0..a91669b 100644 --- a/room.lua +++ b/room.lua @@ -554,13 +554,22 @@ local code_sandstone = { ["~"] = "lava_source", ["t"] = "trap", } -local code_desert = table.copy(code_sandstone) -code_desert["s"] = "desert_sandstone" -code_desert["1"] = "deco_stone4" -code_desert["2"] = "deco_stone5" -code_desert["3"] = "deco_stone6" -code_desert["S"] = "desert_sandstone_brick" -code_desert["t"] = "desert_trap" +local code_desert_sandstone = table.copy(code_sandstone) +code_desert_sandstone["s"] = "desert_sandstone" +code_desert_sandstone["1"] = "deco_stone4" +code_desert_sandstone["2"] = "deco_stone5" +code_desert_sandstone["3"] = "deco_stone6" +code_desert_sandstone["S"] = "desert_sandstone_brick" +code_desert_sandstone["t"] = "desert_trap" + +local code_desert_stone = table.copy(code_sandstone) +code_desert_stone["s"] = "desert_stone_block" +code_desert_stone["1"] = "desert_stone_block" +code_desert_stone["2"] = "desert_stone_block" +code_desert_stone["3"] = "desert_stone_block" +code_desert_stone["S"] = "desert_stonebrick" +-- TODO: test +code_desert_stone["t"] = "air" local function replace(str, iy, code_table, deco, column_style) local out = "default:" @@ -589,8 +598,10 @@ end function tsm_pyramids.make_room(pos, stype, room_id) local code_table = code_sandstone - if stype == "desert" then - code_table = code_desert + if stype == "desert_sandstone" then + code_table = code_desert_sandstone + elseif stype == "desert_stone" then + code_table = code_desert_stone end -- Select random deco block local deco_ids = {"1", "2", "3"} @@ -611,6 +622,9 @@ function tsm_pyramids.make_room(pos, stype, room_id) local room = room_types[room_id] local chests = {} local column_style = math.random(0,4) + if stype == "desert_stone" then + column_style = 0 + end if room.style == "yrepeat" then for iy=0,4,1 do for ix=0,8,1 do @@ -673,8 +687,10 @@ end function tsm_pyramids.make_traps(pos, stype) local code_table = code_sandstone - if stype == "desert" then - code_table = code_desert + if stype == "desert_sandstone" then + code_table = code_desert_sandstone + elseif stype == "desert_stone" then + code_table = code_desert_stone end shuffle_traps(math.random(10,100)) local hole = {x=pos.x+7,y=pos.y, z=pos.z+7} @@ -692,7 +708,7 @@ end function tsm_pyramids.flood_sand(pos, stype) local set_to_sand = {} local nn = "default:sand" - if stype == "desert" then + if stype == "desert_sandstone" or stype == "desert_stone" then nn = "default:desert_sand" end local hole = {x=pos.x+7,y=pos.y+1, z=pos.z+7} From 461326ad32d6216d51af957b9dcf0ecf12a8a3c9 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Tue, 20 Aug 2019 20:32:14 +0200 Subject: [PATCH 2/4] Generate desert pyramids --- init.lua | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/init.lua b/init.lua index 193837f..d46a883 100644 --- a/init.lua +++ b/init.lua @@ -204,7 +204,7 @@ minetest.register_on_generated(function(minp, maxp, seed) if noise1 > 0.25 or noise1 < -0.26 then local mpos = {x=math.random(minp.x,maxp.x), y=math.random(minp.y,maxp.y), z=math.random(minp.z,maxp.z)} - local sands = {"default:sand", "default:desert_sand"} + local sands = {"default:sand", "default:desert_sand", "default:desert_stone"} local p2 local psand = {} local sand @@ -257,15 +257,18 @@ minetest.register_on_generated(function(minp, maxp, seed) if math.random(0,10) > 7 then return end - if (mg_name == "v6" and math.random(1, 2) == 1) then + if (mg_name == "v6" and sand == "default:desert_sand" and math.random(1, 2) == 1) then sand = "default:sand" end if sand == "default:desert_sand" then -- Desert sandstone pyramid minetest.after(0.8, make, p2, "default:desert_sandstone_brick", "default:desert_sandstone", "default:desert_stone", "default:desert_sand", "desert_sandstone") - else + elseif sand == "default:sand" then -- Sandstone pyramid minetest.after(0.8, make, p2, "default:sandstonebrick", "default:sandstone", "default:sandstone", "default:sand", "sandstone") + else + -- Desert stone pyramid + minetest.after(0.8, make, p2, "default:desert_stonebrick", "default:desert_stone_block", "default:desert_stone", "default:desert_sand", "desert_stone") end end end) @@ -303,7 +306,6 @@ minetest.register_chatcommand("spawnpyramid", { end local ok, msg pos = vector.add(pos, {x=-11, y=-1, z=0}) - s = 3 if s == 1 then ok, msg = make(pos, "default:sandstonebrick", "default:sandstone", "default:sandstone", "default:sand", "sandstone", room_id) elseif s == 2 then From 7b0c42954f97578a7df645f879b32dfffc7c67f9 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Tue, 20 Aug 2019 20:36:50 +0200 Subject: [PATCH 3/4] Fix broken desert stone pyramid trap --- room.lua | 66 ++++++++++++++++++++++++++------------------------------ 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/room.lua b/room.lua index a91669b..bb40b3a 100644 --- a/room.lua +++ b/room.lua @@ -542,58 +542,54 @@ local layout_traps_template = { local code_sandstone = { [" "] = "air", - ["s"] = "sandstone", - ["S"] = "sandstonebrick", - ["1"] = "deco_stone1", - ["2"] = "deco_stone2", - ["3"] = "deco_stone3", - ["^"] = "chest", - ["<"] = "chest", - [">"] = "chest", - ["v"] = "chest", - ["~"] = "lava_source", - ["t"] = "trap", + ["s"] = "default:sandstone", + ["S"] = "default:sandstonebrick", + ["1"] = "tsm_pyramids:deco_stone1", + ["2"] = "tsm_pyramids:deco_stone2", + ["3"] = "tsm_pyramids:deco_stone3", + ["^"] = "default:chest", + ["<"] = "default:chest", + [">"] = "default:chest", + ["v"] = "default:chest", + ["~"] = "default:lava_source", + ["t"] = "tsm_pyramids:trap", } local code_desert_sandstone = table.copy(code_sandstone) -code_desert_sandstone["s"] = "desert_sandstone" -code_desert_sandstone["1"] = "deco_stone4" -code_desert_sandstone["2"] = "deco_stone5" -code_desert_sandstone["3"] = "deco_stone6" -code_desert_sandstone["S"] = "desert_sandstone_brick" -code_desert_sandstone["t"] = "desert_trap" +code_desert_sandstone["s"] = "default:desert_sandstone" +code_desert_sandstone["1"] = "tsm_pyramids:deco_stone4" +code_desert_sandstone["2"] = "tsm_pyramids:deco_stone5" +code_desert_sandstone["3"] = "tsm_pyramids:deco_stone6" +code_desert_sandstone["S"] = "default:desert_sandstone_brick" +code_desert_sandstone["t"] = "tsm_pyramids:desert_trap" local code_desert_stone = table.copy(code_sandstone) -code_desert_stone["s"] = "desert_stone_block" -code_desert_stone["1"] = "desert_stone_block" -code_desert_stone["2"] = "desert_stone_block" -code_desert_stone["3"] = "desert_stone_block" -code_desert_stone["S"] = "desert_stonebrick" --- TODO: test +code_desert_stone["s"] = "default:desert_stone_block" +code_desert_stone["1"] = "default:desert_stone_block" +code_desert_stone["2"] = "default:desert_stone_block" +code_desert_stone["3"] = "default:desert_stone_block" +code_desert_stone["S"] = "default:desert_stonebrick" +-- TODO: Add desert stone trap? code_desert_stone["t"] = "air" local function replace(str, iy, code_table, deco, column_style) - local out = "default:" if iy < 4 and (str == "<" or str == ">" or str == "^" or str == "v") then str = " " end if column_style == 1 or column_style == 2 then - if iy == 0 and str == "s" then out = "tsm_pyramids:" str = deco[1] end - if iy == 3 and str == "s" then out = "tsm_pyramids:" str = deco[2] end + if iy == 0 and str == "s" then str = deco[1] end + if iy == 3 and str == "s" then str = deco[2] end elseif column_style == 3 then - if iy == 0 and str == "s" then out = "tsm_pyramids:" str = deco[1] end - if iy == 2 and str == "s" then out = "tsm_pyramids:" str = deco[2] end + if iy == 0 and str == "s" then str = deco[1] end + if iy == 2 and str == "s" then str = deco[2] end elseif column_style == 4 then - if iy == 2 and str == "s" then out = "tsm_pyramids:" str = deco[1] end + if iy == 2 and str == "s" then str = deco[1] end end - if str == " " then out = "" end - return out..code_table[str] + return code_table[str] end local function replace2(str, iy, code_table) - local out = "default:" - if iy == 0 and str == "~" then out = "tsm_pyramids:" str = "t" + if iy == 0 and str == "~" then str = "t" elseif iy < 3 and str == "~" then str = " " end - if str == " " then out = "" end - return out..code_table[str] + return code_table[str] end function tsm_pyramids.make_room(pos, stype, room_id) From 08a750820bc48987ce5a3e6275c6ba123d1d23cc Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Tue, 20 Aug 2019 20:47:11 +0200 Subject: [PATCH 4/4] Don't use sand in desert sand pyramids --- init.lua | 21 ++++++++++++++------- room.lua | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/init.lua b/init.lua index d46a883..5c7e520 100644 --- a/init.lua +++ b/init.lua @@ -105,7 +105,7 @@ local function make_entrance(pos, brick, sand, flood_sand) for iz=0,6,1 do local sand_height = math.random(1,max_sand_height) for iy=2,3,1 do - if flood_sand and iy <= sand_height and iz >= 3 then + if flood_sand and sand ~= "ignore" and iy <= sand_height and iz >= 3 then minetest.set_node({x=gang.x+1,y=gang.y+iy,z=gang.z+iz}, {name=sand}) else minetest.remove_node({x=gang.x+1,y=gang.y+iy,z=gang.z+iz}) @@ -131,10 +131,12 @@ local function make_pyramid(pos, brick, sandstone, stone, sand) make_foundation_part({x=pos.x+ix,y=pos.y,z=pos.z+iz}, set_to_stone) end table.insert(set_to_brick, {x=pos.x+ix,y=pos.y+iy,z=pos.z+iz}) - for yy=1,10-iy,1 do - local n = minetest.get_node({x=pos.x+ix,y=pos.y+iy+yy,z=pos.z+iz}) - if n and n.name and n.name == stone then - table.insert(set_to_sand, {x=pos.x+ix,y=pos.y+iy+yy,z=pos.z+iz}) + if sand ~= "ignore" then + for yy=1,10-iy,1 do + local n = minetest.get_node({x=pos.x+ix,y=pos.y+iy+yy,z=pos.z+iz}) + if n and n.name and n.name == stone then + table.insert(set_to_sand, {x=pos.x+ix,y=pos.y+iy+yy,z=pos.z+iz}) + end end end end @@ -142,7 +144,9 @@ local function make_pyramid(pos, brick, sandstone, stone, sand) end minetest.bulk_set_node(set_to_stone , {name=stone}) minetest.bulk_set_node(set_to_brick, {name=brick}) - minetest.bulk_set_node(set_to_sand, {name=sand}) + if sand ~= "ignore" then + minetest.bulk_set_node(set_to_sand, {name=sand}) + end end local function make(pos, brick, sandstone, stone, sand, ptype, room_id) @@ -307,11 +311,14 @@ minetest.register_chatcommand("spawnpyramid", { local ok, msg pos = vector.add(pos, {x=-11, y=-1, z=0}) if s == 1 then + -- Sandstone ok, msg = make(pos, "default:sandstonebrick", "default:sandstone", "default:sandstone", "default:sand", "sandstone", room_id) elseif s == 2 then + -- Desert sandstone ok, msg = make(pos, "default:desert_sandstone_brick", "default:desert_sandstone", "default:desert_stone", "default:desert_sand", "desert_sandstone", room_id) else - ok, msg = make(pos, "default:desert_stonebrick", "default:desert_stone_block", "default:desert_stone", "default:desert_sand", "desert_stone", room_id) + -- Desert stone + ok, msg = make(pos, "default:desert_stonebrick", "default:desert_stone_block", "default:desert_stone", "ignore", "desert_stone", room_id) end if ok then return true, S("Pyramid generated at @1.", minetest.pos_to_string(pos)) diff --git a/room.lua b/room.lua index bb40b3a..fc9cb1c 100644 --- a/room.lua +++ b/room.lua @@ -648,7 +648,7 @@ function tsm_pyramids.make_room(pos, stype, room_id) else minetest.log("error", "Invalid pyramid room style! room type ID="..r) end - local sanded = room.flood_sand ~= false and math.random(1,8) == 1 + local sanded = room.flood_sand ~= false and stype ~= "desert_stone" and math.random(1,8) == 1 if #chests > 0 then -- Make at least 8 attempts to fill chests local filled = 0