/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Obelisk of Light
 *
 * The Obelisk is a tower-like structure that guards the base. It exists at
 * game start and is one of the five structures that must be destroyed to win
 * the game.
 *
 * The Obelisk structure is built of map geometry. The actors defined here are
 * invisible actors that are the functional bit in the obelisk. They're monsters
 * which shoot the plasma blast at enemies they see.
 */

actor RedObeliskThing 21214 {
	//$Category Buildings
	MONSTER
	-ISMONSTER
	-SOLID
	-FRIENDLY
	+FLOORCLIP
	+NOBLOOD
	+NOICEDEATH
	+NOCLIP
	+NOTARGET
	+LOOKALLAROUND
	+NEVERRESPAWN
	+NOGRAVITY
	+NOINTERACTION
	Health 99999
	Radius 16
	Height 64
	Mass 999999
	Speed 0
	PainChance 0
	Tag "Red Obelisk Eye"
	Obituary "$OB_OBELISK_RED"
	DesignatedTeam 1
	States {
	Spawn:
		TNT1 A 0
		TNT1 A 0 Thing_ChangeTID (0, 215)
		TNT1 A 0 A_ChangeFlag("ISMONSTER",1)
		TNT1 A 0 A_GiveInventory("IsRed",1)
		TNT1 A 0 A_TakeInventory("ObeliskCharged",1)
		TNT1 A 8 A_Look
		loop
	See:
		TNT1 A 0 A_Chase("","",CHF_DONTMOVE)
		TNT1 A 0 A_GiveInventory("IsRed",1)
		TNT1 A 0 A_TakeInventory("ObeliskCharged",1)
		TNT1 A 3 A_FaceTarget
		TNT1 A 2 A_JumpIfTargetInLOS("Missile")
		TNT1 A 2 A_ClearTarget
		goto Spawn
	Clear:
		TNT1 A 2 A_ClearTarget
		goto See
	MissileCheck:
		TNT1 A 1 A_JumpIfInTargetInventory ("IsBlue", 1, "MissileGo")
		goto Clear
	Missile:
		TNT1 A 0 
		TNT1 A 1 A_JumpIfInTargetInventory("IsRed",1,"Clear")
		TNT1 A 1 A_JumpIfCloser(30000,"MissileGo")
		TNT1 A 0 
		goto Clear
	MissileGo:
		TNT1 A 0 A_JumpIfInTargetInventory("IsMech",1,"MissileGoMech")
		TNT1 A 0 A_JumpIfInventory("ObeliskCharged",1,"MissileCharged")
		TNT1 A 0 A_FaceTarget
		TNT1 A 70 A_PlaySoundEx("obelisk/charge","Voice",0)
		TNT1 A 0 A_GiveInventory("ObeliskCharged",15)
		TNT1 A 0 A_MonsterRefire (0, "See")
		TNT1 A 0 A_PlaySoundEx("obelisk/fire","Weapon",0)
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ObbyFlare")
		TNT1 A 0 A_CustomMissile("ObeliskShotRedInfantry",12,0)
		TNT1 A 0 A_CustomRailgun(0,0,NONE,NONE,RGF_SILENT|RGF_FULLBRIGHT,1,72,NONE,0,0,4500,0,2,0,"NastyObeliskRedTrail")
		TNT1 A 80 A_FaceTarget
		TNT1 A 0 A_TakeInventory("ObeliskCharged",15)
		goto See
	MissileCharged:
		TNT1 A 15
		TNT1 A 0 A_PlaySoundEx("obelisk/fire","Weapon",0)
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_CustomMissile("ObeliskShotRedInfantry",12,0)
		TNT1 A 0 A_CustomRailgun(0,0,NONE,NONE,RGF_SILENT|RGF_FULLBRIGHT,1,72,NONE,0,0,4500,0,2,0,"NastyObeliskRedTrail")
		TNT1 A 70 A_FaceTarget
		TNT1 A 0 A_TakeInventory("ObeliskCharged",15)
		goto See
	MissileGoMech:
		TNT1 A 0 A_JumpIfInventory("ObeliskCharged",1,"MissileChargedMech")
		TNT1 A 0 A_FaceTarget
		TNT1 A 80 A_PlaySoundEx("obelisk/charge","Voice",0)
		TNT1 A 0 A_GiveInventory("ObeliskCharged",15)
		TNT1 A 0 A_MonsterRefire (0, "See")
		TNT1 A 0 A_PlaySoundEx("obelisk/fire","Weapon",0)
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ObbyFlare")
		TNT1 A 0 A_CustomMissile("ObeliskShotRed",12,0)
		TNT1 A 0 A_CustomRailgun(0,0,NONE,NONE,RGF_SILENT|RGF_FULLBRIGHT,1,72,NONE,0,0,4500,0,2,0,"NastyObeliskRedTrail")
		TNT1 A 70 A_FaceTarget
		TNT1 A 0 A_TakeInventory("ObeliskCharged",15)
		goto See
	MissileChargedMech:
		TNT1 A 15
		TNT1 A 0 A_PlaySoundEx("obelisk/fire","Weapon",0)
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_CustomMissile("ObeliskShotRed",12,0)
		TNT1 A 0 A_CustomRailgun(0,0,NONE,NONE,RGF_SILENT|RGF_FULLBRIGHT,1,72,NONE,0,0,4500,0,2,0,"NastyObeliskRedTrail")
		TNT1 A 80 A_FaceTarget
		TNT1 A 0 A_TakeInventory("ObeliskCharged",15)
		goto See
	Death:	
		TNT1 A 5
		stop
	}
}

