Transparency issues

All versions of SADX suffer from problems with rendering transparent models, which play a major role in visual downgrades. The original game took advantage of SEGA Dreamcast’s hardware features that were impossible to replicate on the Gamecube and other platforms. When the game was being ported to other platforms, the developers ran into numerous transparency-related problems with ingame assets. Some of such problems were fixed, but in the majority of cases the problematic assets were redesigned, usually without much care for quality or style of the original game. Let’s discuss the transparency issues in general, have a look at some specific problems and see how they could’ve been fixed.

In many ways, the Dreamcast was a console ahead of its time. One of the Dreamcast’s unique features was its PowerVR GPU. It was equipped with a hardware feature called order-independent transparency (OIT). No console before or after the Dreamcast ever had that feature built in on the hardware level, and it took many years until mainstream GPUs became capable of dealing with order-independent transparency.

Why is this significant? Traditionally, in 3D graphics rendering transparent objects is a pretty complex problem. To properly display transparent models together with non-transparent models, the polygons in a 3D scene have to be rendered in a specific order. Transparent polygons have to be rendered after opaque polygons in back to front (furthest to nearest) order to ensure the transparent blending operations are performed correctly. The framebuffer is the “canvas” on which the polygons are “painted”. The order is important because once something’s been “painted” onto the framebuffer, you cannot simply put something behind a transparent object that’s already there.

In complex scenes with many transparent objects and moving camera this can become a problem because the engine needs to tell what is visible from the current camera angle, whether the visible polygons have transparency or not, and how close they are to the camera, all of which would influence their draw order. On top of that, the composition of each model should ensure that the transparent polygons are processed after the opaque polygons, not before. Even modern games struggle with transparent things sometimes.

With order-independent transparency the above issues are irrelevant. The polygons can be processed in any order, and transparent and non-transparent polygons are sorted automatically by the Dreamcast’s GPU. In the case of SA1, up to 32 layers are sorted per pixel using 32×32 tiles, while other games, such as Omikron: The Nomad Soul, require 64 layers to look correct (according to MetalliC, the developer of Demul, the Dreamcast can sort up to 256 layers). This allowed the developers of Dreamcast games to create complex scenes involving transparent things without worrying about draw order. It was also unnecessary to have a strict model hierarchy of transparent and non-transparent polygons. Sonic Adventure is one of such games where the ingame assets are mixing transparent and opaque polygons without any consistency.

When the game was being ported to the Gamecube, the benefits of order-independent transparency were no longer there, and the developers ran into numerous problems involving transparent models. They tried to address them in two ways:

1. A draw queue system was set up to tell the game which models should be rendered in what order. While technically not bad for a game of that generation, the draw queue system doesn’t always work right in this game because of code bugs, and, judging by the disassembled code, the developers themselves didn’t know very well how to use it. The most common issue with the draw queue system is transparent objects disappearing when you move the camera. This happens pretty often throughout the game, check out Twinkle Park or Hot Shelter for examples.

Sometimes the draw queue can’t handle transparent things because of engine limitations. For example, look at the aquariums in Hot Shelter Act 1:


The water behind the green glass is invisible in SADX, but it’s still there – here’s a part of it that manages to clip through the glass. This scene requires the water to be rendered first so that the green glass can be rendered on top of it. The reason it doesn’t render in SADX is that the water here is an interactive object (SET object), whereas the green glass is a level piece, and the game always renders objects after level pieces. This confuses the draw queue system and makes all transparent things behind the green glass disappear.

2. Alpha rejection was an additional measure to hide transparency problems or make them look less terrible. For textures with an alpha channel, the game only displays the pixels whose transparency (alpha) value is within a certain range. This allows some models with a grid-like transparent pattern (fences in Speed Highway and Hot Shelter, paths in Windy Valley) to look acceptable even though the game is still struggling with rendering them. Here are some examples of alpha rejection:

This doesn’t look too pretty, but at least it helps a bit. However, the problem with alpha rejection in SADX is that it also breaks a lot of completely unrelated special effects. In Perfect Chaos, alpha rejection causes special effects such as waterfall splashes and mist to flicker or disappear. Check out the Bosses section for a comparison. Also, all particle effects now have ugly outlines that makes them look low-res. Water splashes, dust, fire, explosions – all of these look lower quality than they are because of this feature. Here’s an example from Lost World:


Even with the above workarounds in place, the game still has a huge amount of transparency issues. There is no solid proof for this, but I’m inclined to believe that the majority of “stylistic” changes in SADX were made because the port had problems displaying the original assets correctly. I think so because I’ve imported Dreamcast levels into SADX myself and found out that almost all levels that look different in SADX had transparency issues with their original Dreamcast designs.

Here’s a typical SADX redesign. This roof had a triangle-shaped pattern in the Dreamcast version. In SADX the pattern was removed and the roof was made solid:


This was likely done because the triangle pattern is a square texture with an alpha channel, which had rendering problems in SADX. Here’s a screenshot from the “Preview” prototype where this area is still using Dreamcast graphics:

In fact, you can still see issues with textures like that in the final version at some camera angles if you try hard enough:

There appears to be a strong correlation between the areas that were redesigned and the areas that had rendering issues in the port with their original designs, which is why I believe the majority of those redesigns were done to get rid of transparency problems. As you can see, even the replacement assets don’t always work well.
NOTE! The above point is speculation on my part. My opinion is based on my experience with both games. However, the only way to know why the assets were redesigned is to ask the people involved with the ports, which is unlikely to happen anytime soon. There are other possible reasons for SADX redesigns, which will be discussed in a separate section on this blog in the future.

Even within the engine limitations, most transparency issues in SADX are fixable by rearranging the models involved, which is usually just moving around a couple of lines in code. Let me illustrate a typical transparency problem in SADX and how it can be fixed within the limits of SADX engine:

Here you can see a shop roof that has to be rendered together with its surroundings. Let’s describe all the meshes involved in this scene:

  • 1 – roof top (opaque)
  • 2 – roof side (opaque)
  • 3 – roof top decoration (transparent)
  • 4 – wall
  • 5 – window reflection (transparent)

To render this properly on platforms other than the Dreamcast, we have to arrange these meshes in the correct order, which would be 4, 1, 2, 5, 3. We render the non-transparent pieces first, starting with the wall, and then we render the transparent parts, finishing with the one that should be layered on top of the previous one. In order to render these assets like that, we have to make sure the level pieces are arranged in this particular order. However, in the Dreamcast level the order could be anything, which is why there are issues when the original level is imported as-is. There are cases when this gets complicated, but for the most part rearranging the models is quite easy. However, instead of rearranging the problematic models (which probably would’ve taken less time and effort), the developers decided to redesign those areas with new textures and models. The redesigned assets sometimes fail at conveying the atmosphere of the original game. Quite often they lack the variety or special effects of the original, or have lower quality textures. There are also cases where the developers didn’t redesign or fix the models that still have transparency issues. Almost every level in SADX has problems related to transparency. You can read more on level-specific problems by using the top menu.

I resolved the majority of transparency issues with Dreamcast assets in my mods by sorting the models manually. Sometimes I also hooked the game’s queued model system to set an arbitrary depth value to make models render in a specific order. Although not everything is fixable this way, I think my mods demonstrate that making a faithful conversion of SA1 assets was possible in the PC port at the very least.

Sound and music quality downgrades

As unfortunate as it is, sound and music quality has suffered almost as badly as textures and lighting in SADX. Let’s have a look at the sound problems plaguing the ports.

First of all, I’m going to be talking primarily about the PC version and later ports. This is because the Gamecube version’s sound format hasn’t been reverse engineered yet to allow direct sound quality comparions (although we can make some rough estimations). If you want to read about sound downgrades in the Gamecube version, skip forward to the part where I talk about sound bugs and missing sounds.

There are several types of sound issues in SADX, and they are specific to different ports. Here’s a list of issues and the ports affected by them:

  • The music no longer loops – 2004 PC port
  • Lower quality voice clips – 2004 PC port (all clips), Steam and nextgen console ports (only some clips)
  • Lag/stutter caused by the voice file format – 2004 PC port
  • Lower quality sound effects – 2004 PC port, Steam and nextgen console ports
  • Missing processing effects on some sounds – all ports
  • Sounds being cut off, looping incorrectly or playing too early/too late – all ports
  • Some sounds are missing – all ports
  • Wrong soundbanks are loaded, causing wrong sounds to play – all ports
  • Sound volume problems: some or all sounds are too quiet (PC 2004 port) or too loud (Steam/nextgen console ports)
  • Sound playback problems (sounds/voice clips playing in lower quality than the actual sound/voice files) – Steam and nextgen console ports

Let’s talk about the music first. The Gamecube, Steam and nextgen console ports use ADX music files that are the same as in the Dreamcast version. On the Dreamcast, some music tracks were downsampled in the versions of SA1 that contained both English and Japanese audio clips – this downsampling was undone for the GameCube version, so unless you own the Japanese version of SA1 this is technically an upgrade (however, the Steam and nextgen console ports fail to take advantage of it and end up sounding worse, which I will discuss later).

For the 2004 PC port, ADX music files were converted into WMA files. The main problem with the WMA format is lack of looping, which means the music in the PC port fades out and restarts at some point, while in other versions of the game it loops seamlessly. This isn’ a major issue, especially because the Mod Loader has brought back ADX music support.

However, there are other problems with the WMA format. Character voice clips were also converted into WMA for the 2004 PC port. This would’ve been fine because the voice clips don’t need loop points, but the conversion reduced the quality of the resulting voice clips. Here’s a voice clip from both versions with audible quality difference despite the WMA one using a higher sampling rate and stereo sound:


PC 2004:

A well-known problem with the 2004 PC port is the stutter that happens during the kart race when you hit the jump panels and Sonic says “woohoo!”. When this happens, the game pauses for a brief moment. This has something to do with the voice clips being in the WMA format because it doesn’t happen in the ports that use ADX audio. Thanks to the Mod Loader you can fix the problem in the 2004 PC port by installing a mod that replaces all WMA voice clips with ADX voice clips.

Although the Steam/Dreamcast Collection port goes back to ADX voice clips, which are the same as on the Dreamcast/Gamecube for the most part, there are several voice clips that were edited. Those edited clips are lower quality than the original voice clips. There are only 9 English voice clips and 11 Japanese voice clips that are different from the Dreamcast version. Most of the edited voice clips have to do with the options menu, where the “Options” part was cut out for some reason. You can hear that the edited voice clip sounds a bit muffled:



Now let’s talk about reduced sound quality. The easiest way to illustrate the reduction of sound quality is to compare jump and ring loss sounds across different versions. Here’s the jump sound:


PC 2004:

And here’s the ring loss sound:


PC 2004:


I think the sounds speak for themselves, but by sound quality I mean not only technical things such as sampling rate, but also volume, processing effects and looping of various sounds. The biggest problem with SADX sounds is that they are too quiet. In the Dreamcast version, almost every Action Stage and Adventure Field has some kind of a background noise that is loud enough to be audible without washing out the music. Those sounds are still present in SADX, but they are so quiet a lot of people think they are missing. One of the most illustrative examples is the machinery noise in Final Egg Act 1, which you are supposed to hear right from the start, but it’s barely audible in SADX. The sea in Station Square hotel is also barely audible in SADX. Another example is the ticking sound of the clock in Speed Highway Act 3, which is there but due to a combination of low volume and SADX’s positional audio weirdness it’s rarely heard ingame.

Some sounds have missing digital processing effects. For example, if you watch the cutscene before the Chaos 0 fight, you can hear the sound of bullets falling on the ground after the police shoot Chaos. In the Dreamcast version, that sound had a reverb effect that created the impression of multiple bullets falling, but in SADX it sounds like a single bullet. A similar problem happens with Zero’s chest thumping sound, which is barely audible in SADX because of the missing reverb effect.

There are several sound bugs in the ports that cause sounds to play too early or too late, or not play at all. The game’s sound engine doesn’t always work well with the increased framerate of the port, which causes some sounds to get cut off or loop incorrectly. A good example of that is the looping background engine noise of the Egg Hornet, which plays fine at 30 FPS, but cuts off at 60 FPS.

As for the sounds that play too early, most of the cutscenes involving the Tornado crashing or landing have sound timing problems. For example, in the cutscene where the Tornado 2 lands on the Egg Carrier, the metal screeching sound plays before the Tornado actually touches the Egg Carrier. This doesn’t happen in the Dreamcast version. The Dreamcast version also has a few sound problems like that (for example, the sound of the Tornado crashing in Tails’ opening cutscene plays too early and gets cut off), but SADX has many more.

The ports have code bugs in the positional audio system that cause some sounds to never play ingame. In addition, some sounds were deliberately removed or disabled. It’s difficult to talk about all of them in detail, but here’s a list of SADX sound bugs that weren’t there in the Dreamcast version (this isn’t a complete list, also some of these were reported to me on Sonic Retro forums before I started working on the Sound Overhaul mod):

  • The spindash sound gets cut off if you have the Light Speed Dash upgrade.
  • In the cutscene where Knuckles attacks Sonic, Sonic says “Whoah!” before jumping backwards. It isn’t heard in SADX because Sonic’s soundbank isn’t loaded by that cutscene.
  • A thud noise is missing when Sonic (or Tails) and Knuckles run into each other and drop the Chaos emeralds before Chaos 4 emerges.
  • The water splashes made by Chaos 4 are muffled by another sound that was mistakenly set to stereo, which interferes with the positional audio system.
  • A skid noise when Beta backs up just before his first boss battle is missing.
  • A foreboding noise when ZERO’s shadow casts over Amy in the cutscene after Twinkle Park is missing.
  • The cutscenes in Amy and Gamma’s story where Gamma lets Amy escape load the wrong soundbank, which causes the cutscenes to either be silent or play random unrelated sounds.
  • Bush rustling in the Angel Island hub no longer loops, although the sound is still there.
  • The rings that NiGHTS takes you through in Casinopolis’ NiGHTS pinball game no longer make a sound as you travel through them.
  • The bombs dropped by the airplanes in Ice Cap Act 3 no longer make a whistling sound as they fall down, and their explosions are silent.
  • The sound of collecting rings is in mono instead of stereo – this is because the sound file itself was converted to stereo. The game alternates between the left and right channel when playing this sound, which requires it to be in mono.
  • In Sky Deck Act 2, Eggman’s announcements when the ship changes altitude (“Descending into the clouds; slow the ship down!” or “Go up! Full speed ahead!”) are no longer heard because they were removed from the Sky Deck soundbank. The game still plays them if the sounds are put back into the soundbank.
  • The ambient machinery noise at the Mystic Ruins Final Egg base is missing – the noise sound was replaced by a single beep, and the function to play the noise was disabled in code, probably because the developers realized that the replacement was annoying. It’s unclear why the original sound was replaced.
  • Hot Shelter loads the wrong enemy soundbank, which makes badniks like the Egg Keepers play the sound of the ocean.

The Chao soundbanks were replaced in SADX because the Chao system itself was changed to be more like SA2B. We talk more about Chao-related downgrades on the Chao Gardens page, so here let’s focus on the sounds. It’s hard to compare sounds directly because the soundbanks are very different between SA1 and SADX. Nevertheless I found some identical sounds that we can compare. Which one do you think sounds better?


PC 2004:

Finally, let’s discuss the ADX playback downgrade in the Steam and Dreamcast Collection ports. Sound quality in the 2010 ports is undeniably the worst among all versions of the game. Unlike SADX Gamecube and PC 2004, these ports have the opposite problem with sound volume. The background noises drown out almost everything but the music (example: try playing Casino Act 1, where even the music is barely audible because of the gushing water noise). There’s also something noticeably wrong about sound quality. I originally assumed those problems came from the sounds themselves, but apparently it’s a bit more interesting.

The 2004 PC port uses WAV sound effects stored in DAT soundbanks, while the 2010 version uses the same soundbank format but with ADX sounds instead. The soundbanks themselves are identical between the Steam, PSN and X360 versions. When I extracted the soundbanks and tried playing some of those ADX files, I noticed that they sounded better in the audio player than in the game. Why does the game play them like that? I can’t say for sure but here is a possible explanation:

ADX is a closed-source lossy ADPCM-like format, which uses a prediction-based algorithm for decompression. Perhaps there was a precision error either in the game’s programming or with how the sounds were originally encoded, and they ended up sounding inaccurate ingame. Maybe they were encoded with one version of the algorithm, but the game uses another. I’m getting similar results with some tools.

Here’s a sound from the E_0001 soundbank that plays when Chaos 0 is defeated. This is how it sounds if the ADX file is decoded with an old tool called adx2wav. It sounds like that ingame too:

And this is how it sounds when decoded with vgmstream:

The same sound from the 2004 port for comparison:

To test my guess, I set up scripts to convert all soundbanks from the Steam version into the format supported by the 2004 PC port – these scripts are now used in my mod installer. The quality of sound effects in the Steam version is about the same as in the 2004 PC port, though many sound issues from the 2004 port remain unresolved. Unfortunately the Steam and nextgen console ports of SADX fail to play these sounds in their original quality.

To fix sound problems in the PC version of SADX, I went through all sounds in the Dreamcast version (except Chao-related soundbanks) and converted them into a format supported by the 2004 PC port with proper looping where necessary. I’ve also adjusted the volume of background noises, added processing effects to several sounds and restored many missing sounds. The majority of sound issues mentioned in the blog post is now fixed in the 2004 PC port with the Sound Overhaul 2 mod. To learn more about mods for the PC version, visit the “Fixing the PC version of SADX” section on this blog.

Lighting downgrades

There’s no doubt that lighting had the biggest downgrade during the Dreamcast-Gamecube conversion of Sonic Adventure. It’s easily the most noticeable downgrade in the entire game, and the most serious from a technical standpoint. Let’s compare lighting systems in SA1 and SADX and see how they perform against each other. Thanks to reverse engineering we know quite a bit on how they work.

The Dreamcast version of the game has a pretty interesting lighting system (referred to internally as “LANTERN”) that uses color palettes. The lighting information for each level is stored in a pair of files: the PL file (PL*.BIN) contains the palettes, and the SL file (SL*.bin) contains light direction and some miscellaneous information. Let’s talk about the PL files first. Here is a typical set of palettes found in a PL file (Twinkle Park Act 1):

The Dreamcast version’s lighting system uses a formula to calculate the “brightness index” of each vertex (point) in the scene, which is used to select colors in the palette. Several factors, such as the model’s normals and light direction (stored in the SL file) affect brightness index calculation. If we visualized brightness indices (from white being maximum brightness to black being completely unlit), it would look something like this:

Now look at the palette list again. The left row is diffuse palettes. Diffuse palettes contain colors that the original (fullbright) texture gets multiplied by, like using Photoshop’s “Multiply” blending mode. Specular colors are added on top of the result of the multiplication, in a similar way Photoshop’s “Add” blending mode works. Because it’s additive, specular lighting creates highlights. The “gloss” on Sonic and other characters is an example of specular lighting.

Each palette consists of 256 colors. The color the texture gets multiplied by (or the color that gets added as a specular color) has the same index in the palette as the brightness index of the vertex. So the “brightest” vertex would get the first (0) color in the palettes, and the “darkest” vertex would get the last (255).

It’s a pretty neat system that allows to use a wide range of colors to create vivid, original environments. But the system used in the Dreamcast version is even more versatile than that, because it allows different kinds of models (level pieces, characters etc.) to use different palettes, and even within the same model different meshes can alternate between two specular palettes using material flags. For example, the screenshot below was taken from the Dreamcast version where all palettes were replaced with different solid colors. You can see the complexity of color combinations that comes from using many diffuse and specular palettes at the same time:

So, how does the game know which pair of palettes to apply to a given model? There are several main palette application rules, as well as some exceptions. To illustrate the full range, we need to look at another PL file. Here’s a palette list from Gamma’s Hot Shelter:

When each model is rendered in the game, there is usually a function call that sets the “light type”. A light type corresponds to a certain pair of palettes. For example, Diffuse 0 is always applied to level pieces and objects. Specular 0 is applied to level pieces and objects when their meshes have the “ignore specular” material flag set to on. If it’s off, Specular 1 is used instead. The above rule also applies to all models that set the light type to 0.

Diffuse 1 and Diffuse 3 are never used in the Dreamcast version.

Diffuse 2 is the main diffuse palette used by playable characters and NPCs. In some rare cases it can be used by objects (such as floating meteors in Twinkle Park Act 1 or Chaos Emeralds in cutscenes) if they specifically set this light type. Specular 2 and 3 are used depending on whether the mesh has the “ignore specular” material flag. For example, Gamma’s model uses mostly Specular 3, although some of his body parts use Specular 2. Here’s an example of what usage of three different palettes can do (well, it’s actually two palettes since the third one is just black in this example, but still):

By the way, did you ever notice that Gamma’s eyes and head base are lit up in the Dreamcast version, but not in any of the ports? This is because the “ignore light” material flags were removed from Gamma’s model. For the same reason Big’s eyes no longer glow in the dark. This is a simple material flag change, however, and it works the same way in both lighting systems.

Diffuse 4 is a special palette. It is used by the fire effect in the Mystic Ruins Past, as well as some bosses. For example, the models for Chaos 2, Chaos 6 and Perfect Chaos all use Diffuse 4 and Specular 5. These palettes are used to accentuate the bosses and give them lighting that matches the environment. This is what Chaos 6 looks like with and without the diffuse palette:

Diffuse palette
No palette

But that’s not all! In some cases the game switches between different PL/SL files in real time. For example, in Sky Deck Acts 1 and 2 the game toggles between two different sets of palettes when the Egg Carrier changes altitude. This affects not just the level, but also the characters:

In Mystic Ruins Past the game also alternates between palettes, but within the same file:

The level and objects that would normally use Diffuse and Specular 0 have a fade effect that blends between Diffuse/Specular 4 and 5, creating the effect demonstrated below. The effect is missing in the Gamecube version:


Now that we’ve discussed the basic outline of the lighting system used in the Dreamcast version, let’s compare it with the Gamecube version. The palette lighting system was completely removed in the ports. Thanks to the “SADX Preview” prototype that was leaked several years ago we can confirm that the palette lighting system was functional on the Gamecube sometime earlier, but it was removed from the final version. A more traditional, less sophisticated lighting system (I’m going to refer to it as the “Stage Lights” system) was set up in its place. According to the data found in SADX Preview (which allows to toggle between lighting systems), the new lighting system allows to use the following parameters:

  • Light number – apparently up to 4 lights can be active at the same time, but the game seldom uses more than 1 or 2
  • Diffuse brightness – affects the overall brightness of the light
  • Light color (diffuse)
  • Ambient color – a separate color that is added on top of the diffuse color. Unlike specular, this isn’t a separate additive effect so it’s effectively the same as making the overall (diffuse) light color brighter
  • Light direction

This system clearly doesn’t allow as much creative freedom as 256 individual colors for each brightness index in the Dreamcast version. There is also no support for specular lighting, which means the level pieces can no longer have specular highlights/gloss. However, even with such a system in place it would’ve been possible to create environments that looked somewhat decent. After all, not all levels in the Dreamcast version use crazy multi-color light transitions or a lot of specular highlights. You can find some areas that look okay-ish in SADX Mystic Ruins, Hot Shelter and Lost World. Emerald Coast and Windy Valley also look alright because the original palettes for them were simple white-to-black gradients, which the new system can imitate easily. Other stages, such as Ice Cap, Red Mountain or Final Egg, feature much less vibrant environments than the Dreamcast version.

The new lighting system is also broken in the PC version of the game. If you compare the screenshots from each version side by side (which you can do by going to individual level comparisons using the top menu), you can see how the PC version washes out the lighting even further and makes everything too bright. For example, in the Mystic Ruins it’s hard to tell what time of day it is without looking at the sky because the ground is lit up at all times. Station Square also looks almost the same during day and night. This problem persists in all later ports of the game, including the nextgen console ports.

The downgrade described above happened with level lighting, but character and object lighting is different. The Gamecube version in particular has a pretty versatile system for character lighting. I believe this could have been the same system that was originally used to generate palettes for the Dreamcast version of the game. Again, looking at the Preview prototype is helpful with understanding how it works:

In the screenshot above you can see SADX Preview’s debug menu for character lighting. It generates two palettes (diffuse and specular, just like in the Dreamcast version) using a formula that takes in the following parameters:

  • Color1 color and power – diffuse palette
  • Color2 color and power – diffuse palette
  • Ambient color – added on top of the diffuse palette (multiply)
  • Specular1 color and power – specular palette
  • Specular2 color and power – specular palette
  • Light direction

(There’s also a “diffuse” parameter that doesn’t seem to do anything)

Using the above parameters it’s possible to create a lot of different palette combinations, and it would’ve been quite easy to imitate the color variety of the Dreamcast version using the same formula. The prototype even has a menu that is supposedly meant to load lighting information from a file. It could be that the developers were trying to load the Dreamcast’s PL files and recreate the gradients stored in them for use with the formula. Or perhaps the menu comes from an older build, which was used to generate the PL files. We don’t know what exactly the menu was used for, but the PL and SL files from the Dreamcast version can still be found on the retail game’s disk, and they were even byteswapped for compatibility with the Gamecube’s Big Endian format. It’s possible to activate them in the Preview prototype, but they are never used by the final version.

Although the character lighting system described above is a lot more flexible than the level lighting system, for some reason its potential was largely unused. Only in a few stages do we see Sonic and other characters colored differently, and in the majority of areas the lighting on Sonic barely changes at all. Since I have reverse engineered the palette generation formula, I was also able to convert SADX character lighting parameters into palettes. Here’s what those palettes look like in comparison with the Dreamcast version:

You can see how the Dreamcast version’s palettes are much richer, with more gradations and color variety than the Gamecube version. It was entirely possible to recreate the Dreamcast version’s character lighting in SADX, but the potential was hardly used at all. Most levels in SADX use simple white-to-black gradients for character lighting, sometimes with minor specular tints, which would’ve been a good start, but only a handful of levels in SADX use specular colors different from white and grey.

Another problem with the Gamecube version’s character/object lighting is that it often sets the specular values so high the models receive strong white gloss that can even obscure the details. For example, this is what happens to the Spinner enemies in Sky Deck:

The white eyes are caused by an excessive amount of specular lighting. This is what these enemies look like in the Dreamcast version:

In addition to the above, the PC version has other major problems with character lighting. Half of character lighting values are never used in the PC version – only Ambient and Specular 1 colors are applied to the model, whereas Color 1, Color 2 and Specular 2 components of the palettes are never used. This makes it technically impossible to have any kind of complex gradients for character lighting in the PC version. Perhaps the developers didn’t implement support for those additional values because the Gamecube almost never used them anyway. The PC version also has a problem with excessive specular. The game adds a directional specular light regardless of the model’s material flags. Although the amount of specular lighting can be controlled, in SADX it’s inflated to extremely high levels, especially in the PC version, which results in the infamous problem with the characters being “too shiny”. Interestingly the 2010 port (Dreamcast Collection/Steam) uses a shader for character lighting, and the lighting on the characters and objects looks a lot closer to what it looked like on the Gamecube. This is one of the few advantages the Steam version has over the 2004 PC port, which is otherwise far superior (downgrades mentioned on this blog notwithstanding).

To compensate for the removal of palette lighting, the Gamecube version uses three approaches to creating stage lighting:

  • The Stage Lights system that we’ve discussed above
  • Semi-transparent models that are overlayed on top of other meshes to create an illusion of a shadow
  • Fake lighting using baked-in vertex colors

Out of these three, only Stage Lights are “dynamic”, i.e. not attached to the level model. With the Dreamcast version, the same level could have completely different lighting with a simple swap of PL/SL files. The SADX counterpart of that is the Stage Lights system, which is used for such things as daytime changes in Adventure Fields. However, the other two types of lighting are baked into the level model itself and stay the same regardless of the time of day. The semi-transparent models (which look like this) are barely used in the game in stages other than Station Square and Emerald Coast, and there’s little to discuss about them – they’re just semi-transparent shapes overlayed on top of some level pieces. Vertex colors, however, are a bit more interesting.

Vertex colors are a relatively ancient technique used in games to enhance color variety without using a different texture. Vertex colors are color information stored for each vertex (point) in a model, which can be used for various things, such as transparency or ambient occlusion. Palette lighting in the original game is also done using vertex colors.

The main advantage of the Dreamcast version is the “dynamic” nature of vertex colors, which can change depending on light direction, the model’s material flags, camera position, the colors in the palette and the light type. In SADX, however, this kind of lighting is faked because the vertex colors are static. Once a model has vertex colors baked in, they will never change no matter what happens to the environment. This may be sufficient for most Action Stages because they don’t need to change, but problems arise when vertex colors are used on objects or in areas where lighting changes significantly, for example in Sky Deck or in the Past cutscenes. With palette lighting it’s possible to switch to a separate palette to create a completely different look without touching the level’s model. But SADX vertex colors always stay the same.

There have been arguments that the SADX levels are inherently “better” because they have “beautiful” vertex colors baked in, while the SA1 levels don’t have built-in vertex colors. While the point about SA1 levels missing vertex colors is correct, the actual argument got it entirely backwards. The levels in SA1 are meant to work with the Lantern lighting system. Obviously they don’t have static vertex colors because vertex colors are generated dynamically by the palette lighting system. In SADX, however, the static vertex colors were added to camouflage the removal of palette lighting. Moreover, calling the vertex colors in SADX levels “beautiful” would be a bit of a stretch as they are nowhere near as vibrant and diverse as the original game’s lighting – see each level’s page for a closer comparison. There’s one potential advantage of having the vertex colors baked in – the ability to customize lighting per vertex. From a technical standpoint this allows more control over lighting than the palette-based system, and SADX does have some cool additions the original game doesn’t have, such as the lights cast on the ground by lamp posts in Speed Highway. However, most of the time the developers didn’t bother to add this kind of detail, and the original’s lighting looks vastly superior as a result.

Realtime lighting effects aren’t possible with built-in vertex colors. Note how the lighting changes on all level pieces on the Dreamcast, while the Gamecube version only changes the skybox:


The problem with vertex colors being static causes many lighting details to disappear in SADX. For example, the lighting on such objects as rings, or boxes in Red Mountain, or enemies, reacts to the environment around them in the original game. So if you saw a box in Red Mountain Act 1, it would have Act 1’s palette, but in Act 2 the same box would have Act 2’s palette, which gave it a red glow. With a system like that no longer in place, vertex colors stay the same regardless of which level it is. It would’ve been possible to palettize such objects using the character/object lighting system in SADX to give them more vibrant lighting, but other than excessive specular glow in some cases the SADX object/character lighting system doesn’t bring back the original game’s vibrancy. In the comparison below the boxes use the same model, but their lighting reacts to the environment much more prominently in the Dreamcast version due to the use of two palettes (diffuse + specular), while SADX relies almost exclusively on ambient lighting:


To make matters worse, the PC version (and all later versions based on it) ignores built-in vertex colors for all objects that are not part of the level model. For example, look at one of the pinball entrances in Casinopolis: it has green vertex colors in the Gamecube version, which are missing in the PC version (Left: Gamecube, Right: PC):


