W elcome to Ecco Online, the Ultimate Ecco the Dolphin website!
We are a community dedicated to reverse engineering, game oddities and preservation of resources pertaining to the series. Check out ourpage to learn more.
Before I discuss current progress, I would like to reiterate what Blue Dream is...
What is Blue Dream?
Blue Dream is a game engine inspired from the game engine used for Ecco 2: The Tides of Time. It will eventually be used in our upcoming Ecco the Dolphin fan game, currently titled Ecco the Dolphin Revisited.
What tools are being used to develop Blue Dream?
Blue Dream is written almost entirely from scratch using the C programming language. It does use Direct2D to display the final bitmap to the screen. However everything used to render bitmaps in Blue Dream is actually part of the engine itself. In other words the graphics rendering tools are also written entirely from scratch.
What makes Blue Dream unique is it’s use of reverse engineered code from Ecco 2. It can not only decompress the tiles and level data but it can also mimic portions of a Mega Drive Video Digital Processor (VDP for short).
Over the Memorial Day weekend I was finally able to bring Blue Dream to life. I built a rendering pipeline called a plot_state, a linked list that is used to define attributes of a tile, or a small bitmap that is drawn to the display. The plot_state is used to hold a variety of tiles of any size with a function pointer that is executed when the tile is ready to be rendered.
What’s interesting about the plot_state is its use of an exchangeable rendering function. This allows a tile to be rendered in a variety of interesting ways which will be needed to mimic certain behaviors of the Mega Drive’s Video Digital Processor.
One of the most important aspects of mimicking the Mega Drive VDP is translating color information to a PC. I was able to do this thanks in part by being able to do a side by side comparison of Blue Dream with an emulator.
Once I got the colors to load correctly I was ready to load raw tile information. What I loved about this was being able to switch palettes and watch as the tiles changed a swell.
With the tiles loaded it was time for the big moment...To render a metatile, or a large graphic used to represent a piece of an in game level. To do this I needed metatile data which is basically a nametable that describes what tile is to be loaded, what palette it should use and how it should be displayed.
With the level graphics out of the way all I had left was to find the sprite data. Lucky for me they aren't compressed!
Long story short, I finally did it after all these years!