diff --git a/assets/base/script/game/hud.lua b/assets/base/script/game/hud.lua index c884a136..ac4bc8b3 100644 --- a/assets/base/script/game/hud.lua +++ b/assets/base/script/game/hud.lua @@ -11,4 +11,4 @@ zepha.player:set_hud(zepha.gui(function() background = 'zepha:base:crosshair' } } -end)) \ No newline at end of file +end)) diff --git a/assets/base/script/game/inventory.lua b/assets/base/script/game/inventory.lua index f709f4d1..a92a0a59 100644 --- a/assets/base/script/game/inventory.lua +++ b/assets/base/script/game/inventory.lua @@ -22,4 +22,4 @@ if zepha.server then hand:add_stack({ 'zepha:base:hand', 1 }) p:set_hand_list(hand) end) -end \ No newline at end of file +end diff --git a/assets/base/script/game/models/cross_plant.lua b/assets/base/script/game/models/cross_plant.lua index 6c153ff9..c85c1656 100644 --- a/assets/base/script/game/models/cross_plant.lua +++ b/assets/base/script/game/models/cross_plant.lua @@ -21,7 +21,7 @@ zepha.register_blockmodel(':cross_plant', { parts = { { face = 'nocull', - tex = 1, + tex = 2, points = { 0.1, 0, 0.1, 0, 1, 0.9, 0, 0.9, 1, 1, @@ -38,7 +38,7 @@ zepha.register_blockmodel(':cross_plant', { } }, { face = 'nocull', - tex = 1, + tex = 2, points = { 0.9, 0.9, 0.9, 1, 0, 0.9, 0, 0.9, 1, 1, diff --git a/assets/base/script/game/models/cross_plant_tall.lua b/assets/base/script/game/models/cross_plant_tall.lua new file mode 100644 index 00000000..24087132 --- /dev/null +++ b/assets/base/script/game/models/cross_plant_tall.lua @@ -0,0 +1,108 @@ +-- +-- Diagonal cross-shaped model. Has 2 vertical faces that make an X pattern when looked at from above. +-- Useful for representing plants, grass, etc. +-- Only takes one texture, which is displayed on all faces. +-- + +local wave_amplitude = 0.2 +local offset_amplitude = 0.14 + +zepha.register_blockmodel(':cross_plant_tall', { + mesh_mods = { + { + type = 'offset_x', + amplitude = offset_amplitude, + }, + { + type = 'offset_z', + amplitude = offset_amplitude, + } + }, + parts = { + { + face = 'nocull', + tex = 2, + points = { + 0.1, 0, 0.1, 0, 1, + 0.9, 0, 0.9, 1, 1, + 0.9, 0.9, 0.9, 1, 0.5, + 0.1, 0.9, 0.1, 0, 0.5, + 0.1, 0.9, 0.1, 0, 0.5, + 0.9, 0.9, 0.9, 1, 0.5, + 0.9, 1.8, 0.9, 1, 0, + 0.1, 1.8, 0.1, 0, 0 + }, + shader_mod = { + type = 'sway_attached', + amplitude = wave_amplitude + }, + mesh_mod = { + type = 'offset', + scale = 0.1 + } + }, { + face = 'nocull', + tex = 2, + points = { + 0.9, 0.9, 0.9, 1, 0.5, + 0.9, 0, 0.9, 1, 1, + 0.1, 0, 0.1, 0, 1, + 0.1, 0.9, 0.1, 0, 0.5, + 0.9, 1.8, 0.9, 1, 0, + 0.9, 0.9, 0.9, 1, 0.5, + 0.1, 0.9, 0.1, 0, 0.5, + 0.1, 1.8, 0.1, 0, 0 + }, + shader_mod = { + type = 'sway_attached', + amplitude = wave_amplitude + }, + mesh_mod = { + type = 'offset', + scale = 0.1 + } + }, { + face = 'nocull', + tex = 1, + points = { + 0.9, 0.9, 0.1, 1, 0.5, + 0.9, 0, 0.1, 1, 1, + 0.1, 0, 0.9, 0, 1, + 0.1, 0.9, 0.9, 0, 0.5, + 0.9, 1.8, 0.1, 1, 0, + 0.9, 0.9, 0.1, 1, 0.5, + 0.1, 0.9, 0.9, 0, 0.5, + 0.1, 1.8, 0.9, 0, 0 + }, + shader_mod = { + type = 'sway_attached', + amplitude = wave_amplitude + }, + mesh_mod = { + type = 'offset', + scale = 0.1 + } + }, { + face = 'nocull', + tex = 1, + points = { + 0.1, 0, 0.9, 0, 1, + 0.9, 0, 0.1, 1, 1, + 0.9, 0.9, 0.1, 1, 0.5, + 0.1, 0.9, 0.9, 0, 0.5, + 0.1, 0.9, 0.9, 0, 0.5, + 0.9, 0.9, 0.1, 1, 0.5, + 0.9, 1.8, 0.1, 1, 0, + 0.1, 1.8, 0.9, 0, 0 + }, + shader_mod = { + type = 'sway_attached', + amplitude = wave_amplitude + }, + mesh_mod = { + type = 'offset', + scale = 0.1 + } + } + } +}) \ No newline at end of file diff --git a/assets/base/script/game/models/main.lua b/assets/base/script/game/models/main.lua index 0c8fdbd7..6866f6ed 100644 --- a/assets/base/script/game/models/main.lua +++ b/assets/base/script/game/models/main.lua @@ -6,4 +6,5 @@ require './block_slab' require './block_slab_foliage' require './leaf_like' require './cross_plant' +require './cross_plant_tall' require './pillar' \ No newline at end of file diff --git a/assets/base/script/modules/dump.lua b/assets/base/script/modules/dump.lua index 6bae415f..94f3778c 100644 --- a/assets/base/script/modules/dump.lua +++ b/assets/base/script/modules/dump.lua @@ -17,6 +17,7 @@ _G['format'] = function(val, nl, idn) if nl == nil then nl = 3 end if type(val) == 'function' or type(val) == 'userdata' or type(val) == 'thread' then return tostring(val) end + if type(val) == 'boolean' then return val and 'true' or 'false' end if type(val) == 'string' then return '"' .. val .. '"' end if type(val) == 'nil' then return 'nil' end if type(val) == 'table' then diff --git a/assets/base/script/modules/gui.lua b/assets/base/script/modules/gui.lua index fb086463..4c5b1fb7 100644 --- a/assets/base/script/modules/gui.lua +++ b/assets/base/script/modules/gui.lua @@ -1,7 +1,7 @@ zepha.__builtin.gui_env = { Gui = {}} zepha.Gui = zepha.__builtin.gui_env.Gui local env = zepha.__builtin.gui_env -setmetatable(env, {__index = _G}) +setmetatable(env, { __index = _G }) -- create_element -- Build a GUI Element with the provided constructor data, apply the metatable. diff --git a/assets/base/script/modules/serialization.lua b/assets/base/script/modules/serialization.lua index 87eb3b12..96c48d27 100644 --- a/assets/base/script/modules/serialization.lua +++ b/assets/base/script/modules/serialization.lua @@ -62,7 +62,6 @@ zepha.deserialize = function(str, opt, path, table_refs) local tbl = {} str = str:sub(2, #str - 1):trim() --- print(path, tbl) table_refs[path] = tbl while #str > 0 do diff --git a/assets/base/script/modules/table.lua b/assets/base/script/modules/table.lua index a3a19abe..260e6de7 100644 --- a/assets/base/script/modules/table.lua +++ b/assets/base/script/modules/table.lua @@ -1,4 +1,17 @@ -- Performs a shallow copy of a table. function table.clone(tbl) - return { table.unpack(tbl) } + local new = {} + for k, v in pairs(tbl) do new[k] = v end + return new +end + +-- Merges two tables together +function table.merge(...) + local new = {} + for i, tbl in ipairs(table.pack(...)) do + if type(tbl) == 'table' then + for k, v in pairs(tbl) do new[k] = v end + end + end + return new end \ No newline at end of file diff --git a/src/Main.cpp b/src/Main.cpp index 6b882425..100a92cc 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -6,13 +6,14 @@ #define STB_IMAGE_WRITE_IMPLEMENTATION #include +#include #pragma clang diagnostic pop #include "StartGame.h" /* - * Zepha, designed, developed, and created by Nicole Collings + * Zepha, designed, developed, and created by Auri Collings * This is my child, and I hope you like it. * Copyright 2018 - present Auri Collings, All Rights Reserved. */ diff --git a/src/client/gui/DebugDisplay.cpp b/src/client/gui/DebugDisplay.cpp index c37fb030..935d8d9b 100644 --- a/src/client/gui/DebugDisplay.cpp +++ b/src/client/gui/DebugDisplay.cpp @@ -115,7 +115,7 @@ void DebugDisplay::update(sptr player, f64 delta, u32 interpolatedC // Textual information - vec3 playerPos = glm::floor(player->getPos()); + ivec3 playerPos = glm::floor(player->getPos()); vec3 chunkPos = Space::Chunk::world::fromBlock(playerPos); vec3 mapBlockPos = Space::MapBlock::world::fromChunk(chunkPos); vec3 regionPos = Space::Region::world::fromChunk(chunkPos); diff --git a/src/game/atlas/TextureAtlas.cpp b/src/game/atlas/TextureAtlas.cpp index 19ec9f87..5d8bf97e 100644 --- a/src/game/atlas/TextureAtlas.cpp +++ b/src/game/atlas/TextureAtlas.cpp @@ -14,6 +14,36 @@ TextureAtlas::TextureAtlas(uvec2 size) : atlasData(size.x * 4 * size.y), maxTextureSlots(canvasTileSize.x * canvasTileSize.y), empty(canvasTileSize.x * canvasTileSize.y, true) { + + /** + * Rect Function. + * Creates a rectangular image with the color specified. + * + * @param w - The width of the rect. + * @param h - The height of the rect. + * @param fill - The color to fill the rectangle with. + */ + + parser.addFn("rect", [](u16 w, u16 h, string hex) { + vec4 color = Util::hexToColorVec(hex); + vec newData(w * h * 4); + for (u32 i = 0; i < w * h * 4; i++) newData[i] = color[i % 4] * 255; + return TexParserData { std::make_shared(newData, uvec2 { w, h }) }; + }); + + /** + * Alpha Function. + * Adjusts the opacity of the provided image by a factor. + * + * @param factor - The factor that the opacity should be scaled by. 0 = transparent, 1 = opaque. + * @param tex - The texture to scale the alpha of. + */ + + parser.addFn("alpha", [](f32 factor, TexParserData tex) { + for (u32 i = 0; i < tex.data->size.x * tex.data->size.y; i++) + tex.data->data[i * 4 + 3] = (tex.data->data[i * 4 + 3] / 255.f * factor) * 255; + return tex; + }); /** * Crop Function. @@ -35,7 +65,7 @@ TextureAtlas::TextureAtlas(uvec2 size) : tex.data->size = { w, h }; return tex; }); - + /** * Multiply Function. * Multiplies the texture by the specified color. @@ -53,6 +83,49 @@ TextureAtlas::TextureAtlas(uvec2 size) : return tex; }); + /** + * Stack function. () + * Stacks the provided textures on top of each other, blending partially opaque pixels. + * Requires at least two textures. The maximum is currently eight textures, + * however that could be removed later with some tweaks to StringParser. + * + * @param b - The base texture to stack onto. + * @param s1 - A texture to stack on top of the base texture. + * @param s2 - Another texture to stack on top of s1. + * @param s3 - ... + */ + + parser.addFn, + optional, optional, optional, + optional, optional, optional>("", []( + TexParserData b, TexParserData s1, optional s2, + optional s3, optional s4, optional s5, + optional s6, optional s7, optional s8) { + + vec stack; + stack.reserve(8); + stack.emplace_back(s1); + if (s2) stack.emplace_back(*s2); + if (s3) stack.emplace_back(*s3); + if (s4) stack.emplace_back(*s4); + if (s5) stack.emplace_back(*s5); + if (s6) stack.emplace_back(*s6); + if (s7) stack.emplace_back(*s7); + if (s8) stack.emplace_back(*s8); + + for (const let& s : stack) { + for (u32 i = 0; i < b.data->size.x * b.data->size.y; i++) { + const f32 factor = s.data->data[i * 4 + 3] / 255.f; + b.data->data[i * 4] = b.data->data[i * 4] * (1 - factor) + s.data->data[i * 4] * factor; + b.data->data[i * 4 + 1] = b.data->data[i * 4 + 1] * (1 - factor) + s.data->data[i * 4 + 1] * factor; + b.data->data[i * 4 + 2] = b.data->data[i * 4 + 2] * (1 - factor) + s.data->data[i * 4 + 2] * factor; + b.data->data[i * 4 + 3] = std::min((u16)(b.data->data[i * 4 + 3]) + s.data->data[i * 4 + 3], 255); + } + } + + return b; + }); + /** * Literal Function. * Converts raw strings to texture data by indexing the atlas. diff --git a/src/game/atlas/TextureAtlas.h b/src/game/atlas/TextureAtlas.h index b0fead6c..5b74d01a 100644 --- a/src/game/atlas/TextureAtlas.h +++ b/src/game/atlas/TextureAtlas.h @@ -11,6 +11,9 @@ class AtlasRef; class TextureAtlas { public: struct RawTexData { + RawTexData(const vec& data, const uvec2& size): + data(data), size(size) {}; + vec data; uvec2 size; }; diff --git a/src/game/def/mesh/ShaderMod.h b/src/game/def/mesh/ShaderMod.h index 77219da0..6cd2e0e4 100644 --- a/src/game/def/mesh/ShaderMod.h +++ b/src/game/def/mesh/ShaderMod.h @@ -17,5 +17,8 @@ enum class MeshMod { NONE = 0, OFFSET_X, OFFSET_Y, - OFFSET_Z + OFFSET_Z, + ROTATE_X, + ROTATE_Y, + ROTATE_Z }; diff --git a/src/lua/register/RegisterBiome.h b/src/lua/register/RegisterBiome.h index c33e8165..fe9041bf 100644 --- a/src/lua/register/RegisterBiome.h +++ b/src/lua/register/RegisterBiome.h @@ -73,11 +73,17 @@ namespace RegisterBiome { auto noiseList = biomeTable.get>("noise"); if (noiseList) { - let heightTable = noiseList->get>("heightmap"); - if (heightTable) heightmap = NoiseFromLua::parse(*heightTable); + let heightObj = noiseList->get("heightmap"); + if (heightObj.is()) heightmap = + NoiseFromLua::parse(heightObj.as()); + else if (heightObj.is()) heightmap = + FastNoise::NewFromEncodedNodeTree(heightObj.as().data()); - let volumeTable = noiseList->get>("volume"); - if (volumeTable) volume = NoiseFromLua::parse(*volumeTable); + let volumeObj = noiseList->get("volume"); + if (volumeObj.is()) volume = + NoiseFromLua::parse(volumeObj.as()); + else if (volumeObj.is()) volume = + FastNoise::NewFromEncodedNodeTree(volumeObj.as().data()); } std::vector> schematics {}; diff --git a/src/lua/register/RegisterBlock.h b/src/lua/register/RegisterBlock.h index 6e1ffbb5..a819ace3 100644 --- a/src/lua/register/RegisterBlock.h +++ b/src/lua/register/RegisterBlock.h @@ -110,6 +110,12 @@ namespace RegisterBlock { model.meshMods.emplace_back(MeshMod::OFFSET_Y, modTable.get_or("amplitude", 1)); else if (meshMod == "offset_z") model.meshMods.emplace_back(MeshMod::OFFSET_Z, modTable.get_or("amplitude", 1)); + else if (meshMod == "rotate_x") + model.meshMods.emplace_back(MeshMod::ROTATE_X, modTable.get_or("amplitude", 1)); + else if (meshMod == "rotate_y") + model.meshMods.emplace_back(MeshMod::ROTATE_Y, modTable.get_or("amplitude", 1)); + else if (meshMod == "rotate_z") + model.meshMods.emplace_back(MeshMod::ROTATE_Z, modTable.get_or("amplitude", 1)); } } diff --git a/src/server/ServerClients.cpp b/src/server/ServerClients.cpp index e4c0daee..0295149c 100644 --- a/src/server/ServerClients.cpp +++ b/src/server/ServerClients.cpp @@ -34,6 +34,7 @@ void ServerClients::handleDisconnect(ENetEvent e) { void ServerClients::createPlayer(sptr client, DimensionPtr dimension) { client->player = make_shared(*client, dimension->getWorld(), game, dimension); + client->player->setPos({ 0, 64, 0 }); game.s()->getParser().playerConnected(client->player); // client->player->setPos({ 256, -20, 256 }, true); diff --git a/src/util/Voronoi3D.cpp b/src/util/Voronoi3D.cpp index 2985dab5..1d7fc75a 100644 --- a/src/util/Voronoi3D.cpp +++ b/src/util/Voronoi3D.cpp @@ -1,70 +1,63 @@ -// -// Created by aurailus on 2019-11-12. -// - -#include +#include #include "Voronoi3D.h" -Voronoi3D::Voronoi3D(unsigned short size) : - size(size), - data(voronoi_data(size)) { - - for (unsigned short i = 0; i < size; i++) { - data[i].resize(size); - for (unsigned short j = 0; j < size; j++) { - data[i][j].resize(size); - } - } +#include "util/Space.h" + +Voronoi3D::Voronoi3D(u16 size) : size(size), data(pow(size, 3)) {} + +Voronoi3D::Voronoi3D(u16 size, const vec& data) : size(size), data(pow(size, 3)), points(data) { + generate(); } -void Voronoi3D::setPoints(const std::vector>& points) { - this->points = points; - - for (unsigned short i = 0; i < size; i++) { - for (unsigned short j = 0; j < size; j++) { - for (unsigned short k = 0; k < size; k++) { - float pointDistance = INFINITY; - unsigned short ind = 0; - - for (auto& point : points) { - float thisPointDistance = glm::distance(point.first, { i, j, k }); - if (thisPointDistance < pointDistance) { - pointDistance = thisPointDistance; - ind = point.second; - } - } - - data[i][j][k] = ind; +void Voronoi3D::setData(const vec& data) { + this->points = data; + generate(); +} + +void Voronoi3D::generate() { + for (u32 i = 0; i < pow(size, 3); i++) { + const u16vec3 pos = Space::indexToPos(i, size); + + f32 pointDistance = INFINITY; + u16 currentInd = 0; + + for (u32 j = 0; j < points.size(); j++) { + f32 thisPointDistance = glm::distance(vec3(points[j].pos), vec3(pos)); + if (thisPointDistance < pointDistance) { + pointDistance = thisPointDistance; + currentInd = j; } } + + data[i] = currentInd; } } -unsigned short Voronoi3D::getPoint(unsigned short x, unsigned short y, unsigned short z) { - return data[x][y][z]; +unsigned short Voronoi3D::operator[](u32 ind) { + return points[data[ind]].data; +} +unsigned short Voronoi3D::operator[](u16vec3 pos) { + return operator[](Space::posToIndex(pos, size)); } -//void Voronoi3D::setColorValues(const std::vector& values) { -// colorValues = values; -//} +void Voronoi3D::outputImage(u16 yCount) { + vec colorData(pow(size, 2) * 3); -//void Voronoi3D::generateImage(unsigned short depth) { -// auto colorData = new unsigned char[size * size * 3]; -// -// for (int i = 0; i < size * size; i++) { -// int x = i % size; -// int y = i / size; -// -// unsigned short point = data[x][y][depth]; -// auto color = colorValues[point]; -// -// colorData[i * 3 + 0] = static_cast(color.x * 255.f); -// colorData[i * 3 + 1] = static_cast(color.y * 255.f); -// colorData[i * 3 + 2] = static_cast(color.z * 255.f); -// } -// -// std::string name = "voronoi_"; -// name += std::to_string(depth) + ".jpg"; -// stbi_write_jpg(name.data(), size, size, 3, colorData, 100); -//} \ No newline at end of file + for (u32 i = 0; i < yCount; i++) { + for (u32 j = 0; j < pow(size, 2); j++) { + u16 x = j % size; + u16 z = j / size; + + vec3 color = points[data[Space::posToIndex( + { x, floor(static_cast(i) / (yCount - 1) * (size - 1)), z }, size)]].color; + + colorData[j * 3 + 0] = static_cast(color.x * 255); + colorData[j * 3 + 1] = static_cast(color.y * 255); + colorData[j * 3 + 2] = static_cast(color.z * 255); + } + + string name = "voronoi_" + std::to_string(i) + ".jpg"; + stbi_write_jpg(name.data(), size, size, 3, colorData.data(), 100); + } +} \ No newline at end of file diff --git a/src/util/Voronoi3D.h b/src/util/Voronoi3D.h index 91b6e49b..18467a16 100644 --- a/src/util/Voronoi3D.h +++ b/src/util/Voronoi3D.h @@ -1,29 +1,54 @@ -// -// Created by aurailus on 2019-11-12. -// - #pragma once -#include -#include +#include "util/Types.h" + +/** + * Creates a three-dimensional voronoi diagram which can be + * sampled to find the nearest point to a given position. + */ class Voronoi3D { - public: +public: + + /** Represents a point of data in the voronoi map. */ + struct VoronoiPoint { + VoronoiPoint(u16vec3 pos, u16 data): pos(pos), data(data) {} + VoronoiPoint(u16vec3 pos, u16 data, vec3 color): pos(pos), data(data), color(color) {} + + u16vec3 pos; + u16 data; + vec3 color; + }; + Voronoi3D() = default; - Voronoi3D(unsigned short size); + explicit Voronoi3D(u16 size); - void setPoints(const std::vector>& points); + Voronoi3D(u16 size, const vec& data); - unsigned short getPoint(unsigned short x, unsigned short y, unsigned short z); + /** Sets the data to the points specified and generates the map. */ + void setData(const vec& data); + + /** Retrieves a point data value at the specified index. */ + u16 operator[](u32 ind); + + /** Retrieves a point data value at the specified position. */ + u16 operator[](u16vec3 pos); -// void setColorValues(const std::vector& values); -// void generateImage(unsigned short depth); - private: - typedef std::vector>> voronoi_data; + /** Outputs a debug image into the working directory, with the number of layers specified by yCount. */ + void outputImage(u16 yCount); - unsigned short size; - voronoi_data data; - std::vector> points; -// std::vector colorValues; +private: + + /** Generates the voronoi diagram. */ + void generate(); + + /** The size of one axis of the voronoi map. */ + u16 size; + + /** A 3d grid of data corresponding to VoronoiPoint indices. */ + vec data; + + /** The voronoi points that the map was generated with. */ + vec points; }; diff --git a/src/world/gen/MapGen.cpp b/src/world/gen/MapGen.cpp index 8689ba3b..5ac980cb 100644 --- a/src/world/gen/MapGen.cpp +++ b/src/world/gen/MapGen.cpp @@ -1,5 +1,4 @@ #include -#include #include "MapGen.h" @@ -33,7 +32,7 @@ MapGen::MapGen(Subgame& game, World& world, u32 seed, std::unordered_set let biomeScale = FastNoise::New(); biomeScale->SetSource(biomePerlin); - biomeScale->SetScale(1/1000.f); + biomeScale->SetScale(1/2000.f); let biomeFractal = FastNoise::New(); biomeFractal->SetSource(biomeScale); @@ -55,8 +54,8 @@ std::unique_ptr MapGen::generateArea(u16 dim, ivec3 origin, u1 Job job(origin, size); job.temperature.generate({ job.pos.x * 16, 0, job.pos.z * 16 }, biomeGenerator); - job.roughness.generate({ job.pos.x * 16, 0, job.pos.z * 16 }, biomeGenerator); - job.humidity.generate({ job.pos.x * 16, 0, job.pos.z * 16 }, biomeGenerator); + job.roughness.generate(ivec3 { job.pos.x * 16, 0, job.pos.z * 16 } + ivec3(2000), biomeGenerator); + job.humidity.generate(ivec3 { job.pos.x * 16, 0, job.pos.z * 16 } + ivec3(-2000), biomeGenerator); let biomeMap = vec(pow(job.size * 16 + 1, 2)); u16vec3 bPos {}; @@ -108,25 +107,25 @@ std::unique_ptr MapGen::generateArea(u16 dim, ivec3 origin, u1 } void MapGen::generateVoronoi(const std::unordered_set& biomes) { - vec> points {}; + vec points {}; for (auto biomeInd : biomes) { auto& biome = game.getBiomes().biomeFromId(biomeInd); - points.emplace_back(vec3 { static_cast(std::fmin(voronoiSize - 1, std::fmax(0, (biome.temperature + 1) / 2 * voronoiSize))), static_cast(std::fmin(voronoiSize - 1, std::fmax(0, biome.humidity * voronoiSize))), static_cast(std::fmin(voronoiSize - 1, std::fmax(0, biome.roughness * voronoiSize))) - }, biomeInd); + }, biomeInd, biome.tint); } - - voronoi.setPoints(points); + voronoi.setData(points); + voronoi.outputImage(8); } u16 MapGen::getBiomeAt(f32 temperature, f32 humidity, f32 roughness) { - return voronoi.getPoint( - static_cast(std::fmin(voronoiSize - 1, std::fmax(0, (temperature + 1) / 2 * voronoiSize))), - static_cast(std::fmin(voronoiSize - 1, std::fmax(0, humidity * voronoiSize))), - static_cast(std::fmin(voronoiSize - 1, std::fmax(0, roughness * voronoiSize)))); + return voronoi[{ + static_cast(std::fmin(voronoiSize - 1, std::fmax(0, (temperature + 1) / 2 * (voronoiSize - 1)))), + static_cast(std::fmin(voronoiSize - 1, std::fmax(0, (humidity + 1) / 2 * (voronoiSize - 1)))), + static_cast(std::fmin(voronoiSize - 1, std::fmax(0, (roughness + 1) / 2 * (voronoiSize - 1)))) + }]; } uptr MapGen::populateChunkDensity(MapGen::Job& job, ivec3 localPos) { diff --git a/subgames/zeus/mods/zeus_default/models/untitled.blend b/subgames/zeus/mods/zeus_default/models/untitled.blend new file mode 100644 index 00000000..b63dc377 Binary files /dev/null and b/subgames/zeus/mods/zeus_default/models/untitled.blend differ diff --git a/subgames/zeus/mods/zeus_default/models/wip/tree_parts.blend b/subgames/zeus/mods/zeus_default/models/wip/tree_parts.blend new file mode 100644 index 00000000..9a571078 Binary files /dev/null and b/subgames/zeus/mods/zeus_default/models/wip/tree_parts.blend differ diff --git a/subgames/zeus/mods/zeus_default/models/wip/tree_parts.blend1 b/subgames/zeus/mods/zeus_default/models/wip/tree_parts.blend1 new file mode 100644 index 00000000..a05a2cfd Binary files /dev/null and b/subgames/zeus/mods/zeus_default/models/wip/tree_parts.blend1 differ diff --git a/subgames/zeus/mods/zeus_default/models/wip/workbench.blend1 b/subgames/zeus/mods/zeus_default/models/wip/workbench.blend1 new file mode 100644 index 00000000..f2c84110 Binary files /dev/null and b/subgames/zeus/mods/zeus_default/models/wip/workbench.blend1 differ diff --git a/subgames/zeus/mods/zeus_default/script/blocks/main.lua b/subgames/zeus/mods/zeus_default/script/blocks/main.lua index 603f7159..48b1cd6a 100644 --- a/subgames/zeus/mods/zeus_default/script/blocks/main.lua +++ b/subgames/zeus/mods/zeus_default/script/blocks/main.lua @@ -8,6 +8,5 @@ require './cactus' require './sand' require './sandstone' require './stone' -require './tallgrass' require './wood' require './light' \ No newline at end of file diff --git a/subgames/zeus/mods/zeus_default/script/blocks/tallgrass.lua b/subgames/zeus/mods/zeus_default/script/blocks/tallgrass.lua deleted file mode 100644 index 21cf0714..00000000 --- a/subgames/zeus/mods/zeus_default/script/blocks/tallgrass.lua +++ /dev/null @@ -1,28 +0,0 @@ -for i = 1, 5, 1 do - zepha.register_block(":tall_grass_" .. i, { - name = "Tall Grass", - - culls = false, - solid = false, - model = "zepha:base:cross_plant", - textures = { "tint(0, zeus:default:tallgrass_"..i..")" }, - lowdef_render = false, - - selection_box = {{1/16, 0, 1/16, 15/16, 0.30 + i * 0.1, 15/16}}, - - tool_props = { - health = 5, - multipliers = { - snap = 1.8, - grab = 1.2, - _other = 0.35 - } - }, - - light_propagates = true, - - yields = function(pos) - if math.random() > 0.8 then return "zeus:materials:plant_fibre" end - end - }) -end \ No newline at end of file diff --git a/subgames/zeus/mods/zeus_default/textures/unimplemented/dry_bush.png b/subgames/zeus/mods/zeus_default/textures/unimplemented/dry_bush.png deleted file mode 100755 index 043cc989..00000000 Binary files a/subgames/zeus/mods/zeus_default/textures/unimplemented/dry_bush.png and /dev/null differ diff --git a/subgames/zeus/mods/zeus_flowers/conf.json b/subgames/zeus/mods/zeus_flowers/conf.json deleted file mode 100644 index 42e2564f..00000000 --- a/subgames/zeus/mods/zeus_flowers/conf.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "Flowers", - "identifier": "zeus:flowers", - "description": "Flowers and vegitation for the Zeus subgame.", - "version": "0.0.1", - "main": "main", - "dependencies": { - "zeus:default": "^0" - } -} \ No newline at end of file diff --git a/subgames/zeus/mods/zeus_flowers/script/flowers.lua b/subgames/zeus/mods/zeus_flowers/script/flowers.lua deleted file mode 100644 index d81a7747..00000000 --- a/subgames/zeus/mods/zeus_flowers/script/flowers.lua +++ /dev/null @@ -1,60 +0,0 @@ -local flowers = { - "rose", - "tulip", - "viola", - "geranium", - "red_mushroom", - "brown_mushroom", - "white_dandelion", - "yellow_dandelion" -} - -local titlecase = function(first, rest) return first:upper()..rest:lower() end - -for _,flower in pairs(flowers) do - local name = flower:gsub("_", " "):gsub("(%a)([%w_']*)", titlecase) - - zepha.register_block("zeus:flowers:flower_" .. flower, { - culls = false, - solid = false, - name = name, - model = "zepha:base:cross_plant", - textures = { - "zeus:flowers:" .. flower - }, - light_propagates = true, - lowdef_render = false, - selection_box = { - { 4/16, 0, 4/16, 12/16, 14/16, 12/16 } - }, - toughness = { - hand = 0 - } - }) -end - -require './models/hash' - -zepha.register_block("zeus:flowers:clover", { - name = "Clover", - culls = false, - solid = false, - model = "zeus:flowers:hash", - textures = { - "tint(0, crop(0, 0, 16, 16, zeus:flowers:clover))", - "tint(0, crop(16, 0, 16, 16, zeus:flowers:clover))", - "tint(0, crop(32, 0, 16, 16, zeus:flowers:clover))", - "tint(0, crop(0, 16, 16, 8, zeus:flowers:clover))", - "tint(0, crop(16, 16, 16, 8, zeus:flowers:clover))", - "tint(0, crop(0, 24, 16, 8, zeus:flowers:clover))", - "tint(0, crop(16, 24, 16, 8, zeus:flowers:clover))" - }, - light_propagates = true, - lowdef_render = false, - selection_box = { - {1/16, 0, 1/16, 15/16, 4/16, 15/16} - }, - toughness = { - hand = 0 - } -}) \ No newline at end of file diff --git a/subgames/zeus/mods/zeus_flowers/script/main.lua b/subgames/zeus/mods/zeus_flowers/script/main.lua deleted file mode 100644 index ea181129..00000000 --- a/subgames/zeus/mods/zeus_flowers/script/main.lua +++ /dev/null @@ -1 +0,0 @@ -require './flowers' \ No newline at end of file diff --git a/subgames/zeus/mods/zeus_flowers/script/models/hash.lua b/subgames/zeus/mods/zeus_flowers/script/models/hash.lua deleted file mode 100644 index 3d3e66a1..00000000 --- a/subgames/zeus/mods/zeus_flowers/script/models/hash.lua +++ /dev/null @@ -1,116 +0,0 @@ --- --- A flower blockmodel that is a short hash similar to wheat in Minecraft, --- with multiple layers of topfaces. --- - -local offset_amp = 0.2 -local amp = 0.025 - -zepha.register_blockmodel('zeus:flowers:hash', { - mesh_mods = { - { - type = 'offset_x', - amplitude = offset_amp, - }, - { - type = 'offset_z', - amplitude = offset_amp, - } - }, - parts = { - { - face = 'nocull', - tex = 4, - points = { - 4/16, 0, 0, 0, 1, - 4/16, 0, 1, 1, 1, - 4/16, 0.5, 1, 1, 0, - 4/16, 0.5, 0, 0, 0 - }, - shader_mod = { - type = 'sway_attached', - amplitude = amp - } - }, { - face = 'nocull', - tex = 5, - points = { - 12/16, 0.5, 1, 0, 0, - 12/16, 0, 1, 0, 1, - 12/16, 0, 0, 1, 1, - 12/16, 0.5, 0, 1, 0 - }, - shader_mod = { - type = 'sway_attached', - amplitude = amp - } - }, { - face = 'nocull', - tex = 5, - points = { - 0, 0, 12/16, 0, 1, - 1, 0, 12/16, 1, 1, - 1, 0.5, 12/16, 1, 0, - 0, 0.5, 12/16, 0, 0 - }, - shader_mod = { - type = 'sway_attached', - amplitude = amp - } - }, { - face = 'nocull', - tex = 6, - points = { - 0, 0, 4/16, 1, 1, - 0, 0.5, 4/16, 1, 0, - 1, 0.5, 4/16, 0, 0, - 1, 0, 4/16, 0, 1 - }, - shader_mod = { - type = 'sway_attached', - amplitude = amp - } - }, { - face = 'nocull', - tex = 1, - points = { - 0, 4/16, 0, 0, 0, - 0, 4/16, 1, 0, 1, - 1, 4/16, 1, 1, 1, - 1, 4/16, 0, 1, 0 - }, - shader_mod = { - type = 'sway_full_block', - amplitude = amp - } - }, - { - face = 'nocull', - tex = 2, - points = { - 0, 3/16, 0, 0, 0, - 0, 3/16, 1, 0, 1, - 1, 3/16, 1, 1, 1, - 1, 3/16, 0, 1, 0 - }, - shader_mod = { - type = 'sway_full_block', - amplitude = amp - } - }, - { - face = 'nocull', - tex = 3, - points = { - 0, 2/16, 0, 0, 0, - 0, 2/16, 1, 0, 1, - 1, 2/16, 1, 1, 1, - 1, 2/16, 0, 1, 0 - }, - shader_mod = { - type = 'sway_full_block', - amplitude = amp - } - } - } -}) \ No newline at end of file diff --git a/subgames/zeus/mods/zeus_flowers/textures/clover.png b/subgames/zeus/mods/zeus_flowers/textures/clover.png deleted file mode 100644 index 7999a133..00000000 Binary files a/subgames/zeus/mods/zeus_flowers/textures/clover.png and /dev/null differ diff --git a/subgames/zeus/mods/zeus_flowers/textures/pink.png b/subgames/zeus/mods/zeus_flowers/textures/pink.png deleted file mode 100755 index a78e9d1f..00000000 Binary files a/subgames/zeus/mods/zeus_flowers/textures/pink.png and /dev/null differ diff --git a/subgames/zeus/mods/zeus_flowers/textures/white_dandelion.png b/subgames/zeus/mods/zeus_flowers/textures/white_dandelion.png deleted file mode 100755 index 44359ef1..00000000 Binary files a/subgames/zeus/mods/zeus_flowers/textures/white_dandelion.png and /dev/null differ diff --git a/subgames/zeus/mods/zeus_vegetation/conf.json b/subgames/zeus/mods/zeus_vegetation/conf.json new file mode 100644 index 00000000..4b111501 --- /dev/null +++ b/subgames/zeus/mods/zeus_vegetation/conf.json @@ -0,0 +1,10 @@ +{ + "name": "Vegetation", + "identifier": "zeus:vegetation", + "description": "Vegetation for the Zeus subgame.", + "version": "0.0.1", + "main": "main", + "dependencies": { + "zeus:default": "^0" + } +} \ No newline at end of file diff --git a/subgames/zeus/mods/zeus_vegetation/script/main.lua b/subgames/zeus/mods/zeus_vegetation/script/main.lua new file mode 100644 index 00000000..6e7eae8e --- /dev/null +++ b/subgames/zeus/mods/zeus_vegetation/script/main.lua @@ -0,0 +1,74 @@ +require './models/clover' + +local selection_box_flower = { + { 4/16, 0, 4/16, 12/16, 14/16, 12/16 } +} + +local selection_box_grass = { + { 2/16, 0, 2/16, 14/16, 7/16, 14/16 } +} + +local function title_case(str) + local tf = function(first, rest) return first:upper()..rest:lower() end + return str:gsub('_', ' '):gsub("(%a)([%w_']*)", tf) +end + +local function register_vegetation(identifier, override) + zepha.register_block(':' .. identifier, table.merge({ + culls = false, + solid = false, + lowdef_render = false, + light_propagates = true, + toughness = { hand = 0 }, + name = title_case(identifier), + model = 'zepha:base:cross_plant', + selection_box = selection_box_flower, + textures = { 'zeus:vegetation:' .. identifier } + }, override or {})) +end + +register_vegetation('rose') +register_vegetation('tulip') +register_vegetation('viola') +register_vegetation('purple') +register_vegetation('geranium') +register_vegetation('dandelion_white', { name = 'White Dandelion' }) +register_vegetation('dandelion_yellow', { name = 'Yellow Dandelion' }) +register_vegetation('tall_blue', { model = 'zepha:base:cross_plant_tall' }) +register_vegetation('mushroom_red', { name = 'Red Mushroom', model = 'zepha:base:cross_large' }) +register_vegetation('mushroom_glow', { name = 'Glow Mushroom', model = 'zepha:base:cross_large' }) +register_vegetation('mushroom_brown', { name = 'Brown Mushroom', model = 'zepha:base:cross_large' }) + +register_vegetation('clover', { + model = 'zeus:vegetation:clover', + textures = { + 'tint(0, crop(0, 0, 16, 16, zeus:vegetation:clover))', + 'tint(0, crop(16, 0, 16, 16, zeus:vegetation:clover))' + }, + selection_box = { + { 1/16, 0, 1/16, 15/16, 4/16, 15/16 } + } +}) + +local grass_def = { + name = 'Tall Grass', + model = 'zepha:base:cross_plant', + selection_box = selection_box_grass, + tool_props = { + health = 5, + multipliers = { + snap = 1.8, + grab = 1.2, + _other = 0.35 + } + }, + yields = function(pos) + if math.random() > 0.8 then return 'zeus:materials:plant_fibre' end + end +} + +register_vegetation('tall_grass_1', table.merge(grass_def, { textures = { 'tint(0, zeus:vegetation:tall_grass_1)' }})) +register_vegetation('tall_grass_2', table.merge(grass_def, { textures = { 'tint(0, zeus:vegetation:tall_grass_2)' }})) +register_vegetation('tall_grass_3', table.merge(grass_def, { textures = { 'tint(0, zeus:vegetation:tall_grass_3)' }})) +register_vegetation('tall_grass_4', table.merge(grass_def, { textures = { 'tint(0, zeus:vegetation:tall_grass_4)' }})) +register_vegetation('tall_grass_5', table.merge(grass_def, { textures = { 'tint(0, zeus:vegetation:tall_grass_5)' }})) \ No newline at end of file diff --git a/subgames/zeus/mods/zeus_vegetation/script/models/clover.lua b/subgames/zeus/mods/zeus_vegetation/script/models/clover.lua new file mode 100644 index 00000000..fa69a427 --- /dev/null +++ b/subgames/zeus/mods/zeus_vegetation/script/models/clover.lua @@ -0,0 +1,50 @@ +local amp_offset_h = 3/16 +local amp_offset_v = 1/16 +local amp_sway = 0.025 + +zepha.register_blockmodel('zeus:vegetation:clover', { + mesh_mods = { + { + type = 'offset_x', + amplitude = amp_offset_h, + }, + { + type = 'offset_y', + amplitude = amp_offset_v, + }, + { + type = 'offset_z', + amplitude = amp_offset_h, + } + }, + parts = { + { + face = 'nocull', + tex = 1, + points = { + 0, 2.5/16, 0, 0, 0, + 0, 2.5/16, 1, 0, 1, + 1, 2.5/16, 1, 1, 1, + 1, 2.5/16, 0, 1, 0 + }, + shader_mod = { + type = 'sway_full_block', + amplitude = amp_sway + } + }, + { + face = 'nocull', + tex = 2, + points = { + 0, 1.5/16, 0, 0, 0, + 0, 1.5/16, 1, 0, 1, + 1, 1.5/16, 1, 1, 1, + 1, 1.5/16, 0, 1, 0 + }, + shader_mod = { + type = 'sway_full_block', + amplitude = amp_sway + } + } + } +}) \ No newline at end of file diff --git a/subgames/zeus/mods/zeus_vegetation/textures/clover.png b/subgames/zeus/mods/zeus_vegetation/textures/clover.png new file mode 100644 index 00000000..9a7cbd0a Binary files /dev/null and b/subgames/zeus/mods/zeus_vegetation/textures/clover.png differ diff --git a/subgames/zeus/mods/zeus_vegetation/textures/dandelion_white.png b/subgames/zeus/mods/zeus_vegetation/textures/dandelion_white.png new file mode 100755 index 00000000..292093a7 Binary files /dev/null and b/subgames/zeus/mods/zeus_vegetation/textures/dandelion_white.png differ diff --git a/subgames/zeus/mods/zeus_flowers/textures/yellow_dandelion.png b/subgames/zeus/mods/zeus_vegetation/textures/dandelion_yellow.png similarity index 100% rename from subgames/zeus/mods/zeus_flowers/textures/yellow_dandelion.png rename to subgames/zeus/mods/zeus_vegetation/textures/dandelion_yellow.png diff --git a/subgames/zeus/mods/zeus_flowers/textures/geranium.png b/subgames/zeus/mods/zeus_vegetation/textures/geranium.png similarity index 100% rename from subgames/zeus/mods/zeus_flowers/textures/geranium.png rename to subgames/zeus/mods/zeus_vegetation/textures/geranium.png diff --git a/subgames/zeus/mods/zeus_flowers/textures/lilypad.png b/subgames/zeus/mods/zeus_vegetation/textures/lilypad.png similarity index 100% rename from subgames/zeus/mods/zeus_flowers/textures/lilypad.png rename to subgames/zeus/mods/zeus_vegetation/textures/lilypad.png diff --git a/subgames/zeus/mods/zeus_flowers/textures/lilypad_flower.png b/subgames/zeus/mods/zeus_vegetation/textures/lilypad_flower.png similarity index 100% rename from subgames/zeus/mods/zeus_flowers/textures/lilypad_flower.png rename to subgames/zeus/mods/zeus_vegetation/textures/lilypad_flower.png diff --git a/subgames/zeus/mods/zeus_flowers/textures/brown_mushroom.png b/subgames/zeus/mods/zeus_vegetation/textures/mushroom_brown.png similarity index 100% rename from subgames/zeus/mods/zeus_flowers/textures/brown_mushroom.png rename to subgames/zeus/mods/zeus_vegetation/textures/mushroom_brown.png diff --git a/subgames/zeus/mods/zeus_vegetation/textures/mushroom_glow.png b/subgames/zeus/mods/zeus_vegetation/textures/mushroom_glow.png new file mode 100644 index 00000000..3ffd9c0d Binary files /dev/null and b/subgames/zeus/mods/zeus_vegetation/textures/mushroom_glow.png differ diff --git a/subgames/zeus/mods/zeus_flowers/textures/red_mushroom.png b/subgames/zeus/mods/zeus_vegetation/textures/mushroom_red.png similarity index 100% rename from subgames/zeus/mods/zeus_flowers/textures/red_mushroom.png rename to subgames/zeus/mods/zeus_vegetation/textures/mushroom_red.png diff --git a/subgames/zeus/mods/zeus_vegetation/textures/purple.png b/subgames/zeus/mods/zeus_vegetation/textures/purple.png new file mode 100644 index 00000000..ac75c6c8 Binary files /dev/null and b/subgames/zeus/mods/zeus_vegetation/textures/purple.png differ diff --git a/subgames/zeus/mods/zeus_flowers/textures/rose.png b/subgames/zeus/mods/zeus_vegetation/textures/rose.png similarity index 100% rename from subgames/zeus/mods/zeus_flowers/textures/rose.png rename to subgames/zeus/mods/zeus_vegetation/textures/rose.png diff --git a/subgames/zeus/mods/zeus_vegetation/textures/tall_blue.png b/subgames/zeus/mods/zeus_vegetation/textures/tall_blue.png new file mode 100644 index 00000000..0f7dee81 Binary files /dev/null and b/subgames/zeus/mods/zeus_vegetation/textures/tall_blue.png differ diff --git a/subgames/zeus/mods/zeus_vegetation/textures/tall_blue.xcf b/subgames/zeus/mods/zeus_vegetation/textures/tall_blue.xcf new file mode 100644 index 00000000..4a4c1101 Binary files /dev/null and b/subgames/zeus/mods/zeus_vegetation/textures/tall_blue.xcf differ diff --git a/subgames/zeus/mods/zeus_default/textures/tallgrass_1.png b/subgames/zeus/mods/zeus_vegetation/textures/tall_grass_1.png similarity index 100% rename from subgames/zeus/mods/zeus_default/textures/tallgrass_1.png rename to subgames/zeus/mods/zeus_vegetation/textures/tall_grass_1.png diff --git a/subgames/zeus/mods/zeus_default/textures/tallgrass_2.png b/subgames/zeus/mods/zeus_vegetation/textures/tall_grass_2.png similarity index 100% rename from subgames/zeus/mods/zeus_default/textures/tallgrass_2.png rename to subgames/zeus/mods/zeus_vegetation/textures/tall_grass_2.png diff --git a/subgames/zeus/mods/zeus_default/textures/tallgrass_3.png b/subgames/zeus/mods/zeus_vegetation/textures/tall_grass_3.png similarity index 100% rename from subgames/zeus/mods/zeus_default/textures/tallgrass_3.png rename to subgames/zeus/mods/zeus_vegetation/textures/tall_grass_3.png diff --git a/subgames/zeus/mods/zeus_default/textures/tallgrass_4.png b/subgames/zeus/mods/zeus_vegetation/textures/tall_grass_4.png similarity index 100% rename from subgames/zeus/mods/zeus_default/textures/tallgrass_4.png rename to subgames/zeus/mods/zeus_vegetation/textures/tall_grass_4.png diff --git a/subgames/zeus/mods/zeus_default/textures/tallgrass_5.png b/subgames/zeus/mods/zeus_vegetation/textures/tall_grass_5.png similarity index 100% rename from subgames/zeus/mods/zeus_default/textures/tallgrass_5.png rename to subgames/zeus/mods/zeus_vegetation/textures/tall_grass_5.png diff --git a/subgames/zeus/mods/zeus_flowers/textures/tulip.png b/subgames/zeus/mods/zeus_vegetation/textures/tulip.png similarity index 100% rename from subgames/zeus/mods/zeus_flowers/textures/tulip.png rename to subgames/zeus/mods/zeus_vegetation/textures/tulip.png diff --git a/subgames/zeus/mods/zeus_flowers/textures/viola.png b/subgames/zeus/mods/zeus_vegetation/textures/viola.png similarity index 100% rename from subgames/zeus/mods/zeus_flowers/textures/viola.png rename to subgames/zeus/mods/zeus_vegetation/textures/viola.png diff --git a/subgames/zeus/mods/zeus_world/conf.json b/subgames/zeus/mods/zeus_world/conf.json index 5caa5de3..291963ff 100644 --- a/subgames/zeus/mods/zeus_world/conf.json +++ b/subgames/zeus/mods/zeus_world/conf.json @@ -6,7 +6,7 @@ "main": "main", "dependencies": { "zeus:default": "^0", - "zeus:flowers": "^0", + "zeus:vegetation": "^0", "@auri:hot_wheel": "^0" } } diff --git a/subgames/zeus/mods/zeus_world/script/biomes/desert.lua b/subgames/zeus/mods/zeus_world/script/biomes/desert.lua index c91c3b72..93ef1ffc 100644 --- a/subgames/zeus/mods/zeus_world/script/biomes/desert.lua +++ b/subgames/zeus/mods/zeus_world/script/biomes/desert.lua @@ -1,70 +1,70 @@ --- local identifier = "zeus:world:desert" --- --- local structures = {} --- --- table.insert(structures, zepha.create_structure({ --- origin = V(), --- probability = 0.001, --- layout = {{{ "zeus:default:cactus" }}, {{ "zeus:default:cactus" }}} --- })) --- --- table.insert(structures, zepha.create_structure({ --- origin = V(), --- probability = 0.001, --- layout = {{{ "zeus:default:cactus" }}, {{ "zeus:default:cactus" }}, {{ "zeus:default:cactus" }}} --- })) --- --- table.insert(structures, zepha.create_structure({ --- origin = V(), --- probability = 0.001, --- layout = {{{ "zeus:default:cactus" }}, {{ "zeus:default:cactus" }}, {{ "zeus:default:cactus" }}, {{ "zeus:default:cactus" }}} --- })) --- --- local noise = { --- -- heightmap = runfile(_PATH .. 'world_noise') --- -- heightmap = { --- -- module = "add", --- -- sources = {{ --- -- module = "min", --- -- sources = {{ --- -- module = "turbulence", --- -- power = 1, --- -- frequency = 0.3, --- -- source = { --- -- module = "add", --- -- sources = {{ --- -- -- Elevation --- -- module = "scale_bias", --- -- source = { --- -- module = "spheres", --- -- frequency = 0.2 --- -- }, --- -- scale = 20 --- -- }, { --- -- -- Features --- -- module = "scale_bias", --- -- source = { --- -- module = "perlin", --- -- frequency = 0.1, --- -- octaves = 6, --- -- }, --- -- scale = 8 --- -- }} --- -- } --- -- }, { --- -- module = "scale_bias", --- -- scale = 1, --- -- bias = 1000, --- -- source = { --- -- module = "perlin", --- -- frequency = 0.2 --- -- } --- -- }} --- -- }, { --- -- module = "const", --- -- value = -40 --- -- }} --- -- } +local identifier = "zeus:world:desert" + +local structures = {} + +table.insert(structures, zepha.create_structure({ + origin = V(), + probability = 0.001, + layout = {{{ "zeus:default:cactus" }}, {{ "zeus:default:cactus" }}} +})) + +table.insert(structures, zepha.create_structure({ + origin = V(), + probability = 0.001, + layout = {{{ "zeus:default:cactus" }}, {{ "zeus:default:cactus" }}, {{ "zeus:default:cactus" }}} +})) + +table.insert(structures, zepha.create_structure({ + origin = V(), + probability = 0.001, + layout = {{{ "zeus:default:cactus" }}, {{ "zeus:default:cactus" }}, {{ "zeus:default:cactus" }}, {{ "zeus:default:cactus" }}} +})) + +local noise = { +-- heightmap = runfile(_PATH .. 'world_noise') +-- heightmap = { +-- module = "add", +-- sources = {{ +-- module = "min", +-- sources = {{ +-- module = "turbulence", +-- power = 1, +-- frequency = 0.3, +-- source = { +-- module = "add", +-- sources = {{ +-- -- Elevation +-- module = "scale_bias", +-- source = { +-- module = "spheres", +-- frequency = 0.2 +-- }, +-- scale = 20 +-- }, { +-- -- Features +-- module = "scale_bias", +-- source = { +-- module = "perlin", +-- frequency = 0.1, +-- octaves = 6, +-- }, +-- scale = 8 +-- }} +-- } +-- }, { +-- module = "scale_bias", +-- scale = 1, +-- bias = 1000, +-- source = { +-- module = "perlin", +-- frequency = 0.2 +-- } +-- }} +-- }, { +-- module = "const", +-- value = -40 +-- }} +-- } -- volume = { -- module = "scale", -- y_scale = 2, @@ -83,23 +83,24 @@ -- } -- } -- } --- } --- --- zepha.register_biome(identifier, { --- environment = { --- temperature = 40/100, --- humidity = 20/100, --- roughness = 10/100 --- }, --- blocks = { --- top = "zeus:default:sand", --- soil = "zeus:default:sand", --- rock = "zeus:default:sandstone" --- }, --- tags = { natural = 1, default = 1 }, --- biome_tint = "#e6fa61", --- noise = noise, --- structures = structures --- }) --- --- return identifier; + volume = require './world_noise' +} + +zepha.register_biome(identifier, { + environment = { + temperature = 50/100, + humidity = 0/100, + roughness = 0/100 + }, + blocks = { + top = "zeus:default:sand", + soil = "zeus:default:sand", + rock = "zeus:default:sandstone" + }, + tags = { natural = 1, default = 1 }, + biome_tint = "#e6fa61", + noise = noise, + structures = structures +}) + +return identifier; diff --git a/subgames/zeus/mods/zeus_world/script/biomes/forest.lua b/subgames/zeus/mods/zeus_world/script/biomes/forest.lua index faf9c260..6aa6142d 100644 --- a/subgames/zeus/mods/zeus_world/script/biomes/forest.lua +++ b/subgames/zeus/mods/zeus_world/script/biomes/forest.lua @@ -22,40 +22,46 @@ local structures = {} for i = 1, 5 do table.insert(structures, zepha.create_structure({ origin = V(), - probability = 0.025, - layout = {{{ "zeus:default:tall_grass_" .. tostring(i) }}} + probability = 0.025 * (i / 3), + layout = {{{ "zeus:vegetation:tall_grass_" .. tostring(i) }}} })) end -- table.insert(structures, zepha.create_structure({ origin = V(), - probability = 0.05, - layout = {{{ "zeus:flowers:flower_red_mushroom" }}} + probability = 0.025, + layout = {{{ "zeus:vegetation:mushroom_glow" }}} +})) + +table.insert(structures, zepha.create_structure({ + origin = V(), + probability = 0.15, + layout = {{{ "zeus:vegetation:geranium" }}} })) table.insert(structures, zepha.create_structure({ origin = V(), probability = 0.05, - layout = {{{ "zeus:flowers:flower_brown_mushroom" }}} + layout = {{{ "zeus:vegetation:tall_blue" }}} })) -table.insert(structures, zepha.create_structure({ - origin = V(1), - probability = 0.1, - layout = {{ - { none, none, none }, - { none, wood, none }, - { none, none, none } - }, { - { none, leaf, none }, - { leaf, wood, leaf }, - { none, leaf, none } - }, { - { none, none, none }, - { none, leaf, none }, - { none, none, none } - }} -})) +-- table.insert(structures, zepha.create_structure({ +-- origin = V(1), +-- probability = 0.1, +-- layout = {{ +-- { none, none, none }, +-- { none, wood, none }, +-- { none, none, none } +-- }, { +-- { none, leaf, none }, +-- { leaf, wood, leaf }, +-- { none, leaf, none } +-- }, { +-- { none, none, none }, +-- { none, leaf, none }, +-- { none, none, none } +-- }} +-- })) local woo = "zeus:default:wood" local lea = "zeus:default:leaves" @@ -111,15 +117,15 @@ local leaf_layer_3 = { table.insert(structures, zepha.create_structure({ origin = V(2, 2, 2), - probability = 0.01, + probability = 0.02, layout = { - trunk_layer_0, - trunk_layer_0, - trunk_layer_0, - trunk_layer_0, - trunk_layer_1, - trunk_layer_1, - trunk_layer_1, +-- trunk_layer_0, +-- trunk_layer_0, +-- trunk_layer_0, +-- trunk_layer_0, +-- trunk_layer_1, +-- trunk_layer_1, +-- trunk_layer_1, trunk_layer_2, trunk_layer_2, trunk_layer_2, @@ -141,42 +147,49 @@ table.insert(structures, zepha.create_structure({ } })) +table.insert(structures, zepha.create_structure({ + origin = V(), + probability = 0.55, + layout = {{{ "zeus:vegetation:clover" }}} +})) + local noise = { -- heightmap = runfile(_PATH .. 'world_noise'), - heightmap = { - module = "add", - sources = { - require('./world_noise'), - { - module = "max", - smoothness = 50, - scalar = 0, - source = { - module = "add", - scalar = -50, - source = { - module = "multiply", - scalar = 400, - source = { - module = "simplex", - frequency = 0.00025, - lacunarity = 2.5, - octaves = 8, - persistence = 0.55 - } - } - } - } - } - } +-- heightmap = { +-- module = "add", +-- sources = { +-- require './world_noise', +-- { +-- module = "max", +-- smoothness = 50, +-- scalar = 0, +-- source = { +-- module = "add", +-- scalar = -50, +-- source = { +-- module = "multiply", +-- scalar = 400, +-- source = { +-- module = "simplex", +-- frequency = 0.00025, +-- lacunarity = 2.5, +-- octaves = 8, +-- persistence = 0.55 +-- } +-- } +-- } +-- } +-- } +-- } + volume = require './world_noise' } zepha.register_biome(identifier, { environment = { temperature = 25/100, - humidity = 70/100, - roughness = 20/100, + humidity = 100/100, + roughness = 60/100, }, blocks = { top = "zeus:default:grass", diff --git a/subgames/zeus/mods/zeus_world/script/biomes/plains.lua b/subgames/zeus/mods/zeus_world/script/biomes/plains.lua index d339c117..5442ceba 100644 --- a/subgames/zeus/mods/zeus_world/script/biomes/plains.lua +++ b/subgames/zeus/mods/zeus_world/script/biomes/plains.lua @@ -16,7 +16,7 @@ local structures = {} -- probability = 0.1, -- -- origin = V{1, 1, 1}, -- origin = V(), --- layout = {{{ "zeus:flowers:flower_geranium" }}} +-- layout = {{{ "zeus:vegetation:geranium" }}} -- })) table.insert(structures, zepha.create_structure({ @@ -121,58 +121,60 @@ table.insert(structures, zepha.create_structure({ } })) +table.insert(structures, zepha.create_structure({ + origin = V(), + probability = 0.1, + layout = {{{ "zeus:vegetation:purple" }}} +})) + for i = 1, 5 do table.insert(structures, zepha.create_structure({ origin = V(), probability = 0.05, - layout = {{{ "zeus:default:tall_grass_" .. tostring(i) }}} + layout = {{{ "zeus:vegetation:tall_grass_" .. tostring(i) }}} })) end table.insert(structures, zepha.create_structure({ origin = V(), probability = 0.55, - layout = {{{ "zeus:flowers:clover" }}} -})) -table.insert(structures, zepha.create_structure({ - origin = V(), - probability = 0.0125, - layout = {{{ "zeus:flowers:flower_geranium" }}} + layout = {{{ "zeus:vegetation:clover" }}} })) table.insert(structures, zepha.create_structure({ origin = V(), - probability = 0.0125, - layout = {{{ "zeus:flowers:flower_white_dandelion" }}} + probability = 0.05, + layout = {{{ "zeus:vegetation:dandelion_white" }}} })) local noise = { - heightmap = { - module = "add", - sources = { - require('./world_noise'), - { - module = "max", - smoothness = 50, - scalar = 0, - source = { - module = "add", - scalar = -50, - source = { - module = "multiply", - scalar = 400, - source = { - module = "simplex", - frequency = 0.00025, - lacunarity = 2.5, - octaves = 8, - persistence = 0.55 - } - } - } - } - } - } +-- heightmap = { +-- module = "add", +-- sources = { +-- require('./world_noise'), +-- { +-- module = "max", +-- smoothness = 50, +-- scalar = 0, +-- source = { +-- module = "add", +-- scalar = -50, +-- source = { +-- module = "multiply", +-- scalar = 400, +-- source = { +-- module = "simplex", +-- frequency = 0.00025, +-- lacunarity = 2.5, +-- octaves = 8, +-- persistence = 0.55 +-- } +-- } +-- } +-- } +-- } +-- } + volume = require './world_noise' -- volume = { -- module = "scale", -- y_scale = 2, @@ -195,9 +197,9 @@ local noise = { zepha.register_biome(identifier, { environment = { - temperature = 15/100, + temperature = 20/100, humidity = 60/100, - roughness = 20/100, + roughness = 40/100, }, blocks = { top = "zeus:default:grass", @@ -208,6 +210,9 @@ zepha.register_biome(identifier, { structures = structures, biome_tint = "#46cfc0", -- biome_tint = "#aaed45", +-- biome_tint = "#80d12e", +-- biome_tint = "#54beff", +-- biome_tint = "#1f83db", noise = noise }) diff --git a/subgames/zeus/mods/zeus_world/script/biomes/world_noise.lua b/subgames/zeus/mods/zeus_world/script/biomes/world_noise.lua index 51d370a6..1b205a97 100644 --- a/subgames/zeus/mods/zeus_world/script/biomes/world_noise.lua +++ b/subgames/zeus/mods/zeus_world/script/biomes/world_noise.lua @@ -1,11 +1,34 @@ return { module = "multiply", - scalar = 100, + scalar = 2500, source = { - module = "simplex", - frequency = 0.0002, - octaves = 5, - lacunarity = 3, - persistence = 0.45 + module = "add", + sources = {{ + module = "multiply", + sources = {{ + module = "simplex", + octaves = 4, + lacunarity = 2.65, + frequency = 0.0025 + }, { + module = "add", + scalar = 0.75, + source = { + module = "multiply", + scalar = 0.75, + source = { + module = "simplex", + frequency = 0.001 + } + } + }} + }, { + module = "multiply", + scalar = 0.0075, + source = { + module = "position_output", + y_factor = -1 + } + }} } }; \ No newline at end of file