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

//-------Aliases-------//
private alias 83 : TYPE_EGGMANLASER


// Static Values
public value EggmanLaser_value52 = 0;

// Tables

event ObjectMain
	switch object.state
	case 0
		object.value1 = object.xpos
		object.value1 -= 0x600000
		object.value2 = object.xpos
		object.value2 += 0x600000
		object.value4 = 6
		object.drawOrder = 4
		object.inkEffect = INK_ADD
		CheckCurrentStageFolder("Zone11")
		if checkResult == 1
			object.value9 = 196
		else
			object.value9 = 192
		end if
		object.value6 = 8
	case 1
		object.value0++
		if object.value0 >= 90
			object.value0 = 0
			object.state = 2
		end if
		break
	case 2
		object.ypos += 0x4000
		object.value0++
		if object.value0 >= 96
			object.value0 = 0
			object[-1].type = TypeName[Eggman Dispenser]
			object.state = 3
			if object[0].xpos < object.xpos
				object.xvel = -0x10000
			else
				object.xvel = 0x10000
			end if
		end if
		break
	case 3
		object.value0++
		if object.value0 > 112
			object.value0 = 0
			object.state = 4
		else
			object.xpos += object.xvel
			if object.xvel > 0
				if object.xpos >= object.value2
					FlipSign(object.xvel)
				end if
			else
				if object.xpos <= object.value1
					FlipSign(object.xvel)
				end if
			end if
		end if
		break
	case 4
		object.animationTimer++
		if object.animationTimer == 6
			object.animationTimer = 0
			object.frame++
			if object.frame == 3
				object.state = 5
			end if
		end if
		break
	case 5
		object.value0++
		if object.value0 > 26
			object.value0 = 0
			object.state = 6
		end if
		break
	case 6
		object.value3 += 0x10000
		object.value0++
		if object.value0 > 12
			object.value0 = 0
			object.state = 7
		end if
		break
	case 7
		object.value0++
		if object.value0 > 60
			object.value0 = 15
			object.animationTimer = 15
			object.value5 = 8
			object.alpha = 512
			object.state = 8
		end if
		break
	case 8
		if object.animationTimer > 2
			object.value4 = 6
		else
			object.value4 = 5
		end if
		object.animationTimer--
		if object.animationTimer == 0
			object.value0--
			if object.value0 == 0
				object.state = 9
			else
				object.animationTimer = object.value0
				if object.value0 == 13
					PlaySfx(SfxName[Laser Charge], 0)
				end if
			end if
		end if
		break
	case 9
		object.value4 -= 5
		object.value4 ^= 1
		object.value4 += 5
		object.value0++
		if object.value0 > 64
			object.value0 = 0
			object.alpha = 160
			object.state = 10
			object.value4 = 5
			PlaySfx(SfxName[Large Laser], 0)
		end if
		break
	case 10
		object.value5 += 32
		if object.value5 >= 128
			object.alpha += 32
			object.value5 = 167
			object.value0 = 0
			if object[0].xpos < object.xpos
				object.xvel = -0x10000
			else
				object.xvel = 0x10000
			end if
			object.state = 11
		end if
		break
	case 11
		object.value0++
		object.alpha--
		if object.value0 > 112
			object.value0 = 0
			object.state = 12
		else
			object.xpos += object.xvel
			if object.xvel > 0
				if object.xpos >= object.value2
					object.xvel = 0
				end if
			else
				if object.xpos <= object.value1
					object.xvel = 0
				end if
			end if
		end if
		break
	case 12
		object.value3 -= 0x10000
		object.alpha -= 24
		object.value0++
		if object.value0 > 12
			object.value0 = 0
			object.animationTimer = 0
			object.state = 13
		end if
		break
	case 13
		object.animationTimer++
		if object.animationTimer == 6
			object.animationTimer = 0
			object.frame--
			if object.frame == 0
				if object[0].xpos < object.xpos
					object.xvel = -0x10000
				else
					object.xvel = 0x10000
				end if
				object.state = 3
			end if
		end if
		break
	case 14
		if object.alpha > 0
			object.alpha -= 24
		end if
		object.value0++
		if object.value0 >= 180
			object.value0 = 0
			object.value8 = 2
			object.state = 15
		end if
		break
	case 15
		temp0 = tileLayer[0].ysize
		temp0 <<= 7
		stage.newYBoundary2 = temp0
		temp0 <<= 16
		stage.deathBoundary = temp0
		break
	end switch
	if object.value6 != 0
		if object.value7 > 0
			object.value7--
			GetBit(temp0, object.value7, 0)
			if temp0 == 1
				SetPaletteEntry(0, object.value9, 0xE0E0E0)
			else
				SetPaletteEntry(0, object.value9, 0)
			end if
		end if
		if object.value3 > 0
			foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
				BoxCollisionTest(C_TOUCH, object.entityPos, -16, 0, 16, 16, currentPlayer, object[currentPlayer].value40, object[currentPlayer].value38, object[currentPlayer].value41, object[currentPlayer].value39)
				temp0 = checkResult
				if checkResult == 1
					if object.value7 == 0
						CallFunction(PlayerObject_CheckHit)
					else
						checkResult = 0
					end if
				else
					CallFunction(BossTarget)
				end if
				if checkResult == 1
					object.value6--
					if object.value6 == 0
						player.score += 1000
						object.value8 = 1
						object.value0 = 0
						object.state = 14
						object[-4].state = 2
						object[-3].value0 = 240
						object[-2].value0 = 240
						object[-1].value8 = 1
						object[-1].value0 = 0
						object[-1].state = 14
						CreateTempObject(TypeName[Explosion], 0, object[+1].xpos, object[+1].ypos)
						object[+1].state = 2
						CreateTempObject(TypeName[Explosion], 0, object[+2].xpos, object[+2].ypos)
						object[+2].state = 2
						CreateTempObject(TypeName[Explosion], 0, object[+3].xpos, object[+3].ypos)
						object[+3].state = 2
						StopSfx(SfxName[Laser Charge])
						StopSfx(SfxName[Large Laser])
					else
						object.value7 = 32
						PlaySfx(SfxName[Boss Hit], 0)
					end if
				end if
				if temp0 == 0
					if object.state == 11
						BoxCollisionTest(C_TOUCH, object.entityPos, -16, 0, 16, 168, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
						if checkResult == 1
							CallFunction(PlayerObject_Hit)
						end if
					end if
				end if
			next
		end if
	end if
	if object.value8 == 1
		temp0 = oscillation
		temp0 &= 7
		if temp0 == 0
			Rand(temp0, 96)
			temp0 -= 48
			temp0 <<= 16
			temp0 += object.xpos
			Rand(temp1, 48)
			temp1 -= 24
			temp1 <<= 16
			temp1 += object.ypos
			CreateTempObject(TypeName[Explosion], 0, temp0, temp1)
			object[tempObjectPos].drawOrder = 5
			PlaySfx(SfxName[Explosion], 0)
		end if
	end if
end event


event ObjectDraw
	if object.value8 < 2
		temp1 = object.ypos
		temp1 += object.value3
		DrawSpriteXY(4, object.xpos, temp1)
		DrawSprite(object.frame)
		temp0 = 168
		temp0 -= object.value5
		EditFrame(5, -16, 0, 32, object.value5, EggmanLaser_value52, temp0)
		DrawSpriteFX(object.value4, FX_INK, object.xpos, temp1)
	end if
end event


event ObjectStartup
	CheckCurrentStageFolder("Zone11")
	if checkResult == 1
		LoadSpriteSheet("SCZ/Objects.gif")
		SpriteFrame(-32, -8, 64, 23, 311, 1)
		SpriteFrame(-32, -8, 64, 22, 311, 25)
		SpriteFrame(-32, -8, 64, 19, 311, 48)
		SpriteFrame(-32, -8, 64, 13, 311, 68)
		SpriteFrame(-16, -8, 32, 16, 376, 1)
		SpriteFrame(-16, 0, 32, 168, 261, 1)
		SpriteFrame(0, 0, 1, 1, 261, 168)
		EggmanLaser_value52 = 261
	else
		LoadSpriteSheet("MBZ/Objects.gif")
		SpriteFrame(-32, -8, 64, 23, 513, 139)
		SpriteFrame(-32, -8, 64, 22, 578, 139)
		SpriteFrame(-32, -8, 64, 19, 643, 139)
		SpriteFrame(-32, -8, 64, 13, 578, 162)
		SpriteFrame(-16, -8, 32, 16, 397, 1)
		SpriteFrame(-16, 0, 32, 168, 480, 1)
		SpriteFrame(0, 0, 1, 1, 480, 168)
		EggmanLaser_value52 = 480
	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
