freeslot("S_DRAGONMINE_METALT",
"S_DRAGONMINE_METALT_OHFUCK")

states[S_DRAGONMINE_METALT] = {
	sprite		= SPR_DRAB,
	frame		= 3,
	tics		= 350,
	nextstate	= S_DRAGONMINE_METALT_OHFUCK,
}

states[S_DRAGONMINE_METALT_OHFUCK] = {
	sprite		= SPR_DRAB,
	frame		= 3,
	tics		= 35,
	nextstate	= S_TNTBARREL_EXPL1,
}



addHook("PlayerThink", function(player)
	if player.metaltabil == nil then player.metaltabil = 1 end
	if player.metaltswitchcooldown == nil then player.metaltswitchcooldown = 0 end
	if player.metaltswitchcooldown > 0 then player.metaltswitchcooldown = $1-1 end
	if player.metaltboostercooldown == nil then player.metaltboostercooldown = 0 end
	if player.metaltboostercooldown > 0 then player.metaltboostercooldown = $1-1 end
	if player.metaltboosterchargeup == nil then player.metaltboosterchargeup = 0 end
	if player.metaltboosterchargeup > 0 then player.metaltboosterchargeup = $1-1 end
	if player.metaltboostercoolfail == nil then player.metaltboostercoolfail = 0 end
	if player.metaltboostercoolfail > 0 then player.metaltboostercoolfail = $1-1 end
	if player.multitype == nil then player.multitype = 3 end
	if player.superrunmusic == nil then player.superrunmusic = 0 end
	if player.metaltbeam1 == nil then player.metaltbeam1 = 0 end
	if player.metaltbeam2 == nil then player.metaltbeam2 = 0 end
	if player.metaltbeam1 > 0 then player.metaltbeam1 = $1+1 end
	if player.metaltbeam1 > 40 then player.metaltbeam2 = $1+1 end
	if player.metaltbeam2 > 105 then
	player.metaltbeam1 = 0
	player.metaltbeam2 = 0
	end
	if player.altforcebouncetics == nil then player.altforcebouncetics = 0 end
	if player.altforcebouncetics > 0 then player.altforcebouncetics = $1-1 end
	if player.welliwantthisspeedthankyouverymuchsrbtwo == nil then player.welliwantthisspeedthankyouverymuchsrbtwo = 0 end
	if player.metaltbonus == nil then player.metaltbonus = 0 end
	if player.powers[pw_super]
		player.metaltbonus = 1
	elseif (player.powers[pw_invulnerability] == player.powers[pw_sneakers]) and (player.powers[pw_sneakers]) and (player.powers[pw_invulnerability])
		player.metaltbonus = 1
	elseif player.mo.overclock == 1
		player.metaltbonus = 1
	else 
		player.metaltbonus = 0
	end
	if not player.powers[pw_super]
		player.altsup = 0
	end
	if (player.powers[pw_invulnerability] ~= player.powers[pw_sneakers]) 
		player.altemmy = false
	elseif (player.powers[pw_invulnerability] == player.powers[pw_sneakers]) and not (player.powers[pw_sneakers]) and not (player.powers[pw_invulnerability])
		player.altemmy = false
	elseif S_MusicName() == "_inv"
		player.altemmy = false
	elseif S_MusicName() == "_shoes"
		player.altemmy = false
	end
	if not player.powers[pw_invulnerability]  
	or player.powers[pw_sneakers] > player.powers[pw_invulnerability]  
		player.altinv = false
	end
	if not player.powers[pw_sneakers]  
	or player.powers[pw_invulnerability] > player.powers[pw_sneakers]  
		player.altsneak = false
	end
	if not player.powers[pw_extralife]
		player.altoneup = false
	end
	if not (G_BuildMapName(mapnum) == "MAP25")
	or player.playerstate ~= PST_LIVE
		player.versusone = false
	end
end)

addHook("MapLoad", function(player)
	for player in players.iterate
	player.metaltbeam1 = 0
	player.metaltbeam2 = 0
	player.metaltboostercooldown = 0
	player.metaltboostercoolfail = 0
	player.metaltboosterchargeup = 0
	player.metaltswitchcooldown = 0
	end
end)

local function MetaltThinker(player)
	if player.mo and player.valid and not player.exiting //Never have things run on exit..
		if player.mo.skin == "metalt"
			if (player.cmd.buttons & BT_CUSTOM2) and player.metaltswitchcooldown == 0
				if player.metaltabil == 0 //Change ability on Custom 2!
					player.metaltabil = 1
					S_StartSound(nil, sfx_thok, player) //Make the sound to indicate it!!
				elseif player.metaltabil == 1
					player.metaltabil = 0
					S_StartSound(nil, sfx_s3k42, player) //Oooh yeah similar notes bc lazy wooo im cool
				end
				player.metaltswitchcooldown = 15
			end
			if not CBW_Battle and (player.cmd.buttons & BT_FIRENORMAL) and player.weapondelay <= 0 and not (player.powers[pw_carry]) and not player.powers[pw_nocontrol] and not P_PlayerInPain(player)
				if P_IsObjectOnGround(player.mo)
					if player.metaltbonus
						player.weapondelay = 20
						P_Telekinesis(player, 300*FRACUNIT, 2048*FRACUNIT)
						P_NukeEnemies(player.mo, player.mo, 256*FRACUNIT)
						player.metaltbeam1 = -1
						S_StartSound(player.mo, sfx_s3k9f)
						player.powers[pw_flashing] = 30
					elseif player.rings >= 15
						player.weapondelay = TICRATE*6
						player.rings = $-15
						P_Telekinesis(player, 150*FRACUNIT, 1024*FRACUNIT)
						P_NukeEnemies(player.mo, player.mo, 128*FRACUNIT)
						player.metaltbeam1 = -1
						S_StartSound(player.mo, sfx_s3k9f)
						player.powers[pw_flashing] = 30
					else
						player.weapondelay = 20
						S_StartSound(nil, sfx_lose, player)
					end
				else
					if player.metaltbonus
						player.weapondelay = TICRATE*5
						player.metaltbeam1 = 1
						S_StartSound(player.mo, sfx_kc36)
					elseif player.rings >= 45
						player.weapondelay = TICRATE*25
						player.rings = $-45
						player.metaltbeam1 = 1
						S_StartSound(player.mo, sfx_kc36)
					else
						player.weapondelay = 20
						S_StartSound(nil, sfx_lose, player)
					end
				end
			end
			if not player.metaltbonus
				if not P_IsObjectOnGround(player.mo)
					if player.metaltabil == 1
						player.charability = CA_HOMINGTHOK
						player.thokitem = MT_THOK
						player.charflags = $1|SF_MULTIABILITY
						player.actionspd = 65*FRACUNIT
					elseif player.metaltabil == 0 //Make sure the switching, works!!
						player.charability = CA_TWINSPIN
						player.thokitem = MT_THUNDERCOIN_SPARK
						player.charflags = $1 & ~SF_MULTIABILITY
						player.actionspd = 10*FRACUNIT
					else
						player.metaltabil = 1
					end
				else
					player.thokitem = MT_GHOST
				end
			else
				if not P_IsObjectOnGround(player.mo)
					if player.metaltabil == 1
						player.charability = CA_HOMINGTHOK
						player.thokitem = MT_SUPERSPARK
						player.charflags = $1|SF_MULTIABILITY
						player.actionspd = 115*FRACUNIT
							if player.mo.state == S_PLAY_FALL
								player.pflags = $1 & ~PF_THOKKED
							end
					elseif player.metaltabil == 0 //Make sure the switching, works!!
						player.charability = CA_TWINSPIN
						player.thokitem = MT_ENERGYBALLCLONE
						player.charflags = $1|SF_MULTIABILITY
						player.actionspd = 30*FRACUNIT
					else
						player.metaltabil = 1
					end
				else
					player.charability = CA_JUMPBOOST
					player.actionspd = (2*FRACUNIT)
					player.thokitem = MT_GHOST
				end
			end
			
			if player.metaltabil == 0
				if P_LookForEnemies(player,false,true) and not P_IsObjectOnGround(player.mo) and not (player.pflags & PF_SHIELDABILITY) and not (player.pflags & PF_THOKKED) and (player.pflags & PF_JUMPED)
					if player.powers[pw_shield] == SH_NONE
					or player.powers[pw_shield] == SH_PITY
					or player.powers[pw_shield] == SH_PINK
						P_SpawnLockOn(player,P_LookForEnemies(player,false,true),S_LOCKON1)
					elseif player.powers[pw_shield] == SH_ELEMENTAL
					or player.powers[pw_shield] == SH_ARMAGEDDON
						P_SpawnLockOn(player,P_LookForEnemies(player,false,true),S_LOCKON3)
					elseif player.powers[pw_shield] == SH_THUNDERCOIN
						P_SpawnLockOn(player,P_LookForEnemies(player,false,true),S_LOCKON4)
					end
				end
			end
			if player.powers[pw_super] and P_LookForEnemies(player,false,true) and not P_IsObjectOnGround(player.mo) and not (player.pflags & PF_SHIELDABILITY) and not (player.pflags & PF_THOKKED) and (player.pflags & PF_JUMPED)
				if player.powers[pw_shield] == SH_ATTRACT
					P_SpawnLockOn(player,P_LookForEnemies(player,false,true),S_LOCKON2)
				end
			end
			
			if player.whirlwindused and P_IsObjectOnGround(player.mo)
				player.whirlwindused = false
			end
			
		/*if player.powers[pw_extralife]
			S_ChangeMusic("MK21UP", false, player)
		end 
		if player.powers[pw_super] and not player.powers[pw_extralife] and (player.pflags & PF_GODMODE) and not (G_BuildMapName(mapnum) == "MAP25") and not (G_BuildMapName(mapnum) == "MAP28")
			S_ChangeMusic("MK2HYP", true, player)
		end
		if player.powers[pw_super] and not player.powers[pw_extralife] and not (player.pflags & PF_GODMODE) and not (G_BuildMapName(mapnum) == "MAP25")
			S_ChangeMusic("MK2SUP", true, player)
		end
		if not player.powers[pw_extralife] and not player.powers[pw_super] and (player.powers[pw_invulnerability] == 20*TICRATE) and (player.powers[pw_sneakers] == 20*TICRATE) and not (G_BuildMapName(mapnum) == "MAP25")
			S_ChangeMusic("MK2EMR", true, player)
		end
		if player.powers[pw_invulnerability] and not player.powers[pw_extralife] and not player.powers[pw_super] and not (player.powers[pw_sneakers] == player.powers[pw_invulnerability]) and not (G_BuildMapName(mapnum) == "MAP25")
			S_ChangeMusic("MK2INV", true, player)
		end
		if player.powers[pw_sneakers] and not player.powers[pw_extralife] and not player.powers[pw_super] and not player.powers[pw_invulnerability] and not (player.powers[pw_emeralds] == 127) and not (G_BuildMapName(mapnum) == "MAP25")
			S_ChangeMusic("MK2SNE", true, player)
		end
		if (G_BuildMapName(mapnum) == "MAP25") and not player.powers[pw_extralife]
			S_ChangeMusic("MK2VS1", true, player)
		end*/
			if (player.cmd.buttons & BT_CUSTOM3) and player.metaltboostercooldown == 0 and player.metaltboostercoolfail == 0
				if (player.rings > 9) and not player.powers[pw_carry]
					player.metaltboostercooldown = 5*TICRATE
					player.metaltboosterchargeup = 30
					player.rings = $1 - 10
					S_StartSound(nil, sfx_antiri, player)
				else
				player.metaltboostercoolfail = 35
				S_StartSound(nil, sfx_lose, player)
				end
			end
			if not player.metaltbonus
				if player.metaltboosterchargeup == 30
					P_SetObjectMomZ(player.mo,12*FRACUNIT,false)
					S_StartSound(player.mo, sfx_cdfm43, everyone)
					player.mo.state = S_PLAY_SPRING
					player.pflags = $1|PF_THOKKED
					if player.dashmode < 105
						player.mo.momx = 0
						player.mo.momy = 0
					end
				end
				if player.metaltboosterchargeup == 1
					S_StartSound(player.mo, sfx_shrpgo)
					if player.dashmode < 105
						player.dashmode = 105
						P_Thrust(player.mo, player.mo.angle, 40*FRACUNIT)
					else
						player.dashmode = $ + 20
						P_Thrust(player.mo, player.mo.angle, 10*FRACUNIT)
					end
					player.mo.state = S_PLAY_DASH
					P_SetObjectMomZ(player.mo,1*FRACUNIT,false)
				end
				if player.metaltboostercooldown == 1
				S_StartSound(nil, sfx_nxitem, player)
				end
			else
				if player.metaltboosterchargeup == 30
					P_SetObjectMomZ(player.mo,15*FRACUNIT,false)
					S_StartSound(player.mo, sfx_cdfm43, everyone)
					player.mo.state = S_PLAY_SPRING
					player.pflags = $1|PF_THOKKED
					player.metaltboosterchargeup = 5
					player.metaltboostercooldown = 25
				end
				if player.metaltboosterchargeup == 1
				P_Thrust(player.mo, player.mo.angle, player.speed + 5*FRACUNIT)
				S_StartSound(player.mo, sfx_s3k54, everyone)
				player.mo.state = S_PLAY_DASH
				P_NukeEnemies(player.mo, player.mo, 640*FRACUNIT)
				local energya = P_SpawnPlayerMissile(player.mo, MT_ENERGYBALLCLONE)
				local energyb = P_SpawnPlayerMissile(player.mo, MT_ENERGYBALLCLONE)
				local energyc = P_SpawnPlayerMissile(player.mo, MT_ENERGYBALLCLONE)
				local energyd = P_SpawnPlayerMissile(player.mo, MT_ENERGYBALLCLONE)
				local energye = P_SpawnPlayerMissile(player.mo, MT_ENERGYBALLCLONE)
				local energyf = P_SpawnPlayerMissile(player.mo, MT_ENERGYBALLCLONE)
				local energyg = P_SpawnPlayerMissile(player.mo, MT_ENERGYBALLCLONE)
					if energya and energya.valid
					P_InstaThrust(energya, player.mo.angle, 90*FRACUNIT)
					end
					if energyb and energyb.valid
					P_InstaThrust(energyb, player.mo.angle + ANG10, 90*FRACUNIT)
					end
					if energyc and energyc.valid
					P_InstaThrust(energyc, player.mo.angle - ANG10, 90*FRACUNIT)
					end
					if energyd and energyd.valid
					P_InstaThrust(energyd, player.mo.angle + ANG20, 90*FRACUNIT)
					end
					if energye and energye.valid
					P_InstaThrust(energye, player.mo.angle - ANG20, 90*FRACUNIT) //oops forgot to make comments uhhhh
					end
					if energyf and energyf.valid
					P_InstaThrust(energyf, player.mo.angle + ANG30, 90*FRACUNIT)
					end
					if energyg and energyg.valid
					P_InstaThrust(energyg, player.mo.angle - ANG30, 90*FRACUNIT) //oops forgot to make comments uhhhh
					end
				end
				if player.metaltboostercooldown == 1
				S_StartSound(nil, sfx_nxitem, player)
				end
			end
			if player.metaltbonus and player.dashmode < 105 and player.speed >= player.runspeed and not player.powers[pw_carry]
				player.dashmode = 105
			end
			if player.powers[pw_super] and player.dashmode >= 105
				local beepboos = P_SpawnGhostMobj(player.mo)//Yo     it    work
				beepboos.fuse = 35
			end
			if player.metaltbonus
				player.revitem = MT_ENERGYBALLCLONE
			else
				player.revitem = MT_LASERCLONE
			end
			if player.powers[pw_super] and player.mo.state == S_PLAY_STUN
				local stundash = P_SpawnGhostMobj(player.mo)
				stundash.fuse = 10
				player.drawangle = ($1 + ANG30)
			end
			if player.powers[pw_super] and player.mo.state == S_PLAY_FIRE_FINISH and player.mo.tics > 2
				player.mo.tics = 2
				player.weapondelay = 0
			end
			if player.powers[pw_carry] == CR_NIGHTSMODE
				local nightghost = P_SpawnGhostMobj(player.mo)
				if player.powers[pw_flashing] >= 70 
					nightghost.fuse = 10
					player.drawangle = ($1 + ANG30)
				else
					nightghost.fuse = 7
				end
			end
			player.powers[pw_spacetime] = 10*TICRATE
			player.powers[pw_underwater] = 29*TICRATE
			if player.superrunmusic ~= 0
				CONS_Printf(player, "")
				CONS_Printf(player, "Metalt cannot change musics for Super Run! (Setting is now 0)")
				CONS_Printf(player, "")
				player.superrunmusic = 0
			end
			if player.multitype ~= 3
				CONS_Printf(player, "")
				CONS_Printf(player, "Metalt always has multiability when super, thus this cannot be changed in Super Run! (Setting is now 3)")
				CONS_Printf(player, "")
				player.multitype = 3
			end	
			if player.metaltbeam1 > 0
				player.powers[pw_flashing] = 70
				player.mo.momx = 0
				player.mo.momy = 0
				player.mo.momz = 0
				if  player.metaltbeam1 <= 40
					player.mo.state = S_PLAY_TWINSPIN
				end
			end
			if player.metaltbeam2 > 0
				player.mo.state = S_PLAY_SPRING
				local battleabil = P_SpawnPlayerMissile(player.mo, MT_ENERGYBALLCLONE)
				if battleabil and battleabil.valid
					battleabil.colorized = true
					battleabil.color = player.mo.color
					battleabil.fuse = 10*TICRATE
				end
			end
			if player.metaltbeam1 == -1
				player.metaltbeam1 = 0
				player.mo.state = S_PLAY_SUPER_TRANS1
			end
			
			if player.mo.state == S_PLAY_FLY and player.mo.momz * P_MobjFlip(player.mo) <= 0
				player.mo.state = S_PLAY_JUMP
			end
			
			
			if player.elementalslam and P_IsObjectOnGround(player.mo)
				if (player.mo.eflags & MFE_UNDERWATER)
				or (player.mo.eflags & MFE_TOUCHWATER)
					for i = 1,36 //From Flareon, ish
						local mf = P_SPMAngle(player.mo,MT_EXTRALARGEBUBBLE,player.mo.angle+(ANG10*i),1)
						if mf and mf.valid
							mf.colorized = true
							mf.color = player.mo.color
							mf.scale = player.mo.scale
							mf.fuse = 7*TICRATE
							P_InstaThrust(mf,mf.angle,15*FRACUNIT)
						end
					end
				else
					for i = 1,36 //From Flareon, yes
						local mf = P_SPMAngle(player.mo,MT_SPINFIRE,player.mo.angle+(ANG10*i),1)
						if mf and mf.valid
							mf.colorized = true
							mf.color = player.mo.color
							mf.scale = player.mo.scale
							mf.fuse = 3*TICRATE
							P_InstaThrust(mf,mf.angle,10*FRACUNIT)
						end
					end
				end
				S_StartSound(player.mo,sfx_s3k5f)
				P_Earthquake(player.mo,player.mo,192*FRACUNIT)
				P_InstaThrust(player.mo,player.mo.angle,player.welliwantthisspeedthankyouverymuchsrbtwo)
				player.elementalslam = false
			end
			
			if player.elementalslam 
				if not P_IsObjectOnGround(player.mo)
					player.welliwantthisspeedthankyouverymuchsrbtwo = player.speed
				end
				
				if player.mo.momz * P_MobjFlip(player.mo) > 0
				or player.powers[pw_carry]
				or P_PlayerInPain(player)
					player.elementalslam = false
					player.pflags = $ & !PF_SHIELDABILITY
				end
			end
			
			if player.mo.state == S_PLAY_TWINSPIN and not player.powers[pw_super]
				if not (player.mo.eflags & MFE_UNDERWATER)
					local MetAltShield = P_SpawnMobj(player.mo.x,player.mo.y,player.mo.z,MT_SHIELDLOOKALIKEMETALT)
					if MetAltShield and MetAltShield.valid
						MetAltShield.momx = player.mo.momx
						MetAltShield.momy = player.mo.momy
						MetAltShield.momz = player.mo.momz
						MetAltShield.fuse = 3
						MetAltShield.angle = player.drawangle
						if netgame
							MetAltShield.colorized = true
							MetAltShield.color = player.skincolor
						end
					end
					S_StartSoundAtVolume(player.mo, sfx_cdfm54, 75, everyone)
					if player.powers[pw_flashing] < 3
						player.powers[pw_flashing] = 2
					end
				else
					S_StartSoundAtVolume(player.mo, sfx_cdfm53, 70, everyone)
				end
			end
			if player.mo.state == S_PLAY_TWINSPIN and player.powers[pw_super] and (player.cmd.buttons & BT_SPIN)
				if player.dashmode >= 105
					if P_MobjFlip(player.mo) == 1
						if player.mo.momz < 0
							player.mo.momz = 0
						end
					else
						if player.mo.momz > 0
							player.mo.momz = 0
						end
					end
				else
					if P_MobjFlip(player.mo) == 1
						if player.mo.momz < -3*FRACUNIT
							player.mo.momz = -3*FRACUNIT
						end
					else
						if player.mo.momz > 3*FRACUNIT
							player.mo.momz = 3*FRACUNIT
						end
					end
				end
				local MetAltGlideSpark = P_SpawnMobj(player.mo.x,player.mo.y,player.mo.z,MT_BOXSPARKLE)
				if MetAltGlideSpark and MetAltGlideSpark.valid
					MetAltGlideSpark.fuse = 35
				end
			end
		end
	end
