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

//-------Aliases-------//
private alias 40 : TYPE_ENDINGSETUP


// Static Values
public value EndingSetup_value33 = 0;
public value EndingSetup_value34 = 0;

// Tables
public table EndingSetup_table38
	0xE00000, 0xC00000, 0xA00000, 0x800000, 0x600000, 0x400000, 0x200000, 0x400000, 0x600000, 0x800000, 0xA00000, 0xC00000, 0xE00000, 0xE02000, 0xE04000, 0xE02000
end table

public table EndingSetup_table39
	0xE000, 0x20C000, 0x40A000, 0x608000, 0x806000, 0xA04000, 0xC02000, 0xE00000, 0xC00020, 0xA00040, 0x800060, 0x600080, 0x4000A0, 0x2000C0, 224, 0x20C0
	0x40A0, 0x6080, 0x8060, 0xA040, 0xC020
end table

public table EndingSetup_table40
	0x40E0, 192, 192, 0x60E0, 0x20C0, 192, 0x40E0, 0x40E0, 192, 0x20C0, 0x60E0, 0x20C0, 192, 0x40E0, 0x40C0, 192
	0x20C0, 0x40E0, 192, 192, 0x60E0, 0x20C0, 192, 0x40E0, 0x20E0, 192, 0x20C0
end table

private table EndingSetup_table0
	0xE000, 0xA000, 0x6000, 0x2000, 0, 32, 96, 0x20A0, 0x60E0, 0x20A0, 96, 32, 0, 0x200000, 0x600000, 0xA00000, 0xE00000, 0xE04000, 0xE00000, 0xA00000, 0x600000, 0x200000, 0, 0x202000, 0x606000, 0xA0A000, 0xE0E000, 0xA0A000, 0x606000, 0x202000, 0, 0x2000, 0x6000, 0xA000, 
end table

