fixed the 4xStabber and Princess achievements

This commit is contained in:
Zeno Rogue 2021-02-04 16:15:47 +01:00
parent e7865a62b4
commit 0c0ca95897
4 changed files with 24 additions and 12 deletions

View File

@ -12,6 +12,8 @@ namespace hr {
#define NUMLEADER 85
EX bool test_achievements = false;
EX bool offlineMode = false;
EX const char* leadernames[NUMLEADER] = {
@ -132,19 +134,26 @@ EX set<string> got_achievements;
EX void achievement_gain_once(const string& s, char flags IS(0)) {
LATE(achievement_gain_once(s, flags));
if(wrongMode(flags)) return;
if(got_achievements.count(s)) return;
if(wrongMode(flags)) {
if(test_achievements) println(hlog, "wrong mode for achievement: ", s);
else return;
}
got_achievements.insert(s);
achievement_gain(s.c_str(), flags);
}
EX void achievement_log(const char* s, char flags) {
#ifdef PRINT_ACHIEVEMENTS
printf("achievement = %s [%d]\n", s, wrongMode(flags));
#endif
if(wrongMode(flags)) return;
if(wrongMode(flags)) {
if(test_achievements) println(hlog, "wrong mode for achievement: ", s);
return;
}
if(test_achievements) {
println(hlog, "got achievement:", s);
return;
}
for(int i=0; i<isize(achievementsReceived); i++)
if(achievementsReceived[i] == s) return;
@ -199,7 +208,7 @@ EX void achievement_collection(eItem it) {
}
EX void achievement_collection2(eItem it, int q) {
if(cheater) return;
if(cheater && !test_achievements) return;
if(randomPatternsMode) return;
LATE( achievement_collection2(it, q); )
@ -529,7 +538,7 @@ EX void achievement_collection2(eItem it, int q) {
*/
EX void achievement_count(const string& s, int current, int prev) {
if(cheater) return;
if(cheater && !test_achievements) return;
if(shmup::on) return;
if(randomPatternsMode) return;
LATE( achievement_count(s, current, prev); )

View File

@ -1298,7 +1298,7 @@ EX void stabbingAttack(movei mi, eMonster who, int bonuskill IS(0)) {
if(numsh == 2) {
if(lastdouble == turncount-1) achievement_count("STAB", 4, 0);
lastdouble = turncount;
changes.value_set(lastdouble, turncount);
}
}
}

View File

@ -159,6 +159,9 @@ int arg::readCommon() {
#endif
#endif
else if(argis("-test-ach"))
test_achievements = true;
else if(argis("-test"))
callhooks(hooks_tests);
else if(argis("-offline")) {

View File

@ -634,10 +634,10 @@ struct info {
if(!inv::on || !inv::usedForbidden)
#endif
achievement_gain_once("PRINCESS1");
princess::saved = true;
princess::everSaved = true;
changes.value_set(princess::saved, true);
changes.value_set(princess::everSaved, true);
if(inv::on && !princess::reviveAt)
princess::reviveAt = gold(NO_LOVE);
changes.value_set(princess::reviveAt, gold(NO_LOVE));
items[itSavedPrincess]++;
}
if(newdist == OUT_OF_PRISON && princess::challenge) {