diff --git a/asm/code_801EE10_mid.s b/asm/code_801EE10_mid.s deleted file mode 100644 index 16d4c47fe..000000000 --- a/asm/code_801EE10_mid.s +++ /dev/null @@ -1,292 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8021410 -sub_8021410: - push {r4,lr} - ldr r4, _08021490 - ldr r0, [r4] - adds r0, 0xDC - movs r2, 0 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xDD - strb r2, [r0] - ldr r0, [r4] - adds r0, 0xDE - movs r1, 0xC - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xDF - strb r2, [r0] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x7C - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - adds r0, 0x5A - movs r1, 0 - ldrsh r0, [r0, r1] - movs r1, 0xC - bl sub_80095E4 - adds r0, 0x2 - lsls r0, 16 - ldr r2, [r4] - ldr r3, [r2, 0x74] - lsls r1, r3, 1 - adds r1, r3 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x8A - asrs r3, r0, 16 - lsrs r0, 16 - strh r0, [r1] - ldr r1, [r2, 0x74] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r2, r0 - adds r3, 0x2 - adds r2, 0x8C - strh r3, [r2] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x7C - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08021490: .4byte gUnknown_203B280 - thumb_func_end sub_8021410 - - thumb_func_start sub_8021494 -sub_8021494: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xA8 - ldr r4, _08021568 - ldr r0, [r4] - ldr r0, [r0, 0x74] - bl sub_8008C54 - ldr r0, [r4] - ldr r0, [r0, 0x74] - bl sub_80073B8 - ldr r2, _0802156C - ldr r0, [r4] - ldr r3, [r0, 0x74] - movs r0, 0 - str r0, [sp] - movs r0, 0xA - movs r1, 0 - bl xxx_call_draw_string - ldr r3, [r4] - adds r0, r3, 0 - adds r0, 0xDE - ldrb r0, [r0] - lsls r0, 3 - adds r0, 0x4 - adds r1, r3, 0 - adds r1, 0x5E - movs r5, 0 - ldrsh r2, [r1, r5] - adds r2, 0x1 - movs r1, 0x7 - str r1, [sp] - ldr r1, [r3, 0x74] - str r1, [sp, 0x4] - movs r1, 0 - movs r3, 0x1 - bl sub_8012BC4 - movs r0, 0 - mov r9, r0 - ldr r0, [r4] - adds r0, 0x5A - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r9, r0 - blt _080214FC - b _08021646 -_080214FC: - mov r8, r4 - add r2, sp, 0x58 - mov r10, r2 -_08021502: - mov r3, r8 - ldr r2, [r3] - adds r0, r2, 0 - adds r0, 0x5E - movs r5, 0 - ldrsh r1, [r0, r5] - subs r0, 0x2 - movs r3, 0 - ldrsh r0, [r0, r3] - muls r0, r1 - add r0, r9 - adds r0, r2, r0 - ldrb r5, [r0] - adds r7, r5, 0 - ldr r6, [r2, 0x3C] - cmp r6, 0x2 - bne _0802159C - add r0, sp, 0x8 - adds r1, r5, 0 - movs r2, 0x1 - bl sub_8092578 - adds r0, r5, 0 - bl GetFriendAreaPrice - ldr r1, _08021570 - ldr r1, [r1] - movs r5, 0x98 - lsls r5, 2 - adds r1, r5 - ldr r1, [r1] - cmp r0, r1 - bgt _08021574 - mov r1, r8 - ldr r0, [r1] - adds r0, 0x40 - mov r1, r9 - bl sub_8013800 - adds r1, r0, 0 - mov r2, r8 - ldr r0, [r2] - ldr r3, [r0, 0x74] - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - add r2, sp, 0x8 - bl xxx_call_draw_string - b _08021632 - .align 2, 0 -_08021568: .4byte gUnknown_203B280 -_0802156C: .4byte gUnknown_80DC494 -_08021570: .4byte gTeamInventoryRef -_08021574: - mov r0, r10 - ldr r1, _08021598 - add r2, sp, 0x8 - bl sprintfStatic - mov r3, r8 - ldr r0, [r3] - adds r0, 0x40 - mov r1, r9 - bl sub_8013800 - adds r1, r0, 0 - mov r5, r8 - ldr r0, [r5] - ldr r3, [r0, 0x74] - movs r0, 0 - str r0, [sp] - b _080215FE - .align 2, 0 -_08021598: .4byte gUnknown_80DC4A4 -_0802159C: - cmp r6, 0 - bne _0802160C - ldr r0, _080215D4 - ldr r0, [r0] - adds r0, r5 - ldrb r0, [r0] - cmp r0, 0x1 - bne _080215D8 - adds r0, r2, 0 - adds r0, 0x40 - mov r1, r9 - bl sub_8013800 - adds r4, r0, 0 - adds r0, r5, 0 - bl GetFriendAreaName - adds r2, r0, 0 - mov r1, r8 - ldr r0, [r1] - ldr r3, [r0, 0x74] - str r6, [sp] - movs r0, 0x8 - adds r1, r4, 0 - bl xxx_call_draw_string - b _08021632 - .align 2, 0 -_080215D4: .4byte gFriendAreas -_080215D8: - adds r0, r5, 0 - bl GetFriendAreaName - adds r2, r0, 0 - mov r0, r10 - ldr r1, _08021608 - bl sprintfStatic - mov r2, r8 - ldr r0, [r2] - adds r0, 0x40 - mov r1, r9 - bl sub_8013800 - adds r1, r0, 0 - mov r3, r8 - ldr r0, [r3] - ldr r3, [r0, 0x74] - str r6, [sp] -_080215FE: - movs r0, 0x8 - mov r2, r10 - bl xxx_call_draw_string - b _08021632 - .align 2, 0 -_08021608: .4byte gUnknown_80DC4AC -_0802160C: - adds r0, r2, 0 - adds r0, 0x40 - mov r1, r9 - bl sub_8013800 - adds r4, r0, 0 - adds r0, r7, 0 - bl GetFriendAreaName - adds r2, r0, 0 - mov r5, r8 - ldr r0, [r5] - ldr r3, [r0, 0x74] - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - adds r1, r4, 0 - bl xxx_call_draw_string -_08021632: - movs r0, 0x1 - add r9, r0 - mov r1, r8 - ldr r0, [r1] - adds r0, 0x5A - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r9, r0 - bge _08021646 - b _08021502 -_08021646: - ldr r0, _08021660 - ldr r0, [r0] - ldr r0, [r0, 0x74] - bl sub_80073E0 - add sp, 0xA8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08021660: .4byte gUnknown_203B280 - thumb_func_end sub_8021494 - - .align 2,0 diff --git a/asm/dungeon_2.s b/asm/dungeon_2.s index 4fccc19ff..3891e3998 100644 --- a/asm/dungeon_2.s +++ b/asm/dungeon_2.s @@ -656,54 +656,4 @@ _08090880: bx r1 thumb_func_end sub_8090820 - thumb_func_start sub_8090888 -sub_8090888: - push {r4-r7,lr} - adds r4, r0, 0 - adds r5, r1, 0 - movs r6, 0 - b _0809089C -_08090892: - ldrb r0, [r4] - cmp r0, 0xA - bne _0809089A - adds r6, 0x1 -_0809089A: - adds r4, 0x1 -_0809089C: - ldrb r0, [r4] - cmp r0, 0 - bne _08090892 - ldrb r7, [r5] - b _080908AE -_080908A6: - movs r0, 0xA - strb r0, [r4] - adds r4, 0x1 - adds r6, 0x1 -_080908AE: - adds r0, r6, 0 - movs r1, 0x3 - bl __modsi3 - cmp r0, 0 - bne _080908A6 - adds r1, r7, 0 - lsls r0, r1, 24 - cmp r0, 0 - beq _080908CE -_080908C2: - strb r1, [r4] - adds r4, 0x1 - adds r5, 0x1 - ldrb r1, [r5] - cmp r1, 0 - bne _080908C2 -_080908CE: - movs r0, 0 - strb r0, [r4] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8090888 - .align 2,0 diff --git a/include/friend_area.h b/include/friend_area.h index b9430be04..3f7d9959e 100644 --- a/include/friend_area.h +++ b/include/friend_area.h @@ -29,6 +29,7 @@ void UnlockFriendArea(u8 index); u8 *GetFriendAreaDescription(u8 index); u8 GetFriendAreaUnlockCondition(u8 index); s32 GetFriendAreaPrice(u8 index); +void sub_8092578(u8 *buffer, u8 index, bool8 printPrice); const char *GetFriendAreaName(u8 index); void sub_809249C(u8 friendArea, u8 clear); void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u8 param_4); diff --git a/include/wigglytuff_shop.h b/include/wigglytuff_shop.h index 1bf1dcdc3..a03785d5d 100644 --- a/include/wigglytuff_shop.h +++ b/include/wigglytuff_shop.h @@ -66,5 +66,14 @@ enum WigglytuffStates WIGGLYTUFF_CHECK_LEGENDARY = 0x1C, }; +bool8 sub_80211AC(u32 mode, u32 param_2); +bool8 sub_8021774(u8 friendArea, bool8 param_2, s32 param_3); +u32 sub_8021274(u8 param_1); +u8 sub_802132C(void); +void sub_8021354(bool8 param_1); +void sub_80213A0(void); +void sub_8021494(void); +u32 sub_80217EC(void); +void sub_8021830(void); #endif // GUARD_WIGGLYTUFF_SHOP_H diff --git a/ld_script.txt b/ld_script.txt index 7814ecd1b..b3fe169e7 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -107,9 +107,6 @@ SECTIONS { asm/code_801EE10.o(.text); src/code_801EE10_mid.o(.text); src/gulpin_shop_1.o(.text); - src/code_8021774_pre.o(.text); - asm/code_801EE10_mid.o(.text); - src/code_8021774.o(.text); src/wigglytuff_shop.o(.text); src/code_8023144_pre.o(.text); asm/code_8023144.o(.text); diff --git a/src/code_801D760.c b/src/code_801D760.c index 0e10d1d1a..677e8cfff 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -17,6 +17,7 @@ #include "menu_input.h" #include "code_8021774.h" #include "code_80118A4.h" +#include "wigglytuff_shop.h" struct unkStruct_203B258 { @@ -151,7 +152,7 @@ void sub_801D3A8(void) sub_801BEEC(gUnknown_203B250->index); break; case 10: - sub_8021774(gUnknown_203B250->currFriendAreaLocation, 1, 2); + sub_8021774(gUnknown_203B250->currFriendAreaLocation, TRUE, 2); break; case 11: InitializeJobListMenu(0); diff --git a/src/code_8021774.c b/src/code_8021774.c deleted file mode 100644 index f385b92bf..000000000 --- a/src/code_8021774.c +++ /dev/null @@ -1,445 +0,0 @@ -#include "constants/friend_area.h" -#include "global.h" -#include "input.h" -#include "memory.h" -#include "text1.h" -#include "text2.h" -#include "pokemon.h" -#include "exclusive_pokemon.h" -#include "friend_area.h" -#include "code_800D090.h" -#include "menu_input.h" -#include "code_8021774.h" -#include "code_80118A4.h" - -struct unkStruct_203B28C -{ - struct MenuInputStructSub unk0; - u8 friendArea; - u8 unkD; - s16 unkE[0x10]; - u32 unk30[0x10]; - s32 unk70; - s32 unk74; - struct UnkTextStruct2 *unk78; - struct UnkTextStruct2 unk7C[4]; - u8 unkDC[4]; -}; -extern struct unkStruct_203B28C *gUnknown_203B28C; - -struct unkStruct_203B280 -{ - u8 unk0[NUM_FRIEND_AREAS]; - u32 unk3C; - struct MenuInputStruct unk40; - s32 unk74; - struct UnkTextStruct2 *unk78; - struct UnkTextStruct2 unk7C[4]; - u8 unkDC[4]; -}; -extern struct unkStruct_203B280 *gUnknown_203B280; - - - -extern struct UnkTextStruct2 gUnknown_80DC4BC; -extern struct UnkTextStruct2 gUnknown_80DC4D8; -s16 GetBaseSpeciesNoUnown(s16 index); -s32 sub_8021B58(s16 param_1); - -extern u8 gUnknown_80DC518[]; -extern u8 gUnknown_80DC4F0[]; -extern u8 *gUnknown_80D49BC[]; -extern u8 gUnknown_80DC524[]; -extern void sub_8008C54(u32); -extern void sub_8092578(u8 *buffer, u8 index, u8 r2); - -extern void sub_8021878(void); -extern void sub_8021894(void); -extern void sub_8021A60(void); -void sub_8021820(void); -u8 sub_80023E4(u32); - -s32 sub_8021664(void) -{ - s32 index; - s32 counter; - - counter = 0; - switch(gUnknown_203B280->unk3C) - { - case 0: - for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) - { - gUnknown_203B280->unk0[counter] = index; - counter++; - } - break; - case 1: - for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) - { - if(gFriendAreas[index]) - { - gUnknown_203B280->unk0[counter] = index; - counter++; - } - } - break; - case 2: - for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) - { - if (gFriendAreas[index] == 0) { - switch(GetFriendAreaUnlockCondition(index)) - { - case UNLOCK_SHOP_STORY: - gUnknown_203B280->unk0[counter] = index; - counter++; - break; - case UNLOCK_SHOP_POST_GAME: - if(sub_80023E4(6) != 0) { - gUnknown_203B280->unk0[counter] = index; - counter++; - } - break; - } - } - } - break; - } - return counter; -} - - -u8 sub_8021700(u32 mode) -{ - s32 index; - - switch(mode) - { - case 0: - return FALSE; - case 1: - for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) - { - if (gFriendAreas[index] != 0) { - return FALSE; - } - } - break; - case 2: - for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) - { - if (gFriendAreas[index] == 0) { - switch(GetFriendAreaUnlockCondition(index)) - { - case UNLOCK_SHOP_STORY: - return FALSE; - case UNLOCK_SHOP_POST_GAME: - if(sub_80023E4(6) != 0) { - return FALSE; - } - break; - } - } - } - break; - } - return TRUE; -} - - -bool8 sub_8021774(u8 friendArea, u8 param_2, s32 param_3) -{ - gUnknown_203B28C = MemoryAlloc(sizeof(struct unkStruct_203B28C), 8); - gUnknown_203B28C->friendArea = friendArea; - gUnknown_203B28C->unkD = param_2; - sub_801317C(&gUnknown_203B28C->unk0); - sub_8021A60(); - gUnknown_203B28C->unk74 = param_3; - gUnknown_203B28C->unk78 = &gUnknown_203B28C->unk7C[param_3]; - sub_8006518(gUnknown_203B28C->unk7C); - gUnknown_203B28C->unk7C[gUnknown_203B28C->unk74] = gUnknown_80DC4D8; - sub_8021820(); - return TRUE; -} - -u32 sub_80217EC(void) -{ - switch(sub_8012A64(&gUnknown_203B28C->unk0, gUnknown_203B28C->unk74)) - { - case 2: - PlayMenuSoundEffect(1); - return 2; - case 1: - PlayMenuSoundEffect(0); - return 3; - default: - return 0; - } -} - -void sub_8021820(void) -{ - sub_8021878(); - sub_8021894(); -} - -void sub_8021830(void) -{ - if(gUnknown_203B28C) - { - gUnknown_203B28C->unk7C[gUnknown_203B28C->unk74] = gUnknown_80DC4BC; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B28C->unk7C, 1, 1); - MemoryFree(gUnknown_203B28C); - gUnknown_203B28C = NULL; - } -} - -void sub_8021878(void) -{ - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B28C->unk7C, 1, 1); -} - -void sub_8021894(void) -{ - u8 *string; - s32 iVar1; - u32 y; - u32 x; - s32 index; - u8 buffer1 [256]; - u8 buffer2 [100]; - - sub_80073B8(gUnknown_203B28C->unk74); - sub_8092578(buffer1,gUnknown_203B28C->friendArea,0); - xxx_call_draw_string(0x14,0,buffer1,gUnknown_203B28C->unk74,0); - string = GetFriendAreaDescription(gUnknown_203B28C->friendArea); - xxx_call_draw_string(10,0x14,string,gUnknown_203B28C->unk74,0); - if (gUnknown_203B28C->unkD != 0) { - xxx_call_draw_string(0x20,0x3c,gUnknown_80DC4F0,gUnknown_203B28C->unk74,0); - } - else { - xxx_call_draw_string(0x20,0x3c,gUnknown_80DC518,gUnknown_203B28C->unk74,0); // Inhabitants - } - sub_800792C(gUnknown_203B28C->unk74,4,0x40,0x14,4); - if (gUnknown_203B28C->unkD != 0) { - sub_800792C(gUnknown_203B28C->unk74,0xb8,0x40,0x14,4); - } - else { - sub_800792C(gUnknown_203B28C->unk74,0x5e,0x40,0x6e,4); - } - sub_800792C(gUnknown_203B28C->unk74,4,0x82,200,4); - sub_8007A78(gUnknown_203B28C->unk74,3,0x40,0x43,4); - sub_8007A78(gUnknown_203B28C->unk74,0xcc,0x40,0x43,4); - for(index = 0; index < gUnknown_203B28C->unk70; index++) - { - iVar1 = index % 3; - x = iVar1 * 0x3f + 7; - iVar1 = index / 3; - y = iVar1 * 0xc + 0x47; - sub_808D930(buffer2, gUnknown_203B28C->unkE[index]); - switch(gUnknown_203B28C->unk30[index]) - { - case 0: - xxx_call_draw_string(x,y,*gUnknown_80D49BC,gUnknown_203B28C->unk74,0); // ??? - break; - case 1: - xxx_call_draw_string(x,y,buffer2,gUnknown_203B28C->unk74,0); // %s - break; - case 2: - sprintfStatic(buffer1,gUnknown_80DC524,buffer2); // {CYAN} %s {END_COLOR} - xxx_call_draw_string(x,y,buffer1,gUnknown_203B28C->unk74,0); - break; - } - } - sub_80073E0(gUnknown_203B28C->unk74); -} - -// https://decomp.me/scratch/P2BiC -// 99.40% matching (Seth) -#ifndef NONMATCHING -NAKED -void sub_8021A60(void) -{ - asm_unified( - "\tpush {r4-r7,lr}\n" - "\tldr r2, _08021B4C\n" - "\tldr r1, [r2]\n" - "\tmovs r0, 0\n" - "\tstr r0, [r1, 0x70]\n" - "\tmovs r6, 0\n" - "\tadds r4, r2, 0\n" - "\tmovs r3, 0\n" -"_08021A70:\n" - "\tldr r1, [r4]\n" - "\tlsls r2, r6, 1\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0xE\n" - "\tadds r0, r2\n" - "\tstrh r3, [r0]\n" - "\tlsls r0, r6, 2\n" - "\tadds r1, 0x30\n" - "\tadds r1, r0\n" - "\tstr r3, [r1]\n" - "\tadds r6, 0x1\n" - "\tcmp r6, 0xF\n" - "\tble _08021A70\n" - "\tmovs r6, 0\n" - "\tldr r7, _08021B4C\n" -"_08021A8E:\n" - "\tlsls r0, r6, 16\n" - "\tasrs r5, r0, 16\n" - "\tldr r4, [r7]\n" - "\tadds r0, r5, 0\n" - "\tbl GetFriendArea\n" - "\tldrb r1, [r4, 0xC]\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r1, r0\n" - "\tbne _08021AC4\n" - "\tadds r0, r5, 0\n" - "\tbl GetBaseSpeciesNoUnown\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r5, r0\n" - "\tbne _08021AC4\n" - "\tldr r3, [r7]\n" - "\tldr r1, [r3, 0x70]\n" - "\tlsls r2, r1, 1\n" - "\tadds r0, r3, 0\n" - "\tadds r0, 0xE\n" - "\tadds r0, r2\n" - "\tstrh r5, [r0]\n" - "\tadds r1, 0x1\n" - "\tstr r1, [r3, 0x70]\n" -"_08021AC4:\n" - "\tadds r6, 0x1\n" - "\tldr r0, _08021B50\n" - "\tcmp r6, r0\n" - "\tble _08021A8E\n" - "\tmovs r6, 0\n" -"_08021ACE:\n" - "\tlsls r0, r6, 16\n" - "\tasrs r4, r0, 16\n" - "\tadds r0, r4, 0\n" - "\tbl sub_8098134\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _08021AFC\n" - "\tadds r0, r4, 0\n" - "\tbl sub_8021B58\n" - "\tadds r2, r0, 0\n" - "\tmovs r0, 0x1\n" - "\tnegs r0, r0\n" - "\tcmp r2, r0\n" - "\tbeq _08021AFC\n" - "\tldr r0, _08021B4C\n" - "\tldr r1, [r0]\n" - "\tlsls r0, r2, 2\n" - "\tadds r1, 0x30\n" - "\tadds r1, r0\n" - "\tmovs r0, 0x1\n" - "\tstr r0, [r1]\n" -"_08021AFC:\n" - "\tadds r6, 0x1\n" - "\tldr r0, _08021B50\n" - "\tcmp r6, r0\n" - "\tble _08021ACE\n" - "\tmovs r6, 0\n" - "\tldr r4, _08021B54\n" -"_08021B08:\n" - "\tmovs r0, 0x58\n" - "\tadds r1, r6, 0\n" - "\tmuls r1, r0\n" - "\tldr r0, [r4]\n" - "\tadds r2, r0, r1\n" - "\tldrb r1, [r2]\n" - "\tmovs r0, 0x1\n" - "\tands r0, r1\n" - "\tcmp r0, 0\n" - "\tbeq _08021B3C\n" - "\tmovs r1, 0x8\n" - "\tldrsh r0, [r2, r1]\n" - "\tbl sub_8021B58\n" - "\tadds r2, r0, 0\n" - "\tmovs r0, 0x1\n" - "\tnegs r0, r0\n" - "\tcmp r2, r0\n" - "\tbeq _08021B3C\n" - "\tldr r0, _08021B4C\n" - "\tldr r1, [r0]\n" - "\tlsls r0, r2, 2\n" - "\tadds r1, 0x30\n" - "\tadds r1, r0\n" - "\tmovs r0, 0x2\n" - "\tstr r0, [r1]\n" -"_08021B3C:\n" - "\tadds r6, 0x1\n" - "\tmovs r0, 0xCE\n" - "\tlsls r0, 1\n" - "\tcmp r6, r0\n" - "\tble _08021B08\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_08021B4C: .4byte gUnknown_203B28C\n" -"_08021B50: .4byte 0x000001a7\n" -"_08021B54: .4byte gRecruitedPokemonRef"); - -} -#else -void sub_8021A60(void) -{ - s32 sVar4; - s32 iVar6; - s32 index; - struct PokemonStruct *pokeStruct; - - gUnknown_203B28C->unk70 = 0; - for(index = 0; index < 0x10; index++) - { - gUnknown_203B28C->unkE[index] = 0; - gUnknown_203B28C->unk30[index] = 0; - } - for(index = 0; index < 0x1A8; index++) - { - if ((gUnknown_203B28C->friendArea == GetFriendArea((s16)index)) && - ((s16)index == GetBaseSpeciesNoUnown(index))) { - iVar6 = gUnknown_203B28C->unk70; - gUnknown_203B28C->unkE[iVar6] = index; - gUnknown_203B28C->unk70 = iVar6 + 1; - } - } - for(index = 0; index < 0x1A8; index++) - { - if ((sub_8098134(index) != '\0') && (sVar4 = sub_8021B58(index), sVar4 != -1)) { - gUnknown_203B28C->unk30[sVar4] = 1; - } - } - for(index = 0; index < 0x19d; index++) - { - pokeStruct = &gRecruitedPokemonRef->pokemon[index]; - if (((*(u8 *)&pokeStruct->unk0 & 1) != 0) && - (sVar4 = sub_8021B58(pokeStruct->speciesNum), sVar4 != -1)) { - gUnknown_203B28C->unk30[sVar4] = 2; - } - } - return; -} -#endif - -s32 sub_8021B58(s16 species) -{ - s32 baseSpecies; - int index; - - baseSpecies = GetBaseSpeciesNoUnown(species); - for(index = 0; index < gUnknown_203B28C->unk70; index++) - { - if (baseSpecies == gUnknown_203B28C->unkE[index]) return index; - } - return -1; -} - diff --git a/src/code_8021774_pre.c b/src/code_8021774_pre.c deleted file mode 100644 index d0e47fffa..000000000 --- a/src/code_8021774_pre.c +++ /dev/null @@ -1,136 +0,0 @@ -#include "global.h" -#include "code_80118A4.h" -#include "code_801EE10_mid.h" -#include "code_8021774_pre.h" -#include "constants/friend_area.h" -#include "constants/input.h" -#include "friend_area.h" -#include "input.h" -#include "memory.h" -#include "text1.h" -#include "text2.h" -#include "item.h" -#include "team_inventory.h" -#include "menu_input.h" - -// size: 0xE0 -struct unkStruct_203B280 -{ - u8 unk0[NUM_FRIEND_AREAS]; - u32 unk3C; - struct MenuInputStruct unk40; - s32 unk74; - struct UnkTextStruct2 *unk78; - struct UnkTextStruct2 unk7C[4]; - u8 unkDC[4]; -}; - -extern struct unkStruct_203B280 *gUnknown_203B280; -extern u32 gUnknown_203B284; -extern u16 gUnknown_203B288; -extern u16 gUnknown_203B28A; - -extern struct UnkTextStruct2 gUnknown_80DC47C; -extern struct UnkTextStruct2 gUnknown_80DC464; - -u8 sub_8021700(u32 mode); -s32 sub_8021664(void); -extern void sub_8021410(void); - -bool8 sub_80211AC(u32 param_1, u32 param_2) -{ - if(sub_8021700(param_1)) - { - return FALSE; - } - else { - gUnknown_203B280 = MemoryAlloc(sizeof(struct unkStruct_203B280), 8); - gUnknown_203B280->unk3C = param_1; - gUnknown_203B280->unk74 = param_2; - gUnknown_203B280->unk78 = &gUnknown_203B280->unk7C[gUnknown_203B280->unk74]; - sub_8006518(gUnknown_203B280->unk7C); - gUnknown_203B280->unk7C[gUnknown_203B280->unk74] = gUnknown_80DC47C; - gUnknown_203B280->unk78->unk14 = gUnknown_203B280->unkDC; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B280->unk7C, 1, 1); - sub_8013818(&gUnknown_203B280->unk40, sub_8021664(), 10, param_2); - if(gUnknown_203B284 == gUnknown_203B280->unk3C) - { - gUnknown_203B280->unk40.menuIndex = gUnknown_203B288; - gUnknown_203B280->unk40.unk1E = gUnknown_203B28A; - sub_8013984(&gUnknown_203B280->unk40); - } - sub_8021410(); - sub_8021494(); - return TRUE; - } -} - -u32 sub_8021274(bool8 param_1) -{ - if (param_1 == 0) { - sub_8013660(&gUnknown_203B280->unk40); - return 0; - } - switch(GetKeyPress(&gUnknown_203B280->unk40)) - { - case INPUT_B_BUTTON: - PlayMenuSoundEffect(1); - return 2; - case INPUT_A_BUTTON: - if ((gUnknown_203B280->unk3C == 2) && (GetFriendAreaPrice(sub_802132C()) > gTeamInventoryRef->teamMoney)) - { - PlayMenuSoundEffect(2); - } - else - { - PlayMenuSoundEffect(0); - } - return 3; - case INPUT_START_BUTTON: - PlayMenuSoundEffect(4); - return 4; - default: - if (sub_80138B8(&gUnknown_203B280->unk40, 1) != 0) { - sub_8021410(); - sub_8021494(); - return 1; - } - else { - return 0; - } - } -} - -u8 sub_802132C(void) -{ - return gUnknown_203B280->unk0[gUnknown_203B280->unk40.unk1E * gUnknown_203B280->unk40.unk1C + gUnknown_203B280->unk40.menuIndex]; -} - -void sub_8021354(bool8 param_1) -{ - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B280->unk7C,0,0); - gUnknown_203B280->unk40.unk22 = sub_8021664(); - sub_8013984(&gUnknown_203B280->unk40); - sub_8021410(); - sub_8021494(); - if (param_1) { - AddMenuCursorSprite(&gUnknown_203B280->unk40); - } -} - -void sub_80213A0(void) -{ - if(gUnknown_203B280) - { - gUnknown_203B284 = gUnknown_203B280->unk3C; - gUnknown_203B288 = gUnknown_203B280->unk40.menuIndex; - gUnknown_203B28A = gUnknown_203B280->unk40.unk1E; - gUnknown_203B280->unk7C[gUnknown_203B280->unk74] = gUnknown_80DC464; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B280->unk7C, 1, 1); - MemoryFree(gUnknown_203B280); - gUnknown_203B280 = NULL; - } -} diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index 7301385f0..514231ee6 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -390,7 +390,6 @@ extern u8 JirachiFriendAreaSearch(void); extern u8 sub_80860A8(u32); extern void sub_8049ED4(); -extern void sub_8092578(u8 *buffer, u8 index, u8 r2); extern void sub_8052D44(s16 *, struct Entity *, struct Entity *); extern void SetMessageArgument(u8 *, struct Entity *, u32); extern struct Entity *GetLeader(); @@ -3736,7 +3735,7 @@ void JirachiWish(void) PlaySoundEffect(0xd4); LeaderEntity = GetLeader(); SetMessageArgument(gAvailablePokemonNames,LeaderEntity,0); - sub_8092578(gUnknown_202DE58,friendArea,0); + sub_8092578(gUnknown_202DE58,friendArea,FALSE); // Obtained the friend area! DisplayDungeonDialogue(&gUnknown_8105B68); } diff --git a/src/dungeon_2_1.c b/src/dungeon_2_1.c index 1c641a0c4..3e014030e 100644 --- a/src/dungeon_2_1.c +++ b/src/dungeon_2_1.c @@ -12,6 +12,38 @@ extern u8 *gUnknown_8108084[]; s32 sub_8091E94(s32 a1, s32 a2, s32 a3); // items.c + +void sub_8090888(u8 *param_1, u8 *param_2) +{ + s32 iVar3; + + iVar3 = 0; + + if(*param_1 != 0) + { + do { + if (*param_1 == 0xA) { + iVar3++; + } + param_1++; + } while (*param_1 != 0); + } + + while (iVar3 % 3) { + *param_1 = 0xA; + param_1++; + iVar3++; + } + + while (*param_2 != 0) { + *param_1 = *param_2; + param_1++; + param_2++; + } + + *param_1 = 0; +} + u32 sub_80908D8(struct DungeonLocation *dungeon) { if ((dungeon->id < DUNGEON_OUT_ON_RESCUE) && (dungeon->floor < gDungeonFloorCount[dungeon->id])) { diff --git a/src/friend_area.c b/src/friend_area.c index 4911e6375..8113ddcbd 100644 --- a/src/friend_area.c +++ b/src/friend_area.c @@ -515,11 +515,11 @@ void sub_8092558(u8 *buffer, u8 index) sprintfStatic(buffer, &gUnknown_81098A4, gFriendAreaNames[index]); } -void sub_8092578(u8 *buffer, u8 index, u8 r2) +void sub_8092578(u8 *buffer, u8 index, bool8 printPrice) { // I think this is when we buy the friend area from wigglytuff u8 priceBuffer[0x14]; - if(r2) + if(printPrice) { sub_8090FEC(gFriendAreaSettings[index].price, priceBuffer, 1); sprintfStatic(buffer, &gUnknown_81098AC, gFriendAreaNames[index], 96, priceBuffer); @@ -574,7 +574,7 @@ void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u param_2->unk8 = iVar4; param_2->hasFriendArea = gFriendAreas[counter]; - if (param_2->hasFriendArea != 0) { + if (param_2->hasFriendArea) { param_2->unk2 = 0; param_2->numPokemon = gFriendAreaSettings[counter].num_pokemon; diff --git a/src/wigglytuff_shop.c b/src/wigglytuff_shop.c index 1c9a1e7cb..42f09add8 100644 --- a/src/wigglytuff_shop.c +++ b/src/wigglytuff_shop.c @@ -1,6 +1,12 @@ #include "global.h" #include "constants/friend_area.h" #include "pokemon.h" +#include "constants/input.h" +#include "file_system.h" +#include "menu.h" +#include "pokemon.h" +#include "pokemon_3.h" +#include "input.h" #include "team_inventory.h" #include "text1.h" #include "text2.h" @@ -10,17 +16,44 @@ #include "wigglytuff_shop.h" #include "felicity_bank.h" #include "code_80130A8.h" -#include "code_8021774_pre.h" #include "code_801EE10_mid.h" #include "code_8021774.h" #include "code_80118A4.h" +#include "code_800D090.h" +#include "event_flag.h" -extern struct UnkTextStruct2 gUnknown_80DC534; -extern struct UnkTextStruct2 gUnknown_80DC564; -extern struct UnkTextStruct2 gUnknown_80DC54C; -extern struct UnkTextStruct2 gUnknown_80DC534; +struct unkStruct_203B280 +{ + /* 0x0 */ u8 friendAreas[NUM_FRIEND_AREAS]; + /* 0x3C */ u32 mode; + struct MenuInputStruct unk40; + s32 unk74; + struct UnkTextStruct2 *unk78; + struct UnkTextStruct2 unk7C[4]; + u8 unkDC[4]; +}; +EWRAM_DATA_2 struct unkStruct_203B280 *gUnknown_203B280 = {0}; +EWRAM_DATA_2 u32 gUnknown_203B284 = {0}; +EWRAM_DATA_2 u16 gUnknown_203B288 = {0}; +EWRAM_DATA_2 u16 gUnknown_203B28A = {0}; + +struct unkStruct_203B28C +{ + struct MenuInputStructSub unk0; + /* 0xC */ u8 friendArea; + bool8 unkD; + s16 unkE[0x10]; + u32 unk30[0x10]; + /* 0x70 */ s32 numPokemoninFriendArea; + s32 unk74; + struct UnkTextStruct2 *unk78; + struct UnkTextStruct2 unk7C[4]; + u8 unkDC[4]; +}; +EWRAM_DATA_2 struct unkStruct_203B28C *gUnknown_203B28C = {0}; EWRAM_DATA_2 struct WigglytuffShop *gWigglytuffShop = {0}; +extern u8 *gFriendAreas; extern u8 gUnknown_202E628[]; extern u32 gUnknown_202DE30[2]; @@ -35,13 +68,31 @@ extern const u8 *gUnknown_80D4928[]; extern const u8 *gUnknown_80D4934[]; extern const u8 *gUnknown_80D4970[]; extern const u8 *gUnknown_80D4978[]; +extern struct UnkTextStruct2 gUnknown_80DC464; +extern struct UnkTextStruct2 gUnknown_80DC47C; +extern struct UnkTextStruct2 gUnknown_80DC4BC; +extern struct UnkTextStruct2 gUnknown_80DC4D8; +extern struct UnkTextStruct2 gUnknown_80DC534; +extern struct UnkTextStruct2 gUnknown_80DC54C; +extern struct UnkTextStruct2 gUnknown_80DC564; + +extern u8 *gUnknown_80D49BC[]; +extern u8 gUnknown_80DC4A4[]; +extern u8 gUnknown_80DC494[]; +extern u8 gUnknown_80DC4AC[]; +extern u8 gUnknown_80DC4F0[]; +extern u8 gUnknown_80DC518[]; +extern u8 gUnknown_80DC524[]; u8 sub_8021700(u32); void sub_8092578(u8 *buffer, u8 index, u8 r2); +extern void DrawTeamMoneyBox(u32); +extern void sub_803AA34(); +extern u8 sub_803ABC8(void); +extern u8 sub_802132C(void); extern void sub_8022380(void); bool8 sub_8023144(s32 param_1, s32 index, struct UnkTextStruct2_sub *sub, u32 param_4); void sub_8023354(u8 param_1); -extern bool8 sub_80023E4(u32); extern void CreateWigglytuffConfirmFriendAreaMenu(void); extern u8 sub_8099B94(void); extern void sub_8099AFC(u32, u32, u32); @@ -65,6 +116,609 @@ void SetWigglytuffState(s32); void sub_8021D5C(void); void UpdateWigglytuffDialogue(void); +extern void sub_8008C54(u32); +//extern void sub_80073B8(u32); +//extern void sub_80073E0(u32); +//void sub_800792C(u32, u32, u32, u32, u32); +//void sub_8007A78(u32, u32, u32, u32, u32); + +void sub_8021878(void); +void sub_8021894(void); +void sub_8021820(void); +void sub_8021A60(void); +s32 sub_8021664(void); +void sub_8021410(void); + +extern void PlayMenuSoundEffect(u32); + +bool8 sub_80211AC(u32 mode, u32 param_2) +{ + if(sub_8021700(mode)) + { + return FALSE; + } + else { + gUnknown_203B280 = MemoryAlloc(sizeof(struct unkStruct_203B280), 8); + gUnknown_203B280->mode = mode; + gUnknown_203B280->unk74 = param_2; + gUnknown_203B280->unk78 = &gUnknown_203B280->unk7C[gUnknown_203B280->unk74]; + sub_8006518(gUnknown_203B280->unk7C); + gUnknown_203B280->unk7C[gUnknown_203B280->unk74] = gUnknown_80DC47C; + gUnknown_203B280->unk78->unk14 = gUnknown_203B280->unkDC; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B280->unk7C, 1, 1); + sub_8013818(&gUnknown_203B280->unk40, sub_8021664(), 10, param_2); + if(gUnknown_203B284 == gUnknown_203B280->mode) + { + gUnknown_203B280->unk40.menuIndex = gUnknown_203B288; + gUnknown_203B280->unk40.unk1E = gUnknown_203B28A; + sub_8013984(&gUnknown_203B280->unk40); + } + sub_8021410(); + sub_8021494(); + return TRUE; + } +} + +u32 sub_8021274(u8 param_1) +{ + if (param_1 == 0) { + sub_8013660(&gUnknown_203B280->unk40); + return 0; + } + switch(GetKeyPress(&gUnknown_203B280->unk40)) + { + case INPUT_B_BUTTON: + PlayMenuSoundEffect(1); + return 2; + case INPUT_A_BUTTON: + if ((gUnknown_203B280->mode == 2) && (GetFriendAreaPrice(sub_802132C()) > gTeamInventoryRef->teamMoney)) + { + PlayMenuSoundEffect(2); + } + else + { + PlayMenuSoundEffect(0); + } + return 3; + case INPUT_START_BUTTON: + PlayMenuSoundEffect(4); + return 4; + default: + if (sub_80138B8(&gUnknown_203B280->unk40, 1) != 0) { + sub_8021410(); + sub_8021494(); + return 1; + } + else { + return 0; + } + } +} + +u8 sub_802132C(void) +{ + return gUnknown_203B280->friendAreas[gUnknown_203B280->unk40.unk1E * gUnknown_203B280->unk40.unk1C + gUnknown_203B280->unk40.menuIndex]; +} + +void sub_8021354(bool8 param_1) +{ + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B280->unk7C,0,0); + gUnknown_203B280->unk40.unk22 = sub_8021664(); + sub_8013984(&gUnknown_203B280->unk40); + sub_8021410(); + sub_8021494(); + if (param_1) { + AddMenuCursorSprite(&gUnknown_203B280->unk40); + } +} + +void sub_80213A0(void) +{ + if(gUnknown_203B280) + { + gUnknown_203B284 = gUnknown_203B280->mode; + gUnknown_203B288 = gUnknown_203B280->unk40.menuIndex; + gUnknown_203B28A = gUnknown_203B280->unk40.unk1E; + gUnknown_203B280->unk7C[gUnknown_203B280->unk74] = gUnknown_80DC464; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B280->unk7C, 1, 1); + MemoryFree(gUnknown_203B280); + gUnknown_203B280 = NULL; + } +} + +NAKED +void sub_8021410(void) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tldr r4, _08021490\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xDC\n" + "\tmovs r2, 0\n" + "\tmovs r1, 0x1\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xDD\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xDE\n" + "\tmovs r1, 0xC\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xDF\n" + "\tstrb r2, [r0]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x7C\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x5A\n" + "\tmovs r1, 0\n" + "\tldrsh r0, [r0, r1]\n" + "\tmovs r1, 0xC\n" + "\tbl sub_80095E4\n" + "\tadds r0, 0x2\n" + "\tlsls r0, 16\n" + "\tldr r2, [r4]\n" + "\tldr r3, [r2, 0x74]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r1, r2, r1\n" + "\tadds r1, 0x8A\n" + "\tasrs r3, r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r1, [r2, 0x74]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tlsls r0, 3\n" + "\tadds r2, r0\n" + "\tadds r3, 0x2\n" + "\tadds r2, 0x8C\n" + "\tstrh r3, [r2]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x7C\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_08021490: .4byte gUnknown_203B280"); + +} + +void sub_8021494(void) +{ + u8 friendAreaIndex; + s32 index; + u8 buffer1 [80]; + u8 buffer2 [80]; + + sub_8008C54(gUnknown_203B280->unk74); + sub_80073B8(gUnknown_203B280->unk74); + xxx_call_draw_string(10,0,gUnknown_80DC494,gUnknown_203B280->unk74,0); // Friend Areas + sub_8012BC4(gUnknown_203B280->unkDC[2] * 8 + 4,0,(gUnknown_203B280->unk40).unk1E + 1,1,7,gUnknown_203B280->unk74); + + for(index = 0; index < (gUnknown_203B280->unk40).unk1A; index++) + { + friendAreaIndex = gUnknown_203B280->friendAreas[(gUnknown_203B280->unk40).unk1E * (gUnknown_203B280->unk40).unk1C + index]; + if (gUnknown_203B280->mode == 2) { + sub_8092578(buffer1,friendAreaIndex,TRUE); + + if (GetFriendAreaPrice(friendAreaIndex) <= gTeamInventoryRef->teamMoney) { + xxx_call_draw_string(8,sub_8013800(&gUnknown_203B280->unk40,index),buffer1,gUnknown_203B280->unk74,0); + } + else { + sprintfStatic(buffer2,gUnknown_80DC4A4,buffer1); // {RED} %s {END} + xxx_call_draw_string(8,sub_8013800(&gUnknown_203B280->unk40,index),buffer2,gUnknown_203B280->unk74,0); + } + } + else if (gUnknown_203B280->mode == 0) { + if (gFriendAreas[friendAreaIndex] == 1) { + xxx_call_draw_string(8,sub_8013800(&gUnknown_203B280->unk40,index),GetFriendAreaName(friendAreaIndex),gUnknown_203B280->unk74,0); + } + else + { + sprintfStatic(buffer2,gUnknown_80DC4AC,GetFriendAreaName(friendAreaIndex)); // {GREEN} %s {END} + xxx_call_draw_string(8,sub_8013800(&gUnknown_203B280->unk40,index),buffer2,gUnknown_203B280->unk74,0); + } + } + else { + xxx_call_draw_string(8,sub_8013800(&gUnknown_203B280->unk40,index),GetFriendAreaName(friendAreaIndex),gUnknown_203B280->unk74,0); + } + } + sub_80073E0(gUnknown_203B280->unk74); +} + +s32 sub_8021664(void) +{ + s32 index; + s32 counter; + + counter = 0; + switch(gUnknown_203B280->mode) + { + case 0: + for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) + { + gUnknown_203B280->friendAreas[counter] = index; + counter++; + } + break; + case 1: + for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) + { + if(gFriendAreas[index]) + { + gUnknown_203B280->friendAreas[counter] = index; + counter++; + } + } + break; + case 2: + for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) + { + if (gFriendAreas[index] == 0) { + switch(GetFriendAreaUnlockCondition(index)) + { + case UNLOCK_SHOP_STORY: + gUnknown_203B280->friendAreas[counter] = index; + counter++; + break; + case UNLOCK_SHOP_POST_GAME: + if(sub_80023E4(6) != 0) { + gUnknown_203B280->friendAreas[counter] = index; + counter++; + } + break; + } + } + } + break; + } + return counter; +} + + +u8 sub_8021700(u32 mode) +{ + s32 index; + + switch(mode) + { + case 0: + return FALSE; + case 1: + for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) + { + if (gFriendAreas[index] != 0) { + return FALSE; + } + } + break; + case 2: + for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) + { + if (gFriendAreas[index] == 0) { + switch(GetFriendAreaUnlockCondition(index)) + { + case UNLOCK_SHOP_STORY: + return FALSE; + case UNLOCK_SHOP_POST_GAME: + if(sub_80023E4(6) != 0) { + return FALSE; + } + break; + } + } + } + break; + } + return TRUE; +} + +bool8 sub_8021774(u8 friendArea, bool8 param_2, s32 param_3) +{ + gUnknown_203B28C = MemoryAlloc(sizeof(struct unkStruct_203B28C), 8); + gUnknown_203B28C->friendArea = friendArea; + gUnknown_203B28C->unkD = param_2; + sub_801317C(&gUnknown_203B28C->unk0); + sub_8021A60(); + gUnknown_203B28C->unk74 = param_3; + gUnknown_203B28C->unk78 = &gUnknown_203B28C->unk7C[param_3]; + sub_8006518(gUnknown_203B28C->unk7C); + gUnknown_203B28C->unk7C[gUnknown_203B28C->unk74] = gUnknown_80DC4D8; + sub_8021820(); + return TRUE; +} + +u32 sub_80217EC(void) +{ + switch(sub_8012A64(&gUnknown_203B28C->unk0, gUnknown_203B28C->unk74)) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + PlayMenuSoundEffect(0); + return 3; + default: + return 0; + } +} + +void sub_8021820(void) +{ + sub_8021878(); + sub_8021894(); +} + +void sub_8021830(void) +{ + if(gUnknown_203B28C) + { + gUnknown_203B28C->unk7C[gUnknown_203B28C->unk74] = gUnknown_80DC4BC; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B28C->unk7C, 1, 1); + MemoryFree(gUnknown_203B28C); + gUnknown_203B28C = NULL; + } +} + +void sub_8021878(void) +{ + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B28C->unk7C, 1, 1); +} + +void sub_8021894(void) +{ + u8 *string; + u32 y; + u32 x; + s32 index; + u8 buffer1 [256]; + u8 buffer2 [100]; + + sub_80073B8(gUnknown_203B28C->unk74); + sub_8092578(buffer1,gUnknown_203B28C->friendArea,FALSE); + xxx_call_draw_string(0x14,0,buffer1,gUnknown_203B28C->unk74,0); + string = GetFriendAreaDescription(gUnknown_203B28C->friendArea); + xxx_call_draw_string(10,0x14,string,gUnknown_203B28C->unk74,0); + if (gUnknown_203B28C->unkD != 0) { + xxx_call_draw_string(0x20,0x3c,gUnknown_80DC4F0,gUnknown_203B28C->unk74,0); + } + else { + xxx_call_draw_string(0x20,0x3c,gUnknown_80DC518,gUnknown_203B28C->unk74,0); // Inhabitants + } + sub_800792C(gUnknown_203B28C->unk74,4,0x40,0x14,4); + if (gUnknown_203B28C->unkD != 0) { + sub_800792C(gUnknown_203B28C->unk74,0xb8,0x40,0x14,4); + } + else { + sub_800792C(gUnknown_203B28C->unk74,0x5e,0x40,0x6e,4); + } + sub_800792C(gUnknown_203B28C->unk74,4,0x82,200,4); + sub_8007A78(gUnknown_203B28C->unk74,3,0x40,0x43,4); + sub_8007A78(gUnknown_203B28C->unk74,0xcc,0x40,0x43,4); + for(index = 0; index < gUnknown_203B28C->numPokemoninFriendArea; index++) + { + x = (index % 3) * 63 + 7; + y = (index / 3) * 12 + 0x47; + sub_808D930(buffer2, gUnknown_203B28C->unkE[index]); + switch(gUnknown_203B28C->unk30[index]) + { + case 0: // Not recruited/seen + xxx_call_draw_string(x,y,*gUnknown_80D49BC,gUnknown_203B28C->unk74,0); // ??? + break; + case 1: // Seen but not recruited + xxx_call_draw_string(x,y,buffer2,gUnknown_203B28C->unk74,0); // %s + break; + case 2: + sprintfStatic(buffer1,gUnknown_80DC524,buffer2); // {CYAN} %s {END_COLOR} + xxx_call_draw_string(x,y,buffer1,gUnknown_203B28C->unk74,0); + break; + } + } + sub_80073E0(gUnknown_203B28C->unk74); +} + +// https://decomp.me/scratch/P2BiC +// 99.40% matching (Seth) +#ifndef NONMATCHING +NAKED +void sub_8021A60(void) +{ + asm_unified( + "\tpush {r4-r7,lr}\n" + "\tldr r2, _08021B4C\n" + "\tldr r1, [r2]\n" + "\tmovs r0, 0\n" + "\tstr r0, [r1, 0x70]\n" + "\tmovs r6, 0\n" + "\tadds r4, r2, 0\n" + "\tmovs r3, 0\n" +"_08021A70:\n" + "\tldr r1, [r4]\n" + "\tlsls r2, r6, 1\n" + "\tadds r0, r1, 0\n" + "\tadds r0, 0xE\n" + "\tadds r0, r2\n" + "\tstrh r3, [r0]\n" + "\tlsls r0, r6, 2\n" + "\tadds r1, 0x30\n" + "\tadds r1, r0\n" + "\tstr r3, [r1]\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0xF\n" + "\tble _08021A70\n" + "\tmovs r6, 0\n" + "\tldr r7, _08021B4C\n" +"_08021A8E:\n" + "\tlsls r0, r6, 16\n" + "\tasrs r5, r0, 16\n" + "\tldr r4, [r7]\n" + "\tadds r0, r5, 0\n" + "\tbl GetFriendArea\n" + "\tldrb r1, [r4, 0xC]\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r1, r0\n" + "\tbne _08021AC4\n" + "\tadds r0, r5, 0\n" + "\tbl GetBaseSpeciesNoUnown\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r5, r0\n" + "\tbne _08021AC4\n" + "\tldr r3, [r7]\n" + "\tldr r1, [r3, 0x70]\n" + "\tlsls r2, r1, 1\n" + "\tadds r0, r3, 0\n" + "\tadds r0, 0xE\n" + "\tadds r0, r2\n" + "\tstrh r5, [r0]\n" + "\tadds r1, 0x1\n" + "\tstr r1, [r3, 0x70]\n" +"_08021AC4:\n" + "\tadds r6, 0x1\n" + "\tldr r0, _08021B50\n" + "\tcmp r6, r0\n" + "\tble _08021A8E\n" + "\tmovs r6, 0\n" +"_08021ACE:\n" + "\tlsls r0, r6, 16\n" + "\tasrs r4, r0, 16\n" + "\tadds r0, r4, 0\n" + "\tbl sub_8098134\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _08021AFC\n" + "\tadds r0, r4, 0\n" + "\tbl sub_8021B58\n" + "\tadds r2, r0, 0\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tcmp r2, r0\n" + "\tbeq _08021AFC\n" + "\tldr r0, _08021B4C\n" + "\tldr r1, [r0]\n" + "\tlsls r0, r2, 2\n" + "\tadds r1, 0x30\n" + "\tadds r1, r0\n" + "\tmovs r0, 0x1\n" + "\tstr r0, [r1]\n" +"_08021AFC:\n" + "\tadds r6, 0x1\n" + "\tldr r0, _08021B50\n" + "\tcmp r6, r0\n" + "\tble _08021ACE\n" + "\tmovs r6, 0\n" + "\tldr r4, _08021B54\n" +"_08021B08:\n" + "\tmovs r0, 0x58\n" + "\tadds r1, r6, 0\n" + "\tmuls r1, r0\n" + "\tldr r0, [r4]\n" + "\tadds r2, r0, r1\n" + "\tldrb r1, [r2]\n" + "\tmovs r0, 0x1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _08021B3C\n" + "\tmovs r1, 0x8\n" + "\tldrsh r0, [r2, r1]\n" + "\tbl sub_8021B58\n" + "\tadds r2, r0, 0\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tcmp r2, r0\n" + "\tbeq _08021B3C\n" + "\tldr r0, _08021B4C\n" + "\tldr r1, [r0]\n" + "\tlsls r0, r2, 2\n" + "\tadds r1, 0x30\n" + "\tadds r1, r0\n" + "\tmovs r0, 0x2\n" + "\tstr r0, [r1]\n" +"_08021B3C:\n" + "\tadds r6, 0x1\n" + "\tmovs r0, 0xCE\n" + "\tlsls r0, 1\n" + "\tcmp r6, r0\n" + "\tble _08021B08\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_08021B4C: .4byte gUnknown_203B28C\n" +"_08021B50: .4byte 0x000001a7\n" +"_08021B54: .4byte gRecruitedPokemonRef"); + +} +#else +void sub_8021A60(void) +{ + s32 sVar4; + s32 iVar6; + s32 index; + struct PokemonStruct *pokeStruct; + + gUnknown_203B28C->unk70 = 0; + for(index = 0; index < 0x10; index++) + { + gUnknown_203B28C->unkE[index] = 0; + gUnknown_203B28C->unk30[index] = 0; + } + for(index = 0; index < 0x1A8; index++) + { + if ((gUnknown_203B28C->friendArea == GetFriendArea((s16)index)) && + ((s16)index == GetBaseSpeciesNoUnown(index))) { + iVar6 = gUnknown_203B28C->unk70; + gUnknown_203B28C->unkE[iVar6] = index; + gUnknown_203B28C->unk70 = iVar6 + 1; + } + } + for(index = 0; index < 0x1A8; index++) + { + if ((sub_8098134(index) != '\0') && (sVar4 = sub_8021B58(index), sVar4 != -1)) { + gUnknown_203B28C->unk30[sVar4] = 1; + } + } + for(index = 0; index < 0x19d; index++) + { + pokeStruct = &gRecruitedPokemonRef->pokemon[index]; + if (((*(u8 *)&pokeStruct->unk0 & 1) != 0) && + (sVar4 = sub_8021B58(pokeStruct->speciesNum), sVar4 != -1)) { + gUnknown_203B28C->unk30[sVar4] = 2; + } + } + return; +} +#endif + +s32 sub_8021B58(s16 species) +{ + s32 baseSpecies; + int index; + + baseSpecies = GetBaseSpeciesNoUnown(species); + for(index = 0; index < gUnknown_203B28C->numPokemoninFriendArea; index++) + { + if (baseSpecies == gUnknown_203B28C->unkE[index]) return index; + } + return -1; +} + bool8 CreateWigglytuffShop(bool32 isAsleep) { char *string; @@ -248,16 +902,16 @@ void UpdateWigglytuffDialogue(void) break; case BUY_FRIEND_AREA: CreateWigglytuffConfirmFriendAreaMenu(); - sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0); + sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,FALSE); gUnknown_202DE30[0] = gWigglytuffShop->friendAreaPrice; sub_8014248(gWigglytuffDialogue[gWigglytuffShop->isAsleep][5],0,5,gWigglytuffShop->unk1C,0,4,0,gWigglytuffShop->unkCC,0xc); break; case FRIEND_AREA_INFO: - sub_8021774(gWigglytuffShop->chosenFriendArea,0,2); + sub_8021774(gWigglytuffShop->chosenFriendArea,FALSE,2); break; case CONFIRM_BUY_FRIEND_AREA: gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKD; - sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0); + sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,FALSE); sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][6],0,gWigglytuffShop->unkCC,0x10d); break; case WIGGLYTUFF_UNKD: @@ -324,7 +978,7 @@ void UpdateWigglytuffDialogue(void) } string = GetMonSpecies(gWigglytuffShop->chosenSpecies); strcpy(gAvailablePokemonNames,string); - sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0); + sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,FALSE); sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][14],0,gWigglytuffShop->unkCC,0x10d); break; case WIGGLYTUFF_CHECK_HAS_FRIEND_AREA: diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index 5e45adb5b..38c300871 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -125,7 +125,6 @@ extern void ProceedToNextRewardSceneState(void); extern void sub_802F300(void); extern s32 sub_808D544(u32); extern u32 sub_801B60C(u32, u8, u8); -extern void sub_8092578(u8 *buffer, u8 index, u8 r2); void HandleMissionReward(void); const u8 *sub_80974A0(s16 index); @@ -555,7 +554,7 @@ void HandleMissionReward(void) SetRewardSceneState(PREP_ITEM_REWARD); } else { - sub_8092578(gUnknown_202E628,gUnknown_203B310->unk10->friendAreaReward,0); + sub_8092578(gUnknown_202E628,gUnknown_203B310->unk10->friendAreaReward,FALSE); if (gUnknown_203B310->displayClientDialogueSprite) { sub_80141B4(gUnknown_80E04B4,0,&gUnknown_203B310->faceFile,0x10d); gUnknown_203B310->nextState = UNLOCK_FRIEND_AREA; diff --git a/sym_ewram2.txt b/sym_ewram2.txt index 6e238b0c2..1d4ccca02 100644 --- a/sym_ewram2.txt +++ b/sym_ewram2.txt @@ -228,21 +228,6 @@ gUnknown_203B278: /* 203B278 */ .include "src/gulpin_shop_1.o" -gUnknown_203B280: /* 203B280 */ - .space 0x4 - -gUnknown_203B284: /* 203B284 */ - .space 0x4 - -gUnknown_203B288: /* 203B288 */ - .space 0x2 - -gUnknown_203B28A: /* 203B28A */ - .space 0x2 - -gUnknown_203B28C: /* 203B28C */ - .space 0x4 - .include "src/wigglytuff_shop.o" gUnknown_203B294: /* 203B294 */