r4680 - in trunk/data/qcsrc/server: . tturrets/system tturrets/units
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Thu Oct 9 02:31:51 EDT 2008
Author: div0
Date: 2008-10-09 02:31:51 -0400 (Thu, 09 Oct 2008)
New Revision: 4680
Modified:
trunk/data/qcsrc/server/cl_player.qc
trunk/data/qcsrc/server/constants.qh
trunk/data/qcsrc/server/defs.qh
trunk/data/qcsrc/server/g_damage.qc
trunk/data/qcsrc/server/miscfunctions.qc
trunk/data/qcsrc/server/tturrets/system/turret_system_damage.qc
trunk/data/qcsrc/server/tturrets/units/turret_unit_flac.qc
trunk/data/qcsrc/server/tturrets/units/turret_unit_hellion.qc
trunk/data/qcsrc/server/tturrets/units/turret_unit_hk.qc
trunk/data/qcsrc/server/tturrets/units/turret_unit_mlrs.qc
trunk/data/qcsrc/server/tturrets/units/turret_unit_plasma.qc
trunk/data/qcsrc/server/w_crylink.qc
trunk/data/qcsrc/server/w_electro.qc
trunk/data/qcsrc/server/w_grenadelauncher.qc
trunk/data/qcsrc/server/w_hagar.qc
trunk/data/qcsrc/server/w_laser.qc
trunk/data/qcsrc/server/w_porto.qc
trunk/data/qcsrc/server/w_rocketlauncher.qc
trunk/data/qcsrc/server/w_shotgun.qc
trunk/data/qcsrc/server/w_uzi.qc
Log:
more death types (now weapons know whether the hit was primary or secondary, whether it was splash damage or not, and whether the projectile bounced before the hit)
Modified: trunk/data/qcsrc/server/cl_player.qc
===================================================================
--- trunk/data/qcsrc/server/cl_player.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/cl_player.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -413,7 +413,7 @@
else
player_setanim(self.anim_pain2, FALSE, TRUE, TRUE);
- if(deathtype != WEP_LASER || attacker != self || self.health < 2 * cvar("g_balance_laser_primary_damage") * cvar("g_balance_selfdamagepercent") + 1)
+ if(deathtype >= DEATH_SPECIAL_START || deathtype & DEATH_WEAPONMASK != WEP_LASER || attacker != self || self.health < 2 * cvar("g_balance_laser_primary_damage") * cvar("g_balance_selfdamagepercent") + 1)
// exclude pain sounds for laserjumps as long as you aren't REALLY low on health and would die of the next two
{
if(self.health > 75) // TODO make a "gentle" version?
Modified: trunk/data/qcsrc/server/constants.qh
===================================================================
--- trunk/data/qcsrc/server/constants.qh 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/constants.qh 2008-10-09 06:31:51 UTC (rev 4680)
@@ -163,6 +163,7 @@
// Deathtypes (weapon deathtypes are the IT_* constants below)
// NOTE: when adding death types, please add an explanation to Docs/spamlog.txt too.
+float DEATH_SPECIAL_START = 10000;
float DEATH_FALL = 10000;
float DEATH_TELEFRAG = 10001;
float DEATH_DROWN = 10002;
@@ -180,6 +181,12 @@
float DEATH_MIRRORDAMAGE = 10014;
float DEATH_TURRET = 10100;
+float DEATH_WEAPONMASK = 0xFF;
+float DEATH_HITTYPEMASK = 0xF00; // which is WAY below 10000 used for normal deaths
+float HITTYPE_SECONDARY = 0x100;
+float HITTYPE_SPLASH = 0x200;
+float HITTYPE_BOUNCE = 0x400;
+
vector PL_VIEW_OFS = '0 0 35';
vector PL_MIN = '-16 -16 -24';
vector PL_MAX = '16 16 45';
Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/defs.qh 2008-10-09 06:31:51 UTC (rev 4680)
@@ -208,12 +208,13 @@
float WR_CHECKAMMO2 = 4; // checks ammo for weapon
float WR_AIM = 5; // runs bot aiming code for this weapon
float WR_PRECACHE = 6; // precaches models/sounds used by this weapon
-float WR_SUICIDEMESSAGE = 7; // sets w_deathtypestring or leaves it alone
+float WR_SUICIDEMESSAGE = 7; // sets w_deathtypestring or leaves it alone (and may inspect w_deathtype for details)
float WR_KILLMESSAGE = 8; // sets w_deathtypestring or leaves it alone
void weapon_defaultspawnfunc(float wpn);
string w_deathtypestring;
+float w_deathtype;
void(entity client, string s) centerprint_builtin = #73;
.vector dest1, dest2;
@@ -494,3 +495,5 @@
.float stat_game_starttime;
void W_Porto_Remove (entity p);
+
+.float projectiledeathtype;
Modified: trunk/data/qcsrc/server/g_damage.qc
===================================================================
--- trunk/data/qcsrc/server/g_damage.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/g_damage.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -209,10 +209,11 @@
if (targ.killcount > 2)
bprint ("^1",s,"^1 ended it all with a ",ftos(targ.killcount)," scoring spree\n");
} else {
- if(deathtype >= WEP_FIRST && deathtype <= WEP_LAST)
+ if(deathtype < DEATH_SPECIAL_START && deathtype & DEATH_WEAPONMASK >= WEP_FIRST && deathtype & DEATH_WEAPONMASK <= WEP_LAST)
{
w_deathtypestring = "couldn't resist the urge to self-destruct";
- weapon_action(deathtype, WR_SUICIDEMESSAGE);
+ w_deathtype = deathtype;
+ weapon_action(deathtype & DEATH_WEAPONMASK, WR_SUICIDEMESSAGE);
bprint("^1", s, "^1 ", w_deathtypestring, "\n");
}
else if (deathtype == DEATH_KILL)
@@ -289,10 +290,11 @@
if(sv_gentle) {
bprint ("^1",s, "^1 needs a restart thanks to ", a, "\n");
} else {
- if(deathtype >= WEP_FIRST && deathtype <= WEP_LAST)
+ if(deathtype < DEATH_SPECIAL_START && deathtype & DEATH_WEAPONMASK >= WEP_FIRST && deathtype & DEATH_WEAPONMASK <= WEP_LAST)
{
w_deathtypestring = "was blasted by";
- weapon_action(deathtype, WR_KILLMESSAGE);
+ w_deathtype = deathtype;
+ weapon_action(deathtype & DEATH_WEAPONMASK, WR_KILLMESSAGE);
p = strstrofs(w_deathtypestring, "#", 0);
if(p < 0)
bprint("^1", s, "^1 ", w_deathtypestring, " ", a, "\n");
@@ -771,7 +773,7 @@
return nearest;
}
-float RadiusDamage (entity inflictor, entity attacker, float coredamage, float edgedamage, float rad, entity ignore, float forceintensity, float deathtype)
+float RadiusDamage (entity inflictor, entity attacker, float coredamage, float edgedamage, float rad, entity ignore, float forceintensity, float deathtype, entity directhitentity)
// Returns total damage applies to creatures
{
entity targ;
@@ -829,7 +831,10 @@
{
if(targ.iscreature)
total_damage_to_creatures += finaldmg;
- Damage (targ, inflictor, attacker, finaldmg, deathtype, nearest, force);
+ if(targ == directhitentity)
+ Damage (targ, inflictor, attacker, finaldmg, deathtype, nearest, force);
+ else
+ Damage (targ, inflictor, attacker, finaldmg, deathtype | HITTYPE_SPLASH, nearest, force);
break;
}
nearest_x = targ.mins_x + random() * targ.size_x;
Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/miscfunctions.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -1518,3 +1518,23 @@
e.effects = EF_NODEPTHTEST | EF_LOWPRECISION;
}
+void adaptor_think2touch()
+{
+ entity o;
+ o = other;
+ other = world;
+ self.touch();
+ other = o;
+}
+
+void adaptor_think2use()
+{
+ entity o, a;
+ o = other;
+ a = activator;
+ activator = world;
+ other = world;
+ self.use();
+ other = o;
+ activator = a;
+}
Modified: trunk/data/qcsrc/server/tturrets/system/turret_system_damage.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/system/turret_system_damage.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/tturrets/system/turret_system_damage.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -193,7 +193,7 @@
// Go boom
- RadiusDamage (self,self, min(self.ammo,50),min(self.ammo,50) * 0.25,250,world,min(self.ammo,50)*5,0);
+ RadiusDamage (self,self, min(self.ammo,50),min(self.ammo,50) * 0.25,250,world,min(self.ammo,50)*5,0,world);
// Setup respawn
self.nextthink = time + self.respawntime;
Modified: trunk/data/qcsrc/server/tturrets/units/turret_unit_flac.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/turret_unit_flac.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/tturrets/units/turret_unit_flac.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -52,7 +52,7 @@
self.event_damage = SUB_Null;
- ftmp = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET);
+ ftmp = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
#ifdef TURRET_DEBUG
self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
Modified: trunk/data/qcsrc/server/tturrets/units/turret_unit_hellion.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/turret_unit_hellion.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/tturrets/units/turret_unit_hellion.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -160,7 +160,7 @@
WriteCoord (MSG_BROADCAST, org2_z);
self.event_damage = SUB_Null;
- d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET);
+ d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
#ifdef TURRET_DEBUG
self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
Modified: trunk/data/qcsrc/server/tturrets/units/turret_unit_hk.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/turret_unit_hk.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/tturrets/units/turret_unit_hk.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -367,7 +367,7 @@
WriteCoord (MSG_BROADCAST, org2_z);
self.event_damage = SUB_Null;
- d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET);
+ d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
#ifdef TURRET_DEBUG
self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
Modified: trunk/data/qcsrc/server/tturrets/units/turret_unit_mlrs.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/turret_unit_mlrs.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/tturrets/units/turret_unit_mlrs.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -61,11 +61,11 @@
#ifdef TURRET_DEBUG
float d;
- d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET);
+ d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
#else
- RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET);
+ RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
#endif
// Target dead, get another is still targeting the same.
Modified: trunk/data/qcsrc/server/tturrets/units/turret_unit_plasma.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/units/turret_unit_plasma.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/tturrets/units/turret_unit_plasma.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -85,11 +85,11 @@
#ifdef TURRET_DEBUG
float d;
- d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET);
+ d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
#else
- RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET);
+ RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
#endif
sound (self, CHAN_PROJECTILE, "weapons/electro_impact.wav", 1, ATTN_NORM);
Modified: trunk/data/qcsrc/server/w_crylink.qc
===================================================================
--- trunk/data/qcsrc/server/w_crylink.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/w_crylink.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -20,7 +20,7 @@
f = cvar("g_balance_crylink_primary_bouncedamagefactor");
if(self.alpha)
f *= self.alpha;
- RadiusDamage (self, self.realowner, cvar("g_balance_crylink_primary_damage") * f, cvar("g_balance_crylink_primary_edgedamage") * f, cvar("g_balance_crylink_primary_radius"), world, cvar("g_balance_crylink_primary_force") * f, WEP_CRYLINK);
+ RadiusDamage (self, self.realowner, cvar("g_balance_crylink_primary_damage") * f, cvar("g_balance_crylink_primary_edgedamage") * f, cvar("g_balance_crylink_primary_radius"), world, cvar("g_balance_crylink_primary_force") * f, self.projectiledeathtype, other);
if (finalhit)
{
remove (self);
@@ -29,6 +29,7 @@
self.cnt = self.cnt - 1;
self.angles = vectoangles(self.velocity);
self.owner = world;
+ self.projectiledeathtype |= HITTYPE_BOUNCE;
//self.scale = 1 + self.cnt;
}
@@ -49,7 +50,7 @@
f = cvar("g_balance_crylink_secondary_bouncedamagefactor");
if(self.alpha)
f *= self.alpha;
- RadiusDamage (self, self.realowner, cvar("g_balance_crylink_secondary_damage") * f, cvar("g_balance_crylink_secondary_edgedamage") * f, cvar("g_balance_crylink_secondary_radius"), world, cvar("g_balance_crylink_secondary_force") * f, WEP_CRYLINK);
+ RadiusDamage (self, self.realowner, cvar("g_balance_crylink_secondary_damage") * f, cvar("g_balance_crylink_secondary_edgedamage") * f, cvar("g_balance_crylink_secondary_radius"), world, cvar("g_balance_crylink_secondary_force") * f, self.projectiledeathtype, other);
if (finalhit)
{
remove (self);
@@ -58,6 +59,7 @@
self.cnt = self.cnt - 1;
self.angles = vectoangles(self.velocity);
self.owner = world;
+ self.projectiledeathtype |= HITTYPE_BOUNCE;
// self.scale = 1 + 1 * self.cnt;
}
@@ -84,6 +86,7 @@
proj.movetype = MOVETYPE_BOUNCEMISSILE;
proj.solid = SOLID_BBOX;
+ proj.projectiledeathtype = WEP_CRYLINK;
//proj.gravity = 0.001;
setmodel (proj, "models/plasmatrail.mdl"); // precision set below
@@ -148,6 +151,7 @@
proj.movetype = MOVETYPE_BOUNCEMISSILE;
proj.solid = SOLID_BBOX;
+ proj.projectiledeathtype = WEP_CRYLINK | HITTYPE_SECONDARY;
//proj.gravity = 0.001;
setmodel (proj, "models/plasmatrail.mdl"); // precision set below
@@ -191,7 +195,7 @@
trailparticles(world, particleeffectnum("lightning_beam", w_shotorg, trace_endpos);
if (trace_fraction < 1)
- Damage(trace_ent, self, self, cvar("g_balance_crylink_primary_damage"), WEP_CRYLINK, trace_endpos, '0 0 0');
+ Damage(trace_ent, self, self, cvar("g_balance_crylink_primary_damage"), WEP_CRYLINK | HITTYPE_SECONDARY, trace_endpos, '0 0 0');
}
*/
@@ -239,7 +243,18 @@
return self.ammo_cells >= cvar("g_balance_crylink_primary_ammo");
else if (req == WR_CHECKAMMO2)
return self.ammo_cells >= cvar("g_balance_crylink_secondary_ammo");
- // else if (req == WR_SUICIDEMESSAGE) // TODO
- // else if (req == WR_KILLMESSAGE) // TODO
+ else if (req == WR_SUICIDEMESSAGE)
+ {
+ w_deathtypestring = "succeeded at self-destructing himself with the Crylink";
+ }
+ else if (req == WR_KILLMESSAGE)
+ {
+ if(w_deathtype & HITTYPE_BOUNCE)
+ w_deathtypestring = "could not hide from #'s Crylink"; // unchecked: SPLASH (SECONDARY can't be)
+ else if(w_deathtype & HITTYPE_SPLASH)
+ w_deathtypestring = "was too close to #'s Crylink"; // unchecked: SECONDARY
+ else
+ w_deathtypestring = "took a close look at #'s Crylink"; // unchecked: SECONDARY
+ }
return TRUE;
};
Modified: trunk/data/qcsrc/server/w_electro.qc
===================================================================
--- trunk/data/qcsrc/server/w_electro.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/w_electro.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -8,12 +8,12 @@
if (self.movetype == MOVETYPE_BOUNCE)
{
pointparticles(particleeffectnum("electro_ballexplode"), org2, '0 0 0', 1);
- RadiusDamage (self, self.owner, cvar("g_balance_electro_secondary_damage"), cvar("g_balance_electro_secondary_edgedamage"), cvar("g_balance_electro_secondary_radius"), world, cvar("g_balance_electro_secondary_force"), WEP_ELECTRO);
+ RadiusDamage (self, self.owner, cvar("g_balance_electro_secondary_damage"), cvar("g_balance_electro_secondary_edgedamage"), cvar("g_balance_electro_secondary_radius"), world, cvar("g_balance_electro_secondary_force"), self.projectiledeathtype, other);
}
else
{
pointparticles(particleeffectnum("electro_impact"), org2, '0 0 0', 1);
- RadiusDamage (self, self.owner, cvar("g_balance_electro_primary_damage"), cvar("g_balance_electro_primary_edgedamage"), cvar("g_balance_electro_primary_radius"), world, cvar("g_balance_electro_primary_force"), WEP_ELECTRO);
+ RadiusDamage (self, self.owner, cvar("g_balance_electro_primary_damage"), cvar("g_balance_electro_primary_edgedamage"), cvar("g_balance_electro_primary_radius"), world, cvar("g_balance_electro_primary_force"), self.projectiledeathtype, other);
}
sound (self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
@@ -29,7 +29,7 @@
sound (self, CHAN_PROJECTILE, "weapons/electro_impact_combo.wav", VOL_BASE, ATTN_NORM);
self.event_damage = SUB_Null;
- RadiusDamage (self, self.owner, cvar("g_balance_electro_combo_damage"), cvar("g_balance_electro_combo_edgedamage"), cvar("g_balance_electro_combo_radius"), world, cvar("g_balance_electro_combo_force"), WEP_ELECTRO);
+ RadiusDamage (self, self.owner, cvar("g_balance_electro_combo_damage"), cvar("g_balance_electro_combo_edgedamage"), cvar("g_balance_electro_combo_radius"), world, cvar("g_balance_electro_combo_force"), WEP_ELECTRO | HITTYPE_BOUNCE, other); // use THIS type for a combo because primary can't bounce
remove (self);
}
@@ -51,6 +51,7 @@
announce(o, "announcer/male/electrobitch.ogg");
} else {
sound (self, CHAN_PROJECTILE, "weapons/electro_bounce.wav", VOL_BASE, ATTN_NORM);
+ self.projectiledeathtype |= HITTYPE_BOUNCE;
}
}
@@ -104,9 +105,11 @@
proj.owner = self;
proj.bot_dodge = TRUE;
proj.bot_dodgerating = cvar("g_balance_electro_primary_damage");
- proj.think = W_Plasma_Explode;
+ proj.use = W_Plasma_Explode;
+ proj.think = adaptor_think2use;
proj.nextthink = time + cvar("g_balance_electro_primary_lifetime");
proj.solid = SOLID_BBOX;
+ proj.projectiledeathtype = WEP_ELECTRO;
setorigin(proj, w_shotorg);
if not(self.items & IT_UNLIMITED_AMMO)
@@ -136,11 +139,13 @@
proj = spawn ();
proj.classname = "plasma";
proj.owner = self;
- proj.think = W_Plasma_Explode;
+ proj.use = W_Plasma_Explode;
+ proj.think = adaptor_think2use;
proj.bot_dodge = TRUE;
proj.bot_dodgerating = cvar("g_balance_electro_secondary_damage");
proj.nextthink = time + cvar("g_balance_electro_secondary_lifetime");
proj.solid = SOLID_BBOX;
+ proj.projectiledeathtype = WEP_ELECTRO | HITTYPE_SECONDARY;
setorigin(proj, w_shotorg);
if not(self.items & IT_UNLIMITED_AMMO)
@@ -231,7 +236,30 @@
else if (req == WR_CHECKAMMO2)
return self.ammo_cells >= cvar("g_balance_electro_secondary_ammo");
else if (req == WR_SUICIDEMESSAGE)
- w_deathtypestring = "played with plasma";
- // else if (req == WR_KILLMESSAGE) // TODO
+ {
+ if(w_deathtype & HITTYPE_SECONDARY)
+ w_deathtypestring = "could not remember where he put plasma";
+ else
+ w_deathtypestring = "played with plasma";
+ }
+ else if (req == WR_KILLMESSAGE)
+ {
+ if(w_deathtype & HITTYPE_SECONDARY)
+ {
+ if(w_deathtype & HITTYPE_SPLASH) // unchecked: BOUNCE
+ w_deathtypestring = "just noticed #'s blue ball";
+ else // unchecked: BOUNCE
+ w_deathtypestring = "got in touch with #'s blue ball";
+ }
+ else
+ {
+ if(w_deathtype & HITTYPE_BOUNCE) // combo
+ w_deathtypestring = "felt the electrifying air of #'s combo";
+ else if(w_deathtype & HITTYPE_SPLASH)
+ w_deathtypestring = "got too close to #'s blue beam";
+ else
+ w_deathtypestring = "was blasted by #'s blue beam";
+ }
+ }
return TRUE;
};
Modified: trunk/data/qcsrc/server/w_grenadelauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_grenadelauncher.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/w_grenadelauncher.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -6,7 +6,7 @@
sound (self, CHAN_PROJECTILE, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
self.event_damage = SUB_Null;
- RadiusDamage (self, self.owner, cvar("g_balance_grenadelauncher_primary_damage"), cvar("g_balance_grenadelauncher_primary_edgedamage"), cvar("g_balance_grenadelauncher_primary_radius"), world, cvar("g_balance_grenadelauncher_primary_force"), WEP_GRENADE_LAUNCHER);
+ RadiusDamage (self, self.owner, cvar("g_balance_grenadelauncher_primary_damage"), cvar("g_balance_grenadelauncher_primary_edgedamage"), cvar("g_balance_grenadelauncher_primary_radius"), world, cvar("g_balance_grenadelauncher_primary_force"), self.projectiledeathtype, other);
remove (self);
}
@@ -19,7 +19,7 @@
sound (self, CHAN_PROJECTILE, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
self.event_damage = SUB_Null;
- RadiusDamage (self, self.owner, cvar("g_balance_grenadelauncher_secondary_damage"), cvar("g_balance_grenadelauncher_secondary_edgedamage"), cvar("g_balance_grenadelauncher_secondary_radius"), world, cvar("g_balance_grenadelauncher_secondary_force"), WEP_GRENADE_LAUNCHER);
+ RadiusDamage (self, self.owner, cvar("g_balance_grenadelauncher_secondary_damage"), cvar("g_balance_grenadelauncher_secondary_edgedamage"), cvar("g_balance_grenadelauncher_secondary_radius"), world, cvar("g_balance_grenadelauncher_secondary_force"), self.projectiledeathtype, other);
remove (self);
}
@@ -42,7 +42,7 @@
return;
}
if (other.takedamage == DAMAGE_AIM)
- self.think ();
+ self.use ();
else
{
float r;
@@ -59,6 +59,7 @@
sound (self, CHAN_PROJECTILE, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM);
else
sound (self, CHAN_PROJECTILE, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM);
+ self.projectiledeathtype |= HITTYPE_BOUNCE;
}
}
@@ -92,12 +93,14 @@
gren.solid = SOLID_BBOX;
gren.effects = EF_LOWPRECISION;
gren.modelflags = MF_GRENADE;
+ gren.projectiledeathtype = WEP_GRENADE_LAUNCHER;
setmodel(gren, "models/grenademodel.md3"); // precision set above
setsize(gren, '0 0 0', '0 0 0');
setorigin(gren, w_shotorg);
gren.nextthink = time + cvar("g_balance_grenadelauncher_primary_lifetime");
- gren.think = W_Grenade_Explode;
+ gren.think = adaptor_think2use;
+ gren.use = W_Grenade_Explode;
gren.touch = W_Grenade_Touch1;
gren.velocity = w_shotdir * cvar("g_balance_grenadelauncher_primary_speed") + v_up * cvar("g_balance_grenadelauncher_primary_speed_up");
W_SetupProjectileVelocity(gren);
@@ -127,12 +130,14 @@
gren.solid = SOLID_BBOX;
gren.effects = EF_LOWPRECISION;
gren.modelflags = MF_GRENADE;
+ gren.projectiledeathtype = WEP_GRENADE_LAUNCHER | HITTYPE_SECONDARY;
setmodel(gren, "models/grenademodel.md3"); // precision set above
setsize(gren, '0 0 -3', '0 0 -3');
setorigin(gren, w_shotorg);
gren.nextthink = time + cvar("g_balance_grenadelauncher_secondary_lifetime");
- gren.think = W_Grenade_Explode2;
+ gren.think = adaptor_think2use;
+ gren.use = W_Grenade_Explode2;
gren.touch = W_Grenade_Touch2;
gren.takedamage = DAMAGE_YES;
gren.health = cvar("g_balance_grenadelauncher_secondary_health");
@@ -212,8 +217,21 @@
else if (req == WR_CHECKAMMO2)
return self.ammo_rockets >= cvar("g_balance_grenadelauncher_secondary_ammo");
else if (req == WR_SUICIDEMESSAGE)
- w_deathtypestring = "detonated";
+ {
+ if(w_deathtype & HITTYPE_SECONDARY)
+ w_deathtypestring = "tried out his own grenade";
+ else
+ w_deathtypestring = "detonated";
+ }
else if (req == WR_KILLMESSAGE)
- w_deathtypestring = "was blasted by";
+ {
+ if(w_deathtype & HITTYPE_SPLASH)
+ if(w_deathtype & HITTYPE_BOUNCE) // (must be secondary then)
+ w_deathtypestring = "didn't see #'s grenade";
+ else // unchecked: SECONDARY
+ w_deathtypestring = "almost dodged #'s grenade";
+ else // unchecked: SECONDARY, BOUNCE
+ w_deathtypestring = "ate #'s grenade";
+ }
return TRUE;
};
Modified: trunk/data/qcsrc/server/w_hagar.qc
===================================================================
--- trunk/data/qcsrc/server/w_hagar.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/w_hagar.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -13,7 +13,7 @@
sound (self, CHAN_PROJECTILE, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM);
self.event_damage = SUB_Null;
- RadiusDamage (self, self.realowner, cvar("g_balance_hagar_primary_damage"), cvar("g_balance_hagar_primary_edgedamage"), cvar("g_balance_hagar_primary_radius"), world, cvar("g_balance_hagar_primary_force"), WEP_HAGAR);
+ RadiusDamage (self, self.realowner, cvar("g_balance_hagar_primary_damage"), cvar("g_balance_hagar_primary_edgedamage"), cvar("g_balance_hagar_primary_radius"), world, cvar("g_balance_hagar_primary_force"), self.projectiledeathtype, other);
remove (self);
}
@@ -33,7 +33,7 @@
sound (self, CHAN_PROJECTILE, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM);
self.event_damage = SUB_Null;
- RadiusDamage (self, self.realowner, cvar("g_balance_hagar_secondary_damage"), cvar("g_balance_hagar_secondary_edgedamage"), cvar("g_balance_hagar_secondary_radius"), world, cvar("g_balance_hagar_secondary_force"), WEP_HAGAR);
+ RadiusDamage (self, self.realowner, cvar("g_balance_hagar_secondary_damage"), cvar("g_balance_hagar_secondary_edgedamage"), cvar("g_balance_hagar_secondary_radius"), world, cvar("g_balance_hagar_secondary_force"), self.projectiledeathtype, other);
remove (self);
}
@@ -48,7 +48,7 @@
if (other == self.owner)
return;
- self.think ();
+ self.use ();
}
void W_Hagar_Touch2 (void)
@@ -60,12 +60,13 @@
}
if(self.cnt > 0 || other.takedamage == DAMAGE_AIM) {
- self.think();
+ self.use();
} else {
self.cnt++;
pointparticles(particleeffectnum("hagar_bounce"), self.origin, self.velocity, 1);
self.angles = vectoangles (self.velocity);
self.owner = world;
+ self.projectiledeathtype |= HITTYPE_BOUNCE;
}
}
@@ -93,10 +94,12 @@
missile.bot_dodge = TRUE;
missile.bot_dodgerating = cvar("g_balance_hagar_primary_damage");
missile.touch = W_Hagar_Touch;
- missile.think = W_Hagar_Explode;
+ missile.use = W_Hagar_Explode;
+ missile.think = adaptor_think2use;
missile.nextthink = time + cvar("g_balance_hagar_primary_lifetime");
missile.solid = SOLID_BBOX;
missile.scale = 0.4; // BUG: the model is too big
+ missile.projectiledeathtype = WEP_HAGAR;
setorigin (missile, w_shotorg);
setmodel (missile, "models/hagarmissile.mdl"); // precision set below
setsize (missile, '0 0 0', '0 0 0');
@@ -133,10 +136,12 @@
missile.bot_dodgerating = cvar("g_balance_hagar_secondary_damage");
missile.touch = W_Hagar_Touch2;
missile.cnt = 0;
- missile.think = W_Hagar_Explode;
+ missile.use = W_Hagar_Explode;
+ missile.think = adaptor_think2use;
missile.nextthink = time + cvar("g_balance_hagar_secondary_lifetime");
missile.solid = SOLID_BBOX;
missile.scale = 0.4; // BUG: the model is too big
+ missile.projectiledeathtype = WEP_HAGAR | HITTYPE_SECONDARY;
setorigin (missile, w_shotorg);
setmodel (missile, "models/hagarmissile.mdl"); // precision set below
setsize (missile, '0 0 0', '0 0 0');
@@ -203,8 +208,14 @@
return self.ammo_rockets >= cvar("g_balance_hagar_primary_ammo");
else if (req == WR_CHECKAMMO2)
return self.ammo_rockets >= cvar("g_balance_hagar_secondary_ammo");
- // else if (req == WR_SUICIDEMESSAGE) // TODO
+ else if (req == WR_SUICIDEMESSAGE)
+ w_deathtypestring = "played with tiny rockets";
else if (req == WR_KILLMESSAGE)
- w_deathtypestring = "was pummeled by";
+ {
+ if(w_deathtype & HITTYPE_BOUNCE) // must be secondary; unchecked: SPLASH
+ w_deathtypestring = "hoped #'s missiles wouldn't bounce";
+ else // unchecked: SPLASH, SECONDARY
+ w_deathtypestring = "was pummeled by";
+ }
return TRUE;
};
Modified: trunk/data/qcsrc/server/w_laser.qc
===================================================================
--- trunk/data/qcsrc/server/w_laser.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/w_laser.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -24,9 +24,9 @@
self.event_damage = SUB_Null;
if (self.dmg)
- RadiusDamage (self, self.owner, cvar("g_balance_laser_secondary_damage"), cvar("g_balance_laser_secondary_edgedamage"), cvar("g_balance_laser_secondary_radius"), world, cvar("g_balance_laser_secondary_force"), WEP_LASER);
+ RadiusDamage (self, self.owner, cvar("g_balance_laser_secondary_damage"), cvar("g_balance_laser_secondary_edgedamage"), cvar("g_balance_laser_secondary_radius"), world, cvar("g_balance_laser_secondary_force"), self.projectiledeathtype, other);
else
- RadiusDamage (self, self.owner, cvar("g_balance_laser_primary_damage"), cvar("g_balance_laser_primary_edgedamage"), cvar("g_balance_laser_primary_radius"), world, cvar("g_balance_laser_primary_force"), WEP_LASER);
+ RadiusDamage (self, self.owner, cvar("g_balance_laser_primary_damage"), cvar("g_balance_laser_primary_edgedamage"), cvar("g_balance_laser_primary_radius"), world, cvar("g_balance_laser_primary_force"), self.projectiledeathtype, other);
sound (self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
remove (self);
@@ -51,6 +51,9 @@
missile.movetype = MOVETYPE_FLY;
missile.solid = SOLID_BBOX;
+ missile.projectiledeathtype = WEP_LASER;
+ if(issecondary)
+ missile.projectiledeathtype |= HITTYPE_SECONDARY;
setmodel (missile, "models/laser.mdl"); // precision set below
setsize (missile, '0 0 0', '0 0 0');
@@ -133,7 +136,11 @@
return TRUE;
else if (req == WR_CHECKAMMO2)
return TRUE;
- // else if (req == WR_SUICIDEMESSAGE) // TODO
- // else if (req == WR_KILLMESSAGE) // TODO
+ else if (req == WR_SUICIDEMESSAGE)
+ w_deathtypestring = "lasered himself to hell";
+ else if (req == WR_KILLMESSAGE)
+ {
+ w_deathtypestring = "was lasered to death by"; // unchecked: SPLASH
+ }
return TRUE;
};
Modified: trunk/data/qcsrc/server/w_porto.qc
===================================================================
--- trunk/data/qcsrc/server/w_porto.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/w_porto.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -274,6 +274,6 @@
else if (req == WR_SUICIDEMESSAGE)
w_deathtypestring = "did the impossible";
else if (req == WR_KILLMESSAGE)
- w_deathtypestring = "felt # doing the impossible";
+ w_deathtypestring = "felt # doing the impossible to him";
return TRUE;
};
Modified: trunk/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_rocketlauncher.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/w_rocketlauncher.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -12,7 +12,7 @@
//effect (org2, "models/sprites/rockexpl.spr", 0, 12, 35);
self.event_damage = SUB_Null;
- RadiusDamage (self, self.owner, cvar("g_balance_rocketlauncher_damage"), cvar("g_balance_rocketlauncher_edgedamage"), cvar("g_balance_rocketlauncher_radius"), world, cvar("g_balance_rocketlauncher_force"), WEP_ROCKET_LAUNCHER);
+ RadiusDamage (self, self.owner, cvar("g_balance_rocketlauncher_damage"), cvar("g_balance_rocketlauncher_edgedamage"), cvar("g_balance_rocketlauncher_radius"), world, cvar("g_balance_rocketlauncher_force"), self.projectiledeathtype, other);
if (self.owner.weapon == WEP_ROCKET_LAUNCHER)
{
@@ -89,6 +89,8 @@
: (vlen(NearestPointOnBox(self.owner, self.origin) - self.origin) > cvar("g_balance_rocketlauncher_radius")) // safety device
)
{
+ other = world;
+ self.projectiledeathtype |= HITTYPE_BOUNCE;
W_Rocket_Explode ();
}
else
@@ -105,6 +107,8 @@
self.nextthink = time;
if (time > self.cnt)
{
+ other = world;
+ self.projectiledeathtype |= HITTYPE_BOUNCE;
W_Rocket_Explode ();
return;
}
@@ -238,6 +242,7 @@
missile.movetype = MOVETYPE_FLY;
missile.solid = SOLID_BBOX;
+ missile.projectiledeathtype = WEP_ROCKET_LAUNCHER;
setmodel (missile, "models/rocket.md3"); // precision set below
setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
@@ -435,6 +440,13 @@
else if (req == WR_SUICIDEMESSAGE)
w_deathtypestring = "exploded";
else if (req == WR_KILLMESSAGE)
- w_deathtypestring = "almost dodged #'s rocket";
+ {
+ if(w_deathtype & HITTYPE_BOUNCE) // (remote detonation)
+ w_deathtypestring = "got too close to #'s rocket";
+ else if(w_deathtype & HITTYPE_SPLASH)
+ w_deathtypestring = "almost dodged #'s rocket";
+ else
+ w_deathtypestring = "ate #'s rocket";
+ }
return TRUE;
};
Modified: trunk/data/qcsrc/server/w_shotgun.qc
===================================================================
--- trunk/data/qcsrc/server/w_shotgun.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/w_shotgun.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -58,7 +58,7 @@
W_SetupShot (self, '25 8 -8', TRUE, 5, "weapons/shotgun_fire.wav");
for (sc = 0;sc < bullets;sc = sc + 1)
- fireBullet (w_shotorg, w_shotdir, spread, d, f, WEP_SHOTGUN, sc < 3);
+ fireBullet (w_shotorg, w_shotdir, spread, d, f, WEP_SHOTGUN | HITTYPE_SECONDARY, sc < 3);
if not(self.items & IT_UNLIMITED_AMMO)
self.ammo_shells = self.ammo_shells - cvar("g_balance_shotgun_secondary_ammo");
@@ -144,6 +144,8 @@
else if (req == WR_SUICIDEMESSAGE)
w_deathtypestring = "did the impossible";
else if (req == WR_KILLMESSAGE)
- w_deathtypestring = "was gunned by";
+ {
+ w_deathtypestring = "was gunned by"; // unchecked: SECONDARY
+ }
return TRUE;
};
Modified: trunk/data/qcsrc/server/w_uzi.qc
===================================================================
--- trunk/data/qcsrc/server/w_uzi.qc 2008-10-08 19:49:49 UTC (rev 4679)
+++ trunk/data/qcsrc/server/w_uzi.qc 2008-10-09 06:31:51 UTC (rev 4680)
@@ -11,7 +11,7 @@
};
.float uzi_bulletcounter;
-void W_Uzi_Attack (void)
+void W_Uzi_Attack (float deathtype)
{
local entity flash, flash2;
@@ -34,9 +34,9 @@
ATTACK_FINISHED(self) = time + cvar("g_balance_uzi_first_refire");
if (self.uzi_bulletcounter == 1)
- fireBullet (w_shotorg, w_shotdir, cvar("g_balance_uzi_first_spread"), cvar("g_balance_uzi_first_damage"), cvar("g_balance_uzi_first_force"), WEP_UZI, TRUE);
+ fireBullet (w_shotorg, w_shotdir, cvar("g_balance_uzi_first_spread"), cvar("g_balance_uzi_first_damage"), cvar("g_balance_uzi_first_force"), deathtype, TRUE);
else
- fireBullet (w_shotorg, w_shotdir, cvar("g_balance_uzi_sustained_spread"), cvar("g_balance_uzi_sustained_damage"), cvar("g_balance_uzi_sustained_force"), WEP_UZI, (self.uzi_bulletcounter & 3) == 0);
+ fireBullet (w_shotorg, w_shotdir, cvar("g_balance_uzi_sustained_spread"), cvar("g_balance_uzi_sustained_damage"), cvar("g_balance_uzi_sustained_force"), deathtype, (self.uzi_bulletcounter & 3) == 0);
pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
@@ -91,7 +91,7 @@
}
ATTACK_FINISHED(self) = time + cvar("g_balance_uzi_refire");
self.uzi_bulletcounter = self.uzi_bulletcounter + 1;
- W_Uzi_Attack();
+ W_Uzi_Attack(WEP_UZI);
weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_uzi_sustained_refire"), uzi_fire1_02);
}
else
@@ -115,14 +115,14 @@
if (weapon_prepareattack(0, cvar("g_balance_uzi_refire")))
{
self.uzi_bulletcounter = 1;
- W_Uzi_Attack();
+ W_Uzi_Attack(WEP_UZI);
weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_uzi_sustained_refire"), uzi_fire1_02);
}
if (self.BUTTON_ATCK2)
if (weapon_prepareattack(1, cvar("g_balance_uzi_refire")))
{
self.uzi_bulletcounter = 1;
- W_Uzi_Attack();
+ W_Uzi_Attack(WEP_UZI | HITTYPE_SECONDARY);
weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_uzi_sustained_refire"), w_ready);
}
}
@@ -150,6 +150,11 @@
else if (req == WR_SUICIDEMESSAGE)
w_deathtypestring = "did the impossible";
else if (req == WR_KILLMESSAGE)
- w_deathtypestring = "was riddled full of holes by";
+ {
+ if(w_deathtype & HITTYPE_SECONDARY)
+ w_deathtypestring = "was sniped by";
+ else
+ w_deathtypestring = "was riddled full of holes by";
+ }
return TRUE;
};
More information about the nexuiz-commits
mailing list