mirror of
https://codeberg.org/KeybadeBlox/JSRF-Decompilation.git
synced 2026-02-20 02:07:02 +03:00
It appears to be all C code (especially the non-C++ parts of the C runtime, of course), so we'll compile it as such.
66 lines
1.4 KiB
C++
66 lines
1.4 KiB
C++
/* JSRF Decompilation: Smilebit/MMatrix.cpp
|
|
Smilebit's stack-based matrix math library.
|
|
*/
|
|
|
|
#pragma code_seg("MMATRIX")
|
|
#pragma bss_seg (".data" )
|
|
|
|
|
|
#include "../Std.hpp"
|
|
#include "../XDK/Win32.h"
|
|
#include "MMatrix.hpp"
|
|
|
|
|
|
// 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;
|
|
}
|