//This weapon isn't a joke anymore ~BLOODWOLF

ACTOR DSweap : BrutalWeapon
{
	Obituary "%o was torn apart by %k's Dragonslayer."
    AttackSound "None"
    Inventory.PickupSound "AXEDRAW"
	Inventory.Pickupmessage "$GOTDS"
    +WEAPON.NOAUTOAIM
	+WEAPON.NOALERT
	+WEAPON.AXEBLOOD
	+WEAPON.MELEEWEAPON
	+WEAPON.NO_AUTO_SWITCH
    +FORCEXYBILLBOARD
	+WEAPON.CHEATNOTWEAPON
	damagetype Saw
	Weapon.SelectionOrder 2000
	Scale 0.15
	Tag "Dragon Slayer"
	States
	{
	
	Ready3:
	Ready:
        TNT1 A 0 A_JumpIfInventory("Kicking",1,"DoKick")
        TNT1 A 0 A_JumpIfInventory("Taunting",1,"Taunt")
		TNT1 A 0 A_JumpIfInventory("Salute1", 1, "Salute")
		TNT1 A 0 A_JumpIfInventory("Salute2", 1, "Salute")
		TNT1 A 0 A_JumpIfInventory("TossGrenade",1,"TossGrenade")
		TNT1 A 0 A_JumpIfInventory("StartDualWield",1,"DualWield")
		DSLA D 1 A_WeaponReady
		Loop
		
	Select:
		TNT1 A 0 A_Giveinventory("GoSpecial",1)
		TNT1 A 0 A_Takeinventory("FistsSelected",1)
		TNT1 A 0 A_Giveinventory("SawSelected",1)
		TNT1 A 0 A_Takeinventory("ShotgunSelected",1)
		TNT1 A 0 A_Takeinventory("SSGSelected",1)
		TNT1 A 0 A_Takeinventory("MinigunSelected",1)
		TNT1 A 0 A_Takeinventory("PlasmaGunSelected",1)
		TNT1 A 0 A_Takeinventory("RocketLauncherSelected",1)
		TNT1 A 0 A_Takeinventory("GrenadeLauncherSelected",1)
		TNT1 A 0 A_Giveinventory("HasCutingWeapon",1)
		TNT1 A 0 A_Takeinventory("BFGSelected",1)
		TNT1 A 0 A_Takeinventory("BFG10kSelected",1)
		TNT1 A 0 A_Takeinventory("RailGunSelected",1)
		TNT1 A 0 A_Takeinventory("SubMachineGunSelected",1)
		TNT1 A 0 A_Takeinventory("RevenantLauncherSelected",1)
		TNT1 A 0 A_Takeinventory("LostSoulSelected",1)
		TNT1 A 0 A_Takeinventory("FlameCannonSelected",1)
		TNT1 A 0 A_Takeinventory("HasBarrel",1)
		TNT1 A 0 A_TakeInventory("DSWeap2",1)
		TNT1 A 1 A_Raise
		TNT1 AAAAAA 0 A_Raise
		Goto SelectAnimation
		
	SelectAnimation:
		TNT1 A 1
	    DSLA A 0 A_JumpIfInventory("GoFatality", 1, "Steady")
        DSLA A 0 A_PlaySound("AXEDRAW")
        DSLA ABCD 2
        DSLA A 0 A_GunFlash
		Goto Ready

	Deselect:
		DSLA CBA 2
		DSLA A 0 A_Takeinventory("HasCutingWeapon",1)
		TNT1 AAAAAAAAA 0 A_Lower
		DSLA A 0 A_Takeinventory("HasCutingWeapon",1)
		DSLA A 0 A_TakeInventory("TossGrenade", 1)
		TNT1 A 1 A_Lower
		Wait
	
    Fire://Vertical right-to-left swing
		TNT1 A 0
		DSLH A 2
		DSLH A 0 A_SetPitch(Pitch-2)//Up(-)Down(+)
		DSLH A 0 A_SetAngle(Angle-2)//Right(-)Left(+)
		DSLH B 2
		DSLH A 0 A_SetPitch(Pitch-2)//Up(-)Down(+)
		DSLH A 0 A_SetAngle(Angle-2)//Right(-)Left(+)
		DSLH C 2
		DSLH A 0 A_SetPitch(Pitch-2)//Up(-)Down(+)
		DSLH A 0 A_SetAngle(Angle-2)//Right(-)Left(+)
		DSLH D 2
	Hold:
		TNT1 A 0
		DSLH E 2
		DSLH E 0 A_Refire
		DSLV A 2
		TNT1 A 0 A_PlaySound("weapons/gswing", 1)
		DSLV B 2
		DSLV A 0 A_SetPitch(Pitch+4)
		DSLV A 0 A_SetAngle(Angle+4)
		TNT1 A 0 A_FireCustomMissile("DSAttack")
		DSLV C 2
		DSLV A 0 A_SetPitch(Pitch+4)
		DSLV A 0 A_SetAngle(Angle+4)
		TNT1 A 0 A_FireCustomMissile("DSAttack")
		DSLV D 2
		DSLV A 0 A_SetPitch(Pitch+4)
		DSLV A 0 A_SetAngle(Angle+4)
		TNT1 A 0 A_FireCustomMissile("DSAttack")
		DSLV E 2
		DSLV A 0 A_SetPitch(Pitch+4)
		DSLV A 0 A_SetAngle(Angle+4)
		TNT1 A 0 A_FireCustomMissile("DSAttack")
		DSLV F 2
		DSLV A 0 A_SetPitch(Pitch+4)
		DSLV A 0 A_SetAngle(Angle+4)
		TNT1 A 0 A_FireCustomMissile("DSAttack")
		
	EndSwingV://Return to original point of aim after a vertical attack
		TNT1 A 0
		DSLA A 0 A_SetPitch(Pitch-4)//Up(-)Down(+)
		DSLA A 0 A_SetAngle(Angle-4)//Right(-)Left(+)
		DSLA A 2
		DSLA A 0 A_SetPitch(Pitch-4)//Up(-)Down(+)
		DSLA A 0 A_SetAngle(Angle-4)//Right(-)Left(+)
		DSLA B 2
		DSLA A 0 A_SetPitch(Pitch-4)//Up(-)Down(+)
		DSLA A 0 A_SetAngle(Angle-4)//Right(-)Left(+)
		DSLA C 2
		DSLA A 0 A_SetPitch(Pitch-2)//Up(-)Down(+)
		DSLA A 0 A_SetAngle(Angle-2)//Right(-)Left(+)
		DSLA D 2 A_WeaponReady(WRF_NOBOB)
		Goto Ready
		
	AltFire://Horizontal right-to-left slash
		TNT1 A 0
		DSLH A 2
		DSLH A 0 A_SetAngle(Angle-2)//Right(-)Left(+)
		DSLH B 2
		DSLH A 0 A_SetAngle(Angle-2)//Right(-)Left(+)
		DSLH C 2
		DSLH A 0 A_SetAngle(Angle-2)//Right(-)Left(+)
		DSLH D 2
	AltHold:
		TNT1 A 0
		DSLH E 2
		DSLH E 0 A_Refire
		DSLH B 2
		TNT1 A 0 A_FireCustomMissile("DSAttack2")
		TNT1 A 0 A_PlaySound("weapons/gswing", 1)
		DSLH F 2
		DSLH A 0 A_SetAngle(Angle+6)//0 deg
		TNT1 A 0 A_FireCustomMissile("DSAttack2")
		DSLH G 2
		DSLH A 0 A_SetAngle(Angle+6)//0 deg
		TNT1 A 0 A_FireCustomMissile("DSAttack2")
		DSLH H 2
		DSLH A 0 A_SetAngle(Angle+6)//0 deg
		TNT1 A 0 A_FireCustomMissile("DSAttack2")
		DSLH I 2
		DSLH A 0 A_SetAngle(Angle+6)//0 deg
		TNT1 A 0 A_FireCustomMissile("DSAttack2")
		DSLH J 2
		DSLH A 0 A_SetAngle(Angle+6)//0 deg
		TNT1 A 0 A_FireCustomMissile("DSAttack2")
	
	EndSwingH://Return to original point of aim after a horizontal R:L attack
		TNT1 A 0
		DSLA A 0 A_SetAngle(Angle-6)//Right(-)Left(+)
		DSLA A 2
		DSLA A 0 A_SetAngle(Angle-6)//Right(-)Left(+)
		DSLA B 2
		DSLA A 0 A_SetAngle(Angle-6)//Right(-)Left(+)
		DSLA C 2
		DSLA A 0 A_SetAngle(Angle-6)//Right(-)Left(+)
		DSLA D 2 A_WeaponReady(WRF_NOBOB)
		Goto Ready
	
	DualWield:
		TNT1 A 0
		TNT1 A 0 A_Takeinventory("StartDualWield",1)
		TNT1 A 0 A_JumpIfInventory("PowerStrength",1,"Enrage")
		Goto NoBerserk
		
	NoBerserk:
		TNT1 A 0 A_Print("You must be berserk to ignite the blade.", 2)
		DSLA D 5
		Goto Ready3
		
	Enrage:
		TNT1 A 0
		TNT1 A 0 A_GiveInventory("DSWeap2")
		TNT1 A 0 A_SelectWeapon("DSWeap2")
		Goto Ready3
		
	Spawn:
		DSLC P 1
		DSLC P -1
		Stop
	}
}

