/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Artillery Cannon (previously named "Mass Driver")
 *
 * The Artillery Cannon is a shoulder-carried howitzer that fires
 * high-powered explosive shells. Alt-Fire shoots heavier shells geared
 * against mechs - these shells are the second most effective infantry-held
 * anti-mech weapon, only Plasma Cannon surpasses this.
 */

actor ArtilleryCannon : AOWWeapon 21085 {
	+WEAPON.NOAUTOFIRE
	Obituary "$OB_ARTILLERYCANNON" // "%o was demolished by %k's artillery cannon."
	Inventory.PickupMessage "You got the artillery cannon!"
	Weapon.AmmoType "ArtilleryShellAmmo"
	Weapon.AmmoUse 1
	Weapon.AmmoGive 5
	Weapon.AmmoType2 "ArtilleryShellAmmo"
	Weapon.AmmoUse2 1
	Weapon.PreferredSkin "MarineSRockets"
	Weapon.SelectionOrder 11
	Scale 0.6
	//$Category Weapons
	Tag "Artillery Cannon"
	
	States {
	Select:
		TNT1 A 0 A_JumpIfInventory("IsBlue",1,"SelectBlue")
		MASR A 1 A_Raise
		wait
	SelectBlue:
		MASB A 1 A_Raise
		wait	
	Deselect:
		TNT1 A 0 A_JumpIfInventory("IsBlue",1,"DeselectBlue")
		MASR A 1 A_Lower
		wait
	DeselectBlue:
		MASB A 1 A_Lower
		wait
	Ready:
		TNT1 A 0 A_JumpIfInventory("IsBlue",1,"ReadyBlue")
		MASR A 1 A_WeaponReady
		wait
	ReadyBlue:
		MASB A 1 A_WeaponReady
		wait
	Fire:
		TNT1 A 0 A_JumpIfInventory ("IsInSpawnRoom", 1, "Ready")
		TNT1 A 0 A_JumpIfInventory ("InMenu", 1, "Ready")
		TNT1 A 0 A_JumpIfInventory ("IsBlue", 1, "Fire.Blue")
		MASR A 1 A_PlayWeaponSound ("artillery/fire")
		MASR B 1 A_GunFlash
		MASR B 2 BRIGHT A_FireCustomMissile ("ArtilleryShell", 0, 1, 8)
		MASR B 0 Radius_Quake(5,12,0,1,0)
		goto Fire.End
	Fire.Blue:
		MASB A 1 A_PlayWeaponSound ("artillery/fire")
		MASB B 1 A_GunFlash
		MASB B 2 BRIGHT A_FireCustomMissile ("ArtilleryShell", 0, 1, 8)
		MASB B 0 Radius_Quake(5,12,0,1,0)
		goto Fire.EndBlue
	Fire.End:
		MASR C 1 bright offset (3, 35) A_Recoil (5)
		MASR D 1 bright offset (6, 38) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASR E 1 bright offset (9, 41)
		MASR A 1 offset (12, 44) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASR A 1 offset (15, 47)
		MASR A 1 offset (18, 50) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASR A 1 offset (15, 47)
		MASR A 1 offset (12, 44) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASR A 1 offset (9, 41)
		MASR A 1 offset (6, 38) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASR A 1 offset (3, 35)
		MASR A 1 offset (0, 32) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASR A 1 offset (0, 32)
		MASR A 32 A_JumpIfInventory("IsArtillerySoldier", 1, "Fire.EndFast")
		MASR A 18 A_PlaySound ("artillery/reload", 5)
		MASR A 0 A_SpawnItemEx("ArtilleryCasing",3,15,29,random(-2,-4),random(2,3),random(0,-1),random(45,60),128)
		MASR A 0 A_ReFire
		goto Ready
	Fire.EndBlue:
		MASB C 1 bright offset (3, 35) A_Recoil (5)
		MASB D 1 bright offset (6, 38) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASB E 1 bright offset (9, 41)
		MASB A 1 offset (12, 44) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASB A 1 offset (15, 47)
		MASB A 1 offset (18, 50) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASB A 1 offset (15, 47)
		MASB A 1 offset (12, 44) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASB A 1 offset (9, 41)
		MASB A 1 offset (6, 38) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASB A 1 offset (3, 35)
		MASB A 1 offset (0, 32) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASB A 1 offset (0, 32)
		MASB A 32 A_JumpIfInventory ("IsArtillerySoldier", 1, "Fire.EndFastBlue")
		MASB A 18 A_PlaySound ("artillery/reload", 5)
		MASB A 0 A_SpawnItemEx("ArtilleryCasing",3,15,29,random(-2,-4),random(2,3),random(0,-1),random(45,60),128)
		MASB A 0 A_ReFire
		goto Ready
	Fire.EndFast:
		MASR A 21
		MASR A 12 A_PlaySound ("artillery/reload", 5)
		MASR A 0 A_SpawnItemEx("ArtilleryCasing",3,15,29,random(-2,-4),random(2,3),random(0,-1),random(45,60),128)
		MASR A 0 A_ReFire
		goto Ready
	Fire.EndFastBlue:
		MASB A 21
		MASB A 12 A_PlaySound ("artillery/reload", 5)
		MASB A 0 A_SpawnItemEx("ArtilleryCasing",3,15,29,random(-2,-4),random(2,3),random(0,-1),random(45,60),128)
		MASB A 0 A_ReFire
		goto Ready
	AltFire:
		TNT1 A 0 A_JumpIfInventory ("IsInSpawnRoom", 1, "Ready")
		TNT1 A 0 A_JumpIfInventory ("InMenu", 1, "Ready")
		TNT1 A 0 A_JumpIfInventory ("IsBlue", 1, "AltFire.Blue")
		MASR B 1 A_PlayWeaponSound ("artillery/fire1")
		MASR B 0 A_GunFlash
		MASR B 1 BRIGHT A_FireCustomMissile ("ArtilleryShell80mm", 0, 1, 8)
		MASR B 0 Radius_Quake(6,15,0,1,0)
		goto AltFire.End
	AltFire.Blue:
		MASB B 1 A_PlayWeaponSound ("artillery/fire1")
		MASB B 0 A_GunFlash
		MASB B 1 BRIGHT A_FireCustomMissile ("ArtilleryShell80mm", 0, 1, 8)
		MASB B 0 Radius_Quake(6,15,0,1,0)
		goto AltFire.EndBlue
	AltFire.End:
		MASR C 1 bright offset (4, 36) A_Recoil (7)
		MASR D 1 bright offset (8, 40) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASR E 1 bright offset (12, 44)
		MASR A 1 offset (16, 48) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASR A 1 offset (20, 52)
		MASR A 1 offset (24, 56) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASR A 1 offset (20, 52)
		MASR A 1 offset (16, 48) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASR A 1 offset (12, 44)
		MASR A 1 offset (8, 40) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASR A 1 offset (4, 36)
		MASR A 3 offset (0, 32) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASR A 51 A_JumpIfInventory("IsArtillerySoldier", 1, "AltFire.EndFast")
		MASR A 18 A_PlaySound ("artillery/reload", 5)
		MASR A 0 A_SpawnItemEx("ArtilleryCasing80mm",3,15,29,random(-2,-4),random(2,3),random(0,-1),random(45,60),128)
		MASR A 0 A_ReFire
		Goto Ready
	AltFire.EndBlue:
		MASB C 1 bright offset (4, 36) A_Recoil (7)
		MASB D 1 bright offset (8, 40) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASB E 1 bright offset (12, 44)
		MASB A 1 offset (16, 48) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASB A 1 offset (20, 52)
		MASB A 1 offset (24, 56) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASB A 1 offset (20, 52)
		MASB A 1 offset (16, 48) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASB A 1 offset (12, 44)
		MASB A 1 offset (8, 40) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASB A 1 offset (4, 36)
		MASB A 3 offset (0, 32) A_FireCustomMissile ("OverheatSmokeSpawner", 0, 0, 11, -2)
		MASB A 51 A_JumpIfInventory("IsArtillerySoldier", 1, "AltFire.EndFastBlue")
		MASB A 18 A_PlaySound ("artillery/reload", 5)
		MASB A 0 A_SpawnItemEx("ArtilleryCasing80mm",3,15,29,random(-2,-4),random(2,3),random(0,-1),random(45,60),128)
		MASB A 0 A_ReFire
		goto Ready
	AltFire.EndFast:
		MASR A 27
		MASR A 18 A_PlaySound ("artillery/reload", 5)
		MASR A 0 A_SpawnItemEx("ArtilleryCasing80mm",3,15,29,random(-2,-4),random(2,3),random(0,-1),random(45,60),128)
		MASR A 0 A_ReFire
		goto Ready
	AltFire.EndFastBlue:
		MASB A 27
		MASB A 18 A_PlaySound ("artillery/reload", 5)
		MASB A 0 A_SpawnItemEx("ArtilleryCasing80mm",3,15,29,random(-2,-4),random(2,3),random(0,-1),random(45,60),128)
		MASB A 0 A_ReFire
		goto Ready
	Flash:
		TNT1 A 4 A_Light1
		TNT1 A 3 A_Light2
		goto LightDone
	Spawn:
		MASD X -1
		stop
	}
}

