|
Post by Dave on Feb 15, 2014 1:09:58 GMT
No, his file does not throw any "invalid" flags. So, the method he used to get all zeros is one that someone could "painstakingly" use to cheat, and still get in the Hall of Fame.
Then again, it may be that the recent errors introduced to the Hall of Fame validification process are causing this file to appear as valid, while it has caused others to appear as invalid... (In my opinion, this is not the case, however.)
|
|
|
Post by UrQuan on Feb 15, 2014 10:34:05 GMT
I did not use the copy-paste trick. (that if anything would be a painstaking process) This way was painstaking only because I have zero programming experience, and had to make sense of this guy's code. No offense, Dave! I'm not sure if Dave is okay with me posting how I did it here, but it involved a hacked client.
|
|
|
Post by Dave on Feb 15, 2014 15:32:41 GMT
Certainly no offense taken - However, I'd prefer if cheating methods were not posted publicly to the forum.
|
|
|
Post by rmsgrey on Feb 15, 2014 16:27:59 GMT
A lot of events that that we in daily speech call "impossible" are in fact infinitely more likely than this. And just like that, your mathematical credibility evaporates. The only way one putative event can be infinitely more likely than another is if the latter is logically impossible. Also, there are other potential explanations compared to which a genuine run is far more plausible - for example, that random noise happened to form a valid resume file (if the file were only 16 characters long, then the chances of generating that particular string of data out of random noise would already be 1 in 2^128 or ~3e-39...) Personally, my money's on something like a bad RNG making the odds much better.
|
|
|
Post by UrQuan on Feb 15, 2014 17:42:08 GMT
A lot of events that that we in daily speech call "impossible" are in fact infinitely more likely than this. And just like that, your mathematical credibility evaporates. The only way one putative event can be infinitely more likely than another is if the latter is logically impossible. Also, there are other potential explanations compared to which a genuine run is far more plausible - for example, that random noise happened to form a valid resume file (if the file were only 16 characters long, then the chances of generating that particular string of data out of random noise would already be 1 in 2^128 or ~3e-39...) Personally, my money's on something like a bad RNG making the odds much better. It's a figure of speech, come on dude. Of course I don't mean mathematically infinite . (Webster definition of infinite: extremely large or great) Okay, you got me, there are less likely possibilites. What are the odds that God came down from heaven and tinkered with the RNG? Probably less than 1e-37, I don't know. I'm sorry but you are really grasping at straws here. I was also considering bad RNG but after reading the logs and seeing no particular pattern in the numbers rolled, other than really good ones, and exactly where he needed them, I mostly omitted this possibility. Also the random numbers in the game are actually picked by an RNG rolling two random numbers, and the corresponding section on the 10x10 RNT is used, so there is even no direct correlation. I'm not saying it's completely impossible, but how can you possibly argue that cheating wouldn't be more likely?
|
|
|
Post by rmsgrey on Feb 16, 2014 19:27:42 GMT
I was also considering bad RNG but after reading the logs and seeing no particular pattern in the numbers rolled, other than really good ones, and exactly where he needed them, I mostly omitted this possibility. Also the random numbers in the game are actually picked by an RNG rolling two random numbers, and the corresponding section on the 10x10 RNT is used, so there is even no direct correlation. I'm not saying it's completely impossible, but how can you possibly argue that cheating wouldn't be more likely? It depends a lot on the nature of the pRNG used - one of the issues in computer statistics is that poor pRNGs, while they produce convincingly random-looking sequences only produce a comparatively small number of different sequences, so the conclusions you draw end up reflecting the quirks of the pRNG rather than a true random sample. If there was a 16-bit seed being used, then the odds of any given run it produces coming up would be 1 in 65536 - still fairly unlikely, but plausible. One trick Dave isn't using in order to validate game logs is to use a seeded pRNG and record the seed in the log - that way, the "random" numbers can be reproduced and the run validated by comparing the log to what the program does when run with that sequence of rolls.
|
|
|
Post by Dave on Feb 16, 2014 20:00:45 GMT
UrQuan PMed me with his cheating technique (Thanks for that, UrQuan). It did involve changing the source code, and using that to produce a resumeX file that would pass the tests, but still be a cheat. (Of course, this is exactly what I ask people *not* to do on the source code downloads... but this was just a "case in point" as to how someone could cheat and it wouldn't be detected by the obvious means.)
Perhaps another easier way to prevent cheating could be for me to have the program record the CRC of the executable file used to save the resumeX file... a simple comparison with the CRC of the official latest version would be telling as to whether it was valid or not. Of course, someone would have to be using the latest version of the program when they save the resume file... And that still wouldn't prevent people from using the source code to just manually insert the correct CRC for the latest release version anyway.
So, I guess it all comes down to people following the ways of the Kai: being honest and trustworthy. Which I believe kamikaze is, by the way - over the *years* of my interaction with him, he's never given me one reason to doubt that.
|
|
|
Post by jdubs1211 on Feb 16, 2014 21:10:13 GMT
UrQuan PMed me with his cheating technique (Thanks for that, UrQuan). It did involve changing the source code, and using that to produce a resumeX file that would pass the tests, but still be a cheat. (Of course, this is exactly what I ask people *not* to do on the source code downloads... but this was just a "case in point" as to how someone could cheat and it wouldn't be detected by the obvious means.) Perhaps another easier way to prevent cheating could be for me to have the program record the CRC of the executable file used to save the resumeX file... a simple comparison with the CRC of the official latest version would be telling as to whether it was valid or not. Of course, someone would have to be using the latest version of the program when they save the resume file... And that still wouldn't prevent people from using the source code to just manually insert the correct CRC for the latest release version anyway. So, I guess it all comes down to people following the ways of the Kai: being honest and trustworthy. Which I believe kamikaze is, by the way - over the *years* of my interaction with him, he's never given me one reason to doubt that. One could also make the argument that the random number table used in Lone Wolf is not an actual random number generator so the odds of getting a high number of 0's and 9's is not as mathematically improbable
|
|
|
Post by UrQuan on Feb 17, 2014 10:57:26 GMT
I was also considering bad RNG but after reading the logs and seeing no particular pattern in the numbers rolled, other than really good ones, and exactly where he needed them, I mostly omitted this possibility. Also the random numbers in the game are actually picked by an RNG rolling two random numbers, and the corresponding section on the 10x10 RNT is used, so there is even no direct correlation. I'm not saying it's completely impossible, but how can you possibly argue that cheating wouldn't be more likely? It depends a lot on the nature of the pRNG used - one of the issues in computer statistics is that poor pRNGs, while they produce convincingly random-looking sequences only produce a comparatively small number of different sequences, so the conclusions you draw end up reflecting the quirks of the pRNG rather than a true random sample. If there was a 16-bit seed being used, then the odds of any given run it produces coming up would be 1 in 65536 - still fairly unlikely, but plausible. One trick Dave isn't using in order to validate game logs is to use a seeded pRNG and record the seed in the log - that way, the "random" numbers can be reproduced and the run validated by comparing the log to what the program does when run with that sequence of rolls. What? The odds of any given run? Yes, but what does that have to do with anything. The distribution will still be as uniform as ever. I checked the source code and the seed used is SDL_GetTicks. It says it's the time in milliseconds since the SDL library initialization. This is maybe not absolutely great, as it could theoretically result in duplicate seeds if the RNG is reseeded, but even being able to recreate a certain seed (or any!) doesn't make a difference. Logging the seed seems like a very good idea though. Hmm, would it be possible to somehow check all the possible sequences produces by the seed?
|
|
|
Post by UrQuan on Feb 17, 2014 11:49:09 GMT
UrQuan PMed me with his cheating technique (Thanks for that, UrQuan). It did involve changing the source code, and using that to produce a resumeX file that would pass the tests, but still be a cheat. (Of course, this is exactly what I ask people *not* to do on the source code downloads... but this was just a "case in point" as to how someone could cheat and it wouldn't be detected by the obvious means.) Perhaps another easier way to prevent cheating could be for me to have the program record the CRC of the executable file used to save the resumeX file... a simple comparison with the CRC of the official latest version would be telling as to whether it was valid or not. Of course, someone would have to be using the latest version of the program when they save the resume file... And that still wouldn't prevent people from using the source code to just manually insert the correct CRC for the latest release version anyway. So, I guess it all comes down to people following the ways of the Kai: being honest and trustworthy. Which I believe kamikaze is, by the way - over the *years* of my interaction with him, he's never given me one reason to doubt that. One could also make the argument that the random number table used in Lone Wolf is not an actual random number generator so the odds of getting a high number of 0's and 9's is not as mathematically improbable Dave: I understand you trust him, and I understand why you trust him, but what does a subjective opinion really weigh against the odds here? jdubs1211: An RNG is used to pick the number from the RNT. But this is also not relevant since the distribution will still be even. In fact for the book 11 RNT there are only nine 0's, so you are even worse off.
|
|
|
Post by rmsgrey on Feb 18, 2014 0:11:43 GMT
What? The odds of any given run? Yes, but what does that have to do with anything. The distribution will still be as uniform as ever. If you only have a limited number of possible sequences, then you have one of two possibilities - either it's absolutely impossible to get through 11 books with no deaths, or it's a relatively good chance (better than 1e-5 chance if there are 65536 possible sequences). Of course, it's much more likely to be impossible if you assume the available sequences are picked at random, but they're not - they're chosen to be easily generated. That means you're no longer looking at truly independent numbers, so the figures you get from assuming statistical independence are only valid as a best available guess - to be abandoned if more evidence surfaces. The nature of the seed is relatively unimportant - a millisecond timer measuring an interval that's determined by human actions is a fairly standard option - the important thing is the range of values it can take, and hence the range of number sequences that can be generated. Generating good random numbers is hard (at least without specialist hardware - in theory you could do it using a geiger counter and a high precision timer) and even getting "good enough" ones only generally applies to particular applications...
|
|
|
Post by UrQuan on Feb 18, 2014 15:49:33 GMT
What? The odds of any given run? Yes, but what does that have to do with anything. The distribution will still be as uniform as ever. If you only have a limited number of possible sequences, then you have one of two possibilities - either it's absolutely impossible to get through 11 books with no deaths, or it's a relatively good chance (better than 1e-5 chance if there are 65536 possible sequences). Of course, it's much more likely to be impossible if you assume the available sequences are picked at random, but they're not - they're chosen to be easily generated. That means you're no longer looking at truly independent numbers, so the figures you get from assuming statistical independence are only valid as a best available guess - to be abandoned if more evidence surfaces. The nature of the seed is relatively unimportant - a millisecond timer measuring an interval that's determined by human actions is a fairly standard option - the important thing is the range of values it can take, and hence the range of number sequences that can be generated. Generating good random numbers is hard (at least without specialist hardware - in theory you could do it using a geiger counter and a high precision timer) and even getting "good enough" ones only generally applies to particular applications... Of course there is a limited number of sequences (extremely limited compared to all possible ones). I fail to see how this is at all relevant. It most certainly does not mean that any specific one is more likely to be among those. And I say this again, the distribution of numbers will be uniform, it does not matter that they are not "random". This is the whole idea behind PRNGs. They are not meant to be unpredictable, which is one feature of randomness, but the distribution is meant to be uniform. Even if there somehow was a bias, which there isn't except for some skew (modulo bias), how would that translate to "good rolls" on the RNT? This is exactly my point about the seed. It is not determined by human actions, and from what I see, the range of numbers should be very limited. I don't know how much time it takes between the SDL library initialization and when the RNG is seeded, but I'm guessing not much. Certainly not more than a few seconds, and the difference for each time the program is run would be even smaller. If this is true (I might be missing something with how it works), then there would only be 10... 100? different possible seeds, at least for the same computer. Maybe Dave could comment about this. Theoretically it should be possible to get all possible sequences, take into account the Lone Wolf RNTs, and see if a sequence of Kamikazes rolls are in there. That would very mercilessly disprove the run immediately. Of course a different seed is used if the program is restarted, but unless he quit and restarted every few rolls this would still be possible. And by the way, just to avoid muddying the waters too much, 1e-5 would still be practically impossible. Doing runs for the rest of your life you would barely win once. No one will ever beat even those odds in a real run. My prediction is that no one will ever beat 5/15 1-6 (with [fudgeing] combat skills) which is something like 0.05% in total. Doesn't sound that impossible? Well go ahead and try. Edit: I tried changing the seed to (SDL_GetTicks()/1000); ,i.e. to seconds and the seed comes up as 3 every single time, which means that it takes 3000 to 3999 milliseconds, so for my computer there are at most 1000 different possible seeds, and probably less than 100 in practice. Very interesting (and not a very good seed!). And again, there being few possible sequences does not make it more likely that a specific one is among those, in fact it of course makes it less likely. It also means that it is almost impossible that the necessary sequence of numbers even exists at all in the relevant range. Edit 2: I narrowed it down even further. It's 3.7 seconds. Only at centiseconds do I start to get different seeds, which means there are less than a hundred possible seeds overall. Funny. And not a good sign for Kamikaze supporters.
|
|
|
Post by Dave on Feb 18, 2014 17:50:06 GMT
To be honest, I'm not at all sure how I would implement the seed checking in the way you are describing...
We can't do a simple comparison of the resultant random numbers sequences from the seed and compare them to the numbers in any given combat from kamimaze's run, because, as you have observed earlier, those RNT numbers are the result of two other random numbers (the column and row). So, there is no record of *which* column and/or row was selected for each of the zeros/nines/eights in the combat history of kamikaze's run.
|
|
|
Post by UrQuan on Feb 18, 2014 18:50:31 GMT
To be honest, I'm not at all sure how I would implement the seed checking in the way you are describing... We can't do a simple comparison of the resultant random numbers sequences from the seed and compare them to the numbers in any given combat from kamimaze's run, because, as you have observed earlier, those RNT numbers are the result of two other random numbers (the column and row). So, there is no record of *which* column and/or row was selected for each of the zeros/nines/eights in the combat history of kamikaze's run. Right, but it should be possible to associate 2 numbers (I'm guessing the rand() function is simply called twice for each roll on the RNT?) with a number on an RNT for a specific book, and get the correct random numbers, as it is done in the client. I have no idea how to do any of this in practice though (or getting the sequences to begin with). But for future cheating detection, you could record the seed in the resume file or something, right? Since then it's easy to just check with the client if the rolls match, if necessary. Of course it might take a while to get to the relevant sequence of numbers if the RNG has not been reseeded for a while. Maybe it would also be relevant then to reseed when restarting a campaign or something, so at least no-death runs could be checked this way. Also in general you probably need to change the seed to something with a bigger range, like time? but you probably know more about that than me.
|
|
|
Post by kamikaze1900666 on Feb 25, 2014 0:41:43 GMT
First, I prefer Kaze, as Kami is a bit closer to megalomaniac, which I try to avoid. ;-)
Second, this isn't the first time I've had to defend my dumb luck- the Final Fantasy boards took offense to my Lowest Level Possible run (four Level 8 White Magi). I tried playing the lottery after that run, but am sorry to report my annual income has only been around $17k, consisting of 40 hour weeks LOL
Anyways, the math involving the probabilities during that run reached the astronomical considering all the different factors that went into each dungeon and encounter (least of which was beating Chaos with one party member surviving with 1 HP after surviving a couple NUKEs). Chatting with a couple people who dissected the RNG code helped alleviate the tension, though it still didn't dismiss the fact I had lucked out. That's mostly due to the fact that I still don't understand how the RNG actually operates on that game. Aside from the encounter manipulation and battle strategy, I have no idea how I pulled it off besides luck.
With Lone Wolf, there are quite a few more factors under my control. Taking the paths with the fewest or most opportune combats, minimizing damage, meta-game strategies (left the Swerd at home in Book 10), etc. Granted, with the 5/15, I made a few mistakes (especially later on), but my familiarity with the books paid off. Honestly, no CS boosting abilities is the best way to avoid as much combat as possible. Healing, on the other hand, would've come in handy (especially in finding more potions/herbs).
That's about where my actual control ends. Most combats, I abused the fact that two-handed weapons conferred no EP loss in the first round, switching to a one-handed weapon for the other bonuses in the second round. Aside from that, once again, dumb luck was my ally. The RNT offers better than true odds at racking up some zeroes in some books, worse in others. I left the number-picking animations on because of this. But that still doesn't change the fact it was luck. I often wish my real-life luck was as good as it is when playing games, but at least my in-game luck gives me something to fantasize about as a break from the daily grind.
|
|