Actor PoisonNovaCooldown : DnD_Boolean { }
Actor PoisonNovaCooldownCounter : CooldownCounter { }

Actor PoisonNovaCaster : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Cast Spell", 0, DND_SPELL_POISONNOVA, 0)
		Stop
	}
}

Actor PoisonNovaSpawner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_SetArg(0, 9)
			TNT1 A 0 A_SetArg(1, 9)
		LoopStart:
			TNT1 A 0 A_JumpIf(Args[1], "LoopContinue")
		Goto Finish
		LoopContinue:
			TNT1 A 0 A_SpawnItemEx("PoisonNovaProjectile", 0, 0, 32, 36 * cos((360.0 / Args[0]) * Args[1]), 36 * sin((360.0 / Args[0]) * Args[1]), 0, (360.0 / Args[0]) * Args[1], SXF_ABSOLUTEVELOCITY | SXF_ABSOLUTEANGLE)
			TNT1 A 0 A_SetArg(1, Args[1] - 1)
		Goto LoopStart
		Finish:
			TNT1 A 0
		Stop
	}
}

Actor PoisonNovaProjectile : DnD_BaseProjectile {
	Speed 36
	Height 12
	Radius 6
	DamageType "AcidRifle"
	RenderStyle Add
	Alpha 1.0
	DeathSound "imp/shotx"
	
	var int user_ripperid;
	var int user_expdmg;
	
	Stamina 98304
	
	+BLOODLESSIMPACT
	+DONTREFLECT
	+THRUACTORS
	States {
		SpawnState:
			TNT1 A 0 A_SetUserVar("user_expdmg",
				ACS_NamedExecuteWithResult("DND Player Damage Scale", 120, DND_DAMAGECATEGORY_POISON, DND_USETARGET | DND_ISSPELL) |
				(DND_DAMAGETYPE_POISON << SPELL_DMG_SHIFT) |
				(DND_SPELL_POISONNOVA << SPELL_ID_SHIFT)
			)
		SpawnLoop:
			S001 A 1 Bright A_SpawnItem("PoisonNovaTrail")
			TNT1 A 0 A_Explode(user_expdmg, 32, 0)
			S001 A 1 Bright A_SpawnItem("PoisonNovaTrail")
			TNT1 A 0 A_Explode(user_expdmg, 32, 0)
			S001 A 1 Bright A_SpawnItem("PoisonNovaTrail")
			TNT1 A 0 A_Explode(user_expdmg, 32, 0)
			S001 B 1 Bright A_SpawnItem("PoisonNovaTrail")
			TNT1 A 0 A_Explode(user_expdmg, 32, 0)
			S001 B 1 Bright A_SpawnItem("PoisonNovaTrail")
			TNT1 A 0 A_Explode(user_expdmg, 32, 0)
			S001 B 1 Bright A_SpawnItem("PoisonNovaTrail")
			TNT1 A 0 A_Explode(user_expdmg, 32, 0)
		Loop
		Death:
			S001 CDE 3 Bright
		Stop
	}
}

Actor PoisonNovaTrail {
	Renderstyle Add
	Alpha 1.0
	const float fadefactor = 0.8;
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			S001 A 1 Bright A_FadeOut(0.0825)
			S001 A 1 Bright A_SetScale(scalex * fadefactor, scaley * fadefactor)
			S001 A 1 Bright A_SetScale(scalex * fadefactor, scaley * fadefactor)
			S001 B 1 Bright A_FadeOut(0.0825)
			S001 B 1 Bright A_SetScale(scalex * fadefactor, scaley * fadefactor)
			S001 B 1 Bright A_SetScale(scalex * fadefactor, scaley * fadefactor)
		Loop
	}
}