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

//-------Aliases-------//
private alias 4 : TYPE_PLAYEROBJECT

// Function declarations
reserve function PlayerObject_ProcessP1Inputs
reserve function PlayerObject_ProcessP2Inputs
reserve function PlayerObject_HandleGround
reserve function PlayerObject_HandleAir
reserve function PlayerObject_HurtSpin
reserve function PlayerObject_RingLoss
reserve function PlayerObject_ProcessDrawing
reserve function PlayerObject_Process2PVSPlayer

// Static Values
public value PlayerObject_value29 = 0;
public value PlayerObject_value30 = 0;
public value PlayerObject_value31 = 0;
public value PlayerObject_value32 = 0;
public value PlayerObject_value33 = 0;
public value PlayerObject_value34 = 0;
public value PlayerObject_value27 = 0;
public value PlayerObject_value25 = 0;
public value PlayerObject_value26 = 0;
public value PlayerObject_value24 = 0;
public value PlayerObject_value23 = 0;
public value PlayerObject_value28 = 0;
public value PlayerObject_value22 = 0;
private value value0x1D19 = 0;
private value value0x1D1A = 0;
private value value0x1D1B = 0;
private value value0x1D1C = 0;
private value value0x1D1D = 0;
private value value0x1D1E = 0;
private value value0x1D1F = 0;

// Tables
public table PlayerObject_SonicSuperAltPal4
	-128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -127, -127, -127, -127
	-127, -127, -127, -127, -126, -126, -126, -126, -126, -126, -125, -125, -125, -125, -124, -124
	-124, -124, -123, -123, -123, -123, -122, -122, -122, -121, -121, -121, -120, -120, -119, -119
	-119, -118, -118, -117, -117, -116, -116, -116, -115, -115, -114, -114, -113, -112, -112, -111
	-111, -110, -110, -109, -108, -108, -107, -106, -106, -105, -104, -104, -103, -102, -101, -101
	-100, -99, -98, -97, -96, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -85
	-84, -83, -82, -81, -79, -78, -77, -75, -74, -72, -71, -69, -68, -66, -64, -62
	-61, -59, -57, -54, -52, -50, -47, -45, -42, -39, -35, -31, -27, -21, -13, 0
end table

function PlayerObject_ProcessDrawing
	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 = object.value11
	vertexBuffer[arrayPos0].y = object.value12
	vertexBuffer[arrayPos0].z = object.value2
	vertexBuffer[arrayPos0].u = object.value13
	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
	if object.value2 > 0x800
		vertexBuffer[arrayPos0].u = 0x600
		vertexBuffer[arrayPos0].v = 0x600
	else
		vertexBuffer[arrayPos0].u = 0x580
		vertexBuffer[arrayPos0].v = 0x580
	end if
	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++
	if object.visible == 1
		arrayPos2 = arrayPos0
		arrayPos0++
		faceBuffer[arrayPos1].flag = FACE_SPRITE_3D
		faceBuffer[arrayPos1].a = arrayPos2
		vertexBuffer[arrayPos2].x = object.xpos
		vertexBuffer[arrayPos2].x >>= 1
		object.value15 = vertexBuffer[arrayPos2].x
		vertexBuffer[arrayPos2].y = object.ypos
		vertexBuffer[arrayPos2].y >>= 1
		object.value16 = vertexBuffer[arrayPos2].y
		vertexBuffer[arrayPos2].z = object.value2
		TransformVertices(MAT_WORLD, arrayPos2, arrayPos0)
		vertexBuffer[arrayPos2].u = 4
		vertexBuffer[arrayPos2].v = 1
		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 = 512
		vertexBuffer[arrayPos0].v = object.rotation
		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++
		if object.value4 == 16
			if object.animation == 0
				arrayPos0++
				arrayPos1++
				faceBuffer[arrayPos1].flag = FACE_SPRITE_3D
				faceBuffer[arrayPos1].a = arrayPos0
				vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x
				vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y
				vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z
				vertexBuffer[arrayPos0].u = 4
				vertexBuffer[arrayPos0].v = 1
				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 = object.value17
				vertexBuffer[arrayPos0].u >>= 2
				vertexBuffer[arrayPos0].u += 48
				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 = 512
				vertexBuffer[arrayPos0].v = object.rotation
				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 if
		end if
	end if
	if object.value23 > 0
		arrayPos0++
		arrayPos1++
		faceBuffer[arrayPos1].flag = FACE_SPRITE_3D
		faceBuffer[arrayPos1].a = arrayPos0
		vertexBuffer[arrayPos0].x = vertexBuffer[arrayPos2].x
		vertexBuffer[arrayPos0].y = vertexBuffer[arrayPos2].y
		vertexBuffer[arrayPos0].z = vertexBuffer[arrayPos2].z
		vertexBuffer[arrayPos0].u = 4
		vertexBuffer[arrayPos0].v = 1
		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 = object.value23
		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 = 512
		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 if
