The GRASS discussion

User avatar
TumeniNodes
Member
 
Posts: 1335
Joined: Fri Feb 26, 2016 19:49
GitHub: TumeniNodes

The GRASS discussion

by TumeniNodes » Tue Jun 28, 2016 20:21

Following the grass discussion in the screenshots section, I would like to offer my opinions

I realize I am very new to the community but, here goes :D
Regarding grass: Could either add 2 new nodes (default grass & default dry grass) and make them full block grass textures. Then if the desire for grass_sides, still prevails..., make the dirt w grass node check to see if the node above is grass.
But if not a huge desire for "grass sides", change the dirt node to switch to default grass / default dry grass, if any sides are expose to air? (or make it random but, I fully agree that when using full grass textures, it looks bad to have a full dirt node under it... too sharp of a transition, when looking at the side of a mountain or large hill.

I am also wondering if there is any potential or interest in adding my second desert biome? So there would be desert, and red desert. This requires adding the same nodes for red desert as desert (red sand, red desert stone, and red desertstone brick) but I have also added even more nodes to each, meaning sand, stone, block, brick, column, as well as each having a special node such as sandstone block cracked, and then stone column cracked, and red sandstone brick cracked..., (yes I'm "node crazy") :P
I also completely removed the snow biome, as I have no use for it.

Regarding mossy cobble: What about having a mossy texture, and use it similar to the way ores are done?, so that any node which is touching water, changes to "<node>_mossy"? This covers all stone, wood,dirt-like nodes only... even tree bases, and roots if they are in the water

Anyway, just some ideas I have had using Minetest.

two deserts mapgen:
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
--
-- Aliases for map generator outputs
--

minetest.register_alias("mapgen_stone", "default:stone")
minetest.register_alias("mapgen_dirt", "default:dirt")
minetest.register_alias("mapgen_dirt_with_grass", "default:dirt_with_grass")
minetest.register_alias("mapgen_sand", "default:sand")
minetest.register_alias("mapgen_water_source", "default:water_source")
minetest.register_alias("mapgen_river_water_source", "default:river_water_source")
minetest.register_alias("mapgen_lava_source", "default:lava_source")
minetest.register_alias("mapgen_gravel", "default:gravel")
minetest.register_alias("mapgen_desert_stone", "default:desert_stone")
minetest.register_alias("mapgen_desert_sand", "default:desert_sand")
minetest.register_alias("mapgen_dirt_with_snow", "default:dirt_with_snow")
minetest.register_alias("mapgen_snowblock", "default:snowblock")
minetest.register_alias("mapgen_snow", "default:snow")
minetest.register_alias("mapgen_ice", "default:ice")
minetest.register_alias("mapgen_sandstone", "default:sandstone")

-- Flora

minetest.register_alias("mapgen_tree", "default:tree")
minetest.register_alias("mapgen_leaves", "default:leaves")
minetest.register_alias("mapgen_apple", "default:apple")
minetest.register_alias("mapgen_jungletree", "default:jungletree")
minetest.register_alias("mapgen_jungleleaves", "default:jungleleaves")
minetest.register_alias("mapgen_junglegrass", "default:junglegrass")
minetest.register_alias("mapgen_pine_tree", "default:pine_tree")
minetest.register_alias("mapgen_pine_needles", "default:pine_needles")

-- Dungeons

minetest.register_alias("mapgen_cobble", "default:cobble")
minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble")
minetest.register_alias("mapgen_mossycobble", "default:mossycobble")
minetest.register_alias("mapgen_sandstonebrick", "default:sandstonebrick")
minetest.register_alias("mapgen_stair_sandstonebrick", "stairs:stair_sandstonebrick")


--
-- Register ores
--

-- All mapgens except singlenode
-- Blob ore first to avoid other ores inside blobs

function default.register_ores()

   -- Clay

   minetest.register_ore({
      ore_type        = "blob",
      ore             = "default:clay",
      wherein         = {"default:sand"},
      clust_scarcity  = 16 * 16 * 16,
      clust_size      = 5,
      y_min           = -15,
      y_max           = 0,
      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
      },
   })

   -- Sand

   minetest.register_ore({
      ore_type        = "blob",
      ore             = "default:sand",
      wherein         = {"default:stone", "default:sandstone",
         "default:desert_stone"},
      clust_scarcity  = 16 * 16 * 16,
      clust_size      = 5,
      y_min           = -31,
      y_max           = 4,
      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
      },
   })

   -- Dirt

   minetest.register_ore({
      ore_type        = "blob",
      ore             = "default:dirt",
      wherein         = {"default:stone", "default:sandstone"},
      clust_scarcity  = 16 * 16 * 16,
      clust_size      = 5,
      y_min           = -31,
      y_max           = 31000,
      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
      },
   })

   -- Gravel

   minetest.register_ore({
      ore_type        = "blob",
      ore             = "default:gravel",
      wherein         = {"default:stone"},
      clust_scarcity  = 16 * 16 * 16,
      clust_size      = 5,
      y_min           = -31000,
      y_max           = 31000,
      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
      },
   })

   -- Coal

   minetest.register_ore({
      ore_type       = "scatter",
      ore            = "default:stone_with_coal",
      wherein        = "default:stone",
      clust_scarcity = 8 * 8 * 8,
      clust_num_ores = 8,
      clust_size     = 3,
      y_min          = -31000,
      y_max          = 64,
   })

   minetest.register_ore({
      ore_type       = "scatter",
      ore            = "default:stone_with_coal",
      wherein        = "default:stone",
      clust_scarcity = 24 * 24 * 24,
      clust_num_ores = 27,
      clust_size     = 6,
      y_min          = -31000,
      y_max          = 0,
   })

   -- Iron

   minetest.register_ore({
      ore_type       = "scatter",
      ore            = "default:stone_with_iron",
      wherein        = "default:stone",
      clust_scarcity = 12 * 12 * 12,
      clust_num_ores = 3,
      clust_size     = 2,
      y_min          = -15,
      y_max          = 2,
   })

   minetest.register_ore({
      ore_type       = "scatter",
      ore            = "default:stone_with_iron",
      wherein        = "default:stone",
      clust_scarcity = 9 * 9 * 9,
      clust_num_ores = 5,
      clust_size     = 3,
      y_min          = -63,
      y_max          = -16,
   })

   minetest.register_ore({
      ore_type       = "scatter",
      ore            = "default:stone_with_iron",
      wherein        = "default:stone",
      clust_scarcity = 7 * 7 * 7,
      clust_num_ores = 5,
      clust_size     = 3,
      y_min          = -31000,
      y_max          = -64,
   })

   minetest.register_ore({
      ore_type       = "scatter",
      ore            = "default:stone_with_iron",
      wherein        = "default:stone",
      clust_scarcity = 24 * 24 * 24,
      clust_num_ores = 27,
      clust_size     = 6,
      y_min          = -31000,
      y_max          = -64,
   })

   --Mese

   minetest.register_ore({
      ore_type       = "scatter",
      ore            = "default:stone_with_mese",
      wherein        = "default:stone",
      clust_scarcity = 18 * 18 * 18,
      clust_num_ores = 3,
      clust_size     = 2,
      y_min          = -255,
      y_max          = -64,
   })

   minetest.register_ore({
      ore_type       = "scatter",
      ore            = "default:stone_with_mese",
      wherein        = "default:stone",
      clust_scarcity = 14 * 14 * 14,
      clust_num_ores = 5,
      clust_size     = 3,
      y_min          = -31000,
      y_max          = -256,
   })

   minetest.register_ore({
      ore_type       = "scatter",
      ore            = "default:mese",
      wherein        = "default:stone",
      clust_scarcity = 36 * 36 * 36,
      clust_num_ores = 3,
      clust_size     = 2,
      y_min          = -31000,
      y_max          = -1024,
   })

   -- Gold

   minetest.register_ore({
      ore_type       = "scatter",
      ore            = "default:stone_with_gold",
      wherein        = "default:stone",
      clust_scarcity = 15 * 15 * 15,
      clust_num_ores = 3,
      clust_size     = 2,
      y_min          = -255,
      y_max          = -64,
   })

   minetest.register_ore({
      ore_type       = "scatter",
      ore            = "default:stone_with_gold",
      wherein        = "default:stone",
      clust_scarcity = 13 * 13 * 13,
      clust_num_ores = 5,
      clust_size     = 3,
      y_min          = -31000,
      y_max          = -256,
   })

   -- Diamond

   minetest.register_ore({
      ore_type       = "scatter",
      ore            = "default:stone_with_diamond",
      wherein        = "default:stone",
      clust_scarcity = 17 * 17 * 17,
      clust_num_ores = 4,
      clust_size     = 3,
      y_min          = -255,
      y_max          = -128,
   })

   minetest.register_ore({
      ore_type       = "scatter",
      ore            = "default:stone_with_diamond",
      wherein        = "default:stone",
      clust_scarcity = 15 * 15 * 15,
      clust_num_ores = 4,
      clust_size     = 3,
      y_min          = -31000,
      y_max          = -256,
   })

   -- Copper

   minetest.register_ore({
      ore_type       = "scatter",
      ore            = "default:stone_with_copper",
      wherein        = "default:stone",
      clust_scarcity = 12 * 12 * 12,
      clust_num_ores = 4,
      clust_size     = 3,
      y_min          = -63,
      y_max          = -16,
   })

   minetest.register_ore({
      ore_type       = "scatter",
      ore            = "default:stone_with_copper",
      wherein        = "default:stone",
      clust_scarcity = 9 * 9 * 9,
      clust_num_ores = 5,
      clust_size     = 3,
      y_min          = -31000,
      y_max          = -64,
   })
end


--
-- Register biomes
--

-- All mapgens except mgv6 and singlenode

