Player (80)
Joined: 8/5/2007
Posts: 865
Well, after giving up during the planning stages of my Cool Spot run (route planning is not fun!), I'm back to attempt a more linear game: Skitchin'. I was going to surprise everyone with a finished run, but I decided that I'm better off doing this right and getting it accepted than finding out after nominating it that I made some boneheaded mistake. First things first, here's a little demo video of the first three levels: http://www.youtube.com/watch?v=Bcga3UJn5xk As you can see, I plan on using warps in this run, which should cut down on time significantly. That video is not in any way the finished product-- I threw it together in about two hours. What you should get from the video is roughly how I intend to play the game. Please tell me if you think the run is not entertaining enough to be published; I don't want to pour hours and hours of effort into something that will be shot down. If you're not familiar with the game, here's a typical playthrough by a skilled player: http://www.youtube.com/watch?v=8uqeXUHH_hc Basically, the final video should be about 20 minutes of jumping around like that. Personally, I think what I have so far is fairly entertaining, but I can see how it might get repetitive after a while, especially in such a linear game. There are a few other questions I need answered: •The filename for my ROM is "Skitchin (UEJ) [!].smd". Is this the best version? The articles indicated that it is, but I want to be 100% sure. •At the start of the video, during the "WARNING" screen, I enter B-A-down-A-Start-Start. This is technically a cheat code, but it only allows the player to input special passwords and does not affect gameplay on its own. The only reason I use it is that it makes the warning screen go away more quickly (normally it stays up for about five seconds). Is this okay? I know, for example, there are runs of Metroid that use a suitless code. •Bonus levels are a pain. For example, Vancouver has a speed bonus level that I can avoid if I complete the course in over 2:35 or so. I don't want to do that for many reasons. In fact, it seems to be faster to finish Vancouver as quickly as possible and to play the bonus level as well, as opposed to racing more slowly to avoid it. Even if it is faster to skip the bonus level, I can pick up two nitro canisters there, so I'm pretty sure it pays to play it. Anyway, that's all beside the point. In my final run, I may need to play a bonus level when it would be faster to skip it by racing more slowly. Should I play it this way? I figure it's analogous to Sonic runs where they go as fast as possible despite the fact that it takes longer for the score to tally at the end of the level. Would I need to declare that my run has speed/entertainment tradeoffs? I don't know if this is bad etiquette, but I'm going to create separate posts documenting my progress so far. Any feedback or answers would be greatly appreciated! Thanks in advance!
Player (80)
Joined: 8/5/2007
Posts: 865
Warps and Long-Term Route Planning Testing the game, I found the following warps: Vancouver: None Denver: San Diego San Diego: Vancouver Seattle: Washington San Francisco: Seattle Los Angeles: Toronto Washington: Los Angeles Toronto: None Detroit: Washington Chicago: Miami Miami: Detroit New York: None As far as I'm aware, there is no more than one warp per level, although I'm a little nervous about that. If I overlook a warp that bypasses several levels, I could end up wasting a lot of time on a run that should be much shorter. I'm also a little shaky about Toronto. It's kind of weird seeing nine other levels that all have warps while Toronto doesn't have one. I checked it pretty thoroughly, though. I'm also pretty certain about Vancouver and New York. If anyone else is familiar with this game and knows a warp or two that I've omitted, please let me know. This means the fastest route is... Vancouver -> Denver -(warp)> San Diego -> Seattle -(warp)> Washington -(warp)> Los Angeles -(warp)> Toronto -> Detroit -> Chicago -(warp)> Miami -> New York Take note of that warp from Washington back to Los Angeles, then from Los Angeles to Toronto. Not only is it shorter in distance than beating Washington, but it also cuts out the camera zoom at the end of the level and wading through the stat screen and menus. I even did some basic testing and found the warp back to Los Angeles to be about 800 frames faster. I hope that's consistent with the results in the finished product. I will have to complete five levels (Vancouver, San Diego, Toronto, Detroit, Miami, and New York) and warp five times. Even though I will use warps, I will still play 11 out of 12 levels! Handy Addresses I did some RAM searching and came up with some useful addresses. In addition to each address, I also say how many bytes it is and whether it is signed or unsigned. For example, I list the player distance as 00FF0736,2U, signifying that it's at address 00FF0736 and is two bytes, unsigned. 00FF0736,2U - Player distance (how far through the level you are) 00FF0768,1U - Speed (that's forward speed) 00FF0748,2S - Horizontal position 00FF1541,1S - Horizontal velocity 00FF074A,1U - Altitude 00FF0F0C,2U - Vehicle 1 position 00FF0F8E,2U - Vehicle 2 position 00FF1010,2U - Vehicle 3 position 00FF1092,2U - Vehicle 4 position 00FF1114,2U - Vehicle 5 position 00FF1196,2U - Vehicle 6 position 00FF0F24,1U - Vehicle 1 speed 00FF0FA6,1U - Vehicle 2 speed 00FF1028,1U - Vehicle 3 speed 00FF10AA,1U - Vehicle 4 speed 00FF112C,1U - Vehicle 5 speed 00FF11AE,1U - Vehicle 6 speed 00FF0F45,1U - Vehicle 1 model 00FF0FC7,1U - Vehicle 2 model 00FF1049,1U - Vehicle 3 model 00FF10CB,1U - Vehicle 4 model 00FF114D,1U - Vehicle 5 model 00FF11CF,1U - Vehicle 6 model I also have addresses for: an alternate player distance, the camera distance, two alternate horizontal positions, an alternate altitude, something that appears to be your airtime, alternate vehicle positions, and a terrain indicator. The maximum speed is 125 units and the maximum horizontal velocity is 16 units (or -16 units to the left). Only six vehicles can be in play at any given time. Vehicle positions and speeds are in the same units as player position and speed. The vehicle model numbers seem to have some redundancies. For example, both compacts and jeeps in Vancouver are given by 68. Fortunately, this isn't very important. A vehicle will spawn about 15 units behind the player and drive until it gets about 30 units ahead, then it stalls (in case the player catches up), then respawns as a random model. Vehicles cannot spawn in front of a player, so if you're going faster than about 50 speed units, nothing will get in your way. The drawback to this is that I don't get to use those addresses as often as I expected! Level Maps I wanted to make sure I was thinking one or two obstacles in advance, so I used the player position addresses to make maps of the levels. I've made complete maps of Vancouver, Denver (even though I warp out!), and San Diego. As an example, I'll share my Vancouver map. The first number is the distance along the course and the second number is the horizontal position. Vancouver Oil - 214/139 Ramp - 247/210 CB Ramp - 296/216 Pipe -368/192 SL Ramp - 410/304 Gravel - 428/70 Crowbar - 510/212 Ramp - 558/210 Crowbar - 644/219 CB Ramp - 687/227 Bench - 729/363 SL Ramp - 761/285 Bench - 804/463 Nitro - 835/-632 Gravel - 841/91 SL Ramp - 865/321 Pipe - 951/183 Trash cans - 961/245 Bench - 964/410 Trash cans - 977/122 Trash cans - 995/260 Ramp - 1074/230 Ramp - 1150/222 Oil - 1165/142 Crowbar - 1270/191 Ramp - 1322/224 Gravel - 1344/-113 Crowbar - 1495/199 Ramp - 1525/209 Tips for Playing Nitro boosts are key. Each boost increases your speed by about 60 units. Ramps also boost your speed. A typical jump will increase your speed by about eight units. In my little demo video, I neglected to consider how you land. After certain tricks (left, right, or diagonal buttons), the character takes a few frames standing back up (although it seems you can alter your horizontal velocity during these frames). It may even be faster to do no trick at all (but I hope not, since doing tricks will be one of the more entertaining aspects of my run). Your speed does not decrease while you are in the air but it decreases by about 4 units per second while on pavement. To maintain speed, press (or hold) up+B+C. This is a semi-secret jump move that is much higher and lasts longer than the standard jump. When you land, you lose just one or two speed units provided you go directly into another jump. Occasionally, a standard jump is preferable (so that you don't jump past a ramp or item). Top speed when holding B is 37 units. You can accelerate past this by ducking on a downward-sloping road, although I haven't looked into this much. When you skitch a car, you immediately take that car's speed. You can slingshot off a car by holding B while moving past the edge of its bumper. This boosts your speed by about eight units, although it seems to vary (perhaps depending on the road's contour). I would like to find a RAM address that says whether the road is sloping up or down. I also wish I knew how the road twists and the mechanics of how far you're flung as you turn a corner, but I'm not hopeful I'll find anything. There are tons more details on how to play the game (such as weapon strength and how obstacles affect you) that are totally irrelevant to this run.
Player (80)
Joined: 8/5/2007
Posts: 865
Notes on My Demo Video My demo video has some errors and quirks that should be discussed or explained. The number I list is the time on the Youtube video. 0:12 - I enter the B-A-Down-A-Start-Start (BADASS) code. This skips the warning screen but has no effect on the game. 0:24 - I use the default name, Blader 1. I suppose I could add my own stamp to it, but you know who I am anyway. 0:33 - I stick out my arm to skitch early. The idea is to get the speed boost as early as possible. I figure it's worth it to go faster even if you lag behind initially since going fast means hitting ramps more often, which means going even faster. In the final version, I won't stick my arm out until I'm ready to skitch and I'll make sure I go no faster than I need to. 0:44 - The first of many up+B+C jumps. 0:46 - You'll see a lot of backflips in this video. Backflips are my favorite trick when playing the game normally because they pay well and are easy to pull off. I plan on mixing it up as much as I can in the final run. 0:59 - I think I landed in the grass. Oops! I'll be sure to clean up stuff like that. Unfortunately, landing on the pavement after doing a trick off a speed limit sign is extremely difficult because they're on the right side of the road and you need to conjure up some momentum to the left. 1:23 - I do this spinning trick (I can't remember the trick names) because I wanted to move left, but it doesn't do any good (your horizontal velocity does not change after you leave the ground). As a consequence, I lose a few frames standing back up. I haven't yet checked, but I think my speed drops in that time. If that's the case, I'll stick to flips and A, B, and C tricks. 1:27 - The only nitro in this level is way off in the grass, so it's a pain to pick up. You can see in the following seconds that it's still well worth it. 1:34 - From this point on, my speed is always above 90 and usually above 100. I guess it could be even faster if I didn't spin. 1:58 - I skip this ramp and do a normal jump because any time spent in the air after crossing the finish line is essentially wasted. Also, skidding to a stop takes longer if you go faster, so the level ends faster if you're going slower. If I want to minimize in-game time, I should take that ramp. Any suggestions on whether to take the ramp or not are more than welcome. 2:15 - Because I beat Vancouver in under 2:35, I play the speed bonus level. This may cost some time, but the advantage is that I pick up two nitros. I could waste time in Vancouver and skip the bonus level, but even if it's faster (which I don't believe), it would be a lot less entertaining. 2:26 - In speed bonus levels, whenever you skitch a car in one lane, cars in the other lane go much faster. That's why I switch back and forth a few times here. The slingshotting here alone brings me up to a speed of over 80. 2:38 - This nitro brings me up to the max speed of 125. I suppose I could beat the bonus level by slingshotting some more and save all three nitros, but I think this one is well-spent. I'll be sure to look ahead in my route planning in case that nitro could be better used later on. 2:47 - I switch weapons because you can't do the up+B+C jump if you're holding a nitro canister. In the final version, I'll be more prescient about changing weapons. 3:27 - I figured it pays to skitch this car and get my speed as high as possible before using the nitro. Now I'm not so sure. I'll have to play this level again and test how long it takes to reach the warp if I get up to top speed with my legs. Also, if skitching is faster, I should skitch a narrow car so I don't end up in the grass after slingshotting (I don't think it affected my speed, but I don't even want to worry about it). 3:41 - Ideally, I'd hit that warp on the way down so I don't slow down in the grass, but this will do. If you go off the speed limit sign, you'll sail right over the warp. Also, I don't skip the warp screen as fast as I should because I forgot you could before I saved. 3:44 - Warping really helps by starting you off at full speed (37 units) and a bit ahead of where you would normally. I could slow down and skitch a car, but I figure it makes more sense to blast ahead with the nitro. 4:05 - I miss this speed limit sign, which is a shame. To hit it, I'd have to get over the the right side and get a fair bit of momentum to the left to account for that nasty turn. I'll try harder to hit it in my real run, but I don't think it's possible without losing too much speed. If I'm not mistaken, it's the only jump I miss in this level. 4:28 - Nothing much to see here, but I'd like to direct your attention to the rear-view mirror. That's rubber band AI in full effect! By my calculation, I'm going about 230 miles per hour but I just can't shake that guy! All right, that just about covers everything! I'd be happy to address any additional critiques you have concerning my demo, since I can use that to improve the real deal.
Skilled player (1514)
Joined: 4/28/2005
Posts: 240
Location: Finland
The filename for my ROM is "Skitchin (UEJ) [!].smd". Is this the best version?
This is as good as (U)[!] if you ask me. This site has some games played on Japanese versions also, as they might be faster.
At the start of the video, during the "WARNING" screen, I enter B-A-down-A-Start-Start. This is technically a cheat code, but it only allows the player to input special passwords and does not affect gameplay on its own. The only reason I use it is that it makes the warning screen go away more quickly (normally it stays up for about five seconds). Is this okay?
Fine by me.
I don't know if this is bad etiquette, but I'm going to create separate posts documenting my progress so far.
Not bad, as far as I know. I think it's more clear that way. As for bonus rounds, it's your decision, but I would play as fast as possible even if it means you have to do bonus rounds. It's a bit early but i would like your speed displayed on screen with LUA script :)
Projects: Warlock, Ren & Stimpy (impr) / Generations Lost (impr.)
adelikat
He/Him
Emulator Coder, Site Developer, Site Owner, Expert player (3576)
Joined: 11/3/2004
Posts: 4754
Location: Tennessee
maTO wrote:
The filename for my ROM is "Skitchin (UEJ) [!].smd". Is this the best version?
This is as good as (U)[!] if you ask me. This site has some games played on Japanese versions also, as they might be faster.
JUE is as good as U. No problems here.
At the start of the video, during the "WARNING" screen, I enter B-A-down-A-Start-Start. This is technically a cheat code, but it only allows the player to input special passwords and does not affect gameplay on its own. The only reason I use it is that it makes the warning screen go away more quickly (normally it stays up for about five seconds). Is this okay?
Fine by me.
Fine by me too. This movie doesn't seem like a genre that would normally be publishable. However, I did enjoy watching your WIPs. I say keep going with it.
It's hard to look this good. My TAS projects
Experienced player (829)
Joined: 11/18/2006
Posts: 2426
Location: Back where I belong
I haven't seen this game before, but it looks like they just recycled about 75% of the code for roadrash 2, which isn't really a bad thing, when I think about it. My only request is that you T-Bone a crossing car right before the finish line a couple times, so that your battered body can go flying over the line in style.
Living Well Is The Best Revenge My Personal Page
arflech
He/Him
Joined: 5/3/2008
Posts: 1120
When I was a kid I seriously considered doing this IRL once I became good enough at skating but I never got that good
i imgur com/QiCaaH8 png
Player (80)
Joined: 8/5/2007
Posts: 865
Thank you all for your prompt replies!
maTO wrote:
As for bonus rounds, it's your decision, but I would play as fast as possible even if it means you have to do bonus rounds.
I agree. Bonus levels are full of nitros anyway, so I think it'll be worth it. I'm still trying to decide if I should aim for fastest in-game time, which would mean taking a jump at the end of a level, or fastest realtime, which means going as slow as possible over the finish line.
maTO wrote:
It's a bit early but i would like your speed displayed on screen with LUA script :)
Done and done! I've never scripted in Lua before, but cannibalizing the included Sonic speedometer was a piece of cake.
adelikat wrote:
This movie doesn't seem like a genre that would normally be publishable. However, I did enjoy watching your WIPs. I say keep going with it.
I'm a little concerned about your reservations, but the bottom line is that if I have adelikat's blessings, I will move forward with this TAS.
mmbossman wrote:
My only request is that you T-Bone a crossing car right before the finish line a couple times, so that your battered body can go flying over the line in style.
You got it! I tested it on that car in San Diego and didn't notice any frames lost compared with jumping over it.
mmbossman wrote:
I haven't seen this game before, but it looks like they just recycled about 75% of the code for roadrash 2, which isn't really a bad thing, when I think about it.
I never had the fortune to play Road Rash 1 or 2, but looking at Youtube videos, it seems you are right. Skitchin' had the benefit of its predecessors, but I think the gameplay is more nuanced than Road Rash. I wish my TAS could demonstrate all the fun crap you can do.
arflech wrote:
When I was a kid I seriously considered doing this IRL once I became good enough at skating
These dolts obviously didn't read the warning screen: http://www.youtube.com/watch?v=ikOznkfTPzk The next order of business will be for me to map the start of Seattle. I'm hoping there's a nitro I can pick up since I don't want to go into Washington without one. If I can't get a nitro in Seattle, I'm going to have to save all three from the speed bonus round in Vancouver. After that, it's a little bit more testing: I want to see how recovering after a trick affects your speed, whether I should skitch the first car in Denver, and perhaps look at how the speed boost after slingshotting varies. Once that's out of the way, I think I can begin. In the meantime, I have two questions about Gens that have been bugging me: •What codec should I use for video recording? The articles suggested ffdshow, but that just gave me an error. For my demo video, I think I ended up going with XVid, but the video was almost 100 MB! Is there another codec I can use, or should I just try to make ffdshow work? •Can you turn off frame-advance mode? I looked, but I didn't find anything.
Skilled player (1514)
Joined: 4/28/2005
Posts: 240
Location: Finland
Bobo the King wrote:
In the meantime, I have two questions about Gens that have been bugging me: •What codec should I use for video recording? The articles suggested ffdshow, but that just gave me an error. For my demo video, I think I ended up going with XVid, but the video was almost 100 MB! Is there another codec I can use, or should I just try to make ffdshow work? •Can you turn off frame-advance mode? I looked, but I didn't find anything.
For YouTube you don't have to worry about file size. There was that 100 MB rule at some point but not anymore. Frame-advance mode? You mean unchecking 'Slow mode enabled' or hot-keying toggle slow mode button ?
Projects: Warlock, Ren & Stimpy (impr) / Generations Lost (impr.)
arflech
He/Him
Joined: 5/3/2008
Posts: 1120
Bobo the King wrote:
arflech wrote:
When I was a kid I seriously considered doing this IRL once I became good enough at skating
These dolts obviously didn't read the warning screen: http://www.youtube.com/watch?v=ikOznkfTPzk
I'm surprised that this report from 2007 mentioned a 22-year-old movie but not the 13-year-old video game: http://www.youtube.com/watch?v=BwFVdT87Lsc
i imgur com/QiCaaH8 png
Player (80)
Joined: 8/5/2007
Posts: 865
maTO wrote:
For YouTube you don't have to worry about file size. There was that 100 MB rule at some point but not anymore.
I'm not so much worried about Youtube as I am about video quality. From my first upload, it seems Youtube recompressed the video and it suffered a hit in quality. I'm hoping to avoid that. Edit: And uploading. Uploading large files is a bit of a pain.
maTO wrote:
Frame-advance mode? You mean unchecking 'Slow mode enabled' or hot-keying toggle slow mode button ?
Actually, I just figured it out. When you press backslash, it advances the emulation by one frame, but I couldn't get it to play again at normal speed after that. It looks like you just press escape and it's back to normal.
Player (80)
Joined: 8/5/2007
Posts: 865
All right, I think we're in business! I wasted a lot of time today playing Toronto, Detroit, and Miami. It turns out there are speed bonuses in Toronto and Miami, which is a shame, since the later levels are already loaded with nitros. The good news is that the second half of this run should be really fast. I also found out that the road rises and dips more than I thought. In a number of areas, you cannot land an up+B+C jump (you hit the ground before your legs straighten and you wipe out) and in some places, you can't even do a regular jump! I'd like to find where the road's contour is stored in the RAM, but I'm not sure what I'd do with that information since it should only make a difference when I'm using my legs or perhaps skitching. Since most of the run will be completed with nitros and jumping, it shouldn't make much difference. I checked the beginning of Seattle for a nitro and found nothing. Washington's first nitro can be reached quickly by using a nitro at the beginning. Lastly, I finished Vancouver's bonus level without using a nitro to determine how much time is lost. In summary, not using a nitro in Vancouver bonus costs 130 frames while using a nitro to start Washington saves at least 450 frames (probably many more). This means I should save all three nitros in the Vancouver bonus track and use them at the starts of Seattle and Washington. Once I reach Washington, I should be in the clear since it has four or five nitros. I think it's rather funny-- rationing nitros when they're scarce is very easy. You generally use them at the start of the level. Apportioning them when they're plentiful is going to be tricky. I honestly expect to have so many nitros that I won't know what to do with them and I may even skip some that are somewhat out of the way. It's better to start Denver with your legs than skitching. If you use a nitro when you reach top speed, it runs out right as you hit a ramp. From there, it's just a couple of jumps and you hit another ramp, then you can go to the warp. I discovered that top speed (under leg power) changes from level to level. I was concerned that it depends on your equipment (wheels and/or skates), but I checked this and there's no dependency. Speaking of which, remind me to buy new wheels halfway through this run. I'll almost certainly need them before the big Seattle to Washington to Los Angeles to Toronto run. It would be extremely embarrassing if I get all the way to Toronto and then wipe out halfway through the course because I forgot to replace my wheels. I can just see it now and it sends shivers up my spine... (Perhaps I should look for RAM addresses corresponding to equipment strength. Blech, more RAM searching.) Edit: Easiest RAM search ever! Wheel strength is stored at 00FF0000,2U (the first two bytes!). Skates, kneepads, elbow pads, wrist guards, and gloves are stored in 02, 04, 06, 08, and 0A respectively (also two bytes each). Player health is stored at 00FF077A,2U. Edit 2: Knowing the RAM address for the wheel strength, I re-ran my demo video. I discovered that in the first leg of the game (the first three levels), I consumed about 110 wheel health points out of 300 total in about 4500 distance units. The second leg (ending in Toronto) is about 4900 distance units. Furthermore, I also discovered that your wheels only deteriorate when they're in contact with the ground. This is good because I'll be jumping around a lot. The flip side, however, is that the second leg is loaded with nitros and since your wheels are in contact with the ground when you use a nitro, it chews them up. The question, ultimately, is whether my wheels will be in contact with the ground twice as much in the second leg as in the first. If not, then I can put off buying new wheels until after Toronto, probably saving a few seconds. If I can't get through the second leg, then I have two options. First, I could buy beginner wheels at the start. Beginner wheels are somewhat more durable and should safely last through Toronto. My other option is to buy wheels before Seattle. Seattle has standard class equipment, which is more durable. If standard equipment can get me through the rest of the game, then that's easily my best option. Testing shows that standard wheels are three times as durable as economy wheels, so I might just go with that. By far the most useful thing I discovered today is a frame counter (00FF01FB,1U). What good is a frame counter, you ask? Well, this game has a lower framerate than anime. There are about five or six "sub-frames" (frames incremented by the frame-advance button) for each "game frame" (in which the screen is re-rendered). This leads to a host of problems. The number of sub-frames for each game frame varies (in a typical level, it's usually five or six, but in bonus levels, it drops to three or four, probably because it doesn't have to render other skaters). This is important because pressing left or right changes your velocity by one unit per sub-frame (NOT game frame). The counter I discovered increments to some number (4 or 5), then resets to 0. When it changes from 0 to 1, it renders a new frame. What this means is that I can control my horizontal velocity extremely precisely, making the process tremendously easier. Now the TAS will consist of me choosing the right velocity, advancing until I'm ready to jump, then jumping directly to my next target. Much of the guesswork has been eliminated. It will also allow me to minimize my inputs; I won't have to hold up+B+C, I can just press it during the relevant frame. I think I'll be ready to run Vancouver either tonight or tomorrow. I'm pretty sure I have everything I need to know for a high-quality TAS.
Player (80)
Joined: 8/5/2007
Posts: 865
Well, shucks. I'm done with Vancouver and feeling pretty good about my progress but... I ran into a useful glitch. I was basically goofing off trying to get the first nitro in Vancouver bonus and I somehow picked up two. Now I don't know what to do. The easy thing would be to just keep going and accept it as a fluke, but I know that's not how things are generally done 'round here. What I should do is analyze the glitch, see if I can reproduce it, and if so, exploit it in Vancouver, then use it to my advantage throughout the run. I suppose there's no harm in spending at least a little time trying to figure out what happened. However, there's this piece of me that kind of hopes I can't reproduce it. First of all, I don't want to redo half of Vancouver, and second, I really don't need extra nitros all that much after Vancouver's bonus level. They'd help a bit in San Diego, but after that, I should have too many nitros as-is. If I can get extra nitros consistently, it will absolutely break the rest of the game and I'll never have any reason to get up from a crouch (except at the beginning of a level). Anyone have any thoughts? Incidentally, the glitch occurred when my velocity hit 88 units...
Player (80)
Joined: 8/5/2007
Posts: 865
I think you guys are long overdue for an update. I'll spare you the long introduction and just immediately post the youtube video of my progress so far: http://www.youtube.com/watch?v=07GoSvZIB-s And the GMV file, for those who prefer it: http://dehacked.2y.net/microstorage.php/info/729335123/speedrun2.gmv I think it's looking pretty good, but of course I want your opinions. Now on to the details of my progress... I was not able to reproduce the nitro glitch. It either requires a very particular speed and proximity that's virtually impossible to reproduce, or it depends on other factors that I haven't yet considered. If anyone else can make lightning strike twice (and then a third, fourth, and fifth time and so on), you can obliterate my speedrun. I updated my Lua script to add several features. Most notably, it looks into the future to see if a jump is possible from the current frame. This allows me to limit my inputs to only those frames where it makes a difference. Additionally, it reports my health and my skate integrity, neither of which should be of any use. This Lua script isn't used in the video I posted above, which instead uses the "lite" script, featuring only the speedometer. Speaking of the speedometer, the speed and distance variables are stored in 2 and 4 bytes respectively, not 1 and 2, as I initially thought. I kept just 1 and 2 in the Lua script because the extra digits are hardly significant and would just clutter up the screen, but I track all 2 and 4 bytes in the RAM Watch window for detailed portions of the run. I also found RAM addresses for the weapon slots as well as an address for the currently selected weapon. These help me switch weapons at the last possible moment before the end of a level. I wrote a very simple Matlab program that simulates levels based on when I use nitros. It's a very crude approximation, but it's still a lot better than guessing and I think that its results are at least decent (you can see it in action in Washington and I will use it for the rest of the run). Route planning is proving to be a pain since testing two different routes can mean going back and re-running half a level. For this reason, I quickly gave up on producing absolute perfection and instead am focusing on perfecting the input within my selected route (quite frankly, I think I'm doing a fine job at that!). Vancouver looks just a bit sloppy since I didn't quite know what I was doing back then. If I could go back, I would certainly pick up the nitro there more smoothly, but I think it's decent as-is. I'm confident the rest of the run is near perfect aside from the aforementioned route planning issues. I dread Detroit. Detroit has four nitros, but they're all in the first half of the level. Additionally, I'll start Detroit coming out of Toronto's speed bonus. I could have four or five discretionary nitros in the first half of the level (use 'em or lose 'em), followed by a significant drought where I need to hang onto one or two to save for Chicago. My next step will be to determine the fastest way though Toronto's speed bonus, then carefully plan Detroit with an eye on Chicago. After that, it'll still be tricky, but I'm confident Detroit will be the hardest level to run. Oh yeah, and my wheel situation is much better than I expected-- 160 units left as of the start of Toronto. I might be able to barely stretch it to the end, but it'll be damn close since there are five levels (four full levels) and two bonus levels left in the game. At the very least, I can put off purchasing new wheels until after Toronto and maybe even after Detroit or Miami. Anyway, I included a speedometer, as per maTO's request. I haven't had the opportunity to T-Bone any cars yet, but I trip over a bush in San Diego and suffer a bizarre hit in Vancouver's bonus. I'll keep working at it, mmbossman. Other than that, I'm leaving this open to discussion. If you don't think my run is entertaining, this is pretty much your last chance to say so since there isn't a whole lot of game left to play. If you do think my run is entertaining, please pipe in as well-- I could use the encouragement!
Joined: 11/9/2008
Posts: 108
Location: New Orleans, LA U.S.A.
i definately appreciate the hard work you are putting in, but i don't know if this will ever be as entertaining as nova's playthrough. just a side note, though, as they will be two completely different beasts. keep up the good work! EDIT:: Gotta say, after watching all of the playthrough and then watching your WIP again i liked it a LOT more the second time! don't be discouraged, the run looks aweseom!
__--N0ISE
Player (80)
Joined: 8/5/2007
Posts: 865
Latest progress (no youtube video this time, as I only completed Toronto through Detroit): http://dehacked.2y.net/microstorage.php/info/1905198446/speedrun2.gmv djchilxxn: Thank you for your support! These levels just get harder and harder to run but when I play them back, they look better every time! I only hope that more people share your admiration-- I want this published, damn it! By the way, when you said that Nova's playthrough is more entertaining, it got me thinking that maybe this would be a fun game for maximizing the bonus cash (the "score"). That would be done by getting first in each race, doing all the bonus levels, knocking down as many people as possible, and doing as many tricks as possible. It would essentially be a very impressive conventional playthrough of the game. The drawback is that it would probably take a lot longer, although I imagine it wouldn't require nearly so much optimization. If at least a few people show interest, I may shoot for a money-maximizing TAS. mmbossman: You got your T-bone! Check it out at the end of Toronto. I'll try to do more as they seem to save a little time. I was feeling a little overwhelmed by route planning: I had to use two, three, or four nitros in Toronto; zero, one, two, or three in Toronto bonus; and anywhere from three to six in Detroit. In addition, I had to make sure that I would have no more than three nitros at any given time and that I had at least one or two left over for the start of Chicago. I figured that the only way to see how many nitros I should use in Toronto and Toronto bonus would be to test them manually. Then I slapped myself on the forehead as I realized I had written this nifty Matlab program to simulate levels and I didn't have to use trial and error. I admit the Matlab program is far from perfect (I think its biggest flaw is that it doesn't take into account speed gained from jumps), however the idea is not to simulate the level times, but the difference between two level times due to a change in strategy. For the sake of thoroughness, here are my results: Toronto: 2 nitros (Matlab simulation) - 5337 frames 3 nitros (Matlab) - 4854 4 nitros (Matlab) - 4671 Toronto bonus: 0 nitros (existing TAS of Vancouver bonus) - 2540 1 nitro (emulation) - 2560 2 nitros (emulation) - 2193 3 nitros (emulation) - 2158 Since running the Toronto bonus level manually is very easy, I opted to get ideal approximations via emulation. You can see that using three nitros in Toronto saves about 500 frames as opposed to two nitros. Using four nitros in Toronto saves an additional 200 frames, but because I would then start Toronto bonus with no nitros on reserve, it then costs me about 400 frames. Clearly, the best strategy is to use three nitros in Toronto and two nitros in Toronto bonus, saving two for Detroit. If you download the .gmv file at the top of this post, you'll see that's exactly what I do (and with good results!). Detroit, as expected, was a pain. There is a nitro off in the grass, so picking it up was a pain in the ass to accomplish without losing too much time. Additionally, there are a few jumps that cannot be completed because of an obstruction just ahead of them. Nevertheless, I had to devote several attempts to verify that. It's basically a level that's full of jumps and tricks that almost but don't quite work. I have a feeling that, despite my best effort, Detroit might benefit significantly from a route change. I also have three nitros for a while, negating my up+B+C jump and forcing me to do regular jumps. Blech. The good news is that Detroit looks great despite all that (I'm particularly fond of the ending) and I get to move on to Chicago with two nitros in stock. I'll probably use those two right at the start of Chicago and then use one to start Miami, but I'll test it in Matlab just to be sure. Lastly, I finished mapping the levels. After Washington, I got lazy and decided not to map things like gravel and potholes-- instead, I only map jumps and nitros. Knowing where obstacles are is mildly useful, but not especially so and for the most part it just cluttered up my maps. Chicago has about seven jumps and one nitro to look forward to. Miami has seven nitros, four of which are in the grass near the end. Planning Miami is either going to be really fun or a major pain. New York has eight nitros and about 26 jumps. I may be able to nitro non-stop through New York and I'll try to do a very thorough job on that level to go out with a bang. I hope no one minds, but I'm going to post my Lua code, Matlab code, and level maps in a new post. I can't imagine anyone wants them right now, but if someone makes a new TAS down the line, they may prove useful.
Player (80)
Joined: 8/5/2007
Posts: 865
Lua program "skitchinspeedometerpro.lua" (cannibalized from the Sonic speedometer):
-- simple skitchin' speedometer display
-- demonstrates reading memory and writing text,
-- as well as predicting future frames and reading memory from them

