aboutsummaryrefslogtreecommitdiff
path: root/Northstar.CustomServers/mod/scripts/vscripts/gamemodes
diff options
context:
space:
mode:
Diffstat (limited to 'Northstar.CustomServers/mod/scripts/vscripts/gamemodes')
-rw-r--r--Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_coliseum.nut93
-rw-r--r--Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_cp.nut40
-rw-r--r--Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_ctf.nut2
-rw-r--r--Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_ffa.nut3
-rw-r--r--Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_lts.nut1
-rw-r--r--Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_speedball.nut1
6 files changed, 133 insertions, 7 deletions
diff --git a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_coliseum.nut b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_coliseum.nut
index e0664b1e..88a95fe4 100644
--- a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_coliseum.nut
+++ b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_coliseum.nut
@@ -36,11 +36,14 @@ void function GamemodeColiseum_Init()
ClassicMP_SetCustomIntro( ClassicMP_DefaultNoIntro_Setup, ClassicMP_DefaultNoIntro_GetLength() )
AddCallback_GameStateEnter( eGameState.Prematch, ShowColiseumIntroScreen )
AddCallback_OnPlayerRespawned( GivePlayerColiseumLoadout )
+
+ ClassicMP_SetEpilogue( SetupColiseumEpilogue )
}
// stub function referenced in sh_gamemodes_mp
void function GamemodeColiseum_CustomIntro( entity player )
-{}
+{
+}
void function ShowColiseumIntroScreen()
{
@@ -56,7 +59,6 @@ void function ShowColiseumIntroScreenThreaded()
foreach ( entity player in GetPlayerArray() )
{
-
array<entity> otherTeam = GetPlayerArrayOfTeam( GetOtherTeam( player.GetTeam() ) )
int winstreak = 0
@@ -106,6 +108,7 @@ void function GivePlayerColiseumLoadout( entity player )
coliseumLoadout.primary = GetColiseumItem( "primary" )
coliseumLoadout.primaryMods = [ GetColiseumItem( "primary_attachment" ), GetColiseumItem( "primary_mod1" ), GetColiseumItem( "primary_mod2" ), GetColiseumItem( "primary_mod3" ) ]
+ coliseumLoadout.primaryAttachments = [] // will likely crash if we dont do this
coliseumLoadout.secondary = GetColiseumItem( "secondary" )
coliseumLoadout.secondaryMods = [ GetColiseumItem( "secondary_mod1" ), GetColiseumItem( "secondary_mod2" ), GetColiseumItem( "secondary_mod3" ) ]
@@ -129,4 +132,88 @@ string function GetColiseumItem( string name )
return expect string ( GetCurrentPlaylistVar( "coliseum_" + name ) )
}
-// todo this needs the outro: unsure what anims it uses \ No newline at end of file
+void function SetupColiseumEpilogue()
+{
+ AddCallback_GameStateEnter( eGameState.Epilogue, RunColiseumOutro )
+}
+
+void function RunColiseumOutro()
+{
+ entity outroAnimPoint = GetEnt( "intermission" )
+ array<entity> winningPlayers = GetPlayerArrayOfTeam( GetWinningTeam() )
+
+ if ( GetPlayerArray().len() > 0 && IsValid( outroAnimPoint ) && GetWinningTeam() != -1 && winningPlayers.len() != 0 ) // this will fail if we don't have players or a spot to do it
+ thread RunColiseumOutroThreaded( outroAnimPoint.GetOrigin(), winningPlayers[ 0 ] )
+ else
+ SetGameState( eGameState.Postmatch )
+}
+
+void function RunColiseumOutroThreaded( vector point, entity winningPlayer )
+{
+ OnThreadEnd( function() : ()
+ {
+ SetGameState( eGameState.Postmatch )
+ })
+
+ winningPlayer.EndSignal( "OnDestroy" )
+
+ // pick winner and loser anims
+ int numLost = GameRules_GetTeamScore( GetOtherTeam( GetWinningTeam() ) )
+ int animIndex = RandomInt( OUTROANIMS_WINNER[ numLost ].len() )
+ string winnerAnim = OUTROANIMS_WINNER[ numLost ][ animIndex ]
+ string loserAnim = OUTROANIMS_LOSER[ numLost ][ animIndex ]
+
+ foreach ( entity player in GetPlayerArray() )
+ {
+ if ( !IsAlive( player ) )
+ player.RespawnPlayer( null )
+
+ AddCinematicFlag( player, CE_FLAG_HIDE_MAIN_HUD )
+ ScreenFadeFromBlack( player, 0.5 )
+ player.SetOrigin( point )
+ player.SetNameVisibleToEnemy( false )
+ player.SetNameVisibleToFriendly( false )
+ // for some reason this just doesn't use the mp music system, so have to manually play this
+ // odd game
+ EmitSoundOnEntityOnlyToPlayer( player, player, "music_mp_speedball_game_win" )
+
+ FirstPersonSequenceStruct outroSequence
+ outroSequence.thirdPersonCameraAttachments = [ "VDU" ]
+ outroSequence.blendTime = 0.25
+ outroSequence.attachment = "ref"
+ outroSequence.enablePlanting = true
+ outroSequence.playerPushable = false
+
+ // for when we kill any active weapons if not needed for anim
+ entity playerWeapon = player.GetActiveWeapon()
+
+ if ( player.GetTeam() == GetWinningTeam() )
+ {
+ if ( IsValid( playerWeapon ) )
+ playerWeapon.Destroy()
+
+ outroSequence.thirdPersonAnim = winnerAnim
+ outroSequence.noParent = true
+ outroSequence.gravity = true
+ thread FirstPersonSequence( outroSequence, player )
+ }
+ else
+ {
+ // need weapon for this anim in particular
+ if ( IsValid( playerWeapon ) && loserAnim != "pt_coliseum_loser_gunkick" )
+ playerWeapon.Destroy()
+
+ outroSequence.thirdPersonAnim = loserAnim
+ outroSequence.useAnimatedRefAttachment = true
+ thread FirstPersonSequence( outroSequence, player, winningPlayer )
+ }
+ }
+
+ // all outro anims should be the same length ideally
+ wait winningPlayer.GetSequenceDuration( winnerAnim ) - 0.75
+
+ foreach ( entity player in GetPlayerArray() )
+ ScreenFadeToBlackForever( player, 0.75 )
+
+ wait 0.75
+} \ No newline at end of file
diff --git a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_cp.nut b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_cp.nut
index 41f5fedb..4ea25fa7 100644
--- a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_cp.nut
+++ b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_cp.nut
@@ -34,10 +34,46 @@ void function GamemodeCP_Init()
void function RateSpawnpoints_CP( int checkClass, array<entity> spawnpoints, int team, entity player )
{
- // check hardpoints
+ if ( HasSwitchedSides() )
+ team = GetOtherTeam( team )
+ // check hardpoints, determine which ones we own
array<entity> startSpawns = SpawnPoints_GetPilotStart( team )
- array<entity> enemyStartSpawns = SpawnPoints_GetPilotStart( GetOtherTeam( team ) )
+ vector averageFriendlySpawns
+
+ // average out startspawn positions
+ foreach ( entity spawnpoint in startSpawns )
+ averageFriendlySpawns += spawnpoint.GetOrigin()
+
+ averageFriendlySpawns /= startSpawns.len()
+
+ entity friendlyHardpoint // determine our furthest out hardpoint
+ foreach ( entity hardpoint in HARDPOINTS )
+ {
+ if ( hardpoint.GetTeam() == player.GetTeam() && GetGlobalNetFloat( "objective" + hardpoint.kv.hardpointGroup + "Progress" ) >= 0.95 )
+ {
+ if ( IsValid( friendlyHardpoint ) )
+ {
+ if ( Distance2D( averageFriendlySpawns, hardpoint.GetOrigin() ) > Distance2D( averageFriendlySpawns, friendlyHardpoint.GetOrigin() ) )
+ friendlyHardpoint = hardpoint
+ }
+ else
+ friendlyHardpoint = hardpoint
+ }
+ }
+
+ vector ratingPos
+ if ( IsValid( friendlyHardpoint ) )
+ ratingPos = friendlyHardpoint.GetOrigin()
+ else
+ ratingPos = averageFriendlySpawns
+
+ foreach ( entity spawnpoint in spawnpoints )
+ {
+ // idk about magic number here really
+ float rating = 1.0 - ( Distance2D( spawnpoint.GetOrigin(), ratingPos ) / 1000.0 )
+ spawnpoint.CalculateRating( checkClass, player.GetTeam(), rating, rating )
+ }
}
void function SpawnHardpoints()
diff --git a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_ctf.nut b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_ctf.nut
index 3213827d..7f879c69 100644
--- a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_ctf.nut
+++ b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_ctf.nut
@@ -134,7 +134,7 @@ bool function VerifyCTFSpawnpoint( entity spawnpoint, int team )
{
// ensure spawnpoints aren't too close to enemy base
- if ( HasSwitchedSides() && spawnpoint.GetTeam() >= TEAM_IMC )
+ if ( HasSwitchedSides() )
team = GetOtherTeam( team )
array<entity> startSpawns = SpawnPoints_GetPilotStart( team )
diff --git a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_ffa.nut b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_ffa.nut
index 85b4aefb..6a8b3ea4 100644
--- a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_ffa.nut
+++ b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_ffa.nut
@@ -12,6 +12,7 @@ void function OnPlayerKilled( entity victim, entity attacker, var damageInfo )
if ( victim != attacker && victim.IsPlayer() && attacker.IsPlayer() && GetGameState() == eGameState.Playing )
{
AddTeamScore( attacker.GetTeam(), 1 )
- attacker.AddToPlayerGameStat( PGS_SCORE, 1 )
+ // why isn't this PGS_SCORE? odd game
+ attacker.AddToPlayerGameStat( PGS_ASSAULT_SCORE, 1 )
}
} \ No newline at end of file
diff --git a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_lts.nut b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_lts.nut
index 194db8a0..5de78b53 100644
--- a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_lts.nut
+++ b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_lts.nut
@@ -30,6 +30,7 @@ void function GamemodeLts_Init()
TrackTitanDamageInPlayerGameStat( PGS_ASSAULT_SCORE )
ClassicMP_SetCustomIntro( ClassicMP_DefaultNoIntro_Setup, ClassicMP_DefaultNoIntro_GetLength() )
+ ClassicMP_ForceDisableEpilogue( true )
AddCallback_GameStateEnter( eGameState.Playing, WaitForThirtySecondsLeft )
}
diff --git a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_speedball.nut b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_speedball.nut
index 4532fb97..abc9013a 100644
--- a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_speedball.nut
+++ b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_speedball.nut
@@ -26,6 +26,7 @@ void function GamemodeSpeedball_Init()
SetTimeoutWinnerDecisionFunc( TimeoutCheckFlagHolder )
ClassicMP_SetCustomIntro( ClassicMP_DefaultNoIntro_Setup, ClassicMP_DefaultNoIntro_GetLength() )
+ ClassicMP_ForceDisableEpilogue( true )
}
void function CreateFlag( entity flagSpawn )