From d2de1fbd95cecf7d2c7321b1c80d910891ecf7ed Mon Sep 17 00:00:00 2001 From: poikilos <7557867+poikilos@users.noreply.github.com> Date: Sat, 6 Jan 2024 18:15:00 -0500 Subject: [PATCH] Move mock_tnt to its own repo (https://github.com/Poikilos/mock_tnt). --- changelog.md | 13 +- patches/mods-multiplayer/mock_tnt/README.txt | 16 - patches/mods-multiplayer/mock_tnt/depends.txt | 2 - .../mock_tnt/etc/8bit/mock_tnt_blast.png | Bin 893 -> 0 bytes .../mock_tnt/etc/mock_tnt_background.png | Bin 348 -> 0 bytes .../mock_tnt/etc/mock_tnt_side-normal.png | Bin 854 -> 0 bytes .../mock_tnt/etc/mock_tnt_tnt_item.png | Bin 292 -> 0 bytes .../mock_tnt/etc/mock_tnt_tnt_node.png | Bin 193 -> 0 bytes .../mock_tnt/etc/mock_tnt_tnt_object.png | Bin 254 -> 0 bytes patches/mods-multiplayer/mock_tnt/init.lua | 654 ------------------ .../mock_tnt/playereffects.lua | 33 - .../mock_tnt/textures/mock_tnt_blast.png | Bin 198 -> 0 bytes .../mock_tnt/textures/mock_tnt_boom.png | Bin 250 -> 0 bytes .../mock_tnt/textures/mock_tnt_bottom.png | Bin 563 -> 0 bytes .../mock_tnt/textures/mock_tnt_side-blank.png | Bin 854 -> 0 bytes .../mock_tnt/textures/mock_tnt_side.png | Bin 831 -> 0 bytes .../mock_tnt/textures/mock_tnt_smoke.png | Bin 872 -> 0 bytes .../mock_tnt/textures/mock_tnt_top.png | Bin 855 -> 0 bytes .../mock_tnt_top_burning_animated.png | Bin 1021 -> 0 bytes .../textures/playereffects_example_black.png | Bin 69 -> 0 bytes .../mock_tnt/update local.bat | 4 - 21 files changed, 6 insertions(+), 716 deletions(-) delete mode 100644 patches/mods-multiplayer/mock_tnt/README.txt delete mode 100644 patches/mods-multiplayer/mock_tnt/depends.txt delete mode 100644 patches/mods-multiplayer/mock_tnt/etc/8bit/mock_tnt_blast.png delete mode 100644 patches/mods-multiplayer/mock_tnt/etc/mock_tnt_background.png delete mode 100644 patches/mods-multiplayer/mock_tnt/etc/mock_tnt_side-normal.png delete mode 100644 patches/mods-multiplayer/mock_tnt/etc/mock_tnt_tnt_item.png delete mode 100644 patches/mods-multiplayer/mock_tnt/etc/mock_tnt_tnt_node.png delete mode 100644 patches/mods-multiplayer/mock_tnt/etc/mock_tnt_tnt_object.png delete mode 100644 patches/mods-multiplayer/mock_tnt/init.lua delete mode 100644 patches/mods-multiplayer/mock_tnt/playereffects.lua delete mode 100644 patches/mods-multiplayer/mock_tnt/textures/mock_tnt_blast.png delete mode 100644 patches/mods-multiplayer/mock_tnt/textures/mock_tnt_boom.png delete mode 100644 patches/mods-multiplayer/mock_tnt/textures/mock_tnt_bottom.png delete mode 100644 patches/mods-multiplayer/mock_tnt/textures/mock_tnt_side-blank.png delete mode 100644 patches/mods-multiplayer/mock_tnt/textures/mock_tnt_side.png delete mode 100644 patches/mods-multiplayer/mock_tnt/textures/mock_tnt_smoke.png delete mode 100644 patches/mods-multiplayer/mock_tnt/textures/mock_tnt_top.png delete mode 100644 patches/mods-multiplayer/mock_tnt/textures/mock_tnt_top_burning_animated.png delete mode 100644 patches/mods-multiplayer/mock_tnt/textures/playereffects_example_black.png delete mode 100644 patches/mods-multiplayer/mock_tnt/update local.bat diff --git a/changelog.md b/changelog.md index b38d95d..6e821ba 100644 --- a/changelog.md +++ b/changelog.md @@ -5,6 +5,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## [git] - 2024-01-06 +### Removed +- Move mock_tnt to its own repo (https://github.com/Poikilos/mock_tnt). + + ## [git] - 2020-05-07 ### Changed - Make both `install-minetest-linux64.sh` and @@ -343,13 +348,7 @@ mv unmounter unmounter.sh ## [git] - 2017-05-15 ### Added -* mock_tnt: doesn't destroy blocks, can coexist with regular tnt mod - (all tnt is replaced with mock_tnt if tnt is disabled). This mod is - helpful for when multiplayer servers have tnt disabled but players - have acquired 'unknown item' (tnt:tnt) as loot. The Unknown Explosive - says 'unknown item' on it, as a seemless replacement :) - (see patches/mods-multiplayer/mock_tnt/) - +* mock_tnt ## [git] - 2017-04-20 diff --git a/patches/mods-multiplayer/mock_tnt/README.txt b/patches/mods-multiplayer/mock_tnt/README.txt deleted file mode 100644 index 2659c26..0000000 --- a/patches/mods-multiplayer/mock_tnt/README.txt +++ /dev/null @@ -1,16 +0,0 @@ -# Mock TNT -Mod for Minetest - -## Usage -* Place in mods folder such as in your subgame -* "Unknown Explosive" (mock_tnt:mock_tnt) can coexist with TNT if TNT is enabled, but gunpowder and mock_tnt work even if enable_tnt is false. - -## Differences from regular TNT -* Does not harm any block or entity - -## Known Issues -* when TNT is enabled, there is no crafting recipe for mock_tnt -* also ignite gunpowder with "default:torch", "fire:permanent_flame" (minetest_game only ignites via "fire:basic_flame", "default:lava_source", "default:lava_flowing") -- for some reason torch works already but permanent_flame does not -* Make gunpowder ignite via "building_blocks:Fireplace" -* Make TNT ignite via neighbors "throwing:arrow_fireworks_blue", "throwing:arrow_fireworks_red" -* Make "fire:flint_and_steel" item ignite TNT and gunpowder \ No newline at end of file diff --git a/patches/mods-multiplayer/mock_tnt/depends.txt b/patches/mods-multiplayer/mock_tnt/depends.txt deleted file mode 100644 index ebb56fb..0000000 --- a/patches/mods-multiplayer/mock_tnt/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -playereffects? \ No newline at end of file diff --git a/patches/mods-multiplayer/mock_tnt/etc/8bit/mock_tnt_blast.png b/patches/mods-multiplayer/mock_tnt/etc/8bit/mock_tnt_blast.png deleted file mode 100644 index b6aeabdabcda849a0ff499f88790860e1b482828..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 893 zcmV-@1A_dCP)uFP?LeNAyJ!n8_cvsr>5U~w`gtGNKIRr72g z4RBo-;T)n)OiV1+4_ka((s;SCPd*jlMH$-dHsh%)E_yM0%`X3(c8L2ej<0kyO(PMV zbJkN($`eWY{XXk|4Tbp`3n}G|blVUV3I(cjCPJoJn$bzfD;$x;FbuSAnBj{xi~rtc z`E1$ZhaX>IsvaBrCh2sVor6x&XYHi zl?u>xohXVBGL7__Jl}LMO_N6tY=R)5>AXYz{=07$^|a0J8*jKgenaYmJH&C!%Dp1p zV3a!_X0WFg*liqBE=sm`k7=F{__R7jG-9GOTA<5|8%dAOFbspugJHg2m|-gC^L}Zi zoClzf#k>tl9LKb}D$~=`EY0QEIq1@CHnDROMN!Z+4QG(2R!#vB={5@s3pkEL{WL}a zSf11IeV3`SE~OSEVvL zimIv@hJhoJB;*xKGde=1sm_@c3I%Q(0?qS0)~b14h)Gswbe=w2$23j;xV)rN&NDHd z!Ic)TU$^-8;)HL%TBUKGr1A0>giNDUW=HvLtAnblH2!t~SiP4el}fRHI&2*T0goQo zn5N0|O$X^U5i(5_MQF;{T}mYv;q2jvThwYcO*i1n&u#ixbUGa-^D#gF+M?g@^T|iI z*xnzova*6MFHqjU>a3@cNF>OrU3}l?q@!Ssc9^$^%>gRq;XkC5OyzufVTS(!^<9R8 TB$E^(00000NkvXXu0mjf%pH|? diff --git a/patches/mods-multiplayer/mock_tnt/etc/mock_tnt_background.png b/patches/mods-multiplayer/mock_tnt/etc/mock_tnt_background.png deleted file mode 100644 index db7a3e68c4f657a0242f23cb755b6458349696a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!cYsfbtGZK`1_)(qI_GG*=4iR) zYP;rZyX9%S15v(?2M`tLdKMb`ml+0D7zb4v2UnT|SDA!VnFd#zhE|(}*4V@}+s3x; zdA#maq3ukdv77}Sk;M!Q+`=Ht$S`Y;1W=H@#M9T6{UIxlpcS`G>YSfIp(UO!jv*44 zb^R|+I_$u)Npa`o*IH-Ia{vAJ_s)COd`6?m<;W*yg|M@lN=!TU&ySrk)AKDy$=(ac zwEXYypZGv$so`#OVYTkAg6qkBTf~i&-JW?aimwgXF1f~X z&4hjB=QFwkQzv{pJwxhx`2Sts{y#SSbG3@KAn=KE;Est>^XA@qrY7+HR^SVZjUqW0 ky{=xne${-3?^07cp6{F!>eN@Y1KrEu>FVdQ&MBb@0L~|ZZU6uP diff --git a/patches/mods-multiplayer/mock_tnt/etc/mock_tnt_side-normal.png b/patches/mods-multiplayer/mock_tnt/etc/mock_tnt_side-normal.png deleted file mode 100644 index 53fd642ade4f88215b84a36f08a8c85e3dc7905a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 854 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47%v9+gt$uR21)7#OX-J78-z(2 zhDsZT%K(v4gsf47v~jqMafGaKq^wDloJq8tX_TC4v^)@*0a1*CS**Nytb%!r0+6(b zRRp0pB}*WRSF!@41Z5CPRJKl3u>qnaMcZT*+hkSSBvspFWxEu0+Z0v1WHk^{Hb3Q&k;+C{5iVO~WBg)iGVuFhyTCQ1It~olcSvs!ST5dVIZn;|SIoj?y zTJHHe?m0T{xjG(sIvxeO9(j5mxq2RX`arH{o~~z}9*8V705ZIQC|}>JK+ij0&$~e1 zyGY-s$iS!22uS)C8v7O-`4yS?l^FS#8vB=+0Lj2IlfY8bz%sMIa`V74^T2Y8;7YTQ za)>(e<{`4R$e&4nP#!+wnJ zfpN@P;1OBOz`!jG!i)^F=12eq*-JcqUD+S9@(8i>?p<+S8<+?rJY5_^BrYc>B&0lh zDkvZ%u)TQO#pj7h2?2gQTyIEFyx3ASXd_5qv%kjVw#k!*4^7m&XZRfgXGG603bjvd|)mL`1nqTIbkL6b; zC2a`s);#h4)%WH4H*fG^P-sfVhwt~yW v(E0w7FJj&NYNgYyGZPgV4Qorq*cfIcxIEdTx#~4A*cd!r{an^LB{Ts5fVwI( diff --git a/patches/mods-multiplayer/mock_tnt/etc/mock_tnt_tnt_item.png b/patches/mods-multiplayer/mock_tnt/etc/mock_tnt_tnt_item.png deleted file mode 100644 index c8cf616a710463e4b8694bb94718180259387564..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!cYsfbtGZK`1_)(qI_GG*=4iR) zYP;rZyX9%S15v(?2M`tLdKMb`ml+0D7zb4v2UnT|SDA!VnFd#zhE|(}*4V@}+s3x; zdA#maq3ukdu~R%<977}|SsNI`m<>5xj?Z1w#GA1ATK)gYzf@x1Z`=B8j;Hsx$6xQJ zDk(kBy!fZdHSohPfoBFBNt<`3Xtb$ha;?t3xpBGn+cnc_pBC>s$9KDLLWBLJWeazw zcJ*>H2`^+T%Bb?#^>j^fn){QIrMiDko?o{vHF{D}1LHl097FT(6KpDiwtQ%1u9C>p i$vkU0d0TPXOL^9xyjk-qZoLM&kHOQ`&t;ucLK6UmVQ^Cb diff --git a/patches/mods-multiplayer/mock_tnt/etc/mock_tnt_tnt_node.png b/patches/mods-multiplayer/mock_tnt/etc/mock_tnt_tnt_node.png deleted file mode 100644 index cb59ff4677a745d8e9b5c4f4ccd9a357e3f4db0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJe}GSjtFESshof1Tzei_n!T*Ma zODsoofl|4iE{-7;w^VyNc^M3O4*mEx|L3E5K^UwRkD_o2J;q1ci;S(pS>UpU(Y5C=Lm+@ZhV=WL$@vyd* pJlM=VIhJY1ifAV9(wOK2c2XOdlz4w6w*f6?@O1TaS?83{1OVH!MqU5_ diff --git a/patches/mods-multiplayer/mock_tnt/etc/mock_tnt_tnt_object.png b/patches/mods-multiplayer/mock_tnt/etc/mock_tnt_tnt_object.png deleted file mode 100644 index c0166c31f8ff34468d52ff0accbb6bd592261e6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyLIFM@u0YzH!MuT?;XlLw|6Bh2 z|NlRBjSbW49#KZGqeF 4 then - pos.x, pos.z = center.x, center.z - break - end - pos.x = center.x + math.random(-radius, radius) - pos.z = center.z + math.random(-radius, radius) - def = reg_nodes[minetest.get_node(pos).name] - i = i + 1 - until def and not def.walkable -end - -local function eject_drops(drops, pos, radius) - local drop_pos = vector.new(pos) - for _, item in pairs(drops) do - local count = math.min(item:get_count(), item:get_stack_max()) - while count > 0 do - local take = math.max(1,math.min(radius * radius, - count, - item:get_stack_max())) - rand_pos(pos, drop_pos, radius) - local dropitem = ItemStack(item) - dropitem:set_count(take) - local obj = minetest.add_item(drop_pos, dropitem) - if obj then - obj:get_luaentity().collect = true - obj:setacceleration({x = 0, y = -10, z = 0}) - obj:setvelocity({x = math.random(-3, 3), - y = math.random(0, 10), - z = math.random(-3, 3)}) - end - count = count - take - end - end -end - -local function add_drop(drops, item) - item = ItemStack(item) - local name = item:get_name() - if loss_prob[name] ~= nil and math.random(1, loss_prob[name]) == 1 then - return - end - - local drop = drops[name] - if drop == nil then - drops[name] = item - else - drop:set_count(drop:get_count() + item:get_count()) - end -end - -local function calc_velocity(pos1, pos2, old_vel, power) - -- Avoid errors caused by a vector of zero length - if vector.equals(pos1, pos2) then - return old_vel - end - - local vel = vector.direction(pos1, pos2) - vel = vector.normalize(vel) - vel = vector.multiply(vel, power) - - -- Divide by distance - local dist = vector.distance(pos1, pos2) - dist = math.max(dist, 1) - vel = vector.divide(vel, dist) - - -- Add old velocity - vel = vector.add(vel, old_vel) - - -- randomize it a bit - vel = vector.add(vel, { - x = math.random() - 0.5, - y = math.random() - 0.5, - z = math.random() - 0.5, - }) - - -- Limit to terminal velocity - dist = vector.length(vel) - if dist > 250 then - vel = vector.divide(vel, dist / 250) - end - return vel -end - - -local function entity_physics(pos, radius, drops) - local objs = minetest.get_objects_inside_radius(pos, radius) - for _, obj in pairs(objs) do - local obj_pos = obj:getpos() - local dist = math.max(1, vector.distance(pos, obj_pos)) - - local damage = (4 / dist) * radius - if obj:is_player() then - -- currently the engine has no method to set - -- player velocity. See #2960 - -- instead, we knock the player back 1.0 node, and slightly upwards - local dir = vector.normalize(vector.subtract(obj_pos, pos)) - local moveoff = vector.multiply(dir, dist + 1.0) - local newpos = vector.add(pos, moveoff) - newpos = vector.add(newpos, {x = 0, y = 0.2, z = 0}) - obj:setpos(newpos) - - obj:set_hp(obj:get_hp() - damage) - else - local do_damage = true - local do_knockback = true - local entity_drops = {} - local luaobj = obj:get_luaentity() - local objdef = minetest.registered_entities[luaobj.name] - - if objdef and objdef.on_blast then - do_damage, do_knockback, entity_drops = objdef.on_blast(luaobj, damage) - end - - if do_knockback then - local obj_vel = obj:getvelocity() - obj:setvelocity(calc_velocity(pos, obj_pos, - obj_vel, radius * 10)) - end - if do_damage then - if not obj:get_armor_groups().immortal then - obj:punch(obj, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = damage}, - }, nil) - end - end - for _, item in pairs(entity_drops) do - add_drop(drops, item) - end - end - end -end - -local function add_effects(pos, radius, drops) - minetest.add_particle({ - pos = pos, - velocity = vector.new(), - acceleration = vector.new(), - expirationtime = 0.4, - size = radius * 10, - collisiondetection = false, - vertical = false, - texture = "mock_tnt_boom.png", - }) - minetest.add_particlespawner({ - amount = 64, - time = 0.5, - minpos = vector.subtract(pos, radius / 2), - maxpos = vector.add(pos, radius / 2), - minvel = {x = -10, y = -10, z = -10}, - maxvel = {x = 10, y = 10, z = 10}, - minacc = vector.new(), - maxacc = vector.new(), - minexptime = 1, - maxexptime = 2.5, - minsize = radius * 3, - maxsize = radius * 5, - texture = "mock_tnt_smoke.png", - }) - - -- we just dropped some items. Look at the items entities and pick - -- one of them to use as texture - local texture = "mock_tnt_blast.png" --fallback texture - if drops ~= nil then - local most = 0 - for name, stack in pairs(drops) do - local count = stack:get_count() - if count > most then - most = count - local def = minetest.registered_nodes[name] - if def and def.tiles and def.tiles[1] then - texture = def.tiles[1] - end - end - end - end - minetest.add_particlespawner({ - amount = 64, - time = 0.1, - minpos = vector.subtract(pos, radius / 2), - maxpos = vector.add(pos, radius / 2), - minvel = {x = -3, y = 0, z = -3}, - maxvel = {x = 3, y = 5, z = 3}, - minacc = {x = 0, y = -10, z = 0}, - maxacc = {x = 0, y = -10, z = 0}, - minexptime = 0.8, - maxexptime = 2.0, - minsize = radius * 0.66, - maxsize = radius * 2, - texture = texture, - collisiondetection = true, - }) -end - -function mock_tnt.burn(pos, nodename) - local name = nodename or minetest.get_node(pos).name - local group = minetest.get_item_group(name, "mock_tnt") - if group > 0 then - minetest.sound_play("tnt_ignite", {pos = pos}) - minetest.set_node(pos, {name = name .. "_burning"}) - minetest.get_node_timer(pos):start(1) - elseif name == "tnt:gunpowder" then - minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) - end -end - -local function UNUSED_mock_tnt_explode(pos, radius, ignore_protection, ignore_on_blast) - -- NOTE: register_tnt def param and register_tnt itself leave ignore_protection undefined - -- which translates to false below. - pos = vector.round(pos) - -- scan for adjacent TNT nodes first, and enlarge the explosion - local vm1 = VoxelManip() - local p1 = vector.subtract(pos, 2) - local p2 = vector.add(pos, 2) - local minp, maxp = vm1:read_from_map(p1, p2) - local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm1:get_data() - local count = 0 - local c_tnt = minetest.get_content_id("mock_tnt:mock_tnt") - local c_tnt_burning = minetest.get_content_id("mock_tnt:mock_tnt_burning") - local c_tnt_boom = minetest.get_content_id("mock_tnt:boom") - local c_air = minetest.get_content_id("air") - - for z = pos.z - 2, pos.z + 2 do - for y = pos.y - 2, pos.y + 2 do - local vi = a:index(pos.x - 2, y, z) - for x = pos.x - 2, pos.x + 2 do - local cid = data[vi] - if cid == c_tnt or cid == c_tnt_boom or cid == c_tnt_burning then - count = count + 1 - data[vi] = c_air - end - vi = vi + 1 - end - end - end - - vm1:set_data(data) - vm1:write_to_map() - - -- recalculate new radius - radius = math.floor(radius * math.pow(count, 1/3)) - - -- perform the explosion - local vm = VoxelManip() - local pr = PseudoRandom(os.time()) - p1 = vector.subtract(pos, radius) - p2 = vector.add(pos, radius) - minp, maxp = vm:read_from_map(p1, p2) - a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - data = vm:get_data() - - local drops = {} - local on_blast_queue = {} - - local c_fire = minetest.get_content_id("fire:basic_flame") - -- for z = -radius, radius do - -- for y = -radius, radius do - -- local vi = a:index(pos.x + (-radius), pos.y + y, pos.z + z) - -- for x = -radius, radius do - -- local r = vector.length(vector.new(x, y, z)) - -- if (radius * radius) / (r * r) >= (pr:next(80, 125) / 100) then - -- local cid = data[vi] - -- local p = {x = pos.x + x, y = pos.y + y, z = pos.z + z} - -- if cid ~= c_air then - -- data[vi] = destroy(drops, p, cid, c_air, c_fire, - -- on_blast_queue, ignore_protection, - -- ignore_on_blast) - -- end - -- end - -- vi = vi + 1 - -- end - -- end - -- end - - -- vm:set_data(data) - -- vm:write_to_map() - -- vm:update_map() - -- vm:update_liquids() - - -- call check_single_for_falling for everything within 1.5x blast radius - for y = -radius * 1.5, radius * 1.5 do - for z = -radius * 1.5, radius * 1.5 do - for x = -radius * 1.5, radius * 1.5 do - local rad = {x = x, y = y, z = z} - local s = vector.add(pos, rad) - local r = vector.length(rad) - if r / radius < 1.4 then - minetest.check_single_for_falling(s) - end - end - end - end - - for _, queued_data in pairs(on_blast_queue) do - local dist = math.max(1, vector.distance(queued_data.pos, pos)) - local intensity = (radius * radius) / (dist * dist) - local node_drops = queued_data.on_blast(queued_data.pos, intensity) - if node_drops then - for _, item in pairs(node_drops) do - add_drop(drops, item) - end - end - end - - return drops, radius -end - - -function mock_tnt.boom(pos, def) - minetest.sound_play("tnt_explode", {pos = pos, gain = 1.5, max_hear_distance = 2*64}) - minetest.set_node(pos, {name = "mock_tnt:boom"}) - -- local drops, radius = mock_tnt_explode(pos, def.radius, def.ignore_protection, - -- def.ignore_on_blast) - -- append entity drops - -- local damage_radius = (radius / def.radius) * def.damage_radius - local drops = {} - local radius = def.damage_radius - local damage_radius = def.damage_radius - entity_physics(pos, damage_radius, drops) - - local objs = minetest.get_objects_inside_radius(pos, radius) - for _, obj in pairs(objs) do - local obj_pos = obj:getpos() - local dist = math.max(1, vector.distance(pos, obj_pos)) - - local damage = (4 / dist) * radius - if obj:is_player() then - apply_flashbang_debuffs(obj) - end - end - - if not def.disable_drops then - eject_drops(drops, pos, radius) - end - add_effects(pos, radius, drops) - -- add_effects_nodrops(pos, damage_radius) -end - -minetest.register_node("mock_tnt:boom", { - drawtype = "airlike", - light_source = default.LIGHT_MAX, - walkable = false, - drop = "", - groups = {dig_immediate = 3}, - on_construct = function(pos) - minetest.get_node_timer(pos):start(0.4) - end, - on_timer = function(pos, elapsed) - minetest.remove_node(pos) - end, - -- unaffected by explosions - on_blast = function() end, -}) - -function mock_tnt.register_tnt(def) - local name - if not def.name:find(':') then - name = "mock_tnt:" .. def.name - else - name = def.name - def.name = def.name:match(":([%w_]+)") - end - if not def.tiles then def.tiles = {} end - local tnt_top = def.tiles.top or def.name .. "_top.png" - local tnt_bottom = def.tiles.bottom or def.name .. "_bottom.png" - local tnt_side = def.tiles.side or def.name .. "_side.png" - local tnt_burning = def.tiles.burning or def.name .. "_top_burning_animated.png" - local all_tiles = { tnt_top, tnt_bottom, tnt_side } - if def.all_tiles then all_tiles = def.all_tiles end - if not def.damage_radius then def.damage_radius = def.radius * 2 end - - -- if "not" since only make fake if real does not exist: - - -- if not enable_tnt then - minetest.register_node(":" .. name, { - description = def.description, - tiles = all_tiles, - is_ground_content = false, - groups = {dig_immediate = 2, mesecon = 2, tnt = 1, flammable = 5}, - sounds = default.node_sound_sand_defaults(), - on_punch = function(pos, node, puncher) - if puncher:get_wielded_item():get_name() == "default:torch" then - minetest.set_node(pos, {name = name .. "_burning"}) - end - end, - on_blast = function(pos, intensity) - minetest.after(0.1, function() - mock_tnt.boom(pos, def) - end) - end, - mesecons = {effector = - {action_on = - function(pos) - mock_tnt.boom(pos, def) - end - } - }, - on_burn = function(pos) - minetest.set_node(pos, {name = name .. "_burning"}) - end, - on_ignite = function(pos, igniter) - minetest.set_node(pos, {name = name .. "_burning"}) - end, - }) - -- end - - minetest.register_node(":" .. name .. "_burning", { - tiles = { - { - name = tnt_burning, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1, - } - }, - tnt_bottom, tnt_side - }, - light_source = 5, - drop = "", - sounds = default.node_sound_sand_defaults(), - groups = {falling_node = 1}, - on_timer = function(pos, elapsed) - mock_tnt.boom(pos, def) - end, - -- unaffected by explosions - on_blast = function() end, - on_construct = function(pos) - minetest.sound_play("tnt_ignite", {pos = pos}) - minetest.get_node_timer(pos):start(4) - minetest.check_for_falling(pos) - end, - }) -end - - --- minetest.register_node( "mock_tnt:mock_tnt", { --- description = "Unknown Explosive", --- tiles = { "mock_tnt_top.png", "mock_tnt_sides.png", "mock_tnt_sides.png", "mock_tnt_sides.png", "mock_tnt_sides.png", "mock_tnt_sides.png" }, --- is_ground_content = true, --- groups = {cracky = 1, level = 2}, --- sounds = default.node_sound_sand_defaults(), --- }) - -mock_tnt.register_tnt({ - name = "mock_tnt:mock_tnt", - description = "Unknown Explosive", - radius = tnt_radius, - -- all_tiles = { "mock_tnt_top.png", "mock_tnt_bottom.png", "mock_tnt_side-blank.png", "mock_tnt_side-blank.png", "mock_tnt_side.png", "mock_tnt_side.png" }, - -- could also be top,bottom,east,east,north,north - -- or top,bottom,side -}) - --- Only when "not" to not overlap tnt mod: -if not enable_tnt then - minetest.register_alias("tnt:tnt", "mock_tnt:mock_tnt") - minetest.register_craft({ - output = "mock_tnt:mock_tnt", - recipe = { - {"group:wood", "tnt:gunpowder", "group:wood"}, - {"tnt:gunpowder", "tnt:gunpowder", "tnt:gunpowder"}, - {"group:wood", "tnt:gunpowder", "group:wood"} - } - }) - - minetest.register_abm({ - label = "mock_tnt ignition", - nodenames = {"group:tnt", "tnt:gunpowder"}, - neighbors = {"fire:basic_flame", "default:lava_source", "default:lava_flowing", "default:torch", "fire:permanent_flame"}, - interval = 4, - chance = 1, - action = function(pos, node) - mock_tnt.burn(pos, node.name) - end, - }) -end - - - --- ALREADY DONE by minetest_game tnt mod even if tnt_enable is false: - --- minetest.register_node("tnt:gunpowder_burning", { --- drawtype = "raillike", --- paramtype = "light", --- sunlight_propagates = true, --- walkable = false, --- light_source = 5, --- tiles = {{ --- name = "mock_tnt_gunpowder_burning_straight_animated.png", --- animation = { --- type = "vertical_frames", --- aspect_w = 16, --- aspect_h = 16, --- length = 1, --- } --- }, --- { --- name = "mock_tnt_gunpowder_burning_curved_animated.png", --- animation = { --- type = "vertical_frames", --- aspect_w = 16, --- aspect_h = 16, --- length = 1, --- } --- }, --- { --- name = "mock_tnt_gunpowder_burning_t_junction_animated.png", --- animation = { --- type = "vertical_frames", --- aspect_w = 16, --- aspect_h = 16, --- length = 1, --- } --- }, --- { --- name = "mock_tnt_gunpowder_burning_crossing_animated.png", --- animation = { --- type = "vertical_frames", --- aspect_w = 16, --- aspect_h = 16, --- length = 1, --- } --- }}, --- selection_box = { --- type = "fixed", --- fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, --- }, --- drop = "", --- groups = {dig_immediate = 2, attached_node = 1, connect_to_raillike = minetest.raillike_group("gunpowder")}, --- sounds = default.node_sound_leaves_defaults(), --- on_timer = function(pos, elapsed) --- for dx = -1, 1 do --- for dz = -1, 1 do --- for dy = -1, 1 do --- if not (dx == 0 and dz == 0) then --- mock_tnt.burn({ --- x = pos.x + dx, --- y = pos.y + dy, --- z = pos.z + dz, --- }) --- end --- end --- end --- end --- minetest.remove_node(pos) --- end, --- -- unaffected by explosions --- on_blast = function() end, --- on_construct = function(pos) --- minetest.sound_play("mock_tnt_gunpowder_burning", {pos = pos, gain = 2}) --- minetest.get_node_timer(pos):start(1) --- end, --- }) --- --- minetest.register_craft({ --- output = "tnt:gunpowder 5", --- type = "shapeless", --- recipe = {"default:coal_lump", "default:gravel"} --- }) - --- minetest.register_node("tnt:gunpowder", { --- description = "Gun Powder", --- drawtype = "raillike", --- paramtype = "light", --- is_ground_content = false, --- sunlight_propagates = true, --- walkable = false, --- tiles = {"mock_tnt_gunpowder_straight.png", "mock_tnt_gunpowder_curved.png", "mock_tnt_gunpowder_t_junction.png", "mock_tnt_gunpowder_crossing.png"}, --- inventory_image = "mock_tnt_gunpowder_inventory.png", --- wield_image = "mock_tnt_gunpowder_inventory.png", --- selection_box = { --- type = "fixed", --- fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, --- }, --- groups = {dig_immediate = 2, attached_node = 1, flammable = 5, --- connect_to_raillike = minetest.raillike_group("gunpowder")}, --- sounds = default.node_sound_leaves_defaults(), --- --- on_punch = function(pos, node, puncher) --- if puncher:get_wielded_item():get_name() == "default:torch" then --- minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) --- end --- end, --- on_blast = function(pos, intensity) --- minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) --- end, --- on_burn = function(pos) --- minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) --- end, --- on_ignite = function(pos, igniter) --- minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) --- end, --- }) diff --git a/patches/mods-multiplayer/mock_tnt/playereffects.lua b/patches/mods-multiplayer/mock_tnt/playereffects.lua deleted file mode 100644 index a7cc7c1..0000000 --- a/patches/mods-multiplayer/mock_tnt/playereffects.lua +++ /dev/null @@ -1,33 +0,0 @@ --- Slows the user down -playereffects.register_effect_type("low_speed", "Low speed", nil, {"speed"}, - function(player) - player:set_physics_override(0.25,nil,nil) - end, - - function(effect, player) - player:set_physics_override(1,nil,nil) - end -) - --- Makes the player screen black for 5 seconds (very experimental!) -playereffects.register_effect_type("blind", "Blind", nil, {}, - function(player) - local hudid = player:hud_add({ - hud_elem_type = "image", - position = { x=0.5, y=0.5 }, - scale = { x=-100, y=-100 }, - text = "playereffects_example_black.png", - }) - if(hudid ~= nil) then - return { hudid = hudid } - else - minetest.log("error", "[playereffects] [examples] The effect \"Blind\" could not be applied. The call to hud_add(...) failed.") - return false - end - end, - function(effect, player) - player:hud_remove(effect.metadata.hudid) - end -) - - diff --git a/patches/mods-multiplayer/mock_tnt/textures/mock_tnt_blast.png b/patches/mods-multiplayer/mock_tnt/textures/mock_tnt_blast.png deleted file mode 100644 index dfa3192ad99166242611b3775910aed40e513d40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#AuErFxV25JNgz-t)zif>#Nu>vf&}a01d#`f{{QLWhm-p9eDiN?&7Es| zlC9=%#hW+V*U#Ty|L@Po+sDh>^&bWuZ}M)MIC0|4#>U2(ot>Q%8#_Bir(3DT2!*e! rTmAd<=SO$#?e*^LEqIu1t5?d9*{^=F@2lr^poI*cu6{1-oD!M21s zKV;<*<~5Le%h(PS%J6h?4B@!$d(M!r!GMD`z-q_#V{!+iXH+oy7L;q;S@4CesMfyl zBmWcLC(MFDMQ2RbpOHRr=SrRfkKi&+3IFt6NAB#MAHwW^zMf|Rqu2zWHUAPXzBuR? q^jd>OyZ~3tMv*uKUiy#4>&URNwb&+uV%ZoJFkNb~i8s$jd4^bX=!d za<+QQFaQ9Nrc&VUVRhdD^p$CzJp%6SINS^Xi)bFfthFnPVAZ@V5di`b*?xwbn|IZ2 z)~*wPM!2RNZb0OzJpTOZ?No~D(Aq63R`1RhfD&=IYaV6L=ilFbnnl{NBaiJmt9hpc z1OQE?wBrD?nTLCtXEy_L2h+TGL_3ZTRe<)J!d(WHvV@1-cenxQa{x5w?lb^pVK-~_ zYS)$5a-W9`126!n=YBq)|DUB74A8i)2mlE8VH~gbt@{mg7GaTbT{UGQCSrbh{ni)c zvh?R6;&xpCcu1OaUY7Iu?8c>17{K{_hPmA>JnH_Q<{5}oN}8s2oe`1d`96~8J4TCEY`W}366bnRQX{{s`;H9>_X(F_0p002ovPDHLkV1i#o B`RD)u diff --git a/patches/mods-multiplayer/mock_tnt/textures/mock_tnt_side-blank.png b/patches/mods-multiplayer/mock_tnt/textures/mock_tnt_side-blank.png deleted file mode 100644 index 53fd642ade4f88215b84a36f08a8c85e3dc7905a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 854 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47%v9+gt$uR21)7#OX-J78-z(2 zhDsZT%K(v4gsf47v~jqMafGaKq^wDloJq8tX_TC4v^)@*0a1*CS**Nytb%!r0+6(b zRRp0pB}*WRSF!@41Z5CPRJKl3u>qnaMcZT*+hkSSBvspFWxEu0+Z0v1WHk^{Hb3Q&k;+C{5iVO~WBg)iGVuFhyTCQ1It~olcSvs!ST5dVIZn;|SIoj?y zTJHHe?m0T{xjG(sIvxeO9(j5mxq2RX`arH{o~~z}9*8V705ZIQC|}>JK+ij0&$~e1 zyGY-s$iS!22uS)C8v7O-`4yS?l^FS#8vB=+0Lj2IlfY8bz%sMIa`V74^T2Y8;7YTQ za)>(e<{`4R$e&4nP#!+wnJ zfpN@P;1OBOz`!jG!i)^F=12eq*-JcqUD+S9@(8i>?p<+S8<+?rJY5_^BrYc>B&0lh zDkvZ%u)TQO#pj7h2?2gQTyIEFyx3ASXd_5qv%kjVw#k!*4^7m&XZRfgXGG603bjvd|)mL`1nqTIbkL6b; zC2a`s);#h4)%WH4H*fG^P-sfVhwt~yW v(E0w7FJj&NYNgYyGZPgV4Qorq*cfIcxIEdTx#~4A*cd!r{an^LB{Ts5fVwI( diff --git a/patches/mods-multiplayer/mock_tnt/textures/mock_tnt_side.png b/patches/mods-multiplayer/mock_tnt/textures/mock_tnt_side.png deleted file mode 100644 index 41a12f44993e548cacd2a76f77dd7ff1a3d8af66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 831 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47%v9+gt$uR21)7#OX-J78-z(2 zhDsZT%K(v4gsf47v~jqMafGaKq^wDloJq8tX_TC4v^)@*0a1*CS**Nytb%!r0+6(b zRRp0pB}*WRSF!@41Z5CPRJKl3u>qnaMcZT*+hkSSBvspFWxEu0+Z0v1WHk^{Hb3Q&k;+C{5iVO~WBg)iGVuFhyTCQ1It~olcSvs!ST5dVIZn;|SIoj?y zTJHHe?m0T{xjG(sIvxeO9(j5mxq2RX`arH{o~~z}9*8V705ZIQC|}>JK+ij0&$~e1 zyGY-s$iS!22uS)C8v7O-`4yS?l^FS#8vB=+0Lj2IlfY8bz%sMIa`V74^T2Y8;7YTQ za)>(e<{`4R$e&4nP#!+wnJ zfpN@P;1OBOz`!jG!i)^F=12eq*-JcqUD+S9@`y6ZWii`-1117SPZ!4!iOanGclDhL zW!m?<#_`vk>eDoK{cI$&a_bVKPnQI8cdSS}{VdhztiZ95%^Qx)NSwF-+Rln~cIS&f z3U0izHS^TEUCAFi7Dl?R*|x6v>X9P*xbpn|`y05DbDHxf#fBxU4-H5;Ik9D{DqE%i zZ}IM@O*ZMv7JC|437(6Yb}##U_{;(YDUs^?1-~}_`uqD^h=t#;J$``)#Ml1`Y(9LY z$KuBF1Kjhc+)TKlsd)KB_|J!ny=Hx#pmF}$Pv@l}diTTg`k3@oUns}Sza!eceCE%> z@bvBypV_|WQVz0Q)%a0r6ZvdLYP%*IOSJGV>7ZzxOMR8sFXgyAGMs*RT}kqaxPOcd Xf>9rL#cY)Vh7W_MtDnm{r-UW|8p9&~ diff --git a/patches/mods-multiplayer/mock_tnt/textures/mock_tnt_smoke.png b/patches/mods-multiplayer/mock_tnt/textures/mock_tnt_smoke.png deleted file mode 100644 index 5bc6de65a0a373f9cdec8bb60f9a18c6d1b8a940..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 872 zcmV-u1DE`XP)0?V0009ANklco@ z`&1Q;O`02M2_cL4*~Z4k4<{!l7e!G#1VJ!eUtiCql*tnyNs@)b!^6*dz229Mu}-7W zXh%_06GGU-;jk>r@)dyJmY0{$=jP`AJUBS`8^9a;5fDYur%I_W>h=1%QtHKcJQi7& z5v?^CV}%gn{e^`E#u%GFJw4@ndwbLv^VbvL>gwwAR;%@~5TZ#45tGS;Qc4M>6t3$! zl+s3$B=06kVt2b;>+I|-nNFu83IP3ne>+Xnt;NN~cZ@MCj$>LB1)-F}^E~*zPt!ED z!Y~XR$5}c)KJE^O!`{x$j=U_@qy=gFMZ#C@BaQ?GRA10=frhg)M_P?2wALt!f;f&t zdc7W`lq~?ab`S&(=Uf4>CzA;gLLkdBc%FwSiV#H+7-J~Q5|mO{mPIC$iDy|Bq?Ccp zIk#_aZiwr;CQVZ?#=scEXf(oXHiPTBV2nX)4coS%l%io6>dVVZQdQN84dAtua(a7v zTLnR2TCEl-%Mwyb#Bq!)%TN>rYPH(qLs3-~vMei=QX!R6j+)KpcK~9~^QtV%%)`S2 z!Z3u^8k}>}Xf#X^1jh3`!#Oun%1Q_kXIb{sQxeb5&wsIP`;#O|{Ml?q|6PVL#yp;1 zRh6NXB97x&O8NWd=H^TKEQ#L=Ax?x4W6pV@l+vE(>1MNOIOjUgbDgHC4#V&b=lu2B z+S-o*U_C3+eYe|v#Ta|xx~`N`f>K&cr_(%5(|kN0r-YCj#@HVKzVCE8KmV_dkGi|N y+YZC<>oiU0=I7^mzu&*w+S;0~uC9LbU++K83s>b}8Ep0d0000qnaMcZT*+hkSSBvspFWxEu0+Z0v1WHk^{Hb3Q&k;+C{5iVO~WBg)iGVuFhyTCQ1It~olcSvs!ST5dVIZn;|SIoj?y zTJHHe?m0T{xjG(sIvxeO9(j5mxq2RX`arH{o~~z}9*8V705ZIQC|}>JK+ij0&$~e1 zyGY-s$iS!22uS)C8v7O-`4yS?l^FS#8vB=+0Lj2IlfY8bz%sMIa`V74^T2Y8;7YTQ za)>(e<{`4R$e&4nP#!+wnJ zfpN@P;1OBOz`!jG!i)^F=12eq*-JcqUD+S9@(8i335u9y0~3Lyr;B5V#O36Kgp_Ab z1qFlzwij=^_&hNwAt6cB^Xs>QaF2k{DHBbur6(m^HRPJwZ)Rf9%lmE8m!8LI4}=3e zdd_x#m}`3axNf9tQ*Wbtn3dV~O{v$`{OP(Ap)V=NW*lw1dc~x+NZYqd1H;s|rSUiw zNliQ(8=U@i+tkz_QmecSIc8WK@y~lT&$QUhKRqz2!L)fpSx{(X@bNXB!BWM4WVbGn z(76)C^=bF7<)!{FR`vRP-<%*2z@@h)J2xX|P3Bq;^NC^!0-~2q^v|zaxBh%z(WR+k zPm&&N54mveOtIFd@{gwc;erY29L8eYAzmgWCR_RYCYn47OXEm-dO!PC{xWt~$(69AKWA7ual diff --git a/patches/mods-multiplayer/mock_tnt/textures/mock_tnt_top_burning_animated.png b/patches/mods-multiplayer/mock_tnt/textures/mock_tnt_top_burning_animated.png deleted file mode 100644 index 08997e83fcdefbd9424030ce75e0eb864595e534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1021 zcmV@n0|J9Ut|Nrd;AjYnAXtZ4$!>R_d!Lt? zGjk5&HVvU$u|Z&V{)9-|1w~`P7*I79%ccbbswyeZ!;qOpG9g-n zNZwz2@jAySAgBsD4FGSx_i?>kmQ4$yzAOx)v6jlNvuJW+4$&wG8nv|EKUjbGNxSH#?T|y@ z7)8Wal`Tq&!$3r2$yI)_+H=nP(my;tw1A>&5G|3-S#r)X=9CCj$$M)N4b)9L_8S8R z0III3w8rhW$mQ4%mJ8-+QX*qeMOYU3t13(-ngUI7FjZ>II&M9$B%=V=l zw=`!e3ou5r)Ll!Ce))OBAu1Y!D8_IIRCqNA)>7DPTv13$#yem6lv13783q85QLT45 zB_um-2M!^pL25XU*plcb!O zEfJENx4q;{uzOjl!UdN(M2fB&rvC0DyaUk1q6paTs`-QH=9`vD#~v%l2Bg-aoK_ z@YI8~pqgXM^K`L?hsTFk90koQ=dX4yIKQB|_+F8)U!{J8Tl_S>1aDnhD2 z{-1qtb=%&(|HgX%VAqGlDaGK+V$SKgeE@*V^#K5$*9Uy!!PCwI&w*!N?;liMvv^^z zUUuDTS+z~sb*`?dt}piR@c8h`!XVh`Vb|Lc{9|Kj0q*Zb;QG9