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

//-------Aliases-------//
private alias 54 : TYPE_PULLCHAIN

// Function declarations
reserve function PullChain_DebugDraw
reserve function PullChain_DebugSpawn

// Static Values
public value PullChain_value46 = 0;
public value PullChain_value44 = 0;
public value PullChain_value45 = 0;

// Tables

function PullChain_DebugDraw
	DrawSprite(1)
end function


function PullChain_DebugSpawn
	temp0 = object[0].value17
	temp0 -= PullChain_value46
	CreateTempObject(TypeName[Pull Chain], 0, object.xpos, object.ypos)
	object[tempObjectPos].value2 = object[tempObjectPos].ypos
	GetBit(temp1, temp0, 0)
	if temp1 == 0
		object[tempObjectPos].value4 = 80
	else
		object[tempObjectPos].value4 = 48
	end if
	GetBit(temp2, temp0, 1)
	if temp2 == 0
		object[tempObjectPos].yvel = 0x20000
		object[tempObjectPos].ypos -= 0xF0000
	else
		object[tempObjectPos].yvel = -0x20000
		if temp1 == 0
			object[tempObjectPos].ypos += 0x910000
		else
			object[tempObjectPos].ypos += 0x510000
		end if
	end if
	object[tempObjectPos].value1 = object[tempObjectPos].ypos
end function


event ObjectMain
	if object.propertyValue == 1
		if object.value0 < object.value4
			object.value0++
			object.ypos += object.yvel
		end if
	else
		if object.value0 > 0
			object.value0--
			object.ypos -= object.yvel
		end if
	end if
	object.propertyValue = 0
	if object.value3 > 0
		object.value3--
	end if
	temp0 = object.ypos
	temp0 += 0x380000
	foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
		if object[currentPlayer].state != PlayerObject_Blank
			if object.value3 == 0
				if object[currentPlayer].ypos < temp0
					BoxCollisionTest(C_TOUCH, object.entityPos, -8, 70, 8, 96, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
				else
					BoxCollisionTest(C_TOUCH, object.entityPos, -8, 32, 8, 48, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
				end if
				if checkResult == 1
					object[currentPlayer].state = PlayerObject_Blank
					object[currentPlayer].animation = ANI_HANGING
					object[currentPlayer].speed = 0
					object[currentPlayer].xvel = 0
					object[currentPlayer].yvel = 0
					object[currentPlayer].xpos = object.xpos
					object[currentPlayer].ypos = object[currentPlayer].collisionTop
					FlipSign(object[currentPlayer].ypos)
					object[currentPlayer].ypos += 36
					object[currentPlayer].ypos <<= 16
					object[currentPlayer].ypos += object.ypos
					object.propertyValue |= 1
				end if
			end if
		else
			BoxCollisionTest(C_TOUCH, object.entityPos, -8, -4, 8, 72, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
			if checkResult == 1
				if object[currentPlayer].jumpPress == 1
					object[currentPlayer].animation = ANI_JUMPING
					PlaySfx(SfxName[Jump], 0)
					object[currentPlayer].value35 = 1
					object[currentPlayer].state = PlayerObject_HandleAir
					object[currentPlayer].yvel = -0x40000
					object[currentPlayer].gravity = GRAVITY_AIR
					object.value3 = 30
				else
					object[currentPlayer].xpos = object.xpos
					object[currentPlayer].ypos = object[currentPlayer].collisionTop
					FlipSign(object[currentPlayer].ypos)
					object[currentPlayer].ypos += 36
					object[currentPlayer].ypos <<= 16
					object[currentPlayer].ypos += object.ypos
					object.propertyValue |= 1
				end if
			end if
		end if
	next
	if object.frame == 0
		if object.propertyValue == 1
			PlaySfx(SfxName[Catch], 0)
		end if
	end if
	object.frame = object.propertyValue
end event


event ObjectDraw
	temp0 = object.ypos
	temp0 -= object.value2
	temp0 >>= 16
	temp1 = PullChain_value45
	temp1 -= temp0
	temp2 = -40
	temp2 -= temp0
	temp0 += 80
	EditFrame(0, -12, temp2, 24, temp0, PullChain_value44, temp1)
	DrawSprite(0)
end event


event ObjectStartup
	CheckCurrentStageFolder("Zone11")
	if checkResult == 1
		LoadSpriteSheet("SCZ/Objects.gif")
		SpriteFrame(-12, -40, 24, 65, 236, 191)
		SpriteFrame(-12, -40, 24, 65, 236, 191)
		PullChain_value44 = 236
		PullChain_value45 = 176
	else
		LoadSpriteSheet("MBZ/Objects.gif")
		SpriteFrame(-12, -40, 24, 65, 901, 358)
		SpriteFrame(-12, -40, 24, 65, 901, 358)
		PullChain_value44 = 901
		PullChain_value45 = 358
		PullChain_value45 += 176
	end if
	foreach (TypeName[Pull Chain], arrayPos0, ALL_ENTITIES)
		object[arrayPos0].value2 = object[arrayPos0].ypos
		GetBit(temp1, object[arrayPos0].propertyValue, 0)
		if temp1 == 0
			object[arrayPos0].value4 = 80
		else
			object[arrayPos0].value4 = 48
		end if
		GetBit(temp0, object[arrayPos0].propertyValue, 4)
		if temp0 == 0
			object[arrayPos0].yvel = 0x20000
			object[arrayPos0].ypos -= 0x200000
		else
			object[arrayPos0].yvel = -0x20000
			if temp1 == 0
				object[arrayPos0].ypos += 0x800000
			else
				object[arrayPos0].ypos += 0x400000
			end if
			object[arrayPos0].value2 -= 0x110000
		end if
		object[arrayPos0].value1 = object[arrayPos0].ypos
		object[arrayPos0].propertyValue = 0
	next
	temp0 = 0
	PullChain_value46 = DebugMode_ObjCount
	while temp0 < 4
		SetTableValue(TypeName[Pull Chain], DebugMode_ObjCount, DebugMode_TypesTable)
		SetTableValue(PullChain_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
		SetTableValue(PullChain_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
