diff --git a/asm/non_matchings/unknown_00BC20/func_8000B290.s b/asm/non_matchings/unknown_00BC20/func_8000B290.s index 8e14c2f7..01e85857 100644 --- a/asm/non_matchings/unknown_00BC20/func_8000B290.s +++ b/asm/non_matchings/unknown_00BC20/func_8000B290.s @@ -60,7 +60,7 @@ glabel func_8000B290 /* 00BF64 8000B364 0C003FEE */ jal func_8000FFB8 /* 00BF68 8000B368 00000000 */ nop .L8000B36C: -/* 00BF6C 8000B36C 0C004013 */ jal func_8001004C +/* 00BF6C 8000B36C 0C004013 */ jal particlePtrList_flush /* 00BF70 8000B370 AE200000 */ sw $zero, ($s1) /* 00BF74 8000B374 8FBF0024 */ lw $ra, 0x24($sp) /* 00BF78 8000B378 8FB00018 */ lw $s0, 0x18($sp) diff --git a/asm/non_matchings/unknown_00BC20/func_8000C8F8.s b/asm/non_matchings/unknown_00BC20/func_8000C8F8.s index 121331a6..ae949dd5 100644 --- a/asm/non_matchings/unknown_00BC20/func_8000C8F8.s +++ b/asm/non_matchings/unknown_00BC20/func_8000C8F8.s @@ -171,7 +171,7 @@ glabel func_8000C8F8 /* 00D778 8000CB78 00000000 */ nop /* 00D77C 8000CB7C 15000009 */ bnez $t0, .L8000CBA4 /* 00D780 8000CB80 00000000 */ nop -/* 00D784 8000CB84 0C004013 */ jal func_8001004C +/* 00D784 8000CB84 0C004013 */ jal particlePtrList_flush /* 00D788 8000CB88 00000000 */ nop /* 00D78C 8000CB8C 0C005FA6 */ jal func_80017E98 /* 00D790 8000CB90 00000000 */ nop diff --git a/asm/non_matchings/unknown_00BC20/func_8000FFB8.s b/asm/non_matchings/unknown_00BC20/func_8000FFB8.s deleted file mode 100644 index f193440f..00000000 --- a/asm/non_matchings/unknown_00BC20/func_8000FFB8.s +++ /dev/null @@ -1,41 +0,0 @@ -glabel func_8000FFB8 -/* 010BB8 8000FFB8 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 010BBC 8000FFBC AFBF0014 */ sw $ra, 0x14($sp) -/* 010BC0 8000FFC0 AFA40018 */ sw $a0, 0x18($sp) -/* 010BC4 8000FFC4 8484004A */ lh $a0, 0x4a($a0) -/* 010BC8 8000FFC8 00000000 */ nop -/* 010BCC 8000FFCC 348F8000 */ ori $t7, $a0, 0x8000 -/* 010BD0 8000FFD0 000FC400 */ sll $t8, $t7, 0x10 -/* 010BD4 8000FFD4 0C00916D */ jal func_800245B4 -/* 010BD8 8000FFD8 00182403 */ sra $a0, $t8, 0x10 -/* 010BDC 8000FFDC 3C028012 */ lui $v0, %hi(D_8011AEC8) # $v0, 0x8012 -/* 010BE0 8000FFE0 2442AEC8 */ addiu $v0, %lo(D_8011AEC8) # addiu $v0, $v0, -0x5138 -/* 010BE4 8000FFE4 8C4A0000 */ lw $t2, ($v0) -/* 010BE8 8000FFE8 3C098012 */ lui $t1, %hi(D_8011AEC4) # $t1, 0x8012 -/* 010BEC 8000FFEC 8D29AEC4 */ lw $t1, %lo(D_8011AEC4)($t1) -/* 010BF0 8000FFF0 8FA80018 */ lw $t0, 0x18($sp) -/* 010BF4 8000FFF4 000A5880 */ sll $t3, $t2, 2 -/* 010BF8 8000FFF8 012B6021 */ addu $t4, $t1, $t3 -/* 010BFC 8000FFFC AD880000 */ sw $t0, ($t4) -/* 010C00 80010000 8C4D0000 */ lw $t5, ($v0) -/* 010C04 80010004 8FBF0014 */ lw $ra, 0x14($sp) -/* 010C08 80010008 25AE0001 */ addiu $t6, $t5, 1 -/* 010C0C 8001000C AC4E0000 */ sw $t6, ($v0) -/* 010C10 80010010 03E00008 */ jr $ra -/* 010C14 80010014 27BD0018 */ addiu $sp, $sp, 0x18 - -/* 010C18 80010018 3C028012 */ lui $v0, %hi(D_8011AEBC) # $v0, 0x8012 -/* 010C1C 8001001C 8C42AEBC */ lw $v0, %lo(D_8011AEBC)($v0) -/* 010C20 80010020 03E00008 */ jr $ra -/* 010C24 80010024 00000000 */ nop - -/* 010C28 80010028 3C0E8012 */ lui $t6, %hi(D_8011AEB8) # $t6, 0x8012 -/* 010C2C 8001002C 8DCEAEB8 */ lw $t6, %lo(D_8011AEB8)($t6) -/* 010C30 80010030 00047840 */ sll $t7, $a0, 1 -/* 010C34 80010034 3C088012 */ lui $t0, %hi(D_8011AD68) # $t0, 0x8012 -/* 010C38 80010038 01CFC021 */ addu $t8, $t6, $t7 -/* 010C3C 8001003C 87190000 */ lh $t9, ($t8) -/* 010C40 80010040 8D08AD68 */ lw $t0, %lo(D_8011AD68)($t0) -/* 010C44 80010044 03E00008 */ jr $ra -/* 010C48 80010048 0328102A */ slt $v0, $t9, $t0 - diff --git a/asm/non_matchings/unknown_00BC20/func_80010994.s b/asm/non_matchings/unknown_00BC20/func_80010994.s index 6363aa5a..4bbf635c 100644 --- a/asm/non_matchings/unknown_00BC20/func_80010994.s +++ b/asm/non_matchings/unknown_00BC20/func_80010994.s @@ -419,7 +419,7 @@ glabel func_80010994 /* 011B88 80010F88 00000000 */ nop /* 011B8C 80010F8C 17200009 */ bnez $t9, .L80010FB4 /* 011B90 80010F90 00000000 */ nop -/* 011B94 80010F94 0C004013 */ jal func_8001004C +/* 011B94 80010F94 0C004013 */ jal particlePtrList_flush /* 011B98 80010F98 00000000 */ nop /* 011B9C 80010F9C 0C005FA6 */ jal func_80017E98 /* 011BA0 80010FA0 00000000 */ nop diff --git a/asm/non_matchings/unknown_00BC20/func_8001004C.s b/asm/non_matchings/unknown_00BC20/particlePtrList_flush.s similarity index 92% rename from asm/non_matchings/unknown_00BC20/func_8001004C.s rename to asm/non_matchings/unknown_00BC20/particlePtrList_flush.s index f3806657..ee2f7852 100644 --- a/asm/non_matchings/unknown_00BC20/func_8001004C.s +++ b/asm/non_matchings/unknown_00BC20/particlePtrList_flush.s @@ -1,9 +1,9 @@ -glabel func_8001004C +glabel particlePtrList_flush /* 010C4C 8001004C 27BDFFC8 */ addiu $sp, $sp, -0x38 /* 010C50 80010050 AFB70030 */ sw $s7, 0x30($sp) -/* 010C54 80010054 3C178012 */ lui $s7, %hi(D_8011AEC8) # $s7, 0x8012 +/* 010C54 80010054 3C178012 */ lui $s7, %hi(particleCount) # $s7, 0x8012 /* 010C58 80010058 3C018012 */ lui $at, %hi(D_8011AE88) # $at, 0x8012 -/* 010C5C 8001005C 26F7AEC8 */ addiu $s7, %lo(D_8011AEC8) # addiu $s7, $s7, -0x5138 +/* 010C5C 8001005C 26F7AEC8 */ addiu $s7, %lo(particleCount) # addiu $s7, $s7, -0x5138 /* 010C60 80010060 AC20AE88 */ sw $zero, %lo(D_8011AE88)($at) /* 010C64 80010064 8EEE0000 */ lw $t6, ($s7) /* 010C68 80010068 AFB30020 */ sw $s3, 0x20($sp) @@ -16,14 +16,14 @@ glabel func_8001004C /* 010C84 80010084 AFB00014 */ sw $s0, 0x14($sp) /* 010C88 80010088 19C0003C */ blez $t6, .L8001017C /* 010C8C 8001008C 00009825 */ move $s3, $zero -/* 010C90 80010090 3C158012 */ lui $s5, %hi(D_8011AEC4) # $s5, 0x8012 +/* 010C90 80010090 3C158012 */ lui $s5, %hi(particlePtrList) # $s5, 0x8012 /* 010C94 80010094 3C148012 */ lui $s4, %hi(D_8011AE7C) # $s4, 0x8012 /* 010C98 80010098 3C118012 */ lui $s1, %hi(objPtrList) # $s1, 0x8012 /* 010C9C 8001009C 3C108012 */ lui $s0, %hi(objCount) # $s0, 0x8012 /* 010CA0 800100A0 2610AE5C */ addiu $s0, %lo(objCount) # addiu $s0, $s0, -0x51a4 /* 010CA4 800100A4 2631AE58 */ addiu $s1, %lo(objPtrList) # addiu $s1, $s1, -0x51a8 /* 010CA8 800100A8 2694AE7C */ addiu $s4, %lo(D_8011AE7C) # addiu $s4, $s4, -0x5184 -/* 010CAC 800100AC 26B5AEC4 */ addiu $s5, %lo(D_8011AEC4) # addiu $s5, $s5, -0x513c +/* 010CAC 800100AC 26B5AEC4 */ addiu $s5, %lo(particlePtrList) # addiu $s5, $s5, -0x513c /* 010CB0 800100B0 00009025 */ move $s2, $zero /* 010CB4 800100B4 2416FFFF */ li $s6, -1 .L800100B8: diff --git a/asm/non_matchings/unknown_0255E0/func_8002C7D4.s b/asm/non_matchings/unknown_0255E0/func_8002C7D4.s index 5fadae3d..b7936d61 100644 --- a/asm/non_matchings/unknown_0255E0/func_8002C7D4.s +++ b/asm/non_matchings/unknown_0255E0/func_8002C7D4.s @@ -86,7 +86,7 @@ glabel func_8002C7D4 /* 02D514 8002C914 00000000 */ nop /* 02D518 8002C918 0C003FEE */ jal func_8000FFB8 /* 02D51C 8002C91C 00000000 */ nop -/* 02D520 8002C920 0C004013 */ jal func_8001004C +/* 02D520 8002C920 0C004013 */ jal particlePtrList_flush /* 02D524 8002C924 00000000 */ nop .L8002C928: /* 02D528 8002C928 0C003181 */ jal func_8000C604 diff --git a/asm/non_matchings/unknown_066AA0/func_8006CCF0.s b/asm/non_matchings/unknown_066AA0/func_8006CCF0.s index bef0a557..62904546 100644 --- a/asm/non_matchings/unknown_066AA0/func_8006CCF0.s +++ b/asm/non_matchings/unknown_066AA0/func_8006CCF0.s @@ -120,7 +120,7 @@ glabel func_8006CCF0 /* 06DAA8 8006CEA8 00000000 */ nop /* 06DAAC 8006CEAC A0203515 */ sb $zero, %lo(gIsPaused)($at) .L8006CEB0: -/* 06DAB0 8006CEB0 0C004013 */ jal func_8001004C +/* 06DAB0 8006CEB0 0C004013 */ jal particlePtrList_flush /* 06DAB4 8006CEB4 00000000 */ nop /* 06DAB8 8006CEB8 0C006FC8 */ jal func_8001BF20 /* 06DABC 8006CEBC 00000000 */ nop diff --git a/asm/non_matchings/unknown_09F8F0/func_800A003C.s b/asm/non_matchings/unknown_09F8F0/func_800A003C.s index 22223ca0..50396373 100644 --- a/asm/non_matchings/unknown_09F8F0/func_800A003C.s +++ b/asm/non_matchings/unknown_09F8F0/func_800A003C.s @@ -81,7 +81,7 @@ glabel func_800A003C /* 0A0D5C 800A015C 8E440000 */ lw $a0, ($s2) /* 0A0D60 800A0160 0C01C450 */ jal func_80071140 /* 0A0D64 800A0164 00000000 */ nop -/* 0A0D68 800A0168 0C004013 */ jal func_8001004C +/* 0A0D68 800A0168 0C004013 */ jal particlePtrList_flush /* 0A0D6C 800A016C 00000000 */ nop /* 0A0D70 800A0170 8FBF002C */ lw $ra, 0x2c($sp) /* 0A0D74 800A0174 8FB00018 */ lw $s0, 0x18($sp) diff --git a/src/unknown_00BC20.c b/src/unknown_00BC20.c index badc5a67..ae23e3fd 100644 --- a/src/unknown_00BC20.c +++ b/src/unknown_00BC20.c @@ -104,8 +104,8 @@ extern u32 D_8011AE94; extern s32 D_8011AEB0[2]; extern s16 *D_8011AEB8; extern s32 D_8011AEBC; -extern s32 *D_8011AEC4; -extern s32 D_8011AEC8; +extern Player **particlePtrList; +extern s32 particleCount; /* Size: 0x3C bytes */ typedef struct unknown8011AECC { @@ -161,6 +161,8 @@ void func_8000C460(void); void *func_80070B78(s32, u32); void *func_80070C9C(s32, u32); s32 *func_80076C58(s32); +void func_8000FFB8(Player *); +void particlePtrList_flush(void); void func_8001D258(f32, f32, s32, s32, s32); extern void func_800245B4(s16); @@ -189,7 +191,7 @@ void func_8000BF8C(void) { func_8001D258(D_800E514C, D_800E5150, 0, -0x2000, 0); D_8011AE68 = (s32*)func_80070B78(0x15800, 0x200); - D_8011AEC4 = (s32*)func_80070C9C(0x320, 0xFFFF); + particlePtrList = (Player **)func_80070C9C(0x320, 0xFFFF); D_8011AE6C = (s32*)func_80070C9C(0x50, 0xFFFF); D_8011AE74 = (s32*)func_80070C9C(0x200, 0xFFFF); D_8011AECC = (unknown8011AECC*)func_80070C9C(0xE10, 0xFFFF); @@ -267,7 +269,7 @@ void func_8000C460(void) { D_8011AD26 = 1; D_8011AD5C = 0; D_8011AD60 = 0; - D_8011AEC8 = 0; + particleCount = 0; D_8011AE70 = 0; D_8011AED0 = 0; D_8011AED4 = 0; @@ -319,12 +321,12 @@ void func_8000C604(void) { D_800DC744 = 0; func_8006F398(); } - func_8001004C(); + particlePtrList_flush(); len = objCount; for (i = 0; i < len; i++) { func_800101AC(objPtrList[i], 1); } - D_8011AEC8 = 0; + particleCount = 0; objCount = 0; D_8011AE60 = 0; func_8000C460(); @@ -451,7 +453,7 @@ void func_8000E1EC(unk8011AD40 *arg0, s32 arg1) { D_8011AD48 = arg0->unk10; D_8011AD4A = arg0->unk14; D_8011AD4C = arg0->unk0; - func_8000FFB8(); + func_8000FFB8(arg0); playerCount = 0; } @@ -538,8 +540,60 @@ s32 func_8000FD34(unk8000FD34 *arg0, s32 arg1) { } GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_8000FD54.s") -GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_8000FFB8.s") -GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_8001004C.s") + + +void func_8000FFB8(Player* arg0){ + func_800245B4(arg0->unk4A | 0x8000); + particlePtrList[particleCount] = arg0; + particleCount++; +} + + +s32 func_80010018(void){ + return D_8011AEBC; +} + +s32 func_80010028(s32 arg0){ + return (D_8011AEB8[arg0] < D_8011AD68); +} + +#if 1 +GLOBAL_ASM("asm/non_matchings/unknown_00BC20/particlePtrList_flush.s") +#else +//bad regalloc; swap s2 = s3 +/*removes objects in particleList from objPtrList and frees*/ +void particlePtrList_flush(void){ + s32 j, i, search_indx, tmp; + Player* searchObj; + + D_8011AE88 = 0; + for (i = 0; i < particleCount; i++){ + search_indx = -1; + searchObj = particlePtrList[i]; + + for(j = 0; j < objCount; j++){ + if(searchObj == objPtrList[j]) + search_indx = j; + } + + //if object found + if(search_indx != -1){ + tmp = D_8011AE7C; + if(search_indx < D_8011AE7C) + D_8011AE7C = tmp-1; + + objCount--; + for(j = search_indx; j < objCount; j++){ + objPtrList[j] = objPtrList[j+1]; + } + } + func_800101AC(searchObj,0); + } + particleCount = 0; +} +#endif + + GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_800101AC.s") GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_80010994.s") GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_80011134.s") diff --git a/src/unknown_066AA0.c b/src/unknown_066AA0.c index 33cf5a96..63dc0673 100644 --- a/src/unknown_066AA0.c +++ b/src/unknown_066AA0.c @@ -1679,7 +1679,7 @@ void func_8006DBE4(void) { void func_8006DC58(s32 arg0) { if (func_800C73E0() == 0) { func_80010994(arg0); - func_8001004C(); + particlePtrList_flush(); func_8001BF20(); D_80024D54(&D_801211F8, &D_80121208, &D_80121218, &D_80121228, arg0); func_800C3440(arg0); diff --git a/src/unknown_080500.c b/src/unknown_080500.c index 57f7d488..bbc76fa4 100644 --- a/src/unknown_080500.c +++ b/src/unknown_080500.c @@ -2915,7 +2915,7 @@ void func_8009C508(s32 arg0) { D_80126550[arg0] = 0; D_80126750[arg0] = 0; D_800DF758--; - func_8001004C(); + particlePtrList_flush(); } if (D_800DF758 == 0) { if (D_800DF75C != NULL) { diff --git a/undefined_syms.txt b/undefined_syms.txt index 1a76599e..fc8c3371 100755 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1875,8 +1875,8 @@ D_8011AEB0 = 0x8011AEB0; D_8011AEB8 = 0x8011AEB8; D_8011AEBC = 0x8011AEBC; D_8011AEC0 = 0x8011AEC0; -D_8011AEC4 = 0x8011AEC4; -D_8011AEC8 = 0x8011AEC8; +particlePtrList = 0x8011AEC4; +particleCount = 0x8011AEC8; D_8011AECC = 0x8011AECC; D_8011AED0 = 0x8011AED0; D_8011AED4 = 0x8011AED4;