Posts for FatRatKnight

Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
Of note, I also mention my memory isn't perfect in the IRC logs. Maybe GBAHawk never had system bus reads, and I was just remembering from a different core. Regardless, handling pointers means the script maker must know where each region exists, then include a name along with the trimmed pointer if bus reads are not available. Gets worse if the pointer being read is not constant in what region it references. There's a bit of other philosophies in the IRC log I talk about as well.
Post subject: I'm not up to TASing this, it seems.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
Sub-22 looks possible, with all the skips we've been finding. However, it's becoming increasingly apparent that I'm just not getting into the mood to try. So, while I'm still thinking about it, I'll give out all my routing thoughts on every stage before I completely fall off. Before I forget, remind me what the secret team did that no one else did. I have since lost that piece of knowledge. Intro Team 4 has most of the optimization already, but then we found the same concept that the Miniboss Skip works on will also work on bosses. I'm not expecting further frame savings, but I also realize not much more investigation has taken place after the skip was applied and optimized. It is theoretically possible to skip the miniboss here. Unfortunately, the only set-up known also takes longer than it takes to defeat the miniboss normally. I don't consider myself a good glitch hunter, but I'm not sure of any other way to keep the miniboss flag state. Stage 8 Almost certainly the first stage we go to for an optimal route. We get Arm Upgrade and Laser here, both of which are rather useful, especially together. Team 4's run was basically used. Assuming the intro faces no further improvements, we're currently waiting 4 frames at the door (conserving boss fight). There was also a spot of optimization on Team 4's run that moved 3 frames forward to a ladder after the miniboss. I delay at the ladder thanks to animation frame rules, meaning one more frame there should carry the other three over to the door, and in turn save us one dialog frame rule. Although the Miniboss Skip removes the advantage of getting a good charge-up weapon for the second miniboss we fight (okay, third. But I'm not counting Intro), 8-first still overwhelms 7-first from how long it takes us to beat the first (if counting intro, then second) boss with 3-damage shots rather than 2, plus other sorts of cute bonuses in Stage 7 by having laser and arm upgrade, including breaking the capsule lock and running off with its animation. Stage 7 Almost certainly the second stage to go to for an optimal route. We get Leg Upgrade and Spike Ball here. Dashes are nice, and so is giant spinning spikey doom. Once again, Team 4 optimized the snap out of this stage. The key difference to make here is the Miniboss Skip, which by my attempts, saves something like 36 frames. It also lets us exit the room with more laser ammo. I'm not certain what other changes to make here, though. Stage 1 Almost certainly the third stage to go to for an optimal route. We get fire. Charged, it gives an aerial dash that lets us mid-air jump after its down. Needed to break Stages 2 and 4 wide open. There's a lot of flat ground to dash on. There's also a Ladder Dash in here, which needs the Leg Upgrade. 1-second would mean flame charge in Stage 7, but this advantage actually competes with the invincibility trick we do with the laser there. It's likely route-871 is better than route-817 due to what Leg Upgrade brings over flame charge on Stage 7. Yes, Team 4 also optimized this one to a ridiculous degree once more. It's the end of their frame war rampage, though. As for the Miniboss Skip, there's an enemy that apparently exists long enough for it to happen, but it is too far off-screen for any of basic, spike ball, or laser to reach. Star charge can easily reach, but that requires 6 before 1, and we'd be short both flame charge and bubble barrier in 6, which may overwhelm the savings we'd get for skipping the miniboss here (which is done in 3 hits). Aside from that, I'm not sure what more we can do here that Team 4 didn't already do (Warning: Over-inflated ego detected, FatRatKnight identified as participant in Team 4). Stage 4 Very likely to be the fourth stage to go to for an optimal route. We get Bubble here. The barrier has certain inconveniences, but they are side-stepped beautifully with Charge Swap, and ignoring object damage has some advantages. Well, this stage is basically the big reason for Stages 8 and 1 before this one. Team 4 starts off faster, reaching and beating the miniboss before anyone else. Segment 3 was apparently faster in two other teams, but the excuse here is setting up Ghost Fall. The Ghost Fall itself and the segments that follow are better done by other teams, judging by the table. At this point, the stage order is rather uncertain. Or perhaps very fluid, and we can re-order however we please. Keep in mind there are animation frame rules between stages, which may cost us a few frames even if the stage order has less input involved. Due to the uncertainty, I'll list them in stage order (2356) rather than winning order. Besides, what can be determined as winning order anyway? Stage 2 We get Whirlwind here. Does nice damage uncharged, but the charged shot is practically worthless. The other big reason for Stages 1 and 8 early in the route. Ground is overrated. The bests of the teams are basically all over the place here, so tracking down who did what faster is going to be time consuming, to say the least. Miniboss Skip is done here, so be sure to pay attention to Team 7 there. Stage 3 We get... Well, I call it dirt spike. The basic shot does good damage, but I've consistently seen some nasty lag with its charge shot. The segment times are all over the place again. Since this is another stage that I haven't analyzed much of, I've got about as much to say as I did on Stage 2. Miniboss Skip is possible and viable here, as well. Stage 5 Head Upgrade is here, letting us leave a stage early, and preserving the miniboss state, except the set-ups are just too long. We get missile. Perhaps its main advantage is the fact the charge shot is consumed the instant it hits something, freeing up a sprite for lag and also letting us switch weapons afterward. Useful somewhere? Teams 3 and 4 are paced closely together here. Those two should have most of the fastest strats in there. If I had more to report, I would write them, but I'll just point you to the Miniboss Skip and attempt to distract you while I run off on the next stage now. Stage 6 Body Upgrade is here, with no confirmed effects other than disabling its capsule and lighting up a sprite on the pause screen. We get star. If there are miniboss skips that need them, this thing can go very far off screen, but I'm not sure if any of Stages 2, 3, or 5 can make use of it. Miniboss Skip is possible, but requires we do a Segment Skip. To be fair, the Segment Skip will skip the first segment and takes us straight to the end of the second segment, where we can then spawn an enemy to skip the miniboss. Three segments skipped at once, essentially. Only problem is the Segment Skip itself has a nasty set-up, making the savings from what we bypass lost on just having it happen to begin with. Not much else to report, again. Pull together the best of the teams (Team 3's got the lead for the most part), then execute the combined awesomeness? END A sequence of mini stages leading to boss re-fights. There's something unique about these boss doors: There are enemies that will spawn while the screen scrolls. But only if we travel left. Breaking the lock we get on the door using the charge laser, we can move left and trigger spawns. Four of the bosses here have been proven skippable this way, which is awesome to see, and should save a full minute or more. Other than that, the usual "find the best team and copy their movements" strategy is what we should go with. So, sub-22? If we're going to publish something, may as well make it as short as possible so we don't have to see too much of it, right?
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
The function exists in BizHawk already. I'm giving my analysis on this existing function. There are things about the existing function I'm not entirely satisfied with. EDIT: Wait, let me re-read that... EDIT2: So there's two functions... client.SetGameExtraPadding client.SetClientExtraPadding SetClientExtraPadding fixes the 0,0 coordinate where I desire, apparently. Still, I want access to information on what the gaps currently are in my scripts. EDIT3: Okay, so client.SetClientExtraPadding doesn't really play nice with a number of other drawing functions. Namely, I'm not seeing gui.drawRectangle working out there. Probably because of differences of 'emu' and 'native' thing going on. Having to keep track of two drawing surfaces, and what functions work with which drawing surface, is definitely giving me a difficult learning curve.
Post subject: lua function: client.SetGameExtraPadding
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
Currently trying to work out its particulars. It adds drawing space out on the edges. I do like this, as it means extra drawing space, and can put down information that doesn't take over screen space on the game itself. It is also a handy way to produce a 1-to-1 scale visuals of things that are just off-screen. This idea was one of the things I loved seeing in lsnes, and it's nice to see it's in BizHawk as well. However, the implementation details strike at me... Let's start with the drawing origin. The coordinates of 0,0 where our top-left corner is. With BizHawk's client.SetGameExtraPadding, 0,0 is the top-left corner of the new drawing area, while lsnes' gui.top_gap and gui.left_gap has 0,0 always remain at the top-left corner of the game's area, with negative coordinates needed to reach the extended drawing area. BizHawk's coordinates move relative to game drawing. So now we need to include an offset to keep whatever needs to remain as a game overlay. lsnes is static relative to game drawing, so an offset isn't necessary. Keeping an offset means extra information that needs to be tracked by the one making the script. There's minimal interference between multiple scripts if the only gaps created are below and to the right, as 0,0 isn't moved anywhere. A few sample scripts I've seen leaves the left and top completely alone, probably for this reason. Once a second script is run, where one script has no prior information on the left or top, the display of that script gets ruined immediately with non-zero left or top extension. Now, access to what the current drawing area is... I'm not aware of any functions to give me the information of the current gaps. If I create a chain of scripts, I can't conveniently assign an off-screen space based on the order of scripts running. I'm not positive of any clean way to communicate between different scripts outside of global variables, and I have not experimented with how BizHawk handles them between scripts. If there are functions that do return numbers on the current gaps, I clearly haven't looked through the function list enough, and I apologize. lsnes gap functions return a number specifying what the gap was previously if the same gap was called a second time that frame. When I'm chaining scripts, I just use a delta gap, which adds extra space on top of the space already there, and work in the number I was given to place the off-screen data further out so it doesn't overlap with previous off-screen data that's already there. It can be as simple as giving client.SetGameExtraPadding a set of return values. There's no requirement for the script to have left, top, right, bottom= client.SetGameExtraPadding(l,t,r,b) to run it, it can just discard the return values and run client.SetGameExtraPadding(l,t,r,b) without assigning its returned values to anything, and if the script does want the return values, it can make use of it. This third point does not irritate me, but it is still a difference between lsnes and BizHawk. There is one thing BizHawk does that is inconvenient with it, but other than that, nothing too major. BizHawk's client.SetGameExtraPadding is something that you run once, and the gaps remain indefinitely until the function is called again. Assuming the information can be given to scripts later in the chain, a later script could theoretically make the one call and keep the values given in its own local variables and maintain proper position. lsnes requires that its gap functions are called every time it wants to paint an update. Otherwise, the next time on_paint is called, the borders snap back to what they were originally, and you're back to the standard drawing area. Of course, the gap functions do return an important value if there's any desire to chain up some scripts. The only problem is that the gaps created in BizHawk is that they last beyond the lifetime of the script. It doesn't feel as dynamic as how lsnes handles it, but assuming the code under client.SetGameExtraPadding isn't too expensive, I suppose it can be called every frame anyway so scripts can dynamically adjust themselves based on which ones are running or what sequence they're put in. Well, if the drawing area information can be picked up by the other scripts, that is. Mostly, these are stuff that me, as a well-practiced lua script maker, can spot and get annoyed by. Novice script users probably won't worry too much about it, I mean, it's extra screen space that's easy to get. And it is useful as it stands right now. Now, making the change in origin, keeping the 0,0 at the game's corner instead of the extended corner, will break scripts relying on this. Adding how much information is given back to the user is probably not going to break any existing scripts. The third point isn't critical, and since persistence is the current behavior, I would keep it persistent. I do get annoyed by designs that don't turn out elegant, or at least doesn't fit my view (I'm me, therefore I'm important. Sorry). I hope my reasoning reflects well on anyone working on the lua functions.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
Ah, I know the problem! Table references! Mostly, I'm focusing on this line here: NPCPreviewTable[z]=AddressTableNPC[npctype] What is AddressTableNPC? Well, it's a table containing other tables. AddressTableNPC[npctype] gives you the table stored there. It is not a copy of the table. It is the table. Multiple variables assigned to the same table means anything that affects one variable will also affect what other variables return. So, when NPCPreviewTable[2] is set equal to the same table as NPCPreviewTable[1], any changes to the table in NPCPreviewTable[2] will also be reflected in NPCPreviewTable[1], because they are the same table. You just set the two spots equal to the same table, therefore they reference the same table. The solution is likely to construct a new table, copy what you need into that table, rather than setting something equal to the existing table. EDIT: A second look, and you actually have another layer of tables I didn't immediately spot. The copy gets a little more involved, as simply creating one new table and copying elements of the top table means you have references to the sub-tables, as opposed to new sub-tables with their own independent values. Again, the solution is to create a new table for every sub-table and copy those values over, and have this new table in an index of the main copy you're trying to make. Let's not get into recursive tables.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
It appears Ouijawii has made a little something. Although, this is not (U) (PRG1). Hoping a bad dump wasn't used. I suppose this means I need to track down the right version if I'm going to view this, as it doesn't sync with that specific version. Actually, it might be nice to know the differences of different ROM versions anyway. What BizHawk says about (U) (PRG1): headerless rom hash: sha1:E9DDCFC47956FA55623621A2475BF6DF70489426 headerless rom hash: md5:6E628438DE2D8D4C2F3166461CD441AB ... Ah, right. I do have a completed 48 tracks, all gold, all items run. I was subtitling it a bit, then had to get a change of computers and basically everything's a mess. Still, probably a good thing as my delay brought to light things about game versions.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
Well, here's an updated External Radar script. Now with spawning zones. Still a rather heavyweight script, though. If you really need the information, it's probably worth the slowdown. Won't mind more efficient ways to display this stuff. At least it makes more sense on what things spawn and how we avoided some of them. The corners only kick in if moving diagonally, so moving straight across will avoid spawning things just off screen, and if you move enough for the spawn point to get basically within the normal viewing area, the spawn just doesn't activate,
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
Been getting myself distracted on a new game I got. I probably needed that break, I suppose. So, I saved less than a second on Stage 7 by miniboss skip. userfile #38755128054343687 Haven't tried a different route where the player is much closer to the right edge of the screen, favoring player position over camera, with the thought we want that flying enemy drifting over sooner. Also fixed up the external radar script so now it has spawn points displayed. Joy. One possible improvement is a set of rectangles describing the regions where a spawn might happen should a point enter one of them while moving in the correct direction. Should I continue, I will just keep picking the most convenient stage select delays that preserves the early parts of stages as long as possible. The intent isn't to produce a submittable run, it's to have a "master file" that includes the latest tricks, while minimizing time on item drop manipulation. Once we have a better idea on what to expect, then we remove the delays and put real effort on item drops. The skips tally is now 4 minibosses and 4 boss re-fights. That leaves 3 minibosses with set-ups worse than the skips save, 2 minibosses with no skips, 8 main stage bosses, and 4 end boss re-fights.
USERFILE: Zook Man ZX4 - stage 7: 37 frames saved by miniboss skip wrote:
f16207 *** STAGE 7 *** f17161 Segment 0: 954 f17975 Segment 1: 814 f18502 Segment 2: 527 (T4:501 ; T7:565) f18712 Segment 3: 210 (T4:106 ; T7:200) f18781 Segment 4: 69 (T4:236 ; T7: 69) Segments 2 to 4 in 806 frames. This is 37 frames off of Team 4's no skip, and 28 frames off of Team 7's skip. Also, one laser shot is far less costly than 2 laser charges, so that's another plus over Team 4. Did not attempt to optimize a version of Team 7's route through, that is, "glue" myself to the right edge of the screen and navigate that way. Might get the helicopter going to the right earlier. Might be too much damage before that slowing us down. Camera will also be worse at the miniboss room by probably 30 pixels, though that might not affect time. Note that this file delays 24 frames at stage select so I didn't have to get here re-manipulating luck. If an 8-frame rule is saved in Stage 8, this means a delay of 32 frames, except it wraps to 0 delay as the item drops are on a 32 frame cycle. In a sense, this delay is an optimistic one, expecting precisely one frame rule saved (or five, nine, thirteen...). I really need to keep track of credits for each stage... Intro: Team 4's movie as base, plus some optimizations from... Someone, and a skip by... Someone else. Stage 8: Team 4's movie. Stage 7: Team 4's movie, implementing a skip from Team 7.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
Well, we just discovered a potential for skipping bosses too, not just the intro boss. Problem is what is available. After using the laser to break the control lock on doors, just move left. If there's an enemy that can spawn right around the door area, then an enemy may spawn there. In the main stages, there generally aren't any enemies around the door. The final stage is crowded, so it is worth looking through it in hopes that something spawns in the right place. I looked at the first door myself, but the enemy that spawns is exactly and precisely far enough away to despawn when the camera stops in the boss room, down to the pixel. Other parts are being checked by Exonym, I believe.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
I did talk briefly about route 871 versus 781, and concluded there isn't enough advantage for 7 first even removing the miniboss advantage from the skip. So, speaking of the miniboss skips, the idea is we shoot a normal enemy as the miniboss (or boss) loads. Destroy this enemy, and the game thinks the miniboss (or boss) died instead, for useful results. Let's list out minibosses: Intro - Game over -> kill first enemy, except game over is too long. Stage 1 - An enemy is barely out of reach of spikeball and laser... Stage 2 - Team 7 got the skip Stage 3 - Team 7 got the skip Stage 4 - No useful enemies near Stage 5 - Confirmed by Exonym Stage 6 - No enemy near that corner Stage 7 - Team 7 got the skip Stage 8 - No visible enemies near END - What? No minibosses In addition to the four known skips, it is also confirmed the intro boss can be skipped using the same method. This is not possible with any boss other than intro: * The door itself is the trigger * Somehow scrolling the boss room in without the door doesn't load boss * * Keep in mind there's an invisible wall in the way * Door erases all enemies upon contact Anyway, we have 4 confirmed minibosses skipped, 3 that doesn't appear feasible in any way, shape, or form, and 2 that looks tantalizingly close to possible. I want to talk about those two. Intro: Well, there is a flying enemy, but it is so far back that we'd waste more time waiting for it than killing the miniboss. The miniboss segment itself has a camera position trigger that would get us to the next segment right away (camera X needs to be 0x0100 to 0x0110, or 256 to 272), but the camera will not scroll that far. We can set up a Segment Skip, then do that skip while the camera is in that magic range during Segment 0 so that when the miniboss segment loads, we're there and already loading the next one after that. The only known way to set up a Segment Skip from intro is to meet the miniboss and game over against it. A regular death is not enough, it has to be game over. If that is done, then we can see the curious effect where we skip right past the miniboss. A game over itself takes more than one screen transition, and we'd also need to throw away the spare lives the game gave us, so the set-up is more costly than fighting the miniboss. If a faster alternative is found, then this might work, but until then, we're not skipping the miniboss. Stage 1: There is an enemy right before the miniboss. This enemy stays loaded right up until the miniboss appears, so if we can hit it, we skip the miniboss. The problem is, from Exonym's observation, that anything we do with spikeball or laser just won't reach. Other stages really want the Flame Charge for general time savings, particularly Stages 2 & 4 for breaking the auto-scroller, and Stages 3 & 5 to jump out of Ghost Fall (alternatives are not Ghost Fall or die). Even Stage 6 would like the bubble barrier, which requires Stage 4, and there's no way we're doing that before Stage 1. It would be nice if we can get these stages to work, but still, we have 4 minibosses and 1 boss skipped this way. The skip is useful already, but it would be really nice to get these as well.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
ThunderAxe31 wrote:
That's not so dirty. I'm ashamed to tell you that I tried hard to improve it, but it looks like it's just impossible to.
Well. My technique was to do all the obvious fast things. Can I do this action any earlier? Once the answer was "no" on when I can spawn the flying enemy, the first wall jump, and the boss trigger, and my shot could hit the enemy, I said "good enough" and packed things to go. So there aren't any less obvious sorts of improvements to make there? Curious. If anyone wants a look at Stage 8 now, I synced it in. userfile #38610267158570522 Deleted a frame on entry (animation frame rule), and added 4 frames prior to boss door (dialog frame rule). I do this because I think anything we do in Stage 8 will likely sync pretty well with whatever improvements we find in intro.
USERFILE: Zook Man ZX4 - Stuck in Stage 8 once again. wrote:
Well, we did the boss skip in intro. Nifty. Stage 8 syncs like a dream. Except the boss. The dialog frame rule is out of sync by 4 frames now, which is to be expected after the animation 4-frame rule locked in our entry. I have consumed these 4 frames waiting at the door instead, so the boss syncs too. This has the 3 frames for taking the second ladder route through Segment 3 in Stage 8. We need another frame, and some way to carry these three all the way to the end (they are discarded at the ladder after miniboss), and we'll beat another frame rule. Doing this in case someone wants to poke about Stage 8 instead of intro all the time.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
Dacicus wrote:
ThunderAxe31 wrote:
you can download it from there if interested: http://tasvideos.org/userfiles/info/38590039817615831
Here's an unoptimized improvement that kills the boss faster using an enemy: http://tasvideos.org/userfiles/info/38597146366561439
And here's my quick and dirty optimization. userfile #38597559581868308
Zook Man ZX4 - Optimized intro boss skip. wrote:
f01011 *** STAGE 0 *** f03277 Segment 0:2266 f04060 Segment 1: 783 f04186 Segment 2: 126 f04465 Segment 3: 279 f06680 Segment 4:2215 f06845 Segment 5: 165 === END OF STAGE 0 (Frames: 5834) === Mostly optimized, anyway. Probably a few frames to get in there, though. May need to get ourselves higher on that last walljump We never see the boss. Just gone instantly.
Clearly, the boss was so impressed with us defeating a tiny enemy that he just exploded. We looked into the intro miniboss for a bit, but the flying enemy is further away. I looked into keeping the miniboss state after death, but it's only maintained if we game over, a regular death isn't enough. Shame, there's a nice trigger available if we can do the segment skip.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
ruadath wrote:
Dang, how did you guys put so much work into a project and then not finish it off?
I can put a lot of effort into analysis, taking apart a game most thoroughly, and can get all the way to something like 99% completion, then suddenly fall off and never come back to it again. I've left other unfinished projects, but I'm always happy if someone picks up the pieces and finishes what was started. I'm not sure how I can push myself back into finishing this. I can probably give support, but I can not lead this anymore, for some odd psychological reason I don't fully understand.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
Basically inserted Team 4's Stage 8 without issue. userfile #38588774020402943 Changed something in Segment 3 for not-lag frames, but threw them away later for lazy-sync. At least the intentional delay is easy to spot and remove once we know how to keep the frames. I don't want to deal with making things entertaining myself. Intro and Stage 8 minibosses could definitely go with the treatment. Most bosses, too, except Stage 8 boss needs that doppler effect on the shots, which greatly reduces downtime for interesting nothings in particular. So anyone who wants to dance, go for it. EDIT: Analyzed the early stage routes using the best numbers of each team. Having dash and spike ball from stage 7 speeds up the stage and miniboss of stage 8 by 968 frames. However, stage 7 first means 2-damage shots for the first boss instead of 3, and that alone costs 960 frames, based on best teams' efforts. That leaves 8 frames advantage for stage 7, which is quickly lost when we realize we haven't accounted for the stage portion of Stage 7, and what the laser and arm upgrade brings. The miniboss skip doesn't remove enough advantage of Stage 8 first, but it was still worth theorizing on.
USERFILE: Zook Man ZX4 - Inserted Team 4's Stage 8, with minor change wrote:
f08322 *** STAGE 8 *** f09003 Segment 0: 681 f09231 Segment 1: 228 f10034 Segment 2: 803 f10184 Segment 3: 150 (T7:162 T4:165) f10317 Segment 4: 133 (T7:133 T4:121) f11107 Segment 5: 790 f11229 Segment 6: 122 f11893 Segment 7: 664 (T4:661) f12024 Segment 8: 131 f12924 Segment 9: 900 f13310 Segment10: 386 f13556 Segment11: 246 f16111 Segment12:2555 === END OF STAGE 8 (Frames: 7789) === Apparently this run is largely independent of item drops, so we beat the boss with 1 HP left. If we can save that lag frame in the intro without losing the frame rule, this stage should sync exactly as before. Actually, this stage is proving sync stable. The one change was to take the ladder down instead of ledge clip in the middle of Segment 3. Apparently, this is 3 frames faster than Team 4. The saved frames were thrown away intentionally at the ladder after the miniboss, marked with Select presses, to sync the remainder of the stage.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
Well, we have a terrain script which tells us how many tiles we're dealing with. We did determine this: * Floor tile: Does not act as a ceiling, and do not count as a tile we need to bypass on the way up * Solid tile: It's a ceiling, as we all know * Spike tile: Also counts as a ceiling Wall jumps let us go through up to three tiles of ceiling. We can also use flame charge from the side and jump through slightly deeper ceilings, which requires a rarer layout. One tile and two tiles tend to be trivial to bypass. Three tiles sometimes work, and sometimes doesn't. Generally a pain to find the magic sequence that works on the rather common three-tile ceilings.
Post subject: So, that miniboss trick. Skip one segment. Difficult set-up.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
Let's talk about some mechanics. Stages are in segments, and strictly speaking, the game secretly teleports you from one segment to the next as you get to the end of each one. If a miniboss is involved, destroying the miniboss puts the player in the next segment. When the miniboss state is reached, there usually is only one thing to hit: Some part of the miniboss. Things we discovered are that the miniboss state isn't cleared when we leave the miniboss room for other reasons (death, leaving the stage, etc), and the game assumes a miniboss dies if we destroy other things. Taking advantage of the quirks mean we can steal this miniboss state by simply leaving the miniboss room after getting there, then skip the first segment of another stage. Now, two clear methods come to mind: Stage escape by head upgrade: Well, just exit the stage after reaching the miniboss. Next enemy killed activates the next segment quickly. Problem here is that we have to traverse the stage until we reach the miniboss to escape from. This, in itself, takes a lot of time, and difficult to justify revisiting several segments just to skip visiting one. Game over, lose to the miniboss: This method allows us to use the save platform found before a number of minibosses, so repeat usage is possibly faster, although still not as fast as we need it. After a game over, we're kicked back to the title screen and can load our game from there, and this doesn't clear the miniboss state. We have two save files: Load Game takes us to stage select, and Continue takes us to the save platform. Now, we need to lose the 3 spare lives given, probably before we step on the target save platform, and a reset every time we want to try this trick. So how much time we can save by skipping a few segments might be lost to reset, Continue, game over on miniboss, Load Game. If there's some way to set up the segment skip quicker, then yes, it would save time. Unfortunately, the set-up needed to do the skip outweighs any segments we'd want to skip. We have two different, yet still extremely costly methods available to us. Would be nice to find a faster set-up.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
Probably a good idea to list my scripts as well. At least make them slightly easier to find: http://tasvideos.org/userfiles/info/38508373147113065 - Terrain http://tasvideos.org/userfiles/info/38508487412195834 - Hitboxes http://tasvideos.org/userfiles/info/38508546028174499 - Baisc / General http://tasvideos.org/userfiles/info/38508617604349368 - External Radar
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
Spikestuff wrote:
HERE'S THE TABLE
We spotted a few errors so far: Team 7 - Stage 3: 5th stage selected, not 8th Team 7 - Stage 2: 6th stage selected, not 7th Team 7 - Stage 6: 7th stage selected, not 6th Team 7 - Stage 5: 8th stage selected, not 5th Team 7 - Stage 7 Segment 5: 208 frames, not 108 frames (total is 6706) Team 7 - Stage 9 Segment 0: 580 frames, not 590 frames (total is 1995) Team 3 - Stage 5: 5th stage selected, not 8th. Team 3 - Stage 3: 8th stage selected, not 5th. Team 3 - Stage 3 Segment 1: 797 frames, not 397 frames (total is 6002) Team 4 - Stage 9 Segment 1: 1360 frames, not 1921 frames (which puts the total to 1921 frames) I do like the touch where the spreadsheet calculates total frames rather than someone manually putting in that time. Let it do the math, and it is also a helpful transposition error catcher as my script also reports total frames. I know to put more effort in finding errors if the totals don't match.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
In case it wasn't already linked, the prior 100% Knuckles run: [779] Genesis Sonic 3 & Knuckles "Knuckles, 100%" by upthorn in 45:28.60 Also, the 100% Sonic run, which has set a precedent on the nature of the underflow glitch: [1387] Genesis Sonic 3 & Knuckles "Sonic, 100%" by marzojr in 55:48.80
Although the underflow glitch is obviously not in the previous submission, it is the belief of this judge that were such a glitch had been available when the original submission was created, it would have been used.
I disagree with the judgement made here. A later Sonic run was made, which knew full well of this very glitch, and chose not to include it. The front description of the publication specifically mentions that this glitch wasn't used. There is evidence that, albeit the two runs were from different authors, the glitch would not be included even if it were known then. The fact it was published has set a precedent that was expected to be followed. Whether this precedent is to be concluded a mistake is another issue to discuss, and I will not attempt to tackle that point in this post. Secondly, both runs (referring to the old Knuckles run and this TAS) omit the same glitch, whether or not the perceived reasons are identical. Since there aren't any clear indications that the old run is better optimized in various parts than the new one here, no techniques used to speed up the old run was omitted in this one, and there are no other known records that beat this run, it fulfills the obsolete requirements to replace the old run. I concede that this by itself is not something that should guarantee publication, but I feel it is still a strong reason to do so. Overall, I feel the decision for rejection is hinged on the presence of this one glitch. Neither Knuckles runs use it, so no clear change there. The later Sonic run knew of it, and chose not to include it, indicating it may be an undesirable viewing experience to have it, and provides a precedent. From where I stand, the basis of this rejection is on rather weak ground, so I ask for further clarification or reconsideration of this judgement. I haven't carefully compared the pertinent runs, but I wanted to voice my reaction to this judgement. I hope my disagreement is understood.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
There's another effect in stage selection to worry about: Animation frame rules. In addition to taking time to select the target stage, one also has to wait for the beam-in animation. This is on a 4-frame rule, and we can delay at stage select to see this frame rule in action. I forget what the frame rules look like after each boss, however. But I recall concluding the route we took was among the faster ones. As for weaponry, we already have the big ones we'd need thanks to what the first three picked stages give. So it largely boils down to whether the weapon was needed for something. As part of Team 4, I ended up using the drill weapon once on necessity in Stage 2, and the missile on the miniboss of Stage 6. Though, if we can get the optimal time on just the three weapons we get from the 871 start, leaves 24 paths where s4 is 4th stage, 12 where s4 is 5th stage, and 4 where s4 is left for 6th stage. 38 potential routes to check frame rules on. Bosses appear on the door frame rule, which is the same 4-frame rule as animations, or the 8-frame rule on dialog, so for the most part, we'd be defeating a boss on the same time relative to the frame rule anyway, whatever improvements we make. Generally, we can assume the best boss wins will be locked in with the frame rule. Of course, the difference in stage select is just a few frames, so if a weapon is needed to go faster than 871 alone, this makes it clear a route getting that weapon before going to that stage is almost certainly optimal. EDIT: I recall throwing meteors down there in the aquatic part of the boss rush, instead of trying the flame charge. However bad the lag looked, the meteors made it worse somehow, including a few cases of doubled lag. And the ceiling still got in the way. I didn't look very hard, but I was burned out at the time. EDIT2:
ThunderAxe31 wrote:
6 frames improvement of stage 0, segment 3: http://tasvideos.org/userfiles/info/38540088675097492
Well, let's finish the intro with this improvement: userfile #38548674155850191 Did not attempt luck manipulation for ammo tanks, whether or not that is important.
USERFILE: Zook Man ZX4 - Intro cleared in f7993 wrote:
One extra lag frame during segment transition after the Ghost Fall and jumping off that object platform. Otherwise, it's a clean improvement. Any ideas on that lag frame, anyone? I base the name on what frame we can input something on the stage select, by the way.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
We can freely switch weapons when most projectiles don't exist. Here's some projectiles we found where we can switch anyway: * Basic, uncharged shot * Flame, smaller secondary shots * Missile smoke * Star, middle and lower shots This generally screws up the graphics and hitboxes of these projectiles. Try it sometime, looks freaky. We've also noted that switching to Laser while a basic shot exists not only screws up the basic shot's look and hitbox, but also makes it a piercing projectile. Additionally, the Laser itself adds 1 to 15DC and subtracts 1 when it should be done. It just subtracts 1 a few too many times if you fire it to an enemy just a little off-screen while walking toward that enemy, as the game rapidly spawns that enemy, the laser killing its clones every frame, and for some reason this gets 15DC negative. While it isn't exactly zero, we can't pause or switch weapons, but if it isn't too negative, we can fire enough lasers to make it zero, then switch weapons, for science of course. Yes, we can have multiple lasers, because the counter is negative. Lastly, we can release a charge and pause on the same frame, but this usually requires a secondary glitch. In this pause, pick a different weapon and unpause. The Charge Swap lets every source weapon's charged shot do curious things while equipped with the target weapon. Some teams finishers do this. Incidentally, the secondary glitch involves losing player control for a moment, such as damage, releasing B while out of control, and pressing it again just as you regain it. Charged shot is released, and a charge is maintained. You can always pause with this charge, which allows the above pause and switching crud. Well, since the whole DTC6 thing happened, the most obvious thing to do is grab all the winning strats of the various teams and stitch them together to form a giant mecha the most optimal run we can. The two winning teams obviously did something right, and Team 7 has a trick with killing certain minibosses very fast. It helps that the game is mostly sync friendly. At least, as far as we can tell, stages will sync perfectly without flaw every 32 frames. Who's up for mashing together the best?
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
That trick, we call the Charge Swap glitch, with a specific variant we call Frozen Laser. How to charge swap: First, do the charge glitch. With the glitch charge available, release it on the same frame you pause. Select a different weapon. Unpause. Enjoy. The Frozen Laser is a result of starting from laser, then swapping to spikeball. Screws up the animations, so the laser doesn't ever finish. There's also MurderBarrier, which is starting from bubble, and swapping to laser. It's awesome -- It erases anything it touches instantly. Except for the part where it also eats the stage end triggers. What, you want the Charge Glitch? Fine. First, charge until you can release a charge shot. Then, lose player control, such as taking damage. Release B while not in control, and press it again the frame you regain it. You should release a charged shot while maintaining a charge.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
Here's a few scripts we had: http://tasvideos.org/userfiles/info/38508373147113065 http://tasvideos.org/userfiles/info/38508487412195834 http://tasvideos.org/userfiles/info/38508546028174499 http://tasvideos.org/userfiles/info/38508617604349368 I forget which ones go to what, but I think it's terrain, hitboxes, basic, and external radar, in that order.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
I can't speak for the judges, so take what I say as simply my own point of view. So that there is something to think about until someone else can state what is considered what, I will share what I believe. Will a "Game end glitch" run be accepted when there exists a faster run that doesn't use it? A little more encompassing than asking if it would be published for not beating a warped run. Chances are very good that such a run will be rejected. An interesting trick that its setup ultimately ends up taking longer than beating the game in other ways means that run is not eligible for the Vault for failing to beat a known record, and acceptance to other tiers is unlikely without some very favorably interesting parts that differentiate it from other TASes. If the first half is identical to a warps TAS, there probably aren't enough interesting things to warrant a separate publication, and if that were the case, one can obsolete the other. I'll ask myself a few other questions and answer those, just in case. Can a "warped any%" be published when there is a faster "game end glitch" run? I don't know, really. I will leave that to someone else to answer. Probably depends on the content, but I'm leaning more toward yes, depending on how much the game end glitch skips. If a run contains both warps and a skip to credits, what should its tag be? Game end glitch. I'm not sure if there's any interesting merits to warpless game end glitch versus warped game end glitch, if such a thing were to be considered. I believe it would be assumed that warps would be used if it gets you to the game end glitch faster, as this glitch is almost certainly a more significant thing than the warps needed to get there. Well, that's everything I can think of, myself. Take my statements as simply something to think about, and not that it's the standard here. If it helps solidify thoughts from judges here for their answers, even if I ended up wrong on some point, then I'm glad to have helped. Basically, I'm sharing thoughts to give something to think about until someone else can give a more firm answer.
Editor, Experienced Forum User, Published Author, Skilled player (1173)
Joined: 9/27/2008
Posts: 1085
Warped any% * Sends the player to a later part of the game, but never directly at the credits/ending * Optionally an intended part of the game; Could be a warp put in, or a glitch Game end glitch * Takes the player directly to the credits/ending * Not ever something intended to be in the game (otherwise, it's a debug/cheat function, or perhaps a credits selection in Options) That's what I think are the differences. Anyone else can chime in and correct me.