📄 explosionfx.cpp
字号:
erCS.szParticle = pClientDE->CreateString("SpriteTextures\\Firepart64.dtx");
psfxMgr->CreateSFX(SFX_EXPLOSIONRING_ID, &erCS, DFALSE, this);
g_pClientDE->FreeString( erCS.szParticle );
erCS.szParticle = DNULL;
// Light
VEC_MULSCALAR(temp, m_vNormal, 10.0f);
VEC_ADD(elCS.vPos, m_vPos, temp);
VEC_SET(elCS.vColor1, 1.0f, 0.5f, 0.0f);
VEC_SET(elCS.vColor2, 1.0f, 1.0f, 1.0f);
elCS.fDuration = 1.25f;
elCS.fDelay = 0.0f;
elCS.fRadius1 = 150.0f;
elCS.fRadius2 = 0.0f;
psfxMgr->CreateSFX(SFX_EXPLOSIONLIGHT_ID, &elCS, DFALSE, this);
// Light scorch
VEC_MULSCALAR(temp, m_vNormal, 10.0f);
VEC_ADD(elCS.vPos, m_vPos, temp);
VEC_SET(elCS.vColor1, 0.2f, 0.2f, 0.2f);
VEC_SET(elCS.vColor2, 0.5f, 0.5f, 0.5f);
elCS.fDuration = 25.0f;
elCS.fDelay = 0.0f;
elCS.fRadius1 = 50.0f;
elCS.fRadius1 = 50.0f;
psfxMgr->CreateSFX(SFX_EXPLOSIONLIGHT_ID, &elCS, DFALSE, this);
// Smoke
VEC_COPY(esCS.vNormal, m_vNormal);
VEC_MULSCALAR(temp, m_vNormal, 25.0f);
VEC_ADD(esCS.vPos, m_vPos, temp);
VEC_SET(esCS.vScale1, 0.25f, 0.25f, 0.0f);
VEC_SET(esCS.vScale2, 1.5f, 1.5f, 0.0f);
esCS.fDuration = 5.0f;
esCS.fAlpha = 0.85f;
esCS.bWaveForm = 1;
esCS.bFadeType = 1;
esCS.bAlign = 0;
esCS.szSprite = pClientDE->CreateString("Sprites\\smokepuff2.spr");
psfxMgr->CreateSFX(SFX_EXPLOSIONSPRITE_ID, &esCS, DFALSE, this);
g_pClientDE->FreeString( esCS.szSprite );
esCS.szSprite = DNULL;
}
break;
case EXP_DEFAULT_MEDIUM:
{
EXPLOSIONMODELCS emCS;
EXPLOSIONSPRITECS esCS;
EXPLOSIONRINGCS erCS, erCS2;
EXPLOSIONLIGHTCS elCS;
DVector temp;
// Model
VEC_COPY(emCS.vNormal, m_vNormal);
VEC_COPY(emCS.vPos, m_vPos);
VEC_MULSCALAR(temp, m_vNormal, 10.0f);
VEC_ADD(emCS.vPos, m_vPos, temp);
VEC_SET(emCS.vScale1, 50.0f, 50.0f, 50.0f);
VEC_SET(emCS.vScale2, 400.0f, 400.0f, 400.0f);
emCS.fDuration = 0.5f;
emCS.fAlpha = 0.75f;
emCS.bWaveForm = GetRandom(0,2);
emCS.bFadeType = 1;
emCS.bRandomRot = 1;
emCS.szModel = 0;
emCS.szSkin = 0;
psfxMgr->CreateSFX(SFX_EXPLOSION_ID, &emCS, DFALSE, this);
// Sprite
VEC_COPY(esCS.vNormal, m_vNormal);
VEC_MULSCALAR(temp, m_vNormal, 25.0f);
VEC_ADD(esCS.vPos, m_vPos, temp);
VEC_SET(esCS.vScale1, 0.5f, 0.5f, 0.0f);
VEC_SET(esCS.vScale2, 0.5f, 0.5f, 0.0f);
esCS.fDuration = 1.5f;
esCS.fAlpha = 1.0f;
esCS.bWaveForm = 0;
esCS.bFadeType = 1;
esCS.bAlign = 0;
esCS.szSprite = pClientDE->CreateString("Sprites\\fireball2.spr");
psfxMgr->CreateSFX(SFX_EXPLOSIONSPRITE_ID, &esCS, DFALSE, this);
g_pClientDE->FreeString( esCS.szSprite );
esCS.szSprite = DNULL;
// Ring
VEC_COPY(erCS.vNormal, m_vNormal);
VEC_MULSCALAR(temp, m_vNormal, 25.0f);
VEC_ADD(erCS.vPos, m_vPos, temp);
VEC_SET(erCS.vColor, 1.0f, 1.0f, 1.0f);
erCS.fRadius = 8000.0f;
erCS.fPosRadius = 10.0f;
erCS.fVelocity = 400.0f;
erCS.fGravity = 0.0f;
erCS.nParticles = 32;
erCS.fDuration = 0.5f;
erCS.fAlpha = 1.0f;
erCS.fDelay = 0.0f;
erCS.bFadeType = 1;
erCS.bAlign = 0;
erCS.szParticle = pClientDE->CreateString("SpriteTextures\\Firepart64.dtx");
psfxMgr->CreateSFX(SFX_EXPLOSIONRING_ID, &erCS, DFALSE, this);
g_pClientDE->FreeString( erCS.szParticle );
erCS.szParticle = DNULL;
// Light
VEC_MULSCALAR(temp, m_vNormal, 10.0f);
VEC_ADD(elCS.vPos, m_vPos, temp);
VEC_SET(elCS.vColor1, 1.0f, 0.5f, 0.0f);
VEC_SET(elCS.vColor2, 1.0f, 1.0f, 1.0f);
elCS.fDuration = 1.25f;
elCS.fDelay = 0.0f;
elCS.fRadius1 = 200.0f;
elCS.fRadius2 = 0.0f;
psfxMgr->CreateSFX(SFX_EXPLOSIONLIGHT_ID, &elCS, DFALSE, this);
// Light scorch
VEC_MULSCALAR(temp, m_vNormal, 10.0f);
VEC_ADD(elCS.vPos, m_vPos, temp);
VEC_SET(elCS.vColor1, 0.2f, 0.2f, 0.2f);
VEC_SET(elCS.vColor2, 0.5f, 0.5f, 0.5f);
elCS.fDuration = 25.0f;
elCS.fDelay = 0.0f;
elCS.fRadius1 = 75.0f;
elCS.fRadius1 = 75.0f;
psfxMgr->CreateSFX(SFX_EXPLOSIONLIGHT_ID, &elCS, DFALSE, this);
// Smoke
VEC_COPY(esCS.vNormal, m_vNormal);
VEC_MULSCALAR(temp, m_vNormal, 25.0f);
VEC_ADD(esCS.vPos, m_vPos, temp);
VEC_SET(esCS.vScale1, 0.5f, 0.5f, 0.0f);
VEC_SET(esCS.vScale2, 2.0f, 2.0f, 0.0f);
esCS.fDuration = 5.0f;
esCS.fAlpha = 0.85f;
esCS.bWaveForm = 1;
esCS.bFadeType = 1;
esCS.bAlign = 0;
esCS.szSprite = pClientDE->CreateString("Sprites\\smokepuff2.spr");
psfxMgr->CreateSFX(SFX_EXPLOSIONSPRITE_ID, &esCS, DFALSE, this);
g_pClientDE->FreeString( esCS.szSprite );
esCS.szSprite = DNULL;
}
break;
case EXP_DEFAULT_LARGE:
{
EXPLOSIONMODELCS emCS;
EXPLOSIONSPRITECS esCS;
EXPLOSIONRINGCS erCS, erCS2;
EXPLOSIONLIGHTCS elCS;
DVector temp;
// Model
VEC_COPY(emCS.vNormal, m_vNormal);
VEC_COPY(emCS.vPos, m_vPos);
VEC_MULSCALAR(temp, m_vNormal, 10.0f);
VEC_ADD(emCS.vPos, m_vPos, temp);
VEC_SET(emCS.vScale1, 100.0f, 100.0f, 100.0f);
VEC_SET(emCS.vScale2, 600.0f, 600.0f, 600.0f);
emCS.fDuration = 0.5f;
emCS.fAlpha = 0.75f;
emCS.bWaveForm = GetRandom(0,2);
emCS.bFadeType = 1;
emCS.bRandomRot = 1;
emCS.szModel = 0;
emCS.szSkin = 0;
psfxMgr->CreateSFX(SFX_EXPLOSION_ID, &emCS, DFALSE, this);
// Sprite
VEC_COPY(esCS.vNormal, m_vNormal);
VEC_MULSCALAR(temp, m_vNormal, 25.0f);
VEC_ADD(esCS.vPos, m_vPos, temp);
VEC_SET(esCS.vScale1, 0.75f, 0.75f, 0.0f);
VEC_SET(esCS.vScale2, 0.75f, 0.75f, 0.0f);
esCS.fDuration = 1.5f;
esCS.fAlpha = 1.0f;
esCS.bWaveForm = 0;
esCS.bFadeType = 1;
esCS.bAlign = 0;
esCS.szSprite = pClientDE->CreateString("Sprites\\fireball2.spr");
psfxMgr->CreateSFX(SFX_EXPLOSIONSPRITE_ID, &esCS, DFALSE, this);
g_pClientDE->FreeString( esCS.szSprite );
esCS.szSprite = DNULL;
// Ring
VEC_COPY(erCS.vNormal, m_vNormal);
VEC_MULSCALAR(temp, m_vNormal, 25.0f);
VEC_ADD(erCS.vPos, m_vPos, temp);
VEC_SET(erCS.vColor, 1.0f, 1.0f, 1.0f);
erCS.fRadius = 12000.0f;
erCS.fPosRadius = 10.0f;
erCS.fVelocity = 400.0f;
erCS.fGravity = 0.0f;
erCS.nParticles = 32;
erCS.fDuration = 0.5f;
erCS.fAlpha = 1.0f;
erCS.fDelay = 0.0f;
erCS.bFadeType = 1;
erCS.bAlign = 0;
erCS.szParticle = pClientDE->CreateString("SpriteTextures\\Firepart64.dtx");
psfxMgr->CreateSFX(SFX_EXPLOSIONRING_ID, &erCS, DFALSE, this);
g_pClientDE->FreeString( erCS.szParticle );
erCS.szParticle = DNULL;
// Light
VEC_MULSCALAR(temp, m_vNormal, 10.0f);
VEC_ADD(elCS.vPos, m_vPos, temp);
VEC_SET(elCS.vColor1, 1.0f, 0.5f, 0.0f);
VEC_SET(elCS.vColor2, 1.0f, 1.0f, 1.0f);
elCS.fDuration = 1.25f;
elCS.fDelay = 0.0f;
elCS.fRadius1 = 250.0f;
elCS.fRadius2 = 0.0f;
psfxMgr->CreateSFX(SFX_EXPLOSIONLIGHT_ID, &elCS, DFALSE, this);
// Light scorch
VEC_MULSCALAR(temp, m_vNormal, 10.0f);
VEC_ADD(elCS.vPos, m_vPos, temp);
VEC_SET(elCS.vColor1, 0.2f, 0.2f, 0.2f);
VEC_SET(elCS.vColor2, 0.5f, 0.5f, 0.5f);
elCS.fDuration = 25.0f;
elCS.fDelay = 0.0f;
elCS.fRadius1 = 100.0f;
elCS.fRadius1 = 100.0f;
psfxMgr->CreateSFX(SFX_EXPLOSIONLIGHT_ID, &elCS, DFALSE, this);
// Smoke
VEC_COPY(esCS.vNormal, m_vNormal);
VEC_MULSCALAR(temp, m_vNormal, 25.0f);
VEC_ADD(esCS.vPos, m_vPos, temp);
VEC_SET(esCS.vScale1, 0.5f, 0.5f, 0.0f);
VEC_SET(esCS.vScale2, 2.5f, 2.5f, 0.0f);
esCS.fDuration = 5.0f;
esCS.fAlpha = 0.85f;
esCS.bWaveForm = 1;
esCS.bFadeType = 1;
esCS.bAlign = 0;
esCS.szSprite = pClientDE->CreateString("Sprites\\smokepuff2.spr");
psfxMgr->CreateSFX(SFX_EXPLOSIONSPRITE_ID, &esCS, DFALSE, this);
g_pClientDE->FreeString( esCS.szSprite );
esCS.szSprite = DNULL;
}
break;
case EXP_GRENADE:
{
EXPLOSIONMODELCS emCS;
EXPLOSIONSPRITECS esCS;
EXPLOSIONRINGCS erCS, erCS2, erCS3, erCS4, erCS5;
EXPLOSIONFRAGCS efCS;
EXPLOSIONLIGHTCS elCS;
DVector temp;
// Model
VEC_COPY(emCS.vNormal, m_vNormal);
VEC_COPY(emCS.vPos, m_vPos);
VEC_MULSCALAR(temp, m_vNormal, 10.0f);
VEC_ADD(emCS.vPos, m_vPos, temp);
VEC_SET(emCS.vScale1, 50.0f, 50.0f, 50.0f);
VEC_SET(emCS.vScale2, 400.0f, 400.0f, 400.0f);
emCS.fDuration = 0.5f;
emCS.fAlpha = 0.75f;
emCS.bWaveForm = GetRandom(0,2);
emCS.bFadeType = 1;
emCS.bRandomRot = 1;
emCS.szModel = 0;
emCS.szSkin = 0;
psfxMgr->CreateSFX(SFX_EXPLOSION_ID, &emCS, DFALSE, this);
// Sprite
VEC_COPY(esCS.vNormal, m_vNormal);
VEC_MULSCALAR(temp, m_vNormal, 25.0f);
VEC_ADD(esCS.vPos, m_vPos, temp);
VEC_SET(esCS.vScale1, 0.5f, 0.5f, 0.0f);
VEC_SET(esCS.vScale2, 0.5f, 0.5f, 0.0f);
esCS.fDuration = 1.5f;
esCS.fAlpha = 1.0f;
esCS.bWaveForm = 0;
esCS.bFadeType = 1;
esCS.bAlign = 0;
esCS.szSprite = pClientDE->CreateString("Sprites\\fireball2.spr");
psfxMgr->CreateSFX(SFX_EXPLOSIONSPRITE_ID, &esCS, DFALSE, this);
g_pClientDE->FreeString( esCS.szSprite );
esCS.szSprite = DNULL;
// Fire Ring
VEC_COPY(erCS.vNormal, m_vNormal);
VEC_MULSCALAR(temp, m_vNormal, 25.0f);
VEC_ADD(erCS.vPos, m_vPos, temp);
VEC_SET(erCS.vColor, 1.0f, 1.0f, 1.0f);
erCS.fRadius = 8000.0f;
erCS.fPosRadius = 10.0f;
erCS.fVelocity = 400.0f;
erCS.fGravity = 0.0f;
erCS.nParticles = 32;
erCS.fDuration = 0.5f;
erCS.fAlpha = 1.0f;
erCS.fDelay = 0.0f;
erCS.bFadeType = 1;
erCS.bAlign = 0;
erCS.szParticle = pClientDE->CreateString("SpriteTextures\\Firepart64.dtx");
psfxMgr->CreateSFX(SFX_EXPLOSIONRING_ID, &erCS, DFALSE, this);
g_pClientDE->FreeString( erCS.szParticle );
erCS.szParticle = DNULL;
// Smoke Ring 1
VEC_COPY(erCS2.vNormal, m_vNormal);
VEC_MULSCALAR(temp, m_vNormal, 10.0f);
VEC_ADD(erCS2.vPos, m_vPos, temp);
VEC_SET(erCS2.vColor, 1.0f, 1.0f, 1.0f);
erCS2.fRadius = 5000.0f;
erCS2.fPosRadius = 10.0f;
erCS2.fVelocity = GetRandom(100.0f,150.0f);
erCS2.fGravity = GetRandom(0.0f,30.0f);
erCS2.nParticles = 32;
erCS2.fDuration = 1.5f;
erCS2.fAlpha = 0.5f;
erCS2.fDelay = GetRandom(0.0f,0.5f);
erCS2.bFadeType = 1;
erCS2.bAlign = 0;
erCS2.szParticle = pClientDE->CreateString("SpriteTextures\\Smoke32_4.dtx");
psfxMgr->CreateSFX(SFX_EXPLOSIONRING_ID, &erCS2, DFALSE, this);
g_pClientDE->FreeString( erCS2.szParticle );
erCS2.szParticle = DNULL;
// Smoke Ring 2
VEC_COPY(erCS3.vNormal, m_vNormal);
VEC_MULSCALAR(temp, m_vNormal, 25.0f);
VEC_ADD(erCS3.vPos, m_vPos, temp);
VEC_SET(erCS3.vColor, 1.0f, 1.0f, 1.0f);
erCS3.fRadius = 5000.0f;
erCS3.fPosRadius = 10.0f;
erCS3.fVelocity = GetRandom(100.0f,150.0f);
erCS3.fGravity = GetRandom(20.0f,50.0f);
erCS3.nParticles = 32;
erCS3.fDuration = 1.5f;
erCS3.fAlpha = 0.5f;
erCS3.fDelay = GetRandom(0.0f,0.5f);
erCS3.bFadeType = 1;
erCS3.bAlign = 0;
erCS3.szParticle = pClientDE->CreateString("SpriteTextures\\Smoke32_5.dtx");
psfxMgr->CreateSFX(SFX_EXPLOSIONRING_ID, &erCS3, DFALSE, this);
g_pClientDE->FreeString( erCS3.szParticle );
erCS3.szParticle = DNULL;
// Smoke Ring 3
VEC_COPY(erCS4.vNormal, m_vNormal);
VEC_MULSCALAR(temp, m_vNormal, 40.0f);
VEC_ADD(erCS4.vPos, m_vPos, temp);
VEC_SET(erCS4.vColor, 1.0f, 1.0f, 1.0f);
erCS4.fRadius = 5000.0f;
erCS4.fPosRadius = 10.0f;
erCS4.fVelocity = GetRandom(100.0f,150.0f);
erCS4.fGravity = GetRandom(40.0f,70.0f);
erCS4.nParticles = 32;
erCS4.fDuration = 1.5f;
erCS4.fAlpha = 0.5f;
erCS4.fDelay = GetRandom(0.0f,0.5f);
erCS4.bFadeType = 1;
erCS4.bAlign = 0;
erCS4.szParticle = pClientDE->CreateString("SpriteTextures\\Smoke32_6.dtx");
psfxMgr->CreateSFX(SFX_EXPLOSIONRING_ID, &erCS4, DFALSE, this);
g_pClientDE->FreeString( erCS4.szParticle );
erCS4.szParticle = DNULL;
// Fragments
VEC_COPY(efCS.vPos, m_vPos);
VEC_COPY(efCS.vNormal, m_vNormal);
VEC_SET(efCS.vScale, 1.0f, 1.0f, 1.0f);
VEC_SET(efCS.vRotateMax, 1.0f, 1.0f, 1.0f);
efCS.fBounceMod = 0.25f;
efCS.fDuration = 10.0f;
efCS.fGravity = 1.0f;
efCS.fFadeTime = 2.0f;
efCS.fInitAlpha = 1.0f;
efCS.bRandDir = 0;
efCS.bSpawnExp = 0;
efCS.nSpawnType = 0;
efCS.nTrailType = OBJFX_SMOKETRAIL_1;
efCS.szModel = pClientDE->CreateString("Models\\Gibs\\gibmetal2.abc");
efCS.szSkin = pClientDE->CreateString("Skins\\Gibs\\gibmetal3.dtx");
for(int i = 0; i < GetRandom(2,5); i++)
{
efCS.fSpread = GetRandom(40.0f, 60.0f);
efCS.fVelocity = GetRandom(20.0f,40.0f);
psfxMgr->CreateSFX(SFX_EXPLOSIONFRAG_ID, &efCS, DFALSE, this);
}
g_pClientDE->FreeString( efCS.szModel );
efCS.szModel = DNULL;
g_pClientDE->FreeString( efCS.szSkin );
efCS.szSkin = DNULL;
// Light
VEC_MULSCALAR(temp, m_vNormal, 10.0f);
VEC_ADD(elCS.vPos, m_vPos, temp);
VEC_SET(elCS.vColor1, 1.0f, 0.5f, 0.0f);
VEC_SET(elCS.vColor2, 1.0f, 1.0f, 1.0f);
elCS.fDuration = 1.25f;
elCS.fDelay = 0.0f;
elCS.fRadius1 = 250.0f;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -