Those who have been following the project on our Discord will undoubtedly be familiar with all the issues surrounding this, thanks in no small regard to the fact I have not been able to reverse engineer the way separate models are built together, therefore a resource dump for every level is an absolute nightmare with hundreds of files that make up compound models, all with arbitrary names in Magyar, making it almost impossible to tell what they are without opening each and every one of them individually.
I still intend to continue with this but until then I will at least start posting resource dumps here. For the sake of brevity, there only include the converted models as well as their corresponding textures. This post is going to be pinned and used later as an index with links to individual collections. Important details will also be placed here for the ease of reference. Please do not hesitate to ask questions if something does not work or if links are broken.
Here are the excerpts from a document I started writing on DoTF models format but did not finish with some pointers to how files are organized.
The way DoTF resources are organized is that absolutely everything shown on the screen is a polygon mesh, including text on the screen and flat objects like kelp, as well as level geometry pieces such as buildings, rocks, tunnels, etc. This greatly simplifies accessing the game assets as all of them can be accessed, however there are presently still some edge cases that are not fully understood and require additional analysis.
The downside of that, however, is that information as what to do with those assets appears to be stored elsewhere, including scaling, so care must be taken when importing individual objects as their size can differ significantly from their normal in-game size.
Compound Models
Large objects are often broken down into many separate ones. Those segments are then either positioned in the world centre, having to be reassembled manually, or make up the whole object when imported. A good example is the main temple in Atlantis:
The object is broken down into 22 separate pieces but thankfully they all fit together when imported into the editor.
Some compound models, unfortunately, are not built like this and will require additional fiddling to get right, at least until it’s established and reverse engineered exactly where their transformation data is stored. More elaborate examples include the Detention Centre from Dolphin’s Nightmare episode. Some simple animated models also follow this rule, where they are broken down into individual pieces that are then moved independently. Those will be reviewed separately, even though I consider them to be just a special case of compound models.
Micro Models
Finally, there is another mode larger models are stored in, which appears to be reserved exclusively for pieces of level geometry. Those often havemicroin their filename and thus are referred to as Micro Models in this project. They are stored as relatively simple meshes that always have a form of a triangle and there can be quite a lot of them. The working theory so far is that once a level is complete it would go through a program that would analyze all the geometry for repeating patterns, break it into triangle sub-meshes and only store those that are required to later rebuild complete objects from those. This approach is actually very similar to how assets would be stored in the Mega Drive series where lots of smaller 8x8 tiles would be then assembled in all sorts of possible combinations to build the game levels.
It’s worth noting that not all maps are built this way and some of those are devoid of Micro Models altogether with pieces of level geometry stored normally. Likely this was a running experiment for resource usage optimization which was abandoned at some point, either due to time constraints or because there was no need for such cost saving measures.
Model Animation
As mentioned above, the game only appears to use skeletal animation for “important” models that we see and interact with a lot, including Ecco himself, since this kind is fairly resource intensive. A different approach to this is so called matrix animation, where the model is split into several pieces and each of them moves and rotates individually via simple matrix transforms. A great example is the bird in the cage in Atlantis Lost.
Unfortunately, for models like that the information on how their pieces go together is stored elsewhere and when imported into an editor all pieces end up on top of each other, having to be rearranged by hand. This is one of the limitations of the current project. Hopefully, more knowledge on how and where this information is stored will be gathered in the future, making this step redundant.