To make the boss fight in Jackson Square more compelling, I scripted a new attack based on the Bone Barrage attack (a basic, linear 4 projectile attack). The new attack, Tarot Barrage, creates 9 tarot cards in an arc above the caster. After a brief delay, the cards launch towards the player, homing in on him in rapid succession.
//==================================================================================
//Extends the original Bone Barrage attack to create the Tarot Barrage boss ability
//By: Blake Alexander, SMU Guildhall
//==================================================================================
simulated function CreateNeedle()
{
local vector RealStartLoc;
local VChamp_TarotBarrageProjectile SpawnedProjectile;
local Vector aim;
local Vector offset;
local Rotator tmpRot;
// This is the location where the projectile is spawned, creating an arc over the caster's head
RealStartLoc = GetPhysicalFireStartLoc();
offset.Y = -(150 * sin(((currentNum) * 3.14 / (NeedleNum - 1)) - (1.57)));
offset.Z = 100 + (50 * sin(((currentNum) * 6.28 / (NeedleNum - 1)) - (1.57)));
// This sets the projectile's spawn rotation
tmpRot = Rotator(offset);
tmpRot.Yaw += (Instigator.Rotation).Yaw;//OffsetDegree * 65535/360;
offset = VSize(offset) * Vector(tmpRot);
// Call the projectile spawn function
RealStartLoc += offset;
SpawnedProjectile = VChamp_TarotBarrageProjectile(Spawn(GetProjectileClass(),,, RealStartLoc));
if( SpawnedProjectile != None && !SpawnedProjectile.bDeleteMe )
{
if(GetALocalPlayerController().Pawn!=none)
aim = VPawn(GetALocalPlayerController().Pawn).Location - RealStartLoc;
else
aim = Vector(Rotation);
aim = Normal(aim);
SpawnedProjectile.Create( aim, TimeBeforeFlying );
}
}
DefaultProperties
{
SelfDamage = 0
CoolDown=0.1 //Used for Virgil
WeaponRange = 10000 //Used for Virgil
AbilityRange=50 //Used for enemies, but the boss AI overrides this
Spread(0)= 0
CastTime = 0
WeaponFireSnd(0)=SoundCue'vd_sounds_needlebarrage.Sounds.MagicWeapon_AirEnergyShot_Cue'
TimeBeforeFlying= 1 // This delays the cards overhead briefly before launching
NeedleNum = 9 // Number of tarot card projectiles
RandomRadius = 25
NeedleFlyingInterval = 0.05 // Rate at which tarot cards appear
attackFrequency=0.1 // Since the attack is only called through kismet commands, we want an extremely short cooldown so that it fires when called
WeaponProjectiles(0)=class'VChamp_TarotBarrageProjectile'
// The new projectile class contains the scripting for launch speed, acceleration, homing, projectile size, and damage
}