Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
@FuzZerd: You mean in Star Light 2? If so yes, I tried; it didn't and up being faster (Tails currently finishes it in 0:10::11, while Sonic does in 0:10::38; Tails can't gain enough frames at the start to make up for the difference).
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
@stiltzkin: You got the wrong ROM.
In any event, I updated the submission to include a link to the hack, explicitly stating the version used too to avoid any chances of ambiguities.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
New WIP up to Sandopolis 2. Featuring a new shortcut (which is an improvement to the 100% run), a slight improvement in precision before the shortcut and gaining 1 frame in the boss fight, for a total improvement of 7 seconds 3 frames over the previous WIP. Final Sandopolis 2 time: 0:48::52.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
It's as though Hyper Sonic can enter whatever wall he likes now.
He almost can; the exceptions are either uneven terrain or walls where he would need to move to the left in order to enter. Not all entrances are useful, but many are. Many walls also leave you stuck.
I wonder if four or five years down the track people will be able to do this sort of stuff in real-time runs?
Most of the Hyper Sonic tricks would be nearly impossible to perform unassisted -- the precision required is simply ridiculous. I'd love to be proven wrong, though :-)
A quick summary of how the Hyper Sonic wall entrances work, if you want to try it: when you jump for a suitable ledge, or certain forms of sloped terrain, you must
be moving to the right (you can't do it going left; believe me, I tried);
be moving fast enough horizontally to clip the edge;
not be moving too fast vertically that you are still mostly in the ground for at least 1-2 frames after the initial clipping (higher horizontal speed helps in this regard too);
be able to hyperlaunch at a specific frame (usually, you have to do it diagonally down to the right, but in some rarer cases, straight down also works).
In most cases, the room for error is nil -- both the jump and the hyperlaunch require extreme precision.
For example, when jumping for the ledge, if you hold the jump button 1 frame more or less usually means you can't do it -- you will either be too low and hit the wall, too high and be ejected up (being left standing on the ground) after the hyperlaunch or too far left that you are ejected to the left of the ledge after the hyperlaunch. If you are trying a shallow zip, another possibility is that you end up entering the wall instead (which is usually bad in most cases where you want a shallow zip).
Likewise, if you hyperlaunch 1 frame too early or too late, you probably won't be able to do it -- for shallow zips, you definitely won't be able to do them, regular zips are slightly more forgiving (depending on the vertical and horizontal speeds, you may have 2 or even 3 frames in which you can hyperlaunch and still succeed). Failure has consequences similar to those described above -- ejected left, ejected up, hit the wall or (for shallow zips) be stuck in the wall.
Now, not all news is bad news -- the new Launch Base 1 trick, with Sonic + Tails, can easily be done unassisted. It requires some practice, but it can be done. It won't be as elegant as the version in the WIP, but it will still be pretty fast.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
WIP to end of Sandopolis 2.
Thanks to that initial shortcut courtesy of Tails, as well as a few improvements in precision from the 100% run, Sandopolis 2 is now sub-1-minute: 0:55::55, or 6 seconds 52 frames faster than the 100% run. One timed object is in an inconvenient place, but fortunately it is possible to go around it without any trouble.
I honestly did not expect Tails to make this much difference in the Sandopolis levels -- some difference, yes, but not to the tune of 12 seconds 58 frames! Makes me want to see how the Death Egg levels will fare...
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
WIP to end of Sandopolis 1.
Improvements in speed management in the off-screen portion, a slight optimization of the lift by Tails and the boss fight combine for a final time of 1:27::51 -- saving 78 frames from the previous WIP. The new position where the sign post falls is a lot better too, and places the first timed object of the next act in a great spot. I just have to optimize the stage transition now and plan my route for the next stage.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
WIP until end of Sandopolis 1.
This level is annoying as hell: no zips, many annoying timed objects. Thanks to Tails, I managed to get to the object at 0:16 in time to skip it, which is not possible for Hyper Sonic alone. That puts another timed object later in a very inconvenient place -- and there is no way to get past that timed object other than wait for it to move. This would lose almost all gain from having Tails. Searching for ways to gain that time back, I found an improvement to the 100% run, which I hadn't managed to do it when I did it. I searched high and low for alternate routes, and in the end, found one: go above the level. Only with the help of Tails can Sonic get to this route -- not even Hyper Sonic can do it. The route taken suffered through several iterations, and is the fastest possibility I found. After all that trouble, the level was finished at 1:29::09 -- savings of 4 seconds, 48 frames from the 100% run (about half of which can be reclaimed in the 100% run if a timed object is in the right spot).
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
New WIP, still up to Flying Battery 2.
What changed is: at the ending of Marble Garden 2, a cosmetic change that I had meaning to change for a while. Launch Base 2, Mushroom Hill 1 & 2 all see better optimization, and now have the following times:
Level Time Improvement
Launch Base 2 0:42::24 34 frames
Mushroom Hill 1 0:36::15 22 frames
Mushroom Hill 2 0:33::26 70 frames
Also, the post-Launch Base 2 cutscene is shorter by 1 frame. I have no idea why, but it is.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
Sure. But please encode the new WIP which further improves Flying Battery 2 to 1:11:21, saving 31 frames. I am now 3 seconds 27 frames faster than the any% run in this level.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
After quite a few tries, a random input generator and a brute forcer later, I put the TAS aside for a while due to RL stuff. Now I am back, and I mean business :-)
I still couldn't pull of the spindash in Flying Battery 1, so I went for a different approach: backtracking! It was so successful that even the mighty Knuckles in the 100% run was left eating dust.
All told, Flying Battery 1 clocks 0:56::16 -- this is 12 seconds 6 frames faster than the any% run and 4 seconds 33 frames faster than the Knuckles 100% run. This much time saved put some timed objects in rather inconvenient places in Flying Battery 2, and I was forced to find another route; I found one which makes a final time of 1:11::52 for Flying Battery 2, for savings of 2 seconds 56 frames over the any% run.
And yes, it can all be used in the any% run too.
The WIP is here. For convenience, the savestate you need to view the movie is here; remember to grab it if you don't already have it.
Detailed description of the levels:
Flying Battery 1
The stuff at around 0:09 and 0:10 is to get the glitch working correctly: Sonic must jump off from the "handle" and hit the ground with Tails and the handle both off-screen or the anti-gravity will be canceled. So I go inside the wall using the trick I discovered earlier, jump off and zip back in time for Tails (who is not idle) to grab Sonic. At 0:14 I still can't spindash -- not that it would help much, as I would simply get inside the ground in a bad location. At about 0:15-0:16, Sonic can't go running or he will enter the ground; Moreover, the hamster cylinder will cancel the anti-gravity if I enter it normally (i.e., running). Then I use anti-gravity to underflow the horizontal position.
Flying Battery 2
I use the anti-gravity glitch to enter the wall. Inside it, I slow down and start running on the opposite direction; this causes me to zip up. If I keep horizontal speed in the right range, I don't return in the same path, and I control horizontal speed to zip up to the right height in the right place. The I jump into the wall and zip to the end of the level. This is the same trick used to climb the wall before the boss at the end of the any% Flying Battery 1 level, just going in the other direction. If there were an easily grab-able fire shield early in the level, I could die to remove the left barrier and to an horizontal underflow (at a slightly different location) which would potentially be faster. But alas, no such fire shield exists.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
As it turns out, some of the timers (speed shoes, invincibility) were broken when I changed from bitwise & 7 to mod 8. The newest version of the hud is this.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
Yeah, well, then it is definitely not just that -- I managed to get position in the right range with subpixel position very close to Nitsuja's and small (4 subpixels/frame) velocity when ducking, all to no avail. With Tails around flying and generating lag.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
It doesn't seem to be the tile boundary thing: in the any% run, the x position is 5001:227 when nitsuja starts the spindash. I think that I will try making a random input generator and leaving it to run until I get the spindash...
Edit: forgot to mention: this is with Tails trying to generate as much lag as possible.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
I was tempted to vote "yes" before watching, based on the posted WIPs. Watching the movie only confirmed that "yes" was the right choice. Excellent work! I can't wait to see how the 44th battle will turn out.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
This post is especially intended for Nitsuja or Upthorn or whoever else knows how it is done: in Flying Battery 1, time index 0:27::41 (frame 58548 of the published any% run), a spindash is performed while under the antigravity glitch; normally, Sonic goes out of balance. I am trying to replicate it but failing miserably, and am looking for pointers.
The reason I ask is because I found a new shortcut for the start of Flying Battery 1, which leads to that same location but about 3 seconds faster (this shortcut is also usable for the any% run, as it doesn't require Hyper Sonic). The new shortcut is here, starting from the included savestate for convenience. Warning: this savestate will only load in the SVN version, crashing the release.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
New WIP up to the end of Mushroom Hill 2. The times:
Mushroom Hill 1 0:36::37 (578)
Mushroom Hill 2 0:34::36 (183)
Again, the parenthesis indicate how many frames the WIP is faster than the any% run.
In the first level, I delay the last hit so that I can activate the glitch in the second act -- I have to wait until the screen is unlocked. Then, I kill the boss with Tails because I need the lightning shield: in act 2, the off-screen loops are "broken", similar to the any% run -- but they are in the opposite direction from the any% run, making the fire shield useless. The lightning shield helps quite a bit but, in the end, the different brokenness of the loops costs me time anyway because I have to wait until the screen catches up to the red spring, as even the lightning shield doesn't let me reach the top of that loop. Tails is also useless in that regard because he (a) doesn't stay close to Sonic long enough before re-spawning and (b) to help Sonic, Tails has to be above the enforced top of the screen, meaning he cannot fly going up. Sadly, I can't turn into Hyper Sonic while the score tally is showing, or the problem would be solved...
Nevertheless, despite all of these troubles, I *still* manage to beat the any% time by 3 seconds in Mushroom Hill 2. Hyper Sonic for the win :-)
A curiosity: it is *almost* possible to zip past the entire act 2 -- using the glitch used in the WIP/any% run, you can get inside the terrain, jump down until close to the bottom (after the act starts) and zip right until you reach a giant ring room. It isn't faster, though, because you have to wait for the level to start before you can zip. Also, the giant ring room is locked from the outside, and all my attempts of escaping it failed.
Sonikkustar wrote:
How the hell does that qualify as generic zipping? It definitely looks like you used the horizontal underflow.
In Launch Base 1, horizontal underflow was indeed used; the generic zipping bit was referring to Launch Base 2.
Sonikkustar wrote:
Loved Launch Base 2. I didnt know you could zip using the pipes. Would that cound towards an improvement towards the any%?
No, only Hyper Sonic can zip like that: while some wall entrances done with hyper launch ability can be reproduced with a bubble shield bounce, they work differently enough that they are not perfect substitutes. A few examples:
Hyper launch may fail to duplicate bubble bounce: In Carnival Night 2, when hyper launching into the spinning cylinder to get inside the wall (first zip), Hyper Sonic can't go as far down as the bubble bounce from the any% run because Sonic bounces "up" again inside the wall, causing Sonic to fall further;
Bubble bounce may fail to duplicate hyper launch: In Mushroom Hill 1, that hyper launch into the ground that enables be me to perform an horizontal underflow cannot be replicated by Sonic with a bubble bounce (and for the same reason given in the previous item);
Both may work: In carnival Night 2, the second wall entrance can be done with either.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
New WIP, up to the end of Launch Base 2.
Carnival Night 1 is identical with the any% run. It is almost possible to improve it by a few frames with Hyper Sonic -- but Hyper Sonic just can't get to the boss quite fast enough as it takes too long to get all rings.
Carnival Night 2, IceCap and both Launch Base levels see some improvements from Hyper Sonic:
Carnival Night 2 0:40::38 ( 93)
IceCap 0:59::57 ( 88)
Launch Base 1 0:32::18 ( 323)
Launch Base 2 0:42::58 (1318)
Once again, the number in parenthesis indicate how many frames the level is faster than the any% run.
Not included in the above table is the fact that the cutscene after killing the last boss in Launch Base is more glitched and slightly shorter (9 frames) than the any% run.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
New WIP until the end of Marble Garden 2. The route is slightly more optimized than the any% run, being 18 frames faster.
For those that missed this post, I switched to a less arbitrary initial save state which is needed for this WIP to synch.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
How about platforms where long is larger than void*? Such as 16-bit Borland C++.
Or the (future) platforms in which void * is larger than __int64 and have to come first. These were the reasons I explicitly did not consider these cases in the problem's solution. The issue is further complicated because M$ (who else...) had 16-bit longs in 16-bit editions of Visual C++.
Oh, the headaches...
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
For #8: ignoring the possibilities of (16-bit or lower) and (128-bit or higher) processors, I guess you are after is the __int64 before the pointer before the long. The reason is that, discarding the processor possibilities mentioned above, __int64 will always be at least as large as any pointer type, which will always be at least as large as a long integer (64-bit Windows being, as always, the exception to the "at least", having 32-bit longs). I would also made sure that you aren't tied down to Windows compilers by using __int64, too: it would be best to use int64_t and typedef from __int64 (M$, Borland and Intel compilers) or from long long (other compilers). More so given that the next C++ standard will very likely use C99's int64_t and family, and will certainly use long long instead of __int64.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
An any% run with Tails would make a lot more sense than a 100% run with Tails: it would be a lot faster and more entertaining, as there are no routes for Super Tails which Tails cannot follow with slightly more work -- even Super Tails' spindash is only slightly faster than that of normal Tails'.
Experienced Forum User, Published Author, Experienced player
(758)
Joined: 9/29/2008
Posts: 964
Location: 🇫🇷 France
I don't know why I didn't do this before, but I have defined and used a more standardized way to create the initial save state, consisting of the following steps:
[1] Generate the SRAM (from the same movie I used for creating the previous starting savestate) by playing the generating movie until you are back at the Sega screen;
[2] close Gens and reopen Gens;
[3] load the ROM, quickly pausing before even a single frame elapses (it is possible);
[4] the previous two steps can possibly be replaced by reloading the ROM, but I haven't tried;
[5] the desired SRAM is still loaded, so start recording a new movie from the current save state -- Gens will ask you to create a new savestate, do so;
[6] advance at least one frame, pause, then start watching from the beginning (not even one frame should elapse);
[7] make a new savestate, rename it into a *.gst file and overwrite the save from step (5).
Steps (6) and (7) prevent Gens from complaining that the save state is incompatible with the current movie when you load it; I submitted a bug report about it.
With this setup, the generated savestate and the recorded movie are both consistent with starting a game from power-on with the given SRAM; in fact, if you hex-edit the movie to run without a savestate, and you don't clear SRAM when loading the movie, it will synch up perfectly. Until GMV2 is finished, this is a very robust workaround; it also has the advantage that it will make the movie easier to convert to GMV2.
Starting from this standardized savestate caused some lag and luck differences from the previous WIP, which forced me to resynch the run; but there were some minor benefits too, as I managed to improve Angel Island 1 & 2 in the process. Marble Garden 1 was improved by a slightly earlier hit on the boss. All of these improvements were possible on the earlier WIP.
The new starting save state, created with the above procedure, the new WIP using the new starting state and the new times:
Angel Island 1 0:35::33 (1)
Angel Island 2 1:06::09 (33)
Marble Garden 1 0:25::53 (3)
Here, the number in parenthesis indicate how many frames faster than the previous WIP this new WIP is.
A note: in Angel Island 1, after meeting with the flame bot for the first time, quietly waiting for the flames to go up as in the movie is faster than anything else -- it can make a difference of up to 30 frames (!) if you keep bouncing around while the screen is in flames.