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

