// ----------------------------------
// RSDK Project: Sonic 1/Sonic 2
// Script Description: Ending Pose Object
// Script Author: Christian Whitehead/Simon Thomley
// Unpacked by Rubberduckycooly's script unpacker
// ----------------------------------

//-------Aliases-------//
private alias 48 : TYPE_ENDINGPOSE

// Function declarations
reserve function EndingPose_Function107
reserve function EndingPose_SonicPoseChanger

public alias saveRAM[8013] : saved.sonicendpose

// Static Values

// Tables

function EndingPose_Function107
	if object.value1 > 0
		object.value1 -= 16
	end if
end function

function EndingPose_SonicPoseChanger
	switch saved.sonicendpose
	case 1 //CD	
		EditFrame(2, -44, -67, 127, 133, 513, 1)
		EditFrame(3, -44, -67, 127, 133, 513, 1)
		break
		
	case 2 //S2
		EditFrame(2, -39, -49, 78, 97, 110, 379)
		EditFrame(3, -39, -49, 78, 97, 110, 379) 
		break

	case 4 //s3
		EditFrame(2, -18, -27, 44, 71, 36, 184)
		EditFrame(3, -40, -62, 81, 123, 260, 239)
		break
		
	case 3 //s&k
		EditFrame(2, -18, -27, 44, 71, 189, 405)
		EditFrame(3, -36, -46, 72, 91, 37, 388)
		break
	
	case 5 //SA1
		EditFrame(2, -40, -79, 179, 157, 514, 135)
		EditFrame(3, -40, -79, 179, 157, 514, 135)
		break	
	
	end switch

end function

