; ; sub_51A54 from 0x51a54 to 0x51de4 (912 bytes) ; ; 2 xrefs: ; > sub_51EF4 @ 0x51f34 ; > sub_51EF4 @ 0x51f3c ; ; This function is hookable on this platform! ; ; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA ; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings ; B loc_51A58 ; +0x0, 0x51a54 SUB SP, SP, #0x50 ; +0x4, 0x51a58 STP X22, X21, [SP,#0x40+var_20] ; +0x8, 0x51a5c STP X20, X19, [SP,#0x40+var_10] ; +0xc, 0x51a60 STP X29, X30, [SP,#0x40+var_s0] ; +0x10, 0x51a64 STR XZR, [SP,#0x40+var_28] ; +0x14, 0x51a68 MOV X19, X0 ; +0x18, 0x51a6c LDR X0, [X0,#0x168] ; +0x1c, 0x51a70 ADD X29, SP, #0x40 ; +0x20, 0x51a74 BL .FMOD_OS_CriticalSection_Enter ; +0x24, 0x51a78 LDR X8, [X19,#0x150] ; +0x28, 0x51a7c ADD X9, X19, #0x150 ; +0x2c, 0x51a80 CMP X8, X9 ; +0x30, 0x51a84 B.EQ loc_51B00 ; +0x34, 0x51a88 LDP X10, X9, [X8,#8] ; +0x38, 0x51a8c STR X9, [SP,#0x40+var_28] ; +0x3c, 0x51a90 LDR X9, [X8] ; +0x40, 0x51a94 STR X9, [X10] ; +0x44, 0x51a98 LDR X9, [X8] ; +0x48, 0x51a9c STR X10, [X9,#8] ; +0x4c, 0x51aa0 STP X8, X8, [X8] ; +0x50, 0x51aa4 LDR X0, [X19,#0x168] ; +0x54, 0x51aa8 LDR X20, [SP,#0x40+var_28] ; +0x58, 0x51aac BL .FMOD_OS_CriticalSection_Leave ; +0x5c, 0x51ab0 CBZ X20, loc_51DCC ; +0x60, 0x51ab4 ADD X8, X20, #0x110 ; +0x64, 0x51ab8 LDR X19, [X20,#0xD8] ; +0x68, 0x51abc LDAR W9, [X8] ; +0x6c, 0x51ac0 LDR X8, [SP,#0x40+var_28] ; +0x70, 0x51ac4 CMP W9, #1 ; +0x74, 0x51ac8 B.NE loc_51B0C ; +0x78, 0x51acc LDR W2, [X8,#0x2C] ; +0x7c, 0x51ad0 LDR X8, [X8,#0x108] ; +0x80, 0x51ad4 MOV W9, #0x10000800 ; +0x84, 0x51ad8 TST W2, W9 ; +0x8c, 0x51ae0 B.EQ loc_51C20 ; +0x90, 0x51ae4 LDRB W9, [X8,#0x118] ; +0x94, 0x51ae8 LDR X1, [X8,#0x30] ; +0x98, 0x51aec BL sub_52128 ; +0x9c, 0x51af0 MOV W20, W0 ; +0xa0, 0x51af4 CBNZ W20, loc_51CD0 ; +0xa4, 0x51af8 B loc_51C74 ; +0xa8, 0x51afc LDR X0, [X19,#0x168] ; +0xac, 0x51b00 BL .FMOD_OS_CriticalSection_Leave ; +0xb0, 0x51b04 B loc_51DCC ; +0xb4, 0x51b08 ADD X8, X8, #0x110 ; +0xb8, 0x51b0c LDAR W8, [X8] ; +0xbc, 0x51b10 LDR X21, [SP,#0x40+var_28] ; +0xc0, 0x51b14 CMP W8, #7 ; +0xc4, 0x51b18 B.NE loc_51B40 ; +0xc8, 0x51b1c MOV W20, #0x440 ; +0xcc, 0x51b20 ADD X8, X21, #0x58 ; 'X' ; +0xd0, 0x51b24 LDAR W9, [X8] ; +0xd4, 0x51b28 TST W9, W20 ; +0xd8, 0x51b2c B.NE loc_51B90 ; +0xdc, 0x51b30 MOV W0, #0xA ; +0xe0, 0x51b34 BL .FMOD_OS_Time_Sleep ; +0xe4, 0x51b38 B loc_51B24 ; +0xe8, 0x51b3c ADD X8, X21, #0x110 ; +0xec, 0x51b40 LDAR W8, [X8] ; +0xf0, 0x51b44 CMP W8, #5 ; +0xf4, 0x51b48 B.NE loc_51CCC ; +0xf8, 0x51b4c LDR X21, [SP,#0x40+var_28] ; +0xfc, 0x51b50 LDR W1, [X21,#0xC0] ; +0x100, 0x51b54 MOV X0, X21 ; +0x104, 0x51b58 BL sub_68A84 ; +0x108, 0x51b5c MOV W20, W0 ; +0x10c, 0x51b60 CBNZ W0, loc_51CD0 ; +0x110, 0x51b64 MOV W2, #2 ; +0x114, 0x51b68 MOV X0, X21 ; +0x118, 0x51b6c MOV W1, WZR ; +0x11c, 0x51b70 BL sub_66E18 ; +0x120, 0x51b74 MOV W20, W0 ; +0x124, 0x51b78 CBNZ W0, loc_51CD0 ; +0x128, 0x51b7c MOV X0, X21 ; +0x12c, 0x51b80 BL sub_66D84 ; +0x130, 0x51b84 MOV W20, W0 ; +0x134, 0x51b88 B loc_51CD0 ; +0x138, 0x51b8c LDAR W8, [X8] ; +0x13c, 0x51b90 TBNZ W8, #6, loc_51C94 ; +0x140, 0x51b94 LDR X22, [SP,#0x40+var_28] ; +0x144, 0x51b98 LDR X0, [X21,#0x178] ; +0x148, 0x51b9c MOV W3, #1 ; +0x14c, 0x51ba0 LDR X8, [X22,#0x108] ; +0x150, 0x51ba4 LDR X9, [X0] ; +0x154, 0x51ba8 LDR W1, [X8,#0x11C] ; +0x158, 0x51bac LDR W2, [X8,#0x120] ; +0x15c, 0x51bb0 LDR X8, [X9,#0xD8] ; +0x160, 0x51bb4 BLR X8 ; +0x164, 0x51bb8 LDR X8, [X22,#0xD8] ; +0x168, 0x51bbc MOV W20, W0 ; +0x16c, 0x51bc0 MOV W9, #8 ; +0x170, 0x51bc4 ADD X0, SP, #0x40+var_38 ; +0x174, 0x51bc8 STRB WZR, [SP,#0x40+var_2C] ; +0x178, 0x51bcc STR X8, [SP,#0x40+var_38] ; +0x17c, 0x51bd0 STR W9, [SP,#0x40+var_30] ; +0x180, 0x51bd4 BL sub_520A0 ; +0x184, 0x51bd8 LDR X0, [X21,#0x178] ; +0x188, 0x51bdc CMP W20, #0x1E ; +0x18c, 0x51be0 LDR W8, [X0,#0x3C] ; +0x190, 0x51be4 AND W9, W8, #0xFFFFBFFF ; +0x194, 0x51be8 STR W9, [X0,#0x3C] ; +0x198, 0x51bec B.EQ loc_51C10 ; +0x19c, 0x51bf0 CBNZ W20, loc_51C14 ; +0x1a0, 0x51bf4 LDR X9, [X0,#0xC0] ; +0x1a4, 0x51bf8 CBZ X9, loc_51C10 ; +0x1a8, 0x51bfc LDR X9, [X0] ; +0x1ac, 0x51c00 UBFX W1, W8, #5, #1 ; +0x1b0, 0x51c04 LDR X9, [X9,#0x58] ; +0x1b4, 0x51c08 BLR X9 ; +0x1b8, 0x51c0c MOV W20, WZR ; +0x1bc, 0x51c10 ADD X0, SP, #0x40+var_38 ; +0x1c0, 0x51c14 BL sub_51F94 ; +0x1c4, 0x51c18 B loc_51CD0 ; +0x1c8, 0x51c1c LDRB W9, [X8,#0x118] ; +0x1cc, 0x51c20 LDR X1, [X8] ; +0x1d0, 0x51c24 BL sub_52128 ; +0x1d4, 0x51c28 LDR X8, [SP,#0x40+var_28] ; +0x1d8, 0x51c2c MOV W20, W0 ; +0x1dc, 0x51c30 LDR X8, [X8,#0x108] ; +0x1e0, 0x51c34 LDR X1, [X8] ; +0x1e4, 0x51c38 CBZ X1, loc_51C70 ; +0x1e8, 0x51c3c ADRP X8, #off_10F7A0@PAGE ; +0x1ec, 0x51c40 LDR X8, [X8,#off_10F7A0@PAGEOFF]; off_114000 ; +0x1f0, 0x51c44 ADRL X2, aSrcFmodAsyncCp; "../../src/fmod_async.cpp" ; +0x1f4, 0x51c48 MOV W3, #0xCD ; +0x1fc, 0x51c50 LDR X8, [X8]; unk_11F800 ; +0x200, 0x51c54 MOV W4, #1 ; +0x204, 0x51c58 LDR X0, [X8,#(qword_11F9B0 - 0x11F800)] ; +0x208, 0x51c5c BL sub_E2D74 ; +0x20c, 0x51c60 LDR X8, [SP,#0x40+var_28] ; +0x210, 0x51c64 LDR X8, [X8,#0x108] ; +0x214, 0x51c68 STR XZR, [X8] ; +0x218, 0x51c6c CBNZ W20, loc_51CD0 ; +0x21c, 0x51c70 LDR X8, [SP,#0x40+var_28] ; +0x220, 0x51c74 LDR X9, [X8,#0x108] ; +0x224, 0x51c78 LDRB W10, [X9,#0x118] ; +0x228, 0x51c7c CBZ W10, loc_51CCC ; +0x22c, 0x51c80 LDR X9, [X9,#0xA0] ; +0x230, 0x51c84 MOV W20, WZR ; +0x234, 0x51c88 STR X9, [X8,#0xC8] ; +0x238, 0x51c8c B loc_51CD0 ; +0x23c, 0x51c90 LDR X8, [SP,#0x40+var_28] ; +0x240, 0x51c94 MOV W9, #8 ; +0x244, 0x51c98 ADD X0, SP, #0x40+var_38 ; +0x248, 0x51c9c LDR X8, [X8,#0xD8] ; +0x24c, 0x51ca0 STRB WZR, [SP,#0x40+var_2C] ; +0x250, 0x51ca4 STR W9, [SP,#0x40+var_30] ; +0x254, 0x51ca8 STR X8, [SP,#0x40+var_38] ; +0x258, 0x51cac BL sub_520A0 ; +0x25c, 0x51cb0 LDR X8, [X21,#0x178] ; +0x260, 0x51cb4 ADD X0, SP, #0x40+var_38 ; +0x264, 0x51cb8 LDR W9, [X8,#0x3C] ; +0x268, 0x51cbc AND W9, W9, #0xFFFFBFFF ; +0x26c, 0x51cc0 STR W9, [X8,#0x3C] ; +0x270, 0x51cc4 BL sub_51F94 ; +0x274, 0x51cc8 MOV W20, WZR ; +0x278, 0x51ccc LDR X8, [SP,#0x40+var_28] ; +0x27c, 0x51cd0 LDR X9, [X8,#0x108] ; +0x280, 0x51cd4 STR W20, [X9,#0x124] ; +0x284, 0x51cd8 LDR X9, [X8,#0xB8] ; +0x288, 0x51cdc CBZ X9, loc_51CEC ; +0x28c, 0x51ce0 MOV W10, #1 ; +0x290, 0x51ce4 STRB W10, [X9,#0x5C] ; +0x294, 0x51ce8 MOV W9, #1 ; +0x298, 0x51cec CMP W20, #0 ; +0x29c, 0x51cf0 STRB W9, [X8,#0x5C] ; +0x2a0, 0x51cf4 CSET W9, NE ; +0x2a4, 0x51cf8 LSL W9, W9, #1 ; +0x2a8, 0x51cfc ADD X8, X8, #0x110 ; +0x2ac, 0x51d00 STLR W9, [X8] ; +0x2b0, 0x51d04 LDR X0, [SP,#0x40+var_28] ; +0x2b4, 0x51d08 LDR X8, [X0,#0xB8] ; +0x2b8, 0x51d0c CBZ X8, loc_51D1C ; +0x2bc, 0x51d10 BL sub_52148 ; +0x2c0, 0x51d14 LDR X0, [SP,#0x40+var_28] ; +0x2c4, 0x51d18 LDR X8, [X0,#0xA8] ; +0x2c8, 0x51d1c CBZ X8, loc_51D2C ; +0x2cc, 0x51d20 BL sub_52148 ; +0x2d0, 0x51d24 B loc_51D68 ; +0x2d4, 0x51d28 LDR X8, [X0] ; +0x2d8, 0x51d2c LDR X8, [X8] ; +0x2dc, 0x51d30 BLR X8 ; +0x2e0, 0x51d34 TBZ W0, #0, loc_51D68 ; +0x2e4, 0x51d38 LDR X8, [SP,#0x40+var_28] ; +0x2e8, 0x51d3c LDR W9, [X8,#0xB0] ; +0x2ec, 0x51d40 CMP W9, #1 ; +0x2f0, 0x51d44 B.NE loc_51D68 ; +0x2f4, 0x51d48 LDR X9, [X8,#0xA0] ; +0x2f8, 0x51d4c LDR X9, [X9] ; +0x2fc, 0x51d50 CBZ X9, loc_51D68 ; +0x300, 0x51d54 ADD X8, X8, #0x110 ; +0x304, 0x51d58 LDAR W8, [X8] ; +0x308, 0x51d5c ADD X9, X9, #0x110 ; +0x30c, 0x51d60 STLR W8, [X9] ; +0x310, 0x51d64 LDR X8, [SP,#0x40+var_28] ; +0x314, 0x51d68 LDR X9, [X8,#0x108] ; +0x318, 0x51d6c LDRB W10, [X9,#0x118] ; +0x31c, 0x51d70 CBZ W10, loc_51DB4 ; +0x320, 0x51d74 LDR X9, [X9,#0x80] ; +0x324, 0x51d78 CBZ X9, loc_51DB4 ; +0x328, 0x51d7c MOV W1, #1 ; +0x32c, 0x51d80 MOV X0, X19 ; +0x330, 0x51d84 BL sub_7BA10 ; +0x334, 0x51d88 CBNZ W0, loc_51DD0 ; +0x338, 0x51d8c LDR X0, [SP,#0x40+var_28] ; +0x33c, 0x51d90 MOV W1, W20 ; +0x340, 0x51d94 LDR X8, [X0,#0x108] ; +0x344, 0x51d98 LDR X8, [X8,#0x80] ; +0x348, 0x51d9c BLR X8 ; +0x34c, 0x51da0 MOV X0, X19 ; +0x350, 0x51da4 BL sub_7BAA0 ; +0x354, 0x51da8 CBNZ W0, loc_51DD0 ; +0x358, 0x51dac LDR X8, [SP,#0x40+var_28] ; +0x35c, 0x51db0 LDR X9, [X8,#0xB8] ; +0x360, 0x51db4 STRB WZR, [X8,#0x5C] ; +0x364, 0x51db8 CBZ X9, loc_51DCC ; +0x368, 0x51dbc MOV W0, WZR ; +0x36c, 0x51dc0 STRB WZR, [X9,#0x5C] ; +0x370, 0x51dc4 B loc_51DD0 ; +0x374, 0x51dc8 MOV W0, WZR ; +0x378, 0x51dcc LDP X29, X30, [SP,#0x40+var_s0] ; +0x37c, 0x51dd0 LDP X20, X19, [SP,#0x40+var_10] ; +0x380, 0x51dd4 LDP X22, X21, [SP,#0x40+var_20] ; +0x384, 0x51dd8 ADD SP, SP, #0x50 ; 'P' ; +0x388, 0x51ddc RET ; +0x38c, 0x51de0