home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 58 / pcpp58b_TRIBES.iso / Tribes / base / scripts.vol / vehicle.cs < prev   
Encoding:
Text File  |  1998-12-16  |  11.1 KB  |  392 lines

  1. //----------------------------------------------------------------------------
  2. //
  3.  
  4. FlierData Scout
  5. {
  6.     explosionId = flashExpLarge;
  7.     debrisId = flashDebrisLarge;
  8.     className = "Vehicle";
  9.    shapeFile = "flyer";
  10.    shieldShapeName = "shield_medium";
  11.    mass = 9.0;
  12.    drag = 1.0;
  13.    density = 1.2;
  14.    maxBank = 0.5;
  15.    maxPitch = 0.5;
  16.    maxSpeed = 50;
  17.    minSpeed = -2;
  18.     lift = 0.75;
  19.     maxAlt = 25;
  20.     maxVertical = 10;
  21.     maxDamage = 0.6;
  22.     damageLevel = {1.0, 1.0};
  23.     maxEnergy = 100;
  24.     accel = 0.4;
  25.  
  26.     groundDamageScale = 1.0;
  27.  
  28.     projectileType = FlierRocket;
  29.     reloadDelay = 2.0;
  30.     repairRate = 0;
  31.     fireSound = SoundFireFlierRocket;
  32.     damageSound = SoundFlierCrash;
  33.     ramDamage = 1.5;
  34.     ramDamageType = -1;
  35.     mapFilter = 2;
  36.     mapIcon = "M_vehicle";
  37.     visibleToSensor = true;
  38.     shadowDetailMask = 2;
  39.  
  40.     mountSound = SoundFlyerMount;
  41.     dismountSound = SoundFlyerDismount;
  42.     idleSound = SoundFlyerIdle;
  43.     moveSound = SoundFlyerActive;
  44.  
  45.     visibleDriver = true;
  46.     driverPose = 22;
  47. };
  48.  
  49. FlierData LAPC
  50. {
  51.     explosionId = flashExpLarge;
  52.     debrisId = flashDebrisLarge;
  53.     className = "Vehicle";
  54.    shapeFile = "hover_apc_sml";
  55.    shieldShapeName = "shield_large";
  56.    mass = 18.0;
  57.    drag = 1.0;
  58.    density = 1.2;
  59.    maxBank = 0.25;
  60.    maxPitch = 0.175;
  61.    maxSpeed = 25;
  62.    minSpeed = -1;
  63.     lift = 0.5;
  64.     maxAlt = 15;
  65.     maxVertical = 6;
  66.     maxDamage = 1.5;
  67.     damageLevel = {1.0, 1.0};
  68.     destroyDamage = 1.0;
  69.     maxEnergy = 100;
  70.     accel = 0.25;
  71.  
  72.     groundDamageScale = 0.50;
  73.  
  74.     repairRate = 0;
  75.     ramDamage = 2;
  76.     ramDamageType = -1;
  77.     mapFilter = 2;
  78.     mapIcon = "M_vehicle";
  79.     fireSound = SoundFireFlierRocket;
  80.     reloadDelay = 3.0;
  81.     damageSound = SoundTankCrash;
  82.     visibleToSensor = true;
  83.     shadowDetailMask = 2;
  84.  
  85.     mountSound = SoundFlyerMount;
  86.     dismountSound = SoundFlyerDismount;
  87.     idleSound = SoundFlyerIdle;
  88.     moveSound = SoundFlyerActive;
  89.  
  90.     visibleDriver = true;
  91.     driverPose = 23;
  92. };
  93.  
  94. FlierData HAPC
  95. {
  96.     explosionId = flashExpLarge;
  97.     debrisId = flashDebrisLarge;
  98.     className = "Vehicle";
  99.    shapeFile = "hover_apc";
  100.    shieldShapeName = "shield_large";
  101.    mass = 18.0;
  102.    drag = 1.0;
  103.    density = 1.2;
  104.    maxBank = 0.25;
  105.    maxPitch = 0.175;
  106.    maxSpeed = 25;                                   
  107.    minSpeed = -1;
  108.     lift = 0.35;
  109.     maxAlt = 15;
  110.     maxVertical = 6;
  111.     maxDamage = 2.0;
  112.     damageLevel = {1.0, 1.0};
  113.     maxEnergy = 100;
  114.     accel = 0.25;
  115.  
  116.     groundDamageScale = 0.125;
  117.  
  118.     repairRate = 0;
  119.     ramDamage = 2;
  120.     ramDamageType = -1;
  121.     mapFilter = 2;
  122.     mapIcon = "M_vehicle";
  123.     fireSound = SoundFireFlierRocket;
  124.     reloadDelay = 3.0;
  125.     damageSound = SoundTankCrash;
  126.     visibleToSensor = true;
  127.     shadowDetailMask = 2;
  128.  
  129.     mountSound = SoundFlyerMount;
  130.     dismountSound = SoundFlyerDismount;
  131.     idleSound = SoundFlyerIdle;
  132.     moveSound = SoundFlyerActive;
  133.  
  134.     visibleDriver = true;
  135.     driverPose = 23;
  136. };
  137.  
  138.  
  139. //----------------------------------------------------------------------------
  140.  
  141. $DamageScale[Scout, $ImpactDamageType] = 1.0;
  142. $DamageScale[Scout, $BulletDamageType] = 1.0;
  143. $DamageScale[Scout, $PlasmaDamageType] = 1.0;
  144. $DamageScale[Scout, $EnergyDamageType] = 1.0;
  145. $DamageScale[Scout, $ExplosionDamageType] = 1.0;
  146. $DamageScale[Scout, $ShrapnelDamageType] = 1.0;
  147. $DamageScale[Scout, $DebrisDamageType] = 1.0;
  148. $DamageScale[Scout, $MissileDamageType] = 1.0;
  149. $DamageScale[Scout, $LaserDamageType] = 1.0;
  150. $DamageScale[Scout, $MortarDamageType] = 1.0;
  151. $DamageScale[Scout, $BlasterDamageType] = 0.5;
  152. $DamageScale[Scout, $ElectricityDamageType] = 1.0;
  153. $DamageScale[Scout, $MineDamageType]        = 1.0;
  154.  
  155. $DamageScale[LAPC, $ImpactDamageType] = 1.0;
  156. $DamageScale[LAPC, $BulletDamageType] = 1.0;
  157. $DamageScale[LAPC, $PlasmaDamageType] = 1.0;
  158. $DamageScale[LAPC, $EnergyDamageType] = 1.0;
  159. $DamageScale[LAPC, $ExplosionDamageType] = 1.0;
  160. $DamageScale[LAPC, $ShrapnelDamageType] = 1.0;
  161. $DamageScale[LAPC, $DebrisDamageType] = 1.0;
  162. $DamageScale[LAPC, $MissileDamageType] = 1.0;
  163. $DamageScale[LAPC, $LaserDamageType] = 0.5;
  164. $DamageScale[LAPC, $MortarDamageType] = 1.0;
  165. $DamageScale[LAPC, $BlasterDamageType] = 0.5;
  166. $DamageScale[LAPC, $ElectricityDamageType] = 1.0;
  167. $DamageScale[LAPC, $MineDamageType]        = 1.0;
  168.  
  169. $DamageScale[HAPC, $ImpactDamageType] = 1.0;
  170. $DamageScale[HAPC, $BulletDamageType] = 1.0;
  171. $DamageScale[HAPC, $PlasmaDamageType] = 1.0;
  172. $DamageScale[HAPC, $EnergyDamageType] = 1.0;
  173. $DamageScale[HAPC, $ExplosionDamageType] = 1.0;
  174. $DamageScale[HAPC, $ShrapnelDamageType] = 1.0;
  175. $DamageScale[HAPC, $DebrisDamageType] = 1.0;
  176. $DamageScale[HAPC, $MissileDamageType] = 1.0;
  177. $DamageScale[HAPC, $LaserDamageType] = 0.5;
  178. $DamageScale[HAPC, $MortarDamageType] = 1.0;
  179. $DamageScale[HAPC, $BlasterDamageType] = 0.5;
  180. $DamageScale[HAPC, $ElectricityDamageType] = 1.0;
  181. $DamageScale[HAPC, $MineDamageType]        = 1.0;
  182.  
  183.  
  184. //----------------------------------------------------------------------------
  185.  
  186. function Vehicle::onAdd(%this)
  187. {
  188.     %this.shieldStrength = 0.0;
  189.     GameBase::setRechargeRate (%this, 10);
  190.     GameBase::setMapName (%this, "Vehicle");
  191. }
  192.  
  193. function Vehicle::onCollision (%this, %object)
  194. {
  195.     if(GameBase::getDamageLevel(%this) < (GameBase::getDataName(%this)).maxDamage) {
  196.         if (getObjectType (%object) == "Player" && (getSimTime() > %object.newMountTime || %object.lastMount != %this) && %this.fading == "")
  197.             {
  198.                 %armor = Player::getArmor(%object);
  199.               %client = Player::getClient(%object);
  200.                 if ((%armor == "larmor" || %armor == "lfemale") && Vehicle::canMount (%this, %object))
  201.                     {
  202.                         %weapon = Player::getMountedItem(%object,$WeaponSlot);
  203.                         if(%weapon != -1) {
  204.                             %object.lastWeapon = %weapon;
  205.                             Player::unMountItem(%object,$WeaponSlot);
  206.                         }
  207.                         Player::setMountObject(%object, %this, 1);
  208.                       Client::setControlObject(%client, %this);
  209.                         playSound (GameBase::getDataName(%this).mountSound, GameBase::getPosition(%this));
  210.                         %object.driver= 1;
  211.                     %object.vehicle = %this;
  212.                         %this.clLastMount = %client;
  213.                     }
  214.                 else if(GameBase::getDataName(%this) != Scout) 
  215.                     {
  216.                          %mountSlot= Vehicle::findEmptySeat(%this,%client); 
  217.                         if(%mountSlot) 
  218.                             {
  219.                                 %object.vehicleSlot = %mountSlot;
  220.                                 %object.vehicle = %this;
  221.                                 Player::setMountObject(%object, %this, %mountSlot);
  222.                                 playSound (GameBase::getDataName(%this).mountSound, GameBase::getPosition(%this));
  223.                             }
  224.                     }
  225.                 else if (GameBase::getControlClient(%this) == -1)
  226.                     Client::sendMessage(Player::getClient(%object),0,"You must be in Light Armor to pilot the vehicles.~wError_Message.wav");
  227.             }
  228.     }
  229. }
  230.  
  231. function Vehicle::findEmptySeat(%this,%client)
  232. {
  233.     if(GameBase::getDataName(%this) == HAPC)
  234.         %numSlots = 4;
  235.     else
  236.         %numSlots = 2;
  237.     %count=0;
  238.     for(%i=0;%i<%numSlots;%i++)  
  239.         if(%this.Seat[%i] == "") {
  240.             %slotPos[%count] = Vehicle::getMountPoint(%this,%i+2);
  241.             %slotVal[%count] = %i+2;
  242.             %lastEmpty = %i+2;
  243.             %count++;
  244.         }
  245.     if(%count == 1) {
  246.         %this.Seat[%lastEmpty-2] = %client;
  247.         return %lastEmpty;
  248.     }
  249.     else if (%count > 1)    {
  250.         %freeSlot = %slotVal[getClosestPosition(%count,GameBase::getPosition(%client),%slotPos[0],%slotPos[1],%slotPos[2],%slotPos[3])];
  251.         %this.Seat[%freeSlot-2] = %client;
  252.         return %freeSlot;
  253.     }
  254.     else
  255.         return "False";
  256. }
  257.  
  258. function getClosestPosition(%num,%playerPos,%slotPos0,%slotPos1,%slotPos2,%slotPos3)
  259. {
  260.     %playerX = getWord(%playerPos,0);
  261.     %playerY = getWord(%playerPos,1);
  262.     for(%i = 0 ;%i<%num;%i++) {
  263.         %x = (getWord(%slotPos[%i],0)) - %playerX;
  264.         %y = (getWord(%slotPos[%i],1)) - %playerY;
  265.         if(%x < 0)
  266.             %x *= -1;
  267.         if(%y < 0)
  268.             %y *= -1;
  269.         %newDistance = sqrt((%x*%x)+(%y*%y));
  270.         if(%newDistance < %distance || %distance == "") {
  271.               %distance = %newDistance;            
  272.             %closePos = %i;    
  273.         }
  274.     }        
  275.     return %closePos;
  276. }
  277.  
  278. function Vehicle::passengerJump(%this,%passenger,%mom)
  279. {
  280.     %armor = Player::getArmor(%passenger);
  281.     if(%armor == "larmor" || %armor == "lfemale") {
  282.         %height = 2;
  283.         %velocity = 70;
  284.         %zVec = 70;
  285.     }
  286.     else if(%armor == "marmor" || %armor == "mfemale") {
  287.         %height = 2;
  288.         %velocity = 100;
  289.         %zVec = 100;
  290.     }
  291.     else if(%armor == "harmor") {
  292.         %height = 2;
  293.         %velocity = 140;
  294.         %zVec = 110;
  295.     }
  296.  
  297.     %pos = GameBase::getPosition(%passenger);
  298.     %posX = getWord(%pos,0);
  299.     %posY    = getWord(%pos,1);
  300.     %posZ    = getWord(%pos,2);
  301.  
  302.     if(GameBase::testPosition(%passenger,%posX @ " " @ %posY @ " " @ (%posZ + %height))) {    
  303.         %client = Player::getClient(%passenger);
  304.         %this.Seat[%passenger.vehicleSlot-2] = "";
  305.         %passenger.vehicleSlot = "";
  306.        %passenger.vehicle= "";
  307.         Player::setMountObject(%passenger, -1, 0);
  308.         %rotZ = getWord(GameBase::getRotation(%passenger),2);
  309.         GameBase::setRotation(%passenger, "0 0 " @ %rotZ);
  310.         GameBase::setPosition(%passenger,%posX @ " " @ %posY @ " " @ (%posZ + %height));
  311.         %jumpDir = Vector::getFromRot(GameBase::getRotation(%passenger),%velocity,%zVec);
  312.         Player::applyImpulse(%passenger,%jumpDir);
  313.     }
  314.     else
  315.         Client::sendMessage(Player::getClient(%passanger),0,"Can not dismount - Obstacle in the way.~wError_Message.wav");
  316. }
  317.  
  318. function Vehicle::jump(%this,%mom)
  319. {
  320.    Vehicle::dismount(%this,%mom);
  321. }
  322.  
  323. function Vehicle::dismount(%this,%mom)
  324. {
  325.    %cl = GameBase::getControlClient(%this);
  326.    if(%cl != -1)
  327.    {
  328.       %pl = Client::getOwnedObject(%cl);
  329.       if(getObjectType(%pl) == "Player")
  330.       {
  331.            // dismount the player      
  332.             if(GameBase::testPosition(%pl, Vehicle::getMountPoint(%this,0))) {
  333.                 %pl.lastMount = %this;
  334.                 %pl.newMountTime = getSimTime() + 3.0;
  335.                 Player::setMountObject(%pl, %this, 0);
  336.                  Player::setMountObject(%pl, -1, 0);
  337.                 %rot = GameBase::getRotation(%this);
  338.                 %rotZ = getWord(%rot,2);
  339.                 GameBase::setRotation(%pl, "0 0 " @ %rotZ);
  340.                 Player::applyImpulse(%pl,%mom);
  341.                  Client::setControlObject(%cl, %pl);
  342.                 playSound (GameBase::getDataName(%this).dismountSound, GameBase::getPosition(%this));
  343.                 if(%pl.lastWeapon != "") {
  344.                     Player::useItem(%pl,%pl.lastWeapon);             
  345.                     %pl.lastWeapon = "";
  346.               }
  347.                 %pl.driver = "";
  348.                 %pl.vehicle = "";
  349.             }
  350.             else
  351.                 Client::sendMessage(%cl,0,"Can not dismount - Obstacle in the way.~wError_Message.wav");
  352.         }
  353.    }
  354. }
  355.  
  356. function Vehicle::onDestroyed (%this,%mom)
  357. {
  358. //    if($testcheats || $servercheats)
  359.     $TeamItemCount[GameBase::getTeam(%this) @ $VehicleToItem[GameBase::getDataName(%this)]]--;
  360.    %cl = GameBase::getControlClient(%this);
  361.     %pl = Client::getOwnedObject(%cl);
  362.     if(%pl != -1) {
  363.        Player::setMountObject(%pl, -1, 0);
  364.        Client::setControlObject(%cl, %pl);
  365.         if(%pl.lastWeapon != "") {
  366.             Player::useItem(%pl,%pl.lastWeapon);             
  367.             %pl.lastWeapon = "";
  368.         }
  369.         %pl.driver = "";
  370.     }
  371.     for(%i = 0 ; %i < 4 ; %i++)
  372.         if(%this.Seat[%i] != "") {
  373.             %pl = Client::getOwnedObject(%this.Seat[%i]);
  374.            Player::setMountObject(%pl, -1, 0);
  375.                Client::setControlObject(%this.Seat[%i], %pl);
  376.         }
  377.     calcRadiusDamage(%this, $DebrisDamageType, 2.5, 0.05, 25, 13, 2, 0.55, 
  378.         0.1, 225, 100); 
  379. }
  380.  
  381. function Vehicle::onDamage(%this,%type,%value,%pos,%vec,%mom,%object)
  382. {
  383.     %value *= $damageScale[GameBase::getDataName(%this), %type];
  384.     StaticShape::onDamage(%this,%type,%value,%pos,%vec,%mom,%object);
  385. }
  386.  
  387. function Vehicle::getHeatFactor(%this)
  388. {
  389.     // Not getting called right now because turrets don't track
  390.     // vehicles.  A hack has been placed in Player::getHeatFactor.
  391.    return 1.0;
  392. }