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

//-------Aliases-------//
private alias 59 : TYPE_ARROWLAUNCHER

// Function declarations
reserve function ArrowLauncher_DebugDraw
reserve function ArrowLauncher_DebugSpawn

// Static Values

// Tables

function ArrowLauncher_DebugDraw
	DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)
end function


function ArrowLauncher_DebugSpawn
	CreateTempObject(TypeName[Arrow Launcher], 0, object.xpos, object.ypos)
	object[tempObjectPos].direction = object.direction
end function


event ObjectMain
	switch object.state
	case 0
		foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
			BoxCollisionTest(C_TOUCH, object.entityPos, -64, -256, 64, 256, currentPlayer, -1, -1, 1, 1)
			if checkResult == 1
				object.state = 1
			end if
		next
		break
	case 1
		object.value0++
		object.value0 &= 7
		object.frame = object.value0
		object.frame >>= 2
		temp0 = 0
		foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
			BoxCollisionTest(C_TOUCH, object.entityPos, -64, -256, 64, 256, currentPlayer, -1, -1, 1, 1)
			temp0 += checkResult
		next
		if temp0 == 0
			object.state = 2
			object.value0 = 0
			object.frame = 2
			PlaySfx(SfxName[Swish], 0)
		end if
		break
	case 2
		object.value0++
		switch object.value0
		case 8
			object.frame = 3
			CreateTempObject(TypeName[Arrow], 0, object.xpos, object.ypos)
			if object.direction == FLIP_X
				object[tempObjectPos].xvel = -0x40000
			else
				object[tempObjectPos].xvel = 0x40000
			end if
			object[tempObjectPos].drawOrder = 1
			object[tempObjectPos].value0 = 24
			object[tempObjectPos].value2 = object.xpos
			object[tempObjectPos].direction = object.direction
			break
		case 24
			object.frame = 2
			break
		case 32
			object.value0 = 0
			object.frame = 0
			object.state = 0
			break
		end switch
		break
	end switch
end event


event ObjectDraw
	DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)
end event


event ObjectStartup
	LoadSpriteSheet("ARZ/Objects.gif")
	SpriteFrame(-16, -8, 32, 16, 1, 1)
	SpriteFrame(-16, -8, 32, 16, 1, 18)
	SpriteFrame(-16, -8, 32, 16, 1, 35)
	SpriteFrame(-16, -8, 32, 16, 1, 52)
	SetTableValue(TypeName[Arrow Launcher], DebugMode_ObjCount, DebugMode_TypesTable)
	SetTableValue(ArrowLauncher_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
	SetTableValue(ArrowLauncher_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
