summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRevo <projectrevotpp@hotmail.com>2021-06-19 17:00:53 -0400
committerGitHub <noreply@github.com>2021-06-19 17:00:53 -0400
commitf87cb8749a8a41f7e207b151c7d5e7d3668a58cf (patch)
tree7f55e8d99c31a02409f4fe482ecfe3d402f82a03
parent54b6645c02958cff375393a5261d5376dd169b94 (diff)
parentce9a6097573a1a64e199b9b91fbf2e1de483dad5 (diff)
Merge pull request #410 from Gogume1er/unk_02088AAC
decompile unk_02088AAC.s
-rw-r--r--arm9/asm/unk_02088AAC.s345
-rw-r--r--arm9/src/unk_020851B8.c2
-rw-r--r--arm9/src/unk_02088AAC.c185
-rw-r--r--include/unk_020851B8.h2
-rw-r--r--include/unk_02088AAC.h31
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