As far as I can tell, the leaked Pokémon Prism code achieves its colored party sprites by directly editing this data. (Check out its engine/mon_icons.asm routines, in particular LoadPartyColors and ProcessPokemonColor.) My attempt to adapt these routines isn't working. And the simplest thing I can think of that should work still doesn't:

I know that engine/sprites.asm:GetSpriteOAMAttr is ultimately responsible for getting the current OAM sprite color, and modifying it works to force all sprites to be a certain color. But modifying it to know when it's being called by the party menu, and get the species-specific color there, seems convoluted and wrong. The "correct" place to assign the sprite color is along with the other sprite properties, in mon_icons.asm. What could I be doing wrong?

Re: Modifying OAM sprite colors in pokecrystal

engine/pokegear.asm:_Area is a more tractable example. There's a section ".HideNestsShowPlayer" that runs if you hold Select while looking at a Pokédex Area map. It clearly loads the appropriate data into the first 16 bytes of the Sprites WRAM section. When I add extra code for the next 16 bytes, the icon appears correctly.