Skip to content

Instantly share code, notes, and snippets.

@Lusamine
Last active July 24, 2022 17:57
Show Gist options
  • Save Lusamine/759c2fb0ffa50138b301afb3044e1b5a to your computer and use it in GitHub Desktop.
Save Lusamine/759c2fb0ffa50138b301afb3044e1b5a to your computer and use it in GitHub Desktop.
void __fastcall Dpr_Battle_Logic_Section_UseItem_Core__useBall(
Dpr_Battle_Logic_Section_UseItem_Core_o *this,
Dpr_Battle_Logic_BTL_POKEPARAM_o *userPoke,
uint16_t itemID,
bool *pIsUsed,
bool *pIsCaptured,
Dpr_Battle_Logic_POKE_CAPTURED_CONTEXT_o *pCaptureContext,
const MethodInfo *method)
{
const MethodInfo *v13; // x3
Dpr_Battle_Logic_BTL_POKEPARAM_o *v14; // x26
uint8_t v15; // w1
Dpr_Battle_Logic_ServerCommandPutter_o *m_pServerCmdPutter; // x0
uint16_t v17; // w2
uint8_t v18; // w3
uint8_t CaptureLevelCap; // w27
unsigned __int8 Value; // w0
uint8_t v21; // w25
Dpr_Battle_Logic_Capture_JudgeParam_o *v22; // x27
struct Dpr_Battle_Logic_MainModule_o *m_pMainModule; // x1
struct Dpr_Battle_Logic_BattleEnv_o *m_pBattleEnv; // x1
unsigned __int8 v25; // w28
int v26; // w8
Dpr_Battle_Logic_Capture_JudgeResult_o *v27; // x27
bool v28; // w26
uint8_t PokePos; // w0
Dpr_Battle_Logic_Capture_JudgeParam_o *param; // [xsp+10h] [xbp-60h] BYREF
uint8_t pTargetPos[4]; // [xsp+1Ch] [xbp-54h] BYREF
if ( (byte_7104ED7DF3 & 1) == 0 )
{
sub_710009AD20(31018LL);
byte_7104ED7DF3 = 1;
}
pTargetPos[0] = 0;
param = 0LL;
*pIsUsed = 0;
*pIsCaptured = 0;
Dpr_Battle_Logic_POKE_CAPTURED_CONTEXT__Clear(pCaptureContext, 0LL);
v14 = Dpr_Battle_Logic_Section_UseItem_Core__decideBallTarget(this, pTargetPos, userPoke, v13);
if ( Dpr_Battle_Logic_Section__GetCompetitor((Dpr_Battle_Logic_Section_o *)this, 0LL) )
{
v15 = pTargetPos[0];
if ( pTargetPos[0] == 5 )
return;
m_pServerCmdPutter = this->fields.m_pServerCmdPutter;
v17 = itemID;
v18 = 0;
LABEL_9:
Dpr_Battle_Logic_ServerCommandPutter__Act_BallThrow_Forbidden(m_pServerCmdPutter, v15, v17, v18, 0LL);
return;
}
CaptureLevelCap = Dpr_Battle_Logic_MainModule__GetCaptureLevelCap(this->fields.m_pMainModule, 0LL);
Value = Dpr_Battle_Logic_BTL_POKEPARAM__GetValue(v14, 17, 0LL);
v21 = pTargetPos[0];
if ( Value > (unsigned int)CaptureLevelCap )
{
if ( pTargetPos[0] == 5 )
return;
m_pServerCmdPutter = this->fields.m_pServerCmdPutter;
v15 = pTargetPos[0];
v17 = itemID;
v18 = 1;
goto LABEL_9;
}
if ( pTargetPos[0] != 5 )
{
v22 = (Dpr_Battle_Logic_Capture_JudgeParam_o *)sub_710009AEA0((__int64)Dpr_Battle_Logic_Capture_JudgeParam_TypeInfo);
Dpr_Battle_Logic_Capture_JudgeParam___ctor(v22, 0LL);
param = v22;
m_pMainModule = this->fields.m_pMainModule;
v22->fields.mainModule = m_pMainModule;
sub_710009AC70(&v22->fields, m_pMainModule);
m_pBattleEnv = this->fields.m_pBattleEnv;
v22->fields.battleEnv = m_pBattleEnv;
sub_710009AC70(&v22->fields.battleEnv, m_pBattleEnv);
v22->fields.userPoke = userPoke;
sub_710009AC70(&v22->fields.userPoke, userPoke);
v22->fields.targetPoke = v14;
sub_710009AC70(&v22->fields.targetPoke, v14);
v22->fields.itemID = itemID;
v22->fields.isCriticalEnable = 1;
if ( Dpr_Battle_Logic_MainModule__NeedReduleHighLevelCaptureRate(this->fields.m_pMainModule, 0LL)
&& (v25 = Dpr_Battle_Logic_BTL_POKEPARAM__GetValue(userPoke, 17, 0LL),
v25 < (unsigned int)(unsigned __int8)Dpr_Battle_Logic_BTL_POKEPARAM__GetValue(v14, 17, 0LL)) )
{
v26 = 410;
}
else
{
v26 = 4096;
}
v22->fields.captureValueCoef = v26;
v27 = (Dpr_Battle_Logic_Capture_JudgeResult_o *)sub_710009AEA0((__int64)Dpr_Battle_Logic_Capture_JudgeResult_TypeInfo);
Dpr_Battle_Logic_Capture_JudgeResult___ctor(v27, 0LL);
Dpr_Battle_Logic_Capture__JudgeCapture(v27, &param, 0LL);
if ( v27->fields.isCaptured )
Dpr_Battle_Logic_BTL_POKEPARAM__SetCaptureBallID(v14, itemID, 0LL);
v28 = v27->fields.isCaptured & !Dpr_Battle_Logic_MainModule__IsZukanRegistered_485369585120(
this->fields.m_pMainModule,
v14,
0LL);
PokePos = Dpr_Battle_Logic_Section__GetPokePos((Dpr_Battle_Logic_Section_o *)this, userPoke, 0LL);
Dpr_Battle_Logic_ServerCommandPutter__Act_BallThrow(
this->fields.m_pServerCmdPutter,
PokePos,
v21,
v27->fields.yureCount,
v27->fields.isCaptured,
v28,
v27->fields.isCritical,
itemID,
0LL);
Dpr_Battle_Logic_POKE_CAPTURED_CONTEXT__Set(pCaptureContext, v21, v27->fields.isCaptured, v28, 0LL);
*pIsCaptured = v27->fields.isCaptured;
}
*pIsUsed = 1;
}
-----
.text.1:0000007102579DD0 ; void __fastcall Dpr_Battle_Logic_Section_UseItem_Core__useBall(Dpr_Battle_Logic_Section_UseItem_Core_o *this, Dpr_Battle_Logic_BTL_POKEPARAM_o *userPoke, uint16_t itemID, bool *pIsUsed, bool *pIsCaptured, Dpr_Battle_Logic_POKE_CAPTURED_CONTEXT_o *pCaptureContext, const MethodInfo *method)
.text.1:0000007102579DD0 Dpr.Battle.Logic.Section_UseItem_Core$$useBall
.text.1:0000007102579DD0 ; CODE XREF: Dpr.Battle.Logic.Section_UseItem_Core$$Execute+158↑p
.text.1:0000007102579DD0 ; DATA XREF: .data:0000007104996EE0↓o
.text.1:0000007102579DD0
.text.1:0000007102579DD0 method = -0x70
.text.1:0000007102579DD0 param = -0x60
.text.1:0000007102579DD0 pTargetPos = -0x54
.text.1:0000007102579DD0 var_50 = -0x50
.text.1:0000007102579DD0 var_40 = -0x40
.text.1:0000007102579DD0 var_30 = -0x30
.text.1:0000007102579DD0 var_20 = -0x20
.text.1:0000007102579DD0 var_10 = -0x10
.text.1:0000007102579DD0 var_s0 = 0
.text.1:0000007102579DD0
.text.1:0000007102579DD0 SUB SP, SP, #0x80
.text.1:0000007102579DD4 STP X28, X27, [SP,#0x70+var_50]
.text.1:0000007102579DD8 STP X26, X25, [SP,#0x70+var_40]
.text.1:0000007102579DDC STP X24, X23, [SP,#0x70+var_30]
.text.1:0000007102579DE0 STP X22, X21, [SP,#0x70+var_20]
.text.1:0000007102579DE4 STP X20, X19, [SP,#0x70+var_10]
.text.1:0000007102579DE8 STP X29, X30, [SP,#0x70+var_s0]
.text.1:0000007102579DEC ADD X29, SP, #0x70
.text.1:0000007102579DF0 ADRP X25, #byte_7104ED7DF3@PAGE
.text.1:0000007102579DF4 LDRB W8, [X25,#byte_7104ED7DF3@PAGEOFF]
.text.1:0000007102579DF8 MOV X22, X5
.text.1:0000007102579DFC MOV X21, X4
.text.1:0000007102579E00 MOV X20, X3
.text.1:0000007102579E04 MOV W19, W2
.text.1:0000007102579E08 MOV X24, X1
.text.1:0000007102579E0C MOV X23, X0
.text.1:0000007102579E10 TBNZ W8, #0, loc_7102579E2C
.text.1:0000007102579E14 ADRP X8, #off_7104C05B00@PAGE
.text.1:0000007102579E18 LDR X8, [X8,#off_7104C05B00@PAGEOFF]
.text.1:0000007102579E1C LDR W0, [X8]
.text.1:0000007102579E20 BL sub_710009AD20
.text.1:0000007102579E24 MOV W8, #1
.text.1:0000007102579E28 STRB W8, [X25,#byte_7104ED7DF3@PAGEOFF]
.text.1:0000007102579E2C
.text.1:0000007102579E2C loc_7102579E2C ; CODE XREF: Dpr.Battle.Logic.Section_UseItem_Core$$useBall+40↑j
.text.1:0000007102579E2C MOV X0, X22 ; this
.text.1:0000007102579E30 MOV X1, XZR ; method
.text.1:0000007102579E34 STRB WZR, [SP,#0x70+pTargetPos]
.text.1:0000007102579E38 STR XZR, [SP,#0x70+param]
.text.1:0000007102579E3C STRB WZR, [X20]
.text.1:0000007102579E40 STRB WZR, [X21]
.text.1:0000007102579E44 BL Dpr.Battle.Logic.POKE_CAPTURED_CONTEXT$$Clear
.text.1:0000007102579E48 ADD X1, SP, #0x70+pTargetPos ; pTargetPos
.text.1:0000007102579E4C MOV X0, X23 ; this
.text.1:0000007102579E50 MOV X2, X24 ; userPoke
.text.1:0000007102579E54 BL Dpr.Battle.Logic.Section_UseItem_Core$$decideBallTarget
.text.1:0000007102579E58 MOV X26, X0
.text.1:0000007102579E5C MOV X0, X23 ; this
.text.1:0000007102579E60 MOV X1, XZR ; method
.text.1:0000007102579E64 BL Dpr.Battle.Logic.Section$$GetCompetitor
.text.1:0000007102579E68 CBZ W0, loc_7102579E88
.text.1:0000007102579E6C LDRB W1, [SP,#0x70+pTargetPos]
.text.1:0000007102579E70 CMP W1, #5
.text.1:0000007102579E74 B.EQ loc_710257A068
.text.1:0000007102579E78 LDR X0, [X23,#0x28]
.text.1:0000007102579E7C MOV W2, W19
.text.1:0000007102579E80 MOV W3, WZR
.text.1:0000007102579E84 B loc_7102579ED0
.text.1:0000007102579E88 ; ---------------------------------------------------------------------------
.text.1:0000007102579E88
.text.1:0000007102579E88 loc_7102579E88 ; CODE XREF: Dpr.Battle.Logic.Section_UseItem_Core$$useBall+98↑j
.text.1:0000007102579E88 LDR X0, [X23,#0x10] ; this
.text.1:0000007102579E8C MOV X1, XZR ; method
.text.1:0000007102579E90 BL Dpr.Battle.Logic.MainModule$$GetCaptureLevelCap
.text.1:0000007102579E94 MOV W27, W0
.text.1:0000007102579E98 MOV W1, #0x11 ; vid
.text.1:0000007102579E9C MOV X0, X26 ; this
.text.1:0000007102579EA0 MOV X2, XZR ; method
.text.1:0000007102579EA4 BL Dpr.Battle.Logic.BTL_POKEPARAM$$GetValue
.text.1:0000007102579EA8 LDRB W25, [SP,#0x70+pTargetPos]
.text.1:0000007102579EAC AND W8, W0, #0xFF
.text.1:0000007102579EB0 CMP W8, W27,UXTB
.text.1:0000007102579EB4 B.LS loc_7102579EDC
.text.1:0000007102579EB8 CMP W25, #5
.text.1:0000007102579EBC B.EQ loc_710257A068
.text.1:0000007102579EC0 LDR X0, [X23,#0x28] ; this
.text.1:0000007102579EC4 MOV W1, W25 ; targetPos
.text.1:0000007102579EC8 MOV W2, W19 ; ballItemID
.text.1:0000007102579ECC MOV W3, #1 ; cause
.text.1:0000007102579ED0
.text.1:0000007102579ED0 loc_7102579ED0 ; CODE XREF: Dpr.Battle.Logic.Section_UseItem_Core$$useBall+B4↑j
.text.1:0000007102579ED0 MOV X4, XZR ; method
.text.1:0000007102579ED4 BL Dpr.Battle.Logic.ServerCommandPutter$$Act_BallThrow_Forbidden
.text.1:0000007102579ED8 B loc_710257A068
.text.1:0000007102579EDC ; ---------------------------------------------------------------------------
.text.1:0000007102579EDC
.text.1:0000007102579EDC loc_7102579EDC ; CODE XREF: Dpr.Battle.Logic.Section_UseItem_Core$$useBall+E4↑j
.text.1:0000007102579EDC CMP W25, #5
.text.1:0000007102579EE0 B.EQ loc_710257A060
.text.1:0000007102579EE4 ADRP X8, #off_7104BFBD00@PAGE
.text.1:0000007102579EE8 LDR X8, [X8,#off_7104BFBD00@PAGEOFF]
.text.1:0000007102579EEC LDR X0, [X8] ; Dpr.Battle.Logic.Capture.JudgeParam_TypeInfo
.text.1:0000007102579EF0 BL sub_710009AEA0
.text.1:0000007102579EF4 MOV X1, XZR ; method
.text.1:0000007102579EF8 MOV X27, X0
.text.1:0000007102579EFC BL Dpr.Battle.Logic.Capture.JudgeParam$$.ctor
.text.1:0000007102579F00 STR X27, [SP,#0x70+param]
.text.1:0000007102579F04 LDR X1, [X23,#0x10]
.text.1:0000007102579F08 MOV X0, X27
.text.1:0000007102579F0C STR X1, [X0,#0x10]!
.text.1:0000007102579F10 BL sub_710009AC70
.text.1:0000007102579F14 LDR X1, [X23,#0x18]
.text.1:0000007102579F18 MOV X0, X27
.text.1:0000007102579F1C STR X1, [X0,#0x18]!
.text.1:0000007102579F20 BL sub_710009AC70
.text.1:0000007102579F24 MOV X0, X27
.text.1:0000007102579F28 MOV X1, X24
.text.1:0000007102579F2C STR X24, [X0,#0x20]!
.text.1:0000007102579F30 BL sub_710009AC70
.text.1:0000007102579F34 MOV X0, X27
.text.1:0000007102579F38 MOV X1, X26
.text.1:0000007102579F3C STR X26, [X0,#0x28]!
.text.1:0000007102579F40 BL sub_710009AC70
.text.1:0000007102579F44 MOV W8, #1
.text.1:0000007102579F48 STRH W19, [X27,#0x30]
.text.1:0000007102579F4C MOV X1, XZR ; method
.text.1:0000007102579F50 STRB W8, [X27,#0x39]
.text.1:0000007102579F54 LDR X0, [X23,#0x10] ; this
.text.1:0000007102579F58 BL Dpr.Battle.Logic.MainModule$$NeedReduleHighLevelCaptureRate
.text.1:0000007102579F5C TBZ W0, #0, loc_7102579F98
.text.1:0000007102579F60 MOV W1, #0x11 ; vid
.text.1:0000007102579F64 MOV X0, X24 ; this
.text.1:0000007102579F68 MOV X2, XZR ; method
.text.1:0000007102579F6C BL Dpr.Battle.Logic.BTL_POKEPARAM$$GetValue
.text.1:0000007102579F70 MOV W28, W0
.text.1:0000007102579F74 MOV X0, X26 ; this
.text.1:0000007102579F78 MOV W1, #0x11 ; vid
.text.1:0000007102579F7C MOV X2, XZR ; method
.text.1:0000007102579F80 BL Dpr.Battle.Logic.BTL_POKEPARAM$$GetValue
.text.1:0000007102579F84 AND W8, W28, #0xFF
.text.1:0000007102579F88 CMP W8, W0,UXTB
.text.1:0000007102579F8C B.CS loc_7102579F98
.text.1:0000007102579F90 MOV W8, #0x19A
.text.1:0000007102579F94 B loc_7102579F9C
.text.1:0000007102579F98 ; ---------------------------------------------------------------------------
.text.1:0000007102579F98
.text.1:0000007102579F98 loc_7102579F98 ; CODE XREF: Dpr.Battle.Logic.Section_UseItem_Core$$useBall+18C↑j
.text.1:0000007102579F98 ; Dpr.Battle.Logic.Section_UseItem_Core$$useBall+1BC↑j
.text.1:0000007102579F98 MOV W8, #0x1000
.text.1:0000007102579F9C
.text.1:0000007102579F9C loc_7102579F9C ; CODE XREF: Dpr.Battle.Logic.Section_UseItem_Core$$useBall+1C4↑j
.text.1:0000007102579F9C STR W8, [X27,#0x34]
.text.1:0000007102579FA0 ADRP X8, #off_7104BFBD08@PAGE
.text.1:0000007102579FA4 LDR X8, [X8,#off_7104BFBD08@PAGEOFF]
.text.1:0000007102579FA8 LDR X0, [X8] ; Dpr.Battle.Logic.Capture.JudgeResult_TypeInfo
.text.1:0000007102579FAC BL sub_710009AEA0
.text.1:0000007102579FB0 MOV X1, XZR ; method
.text.1:0000007102579FB4 MOV X27, X0
.text.1:0000007102579FB8 BL Dpr.Battle.Logic.Capture.JudgeResult$$.ctor
.text.1:0000007102579FBC ADD X1, SP, #0x70+param ; param
.text.1:0000007102579FC0 MOV X0, X27 ; result
.text.1:0000007102579FC4 MOV X2, XZR ; method
.text.1:0000007102579FC8 BL Dpr.Battle.Logic.Capture$$JudgeCapture
.text.1:0000007102579FCC LDRB W8, [X27,#0x10]
.text.1:0000007102579FD0 CBZ W8, loc_7102579FE4
.text.1:0000007102579FD4 MOV X0, X26 ; this
.text.1:0000007102579FD8 MOV W1, W19 ; ballItemID
.text.1:0000007102579FDC MOV X2, XZR ; method
.text.1:0000007102579FE0 BL Dpr.Battle.Logic.BTL_POKEPARAM$$SetCaptureBallID
.text.1:0000007102579FE4
.text.1:0000007102579FE4 loc_7102579FE4 ; CODE XREF: Dpr.Battle.Logic.Section_UseItem_Core$$useBall+200↑j
.text.1:0000007102579FE4 LDR X0, [X23,#0x10] ; this
.text.1:0000007102579FE8 MOV X1, X26 ; bpp
.text.1:0000007102579FEC MOV X2, XZR ; method
.text.1:0000007102579FF0 BL Dpr.Battle.Logic.MainModule$$IsZukanRegistered_485369585120
.text.1:0000007102579FF4 LDRB W8, [X27,#0x10]
.text.1:0000007102579FF8 CMP W8, #0
.text.1:0000007102579FFC CSET W8, NE
.text.1:000000710257A000 EOR W9, W0, #1
.text.1:000000710257A004 MOV X0, X23 ; this
.text.1:000000710257A008 MOV X1, X24 ; poke
.text.1:000000710257A00C MOV X2, XZR ; method
.text.1:000000710257A010 AND W26, W8, W9
.text.1:000000710257A014 BL Dpr.Battle.Logic.Section$$GetPokePos
.text.1:000000710257A018 MOV W1, W0 ; userPos
.text.1:000000710257A01C LDR X0, [X23,#0x28] ; this
.text.1:000000710257A020 MOV W2, W25 ; targetPos
.text.1:000000710257A024 LDRB W4, [X27,#0x10] ; fSuccess
.text.1:000000710257A028 MOV W5, W26 ; fZukanRegister
.text.1:000000710257A02C MOV W7, W19 ; ballItemID
.text.1:000000710257A030 LDRB W6, [X27,#0x11] ; fCritical
.text.1:000000710257A034 LDRB W3, [X27,#0x12] ; yureCnt
.text.1:000000710257A038 STR XZR, [SP,#0x70+method] ; method
.text.1:000000710257A03C BL Dpr.Battle.Logic.ServerCommandPutter$$Act_BallThrow
.text.1:000000710257A040 LDRB W2, [X27,#0x10] ; captured
.text.1:000000710257A044 MOV X0, X22 ; this
.text.1:000000710257A048 MOV W1, W25 ; pos
.text.1:000000710257A04C MOV W3, W26 ; zukanRegistered
.text.1:000000710257A050 MOV X4, XZR ; method
.text.1:000000710257A054 BL Dpr.Battle.Logic.POKE_CAPTURED_CONTEXT$$Set
.text.1:000000710257A058 LDRB W8, [X27,#0x10]
.text.1:000000710257A05C STRB W8, [X21]
.text.1:000000710257A060
.text.1:000000710257A060 loc_710257A060 ; CODE XREF: Dpr.Battle.Logic.Section_UseItem_Core$$useBall+110↑j
.text.1:000000710257A060 MOV W8, #1
.text.1:000000710257A064 STRB W8, [X20]
.text.1:000000710257A068
.text.1:000000710257A068 loc_710257A068 ; CODE XREF: Dpr.Battle.Logic.Section_UseItem_Core$$useBall+A4↑j
.text.1:000000710257A068 ; Dpr.Battle.Logic.Section_UseItem_Core$$useBall+EC↑j ...
.text.1:000000710257A068 LDP X29, X30, [SP,#0x70+var_s0]
.text.1:000000710257A06C LDP X20, X19, [SP,#0x70+var_10]
.text.1:000000710257A070 LDP X22, X21, [SP,#0x70+var_20]
.text.1:000000710257A074 LDP X24, X23, [SP,#0x70+var_30]
.text.1:000000710257A078 LDP X26, X25, [SP,#0x70+var_40]
.text.1:000000710257A07C LDP X28, X27, [SP,#0x70+var_50]
.text.1:000000710257A080 ADD SP, SP, #0x80
.text.1:000000710257A084 RET
.text.1:000000710257A084 ; ---------------------------------------------------------------------------
.text.1:000000710257A088 ALIGN 0x10
.text.1:000000710257A088 ; End of function Dpr.Battle.Logic.Section_UseItem_Core$$useBall
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment