__int16 __thiscall unkPlayerCollisionCheck(void *this, unsigned int *a2)
{
void (*v2)(void); // edi@1
unsigned int v3; // esi@1
int v4; // eax@3
int v5; // esi@6
int v6; // esi@9
int v7; // esi@12
int v8; // esi@15
int v9; // esi@18
unsigned int v10; // esi@23
int v11; // esi@26
PlayerMOB *v12; // esi@29
__int16 v13; // ax@29
int v14; // esi@31
int v15; // esi@34
int v16; // esi@36
int v17; // esi@40
int v18; // esi@42
int v19; // eax@46
signed int v20; // ebx@46
unsigned int v21; // esi@47
unsigned int v22; // edi@50
int v23; // esi@52
int v27; // esi@56
unsigned int v28; // edi@59
int v29; // esi@61
int v33; // esi@67
signed int v36; // ecx@74
signed int v38; // eax@77
int v39; // esi@83
signed int v42; // edi@86
int v43; // esi@88
signed int v47; // eax@91
int v48; // esi@95
int v49; // esi@101
int v50; // ebx@111
unsigned int v51; // edi@113
unsigned int v52; // esi@115
unsigned int v57; // esi@118
unsigned int v60; // esi@120
unsigned int v61; // esi@122
PlayerMOB *v62; // eax@124
__int16 v63; // cx@125
unsigned __int8 v64; // of@125
__int16 v65; // cx@125
__int16 v66; // dx@128
__int16 v67; // dx@128
int v68; // esi@130
int v69; // esi@132
int v72; // esi@135
int v73; // esi@138
unsigned int v74; // esi@140
unsigned int v75; // edi@142
unsigned int v79; // esi@144
unsigned int v80; // edi@148
int v82; // eax@151
unsigned int v84; // ebx@160
int v85; // edi@162
int v86; // esi@164
int v91; // esi@167
int v94; // esi@169
int v95; // esi@171
PlayerMOB *v96; // eax@173
__int16 v97; // cx@174
__int16 v98; // cx@174
__int16 v99; // dx@177
__int16 v100; // dx@177
unsigned int v101; // esi@179
unsigned int v102; // esi@181
unsigned int v105; // esi@184
unsigned int v106; // esi@187
int v107; // esi@189
int v108; // edi@191
int v112; // esi@193
int v114; // edx@200
unsigned int v117; // eax@206
unsigned int v118; // ebx@208
int v119; // edi@210
int v120; // esi@212
int v127; // edx@218
unsigned int v131; // esi@223
int v132; // esi@225
unsigned int v133; // eax@228
unsigned int v134; // ebx@230
int v135; // edi@232
int v136; // esi@234
int v139; // eax@236
int v144; // edx@240
unsigned int v148; // esi@245
int v149; // esi@247
int v150; // ecx@250
int v152; // ecx@251
signed __int16 v154; // si@252
unsigned int v155; // esi@255
unsigned int v156; // esi@260
int v157; // esi@262
unsigned int v158; // esi@268
int v159; // esi@270
unsigned int v160; // edi@272
char *v161; // edx@274
int v162; // esi@274
unsigned int v163; // esi@276
int v164; // esi@278
__int16 v165; // di@282
unsigned int v166; // esi@283
unsigned int *v167; // edx@286
int v168; // esi@288
unsigned int *v170; // [sp-38h] [bp-19Ch]@82
int v171; // [sp-Ch] [bp-170h]@1
__int16 v174; // [sp+14h] [bp-150h]@3
Monumentum monumentum_struct; // [sp+1Ch] [bp-148h]@1
Monumentum someSortOf_NpcXPos; // [sp+4Ch] [bp-118h]@1
PlayerMOB *v177; // [sp+7Ch] [bp-E8h]@3
int v178; // [sp+98h] [bp-CCh]@206
int a5; // [sp+9Ch] [bp-C8h]@1
int v180; // [sp+A0h] [bp-C4h]@1
int a4; // [sp+A4h] [bp-C0h]@1
int v182; // [sp+A8h] [bp-BCh]@1
int v183[2]; // [sp+ACh] [bp-B8h]@1
int v184[2]; // [sp+B4h] [bp-B0h]@1
int someSortOf_SpecialAdress; // [sp+BCh] [bp-A8h]@1
int someSortOf_value0_2; // [sp+C0h] [bp-A4h]@1
int someSortOf_value0_1; // [sp+C4h] [bp-A0h]@1
int sfxID; // [sp+C8h] [bp-9Ch]@1
int v189; // [sp+DCh] [bp-88h]@1
int v190; // [sp+E4h] [bp-80h]@250
int a2a[12]; // [sp+ECh] [bp-78h]@1
int a3[12]; // [sp+11Ch] [bp-48h]@1
double height; // [sp+14Ch] [bp-18h]@1
int *v194; // [sp+15Ch] [bp-8h]@1
int v195; // [sp+160h] [bp-4h]@1
v194 = &v171;
v195 = (int)dword_406570;
memset(a3, 0, sizeof(a3));
memset(a2a, 0, sizeof(a2a));
memset(&someSortOf_NpcXPos, 0, sizeof(someSortOf_NpcXPos));
memset(&monumentum_struct, 0, sizeof(monumentum_struct));
v2 = _vbaGenerateBoundsError;
LODWORD(height) = 0;
v189 = 0;
v3 = *(_WORD *)a2;
sfxID = 0;
someSortOf_value0_1 = 0;
someSortOf_value0_2 = 0;
someSortOf_SpecialAdress = 0;
v184[0] = 0;
v184[1] = 0;
v183[0] = 0;
v183[1] = 0;
a4 = 0;
v182 = 0;
a5 = 0;
v180 = 0;
if ( v3 >= 0xC9 )
((void (__fastcall *)(void *, _DWORD))_vbaGenerateBoundsError)(this, 0);
v177 = &Player_ptr[v3];
LOWORD(v4) = 1;
v174 = PLAYER_COUNT;
LODWORD(height) = 1;
while ( (signed __int16)v4 <= v174 )
{
if ( (_WORD)v4 == *(_WORD *)a2 )
goto LABEL_293;
v5 = (signed __int16)v4;
if ( (unsigned int)(signed __int16)v4 >= 0xC9 )
v2();
if ( Player_ptr[v5].DeathState )
goto LABEL_293;
v6 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
v2();
if ( Player_ptr[v6].DeathTimer )
goto LABEL_293;
v7 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
v2();
if ( Player_ptr[v7].ForcedAnimationState )
{
v8 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
v2();
if ( Player_ptr[v8].ForcedAnimationState != 3 )
goto LABEL_293;
}
v9 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
v2();
if ( Player_ptr[v9].MountType == 2 || v177->MountType == 2 )
goto LABEL_293;
if ( word_B2D740 )
{
v10 = *(_WORD *)a2;
if ( v10 >= 0xC9 )
v2();
if ( Player_ptr[v10].BlinkTimer )
goto LABEL_293;
v11 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
v2();
if ( Player_ptr[v11].BlinkTimer )
goto LABEL_293;
}
v12 = v177;
_vbaCopyBytes(48, a2a, &v177->momentum);
v13 = v12->NPCBeingStoodOnIndex;
if ( v13 && !FreezeActive )
{
v14 = v13 + 128;
if ( (unsigned int)v14 >= 0x1409 )
v2();
a2a[10] = LODWORD(npc_or_layer_ptr[v14].momentum.speedY);
a2a[11] = HIDWORD(npc_or_layer_ptr[v14].momentum.speedY);
}
v15 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
v2();
_vbaCopyBytes(48, a3, &Player_ptr[v15].momentum);
v16 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
v2();
if ( Player_ptr[v16].NPCBeingStoodOnIndex && !FreezeActive )
{
v17 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
v2();
v18 = Player_ptr[v17].NPCBeingStoodOnIndex + 128;
if ( (unsigned int)v18 >= 0x1409 )
v2();
a3[10] = LODWORD(npc_or_layer_ptr[v18].momentum.speedY);
a3[11] = HIDWORD(npc_or_layer_ptr[v18].momentum.speedY);
}
if ( unkCollisionCheck((Momentum *)a2a, (Momentum *)a3) != -1 )
goto LABEL_293;
v19 = sub_993330(a2a, a3);
LOWORD(v20) = v19;
HIDWORD(height) = v19;
if ( (_WORD)v19 == 5 )
{
v21 = *(_WORD *)a2;
if ( v21 >= 0xC9 )
_vbaGenerateBoundsError();
if ( Player_ptr[v21].DownButtonTapped == -1 )
{
v22 = *(_WORD *)a2;
if ( v22 >= 0xC9 )
_vbaGenerateBoundsError();
v23 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
_EAX = Player_ptr;
_ECX = 97 * v22;
__asm { fld qword ptr [eax+ecx*4+0C8h]; Load Real }
_EDX = 97 * v23;
__asm
{
fcomp qword ptr [eax+edx*4+0C8h]; Compare Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( !(BYTE1(_EAX) & 0x41) )
{
v20 = 3;
LABEL_65:
HIDWORD(height) = v20;
goto LABEL_66;
}
}
v27 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
if ( Player_ptr[v27].DownButtonTapped == -1 )
{
v28 = *(_WORD *)a2;
if ( v28 >= 0xC9 )
_vbaGenerateBoundsError();
v29 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
_EAX = Player_ptr;
_ECX = 97 * v28;
__asm { fld qword ptr [eax+ecx*4+0C8h]; Load Real }
_EDX = 97 * v29;
__asm
{
fcomp qword ptr [eax+edx*4+0C8h]; Compare Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( BYTE1(_EAX) & 1 )
{
v20 = 1;
goto LABEL_65;
}
}
}
LABEL_66:
if ( word_B2D740 == -1 )
{
v33 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
if ( Player_ptr[v33].SlidingGroundPuffs == -1 )
{
LOWORD(v20) = 0;
HIDWORD(height) = 0;
HarmPlayer(a2);
}
_ESI = v177;
if ( v177->SlidingGroundPuffs == -1 )
{
LOWORD(v20) = 0;
HIDWORD(height) = 0;
HarmPlayer((unsigned int *)&height);
}
__asm
{
fld qword ptr [esi+0E0h]; Load Real
fcomp ds:dbl_4026B0 ; Compare Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( HIBYTE(_AX) & 0x41 )
v36 = 1;
else
v36 = 0;
__asm
{
fld qword ptr [esi+0E0h]; Load Real
fcomp ds:dbl_406208 ; Compare Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( HIBYTE(_AX) & 1 )
v38 = 0;
else
v38 = 1;
if ( (!(v36 & v38) || (_WORD)v20 == 1) && _ESI->TanookiStatueActive == -1 )
{
v170 = (unsigned int *)&height;
LABEL_99:
HarmPlayer(v170);
goto LABEL_100;
}
v39 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
_EAX = Player_ptr;
_EDX = 97 * v39;
__asm
{
fld qword ptr [eax+edx*4+0E0h]; Load Real
fcomp ds:dbl_4026B0 ; Compare Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( BYTE1(_EAX) & 0x41 )
v42 = 1;
else
v42 = 0;
v43 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
_EDX = Player_ptr;
_ECX = 97 * v43;
__asm
{
fld qword ptr [edx+ecx*4+0E0h]; Load Real
fcomp ds:dbl_406208 ; Compare Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( HIBYTE(_AX) & 1 )
v47 = 0;
else
v47 = 1;
if ( !(v42 & v47) || (_WORD)v20 == 3 )
{
v48 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
if ( Player_ptr[v48].TanookiStatueActive == -1 )
{
v170 = a2;
goto LABEL_99;
}
}
}
LABEL_100:
if ( v177->TanookiStatueActive == -1 )
goto LABEL_302;
v49 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
if ( Player_ptr[v49].TanookiStatueActive == -1 )
{
LABEL_302:
LOWORD(v20) = 0;
HIDWORD(height) = 0;
}
if ( (_WORD)v20 == 2 || (_WORD)v20 == 4 )
{
if ( (signed __int16)PLAYER_COUNT < 3 || unkIsConnected == -1 )
{
sfxID = 10;
playSound((int)&sfxID);
}
v158 = *(_WORD *)a2;
if ( v158 >= 0xC9 )
_vbaGenerateBoundsError();
_vbaCopyBytes(48, a2a, &Player_ptr[v158].momentum);
v159 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
v160 = *(_WORD *)a2;
if ( v160 >= 0xC9 )
_vbaGenerateBoundsError();
v161 = (char *)&Player_ptr[v159].momentum.speedX;
LODWORD(Player_ptr[v160].momentum.speedX) = *(_DWORD *)v161;
HIDWORD(Player_ptr[v160].momentum.speedX) = *((_DWORD *)v161 + 1);
v162 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
LODWORD(Player_ptr[v162].momentum.speedX) = a2a[8];
HIDWORD(Player_ptr[v162].momentum.speedX) = a2a[9];
v163 = *(_WORD *)a2;
if ( v163 >= 0xC9 )
_vbaGenerateBoundsError();
Player_ptr[v163].Unknown136 = -1;
v164 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
Player_ptr[v164].Unknown136 = -1;
goto LABEL_281;
}
if ( (_WORD)v20 == 1 )
{
if ( (signed __int16)PLAYER_COUNT < 3 || unkIsConnected == -1 )
{
sfxID = 2;
playSound((int)&sfxID);
}
v50 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
v51 = *(_WORD *)a2;
if ( v51 >= 0xC9 )
_vbaGenerateBoundsError();
v52 = *(_WORD *)a2;
if ( v52 >= 0xC9 )
_vbaGenerateBoundsError();
_ECX = Player_ptr;
_EAX = 97 * v50;
__asm { fld qword ptr [ecx+eax*4+0C8h]; Load Real }
_EDX = 97 * v51;
__asm
{
fsub qword ptr [ecx+edx*4+0D0h]; Subtract Real
fsub ds:sonic_accelarteFactor; Subtract Real
}
_EDX = 97 * v52;
__asm
{
fstp qword ptr [ecx+edx*4+0C8h]; Store Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( _EAX & 0xD )
goto LABEL_296;
sfxID = 3;
sub_9C0800(a2, &sfxID);
v57 = *(_WORD *)a2;
if ( v57 >= 0xC9 )
_vbaGenerateBoundsError();
__asm { fld flt_B2C6E8 ; Load Real }
_ECX = Player_ptr;
_EAX = 97 * v57;
__asm { fstp qword ptr [ecx+eax*4+0E8h]; Store Real and Pop }
v60 = *(_WORD *)a2;
if ( v60 >= 0xC9 )
_vbaGenerateBoundsError();
Player_ptr[v60].UpwardJumpingForce = Jumpheight_JumpOnOtherPlayer;
v61 = *(_WORD *)a2;
if ( v61 >= 0xC9 )
_vbaGenerateBoundsError();
v62 = v177;
if ( Player_ptr[v61].Identity == 2 )
{
v63 = v177->UpwardJumpingForce;
v64 = __OFADD__(3, v63);
v65 = v63 + 3;
if ( v64 )
goto LABEL_297;
v177->UpwardJumpingForce = v65;
}
if ( v62->IsSpinjumping == -1 )
{
v66 = v62->UpwardJumpingForce;
v64 = __OFSUB__(v66, 6);
v67 = v66 - 6;
if ( v64 )
goto LABEL_297;
v62->UpwardJumpingForce = v67;
}
v68 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
Player_ptr[v68].UpwardJumpingForce = 0;
v69 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
_EAX = Player_ptr;
_EDX = 97 * v69;
__asm
{
fld qword ptr [eax+edx*4+0E8h]; Load Real
fcomp ds:dbl_401320 ; Compare Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( BYTE1(_EAX) & 0x41 )
{
v72 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
LODWORD(Player_ptr[v72].momentum.speedY) = -1717986918;
HIDWORD(Player_ptr[v72].momentum.speedY) = 1069128089;
}
v73 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
Player_ptr[v73].JumpButtonHeld = 0;
a5 = 0;
v74 = *(_WORD *)a2;
v180 = 0;
a4 = 0;
v182 = 0;
if ( v74 >= 0xC9 )
_vbaGenerateBoundsError();
v75 = *(_WORD *)a2;
if ( v75 >= 0xC9 )
_vbaGenerateBoundsError();
_ECX = Player_ptr;
_EDX = 97 * v75;
__asm { fld qword ptr [ecx+edx*4+0D0h]; Load Real }
_EAX = 97 * v74;
__asm { fadd qword ptr [ecx+eax*4+0C8h]; Add Real }
v79 = *(_WORD *)a2;
__asm
{
fsub ds:dbl_402690 ; Subtract Real
fstp qword ptr [ebp+var_B8]; Store Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( _EAX & 0xD )
goto LABEL_296;
if ( v79 >= 0xC9 )
{
_vbaGenerateBoundsError();
JUMPOUT(*(int *)loc_9CB7FB);
}
v80 = *(_WORD *)a2;
if ( v80 >= 0xC9 )
{
_vbaGenerateBoundsError();
JUMPOUT(*(int *)loc_9CB815);
}
_EDX = 97 * v80;
v82 = 96 * v79;
__asm { fld qword ptr [ecx+edx*4+0D8h]; Load Real }
if ( useSaveFDiv )
v82 = j__adj_fdiv_m64(SLODWORD(dbl_4012D8), SHIDWORD(dbl_4012D8));
else
__asm { fdiv ds:dbl_4012D8 ; Divide Real }
_EAX = v79 + v82;
__asm
{
fadd qword ptr [ecx+eax*4+0C0h]; Add Real
fsub ds:dbl_402690 ; Subtract Real
fstp qword ptr [ebp+var_B0]; Store Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( _EAX & 0xD )
goto LABEL_296;
createMomentumStruct(
(Momentum *)&someSortOf_NpcXPos,
(double *)v184,
(double *)v183,
(double *)&a4,
(double *)&a5);
someSortOf_value0_2 = 0;
someSortOf_value0_1 = 0;
someSortOf_SpecialAdress = 1065353216;
sfxID = 75;
runEffect(
&sfxID,
(Momentum *)&someSortOf_NpcXPos,
(float *)&someSortOf_SpecialAdress,
&someSortOf_value0_1,
(WORD *)&someSortOf_value0_2);
goto LABEL_281;
}
if ( (_WORD)v20 == 3 )
{
if ( (signed __int16)PLAYER_COUNT < 3 || unkIsConnected == -1 )
{
sfxID = 2;
playSound((int)&sfxID);
}
v84 = *(_WORD *)a2;
if ( v84 >= 0xC9 )
_vbaGenerateBoundsError();
v85 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
v86 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
_ECX = Player_ptr;
_EDX = 97 * v84;
__asm { fld qword ptr [ecx+edx*4+0C8h]; Load Real }
_EAX = 97 * v85;
__asm
{
fsub qword ptr [ecx+eax*4+0D0h]; Subtract Real
fsub ds:sonic_accelarteFactor; Subtract Real
}
_EDX = 97 * v86;
__asm
{
fstp qword ptr [ecx+edx*4+0C8h]; Store Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( _EAX & 0xD )
goto LABEL_296;
sfxID = 3;
sub_9C0800(&height, &sfxID);
v91 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
__asm { fld flt_B2C6E8 ; Load Real }
_EAX = Player_ptr;
_EDX = 97 * v91;
__asm { fstp qword ptr [eax+edx*4+0E8h]; Store Real and Pop }
v94 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
Player_ptr[v94].UpwardJumpingForce = Jumpheight_JumpOnOtherPlayer;
v95 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
v96 = v177;
if ( Player_ptr[v95].Identity == 2 )
{
v97 = v177->UpwardJumpingForce;
v64 = __OFADD__(3, v97);
v98 = v97 + 3;
if ( v64 )
goto LABEL_297;
v177->UpwardJumpingForce = v98;
}
if ( v96->IsSpinjumping == -1 )
{
v99 = v96->UpwardJumpingForce;
v64 = __OFSUB__(v99, 6);
v100 = v99 - 6;
if ( v64 )
goto LABEL_297;
v96->UpwardJumpingForce = v100;
}
v101 = *(_WORD *)a2;
if ( v101 >= 0xC9 )
_vbaGenerateBoundsError();
Player_ptr[v101].UpwardJumpingForce = 0;
v102 = *(_WORD *)a2;
if ( v102 >= 0xC9 )
_vbaGenerateBoundsError();
_EAX = Player_ptr;
_EDX = 97 * v102;
__asm
{
fld qword ptr [eax+edx*4+0E8h]; Load Real
fcomp ds:dbl_401320 ; Compare Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( BYTE1(_EAX) & 0x41 )
{
v105 = *(_WORD *)a2;
if ( v105 >= 0xC9 )
_vbaGenerateBoundsError();
LODWORD(Player_ptr[v105].momentum.speedY) = -1717986918;
HIDWORD(Player_ptr[v105].momentum.speedY) = 1069128089;
}
v106 = *(_WORD *)a2;
if ( v106 >= 0xC9 )
_vbaGenerateBoundsError();
Player_ptr[v106].JumpButtonHeld = 0;
a5 = 0;
v107 = SLOWORD(height);
v180 = 0;
a4 = 0;
v182 = 0;
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
v108 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
_ECX = Player_ptr;
_EAX = 97 * v108;
__asm { fld qword ptr [ecx+eax*4+0D0h]; Load Real }
_EDX = 97 * v107;
v112 = SLOWORD(height);
__asm
{
fadd qword ptr [ecx+edx*4+0C8h]; Add Real
fsub ds:dbl_402690 ; Subtract Real
fstp qword ptr [ebp+var_B8]; Store Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( _EAX & 0xD )
goto LABEL_296;
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
{
_vbaGenerateBoundsError();
JUMPOUT(*(int *)loc_9CBBA8);
}
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
{
_vbaGenerateBoundsError();
JUMPOUT(*(int *)loc_9CBBC0);
}
_EAX = 97 * SLOWORD(height);
v114 = 96 * SLOWORD(height);
__asm { fld qword ptr [ecx+eax*4+0D8h]; Load Real }
if ( useSaveFDiv )
j__adj_fdiv_m64(SLODWORD(dbl_4012D8), SHIDWORD(dbl_4012D8));
else
__asm { fdiv ds:dbl_4012D8 ; Divide Real }
_EDX = v112 + v114;
__asm
{
fadd qword ptr [ecx+edx*4+0C0h]; Add Real
fsub ds:dbl_402690 ; Subtract Real
fstp qword ptr [ebp+var_B0]; Store Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( _AX & 0xD )
LABEL_296:
JUMPOUT(loc_40BA6C);
createMomentumStruct((Momentum *)&monumentum_struct, (double *)v184, (double *)v183, (double *)&a4, (double *)&a5);
someSortOf_value0_2 = 0;
someSortOf_value0_1 = 0;
someSortOf_SpecialAdress = 1065353216;
sfxID = 75;
runEffect(
&sfxID,
(Momentum *)&monumentum_struct,
(float *)&someSortOf_SpecialAdress,
&someSortOf_value0_1,
(WORD *)&someSortOf_value0_2);
goto LABEL_281;
}
if ( (_WORD)v20 == 5 )
{
v117 = *(_WORD *)a2;
v178 = *(_WORD *)a2;
if ( v117 >= 0xC9 )
_vbaGenerateBoundsError();
v118 = *(_WORD *)a2;
if ( v118 >= 0xC9 )
_vbaGenerateBoundsError();
v119 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
v120 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
_ECX = Player_ptr;
_EAX = 97 * v118;
__asm { fld qword ptr [ecx+eax*4+0D8h]; Load Real }
if ( useSaveFDiv )
j__adj_fdiv_m64(SLODWORD(dbl_4012D8), SHIDWORD(dbl_4012D8));
else
__asm { fdiv ds:dbl_4012D8 ; Divide Real }
_EDX = 97 * v178;
__asm
{
fadd qword ptr [ecx+edx*4+0C0h]; Add Real
fnstsw ax ; Store Status Word (no wait)
}
if ( _AX & 0xD )
goto LABEL_296;
_vbaFpR8();
_EAX = Player_ptr;
__asm { fstp [ebp+var_15C] ; Store Real and Pop }
_ECX = 97 * v120;
v127 = 96 * v119;
__asm { fld qword ptr [eax+ecx*4+0D8h]; Load Real }
if ( useSaveFDiv )
_EAX = (PlayerMOB *)j__adj_fdiv_m64(SLODWORD(dbl_4012D8), SHIDWORD(dbl_4012D8));
else
__asm { fdiv ds:dbl_4012D8 ; Divide Real }
_EDX = v119 + v127;
__asm
{
fadd qword ptr [eax+edx*4+0C0h]; Add Real
fnstsw ax ; Store Status Word (no wait)
}
if ( _AX & 0xD )
goto LABEL_296;
_vbaFpR8();
__asm
{
fcomp [ebp+var_15C] ; Compare Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( HIBYTE(_AX) & 1 )
{
v131 = *(_WORD *)a2;
if ( v131 >= 0xC9 )
_vbaGenerateBoundsError();
LODWORD(Player_ptr[v131].XMomentumPush) = 1065353216;
v132 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
LODWORD(Player_ptr[v132].XMomentumPush) = -1082130432;
}
else
{
v133 = *(_WORD *)a2;
v178 = *(_WORD *)a2;
if ( v133 >= 0xC9 )
_vbaGenerateBoundsError();
v134 = *(_WORD *)a2;
if ( v134 >= 0xC9 )
_vbaGenerateBoundsError();
v135 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
v136 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
_ECX = Player_ptr;
_EDX = 97 * v134;
v139 = v178;
__asm { fld qword ptr [ecx+edx*4+0D8h]; Load Real }
if ( useSaveFDiv )
v139 = j__adj_fdiv_m64(SLODWORD(dbl_4012D8), SHIDWORD(dbl_4012D8));
else
__asm { fdiv ds:dbl_4012D8 ; Divide Real }
_EDX = 97 * v139;
__asm
{
fadd qword ptr [ecx+edx*4+0C0h]; Add Real
fnstsw ax ; Store Status Word (no wait)
}
if ( _AX & 0xD )
goto LABEL_296;
_vbaFpR8();
_EAX = Player_ptr;
__asm { fstp [ebp+var_164] ; Store Real and Pop }
_ECX = 97 * v136;
v144 = 96 * v135;
__asm { fld qword ptr [eax+ecx*4+0D8h]; Load Real }
if ( useSaveFDiv )
_EAX = (PlayerMOB *)j__adj_fdiv_m64(SLODWORD(dbl_4012D8), SHIDWORD(dbl_4012D8));
else
__asm { fdiv ds:dbl_4012D8 ; Divide Real }
_EDX = v135 + v144;
__asm
{
fadd qword ptr [eax+edx*4+0C0h]; Add Real
fnstsw ax ; Store Status Word (no wait)
}
if ( _AX & 0xD )
goto LABEL_296;
_vbaFpR8();
__asm
{
fcomp [ebp+var_164] ; Compare Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( HIBYTE(_AX) & 0x41 )
{
v190 = -2147352572;
v189 = 10;
rtcRandomNext(&v189);
__asm
{
fadd st, st ; Add Real
fnstsw ax ; Store Status Word (no wait)
}
if ( _AX & 0xD )
goto LABEL_296;
_vbaFPInt(v150);
_vbaFpR4(v152);
__asm
{
fcomp ds:flt_401304 ; Compare Real and Pop
fnstsw ax ; Store Status Word (no wait)
}
if ( HIBYTE(_AX) & 0x40 )
v154 = 1;
else
v154 = 0;
_vbaFreeVar(&v189);
if ( !v154 )
{
v156 = *(_WORD *)a2;
if ( v156 >= 0xC9 )
_vbaGenerateBoundsError();
LODWORD(Player_ptr[v156].XMomentumPush) = 1065353216;
v157 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
LODWORD(Player_ptr[v157].XMomentumPush) = -1082130432;
goto LABEL_281;
}
v155 = *(_WORD *)a2;
if ( v155 >= 0xC9 )
_vbaGenerateBoundsError();
LODWORD(Player_ptr[v155].XMomentumPush) = -1082130432;
v149 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
}
else
{
v148 = *(_WORD *)a2;
if ( v148 >= 0xC9 )
_vbaGenerateBoundsError();
LODWORD(Player_ptr[v148].XMomentumPush) = -1082130432;
v149 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
{
_vbaGenerateBoundsError();
JUMPOUT(*(int *)loc_9CBF65);
}
}
LODWORD(Player_ptr[v149].XMomentumPush) = 1065353216;
}
}
LABEL_281:
if ( word_B2D740 != -1 )
goto LABEL_293;
v165 = WORD2(height);
if ( WORD2(height) == 1 )
{
v166 = *(_WORD *)a2;
if ( v166 >= 0xC9 )
_vbaGenerateBoundsError();
if ( Player_ptr[v166].MountType == 1 )
{
v167 = (unsigned int *)&height;
LABEL_292:
HarmPlayer(v167);
goto LABEL_293;
}
}
if ( v165 == 3 )
{
v168 = SLOWORD(height);
if ( (unsigned int)SLOWORD(height) >= 0xC9 )
_vbaGenerateBoundsError();
if ( Player_ptr[v168].MountType == 1 )
{
v167 = a2;
goto LABEL_292;
}
}
LABEL_293:
v2 = _vbaGenerateBoundsError;
v4 = (unsigned __int16)(LOWORD(height) + 1);
if ( __OFADD__(LOWORD(height), 1) )
{
LABEL_297:
_vbaErrorOverflow();
JUMPOUT(*(int *)algn_9CC2AA);
}
LODWORD(height) = (unsigned __int16)(LOWORD(height) + 1);
}
return v4;
}