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

//-------Aliases-------//
private alias 3 : TYPE_STLOGO

// Function declarations
reserve function Sega_CheckButtonCheat
reserve function STLogo_DrawAbsolute

// Tables
public table STLogo_table0
	4, 4, 4, 4, 4, 4, 4, 7, 2, 2, 3, 4, 4, 4, 4
end table

public table STLogo_table1
	4, 4, 4, 4, 4, 4, 7, 2, 2, 2, 3, 4, 4, 4
end table

function STLogo_DrawAbsolute
	if object.value31 < 34
		object.value31 = 34
	else
		if object.value31 < 55
			object.value30++
			object.value30 %= 2
		else
			object.value30++
			object.value30 %= 6
		end if
		
		if object.value30 == 0
			object.value31++
		end if
	end if
	
	if object.value31 >= 90
		object.value31 = 55
	end if
	temp0 = object.value31

	if temp0 > 66
		temp0 = 66
	end if
	
	temp1 = screen.ycenter
	temp1 += 61
	
	DrawSpriteScreenXY(temp0, screen.xcenter, temp1)
end function

function Sega_CheckButtonCheat
	temp0 = 0
	if inputPress.up == 1
		temp0 = 1
	end if
	if inputPress.down == 1
		temp0 = 2
	end if
	if inputPress.left == 1
		temp0 = 3
	end if
	if inputPress.right == 1
		temp0 = 4
	end if
	if inputPress.buttonA == 1
		temp0 = 5
	end if
	if inputPress.buttonB == 1
		temp0 = 6
	end if
	if inputPress.buttonC == 1
		temp0 = 7
	end if
	switch object.value3
	case 0
		if temp0 == 1
			object.value3++
		else
			if temp0 != 0
				object.value3 = 0
			end if
		end if
		break
	case 1
		if temp0 == 1
			object.value3++
		else
			if temp0 != 0
				object.value3 = 0
			end if
		end if
		break
	case 2
		if temp0 == 1
			object.value3++
		else
			if temp0 != 0
				object.value3 = 0
			end if
		end if
		break
	case 3
		if temp0 == 2
			object.value3++
		else
			if temp0 != 0
				object.value3 = 0
			end if
		end if
		break
	case 4
		if temp0 == 2
			object.value3++
		else
			if temp0 != 0
				object.value3 = 0
			end if
		end if
		break
	case 5
		if temp0 == 2
			object.value3++
		else
			if temp0 != 0
				object.value3 = 0
			end if
		end if
		break
	case 6
		if temp0 == 3
			object.value3++
		else
			if temp0 != 0
				object.value3 = 0
			end if
		end if
		break
	case 7
		if temp0 == 4
			object.value3++
		else
			if temp0 != 0
				object.value3 = 0
			end if
		end if
		break
	case 8
		if temp0 == 3
			object.value3++
		else
			if temp0 != 0
				object.value3 = 0
			end if
		end if
		break
	case 9
		if temp0 == 4
			object.value3++
			object.value3 = 0
			options.stageSelectFlag = 1
			PlaySfx(SfxName[Ring L], 0)
		else
			if temp0 != 0
				object.value3 = 0
			end if
		end if
		break
	end switch

	switch object.value17
	case 0
		if temp0 == 3
			object.value17++
		else
			if temp0 != 0
				object.value17 = 0
			end if
		end if
		break
	case 1
		if temp0 == 3
			object.value17++
		else
			if temp0 != 0
				object.value17 = 0
			end if
		end if
		break
	case 2
		if temp0 == 3
			object.value17++
		else
			if temp0 != 0
				object.value17 = 0
			end if
		end if
		break
	case 3
		if temp0 == 4
			object.value17++
		else
			if temp0 != 0
				object.value17 = 0
			end if
		end if
		break
	case 4
		if temp0 == 4
			object.value17++
		else
			if temp0 != 0
				object.value17 = 0
			end if
		end if
		break
	case 5
		if temp0 == 4
			object.value17++
		else
			if temp0 != 0
				object.value17 = 0
			end if
		end if
		break
	case 6
		if temp0 == 1
			object.value17++
		else
			if temp0 != 0
				object.value17 = 0
			end if
		end if
		break
	case 7
		if temp0 == 1
			object.value17++
		else
			if temp0 != 0
				object.value17 = 0
			end if
		end if
		break
	case 8
		if temp0 == 1
			object.value17++
			object.value17 = 0
			saveRAM[284] ^= 1
			switch saveRAM[284]
				case 0
					PlaySfx(SfxName[Hurt], 0)
					break
				case 1
					PlaySfx(SfxName[Ring L], 0)
					break
			end switch			
			WriteSaveRAM()
		else
			if temp0 != 0
				object.value17 = 0
			end if
		end if
		break
	end switch
