From ed309d067a87cade047cb8a5e1a987d269efc900 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 7 Apr 2020 22:50:21 +1000 Subject: [PATCH] Decompile portalPushValue --- src/game/data/data_020df0.c | 23 ++-------------- src/game/game_157db0.c | 41 +++++++++++------------------ src/include/game/data/data_020df0.h | 3 ++- src/include/game/game_157db0.h | 2 +- 4 files changed, 20 insertions(+), 49 deletions(-) diff --git a/src/game/data/data_020df0.c b/src/game/data/data_020df0.c index 3ac1ae41e..1ac5cade3 100644 --- a/src/game/data/data_020df0.c +++ b/src/game/data/data_020df0.c @@ -7059,27 +7059,8 @@ u32 var8007fc48 = 0xffff0000; u32 var8007fc4c = 0x00000000; u32 var8007fc50 = 0x00000000; u32 var8007fc54 = 0x00000000; -u32 var8007fc58 = 0x00000000; -u32 var8007fc5c = 0x00000000; -u32 var8007fc60 = 0x00000000; -u32 var8007fc64 = 0x00000000; -u32 var8007fc68 = 0x00000000; -u32 var8007fc6c = 0x00000000; -u32 var8007fc70 = 0x00000000; -u32 var8007fc74 = 0x00000000; -u32 var8007fc78 = 0x00000000; -u32 var8007fc7c = 0x00000000; -u32 var8007fc80 = 0x00000000; -u32 var8007fc84 = 0x00000000; -u32 var8007fc88 = 0x00000000; -u32 var8007fc8c = 0x00000000; -u32 var8007fc90 = 0x00000000; -u32 var8007fc94 = 0x00000000; -u32 var8007fc98 = 0x00000000; -u32 var8007fc9c = 0x00000000; -u32 var8007fca0 = 0x00000000; -u32 var8007fca4 = 0x00000000; -u32 var8007fca8 = 0x00000000; +bool g_PortalStack[20] = {0}; +s32 g_PortalStackIndex = 0x00000000; u32 g_PortalMode = 0x00000000; u32 var8007fcb0 = 0x00000190; u32 var8007fcb4 = 0x00000000; diff --git a/src/game/game_157db0.c b/src/game/game_157db0.c index 2c0e5977d..7d58f1bf0 100644 --- a/src/game/game_157db0.c +++ b/src/game/game_157db0.c @@ -11887,32 +11887,21 @@ glabel func0f162194 /* f162548: 27bd0060 */ addiu $sp,$sp,0x60 ); -GLOBAL_ASM( -glabel portalPushValue -/* f16254c: 3c058008 */ lui $a1,%hi(var8007fca8) -/* f162550: 24a5fca8 */ addiu $a1,$a1,%lo(var8007fca8) -/* f162554: 8ca30000 */ lw $v1,0x0($a1) -/* f162558: 3c018008 */ lui $at,%hi(var8007fc58) -/* f16255c: 00801025 */ or $v0,$a0,$zero -/* f162560: 00037080 */ sll $t6,$v1,0x2 -/* f162564: 002e0821 */ addu $at,$at,$t6 -/* f162568: ac24fc58 */ sw $a0,%lo(var8007fc58)($at) -/* f16256c: 24010014 */ addiu $at,$zero,0x14 -/* f162570: 246f0001 */ addiu $t7,$v1,0x1 -/* f162574: 01e1001a */ div $zero,$t7,$at -/* f162578: 0000c010 */ mfhi $t8 -/* f16257c: acb80000 */ sw $t8,0x0($a1) -/* f162580: 03e00008 */ jr $ra -/* f162584: 00000000 */ sll $zero,$zero,0x0 -); +bool portalPushValue(bool value) +{ + g_PortalStack[g_PortalStackIndex] = value; + g_PortalStackIndex = (g_PortalStackIndex + 1) % 20; + + return value; +} GLOBAL_ASM( glabel portalPopValue -/* f162588: 3c048008 */ lui $a0,%hi(var8007fca8) -/* f16258c: 2484fca8 */ addiu $a0,$a0,%lo(var8007fca8) +/* f162588: 3c048008 */ lui $a0,%hi(g_PortalStackIndex) +/* f16258c: 2484fca8 */ addiu $a0,$a0,%lo(g_PortalStackIndex) /* f162590: 8c8e0000 */ lw $t6,0x0($a0) /* f162594: 24010014 */ addiu $at,$zero,0x14 -/* f162598: 3c038008 */ lui $v1,%hi(var8007fc58) +/* f162598: 3c038008 */ lui $v1,%hi(g_PortalStack) /* f16259c: 25cf0013 */ addiu $t7,$t6,0x13 /* f1625a0: 01e1001a */ div $zero,$t7,$at /* f1625a4: 0000c010 */ mfhi $t8 @@ -11920,15 +11909,15 @@ glabel portalPopValue /* f1625ac: 00681821 */ addu $v1,$v1,$t0 /* f1625b0: ac980000 */ sw $t8,0x0($a0) /* f1625b4: 03e00008 */ jr $ra -/* f1625b8: 8c62fc58 */ lw $v0,%lo(var8007fc58)($v1) +/* f1625b8: 8c62fc58 */ lw $v0,%lo(g_PortalStack)($v1) ); GLOBAL_ASM( glabel func0f1625bc -/* f1625bc: 3c0e8008 */ lui $t6,%hi(var8007fca8) -/* f1625c0: 8dcefca8 */ lw $t6,%lo(var8007fca8)($t6) +/* f1625bc: 3c0e8008 */ lui $t6,%hi(g_PortalStackIndex) +/* f1625c0: 8dcefca8 */ lw $t6,%lo(g_PortalStackIndex)($t6) /* f1625c4: 24010014 */ addiu $at,$zero,0x14 -/* f1625c8: 3c028008 */ lui $v0,%hi(var8007fc58) +/* f1625c8: 3c028008 */ lui $v0,%hi(g_PortalStack) /* f1625cc: 01c47823 */ subu $t7,$t6,$a0 /* f1625d0: 25f80013 */ addiu $t8,$t7,0x13 /* f1625d4: 0301001a */ div $zero,$t8,$at @@ -11936,7 +11925,7 @@ glabel func0f1625bc /* f1625dc: 00194080 */ sll $t0,$t9,0x2 /* f1625e0: 00481021 */ addu $v0,$v0,$t0 /* f1625e4: 03e00008 */ jr $ra -/* f1625e8: 8c42fc58 */ lw $v0,%lo(var8007fc58)($v0) +/* f1625e8: 8c42fc58 */ lw $v0,%lo(g_PortalStack)($v0) ); GLOBAL_ASM( diff --git a/src/include/game/data/data_020df0.h b/src/include/game/data/data_020df0.h index e487cd761..84d2fafe2 100644 --- a/src/include/game/data/data_020df0.h +++ b/src/include/game/data/data_020df0.h @@ -262,7 +262,8 @@ extern s32 g_NumPortalThings; extern u32 var8007fc44; extern u32 var8007fc4c; extern u32 var8007fc54; -extern u32 var8007fca8; +extern bool g_PortalStack[20]; +extern s32 g_PortalStackIndex; extern u32 g_PortalMode; extern u32 var8007fcb0; extern u32 var8007fcb4; diff --git a/src/include/game/game_157db0.h b/src/include/game/game_157db0.h index 2f5877c97..8628c0efe 100644 --- a/src/include/game/game_157db0.h +++ b/src/include/game/game_157db0.h @@ -76,7 +76,7 @@ u32 func0f161c08(void); u32 func0f161d30(void); u32 func0f162128(void); u32 func0f162194(void); -void portalPushValue(bool value); +bool portalPushValue(bool value); bool portalPopValue(void); u32 func0f1625bc(void); struct portalcmd *portalCommandExecute(struct portalcmd *cmd, bool s2);