Advertisement
Guest User

yoyogames

a guest
Feb 6th, 2016
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.75 KB | None | 0 0
  1. # YoYo Games data.win (script 0.1.1)
  2. # IFF WAD file format
  3. # script for QuickBMS http://quickbms.aluigi.org
  4.  
  5. quickbmsver "0.6.5"
  6.  
  7. math GENERIC_DUMP_FIXED_SIZE_ENABLED = 0 # keep it disabled for the moment
  8.  
  9. get FULL_SIZE asize
  10. for CHUNK_OFFSET = 0 < FULL_SIZE
  11. getdstring CHUNK_NAME 4
  12. get CHUNK_SIZE long
  13. savepos CHUNK_OFFSET
  14.  
  15. xmath CHUNK_LIMIT "CHUNK_OFFSET + CHUNK_SIZE"
  16. print "CHUNK %CHUNK_NAME% %CHUNK_OFFSET|x% %CHUNK_SIZE|x%"
  17.  
  18. math FILES = 0
  19.  
  20. if CHUNK_NAME == "FORM" # the main chunk
  21. math FULL_SIZE = CHUNK_LIMIT
  22. math CHUNK_SIZE = 0
  23.  
  24. elif CHUNK_NAME == "GEN8"
  25.  
  26. elif CHUNK_NAME == "OPTN"
  27.  
  28. elif CHUNK_NAME == "EXTN"
  29.  
  30. elif CHUNK_NAME == "SOND"
  31. math SIZE = 0x24
  32. callfunction GENERIC_DUMP_FIXED_SIZE 1
  33.  
  34. elif CHUNK_NAME == "SPRT"
  35. math GET_OFFSET = 0
  36. math GET_NAME = 1
  37. math GET_NAME2 = 0
  38. math GET_SIZE = 0
  39. callfunction DUMP_ENTRIES 1
  40.  
  41. elif CHUNK_NAME == "BGND"
  42. math SIZE = 0x14
  43. callfunction GENERIC_DUMP_FIXED_SIZE 1
  44.  
  45. elif CHUNK_NAME == "PATH"
  46.  
  47. elif CHUNK_NAME == "SCPT"
  48. math SIZE = 0x8
  49. callfunction GENERIC_DUMP_FIXED_SIZE 1
  50.  
  51. elif CHUNK_NAME == "FONT"
  52.  
  53. elif CHUNK_NAME == "TMLN"
  54.  
  55. elif CHUNK_NAME == "OBJT"
  56. math GET_OFFSET = 0
  57. math GET_NAME = 1
  58. math GET_NAME2 = 0
  59. math GET_SIZE = 0
  60. callfunction DUMP_ENTRIES 1
  61.  
  62. elif CHUNK_NAME == "ROOM"
  63. math GET_OFFSET = 0
  64. math GET_NAME = 1
  65. math GET_NAME2 = 1
  66. math GET_SIZE = 0
  67. callfunction DUMP_ENTRIES 1
  68.  
  69. elif CHUNK_NAME == "DAFL"
  70.  
  71. elif CHUNK_NAME == "TPAG"
  72.  
  73. elif CHUNK_NAME == "CODE"
  74. math GET_OFFSET = 0
  75. math GET_NAME = 1
  76. math GET_NAME2 = 0
  77. math GET_SIZE = 1
  78. callfunction DUMP_ENTRIES 1
  79.  
  80. elif CHUNK_NAME == "VARI"
  81.  
  82. elif CHUNK_NAME == "FUNC"
  83.  
  84. elif CHUNK_NAME == "STRG"
  85. math FILES = -1
  86. get STRINGS long
  87. for i = 0 < STRINGS
  88. get DUMMY long
  89. next i
  90. for i = 0 < STRINGS
  91. get STRING_SIZE long
  92. math STRING_SIZE + 1
  93. slog "STRG.txt" -1 STRING_SIZE
  94. next i
  95.  
  96. elif CHUNK_NAME == "TXTR"
  97. callfunction COLLECT_ENTRIES 1
  98. for i = 0 < FILES
  99. getarray OFFSET 0 i
  100. goto OFFSET
  101. get DUMMY long # 1
  102. get OFFSET long
  103. putarray 0 i OFFSET
  104. next i
  105.  
  106. math j = 0
  107. for i = 0 < FILES
  108. getarray OFFSET 0 i
  109. math j += 1
  110. getarray NEXT_OFFSET 0 j
  111. xmath SIZE "NEXT_OFFSET - OFFSET"
  112. putarray 1 i OFFSET
  113. putarray 2 i SIZE
  114. putarray 3 i "."
  115. next i
  116.  
  117. elif CHUNK_NAME == "AUDO"
  118. callfunction COLLECT_ENTRIES 1
  119. for i = 0 < FILES
  120. getarray OFFSET 0 i
  121. goto OFFSET
  122. get SIZE long
  123. savepos OFFSET
  124. putarray 1 i OFFSET
  125. putarray 2 i SIZE
  126. putarray 3 i "."
  127. next i
  128. else
  129. print "Chunk %CHUNK_NAME% not supported"
  130. endif
  131.  
  132. if FILES == 0
  133. # dump the whole chunk
  134. string NAME p= "%s/%s" CHUNK_NAME "."
  135. log NAME CHUNK_OFFSET CHUNK_SIZE
  136.  
  137. elif FILES > 0
  138. for i = 0 < FILES
  139. getarray OFFSET 1 i
  140. getarray SIZE 2 i
  141. getarray NAME 3 i
  142. string NAME p= "%s/%s" CHUNK_NAME NAME
  143. log NAME OFFSET SIZE
  144. next i
  145. endif
  146. # FILES < 0 means that we don't want to extract files
  147.  
  148. math CHUNK_OFFSET += CHUNK_SIZE
  149. goto CHUNK_OFFSET
  150. next
  151.  
  152. startfunction COLLECT_ENTRIES
  153. math j = 0
  154. get FILES long
  155. for i = 0 < FILES
  156. get OFFSET long
  157. if OFFSET != 0
  158. if OFFSET u< CHUNK_LIMIT
  159. putarray 0 j OFFSET
  160. math j += 1
  161. endif
  162. endif
  163. next i
  164. putarray 0 j CHUNK_LIMIT
  165. math FILES = j
  166. endfunction
  167.  
  168. startfunction DUMP_ENTRIES
  169. set NAME string "."
  170.  
  171. callfunction COLLECT_ENTRIES 1
  172.  
  173. for i = 0 < FILES
  174. getarray OFFSET 0 i
  175. goto OFFSET
  176. if GET_NAME != 0
  177. get NAME_OFF long
  178. endif
  179. if GET_NAME2 != 0
  180. get NAME2_OFF long
  181. endif
  182. if GET_SIZE != 0
  183. get SIZE long
  184. putarray 2 i SIZE
  185. endif
  186. if GET_OFFSET != 0
  187. get OFFSET long
  188. else
  189. savepos OFFSET
  190. endif
  191. if GET_NAME != 0
  192. goto NAME_OFF
  193. get NAME string
  194. endif
  195. if GET_NAME2 != 0
  196. goto NAME2_OFF
  197. get NAME2 string
  198. if NAME2 != ""
  199. string NAME += /
  200. string NAME += NAME2
  201. endif
  202. endif
  203. putarray 0 i OFFSET
  204. putarray 3 i NAME
  205. next i
  206.  
  207. math j = 0
  208. for i = 0 < FILES
  209. getarray OFFSET 0 i
  210. math j += 1
  211. getarray NEXT_OFFSET 0 j
  212. xmath SIZE "NEXT_OFFSET - OFFSET"
  213. math SIZE -= 4 # NAME_OFF
  214. putarray 1 i OFFSET
  215. if GET_SIZE != 0
  216. getarray SIZE 2 i
  217. endif
  218. putarray 2 i SIZE
  219. #putarray 3 i NAME # already set
  220. next i
  221. endfunction
  222.  
  223. startfunction GENERIC_DUMP_FIXED_SIZE
  224. if GENERIC_DUMP_FIXED_SIZE_ENABLED != 0
  225. get FILES long
  226. for i = 0 < FILES
  227. get DUMMY long
  228. next i
  229. savepos OFFSET
  230. for i = 0 < FILES
  231. putarray 1 i OFFSET
  232. putarray 2 i SIZE
  233. putarray 3 i "."
  234. math OFFSET + SIZE
  235. next i
  236. endif
  237. endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement