summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cgame/cg_weapons.c56
-rw-r--r--src/game/bg_misc.c61
-rw-r--r--src/game/bg_pmove.c27
-rw-r--r--src/game/bg_public.h5
-rw-r--r--src/game/g_active.c4
-rw-r--r--src/game/g_client.c8
-rw-r--r--src/game/g_combat.c3
-rw-r--r--src/game/g_missile.c205
-rw-r--r--src/game/g_weapon.c381
9 files changed, 82 insertions, 668 deletions
diff --git a/src/cgame/cg_weapons.c b/src/cgame/cg_weapons.c
index c14aba28..1df76a89 100644
--- a/src/cgame/cg_weapons.c
+++ b/src/cgame/cg_weapons.c
@@ -730,7 +730,7 @@ void CG_RegisterWeapon( int weaponNum )
weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/melee/fstatck.wav", qfalse );
break;
- case WP_GRABANDCSAW:
+ case WP_GRAB_CLAW:
MAKERGB( weaponInfo->flashDlightColor, 0, 0, 0 );
weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/melee/fstatck.wav", qfalse );
break;
@@ -1747,48 +1747,12 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin, vec3_t dir, im
mark = cgs.media.energyMarkShader;
radius = 24;
break;
-/* case WP_GRENADE_LAUNCHER:
- mod = cgs.media.dishFlashModel;
- shader = cgs.media.grenadeExplosionShader;
- sfx = cgs.media.sfx_rockexp;
- mark = cgs.media.burnMarkShader;
- radius = 64;
- light = 300;
- isSprite = qtrue;
- break;*/
-/* case WP_ROCKET_LAUNCHER:
- mod = cgs.media.dishFlashModel;
- shader = cgs.media.rocketExplosionShader;
- sfx = cgs.media.sfx_rockexp;
- mark = cgs.media.burnMarkShader;
- radius = 64;
- light = 300;
- isSprite = qtrue;
- duration = 1000;
- lightColor[0] = 1;
- lightColor[1] = 0.75;
- lightColor[2] = 0.0;
- if (cg_oldRocket.integer == 0) {
- // explosion sprite animation
- VectorMA( origin, 24, dir, sprOrg );
- VectorScale( dir, 64, sprVel );
-
- CG_ParticleExplosion( "explode1", sprOrg, sprVel, 1400, 20, 30 );
- }
- break;*/
case WP_LOCKBLOB_LAUNCHER:
sfx = cgs.media.gibBounce1Sound;
mark = cgs.media.greenBloodMarkShader;
radius = 64;
isSprite = qtrue;
break;
-/* case WP_RAILGUN:
- mod = cgs.media.ringFlashModel;
- shader = cgs.media.railExplosionShader;
- sfx = cgs.media.sfx_plasmaexp;
- mark = cgs.media.energyMarkShader;
- radius = 24;
- break;*/
case WP_FLAMER:
sfx = cgs.media.sfx_lghit;
mark = cgs.media.burnMarkShader;
@@ -1808,29 +1772,11 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin, vec3_t dir, im
mark = cgs.media.energyMarkShader;
radius = 16;
break;
-/* case WP_BFG:
- mod = cgs.media.dishFlashModel;
- shader = cgs.media.bfgExplosionShader;
- sfx = cgs.media.sfx_rockexp;
- mark = cgs.media.burnMarkShader;
- radius = 32;
- isSprite = qtrue;
- break;*/
-/* case WP_SHOTGUN:
- mod = cgs.media.bulletFlashModel;
- shader = cgs.media.bulletExplosionShader;
- mark = cgs.media.bulletMarkShader;
- sfx = 0;
- radius = 4;
- break;*/
case WP_MASS_DRIVER:
shader = cgs.media.bulletExplosionShader;
mark = cgs.media.bulletMarkShader;
break;
case WP_MACHINEGUN:
- mod = cgs.media.bulletFlashModel;
- shader = cgs.media.bulletExplosionShader;
- mark = cgs.media.bulletMarkShader;
case WP_CHAINGUN:
mod = cgs.media.bulletFlashModel;
shader = cgs.media.bulletExplosionShader;
diff --git a/src/game/bg_misc.c b/src/game/bg_misc.c
index 96a46f0e..a7c21ba7 100644
--- a/src/game/bg_misc.c
+++ b/src/game/bg_misc.c
@@ -1941,6 +1941,7 @@ weaponAttributes_t bg_weapons[ ] =
3, //int maxClips;
qfalse, //int infiniteAmmo;
100, //int repeatRate;
+ 2000, //int reloadTime;
qfalse, //qboolean hasAltMode;
qfalse, //qboolean synced;
qtrue, //qboolean purchasable;
@@ -1960,6 +1961,7 @@ weaponAttributes_t bg_weapons[ ] =
0, //int maxClips;
qfalse, //int infiniteAmmo;
40, //int repeatRate;
+ 0, //int reloadTime;
qfalse, //qboolean hasAltMode;
qfalse, //qboolean synced;
qtrue, //qboolean purchasable;
@@ -1979,6 +1981,7 @@ weaponAttributes_t bg_weapons[ ] =
0, //int maxClips;
qfalse, //int infiniteAmmo;
50, //int repeatRate;
+ 0, //int reloadTime;
qfalse, //qboolean hasAltMode;
qfalse, //qboolean synced;
qtrue, //qboolean purchasable;
@@ -1998,6 +2001,7 @@ weaponAttributes_t bg_weapons[ ] =
3, //int maxClips;
qfalse, //int infiniteAmmo;
1000, //int repeatRate;
+ 2000, //int reloadTime;
qfalse, //qboolean hasAltMode;
qfalse, //qboolean synced;
qtrue, //qboolean purchasable;
@@ -2017,6 +2021,7 @@ weaponAttributes_t bg_weapons[ ] =
3, //int maxClips;
qfalse, //int infiniteAmmo;
50, //int repeatRate;
+ 2000, //int reloadTime;
qfalse, //qboolean hasAltMode;
qfalse, //qboolean synced;
qtrue, //qboolean purchasable;
@@ -2036,6 +2041,7 @@ weaponAttributes_t bg_weapons[ ] =
0, //int maxClips;
qtrue, //int infiniteAmmo;
1000, //int repeatRate;
+ 0, //int reloadTime;
qtrue, //qboolean hasAltMode;
qfalse, //qboolean synced;
qtrue, //qboolean purchasable;
@@ -2055,6 +2061,7 @@ weaponAttributes_t bg_weapons[ ] =
0, //int maxClips;
qtrue, //int infiniteAmmo;
1000, //int repeatRate;
+ 0, //int reloadTime;
qtrue, //qboolean hasAltMode;
qfalse, //qboolean synced;
qtrue, //qboolean purchasable;
@@ -2074,6 +2081,7 @@ weaponAttributes_t bg_weapons[ ] =
0, //int maxClips;
qtrue, //int infiniteAmmo;
1000, //int repeatRate;
+ 0, //int reloadTime;
qtrue, //qboolean hasAltMode;
qfalse, //qboolean synced;
qfalse, //qboolean purchasable;
@@ -2093,6 +2101,7 @@ weaponAttributes_t bg_weapons[ ] =
0, //int maxClips;
qtrue, //int infiniteAmmo;
1000, //int repeatRate;
+ 0, //int reloadTime;
qtrue, //qboolean hasAltMode;
qfalse, //qboolean synced;
qfalse, //qboolean purchasable;
@@ -2112,18 +2121,19 @@ weaponAttributes_t bg_weapons[ ] =
0, //int maxClips;
qtrue, //int infiniteAmmo;
500, //int repeatRate;
+ 0, //int reloadTime;
qfalse, //qboolean hasAltMode;
qfalse, //qboolean synced;
qfalse, //qboolean purchasable;
WUT_ALIENS //WUTeam_t team;
},
{
- WP_GRABANDCSAW, //int weaponNum;
+ WP_GRAB_CLAW, //int weaponNum;
100, //int price;
( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages
SLOT_WEAPON, //int slots;
- "grabandcsaw", //char *weaponName;
- "Circular Saw", //char *weaponHumanName;
+ "grabandclaw", //char *weaponName;
+ "Claws", //char *weaponHumanName;
{ "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
"icons/iconw_gauntlet",
0, //int quan;
@@ -2131,12 +2141,33 @@ weaponAttributes_t bg_weapons[ ] =
0, //int maxClips;
qtrue, //int infiniteAmmo;
500, //int repeatRate;
+ 0, //int reloadTime;
qtrue, //qboolean hasAltMode;
qtrue, //qboolean synced;
qfalse, //qboolean purchasable;
WUT_ALIENS //WUTeam_t team;
},
{
+ WP_AREA_ZAP, //int weaponNum;
+ 100, //int price;
+ ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages
+ SLOT_WEAPON, //int slots;
+ "areazap", //char *weaponName;
+ "Area Zap", //char *weaponHumanName;
+ { "models/weapons2/gauntlet/gauntlet.md3", 0, 0, 0 },
+ "icons/iconw_gauntlet",
+ 0, //int quan;
+ 0, //int clips;
+ 0, //int maxClips;
+ qtrue, //int infiniteAmmo;
+ 500, //int repeatRate;
+ 0, //int reloadTime;
+ qfalse, //qboolean hasAltMode;
+ qfalse, //qboolean synced;
+ qfalse, //qboolean purchasable;
+ WUT_ALIENS //WUTeam_t team;
+ },
+ {
WP_POUNCE, //int weaponNum;
100, //int price;
( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages
@@ -2150,6 +2181,7 @@ weaponAttributes_t bg_weapons[ ] =
0, //int maxClips;
qtrue, //int infiniteAmmo;
750, //int repeatRate;
+ 0, //int reloadTime;
qfalse, //qboolean hasAltMode;
qfalse, //qboolean synced;
qfalse, //qboolean purchasable;
@@ -2169,6 +2201,7 @@ weaponAttributes_t bg_weapons[ ] =
0, //int maxClips;
qtrue, //int infiniteAmmo;
500, //int repeatRate;
+ 0, //int reloadTime;
qfalse, //qboolean hasAltMode;
qfalse, //qboolean synced;
qfalse, //qboolean purchasable;
@@ -2188,6 +2221,7 @@ weaponAttributes_t bg_weapons[ ] =
0, //int maxClips;
qtrue, //int infiniteAmmo;
500, //int repeatRate;
+ 0, //int reloadTime;
qfalse, //qboolean hasAltMode;
qfalse, //qboolean synced;
qfalse, //qboolean purchasable;
@@ -2207,6 +2241,7 @@ weaponAttributes_t bg_weapons[ ] =
0, //int maxClips;
qtrue, //int infiniteAmmo;
500, //int repeatRate;
+ 0, //int reloadTime;
qfalse, //qboolean hasAltMode;
qfalse, //qboolean synced;
qfalse, //qboolean purchasable;
@@ -2442,6 +2477,26 @@ int BG_FindRepeatRateForWeapon( int weapon )
/*
==============
+BG_FindReloadTimeForWeapon
+==============
+*/
+int BG_FindReloadTimeForWeapon( int weapon )
+{
+ int i;
+
+ for( i = 0; i < bg_numWeapons; i++ )
+ {
+ if( bg_weapons[ i ].weaponNum == weapon )
+ {
+ return bg_weapons[ i ].reloadTime;
+ }
+ }
+
+ return 1000;
+}
+
+/*
+==============
BG_WeaponHasAltMode
==============
*/
diff --git a/src/game/bg_pmove.c b/src/game/bg_pmove.c
index da3809fc..c0ba5e82 100644
--- a/src/game/bg_pmove.c
+++ b/src/game/bg_pmove.c
@@ -2169,17 +2169,10 @@ static void PM_Weapon( void )
//done reloading so give em some ammo
if( pm->ps->weaponstate == WEAPON_RELOADING )
{
- switch( pm->ps->weapon )
+ if( maxclips > 0 )
{
- case WP_MACHINEGUN:
- case WP_MASS_DRIVER:
- case WP_PULSE_RIFLE:
- clips--;
- BG_FindAmmoForWeapon( pm->ps->weapon, &ammo, NULL, NULL );
- break;
-
- default:
- break;
+ clips--;
+ BG_FindAmmoForWeapon( pm->ps->weapon, &ammo, NULL, NULL );
}
BG_packAmmoArray( pm->ps->weapon, pm->ps->ammo, pm->ps->powerups, ammo, clips, maxclips );
@@ -2190,17 +2183,7 @@ static void PM_Weapon( void )
{
pm->ps->weaponstate = WEAPON_RELOADING;
- switch( pm->ps->weapon )
- {
- case WP_MACHINEGUN:
- case WP_MASS_DRIVER:
- case WP_PULSE_RIFLE:
- addTime = 2000;
- break;
-
- default:
- break;
- }
+ addTime = BG_FindReloadTimeForWeapon( pm->ps->weapon );
pm->ps->weaponTime += addTime;
return;
@@ -2234,7 +2217,7 @@ static void PM_Weapon( void )
}
break;
- case WP_GRABANDCSAW:
+ case WP_GRAB_CLAW:
attack1 = pm->cmd.buttons & BUTTON_ATTACK;
//secondary attack is only permitted if target is in range
diff --git a/src/game/bg_public.h b/src/game/bg_public.h
index 8c68c80b..dbeb7e43 100644
--- a/src/game/bg_public.h
+++ b/src/game/bg_public.h
@@ -335,8 +335,9 @@ typedef enum
WP_FLAMER,
WP_PLASMAGUN,
WP_VENOM,
- WP_GRABANDCSAW,
+ WP_GRAB_CLAW,
WP_POUNCE,
+ WP_AREA_ZAP,
WP_MASS_DRIVER,
WP_PULSE_RIFLE,
@@ -933,6 +934,7 @@ typedef struct
qboolean infiniteAmmo;
int repeatRate;
+ int reloadTime;
qboolean hasAltMode;
qboolean synced;
@@ -1022,6 +1024,7 @@ char *BG_FindIconForWeapon( int weapon );
void BG_FindAmmoForWeapon( int weapon, int *quan, int *clips, int *maxClips );
qboolean BG_FindInfinteAmmoForWeapon( int weapon );
int BG_FindRepeatRateForWeapon( int weapon );
+int BG_FindReloadTimeForWeapon( int weapon );
qboolean BG_WeaponHasAltMode( int weapon );
qboolean BG_WeaponModesAreSynced( int weapon );
qboolean BG_FindPurchasableForWeapon( int weapon );
diff --git a/src/game/g_active.c b/src/game/g_active.c
index 8885a87e..871db488 100644
--- a/src/game/g_active.c
+++ b/src/game/g_active.c
@@ -942,8 +942,8 @@ void ClientThink_real( gentity_t *ent ) {
pm.autoWeaponHit[ WP_VENOM ] = CheckVenomAttack( ent );
break;
- case WP_GRABANDCSAW:
- pm.autoWeaponHit[ WP_GRABANDCSAW ] = CheckGrabAttack( ent );
+ case WP_GRAB_CLAW:
+ pm.autoWeaponHit[ WP_GRAB_CLAW ] = CheckGrabAttack( ent );
break;
case WP_POUNCE:
diff --git a/src/game/g_client.c b/src/game/g_client.c
index a61fb653..806af002 100644
--- a/src/game/g_client.c
+++ b/src/game/g_client.c
@@ -1467,13 +1467,13 @@ void ClientSpawn( gentity_t *ent, gentity_t *spawn )
break;
case PCL_A_O_LEV1:
- BG_packWeapon( WP_GRABANDCSAW, client->ps.stats );
- BG_packAmmoArray( WP_GRABANDCSAW, client->ps.ammo, client->ps.powerups, 0, 0, 0 );
+ BG_packWeapon( WP_GRAB_CLAW, client->ps.stats );
+ BG_packAmmoArray( WP_GRAB_CLAW, client->ps.ammo, client->ps.powerups, 0, 0, 0 );
break;
case PCL_A_O_LEV1_UPG:
- BG_packWeapon( WP_GRABANDCSAW, client->ps.stats );
- BG_packAmmoArray( WP_GRABANDCSAW, client->ps.ammo, client->ps.powerups, 0, 0, 0 );
+ BG_packWeapon( WP_GRAB_CLAW, client->ps.stats );
+ BG_packAmmoArray( WP_GRAB_CLAW, client->ps.ammo, client->ps.powerups, 0, 0, 0 );
break;
case PCL_A_O_LEV2:
diff --git a/src/game/g_combat.c b/src/game/g_combat.c
index 2d7fafce..e0f0e0ea 100644
--- a/src/game/g_combat.c
+++ b/src/game/g_combat.c
@@ -360,9 +360,6 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int
// check for a player that almost brought in cubes
//CheckAlmostScored( self, attacker );
- if (self->client && self->client->hook)
- Weapon_HookFree(self->client->hook);
-
self->client->ps.pm_type = PM_DEAD;
if ( attacker ) {
diff --git a/src/game/g_missile.c b/src/game/g_missile.c
index 84a64741..03478674 100644
--- a/src/game/g_missile.c
+++ b/src/game/g_missile.c
@@ -129,52 +129,6 @@ void G_MissileImpact( gentity_t *ent, trace_t *trace ) {
}
}
- if( !strcmp( ent->classname, "hook" ) )
- {
- gentity_t *nent;
- vec3_t v;
-
- nent = G_Spawn();
- if ( other->takedamage && other->client ) {
-
- G_AddEvent( nent, EV_MISSILE_HIT, DirToByte( trace->plane.normal ) );
- nent->s.otherEntityNum = other->s.number;
-
- ent->enemy = other;
-
- v[0] = other->r.currentOrigin[0] + (other->r.mins[0] + other->r.maxs[0]) * 0.5;
- v[1] = other->r.currentOrigin[1] + (other->r.mins[1] + other->r.maxs[1]) * 0.5;
- v[2] = other->r.currentOrigin[2] + (other->r.mins[2] + other->r.maxs[2]) * 0.5;
-
- SnapVectorTowards( v, ent->s.pos.trBase ); // save net bandwidth
- } else {
- VectorCopy(trace->endpos, v);
- G_AddEvent( nent, EV_MISSILE_MISS, DirToByte( trace->plane.normal ) );
- ent->enemy = NULL;
- }
-
- SnapVectorTowards( v, ent->s.pos.trBase ); // save net bandwidth
-
- nent->freeAfterEvent = qtrue;
- // change over to a normal entity right at the point of impact
- nent->s.eType = ET_GENERAL;
- ent->s.eType = ET_GRAPPLE;
-
- G_SetOrigin( ent, v );
- G_SetOrigin( nent, v );
-
- ent->think = Weapon_HookThink;
- ent->nextthink = level.time + FRAMETIME;
-
- ent->parent->client->ps.pm_flags |= PMF_GRAPPLE_PULL;
- VectorCopy( ent->r.currentOrigin, ent->parent->client->ps.grapplePoint);
-
- trap_LinkEntity( ent );
- trap_LinkEntity( nent );
-
- return;
- }
-
if( !strcmp( ent->classname, "lockblob" ) )
{
if( other->client && other->client->ps.stats[ STAT_PTEAM ] == PTE_HUMANS )
@@ -369,7 +323,7 @@ gentity_t *fire_plasma( gentity_t *self, vec3_t start, vec3_t dir )
/*
=================
-fire_plasma
+fire_pulseRifle
=================
*/
@@ -411,125 +365,6 @@ gentity_t *fire_pulseRifle( gentity_t *self, vec3_t start, vec3_t dir )
/*
=================
-fire_grenade
-=================
-*/
-gentity_t *fire_grenade (gentity_t *self, vec3_t start, vec3_t dir) {
- gentity_t *bolt;
-
- VectorNormalize (dir);
-
- bolt = G_Spawn();
- bolt->classname = "grenade";
- bolt->nextthink = level.time + 2500;
- bolt->think = G_ExplodeMissile;
- bolt->s.eType = ET_MISSILE;
- bolt->r.svFlags = SVF_USE_CURRENT_ORIGIN;
- /*bolt->s.weapon = WP_GRENADE_LAUNCHER;*/
- bolt->s.eFlags = EF_BOUNCE_HALF;
- bolt->r.ownerNum = self->s.number;
- bolt->parent = self;
- bolt->damage = 100;
- bolt->splashDamage = 100;
- bolt->splashRadius = 150;
- bolt->methodOfDeath = MOD_GRENADE;
- bolt->splashMethodOfDeath = MOD_GRENADE_SPLASH;
- bolt->clipmask = MASK_SHOT;
- bolt->target_ent = NULL;
-
- bolt->s.pos.trType = TR_GRAVITY;
- bolt->s.pos.trTime = level.time - MISSILE_PRESTEP_TIME; // move a bit on the very first frame
- VectorCopy( start, bolt->s.pos.trBase );
- VectorScale( dir, 700, bolt->s.pos.trDelta );
- SnapVector( bolt->s.pos.trDelta ); // save net bandwidth
-
- VectorCopy (start, bolt->r.currentOrigin);
-
- return bolt;
-}
-
-//=============================================================================
-
-
-/*
-=================
-fire_bfg
-=================
-*/
-gentity_t *fire_bfg (gentity_t *self, vec3_t start, vec3_t dir) {
- gentity_t *bolt;
-
- VectorNormalize (dir);
-
- bolt = G_Spawn();
- bolt->classname = "bfg";
- bolt->nextthink = level.time + 10000;
- bolt->think = G_ExplodeMissile;
- bolt->s.eType = ET_MISSILE;
- bolt->r.svFlags = SVF_USE_CURRENT_ORIGIN;
- /*bolt->s.weapon = WP_BFG;*/
- bolt->r.ownerNum = self->s.number;
- bolt->parent = self;
- bolt->damage = 100;
- bolt->splashDamage = 100;
- bolt->splashRadius = 120;
- bolt->methodOfDeath = MOD_BFG;
- bolt->splashMethodOfDeath = MOD_BFG_SPLASH;
- bolt->clipmask = MASK_SHOT;
- bolt->target_ent = NULL;
-
- bolt->s.pos.trType = TR_LINEAR;
- bolt->s.pos.trTime = level.time - MISSILE_PRESTEP_TIME; // move a bit on the very first frame
- VectorCopy( start, bolt->s.pos.trBase );
- VectorScale( dir, 2000, bolt->s.pos.trDelta );
- SnapVector( bolt->s.pos.trDelta ); // save net bandwidth
- VectorCopy (start, bolt->r.currentOrigin);
-
- return bolt;
-}
-
-//=============================================================================
-
-
-/*
-=================
-fire_rocket
-=================
-*/
-gentity_t *fire_rocket (gentity_t *self, vec3_t start, vec3_t dir) {
- gentity_t *bolt;
-
- VectorNormalize (dir);
-
- bolt = G_Spawn();
- bolt->classname = "rocket";
- bolt->nextthink = level.time + 15000;
- bolt->think = G_ExplodeMissile;
- bolt->s.eType = ET_MISSILE;
- bolt->r.svFlags = SVF_USE_CURRENT_ORIGIN;
- /*bolt->s.weapon = WP_ROCKET_LAUNCHER;*/
- bolt->r.ownerNum = self->s.number;
- bolt->parent = self;
- bolt->damage = 100;
- bolt->splashDamage = 100;
- bolt->splashRadius = 120;
- bolt->methodOfDeath = MOD_ROCKET;
- bolt->splashMethodOfDeath = MOD_ROCKET_SPLASH;
- bolt->clipmask = MASK_SHOT;
- bolt->target_ent = NULL;
-
- bolt->s.pos.trType = TR_LINEAR;
- bolt->s.pos.trTime = level.time - MISSILE_PRESTEP_TIME; // move a bit on the very first frame
- VectorCopy( start, bolt->s.pos.trBase );
- VectorScale( dir, 900, bolt->s.pos.trDelta );
- SnapVector( bolt->s.pos.trDelta ); // save net bandwidth
- VectorCopy (start, bolt->r.currentOrigin);
-
- return bolt;
-}
-
-/*
-=================
fire_lockblob
=================
*/
@@ -566,41 +401,3 @@ gentity_t *fire_lockblob( gentity_t *self, vec3_t start, vec3_t dir )
return bolt;
}
-/*
-=================
-fire_grapple
-=================
-*/
-gentity_t *fire_grapple (gentity_t *self, vec3_t start, vec3_t dir) {
- gentity_t *hook;
-
- VectorNormalize (dir);
-
- hook = G_Spawn();
- hook->classname = "hook";
- hook->nextthink = level.time + 10000;
- hook->think = Weapon_HookFree;
- hook->s.eType = ET_MISSILE;
- hook->r.svFlags = SVF_USE_CURRENT_ORIGIN;
- /*hook->s.weapon = WP_GRAPPLING_HOOK;*/
- hook->r.ownerNum = self->s.number;
- hook->methodOfDeath = MOD_GRAPPLE;
- hook->clipmask = MASK_SHOT;
- hook->parent = self;
- hook->target_ent = NULL;
-
- hook->s.pos.trType = TR_LINEAR;
- hook->s.pos.trTime = level.time - MISSILE_PRESTEP_TIME; // move a bit on the very first frame
- hook->s.otherEntityNum = self->s.number; // use to match beam in client
- VectorCopy( start, hook->s.pos.trBase );
- VectorScale( dir, 800, hook->s.pos.trDelta );
- SnapVector( hook->s.pos.trDelta ); // save net bandwidth
- VectorCopy (start, hook->r.currentOrigin);
-
- self->client->hook = hook;
-
- return hook;
-}
-
-
-
diff --git a/src/game/g_weapon.c b/src/game/g_weapon.c
index 00e07234..e0dec309 100644
--- a/src/game/g_weapon.c
+++ b/src/game/g_weapon.c
@@ -43,64 +43,6 @@ void G_BounceProjectile( vec3_t start, vec3_t impact, vec3_t dir, vec3_t endout
/*
======================================================================
-GAUNTLET
-
-======================================================================
-*/
-
-void Weapon_Gauntlet( gentity_t *ent ) {
-
-}
-
-/*
-===============
-CheckGauntletAttack
-===============
-*/
-qboolean CheckGauntletAttack( gentity_t *ent ) {
- trace_t tr;
- vec3_t end;
- gentity_t *tent;
- gentity_t *traceEnt;
- int damage;
-
- // set aiming directions
- AngleVectors (ent->client->ps.viewangles, forward, right, up);
-
- CalcMuzzlePoint( ent, forward, right, up, muzzle );
-
- VectorMA (muzzle, 32, forward, end);
-
- trap_Trace (&tr, muzzle, NULL, NULL, end, ent->s.number, MASK_SHOT);
- if ( tr.surfaceFlags & SURF_NOIMPACT ) {
- return qfalse;
- }
-
- traceEnt = &g_entities[ tr.entityNum ];
-
- // send blood impact
- if ( traceEnt->takedamage && traceEnt->client ) {
- tent = G_TempEntity( tr.endpos, EV_MISSILE_HIT );
- tent->s.otherEntityNum = traceEnt->s.number;
- tent->s.eventParm = DirToByte( tr.plane.normal );
- tent->s.weapon = ent->s.weapon;
- }
-
- if ( !traceEnt->takedamage) {
- return qfalse;
- }
-
- damage = 50;
- G_Damage( traceEnt, ent, ent, forward, tr.endpos,
- damage, 0, MOD_GAUNTLET );
-
- return qtrue;
-}
-
-
-/*
-======================================================================
-
MACHINEGUN
======================================================================
@@ -222,148 +164,7 @@ void massDriverFire( gentity_t *ent )
/*
======================================================================
-BFG
-
-======================================================================
-*/
-
-void BFG_Fire ( gentity_t *ent ) {
- gentity_t *m;
-
- m = fire_bfg (ent, muzzle, forward);
-
-// VectorAdd( m->s.pos.trDelta, ent->client->ps.velocity, m->s.pos.trDelta ); // "real" physics
-}
-
-
-/*
-======================================================================
-
-SHOTGUN
-
-======================================================================
-*/
-
-// DEFAULT_SHOTGUN_SPREAD and DEFAULT_SHOTGUN_COUNT are in bg_public.h, because
-// client predicts same spreads
-#define DEFAULT_SHOTGUN_DAMAGE 10
-
-qboolean ShotgunPellet( vec3_t start, vec3_t end, gentity_t *ent ) {
- trace_t tr;
- int damage, i, passent;
- gentity_t *traceEnt;
- vec3_t tr_start, tr_end;
-
- passent = ent->s.number;
- VectorCopy( start, tr_start );
- VectorCopy( end, tr_end );
- for (i = 0; i < 10; i++) {
- trap_Trace (&tr, tr_start, NULL, NULL, tr_end, passent, MASK_SHOT);
- traceEnt = &g_entities[ tr.entityNum ];
-
- // send bullet impact
- if ( tr.surfaceFlags & SURF_NOIMPACT ) {
- return qfalse;
- }
-
- if ( traceEnt->takedamage) {
- damage = DEFAULT_SHOTGUN_DAMAGE;
- G_Damage( traceEnt, ent, ent, forward, tr.endpos, damage, 0, MOD_SHOTGUN);
- if( LogAccuracyHit( traceEnt, ent ) ) {
- return qtrue;
- }
- }
- return qfalse;
- }
- return qfalse;
-}
-
-// this should match CG_ShotgunPattern
-void ShotgunPattern( vec3_t origin, vec3_t origin2, int seed, gentity_t *ent ) {
- int i;
- float r, u;
- vec3_t end;
- vec3_t forward, right, up;
- int oldScore;
- qboolean hitClient = qfalse;
-
- // derive the right and up vectors from the forward vector, because
- // the client won't have any other information
- VectorNormalize2( origin2, forward );
- PerpendicularVector( right, forward );
- CrossProduct( forward, right, up );
-
- oldScore = ent->client->ps.persistant[PERS_SCORE];
-
- // generate the "random" spread pattern
- for ( i = 0 ; i < DEFAULT_SHOTGUN_COUNT ; i++ ) {
- r = Q_crandom( &seed ) * DEFAULT_SHOTGUN_SPREAD * 16;
- u = Q_crandom( &seed ) * DEFAULT_SHOTGUN_SPREAD * 16;
- VectorMA( origin, 8192 * 16, forward, end);
- VectorMA (end, r, right, end);
- VectorMA (end, u, up, end);
- if( ShotgunPellet( origin, end, ent ) && !hitClient ) {
- hitClient = qtrue;
- ent->client->accuracy_hits++;
- }
- }
-}
-
-
-void weapon_supershotgun_fire (gentity_t *ent) {
- gentity_t *tent;
-
- // send shotgun blast
- tent = G_TempEntity( muzzle, EV_SHOTGUN );
- VectorScale( forward, 4096, tent->s.origin2 );
- SnapVector( tent->s.origin2 );
- tent->s.eventParm = rand() & 255; // seed for spread pattern
- tent->s.otherEntityNum = ent->s.number;
-
- ShotgunPattern( tent->s.pos.trBase, tent->s.origin2, tent->s.eventParm, ent );
-}
-
-
-/*
-======================================================================
-
-GRENADE LAUNCHER
-
-======================================================================
-*/
-
-void weapon_grenadelauncher_fire (gentity_t *ent) {
- gentity_t *m;
-
- // extra vertical velocity
- forward[2] += 0.2f;
- VectorNormalize( forward );
-
- m = fire_grenade (ent, muzzle, forward);
-
-// VectorAdd( m->s.pos.trDelta, ent->client->ps.velocity, m->s.pos.trDelta ); // "real" physics
-}
-
-/*
-======================================================================
-
-ROCKET
-
-======================================================================
-*/
-
-void Weapon_RocketLauncher_Fire (gentity_t *ent) {
- gentity_t *m;
-
- m = fire_rocket (ent, muzzle, forward);
-
-// VectorAdd( m->s.pos.trDelta, ent->client->ps.velocity, m->s.pos.trDelta ); // "real" physics
-}
-
-/*
-======================================================================
-
-SAWBLADE
+LOCKBLOB
======================================================================
*/
@@ -429,132 +230,6 @@ void Weapon_Flamer_Fire (gentity_t *ent) {
/*
======================================================================
-RAILGUN
-
-======================================================================
-*/
-
-
-/*
-=================
-weapon_railgun_fire
-=================
-*/
-#define MAX_RAIL_HITS 4
-void weapon_railgun_fire( gentity_t *ent )
-{
- vec3_t end;
- trace_t trace;
- gentity_t *tent;
- gentity_t *traceEnt;
- int damage;
- int i;
- int hits;
- int unlinked;
- int passent;
- gentity_t *unlinkedEntities[MAX_RAIL_HITS];
-
- damage = 100;
-
- VectorMA (muzzle, 8192, forward, end);
-
- // trace only against the solids, so the railgun will go through people
- unlinked = 0;
- hits = 0;
- passent = ent->s.number;
-
- do
- {
- trap_Trace (&trace, muzzle, NULL, NULL, end, passent, MASK_SHOT );
- if ( trace.entityNum >= ENTITYNUM_MAX_NORMAL )
- break;
-
- traceEnt = &g_entities[ trace.entityNum ];
- if ( traceEnt->takedamage )
- G_Damage( traceEnt, ent, ent, forward, trace.endpos, damage, 0, MOD_RAILGUN );
-
- if ( trace.contents & CONTENTS_SOLID )
- break; // we hit something solid enough to stop the beam
-
- // unlink this entity, so the next trace will go past it
- trap_UnlinkEntity( traceEnt );
- unlinkedEntities[unlinked] = traceEnt;
- unlinked++;
- }
- while ( unlinked < MAX_RAIL_HITS );
-
- // link back in any entities we unlinked
- for ( i = 0 ; i < unlinked ; i++ )
- trap_LinkEntity( unlinkedEntities[i] );
-
- // the final trace endpos will be the terminal point of the rail trail
-
- // snap the endpos to integers to save net bandwidth, but nudged towards the line
- SnapVectorTowards( trace.endpos, muzzle );
-
- // send railgun beam effect
- tent = G_TempEntity( trace.endpos, EV_RAILTRAIL );
-
- // set player number for custom colors on the railtrail
- tent->s.clientNum = ent->s.clientNum;
-
- VectorCopy( muzzle, tent->s.origin2 );
- // move origin a bit to come closer to the drawn gun muzzle
- VectorMA( tent->s.origin2, 16, up, tent->s.origin2 );
-
- // no explosion at end if SURF_NOIMPACT, but still make the trail
- if ( trace.surfaceFlags & SURF_NOIMPACT )
- tent->s.eventParm = 255; // don't make the explosion at the end
- else
- tent->s.eventParm = DirToByte( trace.plane.normal );
-
- tent->s.clientNum = ent->s.clientNum;
-}
-
-
-/*
-======================================================================
-
-GRAPPLING HOOK
-
-======================================================================
-*/
-
-void Weapon_GrapplingHook_Fire (gentity_t *ent)
-{
- if (!ent->client->fireHeld && !ent->client->hook)
- fire_grapple (ent, muzzle, forward);
-
- ent->client->fireHeld = qtrue;
-}
-
-void Weapon_HookFree (gentity_t *ent)
-{
- ent->parent->client->hook = NULL;
- ent->parent->client->ps.pm_flags &= ~PMF_GRAPPLE_PULL;
- G_FreeEntity( ent );
-}
-
-void Weapon_HookThink (gentity_t *ent)
-{
- if (ent->enemy) {
- vec3_t v, oldorigin;
-
- VectorCopy(ent->r.currentOrigin, oldorigin);
- v[0] = ent->enemy->r.currentOrigin[0] + (ent->enemy->r.mins[0] + ent->enemy->r.maxs[0]) * 0.5;
- v[1] = ent->enemy->r.currentOrigin[1] + (ent->enemy->r.mins[1] + ent->enemy->r.maxs[1]) * 0.5;
- v[2] = ent->enemy->r.currentOrigin[2] + (ent->enemy->r.mins[2] + ent->enemy->r.maxs[2]) * 0.5;
- SnapVectorTowards( v, oldorigin ); // save net bandwidth
-
- G_SetOrigin( ent, v );
- }
-
- VectorCopy( ent->r.currentOrigin, ent->parent->client->ps.grapplePoint);
-}
-
-/*
-======================================================================
-
TESLA GENERATOR
======================================================================
@@ -720,17 +395,17 @@ void Weapon_Venom_Fire( gentity_t *ent )
/*
======================================================================
-CIRCULAR SAW
+GRAB AND CLAW
======================================================================
*/
/*
===============
-Weapon_Csaw_Fire
+Weapon_GClaw_Fire
===============
*/
-void Weapon_CSaw_Fire( gentity_t *ent )
+void Weapon_GClaw_Fire( gentity_t *ent )
{
trace_t tr;
vec3_t end;
@@ -1022,27 +697,15 @@ void FireWeapon2( gentity_t *ent )
// fire the specific weapon
switch( ent->s.weapon )
{
-/* case WP_GAUNTLET:
- Weapon_Gauntlet( ent );
- break;*/
case WP_TESLAGEN:
Weapon_TeslaFire( ent );
break;
-/* case WP_SHOTGUN:
- weapon_supershotgun_fire( ent );
- break;*/
case WP_MACHINEGUN:
Bullet_Fire( ent, MACHINEGUN_SPREAD, MACHINEGUN_DAMAGE, MOD_MACHINEGUN );
break;
case WP_CHAINGUN:
Bullet_Fire( ent, CHAINGUN_SPREAD, CHAINGUN_DAMAGE, MOD_CHAINGUN );
break;
-/* case WP_GRENADE_LAUNCHER:
- weapon_grenadelauncher_fire( ent );
- break;*/
-/* case WP_ROCKET_LAUNCHER:
- Weapon_RocketLauncher_Fire( ent );
- break;*/
case WP_FLAMER:
Weapon_Flamer_Fire( ent );
break;
@@ -1052,24 +715,15 @@ void FireWeapon2( gentity_t *ent )
case WP_PULSE_RIFLE:
Weapon_PulseRifle_Fire( ent );
break;
-/* case WP_RAILGUN:
- weapon_railgun_fire( ent );
- break;*/
case WP_MASS_DRIVER:
massDriverFire( ent );
break;
case WP_LOCKBLOB_LAUNCHER:
break;
-/* case WP_BFG:
- BFG_Fire( ent );
- break;*/
-/* case WP_GRAPPLING_HOOK:
- Weapon_GrapplingHook_Fire( ent );
- break;*/
case WP_VENOM:
Weapon_Venom_Fire( ent );
break;
- case WP_GRABANDCSAW:
+ case WP_GRAB_CLAW:
Weapon_Grab_Fire( ent );
break;
case WP_POUNCE:
@@ -1115,27 +769,15 @@ void FireWeapon( gentity_t *ent )
// fire the specific weapon
switch( ent->s.weapon )
{
-/* case WP_GAUNTLET:
- Weapon_Gauntlet( ent );
- break;*/
case WP_TESLAGEN:
Weapon_TeslaFire( ent );
break;
-/* case WP_SHOTGUN:
- weapon_supershotgun_fire( ent );
- break;*/
case WP_MACHINEGUN:
Bullet_Fire( ent, MACHINEGUN_SPREAD, MACHINEGUN_DAMAGE, MOD_MACHINEGUN );
break;
case WP_CHAINGUN:
Bullet_Fire( ent, CHAINGUN_SPREAD, CHAINGUN_DAMAGE, MOD_CHAINGUN );
break;
-/* case WP_GRENADE_LAUNCHER:
- weapon_grenadelauncher_fire( ent );
- break;*/
-/* case WP_ROCKET_LAUNCHER:
- Weapon_RocketLauncher_Fire( ent );
- break;*/
case WP_FLAMER:
Weapon_Flamer_Fire( ent );
break;
@@ -1145,26 +787,17 @@ void FireWeapon( gentity_t *ent )
case WP_PULSE_RIFLE:
Weapon_PulseRifle_Fire( ent );
break;
-/* case WP_RAILGUN:
- weapon_railgun_fire( ent );
- break;*/
case WP_MASS_DRIVER:
massDriverFire( ent );
break;
case WP_LOCKBLOB_LAUNCHER:
Weapon_LockBlobLauncher_Fire( ent );
break;
-/* case WP_BFG:
- BFG_Fire( ent );
- break;*/
-/* case WP_GRAPPLING_HOOK:
- Weapon_GrapplingHook_Fire( ent );
- break;*/
case WP_VENOM:
Weapon_Venom_Fire( ent );
break;
- case WP_GRABANDCSAW:
- Weapon_CSaw_Fire( ent );
+ case WP_GRAB_CLAW:
+ Weapon_GClaw_Fire( ent );
break;
case WP_POUNCE:
Weapon_Claw_Fire( ent );