Merge pull request #410 from Gogume1er/unk_02088AAC

decompile unk_02088AAC.s
This commit is contained in:
Revo
2021-06-19 17:00:53 -04:00
committed by GitHub
5 changed files with 218 additions and 347 deletions

View File

@@ -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

View File

@@ -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);

185
arm9/src/unk_02088AAC.c Normal file
View File

@@ -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;
}

View File

@@ -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);

31
include/unk_02088AAC.h Normal file
View File

@@ -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