Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # v.02
- # changed patch addr and fixed random script compile error
- # now need to fix game hanging on load screen
- # =========================================================
- # Add '/' to xex
- # =========================================================
- .long stringOLD
- .long (9f - 0f)/4
- 0:
- .string "/"
- .byte 0
- .align 4
- 9:
- # =========================================================
- # Add '\\' to xex
- # =========================================================
- .long stringNEW
- .long (9f-0f)/4
- 0:
- .string "\\"
- .byte 0
- .align 4
- 9:
- # =========================================================
- # Replace '/' with '\\'
- # =========================================================
- .long Replace
- .long (9f - 0f)/4
- 0:
- replace:
- mfspr %r12, %LR
- bl (saveGPRLR14 - (Replace + 4))
- stwu %r1, -0xC0(%r1)
- mr %r19, %r7
- mr %r31, %r3
- mr %r21, %r4
- mr %r25, %r5
- mr %r20, %r6
- li %r23, 0
- mr %r11, %r4
- loc_91004F7C:
- lbz %r10, 0(%r11)
- addi %r11, %r11, 1
- cmplwi cr6, %r10, 0
- bne cr6, loc_91004F7C
- subf %r10, %r21, %r11
- mr %r11, %r25
- addi %r10, %r10, -1
- clrlwi %r24, %r10, 0
- loc_91004F9C:
- lbz %r10, 0(%r11)
- addi %r11, %r11, 1
- cmplwi cr6, %r10, 0
- bne cr6, loc_91004F9C
- subf %r11, %r25, %r11
- cmplwi cr6, %r20, 0
- addi %r11, %r11, -1
- clrlwi %r22, %r11, 0
- beq cr6, loc_91004FD0
- lwz %r11, 0(%r20)
- cmpwi cr6, %r11, 0
- mr %r30, %r11
- bgt cr6, loc_91004FD4
- loc_91004FD0:
- li %r30, -1
- loc_91004FD4:
- mr %r3, %r31
- b loc_91004FEC
- # ---------------------------------------------------------------------------
- loc_91004FDC:
- cmpw cr6, %r23, %r30
- beq cr6, loc_91004FFC
- add %r3, %r24, %r3
- addi %r23, %r23, 1
- loc_91004FEC:
- mr %r4, %r21
- bl (strstr - (Replace + 156))
- cmplwi %r3, 0
- bne loc_91004FDC
- loc_91004FFC:
- mr %r11, %r31
- loc_91005000:
- lbz %r10, 0(%r11)
- addi %r11, %r11, 1
- cmplwi cr6, %r10, 0
- bne cr6, loc_91005000
- subf %r11, %r31, %r11
- subf %r10, %r24, %r22
- addi %r11, %r11, -1
- mullw %r10, %r10, %r23
- clrlwi %r11, %r11, 0
- add %r11, %r10, %r11
- addi %r3, %r11, 1
- mr %r3, %r19
- mr. %r27, %r3
- bne loc_91005054
- nop
- # ---------------------------------------------------------------------------
- loc_91005054:
- mr %r3, %r31
- mr %r26, %r23
- li %r30, 0
- cmpwi cr6, %r23, 0
- ble cr6, loc_910050C8
- loc_91005068:
- mr %r4, %r21
- addi %r26, %r26, -1
- bl (strstr - (Replace + 260))
- mr. %r28, %r3
- beq loc_910050C8
- subf %r29, %r31, %r28
- mr %r4, %r31
- mr %r5, %r29
- add %r3, %r30, %r27
- bl (strncpy - (Replace + 288))
- add %r11, %r30, %r29
- mr %r9, %r25
- subf %r10, %r25, %r11
- add %r10, %r10, %r27
- loc_910050A0:
- lbz %r8, 0(%r9)
- extsb. %r7, %r8
- stbx %r8, %r10, %r9
- addi %r9, %r9, 1
- bne loc_910050A0
- add %r3, %r24, %r28
- add %r30, %r11, %r22
- mr %r31, %r3
- cmpwi cr6, %r26, 0
- bgt cr6, loc_91005068
- loc_910050C8:
- add %r10, %r30, %r27
- mr %r11, %r31
- subf %r10, %r31, %r10
- loc_910050D4:
- lbz %r9, 0(%r11)
- extsb. %r8, %r9
- stbx %r9, %r10, %r11
- addi %r11, %r11, 1
- bne loc_910050D4
- loc_910050E8:
- cmplwi cr6, %r20, 0
- beq cr6, loc_910050F4
- stw %r23, 0(%r20)
- loc_910050F4:
- mr %r3, %r27
- addi %r1, %r1, 0xC0
- b (restGPRLR14 - (Replace + 400))
- 9:
- # =========================================================
- # =========================================================
- # strncpy - Add strncpy function to xex
- # =========================================================
- .long strncpy
- .long (9f - 0f)/4
- 0:
- strncpy:
- mr %r11, %r3
- cmplwi cr6, %r5, 0
- beqlr cr6
- subf %r10, %r3, %r4
- loc_91008BD0:
- lbzx %r9, %r10, %r11
- cmplwi %r9, 0
- stb %r9, 0(%r11)
- addi %r11, %r11, 1
- beq loc_91008BEC
- addic. %r5, %r5, -1
- bne loc_91008BD0
- loc_91008BEC:
- cmplwi cr6, %r5, 0
- beqlr cr6
- addic. %r10, %r5, -1
- beqlr
- addi %r11, %r11, -1
- li %r9, 0
- cmplwi %r10, 0
- beqlr
- mtctr %r10
- loc_91008C10:
- stbu %r9, 1(%r11)
- bdnz loc_91008C10
- blr
- 9:
- # =========================================================
- # =========================================================
- # Add 'GAME:\\raw\\%s' to xex
- # =========================================================
- .long stringGAME
- .long (9f - 0f)/4
- 0:
- .string "GAME:\\raw\\%s"
- .byte 0
- .align 2
- 9:
- # =========================================================
- # =========================================================
- # Add '.gsc' to xex
- # =========================================================
- .long stringGSC
- .long (9f - 0f)/4
- 0:
- .string ".gsc"
- .byte 0
- .align 2
- 9:
- # =========================================================
- # =========================================================
- # Initial branch
- # =========================================================
- .long branchToHookOne
- .long (9f - 0f)/4
- 0:
- bl (hookOneStart - branchToHookOne)#12
- mr %r31, %r3
- 9:
- # =========================================================
- # =========================================================
- # =========================================================
- # First Hook
- # Check if rawfile name contains '.gsc'
- #
- # Setup : Save r4, r5, r6, r10, r11, r13
- # r29 - alloc'd memory = 0x18000
- # r30 - rawfile info
- # char* name
- # compressed size
- # decompressed size
- # data start
- # =========================================================
- .long hookOneStart
- .long (9f - 0f)/4
- 0:
- mfspr %r12, %LR
- bl (saveGPRLR14 - (hookOneStart + 4))
- stwu %r1, -0x80(%r1)
- mr %r19, %r4
- mr %r18, %r5
- mr %r17, %r6
- mr %r16, %r10
- mr %r15, %r11
- mr %r14, %r13
- # =======================================================
- # strstr
- # =======================================================
- lis %r4, stringGSC@h # .gsc
- ori %r4, %r4, stringGSC@l
- lwz %r3, 0(%r30) # rawfile name
- bl ( strstr - (hookOneStart + 48))
- cmplwi cr6, %r3, 0
- bgt cr6, loadfile
- b fail
- # =======================================================
- # If names contains '.gsc' go to replace function
- # Replace function replaces '/' with '\\' so we can
- # read the file from the HDD
- # =======================================================
- loadfile:
- mr %r7, %r28
- lis %r11, stringOLD@h
- lis %r10, stringNEW@h
- ori %r4, %r11, stringOLD@l
- ori %r5, %r10, stringNEW@l
- addi %r6, %r1, 0x20
- lwz %r3, 0(%r30) # rawfile name
- bl (Replace - (hookOneStart + 92))
- mr %r5, %r3
- mr %r3, %r29
- bl (loadRawFile - (hookOneStart + 104))
- cmpwi cr6, %r3, 0
- ble cr6, fail
- add %r8, %r3, %r29
- b return
- fail:
- mr %r3, %r31
- add %r8, %r31, %r29
- return:
- li %r7, 0
- mr %r4, %r19
- mr %r5, %r18
- mr %r6, %r17
- mr %r10, %r16
- mr %r11, %r15
- mr %r13, %r14
- addi %r1, %r1, 0x80
- b (restGPRLR14 - (hookOneStart + 164))
- 9:
- # =========================================================
- #
- #
- #
- #
- # =========================================================
- # Load RawFile
- # =========================================================
- .long loadRawFile
- .long (9f - 0f)/4
- 0:
- # =========================================================
- # Setup : Save
- # =========================================================
- mfspr %r12, %LR
- bl (saveGPRLR14 - (loadRawFile +4))
- stwu %r1, -0x190(%r1)
- mr %r27, %r3 # alloc'd mem
- # =======================================================
- # sprintf
- # =======================================================
- lis %r4, stringGAME@h # game:\\raw\\%s
- ori %r4, %r4, stringGAME@l
- nop
- addi %r3, %r1, 0x40
- bl ( sprintf - (loadRawFile + 32))
- # =======================================================
- # CreateFile
- # =======================================================
- lis %r4, -0x8000
- li %r5, 0
- li %r6, 0
- li %r7, 3
- li %r8, 0x80
- li %r9, 0
- addi %r3, %r1, 0x40
- bl (CreateFile - (loadRawFile + 64))
- mr %r26, %r3 # handle
- cmpwi cr6, %r3, -1
- beq cr6, fail_restore_return
- # =======================================================
- # GetFileSize
- # =======================================================
- li %r4, 0
- bl (GetFileSize - (loadRawFile + 84))
- lis %r5, 1
- ori %r5, %r5, 0x8000
- cmpw cr6, %r3, %r5
- bgt cr6, fail_restore_return
- stw %r3, 8(%r30)
- mr %r28, %r3
- # =======================================================
- # ReadFile
- # =======================================================
- mr %r4, %r27 # buffer
- li %r7, 0
- addi %r6, %r1, 0x30
- mr %r5, %r3 # size
- mr %r3, %r26 # handle
- bl ( ReadFile - (loadRawFile + 132))
- cmpwi cr6, %r3, -1
- beq cr6, fail_restore_return
- # =======================================================
- # CloseHandle
- # =======================================================
- mr %r3, %r26 # handle
- bl ( CloseHandle - (loadRawFile + 148))
- # =======================================================
- # Pass : Restore GPR : Return
- # =======================================================
- mr %r3, %r28
- addi %r1, %r1, 0x190
- b (restGPRLR14 - (loadRawFile + 160))
- # =======================================================
- # Fail : Restore GPR : Return
- # =======================================================
- fail_restore_return:
- li %r3, 0
- addi %r1, %r1, 0x190
- b (restGPRLR14 -(loadRawFile + 172))
- 9:
- # =======================================================
- # End Patches
- # =======================================================
- .long 0xFFFFFFFF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement