if not (rawget(_G, "customhud")) return end
local modname = "takisthefox"

--HEALTH----------

local function drawheartcards(v,p)

	if (customhud.CheckType("heartcards") != modname) return end

	if p.powers[pw_carry] == CR_NIGHTSMODE
	or (TAKIS_NET.inspecialstage)
		return
	end
	
	if (TAKIS_NET.usesheartcards == true)

	local xoff = 20*FU
	local takis = p.takistable
	
	local maxx = (15*FU)*TAKIS_MAX_HEARTCARDS
	if TAKIS_MAX_HEARTCARDS > 6
		maxx = $-((TAKIS_MAX_HEARTCARDS-6)*FU)
		xoff = $-((FU)*(TAKIS_MAX_HEARTCARDS-6))
	elseif TAKIS_MAX_HEARTCARDS < 6
		xoff = $+((FU*2)*(TAKIS_MAX_HEARTCARDS))
	end
	
	//heart cards
	for i = 1, TAKIS_MAX_HEARTCARDS do
		local eflag = V_HUDTRANS
				
		local patch = v.cachePatch("HEARTCARD1")
		if TAKIS_MAX_HEARTCARDS-i > takis.heartcards-1
		or p.spectator
			patch = v.cachePatch("HEARTCARD2")
			if p.spectator
				eflag = V_HUDTRANSHALF
			end
		end
				
		local add = -3*FU
				
		if (i%2)
			add = 3*FU
		end
				
		local shakex,shakey = 0,0
				
		if takis.HUD.heartcards.shake
		and not (paused)
		and not (menuactive and takis.isSinglePlayer)
			
			local s = takis.HUD.heartcards.shake
			shakex,shakey = v.RandomFixed()/2,v.RandomFixed()/2
			
			local d1 = v.RandomRange(-1,1)
			local d2 = v.RandomRange(-1,1)
			if d1 == 0
				d1 = v.RandomRange(-1,1)
			end
			if d2 == 0
				d2 = v.RandomRange(-1,1)
			end
		
			shakex = $*s*d1
			shakey = $*s*d2
		end

		local flags = V_SNAPTOLEFT|V_SNAPTOTOP|V_PERPLAYER|eflag
		
		//draw from last to first
		v.drawScaled(maxx-((13*FU)*i)+xoff+shakex,15*FU+add-takis.HUD.heartcards.add+shakey,4*FU/5, patch, flags)
		//v.drawScaled(15*FU,15*FU,4*FU/5, v.cachePatch("HEARTCARD1"), V_SNAPTOLEFT|V_SNAPTOTOP|V_HUDTRANS)
		
	end

	//heal indc.
	if takis.heartcards ~= TAKIS_MAX_HEARTCARDS
		v.drawString((maxx/FU)+10+(xoff/FU),15+4,takis.heartcardpieces,V_SNAPTOLEFT|V_SNAPTOTOP|V_HUDTRANS|V_PERPLAYER,"thin")
		v.drawString((maxx/FU)+10+4+(xoff/FU),15+4+4,"/",V_SNAPTOLEFT|V_SNAPTOTOP|V_HUDTRANS|V_PERPLAYER,"thin")
		v.drawString((maxx/FU)+10+7+(xoff/FU),15+8+3-2+4,"7",V_SNAPTOLEFT|V_SNAPTOTOP|V_HUDTRANS|V_PERPLAYER,"thin")
		v.drawScaled(maxx+(10*FU)+(25*FU)+xoff, 33*FU, FU/2,v.getSpritePatch("RING", A, 0, 0), V_SNAPTOLEFT|V_SNAPTOTOP|V_HUDTRANS|V_PERPLAYER)
	end
	
	else
		
		local me = p.mo
		local color = V_YELLOWMAP
		local eflags = V_HUDTRANS
		
		if p.spectator
			color = V_GRAYMAP
			eflags = V_HUDTRANSHALF
		else
			if ((me) and (me.valid))
				if (p.ctfteam == 1)
					color = V_REDMAP
				elseif (p.ctfteam == 2)
					color = V_BLUEMAP
				end
				if (p.pflags & PF_TAGIT)
					color = V_ORANGEMAP
				end
			else
				color = V_GRAYMAP
				eflags = V_HUDTRANSHALF
			end
		end
		
		v.drawString(35,20,p.name,V_ALLOWLOWERCASE|V_SNAPTOLEFT|V_SNAPTOTOP|V_PERPLAYER|eflags|color)
	end
end

--      ----------

--FACE  ----------

//referencing doom's status face code
// https://github.com/id-Software/DOOM/blob/77735c3ff0772609e9c8d29e3ce2ab42ff54d20b/linuxdoom-1.10/st_stuff.c#L752
local function calcstatusface(p,takis)
	local me = p.mo
	
	//idle
	if not ( ((PizzaTime) and (PizzaTime.PizzaTime)) or (JISK_PIZZATIME) 
	or ((PTJE) and (PTJE.pizzatime)) )
		takis.HUD.statusface.state = "IDLE"
		takis.HUD.statusface.frame = (leveltime/3)%2
		takis.HUD.statusface.priority = 0
	else
		takis.HUD.statusface.state = "PTIM"
		takis.HUD.statusface.frame = (2*leveltime/3)%2
		takis.HUD.statusface.priority = 0
	
	end
	
	if takis.HUD.statusface.priority < 10
		
		//dead
		if not (me)
		or (not me.health)
		or (p.playerstate ~= PST_LIVE)
		or (p.spectator)
			takis.HUD.statusface.state = "DEAD"
			takis.HUD.statusface.frame = 0
			takis.HUD.statusface.priority = 9
		end
	end
	
	if takis.HUD.statusface.priority < 9
		
		//pain
		if (takis.inPain)
		or (takis.ticsforpain)
		or (me.sprite2 == SPR2_PAIN)
		or (me.state == S_PLAY_PAIN)
		or takis.tauntid == 1
		or takis.HUD.statusface.painfacetic
			takis.HUD.statusface.state = "PAIN"
			takis.HUD.statusface.frame = (leveltime%4)/2
			takis.HUD.statusface.priority = 8
		end
		
	end
	
	
	if takis.HUD.statusface.priority < 8
		
		//evil grin when killing someone
		//or a boss
		if takis.HUD.statusface.evilgrintic
			takis.HUD.statusface.state = "EVL_"
			takis.HUD.statusface.frame = (leveltime/4)%2
			takis.HUD.statusface.priority = 7
		end
		
	end
	
	if takis.HUD.statusface.priority < 7
		
		//happy face
		if takis.HUD.statusface.happyfacetic
		or takis.tauntid == 2
			takis.HUD.statusface.state = "HAPY"
			takis.HUD.statusface.frame = (leveltime/2)%2
			takis.HUD.statusface.priority = 6		
		end
		
	end
	
	
	if takis.HUD.statusface.priority < 6
		
		//doom's godmode face
		if (p.pflags & PF_GODMODE)
			takis.HUD.statusface.state = "GOD_"
			takis.HUD.statusface.priority = 5
		end
		
	end
	
	if takis.HUD.statusface.priority < 2
	
		//space drown
		if ((P_InSpaceSector(me)) and (p.powers[pw_spacetime]))
		or ((p.powers[pw_underwater]) and (p.powers[pw_underwater] <= 11*TR))
			takis.HUD.statusface.state = "SDWN"
			takis.HUD.statusface.frame = (leveltime)%2
			takis.HUD.statusface.priority = 1
		end
		
	end
	
	return takis.HUD.statusface.state, takis.HUD.statusface.frame
end

local function drawface(v,p)

	if (customhud.CheckType("statusface") != modname) return end

	if p.powers[pw_carry] == CR_NIGHTSMODE
	or (TAKIS_NET.inspecialstage)
		return
	end

	local takis = p.takistable
	local me = p.mo

	local healthstate,healthframe = calcstatusface(p,takis)	
	local headpatch = v.cachePatch("TAK"..healthstate..tostring(healthframe))
	
	local eflags = V_HUDTRANS
	
	local headcolor
	if p.spectator
		headcolor = SKINCOLOR_CLOUDY
		eflags = V_HUDTRANSHALF
	else
		if ((me) and (me.valid))
			headcolor = me.color
		else
			headcolor = SKINCOLOR_CLOUDY
			eflags = V_HUDTRANSHALF
		end
	end
	
	local y = 0
	local expectedtime = TR
	
	if ( ((JISK_PIZZATIMETICS) and (JISK_PIZZATIMETICS <= 3*TR))
	or ((PTJE) and (PTJE.pizzatime_tics) and (PTJE.pizzatime_tics <= 3*TR)) )
		
		local tics = JISK_PIZZATIMETICS or PTJE.pizzatime_tics
		
		if (tics < 2*TR)
			y = ease.inquad(( FU / expectedtime )*tics, 0, -60*FU)
		else
			y = ease.outquad(( FU / expectedtime )*(tics-(2*TR)), -60*FU, 0)
		end
	end
	
	v.drawScaled(20*FU,27*FU+y,2*FU/5, headpatch, V_SNAPTOLEFT|V_SNAPTOTOP|V_PERPLAYER|eflags,v.getColormap(nil,headcolor))

end

--      ----------

--RINGS ----------

local function drawrings(v,p)

	if (customhud.CheckType("rings") != modname) return end

	if p.powers[pw_carry] == CR_NIGHTSMODE
	or (TAKIS_NET.inspecialstage)
		return
	end

	local ringpatch = "RING"
	
	local takis = p.takistable
	
	local flash = false
	
	if p.rings == 0
	and takis.heartcards <= 0
		flash = true
	end
			
	local ringFx,ringFy = unpack(takis.HUD.rings.FIXED)
	local ringx,ringy = unpack(takis.HUD.rings.int)
	flash = (flash and ((leveltime%(2*TR)) < 30*TR) and (leveltime/5 & 1))

	if flash
		ringpatch = "TRNG"
	end

	v.drawScaled(ringFx, ringFy, FU/2,v.getSpritePatch(ringpatch, A, 0, 0), V_SNAPTOLEFT|V_SNAPTOTOP|V_HUDTRANS|V_PERPLAYER,v.getColormap(nil,SKINCOLOR_RED))
	v.drawNum(ringx, ringy, p.rings, V_SNAPTOLEFT|V_SNAPTOTOP|V_HUDTRANS|V_PERPLAYER)
	
end

--      ----------

--TIMER ----------

//this is so minhud
// https://mb.srb2.org/addons/minhud.2927/
local function howtotimer(player)
	local flash, tics = false
	
	local pt, lt = player.realtime, leveltime
	local puretlimit, purehlimit = CV_FindVar("timelimit").value, CV_FindVar("hidetime").value
	local tlimit = puretlimit * 60 * TR
	local hlimit = purehlimit * TR
	local extratext = ''
	local extrafunc = ''
	
	-- Counting down the hidetime?
	if (gametyperules & GTR_STARTCOUNTDOWN)
	and (pt <= hlimit)
		tics = hlimit - pt
		flash = true
		extrafunc = "countinghide"
	else
		-- Time limit?
		if (gametyperules & GTR_TIMELIMIT) and (puretlimit) then -- Gotta thank CobaltBW for spotting this oversight.
			if (tlimit > pt)
				tics = tlimit - pt
			else -- Overtime!
				tics = 0
			end
			flash = true
		-- Post-hidetime normal.
        elseif (gametyperules & GTR_STARTCOUNTDOWN) and (gametyperules & GTR_TIMELIMIT) -- Thanking 'im again.
            tics = tlimit - pt
        elseif (gametyperules & GTR_STARTCOUNTDOWN)
            tics = pt - hlimit
			extrafunc = "hiding"
        else
            tics = pt
        end
	end
	
	flash = (flash and (tics < 30*TR) and (lt/5 & 1)) -- Overtime?
	
	return flash, tics, extratext, extrafunc
