aboutsummaryrefslogtreecommitdiff
path: root/Northstar.Custom/mod
diff options
context:
space:
mode:
authorWill Castro <39478251+VITALISED@users.noreply.github.com>2022-01-08 13:23:23 +1100
committerWill Castro <39478251+VITALISED@users.noreply.github.com>2022-01-08 13:23:23 +1100
commitb55efc1402427093b052f85499270c0c0290b525 (patch)
tree7be569bb3d69c87fafba48a7979b2062e4bff40b /Northstar.Custom/mod
parentac1179b9b9ae6765fcfe7949086bd739a3bca82e (diff)
downloadNorthstarMods-b55efc1402427093b052f85499270c0c0290b525.tar.gz
NorthstarMods-b55efc1402427093b052f85499270c0c0290b525.zip
Add TFFA
Diffstat (limited to 'Northstar.Custom/mod')
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/gamemodes/_gamemode_tffa.gnut79
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/gamemodes/cl_gamemode_tffa.gnut28
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/gamemodes/sh_gamemode_tffa.gnut39
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