From ee033b8993470e6cf47b4a505a2faba772dadb08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Crespo=20Tasc=C3=B3n?= Date: Sat, 3 Feb 2024 21:01:27 +0100 Subject: [PATCH] next: finishing level N unlocks level N+1 --- next/screen_game.c | 57 +++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/next/screen_game.c b/next/screen_game.c index 5e123e3..b4d77e4 100644 --- a/next/screen_game.c +++ b/next/screen_game.c @@ -84,35 +84,22 @@ static bool exit_to_menu = false; static void on_fade_update(s8 palval); -void sg_enter() +static void play_song(u8 songidx) { - // unlock if needed - if (!sg_is_select_level) { - if (!sg_is_ext_level) { - if (sg_ful_ori < sg_level_index) { - sg_ful_ori = sg_level_index; - music_song_init(NULL); - persist_save_levdata(); - } - } - else { - if (sg_ful_ext < sg_level_index) { - sg_ful_ext = sg_level_index; - music_song_init(NULL); - persist_save_levdata(); - } - } - } + if (0 == songidx) music_song_init(song_meteo); + else if (1 == songidx) music_song_init(song_lonely); + else if (2 == songidx) music_song_init(song_revolution); + else music_song_init(song_leaving); +} +void sg_enter() +{ // setup palette fade scheme palette_fade_init(SCREEN_TYPE_GAME, on_fade_update); // setup music u8 songidx = sg_level_index & 3; - if (0 == songidx) music_song_init(song_meteo); - else if (1 == songidx) music_song_init(song_lonely); - else if (2 == songidx) music_song_init(song_revolution); - else music_song_init(song_leaving); + play_song(songidx); AVOID_MUSIC_STUTTER @@ -237,6 +224,26 @@ void sg_update() if (moot) displayLineTiming(); } +static void saveUnlockedLevel() +{ + if (!sg_is_ext_level) { + if (sg_ful_ori < sg_level_index && sg_level_index < 21) { + sg_ful_ori = sg_level_index; + music_song_init(NULL); + persist_save_levdata(); + } + } + else { + if (sg_ful_ext < sg_level_index && sg_level_index < 41) { + sg_ful_ext = sg_level_index; + music_song_init(NULL); + persist_save_levdata(); + } + } + u8 songidx = sg_level_index & 3; + play_song(songidx); +} + static void on_fade_update(s8 palval) { anisprite_tick(); @@ -262,6 +269,7 @@ static void on_fade_update(s8 palval) sg_enter(); else if (!sg_is_select_level) { sg_level_index++; + saveUnlockedLevel(); if (sg_level_index == 20 || sg_level_index == 40) { sc_switch_screen(sf1_enter, sf1_update, NULL); return; @@ -269,8 +277,11 @@ static void on_fade_update(s8 palval) if (sg_level_index >= level_count) sg_level_index = 0; sc_switch_screen(si_enter, si_update, NULL); } - else + else { + sg_level_index++; + saveUnlockedLevel(); sc_switch_screen(sls_enter, sls_update, NULL); + } } }