From 3e7c567791563cd04f57b9919642d8e16d4ad744 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Fri, 16 Apr 2021 17:41:46 +1000 Subject: [PATCH] Decompile func0f0a45d0 --- src/game/game_097ba0.c | 94 +++++++++++----------------------- src/include/data.h | 2 +- src/include/game/game_097ba0.h | 2 +- src/include/lib/model.h | 2 +- src/lib/lib_184d0.c | 2 +- 5 files changed, 34 insertions(+), 68 deletions(-) diff --git a/src/game/game_097ba0.c b/src/game/game_097ba0.c index 6ef780991..c6db0bb6a 100644 --- a/src/game/game_097ba0.c +++ b/src/game/game_097ba0.c @@ -82,7 +82,7 @@ u32 fill2[2]; u32 var8009d140; u32 var8009d144; -u32 var8009d148; +s32 var8009d148; u32 var8009d14c; struct fireslot g_Fireslots[NUM_FIRESLOTS]; @@ -20441,69 +20441,35 @@ glabel func0f0a4570 /* f0a45cc: 00000000 */ nop ); -GLOBAL_ASM( -glabel func0f0a45d0 -/* f0a45d0: 27bdffe8 */ addiu $sp,$sp,-24 -/* f0a45d4: afbf0014 */ sw $ra,0x14($sp) -/* f0a45d8: afa5001c */ sw $a1,0x1c($sp) -/* f0a45dc: 8c8206d4 */ lw $v0,0x6d4($a0) -/* f0a45e0: 00003825 */ or $a3,$zero,$zero -/* f0a45e4: 24010001 */ addiu $at,$zero,0x1 -/* f0a45e8: 00027500 */ sll $t6,$v0,0x14 -/* f0a45ec: 000e7f42 */ srl $t7,$t6,0x1d -/* f0a45f0: 11e00008 */ beqz $t7,.L0f0a4614 -/* f0a45f4: 00000000 */ nop -/* f0a45f8: 11e10011 */ beq $t7,$at,.L0f0a4640 -/* f0a45fc: 8fa4001c */ lw $a0,0x1c($sp) -/* f0a4600: 24010002 */ addiu $at,$zero,0x2 -/* f0a4604: 11e10012 */ beq $t7,$at,.L0f0a4650 -/* f0a4608: 8fa4001c */ lw $a0,0x1c($sp) -/* f0a460c: 10000013 */ b .L0f0a465c -/* f0a4610: 00000000 */ nop -.L0f0a4614: -/* f0a4614: 10c00006 */ beqz $a2,.L0f0a4630 -/* f0a4618: 8fa4001c */ lw $a0,0x1c($sp) -/* f0a461c: 8fa4001c */ lw $a0,0x1c($sp) -/* f0a4620: 0c006a47 */ jal modelGetPart -/* f0a4624: 2405002a */ addiu $a1,$zero,0x2a -/* f0a4628: 1000000c */ b .L0f0a465c -/* f0a462c: 00403825 */ or $a3,$v0,$zero -.L0f0a4630: -/* f0a4630: 0c006a47 */ jal modelGetPart -/* f0a4634: 24050037 */ addiu $a1,$zero,0x37 -/* f0a4638: 10000008 */ b .L0f0a465c -/* f0a463c: 00403825 */ or $a3,$v0,$zero -.L0f0a4640: -/* f0a4640: 0c006a47 */ jal modelGetPart -/* f0a4644: 2405002b */ addiu $a1,$zero,0x2b -/* f0a4648: 10000004 */ b .L0f0a465c -/* f0a464c: 00403825 */ or $a3,$v0,$zero -.L0f0a4650: -/* f0a4650: 0c006a47 */ jal modelGetPart -/* f0a4654: 2405002b */ addiu $a1,$zero,0x2b -/* f0a4658: 00403825 */ or $a3,$v0,$zero -.L0f0a465c: -/* f0a465c: 10e0000b */ beqz $a3,.L0f0a468c -/* f0a4660: 2419ffff */ addiu $t9,$zero,-1 -/* f0a4664: 00e02025 */ or $a0,$a3,$zero -/* f0a4668: 0c006949 */ jal func0001a524 -/* f0a466c: 00002825 */ or $a1,$zero,$zero -/* f0a4670: 3c01800a */ lui $at,%hi(var8009d148) -/* f0a4674: ac22d148 */ sw $v0,%lo(var8009d148)($at) -/* f0a4678: 3c187f0a */ lui $t8,%hi(func0f0a256c) -/* f0a467c: 2718256c */ addiu $t8,$t8,%lo(func0f0a256c) -/* f0a4680: 3c018006 */ lui $at,%hi(var8005efcc) -/* f0a4684: 10000003 */ b .L0f0a4694 -/* f0a4688: ac38efcc */ sw $t8,%lo(var8005efcc)($at) -.L0f0a468c: -/* f0a468c: 3c01800a */ lui $at,%hi(var8009d148) -/* f0a4690: ac39d148 */ sw $t9,%lo(var8009d148)($at) -.L0f0a4694: -/* f0a4694: 8fbf0014 */ lw $ra,0x14($sp) -/* f0a4698: 27bd0018 */ addiu $sp,$sp,0x18 -/* f0a469c: 03e00008 */ jr $ra -/* f0a46a0: 00000000 */ nop -); +void func0f0a256c(void); + +void func0f0a45d0(struct hand *hand, struct modelfiledata *filedata, bool arg2) +{ + struct modelnode *node = NULL; + + switch (hand->unk0d0e_04) { + case 0: + if (arg2) { + node = modelGetPart(filedata, 0x2a); + } else { + node = modelGetPart(filedata, 0x37); + } + break; + case 1: + node = modelGetPart(filedata, 0x2b); + break; + case 2: + node = modelGetPart(filedata, 0x2b); + break; + } + + if (node) { + var8009d148 = func0001a524(node, 0); + var8005efcc = func0f0a256c; + } else { + var8009d148 = -1; + } +} #if VERSION >= VERSION_PAL_FINAL GLOBAL_ASM( diff --git a/src/include/data.h b/src/include/data.h index 31b4938c2..7d9177638 100644 --- a/src/include/data.h +++ b/src/include/data.h @@ -61,7 +61,7 @@ extern bool var8005efbc; extern u32 var8005efc0; extern void *var8005efc4; extern void *var8005efc8; -extern u32 var8005efcc; +extern void *var8005efcc; extern u32 var8005efd0; extern u32 var8005efdc; extern u32 var8005efe0; diff --git a/src/include/game/game_097ba0.h b/src/include/game/game_097ba0.h index 20f62a220..dc07e4861 100644 --- a/src/include/game/game_097ba0.h +++ b/src/include/game/game_097ba0.h @@ -127,7 +127,7 @@ u32 func0f0a419c(void); u32 func0f0a4334(void); u32 func0f0a4438(void); u32 func0f0a4570(void); -u32 func0f0a45d0(void); +void func0f0a45d0(struct hand *hand, struct modelfiledata *filedata, bool arg2); u32 func0f0a46a4(void); u32 func0f0a4e44(void); u32 func0f0a5300(void); diff --git a/src/include/lib/model.h b/src/include/lib/model.h index 42b52894a..43da8ddbd 100644 --- a/src/include/lib/model.h +++ b/src/include/lib/model.h @@ -7,7 +7,7 @@ u32 func0001a500(void); u32 func0001a50c(void); void func0001a518(void *callback); -u32 func0001a524(void); +s32 func0001a524(struct modelnode *node, s32 arg1); Mtxf *func0001a5cc(struct model *model, struct modelnode *node, s32 arg2); u32 func0001a60c(void); u32 func0001a634(void); diff --git a/src/lib/lib_184d0.c b/src/lib/lib_184d0.c index 4a8cbcbc6..03694116b 100644 --- a/src/lib/lib_184d0.c +++ b/src/lib/lib_184d0.c @@ -61,7 +61,7 @@ u32 var8005efd8_2 = 0; #endif void *var8005efc8 = NULL; // pointer to a function -u32 var8005efcc = 0x00000000; +void *var8005efcc = NULL; // pointer to a function u32 var8005efd0 = 0x00000000; u32 var8005efd4 = 0x00000000; u32 var8005efd8 = 0x00000000;