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

//-------Aliases-------//
private alias 1 : TYPE_CREDITSCONTROL
public alias 256 : GROUP_PLAYERS
public alias 65536 : HITBOX_AUTO
public alias arrayPos6 : currentPlayer
public alias arrayPos7 : playerCount

public alias saveRAM[257] : saved.spindash
public alias saveRAM[258] : saved.speedCap
public alias saveRAM[259] : saved.airSpeedCap
public alias saveRAM[260] : saved.spikeBehavior
public alias saveRAM[261] : saved.shieldType
public alias saveRAM[262] : saved.superStates
public alias saveRAM[263] : saved.Jumplock
public alias saveRAM[264] : saved.Supermusic
public alias saveRAM[265] : saved.Dropdash
public alias saveRAM[266] : saved.Instashield
public alias saveRAM[267] : saved.Peelout
public alias saveRAM[268] : saved.FlightCancel
public alias saveRAM[269] : saved.SonicMaxDash
public alias saveRAM[270] : saved.Speen
public alias saveRAM[271] : saved.Supercancel
public alias saveRAM[272] : saved.Drowning
public alias saveRAM[273] : saved.Timer
public alias saveRAM[274] : saved.region
public alias saveRAM[275] : saved.UFO
public alias saveRAM[276] : saved.rotate
public alias saveRAM[277] : saved.invincibilityType
public alias saveRAM[280] : saved.gogoplus
public alias saveRAM[281] : saved.lives
public alias saveRAM[282] : saved.bubble

public alias saveRAM[297] : saved.TailsMaxDash
public alias saveRAM[298] : saved.KnuxMaxDash
public alias saveRAM[299] : saved.AmyMaxDash



event ObjectMain
	switch object.state
	case 0
		object.value0 = 320
		SetScreenFade(0, 0, 0, object.value0)
		object.state++
		if credits.screen == 0
			PlayMusic(0)
		end if
		break
	case 1
		if object.value0 > 0
			object.value0 -= 8
		else
			object.alpha = 128
			object.state++
		end if
		SetScreenFade(0, 0, 0, object.value0)
		break
	case 2
		object.value0++
		if object.value0 == 136
			object.value0 = 0
			object.state++
		end if
		break
	case 3
		if object.value0 < 256
			object.value0 += 8
			SetScreenFade(0, 0, 0, object.value0)
		else
			object.state = 0
			credits.screen++
			credits.screen %= 11
			temp0 = credits.screen
			temp0 <<= 8
			screen.yoffset = temp0
			options.attractMode = 1
			switch credits.screen
			case 1
			case 8
				stage.activeList = REGULAR_STAGE
				stage.listPos = 0
				LoadStage()
				break
			case 2
				stage.activeList = REGULAR_STAGE
				stage.listPos = 4
				LoadStage()
				break
			case 3
				stage.activeList = REGULAR_STAGE
				stage.listPos = 8
				LoadStage()
				break
			case 4
				stage.activeList = REGULAR_STAGE
				stage.listPos = 11
				LoadStage()
				break
			case 5
				stage.activeList = REGULAR_STAGE
				stage.listPos = 14
				LoadStage()
				break
			case 6
				stage.activeList = REGULAR_STAGE
				stage.listPos = 15
				LoadStage()
				break
			case 7
				stage.activeList = REGULAR_STAGE
				stage.listPos = 16
				LoadStage()
				break
			case 10
				foreach (TypeName[Blank Object], arrayPos0, ALL_ENTITIES)
					object[arrayPos0].type = TypeName[Credits Eggman]
				next
				object.state = 4
				if saved.superStates == 0
					if specialStage.emeralds >= 63
						screen.yoffset = 0xA00
						//stage.activeList = PRESENTATION_STAGE
						//stage.listPos = 5
						//LoadStage()
					else
						screen.yoffset = 0x900
					end if
				else
					if specialStage.emeralds >= 127
						screen.yoffset = 0xA00
						//stage.activeList = PRESENTATION_STAGE
						//stage.listPos = 5
						//LoadStage()
					else
						screen.yoffset = 0x900
					end if
				end if
				break
			case 9
				screen.yoffset = 0xA00
				foreach (TypeName[Credits Eggman], arrayPos0, ALL_ENTITIES)
					object[arrayPos0].type = TypeName[Blank Object]
				next
				break
			end switch
			SetScreenFade(0, 0, 0, 255)
		end if
		break
	case 4
		if object.value0 > 0
			object.value0 -= 8
		else
			object.alpha = 128
			object.state++
		end if
		SetScreenFade(0, 0, 0, object.value0)
		break
	case 5
		object.value0++
		if object.value0 == 0x4B0
			object.value0 = 0
			object.state++
		end if
		if inputPress.start == 1
			object.value0 = 0
			object.state = 6
		end if
		if inputPress.buttonA == 1
			object.value0 = 0
			object.state = 6
		end if
		if inputPress.buttonB == 1
			object.value0 = 0
			object.state = 6
		end if
		if inputPress.buttonC == 1
			object.value0 = 0
			object.state = 6
		end if
		break
	case 6
		if object.value0 < 256
			object.value0 += 8
			SetScreenFade(0, 0, 0, object.value0)
		else
			stage.activeList = PRESENTATION_STAGE
			stage.listPos = 0
			StopMusic()
			options.attractMode = 0
			SetScreenFade(0, 0, 0, 255)
			LoadStage()
		end if
		break
	end switch
	temp0 = screen.xcenter
	FlipSign(temp0)
	temp0 += 256
	screen.xoffset = temp0
	
	if inputPress.start == 1
		if object.state < 6
			object.state = 6
		end if
	end if
end event

event ObjectDraw
	//temp0 = credits.screen
	//temp0--
	//if temp0 >= 0
		DrawSpriteScreenXY(credits.screen, screen.xcenter, screen.ycenter)
	//end if

	if credits.screen == 9
		switch stage.playerlistPos
		case 0
			temp2 = screen.xcenter
			temp3 = screen.ycenter
			temp4 = screen.xcenter
			temp5 = screen.ycenter
			if saved.superStates == 0
				if specialStage.emeralds >= 63
					temp0 = 12
				else
					temp0 = 16
				end if
			else
				if specialStage.emeralds >= 127
					temp0 = 12
				else
					temp0 = 16
				end if
			end if
			if recGoggles == 5

				//animate
				object.value10++
				if object.value10 == 20
					object.value10 = 0
					object.value11++
					object.value11 %= 2
				end if
				temp0 = 14
				temp0 += object.value11

				//y movin
				object.value12++
				if object.value12 == 10
					object.value12 = 0
					object.value13++
				end if
				temp3 -= object.value13

				//x movin
				object.value14++
				if object.value14 == 60
					object.value14 = 0
					if object.value16 == 0
						object.value15 += 1
						object.value16 = 1
					else
						object.value15 -= 1
						object.value16 = 0
					end if
				end if
				temp2 += object.value15

			end if
			temp1 = 10
			break
		case 1
			temp2 = screen.xcenter
			temp3 = screen.ycenter
			temp4 = screen.xcenter
			temp5 = screen.ycenter
			if saved.superStates == 0
				if specialStage.emeralds >= 63
					temp0 = 17
					temp1 = 10
				else
					temp0 = 18
					object.value10++
					if object.value10 == 10
						object.value10 = 0
						object.value11++
						object.value11 %= 2
					end if
					temp1 = 19
					temp1 += object.value11

					object.value12++
					if object.value12 == 10
						object.value12 = 0
						object.value13++
					end if
					temp2 += object.value13
					temp4 += object.value13
				end if
			else
				if specialStage.emeralds >= 127
					temp0 = 17
					temp1 = 10
				else
					temp0 = 18
					object.value10++
					if object.value10 == 10
						object.value10 = 0
						object.value11++
						object.value11 %= 2
					end if
					temp1 = 19
					temp1 += object.value11

					object.value12++
					if object.value12 == 15
						object.value12 = 0
						object.value13++
					end if
					temp2 += object.value13
					temp4 += object.value13
				end if
			end if
			break
		case 2
			temp2 = screen.xcenter
			temp3 = screen.ycenter
			temp4 = screen.xcenter
			temp5 = screen.ycenter
			if saved.superStates == 0
				if specialStage.emeralds >= 63
					temp0 = 24
					object.value10++
					if object.value10 == 10
						object.value10 = 0
						object.value11++
						object.value11 %= 2
					end if
					temp0 += object.value11
					DrawSpriteScreenXY(26, 185, 106)
					DrawSpriteScreenXY(27, 255, 113)
					DrawSpriteScreenXY(28, 155, 109)
					temp2 -= 8
					temp3 -= 40
					temp4 -= 8
					temp5 -= 40
				else
					temp0 = 22
					object.value10++
					if object.value10 == 10
						object.value10 = 0
						object.value11++
						object.value11 %= 2
					end if
				end if
			else
				if specialStage.emeralds >= 127
					temp0 = 24
					object.value10++
					if object.value10 == 10
						object.value10 = 0
						object.value11++
						object.value11 %= 2
					end if
					temp0 += object.value11
					DrawSpriteScreenXY(26, 185, 106)
					DrawSpriteScreenXY(27, 255, 113)
					DrawSpriteScreenXY(28, 155, 109)
					temp2 -= 8
					temp3 -= 40
					temp4 -= 8
					temp5 -= 40
				else
					temp0 = 22
					object.value10++
					if object.value10 == 10
						object.value10 = 0
						object.value11++
						object.value11 %= 2
					end if
					temp0 += object.value11
				end if
			end if
			break
		case 3
		case 4 
			temp2 = -200
			temp3 = screen.ycenter
			temp4 = -200
			temp5 = screen.ycenter
			temp0 = 18
			object.value10++
			if object.value10 == 5
				object.value10 = 0
				object.value11++
				object.value11 %= 2
			end if
			temp1 = 19
			temp1 += object.value11

			object.value13 += 5
			temp2 += object.value13
			temp4 += object.value13

			object.value14++
			if object.value14 == 3
				object.value14 = 0
				object.value15++
				object.value15 %= 4
			end if
			temp6 = object.value15
			if stage.playerlistPos == 3
				temp6 += 29
				DrawSpriteScreenXY(temp6, temp2, temp3)
			else
				temp6 += 33
				DrawSpriteScreenXY(temp6, temp2, 113)			
			end if
			break
		case 7
			temp2 = screen.xcenter
			temp3 = screen.ycenter
			temp4 = screen.xcenter
			temp5 = screen.ycenter
			if saved.superStates == 0
				if specialStage.emeralds >= 63
					object.value10++
					if object.value10 == 30
						object.value10 = 0
						object.value11++
						object.value11 %= 4
					end if
					temp0 = 39
					temp0 += object.value11

					object.value12++
					if object.value12 == 10
						object.value12 = 0
						object.value13++
					end if
					temp2 += object.value13
					temp2 -= 200
					DrawSpriteScreenXY(43, temp2, temp3)
				else
					object.value10++
					if object.value10 == 30
						object.value10 = 0
						object.value11++
						object.value11 %= 2
					end if
					temp0 = 37
					temp0 += object.value11
				end if
			else
				if specialStage.emeralds >= 127
					object.value10++
					if object.value10 == 30
						object.value10 = 0
						object.value11++
						object.value11 %= 4
					end if
					temp0 = 39
					temp0 += object.value11

					object.value12++
					if object.value12 == 10
						object.value12 = 0
						object.value13++
					end if
					temp2 += object.value13
					temp2 -= 200
					DrawSpriteScreenXY(43, temp2, temp3)
				else
					object.value10++
					if object.value10 == 30
						object.value10 = 0
						object.value11++
						object.value11 %= 2
					end if
					temp0 = 37
					temp0 += object.value11
				end if
			end if
			break
		case 8
			temp2 = screen.xcenter
			temp3 = screen.ycenter
			temp4 = screen.xcenter
			temp5 = screen.ycenter
			if saved.superStates == 0
				if specialStage.emeralds >= 63
					object.value10++
					if object.value10 == 30
						object.value10 = 0
						object.value11++
						object.value11 %= 4
					end if
					temp0 = 39
					temp0 += object.value11

					object.value12++
					if object.value12 == 10
						object.value12 = 0
						object.value13++
					end if
					temp2 += object.value13
					temp2 -= 200
					DrawSpriteScreenXY(43, temp2, temp3)
				else
					temp0 = 44
				end if
			else
				if specialStage.emeralds >= 127
					object.value10++
					if object.value10 == 30
						object.value10 = 0
						object.value11++
						object.value11 %= 4
					end if
					temp0 = 39
					temp0 += object.value11

					object.value12++
					if object.value12 == 10
						object.value12 = 0
						object.value13++
					end if
					temp2 += object.value13
					temp2 -= 200
					DrawSpriteScreenXY(43, temp2, temp3)
				else
					temp0 = 44
				end if
			end if
			break
		end switch

		DrawSpriteScreenXY(temp0, temp2, temp3)
		DrawSpriteScreenXY(21, temp4, temp5)
		DrawSpriteScreenXY(temp1, temp4, temp5)
	end if
