Sign in to follow this  
Xavier Arias Botargues

Unity Extract assets from an old windows (1998) game

Recommended Posts

    Hi everyone,

as a hobby project, I decided I want to remake Liberation Day (, the second part of Fallen Haven (1st one seems to be more known).

My main idea is to reuse all assets, so I only have to work on code-related tasks; at least for now.

The game installer is installing DX5 and a very old version of DAO (3.5), so I'm assuming those are the main dependencies.

I've been expecting a game like this to work through color palettes and 1-byte per color textures; especially since the game looks ok when ran at 256 color compatibility mode.

In any case, I'm struggling to extract any assets from the game, I’ve tried to use Ninja Ripper, to extract used textures at runtime, but I’m unable to view the extracted textures through any viewer.

I abandoned that approach and tried to open files from the disk and interpret them like textures, I’ve mainly been trying to interpret them as black and white 8bit textures, but here I have to guess, not only bit depth, but the texture width, height, so rows are correctly aligned.

Game files that I’ve seen so far have the following extensions

  1. SMK, Inside a folder called INTERF, it seems to be the interface assets.
  2. DBI, inside a folder called IMGS. It should be in-game assets, like roads, buildings...
  3. MDB, inside multiple folders. Seems to be DAO files, but cannot be sure.

That on it's own didn't gave any results, but had me code a tool on Unity to interpret a file like a texture and paint it on screen; if I later manage to get the assets right, they may be interpreted with this tool (as they will use palettes).

Let me know if you're interested on the tool, I can upload it to github.

I’ve found 2 files that look like palettes, but need to be correctly read to be used as such (PAL.BMP and PALCYCLE.PAL).

After writing all this, I now realized that assets could be, not only packed, but compressed, and using palettes, a combination that may explain why i’m unable to see anything from this files at all. I also can take another look at files from ninja riper through the tool.

So my main question here if there's any tools that can aid me at what I'm doing, any guesses from your side that may help me get to the right path?

Thanks and sorry for the long post!

Share this post

Link to post
Share on other sites

It's worth looking at the Xentax forums if you haven't already as they have a good list of tools and expertise in reverse engineering formats. I started there when I worked on extracting the assets from Gladius.  No harm in putting your code on github to look at.

Share this post

Link to post
Share on other sites

SMK, Inside a folder called INTERF, it seems to be the interface assets.



Smack files?

They may have used some compression from rad games as well. i can't recall if rad offered a compression solution back then or not.

Share this post

Link to post
Share on other sites

@Norman Barrows, thanks to your message I've been able to open the SMK files and reproduce them as a video with MPLite

Image of the interface reproducing as a video

@conquestorbugged, I've been able to play liberation day on windows 10, can't tell if that will work for Fallen Haven. I'll PM you with my findings :) Have you made any progress on extracting any assets?

I haven't said so on my first post, but I'm going to make the game open source and post it on github, in order to accept help and colaboration from any source. Anyone interested on it? So far there are 0 lines of code  :D

Share this post

Link to post
Share on other sites

Just wanted to update you guys on my progress.

I have been working on a extractor tool for Liberation Day's files.

So far I've managed to export SMK (using FFmpeg as library) and MDB files (connecting to them through OleDbConnections).

If anyone is interested, I've pushed the code on github.

I still have 2 main challenges: DBI files and a big FF file. After this, I'll only need to code the game  :lol:

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Forum Statistics

    • Total Topics
    • Total Posts
  • Similar Content

    • By ForgedInteractive

      Who We Are
      We are Forged Interactive, a small team of like-minded game developers with the sole purpose of making games we love! We're a team of artists, animators, programmers, level designers, writers, composers, producers, and other creative minds. We want to make games that you, the modern gamer want to play! We hope to build a community that enjoys our games as much as we love creating them. With your feedback and support we will be able to achieve that.

      About the Game
      GAME NAME is a fun, action-packed army builder with unique characters, challenges and engaging levels. Set forth on an adventure to protect friends, family and countrymen from new adversaries. Once defeated your enemies turn coat and join you in your adventures. Players can enjoy a range of troops and abilities based on their gameplay style which become more important as maps introduce more challenging terrain, enemies and bosses. Strong orc knights, dangerous shamans, and even a dragon are out on the prowl. Knowing when to fight and when to run, and how to manage your army is essential. Your actions alone decide the fate of this world.

      Previous Work by Team
      Although we are working towards our first game as a team, our team members themselves have past experience in the industry.
      This includes members who have worked on titles including:
      Final Fantasy Kingsglaive, FIFA, Xcom 2 and Civilization.

      Who are we looking for? 3D Modellers Concept Artists Marketing Specialists Level Designer

      What do we expect? Reference work or portfolio. Examples what have you already done and what projects you have worked on academic or otherwise. The ability to commit to the project on a regular basis. If you are going on a two-week trip, we don't mind, but it would be good if you could commit 10+ hours to the project each week. Willingness to work with a royalty based compensation model, you will be paid when the game launches. Openness to learning new tools and techniques
      What can we offer? Continuous support and availability from our side. You have the ability to give design input, and creative say in the development of the game. Shown in credits on websites, in-game and more. Insight and contacts from within the Industry.
      If you are interested in knowing more or joining. Please email or PM us on Skype. Myself or Colin will reply to you within 48 hours.

      Skype: ForgedInteractive

      David and Colin

      Follow us on:

      Twitter: @ForgedInteract
    • By Eck
      I just saw their courses were knocked down to $10 each and figured I'd share the info here. They have stuff for Unity, Unreal, drawing, business, etc. I haven't used their stuff before, but the previews I looked at seemed pretty good and there is a user review system as well.
      - Eck
    • By zizulot
      first and only logo , for now
    • By sidbhati32
      I am working on a game in which we control a rectangular box at the bottom of the screen. Three sphere which has alphabets in it fall down. When the game starts, a word is generated from the predefined list of words(which I'll give) and we are supposed to touch the correct sphere having the alphabet based on that word. The question is how to detect if I have touched the correct sphere. 
      secondly, if I have touched a correct sphere before and there is no recurrence of that alphabet in that word then during the second wave the game should not proceed if I touch the same alphabet again.
      Looking forward to your answers, i have to submit this project in a couple of days. please help! (Working on Unity 3D)
    • By NDraskovic
      Hey guys,   As the title says, I'm trying to control a desktop game by using my mobile phone as a controller.  I created two scenes, one that acts as a server, other as a client.    Server has this code: void Start () {         Test = "Nothing yet happened";         NetworkServer.Listen(25000);         NetworkServer.RegisterHandler(888, ServerReceiveMessage);     }         private void ServerReceiveMessage(NetworkMessage message)     {                 StringMessage msg = new StringMessage();         msg.value = message.ReadMessage<StringMessage>().value;         if (!String.IsNullOrEmpty(msg.value))         {             Test = "Message received";             string[] deltas = msg.value.Split('|');             Horizontal = Convert.ToSingle(deltas[0]);             Vertical = Convert.ToSingle(deltas[1]);             TestScript.MoveForward(Vertical);             TestScript.RotateAroundY(Horizontal);         }         else         {             Test = "Nothing received";         }     }  
        And client this:  private void Connect()     {              client.Connect(IPAddress, 25000);           }     void Start () {         client = new NetworkClient();         Connect();            }         void Update () {    #if UNITY_ANDROID         MobileTouches = Input.touches;         if (MobileTouches.Length > 0)         {             for (int i = 0; i < MobileTouches.Length; i++)             {                 if (MobileTouches[i].phase == TouchPhase.Moved)                 {                     Horizontal = MobileTouches[i].deltaPosition.x;                     Vertical = MobileTouches[i].deltaPosition.y;                 }else if(MobileTouches[i].phase == TouchPhase.Stationary)                 {                     Connect();                                  }             }         } #elif UNITY_EDITOR               Horizontal = Input.GetAxis("Horizontal");         Vertical = Input.GetAxis("Vertical"); #endif         thumb.Translate(Vector3.up * Vertical * Time.deltaTime);         thumb.Translate(Vector3.right * Horizontal * Time.deltaTime);         SendControllerInfo();     }     static public void SendControllerInfo()     {         if (client.isConnected)         {             StringMessage msg = new StringMessage();             msg.value = Horizontal + "|" + Vertical;             client.Send(888, msg);         }     }  
        Ip address is hard coded, I just replaced it with the "IpAddress" variable. The code itself builds fine, and when I try to run in on a desktop computer, it works as expected (just a simple movement of an object on the server screen). However when I try to publish the client scene to a mobile device (Android), it doesn't connect to the server. They are both connected to the same network. Can anyone tell me what the problem might be?   Thanks
  • Popular Now