event ObjectMain

	//end pose changer
	CallFunction(EndingPose_SonicPoseChanger)

	switch object.state
	case 0
		object.state++
		if stage.playerListPos == 1
			object.value2 = 36
		end if
	case 1
		object.value0++
		if stage.playerListPos == 1
			object.value2 = object.value0
			object.value2 >>= 3
			object.value2 %= 5
			object.value2 += 36
		end if
		if stage.playerListPos == 7
			object.value35++
			temp1 = 50
			object.value35 %= temp1
			temp0 = temp1
			temp0 /= 2
			if object.value35 >= temp0
				object.frame = 64
			else
				object.frame = 65
			end if
		end if
		if stage.playerListPos == 8
			object.value35++
			temp1 = 50
			object.value35 %= temp1
			temp0 = temp1
			temp0 /= 2
			if object.value35 >= temp0
				object.frame = 77
			else
				if object.value35 >= 0
					object.frame = 76
				else
					object.frame = 75
				end if
			end if
		end if
		if object.value0 == 240
			currentPlayer = 1
			while currentPlayer < playerCount
				ResetObjectEntity(currentPlayer, TypeName[Ending Pose], 0, object[currentPlayer].xpos, object[currentPlayer].ypos)
				object[currentPlayer].drawOrder = 6
				object[currentPlayer].state = 14
				object[currentPlayer].frame = 43
				object[currentPlayer].direction = FLIP_X
				currentPlayer++
			loop
			object.value0 = 0
			if stage.player2Enabled == 1
				object.value2 = object.value0
				object.value2 >>= 3
				object.value2 %= 5
				object.value2 += 36
			end if
			switch stage.playerListPos
			case 0
			case 3
				object.frame = 1
				break
			case 1
				object.frame = 14
				object.value2 = object.value0
				object.value2 >>= 3
				object.value2 %= 5
				object.value2 += 36
				break
			case 2
				object.frame = 25
				break
			case 5
				object.frame = 51
				break
			case 7
				object.frame = 55
				break
			case 8
				object.frame = 66
				break
			end switch
			object.state++
			object.value2 = 0
		else
			currentPlayer = 1
			while currentPlayer < playerCount
				if object[currentPlayer].speed == 0
					object[currentPlayer].direction = FLIP_X
				end if
				currentPlayer++
			loop
		end if
		break
	case 2
		CallFunction(EndingPose_Function107)
		object.value0++
		if object.frame == 14
			object.value2 = object.value0
			object.value2 >>= 3
			object.value2 %= 5
			object.value2 += 36
		end if
		if object.value0 == 12
			object.value0 = 0
			switch stage.playerListPos
			case 0
			case 3
				object.frame = 2
				object.ixpos = screen.cameraX
				object.iypos = screen.cameraY
				break
			case 1
				object.frame = 53
				object.ixpos = screen.cameraX
				object.iypos = screen.cameraY
				break
			case 2
				object.frame = 54
				object.ixpos = screen.cameraX
				object.iypos = screen.cameraY
				break
			case 5
				object.frame = 52
				object.ixpos = screen.cameraX
				object.iypos = screen.cameraY
				break
			case 7
				object.frame = 56
				object.ixpos = screen.cameraX
				object.iypos = screen.cameraY
				break
			case 8
				object.frame = 67
				object.ixpos = screen.cameraX
				object.iypos = screen.cameraY
				break
			end switch
			object.state++
		end if
		break
	case 3
		CallFunction(EndingPose_Function107)
		object.value0++
		if object.value0 == 4
			object.value0 = -0x618
			switch stage.playerListPos
			case 0
			case 3
				object.frame = 3
				break
			case 1
				object.frame = 15
				object.ixpos = screen.cameraX
				object.iypos = screen.cameraY
				break
			case 2
				object.frame = 26
				object.ixpos = screen.cameraX
				object.iypos = screen.cameraY
				break
			case 5
				object.frame = 45
				object.ixpos = screen.cameraX
				object.iypos = screen.cameraY
				break
			case 7
				object.frame = 57
				object.ixpos = screen.cameraX
				object.iypos = screen.cameraY
				break
			case 8
				object.frame = 68
				object.ixpos = screen.cameraX
				object.iypos = screen.cameraY
				break
			end switch
			object.state++
		end if
		break
	case 4
		if object.value0 < 320
			object.value0 += 12
		else
			stage.activeList = PRESENTATION_STAGE
			stage.listPos = 2
			lampPostID = 0
			recMilliSeconds = 0
			recSeconds = 0
			recMinutes = 0
			LoadStage()
		end if
		if object.value0 > 0
			temp0 = object.value0
		else
			temp0 = 0
		end if
		SetScreenFade(0, 0, 0, temp0)
		break
	case 5
		object.value0++
		if object.value0 == 80
			object.value0 = 0
			object.state++
		else
			switch stage.playerListPos
			case 0
			case 3
				object.frame = 4
				break
			case 1
				object.frame = 16
				object.value2 = object.value0
				object.value2 >>= 3
				object.value2 %= 5
				object.value2 += 36
				break
			case 2
				object.frame = 27
				break
			case 5
				object.frame = 46
				break
			case 7
				object.frame = 58
				break
			case 8
				object.frame = 69
				break
			end switch
			currentPlayer = 1
			while currentPlayer < playerCount
				if object[currentPlayer].speed == 0
					object[currentPlayer].direction = FLIP_X
				end if
				currentPlayer++
			loop
				object.value47 = 0
		end if
		break
	case 6
		object.frame = object.value0
		object.frame >>= 2
		object.frame &= 1
		switch stage.playerListPos
		case 0
		case 3
			object.frame += 5
			break
		case 1
			object.frame += 17
			object.value2 = object.value0
			object.value2 >>= 3
			object.value2 %= 5
			object.value2 += 36
			break
		case 2
			object.frame += 27
			break
		case 5
			object.frame += 46
			break
		case 7
			object.frame += 58
			break
		case 8
			object.frame += 69
			break
		end switch
		object.value0++
		if object.value0 == 80
			object.value0 = 0
			switch stage.playerListPos
			case 0
			case 3
				object.frame = 7
				break
			case 1
				object.frame = 19
				break
			case 2
				object.frame = 29
				break
			case 5
				object.frame = 48
				break
			case 7
				object.frame = 60
				break
			case 8
				object.frame = 71
				break
			end switch
			currentPlayer = 1
			while currentPlayer < playerCount
				object[currentPlayer].up = 1
				object[currentPlayer].controlMode = -1
				currentPlayer++
			loop
			CreateTempObject(TypeName[Emeralds], 0, object.xpos, object.ypos)
			object[tempObjectPos].drawOrder = 6
			object.state++
		else
			currentPlayer = 1
			while currentPlayer < playerCount
				if object[currentPlayer].speed == 0
					object[currentPlayer].direction = FLIP_X
				end if
				currentPlayer++
			loop
		end if
		break
	case 7
		object.value47++
		object.value2 = object.value47
		object.value2 >>= 3
		object.value2 %= 5
		object.value2 += 36
		break
	case 8
		object.value47++
		object.value2 = object.value47
		object.value2 >>= 3
		object.value2 %= 5
		object.value2 += 36
		if object.value0 < 384
			object.value0 += 6
		else
			object.value0 = 256
			SetTileLayerEntry(184, 0, 2, 2)
			SetTileLayerEntry(185, 0, 3, 2)
			SetTileLayerEntry(186, 0, 2, 3)
			SetTileLayerEntry(187, 0, 3, 3)
			SetTileLayerEntry(188, 0, 4, 2)
			SetTileLayerEntry(189, 0, 5, 2)
			SetTileLayerEntry(190, 0, 4, 3)
			SetTileLayerEntry(191, 0, 5, 3)
			object.state++
		end if
		SetScreenFade(color6, color7, color6, object.value0)
		break
	case 9
		object.value47++
		object.value2 = object.value47
		object.value2 >>= 3
		object.value2 %= 5
		object.value2 += 36
		if object.value0 > 0
			object.value0 -= 16
			SetScreenFade(color6, color7, color6, object.value0)
		else
			switch stage.playerListPos
			case 0
			case 3
				object.frame = 8
				break
			case 1
				object.frame = 20
				break
			case 2
				object.frame = 30
				break
			case 5
				object.frame = 51
				break
			case 7
				object.frame = 61
				break
			case 8
				object.frame = 72
				break
			end switch
			object.state++
			currentPlayer = 1
			while currentPlayer < playerCount
				ResetObjectEntity(currentPlayer, TypeName[Ending Pose], 0, object[currentPlayer].xpos, object[currentPlayer].ypos)
				object[currentPlayer].drawOrder = 6
				object[currentPlayer].state = 12
				object[currentPlayer].frame = 43
				object[currentPlayer].direction = FLIP_X
				currentPlayer++
			loop
		end if
		break
	case 10
		object.value47++
		object.value2 = object.value47
		object.value2 >>= 3
		object.value2 %= 5
		object.value2 += 36
		switch stage.playerListPos
		case 0
		case 3
			object.frame = object.value0
			object.frame /= 6
			object.frame &= 1
			object.frame += 8
			break
		case 1
			object.frame = object.value0
			object.frame /= 10
			object.frame &= 3
			object.frame += 20
			if object.value0 >= 40
				object.frame = 23
			end if
			break
		case 2
			object.frame = object.value0
			object.frame /= 10
			object.frame &= 3
			object.frame += 30
			if object.value0 >= 40
				object.frame = 33
			end if
			break
		case 5
			object.frame = object.value0
			object.frame /= 6
			object.frame &= 1
			object.frame += 49
			break
		case 7
			object.frame = object.value0
			object.frame /= 6
			object.frame &= 1
			object.frame += 61
			break
		case 8
			object.frame = object.value0
			object.frame /= 6
			object.frame &= 1
			object.frame += 72
			break
		end switch
		object.value0++
		if object.value0 == 42
			object.value0 = 0
			object.state++
		end if
		break
	case 11
		object.value47++
		object.value2 = object.value47
		object.value2 >>= 3
		object.value2 %= 5
		object.value2 += 36
		object.value0++
		if object.value0 == 60
			object.value0 = 0
			switch stage.playerListPos
			case 0
			case 3
				object.frame = 1
				break
			case 1
				object.frame = 14
				break
			case 2
				object.frame = 25
				break
			case 5
				object.frame = 51
				break
			case 7
				object.frame = 55
				break
			case 8
				object.frame = 66
				break
			end switch
			object.state = 2
		end if
		break
	case 12
		object.frame = object.value0
		object.frame /= 10
		object.frame &= 3
		object.frame += 20
		if object.value0 >= 40
			object.frame = 23
		end if
		object.value0++
		if object.value0 == 42
			object.value0 = 0
			object.state++
		end if
		break
	case 13
		object.value0++
		if object.value0 == 60
			object.value0 = 0
			object.frame = 43
			object.state++
		end if
		break
	case 14
		object.value0++
		if object.value0 == 8
			object.frame++
			object.value0 = 0
			object.state++
		end if
		break
	end switch
	if stage.player2Enabled == 1
		switch object[1].frame
		case 20
		case 21
		case 22
		case 23
		case 43
			object.value2 = object.value0
			object.value2 >>= 3
			object.value2 %= 5
			object.value2 += 36
			break
		end switch
	end if
end event


event ObjectDraw
	if object.value2 != 0
		if stage.player2Enabled == 1
			temp1 = object[1].xpos
			temp2 = object[1].ypos
		else
			temp1 = object[0].xpos
			temp2 = object[0].ypos
		end if
		switch object.frame 
		case 16
		case 17
		case 18
		case 19
		case 20
		case 22
			object.direction = FLIP_X
			temp0 = temp1
			temp0 -= 5
			break
		case 13
		case 14
		case 43
			temp0 = temp1
			temp0 += 0x20000
			break
		case 21
		case 23
		case 75
		case 76
		case 77
			temp0 = temp1
			temp0 += 0x30000
			break	
		end switch
		DrawSpriteFX(object.value2, FX_FLIP, temp0, temp2)
	end if
	object.direction = 0
	if stage.playerlistPos == 8
		object.value2 = object.value0
		object.value2 >>= 3
		object.value2 %= 5
		object.value2 += 78
	end if
	DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)
	if object.entityPos == 0
		if object.state > 0
			temp0 = screen.xcenter
			temp0 -= 96
			temp0 -= object.value1
			if stage.player2Enabled == 1
				if saved.region == 1
					temp2 = 42
				else
					temp2 = 41
				end if
			else
				temp2 = 0
			end if
			
			temp1 = 10
			if stage.playerListPos < 3
				temp1 += stage.playerListPos
			end if
			DrawSpriteScreenXY(temp1, temp0, 80)
			if temp2 > 0
				DrawSpriteScreenXY(temp2, temp0, 80)
			end if
		end if
	end if
