aboutsummaryrefslogtreecommitdiff
path: root/Northstar.Custom/mod/scripts/vscripts/weapons/mp_titanweapon_arc_cannon.nut
diff options
context:
space:
mode:
Diffstat (limited to 'Northstar.Custom/mod/scripts/vscripts/weapons/mp_titanweapon_arc_cannon.nut')
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/weapons/mp_titanweapon_arc_cannon.nut223
1 files changed, 165 insertions, 58 deletions
diff --git a/Northstar.Custom/mod/scripts/vscripts/weapons/mp_titanweapon_arc_cannon.nut b/Northstar.Custom/mod/scripts/vscripts/weapons/mp_titanweapon_arc_cannon.nut
index 09faafa57..788793932 100644
--- a/Northstar.Custom/mod/scripts/vscripts/weapons/mp_titanweapon_arc_cannon.nut
+++ b/Northstar.Custom/mod/scripts/vscripts/weapons/mp_titanweapon_arc_cannon.nut
@@ -1,24 +1,50 @@
-ArcCannon_PrecacheFX( self )
+untyped
-function OnWeaponActivate( activateParams )
+global function MpTitanweaponArcCannon_Init
+
+global function OnWeaponActivate_titanweapon_arc_cannon
+global function OnWeaponDeactivate_titanweapon_arc_cannon
+global function OnWeaponReload_titanweapon_arc_cannon
+global function OnWeaponOwnerChanged_titanweapon_arc_cannon
+global function OnWeaponChargeBegin_titanweapon_arc_cannon
+global function OnWeaponChargeEnd_titanweapon_arc_cannon
+global function OnWeaponPrimaryAttack_titanweapon_arc_cannon
+
+const FX_EMP_BODY_HUMAN = $"P_emp_body_human"
+const FX_EMP_BODY_TITAN = $"P_emp_body_titan"
+
+#if SERVER
+global function OnWeaponNpcPrimaryAttack_titanweapon_arc_cannon
+#endif // #if SERVER
+
+void function MpTitanweaponArcCannon_Init()
+{
+ ArcCannon_PrecacheFX()
+
+ #if SERVER
+ AddDamageCallbackSourceID( eDamageSourceId.mp_titanweapon_arc_cannon, ArcRifleOnDamage )
+ #endif
+}
+
+void function OnWeaponActivate_titanweapon_arc_cannon( entity weapon )
{
- local weaponOwner = self.GetWeaponOwner()
- thread DelayedArcCannonStart( self, weaponOwner )
- if( !("weaponOwner" in self.s) )
- self.s.weaponOwner <- weaponOwner
+ entity weaponOwner = weapon.GetWeaponOwner()
+ thread DelayedArcCannonStart( weapon, weaponOwner )
+ if( !("weaponOwner" in weapon.s) )
+ weapon.s.weaponOwner <- weaponOwner
}
-function DelayedArcCannonStart( weapon, weaponOwner )
+function DelayedArcCannonStart( entity weapon, entity weaponOwner )
{
weapon.EndSignal( "WeaponDeactivateEvent" )
- wait 0
+ WaitFrame()
if ( IsValid( weapon ) && IsValid( weaponOwner ) && weapon == weaponOwner.GetActiveWeapon() )
{
if( weaponOwner.IsPlayer() )
{
- local modelEnt = weaponOwner.GetViewModelEntity()
+ entity modelEnt = weaponOwner.GetViewModelEntity()
if( IsValid( modelEnt ) && EntHasModelSet( modelEnt ) )
ArcCannon_Start( weapon )
}
@@ -29,91 +55,172 @@ function DelayedArcCannonStart( weapon, weaponOwner )
}
}
-function OnWeaponDeactivate( deactivateParams )
+void function OnWeaponDeactivate_titanweapon_arc_cannon( entity weapon )
{
- ArcCannon_ChargeEnd( self, self.s.weaponOwner )
- ArcCannon_Stop( self )
+ ArcCannon_ChargeEnd( weapon, expect entity( weapon.s.weaponOwner ) )
+ ArcCannon_Stop( weapon )
}
-function OnWeaponReload( reloadParams )
+void function OnWeaponReload_titanweapon_arc_cannon( entity weapon, int milestoneIndex )
{
- local reloadTime = self.GetWeaponInfoFileKeyField( "reload_time" )
- thread ArcCannon_HideIdleEffect( self, reloadTime ) //constant seems to help it sync up better
+ local reloadTime = weapon.GetWeaponInfoFileKeyField( "reload_time" )
+ thread ArcCannon_HideIdleEffect( weapon, reloadTime ) //constant seems to help it sync up better
}
-function OnWeaponOwnerChanged( changeParams )
+void function OnWeaponOwnerChanged_titanweapon_arc_cannon( entity weapon, WeaponOwnerChangedParams changeParams )
{
- if ( IsClient() )
- {
- local viewPlayer = GetLocalViewPlayer()
+ #if CLIENT
+ entity viewPlayer = GetLocalViewPlayer()
if ( changeParams.oldOwner != null && changeParams.oldOwner == viewPlayer )
{
- ArcCannon_ChargeEnd( self, changeParams.oldOwner )
- ArcCannon_Stop( self, changeParams.oldOwner )
+ ArcCannon_ChargeEnd( weapon, changeParams.oldOwner )
+ ArcCannon_Stop( weapon)
}
+
if ( changeParams.newOwner != null && changeParams.newOwner == viewPlayer )
- thread ArcCannon_HideIdleEffect( self, 0.25 )
- }
- else
- {
+ thread ArcCannon_HideIdleEffect( weapon, 0.25 )
+ #else
if ( changeParams.oldOwner != null )
{
- ArcCannon_ChargeEnd( self, changeParams.oldOwner )
- ArcCannon_Stop( self, changeParams.oldOwner )
+ ArcCannon_ChargeEnd( weapon, changeParams.oldOwner )
+ ArcCannon_Stop( weapon )
}
+
if ( changeParams.newOwner != null )
- thread ArcCannon_HideIdleEffect( self, 0.25 )
- }
+ thread ArcCannon_HideIdleEffect( weapon, 0.25 )
+ #endif
}
-function OnWeaponChargeBegin( chargeParams )
+bool function OnWeaponChargeBegin_titanweapon_arc_cannon( entity weapon )
{
- ArcCannon_ChargeBegin( self )
+ local stub = "this is here to suppress the untyped message. This can go away when the .s. usage is removed from this file."
+ #if SERVER
+ //if ( weapon.HasMod( "fastpacitor_push_apart" ) )
+ // weapon.GetWeaponOwner().StunMovementBegin( weapon.GetWeaponSettingFloat( eWeaponVar.charge_time ) )
+ #endif
+
+ ArcCannon_ChargeBegin( weapon )
+
+ return true
}
-function OnWeaponChargeEnd( chargeParams )
+void function OnWeaponChargeEnd_titanweapon_arc_cannon( entity weapon )
{
- ArcCannon_ChargeEnd( self )
+ ArcCannon_ChargeEnd( weapon, weapon )
}
-function OnWeaponPrimaryAttack( attackParams )
+var function OnWeaponPrimaryAttack_titanweapon_arc_cannon( entity weapon, WeaponPrimaryAttackParams attackParams )
{
- if ( self.HasMod( "capacitor" ) && self.GetWeaponChargeFraction() < GetArcCannonChargeFraction( self ) )
+ if ( weapon.HasMod( "capacitor" ) && weapon.GetWeaponChargeFraction() < GetArcCannonChargeFraction( weapon ) )
return 0
if ( !attackParams.firstTimePredicted )
return
- local fireRate = self.GetWeaponInfoFileKeyField( "fire_rate" )
- thread ArcCannon_HideIdleEffect( self, (1 / fireRate) )
- return FireArcCannon( self, attackParams )
-}
+ local fireRate = weapon.GetWeaponInfoFileKeyField( "fire_rate" )
+ thread ArcCannon_HideIdleEffect( weapon, (1 / fireRate) )
-function OnWeaponNpcPrimaryAttack( attackParams )
-{
- local fireRate = self.GetWeaponInfoFileKeyField( "fire_rate" )
- thread ArcCannon_HideIdleEffect( self, fireRate )
- return FireArcCannon( self, attackParams )
+ return FireArcCannon( weapon, attackParams )
}
-function OnWeaponStartZoomIn()
+#if SERVER
+var function OnWeaponNpcPrimaryAttack_titanweapon_arc_cannon( entity weapon, WeaponPrimaryAttackParams attackParams )
{
- HandleWeaponSoundZoomIn( self, "Weapon_Titan_ArcCannon.ADS_In" )
-}
+ local fireRate = weapon.GetWeaponInfoFileKeyField( "fire_rate" )
+ thread ArcCannon_HideIdleEffect( weapon, fireRate )
-function OnWeaponStartZoomOut()
-{
- HandleWeaponSoundZoomOut( self, "Weapon_Titan_ArcCannon.ADS_Out" )
+ return FireArcCannon( weapon, attackParams )
}
-/*
-function OnWeaponPrimaryAttackVMActivityToUse()
+void function ArcRifleOnDamage( entity ent, var damageInfo )
{
- local baseCharge = self.GetWeaponChargeFraction()
- local charge = clamp ( baseCharge * ( 1 / 0.7 ), 0.0, 1.0 )
+ vector pos = DamageInfo_GetDamagePosition( damageInfo )
+ entity attacker = DamageInfo_GetAttacker( damageInfo )
- if ( charge > 0.25 )
- return 1
+ EmitSoundOnEntity( ent, ARC_CANNON_TITAN_SCREEN_SFX )
+
+ if ( ent.IsPlayer() || ent.IsNPC() )
+ {
+ entity entToSlow = ent
+ entity soul = ent.GetTitanSoul()
+
+ if ( soul != null )
+ entToSlow = soul
+
+ StatusEffect_AddTimed( entToSlow, eStatusEffect.move_slow, 0.5, 2.0, 1.0 )
+ StatusEffect_AddTimed( entToSlow, eStatusEffect.dodge_speed_slow, 0.5, 2.0, 1.0 )
+ }
+
+ string tag = ""
+ asset effect
+
+ if ( ent.IsTitan() )
+ {
+ tag = "exp_torso_front"
+ effect = FX_EMP_BODY_TITAN
+ }
+ else if ( ChestFocusTarget( ent ) )
+ {
+ tag = "CHESTFOCUS"
+ effect = FX_EMP_BODY_HUMAN
+ }
+ else if ( IsAirDrone( ent ) )
+ {
+ tag = "HEADSHOT"
+ effect = FX_EMP_BODY_HUMAN
+ }
+ else if ( IsGunship( ent ) )
+ {
+ tag = "ORIGIN"
+ effect = FX_EMP_BODY_TITAN
+ }
+
+ if ( tag != "" )
+ {
+ float duration = 2.0
+ //thread EMP_FX( effect, ent, tag, duration )
+ }
+
+ if ( ent.IsTitan() )
+ {
+ if ( ent.IsPlayer() )
+ {
+ EmitSoundOnEntityOnlyToPlayer( ent, ent, "titan_energy_bulletimpact_3p_vs_1p" )
+ EmitSoundOnEntityExceptToPlayer( ent, ent, "titan_energy_bulletimpact_3p_vs_3p" )
+ }
+ else
+ {
+ EmitSoundOnEntity( ent, "titan_energy_bulletimpact_3p_vs_3p" )
+ }
+ }
else
- return 0
-}*/
+ {
+ if ( ent.IsPlayer() )
+ {
+ EmitSoundOnEntityOnlyToPlayer( ent, ent, "flesh_lavafog_deathzap_3p" )
+ EmitSoundOnEntityExceptToPlayer( ent, ent, "flesh_lavafog_deathzap_1p" )
+ }
+ else
+ {
+ EmitSoundOnEntity( ent, "flesh_lavafog_deathzap_1p" )
+ }
+ }
+
+}
+
+bool function ChestFocusTarget( entity ent )
+{
+ if ( IsSpectre( ent ) )
+ return true
+ if ( IsStalker( ent ) )
+ return true
+ if ( IsSuperSpectre( ent ) )
+ return true
+ if ( IsGrunt( ent ) )
+ return true
+ if ( IsPilot( ent ) )
+ return true
+
+ return false
+}
+#endif // #if SERVER