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

//-------Aliases-------//
private alias 11 : TYPE_2PVSMENU3

// Function declarations
reserve function 2PVSMenu3_Function7
reserve function 2PVSMenu3_Function8

// Static Values

// Tables

function 2PVSMenu3_Function7
	object[10].alpha = 256
	object[11].alpha = 256
	object[12].alpha = 256
	object[13].alpha = 256
	object[14].alpha = 256
	object[15].alpha = 256
	object[16].alpha = 256
	object[17].alpha = 256
	object[+1].value5 = vs.player2Type
	object[+1].value5 += 2
	object.state = 3
	if options.physicalControls == 0
		object.value3 = 0
	else
		object.value3 = 1
	end if
end function


function 2PVSMenu3_Function8
	object[10].xpos = -108
	object[10].xpos *= object.scale
	object[10].xpos >>= 8
	object[14].xpos = object[10].xpos
	object[11].xpos = -36
	object[11].xpos *= object.scale
	object[11].xpos >>= 8
	object[15].xpos = object[11].xpos
	object[12].xpos = 36
	object[12].xpos *= object.scale
	object[12].xpos >>= 8
	object[16].xpos = object[12].xpos
	object[13].xpos = 108
	object[13].xpos *= object.scale
	object[13].xpos >>= 8
	object[17].xpos = object[13].xpos
	object[10].ypos = -28
	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 = 28
	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
end function