ACTOR DSAttack: FastProjectile
{
	Radius 16
	Height 32
	DamageType Saw
	+MISSILE
	+FORCEXYBILLBOARD
	+FORCERADIUSDMG
	+BLOODSPLATTER
	+FORCEPAIN
	RenderStyle Add
	Alpha 0.6
	Damage (random(9,10))
	Speed 96
	SeeSound "none"
	DeathSound "none"
	decal "SawVertical"
	Scale 0.01
	States
	{
		Spawn:
		TNT1 A 0
		TNT1 A 1 BRIGHT
		Stop

		Death:
		TNT1 A 0
		TNT1 A 0
		TNT1 A 0 Radius_Quake (4, 6, 0, 10, 0)//(intensity, duration, damrad, tremrad, tid)
		TNT1 A 0 A_CheckFloor("SpawnFloor")
		TNT1 A 0 A_SpawnItem ("Sparks", 0)
		TNT1 A 0 A_PlaySound("B2KCLANG", 6)
		TNT1 A 0 A_ALertMonsters(1024)
		
		TNT1 AAAAAAAAAAAAAAAA 0 A_CustomMissile ("SparkX", 2, 0, random (0, 360), 2, random (30, 170))
		TNT1 A 0 A_JumpIfInTargetInventory("PowerStrength", 1, "Berserk")
		Stop

		SpawnFloor:
		TNT1 A 0
		AXEG A 0 Acs_namedexecutealways("BDCheckFloorType", 0, 0, 0, 0)
		TNT1 A 2
		TNT1 A 0 A_ALertMonsters(1024)
		TNT1 A 0 A_JumpIfInventory("IsOverWater", 1, "SpawnWater")
		TNT1 A 0 A_JumpIfInventory("IsOverNukage", 1, "SpawnNukage")
		TNT1 A 0 A_JumpIfInventory("IsOverSlime", 1, "SpawnSlime")
		TNT1 A 0 A_JumpIfInventory("IsOverBlood", 1, "SpawnBlood")
		TNT1 A 0 A_JumpIfInventory("IsOverLava", 1, "SpawnLava")
		TNT1 A 0 A_JumpIfInventory("IsOverGrass", 1, "SpawnDirt")
		TNT1 A 0 A_JumpIfInventory("IsOverSand", 1, "SpawnSand")
		PUFF A 0 bright A_PlaySound("ricochet/hit")
		TNT1 A 0 A_SpawnItem ("YellowFlareSmall", 0)
		TNT1 A 0 A_SetScale(-0.9)
		TNT1 A 0 A_Jump (132, 15)
		FX58 ABCD 1 BRIGHT 
		TNT1 A 0 A_CustomMissile("OldschoolRocketSmokeTrail2Bigger", 2, 0, random (0, 360), 2, random (0, 360))
		FX58 EFGHIJ 1 bright
		Stop
		TNT1 AAAAA 0
		FX57 ABCD 1 BRIGHT 
		TNT1 A 0 A_CustomMissile("OldschoolRocketSmokeTrail2Bigger", 2, 0, random (0, 360), 2, random (0, 360))
		FX57 EFGHIJ 1 bright
		stop

		SpawnWater:
		TNT1 A 0
		TNT1 AAAAA 0 A_CustomMissile ("WaterParticleXFAster", 8, 0, random (0, 360), 2, random (30, 160))
		TNT1 AAAAA 0 A_CustomMissile ("WaterParticleXSuperFast", 24, 0, random (0, 360), 2, random (30, 160))
		TNT1 A 0 A_SpawnItem("WaterSplashWaves")
		TNT1 A 0 A_SetScale(0.75, 0.75)
		SPHW ABCDE 3
		Stop

		SpawnSlime:
		TNT1 A 0
		TNT1 AAAAA 0 A_CustomMissile ("SLimeParticleXFAster", 8, 0, random (0, 360), 2, random (30, 160))
		TNT1 AAAAA 0 A_CustomMissile ("SlimeParticleXFAster", 24, 0, random (0, 360), 2, random (30, 160))
		TNT1 A 0 A_SpawnItem("SlimeSplashWaves")
		TNT1 A 0 A_SetScale(0.75, 0.75)
		SPHB ABCDE 3
		Stop

		SpawnNukage:
		TNT1 A 0
		TNT1 AAAAA 0 A_CustomMissile ("nukageParticleXFAster", 8, 0, random (0, 360), 2, random (30, 160))
		TNT1 AAAAA 0 A_CustomMissile ("nukageParticleXFAster", 24, 0, random (0, 360), 2, random (30, 160))
		TNT1 A 0 A_SpawnItem("NukageSplashWaves")
		TNT1 A 0 A_SetScale(0.75, 0.75)
		SPHG ABCDE 3
		Stop

		SpawnBlood:
		TNT1 A 0
		TNT1 AAAAA 0 A_CustomMissile ("BloodParticleXFAster", 8, 0, random (0, 360), 2, random (30, 160))
		TNT1 AAAAA 0 A_CustomMissile ("BloodParticleXFAster", 24, 0, random (0, 360), 2, random (30, 160))
		TNT1 A 0 A_SpawnItem("BloodSplashWaves")
		TNT1 A 0 A_SetScale(0.75, 0.75)
		SPHR ABCDE 3
		Stop

		SpawnLava:
		TNT1 A 0
		TNT1 A 0 A_CustomMissile ("OldschoolRocketSmokeTrailDarker", 12, 0, random (160, 210), 2, random (10, 90))
		TNT1 A 0 A_SpawnItemEx("TinyBurningPiece3", random (-5, 5), random (-5, 5))
		TNT1 AAAAA 0 A_CustomMissile ("ExplosionParticleHeavy", 10, 0, random (0, 180), 2, random (10, 90))
		TNT1 A 0 A_SetScale(0.75, 0.75)
		INFE ABCDEFGHIJKLMNOPQR 1 BRIGHT 
		INFE ST 1 BRIGHT A_CustomMissile ("OldschoolRocketSmokeTrailDarker", 32, 0, random (160, 210), 2, random (10, 90))
		TNT1 AAA 4 A_CustomMissile ("OldschoolRocketSmokeTrailDarker", 14, 0, random (160, 210), 2, random (10, 90))
		Stop

		SpawnDirt:
		TNT1 A 0
		TNT1 A 0 A_CustomMissile ("BrownCloudSmallLong", 0, 0, random (0, 360), 2, random (10, 150))
		TNT1 AA 0 A_CustomMissile ("DirtChunk3", 0, 0, random (0, 360), 2, random (30, 150))
		TNT1 AA 0 A_CustomMissile ("DirtChunk4", 0, 0, random (0, 360), 2, random (30, 150))
		TNT1 A 0 A_CustomMissile ("MudDustSmall", 4, 0, random (0, 360), 2, random (30, 150))
		TNT1 A 0 A_SpawnItem("DirtRicochet")
		Stop

		SpawnSand:
		TNT1 A 0
		TNT1 A 0 A_CustomMissile ("SandCloudSmallLong", 0, 0, random (0, 360), 2, random (10, 90))
		TNT1 A 0 A_CustomMissile ("SandCloudSmall", 0, 0, random (0, 360), 2, random (10, 90))
		TNT1 A 0 A_CustomMissile ("SandDustSmall", 4, 0, random (0, 360), 2, random (30, 150))
		Stop

		XDeath:
		Melee:
		Crash:
		TNT1 A 0
		PUFF A 0 A_PlaySound("player/cyborg/fist", 3)
		TNT1 A 0 A_PlaySound("BRKCLANG", 1)
		TNT1 A 0 A_SpawnItemEx ("PLOFT2",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
		TNT1 A 0 Radius_Quake (4, 6, 0, 10, 0)//(intensity, duration, damrad, tremrad, tid)
		TNT1 A 0 A_JumpIfInTargetInventory("PowerStrength", 1, "Berserk")
		TNT1 A 10
		Stop

		Berserk:
		TNT1 A 1
		TNT1 A 0 A_explode(180, 10, 0)
		TNT1 A 10
		Stop
	}
}

Actor DSAttack2: DSAttack
{
	Radius 32
	Height 16
	Damagetype "Cut"
	Damage (random(7, 8))
	decal "SawHorizontal"
}