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

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

private alias object.value13 : reset.done

public alias saveRAM[262] : saved.Title

// Function declarations
reserve function Sega_CheckTouchCheat
reserve function TimesSetUp
reserve function Save_Transfer

function Save_Transfer
	ReadSaveRAM()
	if saveRAM[4] == 0
	
	else
		saveRAM[1000] = saveRAM[0]
		saveRAM[1001] = saveRAM[1]
		saveRAM[1002] = saveRAM[2]
		saveRAM[1003] = saveRAM[3]
		saveRAM[1004] = saveRAM[4]
		saveRAM[1005] = saveRAM[5]
		saveRAM[1006] = saveRAM[6]
		saveRAM[1007] = saveRAM[7]
	end if
	
	
	if saveRAM[12] == 0
	
	else	
		saveRAM[1008] = saveRAM[8]
		saveRAM[1009] = saveRAM[9]
		saveRAM[1010] = saveRAM[10]
		saveRAM[1011] = saveRAM[11]
		saveRAM[1012] = saveRAM[12]
		saveRAM[1013] = saveRAM[13]
		saveRAM[1014] = saveRAM[14]
		saveRAM[1015] = saveRAM[15]
	end if
	
	
	if saveRAM[20] == 0
	
	else	
		saveRAM[1016] = saveRAM[16]
		saveRAM[1017] = saveRAM[17]
		saveRAM[1018] = saveRAM[18]
		saveRAM[1019] = saveRAM[19]
		saveRAM[1020] = saveRAM[20]
		saveRAM[1021] = saveRAM[21]
		saveRAM[1022] = saveRAM[22]
		saveRAM[1023] = saveRAM[23]
	end if
	
	
	if saveRAM[28] == 0
	
	else	
		saveRAM[1024] = saveRAM[24]
		saveRAM[1025] = saveRAM[25]
		saveRAM[1026] = saveRAM[26]
		saveRAM[1027] = saveRAM[27]
		saveRAM[1028] = saveRAM[28]
		saveRAM[1029] = saveRAM[29]
		saveRAM[1030] = saveRAM[30]
		saveRAM[1031] = saveRAM[31]
	end if
	
	WriteSaveRAM()
	PlaySfx(SfxName[Star Post], 0)
end function

function TimesSetUp
	ReadSaveRAM()
	
	//Sonic
	arrayPos1 = 500
	while arrayPos1 <= 518
		if saveRAM[arrayPos1] < 100
			saveRAM[arrayPos1] = 59999
		end if
		if saveRAM[arrayPos1] > 59999
			saveRAM[arrayPos1] = 59999
		end if
		arrayPos1++
	loop
		
	//Tails
	arrayPos1 = 530
	while arrayPos1 <= 548
		if saveRAM[arrayPos1] < 100
			saveRAM[arrayPos1] = 59999
		end if
		if saveRAM[arrayPos1] > 59999
			saveRAM[arrayPos1] = 59999
		end if	
		arrayPos1++
	loop
	
	//Knuckles
	arrayPos1 = 560
	while arrayPos1 <= 578
		if saveRAM[arrayPos1] < 100
			saveRAM[arrayPos1] = 59999
		end if
		if saveRAM[arrayPos1] > 59999
			saveRAM[arrayPos1] = 59999
		end if
		arrayPos1++
	loop	
	
	//Super Sonic
	arrayPos1 = 590
	while arrayPos1 <= 607
		if saveRAM[arrayPos1] < 100
			saveRAM[arrayPos1] = 59999
		end if
		if saveRAM[arrayPos1] > 59999
			saveRAM[arrayPos1] = 59999
		end if
		arrayPos1++
	loop
	saveRAM[608] = 0
	
	if saveRAM[800] < 100
		saveRAM[800] = 59999
	end if
	
	WriteSaveRAM()
end function

