T2-ACCM/scripts/vehicles/vehicle_S17.cs
2013-03-17 23:06:38 -04:00

439 lines
12 KiB
PHP

//**************************************************************
// S17
//**************************************************************
datablock HoverVehicleData(S17) : ShrikeDamageProfile
{
spawnOffset = "0 0 1";
canControl = false;
floatingGravMag = 3.5;
catagory = "Vehicles";
shapeFile = "nexuscap.dts";
computeCRC = true;
debrisShapeName = "vehicle_grav_scout_debris.dts";
debris = ShapeDebris;
renderWhenDestroyed = false;
drag = 0.0;
density = 0.9;
cameraMaxDist = 5.0;
cameraOffset = 0.7;
cameraLag = 0.5;
numMountPoints = 0;
explosion = VehicleExplosion;
explosionDamage = 0.5;
explosionRadius = 5.0;
maxDamage = 1.5;
destroyedLevel = 1.5;
HDAddMassLevel = 1.2;
HDMassImage = WCHDMassImage;
isShielded = false;
rechargeRate = 0.7;
energyPerDamagePoint = 75;
maxEnergy = 150;
minJetEnergy = 15;
jetEnergyDrain = 0.1;
// Rigid Body
mass = 400;
bodyFriction = 0.1;
bodyRestitution = 0.5;
softImpactSpeed = 20; // Play SoftImpact Sound
hardImpactSpeed = 28; // Play HardImpact Sound
// Ground Impact Damage (uses DamageType::Ground)
minImpactSpeed = 29;
speedDamageScale = 0.010;
// Object Impact Damage (uses DamageType::Impact)
collDamageThresholdVel = 23;
collDamageMultiplier = 0.030;
dragForce = 25 / 45.0;
vertFactor = 0.0;
floatingThrustFactor = 0.35;
mainThrustForce = 25;
reverseThrustForce = 15;
strafeThrustForce = 0;
turboFactor = 1.35;
brakingForce = 15;
brakingActivationSpeed = 3;
stabLenMin = 2.25;
stabLenMax = 3.75;
stabSpringConstant = 30;
stabDampingConstant = 16;
gyroDrag = 16;
normalForce = 30;
restorativeForce = 20;
steeringForce = 35;
rollForce = 15;
pitchForce = 7;
dustEmitter = VehicleLiftoffDustEmitter;
triggerDustHeight = 2.5;
dustHeight = 1.0;
dustTrailEmitter = TireEmitter;
dustTrailOffset = "0.0 -1.0 0.5";
triggerTrailHeight = 3.6;
dustTrailFreqMod = 15.0;
jetSound = ScoutSqueelSound;
engineSound = ScoutEngineSound;
floatSound = ScoutThrustSound;
softImpactSound = GravSoftImpactSound;
hardImpactSound = HardImpactSound;
//wheelImpactSound = WheelImpactSound;
//
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] = SmallLightDamageSmoke;
damageEmitter[1] = SmallHeavyDamageSmoke;
damageEmitter[2] = DamageBubbles;
damageEmitterOffset[0] = "0.0 -1.5 0.5 ";
damageLevelTolerance[0] = 0.3;
damageLevelTolerance[1] = 0.8;
numDmgEmitterAreas = 1;
splashEmitter[0] = VehicleFoamDropletsEmitter;
splashEmitter[1] = VehicleFoamEmitter;
shieldImpact = VehicleShieldImpact;
forwardJetEmitter = WildcatJetEmitter;
cmdCategory = Tactical;
cmdIcon = CMDHoverScoutIcon;
cmdMiniIconName = "commander/MiniIcons/com_landscout_grey";
targetNameTag = 'S17';
targetTypeTag = 'Combat Drone';
sensorData = PlayerSensor;
checkRadius = 1.7785;
observeParameters = "1 10 10";
runningLight[0] = WildcatLight1;
runningLight[1] = WildcatLight2;
runningLight[2] = WildcatLight3;
shieldEffectScale = "0.9375 1.125 0.6";
replaceTime = 20;
};
datablock StaticShapeData(S17switch) : StaticShapeDamageProfile {
shapeFile = "switch.dts";
mass = 1.0;
repairRate = 0;
dynamicType = $TypeMasks::StaticShapeObjectType;
heatSignature = 0;
};
//**************************************************************
// WEAPONS
//**************************************************************
//-------------------------------------
// CHOPPER BELLY TURRET CHARACTERISTICS
//-------------------------------------
datablock TurretData(S17Turret) : TurretDamageProfile
{
className = VehicleTurret;
catagory = "Turrets";
shapeFile = "turret_base_large.dts";
preload = true;
canControl = false;
cmdCategory = "Tactical";
cmdIcon = CMDFlyingBomberIcon;
cmdMiniIconName = "commander/MiniIcons/com_bomber_grey";
targetNameTag = 'S17';
targetTypeTag = 'Turret';
mass = 1.0; // Not really relevant
repairRate = 0;
maxDamage = S17.maxDamage;
destroyedLevel = S17.destroyedLevel;
maxEnergy = 1;
thetaMin = 60;
thetaMax = 150;
thetaNull = 90;
// capacitor
maxCapacitorEnergy = 200;
capacitorRechargeRate = 5.0;
inheritEnergyFromMount = true;
firstPersonOnly = true;
useEyePoint = true;
numWeapons = 1;
targetNameTag = 'Wildcat Chaingun';
targetTypeTag = 'Turret';
};
datablock TurretImageData(S17ChaingunImage)
{
className = WeaponImage;
shapeFile = "weapon_chaingun.dts";
// mountPoint = 1;
projectile = RPChaingunBullet;
projectileType = TracerProjectile;
projectileSpread = 1.2 / 1000.0;
casing = ShellDebris;
shellExitDir = "1.0 0.3 1.0";
shellExitOffset = "0.15 -0.56 -0.1";
shellExitVariance = 5.0;
shellVelocity = 0.0;
usesEnergy = true;
useCapacitor = true;
useMountEnergy = true;
minEnergy = 1;
fireEnergy = 0.1;
// Turret parameters
activationMS = 4000;
deactivateDelayMS = 1500;
thinkTimeMS = 200;
degPerSecTheta = 360;
degPerSecPhi = 360;
attackRadius = 75;
stateName[0] = "Activate";
stateSequence[0] = "deploy";
stateAllowImageChange[0] = false;
stateTimeoutValue[0] = 0.1;
stateTransitionOnTimeout[0] = "Ready";
stateTransitionOnNoAmmo[0] = "NoAmmo";
stateName[1] = "Ready";
stateSpinThread[1] = Stop;
stateTransitionOnTriggerDown[1] = "Spinup";
stateTransitionOnNoAmmo[1] = "NoAmmo";
stateName[2] = "NoAmmo";
stateTransitionOnAmmo[2] = "Ready";
stateSpinThread[2] = Stop;
stateTransitionOnTriggerDown[2] = "DryFire";
stateName[3] = "Spinup";
stateSpinThread[3] = SpinUp;
stateTimeoutValue[3] = 0.01;
stateWaitForTimeout[3] = false;
stateTransitionOnTimeout[3] = "Fire";
stateTransitionOnTriggerUp[3] = "Spindown";
stateName[4] = "Fire";
stateSequence[4] = "Fire";
stateSequenceRandomFlash[4] = true;
stateSpinThread[4] = FullSpeed;
stateSound[4] = ChaingunFireSound;
stateAllowImageChange[4] = false;
stateScript[4] = "onFire";
stateFire[4] = true;
stateEjectShell[4] = true;
stateTimeoutValue[4] = 0.15;
stateTransitionOnTimeout[4] = "Fire";
stateTransitionOnTriggerUp[4] = "Spindown";
stateTransitionOnNoAmmo[4] = "EmptySpindown";
stateName[5] = "Spindown";
stateSpinThread[5] = SpinDown;
stateTimeoutValue[5] = 0.1;
stateWaitForTimeout[5] = true;
stateTransitionOnTimeout[5] = "Ready";
stateTransitionOnTriggerDown[5] = "Spinup";
stateName[6] = "EmptySpindown";
stateSpinThread[6] = SpinDown;
stateTimeoutValue[6] = 0.5;
stateTransitionOnTimeout[6] = "NoAmmo";
stateName[7] = "DryFire";
stateSound[7] = ShrikeBlasterDryFireSound;
stateTimeoutValue[7] = 0.5;
stateTransitionOnTimeout[7] = "NoAmmo";
};
datablock TurretImageData(S17Param)
{
mountPoint = 2;
shapeFile = "turret_muzzlepoint.dts";
offset = "0.0 0.0 3.0";
Projectile = RPChaingunBullet;
ProjectileType = TracerProjectile;
// Turret parameters
activationMS = 1000;
deactivateDelayMS = 1500;
thinkTimeMS = 200;
degPerSecTheta = 500;
degPerSecPhi = 500;
attackRadius = 75;
};
function S17::onAdd(%this, %obj)
{
Parent::onAdd(%this, %obj);
if (%obj.clientControl)
serverCmdResetControlObject(%obj.clientControl);
%obj.schedule(5500, "playThread", $ActivateThread, "activate");
%turret = TurretData::create(S17Turret);
%turret.scale = "0.5 0.5 1";
MissionCleanup.add(%turret);
%turret.team = %obj.team;
%turret.selectedWeapon = 1;
%turret.setSelfPowered();
%obj.mountObject(%turret, 10);
%turret.mountImage(S17Param, 0);
%turret.mountImage(S17chaingunimage, 2);
%obj.turret = %turret;
%obj.turretObject = %turret;
%turret.setCapacitorRechargeRate( %turret.getDataBlock().capacitorRechargeRate );
%turret.vehicleMounted = %obj;
%turret.setAutoFire(false);
setTargetSensorGroup(%turret.getTarget(), %turret.team);
setTargetNeverVisMask(%turret.getTarget(), 0xffffffff);
%sensor = new StaticShape()
{
scale = "1.3 1.3 0.1";
dataBlock = "S17switch";
};
MissionCleanup.add(%sensor);
%obj.mountObject(%sensor, 2);
%sensor.vehicleMounted = %obj;
%sensor.playThread($AmbientThread,"ambient");
schedule(5000, 0, "S17TurretAttackCheck",%obj);
}
function S17::deleteAllMounted(%data, %obj)
{
%turret = %obj.getMountNodeObject(10);
if (!%turret)
return;
%turret.schedule(2000, delete);
%body = %obj.getMountNodeObject(2);
if (isObject(%body))
%body.schedule(1000, delete);
$teamRepCredits[%obj.team] += getWord($commsatPurchase[2],1);
$teamUsedCredits[%obj.team] -= getWord($commsatPurchase[2],1);
}
function S17turret::onDamage(%data, %obj)
{
%newDamageVal = %obj.getDamageLevel();
if(%obj.lastDamageVal !$= "")
if(isObject(%obj.getObjectMount()) && %obj.lastDamageVal > %newDamageVal)
%obj.getObjectMount().setDamageLevel(%newDamageVal);
%obj.lastDamageVal = %newDamageVal;
}
function S17turret::damageObject(%this, %targetObject, %sourceObject, %position, %amount, %damageType ,%vec, %client, %projectile)
{
%vehicle = %targetObject.getObjectMount();
if(%vehicle)
%vehicle.getDataBlock().damageObject(%vehicle, %sourceObject, %position, %amount, %damageType, %vec, %client, %projectile);
}
function S17::onEnterLiquid(%data, %obj, %coverage, %type)
{
switch(%type)
{
case 0:
//Water
%obj.setHeat(0.0);
%obj.liquidDamage(%data, 0.1, $DamageType::Crash);
case 1:
//Ocean Water
%obj.setHeat(0.0);
%obj.liquidDamage(%data, 0.1, $DamageType::Crash);
case 2:
//River Water
%obj.setHeat(0.0);
%obj.liquidDamage(%data, 0.1, $DamageType::Crash);
case 3:
//Stagnant Water
%obj.setHeat(0.0);
%obj.liquidDamage(%data, 0.1, $DamageType::Crash);
case 4:
//Lava
%obj.liquidDamage(%data, $VehicleDamageLava, $DamageType::Lava);
case 5:
//Hot Lava
%obj.liquidDamage(%data, $VehicleDamageHotLava, $DamageType::Lava);
case 6:
//Crusty Lava
%obj.liquidDamage(%data, $VehicleDamageCrustyLava, $DamageType::Lava);
case 7:
//Quick Sand
}
}
function S17TurretAttackCheck(%obj){
if(!isObject(%obj))
return;
%valid = 0;
%TargetSearchMask = $TypeMasks::PlayerObjectType | $TypeMasks::VehicleObjectType | $TypeMasks::TurretObjectType;
InitContainerRadiusSearch(%obj.getPosition(),400,%TargetSearchMask);
while ((%potentialTarget = ContainerSearchNext()) != 0) {
if (%potentialtarget && %valid != 1) {
%PTT = %potentialtarget.team;
if(%PTT $= "")
%PTT = %obj.team;
if(!(%PTT == %obj.team) && %PTT != 0){
%valid = 1;
%target = %potentialtarget;
}
}
}
if(%valid == 1){
if(!%obj.firing){
%obj.firing = 1;
%obj.turretobject.setTargetObject(%target);
%obj.turretobject.aquireTime = getSimTime();
%obj.turretobject.setImageTrigger(2,true);
}
}
else{
if(%obj.firing){
%obj.firing = 0;
%obj.turretobject.setImageTrigger(2,false);
%obj.turretObject.clearTarget();
}
}
schedule(250, 0, "S17TurretAttackCheck",%obj);
}