end function


event ObjectMain

	if inputPress.start == 1
		if object.state < 9
			object.value4 = 160
			object.state += 20
			temp1 = object.entityPos
			temp1++
			ResetObjectEntity(temp1, TypeName[Blank Object], 0, 0, 0)
		end if
	end if
	
	if stage.player2Enabled == 1
		stage.playerListPos = 3
	end if
	if options.gameMode == 0
		if object.state > 2
			CallFunction(Sega_CheckButtonCheat)
		end if
	end if
	switch object.state
	case 0
		if object.value0 == 30
			object[+1].type = TypeName[Twinkle Stars]
			object[+1].priority = PRIORITY_ACTIVE
		end if
		if object.value0 < 60
			object.value0++
		else
			object.value0 = 0
			object.alpha = 256
			object.state++
		end if
		break
	case 1
		if object.alpha > 0
			object.alpha -= 8
		else
			object.state++
		end if
		break
	case 2
		if object.value0 < 32
			object.value0++
		else
			object.value0 = 0
			PlayMusic(0)
			object.state++
		end if
		break
	case 3
		if object.animationTimer < 2
			object.frame = object.value1
			object.frame += 2
			GetTableValue(object.animationTimer, object.value1, STLogo_table0)
			object.value1++
			if object.value1 == 12
				object.frame++
				object.state++
			end if
		else
			object.animationTimer--
		end if
		break
	case 4
		if object.animationTimer < 2
			object.frame = object.value1
			object.frame += 3
			GetTableValue(object.animationTimer, object.value1, STLogo_table0)
			object.value1++
			if object.value1 == 16
				object.animationTimer = 0
				object.state++
			end if
		else
			object.animationTimer--
		end if
		break
	case 5
		if object.value0 < 4
			object.value0++
		else
			object.value0 = 0
			object.state++
		end if
		break
	case 6
		if object.animationTimer < 2
			object.frame = object.value2
			object.frame += 18
			GetTableValue(object.animationTimer, object.value2, STLogo_table1)
			object.value2++
			if object.value2 == 11
				object.frame++
				object.state++
			end if
		else
			object.animationTimer--
		end if
		break
	case 7
		if object.animationTimer < 2
			object.frame = object.value2
			object.frame += 19
			GetTableValue(object.animationTimer, object.value2, STLogo_table1)
			object.value2++
			if object.value2 == 14
				object.animationTimer = 0
				object.state++
			end if
		else
			object.animationTimer--
		end if
		break
	case 8
		if object.value0 < 30
			object.value0++
		else
			object.value0 = 0
			object.alpha = 256
			stage[0].activeLayer = 2
			object.state++
		end if
		break
	case 9
		if object.alpha > 0
			object.alpha -= 12
		else
			object.state++
			object[+1].type = TypeName[Start Message]
			object[+1].priority = PRIORITY_ACTIVE
			object[+1].xpos = screen.xcenter
			object[+1].ypos = 208
			CreateTempObject(TypeName[Shooting Star], 0, object.xpos, object.ypos)
			object[tempObjectPos].drawOrder = 2
			object[tempObjectPos].xpos += 0x1600000
			object[tempObjectPos].ypos -= 0x1000000
			object[tempObjectPos].value0 = 100
			object[tempObjectPos].value0 += object.value4
		end if
		break
	case 10
		object.value0++
		if object.value0 > 7
			tileLayer[2].deformationOffset++
			object.value0 = 0
		end if
		break
	case 20
	case 21
	case 22
		PlayMusic(0)
	case 23
	case 24
	case 25
	case 26
	case 27
	case 28
		object.value1 = 16
		object.value2 = 14
		//object.value0 = 0
		object.alpha = 256
		stage[0].activeLayer = 2
		object.state = 9
		break
	end switch
	temp0 = screen.xcenter
	FlipSign(temp0)
	temp0 += 256
	screen.xoffset = temp0
