Hi, I'm new to the forum, so firstly hello. I joined to share some work I'm performing with regard to the original Sega OutRun arcade game. I'm currently in the process of producing a full, commented disassembly of the game. I would say I'm 70% complete, with the aim to finish towards the end of the year (time is limited). The ultimate aim is to rewrite the engine in C, with a view to adding optional (but tasteful) improvements that weren't in the original game. For example, frame rate improvements, level editing functionality and various gameplay options. You can follow progress on my blog here: http://reassembler.blogspot.com/ Some previous posts that may be of interest: 1/ Easter Eggs: http://reassembler.blogspot.com/2010/05/ou...nite-guide.html 2/ Hidden Voices: http://reassembler.blogspot.com/2010/01/hidden-voices.html 3/ 2 Way Traffic: http://reassembler.blogspot.com/2009/11/look-both-ways.html 4/ Full details on the extend time values: http://reassembler.blogspot.com/2009/11/extend-time.html 5/ Other weird messages: http://reassembler.blogspot.com/2009/08/ou...n-oddities.html Any questions or thoughts, let me know.
I love this kind of stuff. Are you interested in possibly looking at the ports to Sega's other consoles? I know that the Sega Saturn version is using the original arcade source code (along with Space Harrier, etc), not sure about the Megadrive versions but it seems somewhat likely they might've used the original code as a guide. I e-mailed the programmer on the GBA port of OutRun for this Sega Arcade compilation cart, and they never got the original source code for any of the games so they had to write their own code plus rip the art/music from the game. Also, once you're done with OutRun, are you thinking of disassembling other System 16 games?
Thanks for the replies. It's a long project which I've been working on for nearly a year now, so don't expect instant results. But I'm already a lot further than I thought I'd get. You're right about the Saturn version - in the binary you can see various strings related to the arcade motor hardware, that don't appear in the game. So they must have ported the code directly. It would be interesting to know how much of the porting process was automated with some kind of tool or whether they went for a complete refactoring. I would suspect the former. The GBA version plays quite differently from the original, so not a surprise about the lack of source code I guess, but good to have that verified. With regard to other System 16 games, it's unlikely I'll go through the process again. I'm an OutRun nut, and whilst I love some of the other titles of the era, I wouldn't have the dedication to do this for a game I wasn't really into. Having said that, I've looked at the code for Super Hang On and there is code reuse between the two games with regard to the road rendering. So there may be some learnings that can be shared. Does anyone know the history behind the Ferrari-less version that appears in Shenmue, OutRun 2 on Xbox, and the Yu Suzuki Gameworks compilation?
I can actually get the version of OutRun from Shenmue and the Gameworks compilation if you like. I'm pretty sure they were emulated, last time I checked. But maybe they did some updates...
Wait, why would Outrun 2 on Xbox be Ferrari-less? Surely they had the license, the main game uses them!
Yes, it doesn't make much sense, especially as OutRun 2 had a Ferrari Testarossa licensed for it. One possibility is that the programmers reused the GameWorks/Shenmue code (where there wasn't a Ferrari license) and didn't have time or inclination to replace the graphics. I'm just speculating though.
http://dl.dropbox.com/u/38216/OUTRUN.7z Well here's the one from Yu's compilation. I'm not sure if I'm missing anything that belonged to the game, so let me know if you need anything else. Do you know if there's a possibility that different regions of the Dreamcast/Xbox versions have changes for OutRun in each region? I want to get each region and check it out while I'm at it.
Ohohoy! What's this? Someone actually took the time to look at Outrun? How awesome =D From what I'm reading, you're generating a C version that can be compiled, is there any chance of an assembly language version, or are you strictly sticking with C? Not that I have a problem, just felt it were necessary to ask.
There's no reason why their couldn't be an assembly version. The first step is a full disassembly, so it's really an interim step before rewriting in C. Had a very quick look at the Dreamcast files. The game doesn't look like it's running under emulation to me. It looks like a rewrite. This is just from a cursory glance mind you.
What do you mean by 'assembly language version'? As far as I understand, he's currently still commenting all the arcade machine specific ASM code, and will be translating that to C later on. I'm guessing you're asking him to release that commented ASM code?
Yes. As you probably know, the use of a Ferrari in the original wasn't cleared by Ferrari, so for legal reasons they dropped it from all future games, including Shenmue's version of the original (where some shading and transparencies were also left out, I believe). The YSG and OR2 versions of OutRun are merely ports from Shenmue's version.
OMG you are taking one of my dream projects! I have already planned to do this in the future. I love Outrun for its cone rode scanline illusion, which is used in other games, like Yoshi's Island for SNES. Super Monaco GP for Genesis is another game that uses this technology. I want to go to the very source of how the road is created, to make it bend and twist. There is just one problem. Old games like these are always using tables of pre-computed data (look up tables), instead of real time computions, and I want the real math for how to construct the road (or as close as possible). And since I believe I won't get it for free (by looking at disassemblies), I have to put my dream project far into the future for now. Other priorities come first I would love if you could just confirm that I am wrong about this, but I shouldn't. Only hope is that the hardware for Outrun (arcade) was powerful enough to allow real time calculations of most things. Well, Super Hang on was basically first with the road (especially the hills), but Outrun is so much better and had double roads! That can't be right? When looking at how that port plays, it has all the quality of a port, such as the road using LUT tables from the original game, making it look rather low res on the GBA screen as the math isn't clean enough for that system.
Hmm, well the road is not simply a bunch of precalculated x and y positions. It's generated at runtime from a series of data segments - some of them basic lookup tables, some of them points from which curves and the final path of the road are calculated. In fact an entire 68k processor is dedicated simply to road rendering and nothing else. I'd say the road generation is the most complex part of the code I've worked with. There's some very basic info here: http://reassembler.blogspot.com/2010/03/ou...pping-tool.html The interesting thing about my demo tool, is that it generates the path of the road using ported assembler routines.
He said this: The graphic data was pulled directly from the rom and edited it to fit a lower resolution. The track data was maybe done the same way, as that took weeks to do he said.
To my recollection, the Xbox Outrun 2 version of Outrun does have the Ferrari logo on the car. I remember because I thought it was funny how it mirrored when you turned, that was the first time I noticed it. Interestingly, it also behaved more like it was being emulated than ported, it had a rough start up. This is based off what happened when you enter the password to unlock it, it might be different if you get to it legitimately.
Very interesting! I have only worked with a Super Monaco GP Genesis disassembly, and it obviously doesn't have a dedicated 68000 CPU for rendering. And there is page flipping and hblank madness (as you would expect). And I seriously didn't learn much how the road were constructed because there were so many things combined, and taking out one at a time didn't show the result I needed to understand what it did. Super monaco GP has a mirror (showing the road behind the car) that outrun doesn't have. EDIT: Here is Super Monaco GP's road, and since the Genesis can't change palette during hblank (which adds garbage pixels all over the screen), the alternating red white kerb is done by having two roads with different palette entry for their side, and switches Y position: And on the subject on the cone scanline technique. I want to show this (an old GBAdev thread by me) about Yoshi's Island for GBA. I was asking for help back then but no one could really help me. This technology renders very beautifully compared to mode 7 or real 3D, where pixels get messed up, so I think you are doing the key job in preserving this technology for the future! http://forum.gbadev.org/viewtopic.php?t=40...ighlight=outrun And please people, don't start talking about Yoshi's Island. We know it is a good game, and it is that because of Outrun As you see, I am a big fan of this technology, and I am ready to help as much as I can!
Although I personally don't like the original Outrun very much (always preferred Super Hang-on), the amount of dedication you put into this deserves a lot of respect. I suppose it was easy to port because the Saturn is basically an evolution of the same sprite scaler hardware. (Space Harrier -> Outrun -> X Board -> Y Board -> System 32 -> Saturn) Outrun is one of those Sega Ages titles, I think, that crashes on later Saturn models by the way. As I understand it, later Saturns used a different 68k model, which couldn't handle some code right, locking up the game as the first sound played at the Sega Ages logo. They fixed this by making a revision of the game.