Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Lusamine/238e4ad5b10d2ebd204e48d2aac378aa to your computer and use it in GitHub Desktop.
Save Lusamine/238e4ad5b10d2ebd204e48d2aac378aa to your computer and use it in GitHub Desktop.
__int64 __fastcall Dpr_Battle_Logic_Section_UseItem_Core__useBall(
__int64 a1,
__int64 x1_0,
__int64 (__fastcall ***a3)(_QWORD),
unsigned int a4,
_BYTE *a5,
char *a6,
__int64 a7)
{
__int64 (__fastcall ***v13)(_QWORD); // x24
__int64 v14; // x0
__int64 v15; // x26
unsigned int v16; // w0
__int64 v17; // x0
unsigned int v18; // w26
__int64 result; // x0
unsigned __int8 v20; // w8
__int64 v21; // x0
unsigned int v22; // w26
__int64 v23; // x0
__int64 v24; // x0
__int64 v25; // x0
__int64 v26; // x0
bool IsZukanRegistered; // w0
unsigned __int8 v28; // w27
unsigned int v29; // w28
__int64 v30; // x0
long double v31; // q0
long double v32; // q1
long double v33; // q2
long double v34; // q3
long double v35; // q4
long double v36; // q5
long double v37; // q6
unsigned int v38; // w0
unsigned __int8 v39; // w23
char isCaptured; // w25
__int64 v41; // x2
__int64 v42; // x0
__int64 v43; // x1
__int64 v44; // x3
__int64 v45; // x27
int v46; // w8
Dpr_Battle_Logic_Capture_JudgeResult_o capture_judge_result; // [xsp+8h] [xbp-48h] BYREF
Dpr_Battle_Logic_Capture_JudgeParam_o a2; // [xsp+10h] [xbp-40h] BYREF
int v49; // [xsp+3Ch] [xbp-14h]
char v50; // [xsp+40h] [xbp-10h]
char v51; // [xsp+41h] [xbp-Fh]
char v52[4]; // [xsp+4Ch] [xbp-4h] BYREF
*a5 = 0;
*a6 = 0;
*(_BYTE *)(a7 + 2) = 0;
*(_WORD *)a7 = 10;
*(_QWORD *)(a7 + 4) = 0x500000000LL;
*(_WORD *)(a7 + 12) = 0;
v52[0] = 10;
if ( !a3
|| (v13 = a3, ((*a3)[65](a3) & 1) == 0)
|| (v14 = sub_7100DAFBA4(a1),
v15 = sub_710139CFEC(v14),
v16 = (*v13)[19](v13),
v52[0] = sub_7100F96364(v15, v16),
v52[0] == 10) )
{
v13 = (__int64 (__fastcall ***)(_QWORD))sub_71017659B8(a1, v52, x1_0);
}
if ( (unsigned int)sub_71010DCF84(a1) )
{
v41 = (unsigned __int8)v52[0];
v42 = a1;
v43 = a4;
v44 = 0LL;
return sub_71026F5494(v42, v43, v41, v44);
}
v17 = sub_71010F0F80(a1);
v18 = (unsigned __int8)sub_7101765998(v17);
if ( v18 < (unsigned __int8)(*v13)[35](v13) )
{
v41 = (unsigned __int8)v52[0];
v42 = a1;
v43 = a4;
v44 = 1LL;
return sub_71026F5494(v42, v43, v41, v44);
}
result = (*v13[5])(v13 + 5);
v20 = atomic_load((unsigned __int8 *)&qword_710434ECB8);
if ( (v20 & 1) == 0 )
{
v45 = result;
v46 = _cxa_guard_acquire_0(&qword_710434ECB8);
result = v45;
if ( v46 )
{
qword_710434ECB0 = (__int64)sub_710185F8D4();
_cxa_guard_release_0(&qword_710434ECB8);
result = v45;
}
}
if ( result )
{
while ( (__int64 *)result != &qword_710434ECB0 )
{
result = *(_QWORD *)result;
if ( !result )
goto LABEL_11;
}
v21 = sub_71010F0F80(a1);
result = Dpr_Battle_Logic_MainModule__GetSetupStatusFlag(v21, 0x20000LL);
if ( (result & 1) != 0 )
{
result = sub_710129E0E4(v13);
if ( (result & 1) != 0 )
{
v41 = (unsigned __int8)v52[0];
v42 = a1;
v43 = a4;
v44 = 2LL;
return sub_71026F5494(v42, v43, v41, v44);
}
}
}
LABEL_11:
v22 = (unsigned __int8)v52[0];
if ( v52[0] != 10 )
{
a2.isMustSuccess = 0;
a2.field_0 = sub_71010F0F80(a1);
a2.xoro_state = sub_7100DAFBA4(a1);
a2.field_10 = x1_0;
a2.get_value_function = (__int64)v13;
a2.field_20 = a4;
a2.isCriticalEnable = 1;
a2.captureValueCoef = btl_get_capture_value_coefficient(a1, x1_0, (__int64)v13);
v23 = sub_71010F0F80(a1);
v49 = sub_71026F54E0(v23);
v24 = sub_71010F0F80(a1);
v50 = *(_BYTE *)(sub_7101102144(v24) + 1524);
v25 = sub_71010F0F80(a1);
v51 = sub_71026F54EC(v25) & 1;
Dpr_Battle_Logic_Capture__JudgeCapture(&capture_judge_result, &a2);
v26 = sub_71010F0F80(a1);
IsZukanRegistered = Dpr_Battle_Logic_MainModule__IsZukanRegistered(v26, (__int64)v13);
v28 = capture_judge_result.isCaptured != 0 && !IsZukanRegistered;
v29 = sub_71026E86AC(a1, x1_0);
v30 = sub_71010E4894(a1);
sub_71026F54F8(
v30,
v29,
v22,
capture_judge_result.yureCount,
capture_judge_result.isCaptured,
v28,
capture_judge_result.isCritical,
a4,
v31,
v32,
v33,
v34,
v35,
v36,
v37);
v38 = (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)x1_0 + 152LL))(x1_0);
v39 = (unsigned __int8)sub_71010E253C(a1, v38);
isCaptured = capture_judge_result.isCaptured;
result = (*v13)[19](v13);
*(_BYTE *)a7 = v22;
*(_BYTE *)(a7 + 1) = isCaptured;
*(_BYTE *)(a7 + 2) = v28;
*(_DWORD *)(a7 + 4) = (unsigned __int8)result;
*(_DWORD *)(a7 + 8) = v39;
*(_WORD *)(a7 + 12) = a4;
*a6 = capture_judge_result.isCaptured;
}
*a5 = 1;
return result;
}
=====
.text:0000007101765648
.text:0000007101765648 ; =============== S U B R O U T I N E =======================================
.text:0000007101765648
.text:0000007101765648 ; Attributes: bp-based frame
.text:0000007101765648
.text:0000007101765648 ; __int64 __fastcall Dpr_Battle_Logic_Section_UseItem_Core__useBall(__int64, __int64 x1_0, __int64 (__fastcall ***)(_QWORD), unsigned int, _BYTE *, char *, __int64)
.text:0000007101765648 Dpr_Battle_Logic_Section_UseItem_Core__useBall
.text:0000007101765648 ; CODE XREF: sub_71010F6F20+114↑p
.text:0000007101765648
.text:0000007101765648 capture_judge_result= -0x48
.text:0000007101765648 var_47 = -0x47
.text:0000007101765648 var_46 = -0x46
.text:0000007101765648 a2 = -0x40
.text:0000007101765648 var_38 = -0x38
.text:0000007101765648 var_28 = -0x28
.text:0000007101765648 var_20 = -0x20
.text:0000007101765648 var_1C = -0x1C
.text:0000007101765648 var_18 = -0x18
.text:0000007101765648 var_17 = -0x17
.text:0000007101765648 var_14 = -0x14
.text:0000007101765648 var_10 = -0x10
.text:0000007101765648 var_F = -0xF
.text:0000007101765648 var_4 = -4
.text:0000007101765648 var_s0 = 0
.text:0000007101765648 var_s10 = 0x10
.text:0000007101765648 var_s20 = 0x20
.text:0000007101765648 var_s30 = 0x30
.text:0000007101765648 var_s40 = 0x40
.text:0000007101765648 var_s50 = 0x50
.text:0000007101765648
.text:0000007101765648 SUB SP, SP, #0xB0
.text:000000710176564C STP X29, X30, [SP,#0x50+var_s0]
.text:0000007101765650 ADD X29, SP, #0x50
.text:0000007101765654 STP X28, X27, [SP,#0x50+var_s10]
.text:0000007101765658 STP X26, X25, [SP,#0x50+var_s20]
.text:000000710176565C STP X24, X23, [SP,#0x50+var_s30]
.text:0000007101765660 STP X22, X21, [SP,#0x50+var_s40]
.text:0000007101765664 STP X20, X19, [SP,#0x50+var_s50]
.text:0000007101765668 MOV X22, X6
.text:000000710176566C MOV X21, X5
.text:0000007101765670 STRB WZR, [X4]
.text:0000007101765674 MOV X20, X4
.text:0000007101765678 MOV W19, W3
.text:000000710176567C STRB WZR, [X5]
.text:0000007101765680 MOV X25, X1
.text:0000007101765684 MOV X23, X0
.text:0000007101765688 STRB WZR, [X6,#2]
.text:000000710176568C MOV W8, #0xA
.text:0000007101765690 MOV X9, #0x500000000
.text:0000007101765694 STRH W8, [X6]
.text:0000007101765698 STUR X9, [X6,#4]
.text:000000710176569C STRH WZR, [X6,#0xC]
.text:00000071017656A0 STURB W8, [X29,#var_4]
.text:00000071017656A4 CBZ X2, loc_71017656FC
.text:00000071017656A8 LDR X8, [X2]
.text:00000071017656AC MOV X0, X2
.text:00000071017656B0 MOV X24, X2
.text:00000071017656B4 LDR X8, [X8,#0x208]
.text:00000071017656B8 BLR X8
.text:00000071017656BC TBZ W0, #0, loc_71017656FC
.text:00000071017656C0 MOV X0, X23
.text:00000071017656C4 BL sub_7100DAFBA4
.text:00000071017656C8 BL sub_710139CFEC
.text:00000071017656CC LDR X8, [X24]
.text:00000071017656D0 MOV X26, X0
.text:00000071017656D4 MOV X0, X24
.text:00000071017656D8 LDR X8, [X8,#0x98]
.text:00000071017656DC BLR X8
.text:00000071017656E0 MOV W1, W0
.text:00000071017656E4 MOV X0, X26
.text:00000071017656E8 BL sub_7100F96364
.text:00000071017656EC AND W8, W0, #0xFF
.text:00000071017656F0 CMP W8, #0xA
.text:00000071017656F4 STURB W0, [X29,#var_4]
.text:00000071017656F8 B.NE loc_7101765710
.text:00000071017656FC
.text:00000071017656FC loc_71017656FC ; CODE XREF: Dpr_Battle_Logic_Section_UseItem_Core__useBall+5C↑j
.text:00000071017656FC ; Dpr_Battle_Logic_Section_UseItem_Core__useBall+74↑j
.text:00000071017656FC SUB X1, X29, #-var_4
.text:0000007101765700 MOV X0, X23
.text:0000007101765704 MOV X2, X25
.text:0000007101765708 BL sub_71017659B8
.text:000000710176570C MOV X24, X0
.text:0000007101765710
.text:0000007101765710 loc_7101765710 ; CODE XREF: Dpr_Battle_Logic_Section_UseItem_Core__useBall+B0↑j
.text:0000007101765710 MOV X0, X23
.text:0000007101765714 BL sub_71010DCF84
.text:0000007101765718 CBNZ W0, loc_71017658E0
.text:000000710176571C MOV X0, X23
.text:0000007101765720 BL sub_71010F0F80
.text:0000007101765724 BL sub_7101765998
.text:0000007101765728 LDR X8, [X24]
.text:000000710176572C AND W26, W0, #0xFF
.text:0000007101765730 MOV X0, X24
.text:0000007101765734 LDR X8, [X8,#0x118]
.text:0000007101765738 BLR X8
.text:000000710176573C CMP W26, W0,UXTB
.text:0000007101765740 B.CC loc_7101765914
.text:0000007101765744 MOV X26, X24
.text:0000007101765748 LDR X8, [X26,#0x28]!
.text:000000710176574C LDR X8, [X8]
.text:0000007101765750 MOV X0, X26
.text:0000007101765754 BLR X8
.text:0000007101765758 ADRP X8, #off_7104320CE8@PAGE
.text:000000710176575C LDR X8, [X8,#off_7104320CE8@PAGEOFF]
.text:0000007101765760 LDARB W8, [X8]
.text:0000007101765764 TBZ W8, #0, loc_7101765954
.text:0000007101765768
.text:0000007101765768 loc_7101765768 ; CODE XREF: Dpr_Battle_Logic_Section_UseItem_Core__useBall+328↓j
.text:0000007101765768 ; Dpr_Battle_Logic_Section_UseItem_Core__useBall+34C↓j
.text:0000007101765768 CBZ X0, loc_7101765790
.text:000000710176576C ADRP X8, #off_7104320CF0@PAGE
.text:0000007101765770 LDR X8, [X8,#off_7104320CF0@PAGEOFF]
.text:0000007101765774
.text:0000007101765774 loc_7101765774 ; CODE XREF: Dpr_Battle_Logic_Section_UseItem_Core__useBall+304↓j
.text:0000007101765774 CMP X0, X8
.text:0000007101765778 B.NE loc_7101765948
.text:000000710176577C MOV X0, X23
.text:0000007101765780 BL sub_71010F0F80
.text:0000007101765784 MOV W1, #0x20000 ; a2
.text:0000007101765788 BL Dpr.Battle.Logic.MainModule$$GetSetupStatusFlag
.text:000000710176578C TBNZ W0, #0, loc_7101765928
.text:0000007101765790
.text:0000007101765790 loc_7101765790 ; CODE XREF: Dpr_Battle_Logic_Section_UseItem_Core__useBall:loc_7101765768↑j
.text:0000007101765790 ; Dpr_Battle_Logic_Section_UseItem_Core__useBall+2E8↓j ...
.text:0000007101765790 LDURB W26, [X29,#var_4]
.text:0000007101765794 CMP W26, #0xA
.text:0000007101765798 B.EQ loc_71017658D4
.text:000000710176579C MOV X0, X23
.text:00000071017657A0 STRB WZR, [SP,#0x50+var_18]
.text:00000071017657A4 BL sub_71010F0F80
.text:00000071017657A8 STR X0, [SP,#0x50+a2]
.text:00000071017657AC MOV X0, X23
.text:00000071017657B0 BL sub_7100DAFBA4
.text:00000071017657B4 STP X0, X25, [SP,#0x50+var_38]
.text:00000071017657B8 MOV W8, #1
.text:00000071017657BC MOV X0, X23
.text:00000071017657C0 MOV X1, X25
.text:00000071017657C4 MOV X2, X24
.text:00000071017657C8 STR X24, [SP,#0x50+var_28]
.text:00000071017657CC STRH W19, [SP,#0x50+var_20]
.text:00000071017657D0 STRB W8, [SP,#0x50+var_17]
.text:00000071017657D4 BL btl_get_capture_value_coefficient
.text:00000071017657D8 STR W0, [SP,#0x50+var_1C]
.text:00000071017657DC MOV X0, X23
.text:00000071017657E0 BL sub_71010F0F80
.text:00000071017657E4 BL sub_71026F54E0
.text:00000071017657E8 STR W0, [SP,#0x50+var_14]
.text:00000071017657EC MOV X0, X23
.text:00000071017657F0 BL sub_71010F0F80
.text:00000071017657F4 BL sub_7101102144
.text:00000071017657F8 LDRB W8, [X0,#0x5F4]
.text:00000071017657FC MOV X0, X23
.text:0000007101765800 STRB W8, [SP,#0x50+var_10]
.text:0000007101765804 BL sub_71010F0F80
.text:0000007101765808 BL sub_71026F54EC
.text:000000710176580C AND W8, W0, #1
.text:0000007101765810 ADD X0, SP, #0x50+capture_judge_result ; result
.text:0000007101765814 STRB W8, [SP,#0x50+var_F]
.text:0000007101765818 ADD X1, SP, #0x50+a2 ; a2
.text:000000710176581C BL Dpr.Battle.Logic.Capture$$JudgeCapture
.text:0000007101765820 MOV X0, X23
.text:0000007101765824 BL sub_71010F0F80
.text:0000007101765828 MOV X1, X24 ; a2
.text:000000710176582C BL Dpr.Battle.Logic.MainModule$$IsZukanRegistered
.text:0000007101765830 LDRB W8, [SP,#0x50+capture_judge_result]
.text:0000007101765834 CMP W8, #0
.text:0000007101765838 CSET W8, NE
.text:000000710176583C EOR W9, W0, #1
.text:0000007101765840 MOV X0, X23
.text:0000007101765844 MOV X1, X25
.text:0000007101765848 AND W27, W8, W9
.text:000000710176584C BL sub_71026E86AC
.text:0000007101765850 MOV W28, W0
.text:0000007101765854 MOV X0, X23
.text:0000007101765858 BL sub_71010E4894
.text:000000710176585C LDRB W6, [SP,#0x50+var_47]
.text:0000007101765860 MOV W1, W28
.text:0000007101765864 MOV W2, W26
.text:0000007101765868 LDRB W4, [SP,#0x50+capture_judge_result]
.text:000000710176586C MOV W5, W27
.text:0000007101765870 MOV W7, W19
.text:0000007101765874 LDRB W3, [SP,#0x50+var_46]
.text:0000007101765878 BL sub_71026F54F8
.text:000000710176587C LDR X8, [X25]
.text:0000007101765880 MOV X0, X25
.text:0000007101765884 LDR X8, [X8,#0x98]
.text:0000007101765888 BLR X8
.text:000000710176588C MOV W1, W0
.text:0000007101765890 MOV X0, X23
.text:0000007101765894 BL sub_71010E253C
.text:0000007101765898 LDR X8, [X24]
.text:000000710176589C MOV W23, W0
.text:00000071017658A0 MOV X0, X24
.text:00000071017658A4 LDRB W25, [SP,#0x50+capture_judge_result]
.text:00000071017658A8 LDR X8, [X8,#0x98]
.text:00000071017658AC BLR X8
.text:00000071017658B0 AND W8, W23, #0xFF
.text:00000071017658B4 AND W9, W0, #0xFF
.text:00000071017658B8 STRB W26, [X22]
.text:00000071017658BC STRB W25, [X22,#1]
.text:00000071017658C0 STRB W27, [X22,#2]
.text:00000071017658C4 STP W9, W8, [X22,#4]
.text:00000071017658C8 STRH W19, [X22,#0xC]
.text:00000071017658CC LDRB W8, [SP,#0x50+capture_judge_result]
.text:00000071017658D0 STRB W8, [X21]
.text:00000071017658D4
.text:00000071017658D4 loc_71017658D4 ; CODE XREF: Dpr_Battle_Logic_Section_UseItem_Core__useBall+150↑j
.text:00000071017658D4 MOV W8, #1
.text:00000071017658D8 STRB W8, [X20]
.text:00000071017658DC B loc_71017658F4
.text:00000071017658E0 ; ---------------------------------------------------------------------------
.text:00000071017658E0
.text:00000071017658E0 loc_71017658E0 ; CODE XREF: Dpr_Battle_Logic_Section_UseItem_Core__useBall+D0↑j
.text:00000071017658E0 LDURB W2, [X29,#var_4]
.text:00000071017658E4 MOV X0, X23
.text:00000071017658E8 MOV W1, W19
.text:00000071017658EC MOV W3, WZR
.text:00000071017658F0
.text:00000071017658F0 loc_71017658F0 ; CODE XREF: Dpr_Battle_Logic_Section_UseItem_Core__useBall+2DC↓j
.text:00000071017658F0 ; Dpr_Battle_Logic_Section_UseItem_Core__useBall+2FC↓j
.text:00000071017658F0 BL sub_71026F5494
.text:00000071017658F4
.text:00000071017658F4 loc_71017658F4 ; CODE XREF: Dpr_Battle_Logic_Section_UseItem_Core__useBall+294↑j
.text:00000071017658F4 LDP X20, X19, [SP,#0x50+var_s50]
.text:00000071017658F8 LDP X22, X21, [SP,#0x50+var_s40]
.text:00000071017658FC LDP X24, X23, [SP,#0x50+var_s30]
.text:0000007101765900 LDP X26, X25, [SP,#0x50+var_s20]
.text:0000007101765904 LDP X28, X27, [SP,#0x50+var_s10]
.text:0000007101765908 LDP X29, X30, [SP,#0x50+var_s0]
.text:000000710176590C ADD SP, SP, #0xB0
.text:0000007101765910 RET
.text:0000007101765914 ; ---------------------------------------------------------------------------
.text:0000007101765914
.text:0000007101765914 loc_7101765914 ; CODE XREF: Dpr_Battle_Logic_Section_UseItem_Core__useBall+F8↑j
.text:0000007101765914 LDURB W2, [X29,#var_4]
.text:0000007101765918 MOV X0, X23
.text:000000710176591C MOV W1, W19
.text:0000007101765920 MOV W3, #1
.text:0000007101765924 B loc_71017658F0
.text:0000007101765928 ; ---------------------------------------------------------------------------
.text:0000007101765928
.text:0000007101765928 loc_7101765928 ; CODE XREF: Dpr_Battle_Logic_Section_UseItem_Core__useBall+144↑j
.text:0000007101765928 SUB X0, X26, #0x28 ; '('
.text:000000710176592C BL sub_710129E0E4
.text:0000007101765930 TBZ W0, #0, loc_7101765790
.text:0000007101765934 LDURB W2, [X29,#var_4]
.text:0000007101765938 MOV X0, X23
.text:000000710176593C MOV W1, W19
.text:0000007101765940 MOV W3, #2
.text:0000007101765944 B loc_71017658F0
.text:0000007101765948 ; ---------------------------------------------------------------------------
.text:0000007101765948
.text:0000007101765948 loc_7101765948 ; CODE XREF: Dpr_Battle_Logic_Section_UseItem_Core__useBall+130↑j
.text:0000007101765948 LDR X0, [X0]
.text:000000710176594C CBNZ X0, loc_7101765774
.text:0000007101765950 B loc_7101765790
.text:0000007101765954 ; ---------------------------------------------------------------------------
.text:0000007101765954
.text:0000007101765954 loc_7101765954 ; CODE XREF: Dpr_Battle_Logic_Section_UseItem_Core__useBall+11C↑j
.text:0000007101765954 ADRP X8, #off_7104320CE8@PAGE
.text:0000007101765958 LDR X8, [X8,#off_7104320CE8@PAGEOFF]
.text:000000710176595C MOV X27, X0
.text:0000007101765960 MOV X0, X8 ; __guard *
.text:0000007101765964 BL __cxa_guard_acquire_0
.text:0000007101765968 MOV W8, W0
.text:000000710176596C MOV X0, X27
.text:0000007101765970 CBZ W8, loc_7101765768
.text:0000007101765974 BL sub_710185F8D4
.text:0000007101765978 ADRP X8, #off_7104320CF0@PAGE
.text:000000710176597C LDR X8, [X8,#off_7104320CF0@PAGEOFF]
.text:0000007101765980 STR X0, [X8]
.text:0000007101765984 ADRP X0, #off_7104320CE8@PAGE
.text:0000007101765988 LDR X0, [X0,#off_7104320CE8@PAGEOFF] ; __guard *
.text:000000710176598C BL __cxa_guard_release_0
.text:0000007101765990 MOV X0, X27
.text:0000007101765994 B loc_7101765768
.text:0000007101765994 ; End of function Dpr_Battle_Logic_Section_UseItem_Core__useBall
.text:0000007101765994
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment