X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Futil.qh;h=e3fab47b7da6d9961c982b9eda081f71a6bbde7f;hb=cc829528986909cb96fe28b65b6d447f27235b65;hp=65b4e67a427b5eca7ba99208d874cec288d466be;hpb=96d50426c7929a9f6b080f575cba5732aa3010d6;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/util.qh b/qcsrc/common/util.qh index 65b4e67a4..e3fab47b7 100644 --- a/qcsrc/common/util.qh +++ b/qcsrc/common/util.qh @@ -1,57 +1,5 @@ -// 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! -// I HERD YO LIEK MACROS -// SO I PUT A MACRO DEFINITION IN YO MACRO DEFINITION -// SO YO CAN EXPAND MACROS WHILE YO EXPAND MACROS -# define ACCUMULATE_FUNCTION(func,otherfunc) \ - #ifdef func \ - void __merge__##otherfunc() { func(); otherfunc(); } \ - #undef func \ - #define func __merge__##otherfunc \ - #else \ - #define func otherfunc \ - #endif -# define CALL_ACCUMULATED_FUNCTION(func) \ - func() -#else -# define ACCUMULATE_FUNCTION(func,otherfunc) \ - .float _ACCUMULATE_##func##__##otherfunc -void ACCUMULATE_call(string func) -{ - float i; - float n = numentityfields(); - string funcprefix = strcat("_ACCUMULATE_", func, "__"); - float funcprefixlen = strlen(funcprefix); - for(i = 0; i < n; ++i) - { - string name = entityfieldname(i); - if(substring(name, 0, funcprefixlen) == funcprefix) - callfunction(substring(name, funcprefixlen, -1)); - } -} -# 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")); } +#ifndef COMMON_UTIL_H +#define COMMON_UTIL_H // 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 @@ -78,7 +26,7 @@ float median(float a, float b, float c); // works for up to 10 decimals! string ftos_decimals(float number, float decimals); -float fexists(string f); +bool fexists(string f); vector colormapPaletteColor(float c, float isPants); @@ -86,25 +34,25 @@ vector colormapPaletteColor(float c, float isPants); string fstrunzone(string s); // database (NOTE: keys are case sensitive) -void db_save(float db, string filename); -void db_dump(float db, string pFilename); -float db_create(); -float db_load(string filename); -void db_close(float db); -string db_get(float db, string key); -void db_put(float db, string key, string value); +void db_save(int db, string filename); +void db_dump(int db, string pFilename); +int db_create(); +int db_load(string filename); +void db_close(int db); +string db_get(int db, string key); +void db_put(int db, string key, string value); // stringbuffer loading/saving -float buf_load(string filename); -void buf_save(float buf, string filename); +int buf_load(string filename); +void buf_save(int buf, string filename); #define TIME_TO_NTHS(t,n) floor((t) * (n) + 0.4) string format_time(float seconds); string mmsss(float t); string mmssss(float t); -#define TIME_DECIMALS 2 -#define TIME_FACTOR 100 +const float TIME_DECIMALS = 2; +const float TIME_FACTOR = 100; #define TIME_ENCODED_TOSTRING(n) mmssss(n) #define RACE_RECORD "/race100record/" #define CTS_RECORD "/cts100record/" @@ -113,9 +61,6 @@ string mmssss(float t); string ScoreString(float vflags, float value); -float dotproduct(vector a, vector b); -vector cross(vector a, vector b); - void compressShortVector_init(); vector decompressShortVector(float data); float compressShortVector(vector vec); @@ -221,15 +166,15 @@ void RandomSelection_Init(); void RandomSelection_Add(entity e, float f, string s, float weight, float priority); #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 +vector healtharmor_maxdamage(float h, float a, float armorblock, int deathtype); // returns vector: maxdamage, armorideal, 1 if fully armored +vector healtharmor_applydamage(float a, float armorblock, int deathtype, float damage); // returns vector: take, save, 0 #endif string getcurrentmod(); #ifndef MENUQC #ifdef CSQC -float ReadInt24_t(); +int ReadInt24_t(); vector ReadInt48_t(); vector ReadInt72_t(); #else @@ -239,14 +184,6 @@ void WriteInt72_t(float dest, vector val); #endif #endif -// the NULL function -#ifdef GMQCC -#define func_null nil -#define string_null nil -#else -var void func_null(void); -var string string_null; -#endif float float2range11(float f); float float2range01(float f); @@ -269,7 +206,7 @@ float get_model_parameters_age; string get_model_parameters_description; string get_model_parameters_bone_upperbody; string get_model_parameters_bone_weapon; -#define MAX_AIM_BONES 4 +const int MAX_AIM_BONES = 4; string get_model_parameters_bone_aim[MAX_AIM_BONES]; float get_model_parameters_bone_aimweight[MAX_AIM_BONES]; float get_model_parameters_fixbone; @@ -286,12 +223,6 @@ float vercmp(string v1, string v2); float u8_strsize(string s); -// translation helpers -string prvm_language; -string language_filename(string s); -string CTX(string s); -#define ZCTX(s) strzone(CTX(s)) - // x-encoding (encoding as zero length invisible string) // encodes approx. 14 bits into 5 bytes of color code string const float XENCODE_MAX = 21295; // 2*22*22*22-1 @@ -303,7 +234,7 @@ float xdecode(string s); // Otherwise, channels 8 to 15 would be blocked for a weird QW feature. #define sound(e,c,s,v,a) sound7(e,c,s,v,a,0,0) -float lowestbit(float f); +int lowestbit(float f); #ifdef CSQC entity ReadCSQCEntity(); @@ -315,10 +246,6 @@ string strtolower(string s); string MakeConsoleSafe(string input); -#ifndef MENUQC -float InterpretBoolean(string input); -#endif - // generic shutdown handler void Shutdown(); @@ -367,37 +294,31 @@ vector get_corner_position(entity box, float corner); #define XPD(...) __VA_ARGS__ // Some common varargs functions. Lowercase as they match C. -#define printf(...) print(sprintf(__VA_ARGS__)) -#define dprintf(...) dprint(sprintf(__VA_ARGS__)) #define fprintf(file, ...) fputs(file, sprintf(__VA_ARGS__)) #define bprintf(...) bprint(sprintf(__VA_ARGS__)) -//#ifndef MENUQC -void backtrace(string msg); -//#endif - // color code replace, place inside of sprintf and parse the string... defaults described as constants // foreground/normal colors -var string autocvar_hud_colorset_foreground_1 = "2"; // F1 - Green // primary priority (important names, etc) -var string autocvar_hud_colorset_foreground_2 = "3"; // F2 - Yellow // secondary priority (items, locations, numbers, etc) -var string autocvar_hud_colorset_foreground_3 = "4"; // F3 - Blue // tertiary priority or relatively inconsequential text -var string autocvar_hud_colorset_foreground_4 = "1"; // F4 - Red // notice/attention grabbing texting +string autocvar_hud_colorset_foreground_1 = "2"; // F1 - Green // primary priority (important names, etc) +string autocvar_hud_colorset_foreground_2 = "3"; // F2 - Yellow // secondary priority (items, locations, numbers, etc) +string autocvar_hud_colorset_foreground_3 = "4"; // F3 - Blue // tertiary priority or relatively inconsequential text +string autocvar_hud_colorset_foreground_4 = "1"; // F4 - Red // notice/attention grabbing texting // "kill" colors -var string autocvar_hud_colorset_kill_1 = "1"; // K1 - Red // "bad" or "dangerous" text (death messages against you, kill notifications, etc) -var string autocvar_hud_colorset_kill_2 = "3"; // K2 - Yellow // similar to above, but less important... OR, a highlight out of above message type -var string autocvar_hud_colorset_kill_3 = "4"; // K3 - Blue // "good" or "beneficial" text (you fragging someone, etc) +string autocvar_hud_colorset_kill_1 = "1"; // K1 - Red // "bad" or "dangerous" text (death messages against you, kill notifications, etc) +string autocvar_hud_colorset_kill_2 = "3"; // K2 - Yellow // similar to above, but less important... OR, a highlight out of above message type +string autocvar_hud_colorset_kill_3 = "4"; // K3 - Blue // "good" or "beneficial" text (you fragging someone, etc) // background color -var string autocvar_hud_colorset_background = "7"; // BG - White // neutral/unimportant text +string autocvar_hud_colorset_background = "7"; // BG - White // neutral/unimportant text string CCR(string input); #ifndef MENUQC -#ifdef CSQC -#define GENTLE (autocvar_cl_gentle || autocvar_cl_gentle_messages) -#else -#define GENTLE autocvar_sv_gentle -#endif -#define normal_or_gentle(normal,gentle) (GENTLE ? ((gentle != "") ? gentle : normal) : normal) + #ifdef CSQC + #define GENTLE (autocvar_cl_gentle || autocvar_cl_gentle_messages) + #else + #define GENTLE autocvar_sv_gentle + #endif + #define normal_or_gentle(normal, gentle) (GENTLE ? ((gentle != "") ? gentle : normal) : normal) #endif // allow writing to also pass through to spectators (like so spectators see the same centerprints as players for example) @@ -415,30 +336,19 @@ vector animfixfps(entity e, vector a, vector b); void dedicated_print(string input); #endif -// todo: better way to do this? -#ifdef MENUQC -#define PROGNAME "MENUQC" -#else -#ifdef SVQC -#define PROGNAME "SVQC" -#else -#define PROGNAME "CSQC" -#endif -#endif - #ifndef MENUQC -#define CNT_NORMAL 1 -#define CNT_GAMESTART 2 -#define CNT_IDLE 3 -#define CNT_KILL 4 -#define CNT_RESPAWN 5 -#define CNT_ROUNDSTART 6 +const float CNT_NORMAL = 1; +const float CNT_GAMESTART = 2; +const float CNT_IDLE = 3; +const float CNT_KILL = 4; +const float CNT_RESPAWN = 5; +const float CNT_ROUNDSTART = 6; float Announcer_PickNumber(float type, float num); #endif #ifndef MENUQC -float Mod_Q1BSP_SuperContentsFromNativeContents(float nativecontents); -float Mod_Q1BSP_NativeContentsFromSuperContents(float supercontents); +int Mod_Q1BSP_SuperContentsFromNativeContents(int nativecontents); +int Mod_Q1BSP_NativeContentsFromSuperContents(int supercontents); #endif // Quadratic splines (bezier) @@ -448,4 +358,5 @@ vector bezier_quadratic_getderivative(vector a, vector p, vector b, float t); #define APPEND_TO_STRING(list,sep,add) ((list) = (((list) != "") ? strcat(list, sep, add) : (add))) // Returns the correct difference between two always increasing numbers -#define COMPARE_INCREASING(to,from) (to < from ? from + to + 2 : to - from) \ No newline at end of file +#define COMPARE_INCREASING(to,from) (to < from ? from + to + 2 : to - from) +#endif