// Some locals that allow me to change sounds in an easier way, WHOOOO!!!
local d94xkzmenu_opensound = sfx_kc5e
local d94xkzmenu_selectsound = sfx_kc39
local d94xkzmenu_confirmsound = sfx_kc48
local d94xkzmenu_cancelsound = sfx_kc43

// IO functions for less copy+paste
local D94XKZ_ioLoadMenuMusic = function(player_t)
	if player_t.mo and player_t.mo.valid
		if player_t.d94xkzmenu_music != nil
			local file = io.openlocal("client/Dark94 & [xkz] Files/Menu Music.cfg")
			if file
				local string = file:read("*a")
				if string
					player_t.d94xkzmenu_music = string
				else
					player_t.d94xkzmenu_music = "SEGAVC"
				end
				file:close()
			else
				player_t.d94xkzmenu_music = "SEGAVC"
			end
		else
			player_t.d94xkzmenu_music = "SEGAVC"
		end
	end
end

local D94XKZ_ioLoadMenuHUD = function(player_t)
	if player_t.mo and player_t.mo.valid
		if player_t.d94xkzmenu_hud != nil
			local file = io.openlocal("client/Dark94 & [xkz] Files/Custom HUD.cfg")
			if file
				local number = file:read("*n")
				if number
					player_t.d94xkzmenu_hud = 1
					if number > 1
						player_t.d94xkzmenu_hud = 2
					end
				else
					player_t.d94xkzmenu_hud = 0
				end
				file:close()
			else
				player_t.d94xkzmenu_hud = 1
			end
		else
			player_t.d94xkzmenu_hud = 1
		end
	end
end

local D94XKZ_ioLoadMenuVictoryPose = function(player_t)
	if player_t.mo and player_t.mo.valid
		if player_t.d94xkzmenu_victorypose != nil
			local file = io.openlocal("client/Dark94 & [xkz] Files/Victory Pose.cfg")
			if file
				local number = file:read("*n")
				if number
					player_t.d94xkzmenu_victorypose = 1
				else
					player_t.d94xkzmenu_victorypose = 0
				end
				file:close()
			else
				player_t.d94xkzmenu_victorypose = 1
			end
		else
			player_t.d94xkzmenu_victorypose = 1
		end
	end
end

local D94XKZ_ioLoadMenuCMusic = function(player_t)
	if player_t.mo and player_t.mo.valid
		if player_t.d94xkzmenu_cmusic != nil
			local file = io.openlocal("client/Dark94 & [xkz] Files/Custom Music.cfg")
			if file
				local number = file:read("*n")
				if number
					player_t.d94xkzmenu_cmusic = 1
				else
					player_t.d94xkzmenu_cmusic = 0
				end
				file:close()
			else
				player_t.d94xkzmenu_cmusic = 1
			end
		else
			player_t.d94xkzmenu_cmusic = 1
		end
	end
end

local D94XKZ_ioLoadMenuFlashes = function(player_t)
	if player_t.mo and player_t.mo.valid
		if player_t.d94xkzmenu_flashes != nil
			local file = io.openlocal("client/Dark94 & [xkz] Files/Flashing Lights.cfg")
			if file
				local number = file:read("*n")
				if number
					player_t.d94xkzmenu_flashes = 1
				else
					player_t.d94xkzmenu_flashes = 0
				end
				file:close()
			else
				player_t.d94xkzmenu_flashes = 0
			end
		else
			player_t.d94xkzmenu_flashes = 0
		end
	end
end

local D94XKZ_ioMenuSave = function(player_t, whattosave, path)
	if consoleplayer == player_t
		local file = io.openlocal("client/Dark94 & [xkz] Files/" + path, "w+")
		if whattosave != nil
			file:write(whattosave)
			file:close()
		end
	end
end

// The commands
COM_AddCommand("d94xkz_menu", function(player_t, arg) // Toggles the menu
	if player_t
		if player_t.d94xkzmenu
			P_RestoreMusic(player_t)
			S_StartSound(nil, sfx_peww, player_t)
			player_t.d94xkzmenu = false
		elseif skins[player_t.skin].name == "dark"
		or skins[player_t.skin].name == "xkz"
			S_StartSound(nil, d94xkzmenu_opensound, player_t)
			S_ChangeMusic(player_t.d94xkzmenu_music, true, player_t)
			player_t.d94xkzmenu_select = 1
			player_t.d94xkzmenu = true
		end
	else
		print("You should be in a stage...")
		S_StartSound(nil, sfx_fail, consoleplayer)
	end
end)

