From 73ba320831997d38b4d6431df3805c62b76400e7 Mon Sep 17 00:00:00 2001 From: MegaMech Date: Fri, 24 Jan 2025 19:47:37 -0700 Subject: Fix matrix stack heap corruption (#166) * Fix matrix stack heap corruption * Fix matrix overflow bug --- src/engine/Matrix.cpp | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) (limited to 'src/engine/Matrix.cpp') diff --git a/src/engine/Matrix.cpp b/src/engine/Matrix.cpp index 7b8c3b1fb..354389db9 100644 --- a/src/engine/Matrix.cpp +++ b/src/engine/Matrix.cpp @@ -34,29 +34,30 @@ void AddMatrixFixed(std::vector& stack, s32 flags) { } // Used in func_80095BD0 -void SetTextMatrix(f32 arg1, f32 arg2, f32 arg3, f32 arg4) { - Mat4 mtx; - mtx[0][0] = arg3; - mtx[0][1] = 0.0f; - mtx[0][2] = 0.0f; - mtx[0][3] = 0.0f; - mtx[1][0] = 0.0f; - mtx[1][1] = arg4; - mtx[1][2] = 0.0f; - mtx[1][3] = 0.0f; - mtx[2][0] = 0.0f; - mtx[2][1] = 0.0f; - mtx[2][2] = 1.0f; - mtx[2][3] = 0.0f; - mtx[3][0] = arg1; - mtx[3][1] = arg2; - mtx[3][2] = 0.0f; - mtx[3][3] = 1.0f; - - AddMatrix(gWorldInstance.Mtx.Effects, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); +Mtx* SetTextMatrix(f32 arg1, f32 arg2, f32 arg3, f32 arg4) { + Mat4 matrix; + matrix[0][0] = arg3; + matrix[0][1] = 0.0f; + matrix[0][2] = 0.0f; + matrix[0][3] = 0.0f; + matrix[1][0] = 0.0f; + matrix[1][1] = arg4; + matrix[1][2] = 0.0f; + matrix[1][3] = 0.0f; + matrix[2][0] = 0.0f; + matrix[2][1] = 0.0f; + matrix[2][2] = 1.0f; + matrix[2][3] = 0.0f; + matrix[3][0] = arg1; + matrix[3][1] = arg2; + matrix[3][2] = 0.0f; + matrix[3][3] = 1.0f; + Mtx* mtx = GetMatrix(gWorldInstance.Mtx.Effects); + guMtxF2L(matrix, mtx); + + return mtx; } - // API extern "C" { -- cgit v1.2.3