end event


event ObjectStartup
	//recGoggles = 5
	if recGoggles == 5
		LoadSpriteSheet("Ending/Objects2.gif")
	else
		LoadSpriteSheet("Ending/Objects.gif")
	end if
	SpriteFrame(-15, -18, 31, 38, 3, 256)
	SpriteFrame(-16, -16, 32, 35, 3, 220)
	SpriteFrame(-18, -27, 44, 71, 36, 184)
	SpriteFrame(-56, -68, 174, 134, 81, 121) //3
	SpriteFrame(-11, -21, 26, 40, 1, 16)
	SpriteFrame(-11, -21, 26, 40, 1, 16)
	SpriteFrame(-14, -21, 29, 40, 2, 57)
	SpriteFrame(-16, -20, 29, 39, 3, 98)
	SpriteFrame(-16, -21, 32, 40, 3, 138)
	SpriteFrame(-16, -21, 32, 40, 3, 179)
	SpriteFrame(-48, 0, 96, 40, 256, 141) //Sonic The Hedgehog Forever
	SpriteFrame(-48, 0, 96, 40, 256, 141) //Tails in Sonic The Hedgehog Forever
	SpriteFrame(-48, 0, 96, 40, 256, 141) // Knuckles in Sonic The Hedgehog Forever
	SpriteFrame(-12, -16, 24, 32, 288, 15)
	SpriteFrame(-19, -12, 33, 31, 254, 16)
	SpriteFrame(-45, -61, 149, 122, 110, 256) //15 tails
	SpriteFrame(-11, -16, 27, 34, 313, 16)
	SpriteFrame(-11, -16, 27, 34, 59, 16)
	SpriteFrame(-14, -16, 30, 34, 87, 16)
	SpriteFrame(-15, -14, 31, 32, 118, 16) // 19
	SpriteFrame(-12, -16, 25, 34, 150, 16)//tails lookin
	SpriteFrame(-12, -16, 25, 34, 176, 16)
	SpriteFrame(-12, -16, 25, 34, 202, 16)
	SpriteFrame(-12, -16, 25, 34, 228, 16)
	SpriteFrame(-14, -23, 27, 41, 325, 57)
	SpriteFrame(-18, -21, 30, 39, 295, 57) //knux
	SpriteFrame(-45, -62, 150, 139, 248, 363) // big knux
	SpriteFrame(-12, -23, 24, 41, 32, 57)// 27 knux
	SpriteFrame(-18, -22, 32, 40, 57, 58)
	SpriteFrame(-19, -22, 31, 40, 90, 58)
	SpriteFrame(-16, -23, 33, 41, 132, 57)
	SpriteFrame(-16, -23, 33, 41, 166, 57)
	SpriteFrame(-16, -23, 33, 41, 200, 57)
	SpriteFrame(-16, -23, 33, 41, 200, 57)
	SpriteFrame(-16, -23, 27, 41, 268, 57)
	SpriteFrame(-16, -23, 33, 41, 234, 57)
	SpriteFrame(-22, -8, 16, 24, 256, 99)
	SpriteFrame(-26, -8, 20, 24, 273, 99)
	SpriteFrame(-26, -8, 20, 24, 294, 99)
	SpriteFrame(-26, -8, 20, 24, 315, 99)
	SpriteFrame(-26, -8, 20, 24, 336, 99)
	SpriteFrame(-48, 0, 96, 40, 256, 141) //Sonic The Hedgehog Forever
	SpriteFrame(-48, 0, 96, 40, 256, 141) //Sonic The Hedgehog Forever
	SpriteFrame(-10, -13, 22, 31, 58, 99)
	SpriteFrame(-20, -17, 36, 35, 44, 131) //44
	SpriteFrame(-49, -95, 98, 190, 728, 293)

	//amy
	SpriteFrame(-11, -19, 22, 37, 399, 365) //46
	SpriteFrame(-14, -19, 25, 37, 399, 403) //47
	SpriteFrame(-11, -19, 21, 37, 422, 365) //48
	SpriteFrame(-12, -19, 24, 37, 444, 365) //49
	SpriteFrame(-12, -19, 24, 37, 469, 365) //50
	SpriteFrame(-16, -19, 32, 37, 425, 403) //51
	
	SpriteFrame(-27, -21, 53, 82, 348, 208) //52 amy mid jump

	SpriteFrame(-37, -10, 74, 61, 35, 256) // 53 tails mid jump
	SpriteFrame(-31, -15, 63, 69, 36, 318) // 54 knux mid jump

	//mighty
	SpriteFrame(-13, -20, 26, 39, 649, 293)   //55 about to jump
	SpriteFrame(-19, -17, 58, 73, 514, 333)   //56 mid jump
	SpriteFrame(-55, -67, 130, 134, 573, 333) //57 hell yeah

	//mighty chaos frames
	SpriteFrame(-13, -20, 26, 39, 514, 293) //58
	SpriteFrame(-13, -20, 26, 39, 541, 293)
	SpriteFrame(-14, -20, 26, 39, 568, 293)
	SpriteFrame(-14, -20, 26, 39, 595, 293)
	SpriteFrame(-14, -20, 26, 39, 622, 293)
	SpriteFrame(-14, -20, 26, 39, 595, 293)

	SpriteFrame(-12, -20, 25, 39, 676, 293)// 64 idk what is happening
	SpriteFrame(-12, -20, 25, 39, 702, 293)// 65 idk what is happening 2

	//ray
	SpriteFrame(-17, -18, 33, 37, 776, 1)   //66 about to jump
	SpriteFrame(-19, -37, 57, 74, 641, 39)   //67 mid jump
	SpriteFrame(-40, -74, 115, 148, 699, 39) //68 hell yeah

	//ray chaos frames
	SpriteFrame(-12, -18, 24, 37, 641, 1) //69
	SpriteFrame(-15, -18, 27, 37, 666, 1)
	SpriteFrame(-15, -18, 27, 37, 694, 1)
	SpriteFrame(-14, -18, 26, 37, 722, 1)
	SpriteFrame(-14, -18, 26, 37, 749, 1)
	SpriteFrame(-14, -18, 26, 37, 722, 1)

	SpriteFrame(-12, -18, 23, 37, 694, 255)// 75 idk what is happening
	SpriteFrame(-12, -18, 23, 37, 718, 255)// 76 idk what is happening 2
	SpriteFrame(-12, -18, 23, 37, 742, 255)// 77 idk what is happening 3

	SpriteFrame(-16, -10, 9, 22, 694, 232) // 78 ray
	SpriteFrame(-20, -10, 13, 22, 704, 232)
	SpriteFrame(-24, -10, 17, 22, 718, 232)
	SpriteFrame(-28, -10, 21, 22, 736, 232)
	SpriteFrame(-22, -10, 15, 22, 758, 232)
	
	SpriteFrame(-10, -19, 20, 37, 458, 403) //83 amy defualy

end event

event RSDKDraw
	DrawSprite(0)
end event

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