ironsphererpg/scripts/rpgplayer.cs
Jusctsch5 d3f3397686 T2RPG: Remove Mana loss while ascending in water
The blue bar is used for your Jet ability in Tribes 2. In T2RPG, it
represents Mana. This was another relic of Jet usage that wasn't cleaned
up when moving over to the T2RPG player object.
2015-02-21 21:01:11 -06:00

1239 lines
34 KiB
C#

// Load dts shapes and merge animations (moved to top of player.cs for testing)
exec("shapes/base_male.cs");
//exec("shapes/light_male.cs");
exec("shapes/mino.cs");
//exec("shapes/fish.cs"); damn fish.
//rpg's default armor for now
datablock PlayerData(MaleHumanArmor) : LightPlayerDamageProfile
{
emap = true;
className = Armor;
shapeFile = "base_male.dts";
cameraMaxDist = 3;
computeCRC = false;
canObserve = true;
cmdCategory = "Clients";
cmdIcon = CMDPlayerIcon;
cmdMiniIconName = "commander/MiniIcons/com_player_grey";
hudImageNameFriendly[0] = "";
hudImageNameEnemy[0] = "";
hudRenderModulated[0] = true;
hudRenderAlways[0] = true;
hudImageNameFriendly[1] = "";
hudImageNameEnemy[1] = "";
hudRenderModulated[1] = true;
hudRenderAlways[1] = true;
hudRenderCenter[1] = true;
hudRenderDistance[1] = true;
hudImageNameFriendly[2] = "";
hudImageNameEnemy[2] = "";
hudRenderModulated[2] = true;
hudRenderAlways[2] = true;
hudRenderCenter[2] = true;
hudRenderDistance[2] = true;
cameraDefaultFov = 90.0;
cameraMinFov = 5.0;
cameraMaxFov = 120.0;
debrisShapeName = "debris_player.dts";
debris = playerDebris;
aiAvoidThis = true;
minLookAngle = -1.4;
maxLookAngle = 1.4;
maxFreelookAngle = 3.0;
mass = 80;
drag = 0.3;
maxdrag = 0.4;
density = 10;
maxDamage = 1.0;
maxEnergy = 100;
repairRate = 0.0033;
energyPerDamagePoint = 75.0; // shield energy required to block one point of damage
rechargeRate = 0.01;
jetForce = 1.0;
underwaterJetForce = 26.21 * 100 * 1.5;//swiming?
underwaterVertJetFactor = 10000.0;
jetEnergyDrain = 0.0;
underwaterJetEnergyDrain = 0.00;
minJetEnergy = 1.0;
maxJetHorizontalPercentage = 10.0;
runForce = 48 * 120 *2;
runEnergyDrain = 0.005;
minRunEnergy = 0.0;
maxForwardSpeed = 20;
maxBackwardSpeed = 18;
maxSideSpeed = 18;
maxUnderwaterForwardSpeed = 15;
maxUnderwaterBackwardSpeed = 12;
maxUnderwaterSideSpeed = 12;
jumpForce = 6 * 90;
jumpEnergyDrain = 0;
minJumpEnergy = 0;
jumpDelay = 0;
recoverDelay = 9;
recoverRunForceScale = 0.1;
minImpactSpeed = 30;
speedDamageScale = 0.02;
//jetSound = none;
//wetJetSound = none;
//jetEmitter = none;
boundingBox = "1.2 1.2 2.3";
pickupRadius = 0.75;
// damage location details
boxNormalHeadPercentage = 0.83;
boxNormalTorsoPercentage = 0.49;
boxHeadLeftPercentage = 0;
boxHeadRightPercentage = 1;
boxHeadBackPercentage = 0;
boxHeadFrontPercentage = 1;
//Foot Prints
decalData = LightMaleFootprint;
decalOffset = 0.25;
footPuffEmitter = LightPuffEmitter;
footPuffNumParts = 15;
footPuffRadius = 0.20;
//dustEmitter = LiftoffDustEmitter;
splash = PlayerSplash;
splashVelocity = 4.0;
splashAngle = 67.0;
splashFreqMod = 300.0;
splashVelEpsilon = 0.60;
bubbleEmitTime = 0.4;
splashEmitter[0] = PlayerFoamDropletsEmitter;
splashEmitter[1] = PlayerFoamEmitter;
splashEmitter[2] = PlayerBubbleEmitter;
mediumSplashSoundVelocity = 10.0;
hardSplashSoundVelocity = 20.0;
exitSplashSoundVelocity = 5.0;
// Controls over slope of runnable/jumpable surfaces
runSurfaceAngle = 60;
jumpSurfaceAngle = 60;
minJumpSpeed = 20;
maxJumpSpeed = 30;
maxJetForwardSpeed = 30;
horizMaxSpeed = 680;
horizResistSpeed = 33;
horizResistFactor = 0.35;
upMaxSpeed = 8000;
upResistSpeed = 25;
upResistFactor = 0.3;
// heat inc'ers and dec'ers
heatDecayPerSec = 1.0 / 30.0; // takes 30 seconds to clear heat sig.
heatIncreasePerSec = 0.1; // takes 30.0 seconds of constant jet to get full heat sig.
footstepSplashHeight = 0.35;
//Footstep Sounds
LFootSoftSound = LFootLightSoftSound;
RFootSoftSound = RFootLightSoftSound;
LFootHardSound = LFootLightHardSound;
RFootHardSound = RFootLightHardSound;
LFootMetalSound = LFootLightMetalSound;
RFootMetalSound = RFootLightMetalSound;
LFootSnowSound = LFootLightSnowSound;
RFootSnowSound = RFootLightSnowSound;
LFootShallowSound = LFootLightShallowSplashSound;
RFootShallowSound = RFootLightShallowSplashSound;
LFootWadingSound = LFootLightWadingSound;
RFootWadingSound = RFootLightWadingSound;
LFootUnderwaterSound = LFootLightUnderwaterSound;
RFootUnderwaterSound = RFootLightUnderwaterSound;
LFootBubblesSound = LFootLightBubblesSound;
RFootBubblesSound = RFootLightBubblesSound;
movingBubblesSound = ArmorMoveBubblesSound;
waterBreathSound = WaterBreathMaleSound;
impactSoftSound = ImpactLightSoftSound;
impactHardSound = ImpactLightHardSound;
impactMetalSound = ImpactLightMetalSound;
impactSnowSound = ImpactLightSnowSound;
skiSoftSound = SkiAllSoftSound;
skiHardSound = SkiAllHardSound;
skiMetalSound = SkiAllMetalSound;
skiSnowSound = SkiAllSnowSound;
impactWaterEasy = ImpactLightWaterEasySound;
impactWaterMedium = ImpactLightWaterMediumSound;
impactWaterHard = ImpactLightWaterHardSound;
groundImpactMinSpeed = 10.0;
groundImpactShakeFreq = "4.0 4.0 4.0";
groundImpactShakeAmp = "1.0 1.0 1.0";
groundImpactShakeDuration = 0.8;
groundImpactShakeFalloff = 10.0;
exitingWater = ExitingWaterLightSound;
observeParameters = "0.5 4.5 4.5";
};
datablock PlayerData(DeathKnightArmor) : HeavyMaleHumanArmor
{
emap = true;
shapeFile = "Heavy_male.dts";
mass = 180;
drag = 1.0;
maxdrag = 1.5;
density = 10;
maxDamage = 1.0;
maxEnergy = 100;
repairRate = 0.0033;
energyPerDamagePoint = 75.0; // shield energy required to block one point of damage
rechargeRate = 0.256;
jetForce = 100 * 180;
underwaterJetForce = 100 * 180 * 2.0;
underwaterVertJetFactor = 1.5;
jetEnergyDrain = 0.0;
underwaterJetEnergyDrain = 0.0;
minJetEnergy = 1;
maxJetHorizontalPercentage = 1.0;
runForce = 100 * 180;
runEnergyDrain = 0;
minRunEnergy = 0;
maxForwardSpeed = 100;
maxBackwardSpeed = 100;
maxSideSpeed = 100;
maxUnderwaterForwardSpeed = 100;
maxUnderwaterBackwardSpeed = 100;
maxUnderwaterSideSpeed = 100;
recoverDelay = 1;
recoverRunForceScale = 1.2;
jumpForce = 20 * 180;
jumpEnergyDrain = 0;
minJumpEnergy = 0;
jumpDelay = 0;
// heat inc'ers and dec'ers
heatDecayPerSec = 1.0 / 30.0; // takes 30 seconds to clear heat sig.
heatIncreasePerSec = 0.0; // takes 3.0 seconds of constant jet to get full heat sig.
// Controls over slope of runnable/jumpable surfaces
runSurfaceAngle = 90;
jumpSurfaceAngle = 90;
minJumpSpeed = 20;
maxJumpSpeed = 30;
horizMaxSpeed = 80;
horizResistSpeed = 20;
horizResistFactor = 0.3;
maxJetForwardSpeed = 180;
upMaxSpeed = 40;
upResistSpeed = 35;
upResistFactor = 0.15;
minImpactSpeed = 45;
speedDamageScale = 0.006;
//jetSound = none;
//wetJetSound = none;
//jetEmitter = none;
boundingBox = "1.4 1.4 2.4";
splash = PlayerSplash;
splashVelocity = 4.0;
splashAngle = 67.0;
splashFreqMod = 300.0;
splashVelEpsilon = 0.60;
bubbleEmitTime = 0.4;
splashEmitter[0] = PlayerFoamDropletsEmitter;
splashEmitter[1] = PlayerFoamEmitter;
splashEmitter[2] = PlayerBubbleEmitter;
mediumSplashSoundVelocity = 10.0;
hardSplashSoundVelocity = 20.0;
exitSplashSoundVelocity = 5.0;
observeParameters = "2.5 6.5 6.5";
};
datablock PlayerData(ElementalArmor) : LightPlayerDamageProfile
{
emap = true;
className = Armor;
shapeFile = "base_male.dts";
cameraMaxDist = 3;
computeCRC = false;
canObserve = true;
cmdCategory = "Clients";
cmdIcon = CMDPlayerIcon;
cmdMiniIconName = "commander/MiniIcons/com_player_grey";
hudImageNameFriendly[0] = "";
hudImageNameEnemy[0] = "";
hudRenderModulated[0] = true;
hudRenderAlways[0] = true;
hudImageNameFriendly[1] = "";
hudImageNameEnemy[1] = "";
hudRenderModulated[1] = true;
hudRenderAlways[1] = true;
hudRenderCenter[1] = true;
hudRenderDistance[1] = true;
hudImageNameFriendly[2] = "";
hudImageNameEnemy[2] = "";
hudRenderModulated[2] = true;
hudRenderAlways[2] = true;
hudRenderCenter[2] = true;
hudRenderDistance[2] = true;
cameraDefaultFov = 90.0;
cameraMinFov = 5.0;
cameraMaxFov = 120.0;
debrisShapeName = "debris_player.dts";
debris = playerDebris;
aiAvoidThis = true;
minLookAngle = -1.4;
maxLookAngle = 1.4;
maxFreelookAngle = 3.0;
mass = 90;
drag = 0.3;
maxdrag = 0.4;
density = 10;
maxDamage = 1.0;
maxEnergy = 100;
repairRate = 0.0033;
energyPerDamagePoint = 75.0; // shield energy required to block one point of damage
rechargeRate = 7.0;
jetForce = 150.0;
underwaterJetForce = 26.21 * 100 * 1.5;//swiming?
underwaterVertJetFactor = 10000.0;
jetEnergyDrain = 0.0;
underwaterJetEnergyDrain = 0.06;
minJetEnergy = 1.0;
maxJetHorizontalPercentage = 10.0;
runForce = 55 * 90;
runEnergyDrain = 0.005;
minRunEnergy = 0.0;
maxForwardSpeed = 25;
maxBackwardSpeed = 15;
maxSideSpeed = 20;
maxUnderwaterForwardSpeed = 6;
maxUnderwaterBackwardSpeed = 5.4;
maxUnderwaterSideSpeed = 5.4;
jumpForce = 6 * 90;
jumpEnergyDrain = 1;
minJumpEnergy = 1;
jumpDelay = 0;
recoverDelay = 9;
recoverRunForceScale = 1.2;
minImpactSpeed = 45;
speedDamageScale = 0.004;
//jetSound = none;
//wetJetSound = none;
//jetEmitter = none;
boundingBox = "1.2 1.2 2.3";
pickupRadius = 0.75;
// damage location details
boxNormalHeadPercentage = 0.83;
boxNormalTorsoPercentage = 0.49;
boxHeadLeftPercentage = 0;
boxHeadRightPercentage = 1;
boxHeadBackPercentage = 0;
boxHeadFrontPercentage = 1;
//Foot Prints
decalData = LightMaleFootprint;
decalOffset = 0.25;
footPuffEmitter = LightPuffEmitter;
footPuffNumParts = 15;
footPuffRadius = 0.20;
//dustEmitter = LiftoffDustEmitter;
splash = PlayerSplash;
splashVelocity = 4.0;
splashAngle = 67.0;
splashFreqMod = 300.0;
splashVelEpsilon = 0.60;
bubbleEmitTime = 0.4;
splashEmitter[0] = PlayerFoamDropletsEmitter;
splashEmitter[1] = PlayerFoamEmitter;
splashEmitter[2] = PlayerBubbleEmitter;
mediumSplashSoundVelocity = 10.0;
hardSplashSoundVelocity = 20.0;
exitSplashSoundVelocity = 5.0;
// Controls over slope of runnable/jumpable surfaces
runSurfaceAngle = 90;
jumpSurfaceAngle = 90;
minJumpSpeed = 20;
maxJumpSpeed = 30;
maxJetForwardSpeed = 30;
horizMaxSpeed = 680;
horizResistSpeed = 33;
horizResistFactor = 0.35;
upMaxSpeed = 8000;
upResistSpeed = 25;
upResistFactor = 0.3;
// heat inc'ers and dec'ers
heatDecayPerSec = 1.0 / 30.0; // takes 3 seconds to clear heat sig.
heatIncreasePerSec = 0.0; // takes 3.0 seconds of constant jet to get full heat sig.
footstepSplashHeight = 0.35;
//Footstep Sounds
LFootSoftSound = LFootLightSoftSound;
RFootSoftSound = RFootLightSoftSound;
LFootHardSound = LFootLightHardSound;
RFootHardSound = RFootLightHardSound;
LFootMetalSound = LFootLightMetalSound;
RFootMetalSound = RFootLightMetalSound;
LFootSnowSound = LFootLightSnowSound;
RFootSnowSound = RFootLightSnowSound;
LFootShallowSound = LFootLightShallowSplashSound;
RFootShallowSound = RFootLightShallowSplashSound;
LFootWadingSound = LFootLightWadingSound;
RFootWadingSound = RFootLightWadingSound;
LFootUnderwaterSound = LFootLightUnderwaterSound;
RFootUnderwaterSound = RFootLightUnderwaterSound;
LFootBubblesSound = LFootLightBubblesSound;
RFootBubblesSound = RFootLightBubblesSound;
movingBubblesSound = ArmorMoveBubblesSound;
waterBreathSound = WaterBreathMaleSound;
impactSoftSound = ImpactLightSoftSound;
impactHardSound = ImpactLightHardSound;
impactMetalSound = ImpactLightMetalSound;
impactSnowSound = ImpactLightSnowSound;
skiSoftSound = SkiAllSoftSound;
skiHardSound = SkiAllHardSound;
skiMetalSound = SkiAllMetalSound;
skiSnowSound = SkiAllSnowSound;
impactWaterEasy = ImpactLightWaterEasySound;
impactWaterMedium = ImpactLightWaterMediumSound;
impactWaterHard = ImpactLightWaterHardSound;
groundImpactMinSpeed = 10.0;
groundImpactShakeFreq = "4.0 4.0 4.0";
groundImpactShakeAmp = "1.0 1.0 1.0";
groundImpactShakeDuration = 0.8;
groundImpactShakeFalloff = 10.0;
exitingWater = ExitingWaterLightSound;
observeParameters = "0.5 4.5 4.5";
};
datablock PlayerData(ElfArmor) : LightPlayerDamageProfile
{
emap = true;
className = Armor;
shapeFile = "base_male.dts";
cameraMaxDist = 3;
computeCRC = false;
canObserve = true;
cmdCategory = "Clients";
cmdIcon = CMDPlayerIcon;
cmdMiniIconName = "commander/MiniIcons/com_player_grey";
hudImageNameFriendly[0] = "";
hudImageNameEnemy[0] = "";
hudRenderModulated[0] = true;
hudRenderAlways[0] = true;
hudImageNameFriendly[1] = "";
hudImageNameEnemy[1] = "";
hudRenderModulated[1] = true;
hudRenderAlways[1] = true;
hudRenderCenter[1] = true;
hudRenderDistance[1] = true;
hudImageNameFriendly[2] = "";
hudImageNameEnemy[2] = "";
hudRenderModulated[2] = true;
hudRenderAlways[2] = true;
hudRenderCenter[2] = true;
hudRenderDistance[2] = true;
cameraDefaultFov = 90.0;
cameraMinFov = 5.0;
cameraMaxFov = 120.0;
debrisShapeName = "debris_player.dts";
debris = playerDebris;
aiAvoidThis = true;
minLookAngle = -1.4;
maxLookAngle = 1.4;
maxFreelookAngle = 3.0;
mass = 90;
drag = 0.3;
maxdrag = 0.4;
density = 10;
maxDamage = 1.0;
maxEnergy = 100;
repairRate = 0.0033;
energyPerDamagePoint = 75.0; // shield energy required to block one point of damage
rechargeRate = 0.2;
jetForce = 0.0;
underwaterJetForce = 26.21 * 100 * 1.5;//swiming?
underwaterVertJetFactor = 10000.0;
jetEnergyDrain = 0.0;
underwaterJetEnergyDrain = 0.06;
minJetEnergy = 1.0;
maxJetHorizontalPercentage = 10.0;
runForce = 50 * 90;
runEnergyDrain = 0.005;
minRunEnergy = 0.0;
maxForwardSpeed = 13;
maxBackwardSpeed = 11;
maxSideSpeed = 11;
maxUnderwaterForwardSpeed = 6;
maxUnderwaterBackwardSpeed = 5.4;
maxUnderwaterSideSpeed = 5.4;
jumpForce = 6 * 120;
jumpEnergyDrain = 0;
minJumpEnergy = 1;
jumpDelay = 0;
recoverDelay = 9;
recoverRunForceScale = 1.2;
minImpactSpeed = 45;
speedDamageScale = 0.004;
//jetSound = none;
//wetJetSound = none;
//jetEmitter = none;
boundingBox = "1.2 1.2 2.3";
pickupRadius = 0.75;
// damage location details
boxNormalHeadPercentage = 0.83;
boxNormalTorsoPercentage = 0.49;
boxHeadLeftPercentage = 0;
boxHeadRightPercentage = 1;
boxHeadBackPercentage = 0;
boxHeadFrontPercentage = 1;
//Foot Prints
decalData = LightMaleFootprint;
decalOffset = 0.25;
footPuffEmitter = LightPuffEmitter;
footPuffNumParts = 15;
footPuffRadius = 0.20;
//dustEmitter = LiftoffDustEmitter;
splash = PlayerSplash;
splashVelocity = 4.0;
splashAngle = 67.0;
splashFreqMod = 300.0;
splashVelEpsilon = 0.60;
bubbleEmitTime = 0.4;
splashEmitter[0] = PlayerFoamDropletsEmitter;
splashEmitter[1] = PlayerFoamEmitter;
splashEmitter[2] = PlayerBubbleEmitter;
mediumSplashSoundVelocity = 10.0;
hardSplashSoundVelocity = 20.0;
exitSplashSoundVelocity = 5.0;
// Controls over slope of runnable/jumpable surfaces
runSurfaceAngle = 85;
jumpSurfaceAngle = 80;
minJumpSpeed = 20;
maxJumpSpeed = 30;
maxJetForwardSpeed = 30;
horizMaxSpeed = 680;
horizResistSpeed = 33;
horizResistFactor = 0.35;
upMaxSpeed = 8000;
upResistSpeed = 25;
upResistFactor = 0.3;
// heat inc'ers and dec'ers
heatDecayPerSec = 1.0 / 30.0; // takes 3 seconds to clear heat sig.
heatIncreasePerSec = 0.0; // takes 3.0 seconds of constant jet to get full heat sig.
footstepSplashHeight = 0.35;
//Footstep Sounds
LFootSoftSound = LFootLightSoftSound;
RFootSoftSound = RFootLightSoftSound;
LFootHardSound = LFootLightHardSound;
RFootHardSound = RFootLightHardSound;
LFootMetalSound = LFootLightMetalSound;
RFootMetalSound = RFootLightMetalSound;
LFootSnowSound = LFootLightSnowSound;
RFootSnowSound = RFootLightSnowSound;
LFootShallowSound = LFootLightShallowSplashSound;
RFootShallowSound = RFootLightShallowSplashSound;
LFootWadingSound = LFootLightWadingSound;
RFootWadingSound = RFootLightWadingSound;
LFootUnderwaterSound = LFootLightUnderwaterSound;
RFootUnderwaterSound = RFootLightUnderwaterSound;
LFootBubblesSound = LFootLightBubblesSound;
RFootBubblesSound = RFootLightBubblesSound;
movingBubblesSound = ArmorMoveBubblesSound;
waterBreathSound = WaterBreathMaleSound;
impactSoftSound = ImpactLightSoftSound;
impactHardSound = ImpactLightHardSound;
impactMetalSound = ImpactLightMetalSound;
impactSnowSound = ImpactLightSnowSound;
skiSoftSound = SkiAllSoftSound;
skiHardSound = SkiAllHardSound;
skiMetalSound = SkiAllMetalSound;
skiSnowSound = SkiAllSnowSound;
impactWaterEasy = ImpactLightWaterEasySound;
impactWaterMedium = ImpactLightWaterMediumSound;
impactWaterHard = ImpactLightWaterHardSound;
groundImpactMinSpeed = 10.0;
groundImpactShakeFreq = "4.0 4.0 4.0";
groundImpactShakeAmp = "1.0 1.0 1.0";
groundImpactShakeDuration = 0.8;
groundImpactShakeFalloff = 10.0;
exitingWater = ExitingWaterLightSound;
observeParameters = "0.5 4.5 4.5";
};
datablock PlayerData(MonsterArmor) : MaleHumanArmor
{
emap = true;
className = Armor;
shapeFile = "bioderm_light.dts";
cameraMaxDist = 3;
computeCRC = false;
rechargeRate = 5.01;
jetForce = 1.0;
underwaterJetForce = 26.21 * 100 * 1.5;//swiming?
underwaterVertJetFactor = 10000.0;
jetEnergyDrain = 0.0;
underwaterJetEnergyDrain = 0.06;
minJetEnergy = 1.0;
maxJetHorizontalPercentage = 50.0;
runForce = 48 * 90;
runEnergyDrain = 0.005;
minRunEnergy = 0.0;
maxForwardSpeed = 10;
maxBackwardSpeed = 9;
maxSideSpeed = 9;
maxUnderwaterForwardSpeed = 60;
maxUnderwaterBackwardSpeed = 50.4;
maxUnderwaterSideSpeed = 50.4;
runSurfaceAngle = 85;
jumpSurfaceAngle = 80;
};
datablock PlayerData(GnollArmor) : MonsterArmor
{
emap = true;
className = Armor;
};
datablock PlayerData(MinotaurArmor) : MonsterArmor
{
emap = true;
className = Armor;
shapeFile = "Mino.dts";
};
datablock PlayerData(OrcArmor) : MonsterArmor
{
emap = true;
className = Armor;
shapeFile = "bioderm_medium.dts";
};
datablock PlayerData(OgreArmor) : MonsterArmor
{
emap = true;
className = Armor;
shapeFile = "bioderm_heavy.dts";
};
datablock PlayerData(GoblinArmor) : MonsterArmor
{
emap = true;
className = Armor;
};
datablock PlayerData(MaleOrcArmor) : MonsterArmor
{
className = Armor;
shapeFile = "bioderm_light.dts";
cameraMaxDist = 3;
computeCRC = false;
emap = true;
};
datablock PlayerData(FishArmor) : LightPlayerDamageProfile
{
emap = true;
className = Armor;
shapeFile = "fish.dts";
cameraMaxDist = 3;
computeCRC = false;
canObserve = true;
cmdCategory = "Clients";
cmdIcon = CMDPlayerIcon;
cmdMiniIconName = "commander/MiniIcons/com_player_grey";
hudImageNameFriendly[0] = "";
hudImageNameEnemy[0] = "";
hudRenderModulated[0] = true;
hudRenderAlways[0] = true;
hudImageNameFriendly[1] = "";
hudImageNameEnemy[1] = "";
hudRenderModulated[1] = true;
hudRenderAlways[1] = true;
hudRenderCenter[1] = true;
hudRenderDistance[1] = true;
hudImageNameFriendly[2] = "";
hudImageNameEnemy[2] = "";
hudRenderModulated[2] = true;
hudRenderAlways[2] = true;
hudRenderCenter[2] = true;
hudRenderDistance[2] = true;
cameraDefaultFov = 90.0;
cameraMinFov = 5.0;
cameraMaxFov = 120.0;
debrisShapeName = "debris_player.dts";
debris = playerDebris;
aiAvoidThis = true;
minLookAngle = -1.4;
maxLookAngle = 1.4;
maxFreelookAngle = 3.0;
mass = 10;
drag = 0.3;
maxdrag = 0.4;
density = 2;
maxDamage = 1.0;
maxEnergy = 100;
repairRate = 0.0033;
energyPerDamagePoint = 75.0; // shield energy required to block one point of damage
rechargeRate = 0.51;
jetForce = 5.0;
underwaterJetForce = 26.21 * 100 * 1.5;
underwaterVertJetFactor = 80.0;
jetEnergyDrain = 0.0;
underwaterJetEnergyDrain = 0.01;
minJetEnergy = 1.0;
maxJetHorizontalPercentage = 1000.0;
runForce = 48 * 90;
runEnergyDrain = 0.005;
minRunEnergy = 0.0;
maxForwardSpeed = 0;
maxBackwardSpeed = 0;
maxSideSpeed = 0;
maxUnderwaterForwardSpeed = 20;
maxUnderwaterBackwardSpeed = 15.4;
maxUnderwaterSideSpeed = 15.4;
jumpForce = 100;
jumpEnergyDrain = 0;
minJumpEnergy = 1;
jumpDelay = 1;
recoverDelay = 9;
recoverRunForceScale = 1.2;
minImpactSpeed = 45;
speedDamageScale = 0.004;
//jetSound = none;
//wetJetSound = none;
//jetEmitter = none;
boundingBox = "1.2 1.2 1.3";
pickupRadius = 0.75;
// damage location details
boxNormalHeadPercentage = 0.83;
boxNormalTorsoPercentage = 0.49;
boxHeadLeftPercentage = 0;
boxHeadRightPercentage = 1;
boxHeadBackPercentage = 0;
boxHeadFrontPercentage = 1;
//Foot Prints
decalData = LightMaleFootprint;
decalOffset = 0.25;
footPuffEmitter = LightPuffEmitter;
footPuffNumParts = 15;
footPuffRadius = 0.20;
dustEmitter = LiftoffDustEmitter;
splash = PlayerSplash;
splashVelocity = 4.0;
splashAngle = 67.0;
splashFreqMod = 300.0;
splashVelEpsilon = 0.60;
bubbleEmitTime = 0.4;
splashEmitter[0] = PlayerFoamDropletsEmitter;
splashEmitter[1] = PlayerFoamEmitter;
splashEmitter[2] = PlayerBubbleEmitter;
mediumSplashSoundVelocity = 10.0;
hardSplashSoundVelocity = 20.0;
exitSplashSoundVelocity = 5.0;
// Controls over slope of runnable/jumpable surfaces
runSurfaceAngle = 70;
jumpSurfaceAngle = 80;
minJumpSpeed = 20;
maxJumpSpeed = 30;
maxJetForwardSpeed = 30;
horizMaxSpeed = 68;
horizResistSpeed = 33;
horizResistFactor = 0.35;
upMaxSpeed = 8000;
upResistSpeed = 25;
upResistFactor = 0.3;
// heat inc'ers and dec'ers
heatDecayPerSec = 1.0 / 30.0; // takes 3 seconds to clear heat sig.
heatIncreasePerSec = 0.0; // takes 3.0 seconds of constant jet to get full heat sig.
footstepSplashHeight = 0.35;
//Footstep Sounds
LFootSoftSound = LFootLightSoftSound;
RFootSoftSound = RFootLightSoftSound;
LFootHardSound = LFootLightHardSound;
RFootHardSound = RFootLightHardSound;
LFootMetalSound = LFootLightMetalSound;
RFootMetalSound = RFootLightMetalSound;
LFootSnowSound = LFootLightSnowSound;
RFootSnowSound = RFootLightSnowSound;
LFootShallowSound = LFootLightShallowSplashSound;
RFootShallowSound = RFootLightShallowSplashSound;
LFootWadingSound = LFootLightWadingSound;
RFootWadingSound = RFootLightWadingSound;
LFootUnderwaterSound = LFootLightUnderwaterSound;
RFootUnderwaterSound = RFootLightUnderwaterSound;
LFootBubblesSound = LFootLightBubblesSound;
RFootBubblesSound = RFootLightBubblesSound;
movingBubblesSound = ArmorMoveBubblesSound;
waterBreathSound = WaterBreathMaleSound;
impactSoftSound = ImpactLightSoftSound;
impactHardSound = ImpactLightHardSound;
impactMetalSound = ImpactLightMetalSound;
impactSnowSound = ImpactLightSnowSound;
skiSoftSound = SkiAllSoftSound;
skiHardSound = SkiAllHardSound;
skiMetalSound = SkiAllMetalSound;
skiSnowSound = SkiAllSnowSound;
impactWaterEasy = ImpactLightWaterEasySound;
impactWaterMedium = ImpactLightWaterMediumSound;
impactWaterHard = ImpactLightWaterHardSound;
groundImpactMinSpeed = 10.0;
groundImpactShakeFreq = "4.0 4.0 4.0";
groundImpactShakeAmp = "1.0 1.0 1.0";
groundImpactShakeDuration = 0.8;
groundImpactShakeFalloff = 10.0;
exitingWater = ExitingWaterLightSound;
observeParameters = "0.5 4.5 4.5";
};
%file = new FileObject();
%fname = "temp/playerload.cs";//our eval workaround
//Load the player tree
%file.openforwrite(%fname);
for($maxarmor = 0; $maxarmor <= 100; $maxarmor++)
{
//time to hack around the game
%factor = (100-$maxarmor)/50;
%file.writeline("datablock PlayerData(MaleHumanArmor" @ $maxarmor @ ") : MaleHumanArmor ");
%file.writeline("{");
%file.writeline("runForce = 48 * 90 *" @ %factor @ ";");
%file.writeline("runEnergyDrain = " @ 0.005 + (1 - %factor) / 1000 @ ";");
%file.writeline("minRunEnergy = 0.0 ;");
%file.writeline("maxForwardSpeed = " @ 10 * %factor @ ";");
%file.writeline("maxBackwardSpeed = " @ 5 * %factor @ ";");
%file.writeline("maxSideSpeed = " @ 7 * %factor @ ";");
%file.writeline("jumpForce = " @ 6 * 90 * %factor @ ";");
%file.writeline("jumpEnergyDrain = " @ 2 - %factor @ ";");
%file.writeline(" emap = true;");
%file.writeline("};");
}
//Notes: MaleHumanArmor70 is speed 0
// MaleHumanArmor20 is normal speed
// MaleHumanArmor0 is faster than normal.
%file.close();
$tmp = "";
compile(%fname);
exec(%fname);
%file.delete();//delete the file object...
deletefile(%fname);//bye bye temp file, save memory...
deletefile(%fname @ ".dso");
function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
{
if (%obj.getState() $= "Dead")
return;
%dataBlock = %col.getDataBlock();
%className = %dataBlock.className;
%client = %obj.client;
// player collided with a vehicle?
%node = -1;
if (%forceVehicleNode !$= "" || (%className $= WheeledVehicleData || %className $= FlyingVehicleData || %className $= HoverVehicleData) &&
%obj.mountVehicle && %obj.getState() $= "Move" && %col.getDamageState() !$= "Destroyed") {
return;
}
else if (%className $= "Armor") {
}
}
function Player::onEndSequence(%data, %obj, %thread)
{
//echo("%data: " @ %data);
//echo("%obj: " @ %obj);
//echo("%thread: " @ %thread);
}
function playDeathAnimation(%player, %damageLocation, %type)
{
%player.stopThread(%client.currThread);
cancel(%client.rootthread);
%vertPos = firstWord(%damageLocation);
%quadrant = getWord(%damageLocation, 1);
//echo("vert Pos: " @ %vertPos);
//echo("quad: " @ %quadrant);
if( %type == $DamageType::Explosion || %type == $DamageType::Mortar || %type == $DamageType::Grenade)
{
if(%quadrant $= "front_left" || %quadrant $= "front_right")
%curDie = $PlayerDeathAnim::ExplosionBlowBack;
else
%curDie = $PlayerDeathAnim::TorsoBackFallForward;
}
else if(%vertPos $= "head")
{
if(%quadrant $= "front_left" || %quadrant $= "front_right" )
%curDie = $PlayerDeathAnim::HeadFrontDirect;
else
%curDie = $PlayerDeathAnim::HeadBackFallForward;
}
else if(%vertPos $= "torso")
{
if(%quadrant $= "front_left" )
%curDie = $PlayerDeathAnim::TorsoLeftSpinDeath;
else if(%quadrant $= "front_right")
%curDie = $PlayerDeathAnim::TorsoRightSpinDeath;
else if(%quadrant $= "back_left" )
%curDie = $PlayerDeathAnim::TorsoBackFallForward;
else if(%quadrant $= "back_right")
%curDie = $PlayerDeathAnim::TorsoBackFallForward;
}
else if (%vertPos $= "legs")
{
if(%quadrant $= "front_left" || %quadrant $= "back_left")
%curDie = $PlayerDeathAnim::LegsLeftGimp;
if(%quadrant $= "front_right" || %quadrant $= "back_right")
%curDie = $PlayerDeathAnim::LegsRightGimp;
}
if(%curDie $= "" || %curDie < 1 || %curDie > 11)
%curDie = 1;
if(!%player.client.isfish)
%player.setActionThread("Death" @ %curDie);
}
function Armor::setActionThread(%this, %thread)
{
//die!
}
function Armor::onMount(%this,%obj,%vehicle,%node)
{
if(%this.client.isfish) return;
if (%node == 0)
{
// Node 0 is the pilot's pos.
%obj.setTransform("0 0 0 0 0 1 0");
%obj.setActionThread(%vehicle.getDatablock().mountPose[%node],true,true);
if(!%obj.inStation)
%obj.lastWeapon = (%obj.getMountedImage($WeaponSlot) == 0 ) ? "" : %obj.getMountedImage($WeaponSlot).getName().item;
//%obj.unmountImage($WeaponSlot);
if(!%obj.client.isAIControlled())
{
%obj.setControlObject(%vehicle);
%obj.client.setObjectActiveImage(%vehicle, 2);
}
//E3 respawn...
if(%obj == %obj.lastVehicle.lastPilot && %obj.lastVehicle != %vehicle)
{
schedule(15000, %obj.lastVehicle,"vehicleAbandonTimeOut", %obj.lastVehicle);
%obj.lastVehicle.lastPilot = "";
}
if(%vehicle.lastPilot !$= "" && %vehicle == %vehicle.lastPilot.lastVehicle)
%vehicle.lastPilot.lastVehicle = "";
%vehicle.abandon = false;
%vehicle.lastPilot = %obj;
%obj.lastVehicle = %vehicle;
// update the vehicle's team
if((%vehicle.getTarget() != -1) && %vehicle.getDatablock().cantTeamSwitch $= "")
{
setTargetSensorGroup(%vehicle.getTarget(), %obj.client.getSensorGroup());
if( %vehicle.turretObject > 0 )
setTargetSensorGroup(%vehicle.turretObject.getTarget(), %obj.client.getSensorGroup());
}
// Send a message to the client so they can decide if they want to change view or not:
commandToClient( %obj.client, 'VehicleMount' );
}
else
{
// tailgunner/passenger positions
if(%vehicle.getDataBlock().mountPose[%node] !$= "")
%obj.setActionThread(%vehicle.getDatablock().mountPose[%node]);
else
%obj.setActionThread("root", true);
}
// -------------------------------------------------------------------------
// z0dd - ZOD, 10/06/02. announce to any other passengers that you've boarded
if(%vehicle.getDatablock().numMountPoints > 1)
{
%nodeName = findNodeName(%vehicle, %node); // function in vehicle.cs
for(%i = 0; %i < %vehicle.getDatablock().numMountPoints; %i++)
{
if (%vehicle.getMountNodeObject(%i) > 0)
{
if(%vehicle.getMountNodeObject(%i).client != %obj.client)
{
//%team = (%obj.team == %vehicle.getMountNodeObject(%i).client.team ? 'Teammate' : 'Enemy');
//messageClient( %vehicle.getMountNodeObject(%i).client, 'MsgShowPassenger', '\c2%3: \c3%1\c2 has boarded in the \c3%2\c2 position.', %obj.client.name, %nodeName, %team );
}
commandToClient( %vehicle.getMountNodeObject(%i).client, 'showPassenger', %node, true);
}
}
}
//make sure they don't have any packs active
// if ( %obj.getImageState( $BackpackSlot ) $= "activate")
// %obj.use("Backpack");
if ( %obj.getImageTrigger( $BackpackSlot ) )
%obj.setImageTrigger( $BackpackSlot, false );
//AI hooks
%obj.client.vehicleMounted = %vehicle;
AIVehicleMounted(%vehicle);
if(%obj.client.isAIControlled())
%this.AIonMount(%obj, %vehicle, %node);
}
function Armor::onEnterLiquid(%data, %obj, %coverage, %type)
{
switch(%type)
{
case 0:
//Water
case 1:
//Ocean Water
case 2:
//River Water
case 3:
//Stagnant Water
case 4:
//Lava
%obj.liquidDamage(%data, $DamageLava, $DamageType::Lava);
case 5:
//Hot Lava
%obj.liquidDamage(%data, $DamageHotLava, $DamageType::Lava);
case 6:
//Crusty Lava
%obj.liquidDamage(%data, $DamageCrustyLava, $DamageType::Lava);
case 7:
//Quick Sand
}
if(isobject(%obj.client))
if(%obj.client.isaicontrolled())
{
Game.onAIEnterLiquid(%data, %obj, %type);
}
}
function Armor::onLeaveLiquid(%data, %obj, %type)
{
switch(%type)
{
case 0:
//Water
case 1:
//Ocean Water
case 2:
//River Water
case 3:
//Stagnant Water
case 4:
//Lava
case 5:
//Hot Lava
case 6:
//Crusty Lava
case 7:
//Quick Sand
}
if(%obj.lDamageSchedule !$= "")
{
cancel(%obj.lDamageSchedule);
%obj.lDamageSchedule = "";
}
if(isobject(%obj.client))
if(%obj.client.isaicontrolled())
{
Game.onAILeaveLiquid(%data, %obj, %type);
}
}
function Player::use( %this,%data )
{
// If player is in a station then he can't use any items
if(%this.station !$= "")
return false;
// Convert the word "Backpack" to whatever is in the backpack slot.
if ( %data $= "Backpack" )
{
if ( %this.inStation )
return false;
if ( %this.isPilot() )
{
if(%this.getControlObject() == 0)
{
%vehicle = %this.lastVehicle;
echo(%vehicle SPC %vehicle.getDatablock().mountPose[0]);
%this.setTransform("0 0 0 0 0 1 0");
%this.setActionThread(%vehicle.getDatablock().mountPose[0],true, true);
%this.setControlObject(%vehicle);
}
else
{
%this.setActionThread("root", true, true);
%this.setControlObject(0);
}
}
//else if ( %this.isWeaponOperator() )
//{
// messageClient( %this.client, 'MsgCantUsePack', '\c2You can\'t use your pack while in a weaponry position.~wfx/misc/misc.error.wav' );
// return( false );
//}
%image = %this.getMountedImage( $BackpackSlot );
if ( %image )
%data = %image.item;
}
// Can't use some items when piloting or your a weapon operator
//if ( %this.isPilot() || %this.isWeaponOperator() )
// if ( %data.getName() !$= "RepairKit" )
// return false;
return ShapeBase::use( %this, %data );
}