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

//-------Aliases-------//
private alias 11 : TYPE_CHECKPOINT

// Function declarations
reserve function Checkpoint_Function11

// Static Values

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


function Checkpoint_Function11
	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, Checkpoint_table17)
		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(Checkpoint_Function11)
		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
					object.value7 = 80
					object.drawOrder = 5
					if options.vsMode == 0
						object.value9 = 4
						object.value9 += stage.playerListPos
					else
						object.value9 = 4
					end if
					object.state++
					if stage.player2Enabled == 1
						temp0 = object[2].value0
						temp0 += object[3].value0
					else
						temp0 = object[2].value0
					end if
					GetTableValue(temp1, SpecialSetup_value3, SpecialSetup_value4)
					if temp0 >= temp1
						object.value8 = 0
						CreateTempObject(TypeName[Text Message], 0, 0, 0)
						object[tempObjectPos].drawOrder = 5
						PlaySfx(SfxName[Star Post], 0)
					else
						object.value8 = 1
						CreateTempObject(TypeName[Text Message], 1, 0, 0)
						object[tempObjectPos].drawOrder = 5
						PlaySfx(SfxName[Fail], 0)
					end if
					object.value10 = object.value8
					if object.value9 == 6
						object.value10 += 2
					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(Checkpoint_Function11)
			end if
			object.value0++
		else
			object.value0 = 0
			object.state++
		end if
		break
	case 3
		if object.scale > 0
			object.scale -= 16
		else
			if object.value8 == 0
				object.state++
			else
				ResetObjectEntity(object.entityPos, TypeName[Blank Object], 0, 0, 0)
				ResetObjectEntity(20, TypeName[Special Finish], 0, 0, 0)
				object[20].priority = PRIORITY_ACTIVE
			end if
		end if
		break
	case 4
		if object.value0 < 10
			object.value0++
		else
			CreateTempObject(TypeName[Text Message], 2, 0, 0)
			object[tempObjectPos].drawOrder = 5
			SpecialSetup_value3++
			GetTableValue(object[tempObjectPos].value4, SpecialSetup_value3, SpecialSetup_value4)
			ResetObjectEntity(object.entityPos, TypeName[Blank Object], 0, 0, 0)
		end if
		break
	end switch
end event


event ObjectDraw
	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 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)
end event

event RSDKDraw
	DrawSprite(0)
end event

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