

//-------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
public alias saveRAM[8001] : saved.knuxpal
public alias saveRAM[8020] : saved.tailspal
public alias saveRAM[8021] : saved.mightypal
public alias saveRAM[8022] : saved.sonicpal
public alias saveRAM[8025] : saved.amyPal

// Static Values

// Tables

reserve function processColor
reserve function actualColor

event ObjectMain
	switch stage.activelist 
	case PRESENTATION_STAGE
		switch stage.listPos
		case 3
			if saved.Rayshoo == 1
				SetPaletteEntry(0, 125, 0x400000)
				SetPaletteEntry(0, 126, 0x800000)
				SetPaletteEntry(0, 127, 0xE00000)
			end if		
			break		
		case 8
			if saved.Rayshoo == 1
				SetPaletteEntry(0, 209, 0x400000)
				SetPaletteEntry(0, 210, 0x800000)
				SetPaletteEntry(0, 211, 0xE00000)
			end if
			break
		end switch
		break
	case SPECIAL_STAGE
		if saved.Rayshoo == 1
			SetPaletteEntry(0, 89, 0x400000)
			SetPaletteEntry(0, 94, 0x800000)
			SetPaletteEntry(0, 95, 0xE00000)
		end if
		switch stage.playerListPos 
		case 0
			LoadPalette("TailsPals.act", 5, 0, 0, 256)			
			if saved.sonicpal == 1
				CopyPalette(5, 24, 0, 2, 4)
				SetPaletteEntry(0, 11, 0xD84800)
				SetPaletteEntry(0, 14, 0x900000)
			end if
			break		
		case 1
			LoadPalette("TailsPals.act", 5, 0, 0, 256)	
			switch saved.tailspal
			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 2
			LoadPalette("TailsPals.act", 5, 0, 0, 256)			
			if saved.knuxpal == 1
				CopyPalette(5, 16, 0, 60, 4)
			end if
			break
		case 5
			switch saved.amyPal
			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	
			break
		case 7
			LoadPalette("TailsPals.act", 5, 0, 0, 256)			
			if saved.mightypal == 1
				CopyPalette(5, 20, 0, 68, 4)
			end if
			break			
		end switch
		break
	end switch

	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
	
	
	
	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