COM_AddCommand("d94xkz_menumusic", function(player_t, arg) // Change menu's music
	if player_t
		if arg
			if arg == "0"
				if player_t.d94xkzmenu
					S_ChangeMusic("SEGAVC", true, player_t)
				end
				player_t.d94xkzmenu_music = "SEGAVC"
				D94XKZ_ioMenuSave(player_t, player_t.d94xkzmenu_music, "Menu Music.cfg")
			elseif arg == "1"
				if player_t.d94xkzmenu
					S_ChangeMusic("S1FMNU", true, player_t)
				end
				player_t.d94xkzmenu_music = "S1FMNU"
				D94XKZ_ioMenuSave(player_t, player_t.d94xkzmenu_music, "Menu Music.cfg")
			elseif arg == "2"
				if player_t.d94xkzmenu
					S_ChangeMusic("S2AMNU", true, player_t)
				end
				player_t.d94xkzmenu_music = "S2AMNU"
				D94XKZ_ioMenuSave(player_t, player_t.d94xkzmenu_music, "Menu Music.cfg")
			elseif arg == "3"
				if player_t.d94xkzmenu
					S_ChangeMusic("S3SAVE", true, player_t)
				end
				player_t.d94xkzmenu_music = "S3SAVE"
				D94XKZ_ioMenuSave(player_t, player_t.d94xkzmenu_music, "Menu Music.cfg")
			elseif arg == "4"
				if player_t.d94xkzmenu
					S_ChangeMusic("KARTMN", true, player_t)
				end
				player_t.d94xkzmenu_music = "KARTMN"
				D94XKZ_ioMenuSave(player_t, player_t.d94xkzmenu_music, "Menu Music.cfg")
			elseif arg == "5"
				if player_t.d94xkzmenu
					S_ChangeMusic("KKRM08", true, player_t)
				end
				player_t.d94xkzmenu_music = "KKRM08"
				D94XKZ_ioMenuSave(player_t, player_t.d94xkzmenu_music, "Menu Music.cfg")
			else
				CONS_Printf(player_t, "\x85".."0 > SEGA Vintage Collection ".."\x80".."(Default)")
				CONS_Printf(player_t, "\x85".."1 > Dreams into Reality")
				CONS_Printf(player_t, "\x85".."2 > Sweet Dreams")
				CONS_Printf(player_t, "\x85".."3 > Sonic 3 Save Select")
				CONS_Printf(player_t, "\x85".."4 > SRB2Kart Titlescreen")
				CONS_Printf(player_t, "\x85".."5 > Ganbare Dochu")
			end
		else
			CONS_Printf(player_t, "\x85".."0 > SEGA Vintage Collection ".."\x80".."(Default)")
			CONS_Printf(player_t, "\x85".."1 > Dreams into Reality")
			CONS_Printf(player_t, "\x85".."2 > Sweet Dreams")
			CONS_Printf(player_t, "\x85".."3 > Sonic 3 Save Select")
			CONS_Printf(player_t, "\x85".."4 > SRB2Kart Titlescreen")
			CONS_Printf(player_t, "\x85".."5 > Ganbare Dochu")
		end
	else
		print("You should be in a stage...")
		S_StartSound(nil, sfx_fail, consoleplayer)
	end
end)

COM_AddCommand("d94xkz_hud", function(player_t, arg) // Toggles Dark94's and [xkz]'s HUD
	if player_t
		if arg
			if arg == "0"
			or arg == "no"
			or arg == "false"
				player_t.d94xkzmenu_hud = 0
				D94XKZ_ioMenuSave(player_t, player_t.d94xkzmenu_hud, "Custom HUD.cfg")
			elseif arg == "1"
			or arg == "yes"
			or arg == "true"
				player_t.d94xkzmenu_hud = 1
				D94XKZ_ioMenuSave(player_t, player_t.d94xkzmenu_hud, "Custom HUD.cfg")
			elseif arg == "2"
			or arg == "all"
			or arg == "free"
			or arg == "everyone"
				player_t.d94xkzmenu_hud = 2
				D94XKZ_ioMenuSave(player_t, player_t.d94xkzmenu_hud, "Custom HUD.cfg")
			end
		end
	else
		print("You should be in a stage...")
		S_StartSound(nil, sfx_fail, consoleplayer)
	end
end)

COM_AddCommand("d94xkz_victorypose", function(player_t, arg) // Toggles the Victory Aniation of Dark94 & [xkz]
	if player_t
		if arg
			if arg == "0"
			or arg == "no"
			or arg == "false"
				player_t.d94xkzmenu_victorypose = 0
				D94XKZ_ioMenuSave(player_t, player_t.d94xkzmenu_victorypose, "Victory Pose.cfg")
			elseif arg == "1"
			or arg == "yes"
			or arg == "true"
				player_t.d94xkzmenu_victorypose = 1
				D94XKZ_ioMenuSave(player_t, player_t.d94xkzmenu_victorypose, "Victory Pose.cfg")
			end
		end
	else
		print("You should be in a stage...")
		S_StartSound(nil, sfx_fail, consoleplayer)
	end
end)

COM_AddCommand("d94xkz_music", function(player_t, arg) // Replaces some jingles when playing as Dark94/XKZ
	if player_t
		if arg
			if arg == "0"
			or arg == "no"
			or arg == "false"
				player_t.d94xkzmenu_cmusic = 0
				D94XKZ_ioMenuSave(player_t, player_t.d94xkzmenu_cmusic, "Custom Music.cfg")
			elseif arg == "1"
			or arg == "yes"
			or arg == "true"
				player_t.d94xkzmenu_cmusic = 1
				D94XKZ_ioMenuSave(player_t, player_t.d94xkzmenu_cmusic, "Custom Music.cfg")
			end
		end
	else
		print("You should be in a stage...")
		S_StartSound(nil, sfx_fail, consoleplayer)
	end
end)

COM_AddCommand("d94xkz_flashes", function(player_t, arg) // Toggles Flashing Lights (for those with visual seizures)
	if player_t
		if arg
			if arg == "0"
			or arg == "no"
			or arg == "false"
				player_t.d94xkzmenu_flashes = 0
				D94XKZ_ioMenuSave(player_t, player_t.d94xkzmenu_cmusic, "Flashing Lights.cfg")
			elseif arg == "1"
			or arg == "yes"
			or arg == "true"
				player_t.d94xkzmenu_flashes = 1
				D94XKZ_ioMenuSave(player_t, player_t.d94xkzmenu_cmusic, "Flashing Lights.cfg")
			end
		end
	else
		print("You should be in a stage...")
		S_StartSound(nil, sfx_fail, consoleplayer)
	end
end)