function default.register_biomes()
   minetest.clear_registered_biomes()

   -- Permanent ice

   minetest.register_biome({
      name = "glacier",
      node_dust = "default:snowblock",
      node_top = "default:snowblock",
      depth_top = 1,
      node_filler = "default:snowblock",
      depth_filler = 3,
      node_stone = "default:ice",
      node_water_top = "default:ice",
      depth_water_top = 10,
      --node_water = "",
      node_river_water = "default:ice",
      y_min = -8,
      y_max = 31000,
      heat_point = 0,
      humidity_point = 50,
   })

   minetest.register_biome({
      name = "glacier_ocean",
      node_dust = "default:snowblock",
      node_top = "default:sand",
      depth_top = 1,
      node_filler = "default:sand",
      depth_filler = 3,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = -112,
      y_max = -9,
      heat_point = 0,
      humidity_point = 50,
   })

   -- Cold

   minetest.register_biome({
      name = "tundra",
      --node_dust = "",
      node_top = "default:dirt_with_snow",
      depth_top = 1,
      node_filler = "default:dirt",
      depth_filler = 1,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = 2,
      y_max = 31000,
      heat_point = 15,
      humidity_point = 35,
   })

   minetest.register_biome({
      name = "tundra_beach",
      --node_dust = "",
      node_top = "default:gravel",
      depth_top = 1,
      node_filler = "default:gravel",
      depth_filler = 2,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = -3,
      y_max = 1,
      heat_point = 15,
      humidity_point = 35,
   })

   minetest.register_biome({
      name = "tundra_ocean",
      --node_dust = "",
      node_top = "default:sand",
      depth_top = 1,
      node_filler = "default:sand",
      depth_filler = 3,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = -112,
      y_max = -4,
      heat_point = 15,
      humidity_point = 35,
   })


   minetest.register_biome({
      name = "taiga",
      node_dust = "default:snow",
      node_top = "default:dirt_with_snow",
      depth_top = 1,
      node_filler = "default:dirt",
      depth_filler = 3,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = 2,
      y_max = 31000,
      heat_point = 15,
      humidity_point = 65,
   })

   minetest.register_biome({
      name = "taiga_ocean",
      --node_dust = "",
      node_top = "default:sand",
      depth_top = 1,
      node_filler = "default:sand",
      depth_filler = 3,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = -112,
      y_max = 1,
      heat_point = 15,
      humidity_point = 65,
   })

   -- Temperate

   minetest.register_biome({
      name = "stone_grassland",
      --node_dust = "",
      node_top = "default:dirt_with_grass",
      depth_top = 1,
      node_filler = "default:dirt",
      depth_filler = 1,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = 6,
      y_max = 31000,
      heat_point = 40,
      humidity_point = 35,
   })

   minetest.register_biome({
      name = "stone_grassland_dunes",
      --node_dust = "",
      node_top = "default:sand",
      depth_top = 1,
      node_filler = "default:sand",
      depth_filler = 2,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = 5,
      y_max = 5,
      heat_point = 40,
      humidity_point = 35,
   })

   minetest.register_biome({
      name = "stone_grassland_ocean",
      --node_dust = "",
      node_top = "default:sand",
      depth_top = 1,
      node_filler = "default:sand",
      depth_filler = 3,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = -112,
      y_max = 4,
      heat_point = 40,
      humidity_point = 35,
   })


   minetest.register_biome({
      name = "coniferous_forest",
      --node_dust = "",
      node_top = "default:dirt_with_grass",
      depth_top = 1,
      node_filler = "default:dirt",
      depth_filler = 3,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = 6,
      y_max = 31000,
      heat_point = 40,
      humidity_point = 65,
   })

   minetest.register_biome({
      name = "coniferous_forest_dunes",
      --node_dust = "",
      node_top = "default:sand",
      depth_top = 1,
      node_filler = "default:sand",
      depth_filler = 3,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = 5,
      y_max = 5,
      heat_point = 40,
      humidity_point = 65,
   })

   minetest.register_biome({
      name = "coniferous_forest_ocean",
      --node_dust = "",
      node_top = "default:sand",
      depth_top = 1,
      node_filler = "default:sand",
      depth_filler = 3,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = -112,
      y_max = 4,
      heat_point = 40,
      humidity_point = 65,
   })


   minetest.register_biome({
      name = "sandstone_grassland",
      --node_dust = "",
      node_top = "default:dirt_with_grass",
      depth_top = 1,
      node_filler = "default:dirt",
      depth_filler = 1,
      node_stone = "default:sandstone",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = 6,
      y_max = 31000,
      heat_point = 60,
      humidity_point = 35,
   })

   minetest.register_biome({
      name = "sandstone_grassland_dunes",
      --node_dust = "",
      node_top = "default:sand",
      depth_top = 1,
      node_filler = "default:sand",
      depth_filler = 2,
      node_stone = "default:sandstone",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = 5,
      y_max = 5,
      heat_point = 60,
      humidity_point = 35,
   })

   minetest.register_biome({
      name = "sandstone_grassland_ocean",
      --node_dust = "",
      node_top = "default:sand",
      depth_top = 1,
      node_filler = "default:sand",
      depth_filler = 3,
      node_stone = "default:sandstone",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = -112,
      y_max = 4,
      heat_point = 60,
      humidity_point = 35,
   })


   minetest.register_biome({
      name = "deciduous_forest",
      --node_dust = "",
      node_top = "default:dirt_with_grass",
      depth_top = 1,
      node_filler = "default:dirt",
      depth_filler = 3,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = 1,
      y_max = 31000,
      heat_point = 60,
      humidity_point = 65,
   })

   minetest.register_biome({
      name = "deciduous_forest_swamp",
      --node_dust = "",
      node_top = "default:dirt",
      depth_top = 1,
      node_filler = "default:dirt",
      depth_filler = 3,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = -3,
      y_max = 0,
      heat_point = 60,
      humidity_point = 65,
   })

   minetest.register_biome({
      name = "deciduous_forest_ocean",
      --node_dust = "",
      node_top = "default:sand",
      depth_top = 1,
      node_filler = "default:sand",
      depth_filler = 3,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = -112,
      y_max = -4,
      heat_point = 60,
      humidity_point = 65,
   })

   -- Hot

   minetest.register_biome({
      name = "desert",
      --node_dust = "",
      node_top = "default:desert_sand",
      depth_top = 1,
      node_filler = "default:desert_sand",
      depth_filler = 1,
      node_stone = "default:desert_stone",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = 5,
      y_max = 31000,
      heat_point = 85,
      humidity_point = 25,
   })

   minetest.register_biome({
      name = "desert_ocean",
      --node_dust = "",
      node_top = "default:sand",
      depth_top = 1,
      node_filler = "default:sand",
      depth_filler = 3,
      node_stone = "default:desert_stone",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = -112,
      y_max = 4,
      heat_point = 85,
      humidity_point = 25,
   })

   minetest.register_biome({
      name = "red_desert",
      --node_dust = "",
      node_top = "default:red_desert_sand",
      depth_top = 1,
      node_filler = "default:red_desert_sand",
      depth_filler = 1,
      node_stone = "default:red_desert_stone",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = 5,
      y_max = 31000,
      heat_point = 95,
      humidity_point = 20,
   })

   minetest.register_biome({
      name = "red_desert_ocean",
      --node_dust = "",
      node_top = "default:sand",
      depth_top = 1,
      node_filler = "default:sand",
      depth_filler = 3,
      node_stone = "default:red_desert_stone",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = -112,
      y_max = 4,
      heat_point = 95,
      humidity_point = 20,
   })

   minetest.register_biome({
      name = "savanna",
      --node_dust = "",
      node_top = "default:dirt_with_dry_grass",
      depth_top = 1,
      node_filler = "default:dirt",
      depth_filler = 1,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = 1,
      y_max = 31000,
      heat_point = 85,
      humidity_point = 50,
   })

   minetest.register_biome({
      name = "savanna_swamp",
      --node_dust = "",
      node_top = "default:dirt",
      depth_top = 1,
      node_filler = "default:dirt",
      depth_filler = 3,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = -3,
      y_max = 0,
      heat_point = 85,
      humidity_point = 50,
   })

   minetest.register_biome({
      name = "savanna_ocean",
      --node_dust = "",
      node_top = "default:sand",
      depth_top = 1,
      node_filler = "default:sand",
      depth_filler = 3,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = -112,
      y_max = -4,
      heat_point = 85,
      humidity_point = 50,
   })


   minetest.register_biome({
      name = "rainforest",
      --node_dust = "",
      node_top = "default:dirt_with_grass",
      depth_top = 1,
      node_filler = "default:dirt",
      depth_filler = 3,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = 1,
      y_max = 31000,
      heat_point = 85,
      humidity_point = 80,
   })

   minetest.register_biome({
      name = "rainforest_swamp",
      --node_dust = "",
      node_top = "default:dirt",
      depth_top = 1,
      node_filler = "default:dirt",
      depth_filler = 3,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = -3,
      y_max = 0,
      heat_point = 85,
      humidity_point = 80,
   })

   minetest.register_biome({
      name = "rainforest_ocean",
      --node_dust = "",
      node_top = "default:sand",
      depth_top = 1,
      node_filler = "default:sand",
      depth_filler = 3,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = -112,
      y_max = -4,
      heat_point = 85,
      humidity_point = 80,
   })

   -- Underground

   minetest.register_biome({
      name = "underground",
      --node_dust = "",
      --node_top = "",
      --depth_top = ,
      --node_filler = "",
      --depth_filler = ,
      --node_stone = "",
      --node_water_top = "",
      --depth_water_top = ,
      --node_water = "",
      --node_river_water = "",
      y_min = -31000,
      y_max = -113,
      heat_point = 50,
      humidity_point = 50,
   })
end


--
-- Register decorations
--

-- Mgv6

function default.register_mgv6_decorations()
   minetest.clear_registered_decorations()

   -- Papyrus

   minetest.register_decoration({
      deco_type = "simple",
      place_on = {"default:dirt_with_grass"},
      sidelen = 16,
      noise_params = {
         offset = -0.3,
         scale = 0.7,
         spread = {x = 100, y = 100, z = 100},
         seed = 354,
         octaves = 3,
         persist = 0.7
      },
      y_min = 1,
      y_max = 1,
      decoration = "default:papyrus",
      height = 2,
      height_max = 4,
      spawn_by = "default:water_source",
      num_spawn_by = 1,
   })

   -- Cacti

   minetest.register_decoration({
      deco_type = "simple",
      place_on = {"default:desert_sand"},
      sidelen = 16,
      noise_params = {
         offset = -0.012,
         scale = 0.024,
         spread = {x = 100, y = 100, z = 100},
         seed = 230,
         octaves = 3,
         persist = 0.6
      },
      y_min = 1,
      y_max = 30,
      decoration = "default:cactus",
      height = 3,
           height_max = 4,
   })

   -- Long grasses

   for length = 1, 5 do
      minetest.register_decoration({
         deco_type = "simple",
         place_on = {"default:dirt_with_grass"},
         sidelen = 16,
         noise_params = {
            offset = 0,
            scale = 0.007,
            spread = {x = 100, y = 100, z = 100},
            seed = 329,
            octaves = 3,
            persist = 0.6
         },
         y_min = 1,
         y_max = 30,
         decoration = "default:grass_"..length,
      })
   end

   -- Dry shrubs

   minetest.register_decoration({
      deco_type = "simple",
      place_on = {"default:desert_sand", "default:dirt_with_snow"},
      sidelen = 16,
      noise_params = {
         offset = 0,
         scale = 0.035,
         spread = {x = 100, y = 100, z = 100},
         seed = 329,
         octaves = 3,
         persist = 0.6
      },
      y_min = 1,
      y_max = 30,
      decoration = "default:dry_shrub",
   })
end

-- All mapgens except mgv6 and singlenode

local function register_grass_decoration(offset, scale, length)
   minetest.register_decoration({
      deco_type = "simple",
      place_on = {"default:dirt_with_grass", "default:sand"},
      sidelen = 16,
      noise_params = {
         offset = offset,
         scale = scale,
         spread = {x = 200, y = 200, z = 200},
         seed = 329,
         octaves = 3,
         persist = 0.6
      },
      biomes = {"stone_grassland", "sandstone_grassland",
         "deciduous_forest", "coniferous_forest",
         "stone_grassland_dunes", "sandstone_grassland_dunes",
         "coniferous_forest_dunes"},
      y_min = 1,
      y_max = 31000,
      decoration = "default:grass_"..length,
   })
end

