diff --git a/applications/services/dolphin/helpers/dolphin_state.c b/applications/services/dolphin/helpers/dolphin_state.c index e0e5dbe60..2a4ef64d3 100644 --- a/applications/services/dolphin/helpers/dolphin_state.c +++ b/applications/services/dolphin/helpers/dolphin_state.c @@ -14,9 +14,9 @@ #define DOLPHIN_STATE_PATH INT_PATH(DOLPHIN_STATE_FILE_NAME) #define DOLPHIN_STATE_HEADER_MAGIC 0xD0 #define DOLPHIN_STATE_HEADER_VERSION 0x01 -int level_array[30] = {100, 200, 300, 450, 600, 750, 950, 1150, 1350, 1600, - 1850, 2100, 2400, 2700, 3000, 3350, 3700, 4050, 4450, 4850, - 5250, 5700, 6150, 6600, 7100, 7600, 8100, 8650, 9200}; +int level_array[DOLPHIN_LEVEL_COUNT] = {100, 200, 300, 450, 600, 750, 950, 1150, 1350, 1600, + 1850, 2100, 2400, 2700, 3000, 3350, 3700, 4050, 4450, 4850, + 5250, 5700, 6150, 6600, 7100, 7600, 8100, 8650, 9200}; #define BUTTHURT_MAX 14 #define BUTTHURT_MIN 0 @@ -82,7 +82,7 @@ uint64_t dolphin_state_timestamp() { } bool dolphin_state_is_levelup(int icounter) { - for(int i = 0; i < 30; ++i) { + for(int i = 0; i < DOLPHIN_LEVEL_COUNT; ++i) { if((icounter == level_array[i])) { return true; } @@ -91,30 +91,30 @@ bool dolphin_state_is_levelup(int icounter) { } uint8_t dolphin_get_level(int icounter) { - for(int i = 0; i < 29; ++i) { + for(int i = 0; i < DOLPHIN_LEVEL_COUNT; ++i) { if(icounter <= level_array[i]) { return i + 1; } } - return 30; + return DOLPHIN_LEVEL_COUNT + 1; } uint32_t dolphin_state_xp_above_last_levelup(int icounter) { - for(int i = 1; i < 29; ++i) { - if(icounter <= level_array[i]) { - return icounter - level_array[i - 1]; + for(int i = DOLPHIN_LEVEL_COUNT; i >= 0; --i) { + if(icounter >= level_array[i]) { + return icounter - level_array[i]; } } return icounter; } uint32_t dolphin_state_xp_to_levelup(int icounter) { - for(int i = 0; i < 29; ++i) { + for(int i = 0; i < DOLPHIN_LEVEL_COUNT; ++i) { if(icounter <= level_array[i]) { return level_array[i] - icounter; } } - return (uint32_t)-1 - icounter; + return (uint32_t)-1; } void dolphin_state_on_deed(DolphinState* dolphin_state, DolphinDeed deed) { @@ -198,4 +198,4 @@ void dolphin_state_clear_limits(DolphinState* dolphin_state) { } dolphin_state->data.butthurt_daily_limit = 0; dolphin_state->dirty = true; -} \ No newline at end of file +} diff --git a/applications/services/dolphin/helpers/dolphin_state.h b/applications/services/dolphin/helpers/dolphin_state.h index edd7878e9..fcfaaf1a5 100644 --- a/applications/services/dolphin/helpers/dolphin_state.h +++ b/applications/services/dolphin/helpers/dolphin_state.h @@ -5,6 +5,8 @@ #include #include +#define DOLPHIN_LEVEL_COUNT 29 + typedef struct DolphinState DolphinState; typedef struct { uint8_t icounter_daily_limit[DolphinAppMAX]; diff --git a/applications/settings/dolphin_passport/passport.c b/applications/settings/dolphin_passport/passport.c index b6c94d2c1..c18455dbf 100644 --- a/applications/settings/dolphin_passport/passport.c +++ b/applications/settings/dolphin_passport/passport.c @@ -102,7 +102,7 @@ static void render_callback(Canvas* canvas, void* _ctx) { } uint32_t xp_have = xp_levelup - xp_need; - if(stats->level == 30) { + if(stats->level == DOLPHIN_LEVEL_COUNT + 1) { xp_progress = 0; } else { xp_progress = xp_need * 64 / xp_levelup; @@ -116,7 +116,7 @@ static void render_callback(Canvas* canvas, void* _ctx) { } // portrait - furi_assert((stats->level > 0) && (stats->level <= 30)); + furi_assert((stats->level > 0) && (stats->level <= DOLPHIN_LEVEL_COUNT + 1)); uint16_t tmpLvl = 0; if(settings->sfw_mode) { canvas_draw_icon(canvas, 11, 2, portraits_sfw[mood][tmpLvl]); @@ -126,7 +126,11 @@ static void render_callback(Canvas* canvas, void* _ctx) { const char* my_name = furi_hal_version_get_name_ptr(); snprintf(level_str, 12, "Level: %hu", stats->level); - snprintf(xp_str, 12, "%lu/%lu", xp_have, xp_levelup); + if(stats->level == DOLPHIN_LEVEL_COUNT + 1) { + snprintf(xp_str, 12, "Max Level!"); + } else { + snprintf(xp_str, 12, "%lu/%lu", xp_have, xp_levelup); + } canvas_set_font(canvas, FontSecondary); canvas_draw_str(canvas, 58, 10, my_name ? my_name : "Unknown"); canvas_draw_str(canvas, 58, 22, mood_str); @@ -138,7 +142,7 @@ static void render_callback(Canvas* canvas, void* _ctx) { canvas_set_font(canvas, FontSecondary); canvas_set_color(canvas, ColorWhite); - canvas_draw_box(canvas, 123 - xp_progress, 45, xp_progress + 1, 5); + canvas_draw_box(canvas, 123 - xp_progress, 45, xp_progress + (xp_progress > 0), 5); canvas_set_color(canvas, ColorBlack); canvas_draw_icon(canvas, 52, 51, &I_Ok_btn_9x9);