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

//-------Aliases-------//
private alias 40 : TYPE_MBZSETUP

// Function declarations
reserve function MBZSetup_Function97
reserve function MBZSetup_Function98
reserve function MBZSetup_Function99

// Static Values
public value ZoneSetup_value33 = 0;
public value ZoneSetup_value34 = 0;
public value ZoneSetup_value35 = 0;
public value ZoneSetup_value36 = 0;
public value ZoneSetup_value37 = 0;
public value ZoneSetup_value38 = 0;
public value ZoneSetup_value39 = 0;
public value ZoneSetup_value40 = 0;
public value ZoneSetup_value41 = 0;

// Tables
public table MBZSetup_table39
	0xE00000, 0xE06000, 0xE0A000, 0xE0E000, 0xE0E000, 0xE00000, 0xE06000, 0xE0A000, 0xE0C020, 0xE0E000, 0xE00000, 0xE06000, 0xE06000, 0xE0E040, 0xE0E080, 0xE02000
	0xE04000, 0xE08000, 0xE0E060, 0xE0E0A0, 0xE0E080, 0xE02000, 0xE06000, 0xE0E040, 0xE0C020, 0xE0E000, 0xE00000, 0xE06000, 0xE06000, 0xE0C020, 0xE0E000, 0xE00000
	0xE00000, 0xE06000, 0xE0A000, 0xE0E000, 0xE0C000, 0xC00000, 0xE04000, 0xE08000, 0xE06000, 0xC0A000, 0xA00000, 0xE02000, 0xC00000, 0xC04000, 0xE08000, 0x800000
	0xA00000, 0xE02000, 0xE06000, 0xC0A000, 0xE0C000, 0xC00000, 0xE04000, 0xE08000, 0xE0A000, 0xE0E000, 0xE00000, 0xE06000, 0xE06000, 0xE0A000, 0xE0E000, 0xE00000
end table

public table MBZSetup_table38
	1, 2, 1, 3, 1, 2, 2, 1, 2, 3, 1, 2, 1, 2, 0, 0
	2, 0, 3, 2, 2, 3, 2, 2, 1, 3, 0, 0, 1, 0, 1, 3
	1, 2, 1, 3, 1, 2, 2, 1, 2, 3, 1, 2, 1, 2, 0, 0
	2, 0, 3, 2, 2, 3, 2, 2, 1, 3, 0, 0, 1, 0, 1, 3
end table

function MBZSetup_Function97
	if object.animation != ANI_SKIDDING
		temp7 = 1
	else
		temp7 = 0
	end if
	CallFunction(PlayerObject_HandleMovement)
	if object.gravity == GRAVITY_AIR
		object.state = PlayerObject_HandleAir
		CallFunction(PlayerObject_HandleAirMovement)
	else
		CallFunction(PlayerObject_ResetOnFloor)
		if object.speed == 0
			if object.collisionMode == CMODE_FLOOR
				if object.value1 < 240
					object.animation = ANI_STOPPED
					object.value1++
				else
					object.animation = ANI_WAITING
					if stage.playerListPos == 2
						object.value1++
						if object.value1 == 834
							object.value1 = 0
							object.animation = ANI_STOPPED
						end if
					end if
				end if
			end if
		else
			object.value1 = 0
			if object.speed > 0
				if object.speed < 0x5F5C2
					object.animation = ANI_WALKING
					CallFunction(PlayerObject_WalkAnimSpd)
				else
					if object.speed > 0x9FFFF
						object.animation = ANI_PEELOUT
					else
						object.animation = ANI_RUNNING
					end if
					CallFunction(PlayerObject_RunAnimSpd)
				end if
			else
				if object.speed > -0x5F5C2
					object.animation = ANI_WALKING
					CallFunction(PlayerObject_WalkAnimSpd)
				else
					if object.speed < -0x9FFFF
						object.animation = ANI_PEELOUT
					else
						object.animation = ANI_RUNNING
					end if
					CallFunction(PlayerObject_RunAnimSpd)
				end if
			end if
		end if
		if object.value14 > 0
			if temp7 == 1
				PlaySfx(SfxName[Skidding], 0)
			end if
			object.animation = ANI_SKIDDING
			object.animationSpeed = 0
			object.value14--
			if ringTimer == 0
				CreateTempObject(TypeName[Dust Puff], 0, object.xpos, object.ypos)
				object[tempObjectPos].iypos += object.collisionBottom
				object[tempObjectPos].drawOrder = object.value18
			end if
			if object.speed > 0
				object.direction = FLIP_NONE
			else
				object.direction = FLIP_X
			end if
		end if
		if object.collisionMode == CMODE_FLOOR
			if object.pushing == 2
				object.animation = ANI_PUSHING
				object.animationSpeed = 0
			end if
		end if
		if object.jumpPress == 1
			CallFunction(PlayerObject_StartJump)
		end if
	end if
end function


function MBZSetup_Function98
	CheckEqual(object[25].type, TypeName[Music Event])
	temp0 = checkResult
	CheckEqual(object[25].propertyValue, 2)
	temp0 &= checkResult
	CheckEqual(stage.musicFlag, 0)
	temp0 &= checkResult
	if temp0 == 0
		switch music.currentTrack
		case 0
			SetMusicTrack("Invincibility_F.ogg", 2, 0x76E4)
			SwapMusicTrack("MarathonBase_F.ogg", 0, 0x7AA16, 0x1EF0)
			break
		case 2
			SetMusicTrack("MarathonBase_F.ogg", 0, 0x7AA16)
			SwapMusicTrack("Invincibility_F.ogg", 2, 0x76E4, 0x1F40)
			break
		case 4
			SetMusicTrack("MarathonBase_F.ogg", 0, 0x7AA16)
			SetMusicTrack("Invincibility_F.ogg", 2, 0x76E4)
			break
		end switch
	else
		stage.musicFlag = 1
	end if
end function


function MBZSetup_Function99
	CheckEqual(object[25].type, TypeName[Music Event])
	temp0 = checkResult
	CheckEqual(object[25].propertyValue, 2)
	temp0 &= checkResult
	CheckEqual(stage.musicFlag, 0)
	temp0 &= checkResult
	if temp0 == 0
		switch music.currentTrack
		case 0
			SetMusicTrack("Invincibility.ogg", 2, 0x9A68)
			SwapMusicTrack("MarathonBase.ogg", 0, 0x9B442, 0x316A)
			break
		case 2
			SetMusicTrack("MarathonBase.ogg", 0, 0x9B442)
			SwapMusicTrack("Invincibility.ogg", 2, 0x9A68, 0x30D4)
			break
		case 4
			SetMusicTrack("MarathonBase.ogg", 0, 0x9B442)
			SetMusicTrack("Invincibility.ogg", 2, 0x9A68)
			break
		end switch
	else
		stage.musicFlag = 2
	end if
end function


event ObjectMain
	object.value1++
	if object.value1 == 12
		object.value1 = 0
		object.value3 += 4
		object.value3 &= 63
		GetTableValue(temp0, object.value3, MBZSetup_table39)
		SetPaletteEntry(0, 96, temp0)
		object.value4 += 4
		object.value4 &= 63
		GetTableValue(temp0, object.value4, MBZSetup_table39)
		SetPaletteEntry(0, 97, temp0)
		object.value5 += 4
		object.value5 &= 63
		GetTableValue(temp0, object.value5, MBZSetup_table39)
		SetPaletteEntry(0, 98, temp0)
		object.value6 += 4
		object.value6 &= 63
		GetTableValue(temp0, object.value6, MBZSetup_table39)
		SetPaletteEntry(0, 99, temp0)
	end if
	object.value2++
	if object.value2 == 4
		object.value2 = 0
		RotatePalette(0, 100, 105, 0)
	end if
	if object.value7 < 2
		temp0 = object.value8
		temp0 += 462
		Copy16x16Tile(408, temp0)
		temp0++
		Copy16x16Tile(409, temp0)
		temp0++
		Copy16x16Tile(410, temp0)
		temp0++
		Copy16x16Tile(411, temp0)
		temp0 += 21
		Copy16x16Tile(412, temp0)
		temp0++
		Copy16x16Tile(413, temp0)
		temp0++
		Copy16x16Tile(414, temp0)
		temp0++
		Copy16x16Tile(415, temp0)
		object.value7 = 18
		object.value8 += 4
		object.value8 %= 24
	else
		object.value7--
	end if
	object.value9++
	if object.value9 > 7
		tileLayer[1].deformationOffset++
		object.value9 = 0
	end if
	GetTableValue(temp0, 21, StageSetup_table9)
	if temp0 == 0
		ZoneSetup_value41++
		ZoneSetup_value41 &= 3
	end if
	temp0 = oscillation
	temp0 &= 15
	if temp0 > 11
		temp0 = 5
	end if
	temp0 += 41
	animalType1 = temp0
	animalType2 = temp0
	foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
		if object[currentPlayer].animation == ANI_TWIRL
			object[currentPlayer].frame %= 24
		end if
		temp1 = object[currentPlayer].xpos
		temp1 >>= 16
		temp2 = object[currentPlayer].ypos
		temp2 >>= 16
		temp2 += 6
		Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEB)
		switch temp0
		case 1
			if object[currentPlayer].yvel > -1
				object[currentPlayer].state = MBZSetup_Function97
				if object[currentPlayer].animation == ANI_JUMPING
					object[currentPlayer].animation = ANI_WALKING
				end if
				object[currentPlayer].gravity = GRAVITY_GROUND
				object[currentPlayer].yvel = 0
				object[currentPlayer].ypos += 0x10000
			end if
			break
		case 3
			if object[currentPlayer].value37 != 3
				CallFunction(PlayerObject_Hit)
			end if
			break
		end switch
	next
	if object.value10 == 1
		if object.alpha < 128
			object.alpha += 4
		end if
	else
		if object.alpha > 0
			object.alpha -= 4
		end if
	end if
	object.value10 = 0
end event


event ObjectDraw
	DrawRect(0, 0, 512, 240, 0, 32, 80, object.alpha)
end event


event ObjectStartup
	SetMusicTrack("DeathEgg.ogg", 0, 1)
	SetPaletteEntry(0, 192, 0)
	object[10].type = TypeName[MBZ Setup]
	object[10].priority = PRIORITY_ACTIVE
	object[10].value3 = 0
	object[10].value4 = 1
	object[10].value5 = 2
	object[10].value6 = 3
	object[10].drawOrder = 1
	arrayPos0 = 0
	while arrayPos0 < 576
		temp0 = arrayPos0
		temp0 &= 63
		GetTableValue(stage[arrayPos0].deformationData2, temp0, MBZSetup_table38)
		arrayPos0++
	loop
	ZoneSetup_value33 = 0
	ZoneSetup_value34 = 0
	ZoneSetup_value35 = 0
	ZoneSetup_value36 = 0
	ZoneSetup_value37 = 0
	ZoneSetup_value38 = 0
	ZoneSetup_value39 = 0
	ZoneSetup_value40 = 0
end event

event RSDKDraw
	DrawSprite(0)
end event

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