Actor ResRL1 : Weapon {
	Weapon.SelectionOrder 2400
	Weapon.SlotNumber 5
    Inventory.PickupSound "weapons/pickup"
    Inventory.PickupMessage "You got the meteor launcher!"	
    Obituary "%o was blown up by %k's meteor."
	Weapon.AmmoType "MeteorAmmo"
	Weapon.AmmoUse 1
	Weapon.AmmoGive 5
	Decal "BulletChip"
	AttackSound ""
	+INVENTORY.UNDROPPABLE
	Tag "Meteor Launcher"
	Weapon.BobSpeed 1.6
	Weapon.BobRangeY 0.25
	Weapon.BobRangeX 0.45
	Weapon.BobStyle InverseSmooth
	States {
		Spawn:
			RW06 X -1
		Stop
		Ready:
			RW06 AAABBBCCCDDD 1 A_WeaponReady
			RW06 EEEEE 5 A_WeaponReady
			RW06 DDDCCCBBB 1 A_WeaponReady
			RW06 AAAA 5 A_WeaponReady
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot5", 1)
			RW06 A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot5", 1)
			TNT1 A 0 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
			TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_METEORLAUNCHER)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 200)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_1, 64)
	    SelectLoop:
			RW06 A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			RW06 F 2 A_PlayWeaponSound("MeteorLauncher/Charge")
			RW06 G 1
			RW06 H 2
			RW06 I 1
			RW06 J 2
			RW06 K 1
			RW06 L 2
			RW06 M 1
			RW06 Q 1 Bright
			TNT1 A 0 A_PlayWeaponSound("MeteorLauncher/fire")
			TNT1 A 0 A_GiveInventory("MeteorShooter", 1)
			TNT1 A 0 Radius_Quake(5,3,0,4,0)
			RW06 Q 1 Bright
			RW06 RSTU 2 Bright
			RW06 M 1
			RW06 L 2
			RW06 K 1
			RW06 J 2
			RW06 I 1
			RW06 H 2
			RW06 G 1
			RW06 F 2
		Goto Ready
	}
}

Actor MeteorMissileTrail {
	+NOINTERACTION
	+CLIENTSIDEONLY
	Renderstyle Add
	Alpha 0.8
	Scale 1.15
	States {
		Spawn:
			RW6F CDEFGH 2 Bright A_FadeOut(0.075)
		Stop
	}
}

Actor MeteorMissileExplosion : BaseExplosionDamage {
	DamageType "Magic"
	+FOILINVUL
	States {
		Spawn:
			TNT1 A 0 NoDelay A_JumpIfInTargetInventory("Ability_ExplosionMastery", 1, "Lessdmg")
			TNT1 A 1 A_Explode(3 * ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET), 192)
		Stop
		LessDmg:
			TNT1 A 0 A_Explode(3 * ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET) / 2, 192, 0)
			TNT1 A 1 A_Explode(3 * ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET) / 2, 192)
		Stop
	}
}

Actor MeteorMissileExplosionFull : MeteorMissileExplosion {
	DamageType "MagicFull"
	+FORCERADIUSDMG
}

Actor MeteorMissileExplosion2 : BaseExplosionDamage {
	DamageType "Magic"
	States {
		Spawn:
			TNT1 A 0 NoDelay A_JumpIfInTargetInventory("Ability_ExplosionMastery", 1, "Lessdmg")
			TNT1 A 1 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET) / 2, 96)
		Stop
		LessDmg:
			TNT1 A 0 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET) / 4, 96, 0)
			TNT1 A 1 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET) / 4, 96)
		Stop
	}
}

Actor MeteorMissileExplosion2Full : MeteorMissileExplosion2 {
	DamageType "MagicFull"
	+FORCERADIUSDMG
}

Actor MeteorMissileExplosion3 : BaseExplosionDamage {
	DamageType "Magic"
	States {
		Spawn:
			TNT1 A 0 NoDelay A_JumpIfInTargetInventory("Ability_ExplosionMastery", 1, "Lessdmg")
			TNT1 A 1 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET) / 4, 128)
		Stop
		LessDmg:
			TNT1 A 0 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET) / 8, 96, 0)
			TNT1 A 1 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET) / 8, 96)
		Stop
	}
}

Actor MeteorMissileExplosion3Full : MeteorMissileExplosion3 {
	DamageType "MagicFull"
	+FORCERADIUSDMG
}

