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 }