aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Kennedy <tristan@taskinoz.com>2022-03-27 13:22:11 +1100
committerBarichello <artur@barichello.me>2022-03-28 22:05:49 -0300
commit6dfe2856e8c4b9c533f0c380abbfd4b6fada3518 (patch)
tree1db43d2023ec29645b32c71ede069867407d27b4
parent464825cb304b070fb0d497f47a3e8a8d831d5248 (diff)
downloadNorthstarMods-6dfe2856e8c4b9c533f0c380abbfd4b6fada3518.tar.gz
NorthstarMods-6dfe2856e8c4b9c533f0c380abbfd4b6fada3518.zip
Restored Triple Threat Titan gun
-rw-r--r--Northstar.Custom/mod/models/weapons/titan_triple_threat_og/atpov_titan_triple_threat_og.mdlbin0 -> 2402701 bytes
-rw-r--r--Northstar.Custom/mod/models/weapons/titan_triple_threat_og/w_titan_triple_threat_og.mdlbin0 -> 925524 bytes
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/sh_northstar_custom_precache.gnut5
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/weapons/mp_projectile_titanweapon_triple_threat.nut85
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/weapons/sh_triple_threat.gnut249
-rw-r--r--Northstar.Custom/mod/scripts/weapons/mp_titanweapon_triplethreat.txt495
6 files changed, 832 insertions, 2 deletions
diff --git a/Northstar.Custom/mod/models/weapons/titan_triple_threat_og/atpov_titan_triple_threat_og.mdl b/Northstar.Custom/mod/models/weapons/titan_triple_threat_og/atpov_titan_triple_threat_og.mdl
new file mode 100644
index 000000000..7ea0d4da0
--- /dev/null
+++ b/Northstar.Custom/mod/models/weapons/titan_triple_threat_og/atpov_titan_triple_threat_og.mdl
Binary files differ
diff --git a/Northstar.Custom/mod/models/weapons/titan_triple_threat_og/w_titan_triple_threat_og.mdl b/Northstar.Custom/mod/models/weapons/titan_triple_threat_og/w_titan_triple_threat_og.mdl
new file mode 100644
index 000000000..1c338bcf9
--- /dev/null
+++ b/Northstar.Custom/mod/models/weapons/titan_triple_threat_og/w_titan_triple_threat_og.mdl
Binary files differ
diff --git a/Northstar.Custom/mod/scripts/vscripts/sh_northstar_custom_precache.gnut b/Northstar.Custom/mod/scripts/vscripts/sh_northstar_custom_precache.gnut
index d5af4cde8..848a4b865 100644
--- a/Northstar.Custom/mod/scripts/vscripts/sh_northstar_custom_precache.gnut
+++ b/Northstar.Custom/mod/scripts/vscripts/sh_northstar_custom_precache.gnut
@@ -4,9 +4,10 @@ global function NorthstarCustomPrecache
void function NorthstarCustomPrecache()
{
PrecacheWeapon( "mp_weapon_peacekraber" )
+ PrecacheWeapon( "mp_titanweapon_triplethreat" )
PrecacheWeapon( "melee_pilot_kunai" )
-
+
// create kunai damage source so game won't crash when we hit smth with it
// just using the default melee one, easier than making a new one
getconsttable()[ "eDamageSourceId" ][ "melee_pilot_kunai" ] <- eDamageSourceId.melee_pilot_emptyhanded
-} \ No newline at end of file
+}
diff --git a/Northstar.Custom/mod/scripts/vscripts/weapons/mp_projectile_titanweapon_triple_threat.nut b/Northstar.Custom/mod/scripts/vscripts/weapons/mp_projectile_titanweapon_triple_threat.nut
new file mode 100644
index 000000000..afdb6961e
--- /dev/null
+++ b/Northstar.Custom/mod/scripts/vscripts/weapons/mp_projectile_titanweapon_triple_threat.nut
@@ -0,0 +1,85 @@
+untyped
+
+
+global function OnProjectileCollision_titanweapon_triple_threat
+
+
+void function OnProjectileCollision_titanweapon_triple_threat( entity projectile, vector pos, vector normal, entity hitEnt, int hitbox, bool isCritical )
+{
+ if( !IsValid( hitEnt ) )
+ return
+
+ if( "impactFuse" in projectile.s && projectile.s.impactFuse == true )
+ projectile.GrenadeExplode( Vector( 0,0,0 ) )
+
+ if( hitEnt.GetClassName() == "player" && !hitEnt.IsTitan() )
+ return
+
+ if( !IsValid( projectile ) )
+ return
+
+ if( IsMagneticTarget( hitEnt ) )
+ {
+ if( hitEnt.GetTeam() != projectile.GetTeam() )
+ {
+ local normal = Vector( 0, 0, 1 )
+ if( "collisionNormal" in projectile.s )
+ normal = projectile.s.collisionNormal
+ projectile.GrenadeExplode( normal )
+ }
+ }
+ else if( "becomeProxMine" in projectile.s && projectile.s.becomeProxMine == true )
+ {
+ table collisionParams =
+ {
+ pos = pos,
+ normal = normal,
+ hitEnt = hitEnt,
+ hitbox = hitbox
+ }
+
+ PlantStickyEntity( projectile, collisionParams )
+ projectile.s.collisionNormal <- normal
+ #if SERVER
+ thread TripleThreatProximityTrigger( projectile )
+ #endif
+ }
+
+}
+
+#if SERVER
+function TripleThreatProximityTrigger( entity nade )
+{
+ //Hack, shouldn't be necessary with the IsValid check in OnProjectileCollision.
+ if( !IsValid( nade ) )
+ return
+
+ nade.EndSignal( "OnDestroy" )
+ EmitSoundOnEntity( nade, "Wpn_TripleThreat_Grenade_MineAttach" )
+
+ wait TRIPLETHREAT_MINE_FIELD_ACTIVATION_TIME
+
+ EmitSoundOnEntity( nade, "Weapon_Vortex_Gun.ExplosiveWarningBeep" )
+ local rangeCheck = PROX_MINE_RANGE
+ while( 1 )
+ {
+ local origin = nade.GetOrigin()
+ int team = nade.GetTeam()
+
+ local entityArray = GetScriptManagedEntArrayWithinCenter( level._proximityTargetArrayID, team, origin, PROX_MINE_RANGE )
+ foreach( entity ent in entityArray )
+ {
+ if ( TRIPLETHREAT_MINE_FIELD_TITAN_ONLY )
+ if ( !ent.IsTitan() )
+ continue
+
+ if ( IsAlive( ent ) )
+ {
+ nade.Signal( "ProxMineTrigger" )
+ return
+ }
+ }
+ WaitFrame()
+ }
+}
+#endif // SERVER
diff --git a/Northstar.Custom/mod/scripts/vscripts/weapons/sh_triple_threat.gnut b/Northstar.Custom/mod/scripts/vscripts/weapons/sh_triple_threat.gnut
new file mode 100644
index 000000000..eeea91d63
--- /dev/null
+++ b/Northstar.Custom/mod/scripts/vscripts/weapons/sh_triple_threat.gnut
@@ -0,0 +1,249 @@
+untyped
+
+
+global function MpTitanweaponTripleThreat_Init
+global function OnWeaponPrimaryAttack_titanweapon_triplethreat
+
+#if SERVER
+global function OnWeaponNpcPrimaryAttack_titanweapon_triplethreat
+#endif
+
+const FX_MINE_TRAIL = $"Rocket_Smoke_Large"
+const FX_MINE_LIGHT = $"tower_light_red"
+const FX_TRIPLE_IGNITION = $"wpn_grenade_TT_activate"
+const FX_TRIPLE_IGNITION_BURN = $"wpn_grenade_TT_activate"
+const BURN_MAGNETIC_FORCE = 2400
+const MIN_FUSE_TIME = 2.3
+const MAX_FUSE_TIME = 2.7
+const MIN_ROLLING_ROUNDS_FUSE_TIME = 3.2
+const MAX_ROLLING_ROUNDS_FUSE_TIME = 3.7
+
+global const TRIPLETHREAT_LAUNCH_VELOCITY = 1100.0
+global const TRIPLETHREAT_MIN_MINE_FUSE_TIME = 8.2
+global const TRIPLETHREAT_MAX_MINE_FUSE_TIME = 8.8
+global const TRIPLETHREAT_MINE_FIELD_ACTIVATION_TIME = 1.15 //After landing
+global const TRIPLETHREAT_MINE_FIELD_TITAN_ONLY = false
+global const TRIPLETHREAT_MINE_FIELD_MAX_MINES = 9
+global const TRIPLETHREAT_MINE_FIELD_LAUNCH_VELOCITY = 1100
+global const TRIPLETHREAT_NUM_SHOTS = 3
+global const PROX_MINE_RANGE = 200
+
+const TRIPLETHREAT_MAX_BOLTS = 3
+
+struct
+{
+ float[2][TRIPLETHREAT_MAX_BOLTS] boltOffsets = [
+ [0.2, 0.0],
+ [0.2, 2.0], // right
+ [0.2, -2.0], // left
+ ]
+} file
+
+
+function MpTitanweaponTripleThreat_Init()
+{
+ RegisterSignal( "ProxMineTrigger" )
+
+ PrecacheParticleSystem( FX_MINE_TRAIL )
+ PrecacheParticleSystem( FX_MINE_LIGHT )
+ PrecacheParticleSystem( FX_TRIPLE_IGNITION )
+ PrecacheParticleSystem( FX_TRIPLE_IGNITION_BURN )
+}
+
+var function OnWeaponPrimaryAttack_titanweapon_triplethreat( entity weapon, WeaponPrimaryAttackParams attackParams )
+{
+ entity owner = weapon.GetWeaponOwner()
+ float zoomFrac = owner.GetZoomFrac()
+ if ( zoomFrac < 1 && zoomFrac > 0)
+ return 0
+ weapon.EmitWeaponNpcSound( LOUD_WEAPON_AI_SOUND_RADIUS_MP, 0.2 )
+ return FireTripleThreat (weapon, attackParams, true)
+}
+
+#if SERVER
+var function OnWeaponNpcPrimaryAttack_titanweapon_triplethreat( entity weapon, WeaponPrimaryAttackParams attackParams )
+{
+ weapon.EmitWeaponNpcSound( LOUD_WEAPON_AI_SOUND_RADIUS_MP, 0.2 )
+ return FireTripleThreat (weapon, attackParams, false)
+}
+#endif
+
+function FireTripleThreat( entity weapon, WeaponPrimaryAttackParams attackParams, bool playerFired )
+{
+ entity weaponOwner = weapon.GetWeaponOwner()
+
+ bool shouldCreateProjectile = false
+ if ( IsServer() || weapon.ShouldPredictProjectiles() )
+ shouldCreateProjectile = true
+ #if CLIENT
+ if ( !playerFired )
+ shouldCreateProjectile = false
+ #endif
+
+ entity bossPlayer = weaponOwner
+ bool hasRollingRoundsMod = weapon.HasMod( "rolling_rounds" )
+
+ if ( weaponOwner.IsNPC() )
+ bossPlayer = weaponOwner.GetTitanSoul().GetBossPlayer()
+
+ bool inADS = weapon.IsWeaponInAds()
+ vector attackAngles = VectorToAngles( attackParams.dir )
+ vector baseUpVec = AnglesToUp( attackAngles )
+ vector baseRightVec = AnglesToRight( attackAngles )
+
+ if ( shouldCreateProjectile )
+ {
+ int numShots = weapon.GetProjectilesPerShot()
+ float velocity = TRIPLETHREAT_LAUNCH_VELOCITY * 1.2
+ float angleAdjustment = 1
+ if ( weapon.HasMod( "spread_increase_ttt" ) )
+ angleAdjustment = 1.5
+ else if ( weapon.HasMod( "spread_decrease_ttt" ) )
+ angleAdjustment = 0.5
+
+ for ( int i = 0; i < numShots; i++ )
+ {
+ vector upVec = baseUpVec * file.boltOffsets[i][0] * 0.05
+ vector rightVec = baseRightVec * file.boltOffsets[i][1] * angleAdjustment * 0.05
+
+ if ( inADS )
+ {
+ // Instead of swapping for horizontal spread, add it to preserve the y-axis velocity the shots normally have
+ upVec = baseUpVec * (file.boltOffsets[i][0] + file.boltOffsets[i][1] * angleAdjustment) * 0.05
+ rightVec = Vector(0, 0, 0)
+ }
+
+ vector attackVec = attackParams.dir + rightVec + upVec
+
+ if (weapon.HasMod("hydraulic_launcher"))
+ attackVec *= (1.0 + weapon.GetWeaponChargeFraction())
+
+ float fuseTime
+ if( hasRollingRoundsMod )
+ fuseTime = RandomFloatRange( MIN_ROLLING_ROUNDS_FUSE_TIME, MAX_ROLLING_ROUNDS_FUSE_TIME )
+ else
+ fuseTime = RandomFloatRange( MIN_FUSE_TIME, MAX_FUSE_TIME )
+
+ int damageType = damageTypes.explosive
+ if ( weapon.HasMod( "arc_triple_threat" ) )
+ damageType = damageType | damageTypes.electric
+
+ vector angularVelocity = Vector( RandomFloatRange( -velocity, velocity ), 100, 0 )
+
+ FireTripleThreatGrenade( weapon, attackParams.pos, attackVec, angularVelocity, playerFired, fuseTime, damageType )
+ }
+ }
+
+ return 3
+}
+
+function FireTripleThreatGrenade( entity weapon, origin, fwd, velocity, playerFired, float fuseTime, damageType = null )
+{
+ entity weaponOwner = weapon.GetWeaponOwner()
+
+ if ( damageType == null )
+ damageType = damageTypes.explosive
+
+ entity nade = weapon.FireWeaponGrenade( origin, fwd, velocity, 0, damageType, damageType, playerFired, true, true )
+ if ( nade )
+ {
+ nade.InitMagnetic( 1000.0, "Explo_MGL_MagneticAttract" )
+
+ nade.kv.CollideWithOwner = false
+
+ Grenade_Init( nade, weapon )
+ #if SERVER
+ nade.SetOwner( weaponOwner )
+ thread EnableCollision( nade )
+ thread AirPop( nade, fuseTime )
+ thread TrapExplodeOnDamage( nade, 50, 0.0, 0.1 )
+
+ if( weapon.HasMod( "mine_field" ) )
+ nade.s.becomeProxMine <- true
+
+ if( weapon.HasMod( "rolling_rounds" ) )
+ nade.s.rollingRound <- true
+
+ if( weapon.HasMod( "impact_fuse" ) )
+ nade.s.impactFuse <- true
+
+ if( weapon.HasMod( "burn_mod_titan_triple_threat" ) )
+ {
+ nade.s.hasBurnMod <- true
+ nade.InitMagnetic( BURN_MAGNETIC_FORCE, "Explo_TripleThreat_MagneticAttract" )
+ //EmitSoundOnEntity( nade, "Weapon_R1_MGL_Grenade_Emitter" )
+ }
+ #else
+ SetTeam( nade, weaponOwner.GetTeam() )
+ #endif
+
+ return nade
+ }
+}
+
+function EnableCollision( entity grenade )
+{
+ grenade.EndSignal("OnDestroy")
+
+ wait 1.0
+ grenade.kv.CollideWithOwner = true
+}
+
+function AirPop( entity grenade, float fuseTime )
+{
+ grenade.EndSignal( "OnDestroy" )
+
+ float popDelay = RandomFloatRange( 0.2, 0.3 )
+
+ string waitSignal = "Planted" // Signal triggered when mine sticks to something
+ local waitResult = WaitSignalTimeout( grenade, (fuseTime - (popDelay + 0.2)), waitSignal )
+
+ // Only enter here if the mine stuck to something
+ if ( waitResult != null && waitResult.signal == waitSignal )
+ {
+ fuseTime = RandomFloatRange( TRIPLETHREAT_MIN_MINE_FUSE_TIME, TRIPLETHREAT_MAX_MINE_FUSE_TIME )
+ waitSignal = "ProxMineTrigger"
+ waitResult = WaitSignalTimeout( grenade, (fuseTime - (popDelay + 0.2)), waitSignal )
+
+ // Mine was triggered via proximity
+ if ( waitResult != null && waitResult.signal == waitSignal )
+ EmitSoundOnEntity( grenade, "NPE_Missile_Alarm") // TEMP - Replace with a real sound
+ }
+
+ asset effect = FX_TRIPLE_IGNITION
+ if( "hasBurnMod" in grenade.s && grenade.s.hasBurnMod )
+ effect = FX_TRIPLE_IGNITION_BURN
+
+ int fxId = GetParticleSystemIndex( effect )
+ StartParticleEffectOnEntity( grenade, fxId, FX_PATTACH_ABSORIGIN_FOLLOW, -1 )
+
+ EmitSoundOnEntity( grenade, "Triple_Threat_Grenade_Charge" )
+
+ float popSpeed = RandomFloatRange( 40.0, 64.0 )
+ vector popVelocity = Vector ( 0, 0, popSpeed )
+ vector normal = Vector( 0, 0, 1 )
+ if( "becomeProxMine" in grenade.s && grenade.s.becomeProxMine == true )
+ {
+ //grenade.ClearParent()
+ if( "collisionNormal" in grenade.s )
+ {
+ normal = expect vector( grenade.s.collisionNormal )
+ popVelocity = expect vector( grenade.s.collisionNormal ) * popSpeed
+ }
+ }
+
+ vector newPosition = grenade.GetOrigin() + popVelocity
+ grenade.SetVelocity( GetVelocityForDestOverTime( grenade.GetOrigin(), newPosition, popDelay ) )
+
+ wait popDelay
+ TripleThreat_Explode( grenade )
+}
+
+function TripleThreat_Explode( entity grenade )
+{
+ vector normal = Vector( 0, 0, 1 )
+ if( "collisionNormal" in grenade.s )
+ normal = expect vector( grenade.s.collisionNormal )
+
+ grenade.GrenadeExplode( normal )
+}
diff --git a/Northstar.Custom/mod/scripts/weapons/mp_titanweapon_triplethreat.txt b/Northstar.Custom/mod/scripts/weapons/mp_titanweapon_triplethreat.txt
new file mode 100644
index 000000000..a1337d9f1
--- /dev/null
+++ b/Northstar.Custom/mod/scripts/weapons/mp_titanweapon_triplethreat.txt
@@ -0,0 +1,495 @@
+WeaponData
+{
+ // General
+ "printname" "#WPN_TITAN_TRIPLE_THREAT"
+ "shortprintname" "#WPN_TITAN_TRIPLE_THREAT_SHORT"
+ "description" "#WPN_TITAN_TRIPLE_THREAT_DESC"
+ "longdesc" "#WPN_TITAN_TRIPLE_THREAT_LONGDESC"
+
+ "leveled_pickup" "1"
+ "ammo_no_remove_from_stockpile" "1"
+
+ "menu_icon" "r2_ui/menus/loadout_icons/titan_weapon/titan_weapon_leadwall"
+ "hud_icon" "r2_ui/menus/loadout_icons/titan_weapon/titan_weapon_leadwall"
+
+ "weaponClass" "titan"
+ "weaponSubClass" "projectile_shotgun"
+ "body_type" "close_quarters"
+ "fire_mode" "semi-auto"
+ "pickup_hold_prompt" "Hold [USE] [WEAPONNAME]"
+ "pickup_press_prompt" "[USE] [WEAPONNAME]"
+ "minimap_reveal_distance" "32000"
+
+ "damage_flags" "DF_GIB"
+
+ "OnWeaponPrimaryAttack" "OnWeaponPrimaryAttack_titanweapon_triplethreat"
+ "OnWeaponNpcPrimaryAttack" "OnWeaponNpcPrimaryAttack_titanweapon_triplethreat"
+ "OnProjectileCollision" "OnProjectileCollision_titanweapon_triple_threat"
+
+ // Menu Stats
+ "stat_damage" "98"
+ "stat_range" "15"
+ "stat_accuracy" "15"
+ "stat_rof" "20"
+
+ // Models
+ "viewmodel" "models/weapons/titan_triple_threat_og/atpov_titan_triple_threat_og.mdl"
+ "playermodel" "models/weapons/titan_triple_threat_og/w_titan_triple_threat_og.mdl"
+ "holstermodel" "models/weapons/titan_triple_threat_og/w_titan_triple_threat_og.mdl"
+
+ MP_BASE
+ {
+ "damage_near_distance" "1500"
+ "damage_far_distance" "3000"
+ "damage_near_value" "0"
+ "damage_far_value" "0"
+ "damage_near_value_titanarmor" "0"
+ "damage_far_value_titanarmor" "0"
+
+ "deploy_time" "0.8"
+
+ "ammo_min_to_fire" "3"
+
+ "enable_highlight_networking_on_creation" "<KEEP_DEFAULT>"
+ "projectile_ricochet_max_count" "0"
+ }
+
+ SP_BASE
+ {
+ "damage_near_distance" "1500"
+ "damage_far_distance" "3000"
+ "damage_near_value" "0"
+ "damage_far_value" "0"
+ "damage_near_value_titanarmor" "0"
+ "damage_far_value_titanarmor" "0"
+
+ "deploy_time" "1.75"
+
+ "ammo_min_to_fire" "3"
+
+ "enable_highlight_networking_on_creation" "1"
+ }
+
+ // Effects
+ "tracer_effect" "weapon_tracers_titandestroyer"
+ "impact_effect_table" "triplethreat_frag"
+ "projectile_adjust_to_gun_barrel" "1"
+ "projectile_airburst_on_death" "1"
+
+ "vortex_absorb_effect" "wpn_vortex_projectile_trip_FP"
+ "vortex_absorb_effect_third_person" "wpn_vortex_projectile_trip"
+ "vortex_absorb_sound" "Vortex_Shield_AbsorbRocket"
+ "vortex_absorb_sound_1p_vs_3p" "Vortex_Shield_AbsorbRocket_1P_VS_3P"
+
+ "projectilemodel" "models/weapons/bullets/triple_threat_projectile.mdl"
+ "projectile_trail_effect_0" "wpn_grenade_TT"
+// "projectile_trail_effect_0" "P_leadwall_proj"
+
+ "sound_dryfire" "titan_dryfire"
+ "fire_sound_1_player_1p" "weapon_triplethreat_fire_1p"
+ "fire_sound_1_player_3p" "weapon_triplethreat_fire_3p"
+ "fire_sound_1_npc" "weapon_triplethreat_fire_3p"
+ "sound_zoom_in" "Weapon_Triple_Threat.ALT_On"
+ "sound_zoom_out" "Weapon_Triple_Threat.ALT_Off"
+
+ "low_ammo_sound_name_1" "mgl_lowammo_shot1"
+ "low_ammo_sound_name_2" "mgl_lowammo_shot2"
+
+ "fx_muzzle_flash_view" "wpn_muzzleflash_xo_triple_fp"
+ "fx_muzzle_flash_world" "wpn_muzzleflash_xo_triple"
+ "fx_muzzle_flash_attach" "muzzle_flash"
+
+ // Damage - When Used by Players
+ "damage_type" "burn"
+
+ "crosshair" "crosshair_t"
+ "explosion_damage" "350" // 150
+ "explosion_damage_heavy_armor" "550" // 150
+
+ "explosion_inner_radius" "140"
+ "explosionradius" "320"
+ "impulse_force" "5000"
+
+ "critical_hit_damage_scale" "1.5"
+
+ "critical_hit" "0"
+
+ "projectile_inherit_owner_velocity_scale" "0.2"
+
+ "projectiles_per_shot" "3"
+
+ // Ammo
+ "ammo_stockpile_max" "200"
+ "ammo_per_shot" "3"
+ "ammo_clip_size" "9"
+ "ammo_default_total" "200"
+ "ammo_display" "segmented"
+
+ // Regen Ammo
+ // "regen_ammo_refill_rate" "1.5"
+ // "regen_ammo_refill_start_delay" "1.0"
+
+ "bolt_hitsize" "0.5"
+ "bolt_hitsize_grow1_time" "0.075"
+ "bolt_hitsize_grow1_size" "4.0"
+ "bolt_hitsize_grow2_time" "0.075"
+ "bolt_hitsize_grow2_size" "4.0"
+ "bolt_hitsize_growfinal_lerptime" "0.18"
+ "bolt_hitsize_growfinal_size" "6.0"
+ "bolt_bounce_frac" "1.0"
+
+ "projectile_launch_speed" "1100"
+ "projectile_launch_pitch_offset" "1"
+ "projectile_adjust_to_gun_barrel" "1"
+
+ "grenade_bounce_vel_frac_shallow" "0.4"
+ "grenade_bounce_vel_frac_sharp" "0.25"
+ "grenade_bounce_vel_frac_along_normal" "0.5"
+ "grenade_bounce_randomness" "0.2"
+ "grenade_bounce_extra_vertical_randomness" "0.2"
+ "grenade_roll_vel_frac_per_second" "0.1"
+
+ // Behavior
+ "fire_rate" "1.2"
+ "zoom_time_in" "0.2"
+ "zoom_time_out" "0.2"
+ "zoom_fov" "55"
+ "zoom_effects" "1"
+ "reload_time" "3.0"
+ "reload_time_late1" "2"
+ "reload_time_late2" "1"
+ "reloadempty_time" "3.0"
+ "reloadempty_time_late1" "2"
+ "reloadempty_time_late2" "1"
+ "holster_time" "0.45"
+ "deploy_time" "0.85"
+ "lower_time" "0.1"
+ "raise_time" "0.4"
+ "vortex_refire_behavior" "grenade"
+ "allow_empty_fire" "0"
+ "reload_enabled" "1"
+ "allow_empty_click" "1"
+ "empty_reload_only" "0"
+ "trigger_snipercam" "1"
+ "allow_headshots" "0"
+ "primary_fire_does_not_block_sprint" "0"
+ "ads_move_speed_scale" "0.75"
+ "aimassist_disable_hipfire_humansonly" "1"
+ "aimassist_disable_ads_humansonly" "1"
+
+ // Spread
+ "spread_stand_hip" "0.0"
+ "spread_stand_hip_run" "0.0"
+ "spread_stand_hip_sprint" "0.0"
+ "spread_stand_ads" "0.0"
+ "spread_crouch_hip" "0.0"
+ "spread_crouch_ads" "0.0"
+ "spread_air_hip" "0.0"
+ "spread_air_ads" "0.0"
+
+ // Spread on NPCs affects their initial shooting direction
+ // Don't make this a large number or the damage/tracers won't be even remotely parallel to their barrel
+
+ "ammo_suck_behavior" "primary_weapons"
+
+ // View Kick
+ "viewkick_spring" "titan_launcher"
+
+ "viewkick_pitch_base" "-3.0"
+ "viewkick_pitch_random" "1.0"
+ "viewkick_pitch_softScale" "1.0"
+ "viewkick_pitch_hardScale" "3.0"
+
+ "viewkick_yaw_base" "-0.25"
+ "viewkick_yaw_random" "0.5"
+ "viewkick_yaw_softScale" "0.3"
+ "viewkick_yaw_hardScale" "2.0"
+
+ "viewkick_roll_base" "0.0"
+ "viewkick_roll_randomMin" "0.6"
+ "viewkick_roll_randomMax" "0.8"
+ "viewkick_roll_softScale" "0.2"
+ "viewkick_roll_hardScale" "2.0"
+
+ "viewkick_hipfire_weaponFraction" "0.3"
+ "viewkick_hipfire_weaponFraction_vmScale" "0.5"
+ "viewkick_ads_weaponFraction" "0.2"
+ "viewkick_ads_weaponFraction_vmScale" "0.5"
+
+ "viewpunch_multiplier" "1.8"
+
+ //"viewkick_spring" "titan_leadwall"
+//
+ //"viewkick_pitch_base" "-2.25"
+ //"viewkick_pitch_random" "1"
+ //"viewkick_pitch_softScale" "6.0"
+ //"viewkick_pitch_hardScale" "1.0"
+//
+ //"viewkick_yaw_base" "-0.95"
+ //"viewkick_yaw_random" "0.5"
+ //"viewkick_yaw_softScale" "0.5"
+ //"viewkick_yaw_hardScale" "2.0"
+//
+ //"viewkick_roll_base" "0"
+ //"viewkick_roll_randomMin" "0.6"
+ //"viewkick_roll_randomMax" "0.8"
+ //"viewkick_roll_softScale" "0.2"
+ //"viewkick_roll_hardScale" "2.75"
+//
+ //"viewkick_hipfire_weaponFraction" "0.1"
+ //"viewkick_hipfire_weaponFraction_vmScale" "10.0"
+ //"viewkick_ads_weaponFraction" "0.1"
+ //"viewkick_ads_weaponFraction_vmScale" "10.0"
+
+ "viewkick_perm_pitch_base" "0"
+ "viewkick_perm_pitch_random" "0.0"
+
+ //
+ "viewmodel_shake_forward" "0.5"
+ "viewmodel_shake_up" "0.2"
+ "viewmodel_shake_right" "0.0"
+
+ // Bob
+ "bob_cycle_time" "0.69"
+ "bob_vert_dist" "0.6"
+ "bob_horz_dist" "0.1"
+ "bob_max_speed" "150"
+ "bob_pitch" "0.75"
+ "bob_yaw" "-1.7"
+ "bob_roll" "-1.2"
+
+ // Bob
+ "bob_cycle_time_zoomed" "0.69"
+ "bob_vert_dist_zoomed" "0.6"
+ "bob_horz_dist_zoomed" "0.1"
+ "bob_max_speed_zoomed" "150"
+ "bob_pitch_zoomed" "0.75"
+ "bob_yaw_zoomed" "-1.7"
+ "bob_roll_zoomed" "-1.2"
+
+ // Rumble
+ "fire_rumble" "titan_triple_threat"
+
+ // Sway
+ "sway_rotate_attach" "SWAY_ROTATE"
+ "sway_min_x" "-0.5"
+ "sway_min_y" "-2"
+ "sway_min_z" "-2.7"
+ "sway_max_x" "0.5"
+ "sway_max_y" "2"
+ "sway_max_z" "2.7"
+ "sway_min_pitch" "-3"
+ "sway_min_yaw" "-2.5"
+ "sway_min_roll" "-4"
+ "sway_max_pitch" "3"
+ "sway_max_yaw" "2.5"
+ "sway_max_roll" "4"
+ "sway_translate_gain" "4"
+ "sway_rotate_gain" "7"
+ "sway_move_forward_translate_x" "-0.1"
+ "sway_move_forward_translate_z" "-2.7"
+ "sway_move_back_translate_x" "0.2"
+ "sway_move_back_translate_z" "-0.2"
+ "sway_move_left_translate_y" "-1"
+ "sway_move_left_translate_z" "-0.5"
+ "sway_move_left_rotate_roll" "-2"
+ "sway_move_right_translate_y" "1"
+ "sway_move_right_translate_z" "-0.5"
+ "sway_move_right_rotate_roll" "2"
+ "sway_move_up_translate_z" "-1"
+ "sway_move_down_translate_z" "1"
+ "sway_turn_left_rotate_yaw" "1"
+ "sway_turn_right_rotate_yaw" "-1"
+
+ "sway_turn_left_translate_y" "-.5"
+ "sway_turn_right_translate_y" ".5"
+ "sway_turn_up_translate_z" "-1"
+ "sway_turn_down_translate_z" "1"
+ "sway_turn_up_translate_x" "-.1"
+ "sway_turn_down_translate_x" ".1"
+
+ "sway_turn_left_rotate_roll" "-4"
+ "sway_turn_right_rotate_roll" "4"
+ "sway_turn_up_rotate_pitch" "-3"
+ "sway_turn_down_rotate_pitch" "3"
+ "sway_turn_up_rotate_roll" "0.8"
+ "sway_turn_down_rotate_roll" "-0.8"
+
+ // Sway
+ "sway_rotate_attach_zoomed" "SWAY_ROTATE"
+ "sway_min_x_zoomed" "-0.5"
+ "sway_min_y_zoomed" "-2"
+ "sway_min_z_zoomed" "-2.7"
+ "sway_max_x_zoomed" "0.5"
+ "sway_max_y_zoomed" "2"
+ "sway_max_z_zoomed" "2.7"
+ "sway_min_pitch_zoomed" "-3"
+ "sway_min_yaw_zoomed" "-2.5"
+ "sway_min_roll_zoomed" "-4"
+ "sway_max_pitch_zoomed" "3"
+ "sway_max_yaw_zoomed" "2.5"
+ "sway_max_roll_zoomed" "4"
+ "sway_translate_gain_zoomed" "4"
+ "sway_rotate_gain_zoomed" "7"
+ "sway_move_forward_translate_x_zoomed" "-0.1"
+ "sway_move_forward_translate_z_zoomed" "-2.7"
+ "sway_move_back_translate_x_zoomed" "0.2"
+ "sway_move_back_translate_z_zoomed" "-0.2"
+ "sway_move_left_translate_y_zoomed" "-1"
+ "sway_move_left_translate_z_zoomed" "-0.5"
+ "sway_move_left_rotate_roll_zoomed" "-2"
+ "sway_move_right_translate_y_zoomed" "1"
+ "sway_move_right_translate_z_zoomed" "-0.5"
+ "sway_move_right_rotate_roll_zoomed" "2"
+ "sway_move_up_translate_z_zoomed" "-1"
+ "sway_move_down_translate_z_zoomed" "1"
+ "sway_turn_left_rotate_yaw_zoomed" "1"
+ "sway_turn_right_rotate_yaw_zoomed" "-1"
+
+ "sway_turn_left_translate_y_zoomed" "-.5"
+ "sway_turn_right_translate_y_zoomed" ".5"
+ "sway_turn_up_translate_z_zoomed" "-1"
+ "sway_turn_down_translate_z_zoomed" "1"
+ "sway_turn_up_translate_x_zoomed" "-.1"
+ "sway_turn_down_translate_x_zoomed" ".1"
+
+ "sway_turn_left_rotate_roll_zoomed" "-4"
+ "sway_turn_right_rotate_roll_zoomed" "4"
+ "sway_turn_up_rotate_pitch_zoomed" "-3"
+ "sway_turn_down_rotate_pitch_zoomed" "3"
+ "sway_turn_up_rotate_roll_zoomed" "0.8"
+ "sway_turn_down_rotate_roll_zoomed" "-0.8"
+
+ // NPC
+ "proficiency_poor_spreadscale" "7.0"
+ "proficiency_poor_additional_rest" "1.0"
+ "proficiency_average_spreadscale" "5.0"
+ "proficiency_average_additional_rest" "0.5"
+ "proficiency_good_spreadscale" "3.33333"
+ "proficiency_good_additional_rest" "0.2"
+ "proficiency_very_good_spreadscale" "3.66667"
+ "proficiency_very_good_additional_rest" "0"
+
+
+ "npc_min_range" "0"
+ "npc_max_range" "1500" // roughly projectile speed * lifetime in script + barrel offset
+
+ "npc_min_burst" "1"
+ "npc_max_burst" "1"
+ "npc_rest_time_between_bursts_min" "0.1"
+ "npc_rest_time_between_bursts_max" "0.4"
+
+ "npc_fire_at_enemy_defense_time" "1.5"
+
+ // WeaponED Unhandled Key/Values and custom script Key/Values
+ "bob_tilt_angle" "0.5"
+ "sway_turn_angle_factor" "-0.5"
+ "sway_turn_origin_factor" "0"
+ "sway_turn_angle_factor_zoomed" "0"
+ "sway_turn_origin_factor_zoomed" "0.05"
+ "sway_move_angle_factor" "0.15"
+ "sway_move_origin_factor" "0.15"
+ "sway_move_angle_factor_zoomed" "0"
+ "sway_move_origin_factor_zoomed" "0.03"
+ "sway_gain" "10.0"
+ "deployfirst_time" "1.0"
+ "deploycatch_time" "1.33"
+
+ "projectile_damage_reduction_per_bounce" "0.0"
+ "projectile_damages_owner" "0"
+ //"projectile_speed_reduction_factor" "0.5"
+
+ // Crosshair
+ "red_crosshair_range" "600"
+
+
+
+
+ // Bodygroups:
+ "clip_bodygroup" "triple_threat_magazine"
+ "clip_bodygroup_index_shown" "0"
+ "clip_bodygroup_index_hidden" "1"
+ "clip_bodygroup_show_for_milestone_0" "1"
+ "clip_bodygroup_show_for_milestone_1" "0"
+ "clip_bodygroup_show_for_milestone_2" "1"
+
+
+ Mods
+ {
+ mine_field
+ {
+
+ }
+
+ spread_decrease_ttt
+ {
+
+ }
+
+ spread_increase_ttt
+ {
+
+ }
+
+ hydraulic_launcher
+ {
+ "charge_time" "3.0" //Hydraulic Launcher - Charge to increase distance fired.
+ "charge_rumble_min" "10"
+ "charge_rumble_max" "40"
+ }
+
+
+ impact_fuse
+ {
+
+ }
+
+ rolling_rounds
+ {
+ "grenade_bounce_vel_frac_shallow" "0.6"
+ "grenade_bounce_vel_frac_sharp" "0.4"
+ "grenade_bounce_vel_frac_along_normal" "0.7"
+ "grenade_roll_vel_frac_per_second" "0.5"
+ }
+
+
+ burn_mod_titan_triple_threat
+ {
+ "projectile_trail_effect_0" "wpn_grenade_frag_mag_burn"
+ //"damage_near_value" "*1.5"
+ //"damage_far_value" "*1.5"
+ //"damage_near_value_titanarmor" "*1.5"
+ //"damage_far_value_titanarmor" "*1.5"
+ //"explosion_damage" "*1.5" // 150
+ //"explosion_damage_heavy_armor" "*1.5" // 150
+ "is_burn_mod" "1"
+ }
+ }
+ active_crosshair_count "1"
+ crosshair_index "0"
+
+ RUI_CrosshairData
+ {
+ DefaultArgs
+ {
+ adjustedSpread weapon_spread
+ adsFrac player_zoomFrac
+ isSprinting player_is_sprinting
+ isReloading weapon_is_reloading
+ teamColor crosshair_team_color
+ isAmped weapon_is_amped
+ crosshairMovementX crosshair_movement_x
+ crosshairMovementY crosshair_movement_y
+ }
+
+ Crosshair_1
+ {
+ "ui" "ui/crosshair_leadwall"
+ "base_spread" "0.0"
+ Args
+ {
+ isFiring weapon_is_firing
+ }
+ }
+ }
+}