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