summaryrefslogtreecommitdiff
path: root/src/menu_items.c
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2025-01-24 19:47:37 -0700
committerGitHub <noreply@github.com>2025-01-24 19:47:37 -0700
commit73ba320831997d38b4d6431df3805c62b76400e7 (patch)
tree49c3f3da3dacd71f3de8078ef0f50b64b35eccbc /src/menu_items.c
parent23133b6fc058d87d999ddcebc4dd4388f29b96c8 (diff)
Fix matrix stack heap corruption (#166)
* Fix matrix stack heap corruption * Fix matrix overflow bug
Diffstat (limited to 'src/menu_items.c')
-rw-r--r--src/menu_items.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/menu_items.c b/src/menu_items.c
index 68a602aa1..7ca284617 100644
--- a/src/menu_items.c
+++ b/src/menu_items.c
@@ -2732,8 +2732,9 @@ func_80095BD0_label1:
rmonPrintf("MAX effectcount(760) over!!!!(kawano)\n");
return displayListHead;
func_80095BD0_label2:
- func_80095AE0(&gGfxPool->mtxEffect[gMatrixEffectCount], arg2, arg3, arg6, arg7);
- gSPMatrix(displayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxEffect[gMatrixEffectCount++]),
+ //func_80095AE0(&gGfxPool->mtxEffect[gMatrixEffectCount], arg2, arg3, arg6, arg7);
+ Mtx* mtx = SetTextMatrix(arg2, arg3, arg6, arg7);
+ gSPMatrix(displayListHead++, mtx,
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gMKLoadTextureTile_4b(displayListHead++, arg1, G_IM_FMT_I, arg4, 0, 0, 0, arg4, arg5, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
@@ -8299,7 +8300,8 @@ void func_800A66A8(MenuItem* arg0, Unk_D_800E70A0* arg1) {
static float x2, y2, z2;
static float x1, y1, z1;
- mtx = GetEffectMatrix(); // &gGfxPool->mtxEffect[gMatrixEffectCount];
+ mtx = GetEffectMatrix();
+ mtx2 = GetEffectMatrix();
if (arg0->paramf > 1.5) {
arg0->paramf *= 0.95;
} else {
@@ -8321,14 +8323,14 @@ void func_800A66A8(MenuItem* arg0, Unk_D_800E70A0* arg1) {
// clang-format on
guScale(mtx, 1.2f, 1.2f, 1.2f);
- guRotate(mtx + 1, y2, 0.0f, 1.0f, 0.0f);
- guMtxCatL(mtx, mtx + 1, mtx);
- guRotate(mtx + 1, z2, 0.0f, 0.0f, 1.0f);
- guMtxCatL(mtx, mtx + 1, mtx);
- guRotate(mtx + 1, x2, 1.0f, 0.0f, 0.0f);
- guMtxCatL(mtx, mtx + 1, mtx);
- guTranslate(mtx + 1, arg1->column, arg1->row, 0.0f);
- guMtxCatL(mtx, mtx + 1, mtx);
+ guRotate(mtx2, y2, 0.0f, 1.0f, 0.0f);
+ guMtxCatL(mtx, mtx2, mtx);
+ guRotate(mtx2, z2, 0.0f, 0.0f, 1.0f);
+ guMtxCatL(mtx, mtx2, mtx);
+ guRotate(mtx2, x2, 1.0f, 0.0f, 0.0f);
+ guMtxCatL(mtx, mtx2, mtx);
+ guTranslate(mtx2, arg1->column, arg1->row, 0.0f);
+ guMtxCatL(mtx, mtx2, mtx);
// gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxEffect[gMatrixEffectCount++]),
// (G_MTX_NOPUSH | G_MTX_LOAD) | G_MTX_MODELVIEW);
AddEffectMatrixFixed(G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);