// Special thanks to Flame for the graphic and Diggle for lua help. c:

freeslot(
	"MT_TARGET",
	"S_TARGET_COLOR",
	"S_TARGET",
	"S_TARGET_TRIGGER",
	"S_TARGET_XPLD1",
	"S_TARGET_XPLD2",
	"S_TARGET_XPLD3",
	"S_TARGET_XPLD4",
	"S_TARGET_XPLD5",
	"S_TARGET_XPLD6",
	"S_TARGET_XPLD7",
	"S_TARGET_XPLD8",
	"S_TARGET_RESPAWN_DELAY",
	"S_TARGET_RESPAWN",
	"SPR_TRGT",
	"SFX_TRGHIT"
)

mobjinfo[MT_TARGET] = {
	--$Name Target
	--$Sprite TRGTA0
	--$Category Break The Targets
	doomednum = 141,
	spawnstate = S_TARGET_COLOR,
	deathstate = S_TARGET_TRIGGER,
	deathsound = sfx_trghit,
	spawnhealth = 1,
	mass = 100,
	radius = 24*FRACUNIT,
	height = 64*FRACUNIT,
	flags = MF_SPECIAL|MF_SHOOTABLE|MF_MONITOR|MF_NOGRAVITY|MF_ENEMY|MF_RUNSPAWNFUNC
}

states[S_TARGET_COLOR] = {SPR_TRGT, A, 0, A_ChangeColorAbsolute, 0, 21, S_TARGET}
states[S_TARGET] = {SPR_TRGT, A, -1, nil, 0, 0, S_NULL}
states[S_TARGET_TRIGGER] = {SPR_TRGT, A, 1, A_LinedefExecute, 0, 1, S_TARGET_XPLD1}
states[S_TARGET_XPLD1] = {SPR_TRGT, B, 1, A_Scream, 0, 1, S_TARGET_XPLD2}
states[S_TARGET_XPLD2] = {SPR_TRGT, C, 1, nil, 0, 1, S_TARGET_XPLD3}
states[S_TARGET_XPLD3] = {SPR_TRGT, D, 1, nil, 0, 1, S_TARGET_XPLD4}
states[S_TARGET_XPLD4] = {SPR_TRGT, E, 1, nil, 0, 1, S_TARGET_XPLD5}
states[S_TARGET_XPLD5] = {SPR_TRGT, F, 1, nil, 0, 1, S_TARGET_XPLD6}
states[S_TARGET_XPLD6] = {SPR_TRGT, G, 1, nil, 0, 1, S_TARGET_XPLD7}
states[S_TARGET_XPLD7] = {SPR_TRGT, H, 1, nil, 0, 1, S_TARGET_XPLD8}
states[S_TARGET_XPLD8] = {SPR_NULL, A, 1, A_CheckFlags2, MF2_AMBUSH, S_TARGET_RESPAWN_DELAY, S_NULL}
states[S_TARGET_RESPAWN_DELAY] = {SPR_NULL, A, 135, nil, 0 , 0, S_TARGET_RESPAWN}
states[S_TARGET_RESPAWN] = {SPR_NULL, A, 1, A_SpawnFreshCopy, 0 , 0, S_NULL}

addHook("ShouldDamage", function(mobj, mo)
  if mobj and mobj.valid
    if mobj.type == MT_TARGET
    if mo and mo.valid
      if mo.player and mo.type == MT_PLAYER
         local player = mo.player
         if not P_PlayerCanDamage(player, mobj)
            return false
         end
      end
    end
    end
    if mobj.type == MT_PLAYER
    and mobj.player 
      if mo and mo.valid and mo.type == MT_TARGET
        return false
      end
    end
  end
end)