📄 gameweapons.cpp
字号:
//----------------------------------------------------------
//
// MODULE : GAMEWEAPONS.CPP
//
// PURPOSE : Blood2 weapon classes
//
// CREATED : 9/20/97
//
//----------------------------------------------------------
// Includes....
#include <stdio.h>
#include "InventoryMgr.h"
#include "BaseCharacter.h"
#include "generic_msg_de.h"
#include "GameProjectiles.h"
#include "PlayerObj.h"
#include "SFXMsgIds.h"
#include "ClientTracer.h"
#include "GameWeapons.h"
#include "ObjectUtilities.h"
#include "ClientLaserFX.h"
#include "ViewWeaponModel.h"
#include "ClientServerShared.h"
#include "VolumeBrushTypes.h" // For LiquidFilterFn
#include "destructable.h"
#include "gib.h"
// ----------------------------------------------------------------------- //
//
// ROUTINE: CShikariClaw::Fire()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
DDWORD CShikariClaw::Fire()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE)
return 0;
DBOOL bAltFire = (m_eState == WS_ALT_FIRING);
int sound = pServerDE->IntRandom(0, 4);
// Choose a random firing sound
if (bAltFire)
{
if (sound < 1) m_szFireSound = "Sounds\\Slash1.wav";
else if (sound < 2) m_szFireSound = "Sounds\\Slash2.wav";
else if (sound < 3) m_szFireSound = "Sounds\\Slash3.wav";
else m_szFireSound = "Sounds\\Slash4.wav";
}
else
{
if (sound < 1) m_szAltFireSound = "Sounds\\Slash1.wav";
else if (sound < 2) m_szAltFireSound = "Sounds\\Slash2.wav";
else if (sound < 3) m_szAltFireSound = "Sounds\\Slash3.wav";
else m_szAltFireSound = "Sounds\\Slash4.wav";
}
return CWeapon::Fire();
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CSoulCrowbar::Fire()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
DDWORD CSoulCrowbar::Fire()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE)
return 0;
DBOOL bAltFire = (m_eState == WS_ALT_FIRING);
int sound = pServerDE->IntRandom(0, 4);
if (sound < 1) m_szAltFireSound = "Sounds\\Slash1.wav";
else if (sound < 2) m_szAltFireSound = "Sounds\\Slash2.wav";
else if (sound < 3) m_szAltFireSound = "Sounds\\Slash3.wav";
else m_szAltFireSound = "Sounds\\Slash4.wav";
return CWeapon::Fire();
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CSoulAxe::Fire()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
DDWORD CSoulAxe::Fire()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE)
return 0;
DBOOL bAltFire = (m_eState == WS_ALT_FIRING);
int sound = pServerDE->IntRandom(0, 4);
if (sound < 1) m_szAltFireSound = "Sounds\\Slash1.wav";
else if (sound < 2) m_szAltFireSound = "Sounds\\Slash2.wav";
else if (sound < 3) m_szAltFireSound = "Sounds\\Slash3.wav";
else m_szAltFireSound = "Sounds\\Slash4.wav";
return CWeapon::Fire();
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CSoulPipe::Fire()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
DDWORD CSoulPipe::Fire()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE)
return 0;
DBOOL bAltFire = (m_eState == WS_ALT_FIRING);
int sound = pServerDE->IntRandom(0, 4);
if (sound < 1) m_szAltFireSound = "Sounds\\Slash1.wav";
else if (sound < 2) m_szAltFireSound = "Sounds\\Slash2.wav";
else if (sound < 3) m_szAltFireSound = "Sounds\\Slash3.wav";
else m_szAltFireSound = "Sounds\\Slash4.wav";
return CWeapon::Fire();
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CSoulHook::Fire()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
DDWORD CSoulHook::Fire()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE)
return 0;
int sound = pServerDE->IntRandom(0, 4);
if (sound < 1) m_szFireSound = "Sounds\\Slash1.wav";
else if (sound < 2) m_szFireSound = "Sounds\\Slash2.wav";
else if (sound < 3) m_szFireSound = "Sounds\\Slash3.wav";
else m_szFireSound = "Sounds\\Slash4.wav";
return CWeapon::Fire();
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CBehemothClaw::Fire()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
DDWORD CBehemothClaw::Fire()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE)
return 0;
int sound = pServerDE->IntRandom(0, 4);
if (sound < 1) m_szFireSound = "Sounds\\Slash1.wav";
else if (sound < 2) m_szFireSound = "Sounds\\Slash2.wav";
else if (sound < 3) m_szFireSound = "Sounds\\Slash3.wav";
else m_szFireSound = "Sounds\\Slash4.wav";
return CWeapon::Fire();
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CNightmareBite::Fire()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
DDWORD CNightmareBite::Fire()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE)
return 0;
int sound = pServerDE->IntRandom(0, 4);
if (sound < 1) m_szFireSound = "Sounds\\Slash1.wav";
else if (sound < 2) m_szFireSound = "Sounds\\Slash2.wav";
else if (sound < 3) m_szFireSound = "Sounds\\Slash3.wav";
else m_szFireSound = "Sounds\\Slash4.wav";
return CWeapon::Fire();
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CThiefSuck::Fire()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
DDWORD CThiefSuck::Fire()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE)
return 0;
DBOOL bAltFire = (m_eState == WS_ALT_FIRING);
int sound = pServerDE->IntRandom(0, 4);
if (sound < 1) m_szFireSound = "Sounds\\Slash1.wav";
else if (sound < 2) m_szFireSound = "Sounds\\Slash2.wav";
else if (sound < 3) m_szFireSound = "Sounds\\Slash3.wav";
else m_szFireSound = "Sounds\\Slash4.wav";
return CWeapon::Fire();
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CBoneleechSuck::Fire()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
DDWORD CBoneleechSuck::Fire()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE)
return 0;
int sound = pServerDE->IntRandom(0, 4);
if (sound < 1) m_szFireSound = "Sounds\\Slash1.wav";
else if (sound < 2) m_szFireSound = "Sounds\\Slash2.wav";
else if (sound < 3) m_szFireSound = "Sounds\\Slash3.wav";
else m_szFireSound = "Sounds\\Slash4.wav";
return CWeapon::Fire();
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CEnergyBlast::Fire()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
DDWORD CEnergyBlast::Fire()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE)
return 0;
HCLASS hObjClass = pServerDE->GetObjectClass(m_hOwner);
if(pServerDE->IsKindOf(hObjClass, pServerDE->GetClass("Gideon")))
m_szFireSound = "sounds\\enemies\\gideon\\distfire.wav";
DBOOL bAltFire = (m_eState == WS_ALT_FIRING);
return CWeapon::Fire();
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CEnergyBlast::FireProjectile()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
CProjectile *CEnergyBlast::FireProjectile(DVector *vFire, DFLOAT dist, DBOOL bAltFire)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
CProjectile *pProject = CWeapon::FireProjectile(vFire, dist, bAltFire);
DDWORD dwFlags = pServerDE->GetObjectFlags(pProject->m_hObject);
dwFlags &= ~FLAG_GRAVITY;
pProject->SetFlags(dwFlags);
return pProject;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CGroundStrike::Fire()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
DDWORD CGroundStrike::Fire()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE)
return 0;
DBOOL bAltFire = (m_eState == WS_ALT_FIRING);
return CWeapon::Fire();
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CGroundStrikeBlast::FireProjectile()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
CProjectile *CGroundStrike::FireProjectile(DVector *vFire, DFLOAT dist, DBOOL bAltFire)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
CProjectile *pProject = CWeapon::FireProjectile(vFire, dist, bAltFire);
DDWORD dwFlags = pServerDE->GetObjectFlags(pProject->m_hObject);
dwFlags &= ~FLAG_GRAVITY;
pProject->SetFlags(dwFlags);
return pProject;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CFireball::Fire()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
DDWORD CFireball::Fire()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE)
return 0;
DBOOL bAltFire = (m_eState == WS_ALT_FIRING);
return CWeapon::Fire();
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CFireball::FireProjectile()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
CProjectile *CFireball::FireProjectile(DVector *vFire, DFLOAT dist, DBOOL bAltFire)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
CProjectile *pProject = CWeapon::FireProjectile(vFire, dist, bAltFire);
DDWORD dwFlags = pServerDE->GetObjectFlags(pProject->m_hObject);
dwFlags &= ~FLAG_GRAVITY;
pProject->SetFlags(dwFlags);
return pProject;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CShockwave::Fire()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
DDWORD CShockwave::Fire()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE)
return 0;
DBOOL bAltFire = (m_eState == WS_ALT_FIRING);
return CWeapon::Fire();
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CShockwave::FireProjectile()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
CProjectile *CShockwave::FireProjectile(DVector *vFire, DFLOAT dist, DBOOL bAltFire)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
CProjectile *pProject = CWeapon::FireProjectile(vFire, dist, bAltFire);
DDWORD dwFlags = pServerDE->GetObjectFlags(pProject->m_hObject);
dwFlags &= ~FLAG_GRAVITY;
pProject->SetFlags(dwFlags);
return pProject;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CBehemothShockwave::Fire()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
DDWORD CBehemothShockwave::Fire()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE)
return 0;
DBOOL bAltFire = (m_eState == WS_ALT_FIRING);
return CWeapon::Fire();
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CBehemothShockwave::FireProjectile()
//
// PURPOSE: Fires the weapon
//
// ----------------------------------------------------------------------- //
CProjectile *CBehemothShockwave::FireProjectile(DVector *vFire, DFLOAT dist, DBOOL bAltFire)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
CProjectile *pProject = CWeapon::FireProjectile(vFire, dist, bAltFire);
DDWORD dwFlags = pServerDE->GetObjectFlags(pProject->m_hObject);
dwFlags &= ~FLAG_GRAVITY;
pProject->SetFlags(dwFlags);
return pProject;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -