diff options
author | BobTheBob <32057864+BobTheBob9@users.noreply.github.com> | 2021-12-30 02:24:38 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-30 02:24:38 +0000 |
commit | 3e5fb06337812e4a6b2aff3eea203ce2b76cc46d (patch) | |
tree | 319f6265e47fc1eaf1601f78f12d85d58b171c26 /_gamemode_ttdm.nut | |
parent | f4a44a7859e60843792580cced586e4f74448849 (diff) | |
parent | 07ccd9d1ddfde5f6f06c4cf75e1b3690c34b1f3d (diff) | |
download | NorthstarMods-3e5fb06337812e4a6b2aff3eea203ce2b76cc46d.tar.gz NorthstarMods-3e5fb06337812e4a6b2aff3eea203ce2b76cc46d.zip |
Merge pull request #22 from x3Karma/main
General Gamemodes Improvement
Diffstat (limited to '_gamemode_ttdm.nut')
-rw-r--r-- | _gamemode_ttdm.nut | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/_gamemode_ttdm.nut b/_gamemode_ttdm.nut new file mode 100644 index 00000000..c72fcb0d --- /dev/null +++ b/_gamemode_ttdm.nut @@ -0,0 +1,87 @@ +global function GamemodeTTDM_Init
+
+const float TTDMIntroLength = 15.0
+
+void function GamemodeTTDM_Init()
+{
+ Riff_ForceSetSpawnAsTitan( eSpawnAsTitan.Always )
+ Riff_ForceTitanExitEnabled( eTitanExitEnabled.Never )
+ TrackTitanDamageInPlayerGameStat( PGS_ASSAULT_SCORE )
+ ScoreEvent_SetupEarnMeterValuesForMixedModes()
+ SetLoadoutGracePeriodEnabled( false )
+
+ ClassicMP_SetCustomIntro( TTDMIntroSetup, TTDMIntroLength )
+ ClassicMP_ForceDisableEpilogue( true )
+ SetTimeoutWinnerDecisionFunc( CheckScoreForDraw )
+
+ 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 TTDMIntroSetup()
+{
+ // this should show intermission cam for 15 sec in prematch, before spawning players as titans
+ AddCallback_GameStateEnter( eGameState.Prematch, TTDMIntroStart )
+ AddCallback_OnClientConnected( TTDMIntroShowIntermissionCam )
+}
+
+void function TTDMIntroStart()
+{
+ thread TTDMIntroStartThreaded()
+}
+
+void function TTDMIntroStartThreaded()
+{
+ ClassicMP_OnIntroStarted()
+
+ foreach ( entity player in GetPlayerArray() )
+ TTDMIntroShowIntermissionCam( player )
+
+ wait TTDMIntroLength
+
+ ClassicMP_OnIntroFinished()
+}
+
+void function TTDMIntroShowIntermissionCam( entity player )
+{
+ if ( GetGameState() != eGameState.Prematch )
+ return
+
+ thread PlayerWatchesTTDMIntroIntermissionCam( player )
+}
+
+void function PlayerWatchesTTDMIntroIntermissionCam( 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 TTDMIntroLength
+
+ RespawnAsTitan( player, false )
+ TryGameModeAnnouncement( player )
+}
+
+void function AddTeamScoreForPlayerKilled( entity victim, entity attacker, var damageInfo )
+{
+ if ( victim == attacker || !victim.IsPlayer() || !attacker.IsPlayer() || GetGameState() != eGameState.Playing )
+ return
+
+ AddTeamScore( GetOtherTeam( victim.GetTeam() ), 1 )
+}
+
+int function CheckScoreForDraw()
+{
+ if (GameRules_GetTeamScore(TEAM_IMC) > GameRules_GetTeamScore(TEAM_MILITIA))
+ return TEAM_IMC
+ else if (GameRules_GetTeamScore(TEAM_MILITIA) > GameRules_GetTeamScore(TEAM_IMC))
+ return TEAM_MILITIA
+
+ return TEAM_UNASSIGNED
+}
\ No newline at end of file |