Jump to content

Ultima Online Outlands (.uoo)


Recommended Posts

Posted

Outlands is a private Ultima Online server, going strong since 2018.
They have this custom format for their client which I could not figure out on my own and I'm here to ask for help.
These are the QuickBMS scripts I'm currently working with:

ComType deflate_noerror

Get TEMPNAME basename

Math OFFSET = 8

For A = 0
Goto OFFSET
Get MISC1 Long
Get MISC2 Long

If MISC2 = 0
Break
Endif

Goto 0x0c 0 SEEK_CUR
Get ZSIZE Long
SavePos OFFSET

String FILENAME P "%TEMPNAME%_%A%"

CLog FILENAME OFFSET ZSIZE 0x10000000

Math OFFSET + ZSIZE
Next A


and

 

ComType deflate_noerror

Get TEMPNAME basename

Debug 0

Math OFFSET = 4

For A = 0
    Goto OFFSET //4 bytes
    Get ENTRY_ID Long 
    Get OFFSET Long
    Get MAXANIMS Long 
    Goto 0x10 0 SEEK_CUR 
    Get MAXFRAMES Long
    Get ZSIZE Long
    SavePos OFFSET
    String FILENAME P "%TEMPNAME%_%A%"        
    CLog FILENAME OFFSET ZSIZE 0x10000000
    MATH OFFSET + ZSIZE
    
Next A

 

First one used to work with gumps.uoo but never worked with anim.uoo, so the second one was my attempt to figure it out (and failing miserably 😄)
Can anyone more experienced help me figure this one out?

Thanks everyone very much.

Here are the samples, I included all .uoo files + a 20mb cut from anim.uoo (a big 1gb file).

Also included a few stock Ultima Online files, they are usually MULs or UOPs and the UO file format docs. (since it is the same game, they cant go very far)

Google Drive - Sample Files

UO File Format Docs

  • Like 1
  • 1 month later...
  • 2 weeks later...
Posted
On 12/29/2024 at 5:57 PM, quickstep said:

Outlands is a private Ultima Online server, going strong since 2018.
They have this custom format for their client which I could not figure out on my own and I'm here to ask for help.
These are the QuickBMS scripts I'm currently working with:

ComType deflate_noerror

Get TEMPNAME basename

Math OFFSET = 8

For A = 0
Goto OFFSET
Get MISC1 Long
Get MISC2 Long

If MISC2 = 0
Break
Endif

Goto 0x0c 0 SEEK_CUR
Get ZSIZE Long
SavePos OFFSET

String FILENAME P "%TEMPNAME%_%A%"

CLog FILENAME OFFSET ZSIZE 0x10000000

Math OFFSET + ZSIZE
Next A


and

 

ComType deflate_noerror

Get TEMPNAME basename

Debug 0

Math OFFSET = 4

For A = 0
    Goto OFFSET //4 bytes
    Get ENTRY_ID Long 
    Get OFFSET Long
    Get MAXANIMS Long 
    Goto 0x10 0 SEEK_CUR 
    Get MAXFRAMES Long
    Get ZSIZE Long
    SavePos OFFSET
    String FILENAME P "%TEMPNAME%_%A%"        
    CLog FILENAME OFFSET ZSIZE 0x10000000
    MATH OFFSET + ZSIZE
    
Next A

 

First one used to work with gumps.uoo but never worked with anim.uoo, so the second one was my attempt to figure it out (and failing miserably 😄)
Can anyone more experienced help me figure this one out?

Thanks everyone very much.

Here are the samples, I included all .uoo files + a 20mb cut from anim.uoo (a big 1gb file).

Also included a few stock Ultima Online files, they are usually MULs or UOPs and the UO file format docs. (since it is the same game, they cant go very far)

Google Drive - Sample Files

UO File Format Docs

Did this too one work for the art.uoo too? 

  • 1 year later...
  • Members
Posted (edited)

For all the files you sent, there are only 2 formats that I could see. They all contain either images, or animations (image sequences).

 

+-------------------------------+
| Ultima Online: Outlands *.uoo |
+-------------------------------+

// texmaps.uoo , art.uoo , gumps.uoo , landtiles.uoo Files
// Uses Deflate Compression

// HEADER
  4 - Unknown (109,171,127,30)
  4 - Unknown (1)

// DETAILS AND FILE DATA
  // for each file
    4 - File ID?
    4 - File Length (not including these 2 fields, but including all the fields after this one)
    2 - Image Width
    2 - Image Height
    2 - Unknown (often null)
    2 - Unknown (often null)
    2 - Unknown (sometimes Image Width)
    2 - Unknown (sometimes Image Height)
    4 - File Length (File Data only)
    X - File Data (Deflate Compression)
    
    when decompressed {
      width*height*2 - Image Data (RGB555)
      }
    
// FOOTER
  16 - null
  
  
+-------------------------------+
| Ultima Online: Outlands *.uoo |
+-------------------------------+

// anim.uoo File
// Uses Deflate Compression

// HEADER
  4 - Unknown (109,171,127,30)
  4 - Unknown (1)

// DETAILS AND FILE DATA
  // for each folder
    4 - Folder ID?
    4 - File Length (not including these 2 fields, but including all the fields after this one)
    4 - Number of Groups in this Folder?
    4 - null
    
    // for each group
      4 - Group ID?
      4 - Number of Files in this Group
    
      // for each file in this group
        4 - File ID?
        4 - Number of Frames in the Animation
        4 - File Length
        X - File Data (Deflate Compression)
        
        when decompressed {
          // for each frame
            2 - X Offset
            2 - Y Offset
            2 - Frame Width
            2 - Frame Height
            4 - Number of Pixels (Frame Length = numPixels*2)
            width*height*2 - Image Data (RGB555)
          }

 

For the Animations, the "Folder" looks to be the object/creature number, the "Group" seems to be the direction, and the "File" seems to be the animation number.

 

I wasn't able to quite figure out how to apply the Y Offset to each frame - as in, depending on the individual animation, what looked perfect for 1 animation looked very "jumpy" for another animation.

 

Edited by wattostudios

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
×
×
  • Create New...