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(); }