The model in the PC version still has vertex colors, but they aren’t applied because the functions that render object models in the PC version ignore vertex colors. This issue is persistent across all later ports as well, making the Gamecube version the only version that displays those colors properly.

Like with texture quality, this creates a situation where the most accessible versions of the game have much worse lighting than the Gamecube version, which was already inferior to the Dreamcast version. Thankfully the Dreamcast version’s lighting engine was almost completely recreated in the 2004 PC port by SonicFreak94. Visit the “Fixing the PC version of SADX” section for more information on how to install the mods and experience the original game’s lighting on PC!

You can compare the lighting in individual Action Stages and Adventure Fields by going to level comparison pages using the top menu.

Texture quality downgrades

When Sonic Adventure was redesigned with the “DX” branding, some of its Action Stages and Adventure Fields received new textures. In some cases those textures are higher resolution than the Dreamcast version, in other cases they aren’t. Some offer more variety than the original game, most of them don’t. In some cases the textures are completely new, in other cases the new textures are recycled or slightly edited Dreamcast textures, sometimes in lower resolution (Final Egg) or with reduced saturation (Ice Cap). You can read more about textures used in a particular level on each level’s page. This page is about texture quality in general. It examines the problems with texture quality in SADX Gamecube and PC and explains why the quality reduction happened.

Textures that weren’t redrawn for SADX (which make up the majority of textures in the game) were recompressed each time the game was ported to a platform that used a different texture format. The Dreamcast’s native PVR format is rather limited and allows only a couple of texture formats. The Gamecube’s GVR format is more flexible than PVR, and allows several more texture formats. Both formats are lossy (unlike BMP or PNG for example), which means some source information will be lost when a texture is saved in a format like that. The developers of the original game handled PVR limitations with great care (or they just had good conversion tools), and the Dreamcast version has pretty sharp textures for an old and limited format like PVR. Normally there would be no issue with converting a PVR texture into some other format. In SADX, however, there is a visible quality loss. Let’s see why.

Here are the most common PVR texture formats used in the Dreamcast version:

  • RGB565 – an opaque texture where each pixel uses 5 bits for red and blue and 6 bits for green.
  • ARGB1555 – a transparent texture where each pixel uses 1 bit (on/off) for transparency and 5 bits for red, green and blue channels.
  • ARGB4444 – a transparent texture that uses 4 bits for red, green, blue and transparency.

The GVR format used in the Gamecube version supports additional texture formats, such as ARGB8888 (8 bits for each color and transparency – same as in lossless bitmaps), as well as DXT1 compression. However, when the Dreamcast textures were converted into GVR, the source format (for example, RGB565) was neglected, and the destination format didn’t accommodate for all the color information that was present in the original texture (for example, instead of 5 bits for each color, only 4 were used). As a result, some information was lost when the textures were converted, and most textures in the Gamecube version are lower quality. The recompression happened again in the PC version, which switched the textures back to PVRs. Instead of using the original PVR textures from the Dreamcast version, the developers decided to recompress the already lossy Gamecube textures back into PVR, making the same mistake for the second time. It’s quite likely that the developers of the port didn’t assess texture quality after conversion. On the retail Gamecube disk of Sonic Adventure 2: Battle there is a leftover script that was used to convert the Dreamcast PVM texture archives into Gamecube GVM archives. It’s highly probable that something similar was used for each port of SADX.

It must be said, however, that there are at least several textures in the Gamecube version of SADX that appear to be higher quality than the Dreamcast version. These textures are sometimes found in levels that were redesigned in SADX. At the moment there are only six textures known in the entire game that have better compression in the Gamecube version. One texture is found in the Mystic Ruins main area (see below), the rest are in the first segment of Final Egg.

(Thanks BlueSpikeball for finding these textures in the Gamecube version!)

Other than these few, the Gamecube version’s texture quality suffers quite significantly. The PC version’s textures are even worse. Depending on the source texture the difference may be barely noticeable, but in many cases it looks like a bad JPEG recompression. It’s especially noticeable with low-resolution textures and gradients. Here are some examples:

Apart from lower texture quality, the PC version suffers from lack of mipmaps. Mipmaps are smaller copies of a texture used to display it from a distance. Here is a typical texture with mipmaps from the Dreamcast version:

Mipmaps are beneficial because they give the textures a smoother look. The 2004* PC version doesn’t have mipmaps, which makes the game look significantly worse because the distant textures are reduced to pixelated garbage. It’s especially noticeable in motion with a lot of flickering. Thankfully the Mod Loader has a built-in feature that generates mipmaps for all textures, and before the Mod Loader there were texture edits for the PC version that added mipmaps. These fixes are essential if you’re playing the 2004 PC version with original textures.
*The Steam/nextgen console port doesn’t have built-in mipmaps either, instead it generates them on the fly like the Mod Loader. The textures themselves are the same between these ports and the 2004 PC port. While those ports don’t have the flickering, all other points regarding texture quality mentioned in this post apply to the Steam/nextgen console versions as well.

Here are some comparisons with mipmaps on/off in the 2004 PC version:

Anisotropic Filtering off:

Mipmaps off
Mipmaps on

Anisotropic filtering 16x:

Mipmaps off
Mipmaps on

Although anisotropic filtering improves the look of distant textures, it can’t completely remove distant flickering that you sometimes see in motion. The only real solution for that is to use mipmapped textures. But even when not in motion, the mipmapped textures look a little smoother. For comparison, here is what the “maxed out” texture quality looks like.
Anisotropic filtering 16x, Dreamcast textures (SADX Mod Loader + DC Conversion):

Another issue with the PC/Steam/nextgen console ports is texture mirroring. Although the game engine supports mirroring natively, for some reason the developers decided to mirror some of the textures manually and adjust the model UVs to accommodate the change. This wouldn’t have caused problems on its own, but the mirrored texture is often squeezed into the same resolution as the original unmirrored texture, which means the resolution of the final texture that is applied to the model is reduced. In addition, the mirroring in the PC version is usually done by flipping the texture horizontally or vertically, while it would’ve looked a lot better if the texture was rotated. Here’s an example illustrating both problems:

Here’s another example of mirrored textures from Twinkle Park. Although the light texture’s horizontal resolution was increased (or the texture was just stretched), the trap door texture is quarter the size (half the resolution) of the original Dreamcast texture:

