Beispiel #1
0
DSGM_SoundInstance *DSGM_PlaySoundAdvancedFull(DSGM_Sound *sound, u8 volume, u8 panning) {
	DSGM_SoundInstance *soundInstance = DSGM_AddSoundInstance(sound);
	
	if(sound->type == DSGM_SOUND_STREAM) {
		if(!sound->loaded) {
			mmLoad(sound->ID);
			sound->loaded = true;
		}
		mmStart(sound->ID, MM_PLAY_LOOP);
	}
	else {
		if(!sound->loaded) {
			mmLoadEffect(sound->ID - DSGM_soundStreamCount);
			sound->loaded = true;
		}
		mm_sound_effect effect = {
			{ sound->ID - DSGM_soundStreamCount } ,
			(int)(1.0f * (1<<10)),					// rate
			0,										// handle
			soundInstance->volume = volume,			// volume (255 = max)
			soundInstance->panning = panning,		// panning (128 = center)
		};
		soundInstance->effectNumber = mmEffectEx(&effect);
		mmEffectRelease(soundInstance->effectNumber);
	}
	
	return soundInstance;
}
Beispiel #2
0
void
Sound::initEffects()
{
  int s[] = {SFX_JUMP, SFX_COIN, SFX_BRICK, SFX_PLACE, SFX_DESTROY};

  for(int i = 0;i < NR_EFFECTS;i++)
    {
      effects[i].id = s[i];
      effects[i].rate = (1<<10);
      effects[i].handle = 0;
      effects[i].volume = 255;
      effects[i].panning = 127;

      mmLoadEffect(s[i]);
    }
}
Beispiel #3
0
DSGM_SoundInstance *DSGM_PlaySoundFull(DSGM_Sound *sound) {
	DSGM_SoundInstance *soundInstance = DSGM_AddSoundInstance(sound);
	
	if(sound->type == DSGM_SOUND_STREAM) {
		if(!sound->loaded) {
			mmLoad(sound->ID);
			sound->loaded = true;
		}
		mmStart(sound->ID, MM_PLAY_LOOP);
	}
	else {
		if(!sound->loaded) {
			mmLoadEffect(sound->ID - DSGM_soundStreamCount);
			sound->loaded = true;
		}
		soundInstance->effectNumber = mmEffect(sound->ID - DSGM_soundStreamCount);
		mmEffectRelease(soundInstance->effectNumber);
	}
	
	soundInstance->volume = 255;
	soundInstance->panning = 128;
	
	return soundInstance;
}
Beispiel #4
0
void initSprites(mySprite * sprites) {
	int defaultX = (SCREEN_WIDTH/2) - 32;
	int defaultY = (SCREEN_HEIGHT/2) - 32;
	mmInitDefaultMem((mm_addr)soundbank_bin);
	
	oamInit(&oamMain, SpriteMapping_1D_64, false);
	mySprite leftButtonOff = {0, 0, SpriteSize_64x64, SpriteColorFormat_16Color, 0, 0, 0, defaultY};
	mySprite leftButtonOn = {1, 0, SpriteSize_64x64, SpriteColorFormat_16Color, 0, 1, 0, defaultY};
	mySprite rightButtonOff = {2, 0, SpriteSize_64x64, SpriteColorFormat_16Color, 0, 0, (256-64), defaultY};
	mySprite rightButtonOn = {3, 0, SpriteSize_64x64, SpriteColorFormat_16Color, 0, 1, (256-64), defaultY};
	leftButtonOff.gfx = oamAllocateGfx(&oamMain, SpriteSize_64x64, SpriteColorFormat_16Color);
	leftButtonOn.gfx = oamAllocateGfx(&oamMain, SpriteSize_64x64, SpriteColorFormat_16Color);
	rightButtonOff.gfx = oamAllocateGfx(&oamMain, SpriteSize_64x64, SpriteColorFormat_16Color);
	rightButtonOn.gfx = oamAllocateGfx(&oamMain, SpriteSize_64x64, SpriteColorFormat_16Color);
	dmaCopy(leftButtonOffPal, &SPRITE_PALETTE[leftButtonOff.id * 16], leftButtonOffPalLen);
	dmaCopy(leftButtonOnPal, &SPRITE_PALETTE[leftButtonOn.id * 16], leftButtonOnPalLen);
	dmaCopy((u8*)leftButtonOffTiles, leftButtonOff.gfx, 2048);
	dmaCopy((u8*)leftButtonOnTiles, leftButtonOn.gfx, 2048);
	dmaCopy((u8*)rightButtonOffTiles, rightButtonOff.gfx, 2048);
	dmaCopy((u8*)rightButtonOnTiles, rightButtonOn.gfx, 2048);
	sprites[leftButtonOff.id] = leftButtonOff;
	sprites[leftButtonOn.id] = leftButtonOn;
	sprites[rightButtonOff.id] = rightButtonOff;
	sprites[rightButtonOn.id] = rightButtonOn;
	SPRITECOUNT += 4;
	
	// mySprite {id, gfxPtr, SpriteSize, SpriteColorFormat, rotationIndex, paletteAlpha, x, y}
	//
	// gong
	mmLoadEffect(SFX_GONG);
	mm_sound_effect gongSFX = { {SFX_GONG}, (int)(1.0f * (1<<10)), 0, 255, 128, };
	char gongDesc[] = "An ancient gong from the hills of China.";
	mySprite gong = {4, 0, SpriteSize_64x64, SpriteColorFormat_16Color, 0, 4, defaultX, defaultY, gongSFX, gongDesc};
	gong.gfx = oamAllocateGfx(&oamMain, SpriteSize_64x64, SpriteColorFormat_16Color);
	dmaCopy(gongPal, &SPRITE_PALETTE[gong.id * 16], gongPalLen);
	dmaCopy((u8*)gongTiles, gong.gfx, 2048);
	sprites[gong.id] = gong;
	SPRITECOUNT++;
	
	// duck
	mmLoadEffect(SFX_DUCK);
	mm_sound_effect duckSFX = { { SFX_DUCK }, (int)(1.0f * (1<<10)), 0, 255, 128, };
	char duckDesc[] = "A mild-mannered duck.";
	mySprite duck = {5, 0, SpriteSize_64x64, SpriteColorFormat_16Color, 0, 5, defaultX, defaultY, duckSFX, duckDesc};
	duck.gfx = oamAllocateGfx(&oamMain, SpriteSize_64x64, SpriteColorFormat_16Color); 
	dmaCopy(duckPal, &SPRITE_PALETTE[duck.id * 16], buttheadPalLen);
	dmaCopy((u8*)duckTiles, duck.gfx, 2048);
	sprites[duck.id] = duck;
	SPRITECOUNT++;	// should be 6 now
	
	// butthead
	mmLoadEffect(SFX_BUTTHEAD);
	mm_sound_effect buttheadSFX = { { SFX_BUTTHEAD }, (int)(1.0f * (1<<10)), 0, 255, 128, };
	char buttheadDesc[] = "Butt-head.";
	mySprite butthead = {6, 0, SpriteSize_64x64, SpriteColorFormat_16Color, 0, 6, defaultX, defaultY, buttheadSFX, buttheadDesc};
	butthead.gfx = oamAllocateGfx(&oamMain, SpriteSize_64x64, SpriteColorFormat_16Color); 
	dmaCopy(buttheadPal, &SPRITE_PALETTE[butthead.id * 16], buttheadPalLen);
	dmaCopy((u8*)buttheadTiles, butthead.gfx, 2048);
	sprites[butthead.id] = butthead;
	SPRITECOUNT++;
	
	//bluesbrothers
	mmLoadEffect(SFX_BLUESBROTHERS);
	mm_sound_effect bluesbrothersSFX = { { SFX_BLUESBROTHERS }, (int)(1.0f * (1<<10)), 0, 255, 128, };
	char bluesbrothersDesc[] = "Jake and Elwood.";
	mySprite bluesbrothers = {7, 0, SpriteSize_64x64, SpriteColorFormat_16Color, 0, 7, defaultX, defaultY, bluesbrothersSFX, bluesbrothersDesc};
	bluesbrothers.gfx = oamAllocateGfx(&oamMain, SpriteSize_64x64, SpriteColorFormat_16Color);
	dmaCopy(bluesbrothersPal, &SPRITE_PALETTE[bluesbrothers.id * 16], bluesbrothersPalLen);
	dmaCopy((u8*)bluesbrothersTiles, bluesbrothers.gfx, 2048);
	sprites[bluesbrothers.id] = bluesbrothers;
	SPRITECOUNT++;

	//bttf
	mmLoadEffect(SFX_BTTF);
	mm_sound_effect bttfSFX = { { SFX_BTTF }, (int)(1.0f * (1<<10)), 0, 255, 128, };
	char bttfDesc[] = "88 mph.";
	mySprite bttf = {8, 0, SpriteSize_64x64, SpriteColorFormat_16Color, 0, 8, defaultX, defaultY, bttfSFX, bttfDesc};
	bttf.gfx = oamAllocateGfx(&oamMain, SpriteSize_64x64, SpriteColorFormat_16Color);
	dmaCopy(bttfPal, &SPRITE_PALETTE[bttf.id * 16], bttfPalLen);
	dmaCopy((u8*)bttfTiles, bttf.gfx, 2048);
	sprites[bttf.id] = bttf;
	SPRITECOUNT++;

	//chewbacca
	mmLoadEffect(SFX_CHEWBACCA);
	mm_sound_effect chewbaccaSFX = { { SFX_CHEWBACCA }, (int)(1.0f * (1<<10)), 0, 255, 128, };
	char chewbaccaDesc[] = "Chewie.";
	mySprite chewbacca = {9, 0, SpriteSize_64x64, SpriteColorFormat_16Color, 0, 9, defaultX, defaultY, chewbaccaSFX, chewbaccaDesc};
	chewbacca.gfx = oamAllocateGfx(&oamMain, SpriteSize_64x64, SpriteColorFormat_16Color);
	dmaCopy(chewbaccaPal, &SPRITE_PALETTE[chewbacca.id * 16], chewbaccaPalLen);
	dmaCopy((u8*)chewbaccaTiles, chewbacca.gfx, 2048);
	sprites[chewbacca.id] = chewbacca;
	SPRITECOUNT++;

	//dsotm
	mmLoadEffect(SFX_DSOTM);
	mm_sound_effect dsotmSFX = { { SFX_DSOTM }, (int)(1.0f * (1<<10)), 0, 255, 128, };
	char dsotmDesc[] = "1973.";
	mySprite dsotm = {10, 0, SpriteSize_64x64, SpriteColorFormat_16Color, 0, 10, defaultX, defaultY, dsotmSFX, dsotmDesc};
	dsotm.gfx = oamAllocateGfx(&oamMain, SpriteSize_64x64, SpriteColorFormat_16Color);
	dmaCopy(dsotmPal, &SPRITE_PALETTE[dsotm.id * 16], dsotmPalLen);
	dmaCopy((u8*)dsotmTiles, dsotm.gfx, 2048);
	sprites[dsotm.id] = dsotm;
	SPRITECOUNT++;

	//eastwood
	mmLoadEffect(SFX_EASTWOOD);
	mm_sound_effect eastwoodSFX = { { SFX_EASTWOOD }, (int)(1.0f * (1<<10)), 0, 255, 128, };
	char eastwoodDesc[] = "-_-";
	mySprite eastwood = {11, 0, SpriteSize_64x64, SpriteColorFormat_16Color, 0, 11, defaultX, defaultY, eastwoodSFX, eastwoodDesc};
	eastwood.gfx = oamAllocateGfx(&oamMain, SpriteSize_64x64, SpriteColorFormat_16Color);
	dmaCopy(eastwoodPal, &SPRITE_PALETTE[eastwood.id * 16], eastwoodPalLen);
	dmaCopy((u8*)eastwoodTiles, eastwood.gfx, 2048);
	sprites[eastwood.id] = eastwood;
	SPRITECOUNT++;

	//mario
	mmLoadEffect(SFX_MARIO);
	mm_sound_effect marioSFX = { { SFX_MARIO }, (int)(1.0f * (1<<10)), 0, 255, 128, };
	char marioDesc[] = "An Italian Plumber.";
	mySprite mario = {12, 0, SpriteSize_64x64, SpriteColorFormat_16Color, 0, 12, defaultX, defaultY, marioSFX, marioDesc};
	mario.gfx = oamAllocateGfx(&oamMain, SpriteSize_64x64, SpriteColorFormat_16Color);
	dmaCopy(marioPal, &SPRITE_PALETTE[mario.id * 16], marioPalLen);
	dmaCopy((u8*)marioTiles, mario.gfx, 2048);
	sprites[mario.id] = mario;
	SPRITECOUNT++;
}
Beispiel #5
0
int main() {
    /* Turn on the 2D graphics core. */
    powerOn(POWER_ALL_2D);

    /*
     *  Configure the VRAM and background control registers.
     *
     *  Place the main screen on the bottom physical screen. Then arrange the
     *  VRAM banks. Next, confiure the background control registers.
     */
    lcdMainOnBottom();
    initVideo();
    initBackgrounds();

    /* Initialize maxmod using the memory based soundbank set up. */
    mmInitDefaultMem((mm_addr)soundbank_bin);

    /* Set up a few sprites. */
    SpriteInfo spriteInfo[SPRITE_COUNT];
    OAMTable *oam = new OAMTable();
    initOAM(oam);
    initSprites(oam, spriteInfo);

    /* Display the backgrounds. */
    displayStarField();
    displayPlanet();
    displaySplash();

    /*************************************************************************/

    /* Keep track of the touch screen coordinates. */
    touchPosition touch;

    /* Make the ship object. */
    static const int SHUTTLE_OAM_ID = 0;
    SpriteEntry * shipEntry = &oam->oamBuffer[SHUTTLE_OAM_ID];
    SpriteRotation * shipRotation = &oam->matrixBuffer[SHUTTLE_OAM_ID];
    Ship * ship = new Ship(&spriteInfo[SHUTTLE_OAM_ID]);

    /* Make the moon. */
    static const int MOON_OAM_ID = 1;
    SpriteEntry * moonEntry = &oam->oamBuffer[MOON_OAM_ID];
    SpriteInfo * moonInfo = &spriteInfo[MOON_OAM_ID];
    MathVector2D<int> * moonPos = new MathVector2D<int>();
    moonPos->x = moonEntry->x;
    moonPos->y = moonEntry->y;

    /* Set up sound data. */
    mmLoadEffect(SFX_THRUST);

    for (;;) {
        /* Update the game state. */
        updateInput(&touch);
        handleInput(ship, moonPos, moonInfo, &touch);
        ship->moveShip();

        /* Update ship sprite attributes. */
        MathVector2D<float> position = ship->getPosition();
        shipEntry->x = (int)position.x;
        shipEntry->y = (int)position.y;
        rotateSprite(shipRotation, -ship->getAngleDeg());
        /* Update moon sprite attributes. */
        moonEntry->x = (int)moonPos->x;
        moonEntry->y = (int)moonPos->y;

        /*
         *  Update the OAM.
         *
         *  We have to copy our copy of OAM data into the actual OAM during
         *  VBlank (writes to it are locked during other times).
         */
        swiWaitForVBlank();
        updateOAM(oam);
    }

    return 0;
}