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

//-------Aliases-------//
private alias 57 : TYPE_BUTTONBRIDGE

// Function declarations
reserve function ButtonBridge_Function127
reserve function ButtonBridge_DebugDraw
reserve function ButtonBridge_DebugSpawn

// Static Values
public value ButtonBridge_value38 = 0;

// Tables

function ButtonBridge_Function127
	object[arrayPos0].priority = PRIORITY_ACTIVE
	object[arrayPos0].value0 = 64
	object[arrayPos0].value1 = object[arrayPos0].xpos
	if object[arrayPos0].direction == FLIP_NONE
		object[arrayPos0].value1 -= 0x4C0000
	else
		object[arrayPos0].value1 += 0x4C0000
	end if
	if object[arrayPos0].propertyValue == 1
		if object[arrayPos0].direction == FLIP_NONE
			object[arrayPos0].xpos -= 0x800000
		else
			object[arrayPos0].xpos += 0x800000
		end if
	end if
end function


function ButtonBridge_DebugDraw
	temp0 = object[0].value17
	temp0 -= ButtonBridge_value38
	temp1 = object.xpos
	if object.direction == FLIP_NONE
		temp1 -= 0x4C0000
	else
		temp1 += 0x4C0000
	end if
	DrawSpriteXY(0, temp1, object.ypos)
	temp1 = object.xpos
	if temp0 == 1
		if object.direction == FLIP_NONE
			temp1 -= 0x800000
		else
			temp1 += 0x800000
		end if
	end if
	DrawSpriteXY(4, temp1, object.ypos)
end function


function ButtonBridge_DebugSpawn
	temp0 = object[0].value17
	temp0 -= ButtonBridge_value38
	CreateTempObject(TypeName[Button Bridge], temp0, object.xpos, object.ypos)
	object[tempObjectPos].direction = object.direction
	arrayPos0 = object[tempObjectPos].entityPos
	CallFunction(ButtonBridge_Function127)
end function


event ObjectMain
	switch object.state
	case 0
		if object[+1].value0 == 1
			if object.propertyValue == 0
				object.state = 1
			else
				object.state = 3
			end if
		end if
		foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
			BoxCollisionTest(C_BOX, object.entityPos, -64, -12, 64, 8, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
		next
		break
	case 1
		temp0 = object.xpos
		temp0 &= -0x10000
		if object.direction == FLIP_NONE
			object.xpos -= 0x20000
			object.frame++
		else
			object.xpos += 0x20000
			object.frame--
		end if
		object.frame &= 3
		object.value0--
		if object.value0 <= 0
			if object.propertyValue == 0
				object.state = 2
			else
				object.state = 0
				object.value0 = 64
			end if
		end if
		temp1 = object.xpos
		temp1 &= -0x10000
		temp1 -= temp0
		temp2 = object.xpos
		object.xpos = temp0
		foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
			BoxCollisionTest(C_BOX, object.entityPos, -64, -12, 64, 8, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
			switch checkResult
			case 1
				object[currentPlayer].xpos += temp1
				break
			case 2
			case 3
				if object[currentPlayer].state == PlayerObject_KnuxWallClimb
					object[currentPlayer].value1 = 0
					object[currentPlayer].animation = ANI_GLIDING_DROP
					object[currentPlayer].state = PlayerObject_KnuxGlideDrop
				end if
				break
			end switch
		next
		object.xpos = temp2
		break
	case 2
		object.value0++
		if object.value0 == 180
			object.value0 = 0
			if object.propertyValue == 0
				object.state = 3
			else
				object.state = 1
			end if
			object.value0 = 64
		end if
		foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
			BoxCollisionTest(C_BOX, object.entityPos, -64, -12, 64, 8, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
		next
		break
	case 3
		temp0 = object.xpos
		temp0 &= -0x10000
		if object.direction == FLIP_NONE
			object.xpos += 0x20000
			object.frame--
		else
			object.xpos -= 0x20000
			object.frame++
		end if
		object.frame &= 3
		object.value0--
		if object.value0 <= 0
			if object.propertyValue == 0
				object.state = 0
				object.value0 = 64
			else
				object.state = 2
			end if
		end if
		temp1 = object.xpos
		temp1 &= -0x10000
		temp1 -= temp0
		temp2 = object.xpos
		object.xpos = temp0
		foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
			BoxCollisionTest(C_BOX, object.entityPos, -64, -12, 64, 8, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
			switch checkResult
			case 1
				object[currentPlayer].xpos += temp1
				break
			case 2
			case 3
				if object[currentPlayer].state == PlayerObject_KnuxWallClimb
					object[currentPlayer].value1 = 0
					object[currentPlayer].animation = ANI_GLIDING_DROP
					object[currentPlayer].state = PlayerObject_KnuxGlideDrop
				end if
				break
			end switch
		next
		object.xpos = temp2
		break
	end switch
end event


event ObjectDraw
	DrawSpriteXY(object.frame, object.value1, object.ypos)
	DrawSprite(4)
end event


event ObjectStartup
	LoadSpriteSheet("MPZ/Objects.gif")
	SpriteFrame(-12, 8, 24, 24, 133, 126)
	SpriteFrame(-12, 8, 24, 24, 158, 126)
	SpriteFrame(-12, 8, 24, 24, 158, 126)
	SpriteFrame(-12, 8, 24, 24, 183, 126)
	SpriteFrame(-64, -12, 128, 24, 350, 182)
	foreach (TypeName[Button Bridge], arrayPos0, ALL_ENTITIES)
		CallFunction(ButtonBridge_Function127)
	next
	temp0 = 0
	ButtonBridge_value38 = DebugMode_ObjCount
	while temp0 < 2
		SetTableValue(TypeName[Button Bridge], DebugMode_ObjCount, DebugMode_TypesTable)
		SetTableValue(ButtonBridge_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
		SetTableValue(ButtonBridge_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
		DebugMode_ObjCount++
		temp0++
	loop
end event

event RSDKDraw
	DrawSprite(0)
end event

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