X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fmain.qc;h=7ad10879f7ac23b05a69a96ae7d4f7441ea51c2d;hb=e98ed192eac2c7983d5395418f3e9396024fa9ba;hp=9bcfd4e7a9c58571bbafdba76dfb5b247a1ba230;hpb=7c6e789970aa8e825df2a95143cdaa62e5c3bbd8;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/main.qc b/qcsrc/client/main.qc index 9bcfd4e7a..7ad10879f 100644 --- a/qcsrc/client/main.qc +++ b/qcsrc/client/main.qc @@ -1,6 +1,12 @@ #include "main.qh" -#include +#include "defs.qh" +#include +#include "miscfunctions.qh" +#include +#include +#include +#include #include "hud/_mod.qh" #include "mapvoting.qh" #include "mutators/events.qh" @@ -15,7 +21,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -30,7 +38,7 @@ void draw_cursor(vector pos, vector ofs, string img, vector col, float a) { - ofs = eX * (ofs.x * SIZE_CURSOR.x) + eY * (ofs.y * SIZE_CURSOR.y); + ofs = vec2(ofs.x * SIZE_CURSOR.x, ofs.y * SIZE_CURSOR.y); drawpic(pos - ofs, strcat(draw_currentSkin, img), SIZE_CURSOR, col, a, DRAWFLAG_NORMAL); } @@ -130,6 +138,9 @@ void CSQC_Init() registercvar("cl_spawn_near_teammate", "1"); + if(autocvar_cl_lockview) + cvar_set("cl_lockview", "0"); + gametype = NULL; postinit = false; @@ -141,6 +152,9 @@ void CSQC_Init() GetTeam(NUM_SPECTATOR, true); // add specs first + for (int w = 0; w <= WEP_LAST - WEP_FIRST; ++w) + weapon_accuracy[w] = -1; + // precaches if(autocvar_cl_reticle) @@ -205,6 +219,8 @@ void Shutdown() localcmd("\ncl_hook_gameend\n"); } + localcmd("\ncl_hook_shutdown\n"); + deactivate_minigame(); HUD_MinigameMenu_Close(NULL, NULL, NULL); } @@ -480,9 +496,9 @@ NET_HANDLE(ENT_CLIENT_CLIENTDATA, bool isnew) int f = ReadByte(); - scoreboard_showscores_force = (f & 1); + scoreboard_showscores_force = (f & BIT(0)); - if(f & 2) + if(f & BIT(1)) { newspectatee_status = ReadByte(); if(newspectatee_status == player_localnum + 1) @@ -491,19 +507,9 @@ NET_HANDLE(ENT_CLIENT_CLIENTDATA, bool isnew) else newspectatee_status = 0; - spectatorbutton_zoom = (f & 4); + spectatorbutton_zoom = (f & BIT(2)); - if(f & 8) - { - angles_held_status = 1; - angles_held.x = ReadAngle(); - angles_held.y = ReadAngle(); - angles_held.z = 0; - } - else - angles_held_status = 0; - - if(f & 16) + if(f & BIT(4)) { num_spectators = ReadByte(); @@ -573,7 +579,7 @@ NET_HANDLE(ENT_CLIENT_NAGGER, bool isnew) { if(vote_called_vote) strunzone(vote_called_vote); - vote_called_vote = strzone(ColorTranslateRGB(ReadString())); + vote_called_vote = strzone(ReadString()); } if(nags & 1) @@ -660,6 +666,9 @@ NET_HANDLE(ENT_CLIENT_ACCURACY, bool isnew) void Spawn_Draw(entity this) { + if(this.alpha <= 0) + return; + __pointparticles(this.cnt, this.origin + '0 0 28', '0 0 2', bound(0, frametime, 0.1)); } @@ -668,7 +677,14 @@ void Spawn_PreDraw(entity this) float alph; vector org = getpropertyvec(VF_ORIGIN); if(this.fade_start) - alph = bound(0, (this.fade_end - vlen(org - this.origin - 0.5 * (this.mins + this.maxs))) / (this.fade_end - this.fade_start), 1); + { + if(vdist(org - this.origin, >, this.fade_end)) + alph = 0; // save on some processing + else if(vdist(org - this.origin, <, this.fade_start)) + alph = 1; // more processing saved + else + alph = bound(0, (this.fade_end - vlen(org - this.origin - 0.5 * (this.mins + this.maxs))) / (this.fade_end - this.fade_start), 1); + } else alph = 1; //printf("%v <-> %v\n", view_origin, this.origin + 0.5 * (this.mins + this.maxs)); @@ -780,8 +796,8 @@ NET_HANDLE(ENT_CLIENT_SPAWNEVENT, bool is_new) localcmd("-zoom\n"); button_zoom = false; } + HUD_Radar_Hide_Maximized(); } - HUD_Radar_Hide_Maximized(); //printf("Ent_ReadSpawnEvent(is_new = %d); origin = %s, entnum = %d, localentnum = %d\n", is_new, vtos(this.origin), entnum, player_localentnum); } @@ -857,7 +873,7 @@ void Ent_Remove(entity this) if(this.snd_looping > 0) { - sound(this, this.snd_looping, SND_Null, VOL_BASE, autocvar_g_jetpack_attenuation); + sound(this, this.snd_looping, SND_Null, VOL_BASE, autocvar_cl_jetpack_attenuation); this.snd_looping = 0; } @@ -979,6 +995,7 @@ NET_HANDLE(ENT_CLIENT_INIT, bool isnew) forcefog = strzone(ReadString()); armorblockpercent = ReadByte() / 255.0; + damagepush_speedfactor = ReadByte() / 255.0; serverflags = ReadByte(); @@ -1037,9 +1054,18 @@ NET_HANDLE(TE_CSQC_RACE, bool isNew) race_checkpoint = ReadByte(); race_time = ReadInt24_t(); race_previousbesttime = ReadInt24_t(); + race_mypreviousbesttime = ReadInt24_t(); if(race_previousbestname) strunzone(race_previousbestname); - race_previousbestname = strzone(ColorTranslateRGB(ReadString())); + string pbestname = ReadString(); + if(autocvar_cl_race_cptimes_onlyself) + { + race_previousbesttime = race_mypreviousbesttime; + race_mypreviousbesttime = 0; + race_previousbestname = strzone(""); + } + else + race_previousbestname = strzone(pbestname); race_checkpointtime = time; @@ -1048,7 +1074,6 @@ NET_HANDLE(TE_CSQC_RACE, bool isNew) race_penaltyaccumulator = 0; race_laptime = time; // valid } - break; case RACE_NET_CHECKPOINT_CLEAR: @@ -1064,9 +1089,19 @@ NET_HANDLE(TE_CSQC_RACE, bool isNew) race_nextcheckpoint = ReadByte(); race_nextbesttime = ReadInt24_t(); + if(b != RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING) // not while spectating (matches server) + race_mybesttime = ReadInt24_t(); if(race_nextbestname) strunzone(race_nextbestname); - race_nextbestname = strzone(ColorTranslateRGB(ReadString())); + string newname = ReadString(); + if(autocvar_cl_race_cptimes_onlyself && b != RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING) + { + race_nextbesttime = race_mybesttime; + race_mybesttime = 0; + race_nextbestname = strzone(""); + } + else + race_nextbestname = strzone(newname); break; case RACE_NET_CHECKPOINT_HIT_RACE: @@ -1078,7 +1113,11 @@ NET_HANDLE(TE_CSQC_RACE, bool isNew) race_mycheckpointlapsdelta -= 256; if(race_mycheckpointenemy) strunzone(race_mycheckpointenemy); - race_mycheckpointenemy = strzone(ColorTranslateRGB(ReadString())); + int who = ReadByte(); + if(who) + race_mycheckpointenemy = strzone(entcs_GetName(who - 1)); + else + race_mycheckpointenemy = strzone(""); // TODO: maybe string_null works fine here? break; case RACE_NET_CHECKPOINT_HIT_RACE_BY_OPPONENT: @@ -1090,7 +1129,11 @@ NET_HANDLE(TE_CSQC_RACE, bool isNew) race_othercheckpointlapsdelta -= 256; if(race_othercheckpointenemy) strunzone(race_othercheckpointenemy); - race_othercheckpointenemy = strzone(ColorTranslateRGB(ReadString())); + int what = ReadByte(); + if(what) + race_othercheckpointenemy = strzone(entcs_GetName(what - 1)); + else + race_othercheckpointenemy = strzone(""); // TODO: maybe string_null works fine here? break; case RACE_NET_PENALTY_RACE: @@ -1176,7 +1219,7 @@ NET_HANDLE(TE_CSQC_RACE, bool isNew) strunzone(grecordholder[pos-1]); grecordholder[pos-1] = strzone(ReadString()); grecordtime[pos-1] = ReadInt24_t(); - if(grecordholder[pos-1] == entcs_GetName(player_localnum)) + if(strdecolorize(grecordholder[pos-1]) == strdecolorize(entcs_GetName(player_localnum))) race_myrank = pos; break; case RACE_NET_SERVER_STATUS: @@ -1236,7 +1279,7 @@ string _getcommandkey(string cmd_name, string command, bool forcename) keys = db_get(binddb, command); if (keys == "") { - bool joy_detected = cvar("joy_detected"); + bool joy_active = cvar("joy_active"); n = tokenize(findkeysforcommand(command, 0)); // uses '...' strings for(j = 0; j < n; ++j) { @@ -1244,7 +1287,7 @@ string _getcommandkey(string cmd_name, string command, bool forcename) if(k != -1) { string key = keynumtostring(k); - if(!joy_detected && substring(key, 0, 3) == "JOY") + if(!joy_active && substring(key, 0, 3) == "JOY") continue; if (keys == "")