Advertisement
Byvar

JADE engine wam2genh.bms

Apr 5th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.33 KB | None | 0 0
  1. # RRR & RRR2 Wii *.wam script. May work for other Wii/GC Jade Engine games.
  2.  
  3. # Coef table was retrieved by disassembling the ELF with IDA Pro, at offset denoted by gcSND_gst_GameCubeCoefficientsTable
  4. set MEMORY_FILE2 binary "\x04\xAB\xFC\xED\x07\x89\xFE\xDF\x09\xA2\xFA\xE5\x0C\x90\xFA\xC1"
  5. set MEMORY_FILE3 binary "\x08\x4D\xFA\xA4\x09\x82\xFD\xF7\x0A\xF6\xFA\xFA\x0B\xE6\xFB\xF5"
  6.  
  7.  
  8. endian little
  9. get totalsize long
  10. get riff long
  11. get riffsz long
  12. get wave long
  13. get fmt long
  14. get fmt_sz long
  15. savepos data_offset
  16. math data_offset + fmt_sz
  17. get format short
  18. get channels short
  19. get freq long
  20. get byterate long
  21. set interleave long 0x6400
  22. get unk short
  23. get unk2 short
  24. goto data_offset
  25. get data long
  26. get data_sz long
  27. set num_samples long data_sz
  28. math num_samples / 8
  29. math num_samples * 7
  30. savepos data_offset
  31.  
  32. # get loop points
  33. set loop_id long -1
  34. set loop_start long -1
  35. set loop_end long -1
  36. savepos cue_offset
  37. math cue_offset + data_sz
  38. if cue_offset >= totalsize
  39. set cue long -1
  40. else
  41. goto data_sz 0 SEEK_CUR
  42. get cue long
  43. endif
  44. if cue == 543520099 # cue
  45. get cue_sz long
  46. get cuepoints long
  47. savepos cue_off
  48. for i = 0 < cuepoints
  49. get id long
  50. get cue_pos long
  51. get data long
  52. get dummy long
  53. get dummy long
  54. get dummy long
  55. next i
  56. get list long
  57. get list_sz long
  58. savepos list_end
  59. math list_end + list_sz
  60. get adtl long
  61. savepos list_off
  62. for list_off = list_off < list_end
  63. get chunk_name long
  64. if chunk_name == 1818386796 # labl
  65. get dummy long
  66. get id long
  67. savepos tmp_off
  68. get name string
  69. if name == "loop"
  70. set loop_id long id
  71. endif
  72. savepos tmp_off2
  73. math tmp_off2 - tmp_off
  74. math tmp_off2 % 2
  75. if tmp_off2 == 1
  76. get dummy byte
  77. endif
  78. elif chunk_name == 1954051180 # ltxt
  79. get dummy long
  80. get id long
  81. get cue_time long
  82. if id == loop_id
  83. set loop_end long cue_time
  84. endif
  85. get rgn long
  86. get dummy longlong
  87. else
  88. print "Unknown chunk type at position %list_off%!"
  89. endif
  90. savepos list_off
  91. next
  92. if loop_end != -1
  93. savepos tmp_off
  94. goto cue_off
  95. for i = 0 < cuepoints
  96. get id long
  97. get cue_pos long
  98. get data long
  99. get dummy long
  100. get dummy long
  101. get dummy long
  102. if id == loop_id
  103. set loop_start long cue_pos
  104. math loop_end + loop_start
  105. break
  106. endif
  107. next i
  108. goto tmp_off
  109. endif
  110. print "Loop start: %loop_start%"
  111. print "Loop end: %loop_end%"
  112. print "Samples: %num_samples%"
  113. endif
  114.  
  115.  
  116. set memory_sz long data_sz
  117. math memory_sz + 0xc0
  118. xmath lastblock_sz_per_channel "(data_sz % (interleave * channels)) / channels"
  119. xmath data_sz_until_lastblock "data_sz - (lastblock_sz_per_channel * channels)"
  120. xmath lastblock_data_off "data_offset + data_sz_until_lastblock"
  121. xmath lastblock_padding "interleave - lastblock_sz_per_channel"
  122. xmath lastblock_memory_off "memory_sz - (lastblock_sz_per_channel * channels) - 1"
  123. for i = 0 < channels
  124. math memory_sz + lastblock_padding
  125. next i
  126.  
  127. putVarChr MEMORY_FILE memory_sz 0
  128. log MEMORY_FILE 0 0
  129.  
  130.  
  131. # create genh
  132. putVarChr MEMORY_FILE 0 0x484e4547 long # "GENH"
  133. putVarChr MEMORY_FILE 4 channels long # ch
  134. putVarChr MEMORY_FILE 8 interleave long # interleave
  135. putVarChr MEMORY_FILE 0xc freq long
  136. if loop_start != -1
  137. putVarChr MEMORY_FILE 0x10 loop_start long
  138. putVarChr MEMORY_FILE 0x14 loop_end long # number of samples
  139. else
  140. putVarChr MEMORY_FILE 0x10 0xffffffff long
  141. putVarChr MEMORY_FILE 0x14 num_samples long # number of samples
  142. endif
  143. putVarChr MEMORY_FILE 0x18 0xc long # ?
  144. putVarChr MEMORY_FILE 0x1c 0xc0 long # stream start
  145. putVarChr MEMORY_FILE 0x20 0xc0 long # stream start
  146. putVarChr MEMORY_FILE 0x24 0xa0 long # coef 1
  147. putVarChr MEMORY_FILE 0x28 0xa0 long # coef 2
  148. putVarChr MEMORY_FILE 0x2c 0 long
  149. putVarChr MEMORY_FILE 0x34 0xa0 long # coef 1
  150. putVarChr MEMORY_FILE 0x38 0xa0 long # coef 2
  151. putVarChr MEMORY_FILE 0x9f 0 byte
  152. append
  153. log MEMORY_FILE 0 0x10 MEMORY_FILE2
  154. log MEMORY_FILE 0 0x10 MEMORY_FILE3
  155. log MEMORY_FILE data_offset data_sz_until_lastblock 0
  156. for i = 0 < channels
  157. log MEMORY_FILE lastblock_data_off lastblock_sz_per_channel 0
  158. append
  159. math lastblock_memory_off + interleave
  160. math lastblock_data_off + lastblock_sz_per_channel
  161. putVarChr MEMORY_FILE lastblock_memory_off 0 byte
  162. append
  163. next i
  164. append
  165.  
  166. putVarChr MEMORY_FILE memory_sz 0 byte
  167. get name basename
  168. string name += ".genh"
  169. log name 0 memory_sz MEMORY_FILE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement