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

//-------Aliases-------//
private alias 18 : TYPE_STAGEMENU

// Function declarations
reserve function StageMenu_Function11

// Static Values
public value StageMenu_value7 = 0;

// Tables
public table StageMenu_table6
	0, 2, 4, 6, 8, 10, 20, 12, 14, 17, 18, 19
end table


function StageMenu_Function11
	object[10].xpos = -108
	object[10].xpos *= object.scale
	object[10].xpos >>= 8
	object[14].xpos = object[10].xpos
	object[18].xpos = object[10].xpos
	object[11].xpos = -36
	object[11].xpos *= object.scale
	object[11].xpos >>= 8
	object[15].xpos = object[11].xpos
	object[19].xpos = object[11].xpos
	object[12].xpos = 36
	object[12].xpos *= object.scale
	object[12].xpos >>= 8
	object[16].xpos = object[12].xpos
	object[20].xpos = object[12].xpos
	object[13].xpos = 108
	object[13].xpos *= object.scale
	object[13].xpos >>= 8
	object[17].xpos = object[13].xpos
	object[21].xpos = object[13].xpos
	object[10].ypos = -76
	object[10].ypos *= object.scale
	object[10].ypos >>= 8
	object[11].ypos = object[10].ypos
	object[12].ypos = object[10].ypos
	object[13].ypos = object[10].ypos
	object[14].ypos = -20
	object[14].ypos *= object.scale
	object[14].ypos >>= 8
	object[15].ypos = object[14].ypos
	object[16].ypos = object[14].ypos
	object[17].ypos = object[14].ypos
	object[18].ypos = 36
	object[18].ypos *= object.scale
	object[18].ypos >>= 8
	object[19].ypos = object[18].ypos
	object[20].ypos = object[18].ypos
	object[21].ypos = object[18].ypos
end function


