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(); }
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); }
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); }
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); }
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); }
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; }
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); } }
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; }
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; }
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; }
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; }
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); }
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; }
/** 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; }
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; }
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; }
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; }
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); }
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; }
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); }
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; }
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); }
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; }
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; }
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; }
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; }