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

//-------Aliases-------//
private alias 40 : TYPE_SCZSETUP


// Static Values
public value SCZSetup_value33 = 0;
public value SCZSetup_value34 = 0;
public value SCZSetup_value35 = 0;
public value SCZSetup_value36 = 0;
public value SCZSetup_value37 = 0;
public value SCZSetup_value38 = 0;
public value SCZSetup_value39 = 0;
public value SCZSetup_value40 = 0;

// Tables
public table SCZSetup_table38
	0xE0E040, 0xE0A020, 0xE06000, 0xC02000, 0xE0E0E0, 0xE0E040, 0xE0A020, 0xE06000, 0xE0E040, 0xE0A020, 0xE06000, 0xC02000, 0xE0A020, 0xE06000, 0xC02000, 0x802000
end table

event ObjectMain
	object.value1++
	if object.value1 == 2
		object.value1 = 0
		GetTableValue(temp0, object.value2, SCZSetup_table38)
		SetPaletteEntry(0, 167, temp0)
		object.value2++
		object.value2 &= 15
		GetTableValue(temp0, object.value2, SCZSetup_table38)
		SetPaletteEntry(0, 168, temp0)
		object.value2++
		object.value2 &= 15
		GetTableValue(temp0, object.value2, SCZSetup_table38)
		SetPaletteEntry(0, 169, temp0)
		object.value2++
		object.value2 &= 15
		GetTableValue(temp0, object.value2, SCZSetup_table38)
		SetPaletteEntry(0, 170, temp0)
		object.value2++
		object.value2 &= 15
	end if
	screen.cameraStyle = 0
	object[0].gravity = GRAVITY_AIR
	object[0].tileCollisions = 0
	switch object.state
	case 0
		SCZSetup_value33 += SCZSetup_value35
		temp0 = SCZSetup_value33
		temp0 >>= 16
		stage.curXBoundary1 = temp0
		temp0 += screen.xsize
		stage.curXBoundary2 = temp0
		if stage.curXBoundary1 >= 0x1180
			object.state++
		end if
		break
	case 1
		SCZSetup_value35 = -0x10000
		SCZSetup_value36 = 0x10000
		SCZSetup_value33 += SCZSetup_value35
		SCZSetup_value34 += SCZSetup_value36
		temp0 = SCZSetup_value33
		temp0 >>= 16
		stage.curXBoundary1 = temp0
		temp0 += screen.xsize
		stage.curXBoundary2 = temp0
		temp0 = SCZSetup_value34
		temp0 >>= 16
		stage.curYBoundary1 = temp0
		temp0 += screen.ysize
		stage.curYBoundary2 = temp0
		temp0 <<= 16
		stage.deathBoundary = temp0
		if stage.curYBoundary1 >= 0x500
			object.state++
		end if
		break
	case 2
		SCZSetup_value35 = 0x10000
		SCZSetup_value36 = 0
		SCZSetup_value33 += SCZSetup_value35
		temp0 = SCZSetup_value33
		temp0 >>= 16
		stage.curXBoundary1 = temp0
		temp0 += screen.xsize
		stage.curXBoundary2 = temp0
		if stage.curXBoundary1 >= 0x1488
			object[0].controlMode = -1
			object[0].jumpPress = 0
			object[0].jumpHold = 0
			object[0].left = 0
			object[0].right = 1
			object[0].up = 0
			object[0].down = 0
			hParallax[0].scrollSpeed = 0
			object.state++
		end if
		break
	case 3
		SCZSetup_value35 = 0
		temp0 = stage.curXBoundary2
		temp0 -= 32
		temp0 <<= 16
		if object[0].xpos > temp0
			object.state++
		end if
		break
	case 4
		object[0].yvel = 0
		object.value0 += 4
		music.volume -= 2
		SetScreenFade(0, 0, 0, object.value0)
		if object.value0 == 320
			fadeColor = 0
			object.value0 = 0
			starPostID = 0
			object.direction = FLIP_NONE
			stage.listPos++
			if options.gameMode == 1
				arrayPos1 = options.saveSlot
				arrayPos1 <<= 3
				arrayPos1 += 1000
				if stage.player2Enabled == 1
					switch stage.playerListPos
						case 0
							saveRAM[arrayPos1] = 3
							break
						case 2
							saveRAM[arrayPos1] = 4
							break
					end switch
				else
					saveRAM[arrayPos1] = stage.playerListPos
				end if
				arrayPos1++
				saveRAM[arrayPos1] = player.lives
				arrayPos1++
				saveRAM[arrayPos1] = player.score
				arrayPos1++
				saveRAM[arrayPos1] = player.scoreBonus
				arrayPos1++
				temp0 = stage.listPos
				temp0++
				if saveRAM[arrayPos1] != 22
					saveRAM[arrayPos1] = temp0
				end if
				arrayPos1++
				saveRAM[arrayPos1] = specialStage.emeralds
				arrayPos1++
				saveRAM[arrayPos1] = specialStage.listPos
				arrayPos1++
				saveRAM[arrayPos1] = player.continues
				WriteSaveRAM()
			end if
			if options.gameMode == 2
				timeAttack.result = stage.seconds
				timeAttack.result *= 100
				temp0 = stage.minutes
				temp0 *= 0x1770
				timeAttack.result += temp0
				timeAttack.result += stage.milliSeconds
				stage.listPos--
				CallNativeFunction2(SetLeaderboard, stage.listPos, timeAttack.result)
				engine.state = 8
			else
				temp0 = engine.trialMode
				if stage.listPos >= stage.listSize
					temp0 = 1
				end if
				if temp0 == 0
					LoadStage()
				else
					stage.activeList = PRESENTATION_STAGE
					stage.listPos = 0
					LoadStage()
				end if
			end if
		end if
		break
	end switch
	if object.state < 3
		foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
			temp0 = object[currentPlayer].collisionRight
			temp0 <<= 16
			temp0 += object[currentPlayer].xpos
			temp1 = stage.curXBoundary2
			temp1 <<= 16
			if temp0 > temp1
				object[currentPlayer].xvel = 0
				object[currentPlayer].speed = 0
				object[currentPlayer].xpos = temp1
				temp0 = object[currentPlayer].collisionRight
				temp0 <<= 16
				object[currentPlayer].xpos -= temp0
			end if
		next
	end if
	SCZSetup_value37 = SCZSetup_value38
	SCZSetup_value37 >>= 1
	SCZSetup_value38++
	SCZSetup_value38 %= 12
	SCZSetup_value39 = SCZSetup_value40
	SCZSetup_value39 >>= 1
	SCZSetup_value40++
	SCZSetup_value40 %= 6
end event


event ObjectStartup
	SetMusicTrack("SkyChase.ogg", 0, 0x3066D)
	animalType1 = TypeName[Cucky]
	animalType2 = TypeName[Tocky]
	object[10].type = TypeName[SCZ Setup]
	object[10].priority = PRIORITY_ACTIVE
	SCZSetup_value33 = screen.xcenter
	SCZSetup_value33 *= -0x10000
	SCZSetup_value33 += object[0].xpos
	SCZSetup_value34 = 0
	SCZSetup_value35 = 0x10000
	SCZSetup_value36 = 0
	SCZSetup_value37 = 0
	SCZSetup_value38 = 0
	SCZSetup_value39 = 0
	SCZSetup_value40 = 0
	stage.curYBoundary2 = 240
	stage.deathBoundary = 0xF00000
	hParallax[0].scrollSpeed = 0x8000
end event

event RSDKDraw
	DrawSprite(0)
end event

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