Home       Navigation       Forums       Discord

Project Blue Dream Begins

This weekend I begin coding Blue Dream, a game engine that will power our future Ecco the Dolphin fan game.

Below are the details of what I hope to achieve by Tuesday, (May 26th 2020).

Blue Dream Game Engine - Memorial Day Coding Marathon

Target Platform: Windows with future Multi-platform Support.

Libraries Used: Direct2D, DirectSound, and XInput.

Summary: Blue Dream is a game engine inspired by the one used by Ecco 2: The Tides of Time for Mega Drive.

3 Day Weekend Goal:

To build a tile engine that can load palettes and level data from Ecco 2: The Tides of Time.

How will it work?

This engine will utilize an Ecco 2 Rom and a Save State that will have all the tile and level data already decompressed.

I reverse engineered 2 decompressors and a tile rendering engine from Ecco 2. They are capable of extracting tiles, level data, and can render level graphics to the screen. The tools I built were all projects I built over a period of a few months. These tools are named Storm Breaker – A Tile Decompressor, Ragnarok – A Level Decompressor, and Zantetsuken – The Tile Engine.

Unfortunately these tools are not yet compatible with Blue Dream as they need cleaning up. This is why I am utilizing save states where the data is already decompressed.

Why load only part of the level data?

Ecco 2 is comprised of two tables of level data, both appear to use indexes that point to metatiles. The second table is a little more complex and contains what I suspect are dynamic metatiles. These dynamic metatiles take an existing tile and add things to it from other tiles, metatiles. I don’t know much about this table, however if I have time this weekend I will try to decode and display it.

Todo List

  • Load Palettes from the Ecco 2 ROM.
  • Load decompressed tiles and level data from a Save State.
  • Load all Metatile data from the Ecco 2 ROM.
  • Convert palettes from Mega Drive RGB format to 32-bit PC BGRA format.
  • Build a data linked list structure for holding named (indexed) tile data that will contain index values, x, y coordinates, a group id, display priority, flipping values and anything else that seems to be necessary.
  • Load metatile data into data structures.
  • Build a set of functions and data structures for creating tile maps. These tile maps will be used in a similar fashion as the Mega Drives name tables (such as Plane A, B and Window). They will also be used for grouping sprite graphics together.
  • Create a processing pipelines for the final rendering function. This will allow me to create a linked list that I can add as many functions as I want to. These functions will act as a pipeline to process graphic data before or while rendering to the display. There will likely be a pre and post function processioning pipeline. They will act as interrupts would on a Mega Drive which are used to create raster effects.

If you would like to follow my weekend coding marathon come join our discord. I will be posting updates with videos and screenshots!

https://discord.com/invite/ahCvaUB