diff options
author | Revo <projectrevotpp@hotmail.com> | 2021-06-19 17:00:53 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-19 17:00:53 -0400 |
commit | f87cb8749a8a41f7e207b151c7d5e7d3668a58cf (patch) | |
tree | 7f55e8d99c31a02409f4fe482ecfe3d402f82a03 | |
parent | 54b6645c02958cff375393a5261d5376dd169b94 (diff) | |
parent | ce9a6097573a1a64e199b9b91fbf2e1de483dad5 (diff) |
Merge pull request #410 from Gogume1er/unk_02088AAC
decompile unk_02088AAC.s
-rw-r--r-- | arm9/asm/unk_02088AAC.s | 345 | ||||
-rw-r--r-- | arm9/src/unk_020851B8.c | 2 | ||||
-rw-r--r-- | arm9/src/unk_02088AAC.c | 185 | ||||
-rw-r--r-- | include/unk_020851B8.h | 2 | ||||
-rw-r--r-- | include/unk_02088AAC.h | 31 |
5 files changed, 218 insertions, 347 deletions
diff --git a/arm9/asm/unk_02088AAC.s b/arm9/asm/unk_02088AAC.s deleted file mode 100644 index 92ea42bc..00000000 --- a/arm9/asm/unk_02088AAC.s +++ /dev/null @@ -1,345 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .rodata - - .global UNK_020FD6F4 -UNK_020FD6F4: ; 0x020FD6F4 - .byte 0x04, 0xFF, 0x00, 0x00 - - .global UNK_020FD6F8 -UNK_020FD6F8: ; 0x020FD6F8 - .word MOD75_021E6BA0, MOD75_021E6D6C, MOD75_021E6F00, SDK_OVERLAY_MODULE_75_ID - - .global UNK_020FD708 -UNK_020FD708: ; 0x020FD708 - .word MOD73_021D74F0, MOD73_021D758C, MOD73_021D7640, SDK_OVERLAY_MODULE_73_ID - - .global UNK_020FD718 -UNK_020FD718: ; 0x020FD718 - .word MOD68_021D74E0, MOD68_021D75D8, MOD68_021D762C, SDK_OVERLAY_MODULE_68_ID - - .text - - thumb_func_start FUN_02088AAC -FUN_02088AAC: ; 0x02088AAC - push {r4, lr} - add r4, r1, #0x0 - ldr r1, [r4, #0x0] - cmp r1, #0x5 - bhi _02088AF6 - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #0x6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_02088AC2: ; jump table (using 16-bit offset) - .short _02088ACE - _02088AC2 - 2; case 0 - .short _02088AD6 - _02088AC2 - 2; case 1 - .short _02088ADE - _02088AC2 - 2; case 2 - .short _02088AE6 - _02088AC2 - 2; case 3 - .short _02088AEE - _02088AC2 - 2; case 4 - .short _02088AF2 - _02088AC2 - 2; case 5 -_02088ACE: - bl FUN_02088B4C - str r0, [r4, #0x0] - b _02088AF6 -_02088AD6: - bl FUN_02088BA8 - str r0, [r4, #0x0] - b _02088AF6 -_02088ADE: - bl FUN_02088C3C - str r0, [r4, #0x0] - b _02088AF6 -_02088AE6: - bl FUN_02088CDC - str r0, [r4, #0x0] - b _02088AF6 -_02088AEE: - mov r0, #0x1 - pop {r4, pc} -_02088AF2: - mov r0, #0x4 - pop {r4, pc} -_02088AF6: - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02088AFC -FUN_02088AFC: ; 0x02088AFC - push {r3-r5, lr} - sub sp, #0x10 - ldr r5, _02088B24 ; =UNK_020FD708 - add r3, sp, #0x0 - add r4, r0, #0x0 - add r2, r3, #0x0 - ldmia r5!, {r0-r1} - stmia r3!, {r0-r1} - ldmia r5!, {r0-r1} - stmia r3!, {r0-r1} - add r0, r2, #0x0 - ldr r2, [r4, #0x0] - add r1, r4, #0x0 - bl OverlayManager_new - str r0, [r4, #0x1c] - mov r0, #0x2 - add sp, #0x10 - pop {r3-r5, pc} - nop -_02088B24: .word UNK_020FD708 - - thumb_func_start FUN_02088B28 -FUN_02088B28: ; 0x02088B28 - push {r4, lr} - add r4, r0, #0x0 - add r0, #0x1c - bl FUN_0208898C - cmp r0, #0x0 - bne _02088B3A - mov r0, #0x2 - pop {r4, pc} -_02088B3A: - ldr r0, [r4, #0x20] - cmp r0, #0x1 - bne _02088B44 - mov r0, #0x0 - pop {r4, pc} -_02088B44: - mov r0, #0x3 - pop {r4, pc} - - thumb_func_start FUN_02088B48 -FUN_02088B48: ; 0x02088B48 - mov r0, #0x4 - bx lr - - thumb_func_start FUN_02088B4C -FUN_02088B4C: ; 0x02088B4C - push {r3-r5, lr} - sub sp, #0x10 - ldr r3, _02088BA0 ; =UNK_020FD6F8 - add r2, sp, #0x0 - add r5, r0, #0x0 - ldmia r3!, {r0-r1} - stmia r2!, {r0-r1} - ldmia r3!, {r0-r1} - stmia r2!, {r0-r1} - ldr r0, [r5, #0x10] - ldr r1, _02088BA4 ; =UNK_020FD6F4 - ldr r0, [r0, #0x14] - ldr r2, [r5, #0x0] - bl CreateBagView - add r4, r0, #0x0 - ldrh r0, [r5, #0x6] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - cmp r0, #0x1 - bne _02088B7A - mov r2, #0x5 - b _02088B7C -_02088B7A: - mov r2, #0x4 -_02088B7C: - ldr r1, [r5, #0x10] - lsl r2, r2, #0x18 - ldr r1, [r1, #0xc] - ldr r3, [r5, #0xc] - add r0, r4, #0x0 - lsr r2, r2, #0x18 - bl FUN_0206E314 - ldr r2, [r5, #0x0] - add r0, sp, #0x0 - add r1, r4, #0x0 - bl OverlayManager_new - str r0, [r5, #0x1c] - str r4, [r5, #0x18] - mov r0, #0x1 - add sp, #0x10 - pop {r3-r5, pc} - .balign 4 -_02088BA0: .word UNK_020FD6F8 -_02088BA4: .word UNK_020FD6F4 - - thumb_func_start FUN_02088BA8 -FUN_02088BA8: ; 0x02088BA8 - push {r3-r5, lr} - add r4, r0, #0x0 - add r0, #0x1c - bl FUN_0208898C - cmp r0, #0x0 - bne _02088BBA - mov r0, #0x1 - pop {r3-r5, pc} -_02088BBA: - ldr r0, [r4, #0x0] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bl BagView_New - add r5, r0, #0x0 - bl BagView_sizeof - add r2, r0, #0x0 - ldr r1, [r4, #0x18] - add r0, r5, #0x0 - bl memcpy - ldr r0, [r4, #0x18] - bl FreeToHeap - mov r0, #0x0 - str r0, [r4, #0x18] - add r0, r5, #0x0 - bl FUN_0206E37C - str r0, [r4, #0x8] - add r0, r5, #0x0 - bl FreeToHeap - add r0, r5, #0x0 - bl FUN_0206E384 - cmp r0, #0x5 - bhi _02088C16 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #0x6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_02088C02: ; jump table (using 16-bit offset) - .short _02088C1E - _02088C02 - 2; case 0 - .short _02088C0E - _02088C02 - 2; case 1 - .short _02088C1E - _02088C02 - 2; case 2 - .short _02088C1E - _02088C02 - 2; case 3 - .short _02088C1E - _02088C02 - 2; case 4 - .short _02088C12 - _02088C02 - 2; case 5 -_02088C0E: - mov r0, #0x2 - pop {r3-r5, pc} -_02088C12: - mov r0, #0x5 - pop {r3-r5, pc} -_02088C16: - bl GF_AssertFail - mov r0, #0x95 - str r0, [r4, #0x8] -_02088C1E: - ldr r0, [r4, #0x10] - ldr r1, [r4, #0x8] - ldr r0, [r0, #0x14] - lsl r1, r1, #0x10 - ldr r3, [r4, #0x0] - lsr r1, r1, #0x10 - mov r2, #0x1 - bl Bag_TakeItem - cmp r0, #0x0 - bne _02088C38 - bl GF_AssertFail -_02088C38: - mov r0, #0x4 - pop {r3-r5, pc} - - thumb_func_start FUN_02088C3C -FUN_02088C3C: ; 0x02088C3C - push {r3-r7, lr} - sub sp, #0x18 - add r5, r0, #0x0 - ldr r0, [r5, #0x10] - ldr r3, _02088CD8 ; =UNK_020FD718 - ldr r0, [r0, #0x14] - add r2, sp, #0x8 - str r0, [sp, #0x0] - ldmia r3!, {r0-r1} - stmia r2!, {r0-r1} - ldmia r3!, {r0-r1} - stmia r2!, {r0-r1} - ldr r0, [r5, #0x0] - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bl FUN_020851B8 - str r0, [r5, #0x18] - ldr r1, [r5, #0x8] - mov r2, #0x1 - lsl r1, r1, #0x10 - lsr r1, r1, #0x10 - bl FUN_020851DC - mov r6, #0x0 - add r4, r6, #0x0 -_02088C70: - add r0, r4, #0x0 - bl BerryToItemId - lsl r0, r0, #0x18 - lsr r7, r0, #0x18 - ldr r0, [sp, #0x0] - ldr r3, [r5, #0x0] - add r1, r7, #0x0 - mov r2, #0x1 - bl Bag_HasItem - cmp r0, #0x1 - bne _02088C9A - ldr r0, [r5, #0x18] - add r1, r7, #0x0 - mov r2, #0x0 - bl FUN_020851DC - add r0, r6, #0x1 - lsl r0, r0, #0x18 - lsr r6, r0, #0x18 -_02088C9A: - add r0, r4, #0x1 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - cmp r4, #0x40 - blo _02088C70 - add r3, sp, #0x4 - ldr r0, [r5, #0xc] - mov r1, #0x4 - add r2, sp, #0x4 - add r3, #0x1 - bl FUN_0206F17C - add r2, sp, #0x4 - ldrb r1, [r2, #0x1] - add r3, r6, #0x2 - lsl r3, r3, #0x18 - ldrb r2, [r2, #0x0] - ldr r0, [r5, #0x18] - lsr r3, r3, #0x18 - bl FUN_020851F8 - ldr r1, [r5, #0x18] - ldr r2, [r5, #0x0] - add r0, sp, #0x8 - bl OverlayManager_new - str r0, [r5, #0x1c] - mov r0, #0x3 - add sp, #0x18 - pop {r3-r7, pc} - nop -_02088CD8: .word UNK_020FD718 - - thumb_func_start FUN_02088CDC -FUN_02088CDC: ; 0x02088CDC - push {r3-r4, lr} - sub sp, #0x4 - add r4, r0, #0x0 - add r0, #0x1c - bl FUN_0208898C - cmp r0, #0x0 - bne _02088CF2 - add sp, #0x4 - mov r0, #0x3 - pop {r3-r4, pc} -_02088CF2: - add r1, sp, #0x0 - ldr r0, [r4, #0x18] - add r1, #0x1 - add r2, sp, #0x0 - bl FUN_0208524C - add r3, sp, #0x0 - ldrb r2, [r3, #0x0] - ldrb r3, [r3, #0x1] - ldr r0, [r4, #0xc] - mov r1, #0x4 - bl FUN_0206F190 - ldr r0, [r4, #0x18] - bl FreeToHeap - mov r0, #0x0 - str r0, [r4, #0x18] - add sp, #0x4 - pop {r3-r4, pc} - .balign 4 diff --git a/arm9/src/unk_020851B8.c b/arm9/src/unk_020851B8.c index 592d16d6..922ca2e4 100644 --- a/arm9/src/unk_020851B8.c +++ b/arm9/src/unk_020851B8.c @@ -10,7 +10,7 @@ THUMB_FUNC struct UnkStruct_020851B8 *FUN_020851B8(u32 heap_id) return ptr; } -THUMB_FUNC void FUN_020851DC(struct UnkStruct_020851B8 *param0, u32 item_id, BOOL param2) +THUMB_FUNC void FUN_020851DC(struct UnkStruct_020851B8 *param0, u16 item_id, BOOL param2) { u16 berry_id = item_id - FIRST_BERRY_IDX; FUN_02085200(param0, berry_id); diff --git a/arm9/src/unk_02088AAC.c b/arm9/src/unk_02088AAC.c new file mode 100644 index 00000000..c0419e09 --- /dev/null +++ b/arm9/src/unk_02088AAC.c @@ -0,0 +1,185 @@ +#include "global.h" +#include "unk_02088AAC.h" +#include "heap.h" +#include "overlay_manager.h" +#include "unk_020851B8.h" + +extern BOOL MOD68_021D74E0(struct UnkStruct_02006234 *, u32 *); +extern BOOL MOD68_021D75D8(struct UnkStruct_02006234 *, u32 *); +extern BOOL MOD68_021D762C(struct UnkStruct_02006234 *, u32 *); +extern BOOL MOD73_021D74F0(struct UnkStruct_02006234 *, u32 *); +extern BOOL MOD73_021D758C(struct UnkStruct_02006234 *, u32 *); +extern BOOL MOD73_021D7640(struct UnkStruct_02006234 *, u32 *); +extern BOOL MOD75_021E6BA0(struct UnkStruct_02006234 *, u32 *); +extern BOOL MOD75_021E6D6C(struct UnkStruct_02006234 *, u32 *); +extern BOOL MOD75_021E6F00(struct UnkStruct_02006234 *, u32 *); + +extern BOOL FUN_0208898C(struct UnkStruct_02006234 **r0); + +THUMB_FUNC u32 FUN_02088AAC(struct UnkStruct_02088AAC *r0, u32 *r1) +{ + switch (*r1) + { + case 0: + *r1 = FUN_02088B4C(r0); + break; + case 1: + *r1 = FUN_02088BA8(r0); + break; + case 2: + *r1 = FUN_02088C3C(r0); + break; + case 3: + *r1 = FUN_02088CDC(r0); + break; + case 4: + return 1; + case 5: + return 4; + } + + return 0; +} + +THUMB_FUNC u32 FUN_02088AFC(struct UnkStruct_02088AAC *r0) +{ + FS_EXTERN_OVERLAY(MODULE_73); + + const struct Unk21DBE18 OVERLAY_73_MANAGER = { .unk0 = MOD73_021D74F0, + .unk4 = MOD73_021D758C, + .unk8 = MOD73_021D7640, + .ovly = FS_OVERLAY_ID(MODULE_73) }; + r0->ovly_data = OverlayManager_new(&OVERLAY_73_MANAGER, (s32 *)r0, r0->heap_id); + + return 2; +} + +THUMB_FUNC u32 FUN_02088B28(struct UnkStruct_02088AAC *r0) +{ + if (!FUN_0208898C(&r0->ovly_data)) + { + return 2; + } + + if (r0->unk20 == TRUE) + { + return 0; + } + + return 3; +} + +THUMB_FUNC u32 FUN_02088B48() +{ + return 4; +} + +THUMB_FUNC u32 FUN_02088B4C(struct UnkStruct_02088AAC *r0) +{ + FS_EXTERN_OVERLAY(MODULE_75); + + static const u8 UNK_020FD6F4[] = { 0x04, 0xFF }; + const struct Unk21DBE18 OVERLAY_75_MANAGER = { .unk0 = MOD75_021E6BA0, + .unk4 = MOD75_021E6D6C, + .unk8 = MOD75_021E6F00, + .ovly = FS_OVERLAY_ID(MODULE_75) }; + struct BagView *bag_view = CreateBagView(r0->unk10->bag, UNK_020FD6F4, r0->heap_id); + + FUN_0206E314(bag_view, r0->unk10->sav2, (u8)((u8)r0->unk06 == 1 ? 5 : 4), r0->unk0C); + + r0->ovly_data = OverlayManager_new(&OVERLAY_75_MANAGER, (s32 *)bag_view, r0->heap_id); + r0->ovly_param = bag_view; + + return 1; +} + +THUMB_FUNC u32 FUN_02088BA8(struct UnkStruct_02088AAC *r0) +{ + if (!FUN_0208898C(&r0->ovly_data)) + { + return 1; + } + + struct BagView *bag_view = BagView_New((u8)r0->heap_id); + + memcpy(bag_view, r0->ovly_param, BagView_sizeof()); + FreeToHeap(r0->ovly_param); + + r0->ovly_param = NULL; + r0->item = FUN_0206E37C(bag_view); + + FreeToHeap(bag_view); + + switch (FUN_0206E384(bag_view)) + { + case 1: + return 2; + case 5: + return 5; + default: + GF_AssertFail(); + r0->item = FIRST_BERRY_IDX; + case 0: + case 2: + case 3: + case 4: + GF_ASSERT(Bag_TakeItem(r0->unk10->bag, (u16)r0->item, 1, r0->heap_id)); + return 4; + } +} + +THUMB_FUNC u32 FUN_02088C3C(struct UnkStruct_02088AAC *r0) +{ + FS_EXTERN_OVERLAY(MODULE_68); + + struct Bag *bag = r0->unk10->bag; + const struct Unk21DBE18 OVERLAY_68_MANAGER = { .unk0 = MOD68_021D74E0, + .unk4 = MOD68_021D75D8, + .unk8 = MOD68_021D762C, + .ovly = FS_OVERLAY_ID(MODULE_68) }; + + r0->ovly_param = FUN_020851B8((u8)r0->heap_id); + + FUN_020851DC(r0->ovly_param, (u16)r0->item, TRUE); + + u8 berry_count = 0; + for (u8 berry_id = 0; berry_id < (u8)NUM_BERRIES; berry_id++) + { + u8 item_id = (u8)BerryToItemId(berry_id); + if (Bag_HasItem(bag, item_id, 1, r0->heap_id) == TRUE) + { + FUN_020851DC(r0->ovly_param, item_id, 0); + + berry_count++; + } + } + + u8 sp5; + u8 sp6; + + FUN_0206F17C(r0->unk0C, 4, &sp6, &sp5); + FUN_020851F8(r0->ovly_param, sp5, sp6, (u8)(berry_count + 2)); + + r0->ovly_data = OverlayManager_new(&OVERLAY_68_MANAGER, (s32 *)r0->ovly_param, r0->heap_id); + + return 3; +} + +THUMB_FUNC u32 FUN_02088CDC(struct UnkStruct_02088AAC *r0) +{ + if (!FUN_0208898C(&r0->ovly_data)) + { + return 3; + } + + u8 sp0; + u8 sp1; + + FUN_0208524C(r0->ovly_param, &sp0, &sp1); + FUN_0206F190(r0->unk0C, 4, sp1, sp0); + FreeToHeap(r0->ovly_param); + + r0->ovly_param = NULL; + + return 0; +} diff --git a/include/unk_020851B8.h b/include/unk_020851B8.h index ca47a91c..334ba4c8 100644 --- a/include/unk_020851B8.h +++ b/include/unk_020851B8.h @@ -10,7 +10,7 @@ struct UnkStruct_020851B8 { }; struct UnkStruct_020851B8 *FUN_020851B8(u32 heap_id); -void FUN_020851DC(struct UnkStruct_020851B8 *param0, u32 param1, BOOL param2); +void FUN_020851DC(struct UnkStruct_020851B8 *param0, u16 param1, BOOL param2); void FUN_020851F8(struct UnkStruct_020851B8 *param0, u8 param1, u8 param2, u8 param3); void FUN_02085200(struct UnkStruct_020851B8 *param0, u16 param1); u8 FUN_02085224(struct UnkStruct_020851B8 *param0, u16 param1); diff --git a/include/unk_02088AAC.h b/include/unk_02088AAC.h new file mode 100644 index 00000000..d4d7cf3e --- /dev/null +++ b/include/unk_02088AAC.h @@ -0,0 +1,31 @@ +#ifndef POKEDIAMOND_UNK_02088AAC_H +#define POKEDIAMOND_UNK_02088AAC_H + +#include "bag.h" +#include "main.h" +#include "unk_0208890C.h" + +struct UnkStruct_02088AAC +{ + u32 heap_id; + u16 unk04; + u16 unk06; + u32 item; + struct UnkStruct_0206F164 *unk0C; + struct UnkStruct_0208890C *unk10; + u32 unk14; + void *ovly_param; + struct UnkStruct_02006234 *ovly_data; + u32 unk20; +}; + +u32 FUN_02088AAC(struct UnkStruct_02088AAC *r0, u32 *r1); +u32 FUN_02088AFC(struct UnkStruct_02088AAC *r0); +u32 FUN_02088B28(struct UnkStruct_02088AAC *r0); +u32 FUN_02088B48(void); +u32 FUN_02088B4C(struct UnkStruct_02088AAC *r0); +u32 FUN_02088BA8(struct UnkStruct_02088AAC *r0); +u32 FUN_02088C3C(struct UnkStruct_02088AAC *r0); +u32 FUN_02088CDC(struct UnkStruct_02088AAC *r0); + +#endif // POKEDIAMOND_UNK_02088AAC_H |