1
0
KF2-Dev-Scripts/KFGameContent/Classes/KFPawn_ZedHusk_Versus.uc
2020-12-13 18:01:13 +03:00

317 lines
13 KiB
Ucode

//=============================================================================
// KFPawn_ZedHusk_Versus
//=============================================================================
// Husk Versus pawn
//=============================================================================
// Killing Floor 2
// Copyright (C) 2015 Tripwire Interactive LLC
//=============================================================================
class KFPawn_ZedHusk_Versus extends KFPawn_ZedHusk;
/** Speed at which a fireball travels */
var protected const float FireballSpeed;
/** Minimum/maximum strength (damage and radius multiplier) a fireball can have */
var protected const vector2D FireballStrengthRange;
/** How much strength to apply to a fireball per 1 second of holding the attack button down */
var protected const float FireballStrengthPerSecond;
/** How much to multiply FireballStrength by when applying the radius boost */
var protected const float FireballStrengthRadiusMultiplier;
/** Current strength of the fireball */
var protected float FireballStrength;
/** Turns flamethrower on (FX, damage) */
simulated function ANIMNOTIFY_FlameThrowerOn()
{
if( IsDoingSpecialMove(SM_PlayerZedMove_RMB) )
{
KFSM_Husk_FlameThrowerAttack(SpecialMoves[SpecialMove]).TurnOnFlamethrower();
}
}
/** AnimNotify which launches the fireball projectile */
simulated function ANIMNOTIFY_HuskFireballAttack()
{
local float FireballStartTime;
if( WorldInfo.NetMode != NM_Client )
{
// Determine how strong the fireball attack will be
if( IsDoingSpecialMove(SM_PlayerZedMove_LMB) )
{
FireballStartTime = KFSM_PlayerHusk_FireBallAttack( SpecialMoves[SpecialMove] ).HoldStartTime;
FireballStrength = fClamp( (WorldInfo.TimeSeconds - FireballStartTime) * FireballStrengthPerSecond, FireballStrengthRange.X, FireballStrengthRange.Y );
}
else
{
FireballStrength = 1.f;
}
ShootFireball();
}
SetFireLightEnabled( false );
}
/** Shoots a fireball at the crosshair */
function ShootFireball()
{
local PlayerController PC;
local KFProjectile MyFireball;
local KFProj_Husk_Fireball_Versus HuskFireball;
local Actor HitActor;
local vector SocketLocation;
local rotator ShootRotation;
local vector HitLocation, HitNormal;
local vector Dir, TraceStart, TraceEnd;
if( Role == ROLE_Authority && Health > 0.f && IsDoingSpecialMove(SM_PlayerZedMove_LMB) && IsHumanControlled() )
{
PC = PlayerController( Controller );
if( PC == none )
{
return;
}
Mesh.GetSocketWorldLocationAndRotation( 'FireballSocket', SocketLocation );
Dir = vector( Rotation );
TraceStart = PC.PlayerCamera.CameraCache.POV.Location;
TraceEnd = PC.PlayerCamera.CameraCache.POV.Location + ( vector(PC.PlayerCamera.CameraCache.POV.Rotation)*10000.f );
// Shoot the fireball
MyFireball = Spawn( FireballClass, self,, SocketLocation, Rotation );
if( MyFireball == none )
{
return;
}
MyFireball.Instigator = Self;
MyFireball.InstigatorController = Controller;
MyFireball.Speed = FireballSpeed;
MyFireball.MaxSpeed = FireballSpeed;
MyFireball.ExplosionTemplate.Damage = GetRallyBoostDamage( MyFireball.default.ExplosionTemplate.Damage ) * FireballStrength;
MyFireball.ExplosionTemplate.DamageRadius = MyFireball.default.ExplosionTemplate.DamageRadius * (FireballStrength * FireballStrengthRadiusMultiplier);
// Make sure our own pawn can never get in the way, and make sure we're targeting things in front of us
foreach TraceActors( class'Actor', HitActor, HitLocation, HitNormal, TraceEnd, TraceStart,,, TRACEFLAG_Bullet )
{
if( HitActor == self || !HitActor.StopsProjectile(MyFireball) )
{
HitActor = none;
continue;
}
if( Normal(HitActor.Location - SocketLocation) dot Dir < 0.f )
{
HitActor = none;
continue;
}
// Stop at the first hit in front of us
break;
}
// Set our desired rotation, from the socket to the hit location
if( HitActor != none )
{
ShootRotation = Rotator( HitLocation - SocketLocation );
}
else
{
// Otherwise use the end of the trace
ShootRotation = Rotator( TraceEnd - SocketLocation );
}
MyFireball.SetRotation( ShootRotation );
// Apply fireball size if our projectile is a husk fireball
HuskFireball = KFProj_Husk_Fireball_Versus( MyFireball );
if( HuskFireball != none )
{
HuskFireball.SetDrawScale( fMax(FireballStrength, 1.f) );
}
MyFireball.Init( vector(ShootRotation) );
}
}
/** Called by KFSM_Husk_Suicide move after exploding */
simulated function OnExploded( Controller SuicideController )
{
local KFPlayerController KFPC;
// Swap to suicide cam
if( SuicideController != none )
{
KFPC = KFPlayerController( SuicideController );
if( KFPC != none )
{
KFPC.SetCameraMode( 'ZedSuicide' );
KFPlayerCamera_Versus(KFPC.PlayerCamera).SwapToZedSuicideCam( Location );
}
}
}
simulated function ESpecialMove GetSuicideSM()
{
return SM_PlayerZedMove_G;
}
/** Returns TRUE if we're aiming with the husk cannon */
simulated function bool UseAdjustedControllerSensitivity()
{
return IsDoingSpecialMove( SM_PlayerZedMove_LMB );
}
/** Accessors */
simulated function vector2D GetFireballStrengthRange()
{
return FireballStrengthRange;
}
simulated function float GetFireballStrengthPerSecond()
{
return FireballStrengthPerSecond;
}
DefaultProperties
{
bVersusZed=true
TeammateCollisionRadiusPercent=0.30
Health=600 // KF1=600 //450
DoshValue=20.0 // default because they have the same health as survival
XPValues(0)=30 // 2x default because they are harder to hit/kill
// Faster sprint
SprintSpeed=550.f //500
SprintStrafeSpeed=425.f //250
GroundSpeed=250.0f //170
Begin Object Name=SpecialMoveHandler_0
SpecialMoveClasses(SM_PlayerZedMove_LMB)=class'KFSM_PlayerHusk_FireBallAttack'
SpecialMoveClasses(SM_PlayerZedMove_RMB)=class'KFSM_PlayerHusk_FlameThrowerAttack'
SpecialMoveClasses(SM_PlayerZedMove_V)=class'KFSM_PlayerHusk_Melee'
SpecialMoveClasses(SM_PlayerZedMove_G)=class'KFSM_PlayerHusk_Suicide'
End Object
MoveListGamepadScheme(ZGM_Melee_Square)=SM_PlayerZedMove_V
MoveListGamepadScheme(ZGM_Explosive_Ll)=SM_PlayerZedMove_G
MoveListGamepadScheme(ZGM_Attack_L2)=SM_PlayerZedMove_RMB
MoveListGamepadScheme(ZGM_Attack_R2)=SM_PlayerZedMove_LMB
SpecialMoveCooldowns(0)=(SMHandle=SM_PlayerZedMove_LMB, CooldownTime=0.95f, SpecialMoveIcon=Texture2D'ZED_Husk_UI.ZED-VS_Icons_Husk-Fireball', NameLocalizationKey="Shoot")
SpecialMoveCooldowns(1)=(SMHandle=SM_PlayerZedMove_RMB, CooldownTime=2.0f, SpecialMoveIcon=Texture2D'ZED_Husk_UI.ZED-VS_Icons_Husk-Flamethrower', NameLocalizationKey="Flame")
SpecialMoveCooldowns(2)=(SMHandle=SM_Taunt, CooldownTime=1.0f, bShowOnHud=false,bShowOnHud=false))
SpecialMoveCooldowns(3)=(SMHandle=SM_PlayerZedMove_V, CooldownTime=0.1f, SpecialMoveIcon=Texture2D'ZED_clot_UI.ZED-VS_Icons_AlphaClot-Melee', NameLocalizationKey="Melee")
SpecialMoveCooldowns(6)=(SMHandle=SM_PlayerZedMove_G, CooldownTime=2.5f, SpecialMoveIcon=Texture2D'ZED_Husk_UI.ZED-VS_Icons_Husk-Explode', NameLocalizationKey="Suicide")
SpecialMoveCooldowns.Add((SMHandle=SM_Jump, CooldownTime=1.f, SpecialMoveIcon=Texture2D'ZED_Husk_UI.ZED-VS_Icons_Husk-Jump', bShowOnHud=false)) // Jump always at end of array)) // Jump always at end of array
DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Submachinegun', DamageScale=(0.8))) //3.0
DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_AssaultRifle', DamageScale=(0.7))) //1.0 //0.5
DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Shotgun', DamageScale=(0.5))) //0.9
DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Handgun', DamageScale=(0.6))) //1.01 0.4
DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Rifle', DamageScale=(0.65))) //0.76 0.5
DamageTypeModifiers.Add((DamageType=class'KFDT_Slashing', DamageScale=(0.8))) //0.5
DamageTypeModifiers.Add((DamageType=class'KFDT_Bludgeon', DamageScale=(0.8))) //0.5
DamageTypeModifiers.Add((DamageType=class'KFDT_Fire', DamageScale=(0.5))) //0.8 //0.1
DamageTypeModifiers.Add((DamageType=class'KFDT_Microwave', DamageScale=(1.0))) //0.25
DamageTypeModifiers.Add((DamageType=class'KFDT_Explosive', DamageScale=(0.5))) //0.85 0.35
DamageTypeModifiers.Add((DamageType=class'KFDT_Piercing', DamageScale=(0.4))) //1.0
DamageTypeModifiers.Add((DamageType=class'KFDT_Toxic', DamageScale=(0.30))) //0.88
// special case
DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_AR15', DamageScale=(1.0))
DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_MB500', DamageScale=(1.1))) //0.9
DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Rem1858', DamageScale=(0.85))) //0.9 0.75
DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Colt1911', DamageScale=(0.75))) //0.9 0.65
DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_9mm', DamageScale=(1.6))) //0.9
DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Pistol_Medic', DamageScale=(1.5))) //0.9
DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_Winchester', DamageScale=(0.75))) //0.9 0.7
DamageTypeModifiers.Add((DamageType=class'KFDT_Fire_CaulkBurn', DamageScale=(0.7))) //0.9 //0.2
DamageTypeModifiers.Add((DamageType=class'KFDT_ExplosiveSubmunition_HX25', DamageScale=(0.6))) //0.9
DamageTypeModifiers.Add((DamageType=class'KFDT_Slashing_EvisceratorProj', DamageScale=(0.4))) //0.9
DamageTypeModifiers.Add((DamageType=class'KFDT_Slashing_Eviscerator', DamageScale=(0.3))) //0.9
DamageTypeModifiers.Add((DamageType=class'KFDT_Ballistic_DragonsBreath', DamageScale=(1.1))) //0.9
DamageTypeModifiers.Add((DamageType=class'KFDT_Bludgeon_Crovel', DamageScale=(1.2))) //0.8
IncapSettings(AF_Stun)= (Vulnerability=(0.5, 0.5, 0.1, 0.1, 0.1), Cooldown=3.0, Duration=2.0)
IncapSettings(AF_Knockdown)=(Vulnerability=(0.3), Cooldown=10.0) //3.0
IncapSettings(AF_Stumble)= (Vulnerability=(0.2), Cooldown=3.0)
IncapSettings(AF_GunHit)= (Vulnerability=(1.0), Cooldown=0.75)
IncapSettings(AF_MeleeHit)= (Vulnerability=(1.0), Cooldown=0.5)
IncapSettings(AF_Poison)= (Vulnerability=(1), Cooldown=5.0, Duration=2.0)
IncapSettings(AF_Microwave)=(Vulnerability=(1.0), Cooldown=5.0, Duration=2.0)
IncapSettings(AF_FirePanic)=(Vulnerability=(0.1), Cooldown=8.0, Duration=3)
IncapSettings(AF_EMP)= (Vulnerability=(2.5), Cooldown=5.0, Duration=3.0) //1.0
IncapSettings(AF_Freeze)= (Vulnerability=(0.6), Cooldown=1.5, Duration=2.0) //1.0
IncapSettings(AF_Snare)= (Vulnerability=(0.7, 0.7, 1.0, 0.7), Cooldown=8.5, Duration=1.5)
IncapSettings(AF_Bleed)= (Vulnerability=(1.0))
HitZones[HZI_HEAD]=(ZoneName=head, BoneName=Head, Limb=BP_Head, GoreHealth=200, DmgScale=1.001, SkinID=1) // KF1=200 //154
HitZones[3] =(ZoneName=heart, BoneName=Spine2, Limb=BP_Special, GoreHealth=75, DmgScale=1.1, SkinID=2) //0.5 //1.5
HitZones[8] =(ZoneName=rforearm, BoneName=RightForearm, Limb=BP_RightArm, GoreHealth=20, DmgScale=0.5, SkinID=3)
// Fireball/flamethrower
bNeedsCrosshair=true
FireballSpeed=4200.f //3600
FireballStrengthRange=(X=0.5f, Y=1.3f)
FireballStrengthPerSecond=0.4f
FireballStrengthRadiusMultiplier=0.7f
PlayerFireOffset=(X=15.f,Y=32,Z=-12)
FireballClass=class'KFProj_Husk_Fireball_Versus'
// Backpack/Suicide Explosion
Begin Object Class=KFGameExplosion Name=ExploTemplate0
Damage=125
DamageRadius=600
DamageFalloffExponent=0.5f
DamageDelay=0.f
bFullDamageToAttachee=true
// Damage Effects
MyDamageType=class'KFDT_Explosive_HuskSuicide'
FractureMeshRadius=200.0
FracturePartVel=500.0
ExplosionEffects=KFImpactEffectInfo'FX_Impacts_ARCH.Explosions.HuskSuicide_Explosion'
ExplosionSound=AkEvent'WW_ZED_Husk.ZED_Husk_SFX_Suicide_Explode'
MomentumTransferScale=1.f
// Dynamic Light
ExploLight=ExplosionPointLight
ExploLightStartFadeOutTime=0.0
ExploLightFadeOutTime=0.5
// Camera Shake
CamShake=CameraShake'FX_CameraShake_Arch.Misc_Explosions.HuskSuicide'
CamShakeInnerRadius=450
CamShakeOuterRadius=900
CamShakeFalloff=1.f
bOrientCameraShakeTowardsEpicenter=true
End Object
ExplosionTemplate=ExploTemplate0
//defaults
Begin Object Name=MeleeHelper_0
BaseDamage=15.f //30
MaxHitRange=180.f
MomentumTransfer=25000.f
MyDamageType=class'KFDT_Slashing_ZedWeak'
MeleeImpactCamScale=0.2
PlayerDoorDamageMultiplier=5.f
End Object
MeleeAttackHelper=MeleeHelper_0
//defaults
ThirdPersonViewOffset={(
OffsetHigh=(X=-175,Y=75,Z=40),
OffsetLow=(X=-220,Y=75,Z=50),
OffsetMid=(X=-160,Y=60,Z=0),
)}
}