From 5591302128b7d2d57a7e3bc8e22e781e4757b49a Mon Sep 17 00:00:00 2001 From: Ginger Pollard Date: Sat, 21 Nov 2015 21:03:52 -0500 Subject: [PATCH] new stuff --- depends.txt | 3 +- init.lua | 418 +++++++++++++++++- models/cg_decor_metalroof.obj | 70 +++ models/cg_decor_metalroof_corner.obj | 92 ++++ models/cg_decor_metalroof_flat.obj | 63 +++ models/cg_decor_metalroof_valley.obj | 64 +++ textures/cg_decor_bg.png | Bin 0 -> 84 bytes textures/cg_decor_carpet.png | Bin 0 -> 7422 bytes textures/cg_decor_carpet_overlay.png | Bin 0 -> 478 bytes textures/cg_decor_corner_overlay.png | Bin 0 -> 595 bytes textures/cg_decor_corner_overlay2.png | Bin 0 -> 597 bytes textures/cg_decor_metalroof_green.png | Bin 0 -> 465 bytes textures/cg_decor_metalroof_overlay.png | Bin 0 -> 843 bytes textures/cg_decor_metalroof_overlay_rusty.png | Bin 0 -> 2713 bytes textures/cg_decor_siding.png | Bin 0 -> 197 bytes textures/cg_decor_siding_corner_top.png | Bin 0 -> 266 bytes textures/cg_decor_siding_top.png | Bin 0 -> 271 bytes textures/cg_decor_siding_wall.png | Bin 0 -> 532 bytes textures/cg_decor_wood.png | Bin 0 -> 284 bytes 19 files changed, 698 insertions(+), 12 deletions(-) create mode 100644 models/cg_decor_metalroof.obj create mode 100644 models/cg_decor_metalroof_corner.obj create mode 100644 models/cg_decor_metalroof_flat.obj create mode 100644 models/cg_decor_metalroof_valley.obj create mode 100644 textures/cg_decor_bg.png create mode 100644 textures/cg_decor_carpet.png create mode 100644 textures/cg_decor_carpet_overlay.png create mode 100644 textures/cg_decor_corner_overlay.png create mode 100644 textures/cg_decor_corner_overlay2.png create mode 100644 textures/cg_decor_metalroof_green.png create mode 100644 textures/cg_decor_metalroof_overlay.png create mode 100644 textures/cg_decor_metalroof_overlay_rusty.png create mode 100644 textures/cg_decor_siding.png create mode 100644 textures/cg_decor_siding_corner_top.png create mode 100644 textures/cg_decor_siding_top.png create mode 100644 textures/cg_decor_siding_wall.png create mode 100644 textures/cg_decor_wood.png diff --git a/depends.txt b/depends.txt index 8fd1e2b..bc5d454 100644 --- a/depends.txt +++ b/depends.txt @@ -1,3 +1,4 @@ default game? -stairs? \ No newline at end of file +stairs +homedecor? \ No newline at end of file diff --git a/init.lua b/init.lua index 9c0918e..fb7f75c 100644 --- a/init.lua +++ b/init.lua @@ -70,10 +70,176 @@ minetest.register_node("cg_decor:sunflower", { }, }) +minetest.register_node("cg_decor:window_sill", { + description = "Window sill", + tiles = {"cg_decor_siding_wall.png"}, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + node_box = { + type = "fixed", + fixed = { + {-0.625, -0.625, -0.5625, 0.625, -0.4375, -0.5}, + {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}, + {-0.625, -0.625, 0.5, 0.625, -0.4375, 0.5625}, + } + }, + groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("cg_decor:wall", { + description = "Dryall", + tiles = {"cg_decor_siding_wall.png"}, + groups = {tree=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, + sounds = default.node_sound_wood_defaults(), +}) + -------------------------------------------------------------------------------------------- -- Blocks ---------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- +if minetest.get_modpath("homedecor") then + +end + +local roof_list = { + {"Red", "#900000:150"}, + {"Green", "#006500:200"}, + {"Dark_grey", "#202020:200"}, + {"Silver", "#b0b0b0:175"}, + {"Rusty", "#ffffff:150"}, +} + +for i in ipairs(roof_list) do + local desc = roof_list[i][1] + local color = desc:lower() + local value = roof_list[i][2] + local extra = "" + if color == "rusty" then extra = "^cg_decor_metalroof_overlay_rusty.png" end + + minetest.register_node("cg_decor:metal_roof_"..color, { + description = "Metal Roof ("..desc..")", + drawtype = "mesh", + mesh = "cg_decor_metalroof.obj", + tiles = {"(cg_decor_bg.png^[colorize:"..value..")^cg_decor_metalroof_overlay.png"..extra}, + paramtype = "light", + paramtype2 = "facedir", + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + {-0.5, -0.25, -0.25, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.25, 0.5}, + {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5} + } + }, + collision_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + {-0.5, -0.25, -0.25, 0.5, 0, 0.5}, + {-0.5, 0, 0, 0.5, 0.25, 0.5}, + {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5} + } + }, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + on_place = minetest.rotate_node, + sounds = default.node_sound_wood_defaults() + }) + + minetest.register_node("cg_decor:metal_roof_"..color.."_corner", { + description = "Metal Roof Corner ("..desc..")", + drawtype = "mesh", + mesh = "cg_decor_metalroof_corner.obj", + tiles = {"(cg_decor_bg.png^[colorize:"..value..")^cg_decor_metalroof_overlay.png"..extra}, + paramtype = "light", + paramtype2 = "facedir", + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + {-0.5, -0.25, -0.25, 0.25, 0, 0.5}, + {-0.5, 0, 0, 0, 0.25, 0.5}, + {-0.5, 0.25, 0.25, -0.25, 0.5, 0.5} + } + }, + collision_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + {-0.5, -0.25, -0.25, 0.25, 0, 0.5}, + {-0.5, 0, 0, 0, 0.25, 0.5}, + {-0.5, 0.25, 0.25, -0.25, 0.5, 0.5} + } + }, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + on_place = minetest.rotate_node, + sounds = default.node_sound_wood_defaults() + }) + + minetest.register_node("cg_decor:metal_roof_"..color.."_valley", { + description = "Metal Roof Valley ("..desc..")", + drawtype = "mesh", + mesh = "cg_decor_metalroof_valley.obj", + tiles = {"(cg_decor_bg.png^[colorize:"..value..")^cg_decor_metalroof_overlay.png"..extra}, + paramtype = "light", + paramtype2 = "facedir", + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + {-0.5, -0.5, -0.25, 0.5, 0, 0.5}, + {-0.5, -0.5, -0.5, 0.25, 0, 0.5}, + {-0.5, 0, -0.5, 0, 0.25, 0.5}, + {-0.5, 0, 0, 0.5, 0.25, 0.5}, + {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5}, + {-0.5, 0.25, -0.5, -0.25, 0.5, 0.5}, + } + }, + collision_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, + {-0.5, -0.5, -0.25, 0.5, 0, 0.5}, + {-0.5, -0.5, -0.5, 0.25, 0, 0.5}, + {-0.5, 0, -0.5, 0, 0.25, 0.5}, + {-0.5, 0, 0, 0.5, 0.25, 0.5}, + {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5}, + {-0.5, 0.25, -0.5, -0.25, 0.5, 0.5}, + } + }, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + on_place = minetest.rotate_node, + sounds = default.node_sound_wood_defaults() + }) + +minetest.register_node("cg_decor:metal_roof_"..color.."_flat", { + description = "Metal Roof Flat ("..desc..")", + drawtype = "mesh", + mesh = "cg_decor_metalroof_flat.obj", + tiles = {"(cg_decor_bg.png^[colorize:"..value..")^cg_decor_metalroof_overlay.png"..extra}, + paramtype = "light", + paramtype2 = "facedir", + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.4, 0.5}, + } + }, + collision_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.4, 0.5}, + } + }, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + on_place = minetest.rotate_node, + sounds = default.node_sound_wood_defaults() + }) + +end + minetest.register_craft({ output = 'cg_decor:floor_block_white 4', recipe = { @@ -99,7 +265,8 @@ local color_list = { {"Black", "#000000:200"}, {"Dark_grey", "#202020:200"}, {"Grey", "#b0b0b0:175"}, - {"White", "#ffffff:000"}, + {"White", "#ffffff:150"}, + {"Orange", "#a04000:185"}, } local ore_list = { @@ -116,6 +283,177 @@ for i in ipairs(color_list) do local color = desc:lower() local value = color_list[i][2] + stairs.register_stair("carpeted_wood_"..color, "cg_decor:carpetblock_wood_"..color, + {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3}, + {"cg_decor_carpet.png^[colorize:"..value, + "default_wood.png", + "default_wood.png", + "default_wood.png", + "default_wood.png", + "default_wood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")"}, + "Carpeted Wooden Stair", + default.node_sound_defaults()) + + stairs.register_slab("carpeted_wood_"..color, "cg_decor:carpetblock_wood_"..color, + {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3}, + {"cg_decor_carpet.png^[colorize:"..value, + "default_wood.png", + "default_wood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")", + "default_wood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")", + "default_wood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")", + "default_wood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")"}, + "Carpeted Wooden Slab", + default.node_sound_defaults()) + + stairs.register_stair("carpeted_junglewood_"..color, "cg_decor:carpetblock_junglewood_"..color, + {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3}, + {"cg_decor_carpet.png^[colorize:"..value, + "default_junglewood.png", + "default_junglewood.png", + "default_junglewood.png", + "default_junglewood.png", + "default_junglewood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")"}, + "Carpeted Wooden Stair", + default.node_sound_defaults()) + + stairs.register_slab("carpeted_junglewood_"..color, "cg_decor:carpetblock_junglewood_"..color, + {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3}, + {"cg_decor_carpet.png^[colorize:"..value, + "default_junglewood.png", + "default_junglewood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")", + "default_junglewood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")", + "default_junglewood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")", + "default_junglewood.png^(cg_decor_carpet_overlay.png^[colorize:"..value..")"}, + "Carpeted Wooden Slab", + default.node_sound_defaults()) + + minetest.register_node("cg_decor:carpet_"..color, { + description = "Carpet layer ("..desc..")", + tiles = {"cg_decor_carpet.png^[colorize:"..value }, + paramtype = "light", + drawtype = "nodebox", + paramtype2 = "facedir", + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -0.4875, 0.5 + }}, + groups = {choppy=2,oddly_breakable_by_hand=2,flammable=2}, + sounds = default.node_sound_wood_defaults(), + }) + + minetest.register_node("cg_decor:carpetblock_"..color, { + description = "Carpet or drywall("..desc..")", + tiles = {"cg_decor_carpet.png^[colorize:"..value, "cg_decor_siding_wall.png" }, + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0.5125, 0.5}, + }, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + }, + groups = {choppy=2,oddly_breakable_by_hand=1,flammable=2}, + sounds = default.node_sound_wood_defaults(), + }) + + minetest.register_node("cg_decor:carpetblock_wood_"..color, { + description = "Carpet on Wood ("..desc..")", + tiles = {"cg_decor_carpet.png^[colorize:"..value, "default_wood.png" }, + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0.5125, 0.5}, + }, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + }, + groups = {choppy=2,oddly_breakable_by_hand=1,flammable=2}, + sounds = default.node_sound_wood_defaults(), + }) + + minetest.register_node("cg_decor:carpetblock_junglewood_"..color, { + description = "Carpet on Junglewood ("..desc..")", + tiles = {"cg_decor_carpet.png^[colorize:"..value, "default_junglewood.png" }, + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0.5125, 0.5}, + }, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + }, + groups = {choppy=2,oddly_breakable_by_hand=1,flammable=2}, + sounds = default.node_sound_wood_defaults(), + }) + + minetest.register_node("cg_decor:siding_"..color, { + description = "Siding "..desc, + tiles = {"cg_decor_siding_top.png^[colorize:"..value, "cg_decor_siding_top.png^[colorize:"..value.."^[transformR180", + "cg_decor_siding.png^[colorize:"..value, "cg_decor_siding.png^[colorize:"..value, + "cg_decor_siding_wall.png", "cg_decor_siding.png^[colorize:"..value}, + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = {{-0.5, -0.5, -0.375, 0.5, 0.5, 0.5}, + {-0.5, -0.459958, -0.4375, 0.5, -0.172287, -0.375}, + {-0.5, 0.203899, -0.4375, 0.5, 0.5, -0.375}, + {-0.5, -0.12803, -0.4375, 0.5, 0.165964, -0.375}, + }}, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + }, + groups = {choppy=2,oddly_breakable_by_hand=1,flammable=2}, + sounds = default.node_sound_wood_defaults(), + }) + + minetest.register_node("cg_decor:siding_"..color.."_insidecorner", { + description = "Siding inside corner"..desc, + tiles = {"cg_decor_siding.png^[colorize:"..value, "cg_decor_siding.png^[colorize:"..value, + "cg_decor_siding_wall.png", "cg_decor_siding.png^[colorize:"..value.."^(cg_decor_corner_overlay.png^[transformR180)", + "cg_decor_siding_wall.png", "cg_decor_siding.png^[colorize:"..value.."^cg_decor_corner_overlay.png"}, + paramtype = "light", + paramtype2 = "facedir", + groups = {choppy=2,oddly_breakable_by_hand=1,flammable=2}, + sounds = default.node_sound_wood_defaults(), + }) + + minetest.register_node("cg_decor:siding_"..color.."_corner", { + description = "Siding corner "..desc, + tiles = {"cg_decor_siding_corner_top.png^[colorize:"..value, "cg_decor_siding_corner_top.png^[colorize:"..value.."^[transformR270", + "cg_decor_siding.png^[colorize:"..value.."^cg_decor_corner_overlay2.png", "cg_decor_siding.png^[colorize:"..value.."^(cg_decor_corner_overlay.png^[transformR180)", + "cg_decor_siding.png^[colorize:"..value.."^(cg_decor_corner_overlay2.png^[transformR180)", "cg_decor_siding.png^[colorize:"..value.."^cg_decor_corner_overlay.png"}, + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = {{-0.375, -0.5, -0.375, 0.5, 0.5, 0.5}, + {-0.375, -0.459958, -0.4375, 0.5, -0.172287, -0.375}, + {-0.375, 0.203899, -0.4375, 0.5, 0.5, -0.375}, + {-0.375, -0.12803, -0.4375, 0.5, 0.165964, -0.375}, + {-0.4375, 0.203899, -0.4375, -0.375, 0.5, 0.5}, + {-0.4375, -0.12803, -0.4375, -0.375, 0.165964, 0.5}, + {-0.4375, -0.456797, -0.4375, -0.375, -0.172287, 0.5}, + {-0.5, -0.5, -0.5, -0.3125, 0.5, -0.375}, + {-0.5, -0.5, -0.5, -0.375, 0.5, -0.3125}, + }}, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + }, + groups = {choppy=2,oddly_breakable_by_hand=1,flammable=2}, + sounds = default.node_sound_wood_defaults(), + }) + minetest.register_craft( { type = "shapeless", output = 'cg_decor:floor_block_'..color, @@ -314,7 +652,25 @@ function cg_decor.register_tree(treename, tree_image, drop) --global tree regist minetest.register_node("cg_decor:"..treename.."_tree_large", { description = "Large "..treename.." tree", drawtype = "plantlike", - visual_scale = 1.0, + visual_scale = 1.5, + tiles = {tree_image}, + inventory_image = tree_image, + wield_image = tree_image, + paramtype = "light", + walkable = false, + is_ground_content = true, + 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}, + sounds = default.node_sound_leaves_defaults(), + }) + + minetest.register_node("cg_decor:"..treename.."_tree_extralarge", { + description = "Extra large "..treename.." tree", + drawtype = "plantlike", + visual_scale = 1.9, tiles = {tree_image}, inventory_image = tree_image, wield_image = tree_image, @@ -361,7 +717,7 @@ function cg_decor.register_tree(treename, tree_image, drop) --global tree regist walkable = false, climbable = true, is_ground_content = false, - groups = {snappy=3, leafdecay=2, flammable=2, leaves=1}, + groups = {snappy=3, leafdecay=3, flammable=2, leaves=1}, drop = { max_items = 5, items = {{items = {drop_lg},}} @@ -389,7 +745,7 @@ function cg_decor.register_tree(treename, tree_image, drop) --global tree regist local is_soil = minetest.get_item_group(nu, "soil") if is_soil == 0 then minetest.remove_node(pos) - minetest.spawn_item(pos, "cg_decor:"..treename) + minetest.spawn_item(pos, "cg_decor:"..treename.."_tree") return end if (node2.name == "air" or node2.name == "ignore") and (node3.name == "air" or node3.name == "ignore") @@ -399,7 +755,7 @@ function cg_decor.register_tree(treename, tree_image, drop) --global tree regist minetest.add_node({x = pos.x, y = pos.y+2, z = pos.z}, { name = "cg_decor:"..treename.."_leaves" }) else minetest.remove_node(pos) - minetest.spawn_item(pos, "cg_decor:"..treename) + minetest.spawn_item(pos, "cg_decor:"..treename.."_tree") return end end @@ -418,7 +774,7 @@ function cg_decor.register_tree(treename, tree_image, drop) --global tree regist local is_soil = minetest.get_item_group(nu, "soil") if is_soil == 0 then minetest.remove_node(pos) - minetest.spawn_item(pos, "cg_decor:"..treename.."_large") + minetest.spawn_item(pos, "cg_decor:"..treename.."_tree_large") return end if (node2.name == "air" or node2.name == "ignore") and (node3.name == "air" or node3.name == "ignore") @@ -428,7 +784,39 @@ function cg_decor.register_tree(treename, tree_image, drop) --global tree regist minetest.add_node({x = pos.x, y = pos.y+2, z = pos.z}, { name = "cg_decor:"..treename.."_leaves_large" }) else minetest.remove_node(pos) - minetest.spawn_item(pos, "cg_decor:"..treename.."_large") + minetest.spawn_item(pos, "cg_decor:"..treename.."_tree_large") + return + end + end + }) + + minetest.register_abm({ + nodenames = {"cg_decor:"..treename.."_tree_extralarge"}, + interval = 1, + chance = 1, + action = function(pos, node) + local nu = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name + local node2 = minetest.get_node({x = pos.x, y = pos.y+1, z = pos.z}) + local node3 = minetest.get_node({x = pos.x, y = pos.y+2, z = pos.z}) + local node4 = minetest.get_node({x = pos.x, y = pos.y+3, z = pos.z}) + local node5 = minetest.get_node({x = pos.x, y = pos.y+4, z = pos.z}) + local node6 = minetest.get_node({x = pos.x, y = pos.y+5, z = pos.z}) + local is_soil = minetest.get_item_group(nu, "soil") + if is_soil == 0 then + minetest.remove_node(pos) + minetest.spawn_item(pos, "cg_decor:"..treename.."_tree_extralarge") + return + end + if (node2.name == "air" or node2.name == "ignore") and (node3.name == "air" or node3.name == "ignore") + and (node4.name == "air" or node4.name == "ignore") and (node5.name == "air" or node5.name == "ignore") + and (node6.name == "air" or node6.name == "ignore") then + minetest.add_node(pos, { name = "cg_decor:tree_trunk_base" }) + minetest.add_node({x = pos.x, y = pos.y+1, z = pos.z}, { name = "cg_decor:tree_trunk" }) + minetest.add_node({x = pos.x, y = pos.y+2, z = pos.z}, { name = "cg_decor:tree_trunk" }) + minetest.add_node({x = pos.x, y = pos.y+3, z = pos.z}, { name = "cg_decor:"..treename.."_leaves_large" }) + else + minetest.remove_node(pos) + minetest.spawn_item(pos, "cg_decor:"..treename.."_tree_extralarge") return end end @@ -684,7 +1072,7 @@ minetest.register_node("cg_decor:tree_trunk", { max_items = 1, items = {{items = {'default:stick 2'},}} }, - groups = {snappy=3,flammable=2,leafdecay=1}, + groups = {snappy=3,flammable=2,leafdecay=2}, sounds = default.node_sound_leaves_defaults(), }) @@ -858,8 +1246,10 @@ local air_node = minetest.get_content_id("air") local ignore_node = minetest.get_content_id("ignore") local tree_node = minetest.get_content_id("default:tree") local jtree_node = minetest.get_content_id("default:jungletree") +local dleaf_node = minetest.get_content_id("default:leaves") local leaf_node = minetest.get_content_id("cg_decor:leaves") local jleaf_node = minetest.get_content_id("cg_decor:jungleleaves") +local djleaf_node = minetest.get_content_id("default:jungleleaves") local apple_node = minetest.get_content_id("default:apple") function cg_decor.grow_tree(data, a, pos, is_apple_tree) @@ -885,7 +1275,9 @@ function cg_decor.grow_tree(data, a, pos, is_apple_tree) end for tree_h = 0, height-1 do local area_t = a:index(pos.x, pos.y+tree_h, pos.z) - if data[area_t] == air_node or data[area_t] == leaf_node or data[area_t] == apple_node then + if data[area_t] == air_node or data[area_t] == rleaf_node or data[area_t] == ignore_node + or data[area_t] == leaf_node or data[area_t] == jleaf_node or data[area_t] == dleaf_node + or data[area_t] == djleaf_node or data[area_t] == apple_node then data[area_t] = tree_node end end @@ -909,7 +1301,9 @@ function cg_decor.grow_jungletree(data, a, pos) end for tree_h = 0, height-1 do local area_t = a:index(pos.x, pos.y+tree_h, pos.z) - if data[area_t] == air_node or data[area_t] == jleaf_node then + if data[area_t] == air_node or data[area_t] == rleaf_node or data[area_t] == ignore_node + or data[area_t] == leaf_node or data[area_t] == jleaf_node or data[area_t] == dleaf_node + or data[area_t] == djleaf_node then data[area_t] = jtree_node end end @@ -960,7 +1354,9 @@ function cg_decor.grow_redwood(data, a, pos) for z_dir = -1, 1 do if math.abs(x_dir) + math.abs(z_dir) == 1 then local area_t = a:index(pos.x+x_dir, pos.y+tree_h, pos.z+z_dir) - if data[area_t] == air_node or data[area_t] == rleaf_node or data[area_t] == ignore_node then + if data[area_t] == air_node or data[area_t] == rleaf_node or data[area_t] == ignore_node + or data[area_t] == leaf_node or data[area_t] == jleaf_node or data[area_t] == dleaf_node + or data[area_t] == djleaf_node then data[area_t] = rtree_node end elseif x_dir == 0 and z_dir == 0 and tree_h > 0 then diff --git a/models/cg_decor_metalroof.obj b/models/cg_decor_metalroof.obj new file mode 100644 index 0000000..4bdb87c --- /dev/null +++ b/models/cg_decor_metalroof.obj @@ -0,0 +1,70 @@ +# Blender v2.66 (sub 1) OBJ File: '' +# www.blender.org +mtllib cg_decor_metalroof.mtl +o Plane_Plane.006 +v 0.500000 0.497297 0.499723 +v 0.500000 -0.499723 -0.497297 +v 0.500000 -0.457297 -0.539723 +v 0.500000 0.539723 0.457297 +vt 0.441250 0.000071 +vt 0.561848 0.000071 +vt 0.561848 0.999929 +vt 0.441250 0.999929 +usemtl Material.004 +s off +f 1/1 2/2 3/3 4/4 +o Cube_Cube.002_Cube_Cube.002_front-back-bottom +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 -0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +usemtl None +s off +f 5/5 6/6 7/7 8/8 +f 8/7 7/8 9/5 10/6 +f 6/5 5/6 10/7 9/8 +o Cube_Cube.002_Cube_Cube.002_sides +v -0.500000 0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v 0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 -0.500000 +vt 1.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 0.000000 1.000000 +usemtl None_NONE +s off +f 11/9 12/10 13/11 +f 14/12 15/10 16/11 +o Plane_Plane.000 +v 0.000000 0.497297 0.499723 +v -0.000000 -0.499723 -0.497297 +v -0.000000 -0.457297 -0.539723 +v 0.000000 0.539723 0.457297 +vt 0.441250 0.000071 +vt 0.561848 0.000071 +vt 0.561848 0.999929 +vt 0.441250 0.999929 +usemtl Material.001 +s off +f 17/13 18/14 19/15 20/16 +o Plane_Plane.001 +v -0.500000 0.497297 0.499723 +v -0.500000 -0.499723 -0.497297 +v -0.500000 -0.457297 -0.539723 +v -0.500000 0.539723 0.457297 +vt 0.441250 0.000071 +vt 0.561848 0.000071 +vt 0.561848 0.999929 +vt 0.441250 0.999929 +usemtl Material.002 +s off +f 21/17 22/18 23/19 24/20 diff --git a/models/cg_decor_metalroof_corner.obj b/models/cg_decor_metalroof_corner.obj new file mode 100644 index 0000000..ecf1085 --- /dev/null +++ b/models/cg_decor_metalroof_corner.obj @@ -0,0 +1,92 @@ +# Blender v2.66 (sub 1) OBJ File: '' +# www.blender.org +mtllib cg_decor_metalroof_corner.mtl +o Plane_Plane.003 +v -0.534483 -0.465073 -0.000000 +v -0.499128 -0.500428 -0.000000 +v 0.009989 0.008689 0.000000 +v -0.025366 0.044044 0.000000 +vt 0.000071 0.000071 +vt 0.500000 0.000071 +vt 0.500000 0.999929 +vt 0.000071 0.999929 +usemtl Material.005 +s off +f 1/1 2/2 3/3 4/4 +o Plane_Plane.006 +v 0.500000 0.497297 0.499723 +v 0.500000 -0.499723 -0.497297 +v 0.500000 -0.457297 -0.539723 +v 0.500000 0.539723 0.457297 +vt 0.441250 0.000071 +vt 0.561848 0.000071 +vt 0.561848 0.999929 +vt 0.441250 0.999929 +usemtl Material.004 +s off +f 5/5 6/6 7/7 8/8 +o Cube_Cube.002_Cube_Cube.002_None +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 -0.500000 +v 0.500000 0.500000 0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +usemtl None +s off +f 9/9 10/10 11/11 12/12 +f 13/10 9/11 12/12 +f 10/11 9/12 13/9 +f 13/9 11/11 10/12 +f 13/10 12/11 11/12 +o Plane_Plane.001 +v 0.499723 0.497297 0.499999 +v -0.497297 -0.499723 0.500001 +v -0.539723 -0.457297 0.500001 +v 0.457297 0.539723 0.499999 +vt 0.441250 0.000071 +vt 0.561848 0.000071 +vt 0.561848 0.999929 +vt 0.441250 0.999929 +usemtl Material.002 +s off +f 14/13 15/14 16/15 17/16 +o Plane_Plane.000 +v 0.497732 0.499239 0.497120 +v -0.500336 -0.501070 -0.500946 +v -0.524868 -0.452118 -0.525478 +v 0.473201 0.548192 0.472589 +vt 0.441250 0.000071 +vt 0.561848 0.000071 +vt 0.561848 0.999929 +vt 0.441250 0.999929 +usemtl Material.001 +s off +f 18/17 19/18 20/19 21/20 +o Plane_Plane.002 +v 0.500000 0.497297 0.499723 +v 0.500000 -0.499723 -0.497297 +v 0.500000 -0.457297 -0.539723 +v 0.500000 0.539723 0.457297 +vt 0.441250 0.000071 +vt 0.561848 0.000071 +vt 0.561848 0.999929 +vt 0.441250 0.999929 +usemtl Material.003 +s off +f 22/21 23/22 24/23 25/24 +o Plane_Plane.004 +v -0.000000 -0.466509 -0.540053 +v -0.000000 -0.501865 -0.504698 +v 0.000000 0.007252 0.004419 +v 0.000000 0.042607 -0.030936 +vt 0.000071 0.000071 +vt 0.500000 0.000071 +vt 0.500000 0.999929 +vt 0.000071 0.999929 +usemtl Material.006 +s off +f 26/25 27/26 28/27 29/28 diff --git a/models/cg_decor_metalroof_flat.obj b/models/cg_decor_metalroof_flat.obj new file mode 100644 index 0000000..28eb3a2 --- /dev/null +++ b/models/cg_decor_metalroof_flat.obj @@ -0,0 +1,63 @@ +# Blender v2.66 (sub 1) OBJ File: '' +# www.blender.org +mtllib cg_decor_metalroof_flat.mtl +o Plane_Plane.007 +v -0.500000 -0.499000 0.500000 +v -0.500000 -0.499000 -0.500000 +v -0.500000 -0.449000 -0.500000 +v -0.500000 -0.449000 0.500000 +vt 0.443312 0.000071 +vt 0.563565 0.000071 +vt 0.561848 0.999929 +vt 0.441594 0.999929 +usemtl Material.007 +s off +f 1/1 2/2 3/3 4/4 +o Plane_Plane.005 +v 0.000000 -0.499000 0.500000 +v -0.000000 -0.499000 -0.500000 +v -0.000000 -0.449000 -0.500000 +v 0.000000 -0.449000 0.500000 +vt 0.443312 0.000071 +vt 0.563565 0.000071 +vt 0.561848 0.999929 +vt 0.441594 0.999929 +usemtl Material.005 +s off +f 5/5 6/6 7/7 8/8 +o Plane_Plane.004 +v 0.500000 -0.499000 0.500000 +v 0.499999 -0.499000 -0.500000 +v 0.499999 -0.449000 -0.500000 +v 0.500000 -0.449000 0.500000 +vt 0.443312 0.000071 +vt 0.563565 0.000071 +vt 0.561848 0.999929 +vt 0.441594 0.999929 +usemtl Material.006 +s off +f 9/9 10/10 11/11 12/12 +o Plane_Plane.003 +v -0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 -0.500000 +vt 0.000071 0.000071 +vt 0.996606 0.000071 +vt 0.996606 0.999929 +vt 0.000071 0.999929 +usemtl Material.008 +s off +f 13/13 14/14 15/15 16/16 +o Plane_Plane.000_Plane_Plane.008 +v -0.500000 -0.499000 0.500000 +v 0.500000 -0.499000 0.500000 +v 0.500000 -0.499000 -0.500000 +v -0.500000 -0.499000 -0.500000 +vt 0.000071 0.000071 +vt 0.996606 0.000071 +vt 0.996606 0.999929 +vt 0.000071 0.999929 +usemtl Material.009 +s off +f 17/17 18/18 19/19 20/20 diff --git a/models/cg_decor_metalroof_valley.obj b/models/cg_decor_metalroof_valley.obj new file mode 100644 index 0000000..97e0f08 --- /dev/null +++ b/models/cg_decor_metalroof_valley.obj @@ -0,0 +1,64 @@ +# Blender v2.66 (sub 1) OBJ File: '' +# www.blender.org +mtllib cg_decor_metalroof_valley.mtl +o Cube_Cube.000_Cube_Cube.000_None +v 0.500000 0.500000 -0.500000 +v 0.500000 0.500000 0.500000 +v 0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 -0.500000 +v -0.500000 0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +usemtl None.001 +s off +f 1/1 2/2 3/3 4/4 +f 5/1 6/3 7/4 +f 5/1 2/2 6/4 +f 1/2 4/3 8/4 +f 8/1 4/2 3/3 7/4 +f 7/3 3/4 2/1 5/2 +f 2/1 1/2 8/3 +f 2 9 +f 7 9 +o Plane_Plane.005 +v 0.497732 0.499239 0.497120 +v -0.500336 -0.501070 -0.500946 +v -0.524868 -0.452118 -0.525478 +v 0.473201 0.548192 0.472589 +vt 0.441250 0.000071 +vt 0.561848 0.000071 +vt 0.561848 0.999929 +vt 0.441250 0.999929 +usemtl Material.007 +s off +f 10/5 11/6 12/7 13/8 +o Plane_Plane.003 +v 0.041467 0.113546 -0.000000 +v 0.076822 0.078190 -0.000000 +v 0.501086 0.502454 0.000000 +v 0.465731 0.537810 0.000000 +vt 0.000071 0.000071 +vt 0.500000 0.000071 +vt 0.500000 0.999929 +vt 0.000071 0.999929 +usemtl Material.005 +s off +f 14/9 15/10 16/11 17/12 +o Plane_Plane.004 +v -0.000000 0.113546 0.042940 +v -0.000000 0.078190 0.078295 +v 0.000000 0.502454 0.502559 +v 0.000000 0.537810 0.467204 +vt 0.000071 0.000071 +vt 0.500000 0.000071 +vt 0.500000 0.999929 +vt 0.000071 0.999929 +usemtl Material.006 +s off +f 18/13 19/14 20/15 21/16 diff --git a/textures/cg_decor_bg.png b/textures/cg_decor_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..87c5daf6db168ce0d5ddabd155d05457b357a5e2 GIT binary patch literal 84 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;m;-!5T>t<7zx;^w2_Top)5S4_ e<9c#}#2p}S0Rv;AYOOnv#o+1c=d#Wzp$PyM{1oB< literal 0 HcmV?d00001 diff --git a/textures/cg_decor_carpet.png b/textures/cg_decor_carpet.png new file mode 100644 index 0000000000000000000000000000000000000000..d64b73bbfcf3ee69878f24769fc2f2575e622745 GIT binary patch literal 7422 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 literal 0 HcmV?d00001 diff --git a/textures/cg_decor_corner_overlay.png b/textures/cg_decor_corner_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..f851eaa7f589643fe16a432a0aea36da80f93a8f GIT binary patch literal 595 zcmV-Z0<8UsP)VGd00Hw!L_t(I%SDsPj_fKBL{Bn!u9Euy zKe0C@HO63uyo-9~?T~;}oQOyXAt*p8g>Bm;=S(Su<2Wd#FijKJb+If9F-Cgtc<)hF zoO8Hong}7VZ5z%xT5E_1)>;5+txVHIDFuLeo&iu*LAg%~5=dt!{_oDmU3 z1XX2SSG@P^`%bNuloH;1KdhbJpDWy>%A4(}W=eX}1=Nux!d7iB6O09Ja8VY*vsH%AH5fNHzgIz>0#tbY~C8fms{l+{O zs>-q~%=1jG6@Ziy)>^LX;`jF#Yb_}yoO2w<@ip>1Pkr21Rf#e3e!qu-4@xP8)*8#Q zj3Kqw{}tq%hk2@ssuDsNJt(E%z31=mkCYOAmBe`^NbBd~}+ouN-6Kky}c^TFZH!%=0|3{(Co;%!vrgvW#jzhCb(M hnnoi-2&0LQf`7;kfbYHIqP)VGd00H$$L_t(I%SDsPj^rQ^L|;PUy-Mo; z|HQtO)EI-==1?-j2?+?jhz!Jg-vP-vvuztGC34Oj$3f1SX_~mMi)C2|A<$aGIY;ju zRYj+1!h6rQZKx`>Rzw7AEdZqyrfDMQ48T0k0QBAw5zKj>hzL1nLI^nL2qBPCLPQV| zdhe|3igS*A-zlXKW5hX!-1pr}DIy{~%X`nh?}Ne^gZG|!p6R{QS{oE5=S(SuS}Opm z%FoXaIcHRr`@T_CM1=D^S=W_P$`Bd^tu=b@Un~)7t;4&BV2l~Idhf&-dB5M7=b-n_ zvMkK=OeqC`7$eqNuIu9W_ZMp|F-BCC<2b%Sp6A(BRcfvD-U%V_e!oY6kCmJ=wN{p8 z86u^W{{$(e5nk_|-aFp=(Sw{b&N=@6{)jQsTBFvAdHmH{*|v>!T?ruo@Or%nAy8`_ z){HSM%QD_*YmHJ0`@Zw}d@#nKs-%=?t+B2vwbo%JrG#@1=N!jzpsG4%eH;g^HCk)D zUN5fe8q)x9&S9-(o@Y`@-1m)%F(M+w7>AIEP)hmES%eS*PhXxAIp@As9)hPxr4&+1 z7-NR0s*Vq2t);bws(#1#`F#2`O>*Bi#+ZSdbH-ZBd7jMkJZwGpo=>JC!m=!*nopq5 jewwDyNbmh<;zRHc$TooQ3y%J@00000NkvXXu0mjfquvvO literal 0 HcmV?d00001 diff --git a/textures/cg_decor_metalroof_green.png b/textures/cg_decor_metalroof_green.png new file mode 100644 index 0000000000000000000000000000000000000000..350644ce702aad2ae721da4ec1de54c6f0611729 GIT binary patch literal 465 zcmV;?0WSWDP)*8?azy|D010qNS#tmY z3ljhU3ljkVnw%H_000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0003f zNkl zXYVW)-Ybb~#?;bFZ4w64XD|MCN!$q;XJPD;Fpl9-6_rcENW?taN{d7<5aLIx7ZNur zEFzs-But)`PFA=i%zgg5lF}k!ilxvSVUsX@kEv$R33Hd1O!^iH(@PU4i(L{uzAXZ- zE%Fkq6dZZ;>#hY?te-bBH(%k1kmsNaS98c1c_@7A%&^Cefd7X4A*|$ekFk z-u>s@gH6^&ophWvMYUpdui7d*F_;ABOWB>6F?Qlv{SKY~2oMv5#H#(z00000NkvXX Hu0mjf)0L+8 literal 0 HcmV?d00001 diff --git a/textures/cg_decor_metalroof_overlay.png b/textures/cg_decor_metalroof_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..130e274a61abd6c278b9faafb7ef4fbbdf703af9 GIT binary patch literal 843 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 M>FVdQ&MBb@00$aqeEanMpx{AI z7sn8d^HT#2`C1Hkj3?;6I@R|>>i@ZWqOH9}&hKgjL)7Q0Z!f%KA-gU2F#GdLrWwmR zZ3N62cdqMhFO5BUHYakLLZot`^op&MRkUB9FnGH9xvX literal 0 HcmV?d00001 diff --git a/textures/cg_decor_siding_wall.png b/textures/cg_decor_siding_wall.png new file mode 100644 index 0000000000000000000000000000000000000000..61ebb059bb24ebd0c8723595f1d8dad87248816e GIT binary patch literal 532 zcmV+v0_**WP)VGd00Fc~L_t(2&n=S8jszhHgh4^=pP6Ld z{}J~x$=bFyD0^UUMy=FG6 zPDFD~M2s;4fU2gHL<9hG&H!L$h#0QxLPQa1tub?JZH$44h-hZpwlVW@9ID!TXJ&k! zM^zCK005xYdK`zFgb-@2IcGClYq?1f5mlXY0ss+xJ|7VwqUU*t2obOA+O|zqUH0#= z)-p3@M#MR%(<5RC!3oW*_x^srgI}3hDJAEussPY?k1^i&{qyq^W9+>X(RrR`hSzm@ zK4#Whd%xd4v4e@ooU@eT8dd#w7-RUjW@cu!R_{SXnEChjxA(r*nsWvRopbK{zHM7; z4FF!RS8Hv~>5w6WQi^}0wU(+L$MOAsLkL7P##n1@+cxKPurUTRGxK?#L_{9>d7f*n zwbtwPy6@Yw0sv-?G3K1d7|-*B-a8`p-d%=>o-!h~*1RQejhRa+!5zFfRUKo55L{10 zzH>3gwH6VX8GgUtl+yD&Ap~a-kr?B3T{&kb^jBX;Lc~&v*Y4B%A*JMf*IK=4clZO@ WGJEeV0fH?60000iW*Vas%WsP3p&Z>0@20`}9 z3+p@@la1$Ax^`yUCVOkOXWM?gc4#Y5F=v5CWHAE+w=f7ZGR&GI0Tf*5>EamTas2Hi zL#{&(0&Wl4xrMBkb8Or6gkhqhoWdJcvA`o<0v}n#`t0^A<*JRpr@o9n@!*4z@zeLxIrH{vzx-&lcgn$e(_gBoY96he zV&OY)o91aQYtx;)USStxruDC#R2gXQrn>L+>+c)?OccnrZ;9UN=J9snw}9#uwpZk` e`0KxXVEukgFX7C)Dbhg4GI+ZBxvX