diff options
Diffstat (limited to 'Northstar.Custom')
22 files changed, 672 insertions, 679 deletions
diff --git a/Northstar.Custom/keyvalues/playlists_v2.txt b/Northstar.Custom/keyvalues/playlists_v2.txt index 30ea6980..813accb6 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 a30ed8f8..00000000 --- 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 d1ebeec3..8a09c756 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 00000000..58c8a1ca --- /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 1a8d1ee7..3056c505 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 00000000..8b21184a --- /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 8ebef034..faa92480 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 00000000..9689302c --- /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 b59cd2dd..00c19310 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 b9ee40f1..e0178034 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 00000000..bc65e0b6 --- /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 8706d53b..b2e76aaf 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 cf9d6bc5..7a226e21 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 00000000..8bfbb10e --- /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 00000000..f4269ac4 --- /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 00000000..afd4fc37 --- /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 00000000..84ffe3e9 --- /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 0c95ae4c..0c47c014 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 c5e61f93..59219cab 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 ede43d7d..00000000 --- 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 Binary files differindex 1b8ef396..35313d15 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 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 Binary files differindex 4d71f977..2d5cd687 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 |