SHARE
TWEET

ESO Research Notes

Byvar Oct 13th, 2013 167 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ====================== FILE STRUCTURE ANALYSIS ======================
  2. ------ DAT: Decompiled ------
  3. 0x4 - ID string ('2SEP'/'PES2')
  4. 0x2 - always 1 (little endian)
  5. 0x4 - always 0
  6. 0x4 - always 0E (14 in decimal). Seems to be the absolute offset of the data start
  7.  
  8.  
  9. ------ MNF: Decompiled ------
  10. 0x4 - ID string ('2SEM'/'MES2')
  11. 0x2 - always 2 (little endian)
  12. 0x1 - number of DAT files
  13. 0x4 - always 0
  14. 0x4 - EOF_offset: offset after block 3
  15.  
  16. ------ ZOSFT ----------------
  17. 0x5 - ID string ('ZOSFT')
  18. 0x4 - always 06 00 10 00
  19. 0x6 - unknown
  20. 0x4 - number of records, little endian
  21. for(i=0; i<3; i++) {
  22.         0x4 - always 03 00 04 00
  23.         0x6 - unknown
  24.         0x4 - number of records
  25.         0x4 - number of records
  26.         0x4 - block size
  27.         0x4 - block zsize
  28.                 [block]
  29.         0x4 - block size
  30.         0x4 - block zsize
  31.                 [block]
  32.         0x4 - block size
  33.         0x4 - block zsize
  34.                 [block]
  35. }
  36. 0x4 - bytes until end of filetable
  37.         [filenames: 0-terminated strings]
  38. 0x5 - ZOSFT
  39.  
  40. ====================== ZLIB BLOCKS ANALYSIS ======================
  41. ------ MNF ------------------
  42. BLOCK 1
  43. for(i=0; i<filecount; i++) {
  44.     (0x4 - dummy)* - 00 00 00 00, 0 or more times
  45.     0x4 (little endian) - FILE_ID = 2147483648 of 00 00 00 80 + i
  46.     (0x4 - dummy)* - 00 00 00 00, 0 or more times
  47. }
  48.  
  49. BLOCK 2
  50. for(i=0; i<filecount; i++) {
  51.     0x4 (little endian) - file_number
  52.     0x2 (little endian) - 00 00 or 01 00 in game, but can be anything in ESO
  53.     0x1 (little endian) - 00 80 or 00 00 in game, but can be 00 60, 00 40 or 00 20 in ESO as well!
  54. }
  55.  
  56. BLOCK 3
  57. for(i=0; i<filecount; i++) {
  58.     0x4 - file_size
  59.     0x4 - file_zsize
  60.     0x4 - filename_hash (http://rdf3x.googlecode.com/svn/trunk/infra/util/Hash.cpp - http://rdf3x.googlecode.com/svn/trunk/include/infra/util/Hash.hpp - init by 0xA8396u)
  61.     0x4 - file_offset
  62.     0x1 - file_comtype (0 - Not Compressed, 1 - Zlib, 2 - Snappy)
  63.     0x1 - archive_number
  64.     0x2 - unknown
  65. }
  66.  
  67. ------ ZOSFT ----------------
  68. - blocks 1_1, 2_1 or 3_1 is list of FILE IDs
  69. - 1772 filenames in game.zosft, EC600000!
  70.  
  71. BLOCK 1_1
  72. for(i=0; i<record_count; i++) {
  73.     0x4 (little endian) - FILE_ID = 2147483648 or 00 00 00 80 + i
  74.     (0x4 - dummy)* - 00 00 00 00, 0 or more times
  75. }
  76.  
  77. BLOCK 1_2
  78. for(i=0; i<record_count; i++) {
  79.     0x8 (little endian) - complex_number
  80. }
  81.  
  82. BLOCK 1_3 (simple count to record_count in game, but not in eso)
  83. for(i=1; i<=record_count; i++) {
  84.     0x4 (little endian) - file_number (unique)
  85. }
  86.  
  87. BLOCK 2_1
  88. for(i=0; i<record_count; i++) {
  89.     0x4 (little endian) - FILE_ID = 2147483648 or 00 00 00 80 + i
  90.     (0x4 - dummy)* - 00 00 00 00, 0 or more times
  91. }
  92.  
  93. BLOCK 2_2
  94. same as block 1_3
  95.  
  96. BLOCK 2_3 = the most important! -------------- link to MNF block 2
  97. for(i=0; i<record_count; i++) {
  98.     0x4 (little endian) - file_number (same as in block 1_3 and 2_2)
  99.     0x4 - filename_offset (relative, after number indicating bytes until end of filetable)
  100.     0x8 - complex_number (same as in block 1_2)
  101. }
  102.  
  103. BLOCK 3: important for eso.mnf?
  104. BLOCK 3_1: Empty in game.mnf
  105. BLOCK 3_2: Not in game.mnf
  106. BLOCK 3_3: Not in game.mnf
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top