Decompile func0f020d44

This commit is contained in:
Ryan Dwyer 2020-07-16 23:51:04 +10:00
parent 02a594fd60
commit fa2892b749
5 changed files with 82 additions and 168 deletions

View File

@ -2588,168 +2588,82 @@ struct prop *propAllocateChr(struct model *model, struct coord *pos, s16 *rooms,
return prop;
}
GLOBAL_ASM(
glabel func0f020d44
/* f020d44: 27bdffb0 */ addiu $sp,$sp,-80
/* f020d48: afbf0024 */ sw $ra,0x24($sp)
/* f020d4c: afb20020 */ sw $s2,0x20($sp)
/* f020d50: afb1001c */ sw $s1,0x1c($sp)
/* f020d54: afb00018 */ sw $s0,0x18($sp)
/* f020d58: afa50054 */ sw $a1,0x54($sp)
/* f020d5c: 8c820004 */ lw $v0,0x4($a0)
/* f020d60: 00808825 */ or $s1,$a0,$zero
/* f020d64: 00009025 */ or $s2,$zero,$zero
/* f020d68: 8c4e0020 */ lw $t6,0x20($v0)
/* f020d6c: afae0048 */ sw $t6,0x48($sp)
/* f020d70: 8044017c */ lb $a0,0x17c($v0)
/* f020d74: 0fc29c2a */ jal freeFireslotWrapper
/* f020d78: afa2004c */ sw $v0,0x4c($sp)
/* f020d7c: 8faf004c */ lw $t7,0x4c($sp)
/* f020d80: 0fc29c2a */ jal freeFireslotWrapper
/* f020d84: 81e4017d */ lb $a0,0x17d($t7)
/* f020d88: 8fb8004c */ lw $t8,0x4c($sp)
/* f020d8c: 3c08800a */ lui $t0,%hi(g_Vars+0x338)
/* f020d90: 8704012c */ lh $a0,0x12c($t8)
/* f020d94: 0480000b */ bltz $a0,.L0f020dc4
/* f020d98: 0004c8c0 */ sll $t9,$a0,0x3
/* f020d9c: 8d08a2f8 */ lw $t0,%lo(g_Vars+0x338)($t0)
/* f020da0: 0324c821 */ addu $t9,$t9,$a0
/* f020da4: 0019c8c0 */ sll $t9,$t9,0x3
/* f020da8: 03281821 */ addu $v1,$t9,$t0
/* f020dac: 8c620004 */ lw $v0,0x4($v1)
/* f020db0: 3c01ffdf */ lui $at,0xffdf
/* f020db4: 3421ffff */ ori $at,$at,0xffff
/* f020db8: 8c490040 */ lw $t1,0x40($v0)
/* f020dbc: 01215024 */ and $t2,$t1,$at
/* f020dc0: ac4a0040 */ sw $t2,0x40($v0)
.L0f020dc4:
/* f020dc4: 0fc50567 */ jal func0f14159c
/* f020dc8: 02202025 */ or $a0,$s1,$zero
/* f020dcc: 02202025 */ or $a0,$s1,$zero
/* f020dd0: 24050001 */ addiu $a1,$zero,0x1
/* f020dd4: 0fc249af */ jal func0f0926bc
/* f020dd8: 3406ffff */ dli $a2,0xffff
/* f020ddc: 0fc0a4af */ jal func0f0292bc
/* f020de0: 02202025 */ or $a0,$s1,$zero
/* f020de4: 00002025 */ or $a0,$zero,$zero
/* f020de8: 0fc226a5 */ jal func0f089a94
/* f020dec: 8fa50048 */ lw $a1,0x48($sp)
/* f020df0: 0fc19711 */ jal func0f065c44
/* f020df4: 02202025 */ or $a0,$s1,$zero
/* f020df8: 3c0b800a */ lui $t3,%hi(g_Vars+0x4b4)
/* f020dfc: 8d6ba474 */ lw $t3,%lo(g_Vars+0x4b4)($t3)
/* f020e00: 24010026 */ addiu $at,$zero,0x26
/* f020e04: 55610005 */ bnel $t3,$at,.L0f020e1c
/* f020e08: 8e24001c */ lw $a0,0x1c($s1)
/* f020e0c: 0fc2556c */ jal objFindByTagId
/* f020e10: 24040026 */ addiu $a0,$zero,0x26
/* f020e14: 00409025 */ or $s2,$v0,$zero
/* f020e18: 8e24001c */ lw $a0,0x1c($s1)
.L0f020e1c:
/* f020e1c: 10800018 */ beqz $a0,.L0f020e80
/* f020e20: 00000000 */ nop
.L0f020e24:
/* f020e24: 8c860004 */ lw $a2,0x4($a0)
/* f020e28: 8c900020 */ lw $s0,0x20($a0)
/* f020e2c: 8ccc0040 */ lw $t4,0x40($a2)
/* f020e30: 318d0400 */ andi $t5,$t4,0x400
/* f020e34: 15a00010 */ bnez $t5,.L0f020e78
/* f020e38: 00000000 */ nop
/* f020e3c: 10d2000e */ beq $a2,$s2,.L0f020e78
/* f020e40: 00000000 */ nop
/* f020e44: 922e0000 */ lbu $t6,0x0($s1)
/* f020e48: 24010006 */ addiu $at,$zero,0x6
/* f020e4c: 15c10005 */ bne $t6,$at,.L0f020e64
/* f020e50: 00000000 */ nop
/* f020e54: 8ccf0010 */ lw $t7,0x10($a2)
/* f020e58: 000fc240 */ sll $t8,$t7,0x9
/* f020e5c: 07000006 */ bltz $t8,.L0f020e78
/* f020e60: 00000000 */ nop
.L0f020e64:
/* f020e64: 0fc20be2 */ jal func0f082f88
/* f020e68: afa6002c */ sw $a2,0x2c($sp)
/* f020e6c: 8fa4002c */ lw $a0,0x2c($sp)
/* f020e70: 0fc1acd3 */ jal setupParseObjectWithArg2False
/* f020e74: 24050001 */ addiu $a1,$zero,0x1
.L0f020e78:
/* f020e78: 1600ffea */ bnez $s0,.L0f020e24
/* f020e7c: 02002025 */ or $a0,$s0,$zero
.L0f020e80:
/* f020e80: 0fc2cc33 */ jal modelFree
/* f020e84: 8fa40048 */ lw $a0,0x48($sp)
/* f020e88: 8fa2004c */ lw $v0,0x4c($sp)
/* f020e8c: ac400020 */ sw $zero,0x20($v0)
/* f020e90: 8fb90054 */ lw $t9,0x54($sp)
/* f020e94: 53200039 */ beqzl $t9,.L0f020f7c
/* f020e98: 8fbf0024 */ lw $ra,0x24($sp)
/* f020e9c: 0fc079a9 */ jal chrRemoveFromChrsC
/* f020ea0: 84440000 */ lh $a0,0x0($v0)
/* f020ea4: 8fa8004c */ lw $t0,0x4c($sp)
/* f020ea8: 2410ffff */ addiu $s0,$zero,-1
/* f020eac: 85040292 */ lh $a0,0x292($t0)
/* f020eb0: 12040005 */ beq $s0,$a0,.L0f020ec8
/* f020eb4: 00000000 */ nop
/* f020eb8: 0fc45929 */ jal coverSetFlag0002
/* f020ebc: 00002825 */ or $a1,$zero,$zero
/* f020ec0: 8fa9004c */ lw $t1,0x4c($sp)
/* f020ec4: a5300292 */ sh $s0,0x292($t1)
.L0f020ec8:
/* f020ec8: 3c0a800a */ lui $t2,%hi(g_Vars+0x338)
/* f020ecc: 8d4aa2f8 */ lw $t2,%lo(g_Vars+0x338)($t2)
/* f020ed0: 24010048 */ addiu $at,$zero,0x48
/* f020ed4: 022a2023 */ subu $a0,$s1,$t2
/* f020ed8: 0081001a */ div $zero,$a0,$at
/* f020edc: 00002012 */ mflo $a0
/* f020ee0: 0fc083e4 */ jal propClearReferences
/* f020ee4: 00000000 */ nop
/* f020ee8: 0fc1a0bf */ jal func0f0682fc
/* f020eec: 02202025 */ or $a0,$s1,$zero
/* f020ef0: 3c0c800a */ lui $t4,%hi(g_Vars+0x318)
/* f020ef4: 8d8ca2d8 */ lw $t4,%lo(g_Vars+0x318)($t4)
/* f020ef8: 3c0d800a */ lui $t5,%hi(g_MissionConfig+0x3)
/* f020efc: 5580001a */ bnezl $t4,.L0f020f68
/* f020f00: 8fa8004c */ lw $t0,0x4c($sp)
/* f020f04: 81aedfeb */ lb $t6,%lo(g_MissionConfig+0x3)($t5)
/* f020f08: 3c04800a */ lui $a0,%hi(g_Vars+0x474)
/* f020f0c: 05c30016 */ bgezl $t6,.L0f020f68
/* f020f10: 8fa8004c */ lw $t0,0x4c($sp)
/* f020f14: 8c84a434 */ lw $a0,%lo(g_Vars+0x474)($a0)
/* f020f18: 00001825 */ or $v1,$zero,$zero
/* f020f1c: 00007880 */ sll $t7,$zero,0x2
/* f020f20: 18800010 */ blez $a0,.L0f020f64
/* f020f24: 3c18800a */ lui $t8,%hi(g_Vars)
/* f020f28: 27189fc0 */ addiu $t8,$t8,%lo(g_Vars)
/* f020f2c: 01f81021 */ addu $v0,$t7,$t8
/* f020f30: 24050004 */ addiu $a1,$zero,0x4
/* f020f34: 8c5904b8 */ lw $t9,0x4b8($v0)
.L0f020f38:
/* f020f38: 24630001 */ addiu $v1,$v1,0x1
/* f020f3c: 56390005 */ bnel $s1,$t9,.L0f020f54
/* f020f40: 0064082a */ slt $at,$v1,$a0
/* f020f44: ac4004b8 */ sw $zero,0x4b8($v0)
/* f020f48: 3c04800a */ lui $a0,%hi(g_Vars+0x474)
/* f020f4c: 8c84a434 */ lw $a0,%lo(g_Vars+0x474)($a0)
/* f020f50: 0064082a */ slt $at,$v1,$a0
.L0f020f54:
/* f020f54: 10200003 */ beqz $at,.L0f020f64
/* f020f58: 24420004 */ addiu $v0,$v0,0x4
/* f020f5c: 5465fff6 */ bnel $v1,$a1,.L0f020f38
/* f020f60: 8c5904b8 */ lw $t9,0x4b8($v0)
.L0f020f64:
/* f020f64: 8fa8004c */ lw $t0,0x4c($sp)
.L0f020f68:
/* f020f68: 0fc13301 */ jal rebuildTeams
/* f020f6c: a5100000 */ sh $s0,0x0($t0)
/* f020f70: 0fc13341 */ jal rebuildSquadrons
/* f020f74: 00000000 */ nop
/* f020f78: 8fbf0024 */ lw $ra,0x24($sp)
.L0f020f7c:
/* f020f7c: 8fb00018 */ lw $s0,0x18($sp)
/* f020f80: 8fb1001c */ lw $s1,0x1c($sp)
/* f020f84: 8fb20020 */ lw $s2,0x20($sp)
/* f020f88: 03e00008 */ jr $ra
/* f020f8c: 27bd0050 */ addiu $sp,$sp,0x50
);
/**
* Appears to hide a chr. If removechr is true, deallocates the chr completely.
*/
void func0f020d44(struct prop *prop, bool removechr)
{
struct chrdata *chr = prop->chr;
struct model *model = chr->model;
struct defaultobj *eyespyobj = NULL;
struct prop *child;
u32 stack[2];
freeFireslotWrapper(chr->fireslot[0]);
freeFireslotWrapper(chr->fireslot[1]);
if (chr->proppreset1 >= 0) {
struct prop *proppreset = &g_Vars.props[chr->proppreset1];
struct defaultobj *chair = proppreset->obj;
chair->hidden &= ~OBJHFLAG_00200000;
}
func0f14159c(prop);
func0f0926bc(prop, 1, 0xffff);
func0f0292bc(prop);
func0f089a94(0, model);
func0f065c44(prop);
if (g_Vars.stagenum == STAGE_CITRAINING) {
eyespyobj = objFindByTagId(0x26);
}
child = prop->child;
while (child) {
struct defaultobj *obj = child->obj;
struct prop *next = child->next;
if ((obj->hidden & OBJHFLAG_00000400) == 0
&& obj != eyespyobj
&& (prop->type != PROPTYPE_PLAYER || (obj->flags3 & OBJFLAG3_00400000) == 0)) {
func0f082f88(child);
setupParseObjectWithArg2False(obj, true);
}
child = next;
}
modelFree(model);
chr->model = NULL;
if (removechr) {
chrRemoveFromChrsC(chr->chrnum);
if (chr->cover != -1) {
coverSetFlag0002(chr->cover, false);
chr->cover = -1;
}
propClearReferences(prop - g_Vars.props);
func0f0682fc(prop);
if (g_Vars.normmplayerisrunning == false && g_MissionConfig.iscoop) {
s32 i;
for (i = 0; i < g_Vars.numaibuddies && i < 4; i++) {
if (g_Vars.aibuddies[i] == prop) {
g_Vars.aibuddies[i] = NULL;
}
}
}
chr->chrnum = -1;
rebuildTeams();
rebuildSquadrons();
}
}
void propClearReferences(s32 propnum)
{

View File

@ -466,7 +466,7 @@
#define CONTROLMODE_24 7
#define COVERFLAG_0001 0x0001
#define COVERFLAG_0002 0x0002
#define COVERFLAG_0002 0x0002 // In use?
#define COVERFLAG_0020 0x0020
#define COVERFLAG_0040 0x0040
#define COVERFLAG_0080 0x0080
@ -2048,7 +2048,7 @@
#define OBJHFLAG_ACTIVATED_BY_BOND 0x00004000
#define OBJHFLAG_ACTIVATED_BY_COOP 0x00040000
#define OBJHFLAG_00100000 0x00100000
#define OBJHFLAG_00200000 0x00200000
#define OBJHFLAG_00200000 0x00200000 // Occupied chair?
#define OBJHFLAG_00400000 0x00400000
#define OBJHFLAG_04000000 0x04000000
#define OBJHFLAG_GRABBED 0x08000000

View File

@ -12,7 +12,7 @@ void func0f01f378(void);
s32 chrsGetNumFree(void);
s16 getLowestUnusedChrId(void);
struct prop *func0f020b14(struct prop *prop, struct model *model, struct coord *pos, s16 *rooms, f32 arg3, u8 *ailist);
void func0f020d44(struct prop *prop, bool arg1);
void func0f020d44(struct prop *prop, bool removechr);
u32 func0f021258(void);
void func0f02133c(struct chrdata *chr);
void chrDoFlinchcntThing(struct chrdata *chr, f32 arg1);
@ -50,7 +50,7 @@ u32 func0f028e18(void);
u32 func0f028e6c(void);
u32 func0f028f7c(void);
u32 func0f0291d4(void);
u32 func0f0292bc(void);
void func0f0292bc(struct prop *prop);
u32 func0f02932c(void);
u32 func0f0293ec(void);
u32 func0f0294cc(void);

View File

@ -54,7 +54,7 @@ u32 func0f06803c(void);
struct defaultobj *objFindByPadNum(s32 padnum);
u32 func0f068218(void);
void func0f0682dc(struct obj48 *obj48);
u32 func0f0682fc(void);
void func0f0682fc(struct prop *prop);
u32 func0f068368(void);
u32 func0f06843c(void);
void func0f0685e4(struct prop *prop);

View File

@ -20,7 +20,7 @@ u32 func0f140b7c(void);
u32 func0f140e20(void);
u32 func0f1411b0(void);
u32 func0f141234(void);
u32 func0f14159c(void);
void func0f14159c(struct prop *prop);
u32 func0f141704(void);
#endif