You can identify what engine your mod is running in using ACSUtils. This may be useful to avoid using features if they're not present in the engine your mod is running in.
bool IsZDoom() – returns true if the mod is running in ZDoom, but not GZDoom or Zandronum.
bool IsGZDoom() – returns true if the mod is running in GZDoom or a GZDoom-based engine like Zandronum.
bool IsZandronum() – returns true if the mod is running in Zandronum.
int IdentifySourcePort() – returns the exact source port the mod is running in. It can be one of the following constants:
PORT_ZDOOM – ZDoom
PORT_GZDOOM - GZDoom
PORT_ZANDRONUM – Zandronum
First, GetPlayerAccountName is called. It's a Zandronum-exclusive function. It always returns a string (usually an empty string) if it's implemented, while unimplemented ACS functions return 0. Thus, if the function returned something other than zero, it is supported by the engine, and the port is assumed to be Zandronum.
If the port is not Zandronum, an attempt to spawn an actor of type DynamicLight is performed. This actor is only present in GZDoom-based engines, but not in ZDoom. If the actor spawns successfully, it's immediately removed and the port is assumed to be GZDoom.
If both these checks fail, the port is assumed to be ZDoom.
To avoid rerunning these checks every time you call one of the source port identification functions, they are only run the first time any of the functions is called and the result is stored into a map variable. Subsequent function calls simply read the map variable.