Decompile doorUpdatePortalIfWindowed

This commit is contained in:
Ryan Dwyer 2020-12-26 10:29:50 +10:00
parent 7f47ea343b
commit 27583be09a
4 changed files with 42 additions and 90 deletions

View File

@ -19693,90 +19693,41 @@ const char var7f1aa038[] = "propobj.c";
const char var7f1aa044[] = "propobj.c";
const char var7f1aa050[] = "HC: %x - visible\n";
GLOBAL_ASM(
glabel func0f07731c
/* f07731c: 27bdffd0 */ addiu $sp,$sp,-48
/* f077320: afbf001c */ sw $ra,0x1c($sp)
/* f077324: afb00018 */ sw $s0,0x18($sp)
/* f077328: afa40030 */ sw $a0,0x30($sp)
/* f07732c: afa50034 */ sw $a1,0x34($sp)
/* f077330: 8c820004 */ lw $v0,0x4($a0)
/* f077334: 24030001 */ addiu $v1,$zero,0x1
/* f077338: 8c4f0018 */ lw $t7,0x18($v0)
/* f07733c: 00408025 */ or $s0,$v0,$zero
/* f077340: afaf0020 */ sw $t7,0x20($sp)
/* f077344: 94580070 */ lhu $t8,0x70($v0)
/* f077348: 33190002 */ andi $t9,$t8,0x2
/* f07734c: 5320003a */ beqzl $t9,.L0f077438
/* f077350: 8fbf001c */ lw $ra,0x1c($sp)
/* f077354: 84480088 */ lh $t0,0x88($v0)
/* f077358: 8449008a */ lh $t1,0x8a($v0)
/* f07735c: afa30024 */ sw $v1,0x24($sp)
/* f077360: 44882000 */ mtc1 $t0,$f4
/* f077364: 44893000 */ mtc1 $t1,$f6
/* f077368: 24840008 */ addiu $a0,$a0,0x8
/* f07736c: 46802120 */ cvt.s.w $f4,$f4
/* f077370: 24070000 */ addiu $a3,$zero,0x0
/* f077374: 468031a0 */ cvt.s.w $f6,$f6
/* f077378: 44052000 */ mfc1 $a1,$f4
/* f07737c: 44063000 */ mfc1 $a2,$f6
/* f077380: 0fc1c24b */ jal func0f07092c
/* f077384: 00000000 */ nop
/* f077388: 8fa30024 */ lw $v1,0x24($sp)
/* f07738c: a6020086 */ sh $v0,0x86($s0)
/* f077390: 860a0086 */ lh $t2,0x86($s0)
/* f077394: 240100ff */ addiu $at,$zero,0xff
/* f077398: 8fab0020 */ lw $t3,0x20($sp)
/* f07739c: 15410007 */ bne $t2,$at,.L0f0773bc
/* f0773a0: 24050001 */ addiu $a1,$zero,0x1
/* f0773a4: 44804000 */ mtc1 $zero,$f8
/* f0773a8: c60a007c */ lwc1 $f10,0x7c($s0)
/* f0773ac: 460a403c */ c.lt.s $f8,$f10
/* f0773b0: 00000000 */ nop
/* f0773b4: 45020003 */ bc1fl .L0f0773c4
/* f0773b8: 8d640008 */ lw $a0,0x8($t3)
.L0f0773bc:
/* f0773bc: 00001825 */ or $v1,$zero,$zero
/* f0773c0: 8d640008 */ lw $a0,0x8($t3)
.L0f0773c4:
/* f0773c4: 3c0c8008 */ lui $t4,%hi(stagethinglist_20ef8)
/* f0773c8: 258caed8 */ addiu $t4,$t4,%lo(stagethinglist_20ef8)
/* f0773cc: 8c8d0004 */ lw $t5,0x4($a0)
/* f0773d0: 558d000c */ bnel $t4,$t5,.L0f077404
/* f0773d4: 8fb80034 */ lw $t8,0x34($sp)
/* f0773d8: 0c006a47 */ jal modelGetPart
/* f0773dc: afa30024 */ sw $v1,0x24($sp)
/* f0773e0: 8fa40020 */ lw $a0,0x20($sp)
/* f0773e4: 0c006a87 */ jal modelGetNodeData
/* f0773e8: 00402825 */ or $a1,$v0,$zero
/* f0773ec: 8c4f0000 */ lw $t7,0x0($v0)
/* f0773f0: 8fa30024 */ lw $v1,0x24($sp)
/* f0773f4: 55e00003 */ bnezl $t7,.L0f077404
/* f0773f8: 8fb80034 */ lw $t8,0x34($sp)
/* f0773fc: 00001825 */ or $v1,$zero,$zero
/* f077400: 8fb80034 */ lw $t8,0x34($sp)
.L0f077404:
/* f077404: 2b010002 */ slti $at,$t8,0x2
/* f077408: 14200002 */ bnez $at,.L0f077414
/* f07740c: 00000000 */ nop
/* f077410: 00001825 */ or $v1,$zero,$zero
.L0f077414:
/* f077414: 10600005 */ beqz $v1,.L0f07742c
/* f077418: 00000000 */ nop
/* f07741c: 0fc23545 */ jal doorDeactivatePortal
/* f077420: 02002025 */ or $a0,$s0,$zero
/* f077424: 10000004 */ b .L0f077438
/* f077428: 8fbf001c */ lw $ra,0x1c($sp)
.L0f07742c:
/* f07742c: 0fc2353a */ jal doorActivatePortal
/* f077430: 02002025 */ or $a0,$s0,$zero
/* f077434: 8fbf001c */ lw $ra,0x1c($sp)
.L0f077438:
/* f077438: 8fb00018 */ lw $s0,0x18($sp)
/* f07743c: 27bd0030 */ addiu $sp,$sp,0x30
/* f077440: 03e00008 */ jr $ra
/* f077444: 00000000 */ nop
);
void doorUpdatePortalIfWindowed(struct prop *doorprop, s32 playercount)
{
struct doorobj *doorobj = doorprop->door;
struct modelnode *node;
bool canhide = true;
struct model *model = doorprop->obj->model;
struct modeldata_partid *partdata;
if (doorobj->doorflags & DOORFLAG_WINDOWED) {
doorobj->fadealpha = func0f07092c(&doorprop->pos, doorobj->xludist, doorobj->opadist, 0);
if (doorobj->fadealpha != 255 || doorobj->frac > 0) {
canhide = false;
}
if (model->unk08->unk04 == &stagethinglist_20ef8) {
node = modelGetPart(model->unk08, MODELPART_01);
partdata = modelGetNodeData(model, node);
if (partdata->visible.u32 == 0) {
canhide = false;
}
}
if (playercount >= 2) {
canhide = false;
}
if (canhide) {
doorDeactivatePortal(doorobj);
} else {
doorActivatePortal(doorobj);
}
}
}
GLOBAL_ASM(
glabel func0f077448
@ -28559,7 +28510,7 @@ s32 objTick(struct prop *prop)
if (obj->type == OBJTYPE_TINTEDGLASS) {
func0f07e0b8(prop, playercount, &sp564);
} else if (obj->type == OBJTYPE_DOOR) {
func0f07731c(prop, playercount);
doorUpdatePortalIfWindowed(prop, playercount);
}
if (sp552) {

View File

@ -1645,6 +1645,7 @@
#define MODELNODETYPE_DISPLAYLIST 0x18
#define MODELPART_LENS 0x00
#define MODELPART_01 0x01
#define MODELPART_ROBOTMUZZLEFLASHR 0x02
#define MODELPART_ROBOTMUZZLEFLASHL 0x03
#define MODELPART_HUDPIECE 0x04

View File

@ -128,7 +128,7 @@ void func0f07063c(struct prop *prop, bool arg1);
void func0f070698(struct prop *prop, bool arg1);
void func0f0706f8(struct prop *prop, bool arg1);
void func0f07079c(struct prop *prop, bool arg1);
u32 func0f07092c(void);
s32 func0f07092c(struct coord *pos, f32 arg1, f32 arg2, f32 arg3);
u32 func0f070a1c(void);
u32 func0f070bd0(void);
u32 func0f070ca0(void);
@ -154,7 +154,7 @@ u32 func0f073478(void);
u32 func0f073ae8(void);
u32 func0f073c6c(struct defaultobj *obj, bool *arg1);
void doorTick(struct prop *doorprop);
void func0f07731c(struct prop *door, s32 playercount);
void doorUpdatePortalIfWindowed(struct prop *door, s32 playercount);
u32 func0f077448(void);
void platformDisplaceProps(struct prop *platform, s16 *propnums, struct coord *prevpos, struct coord *newpos);
void liftTick(struct prop *lift);

View File

@ -1219,9 +1219,9 @@ struct doorobj { // objtype 0x01
/*0x80*/ f32 fracspeed;
/*0x84*/ s8 mode;
/*0x85*/ u8 glasshits;
/*0x86*/ u16 fadealpha;
/*0x88*/ u16 xludist;
/*0x8a*/ u16 opadist;
/*0x86*/ s16 fadealpha;
/*0x88*/ s16 xludist;
/*0x8a*/ s16 opadist;
/*0x8c*/ struct coord startpos;
/*0x98*/ u32 unk98;
/*0x9c*/ u32 unk9c;