// Sprites by Eriance
Actor ResMelee1 : Weapon {
	Scale 0.8
	Weapon.SlotNumber 1
	Weapon.SelectionOrder 1600
	Weapon.AmmoType "Souls"
	Weapon.AmmoUse 0
	Inventory.PickupMessage "You got the blade!!!11"
	Obituary "%o was removed by %k's Inferno Sword."
	Tag "$WEP_0_5_TAG"
    +INVENTORY.UNDROPPABLE
	+WEAPON.NOAUTOAIM
    Weapon.BobStyle InverseSmooth
    Weapon.BobSpeed 2.1
    Weapon.BobRangeY 0.4
    Weapon.BobRangeX 0.7
	States {
		Spawn:
			FBM1 X -1 
		Stop
		Ready:
			FBM1 ABC 4 Bright A_WeaponReady
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot1", 1)
		DeselectLoop:
			FBM1 C 1 Bright A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot1", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Berserker Perk5 Check (Melee)")
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 60, 0, DND_WEAPON_INFERNOSWORD)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 48, 0, DND_WEAPON_INFERNOSWORD)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 20, 2 | (4 << 16), DND_WEAPON_INFERNOSWORD)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_3, 8, 8 | (10 << 16), DND_WEAPON_INFERNOSWORD)
		SelectLoop:
			FBM1 C 1 Bright A_Raise
			TNT1 A 0 A_Raise
		loop
		Fire:
			FBM1 D 2 Bright Offset(0, 32)
			FBM1 E 2 Bright Offset(0, 32) A_AlertMonsters
			TNT1 A 0 A_PlaySound("Vorpal/Swing")
			TNT1 A 0 A_TakeInventory("DnD_Weapon_FrameChecker", 0)
			FBM1 F 1 Bright Offset(0, 32) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_INFERNOSWORD, DND_ATK_PRIMARY, 0, DND_ATF_NOAMMOTAKE)
			TNT1 A 0 A_GiveInventory("DnD_Weapon_FrameChecker", 1)
			FBM1 G 1 Bright Offset(0, 32) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_INFERNOSWORD, DND_ATK_PRIMARY, 0, DND_ATF_NOAMMOTAKE | DND_ATF_NOATTACKTRIGGER)
			TNT1 A 0 A_GiveInventory("DnD_Weapon_FrameChecker", 1)
			FBM1 H 1 Bright Offset(0, 32) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_INFERNOSWORD, DND_ATK_PRIMARY, 0, DND_ATF_NOAMMOTAKE | DND_ATF_NOATTACKTRIGGER)
			TNT1 A 0 A_GiveInventory("DnD_Weapon_FrameChecker", 1)
			FBM1 I 1 Bright Offset(0, 32) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_INFERNOSWORD, DND_ATK_PRIMARY, 0, DND_ATF_NOAMMOTAKE | DND_ATF_NOATTACKTRIGGER)
			FBM1 JK 1 Bright Offset(0, 32)
			FBM1 L 2 Bright Offset(0, 32)
			TNT1 A 10 Offset(0, 32)
		Goto PreReady
		Altfire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_INFERNOSWORD, 1, 0, DND_CFW_ALTFIRECHECK), "ContinueAltFire")
			FBM1 AAAABBBBCCCC 1 Bright A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ContinueAltFire:
			FBM1 D 2 Bright Offset(0, 32)
			FBM1 E 2 Bright Offset(0, 32) A_AlertMonsters
			TNT1 A 0 A_PlayWeaponSound("Vorpal/Swing")
			TNT1 A 0 A_PlaySoundEx("Vorpal/Fire", 7)
			FBM1 F 1 Bright Offset(0, 32) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_INFERNOSWORD, DND_ATK_SECONDARY, 0, 0)
			FBM1 G 1 Bright Offset(0, 32)
			FBM1 H 1 Bright Offset(0, 32)
			FBM1 I 1 Bright Offset(0, 32)
			FBM1 J 1 Bright Offset(0, 32)
			FBM1 K 1 Bright Offset(0, 32)
			FBM1 L 2 Bright Offset(0, 32)
			TNT1 A 10 Offset(0, 32)
		Goto PreReady
		PreReady:
			FBM1 C 1 Bright Offset(75, 157)
			FBM1 C 1 Bright Offset(56, 129)
			FBM1 C 1 Bright Offset(32, 94)
			FBM1 C 1 Bright Offset(14, 62)
			FBM1 A 1 Bright Offset(-3, 32)
		Goto Ready
	}
}

Actor InfernoExplosion : DnD_ExplosiveBase {
	Speed 0
	+THRUACTORS
	States {
		SpawnState:
			TNT1 A 0//TNT1 A 2 ACS_NamedExecuteAlways("DnD Target Fix")
		Death:
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_INFERNOSWORD |
				(DND_DMGID_0 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 96 * (1.0 + ACS_NamedExecuteWithResult("DND Explosion Radius Retrieve", DND_USETARGET) * exprad_factor))
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 1
		Stop
	}
}