-- create space in memory for a savestate
state = savestate.create()

-- register a function to run when the screen gets updated
gui.register( function ()
	-- get the X and Y velocity of the player
	
	dist = memory.readwordsigned(0xff0736)
	speed = memory.readbytesigned(0xff0768)
	xpos = memory.readwordsigned(0xff0748)
	xvel = memory.readbytesigned(0xff1541)
	frames = memory.readbyteunsigned(0xff01fb)
	health = memory.readwordunsigned(0xff077A)
	skates = memory.readwordunsigned(0xff0002)

	-- look 25 frames into the future and find if a jump is possible next frame
	savestate.save(state)
	gens.emulateframeinvisible()
	joypad.set(1, {up = true})
	joypad.set(1, {B = true})
	joypad.set(1, {C = true})
	i = 1
	while i<25> 0) then
		canjump = 1
	else
		canjump = 0
	end
	savestate.load(state)

	-- print the velocities onscreen, near the top-right corner,
	-- in a green color with a black outline
	message = string.format("position: %d, %d", dist, xpos)
	gui.text(210, 10, message, "#00FF00FF", "black")
	message = string.format("velocity: %d, %d", speed, xvel)
	gui.text(210, 18, message, "#00FF00FF", "black")
	message = string.format("frames: %d", frames)
	gui.text(180, 140, message, "#00FF00FF", "black")
	message = string.format("%d", health)
	gui.text(300, 185, message, "#00FF00FF", "black")
	message = string.format("%d", skates)
	gui.text(300, 193, message, "#00FF00FF", "black")
	message = string.format("can jump: %d", canjump)
	gui.text(100,140,message, "#00FF00FF", "black")
