//--------------------------------------------------------------------------
//
// McCulloch 2.0 'Eager Beaver' Chainsaw
//
//--------------------------------------------------------------------------

ACTOR ChainsawIsOff : Inventory { Inventory.MaxAmount 1 }
ACTOR IdChopper : LowWeapon replaces Chainsaw
{
	+WEAPON.AMMO_OPTIONAL
	+WEAPON.MELEEWEAPON
	Weapon.SlotNumber 1
	Weapon.Kickback 0
	Weapon.AmmoType1 "Fuel"
	Weapon.AmmoUse 1
	Weapon.AmmoGive 50
	Weapon.UpSound "weapons/upwp2"
	Inventory.PickupMessage "You got the Chainsaw! Find some meat!"
	Scale 0.75
	Tag "Chainsaw"
	States
	{
	Select:
		SAWI B 1 Offset (64, 0) A_Raise
		TNT1 A 0 A_Raise
		SAWI B 1 Offset (56, 0) A_Raise
		TNT1 A 0 A_Raise
		SAWI B 1 Offset (48, 0) A_Raise
		TNT1 A 0 A_Raise
		SAWI B 1 Offset (40, 0) A_Raise
		TNT1 A 0 A_Raise
		SAWI B 1 Offset (32, 0) A_Raise
		TNT1 A 0 A_Raise
		SAWI B 1 Offset (24, 0) A_Raise
		TNT1 A 0 A_Raise
		SAWI B 1 Offset (16, 0) A_Raise
		TNT1 A 0 A_Raise
		SAWI B 1 Offset (8, 0) A_Raise
		TNT1 A 0 A_Raise
		SAWI B 1 Offset (0, 0) A_Raise
		TNT1 A 0 A_Raise
		Wait
	Ready:
		SAWI A 1 A_WeaponReady
		TNT1 A 0 A_GiveInventory("ChainsawIsOff",1)
		TNT1 A 0 A_JumpifInventory("IsKicking",1,"Kick")
		TNT1 A 0 A_JumpifInventory("ThrowTNT",1,"TNT")
		Loop
// Turning On States.
	TurnOn:
		TNT1 A 0 A_JumpIfnoAmmo("DryFire")
		TNT1 A 0 A_Jump(100,"TugFail")
		TNT1 A 0 A_PlaySound("weapons/Sawzip",6)
		SAWZ ABCD 2 A_WeaponReady(WRF_NoFire)
		SAWZ D 5 Radius_Quake (2, 2, 0, 1, 0)
		SAWZ DCBA 3 A_WeaponReady(WRF_NoFire)
		TNT1 A 0 A_AlertMonsters
		TNT1 A 0 A_TakeInventory("ChainsawIsOff",1)
		Goto TrueReady
	TugFail:
		TNT1 A 0 A_JumpIfnoAmmo("DryFire")
		TNT1 A 0 A_PlaySound("weapons/Sawtug",6)
		SAWZ AAAABBBCCDD 1 A_WeaponReady(WRF_NoFire)
		SAWZ DCCBBBAAA 1 A_WeaponReady(WRF_NoFire)
		SAWZ A 8 A_WeaponReady(WRF_NoFire)
		TNT1 A 0 A_Jump(256,"TurnOn")
		Wait
	TrueReady:
		TNT1 A 0 A_PlaySound("Weapons/Sawloop", 7, 1, 1)
		TNT1 AA 0 A_FireCustomMissile("GunSmokeSpawner",0,0,13,-14,0,0)
		SAWI ABCD 1 A_WeaponReady
		Loop
	Deselect:
		TNT1 A 0 A_JumpIfInventory("ChainsawIsOff",1,"OffLower")
		TNT1 A 0 A_StopSound(7)
		TNT1 A 0 A_PlaySound("weapons/sawoff")
		TNT1 A 0 A_PlaySound("weapons/swap",6)
		SAWI B 1 Offset (8, 0) A_Lower
		TNT1 A 0 A_Lower
		SAWI B 1 Offset (16, 0) A_Lower
		TNT1 A 0 A_Lower
		SAWI B 1 Offset (24, 0) A_Lower
		TNT1 A 0 A_Lower
		SAWI B 1 Offset (32, 0) A_Lower
		TNT1 A 0 A_Lower
		SAWI B 1 Offset (40, 0) A_Lower
		TNT1 A 0 A_Lower
		SAWI B 1 Offset (48, 0) A_Lower
		TNT1 A 0 A_Lower
		SAWI B 1 Offset (56, 0) A_Lower
		TNT1 A 0 A_Lower
		SAWI B 1 Offset (64, 0) A_Lower
		TNT1 A 1 A_Lower
		Goto TrueLower
	OffLower:
		TNT1 A 0 A_StopSound(7)
		TNT1 A 0 A_PlaySound("weapons/swap",6)
		SAWI B 1 Offset (8, 0) A_Lower
		TNT1 A 0 A_Lower
		SAWI B 1 Offset (16, 0) A_Lower
		TNT1 A 0 A_Lower
		SAWI B 1 Offset (24, 0) A_Lower
		TNT1 A 0 A_Lower
		SAWI B 1 Offset (32, 0) A_Lower
		TNT1 A 0 A_Lower
		SAWI B 1 Offset (40, 0) A_Lower
		TNT1 A 0 A_Lower
		SAWI B 1 Offset (48, 0) A_Lower
		TNT1 A 0 A_Lower
		SAWI B 1 Offset (56, 0) A_Lower
		TNT1 A 0 A_Lower
		SAWI B 1 Offset (64, 0) A_Lower
		TNT1 A 1 A_Lower
		Goto TrueLower
	TrueLower:
		ECSG A 1 A_Lower
		Loop
	Fire:
		SAWI A 1 A_JumpIfInventory("ChainsawIsOff",1,"TurnOn")
		SAWF A 3
	RealFire:
		TNT1 A 0 A_JumpIfnoAmmo("DryFire")
		TNT1 A 0 A_JumpIfInventory("FuelCounter",50,"FuelTrade")
		SAWF BC 1 A_CustomPunch(2,0,0,"SawPuff")
		TNT1 A 0 A_PlaySound("Weapons/Sawing", 7, 1, 1)
		TNT1 A 0 Radius_Quake (1, 2, 0, 1, 0)
		TNT1 A 0 A_GiveInventory("FuelCounter",1)
		TNT1 A 0 A_ReFire("RealFire")
		TNT1 A 0 A_PlaySound("Weapons/Sawnot", 1)
		SAWI A 1 A_StopSound(7)
		Goto TrueReady
	AltFire:
		TNT1 A 0 A_JumpIfInventory("Fuel",1,"AlternateSaw")
		Goto DryFire
	AlternateSaw:
		TNT1 A 0 A_JumpIfnoAmmo("DryFire")
		SAWI A 1 A_JumpIfInventory("ChainsawIsOff",1,"TurnOn")
		TNT1 A 0 A_JumpIfInventory("FuelCounter",50,"AltFuelTrade")
		SAWI A 2 offset(-20,32)
		SAWI A 1 offset(-40,32)
		SAWI A 2 offset(-60,32)
		TNT1 A 0 A_FireCustomMissile("GunSmokeSpawner",0,0,-12,0)
		SAWF D 1
		TNT1 A 0 A_PlaySound("Weapons/Sawalt")
		TNT1 A 0 A_AlertMonsters
		TNT1 A 0 A_Recoil(-6)
		TNT1 A 0 A_FireCustomMissile("GunSmokeSpawner",0,0,-6,0)
		SAWF DEE 1
		TNT1 A 0 A_Saw("","",20,"SawPuff", 6)
		TNT1 A 0 A_FireCustomMissile("ChainsawMissile",0,0,0,0)
		SAWF F 1 A_GiveInventory("FuelCounter",5)
		SAWF G 2
		TNT1 A 4
		SAWI A 1 Offset(67, 100)
		SAWI B 1 Offset(54, 81)
		SAWI C 1 Offset(32, 69)
		SAWI B 1 Offset(22, 58)
		SAWI A 1 Offset(10, 47)
		SAWI B 1 Offset(7, 39)
		SAWI C 1 Offset(2, 34)
		Goto TrueReady
	FuelTrade:
		TNT1 A 0 A_TakeInventory("Fuel",10)
		TNT1 A 0 A_TakeInventory("FuelCounter",50)
		Goto RealFire
	AltFuelTrade:
		TNT1 A 0 A_TakeInventory("Fuel",10)
		TNT1 A 0 A_TakeInventory("FuelCounter",50)
		Goto TrueReady
	Dryfire:
		TNT1 A 0 A_JumpIfInventory("Fuel", 1, "Ready")
		TNT1 A 0 A_StopSound (7)
		TNT1 A 0 A_PlaySound("weapons/Sawtug",6)
		SAWZ AABCC 1
		SAWZ D 3 Radius_Quake (2, 4, 0, 1, 0)
		SAWZ DDCCBBAA 1
		SAWI B 8
		SAWI B 2 A_WeaponReady
		Wait
	Spawn:
		SAWP A -1
		Stop
//  Kick Actions
	Kick:
		TNT1 A 0 A_JumpIf (momZ > 0, "AirKick")
		TNT1 A 0 A_JumpIf (momZ < 0, "AirKick")
		TNT1 A 0 A_JumpIfInventory("SuperBlow",1,"BerserkKick")
		KKHR A 1 Offset(0,32)
		KKHR BCDE 1
		KKHR FG 1 A_Recoil(-1)
		KKHR H 2 A_CustomPunch (5,0,0,"FightPuff3") 
		KKHR IHGFEDC 1 
		KKHR BA 1 A_Recoil(+1)
		Goto Ready
	AirKick:
		TNT1 A 0 A_JumpIfInventory("SuperBlow",1,"AirBerserkKick")
		FISG B 1
		FISG B 1 Offset(0,36)
		TNT1 A 0 Offset(-1,32)
		KI3K ABCDE 1
		KI3K F 3 A_CustomPunch (9,0,0,"FightPuff3") 
		KI3K GHIJK 2 
		Goto Ready
	BerserkKick:
		KKHR A 1 Offset(0,32)
		KKHR BCDE 1
		KKHR FG 1 A_Recoil(-1)
		KKHR H 2 A_CustomPunch (9,0,0,"FightPuff3") 
		KKHR IHGFEDC 1 
		KKHR BA 1 A_Recoil(+1)
		Goto Ready
	AirBerserkKick:
		FISG B 1
		FISG B 1 Offset(0,36)
		TNT1 A 0 Offset(-1,32)
		KI3K ABCDE 1 A_Recoil(-2)
		KI3K F 3 A_CustomPunch (12,0,0,"FightPuff3") 
		KI3K GHIJK 2 
		Goto Ready
// TNT Actions
	TNT:
		TNT1 A 0 A_JumpIfInventory("TNTammo",1,1)
		Goto NoTNT
		TNT1 A 0 A_JumpIf(waterlevel>2,"YouCannot")
		TNT1 A 0 A_StopSound(1)
		TNT1 A 0 Offset(-20,32)
		TAND ABC 2
		TAND D 2 A_PlaySound ("weapons/tnttr")
		TNT1 A 0 A_FireCustomMissile("STNT",0,0,0,0)
		TNT1 A 0 A_TakeInventory("TNTammo",1)
		TAND EDCBA 2
		TNT1 A 0 A_JumpIfInventory("TNTammo",0,"NoTNT")
		SAWI B 1 Offset(67, 100)
		SAWI B 1 Offset(54, 81)
		SAWI B 1 Offset(32, 69)
		SAWI B 1 Offset(22, 58)
		SAWI B 1 Offset(10, 47)
		SAWI B 1 Offset(7, 39)
		SAWI B 1 Offset(2, 34)
		Goto Ready
	YouCannot:
		TNT1 A 0 A_Print("You Are Underwater!",8)
		Goto Ready
	NoTNT:
		TNT1 A 0 A_Print("No dynamites left.")
		Goto Ready
	}
}


