

//-------Aliases-------//
private alias object.value0 : object.red
private alias object.value1 : object.blu
private alias object.value2 : object.grn

private alias object.value10 : object.store
private alias object.value20 : object.process

public alias saveRAM[294] : saved.graphics

public alias saveRAM[8000] : saved.Rayshoo

// Static Values

// Tables

reserve function processColor
reserve function actualColor

event ObjectMain
	LoadPalette("TailsPals.act", 5, 0, 0, 256)		
	if saved.Rayshoo == 1
		SetPaletteEntry(0, 89, 0x400000)
		SetPaletteEntry(0, 94, 0x800000)
		SetPaletteEntry(0, 95, 0xE00000)
		CheckCurrentStageFolder("Zone04")
		temp0 = checkResult
		CheckCurrentStageFolder("BossRush")
		temp0 |= checkResult		
		if temp0 == 1
			CopyPalette(1, 14, 1, 89, 1)
			CopyPalette(1, 13, 1, 94, 1)
			CopyPalette(1, 12, 1, 95, 1)			
		end if
	end if

	if stage.playerListPos == 0
		if saved.sonicpal == 1
			SetPaletteEntry(0, 11, 0xD84800)
			SetPaletteEntry(0, 14, 0x900000)
		end if
	end if

	//we filled up the global palette we were fucked
	//I gotta redo this shit later
	if stage.playerListPos == 5
		switch saved.amyPal
		default
			SetPaletteEntry(0, 96, 0xB49000)
			SetPaletteEntry(0, 97, 0xFCD800)
			SetPaletteEntry(0, 98, 0x242448)
			break
		case 1	
			SetPaletteEntry(0, 13, 0x802040)
			SetPaletteEntry(0, 78, 0x404040)
			SetPaletteEntry(0, 96, 0xA06040)
			SetPaletteEntry(0, 97, 0xE0A080)
			SetPaletteEntry(0, 98, 0x404040)		
			break
		case 2
			SetPaletteEntry(0, 11, 0xC06000)	
			SetPaletteEntry(0, 13, 0x802060)
			SetPaletteEntry(0, 78, 0x802060)
			SetPaletteEntry(0, 79, 0xE060E0)
			SetPaletteEntry(0, 96, 0xC06000)
			SetPaletteEntry(0, 97, 0xE0A080)
			SetPaletteEntry(0, 98, 0x600080)		
			break		
		end switch
	end if

	temp0 = 0
	while temp0 < 8
		temp1 = 0
		while temp1 < 256
			GetPaletteEntry(temp0, temp1, object.store)			
			CallFunction(processColor)			
			SetPaletteEntry(temp0, temp1, object.store)
			temp1++
		loop
	temp0++
	loop	
	
	switch object.propertyValue
		case 0
			color1 = 32
			color2 = 64
			color3 = 96
			color4 = 128
			color5 = 160
			color6 = 192
			color7 = 224
			break
		case 1
			color1 = 36
			color2 = 72
			color3 = 108
			color4 = 144
			color5 = 180
			color6 = 216
			color7 = 252
			break
		case 2
			color1 = 52
			color2 = 87
			color3 = 116
			color4 = 144
			color5 = 172
			color6 = 206
			color7 = 255
			break			
	end switch

	temp0 = 0
	switch stage.playerListPos
	case 0
	case 3
		temp1 = PlayerObject_SonicSuperPal
		temp2 = PlayerObject_SonicSuperAltPal
		temp3 = 72
		switch saved.tailspal
		case 0
			CopyPalette(5, 8, 0, 90, 4) //deltaconduit	
			break
		case 1
			CopyPalette(5, 4, 0, 90, 4) //sonic 2
			break
		case 2
			CopyPalette(5, 0, 0, 90, 4) //artwork
			break
		case 3
			CopyPalette(5, 12, 0, 90, 4) //artwork
			break		
		end switch		
		break
	case 1
		switch saved.tailspal
		case 0
			temp1 = PlayerObject_TailsSuperPal
			temp2 = PlayerObject_TailsSuperAltPal
			break
		case 1
			temp1 = PlayerObject_TailsS2SuperPal
			temp2 = PlayerObject_TailsS2SuperAltPal		
			break
		case 2
			temp1 = PlayerObject_TailsArtSuperPal
			temp2 = PlayerObject_TailsArtSuperAltPa		
			break
		case 3
			temp1 = PlayerObject_TailsS1SuperPal
			temp2 = PlayerObject_TailsS1SuperAltPal		
			break		
		end switch
		temp3 = 56
		break
	case 2
	case 4
		switch saved.knuxpal
		case 0
			temp1 = PlayerObject_KnuxDeltaSuperPal
			temp2 = PlayerObject_KnuxDeltaSuperAlt
			break
		case 1
			temp1 = PlayerObject_KnuxSuperPal
			temp2 = PlayerObject_KnuxSuperAltPal		
			break		
		end switch
		temp3 = 56
		switch saved.tailspal
		case 0
			CopyPalette(5, 8, 0, 90, 4) //deltaconduit	
			break
		case 1
			CopyPalette(5, 4, 0, 90, 4) //sonic 2
			break
		case 2
			CopyPalette(5, 0, 0, 90, 4) //artwork
			break
		case 3
			CopyPalette(5, 12, 0, 90, 4) //artwork
			break		
		end switch			
		break
	case 5
		temp1 = PlayerObject_AmySuperPal
		temp2 = PlayerObject_AmySuperAltPal
		temp3 = 52
		break
	case 7
		switch saved.mightypal
		case 0
			temp1 = PlayerObject_MightySuperPal
			temp2 = PlayerObject_MightySuperAlt
			break
		case 1
			temp1 = PlayerObject_MightySuperBlooPal
			temp2 = PlayerObject_MightySuperBlooAlt
			break		
		end switch
		temp3 = 56
		break	
	case 8
		temp1 = PlayerObject_RaySuperPal
		temp2 = PlayerObject_RaySuperAlt
		temp3 = 64
		break		
	end switch	
	
	while temp0 < temp3
		GetTableValue(object.store, temp0, temp1)
		CallFunction(processColor)
		SetTableValue(object.store, temp0, temp1)
				
		GetTableValue(object.store, temp0, temp2)
		CallFunction(processColor)
		SetTableValue(object.store, temp0, temp2)
		temp0++
	loop
	
	object.type = TypeName[Blank Object]
end event

function processColor
	switch object.propertyValue
		case 0 //mobile
			object.store &= 0xE0E0E0
			break
		case 1 //emulated
			object.red = object.store
			object.red &= 0xE00000
			object.red >>= 3
			object.red *= 9
			
			object.blu = object.store
			object.blu &= 0x00E000
			object.blu >>= 3
			object.blu *= 9
			
			object.grn = object.store
			object.grn &= 0x0000E0
			object.grn >>= 3
			object.grn *= 9
			
			object.store = object.red
			object.store += object.blu
			object.store += object.grn
			break
		case 2 //hardware			
			object.process = object.store
			object.process &= 0xE00000
			object.process >>= 21
			CallFunction(actualColor)
			object.red = object.process
			object.red <<= 16				
			
			object.process = object.store
			object.process &= 0x00E000
			object.process >>= 13
			CallFunction(actualColor)
			object.blu = object.process
			object.blu <<= 8
			
			object.process = object.store
			object.process &= 0xE0
			object.process >>= 5
			CallFunction(actualColor)
			object.grn = object.process				
			
			object.store = object.red
			object.store += object.blu
			object.store += object.grn
			break
	end switch
end function

function actualColor
	switch object.process
		case 0
			object.process = 0
			break
		case 1
			object.process = 52
			break
		case 2
			object.process = 87
			break
		case 3
			object.process = 116
			break
		case 4
			object.process = 144
			break
		case 5
			object.process = 172
			break
		case 6
			object.process = 206
			break
		case 7
			object.process = 255
			break
	end switch
end function


event ObjectDraw
end event


event ObjectStartup
	CreateTempObject(TypeName[Palette Police], saved.graphics, 0, 0)
	object[tempObjectPos].priority = PRIORITY_ACTIVE_PAUSED
end event

event RSDKDraw
	DrawSprite(0)
end event

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