In addition, the developers sometimes adjusted the UVs on the models to use a mirrored texture, but forgot to mirror the texture, and vice versa. There are several noticeable problems with texture mirroring in different levels in the PC version. You can read more on that in posts dedicated to each level. Twinkle Park and Lost World are good examples.

It may be hard to discuss artistic changes in SADX because everyone’s aesthetic vision is different. Someone may prefer the more “realistic” look of the new textures introduced in SADX. Those who prefer the original Dreamcast look may think those new textures look lifeless and boring (in some cases they are literally the same textures but desaturated), but to each their own. However, when it comes to textures for levels that weren’t redesigned, the Dreamcast version has the highest quality textures, and each subsequent port has more and more problems coming from mindless recompression.

This is a pretty terrible situation because the Dreamcast version is now the least accessible release, while the inferior PC and nextgen console ports, which are the most accessible ways to play the game right now, have got the worst quality textures out of all versions of the game. Combined with broken lighting and a plethora of other problems in the ports, people who play them first without knowing what the Dreamcast version was like may get a wrong impression of the game. This could be part of the reason Sonic Adventure is no longer remembered as fondly as it used to be. The Steam and nextgen console ports in particular have done a lot of damage to the reputation of the Dreamcast classic.

Thanks to the efforts of the SADX modding community, the textures in the 2004 PC version are no longer an issue. The developers of SADX Mod Loader have added a texture pack feature, which allows to load custom textures in lossless formats like PNG for any part of the game. The Dreamcast Conversion mod restores original PVR textures for the whole game, and the HD GUI mod adds custom high resolution textures for HUD, menus and other 2D items. To install these mods, head over to the “Fixing the PC version of SADX” section of this blog.

Character model downgrades

Character models in SADX are the cornerstone of the SA1 vs SADX debate. They’re one of the few aspects of SADX that can be considered an improvement over the original game as they have more polygons resulting in a more detailed look. It’s particularly noticeable if you look at characters’ hands. Dreamcast character models have “mittens” like many other games at the time, while SADX models feature hands with clearly separate fingers.

From a purely technical standpoint there’s no argument about it: more polygons = more detail = better. But the SADX models aren’t just improved SA1 models with a better polygon count. They are also different in proportions, they use different textures and are missing several effects from the original. But first, let’s have a look at the following comparison just to see how they differ on a basic level. This comparison was done using Dreamcast and PC versions with several hacks, where we set up a test environment to ensure the models are placed in the exact same spot and have the same lighting:






E-102 Gamma*

Super Sonic

*Apart from some material flags, E-102 Gamma’s model is identical to its Dreamcast counterpart, but there’s a transparency issue with his chest, which will be discussed separately.

Some people prefer the higher poly SADX models, while others say they prefer the original models aesthetically. Some people argue that the SA1 models for Sonic, Tails and Knuckles have proportions resembling those characters in the classic Sonic games, while the SADX models look closer to more recent Sonic games, especially Sonic Adventure 2. This makes sense because SADX came out on the Gamecube after SA2B, and perhaps this prompted the developers to redesign the models so that the newer release wouldn’t look so different from the sequel that came out first on the Gamecube.

I’d also like to mention the redesign of Sky Chase models, which replaced the low-poly “Saturn” style models with more detailed models. This is also an improvement over the original game.

Higher polygon counts and separate fingers are objective improvements, and the rest is a matter of personal preference. However, in many aspects the updated character models are poorly implemented in SADX. Here’s a list of problems with the SADX models that didn’t exist or were less noticeable with the Dreamcast models:

  1. The “fur” textures for all characters were replaced with simple colors or gradients. Some people may not like the “grainy” textures on the Dreamcast models, but replacing the “grain” with a solid color seems like loss of detail. It would’ve probably looked better if the original texture was remade in higher resolution.
    Here’s a comparison of the “grain” texture between versions:
  2. The updates are inconsistent as only the main characters were updated:
    a) Tikal and Eggman only received the higher-poly hands, and not all their models were updated – e.g. Eggman’s low-poly models in Egg Hornet and Egg Viper were not updated at all.
    b) Amy’s model in the cutscene where she is captured by Zero is still using her Dreamcast model with mitten hands. Same problem with Tails in the cutscene where Sonic sees him crash. Gamma’s flashback with Amy also wasn’t updated. Sonic’s Light Speed Dash aura also wasn’t updated.
    c) The jumping/rolling models for characters were not updated. They use the SA1 hand models with SADX hand textures, which doesn’t look too great together with broken vertex welding and lower quality textures. To be fair, vertex welding is broken on the Dreamcast too, but at least it has the correct textures. Lack of updates to anything besides the most visible things is jarring and illustrates the lack of effort put into the model upgrades.

  3. The screenshots seen in the endgame credits were updated to feature new models and environments, but character tutorials and final credit screens still feature the old levels and old models with mitten hands.
  4. The updated models are inconsistent with other models in the game. The higher-poly models of Sonic and other characters look strange when they are standing next to NPCs because the NPCs use much more basic models. This was already noticeable in the Dreamcast version, but SADX made the contrast even more jarring. The best example of this inconsistency is Knuckles standing next to an NPC in the Echidna City. His original model looks a lot more consistent with the echidnas than his SA2-inspired model used in the ports.
  5. The updated models don’t follow theĀ design guidelines from the Sonic Adventure Stylebook (scroll down a bit or search for “stylebook”). They use wrong shapes and proportions, whereas the original models follow them quite closely. Considering that SADX is supposed to be a better version of Sonic Adventure, the updated characters don’t represent the original game’s artistic vision.
  6. The Dreamcast models had some gloss on them, but the SADX models have much more gloss, which makes them look like plastic. Many people find the excessive gloss unappealing, especially in the PC version, where you can install a NoGloss mod to fix it, or use the Lantern Engine mod to tone it down. The gloss difference is the side effect of the inferior lighting system in SADX. Check out the section on character gloss in the Lighting post to find out more.
  7. The new hands are good to have, but Amy has got monster hands with very long fingers and it looks a bit freaky.
  8. The updated Sonic model has an animation error causing Sonic’s eyes to disappear during his “hanging” animation.
  9. The more rounded shoes are good, but the textures used on them were squeezed into one texture, and that texture isn’t very detailed. For example, Amy’s shoes look “dirty” because of the noise that comes from upscaling a low-resolution shoe texture.
  10. There is a visible seam between the upper and lower halves of Big’s body in SADX. Big’s model in particular is a great illustration of how a higher poly count improves almost nothing. Did you know that the SADX model has a higher poly count for Big’s body? I didn’t because it looks exactly the same to me.
  11. Super Sonic has lost the reflection effect (environment mapping) on his body and is now using a simple yellow texture.
  12. Super Sonic’s foot sticks out of his aura (lol).

