Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.

Ultima Online Outlands (.uoo)

Featured Replies

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

  • 1 month later...
  • 2 weeks later...
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...
  • Localization

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

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.