From d57058549adf6ce89789142ba3e273eba109f163 Mon Sep 17 00:00:00 2001 From: Mat Date: Sun, 13 Jul 2014 08:32:42 +0100 Subject: [PATCH] Pine trees, pine saplings. Pine wood, slabs, stairs. Bucket of fresh water --- depends.txt | 2 + functions.lua | 72 ++++++++++++++++++++++ init.lua | 12 +++- nodes.lua | 80 +++++++++++++++++++++++++ textures/riverdev_bucketfreshwater.png | Bin 0 -> 330 bytes textures/riverdev_needles.png | Bin 0 -> 860 bytes textures/riverdev_pineling.png | Bin 0 -> 406 bytes textures/riverdev_pinetree.png | Bin 0 -> 693 bytes textures/riverdev_pinetreetop.png | Bin 0 -> 802 bytes textures/riverdev_pinewood.png | Bin 0 -> 366 bytes 10 files changed, 163 insertions(+), 3 deletions(-) create mode 100644 textures/riverdev_bucketfreshwater.png create mode 100644 textures/riverdev_needles.png create mode 100644 textures/riverdev_pineling.png create mode 100644 textures/riverdev_pinetree.png create mode 100644 textures/riverdev_pinetreetop.png create mode 100644 textures/riverdev_pinewood.png diff --git a/depends.txt b/depends.txt index 4ad96d5..12157ef 100644 --- a/depends.txt +++ b/depends.txt @@ -1 +1,3 @@ default +stairs +bucket diff --git a/functions.lua b/functions.lua index d37695c..6c090df 100644 --- a/functions.lua +++ b/functions.lua @@ -33,6 +33,53 @@ function riverdev_appletree(x, y, z, area, data) end end +function riverdev_pinetree(x, y, z, area, data) + local c_pinetree = minetest.get_content_id("riverdev:pinetree") + local c_needles = minetest.get_content_id("riverdev:needles") + for j = -4, 14 do + if j == 3 or j == 6 or j == 9 or j == 12 then + for i = -2, 2 do + for k = -2, 2 do + if math.abs(i) == 2 or math.abs(k) == 2 then + if math.random(7) ~= 2 then + local vil = area:index(x + i, y + j, z + k) + data[vil] = c_needles + end + end + end + end + elseif j == 4 or j == 7 or j == 10 then + for i = -1, 1 do + for k = -1, 1 do + if not (i == 0 and j == 0) then + if math.random(11) ~= 2 then + local vil = area:index(x + i, y + j, z + k) + data[vil] = c_needles + end + end + end + end + elseif j == 13 then + for i = -1, 1 do + for k = -1, 1 do + if not (i == 0 and j == 0) then + local vil = area:index(x + i, y + j, z + k) + data[vil] = c_needles + local vila = area:index(x + i, y + j + 1, z + k) + data[vila] = c_needles + end + end + end + end + local vit = area:index(x, y + j, z) + data[vit] = c_pinetree + end + local vil = area:index(x, y + 15, z) + local vila = area:index(x, y + 16, z) + data[vil] = c_needles + data[vila] = c_needles +end + function riverdev_flower(data, vi) local c_danwhi = minetest.get_content_id("flowers:dandelion_white") local c_danyel = minetest.get_content_id("flowers:dandelion_yellow") @@ -83,6 +130,31 @@ minetest.register_abm({ end, }) +-- Pinetree sapling + +minetest.register_abm({ + nodenames = {"riverdev:pineling"}, + interval = 29, + chance = 5, + action = function(pos, node) + local x = pos.x + local y = pos.y + local z = pos.z + local vm = minetest.get_voxel_manip() + local pos1 = {x=x-2, y=y-4, z=z-2} + local pos2 = {x=x+2, y=y+16, z=z+2} + local emin, emax = vm:read_from_map(pos1, pos2) + local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax}) + local data = vm:get_data() + + riverdev_pinetree(x, y, z, area, data) + + vm:set_data(data) + vm:write_to_map() + vm:update_map() + end, +}) + -- Spawn flat facing south function riverdev_flatsouth(pos) diff --git a/init.lua b/init.lua index bd83f35..ccaf809 100644 --- a/init.lua +++ b/init.lua @@ -3,6 +3,11 @@ -- Depends default -- License: code WTFPL +-- Pines, pine sapling. pine wood, slabs, stairs. Bucket fresh water +-- TODO +-- autumn forest, red/orange/yellow leaves, falling leaf particls, also on ground around tree +-- cubeworld style boulders + -- Parameters local YMIN = -33000 @@ -20,7 +25,8 @@ local TRIVER = -0.018 local TRSAND = -0.02 local TPFLO = 0.03 -- Width of flora clearing around paths -local APPCHA = 1 / 4 ^ 2 -- Appletree maximum chance per grass node. 1 / n ^ 2 where n = average minimum distance between flora +local APPCHA = 1 / 5 ^ 2 -- Appletree maximum chance per grass node. 1 / n ^ 2 where n = average minimum distance between flora +local PINCHA = 1 / 6 ^ 2 -- Pinetree maximum chance per grass node local GRACHA = 1 / 4 ^ 2 -- Grasses maximum chance per grass node -- 3D noise for highland terrain @@ -202,7 +208,7 @@ minetest.register_on_generated(function(minp, maxp, seed) local densitymid = n_absmid * MIDAMP + densitybase local density = n_terrain * n_invbase * n_absmid * n_abspatha ^ 1.5 * n_abspathb ^ 1.5 + densitymid - local tstone = TSTONE * (1 + grad * 3) + local tstone = TSTONE * (1 + grad * 2) local triver = TRIVER * n_absbase local trsand = TRSAND * n_absbase @@ -286,7 +292,7 @@ minetest.register_on_generated(function(minp, maxp, seed) and nodid ~= c_wood and nodidu ~= c_wood then if math.random() < APPCHA * n_tree and tstone > 0.005 and n_abspatha > TPFLO and n_abspathb > TPFLO then - riverdev_appletree(x, y, z, area, data) + riverdev_pinetree(x, y, z, area, data) else data[viu] = c_grass if math.random() < GRACHA * n_grass then -- grasses diff --git a/nodes.lua b/nodes.lua index 92b2eef..97ae2a1 100644 --- a/nodes.lua +++ b/nodes.lua @@ -70,6 +70,59 @@ minetest.register_node("riverdev:appling", { sounds = default.node_sound_leaves_defaults(), }) +minetest.register_node("riverdev:pinetree", { + description = "Pine tree", + tiles = {"riverdev_pinetreetop.png", "riverdev_pinetreetop.png", "riverdev_pinetree.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("riverdev:needles", { + description = "Pine needles", + drawtype = "allfaces_optional", + visual_scale = 1.3, + tiles = {"riverdev_needles.png"}, + paramtype = "light", + is_ground_content = false, + groups = {snappy=3}, + drop = { + max_items = 1, + items = { + {items = {"rivedev:pineling"},rarity = 20}, + {items = {"riverdev:needles"}} + } + }, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("riverdev:pineling", { + description = "Pine sapling", + drawtype = "plantlike", + visual_scale = 1.0, + tiles = {"riverdev_pineling.png"}, + inventory_image = "riverdev_pineling.png", + wield_image = "riverdev_pineling.png", + paramtype = "light", + walkable = false, + is_ground_content = 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}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_node("riverdev:pinewood", { + description = "Pine wood planks", + tiles = {"riverdev_pinewood.png"}, + groups = {choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1}, + sounds = default.node_sound_wood_defaults(), +}) + minetest.register_node("riverdev:freshwater", { description = "Fresh Water Source", inventory_image = minetest.inventorycube("riverdev_freshwater.png"), @@ -220,3 +273,30 @@ minetest.register_node("riverdev:mixwaterflow", { groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1}, }) +-- Crafting + +minetest.register_craft({ + output = "riverdev:pinewood 4", + recipe = { + {"riverdev:pinetree"}, + } +}) + +-- Register stairs and slabs + +stairs.register_stair_and_slab("pinewood", "riverdev:pinewood", + {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3}, + {"riverdev_pinewood.png"}, + "Pinewood stair", + "Pinewood slab", + default.node_sound_wood_defaults()) + +-- Buckets + +bucket.register_liquid( + "riverdev:freshwater", + "riverdev:freshwaterflow", + "riverdev:bucket_freshwater", + "riverdev_bucketfreshwater.png", + "Fresh Water Bucket" +) diff --git a/textures/riverdev_bucketfreshwater.png b/textures/riverdev_bucketfreshwater.png new file mode 100644 index 0000000000000000000000000000000000000000..57500d6b08bdda6332b7384158c505a1d911cc04 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPggKW_b=Z`PctV`+-8IJY5_^EKZ-D zw3qjgfk5kgTNp(cgNv;k(p^48eq|`ShTX(rIhW~uO z_xHP+1M8hb&Q-29?fZ2j(9}9esj>G?{k#|n?PXG{V6ef zzfTBaVwe(S@lO8gvNSf~qajW{0-M%LrOXZWI{PDGRQpA59?cFE`?326!#O4Q VpNY@^oB{fZ!PC{xWt~$(6994}g0BDo literal 0 HcmV?d00001 diff --git a/textures/riverdev_needles.png b/textures/riverdev_needles.png new file mode 100644 index 0000000000000000000000000000000000000000..b8140575bf6a587ec533161d2880558b3ffe497d GIT binary patch literal 860 zcmV-i1Ec(jP)>zkBE9dBmQFW4mb^nu?}Tg+d4$Bv`-}*dTVS`8WI|7A)Eoh$vE3 zQDsw9r?s8NV|%dYap!Sa1c|dhNBYh=g7a7(lm+j5E+>-#O{clZ3bM3dJoH(-m&vQc zDLakYlmJM8QK-3H<=o~KeIE`2m!E$;{q#C3IR5rXk6Z`2s!8jHV9!C%OO$Hiq_3qD zSjf?kw$nVB49F_Ux>EeQT3y~NOMdz8EL3$%XBa#k4;b$C=vvJncJX~1!GH2TOLS2- zh*YuvBxG^BgH_AXX~LW37N!Np$fk7+jCTcXWO4i`#z@kxHz_f6oPeRfoF1clOad3$K$S`5nxFHvB`9nQEN@q2h)@=uc!>j{`er) zzu$N6RJ?B*41r{N+M0L`o- z>h~bAXavljzZYDj!nB2;S`_HWqq*mD^=^&p?f_V3cW+A~mu!=v>XymSXP#GB=ZSt0 z`^a2(v|6yu6+cADS>ReEo{ej?lwC*s#aL%$jj$vdn7^2bec$0Da^9p{gnvHN^-Yc% z^)Q7X+!l2EeagHhN0Vd)tAUG+pwxG>^bE;A5%lF@W m{J^nI0N&0r4xdG6Q}QphLRcP}nEqP;0000e-vd2O3fm9*zeI zmMTymd-}3FyF0V<0skI{YoG6$$ylE0hXe(-eFp&0_8p>}=g*l01)^fmcS>`cITtT{RREdB3zwEp~pWNQY**w$C$-K`jV-xOn?P_ z`J-{iBrcvrx+7k_2sCWsjnISwoQ@ltHgWPG7JZ^AnxVH&cm}a&F`bRacLMu15ePx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^n@ z11b`4D+M(G00K2hL_t(I%RQ4zjx1FS1;f7I%&h8uunnecfc>uoBqZpr%({OwNMLN~ zC>+O@-+ukY)JL{`BX~zjiJT&RPGZXZ`N!{k{`?c?>m=n3C&GE27{>WJ(FKGU=&jS| zWUWPQ9TCGj<^298$B1_x=NyRA$HY0o=0sH>B!@ahL@1@uduPtcvc)u`l*WGS*qU7B z0-*N^0&3!L?hXjfv4Ckt?~?_@5dRNtwXtjgV9Qtrsx0Q5Y&p^AWcH48j#3)ER`%xy z*LmTcQfgt@!aJqb4uF~&wM`IZj>$qvG0^J8XpLjvK$KD%qc)DbQEJ211p9Y|1s|bP$sM-Rj)Kan8S#zMyvmXx(!$dGM<}y-F04y6U zTP(P1Oet`lZ{oJoS_2kN9Wh2;*F`Ih7$e7i<3FFDEE_1Gf?;BuuWugvjyfzMtK)h73Tvn`nv@M zuCtJigRj58cz!%N&o@4JFeM!a0HwBDE=GA@Y}%0gdkaMQBL96X{U>Iu*+PkpUqSwlt6I3xXQV56$wN_G0j4_yfGR^K41jENn zX@j(FU`oyz?;@(oyHt+jKvkJ$_bljt4d4;IHJTBEC#Q%4$FX5z1aY*{Q0H$lz^lK1 b!YTg%;Xz=CmniwT00000NkvXXu0mjfhT1f1 literal 0 HcmV?d00001 diff --git a/textures/riverdev_pinetreetop.png b/textures/riverdev_pinetreetop.png new file mode 100644 index 0000000000000000000000000000000000000000..9e2f8647645e47ea52f0014e6d638b7751cc6f8f GIT binary patch literal 802 zcmV+-1Ks?IP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^n@ z11bUQl|<_R00N>(L_t(I%WacSYb#Y8hMzO%%uFW9}?gu4*D{=o}UTkMr2ZSKiTCUa)a9~VI@>brawKc3$MulV$n4u z7*p}@{MBn+{@p2nkKUg1)7tP(p%|Q8;?o>GKc%fZ5Dxpwu)Mw|goMp-#Lc#0Tqy4P z3}sA3x7U39!Mhwiy~4E}-tG`8Mdmrd2b5Bz@_j^>lTOaKd;W~iKl=h>DwNhGqiWCb zTUWH(n%#OuR!*SX(=OKtC6Refo1{pUlJ^PoH?BCJYo0IL1A%;fK|rzlW5xL5f^=9y zfOzat#gs&5BvKJ$r2hS91QX6K&e1o`!NGRdfOkX@iN2@0`;GDZ0#|SGoh1<&-dl>J zGlUQadu{vpf=?yUd-`g}epu1BJ!2HZ#hV}!Y<-X0Y;d-QBmo>@-vW>rQ!&yduC2*W zG{e~pr4-J#tbh5A=HU+4Y;m?l2tjZy-g!nRbF?l=0A$}|o1V?GqHAhoCb88$!8;yq zex=*jL}vl;y(RjH&r*!34hQZZ3~45rPKTsfjx`mDfP7LiT`Z6?1(6Y4OZ1)?Ji;AZ zD6LCOd%*KukN2L?HTXWqS6jMWhpl$Zo?H?`Pv2Mu8oWOcDPt;Ldr}g-BY20md&cJr zVi2gokhFA+&t^!au$5sjn?i8-c8}KOf#B<9%X^(=cs#}JTdLca$WcK$C=f~_Lc}!< z#gV2sJw=X2*!$JNfiV@kR`Bf0ZwO68=sHI8V+yTNnLp!9^GhD2*gd_(U%QA)baD}G!(AYJmf#%((0_PXMQ78tYo g-#Pzx%7+7g0#Pt$?Q?}=djJ3c07*qoM6N<$f-zxgssI20 literal 0 HcmV?d00001 diff --git a/textures/riverdev_pinewood.png b/textures/riverdev_pinewood.png new file mode 100644 index 0000000000000000000000000000000000000000..fa102ce3358067055657638232d8c6d1329ef061 GIT binary patch literal 366 zcmV-!0g?WRP)Px#32;bRa{vGi!vFvd!vV){sAK>D00(qQO+^RZ1P&4u8%ox1s{jB207*naR4C7N zQax|NKn#63S+GPj6y+8ab&nYOC;Bt`&-f>ux|OX1VsBA|bQT|pSgr#wm{`Z<`X-<4 zd-k)Pt(NcTam62i3?sD#;t|lZE%lMxTJ4|p$IIdkz}amOAlrQ{_0hE)#*F8P1psN1 z@jQ8q0p*Z|gy!J5sOl&d*13#JF=+1^(RA8A^s1u!88r6_)9TfDzKlyD%WW+x#WMs& zNnOk6QzuV}KO{rQW4SSOxO8?KtuC^X&>Y&k2ECwgqXXQzXlCbOKfmkGqWZTz