Byvar

ESO Research Notes

Oct 13th, 2013
178
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