end

local function drawtimer(v,p)

	if (customhud.CheckType("time") != modname) return end

	if p.powers[pw_carry] == CR_NIGHTSMODE
	or (TAKIS_NET.inspecialstage)
		return
	end
	
	local takis = p.takistable
	
	//time
	//this is so minhud
	local flashflag = 0
	local flash,timetic,extratext,extrafunc = howtotimer(p)
			
	if flash
		flashflag = V_REDMAP
	end
	
	local hours = G_TicsToHours(timetic)
	local minutes = G_TicsToMinutes(timetic, false)
	local seconds = G_TicsToSeconds(timetic)
	local tictrn  = G_TicsToCentiseconds(timetic)
	local spad, tpad = '', ''
	local extra = ''
	local extrac = ''
	
	//paddgin!!
	if (seconds < 10) then spad = '0' end
	if (tictrn < 10) then tpad = '0' end
	
	local timex, timey = unpack(takis.HUD.timer.int)
	local timetx = takis.HUD.timer.text
			
	if hours > 0
		extrac = ":"
	else
		hours = ''
	end
	
	if minutes >= 10
	and extrafunc == ''
		extra = " (SUCKS)"
	end
	
	if p.spectator
		timex, timey = unpack(takis.HUD.timer.spectator)
	elseif ((p.pflags & PF_FINISHED) and (netgame))
	or extrafunc == "hiding"
	or extrafunc == "countinghide"
	or p.exiting
		timex, timey = unpack(takis.HUD.timer.finished)
	end
	v.drawString(timex, timey, hours..extrac..minutes..":"..spad..seconds.."."..tictrn..tpad,V_SNAPTOLEFT|V_SNAPTOTOP|V_HUDTRANS|V_PERPLAYER|flashflag,"thin-right")		v.drawString(timetx, timey, "Time"..extra,V_SNAPTOLEFT|V_SNAPTOTOP|V_HUDTRANS|V_PERPLAYER|flashflag,"thin")
	if extratext ~= ''
		v.drawString(timetx, timey+8, extratext,V_SNAPTOLEFT|V_SNAPTOTOP|V_HUDTRANS|V_PERPLAYER|flashflag,"thin")			
	end
end

--      ----------

--SCORE ----------
local function drawscore(v,p)

	if (customhud.CheckType("score") != modname) return end
	
	if p.powers[pw_carry] == CR_NIGHTSMODE
	or (TAKIS_NET.inspecialstage)
		return
	end

	v.drawString(300-15, 15, p.score,V_SNAPTORIGHT|V_SNAPTOTOP|V_HUDTRANS|V_PERPLAYER,"right")

end

--      ----------

--LIVES ----------

