freeslot(
"MT_TAZSPITTLE",
"MT_TAZSPITTLE2",
"MT_TAZROCK",
"MT_TAZBUBBLES",
"MT_TAZSMOKE",
"MT_TAZGUM",
"MT_TAZFLICKY",
"MT_TAZFLICKY2",
"MT_GUMSPAWN",
"MT_GUMPOP",
"MT_GUMPOP2",
"MT_OTRAIL",
"MT_TMQUIL",
"MT_MGREENKOOPA",
"MT_CRYSTALCRUMBLE",
"MT_TIDB",
"MT_TMHRT",
"S_TASH",
"S_TAZ1",
"S_TAZ0",
"S_TAZTHOK",
"S_TAZFLOAT",
"S_TAZBITE",
"S_TAZBITEG",
"S_TAZSPIT",
"S_TAZEAT",
"S_TAZEATING",
"S_SPINTWIN",
"S_TRIPLETSPIN",
"S_TAZGAP",
"S_TAZSKATE",
"S_TAZDROWN",
"S_TAZDROWN2",
"S_TAZSPITTLE",
"S_TAZSPITTLE2",
"S_TAZROCK",
"S_TAZCRUSHED",
"S_TAZCRASHED",
"S_TAZBUBBLE",
"S_TAZFIRESHIELD",
"S_TAZSMOKE",
"S_TAZGUM",
"S_TAZFLICKY",
"S_TAZFLICKY2",
"S_GUMSPAWN",
"S_GUMPOP",
"S_GUMPOP2",
"S_TWDB",
"S_TWDB2",
"S_OTRAIL",
"S_OTRAIL2",
"S_OTRAIL3",
"S_OTRAIL4",
"S_OTRAIL5",
"S_TAZMINECART",
"S_TAZMINECARTL",
"S_TAZMINECARTR",
"S_TMQUIL",
"S_TMHRT",
"S_TMHRT2",
"SPR_TASH",
"SPR_TAZH",
"SPR_TAZ2",
"SPR_TZBT",
"SPR_TZSP",
"SPR_TZGP",
"SPR_TZSK",
"SPR_TZCR",
"SPR_TZCL",
"SPR_TZBB",
"SPR_TZMK",
"SPR_FTZ1",
"SPR_FTZ2",
"SPR_TZBN",
"SPR_TZBK",
"SPR_TZDW",
"SPR_TZFS",
"SPR_TZMC",
"SPR_TMQL",
"SPR_TGUM",
"SPR_TWAF",
"SPR_TWAT",
"SPR_THRT"
)

sfxinfo[freeslot("sfx_tsup")].caption = "Wassup!"
sfxinfo[freeslot("sfx_tyow")].caption = "Yo, yo, yo!"
sfxinfo[freeslot("sfx_tnado")].caption = "/"
sfxinfo[freeslot("sfx_tspt")].caption = "Spit"
sfxinfo[freeslot("sfx_fart")].caption = "/"
sfxinfo[freeslot("sfx_fart2")].caption = "/"
sfxinfo[freeslot("sfx_chili")].caption = "/"
sfxinfo[freeslot("sfx_burp")].caption = "BURP"
sfxinfo[freeslot("sfx_burp")].flags = $|SF_X8AWAYSOUND
sfxinfo[freeslot("sfx_tbnk")].caption = "Crash"
sfxinfo[freeslot("sfx_tbrnt")].caption = "/"
sfxinfo[freeslot("sfx_tzs1")].caption = "/"
sfxinfo[freeslot("sfx_tzs2")].caption = "/"
sfxinfo[freeslot("sfx_tzs3")].caption = "/"
sfxinfo[freeslot("sfx_twolf")].caption = "/"
sfxinfo[freeslot("sfx_skate")].caption = "Skate"
sfxinfo[freeslot("sfx_brpb")].caption = "/"
sfxinfo[freeslot("sfx_tzpn0")].caption = "/"
sfxinfo[freeslot("sfx_tzpn")].caption = "Spintwin"
sfxinfo[freeslot("sfx_tzft")].caption = "Float"
sfxinfo[freeslot("sfx_tzok")].caption = "Thok"
sfxinfo[freeslot("sfx_tzbt")].caption = "Bite"
sfxinfo[freeslot("sfx_tzeat")].caption = "Crunch!"
sfxinfo[freeslot("sfx_tsqsh")].caption = "Squish!"
sfxinfo[freeslot("sfx_gpop")].caption = "/"
sfxinfo[freeslot("sfx_burpc")].caption = "/"
sfxinfo[freeslot("sfx_flck2")].caption = "/"
sfxinfo[freeslot("sfx_gump")].caption = "Nyam!"
sfxinfo[freeslot("sfx_taste")].caption = "Mmmm"
sfxinfo[freeslot("sfx_tast2")].caption = "Mmmm..."
sfxinfo[freeslot("sfx_tasty")].caption = "Mmmm... Tasty!"
sfxinfo[freeslot("sfx_twaf")].caption = "/"
sfxinfo[freeslot("sfx_lazy")].caption = "/"