event ObjectMain
	switch object.state
	case 0
		LoadSpriteSheet("LevelSelect/Icons.gif")
		object.value1 = object.spriteSheet
		LoadSpriteSheet("LevelSelect/Text.gif")
		object.value2 = object.spriteSheet
		if engine.deviceType == RETRO_STANDARD
			options.physicalControls = 1
		end if
		menu1.selection = -1
		object.scale = 256
		object.value5 = stage.playerListPos
		object.value5 += 2
		SetupMenu(MENU_1, 0, 3, 2)
		AddMenuEntry(MENU_1, "MATCH:", 1)
		AddMenuEntry(MENU_1, "", 1)
		AddMenuEntry(MENU_1, "OF", 1)
		arrayPos0 = 10
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 1, -108, -28)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 2, -36, -28)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 3, 36, -28)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 4, 108, -28)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 5, -108, 28)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 6, -36, 28)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 7, 36, 28)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		arrayPos0++
		ResetObjectEntity(arrayPos0, TypeName[Zone Button], 8, 108, 28)
		object[arrayPos0].priority = PRIORITY_ACTIVE
		object[2].state = 3
		if options.vsMode == 1
			CallFunction(2PVSMenu3_Function7)
		else
			object.state = 1
			object.value6 = 0
			object.value0 = 0
			vs.randomValue = 313
		end if
		break
	case 1
		if ReceiveValue == -1
			options.vsMode = 1
			object.state = 2
			if vs.gameLength == 0
				vs.gameLength = 4
			end if
			if vs.itemMode == 0
				vs.itemMode = 1
			end if
		end if
		CallNativeFunction2(ReceiveValue, object.value6, 1)
		if object.value6 > 1
			vs.gameLength = object.value6
			vs.gameLength >>= 4
			vs.gameLength &= 15
			vs.itemMode = object.value6
			vs.itemMode >>= 8
			vs.itemMode &= 15
			vs.playerID = object.value6
			vs.playerID >>= 12
			vs.playerID &= 15
			options.vsMode = 1
			object.state = 2
		end if
		if object.value6 == 1
			object.state = 7
		end if
		break
	case 2
		object.animationTimer++
		object.animationTimer &= 15
		if object.value0 < 120
			object.value0++
			if object.value0 == 60
				CallNativeFunction2(TransmitGlobal, "vs.player2Type", stage.playerListPos)
			end if
		else
			if ReceiveValue == -1
				if inputPress.buttonC == 1
					Rand(vs.player2Type, 3)
				end if
			end if
			if vs.player2Type > -1
				PlaySfx(SfxName[Star Post], 0)
				object.value0 = 0
				CallFunction(2PVSMenu3_Function7)
			end if
		end if
		break
	case 3
		CallNativeFunction2(ReceiveEntity, 2, 1)
		if object[2].type != TypeName[Blank Object]
			if object[2].type != TypeName[2P VS Menu 3]
				ResetObjectEntity(2, TypeName[Blank Object], 0, 0, 0)
			end if
		end if
		object[2].type = TypeName[Blank Object]
		if object[2].state == 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)
							CallNativeFunction2(SendEntity, 1, 1)
						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 = 8
					end if
					if inputPress.right == 1
						options.physicalControls = 1
						object.value3 = 1
					end if
					if inputPress.up == 1
						options.physicalControls = 1
						object.value3 = 5
					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 = 8
					end if
					PlaySfx(SfxName[Menu Move], 0)
				end if
				if inputPress.right == 1
					object.value3++
					if object.value3 > 8
						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 += 8
					end if
					PlaySfx(SfxName[Menu Move], 0)
				end if
				if inputPress.down == 1
					object.value3 += 4
					if object.value3 > 8
						object.value3 -= 8
					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)
						CallNativeFunction2(SendEntity, 1, 1)
					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)
						CallNativeFunction2(SendEntity, 1, 1)
					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
		else
			object.state = 4
			object.value3 = object[2].value3
			PlaySfx(SfxName[Menu Select], 0)
		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[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
		arrayPos0 = object.value3
		arrayPos0 += 9
		object[arrayPos0].alpha = 256
		object[arrayPos0].drawOrder = 4
		arrayPos0 = object.value3
		arrayPos0 += 9
		CallFunction(2PVSMenu3_Function8)
		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
			if object.value3 < 8
				temp0 = object.value3
				temp0--
				temp0 <<= 1
				vs.listPos = temp0
				vs.activeList = 1
			else
				vs.listPos = 4
				vs.activeList = 3
			end if
			SetBit(vs.stageMask, object[arrayPos0].propertyValue, 1)
			object.state = 6
			if vs.playerID == 0
				object.value6 = vs.listPos
				object.value6 <<= 4
				object.value6 += vs.activeList
				CallNativeFunction2(SendValue, object.value6, 1)
			else
				object.value6 = 0
			end if
		end if
		break
	case 6
		object.value0++
		if object.value0 >= 60
			if vs.playerID == 0
				stage.activeList = vs.activeList
				stage.listPos = vs.listPos
				if stage.activeList == REGULAR_STAGE
					object[0].state = 3
				else
					PlaySfx(SfxName[Warp], 0)
					object[0].state = 4
				end if
				object.state = 8
			else
				CallNativeFunction2(ReceiveValue, object.value6, 1)
				if object.value6 > 0
					vs.activeList = object.value6
					vs.activeList &= 15
					vs.listPos = object.value6
					vs.listPos >>= 4
					stage.activeList = vs.activeList
					stage.listPos = vs.listPos
					if stage.activeList == REGULAR_STAGE
						object[0].state = 3
					else
						PlaySfx(SfxName[Warp], 0)
						object[0].state = 4
					end if
					object.state = 8
				end if
			end if
		end if
		break
	case 7
		StopMusic()
		options.vsMode = 0
		engine.state = 8
		SetScreenFade(0, 0, 0, 255)
		break
	end switch
end event


event ObjectDraw
	object.spriteSheet = object.value1
	DrawSpriteScreenXY(0, screen.xcenter, 17)
	DrawSpriteScreenXY(1, screen.xcenter, 17)
	temp0 = screen.xcenter
	temp0 -= 64
	if vs.playerID == 0
		DrawSpriteScreenXY(object.value5, temp0, 56)
		DrawSpriteScreenXY(7, temp0, 56)
	else
		if object.state > 2
			DrawSpriteScreenXY(object[+1].value5, temp0, 56)
		else
			if object.animationTimer < 8
				DrawSpriteScreenXY(19, temp0, 56)
			end if
		end if
		DrawSpriteScreenXY(5, temp0, 56)
	end if
	temp0 = screen.xcenter
	temp0 += 64
	if vs.playerID == 1
		DrawSpriteScreenXY(object.value5, temp0, 56)
		DrawSpriteScreenXY(8, temp0, 56)
	else
		if object.state > 2
			DrawSpriteScreenXY(object[+1].value5, temp0, 56)
		else
			if object.animationTimer < 8
				DrawSpriteScreenXY(19, temp0, 56)
			end if
		end if
		DrawSpriteScreenXY(6, temp0, 56)
	end if
	temp0 = screen.xcenter
	temp0 -= 24
	temp2 = vs.match
	temp2++
	DrawNumbers(9, temp0, 69, temp2, 6, 8, 0)
	temp0 += 40
	DrawNumbers(9, temp0, 69, vs.gameLength, 6, 8, 0)
	object.spriteSheet = object.value2
	DrawMenu(MENU_1, screen.xcenter, 52)
end event


event ObjectStartup
	LoadSpriteSheet("LevelSelect/Icons.gif")
	LoadSpriteSheet("LevelSelect/Text.gif")
	SpriteFrame(-96, 0, 80, 14, 83, 335)
	SpriteFrame(0, 0, 96, 14, 1, 264)
	SpriteFrame(-12, -20, 24, 40, 1, 279)
	SpriteFrame(-16, -20, 32, 40, 54, 279)
	SpriteFrame(-14, -20, 27, 40, 26, 279)
	SpriteFrame(-8, 24, 16, 7, 218, 124)
	SpriteFrame(-8, 24, 16, 7, 218, 132)
	SpriteFrame(-8, 24, 16, 7, 98, 136)
	SpriteFrame(-8, 24, 16, 7, 115, 136)
	SpriteFrame(0, 0, 8, 7, 175, 140)
	SpriteFrame(0, 0, 8, 7, 183, 140)
	SpriteFrame(0, 0, 8, 7, 191, 140)
	SpriteFrame(0, 0, 8, 7, 199, 140)
	SpriteFrame(0, 0, 8, 7, 207, 140)
	SpriteFrame(0, 0, 8, 7, 215, 140)
	SpriteFrame(0, 0, 8, 7, 223, 140)
	SpriteFrame(0, 0, 8, 7, 231, 140)
	SpriteFrame(0, 0, 8, 7, 239, 140)
	SpriteFrame(0, 0, 8, 7, 247, 140)
	SpriteFrame(-28, -3, 56, 15, 44, 362)
	foreach (TypeName[2P VS Menu 3], arrayPos0, ALL_ENTITIES)
		object[arrayPos0].priority = PRIORITY_ACTIVE
	next
end event

event RSDKDraw
	DrawSprite(0)
end event

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