From 63c4f4834072eb745a30c9fd4d313e9e2efb1c4c Mon Sep 17 00:00:00 2001 From: Tyler McGavran Date: Wed, 18 May 2022 03:45:46 -0400 Subject: [PATCH] Match func_802B0570 and fix BananaActor (#204) I misunderstood how unions worked. In order to accomplish the original goal, the 3 named s16's need to be in a struct instead of just floating around. Signed-off-by: Taggerung --- .../code_802B0210/func_802B0570.s | 56 ------------------- include/actor_types.h | 2 + src/code_802B0210.c | 49 +++++++--------- 3 files changed, 23 insertions(+), 84 deletions(-) delete mode 100644 asm/non_matchings/code_802B0210/func_802B0570.s diff --git a/asm/non_matchings/code_802B0210/func_802B0570.s b/asm/non_matchings/code_802B0210/func_802B0570.s deleted file mode 100644 index b203510f8..000000000 --- a/asm/non_matchings/code_802B0210/func_802B0570.s +++ /dev/null @@ -1,56 +0,0 @@ -glabel func_802B0570 -/* 119B80 802B0570 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 119B84 802B0574 AFB00018 */ sw $s0, 0x18($sp) -/* 119B88 802B0578 00808025 */ move $s0, $a0 -/* 119B8C 802B057C AFBF001C */ sw $ra, 0x1c($sp) -/* 119B90 802B0580 0C0AC119 */ jal func_802B0464 -/* 119B94 802B0584 84840014 */ lh $a0, 0x14($a0) -/* 119B98 802B0588 02002025 */ move $a0, $s0 -/* 119B9C 802B058C 0C0AC13A */ jal func_802B04E8 -/* 119BA0 802B0590 86050012 */ lh $a1, 0x12($s0) -/* 119BA4 802B0594 86020010 */ lh $v0, 0x10($s0) -/* 119BA8 802B0598 3C0F800F */ lui $t7, %hi(gPlayers) # 0x800f -/* 119BAC 802B059C 3C051901 */ lui $a1, (0x19019053 >> 16) # lui $a1, 0x1901 -/* 119BB0 802B05A0 000270C0 */ sll $t6, $v0, 3 -/* 119BB4 802B05A4 01C27023 */ subu $t6, $t6, $v0 -/* 119BB8 802B05A8 000E7100 */ sll $t6, $t6, 4 -/* 119BBC 802B05AC 01C27023 */ subu $t6, $t6, $v0 -/* 119BC0 802B05B0 000E7080 */ sll $t6, $t6, 2 -/* 119BC4 802B05B4 01C27023 */ subu $t6, $t6, $v0 -/* 119BC8 802B05B8 000E70C0 */ sll $t6, $t6, 3 -/* 119BCC 802B05BC 01EE7821 */ addu $t7, $t7, $t6 -/* 119BD0 802B05C0 95EF6990 */ lhu $t7, %lo(gPlayers)($t7) # 0x6990 -/* 119BD4 802B05C4 304400FF */ andi $a0, $v0, 0xff -/* 119BD8 802B05C8 31F84000 */ andi $t8, $t7, 0x4000 -/* 119BDC 802B05CC 53000004 */ beql $t8, $zero, .L802B05E0 -/* 119BE0 802B05D0 860A0008 */ lh $t2, 8($s0) -/* 119BE4 802B05D4 0C032418 */ jal func_800C9060 -/* 119BE8 802B05D8 34A59053 */ ori $a1, (0x19019053 & 0xFFFF) # ori $a1, $a1, 0x9053 -/* 119BEC 802B05DC 860A0008 */ lh $t2, 8($s0) -.L802B05E0: -/* 119BF0 802B05E0 3C014040 */ li $at, 0x40400000 # 3.000000 -/* 119BF4 802B05E4 44812000 */ mtc1 $at, $f4 -/* 119BF8 802B05E8 000A58C0 */ sll $t3, $t2, 3 -/* 119BFC 802B05EC 3C0C8016 */ lui $t4, %hi(gActorList) # $t4, 0x8016 -/* 119C00 802B05F0 016A5823 */ subu $t3, $t3, $t2 -/* 119C04 802B05F4 24198000 */ li $t9, -32768 -/* 119C08 802B05F8 2408003C */ li $t0, 60 -/* 119C0C 802B05FC 24090005 */ li $t1, 5 -/* 119C10 802B0600 000B5900 */ sll $t3, $t3, 4 -/* 119C14 802B0604 258CF9B8 */ addiu $t4, %lo(gActorList) # addiu $t4, $t4, -0x648 -/* 119C18 802B0608 2403FFFF */ li $v1, -1 -/* 119C1C 802B060C A6190002 */ sh $t9, 2($s0) -/* 119C20 802B0610 A6080004 */ sh $t0, 4($s0) -/* 119C24 802B0614 A6090006 */ sh $t1, 6($s0) -/* 119C28 802B0618 016C1021 */ addu $v0, $t3, $t4 -/* 119C2C 802B061C E6040028 */ swc1 $f4, 0x28($s0) -/* 119C30 802B0620 A4430012 */ sh $v1, 0x12($v0) -/* 119C34 802B0624 A4430014 */ sh $v1, 0x14($v0) -/* 119C38 802B0628 A4430016 */ sh $v1, 0x16($v0) -/* 119C3C 802B062C A4430018 */ sh $v1, 0x18($v0) -/* 119C40 802B0630 A443001A */ sh $v1, 0x1a($v0) -/* 119C44 802B0634 8FBF001C */ lw $ra, 0x1c($sp) -/* 119C48 802B0638 8FB00018 */ lw $s0, 0x18($sp) -/* 119C4C 802B063C 27BD0020 */ addiu $sp, $sp, 0x20 -/* 119C50 802B0640 03E00008 */ jr $ra -/* 119C54 802B0644 00000000 */ nop diff --git a/include/actor_types.h b/include/actor_types.h index 8791adc2f..c059a7b7c 100644 --- a/include/actor_types.h +++ b/include/actor_types.h @@ -295,9 +295,11 @@ struct BananaActor { /* 0x0C */ f32 boundingBoxSize; union { /* 0x10 */ Vec3s rot; + struct { /* 0x10 */ s16 playerId; // Id of the player that owns this banana /* 0x12 */ s16 elderIndex; // Index in gActorList of the next-oldest banana in the bunch /* 0x14 */ s16 youngerIndex; // Index in gActorList of the next-youngest banana in the bunch + }; }; /* 0x16 */ s16 unk_16; /* 0x18 */ Vec3f pos; diff --git a/src/code_802B0210.c b/src/code_802B0210.c index 36b4592a4..555d44dde 100644 --- a/src/code_802B0210.c +++ b/src/code_802B0210.c @@ -130,38 +130,31 @@ void func_802B04E8(s32 arg0, s16 arg1) { GLOBAL_ASM("asm/non_matchings/code_802B0210/func_802B04E8.s") #endif -#ifdef MIPS_TO_C -//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307 -? func_800C9060(s32, ?); // extern -? func_802B0464(s16); // extern -? func_802B04E8(void *, s16); // extern -extern ? gActorList; -extern ? gPlayers; +extern void func_800C9060(s32, s32); /* extern */ +extern void func_802B0464(s16); /* extern */ +extern void func_802B04E8(struct BananaActor *, s16); /* extern */ -void func_802B0570(void *arg0) { - s16 temp_v0; - void *temp_v0_2; +extern Player gPlayers[]; - func_802B0464(arg0->unk14); - func_802B04E8(arg0, arg0->unk12); - temp_v0 = arg0->rot; - if ((*(&gPlayers + (temp_v0 * 0xDD8)) & 0x4000) != 0) { - func_800C9060(temp_v0 & 0xFF, 0x19019053); +void func_802B0570(struct BananaActor *banana) { + struct BananaBunchParent *temp_v0_2; + + func_802B0464(banana->youngerIndex); + func_802B04E8(banana, banana->elderIndex); + if ((gPlayers[banana->playerId].unk_000 & 0x4000) != 0) { + func_800C9060(banana->playerId & 0xFF, 0x19019053); } - arg0->unk2 = -0x8000; - arg0->unk_04 = 0x3C; - arg0->unk6 = 5; - temp_v0_2 = (arg0->unk_08 * 0x70) + &gActorList; - arg0->unk28 = 3.0f; - temp_v0_2->unk12 = -1; - temp_v0_2->unk14 = -1; - temp_v0_2->unk16 = -1; - temp_v0_2->pos = -1; - temp_v0_2->unk1A = -1; + banana->flags = -0x8000; + banana->unk_04 = 0x003C; + banana->state = 5; + banana->velocity[1] = 3.0f; + temp_v0_2 = &gActorList[banana->parentIndex]; + temp_v0_2->bananaIndices[0] = -1; + temp_v0_2->bananaIndices[1] = -1; + temp_v0_2->bananaIndices[2] = -1; + temp_v0_2->bananaIndices[3] = -1; + temp_v0_2->bananaIndices[4] = -1; } -#else -GLOBAL_ASM("asm/non_matchings/code_802B0210/func_802B0570.s") -#endif #ifdef MIPS_TO_C //generated by m2c commit 685418adfeb3794409e47b45ac5cab60b17d23fd