Posts for Bobo_the_King

Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Of course anyone can vote for whomever they want, but I strongly endorse FatRatKnight for the award. He's been one of the most prolific members of the site throughout the years and is meticulous in all of his work. I'd be lying to say that his work in 2017 specifically stands out, but his contribution to Zook Man lives up to his consistent standard of producing TASes of the highest quality. Every TAS FatRatKnight produces is of the absolute highest caliber and I believe it is long past time that he is awarded for his efforts.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Spikestuff is correct and I'll remind you of what Pokota wrote in your other thread:
Pokota wrote:
Hello Kianotti15 Your submission to the workbench was cancelled by the judge, which is why there's no encode (video) of it. Please note that too many rejected runs will lead to your permission to submit runs to the workbench being restricted. In other words, if you submit a lot of runs that get rejected, you won't be able to submit runs. As Masterjun did in the submission thread, I'm going to point you to User Files, where you can upload your movie files without submitting them to the workbench, to the Super Mario World resources page, which has much useful information about the game, and to the Super Mario World discussion thread, where you can share your movies and get feedback.
Two users have independently warned you not to submit runs that are sub-par. Heed their advice. We're happy to have you here, Kianotti15, but I urge you to not make any more submissions and to instead use the user files to upload movies. Share them with members of the site and only if feedback is positive should you submit the run for judgment. (Actually, share them with whomever you want, but don't submit them unless senior members here give you the greenlight to do so.) Edit: Okay, so I have a few more things to say since there's been an avalanche of posts in the two minutes it took me to write that...
  • Don't quadruplequintuple-post (and counting). Use the edit button in the upper-right corner of your posts to edit them, as I'm doing now.
  • Don't quote people (twice) without writing anything of your own to make the post worthwhile.
  • Spikestuff can be abrasive at times, but I think his demeanor in this thread is quite reasonable. He's not threatening to ban you, he's just telling you what the next course of action will be if you continue to ignore site rules and the advice given to you.
  • We know that you don't know how this site works. That's okay. We'd like you to learn and there are plenty of people here who would be willing to teach you at least through the basics. All we ask is that you follow our advice and abide by the rules.
  • If Portuguese is your native language, reach out to other members from Brazil, who may be able to translate much of what we're saying into words you can more easily digest. Likewise, if anyone reading this knows Portuguese, please take a minute to reiterate some of these points to Kianotti15.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
