Advertisement
Guest User

Untitled

a guest
Oct 31st, 2018
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. # PCK Extractor by Alpha23
  2. getDstring IDENT 4
  3. if IDENT == "AKPK"
  4. elif IDENT == "1KCP" # The Saboteur (PC)
  5. else
  6. print "Error: no valid Wwise sound pack"
  7. cleanexit
  8. endif
  9. set PC 0
  10. endian big
  11. get SIZE_HEADER long # data start offset
  12. get TEST long
  13. get FSIZE asize
  14. if TEST != 1
  15. reverselong SIZE_HEADER
  16. endian little
  17. set PC 1
  18. endif
  19. get BNAME basename
  20. string BNAME += " "
  21.  
  22. goto 0xc
  23. get IDENT long
  24. set FOLDER_NAMES 1
  25. if IDENT == 0xc6
  26. set NBIAS 0x18
  27. elif IDENT == 0x14
  28. set NBIAS 0x1c
  29. set PC 1
  30. else
  31. set NBIAS 0x1c # also in PC versions
  32. endif
  33. goto NBIAS
  34. get NUM_FOLDERS long
  35. if NUM_FOLDERS > 10
  36. math NBIAS -= 4
  37. goto NBIAS
  38. get NUM_FOLDERS long
  39. endif
  40. savepos MYOFF
  41. set INFO NUM_FOLDERS
  42. math INFO *= 8
  43. math INFO += MYOFF # = start of names, will hold offset to jump to for TOC
  44. set ALLNAMES 0 # for ceil after names
  45.  
  46. for i = 0 < NUM_FOLDERS
  47. goto MYOFF
  48. get OFF_NAME_FOLDER long
  49. math OFF_NAME_FOLDER += NBIAS
  50. get ID_FOLDER long
  51. savepos MYOFF
  52. goto OFF_NAME_FOLDER
  53. if PC == 0
  54. get NAME_FOLDER string
  55. else
  56. callfunction getPCstring 1
  57. endif
  58. strlen LENGTH NAME_FOLDER
  59. math ALLNAMES += LENGTH
  60. math ALLNAMES += 1
  61. string NAME_FOLDER += "/"
  62. string NAME_FOLDER += BNAME
  63. putArray 0 ID_FOLDER NAME_FOLDER
  64. next i
  65. if PC == 1
  66. math ALLNAMES *= 2
  67. math INFO += ALLNAMES
  68. else
  69. savepos INFO
  70. math INFO x= 4
  71. endif
  72. goto INFO
  73. set RUNS 1
  74. callfunction extract 1
  75. cleanexit
  76.  
  77. startfunction getPCstring
  78. set NAME_FOLDER ""
  79. for s = 0
  80. get CHAR byte
  81. get NULL byte
  82. putVarChr NAME_FOLDER s CHAR
  83. if CHAR == 0
  84. break
  85. endif
  86. next s
  87. endfunction
  88.  
  89. startfunction extract
  90. savepos INFO
  91. get NUM_FILES long
  92. if NUM_FILES == 0
  93. if RUNS == 1
  94. get NUM_FILES long
  95. else
  96. cleanexit
  97. endif
  98. endif
  99. print "extracting %NUM_FILES% files (number at offset %INFO%)"
  100. for i = 1 <= NUM_FILES
  101. get NAME_CRC long
  102. get MULTI long # in certain cases only
  103. get SIZE long
  104. if SIZE == 0
  105. get SIZE long
  106. endif
  107. get OFFSET long
  108. get ID_FOLDER long
  109. if OFFSET == 0
  110. set OFFSET ID_FOLDER
  111. get ID_FOLDER long
  112. endif
  113. #string NAME_CRC p= "0x%08x" NAME_CRC
  114. if MULTI != 0
  115. math OFFSET *= MULTI
  116. endif
  117. savepos MYOFF
  118. if PC == 0
  119. endian big
  120. endif
  121. string NAME_CRC += ".wav"
  122. log NAME_CRC OFFSET SIZE
  123. next i
  124. math RUNS += 1
  125. callfunction extract 1
  126. endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement