//------------------------------------------------------------
// Flamespitter ammo class
//------------------------------------------------------------
Actor FlameAmmo : Ammo
{
	+SERVERNETID
	Inventory.MaxAmount 100
}

//------------------------------------------------------------
// Flamespitter Alt-Fire cooldown class
//------------------------------------------------------------
Actor FlameAltCD : Ammo
{
	+SERVERNETID 
	Inventory.MaxAmount 210
}

//------------------------------------------------------------
// Flamespitter weapon class
//------------------------------------------------------------
ACTOR Flamespitter : LSWeaponBase
{
	// Vertical recoil constant.
	// Recoil resets before the next shot is fired, thus this is visual-only
	const float CARBINE_RECOIL = 0.4;

	// Properties
	Tag "Flamespitter"
	Weapon.AmmoType1 "FlameAmmo"
	Weapon.AmmoType2 "FlameAmmo"
	Weapon.AmmoUse1 1
	Weapon.AmmoUse2 10
	Weapon.SlotNumber 1
	Inventory.Icon "CARPA0"

	// States
	States
	{
	Spawn:
		FLMP A 1 bright A_SetAngle(angle + 1.0)
		loop
		
	Ready:
		TNT1 A 0 A_StopSound(CHAN_WEAPON)
		FLMR A 1 A_WeaponReady
		Loop
		
	Deselect:
		TNT1 A 0 A_ZoomFactor(1.0)
		TNT1 A 0 A_StopSound(CHAN_WEAPON)
		TNT1 AA 0 A_Lower
		FLMR A 1 A_Lower
		Loop
		
	Select:
		TNT1 AA 0 A_Raise
		FLMR A 1 A_Raise
		Loop
		
	Fire:
		TNT1 A 0 A_JumpIf(CallACS("CheckBotAltFire", 0) == 1, "AltFire")
		TNT1 A 0 A_JumpIf(CallACS("WeaponFireStart", 0) == 1, "FireSuccess")
		FLMR A 1 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY)
		Goto Ready
		
	FireSuccess:
		FLMR A 6 A_PlayWeaponSound("Flamespitter/FlameStart")
		TNT1 A 0 A_PlaySound("Flamespitter/FlameLoop", CHAN_WEAPON, 1.0, true)
		FLMF A 2
		Goto FireFlames
		
	FireFlames:
		TNT1 A 0 ACS_NamedExecuteAlways("OnWeaponFired", 0)
		FLMF BB 1 A_FireCustomMissile("FlamespitterProjectile", afrandom(-2.0, 2.0), true, 3.0, -0.5, 0, afrandom(-2.0, 2.0))
		FLMF CC 1 A_FireCustomMissile("FlamespitterProjectile", afrandom(-2.0, 2.0), true, 3.0, -0.5, 0, afrandom(-2.0, 2.0))
		TNT1 A 0 A_Refire("FireFlames")
		FLMF D 2 A_StopSound(CHAN_WEAPON)
		TNT1 A 0 A_PlayWeaponSound("Flamespitter/FlameStop")
		TNT1 A 0 ACS_NamedExecuteAlways("WeaponFinishFiring", 0)
		Goto Ready
		
	AltFire:
		TNT1 A 0 A_JumpIf(CallACS("WeaponAltFireStart", 0) == true, "AltFireSuccess")
		CARR A 1 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY)
		Goto Ready

	AltFireSuccess:
		TNT1 A 0 ACS_NamedExecuteAlways("WeaponAltFireCD", 0, 8)
		TNT1 A 0 A_SpawnItemEX("OrangeLightShoot", 0, 0, 0)
		TNT1 A 0 A_PlaySound("GrenadeLaunch", CHAN_WEAPON)
		TNT1 A 0 A_Recoil(4)
		TNT1 A 0 Bright A_FireCustomMissile("FlamespitterCanister", 0.0, true, 2.0, -1.0)
		FLMF EFGHIJKLLKJIHGFE 1
		TNT1 A 0 ACS_NamedExecuteAlways("WeaponFinishFiring", 0)
		Goto Ready
		
	AltFail:
		TNT1 A 0 ACS_NamedExecuteAlways("AltFireFail")
		FLMR A 1 A_WeaponReady(WRF_NOSECONDARY)
		Goto Ready
}

