mirror of
https://github.com/mostlikely4r/construction-mod.git
synced 2026-01-19 19:24:44 +00:00
2586 lines
67 KiB
C#
2586 lines
67 KiB
C#
///////////////////////////////////////////////////////////////////////////////
|
|
// "Project Uber: Planetary Cannon Edition" //
|
|
// "The nuke to end all nukes" //
|
|
// coded by: Drain Bramage //
|
|
//---------------------------------------------------------------------------//
|
|
//credit to: HellNight, Lt Earthworm, Southtown, and most expecialy The_Force// //
|
|
// also credit to the AdvancedMod coding forums //
|
|
//---------------------------------------------------------------------------//
|
|
//Features: //
|
|
//This nuke is roughly 1000m tall and 150-200m across. It has most of the //
|
|
//features of an accualy atomic bomb: The mushroom cloud, impact smoke, smoke//
|
|
//ring, debris, shockwaves and compression rings. If you have Burn Damage in//
|
|
//your mod this nuke will set stuff on fire.(want the Burn Damage?, look //
|
|
//for it at http://www.advancedmod.com/forums/index.php) There is also a //
|
|
//warning message and 1 minute countdown displayed in the chat hud, complete //
|
|
//with sounds, when this sucker is fired. Lastly there is "ash" that falls //
|
|
//over the entire map for 20 seconds after the final explosion. //
|
|
//---------------------------------------------------------------------------//
|
|
//***New Weapon Image on its way*** ***Maybe a cleaned up version*** //
|
|
//---------------------------------------------------------------------------//
|
|
//Notes: //
|
|
//-Right now the nuke is set up for testing settings, and is very weak //
|
|
// for its size, feel free to adjust damage amounts and damage radii to your //
|
|
// likeing. //
|
|
// //
|
|
//-I left several unused particles and emitters and a 2nd "debris" //
|
|
//projectile with its onExplode for anyone that might want to use them. //
|
|
// //
|
|
//-Use the nuke how ever you like but please give credit where its due. //
|
|
// //
|
|
//-This nuke LAGS, it was not made to be spammed, infact, more than one going //
|
|
//off in a semi-full server will probaly crash the server, if it doesnt crash //
|
|
//it most of the players will probaly leave due to the lag. This nuke was //
|
|
//made for "eyecandy" lovers like myself. //
|
|
//----------------------------------------------------------------------------//
|
|
//***!!!IMPORTANT!!!*** //
|
|
//-You will need to create new audio descriptions for the sounds to work. //
|
|
//It is very easy to do, simply open up serverAudio.cs, copy the //
|
|
//AudioBIGExplosion3d decription, change the name to AudioNukeUpProjectile3d //
|
|
//and AudioNukeTopExplosion3d adjust the settings. I sugest a maximum of //
|
|
//between 1000 and 2000 and a minimum of around half your maximum. //
|
|
// //
|
|
//-The whiteout will not work unless u have function raidusWhiteout. //
|
|
//I will not include this function in this file because i do not have permission
|
|
//from The_Force to give it out. I'm also to lazy to ask. Go to //
|
|
//http://www.advancedmod.com/forums/index.php and find it yourself. //
|
|
//----------------------------------------------------------------------------//
|
|
//And that concludes all the technical crap, I wrote all that because its 3 in//
|
|
//the morning and I'm bored off my ass. I hope you enjoy "Project Uber" //
|
|
//because it took me a period of around 36 hours over 3 days. Plus what ever //
|
|
//time it takes me to make the weapon image.(work for tomarrow) //
|
|
// -Drain Bramage //
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
datablock AudioProfile(NukeExplosionSound)
|
|
{
|
|
filename = "fx/Bonuses/upward_passback1_bomb.wav";
|
|
description = AudioBIGExplosion3d;
|
|
preload = true;
|
|
};
|
|
|
|
datablock AudioProfile(NukeBottomExplosionSound)
|
|
{
|
|
filename = "fx/explosions/vehicle_explosion.wav";
|
|
description = AudioBIGExplosion3d;
|
|
preload = true;
|
|
};
|
|
|
|
datablock AudioProfile(NukeTopExplosionSound)
|
|
{
|
|
filename = "fx/vehicles/bomber_bomb_impact.wav";
|
|
description = AudioNukeTopExplosion3d;
|
|
preload = true;
|
|
};
|
|
|
|
datablock AudioProfile(NukeUpProjectileSound)
|
|
{
|
|
filename = "fx/vehicles/htransport_boost.wav";
|
|
description = AudioUpProjectile3d;
|
|
};
|
|
|
|
datablock AudioProfile(NukeFireSound)
|
|
{
|
|
filename = "fx/vehicles/tank_mortar_fire.wav";
|
|
description = AudioClosest3d;
|
|
};
|
|
|
|
datablock AudioProfile(NukeReloadSound)
|
|
{
|
|
filename = "fx/vehicles/bomber_turret_activate.wav";
|
|
description = AudioClosest3d;
|
|
};
|
|
datablock AudioProfile(NukeSwitchSound)
|
|
{
|
|
filename = "fx/misc/cannonstart.wav";
|
|
description = AudioBIGExplosion3d;
|
|
};
|
|
//nuke explosion emitter
|
|
datablock ParticleData(NukeExplosionParticle)
|
|
{
|
|
dragCoefficient = 2;
|
|
gravityCoefficient = 0.2;
|
|
inheritedVelFactor = 0.2;
|
|
constantAcceleration = 0.0;
|
|
lifetimeMS = 10000;
|
|
lifetimeVarianceMS = 150;
|
|
useInvAlpha = true;
|
|
textureName = "particleTest";
|
|
colors[0] = "0.1 0.1 0.1 1.0";
|
|
colors[1] = "0.1 0.1 0.1 0.3";
|
|
sizes[0] = 0.5;
|
|
sizes[1] = 2;
|
|
};
|
|
|
|
datablock ParticleEmitterData(NukeExplosionEmitter)
|
|
{
|
|
ejectionPeriodMS = 7;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 100;
|
|
velocityVariance = 1.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 0;
|
|
thetaMax = 60;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
particles = "NukeExplosionParticle";
|
|
};
|
|
|
|
//nuke debris
|
|
//--------------------------------------------------------------
|
|
// Nuke Debris Fire Particles
|
|
//--------------------------------------------------------------
|
|
|
|
datablock ParticleData(NukeDebrisFireParticle)
|
|
{
|
|
dragCoeffiecient = 0.0;
|
|
gravityCoefficient = -0.2;
|
|
inheritedVelFactor = 0.0;
|
|
|
|
lifetimeMS = 350;
|
|
lifetimeVarianceMS = 0;
|
|
|
|
textureName = "particleTest";
|
|
|
|
useInvAlpha = false;
|
|
spinRandomMin = -160.0;
|
|
spinRandomMax = 160.0;
|
|
|
|
animateTexture = true;
|
|
framesPerSec = 15;
|
|
|
|
|
|
animTexName[0] = "special/Explosion/exp_0016";
|
|
animTexName[1] = "special/Explosion/exp_0018";
|
|
animTexName[2] = "special/Explosion/exp_0020";
|
|
animTexName[3] = "special/Explosion/exp_0022";
|
|
animTexName[4] = "special/Explosion/exp_0024";
|
|
animTexName[5] = "special/Explosion/exp_0026";
|
|
animTexName[6] = "special/Explosion/exp_0028";
|
|
animTexName[7] = "special/Explosion/exp_0030";
|
|
animTexName[8] = "special/Explosion/exp_0032";
|
|
|
|
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";
|
|
sizes[0] = 0.5;
|
|
sizes[1] = 2.0;
|
|
sizes[2] = 1.0;
|
|
times[0] = 0.0;
|
|
times[1] = 0.2;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(NukeDebrisFireEmitter)
|
|
{
|
|
ejectionPeriodMS = 20;
|
|
periodVarianceMS = 1;
|
|
|
|
ejectionVelocity = 0.25;
|
|
velocityVariance = 0.0;
|
|
|
|
thetaMin = 0.0;
|
|
thetaMax = 30.0;
|
|
|
|
particles = "NukeDebrisFireParticle";
|
|
};
|
|
//--------------------------------------------------------------
|
|
// Nuke Debris Smoke Particles
|
|
//--------------------------------------------------------------
|
|
|
|
datablock ParticleData( NukeDebrisSmokeParticle )
|
|
{
|
|
dragCoeffiecient = 4.0;
|
|
gravityCoefficient = -0.00; // rises slowly
|
|
inheritedVelFactor = 0.2;
|
|
|
|
lifetimeMS = 1000;
|
|
lifetimeVarianceMS = 100; // ...more or less
|
|
|
|
textureName = "particleTest";
|
|
|
|
useInvAlpha = true;
|
|
|
|
spinRandomMin = -50.0;
|
|
spinRandomMax = 50.0;
|
|
|
|
colors[0] = "0.3 0.3 0.3 0.0";
|
|
colors[1] = "0.3 0.3 0.3 1.0";
|
|
colors[2] = "0.0 0.0 0.0 0.0";
|
|
sizes[0] = 2;
|
|
sizes[1] = 3;
|
|
sizes[2] = 5;
|
|
times[0] = 0.0;
|
|
times[1] = 0.7;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData( NukeDebrisSmokeEmitter )
|
|
{
|
|
ejectionPeriodMS = 25;
|
|
periodVarianceMS = 5;
|
|
|
|
ejectionVelocity = 1.0; // A little oomph at the back end
|
|
velocityVariance = 0.5;
|
|
|
|
thetaMin = 10.0;
|
|
thetaMax = 30.0;
|
|
|
|
useEmitterSizes = true;
|
|
|
|
particles = "NukeDebrisSmokeParticle";
|
|
};
|
|
|
|
datablock DebrisData( NukeDebris )
|
|
{
|
|
emitters[0] = BurningAshEmitter;//was NukeDebrisSmokeEmitter
|
|
emitters[1] = NukeDebrisFireEmitter;
|
|
|
|
explosion = DebrisExplosion;
|
|
explodeOnMaxBounce = true;
|
|
|
|
elasticity = 0.4;
|
|
friction = 0.2;
|
|
|
|
lifetime = 100.0;
|
|
lifetimeVariance = 30.0;
|
|
|
|
numBounces = 0;
|
|
bounceVariance = 0;
|
|
};
|
|
|
|
//bottom smoke
|
|
datablock ParticleData(BottomSmoke1)
|
|
{
|
|
dragCoefficient = 1.0;
|
|
windCoefficient = 0;
|
|
gravityCoefficient = -0.01;
|
|
inheritedVelFactor = 0.0;
|
|
constantAcceleration = 0.0;
|
|
lifetimeMS = 15000;
|
|
lifetimeVarianceMS = 100;
|
|
useInvAlpha = true;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 500.0;
|
|
textureName = "particleTest";
|
|
colors[0] = "0.5 0.5 0.5 0.41";
|
|
colors[1] = "0.4 0.4 0.4 0.41";
|
|
colors[2] = "0.3 0.3 0.3 0.41";
|
|
sizes[0] = 23.4;
|
|
sizes[1] = 30.2;
|
|
sizes[2] = 30.0;
|
|
times[0] = 0.0;
|
|
times[1] = 0.7;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(BottomSmokeEmitter1)
|
|
{
|
|
ejectionPeriodMS = 3;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 310.0;
|
|
velocityVariance = 0.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 87;
|
|
thetaMax = 87;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
lifetimeMS = 5000;
|
|
particles = "BottomSmoke1";
|
|
};
|
|
|
|
datablock ParticleData(BottomSmoke2)
|
|
{
|
|
dragCoefficient = 1.0;
|
|
windCoefficient = 0;
|
|
gravityCoefficient = -0.01;
|
|
inheritedVelFactor = 0.0;
|
|
constantAcceleration = 0.0;
|
|
lifetimeMS = 15000;
|
|
lifetimeVarianceMS = 100;
|
|
useInvAlpha = true;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 500.0;
|
|
textureName = "particleTest";
|
|
colors[0] = "0.5 0.5 0.5 0.41";
|
|
colors[1] = "0.4 0.4 0.4 0.41";
|
|
colors[2] = "0.3 0.3 0.3 0.41";
|
|
sizes[0] = 23.4;
|
|
sizes[1] = 30.2;
|
|
sizes[2] = 30.0;
|
|
times[0] = 0.0;
|
|
times[1] = 0.7;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(BottomSmokeEmitter2)
|
|
{
|
|
ejectionPeriodMS = 3;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 305.0;
|
|
velocityVariance = 0.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 84;
|
|
thetaMax = 84;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
lifetimeMS = 5000;
|
|
particles = "BottomSmoke2";
|
|
};
|
|
|
|
datablock ParticleData(BottomSmoke3)
|
|
{
|
|
dragCoefficient = 1.0;
|
|
windCoefficient = 0;
|
|
gravityCoefficient = -0.01;
|
|
inheritedVelFactor = 0.0;
|
|
constantAcceleration = 0.0;
|
|
lifetimeMS = 15000;
|
|
lifetimeVarianceMS = 100;
|
|
useInvAlpha = true;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 500.0;
|
|
textureName = "particleTest";
|
|
colors[0] = "0.5 0.5 0.5 0.41";
|
|
colors[1] = "0.4 0.4 0.4 0.41";
|
|
colors[2] = "0.3 0.3 0.3 0.41";
|
|
sizes[0] = 23.4;
|
|
sizes[1] = 30.2;
|
|
sizes[2] = 30.0;
|
|
times[0] = 0.0;
|
|
times[1] = 0.7;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(BottomSmokeEmitter3)
|
|
{
|
|
ejectionPeriodMS = 3;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 290.0;
|
|
velocityVariance = 0.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 81;
|
|
thetaMax = 81;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
lifetimeMS = 5000;
|
|
particles = "BottomSmoke3";
|
|
};
|
|
|
|
datablock ParticleData(BottomSmoke4)
|
|
{
|
|
dragCoefficient = 1.0;
|
|
windCoefficient = 0;
|
|
gravityCoefficient = -0.01;
|
|
inheritedVelFactor = 0.0;
|
|
constantAcceleration = 0.0;
|
|
lifetimeMS = 15000;
|
|
lifetimeVarianceMS = 100;
|
|
useInvAlpha = true;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 500.0;
|
|
textureName = "particleTest";
|
|
colors[0] = "0.5 0.5 0.5 0.41";
|
|
colors[1] = "0.4 0.4 0.4 0.41";
|
|
colors[2] = "0.3 0.3 0.3 0.41";
|
|
sizes[0] = 23.4;
|
|
sizes[1] = 30.2;
|
|
sizes[2] = 30.0;
|
|
times[0] = 0.0;
|
|
times[1] = 0.7;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(BottomSmokeEmitter4)
|
|
{
|
|
ejectionPeriodMS = 3;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 275.0;
|
|
velocityVariance = 0.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 78;
|
|
thetaMax = 78;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
lifetimeMS = 5000;
|
|
particles = "BottomSmoke4";
|
|
};
|
|
|
|
datablock ParticleData(BottomSmoke5)
|
|
{
|
|
dragCoefficient = 1.0;
|
|
windCoefficient = 0;
|
|
gravityCoefficient = -0.01;
|
|
inheritedVelFactor = 0.0;
|
|
constantAcceleration = 0.0;
|
|
lifetimeMS = 10000;
|
|
lifetimeVarianceMS = 100;
|
|
useInvAlpha = true;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 500.0;
|
|
textureName = "particleTest";
|
|
colors[0] = "0.5 0.5 0.5 0.41";
|
|
colors[1] = "0.4 0.4 0.4 0.41";
|
|
colors[2] = "0.3 0.3 0.3 0.41";
|
|
sizes[0] = 23.4;
|
|
sizes[1] = 30.2;
|
|
sizes[2] = 30.0;
|
|
times[0] = 0.0;
|
|
times[1] = 0.7;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(BottomSmokeEmitter5)
|
|
{
|
|
ejectionPeriodMS = 3;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 250.0;
|
|
velocityVariance = 0.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 75;
|
|
thetaMax = 75;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
lifetimeMS = 5000;
|
|
particles = "BottomSmoke5";
|
|
};
|
|
|
|
datablock ParticleData(BottomSmoke6)
|
|
{
|
|
dragCoefficient = 1.0;
|
|
windCoefficient = 0;
|
|
gravityCoefficient = -0.01;
|
|
inheritedVelFactor = 0.0;
|
|
constantAcceleration = 0.0;
|
|
lifetimeMS = 10000;
|
|
lifetimeVarianceMS = 100;
|
|
useInvAlpha = true;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 500.0;
|
|
textureName = "particleTest";
|
|
colors[0] = "0.5 0.5 0.5 0.41";
|
|
colors[1] = "0.4 0.4 0.4 0.41";
|
|
colors[2] = "0.3 0.3 0.3 0.41";
|
|
sizes[0] = 23.4;
|
|
sizes[1] = 30.2;
|
|
sizes[2] = 30.0;
|
|
times[0] = 0.0;
|
|
times[1] = 0.7;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(BottomSmokeEmitter6)
|
|
{
|
|
ejectionPeriodMS = 3;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 235.0;
|
|
velocityVariance = 0.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 75;
|
|
thetaMax = 75;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
lifetimeMS = 5000;
|
|
particles = "BottomSmoke6";
|
|
};
|
|
|
|
datablock ParticleData(BottomSmoke7)
|
|
{
|
|
dragCoefficient = 1.0;
|
|
windCoefficient = 0;
|
|
gravityCoefficient = -0.01;
|
|
inheritedVelFactor = 0.0;
|
|
constantAcceleration = 0.0;
|
|
lifetimeMS = 10000;
|
|
lifetimeVarianceMS = 100;
|
|
useInvAlpha = true;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 500.0;
|
|
textureName = "particleTest";
|
|
colors[0] = "0.5 0.5 0.5 0.41";
|
|
colors[1] = "0.4 0.4 0.4 0.41";
|
|
colors[2] = "0.3 0.3 0.3 0.41";
|
|
sizes[0] = 23.4;
|
|
sizes[1] = 30.2;
|
|
sizes[2] = 30.0;
|
|
times[0] = 0.0;
|
|
times[1] = 0.7;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(BottomSmokeEmitter7)
|
|
{
|
|
ejectionPeriodMS = 3;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 180.0;
|
|
velocityVariance = 0.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 75;
|
|
thetaMax = 75;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
lifetimeMS = 5000;
|
|
particles = "BottomSmoke7";
|
|
};
|
|
//middle dust ring
|
|
datablock ParticleData(NukeRing)
|
|
{
|
|
dragCoefficient = 1.0;
|
|
windCoefficient = 0;
|
|
gravityCoefficient = -0.01;
|
|
inheritedVelFactor = 0.0;
|
|
constantAcceleration = 0.0;
|
|
lifetimeMS = 15000;
|
|
lifetimeVarianceMS = 100;
|
|
useInvAlpha = true;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 500.0;
|
|
textureName = "particleTest";
|
|
colors[0] = "0.6 0.3 0.2 0.41";
|
|
colors[1] = "0.6 0.3 0.2 0.41";
|
|
colors[2] = "0.6 0.3 0.2 0.41";
|
|
sizes[0] = 29.4;
|
|
sizes[1] = 32.2;
|
|
sizes[2] = 33.0;
|
|
times[0] = 0.0;
|
|
times[1] = 0.7;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(NukeRingEmitter)
|
|
{
|
|
ejectionPeriodMS = 10;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 200.0;
|
|
velocityVariance = 0.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 85;
|
|
thetaMax = 85;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
lifetimeMS = 500;
|
|
particles = "NukeRing";
|
|
};
|
|
//condensation rings
|
|
datablock ParticleData(NukeDust)
|
|
{
|
|
dragCoefficient = 1.0;
|
|
gravityCoefficient = -0.03;
|
|
windCoefficient = 0;
|
|
inheritedVelFactor = 0.0;
|
|
constantAcceleration = 0.005;
|
|
lifetimeMS = 10000;
|
|
lifetimeVarianceMS = 100;
|
|
useInvAlpha = false;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 500.0;
|
|
textureName = "particleTest";
|
|
colors[0] = "1.0 1.0 1.0 0.2";
|
|
colors[1] = "1.0 1.0 1.0 0.2";
|
|
colors[2] = "1.0 1.0 1.0 0.2";
|
|
sizes[0] = 39.2;
|
|
sizes[1] = 42.6;
|
|
sizes[2] = 43.0;
|
|
times[0] = 0.0;
|
|
times[1] = 2.0;
|
|
times[2] = 4.0;
|
|
};
|
|
|
|
datablock ParticleData(NukeDust2)
|
|
{
|
|
dragCoefficient = 1.0;
|
|
gravityCoefficient = -0.03;
|
|
windCoefficient = 0;
|
|
inheritedVelFactor = 0.0;
|
|
constantAcceleration = 0.005;
|
|
lifetimeMS = 10000;
|
|
lifetimeVarianceMS = 100;
|
|
useInvAlpha = false;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 500.0;
|
|
textureName = "particleTest";
|
|
colors[0] = "1.0 1.0 1.0 0.2";
|
|
colors[1] = "1.0 1.0 1.0 0.2";
|
|
colors[2] = "1.0 1.0 1.0 0.2";
|
|
sizes[0] = 39.2;
|
|
sizes[1] = 42.6;
|
|
sizes[2] = 43.0;
|
|
times[0] = 0.0;
|
|
times[1] = 2.0;
|
|
times[2] = 4.0;
|
|
};
|
|
|
|
datablock ParticleData(NukeDust3)
|
|
{
|
|
dragCoefficient = 1.0;
|
|
gravityCoefficient = -0.03;
|
|
windCoefficient = 0;
|
|
inheritedVelFactor = 0.0;
|
|
constantAcceleration = 0.005;
|
|
lifetimeMS = 10000;
|
|
lifetimeVarianceMS = 100;
|
|
useInvAlpha = false;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 500.0;
|
|
textureName = "particleTest";
|
|
colors[0] = "1.0 1.0 1.0 0.2";
|
|
colors[1] = "1.0 1.0 1.0 0.2";
|
|
colors[2] = "1.0 1.0 1.0 0.2";
|
|
sizes[0] = 39.2;
|
|
sizes[1] = 42.6;
|
|
sizes[2] = 43.0;
|
|
times[0] = 0.0;
|
|
times[1] = 2.0;
|
|
times[2] = 4.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(NukeDustEmitter)
|
|
{
|
|
ejectionPeriodMS = 0;
|
|
delayMS = 30;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 475.0;
|
|
velocityVariance = 0.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 110;
|
|
thetaMax = 110;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
lifetimeMS = 500;
|
|
particles = "NukeDust";
|
|
};
|
|
|
|
datablock ParticleEmitterData(UpAngleNukeDustEmitter)
|
|
{
|
|
ejectionPeriodMS = 0;
|
|
delayMS = 30;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 475.0;
|
|
velocityVariance = 0.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 135;
|
|
thetaMax = 135;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
lifetimeMS = 500;
|
|
particles = "NukeDust3";
|
|
};
|
|
|
|
datablock ParticleEmitterData(DownAngleNukeDustEmitter)
|
|
{
|
|
ejectionPeriodMS = 0;
|
|
delayMS = 30;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 475.0;
|
|
velocityVariance = 0.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 135;
|
|
thetaMax = 135;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
lifetimeMS = 500;
|
|
particles = "NukeDust3";
|
|
};
|
|
//added these ones some 15 hours after the ones up above, thats y there not in order....
|
|
datablock ParticleData(NukeCond1)
|
|
{
|
|
dragCoefficient = 1.0;
|
|
gravityCoefficient = -0.03;
|
|
windCoefficient = 0;
|
|
inheritedVelFactor = 0.0;
|
|
constantAcceleration = 0.025;
|
|
lifetimeMS = 12000;
|
|
lifetimeVarianceMS = 100;
|
|
useInvAlpha = false;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 500.0;
|
|
textureName = "particleTest";
|
|
colors[0] = "1.0 1.0 1.0 0.2";
|
|
colors[1] = "1.0 1.0 1.0 0.2";
|
|
colors[2] = "1.0 1.0 1.0 0.2";
|
|
sizes[0] = 39.2;
|
|
sizes[1] = 42.6;
|
|
sizes[2] = 43.0;
|
|
times[0] = 0.0;
|
|
times[1] = 2.0;
|
|
times[2] = 4.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(NukeCondEmitter1)
|
|
{
|
|
ejectionPeriodMS = 0;
|
|
delayMS = 0;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 425.0;
|
|
velocityVariance = 0.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 135;
|
|
thetaMax = 135;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
lifetimeMS = 5000;
|
|
particles = "NukeCond1";
|
|
};
|
|
|
|
datablock ParticleData(NukeCond2)
|
|
{
|
|
dragCoefficient = 1.0;
|
|
gravityCoefficient = -0.03;
|
|
windCoefficient = 0;
|
|
inheritedVelFactor = 0.0;
|
|
constantAcceleration = 0.025;
|
|
lifetimeMS = 12000;
|
|
lifetimeVarianceMS = 100;
|
|
useInvAlpha = false;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 500.0;
|
|
textureName = "particleTest";
|
|
colors[0] = "1.0 1.0 1.0 0.2";
|
|
colors[1] = "1.0 1.0 1.0 0.2";
|
|
colors[2] = "1.0 1.0 1.0 0.2";
|
|
sizes[0] = 39.2;
|
|
sizes[1] = 42.6;
|
|
sizes[2] = 43.0;
|
|
times[0] = 0.0;
|
|
times[1] = 2.0;
|
|
times[2] = 4.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(NukeCondEmitter2)
|
|
{
|
|
ejectionPeriodMS = 0;
|
|
delayMS = 0;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 475.0;
|
|
velocityVariance = 0.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 120;
|
|
thetaMax = 120;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
lifetimeMS = 5000;
|
|
particles = "NukeCond2";
|
|
};
|
|
|
|
datablock ParticleData(NukeCond3)
|
|
{
|
|
dragCoefficient = 1.0;
|
|
gravityCoefficient = -0.03;
|
|
windCoefficient = 0;
|
|
inheritedVelFactor = 0.0;
|
|
constantAcceleration = 0.025;
|
|
lifetimeMS = 12000;
|
|
lifetimeVarianceMS = 100;
|
|
useInvAlpha = false;
|
|
spinRandomMin = -90.0;
|
|
spinRandomMax = 500.0;
|
|
textureName = "particleTest";
|
|
colors[0] = "1.0 1.0 1.0 0.2";
|
|
colors[1] = "1.0 1.0 1.0 0.2";
|
|
colors[2] = "1.0 1.0 1.0 0.2";
|
|
sizes[0] = 39.2;
|
|
sizes[1] = 42.6;
|
|
sizes[2] = 43.0;
|
|
times[0] = 0.0;
|
|
times[1] = 2.0;
|
|
times[2] = 4.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(NukeCondEmitter3)
|
|
{
|
|
ejectionPeriodMS = 0;
|
|
delayMS = 0;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 475.0;
|
|
velocityVariance = 0.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 105;
|
|
thetaMax = 105;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
lifetimeMS = 5000;
|
|
particles = "NukeCond3";
|
|
};
|
|
|
|
//shockwaves
|
|
datablock ShockwaveData(middleShockwave)
|
|
{
|
|
width = 500.0;
|
|
numSegments = 190;
|
|
numVertSegments = 150;
|
|
velocity = 5;
|
|
acceleration = 1.0;
|
|
lifetimeMS = 10500;
|
|
height = 50.0;
|
|
verticalCurve = 0.25;
|
|
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] = "1.0 0.0 0.0 0.50";
|
|
colors[1] = "1.0 0.0 0.0 0.25";
|
|
colors[2] = "1.0 0.0 0.0 0.0";
|
|
|
|
mapToTerrain = false;
|
|
orientToNormal = false;
|
|
renderBottom = false;
|
|
};
|
|
|
|
datablock ShockwaveData(TopShockwave)
|
|
{
|
|
width = 400.0;
|
|
numSegments = 190;
|
|
numVertSegments = 150;
|
|
velocity = 50;
|
|
acceleration = 10.0;
|
|
lifetimeMS = 10000;
|
|
height = 75.0;
|
|
verticalCurve = 0.25;
|
|
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] = "1.0 0.5 0.0 0.5";
|
|
colors[1] = "1.0 0.5 0.0 0.5";
|
|
colors[2] = "1.0 0.5 0.0 0.0";
|
|
|
|
mapToTerrain = false;
|
|
orientToNormal = false;
|
|
renderBottom = true;
|
|
};
|
|
|
|
datablock ShockwaveData(bottomShockwave)
|
|
{
|
|
width = 200.0;
|
|
numSegments = 50;
|
|
numVertSegments = 56;
|
|
velocity = 200;
|
|
acceleration = 1.0;
|
|
lifetimeMS = 17000;
|
|
height = 10.0;
|
|
verticalCurve = 0.25;
|
|
is2D = false;
|
|
|
|
texture[0] = "special/shockwave4";
|
|
texture[1] = "special/gradient";
|
|
texWrap = 100.0;
|
|
|
|
times[0] = 0.0;
|
|
times[1] = 0.5;
|
|
times[2] = 1.0;
|
|
|
|
colors[0] = "1.0 1.0 1.0 0.50";
|
|
colors[1] = "1.0 1.0 1.0 0.25";
|
|
colors[2] = "1.0 1.0 1.0 0.0";
|
|
|
|
mapToTerrain = false;
|
|
orientToNormal = false;
|
|
renderBottom = true;
|
|
};
|
|
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Explosion Particle effects
|
|
//--------------------------------------
|
|
datablock ParticleData( NukeCrescentParticle )
|
|
{
|
|
dragCoefficient = 2;
|
|
gravityCoefficient = 0.0;
|
|
inheritedVelFactor = 0.2;
|
|
constantAcceleration = -0.0;
|
|
lifetimeMS = 3600;
|
|
lifetimeVarianceMS = 000;
|
|
textureName = "special/crescent3";
|
|
colors[0] = "0.5 0.0 0.0 1.0";
|
|
colors[1] = "0.5 0.0 0.0 0.5";
|
|
colors[2] = "0.5 0.0 0.0 0.0";
|
|
sizes[0] = 4.0;
|
|
sizes[1] = 8.0;
|
|
sizes[2] = 9.0;
|
|
times[0] = 0.0;
|
|
times[1] = 0.5;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData( NukeCrescentEmitter )
|
|
{
|
|
ejectionPeriodMS = 25;
|
|
periodVarianceMS = 0;
|
|
ejectionVelocity = 40;
|
|
velocityVariance = 5.0;
|
|
ejectionOffset = 0.0;
|
|
thetaMin = 0;
|
|
thetaMax = 80;
|
|
phiReferenceVel = 0;
|
|
phiVariance = 360;
|
|
overrideAdvances = false;
|
|
orientParticles = true;
|
|
lifetimeMS = 2000;
|
|
particles = "NukeCrescentParticle";
|
|
};
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Explosion/s
|
|
//---------------------------------------------------------------------------
|
|
|
|
datablock ExplosionData(BottomSubExplosion1)
|
|
{
|
|
explosionShape = "effect_plasma_explosion.dts";
|
|
faceViewer = true;
|
|
emitter[0] = BottomSmokeEmitter5;
|
|
//emitter[1] = NukeCondEmitter1;
|
|
|
|
delayMS = 100;
|
|
|
|
|
|
|
|
playSpeed = 0.025;
|
|
|
|
sizes[0] = "58.05 58.05 58.05";
|
|
sizes[1] = "58.05 58.05 58.05";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
|
|
};
|
|
|
|
datablock ExplosionData(BottomSubExplosion2)
|
|
{
|
|
explosionShape = "effect_plasma_explosion.dts";
|
|
faceViewer = true;
|
|
//emitter[0] = NukeCondEmitter3;
|
|
//emitter[1] = NukeCondEmitter2;
|
|
|
|
delayMS = 500;
|
|
|
|
|
|
|
|
playSpeed = 0.025;
|
|
|
|
sizes[0] = "58.05 58.05 58.05";
|
|
sizes[1] = "58.05 58.05 58.05";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
|
|
};
|
|
|
|
datablock ExplosionData(BottomSubExplosion3)
|
|
{
|
|
explosionShape = "effect_plasma_explosion.dts";
|
|
faceViewer = true;
|
|
emitter[0] = BottomSmokeEmitter6;
|
|
//emitter[1] = NukeCondEmitter3;
|
|
|
|
delayMS = 1000;
|
|
|
|
|
|
|
|
playSpeed = 0.025;
|
|
|
|
sizes[0] = "58.05 58.05 58.05";
|
|
sizes[1] = "58.05 58.05 58.05";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
|
|
};
|
|
|
|
datablock ExplosionData(BottomExplosion)
|
|
{
|
|
soundProfile = NukeBottomExplosionSound;
|
|
|
|
subExplosion[0] = BottomSubExplosion1;
|
|
subExplosion[1] = BottomSubExplosion2;
|
|
subExplosion[2] = BottomSubExplosion3;
|
|
|
|
shockwave = bottomShockwave;
|
|
shockwaveOnTerrain = true;
|
|
|
|
debris = NukeDebris;
|
|
debrisThetaMin = 10;
|
|
debrisThetaMax = 60;
|
|
debrisNum = 15;
|
|
debrisNumVariance = 5;
|
|
debrisVelocity = 75.0;
|
|
debrisVelocityVariance = 5.0;
|
|
|
|
particleEmitter = PlasmaExplosionEmitter;
|
|
particleDensity = 10000;
|
|
particleRadius = 50.25;
|
|
faceViewer = true;
|
|
|
|
emitter[0] = BottomSmokeEmitter1;
|
|
emitter[1] = BottomSmokeEmitter2;
|
|
emitter[2] = BottomSmokeEmitter3;
|
|
emitter[3] = BottomSmokeEmitter4;
|
|
|
|
shakeCamera = true;
|
|
camShakeFreq = "9900.0 8900.0 7800.0";
|
|
camShakeAmp = "1000.0 1000.0 1000.0";
|
|
camShakeDuration = 5.0;
|
|
camShakeRadius = 125.0;
|
|
};
|
|
|
|
datablock ExplosionData(MidSubExplosion1)
|
|
{
|
|
explosionShape = "effect_plasma_explosion.dts";
|
|
faceViewer = true;
|
|
|
|
delayMS = 100;
|
|
|
|
|
|
|
|
playSpeed = 0.025;
|
|
|
|
sizes[0] = "44.05 44.05 44.05";
|
|
sizes[1] = "44.05 44.05 44.05";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
|
|
};
|
|
|
|
datablock ExplosionData(MidSubExplosion2)
|
|
{
|
|
explosionShape = "effect_plasma_explosion.dts";
|
|
faceViewer = true;
|
|
|
|
delayMS = 500;
|
|
|
|
|
|
|
|
playSpeed = 0.025;
|
|
|
|
sizes[0] = "44.05 44.05 44.05";
|
|
sizes[1] = "44.05 44.05 44.05";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
|
|
};
|
|
|
|
datablock ExplosionData(MidSubExplosion3)
|
|
{
|
|
explosionShape = "effect_plasma_explosion.dts";
|
|
faceViewer = true;
|
|
|
|
delayMS = 1000;
|
|
|
|
|
|
|
|
playSpeed = 0.025;
|
|
|
|
sizes[0] = "44.05 44.05 44.05";
|
|
sizes[1] = "44.05 44.05 44.05";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
|
|
};
|
|
|
|
datablock ExplosionData(MidExplosion)
|
|
{
|
|
soundProfile = NukeExplosionSound;
|
|
|
|
subExplosion[0] = MidSubExplosion1;
|
|
subExplosion[1] = MidSubExplosion2;
|
|
subExplosion[2] = MidSubExplosion3;
|
|
|
|
//shockwave = AirBlastShockwave;
|
|
//shockwaveOnTerrain = false;
|
|
|
|
debris = NukeDebris;
|
|
debrisThetaMin = 10;
|
|
debrisThetaMax = 60;
|
|
debrisNum = 15;
|
|
debrisNumVariance = 5;
|
|
debrisVelocity = 75.0;
|
|
debrisVelocityVariance = 5.0;
|
|
|
|
particleEmitter = PlasmaExplosionEmitter;
|
|
particleDensity = 10000;
|
|
particleRadius = 40.25;
|
|
faceViewer = true;
|
|
|
|
emitter[0] = NukeExplosionSmokeEmitter;
|
|
emitter[1] = NukeCrescentEmitter;
|
|
//emitter[2] = NukeDustEmitter;
|
|
|
|
shakeCamera = true;
|
|
camShakeFreq = "9900.0 8900.0 7800.0";
|
|
camShakeAmp = "1000.0 1000.0 1000.0";
|
|
camShakeDuration = 5.0;
|
|
camShakeRadius = 50.0;
|
|
};
|
|
|
|
datablock ExplosionData(RingExplosion)
|
|
{
|
|
soundProfile = NukeExplosionSound;
|
|
|
|
subExplosion[0] = MidSubExplosion1;
|
|
subExplosion[1] = MidSubExplosion2;
|
|
subExplosion[2] = MidSubExplosion3;
|
|
|
|
//shockwave = AirBlastShockwave;
|
|
//shockwaveOnTerrain = false;
|
|
|
|
debris = NukeDebris;
|
|
debrisThetaMin = 10;
|
|
debrisThetaMax = 60;
|
|
debrisNum = 15;
|
|
debrisNumVariance = 5;
|
|
debrisVelocity = 75.0;
|
|
debrisVelocityVariance = 5.0;
|
|
|
|
|
|
particleEmitter = PlasmaExplosionEmitter;
|
|
particleDensity = 10000;
|
|
particleRadius = 40.25;
|
|
faceViewer = true;
|
|
|
|
emitter[0] = NukeCondEmitter1;
|
|
emitter[1] = NukeCondEmitter2;
|
|
emitter[2] = NukeCondEmitter3;
|
|
emitter[3] = NukeRingEmitter;
|
|
|
|
shakeCamera = true;
|
|
camShakeFreq = "9900.0 8900.0 7800.0";
|
|
camShakeAmp = "1000.0 1000.0 1000.0";
|
|
camShakeDuration = 5.0;
|
|
camShakeRadius = 150.0;
|
|
};
|
|
|
|
datablock ExplosionData(TopSubExplosion1)
|
|
{
|
|
explosionShape = "effect_plasma_explosion.dts";
|
|
faceViewer = true;
|
|
soundProfile = NukeTopExplosionSound;
|
|
|
|
delayMS = 100;
|
|
|
|
|
|
|
|
playSpeed = 0.025;
|
|
|
|
sizes[0] = "155.05 130.05 130.05";
|
|
sizes[1] = "305.05 280.05 280.05";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
|
|
};
|
|
|
|
datablock ExplosionData(TopSubExplosion2)
|
|
{
|
|
explosionShape = "effect_plasma_explosion.dts";
|
|
faceViewer = true;
|
|
soundProfile = NukeTopExplosionSound;
|
|
|
|
delayMS = 500;
|
|
|
|
|
|
playSpeed = 0.025;
|
|
|
|
sizes[0] = "155.05 130.05 130.05";
|
|
sizes[1] = "305.05 280.05 280.05";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
|
|
};
|
|
|
|
datablock ExplosionData(TopSubExplosion3)
|
|
{
|
|
explosionShape = "effect_plasma_explosion.dts";
|
|
faceViewer = true;
|
|
soundProfile = NukeTopExplosionSound;
|
|
|
|
delayMS = 1000;
|
|
|
|
|
|
|
|
playSpeed = 0.025;
|
|
|
|
sizes[0] = "155.05 130.05 130.05";
|
|
sizes[1] = "305.05 280.05 280.05";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
|
|
};
|
|
|
|
datablock ExplosionData(TopSubExplosion4)
|
|
{
|
|
explosionShape = "effect_plasma_explosion.dts";
|
|
faceViewer = true;
|
|
soundProfile = NukeTopExplosionSound;
|
|
|
|
delayMS = 100;
|
|
|
|
|
|
|
|
playSpeed = 0.025;
|
|
|
|
sizes[0] = "155.05 130.05 130.05";
|
|
sizes[1] = "305.05 280.05 280.05";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
|
|
};
|
|
|
|
datablock ExplosionData(TopSubExplosion5)
|
|
{
|
|
explosionShape = "effect_plasma_explosion.dts";
|
|
faceViewer = true;
|
|
soundProfile = NukeTopExplosionSound;
|
|
|
|
delayMS = 500;
|
|
|
|
|
|
playSpeed = 0.025;
|
|
|
|
sizes[0] = "155.05 130.05 130.05";
|
|
sizes[1] = "305.05 280.05 280.05";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
|
|
};
|
|
|
|
datablock ExplosionData(TopSubExplosion6)
|
|
{
|
|
explosionShape = "effect_plasma_explosion.dts";
|
|
faceViewer = true;
|
|
soundProfile = NukeTopExplosionSound;
|
|
|
|
|
|
delayMS = 1000;
|
|
|
|
playSpeed = 0.025;
|
|
|
|
sizes[0] = "155.05 130.05 130.05";
|
|
sizes[1] = "305.05 280.05 280.05";
|
|
times[0] = 0.0;
|
|
times[1] = 1.0;
|
|
|
|
};
|
|
|
|
datablock ExplosionData(TopExplosion)
|
|
{
|
|
soundProfile = NukeTopExplosionSound;
|
|
|
|
subExplosion[0] = TopSubExplosion1;
|
|
subExplosion[1] = TopSubExplosion2;
|
|
subExplosion[2] = TopSubExplosion3;
|
|
subExplosion[3] = TopSubExplosion4;
|
|
subExplosion[4] = TopSubExplosion5;
|
|
subExplosion[5] = TopSubExplosion6;
|
|
|
|
shockwave = TopShockwave;
|
|
shockwaveOnTerrain = false;
|
|
|
|
debris = NukeDebris;
|
|
debrisThetaMin = 10;
|
|
debrisThetaMax = 60;
|
|
debrisNum = 250;
|
|
debrisNumVariance = 5;
|
|
debrisVelocity = 125.0;
|
|
debrisVelocityVariance = 5.0;
|
|
|
|
particleEmitter = PlasmaExplosionEmitter;
|
|
particleDensity = 15000;
|
|
particleRadius = 275.25;
|
|
faceViewer = true;
|
|
|
|
emitter[0] = NukeCrescentEmitter;
|
|
emitter[1] = NukeDustEmitter;
|
|
emitter[2] = UpAngleNukeDustEmitter;
|
|
//emitter[2] = DownAngleNukeDustEmitter;
|
|
|
|
shakeCamera = true;
|
|
camShakeFreq = "1000.0 1000.0 1000.0";
|
|
camShakeAmp = "1000.0 900.0 1500.0";
|
|
camShakeDuration = 8.0;
|
|
camShakeRadius = 1500.0;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Smoke particles
|
|
//---------------------------------------------------------------------------
|
|
datablock ParticleData(CoolSmokeParticle)
|
|
{
|
|
dragCoeffiecient = 0.0;
|
|
gravityCoefficient = -0.0; // rises slowly
|
|
inheritedVelFactor = 0.00;
|
|
|
|
lifetimeMS = 1700; // lasts 2 second
|
|
lifetimeVarianceMS = 150; // ...more or less
|
|
|
|
textureName = "particleTest";
|
|
|
|
useInvAlpha = true;
|
|
spinRandomMin = -30.0;
|
|
spinRandomMax = 30.0;
|
|
|
|
colors[0] = "0.5 0.3 0.1 1.0";
|
|
colors[1] = "0.5 0.3 0.1 0.5";
|
|
colors[2] = "0.5 0.3 0.1 0.1";
|
|
|
|
sizes[0] = 5.25;
|
|
sizes[1] = 6.0;
|
|
sizes[2] = 8.0;
|
|
|
|
times[0] = 0.0;
|
|
times[1] = 0.2;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(CoolSmokeEmitter)
|
|
{
|
|
ejectionPeriodMS = 10;
|
|
periodVarianceMS = 0;
|
|
|
|
ejectionVelocity = 0.25;
|
|
velocityVariance = 0.50;
|
|
|
|
thetaMin = -10.0;
|
|
thetaMax = 10.0;
|
|
|
|
particles = "CoolSmokeParticle";
|
|
};
|
|
|
|
datablock ParticleData(CannonSmokeParticle)
|
|
{
|
|
dragCoeffiecient = 0.0;
|
|
gravityCoefficient = -0.0; // rises slowly
|
|
inheritedVelFactor = 0.00;
|
|
|
|
lifetimeMS = 10700; // lasts 2 second
|
|
lifetimeVarianceMS = 150; // ...more or less
|
|
|
|
textureName = "special/flareSpark";
|
|
|
|
useInvAlpha = false;
|
|
spinRandomMin = -30.0;
|
|
spinRandomMax = 30.0;
|
|
|
|
colors[0] = "0.0 1.0 0.4 0.3";
|
|
colors[1] = "0.0 1.0 0.4 0.3";
|
|
colors[2] = "0.0 1.0 0.4 0.1";
|
|
|
|
sizes[0] = 45.25;
|
|
sizes[1] = 46.0;
|
|
sizes[2] = 38.0;
|
|
|
|
times[0] = 0.0;
|
|
times[1] = 0.2;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(CannonSmokeEmitter)
|
|
{
|
|
ejectionPeriodMS = 10;
|
|
periodVarianceMS = 0;
|
|
|
|
ejectionVelocity = 0.25;
|
|
velocityVariance = 0.50;
|
|
|
|
thetaMin = -10.0;
|
|
thetaMax = 10.0;
|
|
|
|
particles = "CannonSmokeParticle";
|
|
};
|
|
|
|
datablock ParticleData(BurningAshParticle)
|
|
{
|
|
dragCoeffiecient = 0.0;
|
|
gravityCoefficient = -0.0; // rises slowly
|
|
inheritedVelFactor = 0.00;
|
|
|
|
lifetimeMS = 700; // lasts 2 second
|
|
lifetimeVarianceMS = 150; // ...more or less
|
|
|
|
textureName = "particleTest";
|
|
|
|
useInvAlpha = true;
|
|
spinRandomMin = -30.0;
|
|
spinRandomMax = 30.0;
|
|
|
|
colors[0] = "1.0 1.0 0.0 1.0";
|
|
colors[1] = "0.8 0.5 0.0 1.0";
|
|
colors[2] = "0.5 0.2 0.0 0.0";
|
|
|
|
sizes[0] = 0.25;
|
|
sizes[1] = 0.15;
|
|
sizes[2] = 0.05;
|
|
|
|
times[0] = 0.0;
|
|
times[1] = 0.2;
|
|
times[2] = 1.0;
|
|
};
|
|
|
|
datablock ParticleEmitterData(BurningAshEmitter)
|
|
{
|
|
ejectionPeriodMS = 5;
|
|
periodVarianceMS = 0;
|
|
|
|
ejectionVelocity = 1.25;
|
|
velocityVariance = 0.50;
|
|
|
|
thetaMin = 0.0;
|
|
thetaMax = 0.0;
|
|
|
|
particles = "BurningAshParticle";
|
|
};
|
|
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Projectile
|
|
//--------------------------------------
|
|
datablock TargetProjectileData(RedTargeterBeam)
|
|
{
|
|
directDamage = 0.0;
|
|
hasDamageRadius = false;
|
|
indirectDamage = 0.0;
|
|
damageRadius = 0.0;
|
|
velInheritFactor = 1.0;
|
|
|
|
maxRifleRange = 1000;
|
|
beamColor = "1.0 0.1 0.1";
|
|
|
|
startBeamWidth = 0.50;
|
|
pulseBeamWidth = 1.15;
|
|
beamFlareAngle = 3.0;
|
|
minFlareSize = 0.0;
|
|
maxFlareSize = 400.0;
|
|
pulseSpeed = 6.0;
|
|
pulseLength = 0.150;
|
|
|
|
textureName[0] = "special/nonlingradient";
|
|
textureName[1] = "special/flare";
|
|
textureName[2] = "special/pulse";
|
|
textureName[3] = "special/expFlare";
|
|
beacon = true;
|
|
};
|
|
|
|
datablock TargetProjectileData(NukeTargeterBeam)
|
|
{
|
|
directDamage = 0.0;
|
|
hasDamageRadius = false;
|
|
indirectDamage = 0.0;
|
|
damageRadius = 0.0;
|
|
velInheritFactor = 1.0;
|
|
|
|
maxRifleRange = 1000;
|
|
beamColor = "0.1 1.0 1.0";
|
|
|
|
startBeamWidth = 0.20;
|
|
pulseBeamWidth = 0.15;
|
|
beamFlareAngle = 3.0;
|
|
minFlareSize = 0.0;
|
|
maxFlareSize = 400.0;
|
|
pulseSpeed = 6.0;
|
|
pulseLength = 0.150;
|
|
|
|
textureName[0] = "special/nonlingradient";
|
|
textureName[1] = "special/flare";
|
|
textureName[2] = "special/pulse";
|
|
textureName[3] = "special/expFlare";
|
|
beacon = true;
|
|
};
|
|
|
|
datablock LinearFlareProjectileData(TargeterShot)
|
|
{
|
|
scale = "0.1 0.1 0.1";
|
|
faceViewer = true;
|
|
directDamage = 0.0;
|
|
hasDamageRadius = true;
|
|
indirectDamage = 0.01;
|
|
damageRadius = 0.01;
|
|
radiusDamageType = $DamageType::Plasma;
|
|
kickBackStrength = 0;
|
|
|
|
explosion = "SniperExplosion";
|
|
splash = PlasmaSplash;
|
|
|
|
|
|
dryVelocity = 5095.0;
|
|
wetVelocity = -1;
|
|
velInheritFactor = 0.3;
|
|
fizzleTimeMS = 29000;
|
|
lifetimeMS = 30000;
|
|
explodeOnDeath = false;
|
|
reflectOnWaterImpactAngle = 0.0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = -1;
|
|
|
|
//activateDelayMS = 100;
|
|
activateDelayMS = -1;
|
|
|
|
size[0] = 0.2;
|
|
size[1] = 0.5;
|
|
size[2] = 0.1;
|
|
|
|
|
|
numFlares = 35;
|
|
flareColor = "0 0 0";
|
|
flareModTexture = "flaremod";
|
|
flareBaseTexture = "flarebase";
|
|
|
|
sound = PlasmaProjectileSound;
|
|
fireSound = PlasmaFireSound;
|
|
wetFireSound = PlasmaFireWetSound;
|
|
|
|
hasLight = false;
|
|
};
|
|
|
|
datablock LinearFlareProjectileData(NukeBolt)
|
|
{
|
|
scale = "70.0 70.0 70.0";
|
|
faceViewer = true;
|
|
directDamage = 0.0;
|
|
hasDamageRadius = true;
|
|
indirectDamage = 0.02;
|
|
damageRadius = 1000.0;
|
|
radiusDamageType = $DamageType::Plasma; //CHANGE BACK TO FIRE!!!
|
|
kickBackStrength = 55000;
|
|
|
|
explosion = "BottomExplosion";
|
|
splash = PlasmaSplash;
|
|
|
|
baseEmitter = CannonSmokeEmitter;
|
|
|
|
dryVelocity = 295.0;
|
|
wetVelocity = -1;
|
|
velInheritFactor = 0.3;
|
|
fizzleTimeMS = 29000;
|
|
lifetimeMS = 30000;
|
|
explodeOnDeath = false;
|
|
reflectOnWaterImpactAngle = 0.0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = -1;
|
|
|
|
//activateDelayMS = 100;
|
|
activateDelayMS = -1;
|
|
|
|
size[0] = 0.2;
|
|
size[1] = 0.5;
|
|
size[2] = 0.1;
|
|
|
|
|
|
numFlares = 350;
|
|
flareColor = "1 0.45 0.25";
|
|
flareModTexture = "flaremod";
|
|
flareBaseTexture = "flarebase";
|
|
|
|
sound = PlasmaProjectileSound;
|
|
fireSound = PlasmaFireSound;
|
|
wetFireSound = PlasmaFireWetSound;
|
|
|
|
hasLight = true;
|
|
lightRadius = 3.0;
|
|
lightColor = "1 0.75 0.25";
|
|
};
|
|
|
|
datablock LinearProjectileData(UpPart1)
|
|
{
|
|
projectileShapeName = "weapon_missile_projectile.dts";
|
|
directDamage = 0.2;
|
|
hasDamageRadius = true;
|
|
damageRadius = 350.0;
|
|
indirectDamage = 1.01;
|
|
kickBackStrength = 3000.0;
|
|
radiusDamageType = $DamageType::Fire;
|
|
|
|
explosion = "MidExplosion";
|
|
splash = PlasmaSplash;
|
|
|
|
dryVelocity = 300;
|
|
wetVelocity = 300;
|
|
velInheritFactor = 0;
|
|
fizzleTimeMS = 0;
|
|
lifetimeMS = 237;
|
|
explodeOnDeath = true;
|
|
reflectOnWaterImpactAngle = 0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = -1;
|
|
|
|
activateDelayMS = 200;
|
|
|
|
|
|
sound = NukeUpProjectileSound;
|
|
fireSound = PlasmaFireSound;
|
|
wetFireSound = PlasmaFireWetSound;
|
|
|
|
hasLight = true;
|
|
lightRadius = 3.0;
|
|
lightColor = "1 0.75 0.25";
|
|
};
|
|
|
|
datablock LinearProjectileData(UpPart2)
|
|
{
|
|
projectileShapeName = "weapon_missile_projectile.dts";
|
|
directDamage = 0.2;
|
|
hasDamageRadius = true;
|
|
damageRadius = 350.0;
|
|
indirectDamage = 1.1;
|
|
kickBackStrength = 3000.0;
|
|
radiusDamageType = $DamageType::Fire;
|
|
|
|
explosion = "MidExplosion";
|
|
splash = PlasmaSplash;
|
|
|
|
dryVelocity = 300;
|
|
wetVelocity = 300;
|
|
velInheritFactor = 0;
|
|
fizzleTimeMS = 0;
|
|
lifetimeMS = 237;
|
|
explodeOnDeath = true;
|
|
reflectOnWaterImpactAngle = 0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = -1;
|
|
|
|
activateDelayMS = 200;
|
|
|
|
sound = NukeUpProjectileSound;
|
|
|
|
hasLight = true;
|
|
lightRadius = 3.0;
|
|
lightColor = "1 0.75 0.25";
|
|
};
|
|
|
|
datablock LinearProjectileData(UpPart3)
|
|
{
|
|
projectileShapeName = "weapon_missile_projectile.dts";
|
|
directDamage = 0.2;
|
|
hasDamageRadius = true;
|
|
damageRadius = 350.0;
|
|
indirectDamage = 1.1;
|
|
kickBackStrength = 3000.0;
|
|
radiusDamageType = $DamageType::Fire;
|
|
|
|
explosion = "MidExplosion";
|
|
splash = PlasmaSplash;
|
|
|
|
dryVelocity = 300;
|
|
wetVelocity = 300;
|
|
velInheritFactor = 0;
|
|
fizzleTimeMS = 0;
|
|
lifetimeMS = 237;
|
|
explodeOnDeath = true;
|
|
reflectOnWaterImpactAngle = 0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = -1;
|
|
|
|
activateDelayMS = 200;
|
|
|
|
sound = NukeUpProjectileSound;
|
|
fireSound = PlasmaFireSound;
|
|
wetFireSound = PlasmaFireWetSound;
|
|
|
|
hasLight = true;
|
|
lightRadius = 3.0;
|
|
lightColor = "1 0.75 0.25";
|
|
};
|
|
|
|
datablock LinearProjectileData(UpPartRing)
|
|
{
|
|
projectileShapeName = "weapon_missile_projectile.dts";
|
|
directDamage = 0.2;
|
|
hasDamageRadius = true;
|
|
damageRadius = 450.0;
|
|
indirectDamage = 1.5;
|
|
kickBackStrength = 5000.0;
|
|
radiusDamageType = $DamageType::Fire;
|
|
|
|
explosion = "RingExplosion";
|
|
splash = PlasmaSplash;
|
|
|
|
dryVelocity = 300;
|
|
wetVelocity = 300;
|
|
velInheritFactor = 0;
|
|
fizzleTimeMS = 0;
|
|
lifetimeMS = 237;
|
|
explodeOnDeath = true;
|
|
reflectOnWaterImpactAngle = 0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = -1;
|
|
|
|
activateDelayMS = 200;
|
|
|
|
sound = PlasmaProjectileSound;
|
|
fireSound = PlasmaFireSound;
|
|
wetFireSound = PlasmaFireWetSound;
|
|
|
|
hasLight = true;
|
|
lightRadius = 3.0;
|
|
lightColor = "1 0.75 0.25";
|
|
};
|
|
datablock LinearProjectileData(UpPart4)
|
|
{
|
|
projectileShapeName = "weapon_missile_projectile.dts";
|
|
directDamage = 0.2;
|
|
hasDamageRadius = true;
|
|
damageRadius = 350.0;
|
|
indirectDamage = 1.1;
|
|
kickBackStrength = 3000.0;
|
|
radiusDamageType = $DamageType::Fire;
|
|
|
|
explosion = "MidExplosion";
|
|
splash = PlasmaSplash;
|
|
|
|
dryVelocity = 300;
|
|
wetVelocity = 300;
|
|
velInheritFactor = 0;
|
|
fizzleTimeMS = 0;
|
|
lifetimeMS = 237;
|
|
explodeOnDeath = true;
|
|
reflectOnWaterImpactAngle = 0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = -1;
|
|
|
|
activateDelayMS = 200;
|
|
|
|
sound = NukeUpProjectileSound;
|
|
fireSound = PlasmaFireSound;
|
|
wetFireSound = PlasmaFireWetSound;
|
|
|
|
hasLight = true;
|
|
lightRadius = 3.0;
|
|
lightColor = "1 0.75 0.25";
|
|
};
|
|
|
|
datablock LinearProjectileData(UpPart5)
|
|
{
|
|
projectileShapeName = "weapon_missile_projectile.dts";
|
|
directDamage = 0.2;
|
|
hasDamageRadius = true;
|
|
damageRadius = 350.0;
|
|
indirectDamage = 1.1;
|
|
kickBackStrength = 3000.0;
|
|
radiusDamageType = $DamageType::Fire;
|
|
|
|
explosion = "MidExplosion";
|
|
splash = PlasmaSplash;
|
|
|
|
dryVelocity = 300;
|
|
wetVelocity = 300;
|
|
velInheritFactor = 0;
|
|
fizzleTimeMS = 0;
|
|
lifetimeMS = 237;
|
|
explodeOnDeath = true;
|
|
reflectOnWaterImpactAngle = 0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = -1;
|
|
|
|
activateDelayMS = 200;
|
|
|
|
sound = NukeUpProjectileSound;
|
|
fireSound = PlasmaFireSound;
|
|
wetFireSound = PlasmaFireWetSound;
|
|
|
|
hasLight = true;
|
|
lightRadius = 3.0;
|
|
lightColor = "1 0.75 0.25";
|
|
};
|
|
|
|
datablock LinearProjectileData(UpPart6)
|
|
{
|
|
projectileShapeName = "weapon_missile_projectile.dts";
|
|
directDamage = 0.2;
|
|
hasDamageRadius = true;
|
|
damageRadius = 350.0;
|
|
indirectDamage = 1.1;
|
|
kickBackStrength = 3000.0;
|
|
radiusDamageType = $DamageType::Fire;
|
|
|
|
explosion = "MidExplosion";
|
|
splash = PlasmaSplash;
|
|
|
|
dryVelocity = 300;
|
|
wetVelocity = 300;
|
|
velInheritFactor = 0;
|
|
fizzleTimeMS = 0;
|
|
lifetimeMS = 237;
|
|
explodeOnDeath = true;
|
|
reflectOnWaterImpactAngle = 0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = -1;
|
|
|
|
activateDelayMS = 200;
|
|
|
|
sound = NukeUpProjectileSound;
|
|
fireSound = PlasmaFireSound;
|
|
wetFireSound = PlasmaFireWetSound;
|
|
|
|
hasLight = true;
|
|
lightRadius = 3.0;
|
|
lightColor = "1 0.75 0.25";
|
|
};
|
|
|
|
datablock LinearProjectileData(UpPart7)
|
|
{
|
|
projectileShapeName = "weapon_missile_projectile.dts";
|
|
directDamage = 0.2;
|
|
hasDamageRadius = true;
|
|
damageRadius = 350.0;
|
|
indirectDamage = 1.1;
|
|
kickBackStrength = 3000.0;
|
|
radiusDamageType = $DamageType::Fire;
|
|
|
|
explosion = "MidExplosion";
|
|
splash = PlasmaSplash;
|
|
|
|
dryVelocity = 300;
|
|
wetVelocity = 300;
|
|
velInheritFactor = 0;
|
|
fizzleTimeMS = 0;
|
|
lifetimeMS = 237;
|
|
explodeOnDeath = true;
|
|
reflectOnWaterImpactAngle = 0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = -1;
|
|
|
|
activateDelayMS = 200;
|
|
|
|
sound = NukeUpProjectileSound;
|
|
fireSound = PlasmaFireSound;
|
|
wetFireSound = PlasmaFireWetSound;
|
|
|
|
hasLight = true;
|
|
lightRadius = 3.0;
|
|
lightColor = "1 0.75 0.25";
|
|
};
|
|
|
|
datablock LinearProjectileData(UpPart8)
|
|
{
|
|
projectileShapeName = "weapon_missile_projectile.dts";
|
|
directDamage = 0.2;
|
|
hasDamageRadius = true;
|
|
damageRadius = 350.0;
|
|
indirectDamage = 1.1;
|
|
kickBackStrength = 3000.0;
|
|
radiusDamageType = $DamageType::Fire;
|
|
|
|
explosion = "MidExplosion";
|
|
splash = PlasmaSplash;
|
|
|
|
dryVelocity = 300;
|
|
wetVelocity = 300;
|
|
velInheritFactor = 0;
|
|
fizzleTimeMS = 0;
|
|
lifetimeMS = 237;
|
|
explodeOnDeath = true;
|
|
reflectOnWaterImpactAngle = 0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = -1;
|
|
|
|
activateDelayMS = 200;
|
|
|
|
sound = NukeUpProjectileSound;
|
|
fireSound = PlasmaFireSound;
|
|
wetFireSound = PlasmaFireWetSound;
|
|
|
|
hasLight = true;
|
|
lightRadius = 3.0;
|
|
lightColor = "1 0.75 0.25";
|
|
};
|
|
|
|
datablock LinearProjectileData(Top)
|
|
{
|
|
|
|
projectileShapeName = "weapon_missile_projectile.dts";
|
|
directDamage = 0.2;
|
|
hasDamageRadius = true;
|
|
damageRadius = 550.0;
|
|
indirectDamage = 1.1;
|
|
kickBackStrength = 9500.0;
|
|
radiusDamageType = $DamageType::Fire;
|
|
|
|
explosion = "TopExplosion";
|
|
splash = PlasmaSplash;
|
|
|
|
dryVelocity = 300;
|
|
wetVelocity = 300;
|
|
velInheritFactor = 0;
|
|
fizzleTimeMS = 0;
|
|
lifetimeMS = 313;
|
|
explodeOnDeath = true;
|
|
reflectOnWaterImpactAngle = 0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = -1;
|
|
|
|
activateDelayMS = 200;
|
|
|
|
|
|
sound = PlasmaProjectileSound;
|
|
fireSound = PlasmaFireSound;
|
|
wetFireSound = PlasmaFireWetSound;
|
|
|
|
hasLight = true;
|
|
lightRadius = 3.0;
|
|
lightColor = "1 0.75 0.25";
|
|
};
|
|
|
|
datablock GrenadeProjectileData(DebrisGrenade)
|
|
{
|
|
projectileShapeName = "grenade_projectile.dts";
|
|
scale = "0.1 0.1 0.1";
|
|
emitterDelay = -1;
|
|
directDamage = 0.0;
|
|
hasDamageRadius = true;
|
|
indirectDamage = 0.40;
|
|
damageRadius = 5.0;
|
|
radiusDamageType = $DamageType::Fire;
|
|
kickBackStrength = 1500;
|
|
bubbleEmitTime = 1.0;
|
|
|
|
sound = GrenadeProjectileSound;
|
|
explosion = "PlasmaBoltExplosion";
|
|
underwaterExplosion = "UnderwaterGrenadeExplosion";
|
|
velInheritFactor = 0.5;
|
|
splash = GrenadeSplash;
|
|
|
|
|
|
baseEmitter = MissileSmokeEmitter;
|
|
delayEmitter = MissileFireEmitter;
|
|
puffEmitter = MissilePuffEmitter;
|
|
bubbleEmitter = GrenadeBubbleEmitter;
|
|
bubbleEmitTime = 1.0;
|
|
|
|
exhaustEmitter = MissileLauncherExhaustEmitter;
|
|
exhaustTimeMs = 300;
|
|
exhaustNodeName = "muzzlePoint1";
|
|
|
|
grenadeElasticity = 0.35;
|
|
grenadeFriction = 0.2;
|
|
armingDelayMS = 1000;
|
|
muzzleVelocity = 47.00;
|
|
drag = 0.1;
|
|
};
|
|
|
|
datablock GrenadeProjectileData(FireDebrisGrenade)
|
|
{
|
|
projectileShapeName = "grenade_projectile.dts";
|
|
scale = "0.1 0.1 0.1";
|
|
emitterDelay = -1;
|
|
directDamage = 0.0;
|
|
hasDamageRadius = true;
|
|
indirectDamage = 0.20;
|
|
damageRadius = 2.0;
|
|
radiusDamageType = $DamageType::Fire;
|
|
kickBackStrength = 1500;
|
|
bubbleEmitTime = 1.0;
|
|
|
|
sound = GrenadeProjectileSound;
|
|
explosion = "PlasmaBoltExplosion";
|
|
underwaterExplosion = "UnderwaterGrenadeExplosion";
|
|
velInheritFactor = 0.5;
|
|
splash = GrenadeSplash;
|
|
|
|
|
|
baseEmitter = BurningAshEmitter;
|
|
|
|
grenadeElasticity = 0.35;
|
|
grenadeFriction = 0.1;
|
|
armingDelayMS = 1000;
|
|
muzzleVelocity = 107.00;
|
|
drag = 0.1;
|
|
};
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Ammo
|
|
//--------------------------------------
|
|
|
|
datablock ItemData(NukeAmmo)
|
|
{
|
|
className = Ammo;
|
|
catagory = "Ammo";
|
|
shapeFile = "ammo_mortar.dts";
|
|
mass = 1;
|
|
elasticity = 0.2;
|
|
friction = 0.6;
|
|
pickupRadius = 2;
|
|
pickUpName = "some Nuke ammo";
|
|
|
|
computeCRC = true;
|
|
|
|
};
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Weapon
|
|
//--------------------------------------
|
|
datablock ItemData(Nuke)
|
|
{
|
|
className = Weapon;
|
|
catagory = "Spawn Items";
|
|
shapeFile = "weapon_mortar.dts";
|
|
image = NukeImage;
|
|
mass = 1;
|
|
elasticity = 0.2;
|
|
friction = 0.6;
|
|
pickupRadius = 2;
|
|
pickUpName = "a Nuke";
|
|
|
|
computeCRC = true;
|
|
emap = true;
|
|
};
|
|
|
|
datablock ShapeBaseImageData(NukeImage)
|
|
{
|
|
className = WeaponImage;
|
|
shapeFile = "weapon_mortar.dts";
|
|
item = Nuke;
|
|
//ammo = NukeAmmo;
|
|
offset = "0 0 0";
|
|
emap = true;
|
|
UsesEnergy = true;
|
|
fireEnergy = 1;
|
|
minEnergy = 1;
|
|
|
|
projectile = TargeterShot;
|
|
projectileType = LinearFlareProjectile;
|
|
|
|
stateName[0] = "Activate";
|
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
|
stateTimeoutValue[0] = 0.5;
|
|
stateSequence[0] = "Activate";
|
|
stateSound[0] = NukeSwitchSound;
|
|
|
|
stateName[1] = "ActivateReady";
|
|
stateTransitionOnLoaded[1] = "Ready";
|
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
|
|
|
stateName[2] = "Ready";
|
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
|
stateTransitionOnTriggerDown[2] = "Fire";
|
|
//stateSound[2] = MortarIdleSound;
|
|
|
|
stateName[3] = "Fire";
|
|
stateSequence[3] = "Recoil";
|
|
stateTransitionOnTimeout[3] = "Reload";
|
|
stateTimeoutValue[3] = 0.8;
|
|
stateFire[3] = true;
|
|
stateRecoil[3] = LightRecoil;
|
|
stateAllowImageChange[3] = false;
|
|
stateScript[3] = "onFire";
|
|
stateSound[3] = NukeFireSound;
|
|
|
|
stateName[4] = "Reload";
|
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
|
stateTransitionOnTimeout[4] = "Ready";
|
|
stateTimeoutValue[4] = 2.0;
|
|
stateAllowImageChange[4] = false;
|
|
stateSequence[4] = "Reload";
|
|
stateSound[4] = NukeReloadSound;
|
|
|
|
stateName[5] = "NoAmmo";
|
|
stateTransitionOnAmmo[5] = "Reload";
|
|
stateSequence[5] = "NoAmmo";
|
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
|
|
|
stateName[6] = "DryFire";
|
|
stateSound[6] = MortarDryFireSound;
|
|
stateTimeoutValue[6] = 1.5;
|
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
|
};
|
|
|
|
function NukeBolt::onExplode(%data, %proj, %pos, %mod)
|
|
{
|
|
%start = getSimTime();
|
|
nukewind(VectorAdd(%pos,"0 0 50"),%start,6000);
|
|
|
|
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 = UpPart1;
|
|
initialDirection = "0 0 1";
|
|
initialPosition = %pos;
|
|
|
|
};
|
|
MissionCleanup.add(%p);
|
|
}
|
|
//raidusWhiteout(%pos, 2500.0, 0.75);
|
|
whiteout(%pos,1000,2500); //used my own. :P
|
|
Parent::onExplode(%data, %proj, %pos, %mod);
|
|
|
|
|
|
}
|
|
|
|
function UpPart1::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 = UpPart2;
|
|
initialDirection = "0 0 1";
|
|
initialPosition = %pos;
|
|
|
|
};
|
|
MissionCleanup.add(%p);
|
|
}
|
|
}
|
|
|
|
function UpPart2::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 = UpPart3;
|
|
initialDirection = "0 0 1";
|
|
initialPosition = %pos;
|
|
|
|
};
|
|
MissionCleanup.add(%p);
|
|
}
|
|
}
|
|
|
|
function UpPart3::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 = UpPartRing;
|
|
initialDirection = "0 0 1";
|
|
initialPosition = %pos;
|
|
|
|
};
|
|
MissionCleanup.add(%p);
|
|
}
|
|
}
|
|
|
|
function UpPartRing::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 = UpPart4;
|
|
initialDirection = "0 0 1";
|
|
initialPosition = %pos;
|
|
|
|
};
|
|
MissionCleanup.add(%p);
|
|
}
|
|
|
|
}
|
|
function UpPart4::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 = UpPart5;
|
|
initialDirection = "0 0 1";
|
|
initialPosition = %pos;
|
|
|
|
};
|
|
MissionCleanup.add(%p);
|
|
}
|
|
}
|
|
|
|
function UpPart5::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 = UpPart6;
|
|
initialDirection = "0 0 1";
|
|
initialPosition = %pos;
|
|
|
|
};
|
|
MissionCleanup.add(%p);
|
|
}
|
|
}
|
|
|
|
function UpPart6::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 = UpPart7;
|
|
initialDirection = "0 0 1";
|
|
initialPosition = %pos;
|
|
|
|
};
|
|
MissionCleanup.add(%p);
|
|
}
|
|
}
|
|
|
|
function UpPart7::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 = Top;
|
|
initialDirection = "0 0 1";
|
|
initialPosition = %pos;
|
|
|
|
};
|
|
MissionCleanup.add(%p);
|
|
}
|
|
}
|
|
|
|
function Top::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<75;%i++)
|
|
{
|
|
%x = (getRandom() * 2) - 1; //-1 to 1, ie: full circle
|
|
%y = (getRandom() * 2) - 1;
|
|
%z = (getRandom() * 2) - 1;
|
|
%vec = %x SPC %y SPC %z; //Shoot any direction
|
|
%p = new GrenadeProjectile() {
|
|
dataBlock = DebrisGrenade;
|
|
initialDirection = %vec;
|
|
initialPosition = %pos;
|
|
|
|
};
|
|
MissionCleanup.add(%p);
|
|
}
|
|
if (%data.hasDamageRadius)
|
|
RadiusExplosion(%proj, %pos, %data.damageRadius, %data.indirectDamage, %data.kickBackStrength, %proj.sourceObject, %data.radiusDamageType);
|
|
for(%i=0;%i<0;%i++)
|
|
{
|
|
%x = (getRandom() * 2) - 1; //-1 to 1, ie: full circle
|
|
%y = (getRandom() * 2) - 1;
|
|
%z = (getRandom() * 2) - 1;
|
|
%vec = %x SPC %y SPC %z; //Shoot any direction
|
|
%p = new GrenadeProjectile() {
|
|
dataBlock = FireDebrisGrenade;
|
|
initialDirection = %vec;
|
|
initialPosition = %pos;
|
|
|
|
};
|
|
MissionCleanup.add(%p);
|
|
}
|
|
|
|
%Ash = new Precipitation() {
|
|
position = "0 0 0";
|
|
rotation = "1 0 0 0";
|
|
scale = "1 1 1";
|
|
dataBlock = "Snow";
|
|
percentage = "1";
|
|
color1 = "0.3 0.3 0.3 1";
|
|
color2 = "0.3 0.3 0.3 1";
|
|
color3 = "0.3 0.3 0.3 1";
|
|
offsetSpeed = "0.25";
|
|
minVelocity = "0.25";
|
|
maxVelocity = "1.5";
|
|
maxNumDrops = "2000";
|
|
maxRadius = "125";
|
|
locked = "true";
|
|
};
|
|
|
|
MissionCleanup.add(%Ash);
|
|
|
|
%Ash.schedule(20000, "delete");
|
|
|
|
|
|
}
|
|
|
|
function CmndMessageAll(%mes)
|
|
{
|
|
messageAll('ALLMsg', %mes);
|
|
}
|
|
|
|
function NukeImage::onFire(%data, %obj, %slot)
|
|
{
|
|
%vector = %obj.getMuzzleVector(%slot);
|
|
%x = (getRandom() - 0.0) * 1 * 1 * %data.projectileSpread;
|
|
%y = (getRandom() - 0.0) * 1 * 1 * %data.projectileSpread;
|
|
%z = (getRandom() - 0.0) * 1 * 1 * %data.projectileSpread;
|
|
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
|
%vector = MatrixMulVector(%mat, %vector);
|
|
|
|
%p = new (%data.projectileType)() {
|
|
dataBlock = %data.projectile;
|
|
initialDirection = %vector;
|
|
initialPosition = %obj.getMuzzlePoint(%slot);
|
|
sourceObject = %obj;
|
|
sourceSlot = %slot;
|
|
};
|
|
MissionCleanup.add(%p);
|
|
%obj.lastProjectile = %p;
|
|
%client.projectile = %p;
|
|
|
|
|
|
}
|
|
|
|
function NukeImage::onMount(%data, %obj, %node)
|
|
{
|
|
Parent::onMount(%data, %obj, %node);
|
|
%p = new TargetProjectile(){
|
|
dataBlock = NukeTargeterBeam;
|
|
initialDirection = %obj.getMuzzleVector(%slot);
|
|
initialPosition = %obj.getMuzzlePoint(%slot);
|
|
sourceObject = %obj;
|
|
sourceSlot = %slot;
|
|
vehicleObject = %vehicle;
|
|
};
|
|
MissionCleanup.add(%p);
|
|
%p.setTarget(%obj.team);
|
|
%obj.NukeTargBeam = %p;
|
|
|
|
Parent::onMount(%this, %obj, %slot);
|
|
commandToClient( %obj.client, 'BottomPrint', "<spush><font:Tempus Sans ITC:22><color:ff3300>Project Uber: Planetary Cannon Edition<spop>", 5, 2);
|
|
}
|
|
|
|
function NukeImage::onUnmount(%data, %obj, %node)
|
|
{
|
|
if(isObject(%obj.NukeTargBeam))
|
|
%obj.NukeTargBeam.delete();
|
|
Parent::onUnmount(%data, %obj, %node);
|
|
}
|
|
//thanks to The_Force for these 2 functions
|
|
function BigFatNukeTarget(%pos)
|
|
{
|
|
echo("nuke target position: " @ %pos);
|
|
%mainUpPos = vectoradd(%pos, "0 0 1000");// 1000m up
|
|
|
|
%lasePos1 = vectoradd(%mainUpPos, "1000 0 0");
|
|
%laseVec1 = VectorAdd(%pos, VectorScale(%lasePos1, -1));
|
|
//%laseVec1 = VectorNormalize(%laseVec1);
|
|
%laser1 = new TargetProjectile()
|
|
{
|
|
dataBlock = RedTargeterBeam;
|
|
initialDirection = %laseVec1;
|
|
initialPosition = %lasePos1;
|
|
};
|
|
MissionCleanup.add(%laser1);
|
|
|
|
%lasePos2 = vectoradd(%mainUpPos, "-1000 0 0");
|
|
%laseVec2 = VectorAdd(%pos, VectorScale(%lasePos2, -1));
|
|
//%laseVec2 = VectorNormalize(%lasePos2);
|
|
%laser2 = new TargetProjectile()
|
|
{
|
|
dataBlock = RedTargeterBeam;
|
|
initialDirection = %laseVec2;
|
|
initialPosition = %lasePos2;
|
|
};
|
|
MissionCleanup.add(%laser2);
|
|
|
|
%lasePos3 = vectoradd(%mainUpPos, "0 1000 0");
|
|
%laseVec3 = VectorAdd(%pos, VectorScale(%lasePos3, -1));
|
|
//%laseVec3 = VectorNormalize(%laseVec3);
|
|
%laser3 = new TargetProjectile()
|
|
{
|
|
dataBlock = RedTargeterBeam;
|
|
initialDirection = %laseVec3;
|
|
initialPosition = %lasePos3;
|
|
};
|
|
MissionCleanup.add(%laser3);
|
|
|
|
%lasePos4 = vectoradd(%mainUpPos, "0 -1000 0");
|
|
%laseVec4 = VectorAdd(%pos, VectorScale(%lasePos4, -1));
|
|
//%laseVec4 = VectorNormalize(%laseVec4);
|
|
%laser4 = new TargetProjectile()
|
|
{
|
|
dataBlock = RedTargeterBeam;
|
|
initialDirection = %laseVec4;
|
|
initialPosition = %lasePos4;
|
|
};
|
|
MissionCleanup.add(%laser4);
|
|
|
|
%client = %obj.sourceObject.client;
|
|
messageAll("", "\c2A Planetary Cannon has been targeted!");
|
|
messageAll("", "\c2Planetary Cannon fires in 1:00 min.~wfx/misc/red_alert.wav");
|
|
|
|
schedule(30000,0, "CmndMessageAll", '\c2Planetary Cannon fires in 30 seconds.~wfx/misc/hunters_30.wav');
|
|
schedule(50000,0, "CmndMessageAll", '\c2Planetary Cannon fires in 10 seconds.~wfx/misc/hunters_10.wav');
|
|
schedule(55000,0, "CmndMessageAll", '\c2Planetary Cannon fires in 5 seconds.~wfx/misc/hunters_5.wav');
|
|
schedule(56000,0, "CmndMessageAll", '\c2Planetary Cannon fires in 4 seconds.~wfx/misc/hunters_4.wav');
|
|
schedule(57000,0, "CmndMessageAll", '\c2Planetary Cannon fires in 3 seconds.~wfx/misc/hunters_3.wav');
|
|
schedule(58000,0, "CmndMessageAll", '\c2Planetary Cannon fires in 2 seconds.~wfx/misc/hunters_2.wav');
|
|
schedule(59000,0, "CmndMessageAll", '\c2Planetary Cannon fires in 1 second.~wfx/misc/hunters_1.wav');
|
|
schedule(60000,0, "CmndMessageAll", '\c2The Planetary Cannon has fired!');
|
|
|
|
%laser1.schedule(61.5 * 1000, "delete");// Delete all the lasers after 1 min, 5 sec.
|
|
%laser2.schedule(61.5 * 1000, "delete");
|
|
%laser3.schedule(61.5 * 1000, "delete");
|
|
%laser4.schedule(61.5 * 1000, "delete");
|
|
|
|
schedule(60 * 1000, 0, BigFatNukeDrop, %mainUpPos);
|
|
}
|
|
|
|
function BigFatNukeDrop(%pos)
|
|
{
|
|
|
|
echo("nuke target position: " @ %pos);
|
|
%mainUpPos = vectoradd(%pos, "0 0 1000");// 1000m up
|
|
|
|
%BigFatNuke = new LinearFlareProjectile()
|
|
{
|
|
dataBlock = NukeBolt;
|
|
initialPosition = %mainUpPos;
|
|
initialDirection = "0 0 -1";
|
|
};
|
|
MissionCleanup.add(%BigFatNuke);
|
|
|
|
%alertPos = VectorAdd(%pos, "0 0 1000");// Meters from the target pos.
|
|
%nukeAlert = new WayPoint()
|
|
{
|
|
position = %alertPos;
|
|
rotation = "1 0 0 0";
|
|
scale = "1 1 1";
|
|
name = "Incoming Cannon Blast";
|
|
dataBlock = "WayPointMarker";
|
|
lockCount = "0";
|
|
homingCount = "0";
|
|
};
|
|
MissionCleanup.add(%nukeAlert);
|
|
|
|
%nukeAlert.schedule(5 * 1000, "delete"); // Delte the warning way point after 5 seconds.
|
|
centerPrintAll("Incoming Planetary Cannon Blast! Get your ass under cover!", 4, 2);
|
|
messageAll('',"~wfx/misc/red_alert.wav");// Alarm Sound
|
|
}
|
|
|
|
function TargeterShot::onExplode(%data, %proj, %pos, %mod)
|
|
{
|
|
BigFatNukeTarget(%pos);
|
|
}
|
|
|
|
function GameConnection::Givepce(%cl)
|
|
{
|
|
%cl.player.MountImage(NukeImage,0);
|
|
}
|
|
|
|
|
|
|
|
function nukewind(%pos,%start,%maxrad,%lastar)
|
|
{
|
|
|
|
%rad = nukerad(%start);
|
|
|
|
nukewindset(%pos, %rad,%lastar);
|
|
%lastar = %rad;
|
|
if (%rad < %maxrad)
|
|
schedule(500,0,"nukewind",%pos,%start,%maxrad,%lastar);
|
|
}
|
|
|
|
function nukewindset(%pos, %area,%lastar)
|
|
{
|
|
if (%area > 2000)
|
|
%area = 2000;
|
|
|
|
InitContainerRadiusSearch(%pos, %area, $TypeMasks::VehicleObjectType | $TypeMasks::PlayerObjectType |$TypeMasks::StaticShapeObjectType| $TypeMasks::ItemObjectType | $TypeMasks::CorpseObjectType); // );
|
|
|
|
%numTargets = 0;
|
|
while ((%targetObject = containerSearchNext()) != 0)
|
|
{
|
|
%dist = containerSearchCurrRadDamageDist();
|
|
|
|
if (%dist > %area)
|
|
continue;
|
|
|
|
%targets[%numTargets] = %targetObject;
|
|
%targetDists[%numTargets] = %dist;
|
|
%numTargets++;
|
|
}
|
|
|
|
for (%i = 0; %i < %numTargets; %i++)
|
|
{
|
|
%targetObject = %targets[%i];
|
|
%dist = %targetDists[%i];
|
|
%distPct = %dist / %area;
|
|
|
|
%coverage = calcExplosionCoverage(%pos, %targetObject,
|
|
($TypeMasks::InteriorObjectType |
|
|
$TypeMasks::TerrainObjectType |
|
|
$TypeMasks::ForceFieldObjectType));
|
|
if (%coverage == 0)
|
|
continue;
|
|
|
|
if (%area < 500)
|
|
%power = %area;
|
|
else
|
|
%power = Limit(500 - %area,0,200);
|
|
|
|
if (%dist > %lastar) //Shockwave
|
|
{
|
|
%force = (%power/100)*%targetobject.getDatablock().mass;
|
|
%damage = Limit(100/%dist,0,100);
|
|
%upvec = "0 0 1";
|
|
}
|
|
else
|
|
{
|
|
%force = 0;
|
|
%damage = Limit(5/%dist,0,100);
|
|
%upvec = "";
|
|
}
|
|
|
|
%tgtPos = %targetObject.getWorldBoxCenter();
|
|
%vec = VectorNormalize(VectorAdd(vectorNeg(vectorNormalize(vectorSub(%pos, %tgtPos))),%upvec));
|
|
%nForce = %force * %distPct * 10;
|
|
%forceVector = vectorScale(%vec, %nForce);
|
|
|
|
if(!%targetObject.inertialDampener && !%targetObject.getDatablock().forceSensitive)
|
|
%targetObject.applyImpulse(pos( %targetObject), %forceVector);
|
|
if (%damage>0.01)
|
|
%targetObject.getDataBlock().damageObject( %targetObject, 0,pos( %targetObject),%damage,$DamageType::Explosion);
|
|
}
|
|
}
|
|
|
|
|
|
function nukerad(%start)
|
|
{
|
|
%seconds = (GetSimTime()-%start)/1000;
|
|
%rad = %seconds * 200 + Mpow(%seconds,2)*1;
|
|
return %rad;
|
|
}
|