What is it? I wrote a program that is an installer, launcher, and patcher for a few Sega PC games that were originally released for Windows 95/98. The games had issues or broke entirely on newer versions of Windows. Now they work again, with a few minor improvements even. So far, these games are supported: Ecco the Dolphin PC Sonic CD 1996 Sonic & Knuckles Collection Sonic 3D Blast Some boring technical details: Those games use DirectDraw and 8 bit / 256 color palettized video modes. Both are obsolete nowadays, and while the compatibility layer of Windows still supports/emulates them, it doesn't always work for whatever reason (e.g. buggy game code). So I wrote custom implementations of the necessary DirectDraw interfaces (IDirectDraw, IDirectDrawSurface, etc.), and a few other Windows API functions, that either wrap or replicate what the games expect. That code is packaged in a "ddraw.dll" file that looks like the real one from Microsoft. However, some of the games load ddraw.dll dynamically, after executing some "bad" code (e.g. checking if a 256 color mode is active). That's why a launcher is necessary, it ensures that my ddraw.dll gets loaded and run right at the start of the game, so that it can perform the necessary patches in memory. I could also patch the files on disk, of course, but I've decided against that. It is just too messy and gets complicated if I need to undo or update patches. Keeping the original files unmodified on disk and doing all the patching in RAM is the best solution. What exactly does it change? Many little things that I can't be bothered to write down. Some important ones: Flexible window handling (free resizing, preset sizes, try Alt+0..9), quick fullscreen toggling... (all games except Ecco). Music playback from file instead of CD, bass.dll and streaming plugin support for all kinds of formats. Custom loop points supported for ogg and flac. All registry and ini file operations of the games get redirected to a single ini file that also holds the patcher configuration. The file is <exename>.ini, so if you'd like to have several configurations for a single game, just make a copy (or hardlink) of the exe and call it <exename>.whatever.exe (e.g. "sonic3k.2.exe"). Mapping joystick / gamepad POV hat / dpad to analog axes in all games. Skipping annoying intro logos and videos. Palette blending; mainly for Ecco, still experimental in SCD and particularly S3K. Freely configurable keyboard and gamepad bindings (not fully implemented yet). Midiout.dll of S&K Collection caused an access violation on termination, keeping sonic3k.exe in memory... Diagonal key input for Sonic CD. Only worked for gamepad. Savegame dialogs and several graphics modes were totally broken in Ecco. and more... Why? Yes, I know you can emulate most of those games, and Taxman's rebuilt Sonic CD is great. I started this project last year, specifically for Ecco PC, because unlike the Sonic games, that game did never receive any official re-release. Yet it is pretty much the best version of Ecco 1 available. If you're interested in that game, you can find a great bundle here. After that was done, I generalized the code a bit and applied it to the old Sonic games I had lying around. It took some restructuring/refactoring, but it worked rather well. Also, it's not like I'm new to this. I've made Sonic CD and Ecco PC "XP ready" a decade ago already (does anyone remember SonicCDfix? I reused some code from that.). But the patches back then were rather simple and superficial compared to this. Where? Download here. A little extra for Sonic CD 1996. - higher quality sound effects and Xvid-encoded intro movie. The original uses Indeo, which is no longer included in Windows. All other videos use Cinepak, which is still there. To do... There are a few minor issues I still need to resolve. Palette blending tends to get stuck in SCD and S3K; you can turn if off and on via Alt+B. Should probably also be gamma-corrected. Key/gamepad binding needs to be finished... you can already assign various stuff to buttons in SCD, but only by editing the ini file directly. If you go to the "[JoystickControls]" section and add "JoyButton11=menu503" and "JoyButton12=menu201", for example, then button 11 will toggle debug mode and button 12 will toggle fullscreen (as 503 and 201 are the menu command IDs for those actions). Some upscaling algorithms and dedithering would be nice to have, but that's a pipe dream for now. Comments, suggestions, and bug reports are welcome.