freeslot(
"MT_CAMPFIRE",
"S_CAMPFIRE",
"MT_CAMPFIRETITLE",
"S_CAMPFIRETITLE",
"S_GHOULSPAWNTHINKER",
"SPR_CFFI",
"SPR_CFSM"
)

freeslot(
"SPR_SJAS",
"SPR_SJPF",
"sfx_sjatk",
"sfx_sjact",
"sfx_sjdth",
"sfx_sjsee",
"sfx_sjpain",
"MT_SJAS",
"S_SJAS_STAND1",
"S_SJAS_CHASE1",
"S_SJAS_CHASE2",
"S_SJAS_CHASE3",
"S_SJAS_CHASE4",
"S_SJAS_CHASE5",
"S_SJAS_CHASE6",
"S_SJAS_CHASE7",
"S_SJAS_CHASE8",
"S_SJAS_CHASE9",
"S_SJAS_CHASE10",
"S_SJAS_CHASE11",
"S_SJAS_CHASE12",
"S_SJAS_CHASE13",
"S_SJASSEARCH",
"S_SJAS_PAIN1",
"S_SJAS_PAIN2",
"S_SJAS_ATK1",
"S_SJAS_DEATH1",
"S_SJAS_DEATH2",
"S_SJAS_DEATH3",
"S_SJAS_DEATH4",
"S_SJAS_DEATH5",
"SPR_GFIR",
"sfx_flame",
"MT_GHOULFIRE",
"MT_SJASPUFF",
"S_SJASPUFF1",
"S_SJASPUFF2",
"S_SJASPUFF3",
"S_SJASPUFF4",
"S_SJASPUFF5",
"S_SJASPUFF6",
"S_SJASPUFF7",
"S_GHOULFIRE1",
"S_GHOULFIRE2",
"S_GHOULFIRE3",
"S_GHOULFIRE4",
"S_GHOULFIRE5",
"S_GHOULFIRE6",
"S_GHOULFIRE7"
)

freeslot(
"SPR_JSKL",
"sfx_jtact1",
"sfx_jtact2",
"sfx_jtact3",
"sfx_jtact4",
"sfx_jtatk",
"sfx_jtdth",
"MT_JITTERSKULL",
"S_JITTERSKULL_STAND1",
"S_JITTERSKULL_CHASE1",
"S_JITTERSKULL_CHASE2",
"S_JITTERSKULL_CHASE3",
"S_JITTERSKULL_CHASE4",
"S_JITTERSKULL_ATK1",
"S_JITTERSKULL_PAIN1",
"S_JITTERSKULL_DEATH1",
"S_JITTERSKULL_DEATH2",
"S_JITTERSKULL_DEATH3",
"S_JITTERSKULL_DEATH4",
"S_JITTERSKULL_DEATH5",
"S_JITTERSKULL_DEATH6",
"S_JITTERSKULL_DEATH7",
"S_JITTERSKULL_DEATH8"
)

freeslot(
"SPR_CREE",
"sfx_creep1",
"sfx_creep2",
"sfx_creep3",
"sfx_creep4",
"MT_CREEPERGHOUL",
"S_CREEPERGHOUL_STAND1",
"S_CREEPERGHOUL_CHASE1",
"S_CREEPERGHOUL_CHASE2",
"S_CREEPERGHOUL_ATTACK1",
"S_CREEPERGHOUL_PAIN1",
"S_CREEPERGHOUL_DEATH1",
"S_CREEPERGHOUL_DEATH2",
"S_CREEPERGHOUL_DEATH3",
"S_CREEPERGHOUL_DEATH4",
"S_CREEPERGHOUL_DEATH5",
"S_CREEPERGHOUL_DEATH6",
"S_CREEPERGHOUL_DEATH7",
"S_CREEPERGHOUL_DEATH8",
"SPR_WFIR",
"MT_CREEPERFIRE",
"S_CREEPERFIRE1",
"S_CREEPERFIRE2",
"S_CREEPERFIRE3",
"S_CREEPERFIRE4",
"S_CREEPERFIRE5",
"S_CREEPERFIRE6",
"S_CREEPERFIRE7"
)

local GHOULS = {
	MT_SJAS,
	MT_JITTERSKULL,
	MT_CREEPERGHOUL
}

function A_CampFirePart(actor, var1, var2)
	local smoke = P_SpawnMobj(actor.x, actor.y, actor.z + actor.height, MT_PARTICLE)
	smoke.sprite = SPR_CFSM
	smoke.frame = P_RandomRange(0, 3)|FF_FULLBRIGHT|TR_TRANS80
	smoke.momz = FRACUNIT
	smoke.scale = $/2
	smoke.destscale = FRACUNIT
	smoke.fuse = TICRATE*16
	smoke.scalespeed = FRACUNIT/128
	local fire = P_SpawnMobj(actor.x, actor.y, actor.z, MT_PARTICLE)
	fire.sprite = SPR_CFFI
	fire.frame = P_RandomRange(0, 2)|FF_FULLBRIGHT|TR_TRANS50
	fire.scale = FRACUNIT/3
	fire.momz = FRACUNIT
	fire.fuse = TICRATE
end

mobjinfo[MT_CAMPFIRE] = {
	//$Name Campfire 1
	//$Sprite CFFIA0
	doomednum = 1911,
	spawnstate = S_CAMPFIRE,
	radius = 8*FRACUNIT,
	height = 8*FRACUNIT,
	mass = 100,
	flags = MF_NOGRAVITY|MF_NOBLOCKMAP
}

states[S_CAMPFIRE] = {SPR_NONE, 0, 7, A_CampFirePart, 0, 0, S_CAMPFIRE}

