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

📄 explosionfx.cpp

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