diff --git a/src/game/nbomb.c b/src/game/nbomb.c index b14d9c877..f5b0e7c47 100644 --- a/src/game/nbomb.c +++ b/src/game/nbomb.c @@ -25,13 +25,13 @@ #include "types.h" s16 var8009cb00; -u32 var8009cb04; +s32 var8009cb04; struct nbomb g_Nbombs[6]; u32 var8009cbf8; bool g_NbombsActive = false; f32 var80061644 = 100; -u32 var80061648 = 0x00000000; +s32 var80061648 = 0; u32 var8006164c = 0x00000000; u32 var80061650 = 0x00000000; u32 var80061654 = 0x3f800000; @@ -50,24 +50,6 @@ u32 var80061684 = 0x00000000; u32 var80061688 = 0x00000000; u32 var8006168c = 0xbf800000; u32 var80061690 = 0x00000000; -u32 var80061694 = 0x00000000; -u32 var80061698 = 0x00000000; -u32 var8006169c = 0x3f800000; -u32 var800616a0 = 0x3f800000; -u32 var800616a4 = 0x00000000; -u32 var800616a8 = 0x00000000; -u32 var800616ac = 0x00000000; -u32 var800616b0 = 0x00000000; -u32 var800616b4 = 0xbf800000; -u32 var800616b8 = 0xbf800000; -u32 var800616bc = 0x00000000; -u32 var800616c0 = 0x00000000; -u32 var800616c4 = 0x00000000; -u32 var800616c8 = 0x3f800000; -u32 var800616cc = 0x00000000; -u32 var800616d0 = 0x00000000; -u32 var800616d4 = 0xbf800000; -u32 var800616d8 = 0x00000000; GLOBAL_ASM( glabel func0f006c80 @@ -1716,6 +1698,25 @@ glabel var7f1a7ee8 /* f008554: 27bd0150 */ addiu $sp,$sp,0x150 ); +u32 var80061694 = 0x00000000; +u32 var80061698 = 0x00000000; +u32 var8006169c = 0x3f800000; +u32 var800616a0 = 0x3f800000; +u32 var800616a4 = 0x00000000; +u32 var800616a8 = 0x00000000; +u32 var800616ac = 0x00000000; +u32 var800616b0 = 0x00000000; +u32 var800616b4 = 0xbf800000; +u32 var800616b8 = 0xbf800000; +u32 var800616bc = 0x00000000; +u32 var800616c0 = 0x00000000; +u32 var800616c4 = 0x00000000; +u32 var800616c8 = 0x3f800000; +u32 var800616cc = 0x00000000; +u32 var800616d0 = 0x00000000; +u32 var800616d4 = 0xbf800000; +u32 var800616d8 = 0x00000000; + GLOBAL_ASM( glabel func0f008558 .late_rodata @@ -2694,6 +2695,78 @@ glabel var7f1a7f18 /* f0093c0: 27bd00a8 */ addiu $sp,$sp,0xa8 ); +#define MAKEVERTEX(i) \ + vertices[i].x = sp5c[i].x * var80061644; \ + vertices[i].y = sp5c[i].y * var80061644; \ + vertices[i].z = sp5c[i].z * var80061644; \ + vertices[i].s = sp5c[i].y * 256.0f * 32.0f; \ + vertices[i].t = atan2f(sp5c[i].x, sp5c[i].z) / M_BADTAU * 256.0f * 32.0f; \ + vertices[i].colour = 0; \ +\ + var80061648 = 1 - var80061648; \ +\ + if (var8009cb04 && vertices[i].t == 0) { \ + vertices[i].t = 256 * 32; \ + } \ +\ + vertices[i].t += var8009cb00; + +// Mismatch: swapped s1/s2 registers (var80061644 and var80061648) +//Gfx *func0f008558(Gfx *gdl, s32 arg1) +//{ +// struct gfxvtx *vertices; +// struct coord sp5c[] = { +// { 0, 0, 1 }, +// { 1, 0, 0 }, +// { 0, 0, -1 }, +// { -1, 0, 0 }, +// { 0, 1, 0 }, +// { 0, -1, 0 }, +// }; +// +// var80061648 = 0; +// +// // First half +// var8009cb04 = 0; +// +// vertices = gfxAllocateVertices(6); +// +// MAKEVERTEX(0); +// MAKEVERTEX(1); +// MAKEVERTEX(2); +// MAKEVERTEX(3); +// MAKEVERTEX(4); +// MAKEVERTEX(5); +// +// gDPSetVerticeArray(gdl++, osVirtualToPhysical(vertices), 6); +// +// gdl = func0f006c80(gdl, &sp5c[0], &sp5c[4], &sp5c[1], 0, 4, 1, 6, arg1); +// gdl = func0f006c80(gdl, &sp5c[1], &sp5c[4], &sp5c[2], 1, 4, 2, 6, arg1); +// gdl = func0f006c80(gdl, &sp5c[1], &sp5c[5], &sp5c[0], 1, 5, 0, 6, arg1); +// gdl = func0f006c80(gdl, &sp5c[2], &sp5c[5], &sp5c[1], 2, 5, 1, 6, arg1); +// +// // Second half +// var8009cb04 = 1; +// +// vertices = gfxAllocateVertices(6); +// +// MAKEVERTEX(0); +// MAKEVERTEX(1); +// MAKEVERTEX(2); +// MAKEVERTEX(3); +// MAKEVERTEX(4); +// MAKEVERTEX(5); +// +// gDPSetVerticeArray(gdl++, osVirtualToPhysical(vertices), 6); +// +// gdl = func0f006c80(gdl, &sp5c[2], &sp5c[4], &sp5c[3], 2, 4, 3, 6, arg1); +// gdl = func0f006c80(gdl, &sp5c[3], &sp5c[4], &sp5c[0], 3, 4, 0, 6, arg1); +// gdl = func0f006c80(gdl, &sp5c[3], &sp5c[5], &sp5c[2], 3, 5, 2, 6, arg1); +// gdl = func0f006c80(gdl, &sp5c[0], &sp5c[5], &sp5c[3], 0, 5, 3, 6, arg1); +// +// return gdl; +//} + void nbomb0f0093c4(f32 *arg0) { arg0[0] = 0.0f; diff --git a/src/include/game/nbomb.h b/src/include/game/nbomb.h index 47bf3b464..bbdce1c58 100644 --- a/src/include/game/nbomb.h +++ b/src/include/game/nbomb.h @@ -4,8 +4,7 @@ #include "data.h" #include "types.h" -u32 func0f006c80(void); -Gfx *func0f008558(Gfx *gdl, s32 arg1); +Gfx *func0f006c80(Gfx *gdl, struct coord *arg1, struct coord *arg2, struct coord *arg3, u8 arg4, u8 arg5, u8 arg6, u8 arg7, s8 arg8); void nbombReset(struct nbomb *nbomb); s32 nbombCalculateAlpha(struct nbomb *nbomb); Gfx *nbombCreateGdl(void);