//source lol
// https://github.com/STJr/SRB2/blob/eb1492fe6e501001a2271fa133bd76c0b0612715/src/st_stuff.c#L812
local function drawlivesarea(v,p)

	if (customhud.CheckType("lives") != modname) return end
	
	local textmap = V_YELLOWMAP
	local candrawlives = true
	local infinite = false
	
	local me = p.mo
	local takis = p.takistable
	
	if not (p.skincolor)
		return
	end
	
	//face background
	v.drawScaled(
		(hudinfo[HUD_LIVES].x)*FU,
		hudinfo[HUD_LIVES].y*FU,
		FU/2,
		v.cachePatch("TAK_LIFEBACK"),
		hudinfo[HUD_LIVES].f|V_HUDTRANS|V_PERPLAYER,
		v.getColormap(TAKIS_SKIN, nil)
	)
	
	//face
	if (p.spectator)
		v.drawScaled(
			(hudinfo[HUD_LIVES].x)*FU,
			hudinfo[HUD_LIVES].y*FU,
			FU/2,
			v.getSprite2Patch(TAKIS_SKIN,SPR2_XTRA,false,A,0,0),
			hudinfo[HUD_LIVES].f|V_HUDTRANSHALF|V_PERPLAYER,
			v.getColormap(TAKIS_SKIN, SKINCOLOR_CLOUDY)
		)
	elseif ((me) and (me.color))
		v.drawScaled(
			(hudinfo[HUD_LIVES].x)*FU,
			hudinfo[HUD_LIVES].y*FU,
			FU/2,
			v.getSprite2Patch(TAKIS_SKIN,SPR2_XTRA,false,A,0,0),
			hudinfo[HUD_LIVES].f|V_HUDTRANS|V_PERPLAYER,
			v.getColormap(TAKIS_SKIN, me.color)
		)
	elseif (p.skincolor)
		v.drawScaled(
			(hudinfo[HUD_LIVES].x)*FU,
			hudinfo[HUD_LIVES].y*FU,
			FU/2,
			v.getSprite2Patch(TAKIS_SKIN,SPR2_XTRA,false,A,0,0),
			hudinfo[HUD_LIVES].f|V_HUDTRANS|V_PERPLAYER,
			v.getColormap(TAKIS_SKIN, p.skincolor)
		)		
	end
	
	//text
	if (p.spectator)
		textmap = V_GRAYMAP
	elseif (gametyperules & GTR_TAG)
		if (p.pflags & PF_TAGIT)
			v.drawString(
				hudinfo[HUD_LIVES].x+58,hudinfo[HUD_LIVES].y+8,
				"IT!",
				V_HUDTRANS|hudinfo[HUD_LIVES].f|V_PERPLAYER|V_ALLOWLOWERCASE,
				"thin-right"
			)
			textmap = V_ORANGEMAP
		end
	elseif (G_GametypeHasTeams())
		
		if (p.ctfteam == 1)
			v.drawString(
				hudinfo[HUD_LIVES].x+58,hudinfo[HUD_LIVES].y+8,
				"\x85RED",
				V_HUDTRANS|hudinfo[HUD_LIVES].f|V_PERPLAYER|V_ALLOWLOWERCASE,
				"thin-right"
			)
			textmap = V_REDMAP
		
		elseif (p.ctfteam == 2)
			v.drawString(
				hudinfo[HUD_LIVES].x+58,hudinfo[HUD_LIVES].y+8,
				"\x84".."BLU",
				V_HUDTRANS|hudinfo[HUD_LIVES].f|V_PERPLAYER|V_ALLOWLOWERCASE,
				"thin-right"
			)
			textmap = V_BLUEMAP
		
		end
	end
	
	if (G_GametypeUsesLives())
		if CV_FindVar("cooplives").value == 0
			infinite = true
		end
	elseif (G_PlatformGametype() and not (gametyperules & GTR_LIVES))
		infinite = true
	else
		candrawlives = false
	end
	
	if takis.isSinglePlayer
		if p.lives ~= INFLIVES
			infinite = false
		else
			infinite = true
		end
	end
	
	if (candrawlives)
		v.drawScaled(
			(hudinfo[HUD_LIVES].x+22)*FU,(hudinfo[HUD_LIVES].y+9)*FU,
			FU,
			v.cachePatch("STLIVEX"),
			hudinfo[HUD_LIVES].f|V_PERPLAYER|V_HUDTRANS
		)
		if (infinite)
			
			v.drawScaled(
				(hudinfo[HUD_LIVES].x+50)*FU,(hudinfo[HUD_LIVES].y+9)*FU,
				FU,
				v.cachePatch("STCFN022"),
				hudinfo[HUD_LIVES].f|V_PERPLAYER|V_HUDTRANS
			)
			
		else
			local value = p.lives
			
			if CV_FindVar("cooplives").value == 3
			and (netgame or multiplayer)
				value = TAKIS_NET.livescount
			end
			
			v.drawString(
				hudinfo[HUD_LIVES].x+58,hudinfo[HUD_LIVES].y+9,
				value,
				hudinfo[HUD_LIVES].f|V_PERPLAYER|V_HUDTRANS,
				"thin-right"
			)
		end
			
		
	end
	
	if not (modeattacking)
	
		textmap = $|(V_HUDTRANS|hudinfo[HUD_LIVES].f|V_PERPLAYER|V_ALLOWLOWERCASE)
		v.drawString(
			hudinfo[HUD_LIVES].x+58,hudinfo[HUD_LIVES].y,
			skins[TAKIS_SKIN].hudname,
			textmap,
			"thin-right"
		)
	
	end
	
	//i guess i gotta draw the stones too
	if (G_RingSlingerGametype())
		local workx = hudinfo[HUD_LIVES].x+1
		local additive = 0
		
		local emeraldpics = {
			v.cachePatch("CHAOS1"),
			v.cachePatch("CHAOS2"),
			v.cachePatch("CHAOS3"),
			v.cachePatch("CHAOS4"),
			v.cachePatch("CHAOS5"),
			v.cachePatch("CHAOS6"),
			v.cachePatch("CHAOS7"),
		}
		
		if ((p.powers[pw_invulnerability]) and (p.powers[pw_sneakers] == p.powers[pw_invulnerability] ))
			if (not((leveltime/2)%2))
				additive = V_ADD
			end
			
			for i = 1, 7
				v.drawScaled(
					workx*FU,
					(hudinfo[HUD_LIVES].y-9)*FU,
					FU/4,
					emeraldpics[i],
					V_HUDTRANS|hudinfo[HUD_LIVES].f|V_PERPLAYER|additive
				)
				workx = $+9
			end
		else
		
			for i = 0, 7
				if (p.powers[pw_emeralds] & (1<<i))
					v.drawScaled(
						workx*FU,
						(hudinfo[HUD_LIVES].y-9)*FU,
						FU/4,
						emeraldpics[i+1],
						V_HUDTRANS|hudinfo[HUD_LIVES].f|V_PERPLAYER
					)
				end
				workx = $+9
			end
		
		end
		
	end
	
	
end

--      ----------

--CLUTCH----------

local function drawclutches(v,p)

	if (customhud.CheckType("clutchstuff") != modname) return end
	
	if p.powers[pw_carry] == CR_NIGHTSMODE
	or (TAKIS_NET.inspecialstage)
		return
	end
	
	local takis = p.takistable
	local me = p.mo
	
	local drawclutchbar = function(v, p, takis)
		local maxammo = 13*23/5
		local curammo = 13*(23-takis.clutchtime)/5
		local x = hudinfo[HUD_LIVES].x
		local y = hudinfo[HUD_LIVES].y+20
		local barx = x //- maxammo/2
		local bary = y
		local patch1 = v.cachePatch("TAKISEG1") //blue
		local patch3 = v.cachePatch("TAKISEG2") //black
		local color = SKINCOLOR_GREEN
		
			--Ammo bar
			local pos = 0
			while (pos < maxammo)
				local patch = patch3
				pos = $ + 1
				
				
					if pos <= curammo
						v.draw(barx + pos - 1, bary, patch3, V_SNAPTOBOTTOM|V_SNAPTOLEFT|V_HUDTRANS|V_PERPLAYER)
						if pos > curammo - 1
							if (curammo <= 1)
								//first
								patch = patch1
							else
								//fill
								patch = patch1
							end
						else
							patch = patch1
						end
					end
					
				if (takis.clutchtime <= 11)
				and (takis.clutchtime > 0)
					color = SKINCOLOR_CRIMSON
				end
				
				//todo: skincolors
				v.draw(barx + pos - 1, bary, patch, V_SNAPTOBOTTOM|V_SNAPTOLEFT|V_HUDTRANS|V_PERPLAYER,v.getColormap(nil,color))
			end
			
	end

	//clutch bar
	if takis.clutchtime > 0
		drawclutchbar(v,p,takis)
	end
	//clutch combo
	if takis.clutchcombo
		local y = 0
		if (modeattacking)
			y = 10
		end
		
		v.drawString(hudinfo[HUD_LIVES].x, hudinfo[HUD_LIVES].y-20+y, takis.clutchcombo.."x BOOSTS",V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_HUDTRANS|V_PERPLAYER|V_ALLOWLOWERCASE)			
	end

