write something there

This commit is contained in:
N-Nachtigal 2025-05-04 16:01:41 +02:00
commit b4b6c08f4f
8546 changed files with 309825 additions and 0 deletions

1734
mods/everness/LICENSE.txt Normal file

File diff suppressed because it is too large Load diff

99
mods/everness/README.md Normal file
View file

@ -0,0 +1,99 @@
# Everness Mapgen [everness]
Everness is a mapgen, which aims to provide an endless array of
beautiful biomes from the surface lands to the caverns with custom-painted
textures. It creates both a sense of discovery and of danger when one lands in the wrong biome.
It also adds structures, dungeons with loot chests, and custom skyboxes based on the biome.
![screenshot](screenshot.png)
## Features
* supports MineClone2 - see attached `minetest.example.mcl.conf` for best optimized settings (looking for testing and contributors)
* player name tag will hide when sneaking
* item magnet pickup when holding sneak
* granular biome settings
* custom sounds, biomes
* custom textures
* custom biomes and cavern biomes
* custom tools, blocks
* custom skyboxes based on biome
* inlcudes (not for all) e.g. walls, doors, glass, stairs, vines, tools, panes, trees...
* unique set of tools
* pottery
## Biomes
Additionally adds extra biomes to the MT game default biomes:
* Coral Forest
* Coral Forest Dunes
* Coral Forest Ocean
* Coral Forest Deep Ocean
* Coral Forest Under
* Frosted Icesheet
* Frosted Icesheet Ocean
* Frosted Icesheet Under
* Cursed Lands
* Cursed Lands Dunes
* Cursed Lands Swamp
* Cursed Lands Ocean
* Cursed Lands Deep Ocean
* Cursed Lands Under
* Crystal Forest
* Crystal Forest Dunes
* Crystal Forest Shore
* Crystal Forest Ocean
* Crystal Forest Deep Ocean
* Crystal Forest Under
* Bamboo Forest
* Bamboo Forest Under
* Forsaken Desert
* Forsaken Desert Ocean
* Forsaken Desert Under
* Baobab Savanna
* Forsaken Tundra
* Forsaken Tundra Beach
* Forsaken Tundra Ocean
* Forsaken Tundra Under
* Mineral Waters
## Wiki
https://bitbucket.org/minetest_gamers/everness/wiki/Home
## Report Bugs/Suggestions
https://bitbucket.org/minetest_gamers/everness/issues
## Dependencies
- *none*
## Optional Dependencies
- default (MTG)
- xpanes (MTG)
- doors (MTG)
- stairs (MTG)
- walls (MTG)
- x_obsidianmese (for paths)
- x_tumbleweed (adds tumbleweeds to deserts)
- x_farming (bonemeal, recipes...)
- x_clay (mapgen structures, loot chests...)
- mcl_core (MCL)
- mcl_fences (MCL)
- mcl_walls (MCL)
- mcl_stairs (MCL)
- mcl_util (MCL)
- mcl_autogroup (MCL)
- mcl_doors (MCL)
- mcl_mapgen_core (MCL)
## License
see included [LICENSE.txt](LICENSE.txt) file for more info
## Installation
see: https://wiki.minetest.net/Installing_Mods

2179
mods/everness/api.lua Normal file

File diff suppressed because it is too large Load diff

180
mods/everness/bamboo.lua Normal file
View file

@ -0,0 +1,180 @@
--[[
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.
--]]
-- how often node timers for plants will tick, +/- some random value
function Everness.tick_bamboo(self, pos)
minetest.get_node_timer(pos):start(math.random(83, 143))
end
-- how often a growth failure tick is retried (e.g. too dark)
function Everness.tick_bamboo_again(self, pos)
minetest.get_node_timer(pos):start(math.random(40, 80))
end
--- Rotate placed bamboo based on the stem below/above
function Everness.place_bamboo(self, pos, placer, itemstack, pointed_thing)
local node_under = minetest.get_node(vector.new(pos.x, pos.y - 1, pos.z))
local node_above = minetest.get_node(vector.new(pos.x, pos.y + 1, pos.z))
if minetest.get_item_group(node_under.name, 'bamboo') > 0 then
minetest.swap_node(pos, { name = itemstack:get_name(), param2 = node_under.param2 })
return
elseif minetest.get_item_group(node_above.name, 'bamboo') > 0 then
minetest.swap_node(pos, { name = itemstack:get_name(), param2 = node_above.param2 })
return
end
local rand_param2 = math.random(0, 3)
minetest.swap_node(pos, { name = itemstack:get_name(), param2 = rand_param2 })
end
--- Dig bamboo all the way up and simulate digging particles
function Everness.dig_up_bamboo(self, pos, oldnode, oldmetadata, digger)
if digger == nil then
return
end
local pos_above = { x = pos.x, y = pos.y + 1, z = pos.z }
local pos_below = { x = pos.x, y = pos.y - 1, z = pos.z }
local node_above = minetest.get_node(pos_above)
local node_below = minetest.get_node(pos_below)
if minetest.get_item_group(node_below.name, 'bamboo') > 0 then
self:tick_bamboo(pos_below)
end
if minetest.get_item_group(node_above.name, 'bamboo') > 0 then
minetest.node_dig(pos_above, node_above, digger)
minetest.add_particlespawner({
amount = 10,
time = 0.5,
minpos = { x = pos_above.x - 0.7, y = pos_above.y, z = pos_above.z - 0.7 },
maxpos = { x = pos_above.x + 0.7, y = pos_above.y + 0.75, z = pos_above.z + 0.7 },
minvel = { x = -0.5, y = -4, z = -0.5 },
maxvel = { x = 0.5, y = -2, z = 0.5 },
minacc = { x = -0.5, y = -4, z = -0.5 },
maxacc = { x = 0.5, y = -2, z = 0.5 },
minexptime = 0.5,
maxexptime = 1,
minsize = 0.5,
maxsize = 1,
collisiondetection = true,
node = { name = node_above.name }
})
end
end
function Everness.grow_bamboo(self, pos, elapsed)
local _pos = vector.new(pos)
_pos.y = _pos.y - 1
-- local name = minetest.get_node(_pos).name
local node_below = minetest.get_node(_pos)
local _node = minetest.get_node(pos)
if minetest.get_item_group(node_below.name, 'soil') == 0
and minetest.get_item_group(node_below.name, 'sand') == 0
and minetest.get_item_group(node_below.name, 'everness_sand') == 0
then
if minetest.get_item_group(node_below.name, 'bamboo') > 0 then
self:grow_bamboo(_pos, elapsed)
return
end
self:tick_bamboo_again(pos)
return
end
_pos.y = _pos.y + 1
local height = 0
while minetest.get_item_group(_node.name, 'bamboo') > 0 and height < 16 do
height = height + 1
_pos.y = _pos.y + 1
_node = minetest.get_node(_pos)
end
-- stop growing - random height between 12 - 16 nodes
if height > 11 and height < 16 then
if math.random(1, 3) == 2 then
return
end
end
if height >= 16 then
return
end
if _node.name ~= 'air' then
self:tick_bamboo_again(_pos)
return
end
if minetest.get_node_light(_pos) < 9 then
self:tick_bamboo_again(pos)
return
end
local height_offset = height
-- variant appearance for this growth stages
local rand_param2 = math.random(0, 3)
if height < 5 then
local next_plant_schem = self.bamboo.growth_stages[height]
for i, v in ipairs(next_plant_schem) do
local pos_to_swap = vector.new(_pos.x, _pos.y - height_offset, _pos.z)
local node_to_swap = minetest.get_node(pos_to_swap)
height_offset = height_offset - 1
if i == 1 then
if minetest.get_item_group(node_to_swap.name, 'seed') == 0 and node_to_swap.name ~= 'air' then
rand_param2 = node_to_swap.param2
end
end
minetest.set_node(pos_to_swap, { name = v.name, param2 = rand_param2 })
if i == #next_plant_schem then
self:tick_bamboo(_pos)
return
end
end
end
-- grow verically while keeping the top 3 nodes with leaves
local start_pos = vector.new(_pos.x, _pos.y - 3, _pos.z)
local prev_node = minetest.get_node(vector.new(start_pos.x, start_pos.y - 1, start_pos.z))
minetest.set_node(start_pos, { name = 'everness:bamboo_3', param2 = prev_node.param2 })
for k, v in ipairs(self.bamboo.top_leaves_schem) do
minetest.set_node(
vector.new(start_pos.x, start_pos.y + k, start_pos.z),
{ name = v.name, param2 = prev_node.param2 }
)
end
self:tick_bamboo(_pos)
return false
end

238
mods/everness/buckets.lua Normal file
View file

@ -0,0 +1,238 @@
--[[
Authors of original source code
----------------------
Kahrl <kahrl@gmx.net> (LGPLv2.1+)
celeron55, Perttu Ahola <celeron55@gmail.com> (LGPLv2.1+)
Various Minetest developers and contributors (LGPLv2.1+)
Everness. Never ending discovery in Everness mapgen.
Modified by:
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.
--]]
-- Load support for MT game translation.
local S = minetest.get_translator(minetest.get_current_modname())
minetest.register_craft({
output = 'everness:bucket_empty 1',
recipe = {
{ 'everness:pyrite_ingot', '', 'everness:pyrite_ingot' },
{ '', 'everness:pyrite_ingot', '' },
}
})
local bucket = {
liquids = {}
}
local function check_protection(pos, name, text)
if minetest.is_protected(pos, name) then
minetest.log('action', (name ~= '' and name or 'A mod')
.. ' tried to ' .. text
.. ' at protected position '
.. minetest.pos_to_string(pos)
.. ' with a bucket')
minetest.record_protection_violation(pos, name)
return true
end
return false
end
-- Register a new liquid
-- source = name of the source node
-- flowing = name of the flowing node
-- itemname = name of the new bucket item (or nil if liquid is not takeable)
-- inventory_image = texture of the new bucket item (ignored if itemname == nil)
-- name = text description of the bucket item
-- groups = (optional) groups of the bucket item, for example {water_bucket = 1}
-- force_renew = (optional) bool. Force the liquid source to renew if it has a
-- source neighbour, even if defined as 'liquid_renewable = false'.
-- Needed to avoid creating holes in sloping rivers.
-- This function can be called from any mod (that depends on bucket).
function bucket.register_liquid(source, flowing, itemname, inventory_image, name,
groups, force_renew)
bucket.liquids[source] = {
source = source,
flowing = flowing,
itemname = itemname,
force_renew = force_renew,
}
bucket.liquids[flowing] = bucket.liquids[source]
if itemname ~= nil then
Everness:register_craftitem(itemname, {
description = name,
inventory_image = inventory_image,
stack_max = 1,
liquids_pointable = true,
groups = groups,
wield_scale = { x = 2, y = 2, z = 1 },
on_place = function(itemstack, user, pointed_thing)
-- Must be pointing to node
if pointed_thing.type ~= 'node' then
return
end
local node = minetest.get_node_or_nil(pointed_thing.under)
local ndef = node and minetest.registered_nodes[node.name]
-- Call on_rightclick if the pointed node defines it
if ndef and ndef.on_rightclick and
not (user and user:is_player() and
user:get_player_control().sneak) then
return ndef.on_rightclick(
pointed_thing.under,
node, user,
itemstack)
end
local lpos
-- Check if pointing to a buildable node
if ndef and ndef.buildable_to then
-- buildable; replace the node
lpos = pointed_thing.under
else
-- not buildable to; place the liquid above
-- check if the node above can be replaced
lpos = pointed_thing.above
node = minetest.get_node_or_nil(lpos)
local above_ndef = node and minetest.registered_nodes[node.name]
if not above_ndef or not above_ndef.buildable_to then
-- do not remove the bucket with the liquid
return itemstack
end
end
if check_protection(lpos, user
and user:get_player_name()
or '', 'place '..source) then
return
end
minetest.set_node(lpos, {name = source})
return ItemStack('everness:bucket_empty')
end
})
end
end
Everness:register_craftitem('everness:bucket_empty', {
description = S('Empty Bucket'),
inventory_image = 'everness_bucket_empty.png',
groups = { tool = 1 },
liquids_pointable = true,
wield_scale = { x = 2, y = 2, z = 1 },
on_use = function(itemstack, user, pointed_thing)
if pointed_thing.type == 'object' then
pointed_thing.ref:punch(user, 1.0, { full_punch_interval=1.0 }, nil)
return user:get_wielded_item()
elseif pointed_thing.type ~= 'node' then
-- do nothing if it's neither object nor node
return
end
-- Check if pointing to a liquid source
local node = minetest.get_node(pointed_thing.under)
local liquiddef = bucket.liquids[node.name]
local item_count = user:get_wielded_item():get_count()
if liquiddef ~= nil
and liquiddef.itemname ~= nil
and node.name == liquiddef.source
then
if check_protection(pointed_thing.under,
user:get_player_name(),
'take '.. node.name) then
return
end
-- default set to return filled bucket
local giving_back = liquiddef.itemname
-- check if holding more than 1 empty bucket
if item_count > 1 then
-- if space in inventory add filled bucked, otherwise drop as item
local inv = user:get_inventory()
if inv:room_for_item('main', { name = liquiddef.itemname }) then
inv:add_item('main', liquiddef.itemname)
else
local pos = user:get_pos()
pos.y = math.floor(pos.y + 0.5)
minetest.add_item(pos, liquiddef.itemname)
end
-- set to return empty buckets minus 1
giving_back = 'everness:bucket_empty '.. tostring(item_count - 1)
end
-- force_renew requires a source neighbour
local source_neighbor = false
if liquiddef.force_renew then
source_neighbor = minetest.find_node_near(pointed_thing.under, 1, liquiddef.source)
end
if not (source_neighbor and liquiddef.force_renew) then
minetest.add_node(pointed_thing.under, { name = 'air' })
end
return ItemStack(giving_back)
else
-- non-liquid nodes will have their on_punch triggered
local node_def = minetest.registered_nodes[node.name]
if node_def then
node_def.on_punch(pointed_thing.under, node, user, pointed_thing)
end
return user:get_wielded_item()
end
end,
})
-- Mineral water source is 'liquid_renewable = false' to avoid horizontal spread
-- of water sources in sloping rivers that can cause water to overflow
-- riverbanks and cause floods.
-- River water source is instead made renewable by the 'force renew' option
-- used here.
bucket.register_liquid(
'everness:mineral_water_source',
'everness:mineral_water_flowing',
'everness:bucket_mineral_water',
'everness_bucket_mineral_water.png',
S('Mineral') .. ' ' .. S('Water') .. ' ' .. S('Bucket'),
{ tool = 1, water_bucket = 1 }
)
bucket.register_liquid(
'everness:lava_source',
'everness:lava_flowing',
'everness:bucket_lava',
'everness_bucket_lava.png',
S('Lava Bucket'),
{ tool = 1 }
)
minetest.register_craft({
type = 'fuel',
recipe = 'everness:bucket_lava',
burntime = 370,
replacements = {{ 'everness:bucket_lava', 'everness:bucket_empty' }},
})

View file

@ -0,0 +1,25 @@
local S = minetest.get_translator(minetest.get_current_modname())
minetest.register_chatcommand('everness:getbiomename', {
description = S('Get biome name where you are standing.'),
params = '',
privs = { creative = true },
func = function(name, param)
local player = minetest.get_player_by_name(name)
if not player then
return false, S('This command can only be executed in-game!')
end
local p_pos = player:get_pos()
local biome_data = minetest.get_biome_data(p_pos)
if not biome_data then
return false
end
local biome_name = minetest.get_biome_name(biome_data.biome)
minetest.chat_send_player(name, 'Biome name: ' .. biome_name)
end,
})

382
mods/everness/chests.lua Normal file
View file

@ -0,0 +1,382 @@
--[[
Everness. Never ending discovery in Everness mapgen.
GNU Lesser General Public License, version 2.1
Copyright (C) 2011-2018 celeron55, Perttu Ahola <celeron55@gmail.com>
Copyright (C) 2011-2018 Various Minetest developers and contributors
Copyright (C) 2022 SaKeL
This program 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 program 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:
https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
--]]
Everness.chest = {}
-- support for MT game translation.
local S = minetest.get_translator(minetest.get_current_modname())
function Everness.chest.get_chest_formspec(pos)
local spos = pos.x .. ',' .. pos.y .. ',' .. pos.z
local hotbar_bg = ''
local list_bg = ''
local chest_bg = ''
for i = 0, 7, 1 do
hotbar_bg = hotbar_bg .. 'image[' .. 0 + i .. ', ' .. 4.85 .. ';1,1;everness_chest_ui_bg_hb_slot.png]'
end
for row = 0, 2, 1 do
for i = 0, 7, 1 do
list_bg = list_bg .. 'image[' .. 0 + i .. ',' .. 6.08 + row .. ';1,1;everness_chest_ui_bg_slot.png]'
end
end
for row = 0, 3, 1 do
for i = 0, 7, 1 do
chest_bg = chest_bg .. 'image[' .. 0 + i .. ',' .. 0.3 + row .. ';1,1;everness_chest_ui_bg_slot.png]'
end
end
local formspec =
'size[8,9]' ..
'listcolors[#FFFFFF00;#FFFFFF1A;#5E5957]' ..
'background[5,5;1,1;everness_chest_ui_bg.png;true]' ..
'list[nodemeta:' .. spos .. ';main;0,0.3;8,4;]' ..
'list[current_player;main;0,4.85;8,1;]' ..
'list[current_player;main;0,6.08;8,3;8]' ..
'listring[nodemeta:' .. spos .. ';main]' ..
'listring[current_player;main]' ..
list_bg ..
hotbar_bg ..
chest_bg
return formspec
end
function Everness.chest.chest_lid_obstructed(pos)
local above = { x = pos.x, y = pos.y + 1, z = pos.z }
local def = minetest.registered_nodes[minetest.get_node(above).name]
-- allow ladders, signs, wallmounted things and torches to not obstruct
if def and
(def.drawtype == 'airlike' or
def.drawtype == 'signlike' or
def.drawtype == 'torchlike' or
(def.drawtype == 'nodebox' and def.paramtype2 == 'wallmounted'))
then
return false
end
return true
end
function Everness.chest.chest_lid_close(pn)
local chest_open_info = Everness.chest.open_chests[pn]
local pos = chest_open_info.pos
local sound = chest_open_info.sound
local swap = chest_open_info.swap
Everness.chest.open_chests[pn] = nil
for _, v in pairs(Everness.chest.open_chests) do
if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then
return true
end
end
local node = minetest.get_node(pos)
minetest.after(0.2, minetest.swap_node, pos, { name = swap, param2 = node.param2 })
minetest.sound_play(sound, { gain = 0.3, pos = pos, max_hear_distance = 10 }, true)
end
Everness.chest.open_chests = {}
minetest.register_on_player_receive_fields(function(player, formname, fields)
local pn = player:get_player_name()
if formname ~= 'everness:chest' then
if Everness.chest.open_chests[pn] then
Everness.chest.chest_lid_close(pn)
end
return
end
if not (fields.quit and Everness.chest.open_chests[pn]) then
return
end
Everness.chest.chest_lid_close(pn)
return true
end)
minetest.register_on_leaveplayer(function(player)
local pn = player:get_player_name()
if Everness.chest.open_chests[pn] then
Everness.chest.chest_lid_close(pn)
end
end)
function Everness.chest.register_chest(prefixed_name, d)
local name = prefixed_name:sub(1, 1) == ':' and prefixed_name:sub(2, -1) or prefixed_name
local def = table.copy(d)
def.drawtype = 'mesh'
def.visual = 'mesh'
def.paramtype = 'light'
def.paramtype2 = 'facedir'
def.legacy_facedir_simple = true
def.is_ground_content = false
if def.protected then
-- Locked chest
def.on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string('infotext', S('Locked Chest'))
meta:set_string('owner', '')
local inv = meta:get_inventory()
inv:set_size('main', 8 * 4)
end
def.after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos)
meta:set_string('owner', placer:get_player_name() or '')
meta:set_string('infotext', S('Locked Chest (owned by @1)', meta:get_string('owner')))
end
def.can_dig = function(pos,player)
local meta = minetest.get_meta(pos);
local inv = meta:get_inventory()
return inv:is_empty('main') and Everness.can_interact_with_node(player, pos)
end
def.allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
if not Everness.can_interact_with_node(player, pos) then
return 0
end
return count
end
def.allow_metadata_inventory_put = function(pos, listname, index, stack, player)
if not Everness.can_interact_with_node(player, pos) then
return 0
end
return stack:get_count()
end
def.allow_metadata_inventory_take = function(pos, listname, index, stack, player)
if not Everness.can_interact_with_node(player, pos) then
return 0
end
return stack:get_count()
end
def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
if not Everness.can_interact_with_node(clicker, pos) then
return itemstack
end
local cn = clicker:get_player_name()
if Everness.chest.open_chests[cn] then
Everness.chest.chest_lid_close(cn)
end
minetest.sound_play(def.sound_open, { gain = 0.3, pos = pos, max_hear_distance = 10 }, true)
if not Everness.chest.chest_lid_obstructed(pos) then
minetest.swap_node(pos, { name = name .. '_open', param2 = node.param2 })
end
minetest.after(
0.2,
minetest.show_formspec,
cn,
'everness:chest',
Everness.chest.get_chest_formspec(pos)
)
Everness.chest.open_chests[cn] = { pos = pos, sound = def.sound_close, swap = name }
end
def.on_blast = function() end
def.on_key_use = function(pos, player)
local secret = minetest.get_meta(pos):get_string('key_lock_secret')
local itemstack = player:get_wielded_item()
local key_meta = itemstack:get_meta()
if itemstack:get_metadata() == '' then
return
end
if key_meta:get_string('secret') == '' then
key_meta:set_string('secret', minetest.parse_json(itemstack:get_metadata()).secret)
itemstack:set_metadata('')
end
if secret ~= key_meta:get_string('secret') then
return
end
minetest.show_formspec(
player:get_player_name(),
'everness:chest_locked',
Everness.chest.get_chest_formspec(pos)
)
end
def.on_skeleton_key_use = function(pos, player, newsecret)
local meta = minetest.get_meta(pos)
local owner = meta:get_string('owner')
local pn = player:get_player_name()
-- verify placer is owner of lockable chest
if owner ~= pn then
minetest.record_protection_violation(pos, pn)
minetest.chat_send_player(pn, S('You do not own this chest.'))
return nil
end
local secret = meta:get_string('key_lock_secret')
if secret == '' then
secret = newsecret
meta:set_string('key_lock_secret', secret)
end
return secret, S('a locked chest'), owner
end
else
-- Public (unlocked) chest
def.on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string('infotext', S('Chest'))
local inv = meta:get_inventory()
inv:set_size('main', 8 * 4)
end
def.can_dig = function(pos,player)
local meta = minetest.get_meta(pos);
local inv = meta:get_inventory()
return inv:is_empty('main')
end
def.on_rightclick = function(pos, node, clicker)
minetest.sound_play(def.sound_open, { gain = 0.3, pos = pos, max_hear_distance = 10 }, true)
if not Everness.chest.chest_lid_obstructed(pos) then
minetest.swap_node(pos, { name = name .. '_open', param2 = node.param2 })
end
minetest.after(0.2, minetest.show_formspec, clicker:get_player_name(), 'everness:chest', Everness.chest.get_chest_formspec(pos))
Everness.chest.open_chests[clicker:get_player_name()] = { pos = pos, sound = def.sound_close, swap = name }
end
def.on_blast = function(pos)
local drops = {}
Everness.get_inventory_drops(pos, 'main', drops)
drops[#drops + 1] = name
minetest.remove_node(pos)
return drops
end
end
Everness.set_inventory_action_loggers(def, 'chest')
local def_opened = table.copy(def)
local def_closed = table.copy(def)
def_opened.mesh = 'everness_chest_open.obj'
for i = 1, #def_opened.tiles do
if type(def_opened.tiles[i]) == 'string' then
def_opened.tiles[i] = { name = def_opened.tiles[i], backface_culling = true }
elseif def_opened.tiles[i].backface_culling == nil then
def_opened.tiles[i].backface_culling = true
end
end
def_opened.drop = name
def_opened.groups.not_in_creative_inventory = 1
def_opened.selection_box = {
type = 'fixed',
fixed = { -1 / 2, -1 / 2, -1 / 2, 1 / 2, 3 / 16, 1 / 2 },
}
def_opened.can_dig = function()
return false
end
def_opened.on_blast = function() end
def_closed.mesh = nil
def_closed.drawtype = nil
def_closed.tiles[6] = def.tiles[5] -- swap textures around for 'normal'
def_closed.tiles[5] = def.tiles[3] -- drawtype to make them match the mesh
def_closed.tiles[3] = def.tiles[3] .. '^[transformFX'
Everness:register_node(prefixed_name, def_closed)
Everness:register_node(prefixed_name .. '_open', def_opened)
-- close opened chests on load
Everness:register_lbm({
label = 'Everness close opened chests on load',
name = 'everness:close_' .. prefixed_name:gsub(':', '_') .. '_open',
nodenames = { prefixed_name .. '_open' },
run_at_every_load = true,
action = function(pos, node)
node.name = prefixed_name
minetest.swap_node(pos, node)
end
})
end
Everness.chest.register_chest('everness:chest', {
description = S('Chest'),
tiles = {
'everness_chest_top.png',
'everness_chest_top.png',
'everness_chest_side.png',
'everness_chest_side.png',
'everness_chest_front.png',
'everness_chest_inside.png'
},
sounds = Everness.node_sound_wood_defaults(),
sound_open = 'everness_chest_open',
sound_close = 'everness_chest_close',
groups = {
-- MTG
choppy = 2,
oddly_breakable_by_hand = 2,
-- MCL
handy = 1,
axey = 1,
container = 2,
deco_block = 1,
material_wood = 1,
flammable = -1,
},
_mcl_blast_resistance = 2.5,
_mcl_hardness = 2.5,
})
minetest.register_craft({
output = 'everness:chest',
recipe = {
{ 'group:everness_wood', 'group:everness_wood', 'group:everness_wood' },
{ 'group:everness_wood', '', 'group:everness_wood' },
{ 'group:everness_wood', 'group:everness_wood', 'group:everness_wood' },
}
})
minetest.register_craft({
type = 'fuel',
recipe = 'everness:chest',
burntime = 30,
})

1101
mods/everness/crafting.lua Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,86 @@
--[[
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())
local tms = minetest.get_modpath("too_many_stones")
--
-- Craftitem registry
--
-- Quartz Crystal
if tms then
minetest.register_alias("everness:quartz_crystal","too_many_stones:quartz")
else
Everness:register_craftitem('everness:quartz_crystal', {
description = S('Quartz Crystal'),
inventory_image = 'everness_quartz.png',
})
end
Everness:register_craftitem('everness:bamboo_item', {
description = S('Bamboo'),
inventory_image = 'everness_bamboo_item.png',
})
Everness:register_craftitem('everness:baobab_fruit_roasted', {
description = S('Baobab Roasted Fruit') .. '\n'.. minetest.colorize(Everness.colors.brown, S('Hunger') .. ': 4'),
inventory_image = 'everness_baobab_tree_fruit_roasted.png',
on_use = minetest.item_eat(4),
})
Everness:register_craftitem('everness:pyrite_ingot', {
description = S('Pyrite Ingot'),
inventory_image = 'everness_pyrite_ingot.png'
})
if tms then
minetest.register_alias("everness:pyrite_lump","too_many_stones:pyrite")
else
Everness:register_craftitem('everness:pyrite_lump', {
description = S('Pyrite Lump'),
inventory_image = 'everness_pyrite_lump.png'
})
end
Everness:register_craftitem('everness:coconut_fruit', {
description = S('Coconut') .. '\n'.. minetest.colorize(Everness.colors.brown, S('Hunger') .. ': 4'),
inventory_image = 'everness_coconut_item.png',
wield_scale = { x = 2, y = 2, z = 1 },
on_use = minetest.item_eat(4),
})
--
-- Crafting recipes
--
minetest.register_craft({
output = 'everness:pyrite_ingot 9',
recipe = {
{ 'everness:pyriteblock' },
}
})
--
-- Cooking recipes
--
minetest.register_craft({
type = 'cooking',
output = 'everness:pyrite_ingot',
recipe = 'everness:pyrite_lump',
})

232
mods/everness/doors.lua Normal file
View file

@ -0,0 +1,232 @@
--[[
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())
doors.register('everness:door_bamboo', {
tiles = { { name = 'everness_door_bamboo.png', backface_culling = true } },
description = S('Bamboo Door'),
inventory_image = 'everness_door_bamboo_item.png',
groups = { node = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, door = 1 },
sounds = Everness.node_sound_bamboo_defaults({
dug = { name = 'everness_bamboo_hit', gain = 1.25 }
}),
sound_open = 'everness_door_bamboo_open',
sound_close = 'everness_door_bamboo_open',
gain_open = 5,
gain_close = 5,
recipe = {
{ 'everness:bamboo_wood', 'everness:bamboo_wood' },
{ 'everness:bamboo_wood', 'everness:bamboo_wood' },
{ 'everness:bamboo_wood', 'everness:bamboo_wood' },
}
})
doors.register_trapdoor('everness:trapdoor_bamboo', {
description = S('Bamboo Trapdoor'),
inventory_image = 'everness_door_trapdoor_bamboo.png',
wield_image = 'everness_door_trapdoor_bamboo.png',
tile_front = 'everness_door_trapdoor_bamboo.png',
tile_side = 'everness_door_trapdoor_bamboo_side.png',
sounds = Everness.node_sound_bamboo_defaults({
dug = { name = 'everness_bamboo_hit', gain = 1.25 }
}),
sound_open = 'everness_door_bamboo_open',
sound_close = 'everness_door_bamboo_open',
gain_open = 5,
gain_close = 5,
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, door = 1 },
})
doors.register_fencegate('everness:gate_bamboo', {
description = S('Bamboo Wood Fence Gate'),
texture = 'everness_dry_bamboo_block_side.png^[transformR90',
material = 'everness:bamboo_wood',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }
})
doors.register('everness:door_bone_pyrite', {
tiles = { { name = 'everness_door_bone_pyrite.png', backface_culling = true } },
description = S('Bone Pyrit Door'),
inventory_image = 'everness_door_bone_pyrite_item.png',
groups = { node = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, door = 1 },
sounds = Everness.node_sound_wood_defaults(),
recipe = {
{ 'everness:pyrite_ingot', 'everness:bone' },
{ 'everness:pyrite_ingot', 'everness:bone' },
{ 'everness:pyrite_ingot', 'everness:bone' },
}
})
doors.register('everness:door_willow', {
tiles = { { name = 'everness_door_willow.png', backface_culling = true } },
description = S('Willow Door'),
inventory_image = 'everness_door_willow_item.png',
groups = { node = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, door = 1 },
sounds = Everness.node_sound_wood_defaults(),
recipe = {
{ 'everness:willow_wood', 'everness:willow_wood' },
{ 'everness:willow_wood', 'everness:willow_wood' },
{ 'everness:willow_wood', 'everness:willow_wood' },
}
})
doors.register('everness:door_crystal_wood', {
description = S('Crystal Wood Door'),
tiles = { 'everness_door_crystal_wood.png' },
inventory_image = 'everness_door_crystal_wood_item.png',
use_texture_alpha = 'blend',
groups = { node = 1, choppy = 3, oddly_breakable_by_hand = 3, door = 1 },
sounds = Everness.node_sound_glass_defaults(),
sound_open = 'everness_door_glass_open',
sound_close = 'everness_door_glass_close',
gain_open = 0.2,
gain_close = 0.15,
recipe = {
{ 'everness:crystal_wood', 'everness:crystal_wood' },
{ 'everness:crystal_wood', 'everness:crystal_wood' },
{ 'everness:crystal_wood', 'everness:crystal_wood' },
}
})
doors.register_trapdoor('everness:trapdoor_crystal_wood', {
description = S('Crystal Wood Trapdoor'),
inventory_image = 'everness_door_trapdoor_crystal_wood.png',
wield_image = 'everness_door_trapdoor_crystal_wood.png',
tile_front = 'everness_door_trapdoor_crystal_wood.png',
tile_side = 'everness_door_trapdoor_crystal_wood_side.png',
use_texture_alpha = 'blend',
sounds = Everness.node_sound_glass_defaults(),
sound_open = 'everness_door_glass_open',
sound_close = 'everness_door_glass_close',
gain_open = 0.2,
gain_close = 0.15,
groups = { node = 1, choppy = 3, oddly_breakable_by_hand = 3, door = 1 },
})
doors.register_fencegate('everness:gate_crystal_wood', {
description = S('Crystal Wood Fence Gate'),
texture = 'everness_crystal_wood.png^[transformR90',
material = 'everness:crystal_wood',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }
})
doors.register('everness:door_cursed_wood', {
description = S('Cursed Wood Door'),
tiles = { 'everness_door_cursed_wood.png' },
inventory_image = 'everness_door_cursed_wood_item.png',
use_texture_alpha = 'blend',
groups = { node = 1, choppy = 3, oddly_breakable_by_hand = 3, door = 1 },
sounds = Everness.node_sound_wood_defaults(),
sound_open = 'everness_creaky_door_open',
sound_close = 'everness_creaky_door_close',
gain_open = 0.15,
gain_close = 0.15,
recipe = {
{ 'everness:dry_wood', 'everness:dry_wood' },
{ 'everness:dry_wood', 'everness:dry_wood' },
{ 'everness:dry_wood', 'everness:dry_wood' },
}
})
doors.register_trapdoor('everness:trapdoor_cursed_wood', {
description = S('Cursed Wood Trapdoor'),
inventory_image = 'everness_door_trapdoor_cursed_wood.png',
wield_image = 'everness_door_trapdoor_cursed_wood.png',
tile_front = 'everness_door_trapdoor_cursed_wood.png',
tile_side = 'everness_door_trapdoor_cursed_wood_side.png',
sounds = Everness.node_sound_wood_defaults(),
sound_open = 'everness_creaky_door_open',
sound_close = 'everness_creaky_door_close',
gain_open = 0.15,
gain_close = 0.15,
groups = { node = 1, choppy = 3, oddly_breakable_by_hand = 3, door = 1 },
})
-- Palm Wood
doors.register('everness:door_palm_wood', {
description = S('Palm Wood Door'),
tiles = { 'everness_door_palm_wood.png' },
inventory_image = 'everness_door_palm_wood_item.png',
use_texture_alpha = 'blend',
groups = { node = 1, choppy = 3, oddly_breakable_by_hand = 3, door = 1 },
sounds = Everness.node_sound_wood_defaults(),
recipe = {
{ 'everness:palm_tree_wood', 'everness:palm_tree_wood' },
{ 'everness:palm_tree_wood', 'everness:palm_tree_wood' },
{ 'everness:palm_tree_wood', 'everness:palm_tree_wood' },
}
})
doors.register_trapdoor('everness:trapdoor_palm_wood', {
description = S('Palm Wood Trapdoor'),
inventory_image = 'everness_door_trapdoor_palm_wood.png',
wield_image = 'everness_door_trapdoor_palm_wood.png',
tile_front = 'everness_door_trapdoor_palm_wood.png',
tile_side = 'everness_door_trapdoor_palm_wood_side.png',
sounds = Everness.node_sound_wood_defaults(),
groups = { node = 1, choppy = 3, oddly_breakable_by_hand = 3, door = 1 },
})
doors.register_fencegate('everness:gate_palm_wood', {
description = S('Palm Wood Fence Gate'),
texture = 'everness_palm_tree_wood.png^[sheet:2x2:1,1',
material = 'everness:palm_tree_wood',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }
})
-- Coral Wood
doors.register_fencegate('everness:gate_coral_wood', {
description = S('Coral Wood Fence Gate'),
texture = 'everness_coral_wood.png',
material = 'everness:coral_wood',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }
})
-- Lava Tree Wood
doors.register('everness:door_lava_tree', {
description = S('Lava Tree Wood Door'),
tiles = { 'everness_door_lava_tree_wood.png' },
inventory_image = 'everness_door_lava_tree_wood_item.png',
use_texture_alpha = 'blend',
groups = { node = 1, choppy = 3, oddly_breakable_by_hand = 3, door = 1 },
sounds = Everness.node_sound_wood_defaults(),
recipe = {
{ 'everness:lava_tree_wood', 'everness:lava_tree_wood' },
{ 'everness:lava_tree_wood', 'everness:lava_tree_wood' },
{ 'everness:lava_tree_wood', 'everness:lava_tree_wood' },
}
})
doors.register_trapdoor('everness:trapdoor_lava_tree', {
description = S('Lava Tree Wood Trapdoor'),
inventory_image = 'everness_door_trapdoor_lava_tree_wood.png',
wield_image = 'everness_door_trapdoor_lava_tree_wood.png',
tile_front = 'everness_door_trapdoor_lava_tree_wood.png',
tile_side = 'everness_door_trapdoor_lava_tree_wood_side.png',
sounds = Everness.node_sound_wood_defaults(),
groups = { node = 1, choppy = 3, oddly_breakable_by_hand = 3, door = 1 },
})
doors.register_fencegate('everness:gate_lava_tree_wood', {
description = S('Lava Tree Wood Fence Gate'),
texture = 'everness_lava_tree.png^[sheet:2x2:1,1',
material = 'everness:lava_tree',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }
})

1174
mods/everness/env_sounds.lua Normal file

File diff suppressed because it is too large Load diff

209
mods/everness/fences.lua Normal file
View file

@ -0,0 +1,209 @@
--[[
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())
-- Dry Wood
default.register_fence('everness:fence_dry_wood', {
description = S('Dry Wood Fence'),
texture = 'everness_fence_dry_wood.png',
inventory_image = 'default_fence_overlay.png^everness_dry_wood.png^' ..
'default_fence_overlay.png^[makealpha:255,126,126',
wield_image = 'default_fence_overlay.png^everness_dry_wood.png^' ..
'default_fence_overlay.png^[makealpha:255,126,126',
material = 'everness:dry_wood',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 },
sounds = Everness.node_sound_wood_defaults()
})
default.register_fence_rail('everness:fence_rail_dry_wood', {
description = S('Dry Wood Fence Rail'),
texture = 'everness_fence_rail_dry_wood.png',
inventory_image = 'default_fence_rail_overlay.png^everness_dry_wood.png^' ..
'default_fence_rail_overlay.png^[makealpha:255,126,126',
wield_image = 'default_fence_rail_overlay.png^everness_dry_wood.png^' ..
'default_fence_rail_overlay.png^[makealpha:255,126,126',
material = 'everness:dry_wood',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 },
sounds = Everness.node_sound_wood_defaults()
})
default.register_mesepost('everness:mese_post_light_dry_wood', {
description = S('Dry Wood Mese Post Light'),
texture = 'everness_fence_dry_wood.png',
material = 'everness:dry_wood',
})
-- Bamboo Wood
default.register_fence('everness:fence_bamboo_wood', {
description = S('Bamboo Wood Fence'),
texture = 'everness_fence_bamboo_wood.png',
inventory_image = 'default_fence_overlay.png^everness_dry_bamboo_block_side.png^' ..
'default_fence_overlay.png^[makealpha:255,126,126',
wield_image = 'default_fence_overlay.png^everness_dry_bamboo_block_side.png^' ..
'default_fence_overlay.png^[makealpha:255,126,126',
material = 'everness:bamboo_wood',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 },
sounds = Everness.node_sound_wood_defaults()
})
default.register_fence_rail('everness:fence_rail_bamboo_wood', {
description = S('Bamboo Wood Fence Rail'),
texture = 'everness_fence_rail_bamboo_wood.png^[transformR90',
inventory_image = 'default_fence_rail_overlay.png^everness_dry_bamboo_block_side.png^' ..
'default_fence_rail_overlay.png^[makealpha:255,126,126',
wield_image = 'default_fence_rail_overlay.png^everness_dry_bamboo_block_side.png^' ..
'default_fence_rail_overlay.png^[makealpha:255,126,126',
material = 'everness:bamboo_wood',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 },
sounds = Everness.node_sound_wood_defaults()
})
default.register_mesepost('everness:mese_post_light_bamboo_wood', {
description = S('Bamboo Wood Mese Post Light'),
texture = 'everness_fence_bamboo_wood.png^[transformFY',
material = 'everness:bamboo_wood',
})
-- Crystal Wood
default.register_fence('everness:fence_crystal_wood', {
description = S('Crystal Wood Fence'),
texture = 'everness_fence_crystal_wood.png',
inventory_image = 'default_fence_overlay.png^everness_crystal_wood.png^' ..
'default_fence_overlay.png^[makealpha:255,126,126',
wield_image = 'default_fence_overlay.png^everness_crystal_wood.png^' ..
'default_fence_overlay.png^[makealpha:255,126,126',
material = 'everness:crystal_wood',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 },
sounds = Everness.node_sound_wood_defaults()
})
default.register_fence_rail('everness:fence_rail_crystal_wood', {
description = S('Crystal Wood Fence Rail'),
texture = 'everness_fence_rail_crystal_wood.png^[transformR90',
inventory_image = 'default_fence_rail_overlay.png^everness_crystal_wood.png^' ..
'default_fence_rail_overlay.png^[makealpha:255,126,126',
wield_image = 'default_fence_rail_overlay.png^everness_crystal_wood.png^' ..
'default_fence_rail_overlay.png^[makealpha:255,126,126',
material = 'everness:crystal_wood',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 },
sounds = Everness.node_sound_wood_defaults()
})
default.register_mesepost('everness:mese_post_light_crystal_wood', {
description = S('Crystal Wood Mese Post Light'),
texture = 'everness_fence_crystal_wood.png^[transformFY',
material = 'everness:crystal_wood',
})
-- Palm Wood
default.register_fence('everness:fence_palm_wood', {
description = S('Palm Wood Fence'),
texture = 'everness_fence_palm_wood.png',
inventory_image = 'default_fence_overlay.png^everness_palm_tree_wood.png^' ..
'default_fence_overlay.png^[makealpha:255,126,126',
wield_image = 'default_fence_overlay.png^everness_palm_tree_wood.png^' ..
'default_fence_overlay.png^[makealpha:255,126,126',
material = 'everness:palm_tree_wood',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 },
sounds = Everness.node_sound_wood_defaults()
})
default.register_fence_rail('everness:fence_rail_palm_wood', {
description = S('Palm Wood Fence Rail'),
texture = 'everness_fence_rail_palm_wood.png^[transformR90',
inventory_image = 'default_fence_rail_overlay.png^everness_palm_tree_wood.png^' ..
'default_fence_rail_overlay.png^[makealpha:255,126,126',
wield_image = 'default_fence_rail_overlay.png^everness_palm_tree_wood.png^' ..
'default_fence_rail_overlay.png^[makealpha:255,126,126',
material = 'everness:palm_tree_wood',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 },
sounds = Everness.node_sound_wood_defaults()
})
default.register_mesepost('everness:mese_post_light_palm_wood', {
description = S('Palm Wood Mese Post Light'),
texture = 'everness_fence_palm_wood.png^[transformFY',
material = 'everness:palm_tree_wood',
})
-- Coral Wood
default.register_fence('everness:fence_coral_wood', {
description = S('Coral Wood Fence'),
texture = 'everness_fence_coral_wood.png',
inventory_image = 'default_fence_overlay.png^everness_fence_coral_wood.png^' ..
'default_fence_overlay.png^[makealpha:255,126,126',
wield_image = 'default_fence_overlay.png^everness_fence_coral_wood.png^' ..
'default_fence_overlay.png^[makealpha:255,126,126',
material = 'everness:coral_wood',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 },
sounds = Everness.node_sound_wood_defaults()
})
default.register_fence_rail('everness:fence_rail_coral_wood', {
description = S('Coral Wood Fence Rail'),
texture = 'everness_fence_rail_coral_wood.png^[transformR90',
inventory_image = 'default_fence_rail_overlay.png^everness_fence_coral_wood.png^' ..
'default_fence_rail_overlay.png^[makealpha:255,126,126',
wield_image = 'default_fence_rail_overlay.png^everness_fence_coral_wood.png^' ..
'default_fence_rail_overlay.png^[makealpha:255,126,126',
material = 'everness:coral_wood',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 },
sounds = Everness.node_sound_wood_defaults()
})
default.register_mesepost('everness:mese_post_light_coral_wood', {
description = S('Coral Wood Mese Post Light'),
texture = 'everness_fence_coral_wood.png^[transformFY',
material = 'everness:coral_wood',
})
-- Lava Tree Wood
default.register_fence('everness:fence_lava_tree_wood', {
description = S('Lava Tree Wood Fence'),
texture = 'everness_fence_lava_tree_wood.png',
inventory_image = 'default_fence_overlay.png^everness_lava_tree_wood.png^' ..
'default_fence_overlay.png^[makealpha:255,126,126',
wield_image = 'default_fence_overlay.png^everness_lava_tree_wood.png^' ..
'default_fence_overlay.png^[makealpha:255,126,126',
material = 'everness:lava_tree_wood',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 },
sounds = Everness.node_sound_wood_defaults()
})
default.register_fence_rail('everness:fence_rail_lava_tree_wood', {
description = S('Lava Tree Wood Fence Rail'),
texture = 'everness_fence_rail_lava_tree_wood.png^[transformR90',
inventory_image = 'default_fence_rail_overlay.png^everness_lava_tree_wood.png^' ..
'default_fence_rail_overlay.png^[makealpha:255,126,126',
wield_image = 'default_fence_rail_overlay.png^everness_lava_tree_wood.png^' ..
'default_fence_rail_overlay.png^[makealpha:255,126,126',
material = 'everness:lava_tree_wood',
groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 },
sounds = Everness.node_sound_wood_defaults()
})
default.register_mesepost('everness:mese_post_light_lava_tree_wood', {
description = S('Lava Tree Wood Mese Post Light'),
texture = 'everness_fence_lava_tree_wood.png^[transformFY',
material = 'everness:lava_tree_wood',
})

1357
mods/everness/functions.lua Normal file

File diff suppressed because it is too large Load diff

259
mods/everness/init.lua Normal file
View file

@ -0,0 +1,259 @@
--[[
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.
--]]
minetest = minetest.global_exists('minetest') and minetest --[[@as Minetest]]
local path = minetest.get_modpath('everness')
local mod_start_time = minetest.get_us_time()
-- Legacy backwards compatibility
minetest.register_alias('everness:dirt_with_grass_2', 'everness:dirt_with_grass_1')
minetest.register_alias('everness:path_dirt_with_grass_2', 'everness:path_dirt_with_grass_1')
-- MineClone2 support
if minetest.get_modpath('mcl_core') and minetest.global_exists('mcl_core') then
dofile(path .. '/mod_support_mcl_aliases.lua')
end
dofile(path .. '/api.lua')
dofile(path .. '/nodes.lua')
dofile(path .. '/nodes_farming.lua')
if Everness.settings.biomes.everness_mineral_waters_under.enabled then
dofile(path .. '/nodes_mineral_waters_under.lua')
end
dofile(path .. '/bamboo.lua')
dofile(path .. '/functions.lua')
dofile(path .. '/trees.lua')
dofile(path .. '/vines.lua')
dofile(path .. '/vines_wall.lua')
dofile(path .. '/chests.lua')
dofile(path .. '/torches.lua')
dofile(path .. '/mapgen.lua')
if Everness.settings.biomes.everness_bamboo_forest_under.enabled then
dofile(path .. '/mapgen_bamboo_forest_under.lua')
end
if Everness.settings.biomes.everness_bamboo_forest.enabled then
dofile(path .. '/mapgen_bamboo_forest.lua')
end
if Everness.settings.biomes.everness_baobab_savanna.enabled then
dofile(path .. '/mapgen_baobab_savanna.lua')
end
if Everness.settings.biomes.everness_coral_forest_dunes.enabled then
dofile(path .. '/mapgen_coral_forest_dunes.lua')
end
if Everness.settings.biomes.everness_coral_forest_ocean.enabled then
dofile(path .. '/mapgen_coral_forest_ocean.lua')
end
if Everness.settings.biomes.everness_coral_forest_deep_ocean.enabled then
dofile(path .. '/mapgen_coral_forest_deep_ocean.lua')
end
if Everness.settings.biomes.everness_coral_forest_under.enabled then
dofile(path .. '/mapgen_coral_forest_under.lua')
end
if Everness.settings.biomes.everness_coral_forest.enabled then
dofile(path .. '/mapgen_coral_forest.lua')
end
if Everness.settings.biomes.everness_crystal_forest_dunes.enabled then
dofile(path .. '/mapgen_crystal_forest_dunes.lua')
end
if Everness.settings.biomes.everness_crystal_forest_ocean.enabled then
dofile(path .. '/mapgen_crystal_forest_ocean.lua')
end
if Everness.settings.biomes.everness_crystal_forest_deep_ocean.enabled then
dofile(path .. '/mapgen_crystal_forest_deep_ocean.lua')
end
if Everness.settings.biomes.everness_crystal_forest_shore.enabled then
dofile(path .. '/mapgen_crystal_forest_shore.lua')
end
if Everness.settings.biomes.everness_crystal_forest_under.enabled then
dofile(path .. '/mapgen_crystal_forest_under.lua')
end
if Everness.settings.biomes.everness_crystal_forest.enabled then
dofile(path .. '/mapgen_crystal_forest.lua')
end
if Everness.settings.biomes.everness_cursed_lands_dunes.enabled then
dofile(path .. '/mapgen_cursed_lands_dunes.lua')
end
if Everness.settings.biomes.everness_cursed_lands_ocean.enabled then
dofile(path .. '/mapgen_cursed_lands_ocean.lua')
end
if Everness.settings.biomes.everness_cursed_lands_deep_ocean.enabled then
dofile(path .. '/mapgen_cursed_lands_deep_ocean.lua')
end
if Everness.settings.biomes.everness_cursed_lands_swamp.enabled then
dofile(path .. '/mapgen_cursed_lands_swamp.lua')
end
if Everness.settings.biomes.everness_cursed_lands_under.enabled then
dofile(path .. '/mapgen_cursed_lands_under.lua')
end
if Everness.settings.biomes.everness_cursed_lands.enabled then
dofile(path .. '/mapgen_cursed_lands.lua')
end
if Everness.settings.biomes.everness_forsaken_desert_ocean.enabled then
dofile(path .. '/mapgen_forsaken_desert_ocean.lua')
end
if Everness.settings.biomes.everness_forsaken_desert_under.enabled then
dofile(path .. '/mapgen_forsaken_desert_under.lua')
end
if Everness.settings.biomes.everness_forsaken_desert.enabled then
dofile(path .. '/mapgen_forsaken_desert.lua')
end
if Everness.settings.biomes.everness_forsaken_tundra_beach.enabled then
dofile(path .. '/mapgen_forsaken_tundra_beach.lua')
end
if Everness.settings.biomes.everness_forsaken_tundra_ocean.enabled then
dofile(path .. '/mapgen_forsaken_tundra_ocean.lua')
end
if Everness.settings.biomes.everness_forsaken_tundra_under.enabled then
dofile(path .. '/mapgen_forsaken_tundra_under.lua')
end
if Everness.settings.biomes.everness_forsaken_tundra.enabled then
dofile(path .. '/mapgen_forsaken_tundra.lua')
end
if Everness.settings.biomes.everness_frosted_icesheet_ocean.enabled then
dofile(path .. '/mapgen_frosted_icesheet_ocean.lua')
end
if Everness.settings.biomes.everness_frosted_icesheet_under.enabled then
dofile(path .. '/mapgen_frosted_icesheet_under.lua')
end
if Everness.settings.biomes.everness_frosted_icesheet.enabled then
dofile(path .. '/mapgen_frosted_icesheet.lua')
end
if Everness.settings.biomes.everness_mineral_waters.enabled then
dofile(path .. '/mapgen_mineral_waters.lua')
end
if Everness.settings.biomes.everness_mineral_waters_under.enabled then
dofile(path .. '/mapgen_mineral_waters_under.lua')
end
dofile(path .. '/mapgen_after.lua')
if minetest.get_modpath('xpanes') and minetest.global_exists('xpanes') then
dofile(path .. '/panes.lua')
end
if minetest.get_modpath('stairs') and minetest.global_exists('stairs') then
dofile(path .. '/stairs.lua')
end
if minetest.get_modpath('walls') and minetest.global_exists('walls') then
dofile(path .. '/walls.lua')
end
if minetest.get_modpath('default') or minetest.global_exists('default') then
if default.register_fence
and default.register_fence_rail
and default.register_mesepost
then
dofile(path .. '/fences.lua')
end
end
if minetest.get_modpath('doors') and minetest.global_exists('doors') then
dofile(path .. '/doors.lua')
end
if not minetest.get_modpath('bucket') and not minetest.get_modpath('mcl_buckets') then
dofile(path .. '/buckets.lua')
end
dofile(path .. '/tools.lua')
dofile(path .. '/craftitems.lua')
dofile(path .. '/crafting.lua')
if Everness.settings.features.everness_feature_skybox then
dofile(path .. '/skybox.lua')
end
dofile(path .. '/env_sounds.lua')
if Everness.settings.features.everness_feature_sneak_pickup then
dofile(path .. '/sneak_pickup.lua')
end
dofile(path .. '/privileges.lua')
dofile(path .. '/chat_commands.lua')
Everness:encyclopedia_init()
minetest.register_on_mods_loaded(function()
Everness.set_loot_chest_items()
end)
--
-- Mod Support
--
if minetest.get_modpath('x_farming') and minetest.global_exists('x_farming') then
dofile(path .. '/mod_support_x_farming.lua')
end
if minetest.get_modpath('x_tumbleweed') and minetest.global_exists('XTumbleweed') then
dofile(path .. '/mod_support_x_tumbleweed.lua')
end
if minetest.get_modpath('x_obsidianmese')
and minetest.global_exists('x_obsidianmese')
-- backwards compatibility check
and x_obsidianmese.register_path_node
then
dofile(path .. '/mod_support_x_obsidianmese.lua')
end
-- MineClone2
if minetest.get_modpath('mcl_core') and minetest.global_exists('mcl_core') then
dofile(path .. '/mod_support_mcl.lua')
end
-- Minetest Game
dofile(path .. '/mod_support_mtg.lua')
local mod_end_time = (minetest.get_us_time() - mod_start_time) / 1000000
print('[Mod] everness loaded.. [' .. mod_end_time .. 's]')

View file

@ -0,0 +1,251 @@
# textdomain: everness
Agave Leaf=Feuille d'agave
Amaranita Lantern=Lanterne Amarante
Ancient Emerald Ice=Glace d'émeraude ancienne
Bamboo Block=Bloc de bambou
Bamboo Door=Porte en Bambou
Bamboo Mosaic Wood Slab=Dalle en mosaïque de bambou
Bamboo Mosaic Wood Stair=Escalier en mosaïque de bambou
Bamboo Mosaic=Mosaïque de bambou
Bamboo Planks=Planches de bambou
Bamboo Sprout=Pousse de bambou
Bamboo Trapdoor=Trappe en Bambou
Bamboo Wood Fence Gate=Portillon en bois de bambou
Bamboo Wood Fence Rail=Rail de clôture en bois de bambou
Bamboo Wood Fence=Clôture en bois de bambou
Bamboo Wood Mese Post Light=Lampadaire de Mese en bois de bambou
Bamboo Wood Slab=Dalle en bois de bambou
Bamboo Wood Stair=Escalier en bois de bambou
Bamboo=Bambou
Baobab Fruit Marker=Marqueur du fruit du Baobab
Baobab Fruit=Fruit du Baobab
Baobab Roasted Fruit=Fruit de Baobab Rôti
Baobab Sapling=Plant de Baobab
Baobab Tree Leaves=Feuilles de Baobab
Baobab Tree Trunk=Tronc de Baobab
Baobab Wood Planks=Planches en bois de Baobab
Baobab Wood Slab=Dalle en bois de baobab
Baobab Wood Stair=Escalier en bois de baobab
Blood Spoore Plant Small=Petite plante spore sanglante
Blood Spoore Plant=Plante spore sanglante
Blooming Cooksonia=Cooksonia en fleur
Blue Cactus=Cactus bleu
Blue Crying Obsidian=Obsidienne pleureuse bleue
Blue Vine Lantern=Lanterne de vigne bleue
Blue Weeping Obsidian=Obsidienne larmoyante bleue
Bone Pyrit Door=Porte en os de pyrite
Bone=Os
Bulb Vine=Vigne bulbeuse
Cave Barrel Cactus=Cactus baril des cavernes
Cave Flower with Particles=Fleur des cavernes avec particules
Cave Flower=Fleur des cavernes
Cave Vine with Mese Leaves=Vigne des cavernes avec des feuille de Mese
Cave Vine=Vigne des cavernes
Chiseled Quartz=Quartz ciselé
Cobweb=Toile d'araignée
Coral Bones=Os coraliens
Coral Burdock=Bardane coralienne
Coral Bush=Buisson coralien
Coral Cobblestone Wall=Mur de pavés coraliens
Coral Corals=Coraux coraliens
Coral Desert Cobblestone=Pavé de désert coralien
Coral Desert Stone with Moss=Pierre de désert coralien avec de la mousse
Coral Desert Stone=Pierre de désert coralien
Coral Dirt=Terre coralienne
Coral Frosted=Givré coralien
Coral Grass=Herbe coralienne
Coral Mossy Cobblestone Wall=Mur de pavés coraliens moussus
Coral Mossy Cobblestone=Pavé de mousse coralienne
Coral Plant Bioluminescent=Plante coralienne bioluminescente
Coral Sand=Sable coralien
Coral Shrub=Arbuste coralien
Coral Starfish=Étoile de mer coralienne
Coral Tree Bioluminescent Sapling=Plant d'arbre coralien luminescent
Coral Tree Bioluminescent=Arbre coralien luminescent
Coral Tree Leaves=Feuille d'arbre coralien
Coral Tree Sapling=Plant d'arbre coralien
Coral Tree Trunk=Tronc d'arbre coralien
Coral White Sand=Sable coralien blanc
Creeping Moss Spores=Spores de mousse grimpante
Crystal Bush Leaves=Feuilles de buisson de cristal
Crystal Bush Sapling=Plant de buisson de cristal
Crystal Bush Stem=Tige de buisson de cristal
Crystal Cave Dirt with Moss=Terre de caverne de cristal avec de l'herbe
Crystal Cave Dirt=Terre de caverne de cristal
Crystal Coral Dark=Cristal coralien sombre
Crystal Coral Light=Cristal coralien clair
Crystal Dirt=Terre de cristal
Crystal Grass=Herbe de cristal
Crystal Moss Block=Bloc de mousse de cristal
Crystal Mushrooms=Champigons de cristal
Crystal Sand=Sable de cristal
Crystal Tree Large Sapling=Grand plant d'arbre de cristal
Crystal Tree Leaves=Feuille d'arbre de cristal
Crystal Tree Sapling=Plant d'arbre de cristal
Crystal Tree Trunk=Tronc d'arbre de cristal
Crystal Waterlily=Nénuphar de cristal
Cursed Brick Wall=Mur de briques maudites
Cursed Brick=Brique maudite
Cursed Bush Leaves=Feuilles de buisson maudit
Cursed Bush Sapling=Plant de buisson maudit
Cursed Bush Stem=Tige de buisson maudit
Cursed Dirt=Terre maudite
Cursed Dream Stone=Pierre de rêve maudite
Cursed Dream Tree Sapling=Plant d'arbre des rêves maudit
Cursed Mud=Boue maudite
Cursed Pumpkin Lantern=Lanterne citrouille maudite
Cursed Sand=Sable maudit
Cursed Stone=Pierre maudite
Cyan Crystal=Cristal cyan
Dense Emerald Ice=Glace d'émeraude dense
Dense Vine=Vigne dense
Dirt with Coral Grass=Terre avec de l'herbe coralienne
Dirt with Crystal Grass=Terre avec de l'herbe de cristal
Dirt with Cursed Grass=Terre avec de l'herbe maudite
Dirt with Grass=Terre avec de l'herbe
Dirt=Terre
Dry Ocean Dirt=Terre de l'océan sec
Dry Tree Branches=Branches d'arbre sec
Dry Tree Sapling=Plant d'arbre sec
Dry Tree Trunk=Tronc d'arbre sec
Dry Wood Fence Rail=Rail de clôture en bois sec
Dry Wood Fence=Clôture en bois sec
Dry Wood Mese Post Light=Lampadaire de Mese en bois sec
Dry Wood Planks=Planches en bois sec
Dry Wood Slab=Dalle en bois sec
Dry Wood Stair=Escalier en bois sec
Egg plant=Aubergine
Emerald Ice=Glace d'émeraude
Eye Vine Lantern=Lanterne de vigne oculaire
Eye Vine=Vigne oculaire
Floating Crystal=Cristal flottant
Flowered Vine=Vigne florissante
Forged Pyrite Block=Bloc de pyrite forgé
Forsaken Desert Brick Red Slab=Dalle en brique rouge de désert abandonné
Forsaken Desert Brick Red Stair=Escalier en brique rouge de désert abandonné
Forsaken Desert Brick Red=Brique rouge de désert abandonné
Forsaken Desert Brick Slab=Dalle en brique de désert abandonné
Forsaken Desert Brick Stair=Escalier en brique de désert abandonné
Forsaken Desert Brick=Brique de désert abandonné
Forsaken Desert Chiseled Stone Slab=Dalle en pierre ciselée de désert abandonné
Forsaken Desert Chiseled Stone Stair=Escalier en pierre ciselée de désert abandonné
Forsaken Desert Chiseled Stone=Pierre ciselée de désert abandonné
Forsaken Desert Cobblestone Red=Pavé rouge de désert abandonné
Forsaken Desert Cobblestone=Pavé de désert abandonné
Forsaken Desert Engraved Stone=Pierre gravée de désert abandonné
Forsaken Desert Sand=Sable de désert abandonné
Forsaken Desert Stone=Pierre de désert abandonné
Forsaken Fire=Feu abandonné
Forsaken Plant=Plante abandonnée
Forsaken Tundra Beach Sand with Shells=Sable de plage de toundra abandonnée avec des coquillages
Forsaken Tundra Beach Sand=Sable de plage de toundra abandonnée
Forsaken Tundra Brick Slab=Dalle en brique de toundra abandonnée
Forsaken Tundra Brick Stair=Escalier en brique de toundra abandonnée
Forsaken Tundra Brick Wall=Mur de briques de toundra abandonnée
Forsaken Tundra Brick=Brique de toundra abandonnée
Forsaken Tundra Cobblestone Slab=Dalle en pavé de toundra abandonnée
Forsaken Tundra Cobblestone Stair=Escalier en pavé de toundra abandonnée
Forsaken Tundra Cobblestone Wall=Mur de pavés de toundra abandonnée
Forsaken Tundra Cobblestone=Pavé de toundra abandonnée
Forsaken Tundra Dirt with Grass=Terre de toundra abandonnée avec de l'herbe
Forsaken Tundra Dirt=Terre de toundra abandonnée
Forsaken Tundra Rocks=Roche de toundra abandonnée
Forsaken Tundra Stone Slab=Dalle en pierre de toundra abandonnée
Forsaken Tundra Stone Stair=Escalier en pierre de toundra abandonnée
Forsaken Tundra Stone Wall=Mur de pierre de toundra abandonnée
Forsaken Tundra Stone=Pierre de toundra abandonnée
Forsythia Bush=Buisson de Forsythia
Frosted Cave Ice=Glace de caverne givrée
Frosted Ice Translucent=Glace givrée transparente
Frosted Ice=Glace givrée
Frosted Icicle Floor=Sol de glaçon givré
Frosted Icicle=Glaçon givré
Frosted Snow Block=Bloc de neige givré
Globulagus=Eucalyptus Globulus
Glowing Pillar=Pilier rayonnant
Golden Vine=Vigne d'or
Hollow Tree Trunk=Tronc d'arbre creux
Illumi Root=Illumi Racine
Ivis Moss=Mousse d'Ivis
Ivis Vine=Vigne d'ivis
Lumabus Vine Lantern=Lanterne de vigne luminescente
Lumabus Vine=Vigne luminescente
Lumecorn=Blé luminescent
Magma Cobblestone Slab=Dalle en pavé magmatique
Magma Cobblestone Stair=Escalier en pavé magmatique
Magma Cobblestone Wall=Mur de pavé magmatique
Marsh Grass=Herbe des marais
Mese Tree Trunk=Tronc d'arbre à Mese
Mold Cobble=Galet de moule
Mold Stone=Pierre de moule
Moss Block=Bloc de mousse
Ngrass=N-Herbe
Orange Cactus=Cactus orange
Orange Coral Grass=Herbe coralienne orange
Orange Crystal Block=Bloc de cristal orange
Orange Crystal=Cristal orange
Polished Pyrite Block=Bloc de pyrite poli
Purple Crystal Block=Bloc de cristal pourpre
Purple Crystal=Cristal pourpre
Pyrite Block=Bloc de pyrite
Pyrite Brick=Brique de pyrite
Pyrite Glass Pane=Panneau de verre de pyrite
Pyrite Glass=Verre de pyrite
Pyrite Ingot=Lingot de Pyrite
Pyrite Lantern=Lanterne en pyrite
Pyrite Lump=Morceau de Pyrite
Pyrite Ore=Minerai de pyrite
Pyrite Pillar Bottom=Pied de pilier en pyrite
Pyrite Pillar Middle=Colonne de pilier en pyrite
Pyrite Pillar Small=Petit pilier en pyrite
Pyrite Pillar Top=Tête de pilier en pyrite
Pyrite Slab Brick=Dalle de brique de pyrite
Pyrite Spiral=Spirale de pyrite
Quartz Block Slab=Dalle en bloc de quartz
Quartz Block Stair=Escalier en bloc de quartz
Quartz Block=Bloc de quartz
Quartz Chiseled Slab=Dalle en quartz ciselé
Quartz Chiseled Stair=Escalier en quartz ciselé
Quartz Crystal=Cristal de Quartz
Quartz Ore=Minerai de quartz
Quartz Pillar Slab=Dalle en pilier de quarte
Quartz Pillar Stair=Escalier en pilier de quartz
Quartz Pillar=Pilier de quartz
Red Castor=Ricin rouge
Reeds Vine=Vigne de roseaux
Sequoia Tree Leaves=Feuilles de Séquoia
Sequoia Tree Sapling=Plant de Séquoia
Sequoia Tree Trunk=Tronc de Séquoia
Sequoia Wood Planks=Planches en bois de Séquoia
Sequoia Wood Slab=Dalle en bois de Séquoia
Sequoia Wood Stair=Escalier en bois de Séquoia
Skull with Candle=Squelette avec bougie
Soul Sandstone Veined=Grès des âmes veiné
Soul Sandstone=Grès des âmes
Spine Kelp=Varch épineux
Sulfur Stone=Pierre de soufre
Tall Coral Grass=Grande Herbe coralienne
Termite Block=Bloc de termitière
Tinted Glass Red=Verre teinté rouge
Twisted Crystal Grass=Herbe de cristal tordue
Twisted Vine=Vigne tordue
Venus Trap Plant=Dionée attrape-mouche
Vine Shears=Cisailles à vigne
Volcanic Rock Slab=Dalle en roche volcanique
Volcanic Rock Stair=Escalier en roche volcanique
Volcanic Rock Wall=Mur de roches volcaniques
Volcanic Rock with Magma Slab=Dalle en roche volcanique avec du magma
Volcanic Rock with Magma Stair=Escalier en roche volcanique avec du magma
Volcanic Rock with Magma Wall=Mur de roches volcaniques avec du magma
Volcanic Rock with Magma=Roche volcanique avec du magma
Volcanic Rock=Roche volcanique
Volcanic Sulfur Stone=Pierre volcanique sulfurée
Weeping Obsidian=Obsidienne larmoyante
Whispering Gourd Vine=Gourde de vigne chuchotante
Willow Door=Porte en Saule
Willow Tree Leaves=Feuilles de saule
Willow Tree Trunk=Tronc de Saule
Willow Vine=Vigne de saule
Willow Wood Planks=Planches en bois de saule
Willow Wood Slab=Dalle en bois de saule
Willow Wood Stair=Escalier en bois de saule

View file

@ -0,0 +1,251 @@
# textdomain: everness
Quartz Crystal=Kvarckristály
Baobab Roasted Fruit=Sült baobabgyümölcs
Pyrite Ingot=Piritrúd
Pyrite Lump=Piritrög
Bamboo Door=Bambuszajtó
Bamboo Trapdoor=Bambusz csapóajtó
Bamboo Wood Fence Gate=Bambusz kerítésajtó
Bone Pyrit Door=Csont-pirit ajtó
Willow Door=Fűzfaajtó
Dry Wood Fence=Elszáradt fakerítés
Dry Wood Fence Rail=Elszáradt fakerítés-rács
Dry Wood Mese Post Light=Elszáradt fa-mese-lámpa
Bamboo Wood Fence=Bambusz fakerítés
Bamboo Wood Fence Rail=Bambusz fakerítés-rács
Bamboo Wood Mese Post Light=Bambusz fa-mese-lámpa
Pyrite Ore=Piritérc
Pyrite Block=Piritblokk
Forged Pyrite Block=Kovácsolt piritblokk
Pyrite Brick=Pirittégla
Pyrite Slab Brick=Pirit lap-tégla
Pyrite Spiral=Pirit spirál
Pyrite Pillar Bottom=Pirit oszloptalapzat
Pyrite Pillar Middle=Piritoszlop
Pyrite Pillar Top=Pirit oszlopfő
Pyrite Pillar Small=Kis piritoszlop
Polished Pyrite Block=Csiszolt piritblokk
Quartz Ore=Kvarcérc
Coral Desert Stone=Korallsivatagi kő
Coral Bones=Korallsivatagi csont
Coral Desert Cobblestone=Korallsivatagi macskakő
Coral Mossy Cobblestone=Korallsivatagi macskakő, mohos
Coral Desert Stone with Moss=Korallsivatagi kő, mohos
Forsaken Desert Stone=Elhagyatott sivatagi kő
Forsaken Desert Cobblestone Red=Elhagyatott sivatagi macskakő, vörös
Forsaken Desert Cobblestone=Elhagyatott sivatagi macskakő
Volcanic Rock=Vulkanikus kőzet
Volcanic Rock with Magma=Vulkanikus kőzet magmával
Cursed Stone=Elátkozott kő
Cursed Brick=Elátkozott tégla
Volcanic Sulfur Stone=Vulkanikus kénkő
Sulfur Stone=Kénkő
Forsaken Tundra Cobblestone=Elhagyatott tundrai macskakő
Forsaken Tundra Stone=Elhagyatott tundrai kő
Mold Cobble=Penészes macskakő
Forsaken Tundra Brick=Elhagyatott tundrai tégla
Forsaken Tundra Rocks=Elhagyatott tundrai kőzet
Blue Crying Obsidian=Sikoltó obszidián, kék
Blue Weeping Obsidian=Könnyező obszidián, kék
Weeping Obsidian=Könnyező obszidián
Mold Stone=Penészes kő
Soul Sandstone=Lélek-homokkő
Soul Sandstone Veined=Lélek-homokkő, erezett
Purple Crystal Block=Lila kristályblokk
Orange Crystal Block=Narancs kristályblokk
Quartz Block=Kvarckristály-blokk
Chiseled Quartz=Csiszolt kvarc
Quartz Pillar=Kvarcoszlop
Forsaken Desert Brick=Elhagyatott sivatagi tégla
Forsaken Desert Brick Red=Elhagyatott sivatagi tégla, vörös
Forsaken Desert Chiseled Stone=Elhagyatott sivatagi kő, csiszolt
Forsaken Desert Engraved Stone=Elhagyatott sivatagi kő, vésett
Coral Dirt=Korallföld
Cursed Dirt=Elátkozott föld
Crystal Dirt=Kristályföld
Forsaken Tundra Dirt=Elhagyatott tundraföld
Forsaken Tundra Dirt with Grass=Elhagyatott tundraföld, füves
Dirt with Coral Grass=Föld, korallfüves
Dirt with Cursed Grass=Föld, elátkozott füves
Dirt with Crystal Grass=Föld, kristályfüves
Dry Ocean Dirt=Száraz óceánfenék-talaj
Dirt=Föld
Dirt with Grass=Föld, fűvel
Crystal Cave Dirt=Kristálybarlangi föld
Crystal Cave Dirt with Moss=Kristálybarlangi föld, mohos
Moss Block=Mohablokk
Crystal Moss Block=Kristálymoha-blokk
Coral Sand=Korallhomok
Coral White Sand=Korallhomok, fehér
Cursed Sand=Elátkozott homok
Crystal Sand=Kristályhomok
Forsaken Tundra Beach Sand=Elhagyatott tundraparti homok
Forsaken Tundra Beach Sand with Shells=Elhagyatott tundraparti homok, kagylós
Forsaken Desert Sand=Elhagyatott sivatagi homok
Frosted Snow Block=Fagyalt hóblokk
Frosted Ice=Fagyalt jég
Frosted Ice Translucent=Fagyalt jég, átlátszó
Frosted Cave Ice=Fagyalt jég, barlangi
Bone=Csont
Ancient Emerald Ice=Ősi smaragdjég
Dense Emerald Ice=Sűrű smaragdjég
Emerald Ice=Smaragdjég
Cursed Mud=Elátkozott sár
Cobweb=Pókháló
Cave Flower=Barlangi virág
Cave Flower with Particles=Barlangi virág, szemcsés
Forsaken Fire=Elhagyatott tűz
Coral Tree Trunk=Korallfa-törzs
Coral Tree Bioluminescent=Korallfa, biolumineszcens
Cursed Dream Stone=Elátkozott álomkő
Dry Tree Trunk=Elszáradt fatörzs
Baobab Tree Trunk=Baobabfa-törzs
Sequoia Tree Trunk=Mammutfenyő-törzs
Willow Tree Trunk=Fűzfa-törzs
Willow Wood Planks=Fűzfa-palánk
Dry Wood Planks=Elszáradt palánk
Hollow Tree Trunk=Üregesfa-törzs
Crystal Tree Trunk=Kristályfa-törzs
Mese Tree Trunk=Mesefa-törzs
Baobab Tree Leaves=Baobabfa-lomb
Sequoia Tree Leaves=Mammutfenyő-lomb
Baobab Fruit=baobabgyümölcs
Baobab Fruit Marker=baobabgyümölcs-jelölő
Baobab Sapling=Baobab-palánta
Willow Tree Leaves=Fűzfa-lomb
Coral Tree Leaves=Korallfa-lomb
Dry Tree Branches=Elszáradt faág
Crystal Tree Leaves=Kristályfa-lomb
Coral Tree Sapling=Korallfa-palánta
Coral Tree Bioluminescent Sapling=Korallfa-palánta, biolumineszcens
Dry Tree Sapling=Elszáradt fa-palánta
Cursed Dream Tree Sapling=Elátkozott álomfa-palánta
Sequoia Tree Sapling=Mammutfenyő-palánta
Crystal Tree Sapling=Kristályfa-palánta
Crystal Tree Large Sapling=Kristályfa-palánta, nagy
Crystal Bush Stem=Kristálybokor-törzs
Crystal Bush Leaves=Kristálybokor-lomb
Crystal Bush Sapling=Kristálybokor-palánta
Cursed Bush Stem=Elátkozott bokor-törzs
Cursed Bush Leaves=Elátkozott bokor-lomb
Cursed Bush Sapling=Elátkozott bokor-palánta
Coral Burdock=Korallbojtorján
Coral Bush=Korallbokor
Coral Shrub=Korallbozót
Orange Coral Grass=Narancs korallfű
Globulagus=Golyós eukaliptusz
Tall Coral Grass=Magas korallfű
Purple Crystal=Lila kristály
Orange Crystal=Narancs kristály
Cyan Crystal=Cián kristály
Coral Plant Bioluminescent=Korallnövény, biolumineszcens
Blooming Cooksonia=Virágzó májmoha
Creeping Moss Spores=Kúszómoha-spóra
Frosted Icicle=Fagyalt jégcsap
Frosted Icicle Floor=Fagyalt jégcsap-padló
Coral Grass=Korallfű
Red Castor=Vörös ricinus
Crystal Mushrooms=Kristálygomba
Twisted Crystal Grass=Csavarodott kristályfű
Crystal Grass=Kristályfű
Marsh Grass=Mocsári fű
Forsaken Plant=Elhagyatott növény
Blue Cactus=Kék kaktusz
Cave Barrel Cactus=Barlangi hordókaktusz
Venus Trap Plant=Vénusz légycsapó
Illumi Root=Illumi-gyökér
Crystal Waterlily=Kristály-vízililiom
Orange Cactus=Narancssárga kaktusz
Agave Leaf=Agave-lomb
Egg plant=Padlizsán
Ivis Moss=Ivis-moha
Ngrass=N-fű
Bamboo Sprout=Bambuszrügy
Blood Spoore Plant=Vérspóra-növény
Blood Spoore Plant Small=Vérspóra-növény, kicsi
Termite Block=Termeszblokk
Bamboo Block=Bambuszblokk
Bamboo Planks=Bambuszpalánk
Bamboo Mosaic=Bambuszmozaik
Baobab Wood Planks=Baobabfa-palánk
Sequoia Wood Planks=Mammutfenyő-palánk
Coral Corals=Korall
Coral Frosted=Korall, fagyalt
Coral Starfish=Korall-csillaghal
Spine Kelp=Gerinchínár
Crystal Coral Dark=Kristálykorall, sötét
Crystal Coral Light=Kristálykorall, világos
Skull with Candle=Koponya gyertyával
Forsythia Bush=Forsythia-bokor
Glowing Pillar=Izzó oszlop
Blue Vine Lantern=Kék inda-lámpás
Amaranita Lantern=Amaranita-lámpás
Lumecorn=Lume-mag
Tinted Glass Red=Színezett üveg, vörös
Pyrite Lantern=Piritlámpás
Pyrite Glass=Piritüveg
Lumabus Vine Lantern=Lumabus-inda lámpás
Eye Vine Lantern=Szem-inda lámpás
Cursed Pumpkin Lantern=Elátkozott töklámpás
Floating Crystal=Lebegő kristály
Bamboo=Bambusz
Pyrite Glass Pane=Piritüveg-lap
Quartz Block Stair=Csiszolt blokk-lépcső
Quartz Block Slab=Csiszolt blokk-kő
Quartz Chiseled Stair=Csiszolt kvarc-lépcső
Quartz Chiseled Slab=Csiszolt kvarc-lap
Quartz Pillar Stair=Kvarcoszlop-lépcső
Quartz Pillar Slab=Kvarcoszlop-lap
Dry Wood Stair=Elszáradt fa-lépcső
Dry Wood Slab=Elszáradt fa-lap
Bamboo Wood Stair=Bambusz fa-lépcső
Bamboo Wood Slab=Bambusz fa-lap
Bamboo Mosaic Wood Stair=Bambuszmozaik fa-lépcső
Bamboo Mosaic Wood Slab=Bambuszmozaik fa-lap
Forsaken Desert Brick Stair=Elhagyatott sivatagi tégla-lépcső
Forsaken Desert Brick Slab=Elhagyatott sivatagi tégla-lap
Forsaken Desert Brick Red Stair=Elhagyatott sivatagi tégla-lépcső, vörös
Forsaken Desert Brick Red Slab=Elhagyatott sivatagi tégla-lap, vörös
Forsaken Desert Chiseled Stone Stair=Elhagyatott sivatagi csiszolt kő-lépcső
Forsaken Desert Chiseled Stone Slab=Elhagyatott sivatagi csiszolt kő-lap
Baobab Wood Stair=Baobabfa-lépcső
Baobab Wood Slab=Baobabfa-lap
Sequoia Wood Stair=Mammutfenyő-lépcső
Sequoia Wood Slab=Mammutfenyő-lap
Forsaken Tundra Cobblestone Stair=Elhagyatott tundrai macskakő-lépcs
Forsaken Tundra Cobblestone Slab=Elhagyatott tundrai macskakő-lap
Forsaken Tundra Stone Stair=Elhagyatott tundrai kő-lépcső
Forsaken Tundra Stone Slab=Elhagyatott tundrai kő-lap
Forsaken Tundra Brick Stair=Elhagyatott tundrai tégla-lépcső
Forsaken Tundra Brick Slab=Elhagyatott tundrai tégla-lap
Willow Wood Stair=Fűzfa-lépcső
Willow Wood Slab=Fűzfa-lap
Magma Cobblestone Stair=Magmás macskakő-lépcső
Magma Cobblestone Slab=Magmás macskakő-lap
Volcanic Rock Stair=Vulkanikus kőzet-lépcső
Volcanic Rock Slab=Vulkanikus kőzet-lap
Volcanic Rock with Magma Stair=Magmás vulkanikus kőzet-lépcső
Volcanic Rock with Magma Slab=Magmás vulkanikus kőzet-lap
Vine Shears=Inda-metszőolló
Cave Vine=Barlangi inda
Cave Vine with Mese Leaves=Barlangi inda mese-levelekkel
Whispering Gourd Vine=Suttogó tök-inda
Bulb Vine=Rügyező inda
Willow Vine=Fűzfainda
Eye Vine=Szem-inda
Lumabus Vine=Lumabus-inda
Ivis Vine=Ivis-inda
Flowered Vine=Virágzó inda
Reeds Vine=Nádinda
Twisted Vine=Csavarodott inda
Golden Vine=Arany inda
Dense Vine=Sűrű inda
Coral Cobblestone Wall=Korall macskakő-fal
Coral Mossy Cobblestone Wall=Korall macskakő-fal, mohos
Cursed Brick Wall=Elátkozott tégla-fal
Forsaken Tundra Cobblestone Wall=Elhagyatott tundrai macskakő-fal
Forsaken Tundra Stone Wall=Elhagyatott tundrai kőfal
Forsaken Tundra Brick Wall=Elhagyatott tundrai téglafal
Magma Cobblestone Wall=Magmás macskakő-fal
Volcanic Rock Wall=Vulkanikus kőzetfal
Volcanic Rock with Magma Wall=Magmás vulkanikus kőzetfal

View file

@ -0,0 +1,251 @@
# textdomain: everness
Quartz Crystal=
Baobab Roasted Fruit=
Pyrite Ingot=
Pyrite Lump=
Bamboo Door=
Bamboo Trapdoor=
Bamboo Wood Fence Gate=
Bone Pyrit Door=
Willow Door=
Dry Wood Fence=
Dry Wood Fence Rail=
Dry Wood Mese Post Light=
Bamboo Wood Fence=
Bamboo Wood Fence Rail=
Bamboo Wood Mese Post Light=
Pyrite Ore=
Pyrite Block=
Forged Pyrite Block=
Pyrite Brick=
Pyrite Slab Brick=
Pyrite Spiral=
Pyrite Pillar Bottom=
Pyrite Pillar Middle=
Pyrite Pillar Top=
Pyrite Pillar Small=
Polished Pyrite Block=
Quartz Ore=
Coral Desert Stone=
Coral Bones=
Coral Desert Cobblestone=
Coral Mossy Cobblestone=
Coral Desert Stone with Moss=
Forsaken Desert Stone=
Forsaken Desert Cobblestone Red=
Forsaken Desert Cobblestone=
Volcanic Rock=
Volcanic Rock with Magma=
Cursed Stone=
Cursed Brick=
Volcanic Sulfur Stone=
Sulfur Stone=
Forsaken Tundra Cobblestone=
Forsaken Tundra Stone=
Mold Cobble=
Forsaken Tundra Brick=
Forsaken Tundra Rocks=
Blue Crying Obsidian=
Blue Weeping Obsidian=
Weeping Obsidian=
Mold Stone=
Soul Sandstone=
Soul Sandstone Veined=
Purple Crystal Block=
Orange Crystal Block=
Quartz Block=
Chiseled Quartz=
Quartz Pillar=
Forsaken Desert Brick=
Forsaken Desert Brick Red=
Forsaken Desert Chiseled Stone=
Forsaken Desert Engraved Stone=
Coral Dirt=
Cursed Dirt=
Crystal Dirt=
Forsaken Tundra Dirt=
Forsaken Tundra Dirt with Grass=
Dirt with Coral Grass=
Dirt with Cursed Grass=
Dirt with Crystal Grass=
Dry Ocean Dirt=
Dirt=
Dirt with Grass=
Crystal Cave Dirt=
Crystal Cave Dirt with Moss=
Moss Block=
Crystal Moss Block=
Coral Sand=
Coral White Sand=
Cursed Sand=
Crystal Sand=
Forsaken Tundra Beach Sand=
Forsaken Tundra Beach Sand with Shells=
Forsaken Desert Sand=
Frosted Snow Block=
Frosted Ice=
Frosted Ice Translucent=
Frosted Cave Ice=
Bone=
Ancient Emerald Ice=
Dense Emerald Ice=
Emerald Ice=
Cursed Mud=
Cobweb=
Cave Flower=
Cave Flower with Particles=
Forsaken Fire=
Coral Tree Trunk=
Coral Tree Bioluminescent=
Cursed Dream Stone=
Dry Tree Trunk=
Baobab Tree Trunk=
Sequoia Tree Trunk=
Willow Tree Trunk=
Willow Wood Planks=
Dry Wood Planks=
Hollow Tree Trunk=
Crystal Tree Trunk=
Mese Tree Trunk=
Baobab Tree Leaves=
Sequoia Tree Leaves=
Baobab Fruit=
Baobab Fruit Marker=
Baobab Sapling=
Willow Tree Leaves=
Coral Tree Leaves=
Dry Tree Branches=
Crystal Tree Leaves=
Coral Tree Sapling=
Coral Tree Bioluminescent Sapling=
Dry Tree Sapling=
Cursed Dream Tree Sapling=
Sequoia Tree Sapling=
Crystal Tree Sapling=
Crystal Tree Large Sapling=
Crystal Bush Stem=
Crystal Bush Leaves=
Crystal Bush Sapling=
Cursed Bush Stem=
Cursed Bush Leaves=
Cursed Bush Sapling=
Coral Burdock=
Coral Bush=
Coral Shrub=
Orange Coral Grass=
Globulagus=
Tall Coral Grass=
Purple Crystal=
Orange Crystal=
Cyan Crystal=
Coral Plant Bioluminescent=
Blooming Cooksonia=
Creeping Moss Spores=
Frosted Icicle=
Frosted Icicle Floor=
Coral Grass=
Red Castor=
Crystal Mushrooms=
Twisted Crystal Grass=
Crystal Grass=
Marsh Grass=
Forsaken Plant=
Blue Cactus=
Cave Barrel Cactus=
Venus Trap Plant=
Illumi Root=
Crystal Waterlily=
Orange Cactus=
Agave Leaf=
Egg plant=
Ivis Moss=
Ngrass=
Bamboo Sprout=
Blood Spoore Plant=
Blood Spoore Plant Small=
Termite Block=
Bamboo Block=
Bamboo Planks=
Bamboo Mosaic=
Baobab Wood Planks=
Sequoia Wood Planks=
Coral Corals=
Coral Frosted=
Coral Starfish=
Spine Kelp=
Crystal Coral Dark=
Crystal Coral Light=
Skull with Candle=
Forsythia Bush=
Glowing Pillar=
Blue Vine Lantern=
Amaranita Lantern=
Lumecorn=
Tinted Glass Red=
Pyrite Lantern=
Pyrite Glass=
Lumabus Vine Lantern=
Eye Vine Lantern=
Cursed Pumpkin Lantern=
Floating Crystal=
Bamboo=
Pyrite Glass Pane=
Quartz Block Stair=
Quartz Block Slab=
Quartz Chiseled Stair=
Quartz Chiseled Slab=
Quartz Pillar Stair=
Quartz Pillar Slab=
Dry Wood Stair=
Dry Wood Slab=
Bamboo Wood Stair=
Bamboo Wood Slab=
Bamboo Mosaic Wood Stair=
Bamboo Mosaic Wood Slab=
Forsaken Desert Brick Stair=
Forsaken Desert Brick Slab=
Forsaken Desert Brick Red Stair=
Forsaken Desert Brick Red Slab=
Forsaken Desert Chiseled Stone Stair=
Forsaken Desert Chiseled Stone Slab=
Baobab Wood Stair=
Baobab Wood Slab=
Sequoia Wood Stair=
Sequoia Wood Slab=
Forsaken Tundra Cobblestone Stair=
Forsaken Tundra Cobblestone Slab=
Forsaken Tundra Stone Stair=
Forsaken Tundra Stone Slab=
Forsaken Tundra Brick Stair=
Forsaken Tundra Brick Slab=
Willow Wood Stair=
Willow Wood Slab=
Magma Cobblestone Stair=
Magma Cobblestone Slab=
Volcanic Rock Stair=
Volcanic Rock Slab=
Volcanic Rock with Magma Stair=
Volcanic Rock with Magma Slab=
Vine Shears=
Cave Vine=
Cave Vine with Mese Leaves=
Whispering Gourd Vine=
Bulb Vine=
Willow Vine=
Eye Vine=
Lumabus Vine=
Ivis Vine=
Flowered Vine=
Reeds Vine=
Twisted Vine=
Golden Vine=
Dense Vine=
Coral Cobblestone Wall=
Coral Mossy Cobblestone Wall=
Cursed Brick Wall=
Forsaken Tundra Cobblestone Wall=
Forsaken Tundra Stone Wall=
Forsaken Tundra Brick Wall=
Magma Cobblestone Wall=
Volcanic Rock Wall=
Volcanic Rock with Magma Wall=

150
mods/everness/mapgen.lua Normal file
View file

@ -0,0 +1,150 @@
--[[
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.
--]]
--
-- Register ores
--
-- Scatter ores
-- Pyrite
Everness:register_ore({
ore_type = 'scatter',
ore = 'everness:stone_with_pyrite',
wherein = 'default:stone',
clust_scarcity = 13 * 13 * 13,
clust_num_ores = 5,
clust_size = 3,
y_max = 31000,
y_min = 1025,
})
Everness:register_ore({
ore_type = 'scatter',
ore = 'everness:stone_with_pyrite',
wherein = 'default:stone',
clust_scarcity = 15 * 15 * 15,
clust_num_ores = 3,
clust_size = 2,
y_max = -256,
y_min = -511,
})
Everness:register_ore({
ore_type = 'scatter',
ore = 'everness:stone_with_pyrite',
wherein = 'default:stone',
clust_scarcity = 13 * 13 * 13,
clust_num_ores = 5,
clust_size = 3,
y_max = -512,
y_min = -31000,
})
-- Quartz
Everness:register_ore({
ore_type = 'scatter',
ore = 'everness:quartz_ore',
wherein = { 'default:stone' },
clust_scarcity = 10 * 10 * 10,
clust_num_ores = 6,
clust_size = 5,
y_max = -5,
y_min = -31000,
})
--
-- Decorations
--
local all_biomes_mese_tree_place_on = {
'group:soil',
'everness:coral_desert_stone_with_moss',
'everness:coral_sand',
'everness:crystal_moss_block',
'everness:crystal_sand',
'everness:cursed_dirt',
'everness:cursed_sand',
'everness:cursed_stone',
'everness:dirt_with_coral_grass',
'everness:dirt_with_crystal_grass',
'everness:dirt_with_cursed_grass',
'everness:dirt_with_grass_1',
'everness:dry_dirt',
'everness:dry_dirt_with_dry_grass',
'everness:forsaken_desert_brick',
'everness:forsaken_desert_chiseled_stone',
'everness:forsaken_desert_engraved_stone',
'everness:forsaken_desert_sand',
'everness:forsaken_tundra_beach_sand',
'everness:forsaken_tundra_dirt',
'everness:forsaken_tundra_dirt_with_grass',
'everness:frosted_ice',
'everness:frosted_ice_translucent',
'everness:frosted_snowblock',
'everness:sulfur_stone',
'everness:volcanic_sulfur'
}
if minetest.get_modpath('default') then
table.insert_all(all_biomes_mese_tree_place_on, {
'default:desert_sand',
'default:dirt',
'default:dirt_with_coniferous_litter',
'default:dirt_with_grass',
'default:dirt_with_rainforest_litter',
'default:dirt_with_snow',
'default:dry_dirt',
'default:dry_dirt_with_dry_grass',
'default:gravel',
'default:permafrost_with_moss',
'default:permafrost_with_stones',
'default:sand',
'default:silver_sand',
'default:stone'
})
end
if minetest.get_modpath('asuna_core') then
for name,def in pairs(asuna.biomes) do
if def.nodes[1] ~= 'default:stone' then
table.insert(all_biomes_mese_tree_place_on,def.nodes[1])
end
end
end
minetest.register_decoration({
name = 'everness:all_biomes_mese_tree_2',
deco_type = 'schematic',
place_on = all_biomes_mese_tree_place_on,
sidelen = 8,
noise_params = {
offset = -0.00675,
scale = 0.0087125,
spread = { x = 5, y = 5, z = 5 },
seed = 137,
octaves = 2,
persist = 0.675,
lacunarity = 1.36,
},
y_max = 31000,
y_min = 80,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_mese_tree.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random'
})

View file

@ -0,0 +1,247 @@
--[[
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.
--]]
-- Localize data buffer table outside the loop, to be re-used for all
-- mapchunks, therefore minimising memory use.
local data = {}
local p2data = {}
minetest.register_on_generated(function(minp, maxp, blockseed)
-- Start time of mapchunk generation.
-- local t0 = os.clock()
local rand = PcgRandom(blockseed)
-- Array containing the biome IDs of nodes in the most recently generated chunk by the current mapgen
local biomemap = minetest.get_mapgen_object('biomemap')
-- Table mapping requested generation notification types to arrays of positions at which the corresponding generated structures are located within the current chunk
local gennotify = minetest.get_mapgen_object('gennotify')
-- Load the voxelmanip with the result of engine mapgen
local vm, emin, emax = minetest.get_mapgen_object('voxelmanip')
-- 'area' is used later to get the voxelmanip indexes for positions
local area = VoxelArea:new({ MinEdge = emin, MaxEdge = emax })
-- Get the content ID data from the voxelmanip in the form of a flat array.
-- Set the buffer parameter to use and reuse 'data' for this.
vm:get_data(data)
-- Raw `param2` data read into the `VoxelManip` object
vm:get_param2_data(p2data)
-- Side length of mapchunk
local shared_args = {}
--
-- on_data
--
-- read/write to `data` what will be eventually saved (set_data)
-- used for voxelmanip `data` manipulation
for _, def in ipairs(Everness.on_generated_queue) do
if def.can_run(biomemap) and def.on_data then
shared_args[def.name] = shared_args[def.name] or {}
def.on_data(minp, maxp, area, data, p2data, gennotify, rand, shared_args[def.name])
end
end
-- set data after they have been manipulated (from above)
vm:set_data(data)
vm:set_param2_data(p2data)
--
-- after_set_data
--
-- 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
for _, def in ipairs(Everness.on_generated_queue) do
if def.can_run(biomemap) and def.after_set_data then
shared_args[def.name] = shared_args[def.name] or {}
def.after_set_data(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args[def.name])
end
end
-- Set the lighting within the `VoxelManip` to a uniform value
vm:set_lighting({ day = 0, night = 0 }, minp, maxp)
-- Calculate lighting for what has been created.
vm:calc_lighting()
-- Liquid nodes were placed so set them flowing.
vm:update_liquids()
-- Write what has been created to the world.
vm:write_to_map()
--
-- after_write_to_map
--
-- 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`
for _, def in ipairs(Everness.on_generated_queue) do
if def.can_run(biomemap) and def.after_write_to_map then
shared_args[def.name] = shared_args[def.name] or {}
def.after_write_to_map(shared_args[def.name], gennotify, rand)
end
end
-- Print generation time of this mapchunk.
-- local chugent = math.ceil((os.clock() - t0) * 1000)
-- print('[Everness] Mapchunk generation time ' .. chugent .. ' ms')
end)
local mpath = minetest.get_modpath('everness')
--
-- Giant Sequoia Tree
--
local sequoia_tree_schem = minetest.get_modpath('everness') .. '/schematics/everness_giant_sequoia_tree.mts'
abdecor.register_advanced_decoration('everness_giant_sequoia_tree',{
target = {
place_on = {
'default:dirt_with_coniferous_litter',
'default:dirt_with_snow',
'default:dirt_with_dry_grass',
},
spawn_by = {
'default:dirt_with_coniferous_litter',
'default:dirt_with_snow',
'default:dirt_with_dry_grass',
},
num_spawn_by = 8,
sidelen = 80,
fill_ratio = 0.000095,
y_max = 31000,
y_min = 8,
biomes = {
'mesa',
'taiga',
'coniferous_forest',
},
},
fn = function(mapgen)
-- Get provided values
local pos = mapgen.pos
local va = mapgen.voxelarea
local vdata = mapgen.data
local ystride = va.ystride
local zstride = va.zstride
-- Check that there is likely enough space to place a tree
local vpos = va:index(pos.x,pos.y,pos.z)
for i = 2, 20 do -- y
if vdata[vpos + ystride * i] ~= minetest.CONTENT_AIR then
return -- not enough ceiling clearance
end
end
for i = -6, 6 do -- x
if vdata[vpos + i] == minetest.CONTENT_AIR then
return -- not enough space in the x dimension
end
end
for i = -6, 6 do -- z
if vdata[vpos + i * zstride] == minetest.CONTENT_AIR then
return -- not enough space in the z dimension
end
end
-- Roughly enough space, emerge mapchunks and place a sequoia tree
minetest.emerge_area(
vector.new(pos.x - 12, pos.y, pos.z - 12),
vector.new(pos.x + 12, pos.y + 75, pos.z + 12),
function(blockpos, action, calls_remaining, param)
Everness:emerge_area(blockpos, action, calls_remaining, param)
end,
{
callback = function()
-- Place sequoia tree
minetest.place_schematic(
pos,
sequoia_tree_schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
-- Fix lighting
minetest.fix_light(
{ x = pos.x - 12, y = pos.y, z = pos.z - 12},
{ x = pos.x + 12, y = pos.y + 75, z = pos.z + 12},
true
)
end
}
)
end,
})
--
-- Underground Mese Tree
--
local mese_tree_schem = minetest.get_modpath('everness') .. '/schematics/everness_mese_tree.mts'
abdecor.register_advanced_decoration('everness_mese_tree_underground',{
target = {
place_on = 'everness:moss_block',
sidelen = 80,
fill_ratio = 0.0000125,
y_max = -300,
y_min = -31000,
biomes = asuna.features.cave.bamboo,
flags = 'all_floors',
},
fn = function(mapgen)
-- Get provided values
local pos = mapgen.pos
local va = mapgen.voxelarea
local vdata = mapgen.data
local ystride = va.ystride
local zstride = va.zstride
-- Check that there is likely enough space to place a tree
local vpos = va:index(pos.x,pos.y,pos.z)
for i = 2, 10 do -- y
if vdata[vpos + ystride * i] ~= minetest.CONTENT_AIR then
return -- not enough ceiling clearance
end
end
vpos = vpos + ystride * 5
for i = -3, 3 do -- x
if vdata[vpos + i] ~= minetest.CONTENT_AIR then
return -- not enough space in the x dimension
end
end
for i = -3, 3 do -- z
if vdata[vpos + i * zstride] ~= minetest.CONTENT_AIR then
return -- not enough space in the z dimension
end
end
-- Roughly enough space, place a mese tree
mapgen.place_schematic({
pos = pos,
schematic = mese_tree_schem,
flags = 'place_center_x,place_center_z',
})
-- Fix lighting
mapgen.calc_lighting(
{ x = pos.x - 3, y = pos.y, z = pos.z - 3 },
{ x = pos.x + 3, y = pos.y + 10, z = pos.z + 3 },
true
)
end,
flags = {
schematic = true,
}
})

View file

@ -0,0 +1,448 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_bamboo_forest.y_max
local y_min = Everness.settings.biomes.everness_bamboo_forest.y_min
-- Bamboo Forest
Everness:register_biome({
name = 'everness:bamboo_forest',
node_top = 'everness:dirt_with_grass_1',
depth_top = 1,
node_filler = 'everness:dirt_1',
depth_filler = 1,
node_riverbed = 'default:sand',
depth_riverbed = 2,
node_dungeon = 'everness:bamboo_wood',
node_dungeon_alt = 'everness:bamboo_mosaic_wood',
node_dungeon_stair = 'stairs:stair_bamboo_wood',
y_max = y_max,
y_min = y_min,
heat_point = 80,
humidity_point = 60,
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:bamboo_forest_small_bamboo',
deco_type = 'schematic',
place_on = { 'everness:dirt_with_grass_1' },
sidelen = 80,
fill_ratio = 0.1,
biomes = { 'everness:bamboo_forest' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_small_bamboo.mts',
flags = 'place_center_x, place_center_z, force_placement',
rotation = 'random',
})
Everness:register_decoration({
name = 'everness:bamboo_forest_large_bamboo',
deco_type = 'schematic',
place_on = { 'everness:dirt_with_grass_1' },
sidelen = 80,
fill_ratio = 0.1,
biomes = { 'everness:bamboo_forest' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_large_bamboo.mts',
flags = 'place_center_x, place_center_z, force_placement',
rotation = 'random',
})
-- Jungle tree and log
local jungle_tree_schem
local jungle_log_schem
if minetest.get_modpath('default') then
jungle_tree_schem = minetest.get_modpath('default') .. '/schematics/jungle_tree.mts'
jungle_log_schem = minetest.get_modpath('default') .. '/schematics/jungle_log.mts'
elseif minetest.get_modpath('mcl_core') then
jungle_tree_schem = minetest.get_modpath('mcl_core') .. '/schematics/mcl_core_jungle_tree.mts'
jungle_log_schem = {
size = { x = 3, y = 3, z = 1 },
data = {
{ name = 'air', prob = 0 },
{ name = 'air', prob = 0 },
{ name = 'air', prob = 0 },
{ name = 'mcl_core:jungletree', param2 = 12 },
{ name = 'mcl_core:jungletree', param2 = 12 },
{ name = 'mcl_core:jungletree', param2 = 12, prob = 127 },
{ name = 'air', prob = 0 },
{ name = 'mcl_mushrooms:mushroom_brown', prob = 50 },
{ name = 'air', prob = 0 },
},
}
end
if jungle_tree_schem then
Everness:register_decoration({
name = 'everness:bamboo_forest_jungle_tree',
deco_type = 'schematic',
place_on = { 'everness:dirt_with_grass_1' },
sidelen = 16,
fill_ratio = 0.0125,
biomes = { 'everness:bamboo_forest' },
y_max = y_max,
y_min = y_min,
schematic = jungle_tree_schem,
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
end
if jungle_log_schem then
Everness:register_decoration({
name = 'everness:bamboo_forest_jungle_log',
deco_type = 'schematic',
place_on = { 'everness:dirt_with_grass_1' },
place_offset_y = 1,
sidelen = 16,
noise_params = {
offset = 0.0015,
scale = 0.0021,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:bamboo_forest' },
y_max = y_max,
y_min = y_min,
schematic = jungle_log_schem,
flags = 'place_center_x',
rotation = 'random',
spawn_by = 'everness:dirt_with_grass_1',
num_spawn_by = 8,
})
end
-- Bush
if minetest.get_modpath('default') then
Everness:register_decoration({
name = 'everness:bamboo_forest_grass',
deco_type = 'simple',
place_on = { 'everness:dirt_with_grass_1' },
sidelen = 80,
fill_ratio = 0.4,
biomes = { 'everness:bamboo_forest' },
y_max = y_max,
y_min = y_min,
decoration = {
'default:grass_4',
'default:grass_5',
},
})
Everness:register_decoration({
name = 'everness:bamboo_forest_bush',
deco_type = 'schematic',
place_on = { 'everness:dirt_with_grass_1' },
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = { 'everness:bamboo_forest' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('default') .. '/schematics/bush.mts',
flags = 'place_center_x, place_center_z',
})
-- Blueberry bush
Everness:register_decoration({
name = 'everness:bamboo_forest_blueberry_bush',
deco_type = 'schematic',
place_on = { 'everness:dirt_with_grass_1' },
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 697,
octaves = 3,
persist = 0.7,
},
biomes = { 'everness:bamboo_forest' },
y_max = y_max,
y_min = y_min,
place_offset_y = 1,
schematic = minetest.get_modpath('default') .. '/schematics/blueberry_bush.mts',
flags = 'place_center_x, place_center_z',
})
end
-- Flowers
local function register_flower_decoration(offset, scale, length)
Everness:register_decoration({
name = 'everness:bamboo_forest_flowers_' .. length,
deco_type = 'simple',
place_on = { 'everness:dirt_with_grass_1' },
sidelen = 16,
noise_params = {
offset = offset,
scale = scale,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:bamboo_forest' },
y_max = y_max,
y_min = y_min,
decoration = 'everness:flowers_' .. length,
})
end
register_flower_decoration(-0.03, 0.09, 4)
register_flower_decoration(-0.015, 0.075, 3)
register_flower_decoration(0, 0.06, 2)
register_flower_decoration(0.015, 0.045, 1)
local function register_flower_magenta_decoration(offset, scale, length)
Everness:register_decoration({
name = 'everness:bamboo_forest_flowers_magenta' .. length,
deco_type = 'simple',
place_on = { 'everness:dirt_with_grass_1' },
sidelen = 16,
noise_params = {
offset = offset,
scale = scale,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:bamboo_forest' },
y_max = y_max,
y_min = y_min,
decoration = 'everness:flowers_magenta_' .. length,
})
end
register_flower_magenta_decoration(-0.03, 0.09, 4)
register_flower_magenta_decoration(-0.015, 0.075, 3)
register_flower_magenta_decoration(0, 0.06, 2)
register_flower_magenta_decoration(0.015, 0.045, 1)
--
-- On Generated
--
local disp = 16
local chance = 20
local schem = minetest.get_modpath('everness') .. '/schematics/everness_japanese_shrine.mts'
local c_everness_bamboo_1 = minetest.get_content_id('everness:bamboo_1')
local c_everness_bamboo_3 = minetest.get_content_id('everness:bamboo_3')
local c_everness_bamboo_4 = minetest.get_content_id('everness:bamboo_4')
local c_everness_bamboo_5 = minetest.get_content_id('everness:bamboo_5')
local c_dirt_with_grass_1 = minetest.get_content_id('everness:dirt_with_grass_1')
local c_dirt_with_grass_extras_1 = minetest.get_content_id('everness:dirt_with_grass_extras_1')
local c_dirt_with_grass_extras_2 = minetest.get_content_id('everness:dirt_with_grass_extras_2')
local biome_id_bamboo_forest = minetest.get_biome_id('everness:bamboo_forest')
local d_everness_bamboo_forest_large_bamboo = minetest.get_decoration_id('everness:bamboo_forest_large_bamboo')
minetest.set_gen_notify({ decoration = true }, { d_everness_bamboo_forest_large_bamboo })
Everness:add_to_queue_on_generated({
name = 'everness:bamboo_forest',
can_run = function(biomemap)
return table.indexof(biomemap, biome_id_bamboo_forest) ~= -1
end,
on_data = function(minp, maxp, area, data, p2data, gennotify, rand, shared_args)
--
-- Bamboo
--
for _, pos in ipairs(gennotify['decoration#' .. (d_everness_bamboo_forest_large_bamboo or '')] or {}) do
-- For bamboo large this is position of the 'place_on' node, e.g. 'everness:dirt_with_grass_extras_2'
local vi = area:indexp(pos)
local while_counter = 1
local bamboo_height = 0
local last_vi = vi + area.ystride * while_counter
-- Get bamboo height
while data[last_vi] == c_everness_bamboo_3 do
last_vi = vi + area.ystride * while_counter
bamboo_height = bamboo_height + 1
while_counter = while_counter + 1
end
-- Back up the last from `while_counter`
last_vi = last_vi - area.ystride
-- Add top bamboo nodes with leaves based on their generated height
if bamboo_height > 4 then
for i = 1, 3 do
if data[last_vi + area.ystride * i] == minetest.CONTENT_AIR then
if i == 1 then
data[last_vi + area.ystride * i] = c_everness_bamboo_4
else
data[last_vi + area.ystride * i] = c_everness_bamboo_5
end
p2data[last_vi + area.ystride * i] = p2data[vi + area.ystride]
end
end
else
for i = 1, 2 do
if data[last_vi + area.ystride * i] == minetest.CONTENT_AIR then
if i == 1 then
data[last_vi + area.ystride * i] = c_everness_bamboo_4
else
data[last_vi + area.ystride * i] = c_everness_bamboo_5
end
p2data[last_vi + area.ystride * i] = p2data[vi + area.ystride]
end
end
end
end
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
local sidelength = maxp.x - minp.x + 1
local x_disp = rand:next(0, disp)
local z_disp = rand:next(0, disp)
shared_args.schem_positions = {}
for y = minp.y, maxp.y do
local vi = area:index(minp.x + sidelength / 2 + x_disp, y, minp.z + sidelength / 2 + z_disp)
if
(
data[vi + area.ystride] == minetest.CONTENT_AIR
or data[vi + area.ystride] == c_everness_bamboo_1
or data[vi + area.ystride] == c_everness_bamboo_3
)
and (
data[vi] == c_dirt_with_grass_1
or data[vi] == c_dirt_with_grass_extras_1
or data[vi] == c_dirt_with_grass_extras_2
)
and rand:next(0, 100) < chance
then
local s_pos = area:position(vi)
--
-- Japanese Shrine
--
local size = { x = 11, y = 19, z = 15 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
local schem_pos = vector.new(s_pos)
-- find floor big enough
local positions = minetest.find_nodes_in_area_under_air(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
'everness:dirt_with_grass_1'
}
)
-- Can force over these blocks
local force_positions = minetest.find_nodes_in_area(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
'everness:dirt_with_grass_extras_1',
'everness:dirt_with_grass_extras_2',
'group:bamboo',
'group:flower',
'group:leaves'
}
)
if #positions + #force_positions < size.x * size.z then
-- not enough space
return
end
-- enough air to place structure ?
local air_positions = minetest.find_nodes_in_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
'air',
'group:bamboo',
'group:flower',
'group:leaves'
}
)
if #air_positions > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
shared_args.schem_positions.everness_japanese_shrine = shared_args.schem_positions.everness_japanese_shrine or {}
table.insert(shared_args.schem_positions.everness_japanese_shrine, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Japanese Shrine was placed at ' .. schem_pos:to_string())
end
end
end
end,
after_write_to_map = function(shared_args)
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions > 0 then
Everness:populate_loot_chests(chest_positions)
end
end
end
end
end
})

View file

@ -0,0 +1,173 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_bamboo_forest_under.y_max
local y_min = Everness.settings.biomes.everness_bamboo_forest_under.y_min
-- Bamboo Forest Under
Everness:register_biome({
name = 'everness:bamboo_forest_under',
node_cave_liquid = { 'mapgen_water_source', 'mapgen_lava_source' },
node_dungeon = 'everness:bamboo_wood',
node_dungeon_alt = 'everness:bamboo_mosaic_wood',
node_dungeon_stair = 'stairs:stair_bamboo_wood',
y_max = y_max,
y_min = y_min,
heat_point = 80,
humidity_point = 60,
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:bamboo_forest_under_floors',
deco_type = 'simple',
place_on = { 'default:stone' },
sidelen = 16,
fill_ratio = 10,
biomes = asuna.features.cave.bamboo,
y_max = y_max,
y_min = y_min,
place_offset_y = -1,
flags = 'all_floors,force_placement',
decoration = {
'everness:moss_block',
'default:clay'
},
})
Everness:register_decoration({
name = 'everness:bamboo_forest_under_ceiling',
deco_type = 'simple',
place_on = { 'default:stone' },
sidelen = 16,
fill_ratio = 0.4,
biomes = asuna.features.cave.bamboo,
y_max = y_max,
y_min = y_min,
flags = 'all_ceilings',
decoration = { 'everness:moss_block' },
})
Everness:register_decoration({
name = 'everness:bamboo_forest_under_forsythia_bush',
deco_type = 'simple',
place_on = { 'everness:moss_block' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.002,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = asuna.features.cave.bamboo,
y_max = y_max - 500 > y_min and y_max - 500 or y_max,
y_min = y_min,
flags = 'all_floors',
decoration = { 'everness:forsythia_bush' },
})
Everness:register_decoration({
name = 'everness:bamboo_forest_under_vines',
deco_type = 'simple',
place_on = { 'everness:moss_block' },
sidelen = 16,
fill_ratio = 0.09,
decoration = {
'everness:vine_cave',
'everness:vine_cave_with_mese_leaves'
},
biomes = asuna.features.cave.bamboo,
y_max = y_max,
y_min = y_min,
flags = 'all_ceilings',
spawn_by = 'air',
num_spawn_by = 8
})
Everness:register_decoration({
name = 'everness:bamboo_forest_under_plants',
deco_type = 'simple',
place_on = { 'everness:moss_block' },
param2 = 8,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.02,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.cave.bamboo,
y_max = y_max,
y_min = y_min,
decoration = { 'everness:cave_flower' },
flags = 'all_floors'
})
Everness:register_decoration({
name = 'everness:bamboo_forest_under_plants_2',
deco_type = 'simple',
place_on = { 'everness:moss_block' },
param2 = 8,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.02,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.cave.bamboo,
y_max = y_max - 1000 > y_min and y_max - 1000 or y_max,
y_min = y_min,
decoration = { 'everness:cave_flower_with_particles' },
flags = 'all_floors'
})
Everness:register_decoration({
name = 'everness:bamboo_forest_under_blue_vine_lantern',
deco_type = 'simple',
place_on = {
'everness:moss_block',
'default:clay'
},
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.002,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = asuna.features.cave.bamboo,
y_max = y_max - 1500 > y_min and y_max - 1500 or y_max,
y_min = y_min,
decoration = { 'everness:blue_vine_lantern' },
flags = 'all_floors',
})

View file

@ -0,0 +1,289 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_baobab_savanna.y_max
local y_min = Everness.settings.biomes.everness_baobab_savanna.y_min
-- Baobab Savanna
Everness:register_biome({
name = 'everness:baobab_savanna',
node_top = 'everness:dry_dirt_with_dry_grass',
depth_top = 1,
node_filler = 'everness:dry_dirt',
depth_filler = 1,
node_riverbed = 'default:sand',
depth_riverbed = 2,
node_dungeon = 'default:cobble',
node_dungeon_alt = 'default:mossycobble',
node_dungeon_stair = 'stairs:stair_cobble',
y_max = y_max,
y_min = y_min,
heat_point = 80,
humidity_point = 30,
})
--
-- Register decorations
--
-- Savanna bare dirt patches.
-- Must come before all savanna decorations that are placed on dry grass.
-- Noise is similar to long dry grass noise, but scale inverted, to appear
-- where long dry grass is least dense and shortest.
Everness:register_decoration({
name = 'everness:baobab_savanna_dry_dirt_with_dry_grass',
deco_type = 'simple',
place_on = { 'everness:dry_dirt_with_dry_grass' },
sidelen = 4,
noise_params = {
offset = -1.5,
scale = -1.5,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 4,
persist = 1.0
},
biomes = { 'everness:baobab_savanna' },
y_max = y_max,
y_min = y_min,
decoration = 'everness:dry_dirt',
place_offset_y = -1,
flags = 'force_placement',
})
Everness:register_decoration({
name = 'everness:baobab_savanna_baobab_tree_1',
deco_type = 'schematic',
place_on = { 'everness:dry_dirt_with_dry_grass', 'everness:dry_dirt' },
spawn_by = { 'everness:dry_dirt_with_dry_grass', 'everness:dry_dirt' },
num_spawn_by = 8,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.002,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:baobab_savanna' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_baobab_tree.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
Everness:register_decoration({
name = 'everness:baobab_savanna_baobab_tree_2',
deco_type = 'schematic',
place_on = { 'everness:dry_dirt_with_dry_grass', 'everness:dry_dirt' },
spawn_by = { 'everness:dry_dirt_with_dry_grass', 'everness:dry_dirt' },
num_spawn_by = 8,
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 90155,
octaves = 3,
persist = 0.7,
},
biomes = { 'everness:baobab_savanna' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_baobab_tree.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
Everness:register_decoration({
name = 'everness:baobab_savanna_baobab_log',
deco_type = 'schematic',
place_on = { 'everness:dry_dirt_with_dry_grass' },
sidelen = 16,
place_offset_y = 1,
noise_params = {
offset = 0,
scale = 0.001,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:baobab_savanna' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_baobab_log.mts',
flags = 'place_center_x',
rotation = 'random',
spawn_by = 'everness:dry_dirt_with_dry_grass',
num_spawn_by = 8,
})
-- Dry grasses
local function register_dry_grass_decoration(offset, scale, length)
Everness:register_decoration({
name = 'everness:dry_grass_' .. length,
deco_type = 'simple',
place_on = { 'everness:dry_dirt_with_dry_grass' },
sidelen = 16,
noise_params = {
offset = offset,
scale = scale,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:baobab_savanna' },
y_max = y_max,
y_min = y_min,
decoration = 'everness:dry_grass_' .. length,
})
end
register_dry_grass_decoration(0.01, 0.05, 4)
register_dry_grass_decoration(0.03, 0.03, 3)
register_dry_grass_decoration(0.05, 0.01, 2)
register_dry_grass_decoration(0.07, -0.01, 1)
--
-- On Generated
--
local disp = 16
local chance = 100
local schem = minetest.get_modpath('everness') .. '/schematics/everness_giant_sequoia_tree.mts'
local size = { x = 25, y = 75, z = 25 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
local baobab_tree_size = { x = 24, y = 39, z = 24 }
local baobab_tree_size_x = math.round(size.x / 2)
local baobab_tree_size_z = math.round(size.z / 2)
local c_everness_dry_dirt_with_dry_grass = minetest.get_content_id('everness:dry_dirt_with_dry_grass')
local c_everness_dry_dirt = minetest.get_content_id('everness:dry_dirt')
local c_everness_dry_grass_1 = minetest.get_content_id('everness:dry_grass_1')
local c_everness_dry_grass_2 = minetest.get_content_id('everness:dry_grass_2')
local c_everness_dry_grass_3 = minetest.get_content_id('everness:dry_grass_3')
local c_everness_dry_grass_4 = minetest.get_content_id('everness:dry_grass_4')
local biome_id_baobab_savanna = minetest.get_biome_id('everness:baobab_savanna')
local deco_ids_baobab = {
minetest.get_decoration_id('everness:baobab_savanna_baobab_tree_1'),
minetest.get_decoration_id('everness:baobab_savanna_baobab_tree_2')
}
if #deco_ids_baobab > 1 then
minetest.set_gen_notify({ decoration = true }, deco_ids_baobab)
end
Everness:add_to_queue_on_generated({
name = 'everness:baobab_savanna',
can_run = function(biomemap)
return table.indexof(biomemap, biome_id_baobab_savanna) ~= -1
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
local sidelength = maxp.x - minp.x + 1
local x_disp = rand:next(0, disp)
local z_disp = rand:next(0, disp)
shared_args.schem_positions = {}
for y = minp.y, maxp.y do
local vi = area:index(minp.x + sidelength / 2 + x_disp, y, minp.z + sidelength / 2 + z_disp)
if (
data[vi + area.ystride] == minetest.CONTENT_AIR
or data[vi + area.ystride] == c_everness_dry_grass_1
or data[vi + area.ystride] == c_everness_dry_grass_2
or data[vi + area.ystride] == c_everness_dry_grass_3
or data[vi + area.ystride] == c_everness_dry_grass_4
)
and (
data[vi] == c_everness_dry_dirt_with_dry_grass
or data[vi] == c_everness_dry_dirt
)
and rand:next(0, 100) < chance
then
local s_pos = area:position(vi)
--
-- Giant Sequoia
--
minetest.emerge_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
function(blockpos, action, calls_remaining, param)
Everness:emerge_area(blockpos, action, calls_remaining, param)
end,
{
callback = function()
local positions = minetest.find_nodes_in_area_under_air(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
'everness:dry_dirt_with_dry_grass',
'everness:dry_dirt',
'group:flora',
'group:flower'
})
if #positions < size.x * size.z then
-- not enough space
return
end
minetest.place_schematic(
s_pos,
schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
minetest.log('action', '[Everness] Giant Sequoia was placed at ' .. s_pos:to_string())
end
}
)
end
end
end,
after_write_to_map = function(shared_args, gennotify)
--
-- Baobab Tree - fix light
--
for _, deco_id in ipairs(deco_ids_baobab) do
for _, pos in ipairs(gennotify['decoration#' .. (deco_id or '')] or {}) do
minetest.fix_light(
vector.new(pos.x - baobab_tree_size_x, pos.y - 1, pos.z - baobab_tree_size_z),
vector.new(pos.x + baobab_tree_size_x, pos.y + baobab_tree_size.y, pos.z + baobab_tree_size_z)
)
end
end
end
})

View file

@ -0,0 +1,299 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_coral_forest.y_max
local y_min = Everness.settings.biomes.everness_coral_forest.y_min
-- Coral Forest
Everness:register_biome({
name = 'everness:coral_forest',
node_top = 'everness:dirt_with_coral_grass',
depth_top = 1,
node_filler = 'everness:coral_dirt',
depth_filler = 1,
node_riverbed = 'everness:coral_dirt',
depth_riverbed = 2,
node_stone = 'everness:coral_desert_stone',
node_dungeon = 'everness:coral_desert_stone_block',
node_dungeon_alt = 'everness:coral_desert_stone_brick',
node_dungeon_stair = 'stairs:stair_coral_desert_stone_block',
y_max = y_max,
y_min = y_min,
heat_point = 60,
humidity_point = 50,
})
--
-- Register ores
--
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
-- Coral sand
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:coral_sand',
wherein = { 'everness:coral_desert_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 2316,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:coral_forest' }
})
-- Dirt
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:coral_dirt',
wherein = { 'everness:coral_desert_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 17676,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:coral_forest' }
})
-- Scatter ores
-- Coal
Everness:register_ore({
ore_type = 'scatter',
ore = 'everness:coral_desert_stone_with_coal',
wherein = 'everness:coral_desert_stone',
clust_scarcity = 8 * 8 * 8,
clust_num_ores = 9,
clust_size = 3,
y_max = y_max,
y_min = y_min,
biomes = { 'everness:coral_forest' }
})
--
-- Register decorations
--
-- Coral Forest
local chunksize = tonumber(minetest.get_mapgen_setting('chunksize'))
if chunksize >= 5 then
Everness:register_decoration({
name = 'everness:coral_forest_coral_tree',
deco_type = 'schematic',
place_on = { 'everness:dirt_with_coral_grass' },
place_offset_y = 0,
sidelen = 16,
noise_params = {
offset = 0.0015,
scale = 0.0021,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:coral_forest' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_coral_tree.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
spawn_by = 'everness:dirt_with_coral_grass',
num_spawn_by = 8,
})
end
Everness:register_decoration({
name = 'everness:coral_forest_coral_bones_tree',
deco_type = 'schematic',
place_on = { 'everness:dirt_with_coral_grass' },
sidelen = 16,
place_offset_y = -1,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = { 'everness:coral_forest' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_coral_bones_tree.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
Everness:register_decoration({
name = 'everness:coral_forest_coral_burdock',
deco_type = 'simple',
place_on = { 'everness:dirt_with_coral_grass' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.006,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:coral_forest' },
y_max = y_max,
y_min = y_min,
decoration = { 'everness:coral_burdock_1', 'everness:coral_burdock_2' },
spawn_by = 'everness:coral_tree',
param2 = 8
})
Everness:register_decoration({
name = 'everness:coral_forest_coral_bush',
deco_type = 'simple',
place_on = { 'everness:dirt_with_coral_grass', 'everness:coral_sand', 'everness:coral_white_sand' },
sidelen = 16,
noise_params = {
offset = -0.02,
scale = 0.04,
spread = { x = 200, y = 200, z = 200 },
seed = 436,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:coral_forest' },
y_max = y_max,
y_min = y_min,
decoration = 'everness:coral_bush'
})
Everness:register_decoration({
name = 'everness:coral_forest_coral_shrub',
deco_type = 'simple',
place_on = { 'everness:dirt_with_coral_grass', 'everness:coral_sand', 'everness:coral_white_sand' },
sidelen = 16,
noise_params = {
offset = -0.02,
scale = 0.04,
spread = { x = 200, y = 200, z = 200 },
seed = 1220999,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:coral_forest' },
y_max = y_max,
y_min = y_min,
decoration = 'everness:coral_shrub'
})
local function register_coral_grass_decoration(offset, scale, length)
Everness:register_decoration({
name = 'everness:coral_forest_coral_grass_' .. length,
deco_type = 'simple',
place_on = { 'everness:dirt_with_coral_grass' },
sidelen = 16,
noise_params = {
offset = offset,
scale = scale,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:coral_forest' },
y_max = y_max,
y_min = y_min,
decoration = 'everness:coral_grass_' .. length,
})
end
-- Grasses
register_coral_grass_decoration(-0.03, 0.09, 5)
--register_coral_grass_decoration(-0.015, 0.075, 4)
--register_coral_grass_decoration(0, 0.06, 3)
--register_coral_grass_decoration(0.015, 0.045, 2)
--register_coral_grass_decoration(0.03, 0.03, 1)
minetest.register_decoration({
deco_type = 'simple',
place_on = { 'everness:dirt_with_coral_grass' },
sidelen = 16,
fill_ratio = 0.6,
biomes = { 'everness_coral_forest' },
y_max = y_max,
y_min = y_min,
decoration = {
'everness:coral_grass_1',
'everness:coral_grass_2',
'everness:coral_grass_3',
'everness:coral_grass_4',
},
})
--
-- On Generated
--
local deco_id_coral_bones_tree = minetest.get_decoration_id('everness:coral_forest_coral_bones_tree')
local biome_id_coral_forest = minetest.get_biome_id('everness:coral_forest')
local coral_bones_tree_size = { x = 16, y = 35, z = 16 }
minetest.set_gen_notify({ decoration = true }, { deco_id_coral_bones_tree })
Everness:add_to_queue_on_generated({
name = 'everness:coral_forest',
can_run = function(biomemap)
return table.indexof(biomemap, biome_id_coral_forest) ~= -1
end,
after_write_to_map = function(shared_args, gennotify)
--
-- Coral bone tree - fix light
--
for _, pos in ipairs(gennotify['decoration#' .. (deco_id_coral_bones_tree or '')] or {}) do
minetest.fix_light(
vector.round(vector.new(pos.x - (coral_bones_tree_size.x / 2), pos.y, pos.z - (coral_bones_tree_size.z / 2))),
vector.round(vector.new(pos.x + (coral_bones_tree_size.x / 2), pos.y + coral_bones_tree_size.y, pos.z + (coral_bones_tree_size.z / 2)))
)
end
end
})

View file

@ -0,0 +1,457 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_coral_forest_deep_ocean.y_max
local y_min = Everness.settings.biomes.everness_coral_forest_deep_ocean.y_min
-- Coral Forest Ocean
Everness:register_biome({
name = 'everness:coral_forest_deep_ocean',
node_top = 'everness:coral_forest_deep_ocean_sand',
depth_top = 1,
node_filler = 'everness:coral_forest_deep_ocean_sand',
depth_filler = 3,
node_riverbed = 'everness:coral_forest_deep_ocean_sand',
depth_riverbed = 2,
node_cave_liquid = 'mapgen_water_source',
node_dungeon = 'everness:coral_deep_ocean_sandstone_block',
node_dungeon_alt = 'everness:coral_deep_ocean_sandstone_brick',
node_dungeon_stair = 'stairs:stair_coral_deep_ocean_sandstone_block',
y_max = y_max,
y_min = y_min,
heat_point = 60,
humidity_point = 50,
})
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
-- Coral Desert Stone
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:coral_desert_stone',
wherein = { 'default:stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = -316,
octaves = 1,
persist = 0.0
},
biomes = asuna.features.ocean.coral_forest,
})
--
-- Register decorations
--
-- Coral reef
Everness:register_decoration({
name = 'everness:coral_forest_deep_ocean_coral_reef_pink',
deco_type = 'schematic',
place_on = { 'everness:coral_forest_deep_ocean_sand' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = asuna.features.ocean.coral_forest,
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_coral_forest_deep_ocean_coral_reef_pink.mts',
flags = 'place_center_x, place_center_z, force_placement',
})
Everness:register_decoration({
name = 'everness:coral_forest_deep_ocean_coral_reef_cyan',
deco_type = 'schematic',
place_on = { 'everness:coral_forest_deep_ocean_sand' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = asuna.features.ocean.coral_forest,
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_coral_forest_deep_ocean_coral_reef_cyan.mts',
flags = 'place_center_x, place_center_z, force_placement',
})
Everness:register_decoration({
name = 'everness:coral_forest_deep_ocean_coral_reef_green',
deco_type = 'schematic',
place_on = { 'everness:coral_forest_deep_ocean_sand' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = asuna.features.ocean.coral_forest,
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_coral_forest_deep_ocean_coral_reef_green.mts',
flags = 'place_center_x, place_center_z, force_placement',
})
Everness:register_decoration({
name = 'everness:coral_forest_deep_ocean_coral_reef_red',
deco_type = 'schematic',
place_on = { 'everness:coral_forest_deep_ocean_sand' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = asuna.features.ocean.coral_forest,
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_coral_forest_deep_ocean_coral_reef_red.mts',
flags = 'place_center_x, place_center_z, force_placement',
})
Everness:register_decoration({
name = 'everness:everness_coral_forest_deep_ocean_pink',
deco_type = 'schematic',
place_on = { 'everness:coral_forest_deep_ocean_sand' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
sidelen = 16,
fill_ratio = 0.002,
biomes = asuna.features.ocean.coral_forest,
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_coral_forest_deep_ocean_coral_pink.mts',
flags = 'place_center_x, place_center_z, force_placement',
})
Everness:register_decoration({
name = 'everness:everness_coral_forest_deep_ocean_cyan',
deco_type = 'schematic',
place_on = { 'everness:coral_forest_deep_ocean_sand' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
sidelen = 16,
fill_ratio = 0.002,
biomes = asuna.features.ocean.coral_forest,
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_coral_forest_deep_ocean_coral_cyan.mts',
flags = 'place_center_x, place_center_z, force_placement',
})
Everness:register_decoration({
name = 'everness:everness_coral_forest_deep_ocean_green',
deco_type = 'schematic',
place_on = { 'everness:coral_forest_deep_ocean_sand' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
sidelen = 16,
fill_ratio = 0.002,
biomes = asuna.features.ocean.coral_forest,
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_coral_forest_deep_ocean_coral_green.mts',
flags = 'place_center_x, place_center_z, force_placement',
})
Everness:register_decoration({
name = 'everness:everness_coral_forest_deep_ocean_red',
deco_type = 'schematic',
place_on = { 'everness:coral_forest_deep_ocean_sand' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
sidelen = 16,
fill_ratio = 0.002,
biomes = asuna.features.ocean.coral_forest,
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_coral_forest_deep_ocean_coral_red.mts',
flags = 'place_center_x, place_center_z, force_placement',
})
Everness:register_decoration({
name = 'everness:coral_forest_deep_ocean_mud',
deco_type = 'simple',
place_on = { 'everness:coral_forest_deep_ocean_sand' },
place_offset_y = -1,
sidelen = 4,
fill_ratio = 0.002,
biomes = asuna.features.ocean.coral_forest,
y_max = y_max,
y_min = y_min,
flags = 'force_placement',
decoration = { 'everness:coral_deep_ocean_mud' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
})
Everness:register_decoration({
name = 'everness:coral_forest_deep_ocean_plants_1',
deco_type = 'simple',
place_on = { 'everness:coral_forest_deep_ocean_sand' },
place_offset_y = -1,
sidelen = 4,
noise_params = {
offset = 0,
scale = 0.02,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.ocean.coral_forest,
y_max = y_max,
y_min = y_min,
flags = 'force_placement',
decoration = { 'everness:coral_forest_deep_ocean_coral_plant_1' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
})
Everness:register_decoration({
name = 'everness:coral_forest_deep_ocean_plants_2',
deco_type = 'simple',
place_on = { 'everness:coral_forest_deep_ocean_sand' },
place_offset_y = -1,
sidelen = 4,
noise_params = {
offset = -0.02,
scale = 0.04,
spread = { x = 200, y = 200, z = 200 },
seed = 436,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.ocean.coral_forest,
y_max = y_max,
y_min = y_min,
flags = 'force_placement',
decoration = { 'everness:coral_forest_deep_ocean_coral_plant_2' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
})
Everness:register_decoration({
name = 'everness:coral_forest_deep_ocean_plants_3',
deco_type = 'simple',
place_on = { 'everness:coral_forest_deep_ocean_sand' },
place_offset_y = -1,
sidelen = 4,
noise_params = {
offset = -0.02,
scale = 0.04,
spread = { x = 200, y = 200, z = 200 },
seed = 19822,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.ocean.coral_forest,
y_max = y_max,
y_min = y_min,
flags = 'force_placement',
decoration = { 'everness:coral_forest_deep_ocean_coral_plant_3' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
})
--
-- On Generated
--
local c_water_source = minetest.get_content_id('mapgen_water_source')
local c_everness_coral_forest_deep_ocean_sand = minetest.get_content_id('everness:coral_forest_deep_ocean_sand')
local c_everness_coral_forest_deep_ocean_coral_plant_1 = minetest.get_content_id('everness:coral_forest_deep_ocean_coral_plant_1')
local c_everness_coral_forest_deep_ocean_coral_plant_2 = minetest.get_content_id('everness:coral_forest_deep_ocean_coral_plant_2')
local c_everness_coral_forest_deep_ocean_coral_plant_3 = minetest.get_content_id('everness:coral_forest_deep_ocean_coral_plant_3')
local c_everness_coral_forest_deep_ocean_coral_1 = minetest.get_content_id('everness:coral_forest_deep_ocean_coral_1')
local c_everness_coral_forest_deep_ocean_coral_2 = minetest.get_content_id('everness:coral_forest_deep_ocean_coral_2')
local c_everness_coral_forest_deep_ocean_coral_3 = minetest.get_content_id('everness:coral_forest_deep_ocean_coral_3')
local c_everness_coral_forest_deep_ocean_coral_4 = minetest.get_content_id('everness:coral_forest_deep_ocean_coral_4')
-- Biome IDs
local biome_id_everness_coral_forest_deep_ocean = {}
for _,biome in ipairs(asuna.features.ocean.coral_forest) do
table.insert(biome_id_everness_coral_forest_deep_ocean,minetest.get_biome_id(biome))
end
local chance = 30
local schem = minetest.get_modpath('everness') .. '/schematics/everness_coral_forest_deep_ocean_house.mts'
local size = { x = 11, y = 17, z = 12 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
Everness:add_to_queue_on_generated({
name = 'everness:coral_forest_deep_ocean',
can_run = function(biomemap)
for _,biome in ipairs(biome_id_everness_coral_forest_deep_ocean) do
if table.indexof(biomemap, biome) ~= -1 then
return true
end
end
return false
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
shared_args.schem_positions = {}
local schem_placed = false
if rand:next(0, 100) < chance then
for y = maxp.y, minp.y, -1 do
if schem_placed then
break
end
for z = minp.z, maxp.z do
if schem_placed then
break
end
for x = minp.x, maxp.x do
local vi = area:index(x, y, z)
if
data[vi] == c_everness_coral_forest_deep_ocean_sand
and data[vi + area.ystride] == c_water_source
then
local s_pos = area:position(vi)
--
-- Coral Forest Deep Ocean House
--
local schem_pos = vector.new(s_pos)
-- find floor big enough
local indexes = Everness.find_content_in_vm_area(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
c_everness_coral_forest_deep_ocean_sand,
c_everness_coral_forest_deep_ocean_coral_plant_1,
c_everness_coral_forest_deep_ocean_coral_plant_2,
c_everness_coral_forest_deep_ocean_coral_plant_3,
c_everness_coral_forest_deep_ocean_coral_1,
c_everness_coral_forest_deep_ocean_coral_2,
c_everness_coral_forest_deep_ocean_coral_3,
c_everness_coral_forest_deep_ocean_coral_4
},
data,
area
)
if #indexes < size.x * size.z then
-- not enough space
return
end
-- enough water to place structure ?
local water_indexes = Everness.find_content_in_vm_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
c_water_source
},
data,
area
)
if #water_indexes > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
schem_placed = true
shared_args.schem_positions.everness_coral_forest_deep_ocean_house = shared_args.schem_positions.everness_coral_forest_deep_ocean_house or {}
table.insert(shared_args.schem_positions.everness_coral_forest_deep_ocean_house, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Coral Forest Deep Ocean House was placed at ' .. schem_pos:to_string())
break
end
end
end
end
end
end
end,
after_write_to_map = function(shared_args)
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions > 0 then
Everness:populate_loot_chests(chest_positions)
end
end
end
end
end
})

View file

@ -0,0 +1,303 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_coral_forest_dunes.y_max
local y_min = Everness.settings.biomes.everness_coral_forest_dunes.y_min
-- Coral Forest Dunes
Everness:register_biome({
name = 'everness:coral_forest_dunes',
node_top = 'everness:coral_sand',
depth_top = 1,
node_filler = 'everness:coral_sand',
depth_filler = 3,
node_riverbed = 'everness:coral_sand',
depth_riverbed = 2,
node_stone = 'everness:coral_desert_stone',
node_dungeon = 'everness:coral_sandstone',
node_dungeon_alt = 'everness:coral_sandstone_brick',
node_dungeon_stair = 'stairs:stair_coral_sandstone',
vertical_blend = 1,
y_max = y_max,
y_min = y_min,
heat_point = 60,
humidity_point = 50,
})
--
-- Register ores
--
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
-- Coral sand
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:coral_sand',
wherein = { 'everness:coral_desert_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 2316,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:coral_forest_dunes' }
})
-- Dirt
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:coral_dirt',
wherein = { 'everness:coral_desert_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 17676,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:coral_forest_dunes' }
})
-- Scatter ores
-- Coal
Everness:register_ore({
ore_type = 'scatter',
ore = 'everness:coral_desert_stone_with_coal',
wherein = 'everness:coral_desert_stone',
clust_scarcity = 8 * 8 * 8,
clust_num_ores = 9,
clust_size = 3,
y_max = y_max,
y_min = y_min,
biomes = { 'everness:coral_forest_dunes' }
})
--
-- Register decorations
--
-- Coral Forest Dunes
Everness:register_decoration({
name = 'everness:coral_forest_dunes_coral_volcano',
deco_type = 'schematic',
place_on = { 'everness:coral_sand' },
place_offset_y = -1,
sidelen = 16,
noise_params = {
offset = -0.012,
scale = 0.024,
spread = { x = 100, y = 100, z = 100 },
seed = 230,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:coral_forest_dunes' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('x_clay')
and minetest.get_modpath('everness') .. '/schematics/everness_coral_volcano_x_clay.mts'
or minetest.get_modpath('everness') .. '/schematics/everness_coral_volcano.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
spawn_by = 'everness:coral_sand',
num_spawn_by = 8,
})
Everness:register_decoration({
name = 'everness:coral_forest_dunes_coral_bush',
deco_type = 'simple',
place_on = { 'everness:dirt_with_coral_grass', 'everness:coral_sand', 'everness:coral_white_sand' },
sidelen = 16,
noise_params = {
offset = -0.02,
scale = 0.04,
spread = { x = 200, y = 200, z = 200 },
seed = 436,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:coral_forest_dunes' },
y_max = y_max,
y_min = y_min,
decoration = 'everness:coral_bush'
})
Everness:register_decoration({
name = 'everness:coral_forest_dunes_coral_shrub',
deco_type = 'simple',
place_on = { 'everness:dirt_with_coral_grass', 'everness:coral_sand', 'everness:coral_white_sand' },
sidelen = 16,
noise_params = {
offset = -0.02,
scale = 0.04,
spread = { x = 200, y = 200, z = 200 },
seed = 1220999,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:coral_forest_dunes' },
y_max = y_max,
y_min = y_min,
decoration = 'everness:coral_shrub'
})
--
-- On Generated
--
local disp = 16
local chance = 5
local water_level = tonumber(minetest.settings:get('water_level')) or 1
local schem = minetest.get_modpath('everness') .. '/schematics/everness_coral_forest_ocean_fishing_dock.mts'
local size = { x = 26, y = 10, z = 23 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
local y_dis = 1
local c_water_source = minetest.get_content_id('mapgen_water_source')
local biome_id_everness_coral_forest_dunes = minetest.get_biome_id('everness:coral_forest_dunes')
Everness:add_to_queue_on_generated({
name = 'everness:coral_forest_dunes',
can_run = function(biomemap)
return table.indexof(biomemap, biome_id_everness_coral_forest_dunes) ~= -1
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
local sidelength = maxp.x - minp.x + 1
local x_disp = rand:next(0, disp)
local z_disp = rand:next(0, disp)
shared_args.schem_positions = {}
if rand:next(0, 100) < chance then
for y = minp.y, maxp.y do
local vi = area:index(minp.x + sidelength / 2 + x_disp, y, minp.z + sidelength / 2 + z_disp)
if data[vi + area.ystride] == minetest.CONTENT_AIR
and data[vi] == c_water_source
-- Water Level
and water_level >= minp.y
and water_level <= maxp.y
then
local s_pos = area:position(vi)
--
-- Coral Forest Ocean Fishing Dock
--
local schem_pos = vector.new(s_pos.x, s_pos.y - y_dis, s_pos.z)
-- find floor big enough
local indexes = Everness.find_content_in_vm_area(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
c_water_source,
minetest.CONTENT_AIR
},
data,
area
)
if #indexes < size.x * size.z then
-- not enough space
return
end
-- enough space to place structure ?
local space_indexes = Everness.find_content_in_vm_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
c_water_source,
minetest.CONTENT_AIR
},
data,
area
)
if #space_indexes > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
shared_args.schem_positions.everness_coral_forest_ocean_fishing_dock = shared_args.schem_positions.everness_coral_forest_ocean_fishing_dock or {}
table.insert(shared_args.schem_positions.everness_coral_forest_ocean_fishing_dock, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y - y_dis, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y - y_dis + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Coral Forest Ocean Fishing Dock was placed at ' .. schem_pos:to_string())
break
end
end
end
end
end,
after_write_to_map = function(shared_args)
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions > 0 then
Everness:populate_loot_chests(chest_positions)
end
end
end
end
end
})

View file

@ -0,0 +1,284 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_coral_forest_ocean.y_max
local y_min = Everness.settings.biomes.everness_coral_forest_ocean.y_min
-- Coral Forest Ocean
Everness:register_biome({
name = 'everness:coral_forest_ocean',
node_top = 'everness:coral_white_sand',
depth_top = 1,
node_filler = 'everness:coral_white_sand',
depth_filler = 3,
node_riverbed = 'everness:coral_white_sand',
depth_riverbed = 2,
node_stone = 'everness:coral_desert_stone',
node_cave_liquid = 'mapgen_water_source',
node_dungeon = 'everness:coral_desert_cobble',
node_dungeon_alt = 'everness:coral_desert_mossy_cobble',
node_dungeon_stair = 'stairs:stair_coral_desert_cobble',
y_max = y_max,
y_min = y_min,
heat_point = 60,
humidity_point = 50,
})
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
-- Clay
Everness:register_ore({
ore_type = 'blob',
ore = 'default:clay',
wherein = { 'everness:coral_white_sand' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = -316,
octaves = 1,
persist = 0.0
},
biomes = asuna.features.ocean.coral_forest
})
-- Coral sand
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:coral_sand',
wherein = { 'everness:coral_desert_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 2316,
octaves = 1,
persist = 0.0
},
biomes = asuna.features.ocean.coral_forest
})
-- Dirt
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:coral_dirt',
wherein = { 'everness:coral_desert_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 17676,
octaves = 1,
persist = 0.0
},
biomes = asuna.features.ocean.coral_forest
})
-- Scatter ores
-- Coal
Everness:register_ore({
ore_type = 'scatter',
ore = 'everness:coral_desert_stone_with_coal',
wherein = 'everness:coral_desert_stone',
clust_scarcity = 8 * 8 * 8,
clust_num_ores = 9,
clust_size = 3,
y_max = y_max,
y_min = y_min,
biomes = asuna.features.ocean.coral_forest
})
--
-- Register decorations
--
-- Coral Forest Under
-- Coral reef
Everness:register_decoration({
name = 'everness:coral_forest_ocean_corals',
deco_type = 'simple',
place_on = { 'everness:coral_white_sand' },
place_offset_y = -1,
sidelen = 4,
noise_params = {
offset = -4,
scale = 4,
spread = { x = 50, y = 50, z = 50 },
seed = 7013,
octaves = 3,
persist = 0.7,
},
biomes = asuna.features.ocean.coral_forest,
y_max = y_max - 5 > y_min and y_max - 5 or y_max,
y_min = y_max - 11 > y_min and y_max - 11 or y_min,
flags = 'force_placement',
decoration = {
'everness:coral_corals',
'everness:coral_jellyfish',
'everness:coral_skeleton'
},
})
--
-- On Generated
--
local disp = 16
local chance = 5
local water_level = tonumber(minetest.settings:get('water_level')) or 1
local schem = minetest.get_modpath('everness') .. '/schematics/everness_coral_forest_ocean_fishing_dock.mts'
local size = { x = 26, y = 10, z = 23 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
local y_dis = 1
local c_water_source = minetest.get_content_id('mapgen_water_source')
local biome_id_everness_coral_forest_ocean = minetest.get_biome_id('everness:coral_forest_ocean')
Everness:add_to_queue_on_generated({
name = 'everness:coral_forest_ocean',
can_run = function(biomemap)
return table.indexof(biomemap, biome_id_everness_coral_forest_ocean) ~= -1
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
local sidelength = maxp.x - minp.x + 1
local x_disp = rand:next(0, disp)
local z_disp = rand:next(0, disp)
shared_args.schem_positions = {}
if rand:next(0, 100) < chance then
for y = minp.y, maxp.y do
local vi = area:index(minp.x + sidelength / 2 + x_disp, y, minp.z + sidelength / 2 + z_disp)
if data[vi + area.ystride] == minetest.CONTENT_AIR
and data[vi] == c_water_source
-- Water Level
and water_level >= minp.y
and water_level <= maxp.y
then
local s_pos = area:position(vi)
--
-- Coral Forest Ocean Fishing Dock
--
local schem_pos = vector.new(s_pos.x, s_pos.y - y_dis, s_pos.z)
-- find floor big enough
local indexes = Everness.find_content_in_vm_area(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
c_water_source,
minetest.CONTENT_AIR
},
data,
area
)
if #indexes < size.x * size.z then
-- not enough space
return
end
-- enough space to place structure ?
local space_indexes = Everness.find_content_in_vm_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
c_water_source,
minetest.CONTENT_AIR
},
data,
area
)
if #space_indexes > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
shared_args.schem_positions.everness_coral_forest_ocean_fishing_dock = shared_args.schem_positions.everness_coral_forest_ocean_fishing_dock or {}
table.insert(shared_args.schem_positions.everness_coral_forest_ocean_fishing_dock, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y - y_dis, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y - y_dis + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Coral Forest Ocean Fishing Dock was placed at ' .. schem_pos:to_string())
break
end
end
end
end
end,
after_write_to_map = function(shared_args)
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions > 0 then
Everness:populate_loot_chests(chest_positions)
end
end
end
end
end
})

View file

@ -0,0 +1,299 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_coral_forest_under.y_max
local y_min = Everness.settings.biomes.everness_coral_forest_under.y_min
-- Coral Forest Under
Everness:register_biome({
name = 'everness:coral_forest_under',
node_cave_liquid = { 'mapgen_water_source', 'mapgen_lava_source' },
node_dungeon = 'everness:coral_desert_cobble',
node_dungeon_alt = 'everness:coral_desert_mossy_cobble',
node_dungeon_stair = 'stairs:stair_coral_desert_cobble',
y_max = y_max,
y_min = y_min,
heat_point = 60,
humidity_point = 50,
})
--
-- Register ores
--
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
-- Coral Desert Stone
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:coral_desert_stone',
wherein = { 'default:stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = -316,
octaves = 1,
persist = 0.0
},
biomes = asuna.features.cave.coral_forest
})
--
-- Register decorations
--
-- Coral Forest Under
Everness:register_decoration({
name = 'everness:coral_forest_under_desert_stone_with_moss_floors',
deco_type = 'simple',
place_on = { 'default:stone' },
place_offset_y = -1,
sidelen = 16,
fill_ratio = 10,
biomes = asuna.features.cave.coral_forest,
y_max = y_max,
y_min = y_min,
flags = 'all_floors, force_placement',
decoration = {
'everness:coral_desert_stone_with_moss'
},
})
Everness:register_decoration({
name = 'everness:coral_forest_under_mold_stone_ceilings',
deco_type = 'simple',
place_on = { 'default:stone' },
sidelen = 16,
fill_ratio = 0.4,
biomes = asuna.features.cave.coral_forest,
y_max = y_max,
y_min = y_min,
flags = 'all_ceilings',
decoration = {
'everness:moss_block'
},
})
Everness:register_decoration({
name = 'everness:coral_forest_under_coral_tree_bioluminescent',
deco_type = 'simple',
place_on = { 'everness:coral_desert_stone_with_moss' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.002,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = asuna.features.cave.coral_forest,
y_max = y_max - 1000,
y_min = y_min,
flags = 'all_floors',
decoration = {
'everness:marker'
},
})
Everness:register_decoration({
name = 'everness:coral_forest_under_coral_plant_bioluminescent',
deco_type = 'simple',
place_on = { 'everness:coral_desert_stone_with_moss' },
param2 = 8,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.02,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.cave.coral_forest,
y_max = y_max,
y_min = y_min,
decoration = 'everness:coral_plant_bioluminescent',
flags = 'all_floors'
})
Everness:register_decoration({
name = 'everness:coral_forest_under_lumecorn',
deco_type = 'simple',
place_on = { 'everness:coral_desert_stone_with_moss' },
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = asuna.features.cave.coral_forest,
y_max = y_max - 1000 > y_min and y_max - 1000 or y_max,
y_min = y_min,
decoration = 'everness:lumecorn',
flags = 'all_floors',
})
Everness:register_decoration({
name = 'everness:coral_forest_under_vines',
deco_type = 'simple',
place_on = { 'everness:moss_block' },
sidelen = 16,
fill_ratio = 0.09,
biomes = asuna.features.cave.coral_forest,
param2 = 8,
decoration = {
'everness:lumabus_vine_1',
'everness:lumabus_vine_2',
'everness:flowered_vine_1',
'everness:flowered_vine_2'
},
y_max = y_max,
y_min = y_min,
flags = 'all_ceilings',
spawn_by = 'air',
num_spawn_by = 8
})
Everness:register_decoration({
name = 'everness:coral_forest_under_plants',
deco_type = 'simple',
place_on = { 'everness:coral_desert_stone_with_moss' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.02,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.cave.coral_forest,
y_max = y_max - 500 > y_min and y_max - 500 or y_max,
y_min = y_min,
decoration = {
'everness:coral_grass_orange',
'everness:globulagus',
'everness:coral_grass_tall',
},
flags = 'all_floors',
})
--
-- On Generated
--
local biome_id_everness_coral_forest_under = {}
for _,biome in ipairs(asuna.features.cave.coral_forest) do
table.insert(biome_id_everness_coral_forest_under,minetest.get_biome_id(biome))
end
local deco_id_coral_forest_under_coral_tree_bioluminescent = minetest.get_decoration_id('everness:coral_forest_under_coral_tree_bioluminescent')
local schem_bioluminescent_tree = minetest.get_modpath('everness') .. '/schematics/everness_coral_tree_bioluminescent.mts'
local coral_bioluminescent_tree_size = { x = 15, y = 17, z = 15 }
local bioluminescent_tree_size_x = math.round(coral_bioluminescent_tree_size.x / 2)
local bioluminescent_tree_size_z = math.round(coral_bioluminescent_tree_size.z / 2)
local bioluminescent_tree_safe_volume = (coral_bioluminescent_tree_size.x * coral_bioluminescent_tree_size.y * coral_bioluminescent_tree_size.z) / 1.5
local bioluminescent_tree_y_dis = 1
local bioluminescent_tree_place_on = minetest.registered_decorations['everness:coral_forest_under_coral_tree_bioluminescent'].place_on
bioluminescent_tree_place_on = type(bioluminescent_tree_place_on) == 'string' and { bioluminescent_tree_place_on } or bioluminescent_tree_place_on
minetest.set_gen_notify({ decoration = true }, { deco_id_coral_forest_under_coral_tree_bioluminescent })
Everness:add_to_queue_on_generated({
name = 'everness:coral_forest_under',
can_run = function(biomemap)
for _,biome in ipairs(biome_id_everness_coral_forest_under) do
if table.indexof(biomemap, biome) ~= -1 then
return true
end
end
return false
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
--
-- Coral Tree Bioluminescent
--
for _, pos in ipairs(gennotify['decoration#' .. (deco_id_coral_forest_under_coral_tree_bioluminescent or '')] or {}) do
-- `pos` is position of the 'place_on' node
local marker_pos = vector.new(pos.x, pos.y + 1, pos.z)
local marker_node = minetest.get_node(marker_pos)
local place_on_node = minetest.get_node(pos)
if marker_node and marker_node.name == 'everness:marker' then
-- remove marker
minetest.remove_node(marker_pos)
if table.indexof(bioluminescent_tree_place_on, place_on_node.name) ~= -1 then
-- enough air to place structure ?
local positions = minetest.find_nodes_in_area(
vector.new(
pos.x - bioluminescent_tree_size_x,
pos.y - bioluminescent_tree_y_dis,
pos.z - bioluminescent_tree_size_z
),
vector.new(
pos.x + bioluminescent_tree_size_x,
pos.y - bioluminescent_tree_y_dis + coral_bioluminescent_tree_size.y,
pos.z + bioluminescent_tree_size_z
),
{
'air',
'everness:coral_tree'
},
true
)
local air = positions.air or {}
local tree = positions['everness:coral_tree'] or {}
-- do not overlap another tree
if #tree == 0 and #air > bioluminescent_tree_safe_volume then
minetest.place_schematic_on_vmanip(
vm,
vector.new(marker_pos.x, marker_pos.y - bioluminescent_tree_y_dis, marker_pos.z),
schem_bioluminescent_tree,
'random',
nil,
true,
'place_center_x, place_center_z'
)
-- minetest.log('action', '[Everness] Coral Tree Bioluminescent was placed at ' .. pos:to_string())
end
end
end
end
end
})

View file

@ -0,0 +1,378 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_crystal_forest.y_max
local y_min = Everness.settings.biomes.everness_crystal_forest.y_min
-- Crystal Forest
Everness:register_biome({
name = 'everness:crystal_forest',
node_top = 'everness:dirt_with_crystal_grass',
depth_top = 1,
node_filler = 'everness:crystal_dirt',
depth_filler = 1,
node_riverbed = 'everness:crystal_dirt',
depth_riverbed = 2,
node_stone = 'everness:crystal_stone',
node_dungeon = 'everness:crystal_cobble',
node_dungeon_alt = 'everness:crystal_mossy_cobble',
node_dungeon_stair = 'stairs:stair_crystal_cobble',
y_max = y_max,
y_min = y_min,
heat_point = 35,
humidity_point = 50,
})
--
-- Register ores
--
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
-- Crystal sand
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:crystal_sand',
wherein = { 'everness:crystal_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 2316,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:crystal_forest' }
})
-- Dirt
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:crystal_dirt',
wherein = { 'everness:crystal_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 17676,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:crystal_forest' }
})
-- Scatter ores
-- Coal
Everness:register_ore({
ore_type = 'scatter',
ore = 'everness:crystal_stone_with_coal',
wherein = 'everness:crystal_stone',
clust_scarcity = 8 * 8 * 8,
clust_num_ores = 9,
clust_size = 3,
y_max = y_max,
y_min = y_min,
biomes = { 'everness:crystal_forest' }
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:crystal_forest_crystal_mushrooms',
deco_type = 'simple',
place_on = { 'everness:dirt_with_crystal_grass' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.006,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:crystal_forest' },
y_max = y_max,
y_min = y_min,
decoration = 'everness:crystal_mushrooms',
param2 = 40
})
Everness:register_decoration({
name = 'everness:crystal_forest_crystal_tree',
deco_type = 'schematic',
place_on = { 'everness:dirt_with_crystal_grass' },
place_offset_y = 0,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.002,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:crystal_forest' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_crystal_tree.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
Everness:register_decoration({
name = 'everness:crystal_forest_crystal_tree_large',
deco_type = 'schematic',
place_on = { 'everness:dirt_with_crystal_grass' },
place_offset_y = 0,
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.001,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:crystal_forest' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_crystal_tree_large.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
Everness:register_decoration({
name = 'everness:crystal_forest_crystal_bush',
deco_type = 'schematic',
place_on = { 'everness:dirt_with_crystal_grass' },
sidelen = 16,
place_offset_y = 1,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = { 'everness:crystal_forest' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_crystal_bush.mts',
flags = 'place_center_x, place_center_z',
})
local function register_crystal_grass_decoration(offset, scale, length)
Everness:register_decoration({
name = 'everness:crystal_forest_crystal_grass_' .. length,
deco_type = 'simple',
place_on = { 'everness:dirt_with_crystal_grass' },
sidelen = 16,
noise_params = {
offset = offset,
scale = scale,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:crystal_forest' },
y_max = y_max,
y_min = y_min,
decoration = 'everness:crystal_grass_' .. length,
})
end
-- Crystal Grasses
register_crystal_grass_decoration(-0.03, 0.09, 3)
register_crystal_grass_decoration(-0.015, 0.075, 2)
register_crystal_grass_decoration(0, 0.06, 1)
minetest.register_decoration({
name = 'everness:crystal_forest_sparkling_crystal_grass',
deco_type = 'simple',
place_on = { 'everness:dirt_with_crystal_grass' },
biomes = { 'everness_crystal_forest' },
sidelen = 16,
fill_ratio = 0.4,
y_min = 2,
y_max = 31000,
decoration = 'everness:sparkling_crystal_grass',
})
--
-- On Generated
--
local dids = {}
for decoration,size in pairs({
['everness:crystal_forest_crystal_tree'] = { x = 12, y = 13, z = 12 },
['everness:crystal_forest_crystal_tree_large'] = { x = 20, y = 14, z = 20 },
}) do
local did = minetest.get_decoration_id(decoration)
minetest.set_gen_notify('decoration',{ did })
dids['decoration#' .. did] = { x = size.x / 2, y = size.y, z = size.z / 2 }
end
minetest.register_on_generated(function(minp, maxp, blockseed)
if maxp.y > 8 then
--
-- Crystal trees - fix light
--
local gennotify = minetest.get_mapgen_object('gennotify')
for did,size in pairs(dids) do
for _, pos in ipairs(gennotify[did] or {}) do
minetest.fix_light(
{ x = pos.x - size.x, y = pos.y, z = pos.z - size.z },
{ x = pos.x + size.x, y = pos.y + size.y, z = pos.z + size.z },
true
)
end
end
end
end)
---
local chance = 20
local disp = 16
local schem = minetest.get_modpath('everness') .. '/schematics/everness_quartz_temple.mts'
local size = { x = 16, y = 13, z = 16 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
local y_dis = 1
local c_dirt_with_crystal_grass = minetest.get_content_id('everness:dirt_with_crystal_grass')
local biome_id_everness_crystal_forest = minetest.get_biome_id('everness:crystal_forest')
Everness:add_to_queue_on_generated({
name = 'everness:crystal_forest',
can_run = function(biomemap)
return table.indexof(biomemap, biome_id_everness_crystal_forest) ~= -1
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
local sidelength = maxp.x - minp.x + 1
local x_disp = rand:next(0, disp)
local z_disp = rand:next(0, disp)
shared_args.schem_positions = {}
for y = minp.y, maxp.y do
local vi = area:index(minp.x + sidelength / 2 + x_disp, y, minp.z + sidelength / 2 + z_disp)
if data[vi + area.ystride] == minetest.CONTENT_AIR
and data[vi] == c_dirt_with_crystal_grass
and rand:next(0, 100) < chance
then
local s_pos = area:position(vi)
--
-- Quartz Temple
--
-- add Y displacement
local schem_pos = vector.new(s_pos.x, s_pos.y - y_dis, s_pos.z)
-- find floor big enough
local positions = minetest.find_nodes_in_area_under_air(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
'everness:dirt_with_crystal_grass'
}
)
if #positions < size.x * size.z then
-- not enough space
return
end
-- enough air to place structure ?
local air_positions = minetest.find_nodes_in_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
'air'
}
)
if #air_positions > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
shared_args.schem_positions.everness_quartz_temple = shared_args.schem_positions.everness_quartz_temple or {}
table.insert(shared_args.schem_positions.everness_quartz_temple, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y - y_dis, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y - y_dis + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Quartz Temple was placed at ' .. schem_pos:to_string())
end
end
end
end,
after_write_to_map = function(shared_args)
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions > 0 then
Everness:populate_loot_chests(chest_positions)
end
end
end
end
end
})

View file

@ -0,0 +1,325 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_crystal_forest_deep_ocean.y_max
local y_min = Everness.settings.biomes.everness_crystal_forest_deep_ocean.y_min
-- Coral Forest Ocean
Everness:register_biome({
name = 'everness:crystal_forest_deep_ocean',
node_top = 'everness:crystal_forest_deep_ocean_sand',
depth_top = 1,
node_filler = 'everness:crystal_forest_deep_ocean_sand',
depth_filler = 3,
node_riverbed = 'everness:crystal_forest_deep_ocean_sand',
depth_riverbed = 2,
node_cave_liquid = 'mapgen_water_source',
node_dungeon = 'everness:crystal_forest_deep_ocean_sandstone_block',
node_dungeon_alt = 'everness:crystal_forest_deep_ocean_sandstone_brick',
node_dungeon_stair = 'stairs:stair_crystal_forest_deep_ocean_sandstone_block',
y_max = y_max,
y_min = y_min,
heat_point = 35,
humidity_point = 50,
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:crystal_forest_deep_ocean_coral_1',
deco_type = 'schematic',
place_on = { 'everness:crystal_forest_deep_ocean_sand' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
sidelen = 16,
fill_ratio = 0.003,
biomes = asuna.features.ocean.crystal_forest,
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_crystal_forest_deep_ocean_coral_1.mts',
flags = 'place_center_x, place_center_z, force_placement',
})
Everness:register_decoration({
name = 'everness:crystal_forest_deep_ocean_coral_2',
deco_type = 'schematic',
place_on = { 'everness:crystal_forest_deep_ocean_sand' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
sidelen = 16,
fill_ratio = 0.003,
biomes = asuna.features.ocean.crystal_forest,
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_crystal_forest_deep_ocean_coral_2.mts',
flags = 'place_center_x, place_center_z, force_placement',
})
Everness:register_decoration({
name = 'everness:crystal_forest_deep_ocean_coral_3',
deco_type = 'schematic',
place_on = { 'everness:crystal_forest_deep_ocean_sand' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
sidelen = 16,
fill_ratio = 0.003,
biomes = asuna.features.ocean.crystal_forest,
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_crystal_forest_deep_ocean_coral_3.mts',
flags = 'place_center_x, place_center_z, force_placement',
})
Everness:register_decoration({
name = 'everness:crystal_forest_deep_ocean_sand_with_crack',
deco_type = 'simple',
place_on = { 'everness:crystal_forest_deep_ocean_sand' },
place_offset_y = -1,
sidelen = 4,
fill_ratio = 0.002,
biomes = asuna.features.ocean.crystal_forest,
y_max = y_max,
y_min = y_min,
flags = 'force_placement',
decoration = { 'everness:crystal_forest_deep_ocean_sand_with_crack' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
})
Everness:register_decoration({
name = 'everness:crystal_forest_deep_ocean_coral_plant_1',
deco_type = 'simple',
place_on = { 'everness:crystal_forest_deep_ocean_sand' },
place_offset_y = -1,
sidelen = 4,
noise_params = {
offset = 0,
scale = 0.02,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.ocean.crystal_forest,
y_max = y_max,
y_min = y_min,
flags = 'force_placement',
decoration = { 'everness:crystal_forest_deep_ocean_coral_plant_1' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
})
Everness:register_decoration({
name = 'everness:crystal_forest_deep_ocean_coral_plant_2',
deco_type = 'simple',
place_on = { 'everness:crystal_forest_deep_ocean_sand' },
place_offset_y = -1,
sidelen = 4,
noise_params = {
offset = -0.02,
scale = 0.04,
spread = { x = 200, y = 200, z = 200 },
seed = 436,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.ocean.crystal_forest,
y_max = y_max,
y_min = y_min,
flags = 'force_placement',
decoration = { 'everness:crystal_forest_deep_ocean_coral_plant_2' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
})
Everness:register_decoration({
name = 'everness:crystal_forest_deep_ocean_coral_plant_3',
deco_type = 'simple',
place_on = { 'everness:crystal_forest_deep_ocean_sand' },
place_offset_y = -1,
sidelen = 4,
noise_params = {
offset = -0.02,
scale = 0.04,
spread = { x = 200, y = 200, z = 200 },
seed = 19822,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.ocean.crystal_forest,
y_max = y_max,
y_min = y_min,
flags = 'force_placement',
decoration = { 'everness:crystal_forest_deep_ocean_coral_plant_3' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
})
--
-- On Generated
--
local c_water_source = minetest.get_content_id('mapgen_water_source')
local c_everness_crystal_forest_deep_ocean_sand = minetest.get_content_id('everness:crystal_forest_deep_ocean_sand')
local c_everness_crystal_forest_deep_ocean_coral_plant_1 = minetest.get_content_id('everness:crystal_forest_deep_ocean_coral_plant_1')
local c_everness_crystal_forest_deep_ocean_coral_plant_2 = minetest.get_content_id('everness:crystal_forest_deep_ocean_coral_plant_2')
local c_everness_crystal_forest_deep_ocean_coral_plant_3 = minetest.get_content_id('everness:crystal_forest_deep_ocean_coral_plant_3')
local c_everness_crystal_forest_deep_ocean_coral_1 = minetest.get_content_id('everness:crystal_forest_deep_ocean_coral_1')
local c_everness_crystal_forest_deep_ocean_coral_2 = minetest.get_content_id('everness:crystal_forest_deep_ocean_coral_2')
local c_everness_crystal_forest_deep_ocean_coral_3 = minetest.get_content_id('everness:crystal_forest_deep_ocean_coral_3')
-- Biome IDs
local biome_id_everness_crystal_forest_deep_ocean = {}
for _,biome in ipairs(asuna.features.ocean.crystal_forest) do
table.insert(biome_id_everness_crystal_forest_deep_ocean,minetest.get_biome_id(biome))
end
local chance = 30
local schem = minetest.get_modpath('everness') .. '/schematics/everness_crystal_forest_deep_ocean_ruins.mts'
local size = { x = 14, y = 12, z = 9 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
Everness:add_to_queue_on_generated({
name = 'everness:crystal_forest_deep_ocean',
can_run = function(biomemap)
for _,biome in ipairs(biome_id_everness_crystal_forest_deep_ocean) do
if table.indexof(biomemap, biome) ~= -1 then
return true
end
end
return false
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
shared_args.schem_positions = {}
local schem_placed = false
if rand:next(0, 100) < chance then
for y = maxp.y, minp.y, -1 do
if schem_placed then
break
end
for z = minp.z, maxp.z do
if schem_placed then
break
end
for x = minp.x, maxp.x do
local vi = area:index(x, y, z)
if
data[vi] == c_everness_crystal_forest_deep_ocean_sand
and data[vi + area.ystride] == c_water_source
then
local s_pos = area:position(vi)
--
-- Crystal Forest Deep Ocean Ruins
--
local schem_pos = vector.new(s_pos)
-- find floor big enough
local indexes = Everness.find_content_in_vm_area(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
c_everness_crystal_forest_deep_ocean_sand,
c_everness_crystal_forest_deep_ocean_coral_plant_1,
c_everness_crystal_forest_deep_ocean_coral_plant_2,
c_everness_crystal_forest_deep_ocean_coral_plant_3,
c_everness_crystal_forest_deep_ocean_coral_1,
c_everness_crystal_forest_deep_ocean_coral_2,
c_everness_crystal_forest_deep_ocean_coral_3
},
data,
area
)
if #indexes < size.x * size.z then
-- not enough space
return
end
-- enough water to place structure ?
local water_indexes = Everness.find_content_in_vm_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
c_water_source
},
data,
area
)
if #water_indexes > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
schem_placed = true
shared_args.schem_positions.everness_crystal_forest_deep_ocean_ruins = shared_args.schem_positions.everness_crystal_forest_deep_ocean_ruins or {}
table.insert(shared_args.schem_positions.everness_crystal_forest_deep_ocean_ruins, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Crystal Forest Deep Ocean Ruins was placed at ' .. schem_pos:to_string())
break
end
end
end
end
end
end
end,
after_write_to_map = function(shared_args)
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions > 0 then
Everness:populate_loot_chests(chest_positions)
end
end
end
end
end
})

View file

@ -0,0 +1,337 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_crystal_forest_dunes.y_max
local y_min = Everness.settings.biomes.everness_crystal_forest_dunes.y_min
-- Crystal Forest Dunes
Everness:register_biome({
name = 'everness:crystal_forest_dunes',
node_top = 'everness:crystal_sand',
depth_top = 1,
node_filler = 'everness:crystal_sand',
depth_filler = 3,
node_riverbed = 'everness:crystal_sand',
depth_riverbed = 2,
node_stone = 'everness:crystal_stone',
node_dungeon = 'everness:crystal_cobble',
node_dungeon_alt = 'everness:crystal_mossy_cobble',
node_dungeon_stair = 'stairs:stair_crystal_cobble',
vertical_blend = 1,
y_max = y_max,
y_min = y_min,
heat_point = 35,
humidity_point = 50,
})
--
-- Register ores
--
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
-- Crystal sand
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:crystal_sand',
wherein = { 'everness:crystal_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 2316,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:crystal_forest_dunes' }
})
-- Dirt
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:crystal_dirt',
wherein = { 'everness:crystal_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 17676,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:crystal_forest_dunes' }
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:crystal_forest_dunes_ruins_1',
deco_type = 'schematic',
place_on = { 'everness:crystal_sand' },
sidelen = 16,
noise_params = {
offset = -0.0003,
scale = 0.0009,
spread = { x = 200, y = 200, z = 200 },
seed = 230,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:crystal_forest_dunes' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_crystal_forest_ruins_1.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
Everness:register_decoration({
name = 'everness:crystal_forest_dunes_ruins_2',
deco_type = 'schematic',
place_on = { 'everness:crystal_sand' },
place_offset_y = 0,
sidelen = 16,
noise_params = {
offset = -0.0003,
scale = 0.0009,
spread = { x = 200, y = 200, z = 200 },
seed = 230,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:crystal_forest_dunes' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_crystal_forest_ruins_2.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
--
-- On Generated
--
local chance = 20
local chance_water = 10
local disp = 16
local water_level = tonumber(minetest.settings:get('water_level')) or 1
local schem = minetest.read_schematic(minetest.get_modpath('everness') .. '/schematics/everness_quartz_fountain.mts', {})
local size = { x = 11, y = 10, z = 11 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
local y_dis = 1
local schem_shrine = minetest.read_schematic(minetest.get_modpath('everness') .. '/schematics/everness_crystal_forest_ocean_shrine.mts', {})
local size_shrine = { x = 13, y = 16, z = 13 }
local size_x_shrine = math.round(size.x / 2)
local size_z_shrine = math.round(size.z / 2)
local y_dis_shrine = 8
local c_everness_crystal_sand = minetest.get_content_id('everness:crystal_sand')
local c_water_source = minetest.get_content_id('mapgen_water_source')
local biome_id_everness_crystal_forest_dunes = minetest.get_biome_id('everness:crystal_forest_dunes')
Everness:add_to_queue_on_generated({
name = 'everness:crystal_forest_dunes',
can_run = function(biomemap)
return table.indexof(biomemap, biome_id_everness_crystal_forest_dunes) ~= -1
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
local sidelength = maxp.x - minp.x + 1
local x_disp = rand:next(0, disp)
local z_disp = rand:next(0, disp)
shared_args.schem_positions = {}
for y = minp.y, maxp.y do
local vi = area:index(minp.x + sidelength / 2 + x_disp, y, minp.z + sidelength / 2 + z_disp)
if data[vi + area.ystride] == minetest.CONTENT_AIR then
local s_pos = area:position(vi)
if
data[vi] == c_everness_crystal_sand
and rand:next(0, 100) < chance
then
--
-- Quartz Fountain
--
-- add Y displacement
local schem_pos = vector.new(s_pos.x, s_pos.y - y_dis, s_pos.z)
-- find floor big enough
local positions = minetest.find_nodes_in_area_under_air(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
'everness:crystal_sand'
}
)
if #positions < size.x * size.z then
-- not enough space
return
end
-- enough air to place structure ?
local air_positions = minetest.find_nodes_in_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
'air'
}
)
local replacements
if rand:next(0, 100) < 50 then
replacements = {
['everness:chest'] = 'everness:quartz_pillar'
}
end
if #air_positions > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem,
'random',
replacements,
true,
'place_center_x, place_center_z'
)
shared_args.schem_positions.everness_quartz_fountain = shared_args.schem_positions.everness_quartz_fountain or {}
table.insert(shared_args.schem_positions.everness_quartz_fountain, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y - y_dis, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y - y_dis + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Quartz Fountain was placed at ' .. schem_pos:to_string())
end
end
if data[vi] == c_water_source
and rand:next(0, 100) < chance_water
-- Water Level
and water_level >= minp.y
and water_level <= maxp.y
then
--
-- Crystal Forest Ocean Shrine
--
-- add Y displacement
local schem_pos = vector.new(s_pos.x, s_pos.y - y_dis_shrine, s_pos.z)
-- find floor big enough
local indexes = Everness.find_content_in_vm_area(
vector.new(s_pos.x - size_x_shrine, s_pos.y - 1, s_pos.z - size_z_shrine),
vector.new(s_pos.x + size_x_shrine, s_pos.y + 1, s_pos.z + size_z_shrine),
{
c_water_source,
minetest.CONTENT_AIR
},
data,
area
)
if #indexes < size_shrine.x * size_shrine.z then
-- not enough space
return
end
-- enough space to place structure ?
local space_indexes = Everness.find_content_in_vm_area(
vector.new(s_pos.x - size_x_shrine, s_pos.y, s_pos.z - size_z_shrine),
vector.new(s_pos.x + size_x_shrine, s_pos.y + size_shrine.y, s_pos.z + size_z_shrine),
{
c_water_source,
minetest.CONTENT_AIR
},
data,
area
)
if #space_indexes > (size_shrine.x * size_shrine.y * size_shrine.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem_shrine,
'random',
nil,
true,
'place_center_x, place_center_z'
)
shared_args.schem_positions.everness_crystal_forest_ocean_shrine = shared_args.schem_positions.everness_crystal_forest_ocean_shrine or {}
table.insert(shared_args.schem_positions.everness_crystal_forest_ocean_shrine, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x_shrine, s_pos.y - y_dis_shrine, s_pos.z - size_z_shrine),
maxp = vector.new(s_pos.x + size_x_shrine, s_pos.y - y_dis_shrine + size_shrine.y, s_pos.z + size_z_shrine)
})
minetest.log('action', '[Everness] Crystal Forest Ocean Shrine was placed at ' .. schem_pos:to_string())
end
end
end
end
end,
after_write_to_map = function(shared_args)
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions > 0 then
Everness:populate_loot_chests(chest_positions)
end
end
end
end
end
})

View file

@ -0,0 +1,147 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_crystal_forest_ocean.y_max
local y_min = Everness.settings.biomes.everness_crystal_forest_ocean.y_min
-- Crystal Forest Ocean
Everness:register_biome({
name = 'everness:crystal_forest_ocean',
node_top = 'everness:crystal_sand',
depth_top = 1,
node_filler = 'everness:crystal_sand',
depth_filler = 3,
node_riverbed = 'everness:crystal_sand',
depth_riverbed = 2,
node_stone = 'everness:crystal_stone',
node_cave_liquid = 'mapgen_water_source',
node_dungeon = 'everness:crystal_cobble',
node_dungeon_alt = 'everness:crystal_mossy_cobble',
node_dungeon_stair = 'stairs:stair_crystal_cobble',
y_max = y_max,
y_min = y_min,
heat_point = 35,
humidity_point = 50,
})
--
-- Register ores
--
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
-- Clay
Everness:register_ore({
ore_type = 'blob',
ore = 'default:clay',
wherein = { 'everness:crystal_sand' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = -316,
octaves = 1,
persist = 0.0
},
biomes = asuna.features.ocean.crystal_forest
})
-- Crystal sand
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:crystal_sand',
wherein = { 'everness:crystal_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 2316,
octaves = 1,
persist = 0.0
},
biomes = asuna.features.ocean.crystal_forest
})
-- Dirt
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:crystal_dirt',
wherein = { 'everness:crystal_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 17676,
octaves = 1,
persist = 0.0
},
biomes = asuna.features.ocean.crystal_forest
})
--
-- Register decorations
--
-- Coral reef
Everness:register_decoration({
name = 'everness:crystal_forest_ocean_corals',
deco_type = 'simple',
place_on = { 'everness:crystal_sand' },
place_offset_y = -1,
sidelen = 4,
noise_params = {
offset = -4,
scale = 4,
spread = { x = 50, y = 50, z = 50 },
seed = 7013,
octaves = 3,
persist = 0.7,
},
biomes = asuna.features.ocean.crystal_forest,
y_max = y_max,
y_min = y_max - 10 > y_min and y_max - 10 or y_min,
flags = 'force_placement',
decoration = {
'everness:crystal_coral_dark',
'everness:crystal_coral_light',
'everness:coral_skeleton'
},
})

View file

@ -0,0 +1,136 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_crystal_forest_shore.y_max
local y_min = Everness.settings.biomes.everness_crystal_forest_shore.y_min
-- Crystal Forest Shore
Everness:register_biome({
name = 'everness:crystal_forest_shore',
node_top = 'everness:crystal_sand',
depth_top = 1,
node_filler = 'everness:crystal_sand',
depth_filler = 3,
node_riverbed = 'everness:crystal_sand',
depth_riverbed = 2,
node_stone = 'everness:crystal_stone',
node_cave_liquid = 'mapgen_water_source',
node_dungeon = 'everness:crystal_cobble',
node_dungeon_alt = 'everness:crystal_mossy_cobble',
node_dungeon_stair = 'stairs:stair_crystal_cobble',
y_max = y_max,
y_min = y_min,
heat_point = 35,
humidity_point = 50,
})
--
-- Register ores
--
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
-- Crystal sand
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:crystal_sand',
wherein = { 'everness:crystal_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 2316,
octaves = 1,
persist = 0.0
},
biomes = asuna.biome_groups.shore
})
-- Dirt
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:crystal_dirt',
wherein = { 'everness:crystal_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 17676,
octaves = 1,
persist = 0.0
},
biomes = asuna.biome_groups.shore
})
-- Scatter ores
-- Coal
Everness:register_ore({
ore_type = 'scatter',
ore = 'everness:crystal_stone_with_coal',
wherein = 'everness:crystal_stone',
clust_scarcity = 8 * 8 * 8,
clust_num_ores = 9,
clust_size = 3,
y_max = y_max,
y_min = y_min,
biomes = asuna.biome_groups.shore
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:crystal_forest_shore_crystal_waterlily',
deco_type = 'simple',
place_on = { 'mapgen_water_source' },
sidelen = 16,
noise_params = {
offset = 0.0125,
scale = 0.05,
spread = { x = 100, y = 100, z = 100 },
seed = 33,
octaves = 2,
persist = 0.7
},
biomes = 'everness:crystal_forest_shore',
y_max = 1,
y_min = 0,
decoration = 'everness:crystal_waterlily',
param2 = 0,
param2_max = 3,
flags = "liquid_surface",
})

View file

@ -0,0 +1,413 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_crystal_forest_under.y_max
local y_min = Everness.settings.biomes.everness_crystal_forest_under.y_min
-- Crystal Forest Under
Everness:register_biome({
name = 'everness:crystal_forest_under',
node_cave_liquid = { 'mapgen_water_source', 'mapgen_lava_source' },
node_dungeon = 'everness:crystal_cobble',
node_dungeon_alt = 'everness:crystal_mossy_cobble',
node_dungeon_stair = 'stairs:stair_crystal_cobble',
y_max = y_max,
y_min = y_min,
heat_point = 35,
humidity_point = 50,
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:crystal_forest_under_floors',
deco_type = 'simple',
place_on = { 'default:stone' },
sidelen = 16,
place_offset_y = -1,
fill_ratio = 10,
biomes = asuna.features.cave.crystal_forest,
y_max = y_max,
y_min = y_min,
decoration = {
'everness:crystal_cave_dirt_with_moss',
'everness:crystal_moss_block'
},
flags = 'all_floors, force_placement'
})
Everness:register_decoration({
name = 'everness:crystal_forest_under_ceilings',
deco_type = 'simple',
place_on = { 'default:stone' },
sidelen = 16,
fill_ratio = 0.4,
biomes = asuna.features.cave.crystal_forest,
y_max = y_max,
y_min = y_min,
flags = 'all_ceilings',
decoration = {
'everness:crystal_moss_block'
},
})
Everness:register_decoration({
name = 'everness:crystal_forest_under_vines',
deco_type = 'simple',
place_on = { 'everness:crystal_moss_block' },
sidelen = 16,
fill_ratio = 0.09,
biomes = asuna.features.cave.crystal_forest,
param2 = 8,
decoration = {
'everness:twisted_vine_1',
'everness:twisted_vine_2',
'everness:golden_vine_1',
'everness:golden_vine_2'
},
y_max = y_max,
y_min = y_min,
flags = 'all_ceilings',
spawn_by = 'air',
num_spawn_by = 8
})
Everness:register_decoration({
name = 'everness:crystal_forest_under_crystal_cluster',
deco_type = 'simple',
place_on = {
'everness:crystal_cave_dirt_with_moss',
'everness:crystal_moss_block'
},
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.002,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = asuna.features.cave.crystal_forest,
y_max = y_max - 1000 > y_min and y_max - 1000 or y_max,
y_min = y_min,
flags = 'all_floors',
decoration = {
'everness:marker'
},
})
Everness:register_decoration({
name = 'everness:crystal_forest_under_crystal_sphere_cluster',
deco_type = 'simple',
place_on = {
'everness:crystal_cave_dirt_with_moss',
'everness:crystal_moss_block'
},
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.0005,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = asuna.features.cave.crystal_forest,
y_max = y_max - 1500 > y_min and y_max - 1500 or y_max,
y_min = y_min,
flags = 'all_floors',
decoration = {
'everness:marker'
},
})
Everness:register_decoration({
name = 'everness:crystal_forest_under_crystal_cyan',
deco_type = 'simple',
place_on = {
'everness:crystal_cave_dirt_with_moss',
'everness:crystal_moss_block'
},
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.02,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.cave.crystal_forest,
y_max = y_max,
y_min = y_min,
decoration = {
'everness:crystal_cyan',
'everness:crystal_purple',
'everness:crystal_orange'
},
flags = 'all_floors',
param2 = 1
})
Everness:register_decoration({
name = 'everness:crystal_forest_under_twisted_crystal_grass',
deco_type = 'simple',
place_on = {
'everness:crystal_cave_dirt_with_moss',
'everness:crystal_moss_block'
},
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.2,
spread = { x = 100, y = 100, z = 100 },
seed = 801,
octaves = 3,
persist = 0.7
},
biomes = asuna.features.cave.crystal_forest,
y_max = y_max - 500 > y_min and y_max - 500 or y_max,
y_min = y_min,
decoration = 'everness:twisted_crystal_grass',
flags = 'all_floors',
param2 = 40
})
Everness:register_decoration({
name = 'everness:crystal_forest_under_crystal_cyan_ceiling',
deco_type = 'simple',
place_on = { 'default:stone' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.02,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.cave.crystal_forest,
y_max = y_max,
y_min = y_min,
decoration = {
'everness:crystal_cyan',
'everness:crystal_purple',
'everness:crystal_orange'
},
flags = 'all_ceilings',
})
--
-- On Generated
--
local biome_id_everness_crystal_forest_under = {}
for _,biome in ipairs(asuna.features.cave.crystal_forest) do
table.insert(biome_id_everness_crystal_forest_under,minetest.get_biome_id(biome))
end
local deco_id_crystal_forest_under_crystal_cluster = minetest.get_decoration_id('everness:crystal_forest_under_crystal_cluster')
local deco_id_crystal_forest_under_crystal_sphere_cluster = minetest.get_decoration_id('everness:crystal_forest_under_crystal_sphere_cluster')
-- `minetest.read_schematic` here so we don't cache the schem file, otherwise `replacements` will not work
local schem_crystal_cluster = minetest.read_schematic(minetest.get_modpath('everness') .. '/schematics/everness_crystal_orange_cluster.mts', {})
local crystal_cluster_size = { x = 8, y = 4, z = 7}
local crystal_cluster_size_x = math.round(crystal_cluster_size.x / 2)
local crystal_cluster_size_z = math.round(crystal_cluster_size.z / 2)
local crystal_cluster_safe_volume = (crystal_cluster_size.x * crystal_cluster_size.y * crystal_cluster_size.z) / 2
local crystal_cluster_place_on = minetest.registered_decorations['everness:crystal_forest_under_crystal_cluster'].place_on
crystal_cluster_place_on = type(crystal_cluster_place_on) == 'string' and { crystal_cluster_place_on } or crystal_cluster_place_on
-- `minetest.read_schematic` here so we don't cache the schem file, otherwise `replacements` will not work
local schem_crystal_sphere_cluster = minetest.read_schematic(minetest.get_modpath('everness') .. '/schematics/everness_crystal_purple_cluster.mts', {})
local crystal_sphere_cluster_size = { x = 20, y = 19, z = 19 }
local crystal_sphere_cluster_size_x = math.round(crystal_sphere_cluster_size.x / 2)
local crystal_sphere_cluster_size_z = math.round(crystal_sphere_cluster_size.z / 2)
local crystal_sphere_cluster_safe_volume = (crystal_sphere_cluster_size.x * crystal_sphere_cluster_size.y * crystal_sphere_cluster_size.z) / 2
local crystal_sphere_cluster_place_on = minetest.registered_decorations['everness:crystal_forest_under_crystal_sphere_cluster'].place_on
crystal_sphere_cluster_place_on = type(crystal_sphere_cluster_place_on) == 'string' and { crystal_sphere_cluster_place_on } or crystal_sphere_cluster_place_on
minetest.set_gen_notify({ decoration = true }, {
deco_id_crystal_forest_under_crystal_cluster,
deco_id_crystal_forest_under_crystal_sphere_cluster
})
Everness:add_to_queue_on_generated({
name = 'everness:crystal_forest_under',
can_run = function(biomemap)
for _,biome in ipairs(biome_id_everness_crystal_forest_under) do
if table.indexof(biomemap, biome) ~= -1 then
return true
end
end
return false
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
--
-- Crystal Cluster
--
for _, pos in ipairs(gennotify['decoration#' .. (deco_id_crystal_forest_under_crystal_cluster or '')] or {}) do
-- `pos` is position of the 'place_on' node
local marker_pos = vector.new(pos.x, pos.y + 1, pos.z)
local marker_node = minetest.get_node(marker_pos)
local place_on_node = minetest.get_node(pos)
if marker_node and marker_node.name == 'everness:marker' then
-- remove marker
minetest.remove_node(marker_pos)
if table.indexof(crystal_cluster_place_on, place_on_node.name) ~= -1 then
-- enough air to place structure ?
local positions = minetest.find_nodes_in_area(
vector.new(
pos.x - crystal_cluster_size_x,
pos.y,
pos.z - crystal_cluster_size_z
),
vector.new(
pos.x + crystal_cluster_size_x,
pos.y + crystal_cluster_size.y,
pos.z + crystal_cluster_size_z
),
{
'air'
},
true
)
local air = positions.air or {}
if #air > crystal_cluster_safe_volume then
local replacements
local rand_color
if rand:next(0, 100) < 25 then
local colors = { 'purple', 'cyan' }
rand_color = colors[rand:next(1, #colors)]
replacements = {
['everness:crystal_block_orange'] = 'everness:crystal_block_' .. rand_color,
['everness:crystal_orange'] = 'everness:crystal_' .. rand_color
}
end
minetest.place_schematic_on_vmanip(
vm,
vector.new(marker_pos.x, marker_pos.y, marker_pos.z),
schem_crystal_cluster,
'random',
replacements,
true,
'place_center_x, place_center_z'
)
-- minetest.log('action', '[Everness] Crystal Cluster ' .. (rand_color or 'orange') .. ' was placed at ' .. pos:to_string())
end
end
end
end
--
-- Crystal Sphere Cluster
--
for _, pos in ipairs(gennotify['decoration#' .. (deco_id_crystal_forest_under_crystal_sphere_cluster or '')] or {}) do
-- `pos` is position of the 'place_on' node
local marker_pos = vector.new(pos.x, pos.y + 1, pos.z)
local marker_node = minetest.get_node(marker_pos)
local place_on_node = minetest.get_node(pos)
local crystal_sphere_cluster_y_dis = rand:next(5, 9)
if marker_node and marker_node.name == 'everness:marker' then
-- remove marker
minetest.remove_node(marker_pos)
if table.indexof(crystal_sphere_cluster_place_on, place_on_node.name) ~= -1 then
-- enough air to place structure ?
local positions = minetest.find_nodes_in_area(
vector.new(
pos.x - crystal_sphere_cluster_size_x,
pos.y - crystal_sphere_cluster_y_dis,
pos.z - crystal_sphere_cluster_size_z
),
vector.new(
pos.x + crystal_sphere_cluster_size_x,
pos.y - crystal_sphere_cluster_y_dis + crystal_sphere_cluster_size.y,
pos.z + crystal_sphere_cluster_size_z
),
{
'air',
'everness:coral_tree',
'everness:crystal_block_orange',
'everness:crystal_block_purple',
'everness:crystal_block_cyan',
},
true
)
local air = positions.air or {}
local tree = positions['everness:coral_tree'] or {}
local block_orange = positions['everness:crystal_block_orange'] or {}
local block_purple = positions['everness:crystal_block_purple'] or {}
local block_cyan = positions['everness:crystal_block_cyan'] or {}
if
#air > crystal_sphere_cluster_safe_volume
-- do not overlap
and not (
#tree > 0
or #block_orange > 0
or #block_purple > 0
or #block_cyan > 0
)
then
local replacements
local rand_color
if rand:next(0, 100) < 25 then
local colors = { 'orange', 'cyan' }
rand_color = colors[rand:next(1, #colors)]
replacements = {
['everness:crystal_block_purple'] = 'everness:crystal_block_' .. rand_color,
['everness:crystal_purple'] = 'everness:crystal_' .. rand_color
}
end
minetest.place_schematic_on_vmanip(
vm,
vector.new(marker_pos.x, marker_pos.y - crystal_sphere_cluster_y_dis, marker_pos.z),
schem_crystal_sphere_cluster,
'random',
replacements,
true,
'place_center_x, place_center_z'
)
-- minetest.log('action', '[Everness] Crystal Sphere Cluster ' .. (rand_color or 'orange') .. ' was placed at ' .. pos:to_string())
end
end
end
end
end
})

View file

@ -0,0 +1,492 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_cursed_lands.y_max
local y_min = Everness.settings.biomes.everness_cursed_lands.y_min
-- Cursed Lands
Everness:register_biome({
name = 'everness:cursed_lands',
node_top = 'everness:dirt_with_cursed_grass',
depth_top = 1,
node_filler = 'everness:cursed_dirt',
depth_filler = 1,
node_riverbed = 'everness:cursed_dirt',
depth_riverbed = 2,
node_stone = 'everness:cursed_stone_carved',
node_dungeon = 'everness:cursed_brick',
node_dungeon_alt = 'everness:cursed_brick_with_growth',
node_dungeon_stair = 'stairs:stair_cursed_brick',
y_max = y_max,
y_min = y_min,
heat_point = 45,
humidity_point = 85,
})
--
-- Register ores
--
-- Stratum ores.
-- These obviously first.
Everness:register_ore({
ore_type = 'stratum',
ore = 'everness:cursed_stone',
wherein = { 'everness:cursed_stone_carved' },
clust_scarcity = 1,
y_max = (y_max - y_max) + 46,
y_min = (y_max - y_max) + 4,
noise_params = {
offset = 28,
scale = 16,
spread = { x = 128, y = 128, z = 128 },
seed = 90122,
octaves = 1,
},
stratum_thickness = 4,
biomes = { 'everness:cursed_lands' },
})
Everness:register_ore({
ore_type = 'stratum',
ore = 'everness:cursed_stone',
wherein = { 'everness:cursed_stone_carved' },
clust_scarcity = 1,
y_max = (y_max - y_max) + 42,
y_min = (y_max - y_max) + 6,
noise_params = {
offset = 24,
scale = 16,
spread = { x = 128, y = 128, z = 128 },
seed = 90122,
octaves = 1,
},
stratum_thickness = 2,
biomes = { 'everness:cursed_lands' },
})
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
-- Sand
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:cursed_sand',
wherein = { 'everness:cursed_stone_carved' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 2316,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:cursed_lands' }
})
-- Dirt
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:cursed_dirt',
wherein = { 'everness:cursed_stone_carved' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 766,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:cursed_lands' }
})
-- Mud
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:cursed_mud',
wherein = { 'everness:cursed_stone_carved' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 17676,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:cursed_lands' }
})
-- Scatter ores
-- Coal
Everness:register_ore({
ore_type = 'scatter',
ore = 'everness:cursed_stone_carved_with_coal',
wherein = 'everness:cursed_stone_carved',
clust_scarcity = 8 * 8 * 8,
clust_num_ores = 9,
clust_size = 3,
y_max = y_max,
y_min = y_min,
biomes = { 'everness:cursed_lands' }
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:cursed_lands_cursed_mud',
deco_type = 'simple',
place_on = { 'everness:dirt_with_cursed_grass', 'everness:cursed_dirt', 'everness:cursed_sand' },
place_offset_y = -1,
sidelen = 4,
noise_params = {
offset = -4,
scale = 4,
spread = { x = 50, y = 50, z = 50 },
seed = 7013,
octaves = 3,
persist = 0.7,
},
biomes = { 'everness:cursed_lands' },
y_max = y_max,
y_min = y_min,
flags = 'force_placement',
decoration = { 'everness:cursed_mud' },
})
Everness:register_decoration({
name = 'everness:cursed_lands_cemetery',
deco_type = 'schematic',
place_on = { 'everness:dirt_with_cursed_grass' },
sidelen = 8,
noise_params = {
offset = -0.0003,
scale = 0.0009,
spread = { x = 200, y = 200, z = 200 },
seed = 230,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:cursed_lands' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_cemetery.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
Everness:register_decoration({
name = 'everness:cursed_lands_ruins_1',
deco_type = 'schematic',
place_on = { 'everness:dirt_with_cursed_grass' },
sidelen = 8,
noise_params = {
offset = -0.0003,
scale = 0.0009,
spread = { x = 200, y = 200, z = 200 },
seed = 230,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:cursed_lands' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_ruins_1.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
local function register_red_castor_decoration(offset, scale, length)
Everness:register_decoration({
name = 'everness:cursed_lands_red_castor_' .. length,
deco_type = 'simple',
place_on = { 'everness:dirt_with_cursed_grass' },
sidelen = 16,
noise_params = {
offset = offset,
scale = scale,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:cursed_lands' },
y_max = y_max,
y_min = y_min,
decoration = 'everness:red_castor_' .. length,
})
end
-- Red Castor Grasses
register_red_castor_decoration(-0.03, 0.09, 4)
register_red_castor_decoration(-0.015, 0.075, 3)
register_red_castor_decoration(0, 0.06, 2)
register_red_castor_decoration(0.015, 0.045, 1)
Everness:register_decoration({
name = 'everness:cursed_lands_dry_tree',
deco_type = 'schematic',
place_on = {
'everness:dirt_with_cursed_grass',
'everness:cursed_dirt',
'everness:cursed_sand',
'everness:cursed_stone'
},
place_offset_y = 0,
sidelen = 16,
noise_params = {
offset = 0.0015,
scale = 0.0021,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:cursed_lands' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_dry_tree.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
Everness:register_decoration({
name = 'everness:cursed_lands_cursed_bush',
deco_type = 'schematic',
place_on = { 'everness:dirt_with_cursed_grass' },
sidelen = 16,
place_offset_y = 1,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = { 'everness:cursed_lands' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_cursed_bush.mts',
flags = 'place_center_x, place_center_z',
})
Everness:register_decoration({
name = 'everness:cursed_lands_ferns',
deco_type = "simple",
place_on = {
"everness:dirt_with_cursed_grass",
},
sidelen = 16,
fill_ratio = 0.2,
biomes = {"everness_cursed_lands"},
y_max = 31000,
y_min = 1,
decoration = {
"default:grass_1",
"default:fern_1",
},
})
Everness:register_decoration({
name = 'everness:cursed_lands_junglegrass',
deco_type = "simple",
place_on = {
"everness:dirt_with_cursed_grass",
},
sidelen = 16,
fill_ratio = 0.0075,
biomes = {"everness_cursed_lands"},
y_max = 31000,
y_min = 1,
decoration = {
"default:junglegrass",
},
})
Everness:register_decoration({
name = 'everness:cursed_lands_dry_shrub',
deco_type = "simple",
place_on = {
"everness:dirt_with_cursed_grass",
},
sidelen = 16,
fill_ratio = 0.0225,
biomes = {"everness_cursed_lands"},
y_max = 31000,
y_min = 1,
decoration = {
"default:dry_shrub",
},
})
Everness:register_decoration({
name = 'everness:cursed_lands_dry_tree_stumps',
deco_type = "simple",
place_on = {
"everness:dirt_with_cursed_grass",
},
sidelen = 16,
fill_ratio = 0.000175,
biomes = {"everness_cursed_lands"},
y_max = 31000,
y_min = 1,
decoration = {
"everness:dry_tree",
},
height = 2,
height_max = 4,
})
--
-- On Generated
--
local chance = 20
local disp = 16
local schem = minetest.get_modpath('everness') .. '/schematics/everness_haunted_house.mts'
local size = { x = 11, y = 22, z = 10 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
local y_dis = 1
local c_dirt_with_cursed_grass = minetest.get_content_id('everness:dirt_with_cursed_grass')
local biome_id_everness_cursed_lands = minetest.get_biome_id('everness:cursed_lands')
Everness:add_to_queue_on_generated({
name = 'everness:cursed_lands',
can_run = function(biomemap)
return table.indexof(biomemap, biome_id_everness_cursed_lands) ~= -1
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
local sidelength = maxp.x - minp.x + 1
local x_disp = rand:next(0, disp)
local z_disp = rand:next(0, disp)
shared_args.schem_positions = {}
for y = minp.y, maxp.y do
local vi = area:index(minp.x + sidelength / 2 + x_disp, y, minp.z + sidelength / 2 + z_disp)
if data[vi + area.ystride] == minetest.CONTENT_AIR
and data[vi] == c_dirt_with_cursed_grass
and rand:next(0, 100) < chance
then
local s_pos = area:position(vi)
--
-- Haunted House
--
-- add Y displacement
local schem_pos = vector.new(s_pos.x, s_pos.y - y_dis, s_pos.z)
-- ensure there are no trees in the area
local tree_positions = minetest.find_nodes_in_area(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
'group:tree',
'group:leaves',
}
)
if #tree_positions > 0 then
-- trees in the way
return
end
-- enough air to place structure ?
local air_positions = minetest.find_nodes_in_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
'air'
}
)
if #air_positions > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
shared_args.schem_positions.everness_haunted_house = shared_args.schem_positions.everness_haunted_house or {}
table.insert(shared_args.schem_positions.everness_haunted_house, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y - y_dis, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y - y_dis + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Haunted House was placed at ' .. schem_pos:to_string())
end
end
end
end,
after_write_to_map = function(shared_args)
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions > 0 then
Everness:populate_loot_chests(chest_positions)
end
end
end
end
end
})

View file

@ -0,0 +1,325 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_cursed_lands_deep_ocean.y_max
local y_min = Everness.settings.biomes.everness_cursed_lands_deep_ocean.y_min
-- Cursed Lands Deep Ocean
Everness:register_biome({
name = 'everness:cursed_lands_deep_ocean',
node_top = 'everness:cursed_lands_deep_ocean_sand',
depth_top = 1,
node_filler = 'everness:cursed_lands_deep_ocean_sand',
depth_filler = 3,
node_riverbed = 'everness:cursed_lands_deep_ocean_sand',
depth_riverbed = 2,
node_cave_liquid = 'mapgen_water_source',
node_dungeon = 'everness:cursed_lands_deep_ocean_sandstone_block',
node_dungeon_alt = 'everness:cursed_lands_deep_ocean_sandstone_brick',
node_dungeon_stair = 'stairs:stair_cursed_lands_deep_ocean_sandstone_block',
y_max = y_max,
y_min = y_min,
heat_point = 45,
humidity_point = 85,
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:forsaken_lands_deep_ocean_coral_alcyonacea',
deco_type = 'schematic',
place_on = { 'everness:cursed_lands_deep_ocean_sand' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
sidelen = 16,
fill_ratio = 0.002,
biomes = asuna.features.ocean.cursed_lands,
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_forsaken_lands_deep_ocean_coral_alcyonacea.mts',
flags = 'place_center_x, place_center_z, force_placement',
})
Everness:register_decoration({
name = 'everness:forsaken_lands_deep_ocean_coral_ostracod',
deco_type = 'schematic',
place_on = { 'everness:cursed_lands_deep_ocean_sand' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
sidelen = 16,
fill_ratio = 0.002,
biomes = asuna.features.ocean.cursed_lands,
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_forsaken_lands_deep_ocean_coral_ostracod.mts',
flags = 'place_center_x, place_center_z, force_placement',
})
Everness:register_decoration({
name = 'everness:forsaken_lands_deep_ocean_coral_octocurse',
deco_type = 'schematic',
place_on = { 'everness:cursed_lands_deep_ocean_sand' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
sidelen = 16,
fill_ratio = 0.002,
biomes = asuna.features.ocean.cursed_lands,
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_forsaken_lands_deep_ocean_coral_octocurse.mts',
flags = 'place_center_x, place_center_z, force_placement',
})
Everness:register_decoration({
name = 'everness:cursed_lands_deep_ocean_mud',
deco_type = 'simple',
place_on = { 'everness:cursed_lands_deep_ocean_sand' },
place_offset_y = -1,
sidelen = 4,
fill_ratio = 0.002,
biomes = asuna.features.ocean.cursed_lands,
y_max = y_max,
y_min = y_min,
flags = 'force_placement',
decoration = { 'everness:cursed_lands_deep_ocean_sand_with_crack' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
})
Everness:register_decoration({
name = 'everness:cursed_lands_deep_ocean_plants_1',
deco_type = 'simple',
place_on = { 'everness:cursed_lands_deep_ocean_sand' },
place_offset_y = -1,
sidelen = 4,
noise_params = {
offset = 0,
scale = 0.02,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.ocean.cursed_lands,
y_max = y_max,
y_min = y_min,
flags = 'force_placement',
decoration = { 'everness:cursed_lands_deep_ocean_coral_plant_anemone' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
})
Everness:register_decoration({
name = 'everness:cursed_lands_deep_ocean_plants_2',
deco_type = 'simple',
place_on = { 'everness:cursed_lands_deep_ocean_sand' },
place_offset_y = -1,
sidelen = 4,
noise_params = {
offset = -0.02,
scale = 0.04,
spread = { x = 200, y = 200, z = 200 },
seed = 436,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.ocean.cursed_lands,
y_max = y_max,
y_min = y_min,
flags = 'force_placement',
decoration = { 'everness:cursed_lands_deep_ocean_coral_plant_darkilluma' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
})
Everness:register_decoration({
name = 'everness:cursed_lands_deep_ocean_plants_3',
deco_type = 'simple',
place_on = { 'everness:cursed_lands_deep_ocean_sand' },
place_offset_y = -1,
sidelen = 4,
noise_params = {
offset = -0.02,
scale = 0.04,
spread = { x = 200, y = 200, z = 200 },
seed = 19822,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.ocean.cursed_lands,
y_max = y_max,
y_min = y_min,
flags = 'force_placement',
decoration = { 'everness:cursed_lands_deep_ocean_coral_plant_demon' },
spawn_by = 'mapgen_water_source',
num_spawn_by = 8,
})
--
-- On Generated
--
local c_water_source = minetest.get_content_id('mapgen_water_source')
local c_everness_cursed_lands_deep_ocean_sand = minetest.get_content_id('everness:cursed_lands_deep_ocean_sand')
local c_everness_cursed_lands_deep_ocean_coral_plant_anemone = minetest.get_content_id('everness:cursed_lands_deep_ocean_coral_plant_anemone')
local c_everness_cursed_lands_deep_ocean_coral_plant_darkilluma = minetest.get_content_id('everness:cursed_lands_deep_ocean_coral_plant_darkilluma')
local c_everness_cursed_lands_deep_ocean_coral_plant_demon = minetest.get_content_id('everness:cursed_lands_deep_ocean_coral_plant_demon')
local c_everness_cursed_lands_deep_ocean_coral_alcyonacea = minetest.get_content_id('everness:cursed_lands_deep_ocean_coral_alcyonacea')
local c_everness_cursed_lands_deep_ocean_coral_ostracod = minetest.get_content_id('everness:cursed_lands_deep_ocean_coral_ostracod')
local c_everness_cursed_lands_deep_ocean_coral_octocurse = minetest.get_content_id('everness:cursed_lands_deep_ocean_coral_octocurse')
-- Biome IDs
local biome_id_everness_cursed_lands_deep_ocean = {}
for _,biome in ipairs(asuna.features.ocean.cursed_lands) do
table.insert(biome_id_everness_cursed_lands_deep_ocean,minetest.get_biome_id(biome))
end
local chance = 30
local schem = minetest.get_modpath('everness') .. '/schematics/everness_cursed_lands_deep_ocean_skull.mts'
local size = { x = 10, y = 11, z = 11 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
Everness:add_to_queue_on_generated({
name = 'everness:cursed_lands_deep_ocean',
can_run = function(biomemap)
for _,biome in ipairs(biome_id_everness_cursed_lands_deep_ocean) do
if table.indexof(biomemap, biome) ~= -1 then
return true
end
end
return false
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
shared_args.schem_positions = {}
local schem_placed = false
if rand:next(0, 100) < chance then
for y = maxp.y, minp.y, -1 do
if schem_placed then
break
end
for z = minp.z, maxp.z do
if schem_placed then
break
end
for x = minp.x, maxp.x do
local vi = area:index(x, y, z)
if
data[vi] == c_everness_cursed_lands_deep_ocean_sand
and data[vi + area.ystride] == c_water_source
then
local s_pos = area:position(vi)
--
-- Cursed Lands Deep Ocean Skull
--
local schem_pos = vector.new(s_pos)
-- find floor big enough
local indexes = Everness.find_content_in_vm_area(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
c_everness_cursed_lands_deep_ocean_sand,
c_everness_cursed_lands_deep_ocean_coral_plant_anemone,
c_everness_cursed_lands_deep_ocean_coral_plant_darkilluma,
c_everness_cursed_lands_deep_ocean_coral_plant_demon,
c_everness_cursed_lands_deep_ocean_coral_alcyonacea,
c_everness_cursed_lands_deep_ocean_coral_ostracod,
c_everness_cursed_lands_deep_ocean_coral_octocurse
},
data,
area
)
if #indexes < size.x * size.z then
-- not enough space
return
end
-- enough water to place structure ?
local water_indexes = Everness.find_content_in_vm_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
c_water_source
},
data,
area
)
if #water_indexes > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
schem_placed = true
shared_args.schem_positions.everness_cursed_lands_deep_ocean_skull = shared_args.schem_positions.everness_cursed_lands_deep_ocean_skull or {}
table.insert(shared_args.schem_positions.everness_cursed_lands_deep_ocean_skull, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Cursed Lands Deep Ocean Skull was placed at ' .. schem_pos:to_string())
break
end
end
end
end
end
end
end,
after_write_to_map = function(shared_args)
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions > 0 then
Everness:populate_loot_chests(chest_positions)
end
end
end
end
end
})

View file

@ -0,0 +1,348 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_cursed_lands_dunes.y_max
local y_min = Everness.settings.biomes.everness_cursed_lands_dunes.y_min
-- Cursed Lands Dunes
Everness:register_biome({
name = 'everness:cursed_lands_dunes',
node_top = 'everness:cursed_sand',
depth_top = 1,
node_filler = 'everness:cursed_sand',
depth_filler = 3,
node_riverbed = 'everness:cursed_sand',
depth_riverbed = 2,
node_stone = 'everness:cursed_stone_carved',
node_dungeon = 'everness:cursed_sandstone_brick',
node_dungeon_alt = 'everness:cursed_sandstone_block',
node_dungeon_stair = 'stairs:stair_cursed_sandstone_brick',
vertical_blend = 1,
y_max = y_max,
y_min = y_min,
heat_point = 45,
humidity_point = 85,
})
--
-- Register ores
--
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
-- Sand
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:cursed_sand',
wherein = { 'everness:cursed_stone_carved' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 2316,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:cursed_lands_dunes' }
})
-- Dirt
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:cursed_dirt',
wherein = { 'everness:cursed_stone_carved' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 766,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:cursed_lands_dunes' }
})
-- Mud
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:cursed_mud',
wherein = { 'everness:cursed_stone_carved' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 17676,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:cursed_lands_dunes' }
})
-- Scatter ores
-- Coal
Everness:register_ore({
ore_type = 'scatter',
ore = 'everness:cursed_stone_carved_with_coal',
wherein = 'everness:cursed_stone_carved',
clust_scarcity = 8 * 8 * 8,
clust_num_ores = 9,
clust_size = 3,
y_max = y_max,
y_min = y_min,
biomes = { 'everness:cursed_lands_dunes' }
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:cursed_lands_dunes_dry_tree',
deco_type = 'schematic',
place_on = {
'everness:dirt_with_cursed_grass',
'everness:cursed_dirt',
'everness:cursed_sand',
'everness:cursed_stone'
},
place_offset_y = 0,
sidelen = 16,
noise_params = {
offset = 0.0015,
scale = 0.0021,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:cursed_lands_dunes' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_dry_tree.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
--
-- On Generated
--
local chance = 30
local chance_water = 10
local disp = 16
local water_level = tonumber(minetest.settings:get('water_level')) or 1
local schem_cursed_cabin = minetest.get_modpath('everness') .. '/schematics/everness_cursed_cabin.mts'
local size = { x = 7, y = 7, z = 12 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
local schem_ocean_island = minetest.get_modpath('everness') .. '/schematics/everness_cursed_lands_deep_ocean_island.mts'
local size_ocean_island = { x = 25, y = 23, z = 23 }
local size_x_ocean_island = math.round(size.x / 2)
local size_z_ocean_island = math.round(size.z / 2)
local y_dis_ocean_island = 7
local c_cursed_sand = minetest.get_content_id('everness:cursed_sand')
local c_water_source = minetest.get_content_id('mapgen_water_source')
local biome_id_everness_cursed_lands_dunes = minetest.get_biome_id('everness:cursed_lands_dunes')
Everness:add_to_queue_on_generated({
name = 'everness:cursed_lands_dunes',
can_run = function(biomemap)
return table.indexof(biomemap, biome_id_everness_cursed_lands_dunes) ~= -1
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
local sidelength = maxp.x - minp.x + 1
local x_disp = rand:next(0, disp)
local z_disp = rand:next(0, disp)
shared_args.schem_positions = {}
for y = minp.y, maxp.y do
local vi = area:index(minp.x + sidelength / 2 + x_disp, y, minp.z + sidelength / 2 + z_disp)
if data[vi + area.ystride] == minetest.CONTENT_AIR then
local s_pos = area:position(vi)
if data[vi] == c_cursed_sand
and rand:next(0, 100) < chance
then
--
-- Cursed Cabin
--
-- add Y displacement
local schem_pos = vector.new(s_pos.x, s_pos.y, s_pos.z)
-- find floor big enough
local positions = minetest.find_nodes_in_area_under_air(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
'everness:cursed_sand'
}
)
if #positions < size.x * size.z then
-- not enough space
return
end
-- enough air to place structure ?
local air_positions = minetest.find_nodes_in_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
'air'
}
)
if #air_positions > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem_cursed_cabin,
'random',
nil,
true,
'place_center_x, place_center_z'
)
shared_args.schem_positions.everness_cursed_cabin = shared_args.schem_positions.everness_cursed_cabin or {}
table.insert(shared_args.schem_positions.everness_cursed_cabin, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Cursed Cabin was placed at ' .. schem_pos:to_string())
end
end
if data[vi] == c_water_source
and rand:next(0, 100) < chance_water
-- Water Level
and water_level >= minp.y
and water_level <= maxp.y
then
--
-- Cursed Lands Deep Ocean Island
--
local schem_pos = vector.new(s_pos.x, s_pos.y - y_dis_ocean_island, s_pos.z)
-- find floor big enough
local indexes = Everness.find_content_in_vm_area(
vector.new(s_pos.x - size_x_ocean_island, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x_ocean_island, s_pos.y + 1, s_pos.z + size_z),
{
c_water_source,
minetest.CONTENT_AIR
},
data,
area
)
if #indexes < size_ocean_island.x * size_ocean_island.z then
-- not enough space
return
end
-- enough space to place structure ?
local space_indexes = Everness.find_content_in_vm_area(
vector.new(s_pos.x - size_x_ocean_island, s_pos.y, s_pos.z - size_z_ocean_island),
vector.new(s_pos.x + size_x_ocean_island, s_pos.y + size_ocean_island.y, s_pos.z + size_z_ocean_island),
{
c_water_source,
minetest.CONTENT_AIR
},
data,
area
)
if #space_indexes > (size_ocean_island.x * size_ocean_island.y * size_ocean_island.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem_ocean_island,
'random',
nil,
true,
'place_center_x, place_center_z'
)
shared_args.schem_positions.everness_cursed_lands_deep_ocean_island = shared_args.schem_positions.everness_cursed_lands_deep_ocean_island or {}
table.insert(shared_args.schem_positions.everness_cursed_lands_deep_ocean_island, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x_ocean_island, s_pos.y - y_dis_ocean_island, s_pos.z - size_z_ocean_island),
maxp = vector.new(s_pos.x + size_x_ocean_island, s_pos.y - y_dis_ocean_island + size_ocean_island.y, s_pos.z + size_z_ocean_island)
})
minetest.log('action', '[Everness] Cursed Lands Deep Ocean Island was placed at ' .. schem_pos:to_string())
end
end
end
end
end,
after_write_to_map = function(shared_args)
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions > 0 then
Everness:populate_loot_chests(chest_positions)
end
end
end
end
end
})

View file

@ -0,0 +1,213 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_cursed_lands_ocean.y_max
local y_min = Everness.settings.biomes.everness_cursed_lands_ocean.y_min
-- Cursed Lands Ocean
Everness:register_biome({
name = 'everness:cursed_lands_ocean',
node_top = 'everness:cursed_stone',
depth_top = 1,
node_filler = 'everness:cursed_stone',
depth_filler = 3,
node_riverbed = 'everness:cursed_stone',
depth_riverbed = 2,
node_stone = 'everness:cursed_stone_carved',
node_cave_liquid = 'mapgen_water_source',
node_dungeon = 'everness:cursed_lands_deep_ocean_sandstone_block',
node_dungeon_alt = 'everness:cursed_lands_deep_ocean_sandstone_brick',
node_dungeon_stair = 'stairs:stair_cursed_lands_deep_ocean_sandstone_block',
y_max = y_max,
y_min = y_min,
heat_point = 45,
humidity_point = 85,
})
--
-- Register ores
--
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
-- Clay
Everness:register_ore({
ore_type = 'blob',
ore = 'default:clay',
wherein = { 'everness:cursed_stone', 'everness:cursed_stone_carved' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = -316,
octaves = 1,
persist = 0.0
},
biomes = asuna.features.ocean.cursed_lands
})
-- Sand
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:cursed_sand',
wherein = { 'everness:cursed_stone', 'everness:cursed_stone_carved' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 2316,
octaves = 1,
persist = 0.0
},
biomes = asuna.features.ocean.cursed_lands
})
-- Dirt
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:cursed_dirt',
wherein = { 'everness:cursed_stone', 'everness:cursed_stone_carved' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 766,
octaves = 1,
persist = 0.0
},
biomes = asuna.features.ocean.cursed_lands
})
-- Mud
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:cursed_mud',
wherein = { 'everness:cursed_stone', 'everness:cursed_stone_carved' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 17676,
octaves = 1,
persist = 0.0
},
biomes = asuna.features.ocean.cursed_lands
})
-- Scatter ores
-- Coal
Everness:register_ore({
ore_type = 'scatter',
ore = 'everness:cursed_stone_carved_with_coal',
wherein = 'everness:cursed_stone_carved',
clust_scarcity = 8 * 8 * 8,
clust_num_ores = 9,
clust_size = 3,
y_max = y_max,
y_min = y_min,
biomes = asuna.features.ocean.cursed_lands
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:cursed_lands_ocean_dry_tree',
deco_type = 'schematic',
place_on = {
'everness:dirt_with_cursed_grass',
'everness:cursed_dirt',
'everness:cursed_sand',
'everness:cursed_stone'
},
place_offset_y = 0,
sidelen = 16,
noise_params = {
offset = 0.0015,
scale = 0.0021,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = asuna.features.ocean.cursed_lands,
y_max = y_max,
y_min = y_max - (y_max + 1),
schematic = minetest.get_modpath('everness') .. '/schematics/everness_dry_tree.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
-- Spine Kelp
Everness:register_decoration({
name = 'everness:sand_with_spine_kelp',
deco_type = 'simple',
place_on = { 'everness:cursed_stone' },
place_offset_y = -1,
sidelen = 16,
noise_params = {
offset = -0.04,
scale = 0.1,
spread = { x = 200, y = 200, z = 200 },
seed = 87112,
octaves = 3,
persist = 0.7
},
biomes = asuna.features.ocean.cursed_lands,
y_max = y_max - (y_max + 5),
y_min = y_max - (y_max + 10),
flags = 'force_placement',
decoration = {
'everness:sand_with_spine_kelp',
'everness:coral_skeleton'
},
param2 = 48,
param2_max = 96,
})

View file

@ -0,0 +1,293 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_cursed_lands_swamp.y_max
local y_min = Everness.settings.biomes.everness_cursed_lands_swamp.y_min
-- Cursed Lands Swamp
Everness:register_biome({
name = 'everness:cursed_lands_swamp',
node_top = 'everness:cursed_stone',
depth_top = 1,
node_filler = 'everness:cursed_stone',
depth_filler = 3,
node_riverbed = 'everness:cursed_stone',
depth_riverbed = 2,
node_stone = 'everness:cursed_stone_carved',
node_dungeon = 'everness:cursed_sandstone_brick',
node_dungeon_alt = 'everness:cursed_sandstone_block',
node_dungeon_stair = 'stairs:stair_cursed_sandstone_brick',
y_max = y_max,
y_min = y_min,
heat_point = 45,
humidity_point = 85,
})
--
-- Register ores
--
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
-- Sand
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:cursed_sand',
wherein = { 'everness:cursed_stone_carved' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 2316,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:cursed_lands_swamp' }
})
-- Dirt
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:cursed_dirt',
wherein = { 'everness:cursed_stone_carved' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 766,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:cursed_lands_swamp' }
})
-- Mud
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:cursed_mud',
wherein = { 'everness:cursed_stone_carved' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 17676,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:cursed_lands_swamp' }
})
-- Scatter ores
-- Coal
Everness:register_ore({
ore_type = 'scatter',
ore = 'everness:cursed_stone_carved_with_coal',
wherein = 'everness:cursed_stone_carved',
clust_scarcity = 8 * 8 * 8,
clust_num_ores = 9,
clust_size = 3,
y_max = y_max,
y_min = y_min,
biomes = { 'everness:cursed_lands_swamp' }
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:cursed_lands_swamp_dry_tree',
deco_type = 'schematic',
place_on = { 'everness:cursed_stone' },
place_offset_y = 0,
sidelen = 16,
-- Noise tuned to place swamp trees where papyrus is absent
noise_params = {
offset = 0.0,
scale = -0.1,
spread = { x = 200, y = 200, z = 200 },
seed = 354,
octaves = 1,
persist = 0.5
},
biomes = { 'everness:cursed_lands_swamp' },
y_max = y_min,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_dry_tree.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
Everness:register_decoration({
name = 'everness:cursed_lands_swamp_marsh_grass',
deco_type = 'schematic',
place_on = { 'everness:cursed_stone' },
place_offset_y = 1,
sidelen = 16,
-- Noise tuned to place where papyrus is absent
noise_params = {
offset = 0.0,
scale = -0.1,
spread = { x = 200, y = 200, z = 200 },
seed = 354,
octaves = 1,
persist = 0.5
},
biomes = { 'everness:cursed_lands_swamp' },
y_max = y_max,
y_min = y_max,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_marsh_grass.mts',
})
--
-- On Generated
--
local chance = 30
local disp = 16
local schem = minetest.get_modpath('everness') .. '/schematics/everness_cursed_cabin.mts'
local size = { x = 7, y = 7, z = 12 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
local y_dis = -1
local c_cursed_stone = minetest.get_content_id('everness:cursed_stone')
local c_water_source = minetest.get_content_id('mapgen_water_source')
local biome_id_everness_cursed_lands_swamp = minetest.get_biome_id('everness:cursed_lands_swamp')
Everness:add_to_queue_on_generated({
name = 'everness:cursed_lands_swamp',
can_run = function(biomemap)
return table.indexof(biomemap, biome_id_everness_cursed_lands_swamp) ~= -1
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
local sidelength = maxp.x - minp.x + 1
local x_disp = rand:next(0, disp)
local z_disp = rand:next(0, disp)
shared_args.schem_positions = {}
for y = minp.y, maxp.y do
local vi = area:index(minp.x + sidelength / 2 + x_disp, y, minp.z + sidelength / 2 + z_disp)
if data[vi + area.ystride] == c_water_source
and data[vi] == c_cursed_stone
and rand:next(0, 100) < chance
then
local s_pos = area:position(vi)
--
-- Cursed Cabin
--
-- add Y displacement
local schem_pos = vector.new(s_pos.x, s_pos.y - y_dis, s_pos.z)
-- find floor big enough
local positions = minetest.find_nodes_in_area_under_air(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
'everness:cursed_stone',
'mapgen_water_source'
}
)
if #positions < size.x * size.z then
-- not enough space
return
end
-- enough air to place structure ?
local air_positions = minetest.find_nodes_in_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
'air',
'mapgen_water_source'
}
)
if #air_positions > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
shared_args.schem_positions.everness_cursed_cabin = shared_args.schem_positions.everness_cursed_cabin or {}
table.insert(shared_args.schem_positions.everness_cursed_cabin, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y - y_dis, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y - y_dis + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Cursed Cabin was placed at ' .. schem_pos:to_string())
end
end
end
end,
after_write_to_map = function(shared_args)
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions > 0 then
Everness:populate_loot_chests(chest_positions)
end
end
end
end
end
})

View file

@ -0,0 +1,304 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_cursed_lands_under.y_max
local y_min = Everness.settings.biomes.everness_cursed_lands_under.y_min
-- Cursed Lands Under
Everness:register_biome({
name = 'everness:cursed_lands_under',
node_cave_liquid = { 'mapgen_water_source', 'mapgen_lava_source' },
node_dungeon = 'everness:cursed_brick',
node_dungeon_alt = 'everness:cursed_brick_with_growth',
node_dungeon_stair = 'stairs:stair_cursed_brick',
y_max = y_max,
y_min = y_min,
heat_point = 45,
humidity_point = 85,
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:cursed_lands_under_soul_sandstone_floors',
deco_type = 'simple',
place_on = { 'default:stone' },
place_offset_y = -1,
sidelen = 16,
fill_ratio = 10,
biomes = asuna.features.cave.cursed_lands,
y_max = y_max,
y_min = y_min,
flags = 'all_floors, force_placement',
decoration = {
'everness:soul_sandstone_veined'
},
})
Everness:register_decoration({
name = 'everness:cursed_lands_under_mold_stone_ceilings',
deco_type = 'simple',
place_on = { 'default:stone' },
sidelen = 16,
fill_ratio = 0.4,
biomes = asuna.features.cave.cursed_lands,
y_max = y_max,
y_min = y_min,
flags = 'all_ceilings',
decoration = {
'everness:moss_block'
},
})
Everness:register_decoration({
name = 'everness:cursed_lands_under_skull_with_candle',
deco_type = 'simple',
place_on = { 'everness:soul_sandstone_veined' },
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = asuna.features.cave.cursed_lands,
y_max = y_max - 1000 > y_min and y_max - 1000 or y_max,
y_min = y_min,
decoration = 'everness:skull_with_candle',
flags = 'all_floors',
param2_max = 3
})
Everness:register_decoration({
name = 'everness:cursed_lands_under_vines',
deco_type = 'simple',
place_on = { 'everness:moss_block' },
sidelen = 16,
fill_ratio = 0.09,
biomes = asuna.features.cave.cursed_lands,
param2 = 8,
decoration = {
'everness:eye_vine_1',
'everness:eye_vine_2',
'everness:ivis_vine_1',
'everness:ivis_vine_2'
},
y_max = y_max,
y_min = y_min,
flags = 'all_ceilings',
spawn_by = 'air',
num_spawn_by = 8
})
Everness:register_decoration({
name = 'everness:cursed_lands_under_pumpkin_lantern',
deco_type = 'simple',
place_on = { 'everness:soul_sandstone_veined' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.002,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = asuna.features.cave.cursed_lands,
y_max = y_max - 500 > y_min and y_max - 500 or y_max,
y_min = y_min,
decoration = { 'everness:cursed_pumpkin_lantern' },
flags = 'all_floors',
param2_max = 3
})
Everness:register_decoration({
name = 'everness:cursed_lands_under_cursed_dream_tree',
deco_type = 'simple',
place_on = { 'everness:soul_sandstone_veined' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.002,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:cursed_lands_under' },
y_max = y_max - 1000,
y_min = y_min,
flags = 'all_floors',
decoration = {
'everness:marker'
},
})
Everness:register_decoration({
name = 'everness:cursed_lands_under_plants',
deco_type = 'simple',
place_on = { 'everness:soul_sandstone_veined' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.02,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.cave.cursed_lands,
y_max = y_max,
y_min = y_min,
decoration = {
'everness:egg_plant',
'everness:ngrass_1',
'everness:ngrass_2',
},
flags = 'all_floors',
})
Everness:register_decoration({
name = 'everness:cursed_lands_under_ivis_moss',
deco_type = 'simple',
place_on = { 'everness:soul_sandstone_veined' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.02,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.cave.cursed_lands,
y_max = y_max,
y_min = y_min,
decoration = {
'everness:ivis_moss',
},
flags = 'all_floors',
param2 = 3
})
Everness:register_decoration({
name = 'everness:cursed_lands_under_cobweb_floors',
deco_type = 'simple',
place_on = { 'everness:soul_sandstone_veined' },
sidelen = 16,
fill_ratio = 0.02,
biomes = asuna.features.cave.cursed_lands,
y_max = y_max,
y_min = y_min,
decoration = { 'everness:cobweb' },
flags = 'all_floors'
})
--
-- On Generated
--
local biome_id_everness_cursed_lands_under = {}
for _,biome in ipairs(asuna.features.cave.cursed_lands) do
table.insert(biome_id_everness_cursed_lands_under,minetest.get_biome_id(biome))
end
local deco_id_cursed_lands_under_cursed_dream_tree = minetest.get_decoration_id('everness:cursed_lands_under_cursed_dream_tree')
local schem_cursed_dream_tree = minetest.get_modpath('everness') .. '/schematics/everness_cursed_dream_tree.mts'
local cursed_dream_tree_size = { x = 17, y = 15, z = 17 }
local cursed_dream_tree_size_x = math.round(cursed_dream_tree_size.x / 2)
local cursed_dream_tree_size_z = math.round(cursed_dream_tree_size.z / 2)
local cursed_dream_tree_safe_volume = (cursed_dream_tree_size.x * cursed_dream_tree_size.y * cursed_dream_tree_size.z) / 1.5
local cursed_dream_tree_y_dis = 1
local cursed_dream_tree_place_on = minetest.registered_decorations['everness:cursed_lands_under_cursed_dream_tree'].place_on
cursed_dream_tree_place_on = type(cursed_dream_tree_place_on) == 'string' and { cursed_dream_tree_place_on } or cursed_dream_tree_place_on
minetest.set_gen_notify({ decoration = true }, { deco_id_cursed_lands_under_cursed_dream_tree })
Everness:add_to_queue_on_generated({
name = 'everness:cursed_lands_under',
can_run = function(biomemap)
for _,biome in ipairs(biome_id_everness_cursed_lands_under) do
if table.indexof(biomemap, biome) ~= -1 then
return true
end
end
return false
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
--
-- Cursed Dream Tree
--
for _, pos in ipairs(gennotify['decoration#' .. (deco_id_cursed_lands_under_cursed_dream_tree or '')] or {}) do
-- `pos` is position of the 'place_on' node
local marker_pos = vector.new(pos.x, pos.y + 1, pos.z)
local marker_node = minetest.get_node(marker_pos)
local place_on_node = minetest.get_node(pos)
if marker_node and marker_node.name == 'everness:marker' then
-- remove marker
minetest.remove_node(marker_pos)
if table.indexof(cursed_dream_tree_place_on, place_on_node.name) ~= -1 then
-- enough air to place structure ?
local positions = minetest.find_nodes_in_area(
vector.new(
pos.x - cursed_dream_tree_size_x,
pos.y - cursed_dream_tree_y_dis,
pos.z - cursed_dream_tree_size_z
),
vector.new(
pos.x + cursed_dream_tree_size_x,
pos.y - cursed_dream_tree_y_dis + cursed_dream_tree_size.y,
pos.z + cursed_dream_tree_size_z
),
{
'air',
'everness:dry_tree'
},
true
)
local air = positions.air or {}
local tree = positions['everness:dry_tree'] or {}
if #air > cursed_dream_tree_safe_volume and #tree <= 1 then
minetest.place_schematic_on_vmanip(
vm,
vector.new(marker_pos.x, marker_pos.y - cursed_dream_tree_y_dis, marker_pos.z),
schem_cursed_dream_tree,
'random',
nil,
true,
'place_center_x, place_center_z'
)
-- minetest.log('action', '[Everness] Cursed Dream Tree was placed at ' .. pos:to_string())
end
end
end
end
end
})

View file

@ -0,0 +1,304 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_forsaken_desert.y_max
local y_min = Everness.settings.biomes.everness_forsaken_desert.y_min
-- Forsaken Desert
Everness:register_biome({
name = 'everness:forsaken_desert',
node_top = 'everness:forsaken_desert_sand',
depth_top = 1,
node_stone = 'everness:forsaken_desert_stone',
node_filler = 'everness:forsaken_desert_sand',
depth_filler = 1,
node_riverbed = 'everness:forsaken_desert_sand',
depth_riverbed = 2,
node_dungeon = 'everness:forsaken_desert_brick',
node_dungeon_alt = 'everness:forsaken_desert_brick_red',
node_dungeon_stair = 'stairs:stair_forsaken_desert_brick',
y_max = y_max,
y_min = y_min,
heat_point = 100,
humidity_point = 30,
})
--
-- Register ores
--
-- Stratum ores.
-- These obviously first.
Everness:register_ore({
ore_type = 'stratum',
ore = 'everness:forsaken_desert_cobble',
wherein = { 'everness:forsaken_desert_stone' },
clust_scarcity = 1,
y_max = (y_max - y_max) + 46,
y_min = (y_max - y_max) + 4,
noise_params = {
offset = 28,
scale = 16,
spread = { x = 128, y = 128, z = 128 },
seed = 90122,
octaves = 1,
},
stratum_thickness = 4,
biomes = { 'everness:forsaken_desert' },
})
Everness:register_ore({
ore_type = 'stratum',
ore = 'everness:forsaken_desert_cobble',
wherein = { 'everness:forsaken_desert_stone' },
clust_scarcity = 1,
y_max = (y_max - y_max) + 42,
y_min = (y_max - y_max) + 6,
noise_params = {
offset = 24,
scale = 16,
spread = { x = 128, y = 128, z = 128 },
seed = 90122,
octaves = 1,
},
stratum_thickness = 2,
biomes = { 'everness:forsaken_desert' },
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:forsaken_desert_sand_plants_1',
deco_type = 'simple',
place_on = { 'everness:forsaken_desert_sand' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.02,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:forsaken_desert' },
y_max = y_max,
y_min = y_min,
decoration = { 'everness:forsaken_desert_plant_1' },
param2 = 11,
})
Everness:register_decoration({
name = 'everness:forsaken_desert_sand_plants_2',
deco_type = 'simple',
place_on = { 'everness:forsaken_desert_sand' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.02,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:forsaken_desert' },
y_max = y_max,
y_min = y_min,
decoration = {
'everness:forsaken_desert_plant_2',
'everness:forsaken_desert_plant_3'
},
param2 = 8,
})
Everness:register_decoration({
name = 'everness:forsaken_desert_termite_nest',
deco_type = 'schematic',
place_on = { 'everness:forsaken_desert_sand' },
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = { 'everness:forsaken_desert' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_termite_nest.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
Everness:register_decoration({
name = 'everness:forsaken_desert_hollow_tree',
deco_type = 'schematic',
place_on = { 'everness:forsaken_desert_sand' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.002,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:forsaken_desert' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_hollow_tree.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
Everness:register_decoration({
name = 'everness:forsaken_desert_hollow_tree_large',
deco_type = 'schematic',
place_on = { 'everness:forsaken_desert_sand' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.001,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:forsaken_desert' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_hollow_tree_large.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
--
-- On Generated
--
local chance = 20
local disp = 16
local schem = minetest.get_modpath('everness') .. '/schematics/everness_forsaken_desert_temple.mts'
local size = { x = 9, y = 16, z = 9 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
local c_forsaken_desert_sand = minetest.get_content_id('everness:forsaken_desert_sand')
local biome_id_everness_forsaken_desert = minetest.get_biome_id('everness:forsaken_desert')
Everness:add_to_queue_on_generated({
name = 'everness:forsaken_desert',
can_run = function(biomemap)
return table.indexof(biomemap, biome_id_everness_forsaken_desert) ~= -1
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
local sidelength = maxp.x - minp.x + 1
local x_disp = rand:next(0, disp)
local z_disp = rand:next(0, disp)
shared_args.schem_positions = {}
for y = minp.y, maxp.y do
local vi = area:index(minp.x + sidelength / 2 + x_disp, y, minp.z + sidelength / 2 + z_disp)
if data[vi + area.ystride] == minetest.CONTENT_AIR
and data[vi] == c_forsaken_desert_sand
and rand:next(0, 100) < chance
then
local s_pos = area:position(vi)
--
-- Forsaken Desert Temple
--
local schem_pos = vector.new(s_pos.x, s_pos.y, s_pos.z)
-- find floor big enough
local positions = minetest.find_nodes_in_area_under_air(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
'everness:forsaken_desert_sand'
}
)
if #positions < size.x * size.z then
-- not enough space
return
end
-- enough air to place structure ?
local air_positions = minetest.find_nodes_in_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
'air'
}
)
if #air_positions > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
shared_args.schem_positions.everness_forsaken_desert_temple = shared_args.schem_positions.everness_forsaken_desert_temple or {}
table.insert(shared_args.schem_positions.everness_forsaken_desert_temple, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Forsaken Desert Temple was placed at ' .. schem_pos:to_string())
end
end
end
end,
after_write_to_map = function(shared_args)
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions > 0 then
Everness:populate_loot_chests(chest_positions)
end
end
end
end
end
})

View file

@ -0,0 +1,155 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_forsaken_desert_ocean.y_max
local y_min = Everness.settings.biomes.everness_forsaken_desert_ocean.y_min
-- Forsaken Desert Ocean
Everness:register_biome({
name = 'everness:forsaken_desert_ocean',
node_top = 'everness:dry_ocean_dirt',
depth_top = 1,
node_stone = 'everness:forsaken_desert_stone',
node_filler = 'everness:dry_ocean_dirt',
depth_filler = 3,
node_water_top = 'everness:dry_ocean_dirt',
depth_water_top = 10,
node_river_water = 'everness:dry_ocean_dirt',
node_riverbed = 'everness:dry_ocean_dirt',
depth_riverbed = 2,
node_dungeon = 'everness:forsaken_desert_brick',
node_dungeon_alt = 'everness:forsaken_desert_brick_red',
node_dungeon_stair = 'stairs:stair_forsaken_desert_brick',
y_max = y_max,
y_min = y_min,
heat_point = 100,
humidity_point = 30,
})
--
-- On Generated
--
local chance = 20
local disp = 16
local schem = minetest.get_modpath('everness') .. '/schematics/everness_forsaken_desert_temple_3.mts'
local size = { x = 11, y = 13, z = 13 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
local y_dis = -1
local c_dry_ocean_dirt = minetest.get_content_id('everness:dry_ocean_dirt')
local biome_id_everness_forsaken_desert_ocean = minetest.get_biome_id('everness:forsaken_desert_ocean')
Everness:add_to_queue_on_generated({
name = 'everness:forsaken_desert_ocean',
can_run = function(biomemap)
return table.indexof(biomemap, biome_id_everness_forsaken_desert_ocean) ~= -1
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
local sidelength = maxp.x - minp.x + 1
local x_disp = rand:next(0, disp)
local z_disp = rand:next(0, disp)
shared_args.schem_positions = {}
for y = minp.y, maxp.y do
local vi = area:index(minp.x + sidelength / 2 + x_disp, y, minp.z + sidelength / 2 + z_disp)
if data[vi + area.ystride] == minetest.CONTENT_AIR
and data[vi] == c_dry_ocean_dirt
and rand:next(0, 100) < chance
then
local s_pos = area:position(vi)
--
-- Forsaken Desert Temple 3
--
local schem_pos = vector.new(s_pos.x, s_pos.y - y_dis, s_pos.z)
-- find floor big enough
local positions = minetest.find_nodes_in_area_under_air(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
'everness:dry_ocean_dirt'
}
)
if #positions < size.x * size.z then
-- not enough space
return
end
-- enough air to place structure ?
local air_positions = minetest.find_nodes_in_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
'air'
}
)
if #air_positions > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
shared_args.schem_positions.everness_forsaken_desert_temple_3 = shared_args.schem_positions.everness_forsaken_desert_temple_3 or {}
table.insert(shared_args.schem_positions.everness_forsaken_desert_temple_3, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y - y_dis, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y - y_dis + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Forsaken Desert Temple 3 was placed at ' .. schem_pos:to_string())
end
end
end
end,
after_write_to_map = function(shared_args)
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions > 0 then
Everness:populate_loot_chests(chest_positions)
end
end
end
end
end
})

View file

@ -0,0 +1,338 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_forsaken_desert_under.y_max
local y_min = Everness.settings.biomes.everness_forsaken_desert_under.y_min
-- Forsaken Desert Under
Everness:register_biome({
name = 'everness:forsaken_desert_under',
node_cave_liquid = { 'mapgen_water_source', 'mapgen_lava_source' },
node_dungeon = 'default:cobble',
node_dungeon_alt = 'default:mossycobble',
node_dungeon_stair = 'stairs:stair_cobble',
y_max = y_max,
y_min = y_min,
heat_point = 100,
humidity_point = 30,
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:forsaken_desert_under_floors',
deco_type = 'simple',
place_on = { 'default:stone' },
sidelen = 16,
place_offset_y = -1,
fill_ratio = 10,
biomes = asuna.features.cave.forsaken_desert,
y_max = y_max,
y_min = y_min,
flags = 'all_floors, force_placement',
decoration = {
'everness:forsaken_desert_sand'
},
})
Everness:register_decoration({
name = 'everness:forsaken_desert_under_floors_chiseled',
deco_type = 'simple',
place_on = { 'everness:forsaken_desert_sand' },
sidelen = 16,
place_offset_y = -1,
fill_ratio = 0.2,
biomes = asuna.features.cave.forsaken_desert,
y_max = y_max - 500 > y_min and y_max - 500 or y_max,
y_min = y_min,
decoration = {
'everness:forsaken_desert_chiseled_stone',
'everness:forsaken_desert_brick',
'everness:forsaken_desert_brick_red',
'everness:forsaken_desert_engraved_stone',
'everness:forsaken_desert_cobble_red',
'everness:forsaken_desert_cobble',
},
flags = 'all_floors, force_placement'
})
Everness:register_decoration({
name = 'everness:forsaken_desert_under_ceilings',
deco_type = 'simple',
place_on = { 'everness:forsaken_desert_sand' },
sidelen = 16,
fill_ratio = 0.4,
biomes = asuna.features.cave.forsaken_desert,
y_max = y_max,
y_min = y_min,
flags = 'all_ceilings',
decoration = {
'everness:moss_block'
},
})
Everness:register_decoration({
name = 'everness:forsaken_desert_under_cactus_blue',
deco_type = 'simple',
place_on = { 'everness:forsaken_desert_sand' },
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = asuna.features.cave.forsaken_desert,
y_max = y_max - 500 > y_min and y_max - 500 or y_max,
y_min = y_min,
decoration = 'everness:cactus_blue',
height = 2,
height_max = 6,
flags = 'all_floors'
})
Everness:register_decoration({
name = 'everness:forsaken_desert_under_cave_barrel_cactus',
deco_type = 'simple',
place_on = {
'everness:forsaken_desert_sand',
'everness:forsaken_desert_chiseled_stone',
'everness:forsaken_desert_brick',
'everness:forsaken_desert_engraved_stone'
},
sidelen = 16,
fill_ratio = 0.005,
biomes = asuna.features.cave.forsaken_desert,
y_max = y_max - 250 > y_min and y_max - 250 or y_max,
y_min = y_min,
decoration = {
'everness:cave_barrel_cactus',
'everness:venus_trap'
},
flags = 'all_floors',
param2_max = 3
})
Everness:register_decoration({
name = 'everness:forsaken_desert_under_cave_illumi_root',
deco_type = 'simple',
place_on = {
'everness:forsaken_desert_sand',
'everness:forsaken_desert_chiseled_stone',
'everness:forsaken_desert_brick',
'everness:forsaken_desert_engraved_stone'
},
sidelen = 16,
fill_ratio = 0.005,
biomes = asuna.features.cave.forsaken_desert,
y_max = y_max,
y_min = y_min,
decoration = { 'everness:illumi_root' },
flags = 'all_floors'
})
Everness:register_decoration({
name = 'everness:forsaken_desert_under_vines',
deco_type = 'simple',
place_on = { 'everness:moss_block' },
sidelen = 16,
fill_ratio = 0.09,
biomes = asuna.features.cave.forsaken_desert,
param2 = 8,
decoration = {
'everness:dense_vine_1',
'everness:dense_vine_2'
},
y_max = y_max,
y_min = y_min,
flags = 'all_ceilings',
spawn_by = 'air',
num_spawn_by = 8
})
Everness:register_decoration({
name = 'everness:forsaken_desert_under_hollow_tree',
deco_type = 'simple',
place_on = { 'everness:forsaken_desert_sand' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.006,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = asuna.features.cave.forsaken_desert,
y_max = y_max,
y_min = y_min,
decoration = 'everness:hollow_tree',
height = 3,
height_max = 7,
flags = 'all_floors'
})
--
-- On Generated
--
local disp = 16
local chance = 20
local schem = minetest.get_modpath('everness') .. '/schematics/everness_forsaken_desert_temple_2.mts'
local size = { x = 16, y = 17, z = 15 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
local c_forsaken_desert_sand = minetest.get_content_id('everness:forsaken_desert_sand')
local c_forsaken_desert_chiseled_stone = minetest.get_content_id('everness:forsaken_desert_chiseled_stone')
local c_forsaken_desert_brick = minetest.get_content_id('everness:forsaken_desert_brick')
local c_forsaken_desert_engraved_stone = minetest.get_content_id('everness:forsaken_desert_engraved_stone')
local biome_id_everness_forsaken_desert_under = {}
for _,biome in ipairs(asuna.features.cave.forsaken_desert) do
table.insert(biome_id_everness_forsaken_desert_under,minetest.get_biome_id(biome))
end
Everness:add_to_queue_on_generated({
name = 'everness:forsaken_desert_under',
can_run = function(biomemap)
for _,biome in ipairs(biome_id_everness_forsaken_desert_under) do
if table.indexof(biomemap, biome) ~= -1 then
return true
end
end
return false
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
local sidelength = maxp.x - minp.x + 1
local x_disp = rand:next(0, disp)
local z_disp = rand:next(0, disp)
shared_args.schem_positions = {}
for y = minp.y, maxp.y do
local vi = area:index(minp.x + sidelength / 2 + x_disp, y, minp.z + sidelength / 2 + z_disp)
if
(
data[vi] == c_forsaken_desert_sand
or data[vi] == c_forsaken_desert_chiseled_stone
or data[vi] == c_forsaken_desert_brick
or data[vi] == c_forsaken_desert_engraved_stone
)
and rand:next(0, 100) < chance
then
local s_pos = area:position(vi)
--
-- Forsaken Desert Temple 2
--
local schem_pos = vector.new(s_pos.x, s_pos.y, s_pos.z)
-- find floor big enough
local positions = minetest.find_nodes_in_area_under_air(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
'everness:forsaken_desert_sand',
'everness:forsaken_desert_chiseled_stone',
'everness:forsaken_desert_brick',
'everness:forsaken_desert_engraved_stone',
'group:stone',
'group:sand',
'group:everness_sand',
'default:gravel',
'default:stone_with_coal',
'default:stone_with_iron',
'default:stone_with_tin',
'default:stone_with_gold',
'default:stone_with_mese',
'default:stone_with_diamond',
'everness:cave_barrel_cactus',
'everness:venus_trap',
'group:flora',
'everness:quartz_ore',
'everness:stone_with_pyrite',
}
)
if #positions < size.x * size.z then
-- not enough space
return
end
-- enough air to place structure ?
local air_positions = minetest.find_nodes_in_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
'air'
}
)
if #air_positions > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
shared_args.schem_positions.everness_forsaken_desert_temple_2 = shared_args.schem_positions.everness_forsaken_desert_temple_2 or {}
table.insert(shared_args.schem_positions.everness_forsaken_desert_temple_2, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Forsaken Desert Temple 2 was placed at ' .. schem_pos:to_string())
end
end
end
end,
after_write_to_map = function(shared_args)
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions > 0 then
Everness:populate_loot_chests(chest_positions)
end
end
end
end
end
})

View file

@ -0,0 +1,368 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_forsaken_tundra.y_max
local y_min = Everness.settings.biomes.everness_forsaken_tundra.y_min
-- Forsaken Tundra
Everness:register_biome({
name = 'everness:forsaken_tundra',
node_top = 'everness:forsaken_tundra_dirt',
depth_top = 1,
node_stone = 'everness:forsaken_tundra_stone',
node_filler = 'everness:forsaken_tundra_dirt',
depth_filler = 1,
node_riverbed = 'everness:forsaken_tundra_beach_sand',
depth_riverbed = 2,
node_dungeon = 'everness:forsaken_tundra_cobble',
node_dungeon_alt = 'everness:forsaken_tundra_brick',
node_dungeon_stair = 'stairs:stair_forsaken_tundra_cobble',
y_max = y_max,
y_min = y_min,
heat_point = 10,
humidity_point = 10,
})
--
-- Register ores
--
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:sulfur_stone',
wherein = { 'default:stone', 'everness:forsaken_tundra_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = -316,
octaves = 1,
persist = 0.0
},
biomes = {'everness:forsaken_tundra' }
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:forsaken_tundra_volcanic_sulfur',
deco_type = 'simple',
place_on = { 'everness:forsaken_tundra_dirt' },
sidelen = 4,
noise_params = {
offset = -0.7,
scale = 4.0,
spread = { x = 16, y = 16, z = 16 },
seed = 513337,
octaves = 1,
persist = 0.0,
flags = 'absvalue, eased'
},
biomes = { 'everness:forsaken_tundra' },
y_max = y_max,
y_min = y_min,
decoration = { 'everness:volcanic_sulfur' },
place_offset_y = -1,
flags = 'force_placement',
})
Everness:register_decoration({
name = 'everness:forsaken_tundra_sulfur_stone',
deco_type = 'simple',
place_on = {
'everness:forsaken_tundra_dirt',
'everness:volcanic_sulfur'
},
sidelen = 4,
noise_params = {
offset = -4,
scale = 4,
spread = { x = 50, y = 50, z = 50 },
seed = 7013,
octaves = 3,
persist = 0.7,
},
biomes = { 'everness:forsaken_tundra' },
y_max = y_max,
y_min = y_min,
place_offset_y = -1,
flags = 'force_placement',
decoration = { 'everness:sulfur_stone' },
})
Everness:register_decoration({
name = 'everness:forsaken_tundra_dirt_with_grass',
deco_type = 'simple',
place_on = {
'everness:forsaken_tundra_dirt',
'everness:volcanic_sulfur'
},
sidelen = 4,
noise_params = {
offset = -0.8,
scale = 2.0,
spread = { x = 100, y = 100, z = 100 },
seed = 53995,
octaves = 3,
persist = 1.0
},
biomes = { 'everness:forsaken_tundra' },
y_max = y_max,
y_min = y_min,
decoration = 'everness:forsaken_tundra_dirt_with_grass',
place_offset_y = -1,
flags = 'force_placement',
})
Everness:register_decoration({
name = 'everness:forsaken_tundra_volcanic_sulfur_on_top_of_sulfur_stone',
deco_type = 'simple',
place_on = { 'everness:sulfur_stone' },
sidelen = 4,
noise_params = {
offset = -4,
scale = 4,
spread = { x = 50, y = 50, z = 50 },
seed = 7013,
octaves = 3,
persist = 0.7,
},
biomes = { 'everness:forsaken_tundra' },
y_max = y_max,
y_min = y_min,
decoration = { 'everness:volcanic_sulfur' },
})
Everness:register_decoration({
name = 'everness:forsaken_tundra_rocks',
deco_type = 'schematic',
place_on = { 'everness:forsaken_tundra_dirt', 'everness:forsaken_tundra_dirt_with_grass' },
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = { 'everness:forsaken_tundra' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_forsaken_tundra_rocks.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
})
Everness:register_decoration({
name = 'everness:forsaken_tundra_sulfur_volcano',
deco_type = 'schematic',
place_on = { 'everness:forsaken_tundra_dirt', 'everness:volcanic_sulfur' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.002,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:forsaken_tundra' },
y_max = y_max,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_sulfur_volcano.mts',
flags = 'place_center_x, place_center_z',
rotation = 'random',
spawn_by = { 'everness:forsaken_tundra_dirt', 'everness:volcanic_sulfur' },
num_spawn_by = 8,
})
Everness:register_decoration({
name = 'everness:forsaken_tundra_bloodpore_plant',
deco_type = 'simple',
place_on = { 'everness:forsaken_tundra_dirt_with_grass' },
sidelen = 16,
noise_params = {
offset = -0.03,
scale = 0.09,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:forsaken_tundra' },
y_max = y_max,
y_min = y_min,
decoration = 'everness:bloodspore_plant',
param2 = 8,
})
Everness:register_decoration({
name = 'everness:forsaken_tundra_bloodspore_plant_on_dirt',
deco_type = 'simple',
place_on = { 'everness:forsaken_tundra_dirt' },
spawn_by = 'everness:forsaken_tundra_dirt_with_grass',
num_spawn_by = 1,
sidelen = 16,
noise_params = {
offset = -0.03,
scale = 0.09,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:forsaken_tundra' },
y_max = y_max,
y_min = y_min,
decoration = 'everness:bloodspore_plant',
param2 = 8,
})
--
-- On Generated
--
local chance = 20
local disp = 16
local schem = minetest.read_schematic(minetest.get_modpath('everness') .. '/schematics/everness_jungle_temple.mts', {})
local size = { x = 12, y = 14, z = 15 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
local y_dis = 3
local c_everness_forsaken_tundra_dirt = minetest.get_content_id('everness:forsaken_tundra_dirt')
local c_everness_forsaken_tundra_dirt_with_grass = minetest.get_content_id('everness:forsaken_tundra_dirt_with_grass')
local c_everness_volcanic_sulfur = minetest.get_content_id('everness:volcanic_sulfur')
local biome_id_everness_forsaken_tundra = minetest.get_biome_id('everness:forsaken_tundra')
Everness:add_to_queue_on_generated({
name = 'everness:forsaken_tundra',
can_run = function(biomemap)
return table.indexof(biomemap, biome_id_everness_forsaken_tundra) ~= -1
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
local sidelength = maxp.x - minp.x + 1
local x_disp = rand:next(0, disp)
local z_disp = rand:next(0, disp)
shared_args.schem_positions = {}
for y = minp.y, maxp.y do
local vi = area:index(minp.x + sidelength / 2 + x_disp, y, minp.z + sidelength / 2 + z_disp)
if data[vi + area.ystride] == minetest.CONTENT_AIR
and (
data[vi] == c_everness_forsaken_tundra_dirt
or data[vi] == c_everness_forsaken_tundra_dirt_with_grass
or data[vi] == c_everness_volcanic_sulfur
)
and rand:next(0, 100) < chance
then
local s_pos = area:position(vi)
--
-- Jungle Temple
--
-- add Y displacement
local schem_pos = vector.new(s_pos.x, s_pos.y - y_dis, s_pos.z)
-- find floor big enough
local positions = minetest.find_nodes_in_area_under_air(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
'everness:forsaken_tundra_dirt',
'everness:forsaken_tundra_dirt_with_grass',
'everness:volcanic_sulfur'
}
)
if #positions < size.x * size.z then
-- not enough space
return
end
-- enough air to place structure ?
local air_positions = minetest.find_nodes_in_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
'air'
}
)
if #air_positions > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
shared_args.schem_positions.everness_jungle_temple = shared_args.schem_positions.everness_jungle_temple or {}
table.insert(shared_args.schem_positions.everness_jungle_temple, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y - y_dis, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y - y_dis + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Jungle Temple was placed at ' .. schem_pos:to_string())
end
end
end
end,
after_write_to_map = function(shared_args)
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions > 0 then
Everness:populate_loot_chests(chest_positions)
end
end
end
end
end
})

View file

@ -0,0 +1,94 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_forsaken_tundra_beach.y_max
local y_min = Everness.settings.biomes.everness_forsaken_tundra_beach.y_min
-- Forsaken Tundra Beach
Everness:register_biome({
name = 'everness:forsaken_tundra_beach',
node_top = 'everness:forsaken_tundra_beach_sand',
depth_top = 1,
node_filler = 'everness:forsaken_tundra_beach_sand',
depth_filler = 2,
node_riverbed = 'everness:forsaken_tundra_beach_sand',
depth_riverbed = 2,
node_dungeon = 'everness:forsaken_tundra_cobble',
node_dungeon_alt = 'everness:forsaken_tundra_brick',
node_dungeon_stair = 'stairs:stair_forsaken_tundra_cobble',
vertical_blend = 1,
y_max = y_max,
y_min = y_min,
heat_point = 10,
humidity_point = 10,
})
--
-- Register ores
--
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:sulfur_stone',
wherein = { 'default:stone', 'everness:forsaken_tundra_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = -316,
octaves = 1,
persist = 0.0
},
biomes = { 'everness:forsaken_tundra_shore' }
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:forsaken_tundra_beach_sand_with_shells',
deco_type = 'simple',
place_on = { 'everness:forsaken_tundra_beach_sand' },
sidelen = 4,
noise_params = {
offset = -4,
scale = 4,
spread = { x = 50, y = 50, z = 50 },
seed = 7013,
octaves = 3,
persist = 0.7,
},
biomes = { 'everness:forsaken_tundra_shore' },
y_max = y_max,
y_min = y_min,
place_offset_y = -1,
flags = 'force_placement',
decoration = { 'everness:forsaken_tundra_beach_sand_with_shells' },
})

View file

@ -0,0 +1,96 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_forsaken_tundra_ocean.y_max
local y_min = Everness.settings.biomes.everness_forsaken_tundra_ocean.y_min
-- Forsaken Tundra Ocean
Everness:register_biome({
name = 'everness:forsaken_tundra_ocean',
node_top = 'everness:forsaken_tundra_beach_sand',
depth_top = 1,
node_stone = 'everness:forsaken_tundra_stone',
node_filler = 'everness:forsaken_tundra_beach_sand',
depth_filler = 3,
node_riverbed = 'everness:forsaken_tundra_beach_sand',
depth_riverbed = 2,
node_cave_liquid = 'mapgen_water_source',
node_dungeon = 'everness:forsaken_tundra_cobble',
node_dungeon_alt = 'everness:forsaken_tundra_brick',
node_dungeon_stair = 'stairs:stair_forsaken_tundra_cobble',
vertical_blend = 1,
y_max = y_max,
y_min = y_min,
heat_point = 10,
humidity_point = 10,
})
--
-- Register ores
--
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:sulfur_stone',
wherein = { 'default:stone', 'everness:forsaken_tundra_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = -316,
octaves = 1,
persist = 0.0
},
biomes = asuna.features.ocean.forsaken_tundra
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:forsaken_tundra_beach_sand_with_shells',
deco_type = 'simple',
place_on = { 'everness:forsaken_tundra_beach_sand' },
sidelen = 4,
noise_params = {
offset = -4,
scale = 4,
spread = { x = 50, y = 50, z = 50 },
seed = 7013,
octaves = 3,
persist = 0.7,
},
biomes = asuna.features.ocean.forsaken_tundra,
y_max = y_max,
y_min = y_min,
place_offset_y = -1,
flags = 'force_placement',
decoration = { 'everness:forsaken_tundra_beach_sand_with_shells' },
})

View file

@ -0,0 +1,363 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_forsaken_tundra_under.y_max
local y_min = Everness.settings.biomes.everness_forsaken_tundra_under.y_min
-- Forsaken Tundra Under
Everness:register_biome({
name = 'everness:forsaken_tundra_under',
node_cave_liquid = { 'mapgen_water_source', 'mapgen_lava_source' },
node_dungeon = 'everness:forsaken_tundra_cobble',
node_dungeon_alt = 'everness:forsaken_tundra_brick',
node_dungeon_stair = 'stairs:stair_forsaken_tundra_cobble',
y_max = y_max,
y_min = y_min,
heat_point = 10,
humidity_point = 10,
})
--
-- Register ores
--
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:sulfur_stone',
wherein = { 'default:stone', 'everness:forsaken_tundra_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = -316,
octaves = 1,
persist = 0.0
},
biomes = asuna.features.cave.forsaken_tundra
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:forsaken_tundra_under_mold_stone_floors',
deco_type = 'simple',
place_on = { 'default:stone' },
sidelen = 16,
place_offset_y = -1,
fill_ratio = 10,
biomes = asuna.features.cave.forsaken_tundra,
y_max = y_max,
y_min = y_min,
flags = 'all_floors, force_placement',
decoration = {
'everness:mold_stone_with_moss'
},
})
Everness:register_decoration({
name = 'everness:forsaken_tundra_under_mold_stone_ceilings',
deco_type = 'simple',
place_on = { 'default:stone' },
sidelen = 16,
fill_ratio = 0.4,
biomes = asuna.features.cave.forsaken_tundra,
y_max = y_max,
y_min = y_min,
flags = 'all_ceilings',
decoration = {
'everness:moss_block'
},
})
Everness:register_decoration({
name = 'everness:forsaken_tundra_under_obsidian_floors',
deco_type = 'simple',
place_on = { 'default:stone', 'everness:mold_stone_with_moss' },
sidelen = 16,
place_offset_y = -1,
fill_ratio = 0.02,
biomes = asuna.features.cave.forsaken_tundra,
y_max = y_max - 500 > y_min and y_max - 500 or y_max,
y_min = y_min,
decoration = {
'everness:blue_crying_obsidian',
'everness:blue_weeping_obsidian',
'everness:weeping_obsidian'
},
flags = 'all_floors, force_placement'
})
Everness:register_decoration({
name = 'everness:forsaken_tundra_under_obsidian_ceilings',
deco_type = 'simple',
place_on = { 'default:stone', 'everness:moss_block' },
sidelen = 16,
place_offset_y = -1,
fill_ratio = 0.02,
biomes = asuna.features.cave.forsaken_tundra,
y_max = y_max - 500 > y_min and y_max - 500 or y_max,
y_min = y_min,
decoration = {
'everness:blue_crying_obsidian',
'everness:blue_weeping_obsidian',
'everness:weeping_obsidian'
},
flags = 'all_ceilings, force_placement'
})
Everness:register_decoration({
name = 'everness:forsaken_tundra_under_cactus_orange',
deco_type = 'simple',
place_on = { 'everness:mold_stone_with_moss' },
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = asuna.features.cave.forsaken_tundra,
y_max = y_max - 500 > y_min and y_max - 500 or y_max,
y_min = y_min,
decoration = 'everness:cactus_orange',
height = 2,
height_max = 6,
flags = 'all_floors'
})
Everness:register_decoration({
name = 'everness:forsaken_tundra_under_willow_tree',
deco_type = 'simple',
place_on = {
'everness:mold_stone_with_moss',
'everness:blue_crying_obsidian',
'everness:blue_weeping_obsidian',
'everness:weeping_obsidian'
},
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.002,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = asuna.features.cave.forsaken_tundra,
y_max = y_max - 1500 > y_min and y_max - 1500 or y_max,
y_min = y_min,
flags = 'all_floors',
decoration = {
'everness:marker'
},
})
Everness:register_decoration({
name = 'everness:forsaken_tundra_under_bloodspore_plant_small',
deco_type = 'simple',
place_on = { 'everness:mold_stone_with_moss' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.02,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.cave.forsaken_tundra,
y_max = y_max,
y_min = y_min,
decoration = 'everness:bloodspore_plant_small',
param2 = 8,
flags = 'all_floors'
})
Everness:register_decoration({
name = 'everness:forsaken_tundra_under_vines',
deco_type = 'simple',
place_on = { 'everness:moss_block' },
sidelen = 16,
fill_ratio = 0.09,
biomes = asuna.features.cave.forsaken_tundra,
param2 = 8,
decoration = {
'everness:whispering_gourd_vine_1',
'everness:whispering_gourd_vine_2',
'everness:bulb_vine_1',
'everness:bulb_vine_2'
},
y_max = y_max,
y_min = y_min,
flags = 'all_ceilings',
spawn_by = 'air',
num_spawn_by = 8
})
Everness:register_decoration({
name = 'everness:forsaken_tundra_under_glowing_pillar',
deco_type = 'simple',
place_on = { 'everness:mold_stone_with_moss' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.002,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = asuna.features.cave.forsaken_tundra,
y_max = y_max - 1000 > y_min and y_max - 1000 or y_max,
y_min = y_min,
decoration = { 'everness:glowing_pillar' },
flags = 'all_floors',
})
local function register_agave_leaf_decoration(offset, scale, length)
Everness:register_decoration({
name = 'everness:forsaken_tundra_under_agave_leaf_' .. length,
deco_type = 'simple',
place_on = { 'everness:mold_stone_with_moss' },
sidelen = 16,
noise_params = {
offset = offset,
scale = scale,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
param2 = 8,
biomes = asuna.features.cave.forsaken_tundra,
y_max = y_max,
y_min = y_min,
decoration = 'everness:agave_leaf_' .. length,
flags = 'all_floors'
})
end
-- Grasses
register_agave_leaf_decoration(-0.03, 0.09, 3)
register_agave_leaf_decoration(-0.015, 0.075, 2)
register_agave_leaf_decoration(0, 0.06, 1)
--
-- On Generated
--
local biome_id_everness_forsaken_tundra_under = {}
for _,biome in ipairs(asuna.features.cave.forsaken_tundra) do
table.insert(biome_id_everness_forsaken_tundra_under,minetest.get_biome_id(biome))
end
local deco_id_everness_forsaken_tundra_under_willow_tree = minetest.get_decoration_id('everness:forsaken_tundra_under_willow_tree')
local willow_tree_schem = minetest.get_modpath('everness') .. '/schematics/everness_willow_tree.mts'
local size = { x = 39, y = 28, z = 39 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
local safe_volume = (size.x * size.y * size.z) / 1.5
local y_dis = 1
local willow_tree_place_on = minetest.registered_decorations['everness:forsaken_tundra_under_willow_tree'].place_on
willow_tree_place_on = type(willow_tree_place_on) == 'string' and { willow_tree_place_on } or willow_tree_place_on
minetest.set_gen_notify({ decoration = true }, { deco_id_everness_forsaken_tundra_under_willow_tree })
Everness:add_to_queue_on_generated({
name = 'everness:forsaken_tundra_under',
can_run = function(biomemap)
for _,biome in ipairs(biome_id_everness_forsaken_tundra_under) do
if table.indexof(biomemap, biome) ~= -1 then
return true
end
end
return false
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
--
-- Willow Tree
--
for _, pos in ipairs(gennotify['decoration#' .. (deco_id_everness_forsaken_tundra_under_willow_tree or '')] or {}) do
-- `pos` is position of the 'place_on' node
local marker_pos = vector.new(pos.x, pos.y + 1, pos.z)
local marker_node = minetest.get_node(marker_pos)
local place_on_node = minetest.get_node(pos)
if marker_node and marker_node.name == 'everness:marker' then
-- remove marker
minetest.remove_node(marker_pos)
if table.indexof(willow_tree_place_on, place_on_node.name) ~= -1 then
-- enough air to place structure ?
local positions = minetest.find_nodes_in_area(
vector.new(
pos.x - size_x,
pos.y - y_dis,
pos.z - size_z
),
vector.new(
pos.x + size_x,
pos.y - y_dis + size.y,
pos.z + size_z
),
{
'air',
'everness:willow_tree'
},
true
)
local air = positions.air or {}
local tree = positions['everness:willow_tree'] or {}
if #air > safe_volume and #tree == 0 then
minetest.place_schematic_on_vmanip(
vm,
vector.new(marker_pos.x, marker_pos.y - y_dis, marker_pos.z),
willow_tree_schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
-- minetest.log('action', '[Everness] Willow Tree was placed at ' .. pos:to_string())
end
end
end
end
end
})

View file

@ -0,0 +1,238 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_frosted_icesheet.y_max
local y_min = Everness.settings.biomes.everness_frosted_icesheet.y_min
-- Frosted Icesheet
Everness:register_biome({
name = 'everness:frosted_icesheet',
node_dust = 'everness:frosted_snowblock',
node_top = 'everness:frosted_snowblock',
depth_top = 1,
node_filler = 'everness:frosted_snowblock',
depth_filler = 3,
node_stone = 'everness:frosted_cave_ice',
node_water_top = 'everness:frosted_ice',
depth_water_top = 2,
node_river_water = 'everness:frosted_ice',
node_riverbed = 'everness:gravel',
depth_riverbed = 2,
node_dungeon = 'everness:icecobble',
node_dungeon_alt = 'everness:snowcobble',
node_dungeon_stair = 'stairs:stair_ice',
y_max = y_max,
y_min = y_min,
heat_point = 0,
humidity_point = 93,
})
--
-- Register decorations
--
-- Frosted Icesheet
Everness:register_decoration({
name = 'everness:frosted_icesheet_stalagmite',
deco_type = 'schematic',
schematic = minetest.get_modpath('everness') .. '/schematics/everness_frosted_lands_stalagmite.mts',
place_on = { 'everness:frosted_snowblock' },
place_offset_y = 1,
sidelen = 16,
noise_params = {
offset = 0.0008,
scale = 0.0007,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:frosted_icesheet' },
y_max = y_max,
y_min = (y_max - y_max) + 4,
flags = 'place_center_x, place_center_z',
spawn_by = 'everness:frosted_snowblock',
num_spawn_by = 8,
})
Everness:register_decoration({
name = 'everness:frosted_icesheet_volcanic_rock',
deco_type = 'schematic',
schematic = minetest.get_modpath('everness') .. '/schematics/everness_frosted_lands_volcanic_rock.mts',
place_on = { 'everness:frosted_snowblock' },
sidelen = 16,
noise_params = {
offset = 0.0008,
scale = 0.0007,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:frosted_icesheet' },
y_max = y_max,
y_min = (y_max - y_max) + 2,
flags = 'place_center_x, place_center_z',
rotation = 'random',
spawn_by = 'everness:frosted_snowblock',
num_spawn_by = 8,
})
Everness:register_decoration({
name = 'everness:frosted_icesheet_fossils',
deco_type = 'schematic',
schematic = minetest.get_modpath('everness') .. '/schematics/everness_frosted_lands_fossils.mts',
place_on = { 'everness:frosted_snowblock' },
sidelen = 16,
place_offset_y = 1,
noise_params = {
offset = 0.0008,
scale = 0.0007,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:frosted_icesheet' },
y_max = y_max,
y_min = (y_max - y_max) + 1,
flags = 'place_center_x, place_center_z',
rotation = 'random',
spawn_by = 'everness:frosted_snowblock',
num_spawn_by = 8,
})
--
-- On Generated
--
local chance = 20
local disp = 16
local schem = minetest.read_schematic(minetest.get_modpath('everness') .. '/schematics/everness_frosted_icesheet_igloo.mts', {})
local size = { x = 16, y = 13, z = 16 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
local y_dis = 8
local c_frosted_snowblock = minetest.get_content_id('everness:frosted_snowblock')
local c_frosted_ice = minetest.get_content_id('everness:frosted_ice')
local biome_id_everness_frosted_icesheet = minetest.get_biome_id('everness:frosted_icesheet')
Everness:add_to_queue_on_generated({
name = 'everness:frosted_icesheet',
can_run = function(biomemap)
return table.indexof(biomemap, biome_id_everness_frosted_icesheet) ~= -1
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
local sidelength = maxp.x - minp.x + 1
local x_disp = rand:next(0, disp)
local z_disp = rand:next(0, disp)
shared_args.schem_positions = {}
for y = minp.y, maxp.y do
local vi = area:index(minp.x + sidelength / 2 + x_disp, y, minp.z + sidelength / 2 + z_disp)
if data[vi + area.ystride] == minetest.CONTENT_AIR
and (
data[vi] == c_frosted_snowblock
or data[vi] == c_frosted_ice
)
and rand:next(0, 100) < chance
then
local s_pos = area:position(vi)
--
-- Igloo
--
-- add Y displacement
local schem_pos = vector.new(s_pos.x, s_pos.y - y_dis, s_pos.z)
-- find floor big enough
local positions = minetest.find_nodes_in_area_under_air(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
'everness:frosted_snowblock',
'everness:frosted_ice'
}
)
if #positions < size.x * size.z then
-- not enough space
return
end
-- enough air to place structure ?
local air_positions = minetest.find_nodes_in_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
'air'
}
)
if #air_positions > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
schem_pos,
schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
shared_args.schem_positions.everness_frosted_icesheet_igloo = shared_args.schem_positions.everness_frosted_icesheet_igloo or {}
table.insert(shared_args.schem_positions.everness_frosted_icesheet_igloo, {
pos = schem_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y - y_dis, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y - y_dis + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Igloo was placed at ' .. schem_pos:to_string())
end
end
end
end,
after_write_to_map = function(shared_args)
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions > 0 then
Everness:populate_loot_chests(chest_positions)
end
end
end
end
end
})

View file

@ -0,0 +1,83 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_frosted_icesheet_ocean.y_max
local y_min = Everness.settings.biomes.everness_frosted_icesheet_ocean.y_min
-- Frosted Icesheet Ocean
Everness:register_biome({
name = 'everness:frosted_icesheet_ocean',
node_top = 'default:sand',
depth_top = 1,
node_filler = 'default:sand',
depth_filler = 3,
node_water_top = 'everness:frosted_ice',
depth_water_top = 2,
node_cave_liquid = 'mapgen_water_source',
node_dungeon = 'everness:icecobble',
node_dungeon_alt = 'everness:snowcobble',
node_dungeon_stair = 'stairs:stair_ice',
y_max = y_max,
y_min = y_min,
heat_point = 0,
humidity_point = 93,
})
--
-- Register decorations
--
-- Frosted Icesheet Ocean
local starfish_oceans = {}
for _,oceans in ipairs({
asuna.features.ocean.tropical,
asuna.features.ocean.frozen,
}) do
for _,ocean in ipairs(oceans) do
table.insert(starfish_oceans,ocean)
end
end
Everness:register_decoration({
name = 'everness:frosted_icesheet_ocean_corals',
deco_type = 'simple',
place_on = { 'default:sand' },
place_offset_y = -1,
sidelen = 4,
noise_params = {
offset = -4,
scale = 4,
spread = { x = 50, y = 50, z = 50 },
seed = 7013,
octaves = 3,
persist = 0.7,
},
biomes = starfish_oceans,
y_max = y_max - (y_max + 2), -- -2
y_min = y_max - (y_max + 50), -- -50
flags = 'force_placement',
decoration = {
'everness:coral_starfish',
'everness:coral_frosted',
'everness:coral_skeleton'
},
})

View file

@ -0,0 +1,413 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_frosted_icesheet_under.y_max
local y_min = Everness.settings.biomes.everness_frosted_icesheet_under.y_min
-- Frosted Icesheet Under
Everness:register_biome({
name = 'everness:frosted_icesheet_under',
node_cave_liquid = { 'mapgen_water_source', 'mapgen_lava_source' },
node_dungeon = 'everness:icecobble',
node_dungeon_alt = 'everness:snowcobble',
node_dungeon_stair = 'stairs:stair_ice',
y_max = y_max,
y_min = y_min,
heat_point = 0,
humidity_point = 93,
})
--
-- Register ores
--
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:bone',
wherein = { 'default:stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = -316,
octaves = 1,
persist = 0.0
},
biomes = asuna.features.cave.frosted_icesheet
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:frosted_icesheet_under_floors',
deco_type = 'simple',
place_on = { 'default:stone' },
place_offset_y = -1,
sidelen = 16,
fill_ratio = 10,
biomes = asuna.features.cave.frosted_icesheet,
y_max = y_max,
y_min = y_min,
flags = 'all_floors, force_placement',
decoration = {
'everness:ancient_emerald_ice',
'everness:dense_emerald_ice',
'everness:emerald_ice',
'everness:frosted_ice',
'everness:frosted_ice_translucent',
},
})
Everness:register_decoration({
name = 'everness:frosted_icesheet_under_ceilings',
deco_type = 'simple',
place_on = { 'default:stone' },
sidelen = 16,
fill_ratio = 0.4,
biomes = asuna.features.cave.frosted_icesheet,
y_max = y_max,
y_min = y_min,
flags = 'all_ceilings',
decoration = {
'everness:ancient_emerald_ice',
'everness:dense_emerald_ice',
'everness:emerald_ice',
'everness:frosted_ice',
'everness:frosted_ice_translucent',
},
})
Everness:register_decoration({
name = 'everness:frosted_icesheet_under_illuminating_floors',
deco_type = 'simple',
place_on = {
'everness:ancient_emerald_ice',
'everness:dense_emerald_ice',
'everness:emerald_ice',
'everness:frosted_ice',
'everness:frosted_ice_translucent',
},
sidelen = 16,
place_offset_y = -1,
fill_ratio = 0.01,
biomes = asuna.features.cave.frosted_icesheet,
y_max = y_max,
y_min = y_min,
decoration = { 'everness:frosted_cave_ice_illuminating' },
flags = 'all_floors, force_placement'
})
Everness:register_decoration({
name = 'everness:frosted_icesheet_under_illuminating_ceilings',
deco_type = 'simple',
place_on = {
'everness:ancient_emerald_ice',
'everness:dense_emerald_ice',
'everness:emerald_ice',
'everness:frosted_ice',
'everness:frosted_ice_translucent',
},
sidelen = 16,
place_offset_y = -1,
fill_ratio = 0.01,
biomes = asuna.features.cave.frosted_icesheet,
y_max = y_max,
y_min = y_min,
decoration = { 'everness:frosted_cave_ice_illuminating' },
flags = 'all_ceilings, force_placement'
})
Everness:register_decoration({
name = 'everness:frosted_icesheet_under_amaranita_lantern',
deco_type = 'simple',
place_on = {
'everness:ancient_emerald_ice',
'everness:dense_emerald_ice',
'everness:emerald_ice',
'everness:frosted_ice',
'everness:frosted_ice_translucent',
},
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = asuna.features.cave.frosted_icesheet,
y_max = y_max - 500 > y_min and y_max - 500 or y_max,
y_min = y_min,
decoration = { 'everness:amaranita_lantern' },
flags = 'all_floors',
})
Everness:register_decoration({
name = 'everness:frosted_icesheet_under_vines',
deco_type = 'simple',
place_on = {
'everness:ancient_emerald_ice',
'everness:dense_emerald_ice',
'everness:emerald_ice',
'everness:frosted_ice',
'everness:frosted_ice_translucent',
},
sidelen = 16,
fill_ratio = 0.09,
biomes = asuna.features.cave.frosted_icesheet,
param2 = 8,
decoration = {
'everness:tenanea_flowers_vine_1',
'everness:tenanea_flowers_vine_2',
'everness:reeds_vine_1',
'everness:reeds_vine_2'
},
y_max = y_max,
y_min = y_min,
flags = 'all_ceilings',
spawn_by = 'air',
num_spawn_by = 8
})
Everness:register_decoration({
name = 'everness:frosted_icicle_large_ceiling',
deco_type = 'schematic',
place_on = {
'everness:ancient_emerald_ice',
'everness:dense_emerald_ice',
'everness:emerald_ice',
'everness:frosted_ice',
'everness:frosted_ice_translucent',
},
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = asuna.features.cave.frosted_icesheet,
y_max = y_max - 64,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_frosted_icicle_large_ceiling.mts',
flags = 'place_center_x, place_center_z, all_ceilings',
rotation = 'random',
})
Everness:register_decoration({
name = 'everness:frosted_icicle_large_floor',
deco_type = 'schematic',
place_on = {
'everness:ancient_emerald_ice',
'everness:dense_emerald_ice',
'everness:emerald_ice',
'everness:frosted_ice',
'everness:frosted_ice_translucent',
},
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = asuna.features.cave.frosted_icesheet,
y_max = y_max - 64,
y_min = y_min,
schematic = minetest.get_modpath('everness') .. '/schematics/everness_frosted_icicle_large_floor.mts',
flags = 'place_center_x, place_center_z, all_floors',
rotation = 'random',
})
Everness:register_decoration({
name = 'everness:frosted_icesheet_under_plants',
deco_type = 'simple',
place_on = {
'everness:ancient_emerald_ice',
'everness:dense_emerald_ice',
'everness:emerald_ice',
'everness:frosted_ice',
'everness:frosted_ice_translucent',
},
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.02,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
param2 = 8,
biomes = asuna.features.cave.frosted_icesheet,
y_max = y_max,
y_min = y_min,
decoration = {
'everness:blooming_cooksonia',
'everness:frosted_icicle_floor',
},
flags = 'all_floors',
})
Everness:register_decoration({
name = 'everness:frosted_icesheet_under_plants_2',
deco_type = 'simple',
place_on = {
'everness:ancient_emerald_ice',
'everness:dense_emerald_ice',
'everness:emerald_ice',
'everness:frosted_ice',
'everness:frosted_ice_translucent',
},
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.02,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.cave.frosted_icesheet,
y_max = y_max,
y_min = y_min,
decoration = { 'everness:creeping_moss_spores' },
flags = 'all_floors',
param2 = 26
})
--
-- On Generated
--
local size_ceiling = { x = 2, y = 19, z = 2 }
local size_ceiling_x = math.round(size_ceiling.x / 2)
local size_ceiling_z = math.round(size_ceiling.z / 2)
local size_floor = { x = 2, y = 20, z = 2 }
local size_floor_x = math.round(size_floor.x / 2)
local size_floor_z = math.round(size_floor.z / 2)
local deco_id_frosted_icicle_large_ceiling = minetest.get_decoration_id('everness:frosted_icicle_large_ceiling')
local deco_id_frosted_icicle_large_floor = minetest.get_decoration_id('everness:frosted_icicle_large_floor')
local biome_id_everness_frosted_icesheet_under = {}
for _,biome in ipairs(asuna.features.cave.frosted_icesheet) do
table.insert(biome_id_everness_frosted_icesheet_under,minetest.get_biome_id(biome))
end
minetest.set_gen_notify(
{ decoration = true },
{
deco_id_frosted_icicle_large_ceiling,
deco_id_frosted_icicle_large_floor
}
)
Everness:add_to_queue_on_generated({
name = 'everness:frosted_icesheet_under',
can_run = function(biomemap)
for _,biome in ipairs(biome_id_everness_frosted_icesheet_under) do
if table.indexof(biomemap, biome) ~= -1 then
return true
end
end
return false
end,
after_write_to_map = function(shared_args, gennotify)
--
-- Frosted Large Icicle Ceiling
--
for _, pos in ipairs(gennotify['decoration#' .. deco_id_frosted_icicle_large_ceiling] or {}) do
local markers = minetest.find_nodes_in_area(
vector.new(pos.x - size_ceiling_x, pos.y - size_ceiling.y + 2, pos.z - size_ceiling_z),
vector.new(pos.x + size_ceiling_x, pos.y - size_ceiling.y, pos.z + size_ceiling_z),
{ 'everness:marker' }
)
if #markers > 0 then
local pos_marker = markers[1]
local air_below = minetest.find_nodes_in_area(
vector.new(pos_marker.x, pos_marker.y, pos_marker.z),
vector.new(pos_marker.x, pos_marker.y - 7, pos_marker.z),
{'air'}
)
-- Replace marker
minetest.set_node(pos_marker, { name = 'everness:frosted_cave_ice_illuminating' })
if #air_below == 7 then
local incrementer = 1
local pos_below = vector.new(pos_marker.x, pos_marker.y - incrementer, pos_marker.z)
local node_below = minetest.get_node(pos_below)
Everness.stack_icicle_recursive(node_below, pos_below, incrementer, pos_marker, 'down')
end
end
end
--
-- Frosted Large Icicle Floor
--
for _, pos in ipairs(gennotify['decoration#' .. deco_id_frosted_icicle_large_floor] or {}) do
local markers = minetest.find_nodes_in_area(
vector.new(pos.x - size_floor_x, pos.y + size_floor.y - 2, pos.z - size_floor_z),
vector.new(pos.x + size_floor_x, pos.y + size_floor.y, pos.z + size_floor_z),
{ 'everness:marker' }
)
if #markers > 0 then
local pos_marker = markers[1]
local air_above = minetest.find_nodes_in_area(
vector.new(pos_marker.x, pos_marker.y, pos_marker.z),
vector.new(pos_marker.x, pos_marker.y + 7, pos_marker.z),
{'air'}
)
-- Replace marker
minetest.set_node(pos_marker, { name = 'everness:frosted_cave_ice_illuminating' })
-- Make sure we have some space
if #air_above == 7 then
local incrementer = 1
local pos_above = vector.new(pos_marker.x, pos_marker.y + incrementer, pos_marker.z)
local node_above = minetest.get_node(pos_above)
Everness.stack_icicle_recursive(node_above, pos_above, incrementer, pos_marker, 'up')
end
end
end
end
})

View file

@ -0,0 +1,911 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_mineral_waters.y_max
local y_min = Everness.settings.biomes.everness_mineral_waters.y_min
-- Mineral Waters
Everness:register_biome({
name = 'everness:mineral_waters',
node_top = 'everness:mineral_sand',
depth_top = 1,
node_filler = 'everness:mineral_stone',
depth_filler = 1,
node_stone = 'everness:mineral_stone',
node_riverbed = 'everness:mineral_sand',
depth_riverbed = 2,
node_dungeon = 'everness:mineral_stone_brick',
node_dungeon_alt = 'everness:mineral_stone_brick_with_growth',
node_dungeon_stair = 'stairs:stair_mineral_stone_brick',
y_max = y_max,
y_min = y_min,
vertical_blend = 16,
heat_point = 78,
humidity_point = 58,
})
--
-- Register ores
--
-- Scatter ores
-- Coal
Everness:register_ore({
ore_type = 'scatter',
ore = 'everness:mineral_stone_with_coal',
wherein = 'everness:mineral_stone',
clust_scarcity = 8 * 8 * 8,
clust_num_ores = 9,
clust_size = 3,
y_max = y_max,
y_min = y_min,
biomes = { 'everness:mineral_waters' }
})
Everness:register_ore({
ore_type = 'scatter',
ore = 'everness:mineral_stone_with_ceramic_sherds',
wherein = 'everness:mineral_stone',
clust_scarcity = 14 * 14 * 14,
clust_num_ores = 5,
clust_size = 3,
y_max = y_max,
y_min = y_min,
biomes = { 'everness:mineral_waters' }
})
--
-- Register decorations
-- placeholder node `everness:crystal_stone` will be replaced in VM
--
Everness:register_decoration({
name = 'everness:palm_trees',
deco_type = 'simple',
place_on = { 'everness:mineral_sand' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.005,
spread = { x = 250, y = 250, z = 250 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = { 'everness:mineral_waters' },
y_max = y_max,
y_min = y_min,
decoration = { 'everness:crystal_stone' },
})
Everness:register_decoration({
name = 'everness:pots',
deco_type = 'simple',
place_on = { 'everness:mineral_sand' },
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.002,
spread = { x = 250, y = 250, z = 250 },
seed = 2,
octaves = 3,
persist = 0.66
},
biomes = { 'everness:mineral_waters' },
y_max = y_max,
y_min = y_min,
decoration = { 'everness:crystal_stone' },
_decoration = {
'everness:ceramic_pot_blank',
'everness:ceramic_pot_flowers',
'everness:ceramic_pot_lines',
'everness:ceramic_pot_tribal'
}
})
Everness:register_decoration({
name = 'everness:water_geyser',
deco_type = 'simple',
place_on = { 'everness:mineral_sand' },
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.02,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = { 'everness:mineral_waters' },
y_max = y_max,
y_min = y_min,
decoration = { 'everness:crystal_stone' },
spawn_by = { 'air' },
num_spawn_by = 16,
check_offset = 1,
})
Everness:register_decoration({
name = 'everness:rose_bush',
deco_type = 'simple',
place_on = { 'everness:mineral_sand' },
sidelen = 16,
noise_params = {
offset = -0.004,
scale = 0.01,
spread = { x = 100, y = 100, z = 100 },
seed = 137,
octaves = 3,
persist = 0.7,
},
biomes = { 'everness:mineral_waters' },
y_max = y_max,
y_min = y_min,
decoration = { 'everness:crystal_stone' },
_decoration = { 'everness:rose_bush' },
spawn_by = { 'air' },
num_spawn_by = 16,
check_offset = 1,
})
--
-- On Generated
--
local function find_irecursive(table, c_id)
local found = false
for i, v in ipairs(table) do
if type(v) == 'table' then
find_irecursive(v, c_id)
end
if c_id == v then
found = true
break
end
end
return found
end
-- Get the content IDs for the nodes used
local c_everness_mineral_water_source = minetest.get_content_id('everness:mineral_water_source')
local c_everness_mineral_stone = minetest.get_content_id('everness:mineral_stone')
local c_everness_mineral_stone_brick = minetest.get_content_id('everness:mineral_stone_brick')
local c_everness_mineral_stone_brick_with_growth = minetest.get_content_id('everness:mineral_stone_brick_with_growth')
local c_everness_mineral_stone_brick_with_flower_growth = minetest.get_content_id('everness:mineral_stone_brick_with_flower_growth')
local c_everness_mineral_sand = minetest.get_content_id('everness:mineral_sand')
local c_everness_mineral_sandstone = minetest.get_content_id('everness:mineral_sandstone')
local c_everness_mineral_sandstone_block = minetest.get_content_id('everness:mineral_sandstone_block')
local c_everness_chest = minetest.get_content_id('everness:chest')
local c_everness_mineral_stone_with_coal = minetest.get_content_id('everness:mineral_stone_with_coal')
local c_everness_mineral_stone_with_ceramic_sherds = minetest.get_content_id('everness:mineral_stone_with_ceramic_sherds')
local c_everness_lotus_flower_white = minetest.get_content_id('everness:lotus_flower_white')
local c_everness_lotus_flower_purple = minetest.get_content_id('everness:lotus_flower_purple')
local c_everness_lotus_flower_pink = minetest.get_content_id('everness:lotus_flower_pink')
local c_everness_lotus_lotus_leaf = minetest.get_content_id('everness:lotus_leaf')
local c_everness_lotus_lotus_leaf_2 = minetest.get_content_id('everness:lotus_leaf_2')
local c_everness_lotus_lotus_leaf_3 = minetest.get_content_id('everness:lotus_leaf_3')
local c_everness_ceramic_pot_blank = minetest.get_content_id('everness:ceramic_pot_blank')
local c_everness_ceramic_pot_flowers = minetest.get_content_id('everness:ceramic_pot_flowers')
local c_everness_ceramic_pot_lines = minetest.get_content_id('everness:ceramic_pot_lines')
local c_everness_ceramic_pot_tribal = minetest.get_content_id('everness:ceramic_pot_tribal')
local c_everness_mineral_water_weed_1 = minetest.get_content_id('everness:mineral_water_weed_1')
local c_everness_mineral_water_weed_2 = minetest.get_content_id('everness:mineral_water_weed_2')
local c_everness_mineral_water_weed_3 = minetest.get_content_id('everness:mineral_water_weed_3')
-- Biome IDs
local biome_id_everness_mineral_waters = minetest.get_biome_id('everness:mineral_waters')
-- Decoration IDs
local d_everness_palm_trees = minetest.get_decoration_id('everness:palm_trees')
local d_everness_water_geyser = minetest.get_decoration_id('everness:water_geyser')
local d_everness_pots = minetest.get_decoration_id('everness:pots')
local d_rose_bush = minetest.get_decoration_id('everness:rose_bush')
-- Pool building blocks variations
local pool_build_nodes = {
{
c_everness_mineral_stone,
c_everness_mineral_stone_brick,
c_everness_mineral_stone_brick_with_growth,
c_everness_mineral_stone_brick_with_flower_growth
},
{
c_everness_mineral_sandstone,
c_everness_mineral_sandstone_block
}
}
local c_lotus_flowers = {
c_everness_lotus_flower_white,
c_everness_lotus_flower_purple,
c_everness_lotus_flower_pink
}
local c_lotus_leaves = {
c_everness_lotus_lotus_leaf,
c_everness_lotus_lotus_leaf_2,
c_everness_lotus_lotus_leaf_3
}
local c_pots = {
c_everness_ceramic_pot_blank,
c_everness_ceramic_pot_flowers,
c_everness_ceramic_pot_lines,
c_everness_ceramic_pot_tribal
}
local c_water_weeds = {
c_everness_mineral_water_weed_1,
c_everness_mineral_water_weed_2
}
local chance = 20
local disp = 16
local schem = minetest.get_modpath('everness') .. '/schematics/everness_mineral_waters_tower.mts'
local size = { x = 7, y = 16, z = 9 }
local size_x = math.round(size.x / 2)
local size_z = math.round(size.z / 2)
local function place_decoration(pos, vm, area, data, deco_id, callback)
local deco_def = minetest.registered_decorations[deco_id]
if not deco_def then
return
end
-- Position of the 'place_on' node
local vi = area:indexp(pos)
local place_on_valid = false
local data_node_name = minetest.get_name_from_content_id(data[vi])
local placeholder_node_name = type(deco_def.decoration) == 'string' and deco_def.decoration or deco_def.decoration[1]
if type(deco_def.place_on) == 'string' then
if deco_def.place_on == data_node_name and data[vi + area.ystride * 2] == minetest.CONTENT_AIR then
place_on_valid = true
end
else
for i, v in ipairs(deco_def.place_on) do
if v == data_node_name and data[vi + area.ystride * 2] == minetest.CONTENT_AIR then
place_on_valid = true
break
end
end
end
local pos_above = vector.new(pos.x, pos.y + 1, pos.z)
local node_above = vm:get_node_at(pos_above)
if node_above.name == placeholder_node_name then
if place_on_valid then
callback(pos_above, deco_def)
else
vm:set_node_at(pos_above, { name = 'air' })
end
end
end
minetest.set_gen_notify({ decoration = true }, {
d_everness_palm_trees,
d_everness_water_geyser,
d_everness_pots,
d_rose_bush
})
Everness:add_to_queue_on_generated({
name = 'everness:mineral_waters',
can_run = function(biomemap)
return table.indexof(biomemap, biome_id_everness_mineral_waters) ~= -1
end,
on_data = function(minp, maxp, area, data, p2data, gennotify, rand, shared_args)
local rand_version = rand:next(1, 2)
local chest_positions = {}
local pot_pos = {}
if rand_version == 1 then
--
-- Pools
--
for y = minp.y, maxp.y do
for z = minp.z, maxp.z do
local precision_perc = 75
for x = minp.x, maxp.x do
local ai = area:index(x, y, z)
local node_name = minetest.get_name_from_content_id(data[ai])
local node_def = minetest.registered_nodes[node_name]
if
data[ai + area.ystride] == minetest.CONTENT_AIR
and node_def
and node_def.walkable
then
local length = 5 + rand:next(0, 10)
local width = 5 + rand:next(0, 10)
local height = 3 + rand:next(0, 4)
local walkable_nodes = 0
-- find space for lake (walkable rectangle)
for li = 1, length do
for wi = 1, width do
local ai_rec = (ai + li) + (area.zstride * wi)
local n_name = minetest.get_name_from_content_id(data[ai_rec])
local n_def = minetest.registered_nodes[n_name]
local b_data = minetest.get_biome_data(area:position(ai_rec))
if not b_data then
return
end
local b_name = minetest.get_biome_name(b_data.biome)
if not b_name then
return
end
if b_name ~= 'everness:mineral_waters'
-- for mese trees, they dont have specific biome
or minetest.get_item_group(n_name, 'tree') > 0
or minetest.get_item_group(n_name, 'leaves') > 0
then
-- bordering with anohter biome, be more precise in placing
precision_perc = 100
end
if n_def
and n_def.walkable
and data[ai_rec + area.ystride] == minetest.CONTENT_AIR
then
walkable_nodes = walkable_nodes + 1
end
end
end
-- build pool (cuboid)
local pool_build_nodes_group = pool_build_nodes[rand:next(1, #pool_build_nodes)]
if walkable_nodes >= (width * length / 100) * precision_perc then
-- offset y so the pools are sticking out / sinking in from the ground vertically
local ai_offset_y = ai - (area.ystride * height) + (area.ystride * rand:next(0, math.ceil(height / 2)))
for hi = 1, height do
for li = 1, length do
for wi = 1, width do
local mineral_stone = pool_build_nodes_group[rand:next(1, #pool_build_nodes_group)]
local ai_cub = (ai_offset_y + li) + (area.ystride * hi) + (area.zstride * wi)
local current_c_id = data[ai_cub]
-- Check for water and build nodes before replacing, this will make pools connected and will not replace already built walls from another pool near by
if hi == 1
and current_c_id ~= c_everness_mineral_water_source
and not find_irecursive(pool_build_nodes, current_c_id)
then
-- build pool floor
data[ai_cub] = mineral_stone
elseif hi ~= 1
and (wi == 1 or wi == width)
and current_c_id ~= c_everness_mineral_water_source
and not find_irecursive(pool_build_nodes, current_c_id)
then
-- build pool wall
data[ai_cub] = mineral_stone
elseif hi ~= 1
and (li == 1 or li == length)
and (wi ~= 1 or wi ~= width)
and current_c_id ~= c_everness_mineral_water_source
and not find_irecursive(pool_build_nodes, current_c_id)
then
-- build pool wall
data[ai_cub] = mineral_stone
else
-- fill in the pool with water
data[ai_cub] = c_everness_mineral_water_source
end
-- place loot chest in the middle of the pool floor
if hi == 2
and height > 4
and math.ceil(length / 2) == li
and math.ceil(width / 2) == wi
and data[ai_cub - area.ystride] ~= c_everness_mineral_water_source
and rand:next(0, 100) < 3
then
data[ai_cub] = c_everness_chest
table.insert(chest_positions, vector.new(area:position(ai_cub)))
end
end
end
end
end
end
end
end
end
elseif rand_version == 2 then
--
-- Lakes
--
for z = minp.z, maxp.z do
for y = minp.y, maxp.y do
for x = minp.x, maxp.x do
local ai = area:index(x, y, z)
local c_current = data[ai]
-- +Y, -Y, +X, -X, +Z, -Z
-- top, bottom, right, left, front, back
-- right
local c_right = data[ai + 1]
-- left
local c_left = data[ai - 1]
-- front
local c_front = data[ai + (area.zstride * 2)]
-- back
local c_back = data[ai - (area.zstride * 2)]
local keep_going = true
local while_count = 1
local max_dig_depth = 11
if
c_current == c_everness_mineral_sand
and (
c_right == c_everness_mineral_sand
or c_right == c_everness_mineral_water_source
or c_right == c_everness_mineral_stone
or c_right == c_everness_mineral_stone_with_coal
or c_right == c_everness_mineral_stone_with_ceramic_sherds
)
and (
c_left == c_everness_mineral_sand
or c_left == c_everness_mineral_water_source
or c_left == c_everness_mineral_stone
or c_left == c_everness_mineral_stone_with_coal
or c_left == c_everness_mineral_stone_with_ceramic_sherds
)
and (
c_front == c_everness_mineral_sand
or c_front == c_everness_mineral_water_source
or c_front == c_everness_mineral_stone
or c_front == c_everness_mineral_stone_with_coal
or c_front == c_everness_mineral_stone_with_ceramic_sherds
)
and (
c_back == c_everness_mineral_sand
or c_back == c_everness_mineral_water_source
or c_back == c_everness_mineral_stone
or c_back == c_everness_mineral_stone_with_coal
or c_back == c_everness_mineral_stone_with_ceramic_sherds
)
then
-- dig below
while keep_going and while_count <= max_dig_depth do
local while_index = ai - area.ystride * while_count
if
-- below
(
data[while_index] == c_everness_mineral_stone
or data[while_index] == c_everness_mineral_stone_with_coal
or data[while_index] == c_everness_mineral_stone_with_ceramic_sherds
)
and (
-- right
data[while_index + 1 + area.ystride] == c_everness_mineral_sand
or data[while_index + 1 + area.ystride] == c_everness_mineral_water_source
or data[while_index + 1 + area.ystride] == c_everness_mineral_stone
or data[while_index + 1 + area.ystride] == c_everness_mineral_stone_with_coal
or data[while_index + 1 + area.ystride] == c_everness_mineral_stone_with_ceramic_sherds
)
and (
-- left
data[while_index - 1 + area.ystride] == c_everness_mineral_sand
or data[while_index - 1 + area.ystride] == c_everness_mineral_water_source
or data[while_index - 1 + area.ystride] == c_everness_mineral_stone
or data[while_index - 1 + area.ystride] == c_everness_mineral_stone_with_coal
or data[while_index - 1 + area.ystride] == c_everness_mineral_stone_with_ceramic_sherds
)
and (
-- front
data[while_index + area.zstride + area.ystride] == c_everness_mineral_sand
or data[while_index + area.zstride + area.ystride] == c_everness_mineral_water_source
or data[while_index + area.zstride + area.ystride] == c_everness_mineral_stone
or data[while_index + area.zstride + area.ystride] == c_everness_mineral_stone_with_coal
or data[while_index + area.zstride + area.ystride] == c_everness_mineral_stone_with_ceramic_sherds
)
and (
-- back
data[while_index - area.zstride + area.ystride] == c_everness_mineral_sand
or data[while_index - area.zstride + area.ystride] == c_everness_mineral_water_source
or data[while_index - area.zstride + area.ystride] == c_everness_mineral_stone
or data[while_index - area.zstride + area.ystride] == c_everness_mineral_stone_with_coal
or data[while_index - area.zstride + area.ystride] == c_everness_mineral_stone_with_ceramic_sherds
)
then
data[while_index + area.ystride] = c_everness_mineral_water_source
else
keep_going = false
end
while_count = while_count + 1
end
end
end
end
end
end
-- Place decorations after generating (2nd pass)
-- luacheck: ignore 512
for y = minp.y, maxp.y do
for z = minp.z, maxp.z do
for x = minp.x, maxp.x do
local ai = area:index(x, y, z)
--
-- Place Lotus Flowers and Leaves
--
if
data[ai] == c_everness_mineral_water_source
-- spawn around water
and data[ai + 1 + area.zstride] == c_everness_mineral_water_source
and data[ai + 1 - area.zstride] == c_everness_mineral_water_source
and data[ai + 1] == c_everness_mineral_water_source
and data[ai - 1] == c_everness_mineral_water_source
and data[ai - 1 + area.zstride] == c_everness_mineral_water_source
and data[ai - 1 - area.zstride] == c_everness_mineral_water_source
and data[ai + area.zstride] == c_everness_mineral_water_source
and data[ai - area.zstride] == c_everness_mineral_water_source
-- make sure there is space above
and data[ai + area.ystride] == minetest.CONTENT_AIR
-- spawn around air above
and data[ai + area.ystride + 1] == minetest.CONTENT_AIR
and data[ai + area.ystride + 1 + area.zstride] == minetest.CONTENT_AIR
and data[ai + area.ystride + 1 - area.zstride] == minetest.CONTENT_AIR
and data[ai + area.ystride - 1] == minetest.CONTENT_AIR
and data[ai + area.ystride - 1 + area.zstride] == minetest.CONTENT_AIR
and data[ai + area.ystride - 1 - area.zstride] == minetest.CONTENT_AIR
and data[ai + area.ystride + area.zstride] == minetest.CONTENT_AIR
and data[ai + area.ystride - area.zstride] == minetest.CONTENT_AIR
then
if rand:next(0, 100) < 2 then
data[ai + area.ystride] = c_lotus_flowers[rand:next(1, #c_lotus_flowers)]
-- Place Lotus Leaves around Flowers
local radius = 3
local chance_max = 80
for i = -radius, radius do
for j = -radius, radius do
local idx = ai + i + (area.zstride * j) + area.ystride
local distance = math.round(vector.distance(area:position(ai), area:position(idx)))
local chance_lotus_leaf = math.round(chance_max / distance)
if chance_lotus_leaf > chance_max then
chance_lotus_leaf = chance_max
end
if
rand:next(0, 100) < chance_lotus_leaf
and data[idx] == minetest.CONTENT_AIR
and data[idx - area.ystride] == c_everness_mineral_water_source
then
data[idx] = c_lotus_leaves[rand:next(1, #c_lotus_leaves)]
p2data[idx] = rand:next(0, 3)
end
end
end
elseif rand:next(0, 100) < 4 then
data[ai + area.ystride] = c_lotus_leaves[rand:next(1, #c_lotus_leaves)]
p2data[ai + area.ystride] = rand:next(0, 3)
-- add some more leaves around the leaf
for i = -1, 1 do
for j = -1, 1 do
local idx = ai + i + (area.zstride * j) + area.ystride
if
rand:next(0, 100) < 25
and data[idx] == minetest.CONTENT_AIR
and data[idx - area.ystride] == c_everness_mineral_water_source
then
data[idx] = c_lotus_leaves[rand:next(1, #c_lotus_leaves)]
p2data[idx] = rand:next(0, 3)
end
end
end
end
end
--
-- Place Seaweed
--
if
data[ai] == c_everness_mineral_water_source
and data[ai + area.ystride] == c_everness_mineral_water_source
and rand:next(0, 100) < 33
then
local c_weed = c_water_weeds[rand:next(1, #c_water_weeds)]
if rand:next(0, 100) < 5 then
-- Weed with light source with a bit less probability
c_weed = c_everness_mineral_water_weed_3
end
if data[ai + 1] == c_everness_mineral_stone then
data[ai + 1] = c_weed
data[ai + 1] = c_weed
data[ai + 1] = c_weed
p2data[ai + 1] = 2
elseif data[ai - 1] == c_everness_mineral_stone then
data[ai - 1] = c_weed
data[ai - 1] = c_weed
data[ai - 1] = c_weed
p2data[ai - 1] = 3
elseif data[ai + area.zstride] == c_everness_mineral_stone then
data[ai + area.zstride] = c_weed
data[ai + area.zstride] = c_weed
data[ai + area.zstride] = c_weed
p2data[ai + area.zstride] = 4
elseif data[ai - area.zstride] == c_everness_mineral_stone then
data[ai - area.zstride] = c_weed
data[ai - area.zstride] = c_weed
data[ai - area.zstride] = c_weed
p2data[ai - area.zstride] = 5
elseif data[ai - area.ystride] == c_everness_mineral_stone then
data[ai - area.ystride] = c_weed
data[ai - area.ystride] = c_weed
data[ai - area.ystride] = c_weed
p2data[ai - area.ystride] = 1
end
end
--
-- Place pots under water
--
if
data[ai] == c_everness_mineral_water_source
-- spawn around water
and data[ai + 1 + area.zstride] == c_everness_mineral_water_source
and data[ai + 1 - area.zstride] == c_everness_mineral_water_source
and data[ai + 1] == c_everness_mineral_water_source
and data[ai - 1] == c_everness_mineral_water_source
and data[ai - 1 + area.zstride] == c_everness_mineral_water_source
and data[ai - 1 - area.zstride] == c_everness_mineral_water_source
and data[ai + area.zstride] == c_everness_mineral_water_source
and data[ai - area.zstride] == c_everness_mineral_water_source
-- spawn around water above
and data[ai + area.ystride] == c_everness_mineral_water_source
and data[ai + area.ystride + 1] == c_everness_mineral_water_source
and data[ai + area.ystride + 1 + area.zstride] == c_everness_mineral_water_source
and data[ai + area.ystride + 1 - area.zstride] == c_everness_mineral_water_source
and data[ai + area.ystride - 1] == c_everness_mineral_water_source
and data[ai + area.ystride - 1 + area.zstride] == c_everness_mineral_water_source
and data[ai + area.ystride - 1 - area.zstride] == c_everness_mineral_water_source
and data[ai + area.ystride + area.zstride] == c_everness_mineral_water_source
and data[ai + area.ystride - area.zstride] == c_everness_mineral_water_source
-- spawn on solid node below
and data[ai - area.ystride] ~= c_everness_mineral_water_source
then
if rand:next(0, 100) < 1 then
table.insert(pot_pos, vector.new(area:position(ai)))
end
end
end
end
end
-- Set `shared_args`
shared_args.chest_positions = chest_positions
shared_args.pot_pos = pot_pos
end,
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
local sidelength = maxp.x - minp.x + 1
local x_disp = rand:next(0, disp)
local z_disp = rand:next(0, disp)
shared_args.schem_positions = {}
for y = minp.y, maxp.y do
local vi = area:index(minp.x + sidelength / 2 + x_disp, y, minp.z + sidelength / 2 + z_disp)
if data[vi + area.ystride] == minetest.CONTENT_AIR
and (
data[vi] == c_everness_mineral_water_source
or data[vi] == c_everness_mineral_sand
)
and rand:next(0, 100) < chance
then
local s_pos = area:position(vi)
--
-- Mineral Waters Tower
--
-- find floor big enough
local positions = minetest.find_nodes_in_area_under_air(
vector.new(s_pos.x - size_x, s_pos.y - 1, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + 1, s_pos.z + size_z),
{
'everness:mineral_sand',
'everness:mineral_water_source'
}
)
if #positions < size.x * size.z then
-- not enough space
return
end
-- enough air to place structure ?
local air_positions = minetest.find_nodes_in_area(
vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z),
{
'air'
}
)
if #air_positions > (size.x * size.y * size.z) / 2 then
minetest.place_schematic_on_vmanip(
vm,
s_pos,
schem,
'random',
nil,
true,
'place_center_x, place_center_z'
)
shared_args.schem_positions.everness_mineral_waters_tower = shared_args.schem_positions.everness_mineral_waters_tower or {}
table.insert(shared_args.schem_positions.everness_mineral_waters_tower, {
pos = s_pos,
minp = vector.new(s_pos.x - size_x, s_pos.y, s_pos.z - size_z),
maxp = vector.new(s_pos.x + size_x, s_pos.y + size.y, s_pos.z + size_z)
})
minetest.log('action', '[Everness] Mineral Waters Tower was placed at ' .. s_pos:to_string())
end
end
end
--
-- Place Decorations
--
local pot_pos = shared_args.pot_pos or {}
--
-- Palm Trees
--
for _, pos in ipairs(gennotify['decoration#' .. (d_everness_palm_trees or '')] or {}) do
place_decoration(pos, vm, area, data, 'everness:palm_trees', function(p)
minetest.place_schematic_on_vmanip(
vm,
p,
minetest.get_modpath('everness') .. '/schematics/everness_palm_tree.mts',
nil,
nil,
true,
'place_center_x, place_center_z'
)
end)
end
--
-- Water Geyser
--
for _, pos in ipairs(gennotify['decoration#' .. (d_everness_water_geyser or '')] or {}) do
place_decoration(pos, vm, area, data, 'everness:water_geyser', function(p)
vm:set_node_at(p, { name = 'everness:water_geyser' })
end)
end
--
-- Rose Bush
--
for _, pos in ipairs(gennotify['decoration#' .. (d_rose_bush or '')] or {}) do
place_decoration(pos, vm, area, data, 'everness:rose_bush', function(p)
vm:set_node_at(p, { name = 'everness:rose_bush' })
end)
end
--
-- Pots (above water)
--
for _, pos in ipairs(gennotify['decoration#' .. (d_everness_pots or '')] or {}) do
place_decoration(pos, vm, area, data, 'everness:pots', function(p, deco_def)
if deco_def._decoration then
-- Use `minetest.set_node` so we can set inventory on node construct
minetest.set_node(p, { name = deco_def._decoration[rand:next(1, #deco_def._decoration)] })
local inv = minetest.get_inventory({ type = 'node', pos = p })
local item_def = Everness.loot_chest.default[rand:next(1, #Everness.loot_chest.default)]
if not minetest.registered_items[item_def.name] then
return
end
if rand:next(0, 100) <= item_def.chance then
local stack = ItemStack(item_def.name)
if minetest.registered_tools[item_def.name] then
stack:set_wear(rand:next(1, 65535))
else
stack:set_count(rand:next(1, math.min(item_def.max_count, stack:get_stack_max())))
end
inv:set_stack('main', 1, stack)
end
end
end)
end
--
-- Pots (under water)
--
for _, v in ipairs(pot_pos) do
-- Use `minetest.set_node` so we can set inventory on node construct
minetest.set_node(v, { name = minetest.get_name_from_content_id(c_pots[rand:next(1, #c_pots)]) })
local inv = minetest.get_inventory({ type = 'node', pos = v })
local item_def = Everness.loot_chest.default[rand:next(1, #Everness.loot_chest.default)]
if not minetest.registered_items[item_def.name] then
return
end
if rand:next(0, 100) <= item_def.chance then
local stack = ItemStack(item_def.name)
if minetest.registered_tools[item_def.name] then
stack:set_wear(rand:next(1, 65535))
else
stack:set_count(rand:next(1, math.min(item_def.max_count, stack:get_stack_max())))
end
inv:set_stack('main', 1, stack)
end
end
end,
after_write_to_map = function(shared_args)
-- Populate loot chest inventory
local chest_positions = shared_args.chest_positions or {}
if next(chest_positions) then
Everness:populate_loot_chests(chest_positions)
end
-- Populate loot chest inventory for schematics
local schem_positions = shared_args.schem_positions or {}
for name, tbl in pairs(schem_positions) do
if next(tbl) then
for i, v in ipairs(tbl) do
local chest_positions2 = minetest.find_nodes_in_area(
v.minp,
v.maxp,
{ 'everness:chest' }
)
if #chest_positions2 > 0 then
Everness:populate_loot_chests(chest_positions2)
end
end
end
end
end
})

View file

@ -0,0 +1,766 @@
--[[
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.
--]]
--
-- Register biomes
--
local y_max = Everness.settings.biomes.everness_mineral_waters_under.y_max
local y_min = Everness.settings.biomes.everness_mineral_waters_under.y_min
-- Mineral Waters
Everness:register_biome({
name = 'everness:mineral_waters_under',
node_stone = 'everness:mineral_cave_stone',
node_filler = 'everness:mineral_cave_stone',
node_cave_liquid = 'everness:lava_source',
node_water = 'air',
node_dungeon = 'everness:mineral_stone_brick',
node_dungeon_alt = 'everness:mineral_stone_brick_with_growth',
node_dungeon_stair = 'stairs:stair_mineral_stone_brick',
y_max = y_max,
y_min = y_min,
vertical_blend = 16,
heat_point = 78,
humidity_point = 58,
})
--
-- Ores
--
minetest.register_on_mods_loaded(function()
local c_mapgen_stone = minetest.get_content_id('mapgen_stone')
local mapgen_stone_itemstring = minetest.get_name_from_content_id(c_mapgen_stone)
for name, def in pairs(minetest.registered_ores) do
local wherein = def.wherein
local biomes = def.biomes
if type(def.wherein) == 'string' then
wherein = { wherein }
end
-- Register the same ores what are defined for `mapgen_stone`
if
table.indexof(wherein, mapgen_stone_itemstring) > -1
and not biomes
and def.clust_scarcity ~= 1 -- ignore ores that replace everything
and (def.y_min <= y_max or def.y_max >= y_min)
then
def = table.copy(def)
def.wherein = { 'everness:mineral_cave_stone' }
def.biomes = asuna.features.cave.mineral_waters
Everness:register_ore(def)
end
end
end)
-- Blob ore.
-- These before scatter ores to avoid other ores in blobs.
Everness:register_ore({
ore_type = 'blob',
ore = 'everness:mineral_stone',
wherein = { 'everness:mineral_cave_stone' },
clust_scarcity = 16 * 16 * 16,
clust_size = 5,
y_max = y_max,
y_min = y_min,
noise_threshold = 0.0,
noise_params = {
offset = 0.5,
scale = 0.2,
spread = { x = 5, y = 5, z = 5 },
seed = 766,
octaves = 1,
persist = 0.0
},
biomes = asuna.features.cave.mineral_waters
})
--
-- Register decorations
--
Everness:register_decoration({
name = 'everness:mineral_waters_under_floors',
deco_type = 'simple',
place_on = {
'mapgen_stone',
'everness:mineral_cave_stone',
},
sidelen = 16,
place_offset_y = -1,
fill_ratio = 10,
biomes = asuna.features.cave.mineral_waters,
y_max = y_max,
y_min = y_min,
flags = 'all_floors, force_placement',
decoration = {
'everness:mineral_lava_stone'
},
})
--
-- Floors
--
Everness:register_decoration({
name = 'everness:mineral_waters_under_volcanic_spike',
deco_type = 'simple',
place_on = {
'mapgen_stone',
'everness:mineral_lava_stone',
'everness:mineral_cave_stone'
},
sidelen = 16,
noise_params = {
offset = -0.03,
scale = 0.09,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.cave.mineral_waters,
spawn_by = 'air',
check_offset = 0,
num_spawn_by = 1,
decoration = {
'everness:marker'
},
y_max = y_max - 64,
y_min = y_min,
flags = 'all_floors',
})
Everness:register_decoration({
name = 'everness:mineral_waters_under_lava_stone_spike',
deco_type = 'simple',
place_on = {
'mapgen_stone',
'everness:mineral_lava_stone',
'everness:mineral_cave_stone'
},
sidelen = 16,
noise_params = {
offset = -0.015,
scale = 0.075,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.cave.mineral_waters,
decoration = {
'everness:marker'
},
y_max = y_max - 64,
y_min = y_min,
flags = 'all_floors',
})
Everness:register_decoration({
name = 'everness:mineral_waters_under_lava_tree',
deco_type = 'simple',
place_on = {
'mapgen_stone',
'everness:mineral_lava_stone',
'everness:mineral_cave_stone',
'everness:mineral_lava_stone_with_moss'
},
sidelen = 16,
fill_ratio = 0.025,
biomes = asuna.features.cave.mineral_waters,
decoration = {
'everness:marker'
},
y_max = y_max - 64,
y_min = y_min,
flags = 'all_floors',
})
--
-- Ceilings
--
Everness:register_decoration({
name = 'everness:mineral_waters_under_volcanic_spike_ceiling',
deco_type = 'simple',
place_on = {
'everness:mineral_lava_stone',
'everness:mineral_cave_stone'
},
sidelen = 16,
noise_params = {
offset = -0.03,
scale = 0.09,
spread = { x = 200, y = 200, z = 200 },
seed = 329,
octaves = 3,
persist = 0.6
},
biomes = asuna.features.cave.mineral_waters,
decoration = {
'everness:marker'
},
y_max = y_max - 64,
y_min = y_min,
flags = 'all_ceilings',
})
--
-- On Generated
--
-- Get the content IDs for the nodes used
local c_everness_wall_vine_cave_cyan = minetest.get_content_id('everness:wall_vine_cave_cyan')
local c_everness_wall_vine_cave_violet = minetest.get_content_id('everness:wall_vine_cave_violet')
local c_everness_wall_vine_cave_blue = minetest.get_content_id('everness:wall_vine_cave_blue')
local c_everness_mineral_lava_stone = minetest.get_content_id('everness:mineral_lava_stone')
local c_everness_mineral_cave_stone = minetest.get_content_id('everness:mineral_cave_stone')
local c_everness_mineral_cave_cobblestone = minetest.get_content_id('everness:mineral_cave_cobblestone')
local c_everness_lava_source = minetest.get_content_id('everness:lava_source')
local c_everness_marker = minetest.get_content_id('everness:marker')
local c_everness_volcanic_rock = minetest.get_content_id('everness:volcanic_rock')
local c_everness_volcanic_spike_1 = minetest.get_content_id('everness:volcanic_spike_1')
local c_everness_volcanic_spike_2 = minetest.get_content_id('everness:volcanic_spike_2')
local c_everness_volcanic_spike_3 = minetest.get_content_id('everness:volcanic_spike_3')
local c_everness_volcanic_spike_4 = minetest.get_content_id('everness:volcanic_spike_4')
local c_everness_volcanic_spike_5 = minetest.get_content_id('everness:volcanic_spike_5')
local c_everness_volcanic_spike_6 = minetest.get_content_id('everness:volcanic_spike_6')
local c_everness_volcanic_spike_7 = minetest.get_content_id('everness:volcanic_spike_7')
local c_everness_mineral_cave_stone_spike_1 = minetest.get_content_id('everness:mineral_cave_stone_spike_1')
local c_everness_mineral_cave_stone_spike_2 = minetest.get_content_id('everness:mineral_cave_stone_spike_2')
local c_everness_mineral_cave_stone_spike_3 = minetest.get_content_id('everness:mineral_cave_stone_spike_3')
local c_everness_mineral_cave_stone_spike_4 = minetest.get_content_id('everness:mineral_cave_stone_spike_4')
local c_everness_mineral_cave_stone_spike_5 = minetest.get_content_id('everness:mineral_cave_stone_spike_5')
local c_everness_mineral_cave_stone_spike_6 = minetest.get_content_id('everness:mineral_cave_stone_spike_6')
local c_everness_mineral_cave_stone_spike_7 = minetest.get_content_id('everness:mineral_cave_stone_spike_7')
local c_everness_mineral_lava_stone_spike_1 = minetest.get_content_id('everness:mineral_lava_stone_spike_1')
local c_everness_mineral_lava_stone_spike_2 = minetest.get_content_id('everness:mineral_lava_stone_spike_2')
local c_everness_mineral_lava_stone_spike_3 = minetest.get_content_id('everness:mineral_lava_stone_spike_3')
local c_everness_mineral_lava_stone_spike_4 = minetest.get_content_id('everness:mineral_lava_stone_spike_4')
local c_everness_mineral_lava_stone_spike_5 = minetest.get_content_id('everness:mineral_lava_stone_spike_5')
local c_everness_mineral_lava_stone_spike_6 = minetest.get_content_id('everness:mineral_lava_stone_spike_6')
local c_everness_mineral_lava_stone_spike_7 = minetest.get_content_id('everness:mineral_lava_stone_spike_7')
local c_everness_mineral_lava_stone_with_moss = minetest.get_content_id('everness:mineral_lava_stone_with_moss')
-- Biome IDs
local biome_id_everness_mineral_waters_under = {}
for _,biome in ipairs(asuna.features.cave.mineral_waters) do
table.insert(biome_id_everness_mineral_waters_under,minetest.get_biome_id(biome))
end
-- Decoration IDs
local d_everness_mineral_waters_under_volcanic_spike = minetest.get_decoration_id('everness:mineral_waters_under_volcanic_spike')
local d_everness_mineral_waters_under_volcanic_spike_ceiling = minetest.get_decoration_id('everness:mineral_waters_under_volcanic_spike_ceiling')
local d_everness_mineral_waters_under_lava_stone_spike = minetest.get_decoration_id('everness:mineral_waters_under_lava_stone_spike')
local d_everness_mineral_waters_under_lava_tree = minetest.get_decoration_id('everness:mineral_waters_under_lava_tree')
local volcanic_spike_place_on = minetest.registered_decorations['everness:mineral_waters_under_volcanic_spike'].place_on
volcanic_spike_place_on = type(volcanic_spike_place_on) == 'string' and { volcanic_spike_place_on } or volcanic_spike_place_on
local volcanic_spike_ceiling_place_on = minetest.registered_decorations['everness:mineral_waters_under_volcanic_spike_ceiling'].place_on
volcanic_spike_ceiling_place_on = type(volcanic_spike_ceiling_place_on) == 'string' and { volcanic_spike_ceiling_place_on } or volcanic_spike_ceiling_place_on
local lava_stone_spike_place_on = minetest.registered_decorations['everness:mineral_waters_under_lava_stone_spike'].place_on
lava_stone_spike_place_on = type(lava_stone_spike_place_on) == 'string' and { lava_stone_spike_place_on } or lava_stone_spike_place_on
local lava_tree_place_on = minetest.registered_decorations['everness:mineral_waters_under_lava_tree'].place_on
lava_tree_place_on = type(lava_tree_place_on) == 'string' and { lava_tree_place_on } or lava_tree_place_on
-- `minetest.read_schematic` here so we don't cache the schem file, otherwise `replacements` will not work
local schem_everness_lava_tree = minetest.read_schematic(minetest.get_modpath('everness') .. '/schematics/everness_lava_tree.mts', {})
local lava_tree_size = { x = 7, y = 13, z = 7 }
local lava_tree_size_x = math.round(lava_tree_size.x / 2)
local lava_tree_size_z = math.round(lava_tree_size.z / 2)
local lava_tree_safe_volume = lava_tree_size.x * lava_tree_size.y * lava_tree_size.z
local wall_vines = {
c_everness_wall_vine_cave_cyan,
c_everness_wall_vine_cave_violet,
c_everness_wall_vine_cave_blue
}
local volcanic_spike_map = {
c_everness_volcanic_rock,
c_everness_volcanic_spike_1,
c_everness_volcanic_spike_2,
c_everness_volcanic_spike_3,
c_everness_volcanic_spike_4,
c_everness_volcanic_spike_5,
c_everness_volcanic_spike_6,
c_everness_volcanic_spike_7
}
local cave_stone_spike_map = {
c_everness_mineral_cave_cobblestone,
c_everness_mineral_cave_stone_spike_1,
c_everness_mineral_cave_stone_spike_2,
c_everness_mineral_cave_stone_spike_3,
c_everness_mineral_cave_stone_spike_4,
c_everness_mineral_cave_stone_spike_5,
c_everness_mineral_cave_stone_spike_6,
c_everness_mineral_cave_stone_spike_7
}
local lava_stone_spike_map = {
c_everness_mineral_lava_stone,
c_everness_mineral_lava_stone_spike_1,
c_everness_mineral_lava_stone_spike_2,
c_everness_mineral_lava_stone_spike_3,
c_everness_mineral_lava_stone_spike_4,
c_everness_mineral_lava_stone_spike_5,
c_everness_mineral_lava_stone_spike_6,
c_everness_mineral_lava_stone_spike_7
}
minetest.set_gen_notify({ decoration = true }, {
d_everness_mineral_waters_under_volcanic_spike,
d_everness_mineral_waters_under_lava_stone_spike,
d_everness_mineral_waters_under_volcanic_spike_ceiling,
d_everness_mineral_waters_under_lava_tree
})
Everness:add_to_queue_on_generated({
name = 'everness:mineral_waters_under',
can_run = function(biomemap)
for _,biome in ipairs(biome_id_everness_mineral_waters_under) do
if table.indexof(biomemap, biome) ~= -1 then
return true
end
end
return false
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)
local rand_version = rand:next(1, 5)
shared_args.rand_version = rand_version
if rand_version < 3 then
--
-- Lakes
--
for z = minp.z, maxp.z do
for y = minp.y, maxp.y do
for x = minp.x, maxp.x do
local ai = area:index(x, y, z)
local c_current = data[ai]
-- +Y, -Y, +X, -X, +Z, -Z
-- top, bottom, right, left, front, back
-- right
local c_right = data[ai + 1]
-- left
local c_left = data[ai - 1]
-- front
local c_front = data[ai + area.zstride]
-- back
local c_back = data[ai - area.zstride]
local keep_going = true
local while_count = 1
local max_dig_depth = 11
if
y <= -64 and -- spawn lava in deeper caves only
rand:next(1,5) == 1 and -- reduce lava lakes
c_current == c_everness_mineral_lava_stone
and (
c_right == c_everness_mineral_lava_stone
or c_right == c_everness_mineral_cave_stone
or c_right == c_everness_lava_source
)
and (
c_left == c_everness_mineral_lava_stone
or c_left == c_everness_mineral_cave_stone
or c_left == c_everness_lava_source
)
and (
c_front == c_everness_mineral_lava_stone
or c_front == c_everness_mineral_cave_stone
or c_front == c_everness_lava_source
)
and (
c_back == c_everness_mineral_lava_stone
or c_back == c_everness_mineral_cave_stone
or c_back == c_everness_lava_source
)
then
-- dig below
while keep_going and while_count <= max_dig_depth do
local while_index = ai - area.ystride * while_count
if
-- below
data[while_index] == c_everness_mineral_cave_stone
and (
-- right
data[while_index + 1 + area.ystride] == c_everness_mineral_lava_stone
or data[while_index + 1 + area.ystride] == c_everness_lava_source
or data[while_index + 1 + area.ystride] == c_everness_mineral_cave_stone
)
and (
-- left
data[while_index - 1 + area.ystride] == c_everness_mineral_lava_stone
or data[while_index - 1 + area.ystride] == c_everness_lava_source
or data[while_index - 1 + area.ystride] == c_everness_mineral_cave_stone
)
and (
-- front
data[while_index + area.zstride + area.ystride] == c_everness_mineral_lava_stone
or data[while_index + area.zstride + area.ystride] == c_everness_lava_source
or data[while_index + area.zstride + area.ystride] == c_everness_mineral_cave_stone
)
and (
-- back
data[while_index - area.zstride + area.ystride] == c_everness_mineral_lava_stone
or data[while_index - area.zstride + area.ystride] == c_everness_lava_source
or data[while_index - area.zstride + area.ystride] == c_everness_mineral_cave_stone
)
then
data[while_index + area.ystride] = c_everness_lava_source
else
keep_going = false
end
while_count = while_count + 1
end
end
end
end
end
else
for y = minp.y, maxp.y do
for z = minp.z, maxp.z do
for x = minp.x, maxp.x do
local ai = area:index(x, y, z)
if
data[ai] == c_everness_mineral_lava_stone
and data[ai + area.ystride] == minetest.CONTENT_AIR
and rand:next(0, 100) <= 10
then
local radius = 7
local chance_max = 80
for h = -3, 3 do
for i = -radius, radius do
for j = -radius, radius do
local idx = ai + i + (area.zstride * j) + (area.ystride * h)
local distance = math.round(vector.distance(area:position(ai), area:position(idx)))
local chance_moss = math.round(chance_max / distance)
if chance_moss > chance_max then
chance_moss = chance_max
end
if
data[idx] == c_everness_mineral_lava_stone
and rand:next(0, 100) < chance_moss
then
data[idx] = c_everness_mineral_lava_stone_with_moss
end
end
end
end
end
end
end
end
end
--
-- Decorations
--
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_everness_mineral_cave_stone
or data[vi - 1] == c_everness_mineral_cave_stone
or data[vi + area.zstride] == c_everness_mineral_cave_stone
or data[vi - area.zstride] == c_everness_mineral_cave_stone
)
and rand:next(0, 100) <= 15
then
-- Decorate Walls
local dir = vector.zero()
if data[vi + 1] == c_everness_mineral_cave_stone then
dir.x = 1
end
if data[vi - 1] == c_everness_mineral_cave_stone then
dir.x = -1
end
if data[vi + area.zstride] == c_everness_mineral_cave_stone then
dir.z = 1
end
if data[vi - area.zstride] == c_everness_mineral_cave_stone then
dir.z = -1
end
local rand_wall_vine = wall_vines[rand:next(1, #wall_vines)]
data[vi] = rand_wall_vine
p2data[vi] = minetest.dir_to_wallmounted(dir)
end
end
end
end
--
-- Spikes Floor
--
for _, pos in ipairs(gennotify['decoration#' .. (d_everness_mineral_waters_under_volcanic_spike or '')] or {}) do
local idx = area:indexp(pos)
local idx_marker = idx + area.ystride
local place_on_node_name = minetest.get_name_from_content_id(data[idx])
if data[idx_marker] == c_everness_marker then
-- remove marker
data[idx_marker] = minetest.CONTENT_AIR
if table.indexof(volcanic_spike_place_on, place_on_node_name) ~= -1 then
local min_height = 3
local max_height = 8
local indexes = Everness.find_content_in_vm_area(
vector.new(pos.x, pos.y + 1, pos.z),
vector.new(pos.x, pos.y + max_height, pos.z),
{
minetest.CONTENT_AIR
},
data,
area
)
-- For smallest spike we need space above at least 3)
if #indexes > min_height then
local height = rand:next(min_height, #indexes)
local start_index = #volcanic_spike_map - height + 1
local count = 0
for i = start_index, #volcanic_spike_map do
data[idx_marker + area.ystride * count] = volcanic_spike_map[i]
count = count + 1
end
end
end
end
end
for _, pos in ipairs(gennotify['decoration#' .. (d_everness_mineral_waters_under_lava_stone_spike or '')] or {}) do
local idx = area:indexp(pos)
local idx_marker = idx + area.ystride
local place_on_node_name = minetest.get_name_from_content_id(data[idx])
if data[idx_marker] == c_everness_marker then
-- remove marker
data[idx_marker] = minetest.CONTENT_AIR
if table.indexof(lava_stone_spike_place_on, place_on_node_name) ~= -1 then
local min_height = 3
local max_height = 8
local indexes = Everness.find_content_in_vm_area(
vector.new(pos.x, pos.y + 1, pos.z),
vector.new(pos.x, pos.y + max_height, pos.z),
{
minetest.CONTENT_AIR
},
data,
area
)
-- For smallest spike we need space above at least 3)
if #indexes > min_height then
local height = rand:next(min_height, #indexes)
local start_index = #cave_stone_spike_map - height + 1
local count = 0
for i = start_index, #cave_stone_spike_map do
data[idx_marker + area.ystride * count] = cave_stone_spike_map[i]
count = count + 1
end
end
end
end
end
--
-- Spikes Ceiling
--
for _, pos in ipairs(gennotify['decoration#' .. (d_everness_mineral_waters_under_volcanic_spike_ceiling or '')] or {}) do
local idx = area:indexp(pos)
local idx_marker = idx - area.ystride
local place_on_node_name = minetest.get_name_from_content_id(data[idx])
if data[idx_marker] == c_everness_marker then
-- remove marker
data[idx_marker] = minetest.CONTENT_AIR
-- data[idx_marker] = minetest.get_content_id('everness:pyrite_lantern')
if table.indexof(volcanic_spike_ceiling_place_on, place_on_node_name) ~= -1 then
local min_height = 3
local max_height = 16
local indexes = Everness.find_content_in_vm_area(
vector.new(pos.x, pos.y - max_height, pos.z),
vector.new(pos.x, pos.y - 1, pos.z),
{
minetest.CONTENT_AIR
},
data,
area
)
-- For smallest spike we need space above at least 3)
if #indexes > min_height then
local remainder = 0
local height = rand:next(min_height, #indexes)
if height > #lava_stone_spike_map then
remainder = height - #lava_stone_spike_map
height = height - remainder
end
local start_index = #lava_stone_spike_map - height + 1
local count = 0
if remainder > 0 then
for i = 1, remainder do
data[idx_marker - area.ystride * count] = c_everness_mineral_cave_cobblestone
count = count + 1
end
end
for i = start_index, #lava_stone_spike_map do
data[idx_marker - area.ystride * count] = lava_stone_spike_map[i]
count = count + 1
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)
--
-- Lava Trees
--
for _, pos in ipairs(gennotify['decoration#' .. (d_everness_mineral_waters_under_lava_tree or '')] or {}) do
-- `pos` is position of the 'place_on' node
local marker_pos = vector.new(pos.x, pos.y + 1, pos.z)
local marker_node = minetest.get_node(marker_pos)
local place_on_node = minetest.get_node(pos)
if marker_node and marker_node.name == 'everness:marker' then
-- remove marker
minetest.remove_node(marker_pos)
if shared_args.rand_version > 2
and table.indexof(lava_tree_place_on, place_on_node.name) ~= -1
then
-- enough air to place structure ?
local positions = minetest.find_nodes_in_area(
vector.new(
pos.x - lava_tree_size_x,
pos.y,
pos.z - lava_tree_size_z
),
vector.new(
pos.x + lava_tree_size_x,
pos.y + lava_tree_size.y,
pos.z + lava_tree_size_z
),
{
'air',
'everness:lava_tree',
'everness:lava_tree_with_lava'
},
true
)
local air = positions.air or {}
local tree1 = positions['everness:lava_tree'] or {}
local tree2 = positions['everness:lava_tree_with_lava'] or {}
-- do not overlap another tree
if
#tree1 == 0
and #tree2 == 0
and #air > lava_tree_safe_volume
then
local replacements
if rand:next(0, 100) <= 25 then
replacements = {
['everness:lava_tree'] = 'everness:lava_tree_with_lava',
}
end
shared_args.lava_tree_positions = shared_args.lava_tree_positions or {}
table.insert(shared_args.lava_tree_positions, marker_pos)
minetest.place_schematic_on_vmanip(
vm,
marker_pos,
schem_everness_lava_tree,
'random',
replacements,
false,
'place_center_x, place_center_z'
)
end
end
end
end
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, rand)
local lava_tree_positions = shared_args.lava_tree_positions or {}
for _, p in ipairs(lava_tree_positions) do
local grass_positions = minetest.find_nodes_in_area_under_air(
vector.subtract(p, { x = 3, y = 1, z = 3 }),
vector.add(p, { x = 3, y = 1, z = 3 }),
'everness:mineral_lava_stone_with_moss'
)
if #grass_positions > 1 then
for i = 1, rand:next(1, 3) do
local rand_p = grass_positions[rand:next(1, #grass_positions)]
if not vector.equals(p, rand_p) then
minetest.set_node(vector.new(rand_p.x, rand_p.y + 1, rand_p.z), { name = 'everness:mineral_cave_moss_grass' })
end
end
end
end
end
})

View file

@ -0,0 +1,92 @@
everness_coral_forest = true
everness_coral_forest_y_max = 194
everness_coral_forest_y_min = 6
everness_coral_forest_dunes = true
everness_coral_forest_dunes_y_max = 5
everness_coral_forest_dunes_y_min = 4
everness_coral_forest_ocean = true
everness_coral_forest_ocean_y_max = 3
everness_coral_forest_ocean_y_min = -10
everness_coral_forest_deep_ocean = true
everness_coral_forest_deep_ocean_y_max = -11
everness_coral_forest_deep_ocean_y_min = -62
everness_coral_forest_under = true
everness_coral_forest_under_y_max = -28939
everness_coral_forest_under_y_min = -29067
everness_frosted_icesheet = true
everness_frosted_icesheet_y_max = 194
everness_frosted_icesheet_y_min = -8
everness_frosted_icesheet_ocean = true
everness_frosted_icesheet_ocean_y_max = -9
everness_frosted_icesheet_ocean_y_min = -62
everness_frosted_icesheet_under = true
everness_frosted_icesheet_under_y_max = -28939
everness_frosted_icesheet_under_y_min = -29067
everness_cursed_lands = true
everness_cursed_lands_y_max = 194
everness_cursed_lands_y_min = 6
everness_cursed_lands_dunes = true
everness_cursed_lands_dunes_y_max = 5
everness_cursed_lands_dunes_y_min = 1
everness_cursed_lands_swamp = true
everness_cursed_lands_swamp_y_max = 0
everness_cursed_lands_swamp_y_min = -1
everness_cursed_lands_ocean = true
everness_cursed_lands_ocean_y_max = -2
everness_cursed_lands_ocean_y_min = -10
everness_cursed_lands_deep_ocean = true
everness_cursed_lands_deep_ocean_y_max = -11
everness_cursed_lands_deep_ocean_y_min = -62
everness_cursed_lands_under = true
everness_cursed_lands_under_y_max = -28939
everness_cursed_lands_under_y_min = -29067
everness_crystal_forest = true
everness_crystal_forest_y_max = 194
everness_crystal_forest_y_min = 6
everness_crystal_forest_dunes = true
everness_crystal_forest_dunes_y_max = 5
everness_crystal_forest_dunes_y_min = 1
everness_crystal_forest_shore = true
everness_crystal_forest_shore_y_max = 0
everness_crystal_forest_shore_y_min = -1
everness_crystal_forest_ocean = true
everness_crystal_forest_ocean_y_max = 2
everness_crystal_forest_ocean_y_min = -10
everness_crystal_forest_deep_ocean = true
everness_crystal_forest_deep_ocean_y_max = -11
everness_crystal_forest_deep_ocean_y_min = -62
everness_crystal_forest_under = true
everness_crystal_forest_under_y_max = -28939
everness_crystal_forest_under_y_min = -29067
everness_bamboo_forest = true
everness_bamboo_forest_y_max = 194
everness_bamboo_forest_y_min = 1
everness_bamboo_forest_under = true
everness_bamboo_forest_under_y_max = -28939
everness_bamboo_forest_under_y_min = -29067
everness_forsaken_desert = true
everness_forsaken_desert_y_max = 194
everness_forsaken_desert_y_min = 4
everness_forsaken_desert_ocean = true
everness_forsaken_desert_ocean_y_max = 3
everness_forsaken_desert_ocean_y_min = -8
everness_forsaken_desert_under = true
everness_forsaken_desert_under_y_max = -28939
everness_forsaken_desert_under_y_min = -29067
everness_baobab_savanna = true
everness_baobab_savanna_y_max = 194
everness_baobab_savanna_y_min = 1
everness_forsaken_tundra = true
everness_forsaken_tundra_y_max = 194
everness_forsaken_tundra_y_min = 2
everness_forsaken_tundra_beach = true
everness_forsaken_tundra_beach_y_max = 1
everness_forsaken_tundra_beach_y_min = -3
everness_forsaken_tundra_ocean = true
everness_forsaken_tundra_ocean_y_max = -4
everness_forsaken_tundra_ocean_y_min = -15
everness_forsaken_tundra_under = true
everness_forsaken_tundra_under_y_max = -28939
everness_forsaken_tundra_under_y_min = -29067
everness_feature_sneak_pickup = false
everness_feature_skybox = true

5
mods/everness/mod.conf Normal file
View file

@ -0,0 +1,5 @@
name = everness
description = Never ending discovery in Everness mapgen.
depends =
optional_depends = default, xpanes, doors, stairs, walls, x_obsidianmese, x_tumbleweed, x_farming, x_clay, mcl_core, mcl_fences, mcl_walls, mcl_stairs, mcl_util, mcl_autogroup, mcl_doors, mcl_mapgen_core, rp_default, i3, unified_inventory, sfinv
min_minetest_version = 5.6.1

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,178 @@
--[[
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.
--]]
minetest.register_alias('mapgen_water_source', 'mcl_core:water_source')
minetest.register_alias('default:dirt_with_rainforest_litter', 'mcl_core:dirt_with_grass')
minetest.register_alias('default:dirt_with_snow', 'mcl_core:dirt_with_grass_snow')
minetest.register_alias('default:dirt_with_coniferous_litter', 'mcl_core:podzol')
minetest.register_alias('default:dirt_with_grass', 'mcl_core:dirt_with_grass')
minetest.register_alias('default:stick', 'mcl_core:stick')
minetest.register_alias('default:paper', 'mcl_core:paper')
minetest.register_alias('default:book', 'mcl_books:book')
minetest.register_alias('default:skeleton_key', 'mcl_core:gold_nugget')
minetest.register_alias('default:flint', 'mcl_core:flint')
minetest.register_alias('default:obsidian_shard', 'mcl_core:prismarine_shard')
minetest.register_alias('default:clay_brick', 'mcl_core:brick')
minetest.register_alias('default:mese_crystal_fragment', 'mcl_amethyst:amethyst_shard')
-- Ingots
minetest.register_alias('default:gold_ingot', 'mcl_core:gold_ingot')
minetest.register_alias('default:bronze_ingot', 'mcl_copper:copper_ingot')
minetest.register_alias('default:tin_ingot', 'mcl_core:iron_ingot')
minetest.register_alias('default:copper_ingot', 'mcl_copper:copper_ingot')
minetest.register_alias('default:steel_ingot', 'mcl_core:iron_ingot')
minetest.register_alias('default:coal_lump', 'mcl_core:coal_lump')
-- Tools
minetest.register_alias('default:pick_stone', 'mcl_tools:pick_stone')
minetest.register_alias('default:pick_bronze', 'mcl_tools:pick_gold')
minetest.register_alias('default:pick_steel', 'mcl_tools:pick_iron')
minetest.register_alias('default:shovel_stone', 'mcl_tools:shovel_stone')
minetest.register_alias('default:shovel_bronze', 'mcl_tools:shovel_gold')
minetest.register_alias('default:shovel_steel', 'mcl_tools:shovel_iron')
minetest.register_alias('default:axe_stone', 'mcl_tools:axe_stone')
minetest.register_alias('default:axe_bronze', 'mcl_tools:axe_gold')
minetest.register_alias('default:axe_steel', 'mcl_tools:axe_iron')
minetest.register_alias('default:sword_stone', 'mcl_tools:sword_stone')
minetest.register_alias('default:sword_bronze', 'mcl_tools:sword_gold')
minetest.register_alias('default:sword_steel', 'mcl_tools:sword_iron')
-- Items / Nodes
minetest.register_alias('default:bookshelf', 'mcl_books:bookshelf')
minetest.register_alias('default:sign_wall_wood', 'mcl_signs:wall_sign')
minetest.register_alias('default:ladder_wood', 'mcl_core:ladder')
minetest.register_alias('default:ladder_steel', 'mcl_core:ladder')
minetest.register_alias('default:glass', 'mcl_core:glass')
minetest.register_alias('default:obsidian_glass', 'mcl_core:glass')
-- Trees
minetest.register_alias('default:tree', 'mcl_core:tree')
minetest.register_alias('default:jungletree', 'mcl_core:jungletree')
minetest.register_alias('default:pine_tree', 'mcl_core:sprucetree')
minetest.register_alias('default:cactus', 'mcl_core:cactus')
minetest.register_alias('default:large_cactus_seedling', 'mcl_core:cactus')
minetest.register_alias('default:papyrus', 'mcl_core:reeds')
minetest.register_alias('default:junglegrass', 'mcl_flowers:double_grass')
minetest.register_alias('default:blueberry_bush_sapling', 'mcl_flowers:rose_bush')
minetest.register_alias('default:sapling', 'mcl_core:sapling')
minetest.register_alias('default:junglesapling', 'mcl_core:junglesapling')
minetest.register_alias('default:pine_sapling', 'mcl_core:sprucesapling')
minetest.register_alias('default:acacia_sapling', 'mcl_core:acaciasapling')
minetest.register_alias('default:aspen_sapling', 'mcl_core:birchsapling')
minetest.register_alias('default:clay_lump', 'mcl_core:clay_lump')
minetest.register_alias('default:tin_lump', 'mcl_raw_ores:raw_gold')
minetest.register_alias('default:copper_lump', 'mcl_copper:raw_copper')
minetest.register_alias('default:iron_lump', 'mcl_raw_ores:raw_iron')
minetest.register_alias('default:coalblock', 'mcl_core:coalblock')
minetest.register_alias('default:steelblock', 'mcl_core:ironblock')
minetest.register_alias('default:copperblock', 'mcl_copper:block')
minetest.register_alias('default:tinblock', 'mcl_core:goldblock')
minetest.register_alias('default:bronzeblock', 'mcl_copper:block')
minetest.register_alias('default:mese', 'mesecons_torch:redstoneblock')
minetest.register_alias('default:meselamp', 'mesecons_lightstone:lightstone_off')
minetest.register_alias('default:obsidian', 'mcl_core:obsidian')
minetest.register_alias('default:mese_crystal', 'mcl_ocean:prismarine_crystals')
minetest.register_alias('default:diamond', 'mcl_core:diamond')
minetest.register_alias('default:pick_mese', 'mcl_tools:pick_diamond')
minetest.register_alias('default:shovel_mese', 'mcl_tools:shovel_diamond')
minetest.register_alias('default:axe_mese', 'mcl_tools:axe_diamond')
minetest.register_alias('default:sword_mese', 'mcl_tools:sword_diamond')
minetest.register_alias('default:snowblock', 'mcl_core:snowblock')
minetest.register_alias('default:ice', 'mcl_core:ice')
minetest.register_alias('default:torch', 'mcl_torches:torch')
minetest.register_alias('default:cobble', 'mcl_core:cobble')
minetest.register_alias('default:chest', 'mcl_chests:chest')
minetest.register_alias('default:snow', 'mcl_core:snow')
minetest.register_alias('default:stone', 'mcl_core:stone')
minetest.register_alias('default:sand', 'mcl_core:sand')
minetest.register_alias('default:gravel', 'mcl_core:gravel')
minetest.register_alias('default:stone_with_coal', 'mcl_core:stone_with_coal')
minetest.register_alias('default:stone_with_iron', 'mcl_core:stone_with_iron')
minetest.register_alias('default:stone_with_tin', 'mcl_core:stone_with_copper')
minetest.register_alias('default:stone_with_gold', 'mcl_core:stone_with_gold')
minetest.register_alias('default:stone_with_mese', 'mcl_core:stone_with_redstone')
minetest.register_alias('default:stone_with_diamond', 'mcl_core:stone_with_diamond')
minetest.register_alias('mapgen_lava_source', 'mcl_core:lava_source')
minetest.register_alias('default:mossycobble', 'mcl_core:mossycobble')
minetest.register_alias('default:clay', 'mcl_colorblocks:hardened_clay')
minetest.register_alias('default:dry_dirt_with_dry_grass', 'mcl_core:dirt_with_grass')
minetest.register_alias('default:dry_dirt', 'mcl_core:coarse_dirt')
minetest.register_alias('default:coral_skeleton', 'mcl_core:bone_block')
minetest.register_alias('default:lava_flowing', 'mcl_core:lava_flowing')
minetest.register_alias('everness:cursed_brick_with_growth_wall', 'everness:cursedbrickwithgrowthwall')
minetest.register_alias('stairs:slab_cursed_brick_with_growth', 'mcl_stairs:slab_cursed_brick_with_growth')
minetest.register_alias('default:fence_wood', 'mcl_fences:fence')
minetest.register_alias('default:torch_wall', 'mcl_torches:torch_wall')
minetest.register_alias('default:wood', 'mcl_core:wood')
minetest.register_alias('default:junglewood', 'mcl_core:junglewood')
minetest.register_alias('default:pine_wood', 'mcl_core:sprucewood')
minetest.register_alias('default:mese_post_light_pine_wood', 'mcl_torches:torch')
minetest.register_alias_force('default:acacia_tree', 'mcl_core:acaciatree')
minetest.register_alias('default:dry_grass_4', 'mcl_core:deadbush')
minetest.register_alias('default:dry_grass_2', 'mcl_core:deadbush')
minetest.register_alias('default:dry_shrub', 'mcl_core:deadbush')
minetest.register_alias('default:stonebrick', 'mcl_core:stonebrick')
minetest.register_alias('default:jungleleaves', 'mcl_core:jungleleaves')
minetest.register_alias('default:torch_ceiling', 'mcl_torches:torch_wall')
minetest.register_alias('default:goldblock', 'mcl_core:goldblock')
minetest.register_alias('stairs:stair_coral_white_sandstone', 'mcl_stairs:stair_coral_white_sandstone')
minetest.register_alias('stairs:slab_coral_white_sandstone', 'mcl_stairs:slab_coral_white_sandstone')
minetest.register_alias('stairs:stair_coral_deep_ocean_sandstone_block', 'mcl_stairs:stair_coral_deep_ocean_sandstone_block')
minetest.register_alias('stairs:slab_coral_deep_ocean_sandstone_block', 'mcl_stairs:slab_coral_deep_ocean_sandstone_block')
minetest.register_alias('stairs:slab_coral_deep_ocean_sandstone_brick', 'mcl_stairs:slab_coral_deep_ocean_sandstone_brick')
minetest.register_alias('stairs:slab_coral_sandstone_brick', 'mcl_stairs:slab_coral_sandstone_brick')
minetest.register_alias('stairs:stair_coral_deep_ocean_sandstone_brick', 'mcl_stairs:stair_coral_deep_ocean_sandstone_brick')
minetest.register_alias('stairs:stair_crystal_forest_deep_ocean_sandstone_block', 'mcl_stairs:stair_crystal_forest_deep_ocean_sandstone_block')
minetest.register_alias('stairs:stair_crystal_forest_deep_ocean_sandstone_brick', 'mcl_stairs:stair_crystal_forest_deep_ocean_sandstone_brick')
minetest.register_alias('stairs:slab_crystal_forest_deep_ocean_sandstone_block', 'mcl_stairs:slab_crystal_forest_deep_ocean_sandstone_block')
minetest.register_alias('stairs:slab_crystal_forest_deep_ocean_sandstone_brick', 'mcl_stairs:slab_crystal_forest_deep_ocean_sandstone_brick')
minetest.register_alias('stairs:stair_forsaken_desert_brick_red', 'mcl_stairs:stair_forsaken_desert_brick_red')
minetest.register_alias('stairs:stair_forsaken_desert_chiseled_stone', 'mcl_stairs:stair_forsaken_desert_chiseled_stone')
minetest.register_alias('stairs:slab_forsaken_desert_chiseled_stone', 'mcl_stairs:slab_forsaken_desert_chiseled_stone')
minetest.register_alias('stairs:stair_junglewood', 'mcl_stairs:stair_junglewood')
minetest.register_alias('stairs:slab_junglewood', 'mcl_stairs:slab_junglewood')
minetest.register_alias('stairs:slab_dry_wood', 'mcl_stairs:slab_dry_wood')
minetest.register_alias('stairs:stair_dry_wood', 'mcl_stairs:stair_dry_wood')
minetest.register_alias('stairs:stair_wood', 'mcl_stairs:stair_wood')
minetest.register_alias('stairs:slab_stonebrick', 'mcl_stairs:slab_stonebrick')
minetest.register_alias('stairs:stair_inner_wood', 'mcl_stairs:stair_wood_inner')
minetest.register_alias('stairs:stair_outer_stonebrick', 'mcl_stairs:stair_stonebrick_outer')
minetest.register_alias('stairs:stair_stonebrick', 'mcl_stairs:stair_stonebrick')
-- minetest.register_alias('stairs:stair_cobble', 'mcl_stairs:stair_cobble')
minetest.register_alias('stairs:stair_mossycobble', 'mcl_stairs:stair_mossycobble')
minetest.register_alias('stairs:stair_outer_quartz_chiseled', 'mcl_stairs:stair_quartz_chiseled_outer')
minetest.register_alias('stairs:stair_quartz_chiseled', 'mcl_stairs:stair_quartz_chiseled')
minetest.register_alias('stairs:stair_inner_quartz_chiseled', 'mcl_stairs:stair_quartz_chiseled_inner')
minetest.register_alias('stairs:slab_quartz_chiseled', 'mcl_stairs:slab_quartz_chiseled')
minetest.register_alias('stairs:stair_coral_desert_stone_block', 'mcl_stairs:stair_coral_desert_stone_block')
minetest.register_alias('everness:cursed_brick_wall', 'everness:cursedbrickwall')
minetest.register_alias('walls:cobble', 'mcl_walls:cobble')
minetest.register_alias('xpanes:trapdoor_steel_bar', 'mcl_doors:iron_trapdoor')
minetest.register_alias('doors:trapdoor_open', 'mcl_doors:trapdoor_open')
minetest.register_alias('doors:trapdoor', 'mcl_doors:trapdoor')
minetest.register_alias('doors:door_wood_a', 'mcl_doors:wooden_door')
minetest.register_alias('doors:hidden', 'air')
minetest.register_alias('everness:cobweb', 'mcl_core:cobweb')
-- Legacy - was replaced by everness:flowers_*
minetest.register_alias('flowers:rose', 'mcl_flowers:wither_rose')
minetest.register_alias('flowers:tulip', 'mcl_flowers:tulip_orange')
minetest.register_alias('flowers:dandelion_yellow', 'mcl_flowers:dandelion')
minetest.register_alias('flowers:geranium', 'mcl_flowers:allium')
minetest.register_alias('flowers:viola', 'mcl_flowers:azure_bluet')
minetest.register_alias('flowers:tulip_black', 'mcl_flowers:tulip_white')
minetest.register_alias('flowers:dandelion_white', 'mcl_flowers:tulip_pink')
minetest.register_alias('flowers:chrysanthemum_green', 'mcl_flowers:tulip_white')

View file

@ -0,0 +1,48 @@
--[[
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())
--
-- Buckets
--
if minetest.get_modpath('bucket') then
bucket.register_liquid(
'everness:mineral_water_source',
'everness:mineral_water_flowing',
'everness:bucket_mineral_water',
'everness_mtg_bucket_mineral_water.png',
S('Mineral') .. ' ' .. S('Water') .. ' ' .. S('Bucket'),
{ tool = 1, water_bucket = 1 }
)
bucket.register_liquid(
'everness:lava_source',
'everness:lava_flowing',
'everness:bucket_lava',
'everness_mtg_bucket_lava.png',
S('Lava Bucket'),
{ tool = 1 }
)
minetest.register_craft({
type = 'fuel',
recipe = 'everness:bucket_lava',
burntime = 370,
replacements = {{ 'everness:bucket_lava', 'bucket:bucket_empty' }},
})
end

View file

@ -0,0 +1,169 @@
--[[
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.
--]]
minetest.register_alias('mapgen_water_source', 'rp_mapgen_water_source')
minetest.register_alias('default:dirt_with_rainforest_litter', 'rp_default:dirt_with_grass')
minetest.register_alias('default:dirt_with_snow', 'rp_default:dirt_with_grass')
minetest.register_alias('default:dirt_with_coniferous_litter', 'rp_default:dirt_with_grass')
minetest.register_alias('default:dirt_with_grass', 'rp_default:dirt_with_grass')
minetest.register_alias('default:stick', 'rp_default:stick')
minetest.register_alias('default:paper', 'rp_default:paper')
minetest.register_alias('default:book', 'rp_default:book')
minetest.register_alias('default:skeleton_key', 'rp_default:skeleton_key')
minetest.register_alias('default:flint', 'rp_default:flint')
minetest.register_alias('default:obsidian_shard', 'rp_default:obsidian_shard')
minetest.register_alias('default:clay_brick', 'rp_default:clay_brick')
minetest.register_alias('default:mese_crystal_fragment', 'rp_default:mese_crystal_fragment')
-- Ingots
minetest.register_alias('default:gold_ingot', 'rp_default:gold_ingot')
minetest.register_alias('default:bronze_ingot', 'rp_default:bronze_ingot')
minetest.register_alias('default:tin_ingot', 'rp_default:tin_ingot')
minetest.register_alias('default:copper_ingot', 'rp_default:copper_ingot')
minetest.register_alias('default:steel_ingot', 'rp_default:steel_ingot')
minetest.register_alias('default:coal_lump', 'rp_default:coal_lump')
-- Tools
minetest.register_alias('default:pick_stone', 'rp_default:pick_stone')
minetest.register_alias('default:pick_bronze', 'rp_default:pick_bronze')
minetest.register_alias('default:pick_steel', 'rp_default:pick_steel')
minetest.register_alias('default:shovel_stone', 'rp_default:shovel_stone')
minetest.register_alias('default:shovel_bronze', 'rp_default:shovel_bronze')
minetest.register_alias('default:shovel_steel', 'rp_default:shovel_steel')
minetest.register_alias('default:axe_stone', 'rp_default:axe_stone')
minetest.register_alias('default:axe_bronze', 'rp_default:axe_bronze')
minetest.register_alias('default:axe_steel', 'rp_default:axe_steel')
minetest.register_alias('default:sword_stone', 'rp_default:sword_stone')
minetest.register_alias('default:sword_bronze', 'rp_default:sword_bronze')
minetest.register_alias('default:sword_steel', 'rp_default:sword_steel')
-- Items / Nodes
minetest.register_alias('default:bookshelf', 'rp_default:bookshelf')
minetest.register_alias('default:sign_wall_wood', 'rp_default:sign_wall_wood')
minetest.register_alias('default:ladder_wood', 'rp_default:ladder_wood')
minetest.register_alias('default:ladder_steel', 'rp_default:ladder_steel')
minetest.register_alias('default:glass', 'rp_default:glass')
minetest.register_alias('default:obsidian_glass', 'rp_default:obsidian_glass')
-- Trees
minetest.register_alias('default:tree', 'rp_default:tree')
minetest.register_alias('default:jungletree', 'rp_default:jungletree')
minetest.register_alias('default:pine_tree', 'rp_default:pine_tree')
minetest.register_alias('default:cactus', 'rp_default:cactus')
minetest.register_alias('default:large_cactus_seedling', 'rp_default:large_cactus_seedling')
minetest.register_alias('default:papyrus', 'rp_default:papyrus')
minetest.register_alias('default:junglegrass', 'rp_default:junglegrass')
minetest.register_alias('default:blueberry_bush_sapling', 'rp_default:blueberry_bush_sapling')
minetest.register_alias('default:sapling', 'rp_default:sapling')
minetest.register_alias('default:junglesapling', 'rp_default:junglesapling')
minetest.register_alias('default:pine_sapling', 'rp_default:pine_sapling')
minetest.register_alias('default:acacia_sapling', 'rp_default:acacia_sapling')
minetest.register_alias('default:aspen_sapling', 'rp_default:aspen_sapling')
minetest.register_alias('default:clay_lump', 'rp_default:clay_lump')
minetest.register_alias('default:tin_lump', 'rp_default:tin_lump')
minetest.register_alias('default:copper_lump', 'rp_default:copper_lump')
minetest.register_alias('default:iron_lump', 'rp_default:iron_lump')
minetest.register_alias('default:coalblock', 'rp_default:block_coal')
minetest.register_alias('default:steelblock', 'rp_default:steelblock')
minetest.register_alias('default:copperblock', 'rp_default:copperblock')
minetest.register_alias('default:tinblock', 'rp_default:tinblock')
minetest.register_alias('default:bronzeblock', 'rp_default:bronzeblock')
minetest.register_alias('default:mese', 'rp_default:mese')
minetest.register_alias('default:meselamp', 'rp_default:meselamp')
minetest.register_alias('default:obsidian', 'rp_default:obsidian')
minetest.register_alias('default:mese_crystal', 'rp_default:mese_crystal')
minetest.register_alias('default:diamond', 'rp_default:diamond')
minetest.register_alias('default:pick_mese', 'rp_default:pick_mese')
minetest.register_alias('default:shovel_mese', 'rp_default:shovel_mese')
minetest.register_alias('default:axe_mese', 'rp_default:axe_mese')
minetest.register_alias('default:sword_mese', 'rp_default:sword_mese')
minetest.register_alias('default:snowblock', 'rp_default:snowblock')
minetest.register_alias('default:ice', 'rp_default:ice')
minetest.register_alias('default:torch', 'rp_default:torch')
minetest.register_alias('default:cobble', 'rp_default:cobble')
minetest.register_alias('default:chest', 'rp_default:chest')
minetest.register_alias('default:snow', 'rp_default:snow')
minetest.register_alias('default:stone', 'rp_default:stone')
minetest.register_alias('default:sand', 'rp_default:sand')
minetest.register_alias('default:gravel', 'rp_default:gravel')
minetest.register_alias('default:stone_with_coal', 'rp_default:stone_with_coal')
minetest.register_alias('default:stone_with_iron', 'rp_default:stone_with_iron')
minetest.register_alias('default:stone_with_tin', 'rp_default:stone_with_tin')
minetest.register_alias('default:stone_with_gold', 'rp_default:stone_with_gold')
minetest.register_alias('default:stone_with_mese', 'rp_default:stone_with_mese')
minetest.register_alias('default:stone_with_diamond', 'rp_default:stone_with_diamond')
minetest.register_alias('mapgen_lava_source', 'rp_mapgen_water_source')
minetest.register_alias('default:mossycobble', 'rp_default:mossycobble')
minetest.register_alias('default:clay', 'rp_default:clay')
minetest.register_alias('default:dry_dirt_with_dry_grass', 'rp_default:dry_dirt_with_dry_grass')
minetest.register_alias('default:dry_dirt', 'rp_default:dry_dirt')
minetest.register_alias('default:coral_skeleton', 'everness:coral_skeleton')
minetest.register_alias('default:lava_flowing', 'rp_default:water_flowing')
minetest.register_alias('everness:cursed_brick_with_growth_wall', 'air')
minetest.register_alias('stairs:slab_cursed_brick_with_growth', 'air')
minetest.register_alias('default:fence_wood', 'rp_default:fence')
minetest.register_alias('default:torch_wall', 'rp_default:torch_wall')
minetest.register_alias('default:wood', 'rp_default:planks')
minetest.register_alias('default:junglewood', 'rp_default:junglewood')
minetest.register_alias('default:pine_wood', 'rp_default:pine_wood')
minetest.register_alias('default:mese_post_light_pine_wood', 'rp_default:mese_post_light_pine_wood')
minetest.register_alias_force('default:acacia_tree', 'rp_default:acacia_tree')
minetest.register_alias('default:dry_grass_4', 'rp_default:dry_grass_4')
minetest.register_alias('default:dry_grass_2', 'rp_default:dry_grass_2')
minetest.register_alias('default:dry_shrub', 'rp_default:dry_shrub')
minetest.register_alias('default:stonebrick', 'rp_default:stonebrick')
minetest.register_alias('default:jungleleaves', 'rp_default:jungleleaves')
minetest.register_alias('default:torch_ceiling', 'rp_default:torch_ceiling')
minetest.register_alias('default:goldblock', 'rp_default:goldblock')
minetest.register_alias('stairs:stair_coral_white_sandstone', 'mcl_stairs:stair_coral_white_sandstone')
minetest.register_alias('stairs:slab_coral_white_sandstone', 'mcl_stairs:slab_coral_white_sandstone')
minetest.register_alias('stairs:stair_coral_deep_ocean_sandstone_block', 'mcl_stairs:stair_coral_deep_ocean_sandstone_block')
minetest.register_alias('stairs:slab_coral_deep_ocean_sandstone_block', 'mcl_stairs:slab_coral_deep_ocean_sandstone_block')
minetest.register_alias('stairs:slab_coral_deep_ocean_sandstone_brick', 'mcl_stairs:slab_coral_deep_ocean_sandstone_brick')
minetest.register_alias('stairs:slab_coral_sandstone_brick', 'mcl_stairs:slab_coral_sandstone_brick')
minetest.register_alias('stairs:stair_coral_deep_ocean_sandstone_brick', 'mcl_stairs:stair_coral_deep_ocean_sandstone_brick')
minetest.register_alias('stairs:stair_crystal_forest_deep_ocean_sandstone_block', 'mcl_stairs:stair_crystal_forest_deep_ocean_sandstone_block')
minetest.register_alias('stairs:stair_crystal_forest_deep_ocean_sandstone_brick', 'mcl_stairs:stair_crystal_forest_deep_ocean_sandstone_brick')
minetest.register_alias('stairs:slab_crystal_forest_deep_ocean_sandstone_block', 'mcl_stairs:slab_crystal_forest_deep_ocean_sandstone_block')
minetest.register_alias('stairs:slab_crystal_forest_deep_ocean_sandstone_brick', 'mcl_stairs:slab_crystal_forest_deep_ocean_sandstone_brick')
minetest.register_alias('stairs:stair_forsaken_desert_brick_red', 'mcl_stairs:stair_forsaken_desert_brick_red')
minetest.register_alias('stairs:stair_forsaken_desert_chiseled_stone', 'mcl_stairs:stair_forsaken_desert_chiseled_stone')
minetest.register_alias('stairs:slab_forsaken_desert_chiseled_stone', 'mcl_stairs:slab_forsaken_desert_chiseled_stone')
minetest.register_alias('stairs:stair_junglewood', 'mcl_stairs:stair_junglewood')
minetest.register_alias('stairs:slab_junglewood', 'mcl_stairs:slab_junglewood')
minetest.register_alias('stairs:slab_dry_wood', 'mcl_stairs:slab_dry_wood')
minetest.register_alias('stairs:stair_dry_wood', 'mcl_stairs:stair_dry_wood')
minetest.register_alias('stairs:stair_wood', 'mcl_stairs:stair_wood')
minetest.register_alias('stairs:slab_stonebrick', 'mcl_stairs:slab_stonebrick')
minetest.register_alias('stairs:stair_inner_wood', 'mcl_stairs:stair_wood_inner')
minetest.register_alias('stairs:stair_outer_stonebrick', 'mcl_stairs:stair_stonebrick_outer')
minetest.register_alias('stairs:stair_stonebrick', 'mcl_stairs:stair_stonebrick')
-- minetest.register_alias('stairs:stair_cobble', 'mcl_stairs:stair_cobble')
minetest.register_alias('stairs:stair_mossycobble', 'mcl_stairs:stair_mossycobble')
minetest.register_alias('stairs:stair_outer_quartz_chiseled', 'mcl_stairs:stair_quartz_chiseled_outer')
minetest.register_alias('stairs:stair_quartz_chiseled', 'mcl_stairs:stair_quartz_chiseled')
minetest.register_alias('stairs:stair_inner_quartz_chiseled', 'mcl_stairs:stair_quartz_chiseled_inner')
minetest.register_alias('stairs:slab_quartz_chiseled', 'mcl_stairs:slab_quartz_chiseled')
minetest.register_alias('stairs:stair_coral_desert_stone_block', 'mcl_stairs:stair_coral_desert_stone_block')
minetest.register_alias('everness:cursed_brick_wall', 'everness:cursedbrickwall')
minetest.register_alias('walls:cobble', 'mcl_walls:cobble')
minetest.register_alias('xpanes:trapdoor_steel_bar', 'mcl_doors:iron_trapdoor')
minetest.register_alias('doors:trapdoor_open', 'mcl_doors:trapdoor_open')
minetest.register_alias('doors:trapdoor', 'mcl_doors:trapdoor')
minetest.register_alias('doors:door_wood_a', 'mcl_doors:wooden_door')
minetest.register_alias('doors:hidden', 'air')
minetest.register_alias('everness:cobweb', 'mcl_core:cobweb')
minetest.register_alias('fire:permanent_flame', 'air')

View file

@ -0,0 +1,257 @@
--[[
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.
--]]
--
-- Bonemeal Trees
--
x_farming.x_bonemeal:register_tree_defs({
{
-- sapling name
name = 'everness:coral_tree_sapling',
-- 1 out of `chance`, e.g. 2 = 50% chance
chance = 3,
-- grow tree from sapling
grow_tree = function(pos)
if not x_farming.x_bonemeal.is_on_soil(pos) then
return false
end
Everness.grow_coral_tree(pos)
return true
end
},
{
-- sapling name
name = 'everness:coral_tree_bioluminescent_sapling',
-- 1 out of `chance`, e.g. 2 = 50% chance
chance = 3,
-- grow tree from sapling
grow_tree = function(pos)
if not x_farming.x_bonemeal.is_on_soil(pos) then
return false
end
Everness.coral_tree_bioluminescent(pos)
return true
end
},
{
-- sapling name
name = 'everness:crystal_bush_sapling',
-- 1 out of `chance`, e.g. 2 = 50% chance
chance = 3,
-- grow tree from sapling
grow_tree = function(pos)
if not x_farming.x_bonemeal.is_on_soil(pos) then
return false
end
Everness.grow_crystal_bush(pos)
return true
end
},
{
-- sapling name
name = 'everness:cursed_bush_sapling',
-- 1 out of `chance`, e.g. 2 = 50% chance
chance = 3,
-- grow tree from sapling
grow_tree = function(pos)
if not x_farming.x_bonemeal.is_on_soil(pos) then
return false
end
Everness.grow_cursed_bush(pos)
return true
end
},
{
-- sapling name
name = 'everness:baobab_sapling',
-- 1 out of `chance`, e.g. 2 = 50% chance
chance = 3,
-- grow tree from sapling
grow_tree = function(pos)
if not x_farming.x_bonemeal.is_on_soil(pos) then
return false
end
Everness.grow_baobab_tree(pos)
return true
end
},
{
-- sapling name
name = 'everness:dry_tree_sapling',
-- 1 out of `chance`, e.g. 2 = 50% chance
chance = 3,
-- grow tree from sapling
grow_tree = function(pos)
if not x_farming.x_bonemeal.is_on_soil(pos) then
return false
end
Everness.grow_dry_tree(pos)
return true
end
},
{
-- sapling name
name = 'everness:willow_tree_sapling',
-- 1 out of `chance`, e.g. 2 = 50% chance
chance = 3,
-- grow tree from sapling
grow_tree = function(pos)
if not x_farming.x_bonemeal.is_on_soil(pos) then
return false
end
Everness.grow_willow_tree(pos)
return true
end
},
{
-- sapling name
name = 'everness:sequoia_tree_sapling',
-- 1 out of `chance`, e.g. 2 = 50% chance
chance = 3,
-- grow tree from sapling
grow_tree = function(pos)
if not x_farming.x_bonemeal.is_on_soil(pos) then
return false
end
Everness.grow_sequoia_tree(pos)
return true
end
},
{
-- sapling name
name = 'everness:crystal_tree_sapling',
-- 1 out of `chance`, e.g. 2 = 50% chance
chance = 3,
-- grow tree from sapling
grow_tree = function(pos)
if not x_farming.x_bonemeal.is_on_soil(pos) then
return false
end
Everness.grow_crystal_tree(pos)
return true
end
},
{
-- sapling name
name = 'everness:crystal_tree_large_sapling',
-- 1 out of `chance`, e.g. 2 = 50% chance
chance = 3,
-- grow tree from sapling
grow_tree = function(pos)
if not x_farming.x_bonemeal.is_on_soil(pos) then
return false
end
Everness.grow_crystal_large_tree(pos)
return true
end
},
{
-- sapling name
name = 'everness:cursed_dream_tree_sapling',
-- 1 out of `chance`, e.g. 2 = 50% chance
chance = 3,
-- grow tree from sapling
grow_tree = function(pos)
if not x_farming.x_bonemeal.is_on_soil(pos) then
return false
end
Everness.grow_cursed_dream_tree(pos)
return true
end
},
{
-- sapling name
name = 'everness:mese_tree_sapling',
-- 1 out of `chance`, e.g. 2 = 50% chance
chance = 4,
-- grow tree from sapling
grow_tree = function(pos)
if not x_farming.x_bonemeal.is_on_soil(pos) then
return false
end
Everness.grow_mese_tree(pos)
return true
end
},
{
-- sapling name
name = 'everness:palm_tree_sapling',
-- 1 out of `chance`, e.g. 2 = 50% chance
chance = 4,
-- grow tree from sapling
grow_tree = function(pos)
if not x_farming.x_bonemeal.is_on_sand(pos) then
return false
end
Everness.grow_palm_tree(pos)
return true
end
},
{
-- sapling name
name = 'everness:lava_tree_sapling',
-- 1 out of `chance`, e.g. 2 = 50% chance
chance = 4,
-- grow tree from sapling
grow_tree = function(pos)
if not x_farming.x_bonemeal.is_on_soil(pos) then
return false
end
Everness.grow_lava_tree(pos)
return true
end
},
})
--
-- Recipes
--
minetest.register_craft({
output = 'x_farming:bonemeal 4',
recipe = {
{ 'everness:bone' }
}
})

View file

@ -0,0 +1,582 @@
--[[
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 mod_start_time = minetest.get_us_time()
-- Bamboo Forest
local path_nodes_bamboo_forest = {
['everness:dirt_with_grass_1'] = {
name = 'dirt_with_grass_1',
mod_origin = 'everness',
descritption = 'Dirt with Grass Path',
drop = 'everness:dirt_1',
tiles = {
'x_obsidianmese_path_dirt_base.png^(everness_grass_top.png^[mask:x_obsidianmese_path_overlay.png)',
'x_obsidianmese_path_dirt_base.png',
'x_obsidianmese_dirt_path_side.png'
},
sounds = Everness.node_sound_dirt_defaults()
},
['everness:dirt_with_grass_extras_1'] = {
name = 'dirt_with_grass_extras_1',
mod_origin = 'everness',
descritption = 'Dirt with Grass Path',
drop = 'everness:dirt_1',
tiles = {
'x_obsidianmese_path_dirt_base.png^(everness_grass_top.png^[mask:x_obsidianmese_path_overlay.png)',
'x_obsidianmese_path_dirt_base.png',
'x_obsidianmese_dirt_path_side.png'
},
sounds = Everness.node_sound_dirt_defaults()
},
['everness:dirt_with_grass_extras_2'] = {
name = 'dirt_with_grass_extras_2',
mod_origin = 'everness',
descritption = 'Dirt with Grass Path',
drop = 'everness:dirt_1',
tiles = {
'x_obsidianmese_path_dirt_base.png^(everness_grass_top.png^[mask:x_obsidianmese_path_overlay.png)',
'x_obsidianmese_path_dirt_base.png',
'x_obsidianmese_dirt_path_side.png'
},
sounds = Everness.node_sound_dirt_defaults()
},
['everness:dirt_1'] = {
name = 'dirt_1',
mod_origin = 'everness',
descritption = 'Dirt Path',
drop = 'everness:dirt_1',
tiles = {
'x_obsidianmese_path_dirt_base.png^(everness_dirt.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png',
'x_obsidianmese_dirt_path_side.png'
},
sounds = Everness.node_sound_dirt_defaults()
}
}
local path_nodes_baobab_savanna = {
['everness:dry_dirt_with_dry_grass'] = {
name = 'dry_dirt_with_dry_grass',
mod_origin = 'everness',
descritption = 'Dry Dirt with Dry Grass Path',
drop = 'everness:dry_dirt',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#B88C5E:127^(everness_dry_grass_top.png^[mask:x_obsidianmese_path_overlay.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#B88C5E:127',
'x_obsidianmese_dirt_path_side.png^[colorize:#B88C5E:127'
},
sounds = Everness.node_sound_dirt_defaults()
},
['everness:dry_dirt'] = {
name = 'dry_dirt',
mod_origin = 'everness',
descritption = 'Dry Dirt Path',
drop = 'everness:dry_dirt',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#B88C5E:127^(everness_dry_dirt.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#B88C5E:127',
'x_obsidianmese_dirt_path_side.png^[colorize:#B88C5E:127'
},
sounds = Everness.node_sound_dirt_defaults()
}
}
-- Crystal Forest
local path_nodes_crystal_forest = {
['everness:dirt_with_crystal_grass'] = {
name = 'dirt_with_crystal_grass',
mod_origin = 'everness',
descritption = 'Dirt with Crystal Grass Path',
drop = 'everness:crystal_dirt',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#755069:127^(everness_crystal_grass.png^[mask:x_obsidianmese_path_overlay.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#755069:127',
'x_obsidianmese_dirt_path_side.png^[colorize:#755069:127'
},
sounds = Everness.node_sound_dirt_defaults()
},
['everness:crystal_dirt'] = {
name = 'crystal_dirt',
mod_origin = 'everness',
descritption = 'Crystal Dirt Path',
drop = 'everness:crystal_dirt',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#755069:127^(everness_crystal_dirt.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#755069:127',
'x_obsidianmese_dirt_path_side.png^[colorize:#755069:127'
},
sounds = Everness.node_sound_dirt_defaults()
},
}
local path_nodes_crystal_forest_dunes = {
['everness:crystal_sand'] = {
name = 'crystal_sand',
mod_origin = 'everness',
descritption = 'Crystal Sand Path',
drop = 'everness:crystal_sand',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#845D88:170^(everness_crystal_sand.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#845D88:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#845D88:170'
},
sounds = Everness.node_sound_sand_defaults()
},
}
local path_nodes_crystal_forest_shore = {
['everness:crystal_sand'] = {
name = 'crystal_sand',
mod_origin = 'everness',
descritption = 'Crystal Sand Path',
drop = 'everness:crystal_sand',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#845D88:170^(everness_crystal_sand.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#845D88:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#845D88:170'
},
sounds = Everness.node_sound_sand_defaults()
},
}
local path_nodes_crystal_forest_ocean = {
['everness:crystal_sand'] = {
name = 'crystal_sand',
mod_origin = 'everness',
descritption = 'Crystal Sand Path',
drop = 'everness:crystal_sand',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#845D88:170^(everness_crystal_sand.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#845D88:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#845D88:170'
},
sounds = Everness.node_sound_sand_defaults()
},
}
local path_nodes_crystal_forest_under = {
['everness:crystal_cave_dirt_with_moss'] = {
name = 'crystal_cave_dirt_with_moss',
mod_origin = 'everness',
descritption = 'Crystal Cave Dirt with Moss Path',
drop = 'everness:crystal_cave_dirt',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#EEDDB2:127^(everness_crystal_cave_dirt_top.png^[mask:x_obsidianmese_path_overlay.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#EEDDB2:127',
'x_obsidianmese_dirt_path_side.png^[colorize:#EEDDB2:127'
},
sounds = Everness.node_sound_dirt_defaults()
},
['everness:crystal_cave_dirt'] = {
name = 'crystal_cave_dirt',
mod_origin = 'everness',
descritption = 'Crystal Cave Dirt',
drop = 'everness:crystal_cave_dirt',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#EEDDB2:127^(everness_crystal_cave_dirt.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#EEDDB2:127',
'x_obsidianmese_dirt_path_side.png^[colorize:#EEDDB2:127'
},
sounds = Everness.node_sound_dirt_defaults()
},
}
-- Forsaken Tundra
local path_nodes_forsaken_tundra = {
['everness:forsaken_tundra_dirt_with_grass'] = {
name = 'forsaken_tundra_dirt_with_grass',
mod_origin = 'everness',
descritption = 'Forsaken Tundra Dirt with Grass Path',
drop = 'everness:forsaken_tundra_dirt_with_grass',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#151611:170^(everness_forsaken_tundra_grass.png^[mask:x_obsidianmese_path_overlay.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#151611:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#151611:170'
},
sounds = Everness.node_sound_dirt_defaults()
},
['everness:forsaken_tundra_dirt'] = {
name = 'forsaken_tundra_dirt',
mod_origin = 'everness',
descritption = 'Forsaken Tundra Dirt Path',
drop = 'everness:forsaken_tundra_dirt',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#151611:170^(everness_forsaken_tundra_dirt.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#151611:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#151611:170'
},
sounds = Everness.node_sound_dirt_defaults()
},
['everness:forsaken_tundra_beach_sand'] = {
name = 'forsaken_tundra_beach_sand',
mod_origin = 'everness',
descritption = 'Forsaken Tundra Beach Sand Path',
drop = 'everness:forsaken_tundra_beach_sand',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#4C4341:170^(everness_forsaken_tundra_beach_sand.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#4C4341:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#4C4341:170'
},
sounds = Everness.node_sound_sand_defaults()
},
}
local path_nodes_forsaken_tundra_beach = {
['everness:forsaken_tundra_beach_sand'] = {
name = 'forsaken_tundra_beach_sand',
mod_origin = 'everness',
descritption = 'Forsaken Tundra Beach Sand Path',
drop = 'everness:forsaken_tundra_beach_sand',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#4C4341:170^(everness_forsaken_tundra_beach_sand.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#4C4341:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#4C4341:170'
},
sounds = Everness.node_sound_sand_defaults()
},
['everness:forsaken_tundra_beach_sand_with_shells'] = {
name = 'forsaken_tundra_beach_sand_with_shells',
mod_origin = 'everness',
descritption = 'Forsaken Tundra Beach Sand with Shells',
drop = 'everness:forsaken_tundra_beach_sand_with_shells',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#4C4341:170^(everness_forsaken_tundra_beach_sand_with_shells.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#4C4341:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#4C4341:170'
},
sounds = Everness.node_sound_sand_defaults()
},
}
local path_nodes_forsaken_tundra_ocean = {
['everness:forsaken_tundra_beach_sand'] = {
name = 'forsaken_tundra_beach_sand',
mod_origin = 'everness',
descritption = 'Forsaken Tundra Beach Sand Path',
drop = 'everness:forsaken_tundra_beach_sand',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#4C4341:170^(everness_forsaken_tundra_beach_sand.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#4C4341:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#4C4341:170'
},
sounds = Everness.node_sound_sand_defaults()
},
['everness:forsaken_tundra_beach_sand_with_shells'] = {
name = 'forsaken_tundra_beach_sand_with_shells',
mod_origin = 'everness',
descritption = 'Forsaken Tundra Beach Sand with Shells',
drop = 'everness:forsaken_tundra_beach_sand_with_shells',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#4C4341:170^(everness_forsaken_tundra_beach_sand_with_shells.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#4C4341:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#4C4341:170'
},
sounds = Everness.node_sound_sand_defaults()
},
}
-- Forsaken Desert
local path_nodes_forsaken_desert = {
['everness:forsaken_desert_sand'] = {
name = 'forsaken_desert_sand',
mod_origin = 'everness',
descritption = 'Forsaken Desert Sand Path',
drop = 'everness:forsaken_desert_sand',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#D1906A:170^(everness_forsaken_desert_sand.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#D1906A:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#D1906A:170'
},
sounds = Everness.node_sound_sand_defaults()
}
}
local path_nodes_forsaken_desert_ocean = {
['everness:dry_ocean_dirt'] = {
name = 'dry_ocean_dirt',
mod_origin = 'everness',
descritption = 'Dry Ocean Dirt Path',
drop = 'everness:dry_ocean_dirt',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#AB7D54:127^(everness_forsaken_desert_dry_ocean_dirt.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#AB7D54:127',
'x_obsidianmese_dirt_path_side.png^[colorize:#AB7D54:127'
},
sounds = Everness.node_sound_dirt_defaults()
}
}
local path_nodes_forsaken_desert_under = {
['everness:forsaken_desert_sand'] = {
name = 'forsaken_desert_sand',
mod_origin = 'everness',
descritption = 'Forsaken Desert Sand Path',
drop = 'everness:forsaken_desert_sand',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#D1906A:170^(everness_forsaken_desert_sand.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#D1906A:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#D1906A:170'
},
sounds = Everness.node_sound_sand_defaults()
}
}
-- Cursed Lands
local path_nodes_cursed_lands_and_dunes_ocean = {
['everness:dirt_with_cursed_grass'] = {
name = 'dirt_with_cursed_grass',
mod_origin = 'everness',
descritption = 'Dirt with Cursed Grass Path',
drop = 'everness:cursed_dirt',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#696151:170^(everness_cursed_grass.png^[mask:x_obsidianmese_path_overlay.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#696151:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#696151:170'
},
sounds = Everness.node_sound_mud_defaults()
},
['everness:cursed_dirt'] = {
name = 'cursed_dirt',
mod_origin = 'everness',
descritption = 'Cursed Dirt Path',
drop = 'everness:cursed_dirt',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#696151:170^(everness_cursed_dirt.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#696151:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#696151:170'
},
sounds = Everness.node_sound_mud_defaults()
},
['everness:cursed_sand'] = {
name = 'cursed_sand',
mod_origin = 'everness',
descritption = 'Cursed Sand Path',
drop = 'everness:cursed_sand',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#856F58:170^(everness_cursed_sand.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#856F58:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#856F58:170'
},
sounds = Everness.node_sound_sand_defaults()
},
}
-- Coral Forest
local path_nodes_coral_forest_and_dunes = {
['everness:dirt_with_coral_grass'] = {
name = 'dirt_with_coral_grass',
mod_origin = 'everness',
descritption = 'Dirt with Coral Grass Path',
drop = 'everness:coral_dirt',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#AA683F:127^(everness_coral_grass.png^[mask:x_obsidianmese_path_overlay.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#AA683F:127',
'x_obsidianmese_dirt_path_side.png^[colorize:#AA683F:127'
},
sounds = Everness.node_sound_dirt_defaults()
},
['everness:coral_dirt'] = {
name = 'coral_dirt',
mod_origin = 'everness',
descritption = 'Coral Dirt Path',
drop = 'everness:coral_dirt',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#AA683F:127^(everness_coral_dirt.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#AA683F:127',
'x_obsidianmese_dirt_path_side.png^[colorize:#AA683F:127'
},
sounds = Everness.node_sound_dirt_defaults()
},
['everness:coral_sand'] = {
name = 'coral_sand',
mod_origin = 'everness',
descritption = 'Coral Sand Path',
drop = 'everness:coral_sand',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#AB633D:170^(everness_coral_sand.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#AB633D:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#AB633D:170'
},
sounds = Everness.node_sound_sand_defaults()
},
['everness:coral_white_sand'] = {
name = 'coral_white_sand',
mod_origin = 'everness',
descritption = 'Coral White Sand Path',
drop = 'everness:coral_white_sand',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#F9F4FB:170^(everness_coral_white_sand.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#F9F4FB:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#F9F4FB:170'
},
sounds = Everness.node_sound_sand_defaults()
},
}
local path_nodes_coral_forest_ocean = {
['everness:coral_white_sand'] = {
name = 'coral_white_sand',
mod_origin = 'everness',
descritption = 'Coral White Sand Path',
drop = 'everness:coral_white_sand',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#F9F4FB:170^(everness_coral_white_sand.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#F9F4FB:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#F9F4FB:170'
},
sounds = Everness.node_sound_sand_defaults()
},
}
-- Frosted Icesheet
local path_nodes_frosted_icesheet = {
['everness:frosted_snowblock'] = {
name = 'frosted_snowblock',
mod_origin = 'everness',
descritption = 'Frosted Snow Block Path',
drop = 'everness:frosted_snowblock',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#FCFCFC:170^(everness_frosted_snow.png^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#FCFCFC:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#FCFCFC:170'
},
sounds = Everness.node_sound_snow_defaults()
},
}
-- Mineral Waters
local path_nodes_mineral_waters = {
['everness:mineral_sand'] = {
name = 'mineral_sand',
mod_origin = 'everness',
descritption = 'Mineral Sand Path',
drop = 'everness:mineral_sand',
tiles = {
'x_obsidianmese_path_dirt_base.png^[colorize:#E0CEBB:170^(everness_mineral_sand.png^[sheet:2x2:1,1^[mask:x_obsidianmese_path_overlay_2.png)',
'x_obsidianmese_path_dirt_base.png^[colorize:#E0CEBB:170',
'x_obsidianmese_dirt_path_side.png^[colorize:#E0CEBB:170'
},
sounds = Everness.node_sound_sand_defaults()
},
}
-- Bamboo Forest
if Everness.settings.biomes.everness_bamboo_forest.enabled then
x_obsidianmese:register_path_node(path_nodes_bamboo_forest)
end
-- Baobab Savanna
if Everness.settings.biomes.everness_baobab_savanna.enabled then
x_obsidianmese:register_path_node(path_nodes_baobab_savanna)
end
-- Crystal Forest
if Everness.settings.biomes.everness_crystal_forest.enabled then
x_obsidianmese:register_path_node(path_nodes_crystal_forest)
end
if Everness.settings.biomes.everness_crystal_forest_dunes.enabled then
x_obsidianmese:register_path_node(path_nodes_crystal_forest_dunes)
end
if Everness.settings.biomes.everness_crystal_forest_shore.enabled then
x_obsidianmese:register_path_node(path_nodes_crystal_forest_shore)
end
if Everness.settings.biomes.everness_crystal_forest_ocean.enabled then
x_obsidianmese:register_path_node(path_nodes_crystal_forest_ocean)
end
if Everness.settings.biomes.everness_crystal_forest_under.enabled then
x_obsidianmese:register_path_node(path_nodes_crystal_forest_under)
end
-- Forsaken Tundra
if Everness.settings.biomes.everness_forsaken_tundra.enabled then
x_obsidianmese:register_path_node(path_nodes_forsaken_tundra)
end
if Everness.settings.biomes.everness_forsaken_tundra_beach.enabled then
x_obsidianmese:register_path_node(path_nodes_forsaken_tundra_beach)
end
if Everness.settings.biomes.everness_forsaken_tundra_ocean.enabled then
x_obsidianmese:register_path_node(path_nodes_forsaken_tundra_ocean)
end
-- Cursed Lands
if Everness.settings.biomes.everness_cursed_lands.enabled
or Everness.settings.biomes.everness_cursed_lands_dunes.enabled
or Everness.settings.biomes.everness_cursed_lands_ocean.enabled
then
x_obsidianmese:register_path_node(path_nodes_cursed_lands_and_dunes_ocean)
end
-- Coral Forest
if Everness.settings.biomes.everness_coral_forest.enabled
or Everness.settings.biomes.everness_coral_forest_dunes.enabled
then
x_obsidianmese:register_path_node(path_nodes_coral_forest_and_dunes)
end
if Everness.settings.biomes.everness_coral_forest_ocean.enabled then
x_obsidianmese:register_path_node(path_nodes_coral_forest_ocean)
end
-- Forsaken Desert
if Everness.settings.biomes.everness_forsaken_desert.enabled then
x_obsidianmese:register_path_node(path_nodes_forsaken_desert)
end
if Everness.settings.biomes.everness_forsaken_desert_ocean.enabled then
x_obsidianmese:register_path_node(path_nodes_forsaken_desert_ocean)
end
if Everness.settings.biomes.everness_forsaken_desert_under.enabled then
x_obsidianmese:register_path_node(path_nodes_forsaken_desert_under)
end
-- Frosted Icesheet
if Everness.settings.biomes.everness_frosted_icesheet.enabled then
x_obsidianmese:register_path_node(path_nodes_frosted_icesheet)
end
-- Mineral Waters
if Everness.settings.biomes.everness_mineral_waters.enabled then
x_obsidianmese:register_path_node(path_nodes_mineral_waters)
end
local mod_end_time = (minetest.get_us_time() - mod_start_time) / 1000000
print('[Mod] everness: x_obsidianmese support loaded.. [' .. mod_end_time .. 's]')

View file

@ -0,0 +1,43 @@
--[[
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 mod_start_time = minetest.get_us_time()
local allowed_biomes = {}
if Everness.settings.biomes.everness_forsaken_desert.enabled then
table.insert(allowed_biomes, 'everness:forsaken_desert')
end
if Everness.settings.biomes.everness_forsaken_desert_ocean.enabled then
table.insert(allowed_biomes, 'everness:forsaken_desert_ocean')
end
if Everness.settings.biomes.everness_forsaken_desert_under.enabled then
table.insert(allowed_biomes, 'everness:forsaken_desert_under')
end
if Everness.settings.biomes.everness_baobab_savanna.enabled then
table.insert(allowed_biomes, 'everness:baobab_savanna')
end
if #allowed_biomes > 0 then
XTumbleweed:add_allowed_biomes(allowed_biomes)
end
local mod_end_time = (minetest.get_us_time() - mod_start_time) / 1000000
print('[Mod] everness: x_tumbleweed support loaded.. [' .. mod_end_time .. 's]')

View file

@ -0,0 +1,555 @@
# Blender v2.83.20 OBJ File: 'everness_barrel_cactus.blend'
# www.blender.org
mtllib everness_barrel_cactus.mtl
o barrel_cactus.vox
v -0.312500 -0.499000 0.312500
v -0.250000 -0.374000 0.500000
v -0.250000 -0.374000 0.375000
v -0.375000 -0.374000 0.375000
v -0.375000 -0.374000 -0.375000
v -0.250000 -0.249000 0.500000
v -0.375000 -0.249000 0.375000
v -0.500000 -0.249000 -0.250000
v -0.250000 -0.249000 -0.500000
v -0.500000 -0.249000 0.250000
v -0.375000 -0.249000 -0.500000
v -0.375000 0.126000 0.500000
v -0.500000 0.126000 0.375000
v -0.500000 0.126000 0.250000
v -0.500000 0.126000 -0.375000
v -0.375000 0.126000 -0.375000
v -0.500000 0.251000 -0.250000
v -0.375000 0.251000 -0.250000
v -0.375000 0.251000 -0.375000
v -0.312500 0.376000 0.312500
v 0.312500 -0.374000 -0.312500
v 0.250000 -0.374000 0.500000
v 0.250000 -0.374000 0.375000
v 0.500000 -0.374000 -0.250000
v 0.250000 -0.374000 -0.500000
v 0.375000 -0.249000 0.250000
v 0.375000 -0.249000 -0.250000
v 0.250000 -0.249000 -0.500000
v 0.375000 -0.249000 0.375000
v 0.500000 -0.249000 -0.250000
v 0.375000 -0.249000 -0.375000
v 0.375000 -0.249000 -0.500000
v 0.500000 0.126000 0.250000
v 0.250000 0.126000 0.500000
v 0.250000 0.126000 0.375000
v 0.375000 0.126000 0.375000
v 0.500000 0.126000 -0.250000
v 0.375000 0.126000 -0.250000
v 0.250000 0.126000 -0.375000
v 0.250000 0.251000 0.500000
v 0.375000 0.251000 0.375000
v 0.375000 0.251000 0.250000
v 0.500000 0.251000 0.250000
v 0.500000 0.251000 -0.250000
v 0.375000 0.251000 -0.375000
v 0.250000 0.251000 -0.500000
v 0.312500 0.251000 0.312500
v 0.312500 0.376000 0.312500
v 0.312500 0.376000 -0.312500
v 0.312500 -0.374000 0.312500
v 0.375000 -0.374000 0.375000
v 0.375000 -0.374000 0.250000
v 0.500000 -0.374000 0.250000
v 0.250000 -0.249000 0.375000
v -0.375000 -0.249000 0.250000
v 0.500000 -0.249000 0.250000
v 0.375000 -0.249000 0.500000
v -0.500000 -0.249000 0.375000
v -0.250000 0.126000 0.500000
v -0.375000 0.126000 0.375000
v 0.500000 0.126000 0.375000
v 0.375000 0.126000 0.250000
v -0.250000 0.251000 0.500000
v -0.250000 0.251000 0.375000
v -0.500000 0.251000 0.250000
v 0.312500 -0.499000 -0.312500
v -0.375000 -0.374000 -0.250000
v 0.375000 -0.374000 -0.375000
v -0.250000 -0.249000 -0.375000
v 0.250000 -0.249000 -0.375000
v -0.500000 -0.249000 -0.375000
v -0.375000 0.126000 -0.500000
v 0.250000 0.126000 -0.500000
v 0.375000 0.126000 -0.500000
v -0.250000 0.126000 -0.375000
v -0.250000 0.126000 -0.500000
v -0.312500 0.251000 -0.312500
v 0.312500 0.251000 -0.312500
v -0.312500 0.376000 -0.312500
v 0.312500 -0.499000 0.312500
v -0.312500 -0.499000 -0.312500
v -0.312500 -0.374000 0.312500
v -0.500000 -0.374000 0.250000
v -0.375000 -0.374000 0.250000
v -0.500000 -0.374000 -0.250000
v 0.375000 -0.374000 -0.250000
v -0.312500 -0.374000 -0.312500
v -0.250000 -0.374000 -0.375000
v 0.250000 -0.374000 -0.375000
v -0.250000 -0.374000 -0.500000
v -0.375000 -0.249000 0.500000
v 0.250000 -0.249000 0.500000
v -0.250000 -0.249000 0.375000
v 0.500000 -0.249000 0.375000
v -0.375000 -0.249000 -0.250000
v 0.500000 -0.249000 -0.375000
v -0.375000 -0.249000 -0.375000
v 0.375000 0.126000 0.500000
v -0.250000 0.126000 0.375000
v -0.375000 0.126000 0.250000
v -0.500000 0.126000 -0.250000
v -0.375000 0.126000 -0.250000
v 0.375000 0.126000 -0.375000
v 0.500000 0.126000 -0.375000
v 0.250000 0.251000 0.375000
v -0.375000 0.251000 0.375000
v -0.312500 0.251000 0.312500
v -0.375000 0.251000 0.250000
v 0.375000 0.251000 -0.250000
v 0.250000 0.251000 -0.375000
v -0.250000 0.251000 -0.375000
v -0.250000 0.251000 -0.500000
v 0.353553 1.375998 0.353553
v 0.353553 0.375999 0.353553
v -0.353553 1.375998 -0.353553
v -0.353553 0.375998 -0.353553
v 0.353553 1.375998 -0.353553
v 0.353553 0.375998 -0.353553
v -0.353553 1.375998 0.353553
v -0.353553 0.375998 0.353553
vt 0.000000 0.375000
vt 0.062500 0.375000
vt 0.062500 0.437500
vt 0.000000 0.437500
vt 0.093750 0.406250
vt 0.406250 0.406250
vt 0.437500 0.437500
vt 0.375000 0.437500
vt 0.375000 0.500000
vt 0.125000 0.500000
vt 0.125000 0.437500
vt 0.062500 0.437500
vt 0.062500 0.375000
vt 0.062500 0.000000
vt 0.125000 0.000000
vt 0.125000 0.062500
vt 0.062500 0.062500
vt 0.000000 0.062500
vt 0.062500 0.125000
vt 0.000000 0.125000
vt 0.500000 0.625000
vt 0.437500 0.625000
vt 0.437500 0.562500
vt 0.500000 0.562500
vt 0.500000 0.625000
vt 0.437500 0.625000
vt 0.437500 0.562500
vt 0.500000 0.562500
vt 0.500000 0.625000
vt 0.500000 0.812500
vt 0.437500 0.812500
vt 0.437500 0.625000
vt 0.406250 0.093750
vt 0.406250 0.406250
vt 0.093750 0.406250
vt 0.093750 0.093750
vt 0.500000 0.125000
vt 0.437500 0.125000
vt 0.437500 0.062500
vt 0.500000 0.062500
vt 0.062500 0.625000
vt 0.062500 0.562500
vt 0.125000 0.562500
vt 0.125000 0.625000
vt 0.125000 0.812500
vt 0.125000 0.875000
vt 0.062500 0.875000
vt 0.062500 0.812500
vt 0.500000 0.812500
vt 0.500000 0.875000
vt 0.437500 0.875000
vt 0.437500 0.812500
vt 0.437500 0.125000
vt 0.437500 0.062500
vt 0.500000 0.062500
vt 0.500000 0.125000
vt 0.093750 0.406250
vt 0.406250 0.406250
vt 0.375000 0.437500
vt 0.375000 0.500000
vt 0.125000 0.500000
vt 0.125000 0.437500
vt 0.062500 0.437500
vt 0.062500 0.375000
vt 0.000000 0.375000
vt 0.000000 0.125000
vt 0.062500 0.125000
vt 0.093750 0.093750
vt 0.062500 0.812500
vt 0.062500 0.875000
vt 0.000000 0.875000
vt 0.000000 0.812500
vt 0.062500 0.812500
vt 0.062500 0.875000
vt 0.000000 0.875000
vt 0.000000 0.812500
vt 0.437500 0.875000
vt 0.375000 0.875000
vt 0.375000 0.812500
vt 0.437500 0.812500
vt 0.437500 0.625000
vt 0.375000 0.625000
vt 0.375000 0.562500
vt 0.437500 0.562500
vt 0.125000 0.562500
vt 0.125000 0.625000
vt 0.062500 0.625000
vt 0.062500 0.562500
vt 0.062500 0.625000
vt 0.000000 0.625000
vt 0.000000 0.562500
vt 0.062500 0.562500
vt 0.062500 0.437500
vt 0.125000 0.437500
vt 0.125000 0.500000
vt 0.062500 0.500000
vt -0.000000 0.875000
vt -0.000000 0.812500
vt 0.062500 0.812500
vt 0.062500 0.875000
vt 0.062500 0.375000
vt 0.000000 0.437500
vt 0.000000 0.375000
vt 0.437500 0.375000
vt 0.500000 0.375000
vt 0.500000 0.437500
vt 0.437500 0.437500
vt 0.000000 0.875000
vt 0.000000 0.812500
vt 0.062500 0.812500
vt 0.062500 0.875000
vt 0.062500 0.562500
vt 0.062500 0.625000
vt -0.000000 0.625000
vt -0.000000 0.562500
vt 0.500000 0.875000
vt 0.437500 0.875000
vt 0.437500 0.812500
vt 0.500000 0.812500
vt 0.375000 0.500000
vt 0.375000 0.437500
vt 0.437500 0.500000
vt 0.125000 0.812500
vt 0.125000 0.875000
vt 0.062500 0.875000
vt 0.062500 0.812500
vt 0.375000 0.812500
vt 0.437500 0.875000
vt 0.375000 0.875000
vt 0.406250 0.562500
vt 0.093750 0.562500
vt 0.093750 0.500000
vt 0.406250 0.500000
vt 0.406250 0.937500
vt 0.093750 0.937500
vt 0.093750 0.875000
vt 0.406250 0.875000
vt 0.062500 0.625000
vt 0.125000 0.625000
vt 0.125000 0.562500
vt 0.375000 0.562500
vt 0.375000 0.625000
vt 0.437500 0.625000
vt 0.437500 0.812500
vt 0.375000 0.812500
vt 0.375000 0.875000
vt 0.125000 0.875000
vt 0.125000 0.812500
vt 0.062500 0.812500
vt 0.375000 0.875000
vt 0.375000 0.812500
vt 0.437500 0.812500
vt 0.437500 0.875000
vt 0.500000 0.625000
vt 0.500000 0.812500
vt 0.125000 0.062500
vt 0.125000 0.000000
vt 0.375000 0.000000
vt 0.375000 0.062500
vt 0.437500 0.062500
vt 0.437500 0.125000
vt 0.500000 0.125000
vt 0.500000 0.375000
vt 0.437500 0.375000
vt 0.437500 0.437500
vt 0.406250 0.093750
vt 0.062500 0.062500
vt 0.125000 0.000000
vt 0.125000 0.062500
vt 0.062500 0.062500
vt 0.062500 0.000000
vt 0.062500 0.500000
vt 0.125000 0.437500
vt 0.125000 0.500000
vt 0.093750 0.562500
vt 0.093750 0.500000
vt 0.406250 0.500000
vt 0.406250 0.562500
vt 0.125000 0.812500
vt 0.125000 0.875000
vt 0.062500 0.875000
vt 0.062500 0.812500
vt 0.375000 0.625000
vt 0.375000 0.562500
vt 0.437500 0.562500
vt 0.500000 0.812500
vt 0.500000 0.875000
vt 0.437500 0.875000
vt 0.437500 0.812500
vt 0.000000 0.812500
vt 0.000000 0.625000
vt 0.062500 0.625000
vt 0.125000 0.625000
vt 0.062500 0.625000
vt 0.062500 0.562500
vt 0.125000 0.562500
vt 0.437500 0.437500
vt 0.437500 0.375000
vt 0.500000 0.375000
vt 0.500000 0.437500
vt 0.093750 0.875000
vt 0.406250 0.875000
vt 0.406250 0.937500
vt 0.093750 0.937500
vt 0.062500 0.125000
vt 0.000000 0.125000
vt 0.000000 0.062500
vt 0.406250 0.500000
vt 0.406250 0.562500
vt 0.093750 0.562500
vt 0.093750 0.500000
vt 0.375000 0.000000
vt 0.437500 0.000000
vt 0.375000 0.062500
vt 0.500000 0.625000
vt 0.437500 0.625000
vt 0.437500 0.562500
vt 0.500000 0.562500
vt 0.500000 0.625000
vt 0.437500 0.625000
vt 0.437500 0.562500
vt 0.500000 0.562500
vt 0.000000 0.812500
vt 0.000000 0.625000
vt 0.437500 0.500000
vt 0.375000 0.500000
vt 0.375000 0.437500
vt 0.125000 0.812500
vt 0.125000 0.875000
vt 0.062500 0.875000
vt 0.062500 0.812500
vt 0.375000 0.062500
vt 0.375000 0.000000
vt 0.437500 0.000000
vt 0.437500 0.875000
vt 0.437500 0.812500
vt 0.500000 0.812500
vt 0.500000 0.875000
vt 0.062500 0.625000
vt 0.000000 0.625000
vt 0.000000 0.562500
vt 0.062500 0.562500
vt 0.000000 0.812500
vt 0.000000 0.625000
vt 0.375000 0.562500
vt 0.375000 0.625000
vt 0.437500 0.625000
vt 0.437500 0.812500
vt 0.375000 0.812500
vt 0.375000 0.875000
vt 0.125000 0.875000
vt 0.125000 0.812500
vt 0.062500 0.812500
vt 0.062500 0.625000
vt 0.125000 0.625000
vt 0.125000 0.562500
vt 0.500000 0.625000
vt 0.500000 0.812500
vt 0.437500 0.812500
vt 0.437500 0.625000
vt 0.375000 0.812500
vt 0.375000 0.875000
vt 0.125000 0.875000
vt 0.125000 0.812500
vt 0.062500 0.812500
vt 0.062500 0.625000
vt 0.125000 0.625000
vt 0.125000 0.562500
vt 0.375000 0.562500
vt 0.375000 0.625000
vt 0.437500 0.625000
vt 0.437500 0.812500
vt 0.406250 0.093750
vt 0.406250 0.406250
vt 0.093750 0.406250
vt 0.093750 0.093750
vt 0.406250 0.875000
vt 0.406250 0.937500
vt 0.093750 0.937500
vt 0.093750 0.875000
vt 0.125000 0.625000
vt 0.062500 0.562500
vt 0.125000 0.562500
vt 0.437500 0.125000
vt 0.500000 0.125000
vt 0.500000 0.375000
vt 0.437500 0.375000
vt 0.406250 0.093750
vt 0.093750 0.093750
vt 0.000000 0.375000
vt 0.000000 0.125000
vt 0.062500 0.125000
vt 0.062500 0.062500
vt 0.125000 0.062500
vt 0.125000 0.000000
vt 0.375000 0.000000
vt 0.375000 0.062500
vt 0.437500 0.062500
vt 0.437500 0.625000
vt 0.375000 0.625000
vt 0.375000 0.562500
vt 0.437500 0.562500
vt 0.437500 0.875000
vt 0.375000 0.875000
vt 0.375000 0.812500
vt 0.500000 0.625000
vt 0.500000 0.812500
vt -0.000000 0.812500
vt -0.000000 0.625000
vt 0.062500 0.625000
vt 0.000000 0.625000
vt 0.000000 0.562500
vt 0.062500 0.562500
vt 0.375000 0.625000
vt 0.375000 0.562500
vt 0.437500 0.562500
vt 0.406250 0.937500
vt 0.093750 0.937500
vt 0.093750 0.875000
vt 0.406250 0.875000
vt 0.375000 0.812500
vt 0.375000 0.875000
vt 0.125000 0.875000
vt 0.125000 0.812500
vt 0.062500 0.812500
vt 0.062500 0.625000
vt 0.125000 0.625000
vt 0.125000 0.562500
vt 0.375000 0.562500
vt 0.375000 0.625000
vt 0.437500 0.625000
vt 0.437500 0.812500
vt 0.093750 0.562500
vt 0.093750 0.500000
vt 0.406250 0.500000
vt 0.406250 0.562500
vt 0.500000 1.000000
vt 0.500000 0.500000
vt 1.000000 0.500000
vt 1.000000 1.000000
vt 0.500000 1.000000
vt 0.500000 0.500000
vt 1.000000 0.500000
vt 1.000000 1.000000
vn 0.0000 1.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 0.0000 -1.0000
vn 0.7071 0.0000 -0.7071
vn -0.7071 -0.0000 -0.7071
g barrel_cactus.vox_barrel_cactus.vox_cactus
usemtl cactus
s off
f 101/1/1 102/2/1 16/3/1 15/4/1
f 77/5/1 78/6/1 45/7/1 110/8/1 46/9/1 112/10/1 111/11/1 19/12/1 18/13/1
f 11/14/2 9/15/2 69/16/2 97/17/2
f 71/18/2 97/17/2 95/19/2 8/20/2
f 6/21/3 93/22/3 3/23/3 2/24/3
f 28/25/4 70/26/4 89/27/4 25/28/4
f 94/29/5 61/30/5 36/31/5 29/32/5
f 66/33/2 80/34/2 1/35/2 81/36/2
f 30/37/2 27/38/2 31/39/2 96/40/2
f 31/41/6 68/42/6 89/43/6 70/44/6
f 102/45/3 18/46/3 19/47/3 16/48/3
f 33/49/5 43/50/5 42/51/5 62/52/5
f 62/53/1 36/54/1 61/55/1 33/56/1
f 82/57/2 50/58/2 23/59/2 22/60/2 2/61/2 3/62/2 4/63/2 84/64/2 83/65/2 85/66/2 67/67/2 87/68/2
f 38/69/6 109/70/6 44/71/6 37/72/6
f 100/73/5 108/74/5 65/75/5 14/76/5
f 106/77/3 108/78/3 100/79/3 60/80/3
f 31/81/4 27/82/4 86/83/4 68/84/4
f 52/85/4 26/86/4 29/87/4 51/88/4
f 55/89/5 10/90/5 83/91/5 84/92/5
f 7/93/2 93/94/2 6/95/2 91/96/2
f 40/97/4 34/98/4 35/99/4 105/100/4
f 55/101/2 7/93/2 58/102/2 10/103/2
f 26/104/2 56/105/2 94/106/2 29/107/2
f 112/108/3 76/109/3 75/110/3 111/111/3
f 23/112/4 54/113/4 92/114/4 22/115/4
f 63/116/3 64/117/3 99/118/3 59/119/3
f 92/120/2 54/121/2 29/107/2 57/122/2
f 39/123/6 110/124/6 45/125/6 103/126/6
f 35/127/5 36/31/5 41/128/5 105/129/5
f 87/130/6 21/131/6 66/132/6 81/133/6
f 48/134/5 20/135/5 107/136/5 47/137/5
f 91/138/5 6/139/5 2/140/5 22/141/5 92/142/5 57/143/5 98/144/5 34/145/5 40/146/5 63/147/5 59/148/5 12/149/5
f 109/150/4 38/151/4 103/152/4 45/153/4
f 103/152/4 31/81/4 32/154/4 74/155/4
f 88/156/2 90/157/2 25/158/2 89/159/2 68/160/2 86/161/2 24/162/2 53/163/2 52/164/2 51/165/2 23/59/2 50/58/2 21/166/2 87/68/2 67/67/2 5/167/2
f 59/168/1 99/169/1 60/170/1 12/171/1
f 72/172/1 16/3/1 75/173/1 76/174/1
f 82/175/5 1/176/5 80/177/5 50/178/5
f 99/179/5 64/180/5 106/181/5 60/182/5
f 54/183/5 23/184/5 51/185/5 29/32/5
f 101/186/6 17/187/6 18/188/6 102/189/6
f 16/48/3 72/190/3 11/191/3 97/192/3
f 93/193/5 7/194/5 4/195/5 3/196/5
f 103/197/1 38/198/1 37/199/1 104/200/1
f 78/201/6 77/202/6 79/203/6 49/204/6
f 100/205/1 14/206/1 13/207/1 60/170/1
f 66/208/4 21/209/4 50/210/4 80/211/4
f 28/212/2 32/213/2 31/39/2 70/214/2
f 56/215/5 26/216/5 52/217/5 53/218/5
f 8/219/6 95/220/6 67/221/6 85/222/6
f 13/223/5 58/224/5 7/194/5 60/182/5
f 103/197/1 74/225/1 73/226/1 39/227/1
f 62/228/4 42/229/4 41/230/4 36/231/4
f 35/232/1 34/233/1 98/234/1 36/54/1
f 110/235/4 39/236/4 73/237/4 46/238/4
f 27/239/6 30/240/6 24/241/6 86/242/6
f 103/126/6 104/243/6 96/244/6 31/41/6
f 83/245/3 10/246/3 58/247/3 13/248/3 14/249/3 65/250/3 17/251/3 101/252/3 15/253/3 71/254/3 8/255/3 85/256/3
f 71/257/6 15/258/6 16/259/6 97/260/6
f 76/261/6 112/262/6 46/263/6 73/264/6 74/265/6 32/266/6 28/267/6 25/268/6 90/269/6 9/270/6 11/271/6 72/272/6
f 48/273/1 49/274/1 79/275/1 20/276/1
f 78/277/4 49/278/4 48/279/4 47/280/4
f 95/281/3 97/192/3 5/282/3 67/283/3
f 42/284/1 43/285/1 44/286/1 109/287/1 45/7/1 78/6/1 47/288/1 107/289/1 77/5/1 18/13/1 17/290/1 65/291/1 108/292/1 106/293/1 64/294/1 63/295/1 40/296/1 105/297/1 41/298/1
f 7/299/3 55/300/3 84/301/3 4/302/3
f 16/259/6 19/303/6 111/304/6 75/305/6
f 91/306/3 12/307/3 60/80/3 7/299/3
f 98/308/4 57/309/4 29/87/4 36/231/4
f 69/310/3 9/311/3 90/312/3 88/313/3
f 97/260/6 69/314/6 88/315/6 5/316/6
f 20/317/3 79/318/3 77/319/3 107/320/3
f 37/321/4 44/322/4 43/323/4 33/324/4 61/325/4 94/326/4 56/327/4 53/328/4 24/329/4 30/330/4 96/331/4 104/332/4
f 87/333/3 81/334/3 1/335/3 82/336/3
f 113/337/7 114/338/7 116/339/7 115/340/7
f 117/341/8 118/342/8 120/343/8 119/344/8

View file

@ -0,0 +1,38 @@
# Blender 3.3.1
# www.blender.org
mtllib everness_cave_flower.mtl
o Cube
v 0.000000 -0.499000 0.000000
v -0.500000 -0.499000 0.500000
v 0.500000 -0.229136 -0.500000
v 0.500000 -0.499000 0.500000
v -0.500000 -0.229136 -0.500000
v -0.500000 -0.499000 -0.500000
v 0.500000 -0.229136 0.500000
v 0.500000 -0.499000 -0.500000
v -0.500000 -0.229136 0.500000
vn -0.0000 1.0000 -0.0000
vn -0.0000 0.8800 -0.4750
vn 0.4750 0.8800 -0.0000
vn -0.0000 0.8800 0.4750
vn -0.4750 0.8800 -0.0000
vt 0.250000 1.000000
vt 1.000000 1.000000
vt -0.000000 0.187500
vt 0.500000 0.187500
vt 0.500000 1.000000
vt -0.000000 0.187500
vt 0.500000 0.187500
vt 1.000000 -0.000000
vt 0.500000 0.187500
vt -0.000000 0.187500
vt 0.500000 -0.000000
vt -0.000000 0.187500
vt 0.500000 0.187500
s 0
usemtl flower
f 8/11/1 6/8/1 2/2/1 4/5/1
f 9/12/2 7/9/2 1/1/2
f 5/6/3 9/13/3 1/1/3
f 3/3/4 5/7/4 1/1/4
f 7/10/5 3/4/5 1/1/5

View file

@ -0,0 +1,61 @@
# Blender v2.83.20 OBJ File: 'everness_cave_flower_with_particles.blend'
# www.blender.org
mtllib everness_cave_flower_with_particles.mtl
o Cube
v 0.000000 -0.499000 0.000000
v -0.500000 -0.499000 0.500000
v 0.500000 -0.229136 -0.500000
v 0.500000 -0.499000 0.500000
v -0.500000 -0.229136 -0.500000
v -0.500000 -0.499000 -0.500000
v 0.500000 -0.229136 0.500000
v 0.500000 -0.499000 -0.500000
v -0.500000 -0.229136 0.500000
v 0.353553 -0.499000 0.353553
v -0.353553 -0.499000 -0.353553
v 0.353553 1.501000 0.353553
v -0.353553 1.501000 -0.353553
v -0.353553 -0.499000 0.353553
v 0.353553 -0.499000 -0.353553
v -0.353553 1.501000 0.353553
v 0.353553 1.501000 -0.353553
vt 0.500000 1.000000
vt 0.500000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt -0.000000 0.187500
vt 0.500000 0.187500
vt 0.250000 1.000000
vt -0.000000 0.187500
vt 0.500000 0.187500
vt -0.000000 0.187500
vt 0.500000 0.187500
vt -0.000000 0.187500
vt 0.500000 0.187500
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vn 0.0000 1.0000 0.0000
vn 0.0000 0.8800 -0.4750
vn 0.4750 0.8800 0.0000
vn 0.0000 0.8800 0.4750
vn -0.4750 0.8800 0.0000
vn 0.7071 -0.0000 -0.7071
vn 0.7071 -0.0000 0.7071
g Cube_Cube_flower
usemtl flower
s off
f 8/1/1 6/2/1 2/3/1 4/4/1
f 9/5/2 7/6/2 1/7/2
f 5/8/3 9/9/3 1/7/3
f 3/10/4 5/11/4 1/7/4
f 7/12/5 3/13/5 1/7/5
g Cube_Cube_particles
usemtl particles
f 13/14/6 12/15/6 10/16/6 11/17/6
f 17/18/7 16/19/7 14/20/7 15/21/7

View file

@ -0,0 +1,375 @@
# Blender v2.83.20 OBJ File: 'everness_ceramic_pot.blend'
# www.blender.org
mtllib everness_ceramic_pot.mtl
o everness_ceramic_pot.vox
v -0.375000 -0.499000 0.375000
v -0.437500 -0.436500 0.437500
v -0.437500 0.501000 0.125000
v -0.250000 0.501000 0.125000
v -0.250000 0.501000 -0.250000
v -0.312500 0.563500 0.312500
v -0.312500 0.751000 -0.312500
v 0.375000 -0.499000 0.375000
v 0.437500 -0.436500 0.437500
v 0.437500 0.501000 0.437500
v 0.312500 0.563500 0.312500
v -0.375000 -0.436500 0.375000
v 0.375000 -0.436500 0.375000
v -0.250000 0.501000 0.437500
v -0.250000 0.501000 0.250000
v -0.250000 0.563500 0.250000
v 0.250000 0.563500 0.250000
v -0.312500 0.751000 0.312500
v -0.187500 0.751000 0.312500
v 0.312500 0.751000 0.312500
v -0.187500 0.751000 -0.187500
v 0.187500 0.751000 -0.187500
v -0.375000 -0.436500 -0.375000
v -0.250000 -0.436500 -0.375000
v 0.375000 -0.499000 -0.375000
v -0.437500 -0.436500 -0.437500
v 0.437500 0.501000 -0.437500
v -0.312500 0.563500 -0.312500
v 0.062500 0.563500 -0.312500
v -0.062500 0.751000 0.187500
v 0.312500 0.751000 -0.312500
v -0.375000 -0.499000 -0.375000
v -0.437500 -0.436500 -0.375000
v -0.250000 -0.436500 -0.437500
v 0.375000 -0.436500 -0.375000
v 0.437500 -0.436500 -0.437500
v -0.312500 0.563500 -0.250000
v -0.250000 0.563500 -0.250000
v 0.062500 0.563500 -0.250000
v 0.250000 0.563500 -0.250000
v 0.312500 0.563500 -0.312500
v -0.437500 0.501000 0.437500
v 0.250000 0.501000 0.250000
v 0.250000 0.501000 -0.250000
v -0.437500 0.501000 -0.437500
v -0.062500 0.751000 0.312500
v -0.187500 0.751000 0.187500
v 0.187500 0.751000 0.187500
v 0.437500 -0.436500 0.437500
v 0.437500 -0.436500 -0.437500
v 0.437500 0.501000 0.437500
v 0.437500 0.501000 -0.437500
v -0.375000 -0.499000 0.375000
v -0.437500 -0.436500 0.437500
v -0.437500 0.501000 0.125000
v -0.250000 0.501000 0.125000
v -0.250000 0.501000 -0.250000
v -0.312500 0.563500 0.312500
v -0.312500 0.751000 -0.312500
v 0.375000 -0.499000 0.375000
v 0.437500 -0.436500 0.437500
v 0.437500 0.501000 0.437500
v 0.312500 0.563500 0.312500
v -0.187500 0.626000 -0.187500
v -0.375000 -0.436500 0.375000
v 0.375000 -0.436500 0.375000
v -0.250000 0.501000 0.437500
v -0.250000 0.501000 0.250000
v -0.250000 0.563500 0.250000
v 0.250000 0.563500 0.250000
v 0.187500 0.626000 -0.187500
v -0.312500 0.751000 0.312500
v -0.187500 0.751000 0.312500
v 0.312500 0.751000 0.312500
v -0.187500 0.751000 -0.187500
v 0.187500 0.751000 -0.187500
v -0.375000 -0.436500 -0.375000
v -0.250000 -0.436500 -0.375000
v 0.375000 -0.499000 -0.375000
v -0.437500 -0.436500 -0.437500
v 0.437500 0.501000 -0.437500
v -0.312500 0.563500 -0.312500
v 0.062500 0.563500 -0.312500
v -0.187500 0.626000 0.187500
v -0.062500 0.751000 0.187500
v 0.312500 0.751000 -0.312500
v -0.375000 -0.499000 -0.375000
v -0.437500 -0.436500 -0.375000
v -0.250000 -0.436500 -0.437500
v 0.375000 -0.436500 -0.375000
v 0.437500 -0.436500 -0.437500
v -0.312500 0.563500 -0.250000
v -0.250000 0.563500 -0.250000
v 0.062500 0.563500 -0.250000
v 0.250000 0.563500 -0.250000
v 0.312500 0.563500 -0.312500
v -0.437500 0.501000 0.437500
v 0.250000 0.501000 0.250000
v 0.250000 0.501000 -0.250000
v -0.437500 0.501000 -0.437500
v 0.187500 0.626000 0.187500
v -0.062500 0.751000 0.312500
v -0.187500 0.751000 0.187500
v 0.187500 0.751000 0.187500
v 0.437500 -0.436500 0.437500
v 0.437500 -0.436500 -0.437500
v 0.437500 0.501000 0.437500
v 0.437500 0.501000 -0.437500
vt 0.437500 0.250000
vt 0.375000 0.218750
vt 0.437500 0.218750
vt 0.000000 0.000000
vt 0.093750 0.000000
vt 0.093750 0.046875
vt 0.437500 0.000000
vt 0.437500 0.218750
vt 0.343750 0.171875
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.843750 0.218750
vt 0.843750 0.015625
vt 0.812500 0.031250
vt 0.625000 0.375000
vt 0.312500 0.375000
vt 0.562500 0.343750
vt 0.468750 0.203125
vt 0.812500 0.031250
vt 0.468750 0.031250
vt 0.531250 0.218750
vt 0.531250 0.203125
vt 0.468750 0.203125
vt 0.906250 0.234375
vt 0.937500 0.375000
vt 0.937500 0.218750
vt 0.812500 0.375000
vt 0.812500 0.359375
vt 0.656250 0.359375
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.031250 0.390625
vt 0.437500 0.390625
vt 0.281250 0.625000
vt 0.093750 0.640625
vt 0.093750 0.625000
vt 0.281250 0.625000
vt 0.062500 0.687500
vt 0.062500 0.640625
vt 0.093750 0.640625
vt 0.062500 0.218750
vt 0.250000 0.250000
vt 0.250000 0.218750
vt 0.843750 0.687500
vt 0.781250 0.703125
vt 0.468750 0.687500
vt 0.343750 0.937500
vt 0.093750 0.953125
vt 0.093750 0.937500
vt 0.062500 0.343750
vt 0.250000 0.375000
vt 0.062500 0.375000
vt 0.875000 0.390625
vt 0.531250 0.625000
vt 0.031250 0.375000
vt 0.406250 0.390625
vt 0.031250 0.390625
vt 0.781250 0.625000
vt 0.531250 0.640625
vt 0.531250 0.625000
vt 0.406250 0.687500
vt 0.031250 0.703125
vt 0.031250 0.687500
vt 0.312500 0.343750
vt 0.250000 0.250000
vt 0.312500 0.250000
vt 0.812500 0.640625
vt 0.812500 0.687500
vt 0.625000 0.687500
vt 0.437500 0.937500
vt 0.437500 0.703125
vt 0.781250 0.703125
vt 0.625000 0.953125
vt 0.531250 0.937500
vt 0.781250 0.937500
vt 0.500000 1.000000
vt 0.500000 0.953125
vt 0.625000 0.953125
vt 0.062500 0.250000
vt 0.000000 0.281250
vt 0.062500 0.343750
vt 0.375000 0.953125
vt 0.062500 1.000000
vt 0.062500 0.953125
vt 0.250000 0.343750
vt 0.062500 0.343750
vt 0.843750 0.375000
vt 0.468750 0.390625
vt 0.468750 0.375000
vt 0.437500 0.937500
vt 0.000000 0.703125
vt 0.437500 0.703125
vt 0.375000 0.250000
vt 0.093750 0.078125
vt 0.000000 0.078125
vt 0.343750 0.046875
vt 0.000000 0.218750
vt 0.093750 0.171875
vt 0.812500 0.203125
vt 0.437500 0.015625
vt 0.437500 0.203125
vt 0.468750 0.031250
vt 0.312500 0.218750
vt 0.375000 0.343750
vt 0.562500 0.250000
vt 0.625000 0.218750
vt 0.812500 0.203125
vt 0.437500 0.218750
vt 0.625000 0.218750
vt 0.625000 0.359375
vt 0.656250 0.234375
vt 0.906250 0.359375
vt 0.625000 0.375000
vt 0.437500 0.625000
vt 0.000000 0.625000
vt 0.000000 0.390625
vt 0.343750 0.625000
vt 0.343750 0.640625
vt 0.375000 0.640625
vt 0.375000 0.687500
vt 0.062500 0.250000
vt 0.843750 0.703125
vt 0.468750 0.703125
vt 0.343750 0.953125
vt 0.250000 0.343750
vt 0.875000 0.625000
vt 0.406250 0.375000
vt 0.781250 0.640625
vt 0.406250 0.703125
vt 0.562500 0.687500
vt 0.500000 0.640625
vt 0.500000 0.687500
vt 0.875000 0.703125
vt 0.875000 0.937500
vt 0.781250 0.953125
vt 0.531250 0.953125
vt 0.812500 0.953125
vt 0.812500 1.000000
vt -0.000000 0.250000
vt 0.000000 0.343750
vt 0.375000 1.000000
vt 0.843750 0.390625
vt 0.000000 0.937500
vn 0.0000 1.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
usemtl pot
s off
f 30/1/1 19/2/1 46/3/1
f 42/4/1 14/5/1 15/6/1
f 10/7/1 27/8/1 44/9/1
f 27/10/2 51/11/2 52/12/2
f 36/13/3 9/14/3 13/15/3
f 31/16/1 7/17/1 22/18/1
f 32/19/3 8/20/3 1/21/3
f 34/22/3 24/23/3 23/24/3
f 17/25/3 41/26/3 11/27/3
f 29/28/3 39/29/3 38/30/3
f 10/31/2 49/32/2 51/11/2
f 36/33/2 52/12/2 50/34/2
f 9/35/2 50/34/2 49/32/2
f 88/36/4 54/37/4 55/38/4
f 93/39/4 57/40/4 56/41/4
f 59/42/4 82/43/4 92/44/4
f 76/45/4 101/46/4 104/47/4
f 87/48/5 78/49/5 79/50/5
f 99/51/6 70/52/6 98/53/6
f 84/54/6 75/55/6 103/56/6
f 61/57/2 67/58/2 54/37/2
f 87/59/4 65/60/4 77/61/4
f 98/62/2 69/63/2 68/64/2
f 79/65/6 66/66/6 60/67/6
f 75/68/2 71/69/2 76/70/2
f 63/71/2 74/72/2 102/73/2
f 81/74/5 91/75/5 89/76/5
f 94/77/5 99/78/5 57/79/5
f 86/80/5 96/81/5 83/82/5
f 84/83/5 85/84/5 101/85/5
f 96/86/6 74/87/6 63/88/6
f 84/83/1 71/89/1 64/90/1
f 60/91/2 65/92/2 53/93/2
f 108/94/6 105/95/6 106/96/6
f 30/1/1 47/97/1 19/2/1
f 4/98/1 3/99/1 15/6/1
f 3/99/1 42/4/1 15/6/1
f 43/100/1 15/6/1 14/5/1
f 45/101/1 3/99/1 5/102/1
f 3/99/1 4/98/1 5/102/1
f 43/100/1 14/5/1 10/7/1
f 45/101/1 5/102/1 44/9/1
f 44/9/1 43/100/1 10/7/1
f 27/8/1 45/101/1 44/9/1
f 27/10/2 10/31/2 51/11/2
f 24/23/3 34/22/3 35/103/3
f 34/22/3 36/13/3 35/103/3
f 2/104/3 33/105/3 12/106/3
f 33/105/3 23/24/3 12/106/3
f 2/104/3 12/106/3 13/15/3
f 13/15/3 35/103/3 36/13/3
f 9/14/3 2/104/3 13/15/3
f 7/17/1 18/107/1 47/97/1
f 18/107/1 19/2/1 47/97/1
f 47/97/1 21/108/1 7/17/1
f 30/1/1 46/3/1 48/109/1
f 46/3/1 20/110/1 48/109/1
f 22/18/1 48/109/1 20/110/1
f 7/17/1 21/108/1 22/18/1
f 22/18/1 20/110/1 31/16/1
f 32/19/3 25/111/3 8/20/3
f 33/105/3 26/112/3 23/24/3
f 26/112/3 34/22/3 23/24/3
f 6/113/3 37/114/3 16/115/3
f 37/114/3 38/30/3 16/115/3
f 39/29/3 29/28/3 40/116/3
f 29/28/3 41/26/3 40/116/3
f 11/27/3 6/113/3 16/115/3
f 17/25/3 40/116/3 41/26/3
f 11/27/3 16/115/3 17/25/3
f 37/114/3 28/117/3 38/30/3
f 28/117/3 29/28/3 38/30/3
f 10/31/2 9/35/2 49/32/2
f 36/33/2 27/10/2 52/12/2
f 9/35/2 36/33/2 50/34/2
f 97/118/4 55/38/4 54/37/4
f 55/38/4 100/119/4 88/36/4
f 100/119/4 80/120/4 88/36/4
f 68/121/4 69/122/4 56/41/4
f 69/122/4 93/39/4 56/41/4
f 58/123/4 72/124/4 92/44/4
f 72/124/4 59/42/4 92/44/4
f 76/45/4 71/125/4 101/46/4
f 77/126/5 78/49/5 87/48/5
f 78/49/5 90/127/5 79/50/5
f 99/51/6 95/128/6 70/52/6
f 84/54/6 64/129/6 75/55/6
f 62/130/2 67/58/2 61/57/2
f 67/58/2 97/118/2 54/37/2
f 87/59/4 53/131/4 65/60/4
f 98/62/2 70/132/2 69/63/2
f 79/65/6 90/133/6 66/66/6
f 75/68/2 64/129/2 71/69/2
f 102/73/2 73/134/2 58/135/2
f 73/134/2 72/136/2 58/135/2
f 102/73/2 58/135/2 63/71/2
f 89/76/5 80/137/5 100/138/5
f 100/138/5 81/74/5 89/76/5
f 57/79/5 93/139/5 94/77/5
f 94/77/5 95/140/5 99/78/5
f 82/141/5 59/142/5 83/82/5
f 59/142/5 86/80/5 83/82/5
f 103/143/5 85/84/5 84/83/5
f 85/84/5 104/144/5 101/85/5
f 96/86/6 86/145/6 74/87/6
f 84/83/1 101/46/1 71/89/1
f 60/91/2 66/146/2 65/92/2
f 108/94/6 107/147/6 105/95/6

View file

@ -0,0 +1,79 @@
# Blender v2.78 (sub 0) OBJ File: 'chest-open.blend'
# www.blender.org
o Top_Cube.002_None_Top_Cube.002_None_bottom
v -0.500000 0.408471 0.720970
v -0.500000 1.115578 0.013863
v -0.500000 0.894607 -0.207108
v -0.500000 0.187501 0.499999
v 0.500000 1.115578 0.013863
v 0.500000 0.408471 0.720970
v 0.500000 0.187501 0.499999
v 0.500000 0.894607 -0.207108
v -0.500000 0.187500 -0.500000
v -0.500000 -0.500000 -0.500000
v -0.500000 -0.500000 0.500000
v 0.500000 0.187500 -0.500000
v 0.500000 -0.500000 0.500000
v 0.500000 -0.500000 -0.500000
vt 0.0000 1.0000
vt 0.0000 0.0000
vt 1.0000 0.0000
vt 1.0000 1.0000
vt 1.0000 0.0000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.0000
vt 0.0000 1.0000
vt 1.0000 1.0000
vt 1.0000 0.6875
vt 0.0000 0.6875
vt 1.0000 1.0000
vt 0.0000 0.6875
vt 1.0000 0.6875
vt 1.0000 0.6875
vt 1.0000 0.0000
vt 0.0000 0.0000
vt 1.0000 0.6875
vt 1.0000 0.0000
vt 1.0000 1.0000
vt 1.0000 0.6875
vt 1.0000 0.0000
vt 0.0000 1.0000
vt 0.0000 0.6875
vt 0.0000 0.6875
vt 0.0000 0.0000
vt 1.0000 0.5000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.5000
vt 0.0000 0.0000
vt 1.0000 0.0000
vn 0.0000 0.7071 0.7071
vn -0.0000 -1.0000 -0.0000
vn -1.0000 0.0000 0.0000
vn 1.0000 0.0000 -0.0000
vn 0.0000 -0.7071 0.7071
vn 0.0000 0.0000 1.0000
vn -0.0000 0.7071 -0.7071
vn -0.0000 0.0000 -1.0000
vn -0.0000 -0.7071 -0.7071
vn -0.0000 1.0000 -0.0000
g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Top
s off
f 6/1/1 5/2/1 2/3/1 1/4/1
g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Bottom
f 11/5/2 10/6/2 14/7/2 13/8/2
g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Right-Left
f 1/9/3 2/10/3 3/11/3 4/12/3
f 5/13/4 6/1/4 7/14/4 8/15/4
f 4/12/3 9/16/3 10/17/3 11/18/3
f 12/19/4 7/14/4 13/8/4 14/20/4
g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Back
f 6/21/5 1/9/5 4/12/5 7/22/5
f 7/22/6 4/12/6 11/18/6 13/23/6
g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Front
f 2/10/7 5/24/7 8/25/7 3/11/7
f 9/16/8 12/26/8 14/27/8 10/17/8
g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Inside
f 4/28/9 3/29/9 8/30/9 7/31/9
f 7/31/10 12/32/10 9/33/10 4/28/10

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,62 @@
# Blender v2.83.20 OBJ File: 'everness_mesh_bush.blend'
# www.blender.org
mtllib everness_forsythia_mesh.mtl
o Cube
v 0.500000 0.500000 -0.500000
v 0.500000 -0.500000 -0.500000
v 0.500000 0.500000 0.500000
v 0.500000 -0.500000 0.500000
v -0.500000 0.500000 -0.500000
v -0.500000 -0.500000 -0.500000
v -0.500000 0.500000 0.500000
v -0.500000 -0.500000 0.500000
v 0.353553 0.500000 -0.353553
v 0.353553 -0.500000 -0.353553
v -0.353553 0.500000 0.353553
v -0.353553 -0.500000 0.353553
v -0.353553 0.500000 -0.353553
v -0.353553 -0.500000 -0.353553
v 0.353553 0.500000 0.353553
v 0.353553 -0.500000 0.353553
vt 0.333333 1.000000
vt 0.000000 1.000000
vt 0.000000 0.500000
vt 0.333333 0.500000
vt 0.666667 0.500000
vt 0.666667 1.000000
vt 0.333333 1.000000
vt 0.333333 0.500000
vt 0.666667 0.000000
vt 0.666667 0.500000
vt 0.333333 0.500000
vt 0.333333 0.000000
vt 1.000000 0.500000
vt 1.000000 1.000000
vt 0.312500 0.000000
vt 0.312500 0.500000
vt -0.000000 0.500000
vt -0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 0.500000
vt 0.666667 0.500000
vt 0.666667 0.000000
vt 1.000000 0.000000
vt 1.000000 0.500000
vt 0.666667 0.500000
vt 0.666667 0.000000
vn 0.0000 1.0000 0.0000
vn 0.0000 0.0000 1.0000
vn -1.0000 0.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.7071 0.0000 0.7071
vn 0.7071 0.0000 -0.7071
usemtl Material
s off
f 1/1/1 5/2/1 7/3/1 3/4/1
f 4/5/2 3/6/2 7/7/2 8/8/2
f 8/9/3 7/10/3 5/11/3 6/12/3
f 2/13/4 1/14/4 3/6/4 4/5/4
f 6/15/5 5/16/5 1/17/5 2/18/5
f 10/19/6 9/20/6 11/21/6 12/22/6
f 14/23/7 13/24/7 15/25/7 16/26/7

View file

@ -0,0 +1,292 @@
# Blender v2.83.20 OBJ File: 'everness_glowing_pillar.blend'
# www.blender.org
mtllib everness_glowing_pillar.mtl
o Cube
v 0.625000 -0.500000 -0.625000
v -0.625000 -0.500000 0.625000
v -0.625000 -0.500000 -0.625000
v 0.625000 -0.500000 0.625000
v 0.625000 2.000000 -0.625000
v -0.625000 2.000000 0.625000
v -0.625000 2.000000 -0.625000
v 0.625000 2.000000 0.625000
v 0.625000 3.250000 -0.625000
v 0.625000 2.000000 -0.625000
v 0.625000 3.250000 0.625000
v 0.625000 2.000000 0.625000
v -0.625000 3.250000 -0.625000
v -0.625000 2.000000 -0.625000
v -0.625000 3.250000 0.625000
v -0.625000 2.000000 0.625000
v -1.250000 2.167468 0.625000
v -0.625000 3.250000 0.625000
v -1.250000 2.167468 -0.625000
v -0.625000 3.250000 -0.625000
v -0.625000 0.750000 0.625000
v -0.625000 2.000000 0.625000
v -0.625000 0.750000 -0.625000
v -0.625000 2.000000 -0.625000
v -1.250000 0.917468 0.625000
v -0.625000 2.000000 0.625000
v -1.250000 0.917468 -0.625000
v -0.625000 2.000000 -0.625000
v -1.250000 1.698712 0.625000
v -0.625000 2.781244 0.625000
v -1.250000 1.698712 -0.625000
v -0.625000 2.781244 -0.625000
v -1.250000 1.304804 0.625000
v -0.625000 2.387336 0.625000
v -1.250000 1.304804 -0.625000
v -0.625000 2.387336 -0.625000
v 1.249999 2.167468 -0.625000
v 0.624999 3.250000 -0.625000
v 1.250000 2.167468 0.625000
v 0.625000 3.250000 0.625000
v 0.624999 0.750000 -0.625000
v 0.625000 2.000000 -0.625000
v 0.625000 0.750000 0.625000
v 0.625000 2.000000 0.625000
v 1.250000 0.917468 -0.625000
v 0.625000 2.000000 -0.625000
v 1.250000 0.917468 0.625000
v 0.625000 2.000000 0.625000
v 1.249999 1.698713 -0.625000
v 0.625000 2.781244 -0.625000
v 1.250000 1.698712 0.625000
v 0.625000 2.781244 0.625000
v 1.250000 1.304805 -0.625000
v 0.624999 2.387336 -0.625000
v 1.250000 1.304805 0.625000
v 0.625000 2.387336 0.625000
v -0.625000 2.167468 -1.250000
v -0.625000 3.250000 -0.625000
v 0.625000 2.167468 -1.250001
v 0.625000 3.250000 -0.625001
v -0.625000 0.750000 -0.625000
v -0.625000 2.000000 -0.625000
v 0.625000 0.750000 -0.625001
v 0.625000 2.000000 -0.625001
v -0.625000 0.917468 -1.250000
v -0.625000 2.000000 -0.625000
v 0.625000 0.917468 -1.250001
v 0.625000 2.000000 -0.625001
v -0.625000 1.698712 -1.250000
v -0.625000 2.781244 -0.625000
v 0.625000 1.698712 -1.250001
v 0.625000 2.781244 -0.625001
v -0.625000 1.304804 -1.250000
v -0.625000 2.387336 -0.625000
v 0.625000 1.304805 -1.250001
v 0.625000 2.387336 -0.625001
v 0.625000 2.167468 1.250000
v 0.625000 3.250000 0.625000
v -0.625000 2.167468 1.250001
v -0.625000 3.250000 0.625001
v 0.625000 0.750000 0.625000
v 0.625000 2.000000 0.625000
v -0.625000 0.750000 0.625001
v -0.625000 2.000000 0.625001
v 0.625000 0.917468 1.250000
v 0.625000 2.000000 0.625000
v -0.624999 0.917468 1.250001
v -0.625000 2.000000 0.625001
v 0.625000 1.698712 1.250000
v 0.625000 2.781244 0.625000
v -0.624999 1.698712 1.250001
v -0.625000 2.781244 0.625001
v 0.625000 1.304805 1.250000
v 0.625000 2.387336 0.625000
v -0.624999 1.304804 1.250001
v -0.625000 2.387336 0.625001
v 0.625001 3.562500 0.625000
v 0.625000 3.562500 -0.625000
v -0.624999 3.562500 0.625001
v -0.625000 3.562500 -0.624999
v 0.000001 3.250000 0.000000
v -0.624269 3.250000 0.625000
v -0.624269 5.016733 0.625000
v 0.624999 3.250000 -0.624269
v 0.624999 5.016733 -0.624269
v 0.625000 5.016734 0.625000
v 0.625000 3.250000 0.625000
v -0.624269 5.016734 -0.624268
v -0.624269 3.250000 -0.624268
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 -0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt -0.000000 -0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 1.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 1.000000 0.500000
vt 0.000000 0.500000
vt 0.500000 0.000000
vt 1.000000 0.500000
vt -0.000000 0.500000
vt 1.000000 0.500000
vt 0.000000 0.500000
vt 1.000000 0.500000
vt 0.000000 0.500000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vn 0.7071 0.0000 -0.7071
vn 0.7071 0.0000 0.7071
vn 0.0000 1.0000 0.0000
vn 0.0000 0.0000 1.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn -0.8660 0.5000 0.0000
vn 0.8660 0.5000 -0.0000
vn -0.0000 0.5000 -0.8660
vn 0.0000 0.5000 0.8660
vn -0.4472 0.8944 0.0000
vn 0.0000 0.8944 0.4472
vn 0.4472 0.8944 0.0000
vn -0.0000 0.8944 -0.4472
vn -0.7071 0.0000 -0.7071
g Cube_Cube_Roots
usemtl Roots
s off
f 3/1/1 7/2/1 8/3/1 4/4/1
f 1/5/2 5/6/2 6/7/2 2/8/2
g Cube_Cube_Luminophor
usemtl Luminophor
f 9/9/3 13/10/3 15/11/3 11/12/3
f 12/13/4 11/14/4 15/15/4 16/16/4
f 16/16/5 15/15/5 13/17/5 14/18/5
f 14/19/6 10/20/6 12/13/6 16/16/6
f 10/21/7 9/9/7 11/22/7 12/23/7
f 14/24/8 13/10/8 9/9/8 10/21/8
g Cube_Cube_Leaves
usemtl Leaves
f 17/25/9 18/26/9 20/27/9 19/28/9
f 21/29/5 22/30/5 24/31/5 23/32/5
f 25/33/9 26/34/9 28/35/9 27/36/9
f 29/37/9 30/38/9 32/39/9 31/40/9
f 33/41/9 34/42/9 36/43/9 35/44/9
f 37/45/10 38/46/10 40/47/10 39/48/10
f 41/49/7 42/50/7 44/51/7 43/52/7
f 45/53/10 46/54/10 48/55/10 47/56/10
f 49/57/10 50/58/10 52/59/10 51/60/10
f 53/61/10 54/62/10 56/63/10 55/64/10
f 57/65/11 58/66/11 60/67/11 59/68/11
f 61/69/8 62/70/8 64/71/8 63/72/8
f 65/73/11 66/74/11 68/75/11 67/76/11
f 69/77/11 70/78/11 72/79/11 71/80/11
f 73/81/11 74/82/11 76/83/11 75/84/11
f 77/85/12 78/86/12 80/87/12 79/88/12
f 81/89/4 82/90/4 84/91/4 83/92/4
f 85/93/12 86/94/12 88/95/12 87/96/12
f 89/97/12 90/98/12 92/99/12 91/100/12
f 93/101/12 94/102/12 96/103/12 95/104/12
f 97/105/13 98/106/13 101/107/13
f 98/108/14 100/109/14 101/107/14
f 100/110/15 99/111/15 101/107/15
f 99/112/16 97/113/16 101/107/16
f 105/114/17 104/115/17 102/116/17 103/117/17
f 106/118/1 107/119/1 109/120/1 108/121/1

View file

@ -0,0 +1,478 @@
# Blender v2.83.20 OBJ File: 'everness_hammer_pick.blend'
# www.blender.org
mtllib everness_hammer_pick.mtl
o hammer_head.vox
v 0.117043 0.562218 -0.240000
v 0.117043 0.562218 0.240000
v -0.222369 0.901630 -0.240000
v -0.561780 -0.116604 -0.240000
v -0.901191 0.222807 0.240000
v -0.561780 -0.116604 0.240000
v -0.222369 0.901630 0.240000
v -0.901191 0.222807 -0.240000
v 0.097391 -0.177433 0.040000
v -0.142609 -0.017433 -0.040000
v -0.222609 0.062567 0.040000
v -0.222609 0.062567 -0.040000
v -0.142609 0.062567 -0.040000
v -0.382609 0.222567 -0.040000
v 0.577391 -0.337433 -0.040000
v 0.417391 -0.337433 -0.040000
v 0.417391 -0.337433 0.040000
v 0.417391 -0.257433 -0.040000
v 0.337391 -0.257433 0.040000
v 0.337391 -0.177433 0.040000
v 0.337391 -0.177433 -0.040000
v 0.257391 -0.177433 0.040000
v 0.257391 -0.097433 0.040000
v 0.177391 -0.017433 -0.040000
v 0.017391 0.062567 -0.040000
v -0.062609 0.222567 0.040000
v -0.142609 0.302567 -0.040000
v -0.222609 0.302567 0.040000
v -0.222609 0.382567 0.040000
v 0.577391 -0.577433 0.040000
v 0.417391 -0.257433 0.040000
v 0.257391 -0.417433 0.040000
v 0.257391 -0.337433 0.040000
v 0.177391 -0.257433 0.040000
v 0.177391 -0.337433 0.040000
v 0.097391 -0.257433 0.040000
v 0.177391 -0.097433 0.040000
v 0.097391 -0.017433 0.040000
v 0.017391 0.062567 0.040000
v -0.062609 -0.017433 0.040000
v -0.062609 0.142567 0.040000
v -0.142609 -0.017433 0.040000
v -0.142609 0.062567 0.040000
v -0.142609 0.222567 0.040000
v -0.222609 0.142567 0.040000
v -0.142609 0.302567 0.040000
v -0.302609 0.302567 0.040000
v -0.302609 0.222567 0.040000
v -0.382609 0.222567 0.040000
v 0.257391 -0.337433 -0.040000
v 0.257391 -0.177433 -0.040000
v 0.257391 -0.097433 -0.040000
v 0.177391 -0.257433 -0.040000
v 0.097391 -0.257433 -0.040000
v 0.097391 -0.177433 -0.040000
v 0.017391 -0.177433 -0.040000
v 0.017391 -0.097433 -0.040000
v 0.097391 -0.017433 -0.040000
v -0.062609 -0.017433 -0.040000
v 0.017391 0.142567 -0.040000
v -0.062609 0.222567 -0.040000
v -0.222609 0.142567 -0.040000
v -0.302609 0.222567 -0.040000
v -0.302609 0.302567 -0.040000
v -0.222609 0.302567 -0.040000
v -0.222609 0.382567 -0.040000
v 0.577391 -0.577433 -0.040000
v 0.577391 -0.337433 0.040000
v 0.337391 -0.257433 -0.040000
v 0.177391 -0.097433 -0.040000
v 0.177391 -0.017433 0.040000
v 0.097391 0.062567 -0.040000
v 0.097391 0.062567 0.040000
v 0.017391 0.142567 0.040000
v -0.062609 0.142567 -0.040000
v -0.142609 0.222567 -0.040000
v 0.337391 -0.577433 0.040000
v 0.337391 -0.577433 -0.040000
v 0.337391 -0.417433 0.040000
v 0.337391 -0.417433 -0.040000
v 0.257391 -0.417433 -0.040000
v 0.177391 -0.337433 -0.040000
v 0.017391 -0.177433 0.040000
v 0.017391 -0.097433 0.040000
v -0.062609 -0.097433 0.040000
v -0.062609 -0.097433 -0.040000
v -0.302609 0.142567 0.040000
v -0.302609 0.142567 -0.040000
v -0.302609 0.382567 0.040000
v -0.302609 0.382567 -0.040000
v -0.382609 0.302567 0.040000
v -0.382609 0.302567 -0.040000
vt 0.375000 1.000000
vt 0.000000 0.812500
vt 0.000000 1.000000
vt 0.375000 0.812500
vt 0.562500 1.000000
vt 0.375000 1.000000
vt 0.750000 0.812500
vt 0.562500 1.000000
vt 0.750000 1.000000
vt 0.000000 0.250000
vt 0.375000 0.437500
vt 0.375000 0.250000
vt 0.000000 0.812500
vt 0.375000 0.625000
vt 0.375000 0.812500
vt 0.375000 0.625000
vt 0.000000 0.437500
vt 0.375000 0.437500
vt 0.375000 0.718750
vt 0.406250 0.812500
vt 0.375000 0.812500
vt 0.375000 0.625000
vt 0.406250 0.656250
vt 0.375000 0.656250
vt 0.375000 0.531250
vt 0.406250 0.593750
vt 0.375000 0.593750
vt 0.375000 0.468750
vt 0.406250 0.500000
vt 0.375000 0.500000
vt 0.375000 0.406250
vt 0.406250 0.437500
vt 0.375000 0.437500
vt 0.375000 0.343750
vt 0.406250 0.375000
vt 0.375000 0.375000
vt 0.375000 0.281250
vt 0.406250 0.312500
vt 0.375000 0.312500
vt 0.375000 0.218750
vt 0.406250 0.250000
vt 0.375000 0.250000
vt 0.375000 0.156250
vt 0.406250 0.187500
vt 0.375000 0.187500
vt 0.375000 0.093750
vt 0.406250 0.125000
vt 0.375000 0.125000
vt 0.406250 0.625000
vt 0.437500 0.593750
vt 0.437500 0.625000
vt 0.406250 0.531250
vt 0.437500 0.500000
vt 0.437500 0.531250
vt 0.406250 0.468750
vt 0.437500 0.437500
vt 0.437500 0.468750
vt 0.406250 0.406250
vt 0.437500 0.375000
vt 0.437500 0.406250
vt 0.406250 0.343750
vt 0.437500 0.312500
vt 0.437500 0.343750
vt 0.406250 0.281250
vt 0.437500 0.250000
vt 0.437500 0.281250
vt 0.406250 0.218750
vt 0.437500 0.187500
vt 0.437500 0.218750
vt 0.406250 0.156250
vt 0.437500 0.125000
vt 0.437500 0.156250
vt 0.406250 0.093750
vt 0.437500 0.062500
vt 0.437500 0.093750
vt 0.406250 0.031250
vt 0.375000 0.062500
vt 0.375000 0.031250
vt 0.718750 0.687500
vt 0.750000 0.718750
vt 0.718750 0.750000
vt 0.593750 0.562500
vt 0.562500 0.531250
vt 0.531250 0.562500
vt 0.406250 0.656250
vt 0.437500 0.718750
vt 0.406250 0.718750
vt 0.437500 0.812500
vt 0.437500 0.656250
vt 0.406250 0.593750
vt 0.406250 0.500000
vt 0.406250 0.437500
vt 0.406250 0.375000
vt 0.406250 0.312500
vt 0.406250 0.250000
vt 0.406250 0.187500
vt 0.406250 0.125000
vt 0.406250 0.625000
vt 0.406250 0.531250
vt 0.406250 0.468750
vt 0.406250 0.406250
vt 0.406250 0.343750
vt 0.406250 0.281250
vt 0.406250 0.218750
vt 0.406250 0.156250
vt 0.437500 0.031250
vt 0.406250 0.093750
vt 0.375000 0.812500
vt 0.562500 0.812500
vt 0.562500 0.812500
vt 0.000000 0.437500
vt 0.000000 0.625000
vt 0.000000 0.625000
vt 0.406250 0.718750
vt 0.406250 0.062500
vt 0.406250 0.062500
vt 0.531250 0.562500
vt 0.500000 0.562500
vt 0.500000 0.531250
vt 0.437500 0.531250
vt 0.437500 0.437500
vt 0.531250 0.437500
vt 0.531250 0.500000
vt 0.562500 0.500000
vt 0.562500 0.531250
vt 0.593750 0.531250
vt 0.593750 0.562500
vt 0.625000 0.562500
vt 0.625000 0.593750
vt 0.656250 0.593750
vt 0.656250 0.625000
vt 0.687500 0.625000
vt 0.687500 0.656250
vt 0.718750 0.656250
vt 0.750000 0.687500
vt 0.781250 0.718750
vt 0.781250 0.750000
vt 0.812500 0.750000
vt 0.812500 0.781250
vt 0.781250 0.781250
vt 0.781250 0.812500
vt 0.750000 0.781250
vt 0.750000 0.812500
vt 0.718750 0.781250
vt 0.687500 0.750000
vt 0.687500 0.718750
vt 0.656250 0.718750
vt 0.656250 0.687500
vt 0.625000 0.687500
vt 0.625000 0.656250
vt 0.593750 0.656250
vt 0.593750 0.625000
vt 0.562500 0.625000
vt 0.562500 0.593750
vt 0.531250 0.593750
vt 0.625000 0.656250
vt 0.625000 0.687500
vt 0.656250 0.687500
vt 0.656250 0.718750
vt 0.687500 0.718750
vt 0.687500 0.750000
vt 0.718750 0.750000
vt 0.718750 0.781250
vt 0.750000 0.781250
vt 0.750000 0.812500
vt 0.781250 0.812500
vt 0.781250 0.781250
vt 0.812500 0.781250
vt 0.812500 0.750000
vt 0.750000 0.718750
vt 0.687500 0.656250
vt 0.718750 0.687500
vt 0.593750 0.625000
vt 0.593750 0.656250
vt 0.562500 0.593750
vt 0.562500 0.625000
vt 0.531250 0.593750
vt 0.500000 0.531250
vt 0.500000 0.562500
vt 0.437500 0.437500
vt 0.437500 0.531250
vt 0.531250 0.500000
vt 0.531250 0.437500
vt 0.562500 0.500000
vt 0.593750 0.531250
vt 0.625000 0.593750
vt 0.625000 0.562500
vt 0.656250 0.625000
vt 0.656250 0.593750
vt 0.687500 0.625000
vt 0.718750 0.656250
vt 0.750000 0.687500
vt 0.781250 0.750000
vt 0.781250 0.718750
vn 0.0000 0.0000 1.0000
vn 0.7071 0.7071 0.0000
vn -0.7071 -0.7071 0.0000
vn 0.7071 -0.7071 0.0000
vn 0.0000 0.0000 -1.0000
vn -0.7071 0.7071 0.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 1.0000 -0.0000 0.0000
vn -1.0000 -0.0000 0.0000
usemtl hammer
s off
f 5/1/1 2/2/1 7/3/1
f 2/4/2 3/5/2 7/6/2
f 4/7/3 5/8/3 8/9/3
f 6/10/4 1/11/4 2/12/4
f 3/13/5 4/14/5 8/15/5
f 3/16/6 5/17/6 7/18/6
f 77/19/7 67/20/7 30/21/7
f 32/22/7 80/23/7 79/24/7
f 35/25/7 50/26/7 33/27/7
f 36/28/7 53/29/7 34/30/7
f 83/31/7 55/32/7 9/33/7
f 85/34/7 57/35/7 84/36/7
f 42/37/7 59/38/7 40/39/7
f 11/40/7 13/41/7 43/42/7
f 87/43/7 62/44/7 45/45/7
f 49/46/7 63/47/7 48/48/7
f 18/49/8 19/50/8 31/51/8
f 21/52/8 22/53/8 20/54/8
f 52/55/8 37/56/8 23/57/8
f 24/58/8 38/59/8 71/60/8
f 72/61/8 39/62/8 73/63/8
f 60/64/8 41/65/8 74/66/8
f 61/67/8 44/68/8 26/69/8
f 27/70/8 28/71/8 46/72/8
f 66/73/8 89/74/8 29/75/8
f 64/76/8 91/77/8 47/78/8
f 13/79/5 62/80/5 76/81/5
f 34/82/1 33/83/1 19/84/1
f 16/85/8 68/86/8 15/87/8
f 15/87/9 30/88/9 67/20/9
f 16/85/9 31/51/9 17/89/9
f 69/90/9 20/54/9 19/50/9
f 51/91/9 23/57/9 22/53/9
f 70/92/9 71/60/9 37/56/9
f 58/93/9 73/63/9 38/59/9
f 25/94/9 74/66/9 39/62/9
f 75/95/9 26/69/9 41/65/9
f 76/96/9 46/72/9 44/68/9
f 65/97/9 29/75/9 28/71/9
f 33/27/10 81/98/10 32/22/10
f 34/30/10 82/99/10 35/25/10
f 9/33/10 54/100/10 36/28/10
f 84/36/10 56/101/10 83/31/10
f 40/39/10 86/102/10 85/34/10
f 42/37/10 13/41/10 10/103/10
f 45/45/10 12/104/10 11/40/10
f 48/48/10 88/105/10 87/43/10
f 89/74/10 64/76/10 47/106/10
f 91/77/10 14/107/10 49/46/10
f 80/23/10 77/19/10 79/24/10
f 5/1/1 6/108/1 2/2/1
f 2/4/2 1/109/2 3/5/2
f 4/7/3 6/110/3 5/8/3
f 6/10/4 4/111/4 1/11/4
f 3/13/5 1/112/5 4/14/5
f 3/16/6 8/113/6 5/17/6
f 77/19/7 78/114/7 67/20/7
f 32/22/7 81/98/7 80/23/7
f 35/25/7 82/99/7 50/26/7
f 36/28/7 54/100/7 53/29/7
f 83/31/7 56/101/7 55/32/7
f 85/34/7 86/102/7 57/35/7
f 42/37/7 10/103/7 59/38/7
f 11/40/7 12/104/7 13/41/7
f 87/43/7 88/105/7 62/44/7
f 49/46/7 14/107/7 63/47/7
f 18/49/8 69/90/8 19/50/8
f 21/52/8 51/91/8 22/53/8
f 52/55/8 70/92/8 37/56/8
f 24/58/8 58/93/8 38/59/8
f 72/61/8 25/94/8 39/62/8
f 60/64/8 75/95/8 41/65/8
f 61/67/8 76/96/8 44/68/8
f 27/70/8 65/97/8 28/71/8
f 66/73/8 90/115/8 89/74/8
f 64/76/8 92/116/8 91/77/8
f 69/117/5 18/118/5 16/119/5
f 16/119/5 15/120/5 67/121/5
f 67/121/5 78/122/5 80/123/5
f 80/123/5 81/124/5 50/125/5
f 50/125/5 82/126/5 53/127/5
f 53/127/5 54/128/5 55/129/5
f 55/129/5 56/130/5 57/131/5
f 57/131/5 86/132/5 59/133/5
f 59/133/5 10/134/5 13/79/5
f 13/79/5 12/135/5 62/80/5
f 62/80/5 88/136/5 63/137/5
f 63/137/5 14/138/5 92/139/5
f 64/140/5 90/141/5 65/142/5
f 90/141/5 66/143/5 65/142/5
f 63/137/5 92/139/5 64/140/5
f 62/80/5 63/137/5 65/142/5
f 63/137/5 64/140/5 65/142/5
f 65/142/5 27/144/5 76/81/5
f 76/81/5 61/145/5 75/146/5
f 75/146/5 60/147/5 25/148/5
f 25/148/5 72/149/5 58/150/5
f 58/150/5 24/151/5 70/152/5
f 70/152/5 52/153/5 51/154/5
f 51/154/5 21/155/5 69/117/5
f 69/117/5 16/119/5 80/123/5
f 16/119/5 67/121/5 80/123/5
f 80/123/5 50/125/5 69/117/5
f 53/127/5 55/129/5 51/154/5
f 55/129/5 57/131/5 70/152/5
f 51/154/5 55/129/5 70/152/5
f 50/125/5 53/127/5 51/154/5
f 51/154/5 69/117/5 50/125/5
f 58/150/5 70/152/5 57/131/5
f 75/146/5 25/148/5 59/133/5
f 25/148/5 58/150/5 57/131/5
f 65/142/5 76/81/5 62/80/5
f 76/81/5 75/146/5 13/79/5
f 57/131/5 59/133/5 25/148/5
f 59/133/5 13/79/5 75/146/5
f 38/156/1 73/157/1 39/158/1
f 39/158/1 74/159/1 41/160/1
f 41/160/1 26/161/1 44/162/1
f 44/162/1 46/163/1 28/164/1
f 28/164/1 29/165/1 89/166/1
f 47/167/1 91/168/1 49/169/1
f 28/164/1 89/166/1 47/167/1
f 41/160/1 44/162/1 45/170/1
f 44/162/1 28/164/1 45/170/1
f 38/156/1 39/158/1 40/171/1
f 39/158/1 41/160/1 43/172/1
f 37/173/1 71/174/1 38/156/1
f 22/175/1 23/176/1 37/173/1
f 19/84/1 20/177/1 22/175/1
f 17/178/1 31/179/1 19/84/1
f 30/180/1 68/181/1 17/178/1
f 79/182/1 77/183/1 30/180/1
f 33/83/1 32/184/1 79/182/1
f 34/82/1 35/185/1 33/83/1
f 9/186/1 36/187/1 34/82/1
f 84/188/1 83/189/1 9/186/1
f 40/171/1 85/190/1 84/188/1
f 43/172/1 42/191/1 40/171/1
f 45/170/1 11/192/1 43/172/1
f 48/193/1 87/194/1 45/170/1
f 47/167/1 49/169/1 48/193/1
f 28/164/1 47/167/1 48/193/1
f 45/170/1 28/164/1 48/193/1
f 22/175/1 37/173/1 9/186/1
f 37/173/1 38/156/1 84/188/1
f 39/158/1 43/172/1 40/171/1
f 43/172/1 41/160/1 45/170/1
f 40/171/1 84/188/1 38/156/1
f 37/173/1 84/188/1 9/186/1
f 30/180/1 17/178/1 79/182/1
f 17/178/1 19/84/1 33/83/1
f 19/84/1 22/175/1 34/82/1
f 9/186/1 34/82/1 22/175/1
f 33/83/1 79/182/1 17/178/1
f 16/85/8 17/89/8 68/86/8
f 15/87/9 68/86/9 30/88/9
f 16/85/9 18/49/9 31/51/9
f 69/90/9 21/52/9 20/54/9
f 51/91/9 52/55/9 23/57/9
f 70/92/9 24/58/9 71/60/9
f 58/93/9 72/61/9 73/63/9
f 25/94/9 60/64/9 74/66/9
f 75/95/9 61/67/9 26/69/9
f 76/96/9 27/70/9 46/72/9
f 65/97/9 66/73/9 29/75/9
f 33/27/10 50/26/10 81/98/10
f 34/30/10 53/29/10 82/99/10
f 9/33/10 55/32/10 54/100/10
f 84/36/10 57/35/10 56/101/10
f 40/39/10 59/38/10 86/102/10
f 42/37/10 43/42/10 13/41/10
f 45/45/10 62/44/10 12/104/10
f 48/48/10 63/47/10 88/105/10
f 89/74/10 90/115/10 64/76/10
f 91/77/10 92/116/10 14/107/10
f 80/23/10 78/114/10 77/19/10

View file

@ -0,0 +1,235 @@
# Blender v2.83.20 OBJ File: 'everness_lotus_flower.blend'
# www.blender.org
mtllib everness_lotus_flower.mtl
o Cube
v -0.308107 -0.055472 -0.746216
v -0.009900 -0.499000 -0.342751
v 0.655918 0.011755 -0.265300
v -0.732371 -0.055472 -0.321952
v -0.328906 -0.499000 -0.023745
v -0.308107 -0.055472 0.698725
v 0.231654 0.011755 -0.689564
v 0.288417 -0.055942 0.698836
v 0.712681 -0.055942 0.274572
v -0.732371 -0.055472 0.274461
v -0.486053 -0.100909 -0.211530
v -0.160819 -0.498639 -0.160819
v 0.211530 -0.100909 -0.486054
v 0.160819 -0.498639 -0.160819
v -0.486053 -0.100909 0.211530
v -0.160819 -0.498639 0.160819
v 0.211530 -0.100909 0.486053
v 0.160819 -0.498639 0.160819
v -0.211530 -0.100909 -0.486054
v 0.486054 -0.100909 0.211530
v 0.486054 -0.100909 -0.211530
v -0.211530 -0.100909 0.486053
v 0.160592 -0.498186 0.160592
v 0.160592 -0.177003 0.160592
v -0.160592 -0.498186 0.160592
v -0.160592 -0.177003 0.160592
v 0.160592 -0.498186 -0.160592
v 0.160592 -0.177003 -0.160592
v -0.160592 -0.498186 -0.160592
v -0.160592 -0.177003 -0.160592
v 0.309302 -0.499453 -0.023720
v -0.009875 -0.499453 0.295457
v 0.000000 -0.330263 0.355694
v 0.000000 0.589835 0.355694
v -0.355694 -0.330263 -0.000000
v -0.355694 0.589835 -0.000000
v 0.355694 -0.330263 -0.000000
v 0.355694 0.589835 -0.000000
v 0.000000 -0.330263 -0.355694
v 0.000000 0.589835 -0.355694
v 0.500438 -0.055472 -0.534084
v 0.149602 -0.499000 -0.183248
v 0.548643 -0.154723 -0.000000
v 0.160819 -0.498639 -0.000000
v 0.000000 -0.154723 -0.548643
v 0.000000 -0.498639 -0.160819
v -0.160819 -0.498639 -0.000000
v -0.548642 -0.154723 -0.000000
v 0.000000 -0.498639 0.160819
v 0.000000 -0.154723 0.548642
v -0.169403 -0.499000 0.135758
v -0.567776 -0.135591 0.534130
v -0.169403 -0.499000 -0.183248
v -0.567776 -0.135591 -0.581621
v 0.548086 -0.136060 0.534241
v 0.150919 -0.498639 0.137074
vt 0.500000 0.750000
vt -0.000000 0.500000
vt 0.000000 0.750000
vt 0.500000 0.750000
vt -0.000000 0.500000
vt 0.000000 0.750000
vt 0.000000 0.250000
vt 0.500000 0.250000
vt 0.250000 0.000000
vt 0.500000 0.750000
vt 0.000000 0.500000
vt 0.000000 0.750000
vt 0.000000 1.000000
vt 0.875000 0.812500
vt 0.500000 0.625000
vt 0.500000 0.812500
vt 0.875000 0.812500
vt 0.500000 0.625000
vt 0.500000 0.812500
vt 0.875000 0.625000
vt 0.500000 0.250000
vt 0.875000 0.250000
vt 0.875000 0.625000
vt 0.500000 0.250000
vt 0.875000 0.250000
vt 0.875000 0.625000
vt 0.500000 0.250000
vt 0.875000 0.250000
vt 0.875000 0.625000
vt 0.500000 0.250000
vt 0.875000 0.250000
vt 0.500000 0.250000
vt 0.875000 0.250000
vt 0.000000 1.000000
vt 0.875000 0.812500
vt 0.500000 1.000000
vt 0.875000 1.000000
vt 0.500000 0.625000
vt 0.500000 0.812500
vt 0.500000 1.000000
vt 0.875000 1.000000
vt 0.875000 0.812500
vt 0.500000 0.625000
vt 0.500000 0.812500
vt 0.500000 1.000000
vt 0.875000 1.000000
vt 0.500000 1.000000
vt 0.875000 1.000000
vt -0.000000 1.000000
vt 0.500000 1.000000
vt 0.000000 1.000000
vt 0.500000 0.750000
vt 0.000000 0.750000
vt 0.000000 0.500000
vt 0.500000 0.500000
vt 0.500000 0.500000
vt -0.000000 0.000000
vt 0.500000 0.500000
vt 0.500000 0.000000
vt 0.500000 0.500000
vt 0.500000 1.000000
vt 0.875000 0.625000
vt 0.875000 0.625000
vt 0.500000 0.625000
vt 0.500000 0.625000
vt 0.500000 0.625000
vt 0.500000 0.625000
vt 0.500000 1.000000
vt 0.875000 0.625000
vt 0.875000 0.625000
vt 0.500000 1.000000
vt 0.500000 0.500000
vt 0.500000 0.000000
vt 0.500000 1.000000
vt 0.250000 1.000000
vt 0.250000 -0.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.750000 1.000000
vt 0.750000 0.000000
vn -0.3842 0.8402 -0.3827
vn 0.3847 0.8403 -0.3819
vn 0.0000 1.0000 0.0000
vn -0.4713 0.7455 0.4713
vn 0.3833 0.8403 -0.3833
vn 0.0000 0.7482 0.6635
vn 0.6635 0.7482 -0.0000
vn 0.0000 0.0000 1.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn -0.4699 0.7455 0.4726
vn -0.6979 0.6171 -0.3635
vn -0.6635 0.7482 -0.0000
vn 0.6979 0.6171 0.3635
vn -0.0000 0.7482 -0.6635
vn 0.3635 0.6171 -0.6979
vn -0.3635 0.6171 0.6979
vn -0.1925 0.7280 -0.6580
vn 0.3833 0.8403 0.3833
vn -0.6580 0.7280 -0.1925
vn 0.1928 0.7276 -0.6584
vn 0.0014 1.0000 0.0014
vn -0.2680 0.6247 0.7334
vn 0.6580 0.7280 -0.1925
vn 0.3635 0.6171 0.6979
vn 0.6979 0.6171 -0.3635
vn -0.7337 0.6243 0.2683
vn -0.6979 0.6171 0.3635
vn -0.3635 0.6171 -0.6979
vn -0.3827 0.8402 -0.3842
vn 0.1925 0.7280 0.6580
vn 0.6580 0.7280 0.1925
vn -0.7071 0.0000 0.7071
vn -0.7071 0.0000 -0.7071
vn 0.7071 0.0000 -0.7071
vn 0.7071 0.0000 0.7071
g Cube_Cube_lotus
usemtl lotus
s off
f 55/1/1 31/2/1 56/3/1
f 52/4/2 32/5/2 51/6/2
f 51/7/3 42/8/3 53/9/3
f 41/10/4 2/11/4 42/12/4
f 5/13/5 52/4/5 51/6/5
f 45/14/6 12/15/6 46/16/6
f 48/17/7 16/18/7 47/19/7
f 24/20/8 25/21/8 23/22/8
f 26/23/9 29/24/9 25/25/9
f 30/26/10 27/27/10 29/28/10
f 28/29/11 23/30/11 27/31/11
f 26/23/3 28/32/3 30/33/3
f 31/34/12 41/10/12 42/12/12
f 43/35/13 18/36/13 20/37/13
f 43/35/14 14/38/14 44/39/14
f 48/17/15 12/40/15 11/41/15
f 50/42/16 18/43/16 49/44/16
f 50/42/17 16/45/17 22/46/17
f 45/14/18 14/47/18 13/48/18
f 55/1/19 32/49/19 8/50/19
f 2/51/20 54/52/20 53/53/20
f 54/52/20 5/54/20 53/53/20
f 55/1/21 9/55/21 31/2/21
f 52/4/22 6/56/22 32/5/22
f 53/9/3 5/57/3 51/7/3
f 51/7/23 32/5/23 31/58/23
f 42/8/3 2/59/3 53/9/3
f 51/7/23 31/58/23 42/8/23
f 41/10/24 7/60/24 2/11/24
f 5/13/25 10/61/25 52/4/25
f 45/14/26 19/62/26 12/15/26
f 48/17/27 15/63/27 16/18/27
f 24/20/8 26/64/8 25/21/8
f 26/23/9 30/65/9 29/24/9
f 30/26/10 28/66/10 27/27/10
f 28/29/11 24/67/11 23/30/11
f 26/23/3 24/67/3 28/32/3
f 31/34/28 3/68/28 41/10/28
f 43/35/14 44/39/14 18/36/14
f 43/35/29 21/69/29 14/38/29
f 48/17/7 47/19/7 12/40/7
f 50/42/30 17/70/30 18/43/30
f 50/42/16 49/44/16 16/45/16
f 45/14/6 46/16/6 14/47/6
f 55/1/31 56/3/31 32/49/31
f 2/51/32 1/71/32 54/52/32
f 54/52/33 4/72/33 5/54/33
g Cube_Cube_flies
usemtl flies
f 33/73/34 34/74/34 36/75/34 35/76/34
f 35/76/35 36/75/35 40/77/35 39/78/35
f 39/79/36 40/80/36 38/81/36 37/82/36
f 37/82/37 38/81/37 34/74/37 33/73/37

View file

@ -0,0 +1,88 @@
# Blender v2.83.20 OBJ File: 'everness_lumabus.blend'
# www.blender.org
mtllib everness_lumabus.mtl
o Cube
v 0.312500 -0.499500 0.312500
v 0.312500 0.125500 0.312500
v 0.312500 -0.499500 -0.312500
v 0.312500 0.125500 -0.312500
v -0.312500 -0.499500 0.312500
v -0.312500 0.125500 0.312500
v -0.312500 -0.499500 -0.312500
v -0.312500 0.125500 -0.312500
v 0.312500 -0.499828 0.312500
v 0.791278 -0.098086 0.312500
v 0.312500 -0.499828 -0.312500
v 0.312500 -0.098086 -0.791278
v -0.312500 -0.499828 0.312500
v -0.312500 -0.098086 0.791278
v -0.312500 -0.499828 -0.312500
v -0.312500 -0.098086 -0.791278
v -0.791278 -0.098086 -0.312500
v 0.791278 -0.098086 -0.312500
v 0.312500 -0.098086 0.791278
v -0.791278 -0.098086 0.312500
vt 0.750000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.000000
vt 0.750000 0.000000
vt 0.750000 0.500000
vt 0.750000 1.000000
vt 0.250000 1.000000
vt 0.250000 0.500000
vt 0.750000 1.000000
vt 0.750000 0.500000
vt 0.250000 0.500000
vt 0.750000 0.500000
vt 0.750000 0.000000
vt 0.250000 0.000000
vt 0.750000 1.000000
vt 0.250000 1.000000
vt 0.250000 0.500000
vt 0.250000 1.000000
vt 0.681818 0.681818
vt 0.318182 0.681818
vt 0.318182 0.318182
vt 0.681818 0.318182
vt 0.681818 -0.000000
vt 0.681818 0.363636
vt 0.318182 0.363636
vt 0.318182 -0.000000
vt -0.000000 0.318182
vt 0.363636 0.318182
vt 0.363636 0.681818
vt -0.000000 0.681818
vt 1.000000 0.681818
vt 0.636364 0.681818
vt 0.636364 0.318182
vt 1.000000 0.318182
vt 0.318182 1.000000
vt 0.318182 0.636364
vt 0.681818 0.636364
vt 0.681818 1.000000
vn 0.0000 -1.0000 -0.0000
vn 0.0000 0.0000 -1.0000
vn -1.0000 -0.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 -0.0000 1.0000
vn 0.0000 -0.7660 -0.6428
vn -0.6428 -0.7660 -0.0000
vn 0.6428 -0.7660 -0.0000
vn 0.0000 -0.7660 0.6428
g Cube_Cube_bulb
usemtl bulb
s off
f 1/1/1 5/2/1 7/3/1 3/4/1
f 4/5/2 3/6/2 7/7/2 8/8/2
f 8/8/3 7/7/3 5/9/3 6/10/3
f 6/11/4 2/12/4 4/13/4 8/14/4
f 2/12/5 1/15/5 3/16/5 4/17/5
f 6/11/6 5/18/6 1/15/6 2/12/6
g Cube_Cube_leaves
usemtl leaves
f 9/19/1 13/20/1 15/21/1 11/22/1
f 12/23/7 11/24/7 15/25/7 16/26/7
f 17/27/8 15/28/8 13/29/8 20/30/8
f 10/31/9 9/32/9 11/33/9 18/34/9
f 14/35/10 13/36/10 9/37/10 19/38/10

View file

@ -0,0 +1,84 @@
# Blender v2.83.20 OBJ File: 'everness_lumecorn.blend'
# www.blender.org
mtllib everness_lumecorn.mtl
o Cube
v 0.441942 0.750000 -0.441942
v 0.441942 -0.500000 -0.441942
v -0.441942 0.750000 0.441942
v -0.441942 -0.500000 0.441942
v -0.441942 0.750000 -0.441942
v -0.441942 -0.500000 -0.441942
v 0.441942 0.750000 0.441942
v 0.441942 -0.500000 0.441942
v 1.767767 0.350000 0.000000
v -0.000000 0.350000 -1.767767
v 0.000000 0.350000 1.767767
v -1.767767 0.350000 -0.000000
v -0.883883 0.750000 -0.883883
v 0.883883 0.750000 0.883883
v -0.883883 0.750000 0.883883
v 0.883883 0.750000 -0.883883
v 0.000000 0.750000 0.000000
v -0.441942 5.750000 -0.441942
v -0.441942 0.750000 -0.441942
v 0.441942 5.750000 0.441942
v 0.441942 0.750000 0.441942
v -0.441942 5.750000 0.441942
v -0.441942 0.750000 0.441942
v 0.441942 5.750000 -0.441942
v 0.441942 0.750000 -0.441942
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.000100 0.999900
vt 0.000100 0.000100
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.000100 0.999900
vt 0.000100 0.000100
vt 0.000000 0.500000
vt 0.500000 1.000000
vt 1.000000 0.500000
vt 1.000000 0.500000
vt 0.500000 0.000000
vt 0.000000 0.500000
vt 1.000000 0.500000
vt 0.000000 0.500000
vt 0.000000 0.500000
vt 0.500000 1.000000
vt 1.000000 0.500000
vt 0.500000 1.000000
vt 0.500000 1.000000
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.000100 0.999900
vt 0.000100 0.000100
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.000100 0.999900
vt 0.000100 0.000100
vn -0.7071 0.0000 0.7071
vn 0.7071 0.0000 0.7071
vn 0.0000 -0.9111 -0.4123
vn 0.0000 -1.0000 0.0000
vn -0.4123 -0.9111 0.0000
vn -0.0000 -0.9111 0.4123
vn 0.4123 -0.9111 -0.0000
g Cube_Cube_root
usemtl root
s off
f 8/1/1 7/2/1 5/3/1 6/4/1
f 2/5/2 1/6/2 3/7/2 4/8/2
g Cube_Cube_leaves
usemtl leaves
f 14/9/3 11/10/3 15/11/3
f 13/12/4 17/13/4 15/14/4
f 16/15/4 17/13/4 13/16/4
f 16/17/5 9/18/5 14/19/5
f 17/13/4 14/9/4 15/11/4
f 17/13/4 16/17/4 14/19/4
f 10/20/6 16/15/6 13/16/6
f 12/21/7 13/12/7 15/14/7
g Cube_Cube_light
usemtl light
f 21/22/1 20/23/1 18/24/1 19/25/1
f 25/26/2 24/27/2 22/28/2 23/29/2

View file

@ -0,0 +1,243 @@
# Blender v2.83.20 OBJ File: 'everness_mineral_torch.blend'
# www.blender.org
mtllib everness_mineral_torch.mtl
o everness_mineral_torch.vox
v -0.062500 -0.490000 0.062500
v -0.062500 0.135000 0.062500
v -0.125000 0.135000 -0.125000
v -0.125000 0.385000 0.125000
v -0.000000 0.510000 0.062500
v -0.000000 0.447500 0.062500
v 0.000000 0.447500 0.250000
v 0.125000 0.385000 -0.125000
v -0.000000 -0.052500 0.062500
v 0.062500 -0.490000 0.062500
v 0.000000 0.447500 0.187500
v -0.000000 0.010000 0.062500
v 0.000000 0.135000 0.187500
v 0.125000 0.385000 0.125000
v 0.000000 0.385000 -0.187500
v -0.000000 0.072500 0.125000
v 0.000000 0.447500 -0.062500
v 0.000000 0.385000 0.250000
v -0.000000 0.010000 0.125000
v 0.000000 -0.052500 -0.125000
v 0.000000 0.010000 -0.125000
v -0.000000 -0.052500 0.125000
v 0.000000 0.010000 -0.187500
v 0.000000 0.072500 -0.187500
v 0.000000 0.072500 -0.250000
v 0.000000 0.135000 -0.250000
v 0.000000 0.510000 0.187500
v 0.062500 0.135000 -0.125000
v 0.000000 0.135000 -0.312500
v -0.125000 0.385000 -0.125000
v 0.000000 0.385000 -0.312500
v 0.000000 0.385000 0.312500
v 0.000000 0.510000 -0.187500
v 0.000000 0.135000 0.312500
v -0.062500 -0.490000 -0.062500
v 0.000000 0.385000 0.187500
v 0.062500 -0.490000 -0.062500
v 0.000000 0.135000 0.250000
v 0.000000 0.072500 0.250000
v 0.000000 0.072500 0.187500
v -0.125000 0.135000 0.125000
v 0.062500 0.135000 0.062500
v 0.125000 0.135000 0.125000
v -0.125000 0.135000 -0.062500
v -0.062500 0.135000 -0.062500
v 0.062500 0.135000 -0.062500
v 0.125000 0.135000 -0.125000
v 0.000000 0.385000 -0.250000
v 0.000000 0.072500 -0.125000
v 0.000000 0.135000 -0.187500
v 0.000000 0.010000 0.187500
v 0.000000 0.010000 -0.062500
v 0.000000 0.447500 -0.187500
v 0.000000 -0.052500 -0.062500
v 0.000000 0.447500 -0.250000
v 0.000000 0.510000 -0.062500
v 0.196875 0.072500 0.187500
v -0.178125 0.072500 0.187500
v -0.178125 0.447500 -0.187500
v 0.196875 0.447500 0.187500
v 0.196875 0.447500 -0.187500
v -0.178125 0.447500 0.187500
v -0.178125 0.072500 -0.187500
v 0.196875 0.072500 -0.187500
vt 0.250000 0.500000
vt 0.187500 0.437500
vt 0.250000 0.437500
vt 0.187500 0.562500
vt 0.125000 0.500000
vt 0.187500 0.500000
vt 0.250000 0.625000
vt 0.437500 0.875000
vt 0.187500 0.875000
vt 0.125000 0.625000
vt 0.062500 0.562500
vt 0.125000 0.562500
vt 0.125000 0.937500
vt 0.062500 0.875000
vt 0.125000 0.875000
vt 0.375000 0.000000
vt 0.250000 0.625000
vt 0.250000 0.000000
vt 0.375000 0.000000
vt 0.250000 0.625000
vt 0.250000 0.000000
vt 0.125000 1.000000
vt 0.250000 0.937500
vt 0.250000 1.000000
vt 0.187500 0.875000
vt 0.437500 0.625000
vt 0.437500 0.875000
vt 0.187500 0.625000
vt 0.187500 0.875000
vt 0.375000 0.625000
vt 0.500000 0.625000
vt 0.562500 0.562500
vt 0.500000 0.562500
vt 0.250000 0.625000
vt 0.437500 0.875000
vt 0.000000 0.625000
vt 0.062500 0.625000
vt 0.187500 0.875000
vt 0.437500 0.625000
vt 0.437500 0.875000
vt 0.562500 0.875000
vt 0.625000 0.625000
vt 0.562500 0.625000
vt 0.500000 0.937500
vt 0.500000 0.875000
vt 0.437500 0.562500
vt 0.500000 0.500000
vt 0.437500 0.500000
vt 0.250000 -0.000000
vt 0.125000 0.125000
vt 0.125000 -0.000000
vt 0.187500 0.625000
vt 0.437500 0.625000
vt 0.250000 0.687500
vt 0.375000 0.812500
vt 0.437500 0.812500
vt 0.437500 0.875000
vt 0.375000 0.500000
vt 0.437500 0.437500
vt 0.375000 0.437500
vt 0.500000 1.000000
vt 0.375000 0.937500
vt 0.375000 1.000000
vt 0.187500 0.625000
vt 0.062500 0.937500
vt 0.375000 0.625000
vt 0.187500 0.625000
vt 0.437500 0.625000
vt 0.187500 0.625000
vt 0.437500 0.625000
vt 0.000000 0.875000
vt 0.625000 0.875000
vt 0.562500 0.937500
vt 0.250000 0.125000
vt 0.250000 0.812500
vt 0.250000 0.875000
vt 0.187500 0.875000
vt 0.375000 0.687500
vt 0.333333 1.000000
vt 0.500000 -0.000000
vt 0.500000 1.000000
vt 0.666667 -0.000000
vt 0.166667 -0.000000
vt 0.166667 1.000000
vt 0.833333 -0.000000
vt 0.666667 1.000000
vt 0.666667 -0.000000
vt 0.000000 1.000000
vt 0.000000 -0.000000
vt 1.000000 -0.000000
vt 0.833333 1.000000
vt 0.833333 -0.000000
vt 0.333333 -0.000000
vt 0.666667 1.000000
vt 0.833333 1.000000
vt 1.000000 1.000000
vn -1.0000 0.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 -1.0000 0.0000
g everness_mineral_torch.vox_everness_mineral_torch.vox_torch
usemtl torch
s off
f 52/1/1 20/2/1 54/3/1
f 49/4/1 23/5/1 21/6/1
f 44/7/1 4/8/1 30/9/1
f 50/10/1 25/11/1 24/12/1
f 53/13/1 48/14/1 15/15/1
f 1/16/1 45/17/1 35/18/1
f 37/19/2 42/20/2 10/21/2
f 33/22/1 17/23/1 56/24/1
f 8/25/3 4/26/3 14/27/3
f 42/20/4 1/16/4 10/21/4
f 41/28/4 14/27/4 4/29/4
f 46/30/5 35/18/5 45/17/5
f 13/31/2 39/32/2 40/33/2
f 28/34/5 30/35/5 8/25/5
f 48/14/1 29/36/1 26/37/1
f 14/38/2 47/39/2 8/40/2
f 18/41/2 34/42/2 38/43/2
f 11/44/2 18/41/2 36/45/2
f 16/46/2 51/47/2 19/48/2
f 1/49/6 37/50/6 10/51/6
f 43/52/6 41/53/6 42/54/6
f 45/55/6 44/56/6 3/57/6
f 12/58/2 22/59/2 9/60/2
f 27/61/2 6/62/2 5/63/2
f 52/1/1 21/6/1 20/2/1
f 49/4/1 24/12/1 23/5/1
f 30/9/1 3/64/1 44/7/1
f 44/7/1 41/53/1 4/8/1
f 50/10/1 26/37/1 25/11/1
f 53/13/1 55/65/1 48/14/1
f 1/16/1 2/66/1 45/17/1
f 37/19/2 46/30/2 42/20/2
f 33/22/1 53/13/1 17/23/1
f 8/25/3 30/67/3 4/26/3
f 42/20/4 2/66/4 1/16/4
f 41/28/4 43/68/4 14/27/4
f 46/30/5 37/19/5 35/18/5
f 13/31/2 38/43/2 39/32/2
f 8/25/5 47/69/5 28/34/5
f 28/34/5 3/70/5 30/35/5
f 48/14/1 31/71/1 29/36/1
f 14/38/2 43/52/2 47/39/2
f 18/41/2 32/72/2 34/42/2
f 11/44/2 7/73/2 18/41/2
f 16/46/2 40/33/2 51/47/2
f 1/49/6 35/74/6 37/50/6
f 42/54/6 46/75/6 43/52/6
f 46/75/6 28/76/6 47/77/6
f 43/52/6 46/75/6 47/77/6
f 41/53/6 44/56/6 2/78/6
f 44/56/6 45/55/6 2/78/6
f 41/53/6 2/78/6 42/54/6
f 3/57/6 28/76/6 45/55/6
f 28/76/6 46/75/6 45/55/6
f 12/58/2 19/48/2 22/59/2
f 27/61/2 11/44/2 6/62/2
g everness_mineral_torch.vox_everness_mineral_torch.vox_particle_cube
usemtl particle_cube
f 60/79/2 64/80/2 61/81/2
f 63/82/5 61/81/5 64/80/5
f 58/83/4 60/79/4 62/84/4
f 61/85/3 62/86/3 60/87/3
f 58/83/1 59/88/1 63/89/1
f 58/90/6 64/91/6 57/92/6
f 60/79/2 57/93/2 64/80/2
f 63/82/5 59/94/5 61/81/5
f 58/83/4 57/93/4 60/79/4
f 61/85/3 59/95/3 62/86/3
f 58/83/1 62/84/1 59/88/1
f 58/90/6 63/96/6 64/91/6

View file

@ -0,0 +1,243 @@
# Blender v2.83.20 OBJ File: 'everness_mineral_torch_wall.blend'
# www.blender.org
mtllib everness_mineral_torch_ceiling.mtl
o everness_mineral_torch.vox
v 0.062500 -0.561250 -0.170873
v 0.062500 -0.019984 0.141627
v -0.125000 -0.051234 0.195753
v 0.125000 0.165272 0.320753
v 0.062500 0.336025 0.275000
v 0.062500 0.281899 0.243750
v 0.250000 0.281899 0.243750
v -0.125000 0.290272 0.104247
v 0.062500 -0.151114 -0.006250
v 0.062500 -0.498750 -0.279127
v 0.187500 0.281899 0.243750
v 0.062500 -0.096987 0.025000
v 0.187500 0.011266 0.087500
v 0.125000 0.290272 0.104247
v -0.187500 0.227772 0.212500
v 0.125000 -0.042861 0.056250
v -0.062500 0.281899 0.243750
v 0.250000 0.227772 0.212500
v 0.125000 -0.096987 0.025000
v -0.125000 -0.151114 -0.006250
v -0.125000 -0.096987 0.025000
v 0.125000 -0.151114 -0.006250
v -0.187500 -0.096987 0.025000
v -0.187500 -0.042861 0.056250
v -0.250000 -0.042861 0.056250
v -0.250000 0.011266 0.087500
v 0.187500 0.336025 0.275000
v -0.125000 0.042516 0.033373
v -0.312500 0.011266 0.087500
v -0.125000 0.165272 0.320753
v -0.312500 0.227772 0.212500
v 0.312500 0.227772 0.212500
v -0.187500 0.336025 0.275000
v 0.312500 0.011266 0.087500
v -0.062500 -0.561250 -0.170873
v 0.187500 0.227772 0.212500
v -0.062500 -0.498750 -0.279127
v 0.250000 0.011266 0.087500
v 0.250000 -0.042861 0.056250
v 0.187500 -0.042861 0.056250
v 0.125000 -0.051234 0.195753
v 0.062500 0.042516 0.033373
v 0.125000 0.073766 -0.020753
v -0.062500 -0.051234 0.195753
v -0.062500 -0.019984 0.141627
v -0.062500 0.042516 0.033373
v -0.125000 0.073766 -0.020753
v -0.250000 0.227772 0.212500
v -0.125000 -0.042861 0.056250
v -0.187500 0.011266 0.087500
v 0.187500 -0.096987 0.025000
v -0.062500 -0.096987 0.025000
v -0.187500 0.281899 0.243750
v -0.062500 -0.151114 -0.006250
v -0.250000 0.281899 0.243750
v -0.062500 0.336025 0.275000
v 0.187500 0.055577 -0.114249
v 0.187500 -0.131923 0.210511
v -0.187500 0.192836 0.398011
v 0.187500 0.380336 0.073251
v -0.187500 0.380336 0.073251
v 0.187500 0.192836 0.398011
v -0.187500 -0.131923 0.210511
v -0.187500 0.055577 -0.114249
vt 0.250000 0.500000
vt 0.187500 0.437500
vt 0.250000 0.437500
vt 0.187500 0.562500
vt 0.125000 0.500000
vt 0.187500 0.500000
vt 0.250000 0.625000
vt 0.437500 0.875000
vt 0.187500 0.875000
vt 0.125000 0.625000
vt 0.062500 0.562500
vt 0.125000 0.562500
vt 0.125000 0.937500
vt 0.062500 0.875000
vt 0.125000 0.875000
vt 0.375000 0.000000
vt 0.250000 0.625000
vt 0.250000 0.000000
vt 0.375000 0.000000
vt 0.250000 0.625000
vt 0.250000 0.000000
vt 0.125000 1.000000
vt 0.250000 0.937500
vt 0.250000 1.000000
vt 0.187500 0.875000
vt 0.437500 0.625000
vt 0.437500 0.875000
vt 0.187500 0.625000
vt 0.187500 0.875000
vt 0.375000 0.625000
vt 0.500000 0.625000
vt 0.562500 0.562500
vt 0.500000 0.562500
vt 0.250000 0.625000
vt 0.437500 0.875000
vt 0.000000 0.625000
vt 0.062500 0.625000
vt 0.187500 0.875000
vt 0.437500 0.625000
vt 0.437500 0.875000
vt 0.562500 0.875000
vt 0.625000 0.625000
vt 0.562500 0.625000
vt 0.500000 0.937500
vt 0.500000 0.875000
vt 0.437500 0.562500
vt 0.500000 0.500000
vt 0.437500 0.500000
vt 0.250000 -0.000000
vt 0.125000 0.125000
vt 0.125000 -0.000000
vt 0.187500 0.625000
vt 0.437500 0.625000
vt 0.250000 0.687500
vt 0.375000 0.812500
vt 0.437500 0.812500
vt 0.437500 0.875000
vt 0.375000 0.500000
vt 0.437500 0.437500
vt 0.375000 0.437500
vt 0.500000 1.000000
vt 0.375000 0.937500
vt 0.375000 1.000000
vt 0.187500 0.625000
vt 0.062500 0.937500
vt 0.375000 0.625000
vt 0.187500 0.625000
vt 0.437500 0.625000
vt 0.187500 0.625000
vt 0.437500 0.625000
vt 0.000000 0.875000
vt 0.625000 0.875000
vt 0.562500 0.937500
vt 0.250000 0.125000
vt 0.250000 0.812500
vt 0.250000 0.875000
vt 0.187500 0.875000
vt 0.375000 0.687500
vt 0.333333 1.000000
vt 0.500000 -0.000000
vt 0.500000 1.000000
vt 0.666667 -0.000000
vt 0.166667 -0.000000
vt 0.166667 1.000000
vt 0.833333 -0.000000
vt 0.666667 1.000000
vt 0.666667 -0.000000
vt 0.000000 1.000000
vt 0.000000 -0.000000
vt 1.000000 -0.000000
vt 0.833333 1.000000
vt 0.833333 -0.000000
vt 0.333333 -0.000000
vt 0.666667 1.000000
vt 0.833333 1.000000
vt 1.000000 1.000000
vn 0.0000 -0.5000 0.8660
vn 0.0000 0.5000 -0.8660
vn 0.0000 0.8660 0.5000
vn 1.0000 0.0000 -0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 -0.8660 -0.5000
g everness_mineral_torch.vox_everness_mineral_torch.vox_torch
usemtl torch
s off
f 52/1/1 20/2/1 54/3/1
f 49/4/1 23/5/1 21/6/1
f 44/7/1 4/8/1 30/9/1
f 50/10/1 25/11/1 24/12/1
f 53/13/1 48/14/1 15/15/1
f 1/16/1 45/17/1 35/18/1
f 37/19/2 42/20/2 10/21/2
f 33/22/1 17/23/1 56/24/1
f 8/25/3 4/26/3 14/27/3
f 42/20/4 1/16/4 10/21/4
f 41/28/4 14/27/4 4/29/4
f 46/30/5 35/18/5 45/17/5
f 13/31/2 39/32/2 40/33/2
f 28/34/5 30/35/5 8/25/5
f 48/14/1 29/36/1 26/37/1
f 14/38/2 47/39/2 8/40/2
f 18/41/2 34/42/2 38/43/2
f 11/44/2 18/41/2 36/45/2
f 16/46/2 51/47/2 19/48/2
f 1/49/6 37/50/6 10/51/6
f 43/52/6 41/53/6 42/54/6
f 45/55/6 44/56/6 3/57/6
f 12/58/2 22/59/2 9/60/2
f 27/61/2 6/62/2 5/63/2
f 52/1/1 21/6/1 20/2/1
f 49/4/1 24/12/1 23/5/1
f 30/9/1 3/64/1 44/7/1
f 44/7/1 41/53/1 4/8/1
f 50/10/1 26/37/1 25/11/1
f 53/13/1 55/65/1 48/14/1
f 1/16/1 2/66/1 45/17/1
f 37/19/2 46/30/2 42/20/2
f 33/22/1 53/13/1 17/23/1
f 8/25/3 30/67/3 4/26/3
f 42/20/4 2/66/4 1/16/4
f 41/28/4 43/68/4 14/27/4
f 46/30/5 37/19/5 35/18/5
f 13/31/2 38/43/2 39/32/2
f 8/25/5 47/69/5 28/34/5
f 28/34/5 3/70/5 30/35/5
f 48/14/1 31/71/1 29/36/1
f 14/38/2 43/52/2 47/39/2
f 18/41/2 32/72/2 34/42/2
f 11/44/2 7/73/2 18/41/2
f 16/46/2 40/33/2 51/47/2
f 1/49/6 35/74/6 37/50/6
f 42/54/6 46/75/6 43/52/6
f 46/75/6 28/76/6 47/77/6
f 43/52/6 46/75/6 47/77/6
f 41/53/6 44/56/6 2/78/6
f 44/56/6 45/55/6 2/78/6
f 41/53/6 2/78/6 42/54/6
f 3/57/6 28/76/6 45/55/6
f 28/76/6 46/75/6 45/55/6
f 12/58/2 19/48/2 22/59/2
f 27/61/2 11/44/2 6/62/2
g everness_mineral_torch.vox_everness_mineral_torch.vox_particle_cube
usemtl particle_cube
f 60/79/2 64/80/2 61/81/2
f 63/82/5 61/81/5 64/80/5
f 58/83/4 60/79/4 62/84/4
f 61/85/3 62/86/3 60/87/3
f 58/83/1 59/88/1 63/89/1
f 58/90/6 64/91/6 57/92/6
f 60/79/2 57/93/2 64/80/2
f 63/82/5 59/94/5 61/81/5
f 58/83/4 57/93/4 60/79/4
f 61/85/3 59/95/3 62/86/3
f 58/83/1 62/84/1 59/88/1
f 58/90/6 63/96/6 64/91/6

View file

@ -0,0 +1,243 @@
# Blender v2.83.20 OBJ File: 'everness_mineral_torch.blend'
# www.blender.org
mtllib everness_mineral_torch_wall.mtl
o everness_mineral_torch.vox
v 0.062500 -0.594127 -0.408750
v 0.062500 -0.281627 0.132516
v -0.125000 -0.335753 0.163766
v 0.125000 -0.210753 0.380272
v 0.062500 -0.040000 0.426025
v 0.062500 -0.071250 0.371899
v 0.250000 -0.071250 0.371899
v -0.125000 0.005753 0.255272
v 0.062500 -0.321250 -0.061114
v 0.062500 -0.485873 -0.471250
v 0.187500 -0.071250 0.371899
v 0.062500 -0.290000 -0.006987
v 0.187500 -0.227500 0.101266
v 0.125000 0.005753 0.255272
v -0.187500 -0.102500 0.317772
v 0.125000 -0.258750 0.047139
v -0.062500 -0.071250 0.371899
v 0.250000 -0.102500 0.317772
v 0.125000 -0.290000 -0.006987
v -0.125000 -0.321250 -0.061114
v -0.125000 -0.290000 -0.006987
v 0.125000 -0.321250 -0.061114
v -0.187500 -0.290000 -0.006987
v -0.187500 -0.258750 0.047139
v -0.250000 -0.258750 0.047139
v -0.250000 -0.227500 0.101266
v 0.187500 -0.040000 0.426025
v -0.125000 -0.173373 0.070016
v -0.312500 -0.227500 0.101266
v -0.125000 -0.210753 0.380272
v -0.312500 -0.102500 0.317772
v 0.312500 -0.102500 0.317772
v -0.187500 -0.040000 0.426025
v 0.312500 -0.227500 0.101266
v -0.062500 -0.594127 -0.408750
v 0.187500 -0.102500 0.317772
v -0.062500 -0.485873 -0.471250
v 0.250000 -0.227500 0.101266
v 0.250000 -0.258750 0.047139
v 0.187500 -0.258750 0.047139
v 0.125000 -0.335753 0.163766
v 0.062500 -0.173373 0.070016
v 0.125000 -0.119247 0.038766
v -0.062500 -0.335753 0.163766
v -0.062500 -0.281627 0.132516
v -0.062500 -0.173373 0.070016
v -0.125000 -0.119247 0.038766
v -0.250000 -0.102500 0.317772
v -0.125000 -0.258750 0.047139
v -0.187500 -0.227500 0.101266
v 0.187500 -0.290000 -0.006987
v -0.062500 -0.290000 -0.006987
v -0.187500 -0.071250 0.371899
v -0.062500 -0.321250 -0.061114
v -0.250000 -0.071250 0.371899
v -0.062500 -0.040000 0.426025
v 0.187500 -0.088251 -0.051298
v 0.187500 -0.413011 0.136202
v -0.187500 -0.225511 0.460961
v 0.187500 0.099249 0.273461
v -0.187500 0.099249 0.273461
v 0.187500 -0.225511 0.460961
v -0.187500 -0.413011 0.136202
v -0.187500 -0.088251 -0.051298
vt 0.250000 0.500000
vt 0.187500 0.437500
vt 0.250000 0.437500
vt 0.187500 0.562500
vt 0.125000 0.500000
vt 0.187500 0.500000
vt 0.250000 0.625000
vt 0.437500 0.875000
vt 0.187500 0.875000
vt 0.125000 0.625000
vt 0.062500 0.562500
vt 0.125000 0.562500
vt 0.125000 0.937500
vt 0.062500 0.875000
vt 0.125000 0.875000
vt 0.375000 0.000000
vt 0.250000 0.625000
vt 0.250000 0.000000
vt 0.375000 0.000000
vt 0.250000 0.625000
vt 0.250000 0.000000
vt 0.125000 1.000000
vt 0.250000 0.937500
vt 0.250000 1.000000
vt 0.187500 0.875000
vt 0.437500 0.625000
vt 0.437500 0.875000
vt 0.187500 0.625000
vt 0.187500 0.875000
vt 0.375000 0.625000
vt 0.500000 0.625000
vt 0.562500 0.562500
vt 0.500000 0.562500
vt 0.250000 0.625000
vt 0.437500 0.875000
vt 0.000000 0.625000
vt 0.062500 0.625000
vt 0.187500 0.875000
vt 0.437500 0.625000
vt 0.437500 0.875000
vt 0.562500 0.875000
vt 0.625000 0.625000
vt 0.562500 0.625000
vt 0.500000 0.937500
vt 0.500000 0.875000
vt 0.437500 0.562500
vt 0.500000 0.500000
vt 0.437500 0.500000
vt 0.250000 -0.000000
vt 0.125000 0.125000
vt 0.125000 -0.000000
vt 0.187500 0.625000
vt 0.437500 0.625000
vt 0.250000 0.687500
vt 0.375000 0.812500
vt 0.437500 0.812500
vt 0.437500 0.875000
vt 0.375000 0.500000
vt 0.437500 0.437500
vt 0.375000 0.437500
vt 0.500000 1.000000
vt 0.375000 0.937500
vt 0.375000 1.000000
vt 0.187500 0.625000
vt 0.062500 0.937500
vt 0.375000 0.625000
vt 0.187500 0.625000
vt 0.437500 0.625000
vt 0.187500 0.625000
vt 0.437500 0.625000
vt 0.000000 0.875000
vt 0.625000 0.875000
vt 0.562500 0.937500
vt 0.250000 0.125000
vt 0.250000 0.812500
vt 0.250000 0.875000
vt 0.187500 0.875000
vt 0.375000 0.687500
vt 0.333333 1.000000
vt 0.500000 -0.000000
vt 0.500000 1.000000
vt 0.666667 -0.000000
vt 0.166667 -0.000000
vt 0.166667 1.000000
vt 0.833333 -0.000000
vt 0.666667 1.000000
vt 0.666667 -0.000000
vt 0.000000 1.000000
vt 0.000000 -0.000000
vt 1.000000 -0.000000
vt 0.833333 1.000000
vt 0.833333 -0.000000
vt 0.333333 -0.000000
vt 0.666667 1.000000
vt 0.833333 1.000000
vt 1.000000 1.000000
vn 0.0000 -0.8660 0.5000
vn 0.0000 0.8660 -0.5000
vn 0.0000 0.5000 0.8660
vn 1.0000 0.0000 -0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 -0.5000 -0.8660
g everness_mineral_torch.vox_everness_mineral_torch.vox_torch
usemtl torch
s off
f 52/1/1 20/2/1 54/3/1
f 49/4/1 23/5/1 21/6/1
f 44/7/1 4/8/1 30/9/1
f 50/10/1 25/11/1 24/12/1
f 53/13/1 48/14/1 15/15/1
f 1/16/1 45/17/1 35/18/1
f 37/19/2 42/20/2 10/21/2
f 33/22/1 17/23/1 56/24/1
f 8/25/3 4/26/3 14/27/3
f 42/20/4 1/16/4 10/21/4
f 41/28/4 14/27/4 4/29/4
f 46/30/5 35/18/5 45/17/5
f 13/31/2 39/32/2 40/33/2
f 28/34/5 30/35/5 8/25/5
f 48/14/1 29/36/1 26/37/1
f 14/38/2 47/39/2 8/40/2
f 18/41/2 34/42/2 38/43/2
f 11/44/2 18/41/2 36/45/2
f 16/46/2 51/47/2 19/48/2
f 1/49/6 37/50/6 10/51/6
f 43/52/6 41/53/6 42/54/6
f 45/55/6 44/56/6 3/57/6
f 12/58/2 22/59/2 9/60/2
f 27/61/2 6/62/2 5/63/2
f 52/1/1 21/6/1 20/2/1
f 49/4/1 24/12/1 23/5/1
f 30/9/1 3/64/1 44/7/1
f 44/7/1 41/53/1 4/8/1
f 50/10/1 26/37/1 25/11/1
f 53/13/1 55/65/1 48/14/1
f 1/16/1 2/66/1 45/17/1
f 37/19/2 46/30/2 42/20/2
f 33/22/1 53/13/1 17/23/1
f 8/25/3 30/67/3 4/26/3
f 42/20/4 2/66/4 1/16/4
f 41/28/4 43/68/4 14/27/4
f 46/30/5 37/19/5 35/18/5
f 13/31/2 38/43/2 39/32/2
f 8/25/5 47/69/5 28/34/5
f 28/34/5 3/70/5 30/35/5
f 48/14/1 31/71/1 29/36/1
f 14/38/2 43/52/2 47/39/2
f 18/41/2 32/72/2 34/42/2
f 11/44/2 7/73/2 18/41/2
f 16/46/2 40/33/2 51/47/2
f 1/49/6 35/74/6 37/50/6
f 42/54/6 46/75/6 43/52/6
f 46/75/6 28/76/6 47/77/6
f 43/52/6 46/75/6 47/77/6
f 41/53/6 44/56/6 2/78/6
f 44/56/6 45/55/6 2/78/6
f 41/53/6 2/78/6 42/54/6
f 3/57/6 28/76/6 45/55/6
f 28/76/6 46/75/6 45/55/6
f 12/58/2 19/48/2 22/59/2
f 27/61/2 11/44/2 6/62/2
g everness_mineral_torch.vox_everness_mineral_torch.vox_particle_cube
usemtl particle_cube
f 60/79/2 64/80/2 61/81/2
f 63/82/5 61/81/5 64/80/5
f 58/83/4 60/79/4 62/84/4
f 61/85/3 62/86/3 60/87/3
f 58/83/1 59/88/1 63/89/1
f 58/90/6 64/91/6 57/92/6
f 60/79/2 57/93/2 64/80/2
f 63/82/5 59/94/5 61/81/5
f 58/83/4 57/93/4 60/79/4
f 61/85/3 59/95/3 62/86/3
f 58/83/1 62/84/1 59/88/1
f 58/90/6 63/96/6 64/91/6

View file

@ -0,0 +1,170 @@
# Blender v2.83.20 OBJ File: 'everness_skull_with_candle.blend'
# www.blender.org
mtllib scull_with_candle.vox.mtl
o scull_with_candle.vox
v -0.225000 0.026000 0.225000
v -0.075000 0.026000 0.000000
v -0.075000 0.026000 0.075000
v 0.075000 0.551000 -0.075000
v -0.300000 -0.499000 0.300000
v 0.225000 -0.424000 0.225000
v -0.300000 0.101000 -0.300000
v 0.075000 0.026000 0.075000
v 0.075000 0.101000 0.075000
v -0.300000 0.101000 0.300000
v -0.075000 0.101000 -0.075000
v -0.300000 -0.499000 -0.300000
v 0.300000 0.101000 -0.300000
v -0.075000 0.101000 0.075000
v -0.075000 0.551000 -0.075000
v 0.300000 -0.499000 0.300000
v 0.225000 -0.424000 -0.225000
v 0.225000 0.026000 -0.225000
v -0.225000 0.026000 -0.225000
v 0.075000 0.026000 -0.075000
v 0.300000 0.101000 0.300000
v 0.075000 0.551000 0.075000
v 0.300000 -0.499000 -0.300000
v -0.075000 0.026000 -0.075000
v 0.225000 0.026000 0.225000
v -0.225000 -0.424000 -0.225000
v -0.225000 -0.424000 0.225000
v 0.075000 0.101000 -0.075000
v -0.075000 0.551000 0.075000
v 0.075000 0.551000 -0.000000
v -0.075000 0.551000 -0.000000
v 0.075000 0.701000 -0.000000
v -0.075000 0.701000 -0.000000
v -0.000000 0.551000 -0.075000
v -0.000000 0.701000 -0.075000
v 0.000000 0.551000 0.075000
v 0.000000 0.701000 0.075000
vt 0.866667 0.233333
vt 0.866667 0.033333
vt 0.800000 0.033333
vt 0.800000 0.233333
vt 0.466667 0.533333
vt 0.266667 0.533333
vt 0.333333 0.666667
vt 0.333333 0.600000
vt 0.400000 0.600000
vt 0.400000 0.633333
vt 0.533333 0.266667
vt 0.733333 0.266667
vt 0.733333 0.466667
vt 0.533333 0.466667
vt 0.600000 0.733333
vt 0.600000 0.800000
vt 0.533333 0.800000
vt 0.533333 0.733333
vt 0.000000 0.800000
vt 0.000000 0.533333
vt 0.266667 0.533333
vt 0.266667 0.800000
vt 0.533333 0.766667
vt 0.533333 0.966667
vt 0.466667 0.966667
vt 0.466667 0.766667
vt 0.533333 0.266667
vt 0.266667 0.266667
vt 0.266667 0.533333
vt 0.533333 0.533333
vt 0.466667 0.933333
vt 0.266667 0.933333
vt 0.266667 0.733333
vt 0.466667 0.733333
vt 0.666667 0.533333
vt 0.666667 0.733333
vt 0.866667 0.733333
vt 0.866667 0.533333
vt 0.266667 0.733333
vt 0.466667 0.733333
vt 0.400000 0.666667
vt 0.266667 0.266667
vt 0.266667 0.000000
vt 0.433333 0.100000
vt 0.366667 0.100000
vt 0.366667 0.166667
vt 0.433333 0.166667
vt 0.933333 0.566667
vt 0.866667 0.566667
vt 0.866667 0.766667
vt 0.933333 0.766667
vt 0.533333 0.000000
vt 0.533333 0.266667
vt 0.800000 0.266667
vt 0.800000 0.000000
vt 0.800000 0.000000
vt 0.866667 0.000000
vt 0.000000 0.266667
vt 0.000000 0.000000
vt 0.266667 0.000000
vt 0.266667 0.266667
vt 0.266667 0.266667
vt 0.000000 0.266667
vt 0.000000 0.533333
vt 0.266667 0.533333
vt 0.933333 0.033333
vt 0.933333 0.233333
vt 0.866667 0.233333
vt 0.866667 0.033333
vt 0.933333 0.533333
vt 0.866667 0.533333
vt 0.533333 0.000000
vt 0.533333 0.266667
vt 0.933333 0.000000
vt 0.900000 0.000000
vt 0.866667 0.000000
vt 0.533333 0.733333
vt 0.466667 0.733333
vt 0.733333 0.466667
vt 0.933333 0.466667
vt 0.933333 0.266667
vt 0.733333 0.266667
vt 0.466667 0.733333
vt 0.466667 0.533333
vt 0.666667 0.533333
vt 0.666667 0.733333
vt 0.866667 0.733333
vt 0.866667 1.000000
vt 0.600000 1.000000
vt 0.600000 0.733333
vt 0.866667 1.000000
vt 0.600000 1.000000
vt 0.600000 0.733333
vt 0.866667 0.733333
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn -0.0000 0.0000 -1.0000
vn -1.0000 0.0000 0.0000
vn 1.0000 0.0000 -0.0000
usemtl scull_with_candle.vox_Material
s off
f 29/1/1 14/2/1 9/3/1 22/4/1
f 19/5/2 18/6/2 8/7/2 20/8/2 24/9/2 2/10/2
f 17/11/3 26/12/3 27/13/3 6/14/3
f 15/15/3 29/16/3 22/17/3 4/18/3
f 13/19/4 23/20/4 12/21/4 7/22/4
f 11/23/4 15/24/4 4/25/4 28/26/4
f 12/27/2 23/28/2 16/29/2 5/30/2
f 25/31/5 18/32/5 17/33/5 6/34/5
f 26/35/6 19/36/6 1/37/6 27/38/6
f 25/39/2 1/40/2 19/5/2 2/10/2 3/41/2 8/7/2 18/6/2
f 21/42/3 13/43/3 11/44/3 28/45/3 9/46/3 14/47/3
f 9/48/6 28/49/6 4/50/6 22/51/6
f 28/45/2 9/46/2 14/47/2 11/44/2
f 16/52/1 21/53/1 10/54/1 5/55/1
f 14/2/4 9/3/4 8/56/4 3/57/4
f 7/58/5 12/59/5 5/60/5 10/61/5
f 16/62/6 23/63/6 13/64/6 21/65/6
f 14/66/5 29/67/5 15/68/5 11/69/5
f 8/70/5 9/48/5 28/49/5 20/71/5
f 7/72/3 10/73/3 21/42/3 14/47/3 11/44/3 13/43/3
f 11/69/6 14/66/6 3/74/6 2/75/6 24/76/6
f 28/26/1 11/23/1 24/77/1 20/78/1
f 18/79/1 19/80/1 26/81/1 17/82/1
f 25/83/4 6/84/4 27/85/4 1/86/4
usemtl candle_fire.001
f 31/87/4 33/88/4 32/89/4 30/90/4
f 35/91/6 37/92/6 36/93/6 34/94/6

View file

@ -0,0 +1,149 @@
# Blender v2.83.20 OBJ File: 'everness_venus_trap.blend'
# www.blender.org
mtllib everness_venus_trap.mtl
o Plane
v -0.625000 -0.499000 0.625000
v 0.625000 -0.499000 0.625000
v -0.625000 -0.499000 -0.625000
v 0.625000 -0.499000 -0.625000
v 0.000000 -0.499000 0.000000
v -0.625000 -0.405250 0.000000
v 0.000000 -0.405250 0.625000
v 0.625000 -0.405250 0.000000
v 0.000000 -0.405250 -0.625000
vt 0.875000 0.125000
vt 0.875000 0.312500
vt 0.687500 0.312500
vt 0.687500 0.125000
vt 0.875000 0.500000
vt 0.687500 0.500000
vt 0.500000 0.500000
vt 0.500000 0.312500
vt 0.500000 0.125000
vn -0.1467 0.9782 0.1467
vn 0.1467 0.9782 -0.1467
vn -0.1467 0.9782 -0.1467
vn 0.1467 0.9782 0.1467
usemtl flower
s off
f 2/1/1 8/2/1 5/3/1
f 7/4/2 2/1/2 5/3/2
f 8/2/3 4/5/3 5/3/3
f 9/6/1 3/7/1 5/3/1
f 6/8/4 1/9/4 5/3/4
f 3/7/2 6/8/2 5/3/2
f 4/5/4 9/6/4 5/3/4
f 1/9/3 7/4/3 5/3/3
o Cube_Cube.001
v 0.071372 -0.499000 0.442448
v -0.214282 0.200707 0.728103
v -0.442448 -0.499000 -0.071372
v -0.728103 0.200707 0.214282
v -0.674071 0.244824 0.160250
v -0.542565 0.352199 0.028744
v -0.160250 0.244824 0.674071
v -0.028744 0.352199 0.542565
v 0.125404 -0.454883 0.388416
v -0.388416 -0.454883 -0.125404
v -0.071372 -0.499000 -0.442448
v 0.214282 0.200707 -0.728103
v 0.442448 -0.499000 0.071372
v 0.728103 0.200707 -0.214282
v 0.674071 0.244824 -0.160250
v 0.542565 0.352199 -0.028744
v -0.256910 -0.347509 -0.256910
v 0.388416 -0.454883 0.125404
v 0.028744 0.352199 -0.542565
v 0.256910 -0.347509 0.256910
v 0.160250 0.244824 -0.674070
v -0.125404 -0.454883 -0.388416
vt 0.265625 0.187500
vt 0.265625 0.500000
vt 0.000000 0.500000
vt 0.000000 0.187500
vt 0.375000 0.687500
vt 0.375000 1.000000
vt 0.281250 1.000000
vt 0.281250 0.687500
vt 0.000000 0.890625
vt 0.000000 0.968750
vt 0.250000 0.968750
vt 0.250000 0.890625
vt 0.250000 1.000000
vt 0.250000 0.687500
vt 0.000000 1.000000
vt 0.281250 1.000000
vt 0.281250 0.687500
vt 0.375000 0.687500
vt 0.375000 1.000000
vt 0.765625 0.687500
vt 0.765625 1.000000
vt 0.500000 1.000000
vt 0.500000 0.687500
vt 0.000000 0.890625
vt 0.000000 0.859375
vt 0.250000 0.859375
vt 0.250000 0.890625
vt 0.250000 1.000000
vt 0.250000 0.687500
vt 0.000000 0.781250
vt 0.250000 0.781250
vt -0.000000 0.500000
vt -0.000000 0.187500
vt 0.265625 0.187500
vt 0.265625 0.500000
vt 0.375000 0.687500
vt 0.281250 0.687500
vt 0.281250 1.000000
vt 0.250000 0.890625
vt 0.250000 0.968750
vt 0.000000 0.968750
vt 0.000000 0.890625
vt 0.250000 0.687500
vt 0.250000 1.000000
vt 0.250000 1.000000
vt 0.000000 1.000000
vt 0.281250 0.687500
vt 0.281250 1.000000
vt 0.375000 1.000000
vt 0.765625 0.687500
vt 0.765625 1.000000
vt 0.500000 1.000000
vt 0.500000 0.687500
vt 0.000000 0.890625
vt 0.000000 0.859375
vt 0.250000 0.859375
vt 0.250000 0.890625
vt 0.250000 0.687500
vt 0.000000 0.781250
vt 0.250000 0.781250
vn -0.6124 -0.5000 0.6124
vn 0.7071 0.0000 0.7071
vn -0.3536 0.8660 0.3536
vn -0.7071 0.0000 -0.7071
vn 0.3536 -0.8660 -0.3536
vn 0.6124 -0.5000 -0.6124
vn 0.3536 0.8660 -0.3536
vn -0.3536 -0.8660 0.3536
usemtl flower
s off
f 10/10/5 11/11/5 13/12/5 12/13/5
f 29/14/6 17/15/6 16/16/6 18/17/6
f 15/18/7 14/19/7 16/20/7 17/21/7
f 18/17/6 16/16/6 11/22/6 10/23/6
f 14/19/7 13/24/7 11/22/7 16/20/7
f 19/25/8 14/26/8 15/27/8 26/28/8
f 18/29/5 16/30/5 14/31/5 19/32/5
f 12/33/9 19/34/9 18/35/9 10/36/9
f 12/37/8 13/38/8 14/26/8 19/25/8
f 19/34/9 26/39/9 29/40/9 18/35/9
f 20/41/10 21/42/10 23/43/10 22/44/10
f 26/28/8 28/45/8 30/46/8 31/47/8
f 25/48/11 24/49/11 30/50/11 28/51/11
f 31/47/8 30/46/8 21/52/8 20/53/8
f 24/49/11 23/54/11 21/55/11 30/50/11
f 27/56/6 24/57/6 25/58/6 29/14/6
f 31/59/10 30/60/10 24/61/10 27/62/10
f 22/63/12 27/64/12 31/65/12 20/66/12
f 22/67/6 23/54/6 24/57/6 27/56/6
f 27/64/12 29/68/12 26/69/12 31/65/12

View file

@ -0,0 +1,109 @@
# Blender v2.83.20 OBJ File: 'everness_better_vine_1.blend'
# www.blender.org
mtllib everness_vine_wall.mtl
o Plane
v 0.470000 -0.490000 -0.470000
v -0.470000 -0.490000 -0.470000
v 0.470000 -0.490000 0.470000
v -0.470000 -0.490000 0.470000
v -0.752156 -0.490000 0.461451
v 0.751842 -0.492615 0.461221
v -0.751842 -0.272978 0.044555
v 0.752156 -0.275593 0.044326
v 0.752156 -0.275593 -0.073174
v -0.751842 -0.272978 -0.072945
v 0.751842 -0.492615 0.343721
v -0.752156 -0.490000 0.343951
v -0.752156 -0.490000 0.226451
v 0.751842 -0.492615 0.226221
v -0.751842 -0.272978 -0.190445
v 0.752156 -0.275593 -0.190674
v 0.752156 -0.275593 -0.308174
v -0.751842 -0.272978 -0.307945
v 0.751842 -0.492615 0.108721
v -0.752156 -0.490000 0.108951
v -0.752156 -0.490000 -0.008549
v 0.751842 -0.492615 -0.008779
v -0.751842 -0.272978 -0.425445
v 0.752156 -0.275593 -0.425674
v 0.752156 -0.275593 -0.543174
v -0.751842 -0.272978 -0.542945
v 0.751842 -0.492615 -0.126279
v -0.752156 -0.490000 -0.126049
v -0.752156 -0.490000 -0.243549
v 0.751842 -0.492615 -0.243779
v -0.751842 -0.272978 -0.660445
v 0.752156 -0.275593 -0.660674
v 0.752156 -0.275593 -0.778174
v -0.751842 -0.272978 -0.777945
v 0.751842 -0.492615 -0.361279
v -0.752156 -0.490000 -0.361050
v 0.752149 -0.315254 -0.905760
v -0.751849 -0.312629 -0.905760
v 0.751848 -0.487510 -0.468464
v -0.752149 -0.484885 -0.468463
vt -0.000000 0.727273
vt 1.000000 0.818182
vt -0.000000 0.818182
vt 1.000000 0.636364
vt 0.000000 0.727273
vt 0.000000 0.636364
vt 1.000000 0.545455
vt 0.000000 0.636364
vt 0.000000 0.545455
vt 1.000000 0.454546
vt 0.000000 0.545455
vt 0.000000 0.454546
vt 0.000000 0.363636
vt 1.000000 0.454546
vt 0.000000 0.454546
vt 0.000000 0.272727
vt 1.000000 0.363636
vt 0.000000 0.363636
vt 1.000000 0.181818
vt 0.000000 0.272727
vt 0.000000 0.181818
vt 1.000000 0.090909
vt 0.000000 0.181818
vt 0.000000 0.090909
vt 0.000000 -0.000000
vt 1.000000 0.090909
vt 0.000000 0.090909
vt 0.166667 0.818182
vt 0.833333 1.000000
vt 0.833333 0.818182
vt 1.000000 0.727273
vt 1.000000 0.727273
vt 1.000000 0.636364
vt 1.000000 0.545455
vt 1.000000 0.363636
vt 1.000000 0.272727
vt 1.000000 0.272727
vt 1.000000 0.181818
vt 1.000000 0.000000
vt 0.166667 1.000000
vn 0.0016 0.8870 0.4617
vn 0.0016 0.9304 0.3665
vn 0.0000 1.0000 -0.0000
usemtl leaves
s off
f 8/1/1 5/2/1 6/3/1
f 10/4/1 11/5/1 9/6/1
f 15/7/1 14/8/1 16/9/1
f 18/10/1 19/11/1 17/12/1
f 24/13/1 21/14/1 22/15/1
f 25/16/1 28/17/1 27/18/1
f 31/19/1 30/20/1 32/21/1
f 34/22/1 35/23/1 33/24/1
f 37/25/2 40/26/2 39/27/2
f 3/28/3 2/29/3 4/30/3
f 8/1/1 7/31/1 5/2/1
f 10/4/1 12/32/1 11/5/1
f 15/7/1 13/33/1 14/8/1
f 18/10/1 20/34/1 19/11/1
f 24/13/1 23/35/1 21/14/1
f 25/16/1 26/36/1 28/17/1
f 31/19/1 29/37/1 30/20/1
f 34/22/1 36/38/1 35/23/1
f 37/25/2 38/39/2 40/26/2
f 3/28/3 1/40/3 2/29/3

File diff suppressed because it is too large Load diff

12053
mods/everness/nodes.lua Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,561 @@
--[[
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())
minetest.override_item('everness:coral_dirt', {
soil = {
base = 'everness:coral_dirt',
dry = 'everness:coral_dirt_soil',
wet = 'everness:coral_dirt_soil_wet'
}
})
minetest.override_item('everness:dirt_with_coral_grass', {
soil = {
base = 'everness:dirt_with_coral_grass',
dry = 'everness:coral_dirt_soil',
wet = 'everness:coral_dirt_soil_wet'
}
})
minetest.override_item('everness:dirt_1', {
soil = {
base = 'everness:dirt_1',
dry = 'everness:dirt_1_soil',
wet = 'everness:dirt_1_soil_wet'
}
})
minetest.override_item('everness:dirt_with_grass_1', {
soil = {
base = 'everness:dirt_with_grass_1',
dry = 'everness:dirt_1_soil',
wet = 'everness:dirt_1_soil_wet'
}
})
minetest.override_item('everness:dry_dirt', {
soil = {
base = 'everness:dry_dirt',
dry = 'everness:dry_dirt_soil',
wet = 'everness:dry_dirt_soil_wet'
}
})
minetest.override_item('everness:dry_dirt_with_dry_grass', {
soil = {
base = 'everness:dry_dirt_with_dry_grass',
dry = 'everness:dry_dirt_soil',
wet = 'everness:dry_dirt_soil_wet'
}
})
minetest.override_item('everness:dirt_with_grass_extras_1', {
soil = {
base = 'everness:dirt_with_grass_extras_1',
dry = 'everness:dirt_1_soil',
wet = 'everness:dirt_1_soil_wet'
}
})
minetest.override_item('everness:dirt_with_grass_extras_2', {
soil = {
base = 'everness:dirt_with_grass_extras_2',
dry = 'everness:dirt_1_soil',
wet = 'everness:dirt_1_soil_wet'
}
})
minetest.override_item('everness:crystal_dirt', {
soil = {
base = 'everness:crystal_dirt',
dry = 'everness:crystal_dirt_soil',
wet = 'everness:crystal_dirt_soil_wet'
}
})
minetest.override_item('everness:dirt_with_crystal_grass', {
soil = {
base = 'everness:dirt_with_crystal_grass',
dry = 'everness:crystal_dirt_soil',
wet = 'everness:crystal_dirt_soil_wet'
}
})
minetest.override_item('everness:crystal_cave_dirt', {
soil = {
base = 'everness:crystal_cave_dirt',
dry = 'everness:crystal_cave_dirt_soil',
wet = 'everness:crystal_cave_dirt_soil_wet'
}
})
minetest.override_item('everness:crystal_cave_dirt_with_moss', {
soil = {
base = 'everness:crystal_cave_dirt_with_moss',
dry = 'everness:crystal_cave_dirt_soil',
wet = 'everness:crystal_cave_dirt_soil_wet'
}
})
minetest.override_item('everness:cursed_dirt', {
soil = {
base = 'everness:cursed_dirt',
dry = 'everness:cursed_dirt_soil',
wet = 'everness:cursed_dirt_soil_wet'
}
})
minetest.override_item('everness:dirt_with_cursed_grass', {
soil = {
base = 'everness:dirt_with_cursed_grass',
dry = 'everness:cursed_dirt_soil',
wet = 'everness:cursed_dirt_soil_wet'
}
})
-- normal soil
Everness:register_node('everness:coral_dirt_soil', {
description = S('Coral Dirt Soil'),
tiles = {
'everness_coral_dirt.png^(everness_coral_dirt.png^[mask:everness_farming_soil_overlay.png^[multiply:#A05F3A80)',
'everness_coral_dirt.png'
},
drop = 'everness:coral_dirt',
groups = {
-- MTG
crumbly = 3,
not_in_creative_inventory = 1,
soil = 2,
grassland = 1,
field = 1,
-- MCL
handy = 1,
shovely = 1,
dirt = 1,
soil_sapling = 2,
soil_sugarcane = 1,
cultivatable = 2,
enderman_takable = 1,
building_block = 1,
},
_mcl_blast_resistance = 0.5,
_mcl_hardness = 0.5,
sounds = Everness.node_sound_dirt_defaults(),
soil = {
base = 'everness:coral_dirt',
dry = 'everness:coral_dirt_soil',
wet = 'everness:coral_dirt_soil_wet'
}
})
if minetest.registered_nodes["farming:soil"] then
minetest.register_alias("everness:dirt_1_soil","farming:soil")
else
Everness:register_node('everness:dirt_1_soil', {
description = S('Dirt Soil'),
tiles = {
'everness_dirt.png^(everness_dirt.png^[mask:everness_farming_soil_overlay.png^[multiply:#51341E80)',
'everness_dirt.png'
},
drop = 'everness:dirt_1',
groups = {
-- MTG
crumbly = 3,
not_in_creative_inventory = 1,
soil = 2,
grassland = 1,
field = 1,
-- MCL
handy = 1,
shovely = 1,
dirt = 1,
soil_sapling = 2,
soil_sugarcane = 1,
cultivatable = 2,
enderman_takable = 1,
building_block = 1,
},
_mcl_blast_resistance = 0.5,
_mcl_hardness = 0.5,
sounds = Everness.node_sound_dirt_defaults(),
soil = {
base = 'everness:dirt_1',
dry = 'everness:dirt_1_soil',
wet = 'everness:dirt_1_soil_wet'
}
})
end
Everness:register_node('everness:crystal_dirt_soil', {
description = S('Crystal Dirt Soil'),
tiles = {
'everness_crystal_dirt.png^(everness_crystal_dirt.png^[mask:everness_farming_soil_overlay.png^[multiply:#75506980)',
'everness_crystal_dirt.png'
},
drop = 'everness:crystal_dirt',
groups = {
-- MTG
crumbly = 3,
not_in_creative_inventory = 1,
soil = 2,
grassland = 1,
field = 1,
-- MCL
handy = 1,
shovely = 1,
dirt = 1,
soil_sapling = 2,
soil_sugarcane = 1,
cultivatable = 2,
enderman_takable = 1,
building_block = 1,
},
_mcl_blast_resistance = 0.5,
_mcl_hardness = 0.5,
sounds = Everness.node_sound_dirt_defaults(),
soil = {
base = 'everness:crystal_dirt',
dry = 'everness:crystal_dirt_soil',
wet = 'everness:crystal_dirt_soil_wet'
}
})
Everness:register_node('everness:crystal_cave_dirt_soil', {
description = S('Crystal Cave Dirt Soil'),
tiles = {
'everness_crystal_cave_dirt.png^(everness_crystal_cave_dirt.png^[mask:everness_farming_soil_overlay.png^[multiply:#CCB17E80)',
'everness_crystal_cave_dirt.png'
},
drop = 'everness:crystal_cave_dirt',
groups = {
-- MTG
crumbly = 3,
not_in_creative_inventory = 1,
soil = 2,
grassland = 1,
field = 1,
-- MCL
handy = 1,
shovely = 1,
dirt = 1,
soil_sapling = 2,
soil_sugarcane = 1,
cultivatable = 2,
enderman_takable = 1,
building_block = 1,
},
_mcl_blast_resistance = 0.5,
_mcl_hardness = 0.5,
sounds = Everness.node_sound_dirt_defaults(),
soil = {
base = 'everness:crystal_cave_dirt',
dry = 'everness:crystal_cave_dirt_soil',
wet = 'everness:crystal_cave_dirt_soil_wet'
}
})
Everness:register_node('everness:cursed_dirt_soil', {
description = S('Cursed Dirt Soil'),
tiles = {
'everness_cursed_dirt.png^(everness_cursed_dirt.png^[mask:everness_farming_soil_overlay.png^[multiply:#625B4B80)',
'everness_cursed_dirt.png'
},
drop = 'everness:cursed_dirt',
groups = {
-- MTG
crumbly = 3,
not_in_creative_inventory = 1,
soil = 2,
grassland = 1,
field = 1,
-- MCL
handy = 1,
shovely = 1,
dirt = 1,
soil_sapling = 2,
soil_sugarcane = 1,
cultivatable = 2,
enderman_takable = 1,
building_block = 1,
},
_mcl_blast_resistance = 0.5,
_mcl_hardness = 0.5,
sounds = Everness.node_sound_dirt_defaults(),
soil = {
base = 'everness:cursed_dirt',
dry = 'everness:cursed_dirt_soil',
wet = 'everness:cursed_dirt_soil_wet'
}
})
if minetest.registered_nodes["farming:dry_soil"] then
minetest.register_alias("everness:dry_dirt_soil","farming:dry_soil")
else
Everness:register_node('everness:dry_dirt_soil', {
description = S('Dry Dirt Soil'),
tiles = {
'everness_dry_dirt.png^(everness_dry_dirt.png^[mask:everness_farming_soil_overlay.png^[multiply:#9F754780)',
'everness_dry_dirt.png'
},
drop = 'everness:dry_dirt',
groups = {
-- MTG
crumbly = 3,
not_in_creative_inventory = 1,
soil = 2,
grassland = 1,
field = 1,
-- MCL
handy = 1,
shovely = 1,
dirt = 1,
soil_sapling = 2,
soil_sugarcane = 1,
cultivatable = 2,
enderman_takable = 1,
building_block = 1,
},
_mcl_blast_resistance = 0.5,
_mcl_hardness = 0.5,
sounds = Everness.node_sound_dirt_defaults(),
soil = {
base = 'everness:dry_dirt',
dry = 'everness:dry_dirt_soil',
wet = 'everness:dry_dirt_soil_wet'
}
})
end
-- wet soil
Everness:register_node('everness:coral_dirt_soil_wet', {
description = S('Coral Dirt Wet Soil'),
tiles = {
'everness_coral_dirt.png^(everness_coral_dirt.png^[mask:everness_farming_soil_wet_overlay.png^[multiply:#A05F3A80)',
'everness_coral_dirt.png^(everness_coral_dirt.png^[mask:everness_farming_soil_wet_side_overlay.png^[multiply:#A05F3A80)',
},
drop = 'everness:coral_dirt',
groups = {
-- MTG
crumbly = 3,
not_in_creative_inventory = 1,
soil = 3,
wet = 1,
grassland = 1,
field = 1,
-- MCL
handy = 1,
shovely = 1,
dirt = 1,
soil_sapling = 2,
soil_sugarcane = 1,
cultivatable = 2,
enderman_takable = 1,
building_block = 1,
},
_mcl_blast_resistance = 0.5,
_mcl_hardness = 0.5,
sounds = Everness.node_sound_dirt_defaults(),
soil = {
base = 'everness:coral_dirt',
dry = 'everness:coral_dirt_soil',
wet = 'everness:coral_dirt_soil_wet'
}
})
if minetest.registered_nodes["farming:soil_wet"] then
minetest.register_alias("everness:dirt_1_soil_wet","farming:soil_wet")
else
Everness:register_node('everness:dirt_1_soil_wet', {
description = S('Coral Dirt Wet Soil'),
tiles = {
'everness_dirt.png^(everness_dirt.png^[mask:everness_farming_soil_wet_overlay.png^[multiply:#51341E80)',
'everness_dirt.png^(everness_dirt.png^[mask:everness_farming_soil_wet_side_overlay.png^[multiply:#51341E80)',
},
drop = 'everness:dirt_1',
groups = {
-- MTG
crumbly = 3,
not_in_creative_inventory = 1,
soil = 3,
wet = 1,
grassland = 1,
field = 1,
-- MCL
handy = 1,
shovely = 1,
dirt = 1,
soil_sapling = 2,
soil_sugarcane = 1,
cultivatable = 2,
enderman_takable = 1,
building_block = 1,
},
_mcl_blast_resistance = 0.5,
_mcl_hardness = 0.5,
sounds = Everness.node_sound_dirt_defaults(),
soil = {
base = 'everness:dirt_1',
dry = 'everness:dirt_1_soil',
wet = 'everness:dirt_1_soil_wet'
}
})
end
Everness:register_node('everness:crystal_dirt_soil_wet', {
description = S('Crystal Dirt Wet Soil'),
tiles = {
'everness_crystal_dirt.png^(everness_crystal_dirt.png^[mask:everness_farming_soil_wet_overlay.png^[multiply:#75506980)',
'everness_crystal_dirt.png^(everness_crystal_dirt.png^[mask:everness_farming_soil_wet_side_overlay.png^[multiply:#75506980)',
},
drop = 'everness:crystal_dirt',
groups = {
-- MTG
crumbly = 3,
not_in_creative_inventory = 1,
soil = 3,
wet = 1,
grassland = 1,
field = 1,
-- MCL
handy = 1,
shovely = 1,
dirt = 1,
soil_sapling = 2,
soil_sugarcane = 1,
cultivatable = 2,
enderman_takable = 1,
building_block = 1,
},
_mcl_blast_resistance = 0.5,
_mcl_hardness = 0.5,
sounds = Everness.node_sound_dirt_defaults(),
soil = {
base = 'everness:crystal_dirt',
dry = 'everness:crystal_dirt_soil',
wet = 'everness:crystal_dirt_soil_wet'
}
})
Everness:register_node('everness:crystal_cave_dirt_soil_wet', {
description = S('Crystal Cave Dirt Wet Soil'),
tiles = {
'everness_crystal_cave_dirt.png^(everness_crystal_cave_dirt.png^[mask:everness_farming_soil_wet_overlay.png^[multiply:#CCB17E80)',
'everness_crystal_cave_dirt.png^(everness_crystal_cave_dirt.png^[mask:everness_farming_soil_wet_side_overlay.png^[multiply:#CCB17E80)',
},
drop = 'everness:crystal_cave_dirt',
groups = {
-- MTG
crumbly = 3,
not_in_creative_inventory = 1,
soil = 3,
wet = 1,
grassland = 1,
field = 1,
-- MCL
handy = 1,
shovely = 1,
dirt = 1,
soil_sapling = 2,
soil_sugarcane = 1,
cultivatable = 2,
enderman_takable = 1,
building_block = 1,
},
_mcl_blast_resistance = 0.5,
_mcl_hardness = 0.5,
sounds = Everness.node_sound_dirt_defaults(),
soil = {
base = 'everness:crystal_cave_dirt',
dry = 'everness:crystal_cave_dirt_soil',
wet = 'everness:crystal_cave_dirt_soil_wet'
}
})
Everness:register_node('everness:cursed_dirt_soil_wet', {
description = S('Cursed Dirt Wet Soil'),
tiles = {
'everness_cursed_dirt.png^(everness_cursed_dirt.png^[mask:everness_farming_soil_wet_overlay.png^[multiply:#625B4B80)',
'everness_cursed_dirt.png^(everness_cursed_dirt.png^[mask:everness_farming_soil_wet_side_overlay.png^[multiply:#625B4B80)',
},
drop = 'everness:cursed_dirt',
groups = {
-- MTG
crumbly = 3,
not_in_creative_inventory = 1,
soil = 3,
wet = 1,
grassland = 1,
field = 1,
-- MCL
handy = 1,
shovely = 1,
dirt = 1,
soil_sapling = 2,
soil_sugarcane = 1,
cultivatable = 2,
enderman_takable = 1,
building_block = 1,
},
_mcl_blast_resistance = 0.5,
_mcl_hardness = 0.5,
sounds = Everness.node_sound_dirt_defaults(),
soil = {
base = 'everness:cursed_dirt',
dry = 'everness:cursed_dirt_soil',
wet = 'everness:cursed_dirt_soil_wet'
}
})
if minetest.registered_nodes["farming:dry_soil_wet"] then
minetest.register_alias("everness:dry_dirt_soil_wet","farming:dry_soil_wet")
else
Everness:register_node('everness:dry_dirt_soil_wet', {
description = S('Cursed Dirt Wet Soil'),
tiles = {
'everness_dry_dirt.png^(everness_dry_dirt.png^[mask:everness_farming_soil_wet_overlay.png^[multiply:#9F754780)',
'everness_dry_dirt.png^(everness_dry_dirt.png^[mask:everness_farming_soil_wet_side_overlay.png^[multiply:#9F754780)',
},
drop = 'everness:dry_dirt',
groups = {
-- MTG
crumbly = 3,
not_in_creative_inventory = 1,
soil = 3,
wet = 1,
grassland = 1,
field = 1,
-- MCL
handy = 1,
shovely = 1,
dirt = 1,
soil_sapling = 2,
soil_sugarcane = 1,
cultivatable = 2,
enderman_takable = 1,
building_block = 1,
},
_mcl_blast_resistance = 0.5,
_mcl_hardness = 0.5,
sounds = Everness.node_sound_dirt_defaults(),
soil = {
base = 'everness:dry_dirt',
dry = 'everness:dry_dirt_soil',
wet = 'everness:dry_dirt_soil_wet'
}
})
end

View file

@ -0,0 +1,685 @@
--[[
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_cave_stone', {
description = S('Mineral Cave Stone'),
tiles = {
{
name = 'everness_mineral_stone_under_top.png',
align_style = 'world',
scale = 2
},
{
name = 'everness_mineral_stone_under_top.png',
align_style = 'world',
scale = 2
},
{
name = 'everness_mineral_stone_under.png',
align_style = 'world',
scale = 2
}
},
drop = 'everness:mineral_cave_cobblestone',
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,
sounds = Everness.node_sound_stone_defaults(),
})
Everness:register_node('everness:mineral_cave_cobblestone', {
description = S('Mineral Cave Cobblestone'),
is_ground_content = false,
tiles = {
{
name = 'everness_mineral_cobblestone_under.png',
align_style = 'world',
scale = 2
}
},
groups = {
-- MTG
cracky = 3,
-- MCL
pickaxey = 1,
building_block = 1,
material_stone = 1,
-- ALL
stone = 2,
},
_mcl_blast_resistance = 6,
_mcl_hardness = 1.5,
_mcl_silk_touch_drop = true,
sounds = Everness.node_sound_stone_defaults(),
})
Everness:register_node('everness:mineral_lava_stone', {
description = S('Mineral Lava Stone with lava'),
is_ground_content = false,
-- Textures of node; +Y, -Y, +X, -X, +Z, -Z
tiles = {
{
name = 'everness_mineral_lava_stone_animated.png',
align_style = 'world',
scale = 2,
animation = {
type = 'vertical_frames',
aspect_w = 16,
aspect_h = 16,
length = 6.4,
},
},
{
name = 'everness_mineral_lava_stone_bottom.png',
align_style = 'world',
scale = 2
},
{
name = 'everness_mineral_lava_stone_side.png',
align_style = 'world',
scale = 2
}
},
drop = 'everness:mineral_lava_stone_dry',
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(),
})
Everness:register_node('everness:mineral_lava_stone_dry', {
description = S('Mineral Lava Stone without lava'),
is_ground_content = false,
-- Textures of node; +Y, -Y, +X, -X, +Z, -Z
tiles = {
{
name = 'everness_mineral_lava_stone_bottom.png',
align_style = 'world',
scale = 2
}
},
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,
sounds = Everness.node_sound_stone_defaults(),
})
Everness:register_node('everness:mineral_lava_stone_with_moss', {
description = S('Mineral Lava Stone with moss'),
is_ground_content = false,
-- Textures of node; +Y, -Y, +X, -X, +Z, -Z
tiles = {
{
name = 'everness_mineral_cave_moss.png',
align_style = 'world',
scale = 2
},
{
name = 'everness_mineral_cave_moss.png',
align_style = 'world',
scale = 2
},
{
name = 'everness_mineral_cave_moss_side.png',
align_style = 'world',
scale = 2
},
},
drop = 'everness:mineral_lava_stone_dry',
groups = {
-- MTG
cracky = 3,
-- Everness
everness_spreading_dirt_type_under = 1,
-- 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_grass_defaults(),
})
for i = 1, 7 do
local last = i == 7
Everness:register_node('everness:volcanic_spike_' .. i, {
description = S('Volcanic Spike') .. ' ' .. i,
tiles = { 'everness_volcanic_rock.png' },
sounds = Everness.node_sound_stone_defaults(),
drawtype = 'nodebox',
groups = {
-- MTG
cracky = 1,
level = 2,
stone = 1,
-- MCL
pickaxey = 5,
building_block = 1,
material_stone = 1,
},
_mcl_blast_resistance = 1200,
_mcl_hardness = 50,
is_ground_content = false,
node_box = {
type = 'fixed',
fixed = {
{
(-8 + i) / 16,
-8 / 16,
(-8 + i) / 16,
(8 - i) / 16,
8 / 16,
(8 - i) / 16
}
}
},
selection_box = {
type = 'fixed',
fixed = {
(-8 + i - 1) / 16,
-8 / 16,
(-8 + i - 1) / 16,
(8 - i + 1) / 16,
8 / 16,
(8 - i + 1) / 16
}
},
collision_box = {
type = 'fixed',
fixed = {
(-8 + i) / 16,
-8 / 16,
(-8 + i) / 16,
(8 - i) / 16,
8 / 16,
(8 - i) / 16
},
},
move_resistance = last and 7 or 0,
damage_per_second = last and 4 or 0,
drowning = last and 1 or 0,
walkable = not last,
climbable = last,
})
Everness:register_node('everness:mineral_cave_stone_spike_' .. i, {
description = S('Mineral Lava Stone Spike') .. ' ' .. i,
-- Textures of node; +Y, -Y, +X, -X, +Z, -Z
tiles = {
{
name = 'everness_mineral_stone_under_top.png',
align_style = 'world',
scale = 2
},
{
name = 'everness_mineral_stone_under_top.png',
align_style = 'world',
scale = 2
},
{
name = 'everness_mineral_stone_under.png',
align_style = 'world',
scale = 2
}
},
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,
sounds = Everness.node_sound_stone_defaults(),
drawtype = 'nodebox',
is_ground_content = false,
node_box = {
type = 'fixed',
fixed = {
{
(-8 + i) / 16,
-8 / 16,
(-8 + i) / 16,
(8 - i) / 16,
8 / 16,
(8 - i) / 16
}
}
},
selection_box = {
type = 'fixed',
fixed = {
(-8 + i - 1) / 16,
-8 / 16,
(-8 + i - 1) / 16,
(8 - i + 1) / 16,
8 / 16,
(8 - i + 1) / 16
}
},
collision_box = {
type = 'fixed',
fixed = {
(-8 + i) / 16,
-8 / 16,
(-8 + i) / 16,
(8 - i) / 16,
8 / 16,
(8 - i) / 16
},
},
move_resistance = last and 7 or 0,
damage_per_second = last and 4 or 0,
drowning = last and 1 or 0,
walkable = not last,
climbable = last,
})
Everness:register_node('everness:mineral_lava_stone_spike_' .. i, {
description = S('Mineral Lava Stone Spike') .. ' ' .. i,
-- Textures of node; +Y, -Y, +X, -X, +Z, -Z
tiles = {
{
name = 'everness_mineral_lava_stone_animated.png',
align_style = 'world',
scale = 2,
animation = {
type = 'vertical_frames',
aspect_w = 16,
aspect_h = 16,
length = 6.4,
},
},
},
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,
sounds = Everness.node_sound_stone_defaults(),
drawtype = 'nodebox',
is_ground_content = false,
node_box = {
type = 'fixed',
fixed = {
{
(-8 + i) / 16,
-8 / 16,
(-8 + i) / 16,
(8 - i) / 16,
8 / 16,
(8 - i) / 16
}
}
},
selection_box = {
type = 'fixed',
fixed = {
(-8 + i - 1) / 16,
-8 / 16,
(-8 + i - 1) / 16,
(8 - i + 1) / 16,
8 / 16,
(8 - i + 1) / 16
}
},
collision_box = {
type = 'fixed',
fixed = {
(-8 + i) / 16,
-8 / 16,
(-8 + i) / 16,
(8 - i) / 16,
8 / 16,
(8 - i) / 16
},
},
light_source = 12,
move_resistance = last and 7 or 0,
damage_per_second = last and 4 or 0,
drowning = last and 1 or 0,
walkable = not last,
climbable = last,
})
end
Everness:register_node('everness:lava_tree', {
description = S('Lava Tree Trunk'),
short_description = S('Lava Tree Trunk'),
tiles = {
{ name = 'everness_lava_tree_top.png' },
{ name = 'everness_lava_tree_top.png' },
{
name = 'everness_lava_tree.png',
align_style = 'world',
scale = 2,
},
},
paramtype2 = 'facedir',
is_ground_content = false,
groups = {
-- MTG
choppy = 2,
oddly_breakable_by_hand = 1,
-- MCL
handy = 1,
axey = 1,
building_block = 1,
material_wood = 1,
fire_encouragement = 5,
fire_flammability = 5,
-- ALL
tree = 1,
flammable = 2,
},
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
sounds = Everness.node_sound_wood_defaults(),
on_place = minetest.rotate_node
})
Everness:register_node('everness:lava_tree_with_lava', {
description = S('Lava Tree Trunk with Lava Veins'),
short_description = S('Lava Tree Trunk with Lava Veins'),
tiles = {
{ name = 'everness_lava_tree_top.png' },
{ name = 'everness_lava_tree_top.png' },
{
name = 'everness_lava_tree_animated.png',
align_style = 'world',
scale = 8,
animation = {
type = 'vertical_frames',
aspect_w = 16,
aspect_h = 16,
length = 8,
},
},
},
paramtype2 = 'facedir',
is_ground_content = false,
groups = {
-- MTG
choppy = 2,
oddly_breakable_by_hand = 1,
-- MCL
handy = 1,
axey = 1,
building_block = 1,
material_wood = 1,
fire_encouragement = 5,
fire_flammability = 5,
-- ALL
tree = 1,
flammable = 2,
},
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
sounds = Everness.node_sound_wood_defaults(),
on_place = minetest.rotate_node,
light_source = 3,
})
Everness:register_node('everness:lava_tree_wood', {
description = S('Lava Tree Wood Planks'),
paramtype2 = 'facedir',
place_param2 = 0,
tiles = {
{
name = 'everness_lava_tree_wood.png',
align_style = 'world',
scale = 2
},
},
is_ground_content = false,
groups = {
-- MTG
choppy = 3,
oddly_breakable_by_hand = 2,
-- Everness
everness_wood = 1,
-- MCL
handy = 1,
axey = 1,
building_block = 1,
material_wood = 1,
fire_encouragement = 5,
fire_flammability = 20,
-- ALL
flammable = 3,
wood = 1,
},
_mcl_blast_resistance = 3,
_mcl_hardness = 2,
sounds = Everness.node_sound_wood_defaults(),
})
Everness:register_node('everness:lava_tree_sapling', {
description = S('Lava') .. ' ' .. S('Tree') .. ' ' .. S('Sapling'),
short_description = S('Lava') .. ' ' .. S('Tree') .. ' ' .. S('Sapling'),
drawtype = 'plantlike',
tiles = { 'everness_lava_tree_sapling.png' },
inventory_image = 'everness_lava_tree_sapling.png',
wield_image = 'everness_lava_tree_sapling.png',
paramtype = 'light',
sunlight_propagates = true,
walkable = false,
selection_box = {
type = 'fixed',
fixed = { -4 / 16, -0.5, -4 / 16, 4 / 16, 4 / 16, 4 / 16 }
},
groups = {
-- MTG
snappy = 2,
flammable = 2,
-- X Farming
compost = 30,
-- MCL
plant = 1,
non_mycelium_plant = 1,
deco_block = 1,
dig_by_water = 1,
dig_by_piston = 1,
destroy_by_lava_flow = 1,
compostability = 30,
-- ALL
dig_immediate = 3,
attached_node = 1,
sapling = 1,
},
_mcl_blast_resistance = 0,
_mcl_hardness = 0,
sounds = Everness.node_sound_leaves_defaults(),
on_timer = function(pos)
Everness.grow_sapling(pos)
end,
on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(300, 1500))
end,
on_place = function(itemstack, placer, pointed_thing)
local on_place_props = {
sapling_name = 'everness:lava_tree_sapling',
minp_relative = { x = -7, y = 1, z = -7 },
maxp_relative = { x = 7, y = 13, z = 7 },
interval = 4,
}
return Everness:sapling_on_place(itemstack, placer, pointed_thing, on_place_props)
end,
})
Everness:register_node('everness:lava_tree_leaves', {
description = S('Lava') .. ' ' .. S('Tree') .. ' ' .. S('Leaves'),
short_description = S('Lava') .. ' ' .. S('Tree') .. ' ' .. S('Leaves'),
drawtype = 'allfaces_optional',
tiles = {
{
name = 'everness_lava_tree_leaves.png',
align_style = 'world',
scale = 2,
},
},
special_tiles = {
{
name = 'everness_lava_tree_leaves.png',
align_style = 'world',
scale = 2,
},
},
paramtype = 'light',
is_ground_content = false,
sunlight_propagates = true,
groups = {
-- MTG
snappy = 3,
leafdecay = 3,
-- X Farming
compost = 30,
-- MCL
handy = 1,
hoey = 1,
shearsy = 1,
swordy = 1,
dig_by_piston = 1,
fire_encouragement = 30,
fire_flammability = 60,
deco_block = 1,
compostability = 30,
-- ALL
flammable = 2,
leaves = 1,
},
_mcl_shears_drop = true,
_mcl_blast_resistance = 0.2,
_mcl_hardness = 0.2,
_mcl_silk_touch_drop = true,
drop = {
max_items = 1,
items = {
{
-- player will get sapling with 1/100 chance
items = { 'everness:lava_tree_sapling' },
rarity = 100,
},
{
-- player will get leaves only if he get no saplings,
-- this is because max_items is 1
items = { 'everness:lava_tree_leaves' },
}
}
},
sounds = Everness.node_sound_leaves_defaults(),
after_place_node = function(pos, placer, itemstack, pointed_thing)
return Everness:after_place_leaves(pos, placer, itemstack, pointed_thing)
end
})
Everness:register_node('everness:mineral_cave_moss_grass', {
description = S('Mineral Cave Moss Grass'),
short_description = S('Mineral Cave Moss Grass'),
drawtype = 'plantlike',
waving = 1,
tiles = { 'everness_mineral_cave_moss_grass.png' },
inventory_image = 'everness_mineral_cave_moss_grass.png',
wield_image = 'everness_mineral_cave_moss_grass.png',
paramtype = 'light',
sunlight_propagates = true,
walkable = false,
buildable_to = true,
groups = {
-- MTG
snappy = 3,
flora = 1,
-- Everness
mineral_waters_grass_under = 1,
-- X Farming
compost = 30,
-- MCL
handy = 1,
shearsy = 1,
deco_block = 1,
plant = 1,
non_mycelium_plant = 1,
fire_encouragement = 60,
fire_flammability = 100,
dig_by_water = 1,
destroy_by_lava_flow = 1,
compostability = 30,
-- ALL
attached_node = 1,
flammable = 2,
},
_mcl_blast_resistance = 0,
_mcl_hardness = 0,
sounds = Everness.node_sound_leaves_defaults(),
selection_box = {
type = 'fixed',
fixed = { -6 / 16, -0.5, -6 / 16, 6 / 16, 4 / 16, 6 / 16 },
},
light_source = 7
})

105
mods/everness/panes.lua Normal file
View file

@ -0,0 +1,105 @@
--[[
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())
xpanes.register_pane('pyrite_pane', {
description = S('Pyrite Glass Pane'),
textures = { 'everness_pyrite_glass.png', '', 'everness_xpanes_edge_pyrite.png' },
use_texture_alpha = 'clip',
inventory_image = 'everness_pyrite_glass.png',
wield_image = 'everness_pyrite_glass.png',
sounds = Everness.node_sound_glass_defaults(),
groups = { snappy = 2, cracky = 3, oddly_breakable_by_hand = 3 },
recipe = {
{ 'everness:pyrite_glass', 'everness:pyrite_glass', 'everness:pyrite_glass' },
{ 'everness:pyrite_glass', 'everness:pyrite_glass', 'everness:pyrite_glass' }
}
})
xpanes.register_pane('cursed_bar', {
description = S('Cursed Steel Bars'),
textures = {'everness_cursed_bar.png', '', 'everness_cursed_bar_top.png'},
inventory_image = 'everness_cursed_bar.png',
wield_image = 'everness_cursed_bar.png',
groups = { cracky = 2 },
sounds = Everness.node_sound_metal_defaults(),
recipe = {
{ 'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot' },
{ 'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot' },
{ 'everness:cursed_lands_deep_ocean_sandstone_block', 'everness:cursed_lands_deep_ocean_sandstone_block', 'everness:cursed_lands_deep_ocean_sandstone_block' }
}
})
-- Register steel bar doors and trapdoors
if minetest.get_modpath('doors') then
doors.register('everness:door_cursed_steel_bar', {
tiles = {
{
name = 'everness_door_cursed_steel_bar.png',
backface_culling = true
}
},
description = S('Cursed Steel Bar Door'),
inventory_image = 'everness_door_cursed_steel_bar_item.png',
protected = true,
groups = {
node = 1,
cracky = 1,
level = 2
},
sounds = Everness.node_sound_metal_defaults(),
sound_open = 'xpanes_steel_bar_door_open',
sound_close = 'xpanes_steel_bar_door_close',
gain_open = 0.15,
gain_close = 0.13,
recipe = {
{'xpanes:cursed_bar_flat', 'xpanes:cursed_bar_flat'},
{'xpanes:cursed_bar_flat', 'xpanes:cursed_bar_flat'},
{'xpanes:cursed_bar_flat', 'xpanes:cursed_bar_flat'},
},
})
doors.register_trapdoor('everness:trapdoor_cursed_steel_bar', {
description = S('Steel Bar Trapdoor'),
inventory_image = 'everness_trapdoor_cursed_steel_bar.png',
wield_image = 'everness_trapdoor_cursed_steel_bar.png',
tile_front = 'everness_trapdoor_cursed_steel_bar.png',
tile_side = 'everness_trapdoor_cursed_steel_bar_side.png',
protected = true,
groups = {
node = 1,
cracky = 1,
level = 2,
door = 1
},
sounds = Everness.node_sound_metal_defaults(),
sound_open = 'xpanes_steel_bar_door_open',
sound_close = 'xpanes_steel_bar_door_close',
gain_open = 0.15,
gain_close = 0.13,
})
minetest.register_craft({
output = 'everness:trapdoor_cursed_steel_bar',
recipe = {
{'xpanes:cursed_bar_flat', 'xpanes:cursed_bar_flat'},
{'xpanes:cursed_bar_flat', 'xpanes:cursed_bar_flat'},
}
})
end

View file

@ -0,0 +1,85 @@
--[[
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 function update_sfinv(name)
minetest.after(0, function()
local player = minetest.get_player_by_name(name)
if player then
if sfinv.get_page(player) == 'everness:encyclopedia' then
sfinv.set_page(player, sfinv.get_homepage_name(player))
else
sfinv.set_player_inventory_formspec(player)
end
end
end)
end
local function update_ui(name)
minetest.after(0, function()
local player = minetest.get_player_by_name(name)
if player then
if unified_inventory.current_page[name] == 'everness:encyclopedia' then
unified_inventory.current_page[name] = 'craft'
end
unified_inventory.set_inventory_formspec(player, unified_inventory.current_page[name])
end
end)
end
minetest.register_privilege('everness_encyclopedia', {
-- Privilege description
description = 'Collection of registered items and functions with some information about them. Used for testing not for gameplay. Works only with SFINV!',
-- Whether to grant the privilege to singleplayer.
give_to_singleplayer = false,
-- Whether to grant the privilege to the server admin.
-- Uses value of 'give_to_singleplayer' by default.
give_to_admin = false,
-- Called when given to player 'name' by 'granter_name'.
-- 'granter_name' will be nil if the priv was granted by a mod.
on_grant = function(name, granter_name)
if minetest.get_modpath('sfinv') and sfinv.enabled then
update_sfinv(name)
elseif minetest.get_modpath('unified_inventory') then
update_ui(name)
else
minetest.chat_send_player(name, 'Compatible inventory not found. Everness encyclopedia will not be shown.')
end
end,
-- Called when taken from player 'name' by 'revoker_name'.
-- 'revoker_name' will be nil if the priv was revoked by a mod.
-- Note that the above two callbacks will be called twice if a player is
-- responsible, once with the player name, and then with a nil player
-- name.
-- Return true in the above callbacks to stop register_on_priv_grant or
-- revoke being called.
on_revoke = function(name, revoker_name)
if minetest.get_modpath('sfinv') and sfinv.enabled then
update_sfinv(name)
elseif minetest.get_modpath('unified_inventory') then
update_ui(name)
else
minetest.chat_send_player(name, 'Compatible inventory not found. Everness encyclopedia will not be shown.')
end
end,
})

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more