diff --git a/src/game/chr/chr.c b/src/game/chr/chr.c index 77ba8e09f..70f285909 100644 --- a/src/game/chr/chr.c +++ b/src/game/chr/chr.c @@ -40,6 +40,7 @@ #include "game/game_1a3340.h" #include "library/library_12dc0.h" #include "library/library_16110.h" +#include "library/library_1a500.h" const u32 var7f1a8680[] = {0xb8d1b717}; const u32 var7f1a8684[] = {0x00000000}; @@ -53527,40 +53528,22 @@ glabel func0f04cf34 /* f04cf8c: 00801025 */ or $v0,$a0,$zero ); -GLOBAL_ASM( -glabel func0f04cf90 -/* f04cf90: 27bdffe8 */ addiu $sp,$sp,-24 -/* f04cf94: afbf0014 */ sw $ra,0x14($sp) -/* f04cf98: 10800015 */ beqz $a0,.L0f04cff0 -/* f04cf9c: 00803025 */ or $a2,$a0,$zero -/* f04cfa0: 8c820020 */ lw $v0,0x20($a0) -/* f04cfa4: 50400013 */ beqzl $v0,.L0f04cff4 -/* f04cfa8: 8fbf0014 */ lw $ra,0x14($sp) -/* f04cfac: 8c440008 */ lw $a0,0x8($v0) -/* f04cfb0: 50800010 */ beqzl $a0,.L0f04cff4 -/* f04cfb4: 8fbf0014 */ lw $ra,0x14($sp) -/* f04cfb8: 0c006a47 */ jal func0001a91c -/* f04cfbc: afa60018 */ sw $a2,0x18($sp) -/* f04cfc0: 8fa60018 */ lw $a2,0x18($sp) -/* f04cfc4: 00402825 */ or $a1,$v0,$zero -/* f04cfc8: 10400004 */ beqz $v0,.L0f04cfdc -/* f04cfcc: 00001825 */ or $v1,$zero,$zero -/* f04cfd0: 0c006a87 */ jal func0001aa1c -/* f04cfd4: 8cc40020 */ lw $a0,0x20($a2) -/* f04cfd8: 00401825 */ or $v1,$v0,$zero -.L0f04cfdc: -/* f04cfdc: 50600005 */ beqzl $v1,.L0f04cff4 -/* f04cfe0: 8fbf0014 */ lw $ra,0x14($sp) -/* f04cfe4: 8c620000 */ lw $v0,0x0($v1) -/* f04cfe8: 2c4e0001 */ sltiu $t6,$v0,0x1 -/* f04cfec: ac6e0000 */ sw $t6,0x0($v1) -.L0f04cff0: -/* f04cff0: 8fbf0014 */ lw $ra,0x14($sp) -.L0f04cff4: -/* f04cff4: 27bd0018 */ addiu $sp,$sp,0x18 -/* f04cff8: 03e00008 */ jr $ra -/* f04cffc: 00000000 */ sll $zero,$zero,0x0 -); +void func0f04cf90(struct chrdata *chr, s32 arg1) +{ + if (chr && chr->unk020 && chr->unk020->unk08) { + s32 value = func0001a91c(chr->unk020->unk08, arg1); + u32 *ptr = NULL; + + if (value != 0) { + ptr = func0001aa1c(chr->unk020, value); + } + + if (ptr) { + u32 value = *ptr; + *ptr = (value == 0); + } + } +} GLOBAL_ASM( glabel func0f04d000 diff --git a/src/include/game/chr/chr.h b/src/include/game/chr/chr.h index 5dab936a5..5e46c9f1c 100644 --- a/src/include/game/chr/chr.h +++ b/src/include/game/chr/chr.h @@ -406,7 +406,7 @@ s16 *teamGetChrIds(s32 team_id); s16 *squadronGetChrIds(s32 squadron_id); u32 func0f04ceec(void); u32 func0f04cf34(void); -u32 func0f04cf90(struct chrdata *chr, u32 arg1); +void func0f04cf90(struct chrdata *chr, s32 arg1); u32 func0f04d000(struct chrdata *chr); bool func0f04d44c(struct chrdata *chr); void chrEmitSparks(struct chrdata *chr); diff --git a/src/include/library/library_1a500.h b/src/include/library/library_1a500.h index f9222c9ea..c47ea4aff 100644 --- a/src/include/library/library_1a500.h +++ b/src/include/library/library_1a500.h @@ -14,10 +14,10 @@ u32 func0001a740(void); u32 func0001a784(void); u32 func0001a7cc(void); u32 func0001a85c(void); -u32 func0001a91c(void); +s32 func0001a91c(u32 arg0, s32 arg1); u32 func0001a9bc(void); u32 func0001a9e8(void); -u32 func0001aa1c(void); +u32 *func0001aa1c(struct chr020 *chr020, s32 arg1); u32 func0001ab0c(void); u32 func0001abc4(void); u32 func0001ad0c(void); @@ -50,7 +50,7 @@ u32 func0001cc20(void); u32 func0001cd18(void); u32 func0001ce64(void); u32 func0001cebc(void); -u32 func0001d13c(void *chr_unk020); +u32 func0001d13c(struct chr020 *chr020); u32 func0001d15c(void); u32 func0001d17c(void); u32 func0001d1a0(void); @@ -60,7 +60,7 @@ u32 func0001d288(void); u32 func0001d320(void); u32 func0001d4fc(void); u32 func0001d62c(void); -u32 func0001db94(void); +u32 func0001db94(struct chr020 *chr020); u32 func0001dbfc(void); u32 func0001dccc(void); u32 func0001dd90(void); diff --git a/src/include/types.h b/src/include/types.h index d1944f074..967abb27d 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -78,6 +78,12 @@ struct pad { /*0x50*/ u32 unk50; }; +struct chr020 { + /*0x00*/ u32 unk00; + /*0x04*/ u32 unk04; + /*0x08*/ u32 unk08; +}; + struct chrdata { /*0x000*/ s16 chrnum; /*0x002*/ s8 accuracyrating; @@ -99,7 +105,7 @@ struct chrdata { /*0x014*/ u32 hidden; /*0x018*/ u32 chrflags; /*0x01c*/ struct position *pos; - /*0x020*/ void *unk020; + /*0x020*/ struct chr020 *unk020; /*0x024*/ u32 chrwidth; /*0x028*/ u32 chrheight; /*0x02c*/ u32 unk02c;