Actor MeteorMissileSplit_1 {
	PROJECTILE
	Height 14
	Radius 7
	Speed 25
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET))
	DamageType "Magic"
	BounceSound "MeteorLauncher/Bounce"
	DeathSound "MeteorLauncher/HitSmall"
	BounceType Doom
	BounceCount 4
	const float projvel = 13.5;
	Gravity 0.66
	-NOGRAVITY
	+MTHRUSPECIES
	States {
		Spawn:
			TNT1 A 0 NoDelay A_Jump(256, "1", "2", "3")
		1:
			RW6G E 1
		Loop
		2:
			RW6G F 1
		Loop
		3:
			RW6G G 1
		Loop
		Death:
			TNT1 A 0 A_ChangeVelocity(0, 0, 0)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 1)
			TNT1 A 0 A_SpawnItem("MeteorMissileExplosion2")
			TNT1 AAAAA 0 A_CustomMissile("RocketSmokeSmall", 0, 0, random(0, 360), 2, random(0, 180))
			TNT1 AAAAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 180))
			TNT1 AAAAAAAAAAA 0 A_SpawnItemEx("MeteorMissileSplit_2", 0, 0, 0, frandom(-projvel, projvel), frandom(-projvel, projvel), frandom(0, projvel))
			RW6F IJKL 3 Bright
		Stop
	}
}

Actor MeteorMissileSplit_1Full : MeteorMissileSplit_1 {
	DamageType "Magic"
	+FORCERADIUSDMG
	States {
		Death:
			TNT1 A 0 A_ChangeVelocity(0, 0, 0)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 1)
			TNT1 A 0 A_SpawnItem("MeteorMissileExplosion2Full")
			TNT1 AAAAA 0 A_CustomMissile("RocketSmokeSmall", 0, 0, random(0, 360), 2, random(0, 180))
			TNT1 AAAAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 180))
			TNT1 AAAAAAAAAAA 0 A_SpawnItemEx("MeteorMissileSplit_2Full", 0, 0, 0, frandom(-projvel, projvel), frandom(-projvel, projvel), frandom(0, projvel))
			RW6F IJKL 3 Bright
		Stop
	}
}

Actor MeteorMissileSplit_2 : MeteorMissileSplit_1 {
	Height 8
	Radius 4
	Speed 18
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET) / 4)
	const float projvel = 13.5;
	States {
		Spawn:
			TNT1 A 0 NoDelay A_Jump(256, "1", "2")
		1:
			RW6G H 1
		Loop
		2:
			RW6G I 1
		Loop
		Death:
			TNT1 A 0 A_ChangeVelocity(0, 0, 0)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 1)
			TNT1 A 0 A_SpawnItem("MeteorMissileExplosion3")
			TNT1 AA 0 A_CustomMissile("RocketSmokeSmall", 0, 0, random(0, 360), 2, random(0, 180))
			TNT1 AAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 180))
			TNT1 A 0 A_SetScale(0.75, 0.75)
			RW6F IJKL 3 Bright
		Stop
	}
}

Actor MeteorMissileSplit_2Full : MeteorMissileSplit_2 {
	DamageType "MagicFull"
	+FORCERADIUSDMG
	States {
		Death:
			TNT1 A 0 A_ChangeVelocity(0, 0, 0)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 1)
			TNT1 A 0 A_SpawnItem("MeteorMissileExplosion3Full")
			TNT1 AA 0 A_CustomMissile("RocketSmokeSmall", 0, 0, random(0, 360), 2, random(0, 180))
			TNT1 AAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 180))
			TNT1 A 0 A_SetScale(0.75, 0.75)
			RW6F IJKL 3 Bright
		Stop
	}
}

Actor MeteorMissile {
	PROJECTILE
	Height 20
	Radius 10
	Speed 30
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_OCCULT, DND_USETARGET))
	DamageType "Magic"
	Deathsound "MeteorLauncher/Hit"
	const float projvel = 13.5;
	Scale 0.9
	+FOILINVUL
	+MTHRUSPECIES
	States {
		Spawn:
			RW6G AABBCCDD 2 A_SpawnItem("MeteorMissileTrail")
		Loop
		Death:
			TNT1 A 0 A_SpawnItemEx ("ExplosionFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 AAAAA 0 A_CustomMissile("RocketSmoke", 0, 0, random(0, 360), 2, random(0, 180))
			TNT1 AAAAAAAA 0 A_CustomMissile("RocketSmoke", 0, 0, random(0, 360), 2, random(0, 360))
			TNT1 AAAAAAAAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 180))
			TNT1 AAAAAAAAAAAAAAAAAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 AAAAAAAAA 0 A_CustomMissile ("ExplosionParticleVeryFast", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 0 A_SpawnItem("MeteorMissileExplosion")
			TNT1 A 0 A_SetScale(1.25)
			RW6A EF 3 Bright
			TNT1 AAAAA 0 A_SpawnItemEx("MeteorMissileSplit_1", 0, 0, 0, frandom(-projvel, projvel), frandom(-projvel, projvel), frandom(0, projvel))
			TNT1 A 0 A_ChangeVelocity(0, 0, 2.0)
			RW6A GHI 4 Bright
			RW6A JJJJJJJJJJJ 2 Bright A_FadeOut(0.075)
		Stop
	}
}

