From 6ca5c6fbd2a6b142d73b07a5902b40d2433e7126 Mon Sep 17 00:00:00 2001 From: HybridDog Date: Wed, 3 Jul 2013 19:54:56 +0200 Subject: [PATCH] add mossy bomb --- init.lua | 137 ++++++++++++++++++++++ textures/nuke_hardcore_mossy_tnt_side.png | Bin 0 -> 834 bytes textures/nuke_mossy_tnt_bottom.png | Bin 0 -> 826 bytes textures/nuke_mossy_tnt_side.png | Bin 0 -> 822 bytes textures/nuke_mossy_tnt_top.png | Bin 0 -> 830 bytes 5 files changed, 137 insertions(+) create mode 100644 textures/nuke_hardcore_mossy_tnt_side.png create mode 100644 textures/nuke_mossy_tnt_bottom.png create mode 100644 textures/nuke_mossy_tnt_side.png create mode 100644 textures/nuke_mossy_tnt_top.png diff --git a/init.lua b/init.lua index ef4d0ef..d404702 100644 --- a/init.lua +++ b/init.lua @@ -1,6 +1,10 @@ local nuke_preserve_items = false local nuke_drop_items = false --this will only cause lags +nuke_mossy_nodes = { --I hope default:mossystonebrick will exist in the future. + {"default:cobble", "default:mossycobble"} +} + local function describe_chest() if math.random(5) == 1 then return "You nuked. I HAVE NOT!" end if math.random(10) == 1 then return "Hehe, I'm the result of your explosion hee!" end @@ -118,6 +122,7 @@ local function explode(pos, range) while minetest.env:get_node({x=p.x, y=p.y-1, z=p.z}).name == "air" do p.y=p.y-1 end + minetest.env:add_node(p, {name="default:chest"}) minetest.env:get_meta(minetest.env:get_meta(pos))]] end @@ -128,6 +133,40 @@ local function explode(pos, range) end end +local function expl_moss(pos, range) + local radius = range^2 + range + for x=-range,range do + for y=-range,range do + for z=-range,range do + local r = x^2+y^2+z^2 + if r <= radius then + local np={x=pos.x+x, y=pos.y+y, z=pos.z+z} + local n = minetest.env:get_node(np) + if n.name ~= "air" + and n.name ~= "default:chest" then + if math.floor(math.sqrt(r) +0.5) > range-1 then + if math.random(1,5) >= 4 then + destroy_node(np) + elseif math.random(1,50) == 1 then + minetest.sound_play("default_glass_footstep", {pos = np, gain = 0.5, max_hear_distance = 4}) + else + for _,node in ipairs(nuke_mossy_nodes) do + if n.name == node[1] then + minetest.env:add_node (np, {name = node[2]}) + end + end + end + else + destroy_node(np) + end + end + activate_if_tnt(n.name, np, pos, range) + end + end + end + end +end + --Crafting: @@ -221,6 +260,7 @@ function IRON_TNT:on_step(dtime) self.blinktimer = self.blinktimer + dtime if self.timer>5 then self.blinktimer = self.blinktimer + dtime + if self.timer>8 then self.blinktimer = self.blinktimer + dtime self.blinktimer = self.blinktimer + dtime @@ -262,6 +302,7 @@ end minetest.register_entity("nuke:iron_tnt", IRON_TNT) + -- Mese TNT minetest.register_node("nuke:mese_tnt", { @@ -356,6 +397,102 @@ end minetest.register_entity("nuke:mese_tnt", MESE_TNT) + +-- Mossy TNT + +minetest.register_node("nuke:mossy_tnt", { + tile_images = {"nuke_mossy_tnt_top.png", "nuke_mossy_tnt_bottom.png", + "nuke_mossy_tnt_side.png", "nuke_mossy_tnt_side.png", + "nuke_mossy_tnt_side.png", "nuke_mossy_tnt_side.png"}, + inventory_image = minetest.inventorycube("nuke_mossy_tnt_top.png", + "nuke_mossy_tnt_side.png", "nuke_mossy_tnt_side.png"), + dug_item = '', -- Get nothing + material = { + diggability = "not", + }, + description = "Mossy Bomb", +}) + +minetest.register_on_punchnode(function(p, node, puncher) + if node.name == "nuke:mossy_tnt" then + minetest.env:remove_node(p) + spawn_tnt(p, "nuke:mossy_tnt") + nodeupdate(p) + nuke_puncher = puncher + end +end) + +local MOSSY_TNT_RANGE = 2 +local MOSSY_TNT = { + -- Static definition + physical = true, -- Collides with things + -- weight = 5, + collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5}, + visual = "cube", + textures = {"nuke_mossy_tnt_top.png", "nuke_mossy_tnt_bottom.png", + "nuke_mossy_tnt_side.png", "nuke_mossy_tnt_side.png", + "nuke_mossy_tnt_side.png", "nuke_mossy_tnt_side.png"}, + -- Initial value for our timer + timer = 0, + -- Number of punches required to defuse + health = 1, + blinktimer = 0, + blinkstatus = true, +} + +function MOSSY_TNT:on_activate(staticdata) + self.object:setvelocity({x=0, y=4, z=0}) + self.object:setacceleration({x=0, y=-10, z=0}) + self.object:settexturemod("^[brighten") +end + +function MOSSY_TNT:on_step(dtime) + self.timer = self.timer + dtime + self.blinktimer = self.blinktimer + dtime + if self.timer>5 then + self.blinktimer = self.blinktimer + dtime + if self.timer>8 then + self.blinktimer = self.blinktimer + dtime + self.blinktimer = self.blinktimer + dtime + end + end + if self.blinktimer > 0.5 then + self.blinktimer = self.blinktimer - 0.5 + if self.blinkstatus then + self.object:settexturemod("") + else + self.object:settexturemod("^[brighten") + end + self.blinkstatus = not self.blinkstatus + end + if self.timer > 10 then + local pos = self.object:getpos() + pos.x = math.floor(pos.x+0.5) + pos.y = math.floor(pos.y+0.5) + pos.z = math.floor(pos.z+0.5) + do_tnt_physics(pos, MOSSY_TNT_RANGE) + minetest.sound_play("nuke_explode", {pos = pos,gain = 1.0,max_hear_distance = 16,}) + if minetest.env:get_node(pos).name == "default:water_source" or minetest.env:get_node(pos).name == "default:water_flowing" then + -- Cancel the Explosion + self.object:remove() + return + end + expl_moss(pos, MOSSY_TNT_RANGE) + self.object:remove() + end +end + +function MOSSY_TNT:on_punch(hitter) + self.health = self.health - 1 + if self.health <= 0 then + self.object:remove() + hitter:get_inventory():add_item("main", "nuke:mossy_tnt") + end +end + +minetest.register_entity("nuke:mossy_tnt", MOSSY_TNT) + + -- Hardcore Iron TNT minetest.register_node("nuke:hardcore_iron_tnt", { diff --git a/textures/nuke_hardcore_mossy_tnt_side.png b/textures/nuke_hardcore_mossy_tnt_side.png new file mode 100644 index 0000000000000000000000000000000000000000..a87445f169bb78376beb7581b935d5a4ff6a268e GIT binary patch literal 834 zcmV-I1HJr-P)Px%{7FPXR4C5{!OL&kWB>qg`}-U_wv)JZ5<5+sHp%*+*{i6m0)_;W*rf~s+IHBp zmt7`to)9O*pMV5~BOKtcBH#kjG$=?6N~u`(=q5FfHfd;@w5j7q{QN$D`~Bz-KfPKm zKa8*uilSs$QVJ^TT*tZi&>wvZPRLd3WLA#>C=63O^$ufLHkD1nFCwQgVUsrh7b zWH=;S8HW~fgJ_zcni+R|I~w8O$4eJxGkJ-M z4F(=>n64SmQ~IbALZxpPnh%79O3< z{_@v7!^IhO?9t}K^Y1Upsmztdd0@M~VVWb^%*x#rUf??I{qp9&!Z5?fINu@+V2cxz zr=}LZzx(6z@)y|=1uTEJ`q3wM#3cUd{#Qn?#}H0VCisv$StwDow_g6kvb1Jp=jM$| zLotrv5Z=1}mI<^IIVHhGds^QnJ?uFrM#qY3+;OenAKZViwrcbbBq8woy93vRLo+gt zP~zm!u62}B$6ALikKi7$-hB6i4(URP(Hxy7VqI%i^!7$|2UwOHAT)5?kS3y-Kw&Vf zN))6691=i@Lqa?yF5SMy3$eZ34(42Vap|4yof-)V3NUsE&HKujI?%1g*8i4kq5#>Z zgKfG}d7jCqSyo`?&%DyuuXS4oe&ET+({d^eASEPX#q6;^|5>F0u}$CU{udRwL^2*? z3Sf*K(_y2KPx%^hrcPR4C5{!Od^eRsaBSKR-K(vV=YPEOdR+tT83K|_V zftbkw2w8aV{@pWEXC+ChEv+p4a$~Y`a&&m2ZOGq$b9u6I(o$_Vv=`=ovy`ATcsPhW zE(-DDv)7u@;RUd|TIUd@lo)O6$>T?rQbm_FA`wc+fxbeuy2SMZw%bKnK`0g^7O-&~ z*Vk4%nr13)X{apbgz?c~KE?Zix6_u>d^!vg*f+*FiQV2)dojigq9SST?og0`JW+jB zu~e9X8`}-LYYY3+`JxDazkhf5(CF5uriZPC`CDV(MA7@V@AW_nvmx$c%dmvOwAr;-4#1h&bKC2?pvP;fHhcck^!bY;Lu3CbU#|W5 zQ=w2eF>$*3=H12VufMxA$3tFsGiw|DL_`f#jxq@aB$pTR{aMx*YAee}%3l$QmXDO1^^Gthf+%1Vn~uh^ETt4m73lPA zkOeGc87{^V_F`MyC(3(G6B}k^X8O_{*$P-MfB~W8e`o!+6$@w3MgRZ+07*qoM6N<$ Ef|6N=egFUf literal 0 HcmV?d00001 diff --git a/textures/nuke_mossy_tnt_side.png b/textures/nuke_mossy_tnt_side.png new file mode 100644 index 0000000000000000000000000000000000000000..b4534515cbe987536b4a83f32207d1e86083fc88 GIT binary patch literal 822 zcmV-61Ihe}P)Px%@JU2LR4C6?%S~+4W*mU=|NGjG)5LKSnk}NGrKJtfZEQtqkU$`n(t#MzGEI}( zNt8*`4&7F1R}SlGhg~N)p-r4N@gYEPsHhOMuzn#{5w-Lqfu?a=#fk02PMp~Ju>Eq} zc+S5E-JicPwJ^E%YMpV@qu>8L6MLMK6*;4w?H!0EUZe$)<=Bz0znfipVpK}HYG44s z6hasSLI8j;^7=jgMy|E3)v=sX!C+XLz<*&N(BNf#L62Q0000CCAqb-#AuS}f!+RSs zM*s6b0|KjV*UXyjR53;f1HxDq)MxTjkG~-h;!C>m-oQ{U&dUcH1L{gSl@yd6Eh}d2 z3c(z545H@@+C?*ztAX_Z0o#q~-a`W+x`ioB9%=8lG+Rj)nm%mrKQkB%1Sl82_wXji z_}ctktvy|4#c&*ge!u?P;_JCoT>RteUkpoK`E|_9qv7Ep0O;vHww2zPo}Vn}`JI%c z7fVp5aAIruoAaY}osLGMJ}+-o;m03-0)Wp?e(`T?uCuM{c=Xil!pvu%9F}ugHb`jO z#7(=KBb||%e`b`Nl*w=BRRsWeo(F&j6L(*(OrP#OCnPerZahq-;}pe`l$aR2@Fl|N z&%dt;+i!h7{)1iNrrph(sf~&0I~^UJ$yj!L{Fg{1($TgbO+0=uHUFqsRxP`JJldC$ z#I^V;vB|!D9h#o=`vaWUccE`M91dX$JB~w>py32{N#2sv+Q3(Xi^6lUu)%uWHocb) z*F`NEpWQgvec<+sS;H*rnt_*>mfkFH7PX>d+u5wNx)^8N3?K3xJrQ-eY1T_I4Rm~c ztx_|~W~pqHsL&pc;ZV!|W<#$gRucZOr~TuWidp-p^V4l9X%jo2DHyt$NvEZBPR*(q zVPurda=|c)rjPR%wUU@rteOP~EXyh8^m^5L+h(?RVr{n&)~pC zVJ9UDSxwRvSr*<3s-$6>x-@dRf^~kE$Hltd0RohK$-M!#q5uE@07*qoM6N<$f~Y8q AX8-^I literal 0 HcmV?d00001 diff --git a/textures/nuke_mossy_tnt_top.png b/textures/nuke_mossy_tnt_top.png new file mode 100644 index 0000000000000000000000000000000000000000..386bec2098853b31c8592cb42d7027e7bcf10465 GIT binary patch literal 830 zcmV-E1Ht@>P)Px%_(?=TR4C6S$W3h9Q~&_r_nsX)j`Pzr4(YnJG^rYm{dDW-R^R{{2M+7B2?jy} z4G9D{&WHm-;(|EA8EHp2AR(lwOhcVEsbd3Lrj2Q>mM%@xCP7JD$A12K{(XMtz<2!M z%Ek`~W42@8`s2pC%O4oJzVYC`>I|=5`8Y{ftJz-p?dLZyy)*NC%^}w6y&F7)P#X;H z-oNVt7aXKBByN*o&Ydag~B@d_~vj)wpM-t*jCK07v6zy~^U9cuV_kN&~tVBz!v0DzNc*mnDwVVj0(Z0|G<+@WQec_sJwPOEYv*J^a4 zDA;MVBOw^M8cP@-i9lrM$qR|T)jG1$jT#K8}5*|m#>Z~^3ApD z+!x<`cKU_+(s*&?Ytxn5gTK}zFL8+Nd1TmAO9jPpY#Wp9&E}!WlIEzW(`{QeE>}uv zSvYy>6dn;l5CT7}AD^{N@7ZQo-F1=}1(Y;f%_xlchm8$w-%zHCf+YNU=a++_K2q() zCVifdS z=1;e;MIm)Pa&zrELL8i{*1EeLO6k_-lbz<4BubOV3Zc)CFCUqy6c3Ay##4#sQV9b9 zpkAjZh`fcJ(2rt9CnlbIadE!C<)y{U!YfA|;$~#&@AdWe?p_f3004OD)3c!sqSz}| zlzcIZAoK~nb?xEVw`P4p(piz`L{l?!h3rJN98t<$xVSt$HRWI*TgLfwZ{rRm(6hW{*@2azA6A|ce~Af_1)(ukJcdojb@|Q>BO<0kwk~$rNvjVJ_>vn z6MXK>OZ93M8~V@~@Ro%&Li)phAp)oK9^%*%}RW;u1b#C+3g! zoG$$2>&uKW*C8=W3dI6Q5&%F%qZFTl5W2RPpd^!#00960f41DN3