Sonic Adventure DC-HD first release

Sonic Adventure DC-HD is a new way to play the Dreamcast version of SA1 on the flycast emulator.

You can play SA1 with the following improvements:

  • The game runs at 60 FPS during gameplay without framerate-related glitches (hopefully).
  • Widescreen hack without model clipping or HUD stretching (some HUD stuff is offset though – this will be fixed eventually).
  • All videos can be skipped by pressing Start, not just the intro.
  • Cheat code to disable all cutscenes.
  • If you cannot run in a straight line with your controller/keyboard, there’s an optional patch for that.
  • Less choppy ocean in Emerald Coast (similar to Dreamcast Conversion for SADX PC).

Sonic Adventure DC-HD is distributed as a patcher program which you use on the original GDI of SA1 (US 1.005, animated title screen) to produce a patched version. It also comes with a cheat file that you need to load in flycast if you want to use the widescreen hack. Follow the instructions on the repo for more details.

This project is a work in progress. Not all features are complete and new features may be added in the future.

SA1 DC-HD has been tested on the standalone version of flycast on Windows and Android. The modified image is only meant to be used on the flycast emulator. 60 FPS and the widescreen hack will not work properly on other emulators or real hardware.

SADX Debug Mode version 2.0

Today I’m releasing an update for the Debug Mode mod that adds a free camera mode.

Using the free camera mode

Press Y on the keyboard to enable free camera. When the free camera mode is enabled, you can use the mouse to move the camera around. The control scheme is similar to the one used in 3D editors in SA Tools.

  • Move the mouse to rotate the camera.
  • Hold Left Shift and move the mouse to move the camera.
  • Hold Control and move the mouse up and down to zoom in and out.
  • Press both Left Shift and Control to lock the camera in place. Press them again to unlock it.
  • Press Numpad + and Numpad – to change camera speed.
  • Press Y again to re-enable vanilla camera. It will remain locked in place until the character touches a camera trigger.

I would like to thank Speeps for providing the source code of an unreleased mod with the the original free camera code, which became the basis for the free camera mode in this mod.

Sonic Adventure VMS + Chao Editor first release

Today I’m releasing a new tool based on the original SA1 DLC editor. This tool has the DLC editor integrated, but its functionality expands to cover more VMS files in SA1. Eventually I would like it to support all of the formats described here, but the highlight for today’s release is the inclusion of a new Chao editor.

Like the original DLC tool, the updated editor will be included in SA Tools, which also have a big update underway.
UPDATE: It’s been released and is now included in SA Tools.
The Chao editor is experimental and will be updated as more information on SA1 Chao data becomes available. There is no documentation for it at the moment, although the most important data should be self explanatory.

The Chao system used in SA1 is the least researched of all Chao games. There are several Chao editors for SADX and SA2, but the only Chao editor for the Dreamcast version of SA1 was Tyro’s VMU editor that requires running on an actual Dreamcast VMU or a VMU emulator, which I found inconvenient. Besides, there have been some updates regarding SA1 Chao data (for example we now have the full SA1 Chao data struct from SADX X360 symbols), and I wanted to make use of that new knowledge to help advance SA1 Chao research. Although several aspects of it are now known better, Tyro’s notes on SA1 Chao data were one of the most important sources of information for developing the editor. I would also like to thank the Chao Island member UltimaNumber, who kindly shared the bits of information I was missing and explained how SA1 Chao data works.

The tool can import all Chao VMS data. Data produced by the Japanese version is also supported:

  • SA1 Chao Garden save file
  • Download Data (Black Market Chao)
  • Chao Adventure (created when you take a Chao out for a walk)
  • Upload Data (created when you hold Y+A as the Chao goes in the transporter)

At the moment saving is only supported for Chao Adventure and Download Data, but you can export selected Chao from the garden save file as Download Data or Chao Adventure data. There’s also an option to export files with headers used by the Japanese version of SA1.

As Chao data is rather complex and the editor is experimental, there may be some bugs, especially with saving data. Also, expect UI changes in the future.

I’d like to thank Speeps for providing a screenshot of Buddy the Chao that I used as an icon for this tool.

Sonic Adventure patches (Better 60 FPS + drift fix)

If you’re interested in hacking Sonic Adventure, you’ve probably seen 60 FPS and widescreen codes for the Dreamcast version floating around. The problem with 60 FPS codes for SA1 is that they make cutscenes run at double speed. Here’s my understanding of why it happens and a solution for version 1.005 (US, animated title screen).

The game uses two values to control framerate and speed: the frame increment (8C754EBC) and the multiplier (8C754EC4) used in physics and other things. The frame increment controls the actual framerate (1 for 60 FPS, 2 for 30 FPS), and the multiplier speeds up or slows down the physics to match it (1 is original speed). The Dreamcast version runs at 30 FPS everywhere except menus and Twinkle Circuit. In 30 FPS mode the frame increment is set to 2, and the multiplier is also set to 2 to speed up the physics to match the reduced framerate. In menus and Twinkle Circuit both values are set to 1, so the game runs at its original speed at full framerate.

This would be all fine, but the problem is the cutscenes. They are programmed in double speed, so the game sets the frame increment to 2 and leaves the multiplier at 1 to get them to work at half speed. This is also the real reason SADX cutscenes are still capped at 30 FPS – updating them would require fixing the timings in all functions used by cutscenes to work properly at 60 FPS, which is a lot more work than simply unlocking the 60 FPS mode in levels like the developers did.

The problem with existing codes is that they don’t account for the above and simply force both values to 1, which causes cutscenes to run at double speed. To fix this, instead of changing the values directly we can do the same thing SADX developers did, and change them depending on what happens in the game. Like in SADX, there is a function that is called to set the required frame increment and multiplier. All we have to do is patch the arguments that are passed for this function when the game loads levels, and leave cutscenes alone. Here are the addresses for version 1.005 (US, animated title screen). Just change the bytes at these addresses from 2 to 1, and the game will set framerate modes like SADX. If you use Demul with Cheat Engine, replace the starting 8C with 2C.

8C04956E
8C04E662
8C054736
8C082AAE
8C09A1D2

Here’s also a code that you can add as a custom cheat for redream. It’s a regular CodeBreaker code so you could use it on other emulators or on real hardware.

cheat=0204956E 420BE501 0204E662 4F22E501 02054736 430BE501 02082AAE 420BE501 0209A1D2 D252E501

There are still two problems remaining with the 60 FPS code:

  • The hardware cannot handle the game at 60 FPS most of the time (sometimes it struggles even at 30 FPS), so you will get a slow motion effect like in older SA1 preview videos. Unfortunately this also affects emulators – for example, at the moment the game does not reach full framerate in redream. There was a similar problem with Sonic Colors, which the Wii can’t handle at 60 FPS, but that was resolved with Dolphin’s overclock feature. Maybe we’ll get that in Dreamcast emulators someday?
    UPDATE: It seems to be perfect on flycast, no slowdown at all.
  • There are glitches that happen when the game runs at 60 FPS. It’s possible that some things in the game were added after the decision to switch to 30 FPS was made, and perhaps they were only tested at 30 FPS. A lot of such glitches appear in SADX. For example, the Leon badnik almost never attacks the player and disappears too fast. There are visual glitches too, for example Tails’ tails are too fast, and the background in the tornado section in Windy Valley loses the multi-layered effect for one layer. A lot of these glitches are fixed in the Dreamcast Conversion mod for the PC version, and it’s also possible to fix them in the Dreamcast version if we really want it. Interestingly some issues that affected DX at 60 FPS don’t affect SA1 at 60 FPS – for example, the Egg Hornet engine sound glitch.

There’s another issue with SA1 on emulators related to not being able to run in a straight line with the keyboard and some controllers. You can fix this by disabling analog interpolation by writing 00 00 00 00 to 8C051278 and 8C051430. CodeBreaker code:

02051278 00000000 02051430 00000000

It’s not an ideal solution but that will do for now. A better fix may show up very soon.

Sonic Adventure DLC tool: GUI version released

I’ve updated the SA Tools with a new version of the SA1 DLC tool that lets you create and edit VMS files for SA1 on the Dreamcast.

Some documentation is available here.

Apart from the GUI making it easier to edit things, this version also fixes several issues with the original tool that made it produce incorrectly aligned VMS files. Now it should be possible to modify and rebuild any of the official DLCs, or create completely new DLCs from scratch.

The tool ended up being a bit more complex than I originally anticipated, and testing it was a challenge. I’d appreciate it if you try it out and let me know on x-hax if you run into any issues. Have fun!

SADX Mod Installer update

I’ve updated the Steam conversion part of SADX Mod Installer with a new UI that tells you what it’s doing and reports all errors right away. If the program crashes while trying to do anything (for example, if there’s an access error because SADX is running or some files in its folder are open in another program), it will let you try again. It also saves logs for both the installer and the Steam conversion tool in SADX folder.

This update is mainly for those who have trouble getting the conversion to succeed and end up with the game missing videos and sounds. The tool should now be able to tell you what’s wrong, though you might still have to reinstall the game from scratch and run the installer again for it to work properly.

This is likely the last feature update for the mod installer. There may be language and maintenance updates in the future, but I won’t be adding any new features or mods to it.

Dreamcast DLC mod release

The new version of the Dreamcast DLC mod is now out! You can use this mod to play SA1 DC downloadable content in SADX PC, as well as develop your own custom downloads that will work both in the mod and even in the Dreamcast version provided that you convert it using SA Tools first. Also, this version includes Tikal’s challenge, a custom DLC created previously for the Dreamcast version.

Get the mod here or simply update the previous version through the Mod Loader. If you get a “directory not empty” error while updating the mod, just hit cancel and it’ll work fine. I don’t know why it happens.

Here’s an excerpt from readme/release notes:
==CREDITS==
-SonicFreak94 for the code to play the SEGA/Sonic Team voice
-Darksecond for figuring out SA1 DLC and rank data encryption and posting it on ASSEMbler
-Sappharad for providing C# code to decrypt SA1 DLCs and for cracking the integrity check
-Daguar for giving me a hint on where to look for DLC item table
-Exant for making a lightweight “sitting Chao” model for the Tikal DLC
-Moopthehedgehog for the rediscovered Kadomatsu DLC
-TheLegendOfXela for high quality music and sound rips
-LastBreath for beta testing

==CHANGES FROM THE OLD DREAMCAST DLCS MOD==
-The mod has been rewritten from scratch to work more like the original game’s DLC system
-Text strings in all languages used in original DLC content have been preserved
-DLC content can now load in Adventure, Trial or Mission Mode
-Added Tikal’s challenge
-Lighting accuracy updates
-Custom codepage support: add system\dlc\codepage.ini with “FrenchCodepage=….” etc. to make French, Spanish or German strings use a codepage other than 1252
-Famitsu and QUO challenges no longer replace Station Square camera files with their counterparts from the original 1998 release of SA1
-Twinkle Circuit options for characters have been removed – you can now use the “Mercury GP” menu to go to any course with any character
-The “Alternative challenge timer GUI” option has been removed in favor of a more accurate SA1-like timer
-Seasonal DLC options have been rearranged
-Workarounds from the old mod to prevent DLC content from interfering with story progression have not been reimplemented

You can now make your own SA1 Dreamcast DLC

I’ve added my DLC tool to the SA Tools suite, you can find it in the SA1 folder. It’s a simple command line tool that unpacks VMS files and rebuilds them from source assets and metadata. I want to make a GUI version of it someday, but for now I want to work on something else. The tool and the data should be self explanatory for the most part, and there’s also plenty of documentation in the readme file.