actor BlueObeliskThing 21213 {
	//$Category Buildings
	MONSTER
	-ISMONSTER
	-SOLID
	-FRIENDLY
	+FLOORCLIP
	+NOBLOOD
	+NOICEDEATH
	+NOCLIP
	+NOTARGET
	+LOOKALLAROUND
	+NEVERRESPAWN
	+NOGRAVITY
	+NOINTERACTION
	Health 99999
	Radius 16
	Height 64
	Mass 999999
	Speed 0
	PainChance 0
	DesignatedTeam 0
	Tag "Blue Obelisk Eye"
	Obituary "$OB_OBELISK_BLUE" // "%o was vaporized by the \chBlue Obelisk\c-."
	States {
	Spawn:
		TNT1 A 0
		TNT1 A 0 Thing_ChangeTID (0, 115)
		TNT1 A 0 A_ChangeFlag("ISMONSTER",1)
		TNT1 A 0 A_GiveInventory("IsBlue",1)
		TNT1 A 0 A_TakeInventory("ObeliskCharged",1)
		TNT1 A 8 A_Look
		loop
	See:
		TNT1 A 0 A_Chase("","",CHF_DONTMOVE)
		TNT1 A 0 A_GiveInventory("IsBlue",1)
		TNT1 A 0 A_TakeInventory("ObeliskCharged",1)
		TNT1 A 3 A_FaceTarget
		TNT1 A 2 A_JumpIfTargetInLOS("Missile")
		TNT1 A 2 A_ClearTarget
		goto Spawn
	Clear:
		TNT1 A 2 A_ClearTarget
		goto See
	MissileCheck:
		TNT1 AA 0 A_JumpIfInTargetInventory("IsRed",1,"MissileGo")
		TNT1 A 0 
		goto See
	Missile:
		TNT1 A 0 
		TNT1 A 1 A_JumpIfInTargetInventory("IsBlue",1,"Clear")
		TNT1 A 1 A_JumpIfCloser(30000,"MissileGo")
		TNT1 A 0 
		goto Clear
	MissileGo:
		TNT1 A 0 A_JumpIfInTargetInventory("IsMech",1,"MissileGoMech")
		TNT1 A 0 A_JumpIfInventory("ObeliskCharged",1,"MissileCharged")
		TNT1 A 0 A_FaceTarget
		TNT1 A 70 A_PlaySoundEx("obelisk/charge","Voice",0)
		TNT1 A 0 A_GiveInventory("ObeliskCharged",15)
		TNT1 A 0 A_MonsterRefire (0, "See")
		TNT1 A 0 A_PlaySoundEx("obelisk/fire","Weapon",0)
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ObbyFlareBlue")
		TNT1 A 0 A_CustomMissile("ObeliskShotBlueInfantry",12,0)
		TNT1 A 0 A_CustomRailgun(0,0,NONE,NONE,RGF_SILENT|RGF_FULLBRIGHT,1,72,NONE,0,0,4500,0,2,0,"NastyObeliskBlueTrail")
		TNT1 A 80 A_FaceTarget
		TNT1 A 0 A_TakeInventory("ObeliskCharged",15)
		goto See
	MissileCharged:
		TNT1 A 15
		TNT1 A 0 A_PlaySoundEx("obelisk/fire","Weapon",0)
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_CustomMissile("ObeliskShotBlueInfantry",12,0)
		TNT1 A 0 A_CustomRailgun(0,0,NONE,NONE,RGF_SILENT|RGF_FULLBRIGHT,1,72,NONE,0,0,4500,0,2,0,"NastyObeliskBlueTrail")
		TNT1 A 80 A_FaceTarget
		TNT1 A 0 A_TakeInventory("ObeliskCharged",15)
		goto See
	MissileGoMech:
		TNT1 A 0 A_JumpIfInventory("ObeliskCharged",1,"MissileChargedMech")
		TNT1 A 0 A_FaceTarget
		TNT1 A 80 A_PlaySoundEx("obelisk/charge","Voice",0)
		TNT1 A 0 A_GiveInventory("ObeliskCharged",15)
		TNT1 A 0 A_MonsterRefire (0, "See")
		TNT1 A 0 A_PlaySoundEx("obelisk/fire","Weapon",0)
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_SpawnItemEx("ObbyFlareBlue")
		TNT1 A 0 A_CustomMissile("ObeliskShotBlue",12,0)
		TNT1 A 0 A_CustomRailgun(0,0,NONE,NONE,RGF_SILENT|RGF_FULLBRIGHT,1,72,NONE,0,0,4500,0,2,0,"NastyObeliskBlueTrail")
		TNT1 A 70 A_FaceTarget
		TNT1 A 0 A_TakeInventory("ObeliskCharged",15)
		goto See
	MissileChargedMech:
		TNT1 A 15
		TNT1 A 0 A_PlaySoundEx("obelisk/fire","Weapon",0)
		TNT1 A 0 A_FaceTarget
		TNT1 A 0 A_CustomMissile("ObeliskShotBlue",12,0)
		TNT1 A 0 A_CustomRailgun(0,0,NONE,NONE,RGF_SILENT|RGF_FULLBRIGHT,1,72,NONE,0,0,4500,0,2,0,"NastyObeliskBlueTrail")
		TNT1 A 70 A_FaceTarget
		TNT1 A 0 A_TakeInventory("ObeliskCharged",15)
		goto See
	Death:	
		TNT1 A 5
		stop
	}
}

