スプライトの仕組みを詳しく知る近道には、そのデータ構造(attr0~2)に値を入れていくことです。attr2の12-15bit目、パレット指定用の関数を用意してみましょう。
この関数を使うことでキャラクタデータはそのままに、パレットが異なる表示になります。
void SpriteSetPalNo(u32 num, u32 palNo) { OBJATTR* sp = (OBJATTR*)OAM + num; sp->attr2 &= 0x0fff; sp->attr2 |= (palNo << 12); }