mobjinfo[MT_TAZSPITTLE] = {
	spawnstate = S_TAZSPITTLE,
	spawnhealth = 1000,
	deathstate = S_BOSSEXPLODE,
	deathsound = sfx_bexpld,
	speed = 100*FRACUNIT,
	radius = 8*FRACUNIT,
	height = 8*FRACUNIT,
	mass = 100,
	damage = 1*TICRATE,
	flags = MF_NOBLOCKMAP|MF_MISSILE|MF_GRENADEBOUNCE
}
mobjinfo[MT_TAZSPITTLE2] = {
	spawnstate = S_TAZSPITTLE2,
	spawnhealth = 1000,
	deathsound = sfx_wbreak,
	speed = 100*FRACUNIT,
	radius = 8*FRACUNIT,
	height = 8*FRACUNIT,
	mass = 100,
	damage = 1*TICRATE,
	flags = MF_NOBLOCKMAP|MF_MISSILE|MF_GRENADEBOUNCE
}
mobjinfo[MT_TAZROCK] = {
	spawnstate = S_TAZROCK,
	spawnhealth = 1000,
	speed = 100*FRACUNIT,
	radius = 8*FRACUNIT,
	height = 8*FRACUNIT,
	mass = 100,
	damage = 1*TICRATE,
	flags = MF_NOBLOCKMAP|MF_MISSILE|MF_GRENADEBOUNCE
}
mobjinfo[MT_TAZBUBBLES] = {
	spawnstate = S_TAZBUBBLE,
	spawnhealth = 1000,
	flags = MF_NOBLOCKMAP|MF_NOGRAVITY
}
mobjinfo[MT_TAZSMOKE] = {
	spawnstate = S_TAZSMOKE,
	spawnhealth = 1000,
	flags = MF_NOBLOCKMAP|MF_NOGRAVITY
}
mobjinfo[MT_TAZGUM] = {
	spawnstate = S_TAZGUM,
	spawnhealth = 1000,
	radius = 16*FRACUNIT,
	height = 16*FRACUNIT,
	flags = MF_SPECIAL|MF_NOGRAVITY
}
mobjinfo[MT_TAZFLICKY] = {
	spawnstate = S_TAZFLICKY,
	spawnhealth = 1000,
	speed = -4*FRACUNIT,
	flags = MF_NOCLIPHEIGHT|MF_NOBLOCKMAP|MF_NOGRAVITY
}
mobjinfo[MT_TAZFLICKY2] = {
	spawnstate = S_TAZFLICKY2,
	spawnhealth = 1000,
	speed = 4*FRACUNIT,
	flags = MF_NOCLIPHEIGHT|MF_NOBLOCKMAP|MF_NOGRAVITY
}
mobjinfo[MT_GUMSPAWN] = {
	spawnstate = S_GUMSPAWN,
	spawnhealth = 1000,
	speed = 36*FRACUNIT,
	radius = 25*FRACUNIT,
	height = 25*FRACUNIT,
	flags = MF_NOCLIP|MF_MISSILE|MF_NOGRAVITY
}
mobjinfo[MT_GUMPOP] = {
	spawnstate = S_GUMPOP,
	spawnhealth = 1000,
	flags = MF_NOCLIP|MF_NOCLIPHEIGHT
}
mobjinfo[MT_GUMPOP2] = {
	spawnstate = S_GUMPOP2,
	spawnhealth = 1000,
	flags = MF_NOCLIP|MF_NOCLIPHEIGHT
}
mobjinfo[MT_OTRAIL] = {
	spawnstate = S_OTRAIL,
	spawnhealth = 1000,
	flags = MF_NOGRAVITY
}
mobjinfo[MT_TMQUIL] = {
	spawnstate = S_TMQUIL,
	spawnhealth = 1000,
	flags = MF_NOCLIP|MF_NOCLIPHEIGHT
}
mobjinfo[MT_TMHRT] = {
	spawnstate = S_TMHRT,
	spawnhealth = 1000,
	radius = 1*FRACUNIT,
	height = 1*FRACUNIT,
	flags = MF_NOGRAVITY|MF_NOCLIPHEIGHT
}

states[S_TMQUIL] = {
	sprite = SPR_TMQL,
	frame = FF_ANIMATE|FF_RANDOMANIM|A,
	tics = 50,
	var1 = 2,
	var2 = 5,
	nextstate = S_NULL
}
states[S_TAZTHOK] = {
	sprite = SPR_TAZ2,
	frame = FF_ANIMATE|A,
	tics = 18,
	var1 = 5,
	var2 = 2,
	nextstate = S_TASH
}
states[S_SPINTWIN] = {
	sprite = SPR_TAZ2,
	frame = FF_ANIMATE|A,
	tics = 12,
	var1 = 5,
	var2 = 2,
	nextstate = S_PLAY_FALL
}
states[S_TRIPLETSPIN] = {
	sprite = SPR_TASH,
	frame = FF_ANIMATE|A,
	tics = 12,
	var1 = 5,
	var2 = 2,
	nextstate = S_PLAY_FALL
}
states[S_TAZSPITTLE] = {
	sprite = SPR_TZBN,
	frame = FF_ANIMATE|A,
	tics = -1,
	var1 = 3,
	var2 = 2,
	nextstate = S_TAZSPITTLE
}
states[S_TAZSPITTLE2] = {
	sprite = SPR_TZBK,
	frame = FF_ANIMATE|A,
	tics = -1,
	var1 = 3,
	var2 = 2,
	nextstate = S_TAZSPITTLE2
}
states[S_TAZROCK] = {
	sprite = SPR_ROIJ,
	frame = FF_ANIMATE|A,
	tics = -1,
	var1 = 4,
	var2 = 2,
	nextstate = S_TAZROCK
}
states[S_TASH] = {
	sprite = SPR_TASH,
	frame = FF_ANIMATE|A,
	tics = -1,
	var1 = 5,
	var2 = 2,
	nextstate = S_TASH
}
states[S_TAZ1] = {
	sprite = SPR_TAZH,
	frame = FF_ANIMATE|A,
	tics = 12,
	var1 = 5,
	var2 = 2,
	nextstate = S_TASH
}
states[S_TAZ0] = {
	sprite = SPR_TAZH,
	frame = FF_ANIMATE|A,
	tics = 12,
	var1 = 5,
	var2 = 2,
	nextstate = S_PLAY_WALK
}
states[S_TAZFLOAT] = {
	sprite = SPR_TASH,
	frame = FF_ANIMATE|A,
	tics = 12,
	var1 = 5,
	var2 = 2,
	nextstate = S_PLAY_FALL
}
states[S_TAZBITE] = {
	sprite = SPR_TZBT,
	frame = FF_ANIMATE|A,
	tics = 8,
	var1 = 3,
	var2 = 2,
	nextstate = S_PLAY_FALL
}
states[S_TAZBITEG] = {
	sprite = SPR_TZBT,
	frame = FF_ANIMATE|A,
	tics = 8,
	var1 = 3,
	var2 = 2,
	nextstate = S_PLAY_FALL
}
states[S_TAZEAT] = {
	sprite = SPR_TZBT,
	frame = FF_ANIMATE|A,
	tics = 8,
	var1 = 3,
	var2 = 2,
	nextstate = S_TAZEATING
}
states[S_TAZEATING] = {
	sprite = SPR_TZBT,
	frame = D,
	tics = 16,
	nextstate = S_PLAY_FALL
}
states[S_TAZSPIT] = {
	sprite = SPR_TZSP,
	frame = FF_ANIMATE|A,
	tics = 12,
	var1 = 1,
	var2 = 6,
	nextstate = S_PLAY_FALL
}
states[S_TAZGAP] = {
	sprite = SPR_TZGP,
	frame = A,
	tics = -1,
	nextstate = S_TAZGAP
}
states[S_TAZSKATE] = {
	sprite = SPR_TZSK,
	frame = FF_ANIMATE|A,
	tics = 6,
	var1 = 1,
	var2 = 3,
	nextstate = S_TAZSKATE
}
states[S_TAZCRASHED] = {
	sprite = SPR_TZCL,
	frame = A,
	tics = 15,
	nextstate = S_TAZCRUSHED
}
states[S_TAZCRUSHED] = {
	sprite = SPR_TZCR,
	frame = FF_ANIMATE|A,
	tics = 40,
	var1 = 7,
	var2 = 5,
	nextstate = S_PLAY_STND
}
states[S_TAZBUBBLE] = {
	sprite = SPR_TZBB,
	frame = FF_ANIMATE|A,
	tics = 24,
	var1 = 7,
	var2 = 3,
	nextstate = S_NULL
}
states[S_TAZSMOKE] = {
	sprite = SPR_TZMK,
	frame = FF_ANIMATE|A,
	tics = 15,
	var1 = 4,
	var2 = 3,
	nextstate = S_NULL
}
states[S_TAZFIRESHIELD] = {
	sprite = SPR_TZFS,
	frame = FF_ANIMATE|A,
	tics = 10,
	var1 = 1,
	var2 = 5,
	nextstate = S_PLAY_WAIT
}
states[S_TAZGUM] = {
	sprite = SPR_TGUM,
	frame = FF_ANIMATE|C,
	tics = 360,
	var1 = 3,
	var2 = 5,
	nextstate = S_DEATHSTATE
}
states[S_TAZFLICKY] = {
	sprite = SPR_FTZ1,
	frame = FF_ANIMATE|A,
	tics = -1,
	var1 = 2,
	var2 = 4,
	nextstate = S_TAZFLICKY
}
states[S_TAZFLICKY2] = {
	sprite = SPR_FTZ2,
	frame = FF_ANIMATE|A,
	tics = -1,
	var1 = 2,
	var2 = 4,
	nextstate = S_TAZFLICKY2
}
states[S_GUMSPAWN] = {
	sprite = SPR_NULL,
	frame = A,
	tics = 2,
	nextstate = S_DEATHSTATE
}
states[S_GUMPOP] = {
	sprite = SPR_TGUM,
	frame = B,
	tics = 3,
	nextstate = S_NULL
}
states[S_GUMPOP2] = {
	sprite = SPR_TGUM,
	frame = C,
	tics = 3,
	nextstate = S_NULL
}
states[S_OTRAIL] = {
	sprite = SPR_SPLA,
	frame = FF_ANIMATE|A,
	tics = 6,
	var1 = 2,
	var2 = 2,
	nextstate = S_OTRAIL2
}
states[S_OTRAIL2] = {
	sprite = SPR_SPLA,
	frame = FF_TRANS20|C,
	tics = 3,
	nextstate = S_OTRAIL3
}
states[S_OTRAIL3] = {
	sprite = SPR_SPLA,
	frame = FF_TRANS40|C,
	tics = 3,
	nextstate = S_OTRAIL4
}
states[S_OTRAIL4] = {
	sprite = SPR_SPLA,
	frame = FF_TRANS60|C,
	tics = 3,
	nextstate = S_OTRAIL5
}
states[S_OTRAIL5] = {
	sprite = SPR_SPLA,
	frame = FF_TRANS80|C,
	tics = 3,
	nextstate = S_NULL
}
states[S_TAZDROWN] = {
	sprite = SPR_TZDW,
	frame = FF_ANIMATE|A,
	tics = 60,
	var1 = 3,
	var2 = 3,
	nextstate = S_TAZDROWN2
}
states[S_TAZDROWN2] = {
	sprite = SPR_TZDW,
	frame = FF_ANIMATE|A,
	tics = 12,
	var1 = 3,
	var2 = 3,
	nextstate = S_PLAY_STND
}
states[S_TAZMINECART] = {
	sprite = SPR_TZMC,
	frame = A,
	tics = 3,
	nextstate = S_PLAY_STND
}
states[S_TAZMINECARTL] = {
	sprite = SPR_TZMC,
	frame = B,
	tics = 3,
	nextstate = S_PLAY_STND
}
states[S_TAZMINECARTR] = {
	sprite = SPR_TZMC,
	frame = C,
	tics = 3,
	nextstate = S_PLAY_STND
}
states[S_TMHRT] = {
	sprite = SPR_THRT,
	frame = A,
	tics = 60,
	nextstate = S_TMHRT2
}
states[S_TMHRT2] = {
	sprite = SPR_THRT,
	frame = B,
	tics = 4,
	nextstate = S_NULL
}

