From 61440b0988dc11607157617131112e1e433452c0 Mon Sep 17 00:00:00 2001 From: div0 Date: Thu, 2 Oct 2008 11:37:16 +0000 Subject: [PATCH] new waypointsprite system, onslaught not yet supported git-svn-id: svn://svn.icculus.org/nexuiz/trunk@4576 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/gfx/teamradar_icon_1.tga | Bin 0 -> 588 bytes data/gfx/teamradar_icon_2.tga | Bin 0 -> 588 bytes data/gfx/teamradar_ping.tga | Bin 0 -> 155710 bytes data/qcsrc/client/Main.qc | 27 ++- data/qcsrc/client/View.qc | 43 ++++- data/qcsrc/client/csqc_builtins.qc | 2 +- data/qcsrc/client/main.qh | 4 + data/qcsrc/client/miscfunctions.qc | 11 ++ data/qcsrc/client/progs.src | 2 + data/qcsrc/client/teamradar.qc | 26 ++- data/qcsrc/client/teamradar.qh | 5 + data/qcsrc/client/waypointsprites.qc | 253 +++++++++++++++++++++++++ data/qcsrc/client/waypointsprites.qh | 3 + data/qcsrc/common/constants.qh | 12 +- data/qcsrc/server/cl_client.qc | 4 +- data/qcsrc/server/ctf.qc | 6 + data/qcsrc/server/keyhunt.qc | 45 ++--- data/qcsrc/server/keyhunt.qh | 4 +- data/qcsrc/server/mode_onslaught.qc | 8 + data/qcsrc/server/race.qc | 8 +- data/qcsrc/server/waypointsprites.qc | 274 +++++++++++++-------------- 21 files changed, 543 insertions(+), 194 deletions(-) create mode 100644 data/gfx/teamradar_icon_1.tga create mode 100644 data/gfx/teamradar_icon_2.tga create mode 100644 data/gfx/teamradar_ping.tga create mode 100644 data/qcsrc/client/waypointsprites.qc create mode 100644 data/qcsrc/client/waypointsprites.qh diff --git a/data/gfx/teamradar_icon_1.tga b/data/gfx/teamradar_icon_1.tga new file mode 100644 index 0000000000000000000000000000000000000000..88c70d02cdebf52111ae17ae53b7c9915bf397c9 GIT binary patch literal 588 zcmb7>OA5j;5J1yrp-2`zf)~(RR49moKg@Az5E0LlgY^XCyflIfKW$)O^71+}O^lhD z*Q!iq=F=b|W}?h#c#Wtb8ePs|E?E~;t6Pvb=frz2ZH!SY8H5vzNbE;u1cgN z%VJ25MbwoFhY;k3XUVeXF(}2Dsni|iy_74czz`3Piad@7M_TqcH;>?s*?UX|`GLO_ m`OxyupaXw*@b!&;m=TYzcaqj&cdSp%zS(XT=T)<=m*xqrp5AHz literal 0 HcmV?d00001 diff --git a/data/gfx/teamradar_icon_2.tga b/data/gfx/teamradar_icon_2.tga new file mode 100644 index 0000000000000000000000000000000000000000..88c70d02cdebf52111ae17ae53b7c9915bf397c9 GIT binary patch literal 588 zcmb7>OA5j;5J1yrp-2`zf)~(RR49moKg@Az5E0LlgY^XCyflIfKW$)O^71+}O^lhD z*Q!iq=F=b|W}?h#c#Wtb8ePs|E?E~;t6Pvb=frz2ZH!SY8H5vzNbE;u1cgN z%VJ25MbwoFhY;k3XUVeXF(}2Dsni|iy_74czz`3Piad@7M_TqcH;>?s*?UX|`GLO_ m`OxyupaXw*@b!&;m=TYzcaqj&cdSp%zS(XT=T)<=m*xqrp5AHz literal 0 HcmV?d00001 diff --git a/data/gfx/teamradar_ping.tga b/data/gfx/teamradar_ping.tga new file mode 100644 index 0000000000000000000000000000000000000000..0422de74f6638c42ed2dac835772d0a4052fc80c GIT binary patch literal 155710 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 J0Ivmx{|j_zFc1I$ literal 0 HcmV?d00001 diff --git a/data/qcsrc/client/Main.qc b/data/qcsrc/client/Main.qc index c565da3a9..94a58eaf4 100644 --- a/data/qcsrc/client/Main.qc +++ b/data/qcsrc/client/Main.qc @@ -55,6 +55,7 @@ string config_get(string key, string defaultvalue) } string forcefog; +void WaypointSprite_Init(); void CSQC_Init(void) { #ifdef USE_FTE @@ -114,6 +115,26 @@ void CSQC_Init(void) GetTeam(COLOR_SPECTATOR, true); // add specs first cvar_clientsettemp("_supports_weaponpriority", "1"); + + + + + cs_project_is_b0rked = TRUE; + R_SetView(VF_VIEWPORT, '0 0 0', '640 480 0'); + R_SetView(VF_FOV, '90 90 0'); + R_SetView(VF_ORIGIN, '0 0 0'); + R_SetView(VF_ANGLES, '0 0 0'); + R_SetView(VF_PERSPECTIVE, 1); + makevectors('0 0 0'); + vector v; + v = cs_project(v_forward); + if(v_x - 320 < +1) + if(v_x - 320 > -1) + if(v_y - 240 < +1) + if(v_y - 240 > -1) + cs_project_is_b0rked = FALSE; + + WaypointSprite_Init(); } // CSQC_Shutdown : Called every time the CSQC code is shutdown (changing maps, quitting, etc) @@ -511,8 +532,10 @@ void(float bIsNewEntity) CSQC_Ent_Update = Ent_Laser(); else if(self.enttype == ENT_CLIENT_NAGGER) Ent_Nagger(); + else if(self.enttype == ENT_CLIENT_WAYPOINT) + Ent_WaypointSprite(); else - error("unknown entity type in CSQC_Ent_Update\n"); + error("unknown entity type in CSQC_Ent_Update: ", ftos(self.enttype), "\n"); }; // Destructor, but does NOT deallocate the entity by calling remove(). Also @@ -558,6 +581,8 @@ void Ent_Remove() { Ent_PointParticles_Remove(); } + else if(self.enttype == ENT_CLIENT_WAYPOINT) + Ent_RemoveWaypointSprite(); self.enttype = 0; self.classname = ""; diff --git a/data/qcsrc/client/View.qc b/data/qcsrc/client/View.qc index 8da72277b..c146a788e 100644 --- a/data/qcsrc/client/View.qc +++ b/data/qcsrc/client/View.qc @@ -170,7 +170,7 @@ vector GetCurrentFov(float fov) float frustumx, frustumy, fovx, fovy; frustumy = tan(fov * 0.00872664625997164788) * 0.75 * current_viewzoom; - frustumx = frustumy * cvar("vid_width") / cvar("vid_height") / cvar("vid_pixelheight"); + frustumx = frustumy * vid_width / vid_height / cvar("vid_pixelheight"); fovx = atan2(frustumx, 1) / 0.00872664625997164788; fovy = atan2(frustumy, 1) / 0.00872664625997164788; @@ -189,6 +189,32 @@ void CSQC_UpdateView(void) entity e; float fov; + // Render the Scene + view_origin = pmove_org + '0 0 1' * getstati(STAT_VIEWHEIGHT); + view_angles = input_angles; + makevectors(view_angles); + view_forward = v_forward; + view_right = v_right; + view_up = v_up; + +#if 0 + if(cs_project_is_b0rked) + { +#endif + vid_width = cvar("vid_width"); + vid_height = cvar("vid_height"); +#if 0 + } + else + { + // THIS IS BROKEN if you had just shot (kicktime) + vector v; + v = cs_project(view_origin + 1024 * view_forward); + vid_width = floor(v_x * 2 + 0.5); + vid_height = floor(v_y * 2 + 0.5); + } +#endif + Fog_Force(); drawframetime = max(0.000001, time - drawtime); @@ -263,15 +289,6 @@ void CSQC_UpdateView(void) R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS); - // Render the Scene - - view_origin = pmove_org + '0 0 1' * getstati(STAT_VIEWHEIGHT); - view_angles = input_angles; - makevectors(view_angles); - view_forward = v_forward; - view_right = v_right; - view_up = v_up; - e = self; for(self = world; (self = nextent(self)); ) if(self.draw) @@ -310,6 +327,12 @@ void CSQC_UpdateView(void) } else if(teamplay) teamradar_view(); + + e = self; + for(self = world; (self = nextent(self)); ) + if(self.draw2d) + self.draw2d(); + self = e; } void Sbar_Draw(); diff --git a/data/qcsrc/client/csqc_builtins.qc b/data/qcsrc/client/csqc_builtins.qc index 3985c2a80..4b715e819 100644 --- a/data/qcsrc/client/csqc_builtins.qc +++ b/data/qcsrc/client/csqc_builtins.qc @@ -147,7 +147,7 @@ entity (.string fld, string match) findchain = #402; entity (.float fld, float match) findchainflags = #450; entity (.entity fld, entity match) findchainentity = #403; entity (.float fld, float match) findchainfloat = #403; -entity (entity start, .entity fld, float match) findflags = #449; +entity (entity start, .float fld, float match) findflags = #449; float (string pattern, float caseinsensitive, float quiet) search_begin = #444; void (float handle) search_end = #445; diff --git a/data/qcsrc/client/main.qh b/data/qcsrc/client/main.qh index 1f7fb5165..2fdb05e5f 100644 --- a/data/qcsrc/client/main.qh +++ b/data/qcsrc/client/main.qh @@ -111,6 +111,7 @@ entity teamslots[17]; // 17 teams (including "spectator team") .entity owner; .void(void) draw; +.void(void) draw2d; float drawframetime; vector view_origin, view_angles, view_forward, view_right, view_up; @@ -137,3 +138,6 @@ float vote_waiting; float vote_waiting_for_me; float current_zoomfraction; + +float cs_project_is_b0rked; +float vid_width, vid_height; diff --git a/data/qcsrc/client/miscfunctions.qc b/data/qcsrc/client/miscfunctions.qc index 24adfb663..d4ea14106 100644 --- a/data/qcsrc/client/miscfunctions.qc +++ b/data/qcsrc/client/miscfunctions.qc @@ -209,3 +209,14 @@ float PreviewExists(string name) } return false; } + +float PI = 3.14159265359; +float DEG2RAD = 0.01745329252; +vector rotate(vector v, float a) +{ + vector w; + // FTEQCC SUCKS AGAIN + w_x = v_x * cos(a) + v_y * sin(a); + w_y = -1 * v_x * sin(a) + v_y * cos(a); + return w; +} diff --git a/data/qcsrc/client/progs.src b/data/qcsrc/client/progs.src index e036daac6..5b80a7ad3 100644 --- a/data/qcsrc/client/progs.src +++ b/data/qcsrc/client/progs.src @@ -11,6 +11,7 @@ csqc_builtins.qc ../common/util.qh interpolate.qh teamradar.qh +waypointsprites.qh main.qh @@ -32,6 +33,7 @@ Main.qc View.qc interpolate.qc teamradar.qc +waypointsprites.qc ../common/util.qc ../common/gamecommand.qc diff --git a/data/qcsrc/client/teamradar.qc b/data/qcsrc/client/teamradar.qc index 74ddeaf0a..c426ea3c1 100644 --- a/data/qcsrc/client/teamradar.qc +++ b/data/qcsrc/client/teamradar.qc @@ -1,5 +1,3 @@ -float DEG2RAD = 0.01745329251994329576; - float teamradar_angle; // player yaw angle vector teamradar_origin3d_in_texcoord; // player origin vector teamradar_origin2d; // 2D origin @@ -21,9 +19,8 @@ vector teamradar_texcoord_to_2dcoord(vector in) vector out; in -= teamradar_origin3d_in_texcoord; - out_x = in_y * sin(teamradar_angle * DEG2RAD) + in_x * cos(teamradar_angle * DEG2RAD); - out_y = in_y * cos(teamradar_angle * DEG2RAD) - in_x * sin(teamradar_angle * DEG2RAD); - out_y = - out_y; // WHY?!? TODO find out whether the map images are mirrored too + out = rotate(in, teamradar_angle * DEG2RAD); + out_y = - out_y; // screen space is reversed out = out * teamradar_size; out += teamradar_origin2d; @@ -84,6 +81,23 @@ void(vector coord3d, vector pangles, vector rgb) draw_teamradar_player = R_EndPolygon(); }; +void draw_teamradar_icon(vector coord, float icon, float pingtime, vector rgb, float a) +{ + float dt; + vector v; + + coord = teamradar_texcoord_to_2dcoord(teamradar_3dcoord_to_texcoord(coord)); + drawpic(coord - '4 4 0', strcat("gfx/teamradar_icon_", ftos(icon)), '8 8 0', rgb, a, 0); + if(pingtime != 0) + { + dt = time - pingtime; + if(dt > 1) + return; + v = '2 2 0' * teamradar_size * dt; + drawpic(coord - 0.5 * v, "gfx/teamradar_ping", v, '1 1 1', 1 - dt, DRAWFLAG_ADDITIVE); + } +} + void() teamradar_view = { local float color; @@ -129,6 +143,8 @@ void() teamradar_view = draw_teamradar_player(pmove_org, input_angles, '1 1 1'); for(tm = gps_start; tm != world; tm = tm.chain) draw_teamradar_player(tm.origin, tm.angles, rgb); + for(tm = world; (tm = findflags(tm, teamradar_icon, 0xFFFFFF)); ) + draw_teamradar_icon(tm.origin, tm.teamradar_icon, tm.teamradar_time, tm.teamradar_color, tm.alpha); drawresetcliparea(); }; diff --git a/data/qcsrc/client/teamradar.qh b/data/qcsrc/client/teamradar.qh index 9e1ebf8a9..3be95025a 100644 --- a/data/qcsrc/client/teamradar.qh +++ b/data/qcsrc/client/teamradar.qh @@ -1 +1,6 @@ void teamradar_view(); + +// to make entities have dots on the team radar +.float teamradar_icon; +.float teamradar_time; +.vector teamradar_color; diff --git a/data/qcsrc/client/waypointsprites.qc b/data/qcsrc/client/waypointsprites.qc new file mode 100644 index 000000000..5ef43d9e0 --- /dev/null +++ b/data/qcsrc/client/waypointsprites.qc @@ -0,0 +1,253 @@ +vector project_3d_to_2d(vector vec) +{ + vec = cs_project(vec); + if(cs_project_is_b0rked) + { + vec_x += vid_width / 2; + vec_y += vid_height / 2; + } + vec_x *= vid_conwidth / vid_width; + vec_y *= vid_conheight / vid_height; + return vec; +} + +float waypointsprite_fadedistance; +float waypointsprite_normdistance; +float waypointsprite_minscale; +float waypointsprite_minalpha; +float waypointsprite_distancealphaexponent; +float waypointsprite_timealphaexponent; + +.float rule; +.string netname; // primary picture +.string netname2; // secondary picture +.string netname3; // tertiary picture +.float team; // team that gets netname2 +.float lifetime; +.float fadetime; +.float maxdistance; +.float hideflags; + +vector SPRITE_SIZE = '128 32 0'; +vector SPRITE_HOTSPOT = '64 32 0'; + +void drawrotpic(vector org, float rot, string pic, vector sz, vector hotspot, vector rgb, float a, float f) +{ + vector v1, v2, v3, v4; + + hotspot = -1 * hotspot; + + // hotspot-relative coordinates of the corners + v1 = hotspot; + v2 = hotspot + '1 0 0' * sz_x; + v3 = hotspot + '1 0 0' * sz_x + '0 1 0' * sz_y; + v4 = hotspot + '0 1 0' * sz_y; + + // rotate them, and make them absolute + v1 = rotate(v1, rot) + org; + v2 = rotate(v2, rot) + org; + v3 = rotate(v3, rot) + org; + v4 = rotate(v4, rot) + org; + + // draw them + R_BeginPolygon(pic, f); + R_PolygonVertex(v1, '0 0 0', rgb, a); + R_PolygonVertex(v2, '1 0 0', rgb, a); + R_PolygonVertex(v3, '1 1 0', rgb, a); + R_PolygonVertex(v4, '0 1 0', rgb, a); + R_EndPolygon(); +} + +void Draw_WaypointSprite() +{ + string spriteimage; + float t; + + if(self.lifetime) + self.alpha = pow(bound(0, (self.fadetime - time) / self.lifetime, 1), waypointsprite_timealphaexponent); + else + self.alpha = 1; + + if(self.hideflags & 2) + return; // radar only + + if(self.hideflags & 1) + if(cvar("cl_hidewaypoints")) + return; // fixed waypoint + + InterpolateOrigin_Do(); + + t = GetPlayerColor(player_localentnum - 1) + 1; + + spriteimage = ""; + + // choose the sprite + switch(self.rule) + { + case SPRITERULE_DEFAULT: + spriteimage = self.netname; + break; + case SPRITERULE_TEAMPLAY: + if(self.team == t) + spriteimage = self.netname2; + else + spriteimage = self.netname; + break; + default: + error("Invalid waypointsprite rule!"); + break; + } + + if(spriteimage == "") + return; + + float dist; + dist = vlen(self.origin - view_origin); + + float a; + a = self.alpha; + + if(self.maxdistance > waypointsprite_normdistance) + a *= pow(bound(0, (self.maxdistance - dist) / (self.maxdistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent); + else if(self.maxdistance > 0) + a *= pow(bound(0, (waypointsprite_fadedistance - dist) / (waypointsprite_fadedistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent) * (1 - waypointsprite_minalpha) + waypointsprite_minalpha; + + if(a <= 0) + return; + + // draw the sprite image + vector o; + float rot; + o = project_3d_to_2d(self.origin); + rot = 0; + + if(o_z < 0 || o_x < 0 || o_y < 0 || o_x > vid_conwidth || o_y > vid_conheight) + { + // scale it to be just in view + vector d; + float f1, f2; + d = o - '0.5 0 0' * vid_conwidth - '0 0.5 0' * vid_conheight; + + f1 = d_x / vid_conwidth; + f2 = d_y / vid_conheight; + + if(max(f1, -f1) > max(f2, -f2)) + { + if(f1 > 0) + { + // RIGHT edge + d = d * (0.5 / f1); + rot = 1; + } + else + { + // LEFT edge + d = d * (-0.5 / f1); + rot = 3; + } + } + else + { + if(f2 > 0) + { + // BOTTOM edge + d = d * (0.5 / f2); + rot = 0; + } + else + { + // TOP edge + d = d * (-0.5 / f2); + rot = 2; + } + } + + o = d + '0.5 0 0' * vid_conwidth + '0 0.5 0' * vid_conheight; + } + o_z = 0; + + drawrotpic(o, rot * 90 * DEG2RAD, strcat("models/sprites/", spriteimage), SPRITE_SIZE, SPRITE_HOTSPOT, '1 1 1', a, 0); +} + +void Ent_WaypointSprite() +{ + float sendflags, f; + sendflags = ReadByte(); + + self.draw2d = Draw_WaypointSprite; + + InterpolateOrigin_Undo(); + + // unfortunately, this needs to be exact (for the 3D display) + self.origin_x = ReadCoord(); + self.origin_y = ReadCoord(); + self.origin_z = ReadCoord(); + + if(sendflags & 1) + { + self.team = ReadByte(); + self.rule = ReadByte(); + } + + if(sendflags & 2) + { + if(self.netname) + strunzone(self.netname); + self.netname = strzone(ReadString()); + } + + if(sendflags & 4) + { + if(self.netname2) + strunzone(self.netname2); + self.netname2 = strzone(ReadString()); + } + + if(sendflags & 8) + { + if(self.netname3) + strunzone(self.netname3); + self.netname3 = strzone(ReadString()); + } + + if(sendflags & 16) + { + self.lifetime = ReadCoord(); + self.fadetime = ReadCoord(); + self.maxdistance = ReadShort(); + self.hideflags = ReadByte(); + } + + if(sendflags & 32) + { + f = ReadByte(); + self.teamradar_icon = (f & 0x7F); + if(f & 0x80) + self.teamradar_time = time; + self.teamradar_color_x = ReadByte() / 255.0; + self.teamradar_color_y = ReadByte() / 255.0; + self.teamradar_color_z = ReadByte() / 255.0; + } + + InterpolateOrigin_Note(); +} + +void Ent_RemoveWaypointSprite() +{ + if(self.netname) + strunzone(self.netname); + if(self.netname2) + strunzone(self.netname2); + if(self.netname3) + strunzone(self.netname3); +} + +void WaypointSprite_Init() +{ + waypointsprite_fadedistance = vlen(world.maxs - world.mins); + waypointsprite_normdistance = cvar("g_waypointsprite_normdistance"); + waypointsprite_minscale = cvar("g_waypointsprite_minscale"); + waypointsprite_minalpha = cvar("g_waypointsprite_minalpha"); + waypointsprite_distancealphaexponent = cvar("g_waypointsprite_distancealphaexponent"); + waypointsprite_timealphaexponent = cvar("g_waypointsprite_timealphaexponent"); +} diff --git a/data/qcsrc/client/waypointsprites.qh b/data/qcsrc/client/waypointsprites.qh new file mode 100644 index 000000000..948950833 --- /dev/null +++ b/data/qcsrc/client/waypointsprites.qh @@ -0,0 +1,3 @@ +// they are drawn using a .draw function +void Ent_WaypointSprite(); +void Ent_RemoveWaypointSprite(); diff --git a/data/qcsrc/common/constants.qh b/data/qcsrc/common/constants.qh index 97340b53e..cf77d0241 100644 --- a/data/qcsrc/common/constants.qh +++ b/data/qcsrc/common/constants.qh @@ -19,7 +19,7 @@ // Revision 18: warmup // Revision 19: fog // Revision 20: naggers -// Revision 21: entcs for players optimized (position data down from 12 to 7 bytes) +// Revision 21: entcs for players optimized (position data down from 12 to 7 bytes); waypointsprites in csqc for team radar #define CSQC_REVISION 21 // probably put these in common/ @@ -50,8 +50,14 @@ const float ENT_CLIENT_TEAMSCORES = 5; const float ENT_CLIENT_POINTPARTICLES = 6; const float ENT_CLIENT_RAINSNOW = 7; const float ENT_CLIENT_LASER = 8; -const float ENT_CLIENT_NAGGER = 9; // [flags] [votecalledvote] -const float ENT_CLIENT_WAYPOINT = 10; +const float ENT_CLIENT_NAGGER = 9; // flags [votecalledvote] +const float ENT_CLIENT_WAYPOINT = 10; // flags origin [team displayrule] [spritename] [spritename2] [spritename3] [lifetime maxdistance hideable] + + const float SPRITERULE_DEFAULT = 0; + const float SPRITERULE_TEAMPLAY = 1; + + const float RADARICON_FLAG = 1; + const float RADARICON_FLAGCARRIER = 2; /////////////////////////// // key constants diff --git a/data/qcsrc/server/cl_client.qc b/data/qcsrc/server/cl_client.qc index b378b1d47..41f50497f 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -1305,8 +1305,6 @@ void ClientDisconnect (void) self.killindicator = world; } - WaypointSprite_PlayerGone(); - DropAllRunes(self); kh_Key_DropAll(self, TRUE); @@ -1315,6 +1313,8 @@ void ClientDisconnect (void) if(self.flagcarried) DropFlag(self.flagcarried, world, world); + WaypointSprite_PlayerGone(); + save = self.flags; self.flags = self.flags - (self.flags & FL_CLIENT); bot_relinkplayerlist(); diff --git a/data/qcsrc/server/ctf.qc b/data/qcsrc/server/ctf.qc index 8515918c4..45315adc0 100644 --- a/data/qcsrc/server/ctf.qc +++ b/data/qcsrc/server/ctf.qc @@ -136,6 +136,7 @@ void DropFlag(entity e, entity penalty_receiver, entity attacker) PlayerScore_Add(p, SP_CTF_DROPS, +1); e.playerid = attacker.playerid; + WaypointSprite_Ping(p.waypointsprite_attachedforcarrier); WaypointSprite_DetachCarrier(p); LogCTF("dropped", p.team, p); @@ -331,6 +332,8 @@ void FlagTouch() setorigin(self, FLAG_CARRY_POS); setattachment(self, other, ""); WaypointSprite_AttachCarrier("flagcarrier", other); + WaypointSprite_UpdateTeamRadar(other.waypointsprite_attachedforcarrier, RADARICON_FLAGCARRIER, '1 1 0'); + WaypointSprite_Ping(self.sprite); return; } @@ -405,6 +408,7 @@ void FlagTouch() setorigin(self, FLAG_CARRY_POS); setattachment(self, other, ""); WaypointSprite_AttachCarrier("flagcarrier", other); + WaypointSprite_UpdateTeamRadar(other.waypointsprite_attachedforcarrier, RADARICON_FLAGCARRIER, '1 1 0'); } } }; @@ -552,6 +556,7 @@ void spawnfunc_item_flag_team1() waypoint_spawnforitem(self); WaypointSprite_SpawnFixed("redbase", self.origin + '0 0 37', self, sprite); + WaypointSprite_UpdateTeamRadar(self.sprite, RADARICON_FLAG, '1 0 0'); }; /*QUAKED spawnfunc_item_flag_team2 (0 0.5 0.8) (-48 -48 -24) (48 48 64) @@ -634,6 +639,7 @@ void spawnfunc_item_flag_team2() waypoint_spawnforitem(self); WaypointSprite_SpawnFixed("bluebase", self.origin + '0 0 37', self, sprite); + WaypointSprite_UpdateTeamRadar(self.sprite, RADARICON_FLAG, '0 0 1'); }; diff --git a/data/qcsrc/server/keyhunt.qc b/data/qcsrc/server/keyhunt.qc index 71053691b..b8320ac01 100644 --- a/data/qcsrc/server/keyhunt.qc +++ b/data/qcsrc/server/keyhunt.qc @@ -308,8 +308,16 @@ void kh_Key_AssignTo(entity key, entity player) // runs every time a key is pic { // player is now a key carrier WaypointSprite_AttachCarrier("", player); - player.waypointsprite_attachedforcarrier.waypointsprite_for_player = kh_KeyCarrier_waypointsprite_for_player; - player.waypointsprite_attachedforcarrier.team = player.team; + player.waypointsprite_attachedforcarrier.waypointsprite_visible_for_player = kh_KeyCarrier_waypointsprite_visible_for_player; + WaypointSprite_UpdateRule(player.waypointsprite_attachedforcarrier, player.team, SPRITERULE_TEAMPLAY); + if(player.team == COLOR_TEAM1) + WaypointSprite_UpdateSprites(player.waypointsprite_attachedforcarrier, "keycarrier-red", "keycarrier-friend", ""); + else if(player.team == COLOR_TEAM2) + WaypointSprite_UpdateSprites(player.waypointsprite_attachedforcarrier, "keycarrier-blue", "keycarrier-friend", ""); + else if(player.team == COLOR_TEAM3) + WaypointSprite_UpdateSprites(player.waypointsprite_attachedforcarrier, "keycarrier-yellow", "keycarrier-friend", ""); + else if(player.team == COLOR_TEAM4) + WaypointSprite_UpdateSprites(player.waypointsprite_attachedforcarrier, "keycarrier-pink", "keycarrier-friend", ""); } } @@ -378,7 +386,7 @@ void kh_Key_Spawn(entity initial_owner, float angle) // runs every time a new f centerprint(initial_owner, strcat("You are starting with the ", key.netname, "\n")); // message to player at start of round WaypointSprite_Spawn("", 0, 0, key, '0 0 1' * KH_KEY_WP_ZSHIFT, world, key.team, key, waypointsprite_attachedforcarrier, FALSE); - key.waypointsprite_attachedforcarrier.waypointsprite_for_player = kh_Key_waypointsprite_for_player; + key.waypointsprite_attachedforcarrier.waypointsprite_visible_for_player = kh_Key_waypointsprite_visible_for_player; kh_Key_AssignTo(key, initial_owner); } @@ -450,6 +458,8 @@ void kh_Key_Collect(entity key, entity player) //a player picks up a dropped ke { kh_interferemsg_time = time + 0.2; kh_interferemsg_team = player.team; + + // audit all key carrier sprites, update them to RUN HERE } } @@ -853,37 +863,24 @@ void kh_EnableTrackingDevice() // runs after each round kh_tracking_enabled = TRUE; } -float kh_Key_waypointsprite_for_player(entity e) // ?? +float kh_Key_waypointsprite_visible_for_player(entity e) // ?? { if(!kh_tracking_enabled) - return 0; + return FALSE; if(!self.owner) - return kh_sprite_dropped; + return TRUE; if(!self.owner.owner) - return kh_sprite_dropped; - return 0; // draw only when key is not owned + return TRUE; + return FALSE; // draw only when key is not owned } -float kh_KeyCarrier_waypointsprite_for_player(entity e) // runs all the time +float kh_KeyCarrier_waypointsprite_visible_for_player(entity e) // runs all the time { if(e.classname != "player" || self.team != e.team) if(!kh_tracking_enabled) - return 0; - - // e is spectator? That's no team mate... - if(e.classname != "player") - return kh_GetCarrierSprite(self.team, -1); - - // e is no key carrier: simple case... - if(!e.kh_next) - return kh_GetCarrierSprite(self.team, e.team); - - // e is a key carrier: if any key is dropped or owned by another team, show - // the carrier sprite; otherwise show run here - if(kh_Key_AllOwnedByWhichTeam() == e.team) - return kh_sprite_finish; + return FALSE; - return kh_GetCarrierSprite(self.team, e.team); + return TRUE; } float kh_HandleFrags(entity attacker, entity targ, float f) // adds to the player score diff --git a/data/qcsrc/server/keyhunt.qh b/data/qcsrc/server/keyhunt.qh index 22e35fcc1..0458a5bb0 100644 --- a/data/qcsrc/server/keyhunt.qh +++ b/data/qcsrc/server/keyhunt.qh @@ -19,8 +19,8 @@ void kh_StartRound(); void kh_EnableTrackingDevice(); void kh_init(); void kh_finalize(); -float kh_KeyCarrier_waypointsprite_for_player(entity e); -float kh_Key_waypointsprite_for_player(entity e); +float kh_KeyCarrier_waypointsprite_visible_for_player(entity e); +float kh_Key_waypointsprite_visible_for_player(entity e); void kh_setstatus(); float kh_HandleFrags(entity attacker, entity targ, float f); float kh_Key_AllOwnedByWhichTeam(); diff --git a/data/qcsrc/server/mode_onslaught.qc b/data/qcsrc/server/mode_onslaught.qc index 9578d897c..df5dede38 100644 --- a/data/qcsrc/server/mode_onslaught.qc +++ b/data/qcsrc/server/mode_onslaught.qc @@ -422,6 +422,7 @@ void onslaught_generator_delayed() self.nextthink = time; }; +#ifdef YOU_HAVE_FIXED_ONSLAUGHT_WAYPOINTS float onslaught_generator_waypointsprite_for_player(entity e) { if(e.classname == "player") @@ -484,6 +485,7 @@ float onslaught_controlpoint_waypointsprite_for_player(entity e) } return 0; } +#endif /*QUAKED spawnfunc_onslaught_generator (0 .5 .8) (-32 -32 -24) (32 32 64) Base generator. @@ -502,6 +504,7 @@ void spawnfunc_onslaught_generator() return; } +#ifdef YOU_HAVE_FIXED_ONSLAUGHT_WAYPOINTS if(!ons_sprite_cp_blue) { precache_model("models/sprites/ons-cp-blue.sp2"); @@ -538,6 +541,7 @@ void spawnfunc_onslaught_generator() setmodel(self, "models/sprites/ons-gen-shielded.sp2"); ons_sprite_gen_shielded = self.modelindex; } +#endif local entity e; precache_model("models/onslaught/generator.md3"); @@ -575,8 +579,10 @@ void spawnfunc_onslaught_generator() self.think = onslaught_generator_delayed; self.nextthink = time + 0.2; +#ifdef YOU_HAVE_FIXED_ONSLAUGHT_WAYPOINTS WaypointSprite_SpawnFixed(string_null, e.origin + '0 0 1' * e.maxs_z, self, sprite); self.sprite.waypointsprite_for_player = onslaught_generator_waypointsprite_for_player; +#endif }; void onslaught_generator_reset() @@ -774,8 +780,10 @@ void spawnfunc_onslaught_controlpoint() waypoint_spawnforitem(self); +#ifdef YOU_HAVE_FIXED_ONSLAUGHT_WAYPOINTS WaypointSprite_SpawnFixed(string_null, e.origin + '0 0 1' * e.maxs_z, self, sprite); self.sprite.waypointsprite_for_player = onslaught_controlpoint_waypointsprite_for_player; +#endif }; void onslaught_controlpoint_reset() diff --git a/data/qcsrc/server/race.qc b/data/qcsrc/server/race.qc index 03781195d..05f226249 100644 --- a/data/qcsrc/server/race.qc +++ b/data/qcsrc/server/race.qc @@ -396,12 +396,12 @@ void checkpoint_use() checkpoint_passed(); } -float race_waypointsprite_for_player(entity e) +float race_waypointsprite_visible_for_player(entity e) { if(e.race_checkpoint == -1) - return self.modelindex; + return TRUE; else if(e.race_checkpoint == self.owner.race_checkpoint) - return self.modelindex; + return TRUE; else return FALSE; } @@ -444,7 +444,7 @@ void spawnfunc_trigger_race_checkpoint() precache_model("models/sprites/race-finish.sp2"); WaypointSprite_SpawnFixed("race-finish", o, self, sprite); } - self.sprite.waypointsprite_for_player = race_waypointsprite_for_player; + self.sprite.waypointsprite_visible_for_player = race_waypointsprite_visible_for_player; } void race_AbandonRaceCheck(entity p) diff --git a/data/qcsrc/server/waypointsprites.qc b/data/qcsrc/server/waypointsprites.qc index 8170ad8a5..7e40cb39e 100644 --- a/data/qcsrc/server/waypointsprites.qc +++ b/data/qcsrc/server/waypointsprites.qc @@ -1,64 +1,86 @@ -float waypointsprite_normdistance; -float waypointsprite_minscale; -float waypointsprite_fadedistance; -float waypointsprite_minalpha; -float waypointsprite_distancealphaexponent; -float waypointsprite_timealphaexponent; -float waypointsprite_deployed_lifetime; -float waypointsprite_deadlifetime; -float waypointsprite_limitedrange; - ..entity owned_by_field; -.float(entity) waypointsprite_for_player; // returns a model index or 0 for hide -float waypointsprite_for_player_default(entity e) -{ - // personal waypoints - if(self.enemy) - if(self.enemy != other) - return FALSE; +.float rule; +.string model2; +.string model3; - // team waypoints - if(self.team) +.float(entity) waypointsprite_visible_for_player; + +void WaypointSprite_UpdateSprites(entity e, string m1, string m2, string m3) +{ + if(m1 != e.model) { - if(self.team != other.team) - return FALSE; - if(other.classname != "player") - return FALSE; + e.model = m1; + e.SendFlags |= 2; + } + if(m2 != e.model2) + { + e.model2 = m2; + e.SendFlags |= 4; } + if(m3 != e.model3) + { + e.model3 = m3; + e.SendFlags |= 8; + } +} - // fixed waypoints - if(self.currentammo) // hidable? - if(other.cvar_cl_hidewaypoints) // wants to hide; - return FALSE; +void WaypointSprite_UpdateOrigin(entity e, vector o) +{ + e.origin = o; + e.SendFlags |= 128; +} + +void WaypointSprite_UpdateRule(entity e, float t, float r) +{ + e.rule = r; + e.team = t; + e.SendFlags |= 1; +} + +void WaypointSprite_UpdateTeamRadar(entity e, float icon, vector col) +{ + e.cnt = (icon & 0x7F); + e.colormod = col; + e.SendFlags |= 32; +} + +void WaypointSprite_Ping(entity e) +{ + e.cnt |= 0x80; + e.SendFlags |= 32; +} - // otherwise, accept the model - return self.modelindex; +void WaypointSprite_FadeOutIn(entity e, float t) +{ + if(!e.health) + { + e.health = t; + e.teleport_time = time + t; + } + else if(t < (e.teleport_time - time)) + { + // accelerate the waypoint's dying + // ensure: + // (e.teleport_time - time) / wp.health stays + // e.teleport_time = time + fadetime + float current_fadetime; + current_fadetime = e.teleport_time - time; + e.teleport_time = time + t; + e.health = e.health * t / current_fadetime; + } + + e.SendFlags |= 16; } +float waypointsprite_limitedrange, waypointsprite_deployed_lifetime, waypointsprite_deadlifetime; void WaypointSprite_Init() { - waypointsprite_fadedistance = vlen(world.maxs - world.mins); - waypointsprite_normdistance = cvar("g_waypointsprite_normdistance"); - waypointsprite_minscale = cvar("g_waypointsprite_minscale"); - waypointsprite_minalpha = cvar("g_waypointsprite_minalpha"); - waypointsprite_distancealphaexponent = cvar("g_waypointsprite_distancealphaexponent"); - waypointsprite_timealphaexponent = cvar("g_waypointsprite_timealphaexponent"); + waypointsprite_limitedrange = cvar("g_waypointsprite_limitedrange"); waypointsprite_deployed_lifetime = cvar("g_waypointsprite_deployed_lifetime"); waypointsprite_deadlifetime = cvar("g_waypointsprite_deadlifetime"); - waypointsprite_limitedrange = cvar("g_waypointsprite_limitedrange"); - - precache_model("models/sprites/bluebase.sp2"); - precache_model("models/sprites/flagcarrier.sp2"); - precache_model("models/sprites/here.sp2"); - precache_model("models/sprites/helpme.sp2"); - precache_model("models/sprites/redbase.sp2"); - precache_model("models/sprites/waypoint.sp2"); - precache_model("models/sprites/danger.sp2"); } - void WaypointSprite_InitClient(entity e) { - stuffcmd(e, "\nalias \"g_waypointsprite_personal\" \"impulse 30\"\n alias \"g_waypointsprite_personal_p\" \"impulse 31\"\n alias \"g_waypointsprite_personal_d\" \"impulse 32\"\n alias \"g_waypointsprite_team_helpme\" \"impulse 33\"\n alias \"g_waypointsprite_team_here\" \"impulse 34\"\n alias \"g_waypointsprite_team_here_p\" \"impulse 35\"\n alias \"g_waypointsprite_team_here_d\" \"impulse 36\"\n alias \"g_waypointsprite_team_danger\" \"impulse 37\"\n alias \"g_waypointsprite_team_danger_p\" \"impulse 38\"\n alias \"g_waypointsprite_team_danger_d\" \"impulse 39\"\n alias \"g_waypointsprite_clear_personal\" \"impulse 47\"\n alias \"g_waypointsprite_clear\" \"impulse 48\"\n alias \"g_waypointsprite_toggle\" \"impulse 49\"\n"); } void WaypointSprite_Kill(entity wp) @@ -77,34 +99,11 @@ void WaypointSprite_Disown(entity wp, float fadetime) if(wp.owner) { if(wp.exteriormodeltoclient == wp.owner) - { - setattachment(wp, world, ""); -#ifdef ATTACHMENT_WORKS_WITH_EF_NODEPTHTEST - setorigin(wp, wp.origin + wp.exteriormodeltoclient.origin); -#else - setorigin(wp, wp.view_ofs + wp.exteriormodeltoclient.origin); -#endif wp.exteriormodeltoclient = world; - } wp.owner.(wp.owned_by_field) = world; wp.owner = world; - if(!wp.health) - { - wp.health = fadetime; - wp.teleport_time = time + fadetime; - } - else if(fadetime < (wp.teleport_time - time)) - { - // accelerate the spawnfunc_waypoint's dying - // ensure: - // (wp.teleport_time - time) / wp.health stays - // wp.teleport_time = time + fadetime - float current_fadetime; - current_fadetime = wp.teleport_time - time; - wp.teleport_time = time + fadetime; - wp.health = wp.health * fadetime / current_fadetime; - } + WaypointSprite_FadeOutIn(wp, fadetime); } } @@ -115,91 +114,91 @@ void WaypointSprite_Think() doremove = FALSE; if(self.health) + { if(time >= self.teleport_time) doremove = TRUE; + } + + if(self.exteriormodeltoclient) + WaypointSprite_UpdateOrigin(self, self.exteriormodeltoclient.origin + self.view_ofs); if(doremove) WaypointSprite_Kill(self); else - self.nextthink = time; + self.nextthink = time; // WHY?!? } -float WaypointSprite_CustomizeEntityForClient() +float WaypointSprite_visible_for_player(entity e) { - vector realorigin, porigin; - float distancealpha, timealpha; - float distance; - float newmodel; + // personal waypoints + if(self.enemy) + if(self.enemy != other) + return FALSE; - if(self.health) + // team waypoints + if(self.team && self.rule == SPRITERULE_DEFAULT) { - timealpha = bound(0, (self.teleport_time - time) / self.health, 1); - if(timealpha == 0) + if(self.team != other.team) + return FALSE; + if(other.classname != "player") return FALSE; - timealpha = pow(timealpha, waypointsprite_timealphaexponent); } - else - timealpha = 1; - // customize WP - newmodel = self.waypointsprite_for_player(other); - if(newmodel == 0) - return FALSE; - self.modelindex = newmodel; + return TRUE; +} + +float WaypointSprite_Customize() +{ + // this is not in SendEntity because it shall run every frame, not just every update - porigin = other.origin + other.view_ofs_z * '0 0 1'; + return self.waypointsprite_visible_for_player(other); +} -#ifdef ATTACHMENT_WORKS_WITH_EF_NODEPTHTEST - realorigin = self.exteriormodeltoclient.origin + self.origin; -#else - if(self.exteriormodeltoclient) +float WaypointSprite_SendEntity(entity to, float sendflags) +{ + WriteByte(MSG_ENTITY, ENT_CLIENT_WAYPOINT); + WriteByte(MSG_ENTITY, sendflags); + WriteCoord(MSG_ENTITY, self.origin_x); + WriteCoord(MSG_ENTITY, self.origin_y); + WriteCoord(MSG_ENTITY, self.origin_z); + + if(sendflags & 1) { - if(self.exteriormodeltoclient == other) - { - setattachment(self, other, ""); - setorigin(self, self.view_ofs); - realorigin = other.origin + self.origin; - } - else - { - setattachment(self, world, ""); - setorigin(self, self.exteriormodeltoclient.origin + self.view_ofs); - realorigin = self.origin; - } + WriteByte(MSG_ENTITY, self.team); + WriteByte(MSG_ENTITY, self.rule); } - else - realorigin = self.origin; -#endif - distance = vlen(realorigin - porigin); + if(sendflags & 2) + WriteString(MSG_ENTITY, self.model); - if(self.max_health) - if(distance >= self.max_health) - return FALSE; + if(sendflags & 4) + WriteString(MSG_ENTITY, self.model2); - self.scale = max(1, distance / waypointsprite_normdistance) * waypointsprite_minscale; + if(sendflags & 8) + WriteString(MSG_ENTITY, self.model3); - if(self.max_health > waypointsprite_normdistance) + if(sendflags & 16) { - // alpha 1 at normdistance, alpha 0 at maxdistance - distancealpha = bound(0, (self.max_health - distance) / (self.max_health - waypointsprite_normdistance), 1); - distancealpha = pow(distancealpha, waypointsprite_distancealphaexponent); + WriteCoord(MSG_ENTITY, self.health); + WriteCoord(MSG_ENTITY, self.teleport_time); + WriteShort(MSG_ENTITY, self.max_health); // maxdist + float f; + f = 0; + if(self.currentammo) + f |= 1; // hideable + if(self.exteriormodeltoclient == to) + f |= 2; // my own + WriteByte(MSG_ENTITY, f); } - else if(self.max_health) - { - // alpha 1 if visible - distancealpha = 1; - } - else + + if(sendflags & 32) { - // alpha 1 at normdistance, alpha minalpha at fadedistance - distancealpha = bound(0, (waypointsprite_fadedistance - distance) / (waypointsprite_fadedistance - waypointsprite_normdistance), 1); - distancealpha = pow(distancealpha, waypointsprite_distancealphaexponent); - distancealpha = distancealpha * (1 - waypointsprite_minalpha) + waypointsprite_minalpha; + WriteByte(MSG_ENTITY, self.cnt); // icon on radar + WriteByte(MSG_ENTITY, self.colormod_x * 255.0); + WriteByte(MSG_ENTITY, self.colormod_y * 255.0); + WriteByte(MSG_ENTITY, self.colormod_z * 255.0); } - self.alpha = timealpha * distancealpha; - return TRUE; } @@ -219,14 +218,7 @@ entity WaypointSprite_Spawn( wp.health = lifetime; wp.exteriormodeltoclient = ref; if(ref) - { -#ifdef ATTACHMENT_WORKS_WITH_EF_NODEPTHTEST - setattachment(wp, ref, ""); - setorigin(wp, ofs); -#else wp.view_ofs = ofs; -#endif - } else setorigin(wp, ofs); wp.enemy = showto; @@ -241,16 +233,14 @@ entity WaypointSprite_Spawn( wp.owned_by_field = ownfield; } wp.max_health = maxdistance; - wp.customizeentityforclient = WaypointSprite_CustomizeEntityForClient; wp.think = WaypointSprite_Think; wp.nextthink = time; wp.effects = EF_NODEPTHTEST | EF_LOWPRECISION; - if(spr != "") - setmodel(wp, strcat("models/sprites/", spr, ".sp2")); // precision set above - else - wp.model = "waypoint"; - setsize(wp, '0 0 0', '0 0 0'); - wp.waypointsprite_for_player = waypointsprite_for_player_default; + wp.model = spr; + wp.modelindex = 1; + wp.SendEntity = WaypointSprite_SendEntity; + wp.customizeentityforclient = WaypointSprite_Customize; + wp.waypointsprite_visible_for_player = WaypointSprite_visible_for_player; return wp; } -- 2.39.2