From 9165f7cb3add1b434799585614163a39aded0cbe Mon Sep 17 00:00:00 2001 From: div0 Date: Wed, 30 Sep 2009 09:21:22 +0000 Subject: [PATCH] automatic waypoint for dropped flag (DO NOT PUT THIS IN 2.5.2, PEOPLE MAY HATE IT) git-svn-id: svn://svn.icculus.org/nexuiz/trunk@7992 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/models/sprites/make-sprites.sh | 1 + data/qcsrc/server/ctf.qc | 44 ++++++++++++++++++----------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/data/models/sprites/make-sprites.sh b/data/models/sprites/make-sprites.sh index e1e8721b6..927dd6f1d 100644 --- a/data/models/sprites/make-sprites.sh +++ b/data/models/sprites/make-sprites.sh @@ -144,6 +144,7 @@ sprite as-defend "Defend" 0080ff 000000 0.0 sprite bluebase "Blue Base" 0050ff 000000 0.0 sprite danger "DANGER" ff0000 ffff00 0.0 sprite flagcarrier "Flag carrier" ffff00 000000 0.0 +sprite flagdropped "Dropped flag" 00ffff 000000 0.0 sprite helpme "Help me!" ffff00 ff0000 0.0 sprite here "Here" 00ff00 000000 0.0 sprite key-dropped "Dropped key" 00ffff 000000 0.0 diff --git a/data/qcsrc/server/ctf.qc b/data/qcsrc/server/ctf.qc index 9b6a8b266..e0a30d157 100644 --- a/data/qcsrc/server/ctf.qc +++ b/data/qcsrc/server/ctf.qc @@ -102,7 +102,7 @@ void ctf_captureshield_touch() centerprint_atprio(other, CENTERPRIO_SHIELDING, "^3You are ^4shielded^3 from the flag\n^3for ^1too many unsuccessful attempts^3 to capture.\n\n^3Get some defensive scores before trying again."); } -void ctf_captureshield_spawn() +void ctf_flag_spawnstuff() { entity e; e = spawn(); @@ -119,6 +119,21 @@ void ctf_captureshield_spawn() setmodel(e, "models/ctf/shield.md3"); e.scale = 0.5; setsize(e, e.scale * e.mins, e.scale * e.maxs); + + waypoint_spawnforitem_force(self, self.origin); + self.nearestwaypointtimeout = 0; // activate waypointing again + self.basewaypoint = self.nearestwaypoint; + + if(self.team == COLOR_TEAM1) + { + WaypointSprite_SpawnFixed("redbase", self.origin + '0 0 61', self, sprite); + WaypointSprite_UpdateTeamRadar(self.sprite, RADARICON_FLAG, colormapPaletteColor(COLOR_TEAM1 - 1, FALSE)); + } + else + { + WaypointSprite_SpawnFixed("bluebase", self.origin + '0 0 61', self, sprite); + WaypointSprite_UpdateTeamRadar(self.sprite, RADARICON_FLAG, colormapPaletteColor(COLOR_TEAM2 - 1, FALSE)); + } } float ctf_score_value(string parameter) @@ -184,7 +199,8 @@ void place_flag() droptofloor(); self.movetype = MOVETYPE_TOSS; } - InitializeEntity(self, ctf_captureshield_spawn, INITPRIO_SETLOCATION); + + InitializeEntity(self, ctf_flag_spawnstuff, INITPRIO_SETLOCATION); }; void LogCTF(string mode, float flagteam, entity actor) @@ -207,6 +223,9 @@ void RegenFlag(entity e) return; } + if(e.waypointsprite_attachedforcarrier) + WaypointSprite_DetachCarrier(e); + setattachment(e, world, ""); e.damageforcescale = 0; e.takedamage = DAMAGE_NO; @@ -281,6 +300,7 @@ void DropFlag(entity e, entity penalty_receiver, entity attacker) ctf_captureshield_update(p, 0); // shield only e.playerid = attacker.playerid; e.ctf_droptime = time; + WaypointSprite_Spawn("flagdropped", 0, 0, e, '0 0 1' * 61, world, COLOR_TEAM1 + COLOR_TEAM2 - e.team, e, waypointsprite_attachedforcarrier, FALSE); if(p.waypointsprite_attachedforcarrier) { @@ -587,6 +607,9 @@ void FlagTouch() } else if (!other.flagcarried && (other.playerid != self.dropperid || time > self.ctf_droptime + cvar("g_balance_ctf_delay_collect"))) { + if(self.waypointsprite_attachedforcarrier) + WaypointSprite_DetachCarrier(self); + if (cvar("g_ctf_flag_pickup_effects")) // field pickup effect pointparticles(particleeffectnum("smoke_ring"), 0.5 * (self.absmin + self.absmax), '0 0 0', 1); @@ -709,6 +732,8 @@ void spawnfunc_info_player_team4() void item_flag_reset() { DropFlag(self, world, world); + if(self.waypointsprite_attachedforcarrier) + WaypointSprite_DetachCarrier(self); ReturnFlag(self); } @@ -826,13 +851,6 @@ void spawnfunc_item_flag_team1() // From Spidflisk item_flag_postspawn(); - waypoint_spawnforitem_force(self, self.origin); - self.nearestwaypointtimeout = 0; // activate waypointing again - self.basewaypoint = self.nearestwaypoint; - - WaypointSprite_SpawnFixed("redbase", self.origin + '0 0 37', self, sprite); - WaypointSprite_UpdateTeamRadar(self.sprite, RADARICON_FLAG, colormapPaletteColor(COLOR_TEAM1 - 1, FALSE)); - precache_model("models/ctf/shield.md3"); precache_model("models/ctf/shockwavetransring.md3"); @@ -933,14 +951,8 @@ void spawnfunc_item_flag_team2() // From Spidflisk item_flag_postspawn(); - waypoint_spawnforitem_force(self, self.origin); - self.nearestwaypointtimeout = 0; // activate waypointing again - self.basewaypoint = self.nearestwaypoint; - - WaypointSprite_SpawnFixed("bluebase", self.origin + '0 0 37', self, sprite); - WaypointSprite_UpdateTeamRadar(self.sprite, RADARICON_FLAG, colormapPaletteColor(COLOR_TEAM2 - 1, FALSE)); - precache_model("models/ctf/shield.md3"); + precache_model("models/ctf/shockwavetransring.md3"); self.reset = item_flag_reset; }; -- 2.39.2