end

--      ----------

--COMBO ----------

local drawcombotimebar = function(v, p, takis, comby,add,shake)
	local mul,div = 20,22
	
	local maxammo = mul*(TAKIS_MAX_COMBOTIME/3)/div
	local curammo = mul*(takis.combo.time/3)/div
	local x,y = unpack(takis.HUD.combo.meter.int)
	y = $+comby
	local barx, bary = x,y
	local patch1 = v.cachePatch("TAKCOSEG") //blue
	local blank = v.cachePatch("TAKISBLANK")
	local color = SKINCOLOR_RED
	
		--Ammo bar
		local pos = 0
		while (pos < maxammo)
			local patch = blank
			pos = $ + 1
			
			
				if pos <= curammo

					if pos > curammo - 1
						if (curammo <= 1)
							//first
							patch = patch1
						else
							//fill
							patch = patch1
						end
					else
						patch = patch1
					end
				end
				
			if pos > (3*maxammo/4)
				color = SKINCOLOR_GREEN
			elseif pos > (maxammo/2)
				color = SKINCOLOR_TAKIS_BARYELLOW
			elseif pos > (maxammo/4)
				color = SKINCOLOR_ORANGE
			end
			
			if takis.combo.frozen
				color = SKINCOLOR_CARBON
			end
			
			//todo: skincolors
			v.drawScaled((barx + pos - 1)*FU, (bary*FU)+(add)-((2*FU)/10)+(shake), 6*FU/5, patch, V_SNAPTOTOP|V_SNAPTOLEFT|V_HUDTRANS|V_PERPLAYER,v.getColormap(nil,color))
		end
		
end

local function drawcombostuff(v,p)

	if (customhud.CheckType("combometer") != modname) return end

	if p.powers[pw_carry] == CR_NIGHTSMODE
	or (TAKIS_NET.inspecialstage)
		return
	end
	
	local takis = p.takistable
	local me = p.mo

	local combdisp = 8
	local comby = 14
	if p.pflags & PF_FINISHED
		comby = $+16
	end
	
	if takis.combo.count
	or takis.combo.outrotics
	
	local add
	local shake = takis.HUD.combo.meter.shake
				
	if takis.combo.outrotics
		add = takis.combo.outro
	else
		add = takis.combo.intro
	end
	
	drawcombotimebar(v,p,takis,comby,add,shake)
	local meterx,metery = unpack(takis.HUD.combo.meter.FIXED)
	local numx,numy = unpack(takis.HUD.combo.num.int)
	v.drawScaled(meterx,metery+(comby*FU)+add+(shake),6*FU/5,v.cachePatch("TAKCOBACK"),V_HUDTRANS|V_SNAPTOLEFT|V_SNAPTOTOP|V_PERPLAYER, v.getColormap(nil, nil))
	v.drawNum(numx,numy+comby+(add/FU)+(shake/FU),takis.combo.count,V_HUDTRANS|V_SNAPTOLEFT|V_SNAPTOTOP|V_PERPLAYER)
	v.drawString((hudinfo[HUD_RINGS].x+18+combdisp+6)*FU,(hudinfo[HUD_RINGS].y+20+comby)*FU+(add)+(shake),"Combo!",V_HUDTRANS|V_ALLOWLOWERCASE|V_SNAPTOLEFT|V_SNAPTOTOP|V_PERPLAYER,"thin-fixed")
	
	if takis.combo.verylevel > 0
		for i = 1, takis.combo.verylevel
			
			local verypatch = v.cachePatch("TAKCOVERY")
			//if not (i % 2)
			//	verypatch = v.cachePatch("TAKCOSUPR")
			//end
			v.drawScaled(meterx+(7*FU)+(i*(3*FU)),metery+(37*FU)+(i*2*FU)+(comby*FU)+add,FU/3,verypatch,V_HUDTRANS|V_SNAPTOLEFT|V_SNAPTOTOP|V_PERPLAYER, v.getColormap(nil, color))
			
		end
	end
	
	local length = #TAKIS_COMBO_RANKS
	v.drawString((hudinfo[HUD_RINGS].x+18+combdisp+6+10)*FU,(hudinfo[HUD_RINGS].y+20+35+comby)*FU+(add),TAKIS_COMBO_RANKS[ ((takis.combo.rank-1) % length)+1 ],V_HUDTRANS|V_ALLOWLOWERCASE|V_SNAPTOLEFT|V_SNAPTOTOP|V_PERPLAYER,"thin-fixed-center")
	
	end --not stray
end

--      ----------

--ALIMENTS---------