hud.add(function(wp, p, cam)
	if p and p.valid and p.mo and p.mo.valid then
		if p.powers[pw_shield] == SH_TGUM then
			wp.drawString(16, 192, "Gum", V_MAGENTAMAP|V_HUDTRANSDOUBLE|V_PERPLAYER)
			if p.tossdelay >= TICRATE*2 then
				wp.drawString(154, 185, "|||", V_MAGENTAMAP|V_HUDTRANSDOUBLE|V_PERPLAYER)
			elseif p.tossdelay >= TICRATE then
				wp.drawString(156, 185, "||", V_MAGENTAMAP|V_HUDTRANSDOUBLE|V_PERPLAYER)
			elseif not p.tossdelay then
				wp.drawString(154, 185, "...", V_MAGENTAMAP|V_HUDTRANSDOUBLE|V_PERPLAYER)
			else
				wp.drawString(158, 185, "|", V_MAGENTAMAP|V_HUDTRANSDOUBLE|V_PERPLAYER)
			end
		elseif p.mo.state == S_TAZDROWN 
		or p.mo.state == S_TAZDROWN2 then
			wp.draw(158, 80, wp.cachePatch("TZHW"),V_PERPLAYER)
		end
	end
end)

if not(kirbyabilitytable)
    rawset(_G, "kirbyabilitytable", {})