end

//hi c:

addHook("PlayerThink", MetaltThinker) //if ur reading this to learn how to code... good luck lmao
//I am terrible with comments and tbh I wouldnt say im good at lua lmao
//Did I make ALL of this? Why, yes! never said,, I was good, :p

addHook("PlayerThink", function(player)
	if player.mo and player.mo.skin == "metalt" and player.mo.valid and not player.exiting 
		if player.powers[pw_extralife]
			if not player.altoneup
				P_PlayJingleMusic(player, "MK21UP")
				player.altoneup = true
			end
		end
		if player.powers[pw_super] and not player.powers[pw_extralife] and (player.pflags & PF_GODMODE) and not (G_BuildMapName(mapnum) == "MAP25")
			if player.altsup and player.altsup == 1
				P_PlayJingleMusic(player, "MK2HYP")
			elseif not player.altsup
				P_PlayJingleMusic(player, "MK2HYP")
			end
			player.altsup = 2
		end
		if player.powers[pw_super] and not player.powers[pw_extralife] and not (player.pflags & PF_GODMODE) and not (G_BuildMapName(mapnum) == "MAP25")
			if player.altsup and player.altsup == 2
				P_PlayJingleMusic(player, "MK2SUP")
			elseif not player.altsup
				P_PlayJingleMusic(player, "MK2SUP")
			end
			player.altsup = 1
		end
		if not player.powers[pw_extralife] and not player.powers[pw_super] and (player.powers[pw_invulnerability] >= 20*TICRATE) and (player.powers[pw_invulnerability] == player.powers[pw_sneakers]) and not (G_BuildMapName(mapnum) == "MAP25")
			if not player.altemmy
				P_PlayJingleMusic(player, "MK2EMR")
			end
			player.altemmy = true
		end
		if player.powers[pw_invulnerability] and not player.powers[pw_extralife] and not player.powers[pw_super] and player.powers[pw_sneakers] < player.powers[pw_invulnerability] and not (G_BuildMapName(mapnum) == "MAP25")
			if not player.altinv
				P_PlayJingleMusic(player, "MK2INV")
				player.altinv = true
			end
		end
		if player.powers[pw_sneakers] and not player.powers[pw_extralife] and not player.powers[pw_super] and player.powers[pw_sneakers] > player.powers[pw_invulnerability] and not (G_BuildMapName(mapnum) == "MAP25")
			if not player.altsneak
				P_PlayJingleMusic(player, "MK2SNE")
				player.altsneak = true
			end
		end
		if (G_BuildMapName(mapnum) == "MAP25") and not player.powers[pw_extralife]
			if not player.versusone
				P_PlayJingleMusic(player, "MK2VS1")
				player.versusone = true
			end
		end
	end
end)

addHook("ShouldJingleContinue", function(player)
	if (G_BuildMapName(mapnum) == "MAP25")
		return true
	end
end, "MK2VS1")

addHook("ShouldJingleContinue", function(player)
	if player.powers[pw_super] and (player.pflags & PF_GODMODE)
		return true
	end
end, "MK2HYP")

addHook("ShouldJingleContinue", function(player)
	if player.powers[pw_super] and not (player.pflags & PF_GODMODE)
		return true
	end
end, "MK2SUP")

addHook("ShouldJingleContinue", function(player)
	if not player.powers[pw_super] and (player.powers[pw_invulnerability] >= 1) and (player.powers[pw_invulnerability] == player.powers[pw_sneakers])
		return true
	end
end, "MK2EMR")

addHook("ShouldJingleContinue", function(player)
	if not player.powers[pw_super] and (player.powers[pw_invulnerability] > player.powers[pw_sneakers]) and player.powers[pw_invulnerability] > TICRATE
		return true
	end
end, "MK2INV")

