uop file format (updated: 1.7.07)

Diskussion und Informationen über UO:KR
Nachricht
Autor
Kons

#31 Beitrag von Kons » 07 Mai 2008 09:41

nice!

Malganis

#32 Beitrag von Malganis » 22 Mai 2008 20:35


Kons

#33 Beitrag von Kons » 30 Mai 2008 19:29

if you want i can host them on a friend's website

Malganis

#34 Beitrag von Malganis » 04 Jun 2008 13:04

That would be excellent :)

nazghul

#35 Beitrag von nazghul » 04 Jun 2008 14:18

also scriptsharing.dv-team.de exists (where the KR clientloader can be found, for example) :)

Malganis

#36 Beitrag von Malganis » 04 Jul 2008 22:21

Update: DWORD 0x50 -> UNKNOWN-2 (maybe CRC?)

That is Adler32 hash of data block in little endian.

Example:
Data block: 0003, 0008, 01C8BAD1F603C7DB

Adler32( 03000800DBC703F6D1BAC801 ) == 18AC04FB == UNKNOWN-2

Kons

#37 Beitrag von Kons » 04 Jul 2008 22:29

malga you should learn to write better updates :|

New mythic package format:

Code: Alles auswählen

UOP Fileformat ( aka Mythic Package ) 
--------------------------------------- 
credits: SENE, Kelon, Dantalion, Arahil 

(Every Offset value is its first evidence as example) 
All values are stored in Little Endian sequence, as usual in x86 architecture. 
Compression method is DEFLATE using zlib. 

sizeof(DWORD) = 4 
sizeof(QWORD) = 8 

[1] - General Format Header (sizeof: 40bytes ) 
Byte(23) 0x0 - 0x17 -> Containing general file headers (Version etc.) 
DWORD? 0x18 -> Amount of contained files/indexes 
byte(12) -> Unknown gibberish 

DWORD MYTH 	-> Start of every Myth package
DWORD 		-> Version
DWORD 0xFD	-> Misc ( 0xFD23EC43 )
DWORD		-> Header Size
DWORD 0x00	-> Empty bytes
DWORD 		-> Block size
DWORD 		-> File count


[2] - Index Block Header (sizeof: 24bytes) 
There can be multiple index blocks, they are splitted into chunks. 
DWORD 0x28 -> Amount of contained files in this index, max 100/0x64 
QWORD 0x2c -> Offset to the next index block header OR Zero 
When a index block doesn't contain 100 index definitions, it will be padded with nulls 



   [3] - FileIndex Definitions (sizeof: 34bytes ) 
   QWORD 0x34 -> Offset to start of Data Block of this file 
   DWORD 0x3c -> Length of Data Block header (usually 0x0C) 
   DWORD 0x40 -> Lenght of compressed data 
   DWORD 0x44 -> Size of decompressed file 
   QWORD 0x48 -> Filehash
   DWORD 0x50 -> Adler32 CRC of Data in littleEndian ( flag offset data )
   WORD  0x54 -> Compressed Flag  
   ...this repreats, until all FileIndexes are processed 



   [4] - Data Block/File (sizeof: 12+Lenght bytes) 
   WORD -> flag compressed ( 0008 )
   WORD -> offset  ( 0003 )
   QWORD 0xd80 -> unk
   BYTE(Lenght) 0xd88 -> compressed data 
   ...this is repeated until all Files from FileIndexes are processed 



repreat until next Index Block=0. 


Pseudocode: 

[1] - General Format Header (sizeof: 40bytes ) 

while ( repreatindex ) do 
   [2] - Index Block Header (sizeof: 12bytes) 

   while ( indexfilenumber~=indexfilecounter ) do 
      [3] - FileIndex Definitions (sizeof: 34bytes ) 
   end 
   while ( indexfilenumber~=indexfilecounter ) do 
      [4] - Data Block/File (sizeof: 8+Lenght bytes) 
   end 
end 


Kons

#38 Beitrag von Kons » 06 Jul 2008 23:04

now we know all uop format :D
Malga or Koksi will post last unknown :P

TheUndisputed

#39 Beitrag von TheUndisputed » 08 Jul 2008 01:02

QWORD 0xd80 -> unk ; (That is FILETIME)

The FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601. The structure consists of two 32-bit values that combine to form a single 64-bit value.

http://support.microsoft.com/kb/188768

And the Code for C# is

Code: Alles auswählen

DateTime.FromFileTime(unk);
DWORD 0xFD -> Misc ( 0xFD23EC43 )
is also date :)

Chase

#40 Beitrag von Chase » 07 Sep 2008 21:19

thanks for posting the format, helped me a lot.

Chase

#41 Beitrag von Chase » 07 Sep 2008 21:29

thanks for posting the format, helped me a lot.

Kons

#42 Beitrag von Kons » 07 Sep 2008 22:51

eheh, we are now (not yet but soon) working for a repacker :)

xotix

#43 Beitrag von xotix » 11 Sep 2008 11:52

Hi

Is there any tool which can extract the .myp 100% and with names? Im looking for the meshes/.3ds files cause i want to make a beginning sequence for a movie and a guild logo. i would like to help but i cant cause i'd be useless :P i cant write any programminglanguage.

please send me the upload link or send me the tool on my email: offspringpsycho @ hotmail . com

Thanks a lot :)

just found unmyp but there i get an error after 30 minutes and i just get dss files and txt files.

SiENcE

#44 Beitrag von SiENcE » 15 Sep 2008 21:49

xotix hat geschrieben:meshes/.3ds files cause i want to make a beginning sequence for a movie and a guild logo.
There aren't any meshes or 3ds files. You should play guild wars ;-).

Nevir

#45 Beitrag von Nevir » 20 Sep 2008 07:03

You guys have done an awesome job digging into all this!

I've been following along, implementing a simple extractor for the MYP format (a somewhat hacky Ruby library, if anyone wants the code) - I've got a couple questions, if you have some time to answer them:

First off, given that the filenames are hashed, I'm assuming that there's a mapping somewhere in the game client (I haven't found anything in mft.myp yet - which seemed to be the likeliest source) - or am I stuck building my own dictionary?

Also, all of the archives appear to have one file stuffed into the header (or before the index, however you want to look at it) - but is not always included in the index. What's up with that?

Antworten