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

//-------Aliases-------//
private alias 6 : TYPE_RING


// Static Values

// Tables
public table Ring_table15
	50, 83, 116, 149, 182, 215, 17, 50
end table

public table Ring_table16
	17, 17, 17, 17, 17, 17, 50, 50
end table


event ObjectMain
	arrayPos0 = scene3D.vertexCount
	arrayPos1 = scene3D.faceCount
	if object.value7 == 1
		faceBuffer[arrayPos1].flag = FACE_TEXTURED_D
		faceBuffer[arrayPos1].a = arrayPos0
		vertexBuffer[arrayPos0].x = object.value11
		vertexBuffer[arrayPos0].y = object.value12
		vertexBuffer[arrayPos0].z = object.value13
		vertexBuffer[arrayPos0].u = object.value14
		vertexBuffer[arrayPos0].v = 50
		arrayPos0++
		faceBuffer[arrayPos1].b = arrayPos0
		vertexBuffer[arrayPos0].x = object.value11
		vertexBuffer[arrayPos0].y = object.value12
		vertexBuffer[arrayPos0].z = object.value13
		temp0 = object[0].ypos
		temp0 -= 0xE00000
		object.scale = object.ypos
		object.scale -= temp0
		if object.scale > 0
			object.scale >>= 14
			object.scale += 0x400
		else
			object.scale = 0x400
		end if
		vertexBuffer[arrayPos0].u = object.scale
		vertexBuffer[arrayPos0].v = object.scale
		arrayPos0++
		faceBuffer[arrayPos1].c = arrayPos0
		vertexBuffer[arrayPos0].x = object.value11
		vertexBuffer[arrayPos0].y = object.value12
		vertexBuffer[arrayPos0].z = object.value13
		vertexBuffer[arrayPos0].u = 17
		vertexBuffer[arrayPos0].v = 16
		arrayPos0++
		faceBuffer[arrayPos1].d = arrayPos0
		vertexBuffer[arrayPos0].x = object.value11
		vertexBuffer[arrayPos0].y = object.value12
		vertexBuffer[arrayPos0].z = object.value13
		arrayPos0++
		arrayPos1++
		scene3D.vertexCount += 4
		scene3D.faceCount++
	end if
	faceBuffer[arrayPos1].flag = FACE_TEXTURED_C
	faceBuffer[arrayPos1].a = arrayPos0
	vertexBuffer[arrayPos0].x = object.value4
	vertexBuffer[arrayPos0].y = object.value5
	vertexBuffer[arrayPos0].z = object.value6
	GetTableValue(vertexBuffer[arrayPos0].u, ringFrame, Ring_table15)
	GetTableValue(vertexBuffer[arrayPos0].v, ringFrame, Ring_table16)
	arrayPos0++
	faceBuffer[arrayPos1].b = arrayPos0
	vertexBuffer[arrayPos0].x = object.value4
	vertexBuffer[arrayPos0].y = object.value5
	vertexBuffer[arrayPos0].z = object.value6
	temp0 = object[0].ypos
	temp0 -= 0xE00000
	object.scale = object.ypos
	object.scale -= temp0
	if object.scale > 0
		object.scale >>= 14
		object.scale += 0x400
	else
		object.scale = 0x400
	end if
	vertexBuffer[arrayPos0].u = object.scale
	vertexBuffer[arrayPos0].v = object.scale
	arrayPos0++
	faceBuffer[arrayPos1].c = arrayPos0
	vertexBuffer[arrayPos0].x = object.value4
	vertexBuffer[arrayPos0].y = object.value5
	vertexBuffer[arrayPos0].z = object.value6
	vertexBuffer[arrayPos0].u = 16
	vertexBuffer[arrayPos0].v = 16
	arrayPos0++
	faceBuffer[arrayPos1].d = arrayPos0
	vertexBuffer[arrayPos0].x = object.value4
	vertexBuffer[arrayPos0].y = object.value5
	vertexBuffer[arrayPos0].z = object.value6
	scene3D.vertexCount += 4
	scene3D.faceCount++
	if object.value3 < object[0].value13
		object.type = TypeName[Blank Object]
	else
		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
					temp0 = object[currentPlayer].value15
					temp0 -= object.value1
					temp1 = temp0
					temp1 *= temp0
					temp0 = object[currentPlayer].value16
					temp0 -= object.value2
					temp2 = temp0
					temp2 *= temp0
					temp1 += temp2
					if temp1 < 0xC40000
						if options.vsMode == 0
							object[currentPlayer].value0++
						else
							if ReceiveValue > -1
								if currentPlayer == 2
									object[currentPlayer].value0++
								end if
							else
								object[currentPlayer].value0++
							end if
						end if
						object.type = TypeName[Ring Sparkle]
						object.animationTimer = 0
						object.frame = 0
						if ringPan == 0
							PlaySfx(SfxName[Ring L], 0)
							SetSfxAttributes(SfxName[Ring L], -1, -100)
							ringPan = 1
						else
							PlaySfx(SfxName[Ring R], 0)
							SetSfxAttributes(SfxName[Ring R], -1, 100)
							ringPan = 0
						end if
					end if
				end if
			end if
		next
	end if
end event


event ObjectStartup
	LoadSpriteSheet("Special/Objects.gif")
	foreach (TypeName[Ring], arrayPos0, ALL_ENTITIES)
		object[arrayPos0].angle = object[arrayPos0].ixpos
		object[arrayPos0].angle -= 448
		object[arrayPos0].angle &= 511
		Sin(object[arrayPos0].value1, object[arrayPos0].angle)
		object[arrayPos0].value1 *= -48
		object[arrayPos0].value1 >>= 1
		Cos(object[arrayPos0].value2, object[arrayPos0].angle)
		object[arrayPos0].value2 *= -48
		object[arrayPos0].value2 >>= 1
		if object[arrayPos0].value2 < -0x400
			object[arrayPos0].value7 = 1
			Sin(object[arrayPos0].value8, object[arrayPos0].angle)
			object[arrayPos0].value8 *= -60
			object[arrayPos0].value8 >>= 1
			Cos(object[arrayPos0].value9, object[arrayPos0].angle)
			object[arrayPos0].value9 *= -60
			object[arrayPos0].value9 >>= 1
			object[arrayPos0].value14 = 116
			if object[arrayPos0].angle > 32
				if object[arrayPos0].angle < 480
					if object[arrayPos0].angle < 256
						object[arrayPos0].value14 = 149
					else
						object[arrayPos0].value14 = 182
					end if
				end if
			end if
		end if
	next
end event

event RSDKDraw
	DrawSprite(0)
end event

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