From 2c70850a644d4f9d57968eba0dc886127128b528 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Thu, 23 Jan 2020 19:02:42 +1000 Subject: [PATCH] Decompile doorActivate --- src/game/game_066310.c | 68 ++++++++++++---------------------- src/include/constants.h | 2 +- src/include/game/game_066310.h | 2 +- 3 files changed, 25 insertions(+), 47 deletions(-) diff --git a/src/game/game_066310.c b/src/game/game_066310.c index 1bbcd5261..9fae71c5e 100644 --- a/src/game/game_066310.c +++ b/src/game/game_066310.c @@ -46401,51 +46401,29 @@ void doorSetMode(struct doorobj *door, s32 newmode) } } -GLOBAL_ASM( -glabel doorActivate -/* f08e488: 27bdffd8 */ addiu $sp,$sp,-40 -/* f08e48c: afbf0024 */ sw $ra,0x24($sp) -/* f08e490: afb20020 */ sw $s2,0x20($sp) -/* f08e494: afb1001c */ sw $s1,0x1c($sp) -/* f08e498: afb00018 */ sw $s0,0x18($sp) -/* f08e49c: 8c8e000c */ lw $t6,0xc($a0) -/* f08e4a0: 00808825 */ or $s1,$a0,$zero -/* f08e4a4: 00a09025 */ or $s2,$a1,$zero -/* f08e4a8: 000e7840 */ sll $t7,$t6,0x1 -/* f08e4ac: 05e10008 */ bgez $t7,.L0f08e4d0 -/* f08e4b0: 24010001 */ addiu $at,$zero,0x1 -/* f08e4b4: 14a10006 */ bne $a1,$at,.L0f08e4d0 -/* f08e4b8: 00000000 */ sll $zero,$zero,0x0 -/* f08e4bc: 80980084 */ lb $t8,0x84($a0) -/* f08e4c0: 24120002 */ addiu $s2,$zero,0x2 -/* f08e4c4: 17000002 */ bnez $t8,.L0f08e4d0 -/* f08e4c8: 00000000 */ sll $zero,$zero,0x0 -/* f08e4cc: 24050003 */ addiu $a1,$zero,0x3 -.L0f08e4d0: -/* f08e4d0: 0fc238e9 */ jal doorSetMode -/* f08e4d4: 02202025 */ or $a0,$s1,$zero -/* f08e4d8: 8e3000bc */ lw $s0,0xbc($s1) -/* f08e4dc: 5200000b */ beqzl $s0,.L0f08e50c -/* f08e4e0: 8fbf0024 */ lw $ra,0x24($sp) -/* f08e4e4: 12110008 */ beq $s0,$s1,.L0f08e508 -/* f08e4e8: 02002025 */ or $a0,$s0,$zero -.L0f08e4ec: -/* f08e4ec: 0fc238e9 */ jal doorSetMode -/* f08e4f0: 02402825 */ or $a1,$s2,$zero -/* f08e4f4: 8e1000bc */ lw $s0,0xbc($s0) -/* f08e4f8: 52000004 */ beqzl $s0,.L0f08e50c -/* f08e4fc: 8fbf0024 */ lw $ra,0x24($sp) -/* f08e500: 5611fffa */ bnel $s0,$s1,.L0f08e4ec -/* f08e504: 02002025 */ or $a0,$s0,$zero -.L0f08e508: -/* f08e508: 8fbf0024 */ lw $ra,0x24($sp) -.L0f08e50c: -/* f08e50c: 8fb00018 */ lw $s0,0x18($sp) -/* f08e510: 8fb1001c */ lw $s1,0x1c($sp) -/* f08e514: 8fb20020 */ lw $s2,0x20($sp) -/* f08e518: 03e00008 */ jr $ra -/* f08e51c: 27bd0028 */ addiu $sp,$sp,0x28 -); +void doorActivate(struct doorobj *door, s32 newmode) +{ + struct doorobj *loopdoor; + + s32 siblingmode = newmode; + + if ((door->base.flags2 & OBJECTFLAG1_40000000) && newmode == 1) { + siblingmode = 2; + + if (door->mode == 0) { + newmode = 3; + } + } + + doorSetMode(door, newmode); + + loopdoor = door->sibling; + + while (loopdoor && loopdoor != door) { + doorSetMode(loopdoor, siblingmode); + loopdoor = loopdoor->sibling; + } +} GLOBAL_ASM( glabel func0f08e520 diff --git a/src/include/constants.h b/src/include/constants.h index 2af4ab6b3..be155a8be 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -665,7 +665,7 @@ #define OBJECTFLAG1_08000000 0x08000000 // Locked door? #define OBJECTFLAG1_10000000 0x10000000 // Locked door? #define OBJECTFLAG1_20000000 0x20000000 // Locked door? Or indestructible by counter op? -#define OBJECTFLAG1_40000000 0x40000000 // Not used in scripts +#define OBJECTFLAG1_40000000 0x40000000 // Used by doors #define OBJECTFLAG1_80000000 0x80000000 // Attack Ship glass // obj->flags3 diff --git a/src/include/game/game_066310.h b/src/include/game/game_066310.h index e2cd005ff..8fa170f36 100644 --- a/src/include/game/game_066310.h +++ b/src/include/game/game_066310.h @@ -307,7 +307,7 @@ u32 decodeXorAaaaaaaa(u32 value); u32 func0f08e224(void); void func0f08e2ac(struct doorobj *door); void doorSetMode(struct doorobj *door, s32 newmode); -u32 doorActivate(struct defaultobj *obj, u32 arg1); +void doorActivate(struct doorobj *door, s32 newmode); u32 func0f08e520(void); u32 func0f08e564(void); u32 func0f08e5a8(void);