mirror of
https://github.com/PhantomGamesDevelopment/TWM2.git
synced 2026-01-20 03:54:48 +00:00
1100 lines
27 KiB
C#
1100 lines
27 KiB
C#
//--------------------------------------
|
|
// Arrow IV Nuclear Launcher
|
|
//--------------------------------------
|
|
|
|
//-----------------------------------------
|
|
//-----------------------------------------
|
|
//Copyright (C) Dave "Uranium - 235" Schutz
|
|
//-----------------------------------------
|
|
//-----------------------------------------
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Sounds
|
|
//--------------------------------------
|
|
|
|
datablock AudioProfile(NuclearSwitchSound)
|
|
{
|
|
filename = "fx/weapons/missile_launcher_activate.wav";
|
|
description = AudioClosest3d;
|
|
preload = true;
|
|
};
|
|
|
|
|
|
datablock AudioProfile(NuclearProjectileSound)
|
|
{
|
|
filename = "fx/weapons/missile_projectile.wav";
|
|
description = ProjectileLooping3d;
|
|
preload = true;
|
|
};
|
|
|
|
datablock AudioProfile(NuclearReloadSound)
|
|
{
|
|
filename = "fx/weapons/weapon.missilereload.wav";
|
|
description = AudioClosest3d;
|
|
preload = true;
|
|
};
|
|
|
|
datablock AudioProfile(NuclearLockSound)
|
|
{
|
|
filename = "fx/weapons/missile_launcher_searching.WAV";
|
|
description = AudioClosest3d;
|
|
preload = true;
|
|
};
|
|
|
|
datablock AudioProfile(NuclearDryFireSound)
|
|
{
|
|
filename = "fx/weapons/missile_launcher_dryfire.wav";
|
|
description = AudioClose3d;
|
|
preload = true;
|
|
};
|
|
|
|
datablock AudioProfile(NukeDeathSound)
|
|
{
|
|
filename = "voice/derm1/gbl.brag.wav";
|
|
description = AudioClose3d;
|
|
preload = true;
|
|
};
|
|
|
|
datablock AudioProfile(NuclearFireSound)
|
|
{
|
|
filename = "fx/weapons/grenade_flash_explode.wav";
|
|
description = AudioDefault3d;
|
|
preload = true;
|
|
};
|
|
|
|
datablock AudioProfile(NuclearExplosionSound)
|
|
{
|
|
filename = "fx/vehicles/bomber_bomb_impact.wav";
|
|
description = AudioBIGExplosion3d;
|
|
preload = true;
|
|
};
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Explosion smoke particles
|
|
//----------------------------------------------------------------------------
|
|
|
|
datablock ParticleData(NuclearSmokeParticle)
|
|
{
|
|
dragCoeffiecient = 0.0;
|
|
gravityCoefficient = -0.02;
|
|
inheritedVelFactor = 0.1;
|
|
|
|
lifetimeMS = 8200;
|
|
lifetimeVarianceMS = 100;
|
|
|
|
textureName = "special/cloudFlash";
|
|
|
|
useInvAlpha = false;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 90.0;
|
|
|
|
colors[0] = "1.0 0.75 0.0 0.0";
|
|
colors[1] = "0.7 0.7 0.7 1.0";
|
|
colors[2] = "0.5 0.5 0.5 0.0";
|
|
sizes[0] = 4;
|
|
sizes[1] = 6;
|
|
sizes[2] = 8;
|
|
times[0] = 0.0;
|
|
times[1] = 0.1;
|
|
times[2] = 1.0;
|
|
|
|
};
|
|
|
|
datablock ParticleEmitterData(NuclearSmokeEmitter)
|
|
{
|
|
ejectionPeriodMS = 10;
|
|
periodVarianceMS = 0;
|
|
|
|
ejectionVelocity = 1.5;
|
|
velocityVariance = 0.3;
|
|
|
|
thetaMin = 0.0;
|
|
thetaMax = 25.0;
|
|
|
|
particles = "NuclearSmokeParticle";
|
|
};
|
|
|
|
datablock ParticleData(NuclearFireParticle)
|
|
{
|
|
dragCoeffiecient = 0.0;
|
|
gravityCoefficient = 0.0;
|
|
inheritedVelFactor = 1.0;
|
|
|
|
lifetimeMS = 1000;
|
|
lifetimeVarianceMS = 000;
|
|
|
|
textureName = "special/cloudFlash";
|
|
|
|
spinRandomMin = -135;
|
|
spinRandomMax = 135;
|
|
|
|
colors[0] = "1.0 0.75 0.2 1.0";
|
|
colors[1] = "1.0 0.5 0.0 1.0";
|
|
colors[2] = "1.0 0.40 0.0 0.0";
|
|
sizes[0] = 2;
|
|
sizes[1] = 4;
|
|
sizes[2] = 5.5;
|
|
times[0] = 0.0;
|
|
times[1] = 0.3;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(NuclearFireEmitter)
|
|
{
|
|
ejectionPeriodMS = 15;
|
|
periodVarianceMS = 0;
|
|
|
|
ejectionVelocity = 15.0;
|
|
velocityVariance = 0.0;
|
|
|
|
thetaMin = 0.0;
|
|
thetaMax = 0.0;
|
|
|
|
particles = "NuclearFireParticle";
|
|
};
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Shockwaves
|
|
//---------------------------------------------------------------------------
|
|
|
|
datablock ShockwaveData(NuclearShockwave)
|
|
{
|
|
width = 5;
|
|
numSegments = 20;
|
|
numVertSegments = 4;
|
|
velocity = 100;
|
|
acceleration = -10.0; // was 40
|
|
lifetimeMS = 8200;
|
|
height = 2.0; // was 1.0
|
|
verticalCurve = 0.5;
|
|
|
|
mapToTerrain = true;
|
|
renderBottom = true;
|
|
|
|
texture[0] = "special/shockwave4";
|
|
texture[1] = "special/gradient";
|
|
texWrap = 6.0;
|
|
|
|
times[0] = 0.0;
|
|
times[1] = 0.5;
|
|
times[2] = 1.0;
|
|
|
|
colors[0] = "1.0 0.7 0.5 1.0";
|
|
colors[1] = "1.0 0.5 0.2 1.0";
|
|
colors[2] = "1.0 0.25 0.1 0.0";
|
|
|
|
};
|
|
|
|
datablock ShockwaveData(NuclearShockwave2)
|
|
{
|
|
width = 20.0;
|
|
numSegments = 50;
|
|
numVertSegments = 4;
|
|
velocity = 350;
|
|
acceleration = 0.0; // was 40
|
|
lifetimeMS = 3000;
|
|
height = 300.0; // was 1.0
|
|
verticalCurve = 0.5;
|
|
|
|
mapToTerrain = false;
|
|
orientToNormal = false;
|
|
renderBottom = true;
|
|
|
|
texture[0] = "special/shockwave4";
|
|
texture[1] = "special/gradient";
|
|
texWrap = 6.0;
|
|
|
|
times[0] = 0.0;
|
|
times[1] = 0.5;
|
|
times[2] = 1.0;
|
|
|
|
colors[0] = "0.7 0.7 1.0 1.0";
|
|
colors[1] = "0.7 0.7 1.0 0.5";
|
|
colors[2] = "0.7 0.7 1.0 1.0";
|
|
|
|
};
|
|
|
|
datablock ShockwaveData(NuclearShockwave3)
|
|
{
|
|
width = 6.0;
|
|
numSegments = 32;
|
|
numVertSegments = 60;
|
|
velocity = 150;
|
|
acceleration = -5.0;
|
|
lifetimeMS = 8000;
|
|
height = 20.0;
|
|
verticalCurve = 0.5;
|
|
is2D = false;
|
|
|
|
texture[0] = "special/shockwave4";
|
|
texture[1] = "special/gradient";
|
|
texWrap = 6.0;
|
|
|
|
times[0] = 0.0;
|
|
times[1] = 0.5;
|
|
times[2] = 1.0;
|
|
|
|
colors[0] = "0.8 0.8 0.0 0.50";
|
|
colors[1] = "0.4 0.4 0.0 0.25";
|
|
colors[2] = "0.4 0.4 0.0 0.0";
|
|
|
|
mapToTerrain = true;
|
|
orientToNormal = false;
|
|
renderBottom = true;
|
|
};
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Particle effects
|
|
//--------------------------------------
|
|
|
|
//----------------------------------------------------
|
|
//Condensation
|
|
//----------------------------------------------------
|
|
datablock ParticleData(NuclearCapSmokeParticle)
|
|
{
|
|
dragCoefficient = 0.25;
|
|
gravityCoefficient = -0.01;
|
|
windCoefficient = 0;
|
|
inheritedVelFactor = 0.025;
|
|
constantAcceleration = 0;
|
|
lifetimeMS = 30000;
|
|
lifetimeVarianceMS = 100;
|
|
useInvAlpha = 0;
|
|
spinRandomMin = -90;
|
|
spinRandomMax = 90;
|
|
textureName = "special/cloudFlash";
|
|
colors[0] = "0.3 0.3 0.3 0.5";
|
|
colors[1] = "0.3 0.3 0.3 0.5";
|
|
colors[2] = "0.3 0.3 0.3 0.0";
|
|
|
|
|
|
sizes[0] = 50;
|
|
sizes[1] = 50;
|
|
sizes[2] = 50;
|
|
times[0] = 0.0;
|
|
times[1] = 0.5;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(NuclearCapSmokeEmitter)
|
|
{
|
|
ejectionPeriodMS = 1;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 40.0;
|
|
velocityVariance = 5;
|
|
ejectionOffset = 0;
|
|
thetaMin = 90;
|
|
thetaMax = 180;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
|
|
lifeTimeMS = 25000;
|
|
orientParticles = 0;
|
|
orientOnVelocity = 1;
|
|
particles = "NuclearCapSmokeParticle";
|
|
};
|
|
|
|
datablock ParticleData(NuclearStemSmokeParticle)
|
|
{
|
|
dragCoeffiecient = 0.0;
|
|
gravityCoefficient = 0.0;
|
|
inheritedVelFactor = 0.0;
|
|
windcoefficient = 0.0;
|
|
|
|
lifetimeMS = 30000;
|
|
lifetimeVarianceMS = 100;
|
|
|
|
textureName = "special/cloudFlash";
|
|
|
|
useInvAlpha = false;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 90.0;
|
|
|
|
colors[0] = "0.3 0.3 0.3 0.5";
|
|
colors[1] = "0.3 0.3 0.3 0.5";
|
|
colors[2] = "0.3 0.3 0.3 0.0";
|
|
sizes[0] = 50;
|
|
sizes[1] = 50;
|
|
sizes[2] = 50;
|
|
times[0] = 0.0;
|
|
times[1] = 0.5;
|
|
times[2] = 1.0;
|
|
|
|
};
|
|
|
|
datablock ParticleEmitterData(NuclearStemSmokeEmitter)
|
|
{
|
|
ejectionPeriodMS = 10;
|
|
periodVarianceMS = 0;
|
|
|
|
ejectionVelocity = 2.0;
|
|
velocityVariance = 1.0;
|
|
|
|
thetaMin = 0.0;
|
|
thetaMax = 90.0;
|
|
|
|
particles = "NuclearStemSmokeParticle";
|
|
};
|
|
|
|
datablock ParticleData(NuclearDustParticle)
|
|
{
|
|
dragCoefficient = 1.0;
|
|
gravityCoefficient = 0.00;
|
|
windcoefficient = 0.0;
|
|
inheritedVelFactor = 0.0;
|
|
constantAcceleration = 0.0;
|
|
lifetimeMS = 30000;
|
|
lifetimeVarianceMS = 100;
|
|
useInvAlpha = false;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 90.0;
|
|
textureName = "special/cloudFlash";
|
|
|
|
colors[0] = "0.3 0.3 0.3 0.5";
|
|
colors[1] = "0.3 0.3 0.3 0.5";
|
|
colors[2] = "0.3 0.3 0.3 0.0";
|
|
sizes[0] = 50;
|
|
sizes[1] = 50;
|
|
sizes[2] = 50;
|
|
times[0] = 0.0;
|
|
times[1] = 0.5;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(NuclearDustEmitter)
|
|
{
|
|
ejectionPeriodMS = 1;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 150.0;
|
|
velocityVariance = 150.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 85;
|
|
thetaMax = 85;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
lifetimeMS = 23000;
|
|
particles = "NuclearDustParticle";
|
|
};
|
|
|
|
datablock ParticleData(LargeCondensationParticle)
|
|
{
|
|
dragCoefficient = 1;
|
|
gravityCoefficient = 0;
|
|
windCoefficient = 0;
|
|
inheritedVelFactor = 0;
|
|
constantAcceleration = 0;
|
|
lifetimeMS = 12000;
|
|
lifetimeVarianceMS = 1000;
|
|
useInvAlpha = 0;
|
|
spinRandomMin = -90;
|
|
spinRandomMax = 500;
|
|
textureName = "special/cloudFlash";
|
|
times[0] = 0;
|
|
times[1] = 0.33;
|
|
times[2] = 1;
|
|
colors[0] = "0.7 0.8 1.0 1.0";
|
|
colors[1] = "0.7 0.8 1.0 0.5";
|
|
colors[2] = "0.7 0.8 1.0 0.0";
|
|
sizes[0] = 30;
|
|
sizes[1] = 30;
|
|
sizes[2] = 30;
|
|
};
|
|
|
|
datablock ParticleEmitterData(LargeCondensationEmitter)
|
|
{
|
|
ejectionPeriodMS = 1;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 2.66935;
|
|
velocityVariance = 2.59677;
|
|
ejectionOffset = 325;
|
|
thetaMin = 90;
|
|
thetaMax = 90;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = 0;
|
|
lifeTimeMS = 8750;
|
|
orientParticles= 0;
|
|
orientOnVelocity = 0;
|
|
particles = "LargeCondensationParticle";
|
|
};
|
|
|
|
datablock ParticleData(SmallCondensationParticle)
|
|
{
|
|
dragCoefficient = 1;
|
|
gravityCoefficient = -0.01;
|
|
windCoefficient = 0;
|
|
inheritedVelFactor = 0;
|
|
constantAcceleration = 0;
|
|
lifetimeMS = 12000;
|
|
lifetimeVarianceMS = 1000;
|
|
useInvAlpha = 0;
|
|
spinRandomMin = -90;
|
|
spinRandomMax = 500;
|
|
textureName = "special/cloudFlash";
|
|
times[0] = 0;
|
|
times[1] = 0.5;
|
|
times[2] = 1;
|
|
colors[0] = "0.7 0.8 1.0 1.0";
|
|
colors[1] = "0.7 0.8 1.0 0.5";
|
|
colors[2] = "0.7 0.8 1.0 0.0";
|
|
sizes[0] = 30;
|
|
sizes[1] = 30;
|
|
sizes[2] = 30;
|
|
};
|
|
|
|
datablock ParticleEmitterData(SmallCondensationEmitter)
|
|
{
|
|
ejectionPeriodMS = 1;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 2.66935;
|
|
velocityVariance = 2.59677;
|
|
ejectionOffset = 275;
|
|
thetaMin = 90;
|
|
thetaMax = 90;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = 0;
|
|
lifeTimeMS = 8750;
|
|
orientParticles= 0;
|
|
orientOnVelocity = 0;
|
|
particles = "SmallCondensationParticle";
|
|
};
|
|
|
|
datablock ParticleData(UpperRingParticle)
|
|
{
|
|
dragCoefficient = 1.0;
|
|
gravityCoefficient = 0;
|
|
windCoefficient = 0;
|
|
inheritedVelFactor = 0;
|
|
constantAcceleration = 0;
|
|
lifetimeMS = 12000;
|
|
lifetimeVarianceMS = 1000;
|
|
useInvAlpha = 0;
|
|
spinRandomMin = -90;
|
|
spinRandomMax = 500;
|
|
textureName = "special/cloudFlash";
|
|
times[0] = 0;
|
|
times[1] = 0.5;
|
|
times[2] = 1;
|
|
colors[0] = "0.7 0.8 1.0 1.0";
|
|
colors[1] = "0.7 0.8 1.0 0.5";
|
|
colors[2] = "0.7 0.8 1.0 0.0";
|
|
sizes[0] = 30;
|
|
sizes[1] = 30;
|
|
sizes[2] = 30;
|
|
};
|
|
|
|
datablock ParticleEmitterData(UpperRingEmitter)
|
|
{
|
|
ejectionPeriodMS = 1;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 50;
|
|
velocityVariance = 50;
|
|
ejectionOffset = 150;
|
|
thetaMin = 90;
|
|
thetaMax = 90;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = 0;
|
|
lifeTimeMS = 28000;
|
|
orientParticles= 0;
|
|
orientOnVelocity = 1;
|
|
particles = "UpperRingParticle";
|
|
};
|
|
|
|
datablock ParticleData(NuclearSplashParticle)
|
|
{
|
|
dragCoefficient = 0;
|
|
gravityCoefficient = 0.1;
|
|
windCoefficient = 0;
|
|
inheritedVelFactor = 0;
|
|
constantAcceleration = 0;
|
|
lifetimeMS = 10000;
|
|
lifetimeVarianceMS = 1000;
|
|
useInvAlpha = 0;
|
|
spinRandomMin = 0;
|
|
spinRandomMax = 0;
|
|
textureName = "special/droplet";
|
|
times[0] = 0;
|
|
times[1] = 0.5;
|
|
times[2] = 1;
|
|
colors[0] = "0.7 0.8 1.0 1.0";
|
|
colors[1] = "0.7 0.8 1.0 0.5";
|
|
colors[2] = "0.7 0.8 1.0 0.0";
|
|
sizes[0] = 4.74194;
|
|
sizes[1] = 4.74194;
|
|
sizes[2] = 4.74194;
|
|
};
|
|
|
|
datablock ParticleEmitterData(NuclearSplashEmitter)
|
|
{
|
|
ejectionPeriodMS = 1;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 10;
|
|
velocityVariance = 10;
|
|
ejectionOffset = 10;
|
|
thetaMin = 0;
|
|
thetaMax = 31.2097;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = 0;
|
|
lifeTimeMS = 30000;
|
|
orientParticles= 1;
|
|
orientOnVelocity = 1;
|
|
particles = "NuclearSplashParticle";
|
|
};
|
|
|
|
datablock ParticleData(DomeCondensationParticle)
|
|
{
|
|
dragCoefficient = 0.1;
|
|
gravityCoefficient = 0;
|
|
windCoefficient = 0;
|
|
inheritedVelFactor = 0;
|
|
constantAcceleration = 0;
|
|
lifetimeMS = 15000;
|
|
lifetimeVarianceMS = 0;
|
|
useInvAlpha = 0;
|
|
spinRandomMin = -90;
|
|
spinRandomMax = 500;
|
|
textureName = "special/cloudFlash";
|
|
times[0] = 0;
|
|
times[1] = 0.5;
|
|
times[2] = 1;
|
|
colors[0] = "0.7 0.8 1.0 1.0";
|
|
colors[1] = "0.7 0.8 1.0 0.5";
|
|
colors[2] = "0.7 0.8 1.0 0.0";
|
|
sizes[0] = 7;
|
|
sizes[1] = 7;
|
|
sizes[2] = 7;
|
|
};
|
|
|
|
datablock ParticleEmitterData(DomeCondensationEmitter)
|
|
{
|
|
ejectionPeriodMS = 1;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 10;
|
|
velocityVariance = 1;
|
|
ejectionOffset = 10;
|
|
thetaMin = 90;
|
|
thetaMax = 0;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = 0;
|
|
lifeTimeMS = 23000;
|
|
orientParticles= 0;
|
|
orientOnVelocity = 1;
|
|
particles = "DomeCondensationParticle";
|
|
};
|
|
|
|
// More explosions
|
|
|
|
datablock ExplosionData(RingExplosion1)
|
|
{
|
|
emitter[0] = SmallCondensationEmitter;
|
|
|
|
shakeCamera = true;
|
|
camShakeFreq = "10.0 11.0 10.0";
|
|
camShakeAmp = "20.0 20.0 20.0";
|
|
camShakeDuration = 0.5;
|
|
camShakeRadius = 10.0;
|
|
|
|
sizes[0] = "0.01 0.01 0.01";
|
|
sizes[1] = "0.01 0.01 0.01";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
};
|
|
|
|
datablock ExplosionData(RingExplosion2)
|
|
{
|
|
emitter[0] = LargeCondensationEmitter;
|
|
|
|
shakeCamera = true;
|
|
camShakeFreq = "10.0 11.0 10.0";
|
|
camShakeAmp = "20.0 20.0 20.0";
|
|
camShakeDuration = 0.5;
|
|
camShakeRadius = 10.0;
|
|
|
|
sizes[0] = "0.01 0.01 0.01";
|
|
sizes[1] = "0.01 0.01 0.01";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
};
|
|
|
|
datablock ExplosionData(UpperRingExplosion)
|
|
{
|
|
emitter[0] = UpperRingEmitter;
|
|
|
|
shakeCamera = true;
|
|
camShakeFreq = "10.0 11.0 10.0";
|
|
camShakeAmp = "20.0 20.0 20.0";
|
|
camShakeDuration = 0.5;
|
|
camShakeRadius = 10.0;
|
|
|
|
sizes[0] = "0.01 0.01 0.01";
|
|
sizes[1] = "0.01 0.01 0.01";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
};
|
|
|
|
datablock ExplosionData(DustExplosion)
|
|
{
|
|
emitter[0] = NuclearDustEmitter;
|
|
|
|
shakeCamera = true;
|
|
camShakeFreq = "10.0 11.0 10.0";
|
|
camShakeAmp = "20.0 20.0 20.0";
|
|
camShakeDuration = 0.5;
|
|
camShakeRadius = 10.0;
|
|
|
|
sizes[0] = "0.01 0.01 0.01";
|
|
sizes[1] = "0.01 0.01 0.01";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
};
|
|
|
|
datablock ExplosionData(CapExplosion)
|
|
{
|
|
emitter[0] = NuclearCapSmokeEmitter;
|
|
|
|
shakeCamera = true;
|
|
camShakeFreq = "10.0 11.0 10.0";
|
|
camShakeAmp = "20.0 20.0 20.0";
|
|
camShakeDuration = 0.5;
|
|
camShakeRadius = 10.0;
|
|
|
|
sizes[0] = "0.01 0.01 0.01";
|
|
sizes[1] = "0.01 0.01 0.01";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
};
|
|
|
|
datablock ExplosionData(NuclearSplash)
|
|
{
|
|
emitter[0] = NuclearSplashEmitter;
|
|
|
|
shakeCamera = true;
|
|
camShakeFreq = "10.0 11.0 10.0";
|
|
camShakeAmp = "20.0 20.0 20.0";
|
|
camShakeDuration = 0.5;
|
|
camShakeRadius = 10.0;
|
|
|
|
sizes[0] = "0.01 0.01 0.01";
|
|
sizes[1] = "0.01 0.01 0.01";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
};
|
|
|
|
datablock ExplosionData(DomeCondensationExplosion)
|
|
{
|
|
emitter[0] = DomeCondensationEmitter;
|
|
|
|
shakeCamera = true;
|
|
camShakeFreq = "10.0 11.0 10.0";
|
|
camShakeAmp = "20.0 20.0 20.0";
|
|
camShakeDuration = 0.5;
|
|
camShakeRadius = 10.0;
|
|
|
|
sizes[0] = "0.01 0.01 0.01";
|
|
sizes[1] = "0.01 0.01 0.01";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
};
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Explosions
|
|
//---------------------------------------------------------------------------
|
|
datablock ExplosionData(NuclearExplosion1)
|
|
{
|
|
shockwave = NuclearShockwave2;
|
|
shockwaveOnTerrain = false;
|
|
|
|
explosionShape = "effect_plasma_explosion.dts";
|
|
|
|
playSpeed = 0.05;
|
|
soundProfile = NuclearExplosionSound;
|
|
faceViewer = true;
|
|
|
|
sizes[0] = "100.0 100.0 100.0";
|
|
|
|
shakeCamera = true;
|
|
camShakeFreq = "6.0 7.0 7.0";
|
|
camShakeAmp = "100.0 100.0 100.0";
|
|
camShakeDuration = 1.0;
|
|
camShakeRadius = 7.0;
|
|
};
|
|
|
|
datablock ExplosionData(NuclearExplosion2)
|
|
{
|
|
shockwave = NuclearShockwave;
|
|
shockwaveOnTerrain = false;
|
|
|
|
explosionShape = "effect_plasma_explosion.dts";
|
|
|
|
playSpeed = 0.05;
|
|
soundProfile = NuclearExplosionSound;
|
|
faceViewer = true;
|
|
|
|
sizes[0] = "100.0 100.0 100.0";
|
|
|
|
shakeCamera = true;
|
|
camShakeFreq = "6.0 7.0 7.0";
|
|
camShakeAmp = "70.0 70.0 70.0";
|
|
camShakeDuration = 1.0;
|
|
camShakeRadius = 7.0;
|
|
};
|
|
|
|
datablock ExplosionData(NuclearExplosion3)
|
|
{
|
|
explosionShape = "effect_plasma_explosion.dts";
|
|
|
|
playSpeed = 0.05;
|
|
soundProfile = NuclearExplosionSound;
|
|
faceViewer = true;
|
|
|
|
shockwave = NuclearShockwave3;
|
|
shockwaveOnTerrain = false;
|
|
|
|
sizes[0] = "150.0 150.0 150.0";
|
|
|
|
shakeCamera = true;
|
|
camShakeFreq = "6.0 7.0 7.0";
|
|
camShakeAmp = "70.0 70.0 70.0";
|
|
camShakeDuration = 1.0;
|
|
camShakeRadius = 7.0;
|
|
};
|
|
|
|
datablock ExplosionData(NuclearExplosion4)
|
|
{
|
|
explosionShape = "effect_plasma_explosion.dts";
|
|
|
|
playSpeed = 0.05;
|
|
soundProfile = NuclearExplosionSound;
|
|
faceViewer = true;
|
|
|
|
sizes[0] = "250.0 250.0 250.0";
|
|
|
|
shakeCamera = true;
|
|
camShakeFreq = "6.0 7.0 7.0";
|
|
camShakeAmp = "70.0 70.0 70.0";
|
|
camShakeDuration = 1.0;
|
|
camShakeRadius = 7.0;
|
|
};
|
|
|
|
datablock ExplosionData(NuclearMainExplosion)
|
|
{
|
|
soundProfile = NuclearExplosionSound;
|
|
|
|
subExplosion[0] = NuclearExplosion1;
|
|
subExplosion[1] = NuclearExplosion2;
|
|
subExplosion[2] = NuclearExplosion3;
|
|
subExplosion[3] = NuclearExplosion4;
|
|
subExplosion[4] = DustExplosion;
|
|
};
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Projectile
|
|
//--------------------------------------
|
|
datablock SeekerProjectileData(ShoulderNuclear)
|
|
{
|
|
casingShapeName = "weapon_missile_casement.dts";
|
|
projectileShapeName = "weapon_missile_projectile.dts";
|
|
hasDamageRadius = true;
|
|
indirectDamage = 1000.0;
|
|
damageRadius = 250.0;
|
|
radiusDamageType = $DamageType::Missile;
|
|
kickBackStrength = 100000;
|
|
|
|
Underwaterexplosion = "NuclearSplash";
|
|
splash = BlasterSplash;
|
|
velInheritFactor = 0.5;
|
|
depthTolerance = 10.0; // depth at which it uses underwater explosion
|
|
|
|
baseEmitter = NuclearSmokeEmitter;
|
|
delayEmitter = NuclearFireEmitter;
|
|
puffEmitter = NuclearPuffEmitter;
|
|
bubbleEmitter = GrenadeBubbleEmitter;
|
|
bubbleEmitTime = 1.0;
|
|
|
|
|
|
exhaustEmitter = NuclearExhaustEmitter;
|
|
exhaustTimeMs = 2000;
|
|
exhaustNodeName = "muzzlePoint1";
|
|
|
|
lifetimeMS = 1800000; //60000
|
|
muzzleVelocity = 1.0; //1
|
|
maxVelocity = 100.0; //80 100
|
|
turningSpeed = 120.0; //110 120
|
|
acceleration = 10.0; //200 10
|
|
|
|
proximityRadius = 5;
|
|
|
|
terrainAvoidanceSpeed = 480; //180
|
|
terrainScanAhead = 25; //25
|
|
terrainHeightFail = 3; //12
|
|
terrainAvoidanceRadius = 100; //100
|
|
|
|
flareDistance = 50; //200
|
|
flareAngle = 5; //30
|
|
|
|
sound = NuclearProjectileSound;
|
|
|
|
hasLight = true;
|
|
lightRadius = 5.0;
|
|
lightColor = "0.2 0.05 0";
|
|
|
|
useFlechette = true;
|
|
flechetteDelayMs = 550;
|
|
casingDeb = FlechetteDebris;
|
|
|
|
explodeOnWaterImpact = false;
|
|
};
|
|
|
|
datablock LinearProjectileData(RingProjectile1)
|
|
{
|
|
projectileShapeName = "weapon_missile_Projectile.dts";
|
|
emitterDelay = -1;
|
|
directDamage = 0.0;
|
|
hasDamageRadius = true;
|
|
indirectDamage = 1.0;
|
|
damageRadius = 500.0;
|
|
radiusDamageType = $DamageType::EMP;
|
|
kickBackStrength = 0;
|
|
|
|
sound = discProjectileSound;
|
|
explosion = "RingExplosion1";
|
|
underwaterExplosion = "RingExplosion1";
|
|
splash = DiscSplash;
|
|
|
|
dryVelocity = 180;
|
|
wetVelocity = 180;
|
|
velInheritFactor = 0.5;
|
|
fizzleTimeMS = 1500;
|
|
lifetimeMS = 1500;
|
|
explodeOnDeath = true;
|
|
reflectOnWaterImpactAngle = 15.0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = 5000;
|
|
|
|
activateDelayMS = -1;
|
|
};
|
|
|
|
datablock LinearProjectileData(RingProjectile2)
|
|
{
|
|
projectileShapeName = "weapon_missile_Projectile.dts";
|
|
emitterDelay = -1;
|
|
directDamage = 0.0;
|
|
hasDamageRadius = true;
|
|
indirectDamage = 1000.0;
|
|
damageRadius = 250.0;
|
|
radiusDamageType = $DamageType::Nuclear;
|
|
kickBackStrength = 0;
|
|
|
|
sound = discProjectileSound;
|
|
explosion = "RingExplosion2";
|
|
underwaterExplosion = "RingExplosion2";
|
|
splash = DiscSplash;
|
|
depthTolerance = 10.0; // depth at which it uses underwater explosion
|
|
|
|
dryVelocity = 180;
|
|
wetVelocity = 180;
|
|
velInheritFactor = 0.5;
|
|
fizzleTimeMS = 1000;
|
|
lifetimeMS = 1000;
|
|
explodeOnDeath = true;
|
|
reflectOnWaterImpactAngle = 15.0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = 5000;
|
|
|
|
activateDelayMS = 200;
|
|
};
|
|
|
|
datablock LinearProjectileData(StemProjectile1)
|
|
{
|
|
projectileShapeName = "weapon_missile_Projectile.dts";
|
|
emitterDelay = 1;
|
|
directDamage = 0.0;
|
|
hasDamageRadius = true;
|
|
indirectDamage = 1000.0;
|
|
damageRadius = 250.0;
|
|
radiusDamageType = $DamageType::Nuclear;
|
|
kickBackStrength = 0;
|
|
|
|
baseEmitter = NuclearStemSmokeEmitter;
|
|
|
|
dryVelocity = 50;
|
|
wetVelocity = 50;
|
|
velInheritFactor = 0.5;
|
|
fizzleTimeMS = 5000;
|
|
lifetimeMS = 5000;
|
|
explodeOnDeath = true;
|
|
reflectOnWaterImpactAngle = 15.0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = 5000;
|
|
|
|
activateDelayMS = 200;
|
|
};
|
|
|
|
datablock LinearProjectileData(StemProjectile2)
|
|
{
|
|
projectileShapeName = "weapon_missile_Projectile.dts";
|
|
emitterDelay = 1;
|
|
directDamage = 0.0;
|
|
hasDamageRadius = true;
|
|
indirectDamage = 1000.0;
|
|
damageRadius = 250.0;
|
|
radiusDamageType = $DamageType::Nuclear;
|
|
kickBackStrength = 0;
|
|
|
|
explosion = "CapExplosion";
|
|
underwaterExplosion = "CapExplosion";
|
|
|
|
dryVelocity = 50;
|
|
wetVelocity = 50;
|
|
velInheritFactor = 0.5;
|
|
fizzleTimeMS = 4000;
|
|
lifetimeMS = 4000;
|
|
explodeOnDeath = true;
|
|
reflectOnWaterImpactAngle = 15.0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = 4000;
|
|
|
|
activateDelayMS = 200;
|
|
};
|
|
|
|
datablock LinearProjectileData(UpperRingProjectile1)
|
|
{
|
|
projectileShapeName = "weapon_missile_Projectile.dts";
|
|
emitterDelay = 1;
|
|
directDamage = 0.0;
|
|
hasDamageRadius = true;
|
|
indirectDamage = 1000.0;
|
|
damageRadius = 250.0;
|
|
radiusDamageType = $DamageType::Nuclear;
|
|
kickBackStrength = 0;
|
|
|
|
explosion = "UpperRingExplosion";
|
|
underwaterExplosion = "UpperRingExplosion";
|
|
|
|
dryVelocity = 180;
|
|
wetVelocity = 180;
|
|
velInheritFactor = 0.5;
|
|
fizzleTimeMS = 2000;
|
|
lifetimeMS = 2000;
|
|
explodeOnDeath = true;
|
|
reflectOnWaterImpactAngle = 15.0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = 2000;
|
|
|
|
activateDelayMS = -1;
|
|
};
|
|
|
|
datablock LinearProjectileData(DustProjectile1)
|
|
{
|
|
projectileShapeName = "weapon_missile_Projectile.dts";
|
|
emitterDelay = -1;
|
|
directDamage = 0.0;
|
|
hasDamageRadius = true;
|
|
indirectDamage = 1000.0;
|
|
damageRadius = 250.0;
|
|
radiusDamageType = $DamageType::Nuclear;
|
|
kickBackStrength = 35000;
|
|
|
|
maxWhiteout = 2.0;
|
|
|
|
sound = discProjectileSound;
|
|
explosion = "NuclearMainExplosion";
|
|
underwaterExplosion = "NuclearMainExplosion";
|
|
splash = DiscSplash;
|
|
|
|
dryVelocity = 180;
|
|
wetVelocity = 180;
|
|
velInheritFactor = 0.5;
|
|
fizzleTimeMS = 100;
|
|
lifetimeMS = 100;
|
|
explodeOnDeath = true;
|
|
reflectOnWaterImpactAngle = 15.0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = 5000;
|
|
|
|
activateDelayMS = 200;
|
|
};
|
|
|
|
function ShoulderNuclear::onExplode(%data, %proj, %pos, %mod)
|
|
{
|
|
if (%data.hasDamageRadius)
|
|
RadiusExplosion(%proj, %pos, %data.damageRadius, %data.indirectDamage, %data.kickBackStrength, %proj.sourceObject, %data.radiusDamageType);
|
|
for(%i=0;%i<1;%i++)
|
|
{
|
|
%p = new LinearProjectile() {
|
|
dataBlock = RingProjectile2;
|
|
initialDirection = "0 0 1";
|
|
initialPosition = %pos;
|
|
//sourceObject = %projectile.sourceObject;
|
|
sourceSlot = %projectile.sourceSlot;
|
|
vehicleObject = %projectile.vehicleObject;
|
|
};
|
|
MissionCleanup.add(%p);
|
|
}
|
|
%p = new LinearProjectile() {
|
|
dataBlock = RingProjectile1;
|
|
initialDirection = "0 0 1";
|
|
initialPosition = %pos;
|
|
//sourceObject = %projectile.sourceObject;
|
|
sourceSlot = %projectile.sourceSlot;
|
|
vehicleObject = %projectile.vehicleObject;
|
|
};
|
|
MissionCleanup.add(%p);
|
|
|
|
%p = new LinearProjectile() {
|
|
dataBlock = DustProjectile1;
|
|
initialDirection = "0 0 1";
|
|
initialPosition = %pos;
|
|
//sourceObject = %projectile.sourceObject;
|
|
sourceSlot = %projectile.sourceSlot;
|
|
vehicleObject = %projectile.vehicleObject;
|
|
};
|
|
MissionCleanup.add(%p);
|
|
|
|
%p = new LinearProjectile() {
|
|
dataBlock = StemProjectile1;
|
|
initialDirection = "0 0 1";
|
|
initialPosition = %pos;
|
|
//sourceObject = %projectile.sourceObject;
|
|
sourceSlot = %projectile.sourceSlot;
|
|
vehicleObject = %projectile.vehicleObject;
|
|
};
|
|
MissionCleanup.add(%p);
|
|
|
|
%p = new LinearProjectile() {
|
|
dataBlock = UpperRingProjectile1;
|
|
initialDirection = "0 0 1";
|
|
initialPosition = %pos;
|
|
//sourceObject = %projectile.sourceObject;
|
|
sourceSlot = %projectile.sourceSlot;
|
|
vehicleObject = %projectile.vehicleObject;
|
|
};
|
|
MissionCleanup.add(%p);
|
|
|
|
%p = new LinearProjectile() {
|
|
dataBlock = StemProjectile2;
|
|
initialDirection = "0 0 1";
|
|
initialPosition = %pos;
|
|
//sourceObject = %projectile.sourceObject;
|
|
sourceSlot = %projectile.sourceSlot;
|
|
vehicleObject = %projectile.vehicleObject;
|
|
};
|
|
MissionCleanup.add(%p);
|
|
|
|
}
|