brute-force on startup seed.
Still I'm not sure whether this rollback would be possible - if second mersenne roll is not bijective, then we'd be stuck with anyway.
Looking at Mersenne again, I start to note that from one value only the first bit is taken. Recalculating 32Bit from 1Bit seems a bit tedius to me and if I could do that, I'd have a compression/decrompression method everyone would buy.
So I went for bruteforce. Well, "intelligent" bruteforce. I'm counting the seed not sequentally but in a specific order that I saw rather useful:
(with byte1 being MSB. I know, I know. That's uncommon)
for (byte3=0; byte3<=255; byte3++){
for (byte1=0; byte1<=255; byte1++){
for (byte4=0; byte4<=255; byte4++){
byte2 is the one I consider to grow slowest, so it has an outside call. I even use forks to let 8 threads work on different hour values at the same time.
it works surprisingly well. At the moment, 8-thread-forking only is done for bytes 0-23. If no one else uses the octocore, it iterates through hours 0-23 in about two minutes.
Seems, I started my main game about 14:something.
it still only has limited use in cheat-testing. If a Pokemon that is said to be "caught fair" has an SIDTID-combination that could only be generated from a high hour value (xxHHxxxx), the OTrainer still might have waited a long time on game startup - for whatever reasons. Also, some Trainers change their ID (for whatever reasons) and I'm not sure whether that disqualifies all their Pokemon as cheats.
Anyone wanting me to guess their game start time by their SID/TID? ;)
TCC