Skip to content

Commit 1a7b523

Browse files
committed
two more functions
1 parent 26dbbec commit 1a7b523

File tree

6 files changed

+58
-14
lines changed

6 files changed

+58
-14
lines changed

include/ctr/coll.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,6 @@ typedef struct CollDCache
104104
#define DCACHE_COLL (*(CollDCache*) 0x1f800000)
105105

106106
void COLL_ProjectPointToEdge(SVec3* out, const SVec3* v1, const SVec3* v2, const SVec3* point);
107-
void COLL_CalculateTrianglePlane(const CollDCache* cache, CollVertex* v1, const CollVertex* v2, const CollVertex* v3);
108-
void COLL_LoadVerticeData(CollDCache* cache);
107+
void COLL_LoadQuadblockData_LowLOD(CollDCache* cache, Quadblock* quadblock);
108+
void COLL_LoadQuadblockData_HighLOD(CollDCache* cache, Quadblock* quadblock);
109109
s32 COLL_BarycentricTest(TestVertex* t, const CollVertex* v1, const CollVertex* v2, const CollVertex* v3);

include/ctr/lev.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ typedef struct Quadblock
6969
u8 checkpointIndex; // 0x3E
7070
u8 triNormalVecBitshift; // 0x3F
7171
u32 offLowTexture; // 0x40
72-
VisibleSet visibleSet; // 0x44
73-
u16 triNormalVecDividend[NUM_VERTICES_QUADBLOCK + 1]; // 0x48
72+
VisibleSet* visibleSet; // 0x44
73+
s16 triNormalVecDividend[NUM_VERTICES_QUADBLOCK + 1]; // 0x48
7474
} Quadblock;
7575

7676
typedef struct BSPBranch

include/ctr/nd.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ u32 ND_RNG_Random(RNGSeed* seed);
3030

3131
/* COLL */
3232
void ND_COLL_ProjectPointToEdge(SVec3* out, const SVec3* v1, const SVec3* v2, const SVec3* point);
33+
void ND_COLL_LoadQuadblockData_LowLOD(CollDCache* cache, Quadblock* quadblock);
34+
void ND_COLL_LoadQuadblockData_HighLOD(CollDCache* cache, Quadblock* quadblock);
3335
void ND_COLL_CalculateTrianglePlane(const CollDCache* cache, CollVertex* v1, const CollVertex* v2, const CollVertex* v3);
3436
void ND_COLL_LoadVerticeData(CollDCache* cache);
3537
s32 ND_COLL_BarycentricTest(TestVertex* t, const CollVertex* v1, const CollVertex* v2, const CollVertex* v3);

rewrite/src/exe/coll.c

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ void COLL_ProjectPointToEdge(SVec3* out, const SVec3* v1, const SVec3* v2, const
4545
}
4646

