From 80ec47195392bcf78b32e90bef0385dde0f03f38 Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Wed, 22 Nov 2017 00:41:49 -0800 Subject: [PATCH] Initial Commit --- .luacheckrc | 15 +++ depends.txt | 1 + description.txt | 1 + init.lua | 185 ++++++++++++++++++++++++++ mod.conf | 1 + readme.md | 33 +++++ textures/default_acacia_leaves.png | Bin 0 -> 399 bytes textures/default_aspen_leaves.png | Bin 0 -> 780 bytes textures/default_dirt_overlay.png | Bin 0 -> 492 bytes textures/default_grass.png | Bin 0 -> 645 bytes textures/default_grass_1.png | Bin 0 -> 159 bytes textures/default_grass_2.png | Bin 0 -> 179 bytes textures/default_grass_3.png | Bin 0 -> 246 bytes textures/default_grass_4.png | Bin 0 -> 354 bytes textures/default_grass_5.png | Bin 0 -> 445 bytes textures/default_grass_side.png | Bin 0 -> 793 bytes textures/default_jungleleaves.png | Bin 0 -> 375 bytes textures/default_leaves.png | Bin 0 -> 729 bytes textures/default_luscious_palette.png | Bin 0 -> 674 bytes textures/default_pine_needles.png | Bin 0 -> 403 bytes 20 files changed, 236 insertions(+) create mode 100644 .luacheckrc create mode 100644 depends.txt create mode 100644 description.txt create mode 100644 init.lua create mode 100644 mod.conf create mode 100644 readme.md create mode 100644 textures/default_acacia_leaves.png create mode 100644 textures/default_aspen_leaves.png create mode 100644 textures/default_dirt_overlay.png create mode 100644 textures/default_grass.png create mode 100644 textures/default_grass_1.png create mode 100644 textures/default_grass_2.png create mode 100644 textures/default_grass_3.png create mode 100644 textures/default_grass_4.png create mode 100644 textures/default_grass_5.png create mode 100644 textures/default_grass_side.png create mode 100644 textures/default_jungleleaves.png create mode 100644 textures/default_leaves.png create mode 100644 textures/default_luscious_palette.png create mode 100644 textures/default_pine_needles.png diff --git a/.luacheckrc b/.luacheckrc new file mode 100644 index 0000000..15eed66 --- /dev/null +++ b/.luacheckrc @@ -0,0 +1,15 @@ +unused_args = false +allow_defined_top = true + +read_globals = { + "DIR_DELIM", + "minetest", "core", + "dump", + "vector", "nodeupdate", + "VoxelManip", "VoxelArea", + "PseudoRandom", "ItemStack", + "intllib", + "default", + table = { fields = { "copy", "getn" } } +} + diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/depends.txt @@ -0,0 +1 @@ +default diff --git a/description.txt b/description.txt new file mode 100644 index 0000000..51cee77 --- /dev/null +++ b/description.txt @@ -0,0 +1 @@ +Bring color into the mgv7 mapgen world. diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..5efb142 --- /dev/null +++ b/init.lua @@ -0,0 +1,185 @@ + +--[[ + + grass - biome colored grass + + (C) LGPL-2.1+ Auke Kok + + Textures are licensed according to their respective origin + from github.com/minetest/minetest_game, generally CC-BY-SA-4.0 + or similar. + +]]-- + +local wp = minetest.get_worldpath() .. "/luscious" + +local mgp = minetest.get_mapgen_params() +local chunksize = 16 * mgp.chunksize + +local function after_place_node(pos, placer, itemstack, pointed_thing) + -- get chunk from pos + local v = vector.apply(pos, function(a) return math.floor((a - 48) / chunksize) end) + local o = vector.subtract(pos, vector.apply(v, function(a) return (a * chunksize) + 48 end)) + local l = o.z * (chunksize) + o.x + local p = minetest.hash_node_position(v) + + local f = assert(io.open(wp .. "/" .. string.format("%d", p), "r"), + "unable to find map for " .. string.format("%d", p)) + local z = f:read("*a") + f:close() + local map = minetest.decompress(z) + + local node = minetest.get_node(pos) + node.param2 = string.byte(map, l + 1) + minetest.swap_node(pos, node) +end + +minetest.override_item("default:dirt_with_grass", { + paramtype2 = "color", + drawtype = "color", + palette_index = 136, + palette = "default_luscious_palette.png", + tiles = {"default_grass.png", {name = "default_dirt.png", color = "white"}, "default_grass.png"}, + overlay_tiles = {"", "", {name = "default_dirt_overlay.png", color = "white"}}, + place_param2 = 136, + after_place_node = after_place_node, +}) + +for _, v in pairs({ + "default:leaves", + "default:aspen_leaves", + "default:jungleleaves", + "default:pine_needles", + "default:acacia_leaves", + "default:bush_leaves", + "default:acacia_bush_leaves", +}) do + minetest.override_item(v, { + paramtype2 = "color", + palette_index = 136, + palette = "default_luscious_palette.png", + place_param2 = 136, + after_place_node = after_place_node, + }) +end + +minetest.register_alias_force("default:dirt_with_dry_grass", "default:dirt_with_grass") +minetest.register_alias_force("default:dirt_with_rainforest_litter", "default:dirt_with_grass") +minetest.register_alias_force("default:dirt_with_snow", "default:dirt_with_grass") + +for _, v in pairs({ + "default:grass_1", + "default:grass_2", + "default:grass_3", + "default:grass_4", + "default:grass_5", + "default:junglegrass", +}) do + minetest.override_item(v, { + paramtype2 = "color", + palette_index = 136, + palette = "default_luscious_palette.png", + place_param2 = 136, + after_place_node = after_place_node, + }) +end +for i = 1, 5 do + minetest.register_alias_force("default:dry_grass_" .. i, "default:grass_" .. i) +end + +-- content ids +local cn = { + ["default:dirt_with_grass"] = 1, + ["default:grass_1"] = 1, + ["default:grass_2"] = 1, + ["default:grass_3"] = 1, + ["default:grass_4"] = 1, + ["default:grass_5"] = 1, + ["default:junglegrass"] = 1, + ["default:leaves"] = 1, + ["default:aspen_leaves"] = 1, + ["default:jungleleaves"] = 1, + ["default:pine_needles"] = 1, + ["default:acacia_leaves"] = 1, + ["default:bush_leaves"] = 1, + ["default:acacia_bush_leaves"] = 1, +} +local cs = {} +for k, _ in pairs(cn) do + cs[minetest.get_content_id(k)] = 1 +end + +minetest.register_on_generated(function(minp, maxp, blockseed) + local v = vector.apply(minp, function(a) return (a - 48) / chunksize end) + local heatmap = minetest.get_mapgen_object("heatmap") + local humiditymap = minetest.get_mapgen_object("humiditymap") + local map = "" + for i = 1, #heatmap do + local h1 = heatmap[i] + local h2 = humiditymap[i] + h1 = math.floor(math.min(math.max(math.floor(h1), 0), 100) / 6.6) + h2 = math.floor(math.min(math.max(math.floor(h2), 0), 100) / 6.6) + map = map .. string.char(h1 + (h2 * 16)) + end + local p = string.format("%d", minetest.hash_node_position(v)) + + local f = assert(io.open(wp .. "/" .. p, "w"), wp .. "/" .. p) + f:write(minetest.compress(map)) + f:close() + + local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") + local area = VoxelArea:new{MinEdge = emin, MaxEdge = emax} + local data = vm:get_data() + local p2data = vm:get_param2_data() + for z = minp.z, maxp.z do + for y = minp.y, maxp.y do + local vi = area:index(minp.x, y, z) + for x = minp.x, maxp.x do + local vv = (x - minp.x) + ((z - minp.z) * chunksize) + if cs[data[vi]] then + local mv = string.byte(map, vv + 1) + p2data[vi] = mv + end + vi = vi + 1 + end + end + end + vm:set_param2_data(p2data) + vm:write_to_map() +end) + +local function update_p2(pos, size) + local minp = {x = pos.x - size[1], y = pos.y, z = pos.z - size[1]} + local maxp = {x = pos.x + size[1], y = pos.y + size[2], z = pos.z + size[1]} + for x = minp.x, maxp.x do + for y = minp.y, maxp.y do + for z = minp.z, maxp.z do + local p = vector.new(x, y, z) + local node = minetest.get_node(p) + if cn[node.name] then + after_place_node(p) + end + end + end + end +end + +local saplings = { + ["default:sapling"] = {2, 8}, + ["default:junglesapling"] = {2, 17}, + ["default:pine_sapling"] = {2, 14}, + ["default:acacia_sapling"] = {4, 8}, + ["default:aspen_sapling"] = {2, 12}, + ["default:bush_sapling"] = {1, 3}, + ["default:acacia_bush_sapling"] = {1, 3}, +} + +for k, v in pairs(saplings) do + minetest.override_item(k, { + on_timer = function(pos) + default.grow_sapling(pos) + update_p2(pos, v) + end, + }) +end + diff --git a/mod.conf b/mod.conf new file mode 100644 index 0000000..7aa8a5f --- /dev/null +++ b/mod.conf @@ -0,0 +1 @@ +name = luscious diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..47359e6 --- /dev/null +++ b/readme.md @@ -0,0 +1,33 @@ + +## luscious + +Makes your map luscious. + +This mod heavily modifies your base landscape and modifies various +nodes like dirt and leaves so that they become colored using node +coloring. + +The color selection of each node is decided based on the biome data, +using heat and humidity. These are mapped on a 16x16 palette where +the heat is mapped along the x axis from 0-15 and the humidity along +the y axis with the same range. This gives us a total of 256 possible +colorizations of each node. + +Manual placing of the nodes, and sapling placement is also modified to +make trees growing or manual placing of nodes also result in colorized +nodes in the landscape. + +## features + +- jungle dirt is replaced by dirt with grass +- dirt with dry grass is replaced by dirt with grass +- dirt with snow is replaced by dirt with grass +- dry grass is replaced with grass + +## bugs + +- leaf decay is broken due to p2 usage +- grass spread is broken or will place wrongly colored grass nodes +- inventory items lack proper coloring +- snowy pine trees are missing + diff --git a/textures/default_acacia_leaves.png b/textures/default_acacia_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..bc9d3db0202bb2c899d668128da6f94bafcc6ec5 GIT binary patch literal 399 zcmV;A0dW3_P)^+Z`&^bxE$XQ4ocEkI=+qhBqspa6>F(x)W4G8ivSRW zp4?OwT#ImhdoG)DPXMr7%)q|@@bvObA_zS>iXv>P3T@rdD2f08j&B11nlkU{k~Eed z{%21H00NpeRRsWWtsh`UvLubAa4mx4+xWR7ni6X+qS@JwX$Nlt^|#qf*| zKi)q`9uoeLP=0pBS}qr}lS}-RLFh?EBd*4GXv+L3FpjIAlIJ0|#p}NU<9*?I^cn1m zwNyhU0^Oo&t1$U(>yGp~>&m7p0sxVuvCO6`(krb7Oycbo>Y=SWI+gTqXBE7Kr;^si t+bj5)xQ%SOq9F97YZ01qPjlo(JKui9t)I`jPKy8l002ovPDHLkV1iR9vA_TT literal 0 HcmV?d00001 diff --git a/textures/default_aspen_leaves.png b/textures/default_aspen_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..0f8fa113b3ad4dab100f929dd986700ad29db151 GIT binary patch literal 780 zcmV+n1M~ceP)Ybx!7rqZKn%f(`BkrKq9G`)ugtv@b>A`~n5$M{-*fIhUT z8cH5aqz^HLzE~^RLQrglhLqMsFMBb2cbnVY+Z`X8EQ*TXhhdl*X1>h#D*z|os;HGQ z5F^9vXEz1l%=uCEJeZ%pC2V7Ca##y_6F=zk&CHSjq}Y!4S2qbmpSRx|SAYkroBZx< z@K?l>) z^mFCnf~4)diR%UINZ0MA5-DpJPH403^VOwWA|ednricr99 z1q}4%2*POFNWlE`9eJ`hk6{Rpep?1$_S5gBe^-`Y>yKDA(ehm4IHu(V_+dnu|Uo;XtaHDR)*z=_n5nU zTY7RC0Q@*0269%0iCRUOm>SU?DR&%Mof^?s-Z-L1Uwu~jAN&bt!AJ-KpH5Ez0000< KMNUMnLSTZYm~@o@ literal 0 HcmV?d00001 diff --git a/textures/default_dirt_overlay.png b/textures/default_dirt_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..e4cdc1c6fb49d4f4f71d837b2d74c9ae99a3b4da GIT binary patch literal 492 zcmVnq_kKa z=T9ax^Ja7r4Wi)Mg=cxrx%ZxP;XnQ{ym|iU>~H$?_~;K^08Ag=J_Gpl`DXmP;pO9d zyCKUkclzncINU90wVmgaAnvk55m=;q>?@tZF?2czV|ki*hpq*n2U# z^H#a;OZZ`$)?o%`$+=a8GwWe+weAPkMnj}pT zreSU`lqFI8mFw$E0Qv_#j2{V<+re(zn1+ep>5yg_%5^zEe}|A#lEhz-Qc`Z#c%IK7 z2mpwp8-id+uYZd;jsVbFZ)?^K0On!8Ppvi5vhX~gB#B6p2-{Kkeh;lRX_k`b8IJ9e i=Q-Ir#k3@z>hc}o*rlEFfDxns0000Oq&$F&;06;{>SUKZe*D0mE_s4Mn0AoxDfrymSWm$60DW#@q5D^h`&g|{&t*&cC zERUUY-urFa+O|bR?|og@*4mVkQYwT%rIg#Yg%DCol+qHNQo7x4#u%lP)|wE)IltfU zPft%20LF3ToR{8=F+#}odM!2Dw*C3}Nh$67exBzvO+4p3&vWrP=cJT{cU4t|59hq= zIw8dUe)ryUYwdZSg}2taL^V+z4CMa~%jwASmo zN-3?iAp~R0IF5W>S4wFJq3{NP7^9Rj=lu8g_wewLa}FUe#>R0304{`BmPJar@4MDo zDHUVPIhTE6jLtdEc~wPt!!Q8AaU3b7Wm(wE z%L@P~rIb?ES^)6gKR-Xm7_GI05XM+aDTEMXWQ%`Fcfv3 f=kq)faU92gly*&ijNddQ00000NkvXXu0mjfiDV|Z literal 0 HcmV?d00001 diff --git a/textures/default_grass_1.png b/textures/default_grass_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d726b738c671c723e0fe2e41fd94d8cd05c2b744 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`X`U{QAr`0Kp54glqA22W@w8ZC z@ic{`1+pEy9NW@ln*1%NRk(ni@3>Tfh7FU`)k)hT!>_+Fum5!4o9*45pYM-ITtENm>c4%pAGAN*J-731 zi-6dH$2JUWwsJ4n%66bohT+K^#ut0vw`;2I`Tn}{RI%TdYtl>-$qXyDDk-g=!qm{Q e#*ocRGw$Xw_n3bb-bO%IFnGH9xvXL#m{67PK{q;+A zUFW}=bzKLuX&V2ue4pF4^^cGM5_(^d(pcbiU8$E430g&f85-KW+;^Vb(9Nz)b1`tIN0Da#BFbo3#&N-A)IOhVp?>p97A1})SfYusg w4Axq2i~&F?6})ZRIF18=vMha)BxtR90gh5yx4E@(xc~qF07*qoM6N<$f|)U3tN;K2 literal 0 HcmV?d00001 diff --git a/textures/default_grass_4.png b/textures/default_grass_4.png new file mode 100644 index 0000000000000000000000000000000000000000..741d242b839de80d695e314be9d90934d902d971 GIT binary patch literal 354 zcmV-o0iFJdP)b;z7)GB%#gf4pP$W)~^RTmJ$(9{Y9KaXINw@+7Sr`x!5=e<9Ba$gf%z$FiHdWUS z{U?8Z^3!J<{^t*l*4n-2qA1)?>{rRufvVc_yTGMsDuTn|06-ka>~=c< z7K;S{ZQC+lX}w;%F)O9q<#Ktw!E(9uRw*R_`~4n(Fbn}WolaP5eKy7r$1wmO=kwVM zj4=R2QS|L+gb;q+G!4FiwU*UtTPR=(fwUMQucZClTiBzXyh5QJffl#(cl zD9e&0NifDBr6kKTXRT#EpVM_60Da$Mj6o^oo^r#bXkX#_UH||907*qoM6N<$f*d)P A`v3p{ literal 0 HcmV?d00001 diff --git a/textures/default_grass_5.png b/textures/default_grass_5.png new file mode 100644 index 0000000000000000000000000000000000000000..dc96c06b45530b45ab51f28c602ff4a851a901eb GIT binary patch literal 445 zcmV;u0Yd(XP)r#suhl;-F`MRpu~@vBKlK3EZns)kE|=;P$!|e#=w^y( zT&-5h4AA=1WSXbbsRGz+HVR-o9&0U*04U2+i$Vwh>bib;&1$#X z09ZdUO#;_-buWq{WuEf%SXq`KrBuG}Q&rVRf~u+zLcEaNZZ`m$VHk41->K^w&+`Cq z90w_-PV_vFJkK?e>$(I%@I{cODaYecCr44Ff*{Z|&$28FfYE5A>bfS+^Dlz3EU|5y zUav=<=agm1e!s`}eL9^EQc4wuAwmdj+eQe%^W>!@+J~7LKM6Oj?zTR6S#FtMM;IWq;)~z2D`Adeg(R? z;WZ*-p;*`(v%6={!N{Mq0Yb|wM1F+q0 zi7}F-Cxt0^WPdvcwpJF@_KVvg`8j7Oe{QP_&gg|S}X0u^FpCbV-FE1Bb>wRaX6ha7Qvl&-cR|{hdlgVUn+O{pr z<#MrFtiL9Hyy!8f{zFZ+rKTrN6MK&8G$l_-D)Jph)yK+tCW8M XYKm1*m2Aq000000NkvXXu0mjf%|9N~N`!`Mj-vq@V*+EVTW0OSCG1rO`8=TS>Ad0qBAjmEm{uuSH=F8fO|eMwuw z<$8W=l7nbcn4-~|FV{1^zkZDGozOsX&bMM|26by(uIH>ZZ7EA37sG5U0O%rGGv#O# zHHNX1Y$9c_D}7;6zRtJuwnj~8IXbB{?|yqcw?N|47Ff8HN!XIm@VyiI@##j=mY$bL zLZ7oXjn0=vEHw^eC*`5&)pAnbJJFt4{S(<`7&|Hd1^K!;LjT}{zU%+M?lf9^@(V=P V8PI&}c}M^N002ovPDHLkV1iJxqi+BJ literal 0 HcmV?d00001 diff --git a/textures/default_leaves.png b/textures/default_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..5488985c513203ff35dfbe028e895b85e31c8f96 GIT binary patch literal 729 zcmV;~0w(>5P)<=kdCV2Mfg>vU>66z5qvWTsS z?I%s;&ewzzIAachAJFo46@ay}z95#i@cn>ik6tK#S`rI-48kB{bz@Qdy?{7M0BCu; zYGr*v+U*g#-5%ll0h8wo%+{;oF4v^7=_wT|;$B3{+f`8#0TA~hI{O^}KD}=bw3(tP;)5P(-( z+j%>U$DZmOcDZn|jN>=}Se8Zkd>P%?^wgWDZc(PD0?-S-V^^Fs;8f3XFQQm15QZTDE9(nl4NpS$KDGgH=W8wqX zgu#f$mZtz-Ki^RRRd+_3jh0&7Sd?KnL|eAW_nIUL$H9PCTiYt|gM5(J=dMXsiEY~e z?ESe-;dJ9Wyb5fbI z84L!v%PEO2o+|-x^rf52R2zfVn!-;%yNTm}`y3w(FeQyMmSR5u0X$IyQjOg+00000 LNkvXXu0mjf68l+h literal 0 HcmV?d00001 diff --git a/textures/default_luscious_palette.png b/textures/default_luscious_palette.png new file mode 100644 index 0000000000000000000000000000000000000000..ab0cfa0d82efbeec11438928b1ba6d9de5d6927b GIT binary patch literal 674 zcmV;T0$u%yP)K5D)WDb}+ zV2lvS1TKtB6kC%$yeD{a35`lp=z)BNrgHex48h+3F@k0#ixO2B^~9xaXpHBYgs4$Kf zBw3;u&f^h3FVxkJ)+Q!N=fe2M7d4Wg$MVH_9#f1(pd zt(M;Qw9(U`yr}1_d(Jj-6i5XE1ILHI8MLrxyx)KbC^P@a%FJ2kImcLYH5H2-IV6kv z!l}S6!_J)foWJs`dAR|-d*To_I4U~nd1gfnJtIE|L&K_`SULFcun~A4mA$|4&HQ-- ztT-O373XQstocH9UNRdS+GrWAu$T%ffvSbv!QR5#6}Bh%4+kk++P;$k7ytkO07*qo IM6N<$f<#^~Q2+n{ literal 0 HcmV?d00001 diff --git a/textures/default_pine_needles.png b/textures/default_pine_needles.png new file mode 100644 index 0000000000000000000000000000000000000000..e9244a0b58c7a2bfbc42411fc7c05c6c8a14d37e GIT binary patch literal 403 zcmV;E0c`$>P)J}7Lx@F5-WeeH|7trM#_>XQ^Xjubs`Lv5b4zGK+io8^>X&% zdw%cT0qY&%cg00QbCK_GlzGL8)!Pb9-D0r>zP}LSX1m6De^hai(Cu(hagk8>>_dLR ziT0z#<60?gG)$y%KUK;^8cp4T@1$i;x5Gu5NaMUeD(f97>m8X$gHfA$0OBHMVj_*( z;i9Z}v{(Y`_kn?8Eeyi(ajiz*`mTpI1BjHP;v%8G>j5BKV6!9`7ws}f%&2?z2rDgf zvfdFpoR&EOz%Fwn-IsX)2wIuu{Zy&6%&Do{Sq3bL_o0n!;_LGTX&xIpXXa+R9uJ2c zs{aOTm;K3%i-cyUZB9Su_@VFs7f1uApwsh+v3!N;NfuMkw9JV+Fp|Jg?ipO3r|k@* xDIJ%iEGJa{OeWG8Ey-Z61I)yF7bIBk=m)2RIxeR&t9bwb002ovPDHLkV1m%mwy^*J literal 0 HcmV?d00001