mirror of
https://github.com/Ragora/T2-ACCM.git
synced 2026-02-02 09:11:01 +00:00
412 lines
11 KiB
PHP
412 lines
11 KiB
PHP
//**************************************************************
|
|
// VEHICLE CHARACTERISTICS
|
|
//**************************************************************
|
|
|
|
datablock EffectProfile(ScoutEngineEffect)
|
|
{
|
|
effectname = "vehicles/outrider_engine";
|
|
minDistance = 5.0;
|
|
maxDistance = 10.0;
|
|
};
|
|
|
|
datablock EffectProfile(ScoutThrustEffect)
|
|
{
|
|
effectname = "vehicles/outrider_boost";
|
|
minDistance = 5.0;
|
|
maxDistance = 10.0;
|
|
};
|
|
|
|
datablock AudioProfile(ScoutSqueelSound)
|
|
{
|
|
filename = "fx/vehicles/outrider_skid.wav";
|
|
description = ClosestLooping3d;
|
|
preload = true;
|
|
};
|
|
|
|
datablock AudioProfile(ScoutEngineSound)
|
|
{
|
|
filename = "fx/vehicles/outrider_engine.wav";
|
|
description = AudioDefaultLooping3d;
|
|
preload = true;
|
|
effect = ScoutEngineEffect;
|
|
};
|
|
|
|
datablock AudioProfile(ScoutThrustSound)
|
|
{
|
|
filename = "fx/vehicles/outrider_boost.wav";
|
|
description = AudioDefaultLooping3d;
|
|
preload = true;
|
|
effect = ScoutThrustEffect;
|
|
};
|
|
|
|
datablock AudioProfile(ScoutturretFireSound)
|
|
{
|
|
filename = "fx/vehicles/tank_chaingun.wav";
|
|
description = AudioDefaultLooping3d;
|
|
preload = true;
|
|
effect = AssaultChaingunFireEffect;
|
|
};
|
|
|
|
datablock HoverVehicleData(scoutVehicle) : WildcatDamageProfile
|
|
{
|
|
spawnOffset = "0 0 1";
|
|
|
|
floatingGravMag = 3.5;
|
|
|
|
catagory = "Vehicles";
|
|
shapeFile = "vehicle_grav_scout.dts";
|
|
computeCRC = true;
|
|
|
|
debrisShapeName = "vehicle_grav_scout_debris.dts";
|
|
debris = ShapeDebris;
|
|
renderWhenDestroyed = false;
|
|
|
|
drag = 0.0;
|
|
density = 0.9;
|
|
|
|
mountPose[0] = scoutRoot;
|
|
cameraMaxDist = 5.0;
|
|
cameraOffset = 0.7;
|
|
cameraLag = 0.5;
|
|
numMountPoints = 1;
|
|
isProtectedMountPoint[0] = true;
|
|
explosion = VehicleExplosion;
|
|
explosionDamage = 0.5;
|
|
explosionRadius = 5.0;
|
|
|
|
lightOnly = 1;
|
|
|
|
maxDamage = 0.80;
|
|
destroyedLevel = 0.80;
|
|
|
|
isShielded = false;
|
|
rechargeRate = 0.7;
|
|
energyPerDamagePoint = 50;
|
|
maxEnergy = 150;
|
|
minJetEnergy = 15;
|
|
jetEnergyDrain = 1.5;
|
|
|
|
// 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 = 28 / 45.0;
|
|
vertFactor = 0.0;
|
|
floatingThrustFactor = 0.35;
|
|
|
|
mainThrustForce = 25;
|
|
reverseThrustForce = 15;
|
|
strafeThrustForce = 15;
|
|
turboFactor = 1.5;
|
|
|
|
brakingForce = 25;
|
|
brakingActivationSpeed = 4;
|
|
|
|
stabLenMin = 2.25;
|
|
stabLenMax = 3.75;
|
|
stabSpringConstant = 30;
|
|
stabDampingConstant = 16;
|
|
|
|
gyroDrag = 16;
|
|
normalForce = 30;
|
|
restorativeForce = 20;
|
|
steeringForce = 25;
|
|
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.7;
|
|
numDmgEmitterAreas = 1;
|
|
|
|
splashEmitter[0] = VehicleFoamDropletsEmitter;
|
|
splashEmitter[1] = VehicleFoamEmitter;
|
|
|
|
shieldImpact = VehicleShieldImpact;
|
|
|
|
forwardJetEmitter = WildcatJetEmitter;
|
|
|
|
cmdCategory = Tactical;
|
|
cmdIcon = CMDHoverScoutIcon;
|
|
cmdMiniIconName = "commander/MiniIcons/com_landscout_grey";
|
|
targetNameTag = 'MK II WildCat';
|
|
targetTypeTag = 'Grav Cycle';
|
|
sensorData = VehiclePulseSensor;
|
|
|
|
checkRadius = 1.7785;
|
|
observeParameters = "1 10 10";
|
|
|
|
runningLight[0] = WildcatLight1;
|
|
runningLight[1] = WildcatLight2;
|
|
runningLight[2] = WildcatLight3;
|
|
|
|
shieldEffectScale = "0.9375 1.125 0.6";
|
|
};
|
|
|
|
//**************************************************************
|
|
// WEAPONS
|
|
//**************************************************************
|
|
|
|
datablock ShapeBaseImageData(hornetChaingunPairImage)
|
|
{
|
|
className = WeaponImage;
|
|
shapeFile = "weapon_chaingun.dts";
|
|
projectile = MG42Bullet;
|
|
projectileType = TracerProjectile;
|
|
mountPoint = 3;
|
|
//*wintips* offset = "1.84 -0.52 -0.05";
|
|
offset = "0.3 0.9 0.4";
|
|
rotation = "1 0 0 0";
|
|
|
|
usesEnergy = true;
|
|
useMountEnergy = true;
|
|
minEnergy = 5;
|
|
fireEnergy = 0;
|
|
fireTimeout = 125;
|
|
|
|
|
|
casing = ShellDebris;
|
|
shellExitDir = "0 -0.5 1.0";
|
|
shellExitOffset = "0 -0.56 -0.11";
|
|
shellExitVariance = 15.0;
|
|
shellVelocity = 3.0;
|
|
|
|
projectileSpread = 3.0 / 1000.0;
|
|
|
|
//--------------------------------------
|
|
stateName[0] = "Activate";
|
|
stateSequence[0] = "Activate";
|
|
stateSound[0] = ChaingunSwitchSound;
|
|
stateAllowImageChange[0] = false;
|
|
//
|
|
stateTimeoutValue[0] = 0.3;
|
|
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;
|
|
stateSound[3] = ChaingunSpinupSound;
|
|
//
|
|
stateTimeoutValue[3] = 0.05;
|
|
stateWaitForTimeout[3] = false;
|
|
stateTransitionOnTimeout[3] = "Fire";
|
|
stateTransitionOnTriggerUp[3] = "Spindown";
|
|
|
|
//--------------------------------------
|
|
stateName[4] = "Fire";
|
|
stateSequence[4] = "Fire";
|
|
stateSequenceRandomFlash[4] = true;
|
|
stateSpinThread[4] = FullSpeed;
|
|
stateSound[4] = ChaingunFireSound;
|
|
//stateRecoil[4] = LightRecoil;
|
|
stateAllowImageChange[4] = false;
|
|
stateScript[4] = "onFire";
|
|
stateFire[4] = true;
|
|
stateEjectShell[4] = true;
|
|
//
|
|
stateTimeoutValue[4] = 0.05;
|
|
stateTransitionOnTimeout[4] = "Fire";
|
|
stateTransitionOnTriggerUp[4] = "Spindown";
|
|
stateTransitionOnNoAmmo[4] = "EmptySpindown";
|
|
|
|
//--------------------------------------
|
|
stateName[5] = "Spindown";
|
|
stateSound[5] = ChaingunSpinDownSound;
|
|
stateSpinThread[5] = SpinDown;
|
|
//
|
|
stateTimeoutValue[5] = 0.05;
|
|
stateWaitForTimeout[5] = true;
|
|
stateTransitionOnTimeout[5] = "Ready";
|
|
stateTransitionOnTriggerDown[5] = "Spinup";
|
|
|
|
//--------------------------------------
|
|
stateName[6] = "EmptySpindown";
|
|
stateSound[6] = ChaingunSpinDownSound;
|
|
stateSpinThread[6] = SpinDown;
|
|
//
|
|
stateTimeoutValue[6] = 1.0;
|
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
|
|
|
//--------------------------------------
|
|
stateName[7] = "DryFire";
|
|
stateSound[7] = ChaingunDryFireSound;
|
|
stateTimeoutValue[7] = 0.3;
|
|
stateTransitionOnTimeout[7] = "NoAmmo";
|
|
};
|
|
|
|
datablock ShapeBaseImageData(hornetChaingunImage) : hornetChaingunPairImage
|
|
{
|
|
offset = "-0.45 0.9 0.4";
|
|
rotation = "1 0 0 0";
|
|
stateScript[3] = "onTriggerDown";
|
|
stateScript[5] = "onTriggerUp";
|
|
stateScript[6] = "onTriggerUp";
|
|
};
|
|
|
|
datablock ShapeBaseImageData(hornetChaingunParam)
|
|
{
|
|
mountPoint = 2;
|
|
shapeFile = "weapon_chaingun.dts";
|
|
|
|
projectile = MG42Bullet;
|
|
projectileType = TracerProjectile;
|
|
};
|
|
|
|
//********* FUNCTIONS ***********
|
|
|
|
function scoutVehicle::onAdd(%this, %obj)
|
|
{
|
|
Parent::onAdd(%this, %obj);
|
|
%obj.mountImage(hornetChaingunParam, 0);
|
|
%obj.mountImage(hornetChaingunImage, 2);
|
|
%obj.mountImage(hornetChaingunPairImage, 3);
|
|
%obj.nextWeaponFire = 2;
|
|
%obj.schedule(5500, "playThread", $ActivateThread, "activate");
|
|
}
|
|
|
|
function scoutVehicle::playerMounted(%data, %obj, %player, %node)
|
|
{
|
|
// scout == SUV (single-user vehicle)
|
|
commandToClient(%player.client, 'setHudMode', 'Pilot', "Hoverbike", %node);
|
|
$numVWeapons = 1;
|
|
|
|
// update observers who are following this guy...
|
|
if( %player.client.observeCount > 0 )
|
|
resetObserveFollow( %player.client, false );
|
|
}
|
|
|
|
function scoutVehicle::onTrigger(%data, %obj, %trigger, %state)
|
|
{
|
|
// data = scout datablock
|
|
// obj = scout object number
|
|
// trigger = 0 for "fire", 1 for "jump", 3 for "thrust"
|
|
// state = 1 for firing, 0 for not firing
|
|
if(%trigger == 0)
|
|
{
|
|
switch (%state) {
|
|
case 0:
|
|
%obj.fireWeapon = false;
|
|
%obj.setImageTrigger(2, false);
|
|
%obj.setImageTrigger(3, false);
|
|
case 1:
|
|
%obj.setImageTrigger(2, true);
|
|
%obj.setImageTrigger(3, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
function scoutVehicle::playerDismounted(%data, %obj, %player)
|
|
{
|
|
%obj.fireWeapon = false;
|
|
%obj.setImageTrigger(2, false);
|
|
%obj.setImageTrigger(3, false);
|
|
setTargetSensorGroup(%obj.getTarget(), %obj.team);
|
|
|
|
if( %player.client.observeCount > 0 )
|
|
resetObserveFollow( %player.client, true );
|
|
}
|
|
|
|
function hornetChaingunImage::onFire(%data,%obj,%slot)
|
|
{
|
|
// obj = AdminFighterFlyer object number
|
|
// slot = 2
|
|
|
|
Parent::onFire(%data,%obj,%slot);
|
|
// %obj.nextWeaponFire = 3;
|
|
// schedule(%data.fireTimeout, 0, "fireNextGun", %obj);
|
|
}
|
|
|
|
function hornetChaingunPairImage::onFire(%data,%obj,%slot)
|
|
{
|
|
// obj = ScoutFlyer object number
|
|
// slot = 3
|
|
|
|
Parent::onFire(%data,%obj,%slot);
|
|
// %obj.nextWeaponFire = 2;
|
|
// schedule(%data.fireTimeout, 0, "fireNextGun", %obj);
|
|
}
|
|
function hornetChaingunImage::onTriggerDown(%this, %obj, %slot)
|
|
{
|
|
}
|
|
|
|
function hornetChaingunImage::onTriggerUp(%this, %obj, %slot)
|
|
{
|
|
}
|
|
|
|
function hornetChaingunImage::onMount(%this, %obj, %slot)
|
|
{
|
|
// %obj.setImageAmmo(%slot,true);
|
|
}
|
|
|
|
function hornetChaingunPairImage::onMount(%this, %obj, %slot)
|
|
{
|
|
// %obj.setImageAmmo(%slot,true);
|
|
}
|
|
|
|
function hornetChaingunImage::onUnmount(%this,%obj,%slot)
|
|
{
|
|
}
|
|
|
|
function hornetChaingunPairImage::onUnmount(%this,%obj,%slot)
|
|
{
|
|
}
|
|
|
|
|