From 5d4ea45e28bfff04089235dea7e986935869cf1a Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 2 Apr 2022 16:54:32 +1000 Subject: [PATCH] Attempt to decompile bgun0f0a46a4 --- src/game/bondgun.c | 139 ++++++++++++++++++++++++++++++++++++++------ src/include/types.h | 26 ++------- 2 files changed, 125 insertions(+), 40 deletions(-) diff --git a/src/game/bondgun.c b/src/game/bondgun.c index caf68ed69..012ad1e27 100644 --- a/src/game/bondgun.c +++ b/src/game/bondgun.c @@ -19073,28 +19073,30 @@ void bgun0f0a256c(s32 arg0, Mtxf *mtx) var8009d144->unk0d14 = mtx->m[3][0]; var8009d144->unk0d18 = mtx->m[3][1]; var8009d144->unk0d1c = mtx->m[3][2]; - var8009d144->unk0d2c = mtx->m[0][0]; - var8009d144->unk0d30 = mtx->m[0][1]; - var8009d144->unk0d34 = mtx->m[0][2]; - var8009d144->unk0d38 = mtx->m[1][0]; - var8009d144->unk0d3c = mtx->m[1][1]; - var8009d144->unk0d40 = mtx->m[1][2]; - var8009d144->unk0d44 = mtx->m[2][0]; - var8009d144->unk0d48 = mtx->m[2][1]; - var8009d144->unk0d4c = mtx->m[2][2]; + + var8009d144->unk0d2c[0][0] = mtx->m[0][0]; + var8009d144->unk0d2c[0][1] = mtx->m[0][1]; + var8009d144->unk0d2c[0][2] = mtx->m[0][2]; + var8009d144->unk0d2c[1][0] = mtx->m[1][0]; + var8009d144->unk0d2c[1][1] = mtx->m[1][1]; + var8009d144->unk0d2c[1][2] = mtx->m[1][2]; + var8009d144->unk0d2c[2][0] = mtx->m[2][0]; + var8009d144->unk0d2c[2][1] = mtx->m[2][1]; + var8009d144->unk0d2c[2][2] = mtx->m[2][2]; } else if (var8009d144->unk0d0e_00 >= 2) { mtx->m[3][0] = var8009d144->unk0d14; mtx->m[3][1] = var8009d144->unk0d18; mtx->m[3][2] = var8009d144->unk0d1c; - mtx->m[0][0] = var8009d144->unk0d2c; - mtx->m[0][1] = var8009d144->unk0d30; - mtx->m[0][2] = var8009d144->unk0d34; - mtx->m[1][0] = var8009d144->unk0d38; - mtx->m[1][1] = var8009d144->unk0d3c; - mtx->m[1][2] = var8009d144->unk0d40; - mtx->m[2][0] = var8009d144->unk0d44; - mtx->m[2][1] = var8009d144->unk0d48; - mtx->m[2][2] = var8009d144->unk0d4c; + + mtx->m[0][0] = var8009d144->unk0d2c[0][0]; + mtx->m[0][1] = var8009d144->unk0d2c[0][1]; + mtx->m[0][2] = var8009d144->unk0d2c[0][2]; + mtx->m[1][0] = var8009d144->unk0d2c[1][0]; + mtx->m[1][1] = var8009d144->unk0d2c[1][1]; + mtx->m[1][2] = var8009d144->unk0d2c[1][2]; + mtx->m[2][0] = var8009d144->unk0d2c[2][0]; + mtx->m[2][1] = var8009d144->unk0d2c[2][1]; + mtx->m[2][2] = var8009d144->unk0d2c[2][2]; } } @@ -22472,6 +22474,107 @@ glabel var7f1ac918 ); #endif +/** + * With this function stubbed, the tranquilizer's spent ammo does not detach + * when reloading, and the pulled pin on grenades and nbombs appears to move + * with the model rather than detaching properly. + */ +//void bgun0f0a46a4(struct hand *hand, struct modelfiledata *modeldef, bool isdetonator) +//{ +// struct coord spd0; +// Mtxf sp90; +// struct coord sp84; +// Mtxf sp44; +// s32 i; +// f32 lvupdate; +// f32 newval; +// f32 sumval; +// +// switch (hand->unk0d0e_00) { +// case 1: +// // 6e4 +// switch (hand->unk0d0e_04) { +// case 0: +// // 710 +// hand->unk0d20.f[0] = (RANDOMFRAC() - 0.5f) * 0.5333333f * 0.0625f + 0.5333333f; +// hand->unk0d20.f[1] = 0.0f; +// hand->unk0d20.f[2] = RANDOMFRAC() * 2.5f * 0.0625f + 2.5f; +// spd0.f[0] = 2.0f * RANDOMFRAC() * M_BADTAU / 184.0f - 0.03414231f; +// spd0.f[1] = 2.0f * RANDOMFRAC() * M_BADTAU / 184.0f - 0.03414231f; +// spd0.f[2] = 2.0f * RANDOMFRAC() * M_BADTAU / 184.0f - 0.03414231f; +// break; +// case 1: +// // 8b8 +// hand->unk0d20.f[0] = -((RANDOMFRAC() - 0.5f) * 0.5333333f * 0.0625f + 3.0f * 0.5333333f); +// hand->unk0d20.f[1] = RANDOMFRAC() * 2.5f * 0.125f + 2.5f; +// hand->unk0d20.f[2] = -(RANDOMFRAC() + 1.0f); +// spd0.f[0] = (RANDOMFRAC() + 3.0f) * M_BADTAU / 208.0f; +// spd0.f[1] = 2.0f * RANDOMFRAC() * M_BADTAU / 544.0f - 0.0115481345f; +// spd0.f[2] = 2.0f * RANDOMFRAC() * M_BADTAU / 544.0f - 0.0115481345f; +// break; +// case 2: +// // aa4 +// hand->unk0d20.f[0] = 0.0f; +// hand->unk0d20.f[1] = RANDOMFRAC() * 2.5f * 0.125f + 2.5f; +// hand->unk0d20.f[2] = (RANDOMFRAC() + 1.0f) * 0.25f; +// spd0.f[0] = (RANDOMFRAC() + 3.0f) * M_BADTAU / 368.0f; +// spd0.f[1] = 2.0f * RANDOMFRAC() * M_BADTAU / 944.0f - 0.006654857f; +// spd0.f[2] = 2.0f * RANDOMFRAC() * M_BADTAU / 944.0f - 0.006654857f; +// break; +// } +// +// // c28 +// hand->unk0d10 = hand->unk0d14 - 200.0f; +// +// mtx4LoadRotation(&spd0, &sp90); +// mtx4ToMtx3(&sp90, hand->unk0d50); +// +// if (g_Vars.lvupdate240 > 0 && hand->unk0d0e_04) { +// sp84.x = (hand->posmtx.m[3][0] - hand->prevmtx.m[3][0]) / g_Vars.lvupdate240f; +// sp84.y = (hand->posmtx.m[3][1] - hand->prevmtx.m[3][1]) / g_Vars.lvupdate240f; +// sp84.z = (hand->posmtx.m[3][2] - hand->prevmtx.m[3][2]) / g_Vars.lvupdate240f; +// +// mtx00017588(hand->posmtx.m, sp44.m); +// mtx4RotateVecInPlace(&sp44, &sp84); +// +// hand->unk0d20.f[0] += sp84.x * 0.3f; +// hand->unk0d20.f[1] += sp84.y * 0.3f; +// hand->unk0d20.f[2] += sp84.z * 0.3f; +// } +// +// hand->unk0d0e_00 = 2; +// break; +// case 2: +// // d28 +// lvupdate = g_Vars.lvupdate240f; +// +// if (g_Vars.currentplayer->isdead && lvupdate > 1.5f) { +// lvupdate = 1.5f; +// } +// +// newval = hand->unk0d20.f[1] - lvupdate * 0.2777778f; +// +// if (hand->unk0d18 < hand->unk0d10) { +// hand->unk0d0e_00 = 3; +// break; +// } +// +// sumval = hand->unk0d20.f[1] + newval; +// +// hand->unk0d20.f[1] = newval; +// +// hand->unk0d14 += lvupdate * hand->unk0d20.f[0]; +// hand->unk0d18 += lvupdate * 0.5f * sumval; +// hand->unk0d1c += lvupdate * hand->unk0d20.f[2]; +// +// for (i = 0; i < g_Vars.lvupdate240; i++) { +// mtx00016110(hand->unk0d50, hand->unk0d2c); +// } +// +// break; +// } +//} + u32 var80070238 = 0x00000000; u32 var8007023c = 0x00000000; u32 var80070240 = 0x00000000; diff --git a/src/include/types.h b/src/include/types.h index 3a9618975..a0c8fe717 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -2401,31 +2401,13 @@ struct hand { /*0x0d0f*/ u8 unk0d0f_02 : 1; /*0x0d0f*/ u8 unk0d0f_03 : 1; /*0x0d0f*/ u8 unk0d0f_04 : 4; - /*0x0d10*/ u32 unk0d10; + /*0x0d10*/ f32 unk0d10; /*0x0d14*/ f32 unk0d14; /*0x0d18*/ f32 unk0d18; /*0x0d1c*/ f32 unk0d1c; - /*0x0d20*/ f32 unk0d20; - /*0x0d24*/ f32 unk0d24; - /*0x0d28*/ f32 unk0d28; - /*0x0d2c*/ f32 unk0d2c; - /*0x0d30*/ f32 unk0d30; - /*0x0d34*/ f32 unk0d34; - /*0x0d38*/ f32 unk0d38; - /*0x0d3c*/ f32 unk0d3c; - /*0x0d40*/ f32 unk0d40; - /*0x0d44*/ f32 unk0d44; - /*0x0d48*/ f32 unk0d48; - /*0x0d4c*/ f32 unk0d4c; - /*0x0d50*/ u32 unk0d50; - /*0x0d54*/ u32 unk0d54; - /*0x0d58*/ u32 unk0d58; - /*0x0d5c*/ u32 unk0d5c; - /*0x0d60*/ u32 unk0d60; - /*0x0d64*/ u32 unk0d64; - /*0x0d68*/ u32 unk0d68; - /*0x0d6c*/ u32 unk0d6c; - /*0x0d70*/ u32 unk0d70; + /*0x0d20*/ struct coord unk0d20; + /*0x0d2c*/ f32 unk0d2c[3][3]; + /*0x0d50*/ f32 unk0d50[3][3]; /*0x0d74*/ u16 gunroundsspent[4]; // actually a countdown timer /*0x0d7c*/ s32 ispare1; /*0x0d80*/ struct guncmd *unk0d80;