#include "settings.h" #include "save.h" static Settings settings = { .bpm = 90, .auto_save = TOGGLE_ON, .help = TOGGLE_ON, }; static int settings_cursor_loc = 0; void serial_irq(void); void stop_sound(void); void toggle_playing(void); void set_audio_settings(void) { stop_sound(); if (settings.sync == SYNC_IN_LINK) { irs_set(IRQ_SERIAL, serial_irq); irs_set(IRQ_TIMER_2, NULL); SIO_MODE = SIO_MODE_GP | SIO_SC_OUT(0) | SIO_SD_OUT(0) | SIO_SI_OUT(0) | SIO_SO_OUT(0) | SIO_IRQ_ENABLE; } else { irs_set(IRQ_SERIAL, NULL); } switch (settings.sync) { case SYNC_OUT_LINK_AUDIO_4: case SYNC_OUT_LINK_AUDIO_8: case SYNC_OUT_LINK_AUDIO_16: case SYNC_OUT_AUDIO_4: case SYNC_OUT_AUDIO_8: case SYNC_OUT_AUDIO_16: { SOUND_DMG_MASTER = sound_volume(SOUND_SQUARE1 | SOUND_SQUARE2 | SOUND_WAVE | SOUND_NOISE, 3, 2); SOUND_DSOUND_MASTER = SOUND_DMG100 | SOUND_DSOUND_RATIO_A | SOUND_DSOUND_LEFT_A | SOUND_DSOUND_RESET_A; } break; default: { SOUND_DMG_MASTER = sound_volume(SOUND_SQUARE1 | SOUND_SQUARE2 | SOUND_WAVE | SOUND_NOISE, 3, 0); SOUND_DSOUND_MASTER = SOUND_DMG100; } break; } } void handle_settings_input(void) { if (key_tap(KEY_DOWN)) { if (settings_cursor_loc == (SETTINGS_NUM - 1)) { settings_cursor_loc = 0; } else { settings_cursor_loc++; } clear_screen = true; } if (key_tap(KEY_UP)) { if (settings_cursor_loc == 0) { settings_cursor_loc = SETTINGS_NUM - 1; } else { settings_cursor_loc--; } clear_screen = true; } if (key_tap(KEY_R)) { switch (settings_cursor_loc) { case SETTINGS_SYNC: { if ((settings.sync + 1) >= SYNC_NUM) { settings.sync = 0; } else { settings.sync++; } set_audio_settings(); } break; case SETTINGS_THEME: { if ((settings.theme + 1) >= THEME_NUM) { settings.theme = 0; } else { settings.theme++; } swap_palette(settings.theme); } break; case SETTINGS_GLOBAL_MUTE: { if ((settings.global_mute + 1) >= TOGGLE_NUM) { settings.global_mute = 0; } else { settings.global_mute++; } } break; case SETTINGS_GLOBAL_BPM: { if ((settings.global_bpm + 1) >= TOGGLE_NUM) { settings.global_bpm = 0; } else { settings.global_bpm++; } redraw_bpm = true; if (play_status) { update_bpm = true; } } break; case SETTINGS_AUTO_SAVE: { if ((settings.auto_save + 1) >= TOGGLE_NUM) { settings.auto_save = 0; } else { settings.auto_save++; } } break; case SETTINGS_HELP: { if ((settings.help + 1) >= TOGGLE_NUM) { settings.help = 0; } else { settings.help++; } } break; } save_metadata(); clear_screen = true; } if (key_tap(KEY_L)) { switch (settings_cursor_loc) { case SETTINGS_SYNC: { if (settings.sync == 0) { settings.sync = SYNC_NUM - 1; } else { settings.sync--; } set_audio_settings(); } break; case SETTINGS_THEME: { if (settings.theme == 0) { settings.theme = THEME_NUM - 1; } else { settings.theme--; } swap_palette(settings.theme); } break; case SETTINGS_GLOBAL_MUTE: { if (settings.global_mute == 0) { settings.global_mute = TOGGLE_NUM - 1; } else { settings.global_mute--; } } break; case SETTINGS_GLOBAL_BPM: { if (settings.global_bpm == 0) { settings.global_bpm = TOGGLE_NUM - 1; } else { settings.global_bpm--; } redraw_bpm = true; if (play_status) { update_bpm = true; } } break; case SETTINGS_AUTO_SAVE: { if (settings.auto_save == 0) { settings.auto_save = TOGGLE_NUM - 1; } else { settings.auto_save--; } } break; case SETTINGS_HELP: { if (settings.help == 0) { settings.help = TOGGLE_NUM - 1; } else { settings.help--; } } break; } save_metadata(); clear_screen = true; } if (key_tap(KEY_A)) { next_scene = SCENE_SEQUENCER; } if (key_tap(KEY_START)) { toggle_playing(); } }