const float flame_slowscale = 0.7;
Actor FlamespitterProjectile
{
	Projectile
	Speed 40
	Radius 12
	Height 24
	Damage (3)
	Scale 0.25
	Renderstyle Add
	Alpha 0.3
	DamageType "FlamespitterFlames"
	Obituary "%k > \ciFlamespitter\c- > %o"
	Decal "Scorch"
	+BRIGHT
	+DONTSPLASH
	+RIPPER
	States
	{
		Spawn:
		OFLM A 4 nodelay A_SetScale(scalex + frandom(-0.05, 0.05), scaley + frandom(-0.05, 0.05))
		TNT1 A 0 A_SetScale(scalex + 0.1, scaley + 0.1)
		OFLM B 4 A_ChangeVelocity(velx * flame_slowscale, vely * flame_slowscale, velz * flame_slowscale, CVF_REPLACE)
		TNT1 A 0 A_SetScale(scalex + 0.1, scaley + 0.1)
		OFLM C 4 A_ChangeVelocity(velx * flame_slowscale, vely * flame_slowscale, velz * flame_slowscale, CVF_REPLACE)
		TNT1 A 0 A_SetScale(scalex + 0.1, scaley + 0.1)
		OFLM D 4 A_ChangeVelocity(velx * flame_slowscale, vely * flame_slowscale, velz * flame_slowscale, CVF_REPLACE)
		TNT1 A 0 A_SetScale(scalex + 0.1, scaley + 0.1)
		OFLM E 4 A_ChangeVelocity(velx * flame_slowscale, vely * flame_slowscale, velz * flame_slowscale, CVF_REPLACE)
		TNT1 A 0 A_SetScale(scalex + 0.1, scaley + 0.1)
		OFLM F 4 A_ChangeVelocity(velx * flame_slowscale, vely * flame_slowscale, velz * flame_slowscale, CVF_REPLACE)
		TNT1 A 0 A_SetScale(scalex + 0.1, scaley + 0.1)
		OFLM G 4 A_ChangeVelocity(velx * flame_slowscale, vely * flame_slowscale, velz * flame_slowscale, CVF_REPLACE)
		Goto Death
		Death:
		TNT1 A 1
		stop
	}
}

const int canister_range = 256;

Actor FlamespitterCanister
{
	Projectile
	Speed 48
	Radius 8
	Height 16
	Damage (0)  
	Scale 0.8
	Obituary "%k > \ciFlamespitter\c- > %o"
	+BRIGHT
	-NOGRAVITY
	Gravity 1.0
	DamageType "FlamespitterCanister"
	ProjectileKickBack 20
	Decal "PlasmaScorchLower"
	States
	{
	Spawn:
		FCAN A 16
		Goto Death
	Death:
		TNT1 A 0 A_Stop
		TNT1 A 0 A_SpawnItemEx("ExplodeHitFlash",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx("ExplodeHitFlash2",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItem("ExplodeSmokeRing")
		TNT1 AAAAA 0 A_SpawnItemEx("ExplodeSmoke",0,0,0,frandom(-2,2),frandom(-2,2),frandom(-2,2))
		TNT1 AAAA 0 A_CustomMissile("ExplodeSmokeSpawner",0,0,random(0,360),2,random(0,360))
		TNT1 A 0 A_SpawnItemEX("GasolineSplash")
		TNT1 A 0 A_Quake(1, 6, 0, 256)
		TNT1 A 0 A_Explode(50, 192, 0, true, 64)
		TNT1 A 105 //Make sure this is here for unlagged to work
		stop
		
	}
}
Actor GasolineSplash
{
	Scale 0.6
	+NONETID
	+NOINTERACTION
	+CLIENTSIDEONLY
	+FORCEXYBILLBOARD
	+BRIGHT
	States
	{
	Spawn:
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 nodelay A_SpawnItemEX("GasolineDroplet", frandom(-1.0, 1.0), frandom(-1.0, 1.0), frandom(-1.0, 1.0), frandom(-16.0, 16.0), frandom(-16.0, 16.0), frandom(-16.0, 16.0))
		GSPL AABBCCDDAABBCCDD 1 A_SetScale(scalex + 0.025, scaley + 0.025)
		GSPL AABBCCDD 1 A_FadeOut(0.1)
		stop
	}
}

Actor GasolineDroplet
{
	Radius 2
	Height 2
	RenderStyle ADD
	Scale 0.6
	Projectile
	+BOUNCEONFLOORS
	+BOUNCEONCEILINGS
	+BOUNCEONWALLS
	+BOUNCEONACTORS
	+CLIENTSIDEONLY
	BounceType Doom
	BounceFactor 0.6
	BounceCount 3
	+BRIGHT
	-NOGRAVITY
	Gravity 0.8
	States
	{
	Spawn:
		OSPK A 2
		loop
	Death:
		OSPK A 2 A_FadeOut(0.05)
		loop
	}
	
}
Actor CanisterChainReact
{
	Projectile
	Speed 0
	Radius 16
	Height 24
	Damage (0)  
	Scale 1.6
	Obituary "%k > \ciFlamespitter (Combustible Canister)\c- > %o"
	+DONTSPLASH
	+BRIGHT
	DamageType "FlamespitterCanister"
	ProjectileKickBack 20
	Decal PlasmaScorchLower
	States
	{
	Spawn:
		TNT1 A 0 nodelay A_Stop
		Goto Death
	Death:
		DMFX DEFG 3
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", -canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, -canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SetAngle(angle + 10)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", -canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, -canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SetAngle(angle + 10)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", -canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, -canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SetAngle(angle + 10)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", -canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, -canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SetAngle(angle + 10)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", -canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, -canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SetAngle(angle + 10)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", -canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, -canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SetAngle(angle + 10)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", -canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, -canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SetAngle(angle + 10)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", -canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, -canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SetAngle(angle + 10)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", -canister_range, 0.0, 32.0, 0.0, 0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SpawnItemEX("CanisterChainReactFX", 0.0, -canister_range, 32.0, 0, 0.0, 0)
		TNT1 A 0 A_SetAngle(angle + 10)
		TNT1 A 0 A_SpawnItemEx("ExplodeHitFlash",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx("ExplodeHitFlash2",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItem("ExplodeSmokeRing")
		TNT1 AAAAA 0 A_SpawnItemEx("ExplodeSmoke",0,0,0,frandom(-2,2),frandom(-2,2),frandom(-2,2))
		TNT1 AAAA 0 A_CustomMissile("ExplodeSmokeSpawner",0,0,random(0,360),2,random(0,360))
		TNT1 A 0 A_Quake(2, 8, 0, canister_range)
		TNT1 A 0 A_Explode(50, canister_range, 0, false, canister_range)
		DMFX H 2
		TNT1 A 105 //Make sure this is here for unlagged to work
		stop
	}
}
Actor CanisterChainReactFX
{
	+BRIGHT
	Scale 0.8
	+CLIENTSIDEONLY
	+NOINTERACTION
	+SERVERNETID
	States
	{
	Spawn:
		DMFX ABCDEFGH 2
		TNT1 A 1 
		stop
		
	}
}
Actor CanisterDebuff : Inventory
{
	+SERVERNETID
	Inventory.MaxAmount 105
}
Actor CanisterFX
{
	VSpeed -8
	+CLIENTSIDEONLY
	+NOINTERACTION
	+SERVERNETID
	+BRIGHT
	Scale 1.2
	+BRIGHT
	States
	{
	Spawn:
	Death:
		GDRP ABCD 3 A_FadeOut(0.1)
		TNT1 A 1
		stop
		
	}
}