Sniper's Paradise!


Airstrike

The goal here is to create a trigger that a player can run up and touch to cause an airstrike, which is basically the creation of a volley of missiles pointed at a specified target. I made a subclass of Trigger and overrode the Touch() function so as to create the missiles, and use the Event/Tag variables to determine our target. This way a level editor could put this trigger in his/her level and set a desired target somewhere else, adding a cool nifty feature specific to that level.


// ===========================================
/  AirstrikeTrigger
// ===========================================
class AirstrikeTrigger expands Trigger;
// Here are some variables to make the trigger easier to
// configure.  MissileType is the class of missile that
// will get spawned, NumOfMissiles is the amount to create,
// Height is how high above we should create them, and offsetDist
// will determine the range of the target they should be
// created in.
var() class MissileType;
var() int NumOfMissiles, Height, OffsetDist;
// Touch() is where all the fun stuff happens.  First we check
// to see if we have a specified target, otherwise we just default
// to ourselves.  Then we go about the process of spawning the
// missile(s).
function Touch( actor Other )
{
  local Projectile Missile;
  local vector StartLocation, Offset;
  local rotator AimDirection;
  local int i;
  local Actor a, StrikeTarget;
  // Just use a foreach to go through all the Actors in the game
  // to see if one has the matching tag...
  foreach AllActors(class'Actor', a)
  {
    if (a.Tag == Event)
      StrikeTarget = a;
  }
  // If we didn't find a target, we become the target
  if (StrikeTarget == NONE)
    StrikeTarget = self;
  // IsRelevant() is a function in Trigger that will determine
  // if the actor that touched us meets the criteria to trigger
  // us.  So if a level editor configured this trigger to be
  // only triggered by only the blue team or whatever, IsRelevant()
  // would make sure that happens.
  if( IsRelevant( Other ) )
  {
    // We've been successfully touched by the right person (kinky)
    // so lets go about spawning our missiles.
    for (i = 0; i <= NumOfMissiles; i++)
    {
      // Offset is a random vector generated to keep all the missiles
      // from starting in the same place.  VRand() generates a vector
      // in a random direction, and we just multiply this times a 
      // random distance determined using the RandRange() function.
      // RandRange() simply generates a random number between a Min
      // and Max.
      Offset = VRand() * RandRange(OffsetDist * 0.5, OffsetDist * 1.5);
      // Our start location is simply the target's location plus the
      // desired height and the Offset vector we just generated.
      StartLocation = StrikeTarget.Location + (vect(0,0,1) * Height) + Offset;
      // AimDirection is found by subtracting out destination from our
      // starting point, with the destination being the Target's location
      // plus the offset.
      AimDirection = rotator( ((StrikeTarget.Location + Offset) - StartLocation) * 10000);
      // Now that we know everything, go ahead an spawn the desired
      // missile.  Note that we set the owner to Other, which is the
      // actor that touched us, so anybody who dies from an airstrike
      // will count as a frag for Other.
      Missile = Spawn(MissileType,Other,,StartLocation, AimDirection);
    }
  }
  // Make sure to call the normal trigger code so that we don't break the
  // previous functionality of the trigger.
  Super.Touch(Other);
}
defaultproperties
{
  NumOfMissiles=15
  Height=450
  OffsetDist=500
}


Spam Killer

Back To Top
2005 Sniper's Paradise
All logos and trademarks are properties of their respective owners.
Unreal™ is a registered trademark of Epic Games Inc.
Privacy Policy
Website by Softly
Powered by RUSH