Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Lusamine/535557332bebc8618ecac46cc65c5bd6 to your computer and use it in GitHub Desktop.
Save Lusamine/535557332bebc8618ecac46cc65c5bd6 to your computer and use it in GitHub Desktop.
bool __fastcall Dpr_Battle_Logic_Capture__checkCaptureCritical(
Dpr_Battle_Logic_MainModule_o *mainModule,
int32_t captureIndicator,
const MethodInfo *method)
{
uint32_t ZukanCapturedCount; // w0
int32_t v6; // w20
unsigned __int64 v8; // x8
int32_t v9; // w19
signed int Rand; // w20
if ( (byte_7104ED5630 & 1) == 0 )
{
sub_710009AD20(10884LL);
byte_7104ED5630 = 1;
}
ZukanCapturedCount = Dpr_Battle_Logic_MainModule__GetZukanCapturedCount(mainModule, 0LL);
if ( ZukanCapturedCount <= 600 )
{
if ( ZukanCapturedCount > 450 )
{
v6 = 0x2000;
if ( !Dpr_Battle_Logic_ItemData__HaveItem(1267u, 0LL) )
goto LABEL_6;
goto LABEL_5;
}
if ( ZukanCapturedCount > 300 )
{
v6 = 0x1800;
if ( !Dpr_Battle_Logic_ItemData__HaveItem(1267u, 0LL) )
goto LABEL_6;
goto LABEL_5;
}
if ( ZukanCapturedCount > 150 )
{
v6 = 0x1000;
if ( !Dpr_Battle_Logic_ItemData__HaveItem(0x4F3u, 0LL) )
goto LABEL_6;
goto LABEL_5;
}
if ( ZukanCapturedCount < 31 )
return 0;
v6 = 0x800;
if ( Dpr_Battle_Logic_ItemData__HaveItem(1267u, 0LL) )
LABEL_5:
v6 = Dpr_Battle_Logic_FX32__Mul(v6, 0x2000, 0LL);
}
else
{
v6 = 0x2800;
if ( Dpr_Battle_Logic_ItemData__HaveItem(1267u, 0LL) )
goto LABEL_5;
}
LABEL_6:
if ( captureIndicator >= 0xFF000 )
captureIndicator = 0xFF000;
v8 = 715827883LL * Dpr_Battle_Logic_FX32__Mul(captureIndicator, v6, 0LL);
v9 = HIDWORD(v8) + (v8 >> 63);
if ( (Dpr_Battle_Logic_calc_TypeInfo->_2.bitflags2 & 2) != 0 && !Dpr_Battle_Logic_calc_TypeInfo->_2.cctor_finished )
sub_710009AE30((__int64)Dpr_Battle_Logic_calc_TypeInfo);
Rand = Dpr_Battle_Logic_calc__GetRand(0x100u, 0LL);
return Rand < Dpr_Battle_Logic_FX32__Whole(v9, 0LL);
}
-----
.text.1:0000007102170390 ; bool __fastcall Dpr_Battle_Logic_Capture__checkCaptureCritical(Dpr_Battle_Logic_MainModule_o *mainModule, int32_t captureIndicator, const MethodInfo *method)
.text.1:0000007102170390 Dpr.Battle.Logic.Capture$$checkCaptureCritical
.text.1:0000007102170390 ; CODE XREF: Dpr.Battle.Logic.Capture$$JudgeCapture+B8↑p
.text.1:0000007102170390 ; DATA XREF: .data:00000071049990F8↓o
.text.1:0000007102170390
.text.1:0000007102170390 var_20 = -0x20
.text.1:0000007102170390 var_10 = -0x10
.text.1:0000007102170390 var_s0 = 0
.text.1:0000007102170390
.text.1:0000007102170390 STR X21, [SP,#-0x10+var_20]!
.text.1:0000007102170394 STP X20, X19, [SP,#0x20+var_10]
.text.1:0000007102170398 STP X29, X30, [SP,#0x20+var_s0]
.text.1:000000710217039C ADD X29, SP, #0x20
.text.1:00000071021703A0 ADRP X21, #byte_7104ED5630@PAGE
.text.1:00000071021703A4 LDRB W8, [X21,#byte_7104ED5630@PAGEOFF]
.text.1:00000071021703A8 MOV W19, W1
.text.1:00000071021703AC MOV X20, X0
.text.1:00000071021703B0 TBNZ W8, #0, loc_71021703CC
.text.1:00000071021703B4 ADRP X8, #off_7104BDE9C0@PAGE
.text.1:00000071021703B8 LDR X8, [X8,#off_7104BDE9C0@PAGEOFF]
.text.1:00000071021703BC LDR W0, [X8]
.text.1:00000071021703C0 BL sub_710009AD20
.text.1:00000071021703C4 MOV W8, #1
.text.1:00000071021703C8 STRB W8, [X21,#byte_7104ED5630@PAGEOFF]
.text.1:00000071021703CC
.text.1:00000071021703CC loc_71021703CC ; CODE XREF: Dpr.Battle.Logic.Capture$$checkCaptureCritical+20↑j
.text.1:00000071021703CC MOV X0, X20 ; this
.text.1:00000071021703D0 MOV X1, XZR ; method
.text.1:00000071021703D4 BL Dpr.Battle.Logic.MainModule$$GetZukanCapturedCount
.text.1:00000071021703D8 CMP W0, #0x258
.text.1:00000071021703DC B.LS loc_710217048C
.text.1:00000071021703E0 MOV W20, #0x2800
.text.1:00000071021703E4 MOV W0, #0x4F3 ; itemno
.text.1:00000071021703E8 MOV X1, XZR ; method
.text.1:00000071021703EC BL Dpr.Battle.Logic.ItemData$$HaveItem
.text.1:00000071021703F0 TBZ W0, #0, loc_7102170408
.text.1:00000071021703F4
.text.1:00000071021703F4 loc_71021703F4 ; CODE XREF: Dpr.Battle.Logic.Capture$$checkCaptureCritical+114↓j
.text.1:00000071021703F4 ; Dpr.Battle.Logic.Capture$$checkCaptureCritical+134↓j ...
.text.1:00000071021703F4 MOV W0, W20 ; v1
.text.1:00000071021703F8 MOV W1, #0x2000 ; v2
.text.1:00000071021703FC MOV X2, XZR ; method
.text.1:0000007102170400 BL Dpr.Battle.Logic.FX32$$Mul
.text.1:0000007102170404 MOV W20, W0
.text.1:0000007102170408
.text.1:0000007102170408 loc_7102170408 ; CODE XREF: Dpr.Battle.Logic.Capture$$checkCaptureCritical+60↑j
.text.1:0000007102170408 ; Dpr.Battle.Logic.Capture$$checkCaptureCritical+118↓j ...
.text.1:0000007102170408 CMP W19, #0xFF,LSL#12
.text.1:000000710217040C MOV W8, #0xFF000
.text.1:0000007102170410 CSEL W0, W19, W8, LT ; v1
.text.1:0000007102170414 MOV W1, W20 ; v2
.text.1:0000007102170418 MOV X2, XZR ; method
.text.1:000000710217041C BL Dpr.Battle.Logic.FX32$$Mul
.text.1:0000007102170420 ADRP X10, #off_7104BA54B0@PAGE
.text.1:0000007102170424 LDR X10, [X10,#off_7104BA54B0@PAGEOFF]
.text.1:0000007102170428 MOV W8, #0x2AAAAAAB
.text.1:0000007102170430 SMULL X8, W0, W8
.text.1:0000007102170434 LSR X9, X8, #0x3F ; '?'
.text.1:0000007102170438 LSR X8, X8, #0x20 ; ' '
.text.1:000000710217043C LDR X0, [X10] ; Dpr.Battle.Logic.calc_TypeInfo
.text.1:0000007102170440 ADD W19, W8, W9
.text.1:0000007102170444 LDRB W8, [X0,#0x12F]
.text.1:0000007102170448 TBZ W8, #1, loc_7102170458
.text.1:000000710217044C LDR W8, [X0,#0xE0]
.text.1:0000007102170450 CBNZ W8, loc_7102170458
.text.1:0000007102170454 BL sub_710009AE30
.text.1:0000007102170458
.text.1:0000007102170458 loc_7102170458 ; CODE XREF: Dpr.Battle.Logic.Capture$$checkCaptureCritical+B8↑j
.text.1:0000007102170458 ; Dpr.Battle.Logic.Capture$$checkCaptureCritical+C0↑j
.text.1:0000007102170458 MOV W0, #0x100 ; range
.text.1:000000710217045C MOV X1, XZR ; method
.text.1:0000007102170460 BL Dpr.Battle.Logic.calc$$GetRand
.text.1:0000007102170464 MOV W20, W0
.text.1:0000007102170468 MOV W0, W19 ; v
.text.1:000000710217046C MOV X1, XZR ; method
.text.1:0000007102170470 BL Dpr.Battle.Logic.FX32$$Whole
.text.1:0000007102170474 CMP W20, W0
.text.1:0000007102170478 CSET W0, LT
.text.1:000000710217047C LDP X29, X30, [SP,#0x20+var_s0]
.text.1:0000007102170480 LDP X20, X19, [SP,#0x20+var_10]
.text.1:0000007102170484 LDR X21, [SP+0x20+var_20],#0x30
.text.1:0000007102170488 RET
.text.1:000000710217048C ; ---------------------------------------------------------------------------
.text.1:000000710217048C
.text.1:000000710217048C loc_710217048C ; CODE XREF: Dpr.Battle.Logic.Capture$$checkCaptureCritical+4C↑j
.text.1:000000710217048C CMP W0, #0x1C2
.text.1:0000007102170490 B.LS loc_71021704AC
.text.1:0000007102170494 MOV W20, #0x2000
.text.1:0000007102170498 MOV W0, #0x4F3 ; itemno
.text.1:000000710217049C MOV X1, XZR ; method
.text.1:00000071021704A0 BL Dpr.Battle.Logic.ItemData$$HaveItem
.text.1:00000071021704A4 TBNZ W0, #0, loc_71021703F4
.text.1:00000071021704A8 B loc_7102170408
.text.1:00000071021704AC ; ---------------------------------------------------------------------------
.text.1:00000071021704AC
.text.1:00000071021704AC loc_71021704AC ; CODE XREF: Dpr.Battle.Logic.Capture$$checkCaptureCritical+100↑j
.text.1:00000071021704AC CMP W0, #0x12C
.text.1:00000071021704B0 B.LS loc_71021704CC
.text.1:00000071021704B4 MOV W20, #0x1800
.text.1:00000071021704B8 MOV W0, #0x4F3 ; itemno
.text.1:00000071021704BC MOV X1, XZR ; method
.text.1:00000071021704C0 BL Dpr.Battle.Logic.ItemData$$HaveItem
.text.1:00000071021704C4 TBNZ W0, #0, loc_71021703F4
.text.1:00000071021704C8 B loc_7102170408
.text.1:00000071021704CC ; ---------------------------------------------------------------------------
.text.1:00000071021704CC
.text.1:00000071021704CC loc_71021704CC ; CODE XREF: Dpr.Battle.Logic.Capture$$checkCaptureCritical+120↑j
.text.1:00000071021704CC CMP W0, #0x96
.text.1:00000071021704D0 B.LS loc_71021704EC
.text.1:00000071021704D4 MOV W20, #0x1000
.text.1:00000071021704D8 MOV W0, #0x4F3 ; itemno
.text.1:00000071021704DC MOV X1, XZR ; method
.text.1:00000071021704E0 BL Dpr.Battle.Logic.ItemData$$HaveItem
.text.1:00000071021704E4 TBNZ W0, #0, loc_71021703F4
.text.1:00000071021704E8 B loc_7102170408
.text.1:00000071021704EC ; ---------------------------------------------------------------------------
.text.1:00000071021704EC
.text.1:00000071021704EC loc_71021704EC ; CODE XREF: Dpr.Battle.Logic.Capture$$checkCaptureCritical+140↑j
.text.1:00000071021704EC CMP W0, #0x1F
.text.1:00000071021704F0 B.CC loc_710217050C
.text.1:00000071021704F4 MOV W20, #0x800
.text.1:00000071021704F8 MOV W0, #0x4F3 ; itemno
.text.1:00000071021704FC MOV X1, XZR ; method
.text.1:0000007102170500 BL Dpr.Battle.Logic.ItemData$$HaveItem
.text.1:0000007102170504 TBNZ W0, #0, loc_71021703F4
.text.1:0000007102170508 B loc_7102170408
.text.1:000000710217050C ; ---------------------------------------------------------------------------
.text.1:000000710217050C
.text.1:000000710217050C loc_710217050C ; CODE XREF: Dpr.Battle.Logic.Capture$$checkCaptureCritical+160↑j
.text.1:000000710217050C MOV W0, WZR
.text.1:0000007102170510 LDP X29, X30, [SP,#0x20+var_s0]
.text.1:0000007102170514 LDP X20, X19, [SP,#0x20+var_10]
.text.1:0000007102170518 LDR X21, [SP+0x20+var_20],#0x30
.text.1:000000710217051C RET
.text.1:000000710217051C ; End of function Dpr.Battle.Logic.Capture$$checkCaptureCritical
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment