From a4c44c87176cfdc7af8e5e0949c18ee92bf55656 Mon Sep 17 00:00:00 2001 From: Juraj Vajda Date: Sat, 10 Feb 2024 16:26:57 -0500 Subject: [PATCH] 15 - initial commit --- init.lua | 1 + mapgen_mineral_waters_under.lua | 149 +++++++++++++++++- nodes_mineral_waters_under.lua | 55 +++++++ textures/everness_mineral_lava_stone.png | Bin 0 -> 2580 bytes textures/everness_mineral_lava_stone_side.png | Bin 0 -> 2033 bytes 5 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 nodes_mineral_waters_under.lua create mode 100644 textures/everness_mineral_lava_stone.png create mode 100644 textures/everness_mineral_lava_stone_side.png diff --git a/init.lua b/init.lua index 6573c60..12b7dfa 100644 --- a/init.lua +++ b/init.lua @@ -165,6 +165,7 @@ if Everness.settings.biomes.everness_mineral_waters.enabled then end if Everness.settings.biomes.everness_mineral_waters_under.enabled then + dofile(path .. '/nodes_mineral_waters_under.lua') dofile(path .. '/mapgen_mineral_waters_under.lua') end diff --git a/mapgen_mineral_waters_under.lua b/mapgen_mineral_waters_under.lua index 884ee81..e38252a 100644 --- a/mapgen_mineral_waters_under.lua +++ b/mapgen_mineral_waters_under.lua @@ -67,8 +67,155 @@ Everness:register_ore({ -- Register decorations -- - +Everness:register_decoration({ + name = 'everness:mineral_water_under_floors', + deco_type = 'simple', + place_on = { 'default:stone' }, + sidelen = 16, + place_offset_y = -1, + fill_ratio = 10, + biomes = { 'everness:mineral_waters_under' }, + y_max = y_max, + y_min = y_min, + flags = 'all_floors, force_placement', + decoration = { + 'everness:mineral_lava_stone' + }, +}) -- -- On Generated -- + +local function find_walls(cpos) + local is_wall = function(node) + return node.name ~= 'air' and node.name ~= 'ignore' + end + + local dirs = { + { x = 1, z = 0 }, + { x = -1, z = 0 }, + { x = 0, z = 1 }, + { x = 0, z = -1 } + } + + local ret = {} + local mindist = { x = 0, z = 0 } + local min = function(a, b) + return a ~= 0 and math.min(a, b) or b + end + + for _, dir in ipairs(dirs) do + for i = 1, 9 do -- 9 = max room size / 2 + local pos = vector.add(cpos, {x=dir.x*i, y=0, z=dir.z*i}) + + -- continue in that direction until we find a wall-like node + local node = minetest.get_node(pos) + if is_wall(node) then + local front_below = vector.subtract(pos, {x=dir.x, y=1, z=dir.z}) + local above = vector.add(pos, {x=0, y=1, z=0}) + + -- check that it: + --- is at least 2 nodes high (not a staircase) + --- has a floor + if is_wall(minetest.get_node(front_below)) and is_wall(minetest.get_node(above)) then + table.insert(ret, {pos = pos, facing = {x=-dir.x, y=0, z=-dir.z}}) + if dir.z == 0 then + mindist.x = min(mindist.x, i-1) + else + mindist.z = min(mindist.z, i-1) + end + end + -- abort even if it wasn't a wall cause something is in the way + break + end + end + end + + return { + walls = ret, + size = { x = mindist.x * 2, z = mindist.z * 2 } + } +end + +local c_everness_pyrite_lantern = minetest.get_content_id('everness:pyrite_lantern') +local c_everness_cursed_pumpkin_lantern = minetest.get_content_id('everness:cursed_pumpkin_lantern') +local c_mapgen_stone = minetest.get_content_id('mapgen_stone') +local biome_id_everness_mineral_waters_under = minetest.get_biome_id('everness:mineral_waters_under') + +-- minetest.set_gen_notify({ +-- large_cave_begin = true, +-- large_cave_end = true +-- }) + +Everness:add_to_queue_on_generated({ + name = 'everness:mineral_waters_under', + can_run = function(biomemap) + return table.indexof(biomemap, biome_id_everness_mineral_waters_under) ~= -1 + end, + -- read/write to `data` what will be eventually saved (set_data) + -- used for voxelmanip `data` manipulation + on_data = function(minp, maxp, area, data, p2data, gennotify, rand, shared_args) + + for y = minp.y, maxp.y do + for z = minp.z, maxp.z do + for x = minp.x, maxp.x do + local vi = area:index(x, y, z) + + if + data[vi] == minetest.CONTENT_AIR + and ( + data[vi + 1] == c_mapgen_stone + or data[vi - 1] == c_mapgen_stone + or data[vi + area.zstride] == c_mapgen_stone + or data[vi - area.zstride] == c_mapgen_stone + ) + and rand:next(0, 100) == 75 + then + local rand_c_node = rand:next(1, 2) == 1 and c_everness_pyrite_lantern or c_everness_cursed_pumpkin_lantern + data[vi] = rand_c_node + end + end + end + end + + -- for _, p in ipairs(gennotify['large_cave_end'] or {}) do + -- data[area:indexp(p)] = c_everness_cursed_pumpkin_lantern + -- data[area:indexp(p)] = c_everness_cursed_pumpkin_lantern + + -- local minpos = vector.subtract(p, { x = 9, y = 9, z = 9 }) + -- local maxpos = vector.add(p, { x = 9, y = 9, z = 9 }) + + -- for y = minpos.y, maxpos.y do + -- for z = minpos.z, maxpos.z do + -- for x = minpos.x, maxpos.x do + -- local vi = area:index(x, y, z) + + -- if + -- data[vi] == minetest.CONTENT_AIR + -- and ( + -- data[vi + 1] == c_mapgen_stone + -- or data[vi - 1] == c_mapgen_stone + -- or data[vi + area.zstride] == c_mapgen_stone + -- or data[vi - area.zstride] == c_mapgen_stone + -- ) + -- then + -- data[vi] = minetest.get_content_id('default:apple') + -- end + -- end + -- end + -- end + -- end + end, + -- read-only (but cant and should not manipulate) voxelmanip `data` + -- used for `place_schematic_on_vmanip` which will invalidate `data` + -- therefore we are doing it after we set the data + after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args) + end, + -- Cannot read/write voxelmanip or its data + -- Used for direct manipulation of the world chunk nodes where the + -- definitions of nodes are available and node callback can be executed + -- or e.g. for `minetest.fix_light` + after_write_to_map = function(shared_args, gennotify) + end +}) diff --git a/nodes_mineral_waters_under.lua b/nodes_mineral_waters_under.lua new file mode 100644 index 0000000..25270af --- /dev/null +++ b/nodes_mineral_waters_under.lua @@ -0,0 +1,55 @@ +--[[ + Everness. Never ending discovery in Everness mapgen. + Copyright (C) 2024 SaKeL + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + +--]] + +local S = minetest.get_translator(minetest.get_current_modname()) + +Everness:register_node('everness:mineral_lava_stone', { + description = S('Mineral Lava Stone'), + -- Textures of node; +Y, -Y, +X, -X, +Z, -Z + tiles = { + { + name = 'everness_mineral_lava_stone.png', + align_style = 'world', + scale = 2 + }, + { + name = 'everness_mineral_lava_stone.png', + align_style = 'world', + scale = 2 + }, + { + name = 'everness_mineral_lava_stone_side.png', + align_style = 'world', + scale = 2 + } + }, + -- drop = 'everness:coral_desert_cobble', + groups = { + -- MTG + cracky = 3, + -- MCL + pickaxey = 1, + building_block = 1, + material_stone = 1, + -- ALL + stone = 1, + }, + _mcl_blast_resistance = 6, + _mcl_hardness = 1.5, + _mcl_silk_touch_drop = true, + light_source = 3, + sounds = Everness.node_sound_stone_defaults(), +}) diff --git a/textures/everness_mineral_lava_stone.png b/textures/everness_mineral_lava_stone.png new file mode 100644 index 0000000000000000000000000000000000000000..861a9678e730d1b39a24c88fc7c4790e6d886bbc GIT binary patch literal 2580 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 P00000NkvXXu0mjf9bU3B literal 0 HcmV?d00001