end)
I think that code is pretty self-explanatory, especially if you run it. Matlab program "skitchin.m":
function skitchin(t)

frame = 35614;
x = 76107726;
v = 25447;
x_fin = 139500000;

nitro = 0;
v_max = 32255;
acc = 56; %per frame
coast = -4.3;

while x<x_fin> 0;
        v = v + acc;
        if v > v_max;
            v = v_max;
        end
        nitro = nitro - 1;
    else
        v = v + coast;
    end
    x = x+v;
    frame = frame+1;
end

frame
Matlab is my bread and butter, but I don't think anything is too difficult to understand for someone with a good background in programming. The only thing I feel the need to point out is that the input argument t is a vector specifying the time(s) that I want to simulate using a nitro. The program's output is the projected time (in frames) to completion of the level. The values of acc and coast were derived empirically, although coast may vary somewhat from level to level. The values for frame, x, v, and x_fin all vary contextually; whenever I want to simulate a new level, I change the values of those variables manually. I then run the code several times until I find a global minimum. I could probably automate the minimization process, but it generally isn't too difficult. Level maps: Vancouver --------- Oil - 214/139 Ramp - 247/210 CB Ramp - 296/216 Pipe -368/192 SL Ramp - 410/304 Gravel - 428/70 Crowbar - 510/212 Ramp - 558/210 Crowbar - 644/219 CB Ramp - 687/227 Bench - 729/363 SL Ramp - 761/285 Bench - 804/463 Nitro - 835/-632 Gravel - 841/91 SL Ramp - 865/321 Pipe - 951/183 Trash cans - 961/245 Bench - 964/410 Trash cans - 977/122 Trash cans - 995/260 Ramp - 1074/230 Ramp - 1150/222 Oil - 1165/142 Crowbar - 1270/191 Ramp - 1322/224 Gravel - 1344/-113 Crowbar - 1495/199 Ramp - 1525/209 Denver ------ Ramp - 168/-220 Oil - 181/20 CB Ramp - 304/-215 SL Ramp - 367/327 Slow Ahead - 394/-225 Potholes - 403/-226 Slow Ahead - 423/-234 Ramp - 458/-186 Oil - 467/0 Gravel - 523/-91 Crowbar - 576/-214 Slow Ahead - 633/265 Slow Ahead - 653/265 Ramp - 681/190 Nitro - 687/179 Truck - 693/Right Oil - 737/-68 CB Ramp - 774/215 Ramp - 867/214 Intersection - 937 Oil - 961/-120 Ramp - 977/211 Gravel - 1017/83 Intersection - 1048 Mound - 1089/200 Chain - 1096/160 Barriers - 1102/Right Oil - 1141/34 SL Ramp - 1144/296 Ramp - 1208/150 Boxcar - 1220/202 Gravel - 1268/-150 Pipe - 1311/123 Gravel - 1312/-127 Cones and Potholes - 1319/Right Oil - 1374/-120 Intersection - 1376 Nitro - 1432/-200 Intersection - 1453 Gravel - 1468/100 Ramp - 1492/-224 San Diego --------- Intersection - 140 Intersection - 179 Intersection - 320 Nitro - 432/-196 SL Ramp - 518/319 Intersection - 560 Intersection - 600 Oil - 645/210 Intersection - 680 Intersection - 720 Crowbar - 800/-270 RW Sign - 821/-272 Mound - 839/-186 Truck - 850/Left Pipe - 893/-207 Intersection - 899 CB Ramp - 922/-174 Intersection - 939 CB Ramp - 994/-162 Barriers - 1047/Left Intersection - 1080 Gravel - 1104/-87 Gravel - 1130/-150 Intersection - 1200 Pipe - 1206/196 Oil - 1242/128 Intersection - 1280 Ramp - 1304/230 Oil - 1308/-60 Intersection - 1360 Mound - 1391/200 Bat - 1399/124 Open MH - 1404/165 Intersection - 1420 Intersection - 1475 Gravel - 1497/-140 Intersection - 1540 Seattle ------- Gravel - 110/-148 Oil - 193/70 Gravel - 274/-115 Nunchuks - 474/-220 Washington ---------- Oil - 102/40 Oil - 167/73 Nitro - 179/265 Oil - 251/61 Cones - 304/left Split road - 313 to 388 Oil - 317/130 Mound - 333/-210 Oil - 337/143 Barriers - 338/left Oil - 354/111 Nunchuks - 361/-265 Oil - 383/115 Nitro - 386/55 Barriers - 388/left Oil - 416/-40 Gravel - 412/301 Gravel - 443/-70 Gravel - 457/250 Gravel - 465/-55 Gravel - 469/120 Gravel - 527/-85 Oil - 571/-82 Gravel - 582/120 Pothole - 633/-197 Gravel - 648/120 Gravel - 664/-123 Nitro - 665/248 Gravel - 674/90 Gravel - 708/94 Oil - 716/-53 Gravel - 729/100 Gravel - 805/-147 Bat - 814/-215 Gravel - 895/-80 Oil - 913/-36 Pothole - 930/-220 Nitro - 958/78 SL ramp - 961/304 Pothole - 982/-206 Gravel - 1008/-72 Oil - 1055/53 Crowbar - 1106/-229 RW sign - 1118/-21 RW sign - 1127/-21 Divided road - 1137 to 1292 Oil - 1183/-44 Gravel - 1200/-119 Chain - 1210/166 Pothole - 1315/250 SL ramp - 1363/328 Toronto ------- Gravel - 191/-5 Nitro - 258/180 SL Ramp - 713/329 Speed Bump - 1064 Nitro - 1129/177 Speed Bump - 1211 Ramp - 1267/-160 Speed Bump - 1387 Nitro - 1461/256 Speed Bump - 1803 End - 2128 (139500000) Detroit ------- Nitro - 365/290 Nitro - 642/-290 Slow Ahead - 788/190 Nitro - 817/381 Mound - 875/170 Nitro - 901/66 Slow Ahead - 918/-370 Slow Ahead - 1018/-346 (fool's gold!) Slow Ahead - 1197/-121 Slow Ahead - 1243/-140 Mound - 1287/-168 SL Ramp - 1304/324 (choose between mound and SL ramp) Ramp - 1341/-197 Mound - 1347/-191 (choose between ramp and mound) Ramp - 1379/-194 (can't jump truck) SL Ramp - 1555/326 SL Ramp - 1614/341 End - 2128 (139500000) Chicago ------- Speed Bump - 205 SL Ramp - 348/314 Speed Bump - 412 SL Ramp - 500/316 Speed Bump - 541 Nitro - 615/205 Speed Bump - 634 Speed Bump - 741 Heap - 789/-331 Miami ----- Nitro - 306/-185 SL Ramp - 938/310 SL Ramp - 1068/329 SL Ramp - 1322/320 Nitro - 1406/-220 SL Ramp - 1704/??? Nitro - 1715/-212 SL Ramp - 1724/324 SL Ramp - 1894/329 Mound - 2381/191 Nitro - 2427/481 Nitro - 2464/506 Nitro - 2650/-700 Nitro - 2671/-707 End - 2895 (18960625) New York -------- Nitro - 147/260 SL Ramp - 160/314 SL Ramp - 250/311 SL Ramp - 362/307 SL Ramp - 558/307 SL Ramp - 649/315 Nitro - 725/-217 Nitro - 1061/252 Slow Ahead - 1550/-307 Slow Ahead - 1556/-246 Slow Ahead - 1566/-191 Slow Ahead - 1584/-131 Slow Ahead - 1600/-60 Nitro - 1618/-294 Slow Ahead - 1621/-64 Slow Ahead - 1639/-53 Nitro - 1708/-203 Slow Ahead - 1860/135 Mound - 1875/197 Slow Ahead - 1881/128 Nitro - 1980/-270 Heap - 2035/-300 Heap - 2115/-306 (may be difficult to catch) Heap - 2311/-306 Heap - 2368/-323 Heap - 2447/312 Nitro - 2529/-263 Heap - 2585/-309 Heap - 2622/-312 Slow Ahead - 2700/317 Slow Ahead - 2729/150 Heap - 2842/327 Nitro - 2898/239 Heap - 2970/277 End - 2992 (196121868) Speed Bonus (Vancouver, Toronto, and Miami) ------------------------------------------- Nitro - 266/-212 Nitro - 595/50 Cattle Prod - 653/763 Nitro - 888/-197
Player (80)
Joined: 8/5/2007
Posts: 865
As an April Fools' joke, I was going to declare that I nearly finished the run, but forgot to buy wheels and instead wiped out just a mile from the finish line, requiring me to go back and redo three levels. Since the site had its own somewhat "serious" April Fools' Day joke and it's been taken down now, I'll spare you the fooling. Nevertheless, I have noticed my first outright mistake. At the start of Detroit, I get up to full speed on leg power, then use two nitros. This is somewhat wasteful, as two nitros alone can get you up to top speed much faster. I don't think it costs me more than, say, 30 frames, but it's certainly embarrassing and I wish I could go back and change it. I don't think it's worth it to replay Detroit because I had some rather good luck in the middle of the level getting between a truck and some pylons and going "through" a barrier and quite frankly, I really don't want to go back and redo a level. Since my speedrun isn't perfect anyway, I'm leaving it as-is so other runners can improve upon it. With that said, I made up for it by rocketing through Chicago. I hit just about every jump I could and even worked in a funny glitch. You'll see when I upload the video-- hopefully, by then the TAS will be done. I'm currently halfway through Miami, trying to think of my next move. There are four nitros off in the grass near the end of the level. I could pick up none of them, two of them, all four of them, or maybe even one or three of them. Each possibility has its potential benefits and drawbacks. I'm going to "simulate" the time it takes to pick up a nitro or two by jumping into the grass and standing there for the appropriate distance. In short, progress is coming along well, but I'm at a minor roadblock. Fortunately, New York should be a walk in the park, so to speak. On the "theoretical" side of things, I've made some neat discoveries: As you hit a jump, you can hold C to reduce your horizontal speed. For example, if my horizontal velocity is 3 just before I hit a speed limit ramp, I can hold C for a few frames to bring my horizontal velocity down to zero. This can be particularly useful for hitting speed limit ramps as the track either bends to the right or stays straight-- I can approach the ramp by holding right, then reduce or negate that velocity by holding C, minimizing the amount of time I need to spend in the grass. I've already used this trick a handful of times and I wish I discovered it sooner. I did some research and determined how long it takes to perform a trick: A: 18 frames B: 22 C: 28 U: 27 D: 27 L: 26 R: 27 U-L: 30 U-R: 30 D-L: 29 D-R: 29 What this means is that if I press A at, say, frame 43428, I can perform another trick (press any of those buttons) at frame 43446 and no sooner. These numbers seem to be consistent, though I'll want to keep playing with them to make sure that's the case. I think it's very interesting that L and R tricks take different times to complete and that there is a lot of variety in these numbers. Finally, trick bonus cash is stored in 2 bytes at FF005C. This generally isn't too useful, but it could be vital for a cash-maximizing run. Only about two levels left!
Player (80)
Joined: 8/5/2007
Posts: 865
DONE!!! My completed speedrun can be found here: http://dehacked.2y.net/microstorage.php/info/1187674621/speedrun5.gmv Not that anyone's holding my feet to the fire, but sorry for dropping out for a couple of months. Miami was pretty intimidating and a few things have popped up in my life, so I put the TAS on the back burner. My trepidation over Miami was justified. After some testing, I decided it would be fastest to get only the second pair of nitros near the end because they are closer together. I found that I couldn't pick up either of the first two nitros, use one of them, and get over to the left fast enough to get the second pair. I played through Miami up to the end, only to find that although the second pair of nitros are closer together, the second nitro lies uphill, so I wasn't able to jump back onto the road. This meant I had to wait a while longer until a gap opened up in the barriers. I lost enough speed that I started to question my strategy, so I made a copy of my speedrun and re-recorded a healthy chunk of the level, picking up the first pair of nitros instead. It was 200 frames slower. I'm just happy to be done with that stupid level. I finished the three speed bonus levels in three very different ways. I won't say how I finished Miami's bonus-- you'll have to see it for yourself. New York was a little "bland" since it had eight nitros (I picked up seven), but was pretty fun. I ditched my Matlab program and instead used whatever nitros I picked up almost as soon as possible. My reasoning was that with eight nitros to use in the level, I might as well use them sooner rather than later (and find myself with too many on hand). I think you'll see that the result is quite good, as it's probably the fastest level (in terms of average speed) in the bunch. I wish I had more to say, but the last two levels were mostly "by the books". I'll be submitting my TAS within the day, hopefully in just a few hours. Wish me luck!