end function


function PlayerObject_ProcessP1Inputs
	if options.attractMode == 0
		if object.controlMode == 0
			CheckTouchRect(0, 96, screen.xcenter, screen.ysize)
			if checkResult > -1
				arrayPos0 = checkResult
				temp0 = touchscreen[arrayPos0].xpos
				temp0 -= saveRAM[39]
				if temp0 > 0
					inputDown.right = 1
				else
					inputDown.left = 1
				end if
			end if
			CheckTouchRect(screen.xcenter, 96, screen.xsize, 240)
			if checkResult > -1
				inputDown.buttonA = 1
			end if
			if touchJump == 0
				inputPress.buttonA |= inputDown.buttonA
			end if
			touchJump = inputDown.buttonA
			if stage.debugMode == 1
				CheckTouchRect(0, 0, 112, 56)
				if checkResult > -1
					inputDown.buttonB = 1
				end if
			end if
		end if
		ProcessObjectControl()
		if options.vsMode == 1
			object.value24 = PlayerObject_value22
			CallNativeFunction2(SendEntity, 2, 0)
		end if
	else
		CheckTouchRect(0, 0, screen.xsize, screen.ysize)
		if inputPress.start == 1
			checkResult = 0
		end if
		if checkResult > -1
			if PlayerObject_value23 > 1
				PlayerObject_value23 = 1
			end if
		end if
		if inputPress.start == 1
			PlayerObject_value23 = 1
		end if
		PlayerObject_value24--
		if PlayerObject_value24 < 1
			if PlayerObject_value25 < PlayerObject_value26
				GetTableValue(temp0, PlayerObject_value25, PlayerObject_value27)
				GetBit(object.up, temp0, 0)
				GetBit(object.down, temp0, 1)
				GetBit(object.left, temp0, 2)
				GetBit(object.right, temp0, 3)
				GetBit(object.jumpPress, temp0, 4)
				GetBit(object.jumpHold, temp0, 5)
				PlayerObject_value25++
				GetTableValue(PlayerObject_value24, PlayerObject_value25, PlayerObject_value27)
				PlayerObject_value25++
			end if
		else
			if object.jumpPress == 1
				object.jumpPress = 0
			end if
		end if
		if PlayerObject_value23 > 0
			PlayerObject_value23--
			if PlayerObject_value23 < 1
				arrayPos0 = PlayerObject_value28
				object[arrayPos0].type = TypeName[Blank Object]
				object[arrayPos0].state = 8
				object[arrayPos0].priority = PRIORITY_ACTIVE
				object[arrayPos0].drawOrder = 6
			end if
		end if
	end if
	if object.value7 > 0
		object.value7--
		GetBit(temp0, object.value7, 2)
		if temp0 == 1
			object.visible = 0
		else
			object.visible = 1
		end if
	end if
end function


function PlayerObject_ProcessP2Inputs
	PlayerObject_value29 <<= 1
	PlayerObject_value29 |= object[2].up
	PlayerObject_value29 &= 0xFFFF
	PlayerObject_value30 <<= 1
	PlayerObject_value30 |= object[2].down
	PlayerObject_value30 &= 0xFFFF
	PlayerObject_value31 <<= 1
	PlayerObject_value31 |= object[2].left
	PlayerObject_value31 &= 0xFFFF
	PlayerObject_value32 <<= 1
	PlayerObject_value32 |= object[2].right
	PlayerObject_value32 &= 0xFFFF
	PlayerObject_value33 <<= 1
	PlayerObject_value33 |= object[2].jumpPress
	PlayerObject_value33 &= 0xFFFF
	PlayerObject_value34 <<= 1
	PlayerObject_value34 |= object[2].jumpHold
	PlayerObject_value34 &= 0xFFFF
	temp0 = PlayerObject_value29
	temp0 >>= 15
	object.up = temp0
	temp0 = PlayerObject_value30
	temp0 >>= 15
	object.down = temp0
	temp0 = PlayerObject_value31
	temp0 >>= 15
	object.left = temp0
	temp0 = PlayerObject_value32
	temp0 >>= 15
	object.right = temp0
	temp0 = PlayerObject_value33
	temp0 >>= 15
	object.jumpPress = temp0
	temp0 = PlayerObject_value34
	temp0 >>= 15
	object.jumpHold = temp0
	if object.value7 > 0
		object.value7--
		GetBit(temp0, object.value7, 2)
		if temp0 == 1
			object.visible = 0
		else
			object.visible = 1
		end if
	end if
end function


function PlayerObject_Process2PVSPlayer
	temp0 = object.value23
	CallNativeFunction2(ReceiveEntity, 3, 1)
	object.type = TypeName[Player Object]
	object.value18 = 9
	object.value23 = temp0
	if vs.playerID == 1
		PlayerObject_value22 = object.value24
	end if
	if object.value7 > 0
		object.value7--
		GetBit(temp0, object.value7, 2)
		if temp0 == 1
			object.visible = 0
		else
			object.visible = 1
		end if
	end if
end function


function PlayerObject_HandleGround
	if object.right == 1
		object.speed -= 48
		if object.speed < -0x600
			object.speed = -0x600
		end if
		object.value26 = 0
		object.value1 = 0
	else
		if object.left == 1
			object.speed += 48
			if object.speed > 0x600
				object.speed = 0x600
			end if
			object.value26 = 0
			object.value1 = 0
		else
			if object.value26 == 0
				object.value1 = 60
				object.value26 = 1
			end if
			temp0 = object.speed
			temp0 >>= 4
			object.speed -= temp0
		end if
	end if
	temp0 = object.speed
	if object.rotation != 0
		temp0 /= 256
		temp0 *= 128
	else
		temp0 >>= 1
	end if
	object.angle += temp0
	object.angle &= 0xFFFF
	object.rotation = object.angle
	object.rotation >>= 7
	if object.value1 > 0
		object.value1--
	else
		temp1 = object.rotation
		temp1 >>= 1
		Sin256(temp0, temp1)
		temp0 *= -80
		temp0 >>= 9
		object.speed += temp0
	end if
	Sin(object.xpos, object.rotation)
	object.xpos *= object.value9
	object.xpos >>= 9
	Cos(object.ypos, object.rotation)
	object.ypos *= object.value9
	object.ypos >>= 9
	object.animation = 0
	object.animationSpeed = 60
	temp0 = object.rotation
	object.value25 = 0
	if object.jumpPress == 1
		object.speed = 0
		Sin(object.xvel, object.rotation)
		object.xvel *= 0x5A0
		object.xvel >>= 9
		Cos(object.yvel, object.rotation)
		object.yvel *= 0x980
		object.yvel >>= 9
		object.state = PlayerObject_HandleAir
		object.rotation = 0
		object.frame = 8
		object.frame += object.value4
		object.animation = 8
		object.animationSpeed = 60
		object.animationTimer = 0
		object.gravity = GRAVITY_AIR
		PlaySfx(SfxName[Jump], 0)
	else
		if object.rotation > 152
			if object.rotation < 360
				if object.speed < 128
					if object.speed > -128
						object.xvel = object.speed
						object.speed = 0
						object.state = PlayerObject_HandleAir
						object.yvel = 0
					end if
				end if
			end if
		end if
	end if
	if temp0 > 128
		if temp0 < 384
			temp0 += 256
			FlipSign(temp0)
			temp0 &= 511
		end if
	end if
	Sin(object.value11, temp0)
	object.value11 *= -52
	object.value11 >>= 1
	Cos(object.value12, temp0)
	object.value12 *= -52
	object.value12 >>= 1
	object.value13 = 116
	if temp0 < 256
		if temp0 > 112
			object.value13 = 224
		else
			if temp0 > 39
				object.value13 = 149
			end if
		end if
	else
		if temp0 < 400
			object.value13 = 215
		else
			if temp0 < 473
				object.value13 = 182
			end if
		end if
	end if
	if object.rotation < 40
		object.rotation = 0
	end if
	if object.rotation > 472
		object.rotation = 0
	end if
