From 099b4e3bc3fdf081df29c2e368ec26fad0146d0a Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 16 Jun 2023 09:57:12 -0700 Subject: [PATCH] combine another file --- asm/code_801B3C0.s | 112 --------------- asm/code_801C620.s | 350 --------------------------------------------- ld_script.txt | 1 - src/code_801B3C0.c | 217 ++++++++++++++++++++++++++++ src/code_801C620.c | 273 +++++------------------------------ src/code_801D760.c | 160 ++++++++++++++++++++- 6 files changed, 410 insertions(+), 703 deletions(-) delete mode 100644 asm/code_801B3C0.s diff --git a/asm/code_801B3C0.s b/asm/code_801B3C0.s deleted file mode 100644 index 9aeef9e0b..000000000 --- a/asm/code_801B3C0.s +++ /dev/null @@ -1,112 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_801BB5C -sub_801BB5C: - push {r4-r7,lr} - ldr r4, _0801BBEC - ldr r2, [r4] - adds r1, r2, 0 - adds r1, 0xCC - ldr r0, _0801BBF0 - str r0, [r1] - adds r1, 0x4 - movs r0, 0x6 - str r0, [r1] - ldr r0, [r2, 0x24] - bl sub_801ADA0 - lsls r0, 24 - cmp r0, 0 - bne _0801BB86 - ldr r0, [r4] - adds r0, 0xD0 - movs r1, 0x1 - negs r1, r1 - str r1, [r0] -_0801BB86: - ldr r0, [r4] - mov r12, r0 - movs r3, 0x1 - movs r2, 0x8 - mov r1, r12 - adds r1, 0xD4 - ldr r0, _0801BBF4 - str r0, [r1] - adds r1, 0x4 - movs r0, 0x7 - str r0, [r1] - adds r1, 0x4 - ldr r0, _0801BBF8 - ldr r0, [r0] - str r0, [r1] - mov r0, r12 - adds r0, 0xE0 - str r2, [r0] - movs r5, 0x3 - adds r1, 0x8 - movs r0, 0 - str r0, [r1] - mov r0, r12 - adds r0, 0xE8 - str r3, [r0] - movs r3, 0 - adds r6, r4, 0 - movs r7, 0x1 - negs r7, r7 - mov r4, r12 - adds r4, 0xC8 - subs r1, 0x14 -_0801BBC6: - ldr r2, [r1] - cmp r2, r7 - beq _0801BBD2 - ldr r0, [r4] - cmp r2, r0 - beq _0801BC1C -_0801BBD2: - adds r1, 0x8 - adds r3, 0x1 - cmp r3, r5 - blt _0801BBC6 - movs r3, 0 - cmp r3, r5 - bge _0801BC1C - ldr r2, [r6] - adds r0, r2, 0 - adds r0, 0xD0 - ldr r1, [r0] - b _0801BC0E - .align 2, 0 -_0801BBEC: .4byte gUnknown_203B234 -_0801BBF0: .4byte gKangaskhanStorage -_0801BBF4: .4byte gKangaskhanTrash -_0801BBF8: .4byte gUnknown_80D4970 -_0801BBFC: - adds r3, 0x1 - cmp r3, r5 - bge _0801BC1C - ldr r2, [r6] - lsls r0, r3, 3 - adds r1, r2, 0 - adds r1, 0xD0 - adds r1, r0 - ldr r1, [r1] -_0801BC0E: - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0801BBFC - adds r0, r2, 0 - adds r0, 0xC8 - str r1, [r0] -_0801BC1C: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_801BB5C - - .align 2,0 diff --git a/asm/code_801C620.s b/asm/code_801C620.s index 3708b441b..787cee983 100644 --- a/asm/code_801C620.s +++ b/asm/code_801C620.s @@ -204,354 +204,4 @@ _0801D384: _0801D3A4: .4byte gUnknown_203B250 thumb_func_end sub_801D220 - thumb_func_start sub_801D3A8 -sub_801D3A8: - push {r4-r6,lr} - sub sp, 0x8 - ldr r1, _0801D3C4 - ldr r0, [r1] - ldr r0, [r0, 0x10] - adds r6, r1, 0 - cmp r0, 0xC - bls _0801D3BA - b _0801D4B6 -_0801D3BA: - lsls r0, 2 - ldr r1, _0801D3C8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801D3C4: .4byte gUnknown_203B250 -_0801D3C8: .4byte _0801D3CC - .align 2, 0 -_0801D3CC: - .4byte _0801D400 - .4byte _0801D400 - .4byte _0801D4B6 - .4byte _0801D458 - .4byte _0801D462 - .4byte _0801D468 - .4byte _0801D472 - .4byte _0801D47A - .4byte _0801D482 - .4byte _0801D490 - .4byte _0801D49C - .4byte _0801D4AA - .4byte _0801D4B2 -_0801D400: - ldr r0, [r6] - ldr r5, [r0] - cmp r5, 0 - beq _0801D438 - ldr r4, _0801D434 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x7 - bl PrintColoredPokeNameToBuffer - ldr r2, [r6] - str r4, [r2, 0x18] - adds r0, r2, 0 - adds r0, 0x18 - adds r1, r2, 0 - adds r1, 0x68 - adds r3, r2, 0 - adds r3, 0xA8 - ldr r2, [r2, 0x14] - str r2, [sp] - movs r2, 0 - str r2, [sp, 0x4] - bl sub_8012D60 - b _0801D4B6 - .align 2, 0 -_0801D434: .4byte gAvailablePokemonNames -_0801D438: - bl sub_801D894 - ldr r2, [r6] - adds r0, r2, 0 - adds r0, 0x18 - adds r1, r2, 0 - adds r1, 0x68 - adds r3, r2, 0 - adds r3, 0xA8 - ldr r2, [r2, 0x14] - str r2, [sp] - str r5, [sp, 0x4] - movs r2, 0 - bl sub_8012D60 - b _0801D4B6 -_0801D458: - ldr r0, [r6] - ldr r0, [r0] - bl sub_80227B8 - b _0801D4B6 -_0801D462: - bl sub_8027074 - b _0801D4B6 -_0801D468: - ldr r0, [r6] - ldr r0, [r0] - bl sub_8025EF4 - b _0801D4B6 -_0801D472: - movs r0, 0 - bl sub_80252F0 - b _0801D4B6 -_0801D47A: - movs r0, 0x1 - bl sub_80252F0 - b _0801D4B6 -_0801D482: - ldr r0, [r6] - movs r1, 0x4 - ldrsh r0, [r0, r1] - movs r1, 0x2 - bl sub_8024458 - b _0801D4B6 -_0801D490: - ldr r0, [r6] - movs r1, 0x4 - ldrsh r0, [r0, r1] - bl sub_801BEEC - b _0801D4B6 -_0801D49C: - ldr r0, [r6] - ldrb r0, [r0, 0x6] - movs r1, 0x1 - movs r2, 0x2 - bl sub_8021774 - b _0801D4B6 -_0801D4AA: - movs r0, 0 - bl InitializeJobListMenu - b _0801D4B6 -_0801D4B2: - bl sub_801DCC4 -_0801D4B6: - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_801D3A8 - - thumb_func_start sub_801D4C0 -sub_801D4C0: - push {r4-r7,lr} - movs r6, 0 - ldr r4, _0801D554 - ldr r0, [r4] - adds r0, 0xA8 - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r0, [r4] - ldrb r0, [r0, 0x6] - cmp r0, 0 - bne _0801D568 - bl sub_8096E2C - lsls r0, 24 - cmp r0, 0 - beq _0801D534 - ldr r1, [r4] - movs r0, 0x2 - str r0, [r1, 0x6C] - ldr r0, _0801D558 - str r0, [r1, 0x68] - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - bne _0801D4FE - ldr r0, [r4] - adds r0, 0xA8 - movs r1, 0x1 - strh r1, [r0] -_0801D4FE: - ldr r1, [r4] - ldr r0, _0801D55C - str r0, [r1, 0x70] - movs r0, 0x4 - str r0, [r1, 0x74] - movs r6, 0x2 - movs r0, 0x2 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - beq _0801D534 - ldr r1, [r4] - ldr r0, _0801D560 - str r0, [r1, 0x78] - movs r0, 0x9 - str r0, [r1, 0x7C] - bl HasNoAcceptedJobs - lsls r0, 24 - cmp r0, 0 - beq _0801D532 - ldr r0, [r4] - adds r0, 0xAC - movs r1, 0x1 - strh r1, [r0] -_0801D532: - movs r6, 0x3 -_0801D534: - ldr r4, _0801D554 - ldr r2, [r4] - lsls r3, r6, 3 - adds r0, r2, 0 - adds r0, 0x68 - adds r0, r3 - ldr r1, _0801D564 - str r1, [r0] - adds r2, 0x6C - adds r2, r3 - movs r0, 0xB - str r0, [r2] - adds r6, 0x1 - adds r7, r4, 0 - b _0801D5E6 - .align 2, 0 -_0801D554: .4byte gUnknown_203B250 -_0801D558: .4byte gMenuItems -_0801D55C: .4byte gMenuTeam -_0801D560: .4byte gMenuJobList -_0801D564: .4byte gMenuOthers -_0801D568: - ldr r0, _0801D63C - ldr r1, _0801D640 - bl strcpy - bl sub_8096E2C - lsls r0, 24 - cmp r0, 0 - beq _0801D5B6 - ldr r1, [r4] - ldr r0, _0801D644 - ldr r0, [r0] - str r0, [r1, 0x68] - movs r0, 0x5 - str r0, [r1, 0x6C] - movs r0, 0x4 - bl sub_8024108 - lsls r0, 24 - cmp r0, 0 - beq _0801D59A - ldr r0, [r4] - adds r0, 0xA8 - movs r1, 0x1 - strh r1, [r0] -_0801D59A: - movs r6, 0x1 - ldr r1, [r4] - movs r0, 0x2 - str r0, [r1, 0x74] - ldr r0, _0801D648 - str r0, [r1, 0x70] - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - bne _0801D5B4 - ldr r0, [r4] - adds r0, 0xAA - strh r6, [r0] -_0801D5B4: - movs r6, 0x2 -_0801D5B6: - ldr r5, _0801D64C - ldr r1, [r5] - lsls r2, r6, 3 - adds r3, r1, 0 - adds r3, 0x68 - adds r4, r3, r2 - ldr r0, _0801D650 - ldr r0, [r0] - str r0, [r4] - adds r1, 0x6C - adds r2, r1, r2 - movs r0, 0x8 - str r0, [r2] - adds r6, 0x1 - lsls r2, r6, 3 - adds r3, r2 - ldr r0, _0801D654 - ldr r0, [r0] - str r0, [r3] - adds r1, r2 - movs r0, 0xA - str r0, [r1] - adds r6, 0x1 - adds r7, r5, 0 -_0801D5E6: - ldr r4, [r7] - lsls r2, r6, 3 - adds r0, r4, 0 - adds r0, 0x68 - adds r0, r2 - movs r1, 0 - str r1, [r0] - adds r1, r4, 0 - adds r1, 0x6C - adds r2, r1, r2 - movs r0, 0x1 - str r0, [r2] - movs r3, 0 - cmp r3, r6 - bge _0801D622 - adds r5, r4, 0 - adds r4, 0xA8 - adds r2, r1, 0 -_0801D60A: - ldrh r0, [r4] - cmp r0, 0 - bne _0801D618 - ldr r1, [r2] - ldr r0, [r5, 0x14] - cmp r1, r0 - beq _0801D67A -_0801D618: - adds r4, 0x2 - adds r2, 0x8 - adds r3, 0x1 - cmp r3, r6 - blt _0801D60A -_0801D622: - movs r3, 0 - cmp r3, r6 - bge _0801D67A - ldr r1, [r7] - adds r0, r1, 0 - adds r0, 0xA8 - ldrh r0, [r0] - cmp r0, 0 - bne _0801D658 - ldr r0, [r1, 0x6C] - str r0, [r1, 0x14] - b _0801D67A - .align 2, 0 -_0801D63C: .4byte gAvailablePokemonNames -_0801D640: .4byte gUnknown_80DBF34 -_0801D644: .4byte gUnknown_80D49A8 -_0801D648: .4byte gMenuItems -_0801D64C: .4byte gUnknown_203B250 -_0801D650: .4byte gUnknown_80D4970 -_0801D654: .4byte gUnknown_80D49B4 -_0801D658: - adds r3, 0x1 - cmp r3, r6 - bge _0801D67A - ldr r2, [r7] - lsls r0, r3, 1 - adds r1, r2, 0 - adds r1, 0xA8 - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _0801D658 - lsls r0, r3, 3 - adds r1, r2, 0 - adds r1, 0x6C - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x14] -_0801D67A: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_801D4C0 - .align 2,0 diff --git a/ld_script.txt b/ld_script.txt index 2728bc155..cf75e42bd 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -107,7 +107,6 @@ SECTIONS { src/kecleon_items_1.o(.text); src/code_801AFA4.o(.text); src/code_801B3C0.o(.text); - asm/code_801B3C0.o(.text); src/code_801C620.o(.text); asm/code_801C620.o(.text); src/code_801D760.o(.text); diff --git a/src/code_801B3C0.c b/src/code_801B3C0.c index adbe68178..348219efd 100644 --- a/src/code_801B3C0.c +++ b/src/code_801B3C0.c @@ -66,6 +66,20 @@ extern u8 gUnknown_80DBB08[]; extern u8 gUnknown_80DBB38[]; extern u8 gKangaskhanTrashToolboxItem[]; extern u8 gKangaskhanTrashReceivedItem[]; +extern u8 gKangaskhanStorage[]; +extern u8 gKangaskhanTrash[]; +extern u8 *gUnknown_80D4970[]; +extern u8 gUnknown_202DEA8[]; +extern u8 *gUnknown_80D4920[]; +extern u8 *gUnknown_80D4928[]; + +extern s32 sub_80144A4(s32 *); +extern u32 sub_801A6E8(u32); +extern u32 sub_801A8AC(); +extern void sub_8099690(u32); +extern void sub_801A928(void); + +extern bool8 sub_801ADA0(s32); extern struct UnkTextStruct2 gUnknown_80DBA58; extern struct UnkTextStruct2 gUnknown_80DBA88; extern struct UnkTextStruct2 gUnknown_80DBA70; @@ -508,3 +522,206 @@ void sub_801BB20(void) gUnknown_203B234->unkCC[loopMax].text = NULL; gUnknown_203B234->unkCC[loopMax].menuAction = -1; } + +void sub_801BB5C(void) +{ + int index; + s32 loopMax = 0; + + gUnknown_203B234->unkCC[loopMax].text = gKangaskhanStorage; + gUnknown_203B234->unkCC[loopMax].menuAction = 6; + if (!sub_801ADA0(gUnknown_203B234->unk24)) { + gUnknown_203B234->unkCC[loopMax].menuAction = -1; + } + + loopMax++; + gUnknown_203B234->unkCC[loopMax].text = gKangaskhanTrash; + gUnknown_203B234->unkCC[loopMax].menuAction = 7; + + loopMax++; + gUnknown_203B234->unkCC[loopMax].text = *gUnknown_80D4970; + gUnknown_203B234->unkCC[loopMax].menuAction = 8; + + loopMax++; + gUnknown_203B234->unkCC[loopMax].text = 0; + gUnknown_203B234->unkCC[loopMax].menuAction = 1; + + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B234->unkCC[index].menuAction != -1) + if(gUnknown_203B234->unkCC[index].menuAction == gUnknown_203B234->menuAction) + return; + } + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B234->unkCC[index].menuAction != -1) + { + gUnknown_203B234->menuAction = gUnknown_203B234->unkCC[index].menuAction; + break; + } + } +} + +void sub_801BC24(void) +{ + s32 loopMax; + loopMax = 0; + gUnknown_203B234->unkCC[loopMax].text = *gUnknown_80D4920; + gUnknown_203B234->unkCC[loopMax].menuAction = 2; + loopMax += 1; + gUnknown_203B234->unkCC[loopMax].text = *gUnknown_80D4928; + gUnknown_203B234->unkCC[loopMax].menuAction = 3; + loopMax += 1; + gUnknown_203B234->unkCC[loopMax].text = NULL; + gUnknown_203B234->unkCC[loopMax].menuAction = 1; +} + +void sub_801BC64(void) +{ + s32 temp; + if(sub_80144A4(&temp)== 0) + { + switch(temp) + { + case 4: + sub_801B748(0x8); + break; + case 5: + sub_801B748(0x7); + break; + } + } +} + +void sub_801BC94(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 2: + sub_801B748(0xD); + break; + case 1: + case 3: + sub_801B748(0x6); + break; + } + } +} + +void sub_801BCCC(void) +{ + switch(sub_801A6E8(1)) + { + case 0: + case 1: + break; + case 3: + gUnknown_203B234->unk24 = sub_801A8AC(); + gUnknown_203B234->unk20 = gTeamInventory_203B460->teamItems[gUnknown_203B234->unk24]; + sub_8090E14(gUnknown_202DEA8, &gUnknown_203B234->unk20, &gUnknown_203B234->unk14); + sub_801B748(0xA); + break; + case 4: + gUnknown_203B234->unk24 = sub_801A8AC(); + gUnknown_203B234->unk20 = gTeamInventory_203B460->teamItems[gUnknown_203B234->unk24]; + sub_8090E14(gUnknown_202DEA8, &gUnknown_203B234->unk20, &gUnknown_203B234->unk14); + sub_8099690(0); + sub_801B748(0xB); + break; + case 2: + sub_801A928(); + sub_801B748(6); + break; + } +} + +void sub_801BD80(void) +{ + s32 menuAction; + + menuAction = 0; + sub_801A6E8(0); + if (!sub_8012FD8(&gUnknown_203B234->unk28)) { + sub_8013114(&gUnknown_203B234->unk28,&menuAction); + if (menuAction != 1) gUnknown_203B234->menuAction = menuAction; + } + switch(menuAction) + { + case 6: + MoveToStorage(&gUnknown_203B234->unk20); + ShiftItemsDownFrom(gUnknown_203B234->unk24); + AddItemToInventory(&gUnknown_203B234->unk10); + FillInventoryGaps(); + PlaySound(0xcb); + sub_8099690(0); + sub_801A928(); + sub_801B748(0xE); + break; + case 7: + sub_801B748(0xC); + break; + case 8: + sub_8099690(0); + sub_801B748(0xB); + break; + case 1: + sub_801B748(0x9); + break; + } +} + +void sub_801BE30(void) +{ + s32 menuAction; + + menuAction = 0; + sub_801A6E8(0); + sub_8012FD8(&gUnknown_203B234->unk28); + if (!sub_8012FD8(&gUnknown_203B234->unk78)) { + sub_8013114(&gUnknown_203B234->unk78,&menuAction); + } + switch(menuAction) + { + case 1: + case 3: + sub_801B748(9); + break; + case 2: + ShiftItemsDownFrom(gUnknown_203B234->unk24); + AddItemToInventory(&gUnknown_203B234->unk10); + FillInventoryGaps(); + PlaySound(0xcb); + sub_801A928(); + sub_801B748(0xf); + break; + } +} + +void sub_801BEAC(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + sub_801B748(9); + case 0: + case 1: + break; + } +} + +void sub_801BEC8(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + sub_801B748(gUnknown_203B234->fallbackState); + } +} + diff --git a/src/code_801C620.c b/src/code_801C620.c index 0af5935df..c0296c098 100644 --- a/src/code_801C620.c +++ b/src/code_801C620.c @@ -11,27 +11,6 @@ #include "subStruct_203B240.h" #include "menu_input.h" -struct unkStruct_203B234 -{ - // size: 0x154 - u32 unk0; - u32 state; - u32 fallbackState; - u8 unkC; - struct Item unk10; - struct unkStruct_8090F58 unk14; - struct Item unk20; - u32 unk24; - struct MenuStruct unk28; - struct MenuStruct unk78; - u32 menuAction; - struct MenuItem unkCC[5]; - struct UnkTextStruct2 unkF4[4]; -}; - -extern struct unkStruct_203B234 *gUnknown_203B234; - - struct unkStruct_203B238 { // size: 0x124 @@ -115,7 +94,7 @@ struct unkStruct_203B244 struct unk_203B250 { - struct PokemonStruct *unk0; + struct PokemonStruct *pokeStruct; s16 index; /* 0x6 */ u8 currFriendAreaLocation; // 0 when not in a friend area u8 unk7; @@ -239,188 +218,12 @@ void sub_801C118(); void sub_801C1A0(); void sub_801C228(); -void sub_801B748(u32); - - -extern s32 sub_80144A4(s32 *); -extern u32 sub_801B410(void); -extern void sub_801B450(void); -extern u32 sub_801A6E8(u32); -extern void sub_801A928(void); -extern void sub_8099690(u32); -extern u32 sub_801A8AC(); extern u8 sub_801CB24(); extern u32 sub_801CFE0(u8); extern s32 sub_801CFB8(void); extern void sub_801D220(); extern void sub_801D3A8(); -extern u8 *gUnknown_80D4920[]; -extern u8 *gUnknown_80D4928[]; - -void sub_801BC24(void) -{ - struct unkStruct_203B234 *puVar1; - u8 *nullText; - u32 menuAction; - - puVar1 = gUnknown_203B234; - nullText = NULL; - puVar1->unkCC[0].text = *gUnknown_80D4920; - gUnknown_203B234->unkCC[0].menuAction = 2; - menuAction = 1; - gUnknown_203B234->unkCC[1].text = *gUnknown_80D4928; - gUnknown_203B234->unkCC[1].menuAction = 3; - gUnknown_203B234->unkCC[2].text = nullText; - gUnknown_203B234->unkCC[2].menuAction = menuAction; -} - -void sub_801BC64(void) -{ - s32 temp; - if(sub_80144A4(&temp)== 0) - { - switch(temp) - { - case 4: - sub_801B748(0x8); - break; - case 5: - sub_801B748(0x7); - break; - } - } -} - -void sub_801BC94(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - switch(temp) - { - case 2: - sub_801B748(0xD); - break; - case 1: - case 3: - sub_801B748(0x6); - break; - } - } -} - -void sub_801BCCC(void) -{ - switch(sub_801A6E8(1)) - { - case 0: - case 1: - break; - case 3: - gUnknown_203B234->unk24 = sub_801A8AC(); - gUnknown_203B234->unk20 = gTeamInventory_203B460->teamItems[gUnknown_203B234->unk24]; - sub_8090E14(gUnknown_202DEA8, &gUnknown_203B234->unk20, &gUnknown_203B234->unk14); - sub_801B748(0xA); - break; - case 4: - gUnknown_203B234->unk24 = sub_801A8AC(); - gUnknown_203B234->unk20 = gTeamInventory_203B460->teamItems[gUnknown_203B234->unk24]; - sub_8090E14(gUnknown_202DEA8, &gUnknown_203B234->unk20, &gUnknown_203B234->unk14); - sub_8099690(0); - sub_801B748(0xB); - break; - case 2: - sub_801A928(); - sub_801B748(6); - break; - } -} - -void sub_801BD80(void) -{ - s32 menuAction; - - menuAction = 0; - sub_801A6E8(0); - if (sub_8012FD8(&gUnknown_203B234->unk28) == '\0') { - sub_8013114(&gUnknown_203B234->unk28,&menuAction); - if (menuAction != 1) gUnknown_203B234->menuAction = menuAction; - } - switch(menuAction) - { - case 6: - MoveToStorage(&gUnknown_203B234->unk20); - ShiftItemsDownFrom(gUnknown_203B234->unk24); - AddItemToInventory(&gUnknown_203B234->unk10); - FillInventoryGaps(); - PlaySound(0xcb); - sub_8099690(0); - sub_801A928(); - sub_801B748(0xE); - break; - case 7: - sub_801B748(0xC); - break; - case 8: - sub_8099690(0); - sub_801B748(0xB); - break; - case 1: - sub_801B748(0x9); - break; - } -} - -void sub_801BE30(void) -{ - s32 menuAction; - - menuAction = 0; - sub_801A6E8(0); - sub_8012FD8(&gUnknown_203B234->unk28); - if (sub_8012FD8(&gUnknown_203B234->unk78) == '\0') { - sub_8013114(&gUnknown_203B234->unk78,&menuAction); - } - switch(menuAction) - { - case 1: - case 3: - sub_801B748(9); - break; - case 2: - ShiftItemsDownFrom(gUnknown_203B234->unk24); - AddItemToInventory(&gUnknown_203B234->unk10); - FillInventoryGaps(); - PlaySound(0xcb); - sub_801A928(); - sub_801B748(0xf); - break; - } -} - -void sub_801BEAC(void) -{ - switch(sub_801B410()) - { - case 2: - case 3: - sub_801B450(); - sub_801B748(9); - case 0: - case 1: - break; - } -} - -void sub_801BEC8(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - sub_801B748(gUnknown_203B234->fallbackState); - } -} bool8 sub_801BEEC(s16 species) { @@ -1307,42 +1110,42 @@ struct unkStruct_203B244 *sub_801D008(void) bool8 sub_801D014(struct PokemonStruct *param_1) { - s32 index; - struct PokemonStruct *pokemon; - struct unk_203B250 *preload; - - ResetUnusedInputStruct(); - sub_800641C(0,1,1); - gUnknown_203B250 = MemoryAlloc(sizeof(struct unk_203B250), 8); - gUnknown_203B250->menuAction = gUnknown_203B254; - gUnknown_203B250->unk0 = param_1; - if (gUnknown_203B250->unk0 != NULL) { - for(index = 0; index < NUM_MONSTERS; index++) - { - preload = gUnknown_203B250; - pokemon = &gRecruitedPokemonRef->pokemon[(s16)index]; // cast is needed here - if(preload->unk0 == pokemon) + s32 index; + struct PokemonStruct *pokemon; + struct unk_203B250 *preload; + + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + gUnknown_203B250 = MemoryAlloc(sizeof(struct unk_203B250), 8); + gUnknown_203B250->menuAction = gUnknown_203B254; + gUnknown_203B250->pokeStruct = param_1; + if (gUnknown_203B250->pokeStruct != NULL) { + for(index = 0; index < NUM_MONSTERS; index++) { - preload->index = index; - break; + preload = gUnknown_203B250; + pokemon = &gRecruitedPokemonRef->pokemon[(s16)index]; // cast is needed here + if(preload->pokeStruct == pokemon) + { + preload->index = index; + break; + } } - } - } - else { - gUnknown_203B250->index = NUM_MONSTERS; - } - gUnknown_203B250->currFriendAreaLocation = sub_8002658(sub_80A5728()); - gUnknown_203B250->unk8 = 0; - gUnknown_203B250->unk9 = 0; - gUnknown_203B250->unkC = GetPlayerPokemonStruct(); - gUnknown_203B250->unk7 = 0; - if (gUnknown_203B250->unk0 != 0) { - sub_801D208(5); - } - else { - sub_801D208(0); - } - return 1; + } + else { + gUnknown_203B250->index = NUM_MONSTERS; + } + gUnknown_203B250->currFriendAreaLocation = sub_8002658(sub_80A5728()); + gUnknown_203B250->unk8 = 0; + gUnknown_203B250->unk9 = 0; + gUnknown_203B250->unkC = GetPlayerPokemonStruct(); + gUnknown_203B250->unk7 = 0; + if (gUnknown_203B250->pokeStruct != NULL) { + sub_801D208(5); + } + else { + sub_801D208(0); + } + return 1; } u32 sub_801D0DC(void) @@ -1390,10 +1193,8 @@ u32 sub_801D0DC(void) u32 sub_801D178(void) { - struct unk_203B250 *preload; struct PokemonStruct *pokeStruct; - preload = gUnknown_203B250; if (gUnknown_203B250->unk9 != 0) { return 2; @@ -1406,12 +1207,12 @@ u32 sub_801D178(void) { return 1; } - else if (preload->unkC != GetPlayerPokemonStruct()) + else if (gUnknown_203B250->unkC != GetPlayerPokemonStruct()) { goto _ret4; } else if (sub_80A7AE8(7) < 0) - { + { return 0; } else if((pokeStruct = sub_808D3F8(), (pokeStruct->unk0 >> 1 & 1) == 0)) diff --git a/src/code_801D760.c b/src/code_801D760.c index 1da3182d2..276222fde 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -6,6 +6,7 @@ #include "friend_list_menu.h" #include "item.h" #include "menu.h" +#include "pokemon.h" #include "team_inventory.h" #include "memory.h" #include "input.h" @@ -63,6 +64,7 @@ extern void sub_8027168(); extern u32 sub_80270A4(); extern u32 sub_802C898(void); extern void sub_802C8F4(void); +extern void InitializeJobListMenu(u32); extern const char *sub_8098FB4(); extern void xxx_format_string(const char *, u8 *, u32 **, u32); @@ -78,8 +80,18 @@ extern void sub_8007E20(u32, u32, u32, u32, u32, u8 *, u32); extern struct FileArchive gTitleMenuFileArchive; extern const char gTeamRankBadgeFileName; +extern u8 gAvailablePokemonNames[]; + extern char gUnknown_80DBF3C[]; extern char gUnknown_80DBF4C[]; +extern u8 gMenuItems[]; +extern u8 gMenuJobList[]; +extern u8 gMenuTeam[]; +extern u8 gMenuOthers[]; +extern u8 *gUnknown_80D49B4[]; +extern u8 gUnknown_80DBF34[]; +extern u8 *gUnknown_80D49A8[]; +extern u8 *gUnknown_80D4970[]; struct TeamBadgeData { @@ -89,13 +101,12 @@ struct TeamBadgeData struct unk_203B250 { - u32 unk0; - u16 unk4; + struct PokemonStruct *pokeStruct; + s16 index; /* 0x6 */ u8 currFriendAreaLocation; // 0 when not in a friend area u8 unk7; u8 unk8; u8 unk9; - u8 fillA[0xC - 0xA]; struct PokemonStruct *unkC; u32 state; u32 menuAction; @@ -107,13 +118,154 @@ struct unk_203B250 struct unk_203B250 *gUnknown_203B250; +extern bool8 HasNoAcceptedJobs(void); +extern bool8 sub_8024108(u32); +extern bool8 sub_8096E2C(void); +extern bool8 sub_80023E4(u32); +extern u32 sub_801DCC4(void); +extern u32 sub_8027074(void); +extern void sub_80227B8(struct PokemonStruct *); +extern bool8 sub_8024458(s16, u32); +extern bool8 sub_801BEEC(s16); +extern void sub_8021774(u8, u32, u32); +void sub_801D894(void); +u32 sub_8025EF4(struct PokemonStruct *); + +void sub_801D3A8(void) +{ + switch(gUnknown_203B250->state) + { + case 0: + case 1: + if(gUnknown_203B250->pokeStruct != NULL) + { + PrintColoredPokeNameToBuffer(gAvailablePokemonNames, gUnknown_203B250->pokeStruct, 7); + gUnknown_203B250->unk18.unk0 = gAvailablePokemonNames; + sub_8012D60(&gUnknown_203B250->unk18, gUnknown_203B250->unk68, 0, gUnknown_203B250->unkA8, gUnknown_203B250->menuAction, 0); + } + else { + sub_801D894(); + sub_8012D60(&gUnknown_203B250->unk18, gUnknown_203B250->unk68, 0, gUnknown_203B250->unkA8, gUnknown_203B250->menuAction, 0); + } + break; + case 3: + sub_80227B8(gUnknown_203B250->pokeStruct); + break; + case 4: + sub_8027074(); + break; + case 5: + sub_8025EF4(gUnknown_203B250->pokeStruct); + break; + case 6: + sub_80252F0(0); + break; + case 7: + sub_80252F0(1); + break; + case 8: + sub_8024458(gUnknown_203B250->index, 2); + break; + case 9: + sub_801BEEC(gUnknown_203B250->index); + break; + case 10: + sub_8021774(gUnknown_203B250->currFriendAreaLocation, 1, 2); + break; + case 11: + InitializeJobListMenu(0); + break; + case 12: + sub_801DCC4(); + break; + } +} + +void sub_801D4C0(void) +{ + s32 index; + s32 loopMax; + + loopMax = 0; + MemoryFill16(gUnknown_203B250->unkA8,0,sizeof(gUnknown_203B250->unkA8)); + if (gUnknown_203B250->currFriendAreaLocation == 0) { + if (sub_8096E2C()) { + gUnknown_203B250->unk68[loopMax].menuAction = 2; + gUnknown_203B250->unk68[loopMax].text = gMenuItems; + if (GetNumberOfFilledInventorySlots() == 0) { + gUnknown_203B250->unkA8[loopMax] = 1; + } + loopMax++; + gUnknown_203B250->unk68[loopMax].text = gMenuTeam; + gUnknown_203B250->unk68[loopMax].menuAction = 4; + loopMax++; + if (sub_80023E4(2)) { + gUnknown_203B250->unk68[loopMax].text = gMenuJobList; + gUnknown_203B250->unk68[loopMax].menuAction = 9; + if (HasNoAcceptedJobs()) { + gUnknown_203B250->unkA8[loopMax] = 1; + } + loopMax++; + } + } + gUnknown_203B250->unk68[loopMax].text = gMenuOthers; + gUnknown_203B250->unk68[loopMax].menuAction = 0xb; + loopMax++; + } + else { + strcpy(gAvailablePokemonNames,gUnknown_80DBF34); + if (sub_8096E2C()) { + gUnknown_203B250->unk68[loopMax].text = *gUnknown_80D49A8; + gUnknown_203B250->unk68[loopMax].menuAction = 5; + if (sub_8024108(4)) { + gUnknown_203B250->unkA8[loopMax] = 1; + } + loopMax++; + gUnknown_203B250->unk68[loopMax].menuAction = 2; + gUnknown_203B250->unk68[loopMax].text = gMenuItems; + if (GetNumberOfFilledInventorySlots() == 0) { + gUnknown_203B250->unkA8[loopMax] = 1; + } + loopMax++; + } + + gUnknown_203B250->unk68[loopMax].text = *gUnknown_80D4970; + gUnknown_203B250->unk68[loopMax].menuAction = 8; + loopMax++; + gUnknown_203B250->unk68[loopMax].text = *gUnknown_80D49B4; + gUnknown_203B250->unk68[loopMax].menuAction = 10; + loopMax++; + } + gUnknown_203B250->unk68[loopMax].text = NULL; + gUnknown_203B250->unk68[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B250->unkA8[index] == 0) + { + if(gUnknown_203B250->unk68[index].menuAction == gUnknown_203B250->menuAction) + { + return; + } + } + } + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B250->unkA8[index] == 0) + { + gUnknown_203B250->menuAction = gUnknown_203B250->unk68[index].menuAction; + break; + } + } +} void sub_801D680(void) { int menuAction; menuAction = 0; - if ((sub_8012FD8(&gUnknown_203B250->unk18) == '\0') && (sub_8013114(&gUnknown_203B250->unk18,&menuAction), menuAction != 1)) { + if (!(sub_8012FD8(&gUnknown_203B250->unk18)) && (sub_8013114(&gUnknown_203B250->unk18,&menuAction), menuAction != 1)) { gUnknown_203B250->menuAction = menuAction; } switch(menuAction) {