#include <nds.h>
#include <maxmod9.h>
#include "mmsolution.h"
#include "mmsolution_bin.h"
typedef struct {
u16* gfx;
SpriteSize size;
SpriteColorFormat format;
int rotationIndex;
int paletteAlpha;
int x;
int y;
int dy;
}MySprite;
MySprite sprites[] = { {0, SpriteSize_16x16, SpriteColorFormat_256Color, 0, 0, 20, 96, 0},
{0, SpriteSize_16x16, SpriteColorFormat_256Color, 0, 0, 70, 96, 0},
{0, SpriteSize_16x16, SpriteColorFormat_256Color, 0, 0, 120, 96, 0},
{0, SpriteSize_16x16, SpriteColorFormat_256Color, 0, 0, 170, 96, 0},
{0, SpriteSize_16x16, SpriteColorFormat_256Color, 0, 0, 220, 96, 0} };
mm_word myEventHandler( mm_word msg, mm_word param ) {
switch( msg ) {
case MMCB_SONGMESSAGE:
if (param==1) sprites[0].dy = -8;
if (param==2) sprites[1].dy = -8;
if (param==3) sprites[2].dy = -8;
if (param==4) sprites[3].dy = -8;
if (param==5) sprites[4].dy = -8;
break;
case MMCB_SONGFINISHED:
break;
}
return 0;
}
int main(void) {
int i = 0;
videoSetMode(MODE_0_2D);
videoSetModeSub(0);
lcdMainOnBottom();
oamInit(&oamMain, SpriteMapping_1D_32, false);
vramSetBankA(VRAM_A_MAIN_SPRITE);
for (i = 0; i < 5; i++) {
sprites[i].gfx = oamAllocateGfx(&oamMain, sprites[i].size, sprites[i].format);
dmaFillHalfWords( ((i+1)<<8)|(i+1), sprites[i].gfx, 32*32);
}
SPRITE_PALETTE[1] = RGB15(31,0,0);
SPRITE_PALETTE[2] = RGB15(0,31,0);
SPRITE_PALETTE[3] = RGB15(0,0,31);
SPRITE_PALETTE[4] = RGB15(31,0,31);
SPRITE_PALETTE[5] = RGB15(0,31,31);
mmInitDefaultMem( (mm_addr)mmsolution_bin );
mmSetEventHandler( myEventHandler );
mmLoad( MOD_EXAMPLE2 );
mmStart( MOD_EXAMPLE2, MM_PLAY_LOOP );
while(1) {
for (i=0; i < 5; i++) {
sprites[i].dy += 1;
sprites[i].y += sprites[i].dy;
if ( sprites[i].y<72 ) sprites[i].y = 72;
if ( sprites[i].y>96 ) sprites[i].y = 96;
oamSet( &oamMain,
i,
sprites[i].x,
sprites[i].y,
0,
sprites[i].paletteAlpha,
sprites[i].size,
sprites[i].format,
sprites[i].gfx,
sprites[i].rotationIndex,
false,
false,
false, false,
false
);
}
swiWaitForVBlank();
oamUpdate(&oamMain);
}
return 0;
}