end function


function PlayerObject_HandleAir
	if options.vsMode == 1
		if object.value25 == 0
			PlayerObject_value22 ^= 1
			object.value25 = 1
		end if
	end if
	object.xpos += object.xvel
	if object.xpos <= object.value9
		object.xpos = object.value9
	end if
	if object.xpos >= object.value3
		object.xpos = object.value3
	end if
	if object.left == 1
		object.xvel -= 32
	end if
	if object.right == 1
		object.xvel += 32
	end if
	object.ypos += object.yvel
	object.yvel -= 88
	if object.ypos < 0
		temp0 = object.xpos
		temp0 *= object.xpos
		temp1 = object.ypos
		temp1 *= object.ypos
		temp0 += temp1
		if temp0 > object.value10
			object.state = PlayerObject_HandleGround
			object.gravity = GRAVITY_GROUND
			ATan2(object.angle, object.ypos, object.xpos)
			object.angle += 128
			object.angle <<= 8
		end if
	end if
	if object.rotation < 256
		if object.rotation > 0
			object.rotation -= 8
		else
			object.rotation = 0
		end if
	else
		if object.rotation < 512
			object.rotation += 8
		else
			object.rotation = 0
		end if
	end if
	object.value11 = object.xpos
	object.value11 *= 144
	object.value11 >>= 8
	temp0 = object.xpos
	temp0 *= 45
	temp0 >>= 13
	Abs(temp0)
	GetTableValue(object.value12, temp0, PlayerObject_SonicSuperAltPal4)
	temp0 = object.value12
	object.value12 *= 105
	object.value13 = 116
	if temp0 > -112
		if temp0 > -24
			if object.xpos < 0
				object.value13 = 224
			else
				object.value13 = 215
			end if
		else
			if object.xpos < 0
				object.value13 = 149
			else
				object.value13 = 182
			end if
		end if
	end if
end function


function PlayerObject_HurtSpin
	if options.vsMode == 1
		if vs.playerID == 0
			if object.value25 == 0
				PlayerObject_value22 = object.entityPos
				PlayerObject_value22 -= 2
				PlayerObject_value22 ^= vs.playerID
				PlayerObject_value22 ^= 1
				object.value25 = 1
			end if
		end if
	end if
	if object.value6 < 512
		object.value6 += 16
		object.rotation += 16
	else
		object.speed = 0
		object.value6 = 0
		object.value7 = 60
		if object.gravity == GRAVITY_GROUND
			object.state = PlayerObject_HandleGround
		else
			object.state = PlayerObject_HandleAir
		end if
	end if
end function


function PlayerObject_RingLoss
	if object[currentPlayer].value0 > 0
		PlaySfx(SfxName[Lose Rings], 0)
		object[currentPlayer].value0 -= 10
		temp0 = 10
		if object[currentPlayer].value0 < 0
			temp0 += object[currentPlayer].value0
			object[currentPlayer].value0 = 0
		end if
		temp2 = temp0
		temp2 >>= 1
		temp2 <<= 5
		temp1 = 384
		temp1 -= temp2
		temp2 = object.angle
		temp2 >>= 7
		temp1 += temp2
		temp3 = object[currentPlayer].xpos
		temp3 *= 224
		temp4 = object[currentPlayer].ypos
		temp4 *= -220
		temp5 = object[2].ypos
		temp5 *= -48
		temp4 += 0x600000
		temp4 += temp5
		while temp0 > 0
			CreateTempObject(TypeName[Lose Ring], 0, temp3, temp4)
			Cos(object[tempObjectPos].xvel, temp1)
			Sin(object[tempObjectPos].yvel, temp1)
			object[tempObjectPos].xvel <<= 9
			object[tempObjectPos].yvel <<= 10
			object[tempObjectPos].scale = 320
			Rand(object[tempObjectPos].value1, 0x2000)
			object[tempObjectPos].value1 += 0x7000
			Rand(object[tempObjectPos].animationSpeed, 128)
			object[tempObjectPos].animationSpeed += 64
			temp0--
			temp1 += 32
		loop
	end if
