X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Futil.qh;h=eb2713864d7d62e146dafa5829c4665b39c1b6a4;hb=e2d5ab1348e707e3dd01663974d70a69b416bd24;hp=9a3821ed16b4e4f2d6ff43f687c852afa06bb913;hpb=3b4538464212cdef7e377e6e203e820178a76fe6;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/util.qh b/qcsrc/common/util.qh index 9a3821ed1..eb2713864 100644 --- a/qcsrc/common/util.qh +++ b/qcsrc/common/util.qh @@ -232,8 +232,13 @@ void WriteInt24_t(float dest, float val); #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); @@ -253,6 +258,12 @@ float get_model_parameters_species; string get_model_parameters_sex; float get_model_parameters_weight; float get_model_parameters_age; +string get_model_parameters_bone_upperbody; +string get_model_parameters_bone_weapon; +#define 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; 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 @@ -350,8 +361,6 @@ void queue_to_execute_next_frame(string s); // for marking written-to values as unused where it's a good idea to do this noref float unused_float; - - // a function f with: // f(0) = 0 // f(1) = 1 @@ -368,8 +377,115 @@ 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); -// expand multiple arguments into one argument -#define XPD5(a,b,c,d,e) a, b, c, d, e -#define XPD4(a,b,c,d) a, b, c, d -#define XPD3(a,b,c) a, b, c -#define XPD2(a,b) a, b +// expand multiple arguments into one argument by stripping parenthesis +#define XPD(...) __VA_ARGS__ + +float Count_Proper_Strings(string improper, string...count); +float Count_Proper_Floats(float improper, float...count); + +#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 +// "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) +// background color +var 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) +#endif + +// allow writing to also pass through to spectators (like so spectators see the same centerprints as players for example) +#define WRITESPECTATABLE_MSG_ONE_VARNAME(varname,statement) entity varname; varname = msg_entity; FOR_EACH_REALCLIENT(msg_entity) if(msg_entity == varname || (msg_entity.classname == STR_SPECTATOR && msg_entity.enemy == varname)) statement msg_entity = varname +#define WRITESPECTATABLE_MSG_ONE(statement) WRITESPECTATABLE_MSG_ONE_VARNAME(oldmsg_entity, statement) +#define WRITESPECTATABLE(msg,statement) if(msg == MSG_ONE) { WRITESPECTATABLE_MSG_ONE(statement); } else statement float WRITESPECTATABLE_workaround = 0 + +vector vec3(float x, float y, float z); + +#ifndef MENUQC +vector animfixfps(entity e, vector a, vector b); +#endif + +#define count_years_decs(time,decs) sprintf(ZCTX(_("CI_DEC^%s years")), ftos_decimals(time, decs)) +#define count_years(time) count_fill(time, \ + ZCTX(_("CI_ZER^%d years")), /* zeroth */ \ + ZCTX(_("CI_FIR^%d year")), /* first */ \ + ZCTX(_("CI_SEC^%d years")), /* year */ \ + ZCTX(_("CI_THI^%d years")), /* third */ \ + ZCTX(_("CI_MUL^%d years"))) /* multi */ + +#define count_weeks_decs(time,decs) sprintf(ZCTX(_("CI_DEC^%s weeks")), ftos_decimals(time, decs)) +#define count_weeks(time) count_fill(time, \ + ZCTX(_("CI_ZER^%d weeks")), /* zeroth */ \ + ZCTX(_("CI_FIR^%d week")), /* first */ \ + ZCTX(_("CI_SEC^%d weeks")), /* week */ \ + ZCTX(_("CI_THI^%d weeks")), /* third */ \ + ZCTX(_("CI_MUL^%d weeks"))) /* multi */ + +#define count_days_decs(time,decs) sprintf(ZCTX(_("CI_DEC^%s days")), ftos_decimals(time, decs)) +#define count_days(time) count_fill(time, \ + ZCTX(_("CI_ZER^%d days")), /* zeroth */ \ + ZCTX(_("CI_FIR^%d day")), /* first */ \ + ZCTX(_("CI_SEC^%d days")), /* day */ \ + ZCTX(_("CI_THI^%d days")), /* third */ \ + ZCTX(_("CI_MUL^%d days"))) /* multi */ + +#define count_hours_decs(time,decs) sprintf(ZCTX(_("CI_DEC^%s hours")), ftos_decimals(time, decs)) +#define count_hours(time) count_fill(time, \ + ZCTX(_("CI_ZER^%d hours")), /* zeroth */ \ + ZCTX(_("CI_FIR^%d hour")), /* first */ \ + ZCTX(_("CI_SEC^%d hours")), /* hour */ \ + ZCTX(_("CI_THI^%d hours")), /* third */ \ + ZCTX(_("CI_MUL^%d hours"))) /* multi */ + + +#define count_minutes_decs(time,decs) sprintf(ZCTX(_("CI_DEC^%s minutes")), ftos_decimals(time, decs)) +#define count_minutes(time) count_fill(time, \ + ZCTX(_("CI_ZER^%d minutes")), /* zeroth */ \ + ZCTX(_("CI_FIR^%d minute")), /* first */ \ + ZCTX(_("CI_SEC^%d minutes")), /* minute */ \ + ZCTX(_("CI_THI^%d minutes")), /* third */ \ + ZCTX(_("CI_MUL^%d minutes"))) /* multi */ + +#define count_seconds_decs(time,decs) sprintf(ZCTX(_("CI_DEC^%s seconds")), ftos_decimals(time, decs)) +#define count_seconds(time) count_fill(time, \ + ZCTX(_("CI_ZER^%d seconds")), /* zeroth */ \ + ZCTX(_("CI_FIR^%d second")), /* first */ \ + ZCTX(_("CI_SEC^%d seconds")), /* second */ \ + ZCTX(_("CI_THI^%d seconds")), /* third */ \ + ZCTX(_("CI_MUL^%d seconds"))) /* multi */ + +string count_ordinal(float interval); +string count_fill(float interval, string zeroth, string first, string second, string third, string multi); +string process_time(float outputtype, float seconds); + +#ifdef SVQC +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