-- // MobjKill Whitelist - Created by katsy
-- // Some efficiency improvements implemented by Wolfy with help from Monster Iestyn

local whitelist = {
	MT_PLAYER,
	MT_IVSP,
	MT_HYPERSPARK,
	MT_FLINGRING,
	MT_NIGHTSBUMPER,
	MT_HOOPCOLLIDE,
	MT_HOOPCENTER,
	MT_HOOP,
	MT_NIGHTSBUMPER,
	MT_NIGHTSSUPERLOOP,
	MT_NIGHTSDRILLREFILL,
	MT_NIGHTSHELPER,
	MT_NIGHTSPARKLE,
	MT_SUPERSPARK,
	MT_SPINFIRE,
	MT_RING,
	MT_NIGHTSDRONE,
	MT_EGGCAPSULE,
	MT_NIGHTOPIANHELPER,
	MT_METALSONIC_RACE,
	MT_THOK,
	MT_STARPOST,
	MT_BUBBLES,
	MT_SIGN,
	MT_TUBEWAYPOINT,
	MT_OVERLAY,
	MT_SKYBOX,
	MT_GHOST,
	MT_NAMECHECK,
	MT_MACEPOINT,
	MT_SMALLMACECHAIN,
	MT_SPRINGBALLPOINT,
	MT_CHAINPOINT,
	MT_CUSTOMMACEPOINT,
	MT_BIGMACECHAIN,
	MT_CHAINMACEPOINT,
	MT_HIDDEN_SLING,
	MT_FAN,
	MT_BLUESPRING,
	MT_YELLOWSPRING,
	MT_REDSPRING,
	MT_YELLOWDIAG,
	MT_REDDIAG,
	MT_BLUEDIAG,
	MT_YELLOWHORIZ,
	MT_REDHORIZ,
	MT_BLUEHORIZ,
	MT_STEAM,
	MT_EMBLEM,
	MT_REDFLAG,
	MT_BLUEFLAG,
	MT_BUMPER,
	MT_BALLOON,
	MT_BOOSTERSEG,
	MT_BOOSTERROLLER,
	MT_YELLOWBOOSTER,
	MT_REDBOOSTER,
	MT_BOXSPARKLE,
	MT_TOKEN,
	MT_EMERALD1,
	MT_EMERALD2,
	MT_EMERALD3,
	MT_EMERALD4,
	MT_EMERALD5,
	MT_EMERALD6,
	MT_EMERALD7,
	MT_BLUESPHERE,
	MT_FLINGBLUESPHERE,
	MT_GARGOYLE,
	MT_BIGGARGOYLE,
	MT_ROLLOUTSPAWN,
	MT_ROLLOUTROCK,
	MT_SNAPPER_LEG, // This makes the game crash, so whitelist
	MT_SNAPPER_HEAD // ditto
}

if (MODID == 14) then --// Check TopDown mobjs too
	table.insert(whitelist, MT_SHADOW)
	table.insert(whitelist, MT_TDEMBLEM)
	table.insert(whitelist, MT_CHAOSCOIN)
	table.insert(whitelist, MT_BIGBLUECHAIN)
	table.insert(whitelist, MT_SMALLBLUECHAIN)
end

// Add some trees
for i = MT_GFZTREE,MT_SPRINGTREE do
	table.insert(whitelist, i)
end

// Add ATZ stuff
for i = MT_GLAREGOYLE,MT_BLUEGARGOYLE do
	table.insert(whitelist, i)
end

// Add ACZ stuff
for i = MT_ARIDDUST,MT_MINECARTSWITCHPOINT do
	table.insert(whitelist, i)
end

local function destroy(hms, any)
	if (not (hms.skin == "hms123311")) or ((hms.player.powers[pw_carry] == CR_NIGHTSMODE)) or (maptol & TOL_NIGHTS) then return end
	for _,i in ipairs(whitelist) do
		if (any.type == i) then
			return nil
		end
	end
	if (hms.z > any.z+any.height) or (any.z > hms.z + hms.height) then
		return nil
	end
	if (any.flags & MF_SCENERY)
		return nil
	end
	any.health = 0
	S_StartSound(hms, any.info.deathsound)
	P_KillMobj(any, hms, hms)
	return false
end

addHook("MobjCollide", destroy, MT_PLAYER)
addHook("MobjMoveCollide", destroy, MT_PLAYER)
