diff --git a/ld/gamefiles.jpn-final.inc b/ld/gamefiles.jpn-final.inc index 4f88c56e4..5bf8333cd 100644 --- a/ld/gamefiles.jpn-final.inc +++ b/ld/gamefiles.jpn-final.inc @@ -117,7 +117,7 @@ build/ROMID/game/camera.o (section); \ build/ROMID/game/portal.o (section); \ build/ROMID/game/player.o (section); \ - build/ROMID/game/game_0c33f0.o (section); \ + build/ROMID/game/mtxf2lbulkasm.o (section); \ build/ROMID/game/bondcutscene.o (section); \ build/ROMID/game/bondwalk.o (section); \ build/ROMID/game/bondmove.o (section); \ diff --git a/ld/gamefiles.ntsc-beta.inc b/ld/gamefiles.ntsc-beta.inc index dcf5ef1f5..1a1491163 100644 --- a/ld/gamefiles.ntsc-beta.inc +++ b/ld/gamefiles.ntsc-beta.inc @@ -117,7 +117,7 @@ build/ROMID/game/camera.o (section); \ build/ROMID/game/portal.o (section); \ build/ROMID/game/player.o (section); \ - build/ROMID/game/game_0c33f0.o (section); \ + build/ROMID/game/mtxf2lbulkasm.o (section); \ build/ROMID/game/bondcutscene.o (section); \ build/ROMID/game/bondwalk.o (section); \ build/ROMID/game/bondmove.o (section); \ diff --git a/ld/gamefiles.ntsc-final.inc b/ld/gamefiles.ntsc-final.inc index 4f88c56e4..5bf8333cd 100644 --- a/ld/gamefiles.ntsc-final.inc +++ b/ld/gamefiles.ntsc-final.inc @@ -117,7 +117,7 @@ build/ROMID/game/camera.o (section); \ build/ROMID/game/portal.o (section); \ build/ROMID/game/player.o (section); \ - build/ROMID/game/game_0c33f0.o (section); \ + build/ROMID/game/mtxf2lbulkasm.o (section); \ build/ROMID/game/bondcutscene.o (section); \ build/ROMID/game/bondwalk.o (section); \ build/ROMID/game/bondmove.o (section); \ diff --git a/ld/gamefiles.pal-beta.inc b/ld/gamefiles.pal-beta.inc index 5bb37b96d..6c0f092a0 100644 --- a/ld/gamefiles.pal-beta.inc +++ b/ld/gamefiles.pal-beta.inc @@ -117,7 +117,7 @@ build/ROMID/game/camera.o (section); \ build/ROMID/game/portal.o (section); \ build/ROMID/game/player.o (section); \ - build/ROMID/game/game_0c33f0.o (section); \ + build/ROMID/game/mtxf2lbulkasm.o (section); \ build/ROMID/game/bondcutscene.o (section); \ build/ROMID/game/bondwalk.o (section); \ build/ROMID/game/bondmove.o (section); \ diff --git a/ld/gamefiles.pal-final.inc b/ld/gamefiles.pal-final.inc index 4f88c56e4..5bf8333cd 100644 --- a/ld/gamefiles.pal-final.inc +++ b/ld/gamefiles.pal-final.inc @@ -117,7 +117,7 @@ build/ROMID/game/camera.o (section); \ build/ROMID/game/portal.o (section); \ build/ROMID/game/player.o (section); \ - build/ROMID/game/game_0c33f0.o (section); \ + build/ROMID/game/mtxf2lbulkasm.o (section); \ build/ROMID/game/bondcutscene.o (section); \ build/ROMID/game/bondwalk.o (section); \ build/ROMID/game/bondmove.o (section); \ diff --git a/src/game/bondgun.c b/src/game/bondgun.c index afbbdb155..fcedf21de 100644 --- a/src/game/bondgun.c +++ b/src/game/bondgun.c @@ -21,7 +21,7 @@ #include "game/tex.h" #include "game/camera.h" #include "game/player.h" -#include "game/game_0c33f0.h" +#include "game/mtxf2lbulk.h" #include "game/gfxmemory.h" #include "game/sight.h" #include "game/inv.h" @@ -8866,7 +8866,7 @@ glabel var7f1aca90 /* f0a7978: 8fa60098 */ lw $a2,0x98($sp) /* f0a797c: 8ccb0008 */ lw $t3,0x8($a2) /* f0a7980: 8cc4000c */ lw $a0,0xc($a2) -/* f0a7984: 0fc30cfc */ jal func0f0c33f0 +/* f0a7984: 0fc30cfc */ jal mtxF2LBulk /* f0a7988: 8565000e */ lh $a1,0xe($t3) /* f0a798c: 8e0d021c */ lw $t5,0x21c($s0) /* f0a7990: 51a00003 */ beqzl $t5,.L0f0a79a0 @@ -9025,7 +9025,7 @@ glabel var7f1aca90 .L0f0a7bbc: /* f0a7bbc: 8e18038c */ lw $t8,0x38c($s0) /* f0a7bc0: 8e040390 */ lw $a0,0x390($s0) -/* f0a7bc4: 0fc30cfc */ jal func0f0c33f0 +/* f0a7bc4: 0fc30cfc */ jal mtxF2LBulk /* f0a7bc8: 8705000e */ lh $a1,0xe($t8) /* f0a7bcc: 0c0059e1 */ jal mtx00016784 /* f0a7bd0: 00000000 */ nop @@ -9707,7 +9707,7 @@ glabel var7f1aca90 /* f0a7978: 8fa60098 */ lw $a2,0x98($sp) /* f0a797c: 8ccb0008 */ lw $t3,0x8($a2) /* f0a7980: 8cc4000c */ lw $a0,0xc($a2) -/* f0a7984: 0fc30cfc */ jal func0f0c33f0 +/* f0a7984: 0fc30cfc */ jal mtxF2LBulk /* f0a7988: 8565000e */ lh $a1,0xe($t3) /* f0a798c: 8e0d021c */ lw $t5,0x21c($s0) /* f0a7990: 51a00003 */ beqzl $t5,.L0f0a79a0 @@ -9866,7 +9866,7 @@ glabel var7f1aca90 .L0f0a7bbc: /* f0a7bbc: 8e18038c */ lw $t8,0x38c($s0) /* f0a7bc0: 8e040390 */ lw $a0,0x390($s0) -/* f0a7bc4: 0fc30cfc */ jal func0f0c33f0 +/* f0a7bc4: 0fc30cfc */ jal mtxF2LBulk /* f0a7bc8: 8705000e */ lh $a1,0xe($t8) /* f0a7bcc: 0c0059e1 */ jal mtx00016784 /* f0a7bd0: 00000000 */ nop @@ -10540,7 +10540,7 @@ glabel var7f1aca90 /* f0a56a4: 8fa60090 */ lw $a2,0x90($sp) /* f0a56a8: 8cc80008 */ lw $t0,0x8($a2) /* f0a56ac: 8cc4000c */ lw $a0,0xc($a2) -/* f0a56b0: 0fc303f0 */ jal func0f0c33f0 +/* f0a56b0: 0fc303f0 */ jal mtxF2LBulk /* f0a56b4: 8505000e */ lh $a1,0xe($t0) /* f0a56b8: 8e0a021c */ lw $t2,0x21c($s0) /* f0a56bc: 51400003 */ beqzl $t2,.NB0f0a56cc @@ -10698,7 +10698,7 @@ glabel var7f1aca90 .NB0f0a58e8: /* f0a58e8: 8e0b038c */ lw $t3,0x38c($s0) /* f0a58ec: 8e040390 */ lw $a0,0x390($s0) -/* f0a58f0: 0fc303f0 */ jal func0f0c33f0 +/* f0a58f0: 0fc303f0 */ jal mtxF2LBulk /* f0a58f4: 8565000e */ lh $a1,0xe($t3) /* f0a58f8: 0c005dc5 */ jal mtx00016784 /* f0a58fc: 00000000 */ sll $zero,$zero,0x0 @@ -10962,7 +10962,7 @@ void bgunRender(Gfx **gdlptr) modelRender(&renderdata, rocketmodel); - func0f0c33f0(rocketmodel->matrices, rocketmodel->filedata->nummatrices); + mtxF2LBulk(rocketmodel->matrices, rocketmodel->filedata->nummatrices); if (hand->firedrocket) { hand->rocket = NULL; @@ -10973,7 +10973,7 @@ void bgunRender(Gfx **gdlptr) #else modelRender(&renderdata, rocketmodel); - func0f0c33f0(rocketmodel->matrices, rocketmodel->filedata->nummatrices); + mtxF2LBulk(rocketmodel->matrices, rocketmodel->filedata->nummatrices); if (hand->firedrocket) { hand->rocket = NULL; @@ -11039,7 +11039,7 @@ void bgunRender(Gfx **gdlptr) gSPClearGeometryMode(gdl++, G_CULL_BOTH); } - func0f0c33f0(hand->gunmodel.matrices, hand->gunmodel.filedata->nummatrices); + mtxF2LBulk(hand->gunmodel.matrices, hand->gunmodel.filedata->nummatrices); mtx00016784(); gSPPerspNormalize(gdl++, viGetPerspScale()); diff --git a/src/game/chr.c b/src/game/chr.c index ca9e087d7..362f29237 100644 --- a/src/game/chr.c +++ b/src/game/chr.c @@ -18,7 +18,7 @@ #include "game/tex.h" #include "game/camera.h" #include "game/player.h" -#include "game/game_0c33f0.h" +#include "game/mtxf2lbulk.h" #include "game/playermgr.h" #include "game/rng2.h" #include "game/vtxstore.h" @@ -3258,7 +3258,7 @@ void chrRenderAttachedObject(struct prop *prop, struct modelrenderdata *renderda } if (xlupass) { - func0f0c33f0(model->matrices, model->filedata->nummatrices); + mtxF2LBulk(model->matrices, model->filedata->nummatrices); } } } @@ -3609,7 +3609,7 @@ Gfx *chrRender(struct prop *prop, Gfx *gdl, bool xlupass) } } - func0f0c33f0(model->matrices, model->filedata->nummatrices); + mtxF2LBulk(model->matrices, model->filedata->nummatrices); if (USINGDEVICE(DEVICE_IRSCANNER)) { gdl = chrRenderShield(gdl, chr, 0x80); diff --git a/src/game/gunfx.c b/src/game/gunfx.c index 5a0862237..bf0550380 100644 --- a/src/game/gunfx.c +++ b/src/game/gunfx.c @@ -6,7 +6,7 @@ #include "game/game_0b0fd0.h" #include "game/tex.h" #include "game/camera.h" -#include "game/game_0c33f0.h" +#include "game/mtxf2lbulk.h" #include "game/gfxmemory.h" #include "game/file.h" #include "bss.h" @@ -2015,7 +2015,7 @@ void casingRender(struct casing *casing, Gfx **gdlptr) *gdlptr = renderdata.gdl; - func0f0c33f0(matrices, modeldef->nummatrices); + mtxF2LBulk(matrices, modeldef->nummatrices); } } diff --git a/src/game/mtxf2lbulk.c b/src/game/mtxf2lbulk.c new file mode 100644 index 000000000..e39167f3f --- /dev/null +++ b/src/game/mtxf2lbulk.c @@ -0,0 +1,49 @@ +#include +#include "constants.h" +#include "bss.h" +#include "lib/rng.h" +#include "data.h" +#include "types.h" + +void mtxF2LBulk(Mtxf *mtx, s32 count) +{ + do { + u32 m00 = (s32) (mtx->m[0][0] * var8005ef10[0]); + u32 m01 = (s32) (mtx->m[0][1] * var8005ef10[0]); + u32 m02 = (s32) (mtx->m[0][2] * var8005ef10[0]); + u32 m03 = (s32) (mtx->m[0][3] * var8005ef10[1]); + u32 m10 = (s32) (mtx->m[1][0] * var8005ef10[0]); + u32 m11 = (s32) (mtx->m[1][1] * var8005ef10[0]); + u32 m12 = (s32) (mtx->m[1][2] * var8005ef10[0]); + u32 m13 = (s32) (mtx->m[1][3] * var8005ef10[1]); + u32 m20 = (s32) (mtx->m[2][0] * var8005ef10[0]); + u32 m21 = (s32) (mtx->m[2][1] * var8005ef10[0]); + u32 m22 = (s32) (mtx->m[2][2] * var8005ef10[0]); + u32 m23 = (s32) (mtx->m[2][3] * var8005ef10[1]); + u32 m30 = (s32) (mtx->m[3][0] * var8005ef10[0]); + u32 m31 = (s32) (mtx->m[3][1] * var8005ef10[0]); + u32 m32 = (s32) (mtx->m[3][2] * var8005ef10[0]); + u32 m33 = (s32) (mtx->m[3][3] * var8005ef10[1]); + + mtx->l[0][0] = (m00 & 0xffff0000 | m01 >> 16); + mtx->l[0][1] = (m02 & 0xffff0000 | m03 >> 16); + mtx->l[0][2] = (m10 & 0xffff0000 | m11 >> 16); + mtx->l[0][3] = (m12 & 0xffff0000 | m13 >> 16); + mtx->l[1][0] = (m20 & 0xffff0000 | m21 >> 16); + mtx->l[1][1] = (m22 & 0xffff0000 | m23 >> 16); + mtx->l[1][2] = (m30 & 0xffff0000 | m31 >> 16); + mtx->l[1][3] = (m32 & 0xffff0000 | m33 >> 16); + mtx->l[2][0] = (m00 << 16 | m01 & 0xffff); + mtx->l[2][1] = (m02 << 16 | m03 & 0xffff); + mtx->l[2][2] = (m10 << 16 | m11 & 0xffff); + mtx->l[2][3] = (m12 << 16 | m13 & 0xffff); + mtx->l[3][0] = (m20 << 16 | m21 & 0xffff); + mtx->l[3][1] = (m22 << 16 | m23 & 0xffff); + mtx->l[3][2] = (m30 << 16 | m31 & 0xffff); + mtx->l[3][3] = (m32 << 16 | m33 & 0xffff); + + mtx++; + + count--; + } while (count); +} diff --git a/src/game/game_0c33f0.s b/src/game/mtxf2lbulkasm.s similarity index 99% rename from src/game/game_0c33f0.s rename to src/game/mtxf2lbulkasm.s index 231a73f9c..f43ff8c67 100644 --- a/src/game/game_0c33f0.s +++ b/src/game/mtxf2lbulkasm.s @@ -5,7 +5,7 @@ .text -glabel func0f0c33f0 +glabel mtxF2LBulk lui $t0, %hi(var8005ef10) addiu $t0, $t0, %lo(var8005ef10) lui $t1, 0xffff diff --git a/src/game/propobj.c b/src/game/propobj.c index 340dd0e52..b7ad9c776 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -28,7 +28,7 @@ #include "game/camera.h" #include "game/portal.h" #include "game/player.h" -#include "game/game_0c33f0.h" +#include "game/mtxf2lbulk.h" #include "game/hudmsg.h" #include "game/menu.h" #include "game/inv.h" @@ -14279,7 +14279,7 @@ void objRenderProp(struct prop *prop, struct modelrenderdata *renderdata, bool x if (sp6c) { player0f0c3320(model->matrices, model->filedata->nummatrices); } else { - func0f0c33f0(model->matrices, model->filedata->nummatrices); + mtxF2LBulk(model->matrices, model->filedata->nummatrices); } if ((obj->flags3 & (OBJFLAG3_SHOWSHIELD | OBJFLAG3_SHIELDHIT)) && objIsHealthy(obj)) { diff --git a/src/game/proptick.c b/src/game/proptick.c index 39324c901..90d20c913 100644 --- a/src/game/proptick.c +++ b/src/game/proptick.c @@ -17,7 +17,6 @@ #include "game/tex.h" #include "game/camera.h" #include "game/player.h" -#include "game/game_0c33f0.h" #include "game/playermgr.h" #include "game/vtxstore.h" #include "game/gfxmemory.h" diff --git a/src/include/game/game_0c33f0.h b/src/include/game/game_0c33f0.h deleted file mode 100644 index 07b2f88ef..000000000 --- a/src/include/game/game_0c33f0.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _IN_GAME_GAME_0C33F0_H -#define _IN_GAME_GAME_0C33F0_H -#include -#include "data.h" -#include "types.h" - -void func0f0c33f0(Mtxf *matrices, s32 count); - -#endif diff --git a/src/include/game/mtxf2lbulk.h b/src/include/game/mtxf2lbulk.h new file mode 100644 index 000000000..296261a2b --- /dev/null +++ b/src/include/game/mtxf2lbulk.h @@ -0,0 +1,9 @@ +#ifndef _IN_GAME_MTXF2LBULK_H +#define _IN_GAME_MTXF2LBULK_H +#include +#include "data.h" +#include "types.h" + +void mtxF2LBulk(Mtxf *matrices, s32 count); + +#endif diff --git a/src/include/types.h b/src/include/types.h index 18aee2e77..7e2cf12c8 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -21,6 +21,7 @@ typedef s32 PakErr2; // aligned but still use the union for consistency with Mtx. typedef union { f32 m[4][4]; + u32 l[4][4]; s32 unused; } Mtxf;