From d2a6c9aa90c7be10b906bd7f3c80909bf140eaf4 Mon Sep 17 00:00:00 2001 From: Tim7900 <85207005+Tim7900@users.noreply.github.com> Date: Wed, 29 Dec 2021 19:00:23 -0900 Subject: [PATCH] Add files via upload --- mods/riesenpilz/LICENSE.txt | 9 + mods/riesenpilz/README.md | 25 + mods/riesenpilz/functions.lua | 37 + mods/riesenpilz/init.lua | 1278 +++++++++++++++++ mods/riesenpilz/mapgen.lua | 340 +++++ mods/riesenpilz/mod.conf | 3 + mods/riesenpilz/settings.lua | 25 + mods/riesenpilz/sounds/riesenpilz_head.0.ogg | Bin 0 -> 3737 bytes mods/riesenpilz/sounds/riesenpilz_head.1.ogg | Bin 0 -> 3679 bytes mods/riesenpilz/sounds/riesenpilz_head.2.ogg | Bin 0 -> 3700 bytes mods/riesenpilz/sounds/riesenpilz_stem.0.ogg | Bin 0 -> 3624 bytes mods/riesenpilz/sounds/riesenpilz_stem.1.ogg | Bin 0 -> 3610 bytes mods/riesenpilz/sounds/riesenpilz_stem.2.ogg | Bin 0 -> 3600 bytes mods/riesenpilz/textures/3apple_apple.png | Bin 0 -> 252 bytes .../textures/3apple_apple_bottom.png | Bin 0 -> 236 bytes mods/riesenpilz/textures/3apple_apple_top.png | Bin 0 -> 348 bytes .../textures/riesenpilz_brown45_bottom.png | Bin 0 -> 108 bytes .../textures/riesenpilz_brown45_side.png | Bin 0 -> 105 bytes .../textures/riesenpilz_brown45_top.png | Bin 0 -> 112 bytes .../textures/riesenpilz_brown_bottom.png | Bin 0 -> 319 bytes .../textures/riesenpilz_brown_side.png | Bin 0 -> 251 bytes .../textures/riesenpilz_brown_top.png | Bin 0 -> 186 bytes .../textures/riesenpilz_fly_agaric_bottom.png | Bin 0 -> 304 bytes .../textures/riesenpilz_fly_agaric_side.png | Bin 0 -> 284 bytes .../textures/riesenpilz_fly_agaric_top.png | Bin 0 -> 214 bytes .../textures/riesenpilz_glowshroom_bottom.png | Bin 0 -> 183 bytes .../textures/riesenpilz_glowshroom_side.png | Bin 0 -> 149 bytes .../textures/riesenpilz_glowshroom_top.png | Bin 0 -> 105 bytes .../textures/riesenpilz_ground_side.png | Bin 0 -> 699 bytes .../riesenpilz_ground_side_normal.png | Bin 0 -> 631 bytes .../textures/riesenpilz_ground_top.png | Bin 0 -> 619 bytes .../textures/riesenpilz_ground_top_normal.png | Bin 0 -> 499 bytes .../textures/riesenpilz_growingtool.png | Bin 0 -> 2312 bytes mods/riesenpilz/textures/riesenpilz_head.png | Bin 0 -> 694 bytes .../textures/riesenpilz_head_beige.png | Bin 0 -> 305 bytes .../textures/riesenpilz_head_blue.png | Bin 0 -> 703 bytes .../textures/riesenpilz_head_blue_bright.png | Bin 0 -> 742 bytes .../textures/riesenpilz_head_brown_bright.png | Bin 0 -> 186 bytes .../textures/riesenpilz_head_normal.png | Bin 0 -> 522 bytes .../textures/riesenpilz_head_orange.png | Bin 0 -> 578 bytes .../textures/riesenpilz_head_white.png | Bin 0 -> 544 bytes .../textures/riesenpilz_head_yellow.png | Bin 0 -> 535 bytes .../textures/riesenpilz_lamellas.png | Bin 0 -> 974 bytes .../textures/riesenpilz_lamellas_normal.png | Bin 0 -> 3327 bytes .../textures/riesenpilz_lavashroom_bottom.png | Bin 0 -> 137 bytes .../textures/riesenpilz_lavashroom_side.png | Bin 0 -> 148 bytes .../textures/riesenpilz_lavashroom_top.png | Bin 0 -> 297 bytes .../textures/riesenpilz_light_detector.png | Bin 0 -> 279 bytes .../textures/riesenpilz_mush45_meal.png | Bin 0 -> 124 bytes .../riesenpilz_nether_shroom_bottom.png | Bin 0 -> 264 bytes .../riesenpilz_nether_shroom_side.png | Bin 0 -> 184 bytes .../textures/riesenpilz_nether_shroom_top.png | Bin 0 -> 250 bytes .../textures/riesenpilz_parasol_bottom.png | Bin 0 -> 235 bytes .../textures/riesenpilz_parasol_side.png | Bin 0 -> 195 bytes .../textures/riesenpilz_parasol_top.png | Bin 0 -> 177 bytes .../textures/riesenpilz_red45_bottom.png | Bin 0 -> 111 bytes .../textures/riesenpilz_red45_side.png | Bin 0 -> 131 bytes .../textures/riesenpilz_red45_top.png | Bin 0 -> 94 bytes .../textures/riesenpilz_red_bottom.png | Bin 0 -> 302 bytes .../textures/riesenpilz_red_side.png | Bin 0 -> 266 bytes .../textures/riesenpilz_red_top.png | Bin 0 -> 263 bytes .../textures/riesenpilz_stem_blue.png | Bin 0 -> 625 bytes .../textures/riesenpilz_stem_brown.png | Bin 0 -> 701 bytes .../textures/riesenpilz_stem_red45.png | Bin 0 -> 716 bytes .../textures/riesenpilz_stem_red45_top.png | Bin 0 -> 718 bytes .../textures/riesenpilz_stem_top.png | Bin 0 -> 130 bytes .../textures/riesenpilz_stem_white.png | Bin 0 -> 519 bytes .../textures/riesenpilz_stem_white_normal.png | Bin 0 -> 338 bytes 68 files changed, 1717 insertions(+) create mode 100644 mods/riesenpilz/LICENSE.txt create mode 100644 mods/riesenpilz/README.md create mode 100644 mods/riesenpilz/functions.lua create mode 100644 mods/riesenpilz/init.lua create mode 100644 mods/riesenpilz/mapgen.lua create mode 100644 mods/riesenpilz/mod.conf create mode 100644 mods/riesenpilz/settings.lua create mode 100644 mods/riesenpilz/sounds/riesenpilz_head.0.ogg create mode 100644 mods/riesenpilz/sounds/riesenpilz_head.1.ogg create mode 100644 mods/riesenpilz/sounds/riesenpilz_head.2.ogg create mode 100644 mods/riesenpilz/sounds/riesenpilz_stem.0.ogg create mode 100644 mods/riesenpilz/sounds/riesenpilz_stem.1.ogg create mode 100644 mods/riesenpilz/sounds/riesenpilz_stem.2.ogg create mode 100644 mods/riesenpilz/textures/3apple_apple.png create mode 100644 mods/riesenpilz/textures/3apple_apple_bottom.png create mode 100644 mods/riesenpilz/textures/3apple_apple_top.png create mode 100644 mods/riesenpilz/textures/riesenpilz_brown45_bottom.png create mode 100644 mods/riesenpilz/textures/riesenpilz_brown45_side.png create mode 100644 mods/riesenpilz/textures/riesenpilz_brown45_top.png create mode 100644 mods/riesenpilz/textures/riesenpilz_brown_bottom.png create mode 100644 mods/riesenpilz/textures/riesenpilz_brown_side.png create mode 100644 mods/riesenpilz/textures/riesenpilz_brown_top.png create mode 100644 mods/riesenpilz/textures/riesenpilz_fly_agaric_bottom.png create mode 100644 mods/riesenpilz/textures/riesenpilz_fly_agaric_side.png create mode 100644 mods/riesenpilz/textures/riesenpilz_fly_agaric_top.png create mode 100644 mods/riesenpilz/textures/riesenpilz_glowshroom_bottom.png create mode 100644 mods/riesenpilz/textures/riesenpilz_glowshroom_side.png create mode 100644 mods/riesenpilz/textures/riesenpilz_glowshroom_top.png create mode 100644 mods/riesenpilz/textures/riesenpilz_ground_side.png create mode 100644 mods/riesenpilz/textures/riesenpilz_ground_side_normal.png create mode 100644 mods/riesenpilz/textures/riesenpilz_ground_top.png create mode 100644 mods/riesenpilz/textures/riesenpilz_ground_top_normal.png create mode 100644 mods/riesenpilz/textures/riesenpilz_growingtool.png create mode 100644 mods/riesenpilz/textures/riesenpilz_head.png create mode 100644 mods/riesenpilz/textures/riesenpilz_head_beige.png create mode 100644 mods/riesenpilz/textures/riesenpilz_head_blue.png create mode 100644 mods/riesenpilz/textures/riesenpilz_head_blue_bright.png create mode 100644 mods/riesenpilz/textures/riesenpilz_head_brown_bright.png create mode 100644 mods/riesenpilz/textures/riesenpilz_head_normal.png create mode 100644 mods/riesenpilz/textures/riesenpilz_head_orange.png create mode 100644 mods/riesenpilz/textures/riesenpilz_head_white.png create mode 100644 mods/riesenpilz/textures/riesenpilz_head_yellow.png create mode 100644 mods/riesenpilz/textures/riesenpilz_lamellas.png create mode 100644 mods/riesenpilz/textures/riesenpilz_lamellas_normal.png create mode 100644 mods/riesenpilz/textures/riesenpilz_lavashroom_bottom.png create mode 100644 mods/riesenpilz/textures/riesenpilz_lavashroom_side.png create mode 100644 mods/riesenpilz/textures/riesenpilz_lavashroom_top.png create mode 100644 mods/riesenpilz/textures/riesenpilz_light_detector.png create mode 100644 mods/riesenpilz/textures/riesenpilz_mush45_meal.png create mode 100644 mods/riesenpilz/textures/riesenpilz_nether_shroom_bottom.png create mode 100644 mods/riesenpilz/textures/riesenpilz_nether_shroom_side.png create mode 100644 mods/riesenpilz/textures/riesenpilz_nether_shroom_top.png create mode 100644 mods/riesenpilz/textures/riesenpilz_parasol_bottom.png create mode 100644 mods/riesenpilz/textures/riesenpilz_parasol_side.png create mode 100644 mods/riesenpilz/textures/riesenpilz_parasol_top.png create mode 100644 mods/riesenpilz/textures/riesenpilz_red45_bottom.png create mode 100644 mods/riesenpilz/textures/riesenpilz_red45_side.png create mode 100644 mods/riesenpilz/textures/riesenpilz_red45_top.png create mode 100644 mods/riesenpilz/textures/riesenpilz_red_bottom.png create mode 100644 mods/riesenpilz/textures/riesenpilz_red_side.png create mode 100644 mods/riesenpilz/textures/riesenpilz_red_top.png create mode 100644 mods/riesenpilz/textures/riesenpilz_stem_blue.png create mode 100644 mods/riesenpilz/textures/riesenpilz_stem_brown.png create mode 100644 mods/riesenpilz/textures/riesenpilz_stem_red45.png create mode 100644 mods/riesenpilz/textures/riesenpilz_stem_red45_top.png create mode 100644 mods/riesenpilz/textures/riesenpilz_stem_top.png create mode 100644 mods/riesenpilz/textures/riesenpilz_stem_white.png create mode 100644 mods/riesenpilz/textures/riesenpilz_stem_white_normal.png diff --git a/mods/riesenpilz/LICENSE.txt b/mods/riesenpilz/LICENSE.txt new file mode 100644 index 00000000..de83e4c9 --- /dev/null +++ b/mods/riesenpilz/LICENSE.txt @@ -0,0 +1,9 @@ +Sounds and textures + CC by 3.0 +Code + MIT + +Some source information: +— glowshroom and lavashroom from bas080's plants mod (originally WTFPL) +— parasol mushroom from a mod called mushrooms (originally WTFPL) +— "45" mushrooms from r01922090's mush45 mod (originally WTFPL) diff --git a/mods/riesenpilz/README.md b/mods/riesenpilz/README.md new file mode 100644 index 00000000..d8cbd4a6 --- /dev/null +++ b/mods/riesenpilz/README.md @@ -0,0 +1,25 @@ +[Mod] mushrooms [riesenpilz] + +This mod adds mushrooms to minetest. The growing tool can make them giant. + +**Depends:** see [depends.txt](https://raw.githubusercontent.com/HybridDog/riesenpilz/master/depends.txt)
+**License:** see [LICENSE.txt](https://raw.githubusercontent.com/HybridDog/riesenpilz/master/LICENSE.txt)
+**Download:** [zip](https://github.com/HybridDog/riesenpilz/archive/master.zip), [tar.gz](https://github.com/HybridDog/riesenpilz/archive/master.tar.gz)
+ +![I'm a screenshot!](https://cloud.githubusercontent.com/assets/3192173/5332059/421c735a-7e47-11e4-88cc-b9ed90b659a8.png) + +If you got ideas or found bugs, please tell them to me. + + +TODO: +* Mapgen: Do not use a fixed table of tree nodes; instead use a more flexible + way to remove trees. +* Add a settingtypes.txt +* Make the growingtool craftable +* Test if visual_scale is useful for the small mushroom nodes, + e.g. to make textures smaller or to use power-of-two sized textures. + Nodeboxes would need to be changed accordingly (maybe automatically). +* Add new features: + * Add more giant mushrooms + * Add more content from the mushrooms mod + * Add a lava suit diff --git a/mods/riesenpilz/functions.lua b/mods/riesenpilz/functions.lua new file mode 100644 index 00000000..bd4b5c25 --- /dev/null +++ b/mods/riesenpilz/functions.lua @@ -0,0 +1,37 @@ +if riesenpilz.info then + function riesenpilz.inform(msg, spam, t) + if spam <= riesenpilz.max_spam then + local info + if t then + info = string.format("[riesenpilz] "..msg.." after ca. %.2fs", os.clock() - t) + else + info = "[riesenpilz] "..msg + end + print(info) + if riesenpilz.inform_all then + minetest.chat_send_all(info) + end + end + end +else + function riesenpilz.inform() + end +end + +local circle_tables = {} +function riesenpilz.circle(r) + local circle = circle_tables[r] + if circle then + return circle + end + circle = {} + for i = -r, r do + for j = -r, r do + if math.floor(math.sqrt(i * i + j * j) + 0.5) == r then + circle[#circle+1] = {x=i, y=0, z=j} + end + end + end + circle_tables[r] = circle + return circle +end diff --git a/mods/riesenpilz/init.lua b/mods/riesenpilz/init.lua new file mode 100644 index 00000000..35304bb1 --- /dev/null +++ b/mods/riesenpilz/init.lua @@ -0,0 +1,1278 @@ +local load_time_start = os.clock() +local MAX_SIZE = 3 + +riesenpilz = {} +local modpath = minetest.get_modpath("riesenpilz").."/" +dofile(modpath.."settings.lua") +dofile(modpath.."functions.lua") + + +-- Growing Functions + +local function r_area(manip, width, height, pos) + local emerged_pos1, emerged_pos2 = manip:read_from_map( + {x=pos.x-width, y=pos.y, z=pos.z-width}, + {x=pos.x+width, y=pos.y+height, z=pos.z+width} + ) + return VoxelArea:new({MinEdge=emerged_pos1, MaxEdge=emerged_pos2}) +end + +-- contents become added later +local c + +-- cache buildable_to ids +local re_al_cache = {[minetest.get_content_id("ignore")] = true} +local function replacing_allowed(id) + if re_al_cache[id] ~= nil then + return re_al_cache[id] + end + local def = minetest.registered_nodes[minetest.get_name_from_content_id(id)] + if not def + or def.buildable_to then + re_al_cache[id] = true + return true + end + re_al_cache[id] = false + return false +end + +local set_vm_nodes +if riesenpilz.giant_restrict_area then + function set_vm_nodes(manip, pznodes) + local nodes = manip:get_data() + for vi,id in pairs(pznodes) do + if not replacing_allowed(nodes[vi]) then + return false + end + nodes[vi] = id + end + manip:set_data(nodes) + return true + end +else + function set_vm_nodes(manip, pznodes) + local nodes = manip:get_data() + for vi,id in pairs(pznodes) do + if replacing_allowed(nodes[vi]) then + nodes[vi] = id + end + end + manip:set_data(nodes) + return true + end +end + +local function set_vm_data(manip, pznodes, pos, t1, name) + if not set_vm_nodes(manip, pznodes) then + return + end + manip:write_to_map() + riesenpilz.inform("a giant " .. name .. " mushroom grew at " .. + minetest.pos_to_string(pos), 3, t1) + local t2 = os.clock() + manip:update_map() + riesenpilz.inform("map updated", 3, t2) +end + + +function riesenpilz.red(pos, nodes, area, w) + w = w or math.random(MAX_SIZE) + local h = w + 2 + + for i = 0, h do + nodes[area:index(pos.x, pos.y+i, pos.z)] = c.stem + end + + local br = w+1 + for k = -1, 1, 2 do + for l = -br+1, br do + nodes[area:index(pos.x+br*k, pos.y+h, pos.z-l*k)] = c.head_red + nodes[area:index(pos.x+l*k, pos.y+h, pos.z+br*k)] = c.head_red + end + end + + for k = -w, w do + for l = -w, w do + nodes[area:index(pos.x+l, pos.y+h+1, pos.z+k)] = c.head_red + nodes[area:index(pos.x+l, pos.y+h, pos.z+k)] = c.lamellas + end + end +end + +local function riesenpilz_hybridpilz(pos) + local t1 = os.clock() + + local w = math.random(MAX_SIZE) + + local manip = minetest.get_voxel_manip() + local area = r_area(manip, w+1, w+3, pos) + + local pznodes = {} + riesenpilz.red(pos, pznodes, area, w) + + set_vm_data(manip, pznodes, pos, t1, "red") +end + + +function riesenpilz.brown(pos, nodes, area, br) + br = br or math.random(MAX_SIZE-1)+1 + local h = br + 2 + + for i in area:iterp(pos, {x=pos.x, y=pos.y+h, z=pos.z}) do + nodes[i] = c.stem + end + + local w = br+1 + for l = -br, br do + for k = -w, w, w*2 do + nodes[area:index(pos.x+k, pos.y+h+1, pos.z+l)] = c.head_brown + nodes[area:index(pos.x+l, pos.y+h+1, pos.z+k)] = c.head_brown + end + for k = -br, br do + nodes[area:index(pos.x+l, pos.y+h+1, pos.z+k)] = c.head_brown + end + end +end + +local function riesenpilz_brauner_minecraftpilz(pos) + local t1 = os.clock() + + local br = math.random(MAX_SIZE-1)+1 + + local manip = minetest.get_voxel_manip() + local area = r_area(manip, br+1, br+3, pos) + + local pznodes = {} + riesenpilz.brown(pos, pznodes, area, br) + + set_vm_data(manip, pznodes, pos, t1, "brown") +end + + +function riesenpilz.fly_agaric(pos, nodes, area, param2s) + local h = 3 + + for i = 0, h do + nodes[area:index(pos.x, pos.y+i, pos.z)] = c.stem + end + + for j = -1, 1 do + for k = -1, 1 do + nodes[area:index(pos.x+j, pos.y+h+1, pos.z+k)] = c.head_red + end + for l = 1, h do + local y = pos.y+l + for _,p in pairs({ + {area:index(pos.x+j, y, pos.z+2), 0}, + {area:index(pos.x+j, y, pos.z-2), 2}, + {area:index(pos.x+2, y, pos.z+j), 1}, + {area:index(pos.x-2, y, pos.z+j), 3}, + }) do + local tmp = p[1] + nodes[tmp] = c.head_red_side + param2s[tmp] = p[2] + end + end + end +end + +local function riesenpilz_minecraft_fliegenpilz(pos) + local t1 = os.clock() + + local manip = minetest.get_voxel_manip() + local area = r_area(manip, 2, 4, pos) + local param2s = manip:get_param2_data() + + local pznodes = {} + riesenpilz.fly_agaric(pos, pznodes, area, param2s) + + if not set_vm_nodes(manip, pznodes) then + return + end + manip:set_param2_data(param2s) + manip:write_to_map() + manip:update_map() + riesenpilz.inform("a fly agaric grew at " .. minetest.pos_to_string(pos), + 3, t1) +end + + +local function ran_node(a, b, ran) + if math.random(ran) == 1 then + return a + end + return b +end + +function riesenpilz.lavashroom(pos, nodes, area, h) + h = h or 3 + math.random(MAX_SIZE - 2) + + -- remove the mushroom + nodes[area:indexp(pos)] = c.air + + for i = -1, 1, 2 do + -- set the stem + for n = 0, h do + nodes[area:index(pos.x+i, pos.y+n, pos.z)] = c.stem_brown + nodes[area:index(pos.x, pos.y+n, pos.z+i)] = c.stem_brown + end + + local o = 2*i + for l = -1, 1 do + for k = 2, 3 do + nodes[area:index(pos.x+k*i, pos.y+h+2, pos.z+l)] = c.head_brown_full + nodes[area:index(pos.x+l, pos.y+h+2, pos.z+k*i)] = c.head_brown_full + end + nodes[area:index(pos.x+l, pos.y+h+1, pos.z+o)] = c.head_brown_full + nodes[area:index(pos.x+o, pos.y+h+1, pos.z+l)] = c.head_brown_full + end + + for m = -1, 1, 2 do + for k = 2, 3 do + for j = 2, 3 do + nodes[area:index(pos.x+j*i, pos.y+h+2, pos.z+k*m)] = ran_node(c.head_yellow, c.head_orange, 7) + end + end + nodes[area:index(pos.x+i, pos.y+h+1, pos.z+m)] = c.head_brown_full + nodes[area:index(pos.x+m*2, pos.y+h+1, pos.z+o)] = c.head_brown_full + end + + for l = -3+1, 3 do + nodes[area:index(pos.x+3*i, pos.y+h+5, pos.z-l*i)] = ran_node(c.head_yellow, c.head_orange, 5) + nodes[area:index(pos.x+l*i, pos.y+h+5, pos.z+3*i)] = ran_node(c.head_yellow, c.head_orange, 5) + end + + for j = 0, 1 do + for l = -3, 3 do + nodes[area:index(pos.x+i*4, pos.y+h+3+j, pos.z+l)] = ran_node(c.head_yellow, c.head_orange, 6) + nodes[area:index(pos.x+l, pos.y+h+3+j, pos.z+i*4)] = ran_node(c.head_yellow, c.head_orange, 6) + end + end + + end + + for k = -2, 2 do + for l = -2, 2 do + nodes[area:index(pos.x+k, pos.y+h+6, pos.z+l)] = ran_node(c.head_yellow, c.head_orange, 4) + end + end +end + +local function riesenpilz_lavashroom(pos) + local t1 = os.clock() + + local h = 3+math.random(MAX_SIZE-2) + + local manip = minetest.get_voxel_manip() + local area = r_area(manip, 4, h+6, pos) + + local pznodes = {} + riesenpilz.lavashroom(pos, pznodes, area, h) + + set_vm_data(manip, pznodes, pos, t1, "lavashroom") +end + + +function riesenpilz.glowshroom(pos, nodes, area, h) + h = h or 2 + math.random(MAX_SIZE) + + for i = 0, h do + nodes[area:index(pos.x, pos.y+i, pos.z)] = c.stem_blue + end + + local br = 2 + for i = -1, 1, 2 do + + for k = -br, br, 2*br do + for l = 2, h do + nodes[area:index(pos.x+i*br, pos.y+l, pos.z+k)] = c.head_blue + end + nodes[area:index(pos.x+i*br, pos.y+1, pos.z+k)] = c.head_blue_bright + end + + for l = -br+1, br do + nodes[area:index(pos.x+i*br, pos.y+h, pos.z-l*i)] = c.head_blue + nodes[area:index(pos.x+l*i, pos.y+h, pos.z+br*i)] = c.head_blue + end + + end + + for l = 0, br do + for i = -br+l, br-l do + for k = -br+l, br-l do + nodes[area:index(pos.x+i, pos.y+h+1+l, pos.z+k)] = c.head_blue + end + end + end + +end + +local function riesenpilz_glowshroom(pos) + local t1 = os.clock() + + local h = 2+math.random(MAX_SIZE) + + local manip = minetest.get_voxel_manip() + local area = r_area(manip, 2, h+3, pos) + + local pznodes = {} + riesenpilz.glowshroom(pos, pznodes, area, h) + + set_vm_data(manip, pznodes, pos, t1, "glowshroom") +end + + +function riesenpilz.parasol(pos, nodes, area, w, h) + h = h or 6 + math.random(MAX_SIZE) + + --stem + for i in area:iterp(pos, {x=pos.x, y=pos.y+h-2, z=pos.z}) do + nodes[i] = c.stem + end + + w = w or MAX_SIZE + math.random(2) + local bhead1 = w-1 + local bhead2 = math.random(1,w-2) + + for _,j in pairs({ + {bhead2, 0, c.head_brown_bright}, + {bhead1, -1, c.head_beige} + }) do + for i in area:iter(pos.x-j[1], pos.y+h+j[2], pos.z-j[1], pos.x+j[1], pos.y+h+j[2], pos.z+j[1]) do + nodes[i] = j[3] + end + end + + local rh = math.random(2,3) + for k = -1, 1, 2 do + for l = 0, 1 do + nodes[area:index(pos.x+k, pos.y+rh, pos.z-l*k)] = c.head_white + nodes[area:index(pos.x+l*k, pos.y+rh, pos.z+k)] = c.head_white + end + for l = -w+1, w do + nodes[area:index(pos.x+w*k, pos.y+h-2, pos.z-l*k)] = c.head_beige + nodes[area:index(pos.x+l*k, pos.y+h-2, pos.z+w*k)] = c.head_beige + end + for l = -bhead1+1, bhead1 do + nodes[area:index(pos.x+bhead1*k, pos.y+h-2, pos.z-l*k)] = c.head_white + nodes[area:index(pos.x+l*k, pos.y+h-2, pos.z+bhead1*k)] = c.head_white + end + end +end + +local function riesenpilz_parasol(pos) + local t1 = os.clock() + + local w = MAX_SIZE+math.random(2) + local h = 6+math.random(MAX_SIZE) + + local manip = minetest.get_voxel_manip() + local area = r_area(manip, w, h, pos) + + local pznodes = {} + riesenpilz.parasol(pos, pznodes, area, w, h) + + set_vm_data(manip, pznodes, pos, t1, "parasol") +end + + +function riesenpilz.red45(pos, nodes, area, h1, h2) + local walkspace = h1 or math.random(2,MAX_SIZE) + local toph = h2 or math.random(MAX_SIZE) + local h = walkspace+toph+4 + + -- stem + for i in area:iterp(pos, {x=pos.x, y=pos.y+h, z=pos.z}) do + nodes[i] = c.stem_red + end + + for i = -1,1,2 do + for l = 0, 1 do + if math.random(2) == 1 then + nodes[area:index(pos.x+i, pos.y, pos.z-l*i)] = c.stem_red + if math.random(2) == 1 then + nodes[area:index(pos.x+i, pos.y+1, pos.z-l*i)] = c.stem_red + end + end + if math.random(2) == 1 then + nodes[area:index(pos.x+l*i, pos.y, pos.z+i)] = c.stem_red + if math.random(2) == 1 then + nodes[area:index(pos.x+l*i, pos.y+1, pos.z+i)] = c.stem_red + end + end + nodes[area:index(pos.x+i, pos.y+walkspace+2, pos.z-l*i)] = c.head_red + nodes[area:index(pos.x+l*i, pos.y+walkspace+2, pos.z+i)] = c.head_red + end + nodes[area:index(pos.x, pos.y+walkspace+3, pos.z+i)] = c.head_red + nodes[area:index(pos.x+i, pos.y+walkspace+3, pos.z)] = c.head_red + for j = -1,1,2 do + nodes[area:index(pos.x+j, pos.y+walkspace+1, pos.z+i)] = c.head_red + nodes[area:index(pos.x+j*3, pos.y+walkspace+1, pos.z+i*3)] = c.head_red + for z = 1,2 do + for x = 1,2 do + for y = h-toph, h-1 do + nodes[area:index(pos.x+x*j, pos.y+y, pos.z+z*i)] = c.head_red + end + if z ~= 2 + or x ~= 2 + or math.random(4) ~= 2 then + nodes[area:index(pos.x+x*j, pos.y+h, pos.z+z*i)] = c.head_red + end + local zo = z+1 + local xo = x+1 + nodes[area:index(pos.x + xo * j, pos.y + walkspace + 2, + pos.z + zo * i)] = c.head_red + if zo ~= 3 + or xo ~= 3 + or math.random(2) == 1 then + nodes[area:index(pos.x + xo * j, pos.y + walkspace + 3, + pos.z + zo * i)] = c.head_red + end + end + end + end + end + + -- top + for z = -1,1 do + for x = -1,1 do + nodes[area:index(pos.x+x, pos.y+h+1, pos.z+z)] = c.head_red + end + end +end + +local function riesenpilz_red45(pos) + local t1 = os.clock() + + local h1 = math.random(2,MAX_SIZE) + local h2 = math.random(MAX_SIZE) + local h = h1+h2+5 + + local manip = minetest.get_voxel_manip() + local area = r_area(manip, 3, h, pos) + + local pznodes = {} + riesenpilz.red45(pos, pznodes, area, h1, h2) + + set_vm_data(manip, pznodes, pos, t1, "red45") +end + + +function riesenpilz.apple(pos, nodes, area) + local size = 5 + local a = size*2 + local b = size-1 + + for l = -b, b do + for j = 1, a-1 do + for k = -size, size, a do + nodes[area:index(pos.x+k, pos.y+j, pos.z+l)] = c.red + nodes[area:index(pos.x+l, pos.y+j, pos.z+k)] = c.red + end + end + for i = -b, b do + nodes[area:index(pos.x+i, pos.y, pos.z+l)] = c.red + nodes[area:index(pos.x+i, pos.y+a, pos.z+l)] = c.red + end + end + + for i = a+1, a+b do + nodes[area:index(pos.x, pos.y+i, pos.z)] = c.tree + end + + local d = pos.y+1 + for i = -3,1,1 do + nodes[area:index(pos.x+i, d, pos.z+1)] = c.brown + end + for i = 0,1,1 do + nodes[area:index(pos.x+i+1, d, pos.z-1-i)] = c.brown + nodes[area:index(pos.x+i+2, d, pos.z-1-i)] = c.brown + end + nodes[area:index(pos.x+1, d, pos.z)] = c.brown + nodes[area:index(pos.x-3, d+1, pos.z+1)] = c.brown +end + +local function riesenpilz_apple(pos) + + local t1 = os.clock() + local manip = minetest.get_voxel_manip() + local area = r_area(manip, 5, 14, pos) + + local pznodes = {} + riesenpilz.apple(pos, pznodes, area) + + if not set_vm_nodes(manip, pznodes) then + return + end + manip:write_to_map() + riesenpilz.inform("an apple grew at " .. minetest.pos_to_string(pos), 3, t1) + manip:update_map() +end + + + +-- 3D apple [3apple] + + +if riesenpilz.change_apple then + minetest.override_item("default:apple", { + drawtype = "nodebox", + tiles = {"3apple_apple_top.png", "3apple_apple_bottom.png", "3apple_apple.png"}, + node_box = { + type = "fixed", + fixed = { + {-3/16, -7/16, -3/16, 3/16, 1/16, 3/16}, + {-4/16, -6/16, -3/16, 4/16, 0, 3/16}, + {-3/16, -6/16, -4/16, 3/16, 0, 4/16}, + {-1/32, 1/16, -1/32, 1/32, 4/16, 1/32}, + {-1/16, 1.6/16, 0, 1/16, 1.8/16, 1/16}, + {-2/16, 1.4/16, 1/16, 1/16, 1.6/16, 2/16}, + {-2/16, 1.2/16, 2/16, 0, 1.4/16, 3/16}, + {-1.5/16, 1/16, .5/16, 0.5/16, 1.2/16, 2.5/16}, + } + }, + }) +end + + + +-- Mushroom Nodes + + +local abm_allowed = true +local disallowed_ps = {} + +for name, ndata in pairs({ + brown = { + description = "brown mushroom", + box = { + {-0.15, -0.2, -0.15, 0.15, -0.1, 0.15}, + {-0.2, -0.3, -0.2, 0.2, -0.2, 0.2}, + {-0.05, -0.5, -0.05, 0.05, -0.3, 0.05} + }, + growing = { + r = {min=3, max=4}, + grounds = {soil=1, crumbly=3}, + neighbours = {"default:tree"}, + light = {min=1, max=7}, + interval = 100, + chance = 18, + }, + hp = 2, + }, + red = { + description = "red mushroom", + box = { + {-1/16, -8/16, -1/16, 1/16, -6/16, 1/16}, + {-3/16, -6/16, -3/16, 3/16, -5/16, 3/16}, + {-4/16, -5/16, -4/16, 4/16, -4/16, 4/16}, + {-3/16, -4/16, -3/16, 3/16, -3/16, 3/16}, + {-2/16, -3/16, -2/16, 2/16, -2/16, 2/16} + }, + growing = { + r = {min=4, max=5}, + grounds = {soil=2}, + neighbours = {"default:water_flowing"}, + light = {min=4, max=13}, + interval = 50, + chance = 30, + }, + hp = -2, + }, + fly_agaric = { + description = "fly agaric", + box = { + {-0.05, -0.5, -0.05, 0.05, 1/20, 0.05}, + {-3/20, -6/20, -3/20, 3/20, 0, 3/20}, + {-4/20, -2/20, -4/20, 4/20, -4/20, 4/20} + }, + growing = { + r = 4, + grounds = {soil=1, crumbly=3}, + neighbours = {"default:pinetree"}, + light = {min=2, max=10}, + interval = 101, + chance = 30, + }, + hp = -6, + }, + lavashroom = { + description = "Lavashroom", + box = { + {-1/16, -8/16, -1/16, 1/16, -6/16, 1/16}, + {-2/16, -6/16, -2/16, 2/16, 0, 2/16}, + {-3/16, -5/16, -3/16, 3/16, -1/16, 3/16}, + {-4/16, -4/16, -4/16, 4/16, -2/16, 4/16} + }, + growing = { + r = {min=5, max=6}, + grounds = {cracky=3}, + neighbours = {"default:lava_source"}, + light = {min=10, max=12}, + interval = 1010, + chance = 60, + }, + hp = -1, + }, + glowshroom = { + description = "Glowshroom", + box = { + {-1/16, -8/16, -1/16, 1/16, -1/16, 1/16}, + {-2/16, -3/16, -2/16, 2/16, -2/16, 2/16}, + {-3/16, -5/16, -3/16, 3/16, -3/16, 3/16}, + {-3/16, -7/16, -3/16, -2/16, -5/16, -2/16}, + {3/16, -7/16, -3/16, 2/16, -5/16, -2/16}, + {-3/16, -7/16, 3/16, -2/16, -5/16, 2/16}, + {3/16, -7/16, 3/16, 2/16, -5/16, 2/16} + }, + growing = { + r = 3, + grounds = {soil=1, crumbly=3}, + neighbours = {"default:stone"}, + light = 0, + interval = 710, + chance = 320, + }, + hp = -2, + }, + nether_shroom = { + description = "Nether mushroom", + box = { + {-1/16, -8/16, -1/16, 1/16, -2/16, 1/16}, + {-2/16, -6/16, -2/16, 2/16, -5/16, 2/16}, + {-3/16, -2/16, -3/16, 3/16, 0, 3/16}, + {-4/16, -1/16, -4/16, 4/16, 1/16,-2/16}, + {-4/16, -1/16, 2/16, 4/16, 1/16, 4/16}, + {-4/16, -1/16, -2/16,-2/16, 1/16, 2/16}, + { 2/16, -1/16, -2/16, 4/16, 1/16, 2/16} + }, + burntime = 6, + hp = -3, + }, + parasol = { + description = "white parasol mushroom", + box = { + {-1/16, -8/16, -1/16, 1/16, 0, 1/16}, + {-2/16, -6/16, -2/16, 2/16, -5/16, 2/16}, + {-5/16, -4/16, -5/16, 5/16, -3/16, 5/16}, + {-4/16, -3/16, -4/16, 4/16, -2/16, 4/16}, + {-3/16, -2/16, -3/16, 3/16, -1/16, 3/16} + }, + growing = { + r = {min=3, max=5}, + grounds = {soil=1, crumbly=3}, + neighbours = {"default:pinetree"}, + light = {min=1, max=11}, + interval = 51, + chance = 36, + }, + hp = 3, + }, + red45 = { + description = "45 red mushroom", + box = { + {-1/16, -0.5, -1/16, 1/16, 1/8, 1/16}, + {-3/16, 1/8, -3/16, 3/16, 1/4, 3/16}, + {-5/16, -1/4, -5/16, -1/16, 1/8, -1/16}, + {1/16, -1/4, -5/16, 5/16, 1/8, -1/16}, + {-5/16, -1/4, 1/16, -1/16, 1/8, 5/16}, + {1/16, -1/4, 1/16, 5/16, 1/8, 5/16} + }, + growing = { + r = {min=3, max=4}, + grounds = {soil=2}, + neighbours = {"default:water_source"}, + light = {min=2, max=7}, + interval = 1000, + chance = 180, + }, + hp = 1, + }, + brown45 = { + description = "45 brown mushroom", + box = { + {-1/16, -0.5, -1/16, 1/16, 1/16, 1/16}, + {-3/8, 1/8, -7/16, 3/8, 1/4, 7/16}, + {-7/16, 1/8, -3/8, 7/16, 1/4, 3/8}, + {-3/8, 1/4, -3/8, 3/8, 5/16, 3/8}, + {-3/8, 1/16, -3/8, 3/8, 1/8, 3/8} + }, + growing = { + r = {min=2, max=3}, + grounds = {tree=1}, + neighbours = {"default:water_flowing"}, + light = {min=7, max=11}, + interval = 100, + chance = 20, + }, + hp = 1, + }, +}) do + local burntime = ndata.burntime or 1 + local box = { + type = "fixed", + fixed = ndata.box + } + local nd = "riesenpilz:" .. name + minetest.register_node(nd, { + description = ndata.description, + tiles = { + --~ {name = "riesenpilz_"..name.."_top.png", tileable_vertical = false}, + --~ {name = "riesenpilz_"..name.."_bottom.png", tileable_vertical = false}, + --~ {name = "riesenpilz_"..name.."_side.png", tileable_vertical = false}, + "riesenpilz_" .. name .. "_top.png", + "riesenpilz_" .. name .. "_bottom.png", + "riesenpilz_" .. name .. "_side.png", + }, + use_texture_alpha = "opaque", + inventory_image = "riesenpilz_"..name.."_side.png", + walkable = false, + buildable_to = true, + drawtype = "nodebox", + paramtype = "light", + groups = {snappy=3,flammable=2,attached_node=1}, + sounds = default.node_sound_leaves_defaults(), + node_box = box, + selection_box = box, + furnace_burntime = burntime, + on_secondary_use = minetest.item_eat(ndata.hp), + }) + + local g = ndata.growing + + if g then + local grounds = g.grounds + local nds = {} + for n in pairs(grounds) do + table.insert(nds, "group:"..n) + end + + local nbs = table.copy(g.neighbours) + table.insert(nbs, "air") + + local rmin, rmax, lmin, lmax + + local r = g.r + if type(r) == "table" then + rmin = r.min + rmax = r.max + else + rmin = r or 3 + rmax = rmin + end + + local l = g.light + if type(l) == "table" then + lmin = l.min + lmax = l.max + else + lmin = l or 3 + lmax = lmin + end + + minetest.register_abm({ + nodenames = nds, + neighbors = g.neighbours, + interval = g.interval, + chance = g.chance, + catch_up = false, + action = function(pos, node) + if not abm_allowed then + return + end + + -- don't try to spawn them on the same positions again + for _,p in pairs(disallowed_ps) do + if vector.equals(p, pos) then + return + end + end + + -- don't spawn mushroom circles next to other ones + if minetest.find_node_near(pos, rmax, nd) then + return + end + + -- spawn them around the right nodes + local data = minetest.registered_nodes[node.name] + if not data + or not data.groups then + return + end + local groups = data.groups + for groupname, groupvalue in pairs(grounds) do + if groups[groupname] ~= groupvalue then + return + end + end + + -- find their neighbours + for _,n in pairs(nbs) do + if not minetest.find_node_near(pos, rmin, n) then + return + end + end + + -- should disallow lag + abm_allowed = false + minetest.after(2, function() abm_allowed = true end) + disallowed_ps[#disallowed_ps+1] = pos + + -- witch circles + local ps = {} + for _,p in pairs(riesenpilz.circle(math.random(rmin, rmax))) do + p = vector.add(pos, p) + + -- currently 3 is used here, approved by its use in the mapgen + if math.random(3) == 1 then + + -- don't only use the current y for them + for y = 1,-1,-1 do + local pos_above = {x=p.x, y=p.y+y, z=p.z} + if minetest.get_node(pos_above).name ~= "air" then + break + end + local f = minetest.get_node({x=p.x, y=p.y+y-1, z=p.z}).name + if f ~= "air" then + + -- they grown on specific nodes + local data_ground = minetest.registered_nodes[f] + if data_ground + and data_ground.walkable + and data_ground.groups + and (not data_ground.drawtype + or data_ground.drawtype == "normal" + ) then + local ground_disallowed + for n,i in pairs(grounds) do + if data_ground.groups[n] ~= i then + ground_disallowed = true + break + end + end + if not ground_disallowed then + + -- they also need specific light strengths + local light = minetest.get_node_light( + pos_above, 0.5) + if light >= lmin + and light <= lmax then + ps[#ps+1] = pos_above + end + end + end + break + end + end + end + end + if not ps[1] then + return + end + + -- place them + for _,p in pairs(ps) do + minetest.set_node(p, {name=nd}) + end + minetest.log("info", "[riesenpilz] "..nd.." mushrooms grew at "..minetest.pos_to_string(pos)) + end + }) + end +end + +-- disallow abms when the server is lagging +minetest.register_globalstep(function(dtime) + if dtime > 0.5 + and abm_allowed then + abm_allowed = false + minetest.after(2, function() abm_allowed = true end) + --minetest.chat_send_all(dtime) + end +end) + + + +-- Big Mushroom Nodes + + +local head_sounds = default.node_sound_wood_defaults({ + footstep = {name="riesenpilz_head", gain=0.1}, + place = {name="default_place_node", gain=0.5}, + dig = {name="riesenpilz_head", gain=0.2}, + dug = {name="riesenpilz_stem", gain=0.1} +}) +local add_fence = minetest.register_fence +local node_groups = {oddly_breakable_by_hand=3, fall_damage_add_percent=-80, bouncy=10} + +for _, ndata in ipairs({ + { + typ = "stem", + description = "white", + textures = {"stem_top.png", "stem_top.png", "stem_white.png"}, + }, + { + typ = "stem", + name = "brown", + textures = {"stem_top.png", "stem_top.png", "stem_brown.png"}, + fence = false, + }, + { + typ = "stem", + name = "blue", + textures = {"stem_top.png","stem_top.png","stem_blue.png"}, + fence = false, + }, + { + typ = "stem", + name = "red", + textures = {"stem_red45_top.png","stem_red45_top.png","stem_red45.png"}, + }, + { + name = "lamellas", + description = "giant mushroom lamella", + textures = "lamellas.png", + sapling = "lamellas" + }, + { + typ = "head", + name = "red", + textures = {"head.png", "lamellas.png", "head.png"}, + sapling = "red" + }, + { + typ = "head", + name = "orange", + textures = "head_orange.png", + sapling = "lavashroom" + }, + { + typ = "head", + name = "yellow", + textures = "head_yellow.png", + sapling = "lavashroom" + }, + { + typ = "head", + name = "brown", + textures = {"brown_top.png", "lamellas.png", "brown_top.png"}, + sapling = "brown", + }, + { + typ = "head", + name = "brown_full", + description = "full brown", + textures = "brown_top.png", + sapling = "brown", + fence = false, + }, + { + typ = "head", + name = "blue_bright", + description = "blue bright", + textures = "head_blue_bright.png", + sapling = "glowshroom" + }, + { + typ = "head", + name = "blue", + textures = "head_blue.png", + sapling = "glowshroom" + }, + { + typ = "head", + name = "white", + textures = "head_white.png", + sapling = "parasol" + }, + { + typ = "head", + name = "beige", + textures = {"head_beige.png", "head_white.png", "head_beige.png"}, + sapling = "parasol" + }, + { + typ = "head", + name = "brown_bright", + description = "brown bright", + textures = {"head_brown_bright.png", "head_white.png", "head_brown_bright.png"}, + sapling = "parasol" + }, +}) do + -- fill missing stuff + local textures = ndata.textures + ndata.description = ndata.description or ndata.name + if type(textures) == "string" then + textures = {textures} + end + for i = 1,#textures do + textures[i] = "riesenpilz_"..textures[i] + end + local nodename = "riesenpilz:" + local desctiption,sounds = "giant mushroom " + if ndata.typ == "stem" then + desctiption = desctiption .. "stem " .. ndata.description + nodename = nodename .. "stem" .. + ((ndata.name and "_" .. ndata.name) or "") + sounds = default.node_sound_wood_defaults({ + footstep = {name="riesenpilz_stem", gain=0.2}, + place = {name="default_place_node", gain=0.5}, + dig = {name="riesenpilz_stem", gain=0.4}, + dug = {name="default_wood_footstep", gain=0.3} + }) + elseif ndata.typ == "head" then + desctiption = desctiption .. "head " .. ndata.description + nodename = nodename .. "head_" .. ndata.name + sounds = head_sounds + else + nodename = nodename .. ndata.name + desctiption = desctiption .. ndata.description + end + local drop = ndata.sapling and {max_items = 1, items = { + {items = {"riesenpilz:" .. ndata.sapling}, rarity = 20}, + {items = {nodename}, rarity = 1} + }} + minetest.register_node(nodename, { + description = desctiption, + tiles = textures, + groups = node_groups, + drop = drop, + sounds = sounds, + }) + + if add_fence + and ndata.fence ~= false then + add_fence({fence_of = nodename}) + end +end + +minetest.register_node("riesenpilz:head_red_side", { + description = "giant mushroom head red side", + tiles = {"riesenpilz_head.png", "riesenpilz_lamellas.png", "riesenpilz_head.png", + "riesenpilz_head.png", "riesenpilz_head.png", "riesenpilz_lamellas.png"}, + paramtype2 = "facedir", + groups = node_groups, + drop = {max_items = 1, + items = {{items = {"riesenpilz:fly_agaric"},rarity = 20,}, + {items = {"riesenpilz:head_red"},rarity = 1,}}}, + sounds = head_sounds +}) + + + +minetest.register_node("riesenpilz:ground", { + description = "dirt with rotten grass", + tiles = {"riesenpilz_ground_top.png","default_dirt.png", + {name="default_dirt.png^riesenpilz_ground_side.png", tileable_vertical = false} + }, + groups = {crumbly=3}, + sounds = default.node_sound_dirt_defaults(), + drop = 'default:dirt' +}) + + +c = { + air = minetest.get_content_id("air"), + + stem = minetest.get_content_id("riesenpilz:stem"), + head_red = minetest.get_content_id("riesenpilz:head_red"), + lamellas = minetest.get_content_id("riesenpilz:lamellas"), + + head_brown = minetest.get_content_id("riesenpilz:head_brown"), + + head_red_side = minetest.get_content_id("riesenpilz:head_red_side"), + + stem_brown = minetest.get_content_id("riesenpilz:stem_brown"), + head_brown_full = minetest.get_content_id("riesenpilz:head_brown_full"), + head_orange = minetest.get_content_id("riesenpilz:head_orange"), + head_yellow = minetest.get_content_id("riesenpilz:head_yellow"), + + stem_blue = minetest.get_content_id("riesenpilz:stem_blue"), + head_blue = minetest.get_content_id("riesenpilz:head_blue"), + head_blue_bright = minetest.get_content_id("riesenpilz:head_blue_bright"), + + head_white = minetest.get_content_id("riesenpilz:head_white"), + head_beige = minetest.get_content_id("riesenpilz:head_beige"), + head_brown_bright = minetest.get_content_id("riesenpilz:head_brown_bright"), + + stem_red = minetest.get_content_id("riesenpilz:stem_red"), + + red = minetest.get_content_id("default:copperblock"), + brown = minetest.get_content_id("default:desert_stone"), + tree = minetest.get_content_id("default:tree"), +} + + + +-- Growing + + +minetest.register_tool("riesenpilz:growingtool", { + description = "growingtool", + inventory_image = "riesenpilz_growingtool.png", +}) + +local grow_functions = { + ["riesenpilz:red"] = riesenpilz_hybridpilz, + ["riesenpilz:fly_agaric"] = riesenpilz_minecraft_fliegenpilz, + ["riesenpilz:brown"] = riesenpilz_brauner_minecraftpilz, + ["riesenpilz:lavashroom"] = riesenpilz_lavashroom, + ["riesenpilz:glowshroom"] = riesenpilz_glowshroom, + ["riesenpilz:parasol"] = riesenpilz_parasol, + ["riesenpilz:red45"] = riesenpilz_red45, + ["default:apple"] = riesenpilz_apple +} +local function get_grow(name) + if grow_functions[name] then + return grow_functions[name] + end + + local is = {} + for i = 1,#minetest.registered_abms do + local ad = minetest.registered_abms[i] + if type(ad.nodenames) ~= "table" then + minetest.log("warning", "ABM nodenames is not a table: " .. + dump(ad)) + return + end + if ad.chance > 1 + and table.indexof(ad.nodenames, name) ~= -1 then + is[#is+1] = ad.action + end + end + + local func + if is[1] then + function func(pos, node) + for i = 1,#is do + is[i](pos, node) + end + end + else + local def = minetest.registered_nodes[name] + if def then + if def.on_timer then + func = def.on_timer + else + func = function(pos, _, player) + if def.on_place then + def.on_place(ItemStack(name), player, { + type = "node", + under = vector.new(pos),--{x=pos.x, y=pos.y-1, z=pos.z}, + above = vector.new(pos) + }) + end + if def.after_place_node then + def.after_place_node(pos) + end + end + end + else + func = function() end + end + end + + grow_functions[name] = func + return func +end + +minetest.register_on_punchnode(function(pos, node, player) + if player:get_wielded_item():get_name() ~= "riesenpilz:growingtool" + or minetest.is_protected(pos, player:get_player_name()) then + return + end + + local func = get_grow(node.name) + if func then + func(pos, node, player) + end +end) + + + +-- Uses + + +-- mush45's meal +minetest.register_craftitem("riesenpilz:mush45_meal", { + description = "Mushroom Meal", + inventory_image = "riesenpilz_mush45_meal.png", + on_use = minetest.item_eat(6), +}) + +minetest.register_craft({ + output = "riesenpilz:mush45_meal 4", + recipe = { + {"riesenpilz:brown45", "riesenpilz:red45"}, + {"riesenpilz:red45", "riesenpilz:brown45"}, + } +}) + + +--[[ unfinished +if minetest.global_exists(technic) then + if minetest.global_exists(digilines) then + -- digiline light value detector + minetest.register_node("riesenpilz:light_detector" { + tiles = {"riesenpilz_light_detector.png"}, + paramtype = "light", + digiline = { + receive = function(pos) + local light = minetest.get_node_light(pos) + send("light_detector", light) + end, + }, + --sounds = , + }) + + --technic.comp({"riesenpilz:glowshroom 10", "coal"}, "riesenpilz:light_detector") + end + + + --[ [ + if minetest.global_exists(3darmor) then add to depends + --lavashroom skin armor, swimming in lava possible + + minetest.register_craftitem("riesenpilz:lavashroom_flesh", { + description = "lavashroom's flesh", + inventory_image = "riesenpilz_lavashroom_flesh.png", + on_use = minetest.item_eat(3), + }) + + minetest.register_craftitem("riesenpilz:lavashroom_skin", { + description = "lavashroom's skin", + inventory_image = "riesenpilz_lavashroom_skin.png", + }) + + minetest.register_craftitem("riesenpilz:antilava_plate", { + description = "lava protecting plate", + inventory_image = "riesenpilz_antilava_plate.png", + }) + + technic.centri("riesenpilz:lavashroom", {"riesenpilz:lavashroom_flesh", "riesenpilz:lavashroom_skin"}) + technic.comp("riesenpilz:lavashroom_skin 5", "riesenpilz:antilava_plate") + + armor_register(plate blah) + end--] ] +}) +end--]] + + +if riesenpilz.enable_mapgen then + dofile(modpath.."mapgen.lua") +end + + + +-- Legacy + + +minetest.register_alias("riesenpilz:head_binge", "riesenpilz:head_beige") + + +local time = math.floor(tonumber(os.clock()-load_time_start)*100+0.5)/100 +local msg = "[riesenpilz] loaded after ca. "..time +if time > 0.05 then + print(msg) +else + minetest.log("info", msg) +end diff --git a/mods/riesenpilz/mapgen.lua b/mods/riesenpilz/mapgen.lua new file mode 100644 index 00000000..f6076159 --- /dev/null +++ b/mods/riesenpilz/mapgen.lua @@ -0,0 +1,340 @@ +local minetest = minetest --Should make things a bit faster. + +local c +local function define_contents() + c = { + ignore = minetest.get_content_id("ignore"), + air = minetest.get_content_id("air"), + + water = minetest.get_content_id("default:water_source"), + stone = minetest.get_content_id("default:stone"), + dirt = minetest.get_content_id("default:dirt"), + desert_sand = minetest.get_content_id("default:desert_sand"), + + dry_shrub = minetest.get_content_id("default:dry_shrub"), + + ground = minetest.get_content_id("riesenpilz:ground"), + riesenpilz_brown = minetest.get_content_id("riesenpilz:brown"), + riesenpilz_red = minetest.get_content_id("riesenpilz:red"), + riesenpilz_fly_agaric = minetest.get_content_id("riesenpilz:fly_agaric"), + riesenpilz_lavashroom = minetest.get_content_id("riesenpilz:lavashroom"), + riesenpilz_glowshroom = minetest.get_content_id("riesenpilz:glowshroom"), + riesenpilz_parasol = minetest.get_content_id("riesenpilz:parasol"), + + TREE_STUFF = { + minetest.get_content_id("default:tree"), + minetest.get_content_id("default:leaves"), + minetest.get_content_id("default:apple"), + minetest.get_content_id("default:jungletree"), + minetest.get_content_id("default:jungleleaves"), + minetest.get_content_id("default:junglegrass"), + }, + } +end + + +local grounds = {} +local function is_ground(id) + local is = grounds[id] + if is ~= nil then + return is + end + local data = minetest.registered_nodes[minetest.get_name_from_content_id(id)] + if not data + or data.paramtype == "light" then + grounds[id] = false + return false + end + local groups = data.groups + if groups + and (groups.crumbly == 3 or groups.soil == 1) then + grounds[id] = true + return true + end + grounds[id] = false + return false +end + +local toremoves = {} +local function is_toremove(id) + local is = toremoves[id] + if is ~= nil then + return is + end + local data = minetest.registered_nodes[minetest.get_name_from_content_id(id)] + if not data then + toremoves[id] = false + return false + end + local groups = data.groups + if groups + and groups.flammable then + toremoves[id] = true + return true + end + toremoves[id] = false + return false +end + + +local data = {} +local area, pr +local function make_circle(nam, pos, radius, chance) + local circle = riesenpilz.circle(radius) + for i = 1, #circle do + if pr:next(1, chance) == 1 then + local vi = area:indexp(vector.add(pos, circle[i])) + if data[vi] == c.air + and is_ground(data[vi - area.ystride]) then + data[vi] = nam + end + end + end +end + + +local nosmooth_rarity = 0.5 +local smooth_rarity_max = 0.6 +local smooth_rarity_min = 0.4 +local smooth_rarity_dif = smooth_rarity_max - smooth_rarity_min +local perlin_scale = 500 + +local contents_defined +minetest.register_on_generated(function(minp, maxp, seed) + if maxp.y <= 0 + or minp.y >= 150 then --avoid generation in the sky + return + end + + local x0,z0,x1,z1 = minp.x,minp.z,maxp.x,maxp.z -- Assume X and Z lengths are equal + local perlin1 = minetest.get_perlin(51,3, 0.5, perlin_scale) --Get map specific perlin + + if not riesenpilz.always_generate then + local biome_allowed + for x = x0, x1, 16 do + for z = z0, z1, 16 do + if perlin1:get2d({x=x, y=z}) > nosmooth_rarity then + biome_allowed = true + break + end + end + if biome_allowed then + break + end + end + if not biome_allowed then + return + end + end + + local t1 = os.clock() + riesenpilz.inform(("tries to generate a giant mushroom biome at: " .. + "x=[%d; %d]; y=[%d; %d]; z=[%d; %d]"):format(minp.x, maxp.x, minp.y, + maxp.y, minp.z, maxp.z), 2) + + if not contents_defined then + define_contents() + contents_defined = true + end + + local divs = (maxp.x-minp.x); + local num = 1 + local tab = {} + pr = PseudoRandom(seed+68) + + local heightmap = minetest.get_mapgen_object("heightmap") + local hmi = 1 + local hm_zstride = divs+1 + + local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") + vm:get_data(data) + area = VoxelArea:new{MinEdge=emin, MaxEdge=emax} + + for p_pos in area:iterp(minp, maxp) do --remove tree stuff + local d_p_pos = data[p_pos] + for _,nam in ipairs(c.TREE_STUFF) do + if d_p_pos == nam then + data[p_pos] = c.air + break + end + end + end + + for j=0,divs do + for i=0,divs do + local x,z = x0+i,z0+j + + --Check if we are in a "riesenpilz biome" + local in_biome = false + local test = perlin1:get2d({x=x, y=z}) + --smooth mapgen + if riesenpilz.always_generate then + in_biome = true + elseif riesenpilz.smooth then + if test >= smooth_rarity_max + or ( + test > smooth_rarity_min + and pr:next(1, 1000) <= ((test-smooth_rarity_min)/smooth_rarity_dif)*1000 + ) then + in_biome = true + end + elseif test > nosmooth_rarity then + in_biome = true + end + + if in_biome then + + local ymin = math.max(heightmap[hmi]-5, minp.y) + local ymax = math.min(heightmap[hmi]+20, maxp.y) + + -- skip the air part + local ground + local vi = area:index(x, ymax, z) + for y = ymax, ymin, -1 do + if data[vi] ~= c.air then + ground = y + break + end + vi = vi - area.ystride + end + + local ground_y + if ground then + for y = ground, ymin, -1 do + local d_p_pos = data[vi] + if is_toremove(d_p_pos) then + -- remove trees etc. + data[vi] = c.air + else + if is_ground(d_p_pos) then + ground_y = y + heightmap[hmi] = y + end + break + end + vi = vi - area.ystride + end + end + + if ground_y then + -- add ground and dirt below if needed + data[vi] = c.ground + for off = -1,-5,-1 do + local p_pos = vi + off * area.ystride + if not is_ground(data[p_pos]) + or data[p_pos] == c.dirt then + break + end + data[p_pos] = c.dirt + end + + local bigtype + local boden = {x=x,y=ground_y+1,z=z} + if pr:next(1,15) == 1 then + data[vi + area.ystride] = c.dry_shrub + elseif pr:next(1,80) == 1 then + make_circle(c.riesenpilz_brown, boden, pr:next(3,4), 3) + elseif pr:next(1,85) == 1 then + make_circle(c.riesenpilz_parasol, boden, pr:next(3,5), 3) + elseif pr:next(1,90) == 1 then + make_circle(c.riesenpilz_red, boden, pr:next(4,5), 3) + elseif pr:next(1,100) == 1 then + make_circle(c.riesenpilz_fly_agaric, boden, 4, 3) + elseif pr:next(1,340) == 10 then + bigtype = 2 + elseif pr:next(1,380) == 1 then + bigtype = 1 + elseif pr:next(1,390) == 20 then + bigtype = 3 + elseif pr:next(1,800) == 7 then + bigtype = 5 + elseif pr:next(1,4000) == 1 then + make_circle(c.riesenpilz_lavashroom, boden, pr:next(5,6), 3) + elseif pr:next(1,5000) == 1 then + make_circle(c.riesenpilz_glowshroom, boden, 3, 3) + elseif pr:next(1,6000) == 2 then + if pr:next(1,200) == 15 then + bigtype = 4 + elseif pr:next(1,2000) == 54 then + bigtype = 6 + end + end + if bigtype then + tab[num] = {bigtype, boden} + num = num+1 + end + end + end + hmi = hmi+1 + end + end + riesenpilz.inform("ground finished", 2, t1) + + local param2s + if num ~= 1 then + local t2 = os.clock() + for _,v in pairs(tab) do + local p = v[2] + + -- simple test for the distance to the biome border + local found_border = false + local dist = 5 + local xmin = math.max(minp.x, p.x - dist) + local xmax = math.min(maxp.x, p.x + dist) + local hm_vi = (p.z - minp.z) * hm_zstride + xmin - minp.x + 1 + for _ = xmin, xmax do + if not heightmap[hm_vi] then + found_border = true + break + end + hm_vi = hm_vi+1 + end + if not found_border then + local zmin = math.max(minp.z, p.z - dist) + local zmax = math.min(maxp.z, p.z + dist) + hm_vi = (zmin - minp.z) * hm_zstride + p.x - minp.x + 1 + for _ = zmin, zmax do + if not heightmap[hm_vi] then + found_border = true + break + end + hm_vi = hm_vi + hm_zstride + end + end + + if not found_border then + local m = v[1] + if m == 1 then + riesenpilz.red(p, data, area) + elseif m == 2 then + riesenpilz.brown(p, data, area) + elseif m == 3 then + if not param2s then + param2s = vm:get_param2_data() + end + riesenpilz.fly_agaric(p, data, area, param2s) + elseif m == 4 then + riesenpilz.lavashroom(p, data, area) + elseif m == 5 then + riesenpilz.parasol(p, data, area) + elseif m == 6 then + riesenpilz.red45(p, data, area) + end + end + end + riesenpilz.inform("giant shrooms generated", 2, t2) + end + + local t2 = os.clock() + vm:set_data(data) + if param2s then + vm:set_param2_data(param2s) + end + vm:set_lighting({day=0, night=0}) + vm:calc_lighting() + vm:write_to_map() + area = nil + riesenpilz.inform("data set", 2, t2) + + riesenpilz.inform("done", 1, t1) +end) diff --git a/mods/riesenpilz/mod.conf b/mods/riesenpilz/mod.conf new file mode 100644 index 00000000..70223baf --- /dev/null +++ b/mods/riesenpilz/mod.conf @@ -0,0 +1,3 @@ +name = riesenpilz +depends = default +optional_depends = digilines,fence_registration,technic diff --git a/mods/riesenpilz/settings.lua b/mods/riesenpilz/settings.lua new file mode 100644 index 00000000..b5b99af5 --- /dev/null +++ b/mods/riesenpilz/settings.lua @@ -0,0 +1,25 @@ +--This file contains configuration options for riesenpilz mod. + +-- mapgen size etc. does not work +riesenpilz.enable_mapgen = false + +--Generate giant mushroom biomes everywhere +riesenpilz.always_generate = false + +--Enables smooth transition of biomes. +riesenpilz.smooth = true + +--says some information. +riesenpilz.info = true + +--informs the players too +riesenpilz.inform_all = false--minetest.is_singleplayer() + +--1: 2: 3: +riesenpilz.max_spam = 2 + +--3d apple +riesenpilz.change_apple = true + +--disallows growing a mushroom if it not every node would have a free place +riesenpilz.giant_restrict_area = false diff --git a/mods/riesenpilz/sounds/riesenpilz_head.0.ogg b/mods/riesenpilz/sounds/riesenpilz_head.0.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f634cde00d41a2f3d3f3a691109daee9de72b00f GIT binary patch literal 3737 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 literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/sounds/riesenpilz_head.2.ogg b/mods/riesenpilz/sounds/riesenpilz_head.2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8446c60ba1781f1e36096a50d63da2a385bf6613 GIT binary patch literal 3700 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 M-MY*LB=GWo02zetp8x;= literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/sounds/riesenpilz_stem.0.ogg b/mods/riesenpilz/sounds/riesenpilz_stem.0.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5cd6f0d1b82ea63dcf8f4a48c4401373926e8b82 GIT binary patch literal 3624 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 M=Z9zBGn2u80H1KhmH+?% literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/sounds/riesenpilz_stem.2.ogg b/mods/riesenpilz/sounds/riesenpilz_stem.2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..02119f41c8ffe0dfd6f45157d7c00df53287910e GIT binary patch literal 3600 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 KwO9s-mHz;}kitU% literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/3apple_apple.png b/mods/riesenpilz/textures/3apple_apple.png new file mode 100644 index 0000000000000000000000000000000000000000..81ce4721a3c9990b5bca0337b034fa8708f78268 GIT binary patch literal 252 zcmVAh2=bm$g z2|q#MKLovHslP6NT=^fTr%U2{@`Ho#p^jtat=2(=!X_aDZ4ZoS>~fTQ8-)zJm;lbkIwnl7wL2sM1qBa6m`zdzU-1Be%P)9Ht%6Aa0000Z literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/3apple_apple_bottom.png b/mods/riesenpilz/textures/3apple_apple_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..e1dcd9aa2f65aef52f42df40171ffea576184005 GIT binary patch literal 236 zcmV zF-ikb7zE(&yk@uhlelAq78*Zc3? myQ6`cio%@RG70|Um%ag-#4xPkxE{&?0000Zu4aSrz|#slIUo5VQQh;rEYGprQlu=8QE@nJg5#&Cd@ zVJj=cW)_B45ssD23`>|9=CLsJGc$BCGqf@@G&3G5feip6GIULLjeOrE+a!W z14AYwLjnUsJOe{C14B3iLl^@?C<6n~nI`FP?*ZM`?&;zfQgQ3;oOCF348F$FzDTBXj$jP08Z$4;L!aql+m5lg^D8QC q$(WRt!N`2(F=uDuRnGk}F^o%htJhg2x=R6_#Ng@b=d#Wzp$Pzk_H7OT literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_brown45_bottom.png b/mods/riesenpilz/textures/riesenpilz_brown45_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..30a0708a5d2e7a09b95e218836242656a2886f18 GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJXMj(L>zSEpGt-RIj2Vi1`-Oml za-J@ZAr-fh6@(0eTxFH5W_NOWvZy)SF#0ns;1MGOCqILL`QI~>fGQb0UHx3vIVCg! E0GDnV_y7O^ literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_brown45_side.png b/mods/riesenpilz/textures/riesenpilz_brown45_side.png new file mode 100644 index 0000000000000000000000000000000000000000..61fc3bd32a73992c348ed0e9112f84158e8052c2 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`2A(dCAr-fhCEOmIIkV;el7uz0 z(w9jt)=*OEyIK~+v-k>ki{mWA!}SVkD=Mxu1Tr(|^{);!e&`M|l)=;0&t;ucLK6T6 CxFI|M literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_brown45_top.png b/mods/riesenpilz/textures/riesenpilz_brown45_top.png new file mode 100644 index 0000000000000000000000000000000000000000..0e3e31f004cbe86ba38557181fa35af4913319c1 GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>&!IcGc(h^vu^wYlJInK z4B?PvJ-CsVK|z3F;q7`)^9!H2lLZ!OFVYpBc=e+2Ot&NKUlz(Y_3wQ+2dII;)78&q Iol`;+0IIAYLjV8( literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_brown_bottom.png b/mods/riesenpilz/textures/riesenpilz_brown_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..43b32bad9e0ea5908681c8b2b14d95b052671b8e GIT binary patch literal 319 zcmV-F0l@x=P)P)t-s_sgc` zyOid%liRb6)vb!xtb^C5ht8&h&ZT_QqI=Mzb;qB1%$#<^m}EI+ce`SQm8>suz@+%{G4PNqK4GRBf1zhDN3 zXE)M-90yMq$B>F!$q5pylP(24dQ_9qB$RaM&!Rmml9Zg7&g3-RkD5JYD@<);T3K0RV{@Q-J^g literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_brown_top.png b/mods/riesenpilz/textures/riesenpilz_brown_top.png new file mode 100644 index 0000000000000000000000000000000000000000..10ff486253b4d14fec74132665765aa42851124e GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJe}GSjYnY*UwyS1Um}PgG$Lz8Q z@3=`@fKq9mE{-7;w{%Z8axxfjFduw!|8KgU7q@89tSMLC={R$U-FzP)^dv#zvt#vS zHF>?Shrh0`-Bz&CGnn^W!EBXOqYi^IUgJ~yb{|V?&hsvDlwAJ*?op--&lbc6cyS5d i^e7AGD{&3_#PE9w<1-0{m+yc!GI+ZBxvXhX4R>003|5ikkoc098pu zK~#7Fy}`o)z)%ncz!%%L&EJ1>Ic^7;!5^Aix^l*J5MS)uc{Cl6w+#3}EozYWOd^D7 z3Gz${7l)Y)!WLKQv}^-uEXz(S&j2|Dv7Of4!4E!ASO!?*t0t@f0000FT zFf#sUVED$ua*K!OCmY)aDXERp(vL(%U&+XPQc?M-t$oSH=CZBr6FKeR|PSq@`;rgvQ_GFs<|2R{GPgGek gc*Go4EiHr@zRzO5uKKT21!y{hr>mdKI;Vst0BFB&Qvd(} literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_fly_agaric_top.png b/mods/riesenpilz/textures/riesenpilz_fly_agaric_top.png new file mode 100644 index 0000000000000000000000000000000000000000..c721b250a78e7a32e21249a804307e62b8274e0e GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc3?z4jzqJQat^qzFu7?jF-m_=Vu3fvo?Y)Az0&4e*(*jn^ERf%@0&)3051zJA5|+GXcU z=bbN}cRqH6;n6+kBZnCt++nzJh2hk3hQs?Ac5G!>x0+%89EM5#46V%!u`vuG!A8f= z{{xz1=IP=XQgJJJfnq{Za=O#A&D;f_KW_!@pqwVS97*cU7c>!yJNQ2RoDGDZ&J2x}U uIQZsK5<}t!H4TR)H@IXJx^8ecurP#uU{3sKZc+!-#^CAd=d#Wzp$P!wSTh3v literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_glowshroom_top.png b/mods/riesenpilz/textures/riesenpilz_glowshroom_top.png new file mode 100644 index 0000000000000000000000000000000000000000..2546bab7393b668c78c72f52ce6b8104d0fc1e4d GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|t`pzAje7Tn;oYmATV|7h zg3_KYjv*Ddk`M6i5M$uH%Av4OiBau9Ob3e}14CXj({aYU_u)Wg44$rjF6*2UngDyb B9m45*8_(wt6)}M_T~(t3 zK6b#DHE3uATBZ#Ry9}tz{v5? z)J>=xHq;I>Hrl-InD+ANKZ(DS3M$$PB0% z9=L)8CE`FbkQkT_hDW<{;m|u?4TwM%A&cX{WE1B|HnJn~%Bw##oO&1M$lljqc=L@Kf-AtRjlnF+@)$;OsPj!J!WCtRH7r+$d{SMEq(AdJC*$6w-Qp&q? zaZU-o{L0PgKJybJ1{5c3+>wF2~vIdq`tq{jTUfk_^20c2&1dnS#*E z3ccsqzqiUC96{H4E&l3rYp&d1)^n+^kb literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_ground_side_normal.png b/mods/riesenpilz/textures/riesenpilz_ground_side_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..57715a7f82e886971b5bf77ac8e975c027e41401 GIT binary patch literal 631 zcmV--0*L*IP)YJRN=obAfeGK0*cyzyADnmO<*ia@3;-{-I8- zCG>t&Q8SbnK>*#CHg)oV}x#gmQ$rZ8<{Nx#TPS0XU^Scf{WMt!ooQI96qLDtfIEjQ! zl7&69EPOVsGQ!J3StbpMI}0x*1M{T}AXmq`B7>DGCOS;aWSf+<2NO>m3D8~i5} z!Bg4#^x|ZRH6JZeQC9Ig^2xz;Z{&EgY@VBZtt6Y`)2_OWyXky3nTI+R%n|tSMx~V%_D1s8qf>b)5`f6k9-qG`J~Obh3>p>x z?W0e{o3hJ3YoM31MzshE(5-47(thQWnD*nB|IZZ2gz?K6$N~skL>Yz*006U|>Gp(} Rfo%W)002ovPDHLkV1mco9nk;) literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_ground_top.png b/mods/riesenpilz/textures/riesenpilz_ground_top.png new file mode 100644 index 0000000000000000000000000000000000000000..85efb556e27adf5d0ea56de7232dc64bcf6223f8 GIT binary patch literal 619 zcmV-x0+juUP)Px%B}qgSy(|eSPkqB4`;HR&*=Wu^59@H-BpDBKE{Hl-6$G{S@8s+V$9p6?%EmRUNQ`tfeLarEB%oSbtq5Hh? zHn5Z|#{&0iFAQX8eUB|jlQBI~FX#)#WciW$5R@+Dj^MpSJsQTg@sSNCZHmim zQ?`+WO~xN<&o&GR3| z!JbUR5&XsRVqc8jLOc^cnHxfYv|{=!)i3Y*_T%#EjOJuNY~Ekd9Zq*r&p^Awui841 zx$6}WXBCyoYWXg)fDo@Q!{$88v7>54jr>NT`&^7o8p1M}@oq+$!8R9z5JAYHAZ9gn zD^8AuQo)E5H1t`kC`AI3k)5Cwy%(ZbKdcrTQ8t)0&?Hx&Y$7YmQdDcZ3(0r}mjM|l zYB#V}M~FStq;Un<&{d3HB1@69ZfJ3u#cd4Al5lob{{f;jKo0c%O=JK7002ovPDHLk FV1hbL8;Sq` literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_ground_top_normal.png b/mods/riesenpilz/textures/riesenpilz_ground_top_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..88cf2b0abb090e30d8c1475d9137fadf9b06268a GIT binary patch literal 499 zcmVyvjkPqeFH#;3Oui#CwVUA-(E55M_v2m*$8CQ@CJ)&;B@jK2jy%=wv zpZ)xf=h|31dZ9FWpm>}NMB30-!i-N$OJTop`QT%xZTN^c(v=vA+vNrVR3`E&19i6#u)X2+x&Ku_FLcI>+S_lOhA9iFR zCQ>3g@0$j`an>7V@ib9Fp#XKLhc zrliP~TFHrQ_=*}|iYd8cUqoYG$;#j5yj_{PVF%vGfo#KqebR*L=|&0ckwqy7!|cpd z3hLR6T&P0_q!5g%WKUQaLCQFkh)+zZAdV7g$FSh?cu^`*$6C{%NJk1PXlHVUi}XMf pq9-LVD*smw`_*=P_g(-1002ovPDHLkV1i)#<~#rZ literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_growingtool.png b/mods/riesenpilz/textures/riesenpilz_growingtool.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e7b539a47ca37d927800a5bfeff3d47d787cae GIT binary patch literal 2312 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 literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_head_beige.png b/mods/riesenpilz/textures/riesenpilz_head_beige.png new file mode 100644 index 0000000000000000000000000000000000000000..59b5263a10d5d7f73bbee2dcad7b3429958c84f4 GIT binary patch literal 305 zcmV-10nYx3P)dLF@&9U#$v-H)vq<9`W0001_Nkl`^iuIa>#ytw=`=)zfEIPWj3ZxTgSRH)G!#s4%Y$eIrJon#Q&hqoDr-0iz3-q(+}E00000NkvXXu0mjf Dg<_Dt literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_head_blue.png b/mods/riesenpilz/textures/riesenpilz_head_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..32f83b6f96f3467eb00585898f834a18109f28f1 GIT binary patch literal 703 zcmV;w0zmzVP)Px%c}YY;RCwAA#RJSOIT!}u_iH=TIsR>~ZQC~DtYd7jiZ@!s{$p*twykU1_B}px zI-R!Py-)DaYcD^KLWbagM2|cthb0GLwylHRLuLV^3c`j{8zEBk0Fc6dBW5qA*$1Fp z-r1U;I)*G_xdVfa8=KM2sBnos_ggs(yYoQ4`Wb~Ni>5v--2wo;tq*36d*EUaq0i6` zIv3S@OE*DOp^~}QU#UWEKn%BJr3Qv90DCPsAZ0kug8^}1k%It$ou}%ky#A4QyxS}2 zGJhIo+hLep2xF@7dUDyjvi54|Ekk2_Xg%rc$aWqQ!vz&jD|2jp`~M{z@nYyXIdV-9 zL5cnV!-}%VZ>kx?^dl62-Gy00kZQtxDlnA;CeE`m|S|411Wf+GXr8|C!Cdf6){T&~& zJ*tKu4lyZI7DZ%z)9Cr%l3UC1mH|K12m>FN)%Jx_u5db1PdDoS3+t7WMiz?>Ww`EBKE-i&6TN>{?H z_7q~a--kvbt2H@#iMP8zSyUX71A&F_pE^&-$MpFCL-h6nwX+lALNr~AW<@+sL<{Ii l^a++A2p++HW;Vn3aR&HbL(2VNzQzCm002ovPDHLkV1k$zLRSC) literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_head_blue_bright.png b/mods/riesenpilz/textures/riesenpilz_head_blue_bright.png new file mode 100644 index 0000000000000000000000000000000000000000..a0c402332206fda2ab7ae6f73fc0a8f76c2cd935 GIT binary patch literal 742 zcmVPx%ph-kQRCwAQPy@_uM-cvIckj72o^9J^T-%6VtOm912DNS5*0asu*El{q#l)G< zboIIC(#REZW{w9CeEvR-TOcN9*&==7d;HS~n>)BqE1}eYj|Jv2_?75t@ICam7V&7wflPRUCJWHMhnt1_1N7_3XdE0ka7l z@wi|j=h3*8u}dHTw=lVRrzOP38FB&8C<{Oif&WRL*X?_oJ>IehDGMA9%`%Of zrov~;fzfc=S`gg#4(T1=^MI0b9*W#|7JF&;$E)<_FUhzfY;@VoHf!5q$rFzoVh_(S7U%7!nE1E(%w3K-wK)-M7!bYO>x1{^i%u1ql=pF&`;L0#y(>D&Hh?Z;TWr1HwE2WC00;2oOjsvTEKZe>vanabMhx3L#3!gOBfb`k{e; Y0Khy|)rMr34gdfE07*qoM6N<$f=HTV*Z=?k literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_head_brown_bright.png b/mods/riesenpilz/textures/riesenpilz_head_brown_bright.png new file mode 100644 index 0000000000000000000000000000000000000000..a4503c01adff74fcdd9b0d439db3f0e5ccc25513 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJe}GSj>&z6(EsYV!XBOOE*Y@tv zZ2k|7dx27Eo-U3d6}NOxH*zu`uiaL#(KDF$T)}LWRHF`qGG60T`*t5oYtHj7ag<#C|L#$y3(pqB26%A^ j-t;I7=PPjy`o!>i3F9*fhL`VvHZpj+`njxgN@xNA1%X7> literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_head_normal.png b/mods/riesenpilz/textures/riesenpilz_head_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..cb7b1cc802b19dd7e973022a27ce4d895a226af3 GIT binary patch literal 522 zcmV+l0`>igP)F^{FJy*!ks$UqYZwA_2}IMw3*5M1u)7gMVA}_DTF} zRxr|Wz`?KtC7px-lmW8n;yPk$CKRs#;*=?MhEY<;KoTvl1n2S~B6hk&Dn%VnCWmdj zC)~8Mo%A@OV98u@P$(P32uEFUXV=I4fsQvaA1O623=9W>#^FR5S;;^>X)d@iJ$&GQ zewXo{-rYwV379em`zhN+G%sVo(E+5#oG+^N#(y99vj;tyG)7G}i`Z@bM)GzU)rf}D z6mpMt_)%nOmlxE;g$$lgu|L$u`%X36f6jMT-R|W=wU>&_oD+lC;}sS5up8p$z4oHb zzqj&j+Iuno7Nti_@% literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_head_orange.png b/mods/riesenpilz/textures/riesenpilz_head_orange.png new file mode 100644 index 0000000000000000000000000000000000000000..46c5fd7070c312558d0d0ecee57866a2e85f43f8 GIT binary patch literal 578 zcmV-I0=@l-P)Px${7FPXR4C6)QcG(SQ52qk^nuIS1}q41BicGzAF*v3ACq>HSd&mv+bKSZBUIXe zUAS?hGNo>OpeWVq4{+nc|KK+hh76OH=bR}jT!wS!-t)cAb=U;EwtCRo2RmS3b);xA7hKYn^xbUNAMZz_b&sc|VFuZ@&pCz3Uif?r zhG5?ad)h2mY=PHNe2jTg8m?h{5Xqj47{7}YegL)&Uh4ZucdJ@7QGAGbN*bCN?Rmxb zxcC~69(k&@gHhy-Uq{(XKiP7Vft&4_q@E}G9p&9HcJVX|-hc=wzQwAl1u@1u5EZ&+ zOVe!=&{avL6Df+rm|JFGv#O_()lG07Z2WC7ywV9TVzl9n-$dCnKWVu7a|OI@DA=$nBU?`CKUHV62rU&XfdlgK69p#^Q z7*r$;UieSvs@)lA;pkA?I{C@ZqvK@mP4g`1A%8y~D?NzlE6DeE#L48x zr*vgX6KtBu(4I;8mO3iT$)1P2Y|es88cwI3soz&mux>%iyLxEqYe<8N3|Bgx<0$8h z=Nx$6B5GNKZ))c)=>AMOA}4zrD#n5iMX5wg-30iyty^dfr0q)aC6>7U0ROY8cG7_> QhX4Qo07*qoM6N<$g0qPx$+DSw~R4C6ql8JKKKoCUt|9>cjPAb8PLE2No;<9l78373)e~>pTSE{BK%`(&7 z)3eIeNw9^jQ*TmNXTfG(r;W>7S2QN)-c(62T;`1}y~&lW($-Jg@OAa_J-EV|tnsC{ z(%-r%SdA;+cCJ6JH{HV5siJki^B_5$9o_>BHZss4Ve^+}Mr!KhIvm_0Q84zWEi%CF zPiw)pROc{LXW?mPMkn6o_uDDxLV>;No-f1C>*dh3KPW}mZd0H8?f%s|Q+Qh{N|4)1J@wyu35ZR23Jn`9 z#2uF~2QNKHa#gZwX1}fnu@x3sR+Wl_RTgwM8qGcD7{JMzO^OGK_rni$PD*np7Nujv i*Dm(cgU-i&fb$<=re=oj#dw_n0000Px$(Md!>R47wTQoByWPz=o z0FG$(PywJ%vuWkGysPEK9#M2v;!79+Yzd%4@r{+e+1aZdk1TL?DIQx=MH+@SDG@vC~9=AS_xj)yC}3qU%p3f1(r ziky6pem;XRu2VYMknsG&i@ar-8}DbTxL>H`;TXx?x?~IEu(KHZE0MeWU0;A!Li$t( z^AL@krR*JA8=#nPK>FAuUkgUJ_`I&VB6M#xSJFrx*HJ^4f>t%fw>7)2c1t(dUBWg; Z^aF1*?)0z|4|o6o002ovPDHLkV1mKl?Pvf1 literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_lamellas.png b/mods/riesenpilz/textures/riesenpilz_lamellas.png new file mode 100644 index 0000000000000000000000000000000000000000..679fee4fa3321306e75dff657d3eda5e6da6df2c GIT binary patch literal 974 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e#^NA%Cx&(BWL^R}5&=FTt~a*! zpI%mTY);9Z2`QVJBGy!RFUYo=5~F+Ku05o?kvAv#G9L)I6 zc;&*B<62(*CDBv%zN`{hy+=3uQ(*GHe^pxR-s_&Rd$w0ZtFV7>(0}(-kA3{_SDsJN zO1u)}b;kSN=YMA%-L^Ea@6tXpMcH$q&k~zwAFqG@8PjZ4zEF8dhR+(!#S;%bkbN}6 z`~UlbTEl-r%-41$U%zD>;&zoI$S?LoZ<%_>q9f|trtLFn$Ys!qWUmjn_4 zr)EiLO~^mKAoZ$`ONPH%_e6*0w@k&mBK^I#J>kFgiKXS-PuDLTXYTk;Onx3P`Af!@ z;<=x{Ob`F7G%cf|+N|W+`p>tdUR^%JaUr|SzrHK1$G$&nw*J2p+CQ#+)3lYBIm0^Z z!HJ*zj{8r>w|TfH~cshG@}05w7X@`;@J}MZA$z5ufc|kRr#GJX6=aFePN@y z)Jyr;Q)cVW^cNrum#ny$HPU~DbE$l${aYqs@4pWe4mDw5lNysSFs z_N%3Ci8^N(``)GRce(yv^_h!m`*E{7a=+@|v#)hBUw`jc-JjfFM#~Cg~G%w4jE)zl?u zzR&+UhgNy-xO-vTdyi%JFPUPn)g&m?<$J1+<|_H6PnJ$u8lWQjv_AIAMqs{RII!Sn t@O%A^Q~ZCF>_2q>IiUZEdH)I8aU|x(?+yC*CBF@1x2LP0%Q~loCIA*c-U|Q# literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_lamellas_normal.png b/mods/riesenpilz/textures/riesenpilz_lamellas_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..430037d8aca7b9251f9f36a7629b0d7b99c425eb GIT binary patch literal 3327 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 JPDHLkV1jeiq_qG5 literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_lavashroom_bottom.png b/mods/riesenpilz/textures/riesenpilz_lavashroom_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..536237804c62abf3a3e8391681f533daad49025a GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b{eMpNNu0y$V1{S`fiw<| zE%QXa0;NnnT^vIyZY3-5ad2vBHA;4!Ve3g~ThQ65Fk@j((j%5s3F$^jrgM5t0&N?Z hg_!@pqwDG77*cU7d4Whl9w{R;SX9tO~{q8`xO3*YA5N4%Eot>FVdQ&MBb@0B3|p@yVF3Sb0RL|Q|AGMjh-3eYW&4sc{gN{NlQRF5Gyjz{|C=@coHqZL zZO^SI|DQJhpf}R6DAchi|D!nnraAwoIor1?|FS**v_Ai~KL5Bs|G7Wv#4Z25LI1u% z|Gz>1%|`#uNBz?<{?su4+A{y#GXLl`|L!*b|33f!KT`ztX#fBKS4l)cRCwB)$b$_4 zF#rI-w{6?#{^K<&<6eAH!V!*rv8QPqa5#sxt>Eu*R9$B_O&#KhjW^IQU7;e^^-ELf v@UP1w5q;TtdTxv3e&$jxQVEW1r=tM?HgOXWzG-mv00000NkvXXu0mjfQ}&E1 literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_light_detector.png b/mods/riesenpilz/textures/riesenpilz_light_detector.png new file mode 100644 index 0000000000000000000000000000000000000000..0d94b3ae75ea2485a3e40a3406d41fb1ea7f2c7d GIT binary patch literal 279 zcmV+y0qFjTP);UfSjHRT2rKAAO$y%kO8>ONEtf_r-addNWT61wsWWPscx-N5Y0C{&>P)^$h z07N)7vjhN`0|4y3^2q=I0FX&UK~#7F1;GJAgg_7j!F1vRbErh!`~O$1(q4-#{b~dI zjqac8z1V;yY0C)?j#&V*53lPa_=>UcIEQmMd3~JHq-DxD>t3Lmm>6(k)Fg3YoFrCz zOqpW$m>@K5D!s^bB4}0MhPI;wz{w{jtyrJWi3b1x002ovPDHLkV1oS>b-Mrn literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_mush45_meal.png b/mods/riesenpilz/textures/riesenpilz_mush45_meal.png new file mode 100644 index 0000000000000000000000000000000000000000..5e307a30e4f3d624014b3a7c9d3c8d661c81c668 GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`&YmugAr-fh5AeAioH;Y|f8q~& zW@eemODfZ58J=Mf@#%W2!N$ONl5N6srV`!^HlcI|fq)DKro&7kM;RvZDCYduU|(2ZxscZ=fK* zvxKmdl&Gh)sE3Sr2Onp#h)AfiV5W>ry|_T3oLr(BZ>+j-lB!arf>^qWN}Q%zmL`9q zj#jLJUZ*;Lov}ohp+KFfRGy_;tGQ^lonDoVQk|Vtor83*v+N8fkrgid(>+CtZ-wOo zZ4dNxaSW-rl^o#8{DiB(*kJRfkH#H`SZ5q*eR|~R6bV7CA1R_Dp*tpodT4(3QdpVr zDEO(!q-pNgloU047rC~$ySWH>b~7y2;I?kp2w{C%$H>6EU4bWditb6E;S8RxelF{r G5}E)rvqyFS literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_nether_shroom_side.png b/mods/riesenpilz/textures/riesenpilz_nether_shroom_side.png new file mode 100644 index 0000000000000000000000000000000000000000..6f35e0f0b02bd0ad401eadc214c6ca2bbf3d6423 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`^`0({Ar-fhC8i~aOp)^XvpzB5 z$9y%lKlW~(zv`!Sz4;#|oH#*ZhFXS$o%#3wERvo76{IpGI(W@;=E?Hk5Lgt$xRv*? zs7m#5-|$!aw=cX?zv=K{=kQPa*Duuh$<{Kv>wo{oDQbrq&KyuVKf$Pa;{U09Nl&U5 jy7)h;pSe#Zj+voixz%=`oFx`Or!aWB`njxgN@xNAGX+R3 literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_nether_shroom_top.png b/mods/riesenpilz/textures/riesenpilz_nether_shroom_top.png new file mode 100644 index 0000000000000000000000000000000000000000..0beefe714ec382be2ca3adec59cddbb89b4afd4e GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}W`IwK>+N{nURkq%R?h3cHex&oC7Vp*E}sahiS;sUYi!ij3U9ekXj%7VcXA|5j0 zp3bP0l+XkK|6EN~ literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_parasol_bottom.png b/mods/riesenpilz/textures/riesenpilz_parasol_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f884244218065a179bbfc33ae7eb92e65c1027 GIT binary patch literal 235 zcmV z_4WMi-|z45_~zE`<=y(>%jMDkKY)y3o0$M?^x-qXqL&9L3e zyXwfL-pR4s!KvB1pt%)#YXATMVM#&C<~LxDxs$;J}M2 ty7haf8_OOX?UK)4bJSn>&(e;|T(R>R@v$QxO0F literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_parasol_top.png b/mods/riesenpilz/textures/riesenpilz_parasol_top.png new file mode 100644 index 0000000000000000000000000000000000000000..f09a23af6e4ae5f2fcaa4210dfd4b8726b5d912f GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa3-AeX{c?Tp_w%b?omhHv_kxFO z>rbqnaB6wuky$0%Cgd#dDtNm-yaA}v&(p;*q~ccc0d@(|77-R12c1p_cVX5E9hK=- ztPy@ONkOX_CZrY3zGoQ7cx1wx4j;zVoiB2zE Z!|v(4Zd-W+)&fmt@O1TaS?83{1OO~AK_vhH literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_red45_bottom.png b/mods/riesenpilz/textures/riesenpilz_red45_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..1648bada31419f2b79aca91a398fc534a43f1347 GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|uK$66fng>CLq>SxJD{MV zr;B4q#jRuxRwf@M7LSfYJM)AaU2cR(Tn}YA#dYusH-j&~sLUD>Ej6HG22WQ%mvv4F FO#sFq9gP40 literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_red45_side.png b/mods/riesenpilz/textures/riesenpilz_red45_side.png new file mode 100644 index 0000000000000000000000000000000000000000..f01a7210d30db88aec571021a86ef8fa5876e1d4 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-u0VPw1H*qH`u~6XQa@cF zpRpv!FPOpM*^M+HN7d8CF@z&JIpF}?mM{m-Wm6-0d3^LgOD)hb*k~+$Dk-5P!9kf} X=VYE5H4!Oppaup{S3j3^P6 literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_red45_top.png b/mods/riesenpilz/textures/riesenpilz_red45_top.png new file mode 100644 index 0000000000000000000000000000000000000000..c87282853b4fe41bdcff16066abf35daceef965c GIT binary patch literal 94 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJTYyi9>wgA@|Ns9x%9;oQMT9+F p978H@B`;7)Q1P}^j;zXHWnkXGz!vglQyoy6!PC{xWt~$(698Ex71#g( literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_red_bottom.png b/mods/riesenpilz/textures/riesenpilz_red_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..767f7dffabc5b04b9b670de71d0a825eca55913e GIT binary patch literal 302 zcmV+}0nz@6P)~67 AyZ`_I literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_red_side.png b/mods/riesenpilz/textures/riesenpilz_red_side.png new file mode 100644 index 0000000000000000000000000000000000000000..5e13087595595036b756e4b24105c3f386c11b73 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyegQrquG6p3_&>_-r;pojd&l2O7JmfwABpIF;?zGbtA33^VT!!e3I_fr zM%GvcHh)GYD@F!U28P8+Zm)qRGnNGT1v5B2yO9RuWO=$chE&{obLuGL5d{HFVdQ&MBb@0MATf?EnA( literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_red_top.png b/mods/riesenpilz/textures/riesenpilz_red_top.png new file mode 100644 index 0000000000000000000000000000000000000000..c0eb0638b49bc44d444df39a0458612b36f3482e GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Zh%jS>nBeAKZ5$dl`MYSJO1=> z`yXZZKO^8zX5ha9*T2Of&+GjEH%I*MiTyv(@Bg&KXg{A>K#fy9T^vIyZprorGPx*n zFkO758Fcsmj_lt@53o0Hwb^#1a?@tTV3#*bi?=B~c=zJqWuCm)nwO3@GSc{qYtB6~ zDPG{h^Jr4XEYCz4gY$F3wSIR^ue#;UvSpe?z4tAk3ubWs%C?`iY~^36^G-p*W>$(R zRbjuYwXRv8o!laFZdK6i%U=@aJ~kJrxE@z)`-bV$b7r1rXZ!2y&ar;lDl~5|(18q| Lu6{1-oD!M<^qX-y literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_stem_blue.png b/mods/riesenpilz/textures/riesenpilz_stem_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..181f3ec6b850572615370b4c2ed9fb2dc65b6c7a GIT binary patch literal 625 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 literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_stem_top.png b/mods/riesenpilz/textures/riesenpilz_stem_top.png new file mode 100644 index 0000000000000000000000000000000000000000..6ff09e2082e0bee102c6bc5e88bb88a6427f86ff GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9YkpSR?U%3aZ;eU>ikN%4 zIEHY@CNnVow&&sV;rX{;f@z7wp?ZUs41<>a2^{f91Qs0?sP8)H-lh0oxS7eg`ENZN bTN#7GLmsa1LuqS(Mlg7~`njxgN@xNAG_obB literal 0 HcmV?d00001 diff --git a/mods/riesenpilz/textures/riesenpilz_stem_white.png b/mods/riesenpilz/textures/riesenpilz_stem_white.png new file mode 100644 index 0000000000000000000000000000000000000000..5b97c1a03a27d70ab5b25d8e5493d7b798178a51 GIT binary patch literal 519 zcmV+i0{H!jP)kf5lzB%mbnT9cj!VK4@lOg;VU{a@Vnnyih1PsuWqF1?6{l+xOJtu5uEL;wHp z@AZ58cz=I+dc585bBw3w$M?5qb}|nqiaBR3je=4{N>tm@S|g&L(GwAiNMbzhM>_8M z94zb}cmYBphVEdInS#g}Iz9}{KmBL>UOA=d#*!f4wslN3o6G6s5jqS)C(plKR>;>i z!Jvvn6!HH4AxyK+`}Mr78>T{96uUXPj;`C*b=p)fB_rkc_m|G;ZmphF=TIdy4$u#u z_WfCqiNU8V0)(0QF(RBhJ25njSirJyW;vQAi)hOtMRuZlhjr+VVuqf>X->27<$TsL zSTG2k&ZjJyj@rIARS+fc0X7OF_nOO6t4DAGB482$4BxTM%{`b86fTH0$q=d3I>$s? z6jGvX*Dfp+u@C#ZlW-^n)LLsP#bT!YG3l7SZ<4bVJPP8Kl6@MyOvJ4&u(ej*4JiC) zU{=+s=yp1tmQypep@X2#Ei>e`UtP))9~KZM zRH6*SV&guM!YV3@r4bao*hD^ImXb?Y?B&GJXl(M*hg%@lSVya5!;}gu(U{7}qK2s)sa4q~<_6+*wVXUyyV4UBVZn kdEC8o;(P2U=NcpY1-kRD6V>=@>;M1&07*qoM6N<$g0I+^IsgCw literal 0 HcmV?d00001