Actor MeteorMissile_Full : MeteorMissile {
	DamageType "MagicFull"
	+FORCERADIUSDMG
	States {
		Death:
			TNT1 A 0 A_SpawnItemEx ("ExplosionFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 AAAAA 0 A_CustomMissile("RocketSmoke", 0, 0, random(0, 360), 2, random(0, 180))
			TNT1 AAAAAAAA 0 A_CustomMissile("RocketSmoke", 0, 0, random(0, 360), 2, random(0, 360))
			TNT1 AAAAAAAAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 180))
			TNT1 AAAAAAAAAAAAAAAAAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 AAAAAAAAA 0 A_CustomMissile ("ExplosionParticleVeryFast", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 0 A_SpawnItem("MeteorMissileExplosionFull")
			TNT1 A 0 A_SetScale(1.25)
			RW6A EF 3 Bright
			TNT1 AAAA 0 A_SpawnItemEx("MeteorMissileSplit_1Full", 0, 0, 0, frandom(-projvel, projvel), frandom(-projvel, projvel), frandom(0, projvel))
			TNT1 A 0 A_ChangeVelocity(0, 0, 2.0)
			RW6A GHI 4 Bright
			RW6A JJJJJJJJJJJ 2 Bright A_FadeOut(0.075)
		Stop
	}
}

Actor MeteorShooter : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 A_JumpIfInventory("DnD_QuestReward_DreamingGodBonus", 1, "Full")
			TNT1 A 0 A_GiveInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireCustomMissile("MeteorMissile")
		Stop
		Full:
			TNT1 A 0 A_FireCustomMissile("MeteorMissile_Full")
		Stop
	}
}

ACTOR ResRL2 : Weapon {
	//$Category Weapons
	Weapon.SelectionOrder 2400
	Weapon.AmmoUse1 0
	Weapon.AmmoUse2 0
	Weapon.AmmoGive 0
	Weapon.SlotNumber 5
	Weapon.AmmoType1 "Grenades"
	Weapon.AmmoType2 "HeavyGLCounter"
	+WEAPON.NOAUTOAIM
	Scale 0.75
	Tag "Heavy Grenade Launcher"
	States {
		Ready:
			GLAU A 1 A_WeaponReady
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot5", 1)
		DeselectLoop:
			GLAU A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot5", 1)
			TNT1 A 0 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
			TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_HEAVYGL)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 64)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_1, 6, 1 | (3 << 16))
		SelectLoop:
			GLAU A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "FireContinue")
			TNT1 A 0 A_JumpIfInventory("Grenades", 1, "FireContinue")
		Goto DoNothing
		FireContinue:
			GLAU B 3
			GLAU B 3 Offset(1, 34)
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_PlayWeaponSound("HeavyGL/Fire")
			TNT1 A 0 A_GiveInventory("HeavyGrenadeShooter", 1)
			TNT1 A 0 A_PlaySound("HeavyGL/Cock", 7)
			GLAU C 1 Offset(1, 35)
			GLAU C 1 Offset(3, 40)
			GLAU C 1 Offset(6, 47)
			GLAU C 2 Offset(6, 47)
			GLAU D 1 Offset(5, 44)
			GLAU D 1 Offset(4, 41)
			GLAU D 1 Offset(3, 37)
			GLAU D 1 Offset(2, 36)
			GLAU E 1 Offset(1, 35)
			GLAU E 1 Offset(1, 34)
			GLAU E 2 Offset(1, 33)
			GLAU F 11 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		DoNothing:
			GLAU A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		AltFire:
			TNT1 A 0 A_JumpIfInventory("HeavyGLCounter", 3, "DoNothing")
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "AltFireContinue")
			TNT1 A 0 A_JumpIfInventory("Grenades", 2, "AltFireContinue")
		Goto DoNothing
		AltFireContinue:
			GLAU B 6
			TNT1 A 0
			GLAU G 4 A_PlaySound("HeavyGL/Cock", 7)
			TNT1 A 0 A_GiveInventory("HeavyGrenadeShooter2", 1)
			GLAU H 4
			GLAU I 4
			GLAU F 4 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		
		Flash:
			TNT1 A 3 Bright A_Light1
			TNT1 A 4 Bright
			TNT1 AA 4 Bright A_Light2
		Goto LightDone
		Spawn:
			GLAU G -1
		Stop
	}
}