event ObjectMain
	object.value14++
	if object.value14 == 8
		object.value14 = 0
		object.value15++
		object.value15 &= 15
		GetTableValue(temp0, object.value15, EndingSetup_table38)
		SetPaletteEntry(0, 175, temp0)
		object.value16++
		object.value16 %= 21
		GetTableValue(temp0, object.value16, EndingSetup_table39)
		SetPaletteEntry(0, 191, temp0)
		object.value17 += 3
		object.value17 %= 27
		GetTableValue(temp0, object.value17, EndingSetup_table40)
		SetPaletteEntry(0, 188, temp0)
		object.value18 += 3
		object.value18 %= 27
		GetTableValue(temp0, object.value18, EndingSetup_table40)
		SetPaletteEntry(0, 189, temp0)
		object.value19 += 3
		object.value19 %= 27
		GetTableValue(temp0, object.value19, EndingSetup_table40)
		SetPaletteEntry(0, 190, temp0)
	end if
	switch object.state
	case 0
		EndingSetup_value33 = -0x6000
		EndingSetup_value34 = -0x10000
		object.state = 1
		object[0].animation = ANI_FANROTATE
		temp0 = 0
		while temp0 < 256
			SetPaletteEntry(2, temp0, 0xE0E0E0)
			SetPaletteEntry(3, temp0, 0xFFFFFF)
			temp0++
		loop
		PlayMusic(0)
		if specialStage.emeralds >= 127
			PlayerObject_SuperState = 1
			object[0].value18 = 5
			if stage.playerListPos == 2
				object[0].animation = ANI_GLIDING
				object[0].prevAnimation = ANI_GLIDING
				object[0].frame = 2
			else
				object[0].animation = ANI_FLYING
			end if
			object[0].speed = 0x100000
			object[0].value7 = 60
			object[0].value8 = 0
			object[0].visible = 1
			object[0].value0 = 0xFFFF
			switch stage.playerListPos
			case 0
			case 3
				object[0].animation = ANI_RUNNING
				arrayPos0 = stage.entityPos
				stage.entityPos = 0
				if saved.rotate == 1
					LoadAnimation("SmoothSuperSonic.ani")
				else
					LoadAnimation("SuperSonic.ani")
				end if
				stage.entityPos = arrayPos0
				break
			end switch
		end if
		object.value20 = 3
		SetPaletteFade(1, 0, object.value20, object.value2, 0, 255)
		if stage.playerListPos != 0
			if stage.playerListPos != 3
				stage[0].activeLayer = 1
				object[0].xpos = 0xD40000
				object[0].ypos = 0x1050000
				object.frame = 4
				object.value2 = 976
				object.state = 4
			end if
		end if
		SetActivePalette(1, 0, screen.ysize)		
		break
	case 1
		object.value2 -= 8
		SetPaletteFade(1, 0, object.value20, object.value2, 0, 255)
		if object.value2 <= 0
			object.value0 = 360
			object.state = 2
		end if
		break
	case 2
		object.value0--
		if object.value0 == 0
			object.state = 3
			if object.frame == 3
				object.value20 = 3
			else
				object.value20 = 2
			end if
		end if
		break
	case 3
		object.value2 += 8
		SetPaletteFade(1, 0, object.value20, object.value2, 0, 255)
		if object.value2 >= 736
			object.frame++
			if object.frame == 4
				stage[0].activeLayer = 1
				object[0].xpos = 0xD40000
				object[0].ypos = 0x1050000
				object.state = 4
			else
				object.state = 1
			end if
		end if
		break
	case 4
		object.value2 -= 8
		temp0 = object.value2
		temp0 -= 512
		if temp0 < 0
			temp0 = 0
		end if
		SetPaletteFade(1, 0, object.value20, temp0, 0, 63)
		SetPaletteFade(1, 0, object.value20, object.value2, 64, 255)
		if object.value2 <= 0
			object.state = 5
			SetActivePalette(0, 0, screen.ysize)
		end if
	case 5
		object.value3++
		object[0].ypos += 0x10000
		if object[0].ypos >= 0x1E00000
			object.state = 6
		end if
		break
	case 6
		object.value3++
		object.value0--
		if object.value0 < 0
			Rand(object.value0, 32)
			temp0 = screen.ysize
			temp0 += screen.cameraY
			temp0 += 16
			temp0 <<= 16
			CreateTempObject(TypeName[Cloud], 0, 0, temp0)
			Rand(object[tempObjectPos].frame, 4)
			if object[tempObjectPos].frame == 3
				object[tempObjectPos].frame = 2
			else
				FlipSign(object[tempObjectPos].frame)
				object[tempObjectPos].frame += 2
			end if
			object[tempObjectPos].drawOrder = object[tempObjectPos].frame
			object[tempObjectPos].drawOrder++
			temp0 = screen.xsize
			Rand(object[tempObjectPos].xpos, temp0)
			object[tempObjectPos].xpos <<= 16
			temp0 = screen.ysize
			temp0 += screen.cameraY
			temp0 += 16
			temp0 <<= 16
			CreateTempObject(TypeName[Cloud], 0, 0, temp0)
			Rand(object[tempObjectPos].frame, 4)
			if object[tempObjectPos].frame == 3
				object[tempObjectPos].frame = 2
			else
				FlipSign(object[tempObjectPos].frame)
				object[tempObjectPos].frame += 2
			end if
			object[tempObjectPos].drawOrder = object[tempObjectPos].frame
			object[tempObjectPos].drawOrder++
			temp0 = screen.xsize
			Rand(object[tempObjectPos].xpos, temp0)
			object[tempObjectPos].xpos += temp0
			object[tempObjectPos].xpos <<= 16
		end if
		temp0 = 488
		if stage.playerListPos != 0
			if stage.playerListPos != 3
				temp0 = 0xA30
			end if
		end if
		if object.value3 == temp0
			object[33].type = TypeName[Tornado]
			object[33].priority = PRIORITY_ACTIVE
			object[33].ypos = screen.ycenter
			object[33].ypos += screen.cameraY
			object[33].ypos += 21
			if stage.playerListPos != 1
				object[33].ypos += 4
			end if
			object[33].ypos <<= 16
			object[33].inkEffect = INK_ALPHA
			object[33].alpha = 0
		end if
		if EndingSetup_value34 >= 0
			object.state = 7
		end if
		break
	case 7
		object.value0--
		if object.value0 < 0
			Rand(object.value0, 32)
			temp0 = screen.xsize
			temp0 += 16
			temp0 <<= 17
			CreateTempObject(TypeName[Cloud], 0, temp0, 0)
			Rand(object[tempObjectPos].frame, 4)
			if object[tempObjectPos].frame == 3
				object[tempObjectPos].frame = 2
			else
				FlipSign(object[tempObjectPos].frame)
				object[tempObjectPos].frame += 2
			end if
			object[tempObjectPos].drawOrder = object[tempObjectPos].frame
			object[tempObjectPos].drawOrder++
			object[tempObjectPos].priority = PRIORITY_ACTIVE
			temp0 = screen.ysize
			Rand(object[tempObjectPos].ypos, temp0)
			object[tempObjectPos].ypos += screen.cameraY
			object[tempObjectPos].ypos -= screen.ycenter
			object[tempObjectPos].ypos <<= 16
		end if
		break
	end switch
end event


event ObjectDraw
	
	if object.frame < 4
		temp0 = screen.xcenter
		temp0 <<= 16
		temp1 = screen.ycenter
		temp1 <<= 16
		DrawSpriteXY(object.frame, temp0, temp1)
	end if
end event


event ObjectStartup
	LoadSpriteSheet("Ending/Objects.gif")
	SpriteFrame(-48, -36, 96, 72, 318, 1)
	SpriteFrame(-48, -36, 96, 72, 415, 1)
	SpriteFrame(-48, -36, 96, 72, 318, 74)
	SpriteFrame(-48, -36, 96, 72, 415, 74)
	SetMusicTrack("Ending.ogg", 0, 0)
	animalType1 = TypeName[Blank Object]
	animalType2 = TypeName[Blank Object]
	object[1].type = TypeName[Blank Object]
	playerCount = 1
	object[10].type = TypeName[Ending Setup]
	object[10].priority = PRIORITY_ACTIVE
	object[10].value18 = 1
	object[10].value19 = 2
	object[10].value2 = 256
	object[0].state = PlayerObject_Blank
	object[0].controlLock = -1
	stage.pauseEnabled = 0
end event

event RSDKDraw
	DrawSprite(0)
end event

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