Due to the new 64-bit tick system, drowning damage is applied by ticks instead of seconds by mistake, which makes entities die way faster than they should (check the player underwater).
extern keyword before functions in entity sources will only generate a function declaration in the entity header without the function body in the source file to be able to define it yourself in a separate source file from ES.
Example without extern (under functions: in .es):
voidFunc(void) {
// function codeDoThis();
};
Example with extern (under functions: in .es):
externvoidFunc(void); // or Func(void) {};
In some .cpp file:
voidCEntityName::Func(void) {
// function codeDoThis();
};
All GRO files should be in their own content folders. Core game resources would be in something like “Content/Base” while custom content would be under “Content/User”.
Works in a pair with SetOwner() and capable of setting a position offset relatively to the owner's rotation or absolutely (relative to owner's position only). Something like SetPositionOffset(const FLOAT3D &vPos, BOOL bRotate = TRUE).
A feature just like "HasName" or "HasTarget" that implements SetHealth and GetHealth functions for health management and an optional ReceiveDamage that sends a EDeath event if the health goes below zero (or implement that in CEntity by default).
Copy CLiveEntity::Write_t/Read_t code into CEntity::Write_t/Read_t for compatibility and add a special compatibility flag to read health only if the entity is derived from CRationalEntity (i.e. don't read health for normal CEntity by accident).
CLiveEntity only implements the health property and some functions which are useless in CRationalEntity entities most of the time (for example Trigger).