From b2f08ba1d35ce31cc2bff0d5946a604e1f032ee3 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 8 Jul 2025 14:20:36 +0200 Subject: [PATCH] up to sub_800DE8C --- asm/code_800DAC0.s | 475 -------------------------------- include/code_800E9A8.h | 31 ++- include/sprite.h | 13 + src/code_800DAC0.c | 535 +++++++++++++++++++++++++++++------- src/code_806CD90.c | 10 +- src/friend_areas_map_util.c | 7 +- src/graphics_memory.c | 2 +- src/sprite.c | 10 +- 8 files changed, 468 insertions(+), 615 deletions(-) diff --git a/asm/code_800DAC0.s b/asm/code_800DAC0.s index 5843b950a..dea1cccc4 100644 --- a/asm/code_800DAC0.s +++ b/asm/code_800DAC0.s @@ -5,482 +5,7 @@ .text - thumb_func_start sub_800DD0C -sub_800DD0C: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - adds r5, r0, 0 - adds r6, r1, 0 - movs r0, 0x58 - adds r0, r5 - mov r8, r0 - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 6 - ands r0, r1 - cmp r0, 0 - beq _0800DD2E - movs r0, 0 - b _0800DD30 -_0800DD2E: - lsrs r0, r1, 15 -_0800DD30: - cmp r0, 0 - bne _0800DD64 - adds r0, r5, 0 - bl sub_800DCA8 - ldr r0, [r5, 0x34] - cmp r0, 0x3 - bne _0800DD60 - movs r4, 0 - b _0800DD46 -_0800DD44: - adds r4, 0x1 -_0800DD46: - cmp r4, 0x1 - bgt _0800DD60 - adds r0, r4, 0 - bl sub_800F18C - adds r2, r0, 0 - ldr r1, [r2] - ldr r0, [r5, 0x38] - cmp r1, r0 - bne _0800DD44 - ldr r0, [r2, 0x4] - subs r0, 0x1 - str r0, [r2, 0x4] -_0800DD60: - movs r0, 0 - b _0800DE28 -_0800DD64: - mov r0, r8 - bl RunAxAnimationFrame - movs r4, 0 - ldr r0, [r5, 0x8] - movs r1, 0x7 - ands r0, r1 - cmp r0, 0 - bne _0800DD88 - ldr r0, [r5, 0x14] - cmp r0, 0x5 - bgt _0800DD84 - cmp r0, 0x3 - blt _0800DD84 - subs r4, 0x3 - b _0800DD8A -_0800DD84: - adds r4, 0x3 - b _0800DD8A -_0800DD88: - movs r4, 0x3 -_0800DD8A: - movs r2, 0 - ldr r1, [r5, 0x20] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0800DD9E - ldrh r0, [r5, 0x1E] - lsls r0, 16 - ldrh r2, [r5, 0x1C] - orrs r2, r0 -_0800DD9E: - lsls r0, r2, 16 - asrs r1, r0, 16 - adds r7, r0, 0 - cmp r1, 0x63 - beq _0800DE26 - asrs r0, r2, 16 - adds r2, r0, 0 - cmp r2, 0x63 - beq _0800DE26 - ldr r3, [r5, 0x24] - ldr r0, _0800DE34 - cmp r3, r0 - bne _0800DDCA - movs r1, 0x1A - ldrsh r0, [r5, r1] - movs r3, 0x2 - ldrsh r1, [r6, r3] - subs r0, r1 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - adds r3, r0, r4 -_0800DDCA: - movs r4, 0x18 - ldrsh r0, [r5, r4] - movs r4, 0 - ldrsh r1, [r6, r4] - subs r0, r1 - asrs r1, r7, 16 - adds r4, r0, r1 - movs r7, 0x1A - ldrsh r0, [r5, r7] - movs r7, 0x2 - ldrsh r1, [r6, r7] - subs r0, r1 - adds r2, r0, r2 - adds r0, r5, 0 - adds r0, 0xCC - ldrh r0, [r0] - ldrh r1, [r5, 0x18] - adds r0, r1 - strh r0, [r5, 0x18] - adds r0, r5, 0 - adds r0, 0xCE - ldrh r0, [r0] - ldrh r7, [r5, 0x1A] - adds r0, r7 - strh r0, [r5, 0x1A] - adds r1, r4, 0 - adds r1, 0x3F - movs r0, 0xB7 - lsls r0, 1 - cmp r1, r0 - bhi _0800DE26 - movs r0, 0x40 - negs r0, r0 - cmp r2, r0 - ble _0800DE26 - cmp r2, 0xDF - bgt _0800DE26 - ldr r0, [r5, 0x3C] - str r0, [sp] - adds r0, r5, 0 - adds r0, 0x28 - str r0, [sp, 0x4] - mov r0, r8 - adds r1, r4, 0 - bl DoAxFrame_800558C -_0800DE26: - movs r0, 0x1 -_0800DE28: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0800DE34: .4byte 0x0000ffff - thumb_func_end sub_800DD0C - thumb_func_start sub_800DE38 -sub_800DE38: - push {r4,r5,lr} - adds r5, r0, 0 - adds r0, 0x58 - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 6 - ands r0, r1 - cmp r0, 0 - beq _0800DE4E - movs r0, 0 - b _0800DE50 -_0800DE4E: - lsrs r0, r1, 15 -_0800DE50: - cmp r0, 0 - bne _0800DE84 - adds r0, r5, 0 - bl sub_800DCA8 - ldr r0, [r5, 0x34] - cmp r0, 0x3 - bne _0800DE80 - movs r4, 0 - b _0800DE66 -_0800DE64: - adds r4, 0x1 -_0800DE66: - cmp r4, 0x1 - bgt _0800DE80 - adds r0, r4, 0 - bl sub_800F18C - adds r2, r0, 0 - ldr r1, [r2] - ldr r0, [r5, 0x38] - cmp r1, r0 - bne _0800DE64 - ldr r0, [r2, 0x4] - subs r0, 0x1 - str r0, [r2, 0x4] -_0800DE80: - movs r0, 0 - b _0800DE86 -_0800DE84: - movs r0, 0x1 -_0800DE86: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_800DE38 - - thumb_func_start sub_800DE8C -sub_800DE8C: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r6, r0, 0 - movs r0, 0x94 - adds r0, r6 - mov r8, r0 - ldr r4, [r0, 0x18] - cmp r4, 0 - beq _0800DEA4 - b _0800E09C -_0800DEA4: - ldr r1, [r0, 0x14] - movs r7, 0x1 - str r7, [sp] - adds r0, r6, 0 - adds r0, 0xAC - str r0, [sp, 0x4] - add r2, sp, 0xC - str r2, [sp, 0x8] - mov r0, r8 - movs r2, 0 - movs r3, 0 - bl sub_8009A7C - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _0800DEC8 - b _0800E030 -_0800DEC8: - add r0, sp, 0xC - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _0800DEE8 - adds r0, r6, 0 - adds r0, 0xB4 - strb r7, [r0] - ldr r0, _0800DF0C - ldr r0, [r0] - ldr r2, _0800DF10 - adds r1, r0, r2 - str r4, [r1] - ldr r1, _0800DF14 - adds r0, r1 - str r4, [r0] -_0800DEE8: - add r0, sp, 0xC - ldrh r0, [r0, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - beq _0800DF6C - cmp r0, 0x63 - bne _0800DF1C - ldr r0, _0800DF0C - ldr r0, [r0] - ldr r1, _0800DF10 - adds r2, r0, r1 - ldr r1, _0800DF18 - str r1, [r2] - ldr r2, _0800DF14 - adds r0, r2 - str r4, [r0] - b _0800DF6C - .align 2, 0 -_0800DF0C: .4byte gUnknown_203B0CC -_0800DF10: .4byte 0x00001a08 -_0800DF14: .4byte 0x00001a0c -_0800DF18: .4byte 0x00000c1c -_0800DF1C: - cmp r0, 0 - ble _0800DF50 - ldr r0, _0800DF40 - ldr r4, [r0] - ldr r0, _0800DF44 - adds r5, r4, r0 - ldr r1, _0800DF48 - adds r4, r1 - add r0, sp, 0xC - movs r2, 0x2 - ldrsh r1, [r0, r2] - ldr r0, _0800DF4C - bl __divsi3 - str r0, [r4] - str r0, [r5] - b _0800DF6C - .align 2, 0 -_0800DF40: .4byte gUnknown_203B0CC -_0800DF44: .4byte 0x00001a08 -_0800DF48: .4byte 0x00001a0c -_0800DF4C: .4byte 0x00000c1c -_0800DF50: - ldr r0, _0800DFA4 - ldr r4, [r0] - ldr r0, _0800DFA8 - adds r1, r4, r0 - ldr r0, _0800DFAC - str r0, [r1] - ldr r1, _0800DFB0 - adds r4, r1 - add r1, sp, 0xC - movs r2, 0x2 - ldrsh r1, [r1, r2] - bl __divsi3 - str r0, [r4] -_0800DF6C: - mov r0, r8 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0 - bne _0800DF78 - b _0800E094 -_0800DF78: - ldr r0, _0800DFA4 - ldr r1, [r0] - ldr r2, _0800DFB4 - adds r0, r1, r2 - ldr r0, [r0] - cmp r0, 0 - beq _0800DFB8 - cmp r0, 0x1 - bne _0800DFEA - adds r0, r6, 0 - adds r0, 0xB8 - ldr r0, [r0] - ldr r0, [r0, 0x4] - ldr r1, [r0, 0x10] - movs r0, 0xE0 - lsls r0, 2 - adds r1, r0 - movs r0, 0xE0 - movs r2, 0x10 - bl sub_809971C - b _0800DFEA - .align 2, 0 -_0800DFA4: .4byte gUnknown_203B0CC -_0800DFA8: .4byte 0x00001a08 -_0800DFAC: .4byte 0x00000c1c -_0800DFB0: .4byte 0x00001a0c -_0800DFB4: .4byte 0x00001a04 -_0800DFB8: - ldr r2, _0800E010 - adds r0, r1, r2 - ldr r0, [r0] - movs r1, 0x64 - bl __divsi3 - adds r7, r0, 0 - movs r4, 0 - adds r6, 0xB8 - movs r5, 0xE0 - lsls r5, 2 -_0800DFCE: - adds r0, r4, 0 - adds r0, 0xE0 - ldr r1, [r6] - ldr r1, [r1, 0x4] - ldr r1, [r1, 0x10] - adds r1, r5 - adds r2, r7, 0 - movs r3, 0 - bl SetBGPaletteBufferColorRGB - adds r5, 0x4 - adds r4, 0x1 - cmp r4, 0xF - ble _0800DFCE -_0800DFEA: - ldr r1, _0800E014 - ldr r2, _0800E018 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _0800E01C - ldr r0, [r0] - ldr r1, _0800E010 - adds r2, r0, r1 - adds r1, 0x4 - adds r0, r1 - ldr r1, [r2] - ldr r0, [r0] - adds r1, r0 - str r1, [r2] - cmp r1, 0 - bge _0800E020 - movs r0, 0 - str r0, [r2] - b _0800E094 - .align 2, 0 -_0800E010: .4byte 0x00001a08 -_0800E014: .4byte gUnknown_2026E4E -_0800E018: .4byte 0x00000a0a -_0800E01C: .4byte gUnknown_203B0CC -_0800E020: - ldr r0, _0800E02C - cmp r1, r0 - ble _0800E094 - str r0, [r2] - b _0800E094 - .align 2, 0 -_0800E02C: .4byte 0x00000c1c -_0800E030: - bl sub_8009BE4 - adds r0, r6, 0 - bl sub_800DCA8 - bl sub_8000728 - cmp r0, 0x1 - bne _0800E058 - bl LoadDungeonMapPalette - movs r0, 0 - movs r1, 0 - bl sub_803EAF0 - movs r0, 0x80 - lsls r0, 8 - movs r1, 0 - bl sub_800CD64 -_0800E058: - ldr r4, _0800E084 - ldr r0, [r4] - ldr r2, _0800E088 - adds r0, r2 - ldr r0, [r0] - bl sub_800CDA8 - ldr r1, _0800E08C - ldr r0, [r4] - ldr r2, _0800E090 - adds r0, r2 - ldrh r0, [r0] - strh r0, [r1] - movs r0, 0x1 - bl sub_800F18C - str r5, [r0, 0x4] - movs r1, 0x1 - negs r1, r1 - str r1, [r0] - movs r0, 0 - b _0800E0A6 - .align 2, 0 -_0800E084: .4byte gUnknown_203B0CC -_0800E088: .4byte 0x00001a10 -_0800E08C: .4byte gUnknown_2026E4E -_0800E090: .4byte 0x00001a14 -_0800E094: - mov r1, r8 - ldr r0, [r1, 0x14] - adds r0, 0x1 - str r0, [r1, 0x14] -_0800E09C: - mov r2, r8 - ldr r0, [r2, 0x18] - subs r0, 0x1 - str r0, [r2, 0x18] - movs r0, 0x1 -_0800E0A6: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_800DE8C thumb_func_start sub_800E0B4 sub_800E0B4: diff --git a/include/code_800E9A8.h b/include/code_800E9A8.h index 4b5d4206e..3724336db 100644 --- a/include/code_800E9A8.h +++ b/include/code_800E9A8.h @@ -6,6 +6,17 @@ #include "structs/str_position.h" #include "structs/str_file_system.h" +struct unkStruct_203B0CC_x94 +{ + s32 unk0; + u16 **unk4; + u8 fill8[0x14-0x8]; + s32 unk14; + s32 unk18; + s32 fill1C; + u8 unk20; +}; + struct unkStruct_203B0CC_sub { // size: 0xD0 @@ -28,23 +39,25 @@ struct unkStruct_203B0CC_sub s32 unk50; u8 unk54; u8 fill55[0x58 - 0x55]; - axObject unk58; - u8 fillA4[0xB8 - 0xA4]; + axdata unk58; + struct unkStruct_203B0CC_x94 unk94; OpenedFile *unkB8; u8 fillBC[0xCC - 0xBC]; - s16 unkCC[2]; // NOTE: might be DungeonPos + s16 unkCC[2]; }; +#define UNK_203B0CC_ARR_COUNT 0x20 + struct unkStruct_203B0CC { // size: 0x1A18 - struct unkStruct_203B0CC_sub unk0[0x20]; - u32 unk1A00; + struct unkStruct_203B0CC_sub unk0[UNK_203B0CC_ARR_COUNT]; + s32 unk1A00; /* 0x1A04 */ u32 fileSelection; - u32 unk1A08; - u32 unk1A0C; - u32 unk1A10; - u8 fill1A14[0x1A18 - 0x1A14]; + s32 unk1A08; + s32 unk1A0C; + s32 unk1A10; + u16 unk1A14; }; bool8 sub_800E9A8(s32 a0); diff --git a/include/sprite.h b/include/sprite.h index 13d3de35c..58e4b77bb 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -57,4 +57,17 @@ void sub_800569C(DungeonPos *, axdata *, u8); void sub_8005700(DungeonPos *dstPos, axdata *axData); void sub_8005770(s32, const RGB *color, s32 brightness, const RGB *ramp); +static inline bool8 AxFlag8000(axdata *ax) +{ + return (ax->flags & 0x8000) != 0; +} + +static inline bool8 AxFlag8000_Not2000(axdata *ax) +{ + if (ax->flags & 0x2000) + return FALSE; + else + return (ax->flags & 0x8000) != 0; +} + #endif // GUARD_SPRITE_H diff --git a/src/code_800DAC0.c b/src/code_800DAC0.c index 09cd74f99..20644d26f 100644 --- a/src/code_800DAC0.c +++ b/src/code_800DAC0.c @@ -11,6 +11,8 @@ #include "main_loops.h" #include "memory.h" #include "sprite.h" +#include "bg_palette_buffer.h" +#include "cpu.h" EWRAM_INIT struct unkStruct_203B0CC *gUnknown_203B0CC = NULL; @@ -39,128 +41,113 @@ extern void sub_800F094(); void sub_800DAC0(u32 fileSelection) { - s32 index; - OpenedFile *filePtr; - struct unkStruct_203B0CC_sub *preload; + s32 i; + OpenedFile *filePtr; + struct unkStruct_203B0CC_sub *ptr; - if (gUnknown_203B0CC != NULL) { - sub_800DB7C(); - } - gUnknown_203B0CC = MemoryAlloc(sizeof(struct unkStruct_203B0CC), 0xb); - MemoryClear8(gUnknown_203B0CC, sizeof(struct unkStruct_203B0CC)); - gUnknown_203B0CC->fileSelection = fileSelection; - for(index = 0, preload = &gUnknown_203B0CC->unk0[index]; index < 0x20; index++, preload++) - { - preload->unk4 = -1; - } - sub_800ED38(fileSelection); - sub_800F034(); + if (gUnknown_203B0CC != NULL) { + sub_800DB7C(); + } + gUnknown_203B0CC = MemoryAlloc(sizeof(struct unkStruct_203B0CC), 0xb); + MemoryClear8(gUnknown_203B0CC, sizeof(struct unkStruct_203B0CC)); + gUnknown_203B0CC->fileSelection = fileSelection; + for (i = 0, ptr = &gUnknown_203B0CC->unk0[i]; i < 0x20; i++, ptr++) { + ptr->unk4 = -1; + } + sub_800ED38(fileSelection); + sub_800F034(); - switch(gUnknown_203B0CC->fileSelection) - { - case 1: - filePtr = Call_OpenFileAndGetFileDataPtr(gefob001_string, &gEffectFileArchive); - if (filePtr != NULL) { - sub_8005610(filePtr,0x248,0x1f,0); - CloseFile(filePtr); - } - break; - case 0: - filePtr = Call_OpenFileAndGetFileDataPtr(gefob000_string, &gEffectFileArchive); - if (filePtr != NULL) { - sub_8005610(filePtr,0x248,0x1f,0); - CloseFile(filePtr); - } - break; - } + switch (gUnknown_203B0CC->fileSelection) { + case 1: + filePtr = Call_OpenFileAndGetFileDataPtr(gefob001_string, &gEffectFileArchive); + if (filePtr != NULL) { + sub_8005610(filePtr,0x248,0x1f,0); + CloseFile(filePtr); + } + break; + case 0: + filePtr = Call_OpenFileAndGetFileDataPtr(gefob000_string, &gEffectFileArchive); + if (filePtr != NULL) { + sub_8005610(filePtr,0x248,0x1f,0); + CloseFile(filePtr); + } + break; + } } void sub_800DB7C(void) { - s32 index; - struct unkStruct_203B0CC_sub *preload; + s32 i; + struct unkStruct_203B0CC_sub *ptr; - for(index = 0, preload = &gUnknown_203B0CC->unk0[index]; index < 0x20; index++, preload++) - { - if(preload->unk4 != -1) - sub_800DC14(preload->unk4); - } + for (i = 0, ptr = &gUnknown_203B0CC->unk0[i]; i < UNK_203B0CC_ARR_COUNT; i++, ptr++) { + if (ptr->unk4 != -1) + sub_800DC14(ptr->unk4); + } - - sub_800F078(); - sub_800ED64(); - if(gUnknown_203B0CC != NULL) - { - MemoryFree(gUnknown_203B0CC); - gUnknown_203B0CC = NULL; - } + sub_800F078(); + sub_800ED64(); + TRY_FREE_AND_SET_NULL(gUnknown_203B0CC); } void sub_800DBBC(void) { - s32 index1; - s32 index2; - struct unkStruct_203B0CC_sub *preload; - struct unkStruct_203B0CC_sub *preload2; + s32 i1, i2; + struct unkStruct_203B0CC_sub *ptr1, *ptr2; - for(index1 = 0, preload = &gUnknown_203B0CC->unk0[index1]; index1 < 0x20; index1++, preload++) - { - if(preload->unk4 != -1) - sub_800DC14(preload->unk4); - } + for (i1 = 0, ptr1 = &gUnknown_203B0CC->unk0[i1]; i1 < UNK_203B0CC_ARR_COUNT; i1++, ptr1++) { + if (ptr1->unk4 != -1) { + sub_800DC14(ptr1->unk4); + } + } + for (i2 = 0, ptr2 = &gUnknown_203B0CC->unk0[i2]; i2 < UNK_203B0CC_ARR_COUNT; i2++, ptr2++) { + ptr2->unk4 = -1; + } - for(index2 = 0, preload2 = &gUnknown_203B0CC->unk0[index2]; index2 < 0x20; index2++, preload2++) - { - preload2->unk4 = -1; - } - sub_800ED80(); - sub_800F094(); + sub_800ED80(); + sub_800F094(); } bool8 sub_800DCC0(void) { - return gUnknown_203B0CC != NULL; + return gUnknown_203B0CC != NULL; } void sub_800DC14(s32 param_1) { - s32 index1; - s32 index2; - struct unkStruct_800F18C *piVar3; - struct unkStruct_800F18C *puVar4; - struct unkStruct_203B0CC_sub *preload; - - index1 = sub_800E2C0(param_1); - if (index1 != -1) { - preload = &gUnknown_203B0CC->unk0[index1]; - if (preload->unk34 == 4) { - sub_8009BE4(); - if (sub_8000728() == 1) { - LoadDungeonMapPalette(); - sub_803EAF0(0, NULL); - sub_800CD64(0x8000,0); - } - } - if (preload->unk34 == 3) { - for (index2 = 0; index2 < 2; index2 = index2 + 1) { - piVar3 = sub_800F18C(index2); - if (piVar3->effectID == preload->effectID) { - piVar3->counter--; - break; + s32 index1 = sub_800E2C0(param_1); + if (index1 != -1) { + struct unkStruct_203B0CC_sub *ptr = &gUnknown_203B0CC->unk0[index1]; + if (ptr->unk34 == 4) { + sub_8009BE4(); + if (sub_8000728() == 1) { + LoadDungeonMapPalette(); + sub_803EAF0(0, NULL); + sub_800CD64(0x8000,0); + } } - } + if (ptr->unk34 == 3) { + s32 i; + for (i = 0; i < 2; i = i + 1) { + struct unkStruct_800F18C *piVar3 = sub_800F18C(i); + if (piVar3->effectID == ptr->effectID) { + piVar3->counter--; + break; + } + } + } + else { + struct unkStruct_800F18C *puVar4 = sub_800F18C(1); + puVar4->counter = 0; + puVar4->effectID = -1; + } + sub_800DCA8(ptr); } - else { - puVar4 = sub_800F18C(1); - puVar4->counter = 0; - puVar4->effectID = -1; - } - sub_800DCA8(preload); - } } -u32 sub_800DC9C(void) { +u32 sub_800DC9C(void) +{ return sub_800E900(); } @@ -168,8 +155,7 @@ void sub_800DCA8(struct unkStruct_203B0CC_sub *param_1) { param_1->unk4 = -1; param_1->unk54 = 0; - if(param_1->unkB8 != NULL) - { + if (param_1->unkB8 != NULL) { sub_800F204(param_1->unkB8); param_1->unkB8 = NULL; } @@ -177,14 +163,351 @@ void sub_800DCA8(struct unkStruct_203B0CC_sub *param_1) void sub_800DCD0(struct unkStruct_203B0CC_sub *param_1) { - if ((param_1->unk4C != -1) && (param_1->unk50 == 0)) { - if (sub_8000728() != 2) { - PlaySound(param_1->unk4C); + if (param_1->unk4C != -1 && param_1->unk50 == 0) { + if (sub_8000728() != 2) { + PlaySound(param_1->unk4C); + } + param_1->unk4C = -1; + param_1->unk50 = -1; + } + if (param_1->unk50 > 0) { + param_1->unk50--; } - param_1->unk4C = -1; - param_1->unk50 = -1; - } - if (param_1->unk50 > 0) { - param_1->unk50--; - } } + +#ifdef NONMATCHING +bool8 sub_800DD0C(struct unkStruct_203B0CC_sub *param_1, DungeonPos *posArg) +{ + struct axObject *axObj = ¶m_1->unk58; + + if (!AxFlag8000_Not2000(&axObj->axdata)) { + sub_800DCA8(param_1); + if (param_1->unk34 == 3) { + s32 i; + for (i = 0; i < 2; i++) { + struct unkStruct_800F18C *puVar4 = sub_800F18C(i); + if (puVar4->effectID == param_1->effectID) { + puVar4->counter--; + break; + } + } + } + return FALSE; + } + else { + DungeonPos pos; + s32 unkYAdd; + + RunAxAnimationFrame(&axObj->axdata); + unkYAdd = 0; + if ((param_1->unk8 % 8) == 0) { + switch (param_1->unk14) { + case 3: + case 4: + case 5: + unkYAdd -= 3; + break; + default: + unkYAdd += 3; + break; + } + } + else { + unkYAdd += 3; + } + pos = (DungeonPos) {0, 0}; + if (param_1->unk20 != -1) { + pos.x = param_1->unk1c.x; + pos.y = param_1->unk1c.y; + } + + if (pos.x != 99 && pos.y != 99) { + s32 x, y; + s32 unkY = param_1->unk24; + if (unkY == 0xffff) { + unkY = (param_1->unk18.y - posArg->y) / 2 + unkYAdd; + } + x = param_1->unk18.x - posArg->x + pos.x; + y = param_1->unk18.y - posArg->y + pos.y; + param_1->unk18.x += param_1->unkCC[0]; + param_1->unk18.y += param_1->unkCC[1]; + if (x > -64 && x < 304 && y > -64 && y < 224) { + DoAxFrame_800558C(&axObj->axdata,x,y,unkY,param_1->paletteNum,¶m_1->spriteMasks); + } + } + return TRUE; + } +} +#else +NAKED bool8 sub_800DD0C(struct unkStruct_203B0CC_sub *param_1, DungeonPos *posArg) +{ + asm_unified(" push {r4-r7,lr}\n" +" mov r7, r8\n" +" push {r7}\n" +" sub sp, 0x8\n" +" adds r5, r0, 0\n" +" adds r6, r1, 0\n" +" movs r0, 0x58\n" +" adds r0, r5\n" +" mov r8, r0\n" +" ldrh r1, [r0]\n" +" movs r0, 0x80\n" +" lsls r0, 6\n" +" ands r0, r1\n" +" cmp r0, 0\n" +" beq _0800DD2E\n" +" movs r0, 0\n" +" b _0800DD30\n" +"_0800DD2E:\n" +" lsrs r0, r1, 15\n" +"_0800DD30:\n" +" cmp r0, 0\n" +" bne _0800DD64\n" +" adds r0, r5, 0\n" +" bl sub_800DCA8\n" +" ldr r0, [r5, 0x34]\n" +" cmp r0, 0x3\n" +" bne _0800DD60\n" +" movs r4, 0\n" +" b _0800DD46\n" +"_0800DD44:\n" +" adds r4, 0x1\n" +"_0800DD46:\n" +" cmp r4, 0x1\n" +" bgt _0800DD60\n" +" adds r0, r4, 0\n" +" bl sub_800F18C\n" +" adds r2, r0, 0\n" +" ldr r1, [r2]\n" +" ldr r0, [r5, 0x38]\n" +" cmp r1, r0\n" +" bne _0800DD44\n" +" ldr r0, [r2, 0x4]\n" +" subs r0, 0x1\n" +" str r0, [r2, 0x4]\n" +"_0800DD60:\n" +" movs r0, 0\n" +" b _0800DE28\n" +"_0800DD64:\n" +" mov r0, r8\n" +" bl RunAxAnimationFrame\n" +" movs r4, 0\n" +" ldr r0, [r5, 0x8]\n" +" movs r1, 0x7\n" +" ands r0, r1\n" +" cmp r0, 0\n" +" bne _0800DD88\n" +" ldr r0, [r5, 0x14]\n" +" cmp r0, 0x5\n" +" bgt _0800DD84\n" +" cmp r0, 0x3\n" +" blt _0800DD84\n" +" subs r4, 0x3\n" +" b _0800DD8A\n" +"_0800DD84:\n" +" adds r4, 0x3\n" +" b _0800DD8A\n" +"_0800DD88:\n" +" movs r4, 0x3\n" +"_0800DD8A:\n" +" movs r2, 0\n" +" ldr r1, [r5, 0x20]\n" +" movs r0, 0x1\n" +" negs r0, r0\n" +" cmp r1, r0\n" +" beq _0800DD9E\n" +" ldrh r0, [r5, 0x1E]\n" +" lsls r0, 16\n" +" ldrh r2, [r5, 0x1C]\n" +" orrs r2, r0\n" +"_0800DD9E:\n" +" lsls r0, r2, 16\n" +" asrs r1, r0, 16\n" +" adds r7, r0, 0\n" +" cmp r1, 0x63\n" +" beq _0800DE26\n" +" asrs r0, r2, 16\n" +" adds r2, r0, 0\n" +" cmp r2, 0x63\n" +" beq _0800DE26\n" +" ldr r3, [r5, 0x24]\n" +" ldr r0, _0800DE34\n" +" cmp r3, r0\n" +" bne _0800DDCA\n" +" movs r1, 0x1A\n" +" ldrsh r0, [r5, r1]\n" +" movs r3, 0x2\n" +" ldrsh r1, [r6, r3]\n" +" subs r0, r1\n" +" lsrs r1, r0, 31\n" +" adds r0, r1\n" +" asrs r0, 1\n" +" adds r3, r0, r4\n" +"_0800DDCA:\n" +" movs r4, 0x18\n" +" ldrsh r0, [r5, r4]\n" +" movs r4, 0\n" +" ldrsh r1, [r6, r4]\n" +" subs r0, r1\n" +" asrs r1, r7, 16\n" +" adds r4, r0, r1\n" +" movs r7, 0x1A\n" +" ldrsh r0, [r5, r7]\n" +" movs r7, 0x2\n" +" ldrsh r1, [r6, r7]\n" +" subs r0, r1\n" +" adds r2, r0, r2\n" +" adds r0, r5, 0\n" +" adds r0, 0xCC\n" +" ldrh r0, [r0]\n" +" ldrh r1, [r5, 0x18]\n" +" adds r0, r1\n" +" strh r0, [r5, 0x18]\n" +" adds r0, r5, 0\n" +" adds r0, 0xCE\n" +" ldrh r0, [r0]\n" +" ldrh r7, [r5, 0x1A]\n" +" adds r0, r7\n" +" strh r0, [r5, 0x1A]\n" +" adds r1, r4, 0\n" +" adds r1, 0x3F\n" +" movs r0, 0xB7\n" +" lsls r0, 1\n" +" cmp r1, r0\n" +" bhi _0800DE26\n" +" movs r0, 0x40\n" +" negs r0, r0\n" +" cmp r2, r0\n" +" ble _0800DE26\n" +" cmp r2, 0xDF\n" +" bgt _0800DE26\n" +" ldr r0, [r5, 0x3C]\n" +" str r0, [sp]\n" +" adds r0, r5, 0\n" +" adds r0, 0x28\n" +" str r0, [sp, 0x4]\n" +" mov r0, r8\n" +" adds r1, r4, 0\n" +" bl DoAxFrame_800558C\n" +"_0800DE26:\n" +" movs r0, 0x1\n" +"_0800DE28:\n" +" add sp, 0x8\n" +" pop {r3}\n" +" mov r8, r3\n" +" pop {r4-r7}\n" +" pop {r1}\n" +" bx r1\n" +" .align 2, 0\n" +"_0800DE34: .4byte 0x0000ffff"); +} +#endif // NONMATCHING + +bool8 sub_800DE38(struct unkStruct_203B0CC_sub *a1) +{ + s32 i; + + if (!AxFlag8000_Not2000(&a1->unk58)) { + sub_800DCA8(a1); + if (a1->unk34 == 3) { + for (i = 0; i < 2; i++) { + struct unkStruct_800F18C *strPtr = sub_800F18C(i); + if (strPtr->effectID == a1->effectID) { + strPtr->counter--; + break; + } + } + } + return FALSE; + } + + return TRUE; +} + +extern s16 gUnknown_2026E4E; +extern bool8 sub_8009A7C(void *a0, s32 a1, s32 a2, s32 a3, bool8 a4, s32 *a5, s16 *a6); +extern void sub_809971C(u16 a0, const RGB *a1, int a2); + +static inline const EfoFileData *GetFileEfo(struct unkStruct_203B0CC_sub *a0) +{ + return a0->unkB8->data; +} + +bool8 sub_800DE8C(struct unkStruct_203B0CC_sub *a0, DungeonPos *unused) +{ + s16 sp[4]; + struct unkStruct_203B0CC_x94 *r8 = &a0->unk94; + + if (r8->unk18 == 0) { + if (sub_8009A7C(r8, r8->unk14, 0, 0, TRUE, &r8->unk18, sp)) { + if (sp[0] != 0) { + r8->unk20 = 1; + gUnknown_203B0CC->unk1A08 = 0; + gUnknown_203B0CC->unk1A0C = 0; + } + if (sp[1] != 0) { + if (sp[1] == 99) { + gUnknown_203B0CC->unk1A08 = 3100; + gUnknown_203B0CC->unk1A0C = 0; + } + else if (sp[1] > 0) { + gUnknown_203B0CC->unk1A08 = gUnknown_203B0CC->unk1A0C = 3100 / sp[1]; + } + else { + gUnknown_203B0CC->unk1A08 = 3100; + gUnknown_203B0CC->unk1A0C = 3100 / sp[1]; + } + } + + if (r8->unk20 != 0) { + switch (gUnknown_203B0CC->fileSelection) { + case 1: + sub_809971C(224, &GetFileEfo(a0)->unk10->pal[224],16); + break; + case 0: { + s32 i; + s32 brightness = gUnknown_203B0CC->unk1A08 / 100; + + for (i = 0; i < 16; i++) { + SetBGPaletteBufferColorRGB(i + 224, &GetFileEfo(a0)->unk10->pal[i + 224], brightness, NULL); + } + break; + } + } + + gUnknown_2026E4E = 2570; + gUnknown_203B0CC->unk1A08 += gUnknown_203B0CC->unk1A0C; + if (gUnknown_203B0CC->unk1A08 < 0) { + gUnknown_203B0CC->unk1A08 = 0; + } + else if (gUnknown_203B0CC->unk1A08 > 3100) { + gUnknown_203B0CC->unk1A08 = 3100; + } + } + } + else { + struct unkStruct_800F18C *strPtr; + + sub_8009BE4(); + sub_800DCA8(a0); + if (sub_8000728() == 1) { + LoadDungeonMapPalette(); + sub_803EAF0(0, 0); + sub_800CD64(0x8000, FALSE); + } + sub_800CDA8(gUnknown_203B0CC->unk1A10); + gUnknown_2026E4E = gUnknown_203B0CC->unk1A14; + strPtr = sub_800F18C(1); + strPtr->counter = 0; + strPtr->effectID = -1; + return FALSE; + } + + r8->unk14++; + } + + r8->unk18--; + return TRUE; +} + +// diff --git a/src/code_806CD90.c b/src/code_806CD90.c index 6ca00297d..b82b307e9 100644 --- a/src/code_806CD90.c +++ b/src/code_806CD90.c @@ -45,14 +45,6 @@ extern s32 gDungeonFramesCounter; extern void sub_8042EC8(Entity *a0, s32 a1); -static inline u16 GetUnkFlag(Entity *entity) -{ - if ((entity->axObj.axdata.flags & 0x2000)) - return 0; - else - return entity->axObj.axdata.flags >> 15; -} - void sub_806C51C(Entity *entity) { s32 x, y, y2; @@ -82,7 +74,7 @@ void sub_806C51C(Entity *entity) if (entity->axObj.unk43_animId2 == entity->axObj.unk42_animId1 && entity->axObj.unk45_orientation == entity->axObj.unk44_direction1 && entity->axObj.unk47 == 0) { bool8 r2 = FALSE; - if (!GetUnkFlag(entity)) + if (!AxFlag8000_Not2000(&entity->axObj.axdata)) r2 = TRUE; if (r2) { diff --git a/src/friend_areas_map_util.c b/src/friend_areas_map_util.c index a50d54d68..c456a8327 100644 --- a/src/friend_areas_map_util.c +++ b/src/friend_areas_map_util.c @@ -25,11 +25,6 @@ #include "text_2.h" #include "text_3.h" -static inline bool8 CheckAxFlag8000(axdata *ptr) -{ - return (ptr->flags & 0x8000) != 0; -} - static inline bool8 ResetFlags(axdata *ptr) { return ptr->flags = 0; @@ -124,7 +119,7 @@ static void AnimateSprites(void) } for (dir = 0; dir < NUM_DIRECTIONS; dir++) { - if (CheckAxFlag8000(&gFriendAreasMapPtr->arrowSprites[dir])) { + if (AxFlag8000(&gFriendAreasMapPtr->arrowSprites[dir])) { RunAxAnimationFrame(&gFriendAreasMapPtr->arrowSprites[dir]); // Hide non-diagonal arrows when R button is pressed. if ((gRealInputs.held & R_BUTTON) && (dir % 2) == 0) diff --git a/src/graphics_memory.c b/src/graphics_memory.c index 4cb7be436..bfe0f66da 100644 --- a/src/graphics_memory.c +++ b/src/graphics_memory.c @@ -257,7 +257,7 @@ struct Struct_8009A7C u16 **unk4; }; -bool8 sub_8009A7C(struct Struct_8009A7C *a0, s32 a1, s32 a2, s32 a3, bool8 a4, s32 *a5, u16 *a6) +bool8 sub_8009A7C(struct Struct_8009A7C *a0, s32 a1, s32 a2, s32 a3, bool8 a4, s32 *a5, s16 *a6) { s32 countY; s32 yId; diff --git a/src/sprite.c b/src/sprite.c index 9dc524fb8..bb1282d76 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -531,20 +531,12 @@ static void AxResInitUnoriented(axdata *a0, axmain *a1, u32 a2, u32 a3, u32 spri a0->positions = NULL; } -static inline s16 check_flag_for_80054BC(u16 flags) -{ - if (flags & 0x2000) - return 0; - else - return flags >> 15; -} - // arm9.bin::02001AC4 void RunAxAnimationFrame(axdata *a0) { const ax_anim *aData; - if (!check_flag_for_80054BC(a0->flags)) + if (!AxFlag8000_Not2000(a0)) return; if (a0->sub1.poseId >= 0) {