event ObjectMain
	switch object.state
	case 0
		if engine.deviceType == RETRO_STANDARD
			options.physicalControls = 1
			object.value3 = 1
		end if
		object.scale = 256
		arrayPos0 = 10
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 1, -108, -76)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 2, -36, -76)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 3, 36, -76)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 4, 108, -76)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 5, -108, -20)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 6, -36, -20)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 13, 36, -20)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 7, 108, -20)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 9, -108, 36)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 10, -36, 36)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 11, 36, 36)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 12, 108, 36)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		SetScreenFade(0, 0, 0, 255)
		ResetObjectEntity(0, TypeName[2P VS Setup], 0, 0, 0)
		object[0].value0 = 384
		object[0].state = 1
		object[0].priority = PRIORITY_ACTIVE
		object.state = 3
		break
	case 3
		if options.physicalControls == 0
			CheckTouchRect(0, 0, screen.xsize, screen.ysize)
			if checkResult == -1
				if object.value3 > 0
					arrayPos0 = object.value3
					arrayPos0 += 9
					if object[arrayPos0].value2 == 0
						object.state = 4
						PlaySfx(SfxName[Menu Select], 0)
					else
						PlaySfx(SfxName[Fail], 0)
					end if
				end if
			end if
			if object.state != 4
				object.value3 = 0
				if inputPress.left == 1
					options.physicalControls = 1
					object.value3 = 12
				end if
				if inputPress.right == 1
					options.physicalControls = 1
					object.value3 = 1
				end if
				if inputPress.up == 1
					options.physicalControls = 1
					object.value3 = 9
				end if
				if inputPress.down == 1
					options.physicalControls = 1
					object.value3 = 1
				end if
			end if
		else
			if inputPress.left == 1
				object.value3--
				if object.value3 < 1
					object.value3 = 12
				end if
				PlaySfx(SfxName[Menu Move], 0)
			end if
			if inputPress.right == 1
				object.value3++
				if object.value3 > 12
					object.value3 = 1
				end if
				PlaySfx(SfxName[Menu Move], 0)
			end if
			if inputPress.up == 1
				object.value3 -= 4
				if object.value3 < 1
					object.value3 += 12
				end if
				PlaySfx(SfxName[Menu Move], 0)
			end if
			if inputPress.down == 1
				object.value3 += 4
				if object.value3 > 12
					object.value3 -= 12
				end if
				PlaySfx(SfxName[Menu Move], 0)
			end if
			if inputPress.start == 1
				arrayPos0 = object.value3
				arrayPos0 += 9
				if object[arrayPos0].value2 == 0
					object.state = 4
					PlaySfx(SfxName[Menu Select], 0)
				else
					PlaySfx(SfxName[Fail], 0)
				end if
			end if
			if inputPress.buttonA == 1
				arrayPos0 = object.value3
				arrayPos0 += 9
				if object[arrayPos0].value2 == 0
					object.state = 4
					PlaySfx(SfxName[Menu Select], 0)
				else
					PlaySfx(SfxName[Fail], 0)
				end if
			end if
			if object.state != 4
				CheckTouchRect(0, 0, screen.xsize, screen.ysize)
				if checkResult > -1
					options.physicalControls = 0
					object.value3 = 0
				end if
			end if
		end if
		break
	case 4
		if object.scale > 0
			object.scale -= 8
		end if
		object[10].alpha = object.scale
		object[11].alpha = object.scale
		object[12].alpha = object.scale
		object[13].alpha = object.scale
		object[14].alpha = object.scale
		object[15].alpha = object.scale
		object[16].alpha = object.scale
		object[17].alpha = object.scale
		object[18].alpha = object.scale
		object[19].alpha = object.scale
		object[20].alpha = object.scale
		object[21].alpha = object.scale
		object[10].drawOrder = 3
		object[11].drawOrder = 3
		object[12].drawOrder = 3
		object[13].drawOrder = 3
		object[14].drawOrder = 3
		object[15].drawOrder = 3
		object[16].drawOrder = 3
		object[17].drawOrder = 3
		object[18].drawOrder = 3
		object[19].drawOrder = 3
		object[20].drawOrder = 3
		object[21].drawOrder = 3
		arrayPos0 = object.value3
		arrayPos0 += 9
		object[arrayPos0].alpha = 256
		object[arrayPos0].drawOrder = 4
		arrayPos0 = object.value3
		arrayPos0 += 9
		CallFunction(StageMenu_Function11)
		if object.value4 < 32
			object.value4++
		else
			object.value4 = 0
			object.state = 5
		end if
		break
	case 5
		arrayPos0 = object.value3
		arrayPos0 += 9
		if object[arrayPos0].value1 < 224
			object[arrayPos0].value1 += 8
		else
			object.value0 = -640
			object.state = 6
		end if
		break
	case 6
		if object.value0 < 256
			music.volume -= 10
			object.value0 += 16
			if object.value0 > 0
				SetScreenFade(0, 0, 0, object.value0)
			end if
		else
			StopMusic()
			player.score = 0
			player.scoreBonus = 0xC350
			stage.activeList = REGULAR_STAGE
			temp0 = object.value3
			temp0--
			GetTableValue(stage.listPos, temp0, StageMenu_table6)
			player.lives = StageMenu_value7
			LoadStage()
			SetScreenFade(0, 0, 0, 255)
		end if
		break
	case 7
		if object.value0 < 256
			music.volume -= 10
			object.value0 += 16
			SetScreenFade(0, 0, 0, object.value0)
		else
			StopMusic()
			engine.state = 8
			SetScreenFade(0, 0, 0, 255)
		end if
		break
	end switch
end event


event ObjectDraw
	DrawSpriteScreenXY(0, screen.xcenter, 17)
	DrawSpriteScreenXY(1, screen.xcenter, 17)
end event


event ObjectStartup
	LoadSpriteSheet("LevelSelect/Icons.gif")
	SpriteFrame(-96, 0, 80, 14, 83, 335)
	SpriteFrame(0, 0, 96, 14, 1, 264)
	foreach (TypeName[Stage Menu], arrayPos0, ALL_ENTITIES)
		object[arrayPos0].type = TypeName[Blank Object]
		object[1].type = TypeName[Stage Menu]
		object[1].priority = PRIORITY_ACTIVE
		StageMenu_value7 = player.lives
		player.lives = 1
	next
end event

event RSDKDraw
	DrawSprite(0)
end event

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