aboutsummaryrefslogtreecommitdiff
path: root/Northstar.Custom
diff options
context:
space:
mode:
authorBobTheBob <32057864+BobTheBob9@users.noreply.github.com>2021-10-14 21:01:40 +0100
committerBobTheBob <32057864+BobTheBob9@users.noreply.github.com>2021-10-14 21:01:40 +0100
commit9a2778eabc7ba968968e41dda9f03525d6c5383d (patch)
tree6d1c5dc64754d542d68a7f47742a701a4eec9308 /Northstar.Custom
parentc0a0c7e502f2bc99185d79a485b965f63de7a203 (diff)
downloadNorthstarMods-9a2778eabc7ba968968e41dda9f03525d6c5383d.tar.gz
NorthstarMods-9a2778eabc7ba968968e41dda9f03525d6c5383d.zip
oh fuck i forgot to commit for a while
Diffstat (limited to 'Northstar.Custom')
-rw-r--r--Northstar.Custom/keyvalues/playlists_v2.txt76
-rw-r--r--Northstar.Custom/keyvalues/scripts/weapons/mp_titanweapon_particle_accelerator.txt4
-rw-r--r--Northstar.Custom/mod.json53
-rw-r--r--Northstar.Custom/mod/scripts/levels/mp_bob.rson9
-rw-r--r--Northstar.Custom/mod/scripts/levels/mp_box.rson2
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/_bleedout_damage.gnut137
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/_custom_air_accel.gnut6
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/_custom_oob_timer.gnut7
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_fastball.gnut10
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_gg.gnut2
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_hs.gnut191
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_inf.gnut6
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_kr.gnut2
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/gamemodes/cl_gamemode_hs.gnut91
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/gamemodes/sh_gamemode_hs.gnut47
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/mp/levels/mp_bob.nut38
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/mp/levels/mp_bob_temp_props.nut7
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/titan/sh_first_person_embark.gnut6
-rw-r--r--Northstar.Custom/mod/scripts/weapons/mp_weapon_peacekraber.txt6
-rw-r--r--Northstar.Custom/mod/scripts/weapons/mp_weapon_sniper.txt651
-rw-r--r--Northstar.Custom/vpk/client_mp_northstar_common.bsp.pak000_000.vpkbin88553677 -> 95176823 bytes
-rw-r--r--Northstar.Custom/vpk/englishclient_mp_northstar_common.bsp.pak000_dir.vpkbin6272 -> 6325 bytes
22 files changed, 672 insertions, 679 deletions
diff --git a/Northstar.Custom/keyvalues/playlists_v2.txt b/Northstar.Custom/keyvalues/playlists_v2.txt
index 30ea69807..813accb64 100644
--- a/Northstar.Custom/keyvalues/playlists_v2.txt
+++ b/Northstar.Custom/keyvalues/playlists_v2.txt
@@ -185,6 +185,23 @@ playlists
gamemode_bullet_005 #GAMEMODE_BULLET_CTF_005
}
}
+ hs
+ {
+ inherit defaults
+ vars
+ {
+ name #GAMEMODE_hs
+ lobbytitle #PL_hs_lobby
+ description #PL_hs_desc
+ hint #PL_hs_hint
+ abbreviation #PL_hs_abbr
+ image tdm
+ timelimit 10
+ max_players 16
+
+ gamemode_score_hint #GAMEMODE_SCORE_HINT_TDM
+ }
+ }
}
Playlists
{
@@ -242,6 +259,7 @@ playlists
lobbytitle #PL_tt_lobby
description #PL_tt_desc
hint #PL_tt_hint
+ image lts
abbreviation #PL_tt_abbr
visible 0
}
@@ -279,6 +297,7 @@ playlists
lobbytitle #PL_inf_lobby
description #PL_inf_desc
hint #PL_inf_hint
+ image ps
abbreviation #PL_inf_abbr
visible 0
}
@@ -376,7 +395,7 @@ playlists
description #PL_kr_desc
hint #PL_kr_hint
abbreviation #PL_kr_abbr
-
+ image ctf
max_players 16
max_teams 16
classic_mp 1
@@ -424,7 +443,7 @@ playlists
description #PL_fastball_desc
hint #PL_fastball_hint
abbreviation #PL_fastball_abbr
-
+ image ffa
max_players 16
max_teams 2
classic_mp 1
@@ -469,6 +488,7 @@ playlists
description #PL_fw_desc
hint #PL_fw_hint
abbreviation #PL_fw_abbr
+ image fw
max_players 16
max_teams 2
@@ -568,5 +588,57 @@ playlists
}
}
}
+ hs
+ {
+ inherit defaults
+ vars
+ {
+ name #GAMEMODE_hs
+ lobbytitle #PL_hs_lobby
+ description #PL_hs_desc
+ hint #PL_hs_hint
+ abbreviation #PL_hs_abbr
+ image tdm
+ timelimit 10
+ max_players 16
+
+ gamemode_score_hint #GAMEMODE_SCORE_HINT_TDM
+ }
+ gamemodes
+ {
+ hs
+ {
+ mp_complex3 1
+ mp_drydock 1
+ mp_glitch 1
+ mp_homestead 2
+ mp_eden 1
+ mp_forwardbase_kodai 1
+ mp_black_water_canal 1
+ mp_glitch 1
+ mp_angel_city 1
+ mp_colony02 1
+ mp_relic02 1
+ mp_grave 1
+ mp_homestead 1
+ mp_drydock 1
+ mp_glitch 1
+ mp_thaw 1
+ mp_eden 2
+ mp_black_water_canal 1
+ mp_glitch 1
+ mp_relic02 1
+ mp_wargames 1
+ mp_rise 1
+ mp_crashsite3 1
+ mp_lf_stacks 1
+ mp_lf_deck 1
+ mp_lf_meadow 1
+ mp_lf_traffic 1
+ mp_lf_township 1
+ mp_lf_uma 1
+ }
+ }
+ }
}
} \ No newline at end of file
diff --git a/Northstar.Custom/keyvalues/scripts/weapons/mp_titanweapon_particle_accelerator.txt b/Northstar.Custom/keyvalues/scripts/weapons/mp_titanweapon_particle_accelerator.txt
deleted file mode 100644
index a30ed8f8f..000000000
--- a/Northstar.Custom/keyvalues/scripts/weapons/mp_titanweapon_particle_accelerator.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-WeaponData
-{
- "playermodel" "models/SPOILER_w_titan_particle_accelerator.mdl"
-}
diff --git a/Northstar.Custom/mod.json b/Northstar.Custom/mod.json
index d1ebeec32..8a09c7563 100644
--- a/Northstar.Custom/mod.json
+++ b/Northstar.Custom/mod.json
@@ -249,6 +249,27 @@
"RunOn": "CLIENT && MP"
},
+ // hide and seek
+ {
+ "Path": "gamemodes/sh_gamemode_hs.gnut",
+ "RunOn": "( CLIENT || SERVER ) && MP",
+ "ClientCallback": {
+ "Before": "Sh_GamemodeHideAndSeek_Init"
+ },
+
+ "ServerCallback": {
+ "Before": "Sh_GamemodeHideAndSeek_Init"
+ }
+ },
+ {
+ "Path": "gamemodes/_gamemode_hs.gnut",
+ "RunOn": "SERVER && MP"
+ },
+ {
+ "Path": "gamemodes/cl_gamemode_hs.gnut",
+ "RunOn": "CLIENT && MP"
+ },
+
// ctf comp
{
"Path": "gamemodes/sh_gamemode_ctf_comp.gnut",
@@ -267,10 +288,12 @@
"RunOn": "( CLIENT || SERVER ) && MP",
"ClientCallback": {
"Before": "FirstPersonEmbark_Init",
+ "After": "FirstPersonEmbark_InitPlaylistVars"
},
"ServerCallback": {
- "Before": "FirstPersonEmbark_Init"
+ "Before": "FirstPersonEmbark_Init",
+ "After": "FirstPersonEmbark_InitPlaylistVars"
}
},
@@ -285,7 +308,7 @@
{
"Path": "_custom_air_accel.gnut",
- "RunOn": "MP",
+ "RunOn": "CLIENT || SERVER",
"ClientCallback": {
"After": "CustomAirAccelVars_Init"
},
@@ -306,6 +329,32 @@
"After": "Promode_Init"
}
},
+
+ {
+ "Path": "_bleedout_damage.gnut",
+ "RunOn": "( CLIENT || SERVER ) && MP",
+ "ClientCallback": {
+ "Before": "BleedoutDamage_PreInit",
+ "After": "BleedoutDamage_Init"
+ },
+
+ "ServerCallback": {
+ "Before": "BleedoutDamage_PreInit",
+ "After": "BleedoutDamage_Init"
+ }
+ },
+
+ {
+ "Path": "_custom_oob_timer.gnut",
+ "RunOn": "( CLIENT || SERVER ) && MP",
+ "ClientCallback": {
+ "After": "CustomOOBTimer_Init"
+ },
+
+ "ServerCallback": {
+ "After": "CustomOOBTimer_Init"
+ }
+ }
],
"Localisation": [
diff --git a/Northstar.Custom/mod/scripts/levels/mp_bob.rson b/Northstar.Custom/mod/scripts/levels/mp_bob.rson
new file mode 100644
index 000000000..58c8a1ca5
--- /dev/null
+++ b/Northstar.Custom/mod/scripts/levels/mp_bob.rson
@@ -0,0 +1,9 @@
+//C:\depot\r2dev\game autofastfunction.pl
+
+IsTestMap: false
+When: "SERVER"
+Scripts:
+[
+ mp/levels/mp_bob_temp_props.nut
+ mp/levels/mp_bob.nut
+] \ No newline at end of file
diff --git a/Northstar.Custom/mod/scripts/levels/mp_box.rson b/Northstar.Custom/mod/scripts/levels/mp_box.rson
index 1a8d1ee70..3056c5058 100644
--- a/Northstar.Custom/mod/scripts/levels/mp_box.rson
+++ b/Northstar.Custom/mod/scripts/levels/mp_box.rson
@@ -1,6 +1,6 @@
//C:\depot\r2dev\game autofastfunction.pl
-IsTestMap: false
+IsTestMap: true
When: "SERVER"
Scripts:
[
diff --git a/Northstar.Custom/mod/scripts/vscripts/_bleedout_damage.gnut b/Northstar.Custom/mod/scripts/vscripts/_bleedout_damage.gnut
new file mode 100644
index 000000000..8b21184ad
--- /dev/null
+++ b/Northstar.Custom/mod/scripts/vscripts/_bleedout_damage.gnut
@@ -0,0 +1,137 @@
+// note: this is technically vanilla content, since bleedout was shipped with retail, but it needs custom remote functions which would break vanilla compatiblity, so it's not in Northstar.CustomServers
+// idk why bleedout was even shipped in retail lmao
+global function BleedoutDamage_PreInit
+global function BleedoutDamage_Init
+global function SetShouldPlayerStartBleedoutFunc
+
+struct {
+ array<entity> bleedingPlayers // this is in _bleedout already, but it doesn't expose a way to track it, so we have to track it ourselves
+ bool functionref( entity, var ) shouldPlayerStartBleedoutFunc = null
+} file
+
+void function BleedoutDamage_PreInit()
+{
+ AddCallback_OnRegisteringCustomNetworkVars( Bleedout_RegisterRemoteFunctions )
+}
+
+void function Bleedout_RegisterRemoteFunctions()
+{
+ Remote_RegisterFunction( "ServerCallback_BLEEDOUT_StartFirstAidProgressBar" )
+ Remote_RegisterFunction( "ServerCallback_BLEEDOUT_StopFirstAidProgressBar" )
+ Remote_RegisterFunction( "ServerCallback_BLEEDOUT_ShowWoundedMarker" )
+ Remote_RegisterFunction( "ServerCallback_BLEEDOUT_HideWoundedMarker" )
+}
+
+// copied from sh_bleedout
+const float DEFAULT_BLEEDOUT_TIME = 30.0
+const float DEFAULT_FIRSTAID_TIME = 3.0
+const float DEFAULT_FIRSTAID_TIME_SELF = -1.0
+const float DEFAULT_FIRSTAID_HEAL_PERCENT = 1.0
+const float DEFAULT_AI_BLEEDING_PLAYER_MISS_CHANCE = 0.0
+const bool DEFAULT_FORCE_WEAPON_HOLSTER = false
+const bool DEFAULT_DEATH_ON_TEAM_BLEEDOUT = false
+
+void function BleedoutDamage_Init()
+{
+ AddPrivateMatchModeSettingEnum( "#MODE_SETTING_CATEGORY_BLEEDOUT", "riff_player_bleedout", [ "Default", "Disabled", "Enabled" ], "0" )
+ AddPrivateMatchModeSettingEnum( "#MODE_SETTING_CATEGORY_BLEEDOUT", "player_bleedout_forceHolster", [ "Disabled", "Enabled" ], DEFAULT_FORCE_WEAPON_HOLSTER.tostring() )
+ AddPrivateMatchModeSettingEnum( "#MODE_SETTING_CATEGORY_BLEEDOUT", "player_bleedout_forceDeathOnTeamBleedout", [ "Disabled", "Enabled" ], DEFAULT_DEATH_ON_TEAM_BLEEDOUT.tostring() )
+ AddPrivateMatchModeSettingArbitrary( "#MODE_SETTING_CATEGORY_BLEEDOUT", "player_bleedout_bleedoutTime", DEFAULT_BLEEDOUT_TIME.tostring() )
+ AddPrivateMatchModeSettingArbitrary( "#MODE_SETTING_CATEGORY_BLEEDOUT", "player_bleedout_firstAidTime", DEFAULT_FIRSTAID_TIME.tostring() )
+ AddPrivateMatchModeSettingArbitrary( "#MODE_SETTING_CATEGORY_BLEEDOUT", "player_bleedout_firstAidTimeSelf", DEFAULT_FIRSTAID_TIME_SELF.tostring() )
+ AddPrivateMatchModeSettingArbitrary( "#MODE_SETTING_CATEGORY_BLEEDOUT", "player_bleedout_firstAidHealPercent", DEFAULT_FIRSTAID_HEAL_PERCENT.tostring() )
+ AddPrivateMatchModeSettingArbitrary( "#MODE_SETTING_CATEGORY_BLEEDOUT", "player_bleedout_aiBleedingPlayerMissChance", DEFAULT_AI_BLEEDING_PLAYER_MISS_CHANCE.tostring() )
+
+ #if CLIENT
+ // because playlist var overrides fucking suck, they aren't actually updated by this point
+ // client bleedout can be inited late enough that we can just init it on local player spawn
+ AddCallback_LocalClientPlayerSpawned( InitClientBleedoutForLocalPlayer )
+ #elseif SERVER
+ // sh_riff_settings should set this correctly on server
+ if ( !Riff_PlayerBleedout() )
+ return
+
+ AddDamageCallback( "player", HandleDamageForBleedout ) // do this irregardless of whether scripts inited, given it should always be used for bleedout
+ Bleedout_SetCallback_OnPlayerStartBleedout( OnPlayerBleedoutBegin ) // kinda sucks we have to use this callback since game scripts could be using it
+
+ // dont init if scripts already inited it manually
+ if ( !Bleedout_IsBleedoutLogicActive() )
+ {
+ InitSharedBleedoutWithPlaylistVars()
+ Bleedout_Init()
+ }
+ #endif
+}
+
+void function SetShouldPlayerStartBleedoutFunc( bool functionref( entity, var ) func )
+{
+ file.shouldPlayerStartBleedoutFunc = func
+}
+
+void function InitSharedBleedoutWithPlaylistVars()
+{
+ BleedoutShared_Init(
+ GetCurrentPlaylistVarFloat( "player_bleedout_bleedoutTime", DEFAULT_BLEEDOUT_TIME ),
+ GetCurrentPlaylistVarFloat( "player_bleedout_firstAidTime", DEFAULT_FIRSTAID_TIME ),
+ GetCurrentPlaylistVarFloat( "player_bleedout_firstAidTimeSelf", DEFAULT_FIRSTAID_TIME_SELF ),
+ GetCurrentPlaylistVarFloat( "player_bleedout_firstAidHealPercent", DEFAULT_FIRSTAID_HEAL_PERCENT ),
+ GetCurrentPlaylistVarFloat( "player_bleedout_aiBleedingPlayerMissChance", DEFAULT_AI_BLEEDING_PLAYER_MISS_CHANCE ),
+ GetCurrentPlaylistVarInt( "player_bleedout_forceHolster", int( DEFAULT_FORCE_WEAPON_HOLSTER ) ) == 1,
+ GetCurrentPlaylistVarInt( "player_bleedout_forceDeathOnTeamBleedout", int( DEFAULT_DEATH_ON_TEAM_BLEEDOUT ) ) == 1
+ )
+}
+
+#if CLIENT
+void function InitClientBleedoutForLocalPlayer( entity player )
+{
+ // dont init if bleedout is disabled or scripts already inited it
+ if ( !Riff_PlayerBleedout() || Bleedout_IsBleedoutLogicActive() )
+ return
+
+ InitSharedBleedoutWithPlaylistVars()
+ BleedoutClient_Init()
+}
+#endif
+
+#if SERVER
+void function HandleDamageForBleedout( entity player, var damageInfo )
+{
+ if ( IsInstantDeath( damageInfo ) || DamageInfo_GetForceKill( damageInfo ) || player.IsTitan() || file.bleedingPlayers.contains( player ) )
+ return
+
+ if ( file.shouldPlayerStartBleedoutFunc != null )
+ if ( !file.shouldPlayerStartBleedoutFunc( player, damageInfo ) )
+ return
+
+ // check if damage would kill player
+ if ( player.GetHealth() - DamageInfo_GetDamage( damageInfo ) <= 0 )
+ {
+ Bleedout_StartPlayerBleedout( player, DamageInfo_GetAttacker( damageInfo ) )
+ DamageInfo_SetDamage( damageInfo, 1 ) // prevent player from dying, but if we set it to 0, player won't receive any knockback from damage source
+ }
+}
+
+void function OnPlayerBleedoutBegin( entity player )
+{
+ file.bleedingPlayers.append( player )
+
+ // would prefer to use Bleedout_SetCallback_OnPlayerGiveFirstAid for this, but it doesn't expose the player that's receiving first aid for some reason
+ thread TrackPlayerBleedout( player )
+}
+
+void function TrackPlayerBleedout( entity player )
+{
+ player.EndSignal( "OnDeath" )
+ player.EndSignal( "OnDestroy" )
+
+ OnThreadEnd( function() : ( player )
+ {
+ file.bleedingPlayers.remove( file.bleedingPlayers.find( player ) )
+ })
+
+ WaitFrame() // wait a frame, since this gets called before this status effect is added
+
+ while ( StatusEffect_Get( player, eStatusEffect.bleedoutDOF ) != 0 )
+ WaitFrame()
+}
+#endif \ No newline at end of file
diff --git a/Northstar.Custom/mod/scripts/vscripts/_custom_air_accel.gnut b/Northstar.Custom/mod/scripts/vscripts/_custom_air_accel.gnut
index 8ebef0342..faa924804 100644
--- a/Northstar.Custom/mod/scripts/vscripts/_custom_air_accel.gnut
+++ b/Northstar.Custom/mod/scripts/vscripts/_custom_air_accel.gnut
@@ -1,8 +1,10 @@
global function CustomAirAccelVars_Init
void function CustomAirAccelVars_Init()
-{
- AddPrivateMatchModeSettingArbitrary( "#MODE_SETTING_CATEGORY_PILOT", "custom_air_accel_pilot", "500" ) // 500 is the default airaccel
+{
+ #if MP
+ AddPrivateMatchModeSettingArbitrary( "#MODE_SETTING_CATEGORY_PILOT", "custom_air_accel_pilot", "500" ) // 500 is the default airaccel
+ #endif
#if SERVER
AddCallback_OnPlayerRespawned( ApplyCustomPlayerAirAccel )
diff --git a/Northstar.Custom/mod/scripts/vscripts/_custom_oob_timer.gnut b/Northstar.Custom/mod/scripts/vscripts/_custom_oob_timer.gnut
new file mode 100644
index 000000000..9689302c1
--- /dev/null
+++ b/Northstar.Custom/mod/scripts/vscripts/_custom_oob_timer.gnut
@@ -0,0 +1,7 @@
+global function CustomOOBTimer_Init
+
+void function CustomOOBTimer_Init()
+{
+ AddPrivateMatchModeSettingEnum( "#MODE_SETTING_CATEGORY_MATCH", "oob_timer_enabled", [ "Disabled", "Enabled" ], "1" )
+ level.disableOutOfBounds <- GetCurrentPlaylistVarInt( "oob_timer_enabled", 1 ) == 0
+} \ No newline at end of file
diff --git a/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_fastball.gnut b/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_fastball.gnut
index b59cd2dd4..00c193105 100644
--- a/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_fastball.gnut
+++ b/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_fastball.gnut
@@ -27,7 +27,6 @@ void function GamemodeFastball_Init()
SetTimeoutWinnerDecisionFunc( FastballDecideWinner )
AddCallback_OnClientConnected( FastballInitPlayer )
- AddCallback_OnPlayerKilled( FastballOnPlayerKilled ) // move this to a system in _gamestate soon!!
// setup spawns
// first is a, second is b, third is c
@@ -164,15 +163,6 @@ function FastballOnPanelHacked( panel, player, success )
}
}
-void function FastballOnPlayerKilled( entity victim, entity attacker, var damageInfo )
-{
- if ( !victim.IsPlayer() || GetGameState() != eGameState.Playing )
- return
-
- if ( GetPlayerArrayOfTeam_Alive( victim.GetTeam() ).len() == 0 )
- SetWinner( GetOtherTeam( victim.GetTeam() ) )
-}
-
int function FastballDecideWinner()
{
int militiaPanels
diff --git a/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_gg.gnut b/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_gg.gnut
index b9ee40f1f..e01780347 100644
--- a/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_gg.gnut
+++ b/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_gg.gnut
@@ -5,7 +5,7 @@ void function GamemodeGG_Init()
SetSpawnpointGamemodeOverride( FFA )
SetShouldUseRoundWinningKillReplay( true )
- Evac_SetEnabled( false )
+ ClassicMP_ForceDisableEpilogue( true )
SetLoadoutGracePeriodEnabled( false ) // prevent modifying loadouts with grace period
SetWeaponDropsEnabled( false )
Riff_ForceTitanAvailability( eTitanAvailability.Never )
diff --git a/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_hs.gnut b/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_hs.gnut
new file mode 100644
index 000000000..bc65e0b6d
--- /dev/null
+++ b/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_hs.gnut
@@ -0,0 +1,191 @@
+global function GamemodeHideAndSeek_Init
+
+struct {
+ entity intermissionCam
+ array<entity> droppodSpawns
+
+ float hidingTime
+ bool autobalance
+
+ float hidingStartTime
+} file
+
+void function GamemodeHideAndSeek_Init()
+{
+ SetSpawnpointGamemodeOverride( FFA )
+ Riff_ForceTitanAvailability( eTitanAvailability.Never )
+ Riff_ForceBoostAvailability( eBoostAvailability.Disabled )
+ SetRespawnsEnabled( false )
+ Riff_ForceSetEliminationMode( eEliminationMode.Pilots )
+
+ SetTimeoutWinnerDecisionFunc( HideAndSeekDecideWinner )
+ ClassicMP_SetCustomIntro( GamemodeHideAndSeekIntroSetup, 0.0 )
+
+ AddCallback_OnPlayerRespawned( SetupHideAndSeekPlayer )
+ AddCallback_OnPlayerKilled( TryNotifyLastPlayerAlive )
+ AddSpawnCallback( "info_intermission", SetIntermissionCam )
+ AddSpawnCallback( "info_spawnpoint_droppod_start", AddDroppodSpawn )
+
+ file.hidingTime = GetCurrentPlaylistVarFloat( "hideandseek_hiding_time", 60.0 )
+ file.autobalance = GetCurrentPlaylistVarInt( "hideandseek_balance_teams", 1 ) == 1
+}
+
+void function GamemodeHideAndSeekIntroSetup()
+{
+ AddCallback_GameStateEnter( eGameState.Prematch, HideAndSeekIntroPrematch )
+ AddCallback_OnClientConnected( AddPlayerToHideAndSeekIntro )
+}
+
+void function SetIntermissionCam( entity cam )
+{
+ file.intermissionCam = cam
+}
+
+void function AddDroppodSpawn( entity spawn )
+{
+ file.droppodSpawns.append( spawn )
+}
+
+void function AddPlayerToHideAndSeekIntro( entity player )
+{
+ if ( GetGameState() < eGameState.Prematch || Time() - file.hidingStartTime > file.hidingTime )
+ return
+
+ // seeker/hider autobalance
+ // try to have 1/6 of players be seekers
+ if ( file.autobalance )
+ {
+ int wantedSeekers = int( max( 1, GetPlayerArray().len() / 6 ) )
+
+ if ( GetPlayerArrayOfTeam( HIDEANDSEEK_TEAM_SEEKER ).len() < wantedSeekers )
+ SetTeam( player, HIDEANDSEEK_TEAM_SEEKER )
+ }
+
+ ScreenFadeFromBlack( player, 1.0, 0.75 )
+ Remote_CallFunction_NonReplay( player, "ServerCallback_ShowHideAndSeekCountdown", file.hidingStartTime + file.hidingTime )
+
+ if ( player.GetTeam() == HIDEANDSEEK_TEAM_HIDER )
+ {
+ player.kv.visibilityFlags = ENTITY_VISIBLE_TO_FRIENDLY
+ Highlight_ClearEnemyHighlight( player )
+
+ thread HiderIntroThread( player )
+ }
+ else
+ thread SeekerIntroThread( player )
+
+ thread DelayedRoleAnnounce( player )
+}
+
+void function HideAndSeekIntroPrematch()
+{
+ ClassicMP_OnIntroStarted()
+
+ file.hidingStartTime = Time()
+
+ foreach ( entity player in GetPlayerArray() )
+ AddPlayerToHideAndSeekIntro( player )
+
+ // this intro is mostly done in playing, so just finish the intro up now and we can do fully custom logic from here
+ WaitFrame()
+ ClassicMP_OnIntroFinished()
+
+ thread GlobalSeekerIntroThread()
+}
+
+void function HiderIntroThread( entity player )
+{
+ RespawnAsPilot( player )
+
+ wait ( file.hidingStartTime + file.hidingTime ) - Time()
+
+ player.kv.visibilityFlags = ENTITY_VISIBLE_TO_EVERYONE // make sure everyone can see us again
+}
+
+void function SeekerIntroThread( entity player )
+{
+ MuteHalfTime( player )
+
+ player.SetObserverModeStaticPosition( file.intermissionCam.GetOrigin() )
+ player.SetObserverModeStaticAngles( file.intermissionCam.GetAngles() )
+ player.StartObserverMode( OBS_MODE_STATIC_LOCKED )
+
+ wait ( file.hidingStartTime + file.hidingTime ) - Time()
+ UnMuteAll( player )
+}
+
+void function DelayedRoleAnnounce( entity player )
+{
+ wait 1.75
+ Remote_CallFunction_NonReplay( player, "ServerCallback_AnnounceHideAndSeekRole" )
+}
+
+void function GlobalSeekerIntroThread()
+{
+ wait file.hidingTime
+
+
+ PlayMusicToAll( eMusicPieceID.GAMEMODE_1 )
+ foreach ( entity hider in GetPlayerArrayOfTeam( HIDEANDSEEK_TEAM_HIDER ) )
+ Remote_CallFunction_NonReplay( hider, "ServerCallback_SeekersIncoming" )
+
+ array<entity> seekers = GetPlayerArrayOfTeam( HIDEANDSEEK_TEAM_SEEKER )
+ entity podSpawn = file.droppodSpawns.getrandom()
+ SpawnPlayersInDropPod( seekers, podSpawn.GetOrigin(), podSpawn.GetAngles() )
+
+ foreach ( entity seeker in seekers )
+ if ( IsValid( seeker ) )
+ Highlight_SetEnemyHighlight( seeker, "enemy_sonar" )
+}
+
+void function SetupHideAndSeekPlayer( entity player )
+{
+ foreach ( entity weapon in player.GetMainWeapons() )
+ player.TakeWeapon( weapon.GetWeaponClassName() )
+
+ player.TakeWeapon( player.GetOffhandWeapon( OFFHAND_ORDNANCE ).GetWeaponClassName() )
+
+ player.GiveWeapon( "mp_weapon_rocket_launcher" )
+ player.SetActiveWeaponByName( "mp_weapon_rocket_launcher" )
+
+ Highlight_SetFriendlyHighlight( player, "sp_friendly_pilot" )
+
+ if ( player.GetTeam() == HIDEANDSEEK_TEAM_HIDER )
+ {
+ player.TakeWeapon( player.GetMeleeWeapon().GetWeaponClassName() )
+
+ // set visibility flags if we're hiding, so seekers can't see us on intermission cam
+ if ( Time() - file.hidingStartTime < file.hidingTime )
+ player.kv.visiblityFlags = ENTITY_VISIBLE_TO_FRIENDLY
+
+ // remove red outline, ideally should work tm
+ Highlight_ClearEnemyHighlight( player )
+ }
+ else
+ player.TakeWeapon( "mp_weapon_grenade_sonar" ) // seekers should not have pulse blade
+}
+
+void function TryNotifyLastPlayerAlive( entity victim, entity attacker, var damageInfo )
+{
+ if ( victim.GetTeam() == HIDEANDSEEK_TEAM_HIDER )
+ {
+ array<entity> hiders = GetPlayerArrayOfTeam( HIDEANDSEEK_TEAM_HIDER )
+ if ( hiders.len() == 1 )
+ {
+ PlayMusicToAll( eMusicPieceID.GAMEMODE_2 )
+
+ // let them know they're the last hider
+ Remote_CallFunction_NonReplay( hiders[ 0 ], "ServerCallback_LastHiderAlive" )
+ StimPlayer( hiders[ 0 ], 9999.9 ) // can't do endless since we don't get the visual effect in endless
+
+ // tell seekers
+ foreach ( entity player in GetPlayerArrayOfTeam( HIDEANDSEEK_TEAM_SEEKER ) )
+ Remote_CallFunction_NonReplay( player, "ServerCallback_LastHiderAlive" )
+ }
+ }
+}
+
+int function HideAndSeekDecideWinner()
+{
+ return HIDEANDSEEK_TEAM_HIDER // on timeout, hiders always win
+} \ No newline at end of file
diff --git a/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_inf.gnut b/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_inf.gnut
index 8706d53b1..b2e76aaf8 100644
--- a/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_inf.gnut
+++ b/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_inf.gnut
@@ -13,6 +13,7 @@ void function GamemodeInfection_Init()
Riff_ForceTitanAvailability( eTitanAvailability.Never )
Riff_ForceBoostAvailability( eBoostAvailability.Disabled )
+ SetShouldPlayerStartBleedoutFunc( InfectionShouldPlayerStartBleedout )
AddCallback_OnClientConnected( InfectionInitPlayer )
AddCallback_OnPlayerKilled( InfectionOnPlayerKilled )
AddCallback_OnPlayerRespawned( RespawnInfected )
@@ -176,4 +177,9 @@ int function TimeoutCheckSurvivors()
return INFECTION_TEAM_SURVIVOR
return INFECTION_TEAM_INFECTED
+}
+
+bool function InfectionShouldPlayerStartBleedout( entity player, var damageInfo )
+{
+ return player.GetTeam() != INFECTION_TEAM_INFECTED
} \ No newline at end of file
diff --git a/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_kr.gnut b/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_kr.gnut
index cf9d6bc57..7a226e210 100644
--- a/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_kr.gnut
+++ b/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_kr.gnut
@@ -13,7 +13,7 @@ void function GamemodeKR_Init()
SetSpawnpointGamemodeOverride( FFA )
- Evac_SetEnabled( false )
+ ClassicMP_ForceDisableEpilogue( true )
Riff_ForceTitanAvailability( eTitanAvailability.Never )
Riff_ForceBoostAvailability( eBoostAvailability.Disabled )
diff --git a/Northstar.Custom/mod/scripts/vscripts/gamemodes/cl_gamemode_hs.gnut b/Northstar.Custom/mod/scripts/vscripts/gamemodes/cl_gamemode_hs.gnut
new file mode 100644
index 000000000..8bfbb10e0
--- /dev/null
+++ b/Northstar.Custom/mod/scripts/vscripts/gamemodes/cl_gamemode_hs.gnut
@@ -0,0 +1,91 @@
+global function ClGamemodeHideAndSeek_Init
+global function ServerCallback_ShowHideAndSeekCountdown
+global function ServerCallback_AnnounceHideAndSeekRole
+global function ServerCallback_SeekersIncoming
+global function ServerCallback_LastHiderAlive
+
+struct {
+ var countdownRui
+} file
+
+void function ClGamemodeHideAndSeek_Init()
+{
+ ClGameState_RegisterGameStateAsset( $"ui/gamestate_info_lts.rpak" )
+
+ RegisterLevelMusicForTeam( eMusicPieceID.GAMEMODE_1, "music_mp_fd_midwave", HIDEANDSEEK_TEAM_SEEKER )
+ RegisterLevelMusicForTeam( eMusicPieceID.GAMEMODE_1, "music_skyway_01_intro", HIDEANDSEEK_TEAM_HIDER )
+
+ RegisterLevelMusicForTeam( eMusicPieceID.GAMEMODE_2, "music_skyway_04_smartpistolrun", TEAM_IMC )
+ RegisterLevelMusicForTeam( eMusicPieceID.GAMEMODE_2, "music_skyway_04_smartpistolrun", TEAM_MILITIA )
+}
+
+void function ServerCallback_ShowHideAndSeekCountdown( float endTime )
+{
+ file.countdownRui = CreateCockpitRui( $"ui/dropship_intro_countdown.rpak", 0 )
+ RuiSetResolutionToScreenSize( file.countdownRui )
+ RuiSetGameTime( file.countdownRui, "gameStartTime", endTime )
+}
+
+void function ServerCallback_AnnounceHideAndSeekRole()
+{
+ if ( GetLocalViewPlayer().GetTeam() == HIDEANDSEEK_TEAM_SEEKER )
+ {
+ AnnouncementData announcement = Announcement_Create( "#HIDEANDSEEK_YOU_ARE_SEEKER" )
+ Announcement_SetSubText( announcement, Localize( "#HIDEANDSEEK_SEEKER_DESC", GetCurrentPlaylistVarFloat( "hideandseek_hiding_time", 60.0 ).tostring() ) )
+ Announcement_SetTitleColor( announcement, <0,0,1> )
+ Announcement_SetPurge( announcement, true )
+ Announcement_SetPriority( announcement, 200 ) //Be higher priority than Titanfall ready indicator etc
+ Announcement_SetSoundAlias( announcement, SFX_HUD_ANNOUNCE_QUICK )
+ Announcement_SetStyle( announcement, ANNOUNCEMENT_STYLE_QUICK )
+ AnnouncementFromClass( GetLocalViewPlayer(), announcement )
+ }
+ else
+ {
+ AnnouncementData announcement = Announcement_Create( "#HIDEANDSEEK_YOU_ARE_HIDER" )
+ Announcement_SetSubText( announcement, "#HIDEANDSEEK_HIDER_DESC" )
+ Announcement_SetTitleColor( announcement, <0,0,1> )
+ Announcement_SetPurge( announcement, true )
+ Announcement_SetPriority( announcement, 200 ) //Be higher priority than Titanfall ready indicator etc
+ Announcement_SetSoundAlias( announcement, SFX_HUD_ANNOUNCE_QUICK )
+ Announcement_SetStyle( announcement, ANNOUNCEMENT_STYLE_QUICK )
+ AnnouncementFromClass( GetLocalViewPlayer(), announcement )
+ }
+}
+
+void function ServerCallback_SeekersIncoming()
+{
+ AnnouncementData announcement = Announcement_Create( "#HIDEANDSEEK_SEEKERS_INCOMING" )
+ Announcement_SetSubText( announcement, "#HIDEANDSEEK_DONT_GET_FOUND" )
+ Announcement_SetTitleColor( announcement, <1,0,0> )
+ Announcement_SetPurge( announcement, true )
+ Announcement_SetPriority( announcement, 200 ) //Be higher priority than Titanfall ready indicator etc
+ Announcement_SetSoundAlias( announcement, SFX_HUD_ANNOUNCE_QUICK )
+ Announcement_SetStyle( announcement, ANNOUNCEMENT_STYLE_QUICK )
+ AnnouncementFromClass( GetLocalViewPlayer(), announcement )
+}
+
+void function ServerCallback_LastHiderAlive()
+{
+ if ( GetLocalViewPlayer().GetTeam() == HIDEANDSEEK_TEAM_SEEKER )
+ {
+ AnnouncementData announcement = Announcement_Create( Localize( "#HIDEANDSEEK_GET_LAST_HIDER", GetPlayerArrayOfTeam_Alive( HIDEANDSEEK_TEAM_HIDER )[ 0 ].GetPlayerName() ) )
+ Announcement_SetTitleColor( announcement, <1,0,0> )
+ Announcement_SetPurge( announcement, true )
+ Announcement_SetPriority( announcement, 200 ) //Be higher priority than Titanfall ready indicator etc
+ Announcement_SetSoundAlias( announcement, SFX_HUD_ANNOUNCE_QUICK )
+ Announcement_SetStyle( announcement, ANNOUNCEMENT_STYLE_QUICK )
+ AnnouncementFromClass( GetLocalViewPlayer(), announcement )
+ }
+ else
+ {
+ AnnouncementData announcement = Announcement_Create( "#HIDEANDSEEK_YOU_ARE_LAST_HIDER" )
+ Announcement_SetSubText( announcement, "#HIDEANDSEEK_GOT_STIM" )
+ Announcement_SetTitleColor( announcement, <1,0,0> )
+ Announcement_SetPurge( announcement, true )
+ Announcement_SetPriority( announcement, 200 ) //Be higher priority than Titanfall ready indicator etc
+ Announcement_SetSoundAlias( announcement, SFX_HUD_ANNOUNCE_QUICK )
+ Announcement_SetStyle( announcement, ANNOUNCEMENT_STYLE_QUICK )
+ AnnouncementFromClass( GetLocalViewPlayer(), announcement )
+ }
+}
+
diff --git a/Northstar.Custom/mod/scripts/vscripts/gamemodes/sh_gamemode_hs.gnut b/Northstar.Custom/mod/scripts/vscripts/gamemodes/sh_gamemode_hs.gnut
new file mode 100644
index 000000000..f4269ac42
--- /dev/null
+++ b/Northstar.Custom/mod/scripts/vscripts/gamemodes/sh_gamemode_hs.gnut
@@ -0,0 +1,47 @@
+global function Sh_GamemodeHideAndSeek_Init
+
+global const string GAMEMODE_HIDEANDSEEK = "hs"
+global const int HIDEANDSEEK_TEAM_SEEKER = TEAM_IMC
+global const int HIDEANDSEEK_TEAM_HIDER = TEAM_MILITIA
+
+void function Sh_GamemodeHideAndSeek_Init()
+{
+ // create custom gamemode
+ AddCallback_OnCustomGamemodesInit( CreateGamemodeHideAndSeek )
+ AddCallback_OnRegisteringCustomNetworkVars( HideAndSeekRegisterNetworkVars )
+}
+
+void function CreateGamemodeHideAndSeek()
+{
+ GameMode_Create( GAMEMODE_HIDEANDSEEK )
+ GameMode_SetName( GAMEMODE_HIDEANDSEEK, "#GAMEMODE_hs" )
+ GameMode_SetDesc( GAMEMODE_HIDEANDSEEK, "#PL_hs_desc" )
+ GameMode_SetGameModeAnnouncement( GAMEMODE_HIDEANDSEEK, "ffa_modeDesc" )
+ GameMode_SetColor( GAMEMODE_HIDEANDSEEK, [147, 204, 57, 255] )
+
+ AddPrivateMatchMode( GAMEMODE_HIDEANDSEEK ) // add to private lobby modes
+ AddPrivateMatchModeSettingEnum( "#GAMEMODE_hs", "hideandseek_balance_teams", [ "Disabled", "Enabled" ], "1" )
+ AddPrivateMatchModeSettingArbitrary( "#GAMEMODE_hs", "hideandseek_hiding_time", "60" )
+
+ #if SERVER
+ GameMode_AddServerInit( GAMEMODE_HIDEANDSEEK, GamemodeHideAndSeek_Init )
+ GameMode_SetPilotSpawnpointsRatingFunc( GAMEMODE_HIDEANDSEEK, RateSpawnpoints_Generic )
+ GameMode_SetTitanSpawnpointsRatingFunc( GAMEMODE_HIDEANDSEEK, RateSpawnpoints_Generic )
+ #elseif CLIENT
+ GameMode_AddClientInit( GAMEMODE_HIDEANDSEEK, ClGamemodeHideAndSeek_Init )
+ #endif
+ #if !UI
+ GameMode_SetScoreCompareFunc( GAMEMODE_HIDEANDSEEK, CompareAssaultScore )
+ #endif
+}
+
+void function HideAndSeekRegisterNetworkVars()
+{
+ if ( GAMETYPE != GAMEMODE_HIDEANDSEEK )
+ return
+
+ Remote_RegisterFunction( "ServerCallback_ShowHideAndSeekCountdown" )
+ Remote_RegisterFunction( "ServerCallback_SeekersIncoming" )
+ Remote_RegisterFunction( "ServerCallback_LastHiderAlive" )
+ Remote_RegisterFunction( "ServerCallback_AnnounceHideAndSeekRole" )
+} \ No newline at end of file
diff --git a/Northstar.Custom/mod/scripts/vscripts/mp/levels/mp_bob.nut b/Northstar.Custom/mod/scripts/vscripts/mp/levels/mp_bob.nut
new file mode 100644
index 000000000..afd4fc371
--- /dev/null
+++ b/Northstar.Custom/mod/scripts/vscripts/mp/levels/mp_bob.nut
@@ -0,0 +1,38 @@
+untyped
+global function CodeCallback_MapInit
+
+const float PLATFORM_TRAVEL_TIME = 20.0
+
+struct {
+ array<entity> platformMoverNodes
+ entity platformMover
+} file
+
+void function CodeCallback_MapInit()
+{
+ AddCallback_EntitiesDidLoad( BobMap_EntitiesDidLoad )
+}
+
+void function BobMap_EntitiesDidLoad()
+{
+ BobMap_InitTempProps()
+
+ file.platformMoverNodes = GetEntityLinkChain( GetEntByScriptName( "mp_bob_movingplatform_node_0" ) )
+ file.platformMover = GetEntByScriptName( "mp_bob_movingplatform" )
+ file.platformMover.SetOrigin( file.platformMoverNodes[ 0 ].GetOrigin() )
+
+ entity platformProp = CreatePropDynamic( file.platformMover.GetValueForModelKey(), file.platformMover.GetOrigin(), file.platformMover.GetAngles() )
+ platformProp.SetParent( file.platformMover )
+
+ thread MovingPlatformThink()
+}
+
+void function MovingPlatformThink()
+{
+ int currentNodeIdx = 0
+ while ( true )
+ {
+ file.platformMover.SetOrigin( file.platformMoverNodes[ currentNodeIdx % file.platformMoverNodes.len() ].GetOrigin() )
+ file.platformMover.MoveTo( file.platformMoverNodes[ ++currentNodeIdx % file.platformMoverNodes.len() ].GetOrigin(), PLATFORM_TRAVEL_TIME, 0, 0 )
+ }
+} \ No newline at end of file
diff --git a/Northstar.Custom/mod/scripts/vscripts/mp/levels/mp_bob_temp_props.nut b/Northstar.Custom/mod/scripts/vscripts/mp/levels/mp_bob_temp_props.nut
new file mode 100644
index 000000000..84ffe3e94
--- /dev/null
+++ b/Northstar.Custom/mod/scripts/vscripts/mp/levels/mp_bob_temp_props.nut
@@ -0,0 +1,7 @@
+global function BobMap_InitTempProps
+
+void function BobMap_InitTempProps()
+{
+ PrecacheModel( $"models/vistas/planet_blue_sun.mdl" )
+ CreatePropDynamic( $"models/vistas/planet_blue_sun.mdl", GetEnt( "skybox_cam_level" ).GetOrigin(), GetEnt( "skybox_cam_level" ).GetAngles() )
+} \ No newline at end of file
diff --git a/Northstar.Custom/mod/scripts/vscripts/titan/sh_first_person_embark.gnut b/Northstar.Custom/mod/scripts/vscripts/titan/sh_first_person_embark.gnut
index 0c95ae4cd..0c47c0140 100644
--- a/Northstar.Custom/mod/scripts/vscripts/titan/sh_first_person_embark.gnut
+++ b/Northstar.Custom/mod/scripts/vscripts/titan/sh_first_person_embark.gnut
@@ -1,4 +1,5 @@
global function FirstPersonEmbark_Init
+global function FirstPersonEmbark_InitPlaylistVars
#if CLIENT
global function ServerCallback_HideHudForFPEmbark
@@ -24,6 +25,11 @@ void function FirstPersonEmbark_RegisterCustomNetworkFunctions()
Remote_RegisterFunction( "ServerCallback_HideHudForFPEmbark" )
}
+void function FirstPersonEmbark_InitPlaylistVars()
+{
+ AddPrivateMatchModeSettingEnum( "#MODE_SETTING_CATEGORY_TITAN", "fp_embark_enabled", [ "Disabled", "Enabled" ], "0" )
+}
+
#if CLIENT
void function ServerCallback_HideHudForFPEmbark()
{
diff --git a/Northstar.Custom/mod/scripts/weapons/mp_weapon_peacekraber.txt b/Northstar.Custom/mod/scripts/weapons/mp_weapon_peacekraber.txt
index c5e61f938..59219cab1 100644
--- a/Northstar.Custom/mod/scripts/weapons/mp_weapon_peacekraber.txt
+++ b/Northstar.Custom/mod/scripts/weapons/mp_weapon_peacekraber.txt
@@ -335,13 +335,9 @@ WeaponData
crosshairMovementY weapon_is_reloading
}
- Crosshair_2
+ Crosshair_2
{
"ui" "ui/crosshair_lstar"
"base_spread" "4"
- Args
- {
-
- }
}
} \ No newline at end of file
diff --git a/Northstar.Custom/mod/scripts/weapons/mp_weapon_sniper.txt b/Northstar.Custom/mod/scripts/weapons/mp_weapon_sniper.txt
deleted file mode 100644
index ede43d7de..000000000
--- a/Northstar.Custom/mod/scripts/weapons/mp_weapon_sniper.txt
+++ /dev/null
@@ -1,651 +0,0 @@
-WeaponData
-{
- // General
- "printname" "#WPN_SNIPER"
- "shortprintname" "#WPN_SNIPER_SHORT"
- "description" "#WPN_SNIPER_DESC"
- "longdesc" "#WPN_SNIPER_LONGDESC"
-
- "menu_icon" "r2_ui/menus/loadout_icons/primary_weapon/primary_kraber"
- "hud_icon" "r2_ui/menus/loadout_icons/primary_weapon/primary_kraber"
-
- "weaponClass" "human"
- "weaponSubClass" "sniper"
- "body_type" "heavy"
- "fire_mode" "semi-auto"
- "pickup_hold_prompt" "Hold [USE] [WEAPONNAME]"
- "pickup_press_prompt" "[USE] [WEAPONNAME]"
- "minimap_reveal_distance" "32000"
- "leveled_pickup" "1"
-
- "OnWeaponActivate" "OnWeaponActivate_weapon_sniper"
- "OnClientAnimEvent" "OnClientAnimEvent_weapon_sniper"
- "OnWeaponPrimaryAttack" "OnWeaponPrimaryAttack_weapon_sniper"
- "OnWeaponNpcPrimaryAttack" "OnWeaponNpcPrimaryAttack_weapon_sniper"
- "OnProjectileCollision" "OnProjectileCollision_weapon_sniper"
-
- "viewmodel_offset_ads" "0 0 0"
-
- // Menu
- "menu_category" "sniper"
- "menu_anim_class" "large"
- "stat_damage" "100"
- "stat_range" "100"
- "stat_accuracy" "60"
- "stat_rof" "15"
-
- "ads_dof_disable" "1"
-
- // Models
- "viewmodel" "models/weapons/at_rifle/ptpov_at_rifle.mdl"
- "playermodel" "models/weapons/at_rifle/w_at_rifle.mdl"
- "projectilemodel" "models/weapons/bullets/projectile_20mm.mdl"
-
- // Effects
- "impact_effect_table" "titan_bullet"
- "projectile_trail_effect_0" "weapon_kraber_projectile"
- "projectile_do_predict_impact_effects" "1"//0"
- "vortex_absorb_effect" "wpn_vortex_projectile_20mm_FP"
- "vortex_absorb_effect_third_person" "wpn_vortex_projectile_20mm"
- "vortex_absorb_sound" "Vortex_Shield_AbsorbBulletLarge"
- "vortex_absorb_sound_1p_vs_3p" "Vortex_Shield_AbsorbBulletLarge_1P_VS_3P"
- "projectile_adjust_to_gun_barrel" "1"
-
- // Sounds
- "sound_dryfire" "rifle_dryfire"
- "sound_pickup" "wpn_pickup_Rifle_1P"
- "sound_zoom_in" "Weapon_Rangemaster_Kraber_ADS_In"
- "sound_zoom_out" "Weapon_Rangemaster_Kraber_ADS_Out"
- "fire_sound_1_player_1p" "large_shell_drop"
- "fire_sound_1_player_3p" "large_shell_drop"
- "fire_sound_1_npc" "large_shell_drop"
- "fire_sound_2_player_1p" "Weapon_Kraber_Fire_1P"
- "fire_sound_2_player_3p" "Weapon_Kraber_Fire_3P"
- "fire_sound_2_npc" "Weapon_Kraber_Fire_npc"
-
- "low_ammo_sound_name_1" "Kraber_LowAmmo_Shot1"
- "low_ammo_sound_name_2" "Kraber_LowAmmo_Shot2"
- "low_ammo_sound_name_3" "Kraber_LowAmmo_Shot3"
-
- "fx_shell_eject_view" "wpn_shelleject_rifle_large_FP"
- "fx_shell_eject_world" "wpn_shelleject_rifle_large"
- "fx_shell_eject_attach" "shell"
- "fx_shell_eject_attach_scoped" "shell_scoped"
-
- "fx_muzzle_flash_view" "wpn_muzzleflash_snp_hmn_FP"
- "fx_muzzle_flash_world" "wpn_muzzleflash_snp_hmn"
- "fx_muzzle_flash_attach" "muzzle_flash"
- "fx_muzzle_flash_attach_scoped" "muzzle_flash_scoped"
-
- // Bolt info
- "bolt_hitsize" "0.0"
- "bolt_hitsize_grow1_time" "0.035"
- "bolt_hitsize_grow1_size" "0.5"
- "bolt_hitsize_grow2_time" "0.08"
- "bolt_hitsize_grow2_size" "1.0"
- "bolt_hitsize_growfinal_lerptime" "0.18"
- "bolt_hitsize_growfinal_size" "2.0"
-
- "bolt_gravity_enabled" "1"
- "bolt_gravity_amount" "0.2500"//0.500"
-
- "bolt_bounce_frac" "0.000"
- "projectile_damage_reduction_per_bounce" "0.0"
- "projectile_damages_owner" "0"
- "projectile_ricochet_max_count" "0"
-
- "pass_through_depth" "64"
- "pass_through_damage_preserved_scale" "1"
-
- "bolt_speed" "10000"
-
- // Damage - When Used by Players
- "damage_flags" "DF_BULLET | DF_KNOCK_BACK | DF_DISMEMBERMENT"
- "damage_type" "bullet"
-
- "damage_headshot_scale" "1.5"
-
- "impulse_force" "10"
-
- "ammo_clip_size" "4"
-
- "titanarmor_critical_hit_required" "1"
- "critical_hit" "1"
-
-
- MP_BASE
- {
- "ammo_default_total" "40"
- "ammo_stockpile_max" "40"
- "ammo_no_remove_from_stockpile" "1"
- "ammo_min_to_fire" "1"
-
-
- "damage_near_value" "350"
- "damage_far_value" "350"
- "damage_near_value_titanarmor" "430"
- "damage_far_value_titanarmor" "430"
- "damage_rodeo" "900"
- "damage_near_distance" "2000"
- "damage_far_distance" "15000"
-
- "red_crosshair_range" "15000"
-
- "critical_hit_damage_scale" "1"
-
- // Damage - When Used by NPCs
- "npc_damage_near_value" "49"
- "npc_damage_far_value" "49"
- "npc_damage_near_value_titanarmor" "50"
- "npc_damage_far_value_titanarmor" "25"
-
- "npc_accuracy_multiplier_pilot" "1.0"
-
- "npc_suppress_lsp_allowed" "0"
-
- "enable_highlight_networking_on_creation" "<KEEP_DEFAULT>"
-
- "damage_heavyarmor_nontitan_scale" "0.35"
-
- "zoom_toggle_lerp_time" "<KEEP_DEFAULT>"
- "zoom_toggle_fov" "<KEEP_DEFAULT>"
- }
-
- SP_BASE
- {
- "zoom_toggle_lerp_time" "0.2"
- "zoom_toggle_fov" "7"
-
- "ammo_default_total" "12"
- "ammo_stockpile_max" "28"
- "ammo_no_remove_from_stockpile" "0"
- "ammo_min_to_fire" "1"
-
-
- "damage_near_value" "200"
- "damage_far_value" "200"
- "damage_near_value_titanarmor" "500"
- "damage_far_value_titanarmor" "500"
- "damage_rodeo" "900"
- "damage_near_distance" "2000"
- "damage_far_distance" "15000"
-
- "red_crosshair_range" "15000"
-
- "critical_hit_damage_scale" "1.5"
-
- // Damage - When Used by NPCs
- "npc_damage_near_value" "49"
- "npc_damage_far_value" "49"
- "npc_damage_near_value_titanarmor" "50"
- "npc_damage_far_value_titanarmor" "25"
-
- "npc_accuracy_multiplier_pilot" "3.0"
-
- "npc_suppress_lsp_allowed" "<KEEP_DEFAULT>"
-
- "enable_highlight_networking_on_creation" "1"
-
- "damage_heavyarmor_nontitan_scale" "1"
- }
-
- // NPC
- "proficiency_poor_spreadscale" "3.0"
- "proficiency_average_spreadscale" "2.2"
- "proficiency_good_spreadscale" "2.0"
- "proficiency_very_good_spreadscale" "1.5"
-
- "npc_min_engage_range" "500"
- "npc_max_engage_range" "8000"
- "npc_min_engage_range_heavy_armor" "500"
- "npc_max_engage_range_heavy_armor" "8000"
- "npc_min_range" "0"
- "npc_max_range" "8000"
-
- "npc_min_burst" "1"
- "npc_max_burst" "1"
- "npc_rest_time_between_bursts_min" "2.0"
- "npc_rest_time_between_bursts_max" "3.0"
-
- "dof_zoom_nearDepthStart" "0"
- "dof_zoom_nearDepthEnd" "0"
- "dof_nearDepthStart" "4.750"
- "dof_nearDepthEnd" "9"
-
- // Behavior
- "fire_rate" "1.85"
- "zoom_time_in" "0.4"//0.48"//1.1"//1.25"//0.45"
- "zoom_time_out" "0.3"
- "zoom_fov" "26.26" //3x zoom
- "zoom_scope_frac_start" "0.2"//0.2"
- "zoom_scope_frac_end" "0.7"//0.85"
- "zoom_angle_shift_pitch" "0.3"
- "zoom_angle_shift_yaw" "0.65"
- "rechamber_time" "1.60"//1.30"
- "reload_time" "2.5"
- "reload_time_late1" "1.52"
- "reload_time_late2" "0.63"
- "reloadempty_time" "3.61"
- "reloadempty_time_late1" "2.63"
- "reloadempty_time_late2" "1.75"
- "reloadempty_time_late3" "0.55"
- "holster_time" "0.5"
- "deploy_time" "0.8"
- "lower_time" "0.25"
- "raise_time" "0.3"
- "vortex_refire_behavior" "bullet"
- "allow_empty_fire" "0"
- "reload_enabled" "1"
- "allow_empty_click" "1"
- "empty_reload_only" "0"
- "trigger_snipercam" "1"
- "allow_headshots" "1"
- "ads_move_speed_scale" "0.5"//0.35"
- "aimassist_disable_hipfire" "1"
- "aimassist_disable_ads" "1"
- "aimassist_disable_hipfire_titansonly" "1"
- "aimassist_disable_ads_titansonly" "1"
- "gamepad_use_yaw_speed_for_pitch_ads" "1"
- "ads_fov_zoomfrac_start" "0.5"
- "ads_fov_zoomfrac_end" "0.9"
-
- "sprint_fractional_anims" "0"
-
- // Spread
- "spread_stand_hip" "10"
- "spread_stand_hip_run" "12"
- "spread_stand_ads" "0.0" //"0.1"
- "spread_crouch_hip" "8"
- "spread_crouch_ads" "0"
- "spread_air_hip" "12"
- "spread_air_ads" "0.0" //".15"
-
- "ammo_suck_behavior" "primary_weapons"
-
- // View Kick
- "viewkick_spring" "sniper"
-
- "viewkick_pitch_base" "-0.5625"//"-1.25"//
- "viewkick_pitch_random" "0.0225"//"0.05"//
- "viewkick_pitch_softScale" "0.8"
- "viewkick_pitch_hardScale" "2"
-
- "viewkick_yaw_base" "-0.135"//"-0.3"//
- "viewkick_yaw_random" "0.045"//"0.1"//
- "viewkick_yaw_softScale" "1.0"
- "viewkick_yaw_hardScale" "1.5"
-
- "viewkick_roll_base" "0"
- "viewkick_roll_randomMin" "0.5"
- "viewkick_roll_randomMax" "0.5"
- "viewkick_roll_softScale" "0.2"
- "viewkick_roll_hardScale" "3.0"
-
- "viewkick_hipfire_weaponFraction" "0.4"
- "viewkick_hipfire_weaponFraction_vmScale" "0.55"
- "viewkick_ads_weaponFraction" "0.0"//"0.45"//
- "viewkick_ads_weaponFraction_vmScale" "0.0"//"-0.3"//
-
- "viewkick_perm_pitch_base" "0.0"
- "viewkick_perm_pitch_random" "0.0"
- "viewkick_perm_pitch_random_innerexclude" "0.0"
- "viewkick_perm_yaw_base" "0.0"
- "viewkick_perm_yaw_random" "0.0"
- "viewkick_perm_yaw_random_innerexclude" "0.0"
-
- //
- "viewmodel_shake_forward" "0.5"
- "viewmodel_shake_up" "0.1"
- "viewmodel_shake_right" "0.0"
-
- // Bob
- "bob_cycle_time" "0.4"
- "bob_vert_dist" "0.19"
- "bob_horz_dist" "0.1"
- "bob_max_speed" "150"
- "bob_pitch" "0.75"
- "bob_yaw" "-1.7"
- "bob_roll" "1.2"
-
- // Bob_Zoomed
- "bob_cycle_time_zoomed" "0.4"
- "bob_vert_dist_zoomed" "0.0025"
- "bob_horz_dist_zoomed" "0.0025"
- "bob_max_speed_zoomed" "150"
- //"bob_pitch_zoomed" "0.002"
- //"bob_yaw_zoomed" "-.002"
- //"bob_roll_zoomed" ".002"
-
- // Rumble
- "fire_rumble" "rumble_sniper"
-
- // Sway
- "sway_rotate_attach" "SWAY_ROTATE"
- "sway_min_x" "-0.5"
- "sway_min_y" "-0.5"
- "sway_min_z" "-0.6"
- "sway_max_x" "0.5"
- "sway_max_y" "0.5"
- "sway_max_z" "0.6"
- "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" "2.5"
- "sway_rotate_gain" "7"
- "sway_move_forward_translate_x" "-0.1"
- "sway_move_forward_translate_z" "-0.5"
- "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" "-4"
- "sway_move_right_translate_y" "1"
- "sway_move_right_translate_z" "-0.5"
- "sway_move_right_rotate_roll" "4"
- "sway_move_up_translate_z" "-1"
- "sway_move_down_translate_z" "1"
- "sway_turn_left_rotate_yaw" "-2.5"
- "sway_turn_right_rotate_yaw" "2.5"
-
- "sway_turn_left_translate_y" ".5"
- "sway_turn_right_translate_y" "-.5"
- "sway_turn_up_translate_z" ".2"
- "sway_turn_down_translate_z" "-.2"
- "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"
-
- // Zoomed Sway
- "sway_rotate_attach_zoomed" "jx_c_pov"
- "sway_rotate_attach_blend_time_zoomed" "0.2"
- "sway_rotate_gain_zoomed" "5"
-
- "sway_min_yaw_zoomed" "-0.085"
- "sway_max_yaw_zoomed" "0.085"
- "sway_turn_left_rotate_yaw_zoomed" "0.085"
- "sway_turn_right_rotate_yaw_zoomed" "-0.085"
-
- "sway_min_roll_zoomed" "-1"
- "sway_max_roll_zoomed" "1"
- "sway_turn_left_rotate_roll_zoomed" "-1"
- "sway_turn_right_rotate_roll_zoomed" "1"
-
- "sway_move_right_rotate_roll_zoomed" "0.2"
- "sway_move_left_rotate_roll_zoomed" "-0.2"
-
- "sway_min_pitch_zoomed" "-0.25"
- "sway_max_pitch_zoomed" "0.25"
- "sway_turn_up_rotate_pitch_zoomed" "-0.25"
- "sway_turn_down_rotate_pitch_zoomed" "0.25"
-
- // WeaponED Unhandled Key/Values and custom script Key/Values
- "sprintcycle_time" ".55"
- "is_sniper" "1"
-
- // Bodygroups:
- "bodygroup1_name" "scope_dcom"
- "bodygroup1_set" "1"
- "bodygroup2_name" "scope_zoom"
- "bodygroup2_set" "0"
- "bodygroup3_name" "ammo"
- "bodygroup3_set" "1"
- "bodygroup4_name" "scope_outline"
- "bodygroup4_set" "0"
- "bodygroup5_name" "scope_oracle"
- "bodygroup5_set" "0"
- "bodygroup6_name" "proscreen"
- "bodygroup6_set" "0"
- // "bodygroup7_name" "suppressor_sq_lg"
- // "bodygroup7_set" "0"
-
- "bodygroup_ads_scope_name" "ads_scopes"
- "bodygroup_ads_scope_set" "3"
-
-
- "anim_alt_idleAttack" "0"
-
- "clip_bodygroup" "at_rifle_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"
- "clip_bodygroup_show_for_milestone_3" "1"
-
- "bodygroup_ammo_index_count" "6"
-
- Mods
- {
- iron_sights
- {
-
- }
- scope_4x
- {
- //Use this for Variable Zoom
- "ui7_enable" "1"
-
- "bodygroup1_set" "0"
- "bodygroup2_set" "0"
- "bodygroup4_set" "1"
- "bodygroup5_set" "0"
- "bodygroup_ads_scope_set" "2"
- "zoom_toggle_lerp_time" "0.2"
- "zoom_toggle_fov" "7"
- //"ui6_enable" "1"
- }
- extended_ammo
- {
- "ammo_stockpile_max" "90"
- "ammo_clip_size" "7"
- "ammo_default_total" "90"
- }
- stabilizer
- {
- "bodygroup1_set" "0"
- "bodygroup2_set" "0"
- "bodygroup4_set" "0"
- "bodygroup5_set" "1"
- "bodygroup_ads_scope_set" "0"
-
- // "viewdrift_ads_stand_scale_pitch" "*0.5"
- // "viewdrift_ads_crouch_scale_pitch" "*0.5"
- // "viewdrift_ads_air_scale_pitch" "*0.5"
- // "viewdrift_ads_air_scale_yaw" "*0.5"
- // "viewdrift_ads_stand_scale_yaw" "*0.5"
- // "viewdrift_ads_crouch_scale_yaw" "*0.5"
- // "viewdrift_ads_speed_pitch" "*0.5"
- // "viewdrift_ads_speed_yaw" "*0.5"
-
- "viewmodel_offset_ads" "0 -2.95 0.31"
- //"viewmodel_offset_lerp_endFrac" "1"
-
- "ads_fov_zoomfrac_start" "0.3"
- "ads_fov_zoomfrac_end" "0.8"
-
- "dof_zoom_nearDepthStart" "7.0"
- "dof_zoom_nearDepthEnd" "7.2"
-
- "anim_alt_idleAttack" "1"
- }
- ricochet
- {
- "bolt_bounce_frac" "0.7"
- "projectile_damage_reduction_per_bounce" "0.0"
- "projectile_damages_owner" "0"
- "projectile_ricochet_max_count" "2"
- }
- slammer
- {
- }
- threat_scope
- {
- "bodygroup1_set" "0"
- "bodygroup2_set" "1"
- "bodygroup4_set" "0"
- "bodygroup5_set" "0"
- "bodygroup_ads_scope_set" "1"
-
- "threat_scope_enabled" "1"
- "threat_scope_bounds_width" "1.5"
- "threat_scope_bounds_height" "1.1"
- "threat_scope_zoomfrac_start" "0.85"
- "viewmodel_offset_ads" "0 0.5 0"
- dof_zoom_focusArea_horizontal 0.068
- dof_zoom_focusArea_top 0.065
- dof_zoom_focusArea_bottom -0.046
- }
- pro_screen
- {
- "ui8_enable" "1"
- "bodygroup6_set" "1"
- }
- tactical_cdr_on_kill
- {
-
- }
- pas_fast_reload
- {
- "reload_time" "*0.7"
- "reload_time_late1" "*0.7"
- "reloadempty_time" "*0.7"
- "reloadempty_time_late1" "*0.7"
- }
- pas_fast_ads
- {
- //Fast ADS
- "zoom_time_in" "*0.5"
- "zoom_time_out" "*0.6"
- }
- pas_fast_swap
- {
- //Fast Swap
- "fast_swap_to" "1"
- }
- burn_mod_sniper
- {
- "is_burn_mod" "1"
- //FX
- "fx_muzzle_flash_view" "wpn_muzzleflash_snp_hmn_FP_burn"
- "fx_muzzle_flash_world" "wpn_muzzleflash_snp_hmn_burn"
- "projectile_trail_effect_0" "weapon_kraber_projectile_burn"
- //"impact_effect_table" "titan_bullet_elec"
-
- "damage_near_value" "450"
- "damage_far_value" "450"
- "damage_near_value_titanarmor" "580"
- "damage_far_value_titanarmor" "580"
-
- // reimplement tf1 amped kraber
- "explosion_damage" "150"
- "explosion_damage_heavy_armor" "150"
- "explosion_inner_radius" "25"
- "explosionradius" "75"
- "explosion_shake_radius" "250"
- "explosion_shake_amplitude" "10"
- "explosion_shake_frequency" "50"
- "explosion_shake_duration" "0.6"
- "impact_effect_table" "exp_small"
- }
- pve_elite
- {
- //"ammo_stockpile_max" "90"
- //"ammo_clip_size" "7"
- //"ammo_default_total" "90"
- //"reload_time" "0.1"
- //"fire_rate" "0.1"
- "npc_damage_near_value" "70"
- "npc_damage_far_value" "70"
- }
- }
-
- "ui1_enable" "1"
- UiData1
- {
- "ui" "ui/kraber_ammo_counter"
- "mesh" "models/weapons/attachments/kraber_rui_lower"
- Args
- {
- vis player_zoomfrac
- ammo weapon_ammo
- clipSize weapon_clipSize
- }
- }
-
- "ui6_enable" "0"
- UiData6
- {
- "ui" "ui/red_dot_basic"
- "mesh" "models/weapons/attachments/sniper_scope_rui_upper"
- Args
- {
- vis player_zoomfrac
- ammo weapon_ammo
- clipSize weapon_clipSize
- clipCount weapon_stockpileClipCount
- }
- }
-
- "ui7_enable" "0"
- UiData7
- {
- "ui" "ui/variable_zoom_crosshair"
- "mesh" "models/weapons/attachments/attach_scope_ads_2_crosshair"
- Args
- {
- vis player_zoomfrac
- ammo weapon_ammo
- clipSize weapon_clipSize
- clipCount weapon_stockpileClipCount
- }
- }
-
- "ui8_enable" "0"
- UiData8
- {
- "ui" "ui/pro_screen_panel"
- "mesh" "models/weapons/attachments/pro_screen_rui_upper"
- Args
- {
- proValue proscreen_int0
- proOwnedByPlayer proscreen_owner_is_player
- }
- }
-
- active_crosshair_count "1"
- rui_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_sniper_amped"
- "base_spread" "10"
- Args
- {
- isFiring weapon_is_firing
- }
- }
- }
-}
diff --git a/Northstar.Custom/vpk/client_mp_northstar_common.bsp.pak000_000.vpk b/Northstar.Custom/vpk/client_mp_northstar_common.bsp.pak000_000.vpk
index 1b8ef3968..35313d15c 100644
--- a/Northstar.Custom/vpk/client_mp_northstar_common.bsp.pak000_000.vpk
+++ b/Northstar.Custom/vpk/client_mp_northstar_common.bsp.pak000_000.vpk
Binary files differ
diff --git a/Northstar.Custom/vpk/englishclient_mp_northstar_common.bsp.pak000_dir.vpk b/Northstar.Custom/vpk/englishclient_mp_northstar_common.bsp.pak000_dir.vpk
index 4d71f9778..2d5cd687f 100644
--- a/Northstar.Custom/vpk/englishclient_mp_northstar_common.bsp.pak000_dir.vpk
+++ b/Northstar.Custom/vpk/englishclient_mp_northstar_common.bsp.pak000_dir.vpk
Binary files differ