Advertisement
Guest User

mafia_sds_ps3.bms

a guest
Dec 17th, 2016
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.17 KB | None | 0 0
  1. # Mafia SDS (script 0.2.1)
  2. # script for QuickBMS http://quickbms.aluigi.org
  3.  
  4. endian big
  5. idstring "SDS\0"
  6. get DUMMY long # 0x13
  7. endian guess DUMMY # maybe other games can be supported
  8. getdstring PLATFORM 4 #idstring "PS3\0"
  9. get DUMMY long
  10. get OFFSET1 long
  11. get OFFSET2 long
  12. get XML_OFFSET long
  13. get DUMMY long
  14. get DUMMY long
  15. goto OFFSET2
  16. getdstring DUMMY 4 # "lzEU"?
  17. get CHUNK_MAXSIZE long
  18. get DUMMY byte # 4
  19. savepos OFFSET
  20. log MEMORY_FILE 0 0
  21. math LIMIT_OFF = XML_OFFSET
  22. if LIMIT_OFF == 0
  23. get LIMIT_OFF asize
  24. endif
  25. append
  26. for OFFSET = OFFSET != LIMIT_OFF
  27. get DUMMY1 long
  28. get DUMMY2 byte
  29. if DUMMY1 == 0 && DUMMY2 == 0
  30. break
  31. endif
  32. if DUMMY1 == CHUNK_MAXSIZE
  33. savepos OFFSET
  34. log MEMORY_FILE OFFSET CHUNK_SIZE
  35. math OFFSET + CHUNK_SIZE
  36. else
  37. get SIZE long
  38. get DUMMY long
  39. get CHUNK_SIZE short
  40. if CHUNK_SIZE == 0 # PC platform
  41. math CHUNK_SIZE = CHUNK_MAXSIZE
  42. endif
  43. get CHUNKS short
  44. get DUMMY long
  45. math TMP = CHUNKS
  46. math TMP * 2
  47. math TMP x 16
  48. savepos OFFSET
  49. math OFFSET + TMP
  50. for x = 0 < CHUNKS
  51. get CHUNK_ZSIZE short
  52. if CHUNK_ZSIZE == 0 || CHUNK_ZSIZE >= CHUNK_SIZE # ??? not in my samples
  53. log MEMORY_FILE OFFSET CHUNK_SIZE
  54. else
  55. clog MEMORY_FILE OFFSET CHUNK_ZSIZE CHUNK_SIZE
  56. endif
  57. math OFFSET + CHUNK_ZSIZE
  58. next x
  59. endif
  60. goto OFFSET
  61. next
  62. append
  63.  
  64. get MEM_SIZE asize MEMORY_FILE
  65. goto 0 MEMORY_FILE
  66.  
  67. if XML_OFFSET != 0
  68. get SIZE asize
  69. math SIZE - XML_OFFSET
  70. log MEMORY_FILE2 XML_OFFSET SIZE
  71. endif
  72.  
  73. for ENTRY_OFF = 0 != MEM_SIZE
  74. savepos ENTRY_OFF MEMORY_FILE
  75. get TYPE long MEMORY_FILE
  76. get ENTRY_SIZE long MEMORY_FILE
  77. get DUMMY short MEMORY_FILE
  78. getdstring DUMMY 0x10 MEMORY_FILE
  79. get CRC long MEMORY_FILE # ???
  80.  
  81. savepos OFFSET MEMORY_FILE
  82. math ENTRY_OFF + ENTRY_SIZE
  83. goto ENTRY_OFF MEMORY_FILE
  84.  
  85. math SIZE = ENTRY_OFF
  86. math SIZE - OFFSET
  87.  
  88. set NAME string ""
  89. if XML_OFFSET != 0
  90. findloc TMP string "<SourceDataDescription>" MEMORY_FILE2 ""
  91. if TMP != ""
  92. goto TMP MEMORY_FILE2
  93. get NAME line MEMORY_FILE2
  94. string NAME | ">"
  95. string NAME >> "<"
  96. endif
  97. endif
  98.  
  99. math DDS_OFF = 0x10
  100.  
  101. set EXT extension NAME
  102. if EXT == ""
  103. savepos TMP_OFF MEMORY_FILE
  104. goto OFFSET MEMORY_FILE
  105. getdstring DUMMY 0x10 MEMORY_FILE # PS3 is 0x10
  106. getdstring SIGN 4 MEMORY_FILE
  107. if SIGN != "DDS "
  108. goto OFFSET MEMORY_FILE
  109. getdstring DUMMY 0x11 MEMORY_FILE # PC is 0x11
  110. getdstring SIGN 4 MEMORY_FILE
  111. endif
  112. if SIGN == "DDS "
  113. set EXT string "dds"
  114. savepos TMP MEMORY_FILE
  115. xmath DDS_OFF "(TMP - 4) - OFFSET"
  116. endif
  117. goto TMP_OFF MEMORY_FILE
  118. endif
  119. if EXT == "dds"
  120. math OFFSET + DDS_OFF
  121. math SIZE - DDS_OFF
  122. endif
  123.  
  124. log NAME OFFSET SIZE MEMORY_FILE
  125. next
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement