Skip to content

Instantly share code, notes, and snippets.

@Lusamine
Created August 1, 2022 03:15
Show Gist options
  • Save Lusamine/ab7866435d56ce34c87ee1dffc6d38db to your computer and use it in GitHub Desktop.
Save Lusamine/ab7866435d56ce34c87ee1dffc6d38db to your computer and use it in GitHub Desktop.
__int64 __fastcall calc_initial_damage(__int64 a1, _DWORD *a2)
{
__int64 *v2; // x21
unsigned int *v5; // x8
unsigned int v6; // w9
__int64 v7; // x22
unsigned int *v8; // x8
unsigned int v9; // w9
unsigned int v10; // w9
__int64 *v11; // x20
unsigned int *v12; // x8
unsigned int v13; // w9
unsigned int initial_damage_la; // w19
unsigned int *v15; // x8
unsigned int v16; // w9
unsigned int v17; // w9
__int64 v19[4]; // [xsp+0h] [xbp-730h] BYREF
__int64 v20; // [xsp+20h] [xbp-710h] BYREF
v2 = *(__int64 **)(a1 + 488);
if ( v2 )
{
v5 = (unsigned int *)(v2 + 10);
do
v6 = __ldaxr(v5);
while ( __stlxr(v6 + 1, v5) );
}
sub_71008463F0(v19, v2 + 12);
v7 = v19[0];
sub_7100845E04(v19);
if ( v2 )
{
v8 = (unsigned int *)(v2 + 10);
do
{
v9 = __ldaxr(v8);
v10 = v9 - 1;
}
while ( __stlxr(v10, v8) );
if ( !v10 )
{
(*(void (__fastcall **)(__int64 *))(*v2 + 16))(v2);
if ( v7 )
goto LABEL_9;
return a2[2] * *a2 * (2 * a2[1] / 5u + 2) / a2[3] / 50 + 2;
}
}
if ( !v7 )
return a2[2] * *a2 * (2 * a2[1] / 5u + 2) / a2[3] / 50 + 2;
LABEL_9:
v11 = *(__int64 **)(a1 + 488);
if ( v11 )
{
v12 = (unsigned int *)(v11 + 10);
do
v13 = __ldaxr(v12);
while ( __stlxr(v13 + 1, v12) );
}
sub_71008463F0(v19, v11 + 12);
initial_damage_la = ((__int64 (__fastcall *)(__int64 *, _DWORD *))v19[0])(&v20, a2);
sub_7100845E04(v19);
if ( v11 )
{
v15 = (unsigned int *)(v11 + 10);
do
{
v16 = __ldaxr(v15);
v17 = v16 - 1;
}
while ( __stlxr(v17, v15) );
if ( !v17 )
(*(void (__fastcall **)(__int64 *))(*v11 + 16))(v11);
}
return initial_damage_la;
}
-----
.text:00000071028CE294 ; __int64 __fastcall calc_initial_damage(__int64, _DWORD *)
.text:00000071028CE294 calc_initial_damage ; CODE XREF: calc_attack_damage+2FEC↑p
.text:00000071028CE294 ; sub_71028D96B8+78↓p ...
.text:00000071028CE294
.text:00000071028CE294 var_730 = -0x730
.text:00000071028CE294 var_30 = -0x30
.text:00000071028CE294 var_20 = -0x20
.text:00000071028CE294 var_10 = -0x10
.text:00000071028CE294 var_s0 = 0
.text:00000071028CE294
.text:00000071028CE294 STR X28, [SP,#-0x10+var_30]!
.text:00000071028CE298 STP X22, X21, [SP,#0x30+var_20]
.text:00000071028CE29C STP X20, X19, [SP,#0x30+var_10]
.text:00000071028CE2A0 STP X29, X30, [SP,#0x30+var_s0]
.text:00000071028CE2A4 ADD X29, SP, #0x30
.text:00000071028CE2A8 SUB SP, SP, #0x700
.text:00000071028CE2AC LDR X21, [X0,#0x1E8]
.text:00000071028CE2B0 MOV X19, X1
.text:00000071028CE2B4 MOV X20, X0
.text:00000071028CE2B8 CBZ X21, loc_71028CE2D0
.text:00000071028CE2BC ADD X8, X21, #0x50 ; 'P'
.text:00000071028CE2C0
.text:00000071028CE2C0 loc_71028CE2C0 ; CODE XREF: calc_initial_damage+38↓j
.text:00000071028CE2C0 LDAXR W9, [X8]
.text:00000071028CE2C4 ADD W9, W9, #1
.text:00000071028CE2C8 STLXR W10, W9, [X8]
.text:00000071028CE2CC CBNZ W10, loc_71028CE2C0
.text:00000071028CE2D0
.text:00000071028CE2D0 loc_71028CE2D0 ; CODE XREF: calc_initial_damage+24↑j
.text:00000071028CE2D0 ADD X1, X21, #0x60 ; '`'
.text:00000071028CE2D4 MOV X0, SP
.text:00000071028CE2D8 BL sub_71008463F0
.text:00000071028CE2DC LDR X22, [SP,#0x730+var_730]
.text:00000071028CE2E0 MOV X0, SP
.text:00000071028CE2E4 BL sub_7100845E04
.text:00000071028CE2E8 CBZ X21, loc_71028CE304
.text:00000071028CE2EC ADD X8, X21, #0x50 ; 'P'
.text:00000071028CE2F0
.text:00000071028CE2F0 loc_71028CE2F0 ; CODE XREF: calc_initial_damage+68↓j
.text:00000071028CE2F0 LDAXR W9, [X8]
.text:00000071028CE2F4 SUBS W9, W9, #1
.text:00000071028CE2F8 STLXR W10, W9, [X8]
.text:00000071028CE2FC CBNZ W10, loc_71028CE2F0
.text:00000071028CE300 B.EQ loc_71028CE380
.text:00000071028CE304
.text:00000071028CE304 loc_71028CE304 ; CODE XREF: calc_initial_damage+54↑j
.text:00000071028CE304 CBZ X22, loc_71028CE394
.text:00000071028CE308
.text:00000071028CE308 loc_71028CE308 ; CODE XREF: calc_initial_damage+FC↓j
.text:00000071028CE308 LDR X20, [X20,#0x1E8]
.text:00000071028CE30C CBZ X20, loc_71028CE324
.text:00000071028CE310 ADD X8, X20, #0x50 ; 'P'
.text:00000071028CE314
.text:00000071028CE314 loc_71028CE314 ; CODE XREF: calc_initial_damage+8C↓j
.text:00000071028CE314 LDAXR W9, [X8]
.text:00000071028CE318 ADD W9, W9, #1
.text:00000071028CE31C STLXR W10, W9, [X8]
.text:00000071028CE320 CBNZ W10, loc_71028CE314
.text:00000071028CE324
.text:00000071028CE324 loc_71028CE324 ; CODE XREF: calc_initial_damage+78↑j
.text:00000071028CE324 ADD X1, X20, #0x60 ; '`'
.text:00000071028CE328 MOV X0, SP
.text:00000071028CE32C MOV X21, SP
.text:00000071028CE330 BL sub_71008463F0
.text:00000071028CE334 LDR X8, [SP,#0x730+var_730]
.text:00000071028CE338 ADD X0, X21, #0x20 ; ' '
.text:00000071028CE33C MOV X1, X19
.text:00000071028CE340 BLR X8
.text:00000071028CE344 MOV W19, W0
.text:00000071028CE348 MOV X0, SP
.text:00000071028CE34C BL sub_7100845E04
.text:00000071028CE350 CBZ X20, loc_71028CE3D4
.text:00000071028CE354 ADD X8, X20, #0x50 ; 'P'
.text:00000071028CE358
.text:00000071028CE358 loc_71028CE358 ; CODE XREF: calc_initial_damage+D0↓j
.text:00000071028CE358 LDAXR W9, [X8]
.text:00000071028CE35C SUBS W9, W9, #1
.text:00000071028CE360 STLXR W10, W9, [X8]
.text:00000071028CE364 CBNZ W10, loc_71028CE358
.text:00000071028CE368 B.NE loc_71028CE3D4
.text:00000071028CE36C LDR X8, [X20]
.text:00000071028CE370 MOV X0, X20
.text:00000071028CE374 LDR X8, [X8,#0x10]
.text:00000071028CE378 BLR X8
.text:00000071028CE37C B loc_71028CE3D4
.text:00000071028CE380 ; ---------------------------------------------------------------------------
.text:00000071028CE380
.text:00000071028CE380 loc_71028CE380 ; CODE XREF: calc_initial_damage+6C↑j
.text:00000071028CE380 LDR X8, [X21]
.text:00000071028CE384 MOV X0, X21
.text:00000071028CE388 LDR X8, [X8,#0x10]
.text:00000071028CE38C BLR X8
.text:00000071028CE390 CBNZ X22, loc_71028CE308
.text:00000071028CE394
.text:00000071028CE394 loc_71028CE394 ; CODE XREF: calc_initial_damage:loc_71028CE304↑j
.text:00000071028CE394 LDP W8, W9, [X19]
.text:00000071028CE398 LSL W9, W9, #1
.text:00000071028CE39C LDP W10, W11, [X19,#8]
.text:00000071028CE3A0 MUL W8, W10, W8
.text:00000071028CE3A4 MOV W10, #0xCCCCCCCD
.text:00000071028CE3AC UMULL X9, W9, W10
.text:00000071028CE3B0 LSR X9, X9, #0x22 ; '"'
.text:00000071028CE3B4 ADD W9, W9, #2
.text:00000071028CE3B8 MUL W8, W8, W9
.text:00000071028CE3BC MOV W9, #0x51EB851F
.text:00000071028CE3C4 UDIV W8, W8, W11
.text:00000071028CE3C8 UMULL X8, W8, W9
.text:00000071028CE3CC LSR X8, X8, #0x24 ; '$'
.text:00000071028CE3D0 ADD W19, W8, #2
.text:00000071028CE3D4
.text:00000071028CE3D4 loc_71028CE3D4 ; CODE XREF: calc_initial_damage+BC↑j
.text:00000071028CE3D4 ; calc_initial_damage+D4↑j ...
.text:00000071028CE3D4 MOV W0, W19
.text:00000071028CE3D8 ADD SP, SP, #0x700
.text:00000071028CE3DC LDP X29, X30, [SP,#0x30+var_s0]
.text:00000071028CE3E0 LDP X20, X19, [SP,#0x30+var_10]
.text:00000071028CE3E4 LDP X22, X21, [SP,#0x30+var_20]
.text:00000071028CE3E8 LDR X28, [SP+0x30+var_30],#0x40
.text:00000071028CE3EC RET
.text:00000071028CE3EC ; End of function calc_initial_damage
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment