Exemple #1
0
Fichier : main.c Projet : clbr/SGDK
static void joyEvent(u16 joy, u16 changed, u16 state)
{
    // LEFT button state changed
    if (changed & state & BUTTON_LEFT)
    {
        if (cmd == NULL)
        {
            // driver change
            if (driver > &drivers[0]) driver--;
        }
        else
        {
            // param change
            const param_def *param = getCurrentParam();

            if (param > &cmd->params[0])
                setCurrentParam(param - 1);
        }
    }
    // RIGHT button state changed
    else if (changed & state & BUTTON_RIGHT)
    {
        if (cmd == NULL)
        {
            // driver change
            if (driver < &drivers[NUM_DRIVER - 1]) driver++;
        }
        else
        {
            // param change
            const param_def *param = getCurrentParam();

            if (param < &cmd->params[cmd->num_param - 1])
                setCurrentParam(param + 1);
        }
    }

    // UP button state changed
    if (changed & state & BUTTON_UP)
    {
        if (cmd != NULL)
        {
            if (cmd > &driver->cmds[0]) cmd--;
            else cmd = NULL;
        }
    }
    // DOWN button state changed
    else if (changed & state & BUTTON_DOWN)
    {
        if (cmd == NULL)
        {
            if (driver->num_cmd > 0)
                cmd = driver->cmds;
        }
        else if (cmd < &driver->cmds[driver->num_cmd - 1]) cmd++;
    }

    const u16 driver_ind = getCurrentDriverIndex();
    const u16 loop = params_value[driver_ind][0]->value;

    // driver commands
    switch(driver->id)
    {
    case Z80_DRIVER_PCM:
    {
        const u16 pan = params_value[driver_ind][1]->value;

        if (changed & state & BUTTON_A)
        {
            if (SND_isPlaying_PCM())
                SND_stopPlay_PCM();
            else
            {
                // RATE parameter value
                switch(params_value[driver_ind][2]->value)
                {
                case SOUND_RATE_8000:
                    SND_startPlay_PCM(india_8k, sizeof(india_8k), SOUND_RATE_8000, pan, loop);
                    break;

                case SOUND_RATE_11025:
                    SND_startPlay_PCM(india_11k, sizeof(india_11k), SOUND_RATE_11025, pan, loop);
                    break;

                case SOUND_RATE_13400:
                    SND_startPlay_PCM(india_13k, sizeof(india_13k), SOUND_RATE_13400, pan, loop);
                    break;

                case SOUND_RATE_16000:
                    SND_startPlay_PCM(india_16k, sizeof(india_16k), SOUND_RATE_16000, pan, loop);
                    break;

                case SOUND_RATE_22050:
                    SND_startPlay_PCM(india_22k, sizeof(india_22k), SOUND_RATE_22050, pan, loop);
                    break;

                case SOUND_RATE_32000:
                    SND_startPlay_PCM(india_32k, sizeof(india_32k), SOUND_RATE_32000, pan, loop);
                    break;
                }
            }
        }

        break;
    }

    case Z80_DRIVER_2ADPCM:
    {
        if (changed & state & BUTTON_A)
        {
            if (SND_isPlaying_2ADPCM(SOUND_PCM_CH1_MSK))
                SND_stopPlay_2ADPCM(SOUND_PCM_CH1);
            else
                SND_startPlay_2ADPCM(india_pcm_22k, sizeof(india_pcm_22k), SOUND_PCM_CH1, loop);
        }

        if (changed & state & BUTTON_B)
        {
            if (SND_isPlaying_2ADPCM(SOUND_PCM_CH2_MSK))
                SND_stopPlay_2ADPCM(SOUND_PCM_CH2);
            else
                SND_startPlay_2ADPCM(loop3_pcm_22k, sizeof(loop3_pcm_22k), SOUND_PCM_CH2, loop);
        }

        break;
    }

    case Z80_DRIVER_4PCM_ENV:
    {
        // set volume values for driver 4PCM_ENV
        SND_setVolume_4PCM_ENV(SOUND_PCM_CH1, params_value[driver_ind][1]->value);
        SND_setVolume_4PCM_ENV(SOUND_PCM_CH2, params_value[driver_ind][2]->value);
        SND_setVolume_4PCM_ENV(SOUND_PCM_CH3, params_value[driver_ind][3]->value);
        SND_setVolume_4PCM_ENV(SOUND_PCM_CH4, params_value[driver_ind][4]->value);

        if (changed & state & BUTTON_START)
        {
            if (SND_isPlaying_4PCM_ENV(SOUND_PCM_CH4_MSK))
                SND_stopPlay_4PCM_ENV(SOUND_PCM_CH4);
            else
                SND_startPlay_4PCM_ENV(loop2_16k, sizeof(loop2_16k), SOUND_PCM_CH4, loop);
        }

        if (changed & state & BUTTON_A)
        {
            if (SND_isPlaying_4PCM_ENV(SOUND_PCM_CH1_MSK))
                SND_stopPlay_4PCM_ENV(SOUND_PCM_CH1);
            else
                SND_startPlay_4PCM_ENV(hat2_16k, sizeof(hat2_16k), SOUND_PCM_CH1, loop);
        }

        if (changed & state & BUTTON_B)
        {
            if (SND_isPlaying_4PCM_ENV(SOUND_PCM_CH2_MSK))
                SND_stopPlay_4PCM_ENV(SOUND_PCM_CH2);
            else
                SND_startPlay_4PCM_ENV(snare2_16k, sizeof(snare2_16k), SOUND_PCM_CH2, loop);
        }

        if (changed & state & BUTTON_C)
        {
            if (SND_isPlaying_4PCM_ENV(SOUND_PCM_CH3_MSK))
                SND_stopPlay_4PCM_ENV(SOUND_PCM_CH3);
            else
                SND_startPlay_4PCM_ENV(hat1_16k, sizeof(hat1_16k), SOUND_PCM_CH3, loop);
        }

        break;
    }

    case Z80_DRIVER_MVS:
    {
        if (changed & state & BUTTON_A)
        {
            if (SND_isPlaying_MVS())
                SND_stopPlay_MVS();
            else
            {
                if (loop)
                    SND_startPlay_MVS(music_mvs, 1);
                else
                    SND_startPlay_MVS(music_mvs, 0);
            }
        }

        if (changed & state & BUTTON_B)
        {
            SND_startDAC_MVS(explode_u8k, sizeof(explode_u8k));
        }

        break;
    }

    case Z80_DRIVER_TFM:
    {
        if (changed & state & BUTTON_A)
        {
            SND_startPlay_TFM(music_tfd);
        }
        if (changed & state & BUTTON_START)
        {
            SND_stopPlay_TFM();
        }
        break;
    }

    case Z80_DRIVER_VGM:
    {
        if (changed & state & BUTTON_X)
        {
            SND_playSfx_VGM(explode_u8k, sizeof(explode_u8k));
        }
        if (changed & state & BUTTON_A)
        {
            SND_startPlay_VGM(sonic1);
        }
        if (changed & state & BUTTON_B)
        {
            SND_startPlay_VGM(roadrash);
        }
        if (changed & state & BUTTON_C)
        {
            SND_startPlay_VGM(bapcm_vgm);
        }
        if (changed & state & BUTTON_START)
        {
            if (SND_isPlaying_VGM())
                SND_stopPlay_VGM();
            else
                SND_resumePlay_VGM();
        }
        break;
    }

    case Z80_DRIVER_XGM:
    {
        if (changed & state & BUTTON_X)
        {
            SND_setPCM_XGM(64, snare1_14k, sizeof(snare1_14k));
            SND_startPlayPCM_XGM(64, 10, SOUND_PCM_CH2);
        }
        if (changed & state & BUTTON_Y)
        {
            //SND_setPCM_XGM(65, hat1_14k, sizeof(hat1_14k));
            SND_setPCM_XGM(65, f_voice1_14k, sizeof(f_voice1_14k));
            SND_startPlayPCM_XGM(65, 10, SOUND_PCM_CH3);
        }
        if (changed & state & BUTTON_Z)
        {
            SND_setPCM_XGM(66, loop1_14k, sizeof(loop1_14k));
            SND_startPlayPCM_XGM(66, 10, SOUND_PCM_CH4);
        }

        if (changed & state & BUTTON_A)
        {
            if (SND_isPlaying_XGM()) SND_stopPlay_XGM();
            else SND_startPlay_XGM(sor2_xgm);
        }
        if (changed & state & BUTTON_B)
        {
            if (SND_isPlaying_XGM()) SND_stopPlay_XGM();
            else SND_startPlay_XGM(bapcm_xgm);
        }
        if (changed & state & BUTTON_C)
        {
            if (SND_isPlaying_XGM()) SND_stopPlay_XGM();
            else
//                SND_startPlay_XGM(toystory);
                SND_startPlay_XGM(midnight);
        }

        if (changed & state & BUTTON_START)
        {
            if (SND_isPlaying_XGM())
                SND_pausePlay_XGM();
            else
                SND_resumePlay_XGM();
        }

        break;
    }
    }

    // MODE button state changed
    if (changed & state & BUTTON_MODE)
    {
        dmaMethod++;
        dmaMethod &= 3;
    }

    if (changed & state)
        refreshDriverInfos();
}
void titleScreen() {
	snowflake snowflakes[TITLE_SCREEN_SNOWFLAKES];
	SpriteDef sfdefs[TITLE_SCREEN_SNOWFLAKES];
	
	VDP_resetScreen();
	VDP_resetSprites();

	// Load Swirls
	VDP_loadTileData(swirls, TILE_USERINDEX, 20, TRUE);
	VDP_loadTileData(title_screen, TILE_USERINDEX + 20, 15, TRUE);
	VDP_loadTileData(swirl_spr, TILE_USERINDEX + 35, 20, TRUE);
	VDP_setPalette(PAL1, swirl_pal);
	VDP_setPalette(PAL2, sel_pal);
	VDP_setPalette(PAL3, ts_pal);
	
	JOY_init();
	JOY_setEventHandler(titleHandler);
	
	ImageAsset* title = getImage(titlbg);
	VDP_setPalette(PAL0, title->palette);
	VDP_loadTileData(title->tiles, TILE_USERINDEX + 55, (title->xTiles * title->yTiles), TRUE);
	VDP_fillTileMapRectInc(VDP_PLAN_B, TILE_ATTR_FULL(PAL0, PRIORITY_LOW, FALSE, FALSE, TILE_USERINDEX + 55), 0, 0, title->xTiles, title->yTiles);
	MEM_free( title );
	
	VDP_fillTileMapRectInc(VDP_PLAN_A, TILE_ATTR_FULL(PAL3, PRIORITY_LOW, FALSE, FALSE, TILE_USERINDEX + 20), 18, 3, 5, 3);
	VDP_drawText("Mega Swirl",  1, 7);
	VDP_drawText("Testing Demo", 1, 8);
	VDP_drawText(VERSION_STRING, 1, 9);
	
	VDP_drawText("Music from Deflemask by", 1, 11);
	VDP_drawText("Delek", 1, 12);
	
	VDP_drawText("Featuring artwork by", 1, 14);
	VDP_drawText("Radioactivemantaray", 1, 15);
	
	VDP_drawText("- Press Start to Play -", 1, 21);
	VDP_drawText(BUILD_DATE, 1, 24);

	u8 selected_swirl;
	for(int i = 0; i != TITLE_SCREEN_SNOWFLAKES; i++) {
		snowflakes[i].startedAt = 
		snowflakes[i].startDelay =
		snowflakes[i].fallRate =
		snowflakes[i].swirltype =
		0;
		
		sfdefs[i].posx =
		sfdefs[i].posy =
		sfdefs[i].tile_attr =
		sfdefs[i].size =
		sfdefs[i].link =
		0;
		
		selected_swirl = (custrand() % 4);
		snowflakes[i].swirltype = selected_swirl; // Select one of four swirl types
		snowflakes[i].startDelay = ((custrand() % 3000) + 1) / 300; // Select between a 1-10 second delay (300 ticks per second)
		snowflakes[i].startedAt = getTick(); // Time when this snowflake was created 
		snowflakes[i].fallRate = (custrand() % 2) + 1; // Select how fast this snowflake should fall to the bottom of the screen
		sfdefs[i].posx = (custrand() % 320); // Select X position for this swirl
		sfdefs[i].posy = -16; // Start it off screen
		
		sfdefs[i].size = SPRITE_SIZE(2, 2);
		sfdefs[i].tile_attr = TILE_ATTR_FULL(PAL1, PRIORITY_HIGH, FALSE, FALSE, TILE_USERINDEX + 35 + (4 * selected_swirl)); // This will need to be changed as we need tiles arranged for sprites
		if(i != 0) {
			sfdefs[i - 1].link = i;
		}
	}
	VDP_setSpritesDirect(0, sfdefs, TITLE_SCREEN_SNOWFLAKES);

	Z80_loadDriver(Z80_DRIVER_VGM, 1);
	Z80_requestBus(1);
	YM2612_enableDAC();
	Z80_releaseBus();
	SND_startPlay_VGM(muz_title);

	while (waitflag == FALSE) {
		
		for(int i = 0; i != TITLE_SCREEN_SNOWFLAKES; i++) {
			
			if(getTick() - snowflakes[i].startedAt >= snowflakes[i].startDelay) {
				
				if(sfdefs[i].posy != 240) {
					sfdefs[i].posy = sfdefs[i].posy + snowflakes[i].fallRate;
				} else {
					selected_swirl = (custrand() % 4);
					snowflakes[i].startDelay = ((custrand() % 3000) + 1) / 300;
					snowflakes[i].startedAt = getTick();
					snowflakes[i].fallRate = (custrand() % 2) + 1;
					sfdefs[i].posx = (custrand() % 320);
					sfdefs[i].posy = -16;
				}
				
			}
			
			VDP_setSpritesDirect(0, sfdefs, TITLE_SCREEN_SNOWFLAKES);
		}
		
	}

	waitflag = FALSE;

	srand(GET_HVCOUNTER);
	VDP_clearPlan(APLAN, FALSE);
	JOY_setEventHandler(joyHandler);

	ImageAsset* test = getImage(swlspace);
	VDP_setPalette(PAL0, test->palette);
	VDP_loadTileData(test->tiles, TILE_USERINDEX + 55, (test->xTiles * test->yTiles), TRUE);
	VDP_fillTileMapRectInc(VDP_PLAN_B, TILE_ATTR_FULL(PAL0, PRIORITY_LOW, FALSE, FALSE, TILE_USERINDEX + 55), 0, 0, test->xTiles, test->yTiles);
	MEM_free( test );
	
	SND_stopPlay_VGM();
}