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

//-------Aliases-------//
private alias 17 : TYPE_CHECKPOINT2PVS

// Function declarations
reserve function Checkpoint2PVS_Function15

// Static Values

// Tables
public table Checkpoint2PVS_table20
	165, 198, 231, 264, 297, 330, 263
end table


function Checkpoint2PVS_Function15
	arrayPos0 = scene3D.vertexCount
	arrayPos1 = scene3D.faceCount
	temp0 = object.value3
	temp0 >>= 22
	temp0 &= 3
	GetTableValue(arrayPos2, temp0, Halfpipe_table13)
	temp0 = 0
	while temp0 < 7
		faceBuffer[arrayPos1].flag = FACE_TEXTURED_C
		faceBuffer[arrayPos1].a = arrayPos0
		vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x
		vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y
		vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z
		GetTableValue(vertexBuffer[arrayPos0].u, object.frame, Checkpoint2PVS_table20)
		vertexBuffer[arrayPos0].v = 256
		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 = 0x800
		vertexBuffer[arrayPos0].v = 0x800
		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 = 16
		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++
		scene3D.vertexCount += 4
		scene3D.faceCount++
		arrayPos1++
		arrayPos2 += 4
		temp0++
	loop
end function


event ObjectMain
	switch object.state
	case 0
		if object.value0 < 16
			object.value0++
		else
			object.value3 >>= 22
			object.value3 <<= 22
			object.value3 += 0x300000
			ResetObjectEntity(11, TypeName[Blank Object], 0, 0, 0)
			object.value0 = 0
			object.state++
		end if
		break
	case 1
		object.animationTimer++
		if object.animationTimer == 4
			object.animationTimer = 0
			object.frame++
			object.frame %= 7
		end if
		CallFunction(Checkpoint2PVS_Function15)
		temp3 = 0
		foreach (TypeName[Player Object], currentPlayer, ACTIVE_ENTITIES)
			if temp3 == 0
				temp1 = object.value3
				temp1 -= 0x20000
				temp2 = object.value3
				temp2 += 0x20000
				if object[currentPlayer].value14 > temp1
					if object[currentPlayer].value14 < temp2
						object.value7 = 80
						object.drawOrder = 5
						if object[2].value0 == object[3].value0
							object.value9 = -1
							CreateTempObject(TypeName[Text Message], 8, 0, 0)
						else
							if object[2].value0 > object[3].value0
								object[2].value19++
								object.value9 = 4
								object.value9 += stage.playerListPos
								if vs.playerID == 0
									CreateTempObject(TypeName[Text Message], 6, 0, 0)
								else
									CreateTempObject(TypeName[Text Message], 7, 0, 0)
								end if
							else
								if ReceiveValue == -1
									object[3].value19++
								end if
								object.value9 = 4
								object.value9 += vs.player2Type
								if vs.playerID == 0
									CreateTempObject(TypeName[Text Message], 7, 0, 0)
								else
									CreateTempObject(TypeName[Text Message], 6, 0, 0)
								end if
							end if
						end if
						switch SpecialSetup_value3
						case 0
							object[2].value20 = object[2].value0
							object[3].value20 = object[3].value0
							break
						case 1
							object[2].value21 = object[2].value0
							object[3].value21 = object[3].value0
							break
						case 2
							object[2].value22 = object[2].value0
							object[3].value22 = object[3].value0
							break
						end switch
						object[tempObjectPos].drawOrder = 5
						PlaySfx(SfxName[Star Post], 0)
						object.value10 = 0
						if object.value9 == 6
							object.value10 += 2
						end if
						temp3 = 1
						object.state++
					end if
				end if
			end if
		next
		break
	case 2
		Sin(object.value7, object.angle)
		object.value7 >>= 7
		object.value7 += 80
		object.angle += 24
		object.angle &= 511
		if object.value0 < 120
			if object.value0 < 20
				CallFunction(Checkpoint2PVS_Function15)
			end if
			object.value0++
		else
			object.value0 = 0
			object.state++
		end if
		break
	case 3
		if object.scale > 0
			object.scale -= 16
		else
			SpecialSetup_value3++
			if SpecialSetup_value3 == 3
				object.state = 5
				object[2].controlMode = -1
				object[3].controlMode = -1
			else
				object.state++
			end if
		end if
		break
	case 4
		if object.value0 < 10
			object.value0++
		else
			CreateTempObject(TypeName[Text Message], 5, 0, 0)
			object[tempObjectPos].drawOrder = 5
			ResetObjectEntity(object.entityPos, TypeName[Blank Object], 0, 0, 0)
		end if
		break
	case 5
		if object.value0 < 320
			object.value0 += 8
			SetScreenFade(248, 248, 248, object.value0)
		else
			object.value0 = 248
			object.state++
			SetScreenFade(248, 248, 248, 255)
		end if
		break
	case 6
		if object.value0 > 0
			object.value0 -= 8
			music.volume -= 5
		else
			if vs.playerID == 0
				vs.checkpoint1P = object[2].value20
				temp0 = object[2].value21
				temp0 <<= 8
				vs.checkpoint1P += temp0
				temp0 = object[2].value22
				temp0 <<= 16
				vs.checkpoint1P += temp0
				vs.checkpoint2P = object[3].value20
				temp0 = object[3].value21
				temp0 <<= 8
				vs.checkpoint2P += temp0
				temp0 = object[3].value22
				temp0 <<= 16
				vs.checkpoint2P += temp0
			else
				vs.checkpoint1P = object[3].value20
				temp0 = object[3].value21
				temp0 <<= 8
				vs.checkpoint1P += temp0
				temp0 = object[3].value22
				temp0 <<= 16
				vs.checkpoint1P += temp0
				vs.checkpoint2P = object[2].value20
				temp0 = object[2].value21
				temp0 <<= 8
				vs.checkpoint2P += temp0
				temp0 = object[2].value22
				temp0 <<= 16
				vs.checkpoint2P += temp0
			end if
			stage.activeList = PRESENTATION_STAGE
			stage.listPos = 3
			StopMusic()
			LoadStage()
		end if
		SetScreenFade(object.value0, object.value0, object.value0, 255)
		break
	end switch
end event


event ObjectDraw
	if object.value9 > -1
		switch object.state
		case 2
			DrawSpriteScreenXY(object.value9, screen.xcenter, 80)
			DrawSpriteScreenXY(object.value10, screen.xcenter, object.value7)
			break
		case 3
			DrawSpriteScreenFX(object.value9, FX_SCALE, screen.xcenter, 80)
			DrawSpriteScreenFX(object.value10, FX_SCALE, screen.xcenter, object.value7)
			break
		end switch
	end if
end event


event ObjectStartup
	LoadSpriteSheet("Special/Objects.gif")
	SpriteFrame(-24, -24, 48, 48, 463, 42)
	SpriteFrame(-24, -24, 48, 48, 366, 155)
	SpriteFrame(-24, -24, 48, 48, 463, 328)
	SpriteFrame(-24, -24, 48, 48, 463, 377)
	SpriteFrame(-48, -24, 96, 48, 415, 122)
	SpriteFrame(-48, -24, 96, 48, 415, 171)
	SpriteFrame(-48, -24, 96, 48, 415, 220)
	if options.vsMode == 1
		foreach (TypeName[Checkpoint], arrayPos0, ALL_ENTITIES)
			object[arrayPos0].type = TypeName[Checkpoint 2PVS]
		next
		foreach (TypeName[Chaos Emerald], arrayPos0, ALL_ENTITIES)
			object[arrayPos0].type = TypeName[Checkpoint 2PVS]
		next
		foreach (TypeName[Rings Reminder], arrayPos0, ALL_ENTITIES)
			object[arrayPos0].type = TypeName[Blank Object]
		next
	end if
end event

event RSDKDraw
	DrawSprite(0)
end event

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