diff --git a/src/main.c b/src/main.c index 479f1ff..1ac22d1 100644 --- a/src/main.c +++ b/src/main.c @@ -662,6 +662,10 @@ handle_main_input(void) characterSelectScreen = NULL; menu_destroy(charSelectMenu); charSelectMenu = NULL; + if (mainMenu == NULL) { + resetGame(); + initMainMenu(); + } gGameState = MENU; break; case MENU: @@ -940,9 +944,12 @@ run_game_render(void) static inline void register_scores(void) { - uint8_t details[4] = { (uint8_t) gPlayer->stats.lvl, (uint8_t) cLevel, 0, 0 }; + uint8_t details[4] = { (uint8_t) gPlayer->stats.lvl, (uint8_t) cLevel, (uint8_t) (gPlayer->class + 1), 0 }; steam_register_score((int) gPlayer->gold, (int32_t*) &details, 1); steam_register_kills((int) gPlayer->stat_data.kills, (int32_t*) &details, 1); + if (quickGame) { + steam_register_qp_score((int) gPlayer->gold, (int32_t*) &details, 1); + } if (gPlayer->class == ROGUE) { steam_set_achievement(ROGUE_LIKE); steam_register_rogue_score((int) gPlayer->gold, (int32_t*) &details, 1); diff --git a/src/steam/steamworks_api_wrapper.c b/src/steam/steamworks_api_wrapper.c index 80c8146..c5c3ffc 100644 --- a/src/steam/steamworks_api_wrapper.c +++ b/src/steam/steamworks_api_wrapper.c @@ -7,10 +7,11 @@ #include "../gui.h" #include "../timer.h" -static const char *LB_HIGHSCORE = "Highscore"; -static const char *LB_ROGUE_HIGHSCORE = "Rogue Highscore"; -static const char *LB_WARRIOR_HIGHSCORE = "Warrior Highscore"; -static const char *LB_KILLS = "Most Kills"; +static const char *LB_HIGHSCORE = "Highscore"; +static const char *LB_QUICKPLAY_HIGHSCORE = "Quickplay Highscore"; +static const char *LB_ROGUE_HIGHSCORE = "Rogue Highscore"; +static const char *LB_WARRIOR_HIGHSCORE = "Warrior Highscore"; +static const char *LB_KILLS = "Most Kills"; static Achievement g_Achievements[] = { _ACH_ID(BAD_DOG, "Bad Dog"), @@ -26,6 +27,7 @@ static bool m_Initiated = false; static bool m_bStatsReceived = false; static Sint64 m_AppID = 0; static Sint64 m_hHighscoreLeaderboard = 0; +static Sint64 m_hQpHighscoreLeaderboard = 0; static Sint64 m_hKillsLeaderboard = 0; static Sint64 m_hRogueHighscore = 0; static Sint64 m_hWarriorHighscore = 0; @@ -65,6 +67,8 @@ leaderboard_received(Sint64 hLeaderboard, const char *name) m_hRogueHighscore = hLeaderboard; else if (strcmp(LB_WARRIOR_HIGHSCORE, name) == 0) m_hWarriorHighscore = hLeaderboard; + else if (strcmp(LB_QUICKPLAY_HIGHSCORE, name) == 0) + m_hQpHighscoreLeaderboard = hLeaderboard; } bool @@ -100,6 +104,8 @@ request_data_queue_run(void) steam_request_stats(); else if (!m_hHighscoreLeaderboard) c_SteamUserStats_FindLeaderboard(LB_HIGHSCORE); + else if (!m_hQpHighscoreLeaderboard) + c_SteamUserStats_FindLeaderboard(LB_QUICKPLAY_HIGHSCORE); else if (!m_hKillsLeaderboard) c_SteamUserStats_FindLeaderboard(LB_KILLS); else if (!m_hRogueHighscore) @@ -137,6 +143,13 @@ void steam_register_score(Sint32 nScore, const int32_t *details, int32_t nDetail c_SteamUserStats_UploadLeaderboardScore(m_hHighscoreLeaderboard, nScore, details, nDetails); } +void steam_register_qp_score(Sint32 nScore, const int32_t *details, int32_t nDetails) +{ + if (!m_hQpHighscoreLeaderboard) + return; + c_SteamUserStats_UploadLeaderboardScore(m_hQpHighscoreLeaderboard, nScore, details, nDetails); +} + void steam_register_warrior_score(Sint32 nScore, const int32_t * details, int32_t nDetails) { if (!m_hWarriorHighscore) diff --git a/src/steam/steamworks_api_wrapper.h b/src/steam/steamworks_api_wrapper.h index 4059d9f..b4febfd 100644 --- a/src/steam/steamworks_api_wrapper.h +++ b/src/steam/steamworks_api_wrapper.h @@ -38,6 +38,8 @@ void steam_set_achievement(EAchievement eAch); void steam_register_score(Sint32 nScore, const int32_t *details, int32_t nDetails); +void steam_register_qp_score(Sint32 nScore, const int32_t *details, int32_t nDetails); + void steam_register_warrior_score(Sint32 nScore, const int32_t *details, int32_t nDetails); void steam_register_rogue_score(Sint32 nScore, const int32_t *details, int32_t nDetails);