-const float AS_STRING = 1;
-const float AS_INT = 2;
-const float AS_FLOAT_TRUNCATED = 2;
-const float AS_FLOAT = 8;
-
-const float TE_CSQC_PICTURE = 100;
-const float TE_CSQC_RACE = 101;
-const float TE_CSQC_NEXGUNBEAMPARTICLE = 103;
-const float TE_CSQC_LIGHTNINGARC = 104;
-const float TE_CSQC_TEAMNAGGER = 105;
-const float TE_CSQC_PINGPLREPORT = 106;
-const float TE_CSQC_TARGET_MUSIC = 107;
-const float TE_CSQC_WEAPONCOMPLAIN = 108;
-const float TE_CSQC_NEX_SCOPE = 109;
-const float TE_CSQC_MINELAYER_MAXMINES = 110;
-const float TE_CSQC_HAGAR_MAXROCKETS = 111;
-const float TE_CSQC_VEHICLESETUP = 112;
-const float TE_CSQC_SVNOTICE = 113;
-
-const float RACE_NET_CHECKPOINT_HIT_QUALIFYING = 0; // byte checkpoint, short time, short recordtime, string recordholder
-const float RACE_NET_CHECKPOINT_CLEAR = 1;
-const float RACE_NET_CHECKPOINT_NEXT_QUALIFYING = 2; // byte nextcheckpoint, short recordtime, string recordholder
-const float RACE_NET_CHECKPOINT_HIT_RACE = 3; // byte checkpoint, short delta, byte lapsdelta, string opponent
-const float RACE_NET_CHECKPOINT_HIT_RACE_BY_OPPONENT = 4; // byte checkpoint, short delta, byte lapsdelta, string opponent
-const float RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING = 5; // byte nextcheckpoint, float laptime, short recordtime, string recordholder
-const float RACE_NET_PENALTY_RACE = 6; // byte penaltytime, string reason
-const float RACE_NET_PENALTY_QUALIFYING = 7; // byte penaltytime, string reason
-const float RACE_NET_SERVER_RECORD = 8; // server record, sent to client
-const float RACE_NET_SPEED_AWARD = 9; // speed award, sent to client
-const float RACE_NET_SPEED_AWARD_BEST = 10; // all time best speed award, sent to client
-const float RACE_NET_SERVER_RANKINGS = 11;
-const float RACE_NET_SERVER_STATUS = 12;
-const float RANKINGS_CNT = 15;
-
-const float ENT_CLIENT = 0;
-const float ENT_CLIENT_DEAD = 1;
-const float ENT_CLIENT_ENTCS = 2;
-const float ENT_CLIENT_SCORES_INFO = 3;
-const float ENT_CLIENT_SCORES = 4;
-const float ENT_CLIENT_TEAMSCORES = 5;
-const float ENT_CLIENT_POINTPARTICLES = 6;
-const float ENT_CLIENT_RAINSNOW = 7;
-const float ENT_CLIENT_LASER = 8;
-const float ENT_CLIENT_NAGGER = 9; // flags [votecalledvote]
-const float ENT_CLIENT_WAYPOINT = 10; // flags origin [team displayrule] [spritename] [spritename2] [spritename3] [lifetime maxdistance hideable]
-const float ENT_CLIENT_RADARLINK = 11; // flags [startorigin] [endorigin] [startcolor+16*endcolor]
-const float ENT_CLIENT_PROJECTILE = 12;
-const float ENT_CLIENT_GIBSPLASH = 13;
-const float ENT_CLIENT_DAMAGEINFO = 14;
-const float ENT_CLIENT_CASING = 15;
-const float ENT_CLIENT_INIT = 16;
-const float ENT_CLIENT_MAPVOTE = 17;
-const float ENT_CLIENT_CLIENTDATA = 18;
-const float ENT_CLIENT_RANDOMSEED = 19;
-const float ENT_CLIENT_WALL = 20;
-const float ENT_CLIENT_SPIDERBOT = 21;
-const float ENT_CLIENT_MODELEFFECT = 22;
-const float ENT_CLIENT_TUBANOTE = 23;
-const float ENT_CLIENT_WARPZONE = 24;
-const float ENT_CLIENT_WARPZONE_CAMERA = 25;
-const float ENT_CLIENT_TRIGGER_MUSIC = 26;
-const float ENT_CLIENT_HOOK = 27;
-const float ENT_CLIENT_LGBEAM = 28;
-const float ENT_CLIENT_GAUNTLET = 29;
-const float ENT_CLIENT_ACCURACY = 30;
-const float ENT_CLIENT_SHOWNAMES = 31;
-const float ENT_CLIENT_WARPZONE_TELEPORTED = 32;
-const float ENT_CLIENT_MODEL = 33;
-const float ENT_CLIENT_ITEM = 34;
-const float ENT_CLIENT_BUMBLE_RAYGUN = 35;
-const float ENT_CLIENT_SPAWNPOINT = 36;
-const float ENT_CLIENT_SPAWNEVENT = 37;
-const float ENT_CLIENT_NOTIFICATION = 38;
-
-const float ENT_CLIENT_TURRET = 40;
-const float ENT_CLIENT_AUXILIARYXHAIR = 50;
-const float ENT_CLIENT_VEHICLE = 60;
-
-const float SPRITERULE_DEFAULT = 0;
-const float SPRITERULE_TEAMPLAY = 1;
-
-const float RADARICON_NONE = 0;
-const float RADARICON_FLAG = 1;
-const float RADARICON_FLAGCARRIER = 1;
-const float RADARICON_HERE = 1; // TODO make these 3 and 4, and make images for them
-const float RADARICON_DANGER = 1;
-const float RADARICON_WAYPOINT = 1;
-const float RADARICON_HELPME = 1;
-const float RADARICON_CONTROLPOINT = 1;
-const float RADARICON_GENERATOR = 1;
-const float RADARICON_OBJECTIVE = 1;
-const float RADARICON_DOMPOINT = 1;
-const float RADARICON_POWERUP = 1;
-const float RADARICON_TAGGED = 1;
+REGISTER_NET_TEMP(TE_CSQC_PICTURE)
+REGISTER_NET_TEMP(TE_CSQC_RACE)
+REGISTER_NET_TEMP(TE_CSQC_TEAMNAGGER)
+REGISTER_NET_TEMP(TE_CSQC_PINGPLREPORT)
+REGISTER_NET_TEMP(TE_CSQC_WEAPONCOMPLAIN)
+REGISTER_NET_TEMP(TE_CSQC_VEHICLESETUP)
+
+const int RACE_NET_CHECKPOINT_HIT_QUALIFYING = 0; // byte checkpoint, short time, short recordtime, string recordholder
+const int RACE_NET_CHECKPOINT_CLEAR = 1;
+const int RACE_NET_CHECKPOINT_NEXT_QUALIFYING = 2; // byte nextcheckpoint, short recordtime, string recordholder
+const int RACE_NET_CHECKPOINT_HIT_RACE = 3; // byte checkpoint, short delta, byte lapsdelta, string opponent
+const int RACE_NET_CHECKPOINT_HIT_RACE_BY_OPPONENT = 4; // byte checkpoint, short delta, byte lapsdelta, string opponent
+const int RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING = 5; // byte nextcheckpoint, float laptime, short recordtime, string recordholder
+const int RACE_NET_PENALTY_RACE = 6; // byte penaltytime, string reason
+const int RACE_NET_PENALTY_QUALIFYING = 7; // byte penaltytime, string reason
+const int RACE_NET_SERVER_RECORD = 8; // server record, sent to client
+const int RACE_NET_SPEED_AWARD = 9; // speed award, sent to client
+const int RACE_NET_SPEED_AWARD_BEST = 10; // all time best speed award, sent to client
+const int RACE_NET_SERVER_RANKINGS = 11;
+const int RACE_NET_SERVER_STATUS = 12;
+const int RANKINGS_CNT = 15;
+
+REGISTER_NET_LINKED(_ENT_CLIENT_INIT)
+#ifdef CSQC
+NET_HANDLE(_ENT_CLIENT_INIT, bool isnew) { return true; }
+#endif
+/** Sent as a temp entity from a persistent linked entity */
+REGISTER_NET_TEMP(ENT_CLIENT_INIT)
+
+REGISTER_NET_LINKED(ENT_CLIENT_SCORES_INFO)
+REGISTER_NET_LINKED(ENT_CLIENT_SCORES)
+REGISTER_NET_LINKED(ENT_CLIENT_TEAMSCORES)
+REGISTER_NET_LINKED(ENT_CLIENT_NAGGER) // flags [votecalledvote]
+REGISTER_NET_LINKED(ENT_CLIENT_RADARLINK) // flags [startorigin] [endorigin] [startcolor+16*endcolor]
+REGISTER_NET_LINKED(ENT_CLIENT_PROJECTILE)
+REGISTER_NET_LINKED(ENT_CLIENT_MAPVOTE)
+REGISTER_NET_LINKED(ENT_CLIENT_CLIENTDATA)
+REGISTER_NET_LINKED(ENT_CLIENT_RANDOMSEED)
+REGISTER_NET_LINKED(ENT_CLIENT_ACCURACY)
+REGISTER_NET_LINKED(ENT_CLIENT_ELIMINATEDPLAYERS)
+
+REGISTER_NET_LINKED(ENT_CLIENT_MODEL)
+
+REGISTER_NET_LINKED(ENT_CLIENT_WARPZONE)
+REGISTER_NET_LINKED(ENT_CLIENT_WARPZONE_CAMERA)
+REGISTER_NET_LINKED(ENT_CLIENT_WARPZONE_TELEPORTED)
+
+REGISTER_NET_LINKED(ENT_CLIENT_ARC_BEAM)
+REGISTER_NET_LINKED(ENT_CLIENT_HOOK)
+REGISTER_NET_LINKED(ENT_CLIENT_TUBANOTE)
+
+REGISTER_NET_LINKED(ENT_CLIENT_SPAWNPOINT)
+REGISTER_NET_LINKED(ENT_CLIENT_SPAWNEVENT)
+REGISTER_NET_LINKED(ENT_CLIENT_WALL)
+
+const int SPRITERULE_DEFAULT = 0;
+const int SPRITERULE_TEAMPLAY = 1;
+const int SPRITERULE_SPECTATOR = 2;