Gunslinger by ANAND

[alpha] Extensible-yet-simple API for all sorts of guns, with a variety of builtin guns as proof of concept.

gunslinger [alpha]

This mod provides an API to add a variety of realistic and enjoyable guns to Minetest. A decent arsenal of guns are provided with the mod, and can be disabled if required.

License

gunslinger_ammo.png (placeholder ammo texture until a better one comes by) has been taken from the shooter modpack by stujones11.

Settings

Architecture

Gunslinger makes use of gun types in order to ease registration of similar guns. A type is made up of a name and a table of default values to be applied to all guns registered with that type. Types are optional, and can also be omitted altogether. Guns are allowed to override their type defaults, for maximum customisability. Raycast is used to find target in line-of-sight, and all objects including non-player entities take damage. See Deferred Raycasting section to know more about gunslinger's projectile calculations.

Final damage to target is calculated like so:

Lite mode

Enabling lite mode will disable the realistic/fancy features which are potentially lag-inducing. Recommended for large servers.

Note: As of now, enabling lite mode will only disable automatic guns, but there are plans to allow lite mode to disable much more.

Automatic guns

gunslinger supports automatic guns out of the box, while not causing excessive lag. This is achieved by adding players who left-click while wielding automatic guns to a special list - the entry remains in the list only as long as their left mouse button is held down. A globalstep iterates through the table and fires one shot for all players in the list (while also respecting the fire-rate of the wielded guns).

The use of a dedicated list improves performance greatly, as the globalstep would have to otherwise iterate through all connected players, check if their mouse button is down, and only then, fire a shot. Nevertheless, disabling automatic guns (by enabling lite mode) is recommended on large public servers as it would still cause quite a bit of lag, in spite of this optimization.

Deferred Raycasting

Deferred Raycasting is a technique which adds the realism of entity-based projectiles, but without entities. This technique throws in a couple more calculations and an extra raycast, but the vastly improved realism at the cost of a negligible performance hit is always great to have. Here's how it works:

See API.md for the complete gunslinger API reference