//////////////////////////////////////////////////////////////////////////////
// Node control rules common to node and fusion
//////////////////////////////////////////////////////////////////////////////
if startup1 then triggerdelay 1000 MarkAllTroopersStrategic

// @1 = node number (1-5)
macro node_macro 1
{
	// 0 = no owner, 1 = green, 2 = tan, 3 = blue, 4 = grey
	variable node@1owner 0
	variable oldnode@1owner 0
	variable node@1holder 0

	if startup1 then
		deploy blacknode@1,
		setitemflag blacknode@1 stratsquare 1,
		setitemflag blacknode@1 strategic 1

	if node@1OwnerChanged testvar oldnode@1owner = 0 then
		trigger @1nodex
	if @1nodex then
		undeploy blacknode@1,
		setitemflag blacknode@1 strategic 0,
		trigger showNewNode@1Owner

	// whenever node@1owner changes create explosions to make flags appear/dissapper in a
	// puf of smoke
	if node@1OwnerChanged then
		createexplosion greennode@1 128 0 green	

	// if there is a new node@1 owner then play a sound
	if showNewNode@1Owner testvar node@1owner <> 0 then
		trigger @1nodesound
	if @1nodesound then
		playsound "mp_own.wav" (0,0) 1 2
}

expand node_macro ( 1 )
expand node_macro ( 2 )
expand node_macro ( 3 )
expand node_macro ( 4 )
expand node_macro ( 5 )

// @1 = color, @2 = Capitalized color (e.g. "Green"), @3 is value for node owner,
// @4 = node number (1-5),
// @5-7 = other colors
macro team_node_macro 7
{
	variable @1onnode@4 0

	// these pairs of variables are used to prevent sarge leaving and returning to the node within
	// 1 second and scoring at a double rate
	variable @1GainsNode@4Count 0
	variable @1KeepsNode@4Check 0

	pad @1node@4pad @4 @1 unit > 0

	if startup1 testvar iscoloringame @1 > 0 then
		setitemflag @1node@4 stratsquare 1,
		setitemowner @1node@4 @1

	// check for @1 taking or losing this node

	if padon @1node@4pad then
		setvar @1onnode@4 1,
		trigger check@1holdsnode@4

	if padoff @1node@4pad then
		setvar @1onnode@4 0,
		trigger @1offnode@4

	if @1offnode@4 testvar node@4holder = @3 then
		setvar node@4holder 0,
		trigger check@5holdsnode@4,
		trigger check@6holdsnode@4,
		trigger check@7holdsnode@4

	if check@1holdsnode@4 testvar @1onnode@4 = 1 and node@4holder = 0 then
		setvar node@4holder @3,
		trigger check@1ownsnode@4

	if check@1ownsnode@4 testvar node@4owner <> @3 and node@4holder = @3 then
		setvar node@4owner @3,
		trigger node@4OwnerChanged,
		showmessage "@2 takes control of node @4",
		addvar @1GainsNode@4Count 1,
		triggerdelay refvar nodeScoreDelay check@1node@4scoresinitial

	if check@1node@4scoresinitial then
		addvar @1KeepsNode@4Check 1

	if check@1node@4scoresinitial testvar node@4owner = @3 then
		trigger check@1node@4scores

	if check@1node@4scores testvar node@4owner = @3 and @1KeepsNode@4Check = @1GainsNode@4Count then
		trigger @1ke@4
	if @1ke@4 then
		trigger increment@1score,
		playsound "mp_tick.wav" (0,0) 2 3,
		trigger check@1wins,
		triggerdelay refvar nodeScoreDelay check@1node@4scores

	// update the flags to display the owner of node@4

	if node@4OwnerChanged testvar oldnode@4owner = @3 and node@4owner <> @3 then
		trigger @1lose@4
	if @1lose@4 then
		trigger decrement@1nodesOwned,
		undeploy @1node@4,
		setitemflag @1node@4 strategic 0,
		trigger showNewNode@4Owner,
		removescoresymbol @1 @1node

	if showNewNode@4Owner testvar node@4owner = @3 and oldnode@4owner <> @3 then
		trigger @1xe@4
	if @1xe@4 then
		setvar oldnode@4owner @3,
		trigger increment@1nodesOwned,
		deploy @1node@4 blacknode@4,
		setitemflag @1node@4 strategic 1,
		addscoresymbol @1 @1node
}

// @1 = color, @2 = Capitalized color (e.g. "Green"), @3 is value for node owner,
// @4-6 are other colors
macro node_control_macro 6
{
	variable @1nodesOwned 0

	if increment@1score testvar @1nodesOwned = 1 then
		addvar @1score own1NodeBonus

	if increment@1score testvar @1nodesOwned = 2 then
		addvar @1score own2NodesBonus

	if increment@1score testvar @1nodesOwned = 3 then
		addvar @1score own3NodesBonus

	if increment@1score testvar @1nodesOwned = 4 then
		addvar @1score own4NodesBonus

	if increment@1score testvar @1nodesOwned = 5 then
		addvar @1score own5NodesBonus

	expand team_node_macro ( @1 "@2" @3 1 @4 @5 @6 )
	expand team_node_macro ( @1 "@2" @3 2 @4 @5 @6 )
	expand team_node_macro ( @1 "@2" @3 3 @4 @5 @6 )
	expand team_node_macro ( @1 "@2" @3 4 @4 @5 @6 )
	expand team_node_macro ( @1 "@2" @3 5 @4 @5 @6 )
}

expand node_control_macro ( green "Green" 1 tan   blue  grey )
expand node_control_macro ( tan   "Tan"   2 blue  grey  green )
expand node_control_macro ( blue  "Blue"  3 grey  green tan )
expand node_control_macro ( grey  "Grey"  4 green tan   blue )

// @1 = color of player, @2 = color of possible ally
macro nodes_owned_team_macro 2
{
	if increment@1nodesOwned testvar isally @1 @2 = 1 then
		addvar @2nodesOwned 1

	if decrement@1nodesOwned testvar isally @1 @2 = 1 then
		addvar @2nodesOwned -1
}

// @1 = color of player, @2-4 = color of other players
macro nodes_owned_macro 4
{
	expand nodes_owned_team_macro ( @1 @1 )
	expand nodes_owned_team_macro ( @1 @2 )
	expand nodes_owned_team_macro ( @1 @3 )
	expand nodes_owned_team_macro ( @1 @4 )
}

expand nodes_owned_macro ( green tan   blue  grey )
expand nodes_owned_macro ( tan   blue  grey  green )
expand nodes_owned_macro ( blue  grey  green tan )
expand nodes_owned_macro ( grey  green tan   blue )