local function drawaliments(v,p)

	if (customhud.CheckType("aliments") != modname) return end

	if p.powers[pw_carry] == CR_NIGHTSMODE
	or (TAKIS_NET.inspecialstage)
		return
	end
	
	local takis = p.takistable
	local me = p.mo

	//aliments
	//so minhud!
	TakisDrawAliments(
		v, p, -- Self explanatory.
		(hudinfo[HUD_LIVES].x+60)*FU, (hudinfo[HUD_LIVES].y)*FU, FU/2, V_SNAPTOBOTTOM|V_SNAPTOLEFT|V_HUDTRANS, -- Powerups X & Y. Scale. Flags.
		8*FU, 170*FU, 'thin-fixed-center', -- Timed powerups string X & Y & alignment. Relative to the powerup they're related to.
		17*FU, 0 -- Distance to shift and which angle to do so.
	)
	
end

--      ----------

--FREEZE----------

local function TakisDrawFreezing(v,p)
	local takis = p.takistable
	
	local TOP_LEFT = v.cachePatch("FREZ_1")
	local TOP_RIGHT = v.cachePatch("FREZ_2")
	local BOTTOM_LEFT = v.cachePatch("FREZ_3")
	local BOTTOM_RIGHT = v.cachePatch("FREZ_4")
	local TRANSPARENCY = 0

	if takis.aliments.iced
		TRANSPARENCY = 0
		v.fadeScreen(141, 5)
	end

	if takis.aliments.timetoice >= (TAKIS_MAX_ICETIME-TR) 
		TRANSPARENCY = V_10TRANS
		v.fadeScreen(141, 4)
	elseif takis.aliments.timetoice >= (TAKIS_MAX_ICETIME-TR-TR) 
		TRANSPARENCY = V_20TRANS
		v.fadeScreen(141, 3)
	elseif takis.aliments.timetoice >= (TAKIS_MAX_ICETIME-TR-TR-TR) 
		TRANSPARENCY = V_30TRANS
		v.fadeScreen(141, 3)
	elseif takis.aliments.timetoice >= (TAKIS_MAX_ICETIME-TR-TR-TR-TR)
		TRANSPARENCY = V_40TRANS
		v.fadeScreen(141, 2)
	elseif takis.aliments.timetoice >= (TAKIS_MAX_ICETIME-TR-TR-TR-TR-TR)
		TRANSPARENCY = V_50TRANS
		v.fadeScreen(141, 2)
	elseif takis.aliments.timetoice >= (TAKIS_MAX_ICETIME-TR-TR-TR-TR-TR-TR) 
		TRANSPARENCY = V_60TRANS
		v.fadeScreen(141, 1)
	elseif takis.aliments.timetoice >= (TAKIS_MAX_ICETIME-TR-TR-TR-TR-TR-TR-TR) 
		TRANSPARENCY = V_70TRANS
		v.fadeScreen(141, 1)
	elseif takis.aliments.timetoice >= (TAKIS_MAX_ICETIME-TR-TR-TR-TR-TR-TR-TR-TR) 
		TRANSPARENCY = V_80TRANS
		v.fadeScreen(141, 0)
	elseif takis.aliments.timetoice > 0
		TRANSPARENCY = V_90TRANS
		v.fadeScreen(141, 0)
	end
	
	if takis.aliments.iceremove
		local i = takis.aliments.iceremove
		
		if i >= 7*9
			TRANSPARENCY = 0
			v.fadeScreen(141, 5)
		
		elseif i >= 7*8
			TRANSPARENCY = V_10TRANS
			v.fadeScreen(141, 4)
		elseif i >= 7*7
			TRANSPARENCY = V_20TRANS
			v.fadeScreen(141, 3)
		
		elseif i >= 7*6
			TRANSPARENCY = V_30TRANS
			v.fadeScreen(141, 3)
		
		elseif i >= 7*5
			TRANSPARENCY = V_40TRANS
			v.fadeScreen(141, 2)
		elseif i >= 7*4
			TRANSPARENCY = V_50TRANS
			v.fadeScreen(141, 2)
		
		elseif i >= 7*3
			TRANSPARENCY = V_60TRANS
			v.fadeScreen(141, 1)
		
		elseif i >= 7*2
			TRANSPARENCY = V_70TRANS
			v.fadeScreen(141, 1)
		
		elseif i >= 7*1
			TRANSPARENCY = V_80TRANS
			v.fadeScreen(141, 0)
		
		elseif i > 0
			TRANSPARENCY = V_90TRANS
			v.fadeScreen(141, 0)
		end
	end
	
	v.draw(0, 0, TOP_LEFT, V_PERPLAYER|V_SNAPTOTOP|V_SNAPTOLEFT|TRANSPARENCY)
	v.draw(320, 0, TOP_RIGHT, V_PERPLAYER|V_SNAPTOTOP|V_SNAPTORIGHT|TRANSPARENCY)
	v.draw(0, 200, BOTTOM_LEFT, V_PERPLAYER|V_SNAPTOBOTTOM|V_SNAPTOLEFT|TRANSPARENCY)
	v.draw(320, 200, BOTTOM_RIGHT, V_PERPLAYER|V_SNAPTOBOTTOM|V_SNAPTORIGHT|TRANSPARENCY)
	
end

local function drawfreeze(v,p)

	if (customhud.CheckType("freezing") != modname) return end
	
	if p.powers[pw_carry] == CR_NIGHTSMODE
	or (TAKIS_NET.inspecialstage)
		return
	end


	local takis = p.takistable

	//mrce
	if takis.aliments.timetoice
	or takis.aliments.iced
		TakisDrawFreezing(v,p)
	end

end

--      ----------

local function drawjumpscarelol(v,p)

	if (customhud.CheckType("c3jumpscare") != modname) return end

	local takis = p.takistable
	local h = takis.HUD.funny
	
	if h.tics
		v.fadeScreen(35,10)
		
		local scale = FU*7/5
		local p = v.cachePatch("BALL_BUSTER")
		
		local x = v.RandomFixed()*3
		if ((leveltime%4) < 3)
			x = -$
		end
		
		if h.alsofunny
			p = v.cachePatch("BASTARD")
			scale = FU/2
		end
		
		v.drawScaled(((300/2)*FU)+x,h.y,scale,p,0)
	end
	