Actor HeavyGrenadeShooter : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("Grenades", 1)
		NoTake:
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireCustomMissile("HeavyGrenade")
			TNT1 A 0 A_JumpIfInventory("HeavyGLCounter", 1, "NormalLoop")
		Stop
		Full:
			TNT1 A 0 A_FireCustomMissile("HeavyGrenade_FullDMG")
		Stop
		FullLoop:
			TNT1 A 0 A_FireCustomMissile("HeavyGrenade_FullDMG", frandom(-4.8, 4.8), 0, 0, 0, 0, frandom(-2.0, 2.0))
			TNT1 A 0 A_TakeInventory("HeavyGLCounter", 1)
			TNT1 A 0 A_JumpIfInventory("HeavyGLCounter", 1, "FullLoop")
		Goto Finish
		NormalLoop:
			TNT1 A 0 A_FireCustomMissile("HeavyGrenade", frandom(-4.8, 4.8), 0, 0, 0, 0, frandom(-2.0, 2.0))
			TNT1 A 0 A_TakeInventory("HeavyGLCounter", 1)
			TNT1 A 0 A_JumpIfInventory("HeavyGLCounter", 1, "NormalLoop")
		Finish:
			TNT1 A 0
		Stop
	}
}

Actor HeavyGrenadeShooter2 : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("Grenades", 1)
		NoTake:
			TNT1 A 0 A_GiveInventory("HeavyGLCounter", 1)
		Stop
	}
}

Actor HeavyGrenadeExp : BaseExplosionDamage {
	DamageType "Explosives"
	States {
		Spawn:
			TNT1 A 0 NoDelay A_JumpIfInTargetInventory("Ability_ExplosionMastery", 1, "LessDmg")
			TNT1 A 0 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_EXPLOSIVE, DND_USETARGET), 128, 0, 0, 32)
			TNT1 A 1 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_EXPLOSIVE, DND_USETARGET), 128, 1, 0, 32)
		Stop
		LessDmg:
			TNT1 A 0 A_Explode(3 * ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_EXPLOSIVE, DND_USETARGET) / 2, 128, 0, 0, 32)
			TNT1 A 1 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_EXPLOSIVE, DND_USETARGET) / 2, 128, 1, 0, 32)
		Stop
	}
}

Actor HeavyGrenadeExp_FullDMG : HeavyGrenadeExp {
	DamageType "ExplosivesFull"
	+FORCERADIUSDMG
}

// dec by xaser
Actor HeavyGrenade {
	Radius 4
	Height 8
	Speed 24
	Projectile
	Damage (2 * ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_EXPLOSIVE, DND_USETARGET))
	DamageType "Explosives"
	Gravity 0.6
	BounceFactor 0.3
	+BOUNCEONWALLS
	+BOUNCEONFLOORS
	+BOUNCEONCEILINGS
	+CANBOUNCEWATER
	+RANDOMIZE
	+MOVEWITHSECTOR
	-NOGRAVITY
	+THRUGHOST
	+MTHRUSPECIES
	ReactionTime 30
	BounceSound "HeavyGL/Bounce"
	DeathSound "HeavyGL/explode"
	var int user_count;
	const int stepsize = 24;
	const int steps = 360 / 24;
	States {
		Spawn:
			TNT1 A 0 NoDelay A_Recoil(-1) // to stop the "freeze in midair" bug from happening
		SpawnLoop:
			HGRN A 3 A_JumpIf(ACS_NamedExecuteWithResult("DND HeavyGL Check", momx, momy, momz) < 1, "StopSpawnStart") TNT1 A 0 A_Countdown
			HGRN B 3 A_JumpIf(ACS_NamedExecuteWithResult("DND HeavyGL Check", momx, momy, momz) < 1, "StopSpawnStart") TNT1 A 0 A_Countdown
			HGRN C 3 A_JumpIf(ACS_NamedExecuteWithResult("DND HeavyGL Check", momx, momy, momz) < 1, "StopSpawnStart") TNT1 A 0 A_Countdown
			HGRN D 3 A_JumpIf(ACS_NamedExecuteWithResult("DND HeavyGL Check", momx, momy, momz) < 1, "StopSpawnStart") TNT1 A 0 A_Countdown
			HGRN E 3 A_JumpIf(ACS_NamedExecuteWithResult("DND HeavyGL Check", momx, momy, momz) < 1, "StopSpawnStart") TNT1 A 0 A_Countdown
			HGRN F 3 A_JumpIf(ACS_NamedExecuteWithResult("DND HeavyGL Check", momx, momy, momz) < 1, "StopSpawnStart") TNT1 A 0 A_Countdown
			HGRN G 3 A_JumpIf(ACS_NamedExecuteWithResult("DND HeavyGL Check", momx, momy, momz) < 1, "StopSpawnStart") TNT1 A 0 A_Countdown
			HGRN H 3 A_JumpIf(ACS_NamedExecuteWithResult("DND HeavyGL Check", momx, momy, momz) < 1, "StopSpawnStart") TNT1 A 0 A_Countdown
		Loop
		StopSpawnStart:
			HGRN A 0 A_Jump(128, 1)
		Goto StopSpawn
			HGRN E 0
		StopSpawn:
			TNT1 A 0 A_ScaleVelocity(0)
		StopSpawnLoop:
			HGRN "###" 1 A_Stop
			TNT1 A 0 A_Countdown
		Loop
		Death:
			TNT1 A 0 A_SetTranslucent(1.0, 1)
			TNT1 A 0 A_SpawnItem("HeavyGrenadeExp")
			HGRN I 2 Bright A_NoGravity
		PelletLoop:
			TNT1 A 0 A_JumpIf(user_count == steps, "Finish")
			TNT1 A 0 A_CustomMissile("HeavyGrenadeShrapnel", 8, 0, user_count * stepsize, CMF_TRACKOWNER | CMF_AIMDIRECTION, 135)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		Finish:
			HGRN JKLMNOPQRST 2 Bright
		Stop
	}
}

