fteqw/quakec/basemod/engine.qc

184 lines
5.3 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Engine support code (ENG) --
// Checks to see what extensions are supported by current running engine and
// has wrappers for builtins based on engine (other than EF_/TE_/viewkick/flash effects)
var float chan_no_phs_add = 0;
INTEGER eng_support;
enumflags INTEGER {
ENG_STOF,
ENG_CVARSTRING,
ENG_TEBUILTINS,
ENG_TEBLOOD,
ENG_EFRED,
ENG_EFBLUE
};
// prototypes
void() EFF_SetEffects;
// builtins
float(string s) cvar = #45;
void(vector o, vector d, float color, float count) particle = #48; // NQ only
void(entity killer, entity killee) _logfrag = #79; // QW only
string(entity e, string key) _infokey = #80; // QW only
void(vector where, float set) multicast = #82; // QW only
float(string s) checkextension = #99; // QSG extension
void(vector org, vector velocity, float howmany) te_blood = #405; // DP_TE_BLOOD
void(vector org) _te_gunshot = #418; // DP_TE_STANDARDEFFECTBUILTINS
void(vector org) _te_spike = #419; // DP_TE_STANDARDEFFECTBUILTINS
void(vector org) _te_superspike = #420; // DP_TE_STANDARDEFFECTBUILTINS
void(vector org) _te_explosion = #421; // DP_TE_STANDARDEFFECTBUILTINS
void(vector org) _te_tarexplosion = #422; // DP_TE_STANDARDEFFECTBUILTINS
void(vector org) _te_wizspike = #423; // DP_TE_STANDARDEFFECTBUILTINS
void(vector org) _te_knightspike = #424; // DP_TE_STANDARDEFFECTBUILTINS
void(vector org) _te_lavasplash = #425; // DP_TE_STANDARDEFFECTBUILTINS
void(vector org) _te_teleport = #426; // DP_TE_STANDARDEFFECTBUILTINS
void(vector org, float color, float colorlength) _te_explosion2 = #427; // DP_TE_STANDARDEFFECTBUILTINS
void(entity own, vector start, vector end) _te_lightning1 = #428; // DP_TE_STANDARDEFFECTBUILTINS
void(entity own, vector start, vector end) _te_lightning2 = #429; // DP_TE_STANDARDEFFECTBUILTINS
void(entity own, vector start, vector end) _te_lightning3 = #430; // DP_TE_STANDARDEFFECTBUILTINS
void(entity own, vector start, vector end) _te_beam = #431; // DP_TE_STANDARDEFFECTBUILTINS
string(string s) cvar_string = #448; // DP_CVAR_STRING
// wrappers
// print wrapper
#ifdef NETQUAKE
void(...) _bprint = #23; // NQ
void(entity client, ...) _sprint = #24; // NQ
#define bprint1(l,a) _bprint(a)
#define bprint2(l,a,b) _bprint(a,b)
#define bprint3(l,a,b,c) _bprint(a,b,c)
#define bprint4(l,a,b,c,d) _bprint(a,b,c,d)
#define bprint5(l,a,b,c,d,e) _bprint(a,b,c,d,e)
#define bprint6(l,a,b,c,d,e,f) _bprint(a,b,c,d,e,f)
#define bprint7(l,a,b,c,d,e,f,g) _bprint(a,b,c,d,e,f,g)
#define sprint1(t,l,a) _sprint(t,a)
#define sprint2(t,l,a,b) _sprint(t,a,b)
#define sprint3(t,l,a,b,c) _sprint(t,a,b,c)
#define sprint4(t,l,a,b,c,d) _sprint(t,a,b,c,d)
#define sprint5(t,l,a,b,c,d,e) _sprint(t,a,b,c,d,e)
#define sprint6(t,l,a,b,c,d,e,f) _sprint(t,a,b,c,d,e,f)
#else
void(float level, ...) _bprint = #23; // QW
void(entity client, float level, ...) _sprint = #24; // QW
#define bprint1(l,a) _bprint(l,a)
#define bprint2(l,a,b) _bprint(l,a,b)
#define bprint3(l,a,b,c) _bprint(l,a,b,c)
#define bprint4(l,a,b,c,d) _bprint(l,a,b,c,d)
#define bprint5(l,a,b,c,d,e) _bprint(l,a,b,c,d,e)
#define bprint6(l,a,b,c,d,e,f) _bprint(l,a,b,c,d,e,f)
#define bprint7(l,a,b,c,d,e,f,g) _bprint(l,a,b,c,d,e,f,g)
#define sprint1(t,l,a) _sprint(t,l,a)
#define sprint2(t,l,a,b) _sprint(t,l,a,b)
#define sprint3(t,l,a,b,c) _sprint(t,l,a,b,c)
#define sprint4(t,l,a,b,c,d) _sprint(t,l,a,b,c,d)
#define sprint5(t,l,a,b,c,d,e) _sprint(t,l,a,b,c,d,e)
#define sprint6(t,l,a,b,c,d,e,f) _sprint(t,l,a,b,c,d,e,f)
#endif
// logfrag wrapper
#ifdef NETQUAKE
// empty define to strip logfrag out
#define logfrag(x,y)
#else
#define logfrag(x,y) _logfrag(x,y)
#endif
// stof
float(string s) _stof = #81;
float(string s) _stofdummy =
{
return 0;
}
var float(string s) stof = _stofdummy;
// infokey wrapper
#ifdef NETQUAKE
#define numberserverinfokey(x) cvar(x)
string(string cv) stringserverinfokey =
{
if (eng_support & ENG_CVARSTRING)
return cvar_string(cv);
return "";
}
#define numberclientinfokey(x,y) 0
#define stringclientinfokey(x,y) ""
#else
#define numberserverinfokey(x) stof(_infokey(world,x))
#define stringserverinfokey(x) _infokey(world,x)
#define numberclientinfokey(x,y) stof(_infokey(x,y))
#define stringclientinfokey(x,y) _infokey(x,y)
#endif
// cdtrack wrapper
#ifdef NETQUAKE
// only NetQuake supports loop track
void(float track, float looptrack) ENG_SwitchTrack =
{
WriteByte (MSG_ALL, SVC_CDTRACK);
WriteByte (MSG_ALL, track);
WriteByte (MSG_ALL, looptrack);
};
#else
void(float track) _ENG_SwitchTrack =
{
WriteByte (MSG_ALL, SVC_CDTRACK);
WriteByte (MSG_ALL, track);
};
#define ENG_SwitchTrack(a,b) _ENG_SwitchTrack(a)
#endif
// finale wrapper
void(string s) ENG_Finale =
{
WriteByte (MSG_ALL, SVC_FINALE);
WriteString (MSG_ALL, s);
};
// engine check routine
void() ENG_Check =
{
#ifndef NETQUAKE
eng_support = ENG_STOF | ENG_EFRED | ENG_EFBLUE;
chan_no_phs_add = 8;
#endif
if (!cvar("pr_checkextension"))
return; // no extensions supported
if (checkextension("FRIK_FILE"))
eng_support |= ENG_STOF;
if (checkextension("DP_CVAR_STRING"))
eng_support |= ENG_CVARSTRING;
if (checkextension("DP_TE_STANDARDEFFECTBUILTINS"))
eng_support |= ENG_TEBUILTINS;
if (checkextension("DP_TE_BLOOD"))
eng_support |= ENG_TEBLOOD;
if (checkextension("DP_EF_RED"))
eng_support |= ENG_EFRED;
if (checkextension("DP_EF_BLUE"))
eng_support |= ENG_EFBLUE;
// check and set stof extension
if (eng_support & ENG_STOF)
stof = _stof;
EFF_SetEffects();
};