4747
/* Address: 0x8001f2dc */
48-
void COLL_CalculateTrianglePlane(const CollDCache* cache, CollVertex* v1, const CollVertex* v2, const CollVertex* v3)
48+
static void COLL_CalculateTrianglePlane(const CollDCache* cache, CollVertex* v1, const CollVertex* v2, const CollVertex* v3)
4949
{
5050
#ifdef TEST_COLL_IMPL
5151
CollVertex input = *v1;
@@ -70,14 +70,10 @@ void COLL_CalculateTrianglePlane(const CollDCache* cache, CollVertex* v1, const
7070
else if (magnitude == absNormal.y) { v1->normalDominantAxis = AXIS_Y; }
7171
else { v1->normalDominantAxis = AXIS_Z; }
7272
TEST_COLL_CalculateTrianglePlane(cache, &input, v2, v3, v1);
73-
/* This is a hand written assembly function that breaks the ABI,
74-
and some callers expect the argument registers to be untouched */
75-
__asm__ volatile("move $a0, %0" : : "r"((u32)cache));
76-
__asm__ volatile("move $t9, %0" : : "r"((u32)cache->currQuadblock));
7773
}
7874

7975
/* Address: 0x8001f7f0 */
80-
void COLL_LoadVerticeData(CollDCache* cache)
76+
static void COLL_LoadVerticeData(CollDCache* cache)
8177
{
8278
const Quadblock* quadblock = cache->currQuadblock;
8379
const Vertex* vertices = cache->meshInfo->vertices;
@@ -91,6 +87,52 @@ void COLL_LoadVerticeData(CollDCache* cache)
9187
cache->quadblockThirdIndex = quadblock->index[2];
9288
cache->quadblockFourthIndex = quadblock->index[3];
9389
TEST_COLL_LoadVerticeData(cache);
90+
}
91+
92+
/* Address: 0x8001f67c */
93+
void COLL_LoadQuadblockData_LowLOD(CollDCache* cache, Quadblock* quadblock)
94+
{
95+
COLL_LoadVerticeData(cache);
96+
cache->lodShift = 2;
97+
cache->normalBitshift = quadblock->triNormalVecBitshift;
98+
if (cache->quadblockThirdIndex != cache->quadblockFourthIndex)
99+
{
100+
cache->normalScale = quadblock->triNormalVecDividend[9];
101+
COLL_CalculateTrianglePlane(cache, &cache->quadblockCollVertices[1], &cache->quadblockCollVertices[3], &cache->quadblockCollVertices[2]);
102+
}
103+
cache->normalScale = quadblock->triNormalVecDividend[8];
104+
COLL_CalculateTrianglePlane(cache, &cache->quadblockCollVertices[0], &cache->quadblockCollVertices[1], &cache->quadblockCollVertices[2]);
105+
/* This is a hand written assembly function that breaks the ABI,
106+
and some callers expect the argument registers to be untouched */
107+
__asm__ volatile("move $a0, %0" : : "r"((u32)cache));
108+
__asm__ volatile("move $t9, %0" : : "r"((u32)quadblock));
109+
}
110+
111+
/* Address: 0x8001f6f0 */
112+
void COLL_LoadQuadblockData_HighLOD(CollDCache* cache, Quadblock* quadblock)
113+
{
114+
COLL_LoadVerticeData(cache);
115+
cache->lodShift = 0;
116+
cache->normalBitshift = quadblock->triNormalVecBitshift;
117+
if (cache->quadblockThirdIndex != cache->quadblockFourthIndex)
118+
{
119+
cache->normalScale = quadblock->triNormalVecDividend[4];
120+
COLL_CalculateTrianglePlane(cache, &cache->quadblockCollVertices[8], &cache->quadblockCollVertices[6], &cache->quadblockCollVertices[7]);
121+
cache->normalScale = quadblock->triNormalVecDividend[5];
122+
COLL_CalculateTrianglePlane(cache, &cache->quadblockCollVertices[7], &cache->quadblockCollVertices[3], &cache->quadblockCollVertices[8]);
123+
cache->normalScale = quadblock->triNormalVecDividend[6];
124+
COLL_CalculateTrianglePlane(cache, &cache->quadblockCollVertices[1], &cache->quadblockCollVertices[7], &cache->quadblockCollVertices[6]);
125+
cache->normalScale = quadblock->triNormalVecDividend[7];
126+
COLL_CalculateTrianglePlane(cache, &cache->quadblockCollVertices[2], &cache->quadblockCollVertices[6], &cache->quadblockCollVertices[8]);
127+
}
128+
cache->normalScale = quadblock->triNormalVecDividend[0];
129+
COLL_CalculateTrianglePlane(cache, &cache->quadblockCollVertices[0], &cache->quadblockCollVertices[4], &cache->quadblockCollVertices[5]);
130+
cache->normalScale = quadblock->triNormalVecDividend[1];
131+
COLL_CalculateTrianglePlane(cache, &cache->quadblockCollVertices[4], &cache->quadblockCollVertices[6], &cache->quadblockCollVertices[5]);
132+
cache->normalScale = quadblock->triNormalVecDividend[2];
133+
COLL_CalculateTrianglePlane(cache, &cache->quadblockCollVertices[6], &cache->quadblockCollVertices[4], &cache->quadblockCollVertices[1]);
134+
cache->normalScale = quadblock->triNormalVecDividend[3];
135+
COLL_CalculateTrianglePlane(cache, &cache->quadblockCollVertices[5], &cache->quadblockCollVertices[6], &cache->quadblockCollVertices[2]);
94136
/* This is a hand written assembly function that breaks the ABI,
95137
and some callers expect the argument registers to be untouched */
96138
__asm__ volatile("move $a0, %0" : : "r"((u32)cache));

rewrite/src/tests/test.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ FunctionPatch s_functions[] =
3131
TEST_FUNC(RNG_Random),
3232
TEST_FUNC(COLL_ProjectPointToEdge),
3333
TEST_FUNC(COLL_BarycentricTest),
34-
TEST_FUNC(COLL_LoadVerticeData),
35-
TEST_FUNC(COLL_CalculateTrianglePlane),
34+
TEST_FUNC(COLL_LoadQuadblockData_LowLOD),
35+
TEST_FUNC(COLL_LoadQuadblockData_HighLOD),
3636
};
3737

3838
void LoadTestPatches()

symbols/gcc-syms-rewrite.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ ND_COLL_FIXED_TRIANGL_TestPoint = 0x8001ef50;
6666
ND_COLL_CalculateTrianglePlane = 0x8001f2dc;
6767
ND_COLL_FIXED_QUADBLK_TestTriangles = 0x8001f41c;
6868
ND_COLL_FIXED_BSPLEAF_TestQuadblocks = 0x8001f5f0;
69-
ND_COLL_FIXED_QUADBLK_GetNormVecs_LoLOD = 0x8001f67c;
70-
ND_COLL_FIXED_QUADBLK_GetNormVecs_HiLOD = 0x8001f6f0;
69+
ND_COLL_LoadQuadblockData_LowLOD = 0x8001f67c;
70+
ND_COLL_LoadQuadblockData_HighLOD = 0x8001f6f0;
7171
ND_COLL_LoadVerticeData = 0x8001f7f0;
7272
ND_COLL_BarycentricTest = 0x8001f928;
7373
ND_COLL_MOVED_TRIANGL_TestPoint = 0x8001fc40;

0 commit comments

Comments
 (0)