quickstep Posted December 30, 2024 Posted December 30, 2024 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
Whiskey Posted February 8, 2025 Posted February 8, 2025 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?
Members wattostudios Posted 5 hours ago Members Posted 5 hours ago (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 5 hours ago by wattostudios
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now