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

//-------Aliases-------//
private alias 43 : TYPE_TORNADO


// Static Values

// Tables
public table Tornado_table40
	5, 32, 6, 8, 7, 8, 8, 8, 7, 8, 6, 16, 9, 32, 6, 16
end table

public table Tornado_table39
	10, 9, 11, 9, 10, 9, 11, 9, 10, 9, 11, 9, 10, 9, 11, 9
end table


event ObjectMain
	object.value4 = object.ypos
	object.drawOrder = 4
	CheckTouchRect(0, 96, screen.xcenter, screen.ysize)
	if checkResult > -1
		arrayPos0 = checkResult
		temp0 = touchscreen[arrayPos0].xpos
		temp0 -= saveRAM[39]
		temp1 = touchscreen[arrayPos0].ypos
		temp1 -= saveRAM[40]
		ATan2(temp2, temp0, temp1)
		temp2 += 16
		temp2 &= 255
		temp2 >>= 5
		switch temp2
		case 0
			inputDown.right = 1
			break
		case 1
			inputDown.right = 1
			inputDown.down = 1
			break
		case 2
			inputDown.down = 1
			break
		case 3
			inputDown.down = 1
			inputDown.left = 1
			break
		case 4
			inputDown.left = 1
			break
		case 5
			inputDown.left = 1
			inputDown.up = 1
			break
		case 6
			inputDown.up = 1
			break
		case 7
			inputDown.up = 1
			inputDown.right = 1
			break
		end switch
	end if
	switch object.state
	case 0
		if object[0].yvel < 0
			if object[0].jumpPress == 1
				object.value2 = 0x20000
				object.value3 = object.ypos
				object.state++
			end if
		end if
		break
	case 1
		object.value2 -= 0x2000
		object.ypos += object.value2
		if object.value2 < 0
			object.state++
		end if
		break
	case 2
		object.value2 -= 0x1000
		object.ypos += object.value2
		if object.ypos <= object.value3
			object.ypos = object.value3
			object.value2 = 0
			object.state = 0
		end if
		break
	case 3
		object.value2 -= 0x2000
		object.ypos += object.value2
		object.value0++
		if object.value0 == 24
			object.value2 = 0
			object.state = 0
		end if
		break
	end switch
	if object.value1 == 1
		object.xpos += SCZSetup_value35
		object.ypos += SCZSetup_value36
		if inputDown.up == 1
			object.yvel = -0x10000
		else
			object.yvel = 0
		end if
		if inputDown.down == 1
			object.yvel = 0x10000
		end if
	else
		object.yvel = 0
	end if
	object.ypos += object.yvel
	temp0 = screen.cameraY
	temp0 -= 52
	temp0 <<= 16
	if object.ypos < temp0
		object.ypos = temp0
	end if
	temp0 = screen.cameraY
	temp0 += 76
	temp0 <<= 16
	if object.ypos > temp0
		object.ypos = temp0
	end if
	temp0 = object.ypos
	object.value4 &= -0x10000
	object.value5 = object.ypos
	object.value5 &= -0x10000
	object.value5 -= object.value4
	object.ypos = object.value4
	object.value1 = 0
	foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
		temp2 = object[currentPlayer].yvel
		BoxCollisionTest(C_PLATFORM, object.entityPos, -20, -8, 20, 8, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
		if checkResult == 1
			object[currentPlayer].xpos += SCZSetup_value35
			object[currentPlayer].ypos += object.value5
			if temp2 > 0x10000
				object.value0 = 0
				object.value2 = 0x20000
				object.state = 3
			end if
			object.value1 |= 1
		end if
	next
	object.ypos = temp0
	temp0 = object[0].xpos
	temp0 -= object.xpos
	Abs(temp0)
	if temp0 > 0x100000
		if object[0].xpos > object.xpos
			temp0 = object[0].xpos
			temp0 -= object.xpos
			temp0 -= 0x100000

			object.xpos += temp0
		else
			temp0 = object[0].xpos
			temp0 -= object.xpos
			temp0 += 0x100000

			object.xpos += temp0
		end if
	end if
	temp0 = -0x100000
	temp0 += object.xpos
	temp1 = stage.curXBoundary1
	temp1 <<= 16
	if temp0 < temp1
		object.xpos = temp1
		object.xpos += 0x100000
	end if
	object.frame++
	object.frame &= 3
	if object.value7 < 2
		if stage.playerListPos == 1
			GetTableValue(object.value6, object.value8, Tornado_table39)
			object.value8++
			GetTableValue(object.value7, object.value8, Tornado_table39)
			object.value8++
		else
			GetTableValue(object.value6, object.value8, Tornado_table40)
			object.value8++
			GetTableValue(object.value7, object.value8, Tornado_table40)
			object.value8++
		end if
		object.value8 &= 15
	else
		object.value7--
	end if
end event


event ObjectDraw
	DrawSprite(object.frame)
	DrawSprite(4)
	DrawSprite(object.value6)
end event


event ObjectStartup
	LoadSpriteSheet("SCZ/Objects.gif")
	SpriteFrame(21, 8, 4, 24, 378, 215) //Propeller 1
	SpriteFrame(21, 11, 4, 18, 383, 218) //Propeller 2
	SpriteFrame(21, 16, 4, 8, 388, 223) //Propeller 3
	SpriteFrame(21, 11, 4, 18, 393, 218) //Propeller 4
	
	SpriteFrame(-95, -16, 116, 64, 261, 191) //Plane Body
	
	SpriteFrame(-45, -8, 21, 16, 261, 174) //Tails Face
	SpriteFrame(-45, -8, 21, 16, 283, 174)
	SpriteFrame(-45, -8, 21, 16, 305, 174)
	SpriteFrame(-45, -8, 21, 16, 327, 174)
	SpriteFrame(-47, -8, 23, 16, 349, 174)
	
	SpriteFrame(-50, -8, 24, 16, 294, 157) //Sonic Face
	SpriteFrame(-50, -8, 24, 16, 319, 157)
	object[1].type = TypeName[Blank Object]
	playerCount = 1
	if stage.playerListPos == 1
		object[0].ypos += 0x40000
	end if
end event

event RSDKDraw
	DrawSprite(0)
end event

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