From f3393d36fc07b2e0d057701ed386fb5d0516064b Mon Sep 17 00:00:00 2001 From: Duane Date: Sat, 11 Jun 2016 03:50:17 -0500 Subject: [PATCH] Fix regressions. Add 3 teleporters. --- cavegen.lua | 2 +- fortress.lua | 13 +- fungal_tree.lua | 15 +- mapgen.lua | 2 +- nodes.lua | 201 ++++++++++++++++++---- textures/fun_caves_aquamarine.png | Bin 0 -> 2778 bytes textures/fun_caves_coral_gem.png | Bin 2040 -> 1910 bytes textures/fun_caves_garnet.png | Bin 0 -> 2728 bytes textures/fun_caves_mineral_aquamarine.png | Bin 0 -> 405 bytes textures/fun_caves_mineral_garnet.png | Bin 0 -> 372 bytes textures/fun_caves_mineral_zoisite.png | Bin 0 -> 355 bytes textures/fun_caves_zoisite.png | Bin 0 -> 2061 bytes textures/image_credits.txt | 3 + 13 files changed, 191 insertions(+), 45 deletions(-) create mode 100644 textures/fun_caves_aquamarine.png create mode 100644 textures/fun_caves_garnet.png create mode 100644 textures/fun_caves_mineral_aquamarine.png create mode 100644 textures/fun_caves_mineral_garnet.png create mode 100644 textures/fun_caves_mineral_zoisite.png create mode 100644 textures/fun_caves_zoisite.png diff --git a/cavegen.lua b/cavegen.lua index d0b0b06..58481f8 100644 --- a/cavegen.lua +++ b/cavegen.lua @@ -69,7 +69,7 @@ fun_caves.cavegen = function(minp, maxp, data, area, node, heightmap, underzone) write = true elseif underzone and (y < underzone.ceiling + 10 - (underzone.vary and cave_3[index] or 0) and y > underzone.floor - 10 + (underzone.vary and cave_3[index] or 0)) then -- nop - elseif y < height - cave_3[index] and cave_1[index3d] * cave_2[index3d] > cave_width then + elseif ((y <= maxp.y and y >= minp.y) or (data[ivm] == node['default:stone'])) and y < height - cave_3[index] and cave_1[index3d] * cave_2[index3d] > cave_width then if y <= fun_caves.underzones['Styx'].sealevel then data[ivm] = node["default:water_source"] else diff --git a/fortress.lua b/fortress.lua index 5de7d53..0f846e7 100644 --- a/fortress.lua +++ b/fortress.lua @@ -1,13 +1,10 @@ local rand = math.random local floor = math.floor +local ceil = math.ceil +local max = math.max +local map_max = 31000 -local treasures = { - 'fun_caves:stone_with_aquamarines', - 'fun_caves:stone_with_sky_iron', - 'default:obsidian', -} - fun_caves.fortress = function(minp, maxp, data, area, node) -- invisible maze -- hungry maze @@ -16,7 +13,7 @@ fun_caves.fortress = function(minp, maxp, data, area, node) -- hidden doors/downs -- hot/ice floors -- - --local level = ceil(maxp.y / 3100) + local level = max(6, ceil(maxp.y / floor(map_max / 6))) local n = 16 local walls = {} local inner_floor = node['fun_caves:dungeon_floor_1'] @@ -49,7 +46,7 @@ fun_caves.fortress = function(minp, maxp, data, area, node) --data[ivm] = fun_caves.DEBUG and node["default:glass"] or inner_wall if y2 == 0 and rand(3000) == 1 then treasure_count = treasure_count + 1 - data[ivm] = node[treasures[rand(#treasures)]] + data[ivm] = node['fun_caves:coffer'] else data[ivm] = inner_wall end diff --git a/fungal_tree.lua b/fungal_tree.lua index 93a8cc0..757cfe7 100644 --- a/fungal_tree.lua +++ b/fungal_tree.lua @@ -43,6 +43,7 @@ local fruit = minetest.get_content_id("fun_caves:fungal_tree_fruit") function fun_caves.make_fungal_tree(data, area, ivm, height) local leaf = minetest.get_content_id(fungal_tree_leaves[rand(#fungal_tree_leaves)]) + local air = minetest.get_content_id('air') for y = 0, height do local radius = 1 if y > 1 and y < height - 2 then @@ -52,12 +53,14 @@ function fun_caves.make_fungal_tree(data, area, ivm, height) for x = -radius,radius do local sr = rand(1,100) local i = ivm + z*area.zstride + y*area.ystride + x - if x == 0 and y == 0 and z == 0 then - data[i] = leaf - elseif sr == 1 then - data[i] = fruit - elseif sr < 50 then - data[i] = leaf + if data[i] == air then + if x == 0 and y == 0 and z == 0 then + data[i] = leaf + elseif sr == 1 then + data[i] = fruit + elseif sr < 50 then + data[i] = leaf + end end end end diff --git a/mapgen.lua b/mapgen.lua index fc9289a..253b841 100644 --- a/mapgen.lua +++ b/mapgen.lua @@ -64,7 +64,7 @@ fun_caves.is_fortress = function(pos, cs, debug) local n = minetest.get_perlin(fortress_noise):get3d({x=x, y=y, z=z}) if fun_caves.DEBUG and floor((n * 10000) % 4) == 1 then - print('fortress ('..x..','..y..','..zn..')') + --print('fortress ('..x..','..y..','..z..')') return true end if floor((n * 10000) % 19) == 1 then diff --git a/nodes.lua b/nodes.lua index 0796aa7..05fc166 100644 --- a/nodes.lua +++ b/nodes.lua @@ -1,5 +1,6 @@ local get_node_or_nil = minetest.get_node_or_nil local get_item_group = minetest.get_item_group +local map_max = 31000 local old_is_protected = minetest.is_protected function minetest.is_protected(pos, name) @@ -200,6 +201,108 @@ minetest.register_craft({ cooktime = 5, }) +minetest.register_craftitem("fun_caves:teleporter_iron_garnet", { + description = "Iron and Garnet Teleporter", + drawtype = "plantlike", + paramtype = "light", + tiles = {"fun_caves_tesseract_iron_garnet.png"}, + inventory_image = "fun_caves_tesseract_iron_garnet.png", + groups = {dig_immediate = 3}, + sounds = default.node_sound_stone_defaults(), + on_use = function(itemstack, user, pointed_thing) + teleporter(user, 'underworld', 0) + end, +}) + +minetest.register_craft({ + output = 'fun_caves:teleporter_iron_garnet', + recipe = { + {'fun_caves:sky_iron', 'default:copper_ingot', 'fun_caves:sky_iron'}, + {'fun_caves:perfect_garnet', 'fun_caves:perfect_garnet', 'fun_caves:perfect_garnet'}, + {'fun_caves:sky_iron', 'default:obsidian_shard', 'fun_caves:sky_iron'}, + } +}) + +minetest.register_craftitem("fun_caves:perfect_garnet", { + description = "Perfect Garnet", + drawtype = "plantlike", + paramtype = "light", + tiles = {"fun_caves_garnet.png"}, + inventory_image = "fun_caves_garnet.png", + groups = {dig_immediate = 3}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("fun_caves:stone_with_garnets", { + description = "Garnet Ore", + tiles = {"default_stone.png^fun_caves_mineral_garnet.png"}, + groups = {cracky = 1}, + drop = "fun_caves:perfect_garnet", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "fun_caves:stone_with_garnets", + wherein = "default:stone", + clust_scarcity = 17 * 17 * 17, + clust_num_ores = 1, + clust_size = 1, + y_min = -31000, + y_max = 31000, +}) + +minetest.register_craftitem("fun_caves:teleporter_iron_zoisite", { + description = "Iron and Zoisite Teleporter", + drawtype = "plantlike", + paramtype = "light", + tiles = {"fun_caves_tesseract_iron_zois.png"}, + inventory_image = "fun_caves_tesseract_iron_zois.png", + groups = {dig_immediate = 3}, + sounds = default.node_sound_stone_defaults(), + on_use = function(itemstack, user, pointed_thing) + teleporter(user, 'underworld', 0) + end, +}) + +minetest.register_craft({ + output = 'fun_caves:teleporter_iron_zoisite', + recipe = { + {'fun_caves:sky_iron', 'default:copper_ingot', 'fun_caves:sky_iron'}, + {'fun_caves:perfect_zoisite', 'fun_caves:perfect_zoisite', 'fun_caves:perfect_zoisite'}, + {'fun_caves:sky_iron', 'default:obsidian_shard', 'fun_caves:sky_iron'}, + } +}) + +minetest.register_craftitem("fun_caves:perfect_zoisite", { + description = "Perfect Zoisite", + drawtype = "plantlike", + paramtype = "light", + tiles = {"fun_caves_zoisite.png"}, + inventory_image = "fun_caves_zoisite.png", + groups = {dig_immediate = 3}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("fun_caves:stone_with_zoisites", { + description = "Zoisite Ore", + tiles = {"default_stone.png^fun_caves_mineral_zoisite.png"}, + groups = {cracky = 1}, + drop = "fun_caves:perfect_zoisite", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "fun_caves:stone_with_zoisites", + wherein = "default:stone", + clust_scarcity = 17 * 17 * 17, + clust_num_ores = 1, + clust_size = 1, + y_min = -31000, + y_max = 31000, +}) + minetest.register_craftitem("fun_caves:teleporter_iron_aquamarine", { description = "Iron and Aquamarine Teleporter", drawtype = "plantlike", @@ -222,6 +325,35 @@ minetest.register_craft({ } }) +minetest.register_craftitem("fun_caves:perfect_aquamarine", { + description = "Perfect Aquamarine", + drawtype = "plantlike", + paramtype = "light", + tiles = {"fun_caves_aquamarine.png"}, + inventory_image = "fun_caves_aquamarine.png", + groups = {dig_immediate = 3}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_node("fun_caves:stone_with_aquamarines", { + description = "Aquamarine Ore", + tiles = {"default_stone.png^fun_caves_mineral_aquamarine.png"}, + groups = {cracky = 1}, + drop = "fun_caves:perfect_aquamarine", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "fun_caves:stone_with_aquamarines", + wherein = "default:stone", + clust_scarcity = 17 * 17 * 17, + clust_num_ores = 1, + clust_size = 1, + y_min = -31000, + y_max = 31000, +}) + minetest.register_craftitem("fun_caves:meteorite", { description = "Iron Meteorite", drawtype = "plantlike", @@ -293,38 +425,49 @@ minetest.register_craft({ } }) -minetest.register_node("fun_caves:stone_with_aquamarines", { - description = "Aquamarine Ore", - tiles = {"default_stone.png^default_mineral_diamond.png"}, - groups = {cracky = 1}, - drop = "fun_caves:perfect_aquamarine", - sounds = default.node_sound_stone_defaults(), -}) - -minetest.register_ore({ - ore_type = "scatter", - ore = "fun_caves:stone_with_aquamarines", - wherein = "default:stone", - clust_scarcity = 17 * 17 * 17, - clust_num_ores = 1, - clust_size = 1, - y_min = -6000, - y_max = 31000, -}) - -minetest.register_craftitem("fun_caves:perfect_aquamarine", { - description = "Perfect Aquamarine", - drawtype = "plantlike", - paramtype = "light", - tiles = {"default_diamond.png"}, - inventory_image = "default_diamond.png", - groups = {dig_immediate = 3}, - sounds = default.node_sound_glass_defaults(), -}) - local newnode = fun_caves.clone_node("default:dirt") newnode.description = "Meteor Crater" newnode.tiles = {"fun_caves_crater.png", "default_dirt.png", "default_dirt.png", "default_dirt.png", "default_dirt.png", "default_dirt.png"} newnode.drop = "fun_caves:meteorite" newnode.groups.soil = 0 minetest.register_node("fun_caves:meteorite_crater", newnode) + +local treasures = { + {'fun_caves:perfect_aquamarine', 'fun_caves:perfect_garnet', 'fun_caves:perfect_zoisite', 'fun_caves:coral_gem', 'fun_caves:sky_iron', 'fun_caves:sky_iron', 'fun_caves:sky_iron', 'fun_caves:sky_iron', 'default:obsidian'}, + {'fun_caves:perfect_aquamarine', 'fun_caves:perfect_garnet', 'fun_caves:perfect_zoisite', 'fun_caves:coral_gem', 'fun_caves:pure_copper', 'fun_caves:pure_copper', 'fun_caves:pure_copper', 'fun_caves:pure_copper', 'default:obsidian'}, + {'fun_caves:perfect_aquamarine', 'fun_caves:perfect_garnet', 'fun_caves:perfect_zoisite', 'fun_caves:coral_gem', 'default:obsidian'}, + {'fun_caves:perfect_aquamarine', 'fun_caves:perfect_garnet', 'fun_caves:perfect_zoisite', 'fun_caves:coral_gem', 'default:obsidian'}, + {'fun_caves:perfect_aquamarine', 'fun_caves:perfect_garnet', 'fun_caves:perfect_zoisite', 'fun_caves:coral_gem', 'default:obsidian'}, + {'fun_caves:perfect_aquamarine', 'fun_caves:perfect_garnet', 'fun_caves:perfect_zoisite', 'fun_caves:coral_gem', 'default:obsidian'}, +} +local filler = {'default:apple 10', 'default:coal_lump 10', 'default:wood 10'} +local chest_formspec = + "size[8,9]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "list[current_name;main;0,0.3;8,4;]" .. + "list[current_player;main;0,4.85;8,1;]" .. + "list[current_player;main;0,6.08;8,3;8]" .. + "listring[current_name;main]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,4.85) + +local newnode = fun_caves.clone_node("default:chest") +newnode.description = "Treasure Chest" +newnode.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local meta = minetest.get_meta(pos) + local ready = meta:get_string('formspec') + if ready == '' then + local level = math.max(6, math.ceil(pos.y / math.floor(map_max / 6))) + local big_item = treasures[level][math.random(#treasures[level])] + meta:set_string("formspec", chest_formspec) + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + inv:add_item('main', big_item) + for i = 1, math.random(4) do + inv:add_item('main', filler[math.random(#filler)]) + end + end +end +minetest.register_node("fun_caves:coffer", newnode) diff --git a/textures/fun_caves_aquamarine.png b/textures/fun_caves_aquamarine.png new file mode 100644 index 0000000000000000000000000000000000000000..40fe5cffdcad4072c8d0b8285ce171f39f9a0f2f GIT binary patch literal 2778 zcmV<03MKW4P)CN7%L<+K0*3TH_~ zK~z}7t(SYOjXr^Id`;VmJNLLH^~dFLLzQ%|dxq5tqhj)OIs7{}cS~FCKA12o`>#uwBFc$RLR1`m6qsi zT@Zsb7vqg-qNvV9qwWT&)JC`ca$Lh%^W0T4dme6gFMp>u9Huwlc>4)B^|}P)>p4I8 zCm-h5KlTgaOAkJ6|M-EAKdij^(Nr7Cl^KQg;B(i^loEK-W4+TQE|pNiCzKwU$?0@9s8_4hnsexUNWD5uI!c{RSMa== zSigMn^l$yz(LHavW>P+X{PHW+P(MguYMsnlYkua?wfhgh0KD`X0x!L|PVW-* zz5l#!diI*f#wWK^6uCHi?nQco5$z$VI>r;t5 zTJ<`oPF^7NBUCs|VKb!A7^@H{ay`U~0wq95#W2s2VvFg?X{zx!r!So$^aCv33@`yK zzS0Fp-V3+B`Q7V-v`h5hF zpj>B^Wf+%Zt!9)BD2kjQs?nI*O%S(ewq|IS>m-AW<&_mSlD_Z)8%Je-=gl|2BLall zal=oE&mVil9eK}9w+pAXYm4%|kg6|G(vjs*sYmFvOB{PtYYp1H0a2xaQU+%=x=6{g zjL~pFyS<8(f^r~9(@oMm0|y4hR?-o*YK3bLU8g_y(BFM6jJ%GVpSTu)MyWongeS+x z8;HoGP!atcb}sB^W_BO=b-J5P^b!618#(-}6vjjOT|)JTR8_gF2%{lYUO{Vv@kq0{Z+TSqOfGB>%0N)%HLVyx9Fyq!7X#x$%}8jPjYC+(xZlMFjz&iujdV-p||K z{1&1hAQ@(uA|rAmLZ!)z94!^eXh4#V==2kCj;t8a8zdks+7t|jLqyo3FbaghQ-atp zvANX=moKf=Jb)l>9Vx7(JxC~*D{N~_uz$}%x?9Us>@1ndEgJaL$Hz9(Ew6_VRfL^ady;4DkK1xdR zEJGIq92T1iw9#BhdQ_{q^URp&w)>+X@^TNrYJ0ddNQ@1d%5JXX5BhA`WyTs~%+Jj5 ztrwr++~yjyJ9kit1h%kjBm>Y1N(qz|RO1p!Z-6zMG+W#06bZ_+)Z_Fc^=Pv{OZrlzJ4 z!s3UDFbIj_5P&#z1gb=?+tkX2YPEzX`UIZBcRAalF)p_=&Yn4S0?^I~t={=w6<227 za@R;BqNpOBl+@}?oVGYAF?m6fY+|LvImgMfXUMIf?0GmnB2WU~xA@A#8H05ODRYWk zlMdR%p-)jjszZDkxnY(JAGz;yr$9VowEZt{NgR$Bgcfle|RR-g@2jljR^1jdB%>!)nd!)HY6@KS8zLqFSF|ILh#4pOMZ;x(Vel zqTkyjjzfeOv$oVhD5%xywptF>fV=W8E@dJVvt7Ck{qb z8WCsCuaRrZSS>;bCm#R8SH6Do`9%f1qzm&&VCnl+vA^T+p2rRxK5+1w>kn1S<;E_p z4Ox~GdLBtXvGsC;(34_fWm|m|3I651vwp@~KX=znW&rMjL)FC{jWRZRSpT2o~ zeI+s9{Km8GB6GeFe9<|+45Y7-aLxb&1c5*(C!ADLR;;lW0Rp6T7#!)dfa gB8GdTq~CA<2j$P~U7|yg6951J07*qoM6N<$g87SUnE(I) literal 0 HcmV?d00001 diff --git a/textures/fun_caves_coral_gem.png b/textures/fun_caves_coral_gem.png index 9b6c9f134f47e1ed8e42fd8db42be32bd6927640..f08594cb22022acabe6b36f99a8a0af9da5b4fc3 100644 GIT binary patch delta 1848 zcmV-82gmsM5B3g_Q-2EsF)o@Mcc%aV2Lnk&K~z}7otJBjRaY5?pKq?I+|LXY zr-cC&#!4z8Z4D8uHUxgOsT7l{F->dI(8L%uM$?$I4KN( zZd7%CUB9%A-)`F?pWV38eDOmY<>Gqy$fxG_>|f3mhg|OE@ zp-p2e77q>HQS9lt$(73`TzbS*Cw^Vo{kP-#jqfr&{xp@R_Hi{su4dEmyKZ5{?_UDo z)V2-xd&YiGqkmS(TEGfYEaDe~nrqH|VQBY(U8*VIFFZ+_C8;fBL4UU-Q7F|j=Q4-(^bK@BarUEYL_~f(w_}U_ z=Y@0GnpYwK9y7ut{{;?U76SgsP>DS&2N_;AA^-AP3Ir}yz^vqd+qF<%D0DmnO0BUex0zR4DYLls7TxmTZi z@6v)`K9NT0lGgyFiOWi$7GxWaNY*p)F!jh$! zk#})+QmLnErp`~$Q2#a!n`;4P=VAkNZb9XS5q|*oZQmXk-(S~kH3*YLT5(J>ifP0# zGqo08{}8=Pm(x^eCeBP$o5|eiH!IP;J?{o+og8Oo`)YvysesE`5KF!}Y)y5gs$*#! z5vQ3X4pI@)%;9|Djh7D)rGhO$D^VJ$W9G~SifOW1fB1ke5B?~bxM!UJ`u}hiRDjIo zjejBz1Dsx$W=f(e8IU+7Qw0pQu*FQX4#wmJl1ysN7IU?5bn34Mh5>5z=7KN_5=apN zNL2k48FEfhb>hguGlax}Q-g}Zi4p^?6q##A)Wg=uY`rxI&tKeec2v`*TE8tAdO^v~c2m+qye3sNfrl3mumQ+-P$U&;2smr<=Q4|0~ zNz%CjVr)LKzGAEs6pv^d$GABk5P|;ij0gQm4h|)Gf$m>Hzl~|D^Cm8J{pkJ01V{37y$)WIZT5HV^DSOn2Fd(G?L z6L5ePA+QF8YT~j+-c%Q+uy6?583+a{p%`=0cmbZEp5)Tg2J-|&q5XA+Z$*s(Rd?P~ ztpbR;&Mi23VG4lTzVrQN8pW>{%4MvGT4N9t3tS{)jbaQ07K)yzX9W>Xm47^)%!#5M zhw$LhQ}dtUtu#IA2R@$XQLu)h5dxDpCZk|9ws+{tydBYkTbQcS5psPSnsX#gK=_y$HyDYs$rKe!E6a-%2c@%ta z9AHs6W%eA6==?HrC-`@*SAPM9`}^OTo}Ky+0JaP)qIY(ZLm%5D>wfl3KxL`GM&h9CQQyef0PA z@s5#YtXwt5lEv3k3JO_IDWF^kp8LqlGygdD^OM*t(cL#l=LDXenSbEJN6s>Hb|Mes z^M_xwVs@5#d%a>;G3u*STxGaI-%vk(P^1_HX=R`{=<6w;D*N&bz|<3)?B-V*`tj4( z(25xyLmyki?fb{|4_j{*fWs4wAGDBPD3p9-)HfyytJSzMaW)Fb7#{AYx2Le{mi^~n zP*n-5RR^%*nt#nk$A93&cz*rP{1h3umtCs{`fgph^npU)KZIr#=LEmpg$*oetM={V zFCKb$^J$uI-F>56|C?9!{T>`luZ2JxTt>%G5VhmVF-1hs&wM~$c&#=jakO&raAmQS zOMZdqRTnp3TDJR0s5|cwdGu*ki0E-uRshH8bc~M8KTUi7pfQ2J+_m9S(%bG82H&=_ m`uRHrU=fygw%0Ca!G8eD8D%2 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 literal 0 HcmV?d00001 diff --git a/textures/image_credits.txt b/textures/image_credits.txt index e3cca53..4d7e8ce 100644 --- a/textures/image_credits.txt +++ b/textures/image_credits.txt @@ -2,3 +2,6 @@ Original spider textures: AspireMint Original goblins textures and models: Francisco "FreeLikeGNU" Athens Original tesseract: Claudio Rocchini (cc-by-sa 2.5), https://en.wikipedia.org/wiki/File:Runci_trunc_tessaract.png Original meteorite: MeteoriteKid (cc-by-sa 3), https://en.wikipedia.org/wiki/File:Oriented_Taza_Meteorite.jpg +Original tanzanite: Chromalys (cc-by-sa 4), https://en.wikipedia.org/wiki/File:Trichroic_Tanzanite_Gem_-_blue,_violet_%26_purple.jpg +Original aquamarine: Diamondexpert (cc-by-sa 2.5), https://commons.wikimedia.org/wiki/File:Gems_aquamarine.jpg +Original garnet: von de Wela49 (cc-by-sa 3), https://en.wikipedia.org/wiki/File:Garnet_cut.JPG