class Quadcannon : SquareWeapon
{
	Default
	{
		Weapon.SelectionOrder 200;
		Weapon.AmmoGive1 8;
		Weapon.AmmoUse1 1;
		Weapon.AmmoUse2 1;
		Weapon.AmmoType1 "ShotboltAmmo";
		Weapon.AmmoType2 "QuadCheck";
		+WEAPON.AMMO_CHECKBOTH;
		AttackSound "weapons/quadfire";
		Tag "$TAG_QUADCANNON";
		Inventory.PickupMessage "$GOTQUADCANNON";
		Obituary "$OB_QUADCANNON";
		Decal 'PaintSplat_Yellow';
	}
	States
	{
	Spawn:
		QDCN A -1;
		Stop;
	Ready:
		QUAD A 0 A_JumpIfInventory("ShotboltAmmo",1,1);
		Goto Ready+2;
		QUAD A 0 A_JumpIfInventory("QuadCheck",1,1);
		Goto Reload;
		QUAD A 0 A_JumpIfInventory("QuadCheck",0,2);
		QUAD A 0 A_JumpIfInventory("ShotboltAmmo",1,2);
		QUAD A 1 A_WeaponReady();
		Loop;
		QUAD A 1 A_WeaponReady(WRF_ALLOWRELOAD);
		Loop;
	Deselect:
		QUAD A 1 A_Lower();
		QUAD A 0 A_Lower();
		Loop;
	Select:
		QUAD A 1 A_Raise();
		QUAD A 0 A_Raise();
		Loop;
	ResetSprite:
		QUAD A 0;
		Goto Reraise;
	Fire:
		QUAD A 0 A_JumpIfInventory("ShotboltAmmo",1,2);
		QUAD A 0 A_JumpIfInventory("QuadCheck",1,1);
		Goto Ready;
		QUAD A 0 A_TakeInventory("QuadCheck",1);
		QUAD A 0 A_GunFlash();
		QUAD A 4 Bright A_FireBullets(12, 8, 12, 5,"PaintPuff4",0);
		QUAD A 1 Offset(0,40);
		QUAD A 1 Offset(0,42);
		QUAD A 1 Offset(0,37);
		QUAD A 1 Offset(0,34);
		QUAD BCDA 1;
		SHTG A 0 A_JumpIfInventory("ShotboltAmmo",1,2);
		TNT1 A 0 A_CheckReload();
		Goto Ready;
		QUAD A 0 A_JumpIfInventory("QuadCheck",1,2);
		TNT1 A 0 A_CheckReload();
		Goto Reload;
		QUAD A 0 A_Refire();
		Goto Ready;
	Reload:
		QUAD E 0 A_JumpIfInventory("QuadCheck",0,"Ready");
		QUAD A 1 Offset(0,34);
		QUAD A 1 Offset(0,37);
		QUAD A 1 Offset(0,41);
		QUAD A 1 Offset(0,46);
		QUAD A 1 Offset(0,52);
		QUAD A 2 Offset(0,57) A_PlaySound("weapons/quadload");
		QUAD B 2 Offset(0,57);
		QUAD C 2 Offset(0,57) A_PlaySound("weapons/quadload");
		QUAD D 2 Offset(0,57);
		QUAD A 2 Offset(0,57) A_PlaySound("weapons/quadload");
		QUAD B 2 Offset(0,57);
		QUAD C 2 Offset(0,57) A_PlaySound("weapons/quadload");
		QUAD D 2;
		QUAD A 2 A_PlaySound("weapons/quadopen", CHAN_WEAPON);
		QUAD A 1 Offset(0,52);
		QUAD A 1 Offset(0,46);
		QUAD A 1 Offset(0,41);
		QUAD A 1 Offset(0,37);
		QUAD A 1 Offset(0,34);
	ReloadLoop:
		QUAD E 0 A_JumpIfInventory("ShotboltAmmo",1,1);
		Goto ReloadDone;
		QUAD E 0 A_GiveInventory("QuadCheck",1);
		QUAD E 0 A_TakeInventory("ShotboltAmmo",1);
		QUAD E 0 A_JumpIfInventory("QuadCheck",0,"ReloadDone");
		Loop;
	ReloadDone:
		QUAD A 5;
		QUAD E 0 A_Refire();
		Goto Ready;
	Flash:
		QUAD E 0 A_AlertMonsters();
		QUAD E 0 A_Light1();
		QUAD EF 2 Bright;
		Goto LightDone;
	}
}

class QuadCheck : Ammo
{
	Default
	{
		Inventory.Amount 1;
		Inventory.MaxAmount 4;
	}
}