end event


event ObjectDraw
	switch object.state
	case 0
		ClearScreen(1)
		break
	case 1
		ClearScreen(1)
		DrawSprite(0)
		DrawSprite(1)
		DrawRect(0, 0, screen.xsize, screen.ysize, 0, 0, 0, object.alpha)
		break
	case 2
		ClearScreen(1)
		DrawSprite(0)
		DrawSprite(1)
		break
	case 3
		ClearScreen(1)
		DrawSprite(0)
		DrawSprite(object.frame)
		DrawSprite(1)
		break
	case 4
		ClearScreen(1)
		DrawSprite(0)
		DrawSprite(13)
		DrawSprite(object.frame)
		DrawSprite(1)
		break
	case 5
		ClearScreen(1)
		DrawSprite(0)
		DrawSprite(13)
		DrawSprite(17)
		DrawSprite(1)
		break
	case 6
		ClearScreen(1)
		DrawSprite(0)
		DrawSprite(object.frame)
		DrawSprite(13)
		DrawSprite(17)
		DrawSprite(1)
		break
	case 7
		ClearScreen(1)
		DrawSprite(0)
		DrawSprite(28)
		DrawSprite(object.frame)
		DrawSprite(13)
		DrawSprite(17)
		DrawSprite(1)
		break
	case 8
		ClearScreen(1)
		DrawSprite(0)
		DrawSprite(28)
		DrawSprite(31)
		DrawSprite(13)
		DrawSprite(17)
		DrawSprite(1)
		break
	case 9
		DrawRect(0, 0, screen.xsize, screen.ysize, 224, 224, 224, object.alpha)
		DrawSprite(0)
		DrawSprite(28)
		DrawSprite(31)
		DrawSprite(13)
		DrawSprite(17)
		DrawSprite(1)
		CallFunction(STLogo_DrawAbsolute)
		temp0 = screen.xsize
		temp0 -= 96
		DrawSpriteScreenXY(32, temp0, 216)
		DrawSpriteScreenXY(33, 8, 216)
		break
	case 10
		DrawSprite(0)
		DrawSprite(28)
		DrawSprite(31)
		DrawSprite(13)
		DrawSprite(17)
		DrawSprite(1)	
		CallFunction(STLogo_DrawAbsolute)
		temp0 = screen.xsize
		temp0 -= 96
		DrawSpriteScreenXY(32, temp0, 216)
		DrawSpriteScreenXY(33, 8, 216)
		break
	end switch
end event


event ObjectStartup
	LoadSpriteSheet("Title/Title.gif")
	SetMusicTrack("Titlescreen.ogg", 0, 0)
	arrayPos0 = 256
	while arrayPos0 < 576
		arrayPos1 = arrayPos0
		arrayPos1 -= 256
		Rand(stage[arrayPos1].deformationData2, 4)
		temp0 = arrayPos0
		temp0 &= 1
		if temp0 == 1
			FlipSign(stage[arrayPos1].deformationData2)
		end if
		stage[arrayPos0].deformationData2 = stage[arrayPos1].deformationData2
		arrayPos0++
	loop
	SpriteFrame(-128, -78, 256, 82, 255, 67)
	SpriteFrame(-128, -8, 256, 87, 255, 150)
	SpriteFrame(-21, -19, 72, 40, 1, 66)
	SpriteFrame(-29, -35, 72, 67, 1, 66)
	SpriteFrame(-37, -51, 72, 67, 1, 66)
	SpriteFrame(-39, -61, 72, 67, 1, 66)
	SpriteFrame(-35, -69, 72, 67, 1, 66)
	SpriteFrame(-29, -73, 72, 67, 1, 66)
	SpriteFrame(-25, -74, 72, 67, 1, 66)
	SpriteFrame(-21, -75, 72, 67, 1, 66)
	SpriteFrame(-18, -76, 74, 84, 74, 66) //10
	SpriteFrame(-3, -76, 74, 71, 149, 66)
	SpriteFrame(0, -79, 71, 74, 1, 134)
	SpriteFrame(0, -79, 71, 74, 74, 151)
	SpriteFrame(45, -49, 30, 43, 149, 138)
	SpriteFrame(43, -47, 30, 43, 149, 138)
	SpriteFrame(40, -46, 30, 43, 149, 138)
	SpriteFrame(41, -47, 30, 43, 149, 138)
	SpriteFrame(-49, -24, 56, 64, 1, 1)
	SpriteFrame(-53, -40, 56, 64, 1, 1)
	SpriteFrame(-58, -52, 56, 64, 1, 1) //20
	SpriteFrame(-60, -58, 56, 64, 1, 1)
	SpriteFrame(-62, -62, 56, 64, 1, 1)
	SpriteFrame(-63, -63, 56, 64, 1, 1)
	SpriteFrame(-64, -64, 56, 64, 1, 1)
	SpriteFrame(-86, -59, 89, 57, 58, 1)
	SpriteFrame(-80, -64, 88, 61, 149, 1)
	SpriteFrame(-82, -63, 89, 59, 238, 1)
	SpriteFrame(-83, -68, 87, 65, 328, 1)
	SpriteFrame(-9, -22, 16, 19, 417, 1)
	SpriteFrame(-12, -27, 16, 19, 417, 1) //30
	SpriteFrame(-11, -26, 16, 19, 417, 1)
	SpriteFrame(0, 0, 88, 16, 1, 421) //32 Copyrights
	SpriteFrame(0, 8, 136, 8, 90, 420) //33 Team Forever
	
		//Absolute
	
	SpriteFrame(-28, -4, 0, 0, 512, 58) //34 //Blank
	SpriteFrame(-28, -4, 56, 8, 512, 67) //35 //Drawing in
	SpriteFrame(-28, -4, 56, 8, 512, 76) //36
	SpriteFrame(-28, -4, 56, 8, 512, 85) //37
	SpriteFrame(-28, -4, 56, 8, 512, 94) //38
	SpriteFrame(-28, -4, 56, 8, 512, 103) //39
	SpriteFrame(-28, -4, 56, 8, 512, 112) //39
	SpriteFrame(-28, -4, 56, 8, 512, 121) //41
	SpriteFrame(-28, -4, 56, 8, 512, 130) //42
	SpriteFrame(-28, -4, 56, 8, 512, 139) //43
	SpriteFrame(-28, -4, 56, 8, 512, 148) //44
	SpriteFrame(-28, -4, 56, 8, 512, 157) //45
	SpriteFrame(-28, -4, 56, 8, 512, 166) //46
	SpriteFrame(-28, -4, 56, 8, 512, 175) //47
	SpriteFrame(-28, -4, 56, 8, 512, 184) //48
	SpriteFrame(-28, -4, 56, 8, 512, 193) //49
	
	SpriteFrame(-28, -4, 56, 8, 569, 58) //50
	SpriteFrame(-28, -4, 56, 8, 569, 67) //51
	SpriteFrame(-28, -4, 56, 8, 569, 76) //52
	SpriteFrame(-28, -4, 56, 8, 569, 85) //53
	SpriteFrame(-28, -4, 56, 8, 569, 94) //54
	SpriteFrame(-28, -4, 56, 8, 569, 103) //55 //In
	SpriteFrame(-28, -4, 56, 8, 569, 112) //56
	SpriteFrame(-28, -4, 56, 8, 569, 121) //57
	SpriteFrame(-28, -4, 56, 8, 569, 130) //58
	SpriteFrame(-28, -4, 56, 8, 569, 139) //59
	SpriteFrame(-28, -4, 56, 8, 569, 148) //60
	SpriteFrame(-28, -4, 56, 8, 569, 157) //61
	SpriteFrame(-28, -4, 56, 8, 569, 166) //62
	SpriteFrame(-28, -4, 56, 8, 569, 175) //63
	SpriteFrame(-28, -4, 56, 8, 569, 184) //64
	SpriteFrame(-28, -4, 56, 8, 569, 193) //65
	SpriteFrame(-28, -4, 56, 8, 512, 58) //66
	
	
end event

event RSDKDraw
	DrawSprite(0)
end event

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