Memory
She/Her
Site Admin, Skilled player (1552)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
So all of the floating glitches work like this? Even the Queen Final one? EDIT: Also is this memory address the same for each track or is it different per track? I can't tell from your post what the exact address is.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Editor, Skilled player (1198)
Joined: 9/27/2008
Posts: 1085
I took a look at Q5 briefly. When I landed, the Segment value jumped to something appropriate to an earlier part of the track, and after the wall impact, I floated straight to that earlier part. So I'm pretty certain these two values are important, though I'm not entirely certain why the jump selected that early segment. As for the exact memory address, it is independent of what track you select. Actually, it depends on whether you select Training (always first "slot") or Grand Prix (machine dependent). There are five machine slots, and the player is put into one of the first four based on what spot the machine starts each track in. Hot Violet starts in the front, all the way to the left, and is in the first slot. Jet Vermilion starts in the back, all the way to the right, and is in the fourth slot. As for how to read my style: EWRAM:12D60[Size=0xCC][Count=5] Machine data +9E,1u - Which split did you take on the track? +A2,1u - Lap segment EWRAM is the memory region. Personally, I prefer the full bus address, EWRAM is at 0x02000000, but BizHawk's design made it difficult to work that during DTC6. 0x12D60 is the base address. If you're looking at the machine put in the first slot, that's what you start from. If you want the second machine instead, add the Size component once, so the first stat of the second machine is over in 0x12E2C. Just add 0xCC again for each machine you go down. The Count is simply to let me know when I went too far and I'm looking at not-machine data. Finally, the +xx lines after is the offset you need to add to get the stat you want. If we wanted the first machine's "Lap segment" I marked, you'd take 0x12D60 (the address of the first stat for that machine), then add 0xA2 to that, and it will be address 0x12E02. If in Grand Prix, the Jet Vermilion is not the first machine. We're three spots down. 0x12D60 is the first stat of the first machine, we need to add 0xCC for each spot to get to our fourth machine. 0x12D60 + 0xCC * 3 gets us our first stat. But we don't want the first stat, we want some crazy stat of that machine. So we add +0x9E for which split, and +0xA2 for which segment. After all this addition, addresses 0x13062 and 0x13066 hold the stats we want. The ",1u" part of "+9E,1u" just specifies how many bytes and what mode makes most sense to read it. 1 is one byte. u is unsigned. It is my style of how I write out stat data. Sure, I can write it out like... 12DFE - Machine 1's track split 12ECA - Machine 2's track split 12F96 - Machine 3's track split 13062 - Machine 4's track split 1312E - Machine 5's track split ... But this style doesn't work with me for various reasons. Compactness, scripting, and my own intuition for a rather brief look at my reasons why.
Memory
She/Her
Site Admin, Skilled player (1552)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
I just messed around with freezing the lap segment value and it appears that if you hit a wall that is between you and the lap segment you will start floating towards that lap segment. You regain control if you manage to hit a piece of track between the wall you initially hit and that lap segment. Additionally: if you're floating and the lap segment updates, you will start floating to the new lap segment rather than the original destination. Therefore it is likely impossible to float across an entire track like this without cheats: you'd likely update your lap segment to something closer relatively quickly. At best I could see this cutting off a uturn or something if you managed to find a place to trick the lap segments.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Memory
She/Her
Site Admin, Skilled player (1552)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
I'm probably going to stop looking into this glitch for now and try and catch up on Pawn 1. I'm still having problems optimizing movement but that's probably partially due to lack of time spent on it so far. I also have some troubles actually reading the script at times but idk whether that's on you or just me. I feel a little overwhelmed looking at it at times. Could just be lack of time spent on it again.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Memory
She/Her
Site Admin, Skilled player (1552)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
Managed to save a frame on your opening lap so far but I'm still mostly playing catch-up. I was confused as to why you were tapping the brakes at certain spots. Had to check the resources page to see what was really going on. Didn't know MV has what the F-Zero SNES time attack community calls "brake tapping".
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Editor, Skilled player (1198)
Joined: 9/27/2008
Posts: 1085
There are a number of things I did in my TAS that I don't really think to explain. What feels obvious enough to me doesn't necessarily mean it's obvious to basically anyone else (EDIT: or rather it's less obvious, but just doesn't come to mind). Indeed, the brake tapping is just to get a higher average speed. Thanks to hysteresis, the speed would otherwise vary as low as 0x70F up to 0x721, or 1807 to 1825. This averages to 1816 speed. Hitting the brakes at 0x720 means I avoid having the hysteresis kick in, and therefore my speed never falls below whatever amount one frame of braking would cause. This is enough to increase the average to 1818 speed. Essentially, if you keep up frame-perfect brake tapping for 908 solid frames, you will save 1 frame. Except you'd need more time than that, as you should also be drifting a bunch for higher true speed, so the amount of time saved by brake tapping is virtually nil, but is something I thought I may as well just do. Some machines would actually have reduced average speed if you try brake tapping with them. Jet Vermilion gets about 0.1% advantage at best doing frame-perfect brake tapping, which is really small. I momentarily stop brake tapping on the first curve, preferring a different method to slow down just before the hysteresis kicks in. When trying to steer beyond a tolerance, you slow down, and this friction is much smaller than Jet Vermilion's brakes. Naturally, I time my left presses for this, pushing against the tolerance whenever I needed its friction. Finally, as much as I would like to toggle the accelerator and use coasting friction instead of braking friction, this triggers the Blast Turn, dramatically adjusting momentum, and would kill any advantage in higher average speed by destroying your drifting. I've made no real attempts at manipulating CPU cars, other than the immediate moments before impact. I don't know a lot about them yet, other than they seem to have very consistent spawn points where they'll appear once you get to some magic spot, and of course your facing wouldn't sight them showing up out of thin air.
Memory
She/Her
Site Admin, Skilled player (1552)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
I'll need to look into any potential advantages of brake tapping while boosting as well in any case. I definitely want to let the RTA community know if there are any potential advantages there. EDIT: There are clear advantages to brake tapping while boosting: you can spend more time at the higher speeds and less time at the lower speeds. Should be relatively viable for RTA.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Editor, Skilled player (1198)
Joined: 9/27/2008
Posts: 1085
JV has 48 acceleration during boost, best in the game. Once hysteresis kicks in, and assuming there aren't evil bad obstacles you're tripping over, speed will always fall to exactly 2363 as JV's maintenance during boost is -1. One frame of acceleration gets us to 2411, then our speed slips down again under hysteresis. JV's normal maximum is 2368, which is significantly slower than 2411, so braking to avoid hysteresis is right out. This is basically thanks to the extremely powerful acceleration moving us well past the usual maximum in a frame. And while we could hypothetically accelerate at 2368 speed, getting to 2416, this would only be the case if we weren't under hysteresis mode, and dropping our speed to 2320 just so we can reach 2416 two frames later is almost certainly not worth it. So let's just focus on chopping down the slow half of our hysteresis time and getting to our next cycle sooner. Dropping down to 2363 with one, two, or three frames of braking means we should only brake at 2376, 2389, or 2402 speeds. I'll just math out the average speeds for zero to three frames of braking: 2387.00 - No braking, cycle length 49 frames 2392.68 - 1 frame braking, cycle length 37 frames 2397.56 - 2 frames braking, cycle length 25 frames 2399.00 - 3 frames braking, cycle length 13 frames Well, the good news is that brake tapping has a more significant advantage here. Not counting drifting, it's even 0.5% faster at its best. There's room for error so that you're still at an advantage even if you brake a frame or two early. I'm not sure how RTA-viable it is, though. I hear you players can get crazy-good, so something like this might be within the realm of possibility. If you are able to add in the effort of braking in the middle of whatever crazy snaking you're doing, there is a chance it can save a bit of time. Problem is that over-braking for a single frame means you start the next cycle at less than top speed, which can ruin whatever savings you got with brake tapping to begin with. How consistently can you tap a button for exactly two frames? I'll give you an easy test: Training -> JV -> any track. Once the timer is running, start at 0 speed and tap A (unless you changed controls and made that B instead). 12 km/h is one frame. Jet Vermilion is done with its first gear in 8 frames, by the way, so if your speed exceeded 96 km/h, you went into the second gear's 6 km/h per frame acceleration. If you need a better feel, swap the A-B controls for a moment as a way to practice the feeling of trying the brake tapping, seeing where you accelerated to, before you go try boosting and brake tapping then (oh, don't forget to fix your controls back to normal by then). So during boosts, TAS would just get the 3 frame brakes and that's the end of the story. Well, almost, as there may be some tweaks in picking which frame braking to fit the remaining boost time. I would advise RTA to go for 2 frame brakes, as that requires 2.4 brake taps per second rather than a more frantic 4.6, any errors in timing is less painful, and the peak of 2 frame brakes is only minimally worse than the peak of 3 frame brakes. Even so, the precision needed to save even a frame is very high, I'll leave it to RTA players to decide if it's worth practicing. On a side note, if I'm throwing decimal around in this post, I really should just stick with decimal in my script. Sorry about the whole hexadecimal thing. Would you prefer my next script version goes with decimal values?
Memory
She/Her
Site Admin, Skilled player (1552)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
I would kind of like it in decimal thank you. EDIT: I see you came to much of the same conclusions that I did when it came to brake tapping during boosts. I made my own video about it for the RTA community. I didn't think of practicing using the accelerator in training mode however.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Editor, Skilled player (1198)
Joined: 9/27/2008
Posts: 1085
One not-hex script coming right up. No idea if there's anything in there you want to stay hex, though. Thanks for letting me know about the video.
Memory
She/Her
Site Admin, Skilled player (1552)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
I don't know if anything would be useful to me in hex right now (aside from me getting used to decimal for this game again). What could be nice would be some sort of background color change or something at hysteresis triggering speeds.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Editor, Skilled player (1198)
Joined: 9/27/2008
Posts: 1085
Unless I uploaded the wrong file, here's the glowy speed indicator when under hysteresis. I didn't want to design the script around finding the hysteresis triggering speed. I wanted to find the hysteresis flag itself, and work that into the script instead. Whatever the distinction, I hope it fulfills the change you wanted.
Joined: 6/18/2017
Posts: 2
Thanks FatRatKnight and Memory for the research and videos regarding brake tapping. It's something that's passed my mind before, but have always dismissed as being too difficult to do. That's mainly because I've perceived the machine's speed oscillation as being affected by the different terrains in the game (mainly talking mud and electricity) and I can imagine the scope for screwing up brake tapping is magnified by those terrains. Given when you're boosting you're trying to touch track limits as often as possible for maximum tightness (and making the most of the lack of speed loss), those instances are more often than not. I could very wrong on that front, though. Regardless, trying to incorporate brake-tapping, as FatRatKnight says, while snaking and doing drift-extended boosts would be quite the challenge! But regardless of brake tapping's RTA feasibility it'll be fun to see in this TAS.
Editor, Skilled player (1198)
Joined: 9/27/2008
Posts: 1085
Some internal changes to my script. It's a little smarter about who exists and when a race is really started for recording mode. I ported the script for Grand Prix Legend. After finding new addresses, it turns out the machine stat offsets are basically the same. Actually, so many mechanics are similar enough that I don't really recall any serious changes I had to make to the script. Should feel nice and familiar on your way to GPL. (whoops, set Hex mode in there. Decimal mode is in there and should be implemented fine, just find MachineHUD_hex(PlayerSel) at line 713 and replace hex with dec.)
Memory
She/Her
Site Admin, Skilled player (1552)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
Glad to see that it porting it to GPL was easy. Have you tried climax at all or no? I've messed around a little bit with CPU manipulation. At this section right here I've been managing to get some slightly different CPU behaviors through braking: When the CPU spawns in determines which side of the track it will spawn on and go down. Spawning on frame 2885 makes it go down the left side, spawning on frame 2886 makes it go down right, 2887 makes it go down left again... EDIT: I think part of how it works is that there are invisible lines that when crossed will spawn an object. These can be horizontal, vertical or diagonal. When you cross that line is part of what determines object behavior. I don't think these are necessarily related to lap segments, from current testing. EDIT2: Just checked and they definitely are related from freezing the lap segments but it's not entering a lap segment that determines when or how something spawns.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Memory
She/Her
Site Admin, Skilled player (1552)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
I've been testing out getting a second bump that gets you to about 600km/h in the segment with the conveyor belts but so far it doesn't seem worth the setup. I'll mess around for a bit longer but it doesn't seem to look good so far. EDIT: This 23"63 is basically the best I got with mostly the same strategies so far. I'll continue to mess around with the conveyor section, maybe I need to take a far more different approach.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Memory
She/Her
Site Admin, Skilled player (1552)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
Got a 594km/h or so bump in the conveyor belt section with a new strategy and got a 23"55: bk2 Link to video I plan to continue to mess around for a little bit longer but I'm happy to have found a decent improvement.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Editor, Skilled player (1198)
Joined: 9/27/2008
Posts: 1085
That is a decent improvement. Nice. I'm starting to wonder if I should pioneer the rest of the tracks. Basically produce some mid-level TAS of each track as a baseline. If the game is as sync stable as I make it out to be, then it should all be fine once we copy the inputs together. I have a bunch of unknown numbers I've extracted for each machine, if you feel like making some guesses. Not sure where else to put them, so I chose here.
??1C ?27 ?28 ?2C ?2D ?2F
 512   2  10  50  12  13  Hot Violet
 256   2  16  64  10  18  Fire Ball
 288   3   7  48  14  12  J.B.Crystal
 640   3   6  40  16   8  Wind Walker
 448   2   8  56   6  12  Sly Joker
 256   8  16  72   8  16  The Stingray
 112   1  16  80   4  14  Silver Thunder
 496   1   4  48  12   7  Falcon Mk-II
 240   1   8  54  14  10  Fighting Comet
 480   4   2  96   2  16  Jet Vermilion
Memory
She/Her
Site Admin, Skilled player (1552)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
Got a 23"46 by tweaking the end a fair amount. I'll investigate the movement immediately after the last bump a fair bit and then I'll move on.
FatRatKnight wrote:
I'm starting to wonder if I should pioneer the rest of the tracks. Basically produce some mid-level TAS of each track as a baseline. If the game is as sync stable as I make it out to be, then it should all be fine once we copy the inputs together. I have a bunch of unknown numbers I've extracted for each machine, if you feel like making some guesses. Not sure where else to put them, so I chose here.
If you want to, then sure go ahead! Not sure which they could mean yet and honestly I'm still not sure if I'll bother trying to figure them out. EDIT: Forgot to mention, this game's ingame timer seems to record subframe differences in times, and it does so fairly accurately. Despite triggering the lap time popup on the same frame, I got two different times recorded through some slight differences in speed. This means that the ingame timer is very much ideal to be optimizing for since it is actually more precise than frame count!
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Editor, Skilled player (1198)
Joined: 9/27/2008
Posts: 1085
Made a start into Knight Master. It's not a very good start right now, but apparently the game doesn't restrict CPU from spawning right under another one. I suggest looking at the end of this lap with the script running, so you can see what happened in the Rival Radar. So, manipulating CPUs is important. I'm trying to figure out how I would go about analyzing it. At some points, I noticed driving in a certain way prevented a rival from spawning at all. And of course, the mechanics of how to get awesome bumps to begin with. If there's any good ideas to pursue, I might want to put effort into that.
Memory
She/Her
Site Admin, Skilled player (1552)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
Damn just as I was starting to get some momentum on TAS progress too. Might want to put progress on hold until CPU spawns get figured out. Here's my best lap 1 of P1 btw if you want to take a quick look at it to see if I missed anything obvious: User movie #40691377891651341 EDIT: If I had to take a guess though I'd bet it's at least partially based on hitting certain positions and when you do so from my limited testing so far.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Editor, Skilled player (1198)
Joined: 9/27/2008
Posts: 1085
There may also be a series of fixed locations the rivals may spawn in. In any case, we have need of more data, so continuing a TAS, perhaps with lower effort just to have a complete run sooner, may still be desired. On a side note, I did start my Knight 1 with input intended to help identify sync. I'm one frame short of a rocket start. I also pressed start one frame before the game would allow pausing. In copying input around, or perhaps just changing emulator versions, if a rocket start happens, our input is too early and we need to insert frames. If a pause happens, our input is late, and we need to delete frames. This way, we know exactly where to start the input with very little guessing.
Memory
She/Her
Site Admin, Skilled player (1552)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
I definitely do believe there are either fixed locations or at least patterns to the spawns. In a previous post I mentioned that a CPU would spawn in one of two different spots depending on what frame it spawned in. It alternated between those two spots after every frame of delay before the spawn. EDIT: Check out frame 2756 of my first lap. CPU spawn overlapping occurred there too. My bump probably wouldn't have worked as well without it. From talking with someone on the FZC discord, I think SNES and the GBA games share some code, apparently SNES has the same floating glitch that this game does and a bunch of other mechanics are surprisingly similar. They had to say the following about CPUs:
Catador - Today at 12:09 PM If it's anything like the SNES version, the CPU cars will only change when they're in front of you (and offscreen) at least 2 ranks and they advance a lap segment OR when a CPU is 2 or more ranks behind you (and offscreen) and you advance a lap segment(edited) MemoryTAS - Today at 12:10 PM What do you mean change? Which CPU car? Catador - Today at 12:10 PM One despawns for another one to spawn MemoryTAS - Today at 12:11 PM How many total can spawn in F-Zero SNES At a time Catador - Today at 12:12 PM The SNES can keep track of 6 cars at a time(including player), but the sixth car is only used for the AI car that plays as you when finishing a race So technically, 5 cars at a time MemoryTAS - Today at 12:13 PM Are ranks like first etc? Catador - Today at 12:15 PM Yes, there are two "stacks", one for unloaded cars in front of the player and another for cars unloaded behind the player MemoryTAS - Today at 12:15 PM I see How consistent are the changes? Catador - Today at 12:16 PM What do you mean MemoryTAS - Today at 12:16 PM Say golden fox is 2 ranks behind you and offscreen when you advance a lap segment On this one frame it moves back a rank If you were to advance the lap segment on a different frame would it also move back a rank Assuming that's what you mean Catador - Today at 12:18 PM I'm not really sure what would happen MemoryTAS - Today at 12:18 PM I see Catador - Today at 12:19 PM I still have to look if the cars change when they advance a lap segment while (2?) or more ranks behind Or if its just the player advancing I'd guess it's only the player(edited)
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Memory
She/Her
Site Admin, Skilled player (1552)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
Progress on lap 2: bk2 Link to video Not done working on it yet, but I've beaten the training mode record's lap 2 by a fair margin AND I got an insane +56km/h bump towards the end off a yellow car.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Memory
She/Her
Site Admin, Skilled player (1552)
Joined: 3/20/2014
Posts: 1765
Location: Dumpster
Link to video Getting that bump after the dirt patch is very important so I'm basically unable to change the beginning much anymore. I'll probably move on to lap 3 soon.
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero