//----------------------------------------------------------------------------- // Copyright (c) 2012 GarageGames, LLC // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // IN THE SOFTWARE. //----------------------------------------------------------------------------- datablock SFXProfile(cheetahEngine) { preload = "1"; description = "AudioCloseLoop3D"; fileName = "data/FPSGameplay/sound/cheetah/cheetah_engine.ogg"; }; datablock SFXProfile(cheetahSqueal) { preload = "1"; description = "AudioDefault3D"; fileName = "data/FPSGameplay/sound/cheetah/cheetah_squeal.ogg"; }; datablock SFXProfile(hardImpact) { preload = "1"; description = "AudioDefault3D"; fileName = "data/FPSGameplay/sound/cheetah/hardImpact.ogg"; }; datablock SFXProfile(softImpact) { preload = "1"; description = "AudioDefault3D"; fileName = "data/FPSGameplay/sound/cheetah/softImpact.ogg"; }; datablock SFXProfile(DirtKickup) { preload = "1"; description = "AudioDefault3D"; fileName = "data/FPSGameplay/sound/cheetah/softImpact.ogg"; }; datablock SFXProfile(CheetahTurretFireSound) { //filename = "data/FPSGameplay/sound/cheetah/turret_firing.wav"; filename = "data/FPSGameplay/sound/turret/wpn_turret_fire.wav"; description = BulletFireDesc; preload = true; }; datablock ParticleData(CheetahTireParticle) { textureName = "data/FPSGameplay/art/particles/dustParticle"; dragCoefficient = "1.99902"; gravityCoefficient = "-0.100122"; inheritedVelFactor = "0.0998043"; constantAcceleration = 0.0; lifetimeMS = 1000; lifetimeVarianceMS = 400; colors[0] = "0.456693 0.354331 0.259843 1"; colors[1] = "0.456693 0.456693 0.354331 0"; sizes[0] = "0.997986"; sizes[1] = "3.99805"; sizes[2] = "1.0"; sizes[3] = "1.0"; times[0] = "0.0"; times[1] = "1"; times[2] = "1"; times[3] = "1"; }; datablock ParticleEmitterData(CheetahTireEmitter) { ejectionPeriodMS = 20; periodVarianceMS = 10; ejectionVelocity = "14.57"; velocityVariance = 1.0; ejectionOffset = 0.0; thetaMin = 0; thetaMax = 60; phiReferenceVel = 0; phiVariance = 360; overrideAdvance = false; particles = "CheetahTireParticle"; blendStyle = "ADDITIVE"; }; datablock ProjectileData(TurretProjectile) { projectileShapeName = "data/FPSGameplay/art/shapes/weapons/shared/rocket.dts"; directDamage = 10; radiusDamage = 15; damageRadius = 3; areaImpulse = 1200; explosion = RocketLauncherExplosion; waterExplosion = RocketLauncherWaterExplosion; decal = ScorchRXDecal; splash = RocketSplash; muzzleVelocity = 250; velInheritFactor = 0.7; armingDelay = 0; lifetime = 5000; fadeDelay = 4500; bounceElasticity = 0; bounceFriction = 0; isBallistic = false; gravityMod = 0.80; damageType = "RocketDamage"; }; datablock ParticleEmitterData(TurretFireSmokeEmitter) { ejectionPeriodMS = 10; periodVarianceMS = 5; ejectionVelocity = 6.5; velocityVariance = 1.0; thetaMin = "0"; thetaMax = "0"; lifetimeMS = 350; particles = "GunFireSmoke"; blendStyle = "NORMAL"; softParticles = "0"; alignParticles = "0"; orientParticles = "0"; }; datablock ShapeBaseImageData(TurretImage) { // Basic Item properties shapeFile = "data/FPSGameplay/art/shapes/Cheetah/Cheetah_Turret.DAE"; emap = true; // Specify mount point & offset for 3rd person, and eye offset // for first person rendering. mountPoint = 1; firstPerson = false; // When firing from a point offset from the eye, muzzle correction // will adjust the muzzle vector to point to the eye LOS point. // Since this weapon doesn't actually fire from the muzzle point, // we need to turn this off. correctMuzzleVector = false; // Add the WeaponImage namespace as a parent, WeaponImage namespace // provides some hooks into the inventory system. className = "WeaponImage"; class = "WeaponImage"; // Projectile and Ammo ammo = BulletAmmo; projectile = TurretProjectile; projectileType = Projectile; projectileSpread = "0.01"; // Weapon lights up while firing lightColor = "0.992126 0.968504 0.708661 1"; lightRadius = "4"; lightDuration = "100"; lightType = "WeaponFireLight"; lightBrightness = 2; // Shake camera while firing. shakeCamera = false; // Images have a state system which controls how the animations // are run, which sounds are played, script callbacks, etc. This // state system is downloaded to the client so that clients can // predict state changes and animate accordingly. The following // system supports basic ready->fire->reload transitions as // well as a no-ammo->dryfire idle state. useRemainderDT = true; // Initial start up state stateName[0] = "Preactivate"; stateTransitionOnLoaded[0] = "Activate"; stateTransitionOnNoAmmo[0] = "NoAmmo"; // Activating the gun. Called when the weapon is first // mounted and there is ammo. stateName[1] = "Activate"; stateTransitionOnTimeout[1] = "Ready"; stateTimeoutValue[1] = 0.5; stateSequence[1] = "Activate"; // Ready to fire, just waiting for the trigger stateName[2] = "Ready"; stateTransitionOnNoAmmo[2] = "NoAmmo"; stateTransitionOnTriggerDown[2] = "Fire"; // Fire the weapon. Calls the fire script which does // the actual work. stateName[3] = "Fire"; stateTransitionOnTimeout[3] = "Reload"; stateTimeoutValue[3] = 0.1; stateFire[3] = true; stateRecoil[3] = ""; stateAllowImageChange[3] = false; stateSequence[3] = "Fire"; stateSequenceRandomFlash[3] = true; // use muzzle flash sequence stateScript[3] = "onFire"; stateSound[3] = CheetahTurretFireSound; stateEmitter[3] = TurretFireSmokeEmitter; stateEmitterTime[3] = 0.025; // Play the reload animation, and transition into stateName[4] = "Reload"; stateTransitionOnNoAmmo[4] = "NoAmmo"; stateWaitForTimeout[4] = "0"; stateTransitionOnTimeout[4] = "Ready"; stateTimeoutValue[4] = 1.2; stateAllowImageChange[4] = false; stateSequence[4] = "Reload"; //stateEjectShell[4] = true; // No ammo in the weapon, just idle until something // shows up. Play the dry fire sound if the trigger is // pulled. stateName[5] = "NoAmmo"; stateTransitionOnAmmo[5] = "Reload"; stateSequence[5] = "NoAmmo"; stateTransitionOnTriggerDown[5] = "DryFire"; // No ammo dry fire stateName[6] = "DryFire"; stateTimeoutValue[6] = 1.0; stateTransitionOnTimeout[6] = "NoAmmo"; stateScript[6] = "onDryFire"; }; //----------------------------------------------------------------------------- // Information extacted from the shape. // // Wheel Sequences // spring# Wheel spring motion: time 0 = wheel fully extended, // the hub must be displaced, but not directly animated // as it will be rotated in code. // Other Sequences // steering Wheel steering: time 0 = full right, 0.5 = center // breakLight Break light, time 0 = off, 1 = breaking // // Wheel Nodes // hub# Wheel hub, the hub must be in it's upper position // from which the springs are mounted. // // The steering and animation sequences are optional. // The center of the shape acts as the center of mass for the car. //----------------------------------------------------------------------------- datablock WheeledVehicleTire(CheetahCarTire) { // Tires act as springs and generate lateral and longitudinal // forces to move the vehicle. These distortion/spring forces // are what convert wheel angular velocity into forces that // act on the rigid body. shapeFile = "data/FPSGameplay/art/shapes/Cheetah/wheel.DAE"; staticFriction = 4.2; kineticFriction = "1"; // Spring that generates lateral tire forces lateralForce = 18000; lateralDamping = 6000; lateralRelaxation = 1; // Spring that generates longitudinal tire forces longitudinalForce = 18000; longitudinalDamping = 4000; longitudinalRelaxation = 1; radius = "0.609998"; }; datablock WheeledVehicleTire(CheetahCarTireRear) { // Tires act as springs and generate lateral and longitudinal // forces to move the vehicle. These distortion/spring forces // are what convert wheel angular velocity into forces that // act on the rigid body. shapeFile = "data/FPSGameplay/art/shapes/Cheetah/wheelBack.DAE"; staticFriction = "7.2"; kineticFriction = "1"; // Spring that generates lateral tire forces lateralForce = "19000"; lateralDamping = 6000; lateralRelaxation = 1; // Spring that generates longitudinal tire forces longitudinalForce = 18000; longitudinalDamping = 4000; longitudinalRelaxation = 1; radius = "0.840293"; }; datablock WheeledVehicleSpring(CheetahCarSpring) { // Wheel suspension properties length = 0.5; // Suspension travel force = 2800; // Spring force damping = 3600; // Spring damping antiSwayForce = 3; // Lateral anti-sway force }; datablock WheeledVehicleData(CheetahCar) { category = "Vehicles"; shapeFile = "data/FPSGameplay/art/shapes/Cheetah/Cheetah_Body.DAE"; emap = 1; mountPose[0] = sitting; numMountPoints = 6; useEyePoint = true; // Use the vehicle's camera node rather than the player's maxSteeringAngle = 0.585; // Maximum steering angle, should match animation // 3rd person camera settings cameraRoll = false; // Roll the camera with the vehicle cameraMaxDist = 7.8; // Far distance from vehicle cameraOffset = 1.0; // Vertical offset from camera mount point cameraLag = "0.3"; // Velocity lag of camera cameraDecay = 1.25; // Decay per sec. rate of velocity lag // Rigid Body mass = "400"; massCenter = "0 0.5 0"; // Center of mass for rigid body massBox = "0 0 0"; // Size of box used for moment of inertia, // if zero it defaults to object bounding box drag = 0.6; // Drag coefficient bodyFriction = 0.6; bodyRestitution = 0.4; minImpactSpeed = 5; // Impacts over this invoke the script callback softImpactSpeed = 5; // Play SoftImpact Sound hardImpactSpeed = 15; // Play HardImpact Sound integration = 8; // Physics integration: TickSec/Rate collisionTol = "0.1"; // Collision distance tolerance contactTol = "0.4"; // Contact velocity tolerance // Engine engineTorque = 4300; // Engine power engineBrake = "5000"; // Braking when throttle is 0 brakeTorque = "10000"; // When brakes are applied maxWheelSpeed = 50; // Engine scale by current speed / max speed // Energy maxEnergy = 100; jetForce = 3000; minJetEnergy = 30; jetEnergyDrain = 2; // Sounds engineSound = cheetahEngine; //squealSound = cheetahSqueal; softImpactSound = softImpact; hardImpactSound = hardImpact; // Dynamic fields accessed via script nameTag = 'Cheetah'; maxDismountSpeed = 10; maxMountSpeed = 5; mountPose0 = "sitting"; tireEmitter = "CheetahTireEmitter"; dustEmitter = "CheetahTireEmitter"; dustHeight = "1"; // Mount slots turretSlot = 1; rightBrakeSlot = 2; leftBrakeSlot = 3; };