end event

event ObjectStartup
	ReadSaveRAM()
	SetMusicTrack("Credits.ogg", 0, 0)
	temp0 = credits.screen
	temp0 <<= 8
	screen.yoffset = temp0
	foreach (TypeName[Credits Control], arrayPos0, ALL_ENTITIES)
		object[arrayPos0].priority = PRIORITY_ACTIVE
	next
	player.score = 0
	
	if stage.debugMode == 1
		specialStage.emeralds = 0
	end if
	
	//specialStage.emeralds = 127
	LoadSpriteSheet("Ending/CreditsText.gif")
	SpriteFrame(-120, -8, 239, 16, 1, 1) //0
	SpriteFrame(-128, -40, 210, 64, 1, 18) //1
	SpriteFrame(-128, -40, 151, 64, 1, 83) //2
	SpriteFrame(-120, -40, 239, 64, 1, 148) //3
	SpriteFrame(-96, -48, 183, 96, 1, 213) //4
	SpriteFrame(-120, -40, 244, 64, 1, 310) //5
	SpriteFrame(-104, -48, 212, 96, 1, 375) //6
	SpriteFrame(-128, -40, 252, 88, 257, 0) //7
	SpriteFrame(-128, -7, 256, 16, 253, 89) //8
	
	SpriteFrame(0, 0, 0, 0, 0, 0) //9
	SpriteFrame(0, 0, 0, 0, 0, 0) //10
	SpriteFrame(0, 0, 0, 0, 0, 0) //11

	SpriteFrame(-55, -10, 29, 39, 310, 127) //12 sonic thumbs
	SpriteFrame(15, 10, 35, 46, 340, 120) //13 sonic jump
	SpriteFrame(-75, 10, 45, 47, 376, 119) //14 sonic bubble
	SpriteFrame(-75, 10, 45, 47, 422, 119) //15 sonic bubble
	SpriteFrame(-43, -68, 40, 38, 468, 128) //16 soinc sing

	SpriteFrame(-41, -65, 36, 35, 310, 191) //17 Tails Victory
	SpriteFrame(-41, -57, 33, 27, 347, 199) //18 Tails Fly

	SpriteFrame(-47, -62, 32, 9, 347, 179) //19 Tails Flight Tails
	SpriteFrame(-47, -62, 32, 9, 347, 189) //20 Tails Flight Tails

	switch stage.playerlistPos
	case 0
	case 3
		SpriteFrame(-34, -30, 67, 59, 242, 107) //21
		break
	case 1
		SpriteFrame(-34, -30, 67, 59, 242, 167) //21
		break
	case 2
	case 4
		SpriteFrame(-34, -30, 67, 59, 242, 227) //21
		break
	case 7
		SpriteFrame(-34, -30, 67, 59, 246, 310) //21
		break
	case 8
		SpriteFrame(-34, -30, 67, 59, 246, 370) //21
		break
	end switch

	SpriteFrame(-35, -68, 28, 38, 310, 227) //22 chuck
	SpriteFrame(-35, -68, 28, 38, 339, 227) //23 chuck 2

	SpriteFrame(17, 29, 31, 40, 406, 228) //24 wtf is goin on
	SpriteFrame(17, 29, 31, 40, 438, 228) //25 wtf is goin on 2

	SpriteFrame(0, 0, 40, 43, 470, 225) //26 s1f knux
	SpriteFrame(0, 0, 32, 36, 437, 269) //27 s1 ca22 knux
	SpriteFrame(0, 0, 30, 40, 470, 269) //28 s3 knux

	SpriteFrame(20, -48, 33, 35, 1, 472) //29 sonic rocket
	SpriteFrame(17, -48, 36, 35, 35, 472) //30 sonic rocket 2
	SpriteFrame(22, -48, 31, 35, 72, 472) //31 sonic rocket 3
	SpriteFrame(17, -48, 36, 35, 104, 472) //32 sonic rocket 4

	SpriteFrame(-76, 0, 32, 36, 141, 472) //33 knux run
	SpriteFrame(-76, 0, 32, 36, 174, 472) //34 knux run 2
	SpriteFrame(-75, 0, 32, 36, 207, 472) //35 knux run 3
	SpriteFrame(-76, 0, 32, 36, 240, 472) //36 knux run 4

	SpriteFrame(-30, -69, 25, 39, 314, 330) //37 mighty idk
	SpriteFrame(-30, -69, 25, 39, 340, 330) //38 might idk 2

	temp0 = -8
	SpriteFrame(20, temp0, 25, 38, 366, 331) //39 mighty push
	SpriteFrame(14, temp0, 31, 38, 392, 331) //40 mighty push 2
	SpriteFrame(20, temp0, 25, 38, 424, 331) //41 mighty push 3
	SpriteFrame(14, temp0, 31, 38, 450, 331) //42 mighty push 4

	SpriteFrame(45, -18, 48, 48, 314, 281) //43 mighty push 4

	SpriteFrame(-60, 4, 42, 26, 314, 403) //44 ray 

end event

event RSDKDraw
	DrawSprite(0)
end event

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