// Orca
actor Orca : MechPlayer_Base {
	Radius 58
	Height 128
	Mass 1000
	health 1000
	player.maxhealth 1000
	Player.DisplayName "Orca"
	player.forwardmove 0.75
	player.sidemove 0.5
	player.soundclass "mech"
	Player.ViewHeight 64
	Player.AttackZOffset 0
	Player.MorphWeapon "OrcaWeapons"
	damagefactor "Falling", 4.0
	scale 0.5
	+NOSKIN
	+FLOATBOB
	+NOGRAVITY
	States {
	Spawn:
		ORCV A 0
		ORCV A 0 SetPlayerProperty (0, 1, 3)
		ORCV A 0 ACS_ExecuteAlways (SC_STEALTH, 0, STEALTH_FORCEOFF)
		ORCV A 0 ACS_Execute (315, 0)
		ORCV A 0 A_GiveInventory ("MechEjectButton", 1)
		ORCV I 0 A_GiveInventory ("IsMech", 1)
		ORCV A 35 A_PlaySound ("jumpjet/loop", 5, 1.0, 1)
		ORCV AAAA 35 
		ORCV A 35
		loop
	See:
		ORCV A 0 A_PlaySound ("orca/loop", 5, 1.0, 1)
		ORCV A 0 A_JumpIf (health < 300, "SeeDamaged")
		ORCV A 2 A_SpawnItemEx("MechStepDamageOrca", 32, 0, -8, 0, 0, 0, 0, 0, 0)
		ORCV A 0 A_SpawnItemEx("OrcaFlame",-38,-48,32,0.5*Random(-4,4),0,random(-2,-4),random(-6,6),128,0) 
		ORCV A 0 A_SpawnItemEx("OrcaFlame",-38,48,32,0.5*Random(-4,4),0,random(-2,-4),random(-6,6),128,0) 
		ORCV A 0 A_SpawnItemEx("OrcaSmokePuff",-38,-48,24,0.5*Random(-4,4),0,random(-1,-2),random(-1,1),128,0) 
		ORCV A 0 A_SpawnItemEx("OrcaSmokePuff",-38,48,24,0.5*Random(-4,4),0,random(-1,-2),random(-1,1),128,0) 
		ORCV A 0 A_JumpIf(WaterLevel >= 1, "Drown")
		goto See+1
	SeeDamaged:
		ORCV A 0 A_PlaySound ("orca/loop", 5, 1.0, 1)
		ORCV A 0 A_JumpIf (health >= 300, "See")
		ORCV A 2 A_SpawnItemEx("EjectedMechSmokePuff",random(-8,8),random(-8,8),random(64,96),0,0,3,0,0,0)
		ORCV A 0 A_SpawnItemEx("MechStepDamageOrca", 32, 0, -8, 0, 0, 0, 0, 0, 0)
		ORCV A 0 A_SpawnItemEx("OrcaFlame",-38,-48,32,0.5*Random(-4,4),0,random(-2,-4),random(-6,6),128,0) 
		ORCV A 0 A_SpawnItemEx("OrcaFlame",-38,48,32,0.5*Random(-4,4),0,random(-2,-4),random(-6,6),128,0) 
		ORCV AA 0 A_SpawnItemEx("OrcaSmokePuff",-38,-48,24,0.5*Random(-4,4),0,random(-1,-2),random(-1,1),128,0) 
		ORCV AA 0 A_SpawnItemEx("OrcaSmokePuff",-38,48,24,0.5*Random(-4,4),0,random(-1,-2),random(-1,1),128,0) 
		ORCV A 0 A_JumpIf(WaterLevel >= 1, "Drown")
		goto SeeDamaged+1
	Drown:
		TNT1 A 0 Thing_Damage(0,100,12)
		goto Spawn
	Death:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory("IsKamikaze", 1, "Death.IonExplosion")
		TNT1 A 0 A_JumpIfInventory("IsBombCrate", 1, "Death.BombExplosion")
	DeathGo:
		TNT1 A 0 A_StopSound (5)
		TNT1 A 0 A_StopSound (CHAN_WEAPON)
		TNT1 A 0 A_NoBlocking
		TNT1 A 5 A_PlaySoundEx ("weapons/rocklx","SoundSlot5")
		TNT1 K 0 A_SetTranslucent (0, 0.0)
		TNT1 Z 0 A_SpawnItemEx ("EjectedOrca", 0, 0, 0, 5, 0, 0, 0, SXF_NOCHECKPOSITION|SXF_SETMASTER) // [TT] Prevent team damage.
		DISR Z -1
		stop
	Death.IonExplosion:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory ("IsRed", 1, "Death.NukeExplosion")
		TNT1 A 0 A_SpawnItemEx("BlueStrikeKamikaze", 0, 0, 32)
		goto DeathGo
	Death.NukeExplosion:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx("NukeKamikaze", 0, 0, 32)
		goto DeathGo
	Death.BombExplosion:
		PLAY H 0
		PLAY N 0 A_SpawnItemEx("BombExplosion")
		goto DeathGo
	}
}

actor OrcaSwitch : PermanentPowerup {Powerup.Type "Orca"}
actor PowerOrca : AOWMorph {powermorph.playerclass "Orca"}

actor OrcaWeapons : AOWWeapon {
	Weapon.SelectionOrder 1
	Weapon.AmmoUse 1
	Weapon.AmmoGive 600
	Weapon.AmmoType "Orca-MinigunAmmo"
	Weapon.AmmoUse2 1
	Weapon.AmmoGive2 60
	Weapon.AmmoType2 "Orca-RocketAmmo"
	obituary "$OB_ORCA" // "%o was pinned down by %k's Orca."
	+WEAPON.CHEATNOTWEAPON
	+WEAPON.DONTBOB
	states {
	Ready:
		MHUD A 1 A_WeaponReady
		wait
	Deselect:
		MHUD A 0 A_JumpIfHealthLower(1,1)
		goto Ready
		MHUD CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 0 A_Lower
		TNT1 A 1 A_Lower
		wait
	Select:
		MHUD C 0
		MHUD CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 0 A_Raise
		TNT1 A 1 A_Raise
		wait
	Fire:
		MHUD B 0 A_PlayWeaponSound("orca/fire")
		MHUD B 0 A_GunFlash
		MHUD B 0 A_FireCustomMissile ("OrcaFlash", 0, 0, 0, -32)
		MHUD B 3 BRIGHT A_FireBullets (2.2, 2.2, -1, 7, "RiflePuff", 1, 3000)
		MHUD A 2 A_Refire
		Goto Ready
	AltFire:
		MHUD B 0 A_PlayWeaponSound("orca/fire2")
		MHUD B 0 A_GunFlash
		MHUD B 0 A_JumpIfInventory ("GrenadeSwitch", 1, "AltFire2")
		MHUD B 0 A_FireCustomMissile("OrcaFireFlame",0,0,-32,-16)
		MHUD B 0 A_JumpIfInventory("IsBlue", 1, "AltFireBlue")
		MHUD B 12 BRIGHT A_FireCustomMissile("OrcaRocket",0,1,-32,-16)
		MHUD A 12 BRIGHT A_GiveInventory("GrenadeSwitch",1)
		MHUD A 2 A_Refire
		Goto Ready
	AltFireBlue:
		TNT1 A 0
		MHUD B 12 Bright A_FireCustomMissile("OrcaRocketBlue",0,1,-32,-16)
		Goto AltFire+6
	AltFire2:
		MHUD B 0 A_FireCustomMissile ("OrcaFireFlame",0,0,32,-16)
		MHUD B 0 A_JumpIfInventory("IsBlue", 1, "AltFire2Blue")
		MHUD B 12 BRIGHT A_FireCustomMissile ("OrcaRocket",0,1,32,-16)
		MHUD A 12 BRIGHT A_TakeInventory ("GrenadeSwitch",1)
		MHUD A 2 A_Refire
		Goto Ready
	AltFire2Blue:
		MHUD B 12 BRIGHT A_FireCustomMissile ("OrcaRocketBlue",0,1,32,-16)
		Goto AltFire2+3
	Flash:
		TNT1 A 1 Bright A_Light2
		TNT1 A 2 Bright A_Light1
		Goto LightDone
	Spawn:
		TNT1 A 0 
		stop
	}
}

actor Orca-RocketAmmo : Ammo {
	inventory.amount 4
	inventory.maxamount 60
	ammo.backpackamount 4
	ammo.backpackmaxamount 60
}

actor Orca-MinigunAmmo : Ammo {
	inventory.amount 50
	inventory.maxamount 600
	ammo.backpackamount 50
	ammo.backpackmaxamount 600
}

actor OrcaRocket {
	PROJECTILE
	-RANDOMIZE
	+ROCKETTRAIL
	Radius 11
	Height 8
	obituary "$OB_ORCA"
	Speed 40
	Damage (60)
	DeathSound "weapons/rocklx"
	DamageType "Explosion"
	states {
	Spawn:
		MISR A 2 bright
		MISR A -1 bright A_PlaySoundEx("ambient/rocket","Body",1,-1)
		loop
	Death:
		TNT1 A 0 A_PlaySoundEx("blanksnd","Body",0)
		TNT1 A 0 A_Explode (80, 128)
		TNT1 A 0 A_SpawnItemEx("FlameDecay", random(-16,16), random(-16,16), 4, 0, 0, 0, 0, 0, 160)
		TNT1 A 5 A_SpawnItemEx("ExplosionMain")
		stop
	}
}

Actor OrcaRocketBlue : OrcaRocket
{
	States
	{
		Spawn:
		MISB A 2 bright
		MISB A -1 bright A_PlaySoundEx("ambient/rocket","Body",1,-1)
		loop
	}
}

actor OrcaFlame {
	PROJECTILE
	+NOINTERACTION
	+CLIENTSIDEONLY
	radius 13
	height 8
	speed 20
	damage 0
	renderstyle Add
	alpha 1.0
	scale 0.6
	states {
	Spawn:
		TNT1 A 0
		FLMX AABCDEFGHIJK 1 bright A_Fadeout(0.1)
		stop
	}
}

actor OrcaFireFlame : OrcaFlame {
	scale 0.8
	states {
	Spawn:
		TNT1 AA 0 A_SpawnItemEx("OrcaSmokePuff", 0, 0, 0, 0, 0, 1, 0, 128, 0)
		Goto Super::Spawn
	}
}

actor OrcaFlash : OrcaFlame {
	scale 0.66
	states {
	Spawn:
		TNT1 A 0
		FLMX ABCD 1 bright A_Fadeout(0.25)
		stop
	}
}

actor EjectedOrcaSpawner {
	+NOINTERACTION
	+SERVERSIDEONLY
	states {
	Spawn:
		TNT1 AA 0 A_SpawnItemEx ("EjectedOrca", 0, 0, 0, 4, 0, 0, 0, SXF_SETMASTER) // [TT] Prevent team damage.
		stop
	}
}

actor EjectedOrcaSpawnerItem : CustomInventory
{
	+ALWAYSPICKUP
	Inventory.Pickupmessage "Orca spawn?!?!?"
	Inventory.MaxAmount 1
	states {
	Spawn:
		TNT1 A -1
		stop
	Pickup:
		TNT1 AA 0
		TNT1 A 0 A_SpawnItemEx ("EjectedOrca", 0, 0, 0, 5, 0, 0, 0, SXF_NOCHECKPOSITION|SXF_SETMASTER) // [TT] Prevent team damage.
	}
}

actor EjectedOrca {
	PROJECTILE
	-NOGRAVITY
	+NOCLIP
	radius 58
	height 128
	damage (300)
	scale 0.5
	speed 10
	obituary "%o was hit by %k's Orca."
	translation "112:127=[255,255,255]:[0,0,0]"
	gravity 0.2
	damagetype "Monster"
	States {
	Spawn:
		ORCV A 0
		ORCV A 0 A_NoBlocking
		ORCV A 0 A_PlaySound ("weapons/rocklx", 5)
		ORCV A 10 A_SpawnItemEx ("ExplosionMain")
		ORCV A 0 A_PlaySound ("weapons/rocklx", 6)
		ORCV A 10 A_SpawnItemEx ("ExplosionMain")
		ORCV A 0 A_ChangeFlag("NOCLIP",0)
		goto Spawn+3
	Death:
		ORCV A 0 A_StopSound (5)
		ORCV A 0 A_StopSound (6)
		ORCV A 0 a_jumpif(acs_executewithresult(698, 0, 0, 0, 0), "Death.NoTeamKill")
		ORCV A 3 
		ORCV A 0 A_SpawnItemEx ("MechExplosionSmall", 0,0,0,0,0,0,0, SXF_NOCHECKPOSITION|SXF_SETMASTER) // [TT] Prevent team damage.
		stop
	Death.NoTeamKill:
		ORCV A 1 A_FadeOut (0.05)
		wait
	}
}

actor OrcaAmmoPackage : CustomInventory {
	+AUTOACTIVATE
	inventory.maxamount 0
	states {
	Pickup:
		TNT1 A 0 A_GiveInventory ("Orca-MinigunAmmo", 600)
		TNT1 A 0 A_GiveInventory ("Orca-RocketAmmo", 60)
		stop
	}
}