addHook("ShouldJingleContinue", function(player)
	if not player.powers[pw_super] and (player.powers[pw_invulnerability] < player.powers[pw_sneakers]) and player.powers[pw_sneakers] > TICRATE
		return true
	end
end, "MK2SNE")

addHook("JumpSpinSpecial", function(player)
	if player.mo.skin == "metalt" and not (player.pflags & PF_SHIELDABILITY) and not (player.pflags & PF_THOKKED)
		if player.powers[pw_super] > 1
			if player.metaltabil == 1
				if player.powers[pw_shield] == SH_NONE
				or player.powers[pw_shield] == SH_PITY
				or player.powers[pw_shield] == SH_PINK
				or player.powers[pw_shield] == SH_FIREFLOWER
					if P_LookForEnemies(player,true,false)
						P_HomingAttack(player.mo,P_LookForEnemies(player,true,false))
						P_SpawnThokMobj(player)
						S_StartSound(player.mo,sfx_cdfm23)
						player.pflags = $|PF_THOKKED|PF_JUMPED
					else
						P_InstaThrust(player.mo,player.mo.angle,player.speed)
						P_SpawnThokMobj(player)
						player.drawangle = player.mo.angle
						S_StartSound(player.mo,sfx_cdfm23)
						if player.dashmode < 105
							player.mo.state = S_PLAY_SPRING
							player.pflags = $|PF_THOKKED & !PF_JUMPED
						else
							player.mo.state = S_PLAY_DASH
							player.pflags = $|PF_THOKKED
						end
					end
				else
					if (player.powers[pw_shield] & SH_FORCE)
						player.mo.momz = (-$)*(2)
						P_Earthquake(player.mo,player.mo,256*FRACUNIT)
						S_StartSound(player.mo,sfx_corkp)
						S_StartSound(player.mo,sfx_corkh)
						player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
						return true
					elseif player.powers[pw_shield] == SH_WHIRLWIND
						if not player.whirlwindused
							for wooshy = 1,16 //From Zorua's lua - I have permission (from myself(duh))
								local rx = P_RandomRange(-64,64)*FRACUNIT
								local ry = P_RandomRange(-64,64)*FRACUNIT
								local swoosh = P_SpawnMobj(player.mo.x+rx,player.mo.y+ry,player.mo.z,MT_THOK)
								if swoosh and swoosh.valid
									swoosh.momx = player.mo.momx
									swoosh.momy = player.mo.momy
									swoosh.scale = player.mo.scale/3
									swoosh.momz = P_RandomRange(50,70) *(FRACUNIT/2)
									swoosh.tics = 35
									if netgame
										swoosh.color = player.skincolor
									else
										swoosh.color = player.mo.color
									end
								end
							end
							P_SetObjectMomZ(player.mo,30*FRACUNIT,false)
							S_StartSound(player.mo,sfx_wdjump)
							S_StartSound(player.mo,sfx_prloop)
							player.mo.state = S_PLAY_FLY
							player.whirlwindused = true
							player.pflags = $|PF_JUMPED & !PF_THOKKED
							return true
						end
					elseif player.powers[pw_shield] == SH_FLAMEAURA
						if player.dashmode < 105
							player.dashmode = 105
							P_Thrust(player.mo,player.mo.angle,FRACUNIT*10)
						else
							player.dashmode = $ + 10
							P_Thrust(player.mo,player.mo.angle,FRACUNIT*30)
						end
						S_StartSound(player.mo,sfx_s3k43)
						S_StartSound(player.mo,sfx_s1a5)
						player.mo.state = S_PLAY_DASH
						player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
						return true
					elseif player.powers[pw_shield] == SH_BUBBLEWRAP
						if player.mo.momz*P_MobjFlip(player.mo) < (0)
							player.mo.momz = $*4
						else
							player.mo.momz = -$*2
						end
						S_StartSound(player.mo,sfx_s3k44)
						S_StartSound(player.mo,sfx_s1aa)
						player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
						return true
					elseif player.powers[pw_shield] == SH_THUNDERCOIN
						for i = 1,30
							local randomx = (player.mo.x) + P_RandomRange(-128,128)*FRACUNIT
							local randomy = (player.mo.y) + P_RandomRange(-128,128)*FRACUNIT
							local star = P_SpawnMobj(randomx,randomy,player.mo.z+FRACUNIT*P_RandomRange(-8,40),MT_SHOCKWAVE)
							if star and star.valid
								star.angle = player.mo.angle
								local rndzush = (player.mo.momz + (33*FRACUNIT)) * P_MobjFlip(player.mo)
								star.target = player.mo
								star.fuse = 175
								star.momx = player.mo.momx + FRACUNIT*P_RandomRange(-16,16)
								star.momy = player.mo.momy + FRACUNIT*P_RandomRange(-16,16)
								P_SetObjectMomZ(star,(rndzush*player.mo.scale)/FRACUNIT,true)
								star.colorized = true
								star.state = S_BOXSPARKLE1
								star.tics = -1
								star.scale = player.mo.scale
								star.flags = ($|MF_GRENADEBOUNCE|MF_BOUNCE & !MF_PAIN & !MF_NOGRAVITY)
								if netgame
									star.color = player.skincolor
								else
									star.color = player.mo.color
								end	
							end
						end
						P_SetObjectMomZ(player.mo,33*FRACUNIT,true)
						player.mo.state = S_PLAY_SPRING
						S_StartSound(player.mo,sfx_s3k45)
						S_StartSound(player.mo,sfx_s3k5e)
						player.pflags = $|PF_SHIELDABILITY|PF_THOKKED & !PF_JUMPED
						return true
					elseif player.powers[pw_shield] == SH_ELEMENTAL
						P_SetObjectMomZ(player.mo,-70*FRACUNIT,false)
						player.mo.state = S_PLAY_MELEE
						player.elementalslam = true
						S_StartSound(player.mo,sfx_s3k51)
						S_StartSound(player.mo,sfx_s3k5d)
						player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
						return true
					elseif player.powers[pw_shield] == SH_ATTRACT
						if P_LookForEnemies(player,false,true)
							player.mo.momx = (P_LookForEnemies(player,false,true).x - player.mo.x)/3
							player.mo.momy = (P_LookForEnemies(player,false,true).y - player.mo.y)/3
							player.mo.momz = (P_LookForEnemies(player,false,true).z - player.mo.z)/3
							S_StartSound(player.mo,sfx_s3k40)
							S_StartSound(player.mo,sfx_s3k60)
							player.mo.state = S_PLAY_DASH
							player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
							if player.dashmode < 105
								player.dashmode = 105
							end
							return true
						else
							P_SetObjectMomZ(player.mo, -(player.speed),false)
							player.mo.state = S_PLAY_STUN
							S_StartSound(player.mo,sfx_s3ka6)
							S_StartSound(player.mo,sfx_s3k6c)
							player.pflags = $|PF_SHIELDABILITY|PF_THOKKED & !PF_JUMPED
							return true
						end
					elseif player.powers[pw_shield] == SH_ARMAGEDDON
						P_SetObjectMomZ(player.mo,player.speed*2,false)
						player.mo.state = S_PLAY_FLY
						player.whirlwindused = true
						P_BlackOw(player)
						S_StartSound(player.mo,sfx_s3k83)
						player.pflags = $|PF_SHIELDABILITY|PF_THOKKED|PF_SPINNING
						return true
					end
				end
			else
				if player.powers[pw_shield] == SH_NONE
				or player.powers[pw_shield] == SH_PITY
				or player.powers[pw_shield] == SH_PINK
				or player.powers[pw_shield] == SH_FIREFLOWER
					if P_LookForEnemies(player,false,true)
						P_SpawnMissile(player.mo,P_LookForEnemies(player,false,true),player.revitem)
						local z = P_SpawnGhostMobj(player.mo)
							z.color = player.mo.color
							z.fuse = 5
						player.mo.state = S_PLAY_SPRING
						player.pflags = $|PF_THOKKED & !PF_JUMPED
					else
						P_SpawnPlayerMissile(player.mo,player.revitem,MF2_SCATTER)
						local z = P_SpawnGhostMobj(player.mo)
							z.color = player.mo.color
							z.fuse = 5
						player.mo.state = S_PLAY_SPRING
						player.pflags = $|PF_THOKKED & !PF_JUMPED
					end
				else
					if (player.powers[pw_shield] & SH_FORCE)
						player.altforcebouncetics = 30 //From Eevee - thanks eevee
						
						local forcefx = P_SpawnMobj(player.mo.x,player.mo.y,player.mo.z,MT_THOK)
						if forcefx and forcefx.valid
							forcefx.state = S_FORC21
							forcefx.tics = 30
							forcefx.scale = player.mo.scale
							forcefx.destscale = 1
							forcefx.colorized = true
							if netgame
								forcefx.color = player.skincolor
							else
								forcefx.color =  player.mo.color
							end
						end
						
						local forcefx = P_SpawnMobj(player.mo.x,player.mo.y,player.mo.z,MT_THOK)
						if forcefx and forcefx.valid
							forcefx.state = S_FORC21
							forcefx.tics = 30
							forcefx.scale = player.mo.scale
							forcefx.destscale = player.mo.scale*2
							forcefx.colorized = true
							if netgame
								forcefx.color = player.skincolor
							else
								forcefx.color =  player.mo.color
							end
						end
										
						S_StartSound(player.mo,sfx_bnce1)
						S_StartSound(player.mo,sfx_s3k9c)
						player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
						return true
					elseif player.powers[pw_shield] == SH_WHIRLWIND
						for wooshy = 1,20 //From Zorua's lua - I have permission (from myself(duh))
							local rx = P_RandomRange(-64,64)*FRACUNIT
							local ry = P_RandomRange(-64,64)*FRACUNIT
							local swoosh = P_SpawnMobj(player.mo.x+rx,player.mo.y+ry,player.mo.z,MT_THOK)
							if swoosh and swoosh.valid
								swoosh.momx = player.mo.momx
								swoosh.momy = player.mo.momy
								swoosh.scale = player.mo.scale/3
								swoosh.momz = P_RandomRange(90,110) *(FRACUNIT/2)
								swoosh.tics = 70
								if netgame
									swoosh.color = player.skincolor
								else
									swoosh.color = player.mo.color
								end
							end
						end
						P_SetObjectMomZ(player.mo,50*FRACUNIT,false)
						S_StartSound(player.mo,sfx_wdjump)
						S_StartSound(player.mo,sfx_s3k8e)
						player.mo.state = S_PLAY_SPRING
						player.pflags = $|PF_THOKKED|PF_SHIELDABILITY
						return true
					elseif player.powers[pw_shield] == SH_FLAMEAURA
						if player.dashmode < 105
							player.dashmode = 105
						end
						P_InstaThrust(player.mo,player.drawangle,FRACUNIT*65)
						S_StartSound(player.mo,sfx_s3k43)
						S_StartSound(player.mo,sfx_s3k95)
						player.mo.state = S_PLAY_DASH
						player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
						return true
					elseif player.powers[pw_shield] == SH_BUBBLEWRAP
						if player.mo.momz*P_MobjFlip(player.mo) < (0)
							player.mo.momz = $*3
						else
							player.mo.momz = -$*3
						end
						S_StartSound(player.mo,sfx_s3k44)
						S_StartSound(player.mo,sfx_s3kaa)
						player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
						return true
					elseif player.powers[pw_shield] == SH_THUNDERCOIN
						if P_LookForEnemies(player,false,true)
							local bewmy = P_SpawnMobj(P_LookForEnemies(player,false,true).x,P_LookForEnemies(player,false,true).y,P_LookForEnemies(player,false,true).z+FRACUNIT*8,MT_CYBRAKDEMON_VILE_EXPLOSION)
							if bewmy and bewmy.valid
								bewmy.scale = P_LookForEnemies(player,false,true).scale
								bewmy.colorized = true
								if netgame
									bewmy.color = player.skincolor
								else
									bewmy.color = player.mo.color
								end
							end
							for bzzt = 1,40
								local star = P_SpawnMobj(P_LookForEnemies(player,false,true).x,P_LookForEnemies(player,false,true).y,P_LookForEnemies(player,false,true).z+FRACUNIT*8,MT_THUNDERCOIN_SPARK)
								star.momx = P_RandomRange(-30,30)*FRACUNIT
								star.momy = P_RandomRange(-30,30)*FRACUNIT
								star.momz = P_RandomRange(-30,30)*FRACUNIT
								star.fuse = 20
								star.colorized = true
								if netgame
									star.color = player.skincolor
								else
									star.color = player.mo.color
								end
							end
							for i = 1,90
								local shock = P_SpawnMobj(P_LookForEnemies(player,false,true).x, P_LookForEnemies(player,false,true).y, P_LookForEnemies(player,false,true).z, MT_SHOCKWAVE)
								if shock and shock.valid
									shock.target = player.mo
									shock.angle = ((P_LookForEnemies(player,false,true).angle) + ((i*ANG1)*4))
									shock.fuse = 350
									P_InstaThrust(shock,shock.angle,35*FRACUNIT)
									shock.colorized = true
									if netgame
										shock.color = player.skincolor
									else
										shock.color = player.mo.color
									end
									shock.flags = ($ & !MF_PAIN)
								end
							end
							P_DamageMobj(P_LookForEnemies(player,false,true),player.mo,player.mo,1,DMG_ELECTRIC)
						else
							for i = 0,40
							local shock = P_SpawnMobj(player.mo.x, player.mo.y, player.mo.z, MT_SHOCKWAVE)
								if shock and shock.valid
									shock.target = player.mo
									shock.angle = ((player.mo.angle - ANG20) + (i*ANG1))
									shock.fuse = 105
									P_InstaThrust(shock,shock.angle,40*FRACUNIT)
									shock.colorized = true
									if netgame
										shock.color = player.skincolor
									else
										shock.color = player.mo.color
									end
								end
							end
						end
						S_StartSound(player.mo,sfx_s3k79)
						S_StartSound(player.mo,sfx_s3k45)
						player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
						return true
					elseif player.powers[pw_shield] == SH_ELEMENTAL
						if P_LookForEnemies(player,false,true)
							for i = 1,72
								local mf = P_SpawnMobj(P_LookForEnemies(player,false,true).x,P_LookForEnemies(player,false,true).y,P_LookForEnemies(player,false,true).z,MT_SPINFIRE)
								if mf and mf.valid
									mf.colorized = true
									mf.color = player.mo.color
									mf.scale = player.mo.scale
									mf.fuse = 10*TICRATE
									mf.target = player.mo
									mf.angle = player.mo.angle+((ANG1*5)*i)
									P_InstaThrust(mf,mf.angle,20*FRACUNIT)
								end
							end
							S_StartSound(player.mo,sfx_s233)
							S_StartSound(player.mo,sfx_s3k70)
							P_DamageMobj(P_LookForEnemies(player,false,true),player.mo,player.mo,1,DMG_FIRE)
						else
							if (player.mo.eflags & MFE_UNDERWATER)
								for i = 1,36
									local mf = P_SPMAngle(player.mo,MT_EXTRALARGEBUBBLE,player.mo.angle+(ANG10*i),1)
									if mf and mf.valid
										mf.colorized = true
										mf.color = player.mo.color
										mf.scale = player.mo.scale
										mf.fuse = 15*TICRATE
										P_InstaThrust(mf,mf.angle,20*FRACUNIT)
									end
								end
								S_StartSound(player.mo,sfx_s3ka8)
								S_StartSound(player.mo,sfx_gloop)
							else
								for i = 1,50
									local rang = P_RandomRange(-25,25)
									local mf = P_SPMAngle(player.mo,MT_GOOP,player.mo.angle+(rang*ANG1),1)
									if mf and mf.valid
										local rust = P_RandomRange(30,70)
										local vust = P_RandomRange(-40,40)
										mf.colorized = true
										mf.sprite = SPR_BUBL
										mf.frame = A
										mf.tics = 15*TICRATE
										mf.color = player.mo.color
										mf.scale = player.mo.scale*2
										mf.fuse = 15*TICRATE
										mf.flags = ($|MF_MISSILE|MF_BOUNCE & !MF_PAIN)
										P_SetObjectMomZ(mf,(vust)*(player.mo.scale*2),true)
										P_InstaThrust(mf,mf.angle,rust*(player.mo.scale*2))
									end
								end
								S_StartSound(player.mo,sfx_gspray)
								S_StartSound(player.mo,sfx_s3k4b)
							end
						end
						player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
						return true
					elseif player.powers[pw_shield] == SH_ATTRACT
						if not player.weapondelay
							if P_LookForEnemies(player,false,true)
								local bewmy = P_SpawnMobj(P_LookForEnemies(player,false,true).x,P_LookForEnemies(player,false,true).y,P_LookForEnemies(player,false,true).z,MT_CYBRAKDEMON_VILE_EXPLOSION)
								if bewmy and bewmy.valid
									bewmy.scale = P_LookForEnemies(player,false,true).scale
									bewmy.colorized = true
									if netgame
										bewmy.color = player.skincolor
									else
										bewmy.color = SKINCOLOR_YELLOW
									end
								end
								S_StartSound(player.mo,sfx_s3k40)
								S_StartSound(player.mo,sfx_s3k42)
								player.weapondelay = 8
								P_DamageMobj(P_LookForEnemies(player,false,true),player.mo,player.mo,1,DMG_ELECTRIC)
							else
								P_SetObjectMomZ(player.mo, -(player.speed),false)
								player.mo.state = S_PLAY_ROLL
								S_StartSound(player.mo,sfx_s3ka6)
								S_StartSound(player.mo,sfx_s3k47)
								player.pflags = $|PF_SHIELDABILITY|PF_THOKKED|PF_SPINNING
							end
						end
						return true
					elseif player.powers[pw_shield] == SH_ARMAGEDDON
						if P_LookForEnemies(player,false,true)
							local mine = P_SpawnMissile(player.mo,P_LookForEnemies(player,false,true),MT_FBOMB)
								if mine and mine.valid
								mine.colorized = true
								mine.color = player.mo.color
								mine.target = player.mo
								mine.state = S_DRAGONMINE_METALT
								mine.scale = player.mo.scale*2
								mine.tics = TICRATE*6
								mine.momx = $*6
								mine.momy = $*6
								mine.momz = $*6
								mine.flags = ($|MF_MISSILE|MF_STICKY|MF_GRENADEBOUNCE & !MF_SPECIAL)
								
								end
							
							local z = P_SpawnGhostMobj(player.mo)
								z.color = player.mo.color
								z.fuse = 5
						else
							local mine = P_SpawnPlayerMissile(player.mo,MT_FBOMB,MF2_RAILRING)
								if mine and mine.valid
								mine.colorized = true
								mine.color = player.mo.color
								mine.target = player.mo
								mine.state = S_DRAGONMINE_METALT
								mine.scale = player.mo.scale*2
								mine.tics = TICRATE*6
								mine.momx = $*6
								mine.momy = $*6
								mine.momz = $*6
								mine.flags = ($|MF_MISSILE|MF_STICKY|MF_GRENADEBOUNCE & !MF_SPECIAL)
								
								end
							local z = P_SpawnGhostMobj(player.mo)
								z.color = player.mo.color
								z.fuse = 5
						end
						S_StartSound(player.mo,sfx_kc40)
						S_StartSound(player.mo,sfx_cdfm28)
						player.mo.state = S_PLAY_SPRING
						player.pflags = $|PF_SHIELDABILITY|PF_THOKKED & !PF_JUMPED
						return true
					end
				end
			end
		else
			if player.powers[pw_shield] == SH_NONE
			or player.powers[pw_shield] == SH_PITY
			or player.powers[pw_shield] == SH_PINK
				if player.metaltabil == 1
					if P_LookForEnemies(player,true,false)
						P_HomingAttack(player.mo,P_LookForEnemies(player,true,false))
						P_SpawnThokMobj(player)
						S_StartSound(player.mo,sfx_cdfm23)
						player.pflags = $|PF_THOKKED|PF_JUMPED
					else
						P_InstaThrust(player.mo,player.mo.angle,player.speed)
						P_SpawnThokMobj(player)
						player.drawangle = player.mo.angle
						S_StartSound(player.mo,sfx_cdfm23)
						if player.dashmode < 105
							player.mo.state = S_PLAY_SPRING
							player.pflags = $|PF_THOKKED & !PF_JUMPED
						else
							player.mo.state = S_PLAY_DASH
							player.pflags = $|PF_THOKKED
						end
					end
				else
					if P_LookForEnemies(player,false,true)
						P_SpawnMissile(player.mo,P_LookForEnemies(player,false,true),player.revitem)
						local z = P_SpawnGhostMobj(player.mo)
							z.color = player.mo.color
							z.fuse = 5
						player.mo.state = S_PLAY_SPRING
						player.pflags = $|PF_THOKKED & !PF_JUMPED
					else
						P_SpawnPlayerMissile(player.mo,player.revitem,MF2_SCATTER)
						local z = P_SpawnGhostMobj(player.mo)
							z.color = player.mo.color
							z.fuse = 5
						player.mo.state = S_PLAY_SPRING
						player.pflags = $|PF_THOKKED & !PF_JUMPED
					end
				end
			end
		end
	end
end)

