.text .global mpPauseFix1 .global mpPauseFix2 .extern continueFromMpPauseFix1 .extern continueFromMpPauseFix2 mpPauseFix1: lis r5, continueFromMpPauseFix1@h ori r5, r5, continueFromMpPauseFix1@l b mpPauseFix mpPauseFix2: lis r5, continueFromMpPauseFix2@h ori r5, r5, continueFromMpPauseFix2@l b mpPauseFix .extern CheckIfSinglePlayer mpPauseFix: stwu r1, -0x20(r1) mflr r0 stw r0, 0x24(r1) stw r31, 0x1C(r1) stw r30, 0x18(r1) mr r31, r3 mr r30, r4 bl CheckIfSinglePlayer cmpwi r3, 1 bne DontDoThis mr r3, r31 mr r4, r30 mtctr r5 bctrl DontDoThis: lwz r30, 0x18(r1) lwz r31, 0x1C(r1) lwz r0, 0x24(r1) mtlr r0 addi r1, r1, 0x20 blr .global newClimbSounds .extern StagePtr newClimbSounds: lis r6, StagePtr@h ori r6, r6, StagePtr@l lwz r6, 0(r6) lhz r6, 0x120C(r6) cmpwi r6, 14 beq pngn cmpwi r6, 0x903 beq pngn cmpwi r6, 0x40E beq climb li r4, 0x134 blr pngn: li r4, 0xE1 blr climb: li r4, 0xC9 blr .global TextWriterCrap .extern TextWriterCrapContinue TextWriterCrap: lis r6, 0xFFFF ori r6, r6, 0xFF00 lwz r0, 8(r5) or r0, r0, r6 stw r0, 0x18(r1) lwz r0, 0xC(r5) or r0, r0, r6 stw r0, 0x1C(r1) lwz r0, 0x10(r5) or r0, r0, r6 stw r0, 0x20(r1) lwz r0, 0x14(r5) or r0, r0, r6 stw r0, 0x24(r1) b TextWriterCrapContinue .global HeapChangeAttempt HeapChangeAttempt: lis 4, 0x8037 ori 4, 4, 0x7F50 lwz 4, 0(4) blr .extern OSReport .global UniversalFunctionLog UniversalFunctionLog: stwu r1, -0x10(r1) stw r0, 0x14(r1) stw r31, 0xC(r1) stw r30, 0x8(r1) mr r31, r3 mr r30, r4 crclr 4*cr1+eq mr r4, r31 #Loop through callstack, kind of lwz r3, 0(r1) lwz r5, 4(r3) lwz r3, 0(r3) lwz r6, 4(r3) lwz r3, 0(r3) lwz r7, 4(r3) lwz r3, 0(r3) lwz r8, 4(r3) lwz r3, 0(r3) lwz r9, 4(r3) lwz r3, 0(r3) lwz r10, 4(r3) #lwz r10, 0x14(r29) lis r3, UniLogStr@h ori r3, r3, UniLogStr@l bl OSReport mr r3, r31 mr r4, r30 lwz r30, 0x8(r1) lwz r31, 0xC(r1) lwz r0, 0x14(r1) mtlr r0 addi r1, r1, 0x10 blr .data UniLogStr: .string "[ULog] returning %8x to: %x > %x > %x > %x > %x > %x\n"