audio/maxmod/song_events_example/source/template.c

/*      Simple Maxmod example - Song events   

    See http://www.maxmod.org/ref/tut/songevents.html for an explanation of song events.
    
    Example and mod file by Nyarla 
    (modified by Jason Rogers aka Dovoto)
*/




#include <nds.h>
#include <maxmod9.h>

#include "mmsolution.h"     // solution definitions
#include "mmsolution_bin.h" // solution binary reference 
#include "ball.h"

int spriteDy = 0;
int spriteY = 140;

//---------------------------------------------------------------------------------
// callback function to handle song events
//---------------------------------------------------------------------------------
mm_word myEventHandler( mm_word msg, mm_word param ) {
//---------------------------------------------------------------------------------
    switch( msg ) {

    case MMCB_SONGMESSAGE:  // process song messages

        // if song event 1 is triggered, set sprite's y velocity to make it jump
        if (param == 1) spriteDy = -16;

        break;
        
        case MMCB_SONGFINISHED: // process song finish message (only triggered in songs played with MM_PLAY_ONCE)
        
        break;
    }
    
    return 0;
}


//---------------------------------------------------------------------------------
int main(void) {
//---------------------------------------------------------------------------------
    
    videoSetMode(MODE_0_2D);
    
    //initialize the sprite engine with 1D mapping 32 byte boundary
    //and no external palette support
    oamInit(&oamMain, SpriteMapping_1D_32, false);

    vramSetBankA(VRAM_A_MAIN_SPRITE);

    //allocate some space for the sprite graphics   
    u16* gfx = oamAllocateGfx(&oamMain, SpriteSize_32x32, SpriteColorFormat_256Color);

    //copy in our ball graphics
    dmaCopy(ballTiles, gfx, ballTilesLen);
    dmaCopy(ballPal, SPRITE_PALETTE, ballPalLen);
    
    //--------------------------------------------
    // initialise maxmod using default settings, and 
    // enable interface for a soundbank that is loaded 
    // into memory
    //--------------------------------------------
    mmInitDefaultMem( (mm_addr)mmsolution_bin );

    // setup maxmod to use the song event handler
    mmSetEventHandler( myEventHandler );
    
    // load song
    // values for this function are in the solution header
    mmLoad( MOD_EXAMPLE );

    // start the music playing
    mmStart( MOD_EXAMPLE, MM_PLAY_LOOP );

    while(1) {
        // Sprite accelerates down
        spriteDy += 2;
        
        // sprite falls
        spriteY += spriteDy;
        
        // Floor is arbitrarily set to 140
        if ( spriteY > 140 ) spriteY = 140;
        
        
        oamSet(&oamMain,            //main graphics engine context
            0,                      //oam index (0 to 127)  
            256/2-16,               //x and y pixel location of the sprite
            spriteY,            
            0,                      //priority, lower renders last (on top)
            0,  //palette index if multiple palettes or the alpha value if bmp sprite   
            SpriteSize_32x32,
            SpriteColorFormat_256Color,
            gfx,                //pointer to the loaded graphics
            -1, //sprite rotation data  
            false,                  //double the size when rotating?
            false,          //hide the sprite?
            false, false, //vflip, hflip
            false   //apply mosaic
            );              
    
        swiWaitForVBlank();
        
        //send the updates to the hardware
        oamUpdate(&oamMain);
    }

    return 0;
}


 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines
Generated on Sat Oct 2 12:55:11 2010 for libnds by  doxygen 1.6.3