don't click here

OutRun decompilation

Discussion in 'Technical Discussion' started by reassembler, May 31, 2010.

  1. reassembler

    reassembler

    Tech Member
    23
    0
    0
    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.
     
  2. nineko

    nineko

    I am the Holy Cat Tech Member
    6,390
    539
    93
    italy
    This is way beyond awesome. </thread>
     
  3. DigitalDuck

    DigitalDuck

    Arriving four years late. Member
    5,448
    500
    93
    Lincs, UK
    TurBoa, S1RL
    I only have one thing to say to this:

    FUCK YES!

    Please keep us posted.
     
  4. evilhamwizard

    evilhamwizard

    Researcher
    1,402
    481
    63
    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?
     
  5. reassembler

    reassembler

    Tech Member
    23
    0
    0
    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?
     
  6. evilhamwizard

    evilhamwizard

    Researcher
    1,402
    481
    63
    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...
     
  7. Overlord

    Overlord

    Now playable in Smash Bros Ultimate Moderator
    19,579
    1,133
    93
    Long-term happiness
    Wait, why would Outrun 2 on Xbox be Ferrari-less? Surely they had the license, the main game uses them!
     
  8. reassembler

    reassembler

    Tech Member
    23
    0
    0
    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.
     
  9. evilhamwizard

    evilhamwizard

    Researcher
    1,402
    481
    63
    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.
     
  10. MarkeyJester

    MarkeyJester

    You smash your heart against the rocks Resident Jester
    2,263
    529
    93
    Japan
    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.
     
  11. reassembler

    reassembler

    Tech Member
    23
    0
    0
    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.
     
  12. Sintendo

    Sintendo

    Member
    249
    0
    16
    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?
     
  13. DigitalDuck

    DigitalDuck

    Arriving four years late. Member
    5,448
    500
    93
    Lincs, UK
    TurBoa, S1RL
    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.
     
  14. I hate to derail here, but this reminds me, whatever happened to that port of Sonic 2 to C?
     
  15. LOst

    LOst

    Tech Member
    4,891
    8
    18
    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.
     
  16. reassembler

    reassembler

    Tech Member
    23
    0
    0
    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.
     
  17. evilhamwizard

    evilhamwizard

    Researcher
    1,402
    481
    63

    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.
     
  18. Phos

    Phos

    Going for the high score on whatever that little b Member
    3,318
    0
    0
    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.
     
  19. LOst

    LOst

    Tech Member
    4,891
    8
    18
    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:
    [​IMG]

    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

    [​IMG]
    [​IMG]
    [​IMG]

    [​IMG]
    [​IMG]

    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!
     
  20. Meat Miracle

    Meat Miracle

    Researcher
    1,664
    5
    18
    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.