hud.disable("stagetitle")
local title_display_time = 140
local title_disappear_time = 105

FNT_NewFont("FONT_STAGE",{prefix = "SKXGL%03d", monospacewidth = 18, spacewidth = 16})
FNT_NewFont("FONT_ZONE",{prefix = "SKXGS%03d", monospacewidth = 13, spacewidth = 13})
FNT_NewFont("FONT_SUB",{prefix = "STCFN%03d", monospacewidth = 8, spacewidth = 4})

local stripe = {x = 21,
				text_y = 137,
				speed = 1, 
				horz = 0,  --Don't Touch
				horz_accel = 0, --Don't Touch
				vert_scroller = 0} --Don't Touch
local subbar = {x = 304,
			    y = 125,
				speed = 2,
				slide = 0, --Don't Touch
				slide_accel = 0} --Don't Touch
local background = {speed = 32,
					scroll = 0} --Don't Touch
local title = {x = 280,
			   y = 80}
local track_name = nil
local track_zone = nil
local track_act = nil
local track_subttl = nil
local track_stripe_text = nil
local track_stripe_color = nil

local titlecard_allowcustom = CV_RegisterVar({
	name = "tc_allowcustom",
	defaultvalue = "On",
	flags = CV_NETVAR,
	possiblevalue = CV_OnOff
})

//85 = Blue
local titlecard_race_color = CV_RegisterVar({
	name = "tc_race_color",
	defaultvalue = "85",
	flags = CV_NETVAR,
	possiblevalue = {MIN = 1, MAX = 100}
})

//23 = Cherry
local titlecard_battle_color = CV_RegisterVar({
	name = "tc_battle_color",
	defaultvalue = "23",
	flags = CV_NETVAR,
	possiblevalue = {MIN = 1, MAX = 100}
})

//86 = Blueberry
local titlecard_hellrace_color = CV_RegisterVar({
	name = "tc_hellrace_color",
	defaultvalue = "86",
	flags = CV_NETVAR,
	possiblevalue = {MIN = 1, MAX = 100}
})

//25 = Crimson
local titlecard_hellbattle_color = CV_RegisterVar({
	name = "tc_hellbattle_color",
	defaultvalue = "25",
	flags = CV_NETVAR,
	possiblevalue = {MIN = 1, MAX = 100}
})

addHook("MapChange",function()
	//Resetting Variables
	stripe.horz = 0
	stripe.horz_accel = 0
	stripe.vert_scroller = 0
	subbar.slide = 0
	subbar.slide_accel = 0
	background.scroll = 0
end)