end

local function drawhappyhour(v,p)

	if (customhud.CheckType("ptje_itspizzatime") != modname) return end
	
	if (skins[p.skin].name ~= TAKIS_SKIN)
		return
	end
	
	local takis = p.takistable
	
	if ( ((JISK_PIZZATIMETICS) and (JISK_PIZZATIMETICS <= 5*TR))
	or ((PTJE) and (PTJE.pizzatime_tics) and (PTJE.pizzatime_tics <= 5*TR)) )
	
	and (takis.io.nohappyhour == 0)
		takis.HUD.happyhour.doingit = true
		
		local cmap = 0xFF00
		
		local tics = JISK_PIZZATIMETICS or PTJE.pizzatime_tics
		if tics < 15
			v.fadeScreen(cmap,tics)
		elseif ((tics >= 15) and (tics < ((2*TR)+17) ))
			v.fadeScreen(cmap,16)
		elseif ((tics >= ((2*TR)+17)) and (tics < 103))
			v.fadeScreen(cmap,16-(tics-87)) 
		end
		
		local h = takis.HUD.happyhour
		local y = 40*FU
		takis.HUD.happyhour.xadd = v.RandomFixed()
		if ((leveltime%4) < 3)
			takis.HUD.happyhour.xadd = -$
		end

		local x = h.xadd
		
		takis.HUD.happyhour.its.scale = ease.inoutback(( FU / h.its.expectedtime )*tics, FU/100, 3*FU/5,4*FU/5)
		takis.HUD.happyhour.happy.scale = ease.inoutback(( FU / h.happy.expectedtime )*tics, FU/100, 3*FU/5,4*FU/5)
		takis.HUD.happyhour.hour.scale = ease.inoutback(( FU / h.hour.expectedtime )*tics, FU/100, 3*FU/5,4*FU/5)
		
		local s = h.scale
		
		local pa = v.cachePatch
		 
		v.drawScaled(h.its.x+x, y+h.its.yadd, h.its.scale,
			pa(h.its.patch..h.its.frame),
			V_SNAPTOTOP|V_HUDTRANS
		)
		v.drawScaled(h.happy.x+x, y+h.happy.yadd, h.happy.scale,
			pa(h.happy.patch..h.happy.frame),
			V_SNAPTOTOP|V_HUDTRANS
		)
		v.drawScaled(h.hour.x+x, y+h.hour.yadd, h.hour.scale,
			pa(h.hour.patch..h.hour.frame),
			V_SNAPTOTOP|V_HUDTRANS
		)
		if tics > 4
			v.drawScaled(h.face.x+x, (130*FU)+h.face.yadd, 3*FU/5,
				pa(h.face.patch..h.face.frame),
				V_HUDTRANS, v.getColormap(nil,p.skincolor)
			)
		end
		
		if tics >= 2*TR
			takis.HUD.happyhour.falldown = true
			if tics == 2*TR
				takis.HUD.happyhour.its.yadd = FU
				takis.HUD.happyhour.happy.yadd = FU
				takis.HUD.happyhour.hour.yadd = FU
				takis.HUD.happyhour.face.yadd = FU
			end
		end
	
	else
		takis.HUD.happyhour.doingit = false
		takis.HUD.happyhour.scale = FU/20
		takis.HUD.happyhour.falldown = false
		takis.HUD.happyhour.its.yadd = 0
		takis.HUD.happyhour.happy.yadd = 0
		takis.HUD.happyhour.hour.yadd = 0
	
	end
	
end

//draw the stuff
customhud.SetupItem("freezing", 	modname/*,	drawfreeze,		"game",	1*/)
customhud.SetupItem("clutchstuff",	modname/*,	drawclutches,	"game",	23*/) --
customhud.SetupItem("rings", 		modname/*,	drawrings,		"game",	24*/) 
customhud.SetupItem("time", 		modname/*,	drawtimer,		"game",	25*/) 
customhud.SetupItem("score", 		modname/*,	drawscore,		"game",	26*/) 
customhud.SetupItem("lives", 		modname/*,	drawlivesarea,	"game",	10*/)
customhud.SetupItem("combometer", 	modname/*,	drawcombostuff,	"game",	27*/) 
customhud.SetupItem("aliments", 	modname/*,	drawaliments,	"game",	28*/) --
customhud.SetupItem("heartcards", 	modname/*,	drawheartcards,	"game",	30*/) --
customhud.SetupItem("statusface", 	modname/*,	drawface,		"game",	31*/) --
customhud.SetupItem("c3jumpscare", 	modname/*,	drawface,		"game",	31*/) --

