Posts for FatRatKnight

Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Just to clarify, I'm looking for, generally, a "score first, time second" mentality. If just one more scoring action is found to be possible, I don't care if it adds minutes just to get that one action in. That is where my opinion rests. Though, if the rest of the movie slows down for no apparent reason in seemingly unrelated parts nowhere near the added scoring action, it better have an explanation for that. In a purely hypothetical thought, if a 100% run were found to actually be incomplete, and there are parts that should have been included, then we would absolutely accept a much, much slower 100% run that better fits the definition the prior run failed to meet. With the stipulation that if the rest of the movie slows down for no apparent reason... yeah just like the statement above. That is, however, my impression of TASVideos. Judges and admins are free to refute this point and I would have no defense. We obviously don't allow infinite% runs. So endless scoring environments should be discouraged. A finite stage count in an otherwise endless game is already done for time-based goals, maybe we can look for ways to max out score in those stages as a 100%-like goal? Extending the same stage to extend scoring resources indefinitely breaks this, so naturally, glitches, tricks, or just plain normal game mechanics should be restricted as is sensible to prevent it. It can also be decided the game isn't appropriate for high score, how many Super Mario World runs are done for high score? Should endless scoring stop at the game's programmed score cap? I call that "targeted scoring," and I would advise using caution when designing rules around it. Should we publish a 99 score Desert Bus run? That's its score cap. And we all know it takes a long time to accomplish. It can probably be refused based on triviality, but then we have a Punch-Out!! run I like to keep pointing out which isn't as trivial to max out its score through the clock stop. And it would also take a rather long time to hit that cap. At least River Raid has the advantage of having an ending for hitting the score cap, such as it is for one of those old Atari games. In that case, the usual Vault rules can apply, and is currently doing so last I checked. Anyway, I'm happy to see more activity here. I would like to see the results, whatever they are.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
I... hate arguing for denying expansion of Vault, but keep in mind the following points: Vault, from prior talks, is purely a time metric. If a game has a clear and obvious maximum, apart from an imposed no-ending score limit when further scoring actions are possible, a 100% definition can say to hit that maximum then clear the game as quickly as possible. We can preserve the time metric as the maximum is known, and further improvements are still based only on time. I won't mind breaking this barrier and also include a score metric, but it is my impression that Vault is built heavily on time metrics. I'll be happy for allowing "score first, time second" ruling anytime. Vault keeps only a bare minimum of glitches banned. If the run merely corrupts the 100% completion tracker of the game, no one wants that published as a 100% completion run, even as Vault. Probably why Vault doesn't allow any and all glitches, but it is otherwise very loose. For now, this game is in a finite scoring environment. But what if we discover a way to continue surviving past our current barrier? What if that was the one barrier left in our way to flip this into an endless scoring environment? We didn't corrupt the score directly, so we shouldn't restrict the hypothetical trick as per Vault rules, but now we have an infinite score to contend with as our secondary score resource is now endless. In essence, we can't obsolete a published run with a better score, as we could always just use whatever trick allows for endless score to go higher. And any stopping point (aside from a convenient stage boundary) is probably going to be considered arbitrary, I mean, why stop there when there's more score to get? And since it is endless, it doesn't matter when you stop, you could have gotten more. Therefore, it is impossible to obsolete a prior published run should such a trick be discovered later. This is the demon I couldn't fight in the other topic. If you guys can "rule" that away, I am all for any changes. My best thought against this is to ask the community if the restrictions chosen or stopping point is a valid one for the run. If there's a big argument, deny the run, it's obviously not clear. As much as I want score to rule the 100%-like definition in various games, particularly those games that I would call having a "soft maximum," I also want to make sure everything going forward is as clear as possible. I want the lowest chance of problems happening, and we have a Punch-Out!! run to test against any hypothetical rules. And yes, that one has a glitch that allows endless scoring that the TAS avoids. Don't forget my topic. Probably ideal to continue score related discussions. I have parts of a framework in there ready, so build on it!
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
I have written a topic about scoring, and determined Vault absolutely blocks indeterminate high score limit as a valid goal. It's a sizeable read. I had most of the theoretical rules written down in an effort to make precise, exacting definitions we all like. I dropped off. Sorry. I want to see this movie published, considering I am very much for high score TASes.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
An existing thread. An existing published movie. In case anyone feels like we've been here before. Feel free to discuss improvements. Or alternative categories. Or whatever.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Ah, so you submit this cup. It's going to be a while before you get the others done. If it matters, the game appears very sync stable and the tracks can basically be worked on in any order, so if later a run that does all cups happen, it's generally not all that much harder to sync in improvements than a single cup run. In case anyone is curious for a description of my script without actually following links, it's basically a short distance radar with position recording. It displays future and past trails of both yourself and rivals, to better assist in figuring out where everything is going. It gives a top-down perspective of where nearby things are, as opposed to the forward view the game saddles you with. It doesn't show terrain, however. I have been following this as progress was posted, and it is an enjoyable watch. I anticipate more goodness when it comes. EDIT: Took Memory's offer to put in my own comments in the submission text. It's on the bottom, if you want to look.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
I'm posting to provide encouragement. Alright! Good to see there's some more effort being put into this! Here's hoping the script is easy enough to read after all this time. I will enjoy watching any progress, and it's fine to take breaks when things are getting difficult. Encouragement sent.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Warp wrote:
Of course the question being presented here is slightly different: What is better, the lowest possible time at the cost of the score, or the lowest possible score, at the cost of time?
In one case (Mario Golf: Advance Tour comes to mind), a perfect run of hole-in-ones is only possible after a rather lengthy level-up session and probably +40% Drive clubs in hand. Then you can hole-in-one every Par 5 in the game. Might be worth exploring with a save-anchored movie, but it's doubtful the verification process would be all that interesting, and a best score run just doesn't get the best possible score from level 1 stats, which stops being level 1 after one round anyway. For games where no such progression exists, the question is more interesting. I'm heavily for any sort of completionist goals, and getting worse scores for the sake of time just doesn't feel very complete. To some extreme, if it were possible to Give Up holes like in Mario Golf, it would be faster to just putt off the Tee, Give Up immediately, then finish the round with the worst possible score. Hey, it's faster! Anyway, I would almost always prefer a better scoring run in any golf runs, with an exception where a stats progression exists.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Soft reset should be fixed already. It was a problem a year ago, and plenty of emulator development took place in that time. Latest BizHawk should work fine here. Some rudimentary script I had. Hopefully it makes it easier to figure out where you went wrong in that last shot. Probably needs to be prettier, but it was designed for myself to read. I remember being very close, but failing to get many of the later holes in fewer shots with Ella. Maybe Neil can get them with the better Drive. But this site is generally about speed records, and Neil's Height will probably slow us down. And if pure speed is the target, it actually makes some choices tricky. Sure, we can Give Up a few holes in early tourneys, but then we're a lower level. Which means less Drive and worse Height, and slows down later shots. It's not hard to figure out holes to Give Up in (ones that take longer), but whether to do so is trickier. Mushroom Tourney is the last one, so there's no question to Give Up for speed purposes. More routing decisions. POW is probably worth it. Super POW is probably not worth it. The test run has both clubs taken. There's also left-hand vs. right-hand, in case that is important. In any case, that soft reset bug is fixed, so nothing to worry about there, and we're good to run anytime.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
I believe Ella is superior due to Height. I do not know for certain if this is the case, but I've found low shots to be fast, and several years ago, I advised a speedrunner to use Ella with fairly major effect. Neil gets better Drive, but Height increases pretty badly after a few levels, and then that ball stays in the air too long. In any case, my Ella test run should give a pretty good idea what to expect. You can see I routinely try to keep my shots real low. As for how I do things... Getting the ball toward the hole was mostly me just trying some shots and hoping it got in. I will say that I had a script tell me the distance between ball and pin (I did not include height in the distance calculation, for reasons I hope don't need to be said). Finding out how close I was in the trajectory is really helpful in understanding how I should aim, and pretty vital for flag shots. I was never able to directly land the ball into the hole, only roll it in or flag shot it in. In fact, I have seen some pretty compelling evidence that it can't land directly in the hole, including the fact I've seen the ball bounce a few times on the top of the hole before being allowed to sink in. Affecting the +/- power randomness, or RNG manipulation, is done in a few ways: * Waiting a few more frames on the title screen * Watching confetti fall for another few frames after getting an Eagle or better * Waiting for birds to chirp in sunny conditions in some tourneys * Waiting a few frames in rainy conditions * Switch between viewing the Green and the rest of the course And it does affect the +/- power adjustment. It'll also affect the weather, calling in or banishing rain, as well as affect winds. The +1% power doesn't actually do anything, but -1% power can. When you get a maximum hit off the Tee, that's 100 power. +1% can't move that to 101, you just stay at 100. -1% would drop that to 99, though. With less than 100 power, the 1% rounds down to 0, and it basically doesn't matter. Higher percentages in rougher terrain definitely has an impact. These are things I can remember right away. I can collect my notes and try to get more information from my old attempts.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
The rule is good to know, but an example might help, too. [2322] GBA Alien Hominid by FatRatKnight in 15:12.85 The relevant submission text, the second paragraph with the note to encoders. I've submitted what's being asked here, if I know what it is being asked. Complete with the main movie used as the fastest clear to deal with the ending, and an extra movie that plays around in the high score screen. I only know my own history of these examples, though. Any others?
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
For particularly large loops (including drawing every tile on screen, which admittedly is a few thousand iterations at most, and probably more like several hundred; it does go up some more if you want to extend the viewing area), using techniques to reduce some overhead per loop would still help performance a bit. Although, feel free to let me know how expensive a drawing function is compared to a pair of hash calls. I have a habit of using an alias for relatively common functions, such as... local R1u = memory.readbyte or local R1u = memory.read_u8 Porting a script across different emulators usually just means changing the top alias lines in this case. It's good to know it has another advantage of using a local reference directly instead of having to hash things out. In this case, at least, I'm not looking for _G["memory"]["read_u8"] now. For some reason, I only rarely rename drawing functions. I'll be sure to give an alias to them more often. Except the colors... and fonts... and order of parameters... and, eh...
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
I haven't felt any desire to really finish Donald Land, tying together all known improvements. The easy thing would simply be to graft Team 7's castle onto Team 4's run, and call it mostly optimal. I do strongly believe that the movement patterns we (Team 4) took on flat ground and over the abyss is the fastest strategy to take. Start-ups, "rough terrain", and meshing together other things seems to be stuff Team 7 had some respectable knowledge in. The 2.75 apple tosses are attractive for having an extra 0.25 over the 2.5 apple drops. I've been finding that the delays where we're at zero boost to be much worse with the 2.75 tosses in general, as the apple doesn't actually move right away when thrown rather than dropped. They're totally apples, not bombs. How can such a lovable character like Ronald be throwing dangerous explosives everywhere? I'm sure with the natural sugar in them, apples can explode, right? ... Right? Besides, who hasn't dreamed of flying through the sky with nothing but a sack of apples and a strong throwing arm? I'll be around in case there's some random bits Team 4 did that needs explaining, or possibly prettify some scripts. I just don't want to do the TASing.
Post subject: Oh, forgot the order of acceleration/deceleration.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Horizontal speed works in two facets: * Base speed * Boost from objects you stand on Base speed is based on holding left or right, in general. Usually, you need to hold Right or Left alone, not even Up or Down, or else you get zero acceleration. The game will also apply a deceleration factor every frame, even if it looks like you're accelerating just fine. The net effect of walking on the ground without B held will look like +32/256, but this is after the +64 from holding Right and -32 from the friction. The distinction is important if you need to stop, as then the numbers add if your speed is headed toward zero. Of note, acceleration takes place first, then deceleration acts on the resulting change. As a result, it's usually easy to hit exactly zero speed when crossing over that point. Usual worlds 1+128/256 Maximum speed 2+0/256 Maximum speed, B held -32/256 Deceleration on ground +64/256 On the ground +96/256 On the ground, holding B Also applies to standing on objects. -0/256 Deceleration in the air -1/256 Deceleration in the air if Left/Right state is not empty and different from last frame +32/256 In air, A never released since jump +64/256 In air, jump not made or A was released at some point +24/256 In air, Left/Right direction changed at least once If you need to avoid air acceleration, but store the +64 for later, keep Down or Up held, while also keeping Left or Right held since the start of the jump, as that won't drop to the +24 acceleration. Sky World (stage 4) 0+160/256 Maximum speed 1+0/256 Maximum speed, A held -5/256 Deceleration +16/256 Acceleration Cave World (stage 6), in ice zone 1+0/256 Maximum speed 1+128/256 Maximum speed, holding B -3/256 Deceleration on the ground Numbers are otherwise identical to the usual stages. You actually accelerate faster on the ground here, although the limited max speed would discourage using it. The icy state is set if you stand on terrain, and cleared if you are falling in the air. The icy state is preserved on the upward portion of the jump, and while standing on objects. If the icy state is cleared, normal physics take place (max speed, deceleration) Ocean World (stage 9), not final segment 2+0/256 Maximum speed -16/256 Deceleration every frame +512/256 Press A I've noted standing on objects drop your base speed to zero. If, however, you aren't holding Left or Right, and hold Down, this deceleration to zero won't happen, and just the usual -16 takes place. The boosted portion of X speed is dependent on the object you're currently standing on. I've gone on about base speed already and want to stop. Just the X axis. Quite a bit to type out.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
For sync issues, here's what we've come up with that carries over between stages: * X subpixel * X object boost (like from the apples we keep stepping on) * Tile touched (0615 - Tile Storage, or "wrong warp" as it was called) * Global timer (007D, I think) * RNG (008B) Oh, and the apple power-up, lives, score... The RNG is just a matter of pressing Start and Select, and sometimes other buttons if they don't interfere with motion. It is a CPU cycle RNG. Enemies have their timing based on 007D (my notes are rather scattered, I think that's the address). Some of them change their motion every 8 frames. Most of our sync issues went away when we lined up the subpixels. There were still RNG and global timer to deal with.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
General script Terrain script Timing script Now that I'm awake and alert, here's some scripts that I probably should have handed over a little while ago.
Post subject: Donald Land
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Dream Team Contest #7 had chosen this title. Now that it is concluded, I figure now's a fine time to explain a few things. The winning movie. There's a lot of details I'm skipping over. I won't mind anyone asking, to try to drag out every bit of information out of my head as needed. I'm tired now, so this is just what you get for my initial post. Stage 1 - Home Town World This is the only time we're without the apple power-up, which allows us to have two apples out at once. This is rectified in our very first jump. Not a lot to say, really. Boss goes poof in one hit. Stage 2 - Lake Side World A lot of the stage has us over flat ground. There is a very useful apple dropping pattern where we're in almost constant boosted speed. The boss takes four hits to take down. We don't understand its ouch animation, but somehow found hits that don't trigger it. It's a lot faster than waiting out the animation. Stage 3 - Forest World We drop down toward the bottom of the screen and fly on apples down there. We stay in boosted speed for as long as we have the freedom to stay there. Toss two apples on occasion, three frames apart, so that we can follow them down instead of instantly jumping off of them (and continue to gain too much height). The "boss" would shoot giant instant-death fireballs, but it turns out a magic tile is always available to touch. Actually, it's lucky that mouth animation produces the magic tile for us, or we'd be stuck waiting for the stage to load it in. The magic tile isn't checked for earlier in the stage, so even if its ID existed in Stage 2, landing on it then wouldn't skip Stage 3 for us. Stage 4 - Sky World That balloon stage. Exonym did most of the trickery here. The zips at the end were my work, though. Basically, there are magic pixels the game looks for 12 pixels left and right of the player's feet. If we have any left or right speed, we can trigger a zip. But we need to manually move to the right for each tile zip to give some distance so we don't bump into the same tile as before. Also, I intentionally slow down the zips in order to stay away from the "latest pixel" and therefore delay the loader. This is to keep a magic tile we need for skipping Oasis World. Of note, I haven't spent the time to ensure I went from "slow tile zip" to "fast tile zip" as early as possible. I think we can get one more "fast tile zip" in there, as we have a little loading time to spare, considering how many loaded tiles are left before we overwrite the 0x79 one we need. The boss itself would have a weakpoint tile load in, so that we can damage it. Our zipping stopped that. So instead, we have to rely on the fact the game reads tiles "out of range" with apples in the status HUD above. The screen is aligned with the half where it uses garbage tiles, based on some tile loader the game does. The boss mouth animation occasionally has its weakpoint tile IDs show up there. Single frame windows to land the apple, but single frame windows are just another day in TASing, as we know. Stage 5 - Oasis World We need to touch the magic tile 0x79 in order to reach the boss. Thanks to the fact the game keeps the last tile we touched in memory and uses it before updating it on the first frame means this paragraph is longer than the whole stage. Standard boss kill. The apple boost at the end does speed up the cutscene slightly, while also lasting to the first frame of the next. Stage 6 - Cave World We're limited by the stage loader because of these magic tiles we need to touch. There isn't any way to touch one we need at the end of stage 5 like we did to skip that stage, and they will only load in at the end of each segment. Therefore, the best strategy is to trigger the loader ASAP, putz around waiting for the loader at an average speed of 16 pixels per 7 frames, touch the magic tile ASAP. We despawn enemies to guarantee low lag. Standard boss kill. Yep, that wraparound on the left? Definitely standard. The apple boost seems to keep working during the cutscene. Stage 7 - Pond World There's a 4-pixel gap every 128 pixels. If we're at a pixel just before this gap, and manage to get at a pixel on the other side of this gap with a speed somewhere above 4 pixels/frame, we skip spawning enemies. This is critical, as there are cutscene crocs which freeze us in place while the croc shows itself. But they depend on these spawning gaps like other enemies, for some reason, so we skip 'em. The boss extends depending on a global timer. Apparently, if it is killed during the extension, it warps off the top of the screen and disappears much sooner. We weren't successful for the run, though, thanks to the global timer being just a little too fast for us. Saving a few frames anywhere earlier would help. Stage 8 - Harbor World Exonym pointed out there was air tiles below the ground. The results are clear. Standard boss kill. Luckily, there's a magic tile the next stage is looking for wherever it is we stopped the loader. Stage 9 - Ocean World Swimming stage! First segment skipped thanks to that magic tile ID, which the game stores and uses before refreshing it on the first frame. We're able to move quickly while riding objects because holding Down (and specifically Down, no Left or Right) while on an object prevents an instantaneous 0 walk speed. It's also tricky to despawn enemies, but we also have a larger margin with a speed very close to 5 pixels/frame. Boss needs a magic tile to load for the boss weakpoint, so we're sluggish in the last segment waiting for it. No top of screen glitches today, the screen is stopped on the bad half. Stage 10 - Ghost Town World Much like with Stage 2, a lot of flat ground to traverse, so we can go quickly. The startup plan needs to get past a barrel before it loads in, and we have a fraction of a pixel to spare. The boss gives up before we do anything to it. No, seriously! The boss reappears a fixed distance above our heads, but at the position we stop at, that would wrap around to bottomless pit zone. As a result, their disappearing act is one-way, and we instantly win. Stage 11 - Dark Forest World We can beat this stage quickly, but for a skip to be possible, we need to slow down for the loader. The magic tile we need won't load otherwise. Boss ouch frames seem unskippable in this battle. But it's still down pretty quickly. Stage 12 - Castle World Multiple segments, but for some reason, ending on tile 0x30 in Stage 11 lets us skip a great deal of castle. To the extent we can tell, this is the best warp we can get from Tile Storage. Ghosts won't disappear into the "phantom bottomless pit zone" like in Stage 10, so they are apple'd as normal. Snake-like boss, can't think of any special comments. Hamburgler's boss, we realize attacking the wall is just as valid as attacking the boss itself. Final boss, attacking the floor is just as viable a target.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
We save frames on name entry. In another contest, we've even saved frames on character select, allowing the "RNG" to select part of our team for us. Perhaps next year, we'll double our team name length as a handicap. Now I just need to recall every trick we did on our movie so everyone else gets to know what we did.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Ah, yes. The usual limitations of such a game. I've had plenty of experience in Rad Racer, and I'm pretty sure the game simply assumes a constant amount of progress around the track for any given distance traveled. The outer and inner edges are exactly the same lengths of distance as far as the game is concerned. Just think of it as simply a straight line forward, with absolutely no bends in it, and in some parts, there's a magic wave that pushes you to one side, which you need to steer against to stay on the road. Please no comments about driving in a diagonal line to compensate for the magic wave. It's a magic wave.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Reviewing the first and second place teams of DTC6, the definition of how we should end things would have meant one team winning over the other. Going by input length, the winning team keeps its position. Going by time to credits, the second place would have won, even if the winning team fought the boss normally. It was a pretty close match. At least for this game, there doesn't appear to be any significant difference. In any case, it might be a good time to decide which type of ending to standardize for later DTCs.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
I prefer "fastest credits" over "shortest input" myself, but it's more a problem of logistics from what I know. Simply, the file we submit reports the length of inputs. It doesn't report when the credits take hold. It's therefore easier to compare input lengths than credit times. We did end the final boss fight of Zook Man ZX4 using a "slow to credits, fast input end" strategy, using a glitch that keeps an attack hitbox in place indefinitely.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Not DTC6. Not Dream Team Contest #6. Actually, anyone here looked over the history of how each DTC asked for movie endings? Just thought I should ask, I only remember #6 clearly.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Just a quick request for confirmation, anyone think a list of received submissions is good to provide now that there's just a few days left? Hopefully as a kick to the teams that have a file ready but just haven't submitted the darn thing. I mean, there isn't much time to go "oh, snap! Those bad dudes didn't submit?! We can win this, TAS NAO!!" Or for that matter, "guys, I know we four worked together 8 hours a day for the past two months, but now we know this team submitted, I guess we'll just have to give up." On another thought, I recall some discussion somewhere, or at least my own wishful thinking (I will not be able to locate this alleged discussion), that if there's ever a sequential game to be called for in a contest setting (Donald Land counts as this), that we could submit in stages rather than the entire game. I've made an attempt that flopped. Then again, it depends on how clean the game is in stages, and whether there are things that carry over between them, like the two apples power-up for this game. Something like that may potentially allow for a faster next stage at cost to an earlier stage. Whatever rules we come up with should hopefully account for that.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Just in case you need me to tell you all "I'm fine with it," I shall tell you now that I'm fine with it. I'm fine with it. I have now told you I'm fine with it.
Post subject: memory.registerexec + memory.setregister("pc",addr) broken
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
During a function called by memory.registerexec, attempting to move the Program Counter by memory.setregister("pc",addr) will load the first byte of the instruction before the move, and the remaining bytes of said instruction at the location after the move. The broken instruction then executes from that new location. Essentially, the main way to safely relocate the Program Counter during registerexec is to jump to an identical byte at the destination. For example, if you set a registerexec to trigger at a JMP $EF40, then move the PC to an LDA $6720, FCEUX will take the JMP, then grab the rest of the bytes for the destination, leaving us with JMP $6720. You can imagine the results. Considering what crazy antics one would have to do, needing both strong familiarity with lua and assembly, as well as deep knowledge of the game's ASM on top of that, I'm not surprised this bug has gone unnoticed for so long. Why must I think emu and not memory?
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
I'll join. As the old team is fine. Watch out. I've been sort of spending time off the site for a bit, haven't wanted to TAS in a while, or anything related to TASing. I'm up for analyzing the snap out of whatever this next game will be, though. NES is comfortable with me. Perhaps by the time the contest is going, I'll be ready.