X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Futil.qh;h=96a8b680595581b649d05c7eed4767d4d4943e2e;hp=316ee7277bb844ec9e75eb0a6f829a052d010394;hb=546e752299244ed921ca175c78a28318c60165af;hpb=cfc97de2f89e06a0dd538202d4073c4aed16173e;ds=sidebyside diff --git a/qcsrc/common/util.qh b/qcsrc/common/util.qh index 316ee7277..96a8b6805 100644 --- a/qcsrc/common/util.qh +++ b/qcsrc/common/util.qh @@ -1,9 +1,6 @@ // a dummy macro that prevents the "hanging ;" warning #define ENDS_WITH_CURLY_BRACE -// return the actual code name of a var as a string -#define VAR_TO_TEXT(var) #var - #ifdef HAVE_YO_DAWG_CPP // TODO make ascii art pic of xzibit // YO DAWG! @@ -43,7 +40,7 @@ void ACCUMULATE_call(string func) // 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: ", VAR_TO_TEXT(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 @@ -258,37 +255,15 @@ 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 -// 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 @@ -355,8 +330,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 @@ -376,10 +349,9 @@ void FindConnectedComponent(entity e, .entity fld, findNextEntityNearFunction_t // 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 @@ -402,4 +374,41 @@ string CCR(string input); #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 + +#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 + +#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 +float Announcer_PickNumber(float type, float num); #endif