mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-03-13 05:51:19 +00:00
Upload decompiled "Rebellion" source code.
This commit is contained in:
parent
46ecb7e8ee
commit
8433383efb
@ -44,6 +44,7 @@ SRCS+=../dlls/shotgun.cpp
|
||||
SRCS+=../dlls/squeakgrenade.cpp
|
||||
SRCS+=../dlls/tripmine.cpp
|
||||
SRCS+=../dlls/glock.cpp
|
||||
SRCS+=../dlls/rebellion/minimp5.cpp
|
||||
#SRCS+=../game_shared/voice_banmgr.cpp
|
||||
#SRCS+=../game_shared/voice_status.cpp
|
||||
SRCS+=./ammo.cpp
|
||||
|
@ -43,6 +43,7 @@ set (CLDLL_SOURCES
|
||||
../dlls/squeakgrenade.cpp
|
||||
../dlls/tripmine.cpp
|
||||
../dlls/glock.cpp
|
||||
../dlls/rebellion/minimp5.cpp
|
||||
ev_hldm.cpp
|
||||
hl/hl_baseentity.cpp
|
||||
hl/hl_events.cpp
|
||||
|
@ -56,6 +56,7 @@ void EV_FireShotGunSingle( struct event_args_s *args );
|
||||
void EV_FireShotGunDouble( struct event_args_s *args );
|
||||
void EV_FireMP5( struct event_args_s *args );
|
||||
void EV_FireMP52( struct event_args_s *args );
|
||||
void EV_FireMiniMP5( struct event_args_s *args );
|
||||
void EV_FirePython( struct event_args_s *args );
|
||||
void EV_FireGauss( struct event_args_s *args );
|
||||
void EV_SpinGauss( struct event_args_s *args );
|
||||
@ -315,6 +316,7 @@ void EV_HLDM_DecalGunshot( pmtrace_t *pTrace, int iBulletType )
|
||||
case BULLET_MONSTER_9MM:
|
||||
case BULLET_PLAYER_MP5:
|
||||
case BULLET_MONSTER_MP5:
|
||||
case BULLET_PLAYER_SNIPER:
|
||||
case BULLET_PLAYER_BUCKSHOT:
|
||||
case BULLET_PLAYER_357:
|
||||
default:
|
||||
@ -445,6 +447,7 @@ void EV_HLDM_FireBullets( int idx, float *forward, float *right, float *up, int
|
||||
EV_HLDM_DecalGunshot( &tr, iBulletType );
|
||||
break;
|
||||
case BULLET_PLAYER_357:
|
||||
case BULLET_PLAYER_SNIPER:
|
||||
EV_HLDM_PlayTextureSound( idx, &tr, vecSrc, vecEnd, iBulletType );
|
||||
EV_HLDM_DecalGunshot( &tr, iBulletType );
|
||||
break;
|
||||
@ -490,7 +493,7 @@ void EV_FireGlock1( event_args_t *args )
|
||||
V_PunchAxis( 0, -2.0 );
|
||||
}
|
||||
|
||||
EV_GetDefaultShellInfo( args, origin, velocity, ShellVelocity, ShellOrigin, forward, right, up, 20, -12, 4 );
|
||||
EV_GetDefaultShellInfo( args, origin, velocity, ShellVelocity, ShellOrigin, forward, right, up, 32, -12, 6 );
|
||||
|
||||
EV_EjectBrass( ShellOrigin, ShellVelocity, angles[YAW], shell, TE_BOUNCE_SHELL );
|
||||
|
||||
@ -531,12 +534,12 @@ void EV_FireGlock2( event_args_t *args )
|
||||
{
|
||||
// Add muzzle flash to current weapon model
|
||||
EV_MuzzleFlash();
|
||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( empty ? GLOCK_SHOOT_EMPTY : GLOCK_SHOOT, 2 );
|
||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( empty ? GLOCK_SHOOT_EMPTY : GLOCK_SHOOT2, 2 );
|
||||
|
||||
V_PunchAxis( 0, -2.0 );
|
||||
}
|
||||
|
||||
EV_GetDefaultShellInfo( args, origin, velocity, ShellVelocity, ShellOrigin, forward, right, up, 20, -12, 4 );
|
||||
EV_GetDefaultShellInfo( args, origin, velocity, ShellVelocity, ShellOrigin, forward, right, up, 32, -12, 6 );
|
||||
|
||||
EV_EjectBrass ( ShellOrigin, ShellVelocity, angles[YAW], shell, TE_BOUNCE_SHELL );
|
||||
|
||||
@ -590,7 +593,7 @@ void EV_FireShotGunDouble( event_args_t *args )
|
||||
|
||||
for( j = 0; j < 2; j++ )
|
||||
{
|
||||
EV_GetDefaultShellInfo( args, origin, velocity, ShellVelocity, ShellOrigin, forward, right, up, 32, -12, 6 );
|
||||
EV_GetDefaultShellInfo( args, origin, velocity, ShellVelocity, ShellOrigin, forward, right, up, 20, -12, 4 );
|
||||
|
||||
EV_EjectBrass( ShellOrigin, ShellVelocity, angles[ YAW ], shell, TE_BOUNCE_SHOTSHELL );
|
||||
}
|
||||
@ -643,7 +646,7 @@ void EV_FireShotGunSingle( event_args_t *args )
|
||||
V_PunchAxis( 0, -5.0 );
|
||||
}
|
||||
|
||||
EV_GetDefaultShellInfo( args, origin, velocity, ShellVelocity, ShellOrigin, forward, right, up, 32, -12, 6 );
|
||||
EV_GetDefaultShellInfo( args, origin, velocity, ShellVelocity, ShellOrigin, forward, right, up, 20, -12, 4 );
|
||||
|
||||
EV_EjectBrass ( ShellOrigin, ShellVelocity, angles[YAW], shell, TE_BOUNCE_SHOTSHELL );
|
||||
|
||||
@ -757,6 +760,73 @@ void EV_FireMP52( event_args_t *args )
|
||||
// MP5 END
|
||||
//======================
|
||||
|
||||
//======================
|
||||
// MINIMP5 START
|
||||
//======================
|
||||
enum minimp5_e
|
||||
{
|
||||
MINIMP5_LONGIDLE = 0,
|
||||
MINIMP5_IDLE1,
|
||||
MINIMP5_RELOAD,
|
||||
MINIMP5_DEPLOY,
|
||||
MINIMP5_FIRE1
|
||||
};
|
||||
|
||||
void EV_FireMiniMP5( event_args_t *args )
|
||||
{
|
||||
int idx;
|
||||
vec3_t origin;
|
||||
vec3_t angles;
|
||||
vec3_t velocity;
|
||||
|
||||
vec3_t ShellVelocity;
|
||||
vec3_t ShellOrigin;
|
||||
int shell;
|
||||
vec3_t vecSrc, vecAiming;
|
||||
vec3_t up, right, forward;
|
||||
float flSpread = 0.01;
|
||||
|
||||
idx = args->entindex;
|
||||
VectorCopy( args->origin, origin );
|
||||
VectorCopy( args->angles, angles );
|
||||
VectorCopy( args->velocity, velocity );
|
||||
|
||||
AngleVectors( angles, forward, right, up );
|
||||
|
||||
shell = gEngfuncs.pEventAPI->EV_FindModelIndex( "models/shell.mdl" );// brass shell
|
||||
|
||||
if( EV_IsLocal( idx ) )
|
||||
{
|
||||
// Add muzzle flash to current weapon model
|
||||
EV_MuzzleFlash();
|
||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( MINIMP5_FIRE1, 2 );
|
||||
|
||||
V_PunchAxis( 0, gEngfuncs.pfnRandomFloat( -2, 2 ) );
|
||||
}
|
||||
|
||||
EV_GetDefaultShellInfo( args, origin, velocity, ShellVelocity, ShellOrigin, forward, right, up, 20, -12, 4 );
|
||||
|
||||
EV_EjectBrass( ShellOrigin, ShellVelocity, angles[YAW], shell, TE_BOUNCE_SHELL );
|
||||
|
||||
switch( gEngfuncs.pfnRandomLong( 0, 1 ) )
|
||||
{
|
||||
case 0:
|
||||
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/hks1.wav", 1, ATTN_NORM, 0, 94 + gEngfuncs.pfnRandomLong( 0, 0xf ) );
|
||||
break;
|
||||
case 1:
|
||||
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/hks2.wav", 1, ATTN_NORM, 0, 94 + gEngfuncs.pfnRandomLong( 0, 0xf ) );
|
||||
break;
|
||||
}
|
||||
|
||||
EV_GetGunPosition( args, vecSrc, origin );
|
||||
VectorCopy( forward, vecAiming );
|
||||
|
||||
EV_HLDM_FireBullets( idx, forward, right, up, 1, vecSrc, vecAiming, 8192, BULLET_PLAYER_MP5, 2, &g_tracerCount[idx - 1], args->fparam1, args->fparam2 );
|
||||
}
|
||||
//======================
|
||||
// MINIMP5 END
|
||||
//======================
|
||||
|
||||
//======================
|
||||
// PHYTON START
|
||||
// ( .357 )
|
||||
@ -1197,128 +1267,41 @@ enum crossbow_e
|
||||
CROSSBOW_HOLSTER2 // empty
|
||||
};
|
||||
|
||||
//=====================
|
||||
// EV_BoltCallback
|
||||
// This function is used to correct the origin and angles
|
||||
// of the bolt, so it looks like it's stuck on the wall.
|
||||
//=====================
|
||||
void EV_BoltCallback( struct tempent_s *ent, float frametime, float currenttime )
|
||||
{
|
||||
ent->entity.origin = ent->entity.baseline.vuser1;
|
||||
ent->entity.angles = ent->entity.baseline.vuser2;
|
||||
}
|
||||
|
||||
void EV_FireCrossbow2( event_args_t *args )
|
||||
{
|
||||
vec3_t vecSrc, vecEnd;
|
||||
vec3_t up, right, forward;
|
||||
pmtrace_t tr;
|
||||
|
||||
int idx;
|
||||
vec3_t origin;
|
||||
vec3_t angles;
|
||||
vec3_t velocity;
|
||||
|
||||
idx = args->entindex;
|
||||
VectorCopy( args->origin, origin );
|
||||
VectorCopy( args->angles, angles );
|
||||
|
||||
VectorCopy( args->velocity, velocity );
|
||||
|
||||
AngleVectors( angles, forward, right, up );
|
||||
|
||||
EV_GetGunPosition( args, vecSrc, origin );
|
||||
|
||||
VectorMA( vecSrc, 8192, forward, vecEnd );
|
||||
|
||||
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/xbow_fire1.wav", 1, ATTN_NORM, 0, 93 + gEngfuncs.pfnRandomLong( 0, 0xF ) );
|
||||
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_ITEM, "weapons/xbow_reload1.wav", gEngfuncs.pfnRandomFloat( 0.95, 1.0 ), ATTN_NORM, 0, 93 + gEngfuncs.pfnRandomLong( 0, 0xF ) );
|
||||
|
||||
if( EV_IsLocal( idx ) )
|
||||
{
|
||||
if( args->iparam1 )
|
||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROSSBOW_FIRE1, 1 );
|
||||
else if( args->iparam2 )
|
||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROSSBOW_FIRE3, 1 );
|
||||
}
|
||||
|
||||
// Store off the old count
|
||||
gEngfuncs.pEventAPI->EV_PushPMStates();
|
||||
|
||||
// Now add in all of the players.
|
||||
gEngfuncs.pEventAPI->EV_SetSolidPlayers ( idx - 1 );
|
||||
gEngfuncs.pEventAPI->EV_SetTraceHull( 2 );
|
||||
gEngfuncs.pEventAPI->EV_PlayerTrace( vecSrc, vecEnd, PM_STUDIO_BOX, -1, &tr );
|
||||
|
||||
//We hit something
|
||||
if( tr.fraction < 1.0 )
|
||||
{
|
||||
physent_t *pe = gEngfuncs.pEventAPI->EV_GetPhysent( tr.ent );
|
||||
|
||||
//Not the world, let's assume we hit something organic ( dog, cat, uncle joe, etc ).
|
||||
if( pe->solid != SOLID_BSP )
|
||||
{
|
||||
switch( gEngfuncs.pfnRandomLong( 0, 1 ) )
|
||||
{
|
||||
case 0:
|
||||
gEngfuncs.pEventAPI->EV_PlaySound( idx, tr.endpos, CHAN_BODY, "weapons/xbow_hitbod1.wav", 1, ATTN_NORM, 0, PITCH_NORM );
|
||||
break;
|
||||
case 1:
|
||||
gEngfuncs.pEventAPI->EV_PlaySound( idx, tr.endpos, CHAN_BODY, "weapons/xbow_hitbod2.wav", 1, ATTN_NORM, 0, PITCH_NORM );
|
||||
break;
|
||||
}
|
||||
}
|
||||
//Stick to world but don't stick to glass, it might break and leave the bolt floating. It can still stick to other non-transparent breakables though.
|
||||
else if( pe->rendermode == kRenderNormal )
|
||||
{
|
||||
gEngfuncs.pEventAPI->EV_PlaySound( 0, tr.endpos, CHAN_BODY, "weapons/xbow_hit1.wav", gEngfuncs.pfnRandomFloat( 0.95, 1.0 ), ATTN_NORM, 0, PITCH_NORM );
|
||||
|
||||
//Not underwater, do some sparks...
|
||||
if( gEngfuncs.PM_PointContents( tr.endpos, NULL ) != CONTENTS_WATER )
|
||||
gEngfuncs.pEfxAPI->R_SparkShower( tr.endpos );
|
||||
|
||||
vec3_t vBoltAngles;
|
||||
int iModelIndex = gEngfuncs.pEventAPI->EV_FindModelIndex( "models/crossbow_bolt.mdl" );
|
||||
|
||||
VectorAngles( forward, vBoltAngles );
|
||||
|
||||
TEMPENTITY *bolt = gEngfuncs.pEfxAPI->R_TempModel( tr.endpos - forward * 10, Vector( 0, 0, 0 ), vBoltAngles , 5, iModelIndex, TE_BOUNCE_NULL );
|
||||
|
||||
if( bolt )
|
||||
{
|
||||
bolt->flags |= ( FTENT_CLIENTCUSTOM ); //So it calls the callback function.
|
||||
bolt->entity.baseline.vuser1 = tr.endpos - forward * 10; // Pull out a little bit
|
||||
bolt->entity.baseline.vuser2 = vBoltAngles; //Look forward!
|
||||
bolt->callback = EV_BoltCallback; //So we can set the angles and origin back. (Stick the bolt to the wall)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gEngfuncs.pEventAPI->EV_PopPMStates();
|
||||
}
|
||||
|
||||
//TODO: Fully predict the fliying bolt.
|
||||
void EV_FireCrossbow( event_args_t *args )
|
||||
{
|
||||
int idx;
|
||||
vec3_t origin;
|
||||
vec3_t angles;
|
||||
vec3_t velocity;
|
||||
|
||||
vec3_t vecSrc, vecAiming;
|
||||
vec3_t up, right, forward;
|
||||
float flSpread = 0.01;
|
||||
|
||||
idx = args->entindex;
|
||||
VectorCopy( args->origin, origin );
|
||||
VectorCopy( args->angles, angles );
|
||||
VectorCopy( args->velocity, velocity );
|
||||
|
||||
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/xbow_fire1.wav", 1, ATTN_NORM, 0, 93 + gEngfuncs.pfnRandomLong( 0, 0xF ) );
|
||||
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_ITEM, "weapons/xbow_reload1.wav", gEngfuncs.pfnRandomFloat( 0.95, 1.0 ), ATTN_NORM, 0, 93 + gEngfuncs.pfnRandomLong( 0, 0xF ) );
|
||||
AngleVectors( angles, forward, right, up );
|
||||
|
||||
//Only play the weapon anims if I shot it.
|
||||
if( EV_IsLocal( idx ) )
|
||||
{
|
||||
if( args->iparam1 )
|
||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROSSBOW_FIRE1, 1 );
|
||||
else if ( args->iparam2 )
|
||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROSSBOW_FIRE3, 1 );
|
||||
// Add muzzle flash to current weapon model
|
||||
EV_MuzzleFlash();
|
||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROSSBOW_FIRE1, 0 );
|
||||
|
||||
V_PunchAxis( 0, -2.0 );
|
||||
}
|
||||
|
||||
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/xbow_fire1.wav", 1, ATTN_NORM, 0, PITCH_HIGH + gEngfuncs.pfnRandomLong( 0, 0xF ) );
|
||||
|
||||
EV_GetGunPosition( args, vecSrc, origin );
|
||||
|
||||
VectorCopy( forward, vecAiming );
|
||||
|
||||
EV_HLDM_FireBullets( idx, forward, right, up, 1, vecSrc, vecAiming, 8192, BULLET_PLAYER_SNIPER, 0, 0, args->fparam1, args->fparam2 );
|
||||
}
|
||||
//======================
|
||||
// CROSSBOW END
|
||||
@ -1534,43 +1517,64 @@ void EV_EgonStop( event_args_t *args )
|
||||
//======================
|
||||
enum hgun_e
|
||||
{
|
||||
HGUN_IDLE1 = 0,
|
||||
HGUN_FIDGETSWAY,
|
||||
HGUN_FIDGETSHAKE,
|
||||
HGUN_DOWN,
|
||||
HGUN_UP,
|
||||
HGUN_RELOAD = 0,
|
||||
HGUN_DEPLOY,
|
||||
HGUN_SHOOT
|
||||
};
|
||||
|
||||
void EV_HornetGunFire( event_args_t *args )
|
||||
{
|
||||
int idx; //, iFireMode;
|
||||
vec3_t origin, angles, vecSrc, forward, right, up;
|
||||
int idx;
|
||||
vec3_t origin;
|
||||
vec3_t angles;
|
||||
vec3_t velocity;
|
||||
|
||||
vec3_t ShellVelocity;
|
||||
vec3_t ShellOrigin;
|
||||
int shell;
|
||||
vec3_t vecSrc, vecAiming;
|
||||
vec3_t up, right, forward;
|
||||
float flSpread = 0.01;
|
||||
|
||||
idx = args->entindex;
|
||||
VectorCopy( args->origin, origin );
|
||||
VectorCopy( args->angles, angles );
|
||||
//iFireMode = args->iparam1;
|
||||
VectorCopy( args->velocity, velocity );
|
||||
|
||||
AngleVectors( angles, forward, right, up );
|
||||
|
||||
shell = gEngfuncs.pEventAPI->EV_FindModelIndex("models/shell.mdl");// brass shell
|
||||
|
||||
//Only play the weapon anims if I shot it.
|
||||
if( EV_IsLocal( idx ) )
|
||||
{
|
||||
V_PunchAxis( 0, gEngfuncs.pfnRandomLong( 0, 2 ) );
|
||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( HGUN_SHOOT, 1 );
|
||||
}
|
||||
// Add muzzle flash to current weapon model
|
||||
EV_MuzzleFlash();
|
||||
//gEngfuncs.pEventAPI->EV_WeaponAnimation( HGUN_SHOOT, 0 );
|
||||
|
||||
V_PunchAxis( 0, gEngfuncs.pfnRandomFloat( -2, 2 ) );
|
||||
}
|
||||
|
||||
EV_GetDefaultShellInfo( args, origin, velocity, ShellVelocity, ShellOrigin, forward, right, up, 20, -12, 4 );
|
||||
|
||||
EV_EjectBrass( ShellOrigin, ShellVelocity, angles[YAW], shell, TE_BOUNCE_SHELL );
|
||||
|
||||
switch( gEngfuncs.pfnRandomLong( 0, 2 ) )
|
||||
{
|
||||
case 0:
|
||||
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "agrunt/ag_fire1.wav", 1, ATTN_NORM, 0, 100 );
|
||||
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/gun1.wav", 1, ATTN_NORM, 0, PITCH_LOW + gEngfuncs.pfnRandomLong( -10, 5 ) );
|
||||
break;
|
||||
case 1:
|
||||
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "agrunt/ag_fire2.wav", 1, ATTN_NORM, 0, 100 );
|
||||
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/gun2.wav", 1, ATTN_NORM, 0, PITCH_LOW + gEngfuncs.pfnRandomLong( -15, 0 ) );
|
||||
break;
|
||||
case 2:
|
||||
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "agrunt/ag_fire3.wav", 1, ATTN_NORM, 0, 100 );
|
||||
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/gun3.wav", 1, ATTN_NORM, 0, PITCH_LOW + gEngfuncs.pfnRandomLong( -20, -5 ) );
|
||||
break;
|
||||
}
|
||||
|
||||
EV_GetGunPosition( args, vecSrc, origin );
|
||||
VectorCopy( forward, vecAiming );
|
||||
|
||||
EV_HLDM_FireBullets( idx, forward, right, up, 1, vecSrc, vecAiming, 8192, BULLET_PLAYER_MP5, 2, &g_tracerCount[idx - 1], args->fparam1, args->fparam2 );
|
||||
}
|
||||
//======================
|
||||
// HORNET END
|
||||
|
@ -15,6 +15,7 @@ typedef enum
|
||||
BULLET_PLAYER_9MM, // glock
|
||||
BULLET_PLAYER_MP5, // mp5
|
||||
BULLET_PLAYER_357, // python
|
||||
BULLET_PLAYER_SNIPER,
|
||||
BULLET_PLAYER_BUCKSHOT, // shotgun
|
||||
BULLET_PLAYER_CROWBAR, // crowbar swipe
|
||||
|
||||
@ -34,7 +35,8 @@ enum glock_e
|
||||
GLOCK_RELOAD_NOT_EMPTY,
|
||||
GLOCK_DRAW,
|
||||
GLOCK_HOLSTER,
|
||||
GLOCK_ADD_SILENCER
|
||||
GLOCK_ADD_SILENCER,
|
||||
GLOCK_SHOOT2
|
||||
};
|
||||
|
||||
enum shotgun_e
|
||||
|
@ -26,12 +26,12 @@ void EV_FireShotGunSingle( struct event_args_s *args );
|
||||
void EV_FireShotGunDouble( struct event_args_s *args );
|
||||
void EV_FireMP5( struct event_args_s *args );
|
||||
void EV_FireMP52( struct event_args_s *args );
|
||||
void EV_FireMiniMP5( struct event_args_s *args );
|
||||
void EV_FirePython( struct event_args_s *args );
|
||||
void EV_FireGauss( struct event_args_s *args );
|
||||
void EV_SpinGauss( struct event_args_s *args );
|
||||
void EV_Crowbar( struct event_args_s *args );
|
||||
void EV_FireCrossbow( struct event_args_s *args );
|
||||
void EV_FireCrossbow2( struct event_args_s *args );
|
||||
void EV_FireRpg( struct event_args_s *args );
|
||||
void EV_EgonFire( struct event_args_s *args );
|
||||
void EV_EgonStop( struct event_args_s *args );
|
||||
@ -63,13 +63,13 @@ void Game_HookEvents( void )
|
||||
gEngfuncs.pfnHookEvent( "events/shotgun2.sc", EV_FireShotGunDouble );
|
||||
gEngfuncs.pfnHookEvent( "events/mp5.sc", EV_FireMP5 );
|
||||
gEngfuncs.pfnHookEvent( "events/mp52.sc", EV_FireMP52 );
|
||||
gEngfuncs.pfnHookEvent( "events/crossbow2.sc", EV_FireMiniMP5 );
|
||||
gEngfuncs.pfnHookEvent( "events/python.sc", EV_FirePython );
|
||||
gEngfuncs.pfnHookEvent( "events/gauss.sc", EV_FireGauss );
|
||||
gEngfuncs.pfnHookEvent( "events/gaussspin.sc", EV_SpinGauss );
|
||||
gEngfuncs.pfnHookEvent( "events/train.sc", EV_TrainPitchAdjust );
|
||||
gEngfuncs.pfnHookEvent( "events/crowbar.sc", EV_Crowbar );
|
||||
gEngfuncs.pfnHookEvent( "events/crossbow1.sc", EV_FireCrossbow );
|
||||
gEngfuncs.pfnHookEvent( "events/crossbow2.sc", EV_FireCrossbow2 );
|
||||
gEngfuncs.pfnHookEvent( "events/rpg.sc", EV_FireRpg );
|
||||
gEngfuncs.pfnHookEvent( "events/egon_fire.sc", EV_EgonFire );
|
||||
gEngfuncs.pfnHookEvent( "events/egon_stop.sc", EV_EgonStop );
|
||||
|
@ -57,6 +57,7 @@ CGlock g_Glock;
|
||||
CCrowbar g_Crowbar;
|
||||
CPython g_Python;
|
||||
CMP5 g_Mp5;
|
||||
CMiniMP5 g_MiniMp5;
|
||||
CCrossbow g_Crossbow;
|
||||
CShotgun g_Shotgun;
|
||||
CRpg g_Rpg;
|
||||
@ -606,6 +607,7 @@ void HUD_InitClientWeapons( void )
|
||||
HUD_PrepEntity( &g_Crowbar, &player );
|
||||
HUD_PrepEntity( &g_Python, &player );
|
||||
HUD_PrepEntity( &g_Mp5, &player );
|
||||
HUD_PrepEntity( &g_MiniMp5, &player );
|
||||
HUD_PrepEntity( &g_Crossbow, &player );
|
||||
HUD_PrepEntity( &g_Shotgun, &player );
|
||||
HUD_PrepEntity( &g_Rpg, &player );
|
||||
@ -691,6 +693,9 @@ void HUD_WeaponsPostThink( local_state_s *from, local_state_s *to, usercmd_t *cm
|
||||
case WEAPON_MP5:
|
||||
pWeapon = &g_Mp5;
|
||||
break;
|
||||
case WEAPON_MINIMP5:
|
||||
pWeapon = &g_MiniMp5;
|
||||
break;
|
||||
case WEAPON_CROSSBOW:
|
||||
pWeapon = &g_Crossbow;
|
||||
break;
|
||||
@ -910,7 +915,7 @@ void HUD_WeaponsPostThink( local_state_s *from, local_state_s *to, usercmd_t *cm
|
||||
body = 0;
|
||||
|
||||
//Show laser sight/scope combo
|
||||
if( pWeapon == &g_Python && bIsMultiplayer() )
|
||||
if( pWeapon == &g_Python )
|
||||
body = 1;
|
||||
|
||||
// Force a fixed anim down to viewmodel
|
||||
|
@ -125,6 +125,7 @@ LOCAL_SRC_FILES := agrunt.cpp airtank.cpp \
|
||||
world.cpp \
|
||||
xen.cpp \
|
||||
zombie.cpp \
|
||||
rebellion/minimp5.cpp \
|
||||
../pm_shared/pm_debug.c \
|
||||
../pm_shared/pm_math.c \
|
||||
../pm_shared/pm_shared.c
|
||||
|
@ -127,6 +127,7 @@ set (SVDLL_SOURCES
|
||||
world.cpp
|
||||
xen.cpp
|
||||
zombie.cpp
|
||||
rebellion/minimp5.cpp
|
||||
../pm_shared/pm_debug.c
|
||||
../pm_shared/pm_math.c
|
||||
../pm_shared/pm_shared.c
|
||||
|
@ -75,8 +75,8 @@ void CCrossbowBolt::Spawn()
|
||||
UTIL_SetSize( pev, Vector( 0, 0, 0 ), Vector( 0, 0, 0 ) );
|
||||
|
||||
SetTouch( &CCrossbowBolt::BoltTouch );
|
||||
SetThink( &CCrossbowBolt::BubbleThink );
|
||||
pev->nextthink = gpGlobals->time + 0.2;
|
||||
//SetThink( &CCrossbowBolt::BubbleThink );
|
||||
pev->nextthink = gpGlobals->time;
|
||||
}
|
||||
|
||||
void CCrossbowBolt::Precache()
|
||||
@ -176,16 +176,10 @@ void CCrossbowBolt::BoltTouch( CBaseEntity *pOther )
|
||||
}
|
||||
}
|
||||
|
||||
if( UTIL_PointContents( pev->origin ) != CONTENTS_WATER )
|
||||
/*if( UTIL_PointContents( pev->origin ) != CONTENTS_WATER )
|
||||
{
|
||||
UTIL_Sparks( pev->origin );
|
||||
}
|
||||
}
|
||||
|
||||
if( g_pGameRules->IsMultiplayer() )
|
||||
{
|
||||
SetThink( &CCrossbowBolt::ExplodeThink );
|
||||
pev->nextthink = gpGlobals->time + 0.1;
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
@ -290,10 +284,12 @@ void CCrossbow::Precache( void )
|
||||
PRECACHE_SOUND( "weapons/xbow_fire1.wav" );
|
||||
PRECACHE_SOUND( "weapons/xbow_reload1.wav" );
|
||||
|
||||
PRECACHE_SOUND( "doberman/sniper_zoom.wav" );
|
||||
PRECACHE_SOUND( "doberman/hev_xbow.wav" );
|
||||
|
||||
UTIL_PrecacheOther( "crossbow_bolt" );
|
||||
|
||||
m_usCrossbow = PRECACHE_EVENT( 1, "events/crossbow1.sc" );
|
||||
m_usCrossbow2 = PRECACHE_EVENT( 1, "events/crossbow2.sc" );
|
||||
}
|
||||
|
||||
int CCrossbow::GetItemInfo( ItemInfo *p )
|
||||
@ -314,6 +310,13 @@ int CCrossbow::GetItemInfo( ItemInfo *p )
|
||||
|
||||
BOOL CCrossbow::Deploy()
|
||||
{
|
||||
#ifdef CLIENT_DLL
|
||||
if( !bIsMultiplayer() )
|
||||
#else
|
||||
if( !g_pGameRules->IsMultiplayer() )
|
||||
#endif
|
||||
EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_ITEM, "doberman/hev_xbow.wav", 1.0, ATTN_NORM, 0, 100 );
|
||||
|
||||
if( m_iClip )
|
||||
return DefaultDeploy( "models/v_crossbow.mdl", "models/p_crossbow.mdl", CROSSBOW_DRAW1, "bow" );
|
||||
return DefaultDeploy( "models/v_crossbow.mdl", "models/p_crossbow.mdl", CROSSBOW_DRAW2, "bow" );
|
||||
@ -323,7 +326,12 @@ void CCrossbow::Holster( int skiplocal /* = 0 */ )
|
||||
{
|
||||
m_fInReload = FALSE;// cancel any reload in progress.
|
||||
|
||||
if( m_fInZoom )
|
||||
if( m_fInZoom == 2 )
|
||||
{
|
||||
m_fInZoom = 1;
|
||||
}
|
||||
|
||||
if( m_fInZoom == 1 )
|
||||
{
|
||||
SecondaryAttack();
|
||||
}
|
||||
@ -337,78 +345,29 @@ void CCrossbow::Holster( int skiplocal /* = 0 */ )
|
||||
|
||||
void CCrossbow::PrimaryAttack( void )
|
||||
{
|
||||
#ifdef CLIENT_DLL
|
||||
if( m_fInZoom && bIsMultiplayer() )
|
||||
#else
|
||||
if( m_fInZoom && g_pGameRules->IsMultiplayer() )
|
||||
#endif
|
||||
{
|
||||
FireSniperBolt();
|
||||
return;
|
||||
}
|
||||
TraceResult tr;
|
||||
|
||||
FireBolt();
|
||||
}
|
||||
|
||||
// this function only gets called in multiplayer
|
||||
void CCrossbow::FireSniperBolt()
|
||||
{
|
||||
m_flNextPrimaryAttack = GetNextAttackDelay( 0.75 );
|
||||
|
||||
if( m_iClip == 0 )
|
||||
// don't fire underwater
|
||||
if( m_pPlayer->pev->waterlevel == 3 )
|
||||
{
|
||||
PlayEmptySound();
|
||||
m_flNextPrimaryAttack = 0.15;
|
||||
return;
|
||||
}
|
||||
|
||||
TraceResult tr;
|
||||
|
||||
m_pPlayer->m_iWeaponVolume = QUIET_GUN_VOLUME;
|
||||
m_iClip--;
|
||||
|
||||
int flags;
|
||||
#if defined( CLIENT_WEAPONS )
|
||||
flags = FEV_NOTHOST;
|
||||
#else
|
||||
flags = 0;
|
||||
#endif
|
||||
|
||||
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usCrossbow2, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0, 0, m_iClip, m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType], 0, 0 );
|
||||
|
||||
// player "shoot" animation
|
||||
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
|
||||
|
||||
Vector anglesAim = m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle;
|
||||
UTIL_MakeVectors( anglesAim );
|
||||
Vector vecSrc = m_pPlayer->GetGunPosition() - gpGlobals->v_up * 2;
|
||||
Vector vecDir = gpGlobals->v_forward;
|
||||
|
||||
UTIL_TraceLine( vecSrc, vecSrc + vecDir * 8192, dont_ignore_monsters, m_pPlayer->edict(), &tr );
|
||||
|
||||
#ifndef CLIENT_DLL
|
||||
if( tr.pHit->v.takedamage )
|
||||
{
|
||||
ClearMultiDamage();
|
||||
CBaseEntity::Instance( tr.pHit )->TraceAttack( m_pPlayer->pev, 120, vecDir, &tr, DMG_BULLET | DMG_NEVERGIB );
|
||||
ApplyMultiDamage( pev, m_pPlayer->pev );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void CCrossbow::FireBolt()
|
||||
{
|
||||
TraceResult tr;
|
||||
|
||||
if( m_iClip == 0 )
|
||||
if( m_iClip <= 0 )
|
||||
{
|
||||
PlayEmptySound();
|
||||
return;
|
||||
}
|
||||
|
||||
m_pPlayer->m_iWeaponVolume = QUIET_GUN_VOLUME;
|
||||
m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH;
|
||||
|
||||
m_iClip--;
|
||||
|
||||
m_pPlayer->pev->effects = (int)( m_pPlayer->pev->effects ) | EF_MUZZLEFLASH;
|
||||
|
||||
int flags;
|
||||
#if defined( CLIENT_WEAPONS )
|
||||
flags = FEV_NOTHOST;
|
||||
@ -435,16 +394,9 @@ void CCrossbow::FireBolt()
|
||||
pBolt->pev->angles = anglesAim;
|
||||
pBolt->pev->owner = m_pPlayer->edict();
|
||||
|
||||
if( m_pPlayer->pev->waterlevel == 3 )
|
||||
{
|
||||
pBolt->pev->velocity = vecDir * BOLT_WATER_VELOCITY;
|
||||
pBolt->pev->speed = BOLT_WATER_VELOCITY;
|
||||
}
|
||||
else
|
||||
{
|
||||
pBolt->pev->velocity = vecDir * BOLT_AIR_VELOCITY;
|
||||
pBolt->pev->speed = BOLT_AIR_VELOCITY;
|
||||
}
|
||||
pBolt->pev->velocity = vecDir * BOLT_AIR_VELOCITY;
|
||||
pBolt->pev->speed = BOLT_AIR_VELOCITY;
|
||||
|
||||
pBolt->pev->avelocity.z = 10;
|
||||
#endif
|
||||
|
||||
@ -452,31 +404,35 @@ void CCrossbow::FireBolt()
|
||||
// HEV suit - indicate out of ammo condition
|
||||
m_pPlayer->SetSuitUpdate( "!HEV_AMO0", FALSE, 0 );
|
||||
|
||||
m_flNextPrimaryAttack = GetNextAttackDelay( 0.75 );
|
||||
m_flNextPrimaryAttack = GetNextAttackDelay( 3.0 );
|
||||
|
||||
m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.75;
|
||||
|
||||
if( m_iClip != 0 )
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 5.0;
|
||||
else
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.75;
|
||||
//m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 3.0;
|
||||
}
|
||||
|
||||
void CCrossbow::SecondaryAttack()
|
||||
{
|
||||
if( m_pPlayer->pev->fov != 0 )
|
||||
EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_ITEM, "doberman/doberman/sniper_zoom.wav", 1.0, ATTN_NORM, 0, 93 + RANDOM_LONG( 0, 0xF ) );
|
||||
if( m_fInZoom == 1 )
|
||||
{
|
||||
DefaultDeploy( "models/v_crossbow.mdl", "models/p_crossbow.mdl", CROSSBOW_DRAW1, "bow" );
|
||||
m_pPlayer->pev->fov = m_pPlayer->m_iFOV = 0; // 0 means reset to default fov
|
||||
m_fInZoom = 0;
|
||||
}
|
||||
else if( m_pPlayer->pev->fov != 20 )
|
||||
else if( m_fInZoom == 2 )
|
||||
{
|
||||
m_pPlayer->pev->fov = m_pPlayer->m_iFOV = 20;
|
||||
DefaultDeploy( "models/w_crossbow.mdl", "models/p_crossbow.mdl", CROSSBOW_DRAW1, "bow" );
|
||||
m_pPlayer->pev->fov = m_pPlayer->m_iFOV = 5;
|
||||
m_fInZoom = 1;
|
||||
}
|
||||
else if( m_fInZoom == 0 )
|
||||
{
|
||||
DefaultDeploy( "models/w_crossbow.mdl", "models/p_crossbow.mdl", CROSSBOW_DRAW1, "bow" );
|
||||
m_pPlayer->pev->fov = m_pPlayer->m_iFOV = 40;
|
||||
m_fInZoom = 2;
|
||||
}
|
||||
|
||||
pev->nextthink = UTIL_WeaponTimeBase() + 0.1;
|
||||
m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 1.0;
|
||||
m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.3;
|
||||
}
|
||||
|
||||
void CCrossbow::Reload( void )
|
||||
@ -484,12 +440,17 @@ void CCrossbow::Reload( void )
|
||||
if( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 || m_iClip == CROSSBOW_MAX_CLIP )
|
||||
return;
|
||||
|
||||
if( m_pPlayer->pev->fov != 0 )
|
||||
if( m_fInZoom == 2 )
|
||||
{
|
||||
m_fInZoom = 1;
|
||||
}
|
||||
|
||||
if( m_fInZoom == 1 )
|
||||
{
|
||||
SecondaryAttack();
|
||||
}
|
||||
|
||||
if( DefaultReload( CROSSBOW_MAX_CLIP, CROSSBOW_RELOAD, 4.5 ) )
|
||||
if( DefaultReload( CROSSBOW_MAX_CLIP, CROSSBOW_RELOAD, 2.5 ) )
|
||||
{
|
||||
EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_ITEM, "weapons/xbow_reload1.wav", RANDOM_FLOAT( 0.95, 1.0 ), ATTN_NORM, 0, 93 + RANDOM_LONG( 0, 0xF ) );
|
||||
}
|
||||
@ -504,7 +465,7 @@ void CCrossbow::WeaponIdle( void )
|
||||
if( m_flTimeWeaponIdle < UTIL_WeaponTimeBase() )
|
||||
{
|
||||
float flRand = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 0, 1 );
|
||||
if( flRand <= 0.75 )
|
||||
if( flRand <= 0.5 )
|
||||
{
|
||||
if( m_iClip )
|
||||
{
|
||||
|
@ -74,7 +74,7 @@ public:
|
||||
virtual BOOL IsDeathmatch( void ) = 0;//is this a deathmatch game?
|
||||
virtual BOOL IsTeamplay( void ) { return FALSE; };// is this deathmatch game being played with team rules?
|
||||
virtual BOOL IsCoOp( void ) = 0;// is this a coop game?
|
||||
virtual const char *GetGameDescription( void ) { return "Half-Life"; } // this is the game name that gets seen in the server browser
|
||||
virtual const char *GetGameDescription( void ) { return "REBELLION"; } // this is the game name that gets seen in the server browser
|
||||
|
||||
// Client connection/disconnection
|
||||
virtual BOOL ClientConnected( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[128] ) = 0;// a client just connected to the server (player hasn't spawned yet)
|
||||
|
@ -32,7 +32,8 @@ enum glock_e
|
||||
GLOCK_RELOAD_NOT_EMPTY,
|
||||
GLOCK_DRAW,
|
||||
GLOCK_HOLSTER,
|
||||
GLOCK_ADD_SILENCER
|
||||
GLOCK_ADD_SILENCER,
|
||||
GLOCK_SHOOT2
|
||||
};
|
||||
|
||||
LINK_ENTITY_TO_CLASS( weapon_glock, CGlock )
|
||||
@ -65,6 +66,8 @@ void CGlock::Precache( void )
|
||||
PRECACHE_SOUND( "weapons/pl_gun2.wav" );//silenced handgun
|
||||
PRECACHE_SOUND( "weapons/pl_gun3.wav" );//handgun
|
||||
|
||||
PRECACHE_SOUND( "weapons/arrown.wav" );
|
||||
|
||||
m_usFireGlock1 = PRECACHE_EVENT( 1, "events/glock1.sc" );
|
||||
m_usFireGlock2 = PRECACHE_EVENT( 1, "events/glock2.sc" );
|
||||
}
|
||||
@ -100,6 +103,7 @@ int CGlock::AddToPlayer( CBasePlayer *pPlayer )
|
||||
|
||||
BOOL CGlock::Deploy()
|
||||
{
|
||||
EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_ITEM, "weapons/arrown.wav", 1.0, ATTN_NORM, 0, 100 );
|
||||
// pev->body = 1;
|
||||
return DefaultDeploy( "models/v_9mmhandgun.mdl", "models/p_9mmhandgun.mdl", GLOCK_DRAW, "onehanded", /*UseDecrement() ? 1 : 0*/ 0 );
|
||||
}
|
||||
|
@ -21,32 +21,17 @@
|
||||
#include "weapons.h"
|
||||
#include "nodes.h"
|
||||
#include "player.h"
|
||||
#include "hornet.h"
|
||||
#include "gamerules.h"
|
||||
|
||||
enum hgun_e
|
||||
{
|
||||
HGUN_IDLE1 = 0,
|
||||
HGUN_FIDGETSWAY,
|
||||
HGUN_FIDGETSHAKE,
|
||||
HGUN_DOWN,
|
||||
HGUN_UP,
|
||||
HGUN_RELOAD = 0,
|
||||
HGUN_DEPLOY,
|
||||
HGUN_SHOOT
|
||||
};
|
||||
|
||||
enum firemode_e
|
||||
{
|
||||
FIREMODE_TRACK = 0,
|
||||
FIREMODE_FAST
|
||||
};
|
||||
|
||||
LINK_ENTITY_TO_CLASS( weapon_hornetgun, CHgun )
|
||||
|
||||
BOOL CHgun::IsUseable( void )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void CHgun::Spawn()
|
||||
{
|
||||
Precache();
|
||||
@ -54,7 +39,6 @@ void CHgun::Spawn()
|
||||
SET_MODEL( ENT( pev ), "models/w_hgun.mdl" );
|
||||
|
||||
m_iDefaultAmmo = HIVEHAND_DEFAULT_GIVE;
|
||||
m_iFirePhase = 0;
|
||||
|
||||
FallInit();// get ready to fall down.
|
||||
}
|
||||
@ -65,22 +49,30 @@ void CHgun::Precache( void )
|
||||
PRECACHE_MODEL( "models/w_hgun.mdl" );
|
||||
PRECACHE_MODEL( "models/p_hgun.mdl" );
|
||||
|
||||
m_usHornetFire = PRECACHE_EVENT( 1, "events/firehornet.sc" );
|
||||
m_iShell = PRECACHE_MODEL( "models/shell.mdl" );// brass shell TE_MODEL
|
||||
|
||||
PRECACHE_MODEL( "models/w_9mmARclip.mdl" );
|
||||
PRECACHE_SOUND( "items/9mmclip1.wav" );
|
||||
|
||||
UTIL_PrecacheOther( "hornet" );
|
||||
PRECACHE_SOUND( "items/clipinsert1.wav" );
|
||||
PRECACHE_SOUND( "items/cliprelease1.wav" );
|
||||
|
||||
PRECACHE_SOUND( "weapons/357_cock1.wav" );
|
||||
|
||||
PRECACHE_SOUND( "weapons/gun1.wav" );
|
||||
PRECACHE_SOUND( "weapons/gun2.wav" );
|
||||
PRECACHE_SOUND( "weapons/gun3.wav" );
|
||||
|
||||
PRECACHE_SOUND( "weapons/suleuse.wav" );
|
||||
PRECACHE_SOUND( "weapons/rotreload.wav" );
|
||||
|
||||
m_usHornetFire = PRECACHE_EVENT( 1, "events/firehornet.sc" );
|
||||
}
|
||||
|
||||
int CHgun::AddToPlayer( CBasePlayer *pPlayer )
|
||||
{
|
||||
if( CBasePlayerWeapon::AddToPlayer( pPlayer ) )
|
||||
{
|
||||
#ifndef CLIENT_DLL
|
||||
if( g_pGameRules->IsMultiplayer() )
|
||||
{
|
||||
// in multiplayer, all hivehands come full.
|
||||
pPlayer->m_rgAmmo[PrimaryAmmoIndex()] = HORNET_MAX_CARRY;
|
||||
}
|
||||
#endif
|
||||
MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev );
|
||||
WRITE_BYTE( m_iId );
|
||||
MESSAGE_END();
|
||||
@ -92,15 +84,15 @@ int CHgun::AddToPlayer( CBasePlayer *pPlayer )
|
||||
int CHgun::GetItemInfo( ItemInfo *p )
|
||||
{
|
||||
p->pszName = STRING( pev->classname );
|
||||
p->pszAmmo1 = "Hornets";
|
||||
p->pszAmmo1 = "9mm";
|
||||
p->iMaxAmmo1 = HORNET_MAX_CARRY;
|
||||
p->pszAmmo2 = NULL;
|
||||
p->iMaxAmmo2 = -1;
|
||||
p->iMaxClip = WEAPON_NOCLIP;
|
||||
p->iSlot = 3;
|
||||
p->iPosition = 3;
|
||||
p->iMaxClip = HORNETGUN_MAX_CLIP;
|
||||
p->iSlot = 2;
|
||||
p->iPosition = 4;
|
||||
p->iId = m_iId = WEAPON_HORNETGUN;
|
||||
p->iFlags = ITEM_FLAG_NOAUTOSWITCHEMPTY | ITEM_FLAG_NOAUTORELOAD;
|
||||
p->iFlags = 0;
|
||||
p->iWeight = HORNETGUN_WEIGHT;
|
||||
|
||||
return 1;
|
||||
@ -108,41 +100,66 @@ int CHgun::GetItemInfo( ItemInfo *p )
|
||||
|
||||
BOOL CHgun::Deploy()
|
||||
{
|
||||
return DefaultDeploy( "models/v_hgun.mdl", "models/p_hgun.mdl", HGUN_UP, "hive" );
|
||||
}
|
||||
#ifdef CLIENT_DLL
|
||||
if( !bIsMultiplayer() )
|
||||
#else
|
||||
if( !g_pGameRules->IsMultiplayer() )
|
||||
#endif
|
||||
EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_ITEM, "weapons/suleuse.wav", 1.0, ATTN_NORM, 0, 100 );
|
||||
|
||||
void CHgun::Holster( int skiplocal /* = 0 */ )
|
||||
{
|
||||
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.5;
|
||||
SendWeaponAnim( HGUN_DOWN );
|
||||
|
||||
//!!!HACKHACK - can't select hornetgun if it's empty! no way to get ammo for it, either.
|
||||
if( !m_pPlayer->m_rgAmmo[PrimaryAmmoIndex()] )
|
||||
{
|
||||
m_pPlayer->m_rgAmmo[PrimaryAmmoIndex()] = 1;
|
||||
}
|
||||
return DefaultDeploy( "models/v_hgun.mdl", "models/p_hgun.mdl", HGUN_DEPLOY, "mp5" );
|
||||
}
|
||||
|
||||
void CHgun::PrimaryAttack()
|
||||
{
|
||||
Reload();
|
||||
|
||||
if(m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0)
|
||||
// don't fire underwater
|
||||
if( m_pPlayer->pev->waterlevel == 3 )
|
||||
{
|
||||
PlayEmptySound();
|
||||
m_flNextPrimaryAttack = 0.15;
|
||||
return;
|
||||
}
|
||||
#ifndef CLIENT_DLL
|
||||
UTIL_MakeVectors( m_pPlayer->pev->v_angle );
|
||||
|
||||
CBaseEntity *pHornet = CBaseEntity::Create( "hornet", m_pPlayer->GetGunPosition( ) + gpGlobals->v_forward * 16 + gpGlobals->v_right * 8 + gpGlobals->v_up * -12, m_pPlayer->pev->v_angle, m_pPlayer->edict() );
|
||||
pHornet->pev->velocity = gpGlobals->v_forward * 300;
|
||||
if( m_iClip <= 0 )
|
||||
{
|
||||
PlayEmptySound();
|
||||
m_flNextPrimaryAttack = 0.15;
|
||||
return;
|
||||
}
|
||||
|
||||
m_flRechargeTime = gpGlobals->time + 0.5;
|
||||
m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME;
|
||||
m_pPlayer->m_iWeaponFlash = NORMAL_GUN_FLASH;
|
||||
|
||||
m_iClip--;
|
||||
|
||||
m_pPlayer->pev->effects = (int)( m_pPlayer->pev->effects ) | EF_MUZZLEFLASH;
|
||||
|
||||
// player "shoot" animation
|
||||
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
|
||||
|
||||
Vector vecSrc = m_pPlayer->GetGunPosition();
|
||||
Vector vecAiming = m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES );
|
||||
Vector vecDir;
|
||||
#ifdef CLIENT_DLL
|
||||
if( !bIsMultiplayer() )
|
||||
#else
|
||||
if( !g_pGameRules->IsMultiplayer() )
|
||||
#endif
|
||||
m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--;
|
||||
|
||||
m_pPlayer->m_iWeaponVolume = QUIET_GUN_VOLUME;
|
||||
m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH;
|
||||
{
|
||||
// optimized multiplayer. Widened to make it easier to hit a moving player
|
||||
vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, VECTOR_CONE_6DEGREES, 8192, BULLET_PLAYER_MP5, 2, 0, m_pPlayer->pev, m_pPlayer->random_seed );
|
||||
}
|
||||
else
|
||||
{
|
||||
// single player spread
|
||||
vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, VECTOR_CONE_3DEGREES, 8192, BULLET_PLAYER_MP5, 2, 0, m_pPlayer->pev, m_pPlayer->random_seed );
|
||||
}
|
||||
|
||||
if( m_flNextSpinTime < gpGlobals->time )
|
||||
{
|
||||
SendWeaponAnim( HGUN_SHOOT );
|
||||
m_flNextSpinTime = gpGlobals->time + 1.0f;
|
||||
}
|
||||
|
||||
int flags;
|
||||
#if defined( CLIENT_WEAPONS )
|
||||
@ -150,136 +167,24 @@ void CHgun::PrimaryAttack()
|
||||
#else
|
||||
flags = 0;
|
||||
#endif
|
||||
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usHornetFire, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, FIREMODE_TRACK, 0, 0, 0 );
|
||||
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usHornetFire, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, 0, 0, 0, 0 );
|
||||
|
||||
// player "shoot" animation
|
||||
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
|
||||
if( !m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 )
|
||||
// HEV suit - indicate out of ammo condition
|
||||
m_pPlayer->SetSuitUpdate( "!HEV_AMO0", FALSE, 0 );
|
||||
|
||||
m_flNextPrimaryAttack = m_flNextPrimaryAttack + 0.25;
|
||||
m_flNextPrimaryAttack = GetNextAttackDelay( 0.05 );
|
||||
|
||||
if( m_flNextPrimaryAttack < UTIL_WeaponTimeBase() )
|
||||
{
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.25;
|
||||
}
|
||||
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 );
|
||||
}
|
||||
|
||||
void CHgun::SecondaryAttack( void )
|
||||
{
|
||||
Reload();
|
||||
|
||||
if( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//Wouldn't be a bad idea to completely predict these, since they fly so fast...
|
||||
#ifndef CLIENT_DLL
|
||||
CBaseEntity *pHornet;
|
||||
Vector vecSrc;
|
||||
|
||||
UTIL_MakeVectors( m_pPlayer->pev->v_angle );
|
||||
|
||||
vecSrc = m_pPlayer->GetGunPosition() + gpGlobals->v_forward * 16 + gpGlobals->v_right * 8 + gpGlobals->v_up * -12;
|
||||
|
||||
m_iFirePhase++;
|
||||
switch( m_iFirePhase )
|
||||
{
|
||||
case 1:
|
||||
vecSrc = vecSrc + gpGlobals->v_up * 8;
|
||||
break;
|
||||
case 2:
|
||||
vecSrc = vecSrc + gpGlobals->v_up * 8;
|
||||
vecSrc = vecSrc + gpGlobals->v_right * 8;
|
||||
break;
|
||||
case 3:
|
||||
vecSrc = vecSrc + gpGlobals->v_right * 8;
|
||||
break;
|
||||
case 4:
|
||||
vecSrc = vecSrc + gpGlobals->v_up * -8;
|
||||
vecSrc = vecSrc + gpGlobals->v_right * 8;
|
||||
break;
|
||||
case 5:
|
||||
vecSrc = vecSrc + gpGlobals->v_up * -8;
|
||||
break;
|
||||
case 6:
|
||||
vecSrc = vecSrc + gpGlobals->v_up * -8;
|
||||
vecSrc = vecSrc + gpGlobals->v_right * -8;
|
||||
break;
|
||||
case 7:
|
||||
vecSrc = vecSrc + gpGlobals->v_right * -8;
|
||||
break;
|
||||
case 8:
|
||||
vecSrc = vecSrc + gpGlobals->v_up * 8;
|
||||
vecSrc = vecSrc + gpGlobals->v_right * -8;
|
||||
m_iFirePhase = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
pHornet = CBaseEntity::Create( "hornet", vecSrc, m_pPlayer->pev->v_angle, m_pPlayer->edict() );
|
||||
pHornet->pev->velocity = gpGlobals->v_forward * 1200;
|
||||
pHornet->pev->angles = UTIL_VecToAngles( pHornet->pev->velocity );
|
||||
|
||||
pHornet->SetThink( &CHornet::StartDart );
|
||||
|
||||
m_flRechargeTime = gpGlobals->time + 0.5;
|
||||
#endif
|
||||
int flags;
|
||||
#if defined( CLIENT_WEAPONS )
|
||||
flags = FEV_NOTHOST;
|
||||
#else
|
||||
flags = 0;
|
||||
#endif
|
||||
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usHornetFire, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, FIREMODE_FAST, 0, 0, 0 );
|
||||
|
||||
m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--;
|
||||
m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME;
|
||||
m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH;
|
||||
|
||||
// player "shoot" animation
|
||||
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
|
||||
|
||||
m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.1;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 );
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.05;
|
||||
}
|
||||
|
||||
void CHgun::Reload( void )
|
||||
{
|
||||
if( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] >= HORNET_MAX_CARRY )
|
||||
if( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 || m_iClip == HORNETGUN_MAX_CLIP )
|
||||
return;
|
||||
|
||||
while( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] < HORNET_MAX_CARRY && m_flRechargeTime < gpGlobals->time )
|
||||
{
|
||||
m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]++;
|
||||
m_flRechargeTime += 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
void CHgun::WeaponIdle( void )
|
||||
{
|
||||
Reload();
|
||||
|
||||
if( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() )
|
||||
return;
|
||||
|
||||
int iAnim;
|
||||
float flRand = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 0, 1 );
|
||||
if( flRand <= 0.75 )
|
||||
{
|
||||
iAnim = HGUN_IDLE1;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 30.0 / 16 * ( 2 );
|
||||
}
|
||||
else if( flRand <= 0.875 )
|
||||
{
|
||||
iAnim = HGUN_FIDGETSWAY;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 40.0 / 16.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
iAnim = HGUN_FIDGETSHAKE;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 35.0 / 16.0;
|
||||
}
|
||||
SendWeaponAnim( iAnim );
|
||||
EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_ITEM, "weapons/rotreload.wav", 1.0, ATTN_NORM, 0, 100 );
|
||||
DefaultReload( HORNETGUN_MAX_CLIP, HGUN_RELOAD, 4.5f );
|
||||
}
|
||||
#endif
|
||||
|
@ -3461,6 +3461,8 @@ void CBasePlayer::CheatImpulseCommands( int iImpulse )
|
||||
GiveNamedItem( "weapon_satchel" );
|
||||
GiveNamedItem( "weapon_snark" );
|
||||
GiveNamedItem( "weapon_hornetgun" );
|
||||
GiveNamedItem( "weapon_minimp5" );
|
||||
GiveNamedItem( "ammo_minimp5clip" );
|
||||
#endif
|
||||
gEvilImpulse101 = FALSE;
|
||||
break;
|
||||
|
@ -97,20 +97,8 @@ void CPython::Precache( void )
|
||||
|
||||
BOOL CPython::Deploy()
|
||||
{
|
||||
#ifdef CLIENT_DLL
|
||||
if( bIsMultiplayer() )
|
||||
#else
|
||||
if( g_pGameRules->IsMultiplayer() )
|
||||
#endif
|
||||
{
|
||||
// enable laser sight geometry.
|
||||
pev->body = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
pev->body = 0;
|
||||
}
|
||||
|
||||
// enable laser sight geometry.
|
||||
pev->body = 1;
|
||||
return DefaultDeploy( "models/v_357.mdl", "models/p_357.mdl", PYTHON_DRAW, "python", UseDecrement(), pev->body );
|
||||
}
|
||||
|
||||
@ -130,24 +118,15 @@ void CPython::Holster( int skiplocal /* = 0 */ )
|
||||
|
||||
void CPython::SecondaryAttack( void )
|
||||
{
|
||||
#ifdef CLIENT_DLL
|
||||
if( !bIsMultiplayer() )
|
||||
#else
|
||||
if( !g_pGameRules->IsMultiplayer() )
|
||||
#endif
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if( m_pPlayer->pev->fov != 0 )
|
||||
if( m_fInZoom )
|
||||
{
|
||||
m_fInZoom = FALSE;
|
||||
m_pPlayer->pev->fov = m_pPlayer->m_iFOV = 0; // 0 means reset to default fov
|
||||
}
|
||||
else if( m_pPlayer->pev->fov != 40 )
|
||||
else
|
||||
{
|
||||
m_fInZoom = TRUE;
|
||||
m_pPlayer->pev->fov = m_pPlayer->m_iFOV = 40;
|
||||
m_pPlayer->pev->fov = m_pPlayer->m_iFOV = 30;
|
||||
}
|
||||
|
||||
m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.5;
|
||||
@ -215,19 +194,13 @@ void CPython::Reload( void )
|
||||
if( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 || m_iClip == PYTHON_MAX_CLIP )
|
||||
return;
|
||||
|
||||
if( m_pPlayer->pev->fov != 0 )
|
||||
if( m_fInZoom )
|
||||
{
|
||||
m_fInZoom = FALSE;
|
||||
m_pPlayer->pev->fov = m_pPlayer->m_iFOV = 0; // 0 means reset to default fov
|
||||
}
|
||||
|
||||
int bUseScope = FALSE;
|
||||
#ifdef CLIENT_DLL
|
||||
bUseScope = bIsMultiplayer();
|
||||
#else
|
||||
bUseScope = g_pGameRules->IsMultiplayer();
|
||||
#endif
|
||||
if( DefaultReload( PYTHON_MAX_CLIP, PYTHON_RELOAD, 2.0, bUseScope ) )
|
||||
if( DefaultReload( PYTHON_MAX_CLIP, PYTHON_RELOAD, 2.0, 1 ) )
|
||||
{
|
||||
m_flSoundDelay = 1.5;
|
||||
}
|
||||
@ -272,13 +245,7 @@ void CPython::WeaponIdle( void )
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + ( 170.0 / 30.0 );
|
||||
}
|
||||
|
||||
int bUseScope = FALSE;
|
||||
#ifdef CLIENT_DLL
|
||||
bUseScope = bIsMultiplayer();
|
||||
#else
|
||||
bUseScope = g_pGameRules->IsMultiplayer();
|
||||
#endif
|
||||
SendWeaponAnim( iAnim, UseDecrement() ? 1 : 0, bUseScope );
|
||||
SendWeaponAnim( iAnim, UseDecrement(), 1 );
|
||||
}
|
||||
|
||||
class CPythonAmmo : public CBasePlayerAmmo
|
||||
|
232
dlls/rebellion/minimp5.cpp
Normal file
232
dlls/rebellion/minimp5.cpp
Normal file
@ -0,0 +1,232 @@
|
||||
/***
|
||||
*
|
||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
||||
*
|
||||
* This product contains software technology licensed from Id
|
||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Use, distribution, and modification of this source code and/or resulting
|
||||
* object code is restricted to non-commercial enhancements to products from
|
||||
* Valve LLC. All other use, distribution, or modification is prohibited
|
||||
* without written permission from Valve LLC.
|
||||
*
|
||||
****/
|
||||
|
||||
#include "extdll.h"
|
||||
#include "util.h"
|
||||
#include "cbase.h"
|
||||
#include "monsters.h"
|
||||
#include "weapons.h"
|
||||
#include "nodes.h"
|
||||
#include "player.h"
|
||||
#include "soundent.h"
|
||||
#include "gamerules.h"
|
||||
|
||||
enum minimp5_e
|
||||
{
|
||||
MINIMP5_LONGIDLE = 0,
|
||||
MINIMP5_IDLE1,
|
||||
MINIMP5_RELOAD,
|
||||
MINIMP5_DEPLOY,
|
||||
MINIMP5_FIRE1
|
||||
};
|
||||
|
||||
LINK_ENTITY_TO_CLASS( weapon_minimp5, CMiniMP5 )
|
||||
LINK_ENTITY_TO_CLASS( weapon_minimp55, CMiniMP5 )
|
||||
|
||||
//=========================================================
|
||||
//=========================================================
|
||||
void CMiniMP5::Spawn()
|
||||
{
|
||||
pev->classname = MAKE_STRING( "weapon_minimp55" ); // hack to allow for old names
|
||||
Precache();
|
||||
SET_MODEL( ENT( pev ), "models/w_9mmAR.mdl" );
|
||||
m_iId = WEAPON_MINIMP5;
|
||||
|
||||
m_iDefaultAmmo = MINIMP5_DEFAULT_GIVE;
|
||||
|
||||
FallInit();// get ready to fall down.
|
||||
}
|
||||
|
||||
void CMiniMP5::Precache( void )
|
||||
{
|
||||
PRECACHE_MODEL( "models/v_minimp5.mdl" );
|
||||
PRECACHE_MODEL( "models/w_minimp5.mdl" );
|
||||
PRECACHE_MODEL( "models/p_9mmAR.mdl" );
|
||||
|
||||
m_iShell = PRECACHE_MODEL( "models/shell.mdl" );// brass shellTE_MODEL
|
||||
|
||||
PRECACHE_MODEL( "models/w_9mmARclip.mdl" );
|
||||
PRECACHE_SOUND( "items/9mmclip1.wav" );
|
||||
|
||||
PRECACHE_SOUND( "items/clipinsert1.wav" );
|
||||
PRECACHE_SOUND( "items/cliprelease1.wav" );
|
||||
|
||||
PRECACHE_SOUND( "weapons/hks1.wav" );// H to the K
|
||||
PRECACHE_SOUND( "weapons/hks2.wav" );// H to the K
|
||||
PRECACHE_SOUND( "weapons/hks3.wav" );// H to the K
|
||||
|
||||
PRECACHE_SOUND( "weapons/357_cock1.wav" );
|
||||
|
||||
m_usMiniMP5 = PRECACHE_EVENT( 1, "events/crossbow2.sc" );
|
||||
}
|
||||
|
||||
int CMiniMP5::GetItemInfo( ItemInfo *p )
|
||||
{
|
||||
p->pszName = STRING( pev->classname );
|
||||
p->pszAmmo1 = "9mm";
|
||||
p->iMaxAmmo1 = _9MM_MAX_CARRY;
|
||||
p->pszAmmo2 = NULL;
|
||||
p->iMaxAmmo2 = -1;
|
||||
p->iMaxClip = MINIMP5_MAX_CLIP;
|
||||
p->iSlot = 1;
|
||||
p->iPosition = 3;
|
||||
p->iFlags = 0;
|
||||
p->iId = m_iId = WEAPON_MINIMP5;
|
||||
p->iWeight = MINIMP5_WEIGHT;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int CMiniMP5::AddToPlayer( CBasePlayer *pPlayer )
|
||||
{
|
||||
if( CBasePlayerWeapon::AddToPlayer( pPlayer ) )
|
||||
{
|
||||
MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev );
|
||||
WRITE_BYTE( m_iId );
|
||||
MESSAGE_END();
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL CMiniMP5::Deploy()
|
||||
{
|
||||
return DefaultDeploy( "models/v_minimp5.mdl", "models/p_9mmAR.mdl", MINIMP5_DEPLOY, "mp5" );
|
||||
}
|
||||
|
||||
void CMiniMP5::PrimaryAttack()
|
||||
{
|
||||
// don't fire underwater
|
||||
if( m_pPlayer->pev->waterlevel == 3 )
|
||||
{
|
||||
PlayEmptySound();
|
||||
m_flNextPrimaryAttack = 0.15;
|
||||
return;
|
||||
}
|
||||
|
||||
if( m_iClip <= 0 )
|
||||
{
|
||||
PlayEmptySound();
|
||||
m_flNextPrimaryAttack = 0.15;
|
||||
return;
|
||||
}
|
||||
|
||||
m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME;
|
||||
m_pPlayer->m_iWeaponFlash = NORMAL_GUN_FLASH;
|
||||
|
||||
m_iClip--;
|
||||
|
||||
m_pPlayer->pev->effects = (int)( m_pPlayer->pev->effects ) | EF_MUZZLEFLASH;
|
||||
|
||||
// player "shoot" animation
|
||||
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
|
||||
|
||||
Vector vecSrc = m_pPlayer->GetGunPosition();
|
||||
Vector vecAiming = m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES );
|
||||
Vector vecDir;
|
||||
#ifdef CLIENT_DLL
|
||||
if( !bIsMultiplayer() )
|
||||
#else
|
||||
if( !g_pGameRules->IsMultiplayer() )
|
||||
#endif
|
||||
{
|
||||
// optimized multiplayer. Widened to make it easier to hit a moving player
|
||||
vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, VECTOR_CONE_6DEGREES, 8192, BULLET_PLAYER_MP5, 2, 0, m_pPlayer->pev, m_pPlayer->random_seed );
|
||||
}
|
||||
else
|
||||
{
|
||||
// single player spread
|
||||
vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, VECTOR_CONE_3DEGREES, 8192, BULLET_PLAYER_MP5, 2, 0, m_pPlayer->pev, m_pPlayer->random_seed );
|
||||
}
|
||||
|
||||
int flags;
|
||||
#if defined( CLIENT_WEAPONS )
|
||||
flags = FEV_NOTHOST;
|
||||
#else
|
||||
flags = 0;
|
||||
#endif
|
||||
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usMiniMP5, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, 0, 0, 0, 0 );
|
||||
|
||||
if( !m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 )
|
||||
// HEV suit - indicate out of ammo condition
|
||||
m_pPlayer->SetSuitUpdate( "!HEV_AMO0", FALSE, 0 );
|
||||
|
||||
m_flNextPrimaryAttack = GetNextAttackDelay( 0.1 );
|
||||
|
||||
if( m_flNextPrimaryAttack < UTIL_WeaponTimeBase() )
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.1;
|
||||
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 );
|
||||
}
|
||||
|
||||
void CMiniMP5::Reload( void )
|
||||
{
|
||||
if( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 || m_iClip == MINIMP5_MAX_CLIP )
|
||||
return;
|
||||
|
||||
DefaultReload( MINIMP5_MAX_CLIP, MINIMP5_RELOAD, 1.5 );
|
||||
}
|
||||
|
||||
void CMiniMP5::WeaponIdle( void )
|
||||
{
|
||||
ResetEmptySound();
|
||||
|
||||
m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES );
|
||||
|
||||
if( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() )
|
||||
return;
|
||||
|
||||
int iAnim;
|
||||
switch( RANDOM_LONG( 0, 1 ) )
|
||||
{
|
||||
case 0:
|
||||
iAnim = MINIMP5_LONGIDLE;
|
||||
break;
|
||||
default:
|
||||
case 1:
|
||||
iAnim = MINIMP5_IDLE1;
|
||||
break;
|
||||
}
|
||||
|
||||
SendWeaponAnim( iAnim );
|
||||
|
||||
m_flTimeWeaponIdle = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 ); // how long till we do this again.
|
||||
}
|
||||
|
||||
class CMiniMP5AmmoClip : public CBasePlayerAmmo
|
||||
{
|
||||
void Spawn( void )
|
||||
{
|
||||
Precache();
|
||||
SET_MODEL( ENT( pev ), "models/w_9mmARclip.mdl" );
|
||||
CBasePlayerAmmo::Spawn();
|
||||
}
|
||||
void Precache( void )
|
||||
{
|
||||
PRECACHE_MODEL( "models/w_9mmARclip.mdl" );
|
||||
PRECACHE_SOUND( "items/9mmclip1.wav" );
|
||||
}
|
||||
BOOL AddAmmo( CBaseEntity *pOther )
|
||||
{
|
||||
int bResult = ( pOther->GiveAmmo( AMMO_MINIMP5CLIP_GIVE, "9mm", _9MM_MAX_CARRY ) != -1 );
|
||||
if( bResult )
|
||||
{
|
||||
EMIT_SOUND( ENT( pev ), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM );
|
||||
}
|
||||
return bResult;
|
||||
}
|
||||
};
|
||||
|
||||
LINK_ENTITY_TO_CLASS( ammo_minimp5clip, CMiniMP5AmmoClip )
|
@ -36,7 +36,7 @@ public:
|
||||
virtual int IPointsForKill( CBasePlayer *pAttacker, CBasePlayer *pKilled );
|
||||
virtual void InitHUD( CBasePlayer *pl );
|
||||
virtual void DeathNotice( CBasePlayer *pVictim, entvars_t *pKiller, entvars_t *pevInflictor );
|
||||
virtual const char *GetGameDescription( void ) { return "HL Teamplay"; } // this is the game name that gets seen in the server browser
|
||||
virtual const char *GetGameDescription( void ) { return "Team Rebellion"; } // this is the game name that gets seen in the server browser
|
||||
virtual void UpdateGameMode( CBasePlayer *pPlayer ); // the client needs to be informed of the current game mode
|
||||
virtual void PlayerKilled( CBasePlayer *pVictim, entvars_t *pKiller, entvars_t *pInflictor );
|
||||
virtual void Think( void );
|
||||
|
@ -317,6 +317,11 @@ void W_Precache( void )
|
||||
UTIL_PrecacheOther( "ammo_9mmAR" );
|
||||
UTIL_PrecacheOther( "ammo_ARgrenades" );
|
||||
|
||||
// minimp5
|
||||
UTIL_PrecacheOtherWeapon( "weapon_minimp5" );
|
||||
UTIL_PrecacheOtherWeapon( "weapon_minimp55" );
|
||||
UTIL_PrecacheOther( "ammo_minimp5clip" );
|
||||
|
||||
// 9mm ammo box
|
||||
UTIL_PrecacheOther( "ammo_9mmbox" );
|
||||
|
||||
@ -1574,13 +1579,6 @@ TYPEDESCRIPTION CEgon::m_SaveData[] =
|
||||
|
||||
IMPLEMENT_SAVERESTORE( CEgon, CBasePlayerWeapon )
|
||||
|
||||
TYPEDESCRIPTION CHgun::m_SaveData[] =
|
||||
{
|
||||
DEFINE_FIELD( CHgun, m_flRechargeTime, FIELD_FLOAT ),
|
||||
};
|
||||
|
||||
IMPLEMENT_SAVERESTORE( CHgun, CBasePlayerWeapon )
|
||||
|
||||
TYPEDESCRIPTION CSatchel::m_SaveData[] =
|
||||
{
|
||||
DEFINE_FIELD( CSatchel, m_chargeReady, FIELD_INTEGER ),
|
||||
|
@ -77,6 +77,7 @@ public:
|
||||
#define WEAPON_TRIPMINE 13
|
||||
#define WEAPON_SATCHEL 14
|
||||
#define WEAPON_SNARK 15
|
||||
#define WEAPON_MINIMP5 16
|
||||
|
||||
#define WEAPON_ALLWEAPONS (~(1<<WEAPON_SUIT))
|
||||
|
||||
@ -101,10 +102,11 @@ public:
|
||||
#define SNARK_WEIGHT 5
|
||||
#define SATCHEL_WEIGHT -10
|
||||
#define TRIPMINE_WEIGHT -10
|
||||
#define MINIMP5_WEIGHT MP5_WEIGHT
|
||||
|
||||
// weapon clip/carry ammo capacities
|
||||
#define URANIUM_MAX_CARRY 100
|
||||
#define _9MM_MAX_CARRY 250
|
||||
#define _9MM_MAX_CARRY 254
|
||||
#define _357_MAX_CARRY 36
|
||||
#define BUCKSHOT_MAX_CARRY 125
|
||||
#define BOLT_MAX_CARRY 50
|
||||
@ -113,7 +115,7 @@ public:
|
||||
#define SATCHEL_MAX_CARRY 5
|
||||
#define TRIPMINE_MAX_CARRY 5
|
||||
#define SNARK_MAX_CARRY 15
|
||||
#define HORNET_MAX_CARRY 8
|
||||
#define HORNET_MAX_CARRY _9MM_MAX_CARRY
|
||||
#define M203_GRENADE_MAX_CARRY 10
|
||||
|
||||
// the maximum amount of ammo each weapon's clip can hold
|
||||
@ -125,15 +127,16 @@ public:
|
||||
#define MP5_MAX_CLIP 50
|
||||
#define MP5_DEFAULT_AMMO 25
|
||||
#define SHOTGUN_MAX_CLIP 8
|
||||
#define CROSSBOW_MAX_CLIP 5
|
||||
#define CROSSBOW_MAX_CLIP 1
|
||||
#define RPG_MAX_CLIP 1
|
||||
#define GAUSS_MAX_CLIP WEAPON_NOCLIP
|
||||
#define EGON_MAX_CLIP WEAPON_NOCLIP
|
||||
#define HORNETGUN_MAX_CLIP WEAPON_NOCLIP
|
||||
#define HORNETGUN_MAX_CLIP 126
|
||||
#define HANDGRENADE_MAX_CLIP WEAPON_NOCLIP
|
||||
#define SATCHEL_MAX_CLIP WEAPON_NOCLIP
|
||||
#define TRIPMINE_MAX_CLIP WEAPON_NOCLIP
|
||||
#define SNARK_MAX_CLIP WEAPON_NOCLIP
|
||||
#define MINIMP5_MAX_CLIP 80
|
||||
|
||||
// the default amount of ammo that comes with each gun when it spawns
|
||||
#define GLOCK_DEFAULT_GIVE 17
|
||||
@ -142,7 +145,7 @@ public:
|
||||
#define MP5_DEFAULT_AMMO 25
|
||||
#define MP5_M203_DEFAULT_GIVE 0
|
||||
#define SHOTGUN_DEFAULT_GIVE 12
|
||||
#define CROSSBOW_DEFAULT_GIVE 5
|
||||
#define CROSSBOW_DEFAULT_GIVE 1
|
||||
#define RPG_DEFAULT_GIVE 1
|
||||
#define GAUSS_DEFAULT_GIVE 20
|
||||
#define EGON_DEFAULT_GIVE 20
|
||||
@ -150,7 +153,8 @@ public:
|
||||
#define SATCHEL_DEFAULT_GIVE 1
|
||||
#define TRIPMINE_DEFAULT_GIVE 1
|
||||
#define SNARK_DEFAULT_GIVE 5
|
||||
#define HIVEHAND_DEFAULT_GIVE 8
|
||||
#define HIVEHAND_DEFAULT_GIVE 126
|
||||
#define MINIMP5_DEFAULT_GIVE 50
|
||||
|
||||
// The amount of ammo given to a player by an ammo item.
|
||||
#define AMMO_URANIUMBOX_GIVE 20
|
||||
@ -160,10 +164,11 @@ public:
|
||||
#define AMMO_CHAINBOX_GIVE 200
|
||||
#define AMMO_M203BOX_GIVE 2
|
||||
#define AMMO_BUCKSHOTBOX_GIVE 12
|
||||
#define AMMO_CROSSBOWCLIP_GIVE CROSSBOW_MAX_CLIP
|
||||
#define AMMO_CROSSBOWCLIP_GIVE 3
|
||||
#define AMMO_RPGCLIP_GIVE RPG_MAX_CLIP
|
||||
#define AMMO_URANIUMBOX_GIVE 20
|
||||
#define AMMO_SNARKBOX_GIVE 5
|
||||
#define AMMO_MINIMP5CLIP_GIVE MINIMP5_MAX_CLIP
|
||||
|
||||
// bullet types
|
||||
typedef enum
|
||||
@ -583,6 +588,34 @@ private:
|
||||
unsigned short m_usMP52;
|
||||
};
|
||||
|
||||
class CMiniMP5 : public CBasePlayerWeapon
|
||||
{
|
||||
public:
|
||||
void Spawn( void );
|
||||
void Precache( void );
|
||||
int iItemSlot( void ) { return 2; }
|
||||
int GetItemInfo(ItemInfo *p);
|
||||
int AddToPlayer( CBasePlayer *pPlayer );
|
||||
|
||||
void PrimaryAttack( void );
|
||||
BOOL Deploy( void );
|
||||
void Reload( void );
|
||||
void WeaponIdle( void );
|
||||
int m_iShell;
|
||||
|
||||
virtual BOOL UseDecrement( void )
|
||||
{
|
||||
#if defined( CLIENT_WEAPONS )
|
||||
return TRUE;
|
||||
#else
|
||||
return FALSE;
|
||||
#endif
|
||||
}
|
||||
|
||||
private:
|
||||
unsigned short m_usMiniMP5;
|
||||
};
|
||||
|
||||
class CCrossbow : public CBasePlayerWeapon
|
||||
{
|
||||
public:
|
||||
@ -591,8 +624,6 @@ public:
|
||||
int iItemSlot( ) { return 3; }
|
||||
int GetItemInfo(ItemInfo *p);
|
||||
|
||||
void FireBolt( void );
|
||||
void FireSniperBolt( void );
|
||||
void PrimaryAttack( void );
|
||||
void SecondaryAttack( void );
|
||||
int AddToPlayer( CBasePlayer *pPlayer );
|
||||
@ -614,7 +645,6 @@ public:
|
||||
|
||||
private:
|
||||
unsigned short m_usCrossbow;
|
||||
unsigned short m_usCrossbow2;
|
||||
};
|
||||
|
||||
class CShotgun : public CBasePlayerWeapon
|
||||
@ -846,29 +876,18 @@ private:
|
||||
class CHgun : public CBasePlayerWeapon
|
||||
{
|
||||
public:
|
||||
#ifndef CLIENT_DLL
|
||||
int Save( CSave &save );
|
||||
int Restore( CRestore &restore );
|
||||
static TYPEDESCRIPTION m_SaveData[];
|
||||
#endif
|
||||
void Spawn( void );
|
||||
void Precache( void );
|
||||
int iItemSlot( void ) { return 4; }
|
||||
int iItemSlot( void ) { return 3; }
|
||||
int GetItemInfo(ItemInfo *p);
|
||||
int AddToPlayer( CBasePlayer *pPlayer );
|
||||
|
||||
void PrimaryAttack( void );
|
||||
void SecondaryAttack( void );
|
||||
BOOL Deploy( void );
|
||||
BOOL IsUseable( void );
|
||||
void Holster( int skiplocal = 0 );
|
||||
void Reload( void );
|
||||
void WeaponIdle( void );
|
||||
float m_flNextAnimTime;
|
||||
|
||||
float m_flRechargeTime;
|
||||
|
||||
int m_iFirePhase;// don't save me.
|
||||
float m_flNextSpinTime;
|
||||
int m_iShell;
|
||||
|
||||
virtual BOOL UseDecrement( void )
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user