Advertisement
Dwack

MW2 rawfile from HDD v.02

Jan 16th, 2012
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.16 KB | None | 0 0
  1. # v.02
  2. # changed patch addr and fixed random script compile error
  3. # now need to fix game hanging on load screen
  4.  
  5.  
  6. # =========================================================
  7. # Add '/' to xex
  8. # =========================================================
  9. .long stringOLD
  10. .long (9f - 0f)/4
  11. 0:
  12. .string "/"
  13. .byte 0
  14. .align 4
  15. 9:
  16. # =========================================================
  17. # Add '\\' to xex
  18. # =========================================================
  19. .long stringNEW
  20. .long (9f-0f)/4
  21. 0:
  22. .string "\\"
  23. .byte 0
  24. .align 4
  25. 9:
  26.  
  27. # =========================================================
  28. # Replace '/' with '\\'
  29. # =========================================================
  30. .long Replace
  31. .long (9f - 0f)/4
  32. 0:
  33. replace:
  34. mfspr %r12, %LR
  35. bl (saveGPRLR14 - (Replace + 4))
  36. stwu %r1, -0xC0(%r1)
  37. mr %r19, %r7
  38. mr %r31, %r3
  39. mr %r21, %r4
  40. mr %r25, %r5
  41. mr %r20, %r6
  42. li %r23, 0
  43. mr %r11, %r4
  44.  
  45. loc_91004F7C:
  46. lbz %r10, 0(%r11)
  47. addi %r11, %r11, 1
  48. cmplwi cr6, %r10, 0
  49. bne cr6, loc_91004F7C
  50. subf %r10, %r21, %r11
  51. mr %r11, %r25
  52. addi %r10, %r10, -1
  53. clrlwi %r24, %r10, 0
  54.  
  55. loc_91004F9C:
  56. lbz %r10, 0(%r11)
  57. addi %r11, %r11, 1
  58. cmplwi cr6, %r10, 0
  59. bne cr6, loc_91004F9C
  60. subf %r11, %r25, %r11
  61. cmplwi cr6, %r20, 0
  62. addi %r11, %r11, -1
  63. clrlwi %r22, %r11, 0
  64. beq cr6, loc_91004FD0
  65. lwz %r11, 0(%r20)
  66. cmpwi cr6, %r11, 0
  67. mr %r30, %r11
  68. bgt cr6, loc_91004FD4
  69.  
  70. loc_91004FD0:
  71. li %r30, -1
  72.  
  73. loc_91004FD4:
  74. mr %r3, %r31
  75. b loc_91004FEC
  76. # ---------------------------------------------------------------------------
  77.  
  78. loc_91004FDC:
  79. cmpw cr6, %r23, %r30
  80. beq cr6, loc_91004FFC
  81. add %r3, %r24, %r3
  82. addi %r23, %r23, 1
  83.  
  84. loc_91004FEC:
  85. mr %r4, %r21
  86. bl (strstr - (Replace + 156))
  87. cmplwi %r3, 0
  88. bne loc_91004FDC
  89.  
  90. loc_91004FFC:
  91. mr %r11, %r31
  92.  
  93. loc_91005000:
  94. lbz %r10, 0(%r11)
  95. addi %r11, %r11, 1
  96. cmplwi cr6, %r10, 0
  97. bne cr6, loc_91005000
  98. subf %r11, %r31, %r11
  99. subf %r10, %r24, %r22
  100. addi %r11, %r11, -1
  101. mullw %r10, %r10, %r23
  102. clrlwi %r11, %r11, 0
  103. add %r11, %r10, %r11
  104. addi %r3, %r11, 1
  105. mr %r3, %r19
  106. mr. %r27, %r3
  107. bne loc_91005054
  108. nop
  109. # ---------------------------------------------------------------------------
  110. loc_91005054:
  111. mr %r3, %r31
  112. mr %r26, %r23
  113. li %r30, 0
  114. cmpwi cr6, %r23, 0
  115. ble cr6, loc_910050C8
  116.  
  117. loc_91005068:
  118. mr %r4, %r21
  119. addi %r26, %r26, -1
  120. bl (strstr - (Replace + 260))
  121. mr. %r28, %r3
  122. beq loc_910050C8
  123. subf %r29, %r31, %r28
  124. mr %r4, %r31
  125. mr %r5, %r29
  126. add %r3, %r30, %r27
  127. bl (strncpy - (Replace + 288))
  128. add %r11, %r30, %r29
  129. mr %r9, %r25
  130. subf %r10, %r25, %r11
  131. add %r10, %r10, %r27
  132.  
  133. loc_910050A0:
  134. lbz %r8, 0(%r9)
  135. extsb. %r7, %r8
  136. stbx %r8, %r10, %r9
  137. addi %r9, %r9, 1
  138. bne loc_910050A0
  139. add %r3, %r24, %r28
  140. add %r30, %r11, %r22
  141. mr %r31, %r3
  142. cmpwi cr6, %r26, 0
  143. bgt cr6, loc_91005068
  144.  
  145. loc_910050C8:
  146. add %r10, %r30, %r27
  147. mr %r11, %r31
  148. subf %r10, %r31, %r10
  149.  
  150. loc_910050D4:
  151. lbz %r9, 0(%r11)
  152. extsb. %r8, %r9
  153. stbx %r9, %r10, %r11
  154. addi %r11, %r11, 1
  155. bne loc_910050D4
  156.  
  157. loc_910050E8:
  158. cmplwi cr6, %r20, 0
  159. beq cr6, loc_910050F4
  160. stw %r23, 0(%r20)
  161.  
  162. loc_910050F4:
  163. mr %r3, %r27
  164. addi %r1, %r1, 0xC0
  165. b (restGPRLR14 - (Replace + 400))
  166. 9:
  167. # =========================================================
  168.  
  169. # =========================================================
  170. # strncpy - Add strncpy function to xex
  171. # =========================================================
  172. .long strncpy
  173. .long (9f - 0f)/4
  174. 0:
  175. strncpy:
  176. mr %r11, %r3
  177. cmplwi cr6, %r5, 0
  178. beqlr cr6
  179. subf %r10, %r3, %r4
  180.  
  181. loc_91008BD0:
  182. lbzx %r9, %r10, %r11
  183. cmplwi %r9, 0
  184. stb %r9, 0(%r11)
  185. addi %r11, %r11, 1
  186. beq loc_91008BEC
  187. addic. %r5, %r5, -1
  188. bne loc_91008BD0
  189.  
  190. loc_91008BEC:
  191. cmplwi cr6, %r5, 0
  192. beqlr cr6
  193. addic. %r10, %r5, -1
  194. beqlr
  195. addi %r11, %r11, -1
  196. li %r9, 0
  197. cmplwi %r10, 0
  198. beqlr
  199. mtctr %r10
  200.  
  201. loc_91008C10:
  202. stbu %r9, 1(%r11)
  203. bdnz loc_91008C10
  204. blr
  205. 9:
  206. # =========================================================
  207.  
  208. # =========================================================
  209. # Add 'GAME:\\raw\\%s' to xex
  210. # =========================================================
  211. .long stringGAME
  212. .long (9f - 0f)/4
  213. 0:
  214. .string "GAME:\\raw\\%s"
  215. .byte 0
  216. .align 2
  217. 9:
  218. # =========================================================
  219.  
  220. # =========================================================
  221. # Add '.gsc' to xex
  222. # =========================================================
  223. .long stringGSC
  224. .long (9f - 0f)/4
  225. 0:
  226. .string ".gsc"
  227. .byte 0
  228. .align 2
  229. 9:
  230. # =========================================================
  231.  
  232. # =========================================================
  233. # Initial branch
  234. # =========================================================
  235. .long branchToHookOne
  236. .long (9f - 0f)/4
  237. 0:
  238. bl (hookOneStart - branchToHookOne)#12
  239. mr %r31, %r3
  240. 9:
  241. # =========================================================
  242. # =========================================================
  243. # =========================================================
  244. # First Hook
  245. # Check if rawfile name contains '.gsc'
  246. #
  247. # Setup : Save r4, r5, r6, r10, r11, r13
  248. # r29 - alloc'd memory = 0x18000
  249. # r30 - rawfile info
  250. # char* name
  251. # compressed size
  252. # decompressed size
  253. # data start
  254. # =========================================================
  255. .long hookOneStart
  256. .long (9f - 0f)/4
  257. 0:
  258. mfspr %r12, %LR
  259. bl (saveGPRLR14 - (hookOneStart + 4))
  260. stwu %r1, -0x80(%r1)
  261. mr %r19, %r4
  262. mr %r18, %r5
  263. mr %r17, %r6
  264. mr %r16, %r10
  265. mr %r15, %r11
  266. mr %r14, %r13
  267. # =======================================================
  268. # strstr
  269. # =======================================================
  270. lis %r4, stringGSC@h # .gsc
  271. ori %r4, %r4, stringGSC@l
  272. lwz %r3, 0(%r30) # rawfile name
  273. bl ( strstr - (hookOneStart + 48))
  274. cmplwi cr6, %r3, 0
  275. bgt cr6, loadfile
  276. b fail
  277. # =======================================================
  278. # If names contains '.gsc' go to replace function
  279. # Replace function replaces '/' with '\\' so we can
  280. # read the file from the HDD
  281. # =======================================================
  282. loadfile:
  283. mr %r7, %r28
  284. lis %r11, stringOLD@h
  285. lis %r10, stringNEW@h
  286. ori %r4, %r11, stringOLD@l
  287. ori %r5, %r10, stringNEW@l
  288. addi %r6, %r1, 0x20
  289. lwz %r3, 0(%r30) # rawfile name
  290. bl (Replace - (hookOneStart + 92))
  291. mr %r5, %r3
  292. mr %r3, %r29
  293. bl (loadRawFile - (hookOneStart + 104))
  294. cmpwi cr6, %r3, 0
  295. ble cr6, fail
  296. add %r8, %r3, %r29
  297. b return
  298. fail:
  299. mr %r3, %r31
  300. add %r8, %r31, %r29
  301. return:
  302. li %r7, 0
  303. mr %r4, %r19
  304. mr %r5, %r18
  305. mr %r6, %r17
  306. mr %r10, %r16
  307. mr %r11, %r15
  308. mr %r13, %r14
  309. addi %r1, %r1, 0x80
  310. b (restGPRLR14 - (hookOneStart + 164))
  311. 9:
  312. # =========================================================
  313. #
  314. #
  315. #
  316. #
  317. # =========================================================
  318. # Load RawFile
  319. # =========================================================
  320. .long loadRawFile
  321. .long (9f - 0f)/4
  322. 0:
  323. # =========================================================
  324. # Setup : Save
  325. # =========================================================
  326. mfspr %r12, %LR
  327. bl (saveGPRLR14 - (loadRawFile +4))
  328. stwu %r1, -0x190(%r1)
  329. mr %r27, %r3 # alloc'd mem
  330. # =======================================================
  331. # sprintf
  332. # =======================================================
  333. lis %r4, stringGAME@h # game:\\raw\\%s
  334. ori %r4, %r4, stringGAME@l
  335. nop
  336. addi %r3, %r1, 0x40
  337. bl ( sprintf - (loadRawFile + 32))
  338. # =======================================================
  339. # CreateFile
  340. # =======================================================
  341. lis %r4, -0x8000
  342. li %r5, 0
  343. li %r6, 0
  344. li %r7, 3
  345. li %r8, 0x80
  346. li %r9, 0
  347. addi %r3, %r1, 0x40
  348. bl (CreateFile - (loadRawFile + 64))
  349. mr %r26, %r3 # handle
  350. cmpwi cr6, %r3, -1
  351. beq cr6, fail_restore_return
  352. # =======================================================
  353. # GetFileSize
  354. # =======================================================
  355. li %r4, 0
  356. bl (GetFileSize - (loadRawFile + 84))
  357. lis %r5, 1
  358. ori %r5, %r5, 0x8000
  359. cmpw cr6, %r3, %r5
  360. bgt cr6, fail_restore_return
  361. stw %r3, 8(%r30)
  362. mr %r28, %r3
  363. # =======================================================
  364. # ReadFile
  365. # =======================================================
  366. mr %r4, %r27 # buffer
  367. li %r7, 0
  368. addi %r6, %r1, 0x30
  369. mr %r5, %r3 # size
  370. mr %r3, %r26 # handle
  371. bl ( ReadFile - (loadRawFile + 132))
  372. cmpwi cr6, %r3, -1
  373. beq cr6, fail_restore_return
  374. # =======================================================
  375. # CloseHandle
  376. # =======================================================
  377. mr %r3, %r26 # handle
  378. bl ( CloseHandle - (loadRawFile + 148))
  379. # =======================================================
  380. # Pass : Restore GPR : Return
  381. # =======================================================
  382. mr %r3, %r28
  383. addi %r1, %r1, 0x190
  384. b (restGPRLR14 - (loadRawFile + 160))
  385. # =======================================================
  386. # Fail : Restore GPR : Return
  387. # =======================================================
  388. fail_restore_return:
  389. li %r3, 0
  390. addi %r1, %r1, 0x190
  391. b (restGPRLR14 -(loadRawFile + 172))
  392. 9:
  393. # =======================================================
  394. # End Patches
  395. # =======================================================
  396. .long 0xFFFFFFFF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement