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

//-------Aliases-------//
private alias 15 : TYPE_CHAOSEMERALD
private alias 6 : palette.rotate.speed

// Function declarations
reserve function ChaosEmerald_Function14

// Static Values

// Tables

function ChaosEmerald_Function14
	MatrixRotateXYZ(MAT_WORLD, object[0].value17, object[0].value18, object[0].value19)
	MatrixTranslateXYZ(MAT_TEMP, object[0].value14, object[0].value15, object[0].value16)
	MatrixMultiply(MAT_WORLD, MAT_TEMP)
	arrayPos0 = scene3D.vertexCount
	arrayPos1 = scene3D.faceCount
	faceBuffer[arrayPos1].flag = FACE_TEXTURED_D
	faceBuffer[arrayPos1].a = arrayPos0
	vertexBuffer[arrayPos0].x = 0
	vertexBuffer[arrayPos0].y = -0x3800
	vertexBuffer[arrayPos0].z = object.value8
	vertexBuffer[arrayPos0].u = 116
	vertexBuffer[arrayPos0].v = 50
	arrayPos2 = arrayPos0
	arrayPos0++
	TransformVertices(MAT_WORLD, arrayPos2, arrayPos0)
	faceBuffer[arrayPos1].b = arrayPos0
	vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x
	vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y
	vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z
	vertexBuffer[arrayPos0].u = 0x600
	vertexBuffer[arrayPos0].v = 0x600
	arrayPos0++
	faceBuffer[arrayPos1].c = arrayPos0
	vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x
	vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y
	vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z
	vertexBuffer[arrayPos0].u = 17
	vertexBuffer[arrayPos0].v = 16
	arrayPos0++
	faceBuffer[arrayPos1].d = arrayPos0
	vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x
	vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y
	vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z
	arrayPos0++
	arrayPos1++
	scene3D.vertexCount += 4
	scene3D.faceCount++
	arrayPos2 = arrayPos0
	arrayPos0++
	faceBuffer[arrayPos1].flag = FACE_SPRITE_3D
	faceBuffer[arrayPos1].a = arrayPos2
	vertexBuffer[arrayPos2].x = 0
	vertexBuffer[arrayPos2].y = object.value7
	vertexBuffer[arrayPos2].z = object.value8
	TransformVertices(MAT_WORLD, arrayPos2, arrayPos0)
	vertexBuffer[arrayPos2].u = 15
	vertexBuffer[arrayPos2].v = 0
	faceBuffer[arrayPos1].b = arrayPos0
	vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x
	vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y
	vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z
	vertexBuffer[arrayPos0].u = object.frame
	vertexBuffer[arrayPos0].v = 0
	arrayPos0++
	faceBuffer[arrayPos1].c = arrayPos0
	vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x
	vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y
	vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z
	vertexBuffer[arrayPos0].u = object.scale
	vertexBuffer[arrayPos0].v = 0
	arrayPos0++
	faceBuffer[arrayPos1].d = arrayPos0
	vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x
	vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y
	vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z
	scene3D.vertexCount += 4
	scene3D.faceCount++
end function


event ObjectMain
	switch object.state
	case 0
		object[11].type = TypeName[Blank Object]
		foreach (TypeName[Player Object], currentPlayer, ACTIVE_ENTITIES)
			temp1 = object.value3
			temp1 -= 0x20000
			temp2 = object.value3
			temp2 += 0x20000
			if object[currentPlayer].value14 > temp1
				if object[currentPlayer].value14 < temp2
					ResetObjectEntity(11, TypeName[Blank Object], 0, 0, 0)
					object.scale = 0
					object.drawOrder = 5
					object.frame = stage.actNum
					object.state++
					if stage.player2Enabled == 1
						temp0 = object[2].value0
						temp0 += object[3].value0
						object[2].controlMode = -1
						object[2].left = 0
						object[2].right = 0
						object[3].controlMode = -1
						object[3].left = 0
						object[3].right = 0
					else
						temp0 = object[2].value0
						object[2].controlMode = -1
						object[2].left = 0
						object[2].right = 0
					end if
					GetTableValue(temp1, SpecialSetup_value3, SpecialSetup_value4)
					if temp0 >= temp1
						object.value9 = 0
					else
						object.value9 = 1
					end if
					object.value8 = 0x14000
				end if
			end if
		next
		if stage.actNum == 7
			GetTableValue(temp0, SpecialSetup_value3, SpecialSetup_value4)
			if object[10].value1 > temp0
				object.value0++
				object.value0 %= palette.rotate.speed
				if object.value0 == 0
					RotatePalette(0, 129, 141, 0)
				end if
			end if
		end if
		break
	case 1
		Sin(object.value7, object.angle)
		object.value7 -= 0x1C00
		object.angle += 12
		object.angle &= 511
		music.volume--
		if object.value9 == 0
			if stage.actNum == 7
				object.value0++
				object.value0 %= palette.rotate.speed
				if object.value0 == 0
					RotatePalette(0, 129, 141, 0)
				end if
			end if
			if object.scale < 512
				object.scale += 4
				object.value8 -= 512
			else
				StopMusic()
				PlaySfx(SfxName[Emerald], 0)
				SpecialSetup_value0 = 1
				object.state++
			end if
		else
			if object.scale < 384
				object.scale += 4
				object.value8 -= 512
			else
				StopMusic()
				CreateTempObject(TypeName[Text Message], 1, 0, 0)
				object[tempObjectPos].drawOrder = 5
				object.state++
			end if
			if object[0].value23 > 4
				if object.animationTimer == 0
					object[0].value23--
				end if
				object.animationTimer++
				object.animationTimer &= 7
			end if
		end if
		CallFunction(ChaosEmerald_Function14)
		break
	case 2
		Sin(object.value7, object.angle)
		object.value7 -= 0x1C00
		object.angle += 12
		object.angle &= 511
		CallFunction(ChaosEmerald_Function14)
		if object.value9 == 1
			if object[0].value23 > 4
				if object.animationTimer == 0
					object[0].value23--
				end if
				object.animationTimer++
				object.animationTimer &= 7
			end if
			if object.scale > 0
				object.scale -= 2
				object.value8 += 256
			end if
		else
			if stage.actNum == 7
				temp0 = object.value0
				temp0 %= palette.rotate.speed
				if temp0 == 0
					RotatePalette(0, 129, 141, 0)
				end if
			end if
		end if
		object.value0++
		if object.value0 == 180
			ResetObjectEntity(20, TypeName[Special Finish], 0, 0, 0)
			object[20].priority = PRIORITY_ACTIVE
		end if
		break
	end switch
end event


event ObjectStartup
	LoadSpriteSheet("Special/Objects.gif")
	SpriteFrame(-12, -4, 24, 8, 313, 165)
	SpriteFrame(-10, -10, 20, 20, 1, 239)
	SpriteFrame(-10, -10, 20, 20, 22, 239)
	SpriteFrame(-10, -10, 20, 20, 43, 239)
	SpriteFrame(-10, -10, 20, 20, 64, 239)
	SpriteFrame(-10, -10, 20, 20, 85, 239)
	SpriteFrame(-10, -10, 20, 20, 106, 239)
	SpriteFrame(-10, -10, 20, 20, 127, 239)
end event

event RSDKDraw
	DrawSprite(0)
end event

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