// I hate doing menus, but I enjoy doing menus. LMAO
addHook("PlayerThink", function(player)
	if player.mo and player.mo.valid
		if player.d94xkzmenu_lefthold == nil
			player.d94xkzmenu_lefthold = false
		end
		if player.d94xkzmenu_righthold == nil
			player.d94xkzmenu_righthold = false
		end
		if player.d94xkzmenu_jumphold == nil
			player.d94xkzmenu_jumphold = false
		end
		if player.d94xkzmenu_spinhold == nil
			player.d94xkzmenu_spinhold = false
		end
		if player.d94xkzmenu_left != true
			player.d94xkzmenu_lefthold = false
		end
		if player.d94xkzmenu_right != true
			player.d94xkzmenu_righthold = false
		end
		if player.d94xkzmenu_jump != true
			player.d94xkzmenu_jumphold = false
		end
		if player.d94xkzmenu_spin != true
			player.d94xkzmenu_spinhold = false
		end
		if player.cmd.sidemove < 0
			player.d94xkzmenu_left = true
			player.d94xkzmenu_right = false
		elseif player.cmd.sidemove > 0
			player.d94xkzmenu_left = false
			player.d94xkzmenu_right = true
		else
			player.d94xkzmenu_left = false
			player.d94xkzmenu_right = false
		end
		if player.cmd.buttons & BT_JUMP
			player.d94xkzmenu_jump = true
		else
			player.d94xkzmenu_jump = false
		end
		if player.cmd.buttons & BT_USE
			player.d94xkzmenu_spin = true
		else
			player.d94xkzmenu_spin = false
		end
		if not player.d94xkzmenu
			D94XKZ_ioLoadMenuMusic(player)
			D94XKZ_ioLoadMenuHUD(player)
			D94XKZ_ioLoadMenuVictoryPose(player)
			D94XKZ_ioLoadMenuCMusic(player)
			D94XKZ_ioLoadMenuFlashes(player)
		else
			if player.d94xkzmenu // And in here started my descent to insanity
				player.normalspeed = 0
				player.jumpfactor = 0
				player.charability2 = CA2_NONE
				
				if player.d94xkzmenu_left
				and not player.d94xkzmenu_lefthold
					if player.d94xkzmenu_select == 2
						player.d94xkzmenu_select = 1
						S_StartSound(nil, d94xkzmenu_selectsound, player)
					elseif player.d94xkzmenu_select == 3
						player.d94xkzmenu_select = 2
						S_StartSound(nil, d94xkzmenu_selectsound, player)
					elseif player.d94xkzmenu_select == 4
						player.d94xkzmenu_select = 3
						S_StartSound(nil, d94xkzmenu_selectsound, player)
					elseif player.d94xkzmenu_select == 5
						player.d94xkzmenu_select = 4
						S_StartSound(nil, d94xkzmenu_selectsound, player)
					elseif player.d94xkzmenu_select == 6
						player.d94xkzmenu_select = 5
						S_StartSound(nil, d94xkzmenu_selectsound, player)
					end
					player.d94xkzmenu_lefthold = true
				end
				if player.d94xkzmenu_right
				and not player.d94xkzmenu_righthold
					if player.d94xkzmenu_select == 1
						player.d94xkzmenu_select = 2
						S_StartSound(nil, d94xkzmenu_selectsound, player)
					elseif player.d94xkzmenu_select == 2
						player.d94xkzmenu_select = 3
						S_StartSound(nil, d94xkzmenu_selectsound, player)
					elseif player.d94xkzmenu_select == 3
						player.d94xkzmenu_select = 4
						S_StartSound(nil, d94xkzmenu_selectsound, player)
					elseif player.d94xkzmenu_select == 4
						player.d94xkzmenu_select = 5
						S_StartSound(nil, d94xkzmenu_selectsound, player)
					elseif player.d94xkzmenu_select == 5
						player.d94xkzmenu_select = 6
						S_StartSound(nil, d94xkzmenu_selectsound, player)
					end
					player.d94xkzmenu_righthold = true
				end

				if player.d94xkzmenu_jump
				and not player.d94xkzmenu_jumphold
					if player.d94xkzmenu_select
						if player.d94xkzmenu_select == 1
							if player.d94xkzmenu_music
								if player.d94xkzmenu_music == "SEGAVC"
									COM_BufInsertText(player, "d94xkz_menumusic 1")
									S_StartSound(nil, d94xkzmenu_confirmsound, player)
								elseif player.d94xkzmenu_music == "S1FMNU"
									COM_BufInsertText(player, "d94xkz_menumusic 2")
									S_StartSound(nil, d94xkzmenu_confirmsound, player)
								elseif player.d94xkzmenu_music == "S2AMNU"
									COM_BufInsertText(player, "d94xkz_menumusic 3")
									S_StartSound(nil, d94xkzmenu_confirmsound, player)
								elseif player.d94xkzmenu_music == "S3SAVE"
									COM_BufInsertText(player, "d94xkz_menumusic 4")
									S_StartSound(nil, d94xkzmenu_confirmsound, player)
								elseif player.d94xkzmenu_music == "KARTMN"
									COM_BufInsertText(player, "d94xkz_menumusic 5")
									S_StartSound(nil, d94xkzmenu_confirmsound, player)
								end
							end
						elseif player.d94xkzmenu_select == 2
							if player.d94xkzmenu_hud
								if player.d94xkzmenu_hud > 1
									COM_BufInsertText(player, "d94xkz_hud 0")
									S_StartSound(nil, d94xkzmenu_cancelsound, player)
								else
									COM_BufInsertText(player, "d94xkz_hud 2")
									S_StartSound(nil, d94xkzmenu_confirmsound, player)
								end
							else
								COM_BufInsertText(player, "d94xkz_hud 1")
								S_StartSound(nil, d94xkzmenu_confirmsound, player)
							end
						elseif player.d94xkzmenu_select == 3
							if player.d94xkzmenu_victorypose
								COM_BufInsertText(player, "d94xkz_victorypose 0")
								S_StartSound(nil, d94xkzmenu_cancelsound, player)
							else
								COM_BufInsertText(player, "d94xkz_victorypose 1")
								S_StartSound(nil, d94xkzmenu_confirmsound, player)
							end
						elseif player.d94xkzmenu_select == 4
							if player.d94xkzmenu_cmusic
								COM_BufInsertText(player, "d94xkz_music 0")
								S_StartSound(nil, d94xkzmenu_cancelsound, player)
							else
								COM_BufInsertText(player, "d94xkz_music 1")
								S_StartSound(nil, d94xkzmenu_confirmsound, player)
							end
						elseif player.d94xkzmenu_select == 5
							if player.d94xkzmenu_flashes
								COM_BufInsertText(player, "d94xkz_flashes 0")
								S_StartSound(nil, d94xkzmenu_cancelsound, player)
							else
								COM_BufInsertText(player, "d94xkz_flashes 1")
								S_StartSound(nil, d94xkzmenu_confirmsound, player)
							end
						elseif player.d94xkzmenu_select == 6
							P_RestoreMusic(player)
							S_StartSound(nil, sfx_peww, player)
							player.normalspeed = skins[player.mo.skin].normalspeed
							player.jumpfactor = skins[player.mo.skin].jumpfactor
							player.charability2 = skins[player.mo.skin].ability2
							player.d94xkzmenu = false
						end
					end
					player.d94xkzmenu_jumphold = true
				end

				if player.d94xkzmenu_spin
				and not player.d94xkzmenu_spinhold
					if player.d94xkzmenu_select
						if player.d94xkzmenu_select == 1
							if player.d94xkzmenu_music
								if player.d94xkzmenu_music == "KKRM08"
									COM_BufInsertText(player, "d94xkz_menumusic 4")
									S_StartSound(nil, d94xkzmenu_confirmsound, player)
								elseif player.d94xkzmenu_music == "KARTMN"
									COM_BufInsertText(player, "d94xkz_menumusic 3")
									S_StartSound(nil, d94xkzmenu_confirmsound, player)
								elseif player.d94xkzmenu_music == "S3SAVE"
									COM_BufInsertText(player, "d94xkz_menumusic 2")
									S_StartSound(nil, d94xkzmenu_confirmsound, player)
								elseif player.d94xkzmenu_music == "S2AMNU"
									COM_BufInsertText(player, "d94xkz_menumusic 1")
									S_StartSound(nil, d94xkzmenu_confirmsound, player)
								elseif player.d94xkzmenu_music == "S1FMNU"
									COM_BufInsertText(player, "d94xkz_menumusic 0")
									S_StartSound(nil, d94xkzmenu_confirmsound, player)
								end
							end
						elseif player.d94xkzmenu_select == 2
							if player.d94xkzmenu_hud
								if player.d94xkzmenu_hud > 1
									COM_BufInsertText(player, "d94xkz_hud 1")
									S_StartSound(nil, d94xkzmenu_confirmsound, player)
								else
									COM_BufInsertText(player, "d94xkz_hud 0")
									S_StartSound(nil, d94xkzmenu_cancelsound, player)
								end
							else
								COM_BufInsertText(player, "d94xkz_hud 2")
								S_StartSound(nil, d94xkzmenu_confirmsound, player)
							end
						elseif player.d94xkzmenu_select == 3
							if player.d94xkzmenu_victorypose
								COM_BufInsertText(player, "d94xkz_victorypose 0")
								S_StartSound(nil, d94xkzmenu_cancelsound, player)
							else
								COM_BufInsertText(player, "d94xkz_victorypose 1")
								S_StartSound(nil, d94xkzmenu_confirmsound, player)
							end
						elseif player.d94xkzmenu_select == 4
							if player.d94xkzmenu_cmusic
								COM_BufInsertText(player, "d94xkz_music 0")
								S_StartSound(nil, d94xkzmenu_cancelsound, player)
							else
								COM_BufInsertText(player, "d94xkz_music 1")
								S_StartSound(nil, d94xkzmenu_confirmsound, player)
							end
						elseif player.d94xkzmenu_select == 5
							if player.d94xkzmenu_flashes
								COM_BufInsertText(player, "d94xkz_flashes 0")
								S_StartSound(nil, d94xkzmenu_cancelsound, player)
							else
								COM_BufInsertText(player, "d94xkz_flashes 1")
								S_StartSound(nil, d94xkzmenu_confirmsound, player)
							end
						end
					end
					player.d94xkzmenu_spinhold = true
				end
			end
		end
	end
end)