From cd28ae2300bdd206f878fb1add81b20de4bb758c Mon Sep 17 00:00:00 2001 From: Shad MOrdre Date: Sat, 31 Aug 2019 00:06:24 -0700 Subject: [PATCH] Add files via upload --- lib_materials_utils.lua | 201 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) diff --git a/lib_materials_utils.lua b/lib_materials_utils.lua index 29e11de..b75c066 100644 --- a/lib_materials_utils.lua +++ b/lib_materials_utils.lua @@ -138,6 +138,207 @@ local S = lib_materials.intllib +---------------------- +-- Decorative Rocks -- +---------------------- + +-- I'm feeling a bit zen... + +-- Create a simple sphereoid from nodeboxes. +-- This isn't as nifty as I originally thought. The large ones are +-- ugly and the small ones are nearly invisible. I may stick with cubes. +local function step_sphere(grid, pos, diameters, embed) + local step = {x=diameters.x * 0.2, y=diameters.y * 0.2, z=diameters.z * 0.2} + local rock = {} + + if embed then + embed = 1 + else + embed = 0 + end + + rock[1] = pos.x + step.x + rock[2] = pos.y + (step.y * embed) + rock[3] = pos.z + rock[4] = pos.x + diameters.x - step.x + rock[5] = diameters.y + pos.y - step.y - (step.y * embed) + rock[6] = pos.z + diameters.z + push(grid, rock) + + rock = {} + rock[1] = pos.x + rock[2] = pos.y + (step.y * embed) + rock[3] = pos.z + step.z + rock[4] = pos.x + step.x + rock[5] = diameters.y + pos.y - step.y - (step.y * embed) + rock[6] = pos.z + diameters.z - step.z + push(grid, rock) + + rock = {} + rock[1] = pos.x + diameters.x - step.x + rock[2] = pos.y + (step.y * embed) + rock[3] = pos.z + step.z + rock[4] = pos.x + diameters.x + rock[5] = diameters.y + pos.y - step.y - (step.y * embed) + rock[6] = pos.z + diameters.z - step.z + push(grid, rock) + + if not embed then + rock = {} + rock[1] = pos.x + step.x + rock[2] = pos.y + rock[3] = pos.z + step.z + rock[4] = pos.x + diameters.x - step.x + rock[5] = step.y + pos.y + rock[6] = pos.z + diameters.z - step.z + push(grid, rock) + end + + rock = {} + rock[1] = pos.x + step.x + rock[2] = diameters.y + pos.y - step.y - (step.y * embed) + rock[3] = pos.z + step.z + rock[4] = pos.x + diameters.x - step.x + rock[5] = diameters.y + pos.y - (step.y * embed) + rock[6] = pos.z + diameters.z - step.z + push(grid, rock) +end + +-- Place a small nodebox. +local function small_cube(grid, pos, diameters) + local rock = {} + + rock[1] = pos.x + rock[2] = pos.y + rock[3] = pos.z + rock[4] = pos.x + diameters.x + rock[5] = pos.y + diameters.y + rock[6] = pos.z + diameters.z + push(grid, rock) +end + + +-- Create some tiles of small rocks that can be picked up. +local default_grid +local tiles = {"lib_materials_stone_default.png", "lib_materials_stone_desert_default.png", "lib_materials_stone_sandstone_default.png", "lib_materials_stone_cobble_default.png"} + +for grid_count = 1,6 do + local grid = {} + for rock_count = 2, math.random(1,4) + 1 do + local diameter = math.random(5,15)/100 + local x = math.random(1,80)/100 - 0.5 + local z = math.random(1,80)/100 - 0.5 + --step_sphere(grid, {x=x,y=-0.5,z=z}, {x=diameter, y=diameter, z=diameter}) + small_cube(grid, {x=x,y=-0.5,z=z}, {x=diameter, y=diameter, z=diameter}) + end + + --local stone = tiles[math.random(1,#tiles)] + local stone = tiles[(grid_count % #tiles) + 1] + + minetest.register_node("lib_materials:litter_small_rocks"..grid_count, { + description = "Small Rocks", + tiles = {stone}, + is_ground_content = true, + walkable = false, + paramtype = "light", + drawtype = "nodebox", + buildable_to = true, + node_box = { type = "fixed", + fixed = grid }, + selection_box = { type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, + groups = {stone=1, oddly_breakable_by_hand=3}, + drop = "lib_materials:litter_small_rocks", + sounds = lib_materials.node_sound_stone_defaults(), + }) + + minetest.register_decoration({ + deco_type = "simple", + decoration = "lib_materials:litter_small_rocks"..grid_count, + sidelen = 80, + place_on = {"group:soil", "group:sand", "group:stone"}, + fill_ratio = 0.002, + --biomes = {"lib_ecology_sandstone_grassland", "lib_ecology_tundra", "lib_ecology_taiga", "lib_ecology_stone_grassland", "lib_ecology_coniferous_forest", "lib_ecology_deciduous_forest", "lib_ecology_desert", "lib_ecology_cold_desert", "lib_ecology_savanna", "lib_ecology_rainforest", "lib_ecology_desertstone_grassland", }, + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + default_grid = grid +end + +-- This is the inventory item, so we don't have six different stacks. +minetest.register_node("lib_materials:litter_small_rocks", { + description = "Small Rocks", + tiles = {"lib_materials_stone_default.png"}, + inventory_image = "lib_materials_litter_rocks.png", + is_ground_content = true, + walkable = false, + paramtype = "light", + drawtype = "nodebox", + node_box = { type = "fixed", + fixed = default_grid }, + selection_box = { type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + }, + groups = {stone=1, oddly_breakable_by_hand=3}, + sounds = lib_materials.node_sound_stone_defaults(), +}) + + +---- Create some larger rocks that can be mined. +--local tiles = {"default_stone.png", "default_desert_stone.png", "default_sandstone.png"} +--local sel = {{-0.4,-0.5,-0.4,0.4,0.0,0.3}, {-0.4,-0.5,-0.4,0.2,-0.1,0.3}, {-0.3,-0.5,-0.3,0.2,-0.2,0.3}} +-- +--for count = 1,9 do +-- local stone = tiles[(count % #tiles) + 1] +-- --local grid = {} +-- --step_sphere(grid, {x=-0.25,y=-0.5,z=-0.25}, {x=0.5, y=0.3, z=0.5}) +-- +-- minetest.register_node("lib_materials:medium_rock"..count, { +-- description = "Medium Rock", +-- tiles = {stone}, +-- is_ground_content = true, +-- walkable = true, +-- paramtype = "light", +-- --drawtype = "mesh", +-- drawtype = "nodebox", +-- --mesh = "rock0"..math.ceil(count / 3)..".b3d", +-- node_box = { +-- type = "fixed", +-- fixed = { +-- -0.25, -0.5, -0.25, 0.25, -0.25, 0.25, +-- }, +-- }, +-- selection_box = {type="fixed", fixed=sel[math.ceil(count / 3)]}, +-- groups = {stone=1, cracky=3}, +-- drop = "lib_materials:stone_cobble", +-- sounds = lib_materials.node_sound_stone_defaults(), +-- }) +-- +-- minetest.register_decoration({ +-- deco_type = "simple", +-- decoration = "lib_materials:medium_rock"..count, +-- sidelen = 80, +-- place_on = {"group:soil", "group:sand"}, +-- fill_ratio = 0.001, +-- biomes = {"sandstone_grassland", "tundra", "taiga", "stone_grassland", "coniferous_forest", "deciduous_forest", "desert", "cold_desert", "savanna", "rainforest", "desertstone_grassland", }, +-- flags = "place_center_x, place_center_z", +-- rotation = "random", +-- }) +--end + + +-- Small rocks can be used to create cobblestone, if you like. +minetest.register_craft({ + output = "lib_materials:stone_cobble", + recipe = { + {"", "", ""}, + {"lib_materials:litter_small_rocks", "lib_materials:litter_small_rocks", ""}, + {"lib_materials:litter_small_rocks", "lib_materials:litter_small_rocks", ""}, + }, +}) +