Dungeon hardening, part 1
This commit is contained in:
parent
d02f04504b
commit
6225566875
7 changed files with 76 additions and 10 deletions
18
abms.lua
18
abms.lua
|
@ -12,6 +12,24 @@ minetest.register_globalstep(function(dtime)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local pos
|
||||||
|
for k, v in pairs(minetest.luaentities) do
|
||||||
|
if not v.fortress_check then
|
||||||
|
pos = v.object:getpos()
|
||||||
|
if fun_caves.is_fortress(pos) and v.hp_max and v.object and v.health and v.damage then
|
||||||
|
local factor = 1.5 + (pos.y / -3100)
|
||||||
|
v.hp_max = math.floor(v.hp_max * factor)
|
||||||
|
v.damage = math.floor(v.damage * factor)
|
||||||
|
print("Promoting "..v.name..": "..v.hp_max.." at "..pos.x..","..pos.y..","..pos.z)
|
||||||
|
v.object:set_hp(v.hp_max)
|
||||||
|
v.health = v.hp_max
|
||||||
|
v.fortress_check = true
|
||||||
|
check_for_death(v)
|
||||||
|
--print(dump(v.damage))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
for id, player in pairs(minetest.get_connected_players()) do
|
for id, player in pairs(minetest.get_connected_players()) do
|
||||||
minp = vector.subtract(player:getpos(), 0.5)
|
minp = vector.subtract(player:getpos(), 0.5)
|
||||||
maxp = vector.add(player:getpos(), 0.5)
|
maxp = vector.add(player:getpos(), 0.5)
|
||||||
|
|
|
@ -9,6 +9,9 @@ fun_caves.fortress = function(node, data, area, minp, maxp, level)
|
||||||
local n = 16
|
local n = 16
|
||||||
local walls = {}
|
local walls = {}
|
||||||
local a, b, c, i, j, u, v, x, y, z, ivm, set, dox, doz
|
local a, b, c, i, j, u, v, x, y, z, ivm, set, dox, doz
|
||||||
|
local floor = node('fun_caves:dungeon_floor_1')
|
||||||
|
local outer_wall = node('fun_caves:dungeon_wall_2')
|
||||||
|
local inner_wall = node('fun_caves:dungeon_wall_1')
|
||||||
|
|
||||||
for y2 = 0, n-1 do
|
for y2 = 0, n-1 do
|
||||||
--for y2 = 0, 0 do
|
--for y2 = 0, 0 do
|
||||||
|
@ -27,12 +30,12 @@ fun_caves.fortress = function(node, data, area, minp, maxp, level)
|
||||||
if math.floor((z - minp.z) / 5) == doz and math.floor((x - minp.x) / 5) == dox and (z - minp.z) % 5 ~= 0 and (x - minp.x) % 5 ~= 0 and y ~= minp.y then
|
if math.floor((z - minp.z) / 5) == doz and math.floor((x - minp.x) / 5) == dox and (z - minp.z) % 5 ~= 0 and (x - minp.x) % 5 ~= 0 and y ~= minp.y then
|
||||||
data[ivm] = node("air")
|
data[ivm] = node("air")
|
||||||
else
|
else
|
||||||
data[ivm] = node('default:steelblock')
|
data[ivm] = floor
|
||||||
end
|
end
|
||||||
elseif x == minp.x or z == minp.z or x == maxp.x or z == maxp.z then
|
elseif x == minp.x or z == minp.z or x == maxp.x or z == maxp.z then
|
||||||
data[ivm] = node('default:steelblock')
|
data[ivm] = outer_wall
|
||||||
elseif (z - minp.z) % 5 == 0 or (x - minp.x) % 5 == 0 then
|
elseif (z - minp.z) % 5 == 0 or (x - minp.x) % 5 == 0 then
|
||||||
data[ivm] = node("default:sandstone")
|
data[ivm] = inner_wall
|
||||||
else
|
else
|
||||||
data[ivm] = node("air")
|
data[ivm] = node("air")
|
||||||
end
|
end
|
||||||
|
|
|
@ -121,7 +121,7 @@ mobs:register_mob("fun_caves:goblin_coal", {
|
||||||
|
|
||||||
})
|
})
|
||||||
mobs:register_egg("fun_caves:goblin_coal", "Goblin Egg (coal)", "default_mossycobble.png", 1)
|
mobs:register_egg("fun_caves:goblin_coal", "Goblin Egg (coal)", "default_mossycobble.png", 1)
|
||||||
mobs:register_spawn("fun_caves:goblin_coal", {"default:coalblock", "default:stone_with_coal"}, 100, 0, 1 * fun_caves.goblin_spawn_frequency, 3, 101)
|
mobs:register_spawn("fun_caves:goblin_coal", {"default:coalblock", "default:stone_with_coal", "group:fortress"}, 100, 0, 1 * fun_caves.goblin_spawn_frequency, 3, 101)
|
||||||
mobs:register_spawn("fun_caves:goblin_coal", {"default:mossycobble", "fun_caves:hot_cobble"}, 100, 0, 1 * fun_caves.goblin_spawn_frequency, 3, 101)
|
mobs:register_spawn("fun_caves:goblin_coal", {"default:mossycobble", "fun_caves:hot_cobble"}, 100, 0, 1 * fun_caves.goblin_spawn_frequency, 3, 101)
|
||||||
|
|
||||||
minetest.register_node("fun_caves:stone_with_coal_trap", {
|
minetest.register_node("fun_caves:stone_with_coal_trap", {
|
||||||
|
|
|
@ -120,7 +120,7 @@ mobs:register_mob("fun_caves:goblin_copper", {
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
mobs:register_egg("fun_caves:goblin_copper", "Goblin Egg (copper)", "default_mossycobble.png", 1)
|
mobs:register_egg("fun_caves:goblin_copper", "Goblin Egg (copper)", "default_mossycobble.png", 1)
|
||||||
mobs:register_spawn("fun_caves:goblin_copper", {"default:stone_with_copper"}, 100, 0, 1 * fun_caves.goblin_spawn_frequency, 3, 101)
|
mobs:register_spawn("fun_caves:goblin_copper", {"default:stone_with_copper", "group:fortress"}, 100, 0, 1 * fun_caves.goblin_spawn_frequency, 3, 101)
|
||||||
mobs:register_spawn("fun_caves:goblin_copper", {"default:mossycobble"}, 100, 0, 1 * fun_caves.goblin_spawn_frequency, 3, 101)
|
mobs:register_spawn("fun_caves:goblin_copper", {"default:mossycobble"}, 100, 0, 1 * fun_caves.goblin_spawn_frequency, 3, 101)
|
||||||
|
|
||||||
minetest.register_node("fun_caves:stone_with_copper_trap", {
|
minetest.register_node("fun_caves:stone_with_copper_trap", {
|
||||||
|
|
30
mapgen.lua
30
mapgen.lua
|
@ -1,10 +1,11 @@
|
||||||
local DEBUG = false
|
local DEBUG = true
|
||||||
|
|
||||||
local cave_noise_1 = {offset = 0, scale = 1, seed = 3901, spread = {x = 40, y = 10, z = 40}, octaves = 3, persist = 1, lacunarity = 2}
|
local cave_noise_1 = {offset = 0, scale = 1, seed = 3901, spread = {x = 40, y = 10, z = 40}, octaves = 3, persist = 1, lacunarity = 2}
|
||||||
local cave_noise_2 = {offset = 0, scale = 1, seed = -8402, spread = {x = 40, y = 20, z = 40}, octaves = 3, persist = 1, lacunarity = 2}
|
local cave_noise_2 = {offset = 0, scale = 1, seed = -8402, spread = {x = 40, y = 20, z = 40}, octaves = 3, persist = 1, lacunarity = 2}
|
||||||
local cave_noise_3 = {offset = 15, scale = 10, seed = 3721, spread = {x = 40, y = 40, z = 40}, octaves = 3, persist = 1, lacunarity = 2}
|
local cave_noise_3 = {offset = 15, scale = 10, seed = 3721, spread = {x = 40, y = 40, z = 40}, octaves = 3, persist = 1, lacunarity = 2}
|
||||||
local seed_noise = {offset = 0, scale = 32768, seed = 5202, spread = {x = 80, y = 80, z = 80}, octaves = 2, persist = 0.4, lacunarity = 2}
|
local seed_noise = {offset = 0, scale = 32768, seed = 5202, spread = {x = 80, y = 80, z = 80}, octaves = 2, persist = 0.4, lacunarity = 2}
|
||||||
local biome_noise = {offset = 0.0, scale = 1.0, spread = {x = 400, y = 400, z = 400}, seed = 903, octaves = 3, persist = 0.5, lacunarity = 2.0}
|
local biome_noise = {offset = 0.0, scale = 1.0, spread = {x = 400, y = 400, z = 400}, seed = 903, octaves = 3, persist = 0.5, lacunarity = 2.0}
|
||||||
|
local fortress_noise = {offset = 0, scale = 1, seed = -4082, spread = {x = 200, y = 200, z = 200}, octaves = 2, persist = 1, lacunarity = 2}
|
||||||
|
|
||||||
|
|
||||||
local node_cache = {}
|
local node_cache = {}
|
||||||
|
@ -103,6 +104,31 @@ end
|
||||||
-- end
|
-- end
|
||||||
--end
|
--end
|
||||||
|
|
||||||
|
fun_caves.is_fortress = function(pos)
|
||||||
|
local cs = csize
|
||||||
|
if not cs then
|
||||||
|
-- Fix this to get csize, somehow.
|
||||||
|
cs = {x=80, y=80, z=80}
|
||||||
|
end
|
||||||
|
|
||||||
|
local x = math.floor((pos.x + 33) / cs.x)
|
||||||
|
local y = math.floor((pos.y + 33) / cs.y)
|
||||||
|
local z = math.floor((pos.z + 33) / cs.z)
|
||||||
|
|
||||||
|
if y > -3 or (pos.y + 33) % cs.y > cs.y - 5 then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local n = minetest.get_perlin(fortress_noise):get3d({x=x, y=y, z=z})
|
||||||
|
n = (n * 10000) % 20
|
||||||
|
|
||||||
|
if n == 1 or DEBUG then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
local function generate(p_minp, p_maxp, seed)
|
local function generate(p_minp, p_maxp, seed)
|
||||||
minp, maxp = p_minp, p_maxp
|
minp, maxp = p_minp, p_maxp
|
||||||
|
@ -121,7 +147,7 @@ local function generate(p_minp, p_maxp, seed)
|
||||||
math.randomseed(minetest.get_perlin(seed_noise):get2d({x=minp.x, y=minp.z}))
|
math.randomseed(minetest.get_perlin(seed_noise):get2d({x=minp.x, y=minp.z}))
|
||||||
|
|
||||||
local fortress = maxp.y / 3100
|
local fortress = maxp.y / 3100
|
||||||
if maxp.y < -250 and (DEBUG or math.random(20) == 1) then
|
if fun_caves.is_fortress(minp) then
|
||||||
fun_caves.fortress(node, data, area, minp, maxp, math.ceil(maxp.y / 3100))
|
fun_caves.fortress(node, data, area, minp, maxp, math.ceil(maxp.y / 3100))
|
||||||
write = true
|
write = true
|
||||||
else
|
else
|
||||||
|
|
23
nodes.lua
23
nodes.lua
|
@ -1,6 +1,26 @@
|
||||||
|
-- dungeon floor, basic
|
||||||
|
local newnode = fun_caves.clone_node("default:stone")
|
||||||
|
newnode.description = "Dungeon Stone"
|
||||||
|
newnode.legacy_mineral = false
|
||||||
|
newnode.groups = {fortress = 1}
|
||||||
|
minetest.register_node("fun_caves:dungeon_floor_1", newnode)
|
||||||
|
|
||||||
|
-- dungeon walls, basic
|
||||||
|
local newnode = fun_caves.clone_node("default:sandstone")
|
||||||
|
newnode.description = "Dungeon Stone"
|
||||||
|
newnode.groups = {fortress = 1}
|
||||||
|
minetest.register_node("fun_caves:dungeon_wall_1", newnode)
|
||||||
|
|
||||||
|
-- dungeon walls, type 2
|
||||||
|
local newnode = fun_caves.clone_node("default:desert_stone")
|
||||||
|
newnode.description = "Dungeon Stone"
|
||||||
|
newnode.groups = {fortress = 1}
|
||||||
|
minetest.register_node("fun_caves:dungeon_wall_2", newnode)
|
||||||
|
|
||||||
|
-- ice -- add cold damage
|
||||||
minetest.add_group("default:ice", {surface_cold = 3})
|
minetest.add_group("default:ice", {surface_cold = 3})
|
||||||
|
|
||||||
--thin (transparent) ice
|
-- ice, thin -- transparent
|
||||||
minetest.register_node("fun_caves:thin_ice", {
|
minetest.register_node("fun_caves:thin_ice", {
|
||||||
description = "Thin Ice",
|
description = "Thin Ice",
|
||||||
tiles = {"caverealms_thin_ice.png"},
|
tiles = {"caverealms_thin_ice.png"},
|
||||||
|
@ -15,7 +35,6 @@ minetest.register_node("fun_caves:thin_ice", {
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
--minetest.register_node("fun_caves:bright_air", {
|
--minetest.register_node("fun_caves:bright_air", {
|
||||||
-- drawtype = "glasslike",
|
-- drawtype = "glasslike",
|
||||||
-- tiles = {"technic_light.png"},
|
-- tiles = {"technic_light.png"},
|
||||||
|
|
|
@ -47,6 +47,6 @@ mobs:register_mob("fun_caves:sand_monster", {
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
mobs:register_spawn("fun_caves:sand_monster", {"group:sand"}, 20, 0, 4000, 3, -50)
|
mobs:register_spawn("fun_caves:sand_monster", {"default:sand"}, 20, 0, 4000, 3, -50)
|
||||||
|
|
||||||
mobs:register_egg("fun_caves:sand_monster", "Deep Sand Monster", "default_sand.png", 1)
|
mobs:register_egg("fun_caves:sand_monster", "Deep Sand Monster", "default_sand.png", 1)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue