Complete delink workflow; separate from decomp

We can now create a fresh Ghidra project, import the JSRF executable
into it, import symbols into it, delink object files from it, and then
decompile with objdiff.  Just needs some documentation.
This commit is contained in:
KeybadeBlox 2025-12-16 22:30:49 -05:00
parent 87c56f01d6
commit 1a48d4323e
17 changed files with 1178 additions and 8 deletions

56
decompile/src/MMatrix.cpp Normal file
View file

@ -0,0 +1,56 @@
#pragma code_seg("MMATRIX")
// Address: 0x00264C04
Mat4 * * g_matricesHead;
// Address: 0x00264C08
Mat4 * g_matrices[3];
// Address: 0x001BB690
// Matching: yes
HRESULT __stdcall initMatrices(unsigned const count) {
/* Initialize the matrix stack with the given number of matrices.
The requested number of matrices is rounded up to the nearest multiple of two.
The initialized matrices are accessible through g_matrices.
*/
// Allocate matrices
unsigned i = (count + 1) & 0xFFFFFFFE; // Round up
Mat4 * const mats = (Mat4 *)VirtualAlloc(
NULL,
(i + 2) * sizeof *mats,
MEM_COMMIT|MEM_RESERVE,
PAGE_READWRITE
);
if (mats != NULL) {
Mat4 * mat = mats + 2;
// Initialize each matrix to identity
if (i > 0) for (; i > 0; i--) {
float * entry = (float *)mat;
for (unsigned j = 0; j < sizeof *mat/sizeof *entry; j++) {
*entry = 0;
entry += 1;
}
(*mat)[3].w = 1;
(*mat)[2].z = 1;
(*mat)[1].y = 1;
(*mat)[0].x = 1;
mat++;
}
// Assign to g_matrices for later access
mat = mats + 2;
g_matrices[1] = mats;
g_matrices[2] = mat;
g_matrices[0] = mats;
g_matricesHead = g_matrices + 2;
return ERROR_SUCCESS;
}
return E_OUTOFMEMORY;
}