function Sega_CheckTouchCheat
	CheckTouchRect(0, 0, screen.xsize, screen.ysize)
	if checkResult == -1
		object.value4 = 0
	end if
	if object.value4 == 0
		temp0 = screen.xcenter
		switch object.value3
		case 0
			temp0 -= 93
			temp1 = temp0
			temp1 += 39
			break
		case 1
			temp0 -= 50
			temp1 = temp0
			temp1 += 42
			break
		case 2
			temp0 -= 6
			temp1 = temp0
			temp1 += 42
			break
		case 3
			temp0 += 36
			temp1 = temp0
			temp1 += 58
			break
		end switch
		CheckTouchRect(temp0, 90, temp1, 150)
		if checkResult > -1
			object.value4 = 1
			object.value3++
			if object.value3 == 4
				PlaySfx(SfxName[Ring L], 0)
				options.stageSelectFlag = 1
				saveRAM[295] = 1
				WriteSaveRam()
			end if
		end if
		temp0 = screen.xcenter
		switch object.value7
		case 0
			temp0 -= 50
			temp1 = temp0
			temp1 += 42
			break
		case 1
			temp0 -= 6
			temp1 = temp0
			temp1 += 42
			break
		case 2
			temp0 -= 6
			temp1 = temp0
			temp1 += 42
			break
		case 3
			temp0 -= 93
			temp1 = temp0
			temp1 += 39
			break
		end switch
		CheckTouchRect(temp0, 90, temp1, 150)
		if checkResult > -1
			object.value4 = 1
			object.value7++
			if object.value7 == 4
			saveRAM[284] ^= 1
			switch saveRAM[284]
				case 0
					PlaySfx(SfxName[Hurt], 0)
					break
				case 1
					PlaySfx(SfxName[Ring L], 0)
					break
			end switch			
			WriteSaveRAM()
			end if
		end if
	end if
	
	
	if object.value4 == 0 //There's a reason we're checking again and not just adding this to the above check. Don't touch this.
		CheckTouchRect(0, 0, screen.xsize, screen.ysize)
		if checkResult > -1
			if object.state < 7
				object.state = 7
				//object.value0 = 0
			end if
		end if
	end if

end function


event ObjectMain
	if reset.done == 0	
		stage.playerListPos = 0
		credits.screen = 0
		stage.debugMode = 0
		options.stageSelectFlag = 0
		options.gameMode = 0
		options.attractMode = 0
		player.lives = 3
		player.continues = 0
		player.score = 0
		player.scoreBonus = 0xC350
		stage.player2Enabled = 0
		starPostID = 0
		specialStage.listPos = 0
		specialStage.emeralds = 0
		specialStage.nextZone = 0
		
		CallFunction(TimesSetUp)
		
		reset.done = 1
	end if
	
	if inputPress.start == 1
		if object.state < 7
			object.state = 7
			//object.value0 = 0
		end if
	end if
	if inputDown.down == 1
		object.value14++
		if object.value14 > 180
			ResetObjectEntity(object.entityPos, TypeName[Control Test], 0, object.xpos, object.ypos)
		end if
	else
		object.value14 = 0
	end if
	
	if inputPress.up == 1
		object.value16++
		if object.value16 == 5
			CallFunction(Save_Transfer)
		end if
	end if
	
	switch object.state
	case 0
		object.alpha = 0
		object.inkEffect = INK_ALPHA
		object.value0 = 320
		SetScreenFade(0, 0, 0, object.value0)
		object.state++
		break
	case 1
		if object.value0 > 0
			object.value0 -= 8
		else
			object.direction = FLIP_X
			object.alpha = 256
			object.value2 = 256
			object.state++
		end if
		SetScreenFade(0, 0, 0, object.value0)
		break
	case 2
		object.frame++
		object.frame &= 3
		if object.value2 > -320
			object.value2 -= 32
		else
			object.direction = FLIP_NONE
			object.state++
		end if
		break
	case 3
		if object.alpha > -64
			object.alpha -= 16
		else
			object.state++
		end if
		break
	case 4
		object.frame++
		object.frame &= 3
		if object.value2 < 320
			object.value2 += 32
		else
			object.alpha = 256
			object.state++
		end if
		break
	case 5
		if object.alpha > -64
			object.alpha -= 16
		else
			object.state++
		end if
		break
	case 6
		object.value0++
		if object.value0 == 160
			object.value0 = 0
			object.state = 7
		end if
		if object.value0 == 2
			PlaySfx(SfxName[Sega Chant], 0)
		end if
		CallFunction(Sega_CheckTouchCheat)
		break
	case 7
		if object.value0 < 256
			object.value0 += 8
			SetScreenFade(0, 0, 0, object.value0)
		else
			if saved.Title == 1
				ResetObjectEntity(object.entityPos, TypeName[K Logo], 0, object.xpos, object.ypos)
			else
				ResetObjectEntity(object.entityPos, TypeName[ST Screen], 0, object.xpos, object.ypos)
			end if
			SetScreenFade(0, 0, 0, 255)
		end if
		break
	end switch
	
	temp1 = inputDown.buttonX
	temp1 &= inputDown.buttonZ
	if temp1 == 1
		object.value17++
		if object.value17 == 100
			ResetObjectEntity(object.entityPos, TypeName[Test], 0, 0, 0)
		end if	
	else
		object.value17 = 0
	end if
end event


event ObjectDraw
	DrawRect(0, 0, screen.xsize, screen.ysize, color7, color7, color7, 255)
	switch object.state
	case 2
		temp0 = object.value2
		temp0 += screen.xcenter
		DrawSpriteScreenFX(4, FX_FLIP, temp0, 121)
		DrawSpriteScreenFX(5, FX_FLIP, temp0, 121)
		DrawSpriteScreenFX(6, FX_FLIP, temp0, 121)
		DrawSpriteScreenFX(object.frame, FX_FLIP, temp0, screen.ycenter)
		break
	case 3
		DrawSpriteScreenFX(7, FX_INK, 0, 121)
		DrawSpriteScreenFX(8, FX_INK, 0, 121)
		DrawSpriteScreenFX(9, FX_INK, 0, 121)
		temp0 = object.alpha
		object.alpha = 256
		object.alpha -= temp0
		DrawSpriteScreenFX(10, FX_INK, screen.xcenter, screen.ycenter)
		object.alpha = temp0
		break
	case 4
		temp0 = object.value2
		temp0 += screen.xcenter
		DrawSpriteScreenFX(4, FX_FLIP, temp0, 120)
		DrawSpriteScreenFX(5, FX_FLIP, temp0, 120)
		DrawSpriteScreenFX(6, FX_FLIP, temp0, 120)
		DrawSpriteScreenXY(10, screen.xcenter, screen.ycenter)
		DrawSpriteScreenFX(object.frame, FX_FLIP, temp0, screen.ycenter)
		break
	case 5
		DrawSpriteScreenFX(7, FX_INK, 0, 120)
		DrawSpriteScreenFX(8, FX_INK, 0, 120)
		DrawSpriteScreenFX(9, FX_INK, 0, 120)
		DrawSpriteScreenXY(11, screen.xcenter, screen.ycenter)
		break
	case 6
	case 7
		DrawSpriteScreenXY(11, screen.xcenter, screen.ycenter)
		break
	end switch
end event


event ObjectStartup
	LoadSpriteSheet("Title/Title.gif")
	SpriteFrame(-31, -36, 62, 72, 1, 226)
	SpriteFrame(-31, -36, 62, 72, 64, 226)
	SpriteFrame(-29, -36, 60, 72, 127, 226)
	SpriteFrame(-31, -36, 62, 72, 188, 226)
	SpriteFrame(-192, -35, 256, 70, 1, 299)
	SpriteFrame(-384, -35, 192, 70, 1, 299)
	SpriteFrame(-576, -35, 192, 70, 1, 299)
	SpriteFrame(0, -35, 192, 70, 1, 299)
	SpriteFrame(192, -35, 192, 70, 1, 299)
	SpriteFrame(384, -35, 192, 70, 1, 299)
	SpriteFrame(-93, -29, 188, 58, 323, 297)
	SpriteFrame(-93, -29, 188, 58, 323, 238)
	options.touchControls = 0
end event

event RSDKDraw
	DrawSprite(0)
end event

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