end

kirbyabilitytable["taz"] = 7

COM_AddCommand("tazbt", function(p)
	local TAZBT = "client/taz/tazbite.dat"
	local file = io.openlocal(TAZBT)
	if file then
		local num = file:read("*n")
		if num == 2 then
			p.tazbt = 3
			print("C2")
			file:close()
			local file = io.openlocal(TAZBT, "w+")
			file:write(p.tazbt)
			file:close()
		elseif num == 1 then
			p.tazbt = 2
			print("FireNormal")
			file:close()
			local file = io.openlocal(TAZBT, "w+")
			file:write(p.tazbt)
			file:close()
		elseif p.tazbt == 3 then
			p.tazbt = 1
			print("Fire")
			file:close()
			local file = io.openlocal(TAZBT, "w+")
			file:write(p.tazbt)
			file:close()
		end
	else
		p.tazbt = 1
		print("Fire")
		local file = io.openlocal(TAZBT, "w+")
		file:write(p.tazbt)
		file:close()
	end
end)

COM_AddCommand("tazspin", function(p)
	local TAZSP = "client/taz/tazspin.dat"
	local file = io.openlocal(TAZSP)
	if file then
		local num = file:read("*n")
		if num == 0 then
			p.tazhold = 1
			print("Hold spin to spin!")
			file:close()
			local file = io.openlocal(TAZSP, "w+")
			file:write(p.tazhold)
			file:close()
		else
			p.tazhold = 0
			print("Press spin to spin!")
			file:close()
			local file = io.openlocal(TAZSP, "w+")
			file:write(p.tazhold)
			file:close()
		end
	else
		p.tazhold = 1
		print("Hold spin to spin!")
		local file = io.openlocal(TAZSP, "w+")
		file:write(p.tazhold)
		file:close()
	end
end)

COM_AddCommand("tazload", function(p)
	local TAZSP = "client/taz/tazspin.dat"
	local file = io.openlocal(TAZSP)
	if file then
		local num = file:read("*n")
		if num == 0 then
			p.tazhold = 0
			file:close()
		else
			p.tazhold = 1
			file:close()
		end
	end
	local TAZBT = "client/taz/tazbite.dat"
	local file = io.openlocal(TAZBT)
	if file then
		local num = file:read("*n")
		if num == 3 then
			p.tazbt = 3
			file:close()
		elseif num == 1 then
			p.tazbt = 1
			file:close()
		elseif num == 2 then
			p.tazbt = 2
			file:close()
		end
	end
end)