addHook("PlayerCanDamage", function(hahagay, bonked) //im the coolest
	if hahagay.mo and hahagay.valid and hahagay.mo.health
		if hahagay.mo.state == S_PLAY_FLY and hahagay.whirlwindused
			return true
		end
	end
end)

addHook("TouchSpecial",function(bubble,metalt)
	if metalt and metalt.valid and metalt.player and metalt.health and metalt.skin == "metalt"
		return true //Literally, do fuck all
	end
end,MT_EXTRALARGEBUBBLE)//The bubble uses MF_SPECIAL so this IN THEORY!!!! Should prevent get buubley



addHook("ShieldSpecial", function(player)
	if player.mo.skin == "metalt" and not (player.pflags & PF_SHIELDABILITY) and not (player.cmd.buttons & BT_CUSTOM1) //Holding Custom1 lets you use the default shield abilities, regardless of TwinVolt or Homing
		if player.metaltabil //HOMO ING HAH a im funny
			
			if (player.powers[pw_shield] & SH_FORCE)
				player.mo.momz = (-$)*(5/4)
				P_Earthquake(player.mo,player.mo,128*FRACUNIT)
				S_StartSound(player.mo,sfx_corkp)
				player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
				return true
			elseif player.powers[pw_shield] == SH_WHIRLWIND
				if player.whirlwindused
					S_StartSound(nil,sfx_adderr,player) //As a funny spyro proto build once said: "Piss Off"
					return true
				else
					for wooshy = 1,16 //From Zorua's lua - I have permission (from myself(duh))
						local rx = P_RandomRange(-64,64)*FRACUNIT
						local ry = P_RandomRange(-64,64)*FRACUNIT
						local swoosh = P_SpawnMobj(player.mo.x+rx,player.mo.y+ry,player.mo.z,MT_THOK)
						if swoosh and swoosh.valid
							swoosh.momx = player.mo.momx
							swoosh.momy = player.mo.momy
							swoosh.scale = player.mo.scale/3
							swoosh.momz = P_RandomRange(30,50) *(FRACUNIT/2)
							swoosh.tics = 35
							if netgame
								swoosh.color = player.skincolor
							else
								swoosh.color = player.mo.color
							end
						end
					end
					P_SetObjectMomZ(player.mo,20*FRACUNIT,false)
					S_StartSound(player.mo,sfx_wdjump)
					player.mo.state = S_PLAY_FLY
					player.whirlwindused = true
					player.pflags = $|PF_JUMPED & !PF_THOKKED
					return true
				end
			elseif player.powers[pw_shield] == SH_FLAMEAURA
				if player.dashmode < 105
					player.dashmode = 105
					P_Thrust(player.mo,player.mo.angle,FRACUNIT*10)
				else
					player.dashmode = $ + 5
					P_Thrust(player.mo,player.mo.angle,FRACUNIT*5)
				end
				S_StartSound(player.mo,sfx_s3k43)
				player.mo.state = S_PLAY_DASH
				player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
				return true
			elseif player.powers[pw_shield] == SH_BUBBLEWRAP
				if player.mo.momz*P_MobjFlip(player.mo) < (0)
					player.mo.momz = $*2
				else
					player.mo.momz = -$
				end
				S_StartSound(player.mo,sfx_s3k44)
				player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
				return true
			elseif player.powers[pw_shield] == SH_THUNDERCOIN //I love these names so much lowkey they're nice af
				for i = 1,20 //Taken from Jolteon's lua - once again I asked myself for permission first :p
					local randomx = (player.mo.x) + P_RandomRange(-128,128)*FRACUNIT //Why are you reading this anyways lol
					local randomy = (player.mo.y) + P_RandomRange(-128,128)*FRACUNIT //It's not interesting tbh
					local star = P_SpawnMobj(randomx,randomy,player.mo.z+FRACUNIT*P_RandomRange(-8,40),MT_SHOCKWAVE)
					if star and star.valid
						star.angle = player.mo.angle
						local rndzush = (player.mo.momz + (25*FRACUNIT)) * P_MobjFlip(player.mo)
						star.target = player.mo
						star.fuse = 105
						star.momx = player.mo.momx + FRACUNIT*P_RandomRange(-16,16)
						star.momy = player.mo.momy + FRACUNIT*P_RandomRange(-16,16)
						P_SetObjectMomZ(star,(rndzush*player.mo.scale)/FRACUNIT,true)
						star.colorized = true
						star.state = S_BOXSPARKLE1
						star.tics = -1
						star.scale = player.mo.scale
						star.flags = ($|MF_GRENADEBOUNCE|MF_BOUNCE & !MF_PAIN & !MF_NOGRAVITY)
						if netgame
							star.color = player.skincolor
						else
							star.color = player.mo.color
						end	
					end
				end
				P_SetObjectMomZ(player.mo,25*FRACUNIT,true)
				player.mo.state = S_PLAY_SPRING
				S_StartSound(player.mo,sfx_s3k45)
				player.pflags = $|PF_SHIELDABILITY|PF_THOKKED & !PF_JUMPED
				return true
			elseif player.powers[pw_shield] == SH_ELEMENTAL
				P_SetObjectMomZ(player.mo,-45*FRACUNIT,false)
				player.mo.state = S_PLAY_MELEE
				player.elementalslam = true
				S_StartSound(player.mo,sfx_s3k51)
				player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
				return true
			elseif player.powers[pw_shield] == SH_ATTRACT
				if P_LookForEnemies(player,false,false)
					player.mo.momx = (P_LookForEnemies(player,false,false).x - player.mo.x)/5
					player.mo.momy = (P_LookForEnemies(player,false,false).y - player.mo.y)/5
					player.mo.momz = (P_LookForEnemies(player,false,false).z - player.mo.z)/5
					S_StartSound(player.mo,sfx_s3k40)
					player.mo.state = S_PLAY_DASH
					player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
					if player.dashmode < 105
						player.dashmode = 105
					end
					return true
				else
					P_SetObjectMomZ(player.mo, -(player.speed/2),false)
					player.mo.state = S_PLAY_STUN
					S_StartSound(player.mo,sfx_s3ka6)
					player.pflags = $|PF_SHIELDABILITY|PF_THOKKED & !PF_JUMPED
					return true
				end
			elseif player.powers[pw_shield] == SH_ARMAGEDDON
				P_SetObjectMomZ(player.mo,player.speed,false)
				player.mo.state = S_PLAY_FLY
				player.whirlwindused = true
				P_BlackOw(player)
				player.momx = 0
				player.momy = 0
				player.pflags = $|PF_SHIELDABILITY|PF_THOKKED|PF_SPINNING
				return true
			end
			
		else //TwinVolt: the shieldening
			if (player.powers[pw_shield] & SH_FORCE)
				player.altforcebouncetics = 15 //From Eevee - thanks eevee
 				
				local forcefx = P_SpawnMobj(player.mo.x,player.mo.y,player.mo.z,MT_THOK)
				if forcefx and forcefx.valid
					forcefx.state = S_FORC21
					forcefx.tics = 15
					forcefx.scale = player.mo.scale
					forcefx.destscale = 1
					forcefx.colorized = true
					if netgame
						forcefx.color = player.skincolor
					else
						forcefx.color =  player.mo.color
					end
				end
								
				S_StartSound(player.mo,sfx_bnce1)
				player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
				return true
			elseif player.powers[pw_shield] == SH_WHIRLWIND
				for wooshy = 1,20 //From Zorua's lua - I have permission (from myself(duh))
					local rx = P_RandomRange(-64,64)*FRACUNIT
					local ry = P_RandomRange(-64,64)*FRACUNIT
					local swoosh = P_SpawnMobj(player.mo.x+rx,player.mo.y+ry,player.mo.z,MT_THOK)
					if swoosh and swoosh.valid
						swoosh.momx = player.mo.momx
						swoosh.momy = player.mo.momy
						swoosh.scale = player.mo.scale/3
						swoosh.momz = P_RandomRange(50,70) *(FRACUNIT/2)
						swoosh.tics = 35
						if netgame
							swoosh.color = player.skincolor
						else
							swoosh.color = player.mo.color
						end
					end
				end
				P_SetObjectMomZ(player.mo,30*FRACUNIT,false)
				S_StartSound(player.mo,sfx_wdjump)
				player.mo.state = S_PLAY_SPRING
				player.pflags = $|PF_THOKKED & !PF_JUMPED & !PF_SPINNING
				return true
			elseif player.powers[pw_shield] == SH_FLAMEAURA
				if player.dashmode < 105
					player.dashmode = 105
				end
				P_InstaThrust(player.mo,player.drawangle,FRACUNIT*40)
				S_StartSound(player.mo,sfx_s3k43)
				player.mo.state = S_PLAY_DASH
				player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
				return true
			elseif player.powers[pw_shield] == SH_BUBBLEWRAP
				if player.mo.momz*P_MobjFlip(player.mo) < (0)
					player.mo.momz = $*(3/2)
				else
					player.mo.momz = -$*(3/2)
				end
				S_StartSound(player.mo,sfx_s3k44)
				player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
				return true
			elseif player.powers[pw_shield] == SH_THUNDERCOIN
				if P_LookForEnemies(player,false,true)
					local bewmy = P_SpawnMobj(P_LookForEnemies(player,false,true).x,P_LookForEnemies(player,false,true).y,P_LookForEnemies(player,false,true).z+FRACUNIT*8,MT_CYBRAKDEMON_VILE_EXPLOSION)
					if bewmy and bewmy.valid
						bewmy.scale = P_LookForEnemies(player,false,true).scale
						bewmy.colorized = true
						if netgame
							bewmy.color = player.skincolor
						else
							bewmy.color = SKINCOLOR_YELLOW
						end
					end
					for bzzt = 1,30
						local star = P_SpawnMobj(P_LookForEnemies(player,false,true).x,P_LookForEnemies(player,false,true).y,P_LookForEnemies(player,false,true).z+FRACUNIT*8,MT_THUNDERCOIN_SPARK)
						star.momx = P_RandomRange(-30,30)*FRACUNIT
						star.momy = P_RandomRange(-30,30)*FRACUNIT
						star.momz = P_RandomRange(-30,30)*FRACUNIT
						star.fuse = 20
						star.colorized = true
						if netgame
							star.color = player.skincolor
						else
							star.color = SKINCOLOR_TEAL
						end
					end
					for i = 1,72
						local shock = P_SpawnMobj(P_LookForEnemies(player,false,true).x, P_LookForEnemies(player,false,true).y, P_LookForEnemies(player,false,true).z, MT_SHOCKWAVE)
						if shock and shock.valid
							shock.target = player.mo
							shock.angle = ((P_LookForEnemies(player,false,true).angle) + ((i*ANG1)*5))
							shock.fuse = 175
							P_InstaThrust(shock,shock.angle,30*FRACUNIT)
							shock.colorized = true
							if netgame
								shock.color = player.skincolor
							else
								shock.color = SKINCOLOR_ICY
							end
							shock.flags = ($ & !MF_PAIN)
						end
					end
					P_DamageMobj(P_LookForEnemies(player,false,true),player.mo,player.mo,1,DMG_ELECTRIC)
				else
					for i = 0,20
					local shock = P_SpawnMobj(player.mo.x, player.mo.y, player.mo.z, MT_SHOCKWAVE)
						if shock and shock.valid
							shock.target = player.mo
							shock.angle = ((player.mo.angle - ANG20) + (i*ANG2))
							shock.fuse = 105
							P_InstaThrust(shock,shock.angle,25*FRACUNIT)
							shock.colorized = true
							if netgame
								shock.color = player.skincolor
							else
								shock.color = SKINCOLOR_TEAL
							end
						end
					end
				end
				S_StartSound(player.mo,sfx_s3k45)
				player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
				return true
			elseif player.powers[pw_shield] == SH_ELEMENTAL
				if P_LookForEnemies(player,false,true)
					for i = 1,36 //From Flareon, ish
						local mf = P_SpawnMobj(P_LookForEnemies(player,false,true).x,P_LookForEnemies(player,false,true).y,P_LookForEnemies(player,false,true).z,MT_SPINFIRE)
						if mf and mf.valid
							mf.colorized = true
							mf.color = player.mo.color
							mf.scale = player.mo.scale
							mf.fuse = 10*TICRATE
							mf.target = player.mo
							mf.angle = player.mo.angle+(ANG10*i)
							P_InstaThrust(mf,mf.angle,15*FRACUNIT)
						end
					end
					S_StartSound(player.mo,sfx_s233)
					P_DamageMobj(P_LookForEnemies(player,false,true),player.mo,player.mo,1,DMG_FIRE)
				else
					if (player.mo.eflags & MFE_UNDERWATER)
						for i = 1,18 //From Flareon, ish
							local mf = P_SPMAngle(player.mo,MT_EXTRALARGEBUBBLE,player.mo.angle+(ANG20*i),1)
							if mf and mf.valid
								mf.colorized = true
								mf.color = player.mo.color
								mf.scale = player.mo.scale
								mf.fuse = 10*TICRATE
								P_InstaThrust(mf,mf.angle,15*FRACUNIT)
							end
						end
						S_StartSound(player.mo,sfx_gloop)
					else
						for i = 1,36
							local rang = P_RandomRange(-20,20)
							local mf = P_SPMAngle(player.mo,MT_GOOP,player.mo.angle+(rang*ANG1),1)
							if mf and mf.valid
								local rust = P_RandomRange(20,50)
								local vust = P_RandomRange(-20,20)
								mf.colorized = true
								mf.sprite = SPR_BUBL
								mf.frame = A
								mf.tics = 10*TICRATE
								mf.color = player.mo.color
								mf.scale = player.mo.scale
								mf.fuse = 10*TICRATE
								mf.flags = ($|MF_MISSILE|MF_BOUNCE & !MF_PAIN)
								P_SetObjectMomZ(mf,(vust)*player.mo.scale,true)
								P_InstaThrust(mf,mf.angle,rust*player.mo.scale)
							end
						end
						S_StartSound(player.mo,sfx_gspray)
					end
				end
				player.pflags = $|PF_SHIELDABILITY|PF_THOKKED
				return true
			elseif player.powers[pw_shield] == SH_ATTRACT
				if P_LookForEnemies(player,false,false)
					local bewmy = P_SpawnMobj(P_LookForEnemies(player,false,false).x,P_LookForEnemies(player,false,false).y,P_LookForEnemies(player,false,false).z,MT_CYBRAKDEMON_VILE_EXPLOSION)
					if bewmy and bewmy.valid
						bewmy.scale = P_LookForEnemies(player,false,false).scale
						bewmy.colorized = true
						if netgame
							bewmy.color = player.skincolor
						else
							bewmy.color = SKINCOLOR_YELLOW
						end
					end
					S_StartSound(player.mo,sfx_s3k40)
					P_DamageMobj(P_LookForEnemies(player,false,false),player.mo,player.mo,1,DMG_ELECTRIC)
				else
					P_SetObjectMomZ(player.mo, -(player.speed/2),false)
					player.mo.state = S_PLAY_ROLL
					S_StartSound(player.mo,sfx_s3ka6)
					player.pflags = $|PF_SHIELDABILITY|PF_THOKKED|PF_SPINNING
				end
				return true
			elseif player.powers[pw_shield] == SH_ARMAGEDDON
				if P_LookForEnemies(player,false,true)
					local mine = P_SpawnMissile(player.mo,P_LookForEnemies(player,false,true),MT_FBOMB)
						if mine and mine.valid
						mine.colorized = true
						mine.color = player.mo.color
						mine.target = player.mo
						mine.state = S_DRAGONMINE_METALT
						mine.tics = TICRATE*10
						mine.momx = $*4
						mine.momy = $*4
						mine.momz = $*4
						mine.flags = ($|MF_MISSILE|MF_STICKY|MF_GRENADEBOUNCE & !MF_SPECIAL)
						
						end
					
					local z = P_SpawnGhostMobj(player.mo)
						z.color = player.mo.color
						z.fuse = 5
				else
					local mine = P_SpawnPlayerMissile(player.mo,MT_FBOMB,MF2_RAILRING)
						if mine and mine.valid
						mine.colorized = true
						mine.color = player.mo.color
						mine.target = player.mo
						mine.state = S_DRAGONMINE_METALT
						mine.tics = TICRATE*10
						mine.momx = $*4
						mine.momy = $*4
						mine.momz = $*4
						mine.flags = ($|MF_MISSILE|MF_STICKY|MF_GRENADEBOUNCE & !MF_SPECIAL)
						
						end
					local z = P_SpawnGhostMobj(player.mo)
						z.color = player.mo.color
						z.fuse = 5
				end
				S_StartSound(player.mo,sfx_kc40)
				player.mo.state = S_PLAY_SPRING
				player.pflags = $|PF_SHIELDABILITY|PF_THOKKED & !PF_JUMPED
				return true
			end
		end
	end
end)

addHook("MobjCollide",function(flr,proj) //Literally ripped from Flareon - has FLR in the name still. Too lazy to change it, good job I'm the creator lmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaao
	if flr.player.altforcebouncetics and (flr.player.powers[pw_shield] & SH_FORCE) and proj and proj.valid
		//Think: Reflect missiles without PAIN or SPECIAL flags. SPECIAL usually are, special, and PAIN are made to hurt players. Without fail.
		if P_MobjFlip(flr) >= 1 and proj.z >= flr.z and proj.z <= flr.z+flr.height
			
			if (proj.flags & MF_MISSILE)
				if (proj.flags & MF_SPECIAL)
					S_StartSound(flr,sfx_cdfm63)
				elseif (proj.flags & MF_PAIN)
					S_StartSound(flr,sfx_cdfm63)
				else
					if proj.target ~= flr
						proj.target = flr
						proj.angle = $+ANGLE_180
						if flr.player.powers[pw_super]
							if (proj.flags & MF_NOGRAVITY)
								proj.momx = $*(-3)
								proj.momy = $*(-3)
								proj.momz = $*(-3)
							else
								proj.momx = $*(-3)
								proj.momy = $*(-3)
								proj.momz = ($/3)*-1
							end
						else
							proj.momx = -1*$
							proj.momy = -1*$
							proj.momz = -1*$
						end
						S_StartSound(flr,sfx_cdpcm9)
					end
					return false
				end
			end
		
		elseif P_MobjFlip(flr) <= 1 and proj.z <= flr.z and proj.z >= flr.z-flr.height
	
			if (proj.flags & MF_MISSILE)
				if (proj.flags & MF_SPECIAL)
					S_StartSound(flr,sfx_cdfm63)
				elseif (proj.flags & MF_PAIN)
					S_StartSound(flr,sfx_cdfm63)
				else
					if proj.target ~= flr
						proj.target = flr
						proj.angle = $+ANGLE_180
						if flr.player.powers[pw_super]
							if (proj.flags & MF_NOGRAVITY)
								proj.momx = $*(-3)
								proj.momy = $*(-3)
								proj.momz = $*(-3)
							else
								proj.momx = $*(-3)
								proj.momy = $*(-3)
								proj.momz = $/3
							end
						else
							proj.momx = -1*$
							proj.momy = -1*$
							proj.momz = -1*$
						end
						S_StartSound(flr,sfx_cdpcm9)
					end
					return false
				end
			end
		
		end
			
	end
end, MT_PLAYER)