The Riddler wrote:
A kite shape is inscribed in a circle, as shown below.2 What is the kite’s area?
Ooh! I know this one! You see, there's these things called cyclic quadrilaterals... As for the rectangle, I don't know if there's a shortcut, but a simple application of the Pythagorean theorem should give you both sides. The dwarf puzzle is (mostly) recycled from a similar puzzle with-- if I remember correctly-- 100 seats on an airplane. (I think there may have even been one other riddle of the same form.) The answer to the first question is directly from the previous riddle. The second question is a bit trickier, but shouldn't be too difficult overall. I'll get to work on it.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
nesrocks wrote:
When I saw the android TAS...
Huh, I didn't know we had an android TAS. It was published over seven years ago. Well that just makes my snarky comment at the top of this thread look extra douchy.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Android or GTFO.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
BrunoVisnadi wrote:
On a unrelated note, it would be nice like if some people were a bit more respectful towards Warp.
:( I'll own up to it. Sorry, Warp. I was a dick and you were right to call me out for it.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
A quick thanks to BrunoVisnadi for his post! That cleared up a lot.
FractalFusion wrote:
Bobo the King wrote:
I got stuck on question 26 (34:30). I was able to simplify it to the sum over n>1 of 1/(n*(n+3)), but that looks too much like the Basel problem to me. I have no idea how this slight modification turned pi^2/6 into 13/36. Can someone help me?
BrunoVisnadi already answered it. By the way, the Basel problem concerns the sum of reciprocals of squares, not the reciprocals of the numbers themselves which is the harmonic series.
Yeah, but 1/(n*(n+3)) = 1/(n^2 + 3n) resembles the Basel problem thanks to the squared term. Anyway, I'm facepalming hard at the fact that most of the terms cancel. I'm usually a bit better at catching telescoping sums.
FractalFusion wrote:
Bobo the King wrote:
Question 42 (46:30) stumped me. I wasn't able to come up with a simple expression for the area of a kite, probably because the kite is not uniquely defined by the length of its sides. Of course, the kite of maximal area is uniquely defined by the length of its sides. Could someone explain the quick-and-dirty approach that was likely used to solve the problem?
As well as what BrunoVisnadi said, it is also possible to get the answer as follows: A quadrilateral with given side lengths has its area maximized when it is cyclic. When maximizing area, the order of the side lengths is completely irrelevant and so we can rearrange the sides of the kite into a 6-by-10 rectangle. Rectangles also maximize the area (since they are cyclic), so the answer is 60.
Well it certainly doesn't help that I misheard the answer-- I thought they said "16". The best I could come up with was to conjecture that the maximal area is the square of the difference in lengths between the two sides (i.e., A = (10-6)^2). This, of course, makes no sense as a kite with four sides of length 10 would supposedly have maximal area of 0. Now this makes a lot more sense.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Alyosha wrote:
Interesting. I looked over things quickly, and I don't think there is much room for manipulation here. SGB deosn't change the relative time between CPU and timer, so I don't think that will help. As mentioned by Dwedit, double speed mode requires the game to turn it on. I looked at where this is happening. It takes exactly 2304 (256 * 9) cycles between the time FF04 is read between those two addresses, and interrupts are not enabled at that time. So there really doesn't seem to be anything that would allow difference to be something other then 9. Too bad, that would have been cool.
Yeah, this makes me wonder exactly how consistent the timing of these chips is. Is FF04 on a separate clock entirely? If there is some clock drift, there will be a small probability of deviating from the 256*9 cycles. In any case, I figure that with the millions of copies of this game and the number of times it's been booted up or reset, it's almost assured that some kid somewhere managed to learn GAZE through either the above-mentioned clock drift or some other hardware error. It's funny for me to think about how lucky they must have been without even realizing it. After all, Mutants are a pretty bad choice of character in unassisted runs of the game. Heh, they may have even learned GAZE and then immediately lost it due to ability shuffling or overwriting that spell slot.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Warp wrote:
2017 Raytheon MATHCOUNTS National Competition It's actually fun to pause the video when the questions are shown, and solve them in your head.
These were a lot of fun! I got 42 out of 54 questions, averaging what I believe was about a minute per question. I feel okay about my performance as I'm a little out of practice and these were tough questions answered by some of the sharpest students in the country. Some notes (approximate timestamps in parentheses): I don't know if this was by design, but it seemed like when contestants buzzed in almost instantly with the correct answer, the answer was often 4. Examples included questions 20 (26:40), 25 (31:30), 32 (40:00), and 45 (48:30). I don't think I fully understand question 10 (15:00). Had they intended to write that K is an integer? I see that the solution is K = 17^2, corresponding to y = 1000 (or y = 1017). But what's wrong with y = 1008 (or y = 1009), giving K = 1? What's really being asked here? Question 16 (22:00) annoyed me because the problem statement is ambiguous as to whether the empty set is included. I included it and obtained an answer of 50, instead of the "correct" answer of 49. Question 24 (30:30) confused me. I figured that two of the numbers being squared had to be zero and the third had to be one. There are five ways to make zero in each of those two squared numbers and three places to put them, totaling 75. I now see that there are eight ways to produce 1 in the remaining term, which is where I miscounted. I got stuck on question 26 (34:30). I was able to simplify it to the sum over n>1 of 1/(n*(n+3)), but that looks too much like the Basel problem to me. I have no idea how this slight modification turned pi^2/6 into 13/36. Can someone help me? The writers knew what they were doing with question 28 (35:30). I even caught that they were asking about formats, not license plates, but quickly thought, "Nah, they must mean plates." Question 41 (45:30) is just evil. As if the counting weren't tricky enough (I was off by 1), I forgot to multiply my answer by 4, the square of the length of one side. Question 42 (46:30) stumped me. I wasn't able to come up with a simple expression for the area of a kite, probably because the kite is not uniquely defined by the length of its sides. Of course, the kite of maximal area is uniquely defined by the length of its sides. Could someone explain the quick-and-dirty approach that was likely used to solve the problem? I'm baffled that someone was able to answer question 48 (51:30) so quickly and I can't even reproduce their result. just now reproduced the result, almost immediately after typing this! This process is identical to casting out nines. My mistake was somehow thinking that 3^2017 was not divisible by 9. For some reason, I thought it had to be raised to an even power for 9 to be a factor. Oops. Finally, Luke looked hilariously frazzled by the end of the competition. Good for him for eking out a victory, especially by what was probably a matter of seconds.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
To re-emphasize, like DrD2k9, I don't feel very strongly about this issue. This site will not live or die based on whether a Math Blaster TAS is accepted. Having said that...
Warp wrote:
Nach wrote:
You should pretty much almost always accept that the rules will not be changing.
This hasn't been so in the past, and I would hate it to become the norm. When that one mini-golf game (I think it was) was rejected because it was a "sports game", and Vault rules were against it, I contested that rule, it was discussed, and it was changed so that some sports games are now acceptable. I expressed back then how appreciative I am that here the people in charge listen to user feedback and make rules changes when it's reasonable, rather than obstinately consider them written-in-stone, absolute, and never-changing. If it's found out that some particular rule has a negative side-effect, which wasn't apparent when that rule was written, it's good to fix it. Rules can be flawed, and may need fine-tuning when problematic situations reveal these flaws. It makes no sense to strictly adhere to a rule like it were holy gospel that's perfect and unchangeable. Now, if there were good arguments why the rule is fine as it is, and/or why this game is not an example of why the rule requires fixing, then that would be fine. However, mostly the answers have been "this was rejected because the rules say it has to be rejected". The majority of the arguments have been about whether this is an "educational game" or not, not whether it's a good rule to have as it is now (and enforced so strictly). I'm not saying to remove the rule. I'm just suggesting to loosen it a bit, just like with the sports games rule.
I strongly agree with all of this. And, to be quite honest, I think it counts for a bit extra that it's Warp I find myself agreeing with. No offense intended, Warp.
goldenband wrote:
How much of this has to do with site branding, i.e. simply not wanting the site to be associated with games like Math Blaster? All this discussion seems absurdly legalistic if the real reason is "people like Carmen Sandiego, so it'll get views and clicks, but people view Math Blaster (and Sesame Street games, etc.) as a joke and we don't want to be associated with that, unless the run can find some way of making fun of the game".
I also think this is an excellent point. I honestly think less uproar would have been raised if Mothrayas had simply said, "Eh, I think this is a crappy game choice and I'm rejecting it because I don't think it will make the site better." Finally, I'd like to note that there is a strong undercurrent of condescension coming from our esteemed judges/admin throughout this thread. As a simple example, Mothrayas accused skeptics of twisting his words, and yet both he and Nach keep falling back on a straw man argument that people are calling for us to abandon rules entirely and accept or reject submissions arbitrarily. I've seen absolutely no one advocate for that and the latest exchange between Nach and Warp reflects this lack of understanding on the part of the staff.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
For the record.
Vault Rules wrote:
For the purposes of this tier, a game which is a board game, educational game or game show game is not defined as a serious game. Fighting games such as Street Fighter are however, eligible. Examples of unacceptable board games for this tier are Chess and Monopoly. Examples of unacceptable education games for this tier are Sesame Street: Elmo's 123s and ABCs. A serious game which happens to have some secondary educational elements scattered within it are eligible.
This is the full text of the rule being applied. There is one game cited as an example of an unacceptable educational title and it has little in common with this game. There are zero examples of acceptable educational titles, even though they are alluded to. That's the extent to which I wish to argue this. I'm sure that someone will come along shortly to take up my banner. I'm going to bed.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Mothrayas wrote:
Precedent is flawed in quite a few ways, because judges do make mistakes and have made mistakes in the past. If precedent overrode movie rules, single stage movies would be accepted, passwords to skip to the end of the game would be accepted, movies that do not clear the game would be accepted, and so on. There are many reasons why that would be a bad idea, and therefore adhering to written rules over blindly following precedent makes a lot more sense.
I agree that blindly following precedent would be a bad idea, but I think you may be missing the irony that you're "blindly" following a written rule that wasn't written all that carefully in the first place while the precedent is broad, not just applying to a single stage movie or a used password. While you and I agree that judges make mistakes, I think a strong argument could be made here that the mistake in the context of this run was in the written rule, not the precedent. I'm not saying rules should be ditched in favor of precedent, just that precedent is all too easily discarded in favor of a rule when it appears that a judge does not wish to thoroughly defend their decision. It's a matter of how you weight the two.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Can I ask a more fundamental question? Why are written rules treated more seriously than precedent? I understand that rules are (supposed to be) unambiguous while precedent is "squishy", but I think we have here a clear case where this trend is upset. As Nach puts it, the ban on educational games was written to exclude "Sesame Street games". This game is better than that level. (Incidentally, even in the Popeye game cited by Mothrayas, I see what looks like nontrivial luck manipulation.) As for precedent, we have plenty of examples of games that are technically not educational but are otherwise bereft of entertainment value, displaying less interesting gameplay than what we see here. The rule says you should reject, precedent says you should accept. I get that having written rules and adhering to them is vital to the success of a site like this, but we know that the admins are fallible and can write a well-intentioned rule that, by its letter, accomplishes the wrong thing.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
I don't really care about this issue all that much, but I find myself in agreement with many of the users here: the rules have been assigned and enforced arbitrarily and at least need clarification. Furthermore, I've just realized that my very own publication was accepted, despite being an educational title-- I'd say more of an educational title than this one. Edit: Derp. Radiant brought this up on the previous page. I'm catching up with the thread, but I don't mind repeating the point anyway.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Dwedit wrote:
Bobo the King wrote:
  • Now we need to know what FF04 is and why it increments. After reading a few articles online, I've learned that FF04 is the "divider register". It's basically a timer that runs independently of the rest of the game and increases at a fixed rate. Based on the short and consistent length of the loop that initializes the RNG pointers FF04 will always increment at such a rate that when C34B is initialized, FF04 will always be 9 greater than its value when it was used to initialize C30B.
  • BUT! The rate of this timer is dependent on the platform! Take a look at this page. With the SGB, the divider runs about 2.4 percent faster and it can even be run at double speed under the GBC. Dwedit, correct me if I'm wrong, but I believe this effectively acts as a "hardware RNG", although due to a tragic coincidence, it produces some not very random values when used to initialize the software RNG.
  • And to close out this post, I'll say that most of this is untested on my part. I know, I know, I should just sit down and force the SGB or GBC core, but I've done enough research for one night. Also, I just rebooted the game in the SGB core and I can't even find the damn RNG pointers in RAM watch. It's possible (or even likely) that although FF04 runs fast on the SGB, so too does the CPU by the exact same amount. Only differences in the relative clock speeds-- not absolute differences-- should free up the possibility to manipulate C30B and C34B independently of one another.
The divider only cares about clock cycles, and it's 256 clock cycles to change the value of the divider. The timing differences between SGB and GB won't change this, and it only runs faster in GBC mode if the game has intentionally turned on double speed mode. However, the SGB does have a different bootrom that takes far fewer frames to finish. There are 70224 clock cycles in a frame, which does not divide evenly by 256, and by taking fewer frames to finish, the divider will be in a different position. Does anyone know if the GBC's boot logo takes a different amount of time vs the GB's boot logo? That also throws off the divider.
If I understand your post, this would only change the initial state of the divider, not the fact that it increments every 256 CPU cycles. As a result, a different initial RNG would be available to us from a hard boot, but since luck manipulation is achieved through soft resets (which don't zero out FF04), we're stuck with the same problems we have with the regular Game Boy.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Mothrayas suggested that I post this here. Originally, it was posted to this thread. There's basically no new information, but it's a nice little summary of how the RNG works.
Dwedit wrote:
Game Boy doesn't have an RNG, everything is software, and it would be odd for something to only appear on SGB or GBC.
I'm looking through my old notes, taking screenshots, and trying to disentangle the results of some trace logs. It's all very time consuming and I'd like to put up a very thorough document, as per Alyosha's request, but I think it's most important that I write down a quick summary while I know I still have the attention I need to devote to this:
  • The spell in question in Final Fantasy Legend is a version of GAZE that carries the stone effect. This is extremely important because there are some enemies and bosses (SEI-RYU in particular) that are immune to instant-death but not immune to stone. Having the GAZE spell means we can insta-kill him and other enemies, saving a lot of time. The reason I'm mentioning all this is to emphasize that this is not some abstract hypothetical: I intend to show that using SGB or GBC could potentially allow us access to an important spell that would save a good number of seconds in the run.
  • The RNG table is universal and begins at address CB00 and ends at CBFF (256 values). These values are fixed. I had a trace log at some point that pinpointed exactly how it was written-- I probably should reproduce that investigation. For the sake of the rest of this post, I'll assume that there is absolutely nothing we can do to manipulate the values in the table (I'm fairly certain that's the case).
  • There is a list of RNG pointers beginning at address C300 and ending at C37F. These pointers reference indices in the RNG table, generating random numbers for various purposes in the game. There are (no more than) 128 randomized functions, including potion effectiveness, random encounters, NPC movement frequency, NPC movement direction, etc. Basically, everything that's randomized in the game corresponds to a pointer somewhere in the C300-C37F range. Whenever a random number is needed, the value at CBxx is looked up where xx is the value of the corresponding pointer, then the pointer is incremented, modulo 256. This means if I roll a random number 256 times, the values will begin to repeat.
  • These pointers are all initialized upon startup or soft reset. I'll get into the actual mechanics of that later, but for now, I'll point out that the pointers start off "close" to each other and "creep upwards". For example, C300 might have the value 2A and all pointers up to C306 might also be 2A. The value might then increase such that pointers C307 through C30C are 2B and C30D is 2C. This "creeping" is extremely consistent and we have a nice mathematical formula to describe it. Effectively, the only thing that varies upon a soft reset is the exact starting point. Later on, I'll explain how this creeping arises and how it's potentially affected by the GBC or SGB modes. Much of this write-up assumes we're working with the vanilla GB platform, which we did throughout most or all of our investigations of the game.
  • The pointer that decides what mutant bonus is obtained is at C30B and the pointer that decides what spell the mutant learns (among other things) is at C34B. Based on the formula I just mentioned and the fact that these pointers are exactly 64 spaces away in memory, we've shown that C30B and C34B are "locked" to one another such that C34B will always be nine greater than C30B. Back in the day, FatRatKnight confirmed this experimentally. Crucially, this means that we can't manipulate mutant bonus type and learned spell independent of one another and we are limited to 256 initial states.
  • None of these 256 initial states correspond to learning GAZE (stone) at any time. We can't learn it initially and when we learn other abilities, we get locked into other periodic RNG patterns that consistently miss the magic values we need to learn the GAZE spell. I believe FatRatKnight investigated this long ago, but I've tried to confirm it by simulating RNG pointer patterns in Excel. Unfortunately, I'm getting some results that are inconsistent with what I'm seeing in the game, so my spreadsheet needs some refinement. I'm writing this up now in case I lose motivation and am unable to properly simulate RNG rolls.
  • Now's where it gets interesting. We know that the values of the pointers "creep upwards", but I haven't yet said why they do. Perhaps they are set in such a way that we actually can manipulate them such that C30B and C34B are not locked at values 9 apart from one another, giving us another degree of freedom with which to manipulate luck. To investigate this, we need to run a trace and determine how the RNG pointers are initialized. As it turns out, the code is pretty dang simple: upon startup, the value of address FF04 is loaded into C300, and then a loop counter increments and loads FF04 into C301. This continues 80 times total until the RNG pointers up to C37F are all set.
  • Now we need to know what FF04 is and why it increments. After reading a few articles online, I've learned that FF04 is the "divider register". It's basically a timer that runs independently of the rest of the game and increases at a fixed rate. Based on the short and consistent length of the loop that initializes the RNG pointers FF04 will always increment at such a rate that when C34B is initialized, FF04 will always be 9 greater than its value when it was used to initialize C30B.
  • BUT! The rate of this timer is dependent on the platform! Take a look at this page. With the SGB, the divider runs about 2.4 percent faster and it can even be run at double speed under the GBC. Dwedit, correct me if I'm wrong, but I believe this effectively acts as a "hardware RNG", although due to a tragic coincidence, it produces some not very random values when used to initialize the software RNG.
  • And to close out this post, I'll say that most of this is untested on my part. I know, I know, I should just sit down and force the SGB or GBC core, but I've done enough research for one night. Also, I just rebooted the game in the SGB core and I can't even find the damn RNG pointers in RAM watch. It's possible (or even likely) that although FF04 runs fast on the SGB, so too does the CPU by the exact same amount. Only differences in the relative clock speeds-- not absolute differences-- should free up the possibility to manipulate C30B and C34B independently of one another.
Whew! Good night, everyone!
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Dwedit wrote:
Game Boy doesn't have an RNG, everything is software, and it would be odd for something to only appear on SGB or GBC.
I'm looking through my old notes, taking screenshots, and trying to disentangle the results of some trace logs. It's all very time consuming and I'd like to put up a very thorough document, as per Alyosha's request, but I think it's most important that I write down a quick summary while I know I still have the attention I need to devote to this:
  • The spell in question in Final Fantasy Legend is a version of GAZE that carries the stone effect. This is extremely important because there are some enemies and bosses (SEI-RYU in particular) that are immune to instant-death but not immune to stone. Having the GAZE spell means we can insta-kill him and other enemies, saving a lot of time. The reason I'm mentioning all this is to emphasize that this is not some abstract hypothetical: I intend to show that using SGB or GBC could potentially allow us access to an important spell that would save a good number of seconds in the run.
  • The RNG table is universal and begins at address CB00 and ends at CBFF (256 values). These values are fixed. I had a trace log at some point that pinpointed exactly how it was written-- I probably should reproduce that investigation. For the sake of the rest of this post, I'll assume that there is absolutely nothing we can do to manipulate the values in the table (I'm fairly certain that's the case).
  • There is a list of RNG pointers beginning at address C300 and ending at C37F. These pointers reference indices in the RNG table, generating random numbers for various purposes in the game. There are (no more than) 128 randomized functions, including potion effectiveness, random encounters, NPC movement frequency, NPC movement direction, etc. Basically, everything that's randomized in the game corresponds to a pointer somewhere in the C300-C37F range. Whenever a random number is needed, the value at CBxx is looked up where xx is the value of the corresponding pointer, then the pointer is incremented, modulo 256. This means if I roll a random number 256 times, the values will begin to repeat.
  • These pointers are all initialized upon startup or soft reset. I'll get into the actual mechanics of that later, but for now, I'll point out that the pointers start off "close" to each other and "creep upwards". For example, C300 might have the value 2A and all pointers up to C306 might also be 2A. The value might then increase such that pointers C307 through C30C are 2B and C30D is 2C. This "creeping" is extremely consistent and we have a nice mathematical formula to describe it. Effectively, the only thing that varies upon a soft reset is the exact starting point. Later on, I'll explain how this creeping arises and how it's potentially affected by the GBC or SGB modes. Much of this write-up assumes we're working with the vanilla GB platform, which we did throughout most or all of our investigations of the game.
  • The pointer that decides what mutant bonus is obtained is at C30B and the pointer that decides what spell the mutant learns (among other things) is at C34B. Based on the formula I just mentioned and the fact that these pointers are exactly 64 spaces away in memory, we've shown that C30B and C34B are "locked" to one another such that C34B will always be nine greater than C30B. Back in the day, FatRatKnight confirmed this experimentally. Crucially, this means that we can't manipulate mutant bonus type and learned spell independent of one another and we are limited to 256 initial states.
  • None of these 256 initial states correspond to learning GAZE (stone) at any time. We can't learn it initially and when we learn other abilities, we get locked into other periodic RNG patterns that consistently miss the magic values we need to learn the GAZE spell. I believe FatRatKnight investigated this long ago, but I've tried to confirm it by simulating RNG pointer patterns in Excel. Unfortunately, I'm getting some results that are inconsistent with what I'm seeing in the game, so my spreadsheet needs some refinement. I'm writing this up now in case I lose motivation and am unable to properly simulate RNG rolls.
  • Now's where it gets interesting. We know that the values of the pointers "creep upwards", but I haven't yet said why they do. Perhaps they are set in such a way that we actually can manipulate them such that C30B and C34B are not locked at values 9 apart from one another, giving us another degree of freedom with which to manipulate luck. To investigate this, we need to run a trace and determine how the RNG pointers are initialized. As it turns out, the code is pretty dang simple: upon startup, the value of address FF04 is loaded into C300, and then a loop counter increments and loads FF04 into C301. This continues 80 times total until the RNG pointers up to C37F are all set.
  • Now we need to know what FF04 is and why it increments. After reading a few articles online, I've learned that FF04 is the "divider register". It's basically a timer that runs independently of the rest of the game and increases at a fixed rate. Based on the short and consistent length of the loop that initializes the RNG pointers FF04 will always increment at such a rate that when C34B is initialized, FF04 will always be 9 greater than its value when it was used to initialize C30B.
  • BUT! The rate of this timer is dependent on the platform! Take a look at this page. With the SGB, the divider runs about 2.4 percent faster and it can even be run at double speed under the GBC. Dwedit, correct me if I'm wrong, but I believe this effectively acts as a "hardware RNG", although due to a tragic coincidence, it produces some not very random values when used to initialize the software RNG.
  • And to close out this post, I'll say that most of this is untested on my part. I know, I know, I should just sit down and force the SGB or GBC core, but I've done enough research for one night. Also, I just rebooted the game in the SGB core and I can't even find the damn RNG pointers in RAM watch. It's possible (or even likely) that although FF04 runs fast on the SGB, so too does the CPU by the exact same amount. Only differences in the relative clock speeds-- not absolute differences-- should free up the possibility to manipulate C30B and C34B independently of one another.
Whew! Good night, everyone! Edit: TL;DR: Using SGB or GBC cores affects the clock rate of the divider (byte FF04), which is used to set the RNG in Final Fantasy Legend. This potentially opens up states that are inaccessible under the regular Game Boy.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Alyosha wrote:
Bobo the King wrote:
I bring it up because Final Fantasy Legend has a spell (I think it's FLARE or P-BLAST?) that is utterly impossible to obtain using the Game Boy's RNG. I've never tried getting it using GBC or SGB, but it is, technically, an element of the game that is locked out by the RNG. If anyone would like, I can run a few traces and show how the RNG table is compiled and compare them across the three platforms.
Please do! I would find this fascinating.
Damn it! I was just losing interest, too! All right, I'll begin running some traces and writing stuff up...
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Nach wrote:
Mothrayas wrote:
Bobo the King wrote:
I anticipate what the answer will be, but what about RNG differences? Timer-based RNGs can and will be different across the three (or four?) platforms and there may be states that are only accessible on certain platforms.
I see no sufficient reason to deviate from the rules I outlined in this case.
I concur. Unless one of those states happens to be access to a whole game area not otherwise accessible.
I bring it up because Final Fantasy Legend has a spell (I think it's FLARE or P-BLAST?) that is utterly impossible to obtain using the Game Boy's RNG. I've never tried getting it using GBC or SGB, but it is, technically, an element of the game that is locked out by the RNG. If anyone would like, I can run a few traces and show how the RNG table is compiled and compare them across the three platforms.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
I anticipate what the answer will be, but what about RNG differences? Timer-based RNGs can and will be different across the three (or four?) platforms and there may be states that are only accessible on certain platforms.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Adding on to OmnipotentEntity's comment, we can also look at the stability of these two fixed points. Begin by writing the expression as an iterated sequence: x_(n+1) = 2/(3-x_n) Now choose some value close to 1 or 2. I'll start with 1: x_n = 1 + δ This gives us x_(n+1) = 2/(2-δ) Performing a Taylor expansion or other approximation will quickly yield x_(n+1) ≈ 1 + δ/2 which proves that if we start with a number close to x=1, the series will converge to x=1. Now play the same game with numbers near x=2: x_n = 2 + δ Now we get x_(n+1) = 2/(1-δ) And the Taylor expansion for this will give us x_(n+1) ≈ 2 + 2δ which is farther from 2 than x_n, proving that x=2 is unstable. There is no reason you can't write either 1 = 2/(3-2/(3-... or 2 = 2/(3-2/(3-..., but in some sense, the "true" value is 1 because the slightest error will drive the sequence away from the value of 2.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
I believe this is the paper I had in mind. It's not quite what we're talking about here, but it shows how these interactions are nontrivial. I think there are others if you search for "electric force between two conductive spheres". I keep going back and forth in my mind as to whether the diamagnetism would make any difference. On the one hand, I'm pretty sure there's a theorem that states that charge won't redistribute when two neutral conductors are brought close to each other. On the other hand, magnets exist...
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
andypanther wrote:
I'd normally say "Go for the fastest version!", but with fangames, I prefer to see a TAS of the most complete release.
I agree. I was entertained by the run, but this would be much better as a 100% run of the latest version. That's two significant strikes against the run and I think it may not be worthy of publication. Baddap1, if you don't wish to redo the entire run, could you at least demonstrate what some of the TASing strategies look like in version 1.01? If the differences are minor, I'll withdraw that aspect of my critique, although I'd still prefer a 100% run.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
BrunoVisnadi wrote:
Bobo the King wrote:
Classic is a bit more difficult. I'm quite certain that the answer to the first question is five because six darts can be arranged in a regular hexagon, but since this will almost surely not happen, five is the effective answer. I'm going to be really pissed if the answer is six.
I didn't understand, why do you think the answer is 5 instead of 6?? The Riddler explicitly says that the darts can hit the very edge of the board.
Well shucks, why not 7 then? Both 6 and 7 effectively have probability zero of occurring because they demand that coordinates chosen from a continuous distribution land on specific points. But point taken-- since the Riddler is going out of his way to point that out that darts can land on the edge, you're very likely correct. I nevertheless get annoyed when people try to make a distinction between "less than" and "less than or equal to" under a continuous probability distribution. If the official answer posted Friday is indeed five, I'll add it to to my list of grievances against how the Riddler presents these puzzles.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
FractalFusion wrote:
I get your point but I'm pretty sure the Riddler intended for all locks to start locked, as common sense would dictate. (It would also have a neat solution, the one you posted, and it would be just as easy to lock all three afterward.) If the starting state of the locks is unknown other than the fact that the safe cannot open (at least one is locked), then it is more complicated. I have one that works in 13 tries (ABC, BCA, CAB, ABC, BCA, ABC, CBA, BAC, CBA, ACB, BAC, CBA, ACB), but I'm not going to spend more thought on this since I think the Riddler won't even address this.
In a cruel twist of fate, nope, the initial state of the locks is unknown according to the Riddler's official solution. The Riddler's statement was ambiguous yet again, but we can take some minor comfort in the fact that your post is hilarious in hindsight. And kudos to you for achieving the optimal solution with what sounds like a minimal effort. As for the new riddles, Express is nearly trivial, although I haven't yet looked into how many different ways the player can win in the minimal number of throws. Classic is a bit more difficult. I'm quite certain that the answer to the first question is five because six darts can be arranged in a regular hexagon, but since this will almost surely not happen, five is the effective answer. I'm going to be really pissed if the answer is six. I haven't investigated the second and third questions because I'm busy grading papers, but I'm guessing the solutions will somehow involve pi. I'm actually most curious what the probability is of obtaining the maximum score. I wonder if I'll need to calculate it to answer the third question. Perhaps instead it needs to be investigated with Monte Carlo methods.