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 <tyler.taggerung@gmail.com>
This commit is contained in:
Tyler McGavran 2022-05-18 03:45:46 -04:00 committed by GitHub
parent b1c0c05bd3
commit 63c4f48340
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 84 deletions

View File

@ -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

View File

@ -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;

View File

@ -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