addHook("MobjThinker", function(mo)
	if mo and mo.valid and mo.health
		if mo.state == S_DRAGONMINE_METALT
			if mo.momx == 0 and mo.momy == 0 and mo.momz == 0 and not mo.stuck
				S_StartSound(mo,sfx_cdfm42)
				mo.stuck = true
			end
			if mo.target and mo.target.valid
				if not (leveltime%15)
					if not (leveltime%30)
						mo.color = ColorOpposite(mo.target.color)
					end
					if mo.tics > TICRATE*3
						if not (leveltime%30)
							S_StartSound(mo,sfx_cdfm17)
						end
					else
						S_StartSound(mo,sfx_cdfm21)
					end
				end
				if not ((leveltime%15) - 7) and mo.tics <= 40
					S_StartSound(mo,sfx_cdfm22)
				end
				if (leveltime%30) > 1
					mo.color = mo.target.color
				end
			end
		elseif mo.state == S_DRAGONMINE_METALT_OHFUCK
			if mo.target and mo.target.valid
				if not (leveltime%2)
					mo.color = ColorOpposite(mo.target.color)
					A_BossScream(mo,1)
				else
					mo.color = mo.target.color
				end
			end
			if mo.tics == 1
				S_StartSound(mo,sfx_bkpoof)
				if mo.target and mo.target.valid and mo.target.player
					P_NukeEnemies(mo,mo.target,FRACUNIT*64)
				end
			end
		end
	end
end, MT_FBOMB)