local function register_dry_grass_decoration(offset, scale, length)
   minetest.register_decoration({
      deco_type = "simple",
      place_on = {"default: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 = {"savanna"},
      y_min = 1,
      y_max = 31000,
      decoration = "default:dry_grass_"..length,
   })
end

function default.register_decorations()
   minetest.clear_registered_decorations()

   -- Apple tree and log

   minetest.register_decoration({
      deco_type = "schematic",
      place_on = {"default:dirt_with_grass"},
      sidelen = 16,
      noise_params = {
         offset = 0.036,
         scale = 0.022,
         spread = {x = 250, y = 250, z = 250},
         seed = 2,
         octaves = 3,
         persist = 0.66
      },
      biomes = {"deciduous_forest"},
      y_min = 1,
      y_max = 31000,
      schematic = minetest.get_modpath("default").."/schematics/apple_tree.mts",
      flags = "place_center_x, place_center_z",
   })

   minetest.register_decoration({
      deco_type = "schematic",
      place_on = {"default:dirt_with_grass"},
      sidelen = 16,
      noise_params = {
         offset = 0.0018,
         scale = 0.0011,
         spread = {x = 250, y = 250, z = 250},
         seed = 2,
         octaves = 3,
         persist = 0.66
      },
      biomes = {"deciduous_forest"},
      y_min = 1,
      y_max = 31000,
      schematic = {
         size = {x = 3, y = 3, z = 1},
         data = {
            {name = "air", prob = 0},
            {name = "air", prob = 0},
            {name = "air", prob = 0},
            {name = "default:tree", param2 = 12, prob = 191},
            {name = "default:tree", param2 = 12},
            {name = "default:tree", param2 = 12, prob = 127},
            {name = "air", prob = 0},
            {name = "flowers:mushroom_brown", prob = 63},
            {name = "air", prob = 0},
         },
      },
      flags = "place_center_x",
      rotation = "random",
   })

   -- Jungle tree and log

   minetest.register_decoration({
      deco_type = "schematic",
      place_on = {"default:dirt_with_grass", "default:dirt"},
      sidelen = 80,
      fill_ratio = 0.1,
      biomes = {"rainforest", "rainforest_swamp"},
      y_min = 0,
      y_max = 31000,
      schematic = minetest.get_modpath("default").."/schematics/jungle_tree.mts",
      flags = "place_center_x, place_center_z",
      rotation = "random",
   })

   minetest.register_decoration({
      deco_type = "schematic",
      place_on = {"default:dirt_with_grass", "default:dirt"},
      sidelen = 80,
      fill_ratio = 0.005,
      biomes = {"rainforest", "rainforest_swamp"},
      y_min = 1,
      y_max = 31000,
      schematic = {
         size = {x = 3, y = 3, z = 1},
         data = {
            {name = "air", prob = 0},
            {name = "air", prob = 0},
            {name = "air", prob = 0},
            {name = "default:jungletree", param2 = 12, prob = 191},
            {name = "default:jungletree", param2 = 12},
            {name = "default:jungletree", param2 = 12, prob = 127},
            {name = "air", prob = 0},
            {name = "flowers:mushroom_brown", prob = 127},
            {name = "air", prob = 0},
         },
      },
      flags = "place_center_x",
      rotation = "random",
   })

   -- Taiga and temperate coniferous forest pine tree and log

   minetest.register_decoration({
      deco_type = "schematic",
      place_on = {"default:dirt_with_snow", "default:dirt_with_grass"},
      sidelen = 16,
      noise_params = {
         offset = 0.036,
         scale = 0.022,
         spread = {x = 250, y = 250, z = 250},
         seed = 2,
         octaves = 3,
         persist = 0.66
      },
      biomes = {"taiga", "coniferous_forest"},
      y_min = 2,
      y_max = 31000,
      schematic = minetest.get_modpath("default").."/schematics/pine_tree.mts",
      flags = "place_center_x, place_center_z",
   })

   minetest.register_decoration({
      deco_type = "schematic",
      place_on = {"default:dirt_with_snow", "default:dirt_with_grass"},
      sidelen = 80,
      noise_params = {
         offset = 0.0018,
         scale = 0.0011,
         spread = {x = 250, y = 250, z = 250},
         seed = 2,
         octaves = 3,
         persist = 0.66
      },
      biomes = {"taiga", "coniferous_forest"},
      y_min = 1,
      y_max = 31000,
      schematic = {
         size = {x = 3, y = 3, z = 1},
         data = {
            {name = "air", prob = 0},
            {name = "air", prob = 0},
            {name = "air", prob = 0},
            {name = "default:pine_tree", param2 = 12, prob = 191},
            {name = "default:pine_tree", param2 = 12},
            {name = "default:pine_tree", param2 = 12, prob = 127},
            {name = "air", prob = 0},
            {name = "flowers:mushroom_red", prob = 63},
            {name = "air", prob = 0},
         },
      },
      flags = "place_center_x",
      rotation = "random",
   })

   -- Acacia tree and log

   minetest.register_decoration({
      deco_type = "schematic",
      place_on = {"default:dirt_with_dry_grass"},
      sidelen = 16,
      noise_params = {
         offset = 0,
         scale = 0.002,
         spread = {x = 250, y = 250, z = 250},
         seed = 2,
         octaves = 3,
         persist = 0.66
      },
      biomes = {"savanna"},
      y_min = 1,
      y_max = 31000,
      schematic = minetest.get_modpath("default").."/schematics/acacia_tree.mts",
      flags = "place_center_x, place_center_z",
      rotation = "random",
   })

   minetest.register_decoration({
      deco_type = "schematic",
      place_on = {"default:dirt_with_dry_grass"},
      sidelen = 16,
      noise_params = {
         offset = 0,
         scale = 0.001,
         spread = {x = 250, y = 250, z = 250},
         seed = 2,
         octaves = 3,
         persist = 0.66
      },
      biomes = {"savanna"},
      y_min = 1,
      y_max = 31000,
      schematic = {
         size = {x = 3, y = 2, z = 1},
         data = {
            {name = "air", prob = 0},
            {name = "air", prob = 0},
            {name = "air", prob = 0},
            {name = "default:acacia_tree", param2 = 12, prob = 191},
            {name = "default:acacia_tree", param2 = 12},
            {name = "default:acacia_tree", param2 = 12, prob = 127},
         },
      },
      flags = "place_center_x",
      rotation = "random",
   })

   -- Aspen tree and log

   minetest.register_decoration({
      deco_type = "schematic",
      place_on = {"default:dirt_with_grass"},
      sidelen = 16,
      noise_params = {
         offset = 0.0,
         scale = -0.015,
         spread = {x = 250, y = 250, z = 250},
         seed = 2,
         octaves = 3,
         persist = 0.66
      },
      biomes = {"deciduous_forest"},
      y_min = 1,
      y_max = 31000,
      schematic = minetest.get_modpath("default").."/schematics/aspen_tree.mts",
      flags = "place_center_x, place_center_z",
   })

   minetest.register_decoration({
      deco_type = "schematic",
      place_on = {"default:dirt_with_grass"},
      sidelen = 16,
      noise_params = {
         offset = 0.0,
         scale = -0.0008,
         spread = {x = 250, y = 250, z = 250},
         seed = 2,
         octaves = 3,
         persist = 0.66
      },
      biomes = {"deciduous_forest"},
      y_min = 1,
      y_max = 31000,
      schematic = {
         size = {x = 3, y = 3, z = 1},
         data = {
            {name = "air", prob = 0},
            {name = "air", prob = 0},
            {name = "air", prob = 0},
            {name = "default:aspen_tree", param2 = 12},
            {name = "default:aspen_tree", param2 = 12},
            {name = "default:aspen_tree", param2 = 12, prob = 127},
            {name = "flowers:mushroom_red", prob = 63},
            {name = "flowers:mushroom_brown", prob = 63},
            {name = "air", prob = 0},
         },
      },
      flags = "place_center_x",
      rotation = "random",
   })
   -- Large cactus

   minetest.register_decoration({
      deco_type = "schematic",
      place_on = {"default:desert_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 = {"desert"},
      y_min = 5,
      y_max = 31000,
      schematic = minetest.get_modpath("default").."/schematics/large_cactus.mts",
      flags = "place_center_x",
      rotation = "random",
   })

   -- Cactus

   minetest.register_decoration({
      deco_type = "simple",
      place_on = {"default:desert_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 = {"desert"},
      y_min = 5,
      y_max = 31000,
      decoration = "default:cactus",
      height = 2,
      height_max = 5,
   })

   -- Papyrus

   minetest.register_decoration({
      deco_type = "schematic",
      place_on = {"default:dirt"},
      sidelen = 16,
      noise_params = {
         offset = -0.3,
         scale = 0.7,
         spread = {x = 200, y = 200, z = 200},
         seed = 354,
         octaves = 3,
         persist = 0.7
      },
      biomes = {"savanna_swamp"},
      y_min = 0,
      y_max = 0,
      schematic = minetest.get_modpath("default").."/schematics/papyrus.mts",
   })

   -- Grasses

   register_grass_decoration(-0.03,  0.09,  5)
   register_grass_decoration(-0.015, 0.075, 4)
   register_grass_decoration(0,      0.06,  3)
   register_grass_decoration(0.015,  0.045, 2)
   register_grass_decoration(0.03,   0.03,  1)

   -- Dry grasses

   register_dry_grass_decoration(0.01, 0.05,  5)
   register_dry_grass_decoration(0.03, 0.03,  4)
   register_dry_grass_decoration(0.05, 0.01,  3)
   register_dry_grass_decoration(0.07, -0.01, 2)
   register_dry_grass_decoration(0.09, -0.03, 1)

   -- Junglegrass

   minetest.register_decoration({
      deco_type = "simple",
      place_on = {"default:dirt_with_grass"},
      sidelen = 80,
      fill_ratio = 0.1,
      biomes = {"rainforest"},
      y_min = 1,
      y_max = 31000,
      decoration = "default:junglegrass",
   })

   -- Dry shrub

   minetest.register_decoration({
      deco_type = "simple",
      place_on = {"default:desert_sand", "default:dirt_with_snow"},
      sidelen = 16,
      noise_params = {
         offset = 0,
         scale = 0.02,
         spread = {x = 200, y = 200, z = 200},
         seed = 329,
         octaves = 3,
         persist = 0.6
      },
      biomes = {"desert", "tundra"},
      y_min = 2,
      y_max = 31000,
      decoration = "default:dry_shrub",
   })
end


--
-- Generate nyan cats
--

-- All mapgens except singlenode

function default.make_nyancat(pos, facedir, length)
   local tailvec = {x = 0, y = 0, z = 0}
   if facedir == 0 then
      tailvec.z = 1
   elseif facedir == 1 then
      tailvec.x = 1
   elseif facedir == 2 then
      tailvec.z = -1
   elseif facedir == 3 then
      tailvec.x = -1
   else
      facedir = 0
      tailvec.z = 1
   end
   local p = {x = pos.x, y = pos.y, z = pos.z}
   minetest.set_node(p, {name = "default:nyancat", param2 = facedir})
   for i = 1, length do
      p.x = p.x + tailvec.x
      p.z = p.z + tailvec.z
      minetest.set_node(p, {name = "default:nyancat_rainbow", param2 = facedir})
   end
end

function default.generate_nyancats(minp, maxp, seed)
   local height_min = -31000
   local height_max = -32
   if maxp.y < height_min or minp.y > height_max then
      return
   end
   local y_min = math.max(minp.y, height_min)
   local y_max = math.min(maxp.y, height_max)
   local volume = (maxp.x - minp.x + 1) * (y_max - y_min + 1) * (maxp.z - minp.z + 1)
   local pr = PseudoRandom(seed + 9324342)
   local max_num_nyancats = math.floor(volume / (16 * 16 * 16))
   for i = 1, max_num_nyancats do
      if pr:next(0, 1000) == 0 then
         local x0 = pr:next(minp.x, maxp.x)
         local y0 = pr:next(minp.y, maxp.y)
         local z0 = pr:next(minp.z, maxp.z)
         local p0 = {x = x0, y = y0, z = z0}
         default.make_nyancat(p0, pr:next(0, 3), pr:next(3, 15))
      end
   end
end


--
-- Detect mapgen to select functions
--

-- Mods using singlenode mapgen can call these functions to enable
-- the use of minetest.generate_ores or minetest.generate_decorations

local mg_params = minetest.get_mapgen_params()
if mg_params.mgname == "v6" then
   default.register_ores()
   default.register_mgv6_decorations()
   minetest.register_on_generated(default.generate_nyancats)
elseif mg_params.mgname ~= "singlenode" then
   default.register_biomes()
   default.register_ores()
   default.register_decorations()
   minetest.register_on_generated(default.generate_nyancats)
end
Last edited by TumeniNodes on Thu Jun 30, 2016 04:36, edited 4 times in total.
Flick?... Flick who?
 

User avatar
azekill_DIABLO
Member
 
Posts: 3458
Joined: Wed Oct 29, 2014 20:05
GitHub: azekillDIABLO
In-game: azekill_DIABLO

Re: The GRASS discussion

by azekill_DIABLO » Wed Jun 29, 2016 10:32

great ideas!
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
Hi, my username is azekill_DIABLO and i'm an exelent bug-maker(yeah...i know...i have a bad reputation)

azekill_DIABLO said: Mineyoshi+ABJ+Baggins= TOPIC HIJACKED.
My Mods and Stuff | Voxellar | VoxBox on GITHUB | M.I.L.A Monster engine
WEIRD MODDING CONTEST !!!
 

User avatar
TumeniNodes
Member
 
Posts: 1335
Joined: Fri Feb 26, 2016 19:49
GitHub: TumeniNodes

Re: The GRASS discussion

by TumeniNodes » Wed Jun 29, 2016 12:12

azekill_DIABLO wrote:great ideas!

Thanks
Flick?... Flick who?
 

User avatar
TumeniNodes
Member
 
Posts: 1335
Joined: Fri Feb 26, 2016 19:49
GitHub: TumeniNodes

Re: The GRASS discussion

by TumeniNodes » Thu Jun 30, 2016 01:38

nodes.lua with red desert nodes:

Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
-- mods/default/nodes.lua


--[[ Node name convention:

Although many node names are in combined-word form, the required form for new
node names is words separated by underscores. If both forms are used in written
language (for example pinewood and pine wood) the underscore form should be used.

--]]


--[[ Index:

Stone
-----
(1. Material 2. Cobble variant 3. Brick variant 4. Modified forms)

default:stone
default:cobble
default:stonebrick
default:mossycobble

default:desert_stone
default:desert_cobble
default:desert_stonebrick

default:res_desert_stone
default:red_desert_stonebrick

default:sandstone
default:sandstonebrick

default:obsidian
default:obsidianbrick

Soft / Non-Stone
----------------
(1. Material 2. Modified forms)

default:dirt
default:dirt_with_grass
default:dirt_with_grass_footsteps
default:dirt_with_dry_grass
default:dirt_with_snow

default:sand
default:desert_sand
default:red_desert_sand

default:gravel

default:clay

default:snow
default:snowblock

default:ice

Trees
-----
(1. Trunk 2. Fabricated trunk 3. Leaves 4. Sapling 5. Fruits)

default:tree
default:wood
default:leaves
default:sapling
default:apple

default:jungletree
default:junglewood
default:jungleleaves
default:junglesapling

default:pine_tree
default:pine_wood
default:pine_needles
default:pine_sapling

default:acacia_tree
default:acacia_wood
default:acacia_leaves
default:acacia_sapling

default:aspen_tree
default:aspen_wood
default:aspen_leaves
default:aspen_sapling

Ores
----
(1. In stone 2. Blocks)

default:stone_with_coal
default:coalblock

default:stone_with_iron
default:steelblock

default:stone_with_copper
default:copperblock
default:bronzeblock

default:stone_with_gold
default:goldblock

default:stone_with_mese
default:mese

default:stone_with_diamond
default:diamondblock

Plantlife (non-cubic)
---------------------

default:cactus
default:papyrus
default:dry_shrub
default:junglegrass

default:grass_1
default:grass_2
default:grass_3
default:grass_4
default:grass_5

default:dry_grass_1
default:dry_grass_2
default:dry_grass_3
default:dry_grass_4
default:dry_grass_5

Liquids
-------
(1. Source 2. Flowing)

default:water_source
default:water_flowing

default:river_water_source
default:river_water_flowing

default:lava_source
default:lava_flowing

Tools / "Advanced" crafting / Non-"natural"
-------------------------------------------

default:torch

default:chest
default:chest_locked

default:bookshelf

default:sign_wall_wood
default:sign_wall_steel

default:ladder_wood
default:ladder_steel

default:fence_wood
default:fence_acacia_wood
default:fence_junglewood
default:fence_pine_wood
default:fence_aspen_wood

default:glass
default:obsidian_glass

default:rail

default:brick

default:meselamp

Misc
----

default:cloud
default:nyancat
default:nyancat_rainbow

--]]

--
-- Stone
--

minetest.register_node("default:stone", {
   description = "Stone",
   tiles = {"default_stone.png"},
   groups = {cracky = 3, stone = 1},
   drop = 'default:cobble',
   legacy_mineral = true,
   sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("default:cobble", {
   description = "Cobblestone",
   tiles = {"default_cobble.png"},
   is_ground_content = false,
   groups = {cracky = 3, stone = 2},
   sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("default:stonebrick", {
   description = "Stone Brick",
   tiles = {"default_stone_brick.png"},
   is_ground_content = false,
   groups = {cracky = 2, stone = 1},
   sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("default:mossycobble", {
   description = "Mossy Cobblestone",
   tiles = {"default_mossycobble.png"},
   is_ground_content = false,
   groups = {cracky = 3, stone = 1},
   sounds = default.node_sound_stone_defaults(),
})


minetest.register_node("default:desert_stone", {
   description = "Desert Stone",
   tiles = {"default_desert_stone.png"},
   groups = {cracky = 3, stone = 1},
   drop = 'default:desert_cobble',
   legacy_mineral = true,
   sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("default:desert_cobble", {
   description = "Desert Cobblestone",
   tiles = {"default_desert_cobble.png"},
   is_ground_content = false,
   groups = {cracky = 3, stone = 2},
   sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("default:desert_stonebrick", {
   description = "Desert Stone Brick",
   tiles = {"default_desert_stone_brick.png"},
   is_ground_content = false,
   groups = {cracky = 2, stone = 1},
   sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("default:red_desert_stone", {
   description = "Red Desert Stone",
   tiles = {"default_red_desert_stone.png"},
   groups = {cracky = 3, stone = 1},
   legacy_mineral = true,
   sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("default:red_desert_stonebrick", {
   description = "Red Desert Stone Brick",
   tiles = {"default_red_desert_stone_brick.png"},
   is_ground_content = false,
   groups = {cracky = 2, stone = 1},
   sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("default:sandstone", {
   description = "Sandstone",
   tiles = {"default_sandstone.png"},
   groups = {crumbly = 1, cracky = 3},
   sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("default:sandstonebrick", {
   description = "Sandstone Brick",
   tiles = {"default_sandstone_brick.png"},
   is_ground_content = false,
   groups = {cracky = 2},
   sounds = default.node_sound_stone_defaults(),
})


minetest.register_node("default:obsidian", {
   description = "Obsidian",
   tiles = {"default_obsidian.png"},
   sounds = default.node_sound_stone_defaults(),
   groups = {cracky = 1, level = 2},
})

minetest.register_node("default:obsidianbrick", {
   description = "Obsidian Brick",
   tiles = {"default_obsidian_brick.png"},
   is_ground_content = false,
   sounds = default.node_sound_stone_defaults(),
   groups = {cracky = 1, level = 2},
})

--
-- Soft / Non-Stone
--

minetest.register_node("default:dirt", {
   description = "Dirt",
   tiles = {"default_dirt.png"},
   groups = {crumbly = 3, soil = 1},
   sounds = default.node_sound_dirt_defaults(),
})

minetest.register_node("default:dirt_with_grass", {
   description = "Dirt with Grass",
   tiles = {"default_grass.png", "default_dirt.png",
      {name = "default_dirt.png^default_grass_side.png",
         tileable_vertical = false}},
   groups = {crumbly = 3, soil = 1},
   drop = 'default:dirt',
   sounds = default.node_sound_dirt_defaults({
      footstep = {name = "default_grass_footstep", gain = 0.25},
   }),
})

minetest.register_node("default:dirt_with_grass_footsteps", {
   description = "Dirt with Grass and Footsteps",
   tiles = {"default_grass.png^default_footprint.png", "default_dirt.png",
      {name = "default_dirt.png^default_grass_side.png",
         tileable_vertical = false}},
   groups = {crumbly = 3, soil = 1, not_in_creative_inventory = 1},
   drop = 'default:dirt',
   sounds = default.node_sound_dirt_defaults({
      footstep = {name = "default_grass_footstep", gain = 0.25},
   }),
})

minetest.register_node("default:dirt_with_dry_grass", {
   description = "Dirt with Dry Grass",
   tiles = {"default_dry_grass.png",
      "default_dirt.png",
      {name = "default_dirt.png^default_dry_grass_side.png",
         tileable_vertical = false}},
   groups = {crumbly = 3, soil = 1},
   drop = 'default:dirt',
   sounds = default.node_sound_dirt_defaults({
      footstep = {name = "default_grass_footstep", gain = 0.4},
   }),
})

minetest.register_node("default:dirt_with_snow", {
   description = "Dirt with Snow",
   tiles = {"default_snow.png", "default_dirt.png",
      {name = "default_dirt.png^default_snow_side.png",
         tileable_vertical = false}},
   groups = {crumbly = 3, soil = 1},
   drop = 'default:dirt',
   sounds = default.node_sound_dirt_defaults({
      footstep = {name = "default_snow_footstep", gain = 0.15},
   }),
})

minetest.register_node("default:sand", {
   description = "Sand",
   tiles = {"default_sand.png"},
   groups = {crumbly = 3, falling_node = 1, sand = 1},
   sounds = default.node_sound_sand_defaults(),
})

minetest.register_node("default:desert_sand", {
   description = "Desert Sand",
   tiles = {"default_desert_sand.png"},
   groups = {crumbly = 3, falling_node = 1, sand = 1},
   sounds = default.node_sound_sand_defaults(),
})


minetest.register_node("default:gravel", {
   description = "Gravel",
   tiles = {"default_gravel.png"},
   groups = {crumbly = 2, falling_node = 1},
   sounds = default.node_sound_gravel_defaults(),
   drop = {
      max_items = 1,
      items = {
         {items = {'default:flint'}, rarity = 16},
         {items = {'default:gravel'}}
      }
   }
})

minetest.register_node("default:clay", {
   description = "Clay",
   tiles = {"default_clay.png"},
   groups = {crumbly = 3},
   drop = 'default:clay_lump 4',
   sounds = default.node_sound_dirt_defaults(),
})


minetest.register_node("default:snow", {
   description = "Snow",
   tiles = {"default_snow.png"},
   inventory_image = "default_snowball.png",
   wield_image = "default_snowball.png",
   paramtype = "light",
   buildable_to = true,
   floodable = true,
   drawtype = "nodebox",
   node_box = {
      type = "fixed",
      fixed = {
         {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
      },
   },
   groups = {crumbly = 3, falling_node = 1, puts_out_fire = 1},
   sounds = default.node_sound_dirt_defaults({
      footstep = {name = "default_snow_footstep", gain = 0.15},
      dug = {name = "default_snow_footstep", gain = 0.2},
      dig = {name = "default_snow_footstep", gain = 0.2}
   }),

   on_construct = function(pos)
      pos.y = pos.y - 1
      if minetest.get_node(pos).name == "default:dirt_with_grass" then
         minetest.set_node(pos, {name = "default:dirt_with_snow"})
      end
   end,
})

minetest.register_node("default:snowblock", {
   description = "Snow Block",
   tiles = {"default_snow.png"},
   groups = {crumbly = 3, puts_out_fire = 1},
   sounds = default.node_sound_dirt_defaults({
      footstep = {name = "default_snow_footstep", gain = 0.15},
      dug = {name = "default_snow_footstep", gain = 0.2},
      dig = {name = "default_snow_footstep", gain = 0.2}
   }),
})

minetest.register_node("default:ice", {
   description = "Ice",
   tiles = {"default_ice.png"},
   is_ground_content = false,
   paramtype = "light",
   groups = {cracky = 3, puts_out_fire = 1},
   sounds = default.node_sound_glass_defaults(),
})

--
-- Trees
--

minetest.register_node("default:tree", {
   description = "Tree",
   tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
   paramtype2 = "facedir",
   is_ground_content = false,
   groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
   sounds = default.node_sound_wood_defaults(),

   on_place = minetest.rotate_node
})

minetest.register_node("default:wood", {
   description = "Wooden Planks",
   tiles = {"default_wood.png"},
   is_ground_content = false,
   groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
   sounds = default.node_sound_wood_defaults(),
})

minetest.register_node("default:sapling", {
   description = "Sapling",
   drawtype = "plantlike",
   visual_scale = 1.0,
   tiles = {"default_sapling.png"},
   inventory_image = "default_sapling.png",
   wield_image = "default_sapling.png",
   paramtype = "light",
   sunlight_propagates = true,
   walkable = false,
   selection_box = {
      type = "fixed",
      fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
   },
   groups = {snappy = 2, dig_immediate = 3, flammable = 2,
      attached_node = 1, sapling = 1},
   sounds = default.node_sound_leaves_defaults(),
})

minetest.register_node("default:leaves", {
   description = "Leaves",
   drawtype = "allfaces_optional",
   waving = 1,
   visual_scale = 1.3,
   tiles = {"default_leaves.png"},
   special_tiles = {"default_leaves_simple.png"},
   paramtype = "light",
   is_ground_content = false,
   groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
   drop = {
      max_items = 1,
      items = {
         {
            -- player will get sapling with 1/20 chance
            items = {'default:sapling'},
            rarity = 20,
         },
         {
            -- player will get leaves only if he get no saplings,
            -- this is because max_items is 1
            items = {'default:leaves'},
         }
      }
   },
   sounds = default.node_sound_leaves_defaults(),

   after_place_node = default.after_place_leaves,
})

minetest.register_node("default:apple", {
   description = "Apple",
   drawtype = "plantlike",
   visual_scale = 1.0,
   tiles = {"default_apple.png"},
   inventory_image = "default_apple.png",
   paramtype = "light",
   sunlight_propagates = true,
   walkable = false,
   is_ground_content = false,
   selection_box = {
      type = "fixed",
      fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
   },
   groups = {fleshy = 3, dig_immediate = 3, flammable = 2,
      leafdecay = 3, leafdecay_drop = 1},
   on_use = minetest.item_eat(2),
   sounds = default.node_sound_leaves_defaults(),

   after_place_node = function(pos, placer, itemstack)
      if placer:is_player() then
         minetest.set_node(pos, {name = "default:apple", param2 = 1})
      end
   end,
})


minetest.register_node("default:jungletree", {
   description = "Jungle Tree",
   tiles = {"default_jungletree_top.png", "default_jungletree_top.png",
      "default_jungletree.png"},
   paramtype2 = "facedir",
   is_ground_content = false,
   groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
   sounds = default.node_sound_wood_defaults(),

   on_place = minetest.rotate_node
})

minetest.register_node("default:junglewood", {
   description = "Junglewood Planks",
   tiles = {"default_junglewood.png"},
   is_ground_content = false,
   groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
   sounds = default.node_sound_wood_defaults(),
})

minetest.register_node("default:jungleleaves", {
   description = "Jungle Leaves",
   drawtype = "allfaces_optional",
   waving = 1,
   visual_scale = 1.3,
   tiles = {"default_jungleleaves.png"},
   special_tiles = {"default_jungleleaves_simple.png"},
   paramtype = "light",
   is_ground_content = false,
   groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
   drop = {
      max_items = 1,
      items = {
         {items = {'default:junglesapling'}, rarity = 20},
         {items = {'default:jungleleaves'}}
      }
   },
   sounds = default.node_sound_leaves_defaults(),

   after_place_node = default.after_place_leaves,
})

minetest.register_node("default:junglesapling", {
   description = "Jungle Sapling",
   drawtype = "plantlike",
   visual_scale = 1.0,
   tiles = {"default_junglesapling.png"},
   inventory_image = "default_junglesapling.png",
   wield_image = "default_junglesapling.png",
   paramtype = "light",
   sunlight_propagates = true,
   walkable = false,
   selection_box = {
      type = "fixed",
      fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
   },
   groups = {snappy = 2, dig_immediate = 3, flammable = 2,
      attached_node = 1, sapling = 1},
   sounds = default.node_sound_leaves_defaults(),
})


minetest.register_node("default:pine_tree", {
   description = "Pine Tree",
   tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png",
      "default_pine_tree.png"},
   paramtype2 = "facedir",
   is_ground_content = false,
   groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
   sounds = default.node_sound_wood_defaults(),

   on_place = minetest.rotate_node
})

minetest.register_node("default:pine_wood", {
   description = "Pine Wood Planks",
   tiles = {"default_pine_wood.png"},
   is_ground_content = false,
   groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
   sounds = default.node_sound_wood_defaults(),
})

minetest.register_node("default:pine_needles",{
   description = "Pine Needles",
   drawtype = "allfaces_optional",
   visual_scale = 1.3,
   tiles = {"default_pine_needles.png"},
   waving = 1,
   paramtype = "light",
   is_ground_content = false,
   groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
   drop = {
      max_items = 1,
      items = {
         {items = {"default:pine_sapling"}, rarity = 20},
         {items = {"default:pine_needles"}}
      }
   },
   sounds = default.node_sound_leaves_defaults(),

   after_place_node = default.after_place_leaves,
})

minetest.register_node("default:pine_sapling", {
   description = "Pine Sapling",
   drawtype = "plantlike",
   visual_scale = 1.0,
   tiles = {"default_pine_sapling.png"},
   inventory_image = "default_pine_sapling.png",
   wield_image = "default_pine_sapling.png",
   paramtype = "light",
   sunlight_propagates = true,
   walkable = false,
   selection_box = {
      type = "fixed",
      fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
   },
   groups = {snappy = 2, dig_immediate = 3, flammable = 2,
      attached_node = 1, sapling = 1},
   sounds = default.node_sound_leaves_defaults(),
})


minetest.register_node("default:acacia_tree", {
   description = "Acacia Tree",
   tiles = {"default_acacia_tree_top.png", "default_acacia_tree_top.png",
      "default_acacia_tree.png"},
   paramtype2 = "facedir",
   is_ground_content = false,
   groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
   sounds = default.node_sound_wood_defaults(),

   on_place = minetest.rotate_node
})

minetest.register_node("default:acacia_wood", {
   description = "Acacia Wood Planks",
   tiles = {"default_acacia_wood.png"},
   is_ground_content = false,
   groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
   sounds = default.node_sound_wood_defaults(),
})

minetest.register_node("default:acacia_leaves", {
   description = "Acacia Leaves",
   drawtype = "allfaces_optional",
   visual_scale = 1.3,
   tiles = {"default_acacia_leaves.png"},
   waving = 1,
   paramtype = "light",
   is_ground_content = false,
   groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
   drop = {
      max_items = 1,
      items = {
         {items = {"default:acacia_sapling"}, rarity = 20},
         {items = {"default:acacia_leaves"}}
      }
   },
   sounds = default.node_sound_leaves_defaults(),

   after_place_node = default.after_place_leaves,
})

minetest.register_node("default:acacia_sapling", {
   description = "Acacia Tree Sapling",
   drawtype = "plantlike",
   visual_scale = 1.0,
   tiles = {"default_acacia_sapling.png"},
   inventory_image = "default_acacia_sapling.png",
   wield_image = "default_acacia_sapling.png",
   paramtype = "light",
   sunlight_propagates = true,
   walkable = false,
   selection_box = {
      type = "fixed",
      fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
   },
   groups = {snappy = 2, dig_immediate = 3, flammable = 2,
      attached_node = 1, sapling = 1},
   sounds = default.node_sound_leaves_defaults(),
})

minetest.register_node("default:aspen_tree", {
   description = "Aspen Tree",
   tiles = {"default_aspen_tree_top.png", "default_aspen_tree_top.png",
      "default_aspen_tree.png"},
   paramtype2 = "facedir",
   is_ground_content = false,
   groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
   sounds = default.node_sound_wood_defaults(),

   on_place = minetest.rotate_node
})

minetest.register_node("default:aspen_wood", {
   description = "Aspen Wood Planks",
   tiles = {"default_aspen_wood.png"},
   is_ground_content = false,
   groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, wood = 1},
   sounds = default.node_sound_wood_defaults(),
})

minetest.register_node("default:aspen_leaves", {
   description = "Aspen Leaves",
   drawtype = "allfaces_optional",
   visual_scale = 1.3,
   tiles = {"default_aspen_leaves.png"},
   waving = 1,
   paramtype = "light",
   is_ground_content = false,
   groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
   drop = {
      max_items = 1,
      items = {
         {items = {"default:aspen_sapling"}, rarity = 20},
         {items = {"default:aspen_leaves"}}
      }
   },
   sounds = default.node_sound_leaves_defaults(),

   after_place_node = default.after_place_leaves,
})

minetest.register_node("default:aspen_sapling", {
   description = "Aspen Tree Sapling",
   drawtype = "plantlike",
   visual_scale = 1.0,
   tiles = {"default_aspen_sapling.png"},
   inventory_image = "default_aspen_sapling.png",
   wield_image = "default_aspen_sapling.png",
   paramtype = "light",
   sunlight_propagates = true,
   walkable = false,
   selection_box = {
      type = "fixed",
      fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
   },
   groups = {snappy = 2, dig_immediate = 3, flammable = 2,
      attached_node = 1, sapling = 1},
   sounds = default.node_sound_leaves_defaults(),
})
--
-- Ores
--

minetest.register_node("default:stone_with_coal", {
   description = "Coal Ore",
   tiles = {"default_stone.png^default_mineral_coal.png"},
   groups = {cracky = 3},
   drop = 'default:coal_lump',
   sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("default:coalblock", {
   description = "Coal Block",
   tiles = {"default_coal_block.png"},
   is_ground_content = false,
   groups = {cracky = 3},
   sounds = default.node_sound_stone_defaults(),
})


minetest.register_node("default:stone_with_iron", {
   description = "Iron Ore",
   tiles = {"default_stone.png^default_mineral_iron.png"},
   groups = {cracky = 2},
   drop = 'default:iron_lump',
   sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("default:steelblock", {
   description = "Steel Block",
   tiles = {"default_steel_block.png"},
   is_ground_content = false,
   groups = {cracky = 1, level = 2},
   sounds = default.node_sound_stone_defaults(),
})


minetest.register_node("default:stone_with_copper", {
   description = "Copper Ore",
   tiles = {"default_stone.png^default_mineral_copper.png"},
   groups = {cracky = 2},
   drop = 'default:copper_lump',
   sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("default:copperblock", {
   description = "Copper Block",
   tiles = {"default_copper_block.png"},
   is_ground_content = false,
   groups = {cracky = 1, level = 2},
   sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("default:bronzeblock", {
   description = "Bronze Block",
   tiles = {"default_bronze_block.png"},
   is_ground_content = false,
   groups = {cracky = 1, level = 2},
   sounds = default.node_sound_stone_defaults(),
})


minetest.register_node("default:stone_with_mese", {
   description = "Mese Ore",
   tiles = {"default_stone.png^default_mineral_mese.png"},
   groups = {cracky = 1},
   drop = "default:mese_crystal",
   sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("default:mese", {
   description = "Mese Block",
   tiles = {"default_mese_block.png"},
   paramtype = "light",
   groups = {cracky = 1, level = 2},
   sounds = default.node_sound_stone_defaults(),
   light_source = 3,
})


minetest.register_node("default:stone_with_gold", {
   description = "Gold Ore",
   tiles = {"default_stone.png^default_mineral_gold.png"},
   groups = {cracky = 2},
   drop = "default:gold_lump",
   sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("default:goldblock", {
   description = "Gold Block",
   tiles = {"default_gold_block.png"},
   is_ground_content = false,
   groups = {cracky = 1},
   sounds = default.node_sound_stone_defaults(),
})


minetest.register_node("default:stone_with_diamond", {
   description = "Diamond Ore",
   tiles = {"default_stone.png^default_mineral_diamond.png"},
   groups = {cracky = 1},
   drop = "default:diamond",
   sounds = default.node_sound_stone_defaults(),
})

minetest.register_node("default:diamondblock", {
   description = "Diamond Block",
   tiles = {"default_diamond_block.png"},
   is_ground_content = false,
   groups = {cracky = 1, level = 3},
   sounds = default.node_sound_stone_defaults(),
})

--
-- Plantlife (non-cubic)
--

minetest.register_node("default:cactus", {
   description = "Cactus",
   tiles = {"default_cactus_top.png", "default_cactus_top.png",
      "default_cactus_side.png"},
   paramtype2 = "facedir",
   groups = {snappy = 1, choppy = 3},
   sounds = default.node_sound_wood_defaults(),
   on_place = minetest.rotate_node,
})

minetest.register_node("default:papyrus", {
   description = "Papyrus",
   drawtype = "plantlike",
   tiles = {"default_papyrus.png"},
   inventory_image = "default_papyrus.png",
   wield_image = "default_papyrus.png",
   paramtype = "light",
   sunlight_propagates = true,
   walkable = false,
   selection_box = {
      type = "fixed",
      fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
   },
   groups = {snappy = 3, flammable = 2},
   sounds = default.node_sound_leaves_defaults(),

   after_dig_node = function(pos, node, metadata, digger)
      default.dig_up(pos, node, digger)
   end,
})

minetest.register_node("default:dry_shrub", {
   description = "Dry Shrub",
   drawtype = "plantlike",
   waving = 1,
   visual_scale = 1.0,
   tiles = {"default_dry_shrub.png"},
   inventory_image = "default_dry_shrub.png",
   wield_image = "default_dry_shrub.png",
   paramtype = "light",
   sunlight_propagates = true,
   walkable = false,
   buildable_to = true,
   groups = {snappy = 3, flammable = 3, attached_node = 1},
   sounds = default.node_sound_leaves_defaults(),
   selection_box = {
      type = "fixed",
      fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
   },
})

minetest.register_node("default:junglegrass", {
   description = "Jungle Grass",
   drawtype = "plantlike",
   waving = 1,
   visual_scale = 1.3,
   tiles = {"default_junglegrass.png"},
   inventory_image = "default_junglegrass.png",
   wield_image = "default_junglegrass.png",
   paramtype = "light",
   sunlight_propagates = true,
   walkable = false,
   buildable_to = true,
   groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1},
   sounds = default.node_sound_leaves_defaults(),
   selection_box = {
      type = "fixed",
      fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
   },
})


minetest.register_node("default:grass_1", {
   description = "Grass",
   drawtype = "plantlike",
   waving = 1,
   tiles = {"default_grass_1.png"},
   -- Use texture of a taller grass stage in inventory
   inventory_image = "default_grass_3.png",
   wield_image = "default_grass_3.png",
   paramtype = "light",
   sunlight_propagates = true,
   walkable = false,
   buildable_to = true,
   groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1},
   sounds = default.node_sound_leaves_defaults(),
   selection_box = {
      type = "fixed",
      fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
   },

   on_place = function(itemstack, placer, pointed_thing)
      -- place a random grass node
      local stack = ItemStack("default:grass_" .. math.random(1,5))
      local ret = minetest.item_place(stack, placer, pointed_thing)
      return ItemStack("default:grass_1 " ..
         itemstack:get_count() - (1 - ret:get_count()))
   end,
})

for i = 2, 5 do
   minetest.register_node("default:grass_" .. i, {
      description = "Grass",
      drawtype = "plantlike",
      waving = 1,
      tiles = {"default_grass_" .. i .. ".png"},
      inventory_image = "default_grass_" .. i .. ".png",
      wield_image = "default_grass_" .. i .. ".png",
      paramtype = "light",
      sunlight_propagates = true,
      walkable = false,
      buildable_to = true,
      drop = "default:grass_1",
      groups = {snappy = 3, flora = 1, attached_node = 1,
         not_in_creative_inventory = 1, grass = 1},
      sounds = default.node_sound_leaves_defaults(),
      selection_box = {
         type = "fixed",
         fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
      },
   })
end


minetest.register_node("default:dry_grass_1", {
   description = "Dry Grass",
   drawtype = "plantlike",
   waving = 1,
   tiles = {"default_dry_grass_1.png"},
   inventory_image = "default_dry_grass_3.png",
   wield_image = "default_dry_grass_3.png",
   paramtype = "light",
   sunlight_propagates = true,
   walkable = false,
   buildable_to = true,
   groups = {snappy = 3, flammable = 3, flora = 1,
      attached_node = 1, dry_grass = 1},
   sounds = default.node_sound_leaves_defaults(),
   selection_box = {
      type = "fixed",
      fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
   },

   on_place = function(itemstack, placer, pointed_thing)
      -- place a random dry grass node
      local stack = ItemStack("default:dry_grass_" .. math.random(1, 5))
      local ret = minetest.item_place(stack, placer, pointed_thing)
      return ItemStack("default:dry_grass_1 " ..
         itemstack:get_count() - (1 - ret:get_count()))
   end,
})

for i = 2, 5 do
   minetest.register_node("default:dry_grass_" .. i, {
      description = "Dry Grass",
      drawtype = "plantlike",
      waving = 1,
      tiles = {"default_dry_grass_" .. i .. ".png"},
      inventory_image = "default_dry_grass_" .. i .. ".png",
      wield_image = "default_dry_grass_" .. i .. ".png",
      paramtype = "light",
      sunlight_propagates = true,
      walkable = false,
      buildable_to = true,
      groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1,
         not_in_creative_inventory=1, dry_grass = 1},
      drop = "default:dry_grass_1",
      sounds = default.node_sound_leaves_defaults(),
      selection_box = {
         type = "fixed",
         fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
      },
   })
end

--
-- Liquids
--

minetest.register_node("default:water_source", {
   description = "Water Source",
   drawtype = "liquid",
   tiles = {
      {
         name = "default_water_source_animated.png",
         animation = {
            type = "vertical_frames",
            aspect_w = 16,
            aspect_h = 16,
            length = 2.0,
         },
      },
   },
   special_tiles = {
      -- New-style water source material (mostly unused)
      {
         name = "default_water_source_animated.png",
         animation = {
            type = "vertical_frames",
            aspect_w = 16,
            aspect_h = 16,
            length = 2.0,
         },
         backface_culling = false,
      },
   },
   alpha = 160,
   paramtype = "light",
   walkable = false,
   pointable = false,
   diggable = false,
   buildable_to = true,
   is_ground_content = false,
   drop = "",
   drowning = 1,
   liquidtype = "source",
   liquid_alternative_flowing = "default:water_flowing",
   liquid_alternative_source = "default:water_source",
   liquid_viscosity = 1,
   post_effect_color = {a = 103, r = 30, g = 60, b = 90},
   groups = {water = 3, liquid = 3, puts_out_fire = 1},
})

minetest.register_node("default:water_flowing", {
   description = "Flowing Water",
   drawtype = "flowingliquid",
   tiles = {"default_water.png"},
   special_tiles = {
      {
         name = "default_water_flowing_animated.png",
         backface_culling = false,
         animation = {
            type = "vertical_frames",
            aspect_w = 16,
            aspect_h = 16,
            length = 0.8,
         },
      },
      {
         name = "default_water_flowing_animated.png",
         backface_culling = true,
         animation = {
            type = "vertical_frames",
            aspect_w = 16,
            aspect_h = 16,
            length = 0.8,
         },
      },
   },
   alpha = 160,
   paramtype = "light",
   paramtype2 = "flowingliquid",
   walkable = false,
   pointable = false,
   diggable = false,
   buildable_to = true,
   is_ground_content = false,
   drop = "",
   drowning = 1,
   liquidtype = "flowing",
   liquid_alternative_flowing = "default:water_flowing",
   liquid_alternative_source = "default:water_source",
   liquid_viscosity = 1,
   post_effect_color = {a = 103, r = 30, g = 60, b = 90},
   groups = {water = 3, liquid = 3, puts_out_fire = 1,
      not_in_creative_inventory = 1},
})


minetest.register_node("default:river_water_source", {
   description = "River Water Source",
   drawtype = "liquid",
   tiles = {
      {
         name = "default_river_water_source_animated.png",
         animation = {
            type = "vertical_frames",
            aspect_w = 16,
            aspect_h = 16,
            length = 2.0,
         },
      },
   },
   special_tiles = {
      {
         name = "default_river_water_source_animated.png",
         animation = {
            type = "vertical_frames",
            aspect_w = 16,
            aspect_h = 16,
            length = 2.0,
         },
         backface_culling = false,
      },
   },
   alpha = 160,
   paramtype = "light",
   walkable = false,
   pointable = false,
   diggable = false,
   buildable_to = true,
   is_ground_content = false,
   drop = "",
   drowning = 1,
   liquidtype = "source",
   liquid_alternative_flowing = "default:river_water_flowing",
   liquid_alternative_source = "default:river_water_source",
   liquid_viscosity = 1,
   liquid_renewable = false,
   liquid_range = 2,
   post_effect_color = {a = 103, r = 30, g = 76, b = 90},
   groups = {water = 3, liquid = 3, puts_out_fire = 1},
})

minetest.register_node("default:river_water_flowing", {
   description = "Flowing River Water",
   drawtype = "flowingliquid",
   tiles = {"default_river_water.png"},
   special_tiles = {
      {
         name = "default_river_water_flowing_animated.png",
         backface_culling = false,
         animation = {
            type = "vertical_frames",
            aspect_w = 16,
            aspect_h = 16,
            length = 0.8,
         },
      },
      {
         name = "default_river_water_flowing_animated.png",
         backface_culling = true,
         animation = {
            type = "vertical_frames",
            aspect_w = 16,
            aspect_h = 16,
            length = 0.8,
         },
      },
   },
   alpha = 160,
   paramtype = "light",
   paramtype2 = "flowingliquid",
   walkable = false,
   pointable = false,
   diggable = false,
   buildable_to = true,
   is_ground_content = false,
   drop = "",
   drowning = 1,
   liquidtype = "flowing",
   liquid_alternative_flowing = "default:river_water_flowing",
   liquid_alternative_source = "default:river_water_source",
   liquid_viscosity = 1,
   liquid_renewable = false,
   liquid_range = 2,
   post_effect_color = {a = 103, r = 30, g = 76, b = 90},
   groups = {water = 3, liquid = 3, puts_out_fire = 1,
      not_in_creative_inventory = 1},
})


minetest.register_node("default:lava_source", {
   description = "Lava Source",
   drawtype = "liquid",
   tiles = {
      {
         name = "default_lava_source_animated.png",
         animation = {
            type = "vertical_frames",
            aspect_w = 16,
            aspect_h = 16,
            length = 3.0,
         },
      },
   },
   special_tiles = {
      -- New-style lava source material (mostly unused)
      {
         name = "default_lava_source_animated.png",
         animation = {
            type = "vertical_frames",
            aspect_w = 16,
            aspect_h = 16,
            length = 3.0,
         },
         backface_culling = false,
      },
   },
   paramtype = "light",
   light_source = default.LIGHT_MAX - 1,
   walkable = false,
   pointable = false,
   diggable = false,
   buildable_to = true,
   is_ground_content = false,
   drop = "",
   drowning = 1,
   liquidtype = "source",
   liquid_alternative_flowing = "default:lava_flowing",
   liquid_alternative_source = "default:lava_source",
   liquid_viscosity = 7,
   liquid_renewable = false,
   damage_per_second = 4 * 2,
   post_effect_color = {a = 191, r = 255, g = 64, b = 0},
   groups = {lava = 3, liquid = 2, hot = 3, igniter = 1},
})

minetest.register_node("default:lava_flowing", {
   description = "Flowing Lava",
   drawtype = "flowingliquid",
   tiles = {"default_lava.png"},
   special_tiles = {
      {
         name = "default_lava_flowing_animated.png",
         backface_culling = false,
         animation = {
            type = "vertical_frames",
            aspect_w = 16,
            aspect_h = 16,
            length = 3.3,
         },
      },
      {
         name = "default_lava_flowing_animated.png",
         backface_culling = true,
         animation = {
            type = "vertical_frames",
            aspect_w = 16,
            aspect_h = 16,
            length = 3.3,
         },
      },
   },
   paramtype = "light",
   paramtype2 = "flowingliquid",
   light_source = default.LIGHT_MAX - 1,
   walkable = false,
   pointable = false,
   diggable = false,
   buildable_to = true,
   is_ground_content = false,
   drop = "",
   drowning = 1,
   liquidtype = "flowing",
   liquid_alternative_flowing = "default:lava_flowing",
   liquid_alternative_source = "default:lava_source",
   liquid_viscosity = 7,
   liquid_renewable = false,
   damage_per_second = 4 * 2,
   post_effect_color = {a = 191, r = 255, g = 64, b = 0},
   groups = {lava = 3, liquid = 2, hot = 3, igniter = 1,
      not_in_creative_inventory = 1},
})

--
-- Tools / "Advanced" crafting / Non-"natural"
--

minetest.register_node("default:torch", {
   description = "Torch",
   drawtype = "torchlike",
   tiles = {
      {
         name = "default_torch_on_floor_animated.png",
         animation = {
            type = "vertical_frames",
            aspect_w = 16,
            aspect_h = 16,
            length = 3.0
         },
      },
      {
         name="default_torch_on_ceiling_animated.png",
         animation = {
            type = "vertical_frames",
            aspect_w = 16,
            aspect_h = 16,
            length = 3.0
         },
      },
      {
         name="default_torch_animated.png",
         animation = {
            type = "vertical_frames",
            aspect_w = 16,
            aspect_h = 16,
            length = 3.0
         },
      },
   },
   inventory_image = "default_torch_on_floor.png",
   wield_image = "default_torch_on_floor.png",
   paramtype = "light",
   paramtype2 = "wallmounted",
   sunlight_propagates = true,
   is_ground_content = false,
   walkable = false,
   light_source = default.LIGHT_MAX - 1,
   selection_box = {
      type = "wallmounted",
      wall_top = {-0.1, 0.5 - 0.6, -0.1, 0.1, 0.5, 0.1},
      wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5 + 0.6, 0.1},
      wall_side = {-0.5, -0.3, -0.1, -0.5 + 0.3, 0.3, 0.1},
   },
   groups = {choppy = 2, dig_immediate = 3, flammable = 1, attached_node = 1},
   legacy_wallmounted = true,
   sounds = default.node_sound_defaults(),
})


local chest_formspec =
   "size[8,9]" ..
   default.gui_bg ..
   default.gui_bg_img ..
   default.gui_slots ..
   "list[current_name;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[current_name;main]" ..
   "listring[current_player;main]" ..
   default.get_hotbar_bg(0,4.85)

local function get_locked_chest_formspec(pos)
   local spos = pos.x .. "," .. pos.y .. "," .. pos.z
   local formspec =
      "size[8,9]" ..
      default.gui_bg ..
      default.gui_bg_img ..
      default.gui_slots ..
      "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]" ..
      default.get_hotbar_bg(0,4.85)
 return formspec
end

local function has_locked_chest_privilege(meta, player)
   local name = ""
   if player then
      if minetest.check_player_privs(player, "protection_bypass") then
         return true
      end
      name = player:get_player_name()
   end
   if name ~= meta:get_string("owner") then
      return false
   end
   return true
end

minetest.register_node("default:chest", {
   description = "Chest",
   tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
      "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
   paramtype2 = "facedir",
   groups = {choppy = 2, oddly_breakable_by_hand = 2},
   legacy_facedir_simple = true,
   is_ground_content = false,
   sounds = default.node_sound_wood_defaults(),

   on_construct = function(pos)
      local meta = minetest.get_meta(pos)
      meta:set_string("formspec", chest_formspec)
      meta:set_string("infotext", "Chest")
      local inv = meta:get_inventory()
      inv:set_size("main", 8*4)
   end,
   can_dig = function(pos,player)
      local meta = minetest.get_meta(pos);
      local inv = meta:get_inventory()
      return inv:is_empty("main")
   end,
   on_metadata_inventory_move = function(pos, from_list, from_index,
         to_list, to_index, count, player)
      minetest.log("action", player:get_player_name() ..
         " moves stuff in chest at " .. minetest.pos_to_string(pos))
   end,
    on_metadata_inventory_put = function(pos, listname, index, stack, player)
      minetest.log("action", player:get_player_name() ..
         " moves " .. stack:get_name() ..
         " to chest at " .. minetest.pos_to_string(pos))
   end,
    on_metadata_inventory_take = function(pos, listname, index, stack, player)
      minetest.log("action", player:get_player_name() ..
         " takes " .. stack:get_name() ..
         " from chest at " .. minetest.pos_to_string(pos))
   end,
   on_blast = function(pos)
      local drops = {}
      default.get_inventory_drops(pos, "main", drops)
      drops[#drops+1] = "default:chest"
      minetest.remove_node(pos)
      return drops
   end,
})

minetest.register_node("default:chest_locked", {
   description = "Locked Chest",
   tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
      "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"},
   paramtype2 = "facedir",
   groups = {choppy = 2, oddly_breakable_by_hand = 2},
   legacy_facedir_simple = true,
   is_ground_content = false,
   sounds = default.node_sound_wood_defaults(),

   after_place_node = function(pos, placer)
      local meta = minetest.get_meta(pos)
      meta:set_string("owner", placer:get_player_name() or "")
      meta:set_string("infotext", "Locked Chest (owned by " ..
            meta:get_string("owner") .. ")")
   end,
   on_construct = function(pos)
      local meta = minetest.get_meta(pos)
      meta:set_string("infotext", "Locked Chest")
      meta:set_string("owner", "")
      local inv = meta:get_inventory()
      inv:set_size("main", 8 * 4)
   end,
   can_dig = function(pos,player)
      local meta = minetest.get_meta(pos);
      local inv = meta:get_inventory()
      return inv:is_empty("main") and has_locked_chest_privilege(meta, player)
   end,
   allow_metadata_inventory_move = function(pos, from_list, from_index,
         to_list, to_index, count, player)
      local meta = minetest.get_meta(pos)
      if not has_locked_chest_privilege(meta, player) then
         return 0
      end
      return count
   end,
    allow_metadata_inventory_put = function(pos, listname, index, stack, player)
      local meta = minetest.get_meta(pos)
      if not has_locked_chest_privilege(meta, player) then
         return 0
      end
      return stack:get_count()
   end,
    allow_metadata_inventory_take = function(pos, listname, index, stack, player)
      local meta = minetest.get_meta(pos)
      if not has_locked_chest_privilege(meta, player) then
         return 0
      end
      return stack:get_count()
   end,
    on_metadata_inventory_put = function(pos, listname, index, stack, player)
      minetest.log("action", player:get_player_name() ..
         " moves " .. stack:get_name() ..
         " to locked chest at " .. minetest.pos_to_string(pos))
   end,
    on_metadata_inventory_take = function(pos, listname, index, stack, player)
      minetest.log("action", player:get_player_name() ..
         " takes " .. stack:get_name()  ..
         " from locked chest at " .. minetest.pos_to_string(pos))
   end,
   on_rightclick = function(pos, node, clicker)
      local meta = minetest.get_meta(pos)
      if has_locked_chest_privilege(meta, clicker) then
         minetest.show_formspec(
            clicker:get_player_name(),
            "default:chest_locked",
            get_locked_chest_formspec(pos)
         )
      end
   end,
   on_blast = function() end,
})


local bookshelf_formspec =
   "size[8,7;]" ..
   default.gui_bg ..
   default.gui_bg_img ..
   default.gui_slots ..
   "list[context;books;0,0.3;8,2;]" ..
   "list[current_player;main;0,2.85;8,1;]" ..
   "list[current_player;main;0,4.08;8,3;8]" ..
   "listring[context;books]" ..
   "listring[current_player;main]" ..
   default.get_hotbar_bg(0,2.85)

minetest.register_node("default:bookshelf", {
   description = "Bookshelf",
   tiles = {"default_wood.png", "default_wood.png", "default_bookshelf.png"},
   is_ground_content = false,
   groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3},
   sounds = default.node_sound_wood_defaults(),

   on_construct = function(pos)
      local meta = minetest.get_meta(pos)
      meta:set_string("formspec", bookshelf_formspec)
      local inv = meta:get_inventory()
      inv:set_size("books", 8 * 2)
   end,
   can_dig = function(pos,player)
      local inv = minetest.get_meta(pos):get_inventory()
      return inv:is_empty("books")
   end,
   allow_metadata_inventory_put = function(pos, listname, index, stack)
      if minetest.get_item_group(stack:get_name(), "book") ~= 0 then
         return stack:get_count()
      end
      return 0
   end,
   on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
      minetest.log("action", player:get_player_name() ..
         " moves stuff in bookshelf at " .. minetest.pos_to_string(pos))
   end,
   on_metadata_inventory_put = function(pos, listname, index, stack, player)
      minetest.log("action", player:get_player_name() ..
         " moves stuff to bookshelf at " .. minetest.pos_to_string(pos))
   end,
   on_metadata_inventory_take = function(pos, listname, index, stack, player)
      minetest.log("action", player:get_player_name() ..
         " takes stuff from bookshelf at " .. minetest.pos_to_string(pos))
   end,
   on_blast = function(pos)
      local drops = {}
      default.get_inventory_drops(pos, "books", drops)
      drops[#drops+1] = "default:bookshelf"
      minetest.remove_node(pos)
      return drops
   end,
})

local function register_sign(material, desc, def)
   minetest.register_node("default:sign_wall_" .. material, {
      description = desc .. " Sign",
      drawtype = "nodebox",
      tiles = {"default_sign_wall_" .. material .. ".png"},
      inventory_image = "default_sign_" .. material .. ".png",
      wield_image = "default_sign_" .. material .. ".png",
      paramtype = "light",
      paramtype2 = "wallmounted",
      sunlight_propagates = true,
      is_ground_content = false,
      walkable = false,
      node_box = {
         type = "wallmounted",
         wall_top    = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125},
         wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125},
         wall_side   = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375},
      },
      groups = def.groups,
      legacy_wallmounted = true,
      sounds = def.sounds,

      on_construct = function(pos)
         --local n = minetest.get_node(pos)
         local meta = minetest.get_meta(pos)
         meta:set_string("formspec", "field[text;;${text}]")
         meta:set_string("infotext", "\"\"")
      end,
      on_receive_fields = function(pos, formname, fields, sender)
         --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
         local player_name = sender:get_player_name()
         if minetest.is_protected(pos, player_name) then
            minetest.record_protection_violation(pos, player_name)
            return
         end
         local meta = minetest.get_meta(pos)
         if not fields.text then return end
         minetest.log("action", (player_name or "") .. " wrote \"" ..
            fields.text .. "\" to sign at " .. minetest.pos_to_string(pos))
         meta:set_string("text", fields.text)
         meta:set_string("infotext", '"' .. fields.text .. '"')
      end,
   })
end

register_sign("wood", "Wooden", {
   sounds = default.node_sound_wood_defaults(),
   groups = {choppy = 2, attached_node = 1, flammable = 2, oddly_breakable_by_hand = 3}
})

register_sign("steel", "Steel", {
   sounds = default.node_sound_defaults(),
   groups = {cracky = 2, attached_node = 1}
})

minetest.register_node("default:ladder_wood", {
   description = "Wooden Ladder",
   drawtype = "signlike",
   tiles = {"default_ladder_wood.png"},
   inventory_image = "default_ladder_wood.png",
   wield_image = "default_ladder_wood.png",
   paramtype = "light",
   paramtype2 = "wallmounted",
   sunlight_propagates = true,
   walkable = false,
   climbable = true,
   is_ground_content = false,
   selection_box = {
      type = "wallmounted",
      --wall_top = = <default>
      --wall_bottom = = <default>
      --wall_side = = <default>
   },
   groups = {choppy = 2, oddly_breakable_by_hand = 3, flammable = 2},
   legacy_wallmounted = true,
   sounds = default.node_sound_wood_defaults(),
})

minetest.register_node("default:ladder_steel", {
   description = "Steel Ladder",
   drawtype = "signlike",
   tiles = {"default_ladder_steel.png"},
   inventory_image = "default_ladder_steel.png",
   wield_image = "default_ladder_steel.png",
   paramtype = "light",
   paramtype2 = "wallmounted",
   sunlight_propagates = true,
   walkable = false,
   climbable = true,
   is_ground_content = false,
   selection_box = {
      type = "wallmounted",
      --wall_top = = <default>
      --wall_bottom = = <default>
      --wall_side = = <default>
   },
   groups = {cracky = 2},
   sounds = default.node_sound_stone_defaults(),
})

default.register_fence("default:fence_wood", {
   description = "Wooden Fence",
   texture = "default_fence_wood.png",
   material = "default:wood",
   groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
   sounds = default.node_sound_wood_defaults()
})

default.register_fence("default:fence_acacia_wood", {
   description = "Acacia Fence",
   texture = "default_fence_acacia_wood.png",
   material = "default:acacia_wood",
   groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
   sounds = default.node_sound_wood_defaults()
})

default.register_fence("default:fence_junglewood", {
   description = "Junglewood Fence",
   texture = "default_fence_junglewood.png",
   material = "default:junglewood",
   groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
   sounds = default.node_sound_wood_defaults()
})

default.register_fence("default:fence_pine_wood", {
   description = "Pine Fence",
   texture = "default_fence_pine_wood.png",
   material = "default:pine_wood",
   groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
   sounds = default.node_sound_wood_defaults()
})

default.register_fence("default:fence_aspen_wood", {
   description = "Aspen Fence",
   texture = "default_fence_aspen_wood.png",
   material = "default:aspen_wood",
   groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
   sounds = default.node_sound_wood_defaults()
})

minetest.register_node("default:glass", {
   description = "Glass",
   drawtype = "glasslike_framed_optional",
   tiles = {"default_glass.png", "default_glass_detail.png"},
   paramtype = "light",
   sunlight_propagates = true,
   is_ground_content = false,
   groups = {cracky = 3, oddly_breakable_by_hand = 3},
   sounds = default.node_sound_glass_defaults(),
})

minetest.register_node("default:obsidian_glass", {
   description = "Obsidian Glass",
   drawtype = "glasslike_framed_optional",
   tiles = {"default_obsidian_glass.png", "default_obsidian_glass_detail.png"},
   paramtype = "light",
   is_ground_content = false,
   sunlight_propagates = true,
   sounds = default.node_sound_glass_defaults(),
   groups = {cracky = 3},
})


minetest.register_node("default:rail", {
   description = "Rail",
   drawtype = "raillike",
   tiles = {"default_rail.png", "default_rail_curved.png",
      "default_rail_t_junction.png", "default_rail_crossing.png"},
   inventory_image = "default_rail.png",
   wield_image = "default_rail.png",
   paramtype = "light",
   sunlight_propagates = true,
   walkable = false,
   is_ground_content = false,
   selection_box = {
      type = "fixed",
                -- but how to specify the dimensions for curved and sideways rails?
                fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
   },
   groups = {bendy = 2, dig_immediate = 2, attached_node = 1,
      connect_to_raillike = minetest.raillike_group("rail")},
})


minetest.register_node("default:brick", {
   description = "Brick Block",
   tiles = {"default_brick.png"},
   is_ground_content = false,
   groups = {cracky = 3},
   sounds = default.node_sound_stone_defaults(),
})


minetest.register_node("default:meselamp", {
   description = "Mese Lamp",
   drawtype = "glasslike",
   tiles = {"default_meselamp.png"},
   paramtype = "light",
   sunlight_propagates = true,
   is_ground_content = false,
   groups = {cracky = 3, oddly_breakable_by_hand = 3},
   sounds = default.node_sound_glass_defaults(),
   light_source = default.LIGHT_MAX,
})

--
-- Misc
--

minetest.register_node("default:cloud", {
   description = "Cloud",
   tiles = {"default_cloud.png"},
   is_ground_content = false,
   sounds = default.node_sound_defaults(),
   groups = {not_in_creative_inventory = 1},
})

minetest.register_node("default:nyancat", {
   description = "Nyan Cat",
   tiles = {"default_nc_side.png", "default_nc_side.png", "default_nc_side.png",
      "default_nc_side.png", "default_nc_back.png", "default_nc_front.png"},
   paramtype2 = "facedir",
   groups = {cracky = 2},
   is_ground_content = false,
   legacy_facedir_simple = true,
   sounds = default.node_sound_defaults(),
})

minetest.register_node("default:nyancat_rainbow", {
   description = "Nyan Cat Rainbow",
   tiles = {
      "default_nc_rb.png^[transformR90", "default_nc_rb.png^[transformR90",
      "default_nc_rb.png", "default_nc_rb.png"
   },
   paramtype2 = "facedir",
   groups = {cracky = 2},
   is_ground_content = false,
   sounds = default.node_sound_defaults(),
})


And the default tp with some quick red desert textures: (just in case anyone would like to try the 2 desert idea out)
textures.zip
(253.67 KiB) Downloaded 54 times


All code and textures are covered by Minetest default license.
Flick?... Flick who?
 

User avatar
azekill_DIABLO
Member
 
Posts: 3458
Joined: Wed Oct 29, 2014 20:05
GitHub: azekillDIABLO
In-game: azekill_DIABLO

Re: The GRASS discussion

by azekill_DIABLO » Thu Jun 30, 2016 09:41

you know that you've posted allllll the default textures....
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
Hi, my username is azekill_DIABLO and i'm an exelent bug-maker(yeah...i know...i have a bad reputation)

azekill_DIABLO said: Mineyoshi+ABJ+Baggins= TOPIC HIJACKED.
My Mods and Stuff | Voxellar | VoxBox on GITHUB | M.I.L.A Monster engine
WEIRD MODDING CONTEST !!!
 

User avatar
azekill_DIABLO
Member
 
Posts: 3458
Joined: Wed Oct 29, 2014 20:05
GitHub: azekillDIABLO
In-game: azekill_DIABLO

Re: The GRASS discussion

by azekill_DIABLO » Thu Jun 30, 2016 09:43

but it's nice
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
Hi, my username is azekill_DIABLO and i'm an exelent bug-maker(yeah...i know...i have a bad reputation)

azekill_DIABLO said: Mineyoshi+ABJ+Baggins= TOPIC HIJACKED.
My Mods and Stuff | Voxellar | VoxBox on GITHUB | M.I.L.A Monster engine
WEIRD MODDING CONTEST !!!
 

User avatar
TumeniNodes
Member
 
Posts: 1335
Joined: Fri Feb 26, 2016 19:49
GitHub: TumeniNodes

Re: The GRASS discussion

by TumeniNodes » Thu Jun 30, 2016 15:53

azekill_DIABLO wrote:you know that you've posted allllll the default textures....

Yeh, it just seemed easier that way for some reason :P
Flick?... Flick who?
 


Return to Minetest Features

Who is online

Users browsing this forum: No registered users and 38 guests