Merge branch 'desert_stone'

This commit is contained in:
Wuzzy 2019-08-23 12:58:27 +02:00
commit e40a41e473
2 changed files with 76 additions and 50 deletions

View File

@ -35,7 +35,7 @@ end
function tsm_pyramids.fill_chest(pos, stype, flood_sand) function tsm_pyramids.fill_chest(pos, stype, flood_sand)
minetest.after(2, function() minetest.after(2, function()
local sand = "default:sand" local sand = "default:sand"
if stype == "desert" then if stype == "desert_sandstone" or stype == "desert_stone" then
sand = "default:desert_sand" sand = "default:desert_sand"
end end
local n = minetest.get_node(pos) local n = minetest.get_node(pos)
@ -123,7 +123,7 @@ local function make_entrance(pos, rot, brick, sand, flood_sand)
for iy=2,3,1 do for iy=2,3,1 do
-- dig hallway -- dig hallway
local way_dir = vector.add(vector.add(way, {x=0,y=iy,z=0}), vector.multiply(roffset, ie)) local way_dir = vector.add(vector.add(way, {x=0,y=iy,z=0}), vector.multiply(roffset, ie))
if flood_sand and iy <= sand_height and ie >= 3 then if flood_sand and sand ~= "ignore" and iy <= sand_height and ie >= 3 then
minetest.set_node(way_dir, {name=sand}) minetest.set_node(way_dir, {name=sand})
else else
minetest.remove_node(way_dir) minetest.remove_node(way_dir)
@ -156,10 +156,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) make_foundation_part({x=pos.x+ix,y=pos.y,z=pos.z+iz}, set_to_stone)
end end
table.insert(set_to_brick, {x=pos.x+ix,y=pos.y+iy,z=pos.z+iz}) table.insert(set_to_brick, {x=pos.x+ix,y=pos.y+iy,z=pos.z+iz})
for yy=1,10-iy,1 do if sand ~= "ignore" then
local n = minetest.get_node({x=pos.x+ix,y=pos.y+iy+yy,z=pos.z+iz}) for yy=1,10-iy,1 do
if n and n.name and n.name == stone then local n = minetest.get_node({x=pos.x+ix,y=pos.y+iy+yy,z=pos.z+iz})
table.insert(set_to_sand, {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 end
end end
@ -167,7 +169,9 @@ local function make_pyramid(pos, brick, sandstone, stone, sand)
end end
minetest.bulk_set_node(set_to_stone , {name=stone}) minetest.bulk_set_node(set_to_stone , {name=stone})
minetest.bulk_set_node(set_to_brick, {name=brick}) 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 end
local function make(pos, brick, sandstone, stone, sand, ptype, room_id) local function make(pos, brick, sandstone, stone, sand, ptype, room_id)
@ -235,7 +239,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
if noise1 > 0.25 or noise1 < -0.26 then 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 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 p2
local psand = {} local psand = {}
local sand local sand
@ -288,15 +292,18 @@ minetest.register_on_generated(function(minp, maxp, seed)
if math.random(0,10) > 7 then if math.random(0,10) > 7 then
return return
end 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" sand = "default:sand"
end end
if sand == "default:desert_sand" then if sand == "default:desert_sand" then
-- Desert sandstone pyramid -- 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 elseif sand == "default:sand" then
-- Sandstone pyramid -- Sandstone pyramid
minetest.after(0.8, make, p2, "default:sandstonebrick", "default:sandstone", "default:sandstone", "default:sand", "sandstone") 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 end
end) end)
@ -326,7 +333,7 @@ minetest.register_chatcommand("spawnpyramid", {
end end
local pos = player:get_pos() local pos = player:get_pos()
pos = vector.round(pos) pos = vector.round(pos)
local s = math.random(1,2) local s = math.random(1,3)
local r = tonumber(param) local r = tonumber(param)
local room_id local room_id
if r then if r then
@ -335,9 +342,14 @@ minetest.register_chatcommand("spawnpyramid", {
local ok, msg local ok, msg
pos = vector.add(pos, {x=-11, y=-1, z=0}) pos = vector.add(pos, {x=-11, y=-1, z=0})
if s == 1 then if s == 1 then
-- Sandstone
ok, msg = make(pos, "default:sandstonebrick", "default:sandstone", "default:sandstone", "default:sand", "sandstone", room_id) 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 else
ok, msg = make(pos, "default:desert_sandstone_brick", "default:desert_sandstone", "default:desert_stone", "default:desert_sand", "desert", room_id) -- Desert stone
ok, msg = make(pos, "default:desert_stonebrick", "default:desert_stone_block", "default:desert_stone", "ignore", "desert_stone", room_id)
end end
if ok then if ok then
return true, S("Pyramid generated at @1.", minetest.pos_to_string(pos)) return true, S("Pyramid generated at @1.", minetest.pos_to_string(pos))

View File

@ -544,49 +544,54 @@ local layout_traps_template = {
local code_sandstone = { local code_sandstone = {
[" "] = "air", [" "] = "air",
["s"] = "sandstone", ["s"] = "default:sandstone",
["S"] = "sandstonebrick", ["S"] = "default:sandstonebrick",
["1"] = "deco_stone1", ["1"] = "tsm_pyramids:deco_stone1",
["2"] = "deco_stone2", ["2"] = "tsm_pyramids:deco_stone2",
["3"] = "deco_stone3", ["3"] = "tsm_pyramids:deco_stone3",
["^"] = "chest", ["^"] = "default:chest",
["<"] = "chest", ["<"] = "default:chest",
[">"] = "chest", [">"] = "default:chest",
["v"] = "chest", ["v"] = "default:chest",
["~"] = "lava_source", ["~"] = "default:lava_source",
["t"] = "trap", ["t"] = "tsm_pyramids:trap",
} }
local code_desert = table.copy(code_sandstone) local code_desert_sandstone = table.copy(code_sandstone)
code_desert["s"] = "desert_sandstone" code_desert_sandstone["s"] = "default:desert_sandstone"
code_desert["1"] = "deco_stone4" code_desert_sandstone["1"] = "tsm_pyramids:deco_stone4"
code_desert["2"] = "deco_stone5" code_desert_sandstone["2"] = "tsm_pyramids:deco_stone5"
code_desert["3"] = "deco_stone6" code_desert_sandstone["3"] = "tsm_pyramids:deco_stone6"
code_desert["S"] = "desert_sandstone_brick" code_desert_sandstone["S"] = "default:desert_sandstone_brick"
code_desert["t"] = "desert_trap" code_desert_sandstone["t"] = "tsm_pyramids:desert_trap"
local code_desert_stone = table.copy(code_sandstone)
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 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 iy < 4 and (str == "<" or str == ">" or str == "^" or str == "v") then str = " " end
if column_style == 1 or column_style == 2 then 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 == 0 and str == "s" then str = deco[1] end
if iy == 3 and str == "s" then out = "tsm_pyramids:" str = deco[2] end if iy == 3 and str == "s" then str = deco[2] end
elseif column_style == 3 then elseif column_style == 3 then
if iy == 0 and str == "s" then out = "tsm_pyramids:" str = deco[1] end if iy == 0 and str == "s" then str = deco[1] end
if iy == 2 and str == "s" then out = "tsm_pyramids:" str = deco[2] end if iy == 2 and str == "s" then str = deco[2] end
elseif column_style == 4 then 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 end
if str == " " then out = "" end return code_table[str]
return out..code_table[str]
end end
local function replace2(str, iy, code_table) local function replace2(str, iy, code_table)
local out = "default:" if iy == 0 and str == "~" then str = "t"
if iy == 0 and str == "~" then out = "tsm_pyramids:" str = "t"
elseif iy < 3 and str == "~" then str = " " end elseif iy < 3 and str == "~" then str = " " end
if str == " " then out = "" end return code_table[str]
return out..code_table[str]
end end
local function get_flat_index(x, y, width) local function get_flat_index(x, y, width)
@ -629,8 +634,10 @@ end
-- rotations: Number of times to rotate the room (0-3) -- rotations: Number of times to rotate the room (0-3)
function tsm_pyramids.make_room(pos, stype, room_id, rotations) function tsm_pyramids.make_room(pos, stype, room_id, rotations)
local code_table = code_sandstone local code_table = code_sandstone
if stype == "desert" then if stype == "desert_sandstone" then
code_table = code_desert code_table = code_desert_sandstone
elseif stype == "desert_stone" then
code_table = code_desert_stone
end end
-- Select random deco block -- Select random deco block
local deco_ids = {"1", "2", "3"} local deco_ids = {"1", "2", "3"}
@ -650,8 +657,13 @@ function tsm_pyramids.make_room(pos, stype, room_id, rotations)
end end
local room = table.copy(room_types[room_id]) local room = table.copy(room_types[room_id])
local chests = {} local chests = {}
local column_style = math.random(0,4) local column_style
local layout = rotate_layout(room.layout, ROOM_WIDTH, rotations) local layout = rotate_layout(room.layout, ROOM_WIDTH, rotations)
if stype == "desert_stone" then
column_style = 0
else
column_style = math.random(0,4)
end
if room.style == "yrepeat" then if room.style == "yrepeat" then
for iy=0,4,1 do for iy=0,4,1 do
for ix=0,8,1 do for ix=0,8,1 do
@ -679,7 +691,7 @@ function tsm_pyramids.make_room(pos, stype, room_id, rotations)
else else
minetest.log("error", "Invalid pyramid room style! room type ID="..r) minetest.log("error", "Invalid pyramid room style! room type ID="..r)
end 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 if #chests > 0 then
-- Make at least 8 attempts to fill chests -- Make at least 8 attempts to fill chests
local filled = 0 local filled = 0
@ -714,8 +726,10 @@ end
function tsm_pyramids.make_traps(pos, stype, rotations) function tsm_pyramids.make_traps(pos, stype, rotations)
local code_table = code_sandstone local code_table = code_sandstone
if stype == "desert" then if stype == "desert_sandstone" then
code_table = code_desert code_table = code_desert_sandstone
elseif stype == "desert_stone" then
code_table = code_desert_stone
end end
shuffle_traps(math.random(10,100)) shuffle_traps(math.random(10,100))
local hole = {x=pos.x+7,y=pos.y, z=pos.z+7} local hole = {x=pos.x+7,y=pos.y, z=pos.z+7}
@ -734,7 +748,7 @@ end
function tsm_pyramids.flood_sand(pos, stype) function tsm_pyramids.flood_sand(pos, stype)
local set_to_sand = {} local set_to_sand = {}
local nn = "default:sand" local nn = "default:sand"
if stype == "desert" then if stype == "desert_sandstone" or stype == "desert_stone" then
nn = "default:desert_sand" nn = "default:desert_sand"
end end
local hole = {x=pos.x+7,y=pos.y+1, z=pos.z+7} local hole = {x=pos.x+7,y=pos.y+1, z=pos.z+7}