diff --git a/asm/code_800ED38.s b/asm/code_800ED38.s index 3ff568672..9757a96b6 100644 --- a/asm/code_800ED38.s +++ b/asm/code_800ED38.s @@ -109,246 +109,4 @@ _0800F01A: bx r0 thumb_func_end sub_800EF64 - thumb_func_start sub_800F034 -sub_800F034: - push {r4-r6,lr} - ldr r4, _0800F074 - ldr r0, [r4] - cmp r0, 0 - bne _0800F04E - movs r0, 0x10 - movs r1, 0xB - bl MemoryAlloc - str r0, [r4] - movs r1, 0x10 - bl MemoryClear8 -_0800F04E: - movs r3, 0 - adds r6, r4, 0 - movs r5, 0x1 - negs r5, r5 - movs r4, 0 -_0800F058: - ldr r0, [r6] - lsls r2, r3, 3 - adds r1, r0, r2 - str r5, [r1] - adds r0, 0x4 - adds r0, r2 - str r4, [r0] - adds r3, 0x1 - cmp r3, 0x1 - ble _0800F058 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0800F074: .4byte gUnknown_203B0D4 - thumb_func_end sub_800F034 - - thumb_func_start sub_800F078 -sub_800F078: - push {r4,lr} - ldr r4, _0800F090 - ldr r0, [r4] - cmp r0, 0 - beq _0800F08A - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0800F08A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0800F090: .4byte gUnknown_203B0D4 - thumb_func_end sub_800F078 - - thumb_func_start sub_800F094 -sub_800F094: - push {r4-r6,lr} - movs r3, 0 - ldr r6, _0800F0BC - movs r5, 0x1 - negs r5, r5 - movs r4, 0 -_0800F0A0: - ldr r0, [r6] - lsls r2, r3, 3 - adds r1, r0, r2 - str r5, [r1] - adds r0, 0x4 - adds r0, r2 - str r4, [r0] - adds r3, 0x1 - cmp r3, 0x1 - ble _0800F0A0 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0800F0BC: .4byte gUnknown_203B0D4 - thumb_func_end sub_800F094 - - thumb_func_start sub_800F0C0 -sub_800F0C0: - push {lr} - cmp r0, 0x3 - bne _0800F0D8 - ldr r0, _0800F0D4 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, r1 - bne _0800F0EC - movs r0, 0 - b _0800F0F0 - .align 2, 0 -_0800F0D4: .4byte gUnknown_203B0D4 -_0800F0D8: - ldr r0, _0800F0E8 - ldr r0, [r0] - ldr r0, [r0, 0x8] - cmp r0, r1 - bne _0800F0EC - movs r0, 0x1 - b _0800F0F0 - .align 2, 0 -_0800F0E8: .4byte gUnknown_203B0D4 -_0800F0EC: - movs r0, 0x3 - negs r0, r0 -_0800F0F0: - pop {r1} - bx r1 - thumb_func_end sub_800F0C0 - - thumb_func_start sub_800F0F4 -sub_800F0F4: - push {lr} - cmp r0, 0x3 - bne _0800F114 - ldr r0, _0800F110 - ldr r2, [r0] - ldr r0, [r2] - cmp r0, r1 - beq _0800F11E - ldr r0, [r2, 0x4] - cmp r0, 0 - bne _0800F132 - movs r0, 0 - b _0800F136 - .align 2, 0 -_0800F110: .4byte gUnknown_203B0D4 -_0800F114: - ldr r0, _0800F124 - ldr r2, [r0] - ldr r0, [r2, 0x8] - cmp r0, r1 - bne _0800F128 -_0800F11E: - movs r0, 0x2 - negs r0, r0 - b _0800F136 - .align 2, 0 -_0800F124: .4byte gUnknown_203B0D4 -_0800F128: - ldr r0, [r2, 0xC] - cmp r0, 0 - bne _0800F132 - movs r0, 0x1 - b _0800F136 -_0800F132: - movs r0, 0x1 - negs r0, r0 -_0800F136: - pop {r1} - bx r1 - thumb_func_end sub_800F0F4 - - thumb_func_start sub_800F13C -sub_800F13C: - push {lr} - ldr r1, _0800F158 - ldr r3, [r1] - lsls r1, r0, 3 - adds r0, r3, 0x4 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - bne _0800F154 - adds r1, r3, r1 - ldr r0, [r2, 0x4] - str r0, [r1] -_0800F154: - pop {r0} - bx r0 - .align 2, 0 -_0800F158: .4byte gUnknown_203B0D4 - thumb_func_end sub_800F13C - - thumb_func_start sub_800F15C -sub_800F15C: - push {r4,r5,lr} - adds r4, r0, 0 - movs r3, 0 - ldr r5, _0800F17C -_0800F164: - ldr r1, [r5] - lsls r2, r3, 3 - adds r0, r1, r2 - ldr r0, [r0] - cmp r0, r4 - bne _0800F180 - adds r1, 0x4 - adds r1, r2 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - b _0800F186 - .align 2, 0 -_0800F17C: .4byte gUnknown_203B0D4 -_0800F180: - adds r3, 0x1 - cmp r3, 0x1 - ble _0800F164 -_0800F186: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_800F15C - - thumb_func_start sub_800F18C -sub_800F18C: - ldr r1, _0800F198 - lsls r0, 3 - ldr r1, [r1] - adds r1, r0 - adds r0, r1, 0 - bx lr - .align 2, 0 -_0800F198: .4byte gUnknown_203B0D4 - thumb_func_end sub_800F18C - - thumb_func_start sub_800F19C -sub_800F19C: - push {lr} - ldr r1, _0800F1B4 - ldr r1, [r1] - lsls r0, 3 - adds r1, 0x4 - adds r1, r0 - ldr r0, [r1] - cmp r0, 0 - beq _0800F1B8 - movs r0, 0x1 - b _0800F1BA - .align 2, 0 -_0800F1B4: .4byte gUnknown_203B0D4 -_0800F1B8: - movs r0, 0 -_0800F1BA: - pop {r1} - bx r1 - thumb_func_end sub_800F19C - .align 2,0 diff --git a/include/code_800E9A8.h b/include/code_800E9A8.h index 067a7658a..dca862fd6 100644 --- a/include/code_800E9A8.h +++ b/include/code_800E9A8.h @@ -20,7 +20,7 @@ struct unkStruct_203B0CC_sub s32 unk24; u8 fill28[0x32 - 0x28]; u32 unk34; - u32 unk38; + u32 effectID; u8 fill3C[0x4C - 0x3C]; u32 unk4C; s32 unk50; diff --git a/src/code_800DAC0.c b/src/code_800DAC0.c index ca0483da4..8c555c33a 100644 --- a/src/code_800DAC0.c +++ b/src/code_800DAC0.c @@ -11,8 +11,8 @@ EWRAM_INIT struct unkStruct_203B0CC *gUnknown_203B0CC = NULL; struct unkStruct_800F18C { - u32 unk0; - u32 unk4; + s32 effectID; + u32 counter; }; extern s32 sub_800E2C0(u32); @@ -144,16 +144,16 @@ void sub_800DC14(s32 param_1) if (preload->unk34 == 3) { for (index2 = 0; index2 < 2; index2 = index2 + 1) { piVar3 = sub_800F18C(index2); - if (piVar3->unk0 == preload->unk38) { - piVar3->unk4--; + if (piVar3->effectID == preload->effectID) { + piVar3->counter--; break; } } } else { puVar4 = sub_800F18C(1); - puVar4->unk4 = 0; - puVar4->unk0 = 0xffffffff; + puVar4->counter = 0; + puVar4->effectID = -1; } sub_800DCA8(preload); } diff --git a/src/code_800F958.c b/src/code_800F958.c index c7adec72d..ab60e5978 100644 --- a/src/code_800F958.c +++ b/src/code_800F958.c @@ -1,6 +1,9 @@ #include "global.h" #include "code_800F958.h" +#include "code_8004AA0.h" #include "code_8009804.h" +#include "code_800E9E4.h" +#include "code_801EE10.h" #include "cpu.h" #include "dungeon_pokemon_sprites.h" #include "memory.h" @@ -26,9 +29,22 @@ struct StatusSprite }; extern struct StatusSprite gStatusSprites[8]; +struct unkStruct_800F18C +{ + s32 effectID; + u32 counter; +}; + +struct unkStruct_203B0D4 +{ + struct unkStruct_800F18C unk0[2]; +}; + +struct unkStruct_203B0D4 *gUnknown_203B0D4; +extern SpriteOAM gUnknown_203B0DC; + extern u8 *gStatusGraphics4bpp[]; // TODO use INCBIN_U8 extern DungeonPos gUnknown_80D3564; -extern SpriteOAM gUnknown_203B0DC; void DrawStatusSprite(s16 param_1,s32 status,DungeonPos *pos,DungeonPos *posOffset, DungeonPos *posScreen,u32 priority, u32 unused); @@ -38,6 +54,97 @@ extern u8 gUnknown_80CE788[]; extern struct FileArchive gEffectFileArchive; +void sub_800F034(void) { + s32 index; + if(gUnknown_203B0D4 == NULL) + { + gUnknown_203B0D4 = MemoryAlloc(sizeof(struct unkStruct_203B0D4), 0xB); + MemoryClear8(gUnknown_203B0D4, sizeof(struct unkStruct_203B0D4)); + } + for(index = 0; index < 2; index++) + { + gUnknown_203B0D4->unk0[index].effectID = -1; + gUnknown_203B0D4->unk0[index].counter = 0; + } +} + +void sub_800F078(void) +{ + if(gUnknown_203B0D4) + { + MemoryFree(gUnknown_203B0D4); + gUnknown_203B0D4 = NULL; + } +} + +void sub_800F094(void) +{ + s32 index; + for(index = 0; index < 2; index++) + { + gUnknown_203B0D4->unk0[index].effectID = -1; + gUnknown_203B0D4->unk0[index].counter = 0; + } +} + +s32 sub_800F0C0(s32 animType, s32 effectID) +{ + if (animType == 3) { + if (gUnknown_203B0D4->unk0[0].effectID == effectID) return 0; + } + else { + if (gUnknown_203B0D4->unk0[1].effectID == effectID) return 1; + } + return -3; +} + + +s32 sub_800F0F4(s32 animType, s32 effectID) +{ + if (animType == 3) { + if (gUnknown_203B0D4->unk0[0].effectID == effectID) return -2; + if (gUnknown_203B0D4->unk0[0].counter == 0) return 0; + } + else { + if (gUnknown_203B0D4->unk0[1].effectID == effectID) return -2; + if (gUnknown_203B0D4->unk0[1].counter == 0) return 1; + } + return -1; +} + +void sub_800F13C(s32 index, OpenedFile *file, unkStruct_80B9CC4 * r2) +{ + if(gUnknown_203B0D4->unk0[index].counter == 0) + gUnknown_203B0D4->unk0[index].effectID = r2->effectId; +} + +void sub_800F15C(s32 effectID) +{ + s32 index; + + for(index = 0; index < 2; index++) + { + if(gUnknown_203B0D4->unk0[index].effectID == effectID) + { + gUnknown_203B0D4->unk0[index].counter++; + break; + } + } +} + +struct unkStruct_800F18C *sub_800F18C(s32 index) +{ + return &gUnknown_203B0D4->unk0[index]; +} + +s32 sub_800F19C(s32 index) +{ + if(gUnknown_203B0D4->unk0[index].counter == 0) + return 0; + else + return 1; +} + OpenedFile * sub_800F1C0(u32 animType, s32 effectID) { u8 fileName [8];