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
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
minp = vector.subtract(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 walls = {}
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, 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
data[ivm] = node("air")
else
data[ivm] = node('default:steelblock')
data[ivm] = floor
end
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
data[ivm] = node("default:sandstone")
data[ivm] = inner_wall
else
data[ivm] = node("air")
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_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)
minetest.register_node("fun_caves:stone_with_coal_trap", {

View file

@ -120,7 +120,7 @@ mobs:register_mob("fun_caves:goblin_copper", {
end,
})
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)
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_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 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 fortress_noise = {offset = 0, scale = 1, seed = -4082, spread = {x = 200, y = 200, z = 200}, octaves = 2, persist = 1, lacunarity = 2}
local node_cache = {}
@ -103,6 +104,31 @@ 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)
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}))
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))
write = true
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})
--thin (transparent) ice
-- ice, thin -- transparent
minetest.register_node("fun_caves:thin_ice", {
description = "Thin Ice",
tiles = {"caverealms_thin_ice.png"},
@ -15,7 +35,6 @@ minetest.register_node("fun_caves:thin_ice", {
paramtype = "light",
})
--minetest.register_node("fun_caves:bright_air", {
-- drawtype = "glasslike",
-- 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)