end function


event ObjectMain
	CallFunction(object.value18)
	CallFunction(object.state)
	if options.vsMode == 1
		temp0 = object.entityPos
		temp0 -= 2
		temp0 ^= vs.playerID
		temp0 ^= PlayerObject_value22
		if temp0 == 0
			if object.value2 < 0x1000
				object.value2 += 64
			end if
		else
			if object.value2 > 0x400
				object.value2 -= 64
			end if
		end if
	end if
	object.value14 = object.value2
	object.value14 <<= 8
	object.value14 += object[0].value13
	object.value14 += 0xC0000
	object.animationTimer += object.animationSpeed
	if object.animationTimer >= 240
		object.animationTimer -= 240
		object.frame++
		object.frame &= 7
		object.frame += object.animation
		object.frame += object.value4
	end if
	CallFunction(PlayerObject_ProcessDrawing)
	object.value17++
	object.value17 %= 28
end event


event ObjectStartup
	LoadSpriteSheet("Special/Objects.gif")
	SpriteFrame(-16, -28, 32, 56, 1, 68)
	SpriteFrame(-16, -28, 32, 56, 34, 68)
	SpriteFrame(-16, -28, 32, 56, 67, 68)
	SpriteFrame(-16, -28, 32, 56, 100, 68)
	SpriteFrame(-16, -28, 32, 56, 1, 125)
	SpriteFrame(-16, -28, 32, 56, 34, 125)
	SpriteFrame(-16, -28, 32, 56, 67, 125)
	SpriteFrame(-16, -28, 32, 56, 100, 125)
	SpriteFrame(-16, -20, 32, 40, 133, 67)
	SpriteFrame(-16, -20, 32, 40, 166, 67)
	SpriteFrame(-16, -20, 32, 40, 133, 67)
	SpriteFrame(-16, -20, 32, 40, 166, 67)
	SpriteFrame(-16, -20, 32, 40, 133, 67)
	SpriteFrame(-16, -20, 32, 40, 166, 67)
	SpriteFrame(-16, -20, 32, 40, 133, 67)
	SpriteFrame(-16, -20, 32, 40, 166, 67)
	SpriteFrame(-12, -24, 24, 48, 199, 67)
	SpriteFrame(-16, -24, 32, 48, 224, 67)
	SpriteFrame(-16, -24, 32, 48, 257, 67)
	SpriteFrame(-16, -24, 32, 48, 290, 67)
	SpriteFrame(-12, -24, 24, 48, 199, 116)
	SpriteFrame(-16, -24, 32, 48, 224, 116)
	SpriteFrame(-16, -24, 32, 48, 257, 116)
	SpriteFrame(-16, -24, 32, 48, 290, 116)
	SpriteFrame(-16, -16, 32, 32, 133, 108)
	SpriteFrame(-16, -16, 32, 32, 166, 108)
	SpriteFrame(-16, -16, 32, 32, 133, 108)
	SpriteFrame(-16, -16, 32, 32, 166, 108)
	SpriteFrame(-16, -16, 32, 32, 133, 108)
	SpriteFrame(-16, -16, 32, 32, 166, 108)
	SpriteFrame(-16, -16, 32, 32, 133, 108)
	SpriteFrame(-16, -16, 32, 32, 166, 108)
	SpriteFrame(-16, -28, 32, 56, 1, 182)
	SpriteFrame(-16, -28, 32, 56, 34, 182)
	SpriteFrame(-16, -28, 32, 56, 67, 182)
	SpriteFrame(-16, -28, 32, 56, 100, 182)
	SpriteFrame(-16, -28, 32, 56, 133, 182)
	SpriteFrame(-16, -28, 32, 56, 166, 182)
	SpriteFrame(-16, -28, 32, 56, 199, 182)
	SpriteFrame(-16, -28, 32, 56, 232, 182)
	SpriteFrame(-16, -20, 32, 40, 133, 141)
	SpriteFrame(-16, -20, 32, 40, 166, 141)
	SpriteFrame(-16, -20, 32, 40, 133, 141)
	SpriteFrame(-16, -20, 32, 40, 166, 141)
	SpriteFrame(-16, -20, 32, 40, 133, 141)
	SpriteFrame(-16, -20, 32, 40, 166, 141)
	SpriteFrame(-16, -20, 32, 40, 133, 141)
	SpriteFrame(-16, -20, 32, 40, 166, 141)
	SpriteFrame(-6, -6, 16, 24, 323, 58)
	SpriteFrame(-8, 0, 24, 24, 340, 58)
	SpriteFrame(-8, 8, 24, 16, 365, 58)
	SpriteFrame(-9, -1, 16, 24, 390, 58)
	SpriteFrame(-11, -9, 16, 32, 407, 58)
	SpriteFrame(-16, -9, 24, 24, 424, 58)
	SpriteFrame(-16, -9, 24, 24, 323, 83)
	SpriteFrame(-8, -40, 16, 7, 348, 100)
	SpriteFrame(-8, -40, 16, 7, 348, 108)
	object[2].type = TypeName[Player Object]
	object[2].priority = PRIORITY_ACTIVE
	object[2].value2 = 0x1000
	object[2].state = PlayerObject_HandleGround
	object[2].value18 = PlayerObject_ProcessP1Inputs
	switch stage.playerListPos
	case 0
		object[2].value3 = 88
		object[2].value4 = 0
		break
	case 1
		object[2].value3 = 90
		object[2].value4 = 16
		break
	case 2
		object[2].value3 = 88
		object[2].value4 = 32
		break
	end switch
	object[2].value3 <<= 8
	object[2].value9 = object[2].value3
	FlipSign(object[2].value9)
	object[2].value10 = object[2].value3
	object[2].value10 *= object[2].value3
	object[2].value10 -= 0x10000
	object[2].frame = object[2].value4
	if options.vsMode == 1
		object[3].type = TypeName[Player Object]
		object[3].priority = PRIORITY_ACTIVE
		object[3].value23 = vs.playerID
		object[3].value23 ^= 1
		object[3].value23 += 55
		if vs.playerID == 0
			object[2].value2 = 0x1000
			object[3].value2 = 0x400
		else
			object[2].value2 = 0x400
			object[3].value2 = 0x1000
		end if
		object[3].state = PlayerObject_HandleGround
		object[3].value18 = PlayerObject_Process2PVSPlayer
		switch vs.player2Type
		case 0
			object[3].value3 = 88
			object[3].value4 = 0
			break
		case 1
			object[3].value3 = 90
			object[3].value4 = 16
			break
		case 2
			object[3].value3 = 88
			object[3].value4 = 32
			break
		end switch
		object[3].value3 <<= 8
		object[3].value9 = object[3].value3
		FlipSign(object[3].value9)
		object[3].value10 = object[3].value3
		object[3].value10 *= object[3].value3
		object[3].value10 -= 0x10000
		object[3].frame = object[3].value4
		stage.player2Enabled = 0
		playerCount = 2
		CallNativeFunction2(ReceiveEntity, 0x400, 1)
		ResetObjectEntity(0x400, TypeName[Blank Object], 0, 0, 0)
	end if
	if stage.player2Enabled == 1
		object[3].type = TypeName[Player Object]
		object[3].priority = PRIORITY_ACTIVE
		object[3].value2 = 0x400
		//object[3].state = PlayerObject_HandleAir
		object[3].state = PlayerObject_HandleGround
		object[3].value18 = PlayerObject_ProcessP2Inputs
		object[3].value3 = 90
		object[3].value4 = 16
		object[3].value3 <<= 8
		object[3].value9 = object[3].value3
		FlipSign(object[3].value9)
		object[3].value10 = object[3].value3
		object[3].value10 *= object[3].value3
		object[3].value10 -= 0x10000
		object[3].frame = object[3].value4
	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
