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

//-------Aliases-------//
private alias 52 : TYPE_WHEELPLATFORM

// Function declarations
reserve function WheelPlatform_DebugDraw
reserve function WheelPlatform_DebugSpawn

// Static Values

// Tables

function WheelPlatform_DebugDraw
	DrawSprite(3)
	temp0 = object.xpos
	temp0 -= 0x880000
	temp1 = object.ypos
	temp1 += 0xC0000
	DrawSpriteXY(2, temp0, temp1)
	temp0 -= 0x380000
	DrawSpriteXY(0, temp0, temp1)
	temp0 = object.xpos
	temp0 += 0x880000
	DrawSpriteXY(2, temp0, temp1)
	temp0 += 0x380000
	DrawSpriteXY(1, temp0, temp1)
end function


function WheelPlatform_DebugSpawn
	CreateTempObject(TypeName[Wheel Platform], 0, object.xpos, object.ypos)
end function


event ObjectMain
	object.value15 = 1
	temp0 = object.xpos
	temp0 >>= 16
	temp0 -= screen.cameraX
	Abs(temp0)
	temp0 -= 576
	temp1 = object.ypos
	temp1 >>= 16
	temp1 -= screen.cameraY
	Abs(temp1)
	temp1 -= 128
	if temp0 >= screen.xcenter
		object.value15 = 0
	end if
	if temp1 >= screen.ycenter
		object.value15 = 0
	end if
	if object.value15 == 1
		GetTableValue(object.value0, 16, StageSetup_table9)
		object.value0 >>= 8
		object.value10 = object.value0
		object.value10 >>= 1
		object.value0 -= 56
		object.value10 -= 28
		GetTableValue(object.value1, 18, StageSetup_table9)
		object.value1 >>= 8
		object.value11 = object.value1
		object.value11 >>= 1
		object.value1 -= 56
		object.value11 -= 28
		GetBit(temp0, object.propertyValue, 0)
		if temp0 == 1
			FlipSign(object.value0)
			FlipSign(object.value1)
			object.rotation += 34
		else
			object.rotation -= 34
		end if
		GetBit(temp0, object.propertyValue, 1)
		if temp0 == 1
			FlipSign(object.value0)
			temp0 = object.value0
			object.value0 = object.value1
			object.value1 = temp0
		end if
		object.value0 <<= 16
		object.value0 += object.xpos
		object.value1 <<= 16
		object.value1 += object.ypos
		object.value10 <<= 16
		object.value11 <<= 16
		FlipSign(object.value10)
		FlipSign(object.value11)
		object.value2 = object.value0
		object.value2 -= 0x880000
		object.value3 = object.value1
		object.value3 += 0xC0000
		object.value4 = object.value0
		object.value4 += 0x880000
		object.value5 = object.value3
		object.value6 = object.value0
		object.value6 -= 0xC00000
		object.value7 = object.value3
		object.value8 = object.value0
		object.value8 += 0xC00000
		object.value9 = object.value3
		temp1 = object.value0
		temp1 -= object.value13
		temp2 = object.value1
		temp2 -= object.value14
		object.value13 = object.value0
		object.value14 = object.value1
		temp4 = object.xpos
		temp5 = object.ypos
		object.xpos = object.value0
		object.ypos = object.value1
		temp7 = 0
		foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
			GetBit(temp6, object.value12, temp7)
			if temp6 == 1
				object[currentPlayer].xpos += temp1
				object[currentPlayer].ypos += temp2
			end if
			SetBit(object.value12, temp7, 0)
			temp0 = 0
			BoxCollisionTest(C_BOX, object.entityPos, -64, -24, 64, 0, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
			switch checkResult
			case 1
				SetBit(object.value12, temp7, 1)
				break
			case 4
				if object[currentPlayer].gravity == GRAVITY_GROUND
					CallFunction(PlayerObject_Kill)
				end if
				break
			end switch
			BoxCollisionTest(C_BOX, object.entityPos, -96, -24, -64, 24, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
			switch checkResult
			case 1
				SetBit(object.value12, temp7, 1)
				break
			case 4
				if object[currentPlayer].gravity == GRAVITY_GROUND
					CallFunction(PlayerObject_Kill)
				end if
				break
			end switch
			BoxCollisionTest(C_BOX, object.entityPos, 64, -24, 96, 24, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
			switch checkResult
			case 1
				SetBit(object.value12, temp7, 1)
				break
			case 4
				if object[currentPlayer].gravity == GRAVITY_GROUND
					CallFunction(PlayerObject_Kill)
				end if
				break
			end switch
			BoxCollisionTest(C_BOX, object.entityPos, -176, 4, -96, 20, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
			switch checkResult
			case 1
				SetBit(object.value12, temp7, 1)
				break
			case 4
				if object[currentPlayer].gravity == GRAVITY_GROUND
					CallFunction(PlayerObject_Kill)
				end if
				break
			end switch
			BoxCollisionTest(C_BOX, object.entityPos, 96, 4, 176, 20, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
			switch checkResult
			case 1
				SetBit(object.value12, temp7, 1)
				break
			case 4
				if object[currentPlayer].gravity == GRAVITY_GROUND
					CallFunction(PlayerObject_Kill)
				end if
				break
			end switch
			BoxCollisionTest(C_BOX, object.entityPos, -208, 0, -176, 24, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
			switch checkResult
			case 1
				SetBit(object.value12, temp7, 1)
				break
			case 4
				if object[currentPlayer].gravity == GRAVITY_GROUND
					CallFunction(PlayerObject_Kill)
				end if
				break
			end switch
			BoxCollisionTest(C_BOX, object.entityPos, 176, 0, 208, 24, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
			switch checkResult
			case 1
				SetBit(object.value12, temp7, 1)
				break
			case 4
				if object[currentPlayer].gravity == GRAVITY_GROUND
					CallFunction(PlayerObject_Kill)
				end if
				break
			end switch
			temp7++
		next
		object.xpos = temp4
		object.ypos = temp5
	end if
end event


event ObjectDraw
	if object.value15 == 1
		temp6 = object.xpos
		temp6 -= 0xC00000
		temp7 = object.ypos
		temp7 += 0xC0000
		temp0 = 0
		temp2 = object.rotation
		object.rotation >>= 5
		object.rotation &= 511
		while temp0 < 8
			DrawSpriteFX(5, FX_ROTATE, temp6, temp7)
			object.rotation += 64
			object.rotation &= 511
			temp0++
		loop
		temp5 = object.xpos
		temp5 += 0xC00000
		temp0 = 0
		while temp0 < 8
			DrawSpriteFX(5, FX_ROTATE, temp5, temp7)
			object.rotation += 64
			object.rotation &= 511
			temp0++
		loop
		object.rotation = temp2
		temp6 += object.value10
		temp7 += object.value11
		DrawSpriteXY(4, temp6, temp7)
		temp5 += object.value10
		DrawSpriteXY(4, temp5, temp7)
		DrawSpriteXY(3, object.value0, object.value1)
		DrawSpriteXY(2, object.value2, object.value3)
		DrawSpriteXY(0, object.value6, object.value7)
		DrawSpriteXY(2, object.value4, object.value5)
		DrawSpriteXY(1, object.value8, object.value9)
	end if
end event


event ObjectStartup
	LoadSpriteSheet("MPZ/Objects.gif")
	SpriteFrame(-16, -12, 32, 24, 479, 182)
	SpriteFrame(-16, -12, 32, 24, 479, 133)
	SpriteFrame(-40, -8, 80, 16, 349, 165)
	SpriteFrame(-96, -24, 192, 48, 319, 207)
	SpriteFrame(-12, -12, 24, 24, 487, 157)
	SpriteFrame(-2, -14, 4, 4, 40, 34)
	foreach (TypeName[Wheel Platform], arrayPos0, ALL_ENTITIES)
		object[arrayPos0].priority = PRIORITY_ACTIVE
	next
	SetTableValue(TypeName[Wheel Platform], DebugMode_ObjCount, DebugMode_TypesTable)
	SetTableValue(WheelPlatform_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
	SetTableValue(WheelPlatform_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
	DebugMode_ObjCount++
end event

event RSDKDraw
	DrawSprite(0)
end event

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