Some people say the SADX models have better textures. Other than the “grain” mentioned in point 1 above (which is still debatable), this isn’t entirely true. Here’s a comparison of SA1 textures with SADX textures for Sonic:


You can see that the textures used for Sonic’s face and body (stx_hoho and stx_hara), Crystal Ring (stx_itemring) and the shoe buckle (stx_kanagu) are higher resolution in SADX*, but the textures for Sonic’s jump ball, eyes, nose, teeth etc. are the same resolution. You can also notice that the SADX model uses less textures. This is because most of the shoe textures have been squeezed into one. Normally this wouldn’t cause any issues, but in some cases the combined texture in SADX is less detailed than the individual textures used in the Dreamcast version (see the Amy’s shoe example above).
*Interestingly the “Autodemo” prototype of the Dreamcast version has higher resolution character textures that are mostly on par with SADX. These textures are included as an option in ItsEasyActually’s Dreamcast Characters mod.

I’d like to go back to the “grain” issue again here. The texture in question is stx_btest1, which looks like this:

As you can see, the SADX texture is split into four pieces, which are applied to different parts of Sonic’s body. If we color code the parts, it looks like this. This is obviously an improvement over just one texture in the Dreamcast version, but it also means the resulting texture that gets applied to Sonic’s body is half the resolution of the Dreamcast texture in addition to the loss of “grain” discussed earlier.

The textures that weren’t redesigned in SADX suffer from quality degradation. A common misconception is that the texture quality downgrade happened only in the PC version, but the Gamecube version’s loss of texture quality is also quite significant. For example, look at what happened to the texture you see on Sonic’s jumpball:

Note that all textures in the game have suffered from quality reduction, not just the character textures. More on it in the Textures section.

Even Gamma’s model, which wasn’t redesigned, is suffering from some problems in SADX. There’s a part of his body that looks like this:

This is what it looks like in different versions of the game:


As you can see, the only version of the game where it renders correctly is the Dreamcast version. The front shield texture is supposed to be semi-transparent so that you can see the light behind it. The texture is still transparent on the Gamecube, but the light part is invisible and you see other parts of Gamma’s body through it. In the PC version the front texture is simply opaque. The same problem affects other robot characters, which also have body parts like that.

Some time ago we found out what was causing this. Gamma’s chest uses a mesh type that is not supported in SADX. However, that mesh type is exactly the same as another mesh type (trimesh), which is supported in SADX, so making it work would’ve been extremely trivial, and even if they didn’t want to support it they could just change a few bytes in Gamma’s model to make his chest use the trimesh type. In the PC version and later ports transparency is disabled entirely by using a constant material with no transparency on the whole model. This also would’ve been trivial to fix, although it may have been intentional.

Also Gamma’s eyes, parts of his feet and head base are supposed to be lit up at all times. The “ignore lighting” material flags for those body parts were removed in SADX for some reason, so Gamma’s eyes are no longer lit up. Same with Big’s eyes that no longer glow in the dark.

Now let’s talk about missing effects. When Sonic rolls around, the blue trail he leaves behind has an interesting “rainbow” effect in the Dreamcast version. The trail is always purple in SADX, and the “rainbow” effect is missing:


This happens because SADX never sets the correct texture for the effect. It’s supposed to cycle between the first and second texture in SON_EFF.PVM, but SADX sets one of the textures meant for the longer dash trail, which is always purple.

Sonic’s Light Speed Dash aura is also different. It looks more jagged in SADX and its glow is a lot brighter. It’s quite likely that the developers couldn’t get additive blending to work properly with the glow model (which uses many transparent layers), so they decreased the transparency to make the problem less noticeable. However, that resulted in more “jagginess” and a worse look of the aura overall:


The original Japanese release of Sonic Adventure had an interesting “motion blur” effect when Sonic was running at high speed. It involved real-time replacement of Sonic’s shoes with stretched models to produce an effect akin to what you see in classic Sonic games. In addition to the stretchy feet, the game rendered Sonic’s model multiple times with various levels of transparency to imitate motion blur. In later releases on the Dreamcast the effect was toned down – the transparency was removed, but you could still see the stretchy feet sometimes. In SADX the effect was removed entirely:

Dreamcast JP
Dreamcast US

Sonic’s model looks glitchy in the SADX screenshot – the shoe buckle is missing and the bottom of the shoes use a strange looking yellow texture. Those are the leftovers of the stretchy shoe effect. In SADX, the code for the stretchy shoes is still active, and when Sonic is running fast the shoes switch to an old model that wasn’t updated to use the final SADX textures. This is why the bottom of the shoes is using the buckle texture, and the buckle itself is missing. This bug has always been visible in official promotional materials, such as the Steam page.

A somewhat similar effect was removed on Tails’ tails. If you go back to the model comparisons near the top of this page, you can see that Tails had more than two tails in the Dreamcast version. Those semi-transparent tails showed up when he was running or flying, creating another variation of the “motion blur” effect. He still retains those extra tails in SADX, but the transparency on them is deactivated, which looks a bit strange:


Knuckles has also had several effect downgrades. The Shovel Claw has lost the environment mapping effect that gave it a shiny metallic surface:


Knuckles’ Maximum Heat attack aura is also different in SADX. It looks noticeably worse in the PC version, although the Gamecube version also looks somewhat broken:


Even with all the problems mentioned above there’s a lot of subjectivity when it comes to saying which models are better. However, in a supposedly enhanced port we shouldn’t have to choose between higher polygon counts for some character models on one side and worse texture quality, removed effects and broken character lighting on the other side. Most of the downgrades discussed here have been fixed in my Dreamcast Conversion mod, where I restored or recreated the missing effects. SonicFreak94‘s Lantern Engine mod takes care of level and character lighting, and ItsEasyActually‘s Dreamcast Characters mod is for those who prefer the original Dreamcast models in the PC version. Learn more about the mods here!