Actor InfernoSwordPuff : DnD_BasePuff {
	Radius 1
	Height 1
	RENDERSTYLE Add
	ALPHA 0.66
	
	Stamina 4096
	
	+LOOKALLAROUND
	+FORCEXYBILLBOARD
	+THRUGHOST
	-NONETID // was necessary for some reason game thinks this is a puff
	Translation "0:255=%[0.00,0.00,0.00]:[1.94,0.71,0.05]"
	States {
		Spawn:
			TNT1 AAAA 0
			TNT1 A 1 A_PlaySound("Sword/Hit")
		Goto Anim
		Crash:
		HitNoBlood:
			TNT1 A 0
			TNT1 A 0 A_PlaySound("Sword/HitWall")
			TNT1 AAAAAA 0 A_CustomMissile ("MeleeSmoke", 0, 0, random (0, 360), 2, random (0, 360))
		Anim:
			DKAT D 1 A_JumpIfInventory("InfernoSwordDebuff", 1, "Boom", AAPTR_TRACER)
		ContAnim:
			TNT1 A 0 A_CustomMissile("InfernoExplosion", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			DKAT DEFG 3 Bright
			DKAT HIJKLM 2 Bright
		Stop
		Boom:
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Take Inferno Debuff")
			TNT1 A 0 A_PlaySound("Hammer/BigExp", 5)
			TNT1 A 0 A_SpawnItemEx ("ExplosionFlare", 0, 0, 32, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 AA 0 A_CustomMissile("RocketSmokeSmall", 0, 0, random(0, 360), 2, random(0, 180))
			TNT1 AAAA 0 A_CustomMissile("RocketSmokeSmall", 0, 0, random(0, 360), 2, random(0, 360))
			TNT1 AAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 180))
			TNT1 A 0 A_CustomMissile("InfernoExplosion_Debuff", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
		Goto ContAnim
	}
}

Actor InfernoExplosion_Debuff : DnD_ExplosiveBase {
	Speed 0
	+THRUACTORS
	States {
		SpawnState:
			TNT1 A 0//TNT1 A 2 ACS_NamedExecuteAlways("DnD Target Fix")
		Death:
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_INFERNOSWORD |
				(DND_DMGID_0 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
				(25 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 160 * (1.0 + ACS_NamedExecuteWithResult("DND Explosion Radius Retrieve", DND_USETARGET) * exprad_factor))
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 96)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_ADDEDIGNITE)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 1
		Stop
	}
}

Actor InfernoSwordPuff_GhostHitter : InfernoSwordPuff {
	-THRUGHOST
}