Actor ObbyFlare {
	RenderStyle Add
	+NOINTERACTION
	+CLIENTSIDEONLY
	Scale 2.0
	States {
	Spawn:
		CACH B 8 BRIGHT
		CACH B 1 BRIGHT A_Fadeout(0.05)
		Wait
	}
}

Actor ObbyFlareBlue : ObbyFlare {
	States {
	Spawn:
		PPCX A 8 BRIGHT
		PPCX A 1 BRIGHT A_Fadeout(0.05)
		Wait
	}
}

actor ObeliskCharged : Inventory {
	inventory.maxamount 15
}

actor ObeliskShotRed : FastProjectile {
	PROJECTILE
	DONTHURTSHOOTER
	-RANDOMIZE
	+NOEXTREMEDEATH
	+THRUGHOST
	Radius 13
	Height 8
	Speed 2000
	Damage (250)
	DamageType "Explosion"
	Translation "192:207=228:246"
	states {
	Spawn:
		TNT1 A -1
		stop
	Death:
		TNT1 A 0 A_SpawnItemEx ("PlasmaFlameCluster", 0, 0, 0, 0, 0, 0, 0, SXF_TRANSFERTRANSLATION)
		TNT1 A 3 bright A_Explode (250, 256, 0)
		stop
	}
}

