So far, the best I got for GHZ1 is 0:17:12 (squeezed another frame from better speed management). Everything else I tried resulted in some slow down or another -- even removing the second flight and trying something else is slower by a couple of frames. The movie file for GHZ1 is here.
Optimizing the GHZ2 route, I managed to knock 10 frames, down to to 0:15:44. Trying a bottom route after the speed shoes resulted in the same time at the end. Unless there is a faster route without the speed shoes, or a way to get into that wall, that would be it :-(.
I will try the Sonic glitch to see if it is faster or not; but as for the wall, I just want to point out that Tails clears that wall faster than Knuckles does. From what I have seen, though, I will have to try to obtain a copy of Gens with the S1 camera hack compiled in (and I can't compile it myself because I don't have MFC).
Not quite; starting Tails' flight keeps most of the forward speed (you lose only when going upward between 0-1024 subpixels per frame), while Knuckles' glide sets forward speed to 1024 subpixels per frame. Tails cannot get past the initial bumper similar to Knuckles (has to decelerate first) and his higher jump strength leave too little room to decelerate when jumping to the ceiling to regain control. I think that most of the difference (13 frames) can be reclaimed by optimizing the initial landing (at the top of the stage), the collision with the last bumper and, if optimizing the initial landing helps, by ignoring the invincibility (I know that delaying a few frames at the start allow me to go straight without the invincibility; maybe improving it does also).
Of the two swimming bits (to get to the cork, and to get the shortcut), the second one is mandatory and can't be skipped; it is what allows me to go into the ground. I can probably improve getting to the cork, though. But most of the differences are actually that (1) I need to swim inside a wall or I get too low to use the shortcut correctly (and end up in a closed room with no way out) and (2) Knuckles' glide allows him to hit the switch at the end a lot earlier.
I think you mean at the very beginning, right? Because the second use is done without loss of forward speed, and I think that delaying it by even 1 frame prevents me from landing on the ledge.
In the first case, I can avoid the (6-second slower) Sonic route; likewise for the second use (and it is in fact almost necessary to prevent me from getting embedded -- in a bad way -- into the wall straight ahead). That leaves the boss:
I wish it could... but the spikes go on the wrong way and can only be used when Robotnik already going back -- but by then, he has already been defeated.
It requires the camera hack, which is why I haven't tried it; and it being slower limits its usefulness.
I had actually missed that one... will see about implementing it when I get around to that stage of the game once again.
Yeah, he climbs it faster, but because he gets stuck on it and can't do the knuckles glide to head straight down, it takes longer for him to spindash, and the overall level time is slower than Knux's. If you look at the map http://www.soniccenter.org/maps/s1z21.gif you can see that an earlier part of the level is almost as high as that wall. If you spindash jump and fly from there, I think you should be able to clear the wall entirely, without bumping it and losing your forward momentum.
I can send you the special gens hack, too, but first I need to find where in the Tails in S1 ROM a couple of things are, so all the display functionality works properly.
marzojr wrote:
upthorn wrote:
In SYZ Act 2, you take a different route from the Knuckles TAS, but it ends up slower. Tails should be essentially able to duplicate the Knuckles route.
Not quite [difference between Tails flight and Knux glide]
Well the thing is, Knuckles' route is essentially the same as Sonic's route, and there's nothing Sonic can do that Tails can't. Even the thing where you let go of the jump button so Sonic starts going down faster, and then hold it again after bouncing off an enemy can be done without triggering Tails' flight, so long as you start holding on the exact frame you bounce off the enemy. And that's not even necessary here.
marzojr wrote:
upthorn wrote:
And in LZ Act 3, you do a good job of duplicating the Knuckles strat, but you're 2 seconds slower because of the unnecessary swimming.
Of the two swimming bits (to get to the cork, and to get the shortcut), the second one is mandatory and can't be skipped; it is what allows me to go into the ground.
Yeah, I know. I meant the bit before the cork. It's slower than what sonic does.
marzojr wrote:
upthorn wrote:
In SLZ Act 1, Tails has a jump-strength advantage over Knuckles which should end up with Tails having a faster time, rather than slower. Again, I think this has to do with poor use of the flight ability.
I think you mean at the very beginning, right?
Yeah. The second use is a very good use of the flight.
marzojr wrote:
upthorn wrote:
In SLZ Act 3... at the boss fight, Robotnik will take damage from the spike balls even if he's already flashing, which could probably speed up the fight a bit.
I wish it could... but the spikes go on the wrong way and can only be used when Robotnik already going back -- but by then, he has already been defeated.
I swear I remember being able to manipulate which side of the see-saws he drops the spike balls on by changing which side of each is down before he arrives.
marzojr wrote:
upthorn wrote:
In SBZ Act 1, it's possible to use the same zip trick that the published Sonic TAS uses. It's not as fast as the Sonic or Knuckles versions, and requires somewhat more precise placement on the piston, though.
It requires the camera hack, which is why I haven't tried it; and it being slower limits its usefulness.
Actually the first version of the TAS which made use of it was done before sonic 1 camhack existed. As for it being slower, that's a poor choice of words on my part, what I meant is that it takes like a second longer to get into the wall, because of the delay Tails has between ducking and the camera panning down, which neither Sonic nor Knuckles has.
marzojr wrote:
upthorn wrote:
In SBZ Act 3, it's perfectly possible to use the same zip trick that's used in the published Sonic 1 TAS
I had actually missed that one... will see about implementing it when I get around to that stage of the game once again.
How it works is that there's a collision weirdness with the 45 degree slope. If you're going at 6pix/f or faster (which is very easy to do with spindash), you can go from not being on the slope yet, to being inside the slope to the point where it acts as a wall instead of a floor. I forget the exact positioning required, but you should be able to find it by watching position on the currently published S1 TAS.
How fleeting are all human passions compared with the massive continuity of ducks.
Yeah, he climbs it faster, but because he gets stuck on it and can't do the knuckles glide to head straight down, it takes longer for him to spindash, and the overall level time is slower than Knux's.
I think you got the levels mixed up; Knuckles goes through MZ1 in 0:15:40, while Tails does it in 0:14:49, almost a whole second faster.
upthorn wrote:
If you look at the map http://www.soniccenter.org/maps/s1z21.gif you can see that an earlier part of the level is almost as high as that wall. If you spindash jump and fly from there, I think you should be able to clear the wall entirely, without bumping it and losing your forward momentum.
Thanks for the link, but I have been using the maps at Sonic Retro. I had already tried the route you mention, but it is ultimately slower because of loss of forward momentum and lower maximum horizontal speed. The thing is that the optimal flight points (i.e., the best points to activate flight or to boost up) are:
When starting flight, if upward speed is just under 1024 subpixels per frame (sometimes, up to 1036 subpixels per frame upward speed is optimal -- but it is not reliable). In this case, you have no loss of vertical speed when going to flight and can clear the greatest distance possible. Upward speeds between 0 and 1024 do not lose vertical speed when you go into flight, while upward speeds above 1024 get lowered to 512. I haven't tested thoroughly for much higher vertical speeds than jumping, but activating flight when bouncing sometimes allow higher vertical speeds.
When climbing, the optimal point to boost (if the objective is climb rate) is between 250-258 subpixels per frame; pressing the jump button will keep you between 272-280 subpixels per frame upward (depending on the starting flight speed). Note that this loses forward speed because or drag.
If the downward speed is about 960 subpixels per frame, you can boost without loss of forward speed and the vertical speed will remain downward -- is may just reach zero, depending on the exact speed.
Now, back to MZ1: if I start from the higher points, I will have to boost at least twice at a suboptimal point, losing forward speed, or I will hit the wall in the middle. That is even if I (ab)use sloped terrain to get a much higher initial vertical speed. At most, I will be traveling at 1536 subpixels per frame forward after drag kicks in, compared to the 4055 subpixels per frame I reach for quite a stretch. I could climb the wall about 2x as slower and it would still be faster.
upthorn wrote:
I can send you the special gens hack, too, but first I need to find where in the Tails in S1 ROM a couple of things are, so all the display functionality works properly.
I'd appreciate that, yes. Some of the values whose location I know: X and Y position, subpixel position and speeds are in the same place as Sonic 1, as is the combined speed value and the slope gradient. Timer (unless the Sonic Tricks page is wrong) is slightly different: minutes at 0xfffe23, seconds at 0xfffe24 and frames at 0xfffe25. I haven't tried the camera locations. I guess Pu7o can give you any other values you need.
upthorn wrote:
Well the thing is, Knuckles' route is essentially the same as Sonic's route, and there's nothing Sonic can do that Tails can't.
I am not completely 100% sure of this; Tails has a slightly smaller hit box, which could prevent some of the stunts Sonic does (but enable others), but that is just a feeling. Anyways, I will try again to replicate the Sonic route and see how it goes.
upthorn wrote:
Even the thing where you let go of the jump button so Sonic starts going down faster, and then hold it again after bouncing off an enemy can be done without triggering Tails' flight, so long as you start holding on the exact frame you bounce off the enemy.
I haven't been able to do this on the hack at hand (but I can easily do it in S3&K); maybe something for Pu7o to fix, if he is still supporting the hack.
upthorn wrote:
I swear I remember being able to manipulate which side of the see-saws he drops the spike balls on by changing which side of each is down before he arrives.
If that is possible, then yes, I think the fight could be improved; as is, none of the published (or obsoleted) runs use this, so maybe it is not faster or possible.
upthorn wrote:
Actually the first version of the TAS which made use of it was done before sonic 1 camhack existed. As for it being slower, that's a poor choice of words on my part, what I meant is that it takes like a second longer to get into the wall, because of the delay Tails has between ducking and the camera panning down, which neither Sonic nor Knuckles has.
Knucles does have it too (just tried it); otherwise, spindashing would be annoying as hell. But I will look into making it work and see if I can improve the time.
upthorn wrote:
How it works is that there's a collision weirdness with the 45 degree slope. If you're going at 6pix/f or faster (which is very easy to do with spindash), you can go from not being on the slope yet, to being inside the slope to the point where it acts as a wall instead of a floor. I forget the exact positioning required, but you should be able to find it by watching position on the currently published S1 TAS.
Thanks for the explanation, it will be very useful when I get to it.
I haven't been able to do this on the hack at hand (but I can easily do it in S3&K); maybe something for Pu7o to fix, if he is still supporting the hack.
Well I didn't test shit that only happens in specific frames when I made the hack, so I guess it's possible that there are things that work differently in TiS1 from S3K when going about such insanely sensitive shit... Notably, the flight code isn't called in the same location as in S3K (in S3K, it's called at the end of the jump height routine, which I find to be stupid, so I called it in Obj01_MdJump instead) so I guess that explains the difference.
I'd appreciate that, yes. Some of the values whose location I know: X and Y position, subpixel position and speeds are in the same place as Sonic 1, as is the combined speed value and the slope gradient. Timer (unless the Sonic Tricks page is wrong) is slightly different: minutes at 0xfffe23, seconds at 0xfffe24 and frames at 0xfffe25. I haven't tried the camera locations. I guess Pu7o can give you any other values you need.
I didn't change the RAM locations for the timer at all. Actually most of the RAM is the same as Sonic 1, but I think what Upthorn needs are locations of shit in ROM, not RAM :P
EDIT: Also, you should skip the SEGA sound with start :x
I haven't been able to do this on the hack at hand (but I can easily do it in S3&K); maybe something for Pu7o to fix, if he is still supporting the hack.
Well I didn't test shit that only happens in specific frames when I made the hack, so I guess it's possible that there are things that work differently in TiS1 from S3K when going about such insanely sensitive shit...
Fair enough; it is just something that is good to know when comparing Tails' capabilities in both games and what can and can't be done. Did I mention I love the work you put on the hack?
In any case, as of now (that is, the latest time I got, 0:28:52), this particular difference is responsible for 11 of the 19 frames I take longer in GHZ3 than the Knuckles TAS, the remainder being due to Knuckles' glide (6 frames at the start and 2 in the boss battle between the first and second hits).
Pu7o wrote:
I didn't change the RAM locations for the timer at all.
The Sonic Tricks page is in error, then, as it lists Sonic 1 timer frames as being at 0xFFFE24 instead of 0xFFFE25.
Pu7o wrote:
Actually most of the RAM is the same as Sonic 1, but I think what Upthorn needs are locations of shit in ROM, not RAM :P
Since I haven't seen the source for the camera hack, I wouldn't know whether or not it needs any RAM values; but it stands to reason that it needs at least two: x and y position.
Pu7o wrote:
EDIT: Also, you should skip the SEGA sound with start :x
How early can it be skipped? Because I do press start midway through it.
How early can it be skipped? Because I do press start midway through it.
Doesn't the lag-detector show when you can press start?
Or did you disable it?
It's the red frame counter that should appear in a corner if you have it enabled.
It turns white when you can make an input, and red when the game isn't checking for input at all.
I still haven't tried to reproduce the MZ1 trick, but optimizing the flights in MZ2, I managed to reduce my time to 0:14:51, a reduction by 43 frames. Now I am only 19 frames behind Knuckles. This file shows the change. I also press start as soon as it makes a difference in the Sega screen, saving several frames.
Edit: linked file should work now.
So far, my attempts at duplicating the MZ1 trick from the Sonic run have met with failure; even copying the input does not help. I really need to see what is going on to have a shot at duplicating it, as things are working slightly differently for Tails.
On a happier note, by delaying the first flight, improving a jump and the boss battle, I managed to knock MZ3 down to 0:27:29, 25 frames faster than my previous time and 40 frames faster than Knuckles. WIP here.
[*] When starting flight, if upward speed is just under 1024 subpixels per frame (sometimes, up to 1036 subpixels per frame upward speed is optimal -- but it is not reliable). In this case, you have no loss of vertical speed when going to flight and can clear the greatest distance possible. Upward speeds between 0 and 1024 do not lose vertical speed when you go into flight, while upward speeds above 1024 get lowered to 512. I haven't tested thoroughly for much higher vertical speeds than jumping, but activating flight when bouncing sometimes allow higher vertical speeds.
cmp.w #-$400,$12(a0) ; Is y speed > $400 (upwards)?
bgt ControlFlight_SetAnimation ; If not, branch to set the flying animation
asr.w $12(a0) ; Cut Y speed in half.
bra ControlFlight_SetAnimation ; Set flying animation
So unless the emulator is doing something wrong, I don't think 1036 speed can get through without getting snapped in half, period.
unless the emulator is doing something wrong, I don't think 1036 speed can get through without getting snapped in half, period.
Unless the emulator (or the code) is doing something wrong, it shouldn't be possible to start flight at all with speed > 1024 upwards...
marzojr wrote:
upthorn wrote:
If you look at the map http://www.soniccenter.org/maps/s1z21.gif you can see that an earlier part of the level is almost as high as that wall. If you spindash jump and fly from there, I think you should be able to clear the wall entirely, without bumping it and losing your forward momentum.
Thanks for the link, but I have been using the maps at Sonic Retro.
So unless the emulator is doing something wrong, I don't think 1036 speed can get through without getting snapped in half, period.
Oh, the flight starts with speed less than 1024 for sure; but if I press the button on a frame when it is up to 1060 (1036 was one value I knew it happened, but I got it to work for 1060 yesterday) and if the speed gets reduced below 1024 on the next frame by gravity, then the flight does not lose vertical speed (although I guess that, technically, the button press is happening on this second frame...). I am guessing that maybe up to 1080 is possible, but I haven't been able to test it.
upthorn wrote:
Unless the emulator (or the code) is doing something wrong, it shouldn't be possible to start flight at all with speed > 1024 upwards...
Unless I am misremembering, I managed speeds well over 1024 by starting flight just before hitting that monitor at the beginning of SYZ3. I will check it again when I am back home just to be sure.
upthorn wrote:
Incidentally, I've just completed a much better set of maps, with start positions, all objects, and pixel-perfect landscape collision displayed.
Those maps are really great! I will be switching to them immediately :-)
Holy cow, I never realized that the last zone before Robotnik was so huge! I usually only see a miniscule portion of it...guess I just got lucky the first time I played and happened to find the shortest path. I did always kinda wonder what the point of that place was.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Unless I am misremembering, I managed speeds well over 1024 by starting flight just before hitting that monitor at the beginning of SYZ3.
I was remembering correctly: I managed to get an upward flying speed over 1600 by starting flight just before hitting that monitor; I also managed to get these speeds by activating flight after bouncing from that same monitor. In both cases, Also, upward flight velocities where about half of the pre-flight velocity, so it is not very efficient; demonstration here.
Yeah I just tested how Tails flight works in Tails in Sonic 1, and Tails in Sonic 1 screwed it up.
In S3K: if you jump with C, and press B the next frame, and then continue to alternate B and C, you continue to jump as normal until gravity brings your y velocity to -1024 or above.
In TnS1: f you jump with C, and press B the next frame, and then continue to alternate B and C, you immediately begin flight with your y velocity halved.
This behavior is very inaccurate to how Tails works in the official games, and is likely to reduce acceptance of the hack on this site.
Addendum: Pu7o and I have spoken about this, and together we've corrected this, and the other inconsistency in Tails' flight, and he will be releasing a new version of the hack shortly.
How fleeting are all human passions compared with the massive continuity of ducks.
I have spoken with Pu7o about this, and together we've corrected this, and the other inconsistency in Tails' flight, and he will be releasing a new version of the hack shortly.
Between me reading the message and clicking "quote", you put on this :-) Out of curiosity, what caused these inconsistencies? Were they tied to the different location the flight code got called or was it something else?
I have spoken with Pu7o about this, and together we've corrected this, and the other inconsistency in Tails' flight, and he will be releasing a new version of the hack shortly.
Between me reading the message and clicking "quote", you put on this :-) Out of curiosity, what caused these inconsistencies? Were they tied to the different location the flight code got called or was it something else?
The flight code was being called from a different location than it should have been. Additionally, pu7o had previously failed to implement the check that disallows Tails from flying above the camera boundaries that is present in S3K.
So: new version of the hack will have much more potential for site acceptability.
But: new version of the hack is unlikely to sync with old GMV, even just through GHZ1.
However: Better tools will be available if you wish to reTAS the corrected version.
How fleeting are all human passions compared with the massive continuity of ducks.
Additionally, pu7o had previously failed to implement the check that disallows Tails from flying above the camera boundaries that is present in S3K.
How does this work? It prevents Tails from flying (a) above the top of the screen or (b) enforced boundaries, if, say, fighting a boss?
upthorn wrote:
So: new version of the hack will have much more potential for site acceptability.
But: new version of the hack is unlikely to sync with old GMV, even just through GHZ1.
However: Better tools will be available if you wish to reTAS the corrected version.
I will, yes. It will probably take a while longer, as I adjust to the differences, but I think it will be better for it in the end. The synching will be a pain, but I can manage it; some changes I made earlier required me to go around re-synching large portions of the game due to differences in lag (but thankfully, the TAS Movie Editor was up to the task...).
Which actually brings me to a possible enhancement for re-recording Gens: display an editable input list. If a part of the game desynchs due to lag differences, the TASer could change the input accordingly (insert or delete input here or there) and watch the entire sequence again, to see if it still desynchs.
I know I am almost abusing your good will, but if the camera hacks for TiS1 and S1 are incompatible, could you also throw in a copy of Gens with plain S1 camera hack? It would come in handy in understanding the MZ1 wall zip (the portion that happens outside the camera).
Might as well mention this: Something I think would look cool as "entertainment value": Jump inside the giant ring when you get 50+ rings, right before the screen fades out, timed enough so that the ring doesn't fully disappear and the special stage isn't triggered.