diff options
author | Will Castro <39478251+VITALISED@users.noreply.github.com> | 2022-01-08 13:23:23 +1100 |
---|---|---|
committer | Will Castro <39478251+VITALISED@users.noreply.github.com> | 2022-01-08 13:23:23 +1100 |
commit | b55efc1402427093b052f85499270c0c0290b525 (patch) | |
tree | 7be569bb3d69c87fafba48a7979b2062e4bff40b /Northstar.Custom/mod/scripts/vscripts/gamemodes | |
parent | ac1179b9b9ae6765fcfe7949086bd739a3bca82e (diff) | |
download | NorthstarMods-b55efc1402427093b052f85499270c0c0290b525.tar.gz NorthstarMods-b55efc1402427093b052f85499270c0c0290b525.zip |
Add TFFA
Diffstat (limited to 'Northstar.Custom/mod/scripts/vscripts/gamemodes')
3 files changed, 146 insertions, 0 deletions
diff --git a/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_tffa.gnut b/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_tffa.gnut new file mode 100644 index 00000000..edea5a76 --- /dev/null +++ b/Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_tffa.gnut @@ -0,0 +1,79 @@ +// literally just ttdm paste + +global function GamemodeTFFA_Init + +const float TFFAIntroLength = 15.0 + +void function GamemodeTFFA_Init() +{ + Riff_ForceSetSpawnAsTitan( eSpawnAsTitan.Always ) + Riff_ForceTitanExitEnabled( eTitanExitEnabled.Never ) + TrackTitanDamageInPlayerGameStat( PGS_ASSAULT_SCORE ) + ScoreEvent_SetupEarnMeterValuesForMixedModes() + SetLoadoutGracePeriodEnabled( false ) + + ClassicMP_SetCustomIntro( TFFAIntroSetup, TFFAIntroLength ) + + AddCallback_OnPlayerKilled( AddTeamScoreForPlayerKilled ) // dont have to track autotitan kills since you cant leave your titan in this mode + + // probably needs scoreevent earnmeter values +} + +void function TFFAIntroSetup() +{ + // this should show intermission cam for 15 sec in prematch, before spawning players as titans + AddCallback_GameStateEnter( eGameState.Prematch, TFFAIntroStart ) + AddCallback_OnClientConnected( TFFAIntroShowIntermissionCam ) +} + +void function TFFAIntroStart() +{ + thread TFFAIntroStartThreaded() +} + +void function TFFAIntroStartThreaded() +{ + ClassicMP_OnIntroStarted() + + foreach ( entity player in GetPlayerArray() ) + TFFAIntroShowIntermissionCam( player ) + + wait TFFAIntroLength + + ClassicMP_OnIntroFinished() +} + +void function TFFAIntroShowIntermissionCam( entity player ) +{ + if ( GetGameState() != eGameState.Prematch ) + return + + thread PlayerWatchesTFFAIntroIntermissionCam( player ) +} + +void function PlayerWatchesTFFAIntroIntermissionCam( entity player ) +{ + ScreenFadeFromBlack( player ) + + entity intermissionCam = GetEntArrayByClass_Expensive( "info_intermission" )[ 0 ] + + // the angle set here seems sorta inconsistent as to whether it actually works or just stays at 0 for some reason + player.SetObserverModeStaticPosition( intermissionCam.GetOrigin() ) + player.SetObserverModeStaticAngles( intermissionCam.GetAngles() ) + player.StartObserverMode( OBS_MODE_STATIC_LOCKED ) + + wait TFFAIntroLength + + RespawnAsTitan( player, false ) + TryGameModeAnnouncement( player ) +} + +void function AddTeamScoreForPlayerKilled( entity victim, entity attacker, var damageInfo ) +{ + if ( victim != attacker && victim.IsPlayer() && attacker.IsPlayer() && GetGameState() == eGameState.Playing ) + { + AddTeamScore( attacker.GetTeam(), 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.Custom/mod/scripts/vscripts/gamemodes/cl_gamemode_tffa.gnut b/Northstar.Custom/mod/scripts/vscripts/gamemodes/cl_gamemode_tffa.gnut new file mode 100644 index 00000000..5a5a3b9c --- /dev/null +++ b/Northstar.Custom/mod/scripts/vscripts/gamemodes/cl_gamemode_tffa.gnut @@ -0,0 +1,28 @@ +global function ClGamemodeTFFA_Init + +void function ClGamemodeTFFA_Init() +{ + // register gamestate asset, this is default so not necessary but doing it anyway + ClGameState_RegisterGameStateAsset( $"ui/gamestate_info_ffa.rpak" ) + + // add music for mode, this is copied directly from the attrition/tdm music registered in cl_music.gnut + RegisterLevelMusicForTeam( eMusicPieceID.LEVEL_INTRO, "music_mp_pilothunt_intro_flyin", TEAM_IMC ) + RegisterLevelMusicForTeam( eMusicPieceID.LEVEL_INTRO, "music_mp_pilothunt_intro_flyin", TEAM_MILITIA ) + + RegisterLevelMusicForTeam( eMusicPieceID.LEVEL_WIN, "music_mp_pilothunt_epilogue_win", TEAM_IMC ) + RegisterLevelMusicForTeam( eMusicPieceID.LEVEL_WIN, "music_mp_pilothunt_epilogue_win", TEAM_MILITIA ) + + RegisterLevelMusicForTeam( eMusicPieceID.LEVEL_DRAW, "music_mp_pilothunt_epilogue_win", TEAM_IMC ) + RegisterLevelMusicForTeam( eMusicPieceID.LEVEL_DRAW, "music_mp_pilothunt_epilogue_win", TEAM_MILITIA ) + + RegisterLevelMusicForTeam( eMusicPieceID.LEVEL_LOSS, "music_mp_pilothunt_epilogue_lose", TEAM_IMC ) + RegisterLevelMusicForTeam( eMusicPieceID.LEVEL_LOSS, "music_mp_pilothunt_epilogue_lose", TEAM_MILITIA ) + + RegisterLevelMusicForTeam( eMusicPieceID.GAMEMODE_1, "music_mp_pilothunt_almostdone", TEAM_IMC ) + RegisterLevelMusicForTeam( eMusicPieceID.GAMEMODE_1, "music_mp_pilothunt_almostdone", TEAM_MILITIA ) + + RegisterLevelMusicForTeam( eMusicPieceID.LEVEL_LAST_MINUTE, "music_mp_pilothunt_lastminute", TEAM_IMC ) + RegisterLevelMusicForTeam( eMusicPieceID.LEVEL_LAST_MINUTE, "music_mp_pilothunt_lastminute", TEAM_MILITIA ) + + AddCallback_GameStateEnter( eGameState.Postmatch, DisplayPostMatchTop3 ) +}
\ No newline at end of file diff --git a/Northstar.Custom/mod/scripts/vscripts/gamemodes/sh_gamemode_tffa.gnut b/Northstar.Custom/mod/scripts/vscripts/gamemodes/sh_gamemode_tffa.gnut new file mode 100644 index 00000000..a45e59a4 --- /dev/null +++ b/Northstar.Custom/mod/scripts/vscripts/gamemodes/sh_gamemode_tffa.gnut @@ -0,0 +1,39 @@ +global function Sh_GamemodeTFFA_Init + +global const string GAMEMODE_TFFA = "tffa" + +void function Sh_GamemodeTFFA_Init() +{ + AddCallback_OnCustomGamemodesInit( CreateGamemodeTFFA ) +} + +void function CreateGamemodeTFFA() +{ + GameMode_Create( GAMEMODE_TFFA ) + GameMode_SetName( GAMEMODE_TFFA, "#GAMEMODE_TFFA" ) + GameMode_SetDesc( GAMEMODE_TFFA, "#PL_tffa_desc" ) + GameMode_SetGameModeAnnouncement( GAMEMODE_TFFA, "ffa_modeDesc" ) + GameMode_SetDefaultTimeLimits( GAMEMODE_TFFA, 10, 0.0 ) + GameMode_AddScoreboardColumnData( GAMEMODE_TFFA, "#SCOREBOARD_TITAN_KILLS", PGS_TITAN_KILLS, 2 ) + GameMode_AddScoreboardColumnData( GAMEMODE_TFFA, "#SCOREBOARD_TITAN_DAMAGE", PGS_ASSAULT_SCORE, 6 ) + GameMode_SetColor( GAMEMODE_TFFA, [147, 204, 57, 255] ) + + AddPrivateMatchMode( GAMEMODE_TFFA ) + + GameMode_SetDefaultScoreLimits( GAMEMODE_TFFA, 20, 0) + + #if SERVER + GameMode_AddServerInit( GAMEMODE_TFFA, GamemodeTFFA_Init ) + GameMode_AddServerInit( GAMEMODE_TFFA, GamemodeFFAShared_Init ) + GameMode_SetPilotSpawnpointsRatingFunc( GAMEMODE_TFFA, RateSpawnpoints_Generic ) + GameMode_SetTitanSpawnpointsRatingFunc( GAMEMODE_TFFA, RateSpawnpoints_Generic ) + #elseif CLIENT + GameMode_AddClientInit( GAMEMODE_TFFA, ClGamemodeTFFA_Init ) + GameMode_AddClientInit( GAMEMODE_TFFA, GamemodeFFAShared_Init ) + GameMode_AddClientInit( GAMEMODE_TFFA, ClGamemodeTFFA_Init ) + #endif + #if !UI + GameMode_SetScoreCompareFunc( GAMEMODE_TFFA, CompareAssaultScore ) + GameMode_AddSharedInit( GAMEMODE_TFFA, GamemodeFFA_Dialogue_Init ) + #endif +}
\ No newline at end of file |