// ----------------------------------
// RSDK Project: Sonic 1/Sonic 2
// Script Description: Menu Control Object
// Script Author: Christan Whitehead/Simon Thomley
// Unpacked by Rubberduckycooly's script unpacker
// ----------------------------------

//-------Aliases-------//
private alias 2 : TYPE_MENUCONTROL

// Function declarations
reserve function MenuControl_Function0
reserve function MenuControl_Function1

// Static Values
public value MenuControl_value2 = 0;
public value MenuControl_value3 = 0;
public value MenuControl_value4 = 0;
public value MenuControl_value5 = 0;
public value MenuControl_value1 = 0;
public value MenuControl_value6 = 0;

// Tables
public table MenuControl_table2
	1, 9, 9, 2, 1, 1, 2, 4
end table

public table MenuControl_table3
	4, 1, 2, 6
end table

public table MenuControl_table4
	1, 1, 2, 4
end table

public table MenuControl_table1
	0, 0, 0
end table

public table MenuControl_table5
	3, 3, 3, 11, 16, 16, 16, 4
end table

//Each Menu Selection has 6 numners
	//Hightlight left or right
	//Highlight line
	//Stage List on load
	//Stage on load
	//Entry to go to on left or right press (67 for sound test)
	//Icon used

public table MenuControl_table0
	0, 0,  1, 0,  15, 1		//0 - 5
	0, 1,  1, 1,  16, 1		//6 - 11
	0, 3,  1, 2,  18, 2		//12 - 17
	0, 4,  1, 3,  18, 2		//18 - 23
	0, 6,  1, 4,  19, 3		//24 - 29
	0, 7,  1, 5,  19, 3		//30 - 35
	0, 9,  1, 6,  20, 4		//36 - 41
	0, 10, 1, 7,  20, 4		//42 - 47
	0, 12, 1, 8,  21, 5		//48 - 53
	0, 13, 1, 9,  21, 5		//54 - 59
	0, 15, 1, 10, 22, 6		//60 - 65
	0, 16, 1, 11, 22, 6		//66 - 71
	0, 18, 1, 12, 12, 8		//72 - 77
	0, 19, 1, 13, 13, 8		//78 - 83
	0, 22, 0, 6,  68, 0		//84 - 89
	1, 0,  1, 14, 0, 9		//90 - 95
	1, 1,  1, 15, 1, 9		//96 - 101
	1, 2,  1, 16, 1, 9		//102 - 107
	1, 3,  1, 17, 2, 10		//108 - 113
	1, 6,  1, 18, 4, 11		//114 - 119
	1, 9,  1, 19, 6, 12		//120 - 125
	1, 12, 3, 0,  69, 13	//126 - 131
	1, 15, 0, 0,  67, 0		//132 - 137
	1, 18, 1, 20, 12, 7		//138 - 143
end table


function MenuControl_Function0
	//if object[+1].value0 < 8
	//	SetTableValue(object[+1].value0, 129, MenuControl_table0)
	//end if
	
	GetTableValue(temp0, MenuControl_value3, MenuControl_table2)
	if temp0 == object[+1].value0
		MenuControl_value3++
		if MenuControl_value3 == 8
			MenuControl_value3 = 0
			stage.debugMode = 1
			PlaySfx(SfxName[Ring L], 0)
		end if
	else
		MenuControl_value3 = 0
	end if
	GetTableValue(temp0, MenuControl_value4, MenuControl_table3)
	if temp0 == object[+1].value0
		MenuControl_value4++
		if MenuControl_value4 == 4
			MenuControl_value4 = 0
			specialStage.emeralds = 127
			PlaySfx(SfxName[Emerald], 0)
			StopMusic()
		end if
	else
		MenuControl_value4 = 0
	end if
	if MenuControl_value3 < 2
		GetTableValue(temp0, MenuControl_value5, MenuControl_table4)
		if temp0 == object[+1].value0
			MenuControl_value5++
			if MenuControl_value5 == 4
				MenuControl_value5 = 0
				player.continues = 14
				PlaySfx(SfxName[Continue], 0)
			end if
		else
			MenuControl_value5 = 0
		end if
	else
		MenuControl_value5 = 0
	end if
	if stage.debugMode == 1
		GetTableValue(temp0, MenuControl_value6, MenuControl_table5)
		if temp0 == object[+1].value0
			MenuControl_value6++
			if MenuControl_value6 == 8
				MenuControl_value6 = 0
				SetTableValue(2, 122, MenuControl_table0)
				SetTableValue(11, 123, MenuControl_table0)
				PlaySfx(SfxName[Ring L], 0)
				saveRAM[46] = 1
			end if
		else
			MenuControl_value6 = 0
		end if
	end if
end function


function MenuControl_Function1
	if object.value4 == 0
		object.value4 = 30
		switch object[+1].value0
		case 0
			break
		case 1
			SetMusicTrack("Results.ogg", 0, 1)
			PlayMusic(0)
			break
		case 2
			SetMusicTrack("EmeraldHill.ogg", 0, 0x254AE)
			PlayMusic(0)
			break
		case 3
			SetMusicTrack("MysticCave2.ogg", 0, 0x48EF)
			PlayMusic(0)
			break
		case 4
			SetMusicTrack("OilOcean.ogg", 0, 0x47AC4)
			PlayMusic(0)
			break
		case 5
			SetMusicTrack("Metropolis.ogg", 0, 0x4B882)
			PlayMusic(0)
			break
		case 6
			SetMusicTrack("HillTop.ogg", 0, 1)
			PlayMusic(0)
			break
		case 7
			SetMusicTrack("AquaticRuin.ogg", 0, 1)
			PlayMusic(0)
			break
		case 8
			SetMusicTrack("CasinoNight2.ogg", 0, 0x1767C)
			PlayMusic(0)
			break
		case 9
			SetMusicTrack("CasinoNight.ogg", 0, 0xF564)
			PlayMusic(0)
			break
		case 10
			SetMusicTrack("DeathEgg.ogg", 0, 1)
			PlayMusic(0)
			break
		case 11
			SetMusicTrack("MysticCave.ogg", 0, 0x1841C)
			PlayMusic(0)
			break
		case 12
			SetMusicTrack("EmeraldHill2.ogg", 0, 0x184F4)
			PlayMusic(0)
			break
		case 13
			SetMusicTrack("SkyChase.ogg", 0, 0x3066D)
			PlayMusic(0)
			break
		case 14
			SetMusicTrack("ChemicalPlant.ogg", 0, 0xA7224)
			PlayMusic(0)
			break
		case 15
			SetMusicTrack("WingFortress.ogg", 0, 0x18622)
			PlayMusic(0)
			break
		case 16
			SetMusicTrack("Extra.ogg", 0, 0xE9CC)
			PlayMusic(0)
			break
		case 17
			SetMusicTrack("Options.ogg", 0, 1)
			PlayMusic(0)
			break
		case 18
			SetMusicTrack("SpecialStage.ogg", 0, 0x79404)
			PlayMusic(0)
			break
		case 19
			SetMusicTrack("Boss.ogg", 0, 1)
			PlayMusic(0)
			break
		case 20
			SetMusicTrack("FinalBoss.ogg", 0, 1)
			PlayMusic(0)
			break
		case 21
			SetMusicTrack("Ending.ogg", 0, 0)
			PlayMusic(0)
			break
		case 22
			SetMusicTrack("Super.ogg", 0, 1)
			PlayMusic(0)
			break
		case 23
			SetMusicTrack("Invincibility.ogg", 0, 0x9717)
			PlayMusic(0)
			break
		case 24
			PlaySfx(SfxName[Life], 0)
			PauseMusic()
			ResetObjectEntity(25, TypeName[Music Event], 2, 0, 0)
			object[25].priority = PRIORITY_ACTIVE
			break
		case 25
			SetMusicTrack("TitleScreen.ogg", 0, 0)
			PlayMusic(0)
			break
		case 26
			SetMusicTrack("ActComplete.ogg", 0, 0)
			PlayMusic(0)
			break
		case 27
			SetMusicTrack("GameOver.ogg", 0, 0)
			PlayMusic(0)
			break
		case 28
			SetMusicTrack("Continue.ogg", 0, 0)
			PlayMusic(0)
			break
		case 29
			StopMusic()
			PlaySfx(SfxName[Emerald], 0)
			break
		case 30
			SetMusicTrack("Credits.ogg", 0, 0)
			PlayMusic(0)
			break
		case 31
			SetMusicTrack("Drowning.ogg", 0, 0)
			PlayMusic(0)
			break
		end switch
	end if
end function


event ObjectMain
	object[+1].xpos = screen.xcenter
	object[+1].xpos += 118
	switch object.state
	case 0
		object.value0 = 320
		SetScreenFade(0, 0, 0, object.value0)
		object[+1].ypos = 160
		object[+1].priority = PRIORITY_ACTIVE
		object.state++
		break
	case 1
		if object.value0 > 0
			object.value0 -= 16
		else
			PlayMusic(0)
			object.state++
		end if
		SetScreenFade(0, 0, 0, object.value0)
		break
	case 2
		if MenuControl_value2 == 0
			if inputDown.down == 1
				object.value1 = 0
				object.value2++
				if object.value2 == 1
					object.value3++
				end if
				object.value2 %= 12
			else
				if inputDown.up == 1
					object.value2 = 0
					object.value1++
					if object.value1 == 1
						object.value3--
					end if
					object.value1 %= 12
				else
					object.value1 = 0
					object.value2 = 0
				end if
			end if
			temp0 = 22
			if object.value3 > temp0
				object.value3 = 0
			end if
			if object.value3 < 0
				object.value3 = temp0
			end if
			temp0 = object.value3
			temp0 *= 6
			temp0++
			GetTableValue(temp2, temp0, MenuControl_table0)
			temp0 += 3
			GetTableValue(temp1, temp0, MenuControl_table0)
			switch temp1
			default
				checkResult = inputPress.left
				checkResult |= inputPress.right
				if checkResult == 1
					object.value3 = temp1
				end if
				object[+1].value1 = 0
				if inputPress.buttonA == 1
					inputPress.start = 1
				end if
				break
			case 67 //Sound Test
				if object.value4 > 0
					object.value4--
				end if
				object[+1].value1 = 16
				if inputPress.buttonA == 1
					object[+1].value0 += 16
				end if
				if inputPress.left == 1
					object[+1].value0--
				end if
				if inputPress.right == 1
					object[+1].value0++
				end if
				object[+1].value0 &= 31
				if inputPress.buttonB == 1
					CallFunction(MenuControl_Function1)
					CallFunction(MenuControl_Function0)
				end if
				if inputPress.buttonC == 1
					CallFunction(MenuControl_Function1)
					CallFunction(MenuControl_Function0)
				end if
				break
			case 68 //Character Select
				temp1 = 0				
				object[+1].value1 = 0
				if inputPress.left == 1
					stage.playerListPos--
					while stage.playerListPos < 0
						stage.playerListPos += 5
					loop
					temp1 = 1
				end if
				if inputPress.right == 1
					stage.playerListPos++
					stage.playerListPos %= 5
					temp1 = 1
				end if
				if temp1 == 1
					switch stage.playerListPos
						case 0
							EditMenuEntry(MENU_1, "SONIC", 22, 1)
							SetTableValue(0, 89, MenuControl_table0)
							SetTableValue(0, 137, MenuControl_table0)
							break
						case 1
							EditMenuEntry(MENU_1, "TAILS", 22, 1)
							SetTableValue(15, 89, MenuControl_table0)
							SetTableValue(15, 137, MenuControl_table0)
							break
						case 2
							EditMenuEntry(MENU_1, "KNUCKLES", 22, 1)
							SetTableValue(16, 89, MenuControl_table0)
							SetTableValue(16, 137, MenuControl_table0)
							break
						case 3
							EditMenuEntry(MENU_1, "SONIC & TAILS", 22, 1)
							SetTableValue(0, 89, MenuControl_table0)
							SetTableValue(0, 137, MenuControl_table0)
							break
						case 4
							EditMenuEntry(MENU_1, "KNUCKLES & TAILS", 22, 1)
							SetTableValue(16, 89, MenuControl_table0)
							SetTableValue(16, 137, MenuControl_table0)
							break
					end switch
				end if
				break
			case 69 //special Stage			
				object[+1].value1 = 0
				temp1 = 0
				if inputPress.left == 1
					GetTableValue(temp2, 129, MenuControl_table0)
					temp2--
					while temp2 < 0
						temp2 += 8
					loop
					temp1 = 1
				end if
				if inputPress.right == 1
					GetTableValue(temp2, 129, MenuControl_table0)
					temp2++
					temp2 %= 8
					temp1 = 1
				end if
				if temp1 == 1
					switch temp2
						case 0
							EditMenuEntry(MENU_2, "SPECIAL STAGE@@1", 12, 0)
							break
						case 1
							EditMenuEntry(MENU_2, "SPECIAL STAGE@@2", 12, 0)
							break
						case 2
							EditMenuEntry(MENU_2, "SPECIAL STAGE@@3", 12, 0)
							break
						case 3
							EditMenuEntry(MENU_2, "SPECIAL STAGE@@4", 12, 0)
							break
						case 4
							EditMenuEntry(MENU_2, "SPECIAL STAGE@@5", 12, 0)
							break
						case 5
							EditMenuEntry(MENU_2, "SPECIAL STAGE@@6", 12, 0)
							break
						case 6
							EditMenuEntry(MENU_2, "SPECIAL STAGE@@7", 12, 0)
							break
						case 7
							EditMenuEntry(MENU_2, "SPECIAL STAGE@@?", 12, 0)
							break
					end switch
					SetTableValue(temp2, 129, MenuControl_table0)
				end if				
				if inputPress.buttonA == 1
					inputPress.start = 1
				end if
				break
				break
			end switch
			temp0 = object.value3
			temp0 *= 6
			GetTableValue(temp1, temp0, MenuControl_table0)
			temp0++
			if temp1 == 0
				menu2.selection = -1
				GetTableValue(menu1.selection, temp0, MenuControl_table0)
			else
				menu1.selection = -1
				GetTableValue(menu2.selection, temp0, MenuControl_table0)
			end if
			temp0 += 4
			GetTableValue(BGAnimation_value0, temp0, MenuControl_table0)
			if inputPress.start == 1
				if object.value3 == 21
					PlaySfx(SfxName[Warp], 0)
					object.state = 4
					fadeColor = 208
					fadeColor <<= 16
					temp0 = 255
					temp0 <<= 8
					fadeColor += temp0
					fadeColor += 224
				else
					//if object.value3 == 20
					//	if saveRAM[46] == 1
					//		object.state = 3
					//	else
					//		PlaySfx(SfxName[Fail], 0)
					//	end if
					//else
						object.state = 3
					//end if
				end if
			end if
		end if
		break
	case 3
		if object.value0 < 256
			music.volume -= 10
			object.value0 += 16
			SetScreenFade(0, 0, 0, object.value0)
		else
			StopMusic()
			temp0 = object.value3
			temp0 *= 6
			temp0 += 2
			GetTableValue(temp1, temp0, MenuControl_table0)
			temp0++
			GetTableValue(temp2, temp0, MenuControl_table0)
			stage.activeList = temp1
			stage.listPos = temp2
			LoadStage()
			SetScreenFade(0, 0, 0, 255)
		end if
		break
	case 4
		if object.value0 < 768
			music.volume -= 10
			object.value0 += 8
			SetScreenFade(208, 255, 224, object.value0)
		else
			StopMusic()
			temp0 = object.value3
			temp0 *= 6
			temp0 += 2
			GetTableValue(temp1, temp0, MenuControl_table0)
			temp0++
			GetTableValue(temp2, temp0, MenuControl_table0)
			stage.activeList = temp1
			stage.listPos = temp2
			LoadStage()
			SetScreenFade(208, 255, 224, 255)
		end if
		break
	end switch
end event


event ObjectDraw
	temp0 = screen.xcenter
	temp0 -= 13
	DrawMenu(MENU_1, temp0, 25)
	temp0 = screen.xcenter
	temp0 += 142
	DrawMenu(MENU_2, temp0, 25)
end event


event ObjectStartup
	LoadSpriteSheet("LevelSelect/Text.gif")
	foreach (TypeName[Menu Control], arrayPos0, ALL_ENTITIES)
		object[arrayPos0].priority = PRIORITY_ACTIVE
	next
	if stage.actNum < 3
		options.stageSelectFlag = 1
	end if
	SetMusicTrack("Options.ogg", 0, 1)
	SetupMenu(MENU_1, 0, 3, 1)
	AddMenuEntry(MENU_1, "EMERALD HILL@@ 1", 1)
	AddMenuEntry(MENU_1, "2", 0)
	AddMenuEntry(MENU_1, " ", 0)
	AddMenuEntry(MENU_1, "CHEMICAL PLANT 1", 1)
	AddMenuEntry(MENU_1, "2", 0)
	AddMenuEntry(MENU_1, " ", 0)
	AddMenuEntry(MENU_1, "AQUATIC RUIN@@ 1", 1)
	AddMenuEntry(MENU_1, "2", 0)
	AddMenuEntry(MENU_1, " ", 0)
	AddMenuEntry(MENU_1, "CASINO NIGHT@@ 1", 1)
	AddMenuEntry(MENU_1, "2", 0)
	AddMenuEntry(MENU_1, " ", 0)
	AddMenuEntry(MENU_1, "HILL TOP@@@@@@ 1", 1)
	AddMenuEntry(MENU_1, "2", 0)
	AddMenuEntry(MENU_1, " ", 0)
	AddMenuEntry(MENU_1, "MYSTIC CAVE@@@ 1", 1)
	AddMenuEntry(MENU_1, "2", 0)
	AddMenuEntry(MENU_1, " ", 0)
	AddMenuEntry(MENU_1, "OIL OCEAN@@@@@ 1", 1)
	AddMenuEntry(MENU_1, "2", 0)
	AddMenuEntry(MENU_1, " ", 0)
	AddMenuEntry(MENU_1, "PLAYER:         ", 0)
	AddMenuEntry(MENU_1, "SONIC", 1)
	SetupMenu(MENU_2, 0, 3, 1)
	AddMenuEntry(MENU_2, "METROPOLIS@@@@ 1", 1)
	AddMenuEntry(MENU_2, "2", 0)
	AddMenuEntry(MENU_2, "3", 0)
	AddMenuEntry(MENU_2, "SKY CHASE@@@@@@@", 1)
	AddMenuEntry(MENU_2, " ", 0)
	AddMenuEntry(MENU_2, " ", 0)
	AddMenuEntry(MENU_2, "WING FORTRESS@@@", 1)
	AddMenuEntry(MENU_2, " ", 0)
	AddMenuEntry(MENU_2, " ", 0)
	AddMenuEntry(MENU_2, "DEATH EGG@@@@@@@", 1)
	AddMenuEntry(MENU_2, " ", 0)
	AddMenuEntry(MENU_2, " ", 0)
	AddMenuEntry(MENU_2, "SPECIAL STAGE@@1", 1)
	AddMenuEntry(MENU_2, " ", 0)
	AddMenuEntry(MENU_2, " ", 0)
	AddMenuEntry(MENU_2, "SOUND TEST@ *@@*", 1)
	//AddMenuEntry(MENU_2, " ", 0)
	//AddMenuEntry(MENU_2, " ", 0)
	//AddMenuEntry(MENU_2, "HIDDEN PALACE@@@", 1)
	menu1.selection = 0
	menu2.selection = -1
	
	switch stage.playerListPos
		case 0
			EditMenuEntry(MENU_1, "SONIC", 22, 1)
			SetTableValue(0, 89, MenuControl_table0)
			SetTableValue(0, 137, MenuControl_table0)
			break
		case 1
			EditMenuEntry(MENU_1, "TAILS", 22, 1)
			SetTableValue(15, 89, MenuControl_table0)
			SetTableValue(15, 137, MenuControl_table0)
			break
		case 2
			EditMenuEntry(MENU_1, "KNUCKLES", 22, 1)
			SetTableValue(16, 89, MenuControl_table0)
			SetTableValue(16, 137, MenuControl_table0)
			break
		case 3
			EditMenuEntry(MENU_1, "SONIC & TAILS", 22, 1)
			SetTableValue(0, 89, MenuControl_table0)
			SetTableValue(0, 137, MenuControl_table0)
			break
		case 4
			EditMenuEntry(MENU_1, "KNUCKLES & TAILS", 22, 1)
			SetTableValue(16, 89, MenuControl_table0)
			SetTableValue(16, 137, MenuControl_table0)
			break
	end switch
end event

event RSDKDraw
	DrawSprite(0)
end event

event RSDKLoad
	LoadSpriteSheet("Global/Display.gif")
	SpriteFrame(-16, -16, 32, 32, 1, 143)
end event
