mirror of
https://github.com/PhantomGamesDevelopment/TWM2.git
synced 2026-01-20 03:54:48 +00:00
459 lines
12 KiB
C#
459 lines
12 KiB
C#
datablock WheeledVehicleData(DropPod) : MPBDamageProfile {
|
|
spawnOffset = "0 0 1.0";
|
|
renderWhenDestroyed = false;
|
|
canControl = true;
|
|
catagory = "Vehicles";
|
|
shapeFile = "stackable2l.dts";
|
|
multipassenger = false;
|
|
computeCRC = true;
|
|
|
|
debrisShapeName = "stackable2l.dts";
|
|
debris = ShapeDebris;
|
|
|
|
drag = 0.0;
|
|
density = 20.0;
|
|
|
|
mountPose[0] = sitting;
|
|
numMountPoints = 1;
|
|
isProtectedMountPoint[0] = true;
|
|
|
|
cameraMaxDist = 20;
|
|
cameraOffset = 6;
|
|
cameraLag = 1.5;
|
|
explosion = HGVehicleExplosion;
|
|
explosionDamage = 0.25;
|
|
explosionRadius = 5.0;
|
|
|
|
maxSteeringAngle = 0.3; // 20 deg.
|
|
|
|
// Used to test if the station can deploy
|
|
stationPoints[1] = "-2.3 -7.38703 -0.65";
|
|
stationPoints[2] = "-2.3 -11.8 -0.65";
|
|
stationPoints[3] = "0 -7.38703 -0.65";
|
|
stationPoints[4] = "0 -11.8 -0.65";
|
|
stationPoints[5] = "2.3 -7.38703 -0.65";
|
|
stationPoints[6] = "2.3 -11.8 -0.65";
|
|
|
|
// Rigid Body
|
|
mass = 1000;
|
|
bodyFriction = 0.8;
|
|
bodyRestitution = 0.5;
|
|
minRollSpeed = 3;
|
|
gyroForce = 400;
|
|
gyroDamping = 0.3;
|
|
stabilizerForce = 10;
|
|
minDrag = 10;
|
|
softImpactSpeed = 15; // Play SoftImpact Sound
|
|
hardImpactSpeed = 25; // Play HardImpact Sound
|
|
|
|
// Ground Impact Damage (uses DamageType::Ground)
|
|
minImpactSpeed = 24;
|
|
speedDamageScale = 0.025;
|
|
|
|
// Object Impact Damage (uses DamageType::Impact)
|
|
collDamageThresholdVel = 15;
|
|
collDamageMultiplier = 0.03;
|
|
|
|
// Engine
|
|
engineTorque = 0 * 745;
|
|
breakTorque = 0 * 745;
|
|
maxWheelSpeed = 10;
|
|
|
|
// Springs
|
|
springForce = 8000;
|
|
springDamping = 1300;
|
|
antiSwayForce = 6000;
|
|
staticLoadScale = 2;
|
|
|
|
// Tires
|
|
tireRadius = 1.6;
|
|
tireFriction = 10.0;
|
|
tireRestitution = 0.5;
|
|
tireLateralForce = 3000;
|
|
tireLateralDamping = 400;
|
|
tireLateralRelaxation = 1;
|
|
tireLongitudinalForce = 12000;
|
|
tireLongitudinalDamping = 600;
|
|
tireLongitudinalRelaxation = 1;
|
|
tireEmitter = TireEmitter;
|
|
|
|
//
|
|
maxDamage = 2.0;
|
|
destroyedLevel = 2.0;
|
|
|
|
isShielded = false;
|
|
energyPerDamagePoint = 125;
|
|
maxEnergy = 600;
|
|
jetForce = 0;
|
|
minJetEnergy = 60;
|
|
jetEnergyDrain = 0;
|
|
rechargeRate = 1.0;
|
|
|
|
jetSound = MPBThrustSound;
|
|
engineSound = MPBEngineSound;
|
|
squeelSound = AssaultVehicleSkid;
|
|
softImpactSound = GravSoftImpactSound;
|
|
hardImpactSound = HardImpactSound;
|
|
//wheelImpactSound = WheelImpactSound;
|
|
|
|
//
|
|
softSplashSoundVelocity = 5.0;
|
|
mediumSplashSoundVelocity = 8.0;
|
|
hardSplashSoundVelocity = 12.0;
|
|
exitSplashSoundVelocity = 8.0;
|
|
|
|
exitingWater = VehicleExitWaterSoftSound;
|
|
impactWaterEasy = VehicleImpactWaterSoftSound;
|
|
impactWaterMedium = VehicleImpactWaterMediumSound;
|
|
impactWaterHard = VehicleImpactWaterHardSound;
|
|
waterWakeSound = VehicleWakeMediumSplashSound;
|
|
|
|
minMountDist = 3;
|
|
|
|
damageEmitter[0] = SmallLightDamageSmoke;
|
|
damageEmitter[1] = SmallHeavyDamageSmoke;
|
|
damageEmitter[2] = DamageBubbles;
|
|
damageEmitterOffset[0] = "3.0 0.5 0.0 ";
|
|
damageEmitterOffset[1] = "-3.0 0.5 0.0 ";
|
|
damageLevelTolerance[0] = 0.3;
|
|
damageLevelTolerance[1] = 0.7;
|
|
numDmgEmitterAreas = 2;
|
|
|
|
splashEmitter[0] = VehicleFoamDropletsEmitter;
|
|
splashEmitter[1] = VehicleFoamEmitter;
|
|
|
|
shieldImpact = VehicleShieldImpact;
|
|
|
|
cmdCategory = "Tactical";
|
|
cmdIcon = CMDGroundMPBIcon;
|
|
cmdMiniIconName = "commander/MiniIcons/com_mpb_grey";
|
|
targetNameTag = 'Drop';
|
|
targetTypeTag = 'Pod';
|
|
sensorData = VehiclePulseSensor;
|
|
|
|
observeParameters = "1 12 12";
|
|
|
|
shieldEffectScale = "0.85 1.2 0.7";
|
|
};
|
|
|
|
function MakeDropPod(%frd, %right, %plyr, %src, %i) {
|
|
if(!isObject(%src)) {
|
|
return;
|
|
}
|
|
if(!%plyr.isAlive()) {
|
|
return;
|
|
}
|
|
if(!%plyr.client.jumpDownYet) {
|
|
%plyr.client.jumpDownYet = 1;
|
|
}
|
|
%vec = vectorAdd(vectorScale(%right,getWord($PodPos[%i],0)),vectorScale(%frd,getWord($PodPos[%i],1)));
|
|
%posa = vectorAdd(%src.getPosition(),%vec);
|
|
%pos = vectorAdd(%posa, "0 0 -16");
|
|
|
|
%pod = new WheeledVehicle() {
|
|
dataBlock = DropPod;
|
|
position = %pos;
|
|
rotation = "0 0 1 0";
|
|
team = %src.team;
|
|
};
|
|
MissionCleanUp.add(%pod);
|
|
|
|
%plyr.unmount();
|
|
%pod.mountObject(%plyr,0);
|
|
|
|
%pod.flying = 1;
|
|
%plyr.setMoveState(true); //ha! no running now
|
|
PodScanLoop(%pod, %plyr);
|
|
|
|
%plyr.schedule(1, "setInvinc", true);
|
|
|
|
return %pod;
|
|
}
|
|
|
|
function DropPod::playerMounted(%data, %obj, %player, %node) {
|
|
bottomPrint(%player.client, "Standby for pod launch... HOLD ON TROOPER \n It's About to get real bumpy!!!", 5, 2 );
|
|
if( %player.client.observeCount > 0 )
|
|
resetObserveFollow( %player.client, false );
|
|
}
|
|
|
|
function PodScanLoop(%pod, %player) {
|
|
if(!isObject(%pod)) {
|
|
if(%pod.flying) {
|
|
//mid air = die
|
|
if(%player.isAlive()) {
|
|
%plyr.schedule(1, "setInvinc", false);
|
|
%player.schedule(5, "scriptKill", 0);
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
else {
|
|
return;
|
|
}
|
|
}
|
|
%podPos = %pod.getPosition();
|
|
%ZGrd = GetTerrainHeight(%podPos);
|
|
%landPos = ""@getWord(%podPos, 0)@" "@getWord(%podPos, 1)@" "@%ZGrd@"";
|
|
//time to land?
|
|
if(vectorDist(%podPos, %landPos) < 50) {
|
|
// Lets blow up anything blocking the ground
|
|
%c4 = new Item() {
|
|
datablock = C4Deployed;
|
|
position = %landPos;
|
|
scale = ".1 .1 .1";
|
|
};
|
|
MissionCleanup.add(%c4);
|
|
schedule(100, 0, "C4GoBoom", %c4);
|
|
//
|
|
%pod.setVelocity("0 0 3");
|
|
%player.schedule(1250, "setInvinc", false);
|
|
%player.unmount();
|
|
%pod.flying = 0;
|
|
//pod explodes...
|
|
%pod.damage(0, %pod.GetPosition(), 99999, $DamageType::Explosion);
|
|
%player.setMoveState(false); //ha! no running now
|
|
%player.applyRepair(999);
|
|
messageClient(%player.client, 'CloseHud', "", "vehicleHud");
|
|
}
|
|
schedule(250, 0, "PodScanLoop", %pod, %player);
|
|
}
|
|
|
|
function Player::setInvinc(%player, %yeh) {
|
|
%player.IsinvincibleC = %yeh;
|
|
}
|
|
|
|
|
|
//AMMO PODS
|
|
datablock WheeledVehicleData(AmmoPod) : MPBDamageProfile {
|
|
spawnOffset = "0 0 1.0";
|
|
renderWhenDestroyed = false;
|
|
canControl = true;
|
|
catagory = "Vehicles";
|
|
shapeFile = "stackable2l.dts";
|
|
multipassenger = false;
|
|
computeCRC = true;
|
|
|
|
debrisShapeName = "stackable2l.dts";
|
|
debris = ShapeDebris;
|
|
|
|
drag = 0.0;
|
|
density = 20.0;
|
|
|
|
mountPose[0] = sitting;
|
|
numMountPoints = 1;
|
|
isProtectedMountPoint[0] = true;
|
|
|
|
cameraMaxDist = 20;
|
|
cameraOffset = 6;
|
|
cameraLag = 1.5;
|
|
explosion = HGVehicleExplosion;
|
|
explosionDamage = 0.25;
|
|
explosionRadius = 5.0;
|
|
|
|
maxSteeringAngle = 0.3; // 20 deg.
|
|
|
|
// Used to test if the station can deploy
|
|
stationPoints[1] = "-2.3 -7.38703 -0.65";
|
|
stationPoints[2] = "-2.3 -11.8 -0.65";
|
|
stationPoints[3] = "0 -7.38703 -0.65";
|
|
stationPoints[4] = "0 -11.8 -0.65";
|
|
stationPoints[5] = "2.3 -7.38703 -0.65";
|
|
stationPoints[6] = "2.3 -11.8 -0.65";
|
|
|
|
// Rigid Body
|
|
mass = 1000;
|
|
bodyFriction = 0.8;
|
|
bodyRestitution = 0.5;
|
|
minRollSpeed = 3;
|
|
gyroForce = 400;
|
|
gyroDamping = 0.3;
|
|
stabilizerForce = 10;
|
|
minDrag = 10;
|
|
softImpactSpeed = 15; // Play SoftImpact Sound
|
|
hardImpactSpeed = 25; // Play HardImpact Sound
|
|
|
|
// Ground Impact Damage (uses DamageType::Ground)
|
|
minImpactSpeed = 24;
|
|
speedDamageScale = 0.025;
|
|
|
|
// Object Impact Damage (uses DamageType::Impact)
|
|
collDamageThresholdVel = 15;
|
|
collDamageMultiplier = 0.03;
|
|
|
|
// Engine
|
|
engineTorque = 0 * 745;
|
|
breakTorque = 0 * 745;
|
|
maxWheelSpeed = 10;
|
|
|
|
// Springs
|
|
springForce = 8000;
|
|
springDamping = 1300;
|
|
antiSwayForce = 6000;
|
|
staticLoadScale = 2;
|
|
|
|
// Tires
|
|
tireRadius = 1.6;
|
|
tireFriction = 10.0;
|
|
tireRestitution = 0.5;
|
|
tireLateralForce = 3000;
|
|
tireLateralDamping = 400;
|
|
tireLateralRelaxation = 1;
|
|
tireLongitudinalForce = 12000;
|
|
tireLongitudinalDamping = 600;
|
|
tireLongitudinalRelaxation = 1;
|
|
tireEmitter = TireEmitter;
|
|
|
|
//
|
|
maxDamage = 2.0;
|
|
destroyedLevel = 2.0;
|
|
|
|
isShielded = false;
|
|
energyPerDamagePoint = 125;
|
|
maxEnergy = 600;
|
|
jetForce = 0;
|
|
minJetEnergy = 60;
|
|
jetEnergyDrain = 0;
|
|
rechargeRate = 1.0;
|
|
|
|
jetSound = MPBThrustSound;
|
|
engineSound = MPBEngineSound;
|
|
squeelSound = AssaultVehicleSkid;
|
|
softImpactSound = GravSoftImpactSound;
|
|
hardImpactSound = HardImpactSound;
|
|
//wheelImpactSound = WheelImpactSound;
|
|
|
|
//
|
|
softSplashSoundVelocity = 5.0;
|
|
mediumSplashSoundVelocity = 8.0;
|
|
hardSplashSoundVelocity = 12.0;
|
|
exitSplashSoundVelocity = 8.0;
|
|
|
|
exitingWater = VehicleExitWaterSoftSound;
|
|
impactWaterEasy = VehicleImpactWaterSoftSound;
|
|
impactWaterMedium = VehicleImpactWaterMediumSound;
|
|
impactWaterHard = VehicleImpactWaterHardSound;
|
|
waterWakeSound = VehicleWakeMediumSplashSound;
|
|
|
|
minMountDist = 3;
|
|
|
|
damageEmitter[0] = SmallLightDamageSmoke;
|
|
damageEmitter[1] = SmallHeavyDamageSmoke;
|
|
damageEmitter[2] = DamageBubbles;
|
|
damageEmitterOffset[0] = "3.0 0.5 0.0 ";
|
|
damageEmitterOffset[1] = "-3.0 0.5 0.0 ";
|
|
damageLevelTolerance[0] = 0.3;
|
|
damageLevelTolerance[1] = 0.7;
|
|
numDmgEmitterAreas = 2;
|
|
|
|
splashEmitter[0] = VehicleFoamDropletsEmitter;
|
|
splashEmitter[1] = VehicleFoamEmitter;
|
|
|
|
shieldImpact = VehicleShieldImpact;
|
|
|
|
cmdCategory = "Tactical";
|
|
cmdIcon = CMDGroundMPBIcon;
|
|
cmdMiniIconName = "commander/MiniIcons/com_mpb_grey";
|
|
targetNameTag = 'Ammunition';
|
|
targetTypeTag = 'Pod';
|
|
sensorData = VehiclePulseSensor;
|
|
|
|
observeParameters = "1 12 12";
|
|
|
|
shieldEffectScale = "0.85 1.2 0.7";
|
|
};
|
|
|
|
function MakeAmmoPod(%frd, %right, %src, %i) {
|
|
if(!isObject(%src)) {
|
|
return;
|
|
}
|
|
%vec = vectorAdd(vectorScale(%right,getWord($PodPos[%i],0)),vectorScale(%frd,getWord($PodPos[%i],1)));
|
|
%posa = vectorAdd(%src.getPosition(),%vec);
|
|
%pos = vectorAdd(%posa, "0 0 -16");
|
|
|
|
%pod = new WheeledVehicle() {
|
|
dataBlock = AmmoPod;
|
|
position = %pos;
|
|
rotation = "0 0 1 0";
|
|
team = %src.team;
|
|
};
|
|
MissionCleanUp.add(%pod);
|
|
|
|
%pod.flying = 1;
|
|
AmmoPodScanLoop(%pod);
|
|
|
|
return %pod;
|
|
}
|
|
|
|
function AmmoPodScanLoop(%pod) {
|
|
if(!isObject(%pod)) {
|
|
if(%pod.flying) {
|
|
//mid air = die
|
|
return;
|
|
}
|
|
else {
|
|
return;
|
|
}
|
|
}
|
|
%podPos = %pod.getPosition();
|
|
%ZGrd = GetTerrainHeight(%podPos);
|
|
%landPos = ""@getWord(%podPos, 0)@" "@getWord(%podPos, 1)@" "@%ZGrd@"";
|
|
//time to land?
|
|
if(vectorDist(%podPos, %landPos) < 70) {
|
|
echo("ammo pod land");
|
|
%pod.setVelocity("0 0 0");
|
|
%pod.flying = 0;
|
|
//pod explodes...
|
|
%pod.damage(0, %pod.GetPosition(), 99999, $DamageType::Explosion);
|
|
//Drop Contents
|
|
%gunNum = getRandom(1,10);
|
|
switch(%gunNum) {
|
|
//colt
|
|
case 1:
|
|
WeaponDrop(%pod.GetPosition(), "pistol");
|
|
//S3
|
|
case 2:
|
|
WeaponDrop(%pod.GetPosition(), "S3Rifle");
|
|
//Mp26
|
|
case 3:
|
|
WeaponDrop(%pod.GetPosition(), "Mp26");
|
|
//Pg700
|
|
case 4:
|
|
WeaponDrop(%pod.GetPosition(), "Pg700");
|
|
//RPG
|
|
case 5:
|
|
WeaponDrop(%pod.GetPosition(), "RPG");
|
|
//Flamer
|
|
case 6:
|
|
WeaponDrop(%pod.GetPosition(), "flamer");
|
|
//wp400
|
|
case 7:
|
|
WeaponDrop(%pod.GetPosition(), "WP400");
|
|
//m1700
|
|
case 8:
|
|
WeaponDrop(%pod.GetPosition(), "M1700");
|
|
//miniCG
|
|
case 9:
|
|
WeaponDrop(%pod.GetPosition(), "MiniChaingun");
|
|
//Rep Kits
|
|
case 10:
|
|
for(%i = 0; %i < 4; %i++) {
|
|
%blockNum = getRandom(1,2);
|
|
if(%blockNum == 1) {
|
|
%block = RepairKit;
|
|
}
|
|
else {
|
|
%block = RepairPatch;
|
|
}
|
|
%reps = new Item() {
|
|
datablock = %block;
|
|
static = false;
|
|
rotate = false;
|
|
position = %pod.getPosition();
|
|
};
|
|
missionCleanup.add(%reps);
|
|
}
|
|
}
|
|
}
|
|
schedule(250, 0, "AmmoPodScanLoop", %pod);
|
|
}
|