- May 06, 2016
-
-
Foz authored
-
- May 01, 2016
-
-
Auke Kok authored
This uses a vmanip to count adjacent tnt nodes and explodes them all at once, using an inverse square law to recalculate the radius. The maximum explosion becomes 125 nodes of tnt yielding a radius of 15 nodes, which does not break my machine and makes it return in under a second. This makes both bigger explosions and less stability issues. The drop code has been simplified and now drops at all times a reasonable amount of drops, never blanketing the area with drops, even at the larges explosion level. Particles are scaled up according to explosion size as well - a bigger explosion will show bigger particles. To scale the tnt:boom particle, we move it to the _effects() function.
-
- Apr 30, 2016
-
-
Auke Kok authored
Introduces an `on_blast(luaobj, damage)` callback that mods can attach to an entity def. The function will get called with the damage that TNT would make. The function should return three values: bool do_damage, bool do_knockback, table drops do_damage allows the mod to tell the TNT code to perform damage on the entity for the mod. The mod code should not do anything with the entity HP. The entity should not be immortal. If false, then the entity will not be damaged by the TNT mod. do_knockback allows the mod to tell the TNT mod to perform an entity knockback effect. If false, no knockback effect is applied to the entity. the drops table is a list of items to drop. It may be nil. E.g. { "wool:red" }. I've documented both on_blast() API methods in game_api.txt. It is a better place than lua_api.txt.
-
Auke Kok authored
Any second explosion near a first TNT explosion will punch all entities found nearby, including item drops. This causes the item pickup code to think the item was picked up, but by a `nil` player, thus removing the item. We query for the immortal entity group, and if the item is in the immortal group, do not punch the item.
-
- Apr 26, 2016
-
-
Auke Kok authored
We reuse the tnt:boom texture for a particle that is added by the on_construct() of tnt:boom, and has a short expiry time (0.2sec). It is 3 nodes larged, centered on the explosion. We then make tnt:boom airlike so it doesn't have a texture, and it's the thing that emits lots of light (we could even make it exist a bit longer). The nice thing about particles is that the client is less susceptible to lag and will always remove them as fast as possible, so this makes the visual more constant and responsive.
-
Auke Kok authored
The effect is similar, and the reduction in particles is a small boost in responsiveness. To compensate, I've lowered the spawner time and expiration length as well.
-
Auke Kok authored
-
Auke Kok authored
This allows TNT to be used for e.g. traps (drop it from the ceiling) or weird tnt effects with other explosions.
-
Auke Kok authored
We add a +/- 0.5 random value to the velocity vector of ejecting nodes. I've spotted a lot of nodes going exactly straight up if blowing up sand above TNT. The extra variation looks less artificial.
-
Auke Kok authored
We apply punch damage to mobs caught in the blast radius, as this code previously only hurt players. We "move" players back 1 node if they're caught in the blast, and slightly up. We can't "eject" players due to missing API code to support that, unfortunately.
-
Auke Kok authored
-
Auke Kok authored
Adds a minor helper function that allows efficient retrieval of several inventories from a node inventory. We use this helper to quickly retrieve the items in chests, vessel shelves, book shelves and furnaces, and return these with the nodes itself to the TNT caller. The TNT caller then performs the entity physics, and we don't need to do anything else. We disable TNT doing anything with bones. We expose a bug in the code that drops the items - metadata was lost entirely. This patch corrects that by properly copying the metadata and creating the drops list inclusive metadata.
-
- Apr 16, 2016
-
-
Auke Kok authored
This will make sand and gravel blocks on top of TNT actually fly in the air. https://youtu.be/4omndVZijLc
-
Auke Kok authored
Let's just call it "terminal" velocity.
-
Auke Kok authored
We add on_create() handlers for both burning TNT and burning gunpowder. Because gunpowder will explode TNT in 1 second, and not 4, we need to modify the 4 second timer after we make the TNT burning. Other mods can now place burning TNT that will by default explode after 4 seconds.
-
Auke Kok authored
I spotted two places where under stress (many explosions) luajit would end up passing nil to these functions. I'm not entirely sure how, but it seems good form to guard against it, which does make it more robust. After this patch, I'm not able to crash the server. With many explosions, it may still lag significantly, but always returns in the end.
-
red-001 authored
-
Auke Kok authored
We define the blast intensity as the square of the tnt_radius, divided by the square of the distance to the explosion center, where distance is limited to 1 at the lower end. When destroying nodes, we calculate the intensity for each node, and only destroy the nodes when the intensity is 1.0 or larger. To avoid perfectly spherical explosions, we make sure to retain a randomness factor of 20%. This will make explosion edges jagged and not smooth, but not too much. We pass the calculated intensity to on_blast() functions as well, except we take the jitter here out and make sure it's always 1.0 or larger.
-
Auke Kok authored
We apply a log scale to the size of the stacks ejected, so that in larger explosions we are getting larger stacks. For normal r=3 explosions, this gives stack sizes ~6-7 or so, but for r=10 explosions it could end up giving stacks of 25+.V
-
Auke Kok authored
With the new high res timer, we can make TNT much better create chain reactions. This does exactly that.
-
Auke Kok authored
The drops list already has quantities, so let's just select the one with the highest quantity from it, and use that as tile. Fallback tile will therefore only be used if explosion happens in air. Oh well.
-
Auke Kok authored
- Fix spacing errors around = and .. - Indentation fixes - Break up long lines
-
red-001 authored
-
red-001 authored
Currently the TNT mod uses a dummy vaule of 1 for this.
-
red-001 authored
-
Auke Kok authored
We add a dirt-like particle (drawn from scratch, uses some colors from default_dirt's palette) to spawn many particles that have collision enabled around the center of the blast. This has the effect of obscuring the center of the blast, as that is a painfully visible empty area when the explosion happens, as there's only a little spark. The dirt particles bounce around the walls and floor a bit, and disappear rapidly, well before the smoke particles disappear. This is a nice visual distraction that obscures the sudden appearance of the gaping hole, and makes it a whole lot more believable.
-
Auke Kok authored
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.
-
Auke Kok authored
If the node is special and has an on_blast() handler, we need to call it instead of getting node drops manually. However, we do want to know if drops should be added for the special nodes, so we modify the on_blast() handler code to allow the nodedef handlers to pass back itemstacks. This could be used by e.g. the doors mod to drop door items after a blast. Since this API is documented in lua_api.txt, a separate PR will be incoming to update the on_blast() documentation.
-
- Feb 18, 2016
-
-
tenplus1 authored
By adding the timer to the tnt:tnt_burning node it will help mods add the block and cause an explosion after 4 seconds instead of doing nothing like in it's current state.
-
Craig Davison authored
This option is not documented nor is it used with any other mod in Minetest Game so why should it be used in TNT?
-
- Feb 14, 2016
-
-
paramat authored
Spread ABM intervals evenly across 1 to 16 seconds 16s ensures no nodes are missed when player walks past Adjust chance values to compensate, for identical action rates Combine lavacooling ABMs into one, return to chance = 1 Grass growth: add 'neighbors = "air"' to avoid processing the thousands of underground dirt nodes Grass death: Reduce action rate to that of grass growth Fire: Use chance = 1 for flame extinguishing and flame removal when mod is disabled
-
- Jan 06, 2016
-
-
ShadowNinja authored
-
- Jun 18, 2015
-
-
paramat authored
Remove line if set to the default of 'true'
-
- Jun 07, 2015
-
-
Wuzzy authored
Uses group “connect_to_raillike”
-
- May 12, 2015
-
-
Novatux authored
Copy pos before giving it to on_blast because it can modify it; also remove a debug print that had nothing to do here
-
Novatux authored
-
Wuzzy authored
Implemented nodes: - Steel Door: Ignores explosion - Locked Chest: Ignores explosion - Fire: Ignores explosion - TNT: Starts burning - Burning TNT: Explodes immediately - Gunpowder: Starts burning - Burning Gunpowder: Ignores explosion
-
- Jan 10, 2015
-
-
PilzAdam authored
-
- Jul 26, 2014
-
-
Gabriel Huber authored
-
- Jul 22, 2014
-
-
ShadowNinja authored
-