Posts for adelikat

adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
I don't get what you are implying though. Even with semi-random behavior, you can't get 100% reliable sync...
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
creaothceann wrote:
adelikat wrote:
creaothceann wrote:
  • It makes the TAS itself look weaker: it can only complete one specific version of the game, not all of them.
A great many of our current TASes fail this criteria.
Then they should be easily replaceable when more accurate emulation is available.
In the case of Friday the 13th that IS accurate emulation! The reason I picked it was because NESbots have the same behavior of randomly syncing and randomly not, because NES RAM is random. What should we replace the published TAS with, in this case?
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
creaothceann wrote:
[*]It makes the TAS itself look weaker: it can only complete one specific version of the game, not all of them.
A great many of our current TASes fail this criteria. One I can confirm is NES Friday the 13th (because I'm currently experimenting with it with the idea of exploiting unitialized ram). If you set the initial WRAM state in the emulator with random values, the currently published TAS usually desyncs (suggesting it is assuming a particular value from an unitialized address). And as for this:
creaothceann wrote:
  • An emulator should always emulate as accurately as possible. That means observing and emulating real-life RAM cell values.
Faithfully emulating real hardware would involve some form of random initialization which would make these TASes impossible to TAS! In this case either the TAS "gets a say", or we don't get the luxury of making the TAS in the first place
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
<ais523> anyway, I think we should get a flashcart and program it to dump the initial memory of the NES to screen <ais523> to see what the initial NES memory actually looks like <ais523> the mappers make it more complex How about we do something like this, and do it many times and create a heat map? we could take a hex grid of data and represent it by a pixel per value and create an image. The color of that pixel will be hotter based on the number of times it was "on" If the heat map was essentially evenly colored, we could conclude that essentially any ram combination is theoretically possible. However if the image was "clumpy" then we know we need to be more skeptical of what's possible.
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
Derakon wrote:
It sounds to me like what is being proposed here is generating many different "universes" -- potentially googols or more of them depending on how picky you are -- until you get the one with the desired perfect initial conditions, and only then will you deign to enter the universe and start controlling things "normally".
I like your multiverse analogy. And to extend of that, I propose that the problem we have is that we do have to PICK a universe. Up to now, we've been living in a universe outside of our control. And the universe conditions have been decided by emulator coders making semi-arbituary decisions, certainly without thought as to what the ideal scenario is for TASing. We have the power to pick a universe and as such we are in fact picking a univserse. If we decide to stay in the comfortable universe that was given to us, we are still deciding that one over another. So why are we picking on vs another? And what criteria do we pick one? And by what criteria to we deem on to be cheating and not another?
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
feos wrote:
That's where you will need test ROMs and quite some stats.
Well, that essentially achieves the same results as Derakon is suggesting. Because it has to be likely enough that a human could verify it to be possible or else we will never be able to verify it being possible.
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
Derakon wrote:
My general attitude towards this kind of thing is that if your approach could realistically be replicated on the console, then it's legit.
This is a reasonable suggestion except for that fact that we generally deal in absolutes. When has "how possible" ever been a factor with TAS techniques? We have RNG abuse to the point that the heat death of the universe will happen before a reasonable chance of reproducing the TAS. I am resistant to the idea (not sold against completely) of having to deal with how likely something is. In fact the more unlikely the more fascinating it is to me.
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
adelikat wrote:
My admin/judge ruling is that we should discuss and vote as a community as to whether unitialized ram/register exploitation should be allowed. This should probably be a separate thread and maybe a poll.
Here. Please vote and discuss!
It's hard to look this good. My TAS projects
Post subject: Site policy regarding Alternative RAM stats on Power-up
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
My motivation behind my Cheetahmen II submission was to show bring up this issue and show off the potential it has for TASing, and the potential ramifications it has on the site. For those unaware of the situation, hardware RAM is in an undetermined state on power-on (meaning it is unknown as to whether it is 0 or 1). Most any game is programmed to not assume, and set the desired value before using it. However, some games fail to do this due to bad programming or a small oversight in a particular situation. This causes indeterminacy, which is experienced by anyone trying to get a TAS to sync using a bot. Another example of this discussion is regarding Blades of Steel. The opening movie is different due to the fact that the rng is seeded by unitialized RAM. Up to now, we have just used the "default" state that an emulator chooses to intialize RAM. The emulators we rerecord on have a defined default state, however some emulators should use to use a random value when initializing to simulate the indetermancy of hardware. This is at odds with syncability so we prefer emulators not do this, and would mod them if necessary to avoid it. However, there isn't necessarily a logical default state. For instance, some games break if the nes is all 0's. As such the FCE emulator a LONG time ago used the pattern 0000FFFF00000FFFF because it gave good compatibility (popular games that requrie a non 0 pattern work, and only a handful of very obscure pirated games are known to fail from it). By convention FCEU, FCEU-rr, and FCEUX still use the core from this emulator to this day so we have had the convention of it being the basis for TASing. NESHawk also adopted this pattern because it was easy to choose that vs trying to do some other scheme. However, these decisions are based on emulation considerations not TASing. With my cheetahmen II submission I show another alternative. We can have our cake and eat it too. We can have determinism by an emulator having a default state. We can exploit randomndess by having a movie FEED a particular (valid) state into the core to use as its power-on state. This allows us to do things like get a more favorable RNG state. An example of this is potentially Friday the 13th for NES. I've did some experiments and it looks like the RNG is using unitialized RAM. It may be possible to get a RNG state that could improve the current TAS. In more complex scenarios we may be able to do amazing things to a SNES game. We could have an entire program sitting in unitialized memory, and through memory corruption techniques maybe we could get the game to start executing at this point and completely take over the game (hypothetical, and unlikely, but certainly interesting). However, this is a potentially controversial decision. While I favor the idea (and vote yes on this poll), I think we should decide, as a community, what to do in terms of site policy.
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
feos wrote:
But currently it is just not the case. So I'm speaking in consistency with the current categorization.
That's fine, except that you must understand that the vault wording isn't based on that. Whether that is an error is up for debate, but the meaning of "any%" means fastest completion time at all costs.
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
Categorization issues: 1) Feos, you seem flat out wrong about something, or I am misunderstanding your posts. Vault rules say the categories are any% and 100%. The definition of any% in this case is THE FASTEST POSSIBLE COMPLETION TIME. Unfortunately, I have allowed the site to blur that simple definition of any% by having a "glitched" category that is faster than a "any%" category in some cases. I completely disagree with this categorization though. any% should be the fastest movie, then we should have a better naming of movies that forgo major skips/glitches. The vault absolutely prefers the faster movie, not a (more ambiguous) movie that fails to do a time saving glitch. By that same regard 100% should be completely unabmiguous too. If the definition of 100% is disputed for a game, then we should prefer NOT to publish such a movie to the vault. The key is to make the vault as unambiguous as possible. The more subjective the situation is, the more we want it to be based on some level of entertainment value and feedback from the audience. 2) This movie is vault material, there's no way this or any movie of cheetahmen II is worthy of any tier requiring entertainment value (imo). I personally vote no for entertainment. 3) This and the currently published movie (that uses the fixed) version are vault compatible I think. This movie serves as the fastest possible completion (any%), while the other movie shows all levels (100%) 4) This movie doesn't "complete" the game, that's a fair point. However, the difference between this one and a movie that uses the fixed version to complete the game are actually extremely similar (visually and conceptually) a) The game has no ending, it was not programmed in the game. The fixed version simply transitions to a game over screen as if you died. I achieve that same "ending" by....dying. b) The game has a bug that makes it impossible for the last blow to the boss to kill him. You can get him down to 1 health (actually it is -126, weird game), and do a blow that has the "ouch" sound effect due to hitting him. However, due to programming bug, the health isn't reduced to 0 (-127). I perform this final blow though, it is only a glitch that prevents his death. c) Even if the bug in b) were fixed, the game still will fail to end the level due to yet another glitch. This one also affects level 4, and is why you can't do an all levels run of the game without a modified ROM. d) Based on these facts, I do complete the game as much as I possibly can. You see the final level, you see the final boss, and I damage him sufficiently to kill him (even though it doesn't). SO basically, I did as much as I could, and the difference is negligible. Also, I chose to die while performing the final blow, to achieve some kind of "ending". If anyone has other ideas or preferences to how I deal with the ending, I'm open to them. e) Nobody has asked this surprisingly, but this movie does NOT improve any of the levels as compared to the published movie. I did gain a frame in level 6 but some circumstances caused me to lose it. The currently published movie is tightly optimized :) 5) This movie should certainly get some kind of special tag or mention about the situation. I don't know what exactly (but I do know it should not be tagged as a savestate movie!) and I think some serious discussion and thought should be had as to how we handle these types of movies from a site perspective. I'm also open to the idea that we don't allow these kinds of movies as a site policy. However, I personally am in favor of it. In summary: I believe this movie finishes the game sufficiently, and serves as a fastest completion category, and therefore is publishable under vault rules. These are my opinions as a viewer, not an admin/judge ruling. My admin/judge ruling is that we should discuss and vote as a community as to whether unitialized ram/register exploitation should be allowed. This should probably be a separate thread and maybe a poll.
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
Wow, so many things to have to respond to! I'll try to get them all in one post: 1)
BadPotato wrote:
that we aren't talking about the fact the the game use a patch(why this isn't in the description???) to bypass the game over screen since the submited movie doesn't "complete" the game without it.
You are mistaken. This submission uses the ORIGINAL cart. All previous submissions use a fixed version that has said patch. As such this version does not "complete" the game in the way that the patched one does. It delivers the final blow to the boss (which should send him to 0 health but a glitch prevents it) then promptly dies. 2) Some people have already basically made this point but here's my take on the difference between a savestate and the conditions of hardware on power-on: If you think about it in terms of a timeline. Power-on is point 0 of the timeline. A savestate is some point after 0. A savestate could theoretically be a state identical to a valid point 0. But power-on MUST be a state valid for point 0. The savestate tag should be used when the movie starts from a point that is not not possible to be a valid point 0. And we have some precedence for this. DS movies specify RTC. In real world terms, that means that a DS must be powered up at EXACT a particular point in time for the TAS to sync. To DSbot my NSMB tas for example, you would also need a time machine (or set your internal clock to the correct time, but that's a less fun example). These TASes are considered valid, because this is a valid state for a DS to be in on power-on. Yet, this is information that could also be attained at a point in the timeline beyond 0, therefore a movie could start from a savestate and achieve the same results. 3) cart register states are indeed part of savestates. Both the console hardware state AND cart hardware states must be saved into savestates to have determinism. 4) Questions about mapper 228 accuracy and starting from level 6. Starting from level 6 isn't possible from power-on, there is no register state that can cause this. It is also inconsistent with all the evidence I've seen regarding UNMODIFIED carts. The guy who made the proof video for us has never seen that happen either (while reproducing level 5 is very easy). I could see maybe it happening from resets, but I don't suspect it happening from an IMMEDIATE reset after a power-on. it is possible that upon reset the game doesn't clear out all of the ram space, and that some of these values in combination with an assumed register state could cause this? I'm not sure, nor have I seen good evidence from an unmodified cart. And as for 228 accuracy, I'm skeptical that there is something missing here. It is a pretty straightforward board, and nothing fancy happens upon a reset signal compared to any other board. I don't think that is a sufficient answer as to why doing this via reset is impossible. I think more probably that there is 1) more going on that we realize with reset based glitching 2) It doesn't happen from reset, and that videos that suggest it are just being imprecise as to which button they are pressing (people are lazy about the distinction between soft and hard resetting). I'll post again regarding my thoughts on categorization of this movie (and other movies).
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
AngerFist wrote:
start fceux.exe -readonly 1 -pause 1 -playmovie "Movies/Mega Man (U)-0.fm2" "Rom/Mega Man (U).nes".
It should be ./Movies the . denotes "relative to the exe directory, without it it looks at your text as a full path
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
Radiant wrote:
This run uses a permutation of six bytes
Actually it is 6 bits ^_^
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
AnS wrote:
That's the point I was trying to convey since the first page of the topic: let's realize that this movie essentially starts from a savestate
And now we are on page 6 and I'm no closer to agreeing with this.
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
feos wrote:
I mean it starts from what values are on pure power on.
I think there is a misconception here. A pattern of WRAM that consists of 0000FFFF is not what values are on in a pure power-on. In fact, this is probably an extraordinarily unlikely event, and technically hasn't been proven to be possible. There is no pure power-on, and no consistency to which RAM starts. This isn't a new insight either. Most games are unaffected by this randomness because the programmers make sure to clear them. Using unitialized RAM in assembly is a big no no.
Blank as in not touched.
In that case, it is blank, because it wasn't touched, it was simply one of the many possible states the cart could be in, on power-on.
You just can NOT start it from the state similar to other movies :) Because it screws up the values by itself.
(I am interpreting "all movies" as other NES TASes, but you might mean other Cheetahmen II TASes) Registers are on the cart itself, so no you can't start other movies this way since those carts do not have them. However, the NES WRAM space is something they all share. A vast majority of games would be unaffected by starting in various RAM states since most carts work with any configuration, and most games initialize addresses before using them.
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
feos wrote:
is to figure out how exactly power on affects the needed register state, and when it affects it.
This IS known. Power doesn't "affect" it. On power-on the state of registers is unknown, therefore it could be anything.
Like, does it depend on the stage you switch the power at? How much time in is needed? How many times one needs to do it to get the needed state the soonest?
No to all of these. It is due to the fact that the register states are truly random. These things may seem to affect it, or maybe they do help lean it one way or the other, but the point is, it is random, so in theory it could start in this state on a cold power-on, on the first try, instantly. Did I mention random?
But it can not be treated as movies starting from "blank" state
There is a bit of a misconception here. What is a blank state? I guess you mean where all relevant registers are 0, which is actually an unlikely event. Also, no NES TAS starts from a "blank" state. It starts with WRAM set at 0000FFFF. Why is this "blank"?
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
In this specific case, this run uses a rather likely event. One likely enough that should someone RT speedrun this (oh god why), they could easily incorporate this glitch and start from level 5. The video I linked shows it happening less than a minute of trying. And that was his second attempt because he forgot to put the power button in the video the first time. The first time it happened in only 4 tries. Starting at level 1 I suspect is only more likely because there are more register states that lead to level 1, whereas level 5 happens to only have 1 combination. However, I don't support the notion of "equally likely" as something to base site rules upon.
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
We make no effort for any given trunk revision to be stable. If you want the latest svn and want it to be stable, use the 1.5x branch instead of trunk.
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
try putting the dll's in /dll into the root folder, let me know if that helps or not.
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
Yes.
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
Nach wrote:
Your evidence is good. Only question left is the state, you keep talking about the state of the PRG register. Are there other registers? If you're using a state, the combined state of all registers needs to be valid. If you tell me there are no other registers, or the game initializes them fine.
I've linked this too may times, your question clearly shows you haven't even bothered to click it but I will appease you and put it directly in this post! To save you 1 click: 1 bit prg mode(needs to be 1 in this movie) 5 bit prg bank (needs to be 11 in this movie) 5 bit chr bank (can be anything and achieve these results, irrelevant, as char usually is, worst case you get a garbled but playable game 1 bit mirror register (irrelevant here, either value has no effect on start up behavior) 1 bit bank size - only action 52 uses this 2 high prg bits - only action 52 uses these
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
An owner of the game was kind enough to make a more thorough video demonstrating this glitch, here is video proof. This video shows it can (easily) be recreated by ONLY pushing the power button. Here's a brief summary of the proof I'm offering: 1) As shown, this glitch can occur from simply powering-on the game. The only possible explanation of that behavior is some sort of variable being in an unknown state and used 1) messing with the initial RAM pattern (0000FFFF) has NO effect on this game. I tried, via scripting enough random combinations using this technique (all 0's, all 1's etc, then pure random patterns). I left a script running for some days and never once did the game do anything but start normally. This eliminates the NES's ram as the culplrit. 2) Debugging shows that the game runs a for loop to clear out the NES WRAM space, so it is expected that random ram initializations would not affect the game 3) The only other variables in play would be on the cart itself (these are mapper registers). This game have prg registers to control which part of the program to execute from. Messing with these values give you consistent results with the videos showing this glitch, including starting from level 5 4) There are 32 possible PRG register combinations, only one of which starts you at level 5 and in a playable state. 5) This movie uses that one combination and produces results IDENTICAL to video evidence 6) Videos evidence shows that this can be done from reset OR power, and that this is consistent with the theory that it is a random register issue 7) "How do we know this EXACT register state is possible?" It is KNOWN among EE people that registers can be in a random state. In this case is 6 bits, nobody has said anything other than it is likely and reasonable to assume all are possible states. Furthermore, the results produced are identical to video evidence, AND there is only 1 combination that yields this evidence. And if there wasn't more than one, who cares? If I put in 13 instead of 11 and they both produce this, the end video is identical. I personally think that I've given more than enough evidence to suggest that this is the explanation of how this glitch is occurring and that the emulator is faithfully emulating this behavior. Can we move on from me defending the TAS itself? The implications of accepting this movie's premise (exploiting the initial hardware state) is a good debate and worth having, and I hope we will focus on that now, going forward. (Note: this post intentionally avoids this subject, but I do have a lot to say on the matter)
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
Upon further debugging, the latest BizHawk does not have a bug, if "PAL 1" is added to the movie, it reports 5:50 as it should. I recorded a fresh new movie with the E version and "PAL 1" was added to the my movie. This movie does not have this line, and was created with 1.4.1 which is out of date. I think this bug probably existed back then but was fixed since this release.
It's hard to look this good. My TAS projects
adelikat
He/Him
Emulator Coder, Published Author, Site Developer, Site Owner, Expert player (3636)
Joined: 11/3/2004
Posts: 4758
Location: Tennessee
CoolKirby wrote:
Shouldn't the time listed on the site (for this and other NES runs) be recalculated based on the correct frame rate of ~60.1 FPS?
-_- Both Bizhawk and the site do this. I was trying to be simplistic when I said 60!
It's hard to look this good. My TAS projects