Improve mapgen, add grass, and include the fill tool.

This commit is contained in:
Signal 2026-01-15 18:54:28 -05:00
parent 1e897665bb
commit 4659a008ac
86 changed files with 1098 additions and 293 deletions

View file

@ -40,7 +40,7 @@ rgt.register_node("stone_tile", {
rgt.register_node("cobble", {
tiles = {"rgt_cobble.png"},
_variants = "all",
groups = {dig_immediate = 3}
groups = {stone = 1}
})
rgt.register_node("dirt", {
@ -54,11 +54,122 @@ rgt.register_node("dirt_mossy", {
})
rgt.register_node("dirt_grass", {
tiles = {"rgt_grass_top.png", "rgt_dirt.png", "rgt_dirt.png^rgt_grass_side.png"},
paramtype2 = "color",
tiles = {"rgt_grass_top.png", {name = "rgt_dirt.png", color = "#fff"}, {name = "rgt_dirt.png^rgt_grass_side_shadow.png", color = "#fff"}},
overlay_tiles = {"", "", "rgt_grass_side.png"},
palette = "rgt_palette_grass.png",
on_construct = function(pos)
end,
-- tiles = {"[fill:16x16:0,0:#3e7e7b^[fill:14x14:1,1:#326764"},
groups = {dig_immediate = 3}
})
-- Grass
for i = 1, 3 do
rgt.register_node("grass_"..i, {
drawtype = "plantlike",
paramtype = "light",
paramtype2 = "meshoptions",
place_param2 = 2,
sunlight_propagates = false,
tiles = {"rgt_grass_"..i..".png"},
groups = {attached_node = 3, dig_immediate = 3},
walkable = false,
selection_box = {
type = "fixed",
fixed = {
-6/16, -0.5, -6/16,
6/16, 6/16, 6/16
}
}
})
end
-- Tall grass
rgt.register_node("grass_tall_bottom", {
drawtype = "plantlike",
paramtype = "light",
paramtype2 = "meshoptions",
place_param2 = 2,
sunlight_propagates = false,
tiles = {"rgt_grass_tall.png^[verticalframe:2:1"},
groups = {attached_node = 3, dig_immediate = 3},
walkable = false,
selection_box = {
type = "fixed",
fixed = {
-6/16, -0.5, -6/16,
6/16, 0.5, 6/16
}
},
node_placement_prediction = "",
after_destruct = function(pos)
local above = pos:offset(0, 1, 0)
local na = minetest.get_node(above)
if na.name:find "grass_tall_top" then
minetest.remove_node(above)
end
end,
on_place = function(s, p, pt)
if pt.type ~= "node" then return end
local target = pt.above
if not minetest.get_node(target:offset(0, -1, 0)).name:find "dirt_grass" then
return
end
local above = target:offset(0, 1, 0)
if minetest.get_node(above).name == "air" then
minetest.set_node(target, {name = "grass_tall_bottom", param2 = 2})
minetest.set_node(above, {name = "grass_tall_top", param2 = 2})
s:take_item()
return s
end
end
})
rgt.register_node("grass_tall_top", {
drawtype = "plantlike",
paramtype = "light",
paramtype2 = "meshoptions",
place_param2 = 2,
sunlight_propagates = false,
tiles = {"rgt_grass_tall.png^[verticalframe:2:0"},
groups = {dig_immediate = 3},
walkable = false,
selection_box = {
type = "fixed",
fixed = {
-6/16, -0.5, -6/16,
6/16, 6/16, 6/16
}
},
drop = "grass_tall_bottom",
after_destruct = function(pos)
local below = pos:offset(0, -1, 0)
local nb = minetest.get_node(below)
if nb.name:find "grass_tall_bottom" then
minetest.remove_node(below)
end
end,
})
-- TODO: Tall grass
--rgt.register_node("tall_grass", {
-- drawtype = "mesh",
-- mesh = "rgt_plantlike_1x1x2.obj",
-- use_texture_alpha = "clip",
-- paramtype = "light",
-- sunlight_propagates = false,
-- tiles = {"rgt_grass_tall.png"},
-- groups = {dig_immediate = 3},
-- walkable = false
--})
rgt.register_node("path_grass", {
drawtype = "nodebox",
node_box = {
@ -91,43 +202,43 @@ rgt.register_node("oak_leaves", {
drawtype = "allfaces",
tiles = {"rgt_oak_leaves.png"},
use_texture_alpha = "clip",
groups = {dig_immediate = 3}
groups = {dig_immediate = 3},
})
rgt.register_node("oak_planks", {
tiles = {{name = "rgt_oak_planks.png", align_style = "world"}},
_variants = "all",
groups = {dig_immediate = 3}
groups = {dig_immediate = 3},
})
rgt.register_node("dark_planks", {
tiles = {{name = "rgt_dark_planks.png", align_style = "world"}},
_variants = "all",
groups = {dig_immediate = 3}
groups = {dig_immediate = 3},
})
rgt.register_node("spruce_planks", {
tiles = {{name = "rgt_spruce_planks.png", align_style = "world"}},
_variants = "all",
groups = {dig_immediate = 3}
groups = {dig_immediate = 3},
})
rgt.register_node("acacia_planks", {
tiles = {{name = "rgt_acacia_planks.png", align_style = "world"}},
_variants = "all",
groups = {dig_immediate = 3}
groups = {dig_immediate = 3},
})
rgt.register_node("redwood_planks", {
tiles = {{name = "rgt_redwood_planks.png", align_style = "world"}},
_variants = "all",
groups = {dig_immediate = 3}
groups = {dig_immediate = 3},
})
rgt.register_node("birch_planks", {
tiles = {{name = "rgt_birch_planks.png", align_style = "world"}},
_variants = "all",
groups = {dig_immediate = 3}
groups = {dig_immediate = 3},
})
@ -149,6 +260,13 @@ rgt.register_node("glass", {
--}
rgt.register_node("basalt", {
tiles = {{name = "rgt_basalt.png", align_style = "world"}},
_variants = "all",
groups = {dig_immediate = 3},
})
rgt.register_node("water", {
tiles = {"[fill:16x16:0,0:#2d5a7c77^[fill:14x14:1,1:#2d5a7c33"},
groups = {dig_immediate = 3},
@ -158,6 +276,7 @@ rgt.register_node("water", {
walkable = false,
climbable = true,
post_effect_color = "#2d5a7c55",
is_ground_content = false,
liquidtype = "source",
-- Minetest pro tip: Do not try to use aliases for these.
@ -178,6 +297,7 @@ rgt.register_node("water_flowing", {
walkable = false,
climbable = true,
post_effect_color = "#2d5a7c55",
is_ground_content = false,
liquidtype = "flowing",
liquid_alternative_source = "red_glazed_terracotta:water",
@ -230,6 +350,35 @@ minetest.register_alias("mapgen_water_source", "red_glazed_terracotta:water")
minetest.register_alias("mapgen_river_water_source", "red_glazed_terracotta:river_water")
--[[
Biomes to add:
[Temperate]
Steppe
Moor
Plains
Light Deciduous Forest
Dark Deciduous Forest
[Cold]
Alpine
Glacier
Taiga
Tundra
Coniferous Forest
[Warm]
Desert
Badlands
Jungle
Swamp
Marsh
--]]
include "biomes.lua"
rgt.register_node("light", {
tiles = {"[fill:1x1:0,0:#fed"},
@ -247,62 +396,80 @@ minetest.register_ore {
clust_size = 1
}
--minetest.register_decoration {
-- deco_type = "schematic",
-- place_on = "dirt_grass",
-- biomes = {"forest"},
-- y_min = 1,
-- fill_ratio = 0.01,
-- schematic = minetest.get_modpath(minetest.get_current_modname()).."/schems/tree.mts",
-- flags = "place_center_x, place_center_z",
-- place_offset_y = 1,
--}
minetest.register_biome{
name = "plains",
node_top = "dirt_grass",
depth_top = 1,
node_filler = "dirt",
depth_filler = 5,
node_riverbed = "dirt",
depth_riverbed = 3,
node_dungeon = "cobble",
node_dungeon_alt = "stone_brick_large",
y_max = 3000,
y_min = 2,
vertical_blend = 2,
heat_point = 50,
humidity_point = 50,
minetest.register_decoration {
deco_type = "schematic",
place_on = "dirt_grass",
biomes = {"forest"},
y_min = 1,
y_max = 8000,
fill_ratio = 0.01,
schematic = minetest.get_modpath(minetest.get_current_modname()).."/schems/tree.mts",
flags = "place_center_x, place_center_z",
place_offset_y = 1,
}
minetest.register_biome{
name = "beach",
minetest.register_decoration {
deco_type = "schematic",
place_on = "dirt_grass",
biomes = {"plains"},
y_min = 1,
noise_params = {
offset = 0,
scale = 0.25,
spread = {x = 8, y = 8, z = 8},
seed = 3456789,
octaves = 4,
persist = 0.6,
lacunarity = 3,
},
-- fill_ratio = 0.1,
schematic = {
size = {x = 1, y = 2, z = 1}, -- 1×2×1
data = {
{name = "grass_tall_bottom", prob = 255, param2 = 2},
{name = "grass_tall_top", prob = 255, param2 = 2},
},
},
place_offset_y = 1,
}
node_top = "sand",
depth_top = 1,
minetest.register_decoration {
deco_type = "simple",
place_on = "dirt_grass",
biomes = {"forest", "plains"},
decoration = {"grass_1", "grass_2", "grass_3"},
param2 = 2,
y_min = 1,
fill_ratio = 0.2,
}
node_filler = "sand",
depth_filler = 2,
minetest.override_item("", {
on_place = function(s, p, pt)
if minetest.get_node(pt.under).name:find "dirt_grass" then
minetest.set_node(pt.under, {name = "path_grass"})
end
-- minetest.spawn_tree(pt.above, {
-- axiom = "TF[FFA]",
-- rules_a = "F",
-- trunk = "oak_log",
-- leaves = "oak_leaves",
-- angle = 30,
-- iterations = 2,
-- random_level = 0,
-- trunk_type = "single",
---- thin_branches = true,
-- fruit_chance = 0,
-- fruit = "stone_brick"
-- })
end
})
node_riverbed = "sand",
depth_riverbed = 3,
node_dungeon = "cobble",
node_dungeon_alt = "stone_brick_large",
minetest.register_chatcommand("biome", {
func = function(name)
tell(name, minetest.get_biome_name(minetest.get_biome_data(minetest.get_player_by_name(name):get_pos()).biome))
end
})
y_max = 1,
y_min = -3,
vertical_blend = 1,
include "config.lua"
heat_point = 50,
humidity_point = 50,
}
--minetest.register_mapgen_script(minetest.get_modpath(minetest.get_current_modname()).."/mapgen.lua")