Dungeon hardening, part 1

This commit is contained in:
Duane Robertson 2016-05-27 08:05:51 -05:00
parent d02f04504b
commit 6225566875
7 changed files with 76 additions and 10 deletions

View file

@ -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)

View file

@ -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

View file

@ -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", {

View file

@ -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", {

View file

@ -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

View file

@ -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"},

View file

@ -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)