Code:
class UTVehicle_Scarab_Content extends UTVehicle_Scarab;
/** dynamic light which moves around following primary fire beam impact point */
var UTDarkWalkerBeamLight BeamLight;
var float HornImpulseMag;
var float VehicleHornModifier;
var ParticleSystemComponent DarkwalkerHornEffect;
var repnotify bool bSpeakerReady;
var float SpeakerRadius;
var float SpeakerRechargeTime;
var SoundCue HornAttackSound;
replication
{
if (!bNetOwner)
bSpeakerReady;
}
event MantaDuckEffect()
{
if (bHoldingDuck)
{
VehicleEvent('CrushStart');
}
else
{
VehicleEvent('CrushStop');
}
}
function DriverLeft()
{
Super.DriverLeft();
if (Role == ROLE_Authority && UTVWeap_DarkWalkerTurret(Seats[0].Gun) != none)
{
UTVWeap_DarkWalkerTurret(Seats[0].Gun).StopBeamFiring();
}
}
/** Overloaded so we can attach the muzzle flash light to a custom socket */
simulated function CauseMuzzleFlashLight(int SeatIndex)
{
Super.CauseMuzzleFlashLight(SeatIndex);
if ( (SeatIndex == 0) && Seats[SeatIndex].MuzzleFlashLight != none )
{
Mesh.DetachComponent(Seats[SeatIndex].MuzzleFlashLight);
Mesh.AttachComponentToSocket(Seats[SeatIndex].MuzzleFlashLight, 'PrimaryMuzzleFlash');
}
}
simulated function SpawnImpactEmitter(vector HitLocation, vector HitNormal, const out MaterialImpactEffect ImpactEffect, int SeatIndex)
{
Super.SpawnImpactEmitter(HitLocation, HitNormal, ImpactEffect, SeatIndex);
if ( SeatIndex == 0 )
{
if (BeamLight == None || BeamLight.bDeleteMe)
{
BeamLight = Spawn(class'UTDarkWalkerBeamLight');
BeamLight.AmbientSound.Play();
}
BeamLight.SetLocation(HitLocation + HitNormal*128);
}
}
simulated function KillBeamEmitter()
{
Super.KillBeamEmitter();
if (BeamLight != None)
{
BeamLight.Destroy();
}
}
simulated event Destroyed()
{
Super.Destroyed();
if (BeamLight != None)
{
BeamLight.Destroy();
}
}
simulated function SetBeamEmitterHidden(bool bHide)
{
Super.SetBeamEmitterHidden(bHide);
if (bHide && BeamLight != None)
{
BeamLight.AmbientSound.Stop();
BeamLight.Destroy();
}
}
simulated function bool OverrideBeginFire(byte FireModeNum)
{
if (FireModeNum == 1)
{
if (bSpeakerReady)
{
PlayHornAttack();
}
return true;
}
return false;
}
function byte ChooseFireMode()
{
if (Controller != None && Controller.Enemy != None && bSpeakerReady && VSize2D(Controller.Enemy.Location - Location) <= SpeakerRadius)
{
return 1;
}
else
{
return 0;
}
}
function bool NeedToTurn(vector Targ)
{
// speaker fire is a radius, so if bot wants to do that, don't need to turn
return (ChooseFireMode() == 1) ? false : Super.NeedToTurn(Targ);
}
simulated function PlayHornAttack()
{
local Pawn HitPawn;
local vector HornImpulse, HitLocation, HitNormal;
local Pawn BoardPawn;
local UTVehicle_Scavenger UTScav;
local UTPawn OldDriver;
local UTVehicle UTV;
bSpeakerReady = false;
if (Trace(HitLocation, HitNormal, Location - vect(0,0,600), Location) != None)
{
DarkwalkerHornEffect.SetTranslation(HitLocation - Location);
}
else
{
HitLocation = Location;
HitLocation.Z -= 400;
DarkwalkerHornEffect.SetTranslation(vect(0,0,-400));
}
if (WorldInfo.NetMode != NM_DedicatedServer)
{
PlaySound(HornAttackSound, true);
DarkwalkerHornEffect.ActivateSystem();
}
if (Role == ROLE_Authority)
{
MakeNoise(1.0);
foreach OverlappingActors(class 'Pawn', HitPawn, SpeakerRadius, HitLocation)
{
if ( (HitPawn.Mesh != None) && !WorldInfo.GRI.OnSameTeam(HitPawn, self))
{
// throw him outwards also
HornImpulse = HitPawn.Location - HitLocation;
HornImpulse.Z = 0;
HornImpulse = HornImpulseMag * Normal(HornImpulse);
HornImpulse.Z = 250.0;
if (HitPawn.Physics != PHYS_RigidBody && HitPawn.IsA('UTPawn'))
{
HitPawn.Velocity += HornImpulse;
UTPawn(HitPawn).ForceRagdoll();
UTPawn(HitPawn).FeignDeathStartTime = WorldInfo.TimeSeconds + 1.5;
HitPawn.LastHitBy = Controller;
}
else if( UTVehicle_Hoverboard(HitPawn) != none)
{
HitPawn.Velocity += HornImpulse;
BoardPawn = UTVehicle_Hoverboard(HitPawn).Driver; // just in case the board gets destroyed from the ragdoll
UTVehicle_Hoverboard(HitPawn).RagdollDriver();
HitPawn = BoardPawn;
HitPawn.LastHitBy = Controller;
}
else if ( HitPawn.Physics == PHYS_RigidBody )
{
UTV = UTVehicle(HitPawn);
if(UTV != none)
{
// Special case for scavenger - force into ball mode for a bit.
UTScav = UTVehicle_Scavenger(UTV);
if(UTScav != None && UTScav.bDriving)
{
UTScav.BallStatus.bIsInBallMode = TRUE;
UTScav.BallStatus.bBoostOnTransition = FALSE;
UTScav.NextBallTransitionTime = WorldInfo.TimeSeconds + 2.0; // Stop player from putting legs out for 2 secs.
UTScav.BallModeTransition();
}
// See if darkwalker forces this player out of vehicle.
else if(UTV.bRagdollDriverOnDarkwalkerHorn)
{
OldDriver = UTPawn(UTV.Driver);
if (OldDriver != None)
{
UTV.DriverLeave(true);
OldDriver.Velocity += HornImpulse;
OldDriver.ForceRagdoll();
OldDriver.FeignDeathStartTime = WorldInfo.TimeSeconds + 1.5;
OldDriver.LastHitBy = Controller;
}
}
HitPawn.Mesh.AddImpulse(HornImpulse*VehicleHornModifier, HitLocation);
}
else
{
HitPawn.Mesh.AddImpulse(HornImpulse, HitLocation,, true);
}
}
}
}
}
SetTimer(SpeakerRechargeTime, false, 'ClearHornTimer');
}
simulated function ClearHornTimer()
{
bSpeakerReady = true;
}
simulated event ReplicatedEvent(name VarName)
{
if (VarName == 'bSpeakerReady')
{
if (!bSpeakerReady)
{
PlayHornAttack();
}
}
else
{
Super.ReplicatedEvent(VarName);
}
}
simulated function TeamChanged()
{
local MaterialInterface NewMaterial;
if( Team < PowerOrbTeamMaterials.length )
{
NewMaterial = PowerOrbTeamMaterials[Team];
}
else
{
NewMaterial = PowerOrbTeamMaterials[0];
}
if (NewMaterial != None)
{
Mesh.SetMaterial(1, NewMaterial);
if (DamageMaterialInstance[1] != None)
{
DamageMaterialInstance[1].SetParent(NewMaterial);
}
}
Super.TeamChanged();
}
defaultproperties
{
Begin Object Name=CollisionCylinder
CollisionHeight=100.0
CollisionRadius=140.0
Translation=(X=0.0,Y=0.0,Z=50.0)
End Object
Begin Object Name=SVehicleMesh
SkeletalMesh=SkeletalMesh'VH_Scarab.Mesh.VH_SK_Scarab'
AnimSets(0)=AnimSet'VH_Scarab.Anims.K_VH_Scarab'
AnimTreeTemplate=AnimTree'VH_Scarab.Anims.AT_VH_Scarab'
PhysicsAsset=PhysicsAsset'VH_Scarab.Mesh.VH_SK_Scarab_Physics'
//MorphSets[0]=MorphTargetSet'VH_DarkWalker.Mesh.SK_VH_DarkWalker_Torso_MorphTargets'
End Object
Begin Object Class=AudioComponent Name=WarningSound
SoundCue=SoundCue'A_Vehicle_DarkWalker.Cue.A_Vehicle_Darkwalker_WarningConeLoop'
End Object
WarningConeSound=WarningSound
Components.Add(WarningSound);
Seats(0)={( GunClass=class'UTVWeap_DarkWalkerTurret',
GunSocket=(MainGun_Fire),
GunPivotPoints=(headbone),
TurretVarPrefix="",
CameraTag=DriverViewSocket,
CameraOffset=-280,
CameraSafeOffset=(Z=200),
DriverDamageMult=0.0,
SeatIconPos=(X=0.46,Y=0.2),
TurretControls=(MainGunController),
CameraBaseOffset=(X=40,Y=0,Z=0),
MuzzleFlashLightClass=class'UTDarkWalkerMuzzleFlashLight',
WeaponEffects=((SocketName=MainGun_Fire,Offset=(X=0,Y=0),Scale3D=(X=18.0,Y=180.0,Z=18.0)),(SocketName=MainGun_01,Offset=(X=-35,Y=-3),Scale3D=(X=8.0,Y=10.0,Z=10.0)))
)}
// These muzzleflashes are the idle effects it seems, so start them with the engine.
VehicleEffects(0)=(EffectStartTag=EngineStart,EffectEndTag=EngineStop,EffectTemplate=ParticleSystem'VH_DarkWalker.Effects.P_VH_DarkWalker_MuzzleFlash',EffectSocket=MainGun_00)
VehicleEffects(1)=(EffectStartTag=EngineStart,EffectEndTag=EngineStop,EffectTemplate=ParticleSystem'VH_DarkWalker.Effects.P_VH_DarkWalker_MuzzleFlash',EffectSocket=MainGun_01)
VehicleEffects(2)=(EffectStartTag=TurretWeapon03,EffectEndTag=STOP_TurretWeapon00,EffectTemplate=ParticleSystem'VH_DarkWalker.Effects.P_VH_DarkWalker_Secondary_MuzzleFlash',EffectSocket=TurretBarrel_00)
VehicleEffects(3)=(EffectStartTag=TurretWeapon00,EffectEndTag=STOP_TurretWeapon01,EffectTemplate=ParticleSystem'VH_DarkWalker.Effects.P_VH_DarkWalker_Secondary_MuzzleFlash',EffectSocket=TurretBarrel_01)
VehicleEffects(4)=(EffectStartTag=TurretWeapon01,EffectEndTag=STOP_TurretWeapon02,EffectTemplate=ParticleSystem'VH_DarkWalker.Effects.P_VH_DarkWalker_Secondary_MuzzleFlash',EffectSocket=TurretBarrel_02)
VehicleEffects(5)=(EffectStartTag=TurretWeapon02,EffectEndTag=STOP_TurretWeapon03,EffectTemplate=ParticleSystem'VH_DarkWalker.Effects.P_VH_DarkWalker_Secondary_MuzzleFlash',EffectSocket=TurretBarrel_03)
VehicleEffects(6)=(EffectStartTag=EngineStart,EffectEndTag=EngineStop,EffectTemplate=ParticleSystem'VH_DarkWalker.Effects.P_VH_DarkWalker_AimBeam',EffectSocket=LT_AimBeamSocket)
VehicleEffects(7)=(EffectStartTag=EngineStart,EffectEndTag=EngineStop,EffectTemplate=ParticleSystem'VH_DarkWalker.Effects.P_VH_DarkWalker_AimBeam',EffectSocket=RT_AimBeamSocket)
VehicleEffects(8)=(EffectStartTag=EngineStart,EffectEndTag=EngineStop,EffectTemplate=ParticleSystem'VH_DarkWalker.Effects.P_VH_DarkWalker_PowerBall',EffectTemplate_Blue=ParticleSystem'VH_Darkwalker.Effects.P_VH_DarkWalker_PowerBall_Blue',EffectSocket=PowerBallSocket)
VehicleEffects(9)=(EffectStartTag=DamageSmoke,EffectEndTag=NoDamageSmoke,bRestartRunning=false,EffectTemplate=ParticleSystem'Envy_Effects.Vehicle_Damage.P_Vehicle_Damage_1_DarkWalker',EffectSocket=DamageSmoke01)
Begin Object Class=ParticleSystemComponent Name=HornEffect
Template=ParticleSystem'VH_DarkWalker.Effects.P_VH_DarkWalker_HornEffect'
bAutoActivate=false
Translation=(x=0.0,y=0.0,z=-400.0)
SecondsBeforeInactive=1.0f
End Object
Components.Add(HornEffect);
DarkwalkerHornEffect=HornEffect;
// Sounds
// Engine sound.
Begin Object Class=AudioComponent Name=MantaEngineSound
SoundCue=SoundCue'A_Vehicle_DarkWalker.Cue.A_Vehicle_DarkWalker_EngineLoopCue'
End Object
EngineSound=MantaEngineSound
Components.Add(MantaEngineSound);
CollisionSound=SoundCue'A_Vehicle_DarkWalker.Cue.A_Vehicle_DarkWalker_CollideCue'
EnterVehicleSound=SoundCue'A_Vehicle_DarkWalker.Cue.A_Vehicle_DarkWalker_StartCue'
ExitVehicleSound=SoundCue'A_Vehicle_DarkWalker.Cue.A_Vehicle_DarkWalker_StopCue'
// Scrape sound.
Begin Object Class=AudioComponent Name=BaseScrapeSound
SoundCue=SoundCue'A_Gameplay.A_Gameplay_Onslaught_MetalScrape01Cue'
End Object
ScrapeSound=BaseScrapeSound
Components.Add(BaseScrapeSound);
// Initialize sound parameters.
EngineStartOffsetSecs=2.0
EngineStopOffsetSecs=1.0
BodyAttachSocketName=Legsoz
BeamTemplate=ParticleSystem'VH_DarkWalker.Effects.P_VH_DarkWalker_MainGun_Beam'
BeamSockets(0)=MainGun_00
//BeamSockets(1)=MainGun_01
EndPointParamName=LinkBeamEnd
Begin Object Class=AudioComponent name=BeamAmbientSoundComponent
bShouldRemainActiveIfDropped=true
bStopWhenOwnerDestroyed=true
End Object
BeamAmbientSound=BeamAmbientSoundComponent
Components.Add(BeamAmbientSoundComponent)
BeamFireSound=SoundCue'A_Vehicle_DarkWalker.Cue.A_Vehicle_DarkWalker_FireBeamCue'
FlagBone=Headbone
HornAttackSound=SoundCue'A_Vehicle_DarkWalker.Cue.A_Vehicle_DarkWalker_HornCue'
SpawnInSound=SoundCue'A_Vehicle_Generic.Vehicle.VehicleFadeInNecris01Cue'
SpawnOutSound=SoundCue'A_Vehicle_Generic.Vehicle.VehicleFadeOutNecris01Cue'
ExplosionSound=SoundCue'A_Vehicle_DarkWalker.Cue.A_Vehicle_DarkWalker_ExplosionCue'
BigExplosionTemplates[0]=(Template=ParticleSystem'Envy_Effects.VH_Deaths.P_DarkWalker_Death_Main')
BigExplosionSocket=Legsoz
BodyType=class'UTWalkerBody_Scarab'
bSpeakerReady=true
SpeakerRadius=750.0f
SpeakerRechargeTime=7.0
HornImpulseMag=1250.0
VehicleHornModifier=5.3f
PassengerTeamBeaconOffset=(X=-150.0f,Y=0.0f,Z=0.0f)
TargetLocationAdjustment=(Z=150.0)
ConeParam=ConeScore
DamageMorphTargets(0)=(InfluenceBone=head,MorphNodeName=MorphNodeW_DamageFront,LinkedMorphNodeName=none,Health=300,DamagePropNames=(Damage3))
DamageMorphTargets(1)=(InfluenceBone=RtUpperTailFin,MorphNodeName=MorphNodeW_DamageRear,LinkedMorphNodeName=none,Health=300,DamagePropNames=(Damage2))
DamageMorphTargets(2)=(InfluenceBone=LtPanel_Damage,MorphNodeName=none,LinkedMorphNodeName=none,Health=250,DamagePropNames=(Damage1))
DamageMorphTargets(3)=(InfluenceBone=RtPanel_Damage,MorphNodeName=none,LinkedMorphNodeName=none,Health=250,DamagePropNames=(Damage1))
DamageParamScaleLevels(0)=(DamageParamName=Damage1,Scale=2.0)
DamageParamScaleLevels(1)=(DamageParamName=Damage2,Scale=1.6)
DamageParamScaleLevels(2)=(DamageParamName=Damage3,Scale=2.0)
HudCoords=(U=644,V=0,UL=-98,VL=129)
TeamMaterials[0]=MaterialInstanceConstant'VH_Scarab.Scarabmaterial01'
TeamMaterials[1]=MaterialInstanceConstant'VH_Scarab.Scarabmaterial01'
BurnOutMaterial[0]=MaterialInterface'VH_DarkWalker.Materials.MITV_VH_Darkwalker_Red_BO'
BurnOutMaterial[1]=MaterialInterface'VH_DarkWalker.Materials.MITV_VH_Darkwalker_Blue_BO'
//PowerOrbTeamMaterials[0]=MaterialInterface'VH_DarkWalker.Materials.M_VH_Darkwalker_EnergyCore_Glow'
//PowerOrbTeamMaterials[1]=MaterialInterface'VH_DarkWalker.Materials.M_VH_Darkwalker_EnergyCore_Glow_Blue'
//PowerOrbBurnoutTeamMaterials[0]=MaterialInterface'VH_DarkWalker.Materials.MITV_VH_Darkwalker_EnergyCore_Glow_BO'
//PowerOrbBurnoutTeamMaterials[1]=MaterialInterface'VH_DarkWalker.Materials.MITV_VH_Darkwalker_EnergyCore_Glow_Blue_BO'
//SpawnMaterialLists[0]=(Materials=(MaterialInterface'VH_DarkWalker.Materials.MI_VH_Darkwalker_Spawn_Red'))
//SpawnMaterialLists[1]=(Materials=(MaterialInterface'VH_DarkWalker.Materials.MI_VH_Darkwalker_Spawn_Blue'))
//NeedToPickUpAnnouncement=(AnnouncementSound=SoundNodeWave'A_Announcer_Status.Status.A_StatusAnnouncer_ManTheDarkwalker')
IconCoords=(U=907,UL=26,V=36,VL=37)
bHasEnemyVehicleSound=true
EnemyVehicleSound(0)=SoundNodeWave'A_Character_IGMale.BotStatus.A_BotStatus_IGMale_EnemyDarkwalker'
EnemyVehicleSound(1)=SoundNodeWave'A_Character_Jester.BotStatus.A_BotStatus_Jester_EnemyDarkwalker'
EnemyVehicleSound(2)=SoundNodeWave'A_Character_Othello.BotStatus.A_BotStatus_Othello_EnemyDarkwalker'
VehicleDestroyedSound(0)=SoundNodeWave'A_Character_IGMale.BotStatus.A_BotStatus_IGMale_EnemyDarkwalkerDestroyed'
VehicleDestroyedSound(1)=SoundNodeWave'A_Character_Jester.BotStatus.A_BotStatus_Jester_EnemyDarkwalkerDestroyed'
VehicleDestroyedSound(2)=SoundNodeWave'A_Character_Othello.BotStatus.A_BotStatus_Othello_EnemyDarkwalkerDestroyed'
AIPurpose=AIP_Any
}
Code:
class UTWalkerBody_Scarab extends UTQuadWalkerBody;
/** Light attached to the energy ball. */
var() protected PointLightComponent EnergyBallLight;
/** Holds energy ball's material so we can modify parameters. */
var protected transient MaterialInstanceConstant EnergyBallMatInst;
/** Current percentage the energy ball is powered. Range [0..1]. */
var private transient float CurrentEnergyBallPowerPct;
/** Goal energy ball power percentage (to interpolate towards). Range [0..1]. */
var private transient float GoalEnergyBallPowerPct;
/** InterpSpeed (for FInterpTo) used for interpolating the energy ball power up and down. */
var() protected const float EnergyBallPowerInterpSpeed;
/** Color for energy ball light in powered-on state. */
var() protected const color EnergyBallLightColor_PoweredOn;
/** Color for energy ball light in powered-off state. */
var() protected const color EnergyBallLightColor_PoweredOff;
/** Color for blue energy ball light in powered-on state. */
var() protected const color EnergyBallLightColor_PoweredOn_Blue;
/** Color for blue energy ball light in powered-off state. */
var() protected const color EnergyBallLightColor_PoweredOff_Blue;
/** Brightness for energy ball light in powered-on state. */
var() protected const float EnergyBallLightBrightness_PoweredOn;
/** Brightness for energy ball light in powered-off state. */
var() protected const float EnergyBallLightBrightness_PoweredOff;
/** Made a parameter because having an = in a name literal is verboten for some reason. */
var protected const Name EnergyBallMaterialParameterName;
/** Emitters for beams connecting powerball to shoulders */
var protected ParticleSystemComponent LegAttachBeams[NUM_WALKER_LEGS];
/** Name of beam endpoint parameter in the particle system */
var protected const name LegAttachBeamEndPointParamName;
/** ParticleSystem Templates for the Leg beams **/
var protected ParticleSystem PS_LegBeamTemplate;
var protected ParticleSystem PS_LegBeamTemplate_Blue;
/** Names of the top leg bones. LegAttachBeams will terminate here. */
var protected const name TopLegBoneName[NUM_WALKER_LEGS];
/** These keep the previous location of the legs and body so that we don't have to do expensive line traces if we have actually not moved their position **/
var protected vector PreviousLegLocation[NUM_WALKER_LEGS];
/** camera anim played when foot lands nearby */
var CameraAnim FootStepShake;
var float FootStepShakeRadius;
function PostBeginPlay()
{
local int Idx;
super.PostBeginPlay();
EnergyBallMatInst = SkeletalMeshComponent.CreateAndSetMaterialInstanceConstant(1);
SetEnergyBallPowerPercent(0.f);
// attach powerball light to the ball
SkeletalMeshComponent.AttachComponent(EnergyBallLight, BodyBoneName);
// attach leg attach beam emitters to the ball
for (Idx=0; Idx<NUM_WALKER_LEGS; ++Idx)
{
SkeletalMeshComponent.AttachComponent(LegAttachBeams[Idx], BodyBoneName);
}
}
final protected function SetEnergyBallPowerPercent(float Pct)
{
local float NewBrightness;
local color NewColor;
if( WalkerVehicle == none )
{
return;
}
// store it
CurrentEnergyBallPowerPct = Pct;
// set light color and brightness
if( WalkerVehicle.GetTeamNum() == 1 )
{
NewColor = EnergyBallLightColor_PoweredOff_Blue + (EnergyBallLightColor_PoweredOn_Blue - EnergyBallLightColor_PoweredOff) * CurrentEnergyBallPowerPct;
}
else
{
NewColor = EnergyBallLightColor_PoweredOff + (EnergyBallLightColor_PoweredOn - EnergyBallLightColor_PoweredOff) * CurrentEnergyBallPowerPct;
}
NewBrightness = EnergyBallLightBrightness_PoweredOff + (EnergyBallLightBrightness_PoweredOn - EnergyBallLightBrightness_PoweredOff) * CurrentEnergyBallPowerPct;
//`log( "SetEnergyBallPowerPercent: " $ WalkerVehicle.GetTeamNum() $ " NewBrightness: " $ NewBrightness );
EnergyBallLight.SetLightProperties(NewBrightness, NewColor);
// set material param
EnergyBallMatInst.SetScalarParameterValue(EnergyBallMaterialParameterName, CurrentEnergyBallPowerPct);
}
event PlayFootStep(int LegIdx)
{
local UTPlayerController PC;
local float Dist;
Super.PlayFootStep(LegIdx);
foreach LocalPlayerControllers(class'UTPlayerController', PC)
{
if (UTVehicleBase(PC.ViewTarget) == None || WalkerVehicle.Seats.Find('SeatPawn', UTVehicleBase(PC.ViewTarget)) == INDEX_NONE)
{
Dist = VSize(CurrentFootPosition[LegIdx] - PC.ViewTarget.Location);
if (Dist < FootStepShakeRadius)
{
PC.PlayCameraAnim(FootStepShake, 1.0 - (Dist / FootStepShakeRadius));
}
}
}
}
function Tick(float DeltaTime)
{
local float NewPowerPct, NewBrightness;
local int Idx;
local vector LegLocation;
super.Tick(DeltaTime);
// ball is powered on when driven, powered off otherwise
GoalEnergyBallPowerPct = (WalkerVehicle.bDriving && !WalkerVehicle.bDeadVehicle) ? 1.f : 0.f;
if (GoalEnergyBallPowerPct != CurrentEnergyBallPowerPct)
{
NewPowerPct = FInterpTo(CurrentEnergyBallPowerPct, GoalEnergyBallPowerPct, DeltaTime, EnergyBallPowerInterpSpeed);
SetEnergyBallPowerPercent(NewPowerPct);
}
else if (WalkerVehicle.bDeadVehicle)
{
// this will fade light to zero after it gets to the zero-energy color
NewBrightness = FInterpTo(EnergyBallLight.Brightness, 0.f, DeltaTime, EnergyBallPowerInterpSpeed);
EnergyBallLight.SetLightProperties(NewBrightness);
EnergyBallMatInst.SetScalarParameterValue(EnergyBallMaterialParameterName, 0.0f);
}
// set leg attach beam endpoints
for (Idx=0; Idx<NUM_WALKER_LEGS; ++Idx)
{
LegLocation = SkeletalMeshComponent.GetBoneLocation(TopLegBoneName[Idx]);
if( VSize(PreviousLegLocation[Idx] - LegLocation) > 1.0f )
{
//`log( "Ticking Walker PSC: " $ LegAttachBeams[Idx] );
LegAttachBeams[Idx].SetVectorParameter(LegAttachBeamEndPointParamName, LegLocation );
PreviousLegLocation[Idx] = LegLocation;
}
}
}
/** NOTE: this is actually what changes the colors on the PowerOrb on the legs of the Walker **/
simulated function TeamChanged()
{
local int LegIdx;
local ParticleSystem PS_LegBeam;
Super.TeamChanged();
if( WalkerVehicle.GetTeamNum() == 1 )
{
PS_LegBeam=PS_LegBeamTemplate_Blue;
}
else
{
PS_LegBeam=PS_LegBeamTemplate;
}
for( LegIdx = 0; LegIdx < NUM_WALKER_LEGS; ++LegIdx )
{
LegAttachBeams[LegIdx].SetTemplate( PS_LegBeam );
}
SetEnergyBallPowerPercent( CurrentEnergyBallPowerPct );
}
defaultproperties
{
bHasCrouchMode=true
FootStepEffects[0]=(MaterialType=Dirt,Sound=SoundCue'A_Vehicle_DarkWalker.Cue.A_Vehicle_DarkWalker_FootstepCue',ParticleTemplate=ParticleSystem'VH_Darkwalker.Effects.P_VH_DarkWalker_FootImpact_Dust')
FootStepEffects[1]=(MaterialType=Snow,Sound=SoundCue'A_Vehicle_DarkWalker.Cue.A_Vehicle_DarkWalker_FootstepCue',ParticleTemplate=ParticleSystem'VH_DarkWalker.Effects.P_VH_DarkWalker_FootImpact_Snow')
FootStepEffects[2]=(MaterialType=Water,Sound=SoundCue'A_Vehicle_DarkWalker.Cue.A_Vehicle_DarkWalker_FootstepCue',ParticleTemplate=ParticleSystem'Envy_Level_Effects_2.Vehicle_Water_Effects.P_DarkWalker_Water_Splash')
Foo****erEffect=ParticleSystem'Envy_Level_Effects_2.Vehicle_Water_Effects.P_DarkWalker_Water_Splash'
Begin Object Name=LegMeshComponent
SkeletalMesh=SkeletalMesh'VH_Scarab.Mesh.scarab_legs'
PhysicsAsset=PhysicsAsset'VH_Scarab.Mesh.VH_SK_ScarabLeg_Physics'
AnimSets(0)=AnimSet'VH_Scarab.Anims.K_VH_Scarab'
AnimTreeTemplate=AnimTree'VH_Scarab.Anims.AT_VH_ScarabLegs'
bUpdateJointsFromAnimation=TRUE
End Object
MinStepDist=820.0
MaxLegReach=8750.0
LegSpreadFactor=2.6
CustomGravityScale=0.f
FootEmbedDistance=62.0
LandedFootDistSq=8500.0
FootStepAnimNodeName[0]="Leg3 Step"
FootStepAnimNodeName[1]="Leg2 Step"
FootStepAnimNodeName[2]="Leg1 Step"
FootStepAnimNodeName[3]="Leg0 Step"
//EnergyBallLight=Light0
EnergyBallLightColor_PoweredOn=(R=250,G=231,B=126)
EnergyBallLightColor_PoweredOff=(R=150,G=50,B=10)
EnergyBallLightColor_PoweredOn_Blue=(R=89,G=153,B=217)
EnergyBallLightColor_PoweredOff_Blue=(R=10,G=50,B=150)
EnergyBallLightBrightness_PoweredOn=8.f
EnergyBallLightBrightness_PoweredOff=6.f
EnergyBallMaterialParameterName="Scalar"
EnergyBallPowerInterpSpeed=1.5f
//PS_LegBeamTemplate=ParticleSystem'VH_DarkWalker.Effects.P_VH_DarkWalker_PowerBall_Idle'
//PS_LegBeamTemplate_Blue=ParticleSystem'VH_DarkWalker.Effects.P_VH_DarkWalker_PowerBall_Idle_Blue'
//LegAttachBeamEndPointParamName=DarkwalkerLegEnd
//TopLegBoneName[0]=frontrighthip01
//TopLegBoneName[1]=frontlefthip01
//TopLegBoneName[2]=frontrighthip
//TopLegBoneName[3]=frontlefthip
FootStepShakeRadius=2000.0
FootStepShake=CameraAnim'Camera_FX.DarkWalker.C_VH_DarkWalker_Step_Shake'
}
Bookmarks