⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gameweapons.cpp

📁 Blood 2全套源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
//----------------------------------------------------------
//
// 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 + -