Actor HeavyGrenade_FullDMG : HeavyGrenade {
	DamageType "ExplosivesFull"
	+FORCERADIUSDMG
	-THRUGHOST
	States {
		Death:
			TNT1 A 0 A_SetTranslucent(1.0, 1)
			TNT1 A 0 A_SpawnItem("HeavyGrenadeExp_FullDMG")
			HGRN I 2 Bright A_NoGravity
		PelletLoop:
			TNT1 A 0 A_JumpIf(user_count == steps, "Finish")
			TNT1 A 0 A_CustomMissile("HeavyGrenadeShrapnel_FullDMG", 8, 0, user_count * stepsize, CMF_TRACKOWNER | CMF_AIMDIRECTION, 135)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
	}
}

Actor HeavyGrenadeShrapnel {
	Projectile
	Height 4
	Radius 2
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_BALLISTIC, DND_USETARGET))
	Speed 20
	Decal "BulletChip"
	DamageType "Bullet"
	Gravity 1.33
	BounceType "Doom"
	BounceFactor 0.66
	BounceSound "HeavyGL/ShrapnelBounce"
	DeathSound "HeavyGL/ShrapnelHit"
	ReactionTime 16
	+THRUGHOST
	+RIPPER
	+BLOODSPLATTER
	+BLOODLESSIMPACT
	-NOGRAVITY
	+MTHRUSPECIES
	States {
		Spawn:
			SFRG ABCDABCDEFGHEFGH 1 Bright
		SpawnLoop:
			SFRG IJKL 1 Bright
			TNT1 A 0 A_Countdown
		Loop
		Death:
			TNT1 A 0 A_ChangeFlag("THRUACTORS", 1)
			SFRG GKO 2 Bright
			SFRG S 100 Bright
			SFRG S 1 Bright A_FadeOut(0.02)
		Wait
		XDeath:
			TNT1 A 0 A_PlaySound("HeavyGL/ShrapnelFlesh")
		Stop
	}
}

Actor HeavyGrenadeShrapnel_Damager : DnD_FakeDamager {
	Radius 2
	Height 4
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_BALLISTIC, DND_USETARGET))
	DamageType "BulletFull"
	Speed 20
}

Actor HeavyGrenadeShrapnel_FullDMG : HeavyGrenadeShrapnel {
	States {
		Spawn:
			SFRG ABCDABCDEFGHEFGH 1 Bright A_CustomMissile("NailProj_Damager", 0, 0, 0, CMF_TRACKOWNER)
		SpawnLoop:
			SFRG IJKL 1 Bright A_CustomMissile("NailProj_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_Countdown
		Loop
	}
}

Actor ResRL3 : Weapon {
	Weapon.AmmoUse 0
	Weapon.AmmoGive 0
	Weapon.AmmoType1 "EverIce"
	Weapon.AmmoType2 "FreezerOverheat"
	Weapon.SlotNumber 5
	Inventory.PickupMessage "You got the Freezer Cannon!"
	+INVENTORY.UNDROPPABLE
	Tag "Freezer Cannon"
	Weapon.BobSpeed 1.5
	Weapon.BobRangeY 0.25
	Weapon.BobRangeX 0.35
	Weapon.BobStyle InverseSmooth
	States {
		Spawn:
			FRZC Z -1
		Stop
		Ready:
			FRZC A 1 A_WeaponReady(WRF_NOSWITCH)
		ReadyLoop:
			TNT1 A 0 A_GiveInventory("DnD_OverheatCanReduce", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Overheat Reduction", 0, DND_OVERHEAT_FREEZER, 5 | (7 << 16))
			FRZC AAAAAAAAA 1 A_WeaponReady
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("P_PlasmaFire", 1)
		DeselectLoop:
			FRZC A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot5", 1)
			TNT1 A 0 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
			TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_FREEZER)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 150)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_1, 3, 1 | (3 << 16))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_2, 150)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_3, 36)
		SelectLoop:
			FRZC A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Nothing:
			FRZC A 1 A_WeaponReady(WRF_NOFIRE)
		Goto Ready
		Fire:
			TNT1 A 0 A_JumpIfInventory("DnD_QuestReward_GodSlayerBonus", 1, "FireAmmoCheck")
			TNT1 A 0 A_JumpIfInventory("FreezerCooldown", 1, "Nothing")
			TNT1 A 0 A_JumpIfInventory("FreezerOverheat", 100, "Nothing")
		FireAmmoCheck:
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "FireContinue")
			TNT1 A 0 A_JumpIfInventory("EverIce", 5, "FireContinue")
		Goto Nothing
		FireContinue:
			FRZC A 1
			TNT1 A 0 A_TakeInventory("DnD_OverheatCanReduce", 1)
			FRZC A 3
			TNT1 A 0 A_PlaySound("Weapons/FreezerFire", CHAN_AUTO)
			TNT1 A 0 A_GiveInventory("FreezerShooter1", 1)
			TNT1 A 0 A_GunFlash
			FRZC ABCD 2 A_SetPitch (pitch - 0.5)
			TNT1 A 0 A_Recoil(3)
			TNT1 A 0 A_GiveInventory("FreezerCooldownGiver", 1)
			FRZC DCBA 2 A_SetPitch (pitch + 0.5)
			FRZC A 5 A_ReFire
			FRZC A 6 A_WeaponReady(WRF_NOFIRE)
		Goto Ready
		Hold:
			TNT1 A 0 A_JumpIfInventory("DnD_QuestReward_GodSlayerBonus", 1, "FireAmmoCheckHold")
			TNT1 A 0 A_JumpIfInventory("FreezerCooldown", 1, "Nothing")
			TNT1 A 0 A_JumpIfInventory("FreezerOverheat", 100, "Nothing")
		FireAmmoCheckHold:
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "HoldFire")
			TNT1 A 0 A_JumpIfInventory("EverIce", 5, "HoldFire")
		Goto Nothing
		HoldFire:
			FRZC A 1
			TNT1 A 0 A_PlaySound("Weapons/FreezerFire", CHAN_AUTO)
			TNT1 A 0 A_GiveInventory("FreezerShooter2", 1)
			TNT1 A 0 A_GunFlash
			FRZC ABCD 2 A_SetPitch (pitch-0.50)
			FRZC D 0 A_Recoil(3)
			TNT1 A 0 A_GiveInventory("FreezerCooldownGiver", 1)
			FRZC DCBA 2 A_SetPitch (pitch+0.50)
			FRZC A 3 A_ReFire
			FRZC A 6 A_WeaponReady(WRF_NOFIRE)
		Goto Ready
			
		Flash:
			FRZC E 2 Bright A_Light1
			FRZC F 2 Bright A_Light1
			FRZC G 2 Bright A_Light1
		goto lightdone	
	}
}

Actor FreezerShooter1 : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_GiveInventory("FreezerOverheat", 5)
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("EverIce", 5)
		NoTake:
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireCustomMissile("FreezeBall", 0, 1, 0, 0, 0)
		Stop
		Full:
			TNT1 A 0 A_FireCustomMissile("FreezeBall_FullDMG", 0, 1, 0, 0, 0)
		Stop
	}
}

Actor FreezerShooter2 : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_GiveInventory("FreezerOverheat", 10)
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("EverIce", 5)
		NoTake:
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireCustomMissile("FreezeBall", frandom(-2, 2), 1, 0, 0, 0, frandom(-2, 2))
		Stop
		Full:
			TNT1 A 0 A_FireCustomMissile("FreezeBall_FullDMG", frandom(-2, 2), 1, 0, 0, 0, frandom(-2, 2))
		Stop
	}
}

Actor FreezerCooldown : PowerDamage {
	powerup.duration 88
	damagefactor "normal", 1.0
}

Actor FreezerCooldownGiver : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("FreezerOverHeat", 0, "Give")
		Stop
		Give:
			TNT1 A 0 A_GiveInventory("FreezerCooldown", 1)
		Stop
	}
}

Actor FreezeBallTrail {
	+NOINTERACTION
	+CLIENTSIDEONLY
	Renderstyle Add
	Alpha 0.875
	Scale 0.675
	States {
		Spawn:
			TNT1 A 0 NoDelay A_Jump(256, "1", "2", "3")
		1:
			FRZX A 0
		Goto Fade
		2:
			FRZX B 0
		Goto Fade
		3:
			FRZX C 0
		Goto Fade
		Fade:
			"####" "#" 1 A_FadeOut(0.075)
			"####" "#" 0 A_SetScale(scalex - 0.0375, scaley - 0.0375)
		Loop
	}
}

Actor FreezeSparklet {
	+NOINTERACTION
	+CLIENTSIDEONLY
	+RANDOMIZE
	Renderstyle Add
	Alpha 0.875
	States {
		Spawn:
			TNT1 A 0 NoDelay Thing_ChangeTID(0, SPECIAL_FX_TID)
		SpawnLoop:
			FRZG ABCDE 3 Bright A_FadeOut(0.075)
		Loop
	}
}

Actor FreezeBallBigExp : BaseExplosionDamage {
	DamageType "P_Ice"
	States {
		Spawn:
			TNT1 A 1 NoDelay A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_2, TALENT_ELEMENTAL, DND_USETARGET), 176, 0, 0, 64)
		Stop
	}
}

Actor FreezeBallBigExp_FullDMG : FreezeBallBigExp {
	DamageType "P_IceFull"
	+FORCERADIUSDMG
}

Actor FreezeBall {
	PROJECTILE
	Speed 36
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_ELEMENTAL, DND_USETARGET))
	DamageType "P_Ice"
	Height 20
	Radius 10
	Renderstyle Add
	Alpha 0.875
	Scale 0.675
	var int user_count;
	const int steps = 5;
	DeathSound "Freezer/Hit"
	+NODAMAGETHRUST
	+MTHRUSPECIES
	States {
		Spawn:
			TNT1 A 0 NoDelay A_SetUserVar("user_count", 0)
		SpawnLoop:
			TNT1 A 0 A_JumpIf(user_count == steps, "Death")
			FRZX A 3 Bright A_SpawnItem("FreezeBallTrail")
			TNT1 A 0 A_ScaleVelocity(0.875)
			FRZX B 3 Bright A_SpawnItem("FreezeBallTrail")
			TNT1 A 0 A_ScaleVelocity(0.875)
			FRZX C 3 Bright A_SpawnItem("FreezeBallTrail")
			TNT1 A 0 A_ScaleVelocity(0.875)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		Death:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_SetScale(1.25)
			FRZX D 3 Bright
			TNT1 A 0 A_PlaySound("Freezer/Ambience")
			TNT1 A 0 A_SpawnItem("FreezeBallBigExp")
			TNT1 AAAAAA 0 A_SpawnItemEx("FreezeSparklet", frandom(-72, 72), frandom(-72, 72), frandom(-72, 72))
			FRZX EEEE 1 Bright A_SetScale(scalex + 0.1, scaley + 0.1)
			TNT1 AAAAAA 0 A_CustomMissile("FreezeBallSmall", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER, frandom(-180, 180))
			TNT1 AAAAAA 0 A_SpawnItemEx("FreezeSparklet", frandom(-72, 72), frandom(-72, 72), frandom(-72, 72))
			FRZX FFFFF 1 Bright A_SetScale(scalex + 0.1, scaley + 0.1)
			TNT1 AAAA 0 A_CustomMissile("FreezeBallSmall", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER, frandom(-180, 180))
			TNT1 AAAAAA 0 A_SpawnItemEx("FreezeSparklet", frandom(-72, 72), frandom(-72, 72), frandom(-72, 72))
			FRZX GGGGG 1 Bright A_SetScale(scaley - 0.0875, scaley - 0.0875)
			TNT1 AAAA 0 A_CustomMissile("FreezeBallSmall", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER, frandom(-180, 180))
			TNT1 AAAAAA 0 A_SpawnItemEx("FreezeSparklet", frandom(-72, 72), frandom(-72, 72), frandom(-72, 72))
			FRZX HHHH 1 Bright A_SetScale(scaley - 0.0875, scaley - 0.0875)
			TNT1 AAAAAA 0 A_CustomMissile("FreezeBallSmall", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER, frandom(-180, 180))
			TNT1 AAAAAA 0 A_SpawnItemEx("FreezeSparklet", frandom(-72, 72), frandom(-72, 72), frandom(-72, 72))
			FRZX III 1 Bright A_SetScale(scaley - 0.1, scaley - 0.1)
		Stop
	}
}

Actor FreezeBall_FullDMG : FreezeBall {
	DamageType "P_IceFull"
	States {
		Death:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_SetScale(1.0)
			FRZX D 3 Bright
			TNT1 A 0 A_PlaySound("Freezer/Ambience")
			TNT1 A 0 A_SpawnItem("FreezeBallBigExp_FullDMG")
			TNT1 AAAAAA 0 A_SpawnItemEx("FreezeSparklet", frandom(-72, 72), frandom(-72, 72), frandom(-72, 72))
			FRZX EEEE 1 Bright A_SetScale(scalex + 0.075, scaley + 0.075)
			TNT1 AAAAAA 0 A_CustomMissile("FreezeBallSmall_FullDMG", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER, frandom(-180, 180))
			TNT1 AAAAAA 0 A_SpawnItemEx("FreezeSparklet", frandom(-72, 72), frandom(-72, 72), frandom(-72, 72))
			FRZX FFFFF 1 Bright A_SetScale(scalex + 0.075, scaley + 0.075)
			TNT1 AAAA 0 A_CustomMissile("FreezeBallSmall_FullDMG", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER, frandom(-180, 180))
			TNT1 AAAAAA 0 A_SpawnItemEx("FreezeSparklet", frandom(-72, 72), frandom(-72, 72), frandom(-72, 72))
			FRZX GGGGG 1 Bright A_SetScale(scaley - 0.075, scaley - 0.075)
			TNT1 AAAA 0 A_CustomMissile("FreezeBallSmall_FullDMG", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER, frandom(-180, 180))
			TNT1 AAAAAA 0 A_SpawnItemEx("FreezeSparklet", frandom(-72, 72), frandom(-72, 72), frandom(-72, 72))
			FRZX HHHH 1 Bright A_SetScale(scaley - 0.075, scaley - 0.075)
			TNT1 AAAAAA 0 A_CustomMissile("FreezeBallSmall_FullDMG", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER, frandom(-180, 180))
			TNT1 AAAAAA 0 A_SpawnItemEx("FreezeSparklet", frandom(-72, 72), frandom(-72, 72), frandom(-72, 72))
			FRZX III 1 Bright A_SetScale(scaley - 0.075, scaley - 0.075)
		Stop
	}
}

Actor FreezeBallSmallExp : BaseExplosionDamage {
	DamageType "P_Ice"
	States {
		Spawn:
			TNT1 A 1 NoDelay A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_3, TALENT_ELEMENTAL, DND_USETARGET), 64, 0, 0, 16)
		Stop
	}
}

Actor FreezeBallSmallExp_FullDMG : FreezeBallSmallExp {
	DamageType "P_IceFull"
	+FORCERADIUSDMG
}

Actor FreezeBallSmall {
	PROJECTILE
	Speed 20
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL, DND_USETARGET))
	DamageType "P_Ice"
	Height 10
	Radius 5
	Renderstyle Add
	Alpha 0.875
	Scale 0.25
	DeathSound "Freezer/Hit"
	+NODAMAGETHRUST
	+RIPPER
	+BLOODLESSIMPACT
	+MTHRUSPECIES
	States {
		Spawn:
			FRZX ABCABC 3 Bright A_ScaleVelocity(0.675)
		Goto Death
		Death:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_SetScale(0.675)
			TNT1 A 0 A_PlaySound("Freezer/Particle", CHAN_AUTO)
			FRZX DE 2 Bright
			TNT1 A 0 A_SpawnItem("FreezeBallSmallExp")
			FRZX FGHI 2 Bright
		Stop
	}
}

Actor FreezeBallSmall_Damager : DnD_FakeDamager {
	Radius 3
	Height 4
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL, DND_USETARGET))
	DamageType "P_IceFull"
	Speed 20
}

Actor FreezeBallSmall_FullDMG : FreezeBallSmall {
	-RIPPER
	+THRUACTORS
	States {
		Spawn:
			FRZX AAA 1 NoDelay Bright A_CustomMissile("FreezeBallSmall_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_ScaleVelocity(0.675)
			FRZX BBB 1 Bright A_CustomMissile("FreezeBallSmall_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_ScaleVelocity(0.675)
			FRZX CCC 1 Bright A_CustomMissile("FreezeBallSmall_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_ScaleVelocity(0.675)
			FRZX AAA 1 Bright A_CustomMissile("FreezeBallSmall_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_ScaleVelocity(0.675)
			FRZX BBB 1 Bright A_CustomMissile("FreezeBallSmall_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_ScaleVelocity(0.675)
			FRZX CCC 1 Bright A_CustomMissile("FreezeBallSmall_Damager", 0, 0, 0, CMF_TRACKOWNER)
		Goto Death
		Death:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_SetScale(0.675)
			TNT1 A 0 A_PlaySound("Freezer/Particle", CHAN_AUTO)
			FRZX DE 2 Bright
			TNT1 A 0 A_SpawnItem("FreezeBallSmallExp_FullDMG")
			FRZX FGHI 2 Bright
		Stop
	}
}