mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-03-12 13:31:33 +00:00
Merge rocket launcher source code into rpg.
This commit is contained in:
parent
0d05236654
commit
5c38662c4e
@ -37,7 +37,7 @@ set (CLDLL_SOURCES
|
|||||||
# ../dlls/hornetgun.cpp
|
# ../dlls/hornetgun.cpp
|
||||||
# ../dlls/mp5.cpp
|
# ../dlls/mp5.cpp
|
||||||
# ../dlls/python.cpp
|
# ../dlls/python.cpp
|
||||||
# ../dlls/rpg.cpp
|
../dlls/rpg.cpp
|
||||||
../dlls/satchel.cpp
|
../dlls/satchel.cpp
|
||||||
# ../dlls/shotgun.cpp
|
# ../dlls/shotgun.cpp
|
||||||
# ../dlls/squeakgrenade.cpp
|
# ../dlls/squeakgrenade.cpp
|
||||||
|
@ -59,10 +59,10 @@ CCrowbar g_Crowbar;
|
|||||||
CPython g_Python;
|
CPython g_Python;
|
||||||
CMP5 g_Mp5*/;
|
CMP5 g_Mp5*/;
|
||||||
CCrossbow g_Crossbow;
|
CCrossbow g_Crossbow;
|
||||||
/*
|
|
||||||
CShotgun g_Shotgun;
|
//CShotgun g_Shotgun;
|
||||||
CRpg g_Rpg;
|
CRpg g_Rpg;
|
||||||
CGauss g_Gauss;*/
|
//CGauss g_Gauss;
|
||||||
CEgon g_Egon;
|
CEgon g_Egon;
|
||||||
//CHgun g_HGun;
|
//CHgun g_HGun;
|
||||||
CHandGrenade g_HandGren;
|
CHandGrenade g_HandGren;
|
||||||
@ -630,9 +630,9 @@ void HUD_InitClientWeapons( void )
|
|||||||
/*HUD_PrepEntity( &g_Python, &player );
|
/*HUD_PrepEntity( &g_Python, &player );
|
||||||
HUD_PrepEntity( &g_Mp5, &player );*/
|
HUD_PrepEntity( &g_Mp5, &player );*/
|
||||||
HUD_PrepEntity( &g_Crossbow, &player );
|
HUD_PrepEntity( &g_Crossbow, &player );
|
||||||
/*HUD_PrepEntity( &g_Shotgun, &player );
|
//HUD_PrepEntity( &g_Shotgun, &player );
|
||||||
HUD_PrepEntity( &g_Rpg, &player );
|
HUD_PrepEntity( &g_Rpg, &player );
|
||||||
HUD_PrepEntity( &g_Gauss, &player );*/
|
//HUD_PrepEntity( &g_Gauss, &player );
|
||||||
HUD_PrepEntity( &g_Egon, &player );
|
HUD_PrepEntity( &g_Egon, &player );
|
||||||
//HUD_PrepEntity( &g_HGun, &player );
|
//HUD_PrepEntity( &g_HGun, &player );
|
||||||
HUD_PrepEntity( &g_HandGren, &player );
|
HUD_PrepEntity( &g_HandGren, &player );
|
||||||
@ -714,19 +714,19 @@ void HUD_WeaponsPostThink( local_state_s *from, local_state_s *to, usercmd_t *cm
|
|||||||
case WEAPON_MP5:
|
case WEAPON_MP5:
|
||||||
pWeapon = &g_Mp5;
|
pWeapon = &g_Mp5;
|
||||||
break;*/
|
break;*/
|
||||||
case WEAPON_CROSSBOW:
|
case WEAPON_BOLTGUN:
|
||||||
pWeapon = &g_Crossbow;
|
pWeapon = &g_Crossbow;
|
||||||
break;/*
|
break;/*
|
||||||
case WEAPON_SHOTGUN:
|
case WEAPON_SHOTGUN:
|
||||||
pWeapon = &g_Shotgun;
|
pWeapon = &g_Shotgun;
|
||||||
break;
|
break;*/
|
||||||
case WEAPON_RPG:
|
case WEAPON_ROCKETL:
|
||||||
pWeapon = &g_Rpg;
|
pWeapon = &g_Rpg;
|
||||||
break;
|
break;/*
|
||||||
case WEAPON_GAUSS:
|
case WEAPON_GAUSS:
|
||||||
pWeapon = &g_Gauss;
|
pWeapon = &g_Gauss;
|
||||||
break;*/
|
break;*/
|
||||||
case WEAPON_EGON:
|
case WEAPON_RAILGUN:
|
||||||
pWeapon = &g_Egon;
|
pWeapon = &g_Egon;
|
||||||
break;
|
break;
|
||||||
/*case WEAPON_HORNETGUN:
|
/*case WEAPON_HORNETGUN:
|
||||||
@ -848,11 +848,11 @@ void HUD_WeaponsPostThink( local_state_s *from, local_state_s *to, usercmd_t *cm
|
|||||||
player.m_pActiveItem = g_pWpns[from->client.m_iId];
|
player.m_pActiveItem = g_pWpns[from->client.m_iId];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if( player.m_pActiveItem->m_iId == WEAPON_RPG )
|
if( player.m_pActiveItem->m_iId == WEAPON_ROCKETL )
|
||||||
{
|
{
|
||||||
( (CRpg *)player.m_pActiveItem )->m_fSpotActive = (int)from->client.vuser2[1];
|
( (CRpg *)player.m_pActiveItem )->m_fSpotActive = (int)from->client.vuser2[1];
|
||||||
( (CRpg *)player.m_pActiveItem )->m_cActiveRockets = (int)from->client.vuser2[2];
|
( (CRpg *)player.m_pActiveItem )->m_cActiveRockets = (int)from->client.vuser2[2];
|
||||||
}*/
|
}
|
||||||
|
|
||||||
// Don't go firing anything if we have died.
|
// Don't go firing anything if we have died.
|
||||||
// Or if we don't have a weapon model deployed
|
// Or if we don't have a weapon model deployed
|
||||||
@ -916,11 +916,11 @@ void HUD_WeaponsPostThink( local_state_s *from, local_state_s *to, usercmd_t *cm
|
|||||||
to->client.vuser2[0] = player.ammo_hornets;
|
to->client.vuser2[0] = player.ammo_hornets;
|
||||||
to->client.ammo_rockets = player.ammo_rockets;
|
to->client.ammo_rockets = player.ammo_rockets;
|
||||||
|
|
||||||
/*if( player.m_pActiveItem->m_iId == WEAPON_RPG )
|
if( player.m_pActiveItem->m_iId == WEAPON_ROCKETL )
|
||||||
{
|
{
|
||||||
from->client.vuser2[1] = ( (CRpg *)player.m_pActiveItem)->m_fSpotActive;
|
from->client.vuser2[1] = ( (CRpg *)player.m_pActiveItem)->m_fSpotActive;
|
||||||
from->client.vuser2[2] = ( (CRpg *)player.m_pActiveItem)->m_cActiveRockets;
|
from->client.vuser2[2] = ( (CRpg *)player.m_pActiveItem)->m_cActiveRockets;
|
||||||
}*/
|
}
|
||||||
|
|
||||||
// Make sure that weapon animation matches what the game .dll is telling us
|
// Make sure that weapon animation matches what the game .dll is telling us
|
||||||
// over the wire ( fixes some animation glitches )
|
// over the wire ( fixes some animation glitches )
|
||||||
|
@ -100,7 +100,7 @@ set (SVDLL_SOURCES
|
|||||||
# python.cpp
|
# python.cpp
|
||||||
rat.cpp
|
rat.cpp
|
||||||
roach.cpp
|
roach.cpp
|
||||||
# rpg.cpp
|
rpg.cpp
|
||||||
satchel.cpp
|
satchel.cpp
|
||||||
schedule.cpp
|
schedule.cpp
|
||||||
scientist.cpp
|
scientist.cpp
|
||||||
@ -151,7 +151,7 @@ set (SVDLL_SOURCES
|
|||||||
coldice/uzi.cpp
|
coldice/uzi.cpp
|
||||||
coldice/grenadel.cpp
|
coldice/grenadel.cpp
|
||||||
coldice/ppk.cpp
|
coldice/ppk.cpp
|
||||||
coldice/rocketl.cpp
|
# coldice/rocketl.cpp
|
||||||
../pm_shared/pm_debug.c
|
../pm_shared/pm_debug.c
|
||||||
../pm_shared/pm_math.c
|
../pm_shared/pm_math.c
|
||||||
../pm_shared/pm_shared.c
|
../pm_shared/pm_shared.c
|
||||||
|
@ -1650,11 +1650,11 @@ void UpdateClientData( const struct edict_s *ent, int sendweapons, struct client
|
|||||||
cd->vuser4.y = pl->m_rgAmmo[gun->m_iPrimaryAmmoType];
|
cd->vuser4.y = pl->m_rgAmmo[gun->m_iPrimaryAmmoType];
|
||||||
cd->vuser4.z = pl->m_rgAmmo[gun->m_iSecondaryAmmoType];
|
cd->vuser4.z = pl->m_rgAmmo[gun->m_iSecondaryAmmoType];
|
||||||
|
|
||||||
/*if( pl->m_pActiveItem->m_iId == WEAPON_RPG )
|
if( pl->m_pActiveItem->m_iId == WEAPON_ROCKETL )
|
||||||
{
|
{
|
||||||
cd->vuser2.y = ( (CRpg *)pl->m_pActiveItem )->m_fSpotActive;
|
cd->vuser2.y = ( (CRpg *)pl->m_pActiveItem )->m_fSpotActive;
|
||||||
cd->vuser2.z = ( (CRpg *)pl->m_pActiveItem )->m_cActiveRockets;
|
cd->vuser2.z = ( (CRpg *)pl->m_pActiveItem )->m_cActiveRockets;
|
||||||
}*/
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ LINK_ENTITY_TO_CLASS( weapon_gauss, CEgon )
|
|||||||
void CEgon::Spawn()
|
void CEgon::Spawn()
|
||||||
{
|
{
|
||||||
Precache();
|
Precache();
|
||||||
m_iId = WEAPON_EGON;
|
m_iId = WEAPON_RAILGUN;
|
||||||
SET_MODEL( ENT( pev ), "models/w_egon.mdl" );
|
SET_MODEL( ENT( pev ), "models/w_egon.mdl" );
|
||||||
|
|
||||||
m_iDefaultAmmo = RAILGUN_DEFAULT_GIVE;
|
m_iDefaultAmmo = RAILGUN_DEFAULT_GIVE;
|
||||||
|
164
dlls/rpg.cpp
164
dlls/rpg.cpp
@ -38,6 +38,7 @@ enum rpg_e
|
|||||||
};
|
};
|
||||||
|
|
||||||
LINK_ENTITY_TO_CLASS( weapon_rpg, CRpg )
|
LINK_ENTITY_TO_CLASS( weapon_rpg, CRpg )
|
||||||
|
LINK_ENTITY_TO_CLASS( weapon_rocketl, CRpg )
|
||||||
|
|
||||||
#ifndef CLIENT_DLL
|
#ifndef CLIENT_DLL
|
||||||
|
|
||||||
@ -97,7 +98,7 @@ void CLaserSpot::Precache( void )
|
|||||||
PRECACHE_MODEL( "sprites/laserdot.spr" );
|
PRECACHE_MODEL( "sprites/laserdot.spr" );
|
||||||
}
|
}
|
||||||
|
|
||||||
LINK_ENTITY_TO_CLASS( rpg_rocket, CRpgRocket )
|
LINK_ENTITY_TO_CLASS( rocket, CRpgRocket )
|
||||||
|
|
||||||
//=========================================================
|
//=========================================================
|
||||||
//=========================================================
|
//=========================================================
|
||||||
@ -129,7 +130,7 @@ void CRpgRocket::Spawn( void )
|
|||||||
UTIL_SetSize( pev, Vector( 0, 0, 0 ), Vector( 0, 0, 0 ) );
|
UTIL_SetSize( pev, Vector( 0, 0, 0 ), Vector( 0, 0, 0 ) );
|
||||||
UTIL_SetOrigin( pev, pev->origin );
|
UTIL_SetOrigin( pev, pev->origin );
|
||||||
|
|
||||||
pev->classname = MAKE_STRING( "rpg_rocket" );
|
pev->classname = MAKE_STRING( "rocket" );
|
||||||
|
|
||||||
SetThink( &CRpgRocket::IgniteThink );
|
SetThink( &CRpgRocket::IgniteThink );
|
||||||
SetTouch( &CGrenade::ExplodeTouch );
|
SetTouch( &CGrenade::ExplodeTouch );
|
||||||
@ -143,7 +144,7 @@ void CRpgRocket::Spawn( void )
|
|||||||
|
|
||||||
pev->nextthink = gpGlobals->time + 0.4;
|
pev->nextthink = gpGlobals->time + 0.4;
|
||||||
|
|
||||||
pev->dmg = gSkillData.plrDmgRPG;
|
pev->dmg = gSkillData.plrDmgRocket;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=========================================================
|
//=========================================================
|
||||||
@ -184,7 +185,7 @@ void CRpgRocket::IgniteThink( void )
|
|||||||
WRITE_BYTE( TE_BEAMFOLLOW );
|
WRITE_BYTE( TE_BEAMFOLLOW );
|
||||||
WRITE_SHORT( entindex() ); // entity
|
WRITE_SHORT( entindex() ); // entity
|
||||||
WRITE_SHORT( m_iTrail ); // model
|
WRITE_SHORT( m_iTrail ); // model
|
||||||
WRITE_BYTE( 40 ); // life
|
WRITE_BYTE( 5 ); // life
|
||||||
WRITE_BYTE( 5 ); // width
|
WRITE_BYTE( 5 ); // width
|
||||||
WRITE_BYTE( 224 ); // r, g, b
|
WRITE_BYTE( 224 ); // r, g, b
|
||||||
WRITE_BYTE( 224 ); // r, g, b
|
WRITE_BYTE( 224 ); // r, g, b
|
||||||
@ -315,7 +316,7 @@ void CRpg::Reload( void )
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if( m_iClip == 0 )
|
if( m_iClip == 0 )
|
||||||
iResult = DefaultReload( RPG_MAX_CLIP, RPG_RELOAD, 2 );
|
iResult = DefaultReload( ROCKETL_MAX_CLIP, RPG_RELOAD, 2 );
|
||||||
|
|
||||||
if( iResult )
|
if( iResult )
|
||||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 );
|
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 );
|
||||||
@ -323,42 +324,31 @@ void CRpg::Reload( void )
|
|||||||
|
|
||||||
void CRpg::Spawn()
|
void CRpg::Spawn()
|
||||||
{
|
{
|
||||||
|
pev->classname = MAKE_STRING( "weapon_rocketl" );
|
||||||
Precache();
|
Precache();
|
||||||
m_iId = WEAPON_RPG;
|
m_iId = WEAPON_ROCKETL;
|
||||||
|
|
||||||
SET_MODEL( ENT( pev ), "models/w_rpg.mdl" );
|
SET_MODEL( ENT( pev ), "models/wmodels/w_rocketl.mdl" );
|
||||||
m_fSpotActive = 1;
|
m_fSpotActive = 1;
|
||||||
|
|
||||||
#ifdef CLIENT_DLL
|
|
||||||
if( bIsMultiplayer() )
|
|
||||||
#else
|
|
||||||
if( g_pGameRules->IsMultiplayer() )
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
// more default ammo in multiplay.
|
|
||||||
m_iDefaultAmmo = RPG_DEFAULT_GIVE * 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_iDefaultAmmo = RPG_DEFAULT_GIVE;
|
m_iDefaultAmmo = RPG_DEFAULT_GIVE;
|
||||||
}
|
|
||||||
|
|
||||||
FallInit();// get ready to fall down.
|
FallInit();// get ready to fall down.
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRpg::Precache( void )
|
void CRpg::Precache( void )
|
||||||
{
|
{
|
||||||
PRECACHE_MODEL( "models/w_rpg.mdl" );
|
PRECACHE_MODEL( "models/wmodels/w_rocketl.mdl" );
|
||||||
PRECACHE_MODEL( "models/v_rpg.mdl" );
|
PRECACHE_MODEL( "models/vmodels/v_rocketl.mdl" );
|
||||||
PRECACHE_MODEL( "models/p_rpg.mdl" );
|
PRECACHE_MODEL( "models/pmodels/p_rocketl.mdl" );
|
||||||
|
|
||||||
PRECACHE_SOUND( "items/9mmclip1.wav" );
|
|
||||||
|
|
||||||
UTIL_PrecacheOther( "laser_spot" );
|
UTIL_PrecacheOther( "laser_spot" );
|
||||||
UTIL_PrecacheOther( "rpg_rocket" );
|
UTIL_PrecacheOther( "rocket" );
|
||||||
|
|
||||||
PRECACHE_SOUND( "weapons/rocketfire1.wav" );
|
PRECACHE_SOUND( "weapons/rocketfire1.wav" );
|
||||||
PRECACHE_SOUND( "weapons/glauncher.wav" ); // alternative fire sound
|
PRECACHE_SOUND( "weapons/glauncher.wav" ); // alternative fire sound
|
||||||
|
PRECACHE_SOUND( "weapons/rocketalert.wav" );
|
||||||
|
PRECACHE_SOUND( "weapons/rocketload.wav" );
|
||||||
|
|
||||||
m_usRpg = PRECACHE_EVENT( 1, "events/rpg.sc" );
|
m_usRpg = PRECACHE_EVENT( 1, "events/rpg.sc" );
|
||||||
}
|
}
|
||||||
@ -366,16 +356,16 @@ void CRpg::Precache( void )
|
|||||||
int CRpg::GetItemInfo( ItemInfo *p )
|
int CRpg::GetItemInfo( ItemInfo *p )
|
||||||
{
|
{
|
||||||
p->pszName = STRING( pev->classname );
|
p->pszName = STRING( pev->classname );
|
||||||
p->pszAmmo1 = "rockets";
|
p->pszAmmo1 = "rocket";
|
||||||
p->iMaxAmmo1 = ROCKET_MAX_CARRY;
|
p->iMaxAmmo1 = ROCKETL_MAX_CARRY;
|
||||||
p->pszAmmo2 = NULL;
|
p->pszAmmo2 = "heli-rockets";
|
||||||
p->iMaxAmmo2 = -1;
|
p->iMaxAmmo2 = HELIROCKET_MAX_CARRY;
|
||||||
p->iMaxClip = RPG_MAX_CLIP;
|
p->iMaxClip = ROCKETL_MAX_CLIP;
|
||||||
p->iSlot = 3;
|
p->iSlot = 3;
|
||||||
p->iPosition = 0;
|
p->iPosition = 1;
|
||||||
p->iId = m_iId = WEAPON_RPG;
|
p->iId = m_iId = WEAPON_ROCKETL;
|
||||||
p->iFlags = 0;
|
p->iFlags = 0;
|
||||||
p->iWeight = RPG_WEIGHT;
|
p->iWeight = ROCKETL_WEIGHT;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -396,10 +386,10 @@ BOOL CRpg::Deploy()
|
|||||||
{
|
{
|
||||||
if( m_iClip == 0 )
|
if( m_iClip == 0 )
|
||||||
{
|
{
|
||||||
return DefaultDeploy( "models/v_rpg.mdl", "models/p_rpg.mdl", RPG_DRAW_UL, "rpg" );
|
return DefaultDeploy( "models/vmodels/v_rocketl.mdl", "models/pmodels/p_rocketl.mdl", RPG_DRAW_UL, "egon" );
|
||||||
}
|
}
|
||||||
|
|
||||||
return DefaultDeploy( "models/v_rpg.mdl", "models/p_rpg.mdl", RPG_DRAW1, "rpg" );
|
return DefaultDeploy( "models/vmodels/v_rocketl.mdl", "models/pmodels/p_rocketl.mdl", RPG_DRAW1, "egon" );
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL CRpg::CanHolster( void )
|
BOOL CRpg::CanHolster( void )
|
||||||
@ -417,6 +407,8 @@ void CRpg::Holster( int skiplocal /* = 0 */ )
|
|||||||
{
|
{
|
||||||
m_fInReload = FALSE;// cancel any reload in progress.
|
m_fInReload = FALSE;// cancel any reload in progress.
|
||||||
|
|
||||||
|
rocket_load = 0;
|
||||||
|
|
||||||
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.5;
|
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.5;
|
||||||
|
|
||||||
SendWeaponAnim( RPG_HOLSTER1 );
|
SendWeaponAnim( RPG_HOLSTER1 );
|
||||||
@ -469,12 +461,14 @@ void CRpg::PrimaryAttack()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
PlayEmptySound();
|
PlayEmptySound();
|
||||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.2;
|
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.5;
|
||||||
}
|
}
|
||||||
UpdateSpot();
|
UpdateSpot();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRpg::SecondaryAttack()
|
void CRpg::SecondaryAttack()
|
||||||
|
{
|
||||||
|
if( g_pGameRules->IsRocketArena() == 0 )
|
||||||
{
|
{
|
||||||
m_fSpotActive = !m_fSpotActive;
|
m_fSpotActive = !m_fSpotActive;
|
||||||
|
|
||||||
@ -487,6 +481,55 @@ void CRpg::SecondaryAttack()
|
|||||||
#endif
|
#endif
|
||||||
m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.2;
|
m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.2;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( m_pPlayer->m_rgAmmo[m_iSecondaryAmmoType] )
|
||||||
|
{
|
||||||
|
++rocket_load;
|
||||||
|
if( rocket_load < 4 )
|
||||||
|
{
|
||||||
|
EMIT_SOUND( ENT( m_pPlayer->pev ), CHAN_WEAPON, "weapons/rocketload.wav", 0.9, ATTN_NORM );
|
||||||
|
m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 1.0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EMIT_SOUND( ENT( m_pPlayer->pev ), CHAN_BODY, "weapons/rocketalert.wav", 0.9, ATTN_NORM );
|
||||||
|
|
||||||
|
m_pPlayer->m_iWeaponVolume = LOUD_GUN_VOLUME;
|
||||||
|
m_pPlayer->m_iWeaponFlash = BRIGHT_GUN_FLASH;
|
||||||
|
|
||||||
|
SendWeaponAnim( RPG_FIRE2 );
|
||||||
|
|
||||||
|
// player "shoot" animation
|
||||||
|
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
|
||||||
|
|
||||||
|
UTIL_MakeVectors( m_pPlayer->pev->v_angle );
|
||||||
|
|
||||||
|
Vector vecSrc1 = m_pPlayer->GetGunPosition() + gpGlobals->v_forward * 16 + gpGlobals->v_right * -8 + gpGlobals->v_up * -8;
|
||||||
|
Vector vecSrc2 = m_pPlayer->GetGunPosition() + gpGlobals->v_forward * 16 + gpGlobals->v_right * 0 + gpGlobals->v_up * -8;
|
||||||
|
Vector vecSrc3 = m_pPlayer->GetGunPosition() + gpGlobals->v_forward * 16 + gpGlobals->v_right * 8 + gpGlobals->v_up * -8;
|
||||||
|
|
||||||
|
CRpgRocket *pRocket = CRpgRocket::CreateRpgRocket( vecSrc1, m_pPlayer->pev->v_angle, m_pPlayer, this );
|
||||||
|
CRpgRocket::CreateRpgRocket( vecSrc2, m_pPlayer->pev->v_angle, m_pPlayer, this );
|
||||||
|
CRpgRocket::CreateRpgRocket( vecSrc3, m_pPlayer->pev->v_angle, m_pPlayer, this );
|
||||||
|
|
||||||
|
UTIL_MakeVectors( m_pPlayer->pev->v_angle );
|
||||||
|
pRocket->pev->velocity = pRocket->pev->velocity + gpGlobals->v_forward * DotProduct( m_pPlayer->pev->velocity, gpGlobals->v_forward );
|
||||||
|
|
||||||
|
EMIT_SOUND( ENT( m_pPlayer->pev ), CHAN_WEAPON, "weapons/rocketfire1.wav", 0.9, ATTN_NORM );
|
||||||
|
EMIT_SOUND( ENT( m_pPlayer->pev ), CHAN_ITEM, "weapons/glauncher.wav", 0.7, ATTN_NORM );
|
||||||
|
|
||||||
|
m_pPlayer->m_rgAmmo[m_iSecondaryAmmoType]--;
|
||||||
|
|
||||||
|
rocket_load = 0;
|
||||||
|
|
||||||
|
m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 1.5;
|
||||||
|
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.5;
|
||||||
|
m_pPlayer->pev->punchangle.x -= 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CRpg::WeaponIdle( void )
|
void CRpg::WeaponIdle( void )
|
||||||
{
|
{
|
||||||
@ -555,32 +598,21 @@ class CRpgAmmo : public CBasePlayerAmmo
|
|||||||
void Spawn( void )
|
void Spawn( void )
|
||||||
{
|
{
|
||||||
Precache();
|
Precache();
|
||||||
SET_MODEL( ENT( pev ), "models/w_rpgammo.mdl" );
|
SET_MODEL( ENT( pev ), "models/ammo/w_rocketl.mdl" );
|
||||||
CBasePlayerAmmo::Spawn();
|
CBasePlayerAmmo::Spawn();
|
||||||
}
|
}
|
||||||
void Precache( void )
|
void Precache( void )
|
||||||
{
|
{
|
||||||
PRECACHE_MODEL( "models/w_rpgammo.mdl" );
|
PRECACHE_MODEL( "models/ammo/w_rocketl.mdl" );
|
||||||
PRECACHE_SOUND( "items/9mmclip1.wav" );
|
PRECACHE_SOUND( "items/9mmclip1.wav" );
|
||||||
}
|
}
|
||||||
BOOL AddAmmo( CBaseEntity *pOther )
|
BOOL AddAmmo( CBaseEntity *pOther )
|
||||||
{
|
{
|
||||||
int iGive;
|
int iGive;
|
||||||
#ifdef CLIENT_DLL
|
|
||||||
if( bIsMultiplayer() )
|
|
||||||
#else
|
|
||||||
if( g_pGameRules->IsMultiplayer() )
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
// hand out more ammo per rocket in multiplayer.
|
|
||||||
iGive = AMMO_RPGCLIP_GIVE * 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
iGive = AMMO_RPGCLIP_GIVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( pOther->GiveAmmo( iGive, "rockets", ROCKET_MAX_CARRY ) != -1 )
|
iGive = AMMO_ROCKET_GIVE;
|
||||||
|
|
||||||
|
if( pOther->GiveAmmo( iGive, "rocket", ROCKETL_MAX_CARRY ) != -1 )
|
||||||
{
|
{
|
||||||
EMIT_SOUND( ENT( pev ), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM );
|
EMIT_SOUND( ENT( pev ), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -589,5 +621,31 @@ class CRpgAmmo : public CBasePlayerAmmo
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
LINK_ENTITY_TO_CLASS( ammo_rpgclip, CRpgAmmo )
|
LINK_ENTITY_TO_CLASS( ammo_rocket, CRpgAmmo )
|
||||||
|
|
||||||
|
class CHeliRocketAmmo : public CBasePlayerAmmo
|
||||||
|
{
|
||||||
|
void Spawn( void )
|
||||||
|
{
|
||||||
|
Precache();
|
||||||
|
SET_MODEL( ENT( pev ), "models/ammo/w_rocketl.mdl" );
|
||||||
|
CBasePlayerAmmo::Spawn();
|
||||||
|
}
|
||||||
|
void Precache( void )
|
||||||
|
{
|
||||||
|
PRECACHE_MODEL( "models/ammo/w_rocketl.mdl" );
|
||||||
|
PRECACHE_SOUND( "items/9mmclip1.wav" );
|
||||||
|
}
|
||||||
|
BOOL AddAmmo( CBaseEntity *pOther )
|
||||||
|
{
|
||||||
|
if( pOther->GiveAmmo( HELIROCKET_MAX_CARRY, "heli-rockets", HELIROCKET_MAX_CARRY ) != -1 )
|
||||||
|
{
|
||||||
|
EMIT_SOUND( ENT( pev ), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM );
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
LINK_ENTITY_TO_CLASS( ammo_helirockets, CHeliRocketAmmo )
|
||||||
#endif
|
#endif
|
||||||
|
@ -1627,7 +1627,7 @@ void CBasePlayerWeapon::PrintState( void )
|
|||||||
|
|
||||||
ALERT( at_console, "m_iclip: %i\n", m_iClip );
|
ALERT( at_console, "m_iclip: %i\n", m_iClip );
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
TYPEDESCRIPTION CRpg::m_SaveData[] =
|
TYPEDESCRIPTION CRpg::m_SaveData[] =
|
||||||
{
|
{
|
||||||
DEFINE_FIELD( CRpg, m_fSpotActive, FIELD_INTEGER ),
|
DEFINE_FIELD( CRpg, m_fSpotActive, FIELD_INTEGER ),
|
||||||
@ -1643,7 +1643,7 @@ TYPEDESCRIPTION CRpgRocket::m_SaveData[] =
|
|||||||
};
|
};
|
||||||
|
|
||||||
IMPLEMENT_SAVERESTORE( CRpgRocket, CGrenade )
|
IMPLEMENT_SAVERESTORE( CRpgRocket, CGrenade )
|
||||||
|
/*
|
||||||
TYPEDESCRIPTION CShotgun::m_SaveData[] =
|
TYPEDESCRIPTION CShotgun::m_SaveData[] =
|
||||||
{
|
{
|
||||||
DEFINE_FIELD( CShotgun, m_flNextReload, FIELD_TIME ),
|
DEFINE_FIELD( CShotgun, m_flNextReload, FIELD_TIME ),
|
||||||
|
@ -700,7 +700,7 @@ private:
|
|||||||
unsigned short m_usDoubleFire;
|
unsigned short m_usDoubleFire;
|
||||||
unsigned short m_usSingleFire;
|
unsigned short m_usSingleFire;
|
||||||
};
|
};
|
||||||
|
*/
|
||||||
class CLaserSpot : public CBaseEntity
|
class CLaserSpot : public CBaseEntity
|
||||||
{
|
{
|
||||||
void Spawn( void );
|
void Spawn( void );
|
||||||
@ -775,7 +775,7 @@ public:
|
|||||||
float m_flIgniteTime;
|
float m_flIgniteTime;
|
||||||
CRpg *m_pLauncher;// pointer back to the launcher that fired me.
|
CRpg *m_pLauncher;// pointer back to the launcher that fired me.
|
||||||
};
|
};
|
||||||
|
/*
|
||||||
class CGauss : public CBasePlayerWeapon
|
class CGauss : public CBasePlayerWeapon
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user