1 2
9 10 11
27 28
Joined: 10/24/2005
Posts: 1080
Location: San Jose
flagitious wrote:
Nitsuja, I'm just curious, how does the save state contain the movie file without being nearly as large as the movie file?
This may not be of importance, but the movie files generally compress extremely well using something like winzip or winrar. Maybe some compression algorithm is used?
<agill> banana banana banana terracotta pie! <Shinryuu> ho-la terracotta barba-ra anal-o~
Player (206)
Joined: 5/29/2004
Posts: 5712
Oh, New Boosting Techniques.
put yourself in my rocketpack if that poochie is one outrageous dude
Emulator Coder, Skilled player (1310)
Joined: 12/21/2004
Posts: 2687
Wow, I didn't even know there were old boosting techniques. It's looking like a really good TAS of this game would be more insane than I'd imagined.
flagitious wrote:
Nitsuja, I'm just curious, how does the save state contain the movie file without being nearly as large as the movie file?
Snes9x savestates are compressed. (With gzip, I believe.)
Joined: 10/24/2005
Posts: 1080
Location: San Jose
nitsuja wrote:
Snes9x savestates are compressed. (With gzip, I believe.)
HAH, I knew it!
<agill> banana banana banana terracotta pie! <Shinryuu> ho-la terracotta barba-ra anal-o~
Player (206)
Joined: 5/29/2004
Posts: 5712
You've solved the mystery, Scooby-Doo!
put yourself in my rocketpack if that poochie is one outrageous dude
Former player
Joined: 3/23/2006
Posts: 211
flagitious wrote:
Nitsuja, I'm just curious, how does the save state contain the movie file without being nearly as large as the movie file? Huffers: even if its not as fast as the WR I'd still be curious what your time was, to compare it to the non-NBT record. And again even if its not as fast as the non-NBT record its still quite an accomplishment considering you automated the whole thing and these records are close to perfect with 12+ years of people working on them.
Changing input every 4 frames, it did it in just under 1:02 -- which beat my 30% speed trail run (on which I did lots of reloading), but is nowhere near the record. But not only was my bot not using NBTs, it wasn't using 'old boosts' (hop, turn, skid, skid the other way, release R) either -- and it'll take me a while to figure out the optimal way to get those boosts, and maybe some major reprogramming.
do not forget to *ENJOY THE SAUCE*
Joined: 10/24/2005
Posts: 1080
Location: San Jose
Bag of Magic Food wrote:
You've solved the mystery, Scooby-Doo!
Huffers wrote:
flagitious wrote:
But not only was my bot not using NBTs, it wasn't using 'old boosts' (hop, turn, skid, skid the other way, release R) either -- and it'll take me a while to figure out the optimal way to get those boosts, and maybe some major reprogramming.
RUH-ROH!
<agill> banana banana banana terracotta pie! <Shinryuu> ho-la terracotta barba-ra anal-o~
Joined: 6/1/2006
Posts: 64
Huh, so the powerslide boosts have been in since the beginning and were just undocumented (and perhaps unintentional?). Kinda like wall-jumping in the Mario series. (I wonder if wavedashing will become an official technique in Super Smash Bros Brawl?)
Player (201)
Joined: 7/6/2004
Posts: 511
It is not really like wall jumping, because wall jumping is an accident, a glitch. Whereas boosts are an intential feature.
g,o,p,i=1e4,a[10001];main(x){for(;p?g=g/x*p+a[p]*i+2*!o: 53^(printf("%.4d",o+g/i),p=i,o=g%i);a[p--]=g%x)x=p*2-1;}
Joined: 7/12/2005
Posts: 23
Location: Connecticut, USA
you know whats something funny to do, is whenever there is a ramp that you have to go over, like that one on that track (lol i cant remember the name of it, it was the one that has the turbo jump over the track before the left hand curve right before the finish), find the line that the comp goes on and put a banana peel or a shell right there infront of the turbo, so all they do is jump back over onto the road in the middle, totally skipping the turbo boost. its just kinda funny to see someone get all f'd up
Joined: 6/1/2006
Posts: 64
It doesn't seem clear to me that the boosts are intentional in SMK. There's nothing in the manual about it, and the way they behave looks like it could well be a glitch.
Joined: 4/23/2004
Posts: 150
Here is a link to the site for Non-NBT competition. (No offroad boosting allowed for these records.) http://www.mariokart64.com/smknonnbt/ SMK video site: http://timeofdeath.net/smkvideos.html Andreas
Former player
Joined: 3/23/2006
Posts: 211
hehe, I've found it's possible to get boosts on straights, without even changing the karts angle or losing any speed at all! - by wiggling the left and right buttons at approximately 15 Hz while holding R, and then letting go of R. Now the question is: can I use these boosts in conjunction with a feather to cross even longer gaps...
do not forget to *ENJOY THE SAUCE*
Joined: 6/20/2006
Posts: 142
Nice find, how will you change your bot to constantly do that while also pathfinding?
Former player
Joined: 3/23/2006
Posts: 211
I have some ideas... but I want to investigate these boosts a bit more until I'm confident I've worked out the best way to get the most from them, before I go back and modify my bot to play better.
do not forget to *ENJOY THE SAUCE*
Joined: 1/1/2022
Posts: 1716
Huffers, did you disable video output during the bot search, in order to save computation time ? I'd be curious to see your time-zones for Mario Circuit 1, if you have any picture of them ... And yeah, great job to have a bot up and running in the first place !
Former player
Joined: 3/23/2006
Posts: 211
chester wrote:
Huffers, did you disable video output during the bot search, in order to save computation time ? I'd be curious to see your time-zones for Mario Circuit 1, if you have any picture of them ... And yeah, great job to have a bot up and running in the first place !
thanks :) Yep, I disabled video and sound output (but left it in as an option, for debugging), but it draws every 500th frame it does so I can see roughly how far it's up to and it hasn't got stuck or anything. There isn't much point in posting the old quadralaterals I worked out, since I'm going to change them completely when I know more about these boosts (and its a hassle because the computer they're saved on isn't connected to the net atm). Oh, and feathers don't interfere with the boosts - extra long jumps ahoy! :) Now just to work out if mushrooms interfere with them, and how to best do off-road boosts....
do not forget to *ENJOY THE SAUCE*
Former player
Joined: 5/20/2004
Posts: 118
Location: Over there!
I just did a bit of experimentation with boosting, and here's what I came up with: 1. Hold Left/Right and L/R for 65 frames. You can freely switch directions provided that there are no frames in between. Hitting Left and Right in alternate frames down a straight works, and switching between L and R lets you hop whilst charging the boost (9 frames during a hop seem to be ignored for boosting purposes). 2. You don't need to hold anything any more. The boost will be stored for as long as you're either turning or drifting sideways. You can keep it stored like this for as long as you like; even whilst jumping around and bouncing off things. 3. Straighten yourself up and you'll get a boost. If you straighten whilst in the air, you'll get it upon landing. Note that boosts are interrupted by L/R, so make sure you release them in time.
Blah!
Former player
Joined: 3/23/2006
Posts: 211
Thanks for the help, SprintGod :) I think I now know enough to start changing the bot and its routes (although I'll have to do some more experiments later on - e.g. does snow behave the same way as dirt?) Here's a summary of what I know about SMK's physics (or am at least pretty sure of):
    Accelerate moves you in the direction the screen is facing, not the direction the kart is drawn as facing. The kart's handling is completely unaffected by being in midair. Turning left or right causes the kart to move in the opposite direction, up to a point. Moving at high speeds exaggerates this effect, and holding L or R greatly exaggerates it.
      L/R have this effect whether the kart is in air or not -- the hop the kart does when L or R is pressed down doesn't affect the handling.
    Skidding does not slow the kart down, nor does it slow the kart's acceleration. Driving over dirt without pressing accelerate causes the kart to deccellerate slower, but will eventually slow the kart to a halt. For every frame while one of {L or R} and one of {right or left} are held down, a 'boost' is charged.
      releasing L/R or right/left destroys the boost-charge You may swap right or left without destroying the boost-charge, so long as at least one is held down each frame. Driving onto dirt destroys the boost-charge. Using a feather destroys the boost-charge. Over-charging may make 'skidding-out' while skidding happen sooner. How charged the boost is doesn't affect how fast or long the boost is. It's all or nothing.
        To use the boost (when sufficiently charged), release L/R. the boost will then happen as soon as the kart straightens out, isn't moving sideways, and left/right aren't pressed. Pressing L or R during the boost will stop the boost. Driving over dirt won't stop the boost. Using a feather during the boost won't stop the boost.
      Swapping which of L/R is being held during charging causes the kart to hop
        after the hop starts the boost-charge will continue to build with or without L/R being held. after the hop starts the boost-charge won't dissappear if left/right aren't pressed every frame you may hop again without losing the boost charge. if the kart straightens out, isn't moving sideways, left/right aren't being pressed, and L/R aren't being pressed the boost happens. the same as above, but L/R are pressed then the boost-charge is just lost. If the kart is straightened, not moving sideways and left/right + L/R are released in mid-air, then the boost happens immediately upon landing -- even if the kart lands in dirt.
I'm not sure how long you have to charge the boost for, or what affects how quickly it charges. But I don't think this is too important. Edit: A lot of the above is a load of crap, see below for better information
do not forget to *ENJOY THE SAUCE*
Joined: 6/1/2006
Posts: 64
You know, this might make a decent distributed computing problem... If we can host a "current best" somewhere for each track (with the timezone data that generated it) we could then make clients that downloaded that data, mutated it, then uploaded the "solution" to that set of zones if it beat the current best time. The server could fairly easily verify that the set of inputs resulted in a faster time than the current record. It'd be pretty awesome to have a "bot brute-forcing Mario Kart" screensaver. The concept of sort of the "ultimate" tool-assistance - a bunch of computers trying to find the absolute best time for a game with little to no human intervention - rather appeals to me.
Joined: 6/20/2006
Posts: 142
Is there a value in memory that changes when a boost is ready? That would make things real easy. =) Can you start charging a new boost as soon as the old boost is released? That is, charging the frame after boosting...Hope that made sense.
Joined: 10/24/2005
Posts: 1080
Location: San Jose
NMcCoy wrote:
You know, this might make a decent distributed computing problem... If we can host a "current best" somewhere for each track (with the timezone data that generated it) we could then make clients that downloaded that data, mutated it, then uploaded the "solution" to that set of zones if it beat the current best time. The server could fairly easily verify that the set of inputs resulted in a faster time than the current record. It'd be pretty awesome to have a "bot brute-forcing Mario Kart" screensaver. The concept of sort of the "ultimate" tool-assistance - a bunch of computers trying to find the absolute best time for a game with little to no human intervention - rather appeals to me.
It seems that the number of choices on where to go (based on what huffers is doing) is quite small. Small enough to be computed overnight. A true perfect playthrough, of a game without well defined boundaries (such as Super Mario Bros) would probably take on orders of 1000s of years if not more, even with significant pruning with every computer devoting its processing power. I believe Bisqwit showed this a while back. But a distributed computing grid would be awesome. I'm just not sure if I would abandon folding for a long time. It would probably be a bitch to code, too.
<agill> banana banana banana terracotta pie! <Shinryuu> ho-la terracotta barba-ra anal-o~
Joined: 6/1/2006
Posts: 64
I wasn't suggesting we try to apply this method to anything other than Mariokart. This does give me another idea for a more general tool, though - A "conditional input" bot that works in parallel with user input, so you could make it do things like "press A whenever this memory value is less than 32" or even "keep a running 5-frame 'ring' of savestates, and when my character's hit recovery timer is nonzero then rewind two frames and repeat those frames' input except with the shield button held".
SXL
Joined: 2/7/2005
Posts: 571
didn't Luke code such a conditional bot on his FCEU mod ? the bot seemed to be hard to be used by anyboby but him (since there is very little doc), but it understood a very basic programming language. I'm not sure it would be very useful here though. the smk bot is supposed to find the best conditions by brute-force ; human help could only support it a little, and it could miss inhuman moves. I'm thinking of Bisqwit's Megaman 1 bot, which did find things that no human could have ever thought about. even if no distributed client is set, it'd still be cool for some people interested here, to test the bot, and watch the results (even if they are still far from the World Human Records). btw, does the movie saving works, Huffers ? it should since they are stored in savestates, due to bulletproof recording. could you show us some examples of what the bot achieves at the moment ?
I never sleep, 'cause sleep is the cousin of death - NAS
Former player
Joined: 3/23/2006
Posts: 211
DK64_MASTER wrote:
But a distributed computing grid would be awesome. ... It would probably be a bitch to code, too.
Yep, thats the reason I'm not doing it :)
AzHP wrote:
Is there a value in memory that changes when a boost is ready? That would make things real easy. =)
I've been looking for it. No luck yet :( I have found the game records how many frames L/R and left/right have both been pressed in a row, but it doesn't reset this value when the kart hits dirt, but I'm almost certain the boost charge is reset when this happens.
AzHP wrote:
Can you start charging a new boost as soon as the old boost is released? That is, charging the frame after boosting...Hope that made sense.
Pressing L or R during a boost stops the boost, so it's best to start charging again exactly when the boost hits its peak (it drops off rapidly then anyway).
SXL wrote:
btw, does the movie saving works, Huffers ? it should since they are stored in savestates, due to bulletproof recording. could you show us some examples of what the bot achieves at the moment ?
Erm... how do I extract the movie file from the savestate?
do not forget to *ENJOY THE SAUCE*
1 2
9 10 11
27 28