X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Futil.qh;h=c538b6f3e012a52eb527a74f1e3f7bee4ea96b1c;hb=3a4facfc84d13dfd813e8e7cd4210af518f75c81;hp=df910e353927a2593f56a7d5f245d0d29702f0ed;hpb=fc0e4c6f26156858a71e0ec62eb974fa11eec2f9;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/util.qh b/qcsrc/common/util.qh index df910e353..c538b6f3e 100644 --- a/qcsrc/common/util.qh +++ b/qcsrc/common/util.qh @@ -1,6 +1,17 @@ +#define WANT_CONST +// commonly used, but better make them macros +#define TRUE 1 +#define FALSE 0 + // a dummy macro that prevents the "hanging ;" warning #define ENDS_WITH_CURLY_BRACE +#ifdef GMQCC +# define ACCUMULATE_FUNCTION(func,otherfunc) \ + [[accumulate]] void func() { otherfunc(); } +# define CALL_ACCUMULATED_FUNCTION(func) \ + func() +#else #ifdef HAVE_YO_DAWG_CPP // TODO make ascii art pic of xzibit // YO DAWG! @@ -19,7 +30,7 @@ func() #else # define ACCUMULATE_FUNCTION(func,otherfunc) \ - .void _ACCUMULATE_##func##__##otherfunc; + .float _ACCUMULATE_##func##__##otherfunc void ACCUMULATE_call(string func) { float i; @@ -36,11 +47,12 @@ void ACCUMULATE_call(string func) # define CALL_ACCUMULATED_FUNCTION(func) \ ACCUMULATE_call(#func) #endif +#endif // used for simplifying ACCUMULATE_FUNCTIONs #define SET_FIRST_OR_LAST(input,first,count) if(!input) { input = (first + count); } #define SET_FIELD_COUNT(field,first,count) if(!field) { field = (first + count); ++count; } -#define CHECK_MAX_COUNT(name,max,count,type) if(count == max) { error(strcat("Maximum ", type, " hit: ", #name, ": ", ftos(count), ".\n")); } +#define CHECK_MAX_COUNT(name,max,count,type) if(count > max) { error(strcat("Maximum ", type, " hit: ", #name, ": ", ftos(count), ".\n")); } // this returns a tempstring containing a copy of s with additional \n newlines added, it also replaces \n in the text with a real newline // NOTE: s IS allowed to be a tempstring @@ -89,7 +101,7 @@ void buf_save(float buf, string filename); // modulo function #ifndef MENUQC -float mod(float a, float b) { return a - (floor(a / b) * b); } +float mod(float a, float b) { return a - (floor(a / b) * b); } #endif #define TIME_TO_NTHS(t,n) floor((t) * (n) + 0.4) @@ -151,7 +163,7 @@ float almost_in_bounds(float a, float b, float c); float power2of(float e); float log2of(float x); -string HEXDIGITS = "0123456789ABCDEF0123456789abcdef"; +const string HEXDIGITS = "0123456789ABCDEF0123456789abcdef"; #define HEXDIGIT_TO_DEC_RAW(d) (strstrofs(HEXDIGITS, (d), 0)) #define HEXDIGIT_TO_DEC(d) ((HEXDIGIT_TO_DEC_RAW(d) | 0x10) - 0x10) #define DEC_TO_HEXDIGIT(d) (substring(HEXDIGITS, (d), 1)) @@ -203,7 +215,7 @@ float compressShotOrigin(vector v); vector decompressShotOrigin(float f); #ifdef SVQC -string rankings_reply, ladder_reply, lsmaps_reply, lsnewmaps_reply, maplist_reply; // cached replies +string rankings_reply, ladder_reply, lsmaps_reply, maplist_reply; // cached replies string records_reply[10]; #endif @@ -215,16 +227,22 @@ string RandomSelection_chosen_string; void RandomSelection_Init(); void RandomSelection_Add(entity e, float f, string s, float weight, float priority); -vector healtharmor_maxdamage(float h, float a, float armorblock); // returns vector: maxdamage, armorideal, 1 if fully armored -vector healtharmor_applydamage(float a, float armorblock, float damage); // returns vector: take, save, 0 +#ifndef MENUQC +vector healtharmor_maxdamage(float h, float a, float armorblock, float deathtype); // returns vector: maxdamage, armorideal, 1 if fully armored +vector healtharmor_applydamage(float a, float armorblock, float deathtype, float damage); // returns vector: take, save, 0 +#endif string getcurrentmod(); #ifndef MENUQC #ifdef CSQC float ReadInt24_t(); +vector ReadInt48_t(); +vector ReadInt72_t(); #else void WriteInt24_t(float dest, float val); +void WriteInt48_t(float dest, vector val); +void WriteInt72_t(float dest, vector val); #endif #endif @@ -264,34 +282,6 @@ float get_model_parameters_fixbone; string get_model_parameters_desc; float get_model_parameters(string mod, float skn); // call with string_null to clear; skin -1 means mod is the filename of the txt file and is to be split -// stupid stupid stupid FTEQCC has a max limit on macro sizes, let's work around by splitting the macro into two macros! :( -#define HUD_Panel_GetName_Part2(id) \ -switch(id) {\ - case HUD_PANEL_ENGINEINFO: panel_name = HUD_PANELNAME_ENGINEINFO; break; \ - case HUD_PANEL_INFOMESSAGES: panel_name = HUD_PANELNAME_INFOMESSAGES; break; \ - case HUD_PANEL_PHYSICS: panel_name = HUD_PANELNAME_PHYSICS; break; \ - case HUD_PANEL_CENTERPRINT: panel_name = HUD_PANELNAME_CENTERPRINT; break; \ -} ENDS_WITH_CURLY_BRACE - -// Get name of specified panel id -#define HUD_Panel_GetName(id) \ -switch(id) { \ - case HUD_PANEL_WEAPONS: panel_name = HUD_PANELNAME_WEAPONS; break; \ - case HUD_PANEL_AMMO: panel_name = HUD_PANELNAME_AMMO; break; \ - case HUD_PANEL_POWERUPS: panel_name = HUD_PANELNAME_POWERUPS; break; \ - case HUD_PANEL_HEALTHARMOR: panel_name = HUD_PANELNAME_HEALTHARMOR; break; \ - case HUD_PANEL_NOTIFY: panel_name = HUD_PANELNAME_NOTIFY; break; \ - case HUD_PANEL_TIMER: panel_name = HUD_PANELNAME_TIMER; break; \ - case HUD_PANEL_RADAR: panel_name = HUD_PANELNAME_RADAR; break; \ - case HUD_PANEL_SCORE: panel_name = HUD_PANELNAME_SCORE; break; \ - case HUD_PANEL_RACETIMER: panel_name = HUD_PANELNAME_RACETIMER; break; \ - case HUD_PANEL_VOTE: panel_name = HUD_PANELNAME_VOTE; break; \ - case HUD_PANEL_MODICONS: panel_name = HUD_PANELNAME_MODICONS; break; \ - case HUD_PANEL_PRESSEDKEYS: panel_name = HUD_PANELNAME_PRESSEDKEYS; break; \ - case HUD_PANEL_CHAT: panel_name = HUD_PANELNAME_CHAT; break; \ - default: HUD_Panel_GetName_Part2(id)\ -} - vector vec2(vector v); #ifndef MENUQC @@ -374,6 +364,11 @@ typedef entity(entity cur, entity near, entity pass) findNextEntityNearFunction_ typedef float(entity a, entity b, entity pass) isConnectedFunction_t; void FindConnectedComponent(entity e, .entity fld, findNextEntityNearFunction_t nxt, isConnectedFunction_t iscon, entity pass); +#ifdef SVQC +vector combine_to_vector(float x, float y, float z); +vector get_corner_position(entity box, float corner); +#endif + // expand multiple arguments into one argument by stripping parenthesis #define XPD(...) __VA_ARGS__ @@ -432,5 +427,11 @@ void dedicated_print(string input); #endif #ifndef MENUQC -float Announcer_PickNumber(float num); +#define CNT_NORMAL 1 +#define CNT_GAMESTART 2 +#define CNT_IDLE 3 +#define CNT_KILL 4 +#define CNT_RESPAWN 5 +#define CNT_ROUNDSTART 6 +float Announcer_PickNumber(float type, float num); #endif