diff --git a/achievement.cpp b/achievement.cpp index c9caac46..dfd8781d 100644 --- a/achievement.cpp +++ b/achievement.cpp @@ -3,15 +3,10 @@ #define NUMLEADER 78 -#define SCORE_UNKNOWN (-1) -#define NO_SCORE_YET (-2) - bool offlineMode = false; int syncstate = 0; -int currentscore[NUMLEADER]; - const char* leadernames[NUMLEADER] = { "Score", "Diamonds", "Gold", "Spice", "Rubies", "Elixirs", "Shards100", "Totems", "Daisies", "Statues", "Feathers", "Sapphires", @@ -73,8 +68,6 @@ const char* leadernames[NUMLEADER] = { #define LB_STATISTICS 62 #define LB_HALLOWEEN 63 -bool haveLeaderboard(int id); - void upload_score(int id, int v); string achievementMessage[3]; @@ -480,9 +473,9 @@ int specific_what = 0; void improve_score(int i, eItem what) { if(offlineMode) return; #ifdef HAVE_ACHIEVEMENTS - if(haveLeaderboard(i)) updateHi(what, currentscore[i]); + if(haveLeaderboard(i)) updateHi(what, get_currentscore(i)); if(items[what] && haveLeaderboard(i)) { - if(items[what] > currentscore[i] && currentscore[i] != SCORE_UNKNOWN) { + if(items[what] > get_currentscore(i) && score_loaded(i)) { specific_improved++; specific_what = what; } upload_score(i, items[what]); @@ -592,6 +585,13 @@ void achievement_final(bool really_final) { achievement_score(LB_HALLOWEEN, items[itTreat]); return; } + +#ifdef CAP_DAILY + if(daily::on) { + upload_score(daily::find_daily_lbid(daily::daily_id), gold(NO_LOVE)); + return; + } +#endif if(geometry) return; @@ -623,8 +623,8 @@ void achievement_final(bool really_final) { int tg = gold(); if(tg && haveLeaderboard(sid)) { - if(tg > currentscore[sid] && currentscore[sid] != SCORE_UNKNOWN) { - if(currentscore[sid] < 0) total_improved += 2; + if(tg > get_currentscore(sid) && score_loaded(sid)) { + if(get_currentscore(sid) <= 0) total_improved += 2; total_improved++; // currentscore[sid] = tg; } upload_score(sid, tg); @@ -692,15 +692,17 @@ void achievement_victory(bool hyper) { int ih2 = hyper ? 16 : inv::on ? 71 : shmup::on ? 30 : 14; int improved = 0; - if(currentscore[ih1] == NO_SCORE_YET || currentscore[ih2] == NO_SCORE_YET) - improved += 4; + if(score_loaded(ih1) && score_loaded(ih2)) { + if(get_currentscore(ih1) == score_default(ih1) || get_currentscore(ih2) == score_default(ih2)) + improved += 4; - if(currentscore[ih1] < 0 || currentscore[ih1] > t) { - improved++; // currentscore[ih1] = t; - } - - if(currentscore[ih2] < 0 || currentscore[ih2] > turncount) { - improved+=2; // currentscore[ih2] = turncount; + if(get_currentscore(ih1) > t) { + improved++; + } + + if(get_currentscore(ih2) > turncount) { + improved+=2; + } } if(hyper) @@ -768,3 +770,12 @@ bool isAscending(int i) { return i == 13 || i == 14 || i == 15 || i == 16 || i == 29 || i == 30 || i == 45; }; +int score_default(int i) { + if(isAscending(i)) return 1999999999; + else return 0; + } + +#ifndef HAVE_ACHIEVEMENTS +int get_sync_status() { return 0; } +void set_priority_board(int) { } +#endif \ No newline at end of file diff --git a/hyper.h b/hyper.h index 617cea62..f82d3d28 100644 --- a/hyper.h +++ b/hyper.h @@ -307,9 +307,6 @@ int hrand(int i); template int size(const T& x) {return int(x.size()); } #endif -extern int currentscore[NUMLEADER]; -extern int syncstate; - // initialize the achievement system. void achievement_init(); @@ -3369,3 +3366,10 @@ void queuechr(const transmatrix& V, double size, char chr, int col, int frame = extern bool just_gmatrix; void drawrec(const heptspin& hs, hstate s, const transmatrix& V); + +bool haveLeaderboard(int id); +int get_currentscore(int id); +void set_priority_board(int id); +int get_sync_status(); +bool score_loaded(int id); +int score_default(int id); diff --git a/yendor.cpp b/yendor.cpp index ca19790a..2bae268d 100644 --- a/yendor.cpp +++ b/yendor.cpp @@ -20,7 +20,7 @@ typedef vector > subscoreboard; void displayScore(subscoreboard& s, int x) { int vf = min((vid.yres-64) / 70, vid.xres/80); - if(syncstate == 1) { + if(get_sync_status() == 1) { displayfr(x, 56, 1, vf, "(syncing)", 0xC0C0C0, 0); } else { @@ -433,6 +433,7 @@ namespace yendor { } void showMenu() { + set_priority_board(LB_YENDOR_CHALLENGE); int s = vid.fsize; vid.fsize = vid.fsize * 4/5; dialog::init(XLAT("Yendor Challenge"), iinf[itOrbYendor].color, 150, 100); @@ -663,6 +664,13 @@ namespace tactic { } void showMenu() { + + int xc = modecode(); + + if(xc == 0) set_priority_board(LB_PURE_TACTICS); + if(xc == 2) set_priority_board(LB_PURE_TACTICS_SHMUP); + if(xc == 4) set_priority_board(LB_PURE_TACTICS_COOP); + cmode = sm::ZOOMABLE; mouseovers = XLAT("pure tactics mode") + " - " + mouseovers; @@ -682,8 +690,6 @@ namespace tactic { if(on) record(specialland, items[treasureType(specialland)]); - int xc = modecode(); - getcstat = SDLK_ESCAPE; for(int i=0; i