From 7598883bbbaccecad2bf3cc6c680a6489213c67f Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 18 May 2021 21:29:23 +1000 Subject: [PATCH] Decompile func0f08b880 --- src/game/game_00c490.c | 2 +- src/game/game_097ba0.c | 14 +-- src/game/propobj.c | 172 ++++++++++++++++----------------- src/include/bss.h | 2 +- src/include/game/game_097ba0.h | 2 +- src/include/game/propobj.h | 6 +- src/include/types.h | 12 +-- 7 files changed, 95 insertions(+), 115 deletions(-) diff --git a/src/game/game_00c490.c b/src/game/game_00c490.c index 82070d2b9..639ac45dc 100644 --- a/src/game/game_00c490.c +++ b/src/game/game_00c490.c @@ -196,7 +196,7 @@ void setupInit(void) if (var8009ce40 == 0) { var8009ce58 = NULL; } else { - var8009ce58 = malloc(ALIGN16(var8009ce40 * sizeof(struct var8009ce58)), MEMPOOL_STAGE); + var8009ce58 = malloc(ALIGN16(var8009ce40 * sizeof(struct weaponobj)), MEMPOOL_STAGE); for (i = 0; i < var8009ce40; i++) { var8009ce58[i].base.prop = NULL; diff --git a/src/game/game_097ba0.c b/src/game/game_097ba0.c index 3ad6b5001..04e7f251f 100644 --- a/src/game/game_097ba0.c +++ b/src/game/game_097ba0.c @@ -11216,13 +11216,13 @@ void func0f09ed2c(struct defaultobj *obj, struct coord *newpos, Mtxf *arg2, f32 /** * Create a thrown projectile. */ -struct var8009ce58 *func0f09ee18(struct chrdata *chr, struct shorthand *hand, struct coord *pos, s16 *rooms, Mtxf *arg4, struct coord *arg5) +struct weaponobj *func0f09ee18(struct chrdata *chr, struct shorthand *hand, struct coord *pos, s16 *rooms, Mtxf *arg4, struct coord *arg5) { - struct var8009ce58 *thing = NULL; + struct weaponobj *thing = NULL; struct weaponfunc *basefunc; struct weaponfunc_throw *func; struct weapon *weapon = weaponFindById(hand->weaponnum); - struct var8009ce58 *tmpthing; + struct weaponobj *tmpthing; s32 playernum; f32 mf[4][4]; u32 stack; @@ -11257,11 +11257,11 @@ struct var8009ce58 *func0f09ee18(struct chrdata *chr, struct shorthand *hand, st if (tmpthing != NULL) { thing = tmpthing; - // Note: time is converted to time240 immediately below - thing->activatetime240 = func->activatetime60; + thing->unk62 = func->activatetime60; - if (thing->activatetime240 >= 2) { - thing->activatetime240 = PALDOWN(thing->activatetime240 * 4); + // Convert to 240 time + if (thing->unk62 >= 2) { + thing->unk62 = PALDOWN(thing->unk62 * 4); } if (thing->weaponnum == WEAPON_GRENADE || thing->weaponnum == WEAPON_NBOMB) { diff --git a/src/game/propobj.c b/src/game/propobj.c index 7be486782..62645dc5e 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -110,7 +110,7 @@ s32 var8009ce48; s32 var8009ce4c; s32 g_NumProjectiles; s32 g_NumMonitorThings; -struct var8009ce58 *var8009ce58; +struct weaponobj *var8009ce58; struct defaultobj *var8009ce5c; struct var8009ce60 *var8009ce60; struct defaultobj *var8009ce64; @@ -69468,23 +69468,86 @@ glabel var7f1aaf24 ); #endif -GLOBAL_ASM( -glabel func0f08b880 -/* f08b880: 27bdffe0 */ addiu $sp,$sp,-32 -/* f08b884: 3c0e8007 */ lui $t6,%hi(var8006ad8c) -/* f08b888: afbf0014 */ sw $ra,0x14($sp) -/* f08b88c: 25cead8c */ addiu $t6,$t6,%lo(var8006ad8c) -/* f08b890: 8dc10000 */ lw $at,0x0($t6) -/* f08b894: 00a03825 */ or $a3,$a1,$zero -/* f08b898: 27a5001c */ addiu $a1,$sp,0x1c -/* f08b89c: aca10000 */ sw $at,0x0($a1) -/* f08b8a0: 0fc22d96 */ jal func0f08b658 -/* f08b8a4: a3a7001c */ sb $a3,0x1c($sp) -/* f08b8a8: 8fbf0014 */ lw $ra,0x14($sp) -/* f08b8ac: 27bd0020 */ addiu $sp,$sp,0x20 -/* f08b8b0: 03e00008 */ jr $ra -/* f08b8b4: 00000000 */ nop -); +u32 var8006ac6c = 0x01000011; +u32 var8006ac70 = 0x00000000; +u32 var8006ac74 = 0x00004000; +u32 var8006ac78 = 0x00000000; +u32 var8006ac7c = 0x00000000; +u32 var8006ac80 = 0x00000000; +u32 var8006ac84 = 0x00000000; +u32 var8006ac88 = 0x3f800000; +u32 var8006ac8c = 0x00000000; +u32 var8006ac90 = 0x00000000; +u32 var8006ac94 = 0x00000000; +u32 var8006ac98 = 0x3f800000; +u32 var8006ac9c = 0x00000000; +u32 var8006aca0 = 0x00000000; +u32 var8006aca4 = 0x00000000; +u32 var8006aca8 = 0x3f800000; +u32 var8006acac = 0x00000000; +u32 var8006acb0 = 0x00000000; +u32 var8006acb4 = 0x00000000; +u32 var8006acb8 = 0x000003e8; +u32 var8006acbc = 0xffffff00; +u32 var8006acc0 = 0xffffff00; +u32 var8006acc4 = 0x0fff0000; +u32 var8006acc8 = 0x0100000d; +u32 var8006accc = 0x00000001; +u32 var8006acd0 = 0x00000000; +u32 var8006acd4 = 0x00000000; +u32 var8006acd8 = 0x00000000; +u32 var8006acdc = 0x00000000; +u32 var8006ace0 = 0x00000000; +u32 var8006ace4 = 0x3f800000; +u32 var8006ace8 = 0x00000000; +u32 var8006acec = 0x00000000; +u32 var8006acf0 = 0x00000000; +u32 var8006acf4 = 0x3f800000; +u32 var8006acf8 = 0x00000000; +u32 var8006acfc = 0x00000000; +u32 var8006ad00 = 0x00000000; +u32 var8006ad04 = 0x3f800000; +u32 var8006ad08 = 0x00000000; +u32 var8006ad0c = 0x00000000; +u32 var8006ad10 = 0x00000000; +u32 var8006ad14 = 0x000003e8; +u32 var8006ad18 = 0xffffff00; +u32 var8006ad1c = 0xffffff00; +u32 var8006ad20 = 0x0fff0000; +u32 var8006ad24 = 0x01000008; +u32 var8006ad28 = 0x0000ffff; +u32 var8006ad2c = 0x00000001; +u32 var8006ad30 = 0x00000000; +u32 var8006ad34 = 0x00000000; +u32 var8006ad38 = 0x00000000; +u32 var8006ad3c = 0x00000000; +u32 var8006ad40 = 0x3f800000; +u32 var8006ad44 = 0x00000000; +u32 var8006ad48 = 0x00000000; +u32 var8006ad4c = 0x00000000; +u32 var8006ad50 = 0x3f800000; +u32 var8006ad54 = 0x00000000; +u32 var8006ad58 = 0x00000000; +u32 var8006ad5c = 0x00000000; +u32 var8006ad60 = 0x3f800000; +u32 var8006ad64 = 0x00000000; +u32 var8006ad68 = 0x00000000; +u32 var8006ad6c = 0x00000000; +u32 var8006ad70 = 0x000003e8; +u32 var8006ad74 = 0xffffff00; +u32 var8006ad78 = 0xffffff00; +u32 var8006ad7c = 0x0fff0000; +u32 var8006ad80 = 0x00000000; +u32 var8006ad84 = 0x00ffffff; +u32 var8006ad88 = 0x00000000; + +struct weaponobj *func0f08b880(s32 modelnum, s32 weaponnum, struct chrdata *chr) +{ + struct shorthand hand = {0}; + hand.weaponnum = weaponnum; + + return func0f08b658(modelnum, &hand, chr); +} void chrSetObjHiddenFlag4OnWeapon(struct chrdata *chr, s32 hand) { @@ -77810,79 +77873,6 @@ u32 func0f091e04(u32 arg0, u32 arg1) return arg0; } -u32 var8006ac6c = 0x01000011; -u32 var8006ac70 = 0x00000000; -u32 var8006ac74 = 0x00004000; -u32 var8006ac78 = 0x00000000; -u32 var8006ac7c = 0x00000000; -u32 var8006ac80 = 0x00000000; -u32 var8006ac84 = 0x00000000; -u32 var8006ac88 = 0x3f800000; -u32 var8006ac8c = 0x00000000; -u32 var8006ac90 = 0x00000000; -u32 var8006ac94 = 0x00000000; -u32 var8006ac98 = 0x3f800000; -u32 var8006ac9c = 0x00000000; -u32 var8006aca0 = 0x00000000; -u32 var8006aca4 = 0x00000000; -u32 var8006aca8 = 0x3f800000; -u32 var8006acac = 0x00000000; -u32 var8006acb0 = 0x00000000; -u32 var8006acb4 = 0x00000000; -u32 var8006acb8 = 0x000003e8; -u32 var8006acbc = 0xffffff00; -u32 var8006acc0 = 0xffffff00; -u32 var8006acc4 = 0x0fff0000; -u32 var8006acc8 = 0x0100000d; -u32 var8006accc = 0x00000001; -u32 var8006acd0 = 0x00000000; -u32 var8006acd4 = 0x00000000; -u32 var8006acd8 = 0x00000000; -u32 var8006acdc = 0x00000000; -u32 var8006ace0 = 0x00000000; -u32 var8006ace4 = 0x3f800000; -u32 var8006ace8 = 0x00000000; -u32 var8006acec = 0x00000000; -u32 var8006acf0 = 0x00000000; -u32 var8006acf4 = 0x3f800000; -u32 var8006acf8 = 0x00000000; -u32 var8006acfc = 0x00000000; -u32 var8006ad00 = 0x00000000; -u32 var8006ad04 = 0x3f800000; -u32 var8006ad08 = 0x00000000; -u32 var8006ad0c = 0x00000000; -u32 var8006ad10 = 0x00000000; -u32 var8006ad14 = 0x000003e8; -u32 var8006ad18 = 0xffffff00; -u32 var8006ad1c = 0xffffff00; -u32 var8006ad20 = 0x0fff0000; -u32 var8006ad24 = 0x01000008; -u32 var8006ad28 = 0x0000ffff; -u32 var8006ad2c = 0x00000001; -u32 var8006ad30 = 0x00000000; -u32 var8006ad34 = 0x00000000; -u32 var8006ad38 = 0x00000000; -u32 var8006ad3c = 0x00000000; -u32 var8006ad40 = 0x3f800000; -u32 var8006ad44 = 0x00000000; -u32 var8006ad48 = 0x00000000; -u32 var8006ad4c = 0x00000000; -u32 var8006ad50 = 0x3f800000; -u32 var8006ad54 = 0x00000000; -u32 var8006ad58 = 0x00000000; -u32 var8006ad5c = 0x00000000; -u32 var8006ad60 = 0x3f800000; -u32 var8006ad64 = 0x00000000; -u32 var8006ad68 = 0x00000000; -u32 var8006ad6c = 0x00000000; -u32 var8006ad70 = 0x000003e8; -u32 var8006ad74 = 0xffffff00; -u32 var8006ad78 = 0xffffff00; -u32 var8006ad7c = 0x0fff0000; -u32 var8006ad80 = 0x00000000; -u32 var8006ad84 = 0x00ffffff; -u32 var8006ad88 = 0x00000000; -u32 var8006ad8c = 0x00000000; u32 var8006ad90 = 0x01000008; u32 var8006ad94 = 0x00000000; u32 var8006ad98 = 0x00004001; diff --git a/src/include/bss.h b/src/include/bss.h index 1a5e291e5..7de307ae4 100644 --- a/src/include/bss.h +++ b/src/include/bss.h @@ -115,7 +115,7 @@ extern s32 var8009ce48; extern s32 var8009ce4c; extern s32 g_NumProjectiles; extern s32 g_NumMonitorThings; -extern struct var8009ce58 *var8009ce58; +extern struct weaponobj *var8009ce58; extern struct defaultobj *var8009ce5c; extern struct var8009ce60 *var8009ce60; extern struct defaultobj *var8009ce64; diff --git a/src/include/game/game_097ba0.h b/src/include/game/game_097ba0.h index 4e65efc48..13c01f8d9 100644 --- a/src/include/game/game_097ba0.h +++ b/src/include/game/game_097ba0.h @@ -71,7 +71,7 @@ bool func0f09eae4(void); s32 func0f09ebbc(void); void func0f09ebcc(struct defaultobj *obj, struct coord *coord, s16 *rooms, Mtxf *matrix1, f32 *arg4, Mtxf *matrix2, struct prop *prop, struct coord *pos); void func0f09ed2c(struct defaultobj *obj, struct coord *coord, Mtxf *arg2, f32 *arg3, Mtxf *arg4); -struct var8009ce58 *func0f09ee18(struct chrdata *chr, struct shorthand *hand, struct coord *pos, s16 *rooms, Mtxf *arg4, struct coord *arg5); +struct weaponobj *func0f09ee18(struct chrdata *chr, struct shorthand *hand, struct coord *pos, s16 *rooms, Mtxf *arg4, struct coord *arg5); void handCreateThrownProjectile(s32 handnum, struct shorthand *hand); void func0f09f848(s32 handnum); void func0f09f974(s32 handnum, struct weaponfunc_shootprojectile *func); diff --git a/src/include/game/propobj.h b/src/include/game/propobj.h index b50c3359e..d612f79af 100644 --- a/src/include/game/propobj.h +++ b/src/include/game/propobj.h @@ -285,9 +285,9 @@ u32 func0f08ae54(struct defaultobj *obj, struct chrdata *chr); u32 func0f08b108(struct weaponobj *weapon, struct chrdata *chr, struct modelfiledata *modelfiledata, u32 arg3, u32 arg4); void func0f08b208(struct weaponobj *weapon, struct chrdata *chr); void func0f08b25c(struct weaponobj *weapon, struct chrdata *chr); -struct var8009ce58 *func0f08b27c(s32 modelnum, struct shorthand *hand, struct chrdata *chr); -struct var8009ce58 *func0f08b658(s32 modelnum, struct shorthand *hand, struct chrdata *chr); -struct weaponobj *func0f08b880(u32 model, u32 weaponnum, struct chrdata *chr); +struct weaponobj *func0f08b27c(s32 modelnum, struct shorthand *hand, struct chrdata *chr); +struct weaponobj *func0f08b658(s32 modelnum, struct shorthand *hand, struct chrdata *chr); +struct weaponobj *func0f08b880(s32 modelnum, s32 weaponnum, struct chrdata *chr); void chrSetObjHiddenFlag4OnWeapon(struct chrdata *chr, s32 hand); struct prop *func0f08b8e8(struct chrdata *chr, s32 weaponnum, s32 arg2, u32 flags, s32 arg4, s32 arg5); struct prop *chrGiveWeapon(struct chrdata *chr, s32 model, s32 weaponnum, u32 flags); diff --git a/src/include/types.h b/src/include/types.h index 8bd7c60fb..69e4f9dae 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -1742,7 +1742,7 @@ struct weaponobj { // objtype 0x08 /** * Appears to have multiple uses: * Grenades = timer? - * Proxy mines = timer? Or isarmed + * Proxy mines = timer240 (counts down) * CTC briefcase = team index */ /*0x62*/ s16 unk62; @@ -6908,16 +6908,6 @@ struct var8009cda4 { s16 unk00[8]; }; -// Suspect this is just a weaponobj -struct var8009ce58 { - struct defaultobj base; - /*0x5c*/ u8 weaponnum; - /*0x60*/ u16 unk5e; - /*0x60*/ u16 unk60; - /*0x62*/ s16 activatetime240; - /*0x64*/ u32 unk64; -}; - struct var8009ce60 { struct defaultobj base; /*0x5c*/ u32 unk5c;