Skip to content

Instantly share code, notes, and snippets.

@Lusamine
Last active January 3, 2023 16:56
Show Gist options
  • Save Lusamine/3ac8daf2cd031e5f6a2c199e67a52014 to your computer and use it in GitHub Desktop.
Save Lusamine/3ac8daf2cd031e5f6a2c199e67a52014 to your computer and use it in GitHub Desktop.
void __fastcall Dpr_Battle_Logic_Capture__JudgeCapture(
Dpr_Battle_Logic_Capture_JudgeResult_o *result,
Dpr_Battle_Logic_Capture_JudgeParam_o *param)
{
_BYTE *p_yureCount; // x20
__int32 capture_indicator; // w22
unsigned int species_caught; // w23
bool has_catching_charm; // w24
_QWORD *xoro; // x0
int shake_chance; // w22
char isCritical; // w23
_QWORD *xoro2; // x0
char v12; // w8
*(_WORD *)&result->isCaptured = 0;
result->yureCount = 0;
p_yureCount = &result->yureCount;
if ( param->isMustSuccess
|| Dpr_Battle_Logic_MainModule__IsMustCaptureMode(
(Dpr_Battle_Logic_MainModule_o *)param->field_0,
(unsigned __int16)param->field_20) )
{
result->isCaptured = 1;
v12 = 3;
}
else
{
capture_indicator = Dpr_Battle_Logic_Capture__calcCaptureIndicator(param);
if ( param->isCriticalEnable )
{
species_caught = sub_71026F54E0(param->field_0);
has_catching_charm = sub_71026F54EC(param->field_0);
xoro = (_QWORD *)get_xoro_state(param->xoro_state);
result->isCritical = Dpr_Battle_Logic_Capture__checkCaptureCritical(
capture_indicator,
species_caught,
has_catching_charm,
xoro);
}
if ( capture_indicator < 0xFF000 )
{
shake_chance = get_shake_chance(capture_indicator);
isCritical = result->isCritical;
xoro2 = (_QWORD *)get_xoro_state(param->xoro_state);
check_capture_shakes(result, p_yureCount, shake_chance, isCritical, xoro2);
return;
}
result->isCaptured = 1;
if ( result->isCritical )
v12 = 1;
else
v12 = 3;
}
result->yureCount = v12;
}
=====
.text:00000071017262C8
.text:00000071017262C8 ; =============== S U B R O U T I N E =======================================
.text:00000071017262C8
.text:00000071017262C8 ; Attributes: bp-based frame
.text:00000071017262C8
.text:00000071017262C8 ; void __fastcall Dpr_Battle_Logic_Capture__JudgeCapture(Dpr_Battle_Logic_Capture_JudgeResult_o *result, Dpr_Battle_Logic_Capture_JudgeParam_o *param)
.text:00000071017262C8 Dpr.Battle.Logic.Capture$$JudgeCapture ; CODE XREF: Dpr_Battle_Logic_Section_UseItem_Core__useBall+1D4↓p
.text:00000071017262C8
.text:00000071017262C8 var_s0 = 0
.text:00000071017262C8 var_s10 = 0x10
.text:00000071017262C8 var_s20 = 0x20
.text:00000071017262C8 var_s30 = 0x30
.text:00000071017262C8
.text:00000071017262C8 STP X29, X30, [SP,#-0x40+var_s0]!
.text:00000071017262CC STP X24, X23, [SP,#var_s10]
.text:00000071017262D0 MOV X29, SP
.text:00000071017262D4 STP X22, X21, [SP,#var_s20]
.text:00000071017262D8 STP X20, X19, [SP,#var_s30]
.text:00000071017262DC MOV X20, X0
.text:00000071017262E0 STRH WZR, [X0]
.text:00000071017262E4 MOV X19, X0
.text:00000071017262E8 STRB WZR, [X20,#2]!
.text:00000071017262EC LDRB W8, [X1,#0x28]
.text:00000071017262F0 CBNZ W8, loc_71017263A0
.text:00000071017262F4 MOV X21, X1
.text:00000071017262F8 LDR X0, [X1]
.text:00000071017262FC LDRH W1, [X1,#0x20]
.text:0000007101726300 BL Dpr.Battle.Logic.MainModule$$IsMustCaptureMode
.text:0000007101726304 TBNZ W0, #0, loc_71017263A0
.text:0000007101726308 MOV X0, X21 ; a1
.text:000000710172630C BL Dpr.Battle.Logic.Capture$$calcCaptureIndicator
.text:0000007101726310 LDRB W8, [X21,#0x29]
.text:0000007101726314 MOV W22, W0
.text:0000007101726318 CBZ W8, loc_7101726358
.text:000000710172631C LDR X0, [X21]
.text:0000007101726320 BL sub_71026F54E0
.text:0000007101726324 MOV W23, W0
.text:0000007101726328 LDR X0, [X21]
.text:000000710172632C BL sub_71026F54EC
.text:0000007101726330 MOV W24, W0
.text:0000007101726334 LDR X0, [X21,#8]
.text:0000007101726338 BL get_xoro_state
.text:000000710172633C MOV X3, X0
.text:0000007101726340 AND W2, W24, #1
.text:0000007101726344 MOV W0, W22
.text:0000007101726348 MOV W1, W23
.text:000000710172634C BL Dpr.Battle.Logic.Capture$$checkCaptureCritical
.text:0000007101726350 AND W8, W0, #1
.text:0000007101726354 STRB W8, [X19,#1]
.text:0000007101726358
.text:0000007101726358 loc_7101726358 ; CODE XREF: Dpr.Battle.Logic.Capture$$JudgeCapture+50↑j
.text:0000007101726358 CMP W22, #0xFF,LSL#12
.text:000000710172635C B.GE loc_71017263C4
.text:0000007101726360 MOV W0, W22
.text:0000007101726364 BL get_shake_chance
.text:0000007101726368 MOV W22, W0
.text:000000710172636C LDR X0, [X21,#8]
.text:0000007101726370 LDRB W23, [X19,#1]
.text:0000007101726374 BL get_xoro_state
.text:0000007101726378 MOV X4, X0
.text:000000710172637C MOV X0, X19
.text:0000007101726380 MOV X1, X20
.text:0000007101726384 MOV W2, W22
.text:0000007101726388 LDP X20, X19, [SP,#var_s30]
.text:000000710172638C MOV W3, W23
.text:0000007101726390 LDP X22, X21, [SP,#var_s20]
.text:0000007101726394 LDP X24, X23, [SP,#var_s10]
.text:0000007101726398 LDP X29, X30, [SP+var_s0],#0x40
.text:000000710172639C B check_capture_shakes
.text:00000071017263A0 ; ---------------------------------------------------------------------------
.text:00000071017263A0
.text:00000071017263A0 loc_71017263A0 ; CODE XREF: Dpr.Battle.Logic.Capture$$JudgeCapture+28↑j
.text:00000071017263A0 ; Dpr.Battle.Logic.Capture$$JudgeCapture+3C↑j
.text:00000071017263A0 MOV W8, #1
.text:00000071017263A4 STRB W8, [X19]
.text:00000071017263A8 MOV W8, #3
.text:00000071017263AC
.text:00000071017263AC loc_71017263AC ; CODE XREF: Dpr.Battle.Logic.Capture$$JudgeCapture+114↓j
.text:00000071017263AC STRB W8, [X19,#2]
.text:00000071017263B0 LDP X20, X19, [SP,#var_s30]
.text:00000071017263B4 LDP X22, X21, [SP,#var_s20]
.text:00000071017263B8 LDP X24, X23, [SP,#var_s10]
.text:00000071017263BC LDP X29, X30, [SP+var_s0],#0x40
.text:00000071017263C0 RET
.text:00000071017263C4 ; ---------------------------------------------------------------------------
.text:00000071017263C4
.text:00000071017263C4 loc_71017263C4 ; CODE XREF: Dpr.Battle.Logic.Capture$$JudgeCapture+94↑j
.text:00000071017263C4 MOV W8, #1
.text:00000071017263C8 STRB W8, [X19]
.text:00000071017263CC LDRB W8, [X19,#1]
.text:00000071017263D0 CMP W8, #0
.text:00000071017263D4 MOV W8, #3
.text:00000071017263D8 CSINC W8, W8, WZR, EQ
.text:00000071017263DC B loc_71017263AC
.text:00000071017263DC ; End of function Dpr.Battle.Logic.Capture$$JudgeCapture
.text:00000071017263DC
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment