#include "settings.h" #include "save.h" static Settings settings = {0}; static int settings_cursor_loc = 0; void draw_settings_cursor(void) { int x = 6; int y = 17 + settings_cursor_loc * 12; draw_line(x + 1, y + 3, x + 1, y + 7, COL_ACC_0); draw_line(x + 2, y + 4, x + 2, y + 6, COL_ACC_0); draw_line(x + 3, y + 5, x + 3, y + 5, COL_ACC_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 == (N_SETTINGS - 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 = N_SETTINGS - 1; } else { settings_cursor_loc--; } clear_screen = true; } if (key_tap(KEY_R)) { switch (settings_cursor_loc) { case 0: { if ((settings.sync + 1) >= SYNC_NUM) { settings.sync = 0; } else { settings.sync++; } set_audio_settings(); } break; case 1: { if ((settings.theme + 1) >= THEME_NUM) { settings.theme = 0; } else { settings.theme++; } swap_palette(settings.theme); } break; case 2: { if ((settings.cursor + 1) >= CURSOR_NUM) { settings.cursor = 0; } else { settings.cursor++; } } break; } save_metadata(); clear_screen = true; } if (key_tap(KEY_L)) { switch (settings_cursor_loc) { case 0: { if (settings.sync == 0) { settings.sync = SYNC_NUM - 1; } else { settings.sync--; } set_audio_settings(); } break; case 1: { if (settings.theme == 0) { settings.theme = THEME_NUM - 1; } else { settings.theme--; } swap_palette(settings.theme); } break; case 2: { if (settings.cursor == 0) { settings.cursor = CURSOR_NUM - 1; } else { settings.cursor--; } } break; } save_metadata(); clear_screen = true; } if (key_tap(KEY_A)) { next_scene = SCENE_SEQUENCER; } if (key_tap(KEY_START)) { toggle_playing(); } }