Ecco II “X11″ Prototype [Build Date APR 13 1994]
Welcome to DARK SEA’s documentation of the second-earliest known Ecco the Dolphin II: Tides of Time prototype. This section details the differences between this test version of game and the final version, as well as the earliest known prototype version, unofficially designated the “Playable Preview”. As more information is learned about each build of Ecco II, these sections will continue to grow. If you would like to submit your own discoveries and information, please leave a comment on this page or contact me using the information here. Thanks for visiting and enjoy this artifact of Ecco history.
Download This Build
The provided binary ROM file is compressed in ZIP format. It can run on true Genesis/MegaDrive hardware or an emulator. If an emulator is used, KEGA Fusion is strongly recommended.
Download: ECCO_X11.zip
Basic Characteristics
Designation: X11 (Original Filename[s]: ECCO_X11.ZIP : ECCO_X11.C04 - ECCO_X11.C11)
Original Format: Segmented/Compressed EPROM image from official Sega CD-ROM
Build Date/Time: April 13, 1994 20:17 (Time zone unknown)
Origin: Sega of America Quality Assurance/Testing Department
Official Release: Yes
Synopsis
This version of Ecco II comes from an internal CD-ROM belonging to Sega of America’s testing department. These discs contained the source media for EPROM cartridges used by testers to evaluate games and report bugs. It is also believed this build of Ecco II was intended for magazines and other media for review/promotional purposes.
While it is unknown how much time elapsed between the build date of the “Playable Preview” and X11, this build shows dramatic advancement of the development process. Most levels are implemented in a playable state, however many bear little or no resemblance to the final version or have notable differences. Though most levels can be completed, not all can, and therefore the game is not fully playable without use of debug features. Many sprites are left over from Ecco I. This version contains some experimental algorithms and music not found in any other Ecco version.
Detailed Documentation
This section contains a stage-by-stage breakdown of this prototype build, including maps, screenshots and video capture from build X11 running on true Genesis/MegaDrive hardware.
- General Information - Documentation common to all parts of the prototype.
- Audio Documentation - Unique music/sound effects found in the prototype.
- Hidden Content - Hidden content discovered via ROM binary and savestate inspection/hacking.
- Debug Features - Developer features and how to access them.
- Stages -1 to -5 - 3D Stages
- Stage 0 - Corall Reefs
- Stage 1 - Deep Horizont
- Stage 2 - The Eye
- Stage 3 - Collect
- Stage 4 - Spiral
- Stage 5 - Shark
- Stage 6 - Globeholder
- Stage 7 - Selection Scr
- Stage 8 - Between A Times
- Stage 9 - Broken Glyph
- Stage 10 - Medusa Tube
- Stage 11 - Four In A Row
- Stage 12 - A-Maze-ing
- Stage 13 - Home Bay
- Stage 14 - Dark Stage
- Stage 15 - Medusa Entrance
- Stage 16 - Upstair
- Stage 17 - Asterite Cave
- Stage 18 - Bird Walk
- Stage 19 - Flying Bird
- Stage 20 - Giant Medusa
- Stage 21 - Vortex Arrived
- Stage 22 - Autocamera
- Stage 23 - Fastcamera
- Stage 24 - Csigaboss
- Stage 25 - Asterite Ide
- Stage 26 - Atlantis00
- Stage 27 - Atlantis01
- Stage 28 - Big-Bug
- Stage 29 - Billiard
- Stage 30 - Fishmorph
- Stage 31 - Future01
- Stage 32 - Future02
- Stage 33 - Future03
- Stage 34 - Entrance
- Stage 35 - Gravitorbox
- Stage 36 - Vortex on Earth
- Stage 37 - Vortex Entrance
- Stage 38 - Autovortex
- Stage 39 - Escape
- Stage 40 - Second01
- Stage 41 - Second02
- Stage 42 - Second03
- Stage 43 - Stomach
- Stage 44 - Sarlac
- Stage 45 - Big Whale
- Stage 46 - Attack
- Stage 47 - TMachine
The stage names are in the ROM, like preceeding some piece of data.
I first thought it was the level layout, but I can only lock the game, create a shark, screw up the water level, or mess with the collision, in second01 (it has a tiny data block)
But between Sarlac and Big Whale there is a similar wierd block of data (a very big one) called «bosshead», maybe it’s a lost level?
It is located @ 0×1C11A8
Also there is another 2 called: unver1 and logo2 @ 0×1BA718 and @ 0×1BA786, repectively.
unver1 and bosshead are present in the retail EU version in 0×1BDA10 and 0×1C2C40 (logo2 seems to be missing)
Maybe theese are the 3 intro screens from the pré-alfa?
Good observations; this definitely warrants more research.. I am fairly certain I’ve seen “bosshead” in the final US version as well.
You should register on the message board and start a topic.
I’ll be damned.
This is the level bosshead, in Ecco 2 final:


You can download a savestate of it here.
Also, unver1:

Savestate is here.
Awesome stuff, man you’re the greatest… Did you already knew it or it was new to you? You should post what your notes on the forums, I’m clueless with the ROM structure… maybe I could use it for a start…
Fooling around in Bosshead and Unver1 is decidedly creepy. But awesome.
That’s epic that you managed to find that.
Thank Jorge. I had completely managed to not notice that they existed until he brought it up. All I did was screw with pointers until they were the things loaded.
Yes; thanks much, Jorge, for locating these things.
I wonder if there are more things to be found?
Well I think you should thank tails151, after all the level pointers are harder to find/change to produce acceptable results (other than program crashes or garbled graphics) than text strings..
BTW I’ve completed a list of uncompressed graphics to be found in this ROM:
click->
http://trapalhadas.no.sapo.pt/X11UncopressedTiles.txt
That is fantastic work– I’ll be sure it gets incorporated into the X11 documentation. Are you any good at piecing together tiles and applying the proper palette, so unused graphics can be showcased in “Hidden Content”? Especially this um, Kangaroo you speak of.
Well the pallete is very hard because I think it doesn’t even belong to ecco (Its just 3 complete sprites and 2 incomplete ones besides loose tiles) but here it is:
All kangoroo’s tiles are in there
I’ve just discovered the Ecco ASCII art location (used in debug, prologue and epilogue texts) and encoding:
- It starts @ 0×0E5CD0 and ends @ 0×0E60CF. (1kB in size)
- Each char occupies 1 tile (8px * 8px) and is encoded to have always 16bytes in size, instead of 32, the Megadrive standard.
- Each 16byte block is divided in 2 halves:
- Each byte in a half (both) represents a row (8px) which means a pixel is represented by 1 bit in each half, the most weighted bit represents the leftmost pixel
- The 1st I call it the overlay half and I will explain it later
- The 2nd half, each bit tells if the pixel is 0-transparent or 1-solid
-The first half tells if a given pixel should be drawn in the 0-border or 1-main color, only if it’s solid, if the pixel is transparent this bit is irrelevant (but Ecco has all transparent pixels marked as 0 in the overlay)
Now because you didn’t understand even a bit of what I’ve said, is a picture for clarification:
I hope this is easy enough
Epicenter could you please fix the image link? to show up like tails151 posted?
Thanks
That’s the format NES games use, but still a nice find. Also: use <img src=”(your link here)”> to post images. If you want to change the size they show as, put height=(x) and/or width=(x) after the URL but before the >.
(That kangaroo has to be either an in-joke of some kind or a bit of misplaced data. Nothing references it, as far as I can tell, and on brief inspection, it’s the only graphic removed in between X11 and 0429.)
Anyway, since it looks like I’m not going to get around to posting up a bunch of information (of which I don’t actually have that much) on the forums, here’s what I did for those two levels.
A bit of important information: the type of pointer you’re looking for is simply the ROM address padded out to 32 bits and aligned to a 16-bit margin (i.e x0, x2, x4, x6, x8, xA, xC, xE).
Start with a stage that you know is the first of its type. They’re stored in the order they’re in on the debug menu, so this is easy. Sarlac/Vortex Queen is a good choice, as it’s also unique in that no other stage uses the same graphics set.
Find its name in the ROM. In X11, it’s at $1B21A0. Now, you’re going to want to find a pointer somewhere near it, as there isn’t one to it.
Easiest way is to just search for 001B21. Now, there’s a bunch of results, so look for one matching the form and close to the actual name. In this case, the one that appears most relevant is stored at $1B2178, pointing to 1B2184.
This is (as far as I can guess) the level set subheader. If you go up to 0×1B2156, you’ll note that it’s 0001, as in there’s one level in the set. If there were more, it’d be higher, and if you were looking at the 2nd or 3rd (etc) level in the set, you’d have to go further up, as each level has a bit of information stored in it. Take note of the distance here; it’s $22 bytes.
At any rate, search for 1B2156, and you’ll find it at 0×1B1E2A. This is in the block’s header, which contains (if it’s like Ecco 1) the pointer to the VDP registers for the block, as well as the pointer to the palette set and 8×8 tiles (compressed).
Now, since there’s no way for you to easily recognize this fact, I’ll tell you: the start of that header is at 0×1B1DFC, which you can find out from the level set selection subroutine if you have it disassembled (it’s at 0×8C5A2 in the ROM). Again, take note of the distance; this is $2E bytes.
The actual code to choose to load that level set pushes that address on the stack; searching for it gives you the address 0×8C74C.
Now you have a level set you don’t mind losing, an address that loads that level set, and the offsets for both headers.
The title for bosshead1 is at 0×1C11A8. Searching for 001C11 will find you a result at 0×1C117C. Subtracting 0×22 gives you 0×1C115A. Search for that pointer and you get 0×1C105E. Subtract 0×2E and you get 0×1C1030.
Searching for that is naturally going to find nothing; the sequence was completely gutted at that point.
But… go to the section that loads Sarlac (0×8C74C). Put in the address you just found, and go in the game and load the level.
You can do the same thing for unver1.
Logo 2 actually requires you to replace a block that contains more than one level (the 0 block, the one with a few present levels works nicely) with the unver1 one. To find the address of the pointer to that one, you can do what I said above but using Corall Reefs, or you can just trust me when I say it’s 0×8C5D2. Logo 2 is just blank, though…
Re: That list of uncompressed graphics
0×040CC0 - 0×040E3F: Unknown tiles (no idea)