Actor InfernoProjExplosion2 : DnD_ExplosiveBase {
	Speed 0
	+THRUACTORS
	+FORCERADIUSDMG
	States {
		SpawnState:
			TNT1 A 0
		Death:
			TNT1 A 0 A_SetUserVar("user_expdmg",
				DND_WEAPON_INFERNOSWORD |
				(DND_DMGID_3 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
				(200 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 160 * (1.0 + ACS_NamedExecuteWithResult("DND Explosion Radius Retrieve", DND_USETARGET) * exprad_factor))
			TNT1 A 0 A_SetUserVar("user_fullexpradius", user_expradius / 2)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_BLASTSELF | DND_DAMAGEFLAG_HALFDMGSELF)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 1
		Stop
	}
}

Actor InfernoProjExplosion2_Crit : InfernoProjExplosion2 {
	Accuracy 69
}

Actor InfernoSwordMissile_1 : DnD_ExplosiveBase {
	Speed 28
	Height 16
	Radius 8
	Translation "0:255=%[0.00,0.00,0.00]:[2.0,0.80,0.275]"
	SeeSound "Vorpal/FireSee"
	DeathSound "Vorpal/FireHit"
	Renderstyle Add
	Alpha 1.0
	const int pvel = 28;
	
	Damage (
		DND_WEAPON_INFERNOSWORD |
		(DND_DMGID_2 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 268435456
	
	+THRUGHOST
	States {
		SpawnState:
			DKAT ABC 3 Bright
		Loop
		XDeath:
			TNT1 A 0 A_GiveInventory("InfernoDebuffGiver", 1, AAPTR_TRACER)
		Death:
			DKAT D 4 Bright
			TNT1 AAAA 0 A_SpawnItemEx("InfernoSwordMissileFX", frandom(-8, 8), frandom(-8, 8), 0, frandom(-3, 3), frandom(-3, 3))
			DKAT E 3 Bright
			DKAT F 4 Bright
			
			TNT1 A 0 A_SetUserVar("user_expdmg",
				DND_WEAPON_INFERNOSWORD |
				(DND_DMGID_3 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 128 * (1.0 + ACS_NamedExecuteWithResult("DND Explosion Radius Retrieve", DND_USETARGET) * exprad_factor))
			TNT1 A 0 A_SetUserVar("user_fullexpradius", user_expradius / 2)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_SOULATTACK)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			DKAT G 3 Bright
			DKAT HIJK 2 Bright
			TNT1 A 0 A_PlaySound("Weapons/glahit")
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
			TNT1 A 0 A_CustomMissile("InfernoProjExplosion2", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
		FinishAnim:
			TNT1 A 0 A_SpawnItemEx("OrangeParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAAA 0 A_SpawnItemEx("ExplosionFXMagicOrange", frandom(-16, 16), frandom(-16, 16), 0, frandom(-2, 2), frandom(-2, 2), frandom(-2, 2), 0, SXF_NOCHECKPOSITION)
			DKAT LM 2 Bright
			TNT1 A 8 Light("InfernoPuffLight1")
		Stop
		Crit:
			TNT1 A 0 A_CustomMissile("InfernoProjExplosion2_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
		Goto FinishAnim
	}
}

Actor InfernoSwordMissile_2 : InfernoSwordMissile_1 {
	Speed 1
	States {
		SpawnState:
			TNT1 A 1 ACS_NamedExecuteWithResult("DnD Readjust Speed", 28)
			TNT1 A 0 A_ScaleVelocity(pvel)
		Goto Super::SpawnState
	}
}

Actor InfernoSwordMissile_3 : InfernoSwordMissile_1 {
	Speed 1
	States {
		SpawnState:
			TNT1 A 2 ACS_NamedExecuteWithResult("DnD Readjust Speed", 28)
			TNT1 A 0 A_ScaleVelocity(pvel)
		Goto Super::SpawnState
	}
}

Actor InfernoSwordMissile_4 : InfernoSwordMissile_1 {
	Speed 1
	States {
		SpawnState:
			TNT1 A 3 ACS_NamedExecuteWithResult("DnD Readjust Speed", 28)
			TNT1 A 0 A_ScaleVelocity(pvel)
		Goto Super::SpawnState
	}
}

Actor InfernoSwordMissile_5 : InfernoSwordMissile_1 {
	Speed 1
	States {
		SpawnState:
			TNT1 A 4 ACS_NamedExecuteWithResult("DnD Readjust Speed", 28)
			TNT1 A 0 A_ScaleVelocity(pvel)
		Goto Super::SpawnState
	}
}

Actor InfernoSwordMissile_1_GhostHitter : InfernoSwordMissile_1 {
	-THRUGHOST
}

Actor InfernoSwordMissile_2_GhostHitter : InfernoSwordMissile_2 {
	-THRUGHOST
}

Actor InfernoSwordMissile_3_GhostHitter : InfernoSwordMissile_3 {
	-THRUGHOST
}

Actor InfernoSwordMissile_4_GhostHitter : InfernoSwordMissile_4 {
	-THRUGHOST
}

Actor InfernoSwordMissile_5_GhostHitter : InfernoSwordMissile_5 {
	-THRUGHOST
}

Actor InfernoSwordMissileFX {
	RenderStyle Add
	Alpha 0.666
	Height 12
	Radius 6
	Translation "0:255=%[0.00,0.00,0.00]:[2.0,0.80,0.275]"
	+NOINTERACTION
	+CLIENTSIDEONLY
	States {
		Spawn:
			DKAT NOPQRST 4 Bright
			DKAT UVW 3 Bright
		Stop
	}
}

Actor InfernoSwordDebuff : PowerProtection {
	damagefactor "normal", 1.0
	powerup.duration -5
}

Actor InfernoDebuffGiver : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("InfernoSwordDebuff", 1, "Finish")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Inferno Debuff FX", 0)
		Finish:
			TNT1 A 0 A_GiveInventory("InfernoSwordDebuff", 1)
		Stop
	}
}

Actor InfernoDebuffFX {
	+CLIENTSIDEONLY
	+NOINTERACTION 
	+NOTONAUTOMAP
	+FORCEXYBILLBOARD
	RenderStyle Add
	Alpha 0.725
	Scale 0.375
	const int v = 2;
	States {
		Spawn:
			TNT1 A 2 NoDelay Thing_ChangeTID(0, SPECIAL_FX_TID)
			TNT1 A 0 A_ChangeVelocity(frandom(-v, v), frandom(-v, v), frandom(-v, v))
			TNT1 A 0 A_Jump(256, "One", "Two")
		One:
			X007 CDE 2 Bright 
			X007 FGHIJ 2 Bright 
		Stop
		Two:
			X007 MNO 2 Bright 
			X007 PQRST 2 Bright 
		Stop		
	}
}