From: Auke Kok Date: Mon, 25 Jan 2016 07:27:50 +0000 (-0800) Subject: Make TNT a bit more fun. X-Git-Tag: 0.4.14~49 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=8cd049c224c496b8d47c6d4112c62c656696e717;p=oweals%2Fminetest_game.git Make TNT a bit more fun. But not too much. TNT is a bit underwhelming at the moment. We can make it a bit more interesting by ejecting not just one or two itemstacks, but a bunch of them. This code splits up the drops into separate itemstacks that are 2-5 items together, which results in generally roughly 10 itemstacks being ejected. Since now we have multiple ejecta, it makes sense to tune the ejecta velocities a bit better to get the appearance of an actual explosion better. The items will not all start with the same vertical velocity, since that would look like fireworks. Instead we give them all a different vertical speed. --- diff --git a/mods/tnt/init.lua b/mods/tnt/init.lua index 6b16ab7e..576d3a8a 100644 --- a/mods/tnt/init.lua +++ b/mods/tnt/init.lua @@ -49,23 +49,20 @@ local function eject_drops(drops, pos, radius) local drop_pos = vector.new(pos) for _, item in pairs(drops) do local count = item:get_count() - local max = item:get_stack_max() - if count > max then - item:set_count(max) - end while count > 0 do - if count < max then - item:set_count(count) - end + local take = math.min(math.random(2,5), + item:get_count(), + item:get_stack_max()) rand_pos(pos, drop_pos, radius) - local obj = minetest.add_item(drop_pos, item) + local obj = minetest.add_item(drop_pos, item:get_name() .. " " .. take) if obj then obj:get_luaentity().collect = true obj:setacceleration({x=0, y=-10, z=0}) - obj:setvelocity({x=math.random(-3, 3), y=10, + obj:setvelocity({x=math.random(-3, 3), + y=math.random(0, 10), z=math.random(-3, 3)}) end - count = count - max + count = count - take end end end