Decompile func0f08b880

This commit is contained in:
Ryan Dwyer 2021-05-18 21:29:23 +10:00
parent c9a2517fae
commit 7598883bbb
7 changed files with 95 additions and 115 deletions

View File

@ -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;

View File

@ -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) {

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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;