diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index d6a82b61e..e0ee5fd8a 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -10907,7 +10907,7 @@ bool aiSetPortalFlag(void) u8 *cmd = g_Vars.ailist + g_Vars.aioffset; s16 portalnum = cmd[3] | (cmd[2] << 8); - g_PortalSomethings[portalnum].flags |= cmd[4]; + g_Portals[portalnum].flags |= cmd[4]; g_Vars.aioffset += 5; return false; diff --git a/src/game/data/data_020df0.c b/src/game/data/data_020df0.c index 848fc786b..3ac1ae41e 100644 --- a/src/game/data/data_020df0.c +++ b/src/game/data/data_020df0.c @@ -7045,7 +7045,7 @@ u32 var8007fc10 = 0x00000000; u32 var8007fc14 = 0x00000000; u32 var8007fc18 = 0x01000100; u32 var8007fc1c = 0x00000000; -u32 var8007fc20 = 0x00000001; +s32 var8007fc20 = 0x00000001; u32 var8007fc24 = 0x800a4910; u32 var8007fc28 = 0x00000000; u32 var8007fc2c = 0x00000000; @@ -7053,7 +7053,7 @@ u32 var8007fc30 = 0x00000000; u32 var8007fc34 = 0x00000000; u32 var8007fc38 = 0x00000000; u16 var8007fc3c = 0xfffe; -s32 g_NumPortals = 0; +s32 g_NumPortalThings = 0; u32 var8007fc44 = 0xffffffff; u32 var8007fc48 = 0xffff0000; u32 var8007fc4c = 0x00000000; @@ -7080,7 +7080,7 @@ u32 var8007fc9c = 0x00000000; u32 var8007fca0 = 0x00000000; u32 var8007fca4 = 0x00000000; u32 var8007fca8 = 0x00000000; -u32 var8007fcac = 0x00000000; +u32 g_PortalMode = 0x00000000; u32 var8007fcb0 = 0x00000190; u32 var8007fcb4 = 0x00000000; u32 var8007fcb8 = 0x00000000; diff --git a/src/game/dlights.c b/src/game/dlights.c index e67d739e0..b81595054 100644 --- a/src/game/dlights.c +++ b/src/game/dlights.c @@ -1481,8 +1481,8 @@ glabel func0f001c0c /* f001c3c: 3c018006 */ lui $at,%hi(var80061440) /* f001c40: 0fc008ee */ jal func0f0023b8 /* f001c44: ac201440 */ sw $zero,%lo(var80061440)($at) -/* f001c48: 3c17800a */ lui $s7,%hi(g_PortalSomethings) -/* f001c4c: 26f74cc8 */ addiu $s7,$s7,%lo(g_PortalSomethings) +/* f001c48: 3c17800a */ lui $s7,%hi(g_Portals) +/* f001c4c: 26f74cc8 */ addiu $s7,$s7,%lo(g_Portals) /* f001c50: 8ee30000 */ lw $v1,0x0($s7) /* f001c54: 3c10800a */ lui $s0,%hi(var8009cadc) /* f001c58: 2610cadc */ addiu $s0,$s0,%lo(var8009cadc) @@ -2357,8 +2357,8 @@ glabel func0f002844 /* f0028a0: afae0060 */ sw $t6,0x60($sp) /* f0028a4: 10e1000c */ beq $a3,$at,.L0f0028d8 /* f0028a8: ac580000 */ sw $t8,0x0($v0) -/* f0028ac: 3c08800a */ lui $t0,%hi(g_PortalSomethings) -/* f0028b0: 8d084cc8 */ lw $t0,%lo(g_PortalSomethings)($t0) +/* f0028ac: 3c08800a */ lui $t0,%hi(g_Portals) +/* f0028b0: 8d084cc8 */ lw $t0,%lo(g_Portals)($t0) /* f0028b4: 000748c0 */ sll $t1,$a3,0x3 /* f0028b8: 01091021 */ addu $v0,$t0,$t1 /* f0028bc: 84430002 */ lh $v1,0x2($v0) @@ -2397,14 +2397,14 @@ glabel func0f002844 /* f002938: 01f94021 */ addu $t0,$t7,$t9 /* f00293c: 01144821 */ addu $t1,$t0,$s4 /* f002940: 85310000 */ lh $s1,0x0($t1) -/* f002944: 3c0e800a */ lui $t6,%hi(g_PortalSomethings) +/* f002944: 3c0e800a */ lui $t6,%hi(g_Portals) /* f002948: 8faf0060 */ lw $t7,0x60($sp) /* f00294c: 00115880 */ sll $t3,$s1,0x2 /* f002950: 014b6021 */ addu $t4,$t2,$t3 /* f002954: 8d8d0000 */ lw $t5,0x0($t4) /* f002958: 11a00037 */ beqz $t5,.L0f002a38 /* f00295c: 00000000 */ sll $zero,$zero,0x0 -/* f002960: 8dce4cc8 */ lw $t6,%lo(g_PortalSomethings)($t6) +/* f002960: 8dce4cc8 */ lw $t6,%lo(g_Portals)($t6) /* f002964: 0011c0c0 */ sll $t8,$s1,0x3 /* f002968: 02a02025 */ or $a0,$s5,$zero /* f00296c: 01d81021 */ addu $v0,$t6,$t8 @@ -5240,8 +5240,8 @@ glabel func0f00505c /* f0050dc: afad0044 */ sw $t5,0x44($sp) .L0f0050e0: /* f0050e0: 8fb90070 */ lw $t9,0x70($sp) -/* f0050e4: 3c0e800a */ lui $t6,%hi(g_PortalSomethings) -/* f0050e8: 8dce4cc8 */ lw $t6,%lo(g_PortalSomethings)($t6) +/* f0050e4: 3c0e800a */ lui $t6,%hi(g_Portals) +/* f0050e8: 8dce4cc8 */ lw $t6,%lo(g_Portals)($t6) /* f0050ec: 8faf0044 */ lw $t7,0x44($sp) /* f0050f0: 0000f025 */ or $s8,$zero,$zero /* f0050f4: 13200003 */ beqz $t9,.L0f005104 diff --git a/src/game/game_129900.c b/src/game/game_129900.c index b3f3a5355..a5dd8e5b9 100644 --- a/src/game/game_129900.c +++ b/src/game/game_129900.c @@ -803,8 +803,8 @@ glabel var7f1b5584 /* f12a530: 10400168 */ beqz $v0,.L0f12aad4 /* f12a534: 8faa0158 */ lw $t2,0x158($sp) /* f12a538: 8fa50118 */ lw $a1,0x118($sp) -/* f12a53c: 3c0c800a */ lui $t4,%hi(g_PortalSomethings) -/* f12a540: 8d8c4cc8 */ lw $t4,%lo(g_PortalSomethings)($t4) +/* f12a53c: 3c0c800a */ lui $t4,%hi(g_Portals) +/* f12a540: 8d8c4cc8 */ lw $t4,%lo(g_Portals)($t4) /* f12a544: 240fffff */ addiu $t7,$zero,-1 /* f12a548: 0005c8c0 */ sll $t9,$a1,0x3 /* f12a54c: a7af00c4 */ sh $t7,0xc4($sp) @@ -1059,8 +1059,8 @@ glabel var7f1b5584 /* f12a8ec: 4610303e */ c.le.s $f6,$f16 /* f12a8f0: 00000000 */ sll $zero,$zero,0x0 /* f12a8f4: 45000027 */ bc1f .L0f12a994 -/* f12a8f8: 3c0f800a */ lui $t7,%hi(g_PortalSomethings) -/* f12a8fc: 8def4cc8 */ lw $t7,%lo(g_PortalSomethings)($t7) +/* f12a8f8: 3c0f800a */ lui $t7,%hi(g_Portals) +/* f12a8fc: 8def4cc8 */ lw $t7,%lo(g_Portals)($t7) /* f12a900: 001060c0 */ sll $t4,$s0,0x3 /* f12a904: 87ad00c6 */ lh $t5,0xc6($sp) /* f12a908: 01ec1021 */ addu $v0,$t7,$t4 diff --git a/src/game/game_157db0.c b/src/game/game_157db0.c index 5b5ee2c2b..2c0e5977d 100644 --- a/src/game/game_157db0.c +++ b/src/game/game_157db0.c @@ -3739,8 +3739,8 @@ glabel func0f15b23c GLOBAL_ASM( glabel func0f15b274 /* f15b274: 27bdff50 */ addiu $sp,$sp,-176 -/* f15b278: 3c02800a */ lui $v0,%hi(g_PortalSomethings) -/* f15b27c: 8c424cc8 */ lw $v0,%lo(g_PortalSomethings)($v0) +/* f15b278: 3c02800a */ lui $v0,%hi(g_Portals) +/* f15b27c: 8c424cc8 */ lw $v0,%lo(g_Portals)($v0) /* f15b280: 000470c0 */ sll $t6,$a0,0x3 /* f15b284: afbf005c */ sw $ra,0x5c($sp) /* f15b288: afb40058 */ sw $s4,0x58($sp) @@ -3833,8 +3833,8 @@ glabel func0f15b274 /* f15b3d8: 8fb40058 */ lw $s4,0x58($sp) /* f15b3dc: 03e00008 */ jr $ra /* f15b3e0: 27bd00b0 */ addiu $sp,$sp,0xb0 -/* f15b3e4: 3c03800a */ lui $v1,%hi(g_PortalSomethings) -/* f15b3e8: 8c634cc8 */ lw $v1,%lo(g_PortalSomethings)($v1) +/* f15b3e4: 3c03800a */ lui $v1,%hi(g_Portals) +/* f15b3e8: 8c634cc8 */ lw $v1,%lo(g_Portals)($v1) /* f15b3ec: 000470c0 */ sll $t6,$a0,0x3 /* f15b3f0: 006e7821 */ addu $t7,$v1,$t6 /* f15b3f4: 95f80000 */ lhu $t8,0x0($t7) @@ -4151,10 +4151,10 @@ glabel func0f15b534 /* f15b870: 8c7802bc */ lw $t8,0x2bc($v1) /* f15b874: 8caa0008 */ lw $t2,0x8($a1) .L0f15b878: -/* f15b878: 3c01800a */ lui $at,%hi(g_PortalSomethings) +/* f15b878: 3c01800a */ lui $at,%hi(g_Portals) /* f15b87c: 01445821 */ addu $t3,$t2,$a0 /* f15b880: 01676021 */ addu $t4,$t3,$a3 -/* f15b884: ac2c4cc8 */ sw $t4,%lo(g_PortalSomethings)($at) +/* f15b884: ac2c4cc8 */ sw $t4,%lo(g_Portals)($at) /* f15b888: 8ca2000c */ lw $v0,0xc($a1) /* f15b88c: 3c01800a */ lui $at,%hi(var800a4cd4) /* f15b890: 14400004 */ bnez $v0,.L0f15b8a4 @@ -4359,8 +4359,8 @@ glabel var7f1b75d0 /* f15bb50: 00000000 */ sll $zero,$zero,0x0 /* f15bb54: 3c0e800a */ lui $t6,%hi(var800a4920) /* f15bb58: 8dce4920 */ lw $t6,%lo(var800a4920)($t6) -/* f15bb5c: 3c17800a */ lui $s7,%hi(g_PortalSomethings) -/* f15bb60: 26f74cc8 */ addiu $s7,$s7,%lo(g_PortalSomethings) +/* f15bb5c: 3c17800a */ lui $s7,%hi(g_Portals) +/* f15bb60: 26f74cc8 */ addiu $s7,$s7,%lo(g_Portals) /* f15bb64: 15c00324 */ bnez $t6,.L0f15c7f8 /* f15bb68: 24050004 */ addiu $a1,$zero,0x4 /* f15bb6c: 8ef00000 */ lw $s0,0x0($s7) @@ -4376,15 +4376,15 @@ glabel var7f1b75d0 /* f15bb90: 94580008 */ lhu $t8,0x8($v0) .L0f15bb94: /* f15bb94: 001ec900 */ sll $t9,$s8,0x4 -/* f15bb98: 3c028008 */ lui $v0,%hi(g_NumPortals) +/* f15bb98: 3c028008 */ lui $v0,%hi(g_NumPortalThings) /* f15bb9c: 2724000f */ addiu $a0,$t9,0xf -/* f15bba0: 2442fc40 */ addiu $v0,$v0,%lo(g_NumPortals) +/* f15bba0: 2442fc40 */ addiu $v0,$v0,%lo(g_NumPortalThings) /* f15bba4: 348e000f */ ori $t6,$a0,0xf /* f15bba8: ac5e0000 */ sw $s8,0x0($v0) /* f15bbac: 0c0048f2 */ jal malloc /* f15bbb0: 39c4000f */ xori $a0,$t6,0xf -/* f15bbb4: 3c01800a */ lui $at,%hi(g_Portals) -/* f15bbb8: ac224cec */ sw $v0,%lo(g_Portals)($at) +/* f15bbb4: 3c01800a */ lui $at,%hi(g_PortalThings) +/* f15bbb8: ac224cec */ sw $v0,%lo(g_PortalThings)($at) /* f15bbbc: 001e20c0 */ sll $a0,$s8,0x3 /* f15bbc0: 24840008 */ addiu $a0,$a0,0x8 /* f15bbc4: 8ef00000 */ lw $s0,0x0($s7) @@ -5645,10 +5645,10 @@ void func0f15cd28(void) { s32 i; - for (i = 0; i < g_NumPortals; i++) { - g_Portals[i].unk06 = -1; - g_Portals[i].unk04 = 0; - g_Portals[i].unk00 = 0; + for (i = 0; i < g_NumPortalThings; i++) { + g_PortalThings[i].unk06 = -1; + g_PortalThings[i].unk04 = 0; + g_PortalThings[i].unk00 = 0; } } @@ -5908,8 +5908,8 @@ glabel func0f15d08c GLOBAL_ASM( glabel func0f15d10c -/* f15d10c: 3c07800a */ lui $a3,%hi(g_Portals) -/* f15d110: 24e74cec */ addiu $a3,$a3,%lo(g_Portals) +/* f15d10c: 3c07800a */ lui $a3,%hi(g_PortalThings) +/* f15d110: 24e74cec */ addiu $a3,$a3,%lo(g_PortalThings) /* f15d114: 27bdfd00 */ addiu $sp,$sp,-768 /* f15d118: 8cee0000 */ lw $t6,0x0($a3) /* f15d11c: afb20020 */ sw $s2,0x20($sp) @@ -6126,8 +6126,8 @@ glabel func0f15d10c /* f15d41c: 150cffde */ bne $t0,$t4,.L0f15d398 /* f15d420: 254a0004 */ addiu $t2,$t2,0x4 .L0f15d424: -/* f15d424: 3c03800a */ lui $v1,%hi(g_Portals) -/* f15d428: 24634cec */ addiu $v1,$v1,%lo(g_Portals) +/* f15d424: 3c03800a */ lui $v1,%hi(g_PortalThings) +/* f15d428: 24634cec */ addiu $v1,$v1,%lo(g_PortalThings) /* f15d42c: 8c6f0000 */ lw $t7,0x0($v1) /* f15d430: 862e0000 */ lh $t6,0x0($s1) /* f15d434: 01601025 */ or $v0,$t3,$zero @@ -6433,8 +6433,8 @@ glabel func0f15d808 GLOBAL_ASM( glabel func0f15d870 -/* f15d870: 3c02800a */ lui $v0,%hi(g_PortalSomethings) -/* f15d874: 8c424cc8 */ lw $v0,%lo(g_PortalSomethings)($v0) +/* f15d870: 3c02800a */ lui $v0,%hi(g_Portals) +/* f15d874: 8c424cc8 */ lw $v0,%lo(g_Portals)($v0) /* f15d878: 00803825 */ or $a3,$a0,$zero /* f15d87c: 00001825 */ or $v1,$zero,$zero /* f15d880: 944e0000 */ lhu $t6,0x0($v0) @@ -11259,9 +11259,9 @@ glabel func0f161c08 /* f161c48: 846c000e */ lh $t4,0xe($v1) /* f161c4c: 8d6b4ce0 */ lw $t3,%lo(var800a4ce0)($t3) /* f161c50: 3c08800a */ lui $t0,%hi(var800a4ccc) -/* f161c54: 3c0a800a */ lui $t2,%hi(g_PortalSomethings) +/* f161c54: 3c0a800a */ lui $t2,%hi(g_Portals) /* f161c58: 000c6840 */ sll $t5,$t4,0x1 -/* f161c5c: 254a4cc8 */ addiu $t2,$t2,%lo(g_PortalSomethings) +/* f161c5c: 254a4cc8 */ addiu $t2,$t2,%lo(g_Portals) /* f161c60: 8d084ccc */ lw $t0,%lo(var800a4ccc)($t0) /* f161c64: c4e20008 */ lwc1 $f2,0x8($a3) /* f161c68: c4ec0000 */ lwc1 $f12,0x0($a3) @@ -11350,7 +11350,7 @@ glabel func0f161d30 /* f161d94: e7a60074 */ swc1 $f6,0x74($sp) /* f161d98: c4c80034 */ lwc1 $f8,0x34($a2) /* f161d9c: 3c09800a */ lui $t1,%hi(var800a4ce0) -/* f161da0: 3c08800a */ lui $t0,%hi(g_PortalSomethings) +/* f161da0: 3c08800a */ lui $t0,%hi(g_Portals) /* f161da4: e7a80078 */ swc1 $f8,0x78($sp) /* f161da8: c4ca0038 */ lwc1 $f10,0x38($a2) /* f161dac: 3c0a800a */ lui $t2,%hi(var800a4ccc) @@ -11363,7 +11363,7 @@ glabel func0f161d30 /* f161dc8: 24020001 */ addiu $v0,$zero,0x1 /* f161dcc: 4480b000 */ mtc1 $zero,$f22 /* f161dd0: 8d294ce0 */ lw $t1,%lo(var800a4ce0)($t1) -/* f161dd4: 8d084cc8 */ lw $t0,%lo(g_PortalSomethings)($t0) +/* f161dd4: 8d084cc8 */ lw $t0,%lo(g_Portals)($t0) /* f161dd8: 8d4a4ccc */ lw $t2,%lo(var800a4ccc)($t2) /* f161ddc: 84ce000e */ lh $t6,0xe($a2) .L0f161de0: @@ -11888,7 +11888,7 @@ glabel func0f162194 ); GLOBAL_ASM( -glabel func0f16254c +glabel portalPushValue /* f16254c: 3c058008 */ lui $a1,%hi(var8007fca8) /* f162550: 24a5fca8 */ addiu $a1,$a1,%lo(var8007fca8) /* f162554: 8ca30000 */ lw $v1,0x0($a1) @@ -11907,7 +11907,7 @@ glabel func0f16254c ); GLOBAL_ASM( -glabel func0f162588 +glabel portalPopValue /* f162588: 3c048008 */ lui $a0,%hi(var8007fca8) /* f16258c: 2484fca8 */ addiu $a0,$a0,%lo(var8007fca8) /* f162590: 8c8e0000 */ lw $t6,0x0($a0) @@ -11940,125 +11940,125 @@ glabel func0f1625bc ); GLOBAL_ASM( -glabel func0f1625ec +glabel portalCommandExecute .late_rodata glabel var7f1b75e0 -.word func0f1625ec+0x614 # f162c00 +.word portalCommandExecute+0x614 # f162c00 glabel var7f1b75e4 -.word func0f1625ec+0x650 # f162c3c +.word portalCommandExecute+0x650 # f162c3c glabel var7f1b75e8 -.word func0f1625ec+0x638 # f162c24 +.word portalCommandExecute+0x638 # f162c24 glabel var7f1b75ec -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b75f0 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b75f4 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b75f8 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b75fc -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7600 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7604 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7608 -.word func0f1625ec+0x674 # f162c60 +.word portalCommandExecute+0x674 # f162c60 glabel var7f1b760c -.word func0f1625ec+0x6ac # f162c98 +.word portalCommandExecute+0x6ac # f162c98 glabel var7f1b7610 -.word func0f1625ec+0x6c4 # f162cb0 +.word portalCommandExecute+0x6c4 # f162cb0 glabel var7f1b7614 -.word func0f1625ec+0xb8 # f1626a4 +.word portalCommandExecute+0xb8 # f1626a4 glabel var7f1b7618 -.word func0f1625ec+0xc0 # f1626ac +.word portalCommandExecute+0xc0 # f1626ac glabel var7f1b761c -.word func0f1625ec+0xe0 # f1626cc +.word portalCommandExecute+0xe0 # f1626cc glabel var7f1b7620 -.word func0f1625ec+0x100 # f1626ec +.word portalCommandExecute+0x100 # f1626ec glabel var7f1b7624 -.word func0f1625ec+0x130 # f16271c +.word portalCommandExecute+0x130 # f16271c glabel var7f1b7628 -.word func0f1625ec+0x160 # f16274c +.word portalCommandExecute+0x160 # f16274c glabel var7f1b762c -.word func0f1625ec+0x188 # f162774 +.word portalCommandExecute+0x188 # f162774 glabel var7f1b7630 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7634 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7638 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b763c -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7640 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7644 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7648 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b764c -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7650 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7654 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7658 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b765c -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7660 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7664 -.word func0f1625ec+0x1b8 # f1627a4 +.word portalCommandExecute+0x1b8 # f1627a4 glabel var7f1b7668 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b766c -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7670 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7674 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7678 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b767c -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7680 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7684 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b7688 -.word func0f1625ec+0x6d4 # f162cc0 +.word portalCommandExecute+0x6d4 # f162cc0 glabel var7f1b768c -.word func0f1625ec+0x1fc # f1627e8 +.word portalCommandExecute+0x1fc # f1627e8 glabel var7f1b7690 -.word func0f1625ec+0x26c # f162858 +.word portalCommandExecute+0x26c # f162858 glabel var7f1b7694 -.word func0f1625ec+0x418 # f162a04 +.word portalCommandExecute+0x418 # f162a04 glabel var7f1b7698 -.word func0f1625ec+0x5f8 # f162be4 +.word portalCommandExecute+0x5f8 # f162be4 glabel var7f1b769c -.word func0f1625ec+0x2e8 # f1628d4 +.word portalCommandExecute+0x2e8 # f1628d4 glabel var7f1b76a0 -.word func0f1625ec+0x374 # f162960 +.word portalCommandExecute+0x374 # f162960 glabel var7f1b76a4 -.word func0f1625ec+0x484 # f162a70 +.word portalCommandExecute+0x484 # f162a70 glabel var7f1b76a8 -.word func0f1625ec+0x4c8 # f162ab4 +.word portalCommandExecute+0x4c8 # f162ab4 glabel var7f1b76ac -.word func0f1625ec+0x530 # f162b1c +.word portalCommandExecute+0x530 # f162b1c glabel var7f1b76b0 -.word func0f1625ec+0x540 # f162b2c +.word portalCommandExecute+0x540 # f162b2c glabel var7f1b76b4 -.word func0f1625ec+0x550 # f162b3c +.word portalCommandExecute+0x550 # f162b3c glabel var7f1b76b8 -.word func0f1625ec+0x56c # f162b58 +.word portalCommandExecute+0x56c # f162b58 glabel var7f1b76bc -.word func0f1625ec+0x5bc # f162ba8 +.word portalCommandExecute+0x5bc # f162ba8 .text /* f1625ec: 27bdffa0 */ addiu $sp,$sp,-96 /* f1625f0: afb2001c */ sw $s2,0x1c($sp) /* f1625f4: afb00014 */ sw $s0,0x14($sp) -/* f1625f8: 3c01800a */ lui $at,%hi(var800a65d0) +/* f1625f8: 3c01800a */ lui $at,%hi(g_PortalDisableParentExec) /* f1625fc: 00808025 */ or $s0,$a0,$zero /* f162600: 00a09025 */ or $s2,$a1,$zero /* f162604: afbf0034 */ sw $ra,0x34($sp) @@ -12069,18 +12069,18 @@ glabel var7f1b76bc /* f162618: afb30020 */ sw $s3,0x20($sp) /* f16261c: afb10018 */ sw $s1,0x18($sp) /* f162620: 14800003 */ bnez $a0,.L0f162630 -/* f162624: ac2065d0 */ sw $zero,%lo(var800a65d0)($at) +/* f162624: ac2065d0 */ sw $zero,%lo(g_PortalDisableParentExec)($at) /* f162628: 100001a6 */ beqz $zero,.L0f162cc4 /* f16262c: 00801025 */ or $v0,$a0,$zero .L0f162630: -/* f162630: 3c17800a */ lui $s7,%hi(g_PortalSomethings) +/* f162630: 3c17800a */ lui $s7,%hi(g_Portals) /* f162634: 3c15800a */ lui $s5,%hi(var800a65c0) /* f162638: 3c14800a */ lui $s4,%hi(g_RoomPtrs) -/* f16263c: 3c138008 */ lui $s3,%hi(var8007fcac) -/* f162640: 2673fcac */ addiu $s3,$s3,%lo(var8007fcac) +/* f16263c: 3c138008 */ lui $s3,%hi(g_PortalMode) +/* f162640: 2673fcac */ addiu $s3,$s3,%lo(g_PortalMode) /* f162644: 26944928 */ addiu $s4,$s4,%lo(g_RoomPtrs) /* f162648: 26b565c0 */ addiu $s5,$s5,%lo(var800a65c0) -/* f16264c: 26f74cc8 */ addiu $s7,$s7,%lo(g_PortalSomethings) +/* f16264c: 26f74cc8 */ addiu $s7,$s7,%lo(g_Portals) /* f162650: 24160001 */ addiu $s6,$zero,0x1 .L0f162654: /* f162654: 92040000 */ lbu $a0,0x0($s0) @@ -12109,7 +12109,7 @@ glabel var7f1b76bc /* f1626a8: 02001025 */ or $v0,$s0,$zero /* f1626ac: 52400004 */ beqzl $s2,.L0f1626c0 /* f1626b0: 92180001 */ lbu $t8,0x1($s0) -/* f1626b4: 0fc58953 */ jal func0f16254c +/* f1626b4: 0fc58953 */ jal portalPushValue /* f1626b8: 8e040004 */ lw $a0,0x4($s0) /* f1626bc: 92180001 */ lbu $t8,0x1($s0) .L0f1626c0: @@ -12118,7 +12118,7 @@ glabel var7f1b76bc /* f1626c8: 02198021 */ addu $s0,$s0,$t9 /* f1626cc: 52400004 */ beqzl $s2,.L0f1626e0 /* f1626d0: 92080001 */ lbu $t0,0x1($s0) -/* f1626d4: 0fc58962 */ jal func0f162588 +/* f1626d4: 0fc58962 */ jal portalPopValue /* f1626d8: 00000000 */ sll $zero,$zero,0x0 /* f1626dc: 92080001 */ lbu $t0,0x1($s0) .L0f1626e0: @@ -12127,11 +12127,11 @@ glabel var7f1b76bc /* f1626e8: 02098021 */ addu $s0,$s0,$t1 /* f1626ec: 52400008 */ beqzl $s2,.L0f162710 /* f1626f0: 920a0001 */ lbu $t2,0x1($s0) -/* f1626f4: 0fc58962 */ jal func0f162588 +/* f1626f4: 0fc58962 */ jal portalPopValue /* f1626f8: 00000000 */ sll $zero,$zero,0x0 -/* f1626fc: 0fc58962 */ jal func0f162588 +/* f1626fc: 0fc58962 */ jal portalPopValue /* f162700: 00408825 */ or $s1,$v0,$zero -/* f162704: 0fc58953 */ jal func0f16254c +/* f162704: 0fc58953 */ jal portalPushValue /* f162708: 00512024 */ and $a0,$v0,$s1 /* f16270c: 920a0001 */ lbu $t2,0x1($s0) .L0f162710: @@ -12140,11 +12140,11 @@ glabel var7f1b76bc /* f162718: 020b8021 */ addu $s0,$s0,$t3 /* f16271c: 52400008 */ beqzl $s2,.L0f162740 /* f162720: 920c0001 */ lbu $t4,0x1($s0) -/* f162724: 0fc58962 */ jal func0f162588 +/* f162724: 0fc58962 */ jal portalPopValue /* f162728: 00000000 */ sll $zero,$zero,0x0 -/* f16272c: 0fc58962 */ jal func0f162588 +/* f16272c: 0fc58962 */ jal portalPopValue /* f162730: 00408825 */ or $s1,$v0,$zero -/* f162734: 0fc58953 */ jal func0f16254c +/* f162734: 0fc58953 */ jal portalPushValue /* f162738: 00512025 */ or $a0,$v0,$s1 /* f16273c: 920c0001 */ lbu $t4,0x1($s0) .L0f162740: @@ -12153,9 +12153,9 @@ glabel var7f1b76bc /* f162748: 020d8021 */ addu $s0,$s0,$t5 /* f16274c: 52400006 */ beqzl $s2,.L0f162768 /* f162750: 920e0001 */ lbu $t6,0x1($s0) -/* f162754: 0fc58962 */ jal func0f162588 +/* f162754: 0fc58962 */ jal portalPopValue /* f162758: 00000000 */ sll $zero,$zero,0x0 -/* f16275c: 0fc58953 */ jal func0f16254c +/* f16275c: 0fc58953 */ jal portalPushValue /* f162760: 2c440001 */ sltiu $a0,$v0,0x1 /* f162764: 920e0001 */ lbu $t6,0x1($s0) .L0f162768: @@ -12164,11 +12164,11 @@ glabel var7f1b76bc /* f162770: 020f8021 */ addu $s0,$s0,$t7 /* f162774: 52400008 */ beqzl $s2,.L0f162798 /* f162778: 92180001 */ lbu $t8,0x1($s0) -/* f16277c: 0fc58962 */ jal func0f162588 +/* f16277c: 0fc58962 */ jal portalPopValue /* f162780: 00000000 */ sll $zero,$zero,0x0 -/* f162784: 0fc58962 */ jal func0f162588 +/* f162784: 0fc58962 */ jal portalPopValue /* f162788: 00408825 */ or $s1,$v0,$zero -/* f16278c: 0fc58953 */ jal func0f16254c +/* f16278c: 0fc58953 */ jal portalPushValue /* f162790: 00512026 */ xor $a0,$v0,$s1 /* f162794: 92180001 */ lbu $t8,0x1($s0) .L0f162798: @@ -12187,7 +12187,7 @@ glabel var7f1b76bc /* f1627c8: 0122202a */ slt $a0,$t1,$v0 /* f1627cc: 38840001 */ xori $a0,$a0,0x1 .L0f1627d0: -/* f1627d0: 0fc58953 */ jal func0f16254c +/* f1627d0: 0fc58953 */ jal portalPushValue /* f1627d4: 00000000 */ sll $zero,$zero,0x0 .L0f1627d8: /* f1627d8: 920a0001 */ lbu $t2,0x1($s0) @@ -12450,7 +12450,7 @@ glabel var7f1b76bc /* f162b88: 2c980001 */ sltiu $t8,$a0,0x1 /* f162b8c: 2f040001 */ sltiu $a0,$t8,0x1 .L0f162b90: -/* f162b90: 0fc58953 */ jal func0f16254c +/* f162b90: 0fc58953 */ jal portalPushValue /* f162b94: 00000000 */ sll $zero,$zero,0x0 /* f162b98: 92190001 */ lbu $t9,0x1($s0) .L0f162b9c: @@ -12484,15 +12484,15 @@ glabel var7f1b76bc /* f162c00: 92190001 */ lbu $t9,0x1($s0) /* f162c04: 02402825 */ or $a1,$s2,$zero /* f162c08: 001940c0 */ sll $t0,$t9,0x3 -/* f162c0c: 0fc5897b */ jal func0f1625ec +/* f162c0c: 0fc5897b */ jal portalCommandExecute /* f162c10: 01102021 */ addu $a0,$t0,$s0 /* f162c14: 904a0001 */ lbu $t2,0x1($v0) /* f162c18: 000a48c0 */ sll $t1,$t2,0x3 /* f162c1c: 1000fe8d */ beqz $zero,.L0f162654 /* f162c20: 00498021 */ addu $s0,$v0,$t1 /* f162c24: 920b0001 */ lbu $t3,0x1($s0) -/* f162c28: 3c01800a */ lui $at,%hi(var800a65d0) -/* f162c2c: ac2065d0 */ sw $zero,%lo(var800a65d0)($at) +/* f162c28: 3c01800a */ lui $at,%hi(g_PortalDisableParentExec) +/* f162c2c: ac2065d0 */ sw $zero,%lo(g_PortalDisableParentExec)($at) /* f162c30: 000b60c0 */ sll $t4,$t3,0x3 /* f162c34: 10000023 */ beqz $zero,.L0f162cc4 /* f162c38: 020c1021 */ addu $v0,$s0,$t4 @@ -12502,18 +12502,18 @@ glabel var7f1b76bc /* f162c48: 000d70c0 */ sll $t6,$t5,0x3 /* f162c4c: 1040fe81 */ beqz $v0,.L0f162654 /* f162c50: 020e8021 */ addu $s0,$s0,$t6 -/* f162c54: 3c01800a */ lui $at,%hi(var800a65d0) +/* f162c54: 3c01800a */ lui $at,%hi(g_PortalDisableParentExec) /* f162c58: 1000fe7e */ beqz $zero,.L0f162654 -/* f162c5c: ac3665d0 */ sw $s6,%lo(var800a65d0)($at) -/* f162c60: 0fc58962 */ jal func0f162588 +/* f162c5c: ac3665d0 */ sw $s6,%lo(g_PortalDisableParentExec)($at) +/* f162c60: 0fc58962 */ jal portalPopValue /* f162c64: 00000000 */ sll $zero,$zero,0x0 /* f162c68: 920f0001 */ lbu $t7,0x1($s0) /* f162c6c: 00522824 */ and $a1,$v0,$s2 /* f162c70: 000fc0c0 */ sll $t8,$t7,0x3 -/* f162c74: 0fc5897b */ jal func0f1625ec +/* f162c74: 0fc5897b */ jal portalCommandExecute /* f162c78: 03102021 */ addu $a0,$t8,$s0 -/* f162c7c: 3c19800a */ lui $t9,%hi(var800a65d0) -/* f162c80: 8f3965d0 */ lw $t9,%lo(var800a65d0)($t9) +/* f162c7c: 3c19800a */ lui $t9,%hi(g_PortalDisableParentExec) +/* f162c80: 8f3965d0 */ lw $t9,%lo(g_PortalDisableParentExec)($t9) /* f162c84: 00408025 */ or $s0,$v0,$zero /* f162c88: 5320fe73 */ beqzl $t9,.L0f162658 /* f162c8c: 92040000 */ lbu $a0,0x0($s0) @@ -12545,16 +12545,226 @@ glabel var7f1b76bc /* f162cec: 27bd0060 */ addiu $sp,$sp,0x60 ); +// Mismatch because this uses s8 to store the address of box1, +// while goal just references the address directly without the register. +//struct portalcmd *portalCommandExecute(struct portalcmd *cmd, bool execute) +//{ +// g_PortalDisableParentExec = false; +// +// if (!cmd) { +// return cmd; +// } +// +// while (true) { +// switch (cmd->type) { +// case PORTALCMD_END: // 00 - f1626a4 +// return cmd; +// case PORTALCMD_PUSH: // 01 - f1626ac +// if (execute) { +// portalPushValue(cmd->param); +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_POP: // 02 - f1626cc +// if (execute) { +// portalPopValue(); +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_AND: // 03 - f1626ec +// if (execute) { +// portalPushValue(portalPopValue() & portalPopValue()); +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_OR: // 04 - f16271c +// if (execute) { +// portalPushValue(portalPopValue() | portalPopValue()); +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_NOT: // 07 - f16274c +// if (execute) { +// portalPushValue(portalPopValue() == 0); +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_XOR: // 06 - f162774 +// if (execute) { +// portalPushValue(portalPopValue() ^ portalPopValue()); +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_14: // 14 - f1627a4 - check if player is in room range +// if (execute) { +// portalPushValue(var8007fc20 >= cmd[1].param && var8007fc20 <= cmd[2].param); +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_SETMODEVIS: // 1e - f1627e8 +// if (execute) { +// var800a65c0.xmin = g_Vars.currentplayer->screenxminf; +// var800a65c0.ymin = g_Vars.currentplayer->screenyminf; +// var800a65c0.xmax = g_Vars.currentplayer->screenxmaxf; +// var800a65c0.ymax = g_Vars.currentplayer->screenymaxf; +// g_PortalMode = PORTALMODE_SHOW; +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_1F: // 1f - f162858 - set visibility to same as portal X +// if (execute) { +// if ((g_Portals[cmd[1].param].flags & PORTALFLAG_01) == 0 +// || (g_Portals[cmd[1].param].flags & PORTALFLAG_04)) { +// if (func0f15d10c(cmd[1].param, &var800a65c8) == 0) { +// g_PortalMode = PORTALMODE_HIDE; +// } else if (func0f15d570(&var800a65c0, &var800a65c8) == 0) { +// g_PortalMode = PORTALMODE_HIDE; +// } else { +// g_PortalMode = PORTALMODE_SHOW; +// } +// } +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_22: // 22 - f1628d4 - make visible if portal can view room +// if (execute) { +// if ((g_Portals[cmd[1].param].flags & PORTALFLAG_01) == 0 +// || (g_Portals[cmd[1].param].flags & PORTALFLAG_04)) { +// struct screenbox box1; +// if (func0f15d10c(cmd[1].param, &box1) && func0f15d570(&var800a65c0, &box1)) { +// if (g_PortalMode != PORTALMODE_SHOW) { +// func0f15d6c4(&var800a65c0, &box1); +// g_PortalMode = PORTALMODE_SHOW; +// } else { +// func0f15d63c(&var800a65c0, &box1); +// } +// } +// } +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_23: // 23 - f162960 - remove visibility if portal can not view room +// if (execute) { +// if (g_PortalMode == PORTALMODE_SHOW) { +// struct screenbox box2; +// if ((g_Portals[cmd[1].param].flags & PORTALFLAG_01) +// && (g_Portals[cmd[1].param].flags & PORTALFLAG_04) == 0) { +// g_PortalMode = PORTALMODE_HIDE; +// } else if (func0f15d10c(cmd[1].param, &box2) == 0) { +// g_PortalMode = PORTALMODE_HIDE; +// } else if (func0f15d570(&box2, (struct screenbox *)&g_Vars.currentplayer->screenxminf) == 0) { +// g_PortalMode = PORTALMODE_HIDE; +// } else if (func0f15d570(&var800a65c8, &box2) == 0) { +// g_PortalMode = PORTALMODE_HIDE; +// } +// } +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_20: // 20 - f162a04 - enable room X +// if (execute) { +// if (g_PortalMode == PORTALMODE_SHOW && func0f15cd90(cmd[1].param, &var800a65c0)) { +// func0f157e94(cmd[1].param, 0, &var800a65c0); +// var800a4930[var800a4bec++] = cmd[1].param; +// } +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_DISABLEROOM: // 24 - f162a70 +// if (execute) { +// g_RoomPtrs[cmd[1].param].flags |= ROOMFLAG_DISABLED; +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_DISABLEROOMRANGE: // 25 - f162ab4 +// if (execute) { +// s32 i; +// +// for (i = cmd[1].param; i <= cmd[2].param; i++) { +// g_RoomPtrs[i].flags |= ROOMFLAG_DISABLED; +// } +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_LOADROOM: // 26 - f162b1c +// cmd += cmd->len; +// break; +// case PORTALCMD_LOADROOMRANGE: // 27 - f162b2c +// cmd += cmd->len; +// break; +// case PORTALCMD_28: // 28 - f162b3c +// if (execute) { +// var800a65b8 = true; +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_29: // 29 - f162b58 - copy visible state (true/false) of portal X to stack +// if (execute) { +// portalPushValue((g_Portals[cmd[1].param].flags & PORTALFLAG_01) == 0 +// || !((g_Portals[cmd[1].param].flags & PORTALFLAG_04) == 0)); +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_2A: // 2a - f162ba8 +// if (execute) { +// g_RoomPtrs[cmd[1].param].unk07 = 0; +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_SETMODEINVIS: // 21 - f162be4 +// if (execute) { +// g_PortalMode = PORTALMODE_HIDE; +// } +// cmd += cmd->len; +// break; +// case PORTALCMD_50: // 50 - f162c00 +// cmd = portalCommandExecute(cmd + cmd->len, execute); +// cmd += cmd->len; +// break; +// case PORTALCMD_ENABLEPARENTEXEC: // 52 - f162c24 +// cmd += cmd->len; +// g_PortalDisableParentExec = false; +// return cmd; +// case PORTALCMD_51: // 51 - f162c3c +// cmd += cmd->len; +// if (execute) { +// g_PortalDisableParentExec = true; +// } +// execute = false; +// break; +// case PORTALCMD_IF: // 5a - f162c60 +// cmd = portalCommandExecute(cmd + cmd->len, portalPopValue() & execute); +// if (g_PortalDisableParentExec) { +// execute = false; +// } +// break; +// case PORTALCMD_TOGGLEEXEC: // 5b - f162c98 +// execute ^= 1; +// cmd += cmd->len; +// break; +// case PORTALCMD_ENDIF: // 5c - f162cb0 +// cmd += cmd->len; +// return cmd; +// default: +// return cmd; +// } +// } +// +// g_PortalDisableParentExec = false; +// +// return cmd; +//} + GLOBAL_ASM( glabel func0f162cf0 /* f162cf0: 27bdffe0 */ addiu $sp,$sp,-32 /* f162cf4: 3c06800a */ lui $a2,%hi(g_Vars+0x284) -/* f162cf8: 3c018008 */ lui $at,%hi(var8007fcac) +/* f162cf8: 3c018008 */ lui $at,%hi(g_PortalMode) /* f162cfc: afbf0014 */ sw $ra,0x14($sp) /* f162d00: 00803825 */ or $a3,$a0,$zero /* f162d04: 8cc6a244 */ lw $a2,%lo(g_Vars+0x284)($a2) /* f162d08: 14800003 */ bnez $a0,.L0f162d18 -/* f162d0c: ac20fcac */ sw $zero,%lo(var8007fcac)($at) +/* f162d0c: ac20fcac */ sw $zero,%lo(g_PortalMode)($at) /* f162d10: 1000001e */ beqz $zero,.L0f162d8c /* f162d14: 00801025 */ or $v0,$a0,$zero .L0f162d18: @@ -12585,7 +12795,7 @@ glabel func0f162cf0 /* f162d78: c4c417a0 */ lwc1 $f4,0x17a0($a2) /* f162d7c: 4600218d */ trunc.w.s $f6,$f4 /* f162d80: 440b3000 */ mfc1 $t3,$f6 -/* f162d84: 0fc5897b */ jal func0f1625ec +/* f162d84: 0fc5897b */ jal portalCommandExecute /* f162d88: a46b0006 */ sh $t3,0x6($v1) .L0f162d8c: /* f162d8c: 8fbf0014 */ lw $ra,0x14($sp) @@ -13154,11 +13364,11 @@ glabel func0f163528 /* f1635c4: 3c0c800a */ lui $t4,%hi(var800a4ce0) /* f1635c8: 8d8c4ce0 */ lw $t4,%lo(var800a4ce0)($t4) /* f1635cc: 000d7840 */ sll $t7,$t5,0x1 -/* f1635d0: 3c06800a */ lui $a2,%hi(g_Portals) +/* f1635d0: 3c06800a */ lui $a2,%hi(g_PortalThings) /* f1635d4: 018f7021 */ addu $t6,$t4,$t7 /* f1635d8: 01d5c021 */ addu $t8,$t6,$s5 /* f1635dc: 87130000 */ lh $s3,0x0($t8) -/* f1635e0: 24c64cec */ addiu $a2,$a2,%lo(g_Portals) +/* f1635e0: 24c64cec */ addiu $a2,$a2,%lo(g_PortalThings) /* f1635e4: 8cd90000 */ lw $t9,0x0($a2) /* f1635e8: 3c058008 */ lui $a1,%hi(var8007fc3c) /* f1635ec: 00132100 */ sll $a0,$s3,0x4 @@ -13210,8 +13420,8 @@ glabel func0f163528 /* f16369c: 8cd90000 */ lw $t9,0x0($a2) /* f1636a0: 03241821 */ addu $v1,$t9,$a0 .L0f1636a4: -/* f1636a4: 3c08800a */ lui $t0,%hi(g_PortalSomethings) -/* f1636a8: 8d084cc8 */ lw $t0,%lo(g_PortalSomethings)($t0) +/* f1636a4: 3c08800a */ lui $t0,%hi(g_Portals) +/* f1636a8: 8d084cc8 */ lw $t0,%lo(g_Portals)($t0) /* f1636ac: 001390c0 */ sll $s2,$s3,0x3 /* f1636b0: 86290000 */ lh $t1,0x0($s1) /* f1636b4: 01122821 */ addu $a1,$t0,$s2 @@ -13256,8 +13466,8 @@ glabel func0f163528 /* f163740: 86240000 */ lh $a0,0x0($s1) /* f163744: 0fc58cb5 */ jal func0f1632d4 /* f163748: 27a7005c */ addiu $a3,$sp,0x5c -/* f16374c: 3c0e800a */ lui $t6,%hi(g_PortalSomethings) -/* f163750: 8dce4cc8 */ lw $t6,%lo(g_PortalSomethings)($t6) +/* f16374c: 3c0e800a */ lui $t6,%hi(g_Portals) +/* f163750: 8dce4cc8 */ lw $t6,%lo(g_Portals)($t6) /* f163754: 01d22821 */ addu $a1,$t6,$s2 .L0f163758: /* f163758: 0010b400 */ sll $s6,$s0,0x10 @@ -13423,8 +13633,8 @@ GLOBAL_ASM( glabel func0f16397c /* f16397c: 27bdff88 */ addiu $sp,$sp,-120 /* f163980: afb70030 */ sw $s7,0x30($sp) -/* f163984: 3c17800a */ lui $s7,%hi(g_PortalSomethings) -/* f163988: 26f74cc8 */ addiu $s7,$s7,%lo(g_PortalSomethings) +/* f163984: 3c17800a */ lui $s7,%hi(g_Portals) +/* f163988: 26f74cc8 */ addiu $s7,$s7,%lo(g_Portals) /* f16398c: afb00014 */ sw $s0,0x14($sp) /* f163990: 8eea0000 */ lw $t2,0x0($s7) /* f163994: 3c108008 */ lui $s0,%hi(var8007fc38) @@ -13866,10 +14076,10 @@ glabel func0f163e34 /* f163ff0: 0fc58b3c */ jal func0f162cf0 /* f163ff4: 8c844cd4 */ lw $a0,%lo(var800a4cd4)($a0) /* f163ff8: 8e180000 */ lw $t8,0x0($s0) -/* f163ffc: 3c19800a */ lui $t9,%hi(g_PortalSomethings) +/* f163ffc: 3c19800a */ lui $t9,%hi(g_Portals) /* f164000: 1700004b */ bnez $t8,.L0f164130 /* f164004: 00000000 */ sll $zero,$zero,0x0 -/* f164008: 8f394cc8 */ lw $t9,%lo(g_PortalSomethings)($t9) +/* f164008: 8f394cc8 */ lw $t9,%lo(g_Portals)($t9) /* f16400c: 3c108008 */ lui $s0,%hi(var8007fc20) /* f164010: 27b10038 */ addiu $s1,$sp,0x38 /* f164014: 97290000 */ lhu $t1,0x0($t9) @@ -14288,10 +14498,10 @@ glabel func0f1645a8 /* f1645dc: 00c08825 */ or $s1,$a2,$zero /* f1645e0: 1920002c */ blez $t1,.L0f164694 /* f1645e4: 00001825 */ or $v1,$zero,$zero -/* f1645e8: 3c0d800a */ lui $t5,%hi(g_PortalSomethings) +/* f1645e8: 3c0d800a */ lui $t5,%hi(g_Portals) /* f1645ec: 3c0c800a */ lui $t4,%hi(var800a4ce0) /* f1645f0: 258c4ce0 */ addiu $t4,$t4,%lo(var800a4ce0) -/* f1645f4: 25ad4cc8 */ addiu $t5,$t5,%lo(g_PortalSomethings) +/* f1645f4: 25ad4cc8 */ addiu $t5,$t5,%lo(g_Portals) /* f1645f8: 00002825 */ or $a1,$zero,$zero /* f1645fc: 8518000e */ lh $t8,0xe($t0) .L0f164600: @@ -14363,10 +14573,10 @@ glabel func0f1646b8 /* f1646dc: 00001025 */ or $v0,$zero,$zero /* f1646e0: 3c18800a */ lui $t8,%hi(var800a4ce0) /* f1646e4: 18c00015 */ blez $a2,.L0f16473c -/* f1646e8: 3c07800a */ lui $a3,%hi(g_PortalSomethings) +/* f1646e8: 3c07800a */ lui $a3,%hi(g_Portals) /* f1646ec: 8479000e */ lh $t9,0xe($v1) /* f1646f0: 8f184ce0 */ lw $t8,%lo(var800a4ce0)($t8) -/* f1646f4: 8ce74cc8 */ lw $a3,%lo(g_PortalSomethings)($a3) +/* f1646f4: 8ce74cc8 */ lw $a3,%lo(g_Portals)($a3) /* f1646f8: 00194840 */ sll $t1,$t9,0x1 /* f1646fc: 03092021 */ addu $a0,$t8,$t1 .L0f164700: @@ -14521,10 +14731,10 @@ glabel func0f1648cc /* f164904: 00002825 */ or $a1,$zero,$zero /* f164908: 19000047 */ blez $t0,.L0f164a28 /* f16490c: 00005025 */ or $t2,$zero,$zero -/* f164910: 3c11800a */ lui $s1,%hi(g_PortalSomethings) +/* f164910: 3c11800a */ lui $s1,%hi(g_Portals) /* f164914: 3c10800a */ lui $s0,%hi(var800a4ce0) /* f164918: 26104ce0 */ addiu $s0,$s0,%lo(var800a4ce0) -/* f16491c: 26314cc8 */ addiu $s1,$s1,%lo(g_PortalSomethings) +/* f16491c: 26314cc8 */ addiu $s1,$s1,%lo(g_Portals) /* f164920: 2412000c */ addiu $s2,$zero,0xc .L0f164924: /* f164924: 84ef000e */ lh $t7,0xe($a3) @@ -14603,8 +14813,8 @@ glabel func0f1648cc /* f164a30: 8fb2000c */ lw $s2,0xc($sp) /* f164a34: 03e00008 */ jr $ra /* f164a38: 27bd0010 */ addiu $sp,$sp,0x10 -/* f164a3c: 3c03800a */ lui $v1,%hi(g_PortalSomethings) -/* f164a40: 8c634cc8 */ lw $v1,%lo(g_PortalSomethings)($v1) +/* f164a3c: 3c03800a */ lui $v1,%hi(g_Portals) +/* f164a40: 8c634cc8 */ lw $v1,%lo(g_Portals)($v1) /* f164a44: 00001025 */ or $v0,$zero,$zero /* f164a48: 946e0000 */ lhu $t6,0x0($v1) /* f164a4c: 51c0000c */ beqzl $t6,.L0f164a80 @@ -14629,8 +14839,8 @@ glabel func0f1648cc GLOBAL_ASM( glabel func0f164a88 -/* f164a88: 3c06800a */ lui $a2,%hi(g_PortalSomethings) -/* f164a8c: 24c64cc8 */ addiu $a2,$a2,%lo(g_PortalSomethings) +/* f164a88: 3c06800a */ lui $a2,%hi(g_Portals) +/* f164a8c: 24c64cc8 */ addiu $a2,$a2,%lo(g_Portals) /* f164a90: 8cce0000 */ lw $t6,0x0($a2) /* f164a94: 000418c0 */ sll $v1,$a0,0x3 /* f164a98: 01c32821 */ addu $a1,$t6,$v1 @@ -14645,8 +14855,8 @@ glabel func0f164a88 GLOBAL_ASM( glabel func0f164ab8 -/* f164ab8: 3c0e800a */ lui $t6,%hi(g_PortalSomethings) -/* f164abc: 8dce4cc8 */ lw $t6,%lo(g_PortalSomethings)($t6) +/* f164ab8: 3c0e800a */ lui $t6,%hi(g_Portals) +/* f164abc: 8dce4cc8 */ lw $t6,%lo(g_Portals)($t6) /* f164ac0: 27bdffa8 */ addiu $sp,$sp,-88 /* f164ac4: 000478c0 */ sll $t7,$a0,0x3 /* f164ac8: afbf0014 */ sw $ra,0x14($sp) @@ -14777,8 +14987,8 @@ glabel func0f164c64 /* f164ca4: 1b000062 */ blez $t8,.L0f164e30 /* f164ca8: 00004025 */ or $t0,$zero,$zero /* f164cac: 3c09800a */ lui $t1,%hi(var800a4ccc) -/* f164cb0: 3c0a800a */ lui $t2,%hi(g_PortalSomethings) -/* f164cb4: 8d4a4cc8 */ lw $t2,%lo(g_PortalSomethings)($t2) +/* f164cb0: 3c0a800a */ lui $t2,%hi(g_Portals) +/* f164cb4: 8d4a4cc8 */ lw $t2,%lo(g_Portals)($t2) /* f164cb8: 8d294ccc */ lw $t1,%lo(var800a4ccc)($t1) /* f164cbc: 8ce74ce0 */ lw $a3,%lo(var800a4ce0)($a3) /* f164cc0: 24130014 */ addiu $s3,$zero,0x14 @@ -14892,8 +15102,8 @@ glabel func0f164c64 GLOBAL_ASM( glabel portalSetEnabled -/* f164e48: 3c0e800a */ lui $t6,%hi(g_PortalSomethings) -/* f164e4c: 8dce4cc8 */ lw $t6,%lo(g_PortalSomethings)($t6) +/* f164e48: 3c0e800a */ lui $t6,%hi(g_Portals) +/* f164e4c: 8dce4cc8 */ lw $t6,%lo(g_Portals)($t6) /* f164e50: 000478c0 */ sll $t7,$a0,0x3 /* f164e54: 0005402b */ sltu $t0,$zero,$a1 /* f164e58: 01cf1021 */ addu $v0,$t6,$t7 @@ -14919,8 +15129,8 @@ glabel var7f1b76c4 .text /* f164e8c: 27bdffb8 */ addiu $sp,$sp,-72 /* f164e90: afb6003c */ sw $s6,0x3c($sp) -/* f164e94: 3c16800a */ lui $s6,%hi(g_PortalSomethings) -/* f164e98: 26d64cc8 */ addiu $s6,$s6,%lo(g_PortalSomethings) +/* f164e94: 3c16800a */ lui $s6,%hi(g_Portals) +/* f164e98: 26d64cc8 */ addiu $s6,$s6,%lo(g_Portals) /* f164e9c: 8ece0000 */ lw $t6,0x0($s6) /* f164ea0: afbf0044 */ sw $ra,0x44($sp) /* f164ea4: afb70040 */ sw $s7,0x40($sp) @@ -15039,11 +15249,11 @@ glabel var7f1b76cc /* f165014: e4a00000 */ swc1 $f0,0x0($a1) /* f165018: e4a00004 */ swc1 $f0,0x4($a1) /* f16501c: e4a00008 */ swc1 $f0,0x8($a1) -/* f165020: 3c03800a */ lui $v1,%hi(g_PortalSomethings) +/* f165020: 3c03800a */ lui $v1,%hi(g_Portals) /* f165024: e4c20000 */ swc1 $f2,0x0($a2) /* f165028: e4c20004 */ swc1 $f2,0x4($a2) /* f16502c: e4c20008 */ swc1 $f2,0x8($a2) -/* f165030: 8c634cc8 */ lw $v1,%lo(g_PortalSomethings)($v1) +/* f165030: 8c634cc8 */ lw $v1,%lo(g_Portals)($v1) /* f165034: 000470c0 */ sll $t6,$a0,0x3 /* f165038: 00003825 */ or $a3,$zero,$zero /* f16503c: 006e7821 */ addu $t7,$v1,$t6 @@ -15106,7 +15316,7 @@ glabel func0f1650d0 /* f1650fc: afa600b8 */ sw $a2,0xb8($sp) /* f165100: c4840000 */ lwc1 $f4,0x0($a0) /* f165104: 2401ffff */ addiu $at,$zero,-1 -/* f165108: 3c14800a */ lui $s4,%hi(g_PortalSomethings) +/* f165108: 3c14800a */ lui $s4,%hi(g_Portals) /* f16510c: e7a4009c */ swc1 $f4,0x9c($sp) /* f165110: c4860004 */ lwc1 $f6,0x4($a0) /* f165114: 00e0b825 */ or $s7,$a3,$zero @@ -15117,7 +15327,7 @@ glabel func0f1650d0 /* f165128: 00c09825 */ or $s3,$a2,$zero /* f16512c: e7a800a4 */ swc1 $f8,0xa4($sp) /* f165130: c4aa0000 */ lwc1 $f10,0x0($a1) -/* f165134: 26944cc8 */ addiu $s4,$s4,%lo(g_PortalSomethings) +/* f165134: 26944cc8 */ addiu $s4,$s4,%lo(g_Portals) /* f165138: 8fb900b8 */ lw $t9,0xb8($sp) /* f16513c: e7aa0090 */ swc1 $f10,0x90($sp) /* f165140: c4b00004 */ lwc1 $f16,0x4($a1) diff --git a/src/game/game_165360.c b/src/game/game_165360.c index 35b8203e7..9c77c3ac8 100644 --- a/src/game/game_165360.c +++ b/src/game/game_165360.c @@ -27,8 +27,8 @@ glabel func0f165360 /* f16537c: 3c017f1b */ lui $at,%hi(var7f1b76d0) /* f165380: c42d76d0 */ lwc1 $f13,%lo(var7f1b76d0)($at) /* f165384: c50c000c */ lwc1 $f12,0xc($t0) -/* f165388: 3c08800a */ lui $t0,%hi(g_PortalSomethings) -/* f16538c: 25084cc8 */ addiu $t0,$t0,%lo(g_PortalSomethings) +/* f165388: 3c08800a */ lui $t0,%hi(g_Portals) +/* f16538c: 25084cc8 */ addiu $t0,$t0,%lo(g_Portals) /* f165390: 8d080000 */ lw $t0,0x0($t0) /* f165394: 000448c0 */ sll $t1,$a0,0x3 /* f165398: 01284820 */ add $t1,$t1,$t0 diff --git a/src/game/propobj.c b/src/game/propobj.c index 27b9a064c..97aa666a3 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -5730,8 +5730,8 @@ glabel setupParseObject /* f06aee8: 0fc59392 */ jal portalSetEnabled /* f06aeec: 24050001 */ addiu $a1,$zero,0x1 /* f06aef0: 862e0062 */ lh $t6,0x62($s1) -/* f06aef4: 3c0d800a */ lui $t5,%hi(g_PortalSomethings) -/* f06aef8: 8dad4cc8 */ lw $t5,%lo(g_PortalSomethings)($t5) +/* f06aef4: 3c0d800a */ lui $t5,%hi(g_Portals) +/* f06aef8: 8dad4cc8 */ lw $t5,%lo(g_Portals)($t5) /* f06aefc: 000e78c0 */ sll $t7,$t6,0x3 /* f06af00: 01af1021 */ addu $v0,$t5,$t7 /* f06af04: 90580006 */ lbu $t8,0x6($v0) @@ -5755,10 +5755,10 @@ glabel setupParseObject /* f06af44: 0fc2353a */ jal doorActivatePortal /* f06af48: 02202025 */ or $a0,$s1,$zero /* f06af4c: 862300c4 */ lh $v1,0xc4($s1) -/* f06af50: 3c08800a */ lui $t0,%hi(g_PortalSomethings) +/* f06af50: 3c08800a */ lui $t0,%hi(g_Portals) /* f06af54: 04620008 */ bltzl $v1,.L0f06af78 /* f06af58: 8e2c0014 */ lw $t4,0x14($s1) -/* f06af5c: 8d084cc8 */ lw $t0,%lo(g_PortalSomethings)($t0) +/* f06af5c: 8d084cc8 */ lw $t0,%lo(g_Portals)($t0) /* f06af60: 000348c0 */ sll $t1,$v1,0x3 /* f06af64: 01091021 */ addu $v0,$t0,$t1 /* f06af68: 904a0006 */ lbu $t2,0x6($v0) @@ -28039,10 +28039,10 @@ glabel var7f1aa6ec /* f07e880: 54410015 */ bnel $v0,$at,.L0f07e8d8 /* f07e884: 24010001 */ addiu $at,$zero,0x1 /* f07e888: 86040062 */ lh $a0,0x62($s0) -/* f07e88c: 3c18800a */ lui $t8,%hi(g_PortalSomethings) +/* f07e88c: 3c18800a */ lui $t8,%hi(g_Portals) /* f07e890: 04800025 */ bltz $a0,.L0f07e928 /* f07e894: 00000000 */ sll $zero,$zero,0x0 -/* f07e898: 8f184cc8 */ lw $t8,%lo(g_PortalSomethings)($t8) +/* f07e898: 8f184cc8 */ lw $t8,%lo(g_Portals)($t8) /* f07e89c: 0004c8c0 */ sll $t9,$a0,0x3 /* f07e8a0: 03192821 */ addu $a1,$t8,$t9 /* f07e8a4: 90a30006 */ lbu $v1,0x6($a1) @@ -28063,10 +28063,10 @@ glabel var7f1aa6ec /* f07e8d8: 14410013 */ bne $v0,$at,.L0f07e928 /* f07e8dc: 00000000 */ sll $zero,$zero,0x0 /* f07e8e0: 860400c4 */ lh $a0,0xc4($s0) -/* f07e8e4: 3c0c800a */ lui $t4,%hi(g_PortalSomethings) +/* f07e8e4: 3c0c800a */ lui $t4,%hi(g_Portals) /* f07e8e8: 0480000f */ bltz $a0,.L0f07e928 /* f07e8ec: 00000000 */ sll $zero,$zero,0x0 -/* f07e8f0: 8d8c4cc8 */ lw $t4,%lo(g_PortalSomethings)($t4) +/* f07e8f0: 8d8c4cc8 */ lw $t4,%lo(g_Portals)($t4) /* f07e8f4: 000468c0 */ sll $t5,$a0,0x3 /* f07e8f8: 018d2821 */ addu $a1,$t4,$t5 /* f07e8fc: 90a30006 */ lbu $v1,0x6($a1) @@ -35535,11 +35535,11 @@ glabel func0f084e58 /* f084e80: afa20088 */ sw $v0,0x88($sp) /* f084e84: 8fa60098 */ lw $a2,0x98($sp) /* f084e88: 00404025 */ or $t0,$v0,$zero -/* f084e8c: 3c0f800a */ lui $t7,%hi(g_PortalSomethings) +/* f084e8c: 3c0f800a */ lui $t7,%hi(g_Portals) /* f084e90: 84c400c4 */ lh $a0,0xc4($a2) /* f084e94: 04820010 */ bltzl $a0,.L0f084ed8 /* f084e98: 00c02025 */ or $a0,$a2,$zero -/* f084e9c: 8def4cc8 */ lw $t7,%lo(g_PortalSomethings)($t7) +/* f084e9c: 8def4cc8 */ lw $t7,%lo(g_Portals)($t7) /* f084ea0: 0004c0c0 */ sll $t8,$a0,0x3 /* f084ea4: 01f82821 */ addu $a1,$t7,$t8 /* f084ea8: 90a30006 */ lbu $v1,0x6($a1) diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index 825e208b8..528ea4f6b 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -17832,7 +17832,7 @@ u32 var800a4920 = 0; u32 var800a4924 = 0; struct room *g_RoomPtrs = NULL; u8 *g_MpRoomVisibility = NULL; -u32 var800a4930 = 0; +s16 var800a4930[1] = {0}; u32 var800a4934 = 0; u32 var800a4938 = 0; u32 var800a493c = 0; @@ -18062,7 +18062,7 @@ u32 var800a4cb8 = 0; u32 var800a4cbc = 0; u32 var800a4cc0 = 0; u32 var800a4cc4 = 0; -struct portalsomething *g_PortalSomethings = NULL; +struct portal *g_Portals = NULL; u32 var800a4ccc = 0; u32 var800a4cd0 = 0; u32 var800a4cd4 = 0; @@ -18071,7 +18071,7 @@ u32 var800a4cdc = 0; u32 var800a4ce0 = 0; u32 var800a4ce4 = 0; u32 var800a4ce8 = 0; -struct portal *g_Portals = NULL; +struct portalthing *g_PortalThings = NULL; u32 var800a4cf0 = 0; u32 var800a4cf4 = 0; u32 var800a4cf8 = 0; @@ -19660,11 +19660,9 @@ u32 var800a65b0 = 0; u32 var800a65b4 = 0; u32 var800a65b8 = 0; u32 var800a65bc = 0; -u32 var800a65c0 = 0; -u32 var800a65c4 = 0; -u32 var800a65c8 = 0; -u32 var800a65cc = 0; -u32 var800a65d0 = 0; +struct screenbox var800a65c0 = {0}; +struct screenbox var800a65c8 = {0}; +u32 g_PortalDisableParentExec = 0; u32 var800a65d4 = 0; u32 var800a65d8 = 0; u32 var800a65dc = 0; diff --git a/src/include/constants.h b/src/include/constants.h index caa7d5501..e62f97558 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -1807,6 +1807,41 @@ #define PLAYERFLAG_NOCONTROL 0x00000002 +#define PORTALCMD_END 0x00 +#define PORTALCMD_PUSH 0x01 +#define PORTALCMD_POP 0x02 +#define PORTALCMD_AND 0x03 +#define PORTALCMD_OR 0x04 +#define PORTALCMD_NOT 0x05 +#define PORTALCMD_XOR 0x06 +#define PORTALCMD_14 0x14 +#define PORTALCMD_SETMODEVIS 0x1e +#define PORTALCMD_1F 0x1f +#define PORTALCMD_20 0x20 +#define PORTALCMD_SETMODEINVIS 0x21 +#define PORTALCMD_22 0x22 +#define PORTALCMD_23 0x23 +#define PORTALCMD_DISABLEROOM 0x24 +#define PORTALCMD_DISABLEROOMRANGE 0x25 +#define PORTALCMD_LOADROOM 0x26 +#define PORTALCMD_LOADROOMRANGE 0x27 +#define PORTALCMD_28 0x28 +#define PORTALCMD_29 0x29 +#define PORTALCMD_2A 0x2a +#define PORTALCMD_50 0x50 +#define PORTALCMD_51 0x51 +#define PORTALCMD_ENABLEPARENTEXEC 0x52 +#define PORTALCMD_IF 0x5a +#define PORTALCMD_TOGGLEEXEC 0x5b +#define PORTALCMD_ENDIF 0x5c +#define PORTALCMD_TRAILER 0x65 + +#define PORTALFLAG_01 0x01 +#define PORTALFLAG_04 0x04 + +#define PORTALMODE_SHOW 0 +#define PORTALMODE_HIDE 1 + #define PROPFLAG_02 0x02 #define PROPFLAG_HIDDEN 0x04 #define PROPFLAG_40 0x40 @@ -1827,9 +1862,10 @@ #define RACE_EYESPY 3 #define RACE_ROBOT 4 -#define ROOMFLAG_ACTIVE 0x0004 -#define ROOMFLAG_4000 0x4000 -#define ROOMFLAG_8000 0x8000 +#define ROOMFLAG_DISABLED 0x0001 +#define ROOMFLAG_ACTIVE 0x0004 +#define ROOMFLAG_4000 0x4000 +#define ROOMFLAG_8000 0x8000 #define SAVEFILEFLAG_P1_FORWARDPITCH 0x00 #define SAVEFILEFLAG_P1_AUTOAIM 0x01 diff --git a/src/include/game/data/data_020df0.h b/src/include/game/data/data_020df0.h index cbe93f34d..e487cd761 100644 --- a/src/include/game/data/data_020df0.h +++ b/src/include/game/data/data_020df0.h @@ -250,7 +250,7 @@ extern u32 g_StageIndex; extern u32 var8007fc0c; extern u32 var8007fc10; extern u32 var8007fc14; -extern u32 var8007fc20; +extern s32 var8007fc20; extern u32 var8007fc24; extern u32 var8007fc28; extern u32 var8007fc2c; @@ -258,12 +258,12 @@ extern u32 var8007fc30; extern u32 var8007fc34; extern u32 var8007fc38; extern u16 var8007fc3c; -extern s32 g_NumPortals; +extern s32 g_NumPortalThings; extern u32 var8007fc44; extern u32 var8007fc4c; extern u32 var8007fc54; extern u32 var8007fca8; -extern u32 var8007fcac; +extern u32 g_PortalMode; extern u32 var8007fcb0; extern u32 var8007fcb4; extern struct stagetableentry g_Stages[61]; diff --git a/src/include/game/game_157db0.h b/src/include/game/game_157db0.h index 5a37342ca..2f5877c97 100644 --- a/src/include/game/game_157db0.h +++ b/src/include/game/game_157db0.h @@ -4,7 +4,7 @@ #include "types.h" u32 func0f157db0(void); -u32 func0f157e94(void); +void func0f157e94(s32 room, s32 arg1, struct screenbox *arg2); u32 func0f158108(void); u32 func0f158140(void); u32 func0f158184(void); @@ -37,13 +37,13 @@ u32 func0f15cb74(void); u32 func0f15cbb4(void); u32 func0f15cc18(void); void func0f15cd28(void); -u32 func0f15cd90(void); +bool func0f15cd90(u32 room, struct screenbox *arg1); u32 func0f15d08c(void); -u32 func0f15d10c(void); +bool func0f15d10c(s32 portal, struct screenbox *arg1); u32 func0f15d4a8(void); -u32 func0f15d570(void); -u32 func0f15d63c(void); -u32 func0f15d6c4(void); +bool func0f15d570(struct screenbox *arg0, struct screenbox *arg1); +void func0f15d63c(struct screenbox *arg0, struct screenbox *arg1); +void func0f15d6c4(struct screenbox *arg0, struct screenbox *arg1); bool roomIsActive(s32 room_id); u32 func0f15d744(void); bool roomIsVisibleByPlayer(s16 room, u32 playernum); @@ -76,10 +76,10 @@ u32 func0f161c08(void); u32 func0f161d30(void); u32 func0f162128(void); u32 func0f162194(void); -u32 func0f16254c(void); -u32 func0f162588(void); +void portalPushValue(bool value); +bool portalPopValue(void); u32 func0f1625bc(void); -u32 func0f1625ec(void); +struct portalcmd *portalCommandExecute(struct portalcmd *cmd, bool s2); u32 func0f162cf0(void); u32 func0f162d9c(void); u32 func0f1632d4(void); diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index 8b33e8b92..8031436b7 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -722,13 +722,13 @@ extern u32 var800a4920; extern u32 var800a4924; extern struct room *g_RoomPtrs; extern u8 *g_MpRoomVisibility; -extern u32 var800a4930; +extern s16 var800a4930[1]; extern u32 var800a4bec; extern u32 var800a4bf0; extern u32 var800a4bf8; extern u32 var800a4cc0; extern u32 var800a4cc4; -extern struct portalsomething *g_PortalSomethings; +extern struct portal *g_Portals; extern u32 var800a4ccc; extern u32 var800a4cd0; extern u32 var800a4cd4; @@ -736,7 +736,7 @@ extern u32 var800a4cd8; extern u32 var800a4ce0; extern u32 var800a4ce4; extern u32 var800a4ce8; -extern struct portal *g_Portals; +extern struct portalthing *g_PortalThings; extern u32 var800a4cf0; extern u32 var800a4cf8; extern u32 var800a4d00; @@ -744,8 +744,9 @@ extern u32 var800a6470; extern u32 var800a647c; extern u32 var800a6538; extern u32 var800a65b8; -extern u32 var800a65c0; -extern u32 var800a65c8; +extern struct screenbox var800a65c0; +extern struct screenbox var800a65c8; +extern u32 g_PortalDisableParentExec; extern u32 var800a65f0; extern u32 var800a6600; extern u32 var800a6618; diff --git a/src/include/types.h b/src/include/types.h index 15d8abc43..052f98bd8 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -2103,10 +2103,10 @@ struct player { /*0x1778*/ u32 c_lodscalezu32; /*0x177c*/ struct coord c_cameratopnorm; /*0x1788*/ struct coord c_cameraleftnorm; - /*0x1794*/ u32 unk1794; - /*0x1798*/ u32 unk1798; - /*0x179c*/ u32 unk179c; - /*0x17a0*/ u32 unk17a0; + /*0x1794*/ f32 screenxminf; + /*0x1798*/ f32 screenyminf; + /*0x179c*/ f32 screenxmaxf; + /*0x17a0*/ f32 screenymaxf; /*0x17a4*/ u32 unk17a4; /*0x17a8*/ u32 unk17a8; /*0x17ac*/ u32 unk17ac; @@ -2822,7 +2822,12 @@ struct roombitfield { struct room { /*0x00*/ u16 flags; - /*0x04*/ u32 unk04; + /*0x02*/ u8 unk02; + /*0x03*/ u8 unk03; + /*0x04*/ u8 unk04; + /*0x05*/ u8 unk05; + /*0x06*/ u8 unk06; + /*0x07*/ u8 unk07; /*0x08*/ u32 unk08; /*0x0c*/ u32 unk0c; /*0x10*/ u32 unk10; @@ -4078,13 +4083,13 @@ struct scenariodata { }; }; -struct portalsomething { +struct portal { u32 unk00; u16 unk04; u8 flags; }; -struct portal { +struct portalthing { u16 unk00; u16 unk02; u16 unk04; @@ -5409,4 +5414,17 @@ struct fileinfo { u32 unk04; }; +struct portalcmd { + u8 type; + u8 len; + s32 param; +}; + +struct screenbox { + s16 xmin; + s16 ymin; + s16 xmax; + s16 ymax; +}; + #endif diff --git a/src/lib/lib_16110.c b/src/lib/lib_16110.c index c620a639b..9dd5807e0 100644 --- a/src/lib/lib_16110.c +++ b/src/lib/lib_16110.c @@ -1986,8 +1986,8 @@ glabel func00017cbc GLOBAL_ASM( glabel func00017ce0 -/* 17ce0: 3c03800a */ lui $v1,%hi(g_PortalSomethings) -/* 17ce4: 8c634cc8 */ lw $v1,%lo(g_PortalSomethings)($v1) +/* 17ce0: 3c03800a */ lui $v1,%hi(g_Portals) +/* 17ce4: 8c634cc8 */ lw $v1,%lo(g_Portals)($v1) /* 17ce8: 000470c0 */ sll $t6,$a0,0x3 /* 17cec: 3c013f80 */ lui $at,0x3f80 /* 17cf0: 006e7821 */ addu $t7,$v1,$t6 @@ -2096,10 +2096,10 @@ glabel func00017e30 /* 17e54: c4a40004 */ lwc1 $f4,0x4($a1) /* 17e58: 460e6282 */ mul.s $f10,$f12,$f14 /* 17e5c: c5020008 */ lwc1 $f2,0x8($t0) -/* 17e60: 3c07800a */ lui $a3,%hi(g_PortalSomethings) +/* 17e60: 3c07800a */ lui $a3,%hi(g_Portals) /* 17e64: 46102182 */ mul.s $f6,$f4,$f16 /* 17e68: c4a40008 */ lwc1 $f4,0x8($a1) -/* 17e6c: 8ce74cc8 */ lw $a3,%lo(g_PortalSomethings)($a3) +/* 17e6c: 8ce74cc8 */ lw $a3,%lo(g_Portals)($a3) /* 17e70: 000478c0 */ sll $t7,$a0,0x3 /* 17e74: 27bdff90 */ addiu $sp,$sp,-112 /* 17e78: 00efc021 */ addu $t8,$a3,$t7 @@ -2343,9 +2343,9 @@ glabel func00018148 /* 181e8: 240100ff */ addiu $at,$zero,0xff /* 181ec: 312a00ff */ andi $t2,$t1,0xff /* 181f0: 15410010 */ bne $t2,$at,.L00018234 -/* 181f4: 3c14800a */ lui $s4,%hi(g_PortalSomethings) -/* 181f8: 3c038008 */ lui $v1,%hi(g_NumPortals) -/* 181fc: 8c63fc40 */ lw $v1,%lo(g_NumPortals)($v1) +/* 181f4: 3c14800a */ lui $s4,%hi(g_Portals) +/* 181f8: 3c038008 */ lui $v1,%hi(g_NumPortalThings) +/* 181fc: 8c63fc40 */ lw $v1,%lo(g_NumPortalThings)($v1) /* 18200: 3c0b800a */ lui $t3,%hi(g_Vars+0x520) /* 18204: 2562a4e0 */ addiu $v0,$t3,%lo(g_Vars+0x520) /* 18208: 18600008 */ blez $v1,.L0001822c @@ -2362,7 +2362,7 @@ glabel func00018148 /* 1822c: 3c018006 */ lui $at,%hi(var8005ef20) /* 18230: a020ef20 */ sb $zero,%lo(var8005ef20)($at) .L00018234: -/* 18234: 26944cc8 */ addiu $s4,$s4,%lo(g_PortalSomethings) +/* 18234: 26944cc8 */ addiu $s4,$s4,%lo(g_Portals) /* 18238: 87b5009c */ lh $s5,0x9c($sp) .L0001823c: /* 1823c: a7a4007c */ sh $a0,0x7c($sp)