2.2 KiB
Grenade Properties
Generic Grenade Properties
Generic Grenade Propertes (GrenadeProp struct) (15 bytes)
0000 [8]byte [Generic Weapon Info](../GenericWeaponInfo.md)
0008 byte Touchiness
0009 byte Blast radius
000A byte Blast core range
000B byte Blast damage
000C uint8 Attack mass (impact force - pushback on hit)
000D int16 Grenade Flags
Touchiness defines how likely a grenade is going to chain-explode if another was exploding nearby.
This value influences a calculation, based on a random value, as well as damage percentage. If the resulting number is higher than 7, then a chain-reaction is caused. In the main game, this value is always
0x00.
Blast radius specifies in tiles how far the explosion reaches, including visual effects (EMP scroll, explosion flash).
The main damage (from the Generic Weapon Info) is applied within the Blast core range of the explosion. This damage falls off from the center to the edge of the core range.
The blast damage is fully applied within the blast core range, additionally to the main damage. This damage falls off from the edge of the core range to the edge of the blast radius.
Grenade Flags (2 bytes)
0x01 Explode on contact
0x02 unused
0x04 Explode by timer
0x08 Explode by vicinity (mine)
The behaviour of grenades is not exclusively governed by the flags field. Some seems to be hardcoded. For instance, regular grenades marked with "timer" don't offer a time setting in the HUD and explode right after being thrown. Regular timed grenades marked as "contact" ignore their timer setting, explode on object-contact, but not on floor/wall contact.
Specific 1 Properties
Properties for timed grenades.
Specific 1 Properties (TimedGrenadeProp struct) (3 bytes)
0000 uint8 Minimum time
0001 uint8 Maximum time
0002 uint8 Timing deviation -- always 0x00
Minimum time and maximum time specify the range, in seconds, timed grenades can be set to.
Timing deviationis always set to 0x00. Since it may also let the grenade go off earlier than expected, this may happen while still in the hand - which is presumably why it is unused in the main game.