local function drawNewTitleCard(v,p)
	if leveltime <= title_display_time then
		--------------------------------------------------------------------------------------------
		//Figuring Out Map Info
		track_name = mapheaderinfo[gamemap].lvlttl
		if mapheaderinfo[gamemap].encorettl and encoremode == true then track_name = mapheaderinfo[gamemap].encorettl end
		if (mapheaderinfo[gamemap].levelflags & LF_NOZONE) then
			track_zone = ""
		else
			if mapheaderinfo[gamemap].zonttl == "" then
				track_zone = "Zone"
			else
				track_zone = mapheaderinfo[gamemap].zonttl
			end
		end
		if mapheaderinfo[gamemap].encorezone and encoremode == true then track_zone = mapheaderinfo[gamemap].encorezone end
		
		if mapheaderinfo[gamemap].actnum and mapheaderinfo[gamemap].actnum != "" then 
			track_act = " "..mapheaderinfo[gamemap].actnum
		else
			track_act = ""
		end
		
		track_subttl = mapheaderinfo[gamemap].subttl
		if mapheaderinfo[gamemap].encoresub and encoremode == true then track_subttl = mapheaderinfo[gamemap].encoresub end
		------------------------------------------------------------------------
		//Figuring out Graphics
		if titlecard_allowcustom.value == 1 then
			track_stripe_color = tonumber(mapheaderinfo[gamemap].titlecard_color)
		end
		if mapheaderinfo[gamemap].menuflags & LF2_HIDEINMENU then
			track_stripe_text = "XG_HTEXT"
		else
			track_stripe_text = "XG_DTEXT"
		end
		
		//COLORS
		if track_stripe_color == nil or track_stripe_color == 0 then
			if gametype & GT_MATCH then
				if mapheaderinfo[gamemap].menuflags & LF2_HIDEINMENU then
					track_stripe_color = titlecard_hellbattle_color.value
				else
					track_stripe_color = titlecard_battle_color.value
				end
			else
				if mapheaderinfo[gamemap].menuflags & LF2_HIDEINMENU then
					track_stripe_color = titlecard_hellrace_color.value
				else
					track_stripe_color = titlecard_race_color.value
				end
			end
		end
		
		if encoremode == true
			if mapheaderinfo[gamemap].titlecard_encore_color != nil and mapheaderinfo[gamemap].titlecard_encore_color != "" then
				track_stripe_color = tonumber(mapheaderinfo[gamemap].titlecard_encore_color)
			else
				track_stripe_color = ColorOpposite($)
			end
		end
		------------------------------------------------------------------------
		//DRAWING
		local tc_stripe = v.cachePatch("XG_STRIPE")
		local tc_subbar = v.cachePatch("XG_BAR")
		local tc_stripe_text = v.cachePatch(track_stripe_text)
		
		//Happening Before It Disappears
		stripe.vert_scroller = (leveltime % 192) * FRACUNIT / 2
		background.scroll = leveltime % background.speed
		//What happens when it Disappears
		if leveltime > title_disappear_time then
			//Horizontal Offset for Stripe
			stripe.horz_accel = $ + ((leveltime - title_disappear_time)* stripe.speed) 
			stripe.horz = $ + stripe.horz_accel
			//Horizontal Offset for TitleBar
			subbar.slide_accel = $ + (subbar.speed * (leveltime - title_disappear_time))
			subbar.slide = $ + subbar.slide_accel
		end
		//ACTUAL DRAWING
			//Background
			v.drawScaled((320+background.scroll+subbar.slide) * FRACUNIT,
						 (200-background.scroll+subbar.slide) * FRACUNIT, 
						 FRACUNIT,v.cachePatch("XG_S_BR"), V_SNAPTOBOTTOM|V_SNAPTORIGHT)
			v.drawScaled((0+background.scroll-subbar.slide) * FRACUNIT,
						 (0-background.scroll-subbar.slide) * FRACUNIT,
						 FRACUNIT,v.cachePatch("XG_S_TL"),V_SNAPTOTOP|V_SNAPTOLEFT)
			if track_subttl != "" and track_subttl != nil then
				v.draw(0,subbar.y+subbar.slide,tc_subbar,V_SNAPTOLEFT|V_SNAPTOBOTTOM,v.getColormap(0,SKINCOLOR_BLACK))
			end
						 
			//Stripe Scroll
			v.drawScaled((stripe.x - stripe.horz) * FRACUNIT,(-512 * FRACUNIT)+ stripe.vert_scroller,FRACUNIT,tc_stripe,V_SNAPTOLEFT,v.getColormap(0,track_stripe_color))
			v.drawScaled((stripe.x - stripe.horz) * FRACUNIT,(-128 * FRACUNIT)+ stripe.vert_scroller,FRACUNIT,tc_stripe,V_SNAPTOLEFT,v.getColormap(0,track_stripe_color))
			//Stripe Icon
			v.drawScaled((stripe.x - stripe.horz)*FRACUNIT, (137 * FRACUNIT), FRACUNIT, tc_stripe_text, V_SNAPTOLEFT|V_SNAPTOBOTTOM,v.getColormap(0,track_stripe_color))
			
			//Text
			FNT_Write(v,{x = (title.x+subbar.slide), y = title.y, text = track_name,font = FONT_STAGE, scale = FRACUNIT,
							color = SKINCOLOR_WHITE, halign = HALIGN_RIGHT, valign = VALIGN_CENTER, flags = V_SNAPTOBOTTOM|V_SNAPTORIGHT, wflags = WF_INTPOS})
			//Zone Name
			FNT_Write(v,{x = (title.x+subbar.slide), y = title.y + 28, text = string.lower(track_zone..track_act),font = FONT_ZONE, scale = FRACUNIT,
							color = SKINCOLOR_WHITE, halign = HALIGN_RIGHT, valign = VALIGN_CENTER, flags = V_SNAPTOBOTTOM|V_SNAPTORIGHT, wflags = WF_INTPOS})
			//Subtitle
			FNT_Write(v,{x = subbar.x, y = subbar.y +8+subbar.slide, text = track_subttl,font = FONT_SUB, scale = FRACUNIT,
							color = SKINCOLOR_WHITE, halign = HALIGN_RIGHT, valign = VALIGN_CENTER, flags = V_SNAPTORIGHT|V_SNAPTOBOTTOM, wflags = WF_INTPOS})
			
    end
end

hud.add(drawNewTitleCard,"game")