ACTOR FuelCounter : Inventory
{
	Inventory.MaxAmount 50
	+IGNORESKILL
}

ACTOR Sawpuff : BulletPuff
{	
	+NOBLOCKMAP
	+NOGRAVITY
	+NOEXTREMEDEATH
	+FORCEXYBILLBOARD
	AttackSound "Weapons/Sawpuff"
	Renderstyle Add
	Scale 0.12
	Alpha 1.75
	States
	{
	Spawn:
	Death:
	XDeath:
	Crash:
		TNT1 A 0 A_Jump (64, 4) 
		TNT1 A 0 A_Jump (64, 4) 
		TNT1 A 0 A_Jump (64, 4) 
		TNT1 A 0 A_Jump (64, 4)
		BPUF A 1 BRIGHT
		TNT1 A 0 A_SpawnDebris("BulletSparks")
		TNT1 A 0 A_PlaySound("Weapons/Sawpuff")
		BPUF B 1 BRIGHT
		TNT1 A 0 A_SpawnDebris("BulletSparks")
		TNT1 A 0 A_PlaySound("Weapons/Sawpuff")
		BPUF C 1 BRIGHT
		TNT1 A 0 A_SpawnDebris("BulletSparks")
		TNT1 A 0 A_PlaySound("Weapons/Sawpuff")
		BPUF D 1 BRIGHT
		TNT1 A 0 A_SpawnDebris("BulletSparks")
		TNT1 A 0 A_PlaySound("Weapons/Sawpuff")
		Stop
	}
}

ACTOR ChainsawMissile : FastProjectile
{
	Radius 10
	Height 6
	DamageType Cut
	Projectile 
	Damage 10
	Speed 40
	SeeSound ""
	DeathSound ""
	Decal ""
	+NOEXTREMEDEATH
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 1
		Stop
	XDeath:
		TNT1 A 1
		Stop
	Death:
		TNT1 A 1
		Stop
	Crash:
		TNT1 A 1
		Stop
	}
}