more mods
This commit is contained in:
1 parent
cc0fa41e3b
commit
bac6ac94a3
1742 files changed
+115814
-1
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -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.
|
||||
|
||||

|
||||
|
||||
## 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://docs.luanti.org/for-players/installing-mods/
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,182 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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)
|
||||
core.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)
|
||||
core.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 = core.get_node(vector.new(pos.x, pos.y - 1, pos.z))
|
||||
local node_above = core.get_node(vector.new(pos.x, pos.y + 1, pos.z))
|
||||
|
||||
if core.get_item_group(node_under.name, 'bamboo') > 0 then
|
||||
core.swap_node(pos, { name = itemstack:get_name(), param2 = node_under.param2 })
|
||||
return
|
||||
elseif core.get_item_group(node_above.name, 'bamboo') > 0 then
|
||||
core.swap_node(pos, { name = itemstack:get_name(), param2 = node_above.param2 })
|
||||
return
|
||||
end
|
||||
|
||||
local rand_color = math.random(0, 7) * 32
|
||||
local rand_param2 = rand_color + math.random(0, 3)
|
||||
core.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 = core.get_node(pos_above)
|
||||
local node_below = core.get_node(pos_below)
|
||||
|
||||
if core.get_item_group(node_below.name, 'bamboo') > 0 then
|
||||
self:tick_bamboo(pos_below)
|
||||
end
|
||||
|
||||
if core.get_item_group(node_above.name, 'bamboo') > 0 then
|
||||
core.node_dig(pos_above, node_above, digger)
|
||||
|
||||
core.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 = core.get_node(_pos).name
|
||||
local node_below = core.get_node(_pos)
|
||||
local _node = core.get_node(pos)
|
||||
|
||||
if core.get_item_group(node_below.name, 'soil') == 0
|
||||
and core.get_item_group(node_below.name, 'sand') == 0
|
||||
and core.get_item_group(node_below.name, 'everness_sand') == 0
|
||||
then
|
||||
|
||||
if core.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 core.get_item_group(_node.name, 'bamboo') > 0 and height < 16 do
|
||||
height = height + 1
|
||||
_pos.y = _pos.y + 1
|
||||
_node = core.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 core.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_color = math.random(0, 7) * 32
|
||||
local rand_param2 = rand_color + 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 = core.get_node(pos_to_swap)
|
||||
height_offset = height_offset - 1
|
||||
|
||||
if i == 1 then
|
||||
if core.get_item_group(node_to_swap.name, 'seed') == 0 and node_to_swap.name ~= 'air' then
|
||||
rand_param2 = node_to_swap.param2
|
||||
end
|
||||
end
|
||||
|
||||
core.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 = core.get_node(vector.new(start_pos.x, start_pos.y - 1, start_pos.z))
|
||||
|
||||
core.set_node(start_pos, { name = 'everness:bamboo_3', param2 = prev_node.param2 })
|
||||
|
||||
for k, v in ipairs(self.bamboo.top_leaves_schem) do
|
||||
core.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
|
||||
@@ -0,0 +1,238 @@
|
||||
--[[
|
||||
Authors of original source code
|
||||
----------------------
|
||||
Kahrl <kahrl@gmx.net> (LGPLv2.1+)
|
||||
celeron55, Perttu Ahola <celeron55@gmail.com> (LGPLv2.1+)
|
||||
Various Luanti developers and contributors (LGPLv2.1+)
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
|
||||
Modified by:
|
||||
|
||||
Copyright (C) 2025 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 = core.get_translator(core.get_current_modname())
|
||||
|
||||
core.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 core.is_protected(pos, name) then
|
||||
core.log('action', (name ~= '' and name or 'A mod')
|
||||
.. ' tried to ' .. text
|
||||
.. ' at protected position '
|
||||
.. core.pos_to_string(pos)
|
||||
.. ' with a bucket')
|
||||
core.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 = core.get_node_or_nil(pointed_thing.under)
|
||||
local ndef = node and core.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 = core.get_node_or_nil(lpos)
|
||||
local above_ndef = node and core.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
|
||||
|
||||
core.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 = core.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)
|
||||
core.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 = core.find_node_near(pointed_thing.under, 1, liquiddef.source)
|
||||
end
|
||||
|
||||
if not (source_neighbor and liquiddef.force_renew) then
|
||||
core.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 = core.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 }
|
||||
)
|
||||
|
||||
core.register_craft({
|
||||
type = 'fuel',
|
||||
recipe = 'everness:bucket_lava',
|
||||
burntime = 370,
|
||||
replacements = {{ 'everness:bucket_lava', 'everness:bucket_empty' }},
|
||||
})
|
||||
@@ -0,0 +1,25 @@
|
||||
local S = core.get_translator(core.get_current_modname())
|
||||
|
||||
core.register_chatcommand('everness:getbiomename', {
|
||||
description = S('Get biome name where you are standing.'),
|
||||
params = '',
|
||||
privs = { creative = true },
|
||||
func = function(name, param)
|
||||
local player = core.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 = core.get_biome_data(p_pos)
|
||||
|
||||
if not biome_data then
|
||||
return false
|
||||
end
|
||||
|
||||
local biome_name = core.get_biome_name(biome_data.biome)
|
||||
|
||||
core.chat_send_player(name, 'Biome name: ' .. biome_name)
|
||||
end,
|
||||
})
|
||||
@@ -0,0 +1,435 @@
|
||||
--[[
|
||||
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 Luanti 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 = core.get_translator(core.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 = core.registered_nodes[core.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 = core.get_node(pos)
|
||||
|
||||
core.after(0.2, core.swap_node, pos, { name = swap, param2 = node.param2 })
|
||||
core.sound_play(sound, { gain = 0.3, pos = pos, max_hear_distance = 10 }, true)
|
||||
end
|
||||
|
||||
Everness.chest.open_chests = {}
|
||||
|
||||
core.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)
|
||||
|
||||
core.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
|
||||
def.use_texture_alpha = 'clip'
|
||||
def.backface_culling = false
|
||||
|
||||
if def.protected then
|
||||
-- Locked chest
|
||||
def.on_construct = function(pos)
|
||||
local meta = core.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 = core.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 = core.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
|
||||
|
||||
core.sound_play(def.sound_open, { gain = 0.3, pos = pos, max_hear_distance = 10 }, true)
|
||||
|
||||
if not Everness.chest.chest_lid_obstructed(pos) then
|
||||
core.swap_node(pos, { name = name .. '_open', param2 = node.param2 })
|
||||
end
|
||||
|
||||
core.after(
|
||||
0.2,
|
||||
core.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 = core.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', core.parse_json(itemstack:get_metadata()).secret)
|
||||
itemstack:set_metadata('')
|
||||
end
|
||||
|
||||
if secret ~= key_meta:get_string('secret') then
|
||||
return
|
||||
end
|
||||
|
||||
core.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 = core.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
|
||||
core.record_protection_violation(pos, pn)
|
||||
core.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 = core.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 = core.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
return inv:is_empty('main')
|
||||
end
|
||||
|
||||
def.on_rightclick = function(pos, node, clicker)
|
||||
core.sound_play(def.sound_open, { gain = 0.3, pos = pos, max_hear_distance = 10 }, true)
|
||||
|
||||
if not Everness.chest.chest_lid_obstructed(pos) then
|
||||
core.swap_node(pos, { name = name .. '_open', param2 = node.param2 })
|
||||
end
|
||||
|
||||
core.after(0.2, core.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
|
||||
core.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)
|
||||
|
||||
if def.protected then
|
||||
def_opened.mesh = 'everness_chest_protected_opened.obj'
|
||||
def_opened.tiles = {
|
||||
'everness_chest_front.png',
|
||||
'everness_chest_top.png',
|
||||
'everness_chest_side.png',
|
||||
'everness_chest_front.png'
|
||||
}
|
||||
|
||||
def_closed.mesh = 'everness_chest_protected_closed.obj'
|
||||
def_closed.tiles = {
|
||||
'everness_chest_front.png',
|
||||
'everness_chest_top.png',
|
||||
'everness_chest_side.png',
|
||||
'everness_chest_front.png'
|
||||
}
|
||||
else
|
||||
def_opened.mesh = 'everness_chest_opened.obj'
|
||||
def_opened.tiles = {
|
||||
'everness_chest_front.png',
|
||||
'everness_chest_top.png',
|
||||
'everness_chest_side.png'
|
||||
}
|
||||
|
||||
def_closed.mesh = 'everness_chest_closed.obj'
|
||||
def_closed.tiles = {
|
||||
'everness_chest_front.png',
|
||||
'everness_chest_top.png',
|
||||
'everness_chest_side.png'
|
||||
}
|
||||
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
|
||||
|
||||
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
|
||||
core.swap_node(pos, node)
|
||||
end
|
||||
})
|
||||
end
|
||||
|
||||
Everness.chest.register_chest('everness:chest', {
|
||||
description = S('Chest'),
|
||||
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,
|
||||
})
|
||||
|
||||
Everness.chest.register_chest('everness:chest_locked', {
|
||||
description = S('Locked Chest'),
|
||||
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,
|
||||
protected = true
|
||||
})
|
||||
|
||||
core.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({
|
||||
output = 'everness:chest_locked',
|
||||
recipe = {
|
||||
{ 'group:everness_wood', 'group:everness_wood', 'group:everness_wood' },
|
||||
{ 'group:everness_wood', 'everness:pyrite_ingot', 'group:everness_wood' },
|
||||
{ 'group:everness_wood', 'group:everness_wood', 'group:everness_wood' },
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
type = 'shapeless',
|
||||
output = 'everness:chest_locked',
|
||||
recipe = { 'everness:chest', 'everness:pyrite_ingot' },
|
||||
})
|
||||
|
||||
core.register_craft({
|
||||
type = 'fuel',
|
||||
recipe = 'everness:chest',
|
||||
burntime = 30,
|
||||
})
|
||||
|
||||
core.register_craft({
|
||||
type = 'fuel',
|
||||
recipe = 'everness:chest_locked',
|
||||
burntime = 30,
|
||||
})
|
||||
@@ -0,0 +1,614 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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.
|
||||
--]]
|
||||
|
||||
--- Single shapeless craft
|
||||
---@param input_name string
|
||||
---@param output_name string
|
||||
local function register_craft_single(input_name, output_name)
|
||||
core.register_craft({
|
||||
type = 'shapeless',
|
||||
output = output_name,
|
||||
recipe = { input_name }
|
||||
})
|
||||
end
|
||||
|
||||
--- 2x2 same material shaped craft
|
||||
---@param input_name string
|
||||
---@param output_name string
|
||||
local function register_craft_2x2(input_name, output_name)
|
||||
core.register_craft({
|
||||
type = 'shaped',
|
||||
output = output_name,
|
||||
recipe = {
|
||||
{input_name, input_name},
|
||||
{input_name, input_name},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
--- 3x2 same material shaped craft
|
||||
---@param input_name string
|
||||
---@param output_name string
|
||||
local function register_craft_3x2(input_name, output_name)
|
||||
core.register_craft({
|
||||
type = 'shaped',
|
||||
output = output_name,
|
||||
recipe = {
|
||||
{input_name, input_name, input_name},
|
||||
{input_name, input_name, input_name},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
--- 3x2 shaped craft, top same material, bottom (different from top) same material
|
||||
---@param input_top_name string
|
||||
---@param input_bottom_name string
|
||||
---@param output_name string
|
||||
local function register_craft_3x2_composite(input_top_name, input_bottom_name, output_name)
|
||||
core.register_craft({
|
||||
type = 'shaped',
|
||||
output = output_name,
|
||||
recipe = {
|
||||
{input_top_name, input_top_name, input_top_name},
|
||||
{input_bottom_name, input_bottom_name, input_bottom_name},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
--- 1x2 shaped craft, top same material, bottom (different from top) same material
|
||||
---@param input_top_name string
|
||||
---@param input_bottom_name string
|
||||
---@param output_name string
|
||||
local function register_craft_1x2_composite(input_top_name, input_bottom_name, output_name)
|
||||
core.register_craft({
|
||||
type = 'shaped',
|
||||
output = output_name,
|
||||
recipe = {
|
||||
{input_top_name},
|
||||
{input_bottom_name},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
--- 1x3 same material shaped craft
|
||||
---@param input_name string
|
||||
---@param output_name string
|
||||
local function register_craft_1x3(input_name, output_name)
|
||||
core.register_craft({
|
||||
type = 'shaped',
|
||||
output = output_name,
|
||||
recipe = {
|
||||
{input_name},
|
||||
{input_name},
|
||||
{input_name},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
--- 2x1 same material shaped craft
|
||||
---@param input_name string
|
||||
---@param output_name string
|
||||
local function register_craft_2x1(input_name, output_name)
|
||||
core.register_craft({
|
||||
type = 'shaped',
|
||||
output = output_name,
|
||||
recipe = {
|
||||
{input_name, input_name},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
--- 2x1 shaped craft, each material different
|
||||
---@param input_first_name string
|
||||
---@param input_second_name string
|
||||
---@param output_name string
|
||||
local function register_craft_2x1_composite(input_first_name, input_second_name, output_name)
|
||||
core.register_craft({
|
||||
type = 'shaped',
|
||||
output = output_name,
|
||||
recipe = {
|
||||
{input_first_name, input_second_name},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
--- 2x3 same material shaped craft
|
||||
---@param input_name string
|
||||
---@param output_name string
|
||||
local function register_craft_2x3(input_name, output_name)
|
||||
core.register_craft({
|
||||
type = 'shaped',
|
||||
output = output_name,
|
||||
recipe = {
|
||||
{input_name, input_name},
|
||||
{input_name, input_name},
|
||||
{input_name, input_name},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
--- 3x1 same material shaped craft
|
||||
---@param input_name string
|
||||
---@param output_name string
|
||||
local function register_craft_3x1(input_name, output_name)
|
||||
core.register_craft({
|
||||
type = 'shaped',
|
||||
output = output_name,
|
||||
recipe = {
|
||||
{input_name, input_name, input_name},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
--- 3x3 same material shaped craft
|
||||
---@param input_name string
|
||||
---@param output_name string
|
||||
local function register_craft_3x3(input_name, output_name)
|
||||
core.register_craft({
|
||||
type = 'shaped',
|
||||
output = output_name,
|
||||
recipe = {
|
||||
{input_name, input_name, input_name},
|
||||
{input_name, input_name, input_name},
|
||||
{input_name, input_name, input_name},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
--- 'anvil' pattern, same material shaped craft
|
||||
---@param input_name string
|
||||
---@param output_name string
|
||||
local function register_craft_anvil_pattern(input_name, output_name)
|
||||
core.register_craft({
|
||||
type = 'shaped',
|
||||
output = output_name,
|
||||
recipe = {
|
||||
{input_name, input_name, input_name},
|
||||
{'', input_name, ''},
|
||||
{input_name, input_name, input_name},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
--- 'bullseye' pattern, shaped craft, same material around the center, center different material
|
||||
---@param input_around_name string
|
||||
---@param input_center_name string
|
||||
---@param output_name string
|
||||
local function register_craft_bullseye_pattern(input_around_name, input_center_name, output_name)
|
||||
core.register_craft({
|
||||
type = 'shaped',
|
||||
output = output_name,
|
||||
recipe = {
|
||||
{input_around_name, input_around_name, input_around_name},
|
||||
{input_around_name, input_center_name, input_around_name},
|
||||
{input_around_name, input_around_name, input_around_name},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
--- 'sandwich' pattern, shaped craft, same material top/bottom rows, center row different material
|
||||
---@param input_around_name string
|
||||
---@param input_center_name string
|
||||
---@param output_name string
|
||||
local function register_craft_sandwich_pattern(input_around_name, input_center_name, output_name)
|
||||
core.register_craft({
|
||||
type = 'shaped',
|
||||
output = output_name,
|
||||
recipe = {
|
||||
{input_around_name, input_around_name, input_around_name},
|
||||
{input_center_name, input_center_name, input_center_name},
|
||||
{input_around_name, input_around_name, input_around_name},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
--- 'pillar top' pattern, same material shaped craft
|
||||
---@param input_name string
|
||||
---@param output_name string
|
||||
local function register_craft_pillar_top(input_name, output_name)
|
||||
core.register_craft({
|
||||
type = 'shaped',
|
||||
output = output_name,
|
||||
recipe = {
|
||||
{input_name, input_name, input_name},
|
||||
{'', input_name, ''},
|
||||
{'', input_name, ''},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
--- 'pillar bottom' pattern, same material shaped craft
|
||||
---@param input_name string
|
||||
---@param output_name string
|
||||
local function register_craft_pillar_bottom(input_name, output_name)
|
||||
core.register_craft({
|
||||
type = 'shaped',
|
||||
output = output_name,
|
||||
recipe = {
|
||||
{'', input_name, ''},
|
||||
{'', input_name, ''},
|
||||
{input_name, input_name, input_name},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
--
|
||||
-- Default Blocks
|
||||
--
|
||||
if core.get_modpath('default') then
|
||||
register_craft_3x3('default:snowblock', 'everness:snowcobble 9')
|
||||
register_craft_3x3('default:ice', 'everness:icecobble 9')
|
||||
register_craft_single('everness:chest', 'default:chest')
|
||||
elseif core.get_modpath('mcl_core') then
|
||||
register_craft_3x3('mcl_core:snowblock', 'everness:snowcobble 9')
|
||||
register_craft_3x3('mcl_core:ice', 'everness:icecobble 9')
|
||||
register_craft_single('everness:chest', 'mcl_chests:chest')
|
||||
end
|
||||
|
||||
--
|
||||
-- Cobbles
|
||||
--
|
||||
register_craft_3x3('everness:frosted_ice', 'everness:icecobble 9')
|
||||
register_craft_3x3('everness:frosted_snowblock', 'everness:snowcobble 9')
|
||||
|
||||
--
|
||||
-- Bamboo
|
||||
--
|
||||
register_craft_2x2('everness:bamboo_item', 'everness:bamboo_wood')
|
||||
register_craft_3x3('everness:bamboo_item', 'everness:bamboo_block')
|
||||
register_craft_2x2('everness:bamboo_wood', 'everness:bamboo_mosaic_wood')
|
||||
register_craft_3x2('everness:bamboo_wood', 'everness:trapdoor_bamboo 2')
|
||||
|
||||
--
|
||||
-- Ice
|
||||
--
|
||||
register_craft_single('everness:frosted_ice', 'everness:frosted_ice_translucent')
|
||||
register_craft_single('everness:frosted_ice_translucent', 'everness:frosted_ice')
|
||||
|
||||
--
|
||||
-- Trapdoors
|
||||
--
|
||||
register_craft_3x2('everness:crystal_wood', 'everness:trapdoor_crystal_wood 2')
|
||||
register_craft_3x2('everness:dry_wood', 'everness:trapdoor_cursed_wood 2')
|
||||
register_craft_3x2('everness:lava_tree_wood', 'everness:trapdoor_lava_tree 2')
|
||||
register_craft_3x2('everness:palm_tree_wood', 'everness:trapdoor_palm_wood 2')
|
||||
|
||||
--
|
||||
-- Pyrite
|
||||
--
|
||||
register_craft_3x3('everness:pyrite_ingot', 'everness:pyriteblock')
|
||||
|
||||
register_craft_2x2('everness:pyriteblock_forged', 'everness:pyriteblock_brick 4')
|
||||
register_craft_3x3('everness:pyriteblock_forged', 'everness:pyriteblock_polished 9')
|
||||
register_craft_2x3('everness:pyriteblock_forged', 'everness:pyrite_roof_tile 6')
|
||||
|
||||
register_craft_1x2_composite('group:glass', 'everness:pyrite_ingot', 'everness:pyrite_glass')
|
||||
|
||||
if core.get_modpath('default') then
|
||||
register_craft_1x2_composite('default:glass', 'everness:pyrite_ingot', 'everness:pyrite_glass')
|
||||
elseif core.get_modpath('mcl_core') then
|
||||
register_craft_1x2_composite('mcl_core:glass', 'everness:pyrite_ingot', 'everness:pyrite_glass')
|
||||
end
|
||||
|
||||
register_craft_1x2_composite('everness:pyrite_glass', 'everness:pyrite_ingot', 'everness:pyrite_lantern')
|
||||
register_craft_2x1('everness:pyriteblock_forged', 'everness:pyriteblock_slab_brick 2')
|
||||
|
||||
register_craft_bullseye_pattern('everness:pyriteblock_forged', '', 'everness:pyriteblock_spiral 8')
|
||||
|
||||
register_craft_pillar_bottom('everness:pyriteblock_forged', 'everness:pyrite_pillar_bottom 5')
|
||||
register_craft_1x3('everness:pyriteblock_forged', 'everness:pyrite_pillar_middle 3')
|
||||
register_craft_pillar_top('everness:pyriteblock_forged', 'everness:pyrite_pillar_top 5')
|
||||
|
||||
register_craft_anvil_pattern('everness:pyriteblock_forged', 'everness:pyrite_pillar_small 7')
|
||||
|
||||
--
|
||||
-- Glass
|
||||
--
|
||||
register_craft_bullseye_pattern('everness:glass', 'everness:bloodspore_plant', 'everness:tinted_glass_red 8')
|
||||
register_craft_bullseye_pattern('everness:glass', 'everness:bloodspore_plant_small', 'everness:tinted_glass_red 8')
|
||||
|
||||
--
|
||||
-- Tree into wood
|
||||
--
|
||||
local recipes_wood = {
|
||||
{'everness:baobab_tree', 'everness:baobab_wood 4'},
|
||||
{'everness:coral_tree', 'everness:coral_wood 4'},
|
||||
{'everness:crystal_tree', 'everness:crystal_wood 4'},
|
||||
{'everness:dry_tree', 'everness:dry_wood 4'},
|
||||
{'everness:lava_tree', 'everness:lava_tree_wood 4'},
|
||||
{'everness:lava_tree_with_lava', 'everness:lava_tree_wood 4'},
|
||||
{'everness:mese_tree', 'everness:mese_wood 4'},
|
||||
{'everness:sequoia_tree', 'everness:sequoia_wood 4'},
|
||||
{'everness:willow_tree', 'everness:willow_wood 4'},
|
||||
{'everness:palm_tree', 'everness:palm_tree_wood 4'},
|
||||
}
|
||||
|
||||
for _, data in ipairs(recipes_wood) do
|
||||
register_craft_single(data[1], data[2])
|
||||
end
|
||||
|
||||
--
|
||||
-- Sand into sandstone
|
||||
--
|
||||
local recipes_sandstone = {
|
||||
{'everness:coral_forest_deep_ocean_sand', 'everness:coral_deep_ocean_sandstone_block 4'},
|
||||
{'everness:coral_sand', 'everness:coral_sandstone 4'},
|
||||
{'everness:coral_white_sand', 'everness:coral_white_sandstone 4'},
|
||||
{'everness:crystal_forest_deep_ocean_sand', 'everness:crystal_forest_deep_ocean_sandstone_block 4'},
|
||||
{'everness:crystal_sand', 'everness:crystal_sandstone 4'},
|
||||
{'everness:cursed_lands_deep_ocean_sand', 'everness:cursed_lands_deep_ocean_sandstone_block 4'},
|
||||
{'everness:cursed_sand', 'everness:cursed_sandstone_block 4'},
|
||||
{'everness:mineral_sand', 'everness:mineral_sandstone 4'},
|
||||
}
|
||||
|
||||
for _, data in ipairs(recipes_sandstone) do
|
||||
register_craft_2x2(data[1], data[2])
|
||||
end
|
||||
|
||||
--
|
||||
-- Stone and bone into brick
|
||||
--
|
||||
local recipes_brick = {
|
||||
{'everness:coral_bones_block', 'everness:coral_bones_brick 4'},
|
||||
{'everness:coral_deep_ocean_sandstone_block', 'everness:coral_deep_ocean_sandstone_brick 4'},
|
||||
{'everness:coral_desert_stone', 'everness:coral_desert_stone_brick 4'},
|
||||
{'everness:coral_sandstone', 'everness:coral_sandstone_brick 4'},
|
||||
{'everness:coral_white_sandstone', 'everness:coral_white_sandstone_brick 4'},
|
||||
{'everness:crystal_forest_deep_ocean_sandstone_block', 'everness:crystal_forest_deep_ocean_sandstone_brick 4'},
|
||||
{'everness:crystal_sandstone', 'everness:crystal_sandstone_brick 4'},
|
||||
{'everness:cursed_lands_deep_ocean_sandstone_block', 'everness:cursed_lands_deep_ocean_sandstone_brick 4'},
|
||||
{'everness:cursed_sandstone_block', 'everness:cursed_sandstone_brick 4'},
|
||||
{'everness:cursed_stone', 'everness:cursed_brick 4'},
|
||||
{'everness:forsaken_desert_stone', 'everness:forsaken_desert_brick_red 4'},
|
||||
{'everness:forsaken_tundra_stone', 'everness:forsaken_tundra_brick 4'},
|
||||
{'everness:mineral_sandstone', 'everness:mineral_sandstone_brick 4'},
|
||||
{'everness:mineral_stone', 'everness:mineral_stone_brick 4'},
|
||||
}
|
||||
|
||||
for _, data in ipairs(recipes_brick) do
|
||||
register_craft_2x2(data[1], data[2])
|
||||
end
|
||||
|
||||
--
|
||||
-- Base materials into blocks
|
||||
--
|
||||
register_craft_2x2('everness:quartz_crystal', 'everness:quartz_block 4')
|
||||
|
||||
register_craft_3x3('everness:coral_bones', 'everness:coral_bones_block 9')
|
||||
register_craft_3x3('everness:coral_desert_stone', 'everness:coral_desert_stone_block 9')
|
||||
register_craft_3x3('everness:crystal_cyan', 'everness:crystal_block_cyan')
|
||||
register_craft_3x3('everness:crystal_orange', 'everness:crystal_block_orange')
|
||||
register_craft_3x3('everness:crystal_purple', 'everness:crystal_block_purple')
|
||||
register_craft_3x3('everness:mineral_sandstone', 'everness:mineral_sandstone_block 9')
|
||||
register_craft_3x3('everness:mineral_stone', 'everness:mineral_stone_block 9')
|
||||
|
||||
--
|
||||
-- Blocks into base materials
|
||||
--
|
||||
register_craft_single('everness:crystal_block_cyan', 'everness:crystal_cyan 9')
|
||||
register_craft_single('everness:crystal_block_orange', 'everness:crystal_orange 9')
|
||||
register_craft_single('everness:crystal_block_purple', 'everness:crystal_purple 9')
|
||||
|
||||
--
|
||||
-- Carved and chiseled blocks
|
||||
--
|
||||
register_craft_2x2('everness:coral_sandstone_chiseled', 'everness:coral_sandstone_carved_1 9')
|
||||
register_craft_2x2('everness:quartz_block', 'everness:quartz_chiseled 4')
|
||||
|
||||
register_craft_3x3('everness:coral_sandstone', 'everness:coral_sandstone_chiseled 9')
|
||||
register_craft_3x3('everness:crystal_sandstone', 'everness:crystal_sandstone_chiseled 9')
|
||||
register_craft_3x3('everness:cursed_brick', 'everness:cursed_brick_carved 9')
|
||||
|
||||
register_craft_1x2_composite('everness:forsaken_desert_brick_red', 'everness:forsaken_desert_brick', 'everness:forsaken_desert_chiseled_stone')
|
||||
|
||||
--
|
||||
-- Masonry items
|
||||
--
|
||||
register_craft_1x3('everness:coral_white_sandstone', 'everness:coral_white_sandstone_pillar 3')
|
||||
register_craft_1x3('everness:quartz_block', 'everness:quartz_pillar 3')
|
||||
|
||||
register_craft_2x1_composite('everness:cursed_brick', 'group:leaves', 'everness:cursed_brick_with_growth 4')
|
||||
|
||||
core.register_craft({
|
||||
output = 'everness:cursed_brick_mixed 4',
|
||||
recipe = {
|
||||
{ 'everness:cursed_stone', 'everness:cursed_brick' },
|
||||
{ 'everness:cursed_brick', 'everness:cursed_stone' },
|
||||
}
|
||||
})
|
||||
|
||||
register_craft_2x1_composite('everness:forsaken_desert_cobble_red', 'everness:forsaken_desert_sand', 'everness:forsaken_desert_cobble')
|
||||
register_craft_2x1_composite('everness:forsaken_desert_brick_red', 'everness:forsaken_desert_sand', 'everness:forsaken_desert_brick')
|
||||
|
||||
register_craft_2x2('everness:forsaken_desert_brick', 'everness:forsaken_desert_engraved_stone 4')
|
||||
|
||||
--
|
||||
-- Misc items
|
||||
--
|
||||
core.register_craft({
|
||||
output = 'everness:coral_forest_deep_ocean_lantern 1',
|
||||
recipe = {
|
||||
{ 'everness:coral_deep_ocean_sandstone_block', 'group:glass', 'everness:coral_deep_ocean_sandstone_block' },
|
||||
{ 'group:glass', 'group:torch', 'group:glass' },
|
||||
{ 'everness:coral_deep_ocean_sandstone_block', 'group:glass', 'everness:coral_deep_ocean_sandstone_block' },
|
||||
}
|
||||
})
|
||||
|
||||
if core.get_modpath('default') then
|
||||
core.register_craft({
|
||||
output = 'everness:coral_forest_deep_ocean_lantern 1',
|
||||
recipe = {
|
||||
{ 'everness:coral_deep_ocean_sandstone_block', 'default:glass', 'everness:coral_deep_ocean_sandstone_block' },
|
||||
{ 'default:glass', 'group:torch', 'default:glass' },
|
||||
{ 'everness:coral_deep_ocean_sandstone_block', 'default:glass', 'everness:coral_deep_ocean_sandstone_block' },
|
||||
}
|
||||
})
|
||||
elseif core.get_modpath('mcl_core') then
|
||||
core.register_craft({
|
||||
output = 'everness:coral_forest_deep_ocean_lantern 1',
|
||||
recipe = {
|
||||
{ 'everness:coral_deep_ocean_sandstone_block', 'mcl_core:glass', 'everness:coral_deep_ocean_sandstone_block' },
|
||||
{ 'mcl_core:glass', 'group:torch', 'mcl_core:glass' },
|
||||
{ 'everness:coral_deep_ocean_sandstone_block', 'mcl_core:glass', 'everness:coral_deep_ocean_sandstone_block' },
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
core.register_craft({
|
||||
output = 'everness:shell_of_underwater_breathing',
|
||||
recipe = {
|
||||
{ '', '', 'group:everness_crystal_forest_deep_ocean_coral' },
|
||||
{ '', 'group:everness_cursed_lands_deep_ocean_coral', '' },
|
||||
{ 'group:everness_coral_forest_deep_ocean_coral', '', '' },
|
||||
}
|
||||
})
|
||||
|
||||
register_craft_3x3('everness:mese_tree_fruit', 'default:mese_crystal_fragment')
|
||||
|
||||
register_craft_3x1('everness:lotus_leaf_3', 'default:paper')
|
||||
|
||||
register_craft_single('everness:mineral_sandstone', 'everness:mineral_sand 4')
|
||||
|
||||
register_craft_3x2_composite('everness:mineral_sandstone', 'everness:mineral_sandstone_brick', 'everness:mineral_sandstone_brick_block 6')
|
||||
|
||||
register_craft_sandwich_pattern('group:flora', 'everness:mineral_stone_brick', 'everness:mineral_stone_brick_with_growth 3')
|
||||
register_craft_sandwich_pattern('everness:mineral_stone_brick_with_growth', 'group:flower', 'everness:mineral_stone_brick_with_flower_growth 6')
|
||||
|
||||
register_craft_3x2('everness:mineral_sandstone', 'everness:sand_castle_wall 6')
|
||||
|
||||
core.register_craft({
|
||||
output = 'everness:ceramic_pot_blank',
|
||||
recipe = {
|
||||
{ '', 'everness:ceramic_pot_sherd_blank', ''},
|
||||
{ 'everness:ceramic_pot_sherd_blank', '', 'everness:ceramic_pot_sherd_blank'},
|
||||
{ '', 'everness:ceramic_pot_sherd_blank', ''},
|
||||
}
|
||||
})
|
||||
|
||||
register_craft_single('everness:ceramic_pot_blank', 'everness:ceramic_pot_sherd_blank 4')
|
||||
|
||||
--
|
||||
-- Tools
|
||||
--
|
||||
local recipes_tool = {
|
||||
{'everness:hammer', {
|
||||
{ 'group:everness_obsidian', 'group:everness_obsidian', 'group:everness_obsidian' },
|
||||
{ 'group:everness_obsidian', 'everness:pyriteblock_forged', 'group:everness_obsidian' },
|
||||
{ '', 'group:stick', '' }
|
||||
}},
|
||||
{'everness:hammer_sharp', {
|
||||
{ 'everness:pyriteblock_forged', 'everness:pyriteblock_forged', 'everness:pyriteblock_forged' },
|
||||
{ 'everness:pyriteblock_forged', 'everness:hammer', 'everness:pyriteblock_forged' },
|
||||
{ '', 'everness:hammer', '' }
|
||||
}},
|
||||
{'everness:pick_archeological', {
|
||||
{ 'group:stone', 'group:stone', 'group:stone' },
|
||||
{ '', 'group:stick', '' },
|
||||
{ 'group:stick', '', '' }
|
||||
}},
|
||||
{'everness:pick_illuminating', {
|
||||
{ 'everness:crystal_purple', 'everness:coral_tree_bioluminescent', 'everness:crystal_purple' },
|
||||
{ '', 'everness:sulfur_stone', '' },
|
||||
{ '', 'group:stick', '' }
|
||||
}},
|
||||
{'everness:shovel_silk', {
|
||||
{ 'everness:ancient_emerald_ice' },
|
||||
{ 'everness:glowing_pillar' },
|
||||
{ 'everness:crystal_purple' }
|
||||
}},
|
||||
{'everness:vine_shears', {
|
||||
{ '', 'everness:pyrite_ingot', '' },
|
||||
{ 'group:stick', 'group:wood', 'everness:pyrite_ingot' },
|
||||
{ '', '', 'group:stick' }
|
||||
}},
|
||||
}
|
||||
|
||||
for _, data in ipairs(recipes_tool) do
|
||||
core.register_craft({
|
||||
type = 'shaped',
|
||||
output = data[1],
|
||||
recipe = data[2]
|
||||
})
|
||||
end
|
||||
|
||||
--
|
||||
-- Fuel
|
||||
--
|
||||
local recipes_fuel = {
|
||||
{'everness:baobab_wood', 8},
|
||||
{'everness:bamboo_block', 15},
|
||||
{'everness:bamboo_dry_block', 15},
|
||||
{'everness:bamboo_item', 3},
|
||||
{'everness:bamboo_mosaic_wood', 15},
|
||||
{'everness:bamboo_wood', 15},
|
||||
{'everness:coral_burdock_1', 3},
|
||||
{'everness:coral_burdock_2', 3},
|
||||
{'everness:crystal_wood', 15},
|
||||
{'everness:door_bamboo', 14},
|
||||
{'everness:lava_tree_wood', 30},
|
||||
{'everness:lotus_leaf_3', 1},
|
||||
{'everness:mese_wood', 15},
|
||||
{'everness:sequoia_wood', 6},
|
||||
{'everness:sulfur_stone', 370},
|
||||
{'everness:trapdoor_bamboo', 7},
|
||||
{'everness:trapdoor_crystal_wood', 7},
|
||||
}
|
||||
|
||||
for _, data in ipairs(recipes_fuel) do
|
||||
core.register_craft({
|
||||
type = 'fuel',
|
||||
recipe = data[1],
|
||||
burntime = data[2],
|
||||
})
|
||||
end
|
||||
|
||||
--
|
||||
-- Cooking recipes
|
||||
--
|
||||
local recipes_cooking = {
|
||||
{'everness:coral_desert_cobble', 'everness:coral_desert_stone'},
|
||||
{'everness:coral_desert_mossy_cobble', 'everness:coral_desert_stone'},
|
||||
{'everness:crystal_cobble', 'everness:crystal_stone'},
|
||||
{'everness:crystal_mossy_cobble', 'everness:crystal_stone'},
|
||||
{'everness:forsaken_desert_cobble_red', 'everness:forsaken_desert_stone'},
|
||||
{'everness:forsaken_tundra_cobble', 'everness:forsaken_tundra_stone'},
|
||||
{'everness:mineral_cave_cobblestone', 'everness:mineral_cave_stone'},
|
||||
{'everness:mineral_lava_stone_dry', 'everness:mineral_lava_stone'},
|
||||
{'everness:mineral_stone_cobble', 'everness:mineral_stone'},
|
||||
--
|
||||
{'everness:bamboo_block', 'everness:bamboo_dry_block'},
|
||||
{'everness:baobab_fruit', 'everness:baobab_fruit_roasted'},
|
||||
{'everness:cursed_stone', 'everness:cursed_stone_carved'},
|
||||
{'everness:lotus_leaf', 'everness:lotus_leaf_3'},
|
||||
{'everness:lotus_leaf_2', 'everness:lotus_leaf_3'},
|
||||
{'everness:pyriteblock', 'everness:pyriteblock_forged'},
|
||||
{'group:everness_sand', 'everness:glass'},
|
||||
}
|
||||
|
||||
for _, data in ipairs(recipes_cooking) do
|
||||
core.register_craft({
|
||||
type = 'cooking',
|
||||
output = data[2],
|
||||
recipe = data[1],
|
||||
})
|
||||
end
|
||||
|
||||
--
|
||||
-- Saplings
|
||||
--
|
||||
register_craft_1x2_composite('group:lantern', 'everness:coral_tree_sapling', 'everness:coral_tree_bioluminescent_sapling')
|
||||
register_craft_1x2_composite('group:lantern', 'everness:dry_tree_sapling', 'everness:cursed_dream_tree_sapling')
|
||||
|
||||
register_craft_2x2('everness:crystal_tree_sapling', 'everness:crystal_tree_large_sapling')
|
||||
@@ -0,0 +1,77 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.get_translator(core.get_current_modname())
|
||||
|
||||
--
|
||||
-- Craftitem registry
|
||||
--
|
||||
|
||||
-- Quartz Crystal
|
||||
Everness:register_craftitem('everness:quartz_crystal', {
|
||||
description = S('Quartz Crystal'),
|
||||
inventory_image = 'everness_quartz.png',
|
||||
})
|
||||
|
||||
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'.. core.colorize(Everness.colors.brown, S('Hunger') .. ': 4'),
|
||||
inventory_image = 'everness_baobab_tree_fruit_roasted.png',
|
||||
on_use = core.item_eat(4),
|
||||
})
|
||||
|
||||
Everness:register_craftitem('everness:pyrite_ingot', {
|
||||
description = S('Pyrite Ingot'),
|
||||
inventory_image = 'everness_pyrite_ingot.png'
|
||||
})
|
||||
|
||||
Everness:register_craftitem('everness:pyrite_lump', {
|
||||
description = S('Pyrite Lump'),
|
||||
inventory_image = 'everness_pyrite_lump.png'
|
||||
})
|
||||
|
||||
Everness:register_craftitem('everness:coconut_fruit', {
|
||||
description = S('Coconut') .. '\n'.. core.colorize(Everness.colors.brown, S('Hunger') .. ': 4'),
|
||||
inventory_image = 'everness_coconut_item.png',
|
||||
wield_scale = { x = 2, y = 2, z = 1 },
|
||||
on_use = core.item_eat(4),
|
||||
})
|
||||
|
||||
--
|
||||
-- Crafting recipes
|
||||
--
|
||||
|
||||
core.register_craft({
|
||||
output = 'everness:pyrite_ingot 9',
|
||||
recipe = {
|
||||
{ 'everness:pyriteblock' },
|
||||
}
|
||||
})
|
||||
|
||||
--
|
||||
-- Cooking recipes
|
||||
--
|
||||
|
||||
core.register_craft({
|
||||
type = 'cooking',
|
||||
output = 'everness:pyrite_ingot',
|
||||
recipe = 'everness:pyrite_lump',
|
||||
})
|
||||
|
||||
@@ -0,0 +1,232 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.get_translator(core.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 }
|
||||
})
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,209 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.get_translator(core.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',
|
||||
})
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,271 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 path = core.get_modpath('everness')
|
||||
local mod_start_time = core.get_us_time()
|
||||
|
||||
dofile(path .. '/api.lua')
|
||||
|
||||
-- Legacy backwards compatibility
|
||||
core.register_alias('everness:dirt_with_grass_2', 'everness:dirt_with_grass_1')
|
||||
core.register_alias('everness:path_dirt_with_grass_2', 'everness:path_dirt_with_grass_1')
|
||||
|
||||
-- MineClonia / VoxeLibre support
|
||||
local is_mcl = core.get_modpath('mcl_core') and core.global_exists('mcl_core')
|
||||
if is_mcl then
|
||||
dofile(path .. '/mod_support_mcl_aliases.lua')
|
||||
end
|
||||
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
|
||||
|
||||
if core.register_mapgen_script then
|
||||
Everness.async_mapgen_active = true
|
||||
core.register_mapgen_script(path .. '/mapgen_async.lua')
|
||||
else
|
||||
Everness.async_mapgen_active = false
|
||||
end
|
||||
|
||||
dofile(path .. '/mapgen_after.lua')
|
||||
|
||||
if is_mcl then
|
||||
dofile(path .. '/mod_support_mcl.lua')
|
||||
else
|
||||
if core.get_modpath('xpanes') and core.global_exists('xpanes') then
|
||||
dofile(path .. '/panes.lua')
|
||||
end
|
||||
|
||||
local enable_moreblocks = Everness.settings.features.everness_enable_moreblocks
|
||||
and (core.get_modpath('moreblocks') or core.get_modpath('stairsplus'))
|
||||
and core.global_exists('stairsplus')
|
||||
|
||||
if enable_moreblocks then
|
||||
dofile(path .. '/mod_support_moreblocks.lua')
|
||||
elseif core.get_modpath('stairs') and core.global_exists('stairs') then
|
||||
dofile(path .. '/stairs.lua')
|
||||
end
|
||||
|
||||
if core.get_modpath('walls') and core.global_exists('walls') then
|
||||
dofile(path .. '/walls.lua')
|
||||
end
|
||||
|
||||
if core.get_modpath('default') or core.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 core.get_modpath('doors') and core.global_exists('doors') then
|
||||
dofile(path .. '/doors.lua')
|
||||
end
|
||||
end
|
||||
|
||||
if not core.get_modpath('bucket') and not core.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 and not core.get_modpath('mcl_core') then
|
||||
dofile(path .. '/sneak_pickup.lua')
|
||||
end
|
||||
|
||||
dofile(path .. '/privileges.lua')
|
||||
dofile(path .. '/chat_commands.lua')
|
||||
|
||||
Everness:encyclopedia_init()
|
||||
|
||||
core.register_on_mods_loaded(function()
|
||||
Everness.set_loot_chest_items()
|
||||
end)
|
||||
|
||||
--
|
||||
-- Mod Support
|
||||
--
|
||||
|
||||
if core.get_modpath('x_farming') and core.global_exists('x_farming') then
|
||||
dofile(path .. '/mod_support_x_farming.lua')
|
||||
end
|
||||
|
||||
if core.get_modpath('x_tumbleweed') and core.global_exists('XTumbleweed') then
|
||||
dofile(path .. '/mod_support_x_tumbleweed.lua')
|
||||
end
|
||||
|
||||
if core.get_modpath('x_obsidianmese')
|
||||
and core.global_exists('x_obsidianmese')
|
||||
-- backwards compatibility check
|
||||
and x_obsidianmese.register_path_node
|
||||
then
|
||||
dofile(path .. '/mod_support_x_obsidianmese.lua')
|
||||
end
|
||||
|
||||
|
||||
-- Minetest Game
|
||||
dofile(path .. '/mod_support_mtg.lua')
|
||||
|
||||
local mod_end_time = (core.get_us_time() - mod_start_time) / 1000000
|
||||
|
||||
print('[Mod] everness loaded.. [' .. mod_end_time .. 's]')
|
||||
@@ -0,0 +1,621 @@
|
||||
# textdomain: everness
|
||||
@1 will intersect protection on growth.=
|
||||
Compost chance=
|
||||
Everness Encyclopedia=
|
||||
You need "everness_encyclopedia" privilige to access this button.=
|
||||
Empty Bucket=
|
||||
Get biome name where you are standing.=
|
||||
This command can only be executed in-game!=
|
||||
Locked Chest=
|
||||
Locked Chest (owned by @1)=
|
||||
You do not own this chest.=
|
||||
a locked chest=
|
||||
Chest=
|
||||
Quartz Crystal=Cristal de Quartz
|
||||
Baobab Roasted Fruit=Fruit de Baobab Rôti
|
||||
Pyrite Ingot=Lingot de Pyrite
|
||||
Pyrite Lump=Morceau de Pyrite
|
||||
Bamboo=Bambou
|
||||
Hunger=
|
||||
Coconut=
|
||||
Coral Wood Fence Gate=
|
||||
Lava Tree Wood Door=
|
||||
Lava Tree Wood Trapdoor=
|
||||
Lava Tree Wood Fence Gate=
|
||||
Bamboo Wood Fence Gate=Portillon en bois de bambou
|
||||
Crystal Wood Fence Gate=
|
||||
Palm Wood Fence Gate=
|
||||
Bamboo Door=Porte en Bambou
|
||||
Bamboo Trapdoor=Trappe en Bambou
|
||||
Bone Pyrit Door=Porte en os de pyrite
|
||||
Willow Door=Porte en Saule
|
||||
Crystal Wood Door=
|
||||
Crystal Wood Trapdoor=
|
||||
Cursed Wood Door=
|
||||
Cursed Wood Trapdoor=
|
||||
Palm Wood Door=
|
||||
Palm Wood Trapdoor=
|
||||
Dry Wood Fence Rail=Rail de clôture en bois sec
|
||||
Dry Wood Mese Post Light=Lampadaire de Mese en bois sec
|
||||
Bamboo Wood Fence Rail=Rail de clôture en bois de bambou
|
||||
Bamboo Wood Mese Post Light=Lampadaire de Mese en bois de bambou
|
||||
Crystal Wood Fence Rail=
|
||||
Crystal Wood Mese Post Light=
|
||||
Palm Wood Fence Rail=
|
||||
Palm Wood Mese Post Light=
|
||||
Coral Wood Fence=
|
||||
Coral Wood Fence Rail=
|
||||
Coral Wood Mese Post Light=
|
||||
Lava Tree Wood Fence=
|
||||
Lava Tree Wood Fence Rail=
|
||||
Lava Tree Wood Mese Post Light=
|
||||
Dry Wood Fence=Clôture en bois sec
|
||||
Bamboo Wood Fence=Clôture en bois de bambou
|
||||
Crystal Wood Fence=
|
||||
Palm Wood Fence=
|
||||
Dry Wood Fence Gate=
|
||||
Coral Desert Stone Stair=
|
||||
Coral Desert Stone Slab=
|
||||
Double Coral Desert Stone Slab=
|
||||
Coral Desert Cobblestone Stair=
|
||||
Coral Desert Cobblestone Slab=
|
||||
Double Coral Desert Cobblestone Slab=
|
||||
Coral Mossy Cobblestone Stair=
|
||||
Coral Mossy Cobblestone Slab=
|
||||
Double Coral Mossy Cobblestone Slab=
|
||||
Cursed Brick Stair=
|
||||
Cursed Brick Slab=
|
||||
Double Cursed Brick Slab=
|
||||
Cursed Brick with Growth Stair=
|
||||
Cursed Brick with Growth Slab=
|
||||
Double Cursed Brick with Growth Slab=
|
||||
Double Coral Bones Block Slab=
|
||||
Double Coral Bones Brick Slab=
|
||||
Double Quartz Block Slab=
|
||||
Double Quartz Chiseled Slab=
|
||||
Double Quartz Pillar Slab=
|
||||
Double Dry Wood Slab=
|
||||
Double Coral Wood Slab=
|
||||
Double Bamboo Wood Slab=
|
||||
Double Bamboo Mosaic Wood Slab=
|
||||
Double Forsaken Desert Brick Slab=
|
||||
Double Forsaken Desert Brick Red Slab=
|
||||
Double Forsaken Desert Chiseled Stone Slab=
|
||||
Double Baobab Wood Slab=
|
||||
Double Sequoia Wood Slab=
|
||||
Double Forsaken Tundra Cobblestone Slab=
|
||||
Double Forsaken Tundra Stone Slab=
|
||||
Double Forsaken Tundra Brick Slab=
|
||||
Double Willow Wood Slab=
|
||||
Double Magma Cobblestone Slab=
|
||||
Double Volcanic Rock Slab=
|
||||
Double Volcanic Rock with Magma Slab=
|
||||
Double Coral Depp Ocean Sandstone Block Slab=
|
||||
Double Coral Depp Ocean Sandstone Brick Slab=
|
||||
Double Coral White Sandstone Slab=
|
||||
Double Coral White Sandstone Pillar Slab=
|
||||
Double Coral White Sandstone Brick Slab=
|
||||
Double Coral Desert Stone Block Slab=
|
||||
Double Coral Desert Stone Brick Slab=
|
||||
Double Coral Sandstone Slab=
|
||||
Double Coral Sandstone Brick Slab=
|
||||
Double Coral Sandstone Chiseled Slab=
|
||||
Double Coral Sandstone Carved Slab=
|
||||
Double Cursed Lands Deep Ocean Sandstone Block Slab=
|
||||
Double Cursed Lands Deep Ocean Sandstone Brick Slab=
|
||||
Double Crystal Forest Deep Ocean Sandstone Block Slab=
|
||||
Double Crystal Forest Deep Ocean Sandstone Brick Slab=
|
||||
Double Crystal Cobblestone Slab=
|
||||
Double Crystal Mossy Cobblestone Slab=
|
||||
Double Crystal Stone Brick Slab=
|
||||
Double Crystal Wood Slab=
|
||||
Double Mese Wood Slab=
|
||||
Double=
|
||||
A bucket can be used to collect and release liquids. This one is filled with mineral water.=
|
||||
Place it to empty the bucket and create a mineral water source.=
|
||||
Places a mineral water source=
|
||||
Bucket=
|
||||
Water=
|
||||
Coral Cobblestone Wall=Mur de pavés coraliens
|
||||
Coral Mossy Cobblestone Wall=Mur de pavés coraliens moussus
|
||||
Cursed Brick Wall=Mur de briques maudites
|
||||
Cursed Brick with Growth Wall=
|
||||
Forsaken Tundra Cobblestone Wall=Mur de pavés de toundra abandonnée
|
||||
Forsaken Tundra Stone Wall=Mur de pierre de toundra abandonnée
|
||||
Forsaken Tundra Brick Wall=Mur de briques de toundra abandonnée
|
||||
Magma Cobblestone Wall=Mur de pavé magmatique
|
||||
Volcanic Rock Wall=Mur de roches volcaniques
|
||||
Volcanic Rock with Magma Wall=Mur de roches volcaniques avec du magma
|
||||
Lava Bucket=
|
||||
Mineral=
|
||||
Coal Ore=
|
||||
Pyrite Ore=Minerai de pyrite
|
||||
Ceramic Sherds. Use archeological pickaxe to have a chance of getting various different sherds.=
|
||||
Ceramic Sherds=
|
||||
Pyrite Block=Bloc de pyrite
|
||||
Forged Pyrite Block=Bloc de pyrite forgé
|
||||
Pyrite Brick=Brique de pyrite
|
||||
Pyrite Slab Brick=Dalle de brique de pyrite
|
||||
Pyrite Spiral=Spirale de pyrite
|
||||
Pyrite Pillar Bottom=Pied de pilier en pyrite
|
||||
Pyrite Pillar Middle=Colonne de pilier en pyrite
|
||||
Pyrite Pillar Top=Tête de pilier en pyrite
|
||||
Pyrite Pillar Small=Petit pilier en pyrite
|
||||
Polished Pyrite Block=Bloc de pyrite poli
|
||||
Quartz Ore=Minerai de quartz
|
||||
Coral Desert Stone=Pierre de désert coralien
|
||||
Crystal Stone=
|
||||
Coral Sandstone=
|
||||
Coral Sandstone Brick=
|
||||
Coral Sandstone Chiseled Block=
|
||||
Coral Sandstone Carved Block=
|
||||
Coral White Sandstone=
|
||||
Coral White Sandstone Brick=
|
||||
Coral White Sandstone Pillar=
|
||||
Coral Desert Stone Block=
|
||||
Coral Desert Stone Brick=
|
||||
Coral Bones=Os coraliens
|
||||
Coral Bones Block=
|
||||
Coral Bones Brick=
|
||||
Crystal Cobblestone=
|
||||
Crystal Mossy Cobblestone=
|
||||
Crystal Stone Brick=
|
||||
Coral Desert Cobblestone=Pavé de désert coralien
|
||||
Coral Mossy Cobblestone=Pavé de mousse coralienne
|
||||
Coral Desert Stone with Moss=Pierre de désert coralien avec de la mousse
|
||||
Coral Deep Ocean Sandstone Block=
|
||||
Coral Deep Ocean Sandstone Brick=
|
||||
Cursed Lands Deep Ocean Sandstone Block=
|
||||
Cursed Lands Deep Ocean Sandstone Brick=
|
||||
Crystal Forest Deep Ocean Sandstone Block=
|
||||
Crystal Forest Deep Ocean Sandstone Brick=
|
||||
Forsaken Desert Stone=Pierre de désert abandonné
|
||||
Forsaken Desert Cobblestone Red=Pavé rouge de désert abandonné
|
||||
Forsaken Desert Cobblestone=Pavé de désert abandonné
|
||||
Volcanic Rock=Roche volcanique
|
||||
Volcanic Rock with Magma=Roche volcanique avec du magma
|
||||
Cursed Stone=Pierre maudite
|
||||
Cursed Stone Carved=
|
||||
Cursed Brick=Brique maudite
|
||||
Cursed Brick with Growth=
|
||||
Cursed Brick Mixed=
|
||||
Cursed Brick Carved=
|
||||
Volcanic Sulfur Stone=Pierre volcanique sulfurée
|
||||
Sulfur Stone=Pierre de soufre
|
||||
Forsaken Tundra Cobblestone=Pavé de toundra abandonnée
|
||||
Forsaken Tundra Stone=Pierre de toundra abandonnée
|
||||
Mold Cobble=Galet de moule
|
||||
Forsaken Tundra Brick=Brique de toundra abandonnée
|
||||
Forsaken Tundra Rocks=Roche de toundra abandonnée
|
||||
Blue Crying Obsidian=Obsidienne pleureuse bleue
|
||||
Blue Weeping Obsidian=Obsidienne larmoyante bleue
|
||||
Weeping Obsidian=Obsidienne larmoyante
|
||||
Mold Stone=Pierre de moule
|
||||
Soul Sandstone=Grès des âmes
|
||||
Soul Sandstone Veined=Grès des âmes veiné
|
||||
Purple Crystal Block=Bloc de cristal pourpre
|
||||
Orange Crystal Block=Bloc de cristal orange
|
||||
Cyan Crystal Block=
|
||||
Quartz Block=Bloc de quartz
|
||||
Chiseled Quartz=Quartz ciselé
|
||||
Quartz Pillar=Pilier de quartz
|
||||
Forsaken Desert Brick=Brique de désert abandonné
|
||||
Forsaken Desert Brick Red=Brique rouge de désert abandonné
|
||||
Forsaken Desert Engraved Stone=Pierre gravée de désert abandonné
|
||||
Crystal Sandstone=
|
||||
Crystal Sandstone Brick=
|
||||
Crystal Sandstone Chiseled=
|
||||
Cursed Sandstone Block=
|
||||
Cursed Sandstone Brick=
|
||||
Coral Dirt=Terre coralienne
|
||||
Coral Deep Ocean Mud=
|
||||
Cursed Dirt=Terre maudite
|
||||
Crystal Dirt=Terre de cristal
|
||||
Forsaken Tundra Dirt=Terre de toundra abandonnée
|
||||
Forsaken Tundra Dirt with Grass=Terre de toundra abandonnée avec de l'herbe
|
||||
Dirt with Coral Grass=Terre avec de l'herbe coralienne
|
||||
Dirt with Cursed Grass=Terre avec de l'herbe maudite
|
||||
Dirt with Crystal Grass=Terre avec de l'herbe de cristal
|
||||
Dry Ocean Dirt=Terre de l'océan sec
|
||||
Gravel=
|
||||
Permanent Fire=
|
||||
Dirt=Terre
|
||||
Dry Dirt=
|
||||
Dirt with Dry Grass=
|
||||
Dirt with Grass=Terre avec de l'herbe
|
||||
Crystal Cave Dirt=Terre de caverne de cristal
|
||||
Crystal Cave Dirt with Moss=Terre de caverne de cristal avec de l'herbe
|
||||
Moss Block=Bloc de mousse
|
||||
Crystal Moss Block=Bloc de mousse de cristal
|
||||
Coral Sand=Sable coralien
|
||||
Coral White Sand=Sable coralien blanc
|
||||
Cursed Sand=Sable maudit
|
||||
Crystal Sand=Sable de cristal
|
||||
Crystal Forest Deep Ocean Sand with Crack=
|
||||
Forsaken Tundra Beach Sand=Sable de plage de toundra abandonnée
|
||||
Forsaken Tundra Beach Sand with Shells=Sable de plage de toundra abandonnée avec des coquillages
|
||||
Forsaken Desert Sand=Sable de désert abandonné
|
||||
Coral Forest Deep Ocean Sand=
|
||||
Cursed Lands Deep Ocean Sand=
|
||||
Cursed Lands Deep Ocean Sand with Crack=
|
||||
Crystal Forest Deep Ocean Sand=
|
||||
Mineral Sand=
|
||||
Frosted Snow Block=Bloc de neige givré
|
||||
Frosted Ice=Glace givrée
|
||||
Frosted Ice Translucent=Glace givrée transparente
|
||||
Frosted Cave Ice=Glace de caverne givrée
|
||||
Bone=Os
|
||||
Ancient Emerald Ice=Glace d'émeraude ancienne
|
||||
Dense Emerald Ice=Glace d'émeraude dense
|
||||
Emerald Ice=Glace d'émeraude
|
||||
Cursed Mud=Boue maudite
|
||||
Cobweb=Toile d'araignée
|
||||
Cave Flower=Fleur des cavernes
|
||||
Cave Flower with Particles=Fleur des cavernes avec particules
|
||||
Lotus=
|
||||
Flower=
|
||||
Animated=
|
||||
Leaf=
|
||||
Dry=
|
||||
Forsaken Fire=Feu abandonné
|
||||
Coral Tree Trunk=Tronc d'arbre coralien
|
||||
Coral Wood Planks=
|
||||
Coral Tree Bioluminescent=Arbre coralien luminescent
|
||||
Cursed Dream Stone=Pierre de rêve maudite
|
||||
Dry Tree Trunk=Tronc d'arbre sec
|
||||
Baobab Tree Trunk=Tronc de Baobab
|
||||
Sequoia Tree Trunk=Tronc de Séquoia
|
||||
Willow Tree Trunk=Tronc de Saule
|
||||
Willow Wood Planks=Planches en bois de saule
|
||||
Dry Wood Planks=Planches en bois sec
|
||||
Hollow Tree Trunk=Tronc d'arbre creux
|
||||
Crystal Tree Trunk=Tronc d'arbre de cristal
|
||||
Crystal Wood Planks=
|
||||
Mese Tree Trunk=Tronc d'arbre à Mese
|
||||
Trunk=
|
||||
Mese Tree Leaves=
|
||||
Baobab Tree Leaves=Feuilles de Baobab
|
||||
Sequoia Tree Leaves=Feuilles de Séquoia
|
||||
Baobab Fruit=Fruit du Baobab
|
||||
Baobab Fruit Marker=Marqueur du fruit du Baobab
|
||||
Baobab Sapling=Plant de Baobab
|
||||
Willow Tree Leaves=Feuilles de saule
|
||||
Coral Tree Leaves=Feuille d'arbre coralien
|
||||
Dry Tree Branches=Branches d'arbre sec
|
||||
Crystal Tree Leaves=Feuille d'arbre de cristal
|
||||
Coral Tree Sapling=Plant d'arbre coralien
|
||||
Coral Tree Bioluminescent Sapling=Plant d'arbre coralien luminescent
|
||||
Dry Tree Sapling=Plant d'arbre sec
|
||||
Cursed Dream Tree Sapling=Plant d'arbre des rêves maudit
|
||||
Willow Tree Sapling=
|
||||
Sequoia Tree Sapling=Plant de Séquoia
|
||||
Crystal Tree Sapling=Plant d'arbre de cristal
|
||||
Crystal Tree Large Sapling=Grand plant d'arbre de cristal
|
||||
Crystal Bush Stem=Tige de buisson de cristal
|
||||
Crystal Bush Leaves=Feuilles de buisson de cristal
|
||||
Crystal Bush Sapling=Plant de buisson de cristal
|
||||
Cursed Bush Stem=Tige de buisson maudit
|
||||
Cursed Bush Leaves=Feuilles de buisson maudit
|
||||
Cursed Bush Sapling=Plant de buisson maudit
|
||||
Flowers=
|
||||
Magenta Flowers=
|
||||
Clover=
|
||||
Luminous Mushroom=
|
||||
Glossy Mushroom=
|
||||
Staghorn Coral (Stage 1)=
|
||||
Staghorn Coral (Stage 2)=
|
||||
Staghorn Coral (Stage 3)=
|
||||
Clover with flowers=
|
||||
Aurora Violet=
|
||||
Aurora Sky Blue=
|
||||
Aurora Cyan=
|
||||
Aurora Mint=
|
||||
Aurora Lavender=
|
||||
Aurora Lime=
|
||||
Aurora Coral=
|
||||
Aurora Magenta=
|
||||
Glass Crystal Cluster=
|
||||
Glass Megalith Foundation=
|
||||
Glass Megalith Lower Shaft=
|
||||
Glass Megalith Mid Nexus=
|
||||
Glass Megalith Upper Spire=
|
||||
Glass Megalith Summit Needle=
|
||||
Coral Burdock=Bardane coralienne
|
||||
Coral Bush=Buisson coralien
|
||||
Coral Shrub=Arbuste coralien
|
||||
Orange Coral Grass=Herbe coralienne orange
|
||||
Globulagus=Eucalyptus Globulus
|
||||
Tall Coral Grass=Grande Herbe coralienne
|
||||
Purple Crystal=Cristal pourpre
|
||||
Orange Crystal=Cristal orange
|
||||
Cyan Crystal=Cristal cyan
|
||||
Coral Plant Bioluminescent=Plante coralienne bioluminescente
|
||||
Blooming Cooksonia=Cooksonia en fleur
|
||||
Creeping Moss Spores=Spores de mousse grimpante
|
||||
Frosted Icicle=Glaçon givré
|
||||
Frosted Icicle Floor=Sol de glaçon givré
|
||||
Coral Grass=Herbe coralienne
|
||||
Baobab Savanna Grass=
|
||||
Red Castor=Ricin rouge
|
||||
Crystal Mushrooms=Champigons de cristal
|
||||
Twisted Crystal Grass=Herbe de cristal tordue
|
||||
Twisted Crystal Spire=
|
||||
Crystal Grass=Herbe de cristal
|
||||
Marsh Grass=Herbe des marais
|
||||
Forsaken Plant=Plante abandonnée
|
||||
Blue Cactus=Cactus bleu
|
||||
Cave Barrel Cactus=Cactus baril des cavernes
|
||||
Venus Trap Plant=Dionée attrape-mouche
|
||||
Illumi Root=Illumi Racine
|
||||
Crystal Waterlily=Nénuphar de cristal
|
||||
Orange Cactus=Cactus orange
|
||||
Agave Leaf=Feuille d'agave
|
||||
Mese Fruit=
|
||||
Mese Tree Sapling=
|
||||
Egg plant=Aubergine
|
||||
Ivis Moss=Mousse d'Ivis
|
||||
Ngrass=N-Herbe
|
||||
Bamboo Sprout=Pousse de bambou
|
||||
Blood Spoore Plant=Plante spore sanglante
|
||||
Blood Spoore Plant Small=Petite plante spore sanglante
|
||||
Termite Block=Bloc de termitière
|
||||
Bamboo Block=Bloc de bambou
|
||||
Bamboo Planks=Planches de bambou
|
||||
Bamboo Mosaic=Mosaïque de bambou
|
||||
Baobab Wood Planks=Planches en bois de Baobab
|
||||
Sequoia Wood Planks=Planches en bois de Séquoia
|
||||
Mese Wood Planks=
|
||||
Coral Corals=Coraux coraliens
|
||||
Coral Frosted=Givré coralien
|
||||
Coral Starfish=Étoile de mer coralienne
|
||||
Spine Kelp=Varch épineux
|
||||
Coral Bulbs=
|
||||
Coral Tree=
|
||||
Coral Palm=
|
||||
Coral Anemone=
|
||||
Coral Darkilluma=
|
||||
Coral Demon=
|
||||
Crystal Forest Deep Ocean Coral Plant Cyan=
|
||||
Crystal Forest Deep Ocean Coral Plant Orange=
|
||||
Crystal Forest Deep Ocean Coral Plant Pink=
|
||||
Crystal Coral Dark=Cristal coralien sombre
|
||||
Crystal Coral Light=Cristal coralien clair
|
||||
Coral Forest Deep Ocean Coral Pink=
|
||||
Coral Forest Deep Ocean Coral Cyan=
|
||||
Coral Forest Deep Ocean Coral Green=
|
||||
Coral Forest Deep Ocean Coral Red=
|
||||
Coral Alcyonacea=
|
||||
Coral Ostracod=
|
||||
Coral Octocurse=
|
||||
Crystal Forest Deep Ocean Coral Green=
|
||||
Crystal Forest Deep Ocean Coral Orange=
|
||||
Crystal Forest Deep Ocean Coral Cyan=
|
||||
Coral Skeleton=
|
||||
Mineral Water Weed=
|
||||
Skull with Candle=Squelette avec bougie
|
||||
Forsythia Bush=Buisson de Forsythia
|
||||
Rose Bush=
|
||||
Glowing Pillar=Pilier rayonnant
|
||||
Blue Vine Lantern=Lanterne de vigne bleue
|
||||
Amaranita Lantern=Lanterne Amarante
|
||||
Lumecorn=Blé luminescent
|
||||
Everness Glass=
|
||||
Tinted Glass Red=Verre teinté rouge
|
||||
Pyrite Lantern=Lanterne en pyrite
|
||||
Pyrite Glass=Verre de pyrite
|
||||
Lumabus Vine Lantern=Lanterne de vigne luminescente
|
||||
Eye Vine Lantern=Lanterne de vigne oculaire
|
||||
Cursed Pumpkin Lantern=Lanterne citrouille maudite
|
||||
Floating Crystal=Cristal flottant
|
||||
Coral Forest Deep Ocean Lantern=
|
||||
Mineral Water Source=
|
||||
Flowing Mineral Water=
|
||||
Lava Source=
|
||||
Flowing Lava=
|
||||
Geyser=
|
||||
Active=
|
||||
Ceramic=
|
||||
Pot=
|
||||
If destroyed by archelogical pick axe, it will drop ceramic sherds instead of ceramic pot item.=
|
||||
owned by=
|
||||
Sherd=
|
||||
Sand=
|
||||
Castle=
|
||||
Wall=
|
||||
Purple=
|
||||
Green=
|
||||
Red=
|
||||
Blue=
|
||||
Yellow=
|
||||
Magenta=
|
||||
Cyan=
|
||||
White=
|
||||
Cursed Skeleton Hands=
|
||||
Cursed Rib Cage=
|
||||
Cursed Skull on Stick=
|
||||
Coral Dirt Soil=
|
||||
Dirt Soil=
|
||||
Crystal Dirt Soil=
|
||||
Crystal Cave Dirt Soil=
|
||||
Cursed Dirt Soil=
|
||||
Dry Dirt Soil=
|
||||
Coral Dirt Wet Soil=
|
||||
Crystal Dirt Wet Soil=
|
||||
Crystal Cave Dirt Wet Soil=
|
||||
Cursed Dirt Wet Soil=
|
||||
Mineral Cave Stone=
|
||||
Mineral Cave Cobblestone=
|
||||
Mineral Lava Stone with lava=
|
||||
Mineral Lava Stone without lava=
|
||||
Mineral Lava Stone with moss=
|
||||
Volcanic Spike=
|
||||
Mineral Lava Stone Spike=
|
||||
Lava Tree Trunk=
|
||||
Lava Tree Trunk with Lava Veins=
|
||||
Lava Tree Wood Planks=
|
||||
Lava=
|
||||
Mineral Cave Moss Grass=
|
||||
Sapling=
|
||||
Leaves=
|
||||
Pyrite Glass Pane=Panneau de verre de pyrite
|
||||
Cursed Steel Bars=
|
||||
Cursed Steel Bar Door=
|
||||
Steel Bar Trapdoor=
|
||||
Dry Tree Trunk Stair=
|
||||
Dry Tree Trunk Slab=
|
||||
Forsaken Desert Engraved Stone Stair=
|
||||
Forsaken Desert Engraved Stone Slab=
|
||||
Forsaken Desert Cobblestone Stair=
|
||||
Forsaken Desert Cobblestone Slab=
|
||||
Forsaken Desert Cobblestone Red Stair=
|
||||
Forsaken Desert Cobblestone Red Slab=
|
||||
Everness Glass Stair=
|
||||
Everness Glass Slab=
|
||||
Mineral Cave Stone Stair=
|
||||
Mineral Cave Stone Slab=
|
||||
Mineral Cave Cobblestone Stair=
|
||||
Mineral Cave Cobblestone Slab=
|
||||
Mineral Lava Stone with lava Stair=
|
||||
Mineral Lava Stone with lava Slab=
|
||||
Mineral Lava Stone without lava Stair=
|
||||
Mineral Lava Stone without lava Slab=
|
||||
Coral Bones Block Stair=
|
||||
Coral Bones Block Slab=
|
||||
Coral Bones Brick Stair=
|
||||
Coral Bones Brick Slab=
|
||||
Quartz Block Stair=Escalier en bloc de quartz
|
||||
Quartz Block Slab=Dalle en bloc de quartz
|
||||
Quartz Chiseled Stair=Escalier en quartz ciselé
|
||||
Quartz Chiseled Slab=Dalle en quartz ciselé
|
||||
Quartz Pillar Stair=Escalier en pilier de quartz
|
||||
Quartz Pillar Slab=Dalle en pilier de quarte
|
||||
Dry Wood Stair=Escalier en bois sec
|
||||
Dry Wood Slab=Dalle en bois sec
|
||||
Coral Wood Stair=
|
||||
Coral Wood Slab=
|
||||
Bamboo Wood Stair=Escalier en bois de bambou
|
||||
Bamboo Wood Slab=Dalle en bois de bambou
|
||||
Bamboo Mosaic Wood Stair=Escalier en mosaïque de bambou
|
||||
Bamboo Mosaic Wood Slab=Dalle en mosaïque de bambou
|
||||
Forsaken Desert Brick Stair=Escalier en brique de désert abandonné
|
||||
Forsaken Desert Brick Slab=Dalle en brique de désert abandonné
|
||||
Forsaken Desert Brick Red Stair=Escalier en brique rouge de désert abandonné
|
||||
Forsaken Desert Brick Red Slab=Dalle en brique rouge de désert abandonné
|
||||
Forsaken Desert Chiseled Stone Stair=Escalier en pierre ciselée de désert abandonné
|
||||
Forsaken Desert Chiseled Stone Slab=Dalle en pierre ciselée de désert abandonné
|
||||
Baobab Wood Stair=Escalier en bois de baobab
|
||||
Baobab Wood Slab=Dalle en bois de baobab
|
||||
Sequoia Wood Stair=Escalier en bois de Séquoia
|
||||
Sequoia Wood Slab=Dalle en bois de Séquoia
|
||||
Forsaken Tundra Cobblestone Stair=Escalier en pavé de toundra abandonnée
|
||||
Forsaken Tundra Cobblestone Slab=Dalle en pavé de toundra abandonnée
|
||||
Forsaken Tundra Stone Stair=Escalier en pierre de toundra abandonnée
|
||||
Forsaken Tundra Stone Slab=Dalle en pierre de toundra abandonnée
|
||||
Forsaken Tundra Brick Stair=Escalier en brique de toundra abandonnée
|
||||
Forsaken Tundra Brick Slab=Dalle en brique de toundra abandonnée
|
||||
Willow Wood Stair=Escalier en bois de saule
|
||||
Willow Wood Slab=Dalle en bois de saule
|
||||
Magma Cobblestone Stair=Escalier en pavé magmatique
|
||||
Magma Cobblestone Slab=Dalle en pavé magmatique
|
||||
Volcanic Rock Stair=Escalier en roche volcanique
|
||||
Volcanic Rock Slab=Dalle en roche volcanique
|
||||
Volcanic Rock with Magma Stair=Escalier en roche volcanique avec du magma
|
||||
Volcanic Rock with Magma Slab=Dalle en roche volcanique avec du magma
|
||||
Coral Depp Ocean Sandstone Block Stair=
|
||||
Coral Depp Ocean Sandstone Block Slab=
|
||||
Coral Depp Ocean Sandstone Brick Stair=
|
||||
Coral Depp Ocean Sandstone Brick Slab=
|
||||
Coral White Sandstone Stair=
|
||||
Coral White Sandstone Slab=
|
||||
Coral White Sandstone Pillar Stair=
|
||||
Coral White Sandstone Pillar Slab=
|
||||
Coral White Sandstone Brick Stair=
|
||||
Coral White Sandstone Brick Slab=
|
||||
Coral Desert Stone Block Stair=
|
||||
Coral Desert Stone Block Slab=
|
||||
Coral Desert Stone Brick Stair=
|
||||
Coral Desert Stone Brick Slab=
|
||||
Coral Sandstone Stair=
|
||||
Coral Sandstone Slab=
|
||||
Coral Sandstone Brick Stair=
|
||||
Coral Sandstone Brick Slab=
|
||||
Coral Sandstone Chiseled Stair=
|
||||
Coral Sandstone Chiseled Slab=
|
||||
Coral Sandstone Carved Stair=
|
||||
Coral Sandstone Carved Slab=
|
||||
Cursed Lands Deep Ocean Sandstone Block Stair=
|
||||
Cursed Lands Deep Ocean Sandstone Block Slab=
|
||||
Cursed Lands Deep Ocean Sandstone Brick Stair=
|
||||
Cursed Lands Deep Ocean Sandstone Brick Slab=
|
||||
Crystal Forest Deep Ocean Sandstone Block Stair=
|
||||
Crystal Forest Deep Ocean Sandstone Block Slab=
|
||||
Crystal Forest Deep Ocean Sandstone Brick Stair=
|
||||
Crystal Forest Deep Ocean Sandstone Brick Slab=
|
||||
Crystal Cobblestone Stair=
|
||||
Crystal Cobblestone Slab=
|
||||
Crystal Mossy Cobblestone Stair=
|
||||
Crystal Mossy Cobblestone Slab=
|
||||
Crystal Stone Brick Stair=
|
||||
Crystal Stone Brick Slab=
|
||||
Crystal Wood Stair=
|
||||
Crystal Wood Slab=
|
||||
Mese Wood Stair=
|
||||
Mese Wood Slab=
|
||||
Stair=
|
||||
Slab=
|
||||
Stone=
|
||||
Cobblestone=
|
||||
Block=
|
||||
Brick=
|
||||
Sandstone=
|
||||
with Growth=
|
||||
with Flower Growth=
|
||||
Palm=
|
||||
Wood=
|
||||
Planks=
|
||||
Tree=
|
||||
Vine Shears=Cisailles à vigne
|
||||
Silk Shovel=
|
||||
Shell of Underwater Breating=
|
||||
Hammer=
|
||||
Sharp=
|
||||
Torch=
|
||||
Cave Vine=Vigne des cavernes
|
||||
Whispering Gourd Vine=Gourde de vigne chuchotante
|
||||
Bulb Vine=Vigne bulbeuse
|
||||
Willow Vine=Vigne de saule
|
||||
Eye Vine=Vigne oculaire
|
||||
Lumabus Vine=Vigne luminescente
|
||||
Ivis Vine=Vigne d'ivis
|
||||
Flowered Vine=Vigne florissante
|
||||
Reeds Vine=Vigne de roseaux
|
||||
Tenanea Flowers Vine=
|
||||
Twisted Vine=Vigne tordue
|
||||
Golden Vine=Vigne d'or
|
||||
Dense Vine=Vigne dense
|
||||
Wall Cave Vine Green=
|
||||
Wall Cave Vine Blue=
|
||||
Wall Cave Vine Cyan=
|
||||
Wall Cave Vine Violet=
|
||||
Coral Bones Block Wall=
|
||||
Coral Bones Brick Wall=
|
||||
Crystal Cobblestone Wall=
|
||||
Crystal Mossy Cobblestone Wall=
|
||||
Cursed Sandstone Brick Wall=
|
||||
Cursed Sandstone Block Wall=
|
||||
Cursed Stone Carved Wall=
|
||||
Forsaken Desert Cobblestone Wall=
|
||||
Forsaken Desert Cobblestone Red Wall=
|
||||
Forsaken Desert Brick Wall=
|
||||
Forsaken Desert Brick Red Wall=
|
||||
Forsaken Desert Engraved Stone Wall=
|
||||
Mineral Cave Stone Wall=
|
||||
Mineral Cave Cobblestone Wall=
|
||||
Mineral Lava Stone with lava Wall=
|
||||
Mineral Lava Stone without lava Wall=
|
||||
Forsaken Desert Chiseled Stone=Pierre ciselée de désert abandonné
|
||||
|
||||
|
||||
##### not used anymore #####
|
||||
|
||||
Cave Vine with Mese Leaves=Vigne des cavernes avec des feuille de Mese
|
||||
@@ -0,0 +1,621 @@
|
||||
# textdomain: everness
|
||||
@1 will intersect protection on growth.=
|
||||
Compost chance=
|
||||
Everness Encyclopedia=
|
||||
You need "everness_encyclopedia" privilige to access this button.=
|
||||
Empty Bucket=
|
||||
Get biome name where you are standing.=
|
||||
This command can only be executed in-game!=
|
||||
Locked Chest=
|
||||
Locked Chest (owned by @1)=
|
||||
You do not own this chest.=
|
||||
a locked chest=
|
||||
Chest=
|
||||
Quartz Crystal=Kvarckristály
|
||||
Baobab Roasted Fruit=Sült baobabgyümölcs
|
||||
Pyrite Ingot=Piritrúd
|
||||
Pyrite Lump=Piritrög
|
||||
Bamboo=Bambusz
|
||||
Hunger=
|
||||
Coconut=
|
||||
Coral Wood Fence Gate=
|
||||
Lava Tree Wood Door=
|
||||
Lava Tree Wood Trapdoor=
|
||||
Lava Tree Wood Fence Gate=
|
||||
Bamboo Wood Fence Gate=Bambusz kerítésajtó
|
||||
Crystal Wood Fence Gate=
|
||||
Palm Wood Fence Gate=
|
||||
Bamboo Door=Bambuszajtó
|
||||
Bamboo Trapdoor=Bambusz csapóajtó
|
||||
Bone Pyrit Door=Csont-pirit ajtó
|
||||
Willow Door=Fűzfaajtó
|
||||
Crystal Wood Door=
|
||||
Crystal Wood Trapdoor=
|
||||
Cursed Wood Door=
|
||||
Cursed Wood Trapdoor=
|
||||
Palm Wood Door=
|
||||
Palm Wood Trapdoor=
|
||||
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 Rail=Bambusz fakerítés-rács
|
||||
Bamboo Wood Mese Post Light=Bambusz fa-mese-lámpa
|
||||
Crystal Wood Fence Rail=
|
||||
Crystal Wood Mese Post Light=
|
||||
Palm Wood Fence Rail=
|
||||
Palm Wood Mese Post Light=
|
||||
Coral Wood Fence=
|
||||
Coral Wood Fence Rail=
|
||||
Coral Wood Mese Post Light=
|
||||
Lava Tree Wood Fence=
|
||||
Lava Tree Wood Fence Rail=
|
||||
Lava Tree Wood Mese Post Light=
|
||||
Dry Wood Fence=Elszáradt fakerítés
|
||||
Bamboo Wood Fence=Bambusz fakerítés
|
||||
Crystal Wood Fence=
|
||||
Palm Wood Fence=
|
||||
Dry Wood Fence Gate=
|
||||
Coral Desert Stone Stair=
|
||||
Coral Desert Stone Slab=
|
||||
Double Coral Desert Stone Slab=
|
||||
Coral Desert Cobblestone Stair=
|
||||
Coral Desert Cobblestone Slab=
|
||||
Double Coral Desert Cobblestone Slab=
|
||||
Coral Mossy Cobblestone Stair=
|
||||
Coral Mossy Cobblestone Slab=
|
||||
Double Coral Mossy Cobblestone Slab=
|
||||
Cursed Brick Stair=
|
||||
Cursed Brick Slab=
|
||||
Double Cursed Brick Slab=
|
||||
Cursed Brick with Growth Stair=
|
||||
Cursed Brick with Growth Slab=
|
||||
Double Cursed Brick with Growth Slab=
|
||||
Double Coral Bones Block Slab=
|
||||
Double Coral Bones Brick Slab=
|
||||
Double Quartz Block Slab=
|
||||
Double Quartz Chiseled Slab=
|
||||
Double Quartz Pillar Slab=
|
||||
Double Dry Wood Slab=
|
||||
Double Coral Wood Slab=
|
||||
Double Bamboo Wood Slab=
|
||||
Double Bamboo Mosaic Wood Slab=
|
||||
Double Forsaken Desert Brick Slab=
|
||||
Double Forsaken Desert Brick Red Slab=
|
||||
Double Forsaken Desert Chiseled Stone Slab=
|
||||
Double Baobab Wood Slab=
|
||||
Double Sequoia Wood Slab=
|
||||
Double Forsaken Tundra Cobblestone Slab=
|
||||
Double Forsaken Tundra Stone Slab=
|
||||
Double Forsaken Tundra Brick Slab=
|
||||
Double Willow Wood Slab=
|
||||
Double Magma Cobblestone Slab=
|
||||
Double Volcanic Rock Slab=
|
||||
Double Volcanic Rock with Magma Slab=
|
||||
Double Coral Depp Ocean Sandstone Block Slab=
|
||||
Double Coral Depp Ocean Sandstone Brick Slab=
|
||||
Double Coral White Sandstone Slab=
|
||||
Double Coral White Sandstone Pillar Slab=
|
||||
Double Coral White Sandstone Brick Slab=
|
||||
Double Coral Desert Stone Block Slab=
|
||||
Double Coral Desert Stone Brick Slab=
|
||||
Double Coral Sandstone Slab=
|
||||
Double Coral Sandstone Brick Slab=
|
||||
Double Coral Sandstone Chiseled Slab=
|
||||
Double Coral Sandstone Carved Slab=
|
||||
Double Cursed Lands Deep Ocean Sandstone Block Slab=
|
||||
Double Cursed Lands Deep Ocean Sandstone Brick Slab=
|
||||
Double Crystal Forest Deep Ocean Sandstone Block Slab=
|
||||
Double Crystal Forest Deep Ocean Sandstone Brick Slab=
|
||||
Double Crystal Cobblestone Slab=
|
||||
Double Crystal Mossy Cobblestone Slab=
|
||||
Double Crystal Stone Brick Slab=
|
||||
Double Crystal Wood Slab=
|
||||
Double Mese Wood Slab=
|
||||
Double=
|
||||
A bucket can be used to collect and release liquids. This one is filled with mineral water.=
|
||||
Place it to empty the bucket and create a mineral water source.=
|
||||
Places a mineral water source=
|
||||
Bucket=
|
||||
Water=
|
||||
Coral Cobblestone Wall=Korall macskakő-fal
|
||||
Coral Mossy Cobblestone Wall=Korall macskakő-fal, mohos
|
||||
Cursed Brick Wall=Elátkozott tégla-fal
|
||||
Cursed Brick with Growth Wall=
|
||||
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
|
||||
Lava Bucket=
|
||||
Mineral=
|
||||
Coal Ore=
|
||||
Pyrite Ore=Piritérc
|
||||
Ceramic Sherds. Use archeological pickaxe to have a chance of getting various different sherds.=
|
||||
Ceramic Sherds=
|
||||
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ő
|
||||
Crystal Stone=
|
||||
Coral Sandstone=
|
||||
Coral Sandstone Brick=
|
||||
Coral Sandstone Chiseled Block=
|
||||
Coral Sandstone Carved Block=
|
||||
Coral White Sandstone=
|
||||
Coral White Sandstone Brick=
|
||||
Coral White Sandstone Pillar=
|
||||
Coral Desert Stone Block=
|
||||
Coral Desert Stone Brick=
|
||||
Coral Bones=Korallsivatagi csont
|
||||
Coral Bones Block=
|
||||
Coral Bones Brick=
|
||||
Crystal Cobblestone=
|
||||
Crystal Mossy Cobblestone=
|
||||
Crystal Stone Brick=
|
||||
Coral Desert Cobblestone=Korallsivatagi macskakő
|
||||
Coral Mossy Cobblestone=Korallsivatagi macskakő, mohos
|
||||
Coral Desert Stone with Moss=Korallsivatagi kő, mohos
|
||||
Coral Deep Ocean Sandstone Block=
|
||||
Coral Deep Ocean Sandstone Brick=
|
||||
Cursed Lands Deep Ocean Sandstone Block=
|
||||
Cursed Lands Deep Ocean Sandstone Brick=
|
||||
Crystal Forest Deep Ocean Sandstone Block=
|
||||
Crystal Forest Deep Ocean Sandstone Brick=
|
||||
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 Stone Carved=
|
||||
Cursed Brick=Elátkozott tégla
|
||||
Cursed Brick with Growth=
|
||||
Cursed Brick Mixed=
|
||||
Cursed Brick Carved=
|
||||
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
|
||||
Cyan Crystal Block=
|
||||
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 Engraved Stone=Elhagyatott sivatagi kő, vésett
|
||||
Crystal Sandstone=
|
||||
Crystal Sandstone Brick=
|
||||
Crystal Sandstone Chiseled=
|
||||
Cursed Sandstone Block=
|
||||
Cursed Sandstone Brick=
|
||||
Coral Dirt=Korallföld
|
||||
Coral Deep Ocean Mud=
|
||||
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
|
||||
Gravel=
|
||||
Permanent Fire=
|
||||
Dirt=Föld
|
||||
Dry Dirt=
|
||||
Dirt with Dry Grass=
|
||||
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
|
||||
Crystal Forest Deep Ocean Sand with Crack=
|
||||
Forsaken Tundra Beach Sand=Elhagyatott tundraparti homok
|
||||
Forsaken Tundra Beach Sand with Shells=Elhagyatott tundraparti homok, kagylós
|
||||
Forsaken Desert Sand=Elhagyatott sivatagi homok
|
||||
Coral Forest Deep Ocean Sand=
|
||||
Cursed Lands Deep Ocean Sand=
|
||||
Cursed Lands Deep Ocean Sand with Crack=
|
||||
Crystal Forest Deep Ocean Sand=
|
||||
Mineral Sand=
|
||||
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
|
||||
Lotus=
|
||||
Flower=
|
||||
Animated=
|
||||
Leaf=
|
||||
Dry=
|
||||
Forsaken Fire=Elhagyatott tűz
|
||||
Coral Tree Trunk=Korallfa-törzs
|
||||
Coral Wood Planks=
|
||||
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
|
||||
Crystal Wood Planks=
|
||||
Mese Tree Trunk=Mesefa-törzs
|
||||
Trunk=
|
||||
Mese Tree Leaves=
|
||||
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
|
||||
Willow Tree Sapling=
|
||||
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
|
||||
Flowers=
|
||||
Magenta Flowers=
|
||||
Clover=
|
||||
Luminous Mushroom=
|
||||
Glossy Mushroom=
|
||||
Staghorn Coral (Stage 1)=
|
||||
Staghorn Coral (Stage 2)=
|
||||
Staghorn Coral (Stage 3)=
|
||||
Clover with flowers=
|
||||
Aurora Violet=
|
||||
Aurora Sky Blue=
|
||||
Aurora Cyan=
|
||||
Aurora Mint=
|
||||
Aurora Lavender=
|
||||
Aurora Lime=
|
||||
Aurora Coral=
|
||||
Aurora Magenta=
|
||||
Glass Crystal Cluster=
|
||||
Glass Megalith Foundation=
|
||||
Glass Megalith Lower Shaft=
|
||||
Glass Megalith Mid Nexus=
|
||||
Glass Megalith Upper Spire=
|
||||
Glass Megalith Summit Needle=
|
||||
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ű
|
||||
Baobab Savanna Grass=
|
||||
Red Castor=Vörös ricinus
|
||||
Crystal Mushrooms=Kristálygomba
|
||||
Twisted Crystal Grass=Csavarodott kristályfű
|
||||
Twisted Crystal Spire=
|
||||
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
|
||||
Mese Fruit=
|
||||
Mese Tree Sapling=
|
||||
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
|
||||
Mese Wood Planks=
|
||||
Coral Corals=Korall
|
||||
Coral Frosted=Korall, fagyalt
|
||||
Coral Starfish=Korall-csillaghal
|
||||
Spine Kelp=Gerinchínár
|
||||
Coral Bulbs=
|
||||
Coral Tree=
|
||||
Coral Palm=
|
||||
Coral Anemone=
|
||||
Coral Darkilluma=
|
||||
Coral Demon=
|
||||
Crystal Forest Deep Ocean Coral Plant Cyan=
|
||||
Crystal Forest Deep Ocean Coral Plant Orange=
|
||||
Crystal Forest Deep Ocean Coral Plant Pink=
|
||||
Crystal Coral Dark=Kristálykorall, sötét
|
||||
Crystal Coral Light=Kristálykorall, világos
|
||||
Coral Forest Deep Ocean Coral Pink=
|
||||
Coral Forest Deep Ocean Coral Cyan=
|
||||
Coral Forest Deep Ocean Coral Green=
|
||||
Coral Forest Deep Ocean Coral Red=
|
||||
Coral Alcyonacea=
|
||||
Coral Ostracod=
|
||||
Coral Octocurse=
|
||||
Crystal Forest Deep Ocean Coral Green=
|
||||
Crystal Forest Deep Ocean Coral Orange=
|
||||
Crystal Forest Deep Ocean Coral Cyan=
|
||||
Coral Skeleton=
|
||||
Mineral Water Weed=
|
||||
Skull with Candle=Koponya gyertyával
|
||||
Forsythia Bush=Forsythia-bokor
|
||||
Rose Bush=
|
||||
Glowing Pillar=Izzó oszlop
|
||||
Blue Vine Lantern=Kék inda-lámpás
|
||||
Amaranita Lantern=Amaranita-lámpás
|
||||
Lumecorn=Lume-mag
|
||||
Everness Glass=
|
||||
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
|
||||
Coral Forest Deep Ocean Lantern=
|
||||
Mineral Water Source=
|
||||
Flowing Mineral Water=
|
||||
Lava Source=
|
||||
Flowing Lava=
|
||||
Geyser=
|
||||
Active=
|
||||
Ceramic=
|
||||
Pot=
|
||||
If destroyed by archelogical pick axe, it will drop ceramic sherds instead of ceramic pot item.=
|
||||
owned by=
|
||||
Sherd=
|
||||
Sand=
|
||||
Castle=
|
||||
Wall=
|
||||
Purple=
|
||||
Green=
|
||||
Red=
|
||||
Blue=
|
||||
Yellow=
|
||||
Magenta=
|
||||
Cyan=
|
||||
White=
|
||||
Cursed Skeleton Hands=
|
||||
Cursed Rib Cage=
|
||||
Cursed Skull on Stick=
|
||||
Coral Dirt Soil=
|
||||
Dirt Soil=
|
||||
Crystal Dirt Soil=
|
||||
Crystal Cave Dirt Soil=
|
||||
Cursed Dirt Soil=
|
||||
Dry Dirt Soil=
|
||||
Coral Dirt Wet Soil=
|
||||
Crystal Dirt Wet Soil=
|
||||
Crystal Cave Dirt Wet Soil=
|
||||
Cursed Dirt Wet Soil=
|
||||
Mineral Cave Stone=
|
||||
Mineral Cave Cobblestone=
|
||||
Mineral Lava Stone with lava=
|
||||
Mineral Lava Stone without lava=
|
||||
Mineral Lava Stone with moss=
|
||||
Volcanic Spike=
|
||||
Mineral Lava Stone Spike=
|
||||
Lava Tree Trunk=
|
||||
Lava Tree Trunk with Lava Veins=
|
||||
Lava Tree Wood Planks=
|
||||
Lava=
|
||||
Mineral Cave Moss Grass=
|
||||
Sapling=
|
||||
Leaves=
|
||||
Pyrite Glass Pane=Piritüveg-lap
|
||||
Cursed Steel Bars=
|
||||
Cursed Steel Bar Door=
|
||||
Steel Bar Trapdoor=
|
||||
Dry Tree Trunk Stair=
|
||||
Dry Tree Trunk Slab=
|
||||
Forsaken Desert Engraved Stone Stair=
|
||||
Forsaken Desert Engraved Stone Slab=
|
||||
Forsaken Desert Cobblestone Stair=
|
||||
Forsaken Desert Cobblestone Slab=
|
||||
Forsaken Desert Cobblestone Red Stair=
|
||||
Forsaken Desert Cobblestone Red Slab=
|
||||
Everness Glass Stair=
|
||||
Everness Glass Slab=
|
||||
Mineral Cave Stone Stair=
|
||||
Mineral Cave Stone Slab=
|
||||
Mineral Cave Cobblestone Stair=
|
||||
Mineral Cave Cobblestone Slab=
|
||||
Mineral Lava Stone with lava Stair=
|
||||
Mineral Lava Stone with lava Slab=
|
||||
Mineral Lava Stone without lava Stair=
|
||||
Mineral Lava Stone without lava Slab=
|
||||
Coral Bones Block Stair=
|
||||
Coral Bones Block Slab=
|
||||
Coral Bones Brick Stair=
|
||||
Coral Bones Brick Slab=
|
||||
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
|
||||
Coral Wood Stair=
|
||||
Coral Wood Slab=
|
||||
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
|
||||
Coral Depp Ocean Sandstone Block Stair=
|
||||
Coral Depp Ocean Sandstone Block Slab=
|
||||
Coral Depp Ocean Sandstone Brick Stair=
|
||||
Coral Depp Ocean Sandstone Brick Slab=
|
||||
Coral White Sandstone Stair=
|
||||
Coral White Sandstone Slab=
|
||||
Coral White Sandstone Pillar Stair=
|
||||
Coral White Sandstone Pillar Slab=
|
||||
Coral White Sandstone Brick Stair=
|
||||
Coral White Sandstone Brick Slab=
|
||||
Coral Desert Stone Block Stair=
|
||||
Coral Desert Stone Block Slab=
|
||||
Coral Desert Stone Brick Stair=
|
||||
Coral Desert Stone Brick Slab=
|
||||
Coral Sandstone Stair=
|
||||
Coral Sandstone Slab=
|
||||
Coral Sandstone Brick Stair=
|
||||
Coral Sandstone Brick Slab=
|
||||
Coral Sandstone Chiseled Stair=
|
||||
Coral Sandstone Chiseled Slab=
|
||||
Coral Sandstone Carved Stair=
|
||||
Coral Sandstone Carved Slab=
|
||||
Cursed Lands Deep Ocean Sandstone Block Stair=
|
||||
Cursed Lands Deep Ocean Sandstone Block Slab=
|
||||
Cursed Lands Deep Ocean Sandstone Brick Stair=
|
||||
Cursed Lands Deep Ocean Sandstone Brick Slab=
|
||||
Crystal Forest Deep Ocean Sandstone Block Stair=
|
||||
Crystal Forest Deep Ocean Sandstone Block Slab=
|
||||
Crystal Forest Deep Ocean Sandstone Brick Stair=
|
||||
Crystal Forest Deep Ocean Sandstone Brick Slab=
|
||||
Crystal Cobblestone Stair=
|
||||
Crystal Cobblestone Slab=
|
||||
Crystal Mossy Cobblestone Stair=
|
||||
Crystal Mossy Cobblestone Slab=
|
||||
Crystal Stone Brick Stair=
|
||||
Crystal Stone Brick Slab=
|
||||
Crystal Wood Stair=
|
||||
Crystal Wood Slab=
|
||||
Mese Wood Stair=
|
||||
Mese Wood Slab=
|
||||
Stair=
|
||||
Slab=
|
||||
Stone=
|
||||
Cobblestone=
|
||||
Block=
|
||||
Brick=
|
||||
Sandstone=
|
||||
with Growth=
|
||||
with Flower Growth=
|
||||
Palm=
|
||||
Wood=
|
||||
Planks=
|
||||
Tree=
|
||||
Vine Shears=Inda-metszőolló
|
||||
Silk Shovel=
|
||||
Shell of Underwater Breating=
|
||||
Hammer=
|
||||
Sharp=
|
||||
Torch=
|
||||
Cave Vine=Barlangi inda
|
||||
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
|
||||
Tenanea Flowers Vine=
|
||||
Twisted Vine=Csavarodott inda
|
||||
Golden Vine=Arany inda
|
||||
Dense Vine=Sűrű inda
|
||||
Wall Cave Vine Green=
|
||||
Wall Cave Vine Blue=
|
||||
Wall Cave Vine Cyan=
|
||||
Wall Cave Vine Violet=
|
||||
Coral Bones Block Wall=
|
||||
Coral Bones Brick Wall=
|
||||
Crystal Cobblestone Wall=
|
||||
Crystal Mossy Cobblestone Wall=
|
||||
Cursed Sandstone Brick Wall=
|
||||
Cursed Sandstone Block Wall=
|
||||
Cursed Stone Carved Wall=
|
||||
Forsaken Desert Cobblestone Wall=
|
||||
Forsaken Desert Cobblestone Red Wall=
|
||||
Forsaken Desert Brick Wall=
|
||||
Forsaken Desert Brick Red Wall=
|
||||
Forsaken Desert Engraved Stone Wall=
|
||||
Mineral Cave Stone Wall=
|
||||
Mineral Cave Cobblestone Wall=
|
||||
Mineral Lava Stone with lava Wall=
|
||||
Mineral Lava Stone without lava Wall=
|
||||
Forsaken Desert Chiseled Stone=Elhagyatott sivatagi kő, csiszolt
|
||||
|
||||
|
||||
##### not used anymore #####
|
||||
|
||||
Cave Vine with Mese Leaves=Barlangi inda mese-levelekkel
|
||||
@@ -0,0 +1,616 @@
|
||||
# textdomain: everness
|
||||
@1 will intersect protection on growth.=
|
||||
Compost chance=
|
||||
Everness Encyclopedia=
|
||||
You need "everness_encyclopedia" privilige to access this button.=
|
||||
Empty Bucket=
|
||||
Get biome name where you are standing.=
|
||||
This command can only be executed in-game!=
|
||||
Locked Chest=
|
||||
Locked Chest (owned by @1)=
|
||||
You do not own this chest.=
|
||||
a locked chest=
|
||||
Chest=
|
||||
Quartz Crystal=
|
||||
Baobab Roasted Fruit=
|
||||
Pyrite Ingot=
|
||||
Pyrite Lump=
|
||||
Bamboo=
|
||||
Hunger=
|
||||
Coconut=
|
||||
Coral Wood Fence Gate=
|
||||
Lava Tree Wood Door=
|
||||
Lava Tree Wood Trapdoor=
|
||||
Lava Tree Wood Fence Gate=
|
||||
Bamboo Wood Fence Gate=
|
||||
Crystal Wood Fence Gate=
|
||||
Palm Wood Fence Gate=
|
||||
Bamboo Door=
|
||||
Bamboo Trapdoor=
|
||||
Bone Pyrit Door=
|
||||
Willow Door=
|
||||
Crystal Wood Door=
|
||||
Crystal Wood Trapdoor=
|
||||
Cursed Wood Door=
|
||||
Cursed Wood Trapdoor=
|
||||
Palm Wood Door=
|
||||
Palm Wood Trapdoor=
|
||||
Dry Wood Fence Rail=
|
||||
Dry Wood Mese Post Light=
|
||||
Bamboo Wood Fence Rail=
|
||||
Bamboo Wood Mese Post Light=
|
||||
Crystal Wood Fence Rail=
|
||||
Crystal Wood Mese Post Light=
|
||||
Palm Wood Fence Rail=
|
||||
Palm Wood Mese Post Light=
|
||||
Coral Wood Fence=
|
||||
Coral Wood Fence Rail=
|
||||
Coral Wood Mese Post Light=
|
||||
Lava Tree Wood Fence=
|
||||
Lava Tree Wood Fence Rail=
|
||||
Lava Tree Wood Mese Post Light=
|
||||
Dry Wood Fence=
|
||||
Bamboo Wood Fence=
|
||||
Crystal Wood Fence=
|
||||
Palm Wood Fence=
|
||||
Dry Wood Fence Gate=
|
||||
Coral Desert Stone Stair=
|
||||
Coral Desert Stone Slab=
|
||||
Double Coral Desert Stone Slab=
|
||||
Coral Desert Cobblestone Stair=
|
||||
Coral Desert Cobblestone Slab=
|
||||
Double Coral Desert Cobblestone Slab=
|
||||
Coral Mossy Cobblestone Stair=
|
||||
Coral Mossy Cobblestone Slab=
|
||||
Double Coral Mossy Cobblestone Slab=
|
||||
Cursed Brick Stair=
|
||||
Cursed Brick Slab=
|
||||
Double Cursed Brick Slab=
|
||||
Cursed Brick with Growth Stair=
|
||||
Cursed Brick with Growth Slab=
|
||||
Double Cursed Brick with Growth Slab=
|
||||
Double Coral Bones Block Slab=
|
||||
Double Coral Bones Brick Slab=
|
||||
Double Quartz Block Slab=
|
||||
Double Quartz Chiseled Slab=
|
||||
Double Quartz Pillar Slab=
|
||||
Double Dry Wood Slab=
|
||||
Double Coral Wood Slab=
|
||||
Double Bamboo Wood Slab=
|
||||
Double Bamboo Mosaic Wood Slab=
|
||||
Double Forsaken Desert Brick Slab=
|
||||
Double Forsaken Desert Brick Red Slab=
|
||||
Double Forsaken Desert Chiseled Stone Slab=
|
||||
Double Baobab Wood Slab=
|
||||
Double Sequoia Wood Slab=
|
||||
Double Forsaken Tundra Cobblestone Slab=
|
||||
Double Forsaken Tundra Stone Slab=
|
||||
Double Forsaken Tundra Brick Slab=
|
||||
Double Willow Wood Slab=
|
||||
Double Magma Cobblestone Slab=
|
||||
Double Volcanic Rock Slab=
|
||||
Double Volcanic Rock with Magma Slab=
|
||||
Double Coral Depp Ocean Sandstone Block Slab=
|
||||
Double Coral Depp Ocean Sandstone Brick Slab=
|
||||
Double Coral White Sandstone Slab=
|
||||
Double Coral White Sandstone Pillar Slab=
|
||||
Double Coral White Sandstone Brick Slab=
|
||||
Double Coral Desert Stone Block Slab=
|
||||
Double Coral Desert Stone Brick Slab=
|
||||
Double Coral Sandstone Slab=
|
||||
Double Coral Sandstone Brick Slab=
|
||||
Double Coral Sandstone Chiseled Slab=
|
||||
Double Coral Sandstone Carved Slab=
|
||||
Double Cursed Lands Deep Ocean Sandstone Block Slab=
|
||||
Double Cursed Lands Deep Ocean Sandstone Brick Slab=
|
||||
Double Crystal Forest Deep Ocean Sandstone Block Slab=
|
||||
Double Crystal Forest Deep Ocean Sandstone Brick Slab=
|
||||
Double Crystal Cobblestone Slab=
|
||||
Double Crystal Mossy Cobblestone Slab=
|
||||
Double Crystal Stone Brick Slab=
|
||||
Double Crystal Wood Slab=
|
||||
Double Mese Wood Slab=
|
||||
Double=
|
||||
A bucket can be used to collect and release liquids. This one is filled with mineral water.=
|
||||
Place it to empty the bucket and create a mineral water source.=
|
||||
Places a mineral water source=
|
||||
Bucket=
|
||||
Water=
|
||||
Coral Cobblestone Wall=
|
||||
Coral Mossy Cobblestone Wall=
|
||||
Cursed Brick Wall=
|
||||
Cursed Brick with Growth Wall=
|
||||
Forsaken Tundra Cobblestone Wall=
|
||||
Forsaken Tundra Stone Wall=
|
||||
Forsaken Tundra Brick Wall=
|
||||
Magma Cobblestone Wall=
|
||||
Volcanic Rock Wall=
|
||||
Volcanic Rock with Magma Wall=
|
||||
Lava Bucket=
|
||||
Mineral=
|
||||
Coal Ore=
|
||||
Pyrite Ore=
|
||||
Ceramic Sherds. Use archeological pickaxe to have a chance of getting various different sherds.=
|
||||
Ceramic Sherds=
|
||||
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=
|
||||
Crystal Stone=
|
||||
Coral Sandstone=
|
||||
Coral Sandstone Brick=
|
||||
Coral Sandstone Chiseled Block=
|
||||
Coral Sandstone Carved Block=
|
||||
Coral White Sandstone=
|
||||
Coral White Sandstone Brick=
|
||||
Coral White Sandstone Pillar=
|
||||
Coral Desert Stone Block=
|
||||
Coral Desert Stone Brick=
|
||||
Coral Bones=
|
||||
Coral Bones Block=
|
||||
Coral Bones Brick=
|
||||
Crystal Cobblestone=
|
||||
Crystal Mossy Cobblestone=
|
||||
Crystal Stone Brick=
|
||||
Coral Desert Cobblestone=
|
||||
Coral Mossy Cobblestone=
|
||||
Coral Desert Stone with Moss=
|
||||
Coral Deep Ocean Sandstone Block=
|
||||
Coral Deep Ocean Sandstone Brick=
|
||||
Cursed Lands Deep Ocean Sandstone Block=
|
||||
Cursed Lands Deep Ocean Sandstone Brick=
|
||||
Crystal Forest Deep Ocean Sandstone Block=
|
||||
Crystal Forest Deep Ocean Sandstone Brick=
|
||||
Forsaken Desert Stone=
|
||||
Forsaken Desert Cobblestone Red=
|
||||
Forsaken Desert Cobblestone=
|
||||
Volcanic Rock=
|
||||
Volcanic Rock with Magma=
|
||||
Cursed Stone=
|
||||
Cursed Stone Carved=
|
||||
Cursed Brick=
|
||||
Cursed Brick with Growth=
|
||||
Cursed Brick Mixed=
|
||||
Cursed Brick Carved=
|
||||
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=
|
||||
Cyan Crystal Block=
|
||||
Quartz Block=
|
||||
Chiseled Quartz=
|
||||
Quartz Pillar=
|
||||
Forsaken Desert Brick=
|
||||
Forsaken Desert Brick Red=
|
||||
Forsaken Desert Engraved Stone=
|
||||
Crystal Sandstone=
|
||||
Crystal Sandstone Brick=
|
||||
Crystal Sandstone Chiseled=
|
||||
Cursed Sandstone Block=
|
||||
Cursed Sandstone Brick=
|
||||
Coral Dirt=
|
||||
Coral Deep Ocean Mud=
|
||||
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=
|
||||
Gravel=
|
||||
Permanent Fire=
|
||||
Dirt=
|
||||
Dry Dirt=
|
||||
Dirt with Dry Grass=
|
||||
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=
|
||||
Crystal Forest Deep Ocean Sand with Crack=
|
||||
Forsaken Tundra Beach Sand=
|
||||
Forsaken Tundra Beach Sand with Shells=
|
||||
Forsaken Desert Sand=
|
||||
Coral Forest Deep Ocean Sand=
|
||||
Cursed Lands Deep Ocean Sand=
|
||||
Cursed Lands Deep Ocean Sand with Crack=
|
||||
Crystal Forest Deep Ocean Sand=
|
||||
Mineral 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=
|
||||
Lotus=
|
||||
Flower=
|
||||
Animated=
|
||||
Leaf=
|
||||
Dry=
|
||||
Forsaken Fire=
|
||||
Coral Tree Trunk=
|
||||
Coral Wood Planks=
|
||||
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=
|
||||
Crystal Wood Planks=
|
||||
Mese Tree Trunk=
|
||||
Trunk=
|
||||
Mese Tree Leaves=
|
||||
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=
|
||||
Willow 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=
|
||||
Flowers=
|
||||
Magenta Flowers=
|
||||
Clover=
|
||||
Luminous Mushroom=
|
||||
Glossy Mushroom=
|
||||
Staghorn Coral (Stage 1)=
|
||||
Staghorn Coral (Stage 2)=
|
||||
Staghorn Coral (Stage 3)=
|
||||
Clover with flowers=
|
||||
Aurora Violet=
|
||||
Aurora Sky Blue=
|
||||
Aurora Cyan=
|
||||
Aurora Mint=
|
||||
Aurora Lavender=
|
||||
Aurora Lime=
|
||||
Aurora Coral=
|
||||
Aurora Magenta=
|
||||
Glass Crystal Cluster=
|
||||
Glass Megalith Foundation=
|
||||
Glass Megalith Lower Shaft=
|
||||
Glass Megalith Mid Nexus=
|
||||
Glass Megalith Upper Spire=
|
||||
Glass Megalith Summit Needle=
|
||||
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=
|
||||
Baobab Savanna Grass=
|
||||
Red Castor=
|
||||
Crystal Mushrooms=
|
||||
Twisted Crystal Grass=
|
||||
Twisted Crystal Spire=
|
||||
Crystal Grass=
|
||||
Marsh Grass=
|
||||
Forsaken Plant=
|
||||
Blue Cactus=
|
||||
Cave Barrel Cactus=
|
||||
Venus Trap Plant=
|
||||
Illumi Root=
|
||||
Crystal Waterlily=
|
||||
Orange Cactus=
|
||||
Agave Leaf=
|
||||
Mese Fruit=
|
||||
Mese Tree Sapling=
|
||||
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=
|
||||
Mese Wood Planks=
|
||||
Coral Corals=
|
||||
Coral Frosted=
|
||||
Coral Starfish=
|
||||
Spine Kelp=
|
||||
Coral Bulbs=
|
||||
Coral Tree=
|
||||
Coral Palm=
|
||||
Coral Anemone=
|
||||
Coral Darkilluma=
|
||||
Coral Demon=
|
||||
Crystal Forest Deep Ocean Coral Plant Cyan=
|
||||
Crystal Forest Deep Ocean Coral Plant Orange=
|
||||
Crystal Forest Deep Ocean Coral Plant Pink=
|
||||
Crystal Coral Dark=
|
||||
Crystal Coral Light=
|
||||
Coral Forest Deep Ocean Coral Pink=
|
||||
Coral Forest Deep Ocean Coral Cyan=
|
||||
Coral Forest Deep Ocean Coral Green=
|
||||
Coral Forest Deep Ocean Coral Red=
|
||||
Coral Alcyonacea=
|
||||
Coral Ostracod=
|
||||
Coral Octocurse=
|
||||
Crystal Forest Deep Ocean Coral Green=
|
||||
Crystal Forest Deep Ocean Coral Orange=
|
||||
Crystal Forest Deep Ocean Coral Cyan=
|
||||
Coral Skeleton=
|
||||
Mineral Water Weed=
|
||||
Skull with Candle=
|
||||
Forsythia Bush=
|
||||
Rose Bush=
|
||||
Glowing Pillar=
|
||||
Blue Vine Lantern=
|
||||
Amaranita Lantern=
|
||||
Lumecorn=
|
||||
Everness Glass=
|
||||
Tinted Glass Red=
|
||||
Pyrite Lantern=
|
||||
Pyrite Glass=
|
||||
Lumabus Vine Lantern=
|
||||
Eye Vine Lantern=
|
||||
Cursed Pumpkin Lantern=
|
||||
Floating Crystal=
|
||||
Coral Forest Deep Ocean Lantern=
|
||||
Mineral Water Source=
|
||||
Flowing Mineral Water=
|
||||
Lava Source=
|
||||
Flowing Lava=
|
||||
Geyser=
|
||||
Active=
|
||||
Ceramic=
|
||||
Pot=
|
||||
If destroyed by archelogical pick axe, it will drop ceramic sherds instead of ceramic pot item.=
|
||||
owned by=
|
||||
Sherd=
|
||||
Sand=
|
||||
Castle=
|
||||
Wall=
|
||||
Purple=
|
||||
Green=
|
||||
Red=
|
||||
Blue=
|
||||
Yellow=
|
||||
Magenta=
|
||||
Cyan=
|
||||
White=
|
||||
Cursed Skeleton Hands=
|
||||
Cursed Rib Cage=
|
||||
Cursed Skull on Stick=
|
||||
Coral Dirt Soil=
|
||||
Dirt Soil=
|
||||
Crystal Dirt Soil=
|
||||
Crystal Cave Dirt Soil=
|
||||
Cursed Dirt Soil=
|
||||
Dry Dirt Soil=
|
||||
Coral Dirt Wet Soil=
|
||||
Crystal Dirt Wet Soil=
|
||||
Crystal Cave Dirt Wet Soil=
|
||||
Cursed Dirt Wet Soil=
|
||||
Mineral Cave Stone=
|
||||
Mineral Cave Cobblestone=
|
||||
Mineral Lava Stone with lava=
|
||||
Mineral Lava Stone without lava=
|
||||
Mineral Lava Stone with moss=
|
||||
Volcanic Spike=
|
||||
Mineral Lava Stone Spike=
|
||||
Lava Tree Trunk=
|
||||
Lava Tree Trunk with Lava Veins=
|
||||
Lava Tree Wood Planks=
|
||||
Lava=
|
||||
Mineral Cave Moss Grass=
|
||||
Sapling=
|
||||
Leaves=
|
||||
Pyrite Glass Pane=
|
||||
Cursed Steel Bars=
|
||||
Cursed Steel Bar Door=
|
||||
Steel Bar Trapdoor=
|
||||
Dry Tree Trunk Stair=
|
||||
Dry Tree Trunk Slab=
|
||||
Forsaken Desert Engraved Stone Stair=
|
||||
Forsaken Desert Engraved Stone Slab=
|
||||
Forsaken Desert Cobblestone Stair=
|
||||
Forsaken Desert Cobblestone Slab=
|
||||
Forsaken Desert Cobblestone Red Stair=
|
||||
Forsaken Desert Cobblestone Red Slab=
|
||||
Everness Glass Stair=
|
||||
Everness Glass Slab=
|
||||
Mineral Cave Stone Stair=
|
||||
Mineral Cave Stone Slab=
|
||||
Mineral Cave Cobblestone Stair=
|
||||
Mineral Cave Cobblestone Slab=
|
||||
Mineral Lava Stone with lava Stair=
|
||||
Mineral Lava Stone with lava Slab=
|
||||
Mineral Lava Stone without lava Stair=
|
||||
Mineral Lava Stone without lava Slab=
|
||||
Coral Bones Block Stair=
|
||||
Coral Bones Block Slab=
|
||||
Coral Bones Brick Stair=
|
||||
Coral Bones Brick Slab=
|
||||
Quartz Block Stair=
|
||||
Quartz Block Slab=
|
||||
Quartz Chiseled Stair=
|
||||
Quartz Chiseled Slab=
|
||||
Quartz Pillar Stair=
|
||||
Quartz Pillar Slab=
|
||||
Dry Wood Stair=
|
||||
Dry Wood Slab=
|
||||
Coral Wood Stair=
|
||||
Coral 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=
|
||||
Coral Depp Ocean Sandstone Block Stair=
|
||||
Coral Depp Ocean Sandstone Block Slab=
|
||||
Coral Depp Ocean Sandstone Brick Stair=
|
||||
Coral Depp Ocean Sandstone Brick Slab=
|
||||
Coral White Sandstone Stair=
|
||||
Coral White Sandstone Slab=
|
||||
Coral White Sandstone Pillar Stair=
|
||||
Coral White Sandstone Pillar Slab=
|
||||
Coral White Sandstone Brick Stair=
|
||||
Coral White Sandstone Brick Slab=
|
||||
Coral Desert Stone Block Stair=
|
||||
Coral Desert Stone Block Slab=
|
||||
Coral Desert Stone Brick Stair=
|
||||
Coral Desert Stone Brick Slab=
|
||||
Coral Sandstone Stair=
|
||||
Coral Sandstone Slab=
|
||||
Coral Sandstone Brick Stair=
|
||||
Coral Sandstone Brick Slab=
|
||||
Coral Sandstone Chiseled Stair=
|
||||
Coral Sandstone Chiseled Slab=
|
||||
Coral Sandstone Carved Stair=
|
||||
Coral Sandstone Carved Slab=
|
||||
Cursed Lands Deep Ocean Sandstone Block Stair=
|
||||
Cursed Lands Deep Ocean Sandstone Block Slab=
|
||||
Cursed Lands Deep Ocean Sandstone Brick Stair=
|
||||
Cursed Lands Deep Ocean Sandstone Brick Slab=
|
||||
Crystal Forest Deep Ocean Sandstone Block Stair=
|
||||
Crystal Forest Deep Ocean Sandstone Block Slab=
|
||||
Crystal Forest Deep Ocean Sandstone Brick Stair=
|
||||
Crystal Forest Deep Ocean Sandstone Brick Slab=
|
||||
Crystal Cobblestone Stair=
|
||||
Crystal Cobblestone Slab=
|
||||
Crystal Mossy Cobblestone Stair=
|
||||
Crystal Mossy Cobblestone Slab=
|
||||
Crystal Stone Brick Stair=
|
||||
Crystal Stone Brick Slab=
|
||||
Crystal Wood Stair=
|
||||
Crystal Wood Slab=
|
||||
Mese Wood Stair=
|
||||
Mese Wood Slab=
|
||||
Stair=
|
||||
Slab=
|
||||
Stone=
|
||||
Cobblestone=
|
||||
Block=
|
||||
Brick=
|
||||
Sandstone=
|
||||
with Growth=
|
||||
with Flower Growth=
|
||||
Palm=
|
||||
Wood=
|
||||
Planks=
|
||||
Tree=
|
||||
Vine Shears=
|
||||
Silk Shovel=
|
||||
Shell of Underwater Breating=
|
||||
Hammer=
|
||||
Sharp=
|
||||
Torch=
|
||||
Cave Vine=
|
||||
Whispering Gourd Vine=
|
||||
Bulb Vine=
|
||||
Willow Vine=
|
||||
Eye Vine=
|
||||
Lumabus Vine=
|
||||
Ivis Vine=
|
||||
Flowered Vine=
|
||||
Reeds Vine=
|
||||
Tenanea Flowers Vine=
|
||||
Twisted Vine=
|
||||
Golden Vine=
|
||||
Dense Vine=
|
||||
Wall Cave Vine Green=
|
||||
Wall Cave Vine Blue=
|
||||
Wall Cave Vine Cyan=
|
||||
Wall Cave Vine Violet=
|
||||
Coral Bones Block Wall=
|
||||
Coral Bones Brick Wall=
|
||||
Crystal Cobblestone Wall=
|
||||
Crystal Mossy Cobblestone Wall=
|
||||
Cursed Sandstone Brick Wall=
|
||||
Cursed Sandstone Block Wall=
|
||||
Cursed Stone Carved Wall=
|
||||
Forsaken Desert Cobblestone Wall=
|
||||
Forsaken Desert Cobblestone Red Wall=
|
||||
Forsaken Desert Brick Wall=
|
||||
Forsaken Desert Brick Red Wall=
|
||||
Forsaken Desert Engraved Stone Wall=
|
||||
Mineral Cave Stone Wall=
|
||||
Mineral Cave Cobblestone Wall=
|
||||
Mineral Lava Stone with lava Wall=
|
||||
Mineral Lava Stone without lava Wall=
|
||||
Forsaken Desert Chiseled Stone=
|
||||
@@ -0,0 +1,170 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = {
|
||||
'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 core.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'
|
||||
})
|
||||
elseif core.get_modpath('mcl_core') then
|
||||
table.insert_all(all_biomes_mese_tree_place_on, {
|
||||
'mcl_core:sand',
|
||||
'mcl_core:dirt',
|
||||
'mcl_core:podzol',
|
||||
'mcl_core:dirt_with_grass',
|
||||
'mcl_core:coarse_dirt',
|
||||
'mcl_core:gravel',
|
||||
'mcl_core:stone',
|
||||
})
|
||||
end
|
||||
|
||||
Everness:register_decoration({
|
||||
name = 'everness:all_biomes_mese_tree',
|
||||
deco_type = 'schematic',
|
||||
place_on = all_biomes_mese_tree_place_on,
|
||||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = 0,
|
||||
scale = 0.002,
|
||||
spread = { x = 250, y = 250, z = 250 },
|
||||
seed = 2,
|
||||
octaves = 3,
|
||||
persist = 0.66
|
||||
},
|
||||
y_max = 250,
|
||||
y_min = 80,
|
||||
schematic = core.get_modpath('everness') .. '/schematics/everness_mese_tree.mts',
|
||||
flags = 'place_center_x, place_center_z',
|
||||
rotation = 'random',
|
||||
})
|
||||
|
||||
Everness:register_decoration({
|
||||
name = 'everness:all_biomes_mese_tree_2',
|
||||
deco_type = 'schematic',
|
||||
place_on = all_biomes_mese_tree_place_on,
|
||||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = -0.004,
|
||||
scale = 0.01,
|
||||
spread = { x = 100, y = 100, z = 100 },
|
||||
seed = 137,
|
||||
octaves = 3,
|
||||
persist = 0.7,
|
||||
},
|
||||
y_max = 250,
|
||||
y_min = 80,
|
||||
schematic = core.get_modpath('everness') .. '/schematics/everness_mese_tree.mts',
|
||||
flags = 'place_center_x, place_center_z',
|
||||
rotation = 'random'
|
||||
})
|
||||
@@ -0,0 +1,126 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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.
|
||||
|
||||
--]]
|
||||
|
||||
if Everness.async_mapgen_active then
|
||||
--
|
||||
-- Hybrid Async Mapgen Mode (Minetest 5.9.0+ / Luanti)
|
||||
--
|
||||
-- The heavy VoxelManip manipulation, biome logic, and schematics are executed
|
||||
-- on the dedicated background mapgen worker thread in `mapgen_async.lua`.
|
||||
-- The main server thread on_generated below only executes post-generation tasks
|
||||
-- that require the active ServerMap environment (node metadata, chest loot, fix_light).
|
||||
--
|
||||
core.register_on_generated(function(minp, maxp, blockseed)
|
||||
local rand = PcgRandom(blockseed)
|
||||
local biomemap = core.get_mapgen_object('biomemap') or {}
|
||||
local gennotify = core.get_mapgen_object('gennotify') or {}
|
||||
local shared_args = {}
|
||||
|
||||
local chunk_biomes = {}
|
||||
for i = 1, #biomemap do
|
||||
chunk_biomes[biomemap[i]] = true
|
||||
end
|
||||
|
||||
local active_defs = {}
|
||||
for _, def in ipairs(Everness.on_generated_queue) do
|
||||
if def.can_run(biomemap, chunk_biomes) then
|
||||
table.insert(active_defs, def)
|
||||
end
|
||||
end
|
||||
|
||||
if #active_defs == 0 then
|
||||
return
|
||||
end
|
||||
|
||||
-- Populate loot chests placed by structures in this chunk
|
||||
local chest_positions = core.find_nodes_in_area(minp, maxp, { 'everness:chest' })
|
||||
if #chest_positions > 0 then
|
||||
Everness:populate_loot_chests(chest_positions)
|
||||
end
|
||||
|
||||
-- Run any main-thread after_write_to_map handlers (e.g. core.fix_light, node placement)
|
||||
for _, def in ipairs(active_defs) do
|
||||
if 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, minp, maxp)
|
||||
end
|
||||
end
|
||||
end)
|
||||
return
|
||||
end
|
||||
|
||||
--
|
||||
-- Synchronous Mapgen Mode (Fallback for Minetest <= 5.8)
|
||||
--
|
||||
-- Localize data buffer table outside the loop, to be re-used for all
|
||||
-- mapchunks, therefore minimising memory use.
|
||||
local data = {}
|
||||
local p2data = {}
|
||||
|
||||
core.register_on_generated(function(minp, maxp, blockseed)
|
||||
local rand = PcgRandom(blockseed)
|
||||
local biomemap = core.get_mapgen_object('biomemap') or {}
|
||||
local gennotify = core.get_mapgen_object('gennotify') or {}
|
||||
local vm, emin, emax = core.get_mapgen_object('voxelmanip')
|
||||
local area = VoxelArea:new({ MinEdge = emin, MaxEdge = emax })
|
||||
vm:get_data(data)
|
||||
vm:get_param2_data(p2data)
|
||||
local shared_args = {}
|
||||
|
||||
local chunk_biomes = {}
|
||||
for i = 1, #biomemap do
|
||||
chunk_biomes[biomemap[i]] = true
|
||||
end
|
||||
|
||||
local active_defs = {}
|
||||
for _, def in ipairs(Everness.on_generated_queue) do
|
||||
if def.can_run(biomemap, chunk_biomes) then
|
||||
table.insert(active_defs, def)
|
||||
end
|
||||
end
|
||||
|
||||
-- on_data
|
||||
for _, def in ipairs(active_defs) do
|
||||
if 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], biomemap)
|
||||
end
|
||||
end
|
||||
|
||||
vm:set_data(data)
|
||||
vm:set_param2_data(p2data)
|
||||
|
||||
-- after_set_data
|
||||
for _, def in ipairs(active_defs) do
|
||||
if 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
|
||||
|
||||
vm:set_lighting({ day = 0, night = 0 })
|
||||
vm:calc_lighting()
|
||||
vm:update_liquids()
|
||||
vm:write_to_map()
|
||||
|
||||
-- after_write_to_map
|
||||
for _, def in ipairs(active_defs) do
|
||||
if 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, minp, maxp)
|
||||
end
|
||||
end
|
||||
end)
|
||||
@@ -0,0 +1,377 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 path = core.get_modpath('everness')
|
||||
|
||||
-- Shim missing main-thread engine registration/notification methods in the async mapgen environment
|
||||
core.set_gen_notify = core.set_gen_notify or function() end
|
||||
core.register_biome = core.register_biome or function() end
|
||||
core.register_decoration = core.register_decoration or function() end
|
||||
core.register_ore = core.register_ore or function() end
|
||||
core.register_node = core.register_node or function() end
|
||||
core.register_tool = core.register_tool or function() end
|
||||
core.register_craftitem = core.register_craftitem or function() end
|
||||
core.register_abm = core.register_abm or function() end
|
||||
core.register_lbm = core.register_lbm or function() end
|
||||
core.register_alias = core.register_alias or function() end
|
||||
core.get_translator = core.get_translator or function() return function(s) return s end end
|
||||
core.emerge_area = core.emerge_area or function() end
|
||||
core.place_schematic = core.place_schematic or function() end
|
||||
core.get_node = core.get_node or function() return { name = 'ignore' } end
|
||||
core.set_node = core.set_node or function() end
|
||||
core.remove_node = core.remove_node or function() end
|
||||
core.get_biome_data = core.get_biome_data or function() return nil end
|
||||
core.get_mapgen_setting = core.get_mapgen_setting or function() return nil end
|
||||
core.dir_to_wallmounted = core.dir_to_wallmounted or function(dir)
|
||||
if dir.y > 0.5 then return 1
|
||||
elseif dir.y < -0.5 then return 0
|
||||
elseif dir.x > 0.5 then return 5
|
||||
elseif dir.x < -0.5 then return 4
|
||||
elseif dir.z > 0.5 then return 3
|
||||
elseif dir.z < -0.5 then return 2
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
core.registered_decorations = core.registered_decorations or {}
|
||||
core.registered_nodes = core.registered_nodes or {}
|
||||
core.registered_items = core.registered_items or {}
|
||||
core.registered_biomes = core.registered_biomes or {}
|
||||
core.registered_ores = core.registered_ores or {}
|
||||
|
||||
-- Load API definitions in the isolated mapgen Lua environment
|
||||
dofile(path .. '/api.lua')
|
||||
|
||||
-- Load all enabled biome mapgen definitions to populate Everness.on_generated_queue
|
||||
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
|
||||
|
||||
-- Reusable data buffers for VoxelManip in the async worker thread
|
||||
local data = {}
|
||||
local p2data = {}
|
||||
|
||||
-- Persistent content ID and group caches for async mapgen lookups
|
||||
local cid_cache = {}
|
||||
local group_cids_cache = {}
|
||||
|
||||
local function safe_get_content_id(name)
|
||||
local id = cid_cache[name]
|
||||
if id ~= nil then
|
||||
if id then
|
||||
return id
|
||||
end
|
||||
return nil
|
||||
end
|
||||
local ok, res = pcall(core.get_content_id, name)
|
||||
if ok and type(res) == 'number' then
|
||||
cid_cache[name] = res
|
||||
return res
|
||||
end
|
||||
cid_cache[name] = false
|
||||
return nil
|
||||
end
|
||||
|
||||
local function get_group_cids(group_name)
|
||||
local list = group_cids_cache[group_name]
|
||||
if list then
|
||||
return list
|
||||
end
|
||||
list = {}
|
||||
for node_name in pairs(core.registered_nodes) do
|
||||
if core.get_item_group(node_name, group_name) > 0 then
|
||||
local id = safe_get_content_id(node_name)
|
||||
if id and (not core.CONTENT_IGNORE or id ~= core.CONTENT_IGNORE) then
|
||||
list[#list + 1] = id
|
||||
end
|
||||
end
|
||||
end
|
||||
group_cids_cache[group_name] = list
|
||||
return list
|
||||
end
|
||||
|
||||
local function build_cids_map(nodenames)
|
||||
local cids_map = {}
|
||||
for _, name in ipairs(nodenames) do
|
||||
if name:sub(1, 6) == 'group:' then
|
||||
local g = name:sub(7)
|
||||
local cids = get_group_cids(g)
|
||||
for i = 1, #cids do
|
||||
cids_map[cids[i]] = name
|
||||
end
|
||||
else
|
||||
local id = safe_get_content_id(name)
|
||||
if id then
|
||||
cids_map[id] = name
|
||||
end
|
||||
end
|
||||
end
|
||||
return cids_map
|
||||
end
|
||||
|
||||
-- Async on_generated callback in Minetest 5.9.0+ / Luanti
|
||||
-- Receives `vmanip` as the first argument; engine commits vmanip automatically on return
|
||||
core.register_on_generated(function(vmanip, minp, maxp, blockseed)
|
||||
local rand = PcgRandom(blockseed)
|
||||
local biomemap = core.get_mapgen_object('biomemap') or {}
|
||||
local gennotify = core.get_mapgen_object('gennotify') or {}
|
||||
local emin, emax = vmanip:get_emerged_area()
|
||||
local area = VoxelArea:new({ MinEdge = emin, MaxEdge = emax })
|
||||
|
||||
-- Fetch raw voxel data upfront for direct, high-performance array indexing
|
||||
vmanip:get_data(data)
|
||||
vmanip:get_param2_data(p2data)
|
||||
|
||||
local c_air = core.get_content_id('air')
|
||||
local ystride = area.ystride
|
||||
|
||||
-- Expose VoxelManip-backed helper functions for structure / marker checks during mapgen
|
||||
core.get_node = function(pos)
|
||||
return vmanip:get_node_at(pos)
|
||||
end
|
||||
core.set_node = function(pos, node)
|
||||
return vmanip:set_node_at(pos, node)
|
||||
end
|
||||
core.remove_node = function(pos)
|
||||
return vmanip:set_node_at(pos, { name = 'air' })
|
||||
end
|
||||
core.swap_node = function(pos, node)
|
||||
return vmanip:set_node_at(pos, node)
|
||||
end
|
||||
|
||||
core.find_nodes_in_area = function(search_minp, search_maxp, nodenames, grouped)
|
||||
if type(nodenames) == 'string' then
|
||||
nodenames = { nodenames }
|
||||
end
|
||||
local cids_map = build_cids_map(nodenames)
|
||||
|
||||
if grouped then
|
||||
local res = {}
|
||||
local counts = {}
|
||||
for _, name in ipairs(nodenames) do
|
||||
res[name] = {}
|
||||
counts[name] = 0
|
||||
end
|
||||
for z = search_minp.z, search_maxp.z do
|
||||
for y = search_minp.y, search_maxp.y do
|
||||
local vi = area:index(search_minp.x, y, z)
|
||||
for x = search_minp.x, search_maxp.x do
|
||||
local cid = data[vi]
|
||||
local match_name = cids_map[cid]
|
||||
if match_name then
|
||||
local tbl = res[match_name]
|
||||
tbl[#tbl + 1] = vector.new(x, y, z)
|
||||
counts[match_name] = counts[match_name] + 1
|
||||
end
|
||||
vi = vi + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
return res, counts
|
||||
else
|
||||
local res = {}
|
||||
local counts = {}
|
||||
for z = search_minp.z, search_maxp.z do
|
||||
for y = search_minp.y, search_maxp.y do
|
||||
local vi = area:index(search_minp.x, y, z)
|
||||
for x = search_minp.x, search_maxp.x do
|
||||
local cid = data[vi]
|
||||
local match_name = cids_map[cid]
|
||||
if match_name then
|
||||
res[#res + 1] = vector.new(x, y, z)
|
||||
counts[match_name] = (counts[match_name] or 0) + 1
|
||||
end
|
||||
vi = vi + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
return res, counts
|
||||
end
|
||||
end
|
||||
|
||||
core.emerge_area = function(search_minp, search_maxp, callback, extra_data)
|
||||
if extra_data and extra_data.callback then
|
||||
extra_data.callback(extra_data.data)
|
||||
elseif callback then
|
||||
callback(nil, 0, 0, extra_data)
|
||||
end
|
||||
end
|
||||
|
||||
core.place_schematic = function(pos, schem, rot, repl, force, flags)
|
||||
return core.place_schematic_on_vmanip(vmanip, pos, schem, rot, repl, force, flags)
|
||||
end
|
||||
|
||||
core.find_nodes_in_area_under_air = function(search_minp, search_maxp, nodenames)
|
||||
if type(nodenames) == 'string' then
|
||||
nodenames = { nodenames }
|
||||
end
|
||||
local cids_map = build_cids_map(nodenames)
|
||||
local res = {}
|
||||
|
||||
for z = search_minp.z, search_maxp.z do
|
||||
for y = search_minp.y, search_maxp.y do
|
||||
local vi = area:index(search_minp.x, y, z)
|
||||
for x = search_minp.x, search_maxp.x do
|
||||
local cid = data[vi]
|
||||
if cids_map[cid] then
|
||||
local vi_above = vi + ystride
|
||||
if data[vi_above] == c_air then
|
||||
res[#res + 1] = vector.new(x, y, z)
|
||||
end
|
||||
end
|
||||
vi = vi + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
local chunk_biomes = {}
|
||||
for i = 1, #biomemap do
|
||||
chunk_biomes[biomemap[i]] = true
|
||||
end
|
||||
|
||||
local active_defs = {}
|
||||
for _, def in ipairs(Everness.on_generated_queue) do
|
||||
if def.can_run(biomemap, chunk_biomes) then
|
||||
table.insert(active_defs, def)
|
||||
end
|
||||
end
|
||||
|
||||
if #active_defs == 0 then
|
||||
return
|
||||
end
|
||||
|
||||
local shared_args = {}
|
||||
|
||||
-- 1. on_data: Raw VoxelManip content/param2 manipulation
|
||||
for _, def in ipairs(active_defs) do
|
||||
if 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], biomemap)
|
||||
end
|
||||
end
|
||||
|
||||
vmanip:set_data(data)
|
||||
vmanip:set_param2_data(p2data)
|
||||
|
||||
-- 2. after_set_data: Schematics placement on VoxelManip
|
||||
for _, def in ipairs(active_defs) do
|
||||
if def.after_set_data then
|
||||
shared_args[def.name] = shared_args[def.name] or {}
|
||||
def.after_set_data(minp, maxp, vmanip, area, data, p2data, gennotify, rand, shared_args[def.name])
|
||||
end
|
||||
end
|
||||
|
||||
-- 3. Lighting & Liquid calculation
|
||||
vmanip:set_lighting({ day = 0, night = 0 })
|
||||
vmanip:calc_lighting()
|
||||
vmanip:update_liquids()
|
||||
-- Note: vmanip:write_to_map() is NOT called here because the engine automatically
|
||||
-- writes and commits the async vmanip upon callback completion.
|
||||
end)
|
||||
@@ -0,0 +1,538 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.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 = core.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 core.get_modpath('default') then
|
||||
jungle_tree_schem = core.get_modpath('default') .. '/schematics/jungle_tree.mts'
|
||||
jungle_log_schem = core.get_modpath('default') .. '/schematics/jungle_log.mts'
|
||||
elseif core.get_modpath('mcl_core') then
|
||||
jungle_tree_schem = core.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,
|
||||
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_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
|
||||
|
||||
local bush_schem
|
||||
local blueberry_bush_schem
|
||||
|
||||
if core.get_modpath('default') then
|
||||
bush_schem = core.get_modpath('default') .. '/schematics/bush.mts'
|
||||
blueberry_bush_schem = core.get_modpath('default') .. '/schematics/blueberry_bush.mts'
|
||||
elseif core.get_modpath('mcl_core') then
|
||||
local everness_path = core.get_modpath('everness')
|
||||
bush_schem = everness_path .. '/mod_support_mcl/schematics/bush.mts'
|
||||
blueberry_bush_schem = everness_path .. '/mod_support_mcl/schematics/blueberry_bush.mts'
|
||||
end
|
||||
|
||||
if bush_schem then
|
||||
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 = bush_schem,
|
||||
flags = 'place_center_x, place_center_z',
|
||||
})
|
||||
end
|
||||
|
||||
if blueberry_bush_schem then
|
||||
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 = blueberry_bush_schem,
|
||||
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' },
|
||||
param2 = 0,
|
||||
param2_max = 3,
|
||||
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' },
|
||||
param2 = 0,
|
||||
param2_max = 3,
|
||||
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)
|
||||
|
||||
-- Clovers
|
||||
local function register_clover_decoration(offset, scale, length)
|
||||
Everness:register_decoration({
|
||||
name = 'everness:bamboo_forest_clover_' .. length,
|
||||
deco_type = 'simple',
|
||||
place_on = { 'everness:dirt_with_grass_1' },
|
||||
param2 = 0,
|
||||
param2_max = 3,
|
||||
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:clover_' .. length,
|
||||
})
|
||||
end
|
||||
|
||||
register_clover_decoration(-0.03, -0.09, 4)
|
||||
register_clover_decoration(-0.015, -0.075, 3)
|
||||
register_clover_decoration(0, -0.06, 2)
|
||||
register_clover_decoration(0.015, -0.045, 1)
|
||||
|
||||
-- Clovers with flowers
|
||||
local function register_clover_with_flowers_decoration(offset, scale, length)
|
||||
Everness:register_decoration({
|
||||
name = 'everness:bamboo_forest_clover_with_flowers_' .. length,
|
||||
deco_type = 'simple',
|
||||
place_on = { 'everness:dirt_with_grass_1' },
|
||||
param2 = 0,
|
||||
param2_max = 3,
|
||||
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:clover_with_flovers_' .. length,
|
||||
})
|
||||
end
|
||||
|
||||
register_clover_with_flowers_decoration(-0.03, -0.09, 4)
|
||||
register_clover_with_flowers_decoration(-0.015, -0.075, 3)
|
||||
register_clover_with_flowers_decoration(0, -0.06, 2)
|
||||
register_clover_with_flowers_decoration(0.015, -0.045, 1)
|
||||
|
||||
--
|
||||
-- On Generated
|
||||
--
|
||||
|
||||
local disp = 16
|
||||
local chance = 20
|
||||
local schem = core.get_modpath('everness') .. '/schematics/everness_japanese_shrine.mts'
|
||||
|
||||
local c_everness_bamboo_1 = core.get_content_id('everness:bamboo_1')
|
||||
local c_everness_bamboo_2 = core.get_content_id('everness:bamboo_2')
|
||||
local c_everness_bamboo_3 = core.get_content_id('everness:bamboo_3')
|
||||
local c_everness_bamboo_4 = core.get_content_id('everness:bamboo_4')
|
||||
local c_everness_bamboo_5 = core.get_content_id('everness:bamboo_5')
|
||||
local c_dirt_with_grass_1 = core.get_content_id('everness:dirt_with_grass_1')
|
||||
local c_dirt_with_grass_extras_1 = core.get_content_id('everness:dirt_with_grass_extras_1')
|
||||
local c_dirt_with_grass_extras_2 = core.get_content_id('everness:dirt_with_grass_extras_2')
|
||||
|
||||
local biome_id_bamboo_forest = core.get_biome_id('everness:bamboo_forest')
|
||||
|
||||
local d_everness_bamboo_forest_small_bamboo = core.get_decoration_id('everness:bamboo_forest_small_bamboo')
|
||||
local d_everness_bamboo_forest_large_bamboo = core.get_decoration_id('everness:bamboo_forest_large_bamboo')
|
||||
|
||||
Everness:register_gen_notify_decoration({
|
||||
d_everness_bamboo_forest_small_bamboo,
|
||||
d_everness_bamboo_forest_large_bamboo,
|
||||
})
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:bamboo_forest',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_bamboo_forest]) or table.indexof(biomemap, biome_id_bamboo_forest) ~= -1
|
||||
end,
|
||||
on_data = function(minp, maxp, area, data, p2data, gennotify, rand, shared_args)
|
||||
--
|
||||
-- Small Bamboo
|
||||
--
|
||||
for _, pos in ipairs(gennotify['decoration#' .. (d_everness_bamboo_forest_small_bamboo or '')] or {}) do
|
||||
local vi = area:indexp(pos)
|
||||
local stalk_color = rand:next(0, 7) * 32
|
||||
local stalk_p2 = stalk_color + (p2data[vi + area.ystride] % 32)
|
||||
for i = 1, 3 do
|
||||
local cur_vi = vi + area.ystride * i
|
||||
if data[cur_vi] == c_everness_bamboo_1 or data[cur_vi] == c_everness_bamboo_2 then
|
||||
p2data[cur_vi] = stalk_p2
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--
|
||||
-- Large 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
|
||||
|
||||
local stalk_color = rand:next(0, 7) * 32
|
||||
local stalk_p2 = stalk_color + (p2data[vi + area.ystride] % 32)
|
||||
|
||||
-- Get bamboo height and color each bamboo node
|
||||
while data[last_vi] == c_everness_bamboo_3 do
|
||||
p2data[last_vi] = stalk_p2
|
||||
bamboo_height = bamboo_height + 1
|
||||
while_counter = while_counter + 1
|
||||
last_vi = vi + area.ystride * while_counter
|
||||
end
|
||||
|
||||
-- Position of the top bamboo_3 node
|
||||
last_vi = vi + area.ystride * bamboo_height
|
||||
|
||||
-- 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] == core.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] = stalk_p2
|
||||
end
|
||||
end
|
||||
else
|
||||
for i = 1, 2 do
|
||||
if data[last_vi + area.ystride * i] == core.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] = stalk_p2
|
||||
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] == core.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 = core.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 = core.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 = core.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
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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 = core.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
|
||||
})
|
||||
@@ -0,0 +1,239 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = { 'everness:bamboo_forest_under' },
|
||||
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 = { 'everness:bamboo_forest_under' },
|
||||
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 = { 'everness:bamboo_forest_under' },
|
||||
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 = { 'everness:bamboo_forest_under' },
|
||||
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 = { 'everness:bamboo_forest_under' },
|
||||
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 = { 'everness:bamboo_forest_under' },
|
||||
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 = { 'everness:bamboo_forest_under' },
|
||||
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',
|
||||
})
|
||||
|
||||
-- Luminous Mushrooms
|
||||
local function register_luminous_mushroom_decoration(offset, scale, length)
|
||||
Everness:register_decoration({
|
||||
name = 'everness:bamboo_forest_under_luminous_mushroom_' .. length,
|
||||
deco_type = 'simple',
|
||||
place_on = {
|
||||
'everness:moss_block',
|
||||
'default:clay'
|
||||
},
|
||||
param2 = 0,
|
||||
param2_max = 3,
|
||||
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_under' },
|
||||
y_max = y_max - 1500 > y_min and y_max - 1500 or y_max,
|
||||
y_min = y_min,
|
||||
decoration = 'everness:luminous_mushroom_' .. length,
|
||||
flags = 'all_floors'
|
||||
})
|
||||
end
|
||||
|
||||
register_luminous_mushroom_decoration(-0.03, 0.09, 4)
|
||||
register_luminous_mushroom_decoration(-0.015, 0.075, 3)
|
||||
register_luminous_mushroom_decoration(0, 0.06, 2)
|
||||
register_luminous_mushroom_decoration(0.015, 0.045, 1)
|
||||
|
||||
-- Glossy Mushrooms
|
||||
local function register_glossy_mushroom_decoration(offset, scale, length)
|
||||
Everness:register_decoration({
|
||||
name = 'everness:bamboo_forest_under_glossy_mushroom_' .. length,
|
||||
deco_type = 'simple',
|
||||
place_on = {
|
||||
'everness:moss_block',
|
||||
'default:clay'
|
||||
},
|
||||
param2 = 0,
|
||||
param2_max = 3,
|
||||
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_under' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
decoration = 'everness:glossy_mushroom_' .. length,
|
||||
flags = 'all_floors'
|
||||
})
|
||||
end
|
||||
|
||||
register_glossy_mushroom_decoration(-0.03, -0.09, 4)
|
||||
register_glossy_mushroom_decoration(-0.015, -0.075, 3)
|
||||
register_glossy_mushroom_decoration(0, -0.06, 2)
|
||||
register_glossy_mushroom_decoration(0.015, -0.045, 1)
|
||||
@@ -0,0 +1,279 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.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 = core.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 = core.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,
|
||||
param2 = 0,
|
||||
param2_max = 239,
|
||||
})
|
||||
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 = core.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(baobab_tree_size.x / 2)
|
||||
local baobab_tree_size_z = math.round(baobab_tree_size.z / 2)
|
||||
|
||||
local biome_id_baobab_savanna = core.get_biome_id('everness:baobab_savanna')
|
||||
|
||||
local deco_ids_baobab = {
|
||||
core.get_decoration_id('everness:baobab_savanna_baobab_tree_1'),
|
||||
core.get_decoration_id('everness:baobab_savanna_baobab_tree_2')
|
||||
}
|
||||
|
||||
if #deco_ids_baobab > 1 then
|
||||
Everness:register_gen_notify_decoration(deco_ids_baobab)
|
||||
end
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:baobab_savanna',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_baobab_savanna]) or table.indexof(biomemap, biome_id_baobab_savanna) ~= -1
|
||||
end,
|
||||
after_write_to_map = function(shared_args, gennotify, rand, minp, maxp)
|
||||
--
|
||||
-- Baobab Tree - fix light
|
||||
--
|
||||
for _, deco_id in ipairs(deco_ids_baobab) do
|
||||
for _, pos in ipairs(gennotify['decoration#' .. (deco_id or '')] or {}) do
|
||||
core.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
|
||||
|
||||
--
|
||||
-- Giant Sequoia (placed on main thread via emerge_area to prevent chunk boundary cut-offs)
|
||||
--
|
||||
if minp and maxp and rand and rand:next(0, 100) < chance then
|
||||
local sidelength = maxp.x - minp.x + 1
|
||||
local x_disp = rand:next(0, disp)
|
||||
local z_disp = rand:next(0, disp)
|
||||
local target_x = minp.x + math.floor(sidelength / 2) + x_disp
|
||||
local target_z = minp.z + math.floor(sidelength / 2) + z_disp
|
||||
|
||||
local ground_nodes = core.find_nodes_in_area_under_air(
|
||||
vector.new(target_x, minp.y, target_z),
|
||||
vector.new(target_x, maxp.y, target_z),
|
||||
{
|
||||
'everness:dry_dirt_with_dry_grass',
|
||||
'everness:dry_dirt'
|
||||
}
|
||||
)
|
||||
|
||||
if #ground_nodes > 0 then
|
||||
local s_pos = ground_nodes[1]
|
||||
|
||||
core.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 = core.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
|
||||
|
||||
core.place_schematic(
|
||||
s_pos,
|
||||
schem,
|
||||
'random',
|
||||
nil,
|
||||
true,
|
||||
'place_center_x, place_center_z'
|
||||
)
|
||||
|
||||
core.log('action', '[Everness] Giant Sequoia was placed at ' .. s_pos:to_string())
|
||||
end
|
||||
}
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
@@ -0,0 +1,312 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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(core.get_mapgen_setting('chunksize')) or 5
|
||||
|
||||
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 = core.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 = core.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,
|
||||
param2 = 0,
|
||||
param2_max = 239,
|
||||
})
|
||||
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)
|
||||
|
||||
-- Staghorn Coral
|
||||
|
||||
local function register_staghorn_coral_decoration(offset, scale, length)
|
||||
Everness:register_decoration({
|
||||
name = 'everness:coral_forest_staghorn_coral_' .. length,
|
||||
deco_type = 'simple',
|
||||
place_on = { 'everness:dirt_with_coral_grass', 'everness:coral_sand' },
|
||||
param2 = 0,
|
||||
param2_max = 3,
|
||||
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:staghorn_coral_' .. length
|
||||
})
|
||||
end
|
||||
|
||||
register_staghorn_coral_decoration(-0.03, -0.09, 3)
|
||||
register_staghorn_coral_decoration(-0.015, -0.075, 2)
|
||||
register_staghorn_coral_decoration(0, -0.06, 1)
|
||||
|
||||
--
|
||||
-- On Generated
|
||||
--
|
||||
|
||||
local deco_id_coral_bones_tree = core.get_decoration_id('everness:coral_forest_coral_bones_tree')
|
||||
local biome_id_coral_forest = core.get_biome_id('everness:coral_forest')
|
||||
local coral_bones_tree_size = { x = 16, y = 35, z = 16 }
|
||||
|
||||
Everness:register_gen_notify_decoration(deco_id_coral_bones_tree)
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:coral_forest',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_coral_forest]) or 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
|
||||
core.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
|
||||
})
|
||||
@@ -0,0 +1,449 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = { 'everness:coral_forest_deep_ocean' }
|
||||
})
|
||||
|
||||
--
|
||||
-- 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 = { 'everness:coral_forest_deep_ocean' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
schematic = core.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 = { 'everness:coral_forest_deep_ocean' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
schematic = core.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 = { 'everness:coral_forest_deep_ocean' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
schematic = core.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 = { 'everness:coral_forest_deep_ocean' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
schematic = core.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 = { 'everness:coral_forest_deep_ocean' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
schematic = core.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 = { 'everness:coral_forest_deep_ocean' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
schematic = core.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 = { 'everness:coral_forest_deep_ocean' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
schematic = core.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 = { 'everness:coral_forest_deep_ocean' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
schematic = core.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 = { 'everness:coral_forest_deep_ocean' },
|
||||
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 = { 'everness:coral_forest_deep_ocean' },
|
||||
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 = { 'everness:coral_forest_deep_ocean' },
|
||||
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 = { 'everness:coral_forest_deep_ocean' },
|
||||
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 = core.get_content_id('mapgen_water_source')
|
||||
local c_everness_coral_forest_deep_ocean_sand = core.get_content_id('everness:coral_forest_deep_ocean_sand')
|
||||
local c_everness_coral_forest_deep_ocean_coral_plant_1 = core.get_content_id('everness:coral_forest_deep_ocean_coral_plant_1')
|
||||
local c_everness_coral_forest_deep_ocean_coral_plant_2 = core.get_content_id('everness:coral_forest_deep_ocean_coral_plant_2')
|
||||
local c_everness_coral_forest_deep_ocean_coral_plant_3 = core.get_content_id('everness:coral_forest_deep_ocean_coral_plant_3')
|
||||
local c_everness_coral_forest_deep_ocean_coral_1 = core.get_content_id('everness:coral_forest_deep_ocean_coral_1')
|
||||
local c_everness_coral_forest_deep_ocean_coral_2 = core.get_content_id('everness:coral_forest_deep_ocean_coral_2')
|
||||
local c_everness_coral_forest_deep_ocean_coral_3 = core.get_content_id('everness:coral_forest_deep_ocean_coral_3')
|
||||
local c_everness_coral_forest_deep_ocean_coral_4 = core.get_content_id('everness:coral_forest_deep_ocean_coral_4')
|
||||
-- Biome IDs
|
||||
local biome_id_everness_coral_forest_deep_ocean = core.get_biome_id('everness:coral_forest_deep_ocean')
|
||||
|
||||
local chance = 30
|
||||
local schem = core.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, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_coral_forest_deep_ocean]) or table.indexof(biomemap, biome_id_everness_coral_forest_deep_ocean) ~= -1
|
||||
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
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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 = core.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
|
||||
})
|
||||
@@ -0,0 +1,303 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = 0,
|
||||
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 = core.get_modpath('x_clay')
|
||||
and core.get_modpath('everness') .. '/schematics/everness_coral_volcano_x_clay.mts'
|
||||
or core.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(core.settings:get('water_level')) or 1
|
||||
local schem = core.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 = core.get_content_id('mapgen_water_source')
|
||||
|
||||
local biome_id_everness_coral_forest_dunes = core.get_biome_id('everness:coral_forest_dunes')
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:coral_forest_dunes',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_coral_forest_dunes]) or 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] == core.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,
|
||||
core.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,
|
||||
core.CONTENT_AIR
|
||||
},
|
||||
data,
|
||||
area
|
||||
)
|
||||
|
||||
if #space_indexes > (size.x * size.y * size.z) / 2 then
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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 = core.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
|
||||
})
|
||||
@@ -0,0 +1,284 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = { 'everness:coral_forest_ocean' }
|
||||
})
|
||||
|
||||
-- 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_ocean' }
|
||||
})
|
||||
|
||||
-- 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_ocean' }
|
||||
})
|
||||
|
||||
-- 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_ocean' }
|
||||
})
|
||||
|
||||
--
|
||||
-- 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 = { 'everness:coral_forest_ocean' },
|
||||
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(core.settings:get('water_level')) or 1
|
||||
local schem = core.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 = core.get_content_id('mapgen_water_source')
|
||||
|
||||
local biome_id_everness_coral_forest_ocean = core.get_biome_id('everness:coral_forest_ocean')
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:coral_forest_ocean',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_coral_forest_ocean]) or 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] == core.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,
|
||||
core.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,
|
||||
core.CONTENT_AIR
|
||||
},
|
||||
data,
|
||||
area
|
||||
)
|
||||
|
||||
if #space_indexes > (size.x * size.y * size.z) / 2 then
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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 = core.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
|
||||
})
|
||||
@@ -0,0 +1,290 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = { 'everness:coral_forest_under' }
|
||||
})
|
||||
|
||||
--
|
||||
-- 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 = { 'everness:coral_forest_under' },
|
||||
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 = { 'everness:coral_forest_under' },
|
||||
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 = { 'everness:coral_forest_under' },
|
||||
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: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 = { 'everness:coral_forest_under' },
|
||||
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 = { 'everness:coral_forest_under' },
|
||||
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 = { 'everness:coral_forest_under' },
|
||||
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 = { 'everness:coral_forest_under' },
|
||||
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 = core.get_biome_id('everness:coral_forest_under')
|
||||
|
||||
local deco_id_coral_forest_under_coral_tree_bioluminescent = core.get_decoration_id('everness:coral_forest_under_coral_tree_bioluminescent')
|
||||
|
||||
local schem_bioluminescent_tree = core.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 = Everness.to_set(core.registered_decorations['everness:coral_forest_under_coral_tree_bioluminescent'].place_on)
|
||||
|
||||
Everness:register_gen_notify_decoration(deco_id_coral_forest_under_coral_tree_bioluminescent)
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:coral_forest_under',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_coral_forest_under]) or table.indexof(biomemap, biome_id_everness_coral_forest_under) ~= -1
|
||||
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 = core.get_node(marker_pos)
|
||||
local place_on_node = core.get_node(pos)
|
||||
|
||||
if marker_node and marker_node.name == 'everness:marker' then
|
||||
-- remove marker
|
||||
core.remove_node(marker_pos)
|
||||
|
||||
if place_on_node and bioluminescent_tree_place_on[place_on_node.name] then
|
||||
-- enough air to place structure ?
|
||||
local positions = core.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
|
||||
core.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'
|
||||
)
|
||||
|
||||
-- core.log('action', '[Everness] Coral Tree Bioluminescent was placed at ' .. pos:to_string())
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
@@ -0,0 +1,569 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.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 = core.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 = core.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,
|
||||
param2 = 0,
|
||||
param2_max = 239,
|
||||
})
|
||||
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)
|
||||
|
||||
--
|
||||
-- On Generated
|
||||
--
|
||||
|
||||
local chance = 20
|
||||
local disp = 16
|
||||
local schem = core.get_modpath('everness') .. '/schematics/everness_quartz_temple.mts'
|
||||
local size = { x = 16, y = 13, z = 16 }
|
||||
local math_sin = math.sin
|
||||
local math_floor = math.floor
|
||||
local math_sqrt = math.sqrt
|
||||
local math_min = math.min
|
||||
local math_max = math.max
|
||||
|
||||
local size_x = math_floor(size.x / 2)
|
||||
local size_z = math_floor(size.z / 2)
|
||||
local y_dis = 1
|
||||
|
||||
local c_dirt_with_crystal_grass = core.get_content_id('everness:dirt_with_crystal_grass')
|
||||
|
||||
local c_megalith_1 = core.get_content_id('everness:crystal_megalith_1')
|
||||
local c_megalith_2 = core.get_content_id('everness:crystal_megalith_2')
|
||||
local c_megalith_3 = core.get_content_id('everness:crystal_megalith_3')
|
||||
local c_megalith_4 = core.get_content_id('everness:crystal_megalith_4')
|
||||
local c_megalith_5 = core.get_content_id('everness:crystal_megalith_5')
|
||||
|
||||
local c_cluster = core.get_content_id('everness:crystal_cluster')
|
||||
|
||||
local is_replaceable = {
|
||||
[core.CONTENT_AIR] = true,
|
||||
[core.get_content_id('everness:crystal_grass_1')] = true,
|
||||
[core.get_content_id('everness:crystal_grass_2')] = true,
|
||||
[core.get_content_id('everness:crystal_grass_3')] = true,
|
||||
}
|
||||
|
||||
local np_crystal_grass = {
|
||||
offset = 0,
|
||||
scale = 1,
|
||||
spread = { x = 200, y = 200, z = 200 },
|
||||
seed = 329,
|
||||
octaves = 3,
|
||||
persist = 0.6,
|
||||
}
|
||||
|
||||
local nobj_crystal_grass = nil
|
||||
local grass_noise_buf = {}
|
||||
local points_x = {}
|
||||
local points_z = {}
|
||||
|
||||
local function place_megalith(data, p2data, vi, ystride, height, pal_idx, rot)
|
||||
local p2 = pal_idx * 32 + rot
|
||||
if height == 9 then
|
||||
-- 9-tall Megalith: 1 -> 2 -> 2 -> 3 -> 3 -> 4 -> 4 -> 4 -> 5
|
||||
data[vi + ystride * 1] = c_megalith_1
|
||||
data[vi + ystride * 2] = c_megalith_2
|
||||
data[vi + ystride * 3] = c_megalith_2
|
||||
data[vi + ystride * 4] = c_megalith_3
|
||||
data[vi + ystride * 5] = c_megalith_3
|
||||
data[vi + ystride * 6] = c_megalith_4
|
||||
data[vi + ystride * 7] = c_megalith_4
|
||||
data[vi + ystride * 8] = c_megalith_4
|
||||
data[vi + ystride * 9] = c_megalith_5
|
||||
for i = 1, 9 do p2data[vi + ystride * i] = p2 end
|
||||
elseif height == 7 then
|
||||
-- 7-tall Megalith: 1 -> 2 -> 3 -> 3 -> 4 -> 4 -> 5
|
||||
data[vi + ystride * 1] = c_megalith_1
|
||||
data[vi + ystride * 2] = c_megalith_2
|
||||
data[vi + ystride * 3] = c_megalith_3
|
||||
data[vi + ystride * 4] = c_megalith_3
|
||||
data[vi + ystride * 5] = c_megalith_4
|
||||
data[vi + ystride * 6] = c_megalith_4
|
||||
data[vi + ystride * 7] = c_megalith_5
|
||||
for i = 1, 7 do p2data[vi + ystride * i] = p2 end
|
||||
elseif height == 5 then
|
||||
-- 5-tall Megalith: 1 -> 2 -> 3 -> 4 -> 5
|
||||
data[vi + ystride * 1] = c_megalith_1
|
||||
data[vi + ystride * 2] = c_megalith_2
|
||||
data[vi + ystride * 3] = c_megalith_3
|
||||
data[vi + ystride * 4] = c_megalith_4
|
||||
data[vi + ystride * 5] = c_megalith_5
|
||||
for i = 1, 5 do p2data[vi + ystride * i] = p2 end
|
||||
elseif height == 3 then
|
||||
-- 3-tall Spire: 1 -> 4 -> 5
|
||||
data[vi + ystride * 1] = c_megalith_1
|
||||
data[vi + ystride * 2] = c_megalith_4
|
||||
data[vi + ystride * 3] = c_megalith_5
|
||||
for i = 1, 3 do p2data[vi + ystride * i] = p2 end
|
||||
end
|
||||
end
|
||||
|
||||
local np_heat = {
|
||||
offset = 50,
|
||||
scale = 50,
|
||||
spread = { x = 1000, y = 1000, z = 1000 },
|
||||
seed = 5349,
|
||||
octaves = 3,
|
||||
persist = 0.5,
|
||||
}
|
||||
|
||||
local nobj_heat = nil
|
||||
|
||||
local function get_heat_at(x, z, col_idx, heatmap)
|
||||
if heatmap and heatmap[col_idx] then
|
||||
return heatmap[col_idx]
|
||||
end
|
||||
if not nobj_heat then
|
||||
if core.get_perlin then
|
||||
nobj_heat = core.get_perlin(np_heat)
|
||||
elseif PerlinNoise then
|
||||
nobj_heat = PerlinNoise(np_heat)
|
||||
end
|
||||
end
|
||||
if nobj_heat then
|
||||
return nobj_heat:get_2d({ x = x, y = z })
|
||||
end
|
||||
return 35
|
||||
end
|
||||
|
||||
local function get_crystal_palette_index(heat, x, z)
|
||||
-- Map Crystal Forest biome heat window (~18 to ~52, centered at heat_point 35) to full palette (0 to 7)
|
||||
local min_biome_heat = 18.0
|
||||
local max_biome_heat = 52.0
|
||||
local norm_heat = math_min(math_max((heat - min_biome_heat) / (max_biome_heat - min_biome_heat), 0.0), 1.0)
|
||||
local base_idx = math_floor(norm_heat * 8)
|
||||
if base_idx >= 8 then
|
||||
base_idx = 7
|
||||
end
|
||||
-- Subtle micro-variation (+/- 1 palette step) based on local position
|
||||
local jitter = ((x * 13 + z * 17) % 3) - 1
|
||||
local pal_idx = base_idx + jitter
|
||||
if pal_idx < 0 then
|
||||
pal_idx = 0
|
||||
elseif pal_idx > 7 then
|
||||
pal_idx = 7
|
||||
end
|
||||
return pal_idx
|
||||
end
|
||||
|
||||
local biome_id_everness_crystal_forest = core.get_biome_id('everness:crystal_forest')
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:crystal_forest',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_crystal_forest]) or table.indexof(biomemap, biome_id_everness_crystal_forest) ~= -1
|
||||
end,
|
||||
on_data = function(minp, maxp, area, data, p2data, gennotify, rand, shared_args)
|
||||
local cell_size = 192
|
||||
local max_edge_dist = 68.0
|
||||
local ystride = area.ystride
|
||||
local chunk_size_x = maxp.x - minp.x + 1
|
||||
local chunk_size_z = maxp.z - minp.z + 1
|
||||
|
||||
-- 1. Precompute 2D grass noise flat buffer in C++ (eliminates thousands of Lua-C calls & table allocations)
|
||||
if not nobj_crystal_grass then
|
||||
if core.get_perlin_map then
|
||||
nobj_crystal_grass = core.get_perlin_map(np_crystal_grass, { x = chunk_size_x, y = chunk_size_z, z = 1 })
|
||||
elseif PerlinNoiseMap then
|
||||
nobj_crystal_grass = PerlinNoiseMap(np_crystal_grass, { x = chunk_size_x, y = chunk_size_z, z = 1 })
|
||||
end
|
||||
end
|
||||
if nobj_crystal_grass then
|
||||
nobj_crystal_grass:get_2d_map_flat({ x = minp.x, y = minp.z }, grass_noise_buf)
|
||||
end
|
||||
|
||||
-- 2. Precompute the small set of Worley feature points covering this chunk once (reduces trig calls by 99.99%)
|
||||
local min_gx = math_floor(minp.x / cell_size) - 1
|
||||
local max_gx = math_floor(maxp.x / cell_size) + 1
|
||||
local min_gz = math_floor(minp.z / cell_size) - 1
|
||||
local max_gz = math_floor(maxp.z / cell_size) + 1
|
||||
|
||||
local num_pts = 0
|
||||
for cx = min_gx, max_gx do
|
||||
for cz = min_gz, max_gz do
|
||||
local n = math_sin(cx * 127.1 + cz * 311.7 + 8741.3) * 43758.5453
|
||||
local rx = (n - math_floor(n)) * 0.6 + 0.2
|
||||
local n2 = math_sin(cx * 269.5 + cz * 183.3 + 4521.7) * 43758.5453
|
||||
local rz = (n2 - math_floor(n2)) * 0.6 + 0.2
|
||||
num_pts = num_pts + 1
|
||||
points_x[num_pts] = (cx + rx) * cell_size
|
||||
points_z[num_pts] = (cz + rz) * cell_size
|
||||
end
|
||||
end
|
||||
|
||||
local heatmap = core.get_mapgen_object('heatmap')
|
||||
|
||||
for z = minp.z, maxp.z do
|
||||
local col_z_offset = (z - minp.z) * chunk_size_x
|
||||
for x = minp.x, maxp.x do
|
||||
local col_idx = col_z_offset + (x - minp.x) + 1
|
||||
|
||||
-- Veins only generate in the opposite noise spectrum where crystal grass does not grow
|
||||
if not grass_noise_buf[col_idx] or grass_noise_buf[col_idx] <= 0 then
|
||||
-- Fast Worley F1/F2 distance from precomputed feature points
|
||||
local min1_sq = 1e9
|
||||
local min2_sq = 1e9
|
||||
for i = 1, num_pts do
|
||||
local dx = x - points_x[i]
|
||||
local dz = z - points_z[i]
|
||||
local dist_sq = dx * dx + dz * dz
|
||||
if dist_sq < min1_sq then
|
||||
min2_sq = min1_sq
|
||||
min1_sq = dist_sq
|
||||
elseif dist_sq < min2_sq then
|
||||
min2_sq = dist_sq
|
||||
end
|
||||
end
|
||||
local edge_dist = math_sqrt(min2_sq) - math_sqrt(min1_sq)
|
||||
|
||||
-- Crystals generate along the white Worley cell boundary veins
|
||||
if edge_dist <= max_edge_dist then
|
||||
-- Density gradient: concentration at vein center (~25%), smoothly thinning outward (~4%)
|
||||
local t = edge_dist / max_edge_dist
|
||||
local spawn_chance = 0.25 * ((1.0 - t) ^ 1.1)
|
||||
local pos_rnd = (math_sin(x * 374.1 + z * 513.7 + 8741.3) * 43758.5453) % 1.0
|
||||
|
||||
if pos_rnd < spawn_chance then
|
||||
local vi = area:index(x, maxp.y - 9, z)
|
||||
for y = maxp.y - 9, minp.y, -1 do
|
||||
if data[vi] == c_dirt_with_crystal_grass then
|
||||
local vi_up1 = vi + ystride
|
||||
if is_replaceable[data[vi_up1]] then
|
||||
local rot = (x * 7 + z * 13) % 4
|
||||
local heat = get_heat_at(x, z, col_idx, heatmap)
|
||||
local pal_idx = get_crystal_palette_index(heat, x, z)
|
||||
|
||||
if edge_dist <= 8.0 then
|
||||
-- Tier 1 (Center Spine): 9-tall Megaliths
|
||||
place_megalith(data, p2data, vi, ystride, 9, pal_idx, rot)
|
||||
elseif edge_dist <= 18.0 then
|
||||
-- Tier 2: 7-tall Megaliths
|
||||
place_megalith(data, p2data, vi, ystride, 7, pal_idx, rot)
|
||||
elseif edge_dist <= 30.0 then
|
||||
-- Tier 3: 5-tall Megaliths
|
||||
place_megalith(data, p2data, vi, ystride, 5, pal_idx, rot)
|
||||
elseif edge_dist <= 46.0 then
|
||||
-- Tier 4: 3-tall Spires
|
||||
place_megalith(data, p2data, vi, ystride, 3, pal_idx, rot)
|
||||
else
|
||||
-- Tier 5 (Outer Spread): 1-tall Glass Crystal Clusters
|
||||
data[vi + ystride * 1] = c_cluster
|
||||
p2data[vi + ystride * 1] = pal_idx * 32 + rot
|
||||
end
|
||||
end
|
||||
break
|
||||
end
|
||||
vi = vi - ystride
|
||||
end
|
||||
end
|
||||
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 center_x = minp.x + math_floor(sidelength / 2) + rand:next(0, disp)
|
||||
local center_z = minp.z + math_floor(sidelength / 2) + rand:next(0, disp)
|
||||
local vi = area:index(center_x, minp.y, center_z)
|
||||
local ystride = area.ystride
|
||||
shared_args.schem_positions = {}
|
||||
|
||||
for y = minp.y, maxp.y do
|
||||
if data[vi + ystride] == core.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 = core.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 >= math_floor((size.x * size.z) * 0.7) then
|
||||
-- enough air to place structure ?
|
||||
local air_positions = core.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
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.log('action', '[Everness] Quartz Temple was placed at ' .. schem_pos:to_string())
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
vi = vi + ystride
|
||||
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 = core.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
|
||||
})
|
||||
@@ -0,0 +1,317 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = { 'everness:crystal_forest_deep_ocean' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
schematic = core.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 = { 'everness:crystal_forest_deep_ocean' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
schematic = core.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 = { 'everness:crystal_forest_deep_ocean' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
schematic = core.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 = { 'everness:crystal_forest_deep_ocean' },
|
||||
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 = { 'everness:crystal_forest_deep_ocean' },
|
||||
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 = { 'everness:crystal_forest_deep_ocean' },
|
||||
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 = { 'everness:crystal_forest_deep_ocean' },
|
||||
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 = core.get_content_id('mapgen_water_source')
|
||||
local c_everness_crystal_forest_deep_ocean_sand = core.get_content_id('everness:crystal_forest_deep_ocean_sand')
|
||||
local c_everness_crystal_forest_deep_ocean_coral_plant_1 = core.get_content_id('everness:crystal_forest_deep_ocean_coral_plant_1')
|
||||
local c_everness_crystal_forest_deep_ocean_coral_plant_2 = core.get_content_id('everness:crystal_forest_deep_ocean_coral_plant_2')
|
||||
local c_everness_crystal_forest_deep_ocean_coral_plant_3 = core.get_content_id('everness:crystal_forest_deep_ocean_coral_plant_3')
|
||||
local c_everness_crystal_forest_deep_ocean_coral_1 = core.get_content_id('everness:crystal_forest_deep_ocean_coral_1')
|
||||
local c_everness_crystal_forest_deep_ocean_coral_2 = core.get_content_id('everness:crystal_forest_deep_ocean_coral_2')
|
||||
local c_everness_crystal_forest_deep_ocean_coral_3 = core.get_content_id('everness:crystal_forest_deep_ocean_coral_3')
|
||||
-- Biome IDs
|
||||
local biome_id_everness_crystal_forest_deep_ocean = core.get_biome_id('everness:crystal_forest_deep_ocean')
|
||||
|
||||
local chance = 30
|
||||
local schem = core.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, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_crystal_forest_deep_ocean]) or table.indexof(biomemap, biome_id_everness_crystal_forest_deep_ocean) ~= -1
|
||||
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
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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 = core.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
|
||||
})
|
||||
@@ -0,0 +1,337 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.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 = core.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(core.settings:get('water_level')) or 1
|
||||
|
||||
local schem = core.read_schematic(core.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 = core.read_schematic(core.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 = core.get_content_id('everness:crystal_sand')
|
||||
local c_water_source = core.get_content_id('mapgen_water_source')
|
||||
|
||||
local biome_id_everness_crystal_forest_dunes = core.get_biome_id('everness:crystal_forest_dunes')
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:crystal_forest_dunes',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_crystal_forest_dunes]) or 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] == core.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 = core.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 = core.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
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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,
|
||||
core.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,
|
||||
core.CONTENT_AIR
|
||||
},
|
||||
data,
|
||||
area
|
||||
)
|
||||
|
||||
if #space_indexes > (size_shrine.x * size_shrine.y * size_shrine.z) / 2 then
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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 = core.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
|
||||
})
|
||||
@@ -0,0 +1,147 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = { 'everness:crystal_forest_ocean' }
|
||||
})
|
||||
|
||||
-- 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_ocean' }
|
||||
})
|
||||
|
||||
-- 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_ocean' }
|
||||
})
|
||||
|
||||
--
|
||||
-- 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 = { 'everness:crystal_forest_ocean' },
|
||||
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'
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,136 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = { 'everness:crystal_forest_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 = { 'everness:crystal_forest_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 = { 'everness:crystal_forest_shore' }
|
||||
})
|
||||
|
||||
--
|
||||
-- Register decorations
|
||||
--
|
||||
|
||||
Everness:register_decoration({
|
||||
name = 'everness:crystal_forest_shore_crystal_waterlily',
|
||||
deco_type = 'simple',
|
||||
place_on = { 'everness:crystal_sand' },
|
||||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = -0.12,
|
||||
scale = 0.3,
|
||||
spread = { x = 200, y = 200, z = 200 },
|
||||
seed = 33,
|
||||
octaves = 3,
|
||||
persist = 0.7
|
||||
},
|
||||
biomes = { 'everness:crystal_forest_shore' },
|
||||
y_max = y_max,
|
||||
y_min = y_max,
|
||||
decoration = 'everness:crystal_waterlily',
|
||||
param2 = 0,
|
||||
param2_max = 3,
|
||||
place_offset_y = 1,
|
||||
})
|
||||
@@ -0,0 +1,446 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = { 'everness:crystal_forest_under' },
|
||||
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 = { 'everness:crystal_forest_under' },
|
||||
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 = { 'everness:crystal_forest_under' },
|
||||
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_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 = { 'everness:crystal_forest_under' },
|
||||
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 = { 'everness:crystal_forest_under' },
|
||||
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 = { 'everness:crystal_forest_under' },
|
||||
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 = 0,
|
||||
param2_max = 239,
|
||||
})
|
||||
|
||||
Everness:register_decoration({
|
||||
name = 'everness:crystal_forest_under_twisted_crystal_spire',
|
||||
deco_type = 'simple',
|
||||
place_on = {
|
||||
'everness:crystal_cave_dirt_with_moss',
|
||||
'everness:crystal_moss_block'
|
||||
},
|
||||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = -0.05,
|
||||
scale = 0.1,
|
||||
spread = { x = 100, y = 100, z = 100 },
|
||||
seed = 801,
|
||||
octaves = 3,
|
||||
persist = 0.7
|
||||
},
|
||||
biomes = { 'everness:crystal_forest_under' },
|
||||
y_max = y_max - 500 > y_min and y_max - 500 or y_max,
|
||||
y_min = y_min,
|
||||
decoration = 'everness:twisted_crystal_spire',
|
||||
flags = 'all_floors',
|
||||
param2 = 0,
|
||||
param2_max = 239,
|
||||
})
|
||||
|
||||
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 = { 'everness:crystal_forest_under' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
decoration = {
|
||||
'everness:crystal_cyan',
|
||||
'everness:crystal_purple',
|
||||
'everness:crystal_orange'
|
||||
},
|
||||
flags = 'all_ceilings',
|
||||
})
|
||||
|
||||
--
|
||||
-- On Generated
|
||||
--
|
||||
|
||||
local math_floor = math.floor
|
||||
local math_sin = math.sin
|
||||
|
||||
local floor_nodes = {}
|
||||
local function register_floor_node(name)
|
||||
local id = core.get_content_id(name)
|
||||
if id and id ~= core.CONTENT_IGNORE and id ~= core.CONTENT_AIR then
|
||||
floor_nodes[id] = true
|
||||
end
|
||||
end
|
||||
register_floor_node('everness:crystal_cave_dirt_with_moss')
|
||||
register_floor_node('everness:crystal_moss_block')
|
||||
|
||||
local c_air = core.get_content_id('air')
|
||||
|
||||
local replaceable_nodes = {
|
||||
[c_air] = true,
|
||||
}
|
||||
local function register_replaceable_node(name)
|
||||
local id = core.get_content_id(name)
|
||||
if id and id ~= core.CONTENT_IGNORE and id ~= core.CONTENT_AIR then
|
||||
replaceable_nodes[id] = true
|
||||
end
|
||||
end
|
||||
register_replaceable_node('everness:twisted_crystal_grass')
|
||||
register_replaceable_node('everness:twisted_crystal_spire')
|
||||
register_replaceable_node('everness:crystal_cyan')
|
||||
register_replaceable_node('everness:crystal_purple')
|
||||
register_replaceable_node('everness:crystal_orange')
|
||||
|
||||
local biome_id_everness_crystal_forest_under = core.get_biome_id('everness:crystal_forest_under')
|
||||
|
||||
local deco_id_crystal_forest_under_crystal_sphere_cluster = core.get_decoration_id('everness:crystal_forest_under_crystal_sphere_cluster')
|
||||
|
||||
-- `core.read_schematic` here so we don't cache the schem file, otherwise `replacements` will not work
|
||||
local schem_crystal_sphere_cluster = core.read_schematic(core.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 = Everness.to_set(core.registered_decorations['everness:crystal_forest_under_crystal_sphere_cluster'].place_on)
|
||||
|
||||
Everness:register_gen_notify_decoration({
|
||||
deco_id_crystal_forest_under_crystal_sphere_cluster
|
||||
})
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:crystal_forest_under',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_crystal_forest_under]) or table.indexof(biomemap, biome_id_everness_crystal_forest_under) ~= -1
|
||||
end,
|
||||
-- 1. on_data: Raw VoxelManip content/param2 manipulation (committed automatically via set_data)
|
||||
on_data = function(minp, maxp, area, data, p2data, gennotify, rand, shared_args, biomemap)
|
||||
--
|
||||
-- Crystal Clusters (Marker-free Worley Cellular Noise L-System)
|
||||
--
|
||||
local cell_size = 32
|
||||
local min_gx = math_floor(minp.x / cell_size) - 1
|
||||
local max_gx = math_floor(maxp.x / cell_size) + 1
|
||||
local min_gz = math_floor(minp.z / cell_size) - 1
|
||||
local max_gz = math_floor(maxp.z / cell_size) + 1
|
||||
local ystride = area.ystride
|
||||
local chunk_size_x = maxp.x - minp.x + 1
|
||||
|
||||
for cx = min_gx, max_gx do
|
||||
for cz = min_gz, max_gz do
|
||||
local n = math_sin(cx * 127.1 + cz * 311.7 + 5432.1) * 43758.5453
|
||||
local rand_val = (n - math_floor(n))
|
||||
|
||||
-- 80% chance cell has a crystal cluster, 20% empty spacing
|
||||
if rand_val < 0.80 then
|
||||
local n2 = math_sin(cx * 269.5 + cz * 183.3 + 9876.5) * 43758.5453
|
||||
local rx = (n2 - math_floor(n2)) * 0.7 + 0.15
|
||||
local n3 = math_sin(cx * 419.2 + cz * 371.9 + 1357.9) * 43758.5453
|
||||
local rz = (n3 - math_floor(n3)) * 0.7 + 0.15
|
||||
|
||||
local seed_x = math_floor((cx + rx) * cell_size)
|
||||
local seed_z = math_floor((cz + rz) * cell_size)
|
||||
|
||||
if seed_x >= minp.x and seed_x <= maxp.x and seed_z >= minp.z and seed_z <= maxp.z then
|
||||
-- Check column biome
|
||||
local col_idx = (seed_z - minp.z) * chunk_size_x + (seed_x - minp.x) + 1
|
||||
if not biomemap or not biomemap[col_idx] or biomemap[col_idx] == biome_id_everness_crystal_forest_under then
|
||||
-- Color zoning (Orange 45%, Cyan 30%, Purple 25%)
|
||||
local color_choice = math_floor((rand_val / 0.80) * 3) % 3
|
||||
local rand_color = (color_choice == 0 and 'orange') or (color_choice == 1 and 'cyan') or 'purple'
|
||||
|
||||
-- Scan vertical column for cavern floor surface
|
||||
for y = maxp.y - 1, minp.y, -1 do
|
||||
local vi = area:index(seed_x, y, seed_z)
|
||||
local node_id = data[vi]
|
||||
local above_id = data[vi + ystride]
|
||||
|
||||
if floor_nodes[node_id] and replaceable_nodes[above_id] then
|
||||
-- Check vertical clearance (counting air and replaceable grass/decorations)
|
||||
local clearance = 0
|
||||
for h = 1, 12 do
|
||||
local check_y = y + h
|
||||
if check_y <= maxp.y and replaceable_nodes[data[vi + h * ystride]] then
|
||||
clearance = clearance + 1
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if clearance >= 2 then
|
||||
local stage = 1
|
||||
if clearance >= 9 and rand_val < 0.25 then
|
||||
stage = 3 -- Grand Cavern Spire
|
||||
elseif clearance >= 5 and rand_val < 0.55 then
|
||||
stage = 2 -- Medium Cluster
|
||||
end
|
||||
|
||||
local cluster_pos = vector.new(seed_x, y + 1, seed_z)
|
||||
Everness.spawn_crystal_cluster_vmanip(
|
||||
nil,
|
||||
area,
|
||||
data,
|
||||
p2data,
|
||||
cluster_pos,
|
||||
rand_color,
|
||||
stage,
|
||||
rand
|
||||
)
|
||||
end
|
||||
break -- Placed at highest valid floor in this column
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
-- 2. after_set_data: Schematics placement on VoxelManip
|
||||
after_set_data = function(minp, maxp, vm, area, data, p2data, gennotify, rand, shared_args)
|
||||
|
||||
--
|
||||
-- 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 = core.get_node(marker_pos)
|
||||
local place_on_node = core.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
|
||||
core.remove_node(marker_pos)
|
||||
|
||||
if place_on_node and crystal_sphere_cluster_place_on[place_on_node.name] then
|
||||
-- enough air to place structure ?
|
||||
local positions = core.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
|
||||
|
||||
core.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'
|
||||
)
|
||||
|
||||
-- core.log('action', '[Everness] Crystal Sphere Cluster ' .. (rand_color or 'orange') .. ' was placed at ' .. pos:to_string())
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
@@ -0,0 +1,454 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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_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 = core.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 = core.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,
|
||||
param2 = 0,
|
||||
param2_max = 239,
|
||||
})
|
||||
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)
|
||||
|
||||
local function register_cursed_bone_decoration(bone_id, node_name, offset, param2_max)
|
||||
Everness:register_decoration({
|
||||
name = 'everness:cursed_lands_bones_' .. bone_id,
|
||||
deco_type = 'simple',
|
||||
place_on = { 'everness:dirt_with_cursed_grass' },
|
||||
sidelen = 16,
|
||||
noise_params = {
|
||||
offset = offset,
|
||||
scale = -0.02, -- Gentle item density inside each cluster
|
||||
spread = { x = 200, y = 200, z = 200 }, -- Matched to red castor spread
|
||||
seed = 329, -- Matched to red castor seed
|
||||
octaves = 5, -- Extra octaves create high-frequency ripples inside the empty areas
|
||||
persist = 0.6
|
||||
},
|
||||
biomes = { 'everness:cursed_lands' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
decoration = node_name,
|
||||
param2 = 0,
|
||||
param2_max = param2_max,
|
||||
})
|
||||
end
|
||||
|
||||
-- Cursed Bones (thresholds set so clusters appear throughout the empty non-castor areas)
|
||||
register_cursed_bone_decoration('cursed_bone_1', 'everness:cursed_bone_1', -0.011, 255) -- colordegrotate
|
||||
register_cursed_bone_decoration('cursed_bone_2', 'everness:cursed_bone_2', -0.009, 239) -- degrotate
|
||||
register_cursed_bone_decoration('cursed_bone_3', 'everness:cursed_bone_3', -0.010, 239) -- degrotate
|
||||
|
||||
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_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 = core.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 = core.get_modpath('everness') .. '/schematics/everness_cursed_bush.mts',
|
||||
flags = 'place_center_x, place_center_z',
|
||||
})
|
||||
|
||||
--
|
||||
-- On Generated
|
||||
--
|
||||
|
||||
local chance = 20
|
||||
local disp = 16
|
||||
local schem = core.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 = core.get_content_id('everness:dirt_with_cursed_grass')
|
||||
|
||||
local biome_id_everness_cursed_lands = core.get_biome_id('everness:cursed_lands')
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:cursed_lands',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_cursed_lands]) or 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] == core.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)
|
||||
|
||||
-- find floor big enough
|
||||
local positions = core.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_cursed_grass'
|
||||
}
|
||||
)
|
||||
|
||||
if #positions < size.x * size.z then
|
||||
-- not enough space
|
||||
return
|
||||
end
|
||||
|
||||
-- enough air to place structure ?
|
||||
local air_positions = core.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
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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 = core.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
|
||||
})
|
||||
@@ -0,0 +1,317 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = { 'everness:cursed_lands_deep_ocean' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
schematic = core.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 = { 'everness:cursed_lands_deep_ocean' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
schematic = core.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 = { 'everness:cursed_lands_deep_ocean' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
schematic = core.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 = { 'everness:cursed_lands_deep_ocean' },
|
||||
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 = { 'everness:cursed_lands_deep_ocean' },
|
||||
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 = { 'everness:cursed_lands_deep_ocean' },
|
||||
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 = { 'everness:cursed_lands_deep_ocean' },
|
||||
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 = core.get_content_id('mapgen_water_source')
|
||||
local c_everness_cursed_lands_deep_ocean_sand = core.get_content_id('everness:cursed_lands_deep_ocean_sand')
|
||||
local c_everness_cursed_lands_deep_ocean_coral_plant_anemone = core.get_content_id('everness:cursed_lands_deep_ocean_coral_plant_anemone')
|
||||
local c_everness_cursed_lands_deep_ocean_coral_plant_darkilluma = core.get_content_id('everness:cursed_lands_deep_ocean_coral_plant_darkilluma')
|
||||
local c_everness_cursed_lands_deep_ocean_coral_plant_demon = core.get_content_id('everness:cursed_lands_deep_ocean_coral_plant_demon')
|
||||
local c_everness_cursed_lands_deep_ocean_coral_alcyonacea = core.get_content_id('everness:cursed_lands_deep_ocean_coral_alcyonacea')
|
||||
local c_everness_cursed_lands_deep_ocean_coral_ostracod = core.get_content_id('everness:cursed_lands_deep_ocean_coral_ostracod')
|
||||
local c_everness_cursed_lands_deep_ocean_coral_octocurse = core.get_content_id('everness:cursed_lands_deep_ocean_coral_octocurse')
|
||||
-- Biome IDs
|
||||
local biome_id_everness_cursed_lands_deep_ocean = core.get_biome_id('everness:cursed_lands_deep_ocean')
|
||||
|
||||
local chance = 30
|
||||
local schem = core.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, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_cursed_lands_deep_ocean]) or table.indexof(biomemap, biome_id_everness_cursed_lands_deep_ocean) ~= -1
|
||||
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
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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 = core.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
|
||||
})
|
||||
@@ -0,0 +1,348 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.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(core.settings:get('water_level')) or 1
|
||||
|
||||
local schem_cursed_cabin = core.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 = core.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 = core.get_content_id('everness:cursed_sand')
|
||||
local c_water_source = core.get_content_id('mapgen_water_source')
|
||||
|
||||
local biome_id_everness_cursed_lands_dunes = core.get_biome_id('everness:cursed_lands_dunes')
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:cursed_lands_dunes',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_cursed_lands_dunes]) or 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] == core.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 = core.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 = core.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
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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,
|
||||
core.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,
|
||||
core.CONTENT_AIR
|
||||
},
|
||||
data,
|
||||
area
|
||||
)
|
||||
|
||||
if #space_indexes > (size_ocean_island.x * size_ocean_island.y * size_ocean_island.z) / 2 then
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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 = core.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
|
||||
})
|
||||
@@ -0,0 +1,213 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = { 'everness:cursed_lands_ocean' }
|
||||
})
|
||||
|
||||
-- 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 = { 'everness:cursed_lands_ocean' }
|
||||
})
|
||||
|
||||
-- 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 = { 'everness:cursed_lands_ocean' }
|
||||
})
|
||||
|
||||
-- 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 = { 'everness:cursed_lands_ocean' }
|
||||
})
|
||||
|
||||
-- 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_ocean' }
|
||||
})
|
||||
|
||||
--
|
||||
-- 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 = { 'everness:cursed_lands_ocean' },
|
||||
y_max = y_max,
|
||||
y_min = y_max - (y_max + 1),
|
||||
schematic = core.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 = { 'everness:cursed_lands_ocean' },
|
||||
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,
|
||||
})
|
||||
@@ -0,0 +1,293 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.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 = core.get_modpath('everness') .. '/schematics/everness_marsh_grass.mts',
|
||||
})
|
||||
|
||||
--
|
||||
-- On Generated
|
||||
--
|
||||
|
||||
local chance = 30
|
||||
local disp = 16
|
||||
local schem = core.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 = core.get_content_id('everness:cursed_stone')
|
||||
local c_water_source = core.get_content_id('mapgen_water_source')
|
||||
|
||||
local biome_id_everness_cursed_lands_swamp = core.get_biome_id('everness:cursed_lands_swamp')
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:cursed_lands_swamp',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_cursed_lands_swamp]) or 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 = core.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 = core.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
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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 = core.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
|
||||
})
|
||||
@@ -0,0 +1,296 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = { 'everness:cursed_lands_under' },
|
||||
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 = { 'everness:cursed_lands_under' },
|
||||
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 = { 'everness:cursed_lands_under' },
|
||||
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 = { 'everness:cursed_lands_under' },
|
||||
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 = { 'everness:cursed_lands_under' },
|
||||
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 - 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: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 = { 'everness:cursed_lands_under' },
|
||||
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 = { 'everness:cursed_lands_under' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
decoration = {
|
||||
'everness:ivis_moss',
|
||||
},
|
||||
flags = 'all_floors',
|
||||
param2 = 0,
|
||||
param2_max = 239,
|
||||
})
|
||||
|
||||
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 = { 'everness:cursed_lands_under' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
decoration = { 'everness:cobweb' },
|
||||
flags = 'all_floors'
|
||||
})
|
||||
|
||||
--
|
||||
-- On Generated
|
||||
--
|
||||
|
||||
local biome_id_everness_cursed_lands_under = core.get_biome_id('everness:cursed_lands_under')
|
||||
|
||||
local deco_id_cursed_lands_under_cursed_dream_tree = core.get_decoration_id('everness:cursed_lands_under_cursed_dream_tree')
|
||||
|
||||
local schem_cursed_dream_tree = core.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 = Everness.to_set(core.registered_decorations['everness:cursed_lands_under_cursed_dream_tree'].place_on)
|
||||
|
||||
Everness:register_gen_notify_decoration(deco_id_cursed_lands_under_cursed_dream_tree)
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:cursed_lands_under',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_cursed_lands_under]) or table.indexof(biomemap, biome_id_everness_cursed_lands_under) ~= -1
|
||||
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 = core.get_node(marker_pos)
|
||||
local place_on_node = core.get_node(pos)
|
||||
|
||||
if marker_node and marker_node.name == 'everness:marker' then
|
||||
-- remove marker
|
||||
core.remove_node(marker_pos)
|
||||
|
||||
if place_on_node and cursed_dream_tree_place_on[place_on_node.name] then
|
||||
-- enough air to place structure ?
|
||||
local positions = core.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
|
||||
core.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'
|
||||
)
|
||||
|
||||
-- core.log('action', '[Everness] Cursed Dream Tree was placed at ' .. pos:to_string())
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
@@ -0,0 +1,304 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.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 = core.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 = core.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 = core.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 = core.get_content_id('everness:forsaken_desert_sand')
|
||||
|
||||
local biome_id_everness_forsaken_desert = core.get_biome_id('everness:forsaken_desert')
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:forsaken_desert',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_forsaken_desert]) or 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] == core.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 = core.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 = core.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
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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 = core.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
|
||||
})
|
||||
@@ -0,0 +1,155 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.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 = core.get_content_id('everness:dry_ocean_dirt')
|
||||
|
||||
local biome_id_everness_forsaken_desert_ocean = core.get_biome_id('everness:forsaken_desert_ocean')
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:forsaken_desert_ocean',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_forsaken_desert_ocean]) or 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] == core.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 = core.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 = core.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
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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 = core.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
|
||||
})
|
||||
@@ -0,0 +1,331 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = { 'everness:forsaken_desert_under' },
|
||||
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 = { 'everness:forsaken_desert_under' },
|
||||
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 = { 'everness:forsaken_desert_under' },
|
||||
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 = { 'everness:forsaken_desert_under' },
|
||||
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 = { 'everness:forsaken_desert_under' },
|
||||
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 = { 'everness:forsaken_desert_under' },
|
||||
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 = { 'everness:forsaken_desert_under' },
|
||||
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 = { 'everness:forsaken_desert_under' },
|
||||
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 = core.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 = core.get_content_id('everness:forsaken_desert_sand')
|
||||
local c_forsaken_desert_chiseled_stone = core.get_content_id('everness:forsaken_desert_chiseled_stone')
|
||||
local c_forsaken_desert_brick = core.get_content_id('everness:forsaken_desert_brick')
|
||||
local c_forsaken_desert_engraved_stone = core.get_content_id('everness:forsaken_desert_engraved_stone')
|
||||
|
||||
local biome_id_everness_forsaken_desert_under = core.get_biome_id('everness:forsaken_desert_under')
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:forsaken_desert_under',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_forsaken_desert_under]) or table.indexof(biomemap, biome_id_everness_forsaken_desert_under) ~= -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] == 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 = core.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_copper',
|
||||
'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 = core.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
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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 = core.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
|
||||
})
|
||||
@@ -0,0 +1,368 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.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 = core.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 = core.read_schematic(core.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 = core.get_content_id('everness:forsaken_tundra_dirt')
|
||||
local c_everness_forsaken_tundra_dirt_with_grass = core.get_content_id('everness:forsaken_tundra_dirt_with_grass')
|
||||
local c_everness_volcanic_sulfur = core.get_content_id('everness:volcanic_sulfur')
|
||||
|
||||
local biome_id_everness_forsaken_tundra = core.get_biome_id('everness:forsaken_tundra')
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:forsaken_tundra',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_forsaken_tundra]) or 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] == core.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 = core.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 = core.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
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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 = core.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
|
||||
})
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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_beach' }
|
||||
})
|
||||
|
||||
--
|
||||
-- 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_beach' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
place_offset_y = -1,
|
||||
flags = 'force_placement',
|
||||
decoration = { 'everness:forsaken_tundra_beach_sand_with_shells' },
|
||||
})
|
||||
@@ -0,0 +1,96 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = { 'everness:forsaken_tundra_ocean' }
|
||||
})
|
||||
|
||||
--
|
||||
-- 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_ocean' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
place_offset_y = -1,
|
||||
flags = 'force_placement',
|
||||
decoration = { 'everness:forsaken_tundra_beach_sand_with_shells' },
|
||||
})
|
||||
@@ -0,0 +1,354 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = { 'everness:forsaken_tundra_under' }
|
||||
})
|
||||
|
||||
--
|
||||
-- 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 = { 'everness:forsaken_tundra_under' },
|
||||
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 = { 'everness:forsaken_tundra_under' },
|
||||
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 = { 'everness:forsaken_tundra_under' },
|
||||
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 = { 'everness:forsaken_tundra_under' },
|
||||
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 = { 'everness:forsaken_tundra_under' },
|
||||
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 = { 'everness:forsaken_tundra_under' },
|
||||
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 = { 'everness:forsaken_tundra_under' },
|
||||
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 = { 'everness:forsaken_tundra_under' },
|
||||
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 = { 'everness:forsaken_tundra_under' },
|
||||
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 = { 'everness:forsaken_tundra_under' },
|
||||
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 = core.get_biome_id('everness:forsaken_tundra_under')
|
||||
|
||||
local deco_id_everness_forsaken_tundra_under_willow_tree = core.get_decoration_id('everness:forsaken_tundra_under_willow_tree')
|
||||
|
||||
local willow_tree_schem = core.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 = Everness.to_set(core.registered_decorations['everness:forsaken_tundra_under_willow_tree'].place_on)
|
||||
|
||||
Everness:register_gen_notify_decoration(deco_id_everness_forsaken_tundra_under_willow_tree)
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:forsaken_tundra_under',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_forsaken_tundra_under]) or table.indexof(biomemap, biome_id_everness_forsaken_tundra_under) ~= -1
|
||||
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 = core.get_node(marker_pos)
|
||||
local place_on_node = core.get_node(pos)
|
||||
|
||||
if marker_node and marker_node.name == 'everness:marker' then
|
||||
-- remove marker
|
||||
core.remove_node(marker_pos)
|
||||
|
||||
if place_on_node and willow_tree_place_on[place_on_node.name] then
|
||||
-- enough air to place structure ?
|
||||
local positions = core.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
|
||||
core.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'
|
||||
)
|
||||
|
||||
-- core.log('action', '[Everness] Willow Tree was placed at ' .. pos:to_string())
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
@@ -0,0 +1,238 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.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 = core.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 = core.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 = core.read_schematic(core.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 = core.get_content_id('everness:frosted_snowblock')
|
||||
local c_frosted_ice = core.get_content_id('everness:frosted_ice')
|
||||
|
||||
local biome_id_everness_frosted_icesheet = core.get_biome_id('everness:frosted_icesheet')
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:frosted_icesheet',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_frosted_icesheet]) or 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] == core.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 = core.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 = core.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
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.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 = core.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
|
||||
})
|
||||
@@ -0,0 +1,73 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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
|
||||
|
||||
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 = { 'everness:frosted_icesheet_ocean' },
|
||||
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'
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,402 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = { 'everness:frosted_icesheet_under' }
|
||||
})
|
||||
|
||||
--
|
||||
-- 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 = { 'everness:frosted_icesheet_under' },
|
||||
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 = { 'everness:frosted_icesheet_under' },
|
||||
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 = { 'everness:frosted_icesheet_under' },
|
||||
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 = { 'everness:frosted_icesheet_under' },
|
||||
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 = { 'everness:frosted_icesheet_under' },
|
||||
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 = { 'everness:frosted_icesheet_under' },
|
||||
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 = { 'everness:frosted_icesheet_under' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
schematic = core.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 = { 'everness:frosted_icesheet_under' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
schematic = core.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 = { 'everness:frosted_icesheet_under' },
|
||||
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 = { 'everness:frosted_icesheet_under' },
|
||||
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 = core.get_decoration_id('everness:frosted_icicle_large_ceiling')
|
||||
local deco_id_frosted_icicle_large_floor = core.get_decoration_id('everness:frosted_icicle_large_floor')
|
||||
|
||||
local biome_id_everness_frosted_icesheet_under = core.get_biome_id('everness:frosted_icesheet_under')
|
||||
|
||||
Everness:register_gen_notify_decoration({
|
||||
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, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_frosted_icesheet_under]) or table.indexof(biomemap, biome_id_everness_frosted_icesheet_under) ~= -1
|
||||
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 = core.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 = core.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
|
||||
core.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 = core.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 = core.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 = core.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
|
||||
core.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 = core.get_node(pos_above)
|
||||
|
||||
Everness.stack_icicle_recursive(node_above, pos_above, incrementer, pos_marker, 'up')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
@@ -0,0 +1,815 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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' }
|
||||
})
|
||||
|
||||
--
|
||||
-- On Generated
|
||||
--
|
||||
|
||||
local function find_irecursive(tbl, c_id)
|
||||
for _, v in ipairs(tbl) do
|
||||
if type(v) == 'table' then
|
||||
if find_irecursive(v, c_id) then
|
||||
return true
|
||||
end
|
||||
elseif c_id == v then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- Get the content IDs for the nodes used
|
||||
local c_everness_mineral_water_source = core.get_content_id('everness:mineral_water_source')
|
||||
local c_everness_mineral_stone = core.get_content_id('everness:mineral_stone')
|
||||
local c_everness_mineral_stone_brick = core.get_content_id('everness:mineral_stone_brick')
|
||||
local c_everness_mineral_stone_brick_with_growth = core.get_content_id('everness:mineral_stone_brick_with_growth')
|
||||
local c_everness_mineral_stone_brick_with_flower_growth = core.get_content_id('everness:mineral_stone_brick_with_flower_growth')
|
||||
local c_everness_mineral_sand = core.get_content_id('everness:mineral_sand')
|
||||
local c_everness_mineral_sandstone = core.get_content_id('everness:mineral_sandstone')
|
||||
local c_everness_mineral_sandstone_block = core.get_content_id('everness:mineral_sandstone_block')
|
||||
local c_everness_chest = core.get_content_id('everness:chest')
|
||||
local c_everness_mineral_stone_with_coal = core.get_content_id('everness:mineral_stone_with_coal')
|
||||
local c_everness_mineral_stone_with_ceramic_sherds = core.get_content_id('everness:mineral_stone_with_ceramic_sherds')
|
||||
local c_everness_lotus_flower_white = core.get_content_id('everness:lotus_flower_white')
|
||||
local c_everness_lotus_flower_purple = core.get_content_id('everness:lotus_flower_purple')
|
||||
local c_everness_lotus_flower_pink = core.get_content_id('everness:lotus_flower_pink')
|
||||
local c_everness_lotus_lotus_leaf = core.get_content_id('everness:lotus_leaf')
|
||||
local c_everness_lotus_lotus_leaf_2 = core.get_content_id('everness:lotus_leaf_2')
|
||||
local c_everness_lotus_lotus_leaf_3 = core.get_content_id('everness:lotus_leaf_3')
|
||||
local c_everness_ceramic_pot_blank = core.get_content_id('everness:ceramic_pot_blank')
|
||||
local c_everness_ceramic_pot_flowers = core.get_content_id('everness:ceramic_pot_flowers')
|
||||
local c_everness_ceramic_pot_lines = core.get_content_id('everness:ceramic_pot_lines')
|
||||
local c_everness_ceramic_pot_tribal = core.get_content_id('everness:ceramic_pot_tribal')
|
||||
local c_everness_mineral_water_weed_1 = core.get_content_id('everness:mineral_water_weed_1')
|
||||
local c_everness_mineral_water_weed_2 = core.get_content_id('everness:mineral_water_weed_2')
|
||||
local c_everness_mineral_water_weed_3 = core.get_content_id('everness:mineral_water_weed_3')
|
||||
local c_everness_water_geyser = core.get_content_id('everness:water_geyser')
|
||||
local c_everness_rose_bush = core.get_content_id('everness:rose_bush')
|
||||
-- Biome IDs
|
||||
local biome_id_everness_mineral_waters = core.get_biome_id('everness:mineral_waters')
|
||||
|
||||
-- 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 = core.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)
|
||||
|
||||
Everness:add_to_queue_on_generated({
|
||||
name = 'everness:mineral_waters',
|
||||
can_run = function(biomemap, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_mineral_waters]) or table.indexof(biomemap, biome_id_everness_mineral_waters) ~= -1
|
||||
end,
|
||||
on_data = function(minp, maxp, area, data, p2data, gennotify, rand, shared_args, biomemap)
|
||||
biomemap = biomemap or core.get_mapgen_object('biomemap') or {}
|
||||
local csize_x = maxp.x - minp.x + 1
|
||||
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
|
||||
for x = minp.x, maxp.x do
|
||||
local b_idx_start = (z - minp.z) * csize_x + (x - minp.x) + 1
|
||||
if biomemap[b_idx_start] == biome_id_everness_mineral_waters then
|
||||
local ai = area:index(x, y, z)
|
||||
local node_cid = data[ai]
|
||||
local node_name = core.get_name_from_content_id(node_cid)
|
||||
local node_def = core.registered_nodes[node_name]
|
||||
|
||||
local is_start_tree_or_leaf = node_def and node_def.groups and (
|
||||
(node_def.groups.tree and node_def.groups.tree > 0)
|
||||
or (node_def.groups.leaves and node_def.groups.leaves > 0)
|
||||
or (node_def.groups.wood and node_def.groups.wood > 0)
|
||||
)
|
||||
|
||||
local is_start_ground = node_def and node_def.walkable
|
||||
and not is_start_tree_or_leaf
|
||||
and (
|
||||
node_cid == c_everness_mineral_sand
|
||||
or node_cid == c_everness_mineral_stone
|
||||
or (node_def.groups and (node_def.groups.sand or node_def.groups.stone or node_def.groups.soil))
|
||||
)
|
||||
|
||||
if
|
||||
data[ai + area.ystride] == core.CONTENT_AIR
|
||||
and is_start_ground
|
||||
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
|
||||
local invalid_placement = false
|
||||
|
||||
-- find space for lake (walkable rectangle)
|
||||
for li = 1, length do
|
||||
local x_rec = x + li
|
||||
|
||||
for wi = 1, width do
|
||||
local z_rec = z + wi
|
||||
local ai_rec = (ai + li) + (area.zstride * wi)
|
||||
local n_cid = data[ai_rec]
|
||||
|
||||
local is_target_biome
|
||||
-- 1. Fast path: check biomemap flat array (within chunk bounds)
|
||||
if x_rec >= minp.x and x_rec <= maxp.x and z_rec >= minp.z and z_rec <= maxp.z then
|
||||
local b_idx = (z_rec - minp.z) * csize_x + (x_rec - minp.x) + 1
|
||||
is_target_biome = (biomemap[b_idx] == biome_id_everness_mineral_waters)
|
||||
else
|
||||
-- 2. Fallback: for coordinates extending outside chunk boundaries
|
||||
local b_data = core.get_biome_data({ x = x_rec, y = y, z = z_rec })
|
||||
is_target_biome = (b_data and b_data.biome == biome_id_everness_mineral_waters)
|
||||
end
|
||||
|
||||
if n_cid == core.CONTENT_IGNORE then
|
||||
if is_target_biome then
|
||||
walkable_nodes = walkable_nodes + 1
|
||||
else
|
||||
invalid_placement = true
|
||||
break
|
||||
end
|
||||
else
|
||||
local n_name = core.get_name_from_content_id(n_cid)
|
||||
local n_def = core.registered_nodes[n_name]
|
||||
|
||||
local is_tree_or_leaf = n_def and n_def.groups and (
|
||||
(n_def.groups.tree and n_def.groups.tree > 0)
|
||||
or (n_def.groups.leaves and n_def.groups.leaves > 0)
|
||||
or (n_def.groups.wood and n_def.groups.wood > 0)
|
||||
)
|
||||
|
||||
if not is_target_biome or is_tree_or_leaf then
|
||||
invalid_placement = true
|
||||
break
|
||||
end
|
||||
|
||||
if n_def
|
||||
and n_def.walkable
|
||||
and data[ai_rec + area.ystride] == core.CONTENT_AIR
|
||||
then
|
||||
walkable_nodes = walkable_nodes + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if invalid_placement then
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- build pool (cuboid)
|
||||
if not invalid_placement and walkable_nodes >= (width * length * 0.75) then
|
||||
local pool_build_nodes_group = pool_build_nodes[rand:next(1, #pool_build_nodes)]
|
||||
-- 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]
|
||||
|
||||
local is_outer_boundary = (hi == 1 or li == 1 or li == length or wi == 1 or wi == width)
|
||||
|
||||
if is_outer_boundary then
|
||||
-- Guarantee 100% solid floor (hi == 1) and all 4 solid perimeter walls to prevent leaks
|
||||
if not find_irecursive(pool_build_nodes, current_c_id) then
|
||||
data[ai_cub] = mineral_stone
|
||||
end
|
||||
else
|
||||
-- Interior of the pool: fill 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
|
||||
end
|
||||
|
||||
-- Plug any holes along chunk boundaries where adjacent lake chunks placed water
|
||||
for y = minp.y, maxp.y do
|
||||
for z = minp.z, maxp.z do
|
||||
for x = minp.x, maxp.x do
|
||||
if x == minp.x or x == maxp.x or z == minp.z or z == maxp.z or z == minp.z + 1 or z == maxp.z - 1 then
|
||||
local ai = area:index(x, y, z)
|
||||
if data[ai] == core.CONTENT_AIR then
|
||||
local is_leaking = false
|
||||
|
||||
if x == minp.x and data[ai - 1] == c_everness_mineral_water_source then
|
||||
is_leaking = true
|
||||
elseif x == maxp.x and data[ai + 1] == c_everness_mineral_water_source then
|
||||
is_leaking = true
|
||||
elseif (z == minp.z and (data[ai - area.zstride] == c_everness_mineral_water_source or data[ai - area.zstride * 2] == c_everness_mineral_water_source))
|
||||
or (z == minp.z + 1 and data[ai - area.zstride * 2] == c_everness_mineral_water_source) then
|
||||
is_leaking = true
|
||||
elseif (z == maxp.z and (data[ai + area.zstride] == c_everness_mineral_water_source or data[ai + area.zstride * 2] == c_everness_mineral_water_source))
|
||||
or (z == maxp.z - 1 and data[ai + area.zstride * 2] == c_everness_mineral_water_source) then
|
||||
is_leaking = true
|
||||
end
|
||||
|
||||
if is_leaking then
|
||||
data[ai] = c_everness_mineral_sand
|
||||
-- Support down if there is air below so the sand wall is solid
|
||||
local down_count = 1
|
||||
while down_count <= 8 do
|
||||
local down_ai = ai - area.ystride * down_count
|
||||
if data[down_ai] == core.CONTENT_AIR then
|
||||
data[down_ai] = c_everness_mineral_sand
|
||||
else
|
||||
break
|
||||
end
|
||||
down_count = down_count + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif rand_version == 2 then
|
||||
--
|
||||
-- Lakes
|
||||
--
|
||||
local function is_valid_lake_node(c_id, nx, ny, nz)
|
||||
if c_id == c_everness_mineral_sand
|
||||
or c_id == c_everness_mineral_water_source
|
||||
or c_id == c_everness_mineral_stone
|
||||
or c_id == c_everness_mineral_stone_with_coal
|
||||
or c_id == c_everness_mineral_stone_with_ceramic_sherds
|
||||
then
|
||||
return true
|
||||
end
|
||||
-- At chunk boundaries, ungenerated adjacent chunk nodes in data are CONTENT_IGNORE
|
||||
if c_id == core.CONTENT_IGNORE then
|
||||
local is_target_biome
|
||||
if nx >= minp.x and nx <= maxp.x and nz >= minp.z and nz <= maxp.z then
|
||||
local b_idx = (nz - minp.z) * csize_x + (nx - minp.x) + 1
|
||||
is_target_biome = (biomemap[b_idx] == biome_id_everness_mineral_waters)
|
||||
else
|
||||
local b_data = core.get_biome_data({ x = nx, y = ny, z = nz })
|
||||
is_target_biome = (b_data and b_data.biome == biome_id_everness_mineral_waters)
|
||||
end
|
||||
return is_target_biome == true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
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]
|
||||
|
||||
-- Check 4 horizontal cardinal neighbors (+X, -X, +Z, -Z)
|
||||
local c_right = data[ai + 1]
|
||||
local c_left = data[ai - 1]
|
||||
local c_front = data[ai + (area.zstride * 2)]
|
||||
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 is_valid_lake_node(c_right, x + 1, y, z)
|
||||
and is_valid_lake_node(c_left, x - 1, y, z)
|
||||
and is_valid_lake_node(c_front, x, y, z + 2)
|
||||
and is_valid_lake_node(c_back, x, y, z - 2)
|
||||
then
|
||||
-- dig below
|
||||
while keep_going and while_count <= max_dig_depth do
|
||||
local while_index = ai - area.ystride * while_count
|
||||
local cur_y = y - while_count
|
||||
|
||||
if
|
||||
(
|
||||
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 is_valid_lake_node(data[while_index + 1 + area.ystride], x + 1, cur_y + 1, z)
|
||||
and is_valid_lake_node(data[while_index - 1 + area.ystride], x - 1, cur_y + 1, z)
|
||||
and is_valid_lake_node(data[while_index + area.zstride + area.ystride], x, cur_y + 1, z + 1)
|
||||
and is_valid_lake_node(data[while_index - area.zstride + area.ystride], x, cur_y + 1, z - 1)
|
||||
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] == core.CONTENT_AIR
|
||||
-- spawn around air above
|
||||
and data[ai + area.ystride + 1] == core.CONTENT_AIR
|
||||
and data[ai + area.ystride + 1 + area.zstride] == core.CONTENT_AIR
|
||||
and data[ai + area.ystride + 1 - area.zstride] == core.CONTENT_AIR
|
||||
and data[ai + area.ystride - 1] == core.CONTENT_AIR
|
||||
and data[ai + area.ystride - 1 + area.zstride] == core.CONTENT_AIR
|
||||
and data[ai + area.ystride - 1 - area.zstride] == core.CONTENT_AIR
|
||||
and data[ai + area.ystride + area.zstride] == core.CONTENT_AIR
|
||||
and data[ai + area.ystride - area.zstride] == core.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] == core.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] == core.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
|
||||
|
||||
--
|
||||
-- Surface Decorations on dry mineral sand (Rose Bush, Water Geyser, Pots)
|
||||
--
|
||||
if
|
||||
data[ai] == c_everness_mineral_sand
|
||||
and data[ai + area.ystride] == core.CONTENT_AIR
|
||||
then
|
||||
local r_val = rand:next(1, 1000)
|
||||
if r_val <= 6 then
|
||||
-- Rose Bush (needs air around)
|
||||
if data[ai + area.ystride * 2] == core.CONTENT_AIR
|
||||
and data[ai + 1 + area.ystride] == core.CONTENT_AIR
|
||||
and data[ai - 1 + area.ystride] == core.CONTENT_AIR
|
||||
and data[ai + area.zstride + area.ystride] == core.CONTENT_AIR
|
||||
and data[ai - area.zstride + area.ystride] == core.CONTENT_AIR
|
||||
then
|
||||
data[ai + area.ystride] = c_everness_rose_bush
|
||||
end
|
||||
elseif r_val <= 9 then
|
||||
-- Water Geyser (needs air around)
|
||||
if data[ai + area.ystride * 2] == core.CONTENT_AIR
|
||||
and data[ai + 1 + area.ystride] == core.CONTENT_AIR
|
||||
and data[ai - 1 + area.ystride] == core.CONTENT_AIR
|
||||
and data[ai + area.zstride + area.ystride] == core.CONTENT_AIR
|
||||
and data[ai - area.zstride + area.ystride] == core.CONTENT_AIR
|
||||
then
|
||||
data[ai + area.ystride] = c_everness_water_geyser
|
||||
end
|
||||
elseif r_val <= 12 then
|
||||
-- Ceramic Pots (above water on dry sand)
|
||||
if data[ai + area.ystride * 2] == core.CONTENT_AIR then
|
||||
data[ai + area.ystride] = c_pots[rand:next(1, #c_pots)]
|
||||
end
|
||||
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] == core.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 = core.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 = core.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
|
||||
core.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)
|
||||
})
|
||||
|
||||
core.log('action', '[Everness] Mineral Waters Tower was placed at ' .. s_pos:to_string())
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--
|
||||
-- Palm Trees (placed on dry mineral sand after pools & lakes)
|
||||
--
|
||||
local num_palms = rand:next(1, 33)
|
||||
for _ = 1, num_palms do
|
||||
local px = rand:next(minp.x + 3, maxp.x - 3)
|
||||
local pz = rand:next(minp.z + 3, maxp.z - 3)
|
||||
for py = maxp.y, minp.y, -1 do
|
||||
local vi = area:index(px, py, pz)
|
||||
local c_ground = data[vi]
|
||||
if c_ground == c_everness_mineral_sand and data[vi + area.ystride] == core.CONTENT_AIR then
|
||||
local p = vector.new(px, py + 1, pz)
|
||||
local air_positions = core.find_nodes_in_area(
|
||||
vector.new(p.x - 2, p.y, p.z - 2),
|
||||
vector.new(p.x + 2, p.y + 6, p.z + 2),
|
||||
{ 'air' }
|
||||
)
|
||||
if #air_positions >= 25 then
|
||||
core.place_schematic_on_vmanip(
|
||||
vm,
|
||||
p,
|
||||
core.get_modpath('everness') .. '/schematics/everness_palm_tree.mts',
|
||||
'random',
|
||||
nil,
|
||||
true,
|
||||
'place_center_x, place_center_z'
|
||||
)
|
||||
end
|
||||
break
|
||||
elseif c_ground ~= core.CONTENT_AIR and c_ground ~= core.CONTENT_IGNORE then
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--
|
||||
-- Pots (under water)
|
||||
--
|
||||
local pot_pos = shared_args.pot_pos or {}
|
||||
for _, v in ipairs(pot_pos) do
|
||||
vm:set_node_at(v, { name = core.get_name_from_content_id(c_pots[rand:next(1, #c_pots)]) })
|
||||
end
|
||||
end,
|
||||
after_write_to_map = function(shared_args, gennotify, rand, minp, maxp)
|
||||
-- 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 = core.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
|
||||
|
||||
-- Populate ceramic pot inventory
|
||||
local pot_nodes = {
|
||||
'everness:ceramic_pot_blank',
|
||||
'everness:ceramic_pot_flowers',
|
||||
'everness:ceramic_pot_lines',
|
||||
'everness:ceramic_pot_tribal'
|
||||
}
|
||||
local pot_positions = (minp and maxp and core.find_nodes_in_area(minp, maxp, pot_nodes)) or {}
|
||||
for _, p in ipairs(pot_positions) do
|
||||
local meta = core.get_meta(p)
|
||||
local inv = meta:get_inventory()
|
||||
if not inv or inv:get_size('main') == 0 then
|
||||
local n = core.get_node(p)
|
||||
local ndef = core.registered_nodes[n.name]
|
||||
if ndef and ndef.on_construct then
|
||||
ndef.on_construct(p)
|
||||
end
|
||||
inv = meta:get_inventory()
|
||||
end
|
||||
if inv and inv:get_size('main') > 0 and inv:is_empty('main') then
|
||||
local rand_idx = rand:next(1, #Everness.loot_chest.default)
|
||||
local item_def = Everness.loot_chest.default[rand_idx]
|
||||
|
||||
if item_def and core.registered_items[item_def.name] then
|
||||
if rand:next(0, 100) <= item_def.chance then
|
||||
local stack = ItemStack(item_def.name)
|
||||
|
||||
if core.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
|
||||
end
|
||||
})
|
||||
@@ -0,0 +1,737 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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
|
||||
--
|
||||
|
||||
core.register_on_mods_loaded(function()
|
||||
local c_mapgen_stone = core.get_content_id('mapgen_stone')
|
||||
local mapgen_stone_itemstring = core.get_name_from_content_id(c_mapgen_stone)
|
||||
|
||||
for name, def in pairs(core.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
|
||||
wherein
|
||||
and type(wherein) == 'table'
|
||||
and table.indexof(wherein, mapgen_stone_itemstring) > -1
|
||||
and not biomes
|
||||
-- ignore ores that replace everything
|
||||
and def.clust_scarcity ~= 1
|
||||
then
|
||||
-- prevent overriding orignal definition (breaks some mods)
|
||||
def = table.copy(def)
|
||||
def.wherein = { 'everness:mineral_cave_stone' }
|
||||
def.biomes = { 'everness:mineral_waters_under' }
|
||||
def.y_max = y_max
|
||||
def.y_min = y_min
|
||||
|
||||
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 = { 'everness:mineral_waters_under' }
|
||||
})
|
||||
|
||||
--
|
||||
-- Register decorations
|
||||
--
|
||||
|
||||
Everness:register_decoration({
|
||||
name = 'everness:mineral_waters_under_floors',
|
||||
deco_type = 'simple',
|
||||
place_on = { 'everness:mineral_cave_stone' },
|
||||
sidelen = 16,
|
||||
place_offset_y = -1,
|
||||
fill_ratio = 10,
|
||||
biomes = { 'everness:mineral_waters_under' },
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
flags = 'all_floors, force_placement',
|
||||
decoration = {
|
||||
'everness:mineral_lava_stone'
|
||||
},
|
||||
})
|
||||
|
||||
--
|
||||
-- Floors
|
||||
--
|
||||
|
||||
Everness:register_decoration({
|
||||
name = 'everness:mineral_waters_under_volcanic_spike',
|
||||
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 = { 'everness:mineral_waters_under' },
|
||||
spawn_by = 'air',
|
||||
check_offset = 0,
|
||||
num_spawn_by = 1,
|
||||
decoration = {
|
||||
'everness:marker'
|
||||
},
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
flags = 'all_floors',
|
||||
})
|
||||
|
||||
Everness:register_decoration({
|
||||
name = 'everness:mineral_waters_under_lava_stone_spike',
|
||||
deco_type = 'simple',
|
||||
place_on = {
|
||||
'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 = { 'everness:mineral_waters_under' },
|
||||
decoration = {
|
||||
'everness:marker'
|
||||
},
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
flags = 'all_floors',
|
||||
})
|
||||
|
||||
Everness:register_decoration({
|
||||
name = 'everness:mineral_waters_under_lava_tree',
|
||||
deco_type = 'simple',
|
||||
place_on = {
|
||||
'everness:mineral_lava_stone',
|
||||
'everness:mineral_cave_stone',
|
||||
'everness:mineral_lava_stone_with_moss'
|
||||
},
|
||||
sidelen = 16,
|
||||
fill_ratio = 0.025,
|
||||
biomes = { 'everness:mineral_waters_under' },
|
||||
decoration = {
|
||||
'everness:marker'
|
||||
},
|
||||
y_max = y_max,
|
||||
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 = { 'everness:mineral_waters_under' },
|
||||
decoration = {
|
||||
'everness:marker'
|
||||
},
|
||||
y_max = y_max,
|
||||
y_min = y_min,
|
||||
flags = 'all_ceilings',
|
||||
})
|
||||
|
||||
--
|
||||
-- On Generated
|
||||
--
|
||||
|
||||
-- Get the content IDs for the nodes used
|
||||
local c_everness_wall_vine_cave_cyan = core.get_content_id('everness:wall_vine_cave_cyan')
|
||||
local c_everness_wall_vine_cave_violet = core.get_content_id('everness:wall_vine_cave_violet')
|
||||
local c_everness_wall_vine_cave_blue = core.get_content_id('everness:wall_vine_cave_blue')
|
||||
local c_everness_mineral_lava_stone = core.get_content_id('everness:mineral_lava_stone')
|
||||
local c_everness_mineral_cave_stone = core.get_content_id('everness:mineral_cave_stone')
|
||||
local c_everness_mineral_cave_cobblestone = core.get_content_id('everness:mineral_cave_cobblestone')
|
||||
local c_everness_lava_source = core.get_content_id('everness:lava_source')
|
||||
local c_everness_marker = core.get_content_id('everness:marker')
|
||||
local c_everness_volcanic_rock = core.get_content_id('everness:volcanic_rock')
|
||||
local c_everness_volcanic_spike_1 = core.get_content_id('everness:volcanic_spike_1')
|
||||
local c_everness_volcanic_spike_2 = core.get_content_id('everness:volcanic_spike_2')
|
||||
local c_everness_volcanic_spike_3 = core.get_content_id('everness:volcanic_spike_3')
|
||||
local c_everness_volcanic_spike_4 = core.get_content_id('everness:volcanic_spike_4')
|
||||
local c_everness_volcanic_spike_5 = core.get_content_id('everness:volcanic_spike_5')
|
||||
local c_everness_volcanic_spike_6 = core.get_content_id('everness:volcanic_spike_6')
|
||||
local c_everness_volcanic_spike_7 = core.get_content_id('everness:volcanic_spike_7')
|
||||
local c_everness_mineral_cave_stone_spike_1 = core.get_content_id('everness:mineral_cave_stone_spike_1')
|
||||
local c_everness_mineral_cave_stone_spike_2 = core.get_content_id('everness:mineral_cave_stone_spike_2')
|
||||
local c_everness_mineral_cave_stone_spike_3 = core.get_content_id('everness:mineral_cave_stone_spike_3')
|
||||
local c_everness_mineral_cave_stone_spike_4 = core.get_content_id('everness:mineral_cave_stone_spike_4')
|
||||
local c_everness_mineral_cave_stone_spike_5 = core.get_content_id('everness:mineral_cave_stone_spike_5')
|
||||
local c_everness_mineral_cave_stone_spike_6 = core.get_content_id('everness:mineral_cave_stone_spike_6')
|
||||
local c_everness_mineral_cave_stone_spike_7 = core.get_content_id('everness:mineral_cave_stone_spike_7')
|
||||
local c_everness_mineral_lava_stone_spike_1 = core.get_content_id('everness:mineral_lava_stone_spike_1')
|
||||
local c_everness_mineral_lava_stone_spike_2 = core.get_content_id('everness:mineral_lava_stone_spike_2')
|
||||
local c_everness_mineral_lava_stone_spike_3 = core.get_content_id('everness:mineral_lava_stone_spike_3')
|
||||
local c_everness_mineral_lava_stone_spike_4 = core.get_content_id('everness:mineral_lava_stone_spike_4')
|
||||
local c_everness_mineral_lava_stone_spike_5 = core.get_content_id('everness:mineral_lava_stone_spike_5')
|
||||
local c_everness_mineral_lava_stone_spike_6 = core.get_content_id('everness:mineral_lava_stone_spike_6')
|
||||
local c_everness_mineral_lava_stone_spike_7 = core.get_content_id('everness:mineral_lava_stone_spike_7')
|
||||
local c_everness_mineral_lava_stone_with_moss = core.get_content_id('everness:mineral_lava_stone_with_moss')
|
||||
-- Biome IDs
|
||||
local biome_id_everness_mineral_waters_under = core.get_biome_id('everness:mineral_waters_under')
|
||||
-- Decoration IDs
|
||||
local d_everness_mineral_waters_under_volcanic_spike = core.get_decoration_id('everness:mineral_waters_under_volcanic_spike')
|
||||
local d_everness_mineral_waters_under_volcanic_spike_ceiling = core.get_decoration_id('everness:mineral_waters_under_volcanic_spike_ceiling')
|
||||
local d_everness_mineral_waters_under_lava_stone_spike = core.get_decoration_id('everness:mineral_waters_under_lava_stone_spike')
|
||||
local d_everness_mineral_waters_under_lava_tree = core.get_decoration_id('everness:mineral_waters_under_lava_tree')
|
||||
|
||||
local volcanic_spike_place_on = Everness.to_set(core.registered_decorations['everness:mineral_waters_under_volcanic_spike'].place_on)
|
||||
local volcanic_spike_ceiling_place_on = Everness.to_set(core.registered_decorations['everness:mineral_waters_under_volcanic_spike_ceiling'].place_on)
|
||||
local lava_stone_spike_place_on = Everness.to_set(core.registered_decorations['everness:mineral_waters_under_lava_stone_spike'].place_on)
|
||||
local lava_tree_place_on = Everness.to_set(core.registered_decorations['everness:mineral_waters_under_lava_tree'].place_on)
|
||||
|
||||
-- `core.read_schematic` here so we don't cache the schem file, otherwise `replacements` will not work
|
||||
local schem_everness_lava_tree = core.read_schematic(core.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
|
||||
}
|
||||
|
||||
Everness:register_gen_notify_decoration({
|
||||
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, chunk_biomes)
|
||||
return (chunk_biomes and chunk_biomes[biome_id_everness_mineral_waters_under]) or table.indexof(biomemap, biome_id_everness_mineral_waters_under) ~= -1
|
||||
end,
|
||||
-- read/write to `data` what will be eventually saved (set_data)
|
||||
-- used for voxelmanip `data` manipulation
|
||||
on_data = function(minp, maxp, area, data, p2data, gennotify, rand, shared_args)
|
||||
local rand_version = rand:next(1, 2)
|
||||
shared_args.rand_version = rand_version
|
||||
|
||||
if rand_version == 1 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
|
||||
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] == core.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] == core.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] = core.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 = core.get_name_from_content_id(data[idx])
|
||||
|
||||
if data[idx_marker] == c_everness_marker then
|
||||
-- remove marker
|
||||
data[idx_marker] = core.CONTENT_AIR
|
||||
|
||||
if volcanic_spike_place_on[place_on_node_name] 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),
|
||||
{
|
||||
core.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 = core.get_name_from_content_id(data[idx])
|
||||
|
||||
if data[idx_marker] == c_everness_marker then
|
||||
-- remove marker
|
||||
data[idx_marker] = core.CONTENT_AIR
|
||||
|
||||
if lava_stone_spike_place_on[place_on_node_name] 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),
|
||||
{
|
||||
core.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 = core.get_name_from_content_id(data[idx])
|
||||
|
||||
if data[idx_marker] == c_everness_marker then
|
||||
-- remove marker
|
||||
data[idx_marker] = core.CONTENT_AIR
|
||||
-- data[idx_marker] = core.get_content_id('everness:pyrite_lantern')
|
||||
|
||||
if volcanic_spike_ceiling_place_on[place_on_node_name] 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),
|
||||
{
|
||||
core.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 = core.get_node(marker_pos)
|
||||
local place_on_node = core.get_node(pos)
|
||||
|
||||
if marker_node and marker_node.name == 'everness:marker' then
|
||||
-- remove marker
|
||||
core.remove_node(marker_pos)
|
||||
|
||||
if shared_args.rand_version ~= 1
|
||||
and place_on_node
|
||||
and lava_tree_place_on[place_on_node.name]
|
||||
then
|
||||
-- enough air to place structure ?
|
||||
local positions = core.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
|
||||
|
||||
core.place_schematic_on_vmanip(
|
||||
vm,
|
||||
marker_pos,
|
||||
schem_everness_lava_tree,
|
||||
'random',
|
||||
replacements,
|
||||
false,
|
||||
'place_center_x, place_center_z'
|
||||
)
|
||||
|
||||
local grass_positions = core.find_nodes_in_area_under_air(
|
||||
vector.subtract(marker_pos, { x = 3, y = 1, z = 3 }),
|
||||
vector.add(marker_pos, { 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(marker_pos, rand_p) then
|
||||
vm:set_node_at(vector.new(rand_p.x, rand_p.y + 1, rand_p.z), { name = 'everness:mineral_cave_moss_grass' })
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
@@ -0,0 +1,98 @@
|
||||
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_mineral_waters = true
|
||||
everness_mineral_waters_y_max = 194
|
||||
everness_mineral_waters_y_min = 1
|
||||
everness_mineral_waters_under = true
|
||||
everness_mineral_waters_under_y_max = -28939
|
||||
everness_mineral_waters_under_y_min = -29067
|
||||
everness_feature_sneak_pickup = false
|
||||
everness_feature_skybox = true
|
||||
@@ -0,0 +1,6 @@
|
||||
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, moreblocks, mcl_core, mcl_fences, mcl_walls, mcl_stairs, mcl_util, mcl_autogroup, _mcl_autogroup, mcl_doors, mcl_mapgen_core, mcl_panes, mcl_buckets, rp_default, i3, unified_inventory, sfinv
|
||||
min_minetest_version = 5.9.0
|
||||
supported_games = minetest_game, voxelibre, mineclonia, mineclone2
|
||||
@@ -0,0 +1,359 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 SaKeL
|
||||
|
||||
mod_support_mcl total rewrite 2025 by Gunnar Zötl
|
||||
|
||||
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 = core.get_translator(core.get_current_modname())
|
||||
|
||||
local function register_alias(name, convert_to)
|
||||
if not core.registered_aliases[name] and rawget(core.registered_items, name) == nil then
|
||||
core.register_alias(name, convert_to)
|
||||
core.registered_aliases[name] = convert_to
|
||||
end
|
||||
end
|
||||
|
||||
-- Test whether we are in VoxeLibre or Mineclonia
|
||||
local isVL = core.get_modpath('vl_trusted') ~= nil
|
||||
or core.get_modpath('vl_core') ~= nil
|
||||
|
||||
local mod_emu = {}
|
||||
|
||||
---
|
||||
-- Fences / Gates
|
||||
---
|
||||
|
||||
mod_emu.default = {
|
||||
register_fence = function(name, def)
|
||||
local sname = string.match(name, ':(.+)$')
|
||||
local fence_id, gate_id, open_gate_id = mcl_fences.register_fence_and_fence_gate(
|
||||
sname,
|
||||
def.description,
|
||||
def.description .. ' Gate',
|
||||
def.texture,
|
||||
{ handy = 1, axey = 1, flammable = 2, fence_wood = 1, fire_encouragement = 5, fire_flammability = 20 },
|
||||
2,
|
||||
15,
|
||||
{ 'group:fence_wood' },
|
||||
def.sounds
|
||||
)
|
||||
if fence_id == name then
|
||||
register_alias('mcl_fences:' .. sname, name)
|
||||
register_alias('mcl_fences:' .. sname .. '_gate', name .. '_gate')
|
||||
register_alias('mcl_fences:' .. sname .. '_gate_open', name .. '_gate_open')
|
||||
else
|
||||
register_alias(name, fence_id)
|
||||
if gate_id then register_alias(name .. '_gate', gate_id) end
|
||||
if open_gate_id then register_alias(name .. '_gate_open', open_gate_id) end
|
||||
end
|
||||
end,
|
||||
|
||||
register_fence_rail = function(name, def)
|
||||
local sname = string.match(name, ':(.+)$')
|
||||
local fence_id = mcl_fences.register_fence_and_fence_gate(
|
||||
sname,
|
||||
def.description,
|
||||
def.description .. ' Gate',
|
||||
def.texture,
|
||||
{ handy = 1, axey = 1, flammable = 2, fence_wood = 1, fire_encouragement = 5, fire_flammability = 20 },
|
||||
2,
|
||||
15,
|
||||
{ 'group:fence_wood' },
|
||||
def.sounds
|
||||
)
|
||||
if fence_id == name then
|
||||
register_alias('mcl_fences:' .. sname, name)
|
||||
else
|
||||
register_alias(name, fence_id)
|
||||
end
|
||||
end,
|
||||
|
||||
register_mesepost = function(name, def)
|
||||
-- Not applicable in MCL
|
||||
end,
|
||||
}
|
||||
|
||||
---
|
||||
-- Walls
|
||||
---
|
||||
|
||||
mod_emu.walls = {
|
||||
register = function(name, desc, tex, mat, snd)
|
||||
mcl_walls.register_wall(name, desc, mat, tex, nil, nil, snd)
|
||||
end
|
||||
}
|
||||
|
||||
---
|
||||
-- Stairs and Slabs
|
||||
---
|
||||
|
||||
mod_emu.stairs = {
|
||||
register_stair_and_slab = function(base, mat, stat, tex, stairdesc, slabdesc, snd, bool)
|
||||
local groups = {}
|
||||
if stat.cracky then
|
||||
-- In MTG: cracky 3 is softest, 1 is hardest.
|
||||
-- In MCL: pickaxey 1 is wood, 2 is stone/iron, 3 is diamond.
|
||||
groups.pickaxey = stat.cracky == 1 and 2 or 1
|
||||
groups.material_stone = 1
|
||||
groups.building_block = 1
|
||||
elseif stat.choppy then
|
||||
groups.axey = 1
|
||||
groups.handy = 1
|
||||
groups.wood = 1
|
||||
groups.material_wood = 1
|
||||
groups.building_block = 1
|
||||
groups.flammable = stat.flammable or 2
|
||||
groups.fire_encouragement = 5
|
||||
groups.fire_flammability = 20
|
||||
end
|
||||
|
||||
mcl_stairs.register_stair_and_slab(
|
||||
base,
|
||||
mat,
|
||||
groups,
|
||||
tex,
|
||||
stairdesc,
|
||||
slabdesc,
|
||||
snd,
|
||||
6,
|
||||
2,
|
||||
'Double ' .. slabdesc,
|
||||
nil
|
||||
)
|
||||
register_alias('stairs:stair_' .. base, 'mcl_stairs:stair_' .. base)
|
||||
register_alias('stairs:stair_inner_' .. base, 'mcl_stairs:stair_' .. base .. '_inner')
|
||||
register_alias('stairs:stair_outer_' .. base, 'mcl_stairs:stair_' .. base .. '_outer')
|
||||
register_alias('stairs:slab_' .. base, 'mcl_stairs:slab_' .. base)
|
||||
end
|
||||
}
|
||||
|
||||
---
|
||||
-- Doors & Trapdoors
|
||||
---
|
||||
|
||||
mod_emu.doors = {
|
||||
register = function(name, def)
|
||||
local sname = string.match(name, ':(.+)$')
|
||||
local modpath = core.get_modpath(core.get_current_modname())
|
||||
local utex = io.open(modpath .. '/textures/everness_mcl_doors_' .. sname .. '_lower.png', 'r')
|
||||
if not utex then
|
||||
core.log('warning', '[everness] mod_support_mcl not registering door type ' .. name .. ' because of missing textures')
|
||||
return
|
||||
end
|
||||
utex:close()
|
||||
|
||||
local newdef = {
|
||||
description = def.description,
|
||||
inventory_image = def.inventory_image,
|
||||
groups = { handy = 1, axey = 1, material_wood = 1, flammable = -1 },
|
||||
sounds = def.sounds,
|
||||
sound_open = def.sound_open,
|
||||
sound_close = def.sound_close,
|
||||
_mcl_hardness = 3,
|
||||
_mcl_blast_resistance = 3,
|
||||
}
|
||||
if isVL then
|
||||
newdef.tiles_bottom = 'everness_mcl_doors_' .. sname .. '_lower.png'
|
||||
newdef.tiles_top = 'everness_mcl_doors_' .. sname .. '_upper.png'
|
||||
else
|
||||
newdef.tiles_bottom = {
|
||||
'everness_mcl_doors_' .. sname .. '_lower.png^[transformFX',
|
||||
'everness_mcl_doors_' .. sname .. '_lower_side.png'
|
||||
}
|
||||
newdef.tiles_top = {
|
||||
'everness_mcl_doors_' .. sname .. '_upper.png^[transformFX',
|
||||
'everness_mcl_doors_' .. sname .. '_upper_side.png'
|
||||
}
|
||||
end
|
||||
mcl_doors:register_door(name, newdef)
|
||||
|
||||
-- Register aliases for MTG door nodes (_a bottom, _b top) used in schematics
|
||||
register_alias(name .. '_a', name .. '_b_1')
|
||||
register_alias(name .. '_b', name .. '_t_1')
|
||||
|
||||
if def.recipe then
|
||||
core.register_craft({
|
||||
output = name .. ' 3',
|
||||
recipe = def.recipe
|
||||
})
|
||||
end
|
||||
end,
|
||||
|
||||
register_trapdoor = function(name, def)
|
||||
mcl_doors:register_trapdoor(name, {
|
||||
description = def.description,
|
||||
inventory_image = def.inventory_image,
|
||||
tile_front = def.tile_front,
|
||||
tile_side = def.tile_side,
|
||||
wield_image = def.wield_image,
|
||||
groups = { handy = 1, axey = 1, material_wood = 1, flammable = -1 },
|
||||
sounds = def.sounds,
|
||||
sound_open = def.sound_open,
|
||||
sound_close = def.sound_close,
|
||||
_mcl_hardness = 3,
|
||||
_mcl_blast_resistance = 3,
|
||||
})
|
||||
if def.recipe then
|
||||
core.register_craft({
|
||||
output = name,
|
||||
recipe = def.recipe
|
||||
})
|
||||
end
|
||||
end,
|
||||
|
||||
register_fencegate = function(name, def)
|
||||
local gate_name_map = {
|
||||
['everness:gate_bamboo'] = 'everness:fence_bamboo_wood_gate',
|
||||
['everness:gate_crystal_wood'] = 'everness:fence_crystal_wood_gate',
|
||||
['everness:gate_palm_wood'] = 'everness:fence_palm_wood_gate',
|
||||
['everness:gate_coral_wood'] = 'everness:fence_coral_wood_gate',
|
||||
['everness:gate_lava_tree_wood'] = 'everness:fence_lava_tree_wood_gate',
|
||||
}
|
||||
if gate_name_map[name] then
|
||||
register_alias(name, gate_name_map[name])
|
||||
register_alias(name .. '_open', gate_name_map[name] .. '_open')
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
---
|
||||
-- Buckets
|
||||
---
|
||||
|
||||
if core.global_exists('mcl_buckets') and mcl_buckets.register_liquid then
|
||||
mcl_buckets.register_liquid({
|
||||
source_place = 'everness:mineral_water_source',
|
||||
source_take = { 'everness:mineral_water_source' },
|
||||
bucketname = 'everness:bucket_mineral_water',
|
||||
inventory_image = 'everness_mcl_bucket_mineral_water.png',
|
||||
name = S('Mineral') .. ' ' .. S('Water') .. ' ' .. S('Bucket'),
|
||||
longdesc = S('A bucket can be used to collect and release liquids. This one is filled with mineral water.'),
|
||||
usagehelp = S('Place it to empty the bucket and create a mineral water source.'),
|
||||
tt_help = S('Places a mineral water source'),
|
||||
groups = { water_bucket = 1 },
|
||||
})
|
||||
end
|
||||
|
||||
---
|
||||
-- Panes
|
||||
---
|
||||
|
||||
if not (core.global_exists('xpanes') and xpanes.register_pane) then
|
||||
mod_emu.xpanes = {
|
||||
register_pane = function(name, def)
|
||||
if core.global_exists('mcl_panes') and mcl_panes.register_pane then
|
||||
local mcl_def = table.copy(def)
|
||||
if mcl_def.textures then
|
||||
local t1 = mcl_def.textures[1] or ''
|
||||
local t2 = (mcl_def.textures[2] and mcl_def.textures[2] ~= '') and mcl_def.textures[2] or t1
|
||||
local t3 = mcl_def.textures[3] or t1
|
||||
mcl_def.textures = { t1, t2, t3 }
|
||||
end
|
||||
mcl_panes.register_pane(name, mcl_def)
|
||||
end
|
||||
register_alias('xpanes:' .. name, 'mcl_panes:' .. name)
|
||||
register_alias('xpanes:' .. name .. '_flat', 'mcl_panes:' .. name .. '_flat')
|
||||
end
|
||||
}
|
||||
else
|
||||
register_alias('mcl_panes:cursed_bar', 'xpanes:cursed_bar')
|
||||
register_alias('mcl_panes:cursed_bar_flat', 'xpanes:cursed_bar_flat')
|
||||
register_alias('mcl_panes:pyrite_pane', 'xpanes:pyrite_pane')
|
||||
register_alias('mcl_panes:pyrite_pane_flat', 'xpanes:pyrite_pane_flat')
|
||||
end
|
||||
|
||||
---
|
||||
-- Scoped Execution Runner
|
||||
---
|
||||
|
||||
local function load_derivative_nodes()
|
||||
local prev_default = rawget(_G, 'default')
|
||||
local prev_walls = rawget(_G, 'walls')
|
||||
local prev_stairs = rawget(_G, 'stairs')
|
||||
local prev_doors = rawget(_G, 'doors')
|
||||
local prev_xpanes = rawget(_G, 'xpanes')
|
||||
|
||||
rawset(_G, 'default', mod_emu.default)
|
||||
rawset(_G, 'walls', mod_emu.walls)
|
||||
rawset(_G, 'stairs', mod_emu.stairs)
|
||||
rawset(_G, 'doors', mod_emu.doors)
|
||||
if mod_emu.xpanes then
|
||||
rawset(_G, 'xpanes', mod_emu.xpanes)
|
||||
end
|
||||
|
||||
local path = core.get_modpath('everness')
|
||||
|
||||
dofile(path .. '/panes.lua')
|
||||
dofile(path .. '/stairs.lua')
|
||||
dofile(path .. '/walls.lua')
|
||||
dofile(path .. '/fences.lua')
|
||||
dofile(path .. '/doors.lua')
|
||||
|
||||
rawset(_G, 'default', prev_default)
|
||||
rawset(_G, 'walls', prev_walls)
|
||||
rawset(_G, 'stairs', prev_stairs)
|
||||
rawset(_G, 'doors', prev_doors)
|
||||
if mod_emu.xpanes then
|
||||
rawset(_G, 'xpanes', prev_xpanes)
|
||||
end
|
||||
end
|
||||
|
||||
load_derivative_nodes()
|
||||
|
||||
---
|
||||
-- Trees & Leafdecay Compatibility with Mineclonia
|
||||
---
|
||||
|
||||
-- In Mineclonia, mcl_trees overrides on_construct and after_destruct on all nodes
|
||||
-- with group:tree ~= 0 in an on_mods_loaded callback.
|
||||
-- This triggers heavy VoxelManip updates (reading/writing an 8-block radius) and
|
||||
-- massive 15,625-node area searches whenever an Everness tree log is dug or placed.
|
||||
-- Because Everness leaves do not use Mineclonia's distance param2 leafdecay,
|
||||
-- mcl_trees's callbacks do no useful work on Everness trees while causing severe lag,
|
||||
-- massive Lua memory allocations (~500 KB per log), and server OOM crashes on large trees.
|
||||
--
|
||||
-- Since everness is loaded after mcl_trees, this on_mods_loaded callback executes after
|
||||
-- mcl_trees's on_mods_loaded, cleanly restoring Everness's own lightweight leafdecay.
|
||||
core.register_on_mods_loaded(function()
|
||||
if not core.get_modpath('mcl_trees') then
|
||||
return
|
||||
end
|
||||
|
||||
if Everness.leafdecay_trunk_defs then
|
||||
for trunk, def in pairs(Everness.leafdecay_trunk_defs) do
|
||||
if core.registered_nodes[trunk] then
|
||||
core.registered_nodes[trunk].on_construct = nil
|
||||
if core.registered_items[trunk] then
|
||||
core.registered_items[trunk].on_construct = nil
|
||||
end
|
||||
core.override_item(trunk, {
|
||||
after_destruct = function(pos, oldnode)
|
||||
Everness.leafdecay_after_destruct(pos, oldnode, def)
|
||||
end,
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Also handle other Everness trunks that do not have leafdecay (e.g. hollow_tree)
|
||||
if core.registered_nodes['everness:hollow_tree'] then
|
||||
core.registered_nodes['everness:hollow_tree'].on_construct = nil
|
||||
core.registered_nodes['everness:hollow_tree'].after_destruct = nil
|
||||
if core.registered_items['everness:hollow_tree'] then
|
||||
core.registered_items['everness:hollow_tree'].on_construct = nil
|
||||
core.registered_items['everness:hollow_tree'].after_destruct = nil
|
||||
end
|
||||
end
|
||||
end)
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,215 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 register_alias(name, convert_to)
|
||||
if rawget(core.registered_items, name) ~= nil then
|
||||
return
|
||||
end
|
||||
local existing = core.registered_aliases[name]
|
||||
if not existing then
|
||||
core.register_alias(name, convert_to)
|
||||
core.registered_aliases[name] = convert_to
|
||||
elseif existing ~= convert_to and rawget(core.registered_items, existing) == nil then
|
||||
core.register_alias_force(name, convert_to)
|
||||
core.registered_aliases[name] = convert_to
|
||||
end
|
||||
end
|
||||
|
||||
register_alias('mapgen_water_source', 'mcl_core:water_source')
|
||||
register_alias('default:water_source', 'mcl_core:water_source')
|
||||
register_alias('default:water_flowing', 'mcl_core:water_flowing')
|
||||
register_alias('default:dirt', 'mcl_core:dirt')
|
||||
register_alias('default:dirt_with_rainforest_litter', 'mcl_core:dirt_with_grass')
|
||||
register_alias('default:dirt_with_snow', 'mcl_core:dirt_with_grass_snow')
|
||||
register_alias('default:dirt_with_coniferous_litter', 'mcl_core:podzol')
|
||||
register_alias('default:dirt_with_grass', 'mcl_core:dirt_with_grass')
|
||||
register_alias('default:permafrost_with_moss', 'mcl_core:dirt_with_grass')
|
||||
register_alias('default:permafrost_with_stones', 'mcl_core:coarse_dirt')
|
||||
register_alias('default:stick', 'mcl_core:stick')
|
||||
register_alias('default:paper', 'mcl_core:paper')
|
||||
register_alias('default:book', 'mcl_books:book')
|
||||
register_alias('default:skeleton_key', 'mcl_core:gold_nugget')
|
||||
register_alias('default:flint', 'mcl_core:flint')
|
||||
register_alias('default:obsidian_shard', 'mcl_core:prismarine_shard')
|
||||
register_alias('default:clay_brick', 'mcl_core:brick')
|
||||
register_alias('default:mese_crystal_fragment', 'mcl_amethyst:amethyst_shard')
|
||||
|
||||
-- Ingots
|
||||
register_alias('default:gold_ingot', 'mcl_core:gold_ingot')
|
||||
register_alias('default:bronze_ingot', 'mcl_copper:copper_ingot')
|
||||
register_alias('default:tin_ingot', 'mcl_core:iron_ingot')
|
||||
register_alias('default:copper_ingot', 'mcl_copper:copper_ingot')
|
||||
register_alias('default:steel_ingot', 'mcl_core:iron_ingot')
|
||||
register_alias('default:coal_lump', 'mcl_core:coal_lump')
|
||||
|
||||
-- Tools
|
||||
register_alias('default:pick_stone', 'mcl_tools:pick_stone')
|
||||
register_alias('default:pick_bronze', 'mcl_tools:pick_gold')
|
||||
register_alias('default:pick_steel', 'mcl_tools:pick_iron')
|
||||
register_alias('default:shovel_stone', 'mcl_tools:shovel_stone')
|
||||
register_alias('default:shovel_bronze', 'mcl_tools:shovel_gold')
|
||||
register_alias('default:shovel_steel', 'mcl_tools:shovel_iron')
|
||||
register_alias('default:axe_stone', 'mcl_tools:axe_stone')
|
||||
register_alias('default:axe_bronze', 'mcl_tools:axe_gold')
|
||||
register_alias('default:axe_steel', 'mcl_tools:axe_iron')
|
||||
register_alias('default:sword_stone', 'mcl_tools:sword_stone')
|
||||
register_alias('default:sword_bronze', 'mcl_tools:sword_gold')
|
||||
register_alias('default:sword_steel', 'mcl_tools:sword_iron')
|
||||
|
||||
-- Items / Nodes
|
||||
register_alias('default:bookshelf', 'mcl_books:bookshelf')
|
||||
register_alias('default:sign_wall_wood', 'mcl_signs:wall_sign')
|
||||
register_alias('default:ladder_wood', 'mcl_core:ladder')
|
||||
register_alias('default:ladder_steel', 'mcl_core:ladder')
|
||||
register_alias('default:glass', 'mcl_core:glass')
|
||||
register_alias('default:obsidian_glass', 'mcl_core:glass')
|
||||
|
||||
-- Trees
|
||||
register_alias('default:tree', 'mcl_core:tree')
|
||||
register_alias('default:jungletree', 'mcl_core:jungletree')
|
||||
register_alias('default:pine_tree', 'mcl_core:sprucetree')
|
||||
register_alias('default:cactus', 'mcl_core:cactus')
|
||||
register_alias('default:large_cactus_seedling', 'mcl_core:cactus')
|
||||
register_alias('default:papyrus', 'mcl_core:reeds')
|
||||
register_alias('default:junglegrass', 'mcl_flowers:double_grass')
|
||||
register_alias('default:blueberry_bush_sapling', 'mcl_flowers:rose_bush')
|
||||
register_alias('default:sapling', 'mcl_core:sapling')
|
||||
register_alias('default:junglesapling', 'mcl_core:junglesapling')
|
||||
register_alias('default:pine_sapling', 'mcl_core:sprucesapling')
|
||||
register_alias('default:acacia_sapling', 'mcl_core:acaciasapling')
|
||||
register_alias('default:aspen_sapling', 'mcl_core:birchsapling')
|
||||
|
||||
register_alias('default:clay_lump', 'mcl_core:clay_lump')
|
||||
register_alias('default:tin_lump', 'mcl_raw_ores:raw_gold')
|
||||
register_alias('default:copper_lump', 'mcl_copper:raw_copper')
|
||||
register_alias('default:iron_lump', 'mcl_raw_ores:raw_iron')
|
||||
register_alias('default:coalblock', 'mcl_core:coalblock')
|
||||
register_alias('default:steelblock', 'mcl_core:ironblock')
|
||||
register_alias('default:copperblock', 'mcl_copper:block')
|
||||
register_alias('default:tinblock', 'mcl_core:goldblock')
|
||||
register_alias('default:bronzeblock', 'mcl_copper:block')
|
||||
register_alias('default:mese', 'mesecons_torch:redstoneblock')
|
||||
register_alias('default:meselamp', 'mesecons_lightstone:lightstone_off')
|
||||
register_alias('default:obsidian', 'mcl_core:obsidian')
|
||||
register_alias('default:mese_crystal', 'mcl_ocean:prismarine_crystals')
|
||||
register_alias('default:diamond', 'mcl_core:diamond')
|
||||
register_alias('default:pick_mese', 'mcl_tools:pick_diamond')
|
||||
register_alias('default:shovel_mese', 'mcl_tools:shovel_diamond')
|
||||
register_alias('default:axe_mese', 'mcl_tools:axe_diamond')
|
||||
register_alias('default:sword_mese', 'mcl_tools:sword_diamond')
|
||||
|
||||
register_alias('default:tnt', 'mcl_tnt:tnt')
|
||||
register_alias('default:snowblock', 'mcl_core:snowblock')
|
||||
register_alias('default:ice', 'mcl_core:ice')
|
||||
register_alias('default:torch', 'mcl_torches:torch')
|
||||
register_alias('default:cobble', 'mcl_core:cobble')
|
||||
register_alias('default:chest', 'mcl_chests:chest')
|
||||
register_alias('default:snow', 'mcl_core:snow')
|
||||
register_alias('default:stone', 'mcl_core:stone')
|
||||
register_alias('default:sand', 'mcl_core:sand')
|
||||
register_alias('default:desert_sand', 'mcl_core:sand')
|
||||
register_alias('default:silver_sand', 'mcl_core:sand')
|
||||
register_alias('default:gravel', 'mcl_core:gravel')
|
||||
register_alias('default:stone_with_coal', 'mcl_core:stone_with_coal')
|
||||
register_alias('default:stone_with_iron', 'mcl_core:stone_with_iron')
|
||||
register_alias('default:stone_with_copper', 'mcl_copper:stone_with_copper')
|
||||
register_alias('default:stone_with_tin', 'mcl_copper:stone_with_copper')
|
||||
register_alias('default:stone_with_gold', 'mcl_core:stone_with_gold')
|
||||
register_alias('default:stone_with_mese', 'mcl_core:stone_with_redstone')
|
||||
register_alias('default:stone_with_diamond', 'mcl_core:stone_with_diamond')
|
||||
register_alias('mapgen_lava_source', 'mcl_core:lava_source')
|
||||
register_alias('default:lava_source', 'mcl_core:lava_source')
|
||||
register_alias('default:mossycobble', 'mcl_core:mossycobble')
|
||||
register_alias('default:clay', 'mcl_colorblocks:hardened_clay')
|
||||
register_alias('default:dry_dirt_with_dry_grass', 'mcl_core:dirt_with_grass')
|
||||
register_alias('default:dry_dirt', 'mcl_core:coarse_dirt')
|
||||
register_alias('default:coral_skeleton', 'mcl_core:bone_block')
|
||||
register_alias('default:lava_flowing', 'mcl_core:lava_flowing')
|
||||
register_alias('default:fence_wood', 'mcl_fences:fence')
|
||||
register_alias('default:torch_wall', 'mcl_torches:torch_wall')
|
||||
register_alias('default:wood', 'mcl_core:wood')
|
||||
register_alias('default:junglewood', 'mcl_core:junglewood')
|
||||
register_alias('default:pine_wood', 'mcl_core:sprucewood')
|
||||
register_alias('default:mese_post_light_pine_wood', 'mcl_torches:torch')
|
||||
if not core.registered_items['default:acacia_tree'] then
|
||||
core.register_alias_force('default:acacia_tree', 'mcl_core:acaciatree')
|
||||
end
|
||||
register_alias('default:dry_grass_4', 'mcl_core:deadbush')
|
||||
register_alias('default:dry_grass_2', 'mcl_core:deadbush')
|
||||
register_alias('default:dry_shrub', 'mcl_core:deadbush')
|
||||
register_alias('default:stonebrick', 'mcl_core:stonebrick')
|
||||
register_alias('default:jungleleaves', 'mcl_core:jungleleaves')
|
||||
register_alias('default:torch_ceiling', 'mcl_torches:torch_wall')
|
||||
register_alias('default:goldblock', 'mcl_core:goldblock')
|
||||
|
||||
-- Common MTG Stairs and Slabs (registered if not already handled by game)
|
||||
register_alias('stairs:stair_junglewood', 'mcl_stairs:stair_junglewood')
|
||||
register_alias('stairs:slab_junglewood', 'mcl_stairs:slab_junglewood')
|
||||
register_alias('stairs:stair_wood', 'mcl_stairs:stair_wood')
|
||||
register_alias('stairs:slab_wood', 'mcl_stairs:slab_wood')
|
||||
register_alias('stairs:stair_inner_wood', 'mcl_stairs:stair_wood_inner')
|
||||
register_alias('stairs:stair_outer_wood', 'mcl_stairs:stair_wood_outer')
|
||||
register_alias('stairs:stair_stonebrick', 'mcl_stairs:stair_stonebrick')
|
||||
register_alias('stairs:slab_stonebrick', 'mcl_stairs:slab_stonebrick')
|
||||
register_alias('stairs:stair_inner_stonebrick', 'mcl_stairs:stair_stonebrick_inner')
|
||||
register_alias('stairs:stair_outer_stonebrick', 'mcl_stairs:stair_stonebrick_outer')
|
||||
register_alias('stairs:stair_mossycobble', 'mcl_stairs:stair_mossycobble')
|
||||
register_alias('stairs:slab_mossycobble', 'mcl_stairs:slab_mossycobble')
|
||||
|
||||
-- Walls backwards compatibility (old map data without underscores -> new registered wall names)
|
||||
register_alias('everness:cursedbrickwall', 'everness:cursed_brick_wall')
|
||||
register_alias('everness:cursedbrickwithgrowthwall', 'everness:cursed_brick_with_growth_wall')
|
||||
register_alias('everness:coraldesertcobblewall', 'everness:coral_desert_cobble_wall')
|
||||
register_alias('everness:coraldesertmossycobblewall', 'everness:coral_desert_mossy_cobble_wall')
|
||||
register_alias('everness:forsakentundrabrickwall', 'everness:forsaken_tundra_brick_wall')
|
||||
register_alias('everness:forsakentundracobblewall', 'everness:forsaken_tundra_cobble_wall')
|
||||
register_alias('everness:forsakentundrastonewall', 'everness:forsaken_tundra_stone_wall')
|
||||
register_alias('walls:cobble', 'mcl_walls:cobble')
|
||||
|
||||
-- Doors & Trapdoors
|
||||
register_alias('xpanes:trapdoor_steel_bar', 'mcl_doors:iron_trapdoor')
|
||||
register_alias('doors:trapdoor_open', 'mcl_doors:trapdoor_open')
|
||||
register_alias('doors:trapdoor', 'mcl_doors:trapdoor')
|
||||
register_alias('doors:door_wood', 'mcl_doors:wooden_door')
|
||||
register_alias('doors:door_wood_a', 'mcl_doors:wooden_door_b_1')
|
||||
register_alias('doors:door_wood_b', 'mcl_doors:wooden_door_t_1')
|
||||
register_alias('doors:hidden', 'air')
|
||||
register_alias('everness:cobweb', 'mcl_core:cobweb')
|
||||
|
||||
-- Fence Gates
|
||||
register_alias('everness:gate_bamboo', 'everness:fence_bamboo_wood_gate')
|
||||
register_alias('everness:gate_bamboo_open', 'everness:fence_bamboo_wood_gate_open')
|
||||
register_alias('everness:gate_crystal_wood', 'everness:fence_crystal_wood_gate')
|
||||
register_alias('everness:gate_crystal_wood_open', 'everness:fence_crystal_wood_gate_open')
|
||||
register_alias('everness:gate_palm_wood', 'everness:fence_palm_wood_gate')
|
||||
register_alias('everness:gate_palm_wood_open', 'everness:fence_palm_wood_gate_open')
|
||||
register_alias('everness:gate_coral_wood', 'everness:fence_coral_wood_gate')
|
||||
register_alias('everness:gate_coral_wood_open', 'everness:fence_coral_wood_gate_open')
|
||||
register_alias('everness:gate_lava_tree_wood', 'everness:fence_lava_tree_wood_gate')
|
||||
register_alias('everness:gate_lava_tree_wood_open', 'everness:fence_lava_tree_wood_gate_open')
|
||||
|
||||
-- Legacy flowers - replaced by everness:flowers_*
|
||||
register_alias('flowers:rose', 'mcl_flowers:wither_rose')
|
||||
register_alias('flowers:tulip', 'mcl_flowers:tulip_orange')
|
||||
register_alias('flowers:dandelion_yellow', 'mcl_flowers:dandelion')
|
||||
register_alias('flowers:geranium', 'mcl_flowers:allium')
|
||||
register_alias('flowers:viola', 'mcl_flowers:azure_bluet')
|
||||
register_alias('flowers:tulip_black', 'mcl_flowers:tulip_white')
|
||||
register_alias('flowers:dandelion_white', 'mcl_flowers:tulip_pink')
|
||||
register_alias('flowers:chrysanthemum_green', 'mcl_flowers:tulip_white')
|
||||
|
||||
-- Schematics compatibility
|
||||
register_alias('butterflies:butterfly_violet', 'air')
|
||||
@@ -0,0 +1,228 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.get_translator(core.get_current_modname())
|
||||
|
||||
---
|
||||
-- Helper: Adapt world-aligned textures for mesh nodes (slopes)
|
||||
--
|
||||
-- In Luanti, solid nodes and nodeboxes support `align_style = "world"` and
|
||||
-- `scale = N` natively. However, More Blocks slopes use `drawtype = "mesh"`
|
||||
-- (.obj meshes), where the engine does not support world alignment and instead
|
||||
-- stretches the entire multi-block texture into the 0..1 UV coordinates of the
|
||||
-- mesh face. For mesh nodes, we detect world-aligned textures and crop a single
|
||||
-- 1-node tile so the slope displays a properly proportioned texture.
|
||||
---
|
||||
|
||||
local function adapt_tiles_for_slopes(tiles, recipeitem)
|
||||
if not tiles and recipeitem and core.registered_nodes[recipeitem] then
|
||||
tiles = core.registered_nodes[recipeitem].tiles
|
||||
end
|
||||
if not tiles then return nil end
|
||||
|
||||
local new_tiles = {}
|
||||
local has_world_aligned = false
|
||||
|
||||
for i, t in ipairs(tiles) do
|
||||
local tile_def = t
|
||||
if type(tile_def) == 'string' and recipeitem and core.registered_nodes[recipeitem] then
|
||||
local src_tiles = core.registered_nodes[recipeitem].tiles
|
||||
if src_tiles and src_tiles[i] and type(src_tiles[i]) == 'table' then
|
||||
tile_def = src_tiles[i]
|
||||
end
|
||||
end
|
||||
|
||||
if type(tile_def) == 'table' and tile_def.align_style == 'world' and tile_def.scale and tile_def.scale > 1 then
|
||||
has_world_aligned = true
|
||||
local tile_name = tile_def.name
|
||||
local cropped_name
|
||||
|
||||
if tile_def.animation then
|
||||
-- For animated multi-block textures (e.g. scale = 8 with vertical_frames),
|
||||
-- crop a 16x16 tile using [combine to extract a clean 16x16 frame.
|
||||
cropped_name = '[combine:16x16:0,0=' .. tile_name
|
||||
else
|
||||
-- For static textures (scale = 2, 4, etc.), ^[sheet:SxS:0,0 cleanly crops
|
||||
-- a 1-node tile (0,0) and respects any texture pack resolution.
|
||||
cropped_name = tile_name .. '^[sheet:' .. tile_def.scale .. 'x' .. tile_def.scale .. ':0,0'
|
||||
end
|
||||
|
||||
new_tiles[i] = {
|
||||
name = cropped_name,
|
||||
backface_culling = tile_def.backface_culling,
|
||||
}
|
||||
else
|
||||
new_tiles[i] = t
|
||||
end
|
||||
end
|
||||
|
||||
if has_world_aligned then
|
||||
return new_tiles
|
||||
end
|
||||
return tiles
|
||||
end
|
||||
|
||||
---
|
||||
-- Helper: Register all Stairs+ shapes with slope-adapted textures
|
||||
---
|
||||
|
||||
local function register_stairsplus(modname, subname, recipeitem, fields)
|
||||
local slope_tiles = adapt_tiles_for_slopes(fields.tiles, recipeitem)
|
||||
|
||||
if slope_tiles ~= fields.tiles then
|
||||
-- Nodeboxes (stairs, slabs, panels, microblocks) support world-aligned textures natively
|
||||
stairsplus:register_stair(modname, subname, recipeitem, fields)
|
||||
stairsplus:register_slab(modname, subname, recipeitem, fields)
|
||||
stairsplus:register_panel(modname, subname, recipeitem, fields)
|
||||
stairsplus:register_micro(modname, subname, recipeitem, fields)
|
||||
|
||||
-- Slopes are .obj meshes which do not support world-aligned textures in the engine;
|
||||
-- use the cropped 16x16 tiles so textures are not squished onto the mesh
|
||||
local slope_fields = table.copy(fields)
|
||||
slope_fields.tiles = slope_tiles
|
||||
stairsplus:register_slope(modname, subname, recipeitem, slope_fields)
|
||||
else
|
||||
stairsplus:register_all(modname, subname, recipeitem, fields)
|
||||
end
|
||||
end
|
||||
|
||||
---
|
||||
-- Stairs+ / More Blocks Circular Saw Scoped Adapter
|
||||
---
|
||||
|
||||
local moreblocks_emu_stairs = {
|
||||
register_stair_and_slab = function(subname, recipeitem, groups, images, desc_stair, desc_slab, sounds, worldaligntex)
|
||||
-- Strip translation escape sequences (\027%b() and \027.) to avoid malformed double-translation
|
||||
local clean_desc = desc_stair:gsub('\027%b()', ''):gsub('\027.', '')
|
||||
local base_desc = clean_desc:gsub('%s+[Ss]tair$', '')
|
||||
|
||||
register_stairsplus('everness', subname, recipeitem, {
|
||||
description = S(base_desc),
|
||||
tiles = images,
|
||||
groups = groups,
|
||||
sounds = sounds,
|
||||
})
|
||||
|
||||
-- Backwards compatibility aliases for schematics, previous worlds, and crafts
|
||||
core.register_alias_force('stairs:stair_' .. subname, 'everness:stair_' .. subname)
|
||||
core.register_alias_force('stairs:stair_inner_' .. subname, 'everness:stair_' .. subname .. '_inner')
|
||||
core.register_alias_force('stairs:stair_outer_' .. subname, 'everness:stair_' .. subname .. '_outer')
|
||||
core.register_alias_force('stairs:slab_' .. subname, 'everness:slab_' .. subname)
|
||||
end
|
||||
}
|
||||
|
||||
-- Execute stairs.lua under the Scoped Adapter
|
||||
local prev_stairs = rawget(_G, 'stairs')
|
||||
rawset(_G, 'stairs', moreblocks_emu_stairs)
|
||||
|
||||
local path = core.get_modpath('everness')
|
||||
dofile(path .. '/stairs.lua')
|
||||
|
||||
rawset(_G, 'stairs', prev_stairs)
|
||||
|
||||
---
|
||||
-- Additional Everness building blocks for Circular Saw
|
||||
---
|
||||
|
||||
local extra_nodes = {
|
||||
-- Tree Trunks
|
||||
{ subname = 'coral_tree', recipeitem = 'everness:coral_tree', desc = 'Coral Tree Trunk' },
|
||||
{ subname = 'coral_tree_bioluminescent', recipeitem = 'everness:coral_tree_bioluminescent', desc = 'Coral Tree Bioluminescent Trunk' },
|
||||
{ subname = 'baobab_tree', recipeitem = 'everness:baobab_tree', desc = 'Baobab Tree Trunk' },
|
||||
{ subname = 'sequoia_tree', recipeitem = 'everness:sequoia_tree', desc = 'Sequoia Tree Trunk' },
|
||||
{ subname = 'willow_tree', recipeitem = 'everness:willow_tree', desc = 'Willow Tree Trunk' },
|
||||
{ subname = 'hollow_tree', recipeitem = 'everness:hollow_tree', desc = 'Hollow Tree Trunk' },
|
||||
{ subname = 'crystal_tree', recipeitem = 'everness:crystal_tree', desc = 'Crystal Tree Trunk' },
|
||||
{ subname = 'mese_tree', recipeitem = 'everness:mese_tree', desc = 'Mese Tree Trunk' },
|
||||
{ subname = 'palm_tree', recipeitem = 'everness:palm_tree', desc = 'Palm Tree Trunk' },
|
||||
{ subname = 'lava_tree', recipeitem = 'everness:lava_tree', desc = 'Lava Tree Trunk' },
|
||||
{ subname = 'lava_tree_with_lava', recipeitem = 'everness:lava_tree_with_lava', desc = 'Lava Tree Trunk with Lava Veins' },
|
||||
|
||||
-- Bamboo blocks
|
||||
{ subname = 'bamboo_block', recipeitem = 'everness:bamboo_block', desc = 'Bamboo Block' },
|
||||
{ subname = 'bamboo_dry_block', recipeitem = 'everness:bamboo_dry_block', desc = 'Dry Bamboo Block' },
|
||||
|
||||
-- Cursed blocks
|
||||
{ subname = 'cursed_stone', recipeitem = 'everness:cursed_stone', desc = 'Cursed Stone' },
|
||||
{ subname = 'cursed_brick_mixed', recipeitem = 'everness:cursed_brick_mixed', desc = 'Cursed Brick Mixed' },
|
||||
{ subname = 'cursed_brick_carved', recipeitem = 'everness:cursed_brick_carved', desc = 'Cursed Brick Carved' },
|
||||
{ subname = 'cursed_dream_stone', recipeitem = 'everness:cursed_dream_stone', desc = 'Cursed Dream Stone' },
|
||||
|
||||
-- Crystal blocks
|
||||
{ subname = 'crystal_stone', recipeitem = 'everness:crystal_stone', desc = 'Crystal Stone' },
|
||||
{ subname = 'crystal_sandstone', recipeitem = 'everness:crystal_sandstone', desc = 'Crystal Sandstone' },
|
||||
{ subname = 'crystal_sandstone_brick', recipeitem = 'everness:crystal_sandstone_brick', desc = 'Crystal Sandstone Brick' },
|
||||
{ subname = 'crystal_sandstone_chiseled', recipeitem = 'everness:crystal_sandstone_chiseled', desc = 'Crystal Sandstone Chiseled' },
|
||||
{ subname = 'crystal_block_cyan', recipeitem = 'everness:crystal_block_cyan', desc = 'Cyan Crystal Block' },
|
||||
{ subname = 'crystal_block_orange', recipeitem = 'everness:crystal_block_orange', desc = 'Orange Crystal Block' },
|
||||
{ subname = 'crystal_block_purple', recipeitem = 'everness:crystal_block_purple', desc = 'Purple Crystal Block' },
|
||||
|
||||
-- Forsaken blocks
|
||||
{ subname = 'forsaken_desert_stone', recipeitem = 'everness:forsaken_desert_stone', desc = 'Forsaken Desert Stone' },
|
||||
{ subname = 'forsaken_tundra_rocks', recipeitem = 'everness:forsaken_tundra_rocks', desc = 'Forsaken Tundra Rocks' },
|
||||
|
||||
-- Pyrite blocks
|
||||
{ subname = 'pyriteblock', recipeitem = 'everness:pyriteblock', desc = 'Pyrite Block' },
|
||||
{ subname = 'pyriteblock_brick', recipeitem = 'everness:pyriteblock_brick', desc = 'Pyrite Brick' },
|
||||
{ subname = 'pyriteblock_forged', recipeitem = 'everness:pyriteblock_forged', desc = 'Forged Pyrite Block' },
|
||||
{ subname = 'pyriteblock_polished', recipeitem = 'everness:pyriteblock_polished', desc = 'Polished Pyrite Block' },
|
||||
{ subname = 'pyriteblock_spiral', recipeitem = 'everness:pyriteblock_spiral', desc = 'Pyrite Spiral' },
|
||||
{ subname = 'pyriteblock_slab_brick', recipeitem = 'everness:pyriteblock_slab_brick', desc = 'Pyrite Slab Brick' },
|
||||
|
||||
-- Ice & Snow blocks
|
||||
{ subname = 'ancient_emerald_ice', recipeitem = 'everness:ancient_emerald_ice', desc = 'Ancient Emerald Ice' },
|
||||
{ subname = 'dense_emerald_ice', recipeitem = 'everness:dense_emerald_ice', desc = 'Dense Emerald Ice' },
|
||||
{ subname = 'emerald_ice', recipeitem = 'everness:emerald_ice', desc = 'Emerald Ice' },
|
||||
{ subname = 'frosted_ice', recipeitem = 'everness:frosted_ice', desc = 'Frosted Ice' },
|
||||
{ subname = 'frosted_ice_translucent', recipeitem = 'everness:frosted_ice_translucent', desc = 'Frosted Ice Translucent' },
|
||||
{ subname = 'frosted_snowblock', recipeitem = 'everness:frosted_snowblock', desc = 'Frosted Snow Block' },
|
||||
{ subname = 'icecobble', recipeitem = 'everness:icecobble', desc = 'Ice Cobble' },
|
||||
{ subname = 'snowcobble', recipeitem = 'everness:snowcobble', desc = 'Snow Cobble' },
|
||||
{ subname = 'mold_cobble', recipeitem = 'everness:mold_cobble', desc = 'Mold Cobble' },
|
||||
|
||||
-- Obsidian & Volcanic blocks
|
||||
{ subname = 'weeping_obsidian', recipeitem = 'everness:weeping_obsidian', desc = 'Weeping Obsidian' },
|
||||
{ subname = 'blue_crying_obsidian', recipeitem = 'everness:blue_crying_obsidian', desc = 'Blue Crying Obsidian' },
|
||||
{ subname = 'blue_weeping_obsidian', recipeitem = 'everness:blue_weeping_obsidian', desc = 'Blue Weeping Obsidian' },
|
||||
{ subname = 'sulfur_stone', recipeitem = 'everness:sulfur_stone', desc = 'Sulfur Stone' },
|
||||
{ subname = 'volcanic_sulfur', recipeitem = 'everness:volcanic_sulfur', desc = 'Volcanic Sulfur Stone' },
|
||||
|
||||
-- Bone & Coral
|
||||
{ subname = 'bone', recipeitem = 'everness:bone', desc = 'Bone Block' },
|
||||
{ subname = 'crystal_coral_dark', recipeitem = 'everness:crystal_coral_dark', desc = 'Crystal Coral Dark' },
|
||||
|
||||
-- Glass
|
||||
{ subname = 'pyrite_glass', recipeitem = 'everness:pyrite_glass', desc = 'Pyrite Glass' },
|
||||
{ subname = 'tinted_glass_red', recipeitem = 'everness:tinted_glass_red', desc = 'Tinted Glass Red' },
|
||||
}
|
||||
|
||||
for _, item in ipairs(extra_nodes) do
|
||||
local def = core.registered_nodes[item.recipeitem]
|
||||
if def then
|
||||
local tiles = table.copy(def.tiles or {})
|
||||
if #tiles > 1 and def.drawtype and def.drawtype:find('glass') then
|
||||
tiles = { tiles[1] }
|
||||
end
|
||||
register_stairsplus('everness', item.subname, item.recipeitem, {
|
||||
description = S(item.desc),
|
||||
tiles = tiles,
|
||||
groups = table.copy(def.groups or {}),
|
||||
sounds = def.sounds,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
core.log('action', '[Everness] More Blocks / Circular Saw integration loaded successfully.')
|
||||
@@ -0,0 +1,48 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.get_translator(core.get_current_modname())
|
||||
|
||||
--
|
||||
-- Buckets
|
||||
--
|
||||
|
||||
if core.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 }
|
||||
)
|
||||
|
||||
core.register_craft({
|
||||
type = 'fuel',
|
||||
recipe = 'everness:bucket_lava',
|
||||
burntime = 370,
|
||||
replacements = {{ 'everness:bucket_lava', 'bucket:bucket_empty' }},
|
||||
})
|
||||
end
|
||||
@@ -0,0 +1,170 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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.
|
||||
|
||||
--]]
|
||||
|
||||
core.register_alias('mapgen_water_source', 'rp_mapgen_water_source')
|
||||
core.register_alias('default:dirt_with_rainforest_litter', 'rp_default:dirt_with_grass')
|
||||
core.register_alias('default:dirt_with_snow', 'rp_default:dirt_with_grass')
|
||||
core.register_alias('default:dirt_with_coniferous_litter', 'rp_default:dirt_with_grass')
|
||||
core.register_alias('default:dirt_with_grass', 'rp_default:dirt_with_grass')
|
||||
core.register_alias('default:stick', 'rp_default:stick')
|
||||
core.register_alias('default:paper', 'rp_default:paper')
|
||||
core.register_alias('default:book', 'rp_default:book')
|
||||
core.register_alias('default:skeleton_key', 'rp_default:skeleton_key')
|
||||
core.register_alias('default:flint', 'rp_default:flint')
|
||||
core.register_alias('default:obsidian_shard', 'rp_default:obsidian_shard')
|
||||
core.register_alias('default:clay_brick', 'rp_default:clay_brick')
|
||||
core.register_alias('default:mese_crystal_fragment', 'rp_default:mese_crystal_fragment')
|
||||
-- Ingots
|
||||
core.register_alias('default:gold_ingot', 'rp_default:gold_ingot')
|
||||
core.register_alias('default:bronze_ingot', 'rp_default:bronze_ingot')
|
||||
core.register_alias('default:tin_ingot', 'rp_default:tin_ingot')
|
||||
core.register_alias('default:copper_ingot', 'rp_default:copper_ingot')
|
||||
core.register_alias('default:steel_ingot', 'rp_default:steel_ingot')
|
||||
core.register_alias('default:coal_lump', 'rp_default:coal_lump')
|
||||
-- Tools
|
||||
core.register_alias('default:pick_stone', 'rp_default:pick_stone')
|
||||
core.register_alias('default:pick_bronze', 'rp_default:pick_bronze')
|
||||
core.register_alias('default:pick_steel', 'rp_default:pick_steel')
|
||||
core.register_alias('default:shovel_stone', 'rp_default:shovel_stone')
|
||||
core.register_alias('default:shovel_bronze', 'rp_default:shovel_bronze')
|
||||
core.register_alias('default:shovel_steel', 'rp_default:shovel_steel')
|
||||
core.register_alias('default:axe_stone', 'rp_default:axe_stone')
|
||||
core.register_alias('default:axe_bronze', 'rp_default:axe_bronze')
|
||||
core.register_alias('default:axe_steel', 'rp_default:axe_steel')
|
||||
core.register_alias('default:sword_stone', 'rp_default:sword_stone')
|
||||
core.register_alias('default:sword_bronze', 'rp_default:sword_bronze')
|
||||
core.register_alias('default:sword_steel', 'rp_default:sword_steel')
|
||||
-- Items / Nodes
|
||||
core.register_alias('default:bookshelf', 'rp_default:bookshelf')
|
||||
core.register_alias('default:sign_wall_wood', 'rp_default:sign_wall_wood')
|
||||
core.register_alias('default:ladder_wood', 'rp_default:ladder_wood')
|
||||
core.register_alias('default:ladder_steel', 'rp_default:ladder_steel')
|
||||
core.register_alias('default:glass', 'rp_default:glass')
|
||||
core.register_alias('default:obsidian_glass', 'rp_default:obsidian_glass')
|
||||
-- Trees
|
||||
core.register_alias('default:tree', 'rp_default:tree')
|
||||
core.register_alias('default:jungletree', 'rp_default:jungletree')
|
||||
core.register_alias('default:pine_tree', 'rp_default:pine_tree')
|
||||
core.register_alias('default:cactus', 'rp_default:cactus')
|
||||
core.register_alias('default:large_cactus_seedling', 'rp_default:large_cactus_seedling')
|
||||
core.register_alias('default:papyrus', 'rp_default:papyrus')
|
||||
core.register_alias('default:junglegrass', 'rp_default:junglegrass')
|
||||
core.register_alias('default:blueberry_bush_sapling', 'rp_default:blueberry_bush_sapling')
|
||||
core.register_alias('default:sapling', 'rp_default:sapling')
|
||||
core.register_alias('default:junglesapling', 'rp_default:junglesapling')
|
||||
core.register_alias('default:pine_sapling', 'rp_default:pine_sapling')
|
||||
core.register_alias('default:acacia_sapling', 'rp_default:acacia_sapling')
|
||||
core.register_alias('default:aspen_sapling', 'rp_default:aspen_sapling')
|
||||
|
||||
core.register_alias('default:clay_lump', 'rp_default:clay_lump')
|
||||
core.register_alias('default:tin_lump', 'rp_default:tin_lump')
|
||||
core.register_alias('default:copper_lump', 'rp_default:copper_lump')
|
||||
core.register_alias('default:iron_lump', 'rp_default:iron_lump')
|
||||
core.register_alias('default:coalblock', 'rp_default:block_coal')
|
||||
core.register_alias('default:steelblock', 'rp_default:steelblock')
|
||||
core.register_alias('default:copperblock', 'rp_default:copperblock')
|
||||
core.register_alias('default:tinblock', 'rp_default:tinblock')
|
||||
core.register_alias('default:bronzeblock', 'rp_default:bronzeblock')
|
||||
core.register_alias('default:mese', 'rp_default:mese')
|
||||
core.register_alias('default:meselamp', 'rp_default:meselamp')
|
||||
core.register_alias('default:obsidian', 'rp_default:obsidian')
|
||||
core.register_alias('default:mese_crystal', 'rp_default:mese_crystal')
|
||||
core.register_alias('default:diamond', 'rp_default:diamond')
|
||||
core.register_alias('default:pick_mese', 'rp_default:pick_mese')
|
||||
core.register_alias('default:shovel_mese', 'rp_default:shovel_mese')
|
||||
core.register_alias('default:axe_mese', 'rp_default:axe_mese')
|
||||
core.register_alias('default:sword_mese', 'rp_default:sword_mese')
|
||||
|
||||
core.register_alias('default:snowblock', 'rp_default:snowblock')
|
||||
core.register_alias('default:ice', 'rp_default:ice')
|
||||
core.register_alias('default:torch', 'rp_default:torch')
|
||||
core.register_alias('default:cobble', 'rp_default:cobble')
|
||||
core.register_alias('default:chest', 'rp_default:chest')
|
||||
core.register_alias('default:snow', 'rp_default:snow')
|
||||
core.register_alias('default:stone', 'rp_default:stone')
|
||||
core.register_alias('default:sand', 'rp_default:sand')
|
||||
core.register_alias('default:gravel', 'rp_default:gravel')
|
||||
core.register_alias('default:stone_with_coal', 'rp_default:stone_with_coal')
|
||||
core.register_alias('default:stone_with_iron', 'rp_default:stone_with_iron')
|
||||
core.register_alias('default:stone_with_copper', 'rp_default:stone_with_copper')
|
||||
core.register_alias('default:stone_with_tin', 'rp_default:stone_with_tin')
|
||||
core.register_alias('default:stone_with_gold', 'rp_default:stone_with_gold')
|
||||
core.register_alias('default:stone_with_mese', 'rp_default:stone_with_mese')
|
||||
core.register_alias('default:stone_with_diamond', 'rp_default:stone_with_diamond')
|
||||
core.register_alias('mapgen_lava_source', 'rp_mapgen_water_source')
|
||||
core.register_alias('default:mossycobble', 'rp_default:mossycobble')
|
||||
core.register_alias('default:clay', 'rp_default:clay')
|
||||
core.register_alias('default:dry_dirt_with_dry_grass', 'rp_default:dry_dirt_with_dry_grass')
|
||||
core.register_alias('default:dry_dirt', 'rp_default:dry_dirt')
|
||||
core.register_alias('default:coral_skeleton', 'everness:coral_skeleton')
|
||||
core.register_alias('default:lava_flowing', 'rp_default:water_flowing')
|
||||
core.register_alias('everness:cursed_brick_with_growth_wall', 'air')
|
||||
core.register_alias('stairs:slab_cursed_brick_with_growth', 'air')
|
||||
core.register_alias('default:fence_wood', 'rp_default:fence')
|
||||
core.register_alias('default:torch_wall', 'rp_default:torch_wall')
|
||||
core.register_alias('default:wood', 'rp_default:planks')
|
||||
core.register_alias('default:junglewood', 'rp_default:junglewood')
|
||||
core.register_alias('default:pine_wood', 'rp_default:pine_wood')
|
||||
core.register_alias('default:mese_post_light_pine_wood', 'rp_default:mese_post_light_pine_wood')
|
||||
core.register_alias_force('default:acacia_tree', 'rp_default:acacia_tree')
|
||||
core.register_alias('default:dry_grass_4', 'rp_default:dry_grass_4')
|
||||
core.register_alias('default:dry_grass_2', 'rp_default:dry_grass_2')
|
||||
core.register_alias('default:dry_shrub', 'rp_default:dry_shrub')
|
||||
core.register_alias('default:stonebrick', 'rp_default:stonebrick')
|
||||
core.register_alias('default:jungleleaves', 'rp_default:jungleleaves')
|
||||
core.register_alias('default:torch_ceiling', 'rp_default:torch_ceiling')
|
||||
core.register_alias('default:goldblock', 'rp_default:goldblock')
|
||||
core.register_alias('stairs:stair_coral_white_sandstone', 'mcl_stairs:stair_coral_white_sandstone')
|
||||
core.register_alias('stairs:slab_coral_white_sandstone', 'mcl_stairs:slab_coral_white_sandstone')
|
||||
core.register_alias('stairs:stair_coral_deep_ocean_sandstone_block', 'mcl_stairs:stair_coral_deep_ocean_sandstone_block')
|
||||
core.register_alias('stairs:slab_coral_deep_ocean_sandstone_block', 'mcl_stairs:slab_coral_deep_ocean_sandstone_block')
|
||||
core.register_alias('stairs:slab_coral_deep_ocean_sandstone_brick', 'mcl_stairs:slab_coral_deep_ocean_sandstone_brick')
|
||||
core.register_alias('stairs:slab_coral_sandstone_brick', 'mcl_stairs:slab_coral_sandstone_brick')
|
||||
core.register_alias('stairs:stair_coral_deep_ocean_sandstone_brick', 'mcl_stairs:stair_coral_deep_ocean_sandstone_brick')
|
||||
core.register_alias('stairs:stair_crystal_forest_deep_ocean_sandstone_block', 'mcl_stairs:stair_crystal_forest_deep_ocean_sandstone_block')
|
||||
core.register_alias('stairs:stair_crystal_forest_deep_ocean_sandstone_brick', 'mcl_stairs:stair_crystal_forest_deep_ocean_sandstone_brick')
|
||||
core.register_alias('stairs:slab_crystal_forest_deep_ocean_sandstone_block', 'mcl_stairs:slab_crystal_forest_deep_ocean_sandstone_block')
|
||||
core.register_alias('stairs:slab_crystal_forest_deep_ocean_sandstone_brick', 'mcl_stairs:slab_crystal_forest_deep_ocean_sandstone_brick')
|
||||
core.register_alias('stairs:stair_forsaken_desert_brick_red', 'mcl_stairs:stair_forsaken_desert_brick_red')
|
||||
core.register_alias('stairs:stair_forsaken_desert_chiseled_stone', 'mcl_stairs:stair_forsaken_desert_chiseled_stone')
|
||||
core.register_alias('stairs:slab_forsaken_desert_chiseled_stone', 'mcl_stairs:slab_forsaken_desert_chiseled_stone')
|
||||
core.register_alias('stairs:stair_junglewood', 'mcl_stairs:stair_junglewood')
|
||||
core.register_alias('stairs:slab_junglewood', 'mcl_stairs:slab_junglewood')
|
||||
core.register_alias('stairs:slab_dry_wood', 'mcl_stairs:slab_dry_wood')
|
||||
core.register_alias('stairs:stair_dry_wood', 'mcl_stairs:stair_dry_wood')
|
||||
core.register_alias('stairs:stair_wood', 'mcl_stairs:stair_wood')
|
||||
core.register_alias('stairs:slab_stonebrick', 'mcl_stairs:slab_stonebrick')
|
||||
core.register_alias('stairs:stair_inner_wood', 'mcl_stairs:stair_wood_inner')
|
||||
core.register_alias('stairs:stair_outer_stonebrick', 'mcl_stairs:stair_stonebrick_outer')
|
||||
core.register_alias('stairs:stair_stonebrick', 'mcl_stairs:stair_stonebrick')
|
||||
-- core.register_alias('stairs:stair_cobble', 'mcl_stairs:stair_cobble')
|
||||
core.register_alias('stairs:stair_mossycobble', 'mcl_stairs:stair_mossycobble')
|
||||
core.register_alias('stairs:stair_outer_quartz_chiseled', 'mcl_stairs:stair_quartz_chiseled_outer')
|
||||
core.register_alias('stairs:stair_quartz_chiseled', 'mcl_stairs:stair_quartz_chiseled')
|
||||
core.register_alias('stairs:stair_inner_quartz_chiseled', 'mcl_stairs:stair_quartz_chiseled_inner')
|
||||
core.register_alias('stairs:slab_quartz_chiseled', 'mcl_stairs:slab_quartz_chiseled')
|
||||
core.register_alias('stairs:stair_coral_desert_stone_block', 'mcl_stairs:stair_coral_desert_stone_block')
|
||||
|
||||
core.register_alias('everness:cursed_brick_wall', 'everness:cursedbrickwall')
|
||||
core.register_alias('walls:cobble', 'mcl_walls:cobble')
|
||||
core.register_alias('xpanes:trapdoor_steel_bar', 'mcl_doors:iron_trapdoor')
|
||||
core.register_alias('doors:trapdoor_open', 'mcl_doors:trapdoor_open')
|
||||
core.register_alias('doors:trapdoor', 'mcl_doors:trapdoor')
|
||||
core.register_alias('doors:door_wood_a', 'mcl_doors:wooden_door')
|
||||
core.register_alias('doors:hidden', 'air')
|
||||
core.register_alias('everness:cobweb', 'mcl_core:cobweb')
|
||||
|
||||
core.register_alias('fire:permanent_flame', 'air')
|
||||
@@ -0,0 +1,257 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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
|
||||
--
|
||||
|
||||
core.register_craft({
|
||||
output = 'x_farming:bonemeal 4',
|
||||
recipe = {
|
||||
{ 'everness:bone' }
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,582 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.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 = (core.get_us_time() - mod_start_time) / 1000000
|
||||
|
||||
print('[Mod] everness: x_obsidianmese support loaded.. [' .. mod_end_time .. 's]')
|
||||
@@ -0,0 +1,43 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.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 = (core.get_us_time() - mod_start_time) / 1000000
|
||||
|
||||
print('[Mod] everness: x_tumbleweed support loaded.. [' .. mod_end_time .. 's]')
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1,467 @@
|
||||
# Blender 4.4.3
|
||||
# www.blender.org
|
||||
mtllib everness_chest_closed.mtl
|
||||
o Chest
|
||||
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.062500 0.000000 -0.437500
|
||||
v -0.125000 0.250000 -0.500000
|
||||
v 0.062500 0.250000 -0.437500
|
||||
v 0.125000 0.250000 -0.437500
|
||||
v 0.125000 0.250000 -0.500000
|
||||
v 0.125000 0.125000 -0.500000
|
||||
v 0.062500 -0.125000 -0.437500
|
||||
v -0.125000 0.125000 -0.500000
|
||||
v -0.125000 0.125000 -0.437500
|
||||
v -0.125000 0.250000 -0.437500
|
||||
v 0.500000 -0.500000 -0.437500
|
||||
v 0.437500 -0.500000 0.500000
|
||||
v -0.437500 -0.500000 -0.500000
|
||||
v -0.437500 0.500000 0.500000
|
||||
v -0.062500 0.000000 -0.500000
|
||||
v -0.062500 0.250000 -0.500000
|
||||
v 0.062500 0.062500 -0.437500
|
||||
v 0.062500 -0.062500 -0.437500
|
||||
v 0.125000 0.125000 -0.437500
|
||||
v -0.437500 0.500000 -0.500000
|
||||
v -0.500000 0.500000 0.437500
|
||||
v 0.437500 -0.500000 -0.500000
|
||||
v 0.500000 0.500000 -0.437500
|
||||
v 0.437500 0.500000 0.500000
|
||||
v -0.500000 -0.500000 -0.437500
|
||||
v 0.062500 0.000000 -0.500000
|
||||
v -0.125000 -0.062500 -0.437500
|
||||
v 0.062500 0.250000 -0.500000
|
||||
v 0.125000 0.187500 -0.437500
|
||||
v 0.125000 0.187500 -0.500000
|
||||
v 0.437500 0.125000 -0.500000
|
||||
v 0.500000 0.125000 0.437500
|
||||
v -0.500000 0.125000 -0.437500
|
||||
v -0.437500 0.125000 0.500000
|
||||
v -0.437500 0.125000 -0.437500
|
||||
v 0.437500 0.125000 0.500000
|
||||
v -0.500000 0.125000 0.437500
|
||||
v 0.500000 0.125000 -0.437500
|
||||
v 0.062500 -0.125000 -0.500000
|
||||
v 0.125000 -0.062500 -0.500000
|
||||
v 0.125000 -0.062500 -0.437500
|
||||
v -0.437500 0.125000 -0.500000
|
||||
v -0.125000 0.062500 -0.500000
|
||||
v -0.125000 0.187500 -0.500000
|
||||
v 0.062500 0.187500 -0.437500
|
||||
v -0.062500 -0.125000 -0.500000
|
||||
v -0.125000 -0.062500 -0.500000
|
||||
v 0.062500 0.000000 -0.437500
|
||||
v 0.437500 -0.437500 -0.437500
|
||||
v 0.437500 -0.500000 0.437500
|
||||
v -0.062500 0.250000 -0.437500
|
||||
v -0.062500 0.062500 -0.437500
|
||||
v -0.437500 0.437500 -0.437500
|
||||
v -0.437500 0.437500 0.437500
|
||||
v 0.437500 0.500000 0.437500
|
||||
v -0.437500 0.500000 0.437500
|
||||
v -0.437500 0.500000 -0.437500
|
||||
v -0.062500 0.062500 -0.500000
|
||||
v -0.437500 0.187500 -0.500000
|
||||
v -0.437500 0.437500 -0.500000
|
||||
v -0.437500 -0.437500 -0.500000
|
||||
v -0.062500 -0.125000 -0.437500
|
||||
v 0.437500 -0.437500 -0.500000
|
||||
v 0.062500 -0.062500 -0.500000
|
||||
v 0.500000 0.187500 -0.437500
|
||||
v 0.500000 0.437500 -0.437500
|
||||
v 0.500000 -0.437500 -0.437500
|
||||
v 0.500000 -0.437500 0.437500
|
||||
v -0.437500 -0.500000 -0.437500
|
||||
v -0.437500 -0.500000 0.437500
|
||||
v 0.437500 -0.500000 -0.437500
|
||||
v -0.500000 0.187500 0.437500
|
||||
v -0.500000 0.437500 0.437500
|
||||
v -0.500000 -0.437500 0.437500
|
||||
v -0.500000 -0.437500 -0.437500
|
||||
v 0.437500 0.187500 0.500000
|
||||
v 0.437500 0.437500 0.500000
|
||||
v -0.437500 0.125000 0.437500
|
||||
v 0.437500 -0.437500 0.500000
|
||||
v 0.437500 0.125000 -0.437500
|
||||
v 0.437500 0.125000 0.437500
|
||||
v -0.437500 -0.437500 0.500000
|
||||
v -0.437500 -0.437500 0.437500
|
||||
v 0.062500 0.187500 -0.500000
|
||||
v 0.062500 0.062500 -0.500000
|
||||
v -0.125000 0.187500 -0.437500
|
||||
v 0.437500 0.500000 -0.437500
|
||||
v 0.437500 0.187500 -0.500000
|
||||
v 0.500000 0.187500 0.437500
|
||||
v -0.500000 0.187500 -0.437500
|
||||
v -0.437500 0.187500 0.500000
|
||||
v -0.437500 -0.437500 -0.437500
|
||||
v -0.062500 -0.062500 -0.437500
|
||||
v -0.062500 0.187500 -0.500000
|
||||
v -0.062500 -0.062500 -0.500000
|
||||
v -0.437500 0.437500 0.500000
|
||||
v -0.500000 0.437500 -0.437500
|
||||
v 0.500000 0.437500 0.437500
|
||||
v 0.437500 0.437500 -0.500000
|
||||
v 0.437500 0.437500 0.437500
|
||||
v -0.062500 0.187500 -0.437500
|
||||
v 0.437500 0.437500 -0.437500
|
||||
v 0.437500 -0.437455 0.437505
|
||||
v 0.437500 0.187500 -0.437500
|
||||
v 0.437500 0.187500 0.437500
|
||||
v -0.437500 0.187500 0.437500
|
||||
v -0.437500 0.187500 -0.437500
|
||||
vn -1.0000 -0.0000 -0.0000
|
||||
vn -0.0000 -0.0000 -1.0000
|
||||
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 0.0007 1.0000 -0.0001
|
||||
vn -0.0000 1.0000 0.0007
|
||||
vn -0.0000 0.0001 -1.0000
|
||||
vn 0.0001 -1.0000 0.0001
|
||||
vn -0.0001 -0.0000 -1.0000
|
||||
vn -0.0001 1.0000 -0.0000
|
||||
vt 0.625000 0.687500
|
||||
vt 0.562500 0.625000
|
||||
vt 0.625000 0.625000
|
||||
vt 0.937500 1.000000
|
||||
vt 0.062500 0.937500
|
||||
vt 0.937500 0.937500
|
||||
vt -0.000000 0.062500
|
||||
vt -0.000000 0.937500
|
||||
vt 0.937500 0.062500
|
||||
vt 1.000000 0.937500
|
||||
vt 0.562500 0.562500
|
||||
vt 0.437500 0.500000
|
||||
vt 0.562500 0.500000
|
||||
vt 0.437500 0.437500
|
||||
vt 0.562500 0.437500
|
||||
vt 0.562500 0.750000
|
||||
vt 0.562500 0.687500
|
||||
vt 1.000000 1.000000
|
||||
vt 0.937500 0.687500
|
||||
vt 0.937500 0.625000
|
||||
vt 0.062500 0.687500
|
||||
vt -0.000000 1.000000
|
||||
vt 0.062500 0.625000
|
||||
vt 1.000000 0.687500
|
||||
vt 1.000000 0.625000
|
||||
vt 1.000000 0.062500
|
||||
vt 0.062500 0.062500
|
||||
vt 0.562500 0.375000
|
||||
vt 0.375000 0.750000
|
||||
vt 0.437500 0.750000
|
||||
vt 1.000000 0.000000
|
||||
vt 0.062500 1.000000
|
||||
vt 0.062500 0.000000
|
||||
vt 0.937500 0.000000
|
||||
vt 0.500000 0.625000
|
||||
vt 0.500000 0.687500
|
||||
vt 0.437500 0.625000
|
||||
vt 0.437500 0.687500
|
||||
vt 0.375000 0.687500
|
||||
vt 0.375000 0.625000
|
||||
vt -0.000000 0.687500
|
||||
vt 0.375000 0.437500
|
||||
vt 0.375000 0.500000
|
||||
vt 0.437500 0.375000
|
||||
vt 0.500000 0.437500
|
||||
vt 0.500000 0.375000
|
||||
vt 0.625000 0.500000
|
||||
vt 0.437500 0.562500
|
||||
vt -0.000000 0.625000
|
||||
vt 0.000000 0.625000
|
||||
vt -0.000000 0.000000
|
||||
vt 0.625000 0.437500
|
||||
vt 0.625000 0.562500
|
||||
vt 0.625000 0.750000
|
||||
vt 0.375000 0.562500
|
||||
s 0
|
||||
g Chest_chest-front
|
||||
usemtl chest-front
|
||||
f 18/1/1 52/2/1 94/3/1
|
||||
f 60/11/2 56/12/2 9/13/2
|
||||
f 23/13/2 72/14/2 103/15/2
|
||||
f 10/1/3 59/16/3 24/17/3
|
||||
f 3/18/2 67/19/2 50/20/2
|
||||
f 16/3/2 52/1/2 102/17/2
|
||||
f 57/27/2 100/9/2 70/28/2
|
||||
f 110/5/2 12/29/2 11/30/2
|
||||
f 52/3/3 115/19/3 94/1/3
|
||||
f 67/19/5 61/10/5 115/24/5
|
||||
f 59/17/5 102/35/5 24/36/5
|
||||
f 92/37/3 109/17/3 53/38/3
|
||||
f 11/36/1 92/37/1 53/35/1
|
||||
f 36/38/3 12/29/3 13/39/3
|
||||
f 13/39/5 37/37/5 38/40/5
|
||||
f 38/40/3 112/21/3 96/23/3
|
||||
f 110/5/1 96/41/1 112/21/1
|
||||
f 61/4/6 107/5/6 110/32/6
|
||||
f 88/21/6 14/40/6 39/23/6
|
||||
f 14/40/5 49/14/5 48/42/5
|
||||
f 26/12/6 48/42/6 49/43/6
|
||||
f 47/44/5 26/45/5 15/46/5
|
||||
f 15/14/6 54/28/6 47/44/6
|
||||
f 101/15/1 54/46/1 70/28/1
|
||||
f 35/47/6 103/15/6 101/13/6
|
||||
f 17/3/1 16/2/1 51/11/1
|
||||
f 17/1/6 50/20/6 16/3/6
|
||||
f 56/12/3 23/15/3 9/13/3
|
||||
f 66/11/5 9/47/5 23/13/5
|
||||
f 93/48/6 60/2/6 66/11/6
|
||||
f 25/48/1 34/43/1 56/12/1
|
||||
f 71/33/3 100/9/3 57/27/3
|
||||
f 57/27/1 39/49/1 71/7/1
|
||||
f 50/20/5 100/26/5 69/9/5
|
||||
f 18/1/1 10/17/1 52/2/1
|
||||
f 60/11/2 25/48/2 56/12/2
|
||||
f 23/13/2 34/12/2 72/14/2
|
||||
f 72/14/2 47/44/2 54/28/2
|
||||
f 103/15/2 55/52/2 23/13/2
|
||||
f 55/52/2 51/53/2 23/13/2
|
||||
f 72/14/2 54/28/2 103/15/2
|
||||
f 51/53/2 66/11/2 23/13/2
|
||||
f 10/1/3 18/54/3 59/16/3
|
||||
f 4/31/2 3/18/2 50/20/2
|
||||
f 3/18/2 28/4/2 68/6/2
|
||||
f 3/18/2 68/6/2 67/19/2
|
||||
f 69/9/2 21/34/2 4/31/2
|
||||
f 50/20/2 69/9/2 4/31/2
|
||||
f 68/6/2 28/4/2 107/5/2
|
||||
f 28/4/2 7/22/2 107/5/2
|
||||
f 7/22/2 8/51/2 39/23/2
|
||||
f 8/51/2 30/33/2 71/27/2
|
||||
f 30/33/2 21/34/2 69/9/2
|
||||
f 30/33/2 69/9/2 71/27/2
|
||||
f 96/21/2 107/5/2 7/22/2
|
||||
f 8/51/2 71/27/2 39/23/2
|
||||
f 96/21/2 7/22/2 39/23/2
|
||||
f 14/40/2 48/42/2 34/12/2
|
||||
f 48/42/2 72/14/2 34/12/2
|
||||
f 96/21/2 39/23/2 14/40/2
|
||||
f 36/30/2 13/29/2 38/39/2
|
||||
f 38/39/2 96/21/2 14/40/2
|
||||
f 14/40/2 34/12/2 93/48/2
|
||||
f 36/30/2 38/39/2 92/38/2
|
||||
f 38/39/2 14/40/2 92/38/2
|
||||
f 14/40/2 93/48/2 92/38/2
|
||||
f 93/48/2 66/11/2 102/17/2
|
||||
f 66/11/2 51/53/2 16/3/2
|
||||
f 16/3/2 50/20/2 67/19/2
|
||||
f 52/1/2 10/54/2 24/16/2
|
||||
f 16/3/2 67/19/2 52/1/2
|
||||
f 93/48/2 102/17/2 92/38/2
|
||||
f 66/11/2 16/3/2 102/17/2
|
||||
f 52/1/2 24/16/2 102/17/2
|
||||
f 15/44/2 26/14/2 49/42/2
|
||||
f 49/42/2 27/40/2 88/23/2
|
||||
f 100/9/2 43/20/2 35/52/2
|
||||
f 43/20/2 17/3/2 35/52/2
|
||||
f 35/52/2 101/15/2 70/28/2
|
||||
f 49/42/2 88/23/2 57/27/2
|
||||
f 15/44/2 49/42/2 57/27/2
|
||||
f 100/9/2 35/52/2 70/28/2
|
||||
f 70/28/2 15/44/2 57/27/2
|
||||
f 53/38/2 109/17/2 59/16/2
|
||||
f 18/54/2 94/1/2 115/19/2
|
||||
f 11/30/2 53/38/2 59/16/2
|
||||
f 18/54/2 115/19/2 61/6/2
|
||||
f 59/16/2 18/54/2 61/6/2
|
||||
f 61/6/2 110/5/2 11/30/2
|
||||
f 110/5/2 112/21/2 12/29/2
|
||||
f 112/21/2 37/39/2 12/29/2
|
||||
f 11/30/2 59/16/2 61/6/2
|
||||
f 52/3/3 67/20/3 115/19/3
|
||||
f 67/19/5 68/6/5 61/10/5
|
||||
f 59/17/5 109/2/5 102/35/5
|
||||
f 92/37/3 102/2/3 109/17/3
|
||||
f 11/36/1 36/38/1 92/37/1
|
||||
f 36/38/3 11/30/3 12/29/3
|
||||
f 13/39/5 12/38/5 37/37/5
|
||||
f 38/40/3 37/39/3 112/21/3
|
||||
f 110/5/1 107/8/1 96/41/1
|
||||
f 61/4/6 68/6/6 107/5/6
|
||||
f 88/21/6 27/39/6 14/40/6
|
||||
f 14/40/5 27/37/5 49/14/5
|
||||
f 26/12/6 72/14/6 48/42/6
|
||||
f 47/44/5 72/14/5 26/45/5
|
||||
f 15/14/6 70/15/6 54/28/6
|
||||
f 101/15/1 103/45/1 54/46/1
|
||||
f 35/47/6 55/52/6 103/15/6
|
||||
f 51/11/1 55/15/1 35/52/1
|
||||
f 35/52/1 17/3/1 51/11/1
|
||||
f 17/1/6 43/19/6 50/20/6
|
||||
f 56/12/3 34/14/3 23/15/3
|
||||
f 66/11/5 60/53/5 9/47/5
|
||||
f 93/48/6 25/37/6 60/2/6
|
||||
f 25/48/1 93/55/1 34/43/1
|
||||
f 71/33/3 69/34/3 100/9/3
|
||||
f 57/27/1 88/23/1 39/49/1
|
||||
f 50/20/5 43/25/5 100/26/5
|
||||
g Chest_chest-top
|
||||
usemtl chest-top
|
||||
f 91/4/2 58/5/2 78/6/2
|
||||
f 57/7/1 58/5/1 111/8/1
|
||||
f 64/6/3 65/9/3 29/10/3
|
||||
f 91/6/5 77/26/5 100/9/5
|
||||
f 58/5/6 79/27/6 19/7/6
|
||||
f 57/27/6 91/6/6 100/9/6
|
||||
f 110/27/3 62/6/3 108/5/3
|
||||
f 62/6/2 63/32/2 108/5/2
|
||||
f 61/26/5 64/6/5 62/10/5
|
||||
f 108/5/1 95/7/1 110/27/1
|
||||
f 110/33/4 65/9/4 61/34/4
|
||||
f 100/9/4 79/33/4 57/27/4
|
||||
f 33/26/6 77/9/6 78/6/6
|
||||
f 32/32/3 64/6/3 22/4/3
|
||||
f 91/4/9 111/32/9 58/5/9
|
||||
f 57/7/1 79/27/1 58/5/1
|
||||
f 63/5/3 32/32/3 5/22/3
|
||||
f 31/7/3 7/51/3 95/27/3
|
||||
f 7/51/3 28/34/3 95/27/3
|
||||
f 63/5/3 5/22/3 31/7/3
|
||||
f 95/27/3 63/5/3 31/7/3
|
||||
f 28/34/3 3/31/3 65/9/3
|
||||
f 95/27/3 28/34/3 65/9/3
|
||||
f 29/10/3 1/18/3 22/4/3
|
||||
f 3/31/3 29/10/3 65/9/3
|
||||
f 29/10/3 22/4/3 64/6/3
|
||||
f 91/6/5 78/10/5 77/26/5
|
||||
f 79/27/6 30/33/6 8/51/6
|
||||
f 19/7/6 6/22/6 58/5/6
|
||||
f 6/22/6 20/32/6 58/5/6
|
||||
f 79/27/6 8/51/6 19/7/6
|
||||
f 57/27/10 111/5/10 91/6/10
|
||||
f 110/27/3 61/9/3 62/6/3
|
||||
f 62/6/2 64/4/2 63/32/2
|
||||
f 61/26/5 65/9/5 64/6/5
|
||||
f 108/5/1 63/8/1 95/7/1
|
||||
f 110/33/4 95/27/4 65/9/4
|
||||
f 100/9/4 77/34/4 79/33/4
|
||||
f 33/26/6 4/31/6 21/34/6
|
||||
f 21/34/6 30/33/6 79/27/6
|
||||
f 21/34/6 79/27/6 77/9/6
|
||||
f 2/18/6 33/26/6 78/6/6
|
||||
f 33/26/6 21/34/6 77/9/6
|
||||
f 58/5/6 20/32/6 78/6/6
|
||||
f 20/32/6 2/18/6 78/6/6
|
||||
f 32/32/3 63/5/3 64/6/3
|
||||
g Chest_chest-side
|
||||
usemtl chest-side
|
||||
f 99/21/4 1/22/4 42/23/4
|
||||
f 7/4/5 73/24/5 46/25/5
|
||||
f 98/21/1 3/22/1 41/23/1
|
||||
f 45/20/1 82/9/1 2/31/1
|
||||
f 5/4/4 84/24/4 44/25/4
|
||||
f 106/5/6 110/4/6 74/6/6
|
||||
f 76/33/7 57/9/7 111/27/7
|
||||
f 73/19/4 110/10/4 112/24/4
|
||||
f 57/26/4 46/20/4 88/25/4
|
||||
f 5/22/5 40/23/5 97/21/5
|
||||
f 73/20/3 113/21/3 97/23/3
|
||||
f 84/20/3 114/21/3 99/23/3
|
||||
f 80/20/3 115/21/3 98/23/3
|
||||
f 40/23/6 88/19/6 46/20/6
|
||||
f 42/23/6 89/19/6 44/20/6
|
||||
f 41/23/6 86/19/6 45/20/6
|
||||
f 40/50/2 111/27/2 89/23/2
|
||||
f 97/41/2 108/5/2 106/8/2
|
||||
f 113/19/5 110/5/5 108/6/5
|
||||
f 85/10/1 113/19/1 84/24/1
|
||||
f 44/25/1 111/9/1 87/26/1
|
||||
f 111/33/8 90/9/8 87/27/8
|
||||
f 42/23/5 91/7/5 86/49/5
|
||||
f 111/27/4 86/20/4 91/9/4
|
||||
f 114/41/5 104/5/5 99/21/5
|
||||
f 62/32/6 85/6/6 104/5/6
|
||||
f 108/5/4 114/19/4 113/21/4
|
||||
f 82/34/3 100/27/3 83/33/3
|
||||
f 45/25/2 91/9/2 82/26/2
|
||||
f 43/49/4 83/27/4 100/7/4
|
||||
f 100/27/1 86/20/1 43/23/1
|
||||
f 62/6/2 80/24/2 81/10/2
|
||||
f 62/4/6 105/5/6 61/32/6
|
||||
f 105/5/4 115/41/4 61/8/4
|
||||
f 62/6/1 115/21/1 114/19/1
|
||||
f 111/9/5 88/23/5 89/20/5
|
||||
f 22/32/4 1/22/4 104/5/4
|
||||
f 1/22/4 2/51/4 42/23/4
|
||||
f 104/5/4 1/22/4 99/21/4
|
||||
f 2/51/4 20/34/4 90/27/4
|
||||
f 20/34/4 87/9/4 90/27/4
|
||||
f 85/6/4 32/4/4 22/32/4
|
||||
f 104/5/4 85/6/4 22/32/4
|
||||
f 2/51/4 90/27/4 42/23/4
|
||||
f 42/23/4 44/20/4 84/19/4
|
||||
f 42/23/4 84/19/4 99/21/4
|
||||
f 8/34/5 7/4/5 46/25/5
|
||||
f 7/4/5 31/18/5 74/10/5
|
||||
f 7/4/5 74/10/5 73/24/5
|
||||
f 75/26/5 19/31/5 8/34/5
|
||||
f 46/25/5 75/26/5 8/34/5
|
||||
f 41/23/1 45/20/1 80/19/1
|
||||
f 41/23/1 80/19/1 98/21/1
|
||||
f 4/51/1 33/33/1 83/27/1
|
||||
f 4/51/1 83/27/1 41/23/1
|
||||
f 81/6/1 29/4/1 105/5/1
|
||||
f 29/4/1 3/22/1 105/5/1
|
||||
f 3/22/1 4/51/1 41/23/1
|
||||
f 98/21/1 105/5/1 3/22/1
|
||||
f 2/31/1 1/18/1 45/20/1
|
||||
f 1/18/1 29/4/1 81/6/1
|
||||
f 1/18/1 81/6/1 80/19/1
|
||||
f 83/27/1 33/33/1 82/9/1
|
||||
f 33/33/1 2/31/1 82/9/1
|
||||
f 1/18/1 80/19/1 45/20/1
|
||||
f 6/34/4 5/4/4 44/25/4
|
||||
f 5/4/4 32/18/4 85/10/4
|
||||
f 5/4/4 85/10/4 84/24/4
|
||||
f 87/26/4 20/31/4 6/34/4
|
||||
f 44/25/4 87/26/4 6/34/4
|
||||
f 106/5/6 108/32/6 110/4/6
|
||||
f 76/33/3 75/34/3 57/9/3
|
||||
f 73/19/4 74/6/4 110/10/4
|
||||
f 57/26/4 75/9/4 46/20/4
|
||||
f 6/51/5 19/34/5 76/27/5
|
||||
f 19/34/5 75/9/5 76/27/5
|
||||
f 74/6/5 31/4/5 106/5/5
|
||||
f 31/4/5 5/22/5 106/5/5
|
||||
f 5/22/5 6/51/5 40/23/5
|
||||
f 6/51/5 76/27/5 40/23/5
|
||||
f 40/23/5 46/20/5 73/19/5
|
||||
f 97/21/5 106/5/5 5/22/5
|
||||
f 40/23/5 73/19/5 97/21/5
|
||||
f 73/20/3 112/19/3 113/21/3
|
||||
f 84/20/3 113/19/3 114/21/3
|
||||
f 80/20/3 114/19/3 115/21/3
|
||||
f 40/23/6 89/21/6 88/19/6
|
||||
f 42/23/6 86/21/6 89/19/6
|
||||
f 41/23/6 43/21/6 86/19/6
|
||||
f 40/50/11 76/7/11 111/27/11
|
||||
f 97/41/2 113/21/2 108/5/2
|
||||
f 113/19/5 112/21/5 110/5/5
|
||||
f 85/10/1 108/6/1 113/19/1
|
||||
f 44/25/1 89/20/1 111/9/1
|
||||
f 111/33/12 91/34/12 90/9/12
|
||||
f 42/23/5 90/27/5 91/7/5
|
||||
f 111/27/4 89/23/4 86/20/4
|
||||
f 114/41/5 62/8/5 104/5/5
|
||||
f 62/32/6 108/4/6 85/6/6
|
||||
f 108/5/4 62/6/4 114/19/4
|
||||
f 82/34/3 91/9/3 100/27/3
|
||||
f 45/25/2 86/20/2 91/9/2
|
||||
f 43/49/4 41/23/4 83/27/4
|
||||
f 100/27/1 91/9/1 86/20/1
|
||||
f 62/6/2 114/19/2 80/24/2
|
||||
f 62/4/6 81/6/6 105/5/6
|
||||
f 105/5/4 98/21/4 115/41/4
|
||||
f 62/6/1 61/5/1 115/21/1
|
||||
f 111/9/5 57/27/5 88/23/5
|
||||
@@ -0,0 +1,608 @@
|
||||
# Blender 4.4.3
|
||||
# www.blender.org
|
||||
mtllib everness_chest_opened.mtl
|
||||
o Chest
|
||||
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.062500 0.000000 -0.437500
|
||||
v 0.125000 0.125000 -0.500000
|
||||
v 0.062500 -0.125000 -0.437500
|
||||
v -0.125000 0.125000 -0.500000
|
||||
v -0.125000 0.125000 -0.437500
|
||||
v 0.437500 -0.500000 0.500000
|
||||
v -0.062500 0.000000 -0.500000
|
||||
v 0.062500 0.062500 -0.437500
|
||||
v 0.062500 -0.062500 -0.437500
|
||||
v 0.125000 0.125000 -0.437500
|
||||
v 0.437500 -0.500000 -0.500000
|
||||
v 0.062500 0.000000 -0.500000
|
||||
v -0.125000 -0.062500 -0.437500
|
||||
v 0.437500 0.125000 -0.500000
|
||||
v 0.500000 0.125000 0.437500
|
||||
v -0.500000 0.125000 -0.437500
|
||||
v -0.437500 0.125000 -0.437500
|
||||
v 0.437500 0.125000 0.500000
|
||||
v -0.500000 0.125000 0.437500
|
||||
v 0.500000 0.125000 -0.437500
|
||||
v 0.062500 -0.125000 -0.500000
|
||||
v 0.125000 -0.062500 -0.500000
|
||||
v 0.125000 -0.062500 -0.437500
|
||||
v -0.437500 0.125000 -0.500000
|
||||
v -0.125000 0.062500 -0.500000
|
||||
v -0.062500 -0.125000 -0.500000
|
||||
v -0.125000 -0.062500 -0.500000
|
||||
v 0.062500 0.000000 -0.437500
|
||||
v 0.437500 -0.437500 -0.437500
|
||||
v 0.437500 -0.500000 0.437500
|
||||
v -0.062500 0.062500 -0.437500
|
||||
v -0.062500 0.062500 -0.500000
|
||||
v -0.437500 -0.437500 -0.500000
|
||||
v -0.062500 -0.125000 -0.437500
|
||||
v 0.437500 -0.437500 -0.500000
|
||||
v 0.062500 -0.062500 -0.500000
|
||||
v 0.500000 -0.437500 -0.437500
|
||||
v 0.500000 -0.437500 0.437500
|
||||
v -0.437500 -0.500000 -0.437500
|
||||
v -0.437500 -0.500000 0.437500
|
||||
v 0.437500 -0.500000 -0.437500
|
||||
v -0.500000 -0.437500 0.437500
|
||||
v -0.500000 -0.437500 -0.437500
|
||||
v -0.437500 0.125000 0.437500
|
||||
v 0.437500 -0.437500 0.500000
|
||||
v 0.437500 0.125000 -0.437500
|
||||
v 0.437500 0.125000 0.437500
|
||||
v -0.437500 -0.437500 0.500000
|
||||
v -0.437500 -0.437500 0.437500
|
||||
v 0.062500 0.062500 -0.500000
|
||||
v -0.437500 -0.437500 -0.437500
|
||||
v -0.062500 -0.062500 -0.437500
|
||||
v -0.062500 -0.062500 -0.500000
|
||||
v 0.437500 -0.437455 0.437505
|
||||
v -0.500000 0.125000 -0.500000
|
||||
v 0.500000 0.125000 -0.500000
|
||||
v -0.500000 0.125000 0.500000
|
||||
v -0.500000 0.390165 0.765165
|
||||
v -0.500000 1.097272 0.058058
|
||||
v 0.500000 0.390165 0.765165
|
||||
v 0.500000 1.097272 0.058058
|
||||
v -0.125000 0.920495 -0.118718
|
||||
v 0.062500 0.876301 -0.074524
|
||||
v 0.125000 0.876301 -0.074524
|
||||
v 0.125000 0.920495 -0.118719
|
||||
v -0.374993 0.787913 -0.162913
|
||||
v -0.125000 0.876301 -0.074524
|
||||
v -0.437500 0.390165 0.765165
|
||||
v -0.062500 0.920495 -0.118718
|
||||
v -0.437500 1.097272 0.058058
|
||||
v -0.500000 0.434359 0.720971
|
||||
v 0.500000 1.053078 0.102252
|
||||
v 0.437500 0.390165 0.765165
|
||||
v 0.062500 0.920495 -0.118719
|
||||
v 0.125000 0.832107 -0.118719
|
||||
v 0.125000 0.876301 -0.162913
|
||||
v -0.437500 0.125000 0.500000
|
||||
v -0.437500 0.787913 -0.162913
|
||||
v -0.500000 0.169194 0.455806
|
||||
v 0.500000 0.787913 -0.162913
|
||||
v -0.437500 0.832107 -0.207107
|
||||
v -0.125000 0.876301 -0.162913
|
||||
v 0.062500 0.832107 -0.118719
|
||||
v -0.062500 0.876301 -0.074524
|
||||
v -0.437500 1.008884 0.058058
|
||||
v -0.437500 0.390165 0.676777
|
||||
v 0.437500 0.434359 0.720971
|
||||
v -0.437500 0.434359 0.720971
|
||||
v -0.437500 1.053078 0.102253
|
||||
v -0.437500 0.876301 -0.162912
|
||||
v -0.437500 1.053078 0.013864
|
||||
v 0.500000 0.832107 -0.118719
|
||||
v 0.500000 1.008883 0.058058
|
||||
v -0.500000 0.213388 0.500000
|
||||
v -0.500000 0.390165 0.676777
|
||||
v 0.437500 0.169194 0.544194
|
||||
v 0.437500 0.345971 0.720971
|
||||
v -0.437500 0.169194 0.455806
|
||||
v 0.437500 0.787913 -0.162913
|
||||
v 0.437500 0.169194 0.455806
|
||||
v 0.062500 0.876301 -0.162913
|
||||
v -0.125000 0.832107 -0.118718
|
||||
v 0.437500 1.053078 0.102252
|
||||
v 0.437500 0.876301 -0.162913
|
||||
v 0.500000 0.213388 0.500000
|
||||
v -0.500000 0.832107 -0.118718
|
||||
v -0.437500 0.169194 0.544194
|
||||
v -0.062500 0.876301 -0.162913
|
||||
v -0.437500 0.345971 0.720971
|
||||
v -0.500000 1.008884 0.058058
|
||||
v 0.500000 0.390165 0.676776
|
||||
v 0.437500 1.053078 0.013864
|
||||
v 0.437500 0.390165 0.676776
|
||||
v -0.062500 0.832107 -0.118718
|
||||
v 0.437500 1.008883 0.058058
|
||||
v 0.437500 0.832107 -0.118719
|
||||
v 0.437500 0.213388 0.500000
|
||||
v -0.437500 0.213388 0.500000
|
||||
v -0.437500 0.832107 -0.118718
|
||||
v -0.500000 0.832107 -0.207107
|
||||
v 0.500000 0.832107 -0.207107
|
||||
v 0.500000 0.125000 0.500000
|
||||
v -0.374993 0.125000 -0.374993
|
||||
v 0.374993 -0.437500 -0.374993
|
||||
v -0.374993 0.125000 0.374994
|
||||
v 0.374993 0.125000 -0.374993
|
||||
v 0.374993 0.125000 0.374993
|
||||
v -0.374993 -0.437500 0.374994
|
||||
v -0.374993 -0.437500 -0.374993
|
||||
v 0.374994 -0.437455 0.374998
|
||||
v 0.374993 0.125000 0.437500
|
||||
v -0.374993 0.125000 0.437500
|
||||
v 0.374568 -0.374869 -0.374568
|
||||
v -0.374568 -0.374869 0.374569
|
||||
v -0.374568 -0.374869 -0.374568
|
||||
v 0.374568 -0.374816 0.374573
|
||||
v -0.374993 0.898590 0.031891
|
||||
v -0.374993 0.363998 0.566483
|
||||
v 0.374993 0.363998 0.566483
|
||||
v 0.374993 0.898590 0.031891
|
||||
v 0.374993 0.745849 -0.120850
|
||||
v 0.374993 0.211257 0.413742
|
||||
v -0.374993 0.211257 0.413743
|
||||
v -0.374993 0.745849 -0.120849
|
||||
v 0.374993 0.787913 -0.162913
|
||||
vn -0.0000 -0.0000 -1.0000
|
||||
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 1.0000 -0.0000
|
||||
vn 0.0007 1.0000 -0.0001
|
||||
vn -0.0000 1.0000 0.0007
|
||||
vn -0.0000 -0.7071 -0.7071
|
||||
vn -0.0000 0.7071 0.7071
|
||||
vn -0.0000 0.7071 -0.7071
|
||||
vn -0.0000 -0.7071 0.7071
|
||||
vn -0.0001 1.0000 -0.0001
|
||||
vn -0.0000 0.0001 -1.0000
|
||||
vn 0.0001 -1.0000 0.0001
|
||||
vn -0.0001 -0.0000 -1.0000
|
||||
vn -0.0001 1.0000 -0.0000
|
||||
vt 0.937500 1.000000
|
||||
vt 0.062500 0.937500
|
||||
vt 0.937500 0.937500
|
||||
vt -0.000000 0.062500
|
||||
vt -0.000000 0.937500
|
||||
vt 0.562500 0.500000
|
||||
vt 0.437500 0.562500
|
||||
vt 0.437500 0.500000
|
||||
vt 0.437500 0.437500
|
||||
vt 0.562500 0.437500
|
||||
vt 0.937500 0.062500
|
||||
vt 1.000000 0.937500
|
||||
vt 1.000000 0.062500
|
||||
vt 0.062500 0.062500
|
||||
vt 0.562500 0.375000
|
||||
vt 0.000000 1.000000
|
||||
vt 0.062500 1.000000
|
||||
vt 0.937500 0.000000
|
||||
vt 0.062500 0.000000
|
||||
vt 0.375000 0.437500
|
||||
vt 0.437500 0.625000
|
||||
vt 0.375000 0.500000
|
||||
vt 0.437500 0.375000
|
||||
vt 0.500000 0.437500
|
||||
vt 0.500000 0.375000
|
||||
vt 0.625000 0.500000
|
||||
vt 0.625000 0.625000
|
||||
vt 0.562500 0.625000
|
||||
vt 0.562500 0.562500
|
||||
vt 0.375000 0.562500
|
||||
vt 0.062500 0.625000
|
||||
vt -0.000000 0.625000
|
||||
vt 1.000000 0.625000
|
||||
vt 0.937500 0.625000
|
||||
vt 0.000000 0.625000
|
||||
vt 0.875000 0.625000
|
||||
vt 1.000000 1.000000
|
||||
vt -0.000000 0.000000
|
||||
vt 1.000000 0.000000
|
||||
vt 0.375000 0.625000
|
||||
vt -0.000000 0.000000
|
||||
vt 0.062500 0.000000
|
||||
vt 0.062500 0.062500
|
||||
vt 0.625000 0.687500
|
||||
vt 0.562500 0.687500
|
||||
vt 0.625000 0.750000
|
||||
vt 0.562500 0.750000
|
||||
vt 0.937500 0.687500
|
||||
vt 0.062500 0.687500
|
||||
vt 1.000000 0.687500
|
||||
vt 0.437500 0.687500
|
||||
vt 0.375000 0.687500
|
||||
vt 0.375000 0.750000
|
||||
vt 0.500000 0.687500
|
||||
vt 0.500000 0.625000
|
||||
vt -0.000000 0.687500
|
||||
vt -0.000000 0.562500
|
||||
vt 0.062500 0.562500
|
||||
vt 0.937500 0.562500
|
||||
vt 0.875000 0.125000
|
||||
vt 0.125000 0.062500
|
||||
vt 0.125000 0.937500
|
||||
vt 0.625000 0.437500
|
||||
vt 0.625000 0.562500
|
||||
vt 0.125000 0.625000
|
||||
vt 1.000000 -0.000000
|
||||
vt 0.062500 1.000000
|
||||
vt 0.000000 1.000000
|
||||
vt 0.437500 0.750000
|
||||
vt 0.875000 0.937500
|
||||
vt 0.125000 1.000000
|
||||
vt 0.875000 1.000000
|
||||
vt 1.000000 0.562500
|
||||
vt 0.875000 0.875000
|
||||
vt 0.062500 0.875000
|
||||
vt 0.125000 0.875000
|
||||
vt 0.125000 0.125000
|
||||
vt 0.062500 0.125000
|
||||
vt 0.937500 0.375000
|
||||
s 0
|
||||
g Chest_chest-front
|
||||
usemtl chest-front
|
||||
f 5/6/1 12/7/1 32/8/1
|
||||
f 11/6/1 40/9/1 57/10/1
|
||||
f 33/14/1 55/11/1 38/15/1
|
||||
f 26/20/3 14/21/3 27/9/3
|
||||
f 13/8/4 26/20/4 27/22/4
|
||||
f 25/23/3 13/24/3 7/25/3
|
||||
f 25/23/4 38/10/4 30/15/4
|
||||
f 38/15/2 57/24/2 30/25/2
|
||||
f 17/26/4 57/10/4 56/6/4
|
||||
f 9/27/2 8/28/2 29/29/2
|
||||
f 5/6/6 16/9/6 11/10/6
|
||||
f 36/29/3 5/26/3 11/6/3
|
||||
f 54/7/4 35/28/4 36/29/4
|
||||
f 32/8/2 54/30/2 16/22/2
|
||||
f 33/14/6 37/18/6 55/11/6
|
||||
f 39/4/2 50/31/2 18/32/2
|
||||
f 37/11/3 21/33/3 55/13/3
|
||||
f 6/40/1 54/7/1 36/29/1
|
||||
f 126/41/9 22/42/9 104/43/9
|
||||
f 71/44/2 86/28/2 106/27/2
|
||||
f 73/45/10 71/46/10 88/47/10
|
||||
f 94/48/11 85/34/11 124/33/11
|
||||
f 125/35/11 105/51/11 80/52/11
|
||||
f 119/2/11 120/49/11 68/53/11
|
||||
f 106/44/10 94/34/10 123/48/10
|
||||
f 94/48/3 89/12/3 123/50/3
|
||||
f 73/54/3 118/28/3 112/55/3
|
||||
f 105/21/10 118/45/10 87/51/10
|
||||
f 67/54/2 105/21/2 87/55/2
|
||||
f 78/51/10 68/53/10 69/52/10
|
||||
f 69/52/3 79/21/3 80/40/3
|
||||
f 80/40/10 120/49/10 108/31/10
|
||||
f 119/2/2 108/56/2 120/49/2
|
||||
f 89/1/9 116/2/9 119/17/9
|
||||
f 83/13/9 82/3/9 102/11/9
|
||||
f 37/11/1 39/14/1 15/19/1
|
||||
f 48/1/6 23/37/6 81/3/6
|
||||
f 50/57/6 60/31/6 18/58/6
|
||||
f 28/33/6 20/59/6 21/34/6
|
||||
f 123/38/3 102/38/3 82/38/3
|
||||
f 118/38/12 106/38/12 70/38/12
|
||||
f 104/38/2 120/38/2 103/38/2
|
||||
f 121/38/11 102/38/11 122/38/11
|
||||
f 127/34/5 128/14/5 130/31/5
|
||||
f 145/49/12 141/3/12 148/48/12
|
||||
f 14/40/6 8/44/6 9/27/6
|
||||
f 5/6/1 35/29/1 12/7/1
|
||||
f 11/6/1 16/8/1 40/9/1
|
||||
f 40/9/1 25/23/1 30/15/1
|
||||
f 57/10/1 31/63/1 11/6/1
|
||||
f 31/63/1 29/64/1 11/6/1
|
||||
f 40/9/1 30/15/1 57/10/1
|
||||
f 29/64/1 36/29/1 11/6/1
|
||||
f 7/23/1 13/9/1 27/20/1
|
||||
f 27/20/1 14/40/1 50/31/1
|
||||
f 55/11/1 21/34/1 17/63/1
|
||||
f 21/34/1 9/27/1 17/63/1
|
||||
f 17/63/1 56/10/1 38/15/1
|
||||
f 27/20/1 50/31/1 33/14/1
|
||||
f 7/23/1 27/20/1 33/14/1
|
||||
f 55/11/1 17/63/1 38/15/1
|
||||
f 38/15/1 7/23/1 33/14/1
|
||||
f 26/20/3 6/40/3 14/21/3
|
||||
f 13/8/4 40/9/4 26/20/4
|
||||
f 25/23/3 40/9/3 13/24/3
|
||||
f 25/23/4 7/9/4 38/10/4
|
||||
f 38/15/2 56/10/2 57/24/2
|
||||
f 17/26/4 31/63/4 57/10/4
|
||||
f 29/29/2 31/10/2 17/63/2
|
||||
f 17/63/2 9/27/2 29/29/2
|
||||
f 5/6/6 32/8/6 16/9/6
|
||||
f 36/29/3 35/64/3 5/26/3
|
||||
f 54/7/4 12/21/4 35/28/4
|
||||
f 32/8/2 12/7/2 54/30/2
|
||||
f 33/14/6 39/19/6 37/18/6
|
||||
f 39/4/2 33/14/2 50/31/2
|
||||
f 37/11/3 28/34/3 21/33/3
|
||||
f 29/64/1 8/27/1 36/29/1
|
||||
f 8/27/1 6/40/1 36/29/1
|
||||
f 6/40/1 26/20/1 16/8/1
|
||||
f 26/20/1 40/9/1 16/8/1
|
||||
f 6/40/1 16/8/1 54/7/1
|
||||
f 103/67/9 84/68/9 104/43/9
|
||||
f 84/68/9 126/41/9 104/43/9
|
||||
f 71/44/2 66/45/2 86/28/2
|
||||
f 73/45/10 66/44/10 71/46/10
|
||||
f 124/33/11 63/37/11 95/3/11
|
||||
f 63/37/11 74/1/11 95/3/11
|
||||
f 95/3/11 94/48/11 124/33/11
|
||||
f 95/3/11 74/1/11 116/2/11
|
||||
f 74/1/11 65/16/11 116/2/11
|
||||
f 125/35/11 85/34/11 105/51/11
|
||||
f 85/34/11 94/48/11 86/44/11
|
||||
f 86/44/11 66/46/11 112/45/11
|
||||
f 66/46/11 73/47/11 112/45/11
|
||||
f 85/34/11 86/44/11 112/45/11
|
||||
f 105/51/11 85/34/11 112/45/11
|
||||
f 108/49/11 116/2/11 125/35/11
|
||||
f 116/2/11 65/16/11 125/35/11
|
||||
f 105/51/11 78/69/11 69/53/11
|
||||
f 105/51/11 69/53/11 80/52/11
|
||||
f 80/52/11 108/49/11 125/35/11
|
||||
f 87/51/11 118/45/11 88/47/11
|
||||
f 71/46/11 106/44/11 123/48/11
|
||||
f 67/69/11 87/51/11 88/47/11
|
||||
f 71/46/11 123/48/11 89/3/11
|
||||
f 67/69/11 88/47/11 89/3/11
|
||||
f 88/47/11 71/46/11 89/3/11
|
||||
f 120/49/11 79/52/11 68/53/11
|
||||
f 68/53/11 67/69/11 119/2/11
|
||||
f 119/2/11 67/69/11 89/3/11
|
||||
f 106/44/10 86/27/10 94/34/10
|
||||
f 94/48/3 95/3/3 89/12/3
|
||||
f 73/54/3 88/45/3 118/28/3
|
||||
f 105/21/10 112/28/10 118/45/10
|
||||
f 67/54/2 78/51/2 105/21/2
|
||||
f 78/51/10 67/69/10 68/53/10
|
||||
f 69/52/3 68/51/3 79/21/3
|
||||
f 80/40/10 79/52/10 120/49/10
|
||||
f 119/2/2 116/5/2 108/56/2
|
||||
f 89/1/9 95/3/9 116/2/9
|
||||
f 84/5/9 103/2/9 125/16/9
|
||||
f 103/2/9 149/62/9 125/16/9
|
||||
f 83/13/9 124/37/9 82/3/9
|
||||
f 124/37/9 85/1/9 82/3/9
|
||||
f 85/1/9 125/16/9 149/62/9
|
||||
f 85/1/9 149/62/9 70/70/9
|
||||
f 61/66/9 83/13/9 102/11/9
|
||||
f 22/19/9 81/18/9 102/11/9
|
||||
f 81/18/9 61/66/9 102/11/9
|
||||
f 102/11/9 104/14/9 22/19/9
|
||||
f 85/1/9 70/70/9 82/3/9
|
||||
f 39/14/1 18/31/1 60/35/1
|
||||
f 60/35/1 4/38/1 39/14/1
|
||||
f 4/38/1 15/19/1 39/14/1
|
||||
f 2/39/1 59/33/1 37/11/1
|
||||
f 59/33/1 28/34/1 37/11/1
|
||||
f 2/39/1 37/11/1 15/19/1
|
||||
f 22/2/6 126/5/6 51/17/6
|
||||
f 126/5/6 19/16/6 51/17/6
|
||||
f 51/17/6 135/71/6 22/2/6
|
||||
f 135/71/6 136/72/6 22/2/6
|
||||
f 23/37/6 61/12/6 81/3/6
|
||||
f 81/3/6 22/2/6 136/72/6
|
||||
f 136/72/6 48/1/6 81/3/6
|
||||
f 50/57/6 24/32/6 60/31/6
|
||||
f 28/33/6 59/73/6 20/59/6
|
||||
f 123/38/3 122/38/3 102/38/3
|
||||
f 79/38/12 68/38/12 67/38/12
|
||||
f 79/38/12 67/38/12 87/38/12
|
||||
f 103/38/12 120/38/12 149/38/12
|
||||
f 120/38/12 79/38/12 149/38/12
|
||||
f 79/38/12 87/38/12 149/38/12
|
||||
f 87/38/12 118/38/12 149/38/12
|
||||
f 118/38/12 88/38/12 106/38/12
|
||||
f 88/38/12 71/38/12 106/38/12
|
||||
f 106/38/12 123/38/12 70/38/12
|
||||
f 123/38/12 82/38/12 70/38/12
|
||||
f 70/38/12 149/38/12 118/38/12
|
||||
f 104/38/2 121/38/2 120/38/2
|
||||
f 121/38/11 104/38/11 102/38/11
|
||||
f 127/34/5 133/11/5 128/14/5
|
||||
f 145/49/12 144/2/12 141/3/12
|
||||
f 14/40/6 6/52/6 8/44/6
|
||||
g Chest_chest-top
|
||||
usemtl chest-top
|
||||
f 53/1/1 34/2/1 44/3/1
|
||||
f 33/4/2 34/2/2 58/5/2
|
||||
f 55/11/3 44/12/3 43/13/3
|
||||
f 3/16/4 10/17/4 34/2/4
|
||||
f 33/14/4 53/3/4 55/11/4
|
||||
f 33/14/5 43/18/5 45/19/5
|
||||
f 43/11/4 44/3/4 1/37/4
|
||||
f 93/11/10 107/14/10 74/18/10
|
||||
f 119/14/10 90/3/10 117/2/10
|
||||
f 117/2/11 92/1/11 91/17/11
|
||||
f 90/12/3 93/11/3 92/3/3
|
||||
f 117/2/2 107/4/2 119/14/2
|
||||
f 89/18/12 107/14/12 93/11/12
|
||||
f 72/1/10 91/2/10 92/3/10
|
||||
f 130/60/6 51/14/6 50/11/6
|
||||
f 136/2/6 131/61/6 129/62/6
|
||||
f 137/14/13 138/3/13 140/2/13
|
||||
f 142/3/9 144/14/9 143/2/9
|
||||
f 148/62/9 149/14/9 145/61/9
|
||||
f 104/11/9 102/3/9 146/60/9
|
||||
f 53/1/14 58/17/14 34/2/14
|
||||
f 33/4/2 45/14/2 34/2/2
|
||||
f 55/11/3 53/3/3 44/12/3
|
||||
f 34/2/4 45/14/4 4/38/4
|
||||
f 45/14/4 15/19/4 4/38/4
|
||||
f 4/38/4 3/16/4 34/2/4
|
||||
f 33/14/15 58/2/15 53/3/15
|
||||
f 33/14/5 55/11/5 43/18/5
|
||||
f 2/39/4 15/19/4 43/11/4
|
||||
f 15/19/4 45/14/4 43/11/4
|
||||
f 34/2/4 10/17/4 44/3/4
|
||||
f 10/17/4 1/37/4 44/3/4
|
||||
f 2/39/4 43/11/4 1/37/4
|
||||
f 107/14/10 91/2/10 76/4/10
|
||||
f 91/2/10 77/17/10 64/16/10
|
||||
f 76/4/10 91/2/10 64/16/10
|
||||
f 76/4/10 65/38/10 107/14/10
|
||||
f 65/38/10 74/18/10 107/14/10
|
||||
f 74/18/10 63/39/10 93/11/10
|
||||
f 63/39/10 75/12/10 93/11/10
|
||||
f 75/12/10 62/37/10 92/3/10
|
||||
f 62/37/10 72/1/10 92/3/10
|
||||
f 75/12/10 92/3/10 93/11/10
|
||||
f 119/14/10 89/11/10 90/3/10
|
||||
f 117/2/11 90/3/11 92/1/11
|
||||
f 90/12/3 89/13/3 93/11/3
|
||||
f 117/2/2 91/5/2 107/4/2
|
||||
f 89/18/12 119/19/12 107/14/12
|
||||
f 72/1/10 77/17/10 91/2/10
|
||||
f 21/3/6 48/2/6 127/74/6
|
||||
f 48/2/6 136/75/6 129/76/6
|
||||
f 127/74/6 48/2/6 129/76/6
|
||||
f 130/60/6 131/77/6 51/14/6
|
||||
f 131/77/6 135/78/6 51/14/6
|
||||
f 21/3/6 127/74/6 9/34/6
|
||||
f 127/74/6 130/60/6 9/34/6
|
||||
f 50/11/6 14/79/6 130/60/6
|
||||
f 14/79/6 9/34/6 130/60/6
|
||||
f 136/2/6 135/14/6 131/61/6
|
||||
f 137/14/6 139/11/6 138/3/6
|
||||
f 142/3/9 141/11/9 144/14/9
|
||||
f 148/62/9 70/2/9 149/14/9
|
||||
f 102/3/9 82/2/9 148/76/9
|
||||
f 82/2/9 70/75/9 148/76/9
|
||||
f 149/78/9 103/14/9 145/77/9
|
||||
f 103/14/9 104/11/9 146/60/9
|
||||
f 146/60/9 145/77/9 103/14/9
|
||||
f 102/3/9 148/76/9 147/74/9
|
||||
f 102/3/9 147/74/9 146/60/9
|
||||
g Chest_chest-side
|
||||
usemtl chest-side
|
||||
f 42/19/7 33/11/7 58/14/7
|
||||
f 33/13/5 24/34/5 50/33/5
|
||||
f 19/35/1 58/14/1 51/31/1
|
||||
f 22/33/2 58/11/2 49/13/2
|
||||
f 58/19/8 52/11/8 49/14/8
|
||||
f 81/31/3 53/4/3 48/32/3
|
||||
f 136/36/5 48/34/5 53/11/5
|
||||
f 46/18/6 55/14/6 47/19/6
|
||||
f 23/33/1 53/11/1 46/13/1
|
||||
f 21/32/5 47/14/5 55/4/5
|
||||
f 55/14/2 48/34/2 21/31/2
|
||||
f 58/11/3 50/31/3 51/34/3
|
||||
f 47/14/2 2/38/2 1/39/2
|
||||
f 52/14/5 1/38/5 10/18/5
|
||||
f 61/35/12 111/49/12 113/2/12
|
||||
f 96/50/3 84/33/3 125/34/3
|
||||
f 114/2/2 63/16/2 124/35/2
|
||||
f 98/48/2 83/34/2 61/33/2
|
||||
f 101/12/12 100/50/12 126/34/12
|
||||
f 97/3/9 117/17/9 119/1/9
|
||||
f 96/48/12 119/12/12 120/50/12
|
||||
f 64/16/3 126/35/3 115/2/3
|
||||
f 109/31/10 120/48/10 121/49/10
|
||||
f 111/31/10 121/48/10 122/49/10
|
||||
f 110/31/10 122/48/10 123/49/10
|
||||
f 115/5/11 121/49/11 117/2/11
|
||||
f 121/48/3 119/2/3 117/3/3
|
||||
f 100/50/2 117/3/2 121/48/2
|
||||
f 111/49/3 90/5/3 113/2/3
|
||||
f 90/17/9 101/3/9 113/2/9
|
||||
f 121/49/12 90/3/12 122/48/12
|
||||
f 90/3/11 98/50/11 99/12/11
|
||||
f 89/17/9 99/3/9 114/2/9
|
||||
f 89/5/12 110/49/12 123/56/12
|
||||
f 90/3/2 123/49/2 122/48/2
|
||||
f 3/38/3 4/39/3 42/14/3
|
||||
f 134/14/1 129/34/1 131/31/1
|
||||
f 129/34/3 133/14/3 127/31/3
|
||||
f 130/31/2 134/11/2 131/34/2
|
||||
f 144/2/2 146/48/2 143/3/2
|
||||
f 147/48/11 143/2/11 146/49/11
|
||||
f 148/49/3 142/3/3 147/48/3
|
||||
f 42/19/6 41/18/6 33/11/6
|
||||
f 33/13/5 41/11/5 24/34/5
|
||||
f 19/35/16 42/4/16 58/14/16
|
||||
f 22/33/2 51/34/2 58/11/2
|
||||
f 58/19/17 53/18/17 52/11/17
|
||||
f 81/31/3 52/14/3 53/4/3
|
||||
f 53/11/5 58/14/5 136/36/5
|
||||
f 58/14/5 51/31/5 135/65/5
|
||||
f 58/14/5 135/65/5 136/36/5
|
||||
f 46/18/6 53/11/6 55/14/6
|
||||
f 23/33/1 48/34/1 53/11/1
|
||||
f 21/32/5 20/31/5 47/14/5
|
||||
f 55/14/2 53/11/2 48/34/2
|
||||
f 58/11/3 33/14/3 50/31/3
|
||||
f 1/39/2 61/33/2 46/11/2
|
||||
f 61/33/2 23/34/2 46/11/2
|
||||
f 20/31/2 59/35/2 47/14/2
|
||||
f 59/35/2 2/38/2 47/14/2
|
||||
f 1/39/2 46/11/2 47/14/2
|
||||
f 52/14/5 81/31/5 61/35/5
|
||||
f 10/18/5 3/66/5 49/11/5
|
||||
f 3/66/5 126/33/5 49/11/5
|
||||
f 126/33/5 22/34/5 49/11/5
|
||||
f 52/14/5 61/35/5 1/38/5
|
||||
f 49/11/5 52/14/5 10/18/5
|
||||
f 72/17/12 62/16/12 113/2/12
|
||||
f 62/16/12 61/35/12 113/2/12
|
||||
f 81/31/12 22/34/12 100/48/12
|
||||
f 101/3/12 77/1/12 72/17/12
|
||||
f 113/2/12 101/3/12 72/17/12
|
||||
f 61/35/12 81/31/12 111/49/12
|
||||
f 81/31/12 100/48/12 111/49/12
|
||||
f 125/34/3 65/1/3 96/50/3
|
||||
f 65/1/3 76/37/3 97/12/3
|
||||
f 96/50/3 65/1/3 97/12/3
|
||||
f 124/35/2 83/34/2 110/49/2
|
||||
f 83/34/2 98/48/2 110/49/2
|
||||
f 99/3/2 75/1/2 114/2/2
|
||||
f 75/1/2 63/16/2 114/2/2
|
||||
f 124/35/2 110/49/2 114/2/2
|
||||
f 61/33/2 62/37/2 99/3/2
|
||||
f 62/37/2 75/1/2 99/3/2
|
||||
f 99/3/2 98/48/2 61/33/2
|
||||
f 126/34/12 64/1/12 101/12/12
|
||||
f 64/1/12 77/37/12 101/12/12
|
||||
f 100/50/12 22/33/12 126/34/12
|
||||
f 97/3/9 115/2/9 117/17/9
|
||||
f 96/48/12 97/3/12 119/12/12
|
||||
f 126/35/3 84/34/3 109/49/3
|
||||
f 84/34/3 96/48/3 109/49/3
|
||||
f 97/3/3 76/1/3 115/2/3
|
||||
f 76/1/3 64/16/3 115/2/3
|
||||
f 126/35/3 109/49/3 115/2/3
|
||||
f 109/31/10 96/34/10 120/48/10
|
||||
f 111/31/10 100/34/10 121/48/10
|
||||
f 110/31/10 98/34/10 122/48/10
|
||||
f 115/5/11 109/56/11 121/49/11
|
||||
f 121/48/3 120/49/3 119/2/3
|
||||
f 100/50/2 101/12/2 117/3/2
|
||||
f 111/49/3 122/56/3 90/5/3
|
||||
f 90/17/9 117/1/9 101/3/9
|
||||
f 121/49/12 117/2/12 90/3/12
|
||||
f 90/3/11 122/48/11 98/50/11
|
||||
f 89/17/9 90/1/9 99/3/9
|
||||
f 89/5/12 114/2/12 110/49/12
|
||||
f 90/3/2 89/2/2 123/49/2
|
||||
f 42/14/3 19/31/3 126/35/3
|
||||
f 4/39/3 60/33/3 41/11/3
|
||||
f 60/33/3 24/34/3 41/11/3
|
||||
f 42/14/3 126/35/3 3/38/3
|
||||
f 4/39/3 41/11/3 42/14/3
|
||||
f 134/14/1 132/11/1 129/34/1
|
||||
f 129/34/3 132/11/3 133/14/3
|
||||
f 130/31/2 128/14/2 134/11/2
|
||||
f 144/2/2 145/49/2 146/48/2
|
||||
f 147/48/11 142/3/11 143/2/11
|
||||
f 148/49/3 141/2/3 142/3/3
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,484 @@
|
||||
v -0.0625 -0.5000 -0.0625
|
||||
v 0.0625 -0.5000 -0.0625
|
||||
v 0.0625 1.0625 -0.0625
|
||||
v -0.0625 1.0625 -0.0625
|
||||
v -0.0625 -0.5000 0.0625
|
||||
v 0.0625 -0.5000 0.0625
|
||||
v 0.0625 1.0625 0.0625
|
||||
v -0.0625 1.0625 0.0625
|
||||
v -0.3125 1.2500 -0.3125
|
||||
v 0.3125 1.2500 -0.3125
|
||||
v 0.3125 1.5000 -0.3125
|
||||
v -0.3125 1.5000 -0.3125
|
||||
v -0.3125 1.2500 0.3125
|
||||
v 0.3125 1.2500 0.3125
|
||||
v 0.3125 1.5000 0.3125
|
||||
v -0.3125 1.5000 0.3125
|
||||
v -0.3125 1.0625 -0.1250
|
||||
v 0.3125 1.0625 -0.1250
|
||||
v 0.3125 1.2500 -0.1250
|
||||
v -0.3125 1.2500 -0.1250
|
||||
v -0.3125 1.0625 0.3125
|
||||
v 0.3125 1.0625 0.3125
|
||||
v 0.3125 1.2500 0.3125
|
||||
v -0.3125 1.2500 0.3125
|
||||
v -0.3125 1.0625 -0.3125
|
||||
v -0.2500 1.0625 -0.3125
|
||||
v -0.2500 1.2500 -0.3125
|
||||
v -0.3125 1.2500 -0.3125
|
||||
v -0.3125 1.0625 -0.1250
|
||||
v -0.2500 1.0625 -0.1250
|
||||
v -0.2500 1.2500 -0.1250
|
||||
v -0.3125 1.2500 -0.1250
|
||||
v -0.0625 1.0625 -0.3125
|
||||
v 0.0625 1.0625 -0.3125
|
||||
v 0.0625 1.2500 -0.3125
|
||||
v -0.0625 1.2500 -0.3125
|
||||
v -0.0625 1.0625 -0.1250
|
||||
v 0.0625 1.0625 -0.1250
|
||||
v 0.0625 1.2500 -0.1250
|
||||
v -0.0625 1.2500 -0.1250
|
||||
v 0.2500 1.0625 -0.3125
|
||||
v 0.3125 1.0625 -0.3125
|
||||
v 0.3125 1.2500 -0.3125
|
||||
v 0.2500 1.2500 -0.3125
|
||||
v 0.2500 1.0625 -0.1250
|
||||
v 0.3125 1.0625 -0.1250
|
||||
v 0.3125 1.2500 -0.1250
|
||||
v 0.2500 1.2500 -0.1250
|
||||
v -0.2500 0.9375 -0.3125
|
||||
v 0.2500 0.9375 -0.3125
|
||||
v 0.2500 1.0625 -0.3125
|
||||
v -0.2500 1.0625 -0.3125
|
||||
v -0.2500 0.9375 0.3125
|
||||
v 0.2500 0.9375 0.3125
|
||||
v 0.2500 1.0625 0.3125
|
||||
v -0.2500 1.0625 0.3125
|
||||
v -0.2500 0.8125 -0.3125
|
||||
v -0.1875 0.8125 -0.3125
|
||||
v -0.1875 0.9375 -0.3125
|
||||
v -0.2500 0.9375 -0.3125
|
||||
v -0.2500 0.8125 0.3125
|
||||
v -0.1875 0.8125 0.3125
|
||||
v -0.1875 0.9375 0.3125
|
||||
v -0.2500 0.9375 0.3125
|
||||
v -0.1250 0.8125 -0.3125
|
||||
v -0.0625 0.8125 -0.3125
|
||||
v -0.0625 0.9375 -0.3125
|
||||
v -0.1250 0.9375 -0.3125
|
||||
v -0.1250 0.8125 0.3125
|
||||
v -0.0625 0.8125 0.3125
|
||||
v -0.0625 0.9375 0.3125
|
||||
v -0.1250 0.9375 0.3125
|
||||
v 0.0625 0.8125 -0.3125
|
||||
v 0.1250 0.8125 -0.3125
|
||||
v 0.1250 0.9375 -0.3125
|
||||
v 0.0625 0.9375 -0.3125
|
||||
v 0.0625 0.8125 0.3125
|
||||
v 0.1250 0.8125 0.3125
|
||||
v 0.1250 0.9375 0.3125
|
||||
v 0.0625 0.9375 0.3125
|
||||
v 0.1875 0.8125 -0.3125
|
||||
v 0.2500 0.8125 -0.3125
|
||||
v 0.2500 0.9375 -0.3125
|
||||
v 0.1875 0.9375 -0.3125
|
||||
v 0.1875 0.8125 0.3125
|
||||
v 0.2500 0.8125 0.3125
|
||||
v 0.2500 0.9375 0.3125
|
||||
v 0.1875 0.9375 0.3125
|
||||
vt 0.0000 0.7109
|
||||
vt 0.0156 0.7109
|
||||
vt 0.0156 0.9062
|
||||
vt 0.0000 0.9062
|
||||
vt 0.0000 0.7109
|
||||
vt 0.0156 0.7109
|
||||
vt 0.0156 0.9062
|
||||
vt 0.0000 0.9062
|
||||
vt 0.0000 0.7109
|
||||
vt 0.0156 0.7109
|
||||
vt 0.0156 0.9062
|
||||
vt 0.0000 0.9062
|
||||
vt 0.0000 0.7109
|
||||
vt 0.0156 0.7109
|
||||
vt 0.0156 0.9062
|
||||
vt 0.0000 0.9062
|
||||
vt 0.0000 0.7109
|
||||
vt 0.0156 0.7109
|
||||
vt 0.0156 0.9062
|
||||
vt 0.0000 0.9062
|
||||
vt 0.0000 0.7109
|
||||
vt 0.0156 0.7109
|
||||
vt 0.0156 0.9062
|
||||
vt 0.0000 0.9062
|
||||
vt 0.0000 0.9688
|
||||
vt 0.0781 0.9688
|
||||
vt 0.0781 1.0000
|
||||
vt 0.0000 1.0000
|
||||
vt 0.0938 0.9688
|
||||
vt 0.1719 0.9688
|
||||
vt 0.1719 1.0000
|
||||
vt 0.0938 1.0000
|
||||
vt 0.1797 0.9688
|
||||
vt 0.2578 0.9688
|
||||
vt 0.2578 1.0000
|
||||
vt 0.1797 1.0000
|
||||
vt 0.2656 0.9688
|
||||
vt 0.3438 0.9688
|
||||
vt 0.3438 1.0000
|
||||
vt 0.2656 1.0000
|
||||
vt 0.3516 0.9219
|
||||
vt 0.4297 0.9219
|
||||
vt 0.4297 1.0000
|
||||
vt 0.3516 1.0000
|
||||
vt 0.4375 0.9219
|
||||
vt 0.5156 0.9219
|
||||
vt 0.5156 1.0000
|
||||
vt 0.4375 1.0000
|
||||
vt 0.0000 0.6719
|
||||
vt 0.0312 0.6719
|
||||
vt 0.0312 0.7031
|
||||
vt 0.0000 0.7031
|
||||
vt 0.5234 0.9766
|
||||
vt 0.6016 0.9766
|
||||
vt 0.6016 1.0000
|
||||
vt 0.5234 1.0000
|
||||
vt 0.6094 0.9766
|
||||
vt 0.6641 0.9766
|
||||
vt 0.6641 1.0000
|
||||
vt 0.6094 1.0000
|
||||
vt 0.6719 0.9766
|
||||
vt 0.7266 0.9766
|
||||
vt 0.7266 1.0000
|
||||
vt 0.6719 1.0000
|
||||
vt 0.7344 0.9453
|
||||
vt 0.8125 0.9453
|
||||
vt 0.8125 1.0000
|
||||
vt 0.7344 1.0000
|
||||
vt 0.8203 0.9453
|
||||
vt 0.8984 0.9453
|
||||
vt 0.8984 1.0000
|
||||
vt 0.8203 1.0000
|
||||
vt 0.0000 0.9453
|
||||
vt 0.0078 0.9453
|
||||
vt 0.0078 0.9688
|
||||
vt 0.0000 0.9688
|
||||
vt 0.9062 0.9766
|
||||
vt 0.9141 0.9766
|
||||
vt 0.9141 1.0000
|
||||
vt 0.9062 1.0000
|
||||
vt 0.9219 0.9766
|
||||
vt 0.9453 0.9766
|
||||
vt 0.9453 1.0000
|
||||
vt 0.9219 1.0000
|
||||
vt 0.9531 0.9766
|
||||
vt 0.9766 0.9766
|
||||
vt 0.9766 1.0000
|
||||
vt 0.9531 1.0000
|
||||
vt 0.9844 0.9766
|
||||
vt 0.9922 0.9766
|
||||
vt 0.9922 1.0000
|
||||
vt 0.9844 1.0000
|
||||
vt 0.0938 0.8906
|
||||
vt 0.1016 0.8906
|
||||
vt 0.1016 0.9141
|
||||
vt 0.0938 0.9141
|
||||
vt 0.0312 0.9453
|
||||
vt 0.0469 0.9453
|
||||
vt 0.0469 0.9688
|
||||
vt 0.0312 0.9688
|
||||
vt 0.1094 0.8906
|
||||
vt 0.1250 0.8906
|
||||
vt 0.1250 0.9141
|
||||
vt 0.1094 0.9141
|
||||
vt 0.1328 0.8906
|
||||
vt 0.1562 0.8906
|
||||
vt 0.1562 0.9141
|
||||
vt 0.1328 0.9141
|
||||
vt 0.1641 0.8906
|
||||
vt 0.1875 0.8906
|
||||
vt 0.1875 0.9141
|
||||
vt 0.1641 0.9141
|
||||
vt 0.1953 0.8906
|
||||
vt 0.2109 0.8906
|
||||
vt 0.2109 0.9141
|
||||
vt 0.1953 0.9141
|
||||
vt 0.2188 0.8906
|
||||
vt 0.2344 0.8906
|
||||
vt 0.2344 0.9141
|
||||
vt 0.2188 0.9141
|
||||
vt 0.0703 0.9453
|
||||
vt 0.0781 0.9453
|
||||
vt 0.0781 0.9688
|
||||
vt 0.0703 0.9688
|
||||
vt 0.2422 0.8906
|
||||
vt 0.2500 0.8906
|
||||
vt 0.2500 0.9141
|
||||
vt 0.2422 0.9141
|
||||
vt 0.2578 0.8906
|
||||
vt 0.2812 0.8906
|
||||
vt 0.2812 0.9141
|
||||
vt 0.2578 0.9141
|
||||
vt 0.2891 0.8906
|
||||
vt 0.3125 0.8906
|
||||
vt 0.3125 0.9141
|
||||
vt 0.2891 0.9141
|
||||
vt 0.3203 0.8906
|
||||
vt 0.3281 0.8906
|
||||
vt 0.3281 0.9141
|
||||
vt 0.3203 0.9141
|
||||
vt 0.3359 0.8906
|
||||
vt 0.3438 0.8906
|
||||
vt 0.3438 0.9141
|
||||
vt 0.3359 0.9141
|
||||
vt 0.0078 0.9297
|
||||
vt 0.0703 0.9297
|
||||
vt 0.0703 0.9453
|
||||
vt 0.0078 0.9453
|
||||
vt 0.3516 0.8984
|
||||
vt 0.4141 0.8984
|
||||
vt 0.4141 0.9141
|
||||
vt 0.3516 0.9141
|
||||
vt 0.4219 0.8984
|
||||
vt 0.5000 0.8984
|
||||
vt 0.5000 0.9141
|
||||
vt 0.4219 0.9141
|
||||
vt 0.5078 0.8984
|
||||
vt 0.5859 0.8984
|
||||
vt 0.5859 0.9141
|
||||
vt 0.5078 0.9141
|
||||
vt 0.5938 0.8359
|
||||
vt 0.6562 0.8359
|
||||
vt 0.6562 0.9141
|
||||
vt 0.5938 0.9141
|
||||
vt 0.6641 0.8359
|
||||
vt 0.7266 0.8359
|
||||
vt 0.7266 0.9141
|
||||
vt 0.6641 0.9141
|
||||
vt 0.0078 0.9141
|
||||
vt 0.0156 0.9141
|
||||
vt 0.0156 0.9297
|
||||
vt 0.0078 0.9297
|
||||
vt 0.7344 0.8984
|
||||
vt 0.7422 0.8984
|
||||
vt 0.7422 0.9141
|
||||
vt 0.7344 0.9141
|
||||
vt 0.7500 0.8984
|
||||
vt 0.8281 0.8984
|
||||
vt 0.8281 0.9141
|
||||
vt 0.7500 0.9141
|
||||
vt 0.8359 0.8984
|
||||
vt 0.9141 0.8984
|
||||
vt 0.9141 0.9141
|
||||
vt 0.8359 0.9141
|
||||
vt 0.9219 0.8359
|
||||
vt 0.9297 0.8359
|
||||
vt 0.9297 0.9141
|
||||
vt 0.9219 0.9141
|
||||
vt 0.9375 0.8359
|
||||
vt 0.9453 0.8359
|
||||
vt 0.9453 0.9141
|
||||
vt 0.9375 0.9141
|
||||
vt 0.0234 0.9141
|
||||
vt 0.0312 0.9141
|
||||
vt 0.0312 0.9297
|
||||
vt 0.0234 0.9297
|
||||
vt 0.9531 0.8984
|
||||
vt 0.9609 0.8984
|
||||
vt 0.9609 0.9141
|
||||
vt 0.9531 0.9141
|
||||
vt 0.0938 0.8125
|
||||
vt 0.1719 0.8125
|
||||
vt 0.1719 0.8281
|
||||
vt 0.0938 0.8281
|
||||
vt 0.1797 0.8125
|
||||
vt 0.2578 0.8125
|
||||
vt 0.2578 0.8281
|
||||
vt 0.1797 0.8281
|
||||
vt 0.2656 0.7500
|
||||
vt 0.2734 0.7500
|
||||
vt 0.2734 0.8281
|
||||
vt 0.2656 0.8281
|
||||
vt 0.2812 0.7500
|
||||
vt 0.2891 0.7500
|
||||
vt 0.2891 0.8281
|
||||
vt 0.2812 0.8281
|
||||
vt 0.0469 0.9141
|
||||
vt 0.0547 0.9141
|
||||
vt 0.0547 0.9297
|
||||
vt 0.0469 0.9297
|
||||
vt 0.2969 0.8125
|
||||
vt 0.3047 0.8125
|
||||
vt 0.3047 0.8281
|
||||
vt 0.2969 0.8281
|
||||
vt 0.3125 0.8125
|
||||
vt 0.3906 0.8125
|
||||
vt 0.3906 0.8281
|
||||
vt 0.3125 0.8281
|
||||
vt 0.3984 0.8125
|
||||
vt 0.4766 0.8125
|
||||
vt 0.4766 0.8281
|
||||
vt 0.3984 0.8281
|
||||
vt 0.4844 0.7500
|
||||
vt 0.4922 0.7500
|
||||
vt 0.4922 0.8281
|
||||
vt 0.4844 0.8281
|
||||
vt 0.5000 0.7500
|
||||
vt 0.5078 0.7500
|
||||
vt 0.5078 0.8281
|
||||
vt 0.5000 0.8281
|
||||
vt 0.0625 0.9141
|
||||
vt 0.0703 0.9141
|
||||
vt 0.0703 0.9297
|
||||
vt 0.0625 0.9297
|
||||
vt 0.5156 0.8125
|
||||
vt 0.5234 0.8125
|
||||
vt 0.5234 0.8281
|
||||
vt 0.5156 0.8281
|
||||
vt 0.5312 0.8125
|
||||
vt 0.6094 0.8125
|
||||
vt 0.6094 0.8281
|
||||
vt 0.5312 0.8281
|
||||
vt 0.6172 0.8125
|
||||
vt 0.6953 0.8125
|
||||
vt 0.6953 0.8281
|
||||
vt 0.6172 0.8281
|
||||
vt 0.7031 0.7500
|
||||
vt 0.7109 0.7500
|
||||
vt 0.7109 0.8281
|
||||
vt 0.7031 0.8281
|
||||
vt 0.7188 0.7500
|
||||
vt 0.7266 0.7500
|
||||
vt 0.7266 0.8281
|
||||
vt 0.7188 0.8281
|
||||
vn 0.0000 0.0000 -1.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 1.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 -1.0000 0.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn 0.0000 1.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 -1.0000 0.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn 0.0000 1.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 -1.0000 0.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn 0.0000 1.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 -1.0000 0.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn 0.0000 1.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 -1.0000 0.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn 0.0000 1.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 -1.0000 0.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn 0.0000 1.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 -1.0000 0.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn 0.0000 1.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 -1.0000 0.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn 0.0000 1.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 -1.0000 0.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn 0.0000 1.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 -1.0000 0.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
vn 0.0000 1.0000 0.0000
|
||||
vn 0.0000 -1.0000 0.0000
|
||||
f 1/1/1 2/2/1 3/3/1 4/4/1
|
||||
f 6/5/2 5/6/2 8/7/2 7/8/2
|
||||
f 5/9/3 1/10/3 4/11/3 8/12/3
|
||||
f 2/13/4 6/14/4 7/15/4 3/16/4
|
||||
f 4/17/5 3/18/5 7/19/5 8/20/5
|
||||
f 5/21/6 6/22/6 2/23/6 1/24/6
|
||||
f 9/25/7 10/26/7 11/27/7 12/28/7
|
||||
f 14/29/8 13/30/8 16/31/8 15/32/8
|
||||
f 13/33/9 9/34/9 12/35/9 16/36/9
|
||||
f 10/37/10 14/38/10 15/39/10 11/40/10
|
||||
f 12/41/11 11/42/11 15/43/11 16/44/11
|
||||
f 13/45/12 14/46/12 10/47/12 9/48/12
|
||||
f 17/49/13 18/50/13 19/51/13 20/52/13
|
||||
f 22/53/14 21/54/14 24/55/14 23/56/14
|
||||
f 21/57/15 17/58/15 20/59/15 24/60/15
|
||||
f 18/61/16 22/62/16 23/63/16 19/64/16
|
||||
f 20/65/17 19/66/17 23/67/17 24/68/17
|
||||
f 21/69/18 22/70/18 18/71/18 17/72/18
|
||||
f 25/73/19 26/74/19 27/75/19 28/76/19
|
||||
f 30/77/20 29/78/20 32/79/20 31/80/20
|
||||
f 29/81/21 25/82/21 28/83/21 32/84/21
|
||||
f 26/85/22 30/86/22 31/87/22 27/88/22
|
||||
f 28/89/23 27/90/23 31/91/23 32/92/23
|
||||
f 29/93/24 30/94/24 26/95/24 25/96/24
|
||||
f 33/97/25 34/98/25 35/99/25 36/100/25
|
||||
f 38/101/26 37/102/26 40/103/26 39/104/26
|
||||
f 37/105/27 33/106/27 36/107/27 40/108/27
|
||||
f 34/109/28 38/110/28 39/111/28 35/112/28
|
||||
f 36/113/29 35/114/29 39/115/29 40/116/29
|
||||
f 37/117/30 38/118/30 34/119/30 33/120/30
|
||||
f 41/121/31 42/122/31 43/123/31 44/124/31
|
||||
f 46/125/32 45/126/32 48/127/32 47/128/32
|
||||
f 45/129/33 41/130/33 44/131/33 48/132/33
|
||||
f 42/133/34 46/134/34 47/135/34 43/136/34
|
||||
f 44/137/35 43/138/35 47/139/35 48/140/35
|
||||
f 45/141/36 46/142/36 42/143/36 41/144/36
|
||||
f 49/145/37 50/146/37 51/147/37 52/148/37
|
||||
f 54/149/38 53/150/38 56/151/38 55/152/38
|
||||
f 53/153/39 49/154/39 52/155/39 56/156/39
|
||||
f 50/157/40 54/158/40 55/159/40 51/160/40
|
||||
f 52/161/41 51/162/41 55/163/41 56/164/41
|
||||
f 53/165/42 54/166/42 50/167/42 49/168/42
|
||||
f 57/169/43 58/170/43 59/171/43 60/172/43
|
||||
f 62/173/44 61/174/44 64/175/44 63/176/44
|
||||
f 61/177/45 57/178/45 60/179/45 64/180/45
|
||||
f 58/181/46 62/182/46 63/183/46 59/184/46
|
||||
f 60/185/47 59/186/47 63/187/47 64/188/47
|
||||
f 61/189/48 62/190/48 58/191/48 57/192/48
|
||||
f 65/193/49 66/194/49 67/195/49 68/196/49
|
||||
f 70/197/50 69/198/50 72/199/50 71/200/50
|
||||
f 69/201/51 65/202/51 68/203/51 72/204/51
|
||||
f 66/205/52 70/206/52 71/207/52 67/208/52
|
||||
f 68/209/53 67/210/53 71/211/53 72/212/53
|
||||
f 69/213/54 70/214/54 66/215/54 65/216/54
|
||||
f 73/217/55 74/218/55 75/219/55 76/220/55
|
||||
f 78/221/56 77/222/56 80/223/56 79/224/56
|
||||
f 77/225/57 73/226/57 76/227/57 80/228/57
|
||||
f 74/229/58 78/230/58 79/231/58 75/232/58
|
||||
f 76/233/59 75/234/59 79/235/59 80/236/59
|
||||
f 77/237/60 78/238/60 74/239/60 73/240/60
|
||||
f 81/241/61 82/242/61 83/243/61 84/244/61
|
||||
f 86/245/62 85/246/62 88/247/62 87/248/62
|
||||
f 85/249/63 81/250/63 84/251/63 88/252/63
|
||||
f 82/253/64 86/254/64 87/255/64 83/256/64
|
||||
f 84/257/65 83/258/65 87/259/65 88/260/65
|
||||
f 85/261/66 86/262/66 82/263/66 81/264/66
|
||||
File diff suppressed because it is too large.
Load diff
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1,436 @@
|
||||
# Blender 5.2.1 LTS
|
||||
# www.blender.org
|
||||
mtllib everness_hammer_pick.mtl
|
||||
g hammer_head.vox_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
|
||||
v 0.122134 0.563916 -0.242400
|
||||
v 0.122134 0.563916 0.242400
|
||||
v -0.220672 0.906721 -0.242400
|
||||
v -0.563477 -0.121695 -0.242400
|
||||
v -0.906282 0.221110 0.242400
|
||||
v -0.563477 -0.121695 0.242400
|
||||
v -0.220672 0.906721 0.242400
|
||||
v -0.906282 0.221110 -0.242400
|
||||
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
|
||||
vn 0.2858 0.2858 -0.9147
|
||||
vn -0.1526 -0.1526 -0.9764
|
||||
vn -0.2858 -0.2858 0.9147
|
||||
vn -0.6155 -0.6155 0.4924
|
||||
vn -0.1526 -0.1526 0.9764
|
||||
vn 0.5645 0.5645 0.6022
|
||||
vt 0.500000 1.000000
|
||||
vt 0.000000 0.750000
|
||||
vt 0.000000 1.000000
|
||||
vt 0.500000 0.750000
|
||||
vt 0.750000 1.000000
|
||||
vt 1.000000 0.750000
|
||||
vt 1.000000 1.000000
|
||||
vt 0.000000 0.000000
|
||||
vt 0.500000 0.250000
|
||||
vt 0.500000 0.000000
|
||||
vt 0.500000 0.500000
|
||||
vt 0.000000 0.250000
|
||||
vt 0.000000 0.880000
|
||||
vt 0.071429 1.000000
|
||||
vt 0.000000 0.760000
|
||||
vt 0.071429 0.800000
|
||||
vt 0.000000 0.800000
|
||||
vt 0.000000 0.640000
|
||||
vt 0.071429 0.720000
|
||||
vt 0.000000 0.720000
|
||||
vt 0.000000 0.560000
|
||||
vt 0.071429 0.600000
|
||||
vt 0.000000 0.600000
|
||||
vt 0.000000 0.480000
|
||||
vt 0.071429 0.520000
|
||||
vt 0.000000 0.520000
|
||||
vt 0.000000 0.400000
|
||||
vt 0.071429 0.440000
|
||||
vt 0.000000 0.440000
|
||||
vt 0.000000 0.320000
|
||||
vt 0.071429 0.360000
|
||||
vt 0.000000 0.360000
|
||||
vt 0.000000 0.240000
|
||||
vt 0.071429 0.280000
|
||||
vt 0.000000 0.280000
|
||||
vt 0.000000 0.160000
|
||||
vt 0.071429 0.200000
|
||||
vt 0.000000 0.200000
|
||||
vt 0.000000 0.080000
|
||||
vt 0.071429 0.120000
|
||||
vt 0.000000 0.120000
|
||||
vt 0.071429 0.760000
|
||||
vt 0.142857 0.720000
|
||||
vt 0.142857 0.760000
|
||||
vt 0.071429 0.640000
|
||||
vt 0.142857 0.600000
|
||||
vt 0.142857 0.640000
|
||||
vt 0.071429 0.560000
|
||||
vt 0.142857 0.520000
|
||||
vt 0.142857 0.560000
|
||||
vt 0.071429 0.480000
|
||||
vt 0.142857 0.440000
|
||||
vt 0.142857 0.480000
|
||||
vt 0.071429 0.400000
|
||||
vt 0.142857 0.360000
|
||||
vt 0.142857 0.400000
|
||||
vt 0.071429 0.320000
|
||||
vt 0.142857 0.280000
|
||||
vt 0.142857 0.320000
|
||||
vt 0.071429 0.240000
|
||||
vt 0.142857 0.200000
|
||||
vt 0.142857 0.240000
|
||||
vt 0.071429 0.160000
|
||||
vt 0.142857 0.120000
|
||||
vt 0.142857 0.160000
|
||||
vt 0.071429 0.080000
|
||||
vt 0.142857 0.040000
|
||||
vt 0.142857 0.080000
|
||||
vt 0.071429 0.000000
|
||||
vt 0.000000 0.040000
|
||||
vt 0.642857 0.760000
|
||||
vt 0.571429 0.800000
|
||||
vt 0.428571 0.640000
|
||||
vt 0.357143 0.680000
|
||||
vt 0.142857 0.880000
|
||||
vt 0.071429 0.880000
|
||||
vt 0.142857 1.000000
|
||||
vt 0.142857 0.800000
|
||||
vt 0.142857 0.000000
|
||||
vt 0.750000 0.750000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.071429 0.040000
|
||||
vt 0.285714 0.680000
|
||||
vt 0.285714 0.640000
|
||||
vt 0.357143 0.520000
|
||||
vt 0.357143 0.600000
|
||||
vt 0.428571 0.600000
|
||||
vt 0.500000 0.640000
|
||||
vt 0.500000 0.680000
|
||||
vt 0.571429 0.680000
|
||||
vt 0.571429 0.720000
|
||||
vt 0.642857 0.720000
|
||||
vt 0.714286 0.760000
|
||||
vt 0.714286 0.800000
|
||||
vt 0.785714 0.800000
|
||||
vt 0.785714 0.840000
|
||||
vt 0.857143 0.840000
|
||||
vt 0.857143 0.880000
|
||||
vt 0.928571 0.880000
|
||||
vt 0.928571 0.920000
|
||||
vt 1.000000 0.920000
|
||||
vt 1.000000 0.960000
|
||||
vt 0.928571 0.960000
|
||||
vt 0.928571 1.000000
|
||||
vt 0.857143 1.000000
|
||||
vt 0.857143 0.960000
|
||||
vt 0.785714 0.960000
|
||||
vt 0.785714 0.920000
|
||||
vt 0.714286 0.920000
|
||||
vt 0.714286 0.880000
|
||||
vt 0.642857 0.880000
|
||||
vt 0.642857 0.840000
|
||||
vt 0.571429 0.840000
|
||||
vt 0.500000 0.800000
|
||||
vt 0.500000 0.760000
|
||||
vt 0.428571 0.760000
|
||||
vt 0.428571 0.720000
|
||||
vt 0.357143 0.720000
|
||||
s 0
|
||||
g hammer
|
||||
g hammer_head.vox_hammer
|
||||
usemtl hammer
|
||||
f 5/1/1 2/2/1 7/3/1
|
||||
f 2/4/2 3/5/2 7/1/2
|
||||
f 4/6/3 5/5/3 8/7/3
|
||||
f 6/8/4 1/9/4 2/10/4
|
||||
f 3/2/5 4/11/5 8/4/5
|
||||
f 3/11/6 5/12/6 7/9/6
|
||||
f 5/1/1 6/4/1 2/2/1
|
||||
f 2/4/2 1/80/2 3/5/2
|
||||
f 4/6/3 6/80/3 5/5/3
|
||||
f 6/8/4 4/12/4 1/9/4
|
||||
f 3/2/5 1/81/5 4/11/5
|
||||
f 3/11/6 8/81/6 5/12/6
|
||||
g handle
|
||||
g hammer_head.vox_handle
|
||||
usemtl handle
|
||||
f 77/13/7 67/14/7 30/3/7
|
||||
f 32/15/7 80/16/7 79/17/7
|
||||
f 35/18/7 50/19/7 33/20/7
|
||||
f 36/21/7 53/22/7 34/23/7
|
||||
f 83/24/7 55/25/7 9/26/7
|
||||
f 85/27/7 57/28/7 84/29/7
|
||||
f 42/30/7 59/31/7 40/32/7
|
||||
f 11/33/7 13/34/7 43/35/7
|
||||
f 87/36/7 62/37/7 45/38/7
|
||||
f 49/39/7 63/40/7 48/41/7
|
||||
f 18/42/8 19/43/8 31/44/8
|
||||
f 21/45/8 22/46/8 20/47/8
|
||||
f 52/48/8 37/49/8 23/50/8
|
||||
f 24/51/8 38/52/8 71/53/8
|
||||
f 72/54/8 39/55/8 73/56/8
|
||||
f 60/57/8 41/58/8 74/59/8
|
||||
f 61/60/8 44/61/8 26/62/8
|
||||
f 27/63/8 28/64/8 46/65/8
|
||||
f 66/66/8 89/67/8 29/68/8
|
||||
f 64/69/8 91/70/8 47/8/8
|
||||
f 67/49/5 57/71/5 58/72/5
|
||||
f 84/71/1 33/73/1 19/74/1
|
||||
f 16/16/8 68/75/8 15/76/8
|
||||
f 15/76/9 30/77/9 67/14/9
|
||||
f 16/16/9 31/44/9 17/78/9
|
||||
f 69/19/9 20/47/9 19/43/9
|
||||
f 51/22/9 23/50/9 22/46/9
|
||||
f 70/25/9 71/53/9 37/49/9
|
||||
f 58/28/9 73/56/9 38/52/9
|
||||
f 25/31/9 74/59/9 39/55/9
|
||||
f 75/34/9 26/62/9 41/58/9
|
||||
f 76/37/9 46/65/9 44/61/9
|
||||
f 65/40/9 29/68/9 28/64/9
|
||||
f 33/20/10 81/42/10 32/15/10
|
||||
f 34/23/10 82/45/10 35/18/10
|
||||
f 9/26/10 54/48/10 36/21/10
|
||||
f 84/29/10 56/51/10 83/24/10
|
||||
f 40/32/10 86/54/10 85/27/10
|
||||
f 42/30/10 13/34/10 10/57/10
|
||||
f 45/38/10 12/60/10 11/33/10
|
||||
f 48/41/10 88/63/10 87/36/10
|
||||
f 89/67/10 64/69/10 47/79/10
|
||||
f 91/70/10 14/66/10 49/39/10
|
||||
f 80/16/10 77/13/10 79/17/10
|
||||
f 77/13/7 78/76/7 67/14/7
|
||||
f 32/15/7 81/42/7 80/16/7
|
||||
f 35/18/7 82/45/7 50/19/7
|
||||
f 36/21/7 54/48/7 53/22/7
|
||||
f 83/24/7 56/51/7 55/25/7
|
||||
f 85/27/7 86/54/7 57/28/7
|
||||
f 42/30/7 10/57/7 59/31/7
|
||||
f 11/33/7 12/60/7 13/34/7
|
||||
f 87/36/7 88/63/7 62/37/7
|
||||
f 49/39/7 14/66/7 63/40/7
|
||||
f 18/42/8 69/19/8 19/43/8
|
||||
f 21/45/8 51/22/8 22/46/8
|
||||
f 52/48/8 70/25/8 37/49/8
|
||||
f 24/51/8 58/28/8 38/52/8
|
||||
f 72/54/8 25/31/8 39/55/8
|
||||
f 60/57/8 75/34/8 41/58/8
|
||||
f 61/60/8 76/37/8 44/61/8
|
||||
f 27/63/8 65/40/8 28/64/8
|
||||
f 66/66/8 90/82/8 89/67/8
|
||||
f 64/69/8 92/82/8 91/70/8
|
||||
f 69/74/5 18/83/5 16/84/5
|
||||
f 16/84/5 15/47/5 67/49/5
|
||||
f 67/49/5 78/85/5 80/86/5
|
||||
f 80/86/5 81/87/5 50/73/5
|
||||
f 50/73/5 82/88/5 53/89/5
|
||||
f 53/89/5 54/90/5 55/91/5
|
||||
f 55/91/5 56/92/5 57/71/5
|
||||
f 57/71/5 86/93/5 59/94/5
|
||||
f 59/94/5 10/95/5 13/96/5
|
||||
f 13/96/5 12/97/5 62/98/5
|
||||
f 62/98/5 88/99/5 63/100/5
|
||||
f 63/100/5 14/101/5 92/102/5
|
||||
f 64/103/5 90/104/5 66/105/5
|
||||
f 63/100/5 92/102/5 64/103/5
|
||||
f 62/98/5 63/100/5 64/103/5
|
||||
f 64/103/5 66/105/5 65/106/5
|
||||
f 65/106/5 27/107/5 76/108/5
|
||||
f 76/108/5 61/109/5 75/110/5
|
||||
f 75/110/5 60/111/5 25/112/5
|
||||
f 25/112/5 72/113/5 58/72/5
|
||||
f 58/72/5 24/114/5 70/115/5
|
||||
f 70/115/5 52/116/5 51/117/5
|
||||
f 51/117/5 21/118/5 69/74/5
|
||||
f 69/74/5 16/84/5 67/49/5
|
||||
f 67/49/5 80/86/5 50/73/5
|
||||
f 53/89/5 55/91/5 57/71/5
|
||||
f 67/49/5 50/73/5 53/89/5
|
||||
f 51/117/5 69/74/5 67/49/5
|
||||
f 58/72/11 70/115/11 51/117/11
|
||||
f 75/110/12 25/112/12 58/72/12
|
||||
f 65/106/11 76/108/11 75/110/11
|
||||
f 62/98/5 64/103/5 65/106/5
|
||||
f 57/71/5 59/94/5 13/96/5
|
||||
f 13/96/5 62/98/5 65/106/5
|
||||
f 13/96/5 65/106/5 75/110/5
|
||||
f 67/49/5 53/89/5 57/71/5
|
||||
f 57/71/5 13/96/5 75/110/5
|
||||
f 58/72/5 51/117/5 67/49/5
|
||||
f 57/71/5 75/110/5 58/72/5
|
||||
f 38/72/1 73/113/1 39/112/1
|
||||
f 39/112/1 74/111/1 41/110/1
|
||||
f 41/110/1 26/109/1 44/108/1
|
||||
f 44/108/1 46/107/1 28/106/1
|
||||
f 28/106/1 29/105/1 89/104/1
|
||||
f 47/103/1 91/102/1 49/101/1
|
||||
f 28/106/1 89/104/1 47/103/1
|
||||
f 41/110/13 44/108/13 28/106/13
|
||||
f 38/72/1 39/112/1 41/110/1
|
||||
f 37/115/1 71/114/1 38/72/1
|
||||
f 22/117/1 23/116/1 37/115/1
|
||||
f 19/74/1 20/118/1 22/117/1
|
||||
f 17/84/1 31/83/1 19/74/1
|
||||
f 30/49/1 68/47/1 17/84/1
|
||||
f 79/86/1 77/85/1 30/49/1
|
||||
f 33/73/1 32/87/1 79/86/1
|
||||
f 34/89/1 35/88/1 33/73/1
|
||||
f 9/91/1 36/90/1 34/89/1
|
||||
f 84/71/1 83/92/1 9/91/1
|
||||
f 40/94/1 85/93/1 84/71/1
|
||||
f 43/96/1 42/95/1 40/94/1
|
||||
f 45/98/1 11/97/1 43/96/1
|
||||
f 48/100/1 87/99/1 45/98/1
|
||||
f 47/103/1 49/101/1 48/100/1
|
||||
f 41/110/1 28/106/1 47/103/1
|
||||
f 22/117/14 37/115/14 38/72/14
|
||||
f 38/72/1 41/110/1 47/103/1
|
||||
f 47/103/1 48/100/1 45/98/1
|
||||
f 43/96/15 40/94/15 84/71/15
|
||||
f 47/103/1 45/98/1 43/96/1
|
||||
f 22/117/1 38/72/1 47/103/1
|
||||
f 30/49/1 17/84/1 19/74/1
|
||||
f 19/74/1 22/117/1 47/103/1
|
||||
f 47/103/1 43/96/1 84/71/1
|
||||
f 84/71/1 9/91/1 34/89/1
|
||||
f 33/73/1 79/86/1 30/49/1
|
||||
f 84/71/16 34/89/16 33/73/16
|
||||
f 19/74/1 47/103/1 84/71/1
|
||||
f 33/73/1 30/49/1 19/74/1
|
||||
f 16/16/8 17/78/8 68/75/8
|
||||
f 15/76/9 68/75/9 30/77/9
|
||||
f 16/16/9 18/42/9 31/44/9
|
||||
f 69/19/9 21/45/9 20/47/9
|
||||
f 51/22/9 52/48/9 23/50/9
|
||||
f 70/25/9 24/51/9 71/53/9
|
||||
f 58/28/9 72/54/9 73/56/9
|
||||
f 25/31/9 60/57/9 74/59/9
|
||||
f 75/34/9 61/60/9 26/62/9
|
||||
f 76/37/9 27/63/9 46/65/9
|
||||
f 65/40/9 66/66/9 29/68/9
|
||||
f 33/20/10 50/19/10 81/42/10
|
||||
f 34/23/10 53/22/10 82/45/10
|
||||
f 9/26/10 55/25/10 54/48/10
|
||||
f 84/29/10 57/28/10 56/51/10
|
||||
f 40/32/10 59/31/10 86/54/10
|
||||
f 42/30/10 43/35/10 13/34/10
|
||||
f 45/38/10 62/37/10 12/60/10
|
||||
f 48/41/10 63/40/10 88/63/10
|
||||
f 89/67/10 90/82/10 64/69/10
|
||||
f 91/70/10 92/82/10 14/66/10
|
||||
f 80/16/10 78/76/10 77/13/10
|
||||
g glint
|
||||
g hammer_head.vox_glint
|
||||
usemtl glint
|
||||
f 97/1/1 94/2/1 99/3/1
|
||||
f 94/4/2 95/5/2 99/1/2
|
||||
f 96/6/3 97/5/3 100/7/3
|
||||
f 98/8/4 93/9/4 94/10/4
|
||||
f 95/2/5 96/11/5 100/4/5
|
||||
f 95/11/6 97/12/6 99/9/6
|
||||
f 97/1/1 98/4/1 94/2/1
|
||||
f 94/4/2 93/80/2 95/5/2
|
||||
f 96/6/3 98/80/3 97/5/3
|
||||
f 98/8/4 96/12/4 93/9/4
|
||||
f 95/2/5 93/81/5 96/11/5
|
||||
f 95/11/6 100/81/6 97/12/6
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
File diff suppressed because it is too large.
Load diff
@@ -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
|
||||
@@ -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
+13795
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,545 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.get_translator(core.get_current_modname())
|
||||
|
||||
core.override_item('everness:coral_dirt', {
|
||||
soil = {
|
||||
base = 'everness:coral_dirt',
|
||||
dry = 'everness:coral_dirt_soil',
|
||||
wet = 'everness:coral_dirt_soil_wet'
|
||||
}
|
||||
})
|
||||
|
||||
core.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'
|
||||
}
|
||||
})
|
||||
|
||||
core.override_item('everness:dirt_1', {
|
||||
soil = {
|
||||
base = 'everness:dirt_1',
|
||||
dry = 'everness:dirt_1_soil',
|
||||
wet = 'everness:dirt_1_soil_wet'
|
||||
}
|
||||
})
|
||||
|
||||
core.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'
|
||||
}
|
||||
})
|
||||
|
||||
core.override_item('everness:dry_dirt', {
|
||||
soil = {
|
||||
base = 'everness:dry_dirt',
|
||||
dry = 'everness:dry_dirt_soil',
|
||||
wet = 'everness:dry_dirt_soil_wet'
|
||||
}
|
||||
})
|
||||
|
||||
core.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'
|
||||
}
|
||||
})
|
||||
|
||||
core.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'
|
||||
}
|
||||
})
|
||||
|
||||
core.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'
|
||||
}
|
||||
})
|
||||
|
||||
core.override_item('everness:crystal_dirt', {
|
||||
soil = {
|
||||
base = 'everness:crystal_dirt',
|
||||
dry = 'everness:crystal_dirt_soil',
|
||||
wet = 'everness:crystal_dirt_soil_wet'
|
||||
}
|
||||
})
|
||||
|
||||
core.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'
|
||||
}
|
||||
})
|
||||
|
||||
core.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'
|
||||
}
|
||||
})
|
||||
|
||||
core.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'
|
||||
}
|
||||
})
|
||||
|
||||
core.override_item('everness:cursed_dirt', {
|
||||
soil = {
|
||||
base = 'everness:cursed_dirt',
|
||||
dry = 'everness:cursed_dirt_soil',
|
||||
wet = 'everness:cursed_dirt_soil_wet'
|
||||
}
|
||||
})
|
||||
|
||||
core.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'
|
||||
}
|
||||
})
|
||||
|
||||
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'
|
||||
}
|
||||
})
|
||||
|
||||
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'
|
||||
}
|
||||
})
|
||||
|
||||
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'
|
||||
}
|
||||
})
|
||||
|
||||
-- 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'
|
||||
}
|
||||
})
|
||||
|
||||
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'
|
||||
}
|
||||
})
|
||||
|
||||
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'
|
||||
}
|
||||
})
|
||||
|
||||
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'
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,685 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.get_translator(core.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_stone_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 = core.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 = core.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)
|
||||
core.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
|
||||
})
|
||||
@@ -0,0 +1,105 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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 = core.get_translator(core.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 core.get_modpath('doors') or core.global_exists('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,
|
||||
})
|
||||
|
||||
core.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
|
||||
@@ -0,0 +1,85 @@
|
||||
--[[
|
||||
Everness. Never ending discovery in Everness mapgen.
|
||||
Copyright (C) 2025 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)
|
||||
core.after(0, function()
|
||||
local player = core.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)
|
||||
core.after(0, function()
|
||||
local player = core.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
|
||||
|
||||
core.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 core.get_modpath('sfinv') and sfinv.enabled then
|
||||
update_sfinv(name)
|
||||
elseif core.get_modpath('unified_inventory') then
|
||||
update_ui(name)
|
||||
else
|
||||
core.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 core.get_modpath('sfinv') and sfinv.enabled then
|
||||
update_sfinv(name)
|
||||
elseif core.get_modpath('unified_inventory') then
|
||||
update_ui(name)
|
||||
else
|
||||
core.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.
Loaded 100 of 1742 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user