#include <nds.h>
#include <stdio.h>
typedef struct
{
u16* gfx;
SpriteSize size;
SpriteColorFormat format;
int rotationIndex;
int paletteAlpha;
int x;
int y;
}MySprite;
int main(int argc, char** argv) {
MySprite sprites[] = {
{0, SpriteSize_32x32, SpriteColorFormat_Bmp, 0, 15, 20, 15},
{0, SpriteSize_32x32, SpriteColorFormat_256Color, -1, 0, 20, 80},
{0, SpriteSize_32x32, SpriteColorFormat_16Color, -1, 1, 20, 136}
};
videoSetModeSub(MODE_0_2D);
consoleDemoInit();
oamInit(&oamSub, SpriteMapping_Bmp_1D_128, false);
vramSetBankD(VRAM_D_SUB_SPRITE);
for(int i = 0; i < 3; i++)
sprites[i].gfx = oamAllocateGfx(&oamSub, sprites[i].size, sprites[i].format);
iprintf("\x1b[1;1HDirect Bitmap:");
iprintf("\x1b[9;1H256 color:");
iprintf("\x1b[16;1H16 color:");
dmaFillHalfWords(ARGB16(1,31,0,0), sprites[0].gfx, 32*32*2);
dmaFillHalfWords((1<<8)|1, sprites[1].gfx, 32*32);
dmaFillHalfWords((1<<12)|(1<<8)|(1<<4)|1, sprites[2].gfx, 32*32 / 2);
SPRITE_PALETTE_SUB[1] = RGB15(0,31,0);
SPRITE_PALETTE_SUB[16 + 1] = RGB15(0,0,31);
int angle = 0;
while(1) {
for(int i = 0; i < 3; i++) {
oamSet(
&oamSub,
i,
sprites[i].x, sprites[i].y,
0,
sprites[i].paletteAlpha,
sprites[i].size,
sprites[i].format,
sprites[i].gfx,
sprites[i].rotationIndex,
true,
false,
false, false,
false
);
}
oamRotateScale(&oamSub, 0, angle, (1 << 8), (1<<8));
angle += 64;
swiWaitForVBlank();
oamUpdate(&oamSub);
}
return 0;
}