1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-11-27 14:37:16 +00:00

identify modes from different versions

This commit is contained in:
Zeno Rogue 2024-06-02 12:27:01 +02:00
parent 809351e6a5
commit 226881020d
2 changed files with 27 additions and 6 deletions

View File

@ -1287,7 +1287,7 @@ EX void loadsave() {
&& !(land == laOcean && verless(ver, "8.0f")) && !(land == laOcean && verless(ver, "8.0f"))
&& !(land == laTerracotta && verless(ver, "10.3e")) && !(land == laTerracotta && verless(ver, "10.3e"))
&& !(land == laWildWest && verless(ver, "11.3b") && !verless(ver, "11.3"))) && !(land == laWildWest && verless(ver, "11.3b") && !verless(ver, "11.3")))
tactic::record(l2, score, xc); tactic::record(l2, score, get_identify(xc));
anticheat::nextid(tactic::id, ver, cert); anticheat::nextid(tactic::id, ver, cert);
} }
} }
@ -1305,6 +1305,7 @@ EX void loadsave() {
if(won) if(anticheat::check(cert, ver, won ? "WON" : "LOST", tc, t, ts, xc*999 + cid + 256 * oy)) { if(won) if(anticheat::check(cert, ver, won ? "WON" : "LOST", tc, t, ts, xc*999 + cid + 256 * oy)) {
if(xc == 19 && cid == 25) xc = 0; if(xc == 19 && cid == 25) xc = 0;
xc = get_identify(xc);
if(cid > 0 && cid < YENDORLEVELS) if(cid > 0 && cid < YENDORLEVELS)
if(!(verless(ver, "8.0f") && oy > 1 && cid == 15)) if(!(verless(ver, "8.0f") && oy > 1 && cid == 15))
if(!(verless(ver, "9.3b") && oy > 1 && (cid == 27 || cid == 28))) if(!(verless(ver, "9.3b") && oy > 1 && (cid == 27 || cid == 28)))

View File

@ -967,6 +967,7 @@ EX }
map<string, modecode_t> code_for; map<string, modecode_t> code_for;
EX map<modecode_t, string> meaning; EX map<modecode_t, string> meaning;
EX map<modecode_t, modecode_t> identify_modes;
char xcheat; char xcheat;
@ -1095,6 +1096,18 @@ EX void load_mode_data_with_zero(hstream& f) {
} }
} }
#if HDR
constexpr int FIRST_MODECODE = 100000;
#endif
EX modecode_t get_identify(modecode_t xc) {
if(xc < FIRST_MODECODE) {
meaning[xc] = "LEGACY";
return xc;
}
return identify_modes[xc];
}
EX modecode_t modecode(int mode) { EX modecode_t modecode(int mode) {
modecode_t x = legacy_modecode(); modecode_t x = legacy_modecode();
if(x != UNKNOWN) return x; if(x != UNKNOWN) return x;
@ -1103,16 +1116,19 @@ EX modecode_t modecode(int mode) {
shstream ss; shstream ss;
ss.write(ss.vernum); ss.write(ss.vernum);
save_mode_data(ss); save_mode_data(ss);
string code = ss.s;
string nover = ss.s.substr(2);
if(code_for.count(ss.s)) return code_for[ss.s]; if(code_for.count(nover)) return code_for[nover];
if(mode == 1) return UNKNOWN; if(mode == 1) return UNKNOWN;
modecode_t next = 100000; modecode_t next = FIRST_MODECODE;
while(meaning.count(next)) next++; while(meaning.count(next)) next++;
meaning[next] = ss.s; meaning[next] = code;
code_for[ss.s] = next; code_for[nover] = next;
identify_modes[next] = next;
if(mode == 2) return next; if(mode == 2) return next;
@ -1134,8 +1150,12 @@ EX void load_modecode_line(string s) {
if(!s[pos]) return; if(!s[pos]) return;
pos++; pos++;
string t = from_hexstring(s.substr(pos)); string t = from_hexstring(s.substr(pos));
code_for[t] = code; string nover = t.substr(2);
meaning[code] = t; meaning[code] = t;
if(code_for.count(nover))
code = identify_modes[code] = code_for[nover];
else identify_modes[code] = code;
code_for[nover] = code;
} }
EX namespace peace { EX namespace peace {