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

//-------Aliases-------//
private alias 54 : TYPE_TUBESPRING

// Function declarations
reserve function TubeSpring_DebugDraw
reserve function TubeSpring_DebugSpawn

// Static Values
public value TubeSpring_value45 = 0;

// Tables

function TubeSpring_DebugDraw
	DrawSprite(0)
end function


function TubeSpring_DebugSpawn
	CreateTempObject(TypeName[Tube Spring], 0, object.xpos, object.ypos)
	temp0 = object[0].value17
	temp0 -= TubeSpring_value45
	if temp0 == 0
		object[tempObjectPos].value1 = -0x100000
	else
		object[tempObjectPos].value1 = -0xA8000
	end if
	object[tempObjectPos].drawOrder = 5
end function


event ObjectMain
	foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
		BoxCollisionTest(C_TOUCH, object.entityPos, -16, 0, 16, 48, currentPlayer, 1, 1, 1, 1)
		if checkResult == 1
			if object.animation == 0
				object.value0 = 0
			end if
			object.animation = 1
		end if
		if object.animation == 0
			BoxCollisionTest(C_BOX, object.entityPos, -14, -8, 14, 8, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
			if checkResult == 1
				object[currentPlayer].value10 = ANI_WALKING
				if object[currentPlayer].animation == ANI_RUNNING
					object[currentPlayer].value10 = ANI_RUNNING
				end if
				if object[currentPlayer].animation == ANI_PEELOUT
					object[currentPlayer].value10 = ANI_PEELOUT
				end if
				if object.animation == 0
					object.value0 = 1
				end if
				object[currentPlayer].state = PlayerObject_HandleAir
				object[currentPlayer].tileCollisions = 1
				object[currentPlayer].gravity = GRAVITY_AIR
				object[currentPlayer].speed = object[currentPlayer].xvel
				object[currentPlayer].yvel = object.value1
				object[currentPlayer].yvel -= object[currentPlayer].value25
				GetBit(temp0, object[arrayPos0].propertyValue, 7)
				if temp0 == 1
					object[currentPlayer].xvel = 0
				end if
				//GetBit(temp0, object[arrayPos0].propertyValue, 0)
				//if temp0 == 1
				//	object[currentPlayer].animation = ANI_TWIRL
				//else
				//	object[currentPlayer].animation = ANI_BOUNCING
				//end if
				
				if saved.Speen == 1
					object[currentPlayer].animation = ANI_SPEEN
				else
					object[currentPlayer].animation = ANI_BOUNCING
				end if
				
				object[currentPlayer].value1 = 0
				GetBit(temp0, object[arrayPos0].propertyValue, 2)
				if temp0 == 1
					object[currentPlayer].collisionPlane = PATH_A
				end if
				GetBit(temp0, object[arrayPos0].propertyValue, 3)
				if temp0 == 1
					object[currentPlayer].collisionPlane = PATH_B
				end if
				PlaySfx(SfxName[Spring], 0)
			end if
		end if
	next
	switch object.animation
	case 0
		if object.value0 != 0
			switch object.value0
			case 0
			case 2
			case 3
				object.frame = 0
				break
			case 1
				object.frame = 1
				break
			case 4
			case 5
			case 6
			case 7
			case 8
			case 9
				object.frame = 2
				break
			end switch
			object.value0++
			if object.value0 >= 10
				object.value0 = 0
			end if
		else
			object.frame = 0
		end if
		break
	case 1
		if object.value0 < 6
			object.frame = 3
		else
			object.frame = 4
			if object.value0 == 23
				object.value0 = 0
				object.animation = 2
			end if
		end if
		object.value0++
		break
	case 2
		object.frame = 3
		object.value0++
		if object.value0 == 6
			object.value0 = 0
			object.animation = 0
		end if
		break
	end switch
end event


event ObjectDraw
	DrawSprite(object.frame)
end event


event ObjectStartup
	CheckCurrentStageFolder("Zone02")
	if checkResult == 1
		LoadSpriteSheet("CPZ/Objects.gif")
		SpriteFrame(-16, -16, 32, 16, 191, 1)
		SpriteFrame(-16, -10, 32, 10, 191, 81)
		SpriteFrame(-16, -32, 32, 32, 191, 92)
		SpriteFrame(-16, -29, 32, 29, 191, 18)
		SpriteFrame(-16, -32, 32, 32, 191, 48)
		SpriteFrame(-16, -29, 32, 29, 191, 18)
	else
		LoadSpriteSheet("MBZ/Objects.gif")
		SpriteFrame(-16, -16, 32, 16, 99, 377)
		SpriteFrame(-16, -10, 32, 10, 99, 457)
		SpriteFrame(-16, -32, 32, 32, 99, 468)
		SpriteFrame(-16, -29, 32, 29, 99, 394)
		SpriteFrame(-16, -32, 32, 32, 99, 424)
		SpriteFrame(-16, -29, 32, 29, 99, 394)
	end if
	foreach (TypeName[Tube Spring], arrayPos0, ALL_ENTITIES)
		GetBit(temp0, object[arrayPos0].propertyValue, 1)
		if temp0 == 0
			object[arrayPos0].value1 = -0x100000
		else
			object[arrayPos0].value1 = -0xA8000
		end if
		object[arrayPos0].drawOrder = 5
	next
	temp0 = 0
	TubeSpring_value45 = DebugMode_ObjCount
	while temp0 < 2
		SetTableValue(TypeName[Tube Spring], DebugMode_ObjCount, DebugMode_TypesTable)
		SetTableValue(TubeSpring_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
		SetTableValue(TubeSpring_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