Grabby thing from Ecco 1 (savestate available in “Hidden Content” section):
0×043260 - 0×043D1F: Tentacle segments (Octopus?)

Leftover from the Ecco 1 octopus tentacle, a savestate is available in “Hidden Content” containing it:
0×04C0C0 - 0×04CEFF: Mother orca?

Actually starts at 0×4C120:
0×04F5B0 - 0×0506EF: A big sphere… (the moon?)

Indeed:
0×05D850 - 0×05E84F: Unknown tentacles (a lot of directions)

0×05F480 - 0×05F7DF: Weird ball (?)
This is the end of the Vortex Queen’s tongue, and I suspect her food:
0×061F90 - 0×063E6F: Water whirlwind (arghh?)

Yes, arghh. (Believe it or not, the dark parts are how the entire level should be; the rest is being told “make this section light”):
0×064670 - 0×06482F: Unknown tiles (somekind of head?)

0×064830 - 0×064ECF: Unknown tiles (some crab’s arm)
Those belong to the badass Atlantis crab (shows up in Atlantis00 at x=0 y=15):
0×06DE10 - 0×06DE8F: Unknown tiles (a 5-point star)
Almost certainly just a “these tiles are unused” thing. Super Mario Bros. 2 (the one based on Doki Doki Panic) has a smiley face or two, for example.
0×1BB6F0 - 0×1C100F: Unknown tiles (huge mess): Generic SEGA logo, some kind of stars and the remnants of a simple ASCII font. It looks like a bunch of random stuff got overwritten with other stuff…
Those are the tiles for unver1, the prologue screen. The font is clearly unused, and may have come from the same source as the SEGA logo.
F*cking unbeleiveable… The Kangooro it’s a fighter from Steets of Rage 3!Yeah thats right, now go play it and see with your own eyes. (It’s called Roo)
What the hell? It just traveled from a game to another! Or from some BETA to a different game BETA.
Also Tails, that Level loading routine it’s just insane… I mean it’s the same code repeated over and over and over and ov… Only some values and the pointers are changed, those PEA *, -(a7)…
BTW do you know anything about the level header or the layout compression format? It seems to be always extracted to RAM @ 0, i’m sure there are a lot of ecco fans that would like to create their own custom maps. Also I’m trying to document the level header itself and… its almost done! whew
I haven’t done any real work with the level format in Tides of Time, sorry.
But the bank select code is going to be repetitive; it’s going through the list and checking if it belongs to any given set, which it then pushes on the stack and loads with that… other… subroutine.
The set of instructions:
ext.l d3
move.l d3,-(sp)
moveq #0,d0
move.l d0,-(sp)
pea (off_105244).l
jsr sub_E5878
lea $C(sp),sp
effectively just means func_e5878($105244, d3); d3 is going to be the level within the block, while 0×105244 is the address to load in general. The rest of the code is checking if the level is within any given block, and if not, going on to the next one.
Looking quickly at it, it looks like the actual level loading routine is going to be either the subroutine at 0xE23F0 or one of the ones it calls… 0x(FF)FFA55A is the location in RAM in which the current level set header’s address is stored, so if you see something referencing that, it’s likely to be related.
I’m pretty sure this is the format for level headers:
word (16 bit): number of levels
dword (32 bit): 128×128 mappings addr
{This next section is repeated for each level in the block.
dword: sprite list pointer
dword; pointer to mapping of sprites
word: x-length of foreground
word: y-length of foreground
word: Ecco’s start, x-position
word: Ecco’s start, y-position
dword: pointer to foreground layout
dword: pointer to ???
word: x-length of background
word: y-length of background
dword: pointer to ???
dword: pointer to background layout
}
That was taken from E2A, which used a similar format, only mostly uncompressed. I’m pretty sure almost any given address could be in ROM or RAM, but I’m not sure what tells it what to load into RAM.
It wasn’t that header I was talking about… I was talking about the block that has the level string/layout/colision/sprite-list. lt seems to have the same structure as the final, but not E2A.
I’m going to the board making a level structure topic…
I think I recognise that Kangaroo! Aside from the palette, it looks like Roo from Streets of Rage 3 / Bare Knuckle 3! Nice find! Maybe someone from the Streets of Rage team was also working on Ecco II? Or this Ecco II was written on a ROM that already had SoR3 on it, and didn’t use that section of data? Who knows.
Presumably it’s the second choice. Ecco 2 uses the space from 8000-28000 only for sound data, which that is rather clearly not.
There’s a similar (albeit smaller; later builds and the final have different music) blank area in the final, where they properly cleared out the data. 0429 has data for “World Series Baseball” in that area instead.
What was the logo2 block?
I’m pretty sure it’s a dummy level block header that tells the game to load the old SEGA logo from E2A. The game uses those for everything from levels, to the Vortex queen cutscene, to the sonar map.
Unfortunately, it’s not terribly interesting to look at.
Could someone please name all the stages with movies downloadable?
As Tails151 mentioned Victy/Roo’s SOR3/BKIII sprites are most likely in this beta because the data on the prototype occupied on the cartridge that the Ecco II beta was on before being transferred over to the SOA CD was most likelywrote over a Bare Knuckle III beta or even possibly a beta of the US version of the game (Streets of Rage 3) for that matter.