-
-
Save Lusamine/aa7eb430f3e818df1cc5b81cc798c8ae to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
__int64 __fastcall capture_shake_check(capture_info *a1) | |
{ | |
unsigned int evaluation_num; // w20 | |
__int64 result; // x0 | |
int random_value_max; // w0 MAPDST | |
unsigned __int8 v5; // w8 | |
__int64 *xoro; // x8 | |
unsigned int v7; // w9 | |
__int64 v8; // x10 | |
__int64 v9; // x11 | |
unsigned __int64 v10; // x10 | |
unsigned __int64 v11; // x11 | |
unsigned __int64 v12; // x10 | |
__int64 v13; // x12 | |
__int64 v14; // x13 | |
__int64 v15; // x14 | |
int v16; // w11 | |
__int64 v17; // x12 | |
int v18; // w11 | |
float rand; // s8 | |
unsigned int v20; // w8 | |
__int64 v21; // x10 | |
__int64 v22; // x10 | |
unsigned __int64 v24; // [xsp+0h] [xbp-40h] BYREF | |
const char *v25; // [xsp+8h] [xbp-38h] | |
__int64 v26; // [xsp+10h] [xbp-30h] | |
__int64 v27; // [xsp+18h] [xbp-28h] | |
v24 = 0x2C9E96DA352A7FC0LL; | |
v25 = "evaluation_num"; | |
v26 = 14LL; | |
v27 = 0LL; | |
evaluation_num = get_capture_value_from_hash(&v24); | |
result = (unsigned int)a1->capture_result; | |
switch ( (_DWORD)result ) | |
{ | |
case 1: | |
v24 = 0x8A148DC1A556BECDLL; | |
v25 = "random_value_max"; | |
v26 = 16LL; | |
v27 = 0LL; | |
random_value_max = get_capture_value_from_hash(&v24); | |
v5 = atomic_load((unsigned __int8 *)&qword_71042A7010); | |
if ( (v5 & 1) == 0 ) | |
{ | |
if ( _cxa_guard_acquire_0(&qword_71042A7010) ) | |
{ | |
sub_7100000250((__int64)sub_71007B42F8, (__int64)&qword_71042A7000, (__int64)&off_710401A000); | |
_cxa_guard_release_0(&qword_71042A7010); | |
} | |
} | |
qword_71042A6FF8 = qword_71042A7000; | |
if ( random_value_max ) | |
{ | |
xoro = *(__int64 **)(qword_71042A7000 + 0xD8); | |
v7 = random_value_max + 1; | |
if ( random_value_max == -1 ) | |
{ | |
v21 = xoro[1]; | |
v18 = v21 + *xoro; | |
v22 = v21 ^ *xoro; | |
*xoro = v22 ^ __ROR8__(*xoro, 40) ^ (v22 << 16); | |
xoro[1] = __ROR8__(v22, 27); | |
} | |
else | |
{ | |
v8 = __clz(v7); | |
v9 = 31LL; | |
if ( ((0x7FFFFFFFu >> v8) & v7) != 0 ) | |
v9 = 32LL; | |
v10 = v9 - v8; | |
v11 = v10 >> 6; | |
if ( (v10 & 0x3F) != 0 ) | |
++v11; | |
if ( v11 > v10 ) | |
LODWORD(v12) = 0; | |
else | |
v12 = 0xFFFFFFFFFFFFFFFFLL >> -(char)(v10 / v11); | |
v13 = *xoro; | |
v14 = xoro[1]; | |
do | |
{ | |
v15 = v13 ^ v14; | |
v16 = v13 + v14; | |
v17 = v13 ^ v14 ^ __ROR8__(v13, 40); | |
v14 = __ROR8__(v15, 27); | |
v18 = v16 & v12; | |
v13 = v17 ^ (v15 << 16); | |
} | |
while ( v7 <= v18 ); | |
*xoro = v13; | |
xoro[1] = v14; | |
} | |
} | |
else | |
{ | |
v18 = 0; | |
} | |
rand = (float)v18; | |
if ( v27 ) | |
(*(void (__fastcall **)(__int64))(*(_QWORD *)v27 + 32LL))(v27); | |
if ( a1->shake_chance <= rand ) // Fail to catch. | |
{ | |
v20 = a1->shake_checks_failed + 1; | |
a1->shake_checks_failed = v20; | |
if ( evaluation_num > v20 ) // Still have more chances. | |
{ | |
result = 1LL; | |
a1->capture_result = 1; | |
return result; | |
} | |
a1->capture_result = 2; | |
LABEL_24: | |
if ( a1->catch_type != 1 ) | |
return 2LL; | |
return 0LL; | |
} | |
a1->capture_result = 0; // If we get here, we should catch it unless overridden. | |
LABEL_20: | |
if ( a1->catch_type == 2 ) // catch_type was 1 for the tutorial starters that catch, returned 0 | |
// catch_type was 2 for the tutorial starter that fails, returned 2 | |
return 2LL; | |
return 0LL; | |
case 0: | |
goto LABEL_20; | |
case 2: | |
goto LABEL_24; | |
} | |
return result; | |
} | |
---- | |
.text:00000071018065E8 ; __int64 __fastcall capture_shake_check(capture_info *a1) | |
.text:00000071018065E8 capture_shake_check ; CODE XREF: judge_capture_in_battle+298↑p | |
.text:00000071018065E8 ; judge_capture_in_overworld+88C↓p | |
.text:00000071018065E8 | |
.text:00000071018065E8 var_40 = -0x40 | |
.text:00000071018065E8 anonymous_0 = -0x38 | |
.text:00000071018065E8 var_30 = -0x30 | |
.text:00000071018065E8 var_28 = -0x28 | |
.text:00000071018065E8 var_20 = -0x20 | |
.text:00000071018065E8 var_14 = -0x14 | |
.text:00000071018065E8 var_10 = -0x10 | |
.text:00000071018065E8 var_s0 = 0 | |
.text:00000071018065E8 | |
.text:00000071018065E8 SUB SP, SP, #0x50 | |
.text:00000071018065EC STR D8, [SP,#0x40+var_20] | |
.text:00000071018065F0 STP X20, X19, [SP,#0x40+var_10] | |
.text:00000071018065F4 STP X29, X30, [SP,#0x40+var_s0] | |
.text:00000071018065F8 ADD X29, SP, #0x40 | |
.text:00000071018065FC MOV X9, #0x352A7FC0 | |
.text:0000007101806604 ADRL X8, aEvaluationNum ; "evaluation_num" | |
.text:000000710180660C MOVK X9, #0x96DA,LSL#32 | |
.text:0000007101806610 MOVK X9, #0x2C9E,LSL#48 | |
.text:0000007101806614 STP X9, X8, [SP,#0x40+var_40] | |
.text:0000007101806618 MOV X19, X0 | |
.text:000000710180661C MOV W8, #0xE | |
.text:0000007101806620 STP X8, XZR, [SP,#0x40+var_30] | |
.text:0000007101806624 MOV X0, SP | |
.text:0000007101806628 BL get_capture_value_from_hash | |
.text:000000710180662C MOV W20, W0 | |
.text:0000007101806630 LDR W0, [X19,#0x94] | |
.text:0000007101806634 CMP W0, #1 | |
.text:0000007101806638 B.NE loc_7101806790 | |
.text:000000710180663C MOV X9, #0xA556BECD | |
.text:0000007101806644 ADRL X8, aRandomValueMax ; "random_value_max" | |
.text:000000710180664C MOVK X9, #0x8DC1,LSL#32 | |
.text:0000007101806650 MOVK X9, #0x8A14,LSL#48 | |
.text:0000007101806654 STP X9, X8, [SP,#0x40+var_40] | |
.text:0000007101806658 MOV W8, #0x10 | |
.text:000000710180665C MOV X0, SP | |
.text:0000007101806660 STP X8, XZR, [SP,#0x40+var_30] | |
.text:0000007101806664 BL get_capture_value_from_hash | |
.text:0000007101806668 ADRP X8, #off_7104279678@PAGE | |
.text:000000710180666C LDR X8, [X8,#off_7104279678@PAGEOFF] | |
.text:0000007101806670 LDARB W8, [X8] | |
.text:0000007101806674 TBZ W8, #0, loc_71018067CC | |
.text:0000007101806678 | |
.text:0000007101806678 loc_7101806678 ; CODE XREF: capture_shake_check+200↓j | |
.text:0000007101806678 ; capture_shake_check+230↓j | |
.text:0000007101806678 ADRP X8, #off_7104279680@PAGE | |
.text:000000710180667C LDR X8, [X8,#off_7104279680@PAGEOFF] | |
.text:0000007101806680 ADRP X9, #off_7104279688@PAGE | |
.text:0000007101806684 LDR X8, [X8] | |
.text:0000007101806688 LDR X9, [X9,#off_7104279688@PAGEOFF] | |
.text:000000710180668C STR X8, [X9] | |
.text:0000007101806690 CBZ W0, loc_71018067A0 | |
.text:0000007101806694 LDR X8, [X8,#0xD8] | |
.text:0000007101806698 ADD W9, W0, #1 | |
.text:000000710180669C CBZ W9, loc_71018067A8 | |
.text:00000071018066A0 CLZ W10, W9 | |
.text:00000071018066A4 MOV W11, #0x7FFFFFFF | |
.text:00000071018066A8 LSR W11, W11, W10 | |
.text:00000071018066AC TST W11, W9 | |
.text:00000071018066B0 MOV W11, #0x1F | |
.text:00000071018066B4 CINC X11, X11, NE | |
.text:00000071018066B8 SUB X10, X11, X10 | |
.text:00000071018066BC LSR X11, X10, #6 | |
.text:00000071018066C0 TST X10, #0x3F | |
.text:00000071018066C4 CINC X11, X11, NE | |
.text:00000071018066C8 CMP X11, X10 | |
.text:00000071018066CC B.HI loc_710180681C | |
.text:00000071018066D0 UDIV X10, X10, X11 | |
.text:00000071018066D4 MOV X11, #0xFFFFFFFFFFFFFFFF | |
.text:00000071018066D8 NEG X10, X10 | |
.text:00000071018066DC LSR X10, X11, X10 | |
.text:00000071018066E0 | |
.text:00000071018066E0 loc_71018066E0 ; CODE XREF: capture_shake_check+238↓j | |
.text:00000071018066E0 LDP X12, X13, [X8] | |
.text:00000071018066E4 | |
.text:00000071018066E4 loc_71018066E4 ; CODE XREF: capture_shake_check+118↓j | |
.text:00000071018066E4 EOR X14, X12, X13 | |
.text:00000071018066E8 ADD X11, X12, X13 | |
.text:00000071018066EC EOR X12, X14, X12,ROR#40 | |
.text:00000071018066F0 EXTR X13, X14, X14, #0x1B | |
.text:00000071018066F4 AND X11, X11, X10 | |
.text:00000071018066F8 CMP W9, W11 | |
.text:00000071018066FC EOR X12, X12, X14,LSL#16 | |
.text:0000007101806700 B.LS loc_71018066E4 | |
.text:0000007101806704 STP X12, X13, [X8] | |
.text:0000007101806708 | |
.text:0000007101806708 loc_7101806708 ; CODE XREF: capture_shake_check+1BC↓j | |
.text:0000007101806708 ; capture_shake_check+1E0↓j | |
.text:0000007101806708 SCVTF S8, W11 | |
.text:000000710180670C LDR X0, [SP,#0x40+var_28] | |
.text:0000007101806710 CBZ X0, loc_7101806720 | |
.text:0000007101806714 LDR X8, [X0] | |
.text:0000007101806718 LDR X8, [X8,#0x20] | |
.text:000000710180671C BLR X8 | |
.text:0000007101806720 | |
.text:0000007101806720 loc_7101806720 ; CODE XREF: capture_shake_check+128↑j | |
.text:0000007101806720 LDR S0, [X19,#0x88] | |
.text:0000007101806724 FCMP S0, S8 | |
.text:0000007101806728 B.GT loc_710180674C | |
.text:000000710180672C LDR W8, [X19,#0x90] | |
.text:0000007101806730 ADD W8, W8, #1 | |
.text:0000007101806734 CMP W20, W8 | |
.text:0000007101806738 STR W8, [X19,#0x90] | |
.text:000000710180673C B.LS loc_7101806774 | |
.text:0000007101806740 MOV W0, #1 | |
.text:0000007101806744 STR W0, [X19,#0x94] | |
.text:0000007101806748 B loc_7101806760 | |
.text:000000710180674C ; --------------------------------------------------------------------------- | |
.text:000000710180674C | |
.text:000000710180674C loc_710180674C ; CODE XREF: capture_shake_check+140↑j | |
.text:000000710180674C STR WZR, [X19,#0x94] | |
.text:0000007101806750 | |
.text:0000007101806750 loc_7101806750 ; CODE XREF: capture_shake_check:loc_7101806790↓j | |
.text:0000007101806750 LDR W8, [X19,#0x80] | |
.text:0000007101806754 CMP W8, #2 | |
.text:0000007101806758 B.EQ loc_7101806788 | |
.text:000000710180675C | |
.text:000000710180675C loc_710180675C ; CODE XREF: capture_shake_check+19C↓j | |
.text:000000710180675C MOV W0, WZR | |
.text:0000007101806760 | |
.text:0000007101806760 loc_7101806760 ; CODE XREF: capture_shake_check+160↑j | |
.text:0000007101806760 ; capture_shake_check+1A4↓j ... | |
.text:0000007101806760 LDR D8, [SP,#0x40+var_20] | |
.text:0000007101806764 LDP X29, X30, [SP,#0x40+var_s0] | |
.text:0000007101806768 LDP X20, X19, [SP,#0x40+var_10] | |
.text:000000710180676C ADD SP, SP, #0x50 ; 'P' | |
.text:0000007101806770 RET | |
.text:0000007101806774 ; --------------------------------------------------------------------------- | |
.text:0000007101806774 | |
.text:0000007101806774 loc_7101806774 ; CODE XREF: capture_shake_check+154↑j | |
.text:0000007101806774 MOV W8, #2 | |
.text:0000007101806778 STR W8, [X19,#0x94] | |
.text:000000710180677C | |
.text:000000710180677C loc_710180677C ; CODE XREF: capture_shake_check+1B4↓j | |
.text:000000710180677C LDR W8, [X19,#0x80] | |
.text:0000007101806780 CMP W8, #1 | |
.text:0000007101806784 B.EQ loc_710180675C | |
.text:0000007101806788 | |
.text:0000007101806788 loc_7101806788 ; CODE XREF: capture_shake_check+170↑j | |
.text:0000007101806788 MOV W0, #2 | |
.text:000000710180678C B loc_7101806760 | |
.text:0000007101806790 ; --------------------------------------------------------------------------- | |
.text:0000007101806790 | |
.text:0000007101806790 loc_7101806790 ; CODE XREF: capture_shake_check+50↑j | |
.text:0000007101806790 CBZ W0, loc_7101806750 | |
.text:0000007101806794 CMP W0, #2 | |
.text:0000007101806798 B.NE loc_7101806760 | |
.text:000000710180679C B loc_710180677C | |
.text:00000071018067A0 ; --------------------------------------------------------------------------- | |
.text:00000071018067A0 | |
.text:00000071018067A0 loc_71018067A0 ; CODE XREF: capture_shake_check+A8↑j | |
.text:00000071018067A0 MOV W11, WZR | |
.text:00000071018067A4 B loc_7101806708 | |
.text:00000071018067A8 ; --------------------------------------------------------------------------- | |
.text:00000071018067A8 | |
.text:00000071018067A8 loc_71018067A8 ; CODE XREF: capture_shake_check+B4↑j | |
.text:00000071018067A8 LDP X9, X10, [X8] | |
.text:00000071018067AC ADD W11, W10, W9 | |
.text:00000071018067B0 EOR X10, X10, X9 | |
.text:00000071018067B4 EOR X9, X10, X9,ROR#40 | |
.text:00000071018067B8 EOR X9, X9, X10,LSL#16 | |
.text:00000071018067BC STR X9, [X8] | |
.text:00000071018067C0 EXTR X9, X10, X10, #0x1B | |
.text:00000071018067C4 STR X9, [X8,#8] | |
.text:00000071018067C8 B loc_7101806708 | |
.text:00000071018067CC ; --------------------------------------------------------------------------- | |
.text:00000071018067CC | |
.text:00000071018067CC loc_71018067CC ; CODE XREF: capture_shake_check+8C↑j | |
.text:00000071018067CC ADRP X8, #off_7104279678@PAGE | |
.text:00000071018067D0 LDR X8, [X8,#off_7104279678@PAGEOFF] | |
.text:00000071018067D4 STUR W0, [X29,#var_14] | |
.text:00000071018067D8 MOV X0, X8 ; __guard * | |
.text:00000071018067DC BL __cxa_guard_acquire_0 | |
.text:00000071018067E0 MOV W8, W0 | |
.text:00000071018067E4 LDUR W0, [X29,#var_14] | |
.text:00000071018067E8 CBZ W8, loc_7101806678 | |
.text:00000071018067EC ADRP X0, #off_7104279A10@PAGE | |
.text:00000071018067F0 ADRP X1, #off_7104279680@PAGE | |
.text:00000071018067F4 LDR X0, [X0,#off_7104279A10@PAGEOFF] | |
.text:00000071018067F8 LDR X1, [X1,#off_7104279680@PAGEOFF] | |
.text:00000071018067FC ADRL X2, off_710401A000 | |
.text:0000007101806804 BL sub_7100000250 | |
.text:0000007101806808 ADRP X0, #off_7104279678@PAGE | |
.text:000000710180680C LDR X0, [X0,#off_7104279678@PAGEOFF] ; __guard * | |
.text:0000007101806810 BL __cxa_guard_release_0 | |
.text:0000007101806814 LDUR W0, [X29,#var_14] | |
.text:0000007101806818 B loc_7101806678 | |
.text:000000710180681C ; --------------------------------------------------------------------------- | |
.text:000000710180681C | |
.text:000000710180681C loc_710180681C ; CODE XREF: capture_shake_check+E4↑j | |
.text:000000710180681C MOV X10, XZR | |
.text:0000007101806820 B loc_71018066E0 | |
.text:0000007101806820 ; End of function capture_shake_check |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment