diff --git a/src/client/valve/hud.c b/src/client/valve/hud.c index c3c229d8..7990fad6 100644 --- a/src/client/valve/hud.c +++ b/src/client/valve/hud.c @@ -345,7 +345,7 @@ HUD_DrawLogo(void) drawpic( pos, sprintf("sprites/640_logo.spr_%i.tga", f), - [256, 48], + [256,48], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE diff --git a/src/gs-entbase/server/defs.h b/src/gs-entbase/server/defs.h index cdd75a7a..7dc8f326 100644 --- a/src/gs-entbase/server/defs.h +++ b/src/gs-entbase/server/defs.h @@ -14,7 +14,7 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define GS_DEVELOPER +//#define GS_DEVELOPER .float gflags; diff --git a/src/gs-entbase/server/func_breakable.cpp b/src/gs-entbase/server/func_breakable.cpp index 5ea698a4..e4687cdc 100755 --- a/src/gs-entbase/server/func_breakable.cpp +++ b/src/gs-entbase/server/func_breakable.cpp @@ -157,10 +157,10 @@ void func_breakable::PlayerTouch(void) if (fDamage >= health) { touch = __NULL__; - Damage_Apply(this, other, fDamage, absmin, FALSE); + Damage_Apply(this, other, fDamage, absmin, FALSE, 0); if ((m_iMaterial == MATERIAL_GLASS) || (m_iMaterial == MATERIAL_COMPUTER)) { - Damage_Apply(other, this, fDamage / 4, other.origin, FALSE); + Damage_Apply(other, this, fDamage / 4, other.origin, FALSE, 0); } } } diff --git a/src/gs-entbase/server/func_door_rotating.cpp b/src/gs-entbase/server/func_door_rotating.cpp index 1469ec21..90cb3623 100644 --- a/src/gs-entbase/server/func_door_rotating.cpp +++ b/src/gs-entbase/server/func_door_rotating.cpp @@ -238,7 +238,7 @@ void func_door_rotating::Touch(void) void func_door_rotating::Blocked(void) { if (m_iDamage) { - Damage_Apply(other, this, m_iDamage, other.origin, FALSE); + Damage_Apply(other, this, m_iDamage, other.origin, FALSE, 0); } if (m_flWait >= 0) { diff --git a/src/gs-entbase/server/func_rotating.cpp b/src/gs-entbase/server/func_rotating.cpp index bed15a2a..2f931106 100644 --- a/src/gs-entbase/server/func_rotating.cpp +++ b/src/gs-entbase/server/func_rotating.cpp @@ -72,7 +72,7 @@ void func_rotating :: Blocked ( void ) } if (other.takedamage == DAMAGE_YES) { - Damage_Apply(other, this, m_flDamage, other.origin, TRUE); + Damage_Apply(other, this, m_flDamage, other.origin, TRUE, 0); } } diff --git a/src/gs-entbase/server/func_train.cpp b/src/gs-entbase/server/func_train.cpp index 3eeb71cf..ddc0969d 100644 --- a/src/gs-entbase/server/func_train.cpp +++ b/src/gs-entbase/server/func_train.cpp @@ -89,7 +89,7 @@ class func_train:CBaseTrigger void func_train::Blocked(void) { - Damage_Apply(other, this, m_flDamage, other.origin, TRUE); + Damage_Apply(other, this, m_flDamage, other.origin, TRUE, 0); } void diff --git a/src/gs-entbase/server/infodecal.cpp b/src/gs-entbase/server/infodecal.cpp index c1f09ea0..4c5f204a 100644 --- a/src/gs-entbase/server/infodecal.cpp +++ b/src/gs-entbase/server/infodecal.cpp @@ -53,6 +53,7 @@ void infodecal(void) int i = 0; int b = 0; float frac = 1.0f; + vector endpos = [0,0,0]; vector vpos = self.origin; if (serverkeyfloat("*bspversion") != 30) { @@ -113,6 +114,7 @@ void infodecal(void) for (i = 0; i < 6; i++) { if ( tmp[i].fraction < frac ) { frac = tmp[i].fraction; + endpos = tmp[i].endpos; b = i; } } @@ -126,6 +128,11 @@ void infodecal(void) return; } + /* FIXME: more universal check? */ + if (getsurfacetexture(trace_ent, getsurfacenearpoint(trace_ent, endpos)) == "sky") { + return; + } + makevectors(vectoangles(tmp[b].endpos - self.origin )); vector cpl = v_forward - (v_forward * tmp[b].normal) * tmp[b].normal; diff --git a/src/gs-entbase/server/item_food.cpp b/src/gs-entbase/server/item_food.cpp index e4f26f8e..b0725b14 100644 --- a/src/gs-entbase/server/item_food.cpp +++ b/src/gs-entbase/server/item_food.cpp @@ -41,7 +41,7 @@ void item_food :: Touch ( void ) bevOwner.m_iReady = TRUE; } - Damage_Apply(other, this, -1, other.origin, FALSE); + Damage_Apply(other, this, -1, other.origin, FALSE, 0); solid = SOLID_NOT; remove( this ); } diff --git a/src/gs-entbase/server/trigger_hurt.cpp b/src/gs-entbase/server/trigger_hurt.cpp index e5a670d0..392785bc 100644 --- a/src/gs-entbase/server/trigger_hurt.cpp +++ b/src/gs-entbase/server/trigger_hurt.cpp @@ -94,7 +94,7 @@ void trigger_hurt::Touch(void) } } - Damage_Apply(other, this, m_iDamage, other.origin, FALSE); + Damage_Apply(other, this, m_iDamage, other.origin, FALSE, 0); // Shut it down if used once if (spawnflags & SF_HURT_ONCE) { diff --git a/src/server/cstrike/client.c b/src/server/cstrike/client.c index 2db350ed..11c9fc77 100644 --- a/src/server/cstrike/client.c +++ b/src/server/cstrike/client.c @@ -35,7 +35,7 @@ Suicide command 'kill' executes this function. */ void Game_ClientKill(void) { - Damage_Apply(self, self, self.health, self.origin, TRUE); + Damage_Apply(self, self, self.health, self.origin, TRUE, 0); } /* diff --git a/src/server/cstrike/damage.c b/src/server/cstrike/damage.c index 3b272b29..5b8f3660 100644 --- a/src/server/cstrike/damage.c +++ b/src/server/cstrike/damage.c @@ -97,7 +97,7 @@ Damage_Apply Generic function that applies damage, pain and suffering ================= */ -void Damage_Apply(entity eTarget, entity eAttacker, float iDamage, vector vHitPos, int iSkipArmor) +void Damage_Apply(entity eTarget, entity eAttacker, float iDamage, vector vHitPos, int iSkipArmor, int iWeapon) { if (eTarget.flags & FL_GODMODE) { return; @@ -278,7 +278,7 @@ Damage_Radius(vector org, entity attacker, float dmg, float radius, int check) new_dmg = rint(dmg * diff); if (diff > 0) { - Damage_Apply(e, attacker, new_dmg, pos, 0); + Damage_Apply(e, attacker, new_dmg, pos, FALSE, 0); /* approximate, feel free to tweak */ if (e.movetype == MOVETYPE_WALK) { diff --git a/src/server/cstrike/defs.h b/src/server/cstrike/defs.h index acfde0df..0318e3d5 100755 --- a/src/server/cstrike/defs.h +++ b/src/server/cstrike/defs.h @@ -109,6 +109,6 @@ void Ammo_BuySecondary(void); void Animation_PlayerTop(float fFrame); void Animation_PlayerTopTemp(float fFrame, float fTime); -void Damage_Apply(entity eTarget, entity eAttacker, float iDamage, vector vHitPos, int iSkipArmor); +void Damage_Apply(entity, entity, float, vector, int, int); #define NULL __NULL__ diff --git a/src/server/defs.h b/src/server/defs.h index b7d367f4..f4929d7a 100644 --- a/src/server/defs.h +++ b/src/server/defs.h @@ -24,9 +24,9 @@ void Effect_CreateExplosion( vector vPos ); void Effect_GibHuman( vector vPos); void Footsteps_Update( void ); void Vox_Broadcast(string sMessage); -void TraceAttack_FireBullets( int iShots, vector vPos, int iDamage, vector vecAccuracy); +void TraceAttack_FireBullets(int , vector, int, vector, int); void Damage_Radius( vector vOrigin, entity eAttacker, float fDamage, float fRadius, int iCheckClip ); -void Damage_Apply( entity eTarget, entity eAttacker, float fDamage, vector vHitPos, int iSkipArmor ); +void Damage_Apply( entity, entity, float, vector, int, int); void Client_TriggerCamera( entity eTarget, vector vPos, vector vEndPos, float fResetTime ); void Game_Input(void); diff --git a/src/server/nodes.c b/src/server/nodes.c index 0e42133d..fa1e51c8 100644 --- a/src/server/nodes.c +++ b/src/server/nodes.c @@ -144,7 +144,7 @@ Nodes_Init(void) dprint("[^2NODES^7] Rebuilding node tree..."); /* run through the ents and rebuild the tree */ - for (entity a = world; a = find(a, ::classname, "info_node");) { + for (entity a = world; (a = find(a, ::classname, "info_node"));) { int iID = g_iNodes++; g_pNodes = memrealloc(g_pNodes, sizeof(node_t), iID, g_iNodes); node_t *n = g_pNodes + iID; diff --git a/src/server/rewolf/client.c b/src/server/rewolf/client.c index bda61bab..af852ea1 100644 --- a/src/server/rewolf/client.c +++ b/src/server/rewolf/client.c @@ -58,7 +58,7 @@ Game_ClientDisconnect(void) void Game_ClientKill(void) { - Damage_Apply(self, self, self.health, self.origin, TRUE); + Damage_Apply(self, self, self.health, self.origin, TRUE, 0); } void diff --git a/src/server/scihunt/client.c b/src/server/scihunt/client.c index c7ed31d2..5d3f9278 100644 --- a/src/server/scihunt/client.c +++ b/src/server/scihunt/client.c @@ -47,7 +47,7 @@ void Game_ClientDisconnect(void) void Game_ClientKill(void) { - Damage_Apply(self, self, self.health, self.origin, TRUE); + Damage_Apply(self, self, self.health, self.origin, TRUE, 0); } void Game_PlayerPreThink(void) { diff --git a/src/server/tfc/client.c b/src/server/tfc/client.c index aa413686..9f255e10 100644 --- a/src/server/tfc/client.c +++ b/src/server/tfc/client.c @@ -58,7 +58,7 @@ Game_ClientDisconnect(void) void Game_ClientKill(void) { - Damage_Apply(self, self, self.health, self.origin, TRUE); + Damage_Apply(self, self, self.health, self.origin, TRUE, 0); } void diff --git a/src/server/traceattack.c b/src/server/traceattack.c index 75548056..87edf963 100644 --- a/src/server/traceattack.c +++ b/src/server/traceattack.c @@ -24,7 +24,7 @@ /* cast a single bullet shot */ void -TraceAttack_FireSingle(vector vPos, vector vAngle, int iDamage) +TraceAttack_FireSingle(vector vPos, vector vAngle, int iDamage, int iWeapon) { string tex; vector range; @@ -70,7 +70,7 @@ TraceAttack_FireSingle(vector vPos, vector vAngle, int iDamage) iDamage *= 3; } #endif - Damage_Apply(trace_ent, self, iDamage, trace_endpos, FALSE); + Damage_Apply(trace_ent, self, iDamage, trace_endpos, FALSE, iWeapon); } if (trace_ent.iBleeds == TRUE) { @@ -110,14 +110,14 @@ TraceAttack_FireSingle(vector vPos, vector vAngle, int iDamage) #ifdef PENETRATION if (iTotalPenetrations > 0) { iTotalPenetrations -= 1; - TraceAttack_FireSingle(trace_endpos + (v_forward * 2), vAngle, iDamage); + TraceAttack_FireSingle(trace_endpos + (v_forward * 2), vAngle, iDamage, iWeapon); } #endif } /* fire a given amount of shots */ void -TraceAttack_FireBullets(int iShots, vector vPos, int iDamage, vector vecSpread) +TraceAttack_FireBullets(int iShots, vector vPos, int iDamage, vector vecSpread, int iWeapon) { vector vDir; makevectors(self.v_angle); @@ -129,7 +129,7 @@ TraceAttack_FireBullets(int iShots, vector vPos, int iDamage, vector vecSpread) vDir = aim(self, 100000); vDir += Math_CRandom() * vecSpread[0] * v_right; vDir += Math_CRandom() * vecSpread[1] * v_up; - TraceAttack_FireSingle(vPos, vDir, iDamage); + TraceAttack_FireSingle(vPos, vDir, iDamage, iWeapon); iShots--; } } diff --git a/src/server/valve/client.c b/src/server/valve/client.c index 4eb007db..bea820eb 100644 --- a/src/server/valve/client.c +++ b/src/server/valve/client.c @@ -54,7 +54,7 @@ Game_ClientDisconnect(void) void Game_ClientKill(void) { - Damage_Apply(self, self, self.health, self.origin, TRUE); + Damage_Apply(self, self, self.health, self.origin, TRUE, WEAPON_NONE); } void @@ -162,6 +162,42 @@ Game_RunClientCommand(void) QPhysics_Run(self); } + +void +Game_SetNewParms(void) +{ + parm1 = + parm2 = + parm3 = + parm4 = + parm5 = + parm6 = + parm7 = + parm8 = + parm9 = + parm10 = + parm11 = + parm12 = + parm13 = + parm14 = + parm15 = + parm16 = + parm17 = + parm18 = + parm19 = + parm20 = + parm21 = + parm22 = + parm23 = + parm24 = + parm25 = + parm26 = + parm27 = + parm28 = + parm29 = + parm30 = 0; +} + void Game_DecodeChangeParms(void) { @@ -204,6 +240,7 @@ void Game_SetChangeParms(void) { player pl = (player)self; + parm1 = g_landmarkpos[0]; parm2 = g_landmarkpos[1]; parm3 = g_landmarkpos[2]; @@ -215,7 +252,6 @@ Game_SetChangeParms(void) parm9 = pl.velocity[2]; parm10 = pl.g_items; parm11 = pl.activeweapon; - parm12 = pl.ammo_9mm; parm13 = pl.ammo_357; parm14 = pl.ammo_buckshot; @@ -228,7 +264,6 @@ Game_SetChangeParms(void) parm21 = pl.ammo_tripmine; parm22 = pl.ammo_snark; parm23 = pl.ammo_hornet; - parm24 = pl.glock_mag; parm25 = pl.mp5_mag; parm26 = pl.python_mag; @@ -356,9 +391,3 @@ Game_ParseClientCommand(string cmd) clientcommand(self, cmd); } - -void -Game_SetNewParms(void) -{ - -} diff --git a/src/server/valve/damage.c b/src/server/valve/damage.c index d5892ce3..22f83365 100644 --- a/src/server/valve/damage.c +++ b/src/server/valve/damage.c @@ -16,12 +16,12 @@ /* someone dieded */ void -Damage_Obituary(entity eCulprit, entity eTarget, float weapon, float flags) +Damage_Obituary(entity c, entity t, float weapon, float flags) { WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET); WriteByte(MSG_MULTICAST, EV_OBITUARY); - WriteString(MSG_MULTICAST, eCulprit.netname); - WriteString(MSG_MULTICAST, eTarget.netname); + WriteString(MSG_MULTICAST, c.netname); + WriteString(MSG_MULTICAST, t.netname); WriteByte(MSG_MULTICAST, weapon); WriteByte(MSG_MULTICAST, flags); msg_entity = self; @@ -30,70 +30,63 @@ Damage_Obituary(entity eCulprit, entity eTarget, float weapon, float flags) /* generic function that applies damage, pain and suffering */ void -Damage_Apply(entity eTarget, entity eCulprit, float fDmg, vector pos, int a) +Damage_Apply(entity t, entity c, float dmg, vector pos, int a, int w) { - if (eTarget.flags & FL_GODMODE) { + if (t.flags & FL_GODMODE) { return; } /* skip armor */ if (!a) - if (eTarget.armor && fDmg > 0) { + if (t.armor && dmg > 0) { float flArmor; float flNewDamage; - flNewDamage = fDmg * 0.2; - flArmor = (fDmg - flNewDamage) * 0.5; + flNewDamage = dmg * 0.2; + flArmor = (dmg - flNewDamage) * 0.5; - if (flArmor > eTarget.armor) { - flArmor = eTarget.armor; + if (flArmor > t.armor) { + flArmor = t.armor; flArmor *= (1/0.5); - flNewDamage = fDmg - flArmor; - eTarget.armor = 0; + flNewDamage = dmg - flArmor; + t.armor = 0; } else { - eTarget.armor -= flArmor; + t.armor -= flArmor; } - fDmg = flNewDamage; + dmg = flNewDamage; } - fDmg = rint(fDmg); - eTarget.health -= fDmg; + dmg = rint(dmg); + t.health -= dmg; - if (fDmg > 0) { - eTarget.dmg_take = fDmg; - eTarget.dmg_inflictor = eCulprit; - } else if (eTarget.max_health && eTarget.health > eTarget.max_health) { - eTarget.health = eTarget.max_health; + if (dmg > 0) { + t.dmg_take = dmg; + t.dmg_inflictor = c; + } else if (t.max_health && t.health > t.max_health) { + t.health = t.max_health; } // Target is dead and a client.... - if (eTarget.health <= 0) { - if (eTarget.flags & FL_CLIENT) { - eTarget.deaths++; - forceinfokey(eTarget, "*deaths", ftos(eTarget.deaths)); + if (t.health <= 0) { + if (t.flags & FL_CLIENT) { + t.deaths++; + forceinfokey(t, "*deaths", ftos(t.deaths)); } - if (eTarget.flags & FL_CLIENT || eTarget.flags & FL_MONSTER) - if (eCulprit.flags & FL_CLIENT) - if (eTarget == eCulprit) - eCulprit.frags--; + if (t.flags & FL_CLIENT || t.flags & FL_MONSTER) + if (c.flags & FL_CLIENT) + if (t == c) + c.frags--; else - eCulprit.frags++; + c.frags++; } entity eOld = self; - self = eTarget; + self = t; if (self.health <= 0) { - if (eTarget.flags & FL_MONSTER || eTarget.flags & FL_CLIENT) { - float w = 0; - /* FIXME: this is unreliable. the culprit might have - * already switched weapons. FIX THIS */ - if (eCulprit.flags & FL_CLIENT) { - player pl = (player)eCulprit; - w = pl.activeweapon; - } - Damage_Obituary(eCulprit, eTarget, w, 0); + if (t.flags & FL_MONSTER || t.flags & FL_CLIENT) { + Damage_Obituary(c, t, w, 0); } self.vDeath(trace_surface_id); } else { @@ -105,30 +98,30 @@ Damage_Apply(entity eTarget, entity eCulprit, float fDmg, vector pos, int a) /* physical check of whether or not we can trace important parts of an ent */ float -Damage_CheckTrace(entity eTarget, vector vecHitPos) +Damage_CheckTrace(entity t, vector vecHitPos) { /* We're lazy. Who cares */ - if (eTarget.solid == SOLID_BSP) { + if (t.solid == SOLID_BSP) { return TRUE; } - traceline(vecHitPos, eTarget.origin, 1, self); + traceline(vecHitPos, t.origin, 1, self); if (trace_fraction == 1) { return TRUE; } - traceline(vecHitPos, eTarget.origin + [15,15,0], 1, self); + traceline(vecHitPos, t.origin + [15,15,0], 1, self); if (trace_fraction == 1) { return TRUE; } - traceline(vecHitPos, eTarget.origin + [-15,-15,0], 1, self); + traceline(vecHitPos, t.origin + [-15,-15,0], 1, self); if (trace_fraction == 1) { return TRUE; } - traceline(vecHitPos, eTarget.origin + [-15,15,0], 1, self); + traceline(vecHitPos, t.origin + [-15,15,0], 1, self); if (trace_fraction == 1) { return TRUE; } - traceline(vecHitPos, eTarget.origin + [15,-15,0], 1, self); + traceline(vecHitPos, t.origin + [15,-15,0], 1, self); if (trace_fraction == 1) { return TRUE; } @@ -169,7 +162,7 @@ Damage_Radius(vector org, entity attacker, float dmg, float radius, int check) new_dmg = rint(dmg * diff); if (diff > 0) { - Damage_Apply(e, attacker, new_dmg, pos, 0); + Damage_Apply(e, attacker, new_dmg, pos, FALSE, 0); /* approximate, feel free to tweak */ if (e.movetype == MOVETYPE_WALK) { diff --git a/src/server/valve/defs.h b/src/server/valve/defs.h index f3976677..1440397f 100644 --- a/src/server/valve/defs.h +++ b/src/server/valve/defs.h @@ -14,4 +14,4 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -void Damage_Apply(entity, entity, float, vector, int); +void Damage_Apply(entity, entity, float, vector, int, int); diff --git a/src/server/valve/item_healthkit.cpp b/src/server/valve/item_healthkit.cpp index 49804b18..fbef9be6 100644 --- a/src/server/valve/item_healthkit.cpp +++ b/src/server/valve/item_healthkit.cpp @@ -30,7 +30,7 @@ void item_healthkit::touch(void) if (other.health >= other.max_health) { return; } - Damage_Apply(other, this, -20, this.origin, TRUE); + Damage_Apply(other, this, -20, this.origin, TRUE, 0); sound(this, CHAN_ITEM, "items/smallmedkit1.wav", 1, ATTN_NORM); Logging_Pickup(other, this, __NULL__); diff --git a/src/shared/cstrike/basegun.c b/src/shared/cstrike/basegun.c index 78438d35..0bf23f01 100644 --- a/src/shared/cstrike/basegun.c +++ b/src/shared/cstrike/basegun.c @@ -141,7 +141,7 @@ float BaseGun_PrimaryFire( void ) { BaseGun_ShotMultiplierHandle( wptTable[ self.weapon ].iBullets ); BaseGun_AccuracyCalc(); - TraceAttack_FireBullets( wptTable[ self.weapon ].iBullets, ( self.origin + self.view_ofs ), wptTable[self.weapon].iDamage, [self.fAccuracy, self.fAccuracy] ); + TraceAttack_FireBullets( wptTable[ self.weapon ].iBullets, ( self.origin + self.view_ofs), wptTable[self.weapon].iDamage, [self.fAccuracy, self.fAccuracy], self.weapon); Animation_ShootWeapon( self ); self.(wptTable[ self.weapon ].iMagfld) -= 1; diff --git a/src/shared/cstrike/basemelee.c b/src/shared/cstrike/basemelee.c index 502213b0..29c7baf1 100755 --- a/src/shared/cstrike/basemelee.c +++ b/src/shared/cstrike/basemelee.c @@ -41,7 +41,7 @@ int BaseMelee_Attack( void ) { Effect_Impact( IMPACT_FLESH, trace_endpos, trace_plane_normal ); sound( self, CHAN_WEAPON, sprintf( "weapons/knife_hit%d.wav", floor( ( random() * 4 ) + 1 ) ), 1, ATTN_NORM ); } - Damage_Apply( trace_ent, self, wptTable[ self.weapon ].iDamage, trace_endpos, FALSE ); + Damage_Apply( trace_ent, self, wptTable[ self.weapon ].iDamage, trace_endpos, FALSE, self.weapon); } else { Effect_Impact( IMPACT_MELEE, trace_endpos, trace_plane_normal ); } diff --git a/src/shared/cstrike/weaponflashbang.c b/src/shared/cstrike/weaponflashbang.c index 08da8ccc..98b5dfeb 100755 --- a/src/shared/cstrike/weaponflashbang.c +++ b/src/shared/cstrike/weaponflashbang.c @@ -124,7 +124,7 @@ void WeaponFLASHBANG_Throw( void ) { return; } if ( other.classname == "func_breakable" ) { - Damage_Apply( other, self, 50, self.origin, FALSE ); + Damage_Apply( other, self, 50, self.origin, FALSE, 0); } sound( self, CHAN_WEAPON, sprintf( "weapons/grenade_hit%d.wav", floor( random() * 3 ) + 1 ), 1, ATTN_NORM ); } diff --git a/src/shared/cstrike/weaponglock18.c b/src/shared/cstrike/weaponglock18.c index 326d3aec..9d1dfcd8 100755 --- a/src/shared/cstrike/weaponglock18.c +++ b/src/shared/cstrike/weaponglock18.c @@ -94,7 +94,7 @@ void WeaponGLOCK18_PrimaryFire( void ) { if ( self.iMag_GLOCK18 ) { BaseGun_ShotMultiplierHandle( 1 ); BaseGun_AccuracyCalc(); - TraceAttack_FireBullets( 1, ( self.origin + self.view_ofs ), 25, [self.fAccuracy,self.fAccuracy]); + TraceAttack_FireBullets( 1, ( self.origin + self.view_ofs ), 25, [self.fAccuracy,self.fAccuracy], WEAPON_GLOCK18); self.iMag_GLOCK18 -= 1; } } diff --git a/src/shared/cstrike/weaponhegrenade.c b/src/shared/cstrike/weaponhegrenade.c index e6e81f33..269d1eb9 100755 --- a/src/shared/cstrike/weaponhegrenade.c +++ b/src/shared/cstrike/weaponhegrenade.c @@ -105,7 +105,7 @@ void WeaponHEGRENADE_Throw( void ) { return; } if ( ( other.classname == "func_breakable" ) && ( other.material == MATERIAL_GLASS ) ) { - Damage_Apply( other, self, other.health, self.origin, FALSE ); + Damage_Apply( other, self, other.health, self.origin, FALSE, WEAPON_HEGRENADE); } sound( self, CHAN_WEAPON, "weapons/he_bounce-1.wav", 1, ATTN_NORM ); diff --git a/src/shared/cstrike/weaponsmokegrenade.c b/src/shared/cstrike/weaponsmokegrenade.c index b90dbdda..dcbe706d 100755 --- a/src/shared/cstrike/weaponsmokegrenade.c +++ b/src/shared/cstrike/weaponsmokegrenade.c @@ -114,7 +114,7 @@ void WeaponSMOKEGRENADE_Throw( void ) { return; } if ( other.classname == "func_breakable" ) { - Damage_Apply( other, self, 50, self.origin, FALSE ); + Damage_Apply( other, self, 50, self.origin, FALSE, 0); self.velocity = Caliber_Reflect( self.velocity, trace_plane_normal ); } sound( self, CHAN_WEAPON, sprintf( "weapons/grenade_hit%d.wav", floor( random() * 3 ) + 1 ), 1, ATTN_NORM ); diff --git a/src/shared/gearbox/w_eagle.c b/src/shared/gearbox/w_eagle.c index a15be6e3..e064d8c2 100644 --- a/src/shared/gearbox/w_eagle.c +++ b/src/shared/gearbox/w_eagle.c @@ -148,12 +148,12 @@ w_eagle_primary(void) /* Actual firing */ if (pl.a_ammo3 == 1) { #ifdef SSQC - TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 34, [0, 0]); + TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 34, [0, 0], WEAPON_EAGLE); #endif pl.w_attack_next = 0.5f; } else { #ifdef SSQC - TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 34, [0.1,0.1]); + TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 34, [0.1,0.1], WEAPON_EAGLE); #endif pl.w_attack_next = 0.2f; } diff --git a/src/shared/gearbox/w_grapple.c b/src/shared/gearbox/w_grapple.c index fe641e69..894a5ebf 100644 --- a/src/shared/gearbox/w_grapple.c +++ b/src/shared/gearbox/w_grapple.c @@ -147,7 +147,7 @@ w_grapple_primary(void) vector src = Weapons_GetCameraPos(); traceline(src, src + (v_forward * 32), FALSE, pl); if (trace_ent.takedamage == DAMAGE_YES && trace_ent.iBleeds) { - Damage_Apply(trace_ent, pl, 25, trace_endpos, FALSE); + Damage_Apply(trace_ent, pl, 25, trace_endpos, FALSE, WEAPON_GRAPPLE); } #endif pl.w_attack_next = 0.5f; diff --git a/src/shared/gearbox/w_knife.c b/src/shared/gearbox/w_knife.c index 5437df53..715e6662 100644 --- a/src/shared/gearbox/w_knife.c +++ b/src/shared/gearbox/w_knife.c @@ -151,7 +151,7 @@ w_knife_primary(void) } if (trace_ent.takedamage) { - Damage_Apply(trace_ent, self, 10, trace_endpos, FALSE ); + Damage_Apply(trace_ent, self, 10, trace_endpos, FALSE, WEAPON_KNIFE); if (!trace_ent.iBleeds) { return; diff --git a/src/shared/gearbox/w_m249.c b/src/shared/gearbox/w_m249.c index 187d2869..65fdb3dc 100644 --- a/src/shared/gearbox/w_m249.c +++ b/src/shared/gearbox/w_m249.c @@ -162,7 +162,7 @@ w_m249_primary(void) View_SetMuzzleflash(MUZZLE_RIFLE); Weapons_ViewPunchAngle([-5,0,0]); #else - TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 8, [0.052,0.052]); + TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 8, [0.052,0.052], WEAPON_M249); int r = (float)input_sequence % 3; switch (r) { diff --git a/src/shared/gearbox/w_penguin.c b/src/shared/gearbox/w_penguin.c index 7ffb49ec..f404d545 100644 --- a/src/shared/gearbox/w_penguin.c +++ b/src/shared/gearbox/w_penguin.c @@ -107,7 +107,7 @@ penguin_ai(void) self.weapon = 0.5f + random(); penguin_squeak(self); input_buttons = 2; - Damage_Apply(self, world, 1, self.origin, TRUE); + Damage_Apply(self, world, 1, self.origin, TRUE, 0); makevectors(self.angles); traceline(self.origin, self.origin + (v_forward * 128), 0, self); @@ -115,7 +115,7 @@ penguin_ai(void) if (trace_ent.takedamage == DAMAGE_YES) { float pit = 100 + random(0,10); sound(self, CHAN_BODY, "squeek/sqk_deploy1.wav", 1.0, ATTN_NORM, pit); - Damage_Apply(trace_ent, self, 10, trace_endpos, FALSE); + Damage_Apply(trace_ent, self.goalentity, 10, trace_endpos, FALSE, WEAPON_PENGUIN); } if (self.aiment.health <= 0) { @@ -157,6 +157,7 @@ w_penguin_deploy(void) { entity pingu = spawn(); pingu.owner = self; + pingu.goalentity = self; pingu.netname = "Penguin"; pingu.classname = "snark"; /* so snarks and pingus don't attack e/o */ setmodel(pingu, "models/w_penguin.mdl"); diff --git a/src/shared/gearbox/w_pipewrench.c b/src/shared/gearbox/w_pipewrench.c index ba70a14b..12e8d548 100644 --- a/src/shared/gearbox/w_pipewrench.c +++ b/src/shared/gearbox/w_pipewrench.c @@ -57,7 +57,7 @@ void w_pipewrench_updateammo(player pl) { #ifdef SSQC - Weapons_UpdateAmmo(pl, __NULL__, __NULL__, __NULL__); + Weapons_UpdateAmmo(pl, -1, -1, -1); #endif } @@ -104,7 +104,7 @@ w_pipewrench_primary(void) } Weapons_MakeVectors(); - src = pl.origin + pl.view_ofs; + src = Weapons_GetCameraPos(); traceline(src, src + (v_forward * 32), FALSE, pl); if (trace_fraction >= 1.0) { @@ -148,7 +148,7 @@ w_pipewrench_primary(void) } if (trace_ent.takedamage) { - Damage_Apply(trace_ent, self, 10, trace_endpos, FALSE ); + Damage_Apply(trace_ent, self, 10, trace_endpos, FALSE, WEAPON_PIPEWRENCH); if (!trace_ent.iBleeds) { return; @@ -193,36 +193,42 @@ w_pipewrench_release(void) vector src; player pl = (player)self; - if (pl.w_attack_next > 0.0f) { + if (pl.w_attack_next > 0.0) { return; } - src = pl.origin + pl.view_ofs; - Weapons_MakeVectors(); - traceline(src, src + v_forward * 64, FALSE, self); - if (pl.a_ammo1 == 1) { #ifdef SSQC int hitsound = 0; string snd; #endif + /* attack! */ + Weapons_MakeVectors(); + src = Weapons_GetCameraPos(); + traceline(src, src + (v_forward * 64), FALSE, pl); + if (trace_fraction < 1.0) { #ifdef SSQC if (trace_ent.takedamage == DAMAGE_YES) { hitsound = floor(random(1, 2)); /* TODO Damage is 45 - 200+ (?) */ - Damage_Apply(trace_ent, self, 200, trace_endpos, FALSE); - } - else { + Damage_Apply(trace_ent, pl, 200, trace_endpos, FALSE, WEAPON_PIPEWRENCH); + } else { hitsound = 3; } + + /* don't bother with decals, we got squibs */ + if (trace_ent.iBleeds) { + Effect_CreateBlood(trace_endpos, [0,0,0]); + } else { + Effect_Impact(IMPACT_MELEE, trace_endpos, trace_plane_normal); + } #endif Weapons_ViewAnimation(PIPE_ATTACKBIGHIT); Weapons_ViewPunchAngle([-10,0,0]); } else { Weapons_ViewAnimation(PIPE_ATTACKBIGMISS); } - #ifdef SSQC snd = "weapons/pwrench_big_miss.wav"; switch (hitsound) { @@ -244,7 +250,7 @@ w_pipewrench_release(void) } /* Pure cosmetics start here */ - if (pl.w_idle_next) { + if (pl.w_idle_next > 0.0) { return; } @@ -313,7 +319,7 @@ weapon_t w_pipewrench = .holster = w_pipewrench_holster, .primary = w_pipewrench_primary, .secondary = w_pipewrench_secondary, - .reload = __NULL__, + .reload = w_pipewrench_release, .release = w_pipewrench_release, .crosshair = __NULL__, .precache = w_pipewrench_precache, diff --git a/src/shared/gearbox/w_shockrifle.c b/src/shared/gearbox/w_shockrifle.c index c96e95c6..9f117cbe 100644 --- a/src/shared/gearbox/w_shockrifle.c +++ b/src/shared/gearbox/w_shockrifle.c @@ -14,6 +14,10 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#ifdef CSQC +var int PART_SHOCKPIECE; +#endif + enum { SHOCKRIFLE_IDLE1, @@ -35,6 +39,10 @@ w_shockrifle_precache(void) precache_sound("weapons/shock_fire.wav"); precache_sound("weapons/shock_impact.wav"); precache_sound("weapons/shock_recharge.wav"); + +#ifdef CSQC + PART_SHOCKPIECE = particleeffectnum("shockrifle.shockrifle_piece"); +#endif } int @@ -101,8 +109,13 @@ w_shockrifle_shoothornet(void) { static void Hornet_Touch(void) { if (other.takedamage == DAMAGE_YES) { - Damage_Apply(other, self.owner, 10, trace_endpos, FALSE); + Damage_Apply(other, self.owner, 10, trace_endpos, FALSE, WEAPON_SHOCKRIFLE); + } + + if (other.iBleeds) { + Effect_CreateBlood(trace_endpos, [0,0,0]); } else { + Effect_CreateSpark(self.origin, trace_plane_normal); } remove(self); } @@ -153,6 +166,7 @@ w_shockrifle_release(void) } else { Weapons_ViewAnimation(SHOCKRIFLE_IDLE2); } + pl.w_idle_next = 3.333333f; } @@ -185,6 +199,9 @@ w_shockrifle_primary(void) pl.ammo_shock--; Weapons_UpdateAmmo(pl, -1, pl.ammo_shock, -1); #else + Weapons_MakeVectors(); + vector src = Weapons_GetCameraPos() + (v_forward * 16) + (v_up * -8); + pointparticles(PART_SHOCKPIECE, src, v_forward * 1000, 1); pl.a_ammo2--; #endif @@ -278,8 +295,8 @@ weapon_t w_shockrifle = .draw = w_shockrifle_draw, .holster = w_shockrifle_holster, .primary = w_shockrifle_primary, - .secondary = __NULL__, - .reload = __NULL__, + .secondary = w_shockrifle_release, + .reload = w_shockrifle_release, .release = w_shockrifle_release, .crosshair = w_shockrifle_crosshair, .precache = w_shockrifle_precache, diff --git a/src/shared/gearbox/w_sniperrifle.c b/src/shared/gearbox/w_sniperrifle.c index cce02016..8b8be3dd 100644 --- a/src/shared/gearbox/w_sniperrifle.c +++ b/src/shared/gearbox/w_sniperrifle.c @@ -120,7 +120,7 @@ w_sniperrifle_primary(void) /* Actual firing */ #ifdef SSQC - TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 40, [0.00873, 0.00873]); + TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 40, [0.00873, 0.00873], WEAPON_SNIPERRIFLE); Weapons_PlaySound(pl, CHAN_WEAPON, "weapons/sniper_fire.wav", 1, ATTN_NORM); pl.sniper_mag--; @@ -213,9 +213,9 @@ w_sniperrifle_crosshair(void) #ifdef CSQC player pl = (player)self; static vector cross_pos; - + if (pl.viewzoom == 1.0f) { - cross_pos = (video_res / 2) + [-12,-12]; + cross_pos = video_mins + (video_res / 2) + [-12,-12]; drawsubpic( cross_pos, [24,24], @@ -227,7 +227,7 @@ w_sniperrifle_crosshair(void) DRAWFLAG_NORMAL ); } else { - cross_pos = (video_res / 2) + [-128,-128]; + cross_pos = video_mins + (video_res / 2) + [-128,-128]; drawsubpic( cross_pos, [256,256], diff --git a/src/shared/gearbox/w_sporelauncher.c b/src/shared/gearbox/w_sporelauncher.c index fa81ad8f..83dcd762 100644 --- a/src/shared/gearbox/w_sporelauncher.c +++ b/src/shared/gearbox/w_sporelauncher.c @@ -131,7 +131,7 @@ w_sporelauncher_primary(void) string hitsnd; if (other.takedamage == DAMAGE_YES) { - Damage_Apply(other, self.owner, 50, trace_endpos, FALSE); + Damage_Apply(other, self.owner, 50, trace_endpos, FALSE, WEAPON_SPORELAUNCHER); } r = floor(random(0,3)); diff --git a/src/shared/math.h b/src/shared/math.h index c71de036..bccc9cfd 100644 --- a/src/shared/math.h +++ b/src/shared/math.h @@ -106,7 +106,7 @@ void QPhysics_Run ( entity eTarget ) if ( ( self.flags & FL_ONGROUND ) && self.movetype == MOVETYPE_WALK && ( flFallVel > 580 )) { float fFallDamage = ( flFallVel - 580 ) * ( 100 / ( 1024 - 580 ) ); - Damage_Apply( self, world, fFallDamage, self.origin, FALSE ); + Damage_Apply( self, world, fFallDamage, self.origin, FALSE, 0); sound(self, CHAN_AUTO, "player/pl_fallpain3.wav", 1.0, ATTN_NORM); } #endif diff --git a/src/shared/scihunt/w_cannon.c b/src/shared/scihunt/w_cannon.c index 2d6f67e3..8958a222 100644 --- a/src/shared/scihunt/w_cannon.c +++ b/src/shared/scihunt/w_cannon.c @@ -135,7 +135,7 @@ void w_cannon_primary(void) return; } - TraceAttack_FireBullets(20, pl.origin + pl.view_ofs, 5, [0.08716,0.04362]); + TraceAttack_FireBullets(20, pl.origin + pl.view_ofs, 5, [0.08716,0.04362], WEAPON_CANNON); pl.cannon_mag -= 2; Weapons_PlaySound(pl, CHAN_WEAPON, "cannon/fire.wav", 1, ATTN_NORM); Weapons_UpdateAmmo(pl, pl.cannon_mag, pl.ammo_buckshot, __NULL__); @@ -165,7 +165,7 @@ void w_cannon_secondary(void) return; } - TraceAttack_FireBullets(10, pl.origin + pl.view_ofs, 5, [0.08716,0.04362]); + TraceAttack_FireBullets(10, pl.origin + pl.view_ofs, 5, [0.08716,0.04362], WEAPON_CANNON); pl.cannon_mag--; Weapons_PlaySound(pl, CHAN_WEAPON, "cannon/fire.wav", 1, ATTN_NORM); Weapons_UpdateAmmo(pl, pl.cannon_mag, pl.ammo_buckshot, __NULL__); diff --git a/src/shared/scihunt/w_chainsaw.c b/src/shared/scihunt/w_chainsaw.c index 390e3658..bc0f4842 100644 --- a/src/shared/scihunt/w_chainsaw.c +++ b/src/shared/scihunt/w_chainsaw.c @@ -94,7 +94,7 @@ void w_chainsaw_primary(void) pl.velocity = normalize(trace_ent.origin - pl.origin) * 240; } - Damage_Apply(trace_ent, self, 10, trace_endpos, FALSE ); + Damage_Apply(trace_ent, self, 10, trace_endpos, FALSE, WEAPON_CHAINSAW); Weapons_PlaySound(pl, CHAN_WEAPON, "sh/chainsaw_cutintoflesh.wav", 1, ATTN_NORM); } else { Effect_CreateSpark(trace_endpos, trace_plane_normal); diff --git a/src/shared/scihunt/w_hammer.c b/src/shared/scihunt/w_hammer.c index 9e26b0f9..1ea37d1c 100644 --- a/src/shared/scihunt/w_hammer.c +++ b/src/shared/scihunt/w_hammer.c @@ -120,9 +120,9 @@ void w_hammer_release(void) hitsound = floor(random(1, 4)); if (trace_ent.classname == "player") - Damage_Apply(trace_ent, self, 50, trace_endpos, FALSE); + Damage_Apply(trace_ent, self, 50, trace_endpos, FALSE, WEAPON_HAMMER); else - Damage_Apply(trace_ent, self, 100, trace_endpos, FALSE); + Damage_Apply(trace_ent, self, 100, trace_endpos, FALSE, WEAPON_HAMMER); if (trace_ent.classname == "monster_scientist") { trace_ent.movetype = MOVETYPE_TOSS; @@ -142,7 +142,7 @@ void w_hammer_release(void) #ifdef SSQC if (trace_ent.takedamage) { hitsound = floor(random(1, 4)); - Damage_Apply(trace_ent, self, 200, trace_endpos, FALSE); + Damage_Apply(trace_ent, self, 200, trace_endpos, FALSE, WEAPON_HAMMER); } else { if (trace_fraction < 1.0) { hitsound = 4; diff --git a/src/shared/tfc/w_crowbar.c b/src/shared/tfc/w_crowbar.c index af2ec5e9..d9831ec7 100644 --- a/src/shared/tfc/w_crowbar.c +++ b/src/shared/tfc/w_crowbar.c @@ -136,7 +136,7 @@ w_crowbar_primary(void) } if (trace_ent.takedamage) { - Damage_Apply(trace_ent, self, 10, trace_endpos, FALSE ); + Damage_Apply(trace_ent, self, 10, trace_endpos, FALSE, WEAPON_CROWBAR); if (!trace_ent.iBleeds) { return; diff --git a/src/shared/tfc/w_dbs.c b/src/shared/tfc/w_dbs.c index fc75ee71..4078a93a 100644 --- a/src/shared/tfc/w_dbs.c +++ b/src/shared/tfc/w_dbs.c @@ -119,7 +119,7 @@ w_dbs_primary(void) #endif #ifdef SSQC - TraceAttack_FireBullets(4, pl.origin + pl.view_ofs, 14, [0.17365,0.04362]); + TraceAttack_FireBullets(4, pl.origin + pl.view_ofs, 14, [0.17365,0.04362], WEAPON_DBS); Weapons_PlaySound(pl, CHAN_WEAPON, "weapons/sbarrel1.wav", 1, ATTN_NORM); pl.shotgun_mag--; Weapons_UpdateAmmo(pl, pl.shotgun_mag, pl.ammo_shells, __NULL__); diff --git a/src/shared/tfc/w_sbs.c b/src/shared/tfc/w_sbs.c index d4a0535f..1ff50e8d 100644 --- a/src/shared/tfc/w_sbs.c +++ b/src/shared/tfc/w_sbs.c @@ -118,7 +118,7 @@ w_sbs_primary(void) #endif #ifdef SSQC - TraceAttack_FireBullets(4, pl.origin + pl.view_ofs, 6, [0.17365,0.04362]); + TraceAttack_FireBullets(4, pl.origin + pl.view_ofs, 6, [0.17365,0.04362], WEAPON_SBS); Weapons_PlaySound(pl, CHAN_WEAPON, "weapons/sbarrel1.wav", 1, ATTN_NORM); pl.shotgun_mag--; Weapons_UpdateAmmo(pl, pl.shotgun_mag, pl.ammo_shells, __NULL__); diff --git a/src/shared/tfc/w_umbrella.c b/src/shared/tfc/w_umbrella.c index 484178f1..f9212fee 100644 --- a/src/shared/tfc/w_umbrella.c +++ b/src/shared/tfc/w_umbrella.c @@ -139,7 +139,7 @@ w_umbrella_primary(void) } if (trace_ent.takedamage) { - Damage_Apply(trace_ent, self, 10, trace_endpos, FALSE ); + Damage_Apply(trace_ent, self, 10, trace_endpos, FALSE, WEAPON_UMBRELLA); if (!trace_ent.iBleeds) { return; diff --git a/src/shared/tfc/w_wrench.c b/src/shared/tfc/w_wrench.c index ef7c0dff..510d3722 100644 --- a/src/shared/tfc/w_wrench.c +++ b/src/shared/tfc/w_wrench.c @@ -129,7 +129,7 @@ w_wrench_primary(void) } if (trace_ent.takedamage) { - Damage_Apply(trace_ent, self, 10, trace_endpos, FALSE ); + Damage_Apply(trace_ent, self, 10, trace_endpos, FALSE, WEAPON_WRENCH); if (!trace_ent.iBleeds) { return; diff --git a/src/shared/valve/w_crossbow.c b/src/shared/valve/w_crossbow.c index 368c2448..55a61cde 100644 --- a/src/shared/valve/w_crossbow.c +++ b/src/shared/valve/w_crossbow.c @@ -123,20 +123,21 @@ void Crossbolt_Touch(void) { /* walls, etc. */ if (other.takedamage != DAMAGE_YES) { + Effect_CreateSpark(self.origin, trace_plane_normal); sound(self, 1, "weapons/xbow_hit1.wav", 1.0f, ATTN_NORM); remove(self); return; } /* anything else that can take damage */ - Damage_Apply(other, self.owner, 50, trace_endpos, FALSE); + Damage_Apply(other, self.owner, 50, trace_endpos, FALSE, WEAPON_CROSSBOW); if (random() < 0.5) { sound(self, 1, "weapons/xbow_hitbod1.wav", 1.0f, ATTN_NORM); } else { sound(self, 1, "weapons/xbow_hitbod2.wav", 1.0f, ATTN_NORM); } - if (other.iBleeds == TRUE) { + if (other.iBleeds == FALSE) { Effect_CreateSpark(self.origin, trace_plane_normal); } else { Effect_CreateBlood(self.origin, [0,0,0]); @@ -293,7 +294,7 @@ w_crossbow_crosshair(void) vector cross_pos; vector aicon_pos; - cross_pos = (video_res / 2) + [-12,-12]; + cross_pos = video_mins + (video_res / 2) + [-12,-12]; drawsubpic( cross_pos, [24,24], diff --git a/src/shared/valve/w_crowbar.c b/src/shared/valve/w_crowbar.c index 1e682c8c..a8ff56a2 100644 --- a/src/shared/valve/w_crowbar.c +++ b/src/shared/valve/w_crowbar.c @@ -136,7 +136,7 @@ w_crowbar_primary(void) } if (trace_ent.takedamage) { - Damage_Apply(trace_ent, self, 10, trace_endpos, FALSE ); + Damage_Apply(trace_ent, pl, 10, trace_endpos, FALSE, WEAPON_CROWBAR); if (!trace_ent.iBleeds) { return; diff --git a/src/shared/valve/w_egon.c b/src/shared/valve/w_egon.c index 5b0d1dfe..989039fb 100644 --- a/src/shared/valve/w_egon.c +++ b/src/shared/valve/w_egon.c @@ -145,7 +145,7 @@ void w_egon_crosshair(void) { #ifdef CSQC static vector cross_pos; - cross_pos = (video_res / 2) + [-12,-12]; + cross_pos = video_mins + (video_res / 2) + [-12,-12]; drawsubpic(cross_pos, [24,24], "sprites/crosshairs.spr_0.tga", [72/128,48/128], [0.1875, 0.1875], [1,1,1], 1, DRAWFLAG_NORMAL); HUD_DrawAmmo2(); vector aicon_pos = video_mins + [video_res[0] - 48, video_res[1] - 42]; diff --git a/src/shared/valve/w_gauss.c b/src/shared/valve/w_gauss.c index 39643ab0..6448675b 100644 --- a/src/shared/valve/w_gauss.c +++ b/src/shared/valve/w_gauss.c @@ -158,7 +158,7 @@ void w_gauss_fire(int one) } if (trace_ent.takedamage == DAMAGE_YES) { - Damage_Apply(trace_ent, self, iDamage, trace_endpos, FALSE); + Damage_Apply(trace_ent, self, iDamage, trace_endpos, FALSE, WEAPON_GAUSS); sound(trace_ent, CHAN_ITEM, sprintf("weapons/electro%d.wav", random(0,3)+4), 1, ATTN_NORM); } #else @@ -196,7 +196,7 @@ void w_gauss_fire(int one) iLoop--; #ifdef SSQC if (trace_ent.takedamage == DAMAGE_YES) { - Damage_Apply(trace_ent, self, iDamage, trace_endpos, FALSE); + Damage_Apply(trace_ent, self, iDamage, trace_endpos, FALSE, WEAPON_GAUSS); sound(trace_ent, CHAN_ITEM, sprintf("weapons/electro%d.wav", random(0,3)+4), 1, ATTN_NORM); } @@ -357,7 +357,7 @@ void w_gauss_crosshair(void) vector cross_pos; vector aicon_pos; - cross_pos = (video_res / 2) + [-12,-12]; + cross_pos = video_mins + (video_res / 2) + [-12,-12]; aicon_pos = video_mins + [video_res[0] - 48, video_res[1] - 42]; drawsubpic( diff --git a/src/shared/valve/w_glock.c b/src/shared/valve/w_glock.c index 0c9343c4..b06b888c 100644 --- a/src/shared/valve/w_glock.c +++ b/src/shared/valve/w_glock.c @@ -131,7 +131,7 @@ w_glock_primary(void) } #else pl.glock_mag--; - TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 8, [0.01,0,01]); + TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 8, [0.01,0,01], WEAPON_GLOCK); sound(pl, CHAN_WEAPON, "weapons/pl_gun3.wav", 1.0f, ATTN_NORM); if (self.flags & FL_CROUCHING) @@ -176,7 +176,7 @@ w_glock_secondary(void) } #else pl.glock_mag--; - TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 8, [0.1,0.1]); + TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 8, [0.1,0.1], WEAPON_GLOCK); sound(pl, CHAN_WEAPON, "weapons/pl_gun3.wav", 1.0f, ATTN_NORM); if (self.flags & FL_CROUCHING) @@ -266,7 +266,7 @@ w_glock_hud(void) vector cross_pos; vector aicon_pos; - cross_pos = (video_res / 2) + [-12,-12]; + cross_pos = video_mins + (video_res / 2) + [-12,-12]; aicon_pos = video_mins + [video_res[0] - 48, video_res[1] - 42]; drawsubpic( diff --git a/src/shared/valve/w_handgrenade.c b/src/shared/valve/w_handgrenade.c index 374bf7d8..3d50dd6b 100644 --- a/src/shared/valve/w_handgrenade.c +++ b/src/shared/valve/w_handgrenade.c @@ -84,7 +84,7 @@ void w_handgrenade_throw(void) static void WeaponFrag_Throw_Touch( void ) { if (other.takedamage == DAMAGE_YES) { - Damage_Apply(other, self.owner, 15, self.origin, FALSE); + Damage_Apply(other, self.owner, 15, self.origin, FALSE, WEAPON_HANDGRENADE); } int r = floor(random(0,6)); string sample = sprintf("weapons/g_bounce%i.wav", r); @@ -113,24 +113,24 @@ void w_handgrenade_throw(void) eGrenade.owner = pl; eGrenade.classname = "remove_me"; eGrenade.solid = SOLID_BBOX; - //eGrenade.angles = vectoangles( vDir ); + eGrenade.frame = 1; eGrenade.velocity = vecThrow; eGrenade.movetype = MOVETYPE_BOUNCE; eGrenade.think = WeaponFrag_Throw_Explode; eGrenade.touch = WeaponFrag_Throw_Touch; eGrenade.nextthink = time + 4.0f; - eGrenade.frame = 1; setmodel( eGrenade, "models/w_grenade.mdl" ); - eGrenade.frame = 1; - setorigin( eGrenade, vecSrc ); setsize( eGrenade, [0,0,0], [0,0,0] ); + setorigin( eGrenade, vecSrc ); } #endif void w_handgrenade_draw(void) { +#ifdef CSQC Weapons_SetModel("models/v_grenade.mdl"); Weapons_ViewAnimation(HANDGRENADE_DRAW); +#endif } void w_handgrenade_holster(void) @@ -146,7 +146,7 @@ void w_handgrenade_primary(void) /* We're abusing this network variable for the holding check */ if (pl.a_ammo3 > 0) { - return; + return; } /* Ammo check */ @@ -163,19 +163,11 @@ void w_handgrenade_primary(void) #ifdef CSQC Weapons_ViewAnimation(HANDGRENADE_PULLPIN); #endif - pl.a_ammo3 = 1; + pl.a_ammo3 = 1; pl.w_attack_next = 0.5f; pl.w_idle_next = 0.5f; } -void w_handgrenade_secondary(void) -{ - -} -void w_handgrenade_reload(void) -{ - -} void w_handgrenade_hud(void) { @@ -208,21 +200,26 @@ void w_handgrenade_release(void) pl.w_idle_next = 0.5f; } else if (pl.a_ammo3 == 2) { #ifdef CSQC - //Weapons_ViewAnimation(HANDGRENADE_DRAW); + Weapons_ViewAnimation(HANDGRENADE_DRAW); #else if (!pl.ammo_handgrenade) { Weapons_RemoveItem(pl, WEAPON_HANDGRENADE); } #endif + pl.w_attack_next = 0.5f; pl.w_idle_next = 0.5f; pl.a_ammo3 = 0; } } -float w_handgrenade_aimanim(void) + +float +w_handgrenade_aimanim(void) { return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; } -void w_handgrenade_hudpic(int s, vector pos) + +void +w_handgrenade_hudpic(int s, vector pos) { #ifdef CSQC if (s) { @@ -244,8 +241,8 @@ weapon_t w_handgrenade = w_handgrenade_draw, w_handgrenade_holster, w_handgrenade_primary, - w_handgrenade_secondary, - w_handgrenade_reload, + w_handgrenade_release, + w_handgrenade_release, w_handgrenade_release, w_handgrenade_hud, w_handgrenade_precache, diff --git a/src/shared/valve/w_hornetgun.c b/src/shared/valve/w_hornetgun.c index 0167b3c0..49833410 100644 --- a/src/shared/valve/w_hornetgun.c +++ b/src/shared/valve/w_hornetgun.c @@ -95,7 +95,7 @@ w_hornetgun_shoothornet(void) { static void Hornet_Touch(void) { if (other.takedamage == DAMAGE_YES) { - Damage_Apply(other, self.owner, 10, trace_endpos, FALSE); + Damage_Apply(other, self.owner, 10, trace_endpos, FALSE, WEAPON_HORNETGUN); } remove(self); } @@ -242,7 +242,7 @@ w_hornetgun_crosshair(void) vector cross_pos; vector aicon_pos; - cross_pos = (video_res / 2) + [-12,-12]; + cross_pos = video_mins + (video_res / 2) + [-12,-12]; aicon_pos = video_mins + [video_res[0] - 48, video_res[1] - 42]; drawsubpic( diff --git a/src/shared/valve/w_mp5.c b/src/shared/valve/w_mp5.c index 4ba4986f..54959ea5 100644 --- a/src/shared/valve/w_mp5.c +++ b/src/shared/valve/w_mp5.c @@ -135,9 +135,9 @@ w_mp5_primary(void) #else /* singleplayer is more accurate */ if (cvar("sv_playerslots") == 1) { - TraceAttack_FireBullets(1, Weapons_GetCameraPos(), 8, [0.025,0.025]); + TraceAttack_FireBullets(1, Weapons_GetCameraPos(), 8, [0.025,0.025], WEAPON_MP5); } else { - TraceAttack_FireBullets(1, Weapons_GetCameraPos(), 8, [0.05,0.05]); + TraceAttack_FireBullets(1, Weapons_GetCameraPos(), 8, [0.05,0.05], WEAPON_MP5); } if (random() < 0.5) { @@ -268,7 +268,7 @@ w_mp5_crosshair(void) vector cross_pos; vector aicon_pos; - cross_pos = (video_res / 2) + [-12,-12]; + cross_pos = video_mins + (video_res / 2) + [-12,-12]; drawsubpic( cross_pos, diff --git a/src/shared/valve/w_python.c b/src/shared/valve/w_python.c index c0c1d651..5063f1f8 100644 --- a/src/shared/valve/w_python.c +++ b/src/shared/valve/w_python.c @@ -128,7 +128,7 @@ w_python_primary(void) Weapons_ViewAnimation(PYTHON_FIRE1); #else pl.python_mag--; - TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 40, [0.008, 0.008]); + TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 40, [0.008, 0.008], WEAPON_PYTHON); if (random() < 0.5) { sound(pl, CHAN_WEAPON, "weapons/357_shot1.wav", 1, ATTN_NORM); @@ -236,7 +236,7 @@ w_python_crosshair(void) vector cross_pos; vector aicon_pos; - cross_pos = (video_res / 2) + [-12,-12]; + cross_pos = video_mins + (video_res / 2) + [-12,-12]; drawsubpic( cross_pos, [24,24], diff --git a/src/shared/valve/w_rpg.c b/src/shared/valve/w_rpg.c index fbe20a5a..78a052cb 100644 --- a/src/shared/valve/w_rpg.c +++ b/src/shared/valve/w_rpg.c @@ -249,7 +249,7 @@ void w_rpg_hud(void) lerp = Math_Lerp(18,6, trace_fraction); jitter[0] = (random(0,2) - 2) * (1 - trace_fraction); jitter[1] = (random(0,2) - 2) * (1 - trace_fraction); - cross_pos = (video_res / 2) + ([-lerp,-lerp] / 2); + cross_pos = video_mins + (video_res / 2) + ([-lerp,-lerp] / 2); drawsubpic( cross_pos + jitter, [lerp,lerp], @@ -261,7 +261,7 @@ void w_rpg_hud(void) DRAWFLAG_ADDITIVE ); } else { - cross_pos = (video_res / 2) + [-12,-12]; + cross_pos = video_mins + (video_res / 2) + [-12,-12]; drawsubpic( cross_pos, [24,24], diff --git a/src/shared/valve/w_shotgun.c b/src/shared/valve/w_shotgun.c index 1c4b63dd..46a2128c 100644 --- a/src/shared/valve/w_shotgun.c +++ b/src/shared/valve/w_shotgun.c @@ -122,9 +122,9 @@ void w_shotgun_primary(void) #ifdef SSQC /* Singleplayer is more accurate */ if (cvar("sv_playerslots") == 1) { - TraceAttack_FireBullets(6, pl.origin + pl.view_ofs, 5, [0.08716,0.08716]); + TraceAttack_FireBullets(6, pl.origin + pl.view_ofs, 5, [0.08716,0.08716], WEAPON_SHOTGUN); } else { - TraceAttack_FireBullets(4, pl.origin + pl.view_ofs, 5, [0.08716,0.04362]); + TraceAttack_FireBullets(4, pl.origin + pl.view_ofs, 5, [0.08716,0.04362], WEAPON_SHOTGUN); } Weapons_PlaySound(pl, CHAN_WEAPON, "weapons/sbarrel1.wav", 1, ATTN_NORM); pl.shotgun_mag--; @@ -164,9 +164,9 @@ void w_shotgun_secondary(void) #ifdef SSQC /* Singleplayer is more accurate */ if (cvar("sv_playerslots") == 1) { - TraceAttack_FireBullets(12, pl.origin + pl.view_ofs, 5, [0.08716,0.08716]); + TraceAttack_FireBullets(12, pl.origin + pl.view_ofs, 5, [0.08716,0.08716], WEAPON_SHOTGUN); } else { - TraceAttack_FireBullets(8, pl.origin + pl.view_ofs, 5, [0.17365,0.04362]); + TraceAttack_FireBullets(8, pl.origin + pl.view_ofs, 5, [0.17365,0.04362], WEAPON_SHOTGUN); } Weapons_PlaySound(pl, CHAN_WEAPON, "weapons/dbarrel1.wav", 1, ATTN_NORM); pl.shotgun_mag -= 2; @@ -263,7 +263,7 @@ void w_shotgun_crosshair(void) { #ifdef CSQC static vector cross_pos; - cross_pos = (video_res / 2) + [-12,-12]; + cross_pos = video_mins + (video_res / 2) + [-12,-12]; drawsubpic(cross_pos, [24,24], "sprites/crosshairs.spr_0.tga", [48/128,24/128], [0.1875, 0.1875], [1,1,1], 1, DRAWFLAG_NORMAL); HUD_DrawAmmo1(); HUD_DrawAmmo2(); diff --git a/src/shared/valve/w_snark.c b/src/shared/valve/w_snark.c index 9f891d60..cd1f1ca5 100644 --- a/src/shared/valve/w_snark.c +++ b/src/shared/valve/w_snark.c @@ -88,7 +88,7 @@ void w_snark_deploy(void) self.weapon = 0.5f + random(); sound(self, CHAN_VOICE, sprintf("squeek/sqk_hunt%d.wav",floor(random(1,4))), 1.0, ATTN_NORM); input_buttons = 2; - Damage_Apply(self, world, 1, self.origin, TRUE); + Damage_Apply(self, world, 1, self.origin, TRUE, 0); makevectors(self.angles); traceline(self.origin, self.origin + (v_forward * 128), 0, self); @@ -96,7 +96,7 @@ void w_snark_deploy(void) if (trace_ent.takedamage == DAMAGE_YES) { float pit = 100 + random(0,10); sound(self, CHAN_BODY, "squeek/sqk_deploy1.wav", 1.0, ATTN_NORM, pit); - Damage_Apply(trace_ent, self, 10, trace_endpos, FALSE); + Damage_Apply(trace_ent, self.goalentity, 10, trace_endpos, FALSE, WEAPON_SNARK); } if (self.aiment.health <= 0) { @@ -115,6 +115,7 @@ void w_snark_deploy(void) static void snark_pain(int i) { } entity snark = spawn(); snark.owner = self; + snark.goalentity = self; snark.netname = "Snark"; snark.classname = "snark"; setmodel(snark, "models/w_squeak.mdl"); diff --git a/src/shared/valve/w_tripmine.c b/src/shared/valve/w_tripmine.c index 6fa611b4..49df355c 100644 --- a/src/shared/valve/w_tripmine.c +++ b/src/shared/valve/w_tripmine.c @@ -38,7 +38,7 @@ void w_tripmine_precache(void) void w_tripmine_updateammo(player pl) { #ifdef SSQC - Weapons_UpdateAmmo(pl, __NULL__, pl.ammo_tripmine, __NULL__); + Weapons_UpdateAmmo(pl, -1, pl.ammo_tripmine, -1); #endif } string w_tripmine_wmodel(void) @@ -69,11 +69,9 @@ int w_tripmine_pickup(int new) void w_tripmine_draw(void) { +#ifdef CSQC Weapons_SetModel("models/v_tripmine.mdl"); Weapons_ViewAnimation(TRIPMINE_DRAW); -#ifdef SSQC - player pl = (player)self; - Weapons_UpdateAmmo(pl, __NULL__, pl.ammo_tripmine, __NULL__); #endif } void w_tripmine_holster(void) @@ -170,6 +168,8 @@ void w_tripmine_parse(void) void w_tripmine_primary(void) { player pl = (player)self; + vector src; + if (pl.w_attack_next > 0.0) { return; } @@ -184,47 +184,37 @@ void w_tripmine_primary(void) } #endif + src = Weapons_GetCameraPos(); Weapons_MakeVectors(); - traceline(Weapons_GetCameraPos(), Weapons_GetCameraPos() + v_forward * 64, FALSE, pl); + traceline(src, src + v_forward * 64, FALSE, pl); - if (trace_fraction == 1.0f) { + if (trace_fraction == 1.0) { return; } - + +#ifdef CSQC + pl.a_ammo2--; Weapons_ViewAnimation(TRIPMINE_FIRE2); -#ifdef SSQC +#else entity mine = spawn(); setmodel(mine, "models/v_tripmine.mdl"); setorigin(mine, trace_endpos); - mine.angles = vectoangles( trace_plane_normal ); - setorigin(mine, trace_endpos - (v_forward * 8)); + mine.angles = vectoangles( trace_plane_normal ); + setorigin(mine, trace_endpos - (v_forward * 8)); mine.think = w_tripmine_ready; mine.nextthink = time + 4.0f; mine.SendEntity = w_tripmine_sendentity; mine.SendFlags = 1; - //mine.owner = pl; sound(mine, CHAN_WEAPON, "weapons/mine_charge.wav", 1, ATTN_NORM); - sound(self, CHAN_WEAPON, "weapons/mine_deploy.wav", 1, ATTN_NORM); - pl.ammo_tripmine--; - if (pl.ammo_tripmine <= 0) { - Weapons_RemoveItem(pl, WEAPON_TRIPMINE); - } else { - Weapons_UpdateAmmo(pl, __NULL__, pl.ammo_tripmine, __NULL__); - } + sound(self, CHAN_WEAPON, "weapons/mine_deploy.wav", 1, ATTN_NORM); #endif - pl.w_attack_next = 0.5f; - pl.w_idle_next = 2.5f; -} -void w_tripmine_secondary(void) -{ - -} -void w_tripmine_reload(void) -{ - + pl.a_ammo3 = 1; + pl.w_attack_next = + pl.w_idle_next = 0.5f; } + void w_tripmine_release(void) { int r; @@ -233,6 +223,19 @@ void w_tripmine_release(void) return; } + if (pl.a_ammo3 == 1) { + Weapons_ViewAnimation(TRIPMINE_DRAW); +#ifdef SSQC + if (pl.ammo_tripmine <= 0) { + Weapons_RemoveItem(pl, WEAPON_TRIPMINE); + } +#endif + pl.a_ammo3 = 0; + pl.w_attack_next = 0.5f; + pl.w_idle_next = 3.0f; + return; + } + r = floor(random(0,3)); switch (r) { @@ -285,8 +288,8 @@ weapon_t w_tripmine = w_tripmine_draw, w_tripmine_holster, w_tripmine_primary, - w_tripmine_secondary, - w_tripmine_reload, + w_tripmine_release, + w_tripmine_release, w_tripmine_release, w_tripmine_hud, w_tripmine_precache,