@@ -1982,10 +1982,14 @@ void FUN_8001ef50(int param_1,short *param_2,short *param_3,short *param_4)
19821982 // collision flag
19831983 sVar1 = param_2 [3 ];
19841984
1985+ // Normal Vector
19851986 uVar6 = * (undefined4 * )(param_2 + 6 );
19861987 iVar7 = * (int * )(param_2 + 8 );
1988+
19871989 * (short * )(param_1 + 0x3c ) = * (short * )(param_1 + 0x3c ) + 1 ;
19881990 * (short * )(param_1 + 0x52 ) = sVar1 ;
1991+
1992+ // Normal Vector
19891993 * (undefined4 * )(param_1 + 0x54 ) = uVar6 ;
19901994 * (int * )(param_1 + 0x58 ) = iVar7 ;
19911995
@@ -1998,8 +2002,11 @@ void FUN_8001ef50(int param_1,short *param_2,short *param_3,short *param_4)
19982002
19992003 gte_ldR13R21 (iVar11 * 0x10000 | uVar8 & 0xffff );
20002004 gte_ldR22R23 (uVar12 & 0xffff | iVar14 * 0x10000 );
2005+
2006+ // Normal Vector
20012007 gte_ldVXY0 (param_1 + 0x54 );
20022008 gte_ldVZ0 (iVar7 );
2009+
20032010 gte_mvmva_b (0 ,0 ,0 ,3 ,0 );
20042011 iVar5 = gte_stMAC2 ();
20052012 iVar2 = gte_stMAC1 ();
@@ -2070,6 +2077,7 @@ void FUN_8001ef50(int param_1,short *param_2,short *param_3,short *param_4)
20702077 iVar2 = (int )* param_2 ;
20712078
20722079 // flag == 1
2080+ // if normalVec points X
20732081 if (* (short * )(param_1 + 0x52 ) == 1 )
20742082 {
20752083 // X length vectors
@@ -2211,6 +2219,8 @@ void FUN_8001ef50(int param_1,short *param_2,short *param_3,short *param_4)
22112219 * (undefined4 * )(param_1 + 0xd0 ) = uVar6 ;
22122220 * (undefined4 * )(param_1 + 0xd4 ) = uVar4 ;
22132221 * (short * )(param_1 + 0x3e ) = * (short * )(param_1 + 0x3e ) + 1 ;
2222+
2223+ // Record Position (x2)
22142224 * (undefined4 * )(param_1 + 0x68 ) = * (undefined4 * )(param_1 + 0x4c );
22152225 * (undefined4 * )(param_1 + 0x1c ) = * (undefined4 * )(param_1 + 0x4c );
22162226 * (undefined2 * )(param_1 + 0x6c ) = * (undefined2 * )(param_1 + 0x50 );
@@ -2307,17 +2317,32 @@ void FUN_8001f2dc(int param_1,undefined4 *param_2,short *param_3,short *param_4)
23072317 if (iVar6 < 0 ) iVar6 = - iVar6 ;
23082318 if (iVar4 < 0 ) iVar4 = - iVar4 ;
23092319
2320+ // normalVec points X
23102321 sVar2 = 1 ;
2311- if (iVar5 - iVar6 < 0 ) {
2322+
2323+ // if Y axis > X axis
2324+ if (iVar5 - iVar6 < 0 )
2325+ {
2326+ // normalVec points X
23122327 sVar2 = 1 ;
2313- if (-1 < iVar6 - iVar4 ) {
2328+
2329+ // Y axis > Z axis
2330+ if (-1 < iVar6 - iVar4 )
2331+ {
2332+ // normalVec points Y
23142333 sVar2 = 3 ;
23152334 }
23162335 }
2317- else if (-1 < iVar5 - iVar4 ) {
2336+
2337+ // (else means Y < X) &&
2338+ // if X > Z
2339+ else if (-1 < iVar5 - iVar4 )
2340+ {
2341+ // normalVec points Z
23182342 sVar2 = 2 ;
23192343 }
23202344
2345+ // BspSearchVertex Flags (1,2,3)
23212346 * (short * )((int )param_2 + 6 ) = sVar2 ;
23222347
23232348 return ;
@@ -2643,6 +2668,11 @@ undefined4 FUN_8001f928(undefined4 *param_1,undefined4 *param_2,undefined4 *para
26432668 int iVar10 ;
26442669
26452670 puVar2 = param_3 ;
2671+
2672+ // rearrange algorithm based on
2673+ // the direction the normalVec faces
2674+
2675+ // NormalVec Direction #3
26462676 if (* (short * )((int )param_1 + 6 ) == 3 ) {
26472677 iVar3 = (int )* (short * )(param_2 + 1 );
26482678 iVar5 = * (short * )(param_3 + 1 ) - iVar3 ;
@@ -2670,6 +2700,8 @@ undefined4 FUN_8001f928(undefined4 *param_1,undefined4 *param_2,undefined4 *para
26702700 }
26712701 else {
26722702 iVar3 = (int )* (short * )param_2 ;
2703+
2704+ // NormalVec Direction #1
26732705 if (* (short * )((int )param_1 + 6 ) == 1 ) {
26742706 iVar5 = * (short * )param_3 - iVar3 ;
26752707 iVar9 = * (short * )param_4 - iVar3 ;
@@ -2695,6 +2727,9 @@ undefined4 FUN_8001f928(undefined4 *param_1,undefined4 *param_2,undefined4 *para
26952727 iVar4 = * (short * )((int )param_1 + 0x12 ) - iVar4 ;
26962728 }
26972729 else {
2730+
2731+ // NormalVec Direction #2
2732+
26982733 iVar3 = (int )* (short * )((int )param_2 + 2 );
26992734 iVar5 = * (short * )((int )param_3 + 2 ) - iVar3 ;
27002735 iVar9 = * (short * )((int )param_4 + 2 ) - iVar3 ;
@@ -3327,7 +3362,9 @@ void FUN_80020410(undefined4 param_1,int param_2)
33273362 // quadblock, triangleID, search data
33283363 FUN_80020334 (0 ,0 ,& DAT_1f800108 );
33293364
3330- // loop executes 0xF times
3365+ // loop 16 times (0xF -> 0)
3366+ // Check every 1/16th distance
3367+ // between CurrFrame and NextFrame
33313368 iVar14 = 0xf ;
33323369 do
33333370 {
@@ -3342,6 +3379,9 @@ void FUN_80020410(undefined4 param_1,int param_2)
33423379 DAT_1f800148 = 0 ;
33433380 DAT_1f80018c = 0x1000 ;
33443381
3382+ // 1f800118: vec3 kartPosCurrFrame
3383+ // 1f800108: vec3 kartPosNextFrame
3384+
33453385 // kartCenter = vec3_originToCenter + driverPos (origin of model is bottom-center)
33463386 sVar9 = * (short * )(param_2 + 0x94 ) + (short )((uint )* (undefined4 * )(param_2 + 0x2d4 ) >> 8 );
33473387 sVar10 = * (short * )(param_2 + 0x98 ) + (short )((uint )* (undefined4 * )(param_2 + 0x2d8 ) >> 8 );
@@ -3443,7 +3483,8 @@ void FUN_80020410(undefined4 param_1,int param_2)
34433483
34443484 if (0 < DAT_1f80018c )
34453485 {
3446- // increase position by velocity
3486+ // increase position by PARTIAL velocity,
3487+ // slowly increment one each frame of 16 checks
34473488 * (int * )(param_2 + 0x2d4 ) = * (int * )(param_2 + 0x2d4 ) + (iVar5 * DAT_1f80018c >> 0xc );
34483489 * (int * )(param_2 + 0x2d8 ) = * (int * )(param_2 + 0x2d8 ) + (iVar6 * DAT_1f80018c >> 0xc );
34493490 * (int * )(param_2 + 0x2dc ) = * (int * )(param_2 + 0x2dc ) + (iVar7 * DAT_1f80018c >> 0xc );
0 commit comments