actor ArtilleryShell {
	PROJECTILE
	-RANDOMIZE
	-NOGRAVITY
	Radius 11
	Height 8
	Speed 75
	Damage (34)
	DamageType "MassDriver"
	DeathSound "artillery/explosion"
	Decal "Scorch"
	Scale 0.6
	Gravity 0.05
	Translation "112:127=197:213"
	Obituary "$OB_ARTILLERYCANNON"
	states {
	Spawn:
		SHRP A 0
		SHRP A 0 bright A_PlaySound ("ambient/shell", CHAN_BODY, 1.0, 1)
		SHRP AAAAA 1 bright A_SpawnItemEx ("PulseBallSmokePuff", -25)
		loop
	Death:
		TNT1 A 0 A_NoGravity
		TNT1 A 0 A_StopSound (CHAN_BODY)
		TNT1 A 0 A_SpawnItemEx ("FlameDecay", random(-32,32), random(-32,32), 4)
		TNT1 A 0 A_SpawnItemEx ("ExplosionMain")
		TNT1 A 0 A_SpawnItemEx ("HeavyMissileQuake")
		TNT1 A 1 A_Explode (80, 184, 1)
		TNT1 A 4 A_Explode (95, 256, 1)
		stop
	}
}

actor ArtilleryShell80mm : ArtilleryShell {
	Speed 50
	Damage (63)
	DamageType "AntiArmor"
	Scale 0.74
	Translation "1:31=128:140", "32:39=141:143"
	States {
	Death:
		TNT1 A 0 A_NoGravity
		TNT1 A 0 A_StopSound (CHAN_BODY)
		TNT1 A 0 A_SpawnItemEx ("FlameDecay", random(-32,32), random(-32,32), 4)
		TNT1 A 0 A_SpawnItemEx ("ExplosionMain")
		TNT1 A 0 A_SpawnItemEx ("HeavyMissileQuake")
		TNT1 A 1 A_Explode (100, 224, 1)
		TNT1 A 5 A_Explode (110, 324, 1)
		stop
	}
}