Files
2026-09-12 07:03:41 -06:00

1015 lines
35 KiB
Lua

--[[
Everness. Never ending discovery in Everness mapgen.
Copyright (C) 2022 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 skybox_defs = {
['everness:cursed_lands'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#89ADB1',
day_horizon = '#A9CDD1',
dawn_sky = '#A5C9CD',
dawn_horizon = '#AACED2',
night_sky = '#416569',
night_horizon = '#6A8E92',
indoors = '#4A6E72',
fog_sun_tint = '#7CA0A4',
fog_moon_tint = '#7DA1A5'
}
},
sun_parameters = {
scale = 1.57,
texture = 'everness_cursed_lands_sun.png',
sunrise = 'everness_cursed_lands_sunrisebg.png',
tonemap = 'everness_cursed_lands_sun_tonemap.png'
},
moon_parameters = {
scale = 1.57,
texture = 'everness_cursed_lands_moon.png',
tonemap = 'everness_cursed_lands_moon_tonemap.png'
},
cloud_parameters = {
density = 0.7,
color = '#A9CDD1E5',
speed = { x = -2, z = -2 }
}
},
['everness:cursed_lands_dunes'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#89ADB1',
day_horizon = '#A9CDD1',
dawn_sky = '#A5C9CD',
dawn_horizon = '#AACED2',
night_sky = '#416569',
night_horizon = '#6A8E92',
indoors = '#4A6E72',
fog_sun_tint = '#7CA0A4',
fog_moon_tint = '#7DA1A5'
}
},
sun_parameters = {
texture = 'everness_cursed_lands_sun.png',
scale = 1.57,
sunrise = 'everness_cursed_lands_sunrisebg.png',
tonemap = 'everness_cursed_lands_sun_tonemap.png'
},
moon_parameters = {
texture = 'everness_cursed_lands_moon.png',
tonemap = 'everness_cursed_lands_moon_tonemap.png'
},
cloud_parameters = {
density = 0.7,
color = '#A9CDD1E5',
speed = { x = -2, z = -2 }
}
},
['everness:cursed_lands_swamp'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#89ADB1',
day_horizon = '#A9CDD1',
dawn_sky = '#A5C9CD',
dawn_horizon = '#AACED2',
night_sky = '#416569',
night_horizon = '#6A8E92',
indoors = '#4A6E72',
fog_sun_tint = '#7CA0A4',
fog_moon_tint = '#7DA1A5'
}
},
sun_parameters = {
texture = 'everness_cursed_lands_sun.png',
scale = 1.57,
sunrise = 'everness_cursed_lands_sunrisebg.png',
tonemap = 'everness_cursed_lands_sun_tonemap.png'
},
moon_parameters = {
texture = 'everness_cursed_lands_moon.png',
tonemap = 'everness_cursed_lands_moon_tonemap.png'
},
cloud_parameters = {
density = 0.7,
color = '#A9CDD1E5',
speed = { x = -2, z = -2 }
}
},
['everness:cursed_lands_ocean'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#89ADB1',
day_horizon = '#A9CDD1',
dawn_sky = '#A5C9CD',
dawn_horizon = '#AACED2',
night_sky = '#416569',
night_horizon = '#6A8E92',
indoors = '#4A6E72',
fog_sun_tint = '#7CA0A4',
fog_moon_tint = '#7DA1A5'
}
},
sun_parameters = {
texture = 'everness_cursed_lands_sun.png',
scale = 1.57,
sunrise = 'everness_cursed_lands_sunrisebg.png',
tonemap = 'everness_cursed_lands_sun_tonemap.png'
},
moon_parameters = {
texture = 'everness_cursed_lands_moon.png',
tonemap = 'everness_cursed_lands_moon_tonemap.png'
},
cloud_parameters = {
density = 0.7,
color = '#A9CDD1E5',
speed = { x = -2, z = -2 }
}
},
['everness:cursed_lands_under'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#89ADB1',
day_horizon = '#A9CDD1',
dawn_sky = '#A5C9CD',
dawn_horizon = '#AACED2',
night_sky = '#416569',
night_horizon = '#6A8E92',
indoors = '#4A6E72',
fog_sun_tint = '#7CA0A4',
fog_moon_tint = '#7DA1A5'
}
},
sun_parameters = {
texture = 'everness_cursed_lands_sun.png',
scale = 1.57,
sunrise = 'everness_cursed_lands_sunrisebg.png',
tonemap = 'everness_cursed_lands_sun_tonemap.png'
},
moon_parameters = {
texture = 'everness_cursed_lands_moon.png',
tonemap = 'everness_cursed_lands_moon_tonemap.png'
},
cloud_parameters = {
density = 0.7,
color = '#A9CDD1E5',
speed = { x = -2, z = -2 }
}
},
['everness:coral_forest'] = {
sky_parameters = {
type = 'regular',
sky_color = {
-- day_sky = '#C492A5',
day_sky = '#61B5F5',
day_horizon = '#E4B2C5',
dawn_sky = '#E0AEC1',
dawn_horizon = '#E5B3C6',
night_sky = '#7C4A5D',
night_horizon = '#A57386',
indoors = '#855366',
fog_sun_tint = '#B78598',
fog_moon_tint = '#B88699'
}
},
sun_parameters = {
texture = 'everness_coral_forest_sun.png',
scale = 1.57,
tonemap = 'everness_coral_forest_sun_tonemap.png',
sunrise = ''
},
},
['everness:coral_forest_dunes'] = {
sky_parameters = {
type = 'regular',
sky_color = {
-- day_sky = '#C492A5',
day_sky = '#61B5F5',
day_horizon = '#E4B2C5',
dawn_sky = '#E0AEC1',
dawn_horizon = '#E5B3C6',
night_sky = '#7C4A5D',
night_horizon = '#A57386',
indoors = '#855366',
fog_sun_tint = '#B78598',
fog_moon_tint = '#B88699'
}
},
sun_parameters = {
texture = 'everness_coral_forest_sun.png',
scale = 1.57,
tonemap = 'everness_coral_forest_sun_tonemap.png',
sunrise = ''
},
},
['everness:coral_forest_ocean'] = {
sky_parameters = {
type = 'regular',
sky_color = {
-- day_sky = '#C492A5',
day_sky = '#61B5F5',
day_horizon = '#E4B2C5',
dawn_sky = '#E0AEC1',
dawn_horizon = '#E5B3C6',
night_sky = '#7C4A5D',
night_horizon = '#A57386',
indoors = '#855366',
fog_sun_tint = '#B78598',
fog_moon_tint = '#B88699'
}
},
sun_parameters = {
texture = 'everness_coral_forest_sun.png',
scale = 1.57,
tonemap = 'everness_coral_forest_sun_tonemap.png',
sunrise = ''
},
},
['everness:coral_forest_under'] = {
sky_parameters = {
type = 'regular',
sky_color = {
-- day_sky = '#C492A5',
day_sky = '#61B5F5',
day_horizon = '#E4B2C5',
dawn_sky = '#E0AEC1',
dawn_horizon = '#E5B3C6',
night_sky = '#7C4A5D',
night_horizon = '#A57386',
indoors = '#855366',
fog_sun_tint = '#B78598',
fog_moon_tint = '#B88699'
}
},
},
['everness:bamboo_forest'] = {
sky_parameters = {
type = 'regular',
sky_color = {
-- day_sky = '#5DD35D',
day_sky = '#61B5F5',
day_horizon = '#BFFFBF',
-- dawn_sky = '#79EF79',
dawn_sky = '#B4BAFA',
dawn_horizon = '#7EF47E',
-- night_sky = '#158B15',
night_sky = '#006BFF',
night_horizon = '#3EB43E',
indoors = '#1E941E',
fog_sun_tint = '#50C650',
fog_moon_tint = '#51C751'
}
},
sun_parameters = {
texture = 'everness_bamboo_forest_sun.png',
scale = 1.57,
tonemap = 'everness_bamboo_forest_sun_tonemap.png',
sunrise = 'everness_bamboo_forest_sunrisebg.png',
},
},
['everness:bamboo_forest_under'] = {
sky_parameters = {
type = 'regular',
sky_color = {
-- day_sky = '#5DD35D',
day_sky = '#61B5F5',
day_horizon = '#BFFFBF',
-- dawn_sky = '#79EF79',
dawn_sky = '#B4BAFA',
dawn_horizon = '#7EF47E',
-- night_sky = '#158B15',
night_sky = '#006BFF',
night_horizon = '#3EB43E',
indoors = '#1E941E',
fog_sun_tint = '#50C650',
fog_moon_tint = '#51C751'
}
},
},
['everness:frosted_icesheet'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#9DA4AA',
day_horizon = '#BDC4CA',
dawn_sky = '#B9C0C6',
dawn_horizon = '#BEC5CB',
night_sky = '#555C62',
night_horizon = '#7E858B',
indoors = '#5E656B',
fog_sun_tint = '#90979D',
fog_moon_tint = '#91989E'
}
},
sun_parameters = {
texture = 'everness_frosted_icesheet_sun.png',
scale = 1.57,
tonemap = 'everness_frosted_icesheet_sun_tonemap.png',
sunrise = ''
},
},
['everness:frosted_icesheet_ocean'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#9DA4AA',
day_horizon = '#BDC4CA',
dawn_sky = '#B9C0C6',
dawn_horizon = '#BEC5CB',
night_sky = '#555C62',
night_horizon = '#7E858B',
indoors = '#5E656B',
fog_sun_tint = '#90979D',
fog_moon_tint = '#91989E'
}
},
sun_parameters = {
texture = 'everness_frosted_icesheet_sun.png',
scale = 1.57,
tonemap = 'everness_frosted_icesheet_sun_tonemap.png',
sunrise = ''
},
},
['everness:frosted_icesheet_under'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#9DA4AA',
day_horizon = '#BDC4CA',
dawn_sky = '#B9C0C6',
dawn_horizon = '#BEC5CB',
night_sky = '#555C62',
night_horizon = '#7E858B',
indoors = '#5E656B',
fog_sun_tint = '#90979D',
fog_moon_tint = '#91989E'
}
},
},
['everness:crystal_forest'] = {
sky_parameters = {
type = 'regular',
sky_color = {
-- day_sky = '#B992C5',
day_sky = '#61B5F5',
day_horizon = '#D9B2E5',
dawn_sky = '#D5AEE1',
dawn_horizon = '#DAB3E6',
night_sky = '#714A7D',
night_horizon = '#9A73A6',
indoors = '#7A5386',
fog_sun_tint = '#AC85B8',
fog_moon_tint = '#AD86B9'
}
},
moon_parameters = {
texture = 'everness_crystal_forest_moon.png',
tonemap = 'everness_crystal_forest_moon_tonemap.png'
},
star_parameters = {
count = 6000,
scale = 0.5
},
sun_parameters = {
texture = 'everness_crystal_forest_sun.png',
scale = 1.57,
tonemap = 'everness_crystal_forest_sun_tonemap.png',
sunrise = ''
},
},
['everness:crystal_forest_dunes'] = {
sky_parameters = {
type = 'regular',
sky_color = {
-- day_sky = '#B992C5',
day_sky = '#61B5F5',
day_horizon = '#D9B2E5',
dawn_sky = '#D5AEE1',
dawn_horizon = '#DAB3E6',
night_sky = '#714A7D',
night_horizon = '#9A73A6',
indoors = '#7A5386',
fog_sun_tint = '#AC85B8',
fog_moon_tint = '#AD86B9'
}
},
moon_parameters = {
texture = 'everness_crystal_forest_moon.png',
tonemap = 'everness_crystal_forest_moon_tonemap.png'
},
star_parameters = {
count = 6000,
scale = 0.5
},
sun_parameters = {
texture = 'everness_crystal_forest_sun.png',
scale = 1.57,
tonemap = 'everness_crystal_forest_sun_tonemap.png',
sunrise = ''
},
},
['everness:crystal_forest_shore'] = {
sky_parameters = {
type = 'regular',
sky_color = {
-- day_sky = '#B992C5',
day_sky = '#61B5F5',
day_horizon = '#D9B2E5',
dawn_sky = '#D5AEE1',
dawn_horizon = '#DAB3E6',
night_sky = '#714A7D',
night_horizon = '#9A73A6',
indoors = '#7A5386',
fog_sun_tint = '#AC85B8',
fog_moon_tint = '#AD86B9'
}
},
moon_parameters = {
texture = 'everness_crystal_forest_moon.png',
tonemap = 'everness_crystal_forest_moon_tonemap.png'
},
star_parameters = {
count = 6000,
scale = 0.5
},
sun_parameters = {
texture = 'everness_crystal_forest_sun.png',
scale = 1.57,
tonemap = 'everness_crystal_forest_sun_tonemap.png',
sunrise = ''
},
},
['everness:crystal_forest_ocean'] = {
sky_parameters = {
type = 'regular',
sky_color = {
-- day_sky = '#B992C5',
day_sky = '#61B5F5',
day_horizon = '#D9B2E5',
dawn_sky = '#D5AEE1',
dawn_horizon = '#DAB3E6',
night_sky = '#714A7D',
night_horizon = '#9A73A6',
indoors = '#7A5386',
fog_sun_tint = '#AC85B8',
fog_moon_tint = '#AD86B9'
}
},
moon_parameters = {
texture = 'everness_crystal_forest_moon.png',
tonemap = 'everness_crystal_forest_moon_tonemap.png'
},
star_parameters = {
count = 6000,
scale = 0.5
},
sun_parameters = {
texture = 'everness_crystal_forest_sun.png',
scale = 1.57,
tonemap = 'everness_crystal_forest_sun_tonemap.png',
sunrise = ''
},
},
['everness:crystal_forest_under'] = {
sky_parameters = {
type = 'regular',
sky_color = {
-- day_sky = '#B992C5',
day_sky = '#61B5F5',
day_horizon = '#D9B2E5',
dawn_sky = '#D5AEE1',
dawn_horizon = '#DAB3E6',
night_sky = '#714A7D',
night_horizon = '#9A73A6',
indoors = '#7A5386',
fog_sun_tint = '#AC85B8',
fog_moon_tint = '#AD86B9'
}
},
star_parameters = {
count = 6000,
scale = 0.5
}
},
['everness:forsaken_desert'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#D5946E',
day_horizon = '#F5B48E',
dawn_sky = '#F1B08A',
dawn_horizon = '#F6B58F',
night_sky = '#8D4C26',
night_horizon = '#B6754F',
indoors = '#96552F',
fog_sun_tint = '#C88761',
fog_moon_tint = '#C98862'
}
},
sun_parameters = {
texture = 'everness_forsaken_desert_sun.png',
scale = 3.14,
tonemap = 'everness_forsaken_desert_sun_tonemap.png',
sunrise = ''
},
},
['everness:forsaken_desert_ocean'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#D5946E',
day_horizon = '#F5B48E',
dawn_sky = '#F1B08A',
dawn_horizon = '#F6B58F',
night_sky = '#8D4C26',
night_horizon = '#B6754F',
indoors = '#96552F',
fog_sun_tint = '#C88761',
fog_moon_tint = '#C98862'
}
},
sun_parameters = {
texture = 'everness_forsaken_desert_sun.png',
scale = 3.14,
tonemap = 'everness_forsaken_desert_sun_tonemap.png',
sunrise = ''
},
},
['everness:forsaken_desert_under'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#D5946E',
day_horizon = '#F5B48E',
dawn_sky = '#F1B08A',
dawn_horizon = '#F6B58F',
night_sky = '#8D4C26',
night_horizon = '#B6754F',
indoors = '#96552F',
fog_sun_tint = '#C88761',
fog_moon_tint = '#C98862'
}
}
},
['everness:baobab_savanna'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#C4A156',
day_horizon = '#E4C176',
dawn_sky = '#E0BD72',
dawn_horizon = '#E5C277',
night_sky = '#7C590E',
night_horizon = '#A58237',
indoors = '#856217',
fog_sun_tint = '#B79449',
fog_moon_tint = '#B8954A'
}
},
sun_parameters = {
texture = 'everness_baobab_savanna_sun.png',
scale = 1.57,
tonemap = '',
sunrise = ''
},
},
['everness:forsaken_tundra'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#A3A49F',
-- day_sky = '#CAA339',
day_horizon = '#EAC359',
dawn_sky = '#E6BF55',
dawn_horizon = '#EBC45A',
-- night_sky = '#5B5C57',
night_sky = '#7C5B01',
night_horizon = '#AB841A',
indoors = '#896401',
fog_sun_tint = '#BD962C',
fog_moon_tint = '#BE972D'
}
},
sun_parameters = {
texture = 'everness_forsaken_tundra_sun.png',
scale = 1.57,
tonemap = 'everness_forsaken_tundra_sun_tonemap.png',
sunrise = ''
},
},
['everness:forsaken_tundra_beach'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#A3A49F',
-- day_sky = '#CAA339',
day_horizon = '#EAC359',
dawn_sky = '#E6BF55',
dawn_horizon = '#EBC45A',
-- night_sky = '#5B5C57',
night_sky = '#7C5B01',
night_horizon = '#AB841A',
indoors = '#896401',
fog_sun_tint = '#BD962C',
fog_moon_tint = '#BE972D'
}
},
sun_parameters = {
texture = 'everness_forsaken_tundra_sun.png',
scale = 1.57,
tonemap = 'everness_forsaken_tundra_sun_tonemap.png',
sunrise = ''
},
},
['everness:forsaken_tundra_ocean'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#A3A49F',
-- day_sky = '#CAA339',
day_horizon = '#EAC359',
dawn_sky = '#E6BF55',
dawn_horizon = '#EBC45A',
-- night_sky = '#5B5C57',
night_sky = '#7C5B01',
night_horizon = '#AB841A',
indoors = '#896401',
fog_sun_tint = '#BD962C',
fog_moon_tint = '#BE972D'
}
},
sun_parameters = {
texture = 'everness_forsaken_tundra_sun.png',
scale = 1.57,
tonemap = 'everness_forsaken_tundra_sun_tonemap.png',
sunrise = ''
},
},
['everness:forsaken_tundra_under'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#A3A49F',
-- day_sky = '#CAA339',
day_horizon = '#EAC359',
dawn_sky = '#E6BF55',
dawn_horizon = '#EBC45A',
-- night_sky = '#5B5C57',
night_sky = '#7C5B01',
night_horizon = '#AB841A',
indoors = '#896401',
fog_sun_tint = '#BD962C',
fog_moon_tint = '#BE972D'
}
}
},
['everness:mineral_waters'] = {
sky_parameters = {
-- type = 'regular',
-- sky_color = {
-- day_sky = '#264890',
-- day_horizon = '#3884CF',
-- dawn_sky = '#B4BAFA',
-- dawn_horizon = '#FDA47E',
-- night_sky = '#A3609E',
-- night_horizon = '#C7A8D9',
-- fog_sun_tint = '#FDA47E',
-- fog_moon_tint = '#FAE0EB'
-- },
type = 'skybox',
base_color = '#8099CC',
_day_base_color = '#8099CC',
_night_base_color = '#000714',
_textures_base = {
-- Y+ (top)
'everness_mineral_waters_skybox.png^[sheet:4x3:1,0',
-- Y- (bottom)
'everness_mineral_waters_skybox.png^[sheet:4x3:1,2',
-- X- (west)
'everness_mineral_waters_skybox.png^[sheet:4x3:0,1',
-- X+ (east)
'everness_mineral_waters_skybox.png^[sheet:4x3:2,1',
-- Z+ (north)
'everness_mineral_waters_skybox.png^[sheet:4x3:1,1',
-- Z- (south)
'everness_mineral_waters_skybox.png^[sheet:4x3:3,1',
},
textures = {
-- Y+ (top)
'everness_mineral_waters_skybox.png^[sheet:4x3:1,0',
-- Y- (bottom)
'everness_mineral_waters_skybox.png^[sheet:4x3:1,2',
-- X- (west)
'everness_mineral_waters_skybox.png^[sheet:4x3:0,1',
-- X+ (east)
'everness_mineral_waters_skybox.png^[sheet:4x3:2,1',
-- Z+ (north)
'everness_mineral_waters_skybox.png^[sheet:4x3:1,1',
-- Z- (south)
'everness_mineral_waters_skybox.png^[sheet:4x3:3,1',
},
clouds = false
},
star_parameters = {
count = 12000,
scale = 0.5
},
},
['everness:mineral_waters_under'] = {
sky_parameters = {
type = 'regular',
sky_color = {
day_sky = '#8B1408',
day_horizon = '#b2380a',
dawn_sky = '#8B1408',
dawn_horizon = '#b2380a',
night_sky = '#A3609E',
night_horizon = '#C7A8D9',
fog_sun_tint = '#8B1408',
fog_moon_tint = '#520E49'
}
},
particlespawner = {
amount = 100,
time = 0,
size = {
min = 1,
max = 2
},
node = { name = 'everness:mineral_lava_stone' },
node_tile = 1,
glow = 100,
pos = {
min = vector.new(-50, -50, -50),
max = vector.new(50, 50, 50)
},
jitter = {
min = vector.new(-1, -1, -1),
max = vector.new(1, 1, 1)
},
vel = {
min = vector.new(-1, -1, -1),
max = vector.new(1, 1, 1)
},
exptime = {
min = 5,
max = 10
},
collisiondetection = true,
collision_removal = true
}
},
}
local PLAYER_STATES = {}
local function get_player_state(player_name)
local state = PLAYER_STATES[player_name]
if not state then
state = {
biome_name = '',
is_underground = 0,
timeofday = 0,
is_day = 1,
particlespawner_id = 0,
last_pos = nil,
current_biome_name = nil
}
PLAYER_STATES[player_name] = state
end
return state
end
local function should_flip(player, state)
local player_time = state.timeofday
-- 0 not defined
-- 1 morning
-- 2 afternoon
local current_time = core.get_timeofday() < 0.5 and 1 or 2
local flip = current_time ~= player_time
state.timeofday = current_time
return {
should_flip = flip,
current_time = current_time
}
end
local timer = 0
core.register_globalstep(function(dtime)
timer = timer + dtime
if timer > 5 then
local players = core.get_connected_players()
local tod = core.get_timeofday()
local is_day = (tod > 0.2 and tod < 0.805)
for _, player in ipairs(players) do
if player and player:is_player() then
local player_name = player:get_player_name()
local state = get_player_state(player_name)
local player_pos = player:get_pos()
local rounded_pos = vector.round(player_pos)
if not state.last_pos or not vector.equals(state.last_pos, rounded_pos) then
state.last_pos = rounded_pos
local biome_data = core.get_biome_data(player_pos)
if biome_data and biome_data.biome then
state.current_biome_name = core.get_biome_name(biome_data.biome)
end
end
local biome_name = state.current_biome_name
if biome_name then
local player_biome_name = state.biome_name
local is_underground = state.is_underground
local player_is_day = state.is_day == 1
local should_flip_data = should_flip(player, state)
local biome_changed = (player_biome_name ~= biome_name)
-- flip sun/moon when morning/afternoon
if not biome_changed and should_flip_data.should_flip then
if skybox_defs[biome_name] and skybox_defs[biome_name].sun_parameters then
local sun_params = table.copy(skybox_defs[biome_name].sun_parameters)
if should_flip_data.current_time == 2 then
sun_params.texture = sun_params.texture .. '^[transformFY'
end
player:set_sun(sun_params)
end
end
-- Change skybox params
if biome_changed then
state.biome_name = biome_name
player_biome_name = biome_name
if skybox_defs[biome_name] then
if skybox_defs[biome_name].sun_parameters then
local sun_params = table.copy(skybox_defs[biome_name].sun_parameters)
-- flip sun when afternoon
if should_flip_data.current_time == 2 then
sun_params.texture = sun_params.texture .. '^[transformFY'
end
player:set_sun(sun_params)
else
player:set_sun()
end
if skybox_defs[biome_name].moon_parameters then
player:set_moon(skybox_defs[biome_name].moon_parameters)
else
player:set_moon()
end
if skybox_defs[biome_name].star_parameters then
player:set_stars(skybox_defs[biome_name].star_parameters)
else
player:set_stars()
end
if skybox_defs[biome_name].sky_parameters then
player:set_sky(skybox_defs[biome_name].sky_parameters)
else
player:set_sky()
end
if skybox_defs[biome_name].cloud_parameters then
player:set_clouds(skybox_defs[biome_name].cloud_parameters)
else
player:set_clouds()
end
if skybox_defs[biome_name].particlespawner then
if state.particlespawner_id ~= 0 then
core.delete_particlespawner(state.particlespawner_id)
state.particlespawner_id = 0
end
local pdef = table.copy(skybox_defs[biome_name].particlespawner)
pdef.attached = player
pdef.playername = player_name
local pid = core.add_particlespawner(pdef)
state.particlespawner_id = pid or 0
else
if state.particlespawner_id ~= 0 then
core.delete_particlespawner(state.particlespawner_id)
state.particlespawner_id = 0
end
end
else
player:set_sun()
player:set_moon()
player:set_stars()
player:set_sky()
player:set_clouds()
if state.particlespawner_id ~= 0 then
core.delete_particlespawner(state.particlespawner_id)
state.particlespawner_id = 0
end
end
end
-- change day/night params
if player_biome_name == biome_name and player_is_day ~= is_day then
if skybox_defs[biome_name] then
if skybox_defs[biome_name].sky_parameters then
if skybox_defs[biome_name].sky_parameters.type == 'skybox' then
state.is_day = is_day and 1 or 0
if is_day then
for i, v in ipairs(skybox_defs[biome_name].sky_parameters.textures) do
skybox_defs[biome_name].sky_parameters.base_color = skybox_defs[biome_name].sky_parameters._day_base_color
skybox_defs[biome_name].sky_parameters.textures[i] = skybox_defs[biome_name].sky_parameters._textures_base[i]
end
else
for i, v in ipairs(skybox_defs[biome_name].sky_parameters.textures) do
skybox_defs[biome_name].sky_parameters.base_color = skybox_defs[biome_name].sky_parameters._night_base_color
skybox_defs[biome_name].sky_parameters.textures[i] = skybox_defs[biome_name].sky_parameters._textures_base[i] .. '^[contrast:0:-85'
end
end
player:set_sky(skybox_defs[biome_name].sky_parameters)
end
end
end
end
if (player_pos.y <= -256 and is_underground == 0) or (is_underground ~= 0 and biome_changed) then
-- hide sun, moon, stars ... underground
state.is_underground = 1
player:set_sun({
visible = false,
sunrise_visible = false
})
player:set_moon({
visible = false
})
player:set_stars({
visible = false
})
elseif (player_pos.y > -256 and is_underground ~= 0) or (is_underground == 0 and biome_changed) then
-- show sun, moon, stars ... aboveground
state.is_underground = 0
player:set_sun({
visible = true
})
player:set_moon({
visible = true
})
player:set_stars({
visible = true,
sunrise_visible = true
})
end
end
end
end
timer = 0
end
end)
core.register_on_joinplayer(function(player, last_login)
local name = player:get_player_name()
PLAYER_STATES[name] = nil
end)
core.register_on_leaveplayer(function(player, timed_out)
local name = player:get_player_name()
local state = PLAYER_STATES[name]
if state and state.particlespawner_id and state.particlespawner_id ~= 0 then
core.delete_particlespawner(state.particlespawner_id)
end
PLAYER_STATES[name] = nil
end)