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

222 lines
8.8 KiB
Ucode

//=============================================================================
// KFWeap_Blunt_MaceAndShield
//=============================================================================
// A melee club and shield for heavy blunt damage
//=============================================================================
// Killing Floor 2
// Copyright (C) 2016 Tripwire Interactive LLC
//=============================================================================
class KFWeap_Blunt_MaceAndShield extends KFWeap_MeleeBase;
var const float MaxMaceHitRange, MaxShieldHitRange;
var const array<MeleeHitBoxInfo> MaceHitboxChain, ShieldHitboxChain;
var const class<KFDamageType> MaceLightDamageType, ShieldLightDamageType;
var const class<KFDamageType> MaceHeavyDamageType, ShieldHeavyDamageType;
simulated function SwapToMaceMeleeSettings()
{
MeleeAttackHelper.SetMeleeRange( MaxMaceHitRange );
MeleeAttackHelper.SetHitBoxChain( MaceHitboxChain );
}
simulated function SwapToShieldMeleeSettings()
{
MeleeAttackHelper.SetMeleeRange( MaxShieldHitRange );
MeleeAttackHelper.SetHitBoxChain( ShieldHitboxChain );
}
/*********************************************************************************************
* State MeleeAttackBasic
* This is a basic melee state that's used as a base for other more advanced states
*********************************************************************************************/
/**
* state MeleeAttackBasic
* State the weapon is in when doing a melee attack
*/
simulated state MeleeAttackBasic
{
simulated function BeginState(Name PrevStateName)
{
if( CurrentFireMode == BASH_FIREMODE )
{
SwapToShieldMeleeSettings();
}
super.BeginState( PrevStateName );
}
}
/*********************************************************************************************
* State MeleeChainAttacking
* A melee firemode that chains together a sequence of attacks
*********************************************************************************************/
simulated state MeleeChainAttacking
{
/** Get name of the animation to play for PlayFireEffects */
simulated function name GetMeleeAnimName(EPawnOctant AtkDir, EMeleeAttackType AtkType)
{
if( AtkType == ATK_Combo )
{
if( AtkDir == DIR_Right )
{
SwapToShieldMeleeSettings();
InstantHitDamageTypes[DEFAULT_FIREMODE] = ShieldLightDamageType;
}
else
{
SwapToMaceMeleeSettings();
InstantHitDamageTypes[DEFAULT_FIREMODE] = MaceLightDamageType;
}
}
else
{
SwapToMaceMeleeSettings();
InstantHitDamageTypes[DEFAULT_FIREMODE] = MaceLightDamageType;
}
return super.GetMeleeAnimName( AtkDir, AtkType );
}
}
/*********************************************************************************************
* State MeleeHeavyAttacking
* This is the alt-fire Melee State.
*********************************************************************************************/
simulated state MeleeHeavyAttacking
{
/** heavy damage attack anims */
simulated function name GetMeleeAnimName(EPawnOctant AtkDir, EMeleeAttackType AtkType)
{
// heavy damage attacks
if( AtkType == ATK_DrawStrike )
{
SwapToMaceMeleeSettings();
InstantHitDamageTypes[HEAVY_ATK_FIREMODE] = MaceHeavyDamageType;
return MeleeDrawStrikeAnim;
}
// Since mace and shield are mixed in heavy attacks, we swap properties depending on which one is used
if( AtkDir == DIR_Left || AtkDir == DIR_ForwardLeft || AtkDir == DIR_Forward )
{
SwapToMaceMeleeSettings();
InstantHitDamageTypes[HEAVY_ATK_FIREMODE] = MaceHeavyDamageType;
}
else
{
SwapToShieldMeleeSettings();
InstantHitDamageTypes[HEAVY_ATK_FIREMODE] = ShieldHeavyDamageType;
}
switch (AtkDir)
{
case DIR_Forward: return MeleeHeavyAttackAnim_F;
case DIR_ForwardLeft: return MeleeHeavyAttackAnim_F;
case DIR_ForwardRight: return MeleeHeavyAttackAnim_F;
case DIR_Backward: return MeleeHeavyAttackAnim_B;
case DIR_BackwardLeft: return MeleeHeavyAttackAnim_B;
case DIR_BackwardRight: return MeleeHeavyAttackAnim_B;
case DIR_Left: return MeleeHeavyAttackAnim_L;
case DIR_Right: return MeleeHeavyAttackAnim_R;
}
}
}
defaultproperties
{
// Content
PackageKey="Shield_Melee"
FirstPersonMeshName="wep_1p_shield_melee_mesh.Wep_1stP_Shield_Melee_Rig"
FirstPersonAnimSetNames(0)="wep_1p_shield_melee_anim.Wep_1stP_Shield_Melee_Anim"
PickupMeshName="WEP_3P_Shield_Melee_MESH.Wep_Shield_Melee_Pickup"
AttachmentArchetypeName="WEP_Shield_Melee_ARCH.Wep_MaceAndShield_3P"
Begin Object Name=MeleeHelper_0
// Override automatic hitbox creation (advanced)
WorldImpactEffects=KFImpactEffectInfo'FX_Impacts_ARCH.Blunted_melee_impact'
// modified combo sequences
MeleeImpactCamShakeScale=0.04f //0.5
HitboxChain.Add((BoneOffset=(Y=0,Z=0)))
ChainSequence_F=(DIR_ForwardRight, DIR_ForwardLeft, DIR_ForwardRight, DIR_ForwardLeft)
ChainSequence_B=(DIR_BackwardRight, DIR_ForwardLeft, DIR_BackwardLeft, DIR_ForwardRight)
ChainSequence_L=(DIR_Right, DIR_ForwardLeft, DIR_ForwardRight, DIR_Left, DIR_Right)
ChainSequence_R=(DIR_Left, DIR_ForwardRight, DIR_ForwardLeft, DIR_Right, DIR_Left)
End Object
// Mace melee properties
MaxMaceHitRange=185
MaceHitboxChain.Add((BoneOffset=(Y=-3,Z=165)))
MaceHitboxChain.Add((BoneOffset=(Y=+3,Z=150)))
MaceHitboxChain.Add((BoneOffset=(Y=-3,Z=130)))
MaceHitboxChain.Add((BoneOffset=(Y=+3,Z=110)))
MaceHitboxChain.Add((BoneOffset=(Y=-3,Z=90)))
MaceHitboxChain.Add((BoneOffset=(Y=+3,Z=70)))
MaceHitboxChain.Add((BoneOffset=(Y=-3,Z=50)))
MaceHitboxChain.Add((BoneOffset=(Y=+3,Z=30)))
MaceHitboxChain.Add((BoneOffset=(Y=-3,Z=10)))
// Shield melee properties
MaxShieldHitRange=170 //160
ShieldHitboxChain.Add((BoneOffset=(Y=+10,Z=145)))
ShieldHitboxChain.Add((BoneOffset=(Y=-10,Z=130)))
ShieldHitboxChain.Add((BoneOffset=(Y=+10,Z=110)))
ShieldHitboxChain.Add((BoneOffset=(Y=-10,Z=90)))
ShieldHitboxChain.Add((BoneOffset=(Y=+10,Z=70)))
ShieldHitboxChain.Add((BoneOffset=(Y=-10,Z=50)))
ShieldHitboxChain.Add((BoneOffset=(Y=+8,Z=30)))
ShieldHitboxChain.Add((BoneOffset=(Y=-8,Z=10)))
// Inventory
GroupPriority=110
InventorySize=8
WeaponSelectTexture=Texture2D'WEP_UI_Shield_Melee_TEX.UI_WeaponSelect_MaceShield'
// For procedural weapon hiding
QuickWeaponDownRotation=(Pitch=-8192,Yaw=0,Roll=0)
FireModeIconPaths(DEFAULT_FIREMODE)=Texture2D'ui_firemodes_tex.UI_FireModeSelect_BluntMelee'
InstantHitDamage(DEFAULT_FIREMODE)=80 //70
InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Bludgeon_MaceAndShield'
MaceLightDamageType=class'KFDT_Bludgeon_MaceAndShield'
ShieldLightDamageType=class'KFDT_Bludgeon_MaceAndShield_ShieldLight'
FireModeIconPaths(HEAVY_ATK_FIREMODE)=Texture2D'ui_firemodes_tex.UI_FireModeSelect_BluntMelee'
InstantHitDamage(HEAVY_ATK_FIREMODE)=175 //200
InstantHitDamageTypes(HEAVY_ATK_FIREMODE)=class'KFDT_Bludgeon_MaceAndShield_MaceHeavy'
MaceHeavyDamageType=class'KFDT_Bludgeon_MaceAndShield_MaceHeavy'
ShieldHeavyDamageType=class'KFDT_Bludgeon_MaceAndShield_ShieldHeavy'
InstantHitDamageTypes(BASH_FIREMODE)=class'KFDT_Bludgeon_MaceAndShield_Bash'
InstantHitDamage(BASH_FIREMODE)=165 //250
AssociatedPerkClasses(0)=class'KFPerk_Berserker'
// Grenade
GrenadeFireOffset=(X=25,Y=15)
// Block Sounds
BlockSound=AkEvent'WW_WEP_Bullet_Impacts.Play_Block_MEL_Hammer'
ParrySound=AkEvent'WW_WEP_Bullet_Impacts.Play_Parry_Wood'
// Blocking
BlockTypes.Add((DmgType=class'KFDT_Fire_HuskFireball', BlockSound=None, ParrySound=None, BlockParticleSys=None, ParryParticleSys=None))
BlockTypes.Add((DmgType=class'KFDT_Fire_HuskFlamethrower'))
BlockTypes.Add((DmgType=class'KFDT_EvilDAR_Rocket', BlockSound=AkEvent'WW_WEP_Bullet_Impacts.Play_Bullet_Impact_Metal'))
BlockTypes.Add((DmgType=class'KFDT_EvilDAR_Laser', BlockSound=AkEvent'WW_WEP_Bullet_Impacts.Play_Bullet_Impact_Metal'))
BlockTypes.Add((DmgType=class'KFDT_DAR_EMPBlast', BlockSound=AkEvent'WW_WEP_Bullet_Impacts.Play_Bullet_Impact_Metal'))
BlockTypes.Add((DmgType=class'KFDT_Ballistic_PatMinigun', BlockSound=AkEvent'WW_WEP_Bullet_Impacts.Play_Bullet_Impact_Metal'))
BlockTypes.Add((DmgType=class'KFDT_Explosive_PatMissile'))
BlockTypes.Add((DmgType=class'KFDT_Ballistic_HansAK12', BlockSound=AkEvent'WW_WEP_Bullet_Impacts.Play_Bullet_Impact_Metal'))
BlockTypes.Add((DmgType=class'KFDT_EMP_MatriarchTeslaBlast', BlockSound=AkEvent'WW_WEP_Bullet_Impacts.Play_Bullet_Impact_Metal'))
ParryDamageMitigationPercent=0.3
BlockDamageMitigation=0.3//0.5
ParryStrength=6
NumBloodMapMaterials=2
// Weapon Upgrade stat boosts
//WeaponUpgrades[1]=(IncrementDamage=1.135f,IncrementWeight=1)
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.135f), (Stat=EWUS_Damage1, Scale=1.135f), (Stat=EWUS_Damage2, Scale=1.135f), (Stat=EWUS_Weight, Add=1)))
}