addHook("HUD", function(v,p)
	if not p
	or not p.valid
	or PSO
		return
	end
	
	if p.powers[pw_carry] == CR_NIGHTSMODE
	or (TAKIS_NET.inspecialstage)
		return
	end
	
	local takis = p.takistable
	local me = p.mo
	
	if takis
		
		if takis.isTakis
			
			customhud.SetupItem("freezing", 	modname/*,	drawfreeze,		"game",	1*/)
			customhud.SetupItem("clutchstuff",	modname/*,	drawclutches,	"game",	23*/) --
			customhud.SetupItem("rings", 		modname/*,	drawrings,		"game",	24*/) 
			customhud.SetupItem("time", 		modname/*,	drawtimer,		"game",	25*/) 
			customhud.SetupItem("score", 		modname/*,	drawscore,		"game",	26*/) 
			customhud.SetupItem("lives", 		modname/*,	drawlivesarea,	"game",	10*/)
			customhud.SetupItem("combometer", 	modname/*,	drawcombostuff,	"game",	27*/) 
			customhud.SetupItem("aliments", 	modname/*,	drawaliments,	"game",	28*/) --
			customhud.SetupItem("heartcards", 	modname/*,	drawheartcards,	"game",	30*/) --
			customhud.SetupItem("statusface", 	modname/*,	drawface,		"game",	31*/) --
			customhud.SetupItem("c3jumpscare", 	modname/*,	drawface,		"game",	31*/) --
			if takis.io.nohappyhour == 0
				customhud.SetupItem("ptje_itspizzatime",modname)
			elseif takis.io.nohappyhour == 1
				customhud.SetupItem("ptje_itspizzatime","jiskpizzatime")
			end
			
			drawfreeze(v,p)
			drawclutches(v,p)
			drawrings(v,p)
			drawtimer(v,p)
			drawscore(v,p)
			drawlivesarea(v,p)
			drawcombostuff(v,p)
			drawaliments(v,p)
			drawheartcards(v,p)
			drawface(v,p)
			drawhappyhour(v,p)
			drawjumpscarelol(v,p)
			
		else
			customhud.SetupItem("rings","vanilla")
			customhud.SetupItem("time","vanilla")
			customhud.SetupItem("score","vanilla")
			customhud.SetupItem("lives","vanilla")
			customhud.SetupItem("ptje_itspizzatime","jiskpizzatime")
			
			//elfilin stuff
			if ((me) and (me.valid))
			and (me.skin == "elfilin")
			and (p.elfilin)
				//check out my sweet new ride!
				local ride = p.elfilin.ridingplayer
				
				if p.elfilin
				and ((ride) and (ride.valid))

					local p2 = ride.player
					local takis2 = p2.takistable
					
					if ride.skin == TAKIS_SKIN
						
						drawaliments(v,p2)
						
						if (TAKIS_NET.usesheartcards == true)
						
							local workx = (265*FU)-(35*FU)
							
							//draw p2's heartcards
							for i = 1, TAKIS_MAX_HEARTCARDS
								local patch = v.cachePatch("HEARTCARD2")
								
								if takis2.heartcards >= i
									patch = v.cachePatch("HEARTCARD1")
								end
								
								v.drawScaled(
									workx,
									100*FU,
									FU/2,
									patch,
									V_SNAPTOTOP|V_SNAPTORIGHT|V_PERPLAYER
								)
								
								workx = $+(12*FU)
								
							end
						
						end
						
						//show p2's combo
						if takis2.combo.count
							
							local shake = takis2.HUD.combo.meter.shake
							local combdisp = 8
							local comby = 14
							if (p2.pflags & PF_FINISHED)
							or (p.pflags & PF_FINISHED)
								comby = $+16
							end
							comby = $+10
							
							v.drawString((hudinfo[HUD_RINGS].x+18+combdisp+6+10)*FU,(hudinfo[HUD_RINGS].y+20+35+comby-55-4)*FU,p2.name.."'s Combo",V_HUDTRANS|V_ALLOWLOWERCASE|V_SNAPTOLEFT|V_SNAPTOTOP|V_PERPLAYER,"thin-fixed-center")
							v.drawString((hudinfo[HUD_RINGS].x+18+combdisp+6+10)*FU,(hudinfo[HUD_RINGS].y+20+35+comby-55+4)*FU,"Cheer to refill!",V_HUDTRANS|V_ALLOWLOWERCASE|V_SNAPTOLEFT|V_SNAPTOTOP|V_PERPLAYER,"thin-fixed-center")
							
							drawcombotimebar(v,p,takis2,comby,0,shake)
							local meterx,metery = unpack(takis2.HUD.combo.meter.FIXED)
							local numx,numy = unpack(takis2.HUD.combo.num.int)
							v.drawScaled(meterx,metery+(comby*FU)+(shake),6*FU/5,v.cachePatch("TAKCOBACK"),V_HUDTRANS|V_SNAPTOLEFT|V_SNAPTOTOP|V_PERPLAYER, v.getColormap(nil, nil))
							v.drawNum(numx,numy+comby+(shake/FU),takis2.combo.count,V_HUDTRANS|V_SNAPTOLEFT|V_SNAPTOTOP|V_PERPLAYER)
							v.drawString((hudinfo[HUD_RINGS].x+18+combdisp+6)*FU,(hudinfo[HUD_RINGS].y+20+comby)*FU+(shake),"Combo!",V_HUDTRANS|V_ALLOWLOWERCASE|V_SNAPTOLEFT|V_SNAPTOTOP|V_PERPLAYER,"thin-fixed")
							
							if takis2.combo.verylevel > 0
								for i = 1, takis2.combo.verylevel
									
									local verypatch = v.cachePatch("TAKCOVERY")
									//if not (i % 2)
									//	verypatch = v.cachePatch("TAKCOSUPR")
									//end
									v.drawScaled(meterx+(7*FU)+(i*(3*FU)),metery+(37*FU)+(i*2*FU)+(comby*FU),FU/3,verypatch,V_HUDTRANS|V_SNAPTOLEFT|V_SNAPTOTOP|V_PERPLAYER, v.getColormap(nil, color))
									
								end
							end
							
							local length = #TAKIS_COMBO_RANKS
							v.drawString((hudinfo[HUD_RINGS].x+18+combdisp+6+10)*FU,(hudinfo[HUD_RINGS].y+20+35+comby)*FU,TAKIS_COMBO_RANKS[ ((takis2.combo.rank-1) % length)+1 ],V_HUDTRANS|V_ALLOWLOWERCASE|V_SNAPTOLEFT|V_SNAPTOTOP|V_PERPLAYER,"thin-fixed-center")
							
						end
						
					end
					
				end
				
			end
		end
	end
end)