//-------------------------------------- // Mortar //-------------------------------------- //-------------------------------------------------------------------------- // Force-Feedback Effects //-------------------------------------- datablock EffectProfile(MortarSwitchEffect) { effectname = "weapons/mortar_activate"; minDistance = 2.5; }; datablock EffectProfile(MortarFireEffect) { effectname = "weapons/mortar_fire"; minDistance = 5.0; }; datablock EffectProfile(MortarReloadEffect) { effectname = "weapons/mortar_reload"; minDistance = 2.5; }; datablock EffectProfile(MortarDryFireEffect) { effectname = "weapons/mortar_dryfire"; minDistance = 2.5; }; datablock EffectProfile(MortarExplosionEffect) { effectname = "explosions/explosion.xpl03"; minDistance = 30; maxDistance = 65; }; //-------------------------------------------------------------------------- // Sounds //-------------------------------------- datablock AudioProfile(MortarSwitchSound) { filename = "fx/weapons/mortar_activate.wav"; description = AudioClosest3d; preload = true; effect = MortarSwitchEffect; }; datablock AudioProfile(MortarReloadSound) { filename = "fx/weapons/mortar_reload.wav"; description = AudioClosest3d; preload = true; effect = MortarReloadEffect; }; // DELETE IF NOT NEEDED //datablock AudioProfile(MortarIdleSound) //{ // filename = "fx/weapons/weapon.mortarIdle.wav"; // description = ClosestLooping3d; // preload = true; //}; datablock AudioProfile(MortarFireSound) { filename = "fx/weapons/mortar_fire.wav"; description = AudioDefault3d; preload = true; effect = MortarFireEffect; }; datablock AudioProfile(MortarProjectileSound) { filename = "fx/weapons/mortar_projectile.wav"; description = ProjectileLooping3d; preload = true; }; datablock AudioProfile(MortarExplosionSound) { filename = "fx/weapons/mortar_explode.wav"; description = AudioBIGExplosion3d; preload = true; effect = MortarExplosionEffect; }; datablock AudioProfile(UnderwaterMortarExplosionSound) { filename = "fx/weapons/mortar_explode_UW.wav"; description = AudioBIGExplosion3d; preload = true; effect = MortarExplosionEffect; }; datablock AudioProfile(MortarDryFireSound) { filename = "fx/weapons/mortar_dryfire.wav"; description = AudioClose3d; preload = true; effect = MortarDryFireEffect; }; //---------------------------------------------------------------------------- // Bubbles //---------------------------------------------------------------------------- datablock ParticleData(MortarBubbleParticle) { dragCoefficient = 0.0; gravityCoefficient = -0.25; inheritedVelFactor = 0.0; constantAcceleration = 0.0; lifetimeMS = 1500; lifetimeVarianceMS = 600; useInvAlpha = false; textureName = "special/bubbles"; spinRandomMin = -100.0; spinRandomMax = 100.0; colors[0] = "0.7 0.8 1.0 0.4"; colors[1] = "0.7 0.8 1.0 0.4"; colors[2] = "0.7 0.8 1.0 0.0"; sizes[0] = 0.8; sizes[1] = 0.8; sizes[2] = 0.8; times[0] = 0.0; times[1] = 0.5; times[2] = 1.0; }; datablock ParticleEmitterData(MortarBubbleEmitter) { ejectionPeriodMS = 9; periodVarianceMS = 0; ejectionVelocity = 1.0; ejectionOffset = 0.1; velocityVariance = 0.5; thetaMin = 0; thetaMax = 80; phiReferenceVel = 0; phiVariance = 360; overrideAdvances = false; particles = "MortarBubbleParticle"; }; //-------------------------------------------------------------------------- // Splash //-------------------------------------------------------------------------- datablock ParticleData( MortarSplashParticle ) { dragCoefficient = 1; gravityCoefficient = 0.0; inheritedVelFactor = 0.2; constantAcceleration = -1.4; lifetimeMS = 300; lifetimeVarianceMS = 0; textureName = "special/droplet"; 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] = 0.05; sizes[1] = 0.2; sizes[2] = 0.2; times[0] = 0.0; times[1] = 0.5; times[2] = 1.0; }; datablock ParticleEmitterData( MortarSplashEmitter ) { ejectionPeriodMS = 4; periodVarianceMS = 0; ejectionVelocity = 3; velocityVariance = 1.0; ejectionOffset = 0.0; thetaMin = 0; thetaMax = 50; phiReferenceVel = 0; phiVariance = 360; overrideAdvances = false; orientParticles = true; lifetimeMS = 100; particles = "MortarSplashParticle"; }; datablock SplashData(MortarSplash) { numSegments = 10; ejectionFreq = 10; ejectionAngle = 20; ringLifetime = 0.4; lifetimeMS = 400; velocity = 3.0; startRadius = 0.0; acceleration = -3.0; texWrap = 5.0; texture = "special/water2"; emitter[0] = MortarSplashEmitter; colors[0] = "0.7 0.8 1.0 0.0"; colors[1] = "0.7 0.8 1.0 1.0"; colors[2] = "0.7 0.8 1.0 0.0"; colors[3] = "0.7 0.8 1.0 0.0"; times[0] = 0.0; times[1] = 0.4; times[2] = 0.8; times[3] = 1.0; }; //--------------------------------------------------------------------------- // Mortar Shockwaves //--------------------------------------------------------------------------- datablock ShockwaveData(UnderwaterMortarShockwave) { width = 6.0; numSegments = 32; numVertSegments = 6; velocity = 10; acceleration = 20.0; lifetimeMS = 900; height = 1.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.4 0.4 1.0 0.50"; colors[1] = "0.4 0.4 1.0 0.25"; colors[2] = "0.4 0.4 1.0 0.0"; mapToTerrain = true; orientToNormal = false; renderBottom = false; }; datablock ShockwaveData(MortarShockwave) { width = 6.0; numSegments = 32; numVertSegments = 6; velocity = 15; acceleration = 20.0; lifetimeMS = 500; height = 1.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.4 1.0 0.4 0.50"; colors[1] = "0.4 1.0 0.4 0.25"; colors[2] = "0.4 1.0 0.4 0.0"; mapToTerrain = true; orientToNormal = false; renderBottom = false; }; //-------------------------------------------------------------------------- // Mortar Explosion Particle effects //-------------------------------------- datablock ParticleData( MortarCrescentParticle ) { dragCoefficient = 2; gravityCoefficient = 0.0; inheritedVelFactor = 0.2; constantAcceleration = -0.0; lifetimeMS = 600; lifetimeVarianceMS = 000; textureName = "special/crescent3"; colors[0] = "0.7 1.0 0.7 1.0"; colors[1] = "0.7 1.0 0.7 0.5"; colors[2] = "0.7 1.0 0.7 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( MortarCrescentEmitter ) { 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 = 200; particles = "MortarCrescentParticle"; }; datablock ParticleData(MortarExplosionSmoke) { dragCoeffiecient = 0.4; gravityCoefficient = -0.30; // rises slowly inheritedVelFactor = 0.025; lifetimeMS = 1250; lifetimeVarianceMS = 500; textureName = "particleTest"; useInvAlpha = true; spinRandomMin = -100.0; spinRandomMax = 100.0; textureName = "special/Smoke/bigSmoke"; colors[0] = "0.7 0.7 0.7 0.0"; colors[1] = "0.4 0.4 0.4 0.5"; colors[2] = "0.4 0.4 0.4 0.5"; colors[3] = "0.4 0.4 0.4 0.0"; sizes[0] = 5.0; sizes[1] = 6.0; sizes[2] = 10.0; sizes[3] = 12.0; times[0] = 0.0; times[1] = 0.333; times[2] = 0.666; times[3] = 1.0; }; datablock ParticleEmitterData(MortarExplosionSmokeEmitter) { ejectionPeriodMS = 10; periodVarianceMS = 0; ejectionOffset = 8.0; ejectionVelocity = 1.25; velocityVariance = 1.2; thetaMin = 0.0; thetaMax = 90.0; lifetimeMS = 500; particles = "MortarExplosionSmoke"; }; //--------------------------------------------------------------------------- // Underwater Explosion //--------------------------------------------------------------------------- datablock ParticleData(UnderwaterExplosionSparks) { dragCoefficient = 0; gravityCoefficient = 0.0; inheritedVelFactor = 0.2; constantAcceleration = 0.0; lifetimeMS = 500; lifetimeVarianceMS = 350; textureName = "special/crescent3"; colors[0] = "0.4 0.4 1.0 1.0"; colors[1] = "0.4 0.4 1.0 1.0"; colors[2] = "0.4 0.4 1.0 0.0"; sizes[0] = 3.5; sizes[1] = 3.5; sizes[2] = 3.5; times[0] = 0.0; times[1] = 0.5; times[2] = 1.0; }; datablock ParticleEmitterData(UnderwaterExplosionSparksEmitter) { ejectionPeriodMS = 2; periodVarianceMS = 0; ejectionVelocity = 17; velocityVariance = 4; ejectionOffset = 0.0; thetaMin = 0; thetaMax = 60; phiReferenceVel = 0; phiVariance = 360; overrideAdvances = false; orientParticles = true; lifetimeMS = 100; particles = "UnderwaterExplosionSparks"; }; datablock ParticleData(MortarExplosionBubbleParticle) { dragCoefficient = 0.0; gravityCoefficient = -0.25; inheritedVelFactor = 0.0; constantAcceleration = 0.0; lifetimeMS = 1500; lifetimeVarianceMS = 600; useInvAlpha = false; textureName = "special/bubbles"; spinRandomMin = -100.0; spinRandomMax = 100.0; colors[0] = "0.7 0.8 1.0 0.0"; colors[1] = "0.7 0.8 1.0 0.4"; colors[2] = "0.7 0.8 1.0 0.0"; sizes[0] = 2.0; sizes[1] = 2.0; sizes[2] = 2.0; times[0] = 0.0; times[1] = 0.8; times[2] = 1.0; }; datablock ParticleEmitterData(MortarExplosionBubbleEmitter) { ejectionPeriodMS = 5; periodVarianceMS = 0; ejectionVelocity = 1.0; ejectionOffset = 7.0; velocityVariance = 0.5; thetaMin = 0; thetaMax = 80; phiReferenceVel = 0; phiVariance = 360; overrideAdvances = false; particles = "MortarExplosionBubbleParticle"; }; datablock DebrisData( UnderwaterMortarDebris ) { emitters[0] = MortarExplosionBubbleEmitter; explodeOnMaxBounce = true; elasticity = 0.4; friction = 0.2; lifetime = 1.5; lifetimeVariance = 0.2; numBounces = 1; }; datablock ExplosionData(UnderwaterMortarSubExplosion1) { explosionShape = "disc_explosion.dts"; faceViewer = true; delayMS = 100; offset = 3.0; playSpeed = 1.5; sizes[0] = "0.75 0.75 0.75"; sizes[1] = "1.0 1.0 1.0"; sizes[2] = "0.5 0.5 0.5"; times[0] = 0.0; times[1] = 0.5; times[2] = 1.0; }; datablock ExplosionData(UnderwaterMortarSubExplosion2) { explosionShape = "disc_explosion.dts"; faceViewer = true; delayMS = 50; offset = 3.0; playSpeed = 0.75; sizes[0] = "1.5 1.5 1.5"; sizes[1] = "1.5 1.5 1.5"; sizes[2] = "1.0 1.0 1.0"; times[0] = 0.0; times[1] = 0.5; times[2] = 1.0; }; datablock ExplosionData(UnderwaterMortarSubExplosion3) { explosionShape = "disc_explosion.dts"; faceViewer = true; delayMS = 0; offset = 0.0; playSpeed = 0.5; sizes[0] = "1.0 1.0 1.0"; sizes[1] = "2.0 2.0 2.0"; sizes[2] = "1.5 1.5 1.5"; times[0] = 0.0; times[1] = 0.5; times[2] = 1.0; }; datablock ExplosionData(UnderwaterMortarExplosion) { soundProfile = UnderwaterMortarExplosionSound; shockwave = UnderwaterMortarShockwave; shockwaveOnTerrain = true; subExplosion[0] = UnderwaterMortarSubExplosion1; subExplosion[1] = UnderwaterMortarSubExplosion2; subExplosion[2] = UnderwaterMortarSubExplosion3; emitter[0] = MortarExplosionBubbleEmitter; emitter[1] = UnderwaterExplosionSparksEmitter; shakeCamera = true; camShakeFreq = "8.0 9.0 7.0"; camShakeAmp = "100.0 100.0 100.0"; camShakeDuration = 1.3; camShakeRadius = 25.0; }; //--------------------------------------------------------------------------- // Explosion //--------------------------------------------------------------------------- datablock ExplosionData(MortarSubExplosion1) { explosionShape = "mortar_explosion.dts"; faceViewer = true; delayMS = 100; offset = 5.0; playSpeed = 1.5; sizes[0] = "0.5 0.5 0.5"; sizes[1] = "0.5 0.5 0.5"; times[0] = 0.0; times[1] = 1.0; }; datablock ExplosionData(MortarSubExplosion2) { explosionShape = "mortar_explosion.dts"; faceViewer = true; delayMS = 50; offset = 5.0; playSpeed = 1.0; sizes[0] = "1.0 1.0 1.0"; sizes[1] = "1.0 1.0 1.0"; times[0] = 0.0; times[1] = 1.0; }; datablock ExplosionData(MortarSubExplosion3) { explosionShape = "mortar_explosion.dts"; faceViewer = true; delayMS = 0; offset = 0.0; playSpeed = 0.7; sizes[0] = "1.0 1.0 1.0"; sizes[1] = "2.0 2.0 2.0"; times[0] = 0.0; times[1] = 1.0; }; datablock ExplosionData(MortarExplosion) { soundProfile = MortarExplosionSound; shockwave = MortarShockwave; shockwaveOnTerrain = true; subExplosion[0] = MortarSubExplosion1; subExplosion[1] = MortarSubExplosion2; subExplosion[2] = MortarSubExplosion3; emitter[0] = MortarExplosionSmokeEmitter; emitter[1] = MortarCrescentEmitter; shakeCamera = true; camShakeFreq = "8.0 9.0 7.0"; camShakeAmp = "100.0 100.0 100.0"; camShakeDuration = 1.3; camShakeRadius = 25.0; }; //--------------------------------------------------------------------------- // Smoke particles //--------------------------------------------------------------------------- datablock ParticleData(MortarSmokeParticle) { dragCoeffiecient = 0.4; gravityCoefficient = -0.3; // rises slowly inheritedVelFactor = 0.125; lifetimeMS = 1200; lifetimeVarianceMS = 200; useInvAlpha = true; spinRandomMin = -100.0; spinRandomMax = 100.0; animateTexture = false; textureName = "special/Smoke/bigSmoke"; colors[0] = "0.7 1.0 0.7 0.5"; colors[1] = "0.3 0.7 0.3 0.8"; colors[2] = "0.0 0.0 0.0 0.0"; sizes[0] = 1.0; sizes[1] = 2.0; sizes[2] = 4.5; times[0] = 0.0; times[1] = 0.5; times[2] = 1.0; }; datablock ParticleEmitterData(MortarSmokeEmitter) { ejectionPeriodMS = 10; periodVarianceMS = 3; ejectionVelocity = 2.25; velocityVariance = 0.55; thetaMin = 0.0; thetaMax = 40.0; particles = "MortarSmokeParticle"; }; //-------------------------------------------------------------------------- // Projectile //-------------------------------------- datablock GrenadeProjectileData(MortarShot) { projectileShapeName = "mortar_projectile.dts"; emitterDelay = -1; directDamage = 0.0; hasDamageRadius = true; indirectDamage = 1.0; damageRadius = 20.0; radiusDamageType = $DamageType::Mortar; kickBackStrength = 2500; explosion = "MortarExplosion"; underwaterExplosion = "UnderwaterMortarExplosion"; velInheritFactor = 0.5; splash = MortarSplash; depthTolerance = 10.0; // depth at which it uses underwater explosion baseEmitter = MortarSmokeEmitter; bubbleEmitter = MortarBubbleEmitter; grenadeElasticity = 0.15; grenadeFriction = 0.4; armingDelayMS = 2000; muzzleVelocity = 63.7; drag = 0.1; sound = MortarProjectileSound; hasLight = true; lightRadius = 4; lightColor = "0.05 0.2 0.05"; hasLightUnderwaterColor = true; underWaterLightColor = "0.05 0.075 0.2"; }; //-------------------------------------------------------------------------- // Ammo //-------------------------------------- datablock ItemData(MortarAmmo) { className = Ammo; catagory = "Ammo"; shapeFile = "ammo_mortar.dts"; mass = 1; elasticity = 0.2; friction = 0.6; pickupRadius = 2; pickUpName = "some mortar ammo"; computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- datablock ItemData(Mortar) { className = Weapon; catagory = "Spawn Items"; shapeFile = "weapon_mortar.dts"; image = MortarImage; mass = 1; elasticity = 0.2; friction = 0.6; pickupRadius = 2; pickUpName = "a mortar gun"; computeCRC = true; emap = true; }; datablock ShapeBaseImageData(MortarImage) { className = WeaponImage; shapeFile = "weapon_mortar.dts"; item = Mortar; ammo = MortarAmmo; offset = "0 0 0"; emap = true; projectile = MortarShot; projectileType = GrenadeProjectile; stateName[0] = "Activate"; stateTransitionOnTimeout[0] = "ActivateReady"; stateTimeoutValue[0] = 0.5; stateSequence[0] = "Activate"; stateSound[0] = MortarSwitchSound; 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] = MortarFireSound; stateName[4] = "Reload"; stateTransitionOnNoAmmo[4] = "NoAmmo"; stateTransitionOnTimeout[4] = "Ready"; stateTimeoutValue[4] = 2.0; stateAllowImageChange[4] = false; stateSequence[4] = "Reload"; stateSound[4] = MortarReloadSound; 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"; };