void CGibFX::CreateBloodSpray()
{
	CSFXMgr* psfxMgr = g_pGameClientShell->GetSFXMgr();
	if (!psfxMgr) return;

	BSCREATESTRUCT sc;

	VEC_COPY(sc.vPos, m_vPos);
	sc.vPos.y += 30.0f;
	VEC_SET(sc.vVel, 0.0f, -20.0f, 0.0f);
	VEC_SET(sc.vInitialScale, GetRandom(2.0f, 4.0f), GetRandom(2.0f, 4.0f), 1.0f);
	VEC_SET(sc.vFinalScale, GetRandom(0.5f, 0.8f), GetRandom(0.5f, 0.8f), 1.0f);

	sc.dwFlags			= FLAG_VISIBLE | FLAG_SPRITEBIAS | FLAG_NOLIGHT;
	sc.fLifeTime		= 0.5f;
	sc.fInitialAlpha	= 1.0f;
	sc.fFinalAlpha		= 0.0f;
	sc.nType			= OT_SPRITE;

	char* pBloodFiles[] =
	{
		"Sprites\\BloodSplat1.spr",
		"Sprites\\BloodSplat2.spr",
		"Sprites\\BloodSplat3.spr",
		"Sprites\\BloodSplat4.spr"
	};

	sc.pFilename = pBloodFiles[GetRandom(0,3)];


	CSpecialFX* pFX = psfxMgr->CreateSFX(SFX_SCALE_ID, &sc);
	if (pFX) pFX->Update();
}
示例#2
0
CRainFX::CRainFX() : CBaseParticleSystemFX()
{
	m_bFirstUpdate			= DTRUE;
	m_nParticlesAdded		= 0;
	m_fTimeLen				= 0.0f;
	m_fLastTime				= 0.0f;
	m_fNextUpdate			= 0.01f;
	m_dwFlags				= 0;
	m_fLifetime				= 1.0f;
	m_fAreaDensity			= 0.0f;
	m_bGravity				= DTRUE;
	m_fSpread				= 0.0f;
	m_fTimeLimit			= 0.0f;

	VEC_SET(m_vColor1, 200, 255, 255);
	VEC_SET(m_vColor2, 40, 50, 50);
/*
	VEC_SET(m_vColor[0], 255, 255, 255);
	VEC_SET(m_vColor[1], 200, 200, 200);
	VEC_SET(m_vColor[2], 150, 150, 150);
	VEC_SET(m_vColor[3], 100, 100, 100);
	VEC_SET(m_vColor[4], 50, 50, 50);
	VEC_SET(m_vColor[5], 50, 50, 50);
*/
	VEC_INIT(m_vMinOffset);
	VEC_INIT(m_vMaxOffset);
	VEC_INIT(m_vMinVel);
	VEC_INIT(m_vMaxVel);
	VEC_INIT(m_vDims);
	VEC_INIT(m_vDirection);
}
示例#3
0
void CDeathFX::CreateVehicleDeathFX()
{
	CSFXMgr* psfxMgr = g_pGameClientShell->GetSFXMgr();
	if (!psfxMgr) return;

	GIBCREATESTRUCT gib;

    m_pClientDE->AlignRotation(&(gib.rRot), &m_vDir, LTNULL);

    LTFLOAT fDamage = VEC_MAG(m_vDir);

	VEC_COPY(gib.vPos, m_vPos);
	VEC_SET(gib.vMinVel, 50.0f, 100.0f, 50.0f);
	VEC_MULSCALAR(gib.vMinVel, gib.vMinVel, fDamage);
	VEC_SET(gib.vMaxVel, 100.0f, 200.0f, 100.0f);
	VEC_MULSCALAR(gib.vMaxVel, gib.vMaxVel, fDamage);
	gib.fLifeTime		= 20.0f;
	gib.fFadeTime		= 7.0f;
	gib.nGibFlags		= 0;
    gib.bRotate         = LTTRUE;
	gib.eModelId		= m_eModelId;
	gib.eModelStyle		= m_eModelStyle;
	gib.nCode			= m_eCode;
    gib.bSubGibs        = LTTRUE;

	SetupGibTypes(gib);

	psfxMgr->CreateSFX(SFX_GIB_ID, &gib);
}
示例#4
0
Explosion::Explosion() : B2BaseClass()
{
	m_hstrSkinName			= DNULL;
	m_hstrModelName			= DNULL;
	m_hstrSound				= DNULL;
	m_fSoundRadius			= 1000.0f;
	m_fDamageRadius			= 200.0f;
	m_fMaxDamage			= 50.0f;
	m_fMinScale				= 0.1f;
	m_fMaxScale				= 1.0f;
	m_fDuration				= 1.5f;
	m_bCreateSmoke			= DTRUE;
	m_hModel				= DNULL;
	m_fLastDamageTime		= 0.0f;

	m_bCreateLight			= DTRUE;
	m_hLight				= DNULL;
	m_hShockwave			= DNULL;
	m_fMinLightRadius		= 100.0f;
	m_fMaxLightRadius		= 300.0f;
	VEC_SET(m_vLightColor, 1.0f, 0.5f, 0.0f);

	m_bCreateShockwave		= DTRUE;
	m_hstrShockwaveSprite	= DNULL;
	VEC_SET(m_vShockwaveScaleMin, 0.1f, 0.1f, 1.0f);
	VEC_SET(m_vShockwaveScaleMax, 1.0f, 1.0f, 1.0f);
	m_fShockwaveDuration	= 0.0f;

	m_bCreateMark			= DFALSE;
	m_bAddSparks			= DFALSE;
	m_fStartTime			= 0.0f;
	m_fDelay				= 0.0f;
	m_bFirstUpdate			= DFALSE;
	VEC_INIT(m_vRotation);
}
示例#5
0
PolyGrid::PolyGrid() : CClientSFX()
{ 
	VEC_SET(m_vDims, 32.0f, 32.0f, 0.0f);
	VEC_SET(m_vColor1, 50.0f, 50.0f, 200.0f);
	VEC_SET(m_vColor2, 0.0f, 0.0f, 220.0f);
	
	m_fXScaleMin = 15.0f;
	m_fXScaleMax = 15.0f;
	m_fYScaleMin = 15.0f;
	m_fYScaleMax = 15.0f;
	m_fXScaleDuration = 10.0f;
	m_fYScaleDuration = 10.0f;
	m_fXPan = 10.0f;
	m_fYPan = 10.0f;
	m_hstrSurfaceSprite = DNULL;
	m_fAlpha = 0.7f;

	m_nPlasmaType = 1;

	m_bSetup = DFALSE;

	m_dwNumPolies = 160;

	m_nRingRate[0] = 50;
	m_nRingRate[1] = 10;
	m_nRingRate[2] = 30;
	m_nRingRate[3] = 20;
}
void CGibFX::CreateLingeringSmoke(int nIndex)
{
	CSFXMgr* psfxMgr = g_pGameClientShell->GetSFXMgr();
	if (!psfxMgr) return;

	CGameSettings* pSettings = g_pInterfaceMgr->GetSettings();
	if (!pSettings) return;

    uint8 nDetailLevel = pSettings->SpecialFXSetting();
	if (nDetailLevel == RS_LOW) return;

	SMCREATESTRUCT sm;

	char* pTexture = "Sprites\\SmokeTest.spr";

	VEC_SET(sm.vColor1, 100.0f, 100.0f, 100.0f);
	VEC_SET(sm.vColor2, 125.0f, 125.0f, 125.0f);
	VEC_SET(sm.vMinDriftVel, -10.0f, 25.0f, -10.0f);
	VEC_SET(sm.vMaxDriftVel, 10.0f, 50.0f, 10.0f);

    LTFLOAT fVolumeRadius        = 10.0f;
    LTFLOAT fLifeTime            = GetRandom(m_fLifeTime * 0.75f, m_fLifeTime);
    LTFLOAT fRadius              = 1500;
    LTFLOAT fParticleCreateDelta = 0.1f;
    LTFLOAT fMinParticleLife     = 1.0f;
    LTFLOAT fMaxParticleLife     = 5.0f;
    uint8  nNumParticles        = 3;
    LTBOOL  bIgnoreWind          = LTFALSE;

	if (IsLiquid(m_eCode))
	{
		GetLiquidColorRange(m_eCode, &sm.vColor1, &sm.vColor2);
		pTexture			= DEFAULT_BUBBLE_TEXTURE;
		fRadius				= 750.0f;
        bIgnoreWind         = LTTRUE;
		fMinParticleLife	= 1.0f;
		fMaxParticleLife	= 1.5f;
	}

	sm.vPos					= m_Emitters[nIndex].m_vPos;
	sm.hServerObj 		    = m_hGib[nIndex];
	sm.fVolumeRadius		= fVolumeRadius;
	sm.fLifeTime			= fLifeTime;
	sm.fRadius				= fRadius;
	sm.fParticleCreateDelta	= fParticleCreateDelta;
	sm.fMinParticleLife		= fMinParticleLife;
	sm.fMaxParticleLife		= fMaxParticleLife;
	sm.nNumParticles		= nNumParticles;
	sm.bIgnoreWind			= bIgnoreWind;
	sm.hstrTexture			= m_pClientDE->CreateString(pTexture);

	psfxMgr->CreateSFX(SFX_SMOKE_ID, &sm);

	m_pClientDE->FreeString(sm.hstrTexture);
}
示例#7
0
void CProjectile::AddSparks(DVector vPos, DVector vNormal, DFLOAT fDamage, HOBJECT hObject)
{
	CServerDE* pServerDE = BaseClass::GetServerDE();
	if (!pServerDE) return;

	ObjectCreateStruct ocStruct;
	INIT_OBJECTCREATESTRUCT(ocStruct);

	VEC_COPY(ocStruct.m_Pos, vPos);

	HCLASS hClass = pServerDE->GetClass("CClientSparksSFX");

	CClientSparksSFX *pSpark = DNULL;

	if (hClass)
	{
		pSpark = (CClientSparksSFX *)pServerDE->CreateObject(hClass, &ocStruct);
	}

	if (pSpark)
	{
		DVector vColor1, vColor2;
		char* pFile;
		DBYTE nSparks = (DBYTE)fDamage;

		SurfaceType eType = GetSurfaceType(hObject, DNULL);

		switch(eType)
		{
			case SURFTYPE_FLESH:
			{
				VEC_SET(vColor1, 200.0f, 0.0f, 0.0f);
				VEC_SET(vColor2, 255.0f, 0.0f, 0.0f);

				pFile = "spritetextures\\particle1.dtx";

				pSpark->Setup(&vNormal, &vColor1, &vColor2, pFile, nSparks, 0.6f, 2.0f, 500.0f);
				break;
			}
			default:
			{
				VEC_SET(vColor1, 200.0f, 200.0, 200.0f);
				VEC_SET(vColor2, 200.0f, 200.0f, 0.0f);

				pFile = "spritetextures\\particle1.dtx";

				pSpark->Setup(&vNormal, &vColor1, &vColor2, pFile, nSparks, 0.4f, 2.0f, 500.0f);
				break;
			}
		}
	}

	return;
}
示例#8
0
ScaleSprite::ScaleSprite() : GameBase(OT_SPRITE)
{
	VEC_SET(m_vScale, 1.0f, 1.0f, 1.0f);
	VEC_SET(m_vColor, 1.0f, 1.0f, 1.0f);
	m_fAlpha				= 1.0f;
    m_bFlushWithWorld       = LTFALSE;
    m_bRotatable            = LTFALSE;
    m_bStartOn              = LTTRUE;
	m_dwAdditionalFlags		= 0;
    m_hstrDamagedFile       = LTNULL;
    m_hstrDestroyedFile     = LTNULL;
}
void CGibFX::CreateMiniBloodExplosion(int nIndex)
{
	// Add a mini blood explosion...

	CSFXMgr* psfxMgr = g_pGameClientShell->GetSFXMgr();
	if (!psfxMgr) return;

	CGameSettings* pSettings = g_pInterfaceMgr->GetSettings();
	if (!pSettings) return;

    uint8 nDetailLevel = pSettings->SpecialFXSetting();
	if (nDetailLevel == RS_LOW) return;

	char* szBlood[2] = { "SpecialFX\\ParticleTextures\\Blood_1.dtx",
					     "SpecialFX\\ParticleTextures\\Blood_2.dtx" };

	PARTICLESHOWERCREATESTRUCT ps;

	ps.vPos = m_Emitters[nIndex].m_vPos;
	ps.vPos.y += 30.0f;

	ps.vDir.Init(0, 100, 0);
	VEC_SET(ps.vColor1, 200.0f, 200.0f, 200.0f);
	VEC_SET(ps.vColor2, 255.0f, 255.0f, 255.0f);
	ps.pTexture			= szBlood[GetRandom(0,1)];;
	ps.nParticles		= 50;
	ps.fDuration		= 1.0f;
	ps.fEmissionRadius	= 0.3f;
	ps.fRadius			= 800.0f;
	ps.fGravity			= PSFX_DEFAULT_GRAVITY;

	if (IsLiquid(m_eCode))
	{
		ps.vDir	*= 3.0f;
		ps.fEmissionRadius	= 0.2f;
		ps.fRadius			= 700.0f;
	}

	psfxMgr->CreateSFX(SFX_PARTICLESHOWER_ID, &ps);

	// Play appropriate sound...

	char* pSound = GetGibDieSound();

	if (pSound)
	{
		g_pClientSoundMgr->PlaySoundFromPos(ps.vPos, pSound, 300.0f,
			SOUNDPRIORITY_MISC_LOW);
	}
}
示例#10
0
Rain::Rain() : CClientSFX()
{
    m_dwFlags  = 0;
    m_fDensity = 0.0f;
    VEC_INIT(m_vDims);
    m_fLifetime = 1.0f;
    m_bGravity = DTRUE;
    m_fParticleScale = 1.0f;
    m_bTriggered = DFALSE;
    VEC_INIT(m_vDirection);
    VEC_SET(m_vColor1, 200.0f, 255.0f, 255.0f);
    VEC_SET(m_vColor2, 40.0f, 50.0f, 50.0f);
    m_fTimeLimit = 0.0f;
    m_fPulse = 0.0f;
}
示例#11
0
Rotating::Rotating() : Aggregate()
{
	m_hObject			= DNULL;
	m_hstrSpinUpSound	= DNULL;
	m_hstrBusySound		= DNULL;
	m_hstrSpinDownSound	= DNULL;
	m_fSoundRadius		= 1000.0f;
	m_sndLastSound		= DNULL;

	VEC_INIT(m_vVelocity);
	VEC_INIT(m_vSaveVelocity);
	VEC_INIT(m_vSpinUpTime);
	VEC_INIT(m_vSpinDownTime);
	VEC_INIT(m_vSpinTimeLeft);
	VEC_SET(m_vSign, 1.0f, 1.0f, 1.0f);
	
	m_fLastTime		= 0.0f;
	m_fStartTime	= 0.0f;

	m_eState		= RWM_OFF;

	m_fPitch		= 0.0f;
	m_fYaw			= 0.0f;
	m_fRoll			= 0.0f;
}
示例#12
0
void Explosion::AddShockwave(DVector *pvPoint)
{
	if (!g_pServerDE) return;

	ObjectCreateStruct ocStruct;
	INIT_OBJECTCREATESTRUCT(ocStruct);

	DRotation rRot;
	ROT_INIT(rRot);
	g_pServerDE->SetupEuler(&rRot, MATH_HALFPI, 0.0f, 0.0f);

	ROT_COPY(ocStruct.m_Rotation, rRot);
	VEC_COPY(ocStruct.m_Pos, *pvPoint);
	ocStruct.m_Flags = FLAG_VISIBLE | FLAG_ROTATEABLESPRITE;

	CImpact* pShockwave = CreateImpact(ocStruct, m_hstrShockwaveSprite);
	if (!pShockwave) return;

	if (pShockwave)
	{
		DVector vNormal;
		VEC_SET(vNormal, 0.0f, 1.0f, 0.0f);
		pShockwave->Setup(vNormal, m_vShockwaveScaleMin, m_vShockwaveScaleMax, 
						  DNULL, 0, m_fShockwaveDuration, DTRUE, DFALSE);
		m_hShockwave = g_pServerDE->ObjectToHandle(pShockwave);

		g_pServerDE->CreateInterObjectLink(m_hObject, m_hShockwave);	
	}
}
RotatingWorldModel::RotatingWorldModel() : GameBase(OT_WORLDMODEL)
{
	AddAggregate(&m_damage);

    m_hstrSpinUpSound   = LTNULL;
    m_hstrBusySound     = LTNULL;
    m_hstrSpinDownSound = LTNULL;
	m_fSoundRadius		= 1000.0f;
    m_sndLastSound      = LTNULL;
    m_bBoxPhysics       = LTTRUE;

	VEC_INIT(m_vVelocity);
	VEC_INIT(m_vSaveVelocity);
	VEC_INIT(m_vSpinUpTime);
	VEC_INIT(m_vSpinDownTime);
	VEC_INIT(m_vSpinTimeLeft);
	VEC_SET(m_vSign, 1.0f, 1.0f, 1.0f);

	m_fLastTime		= 0.0f;
	m_fStartTime	= 0.0f;

	m_eState		= RWM_NORMAL;

	m_fPitch		= 0.0f;
	m_fYaw			= 0.0f;
	m_fRoll			= 0.0f;

	m_hShadowLightsString = NULL;
	m_nLightAnims = 0;
	m_nShadowAxis = 0;
    m_bFirstUpdate = LTTRUE;

}
示例#14
0
HLOCALOBJ CParticleExplosionFX::CreateDebris()
{
    LTVector vScale;
    VEC_SET(vScale, 1.0f, 1.0f, 1.0f);
    VEC_MULSCALAR(vScale, vScale, GetRandom(1.0f, 5.0f));

    char* pFilename = GetDebrisModel(DBT_STONE_BIG, vScale);
    char* pSkin     = GetDebrisSkin(DBT_STONE_BIG);

    if (!pFilename) return LTNULL;

    ObjectCreateStruct createStruct;
    INIT_OBJECTCREATESTRUCT(createStruct);

    createStruct.m_ObjectType = OT_MODEL;
    SAFE_STRCPY(createStruct.m_Filename, pFilename);
    SAFE_STRCPY(createStruct.m_SkinName, pSkin);
    createStruct.m_Flags = FLAG_VISIBLE | FLAG_NOLIGHT;
    VEC_COPY(createStruct.m_Pos, m_vPos);

    HLOCALOBJ hObj = m_pClientDE->CreateObject(&createStruct);

    m_pClientDE->SetObjectScale(hObj, &vScale);

    return hObj;
}
示例#15
0
FireFX::FireFX() : B2BaseClass(OT_NORMAL)
{
	m_bPlaySound	= DTRUE;
	m_bFirstUpdate	= DTRUE;

	VEC_SET(m_vScale, 0.2f, 0.2f, 0.0f);

	m_fSoundVol		= 200;

	m_hstrAttachTo	= DNULL;
    
    m_hLinkObject   = DNULL;
    m_hLight        = DNULL;
    
    m_fLastTime     = 0.0f;
    m_bDead         = DFALSE;

	m_fBurnTime		= 0.0f;
    
    // Setup default values
    for (int x=0; x<MAXFIRES; x++)
    {
        m_hSmokeTrail[x] = DNULL;
		m_hSprite[x] = DNULL;
		m_fDuration[x] = 0.0f;
    	m_fStartTime[x]	= 0.0f;
    }            

    m_nFireIndex = 0;    
}
Body::Body() : Prop()
{
	VEC_INIT(m_vColor);
	VEC_SET(m_vDeathDir, 0.0f, -1.0f, 0.0f);

	m_eDeathType	= CD_NORMAL;
	m_bFirstUpdate	= LTTRUE;
	m_fStartTime	= 0.0f;
	m_eDamageType	= DT_UNSPECIFIED;

	m_eBodyStatePrevious= eBodyStateNormal;
 	m_eModelNodeLastHit = eModelNodeInvalid;
	m_pAttachments  = LTNULL;
    m_hHitBox       = LTNULL;

	m_eBodyState	= eBodyStateNormal;
    m_pState        = LTNULL;

	m_bMoveToFloor	= LTFALSE;

	m_fLifetime		= -1.0f;

	m_hWeaponItem	= LTNULL;

	m_hChecker		= LTNULL;

	m_cSpears		= 0;
	memset(m_ahSpears, 0, sizeof(HOBJECT)*kMaxSpears);
}
示例#17
0
文件: bug.cpp 项目: Arc0re/lithtech
DBOOL BugAI::InitialUpdate(DVector *pMovement)
{
	CServerDE* pServerDE = GetServerDE();
	if (!pServerDE) return DFALSE;

	//Load up animation indexes if first model instance
    if(m_bLoadAnims)
	{
	    m_Anim_Sound.SetAnimationIndexes(m_hObject);
		m_Anim_Sound.GenerateHitSpheres(m_hObject);
	    m_Anim_Sound.SetSoundRoot("sounds\\enemies\\bug");
		m_bLoadAnims = DFALSE;
	}

	//randomize the size/weight
	DFLOAT fScale = pServerDE->Random(-0.05f, 0.1f);
	VEC_SET(m_vScale,1.0f + fScale, 1.0f, 1.0f + fScale);

    // Init the objects
	m_InventoryMgr.Init(m_hObject);
    
	//Set hit points
	m_damage.Init(m_hObject);
	m_damage.SetHitPoints(m_fAIHitPoints + pServerDE->Random(1,m_fAIRandomHP));
	m_damage.SetMaxHitPoints(m_damage.GetHitPoints());

	//Set armor point
	m_damage.SetArmorPoints(m_fAIArmorPoints);
	m_damage.SetMaxArmorPoints(200.0f);
	m_damage.SetMass(m_fAIMass);

	AI_Mgr::InitStatics(&m_Anim_Sound);
	
	return DTRUE;
}
示例#18
0
文件: ponglyph.c 项目: 128keaton/ltdc
/** State - Start game */
void StateStartGame()
{
	game.page = 0;
	SetPage8(game.page);
	game.yOffset = 0;

	SetScreenColor(0, 0, BG_COLOR);
	ClearScreen8(BG_COLOR);

	game.bAnaglyph = TRUE;
	switch(game.anaglyphFx)
	{
		case 0:	game.bAnaglyph = FALSE; break;
		case 1:	game.power3d = 4; break;
		case 2: game.power3d = 8; break;
		case 3: game.power3d = 12; break;
	}
	switch(game.gameSpeed)
	{
		case 0: game.ballSpeed = 10; break;
		case 1: game.ballSpeed = 15; break;
		case 2: game.ballSpeed = 20; break;
	}

	game.page = 0;
	game.yOffset = 0;
	InitBackground();
	game.lineNum[0] = 0;
	game.lineNum[1] = 0;
	game.bestScore = 0;

	// Player 0
	game.players[0].score = 0;
	VEC_SET(game.players[0].position, F10_SET(50), F10_SET(50), F10_SET(0));
	game.players[0].angle = 0;

	// Player 1
	game.players[1].score = 0;
	VEC_SET(game.players[1].position, F10_SET(-50), F10_SET(-50), F10_SET(FIELD_DEPTH));
	game.players[1].angle = 0;

	// Ball
	VEC_SET(game.ballPos, 0, 0, F10_SET(128));
	VEC_SET(game.ballDir, 0, 0, F10_SET(game.ballSpeed));

	game.state = StateUpdateGame;
}
示例#19
0
DBOOL CLaserBeamFX::UpdateBeam()
{
	if(!m_pClientDE)	return DFALSE;

	DVector		vDist, vUp;
	DRotation	rRot;

	VEC_SET(vUp, 0.0f, 1.0f, 0.0f);
	VEC_SUB(vDist, m_vDest, m_vSource);

	m_pClientDE->AlignRotation(&rRot, &vDist, &vUp);
	m_pClientDE->SetObjectPos(m_hObject, &m_vSource);
	m_pClientDE->SetObjectRotation(m_hObject, &rRot);

	VEC_SET(m_vScale, m_fMinScale, m_fMinScale, VEC_MAG(vDist));
	return	DTRUE;
}
示例#20
0
VolumeBrush::VolumeBrush() : GameBase(OT_CONTAINER)
{
	m_nSfxMsgId			= SFX_VOLUMEBRUSH_ID;
	m_dwSaveFlags		= 0;
	m_eContainerCode	= CC_VOLUME;
	m_fDamage			= 0.0f;
	m_eDamageType		= DT_UNSPECIFIED;
    m_bShowSurface      = LTTRUE;
	m_fSurfaceHeight	= 5.0f;
	m_fViscosity		= 0.0f;
	m_fFriction			= 1.0f;
    m_hSurfaceObj       = LTNULL;
    m_bHidden           = LTFALSE;
	m_fGravity			= LIQUID_GRAVITY;
	m_nSoundFilterId	= 0;
	m_bCanPlayMoveSnds	= LTTRUE;

	VEC_INIT(m_vLastPos);
	VEC_INIT(m_vCurrent);
	VEC_SET(m_vTintColor, 255.0f, 255.0f, 255.0f);
	VEC_INIT(m_vLightAdd);

    m_bFogEnable    = LTFALSE;
	m_fFogFarZ		= 300.0f;
	m_fFogNearZ		= -100.0f;
	VEC_INIT(m_vFogColor);

	// Surface related stuff...

	m_fXScaleMin = 15.0f;
	m_fXScaleMax = 25.0f;
	m_fYScaleMin = 15.0f;
	m_fYScaleMax = 25.0f;
	m_fXScaleDuration = 10.0f;
	m_fYScaleDuration = 10.0f;
    m_hstrSurfaceSprite = LTNULL;
	m_dwNumSurfPolies = 160;
	m_fSurfAlpha = 0.7f;
    m_bAdditive = LTFALSE;
    m_bMultiply = LTFALSE;

	VEC_SET(m_vSurfaceColor1, 255.0f, 255.0f, 255.0f);
	VEC_SET(m_vSurfaceColor2, 255.0f, 255.0f, 255.0f);

	m_dwFlags = FLAG_CONTAINER | FLAG_TOUCH_NOTIFY | FLAG_GOTHRUWORLD | FLAG_FORCECLIENTUPDATE;
}
示例#21
0
LTBOOL CParticleTrailFX::Init(SFXCREATESTRUCT* psfxCreateStruct)
{
	if (!CSpecialFX::Init(psfxCreateStruct)) return LTFALSE;

	PTCREATESTRUCT* pST = (PTCREATESTRUCT*)psfxCreateStruct;
	m_nType  = pST->nType;
	m_bSmall = pST->bSmall;
	
	if (m_nType & PT_BLOOD)
	{
		VEC_SET(m_vDriftOffset, 60.0f, 60.0f, 60.0f);

		m_nNumPerPuff	= 1;
		VEC_SET(m_vColor1, 150.0f, 150.0f, 150.0f);
		VEC_SET(m_vColor2, 200.0f, 200.0f, 200.0f);

		m_fLifeTime		= 0.3f;
		m_fFadeTime		= 0.25f;

		m_fSegmentTime  = 0.1f;
	}
	else if (m_nType & PT_GIBSMOKE)
	{
		VEC_SET(m_vDriftOffset, 60.0f, 60.0f, 60.0f);

		m_nNumPerPuff	= 1;
		VEC_SET(m_vColor1, 100.0f, 100.0f, 100.0f);
		VEC_SET(m_vColor2, 125.0f, 125.0f, 125.0f);

		m_fLifeTime		= 0.75f;
		m_fFadeTime		= 0.25f;

		m_fSegmentTime  = 0.1f;
	}
	else if (m_nType & PT_SMOKE)
	{
		VEC_SET(m_vDriftOffset, 4.0f, 5.5f, 0.5f);

		m_nNumPerPuff	= 1;
		VEC_SET(m_vColor1, 150.0f, 150.0f, 150.0f);
		VEC_SET(m_vColor2, 230.0f, 230.0f, 230.0f);

		m_fLifeTime		= 1.5f;
		m_fFadeTime		= 0.25f;

		m_fSegmentTime  = 0.1f;
	}

	return LTTRUE;
}
示例#22
0
DropShip::DropShip() : Prop()
{
    m_bSmokeTrail			= DFALSE;
    m_hThruster1			= DNULL;
    m_hThruster2			= DNULL;
    m_hstrThrusterFilename	= DNULL;

    VEC_SET(m_vThrusterScale, 1.0, 1.0f, 1.0f);
}
示例#23
0
ScreenShake::ScreenShake() : BaseClass(OT_NORMAL)
{
	VEC_SET(m_vAmount, 1.0f, 1.0f, 1.0f);
	m_nNumShakes	= c_nINFINITE_SHAKES;
	m_fAreaOfEffect = c_fENTIRE_LEVEL;
	m_fFrequency	= 1.0f;
    m_hstrSound     = LTNULL;
	m_fSoundRadius	= 500.0f;
}
示例#24
0
void CDestructibleModel::DoExplosion(char* pTargetName)
{
	CWeapons weapons;
	weapons.Init(m_hObject);
	weapons.ObtainWeapon(m_nExplosionWeaponId);
	weapons.ChangeWeapon(m_nExplosionWeaponId);

	CWeapon* pWeapon = weapons.GetCurWeapon();
	if (!pWeapon) return;

	weapons.SetAmmo(pWeapon->GetAmmoId());

	pWeapon->SetDamageFactor(m_fDamageFactor);

	LTRotation rRot;
	g_pLTServer->GetObjectRotation(m_hObject, &rRot);

	LTVector vF, vPos;
	g_pLTServer->GetObjectPos(m_hObject, &vPos);
	vF = rRot.Forward();

	// Just blow up in place if we're not supposed to fire along
	// forward vector and we don't have a target...

	if (!m_bFireAlongForward)
	{
		pWeapon->SetLifetime(0.0f);
		VEC_SET(vF, 0.0f, -1.0f, 0.0f);  // Fire down
	}

	// See if we have a target...If so, point at it.

	if (pTargetName)
	{
		ObjArray <HOBJECT, MAX_OBJECT_ARRAY_SIZE> objArray;
		g_pLTServer->FindNamedObjects(pTargetName, objArray);

		if (objArray.NumObjects())
		{
			LTVector vObjPos;
			g_pLTServer->GetObjectPos(objArray.GetObject(0), &vObjPos);
			vF = vObjPos - vPos;
			vF.Normalize();

			rRot = LTRotation(vF, LTVector(0.0f, 1.0f, 0.0f));
			g_pLTServer->SetObjectRotation(m_hObject, &rRot);
		}
	}

	WeaponFireInfo weaponFireInfo;
	weaponFireInfo.hFiredFrom	= m_hObject;
	weaponFireInfo.vPath		= vF;
	weaponFireInfo.vFirePos	= vPos;
	weaponFireInfo.vFlashPos	= vPos;

	pWeapon->Fire(weaponFireInfo);
}
示例#25
0
VolumeBrush::VolumeBrush() : B2BaseClass(OT_CONTAINER)
{
    m_hPlayerClass		= DNULL;
    m_dwSaveFlags		= 0;
    m_eContainerCode	= CC_NOTHING;
    m_fDamage			= 0.0f;
    m_nDamageType		= DAMAGE_TYPE_NORMAL;
    m_bShowSurface		= DTRUE;
    m_fSurfaceHeight	= 2.0f;
    m_fSurfaceAlpha		= 0.7f;
    m_fViscosity		= 0.0f;
    m_hSurfaceObj		= DNULL;
    m_bHidden			= DFALSE;
    m_fGravity			= LIQUID_GRAVITY;
    m_fLastDamageTime	= 0.0f;

    VEC_INIT(m_vLastPos);
    VEC_INIT(m_vCurrent);

    m_bFogEnable	= DFALSE;
    m_fFogFarZ		= 300.0f;
    m_fFogNearZ		= -100.0f;
    VEC_INIT(m_vFogColor);

    // Surface related stuff...

    m_fXScaleMin = 15.0f;
    m_fXScaleMax = 25.0f;
    m_fYScaleMin = 15.0f;
    m_fYScaleMax = 25.0f;
    m_fXScaleDuration = 10.0f;
    m_fYScaleDuration = 10.0f;
    m_hstrSurfaceSprite = DNULL;

    m_dwNumSurfacePolies = 160;

    VEC_SET(m_vSurfaceColor1, 255.0f, 255.0f, 255.0f);
    VEC_SET(m_vSurfaceColor2, 255.0f, 255.0f, 255.0f);

    m_dwFlags = FLAG_TOUCH_NOTIFY | FLAG_FULLPOSITIONRES | FLAG_GOTHRUWORLD | FLAG_FORCECLIENTUPDATE;
    m_bLocked = DFALSE;
    m_bUnlockKeyRemove = DFALSE;
    m_hstrKeyName = DNULL;
}
示例#26
0
DBOOL CLaserBeamFX::Update()
{
	if(!m_pClientDE)	return DFALSE;

	DFLOAT	fTime = m_pClientDE->GetTime() - m_fStartTime;

	// All lasers are now burst beams... no constant beams anymore
	if(m_bFirstUpdate)
	{
		m_fStartTime = m_pClientDE->GetTime();
		fTime = 0.0f;
		m_bFirstUpdate = 0;
		UpdateBeam();
	}

	// Scale the beam to the proper width (the length will not change in this type
	if(fTime <= m_fScaleTime)
	{
		DFLOAT	scale = m_fMinScale + ((m_fMaxScale - m_fMinScale) * (fTime / m_fScaleTime));
		VEC_SET(m_vScale, scale, scale, m_vScale.z);
	}
	else
		{ VEC_SET(m_vScale, m_fMaxScale, m_fMaxScale, m_vScale.z); }

	m_pClientDE->SetObjectScale(m_hObject, &m_vScale);

	// Set the alpha for the object
	DFLOAT	r, g, b, curAlpha;
	m_pClientDE->GetObjectColor(m_hObject, &r, &g, &b, &curAlpha);

	if(fTime >= m_fDuration - m_fFadeTime)
	{
		DFLOAT	timeRatio = (fTime - (m_fDuration - m_fFadeTime)) / m_fFadeTime;
		curAlpha = m_fAlpha - (m_fAlpha * timeRatio);
	}
	else
	{
		curAlpha = m_fAlpha;
	}

	m_pClientDE->SetObjectColor(m_hObject, r, g, b, curAlpha);

	return (fTime < m_fDuration);
}
示例#27
0
DBOOL CShellCasingFX::Init(SFXCREATESTRUCT* psfxCreateStruct)
{
	if (!psfxCreateStruct) return DFALSE;

	CSpecialFX::Init(psfxCreateStruct);

	SHELLCREATESTRUCT* pShell = (SHELLCREATESTRUCT*)psfxCreateStruct;

	ROT_COPY(m_rRot, pShell->rRot);
	VEC_COPY(m_vStartPos, pShell->vStartPos);
	m_nAmmoType		= pShell->nAmmoType;
	m_bLeftHanded	= pShell->bLeftHanded;

	if(m_nAmmoType == AMMO_SHELL)
		{ VEC_SET(m_vScale, 2.25f, 2.25f, 2.25f); }
	else
		{ VEC_SET(m_vScale, 1.5f, 1.5f, 1.5f); }

	return DTRUE;
}
示例#28
0
DBOOL CBaseParticleSystemFX::CreateObject(CClientDE *pClientDE)
{
	if (!CSpecialFX::CreateObject(pClientDE)) return DFALSE;

	DVector vPos;
	DRotation rRot;
	ROT_INIT(rRot);

	// Use server object position if a position wasn't specified...

	if (m_vPos.x == 0.0f && m_vPos.y == 0.0f && m_vPos.z == 0.0f)
	{
		if (m_hServerObject)
		{
			pClientDE->GetObjectPos(m_hServerObject, &vPos);
		}
	}
	else
	{
		VEC_COPY(vPos, m_vPos);
	}

	// Use the specified rotation if applicable

	if (m_rRot.m_Vec.x != 0.0f || m_rRot.m_Vec.y != 0.0f || 
		m_rRot.m_Vec.z != 0.0f || m_rRot.m_Spin != 1.0f)
	{
		ROT_COPY(rRot, m_rRot);
	}

	// Setup the ParticleSystem...

	ObjectCreateStruct createStruct;
	INIT_OBJECTCREATESTRUCT(createStruct);

	createStruct.m_ObjectType = OT_PARTICLESYSTEM;
	createStruct.m_Flags = FLAG_VISIBLE | FLAG_UPDATEUNSEEN;
	VEC_COPY(createStruct.m_Pos, vPos);
	ROT_COPY(createStruct.m_Rotation, rRot);

	m_hObject = m_pClientDE->CreateObject(&createStruct);
	m_pClientDE->SetupParticleSystem(m_hObject, m_pTextureName, 
									 m_fGravity, m_dwFlags, m_fRadius / 640.0f);

	VEC_SET(m_vColorRange, m_vColor2.x - m_vColor1.x, 
						   m_vColor2.y - m_vColor1.y,
						   m_vColor2.z - m_vColor1.z);

	if (m_vColorRange.x < 0.0f) m_vColorRange.x = 0.0f;
	if (m_vColorRange.y < 0.0f) m_vColorRange.y = 0.0f;
	if (m_vColorRange.z < 0.0f) m_vColorRange.z = 0.0f;

	return DTRUE;
}
示例#29
0
DBOOL CHandWeaponModel::Update()
{
	CServerDE* pServerDE = GetServerDE();
	if (!pServerDE) return 0;

	if (m_bFirstUpdate)
	{
		m_bFirstUpdate = DFALSE;

		DDWORD dwFlags = pServerDE->GetObjectFlags(m_hObject);

		if (m_bVisible)
			pServerDE->SetObjectFlags(m_hObject, dwFlags | FLAG_VISIBLE);
		else
			pServerDE->SetObjectFlags(m_hObject, dwFlags & ~FLAG_VISIBLE);

		if( !m_bDropped )
		{
			pServerDE->SetNextUpdate(m_hObject, 0.0f);
			return DTRUE;
		}
	}

	// See if standing on anything
	CollisionInfo collisionInfo;

	pServerDE->GetStandingOn(m_hObject, &collisionInfo);
	DBOOL bIsStandingOn = (collisionInfo.m_hObject != DNULL);

	if (bIsStandingOn)
	{
		// Spawn a powerup
		DVector vF, vPos, vU;
		DRotation rRot;

		// We want the rotation aligned.
		pServerDE->GetObjectRotation(m_hObject, &rRot);
		pServerDE->GetRotationVectors(&rRot, &vU, &vPos, &vF);
		vF.y = 0.0f;
		VEC_SET(vU, 0,1,0);
		pServerDE->AlignRotation(&rRot, &vF, &vU);

		pServerDE->GetObjectPos(m_hObject, &vPos);
		vPos.y += 10;

		SpawnWeaponPickup(m_dwType, m_hObject, &vPos, &rRot, !m_bOwnedByPlayer);

		return DFALSE;
	}

	pServerDE->SetNextUpdate( m_hObject, 0.01f);

	return DTRUE;
}
示例#30
0
DBOOL CSmokeTrailFX::Init(SFXCREATESTRUCT* psfxCreateStruct)
{
	if (!CSpecialFX::Init(psfxCreateStruct)) return DFALSE;

	STCREATESTRUCT* pST = (STCREATESTRUCT*)psfxCreateStruct;
	VEC_COPY(m_vVel, pST->vVel);
	m_bSmall = pST->bSmall;
	
	m_nNumPerPuff	= 10;

	VEC_SET(m_vColor1, 175.0f, 175.0f, 175.0f);
	VEC_SET(m_vColor2, 255.0f, 255.0f, 255.0f);

	m_fLifeTime		= 0.75f;
	m_fFadeTime		= 0.2f;
	m_fOffsetTime	= 0.025f;

	m_fSegmentTime  = 0.1f;

	return DTRUE;
}