Welcome to Data Crystal's new home! Data Crystal is now part of the TCRF family (sort of).
The wiki has recently moved; please report any issues in Discord. Pardon the dust.

EarthBound/ASM/Palette Routines: Difference between revisions

From Data Crystal
Jump to navigation Jump to search
Line 32: Line 32:
==<tt>$C00480-$C005E6</tt>: Adjust sprite palette colors for map palette<span class="anchor" id="$C00480"></span>==
==<tt>$C00480-$C005E6</tt>: Adjust sprite palette colors for map palette<span class="anchor" id="$C00480"></span>==


Adjusts all sprite palettes based on the color differences between the current map palette and the default map (Onett daytime) palette.
Adjusts all sprite palettes based on the color differences between the current map palette and the default map palette ([[EarthBound:Map_Data:Global_Tileset/Palette_Table#Onett|Onett daytime palette]]).


Calculates color averages for the current map palette at <tt>$7E0240</tt> using the subroutine at [[#$C00391|<tt>$C00391</tt>]]. Then compares the averages with the default map palette averages stored at [[EarthBound:Palette_Memory#$7E43D6|<tt>$7E43D6</tt>]], [[EarthBound:Palette_Memory#$7E43D8|<tt>$7E43D8</tt>]], and [[EarthBound:Palette_Memory#$7E43DA|<tt>$7E43DA</tt>]], and computes a comparison ratio using the formula <code>ratio = current_color_average * 8 / default_color_average</code>.
Calculates color averages for the current map palette at <tt>$7E0240</tt> using the subroutine at [[#$C00391|<tt>$C00391</tt>]]. Then compares the averages with the default map palette averages stored at [[EarthBound:Palette_Memory#$7E43D6|<tt>$7E43D6</tt>]], [[EarthBound:Palette_Memory#$7E43D8|<tt>$7E43D8</tt>]], and [[EarthBound:Palette_Memory#$7E43DA|<tt>$7E43DA</tt>]], and computes a comparison ratio using the formula <code>ratio = current_color_average * 8 / default_color_average</code>.

Revision as of 20:05, 17 July 2023

This is a sub-page of EarthBound/ASM.

$C0023F-$C0030E: Load map palette animation

First checks if the currently loaded map palette is animated, as indicated by a non-zero Palette Animation Index and a non-zero Animation Number of Palettes for that animation index, and sets the Animation Palette Active Flag accordingly in WRAM. If the palette is animated, loads Decompressed Map Animation Palettes, Animation Palette Frame Durations, Animation Palette Remaining Frames, and Animation Palette Number to WRAM.

$C0030F-$C0035A: Iterate map palette animation frame

Decrements Animation Palette Remaining Frames, and if zero, updates WRAM (Animation Palette Number and Animation Palette Remaining Frames) for the next animation palette and calls the subroutine at $C0A1F2 to load the next palette.

$C00391-$C00433: Calculate color averages for map palette

For the given map palette, averages out all the non-zero red values, all the non-zero green values, and all the non-zero blue values from all colors in all 6 subpalettes of the map palette. Stores the results to WRAM at $7E43D0, $7E43D2, and $7E43D4 respectively.

Inputs

  • accumulator: Map palette data pointer

$C00434-$C0047F: Cap palette color adjustment

For the given unadjusted and adjusted color values (single red, green, or blue value), determines a new adjusted color value that is at most 6 different from the unadjusted. Used by the subroutine at $C00480 to limit the difference made by sprite palette adjustements.

Inputs

  • accumulator: Original unadjusted color value (red, green, or blue)
  • x: Adjusted color value

Outputs

  • accumulator: Capped adjusted color value

$C00480-$C005E6: Adjust sprite palette colors for map palette

Adjusts all sprite palettes based on the color differences between the current map palette and the default map palette (Onett daytime palette).

Calculates color averages for the current map palette at $7E0240 using the subroutine at $C00391. Then compares the averages with the default map palette averages stored at $7E43D6, $7E43D8, and $7E43DA, and computes a comparison ratio using the formula ratio = current_color_average * 8 / default_color_average.

Then for every single color in the sprite palettes ($7E0300-$7E03FF), individually multiplies each of red, green, and blue by the comparison ratio for that color component (or if red, green, and blue components are all equal, multiplies them by the average of the comparison ratios) to calculate an adjusted color component. Finally caps the adjustment to each color component using the subroutine at $C00434, and writes the adjusted color components back to the sprite palette.

$C005E7-$C00629: Calculate color averages for default map palette

Calculates color averages for the default map palette (the Onett daytime palette). Loads the palette as the current map palette, calculates averages using the subroutine at $C00391, and then copies the red, green, and blue averages to $7E43D6, $7E43D8, and $7E43DA respectively.

$C0A1F2-$C0A20B: Load map palette animation palette

Loads a palette from Decompressed Map Animation Palettes and replaces the current map palette.

Inputs

  • accumulator: Map animation palette number
So very stubbly.
This page is rather stubbly and could use some expansion.
Are you a bad enough dude to rescue this article?