private static void LoadPalette(On.RoomCamera.orig_LoadPalette orig, RoomCamera self, int pal, ref Texture2D texture) { orig.Invoke(self, pal, ref texture); if (Downpour.paletteChange) { Room room = null; if (self.loadingRoom != null) { room = self.loadingRoom; } else if (self.room != null) { room = self.room; } if (room != null) { //Modify paletteTexture before orig is called. Color[] origPalette = texture.GetPixels(); Color[] modifiedPalette = new Color[origPalette.Length]; float darknessFade = 1f - Mathf.Lerp(0f, texture.GetPixel(30, 7).r, room.roomSettings.RainIntensity); if (self.game.IsArenaSession) { Color[] colors = texture.GetPixels(); Color[] newColors = new Color[colors.Length]; Color[] exterior1Cols = Downpour.snowExt1.GetPixels(); Color[] interior1Cols = Downpour.snowInt1.GetPixels(); for (int i = 0; i < colors.Length; i++) { //Rain if (!Downpour.snow) { newColors[i] = Custom.Desaturate(colors[i], darkness * 0.05f); newColors[i] = Color.Lerp(newColors[i], new Color(0f, 0f, 0f), darkness * 0.05f); texture.SetPixels(newColors); } //Snow else { if (RainFall.rainList.Contains(self.loadingRoom.abstractRoom.name)) { newColors[i] = colors[i]; exterior1Cols[i] = Color.Lerp(exterior1Cols[i], new Color(0f, 0f, 0f), 0f); newColors[i] = Custom.Screen(newColors[i], exterior1Cols[i]); texture.SetPixels(newColors); } else { newColors[i] = colors[i]; newColors[i] = Custom.Screen(newColors[i], interior1Cols[i]); texture.SetPixels(newColors); } } } } else { if (Downpour.snow) { //Determine palette needed if (Downpour.rainRegions.Contains(room.world.region.name)) { //Exterior if (RainFall.rainList.Contains(room.abstractRoom.name)) { Color[] snowPalette = Downpour.snowExt1.GetPixels(); for (int i = 0; i < modifiedPalette.Length; i++) { modifiedPalette[i] = origPalette[i]; modifiedPalette[i] = Custom.Desaturate(modifiedPalette[i], Mathf.Lerp(0.45f, 0f, darknessFade)); snowPalette[i] = Color.Lerp(snowPalette[i], new Color(0f, 0f, 0f), darknessFade); modifiedPalette[i] = Custom.Screen(modifiedPalette[i], snowPalette[i]); } } //Interior else { Color[] snowPalette = Downpour.snowInt1.GetPixels(); for (int i = 0; i < modifiedPalette.Length; i++) { modifiedPalette[i] = origPalette[i]; modifiedPalette[i] = Custom.Desaturate(modifiedPalette[i], Mathf.Lerp(0.45f, 0f, darknessFade)); snowPalette[i] = Color.Lerp(snowPalette[i], new Color(0f, 0f, 0f), darknessFade); modifiedPalette[i] = Custom.Screen(modifiedPalette[i], snowPalette[i]); } } texture.SetPixels(modifiedPalette); //Shortcut Symbol } } else { Color[] colors = texture.GetPixels(); Color[] newColors = new Color[colors.Length]; for (int i = 0; i < colors.Length; i++) { newColors[i] = Custom.Desaturate(colors[i], darkness * 0.05f); newColors[i] = Color.Lerp(newColors[i], new Color(0f, 0f, 0f), darkness * 0.05f); } texture.SetPixels(newColors); } } } } }