through ov101_021F0E0C

This commit is contained in:
PikalaxALT 2025-04-21 20:28:45 -04:00
parent f8373fde34
commit 407670a45e
No known key found for this signature in database
GPG Key ID: 7774E96AA69E5B61
4 changed files with 99 additions and 196 deletions

View File

@ -25,164 +25,6 @@
.extern ov101_021F09B0
.extern ov101_021F0ACC
thumb_func_start ov101_021F0D90
ov101_021F0D90: ; 0x021F0D90
push {r3, r4, r5, lr}
add r4, r0, #0
add r1, r4, #0
add r1, #0xd8
ldr r1, [r1]
mov r0, #0
ldrb r2, [r1, #1]
add r1, r4, #0
add r1, #0xd0
ldr r1, [r1]
add r0, r0, #1
strb r2, [r1]
add r1, r4, #0
add r1, #0xd8
ldr r2, [r1]
lsl r0, r0, #0x18
ldr r1, [r2, #8]
lsr r0, r0, #0x18
cmp r1, r2
beq _021F0DD6
_021F0DB8:
add r3, r4, #0
add r3, #0xd0
ldrb r5, [r1, #1]
add r2, r0, #0
ldr r3, [r3]
add r0, r0, #1
strb r5, [r3, r2]
add r2, r4, #0
add r2, #0xd8
lsl r0, r0, #0x18
ldr r1, [r1, #8]
ldr r2, [r2]
lsr r0, r0, #0x18
cmp r1, r2
bne _021F0DB8
_021F0DD6:
add r2, r4, #0
ldr r0, [r4, #0xc]
add r1, r4, #0
add r2, #0xcd
add r1, #0xd0
ldrb r2, [r2]
ldr r0, [r0, #0x28]
ldr r1, [r1]
bl GSPlayerMisc_SetPhonebookFromBuffer
add r2, r4, #0
add r2, #0xcd
add r0, r4, #0
ldrb r3, [r2]
add r0, #0xd4
mov r2, #0xc
ldr r0, [r0]
mov r1, #0
mul r2, r3
bl MI_CpuFill8
add r4, #0xd4
ldr r0, [r4]
bl FreeToHeap
pop {r3, r4, r5, pc}
.balign 4, 0
thumb_func_end ov101_021F0D90
thumb_func_start ov101_021F0E0C
ov101_021F0E0C: ; 0x021F0E0C
push {r3, r4, r5, r6}
ldr r5, [r1, #8]
ldr r4, [r1, #4]
mov r3, #0
str r5, [r4, #8]
ldr r5, [r1, #4]
ldr r4, [r1, #8]
str r5, [r4, #4]
add r4, r0, #0
add r4, #0xd8
ldr r4, [r4]
cmp r1, r4
bne _021F0E2E
add r4, r0, #0
ldr r5, [r1, #8]
add r4, #0xd8
str r5, [r4]
_021F0E2E:
add r4, r0, #0
add r4, #0xdc
ldr r4, [r4]
cmp r1, r4
bne _021F0E40
add r4, r0, #0
ldr r5, [r1, #4]
add r4, #0xdc
str r5, [r4]
_021F0E40:
add r4, r0, #0
add r4, #0xcd
ldrb r4, [r4]
sub r4, r4, #1
cmp r2, r4
bne _021F0E76
add r2, r0, #0
add r2, #0xdc
ldr r2, [r2]
str r2, [r1, #4]
add r2, r0, #0
add r2, #0xdc
ldr r2, [r2]
ldr r2, [r2, #8]
str r2, [r1, #8]
add r2, r0, #0
add r2, #0xdc
ldr r2, [r2]
str r1, [r2, #8]
add r2, r0, #0
add r2, #0xd8
ldr r2, [r2]
add r0, #0xdc
str r1, [r2, #4]
str r1, [r0]
pop {r3, r4, r5, r6}
bx lr
_021F0E76:
add r4, r0, #0
add r4, #0xd8
ldr r6, [r4]
add r4, r6, #0
_021F0E7E:
add r5, r3, #0
add r3, r3, #1
cmp r5, r2
beq _021F0E8A
ldr r4, [r4, #8]
b _021F0EA6
_021F0E8A:
str r4, [r1, #8]
ldr r2, [r4, #4]
str r2, [r1, #4]
str r1, [r2, #8]
add r2, r0, #0
str r1, [r4, #4]
add r2, #0xd8
ldr r2, [r2]
cmp r4, r2
bne _021F0EAA
add r0, #0xd8
str r1, [r0]
pop {r3, r4, r5, r6}
bx lr
_021F0EA6:
cmp r4, r6
bne _021F0E7E
_021F0EAA:
pop {r3, r4, r5, r6}
bx lr
.balign 4, 0
thumb_func_end ov101_021F0E0C
thumb_func_start ov101_021F0EB0
ov101_021F0EB0: ; 0x021F0EB0
push {r3, r4, r5, r6, r7, lr}

View File

@ -17,9 +17,17 @@ typedef struct UnkStruct_ov101_021F8404 {
typedef struct PokegearPhoneAppData PokegearPhoneAppData;
typedef struct PokegearPhoneApp_Sub0D8 PokegearPhoneApp_Sub0D8;
struct PokegearPhoneApp_Sub0D8 {
u8 unk_00;
PhoneContact contact;
PokegearPhoneApp_Sub0D8 *prev;
PokegearPhoneApp_Sub0D8 *next;
};
typedef struct PokegearPhoneApp_Sub0E0_Sub00C {
u8 filler_0[4];
int unk_4;
PokegearPhoneApp_Sub0D8 *unk_4;
u8 unk_8;
} PokegearPhoneApp_Sub0E0_Sub00C;
@ -67,38 +75,39 @@ typedef struct PokegearPhoneApp_Sub0C4 {
} PokegearPhoneApp_Sub0C4;
struct PokegearPhoneAppData {
HeapID heapId; // 0x000
int unk_004; // 0x004
int unk_008; // 0x008
PokegearAppData *pokegear; // 0x00C
u8 unk_010; // 0x010
u8 unk_011; // 0x011
u8 filler_012[2]; // 0x012
MsgData *unk_014; // 0x014
MessageFormat *unk_018; // 0x018
String *unk_01C; // 0x01C
String *unk_020; // 0x020
String *unk_024[8]; // 0x024
u8 unk_044; // 0x044
Window unk_048[4]; // 0x048
Sprite *unk_088[14]; // 0x088
TouchscreenListMenuSpawner *unk_0C0; // 0x0C0
PokegearPhoneApp_Sub0C4 *unk_0C4; // 0x0C4 type pending
u8 unk_0C8; // 0x0C8
u8 unk_0C9; // 0x0C9
u8 unk_0CA; // 0x0CA
u8 unk_0CB; // 0x0CB
u8 unk_0CC; // 0x0CC
u8 unk_0CD; // 0x0CD
u8 filler_0CE[2]; // 0x0CE
PhoneContact *unk_0D0; // 0x0D0
PokegearPhoneApp_Sub0D4 *unk_0D4; // 0x0D4
u8 filler_0D8[0x8]; // 0x0D4
PokegearPhoneApp_Sub0E0 unk_0E0; // 0x0E0
LISTMENUITEM *unk_4E8[7]; // 0x4E8
TouchscreenListMenu *unk_504; // 0x504
void *unk_508; // 0x508
NNSG2dScreenData *unk_50C; // 0x50C
HeapID heapId; // 0x000
int unk_004; // 0x004
int unk_008; // 0x008
PokegearAppData *pokegear; // 0x00C
u8 unk_010; // 0x010
u8 unk_011; // 0x011
u8 filler_012[2]; // 0x012
MsgData *unk_014; // 0x014
MessageFormat *unk_018; // 0x018
String *unk_01C; // 0x01C
String *unk_020; // 0x020
String *unk_024[8]; // 0x024
u8 unk_044; // 0x044
Window unk_048[4]; // 0x048
Sprite *unk_088[14]; // 0x088
TouchscreenListMenuSpawner *unk_0C0; // 0x0C0
PokegearPhoneApp_Sub0C4 *unk_0C4; // 0x0C4 type pending
u8 unk_0C8; // 0x0C8
u8 unk_0C9; // 0x0C9
u8 unk_0CA; // 0x0CA
u8 unk_0CB; // 0x0CB
u8 unk_0CC; // 0x0CC
u8 numContacts; // 0x0CD
u8 filler_0CE[2]; // 0x0CE
PhoneContact *saveContacts; // 0x0D0
PokegearPhoneApp_Sub0D4 *unk_0D4; // 0x0D4
PokegearPhoneApp_Sub0D8 *contactListHead; // 0x0D8
PokegearPhoneApp_Sub0D8 *contactListTail; // 0x0DC
PokegearPhoneApp_Sub0E0 unk_0E0; // 0x0E0
LISTMENUITEM *unk_4E8[7]; // 0x4E8
TouchscreenListMenu *unk_504; // 0x504
void *unk_508; // 0x508
NNSG2dScreenData *unk_50C; // 0x50C
}; // size: 0x510
BOOL ov101_021EFD20(PokegearPhoneAppData *phoneApp);
@ -144,7 +153,7 @@ int ov101_021F0C4C(PokegearPhoneAppData *phoneApp);
BOOL ov101_021F0CE4(PokegearPhoneAppData *phoneApp);
void ov101_021F0D6C(PokegearPhoneAppData *phoneApp);
void ov101_021F0D90(PokegearPhoneAppData *phoneApp);
void ov101_021F0E0C(PokegearPhoneAppData *phoneApp, int a1, u8 a2);
void ov101_021F0E0C(PokegearPhoneAppData *phoneApp, PokegearPhoneApp_Sub0D8 *a1, u8 a2);
void ov101_021F0EB0(PokegearPhoneAppData *phoneApp, u8 a1);
void ov101_021F0F48(PokegearPhoneAppData *phoneApp);

View File

@ -213,6 +213,58 @@ BOOL ov101_021F0CE4(PokegearPhoneAppData *phoneApp) {
}
void ov101_021F0D6C(PokegearPhoneAppData *phoneApp) {
phoneApp->unk_0D4 = AllocFromHeap(phoneApp->heapId, phoneApp->unk_0CD * sizeof(PokegearPhoneApp_Sub0D4));
phoneApp->unk_0D4 = AllocFromHeap(phoneApp->heapId, phoneApp->numContacts * sizeof(PokegearPhoneApp_Sub0D4));
ov101_021F1840(phoneApp);
}
void ov101_021F0D90(PokegearPhoneAppData *phoneApp) {
u8 i = 0;
PokegearPhoneApp_Sub0D8 *ptr;
phoneApp->saveContacts[i++].id = phoneApp->contactListHead->contact.id;
ptr = phoneApp->contactListHead->next;
while (ptr != phoneApp->contactListHead) {
phoneApp->saveContacts[i++].id = ptr->contact.id;
ptr = ptr->next;
}
GSPlayerMisc_SetPhonebookFromBuffer(phoneApp->pokegear->savePokegear, phoneApp->saveContacts, phoneApp->numContacts);
MI_CpuClear8(phoneApp->unk_0D4, phoneApp->numContacts * sizeof(PokegearPhoneApp_Sub0D4));
FreeToHeap(phoneApp->unk_0D4);
}
void ov101_021F0E0C(PokegearPhoneAppData *phoneApp, PokegearPhoneApp_Sub0D8 *a1, u8 a2) {
int i = 0;
PokegearPhoneApp_Sub0D8 *r4;
a1->prev->next = a1->next;
a1->next->prev = a1->prev;
if (a1 == phoneApp->contactListHead) {
phoneApp->contactListHead = a1->next;
}
if (a1 == phoneApp->contactListTail) {
phoneApp->contactListTail = a1->prev;
}
if (a2 == phoneApp->numContacts - 1) {
a1->prev = phoneApp->contactListTail;
a1->next = phoneApp->contactListTail->next;
phoneApp->contactListTail->next = a1;
phoneApp->contactListHead->prev = a1;
phoneApp->contactListTail = a1;
} else {
r4 = phoneApp->contactListHead;
do {
if (i++ != a2) {
r4 = r4->next;
} else {
a1->next = r4;
a1->prev = r4->prev;
a1->prev->next = a1;
r4->prev = a1;
if (r4 == phoneApp->contactListHead) {
phoneApp->contactListHead = a1;
}
return;
}
} while (r4 != phoneApp->contactListHead);
}
}

View File

@ -105,8 +105,8 @@ void ov101_021EF96C(PokegearPhoneAppData *phoneApp) {
phoneApp->pokegear->childAppdata = phoneApp;
phoneApp->pokegear->unk_05C = ov101_021F0944;
phoneApp->unk_011 = sub_0202EE7C(phoneApp->pokegear->savePokegear);
phoneApp->unk_0D0 = GSPlayerMisc_AllocAndCopyPhonebook(phoneApp->pokegear->savePokegear, phoneApp->heapId);
phoneApp->unk_0CD = GSPlayerMisc_FindEmptyGearPhonebookSlot(phoneApp->pokegear->savePokegear);
phoneApp->saveContacts = GSPlayerMisc_AllocAndCopyPhonebook(phoneApp->pokegear->savePokegear, phoneApp->heapId);
phoneApp->numContacts = GSPlayerMisc_FindEmptyGearPhonebookSlot(phoneApp->pokegear->savePokegear);
ov101_021F0D6C(phoneApp);
if (phoneApp->pokegear->args->kind == 1) {
phoneApp->unk_0CB = 1;
@ -124,7 +124,7 @@ void ov101_021EF96C(PokegearPhoneAppData *phoneApp) {
void ov101_021EFA04(PokegearPhoneAppData *phoneApp) {
ov101_021F0D90(phoneApp);
FreeToHeap(phoneApp->unk_0D0);
FreeToHeap(phoneApp->saveContacts);
phoneApp->pokegear->unk_05C = NULL;
phoneApp->pokegear->unk_060 = NULL;
}