aboutsummaryrefslogtreecommitdiff
path: root/Northstar.Custom
diff options
context:
space:
mode:
authorBobTheBob <32057864+BobTheBob9@users.noreply.github.com>2022-01-08 02:51:14 +0000
committerGitHub <noreply@github.com>2022-01-08 02:51:14 +0000
commitc8ce36a68132ab669019e652c6bc3cb4efa83ead (patch)
tree7be569bb3d69c87fafba48a7979b2062e4bff40b /Northstar.Custom
parentac1179b9b9ae6765fcfe7949086bd739a3bca82e (diff)
parentb55efc1402427093b052f85499270c0c0290b525 (diff)
downloadNorthstarMods-c8ce36a68132ab669019e652c6bc3cb4efa83ead.tar.gz
NorthstarMods-c8ce36a68132ab669019e652c6bc3cb4efa83ead.zip
Merge pull request #89 from VITALISED/tffa
Add Titan Free for All
Diffstat (limited to 'Northstar.Custom')
-rw-r--r--Northstar.Custom/keyvalues/playlists_v2.txt55
-rw-r--r--Northstar.Custom/mod.json22
-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
5 files changed, 223 insertions, 0 deletions
diff --git a/Northstar.Custom/keyvalues/playlists_v2.txt b/Northstar.Custom/keyvalues/playlists_v2.txt
index 37734025..44ca48e3 100644
--- a/Northstar.Custom/keyvalues/playlists_v2.txt
+++ b/Northstar.Custom/keyvalues/playlists_v2.txt
@@ -241,6 +241,23 @@ playlists
gamemode_score_hint #GAMEMODE_SCORE_HINT_TDM
}
}
+ tffa
+ {
+ inherit defaults
+ vars
+ {
+ name #PL_tffa
+ lobbytitle #PL_tffa_lobby
+ description #PL_tffa_desc
+ abbreviation #PL_sbox_abbr
+
+ scorelimit 20
+ max_players 10
+ max_teams 10
+ classic_mp 1
+ gamemode_score_hint #GAMEMODE_SCORE_HINT_TDM
+ }
+ }
}
Playlists
{
@@ -780,5 +797,43 @@ playlists
}
}
}
+ tffa
+ {
+ inherit defaults
+ vars
+ {
+ name #PL_tffa
+ lobbytitle #PL_tffa_lobby
+ description #PL_tffa_desc
+ hint #PL_tffa_hint
+ image lts
+ abbreviation #PL_tffa_abbr
+ visible 0
+ }
+ gamemodes
+ {
+ tffa
+ {
+ maps
+ {
+ mp_forwardbase_kodai 1
+ mp_grave 1
+ mp_homestead 1
+ mp_thaw 1
+ mp_black_water_canal 1
+ mp_eden 1
+ mp_drydock 1
+ mp_crashsite3 1
+ mp_complex3 1
+ mp_angel_city 1
+ mp_colony02 1
+ mp_glitch 1
+ mp_relic02 1
+ mp_wargames 1
+ mp_rise 1
+ }
+ }
+ }
+ }
}
}
diff --git a/Northstar.Custom/mod.json b/Northstar.Custom/mod.json
index d6c54033..2aaa7eb7 100644
--- a/Northstar.Custom/mod.json
+++ b/Northstar.Custom/mod.json
@@ -278,6 +278,28 @@
"Before": "ShGamemodeCTFComp_Init"
}
},
+
+ {
+ "Path": "gamemodes/sh_gamemode_tffa.gnut",
+ "RunOn": "( CLIENT || SERVER ) && MP",
+ "ClientCallback": {
+ "Before": "Sh_GamemodeTFFA_Init"
+ },
+
+ "ServerCallback": {
+ "Before": "Sh_GamemodeTFFA_Init"
+ }
+ },
+
+ {
+ "Path": "gamemodes/_gamemode_tffa.gnut",
+ "RunOn": "SERVER && MP"
+ },
+
+ {
+ "Path": "gamemodes/cl_gamemode_tffa.gnut",
+ "RunOn": "CLIENT && MP"
+ },
{
"Path": "sh_3psequence_to_1p_hacks.gnut",
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