r2306 - in branches/nexuiz-2.0/data: . menu/data menu/options models qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Fri Apr 13 19:56:17 EDT 2007
Author: div0
Date: 2007-04-13 19:56:17 -0400 (Fri, 13 Apr 2007)
New Revision: 2306
Added:
branches/nexuiz-2.0/data/models/sprites/
branches/nexuiz-2.0/data/qcsrc/server/waypointsprites.qc
Modified:
branches/nexuiz-2.0/data/default.cfg
branches/nexuiz-2.0/data/menu/data/player.menu
branches/nexuiz-2.0/data/menu/options/player.menu
branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc
branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc
branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc
branches/nexuiz-2.0/data/qcsrc/server/ctf.qc
branches/nexuiz-2.0/data/qcsrc/server/defs.qh
branches/nexuiz-2.0/data/qcsrc/server/g_world.qc
branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
branches/nexuiz-2.0/data/qcsrc/server/progs.src
Log:
waypoint sprites system
zoom
menu fixes
quit_and_redirect
Modified: branches/nexuiz-2.0/data/default.cfg
===================================================================
--- branches/nexuiz-2.0/data/default.cfg 2007-04-13 22:50:26 UTC (rev 2305)
+++ branches/nexuiz-2.0/data/default.cfg 2007-04-13 23:56:17 UTC (rev 2306)
@@ -1,3 +1,7 @@
+// changes a cvar and reports it to the server (for the menu to notify the
+// server about changes)
+alias setreport "set $1 $2 ; sendcvar $1"
+
// Nexuiz version (formatted for humans)
set g_nexuizversion 2.2.3
@@ -60,6 +64,8 @@
_cl_playerskin 0
crosshair 5
fov 90
+set cl_zoomfactor 5 // how much +zoom will zoom (1-16)
+set cl_zoomspeed 3.5 // how fast it will zoom (0.5-16), negative values mean instant zoom
freelook 1
sensitivity 6
seta scmenu_mouse_speed 1
@@ -804,3 +810,28 @@
set g_chat_flood_burst_team 0 // /
set g_chat_flood_notify_flooder 1 // when 0, the flooder still can see his own message
set g_chat_teamcolors 0 // colorize nicknames in team color for chat
+
+set g_waypointsprite_normdistance 512
+set g_waypointsprite_minscale 1
+set g_waypointsprite_minalpha 0.2
+set g_waypointsprite_distancealphaexponent 2
+set g_waypointsprite_timealphaexponent 1
+set g_waypointsprite_deployed_lifetime 10
+set g_waypointsprite_deadlifetime 2
+set g_waypointsprite_limitedrange 5120
+set g_waypointsprite_stuffbinds 0
+alias "g_waypointsprite_personal" "impulse 30"
+alias "g_waypointsprite_personal_p" "impulse 31"
+alias "g_waypointsprite_personal_d" "impulse 32"
+alias "g_waypointsprite_team_helpme" "impulse 33"
+alias "g_waypointsprite_team_here" "impulse 34"
+alias "g_waypointsprite_team_here_p" "impulse 35"
+alias "g_waypointsprite_team_here_d" "impulse 36"
+alias "g_waypointsprite_team_danger" "impulse 37"
+alias "g_waypointsprite_team_danger_p" "impulse 38"
+alias "g_waypointsprite_team_danger_d" "impulse 39"
+alias "g_waypointsprite_clear_personal" "impulse 47"
+alias "g_waypointsprite_clear" "impulse 48"
+alias "g_waypointsprite_toggle" "impulse 49"
+// key for that?
+seta cl_hidewaypoints 0
Modified: branches/nexuiz-2.0/data/menu/data/player.menu
===================================================================
--- branches/nexuiz-2.0/data/menu/data/player.menu 2007-04-13 22:50:26 UTC (rev 2305)
+++ branches/nexuiz-2.0/data/menu/data/player.menu 2007-04-13 23:56:17 UTC (rev 2306)
@@ -64,6 +64,20 @@
link "##up"
}
}
+ Item Data_ServerCvar ZoomFactor
+ {
+ cvarName "cl_zoomfactor"
+ syncCmd "setreport cl_zoomfactor"
+ defValue "5"
+
+ Item DataLink_Value Value
+ {
+ minValue 1.5
+ maxValue 8.0
+ stepValue 0.5
+ link "##up"
+ }
+ }
Item Data_Cvar ViewSize
{
cvarName "viewsize"
@@ -77,23 +91,26 @@
link "##up"
}
}
- Item Data_Cvar WeaponAutoswitch
+ Item Data_ServerCvar WeaponAutoswitch
{
cvarName "cl_autoswitch"
+ syncCmd "setreport cl_autoswitch"
defValue 1
[DataLink_OnOffSwitch]
}
- Item Data_Cvar NoGibs
+ Item Data_ServerCvar NoGibs
{
cvarName "cl_nogibs"
+ syncCmd "setreport cl_nogibs"
defValue "0"
[DataLink_OnOffSwitch]
}
- Item Data_Cvar PlayerShowNames
+ Item Data_ServerCvar PlayerShowNames
{
cvarName "cl_shownames"
+ syncCmd "setreport cl_shownames"
defValue "1"
Item DataLink_TextSwitch Switch
@@ -103,6 +120,19 @@
link "##up"
}
}
+ Item Data_ServerCvar ShowWaypoints
+ {
+ cvarName "cl_hidewaypoints"
+ syncCmd "setreport cl_hidewaypoints"
+ defValue "0"
+
+ Item DataLink_TextSwitch Switch
+ {
+ valueList "'0' '1'"
+ descList "'Display' 'Hide'"
+ link "##up"
+ }
+ }
Item DataContainer Crosshair
{
Item Data_Cvar Type
Modified: branches/nexuiz-2.0/data/menu/options/player.menu
===================================================================
--- branches/nexuiz-2.0/data/menu/options/player.menu 2007-04-13 22:50:26 UTC (rev 2305)
+++ branches/nexuiz-2.0/data/menu/options/player.menu 2007-04-13 23:56:17 UTC (rev 2306)
@@ -142,6 +142,11 @@
text "Field of View"
target "::Data::Player::FOV::Value"
}
+ Derive Nex_Option_Slider ZoomFactor
+ {
+ text "Zoom factor"
+ target "::Data::Player::ZoomFactor::Value"
+ }
Derive Nex_Option_Slider ViewSize
{
text "View Size"
@@ -192,6 +197,11 @@
text "Show player names"
target "::Data::Player::PlayerShowNames::Switch"
}
+ Derive Nex_Option_Switch ShowWaypoints
+ {
+ text "Map waypoints"
+ target "::Data::Player::ShowWaypoints::Switch"
+ }
Derive Nex_Option_Slider MapDLSpeed
{
text "Download Speed"
Copied: branches/nexuiz-2.0/data/models/sprites (from rev 2303, trunk/data/models/sprites)
Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc 2007-04-13 22:50:26 UTC (rev 2305)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc 2007-04-13 23:56:17 UTC (rev 2306)
@@ -287,6 +287,8 @@
WriteEntity(MSG_ONE, self);
}
+ WaypointSprite_PlayerDead();
+
DropAllRunes(self);
if(self.flagcarried)
@@ -457,6 +459,7 @@
self.oldvelocity = self.velocity;
self.viewzoom = 0.6;
+ self.has_zoomed = 0;
self.customizeentityforclient = Client_customizeentityforclient;
@@ -745,12 +748,14 @@
FixClientCvars(self);
+ // waypoint sprites
+ WaypointSprite_InitClient(self);
+
// Wazat's grappling hook
SetGrappleHookBindings();
- // get autoswitch state from player
- stuffcmd(self, "alias autoswitch \"set cl_autoswitch $1; cmd autoswitch $1\"\n");
- stuffcmd(self, "cmd autoswitch $cl_autoswitch\n");
+ // get autoswitch state from player when he toggles it
+ stuffcmd(self, "alias autoswitch \"set cl_autoswitch $1 ; cmd autoswitch $1\"\n");
// get version info from player
stuffcmd(self, "cmd clientversion $gameversion\n");
@@ -823,6 +828,8 @@
self.teambubbleentity = world;
}
+ WaypointSprite_PlayerGone();
+
DropAllRunes(self);
if(self.flagcarried)
@@ -1443,21 +1450,60 @@
W_WeaponFrame();
- if (self.button4 || (self.weapon == WEP_NEX && self.button3))
- {
- if (cvar("g_minstagib") && self.button3)
- {
+ if (cvar("g_minstagib"))
+ if(self.button3)
if (self.jump_interval <= (time + 0.1))
{
self.jump_interval = time + 1;
W_Laser_Attack();
}
+
+ {
+ float zoomfactor, zoomspeed, zoomdir;
+ zoomfactor = self.cvar_cl_zoomfactor;
+ if(zoomfactor < 1 || zoomfactor > 16)
+ zoomfactor = 2.5;
+ zoomspeed = self.cvar_cl_zoomspeed;
+ if(zoomspeed >= 0) // < 0 is instant zoom
+ if(zoomspeed < 0.5 || zoomspeed > 16)
+ zoomspeed = 3.5;
+
+ zoomdir = self.button4;
+ if(self.button3)
+ if(self.weapon == WEP_NEX)
+ if(!cvar("g_minstagib"))
+ zoomdir = 1;
+
+ if(zoomdir)
+ self.has_zoomed = 1;
+
+ if(self.has_zoomed)
+ {
+ if(zoomspeed <= 0) // instant zoom
+ {
+ if(zoomdir)
+ self.viewzoom = 1 / zoomfactor;
+ else
+ self.viewzoom = 1;
+ }
+ else
+ {
+ // geometric zoom would be:
+ // self.viewzoom = bound(1 / zoomfactor, self.viewzoom * pow(zoomfactor, (zoomdir ? -1 : 1) * frametime * zoomspeed), 1);
+ // however, testing showed that arithmetic/harmonic zoom works better
+ if(zoomdir)
+ // self.viewzoom = 1 / bound(1, 1 / self.viewzoom + (zoomdir ? 1 : -1) * frametime * zoomspeed * (zoomfactor - 1), zoomfactor);
+ // zoom in = arithmetic: 1x, 2x, 3x, 4x, ..., 8x
+ self.viewzoom = 1 / bound(1, 1 / self.viewzoom + frametime * zoomspeed * (zoomfactor - 1), zoomfactor);
+ else
+ // self.viewzoom = bound(1 / zoomfactor, self.viewzoom + (zoomdir ? -1 : 1) * frametime * zoomspeed * (1 - 1 / zoomfactor), 1);
+ // zoom out = harmonic: 8/1x, 8/2x, 8/3x, 8/4x, ..., 8/8x
+ self.viewzoom = bound(1 / zoomfactor, self.viewzoom + frametime * zoomspeed * (1 - 1 / zoomfactor), 1);
+ }
}
- else if (self.viewzoom > 0.4)
- self.viewzoom = max (0.4, self.viewzoom - frametime * 2);
+ else
+ self.viewzoom = min(1, self.viewzoom + frametime); // spawn zoom-in
}
- else if (self.viewzoom < 1.0)
- self.viewzoom = min (1.0, self.viewzoom + frametime);
player_powerups();
player_regen();
@@ -1550,7 +1596,6 @@
CheckRules_Player();
UpdateChatBubble();
UpdateTeamBubble();
- if (self.deadflag == DEAD_NO)
if (self.impulse)
ImpulseCommands ();
if (intermission_running)
Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc 2007-04-13 22:50:26 UTC (rev 2305)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc 2007-04-13 23:56:17 UTC (rev 2306)
@@ -63,27 +63,32 @@
if (imp >= 1 && imp <= 12)
{
// weapon switching impulses
- if (imp <= 9)
- W_SwitchWeapon (imp);
- else if (imp == 10)
- W_NextWeapon ();
- else if (imp == 12)
- W_PreviousWeapon ();
- else if (imp == 11) // last weapon
- W_SwitchWeapon (self.cnt);
+ if(self.deadflag == DEAD_NO)
+ {
+ if (imp <= 9)
+ W_SwitchWeapon (imp);
+ else if (imp == 10)
+ W_NextWeapon ();
+ else if (imp == 12)
+ W_PreviousWeapon ();
+ else if (imp == 11) // last weapon
+ W_SwitchWeapon (self.cnt);
+ }
+ else
+ self.impulse = imp; // retry in next frame
}
else if (imp >= 13 && imp <= 16)
{
if (cvar("sv_cheats"))
{
- if (imp == 13)
+ if (imp == 13 && self.deadflag == DEAD_NO)
{
makevectors (self.v_angle);
self.velocity = self.velocity + v_forward * 300;
CopyBody(1);
self.velocity = self.velocity - v_forward * 300;
}
- else if (imp == 14)
+ else if (imp == 14 && self.deadflag == DEAD_NO)
CopyBody(0);
else if (imp == 15)
{
@@ -108,11 +113,88 @@
// throw weapon
else if (imp == 17)
{
- if (self.weapon != WEP_LASER
- && !cvar("g_minstagib") && !cvar("g_instagib")
- && !cvar("g_rocketarena") && !cvar("g_lms") && cvar("g_pickup_items") && !cvar("g_nixnex"))
- W_ThrowWeapon(self.velocity * 0.5 + v_forward * 750, '0 0 0', TRUE);
+ if(self.deadflag == DEAD_NO)
+ {
+ if (self.weapon != WEP_LASER
+ && !cvar("g_minstagib") && !cvar("g_instagib")
+ && !cvar("g_rocketarena") && !cvar("g_lms") && cvar("g_pickup_items") && !cvar("g_nixnex"))
+ W_ThrowWeapon(self.velocity * 0.5 + v_forward * 750, '0 0 0', TRUE);
+ }
}
+ // deploy waypoints
+ else if (imp >= 30 && imp <= 49)
+ {
+ if(imp == 30)
+ {
+ WaypointSprite_DeployPersonal("waypoint", self.origin);
+ sprint(self, "personal waypoint spawned at location\n");
+ }
+ else if(imp == 31)
+ {
+ WaypointSprite_DeployPersonal("waypoint", self.cursor_trace_endpos);
+ sprint(self, "personal waypoint spawned at crosshair\n");
+ }
+ else if(imp == 32 && vlen(self.death_origin))
+ {
+ WaypointSprite_DeployPersonal("waypoint", self.death_origin);
+ sprint(self, "personal waypoint spawned at death location\n");
+ }
+ else if(imp == 33 && self.deadflag == DEAD_NO)
+ {
+ if(teams_matter)
+ WaypointSprite_Attach("helpme", TRUE);
+ sprint(self, "HELP ME attached\n");
+ }
+ else if(imp == 34)
+ {
+ WaypointSprite_DeployFixed("here", FALSE, self.origin);
+ sprint(self, "HERE spawned at location\n");
+ }
+ else if(imp == 35)
+ {
+ WaypointSprite_DeployFixed("here", FALSE, self.cursor_trace_endpos);
+ sprint(self, "HERE spawned at crosshair\n");
+ }
+ else if(imp == 36 && vlen(self.death_origin))
+ {
+ WaypointSprite_DeployFixed("here", FALSE, self.death_origin);
+ sprint(self, "HERE spawned at death location\n");
+ }
+ else if(imp == 37)
+ {
+ WaypointSprite_DeployFixed("danger", FALSE, self.origin);
+ sprint(self, "DANGER spawned at location\n");
+ }
+ else if(imp == 38)
+ {
+ WaypointSprite_DeployFixed("danger", FALSE, self.cursor_trace_endpos);
+ sprint(self, "DANGER spawned at crosshair\n");
+ }
+ else if(imp == 39 && vlen(self.death_origin))
+ {
+ WaypointSprite_DeployFixed("danger", FALSE, self.death_origin);
+ sprint(self, "DANGER spawned at death location\n");
+ }
+ else if(imp == 47)
+ {
+ WaypointSprite_ClearPersonal();
+ sprint(self, "personal waypoint cleared\n");
+ }
+ else if(imp == 48)
+ {
+ WaypointSprite_ClearOwned();
+ sprint(self, "all waypoints cleared\n");
+ }
+ else if(imp == 49)
+ {
+ self.cvar_cl_hidewaypoints = !(self.cvar_cl_hidewaypoints);
+ sprint(self, "fixed waypoints now ");
+ if(self.cvar_cl_hidewaypoints)
+ sprint(self, "OFF\n");
+ else
+ sprint(self, "ON\n");
+ }
+ }
else
{
if (cvar("sv_cheats"))
@@ -130,11 +212,11 @@
traceline(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * 65536, FALSE, self);
sprint(self, strcat("distance: ", ftos(fabs(vlen(trace_endpos - (self.origin + self.view_ofs)))), "\n"));
}
- else if(imp == 42)
+ else if(imp == 6*9)
{
CampaignLevelWarp(cvar("_warplevel"));
}
- else if (imp == 99)
+ else if (imp == 99 && self.deadflag == DEAD_NO)
{
self.items = IT_LASER | IT_UZI | IT_SHOTGUN | IT_GRENADE_LAUNCHER | IT_ELECTRO | IT_CRYLINK | IT_NEX | IT_HAGAR | IT_ROCKET_LAUNCHER;
self.ammo_shells = 999;
Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc 2007-04-13 22:50:26 UTC (rev 2305)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc 2007-04-13 23:56:17 UTC (rev 2306)
@@ -285,6 +285,8 @@
{
self.deaths += 1;
+ // clear waypoints
+ WaypointSprite_PlayerDead();
// become fully visible
self.alpha = 1;
// clear selected player display
Modified: branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc 2007-04-13 22:50:26 UTC (rev 2305)
+++ branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc 2007-04-13 23:56:17 UTC (rev 2306)
@@ -309,8 +309,10 @@
self.classname = "observer";
stuffcmd(self,"menu_showteamselect\n");
}
- } else if(argv(0) == "reportcvar") {
+ } else if(argv(0) == "reportcvar") { // old system
GetCvars(1);
+ } else if(argv(0) == "sentcvar") { // new system
+ GetCvars(1);
} else if(argv(0) == "spectate") {
if(cvar("g_lms") || cvar("g_arena"))
return; // don't allow spectating in lms, unless player runs out of lives
Modified: branches/nexuiz-2.0/data/qcsrc/server/ctf.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/ctf.qc 2007-04-13 22:50:26 UTC (rev 2305)
+++ branches/nexuiz-2.0/data/qcsrc/server/ctf.qc 2007-04-13 23:56:17 UTC (rev 2306)
@@ -71,7 +71,10 @@
{
if (e.owner)
if (e.owner.flagcarried == e)
+ {
+ WaypointSprite_DetachCarrier(e.owner);
e.owner.flagcarried = world;
+ }
e.owner = world;
RegenFlag(e);
};
@@ -92,6 +95,7 @@
return;
}
bprint(p.netname, "^7 lost the ", e.netname, "\n");
+ WaypointSprite_DetachCarrier(p);
LogCTF("dropped", p.team, p.flagcarried);
setattachment(e, world, "");
@@ -221,6 +225,7 @@
UpdateFrags(head, cvar("g_ctf_flagscore_capture_team"));
sound (self, CHAN_AUTO, self.noise2, 1, ATTN_NONE);
+ WaypointSprite_DetachCarrier(other);
RegenFlag (other.flagcarried);
other.flagcarried = world;
other.next_take_time = time + 1;
@@ -251,6 +256,7 @@
self.movetype = MOVETYPE_NONE;
setorigin(self, FLAG_CARRY_POS);
setattachment(self, other, "");
+ WaypointSprite_AttachCarrier("flagcarrier", other);
return;
}
@@ -290,6 +296,7 @@
self.movetype = MOVETYPE_NONE; // flag must have MOVETYPE_NONE here, otherwise it will drop through the floor...
setorigin(self, FLAG_CARRY_POS);
setattachment(self, other, "");
+ WaypointSprite_AttachCarrier("flagcarrier", other);
}
}
};
@@ -425,6 +432,9 @@
// self.glow_size = 50;
self.effects = self.effects | EF_FULLBRIGHT | EF_LOWPRECISION;
+ droptofloor();
+
+ WaypointSprite_SpawnFixed("redbase", self.origin + '0 0 37');
};
/*QUAKED item_flag_team2 (0 0.5 0.8) (-48 -48 -24) (48 48 64)
@@ -478,6 +488,9 @@
// self.glow_size = 50;
self.effects = self.effects | EF_FULLBRIGHT | EF_LOWPRECISION;
+ droptofloor();
+
+ WaypointSprite_SpawnFixed("bluebase", self.origin + '0 0 37');
};
Modified: branches/nexuiz-2.0/data/qcsrc/server/defs.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/defs.qh 2007-04-13 22:50:26 UTC (rev 2305)
+++ branches/nexuiz-2.0/data/qcsrc/server/defs.qh 2007-04-13 23:56:17 UTC (rev 2306)
@@ -252,11 +252,16 @@
float default_player_alpha;
float default_weapon_alpha;
+.float has_zoomed;
+
.float() customizeentityforclient;
+.float cvar_cl_zoomfactor;
+.float cvar_cl_zoomspeed;
.float cvar_cl_playerdetailreduction;
.float cvar_cl_nogibs;
.float cvar_scr_centertime;
.float cvar_cl_shownames;
+.float cvar_cl_hidewaypoints;
.string cvar_g_nexuizversion;
.float version_nagtime;
Modified: branches/nexuiz-2.0/data/qcsrc/server/g_world.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_world.qc 2007-04-13 22:50:26 UTC (rev 2305)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_world.qc 2007-04-13 23:56:17 UTC (rev 2306)
@@ -361,6 +361,9 @@
CampaignPreInit();
InitGameplayMode();
+
+ WaypointSprite_Init();
+
//if (cvar("g_domination"))
// dom_init();
@@ -726,6 +729,14 @@
return TRUE;
}
}
+ if(cvar_string("quit_and_redirect") != "")
+ {
+ entity head;
+ FOR_EACH_REALCLIENT(head)
+ stuffcmd(head, strcat("\nconnect ", cvar_string("quit_and_redirect"), "\n"));
+ localcmd("wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; quit\n");
+ return TRUE;
+ }
if (cvar("samelevel")) // if samelevel is set, stay on same level
{
// this does not work because it tries to exec maps/nexdm01.mapcfg (which doesn't exist, it should be trying maps/dm_nexdm01.mapcfg for example)
Modified: branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc 2007-04-13 22:50:26 UTC (rev 2305)
+++ branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc 2007-04-13 23:56:17 UTC (rev 2306)
@@ -350,7 +350,7 @@
}
}
else
- stuffcmd(self, strcat("cmd reportcvar ", name, " $", name, "\n"));
+ stuffcmd(self, strcat("sendcvar ", name, "\n"));
}
void GetCvars_handleFloat(float f, .float field, string name)
{
@@ -363,10 +363,14 @@
self.field = stof(argv(f + 1));
}
else
- stuffcmd(self, strcat("cmd reportcvar ", name, " $", name, "\n"));
+ stuffcmd(self, strcat("sendcvar ", name, "\n"));
}
void GetCvars(float f)
{
+ GetCvars_handleFloat(f, autoswitch, "cl_autoswitch");
+ GetCvars_handleFloat(f, cvar_cl_hidewaypoints, "cl_hidewaypoints");
+ GetCvars_handleFloat(f, cvar_cl_zoomfactor, "cl_zoomfactor");
+ GetCvars_handleFloat(f, cvar_cl_zoomspeed, "cl_zoomspeed");
GetCvars_handleFloat(f, cvar_cl_playerdetailreduction, "cl_playerdetailreduction");
GetCvars_handleFloat(f, cvar_cl_nogibs, "cl_nogibs");
GetCvars_handleFloat(f, cvar_scr_centertime, "scr_centertime");
Modified: branches/nexuiz-2.0/data/qcsrc/server/progs.src
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/progs.src 2007-04-13 22:50:26 UTC (rev 2305)
+++ branches/nexuiz-2.0/data/qcsrc/server/progs.src 2007-04-13 23:56:17 UTC (rev 2306)
@@ -14,6 +14,8 @@
miscfunctions.qc
+waypointsprites.qc
+
// general bot utility functions and management
bots.qc
Added: branches/nexuiz-2.0/data/qcsrc/server/waypointsprites.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/waypointsprites.qc (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/waypointsprites.qc 2007-04-13 23:56:17 UTC (rev 2306)
@@ -0,0 +1,300 @@
+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;
+
+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_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)
+{
+ if(!wp)
+ return;
+ if(wp.owner)
+ wp.owner.(wp.owned_by_field) = world;
+ remove(wp);
+}
+
+void WaypointSprite_Disown(entity wp, float fadetime)
+{
+ if(!wp)
+ return;
+ if(wp.owner)
+ {
+ if(wp.aiment == wp.owner)
+ {
+ wp.view_ofs = wp.view_ofs + wp.aiment.origin;
+ wp.aiment = 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 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;
+ }
+ }
+}
+
+void WaypointSprite_Think()
+{
+ float doremove;
+
+ doremove = FALSE;
+
+ if(self.health)
+ if(time >= self.teleport_time)
+ doremove = TRUE;
+
+ if(doremove)
+ WaypointSprite_Kill(self);
+ else
+ self.nextthink = time;
+}
+
+float WaypointSprite_CustomizeEntityForClient()
+{
+ vector realorigin, porigin;
+ float distancealpha, timealpha;
+ float distance;
+
+ if(self.health)
+ {
+ timealpha = bound(0, (self.teleport_time - time) / self.health, 1);
+ if(timealpha == 0)
+ return FALSE;
+ timealpha = pow(timealpha, waypointsprite_timealphaexponent);
+ }
+ else
+ timealpha = 1;
+
+ if(self.enemy)
+ if(self.enemy != other)
+ return FALSE;
+ if(self.team)
+ {
+ if(self.team != other.team)
+ return FALSE;
+ if(other.classname != "player")
+ return FALSE;
+ }
+
+ // do not draw to yourself when attached
+ if(self.aiment)
+ if(other == self.aiment)
+ return FALSE;
+
+ if(self.currentammo) // hidable?
+ if(other.cvar_cl_hidewaypoints) // wants to hide;
+ return FALSE;
+
+ porigin = other.origin + other.view_ofs_z * '0 0 1';
+ realorigin = self.aiment.origin + self.view_ofs;
+ self.origin = realorigin;
+
+ distance = vlen(realorigin - porigin);
+
+ if(self.max_health)
+ if(distance >= self.max_health)
+ return FALSE;
+
+ self.scale = max(1, distance / waypointsprite_normdistance) * waypointsprite_minscale;
+
+ if(self.max_health > waypointsprite_normdistance)
+ {
+ // 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);
+ }
+ else if(self.max_health)
+ {
+ // alpha 1 if visible
+ distancealpha = 1;
+ }
+ else
+ {
+ // 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;
+ }
+
+ self.alpha = timealpha * distancealpha;
+
+ return TRUE;
+}
+
+entity WaypointSprite_Spawn(
+ string spr, // sprite
+ float lifetime, float maxdistance, // lifetime, max distance
+ entity ref, vector ofs, // position
+ entity showto, float t, // show to whom? Use a flag to indicate a team
+ entity own, .entity ownfield, // remove when own gets killed
+ float hideable // true when it should be controlled by cl_hidewaypoints
+)
+{
+ entity wp;
+ wp = spawn();
+ wp.classname = "sprite_waypoint";
+ wp.teleport_time = time + lifetime;
+ wp.health = lifetime;
+ wp.view_ofs = ofs;
+ wp.aiment = ref;
+ wp.enemy = showto;
+ wp.team = t;
+ wp.owner = own;
+ wp.currentammo = hideable;
+ if(own)
+ {
+ if(own.ownfield)
+ remove(own.ownfield);
+ own.ownfield = wp;
+ wp.owned_by_field = ownfield;
+ }
+ wp.max_health = maxdistance;
+ wp.customizeentityforclient = WaypointSprite_CustomizeEntityForClient;
+ wp.think = WaypointSprite_Think;
+ wp.nextthink = time;
+ wp.effects = EF_NODEPTHTEST;
+ setmodel(wp, strcat("models/sprites/", spr, ".sp2"));
+ return wp;
+}
+
+entity WaypointSprite_SpawnFixed(
+ string spr,
+ vector ofs
+)
+{
+ return WaypointSprite_Spawn(spr, 0, 0, world, ofs, world, 0, world, enemy, TRUE);
+}
+
+.entity waypointsprite_deployed_fixed;
+entity WaypointSprite_DeployFixed(
+ string spr,
+ float limited_range,
+ vector ofs
+)
+{
+ float t, maxdistance;
+ if(teams_matter)
+ t = self.team;
+ else
+ t = 0;
+ if(limited_range)
+ maxdistance = waypointsprite_limitedrange;
+ else
+ maxdistance = 0;
+ return WaypointSprite_Spawn(spr, waypointsprite_deployed_lifetime, maxdistance, world, ofs, world, t, self, waypointsprite_deployed_fixed, FALSE);
+}
+
+.entity waypointsprite_deployed_personal;
+entity WaypointSprite_DeployPersonal(
+ string spr,
+ vector ofs
+)
+{
+ return WaypointSprite_Spawn(spr, 0, 0, world, ofs, self, 0, self, waypointsprite_deployed_personal, FALSE);
+}
+
+.entity waypointsprite_attached;
+.entity waypointsprite_attachedforcarrier;
+entity WaypointSprite_Attach(
+ string spr,
+ float limited_range
+)
+{
+ float t, maxdistance;
+ if(self.waypointsprite_attachedforcarrier)
+ return world; // can't attach to FC
+ if(teams_matter)
+ t = self.team;
+ else
+ t = 0;
+ if(limited_range)
+ maxdistance = waypointsprite_limitedrange;
+ else
+ maxdistance = 0;
+ return WaypointSprite_Spawn(spr, waypointsprite_deployed_lifetime, maxdistance, self, '0 0 64', world, t, self, waypointsprite_attached, FALSE);
+}
+
+entity WaypointSprite_AttachCarrier(
+ string spr,
+ entity carrier
+)
+{
+ WaypointSprite_Kill(carrier.waypointsprite_attached); // FC overrides attached
+ return WaypointSprite_Spawn(spr, 0, 0, carrier, '0 0 64', world, carrier.team, carrier, waypointsprite_attachedforcarrier, FALSE);
+}
+
+void WaypointSprite_DetachCarrier(entity carrier)
+{
+ WaypointSprite_Disown(carrier.waypointsprite_attachedforcarrier, 1);
+}
+
+void WaypointSprite_ClearPersonal()
+{
+ WaypointSprite_Kill(self.waypointsprite_deployed_personal);
+}
+
+void WaypointSprite_ClearOwned()
+{
+ WaypointSprite_Kill(self.waypointsprite_deployed_fixed);
+ WaypointSprite_Kill(self.waypointsprite_deployed_personal);
+ WaypointSprite_Kill(self.waypointsprite_attached);
+}
+
+void WaypointSprite_PlayerDead()
+{
+ WaypointSprite_Disown(self.waypointsprite_attached, waypointsprite_deadlifetime);
+ WaypointSprite_DetachCarrier(self);
+}
+
+void WaypointSprite_PlayerGone()
+{
+ WaypointSprite_Disown(self.waypointsprite_deployed_fixed, waypointsprite_deadlifetime);
+ WaypointSprite_Kill(self.waypointsprite_deployed_personal);
+ WaypointSprite_Disown(self.waypointsprite_attached, waypointsprite_deadlifetime);
+ WaypointSprite_DetachCarrier(self);
+}
More information about the nexuiz-commits
mailing list