I have a hover vehicle
//**************************************************************
// VEHICLE CHARACTERISTICS
//**************************************************************
datablock HoverVehicleData(Hover)
{
spawnOffset = "0 0 1";
floatingGravMag = 55.5;
category = "Vehicles";
shapeFile = "~/data/shapes/HoverCraft/hovercraft.dts";
emap = true;
maxDamage = 1000.0;
destroyedLevel = 900.0;
//debrisShapeName = "~/data/shapes/player/GRAVTANK.dts";
//debris = ShapeDebris;
//renderWhenDestroyed = false;
drag = 0.2;
density = 0.3;
integration = 4; // Physics integration: TickSec/Rate
collisionTol = 0.3; // Collision distance tolerance
contactTol = 0.2; // Contact velocity tolerance
cameraMaxDist = 10.0;
cameraOffset = 5.7;
cameraLag = 5.5;
explosion = HoverExplosion;
explosionDamage = 0.5;
explosionRadius = 5.0;
rechargeRate = 0.7;
energyPerDamagePoint = 75;
maxEnergy = 650;
minJetEnergy = 165;
jetEnergyDrain = 1.3;
// Rigid Body
mass = 90;
bodyFriction = 0.1;
bodyRestitution = 0.3;
softImpactSpeed = 20; // Play SoftImpact Sound
hardImpactSpeed = 28; // Play HardImpact Sound
// Ground Impact Damage (uses DamageType::Ground)
minImpactSpeed = 29;
speedDamageScale = 0.10;
// Object Impact Damage (uses DamageType::Impact)
collDamageThresholdVel = 23;
collDamageMultiplier = 0.030;
dragForce = 1.0;
// dragForce = 25 / 45.0;
vertFactor = 0.8;
floatingThrustFactor = 0.5;
mainThrustForce = 600;
reverseThrustForce = 600;
strafeThrustForce = 670;
turboFactor = 1.5;
brakingForce = 900;
brakingActivationSpeed = 30;
stabLenMin = 28.50;
stabLenMax = 32.50;
stabSpringConstant = 38;
stabDampingConstant = 28;
gyroDrag = 18; // 16
//gyroForce = 50;
normalForce = 30;
restorativeForce = 1600;
steeringForce = 1000;
rollForce = 30;
pitchForce = 30;
dustEmitter = HoverEmitter;
triggerDustHeight = 0.5;
dustHeight = 1.0;
dustTrailEmitter = HoverEmitter;
dustTrailOffset = "0.0 -1.0 0.5";
triggerTrailHeight = 2.6;
dustTrailFreqMod = 15.0;
//jetSound = ScoutSqueelSound;
//engineSound = ScoutEngineSound;
//floatSound = ScoutThrustSound;
//softImpactSound = GravSoftImpactSound;
//hardImpactSound = HardImpactSound;
//wheelImpactSound = WheelImpactSound;
maxMountSpeed = 0.1;
mountDelay = 2;
dismountDelay = 1;
stationaryThreshold = 0.5;
maxDismountSpeed = 0.1;
numMountPoints = 2;
mountPose[0] = "Sitting";
mountPointTransform[0] = "0 0 0 0 0 1 0";
isProtectedMountPoint[0] = false;
//
softSplashSoundVelocity = 10.0;
mediumSplashSoundVelocity = 20.0;
hardSplashSoundVelocity = 30.0;
exitSplashSoundVelocity = 10.0;
//exitingWater = VehicleExitWaterSoftSound;
//impactWaterEasy = VehicleImpactWaterSoftSound;
//impactWaterMedium = VehicleImpactWaterSoftSound;
//impactWaterHard = VehicleImpactWaterMediumSound;
//waterWakeSound = VehicleWakeSoftSplashSound;
minMountDist = 4;
damageEmitter[0] = HoverEmitter;
damageEmitter[1] = HoverEmitter;
damageEmitter[2] = HoverEmitter;
damageEmitterOffset[0] = "0.0 -1.5 0.5 ";
damageLevelTolerance[0] = 0.3;
damageLevelTolerance[1] = 0.7;
numDmgEmitterAreas = 2;
splashEmitter[0] = HoverEmitter;
splashEmitter[1] = HoverEmitter;
checkRadius = 1.7785;
observeParameters = "1 10 10";
damageEmitter[0] = LightDamageEmitter;
damageEmitter[1] = HeavyDamageEmitter;
damageEmitter[2] = DestroyedEmitter;
damageEmitterOffset[0] = "0.0 -3.0 0.0 ";
damageLevelTolerance[0] = 0.3;
damageLevelTolerance[1] = 0.7;
numDmgEmitterAreas = 1;
explosion = hoverExplosion;
debrisShapeName = "~/data/shapes/explosions/debris.dts";
//debris = hoverDebris;
splash = hoverSplash;
splashVelocity = 4.0;
splashAngle = 67.0;
splashFreqMod = 300.0;
splashVelEpsilon = 0.60;
bubbleEmitTime = 0.4;
splashEmitter[0] = hoverFoamDropletsEmitter;
splashEmitter[1] = hoverFoamEmitter;
splashEmitter[2] = hoverBubbleEmitter;
mediumSplashSoundVelocity = 10.0;
hardSplashSoundVelocity = 20.0;
exitSplashSoundVelocity = 5.0;
//runningLight[0] = WildcatLight1;
//runningLight[1] = WildcatLight2;
//runningLight[2] = WildcatLight3;
// shieldEffectScale = "0.9375 1.125 0.6";
};
//-----------------------------------------------------------------------------
function Hover::create(%vehicle)
{
%obj = new HoverVehicle() {
dataBlock = %block;
mountable = true;
};
return(%obj);
}
//-----------------------------------------------------------------------------
function Hover::onAdd(%this,%obj)
{
// energy
%obj.setEnergyLevel(%this.MaxEnergy);
%obj.setRechargeRate(%this.rechargeRate);
}
function Hover::onCollision(%this,%obj,%col,%vec,%speed)
{
// Collision with other objects, including items
// need to set this up later
// Apply damage to the object all shape base objects
if ( %speed >= 20 )
{
if (%col.getType() && $TypeMasks::ShapeBaseObjectType)
%col.damage(%obj,%pos,( 3 * %speed ), "hover");
}
}
function Hover::onDamage(%this,%obj)
{
%damageAmt = %obj.getDamageLevel();
if (%damageAmt >= %this.destroyedLevel)
{
%obj.setDamageState(Destroyed);
}
}
function Hover::damage(%data, %myObj, %sourceObj, %position, %amount, %damageType, %momentum)
{
%myObj.applyDamage(%amount);
}
function VehicleData::onDestroyed(%data, %obj, %prevState)
{
// Create our detonator projectiles
%q = new (projectile)()
{
dataBlock = HoverExplosionProjectile;
initialVelocity = 3;
initialPosition = %obj.getPosition();
sourceObject = %obj;
sourceSlot = 2;
};
MissionCleanup.add(%q);
%obj.schedule(30, "delete");
}