actor ObeliskShotRedInfantry : ObeliskShotRed {
	Damage (40)
	DamageType "Superweapon"
	States {
	Spawn:
		TNT1 A -1
		stop
	Death:
		TNT1 A 0 A_SpawnItemEx ("PlasmaFlameCluster", 0, 0, 0, 0, 0, 0, 0, SXF_TRANSFERTRANSLATION)
		TNT1 A 3 bright A_Explode (50, 256, 0)
		stop
	}
}

actor ObeliskShotBlue : ObeliskShotRed {
	Translation "0:0=0:0"
}

actor ObeliskShotBlueInfantry : ObeliskShotRedInfantry {
	Translation "0:0=0:0"
}

// ------------------------
// Obelisk decorations
actor ObeliskVoltageDecorSpawner 29010 {
	//$Category Effects
	tag "Obelisk voltage spawner (square)"
	+NOINTERACTION
	+NOBLOCKMAP
	+SHOOTABLE
	health 999999
	states {
	Spawn:
		TNT1 A 0
		TNT1 A 60 A_SpawnItemEx ("ObeliskVoltageDecor")
		loop
	Death:
		TNT1 A 0
		stop
	}
}

actor ObeliskVoltageDecor {
	+NOINTERACTION
	+CLIENTSIDEONLY
	+NOBLOCKMAP
	reactiontime 35
	states {
	Spawn:
		TNT1 AAAAAA 1 A_SpawnItemEx ("ObeliskVoltageDecorFX", random (-96,96), random (-96,96), -224, 0, 0, 25)
		TNT1 A 0 A_Countdown
		loop
	Death:
		TNT1 A 0
		stop
	}
}

actor ObeliskVoltageDecorFX {
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	radius 1
	height 1
	renderstyle add
	alpha 1.0
	scale 0.75
	states {
	Spawn:
		VOLX ABCDEFEDCB 2 BRIGHT A_FadeOut(0.1)
		stop
	}
}

actor ObeliskVoltageDecorSpawnerRound 29013 {
	//$Category Effects
	tag "Obelisk voltage spawner (round)"
	+NOINTERACTION
	+NOBLOCKMAP
	+SHOOTABLE
	health 999999
	states {
	Spawn:
		TNT1 A 0
		TNT1 A 60 A_SpawnItemEx ("ObeliskVoltageDecorRound")
		loop
	Death:
		TNT1 A 0
		stop
	}
}

actor ObeliskVoltageDecorRound {
	+NOINTERACTION
	+CLIENTSIDEONLY
	+NOBLOCKMAP
	reactiontime 14
	states {
	Spawn:
		TNT1 AAAAA 1 A_SpawnItemEx ("ObeliskVoltageDecorFX", random (0, 160), 0, -224, 0, 0, 25, random (0, 360))
		TNT1 A 0 A_Countdown
		loop
	Death:
		TNT1 A 0
		stop
	}
}

ACTOR NastyObeliskTrail
{
Scale 0.16
Alpha 0.85
RenderStyle Add
+CLIENTSIDEONLY
+NOBLOCKMAP
+DONTSPLASH
+NOCLIP
+NOINTERACTION
+THRUACTORS
States
{
Spawn:
	HSPG A 3 Bright
	Stop
	}
}

ACTOR NastyObeliskRedTrail : NastyObeliskTrail
{
States
{
Spawn:
	HSPO A 3 Bright
	Stop
	}
}

ACTOR NastyObeliskBlueTrail : NastyObeliskTrail
{
States
{
Spawn:
	HSPB A 3 Bright
	Stop
	}
}