function A_GhoulSpawner(actor, var1, var2)
	if actor.target and actor.target.valid then

	else
		//-- Check if all ghouls have been spawned.
		local val = 1
		for i = 1, #GHOULS do
			val = $|(2^i)

		end
		actor.extravalue1 = $|(2^actor.extravalue2)
		if val == actor.extravalue1 then
			A_ForceWin(actor, var1, var2)
		else
			//-- print("val = "..val)
			//-- print("ev1 = "..actor.extravalue1)
			repeat
				actor.extravalue2 = P_RandomRange(1, #GHOULS)
			until actor.extravalue1 & (2^actor.extravalue2) == 0
			local ang = P_RandomRange(0, 359)*ANG1
			actor.target = P_SpawnMobj(actor.x + 4096*cos(ang), actor.y + 4096*sin(ang), actor.z, GHOULS[actor.extravalue2])
			actor.target.z = actor.target.subsector.sector.floorheight
		end
	end
end
states[S_GHOULSPAWNTHINKER] = {SPR_NONE, 0, 1, A_GhoulSpawner, 0, 0, S_GHOULSPAWNTHINKER}

//The Ghouls

function A_SjasChase(actor, var1, var2)
	A_Chase(actor, var1, var2)
end

function A_SjasAttack(actor, var1, var2)
	P_DamageMobj(actor.target, actor, actor)
	S_StopSound(actor)
	S_StartSound(nil, actor.info.attacksound)
end

function A_SjasPain(actor, var1, var2)
	A_Pain(actor, var1, var2)
	local randang = ANG1*P_RandomRange(0, 359)
	P_SetOrigin(actor, actor.x + 2*4096*cos(randang), actor.y + 2*4096*sin(randang), actor.z)
end

function A_SjasDeathBlast(actor, var1, var2)
	for i=0, 7 do
		local flame = P_SpawnMobj(actor.x, actor.y, actor.z, var1)
		P_Thrust(flame, ANGLE_45*i, var2)
	end
end

function A_SjasPainPuffSpawner(actor, var1, var2)
	for i=0, 1 do
		local puff = P_SpawnMobj(actor.x, actor.y, actor.z, var1)
		S_StartSound(nil, sfx_sjpain)
	end
end

states[S_GHOULFIRE1] = {SPR_GFIR, 0|TR_TRANS20|FF_FULLBRIGHT|FF_ANIMATE, 8, A_PlayActiveSound, 1, 2, S_GHOULFIRE2}
states[S_GHOULFIRE2] = {SPR_GFIR, 1|TR_TRANS20|FF_FULLBRIGHT|FF_ANIMATE, 8, none, 1, 2, S_GHOULFIRE3}
states[S_GHOULFIRE3] = {SPR_GFIR, 2|TR_TRANS20|FF_FULLBRIGHT|FF_ANIMATE, 8, none, 1, 2, S_GHOULFIRE4}
states[S_GHOULFIRE4] = {SPR_GFIR, 3|TR_TRANS20|FF_FULLBRIGHT|FF_ANIMATE, 8, none, 1, 2, S_GHOULFIRE5}
states[S_GHOULFIRE5] = {SPR_GFIR, 4|TR_TRANS20|FF_FULLBRIGHT|FF_ANIMATE, 8, none, 1, 2, S_GHOULFIRE6}
states[S_GHOULFIRE6] = {SPR_GFIR, 5|TR_TRANS20|FF_FULLBRIGHT|FF_ANIMATE, 8, none, 1, 2, S_GHOULFIRE7}
states[S_GHOULFIRE7] = {SPR_GFIR, 6|TR_TRANS20|FF_FULLBRIGHT|FF_ANIMATE, 8, none, 1, 2, S_NULL}

states[S_CREEPERFIRE1] = {SPR_WFIR, 0|TR_TRANS20|FF_FULLBRIGHT|FF_ANIMATE, 8, A_PlayActiveSound, 1, 2, S_CREEPERFIRE2}
states[S_CREEPERFIRE2] = {SPR_WFIR, 1|TR_TRANS20|FF_FULLBRIGHT|FF_ANIMATE, 8, none, 1, 2, S_CREEPERFIRE3}
states[S_CREEPERFIRE3] = {SPR_WFIR, 2|TR_TRANS20|FF_FULLBRIGHT|FF_ANIMATE, 8, none, 1, 2, S_CREEPERFIRE4}
states[S_CREEPERFIRE4] = {SPR_WFIR, 3|TR_TRANS20|FF_FULLBRIGHT|FF_ANIMATE, 8, none, 1, 2, S_CREEPERFIRE5}
states[S_CREEPERFIRE5] = {SPR_WFIR, 4|TR_TRANS20|FF_FULLBRIGHT|FF_ANIMATE, 8, none, 1, 2, S_CREEPERFIRE6}
states[S_CREEPERFIRE6] = {SPR_WFIR, 5|TR_TRANS20|FF_FULLBRIGHT|FF_ANIMATE, 8, none, 1, 2, S_CREEPERFIRE7}
states[S_CREEPERFIRE7] = {SPR_WFIR, 6|TR_TRANS20|FF_FULLBRIGHT|FF_ANIMATE, 8, none, 1, 2, S_NULL}


mobjinfo[MT_GHOULFIRE] = {
	spawnstate = S_GHOULFIRE1,
	activesound = sfx_flame,
	radius = 16*FRACUNIT,
	height = 64*FRACUNIT,
	flags = MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_RUNSPAWNFUNC
}

mobjinfo[MT_SJASPUFF] = {
	spawnstate = S_SJASPUFF1,
	activesound = sfx_sjpain,
	radius = 16*FRACUNIT,
	height = 64*FRACUNIT,
	flags = MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY
}

states[S_SJASPUFF1] = {SPR_SJPF, 0|TR_TRANS20, 2, A_PlayActiveSound, 1, 2, S_SJASPUFF2}
states[S_SJASPUFF2] = {SPR_SJPF, 1|TR_TRANS20, 2, none, 1, 2, S_SJASPUFF3}
states[S_SJASPUFF3] = {SPR_SJPF, 2|TR_TRANS20, 2, none, 1, 2, S_SJASPUFF4}
states[S_SJASPUFF4] = {SPR_SJPF, 3|TR_TRANS20, 2, none, 1, 2, S_SJASPUFF5}
states[S_SJASPUFF5] = {SPR_SJPF, 4|TR_TRANS20, 2, none, 1, 2, S_SJASPUFF6}
states[S_SJASPUFF6] = {SPR_SJPF, 5|TR_TRANS20, 2, none, 1, 2, S_SJASPUFF7}
states[S_SJASPUFF7] = {SPR_SJPF, 6|TR_TRANS20, 2, none, 1, 2, S_NULL}

mobjinfo[MT_SJAS] = {
	//$Name Sjas
	//$Sprite SJASA0
	doomednum = 1991,
	spawnstate = S_SJAS_CHASE1,
	seestate = S_SJAS_CHASE1,
	meleestate = NULL,
	painstate = S_SJAS_PAIN1,
	deathstate = S_SJAS_DEATH1,
	seesound = NULL,
	activesound = sfx_sjact,
	attacksound = sfx_sjatk,
	deathsound = sfx_sjdth,
	painchance = 255,
	speed = 18,
	radius = 30*FRACUNIT,
	height = 45*FRACUNIT,
	dispoffset = 0,
	reactiontime = 2*TICRATE,
	spawnhealth = 4,
	mass = 100,
	flags = MF_SHOOTABLE|MF_NOGRAVITY|MF_ENEMY|MF_FLOAT|MF_NOCLIPHEIGHT|MF_NOCLIP|MF_SPECIAL
}

states[S_SJAS_STAND1] = {SPR_SJAS, 0|TR_TRANS20, 3, A_Look, 1, 0, S_SJAS_CHASE1}
states[S_SJAS_CHASE1] = {
		sprite = SPR_SJAS,
		frame = B,
        tics = 1,
        action = A_Chase,
        var1 = 2,
        var2 = 0,
        nextstate = S_SJAS_CHASE2
}
states[S_SJAS_CHASE2] = {
		sprite = SPR_SJAS,
		frame = B,
        tics = 1,
        action = A_Chase,
        var1 = 2,
        var2 = 0,
        nextstate = S_SJAS_CHASE3
}
states[S_SJAS_CHASE3] = {
		sprite = SPR_SJAS,
		frame = B,
        tics = 1,
        action = A_Chase,
        var1 = 2,
        var2 = 0,
        nextstate = S_SJAS_CHASE4
}
states[S_SJAS_CHASE4] = {
		sprite = SPR_SJAS,
		frame = A,
        tics = 1,
        action = A_Chase,
        var1 = 2,
        var2 = 0,
        nextstate = S_SJAS_CHASE5
}
states[S_SJAS_CHASE5] = {
		sprite = SPR_SJAS,
		frame = A,
        tics = 1,
        action = A_Chase,
        var1 = 2,
        var2 = 0,
        nextstate = S_SJAS_CHASE6
}
states[S_SJAS_CHASE6] = {
		sprite = SPR_SJAS,
		frame = A,
        tics = 1,
        action = A_Chase,
        var1 = 2,
        var2 = 0,
        nextstate = S_SJAS_CHASE7
}
states[S_SJAS_CHASE7] = {
		sprite = SPR_SJAS,
		frame = A,
        tics = 1,
        action = A_Chase,
        var1 = 2,
        var2 = 0,
        nextstate = S_SJAS_CHASE8
}
states[S_SJAS_CHASE8] = {
		sprite = SPR_SJAS,
		frame = A,
        tics = 1,
        action = A_Chase,
        var1 = 2,
        var2 = 0,
        nextstate = S_SJAS_CHASE9
}
states[S_SJAS_CHASE9] = {
		sprite = SPR_SJAS,
		frame = A,
        tics = 1,
        action = A_Chase,
        var1 = 2,
        var2 = 0,
        nextstate = S_SJAS_CHASE10
}
states[S_SJAS_CHASE10] = {
		sprite = SPR_SJAS,
		frame = A,
        tics = 1,
        action = A_Chase,
        var1 = 2,
        var2 = 0,
        nextstate = S_SJAS_CHASE11
}
states[S_SJAS_CHASE11] = {
		sprite = SPR_SJAS,
		frame = A,
        tics = 1,
        action = A_Chase,
        var1 = 2,
        var2 = 0,
        nextstate = S_SJAS_CHASE12
}
states[S_SJAS_CHASE12] = {
		sprite = SPR_SJAS,
		frame = A,
        tics = 1,
        action = A_PlayActiveSound,
        var1 = 0,
        var2 = 0,
        nextstate = S_SJAS_CHASE1
}
states[S_SJAS_ATK1] = {SPR_SJAS, 2|TR_TRANS20|FF_ANIMATE, 25, A_SjasAttack, 1, 7, S_SJAS_STAND1}
states[S_SJAS_PAIN1] = {SPR_SJAS, 1|TR_TRANS20, 1, A_SjasPainPuffSpawner, MT_SJASPUFF, 0, S_SJAS_PAIN2}
states[S_SJAS_PAIN2] = {SPR_SJAS, 1|TR_TRANS20, 1, A_SjasPain, 0, 0, S_SJAS_CHASE1}
states[S_SJAS_DEATH1] = {SPR_SJAS, 4|TR_TRANS20, 8, A_Scream, 0, 0, S_SJAS_DEATH2}
states[S_SJAS_DEATH2] = {SPR_SJAS, 5|TR_TRANS40, 16, A_SjasDeathBlast, MT_GHOULFIRE, 4*FRACUNIT, S_SJAS_DEATH3}
states[S_SJAS_DEATH3] = {SPR_SJAS, 6|TR_TRANS60, 16, A_SjasDeathBlast, MT_GHOULFIRE, 4*FRACUNIT, S_SJAS_DEATH4}
states[S_SJAS_DEATH4] = {SPR_SJAS, 7|TR_TRANS80, 16, A_SjasDeathBlast, MT_GHOULFIRE, 4*FRACUNIT, S_SJAS_DEATH5}
states[S_SJAS_DEATH5] = {SPR_NONE, 0, 2*TICRATE, A_SjasDeathBlast, MT_GHOULFIRE, 4*FRACUNIT, S_NULL}


function A_JitterChase(actor, var1, var2)
	if FixedHypot(actor.target.x - actor.x, actor.target.y - actor.y) < 256*FRACUNIT then
		P_Thrust(actor, R_PointToAngle2(actor.target.x, actor.target.y, actor.x, actor.y), -100*FRACUNIT)
		S_StartSound(actor, actor.info.attacksound)
		actor.state = actor.info.meleestate
	else
		A_Chase(actor, var1, var2)
		A_Chase(actor, var1, var2)
		A_Chase(actor, var1, var2)
		A_Chase(actor, var1, var2)
		A_Chase(actor, var1, var2)
		A_Chase(actor, var1, var2)
		A_Chase(actor, var1, var2)
		A_Chase(actor, var1, var2)
		A_Chase(actor, var1, var2)
		S_StartSound(actor, actor.info.activesound + P_RandomRange(0, 3), nil)
	end
end

function A_JitterAttack(actor, var1, var2)
	if FixedHypot(actor.momx, actor.momy) < 2*FRACUNIT then
		actor.momx, actor.momy = 0, 0
		actor.state = actor.info.spawnstate
	else
		actor.momx, actor.momy = $1-$1/4, $2-$2/4
		P_RadiusAttack(actor, actor, actor.radius*2)
	end
end

mobjinfo[MT_JITTERSKULL] = {
	//$Name Jitter Skull
	//$Sprite JSKLA0
	doomednum = 1992,
	spawnstate = S_JITTERSKULL_STAND1,
	seestate = S_JITTERSKULL_CHASE1,
	meleestate = S_JITTERSKULL_ATK1,
	painstate = S_JITTERSKULL_PAIN1,
	deathstate = S_JITTERSKULL_DEATH1,
	activesound = sfx_jtact1,
	attacksound = sfx_jtatk,
	deathsound = sfx_jtdth,
	painchance = 255,
	speed = 24,
	radius = 24*FRACUNIT,
	height = 64*FRACUNIT,
	reactiontime = TICRATE/2,
	spawnhealth = 5,
	mass = 100,
	flags = MF_SHOOTABLE|MF_ENEMY|MF_SPECIAL|MF_NOCLIP
}

states[S_JITTERSKULL_STAND1] = {SPR_JSKL, 0, 5, A_Look, 1, 0, S_JITTERSKULL_STAND1}
states[S_JITTERSKULL_CHASE1] = {SPR_JSKL, 0|FF_ANIMATE, 24, A_JitterChase, 2, 2, S_JITTERSKULL_CHASE1}
states[S_JITTERSKULL_ATK1] = {SPR_JSKL, 3, 1, A_JitterAttack, S_JITTERSKULL_CHASE1, 0, S_JITTERSKULL_ATK1}
states[S_JITTERSKULL_PAIN1] = {SPR_JSKL, 0, TICRATE/2, none, 0, 0, S_JITTERSKULL_STAND1}
states[S_JITTERSKULL_DEATH1] = {SPR_JSKL, 3|TR_TRANS20|FF_FULLBRIGHT, 8, A_Scream, 0, 0, S_JITTERSKULL_DEATH2}
states[S_JITTERSKULL_DEATH2] = {SPR_JSKL, 3|TR_TRANS30|FF_FULLBRIGHT, 16, A_SjasDeathBlast, MT_GHOULFIRE, 6*FRACUNIT, S_JITTERSKULL_DEATH3}
states[S_JITTERSKULL_DEATH3] = {SPR_JSKL, 3|TR_TRANS40|FF_FULLBRIGHT, 16, A_SjasDeathBlast, MT_GHOULFIRE, 6*FRACUNIT, S_JITTERSKULL_DEATH4}
states[S_JITTERSKULL_DEATH4] = {SPR_JSKL, 3|TR_TRANS50|FF_FULLBRIGHT, 16, A_SjasDeathBlast, MT_GHOULFIRE, 6*FRACUNIT, S_JITTERSKULL_DEATH5}
states[S_JITTERSKULL_DEATH5] = {SPR_JSKL, 3|TR_TRANS70|FF_FULLBRIGHT, 16, A_SjasDeathBlast, MT_GHOULFIRE, 6*FRACUNIT, S_JITTERSKULL_DEATH6}
states[S_JITTERSKULL_DEATH6] = {SPR_JSKL, 3|TR_TRANS80|FF_FULLBRIGHT, 16, A_SjasDeathBlast, MT_GHOULFIRE, 6*FRACUNIT, S_JITTERSKULL_DEATH7}
states[S_JITTERSKULL_DEATH7] = {SPR_JSKL, 3|TR_TRANS90|FF_FULLBRIGHT, 16, A_SjasDeathBlast, MT_GHOULFIRE, 6*FRACUNIT, S_JITTERSKULL_DEATH8}
states[S_JITTERSKULL_DEATH8] = {SPR_NONE, 0, 4*TICRATE, A_SjasDeathBlast, MT_GHOULFIRE, 6*FRACUNIT, S_NULL}

function A_CreeperChase(actor, var1, var2)
	A_Chase(actor, var1, var2)
	if actor.reactiontime == 0 then
		A_PlayActiveSound(actor, var1, var2)
		actor.reactiontime = actor.info.reactiontime
	end
end

function A_CreeperAttack(actor, var1, var2)
	P_DamageMobj(actor.target, actor, actor)
	S_StopSound(actor)
	S_StartSound(nil, actor.info.attacksound)
end

//states[S_CREEPERGHOUL_STAND1]
states[S_CREEPERGHOUL_CHASE1] = {SPR_CREE, 0, 4, A_CreeperChase, 0, 0, S_CREEPERGHOUL_CHASE2}
states[S_CREEPERGHOUL_CHASE2] = {SPR_CREE, 1, 4, A_CreeperChase, 0, 0, S_CREEPERGHOUL_CHASE1}
states[S_CREEPERGHOUL_ATTACK1] = {SPR_CREE, 2|FF_FULLBRIGHT, 20, A_CreeperAttack, 1, 7, S_CREEPERGHOUL_CHASE1}
states[S_CREEPERGHOUL_PAIN1] = {SPR_CREE, 0, TICRATE/2, A_Pain, 0, 0, S_CREEPERGHOUL_CHASE1}
states[S_CREEPERGHOUL_DEATH1] = {SPR_CREE, 3|TR_TRANS20|FF_FULLBRIGHT, 8, A_Scream, 0, 0, S_CREEPERGHOUL_DEATH2}
states[S_CREEPERGHOUL_DEATH2] = {SPR_CREE, 3|TR_TRANS30|FF_FULLBRIGHT, 16, A_SjasDeathBlast, MT_CREEPERFIRE, 6*FRACUNIT, S_CREEPERGHOUL_DEATH3}
states[S_CREEPERGHOUL_DEATH3] = {SPR_CREE, 3|TR_TRANS40|FF_FULLBRIGHT, 16, A_SjasDeathBlast, MT_CREEPERFIRE, 6*FRACUNIT, S_CREEPERGHOUL_DEATH4}
states[S_CREEPERGHOUL_DEATH4] = {SPR_CREE, 3|TR_TRANS50|FF_FULLBRIGHT, 16, A_SjasDeathBlast, MT_CREEPERFIRE, 6*FRACUNIT, S_CREEPERGHOUL_DEATH5}
states[S_CREEPERGHOUL_DEATH5] = {SPR_CREE, 3|TR_TRANS70|FF_FULLBRIGHT, 16, A_SjasDeathBlast, MT_CREEPERFIRE, 6*FRACUNIT, S_CREEPERGHOUL_DEATH6}
states[S_CREEPERGHOUL_DEATH6] = {SPR_CREE, 3|TR_TRANS80|FF_FULLBRIGHT, 16, A_SjasDeathBlast, MT_CREEPERFIRE, 6*FRACUNIT, S_CREEPERGHOUL_DEATH7}
states[S_CREEPERGHOUL_DEATH7] = {SPR_CREE, 3|TR_TRANS90|FF_FULLBRIGHT, 16, A_SjasDeathBlast, MT_CREEPERFIRE, 6*FRACUNIT, S_CREEPERGHOUL_DEATH8}
states[S_CREEPERGHOUL_DEATH8] = {SPR_NONE, 0, 4*TICRATE, A_SjasDeathBlast, MT_CREEPERFIRE, 6*FRACUNIT, S_NULL}

mobjinfo[MT_CREEPERFIRE] = {
	spawnstate = S_CREEPERFIRE1,
	activesound = sfx_flame,
	radius = 16*FRACUNIT,
	height = 64*FRACUNIT,
	flags = MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_RUNSPAWNFUNC
}

mobjinfo[MT_CREEPERGHOUL] = {
	//$Name Creeper Ghoul
	//$Sprite CREEA0
	doomednum = 1993,
	spawnstate = S_CREEPERGHOUL_CHASE1,
	seestate = S_CREEPERGHOUL_CHASE1,
	painstate = S_CREEPERGHOUL_PAIN1,
	meleestate = S_CREEPERGHOUL_ATTACK1,
	deathstate = S_CREEPERGHOUL_DEATH1,
	seesound = sfx_creep1,
	activesound = sfx_creep1,
	attacksound = sfx_creep3,
	painsound = sfx_creep4,
	meleerange = 12,
	deathsound = sfx_creep2,
	speed = 35,
	reactiontime = TICRATE/2,
	radius = 24*FRACUNIT,
	height = 16*FRACUNIT,
	spawnhealth = 4,
	mass = 100,
	flags = MF_SHOOTABLE|MF_ENEMY|MF_NOCLIP|MF_SPECIAL
}

addHook("ThinkFrame", do
	for p in players.iterate do
		if not mapheaderinfo[gamemap].ghoulplayer then --  if the map doesn't have toasters then, my boy. Dinner.
		    p.ghoulplayer = 0
		else
		if p.mo and p.mo.valid then
			p.mo.scale = FRACUNIT/2
			else
			p.ghoulplayer = 0
			end
		end
	end
end)


//Title Screen Campfire (UNUSED)
//
//function A_CampFirePartTitle(actor, var1, var2)
//	local smoke = P_SpawnMobj(actor.x, actor.y, actor.z + actor.height, MT_PARTICLE)
//	smoke.sprite = SPR_CFSM
//	smoke.frame = P_RandomRange(0, 3)|FF_FULLBRIGHT|TR_TRANS80
//	smoke.momz = FRACUNIT
//	smoke.scale = $/2
//	smoke.destscale = FRACUNIT
//	smoke.fuse = TICRATE*16
//	smoke.scalespeed = FRACUNIT/128
//	local fire = P_SpawnMobj(actor.x, actor.y, actor.z, MT_PARTICLE)
//	fire.sprite = SPR_CFFI
//	fire.frame = P_RandomRange(0, 2)|FF_FULLBRIGHT|TR_TRANS50
//	fire.scale = FRACUNIT/3
//	fire.momz = FRACUNIT
//	fire.fuse = TICRATE
//end

//states[S_CAMPFIRETITLE] = {SPR_NONE, 0, 7, A_CampFirePartTitle, 0, 0, S_CAMPFIRETITLE}

//mobjinfo[MT_CAMPFIRETITLE] = {
	//$Name Campfire 2
	//$Sprite CFFIA0
	//doomednum = 1919,
	//spawnstate = S_CAMPFIRETITLE,
	//radius = 8*FRACUNIT,
	//height = 8*FRACUNIT,
	//mass = 100,
	//flags = MF_NOGRAVITY|MF_NOBLOCKMAP
//}