aboutsummaryrefslogtreecommitdiff
path: root/Northstar.Custom/scripts/vscripts/gamemodes/_gamemode_tt.gnut
blob: 6a53ef87b3ef223865436f991d79f222856ab213 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
global function GamemodeTT_Init

struct {
	entity lastPlayerDropped
} file

void function GamemodeTT_Init()
{
	SetSpawnpointGamemodeOverride( TEAM_DEATHMATCH )
	Riff_ForceTitanAvailability( eTitanAvailability.Never )

	AddCallback_GameStateEnter( eGameState.Playing, OnEnterPlaying )
	
	AddCallback_OnPlayerKilled( OnPlayerKilled )
	AddDeathCallback( "npc_titan", OnTitanKilled )
}

void function OnEnterPlaying()
{
	thread DropRandomTitan()
}

void function DropRandomTitan()
{	
	array<entity> players = GetPlayerArray()
	
	if ( players.len() == 1 )
		file.lastPlayerDropped = null // don't wanna loop forever if only 1 player
		
	entity titanPlayer
	do {
		titanPlayer = players[ RandomInt( players.len() ) ]
	} while ( titanPlayer == file.lastPlayerDropped )
		
	DropTitanForPlayer( titanPlayer, 5.0 )
}

void function DropTitanForPlayer( entity player, float delay )
{
	wait delay

	file.lastPlayerDropped = player
	CreateTitanForPlayerAndHotdrop( player, GetTitanReplacementPoint( player, false ) )
}

void function AttemptToDropTitanForKill( entity victim, entity attacker, var damageInfo )
{
	if ( !victim.IsTitan() )
		return

	if ( !attacker.IsPlayer() || victim == attacker )
		thread DropRandomTitan()
	else
		thread DropTitanForPlayer( attacker, 2.0 )
}

void function OnPlayerKilled( entity victim, entity attacker, var damageInfo )
{
	if ( victim.IsTitan() )
		AttemptToDropTitanForKill( victim, attacker, damageInfo )
	else if ( attacker.IsTitan() )
	{
		AddTeamScore( attacker.GetTeam(), 1 )
	}
}

void function OnTitanKilled( entity victim, var damageInfo )
{
	if ( IsPetTitan( victim ) )
		AttemptToDropTitanForKill( victim, DamageInfo_GetAttacker( damageInfo ), damageInfo )
}