For those who want some juicy details, here’s the layout of SA1 DLC files:

 * VMU HEADER
 * OFFSET	SIZE		TYPE		DESCRIPTION
 * 0		16		string		DLC title
 * 10		32		string		DLC description
 * 30		16		string		Application title
 * 40		2		ushort		Number of icons
 * 42		2		ushort		Animation speed
 * 44		2		ushort		Eyecatch type (unused)
 * 46		2		ushort		CRC (unused)
 * 48		4		uint32		Size without the header
 * 4C		20		null		Reserved
 * 60		32		ushort		Icon palette, 16 colors
 * 80		512		byte		Icon graphics
 * 
 * SECTIONS HEADER (SIZE 64 BYTES) 
 * 280		4		uint32		Pointer to item layout table
 * 284		4		uint32		Item count
 * 288		4		uint32		Pointer to string table
 * 28C		4		uint32		String item count
 * 290		4		uint32		Pointer to PVM
 * 294		4		uint32		Number of PVMs (always 1)
 * 298		4		uint32		Number of textures in the PVM
 * 29C		4		uint32		Pointer to MLT
 * 2A0		4		uint32		Number of MLTs (either 0 or 1)
 * 2A4		4		uint32		Pointer to PRS
 * 2A8		4		uint32		Number of PRSes (always 1)
 * 2AC		4		uint32		Checksum
 * 2B0		16		null		Unused
 * 
 * ITEM LAYOUT TABLE HEADER (SIZE 12 BYTES)
 * 2C0		4		uint32		DLC ID (e.g. 504 in SONICADV_504)
 * 2C4		1		byte		Enable Sonic / Enable Tails
 * 2C5		1		byte		Enable Knuckles / Enable Gamma
 * 2C6		1		byte		Enable Amy / Enable Big
 * 2C7		1		byte		Unknown, probably unused
 * 2C8		4		uint32		Regional lock
 *
 * ITEM LAYOUT TABLE (ARRAY BEGINS AT 0x2CC, ITEM SIZE 30 BYTES)
 *  0		1		uint8		Level ID
 *  1		1		uint8		Act ID
 *  2		1		uint8		Scale X multiplied by 10
 *  3		1		uint8		Scale Y multiplied by 10
 *  4		1		uint8		Scale Z multiplied by 10
 *  5		1		uint8		Rotation speed X
 *  6		1		uint8		Rotation speed Y
 *  7		1		uint8		Rotation speed Z
 *  8		1		sint8		Item type (0: model, -128: sprite, -1: invisible)
 *  9		1		uint8		Texture ID
 *  A		2		ushort		Flags
 *  C		1		uint8		Object ID for collectibles or the number of objects to collect
 *  D		1		byte		Unknown
 *  E		1		uint8		Message ID to show when touching the object
 *  F		1		uint8		Trigger distance
 *  10		1		uint8		Level ID to warp or soundbank ID (8 for MLT, 15 for ADX music)
 *  11		1		uint8		Act ID to warp to or sound/music ID to play
 *  12		2		ushort		Rotation X
 *  14		2		ushort		Rotation Y
 *  16		2		ushort		Rotation Z
 *  18		2		short		Position X
 *  1A		2		short		Position Y
 *  1C		2		short		Position Z
 *
 * DLC OBJECT FLAGS
 *  BIT_0	Unknown
 *  BIT_4	Unknown
 *  BIT_8	Solid
 *  BIT_9	Play sound
 *  BIT_10	Show message
 *  BIT_11	Hide object and disable everything except collision
 *  BIT_12	Warp
 *  BIT_13	Collectible item
 *  BIT_14	Timer item
 *  BIT_15	Starts the challenge
 *
 * REGIONAL LOCK BITS
 *  -1	Disable regional lock
 *   1	Japan
 *   3	US
 *   4	Europe
 *   7	All regions

Sonic Adventure: “Tikal’s challenge” DLC contest!

This release is for the original Dreamcast game, not SADX PC. A PC version of the challenge will be available at a later date.

Today I’m releasing something a bit special. This is the first fully custom* Dreamcast Sonic Adventure DLC that adds a new challenge without hacking the base game. It’s built like the official SA1 DLCs, and it makes use of SA1’s internal system to add objects and challenges to the game.

Download for emulators or transfer from PC
VMI file download for Dreamcast browser

To stay true to the spirit of official SA1 DLCs I’d like to make this a contest with a “real” (though merely symbolic) prize. To participate, simply record your playthrough of this challenge and share the video. You can play it on an emulator or on a real Dreamcast. The fastest player who beats the challenge in the shortest amount of time will get a free Sonic Adventure DX Steam key from me.

The contest will run until September 23rd, 0:00 (UTC). The deadline may be extended depending on the number of entries.
Submit your results here

To get started, you need to import the file SONICADV_515.VMS or SONICADV_515.DCI to your memory card. On PC you can use a memory card editor (such as redream’s save manager). To play it on hardware you could burn the file to a CD together with Dream Explorer, or use an SD card adapter with DreamShell. If your Dreamcast is connected to the Internet, you can download it from the revived official webpage directly from Sonic Adventure!

This DLC was made using a tool that I’ve been developing during the last several days. Once the tool is released you will be able to make your own DLCs for Sonic Adventure from scratch (within the limits of the game’s DLC system of course)!

*Technically it’s not the first edit of a DLC, but it is the first DLC that adds custom objectives and makes extensive use of the DLC system rather than edits object properties. Huge thanks to Sappharad for figuring out the integrity check for the DLCs, which made this whole thing possible.

Credits:
-Darksecond for figuring out SA1 DLC and rank data encryption and posting it on ASSEMbler
-Sappharad for providing C# code to decrypt SA1 DLCs and for cracking the integrity check
-Daguar for giving me a hint on where to look for DLC item table
-Exant for making a lightweight “sitting Chao” model
-The graphics are based on Sonic Adventure (+DX) assets

Enjoy!