From 28f0516f56d23f4ee066e61a984923fa676b3f1f Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Wed, 12 Jul 2023 20:19:38 -0700 Subject: [PATCH 01/26] document some things from pmdsky --- include/dungeon_global_data.h | 2 +- include/item.h | 3 ++- src/dungeon_ai.c | 2 +- src/dungeon_music.c | 6 +++--- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index f218dccc1..34096917b 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -109,7 +109,7 @@ struct Dungeon u8 unk66F; u8 unk670; /* 0x671 */ bool8 monsterHouseTriggered; - /* 0x672 */ u8 unk672; + /* 0x672 */ bool8 monsterHouseTriggeredEvent; u8 unk673; u8 unk674; u8 unk675; diff --git a/include/item.h b/include/item.h index e890a7936..bca04270b 100644 --- a/include/item.h +++ b/include/item.h @@ -60,7 +60,8 @@ struct unkStruct_8090F58 enum ItemFlag { ITEM_FLAG_EXISTS = 1 << 0, - ITEM_FLAG_IN_SHOP = 1 << 1, + ITEM_FLAG_IN_SHOP = 1 << 1, // in a Kecleon shop + ITEM_FLAG_UNPAID = 1 << 2, // Picked up in Kecleon shop but not paid for yet ITEM_FLAG_STICKY = 1 << 3, ITEM_FLAG_SET = 1 << 4 // This item can be thrown by pressing L+R instead of having to go to the bag menu. }; diff --git a/src/dungeon_ai.c b/src/dungeon_ai.c index d4ca78e68..9fc479df3 100644 --- a/src/dungeon_ai.c +++ b/src/dungeon_ai.c @@ -147,7 +147,7 @@ void sub_8075900(struct Entity *pokemon, u8 r1) { // It's a monster house! SendMessage(GetLeader(), gPtrItsaMonsterHouseMessage); - gDungeon->unk672 = 1; + gDungeon->monsterHouseTriggeredEvent = TRUE; sub_807AB38(pokemon, r1); sub_8041888(0); if(sub_803F428(&pokemon->pos.x) != 0) diff --git a/src/dungeon_music.c b/src/dungeon_music.c index 549de2be6..6ddb74f58 100644 --- a/src/dungeon_music.c +++ b/src/dungeon_music.c @@ -197,7 +197,7 @@ void PlayDungeonFailBGM(void) { DungeonStartNewBGM(MUS_DUNGEON_FAIL); gDungeon->unk66F = 0; - gDungeon->unk672 = 0; + gDungeon->monsterHouseTriggeredEvent = FALSE; gDungeon->unk699 = 0; gDungeon->bossSongIndex = STOP_BGM; } @@ -206,7 +206,7 @@ void PlayDungeonCompleteBGM(void) { DungeonStartNewBGM(MUS_DUNGEON_COMPLETE); gDungeon->unk66F = 0; - gDungeon->unk672 = 0; + gDungeon->monsterHouseTriggeredEvent = FALSE; gDungeon->unk699 = 0; gDungeon->bossSongIndex = STOP_BGM; } @@ -296,7 +296,7 @@ void UpdateDungeonMusic(void) if (gDungeon->unk66F != 0) { newSongIndex = MUS_STOP_THIEF; } - else if (gDungeon->unk672 != 0) { + else if (gDungeon->monsterHouseTriggeredEvent) { newSongIndex = MUS_MONSTER_HOUSE; } else if (gDungeon->unk699 != 0) { From 1098955beef2bd38400bd92577d554ee6a4ebbf1 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 17 Jul 2023 08:49:27 -0700 Subject: [PATCH 02/26] more decomp --- asm/code_809447C.s | 335 ----------------------- asm/other_menus.s | 499 ---------------------------------- include/dungeon_global_data.h | 4 +- ld_script.txt | 1 - src/code_809447C.c | 134 ++++++++- src/dungeon_music.c | 8 +- src/other_menus.c | 391 ++++++++++++++++---------- 7 files changed, 386 insertions(+), 986 deletions(-) delete mode 100644 asm/code_809447C.s diff --git a/asm/code_809447C.s b/asm/code_809447C.s deleted file mode 100644 index 3d03a7a5d..000000000 --- a/asm/code_809447C.s +++ /dev/null @@ -1,335 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8094558 -sub_8094558: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xCC - adds r7, r0, 0 - adds r4, r1, 0 - adds r6, r2, 0 - bl sub_80073B8 - movs r5, 0 - str r5, [sp] - movs r0, 0x10 - movs r1, 0 - adds r2, r4, 0 - adds r3, r7, 0 - bl xxx_format_and_draw - ldr r4, _080945D0 - adds r1, r6, 0 - adds r1, 0x18 - adds r0, r4, 0 - bl PrintYellowDungeonNametoBuffer - ldr r0, _080945D4 - ldr r2, [r0] - str r5, [sp] - movs r0, 0x4 - movs r1, 0x10 - adds r3, r7, 0 - bl xxx_format_and_draw - movs r5, 0x1A - adds r0, r4, 0 - adds r1, r6, 0 - movs r2, 0xA - bl sub_80922B4 - adds r4, 0x50 - adds r1, r6, 0 - adds r1, 0xA - adds r0, r4, 0 - movs r2, 0xA - bl sub_80922B4 - movs r1, 0x14 - ldrsh r0, [r6, r1] - bl sub_8094528 - lsls r0, 24 - cmp r0, 0 - beq _080945DC - ldr r0, _080945D8 - ldr r0, [r0] - add r2, sp, 0xCC - add r1, sp, 0x4 - movs r3, 0 - bl xxx_format_string - b _080945EA - .align 2, 0 -_080945D0: .4byte gAvailablePokemonNames -_080945D4: .4byte gUnknown_8113850 -_080945D8: .4byte gUnknown_8113868 -_080945DC: - ldr r0, _0809465C - ldr r0, [r0] - add r2, sp, 0xCC - add r1, sp, 0x4 - movs r3, 0 - bl xxx_format_string -_080945EA: - add r0, sp, 0x4 - bl sub_8008ED0 - movs r4, 0xB0 - subs r0, r4, r0 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - movs r1, 0 - mov r8, r1 - str r1, [sp] - adds r1, r5, 0 - add r2, sp, 0x4 - adds r3, r7, 0 - bl xxx_format_and_draw - adds r5, 0xA - movs r1, 0x14 - ldrsh r0, [r6, r1] - add r1, sp, 0x4 - bl sub_80944BC - add r0, sp, 0x4 - bl sub_8008ED0 - subs r4, r0 - lsrs r0, r4, 31 - adds r4, r0 - asrs r0, r4, 1 - mov r1, r8 - str r1, [sp] - adds r1, r5, 0 - add r2, sp, 0x4 - adds r3, r7, 0 - bl xxx_format_and_draw - adds r5, 0x10 - ldr r1, _08094660 - ldr r0, [r6, 0x20] - str r0, [r1] - adds r0, r6, 0 - adds r0, 0x2A - ldrb r0, [r0] - str r0, [r1, 0x4] - cmp r0, 0x63 - ble _08094668 - ldr r0, _08094664 - ldr r2, [r0] - mov r0, r8 - str r0, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw - b _0809467A - .align 2, 0 -_0809465C: .4byte gUnknown_8113870 -_08094660: .4byte gUnknown_202DE30 -_08094664: .4byte gUnknown_81138C0 -_08094668: - ldr r0, _080946CC - ldr r2, [r0] - mov r1, r8 - str r1, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw -_0809467A: - adds r5, 0xA - ldr r4, _080946D0 - movs r1, 0x24 - ldrsh r0, [r6, r1] - str r0, [r4] - ldr r0, _080946D4 - ldr r2, [r0] - movs r0, 0 - mov r8, r0 - str r0, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw - adds r5, 0xA - adds r0, r6, 0 - adds r0, 0x26 - ldrb r2, [r0] - str r2, [r4] - adds r0, 0x2 - ldrb r0, [r0] - str r0, [r4, 0x4] - adds r0, r6, 0 - adds r0, 0x2B - ldrb r1, [r0] - cmp r1, 0 - beq _080946DC - adds r0, r1, 0 - adds r0, r2, r0 - str r0, [r4] - ldr r0, _080946D8 - ldr r2, [r0] - mov r1, r8 - str r1, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw - b _080946EC - .align 2, 0 -_080946CC: .4byte gUnknown_8113898 -_080946D0: .4byte gUnknown_202DE30 -_080946D4: .4byte gUnknown_81138D0 -_080946D8: .4byte gUnknown_8113950 -_080946DC: - ldr r0, _08094714 - ldr r2, [r0] - str r1, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw -_080946EC: - adds r0, r6, 0 - adds r0, 0x2D - ldrb r1, [r0] - cmp r1, 0 - beq _08094720 - ldr r2, _08094718 - ldr r0, [r2, 0x4] - adds r0, r1 - str r0, [r2, 0x4] - ldr r0, _0809471C - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw - b _08094730 - .align 2, 0 -_08094714: .4byte gUnknown_81138E4 -_08094718: .4byte gUnknown_202DE30 -_0809471C: .4byte gUnknown_8113974 -_08094720: - ldr r0, _08094768 - ldr r2, [r0] - str r1, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw -_08094730: - adds r5, 0xA - ldr r2, _0809476C - adds r0, r6, 0 - adds r0, 0x27 - ldrb r3, [r0] - str r3, [r2] - adds r0, 0x2 - ldrb r0, [r0] - str r0, [r2, 0x4] - adds r0, r6, 0 - adds r0, 0x2C - ldrb r1, [r0] - cmp r1, 0 - beq _08094774 - adds r0, r1, 0 - adds r0, r3, r0 - str r0, [r2] - ldr r0, _08094770 - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw - b _08094784 - .align 2, 0 -_08094768: .4byte gUnknown_8113900 -_0809476C: .4byte gUnknown_202DE30 -_08094770: .4byte gUnknown_8113990 -_08094774: - ldr r0, _080947AC - ldr r2, [r0] - str r1, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw -_08094784: - adds r0, r6, 0 - adds r0, 0x2E - ldrb r1, [r0] - cmp r1, 0 - beq _080947B8 - ldr r2, _080947B0 - ldr r0, [r2, 0x4] - adds r0, r1 - str r0, [r2, 0x4] - ldr r0, _080947B4 - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw - b _080947C8 - .align 2, 0 -_080947AC: .4byte gUnknown_8113918 -_080947B0: .4byte gUnknown_202DE30 -_080947B4: .4byte gUnknown_81139B4 -_080947B8: - ldr r0, _080947E4 - ldr r2, [r0] - str r1, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw -_080947C8: - adds r5, 0x10 - adds r2, r6, 0 - adds r2, 0x1C - ldrb r1, [r6, 0x1C] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080947EC - ldr r0, _080947E8 - adds r1, r2, 0 - movs r2, 0 - bl sub_8090E14 - b _080947F6 - .align 2, 0 -_080947E4: .4byte gUnknown_8113934 -_080947E8: .4byte gUnknown_202DE58 -_080947EC: - ldr r0, _0809481C - ldr r1, _08094820 - ldr r1, [r1] - bl strcpy -_080947F6: - ldr r0, _08094824 - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x4 - adds r1, r5, 0 - adds r3, r7, 0 - bl xxx_format_and_draw - adds r0, r7, 0 - bl sub_80073E0 - add sp, 0xCC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809481C: .4byte gUnknown_202DE58 -_08094820: .4byte gUnknown_81139B8 -_08094824: .4byte gUnknown_81139CC - thumb_func_end sub_8094558 - - .align 2,0 diff --git a/asm/other_menus.s b/asm/other_menus.s index 1bd67d082..2e4350635 100644 --- a/asm/other_menus.s +++ b/asm/other_menus.s @@ -5,505 +5,6 @@ .text - thumb_func_start sub_8037400 -sub_8037400: - push {r4-r6,lr} - movs r6, 0 - movs r5, 0 - bl sub_8037810 - bl sub_8011830 - ldr r4, _08037434 - ldr r0, [r4] - ldr r0, [r0] - bl sub_8037B28 - ldr r4, [r4] - str r0, [r4, 0x4] - cmp r0, 0 - beq _08037422 - b _080376BE -_08037422: - ldr r0, [r4] - cmp r0, 0xA - bls _0803742A - b _080375E8 -_0803742A: - lsls r0, 2 - ldr r1, _08037438 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08037434: .4byte gUnknown_203B35C -_08037438: .4byte _0803743C - .align 2, 0 -_0803743C: - .4byte _08037494 - .4byte _080374B8 - .4byte _08037534 - .4byte _0803751C - .4byte _0803756C - .4byte _080375D8 - .4byte _080374E4 - .4byte _080374D0 - .4byte _080375E8 - .4byte _08037480 - .4byte _08037468 -_08037468: - ldr r0, _0803747C - ldr r0, [r0] - movs r1, 0xE7 - lsls r1, 2 - adds r6, r0, r1 - movs r2, 0x8A - lsls r2, 3 - adds r5, r0, r2 - b _080375E8 - .align 2, 0 -_0803747C: .4byte gUnknown_203B35C -_08037480: - ldr r0, _08037490 - ldr r0, [r0] - movs r3, 0xE7 - lsls r3, 2 - adds r6, r0, r3 - movs r4, 0x8A - lsls r4, 3 - b _080375E6 - .align 2, 0 -_08037490: .4byte gUnknown_203B35C -_08037494: - bl sub_8035D94 - ldr r1, _080374B4 - ldr r3, [r1] - movs r5, 0xDE - lsls r5, 1 - adds r2, r3, r5 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [r2] - str r1, [r2, 0x4] - adds r6, r2, 0 - movs r0, 0xE2 - lsls r0, 1 - adds r5, r3, r0 - b _080375E8 - .align 2, 0 -_080374B4: .4byte gUnknown_203B35C -_080374B8: - ldr r0, _080374CC - ldr r0, [r0] - movs r1, 0xDE - lsls r1, 1 - adds r6, r0, r1 - movs r2, 0xE2 - lsls r2, 1 - adds r5, r0, r2 - b _080375E8 - .align 2, 0 -_080374CC: .4byte gUnknown_203B35C -_080374D0: - ldr r0, _080374E0 - ldr r0, [r0] - movs r3, 0xE6 - lsls r3, 1 - adds r6, r0, r3 - movs r4, 0xFE - lsls r4, 1 - b _080375E6 - .align 2, 0 -_080374E0: .4byte gUnknown_203B35C -_080374E4: - bl sub_8035D74 - lsls r0, 24 - lsrs r0, 24 - bl GetMailatIndex - ldr r3, _08037518 - ldr r1, [r3] - movs r2, 0xE6 - lsls r2, 1 - adds r1, r2 - ldm r0!, {r4-r6} - stm r1!, {r4-r6} - ldm r0!, {r4-r6} - stm r1!, {r4-r6} - ldm r0!, {r4-r6} - stm r1!, {r4-r6} - ldm r0!, {r4-r6} - stm r1!, {r4-r6} - ldr r0, [r3] - adds r6, r0, r2 - movs r1, 0xFE - lsls r1, 1 - adds r5, r0, r1 - b _080375E8 - .align 2, 0 -_08037518: .4byte gUnknown_203B35C -_0803751C: - ldr r0, _08037530 - ldr r0, [r0] - movs r2, 0x8B - lsls r2, 2 - adds r6, r0, r2 - movs r3, 0x97 - lsls r3, 2 - adds r5, r0, r3 - b _080375E8 - .align 2, 0 -_08037530: .4byte gUnknown_203B35C -_08037534: - bl sub_8035D74 - lsls r0, 24 - lsrs r0, 24 - bl GetMailatIndex - ldr r3, _08037568 - ldr r1, [r3] - movs r2, 0x8B - lsls r2, 2 - adds r1, r2 - ldm r0!, {r4-r6} - stm r1!, {r4-r6} - ldm r0!, {r4-r6} - stm r1!, {r4-r6} - ldm r0!, {r4-r6} - stm r1!, {r4-r6} - ldm r0!, {r4-r6} - stm r1!, {r4-r6} - ldr r0, [r3] - adds r6, r0, r2 - movs r1, 0x97 - lsls r1, 2 - adds r5, r0, r1 - b _080375E8 - .align 2, 0 -_08037568: .4byte gUnknown_203B35C -_0803756C: - bl sub_8035D74 - lsls r0, 24 - lsrs r0, 24 - bl GetMailatIndex - ldr r4, _080375CC - ldr r1, [r4] - movs r5, 0xA3 - lsls r5, 2 - adds r1, r5 - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - bl sub_8035D3C - lsls r0, 16 - ldr r1, _080375D0 - cmp r0, r1 - beq _080375BE - bl sub_8035D3C - ldr r3, [r4] - movs r1, 0xAF - lsls r1, 2 - adds r3, r1 - ldr r1, _080375D4 - ldr r1, [r1] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x58 - muls r0, r2 - adds r1, r0 - adds r0, r3, 0 - bl memcpy -_080375BE: - ldr r0, [r4] - adds r6, r0, r5 - movs r2, 0xC5 - lsls r2, 2 - adds r5, r0, r2 - b _080375E8 - .align 2, 0 -_080375CC: .4byte gUnknown_203B35C -_080375D0: .4byte 0xffff0000 -_080375D4: .4byte gRecruitedPokemonRef -_080375D8: - ldr r0, _08037610 - ldr r0, [r0] - movs r3, 0xA3 - lsls r3, 2 - adds r6, r0, r3 - movs r4, 0xC5 - lsls r4, 2 -_080375E6: - adds r5, r0, r4 -_080375E8: - ldr r4, _08037610 - ldr r0, [r4] - ldr r0, [r0] - adds r1, r6, 0 - adds r2, r5, 0 - bl sub_8037D64 - ldr r1, [r4] - str r0, [r1, 0x4] - cmp r0, 0 - bne _080376BE - ldr r0, [r1] - cmp r0, 0xA - bhi _080376AE - lsls r0, 2 - ldr r1, _08037614 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08037610: .4byte gUnknown_203B35C -_08037614: .4byte _08037618 - .align 2, 0 -_08037618: - .4byte _08037644 - .4byte _08037644 - .4byte _08037658 - .4byte _08037658 - .4byte _0803766C - .4byte _0803766C - .4byte _08037684 - .4byte _08037684 - .4byte _080376AE - .4byte _0803769C - .4byte _0803769C -_08037644: - ldr r0, _08037654 - ldr r2, [r0] - movs r5, 0xDE - lsls r5, 1 - adds r6, r2, r5 - movs r1, 0xE2 - lsls r1, 1 - b _0803767A - .align 2, 0 -_08037654: .4byte gUnknown_203B35C -_08037658: - ldr r0, _08037668 - ldr r2, [r0] - movs r3, 0x8B - lsls r3, 2 - adds r6, r2, r3 - movs r4, 0x97 - lsls r4, 2 - b _08037692 - .align 2, 0 -_08037668: .4byte gUnknown_203B35C -_0803766C: - ldr r0, _08037680 - ldr r2, [r0] - movs r5, 0xA3 - lsls r5, 2 - adds r6, r2, r5 - movs r1, 0xC5 - lsls r1, 2 -_0803767A: - adds r5, r2, r1 - adds r4, r0, 0 - b _080376AE - .align 2, 0 -_08037680: .4byte gUnknown_203B35C -_08037684: - ldr r0, _08037698 - ldr r2, [r0] - movs r3, 0xE6 - lsls r3, 1 - adds r6, r2, r3 - movs r4, 0xFE - lsls r4, 1 -_08037692: - adds r5, r2, r4 - adds r4, r0, 0 - b _080376AE - .align 2, 0 -_08037698: .4byte gUnknown_203B35C -_0803769C: - ldr r1, _080376C8 - ldr r0, [r1] - movs r5, 0xE7 - lsls r5, 2 - adds r6, r0, r5 - movs r2, 0x8A - lsls r2, 3 - adds r5, r0, r2 - adds r4, r1, 0 -_080376AE: - ldr r0, [r4] - ldr r0, [r0] - adds r1, r6, 0 - adds r2, r5, 0 - bl sub_80381F4 - ldr r1, [r4] - str r0, [r1, 0x4] -_080376BE: - bl xxx_call_start_bg_music - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080376C8: .4byte gUnknown_203B35C - thumb_func_end sub_8037400 - - thumb_func_start sub_80376CC -sub_80376CC: - push {r4,lr} - ldr r0, _08037728 - ldr r3, [r0] - ldrh r1, [r3, 0xC] - ldr r0, _0803772C - ands r0, r1 - ldr r1, _08037730 - ands r0, r1 - ldr r4, _08037734 - ands r0, r4 - ldr r1, _08037738 - ands r0, r1 - ldr r1, _0803773C - ands r0, r1 - movs r2, 0x80 - lsls r2, 7 - ldr r1, _08037740 - ands r0, r1 - orrs r0, r2 - strh r0, [r3, 0xC] - movs r2, 0xFC - lsls r2, 2 - ldrh r1, [r3, 0x10] - movs r0, 0xFC - lsls r0, 8 - ands r0, r1 - orrs r0, r2 - ands r0, r4 - movs r2, 0xF - movs r4, 0xF0 - lsls r4, 8 - ldr r1, _08037744 - ands r0, r1 - orrs r0, r4 - strh r0, [r3, 0x10] - movs r0, 0 - strh r0, [r3, 0xE] - movs r1, 0xC0 - lsls r1, 4 - ldrh r0, [r3, 0x12] - ands r2, r0 - orrs r2, r1 - strh r2, [r3, 0x12] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08037728: .4byte gUnknown_203B35C -_0803772C: .4byte 0x0000feff -_08037730: .4byte 0x0000fdff -_08037734: .4byte 0x0000f3ff -_08037738: .4byte 0x0000efff -_0803773C: .4byte 0x0000dfff -_08037740: .4byte 0x00003fff -_08037744: .4byte 0x00000fff - thumb_func_end sub_80376CC - - thumb_func_start sub_8037748 -sub_8037748: - push {r4,lr} - ldr r4, _08037794 - ldr r3, [r4] - ldrh r1, [r3, 0xE] - movs r0, 0xFE - lsls r0, 8 - ands r0, r1 - movs r1, 0x70 - orrs r0, r1 - strh r0, [r3, 0xE] - movs r2, 0xD0 - lsls r2, 3 - ldrh r1, [r3, 0x12] - movs r0, 0xF - ands r0, r1 - orrs r0, r2 - strh r0, [r3, 0x12] - ldr r0, [r3, 0x14] - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08037782 - adds r0, r3, 0 - adds r0, 0xC - adds r1, 0xF8 - movs r2, 0 - movs r3, 0 - bl AddSprite -_08037782: - bl xxx_draw_string_80144C4 - ldr r1, [r4] - ldr r0, [r1, 0x14] - adds r0, 0x1 - str r0, [r1, 0x14] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08037794: .4byte gUnknown_203B35C - thumb_func_end sub_8037748 - - thumb_func_start sub_8037798 -sub_8037798: - push {lr} - ldr r2, _080377B4 - ldr r1, _080377B8 - ldr r0, [r1] - ldr r0, [r0] - adds r3, r1, 0 - cmp r0, 0xA - bhi _0803780A - lsls r0, 2 - ldr r1, _080377BC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080377B4: .4byte 0x0000ffdc -_080377B8: .4byte gUnknown_203B35C -_080377BC: .4byte _080377C0 - .align 2, 0 -_080377C0: - .4byte _080377EC - .4byte _080377EC - .4byte _080377F0 - .4byte _080377F0 - .4byte _080377F0 - .4byte _080377F0 - .4byte _080377F0 - .4byte _080377F0 - .4byte _0803780A - .4byte _080377FE - .4byte _080377FE -_080377EC: - movs r2, 0x1 - b _0803780A -_080377F0: - ldr r0, [r3] - ldr r0, [r0, 0x4] - movs r2, 0x1 - cmp r0, 0 - bne _0803780A - movs r2, 0x2A - b _0803780A -_080377FE: - ldr r0, [r3] - ldr r0, [r0, 0x4] - movs r2, 0xD - cmp r0, 0 - bne _0803780A - movs r2, 0x2B -_0803780A: - adds r0, r2, 0 - pop {r1} - bx r1 - thumb_func_end sub_8037798 - thumb_func_start sub_8037810 sub_8037810: push {r4-r6,lr} diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index 34096917b..27823b476 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -34,8 +34,8 @@ struct unkDungeonGlobal_unk1CE98_sub { /* 0x0 */ u8 buffer1[10]; /* 0xA */ u8 buffer2[10]; - s16 unk14; - u8 fill16[0x18 - 0x16]; + /* 0x14 */ s16 moveID; + /* 0x16 */ u8 fill16[0x2]; /* 0x18 */ struct DungeonLocation dungeonLocation; /* 0x1C */ struct Item heldItem; /* 0x20 */ u32 exp; diff --git a/ld_script.txt b/ld_script.txt index 3a93386a8..700f231d3 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -284,7 +284,6 @@ SECTIONS { asm/code_8094148.o(.text); src/number_util.o(.text); src/code_809447C.o(.text); - asm/code_809447C.o(.text); src/code_8092334.o(.text); src/game_options.o(.text); asm/code_8094D28.o(.text); diff --git a/src/code_809447C.c b/src/code_809447C.c index 1281f2cd5..ef86245ee 100644 --- a/src/code_809447C.c +++ b/src/code_809447C.c @@ -3,20 +3,46 @@ #include "code_809447C.h" #include "item.h" #include "moves.h" +#include "dungeon_global_data.h" struct unkStruct_8113080 { u8 unk0; - u8 *unk4; // some string + u8 *text; }; extern u8 gUnknown_202DE58[]; extern u8 gAvailablePokemonNames[]; +extern s32 gUnknown_202DE30[2]; + extern u8 *gUnknown_811383C[]; +extern u8 *gUnknown_8113850[]; +extern u8 *gUnknown_8113868[]; +extern u8 *gUnknown_8113898[]; +extern u8 *gUnknown_81138C0[]; +extern u8 *gUnknown_81138D0[]; +extern u8 *gUnknown_81138E4[]; +extern u8 *gUnknown_8113950[]; +extern u8 *gUnknown_8113900[]; +extern u8 *gUnknown_8113974[]; +extern u8 *gUnknown_8113918[]; +extern u8 *gUnknown_8113990[]; +extern u8 *gUnknown_8113934[]; +extern u8 *gUnknown_81139B4[]; +extern u8 *gUnknown_81139B8[]; +extern u8 *gUnknown_81139CC[]; +extern u8 *gUnknown_8113870[]; + extern struct unkStruct_8113080 gUnknown_8113080[]; void sub_80928C0(u8 *buffer, struct Move *move, struct unkStruct_80928C0 *param_3); extern void xxx_format_string(const char *, u8 *, void *, u32); +void PrintYellowDungeonNametoBuffer(u8 *buffer, struct DungeonLocation *dungeonLocation); +extern void sub_80073B8(u32); +extern void xxx_format_and_draw(s32, s32, const u8 *, ...); +extern s32 sub_8008ED0(u8 *); +void sub_80922B4(u8 *buffer, u8 *string, s32 size); +extern void sub_80073E0(u32); void sub_809447C(struct unkStruct_8094924 *r0, u8 *r1) { @@ -30,24 +56,24 @@ void sub_809449C(struct unkStruct_8094924 *r0, u8 *r1) SaveIntegerBits(r0, r1 + 2, 0x10); } -void sub_80944BC(s16 moveID, u8 *arg2) +static void sub_80944BC(s16 moveID, u8 *buffer) { u16 moveID_u16; s32 moveID_s32 = moveID; - struct Move stack; + struct Move move; if (moveID_s32 < 0x1F4) { // Needed this cast/variable to match moveID_u16 = moveID_s32; - sub_8092AA8(&stack, moveID_u16); - sub_80928C0(gUnknown_202DE58, &stack, NULL); - xxx_format_string(*gUnknown_811383C, arg2, arg2 + 200, 0); + sub_8092AA8(&move, moveID_u16); + sub_80928C0(gUnknown_202DE58, &move, NULL); + xxx_format_string(*gUnknown_811383C, buffer, buffer + 200, 0); // $m0's $i0 } else { - strncpy(arg2, gUnknown_8113080[moveID - 0x1F4].unk4, 200); + strncpy(buffer, gUnknown_8113080[moveID - 0x1F4].text, 200); } } -u8 sub_8094528(s16 moveID) +static u8 sub_8094528(s16 moveID) { if(moveID < 0x1F4) { @@ -59,3 +85,95 @@ u8 sub_8094528(s16 moveID) } } +void sub_8094558(u32 param_1,u8 *param_2,struct unkDungeonGlobal_unk1CE98_sub *param_3) +{ + int iVar2; + u8 buffer [200]; + s32 y; + struct Item *item; + s32 var; + + sub_80073B8(param_1); + xxx_format_and_draw(0x10,0,param_2,param_1,0); + PrintYellowDungeonNametoBuffer(gAvailablePokemonNames, ¶m_3->dungeonLocation); + xxx_format_and_draw(4,0x10,*gUnknown_8113850,param_1,0); // #+Place: $m0 + y = 0x1A; + sub_80922B4(gAvailablePokemonNames, param_3->buffer1, POKEMON_NAME_LENGTH); + sub_80922B4(gAvailablePokemonNames + 0x50, param_3->buffer2, POKEMON_NAME_LENGTH); + if (sub_8094528(param_3->moveID) != 0) { + // $m1 was defeated by + xxx_format_string(*gUnknown_8113868,buffer,(u32 **)&buffer + 50,0); // TODO: fix this hack + } + else { + // $m1 + xxx_format_string(*gUnknown_8113870,buffer,(u32 **)&buffer + 50,0); // TODO: fix this hack + } + iVar2 = sub_8008ED0(buffer); + xxx_format_and_draw(((0xb0 - iVar2) / 2),y,buffer,param_1,0); + y += 0xA; + sub_80944BC(param_3->moveID, buffer); +#ifndef NONMATCHING + var = 0xb0 - sub_8008ED0(buffer); + var += (var < 0); + xxx_format_and_draw(var >> 1,y,buffer,param_1,0); + asm(""::"r"(var)); +#else + xxx_format_and_draw((0xb0 - sub_8008ED0(buffer) / 2),y,buffer,param_1,0); +#endif + y += 0x10; + gUnknown_202DE30[0] = param_3->exp; + gUnknown_202DE30[1] = param_3->level; + if (gUnknown_202DE30[1] >= 100) { + xxx_format_and_draw(4,y,*gUnknown_81138C0,param_1,0); + } + else { + xxx_format_and_draw(4,y,*gUnknown_8113898,param_1,0); + } + y += 0xA; + gUnknown_202DE30[0] = param_3->maxHPStat; + xxx_format_and_draw(4,y,*gUnknown_81138D0,param_1,0); + y += 0xA; + gUnknown_202DE30[0] = param_3->atk; + gUnknown_202DE30[1] = param_3->def; + if (param_3->attBoost) { + gUnknown_202DE30[0] = gUnknown_202DE30[0] + param_3->attBoost; + xxx_format_and_draw(4,y,*gUnknown_8113950,param_1,0); + } + else { + xxx_format_and_draw(4,y,*gUnknown_81138E4,param_1,0); + } + if (param_3->defBoost) { + gUnknown_202DE30[1] = gUnknown_202DE30[1] + param_3->defBoost; + xxx_format_and_draw(4,y,*gUnknown_8113974,param_1,0); + } + else { + xxx_format_and_draw(4,y,*gUnknown_8113900,param_1,0); + } + y += 0xA; + gUnknown_202DE30[0] = param_3->spAtk; + gUnknown_202DE30[1] = param_3->spDef; + if (param_3->spAttBoost) { + gUnknown_202DE30[0] = gUnknown_202DE30[0] + param_3->spAttBoost; + xxx_format_and_draw(4,y,*gUnknown_8113990,param_1,0); + } + else { + xxx_format_and_draw(4,y,*gUnknown_8113918,param_1,0); + } + if (param_3->spDefBoost) { + gUnknown_202DE30[1] = gUnknown_202DE30[1] + param_3->spDefBoost; + xxx_format_and_draw(4,y,*gUnknown_81139B4,param_1,0); + } + else { + xxx_format_and_draw(4,y,*gUnknown_8113934,param_1,0); + } + y += 0x10; + item = &(param_3->heldItem); + if ((param_3->heldItem.flags & ITEM_FLAG_EXISTS)) { + sub_8090E14(gUnknown_202DE58,item,0); + } + else { + strcpy(gUnknown_202DE58,*gUnknown_81139B8); + } + xxx_format_and_draw(4,y,*gUnknown_81139CC,param_1,0); + sub_80073E0(param_1); +} diff --git a/src/dungeon_music.c b/src/dungeon_music.c index 6ddb74f58..da2ea13bd 100644 --- a/src/dungeon_music.c +++ b/src/dungeon_music.c @@ -61,7 +61,7 @@ void sub_8083AB0(s16 param_0, struct Entity * target, struct Entity * entity) } sub_80709C8(buffer,entityInfo); CopyStringtoBuffer(temp->buffer2, buffer); - temp->unk14 = param_0_s32; + temp->moveID = param_0_s32; temp->heldItem = entityInfo->heldItem; temp->exp = entityInfo->exp; temp->level = entityInfo->level; @@ -108,7 +108,7 @@ bool8 sub_8083C24(void) temp = &gDungeon->unk1CE98; - if (temp->unk14 < 0x226) { + if (temp->moveID < 0x226) { return TRUE; } else { @@ -122,7 +122,7 @@ bool8 sub_8083C50(void) temp = &gDungeon->unk1CE98; - if ((temp->unk14 == 0x227) || (temp->unk14 == 0x22A) || (temp->unk14 == 0x228)) { + if ((temp->moveID == 0x227) || (temp->moveID == 0x22A) || (temp->moveID == 0x228)) { return TRUE; } else { @@ -138,7 +138,7 @@ bool8 sub_8083C88(u8 param_1) if ((!HasCheckpoint(gDungeon->dungeonLocation.id) && ((gDungeon->unk65C != 0) || (param_1 != 0))) || - (temp->unk14 != 0x227)) { + (temp->moveID != 0x227)) { return TRUE; } else { diff --git a/src/other_menus.c b/src/other_menus.c index 79c5c9892..336daae3f 100644 --- a/src/other_menus.c +++ b/src/other_menus.c @@ -8,6 +8,18 @@ #include "memory.h" #include "text.h" #include "menu_input.h" +#include "dungeon_global_data.h" +#include "pokemon.h" +#include "code_8094F88.h" + +struct unkSprite +{ + u16 unk0; + u16 unk2; + u16 unk4; + u16 unk6; +}; + struct unkStruct_203B35C { @@ -15,11 +27,23 @@ struct unkStruct_203B35C u32 unk0; u32 linkStatus; u32 state; - u8 fillC[0x1C - 0xC]; + struct unkSprite unkC; + u32 unk14; + u8 fill18[0x1C - 0x18]; struct MenuStruct unk1C[4]; struct UnkTextStruct2 unk15C[4]; - u8 unk1BC[4]; - u32 unk1C0[9]; + struct unkStruct_8035D94 unk1BC[2]; + struct unkStruct_203B480 unk1CC; + struct unkStruct_203B480 unk1FC; + struct unkStruct_203B480 unk22C; + struct unkStruct_203B480 unk25C; + struct unkStruct_203B480 unk28C; + struct PokemonStruct unk2BC; + struct unkStruct_203B480 unk314; + struct PokemonStruct unk344; + s32 unk39C; + u8 fill3A0[0x450 - 0x3A0]; + s32 unk450; }; extern struct unkStruct_203B35C *gUnknown_203B35C; @@ -440,13 +464,21 @@ extern void TransferBGPaletteBuffer(); extern void xxx_call_update_bg_vram(); extern void sub_8009908(); extern void xxx_call_update_bg_sound_input(); +extern s32 sub_8037D64(u32, void *, void *); +extern s32 sub_80381F4(u32, void *, void *); +extern void sub_8037810(void); +extern void sub_8011830(void); +extern s32 sub_8037B28(u32); +s32 sub_8035D3C(void); +extern s32 sub_8035D74(void); +extern void xxx_call_start_bg_music(void); +extern void xxx_draw_string_80144C4(void); +extern void AddSprite(struct unkSprite *, u32, u32, u32); - -#ifdef NONMATCHING void sub_8036FDC(s32 param_1) { - int iVar3; - int iVar4; + int index1; + int index2; ResetUnusedInputStruct(); sub_800641C(0,1,1); @@ -457,143 +489,22 @@ void sub_8036FDC(s32 param_1) } gUnknown_203B35C->unk0 = param_1; - gUnknown_203B35C->linkStatus = 0; + gUnknown_203B35C->linkStatus = COMMS_GOOD; gUnknown_203B35C->state = 0; - iVar3 = 0; - do { - gUnknown_203B35C->unk1C0[iVar3 * 2] = 0; - // Add statements of index flip but ends in same result - gUnknown_203B35C->unk1BC[iVar3 * 8] = 0; - iVar3 = iVar3 + 1; - } while (iVar3 < 2); - for(iVar4 = 0; iVar4 < 4; iVar4++){ - gUnknown_203B35C->unk15C[iVar4] = gUnknown_80E653C; + for(index1 = 0; index1 < 2; index1++) + { + gUnknown_203B35C->unk1BC[index1].numItems = 0; + gUnknown_203B35C->unk1BC[index1].itemIndex.itemIndex_u8 = ITEM_NOTHING; + } + for(index2 = 0; index2 < 4; index2++){ + gUnknown_203B35C->unk15C[index2] = gUnknown_80E653C; } ResetUnusedInputStruct(); sub_800641C(gUnknown_203B35C->unk15C,1,1); - SetMenuItems(gUnknown_203B35C->unk1C,gUnknown_203B35C->unk15C,0,&gUnknown_80E6CD0,gUnknown_80E6CE8,0, - 6,0); + SetMenuItems(gUnknown_203B35C->unk1C,gUnknown_203B35C->unk15C,0,&gUnknown_80E6CD0,gUnknown_80E6CE8,0,6,0); sub_8035CF4(gUnknown_203B35C->unk1C,0,1); sub_80376CC(); } -#else -NAKED -void sub_8036FDC(s32 param_1) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r8\n" - "\tpush {r7}\n" - "\tsub sp, 0x10\n" - "\tadds r6, r0, 0\n" - "\tbl ResetUnusedInputStruct\n" - "\tmovs r0, 0\n" - "\tmovs r1, 0x1\n" - "\tmovs r2, 0x1\n" - "\tbl sub_800641C\n" - "\tmovs r0, 0\n" - "\tbl ResetSprites\n" - "\tldr r5, _080370C0\n" - "\tldr r0, [r5]\n" - "\tcmp r0, 0\n" - "\tbne _08037016\n" - "\tldr r4, _080370C4\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0x8\n" - "\tbl MemoryAlloc\n" - "\tstr r0, [r5]\n" - "\tmovs r1, 0\n" - "\tadds r2, r4, 0\n" - "\tbl MemoryFill8\n" -"_08037016:\n" - "\tldr r0, [r5]\n" - "\tstr r6, [r0]\n" - "\tmovs r1, 0\n" - "\tstr r1, [r0, 0x4]\n" - "\tstr r1, [r0, 0x8]\n" - "\tmovs r3, 0\n" - "\tadds r7, r5, 0\n" - "\tmovs r6, 0xE0\n" - "\tlsls r6, 1\n" - "\tmovs r4, 0\n" - "\tmovs r5, 0xDE\n" - "\tlsls r5, 1\n" -"_0803702E:\n" - "\tldr r0, [r7]\n" - "\tlsls r2, r3, 3\n" - "\tadds r1, r0, r6\n" - "\tadds r1, r2\n" - "\tstr r4, [r1]\n" - "\tadds r0, r2\n" - "\tadds r0, r5\n" - "\tstrb r4, [r0]\n" - "\tadds r3, 0x1\n" - "\tcmp r3, 0x1\n" - "\tble _0803702E\n" - "\tldr r0, _080370C0\n" - "\tmov r12, r0\n" - "\tmovs r5, 0xAE\n" - "\tlsls r5, 1\n" - "\tmov r8, r5\n" - "\tldr r4, _080370C8\n" - "\tmovs r3, 0\n" - "\tmovs r2, 0x3\n" -"_08037054:\n" - "\tmov r6, r12\n" - "\tldr r1, [r6]\n" - "\tadds r1, r3\n" - "\tadd r1, r8\n" - "\tadds r0, r4, 0\n" - "\tldm r0!, {r5-r7}\n" - "\tstm r1!, {r5-r7}\n" - "\tldm r0!, {r5-r7}\n" - "\tstm r1!, {r5-r7}\n" - "\tadds r3, 0x18\n" - "\tsubs r2, 0x1\n" - "\tcmp r2, 0\n" - "\tbge _08037054\n" - "\tmovs r6, 0\n" - "\tbl ResetUnusedInputStruct\n" - "\tldr r5, _080370C0\n" - "\tldr r0, [r5]\n" - "\tmovs r4, 0xAE\n" - "\tlsls r4, 1\n" - "\tadds r0, r4\n" - "\tmovs r1, 0x1\n" - "\tmovs r2, 0x1\n" - "\tbl sub_800641C\n" - "\tldr r1, [r5]\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0x1C\n" - "\tadds r1, r4\n" - "\tldr r3, _080370CC\n" - "\tldr r2, _080370D0\n" - "\tstr r2, [sp]\n" - "\tstr r6, [sp, 0x4]\n" - "\tmovs r2, 0x6\n" - "\tstr r2, [sp, 0x8]\n" - "\tstr r6, [sp, 0xC]\n" - "\tmovs r2, 0\n" - "\tbl SetMenuItems\n" - "\tldr r0, [r5]\n" - "\tadds r0, 0x1C\n" - "\tmovs r1, 0\n" - "\tmovs r2, 0x1\n" - "\tbl sub_8035CF4\n" - "\tbl sub_80376CC\n" - "\tadd sp, 0x10\n" - "\tpop {r3}\n" - "\tmov r8, r3\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_080370C0: .4byte gUnknown_203B35C\n" -"_080370C4: .4byte 0x00000504\n" -"_080370C8: .4byte gUnknown_80E653C\n" -"_080370CC: .4byte gUnknown_80E6CD0\n" -"_080370D0: .4byte gUnknown_80E6CE8"); -} -#endif void sub_80370D4(void) { @@ -753,3 +664,209 @@ struct unkStruct_203B35C *sub_80373F4(void) { return gUnknown_203B35C; } + +void sub_8037400(void) +{ + u8 mailIndex; + void *r5; + void *r6; + s32 species; + struct unkStruct_8035D94 *puVar5; + struct unkStruct_8035D94 *puVar6; + + r6 = NULL; + r5 = NULL; + sub_8037810(); + sub_8011830(); + gUnknown_203B35C->linkStatus = sub_8037B28(gUnknown_203B35C->unk0); + if (gUnknown_203B35C->linkStatus == COMMS_GOOD) + { + switch(gUnknown_203B35C->unk0) { + case 10: + r6 = &gUnknown_203B35C->unk39C; + r5 = &gUnknown_203B35C->unk450; + break; + case 9: + r6 = &gUnknown_203B35C->unk39C; + r5 = &gUnknown_203B35C->unk450; + break; + case 0: + { +#ifndef NONMATCING + register u32 temp1 asm("r1"); +#else + u32 temp1; +#endif + puVar5 = sub_8035D94(); + puVar6 = &gUnknown_203B35C->unk1BC[0]; + temp1 = puVar5->numItems; + puVar6->itemIndex.itemIndex_u32 = puVar5->itemIndex.itemIndex_u32; + puVar6->numItems = temp1; + } + r6 = &gUnknown_203B35C->unk1BC[0]; + r5 = &gUnknown_203B35C->unk1BC[1]; + break; + case 1: + r6 = &gUnknown_203B35C->unk1BC[0]; + r5 = &gUnknown_203B35C->unk1BC[1]; + break; + case 7: + r6 = &gUnknown_203B35C->unk1CC; + r5 = &gUnknown_203B35C->unk1FC; + break; + case 6: + mailIndex = sub_8035D74(); + gUnknown_203B35C->unk1CC = *GetMailatIndex(mailIndex); + r6 = &gUnknown_203B35C->unk1CC; + r5 = &gUnknown_203B35C->unk1FC; + break; + case 3: + r6 = &gUnknown_203B35C->unk22C; + r5 = &gUnknown_203B35C->unk25C; + break; + case 2: + mailIndex = sub_8035D74(); + gUnknown_203B35C->unk22C = *GetMailatIndex(mailIndex); + r6 = &gUnknown_203B35C->unk22C; + r5 = &gUnknown_203B35C->unk25C; + break; + case 4: + mailIndex = sub_8035D74(); + gUnknown_203B35C->unk28C = *GetMailatIndex(mailIndex); + if( sub_8035D3C() << 0x10 != 0xffff0000) + { + species = sub_8035D3C(); + gUnknown_203B35C->unk2BC = gRecruitedPokemonRef->pokemon[(s16)species]; + } + r6 = &gUnknown_203B35C->unk28C; + r5 = &gUnknown_203B35C->unk314; + break; + case 5: + r6 = &gUnknown_203B35C->unk28C; + r5 = &gUnknown_203B35C->unk314; + break; + } + gUnknown_203B35C->linkStatus = sub_8037D64(gUnknown_203B35C->unk0, r6, r5); + + if (gUnknown_203B35C->linkStatus == COMMS_GOOD) + { + switch(gUnknown_203B35C->unk0) { + case 0: + case 1: + r6 = &gUnknown_203B35C->unk1BC[0]; + r5 = &gUnknown_203B35C->unk1BC[1]; + break; + case 2: + case 3: + r6 = &gUnknown_203B35C->unk22C; + r5 = &gUnknown_203B35C->unk25C; + break; + case 4: + case 5: + r6 = &gUnknown_203B35C->unk28C; + r5 = &gUnknown_203B35C->unk314; + break; + case 6: + case 7: + r6 = &gUnknown_203B35C->unk1CC; + r5 = &gUnknown_203B35C->unk1FC; + break; + case 9: + case 10: + r6 = &gUnknown_203B35C->unk39C; + r5 = &gUnknown_203B35C->unk450; + break; + } + gUnknown_203B35C->linkStatus = sub_80381F4(gUnknown_203B35C->unk0, r6, r5); + } + } + xxx_call_start_bg_music(); +} + +void sub_80376CC(void) +{ +#ifdef NONMATCHING + u32 r0; + u32 r2; +#else + register u32 r0 asm("r0"); + register u32 r2 asm("r2"); +#endif + u32 r1; + u32 r4; + + + r1 = gUnknown_203B35C->unkC.unk0; + r0 = 0xfeff; + r0 &= r1; + r0 &= 0xfdff; + r0 &= 0xf3ff; + r0 &= 0xefff; + r0 &= 0xdfff; + r2 = 0x4000; + r0 &= 0x3fff; + r0 |= r2; + gUnknown_203B35C->unkC.unk0 = r0; + + r2 = 0x3F0; + r1 = gUnknown_203B35C->unkC.unk4; + r0 = 0xFC00; + r0 &= r1; + r0 |= r2; + r0 &= 0xf3ff; + r2 = 0xF; + r4 = 0xF000; + r0 &= 0xfff; + r0 |= r4; + + gUnknown_203B35C->unkC.unk4 = r0; + r0 = 0; + gUnknown_203B35C->unkC.unk2 = r0; + + r1 = 0xC00; + r0 = gUnknown_203B35C->unkC.unk6; + r2 &= r0; + r2 |= r1; + gUnknown_203B35C->unkC.unk6 = r2; + +} + +void sub_8037748(void) +{ + u32 temp2; + + gUnknown_203B35C->unkC.unk2 = (gUnknown_203B35C->unkC.unk2 & 0xfe00) | 0x70; + + temp2 = 0x680; + gUnknown_203B35C->unkC.unk6 = (gUnknown_203B35C->unkC.unk6 & 0xf) | temp2; + + if ((gUnknown_203B35C->unk14 & 8) != 0) { + AddSprite(&gUnknown_203B35C->unkC,0x100,0,0x0); + } + xxx_draw_string_80144C4(); + gUnknown_203B35C->unk14++; +} + +u32 sub_8037798(void) +{ + u32 nextMenu = MENU_NO_SCREEN_CHANGE; + switch(gUnknown_203B35C->unk0) { + case 0: + case 1: + nextMenu = MENU_MAIN_SCREEN; + break; + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + nextMenu = (gUnknown_203B35C->linkStatus == COMMS_GOOD) ? 0x2A : MENU_MAIN_SCREEN; + break; + case 9: + case 10: + nextMenu = (gUnknown_203B35C->linkStatus == COMMS_GOOD) ? 0x2B : MENU_WONDER_MAIL; + break; + } + return nextMenu; +} From ba6c9b1a5647301b3ccafa51bd2ce007d48666df Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 17 Jul 2023 11:22:44 -0700 Subject: [PATCH 03/26] continue decomping link functions --- asm/other_menus.s | 288 ------------------------------------- include/main_menu.h | 2 +- ld_script.txt | 1 + src/other_menus.c | 4 +- src/other_menus_1.c | 183 +++++++++++++++++++++++ src/rescue_password_menu.c | 4 +- 6 files changed, 189 insertions(+), 293 deletions(-) create mode 100644 src/other_menus_1.c diff --git a/asm/other_menus.s b/asm/other_menus.s index 2e4350635..652877b0c 100644 --- a/asm/other_menus.s +++ b/asm/other_menus.s @@ -1071,292 +1071,4 @@ _08038070: .4byte gTeamInventory_203B460 _08038074: .4byte 0x000003e7 thumb_func_end sub_8038014 - thumb_func_start sub_8038078 -sub_8038078: - push {r4-r6,lr} - adds r5, r0, 0 - adds r4, r1, 0 - bl sub_800D588 - lsls r0, 24 - cmp r0, 0 - bne _0803808A - adds r4, r5, 0 -_0803808A: - ldr r6, [r4, 0x10] - ldr r0, _08038098 - ldr r0, [r0] - cmp r0, 0 - beq _0803809C - ldr r5, [r0, 0x50] - b _080380A2 - .align 2, 0 -_08038098: .4byte gUnknown_203B184 -_0803809C: - bl sub_8011C34 - adds r5, r0, 0 -_080380A2: - movs r0, 0x4 - adds r1, r6, 0 - bl HasMail - lsls r0, 24 - cmp r0, 0 - beq _080380BA - ldr r0, [r4, 0x28] - cmp r0, r5 - bne _080380BA - movs r0, 0 - b _080380BC -_080380BA: - movs r0, 0xB -_080380BC: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8038078 - - thumb_func_start sub_80380C4 -sub_80380C4: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - bl sub_800D588 - lsls r0, 24 - adds r5, r4, 0 - cmp r0, 0 - bne _080380D8 - adds r5, r6, 0 -_080380D8: - ldr r4, [r5, 0x10] - movs r0, 0x2 - adds r1, r4, 0 - bl HasMail - lsls r0, 24 - cmp r0, 0 - bne _08038110 - movs r0, 0x4 - adds r1, r4, 0 - bl HasMail - lsls r0, 24 - cmp r0, 0 - bne _08038110 - movs r0, 0x6 - adds r1, r4, 0 - bl HasMail - lsls r0, 24 - cmp r0, 0 - bne _08038110 - ldr r0, [r5, 0x10] - bl sub_8095298 - lsls r0, 24 - cmp r0, 0 - beq _08038114 -_08038110: - movs r0, 0x7 - b _08038126 -_08038114: - bl FindOpenMailSlot - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - beq _08038124 - movs r0, 0 - b _08038126 -_08038124: - movs r0, 0xD -_08038126: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80380C4 - - thumb_func_start sub_803812C -sub_803812C: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - bl sub_800D588 - lsls r0, 24 - cmp r0, 0 - bne _0803813E - adds r4, r5, 0 -_0803813E: - ldr r1, [r4, 0x10] - movs r0, 0x1 - bl HasMail - lsls r0, 24 - cmp r0, 0 - bne _08038150 - movs r0, 0x9 - b _08038152 -_08038150: - movs r0, 0 -_08038152: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_803812C - - thumb_func_start sub_8038158 -sub_8038158: - movs r0, 0 - bx lr - thumb_func_end sub_8038158 - - thumb_func_start sub_803815C -sub_803815C: - push {r4,lr} - adds r3, r1, 0 - movs r4, 0 - cmp r0, 0xA - bhi _080381D2 - lsls r0, 2 - ldr r1, _08038170 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08038170: .4byte _08038174 - .align 2, 0 -_08038174: - .4byte _080381A0 - .4byte _080381A0 - .4byte _080381D2 - .4byte _080381B4 - .4byte _080381D2 - .4byte _080381BE - .4byte _080381D2 - .4byte _080381AA - .4byte _080381D2 - .4byte _080381D2 - .4byte _080381C8 -_080381A0: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8038014 - b _080381D0 -_080381AA: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8038078 - b _080381D0 -_080381B4: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_80380C4 - b _080381D0 -_080381BE: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_803812C - b _080381D0 -_080381C8: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8038158 -_080381D0: - adds r4, r0, 0 -_080381D2: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_803815C - - thumb_func_start sub_80381DC -sub_80381DC: - push {lr} - bl sub_8037F9C - pop {r0} - bx r0 - thumb_func_end sub_80381DC - - thumb_func_start sub_80381E8 -sub_80381E8: - push {lr} - bl sub_803815C - pop {r1} - bx r1 - thumb_func_end sub_80381E8 - - thumb_func_start sub_80381F4 -sub_80381F4: - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - adds r7, r2, 0 - movs r4, 0 - bl sub_803815C - str r0, [sp] - ldr r0, _08038218 - str r4, [r0] - bl sub_800D494 - mov r0, sp - movs r1, 0x4 - bl sub_800D59C - b _0803822E - .align 2, 0 -_08038218: .4byte gUnknown_202EC4C -_0803821C: - subs r0, r4, 0x3 - cmp r0, 0x2 - bls _08038272 - ldr r1, _08038250 - ldr r0, [r1] - cmp r0, 0x63 - bgt _0803827E - adds r0, 0x1 - str r0, [r1] -_0803822E: - bl sub_80373C4 - bl sub_800D33C - adds r4, r0, 0 - bl sub_800D570 - cmp r4, 0x2 - bne _0803821C - bl sub_800D600 - lsls r0, 24 - cmp r0, 0 - beq _08038254 - bl sub_8037DF0 - b _0803825E - .align 2, 0 -_08038250: .4byte gUnknown_202EC4C -_08038254: - bl sub_800D520 - bl sub_800D510 - movs r0, 0x5 -_0803825E: - str r0, [sp] - ldr r0, [sp] - cmp r0, 0 - bne _0803828A - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r7, 0 - bl sub_8037F9C - b _08038292 -_08038272: - bl sub_800D520 - bl sub_800D510 - movs r0, 0x1 - b _08038298 -_0803827E: - bl sub_800D520 - bl sub_800D510 - movs r0, 0xF - b _08038298 -_0803828A: - bl sub_800D520 - bl sub_800D510 -_08038292: - bl sub_800D520 - ldr r0, [sp] -_08038298: - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80381F4 - .align 2,0 diff --git a/include/main_menu.h b/include/main_menu.h index 606b6086b..3bcc50339 100644 --- a/include/main_menu.h +++ b/include/main_menu.h @@ -40,7 +40,7 @@ struct unkStruct_8035D94 u8 itemIndex_u8; u32 itemIndex_u32; } itemIndex; - u32 numItems; + s32 numItems; }; struct MainMenuSub diff --git a/ld_script.txt b/ld_script.txt index 700f231d3..9a6a8c802 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -155,6 +155,7 @@ SECTIONS { src/trade_items_menu.o(.text); src/other_menus.o(.text); asm/other_menus.o(.text); + src/other_menus_1.o(.text); src/adventure_log_menu.o(.text); src/unk_menu_203B360.o(.text); src/save_menu.o(.text); diff --git a/src/other_menus.c b/src/other_menus.c index 336daae3f..ad97a3997 100644 --- a/src/other_menus.c +++ b/src/other_menus.c @@ -464,8 +464,8 @@ extern void TransferBGPaletteBuffer(); extern void xxx_call_update_bg_vram(); extern void sub_8009908(); extern void xxx_call_update_bg_sound_input(); -extern s32 sub_8037D64(u32, void *, void *); -extern s32 sub_80381F4(u32, void *, void *); +extern s32 sub_8037D64(u32 mode, void *, void *); +extern s32 sub_80381F4(u32 mode, void *, void *); extern void sub_8037810(void); extern void sub_8011830(void); extern s32 sub_8037B28(u32); diff --git a/src/other_menus_1.c b/src/other_menus_1.c new file mode 100644 index 000000000..f2626c190 --- /dev/null +++ b/src/other_menus_1.c @@ -0,0 +1,183 @@ +#include "global.h" +#include "constants/communication_error_codes.h" +#include "dungeon_global_data.h" +#include "pokemon.h" +#include "code_8094F88.h" +#include "save.h" + +extern s32 gCommsTimeout; // Counts to 100 and then errors if other player hasn't connected +extern s32 sub_803815C(u32, void *, void*); +extern void sub_800D494(void); +extern s32 sub_800D33C(void); +extern void sub_800D520(void); +extern u8 sub_800D600(void); +extern void sub_80373C4(void); +extern void sub_800D59C(s32 *, u32); +extern void sub_800D570(void); +extern void sub_800D510(void); +extern s32 sub_8037DF0(void); +extern void sub_8037F9C(u32, u8 *, u8 *); + +extern s32 sub_8038014(void *param_2,void *param_3); +extern u8 sub_800D588(void); +extern struct UnkStruct_203B184 *gUnknown_203B184; + +s32 sub_8038078(struct unkStruct_203B480 *param_1,struct unkStruct_203B480 *param_2) +{ + u32 uVar2; + u32 uVar3; + + if (sub_800D588() == 0) { + param_2 = param_1; + } + uVar3 = (param_2->unk10).unk10; + if (gUnknown_203B184 != NULL) { + uVar2 = gUnknown_203B184->unk050; + } + else { + uVar2 = sub_8011C34(); + } + if (HasMail(4,uVar3) && (param_2->unk28 == uVar2)) { + return COMMS_GOOD; + } + else { + return COMMS_NOT_ELIGIBLE_2; + } +} + +s32 sub_80380C4(struct unkStruct_203B480 *param_1,struct unkStruct_203B480 *param_2) +{ + u32 uVar2; + struct unkStruct_203B480 *mail; + + if (sub_800D588() == 0) { + mail = param_1; + } + else + mail = param_2; + + uVar2 = mail->unk10.unk10; + if (HasMail(2,uVar2) || HasMail(4,uVar2) || HasMail(6,uVar2)) + { + return COMMS_DUPLICATE_MAIL; + } + if(sub_8095298(mail->unk10.unk10)) + { + return COMMS_DUPLICATE_MAIL; + } + else if (FindOpenMailSlot() == -1) + { + return COMMS_NO_ROOM_MAIL; + } + else + { + return COMMS_GOOD; + } +} + +s32 sub_803812C(struct unkStruct_203B480 *param_1, struct unkStruct_203B480 *param_2) +{ + if (sub_800D588() == 0) { + param_2 = param_1; + } + if (HasMail(1, (param_2->unk10).unk10)) { + return COMMS_GOOD; + } + else { + return COMMS_NOT_ELIGIBLE_1; + } +} + +s32 sub_8038158(void *param_1, void *param_2) +{ + return COMMS_GOOD; +} + +s32 sub_803815C(u32 mode, void *param_2, void *param_3) +{ + s32 linkStatus; + + linkStatus = COMMS_GOOD; + switch(mode) { + case 0: + case 1: + linkStatus = sub_8038014(param_2, param_3); + break; + case 7: + linkStatus = sub_8038078(param_2, param_3); + break; + case 3: + linkStatus = sub_80380C4(param_2, param_3); + break; + case 5: + linkStatus = sub_803812C(param_2, param_3); + break; + case 10: + linkStatus = sub_8038158(param_2, param_3); + break; + } + return linkStatus; +} + +void sub_80381DC(u32 mode, void * param_2, void * param_3) +{ + sub_8037F9C(mode, param_2, param_3); +} + +s32 sub_80381E8(u32 mode, void * param_2, void * param_3) +{ + return sub_803815C(mode, param_2, param_3); +} + +// TODO: clean this up +s32 sub_80381F4(u32 mode, void * param_2, void * param_3) +{ + u32 iVar2; + s32 linkStatus; + + iVar2 = 0; + linkStatus = sub_803815C(mode, param_2, param_3); + gCommsTimeout = 0; + sub_800D494(); + sub_800D59C(&linkStatus, 4); + goto _first; +_start: + while (iVar2 - 3 > 2) { + if (99 < gCommsTimeout) { + sub_800D520(); + sub_800D510(); + return COMMS_NOT_READY; + } + gCommsTimeout++; + _first: + sub_80373C4(); + iVar2 = sub_800D33C(); + sub_800D570(); + if (iVar2 == 2) { + if (sub_800D600() != 0) { + linkStatus = sub_8037DF0(); + } + else { + sub_800D520(); + sub_800D510(); + linkStatus = 5; + } + if (linkStatus != COMMS_GOOD) { + sub_800D520(); + sub_800D510(); + } + else { + sub_8037F9C(mode, param_2, param_3); + } + goto _end; + } + else + goto _start; + } + sub_800D520(); + sub_800D510(); + return 1; +_end: + sub_800D520(); + return linkStatus; +} diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index 7e4aa53f1..7efffd7a3 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -14,7 +14,7 @@ #define RESCUE_PASSWORD_SIZE 0x36 -EWRAM_DATA u32 gUnknown_202EC4C = {0}; +EWRAM_DATA s32 gCommsTimeout = {0}; EWRAM_DATA u8 gRescuePasswordBuffer[RESCUE_PASSWORD_SIZE] = {0}; extern struct unkStruct_203B484 *gUnknown_203B484; @@ -760,4 +760,4 @@ void sub_80391F8(void) } xxx_draw_string_80144C4(); gRescuePasswordMenu->unk210 += 1; -} \ No newline at end of file +} From 6d2738cf489a3a12265cdd154ebf74a106905c7a Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 17 Jul 2023 11:25:37 -0700 Subject: [PATCH 04/26] Matched sub_8038014 thanks to @jiangzhengwenjz --- asm/other_menus.s | 55 --------------------------------------------- src/other_menus_1.c | 48 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 56 deletions(-) diff --git a/asm/other_menus.s b/asm/other_menus.s index 652877b0c..a40d60734 100644 --- a/asm/other_menus.s +++ b/asm/other_menus.s @@ -1016,59 +1016,4 @@ _08038010: bx r0 thumb_func_end sub_8037F9C - thumb_func_start sub_8038014 -sub_8038014: - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - bl sub_800D588 - lsls r0, 24 - adds r4, r6, 0 - cmp r0, 0 - bne _08038028 - adds r4, r5, 0 -_08038028: - bl sub_800D588 - lsls r0, 24 - adds r3, r5, 0 - cmp r0, 0 - bne _08038036 - adds r3, r6, 0 -_08038036: - ldrb r0, [r4] - ldrb r1, [r3] - cmp r0, r1 - bne _0803804C - ldr r0, _08038048 - ldr r1, [r0] - ldrb r0, [r4] - b _08038052 - .align 2, 0 -_08038048: .4byte gTeamInventory_203B460 -_0803804C: - ldr r0, _08038070 - ldr r1, [r0] - ldrb r0, [r3] -_08038052: - lsls r0, 1 - adds r1, 0x50 - adds r1, r0 - ldrh r2, [r1] - ldr r0, [r3, 0x4] - adds r2, r0 - ldr r0, _08038074 - movs r1, 0 - cmp r2, r0 - ble _08038068 - movs r1, 0x6 -_08038068: - adds r0, r1, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08038070: .4byte gTeamInventory_203B460 -_08038074: .4byte 0x000003e7 - thumb_func_end sub_8038014 - .align 2,0 diff --git a/src/other_menus_1.c b/src/other_menus_1.c index f2626c190..fad568adf 100644 --- a/src/other_menus_1.c +++ b/src/other_menus_1.c @@ -4,6 +4,8 @@ #include "pokemon.h" #include "code_8094F88.h" #include "save.h" +#include "team_inventory.h" +#include "main_menu.h" extern s32 gCommsTimeout; // Counts to 100 and then errors if other player hasn't connected extern s32 sub_803815C(u32, void *, void*); @@ -18,10 +20,54 @@ extern void sub_800D510(void); extern s32 sub_8037DF0(void); extern void sub_8037F9C(u32, u8 *, u8 *); -extern s32 sub_8038014(void *param_2,void *param_3); extern u8 sub_800D588(void); extern struct UnkStruct_203B184 *gUnknown_203B184; +s32 sub_8038014(struct unkStruct_8035D94 *param_1,struct unkStruct_8035D94 *param_2) +{ + s32 linkStatus; + s32 r2; + struct unkStruct_8035D94 *r3; + struct unkStruct_8035D94 *r4; + + if (sub_800D588() == 0) { + r4 = param_2; + } + else + { + r4 = param_1; + } + + if (sub_800D588() == 0) { + r3 = param_1; + } + else + { + r3 = param_2; + } + + if ((r4->itemIndex).itemIndex_u8 == (r3->itemIndex).itemIndex_u8) { + r2 = gTeamInventory_203B460->teamStorage[r4->itemIndex.itemIndex_u8]; + r2 += r3->numItems; + if (r2 > 999) { + linkStatus = COMMS_NO_ROOM_STORAGE; + } + else + linkStatus = COMMS_GOOD; + } + else { + r2 = gTeamInventory_203B460->teamStorage[r3->itemIndex.itemIndex_u8]; + r2 += r3->numItems; + if (r2 > 999) { + linkStatus = COMMS_NO_ROOM_STORAGE; + } + else + linkStatus = COMMS_GOOD; + + } + return linkStatus; +} + s32 sub_8038078(struct unkStruct_203B480 *param_1,struct unkStruct_203B480 *param_2) { u32 uVar2; From c468247aaafa90e654a54b64b4fe044af6fc4586 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 17 Jul 2023 17:42:17 -0700 Subject: [PATCH 05/26] actually commit sub_8038014 and a few more --- asm/other_menus.s | 514 --------- include/code_8094F88.h | 5 +- src/code_8094F88.c | 16 +- src/friend_rescue_1.c | 2036 +++++++++++++++++++++++++++++++++++ src/other_menus_1.c | 327 +++++- src/rescue_password_menu.c | 4 +- src/thank_you_wonder_mail.c | 8 +- src/wonder_mail_5.c | 4 +- src/wonder_mail_6.c | 2 +- 9 files changed, 2343 insertions(+), 573 deletions(-) create mode 100644 src/friend_rescue_1.c diff --git a/asm/other_menus.s b/asm/other_menus.s index a40d60734..478937ce6 100644 --- a/asm/other_menus.s +++ b/asm/other_menus.s @@ -502,518 +502,4 @@ _08037C08: bx r1 thumb_func_end sub_8037B28 - thumb_func_start sub_8037C10 -sub_8037C10: - push {lr} - lsls r0, 24 - cmp r0, 0 - beq _08037C24 - bl sub_800D588 - lsls r0, 24 - cmp r0, 0 - bne _08037C38 - b _08037C2E -_08037C24: - bl sub_800D588 - lsls r0, 24 - cmp r0, 0 - beq _08037C38 -_08037C2E: - ldr r0, _08037C34 - ldr r0, [r0, 0x4] - b _08037C3C - .align 2, 0 -_08037C34: .4byte gUnknown_202EC40 -_08037C38: - ldr r0, _08037C40 - ldr r0, [r0] -_08037C3C: - pop {r1} - bx r1 - .align 2, 0 -_08037C40: .4byte gUnknown_202EC40 - thumb_func_end sub_8037C10 - - thumb_func_start sub_8037C44 -sub_8037C44: - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - movs r4, 0 -_08037C4C: - adds r0, r4, 0 - bl sub_800D68C - adds r4, 0x1 - cmp r4, 0x1 - ble _08037C4C - cmp r6, 0xA - bhi _08037CBE - lsls r0, r6, 2 - ldr r1, _08037C68 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08037C68: .4byte _08037C6C - .align 2, 0 -_08037C6C: - .4byte _08037C98 - .4byte _08037C98 - .4byte _08037CA2 - .4byte _08037CA2 - .4byte _08037CAC - .4byte _08037CAC - .4byte _08037CA2 - .4byte _08037CA2 - .4byte _08037CBE - .4byte _08037CB6 - .4byte _08037CB6 -_08037C98: - adds r0, r5, 0 - movs r1, 0x8 - bl sub_800D59C - b _08037CBE -_08037CA2: - adds r0, r5, 0 - movs r1, 0x30 - bl sub_800D59C - b _08037CBE -_08037CAC: - adds r0, r5, 0 - movs r1, 0x88 - bl sub_800D59C - b _08037CBE -_08037CB6: - adds r0, r5, 0 - movs r1, 0xB4 - bl sub_800D59C -_08037CBE: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8037C44 - - thumb_func_start sub_8037CC4 -sub_8037CC4: - push {r4,lr} - adds r3, r1, 0 - adds r4, r2, 0 - cmp r0, 0xA - bhi _08037D5E - lsls r0, 2 - ldr r1, _08037CD8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08037CD8: .4byte _08037CDC - .align 2, 0 -_08037CDC: - .4byte _08037D08 - .4byte _08037D08 - .4byte _08037D1E - .4byte _08037D1E - .4byte _08037D34 - .4byte _08037D34 - .4byte _08037D1E - .4byte _08037D1E - .4byte _08037D5E - .4byte _08037D4A - .4byte _08037D4A -_08037D08: - movs r0, 0 - adds r1, r3, 0 - movs r2, 0x8 - bl sub_800D670 - movs r0, 0x1 - adds r1, r4, 0 - movs r2, 0x8 - bl sub_800D670 - b _08037D5E -_08037D1E: - movs r0, 0 - adds r1, r3, 0 - movs r2, 0x30 - bl sub_800D670 - movs r0, 0x1 - adds r1, r4, 0 - movs r2, 0x30 - bl sub_800D670 - b _08037D5E -_08037D34: - movs r0, 0 - adds r1, r3, 0 - movs r2, 0x88 - bl sub_800D670 - movs r0, 0x1 - adds r1, r4, 0 - movs r2, 0x88 - bl sub_800D670 - b _08037D5E -_08037D4A: - movs r0, 0 - adds r1, r3, 0 - movs r2, 0xB4 - bl sub_800D670 - movs r0, 0x1 - adds r1, r4, 0 - movs r2, 0xB4 - bl sub_800D670 -_08037D5E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8037CC4 - - thumb_func_start sub_8037D64 -sub_8037D64: - push {r4-r7,lr} - adds r5, r0, 0 - adds r6, r1, 0 - adds r7, r2, 0 - movs r4, 0 - ldr r0, _08037D80 - str r4, [r0] - bl sub_800D494 - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_8037C44 - b _08037D96 - .align 2, 0 -_08037D80: .4byte gUnknown_202EC48 -_08037D84: - subs r0, r4, 0x3 - cmp r0, 0x2 - bls _08037DBC - ldr r1, _08037DB8 - ldr r0, [r1] - cmp r0, 0x63 - bgt _08037DC8 - adds r0, 0x1 - str r0, [r1] -_08037D96: - bl sub_80373C4 - bl sub_800D33C - adds r4, r0, 0 - bl sub_800D570 - cmp r4, 0x2 - bne _08037D84 - bl sub_800D600 - lsls r0, 24 - cmp r0, 0 - beq _08037DD4 - movs r4, 0 - b _08037DDE - .align 2, 0 -_08037DB8: .4byte gUnknown_202EC48 -_08037DBC: - bl sub_800D520 - bl sub_800D510 - movs r0, 0x1 - b _08037DEA -_08037DC8: - bl sub_800D520 - bl sub_800D510 - movs r0, 0xF - b _08037DEA -_08037DD4: - bl sub_800D520 - bl sub_800D510 - movs r4, 0x5 -_08037DDE: - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r7, 0 - bl sub_8037CC4 - adds r0, r4, 0 -_08037DEA: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8037D64 - - thumb_func_start sub_8037DF0 -sub_8037DF0: - push {r4,lr} - sub sp, 0x8 - movs r4, 0 - movs r0, 0 - mov r1, sp - movs r2, 0x4 - bl sub_800D670 - add r1, sp, 0x4 - movs r0, 0x1 - movs r2, 0x4 - bl sub_800D670 - ldr r0, [sp] - cmp r0, 0 - bne _08037E16 - ldr r0, [sp, 0x4] - cmp r0, 0 - beq _08037E2C -_08037E16: - bl sub_800D588 - lsls r0, 24 - cmp r0, 0 - bne _08037E24 - ldr r4, [sp, 0x4] - b _08037E26 -_08037E24: - ldr r4, [sp] -_08037E26: - cmp r4, 0 - bne _08037E2C - movs r4, 0xE -_08037E2C: - adds r0, r4, 0 - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8037DF0 - - thumb_func_start sub_8037E38 -sub_8037E38: - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - bl sub_800D588 - lsls r0, 24 - adds r4, r6, 0 - cmp r0, 0 - bne _08037E4C - adds r4, r5, 0 -_08037E4C: - bl sub_800D588 - lsls r0, 24 - adds r3, r5, 0 - cmp r0, 0 - bne _08037E5A - adds r3, r6, 0 -_08037E5A: - ldrb r0, [r4] - ldrb r1, [r3] - cmp r0, r1 - bne _08037E70 - ldr r0, _08037E6C - ldr r1, [r0] - ldrb r0, [r4] - b _08037E76 - .align 2, 0 -_08037E6C: .4byte gTeamInventory_203B460 -_08037E70: - ldr r0, _08037E8C - ldr r1, [r0] - ldrb r0, [r3] -_08037E76: - lsls r0, 1 - adds r1, 0x50 - adds r1, r0 - ldrh r2, [r1] - ldr r0, [r3, 0x4] - adds r2, r0 - strh r2, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08037E8C: .4byte gTeamInventory_203B460 - thumb_func_end sub_8037E38 - - thumb_func_start sub_8037E90 -sub_8037E90: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - bl sub_800D588 - lsls r0, 24 - cmp r0, 0 - bne _08037EA2 - adds r4, r5, 0 -_08037EA2: - movs r0, 0x2 - strb r0, [r4] - adds r0, r4, 0 - bl sub_80951BC - ldr r0, [r4, 0x10] - bl sub_8095274 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8037E90 - - thumb_func_start nullsub_53 -nullsub_53: - bx lr - thumb_func_end nullsub_53 - - thumb_func_start sub_8037EBC -sub_8037EBC: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - bl sub_800D588 - lsls r0, 24 - adds r5, r4, 0 - cmp r0, 0 - bne _08037ED0 - adds r5, r6, 0 -_08037ED0: - ldr r1, [r5, 0x10] - movs r0, 0x1 - bl GetMailIndex - lsls r0, 24 - lsrs r0, 24 - bl GetMailatIndex - adds r4, r0, 0 - adds r1, r4, 0 - adds r0, r5, 0 - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - movs r0, 0x5 - strb r0, [r4] - adds r0, r4, 0 - bl sub_80951FC - movs r0, 0x7 - strb r0, [r4] - movs r0, 0x38 - ldrsh r6, [r5, r0] - cmp r6, 0 - beq _08037F30 - ldr r4, _08037F2C - ldr r0, [r4] - ldr r1, [r5, 0x10] - stm r0!, {r1} - adds r1, r5, 0 - adds r1, 0x30 - movs r2, 0x58 - bl memcpy - ldr r1, [r4] - movs r0, 0x42 - strb r0, [r1, 0x8] - ldr r1, [r4] - movs r0, 0x1 - strb r0, [r1, 0x9] - b _08037F40 - .align 2, 0 -_08037F2C: .4byte gUnknown_203B484 -_08037F30: - ldr r4, _08037F48 - ldr r0, [r4] - movs r1, 0 - movs r2, 0x5C - bl MemoryFill8 - ldr r0, [r4] - strh r6, [r0, 0xC] -_08037F40: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08037F48: .4byte gUnknown_203B484 - thumb_func_end sub_8037EBC - - thumb_func_start sub_8037F4C -sub_8037F4C: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - bl sub_800D588 - lsls r0, 24 - cmp r0, 0 - bne _08037F5E - adds r4, r5, 0 -_08037F5E: - ldr r1, [r4, 0x10] - movs r0, 0x4 - bl GetMailIndex - lsls r0, 24 - lsrs r0, 24 - bl GetMailatIndex - adds r2, r0, 0 - adds r1, r4, 0 - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - movs r1, 0x6 - strb r1, [r0] - bl GetMainMenu - cmp r0, 0 - beq _08037F96 - adds r1, r0, 0 - adds r1, 0x3A - movs r0, 0x1 - strb r0, [r1] -_08037F96: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8037F4C - - thumb_func_start sub_8037F9C -sub_8037F9C: - push {lr} - adds r3, r1, 0 - cmp r0, 0xA - bhi _08038010 - lsls r0, 2 - ldr r1, _08037FB0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08037FB0: .4byte _08037FB4 - .align 2, 0 -_08037FB4: - .4byte _08037FE0 - .4byte _08037FE0 - .4byte _08038010 - .4byte _08037FF4 - .4byte _08038010 - .4byte _08037FFE - .4byte _08038010 - .4byte _08037FEA - .4byte _08038010 - .4byte _08038010 - .4byte _08038008 -_08037FE0: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8037E38 - b _08038010 -_08037FEA: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8037F4C - b _08038010 -_08037FF4: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8037E90 - b _08038010 -_08037FFE: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8037EBC - b _08038010 -_08038008: - adds r0, r3, 0 - adds r1, r2, 0 - bl nullsub_53 -_08038010: - pop {r0} - bx r0 - thumb_func_end sub_8037F9C - .align 2,0 diff --git a/include/code_8094F88.h b/include/code_8094F88.h index 54d78e0ea..96a87dc1d 100644 --- a/include/code_8094F88.h +++ b/include/code_8094F88.h @@ -17,13 +17,12 @@ struct unkStruct_203B480 u32 unk10; u16 unk10_u16; } unk10; - /* 0x14 */ u8 playerName[0x20 - 0x14];; - struct Item unk20; + /* 0x14 */ u8 playerName[0x20 - 0x14]; + struct Item item; u32 unk24; u32 unk28; /* 0x2C */ s8 rescuesAllowed; u8 unk2D; - u8 padding4[0x30 - 0x2E]; }; // size: 0x5C diff --git a/src/code_8094F88.c b/src/code_8094F88.c index 00912dd0a..b2d2532c0 100644 --- a/src/code_8094F88.c +++ b/src/code_8094F88.c @@ -72,7 +72,7 @@ void sub_8095118(void) unused = &gUnknown_203B480[index]; gUnknown_203B480[index].mailType = WONDER_MAIL_TYPE_NONE; unused = &gUnknown_203B480[index]; - gUnknown_203B480[index].unk20.id = ITEM_NOTHING; + gUnknown_203B480[index].item.id = ITEM_NOTHING; unused = &gUnknown_203B480[index]; gUnknown_203B480[index].unk2D = 0; } @@ -152,7 +152,7 @@ void DeleteMailAtIndex(u8 index) unused = &gUnknown_203B480[index]; gUnknown_203B480[index].mailType = 0; unused = &gUnknown_203B480[index]; - gUnknown_203B480[index].unk20.id = 0; + gUnknown_203B480[index].item.id = 0; } void sub_8095274(u32 param_1) @@ -424,9 +424,9 @@ void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b) RestoreIntegerBits(a, &b->clientSpecies, 0x9); RestoreIntegerBits(a, &b->unk10.unk10, 0x20); RestoreIntegerBits(a, &b->playerName, 0x50); - RestoreIntegerBits(a, &b->unk20.flags, 0x8); - RestoreIntegerBits(a, &b->unk20.quantity, 0x8); - RestoreIntegerBits(a, &b->unk20.id, 0x8); + RestoreIntegerBits(a, &b->item.flags, 0x8); + RestoreIntegerBits(a, &b->item.quantity, 0x8); + RestoreIntegerBits(a, &b->item.id, 0x8); RestoreIntegerBits(a, &b->unk24, 0x20); RestoreIntegerBits(a, &b->unk28, 0x20); RestoreIntegerBits(a, &b->rescuesAllowed, 0x8); @@ -449,9 +449,9 @@ void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b) SaveIntegerBits(a, &b->clientSpecies, 0x9); SaveIntegerBits(a, &b->unk10.unk10, 0x20); SaveIntegerBits(a, &b->playerName, 0x50); - SaveIntegerBits(a, &b->unk20.flags, 0x8); - SaveIntegerBits(a, &b->unk20.quantity, 0x8); - SaveIntegerBits(a, &b->unk20.id, 0x8); + SaveIntegerBits(a, &b->item.flags, 0x8); + SaveIntegerBits(a, &b->item.quantity, 0x8); + SaveIntegerBits(a, &b->item.id, 0x8); SaveIntegerBits(a, &b->unk24, 0x20); SaveIntegerBits(a, &b->unk28, 0x20); SaveIntegerBits(a, &b->rescuesAllowed, 0x8); diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c new file mode 100644 index 000000000..c253d9740 --- /dev/null +++ b/src/friend_rescue_1.c @@ -0,0 +1,2036 @@ +#include "global.h" +#include "constants/communication_error_codes.h" +#include "constants/monster.h" +#include "constants/wonder_mail.h" +#include "text.h" +#include "input.h" +#include "item.h" +#include "team_inventory.h" +#include "pokemon.h" +#include "friend_rescue.h" +#include "memory.h" +#include "save.h" +#include "menu.h" +#include "rescue_password_menu.h" +#include "menu_input.h" +#include "code_8094F88.h" + + +extern struct TeamInventory *gTeamInventory_203B460; + +extern void SetFriendRescueMenuState(u32); +extern s32 sub_80144A4(s32 *); +extern void sub_802F2C0(); +extern u32 sub_802F298(); + +extern char gUnknown_202E5D8[0x50]; +extern char gAvailablePokemonNames[0x50]; + +extern struct WonderMailStruct_203B33C *gUnknown_203B33C; + +extern u8 sub_801CF14(u32); + +extern u8 gUnknown_80E48A8[]; +extern u8 gUnknown_80E49C4[]; +extern u8 gUnknown_80E4704[]; +extern u8 gUnknown_80E48E8[]; +extern u8 gUnknown_80E4928[]; +extern u8 gUnknown_80E4964[]; +extern u8 gUnknown_80E499C[]; +extern u8 gUnknown_80E460C[]; +extern u8 gUnknown_80E31FC[]; + + +extern u32 sub_80154F0(); +extern void sub_80155F0(); +extern void sub_80141B4(u8 *r0, u32, u32 *r1, u32); +extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u32, u32, u32, u32 *r5, u32); + +extern u32 sub_801CA08(u32); +extern void sub_801CBB8(void); +extern void sub_801CB5C(u32); +extern void sub_8035CC0(struct UnkTextStruct2 *, u32); +extern void sub_801B3C0(struct Item *); +extern u32 sub_801B410(void); +extern void sub_801B450(void); +extern void sub_8035CF4(struct MenuStruct *, u32, u32); +extern u8 sub_801CB24(void); +extern u32 sub_8030DA0(void); +extern void sub_8030DE4(void); +extern void sub_803092C(void); +extern u32 sub_8030768(u32); +extern void sub_803084C(void); +extern void sub_8030D40(u8, u32); +extern void sub_8030810(u32); +extern u8 sub_80307EC(void); + +extern u32 sub_8031DCC(void); +extern void sub_8031E10(void); +extern void sub_8031E00(void); +extern u8 sub_8024108(u32); +extern void sub_802452C(void); +extern u32 sub_80244E4(void); +extern void sub_802453C(void); +extern void sub_8023B7C(u32); +extern u32 sub_8023A94(u32); +extern void sub_8023C60(void); +extern void sub_8024458(s16, u32); +extern void sub_8023DA4(void); +extern void sub_8035D1C(void); +extern u16 sub_8023B44(void); + +extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_203B480 *r0); +extern void sub_8095274(u32); +extern u8 sub_800D588(void); +extern struct PokemonStruct *GetPlayerPokemonStruct(void); + +extern u8 gUnknown_80E44A4[]; +extern u8 gUnknown_80E4500[]; +extern u8 gUnknown_80E4550[]; +extern u8 gUnknown_80E45B4[]; +extern u8 gUnknown_80E460C[]; +extern u8 gUnknown_80E4650[]; +extern u8 gUnknown_80E468C[]; +extern u8 gUnknown_80E46C8[]; +extern u8 gUnknown_80E4704[]; +extern u8 gUnknown_80E4744[]; +extern u8 gUnknown_80E4788[]; +extern u8 gUnknown_80E47D8[]; +extern u8 gUnknown_80E4480[]; +extern u8 gUnknown_80E482C[]; +extern u8 gUnknown_80E25F4[]; +extern u8 gUnknown_80E2D7C[]; +extern u8 gUnknown_80E2E20[]; +extern u8 gUnknown_80E319C[]; +extern u8 gUnknown_80E311C[]; +extern u8 gUnknown_80E32C4[]; +extern u8 gUnknown_80E4314[]; +extern u8 gUnknown_80E41DC[]; +extern u8 gUnknown_80E2FEC[]; +extern u8 gUnknown_80E2898[]; +extern u8 gUnknown_80E2B54[]; +extern u8 gUnknown_80E29D0[]; +extern u8 gUnknown_80E3220[]; +extern u8 gUnknown_80E2A0C[]; +extern u8 gUnknown_80E2610[]; +extern u8 gUnknown_80E2640[]; +extern u8 gUnknown_80E2680[]; +extern u8 gUnknown_80E26B0[]; +extern u8 gUnknown_80E26F0[]; +extern u8 gUnknown_80E2728[]; +extern u8 gUnknown_80E3690[]; +extern u8 gUnknown_80E3818[]; +extern u8 gUnknown_80E3998[]; +extern u8 gUnknown_80E3B1C[]; +extern u8 gUnknown_80E367C[]; +extern u8 gUnknown_80E3BF8[]; +extern u8 gUnknown_80E3DE4[]; +extern u8 gUnknown_80E4014[]; +extern u8 gUnknown_80E3E98[]; +extern u8 gUnknown_80E4130[]; +extern u8 gUnknown_80E2E54[]; +extern u8 gUnknown_80E2EB4[]; +extern u8 gUnknown_80E2DD0[]; +extern u8 gUnknown_80E2FA0[]; +extern u8 gUnknown_80E2F14[]; +extern u8 gUnknown_80E2F44[]; +extern u8 gUnknown_80E30A4[]; +extern u8 gUnknown_80E2F78[]; +extern u8 gUnknown_80E360C[]; +extern u8 gUnknown_80E3644[]; +extern u8 gUnknown_80E35E8[]; +extern u8 gUnknown_80E35AC[]; +extern u8 gUnknown_80E355C[]; +extern u8 gUnknown_80E352C[]; +extern u8 gUnknown_80E34F0[]; +extern u8 gUnknown_80E34B0[]; +extern u8 gUnknown_80E3430[]; +extern u8 gUnknown_80E33D8[]; +extern u8 gUnknown_80E339C[]; +extern u8 gUnknown_80E3378[]; +extern u8 gUnknown_80E331C[]; +extern u8 gUnknown_80E3288[]; +extern u8 gUnknown_80E3248[]; +extern u8 gUnknown_80E31FC[]; +extern u8 gUnknown_80E276C[]; +extern u8 gUnknown_80E27A4[]; +extern u8 gUnknown_80E2CD4[]; +extern u8 gUnknown_80E3030[]; +extern u8 gUnknown_80E3078[]; +extern u8 gUnknown_80E31D8[]; +extern u8 gUnknown_80E2CE8[]; +extern u8 gUnknown_80E2B90[]; +extern u8 gUnknown_80E2AE4[]; +extern u8 gUnknown_80E2A80[]; +extern u8 gUnknown_80E2AA8[]; +extern u8 gUnknown_80E2D60[]; +extern u8 gUnknown_80E2BE0[]; +extern u8 gUnknown_80E2C48[]; +extern u8 gUnknown_80E29A0[]; +extern u8 gUnknown_80E2A5C[]; +extern u8 gUnknown_80E2904[]; +extern u8 gUnknown_80E2C94[]; +extern u8 gUnknown_80E2D30[]; +extern u8 gUnknown_80E296C[]; +extern u8 gUnknown_80E314C[]; +extern u8 gUnknown_80E2A1C[]; +extern u8 gUnknown_80E2840[]; +extern u8 gUnknown_80E2874[]; +extern u8 gUnknown_80E317C[]; +extern u8 gUnknown_80E28D8[]; +extern u8 gUnknown_80E2814[]; +extern u8 gUnknown_80E30D0[]; + +extern struct MenuItem gUnknown_80E20B8; +extern struct MenuItem gUnknown_80E2108; +extern struct MenuItem gUnknown_80E20E0; +extern struct MenuItem gUnknown_80E2068; +extern struct MenuItem gUnknown_80E24F8; +extern struct MenuItem gUnknown_80E2554; +extern struct MenuItem gUnknown_80E22F0; +extern struct MenuItem gUnknown_80E236C; +extern struct MenuItem gUnknown_80E2440; +extern struct MenuItem gUnknown_80E2470; +extern struct MenuItem gUnknown_80E24B0; +extern struct MenuItem gUnknown_80E2130; +extern struct MenuItem gUnknown_80E2190; +extern struct MenuItem gUnknown_80E21B8; +extern struct MenuItem gUnknown_80E2268; +extern struct MenuItem gUnknown_80E2218; +extern struct MenuItem gUnknown_80E2240; +extern struct MenuItem gUnknown_80E2290; +extern struct MenuItem gUnknown_80E22D0; +extern struct MenuItem gUnknown_80E234C; +extern struct MenuItem gUnknown_80E24D8; +extern struct MenuItem gUnknown_80E2458; +extern struct MenuItem gUnknown_80E2408; +extern struct MenuItem gUnknown_80E23A8; +extern struct MenuItem gUnknown_80E22B4; + +extern struct UnkTextStruct2 gUnknown_80E231C; +extern struct UnkTextStruct2 gUnknown_80E23F0; +extern struct UnkTextStruct2 gUnknown_80E2334; + +extern struct MenuItem gUnknown_80E25B4; + +extern void nullsub_40(); +extern void sub_8032828(); + +extern u8 sub_800D588(void); +extern void sub_8011830(void); +extern u32 sub_8030894(void); +extern void sub_8031D70(u32, u32); +extern u32 sub_8023CE8(void); +extern void sub_80922B4(u8 *buffer, u8 *string, s32 size); +extern void sub_80306A8(u32, u32, u32, u32); +extern void sub_8023868(u32, u32, u32, u32); +extern u32 sub_801D008(void); +extern void sub_8023DA4(void); +extern void sub_8023C60(void); +extern s32 sub_8037B28(u32); +extern void sub_803092C(void); +extern void sub_801CCD8(void); +extern void sub_80151C0(u32, u8 *); +extern void sub_801C8C4(u32, u32, s32 * , u32); +extern void xxx_call_start_bg_music(void); +extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32); +extern void sub_802F204(struct unkStruct_802F204 *, u32); +extern void nullsub_23(u32); +extern s32 sub_8037D64(u32, void *, void *); +extern s32 sub_80381F4(u32, void *, void *); +void sprintfStatic(char *buffer, const char *text, ...); + +extern void SetFriendRescueMenuState(u32); +extern s32 sub_80144A4(s32 *); +extern void sub_802F2C0(); +extern u32 sub_802F298(); + +extern char gUnknown_202E5D8[0x50]; +extern char gAvailablePokemonNames[0x50]; + +extern struct WonderMailStruct_203B33C *gUnknown_203B33C; + +extern u8 sub_8039880(void); + +extern void sub_8035300(void); +extern void QueueNextFriendRescueState(u32); +extern void nullsub_41(void); +extern void nullsub_42(void); +extern void nullsub_43(void); +extern void nullsub_44(void); +extern void nullsub_45(void); +extern void nullsub_46(void); +extern void nullsub_47(void); +extern void nullsub_48(void); +extern void nullsub_49(void); +extern void nullsub_50(void); +extern void nullsub_51(void); +extern void sub_8035374(void); +extern void sub_80353BC(void); +extern void sub_8033A2C(void); +extern void sub_803477C(void); +extern void sub_80347AC(void); +extern void sub_80347C8(void); +extern void sub_80347E4(void); +extern void sub_8034804(void); +extern void sub_80344C0(void); +extern void sub_8034478(void); +extern void sub_80344A0(void); +extern void sub_803418C(void); +extern void sub_8034254(void); +extern void sub_8034310(void); +extern void sub_8034378(void); +extern void sub_80343C4(void); +extern void sub_8034404(void); +extern void sub_8034500(void); +extern void sub_8034590(void); +extern void sub_803464C(void); +extern void sub_80346A8(void); +extern void sub_80346D8(void); +extern void sub_8034700(void); +extern void sub_8034720(void); +extern void sub_803473C(void); +extern void sub_8033FB4(void); +extern void sub_8034074(void); +extern void sub_8034130(void); +extern void sub_8033FE4(void); +extern void sub_8033D74(void); +extern void sub_8033D94(void); +extern void sub_8033DBC(void); +extern void sub_8033F64(void); +extern void sub_8033C54(void); +extern void sub_8033CAC(void); +extern void sub_8033D48(void); +extern void sub_8035424(void); +extern void sub_8034970(void); +extern void sub_80351E0(void); +extern void sub_8034D74(void); +extern void sub_8034EF0(void); +extern void sub_8034F38(void); +extern void sub_80352A4(void); +extern void sub_8034EC8(void); +extern void sub_8033B8C(void); +extern void sub_80339C8(void); +extern void sub_80348C4(void); +extern void sub_803482C(void); +extern void sub_80349B0(void); +extern void sub_8034A70(void); +extern void sub_8034B2C(void); +extern void sub_80349E0(void); +extern void sub_8034B88(void); +extern void sub_8034C98(void); +extern void sub_8034C38(void); +extern void sub_8034D54(void); +extern void sub_8034F18(void); +extern void sub_8034F58(void); +extern void sub_8034F88(void); +extern void sub_8035018(void); +extern void sub_8035038(void); +extern void sub_8035094(void); +extern void sub_80350F4(void); +extern void sub_803517C(void); +extern void sub_8035210(void); +extern void sub_8035430(void); +extern void sub_8034848(void); + +extern void sub_803084C(void); +extern void sub_8031E10(void); +extern void sub_8023C60(void); +extern void sub_80155F0(void); +extern void sub_801CBB8(void); +extern void sub_802F2C0(void); +extern void sub_8030DE4(void); +extern void sub_802453C(void); +extern void sub_801B450(void); + + +void SetFriendRescueMenuState(u32 newState) +{ + gUnknown_203B33C->state = newState; + nullsub_40(); + sub_8032828(); +} + +void PrintFriendRescueError(u32 status) +{ + switch(status) + { + case COMMS_GOOD: + break; + case COMMS_INCORRECT_NUM_SYSTEMS: + sub_80141B4(gUnknown_80E44A4, 0, 0, 0x101); + break; + case COMMS_NO_RESPONSE: + sub_80141B4(gUnknown_80E4500, 0, 0, 0x101); + break; + case COMMS_DIFFERENT_MODES: + sub_80141B4(gUnknown_80E4550, 0, 0, 0x101); + break; + case COMMS_NO_ROOM_STORAGE: + sub_80141B4(gUnknown_80E45B4, 0, 0, 0x101); + break; + case COMMS_DUPLICATE_MAIL: + sub_80141B4(gUnknown_80E460C, 0, 0, 0x101); + break; + case COMMS_MAIL_SENT_ALREADY: + sub_80141B4(gUnknown_80E4650, 0, 0, 0x101); + break; + case COMMS_NOT_ELIGIBLE_1: + sub_80141B4(gUnknown_80E468C, 0, 0, 0x101); + break; + case COMMS_FRIEND_NOT_ELIGIBLE: + sub_80141B4(gUnknown_80E46C8, 0, 0, 0x101); + break; + case COMMS_NOT_ELIGIBLE_2: + sub_80141B4(gUnknown_80E4704, 0, 0, 0x101); + break; + case COMMS_FRIEND_NOT_ELIGIBLE_2: + sub_80141B4(gUnknown_80E4744, 0, 0, 0x101); + break; + case 16: + sub_80141B4(gUnknown_80E4788, 0, 0, 0x101); + break; + case COMMS_NO_ROOM_MAIL: + sub_80141B4(gUnknown_80E47D8, 0, 0, 0x101); + break; + case 1: + case 5: + case 14: + sub_80141B4(gUnknown_80E4480, 0, 0, 0x101); + break; + case COMMS_NOT_READY: + sub_80141B4(gUnknown_80E482C, 0, 0, 0x101); + break; + } +} + +void sub_80339C8(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + gUnknown_203B33C->speciesNum = -1; + switch(menuAction) + { + case 0: + SetFriendRescueMenuState(3); + break; + case 1: + SetFriendRescueMenuState(4); + break; + case 0x17: + SetFriendRescueMenuState(0x78); + break; + case 0x8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_EXIT); + break; + } + } +} + +void sub_8033A2C(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + gUnknown_203B33C->unk40 = 8; + switch(menuAction) + { + case 0x11: + gUnknown_203B33C->unk40 = 2; + gUnknown_203B33C->unk528 = 0x11; + if(CountMailType(WONDER_MAIL_TYPE_SOS) != 0) + SetFriendRescueMenuState(0x31); + else + SetFriendRescueMenuState(0x22); + break; + case 3: + gUnknown_203B33C->unk40 = 3; + gUnknown_203B33C->unk528 = 3; + if(FindOpenMailSlot() == -1) + SetFriendRescueMenuState(0xF); + else + SetFriendRescueMenuState(0xE); + break; + case 4: + gUnknown_203B33C->unk40 = 4; + gUnknown_203B33C->unk528 = 4; + if(CountMailType(WONDER_MAIL_TYPE_AOK) != 0) + SetFriendRescueMenuState(0x1C); + else + SetFriendRescueMenuState(0x22); + break; + case 0x12: + gUnknown_203B33C->unk40 = 5; + gUnknown_203B33C->unk528 = 0x12; + if(CountMailType(5) != 0) + SetFriendRescueMenuState(0x3D); + else + SetFriendRescueMenuState(0xE); + break; + case 0x13: + gUnknown_203B33C->unk40 = 6; + gUnknown_203B33C->unk528 = 0x13; + if(CountMailType(5) == 0) + SetFriendRescueMenuState(0x51); + else + SetFriendRescueMenuState(0x5B); + break; + case 0x14: + gUnknown_203B33C->unk40 = 7; + gUnknown_203B33C->unk528 = 0x14; + SetFriendRescueMenuState(0x52); + break; + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + } + } +} + +void sub_8033B8C(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 0xB: + case 0xC: + gUnknown_203B33C->unk524 = 0xB; + switch(gUnknown_203B33C->unk528) + { + case 3: + case 0x11: + case 0x12: + SetFriendRescueMenuState(5); + break; + case 4: + SetFriendRescueMenuState(0x23); + break; + default: + break; + } + break; + case 0xD: + gUnknown_203B33C->unk524 = 0xD; + switch(gUnknown_203B33C->unk528) + { + case 3: + SetFriendRescueMenuState(0x19); + break; + case 0x11: + SetFriendRescueMenuState(0x39); + break; + case 0x12: + SetFriendRescueMenuState(0x43); + break; + case 4: + SetFriendRescueMenuState(0x2D); + break; + default: + break; + } + break; + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + } + } +} + +void sub_8033C54(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 6: + switch(gUnknown_203B33C->unk528) + { + // NOTE: Each case has to be defined to match + case 3: + SetFriendRescueMenuState(0xD); + break; + case 4: + SetFriendRescueMenuState(0xD); + break; + case 0x11: + SetFriendRescueMenuState(0xD); + break; + case 0x12: + SetFriendRescueMenuState(0xD); + break; + default: + break; + } + break; + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + } + } +} + +void nullsub_41(void) +{ +} + +void sub_8033CAC(void) +{ + s32 temp; + u32 speciesNum; + if(sub_80144A4(&temp) == 0) + { + if(gUnknown_203B33C->status == COMMS_GOOD) + { + switch(gUnknown_203B33C->unk528) + { + case 3: + SetFriendRescueMenuState(0x16); + break; + case 0x11: + SetFriendRescueMenuState(0x37); + break; + case 0x12: + if(sub_800D588() != 0) + speciesNum = gUnknown_203B33C->unk130.pokemon.speciesNum; + else + speciesNum = gUnknown_203B33C->unkA8.pokemon.speciesNum; + if(speciesNum != MONSTER_NONE) + SetFriendRescueMenuState(0x3F); + else + SetFriendRescueMenuState(0x40); + break; + case 4: + SetFriendRescueMenuState(0x2B); + break; + + } + } + else + { + PrintFriendRescueError(gUnknown_203B33C->status); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR); + } + } +} + +void sub_8033D48(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + } +} + +void nullsub_42(void) +{ +} + +void nullsub_43(void) +{ +} + +void nullsub_44(void) +{ +} + +void nullsub_45(void) +{ +} + +void sub_8033D74(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetFriendRescueMenuState(0x17); + PrepareSavePakWrite(MONSTER_NONE); + } +} + +void sub_8033D94(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + if(!WriteSavePak()) + { + FinishWriteSavePak(); + SetFriendRescueMenuState(0x18); + } + } +} + +void sub_8033DBC(void) +{ + u32 return_var; + u32 mailMode; + struct unkStruct_203B480 mail; + struct unkStruct_203B480 *mail2; + + return_var = sub_80154F0(); + MemoryFill8((u8 *)&mail, 0, sizeof(struct unkStruct_203B480)); + switch(return_var) + { + case 3: + mailMode = 0xffdc; + switch(gUnknown_203B33C->unk528) + { + case 3: + mailMode = PASSWORD_ENTRY_SOS_MAIL_MODE; + break; + case 0x12: + mailMode = PASSWORD_ENTRY_AOK_MAIL_MODE; + break; + default: + break; + } + switch(sub_8039068(mailMode, gUnknown_203B33C->passwordBuffer, &mail)) + { + case PASSWORD_ENTRY_INCORRECT_PASSWORD: + sub_8014248(gUnknown_80E48A8, 0, 6, &gUnknown_80E2290, 0, 4, 0, 0, 0x101); + SetFriendRescueMenuState(0x1B); + break; + case PASSWORD_ENTRY_NOT_SOS_MAIL: + sub_80141B4(gUnknown_80E48E8, 0, 0, 0x101); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR); + break; + case PASSWORD_ENTRY_DUPLICATE_SOS_MAIL: + sub_80141B4(gUnknown_80E460C, 0, 0, 0x101); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR); + break; + case PASSWORD_ENTRY_SOS_MAIL_SUCCESS: + sub_8095274(mail.unk10.unk10); + mail.mailType = 2; + sub_80951BC(&mail); + sub_80141B4(gUnknown_80E4928, 0, 0, 0x101); + SetFriendRescueMenuState(0x16); + break; + case PASSWORD_ENTRY_NOT_AOK_MAIL: + sub_80141B4(gUnknown_80E4964, 0, 0, 0x101); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR); + break; + case PASSWORD_ENTRY_DUPLICATE_AOK_MAIL: + sub_80141B4(gUnknown_80E499C, 0, 0, 0x101); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR); + break; + case PASSWORD_ENTRY_AOK_MAIL_SUCCESS: + mail.mailType = 5; + sub_80951FC(&mail); + mail2 = GetMailatIndex(GetMailIndex(1, mail.unk10.unk10)); + mail2->mailType = 7; + MemoryFill8((u8 *)gUnknown_203B484, 0, sizeof(struct unkStruct_203B484)); + SetFriendRescueMenuState(0x40); + break; + case 24: + default: + break; + } + sub_80155F0(); + break; + case 2: + sub_80155F0(); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + default: + break; + } +} + +void sub_8033F64(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 6: + switch(gUnknown_203B33C->unk528) + { + case 3: + SetFriendRescueMenuState(0x19); + break; + case 0x12: + SetFriendRescueMenuState(0x43); + break; + } + break; + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + default: + break; + } + } +} + +void sub_8033FB4(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 6: + SetFriendRescueMenuState(0xE); + break; + case 7: + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + default: + break; + } + } +} + +void sub_8033FE4(void) +{ + switch(sub_8030768(1)) + { + case 2: + sub_803084C(); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + case 3: + gUnknown_203B33C->unk218 = sub_80307EC(); + SetFriendRescueMenuState(0x1E); + break; + case 4: + gUnknown_203B33C->fallbackState = 0x1D; + gUnknown_203B33C->unk218 = sub_80307EC(); + sub_8006518(gUnknown_203B33C->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + sub_8030D40(gUnknown_203B33C->unk218, 0); + SetFriendRescueMenuState(0x1F); + break; + } +} + +void sub_8034074(void) +{ + s32 menuAction; + + menuAction = -1; + sub_8030768(0); + if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) + sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); + switch(menuAction) + { + case 9: + sub_803084C(); + SetFriendRescueMenuState(0x20); + break; + case 10: + gUnknown_203B33C->fallbackState = FRIEND_RESCUE_MENU_DEFAULT_FALLBACK; + sub_8006518(gUnknown_203B33C->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + sub_8030D40(gUnknown_203B33C->unk218, 0); + SetFriendRescueMenuState(0x1F); + break; + case 5: + case 8: + sub_8035CC0(gUnknown_203B33C->unk35C, 2); + sub_8030810(0x1); + SetFriendRescueMenuState(0x1D); + break; + } +} + +void sub_8034130(void) +{ + switch(sub_8030DA0()) + { + case 2: + case 3: + sub_8030DE4(); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); + sub_803092C(); + if(gUnknown_203B33C->fallbackState == FRIEND_RESCUE_MENU_DEFAULT_FALLBACK) + { + sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); + SetFriendRescueMenuState(0x1E); + } + else + SetFriendRescueMenuState(gUnknown_203B33C->fallbackState); + break; + default: + break; + } +} + +void sub_803418C(void) +{ + switch(sub_8023A94(1)) + { + case 2: + sub_8023C60(); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + sub_8035D1C(); + gUnknown_203B33C->speciesNum = -1; + break; + case 3: + gUnknown_203B33C->speciesNum = sub_8023B44(); + if(gUnknown_203B33C->unk524 == 0xE) + SetFriendRescueMenuState(9); + else + SetFriendRescueMenuState(0x27); + break; + case 4: + gUnknown_203B33C->fallbackState = 0x26; + gUnknown_203B33C->speciesNum = sub_8023B44(); + sub_8006518(gUnknown_203B33C->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + sub_8024458(gUnknown_203B33C->speciesNum, 0); + SetFriendRescueMenuState(0x28); + break; + } +} + +void sub_8034254(void) +{ + s32 menuAction; + menuAction = -1; + + sub_8023A94(0); + if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) + sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); + switch(menuAction) + { + case 9: + sub_8023C60(); + SetFriendRescueMenuState(0x29); + break; + case 10: + gUnknown_203B33C->fallbackState = FRIEND_RESCUE_MENU_DEFAULT_FALLBACK; + sub_8006518(gUnknown_203B33C->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + sub_8024458(gUnknown_203B33C->speciesNum, 0); + SetFriendRescueMenuState(0x28); + break; + case 5: + case 8: + sub_8035CC0(gUnknown_203B33C->unk35C, 3); + sub_8023DA4(); + SetFriendRescueMenuState(0x26); + break; + } +} + +void sub_8034310(void) +{ + switch(sub_80244E4()) + { + case 1: + sub_802452C(); + break; + case 2: + case 3: + sub_802453C(); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); + sub_8023B7C(1); + if(gUnknown_203B33C->fallbackState == FRIEND_RESCUE_MENU_DEFAULT_FALLBACK) + { + sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); + SetFriendRescueMenuState(0x27); + } + else + SetFriendRescueMenuState(gUnknown_203B33C->fallbackState); + break; + default: + break; + } +} + +void sub_8034378(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 0x10: + if(gUnknown_203B33C->unk524 == 0xE) + SetFriendRescueMenuState(0x9); + else + SetFriendRescueMenuState(0x5); + break; + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + default: + break; + } + } +} + +void sub_80343C4(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 6: + SetFriendRescueMenuState(0x5); + break; + case 7: + SetFriendRescueMenuState(0x25); + break; + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + default: + break; + } + } +} + +void sub_8034404(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 0xF: + if(sub_8024108(3)) + SetFriendRescueMenuState(0x24); + else + SetFriendRescueMenuState(0x25); + break; + case 0x10: + if(gUnknown_203B33C->unk524 == 0xE) + SetFriendRescueMenuState(0x9); + else + SetFriendRescueMenuState(0x5); + break; + case 0x8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + default: + break; + } + } +} + +void sub_8034478(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + if(!WriteSavePak()) + { + FinishWriteSavePak(); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_EXIT); + } + } +} + +void sub_80344A0(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetFriendRescueMenuState(0x2C); + PrepareSavePakWrite(MONSTER_NONE); + } +} + +void sub_80344C0(void) +{ + switch(sub_8031DCC()) + { + case 2: + case 3: + sub_8031E10(); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); + SetFriendRescueMenuState(0x2F); + break; + case 1: + sub_8031E00(); + break; + case 0: + break; + } +} + +void sub_8034500(void) +{ + switch(sub_8030768(1)) + { + case 2: + sub_803084C(); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + case 3: + gUnknown_203B33C->unk218 = sub_80307EC(); + SetFriendRescueMenuState(0x33); + break; + case 4: + gUnknown_203B33C->fallbackState = 0x32; + gUnknown_203B33C->unk218 = sub_80307EC(); + sub_8006518(gUnknown_203B33C->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + sub_8030D40(gUnknown_203B33C->unk218, 0); + SetFriendRescueMenuState(0x34); + break; + } +} + +void sub_8034590(void) +{ + s32 menuAction; + menuAction = -1; + + sub_8030768(0); + if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) + sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); + switch(menuAction) + { + case 9: + sub_803084C(); + SetFriendRescueMenuState(0x35); + break; + case 10: + gUnknown_203B33C->fallbackState = FRIEND_RESCUE_MENU_DEFAULT_FALLBACK; + sub_8006518(gUnknown_203B33C->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + sub_8030D40(gUnknown_203B33C->unk218, 0); + SetFriendRescueMenuState(0x34); + break; + case 5: + case 8: + sub_8035CC0(gUnknown_203B33C->unk35C, 2); + sub_8030810(0x1); + SetFriendRescueMenuState(0x32); + break; + } +} + +void sub_803464C(void) +{ + switch(sub_8030DA0()) + { + case 2: + case 3: + sub_8030DE4(); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); + sub_803092C(); + if(gUnknown_203B33C->fallbackState == FRIEND_RESCUE_MENU_DEFAULT_FALLBACK) + { + sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); + SetFriendRescueMenuState(0x33); + } + else + SetFriendRescueMenuState(gUnknown_203B33C->fallbackState); + break; + default: + break; + } +} + +void sub_80346A8(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 6: + SetFriendRescueMenuState(0xE); + break; + case 7: + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + } + } +} + +void sub_80346D8(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + if(!WriteSavePak()) + { + FinishWriteSavePak(); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_EXIT); + } + } +} + +void sub_8034700(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetFriendRescueMenuState(0x38); + PrepareSavePakWrite(MONSTER_NONE); + } +} + +void sub_8034720(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetFriendRescueMenuState(0x3A); + } +} + +void sub_803473C(void) +{ + switch(sub_8031DCC()) + { + case 2: + case 3: + sub_8031E10(); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); + SetFriendRescueMenuState(0x3B); + break; + case 1: + sub_8031E00(); + break; + case 0: + break; + } +} + +void sub_803477C(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 6: + SetFriendRescueMenuState(0xE); + break; + case 7: + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + } + } +} + +void sub_80347AC(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetFriendRescueMenuState(0xD); + } +} + +void sub_80347C8(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetFriendRescueMenuState(0x40); + } +} + +void sub_80347E4(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetFriendRescueMenuState(0x41); + PrepareSavePakWrite(MONSTER_NONE); + } +} + +void sub_8034804(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + if(!WriteSavePak()) + { + FinishWriteSavePak(); + SetFriendRescueMenuState(0x42); + } + } +} + +void sub_803482C(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + } +} + + +void sub_8034848(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + MemoryFill8((u8 *)&gUnknown_203B33C->item, 0 , sizeof(struct Item)); + gUnknown_203B33C->item.id = ITEM_NOTHING; + gUnknown_203B33C->item.quantity = 1; + gUnknown_203B33C->item.flags = 0; + + if(gUnknown_203B33C->status == COMMS_GOOD) + { + switch(gUnknown_203B33C->unk40) + { + case 7: + SetFriendRescueMenuState(0x6D); + break; + case 6: + SetFriendRescueMenuState(0x50); + break; + } + } + else + { + PrintFriendRescueError(gUnknown_203B33C->status); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR_2); + } + } +} + +void sub_80348C4(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + MemoryFill8((u8 *)&gUnknown_203B33C->item, 0 , sizeof(struct Item)); + gUnknown_203B33C->item.id = ITEM_NOTHING; + gUnknown_203B33C->item.quantity = 1; + gUnknown_203B33C->item.flags = 0; + + if(gUnknown_203B33C->status == COMMS_GOOD) + { + switch(gUnknown_203B33C->unk40) + { + case 6: + switch((u32)gUnknown_203B33C->unk524) + { + case 0xB: + case 0xD: + case 0xE: + sub_80141B4(gUnknown_80E31FC, 0, 0, 0x101); + SetFriendRescueMenuState(0x77); + break; + case 0xC: + default: + SetFriendRescueMenuState(0x77); + break; + } + break; + case 7: + SetFriendRescueMenuState(0x6D); + break; + } + } + else + { + PrintFriendRescueError(gUnknown_203B33C->status); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR_2); + } + } +} + +void sub_8034970(void) +{ + switch(sub_8031DCC()) + { + case 2: + case 3: + sub_8031E10(); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); + SetFriendRescueMenuState(0x68); + break; + case 1: + sub_8031E00(); + break; + case 0: + break; + } +} + +void sub_80349B0(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 6: + SetFriendRescueMenuState(0x52); + break; + case 7: + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + } + } +} + +void sub_80349E0(void) +{ + switch(sub_8030768(1)) + { + case 2: + sub_803084C(); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + case 3: + gUnknown_203B33C->unk218 = sub_80307EC(); + SetFriendRescueMenuState(0x5D); + break; + case 4: + gUnknown_203B33C->fallbackState = 0x5C; + gUnknown_203B33C->unk218 = sub_80307EC(); + sub_8006518(gUnknown_203B33C->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + sub_8030D40(gUnknown_203B33C->unk218, 0); + SetFriendRescueMenuState(0x5E); + break; + } +} + +void sub_8034A70(void) +{ + s32 menuAction; + + menuAction = -1; + sub_8030768(0); + if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) + sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); + switch(menuAction) + { + case 9: + sub_803084C(); + SetFriendRescueMenuState(0x5A); + break; + case 10: + gUnknown_203B33C->fallbackState = FRIEND_RESCUE_MENU_DEFAULT_FALLBACK; + sub_8006518(gUnknown_203B33C->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + sub_8030D40(gUnknown_203B33C->unk218, 0); + SetFriendRescueMenuState(0x5E); + break; + case 5: + case 8: + sub_8035CC0(gUnknown_203B33C->unk35C, 2); + sub_8030810(0x1); + SetFriendRescueMenuState(0x5C); + break; + } +} + +void sub_8034B2C(void) +{ + switch(sub_8030DA0()) + { + case 2: + case 3: + sub_8030DE4(); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); + sub_803092C(); + if(gUnknown_203B33C->fallbackState == FRIEND_RESCUE_MENU_DEFAULT_FALLBACK) + { + sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); + SetFriendRescueMenuState(0x5D); + } + else + SetFriendRescueMenuState(gUnknown_203B33C->fallbackState); + break; + default: + break; + } +} + +void sub_8034B88(void) +{ + gUnknown_203B33C->item.id = ITEM_NOTHING; + gUnknown_203B33C->item.quantity = 1; + gUnknown_203B33C->item.flags = 0; + switch(sub_801CA08(1)) + { + case 2: + sub_801CBB8(); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + case 3: + gUnknown_203B33C->item.id = sub_801CB24(); + SetFriendRescueMenuState(0x60); + break; + case 4: + gUnknown_203B33C->fallbackState = 0x5F; + gUnknown_203B33C->item.id = sub_801CB24(); + sub_8006518(gUnknown_203B33C->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + sub_801B3C0(&gUnknown_203B33C->item); + SetFriendRescueMenuState(0x61); + break; + } +} + +void sub_8034C38(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); + sub_801CB5C(1); + if(gUnknown_203B33C->fallbackState == FRIEND_RESCUE_MENU_DEFAULT_FALLBACK) + { + sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); + SetFriendRescueMenuState(0x60); + } + else + SetFriendRescueMenuState(gUnknown_203B33C->fallbackState); + break; + default: + case 1: + break; + } +} + +void sub_8034C98(void) +{ + s32 menuAction; + + menuAction = -1; + sub_801CA08(0); + if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) + sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); + switch(menuAction) + { + case 9: + sub_801CBB8(); + SetFriendRescueMenuState(0x58); + break; + case 10: + gUnknown_203B33C->fallbackState = FRIEND_RESCUE_MENU_DEFAULT_FALLBACK; + sub_8006518(gUnknown_203B33C->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + sub_801B3C0(&gUnknown_203B33C->item); + SetFriendRescueMenuState(0x61); + break; + case 5: + case 8: + sub_8035CC0(gUnknown_203B33C->unk35C, 3); + sub_801CB5C(0x1); + SetFriendRescueMenuState(0x5F); + break; + } +} + +void sub_8034D54(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetFriendRescueMenuState(0x65); + PrepareSavePakWrite(MONSTER_NONE); + } +} + +void sub_8034D74(void) +{ + u32 return_var; + struct unkStruct_203B480 mail; + struct unkStruct_203B480 *mail2; + + return_var = sub_80154F0(); + MemoryFill8((u8 *)&mail, 0, sizeof(struct unkStruct_203B480)); + switch(return_var) + { + case 3: + switch(sub_8039068(PASSWORD_ENTRY_THANK_YOU_MAIL_MODE, gUnknown_203B33C->passwordBuffer, &mail)) + { + case PASSWORD_ENTRY_INCORRECT_PASSWORD: + sub_8014248(gUnknown_80E48A8, 0, 6, &gUnknown_80E2440, 0, 4, 0, 0, 0x101); + SetFriendRescueMenuState(0x74); + break; + case PASSWORD_ENTRY_NOT_THANK_YOU_MAIL: + sub_80141B4(gUnknown_80E49C4, 0, 0, 0x101); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR_2); + break; + case PASSWORD_ENTRY_DUPLICATE_THANK_YOU_MAIL: + sub_80141B4(gUnknown_80E4704, 0, 0, 0x101); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR_2); + break; + case PASSWORD_ENTRY_THANK_YOU_MAIL_SUCCESS: + mail2 = GetMailatIndex(GetMailIndex(4, mail.unk10.unk10)); + *mail2 = mail; + mail2->mailType = 6; + gUnknown_203B33C->unk420 = mail.unk10.unk10; + SetFriendRescueMenuState(0x6D); + break; + case 7: + default: + break; + } + sub_80155F0(); + break; + case 2: + sub_80155F0(); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + default: + break; + } +} + +void sub_8034EC8(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + if(!WriteSavePak()) + { + FinishWriteSavePak(); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_EXIT); + } + } +} + +void sub_8034EF0(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + if(!WriteSavePak()) + { + FinishWriteSavePak(); + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_EXIT); + } + } +} + +void sub_8034F18(void) +{ + s32 temp; + + if(sub_80144A4(&temp) == 0) + { + SetFriendRescueMenuState(0x65); + PrepareSavePakWrite(MONSTER_NONE); + } +} + +void sub_8034F38(void) +{ + s32 temp; + + if(sub_80144A4(&temp) == 0) + { + SetFriendRescueMenuState(0x71); + PrepareSavePakWrite(MONSTER_NONE); + } +} + +void sub_8034F58(void) +{ + s32 temp; + + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 6: + SetFriendRescueMenuState(0x62); + break; + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + } + } +} + +void sub_8034F88(void) +{ + s32 menuAction; + struct unkStruct_203B480 *mail; + + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 6: + mail = GetMailatIndex(gUnknown_203B33C->unk218); + if(gUnknown_203B33C->item.id != ITEM_NOTHING) + mail->item = gUnknown_203B33C->item; + gTeamInventory_203B460->teamStorage[gUnknown_203B33C->item.id]--; + SetFriendRescueMenuState(0x75); + break; + case 7: + SetFriendRescueMenuState(0x57); + break; + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + } + } +} + +void sub_8035018(void) +{ + s32 temp; + + if(sub_80144A4(&temp) == 0) + { + SetFriendRescueMenuState(0x76); + PrepareSavePakWrite(MONSTER_NONE); + } +} + +void sub_8035038(void) +{ + s32 temp; + + if(sub_80144A4(&temp) == 0) + { + if(!WriteSavePak()){ + FinishWriteSavePak(); + // Dumb cast to get unsigned switch + switch((u32)gUnknown_203B33C->unk524) + { + default: + break; + case 0xB: + case 0xC: + SetFriendRescueMenuState(0x69); + break; + case 0xD: + SetFriendRescueMenuState(0x66); + break; + case 0xE: + SetFriendRescueMenuState(0x4B); + break; + } + } + } +} + +void sub_8035094(void) +{ + s32 menuAction; + + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 0x16: + // Dumb cast to get unsigned switch + switch((u32)gUnknown_203B33C->unk524) + { + default: + break; + case 0xB: + case 0xC: + SetFriendRescueMenuState(0x69); + break; + case 0xD: + SetFriendRescueMenuState(0x66); + break; + case 0xE: + SetFriendRescueMenuState(0x4B); + break; + } + break; + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + default: + break; + } + } +} + +void sub_80350F4(void) +{ + s32 menuAction; + + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 0x15: + if(sub_801CF14(0) != 0) + SetFriendRescueMenuState(0x56); + else + SetFriendRescueMenuState(0x57); + break; + case 0x16: + // Dumb cast to get unsigned switch + switch((u32)gUnknown_203B33C->unk524) + { + default: + break; + case 0xB: + case 0xC: + SetFriendRescueMenuState(0x69); + break; + case 0xD: + SetFriendRescueMenuState(0x66); + break; + case 0xE: + SetFriendRescueMenuState(0x4B); + break; + } + break; + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + default: + break; + } + } +} + +void sub_803517C(void) +{ + s32 menuAction; + + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 6: + // Dumb cast to get unsigned switch + switch((u32)gUnknown_203B33C->unk524) + { + default: + break; + case 0xB: + case 0xC: + SetFriendRescueMenuState(0x69); + break; + case 0xD: + SetFriendRescueMenuState(0x66); + break; + case 0xE: + SetFriendRescueMenuState(0x4B); + break; + } + break; + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + default: + break; + } + } +} + +void sub_80351E0(void) +{ + s32 menuAction; + + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 6: + SetFriendRescueMenuState(0x72); + break; + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + default: + break; + } + } +} + +void sub_8035210(void) +{ + s32 menuAction; + struct unkStruct_203B480 *mail; + + if(sub_80144A4(&menuAction) == 0) + { + // NOTE: this is why unk524 can't be changed to u32.. + gUnknown_203B33C->unk524 = menuAction; + switch(gUnknown_203B33C->unk524) + { + case 0xB: + case 0xC: + case 0xD: + if(gUnknown_203B33C->unk528 == 0x13) + { + mail = GetMailatIndex(GetFirstIndexofMailType(5)); + if(mail->item.id != ITEM_NOTHING) + SetFriendRescueMenuState(0x53); + else + SetFriendRescueMenuState(0x55); + } + else if(gUnknown_203B33C->unk524 != 0xD) + SetFriendRescueMenuState(0x69); + else + SetFriendRescueMenuState(0x72); + break; + case 8: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + case 0xE: + default: + break; + } + } +} + +void nullsub_46(void) +{ +} + +void nullsub_47(void) +{ +} + +void nullsub_48(void) +{ +} + +void nullsub_49(void) +{ +} + +void sub_80352A4(void) +{ + u8 mailIndex; + char *monName; + + if ( sub_802F298() == 3) { + sub_802F2C0(); + CopyYellowMonsterNametoBuffer(gUnknown_202E5D8, MONSTER_PELIPPER); + monName = GetMonSpecies(MONSTER_PELIPPER); + strcpy(gAvailablePokemonNames, monName); + mailIndex = GetMailIndex(6, gUnknown_203B33C->unk420); + DeleteMailAtIndex(mailIndex); + SetFriendRescueMenuState(0x70); + } +} + +void sub_8035300(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) != 0) + return; + switch(menuAction) + { + case 0x19: + SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); + break; + case 0x1B: + SetFriendRescueMenuState(0x7A); + break; + case 0x1C: + SetFriendRescueMenuState(0x7C); + break; + case 0x1A: + case 0x1D: + gUnknown_203B33C->unk564 = menuAction; + SetFriendRescueMenuState(0x79); + break; + } +} + +void sub_8035374(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) != 0) + return; + switch(menuAction) + { + case 0x19: + SetFriendRescueMenuState(0x78); + break; + case 0x1E: + case 0x1F: + case 0x20: + case 0x21: + case 0x22: + gUnknown_203B33C->unk564 = menuAction; + SetFriendRescueMenuState(0x7B); + break; + } +} + +void sub_80353BC(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) != 0) + return; + switch(menuAction) + { + case 0x19: + SetFriendRescueMenuState(0x78); + break; + case 0x23: + case 0x24: + case 0x25: + case 0x26: + gUnknown_203B33C->unk564 = menuAction; + SetFriendRescueMenuState(0x7D); + break; + } +} + +void QueueNextFriendRescueState(u32 nextState) +{ + s32 iVar1; + + if(sub_80144A4(&iVar1) == 0){ + SetFriendRescueMenuState(nextState); + } +} + +void sub_8035424(void) +{ + SetFriendRescueMenuState(6); +} + +void sub_8035430(void) +{ + SetFriendRescueMenuState(0x4F); +} + +void nullsub_50(void) +{ +} + +void nullsub_51(void) +{ +} diff --git a/src/other_menus_1.c b/src/other_menus_1.c index fad568adf..5d943323d 100644 --- a/src/other_menus_1.c +++ b/src/other_menus_1.c @@ -1,13 +1,18 @@ #include "global.h" #include "constants/communication_error_codes.h" +#include "constants/dungeon.h" #include "dungeon_global_data.h" #include "pokemon.h" #include "code_8094F88.h" #include "save.h" #include "team_inventory.h" #include "main_menu.h" +#include "memory.h" extern s32 gCommsTimeout; // Counts to 100 and then errors if other player hasn't connected +extern s32 gUnknown_202EC48; +extern u32 gUnknown_202EC40[2]; + extern s32 sub_803815C(u32, void *, void*); extern void sub_800D494(void); extern s32 sub_800D33C(void); @@ -18,54 +23,298 @@ extern void sub_800D59C(s32 *, u32); extern void sub_800D570(void); extern void sub_800D510(void); extern s32 sub_8037DF0(void); -extern void sub_8037F9C(u32, u8 *, u8 *); - extern u8 sub_800D588(void); extern struct UnkStruct_203B184 *gUnknown_203B184; +extern void sub_800D670(u32, s32 *, u32); +void sub_8037F9C(u32 mode, void *param_2, void *param_3); +extern void sub_800D68C(u32); + + +u32 sub_8037C10(u8 param_1) +{ + if (param_1 != 0) { + if (sub_800D588()) { + goto _zero; + } + else + { + goto _one; + } + } + else if (sub_800D588()) + { +_one: + return gUnknown_202EC40[1]; + } + else + { +_zero: + return gUnknown_202EC40[0]; + } +} + +void sub_8037C44(s32 mode, void *data) +{ + s32 index; + + for(index = 0; index < 2; index++) + { + sub_800D68C(index); + } + switch(mode) { + case 0: + case 1: + sub_800D59C(data, sizeof(struct unkStruct_8035D94)); + break; + case 2: + case 3: + case 6: + case 7: + sub_800D59C(data, sizeof(struct unkStruct_203B480)); + break; + case 4: + case 5: + sub_800D59C(data, sizeof(struct WonderMailStruct_203B2C0_sub)); + break; + case 9: + case 10: + sub_800D59C(data, 0xb4); + break; + } +} + +void sub_8037CC4(s32 mode, void *param_2, void *param_3) +{ + switch(mode) + { + case 0: + case 1: + sub_800D670(0,param_2, sizeof(struct unkStruct_8035D94)); + sub_800D670(1,param_3, sizeof(struct unkStruct_8035D94)); + break; + case 2: + case 3: + case 6: + case 7: + sub_800D670(0,param_2, sizeof(struct unkStruct_203B480)); + sub_800D670(1,param_3, sizeof(struct unkStruct_203B480)); + break; + case 4: + case 5: + sub_800D670(0,param_2, sizeof(struct WonderMailStruct_203B2C0_sub)); + sub_800D670(1,param_3, sizeof(struct WonderMailStruct_203B2C0_sub)); + break; + case 9: + case 10: + sub_800D670(0,param_2, 0xb4); + sub_800D670(1,param_3, 0xb4); + break; + } +} + +// TODO: same as sub_80381F4 +s32 sub_8037D64(u32 mode, void * param_2, void * param_3) +{ + u32 iVar2; + s32 linkStatus; + + iVar2 = 0; + linkStatus = COMMS_GOOD; + gUnknown_202EC48 = 0; + sub_800D494(); + sub_8037C44(mode, param_2); + goto _first; +_start: + while (iVar2 - 3 > 2) { + if (99 < gUnknown_202EC48) { + sub_800D520(); + sub_800D510(); + return COMMS_NOT_READY; + } + gUnknown_202EC48++; + _first: + sub_80373C4(); + iVar2 = sub_800D33C(); + sub_800D570(); + if (iVar2 == 2) { + if (sub_800D600() == 0) { + sub_800D520(); + sub_800D510(); + linkStatus = 5; + } + else { + linkStatus = COMMS_GOOD; + } + goto _end; + } + else + goto _start; + } + sub_800D520(); + sub_800D510(); + return 1; +_end: + sub_8037CC4(mode, param_2, param_3); + return linkStatus; +} + +s32 sub_8037DF0(void) +{ + s32 linkStatus; + s32 iStack_10; + s32 iStack_c; + + linkStatus = COMMS_GOOD; + sub_800D670(0,&iStack_10,4); + sub_800D670(1,&iStack_c,4); + if ((iStack_10 != 0) || (iStack_c != 0)) { + linkStatus = (!sub_800D588()) ? iStack_c : iStack_10; + if (linkStatus == COMMS_GOOD) { + linkStatus = 0xe; + } + } + return linkStatus; +} + +void sub_8037E38(struct unkStruct_8035D94 *param_1,struct unkStruct_8035D94 *param_2) +{ + struct unkStruct_8035D94 *r3; + struct unkStruct_8035D94 *r4; + u32 load; + + r4 = sub_800D588() == 0 ? param_2 : param_1; + r3 = sub_800D588() == 0 ? param_1 : param_2; + + if ((r4->itemIndex).itemIndex_u8 == (r3->itemIndex).itemIndex_u8) { + load = gTeamInventory_203B460->teamStorage[r4->itemIndex.itemIndex_u8]; + load += r3->numItems; + gTeamInventory_203B460->teamStorage[r4->itemIndex.itemIndex_u8] = load; + } + else { + load = gTeamInventory_203B460->teamStorage[r3->itemIndex.itemIndex_u8]; + load += r3->numItems; + gTeamInventory_203B460->teamStorage[r3->itemIndex.itemIndex_u8] = load; + } +} + +void sub_8037E90(struct unkStruct_203B480 *param_1, struct unkStruct_203B480 *param_2) +{ + if(sub_800D588() == 0) + { + param_2 = param_1; + } + param_2->mailType = 2; + sub_80951BC(param_2); + sub_8095274(param_2->unk10.unk10); +} + +void nullsub_53(void *param_1, void *param_2) +{} + +void sub_8037EBC(struct WonderMailStruct_203B2C0_sub *param_1, struct WonderMailStruct_203B2C0_sub *param_2) { + struct unkStruct_203B480 *mail; + struct WonderMailStruct_203B2C0_sub *puVar2; + + if(sub_800D588() == 0) + { + puVar2 = param_1; + } + else + { + puVar2 = param_2; + } + mail = GetMailatIndex(GetMailIndex(1, (puVar2->mail).unk10.unk10)); + *mail = (*puVar2).mail; + mail->mailType = 5; + sub_80951FC(mail); + mail->mailType = 7; + + if(puVar2->pokemon.speciesNum != MONSTER_NONE) + { + gUnknown_203B484->unk0 = puVar2->mail.unk10.unk10; + gUnknown_203B484->unk4 = puVar2->pokemon; + gUnknown_203B484->unk4.dungeonLocation.id = DUNGEON_UNKNOWN_WORLD; + gUnknown_203B484->unk4.dungeonLocation.floor = 1; + } + else + { + MemoryFill8((u8 *)gUnknown_203B484, 0, sizeof(struct unkStruct_203B484)); + gUnknown_203B484->unk4.speciesNum = MONSTER_NONE; + } +} + +void sub_8037F4C(struct unkStruct_203B480 *param_1, struct unkStruct_203B480 *param_2) +{ + struct unkStruct_203B480 *mail; + struct MainMenu *mainMenu; + + if(sub_800D588() == 0) + { + param_2 = param_1; + } + mail = GetMailatIndex(GetMailIndex(4, param_2->unk10.unk10)); + *mail = *param_2; + mail->mailType = 6; + mainMenu = GetMainMenu(); + if(mainMenu) + { + mainMenu->unk3A = 1; + } +} + +void sub_8037F9C(u32 mode, void *param_2, void *param_3) +{ + switch(mode) + { + case 0: + case 1: + sub_8037E38(param_2, param_3); + break; + case 7: + sub_8037F4C(param_2, param_3); + break; + case 3: + sub_8037E90(param_2, param_3); + break; + case 5: + sub_8037EBC(param_2, param_3); + break; + case 10: + nullsub_53(param_2, param_3); + break; + } +} s32 sub_8038014(struct unkStruct_8035D94 *param_1,struct unkStruct_8035D94 *param_2) { - s32 linkStatus; - s32 r2; - struct unkStruct_8035D94 *r3; - struct unkStruct_8035D94 *r4; + s32 linkStatus; + s32 r2; + struct unkStruct_8035D94 *r3; + struct unkStruct_8035D94 *r4; - if (sub_800D588() == 0) { - r4 = param_2; - } - else - { - r4 = param_1; - } + r4 = sub_800D588() == 0 ? param_2 : param_1; + r3 = sub_800D588() == 0 ? param_1 : param_2; - if (sub_800D588() == 0) { - r3 = param_1; - } - else - { - r3 = param_2; - } - - if ((r4->itemIndex).itemIndex_u8 == (r3->itemIndex).itemIndex_u8) { - r2 = gTeamInventory_203B460->teamStorage[r4->itemIndex.itemIndex_u8]; - r2 += r3->numItems; - if (r2 > 999) { - linkStatus = COMMS_NO_ROOM_STORAGE; + if ((r4->itemIndex).itemIndex_u8 == (r3->itemIndex).itemIndex_u8) { + r2 = gTeamInventory_203B460->teamStorage[r4->itemIndex.itemIndex_u8]; + r2 += r3->numItems; + if (r2 > 999) { + linkStatus = COMMS_NO_ROOM_STORAGE; + } + else + linkStatus = COMMS_GOOD; } - else - linkStatus = COMMS_GOOD; - } - else { - r2 = gTeamInventory_203B460->teamStorage[r3->itemIndex.itemIndex_u8]; - r2 += r3->numItems; - if (r2 > 999) { - linkStatus = COMMS_NO_ROOM_STORAGE; - } - else - linkStatus = COMMS_GOOD; + else { + r2 = gTeamInventory_203B460->teamStorage[r3->itemIndex.itemIndex_u8]; + r2 += r3->numItems; + if (r2 > 999) { + linkStatus = COMMS_NO_ROOM_STORAGE; + } + else + linkStatus = COMMS_GOOD; - } - return linkStatus; + } + return linkStatus; } s32 sub_8038078(struct unkStruct_203B480 *param_1,struct unkStruct_203B480 *param_2) diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index 7efffd7a3..d90ba5730 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -314,7 +314,7 @@ void CreateRescuePasswordMenu(u32 currMenu) temp = GetMailatIndex(0x1F); MemoryFill8((u8 *)temp, 0, sizeof(struct unkStruct_203B480)); temp->mailType = 2; - temp->unk20.id = ITEM_NOTHING; + temp->item.id = ITEM_NOTHING; sub_8031D70(0x1F, 0); break; case MENU_RESCUE_PASSWORD_ENTRY: @@ -647,7 +647,7 @@ u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_203B480 *para if ( (!sub_803D204(passwordBuffer, param_3)) || (WONDER_MAIL_TYPE_OKD < param_3->mailType) || (param_3->dungeon.floor >= GetDungeonFloorCount(param_3->dungeon.id)) || (param_3->clientSpecies == MONSTER_NONE) || (MONSTER_RAYQUAZA_CUTSCENE < param_3->clientSpecies) || - (IsInvalidItemReward(param_3->unk20.id))) { + (IsInvalidItemReward(param_3->item.id))) { return PASSWORD_ENTRY_INCORRECT_PASSWORD; } else diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index f8d3866b0..8ee72cefc 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -288,7 +288,7 @@ u32 CreateThankYouMailPelipper(void) index = GetFirstIndexofMailType(6); if (index != -1) { mail = GetMailatIndex(index); - gUnknown_203B2C4->unk41C = mail->unk20; + gUnknown_203B2C4->unk41C = mail->item; gUnknown_203B2C4->mailIndex = index; gUnknown_203B2C4->unk430 = mail->unk10.unk10; SetThankYouMailMenuState(5); @@ -957,7 +957,7 @@ void HandleConfirmItemtoSendMenu(void) mail = GetMailatIndex(gUnknown_203B2C4->mailIndex); if(gUnknown_203B2C4->unk41C.id != ITEM_NOTHING) { - mail->unk20 = gUnknown_203B2C4->unk41C; + mail->item = gUnknown_203B2C4->unk41C; } gTeamInventory_203B460->teamStorage[gUnknown_203B2C4->unk41C.id]--; SetThankYouMailMenuState(0x29); @@ -1144,7 +1144,7 @@ void HandleMailCommunicationMenu(void) { case WONDER_MAIL_MODE_SEND: mail = GetMailatIndex(GetFirstIndexofMailType(WONDER_MAIL_TYPE_THANK_YOU)); - if(mail->unk20.id != ITEM_NOTHING) + if(mail->item.id != ITEM_NOTHING) { SetThankYouMailMenuState(ITEM_EXISTS_ON_THANK_YOU_MAIL); } @@ -1409,7 +1409,7 @@ void UpdateThankYouMailText(void) gUnknown_203B2C4->unk53C.moneyReward = 0; // 0x554 mailIndex = GetMailIndex(6,gUnknown_203B2C4->unk430); mail = GetMailatIndex(mailIndex); - itemIndex = mail->unk20.id; + itemIndex = mail->item.id; if (itemIndex != ITEM_NOTHING) gUnknown_203B2C4->unk53C.itemRewards[0] = itemIndex; // unk558 else diff --git a/src/wonder_mail_5.c b/src/wonder_mail_5.c index 668782497..5082515c5 100644 --- a/src/wonder_mail_5.c +++ b/src/wonder_mail_5.c @@ -127,12 +127,12 @@ void sub_8030E48(void) stack.clientSpecies = mail->clientSpecies; stack.targetSpecies = mail->clientSpecies; stack.targetItem = ITEM_NOTHING; - if (mail->unk20.id == ITEM_NOTHING) { + if (mail->item.id == ITEM_NOTHING) { stack.unk2E = 5; } else { stack.unk2E = 2; - stack.unk34 = mail->unk20.id; + stack.unk34 = mail->item.id; } switch(mail->mailType) { diff --git a/src/wonder_mail_6.c b/src/wonder_mail_6.c index 589f22a8b..6fe9f70be 100644 --- a/src/wonder_mail_6.c +++ b/src/wonder_mail_6.c @@ -323,7 +323,7 @@ void sub_80313D8(u32 state) unused = &gUnknown_203B480[index]; gUnknown_203B480[index].mailType = 0; unused = &gUnknown_203B480[index]; - gUnknown_203B480[index].unk20.id = ITEM_NOTHING; + gUnknown_203B480[index].item.id = ITEM_NOTHING; } break; } From d63537f904da0c7a81ff1353e4db9a196b01bf2d Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Tue, 18 Jul 2023 21:40:07 -0700 Subject: [PATCH 06/26] clean up some merge conflicts from friend_rescue merge --- src/friend_rescue.c | 10 +- src/friend_rescue_1.c | 2036 ----------------------------------------- src/other_menus_1.c | 53 +- 3 files changed, 31 insertions(+), 2068 deletions(-) delete mode 100644 src/friend_rescue_1.c diff --git a/src/friend_rescue.c b/src/friend_rescue.c index dcad3b627..ef6093b3d 100644 --- a/src/friend_rescue.c +++ b/src/friend_rescue.c @@ -1188,8 +1188,8 @@ void sub_8032828(void) gUnknown_203B33C->unk53C.moneyReward = 0; mail = GetMailatIndex(GetMailIndex(6, gUnknown_203B33C->unk420)); // ABSOLUTELY GENIUS - if (mail->unk20.id != ITEM_NOTHING) - gUnknown_203B33C->unk53C.itemRewards[0] = mail->unk20.id; + if (mail->item.id != ITEM_NOTHING) + gUnknown_203B33C->unk53C.itemRewards[0] = mail->item.id; else gUnknown_203B33C->unk53C.itemRewards[0] = ITEM_NOTHING; gUnknown_203B33C->unk53C.quantity = 1; @@ -2691,7 +2691,7 @@ void sub_8034F88(void) case 6: mail = GetMailatIndex(gUnknown_203B33C->unk218); if(gUnknown_203B33C->item.id != ITEM_NOTHING) - mail->unk20 = gUnknown_203B33C->item; + mail->item = gUnknown_203B33C->item; gTeamInventory_203B460->teamStorage[gUnknown_203B33C->item.id]--; SetFriendRescueMenuState(0x75); break; @@ -2892,7 +2892,7 @@ void sub_8035210(void) if(gUnknown_203B33C->unk528 == 0x13) { mail = GetMailatIndex(GetFirstIndexofMailType(5)); - if(mail->unk20.id != ITEM_NOTHING) + if(mail->item.id != ITEM_NOTHING) SetFriendRescueMenuState(0x53); else SetFriendRescueMenuState(0x55); @@ -3034,4 +3034,4 @@ void nullsub_50(void) void nullsub_51(void) { -} \ No newline at end of file +} diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c deleted file mode 100644 index c253d9740..000000000 --- a/src/friend_rescue_1.c +++ /dev/null @@ -1,2036 +0,0 @@ -#include "global.h" -#include "constants/communication_error_codes.h" -#include "constants/monster.h" -#include "constants/wonder_mail.h" -#include "text.h" -#include "input.h" -#include "item.h" -#include "team_inventory.h" -#include "pokemon.h" -#include "friend_rescue.h" -#include "memory.h" -#include "save.h" -#include "menu.h" -#include "rescue_password_menu.h" -#include "menu_input.h" -#include "code_8094F88.h" - - -extern struct TeamInventory *gTeamInventory_203B460; - -extern void SetFriendRescueMenuState(u32); -extern s32 sub_80144A4(s32 *); -extern void sub_802F2C0(); -extern u32 sub_802F298(); - -extern char gUnknown_202E5D8[0x50]; -extern char gAvailablePokemonNames[0x50]; - -extern struct WonderMailStruct_203B33C *gUnknown_203B33C; - -extern u8 sub_801CF14(u32); - -extern u8 gUnknown_80E48A8[]; -extern u8 gUnknown_80E49C4[]; -extern u8 gUnknown_80E4704[]; -extern u8 gUnknown_80E48E8[]; -extern u8 gUnknown_80E4928[]; -extern u8 gUnknown_80E4964[]; -extern u8 gUnknown_80E499C[]; -extern u8 gUnknown_80E460C[]; -extern u8 gUnknown_80E31FC[]; - - -extern u32 sub_80154F0(); -extern void sub_80155F0(); -extern void sub_80141B4(u8 *r0, u32, u32 *r1, u32); -extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u32, u32, u32, u32 *r5, u32); - -extern u32 sub_801CA08(u32); -extern void sub_801CBB8(void); -extern void sub_801CB5C(u32); -extern void sub_8035CC0(struct UnkTextStruct2 *, u32); -extern void sub_801B3C0(struct Item *); -extern u32 sub_801B410(void); -extern void sub_801B450(void); -extern void sub_8035CF4(struct MenuStruct *, u32, u32); -extern u8 sub_801CB24(void); -extern u32 sub_8030DA0(void); -extern void sub_8030DE4(void); -extern void sub_803092C(void); -extern u32 sub_8030768(u32); -extern void sub_803084C(void); -extern void sub_8030D40(u8, u32); -extern void sub_8030810(u32); -extern u8 sub_80307EC(void); - -extern u32 sub_8031DCC(void); -extern void sub_8031E10(void); -extern void sub_8031E00(void); -extern u8 sub_8024108(u32); -extern void sub_802452C(void); -extern u32 sub_80244E4(void); -extern void sub_802453C(void); -extern void sub_8023B7C(u32); -extern u32 sub_8023A94(u32); -extern void sub_8023C60(void); -extern void sub_8024458(s16, u32); -extern void sub_8023DA4(void); -extern void sub_8035D1C(void); -extern u16 sub_8023B44(void); - -extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_203B480 *r0); -extern void sub_8095274(u32); -extern u8 sub_800D588(void); -extern struct PokemonStruct *GetPlayerPokemonStruct(void); - -extern u8 gUnknown_80E44A4[]; -extern u8 gUnknown_80E4500[]; -extern u8 gUnknown_80E4550[]; -extern u8 gUnknown_80E45B4[]; -extern u8 gUnknown_80E460C[]; -extern u8 gUnknown_80E4650[]; -extern u8 gUnknown_80E468C[]; -extern u8 gUnknown_80E46C8[]; -extern u8 gUnknown_80E4704[]; -extern u8 gUnknown_80E4744[]; -extern u8 gUnknown_80E4788[]; -extern u8 gUnknown_80E47D8[]; -extern u8 gUnknown_80E4480[]; -extern u8 gUnknown_80E482C[]; -extern u8 gUnknown_80E25F4[]; -extern u8 gUnknown_80E2D7C[]; -extern u8 gUnknown_80E2E20[]; -extern u8 gUnknown_80E319C[]; -extern u8 gUnknown_80E311C[]; -extern u8 gUnknown_80E32C4[]; -extern u8 gUnknown_80E4314[]; -extern u8 gUnknown_80E41DC[]; -extern u8 gUnknown_80E2FEC[]; -extern u8 gUnknown_80E2898[]; -extern u8 gUnknown_80E2B54[]; -extern u8 gUnknown_80E29D0[]; -extern u8 gUnknown_80E3220[]; -extern u8 gUnknown_80E2A0C[]; -extern u8 gUnknown_80E2610[]; -extern u8 gUnknown_80E2640[]; -extern u8 gUnknown_80E2680[]; -extern u8 gUnknown_80E26B0[]; -extern u8 gUnknown_80E26F0[]; -extern u8 gUnknown_80E2728[]; -extern u8 gUnknown_80E3690[]; -extern u8 gUnknown_80E3818[]; -extern u8 gUnknown_80E3998[]; -extern u8 gUnknown_80E3B1C[]; -extern u8 gUnknown_80E367C[]; -extern u8 gUnknown_80E3BF8[]; -extern u8 gUnknown_80E3DE4[]; -extern u8 gUnknown_80E4014[]; -extern u8 gUnknown_80E3E98[]; -extern u8 gUnknown_80E4130[]; -extern u8 gUnknown_80E2E54[]; -extern u8 gUnknown_80E2EB4[]; -extern u8 gUnknown_80E2DD0[]; -extern u8 gUnknown_80E2FA0[]; -extern u8 gUnknown_80E2F14[]; -extern u8 gUnknown_80E2F44[]; -extern u8 gUnknown_80E30A4[]; -extern u8 gUnknown_80E2F78[]; -extern u8 gUnknown_80E360C[]; -extern u8 gUnknown_80E3644[]; -extern u8 gUnknown_80E35E8[]; -extern u8 gUnknown_80E35AC[]; -extern u8 gUnknown_80E355C[]; -extern u8 gUnknown_80E352C[]; -extern u8 gUnknown_80E34F0[]; -extern u8 gUnknown_80E34B0[]; -extern u8 gUnknown_80E3430[]; -extern u8 gUnknown_80E33D8[]; -extern u8 gUnknown_80E339C[]; -extern u8 gUnknown_80E3378[]; -extern u8 gUnknown_80E331C[]; -extern u8 gUnknown_80E3288[]; -extern u8 gUnknown_80E3248[]; -extern u8 gUnknown_80E31FC[]; -extern u8 gUnknown_80E276C[]; -extern u8 gUnknown_80E27A4[]; -extern u8 gUnknown_80E2CD4[]; -extern u8 gUnknown_80E3030[]; -extern u8 gUnknown_80E3078[]; -extern u8 gUnknown_80E31D8[]; -extern u8 gUnknown_80E2CE8[]; -extern u8 gUnknown_80E2B90[]; -extern u8 gUnknown_80E2AE4[]; -extern u8 gUnknown_80E2A80[]; -extern u8 gUnknown_80E2AA8[]; -extern u8 gUnknown_80E2D60[]; -extern u8 gUnknown_80E2BE0[]; -extern u8 gUnknown_80E2C48[]; -extern u8 gUnknown_80E29A0[]; -extern u8 gUnknown_80E2A5C[]; -extern u8 gUnknown_80E2904[]; -extern u8 gUnknown_80E2C94[]; -extern u8 gUnknown_80E2D30[]; -extern u8 gUnknown_80E296C[]; -extern u8 gUnknown_80E314C[]; -extern u8 gUnknown_80E2A1C[]; -extern u8 gUnknown_80E2840[]; -extern u8 gUnknown_80E2874[]; -extern u8 gUnknown_80E317C[]; -extern u8 gUnknown_80E28D8[]; -extern u8 gUnknown_80E2814[]; -extern u8 gUnknown_80E30D0[]; - -extern struct MenuItem gUnknown_80E20B8; -extern struct MenuItem gUnknown_80E2108; -extern struct MenuItem gUnknown_80E20E0; -extern struct MenuItem gUnknown_80E2068; -extern struct MenuItem gUnknown_80E24F8; -extern struct MenuItem gUnknown_80E2554; -extern struct MenuItem gUnknown_80E22F0; -extern struct MenuItem gUnknown_80E236C; -extern struct MenuItem gUnknown_80E2440; -extern struct MenuItem gUnknown_80E2470; -extern struct MenuItem gUnknown_80E24B0; -extern struct MenuItem gUnknown_80E2130; -extern struct MenuItem gUnknown_80E2190; -extern struct MenuItem gUnknown_80E21B8; -extern struct MenuItem gUnknown_80E2268; -extern struct MenuItem gUnknown_80E2218; -extern struct MenuItem gUnknown_80E2240; -extern struct MenuItem gUnknown_80E2290; -extern struct MenuItem gUnknown_80E22D0; -extern struct MenuItem gUnknown_80E234C; -extern struct MenuItem gUnknown_80E24D8; -extern struct MenuItem gUnknown_80E2458; -extern struct MenuItem gUnknown_80E2408; -extern struct MenuItem gUnknown_80E23A8; -extern struct MenuItem gUnknown_80E22B4; - -extern struct UnkTextStruct2 gUnknown_80E231C; -extern struct UnkTextStruct2 gUnknown_80E23F0; -extern struct UnkTextStruct2 gUnknown_80E2334; - -extern struct MenuItem gUnknown_80E25B4; - -extern void nullsub_40(); -extern void sub_8032828(); - -extern u8 sub_800D588(void); -extern void sub_8011830(void); -extern u32 sub_8030894(void); -extern void sub_8031D70(u32, u32); -extern u32 sub_8023CE8(void); -extern void sub_80922B4(u8 *buffer, u8 *string, s32 size); -extern void sub_80306A8(u32, u32, u32, u32); -extern void sub_8023868(u32, u32, u32, u32); -extern u32 sub_801D008(void); -extern void sub_8023DA4(void); -extern void sub_8023C60(void); -extern s32 sub_8037B28(u32); -extern void sub_803092C(void); -extern void sub_801CCD8(void); -extern void sub_80151C0(u32, u8 *); -extern void sub_801C8C4(u32, u32, s32 * , u32); -extern void xxx_call_start_bg_music(void); -extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32); -extern void sub_802F204(struct unkStruct_802F204 *, u32); -extern void nullsub_23(u32); -extern s32 sub_8037D64(u32, void *, void *); -extern s32 sub_80381F4(u32, void *, void *); -void sprintfStatic(char *buffer, const char *text, ...); - -extern void SetFriendRescueMenuState(u32); -extern s32 sub_80144A4(s32 *); -extern void sub_802F2C0(); -extern u32 sub_802F298(); - -extern char gUnknown_202E5D8[0x50]; -extern char gAvailablePokemonNames[0x50]; - -extern struct WonderMailStruct_203B33C *gUnknown_203B33C; - -extern u8 sub_8039880(void); - -extern void sub_8035300(void); -extern void QueueNextFriendRescueState(u32); -extern void nullsub_41(void); -extern void nullsub_42(void); -extern void nullsub_43(void); -extern void nullsub_44(void); -extern void nullsub_45(void); -extern void nullsub_46(void); -extern void nullsub_47(void); -extern void nullsub_48(void); -extern void nullsub_49(void); -extern void nullsub_50(void); -extern void nullsub_51(void); -extern void sub_8035374(void); -extern void sub_80353BC(void); -extern void sub_8033A2C(void); -extern void sub_803477C(void); -extern void sub_80347AC(void); -extern void sub_80347C8(void); -extern void sub_80347E4(void); -extern void sub_8034804(void); -extern void sub_80344C0(void); -extern void sub_8034478(void); -extern void sub_80344A0(void); -extern void sub_803418C(void); -extern void sub_8034254(void); -extern void sub_8034310(void); -extern void sub_8034378(void); -extern void sub_80343C4(void); -extern void sub_8034404(void); -extern void sub_8034500(void); -extern void sub_8034590(void); -extern void sub_803464C(void); -extern void sub_80346A8(void); -extern void sub_80346D8(void); -extern void sub_8034700(void); -extern void sub_8034720(void); -extern void sub_803473C(void); -extern void sub_8033FB4(void); -extern void sub_8034074(void); -extern void sub_8034130(void); -extern void sub_8033FE4(void); -extern void sub_8033D74(void); -extern void sub_8033D94(void); -extern void sub_8033DBC(void); -extern void sub_8033F64(void); -extern void sub_8033C54(void); -extern void sub_8033CAC(void); -extern void sub_8033D48(void); -extern void sub_8035424(void); -extern void sub_8034970(void); -extern void sub_80351E0(void); -extern void sub_8034D74(void); -extern void sub_8034EF0(void); -extern void sub_8034F38(void); -extern void sub_80352A4(void); -extern void sub_8034EC8(void); -extern void sub_8033B8C(void); -extern void sub_80339C8(void); -extern void sub_80348C4(void); -extern void sub_803482C(void); -extern void sub_80349B0(void); -extern void sub_8034A70(void); -extern void sub_8034B2C(void); -extern void sub_80349E0(void); -extern void sub_8034B88(void); -extern void sub_8034C98(void); -extern void sub_8034C38(void); -extern void sub_8034D54(void); -extern void sub_8034F18(void); -extern void sub_8034F58(void); -extern void sub_8034F88(void); -extern void sub_8035018(void); -extern void sub_8035038(void); -extern void sub_8035094(void); -extern void sub_80350F4(void); -extern void sub_803517C(void); -extern void sub_8035210(void); -extern void sub_8035430(void); -extern void sub_8034848(void); - -extern void sub_803084C(void); -extern void sub_8031E10(void); -extern void sub_8023C60(void); -extern void sub_80155F0(void); -extern void sub_801CBB8(void); -extern void sub_802F2C0(void); -extern void sub_8030DE4(void); -extern void sub_802453C(void); -extern void sub_801B450(void); - - -void SetFriendRescueMenuState(u32 newState) -{ - gUnknown_203B33C->state = newState; - nullsub_40(); - sub_8032828(); -} - -void PrintFriendRescueError(u32 status) -{ - switch(status) - { - case COMMS_GOOD: - break; - case COMMS_INCORRECT_NUM_SYSTEMS: - sub_80141B4(gUnknown_80E44A4, 0, 0, 0x101); - break; - case COMMS_NO_RESPONSE: - sub_80141B4(gUnknown_80E4500, 0, 0, 0x101); - break; - case COMMS_DIFFERENT_MODES: - sub_80141B4(gUnknown_80E4550, 0, 0, 0x101); - break; - case COMMS_NO_ROOM_STORAGE: - sub_80141B4(gUnknown_80E45B4, 0, 0, 0x101); - break; - case COMMS_DUPLICATE_MAIL: - sub_80141B4(gUnknown_80E460C, 0, 0, 0x101); - break; - case COMMS_MAIL_SENT_ALREADY: - sub_80141B4(gUnknown_80E4650, 0, 0, 0x101); - break; - case COMMS_NOT_ELIGIBLE_1: - sub_80141B4(gUnknown_80E468C, 0, 0, 0x101); - break; - case COMMS_FRIEND_NOT_ELIGIBLE: - sub_80141B4(gUnknown_80E46C8, 0, 0, 0x101); - break; - case COMMS_NOT_ELIGIBLE_2: - sub_80141B4(gUnknown_80E4704, 0, 0, 0x101); - break; - case COMMS_FRIEND_NOT_ELIGIBLE_2: - sub_80141B4(gUnknown_80E4744, 0, 0, 0x101); - break; - case 16: - sub_80141B4(gUnknown_80E4788, 0, 0, 0x101); - break; - case COMMS_NO_ROOM_MAIL: - sub_80141B4(gUnknown_80E47D8, 0, 0, 0x101); - break; - case 1: - case 5: - case 14: - sub_80141B4(gUnknown_80E4480, 0, 0, 0x101); - break; - case COMMS_NOT_READY: - sub_80141B4(gUnknown_80E482C, 0, 0, 0x101); - break; - } -} - -void sub_80339C8(void) -{ - s32 menuAction; - if(sub_80144A4(&menuAction) == 0) - { - gUnknown_203B33C->speciesNum = -1; - switch(menuAction) - { - case 0: - SetFriendRescueMenuState(3); - break; - case 1: - SetFriendRescueMenuState(4); - break; - case 0x17: - SetFriendRescueMenuState(0x78); - break; - case 0x8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_EXIT); - break; - } - } -} - -void sub_8033A2C(void) -{ - s32 menuAction; - if(sub_80144A4(&menuAction) == 0) - { - gUnknown_203B33C->unk40 = 8; - switch(menuAction) - { - case 0x11: - gUnknown_203B33C->unk40 = 2; - gUnknown_203B33C->unk528 = 0x11; - if(CountMailType(WONDER_MAIL_TYPE_SOS) != 0) - SetFriendRescueMenuState(0x31); - else - SetFriendRescueMenuState(0x22); - break; - case 3: - gUnknown_203B33C->unk40 = 3; - gUnknown_203B33C->unk528 = 3; - if(FindOpenMailSlot() == -1) - SetFriendRescueMenuState(0xF); - else - SetFriendRescueMenuState(0xE); - break; - case 4: - gUnknown_203B33C->unk40 = 4; - gUnknown_203B33C->unk528 = 4; - if(CountMailType(WONDER_MAIL_TYPE_AOK) != 0) - SetFriendRescueMenuState(0x1C); - else - SetFriendRescueMenuState(0x22); - break; - case 0x12: - gUnknown_203B33C->unk40 = 5; - gUnknown_203B33C->unk528 = 0x12; - if(CountMailType(5) != 0) - SetFriendRescueMenuState(0x3D); - else - SetFriendRescueMenuState(0xE); - break; - case 0x13: - gUnknown_203B33C->unk40 = 6; - gUnknown_203B33C->unk528 = 0x13; - if(CountMailType(5) == 0) - SetFriendRescueMenuState(0x51); - else - SetFriendRescueMenuState(0x5B); - break; - case 0x14: - gUnknown_203B33C->unk40 = 7; - gUnknown_203B33C->unk528 = 0x14; - SetFriendRescueMenuState(0x52); - break; - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - } - } -} - -void sub_8033B8C(void) -{ - s32 menuAction; - if(sub_80144A4(&menuAction) == 0) - { - switch(menuAction) - { - case 0xB: - case 0xC: - gUnknown_203B33C->unk524 = 0xB; - switch(gUnknown_203B33C->unk528) - { - case 3: - case 0x11: - case 0x12: - SetFriendRescueMenuState(5); - break; - case 4: - SetFriendRescueMenuState(0x23); - break; - default: - break; - } - break; - case 0xD: - gUnknown_203B33C->unk524 = 0xD; - switch(gUnknown_203B33C->unk528) - { - case 3: - SetFriendRescueMenuState(0x19); - break; - case 0x11: - SetFriendRescueMenuState(0x39); - break; - case 0x12: - SetFriendRescueMenuState(0x43); - break; - case 4: - SetFriendRescueMenuState(0x2D); - break; - default: - break; - } - break; - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - } - } -} - -void sub_8033C54(void) -{ - s32 menuAction; - if(sub_80144A4(&menuAction) == 0) - { - switch(menuAction) - { - case 6: - switch(gUnknown_203B33C->unk528) - { - // NOTE: Each case has to be defined to match - case 3: - SetFriendRescueMenuState(0xD); - break; - case 4: - SetFriendRescueMenuState(0xD); - break; - case 0x11: - SetFriendRescueMenuState(0xD); - break; - case 0x12: - SetFriendRescueMenuState(0xD); - break; - default: - break; - } - break; - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - } - } -} - -void nullsub_41(void) -{ -} - -void sub_8033CAC(void) -{ - s32 temp; - u32 speciesNum; - if(sub_80144A4(&temp) == 0) - { - if(gUnknown_203B33C->status == COMMS_GOOD) - { - switch(gUnknown_203B33C->unk528) - { - case 3: - SetFriendRescueMenuState(0x16); - break; - case 0x11: - SetFriendRescueMenuState(0x37); - break; - case 0x12: - if(sub_800D588() != 0) - speciesNum = gUnknown_203B33C->unk130.pokemon.speciesNum; - else - speciesNum = gUnknown_203B33C->unkA8.pokemon.speciesNum; - if(speciesNum != MONSTER_NONE) - SetFriendRescueMenuState(0x3F); - else - SetFriendRescueMenuState(0x40); - break; - case 4: - SetFriendRescueMenuState(0x2B); - break; - - } - } - else - { - PrintFriendRescueError(gUnknown_203B33C->status); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR); - } - } -} - -void sub_8033D48(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - } -} - -void nullsub_42(void) -{ -} - -void nullsub_43(void) -{ -} - -void nullsub_44(void) -{ -} - -void nullsub_45(void) -{ -} - -void sub_8033D74(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - SetFriendRescueMenuState(0x17); - PrepareSavePakWrite(MONSTER_NONE); - } -} - -void sub_8033D94(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - if(!WriteSavePak()) - { - FinishWriteSavePak(); - SetFriendRescueMenuState(0x18); - } - } -} - -void sub_8033DBC(void) -{ - u32 return_var; - u32 mailMode; - struct unkStruct_203B480 mail; - struct unkStruct_203B480 *mail2; - - return_var = sub_80154F0(); - MemoryFill8((u8 *)&mail, 0, sizeof(struct unkStruct_203B480)); - switch(return_var) - { - case 3: - mailMode = 0xffdc; - switch(gUnknown_203B33C->unk528) - { - case 3: - mailMode = PASSWORD_ENTRY_SOS_MAIL_MODE; - break; - case 0x12: - mailMode = PASSWORD_ENTRY_AOK_MAIL_MODE; - break; - default: - break; - } - switch(sub_8039068(mailMode, gUnknown_203B33C->passwordBuffer, &mail)) - { - case PASSWORD_ENTRY_INCORRECT_PASSWORD: - sub_8014248(gUnknown_80E48A8, 0, 6, &gUnknown_80E2290, 0, 4, 0, 0, 0x101); - SetFriendRescueMenuState(0x1B); - break; - case PASSWORD_ENTRY_NOT_SOS_MAIL: - sub_80141B4(gUnknown_80E48E8, 0, 0, 0x101); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR); - break; - case PASSWORD_ENTRY_DUPLICATE_SOS_MAIL: - sub_80141B4(gUnknown_80E460C, 0, 0, 0x101); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR); - break; - case PASSWORD_ENTRY_SOS_MAIL_SUCCESS: - sub_8095274(mail.unk10.unk10); - mail.mailType = 2; - sub_80951BC(&mail); - sub_80141B4(gUnknown_80E4928, 0, 0, 0x101); - SetFriendRescueMenuState(0x16); - break; - case PASSWORD_ENTRY_NOT_AOK_MAIL: - sub_80141B4(gUnknown_80E4964, 0, 0, 0x101); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR); - break; - case PASSWORD_ENTRY_DUPLICATE_AOK_MAIL: - sub_80141B4(gUnknown_80E499C, 0, 0, 0x101); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR); - break; - case PASSWORD_ENTRY_AOK_MAIL_SUCCESS: - mail.mailType = 5; - sub_80951FC(&mail); - mail2 = GetMailatIndex(GetMailIndex(1, mail.unk10.unk10)); - mail2->mailType = 7; - MemoryFill8((u8 *)gUnknown_203B484, 0, sizeof(struct unkStruct_203B484)); - SetFriendRescueMenuState(0x40); - break; - case 24: - default: - break; - } - sub_80155F0(); - break; - case 2: - sub_80155F0(); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - default: - break; - } -} - -void sub_8033F64(void) -{ - s32 menuAction; - if(sub_80144A4(&menuAction) == 0) - { - switch(menuAction) - { - case 6: - switch(gUnknown_203B33C->unk528) - { - case 3: - SetFriendRescueMenuState(0x19); - break; - case 0x12: - SetFriendRescueMenuState(0x43); - break; - } - break; - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - default: - break; - } - } -} - -void sub_8033FB4(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - switch(temp) - { - case 6: - SetFriendRescueMenuState(0xE); - break; - case 7: - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - default: - break; - } - } -} - -void sub_8033FE4(void) -{ - switch(sub_8030768(1)) - { - case 2: - sub_803084C(); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - case 3: - gUnknown_203B33C->unk218 = sub_80307EC(); - SetFriendRescueMenuState(0x1E); - break; - case 4: - gUnknown_203B33C->fallbackState = 0x1D; - gUnknown_203B33C->unk218 = sub_80307EC(); - sub_8006518(gUnknown_203B33C->unk3BC); - ResetUnusedInputStruct(); - sub_800641C(0, 1, 1); - sub_8030D40(gUnknown_203B33C->unk218, 0); - SetFriendRescueMenuState(0x1F); - break; - } -} - -void sub_8034074(void) -{ - s32 menuAction; - - menuAction = -1; - sub_8030768(0); - if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) - sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); - switch(menuAction) - { - case 9: - sub_803084C(); - SetFriendRescueMenuState(0x20); - break; - case 10: - gUnknown_203B33C->fallbackState = FRIEND_RESCUE_MENU_DEFAULT_FALLBACK; - sub_8006518(gUnknown_203B33C->unk3BC); - ResetUnusedInputStruct(); - sub_800641C(0, 1, 1); - sub_8030D40(gUnknown_203B33C->unk218, 0); - SetFriendRescueMenuState(0x1F); - break; - case 5: - case 8: - sub_8035CC0(gUnknown_203B33C->unk35C, 2); - sub_8030810(0x1); - SetFriendRescueMenuState(0x1D); - break; - } -} - -void sub_8034130(void) -{ - switch(sub_8030DA0()) - { - case 2: - case 3: - sub_8030DE4(); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); - sub_803092C(); - if(gUnknown_203B33C->fallbackState == FRIEND_RESCUE_MENU_DEFAULT_FALLBACK) - { - sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); - SetFriendRescueMenuState(0x1E); - } - else - SetFriendRescueMenuState(gUnknown_203B33C->fallbackState); - break; - default: - break; - } -} - -void sub_803418C(void) -{ - switch(sub_8023A94(1)) - { - case 2: - sub_8023C60(); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - sub_8035D1C(); - gUnknown_203B33C->speciesNum = -1; - break; - case 3: - gUnknown_203B33C->speciesNum = sub_8023B44(); - if(gUnknown_203B33C->unk524 == 0xE) - SetFriendRescueMenuState(9); - else - SetFriendRescueMenuState(0x27); - break; - case 4: - gUnknown_203B33C->fallbackState = 0x26; - gUnknown_203B33C->speciesNum = sub_8023B44(); - sub_8006518(gUnknown_203B33C->unk3BC); - ResetUnusedInputStruct(); - sub_800641C(0, 1, 1); - sub_8024458(gUnknown_203B33C->speciesNum, 0); - SetFriendRescueMenuState(0x28); - break; - } -} - -void sub_8034254(void) -{ - s32 menuAction; - menuAction = -1; - - sub_8023A94(0); - if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) - sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); - switch(menuAction) - { - case 9: - sub_8023C60(); - SetFriendRescueMenuState(0x29); - break; - case 10: - gUnknown_203B33C->fallbackState = FRIEND_RESCUE_MENU_DEFAULT_FALLBACK; - sub_8006518(gUnknown_203B33C->unk3BC); - ResetUnusedInputStruct(); - sub_800641C(0, 1, 1); - sub_8024458(gUnknown_203B33C->speciesNum, 0); - SetFriendRescueMenuState(0x28); - break; - case 5: - case 8: - sub_8035CC0(gUnknown_203B33C->unk35C, 3); - sub_8023DA4(); - SetFriendRescueMenuState(0x26); - break; - } -} - -void sub_8034310(void) -{ - switch(sub_80244E4()) - { - case 1: - sub_802452C(); - break; - case 2: - case 3: - sub_802453C(); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); - sub_8023B7C(1); - if(gUnknown_203B33C->fallbackState == FRIEND_RESCUE_MENU_DEFAULT_FALLBACK) - { - sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); - SetFriendRescueMenuState(0x27); - } - else - SetFriendRescueMenuState(gUnknown_203B33C->fallbackState); - break; - default: - break; - } -} - -void sub_8034378(void) -{ - s32 menuAction; - if(sub_80144A4(&menuAction) == 0) - { - switch(menuAction) - { - case 0x10: - if(gUnknown_203B33C->unk524 == 0xE) - SetFriendRescueMenuState(0x9); - else - SetFriendRescueMenuState(0x5); - break; - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - default: - break; - } - } -} - -void sub_80343C4(void) -{ - s32 menuAction; - if(sub_80144A4(&menuAction) == 0) - { - switch(menuAction) - { - case 6: - SetFriendRescueMenuState(0x5); - break; - case 7: - SetFriendRescueMenuState(0x25); - break; - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - default: - break; - } - } -} - -void sub_8034404(void) -{ - s32 menuAction; - if(sub_80144A4(&menuAction) == 0) - { - switch(menuAction) - { - case 0xF: - if(sub_8024108(3)) - SetFriendRescueMenuState(0x24); - else - SetFriendRescueMenuState(0x25); - break; - case 0x10: - if(gUnknown_203B33C->unk524 == 0xE) - SetFriendRescueMenuState(0x9); - else - SetFriendRescueMenuState(0x5); - break; - case 0x8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - default: - break; - } - } -} - -void sub_8034478(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - if(!WriteSavePak()) - { - FinishWriteSavePak(); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_EXIT); - } - } -} - -void sub_80344A0(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - SetFriendRescueMenuState(0x2C); - PrepareSavePakWrite(MONSTER_NONE); - } -} - -void sub_80344C0(void) -{ - switch(sub_8031DCC()) - { - case 2: - case 3: - sub_8031E10(); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); - SetFriendRescueMenuState(0x2F); - break; - case 1: - sub_8031E00(); - break; - case 0: - break; - } -} - -void sub_8034500(void) -{ - switch(sub_8030768(1)) - { - case 2: - sub_803084C(); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - case 3: - gUnknown_203B33C->unk218 = sub_80307EC(); - SetFriendRescueMenuState(0x33); - break; - case 4: - gUnknown_203B33C->fallbackState = 0x32; - gUnknown_203B33C->unk218 = sub_80307EC(); - sub_8006518(gUnknown_203B33C->unk3BC); - ResetUnusedInputStruct(); - sub_800641C(0, 1, 1); - sub_8030D40(gUnknown_203B33C->unk218, 0); - SetFriendRescueMenuState(0x34); - break; - } -} - -void sub_8034590(void) -{ - s32 menuAction; - menuAction = -1; - - sub_8030768(0); - if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) - sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); - switch(menuAction) - { - case 9: - sub_803084C(); - SetFriendRescueMenuState(0x35); - break; - case 10: - gUnknown_203B33C->fallbackState = FRIEND_RESCUE_MENU_DEFAULT_FALLBACK; - sub_8006518(gUnknown_203B33C->unk3BC); - ResetUnusedInputStruct(); - sub_800641C(0, 1, 1); - sub_8030D40(gUnknown_203B33C->unk218, 0); - SetFriendRescueMenuState(0x34); - break; - case 5: - case 8: - sub_8035CC0(gUnknown_203B33C->unk35C, 2); - sub_8030810(0x1); - SetFriendRescueMenuState(0x32); - break; - } -} - -void sub_803464C(void) -{ - switch(sub_8030DA0()) - { - case 2: - case 3: - sub_8030DE4(); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); - sub_803092C(); - if(gUnknown_203B33C->fallbackState == FRIEND_RESCUE_MENU_DEFAULT_FALLBACK) - { - sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); - SetFriendRescueMenuState(0x33); - } - else - SetFriendRescueMenuState(gUnknown_203B33C->fallbackState); - break; - default: - break; - } -} - -void sub_80346A8(void) -{ - s32 menuAction; - if(sub_80144A4(&menuAction) == 0) - { - switch(menuAction) - { - case 6: - SetFriendRescueMenuState(0xE); - break; - case 7: - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - } - } -} - -void sub_80346D8(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - if(!WriteSavePak()) - { - FinishWriteSavePak(); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_EXIT); - } - } -} - -void sub_8034700(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - SetFriendRescueMenuState(0x38); - PrepareSavePakWrite(MONSTER_NONE); - } -} - -void sub_8034720(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - SetFriendRescueMenuState(0x3A); - } -} - -void sub_803473C(void) -{ - switch(sub_8031DCC()) - { - case 2: - case 3: - sub_8031E10(); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); - SetFriendRescueMenuState(0x3B); - break; - case 1: - sub_8031E00(); - break; - case 0: - break; - } -} - -void sub_803477C(void) -{ - s32 menuAction; - if(sub_80144A4(&menuAction) == 0) - { - switch(menuAction) - { - case 6: - SetFriendRescueMenuState(0xE); - break; - case 7: - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - } - } -} - -void sub_80347AC(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - SetFriendRescueMenuState(0xD); - } -} - -void sub_80347C8(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - SetFriendRescueMenuState(0x40); - } -} - -void sub_80347E4(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - SetFriendRescueMenuState(0x41); - PrepareSavePakWrite(MONSTER_NONE); - } -} - -void sub_8034804(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - if(!WriteSavePak()) - { - FinishWriteSavePak(); - SetFriendRescueMenuState(0x42); - } - } -} - -void sub_803482C(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - } -} - - -void sub_8034848(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - MemoryFill8((u8 *)&gUnknown_203B33C->item, 0 , sizeof(struct Item)); - gUnknown_203B33C->item.id = ITEM_NOTHING; - gUnknown_203B33C->item.quantity = 1; - gUnknown_203B33C->item.flags = 0; - - if(gUnknown_203B33C->status == COMMS_GOOD) - { - switch(gUnknown_203B33C->unk40) - { - case 7: - SetFriendRescueMenuState(0x6D); - break; - case 6: - SetFriendRescueMenuState(0x50); - break; - } - } - else - { - PrintFriendRescueError(gUnknown_203B33C->status); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR_2); - } - } -} - -void sub_80348C4(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - MemoryFill8((u8 *)&gUnknown_203B33C->item, 0 , sizeof(struct Item)); - gUnknown_203B33C->item.id = ITEM_NOTHING; - gUnknown_203B33C->item.quantity = 1; - gUnknown_203B33C->item.flags = 0; - - if(gUnknown_203B33C->status == COMMS_GOOD) - { - switch(gUnknown_203B33C->unk40) - { - case 6: - switch((u32)gUnknown_203B33C->unk524) - { - case 0xB: - case 0xD: - case 0xE: - sub_80141B4(gUnknown_80E31FC, 0, 0, 0x101); - SetFriendRescueMenuState(0x77); - break; - case 0xC: - default: - SetFriendRescueMenuState(0x77); - break; - } - break; - case 7: - SetFriendRescueMenuState(0x6D); - break; - } - } - else - { - PrintFriendRescueError(gUnknown_203B33C->status); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR_2); - } - } -} - -void sub_8034970(void) -{ - switch(sub_8031DCC()) - { - case 2: - case 3: - sub_8031E10(); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); - SetFriendRescueMenuState(0x68); - break; - case 1: - sub_8031E00(); - break; - case 0: - break; - } -} - -void sub_80349B0(void) -{ - s32 menuAction; - if(sub_80144A4(&menuAction) == 0) - { - switch(menuAction) - { - case 6: - SetFriendRescueMenuState(0x52); - break; - case 7: - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - } - } -} - -void sub_80349E0(void) -{ - switch(sub_8030768(1)) - { - case 2: - sub_803084C(); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - case 3: - gUnknown_203B33C->unk218 = sub_80307EC(); - SetFriendRescueMenuState(0x5D); - break; - case 4: - gUnknown_203B33C->fallbackState = 0x5C; - gUnknown_203B33C->unk218 = sub_80307EC(); - sub_8006518(gUnknown_203B33C->unk3BC); - ResetUnusedInputStruct(); - sub_800641C(0, 1, 1); - sub_8030D40(gUnknown_203B33C->unk218, 0); - SetFriendRescueMenuState(0x5E); - break; - } -} - -void sub_8034A70(void) -{ - s32 menuAction; - - menuAction = -1; - sub_8030768(0); - if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) - sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); - switch(menuAction) - { - case 9: - sub_803084C(); - SetFriendRescueMenuState(0x5A); - break; - case 10: - gUnknown_203B33C->fallbackState = FRIEND_RESCUE_MENU_DEFAULT_FALLBACK; - sub_8006518(gUnknown_203B33C->unk3BC); - ResetUnusedInputStruct(); - sub_800641C(0, 1, 1); - sub_8030D40(gUnknown_203B33C->unk218, 0); - SetFriendRescueMenuState(0x5E); - break; - case 5: - case 8: - sub_8035CC0(gUnknown_203B33C->unk35C, 2); - sub_8030810(0x1); - SetFriendRescueMenuState(0x5C); - break; - } -} - -void sub_8034B2C(void) -{ - switch(sub_8030DA0()) - { - case 2: - case 3: - sub_8030DE4(); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); - sub_803092C(); - if(gUnknown_203B33C->fallbackState == FRIEND_RESCUE_MENU_DEFAULT_FALLBACK) - { - sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); - SetFriendRescueMenuState(0x5D); - } - else - SetFriendRescueMenuState(gUnknown_203B33C->fallbackState); - break; - default: - break; - } -} - -void sub_8034B88(void) -{ - gUnknown_203B33C->item.id = ITEM_NOTHING; - gUnknown_203B33C->item.quantity = 1; - gUnknown_203B33C->item.flags = 0; - switch(sub_801CA08(1)) - { - case 2: - sub_801CBB8(); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - case 3: - gUnknown_203B33C->item.id = sub_801CB24(); - SetFriendRescueMenuState(0x60); - break; - case 4: - gUnknown_203B33C->fallbackState = 0x5F; - gUnknown_203B33C->item.id = sub_801CB24(); - sub_8006518(gUnknown_203B33C->unk3BC); - ResetUnusedInputStruct(); - sub_800641C(0, 1, 1); - sub_801B3C0(&gUnknown_203B33C->item); - SetFriendRescueMenuState(0x61); - break; - } -} - -void sub_8034C38(void) -{ - switch(sub_801B410()) - { - case 2: - case 3: - sub_801B450(); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); - sub_801CB5C(1); - if(gUnknown_203B33C->fallbackState == FRIEND_RESCUE_MENU_DEFAULT_FALLBACK) - { - sub_8035CF4(gUnknown_203B33C->unk21C, 3, 1); - SetFriendRescueMenuState(0x60); - } - else - SetFriendRescueMenuState(gUnknown_203B33C->fallbackState); - break; - default: - case 1: - break; - } -} - -void sub_8034C98(void) -{ - s32 menuAction; - - menuAction = -1; - sub_801CA08(0); - if(!sub_8012FD8(&gUnknown_203B33C->unk21C[3])) - sub_8013114(&gUnknown_203B33C->unk21C[3], &menuAction); - switch(menuAction) - { - case 9: - sub_801CBB8(); - SetFriendRescueMenuState(0x58); - break; - case 10: - gUnknown_203B33C->fallbackState = FRIEND_RESCUE_MENU_DEFAULT_FALLBACK; - sub_8006518(gUnknown_203B33C->unk3BC); - ResetUnusedInputStruct(); - sub_800641C(0, 1, 1); - sub_801B3C0(&gUnknown_203B33C->item); - SetFriendRescueMenuState(0x61); - break; - case 5: - case 8: - sub_8035CC0(gUnknown_203B33C->unk35C, 3); - sub_801CB5C(0x1); - SetFriendRescueMenuState(0x5F); - break; - } -} - -void sub_8034D54(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - SetFriendRescueMenuState(0x65); - PrepareSavePakWrite(MONSTER_NONE); - } -} - -void sub_8034D74(void) -{ - u32 return_var; - struct unkStruct_203B480 mail; - struct unkStruct_203B480 *mail2; - - return_var = sub_80154F0(); - MemoryFill8((u8 *)&mail, 0, sizeof(struct unkStruct_203B480)); - switch(return_var) - { - case 3: - switch(sub_8039068(PASSWORD_ENTRY_THANK_YOU_MAIL_MODE, gUnknown_203B33C->passwordBuffer, &mail)) - { - case PASSWORD_ENTRY_INCORRECT_PASSWORD: - sub_8014248(gUnknown_80E48A8, 0, 6, &gUnknown_80E2440, 0, 4, 0, 0, 0x101); - SetFriendRescueMenuState(0x74); - break; - case PASSWORD_ENTRY_NOT_THANK_YOU_MAIL: - sub_80141B4(gUnknown_80E49C4, 0, 0, 0x101); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR_2); - break; - case PASSWORD_ENTRY_DUPLICATE_THANK_YOU_MAIL: - sub_80141B4(gUnknown_80E4704, 0, 0, 0x101); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_ERROR_2); - break; - case PASSWORD_ENTRY_THANK_YOU_MAIL_SUCCESS: - mail2 = GetMailatIndex(GetMailIndex(4, mail.unk10.unk10)); - *mail2 = mail; - mail2->mailType = 6; - gUnknown_203B33C->unk420 = mail.unk10.unk10; - SetFriendRescueMenuState(0x6D); - break; - case 7: - default: - break; - } - sub_80155F0(); - break; - case 2: - sub_80155F0(); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B33C->unk3BC, 1, 1); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - default: - break; - } -} - -void sub_8034EC8(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - if(!WriteSavePak()) - { - FinishWriteSavePak(); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_EXIT); - } - } -} - -void sub_8034EF0(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - if(!WriteSavePak()) - { - FinishWriteSavePak(); - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_EXIT); - } - } -} - -void sub_8034F18(void) -{ - s32 temp; - - if(sub_80144A4(&temp) == 0) - { - SetFriendRescueMenuState(0x65); - PrepareSavePakWrite(MONSTER_NONE); - } -} - -void sub_8034F38(void) -{ - s32 temp; - - if(sub_80144A4(&temp) == 0) - { - SetFriendRescueMenuState(0x71); - PrepareSavePakWrite(MONSTER_NONE); - } -} - -void sub_8034F58(void) -{ - s32 temp; - - if(sub_80144A4(&temp) == 0) - { - switch(temp) - { - case 6: - SetFriendRescueMenuState(0x62); - break; - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - } - } -} - -void sub_8034F88(void) -{ - s32 menuAction; - struct unkStruct_203B480 *mail; - - if(sub_80144A4(&menuAction) == 0) - { - switch(menuAction) - { - case 6: - mail = GetMailatIndex(gUnknown_203B33C->unk218); - if(gUnknown_203B33C->item.id != ITEM_NOTHING) - mail->item = gUnknown_203B33C->item; - gTeamInventory_203B460->teamStorage[gUnknown_203B33C->item.id]--; - SetFriendRescueMenuState(0x75); - break; - case 7: - SetFriendRescueMenuState(0x57); - break; - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - } - } -} - -void sub_8035018(void) -{ - s32 temp; - - if(sub_80144A4(&temp) == 0) - { - SetFriendRescueMenuState(0x76); - PrepareSavePakWrite(MONSTER_NONE); - } -} - -void sub_8035038(void) -{ - s32 temp; - - if(sub_80144A4(&temp) == 0) - { - if(!WriteSavePak()){ - FinishWriteSavePak(); - // Dumb cast to get unsigned switch - switch((u32)gUnknown_203B33C->unk524) - { - default: - break; - case 0xB: - case 0xC: - SetFriendRescueMenuState(0x69); - break; - case 0xD: - SetFriendRescueMenuState(0x66); - break; - case 0xE: - SetFriendRescueMenuState(0x4B); - break; - } - } - } -} - -void sub_8035094(void) -{ - s32 menuAction; - - if(sub_80144A4(&menuAction) == 0) - { - switch(menuAction) - { - case 0x16: - // Dumb cast to get unsigned switch - switch((u32)gUnknown_203B33C->unk524) - { - default: - break; - case 0xB: - case 0xC: - SetFriendRescueMenuState(0x69); - break; - case 0xD: - SetFriendRescueMenuState(0x66); - break; - case 0xE: - SetFriendRescueMenuState(0x4B); - break; - } - break; - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - default: - break; - } - } -} - -void sub_80350F4(void) -{ - s32 menuAction; - - if(sub_80144A4(&menuAction) == 0) - { - switch(menuAction) - { - case 0x15: - if(sub_801CF14(0) != 0) - SetFriendRescueMenuState(0x56); - else - SetFriendRescueMenuState(0x57); - break; - case 0x16: - // Dumb cast to get unsigned switch - switch((u32)gUnknown_203B33C->unk524) - { - default: - break; - case 0xB: - case 0xC: - SetFriendRescueMenuState(0x69); - break; - case 0xD: - SetFriendRescueMenuState(0x66); - break; - case 0xE: - SetFriendRescueMenuState(0x4B); - break; - } - break; - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - default: - break; - } - } -} - -void sub_803517C(void) -{ - s32 menuAction; - - if(sub_80144A4(&menuAction) == 0) - { - switch(menuAction) - { - case 6: - // Dumb cast to get unsigned switch - switch((u32)gUnknown_203B33C->unk524) - { - default: - break; - case 0xB: - case 0xC: - SetFriendRescueMenuState(0x69); - break; - case 0xD: - SetFriendRescueMenuState(0x66); - break; - case 0xE: - SetFriendRescueMenuState(0x4B); - break; - } - break; - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - default: - break; - } - } -} - -void sub_80351E0(void) -{ - s32 menuAction; - - if(sub_80144A4(&menuAction) == 0) - { - switch(menuAction) - { - case 6: - SetFriendRescueMenuState(0x72); - break; - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - default: - break; - } - } -} - -void sub_8035210(void) -{ - s32 menuAction; - struct unkStruct_203B480 *mail; - - if(sub_80144A4(&menuAction) == 0) - { - // NOTE: this is why unk524 can't be changed to u32.. - gUnknown_203B33C->unk524 = menuAction; - switch(gUnknown_203B33C->unk524) - { - case 0xB: - case 0xC: - case 0xD: - if(gUnknown_203B33C->unk528 == 0x13) - { - mail = GetMailatIndex(GetFirstIndexofMailType(5)); - if(mail->item.id != ITEM_NOTHING) - SetFriendRescueMenuState(0x53); - else - SetFriendRescueMenuState(0x55); - } - else if(gUnknown_203B33C->unk524 != 0xD) - SetFriendRescueMenuState(0x69); - else - SetFriendRescueMenuState(0x72); - break; - case 8: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - case 0xE: - default: - break; - } - } -} - -void nullsub_46(void) -{ -} - -void nullsub_47(void) -{ -} - -void nullsub_48(void) -{ -} - -void nullsub_49(void) -{ -} - -void sub_80352A4(void) -{ - u8 mailIndex; - char *monName; - - if ( sub_802F298() == 3) { - sub_802F2C0(); - CopyYellowMonsterNametoBuffer(gUnknown_202E5D8, MONSTER_PELIPPER); - monName = GetMonSpecies(MONSTER_PELIPPER); - strcpy(gAvailablePokemonNames, monName); - mailIndex = GetMailIndex(6, gUnknown_203B33C->unk420); - DeleteMailAtIndex(mailIndex); - SetFriendRescueMenuState(0x70); - } -} - -void sub_8035300(void) -{ - s32 menuAction; - if(sub_80144A4(&menuAction) != 0) - return; - switch(menuAction) - { - case 0x19: - SetFriendRescueMenuState(FRIEND_RESCUE_MENU_MAIN); - break; - case 0x1B: - SetFriendRescueMenuState(0x7A); - break; - case 0x1C: - SetFriendRescueMenuState(0x7C); - break; - case 0x1A: - case 0x1D: - gUnknown_203B33C->unk564 = menuAction; - SetFriendRescueMenuState(0x79); - break; - } -} - -void sub_8035374(void) -{ - s32 menuAction; - if(sub_80144A4(&menuAction) != 0) - return; - switch(menuAction) - { - case 0x19: - SetFriendRescueMenuState(0x78); - break; - case 0x1E: - case 0x1F: - case 0x20: - case 0x21: - case 0x22: - gUnknown_203B33C->unk564 = menuAction; - SetFriendRescueMenuState(0x7B); - break; - } -} - -void sub_80353BC(void) -{ - s32 menuAction; - if(sub_80144A4(&menuAction) != 0) - return; - switch(menuAction) - { - case 0x19: - SetFriendRescueMenuState(0x78); - break; - case 0x23: - case 0x24: - case 0x25: - case 0x26: - gUnknown_203B33C->unk564 = menuAction; - SetFriendRescueMenuState(0x7D); - break; - } -} - -void QueueNextFriendRescueState(u32 nextState) -{ - s32 iVar1; - - if(sub_80144A4(&iVar1) == 0){ - SetFriendRescueMenuState(nextState); - } -} - -void sub_8035424(void) -{ - SetFriendRescueMenuState(6); -} - -void sub_8035430(void) -{ - SetFriendRescueMenuState(0x4F); -} - -void nullsub_50(void) -{ -} - -void nullsub_51(void) -{ -} diff --git a/src/other_menus_1.c b/src/other_menus_1.c index 5d943323d..04ff9e6b4 100644 --- a/src/other_menus_1.c +++ b/src/other_menus_1.c @@ -13,7 +13,6 @@ extern s32 gCommsTimeout; // Counts to 100 and then errors if other player hasn' extern s32 gUnknown_202EC48; extern u32 gUnknown_202EC40[2]; -extern s32 sub_803815C(u32, void *, void*); extern void sub_800D494(void); extern s32 sub_800D33C(void); extern void sub_800D520(void); @@ -22,35 +21,35 @@ extern void sub_80373C4(void); extern void sub_800D59C(s32 *, u32); extern void sub_800D570(void); extern void sub_800D510(void); -extern s32 sub_8037DF0(void); extern u8 sub_800D588(void); extern struct UnkStruct_203B184 *gUnknown_203B184; extern void sub_800D670(u32, s32 *, u32); -void sub_8037F9C(u32 mode, void *param_2, void *param_3); extern void sub_800D68C(u32); - u32 sub_8037C10(u8 param_1) { - if (param_1 != 0) { - if (sub_800D588()) { - goto _zero; + u32 ret; + + if (param_1 != 0) + { + if (sub_800D588()) + { + ret = gUnknown_202EC40[0]; + } + else + { + ret = gUnknown_202EC40[1]; + } + } + else if (sub_800D588()) + { + ret = gUnknown_202EC40[1]; } else { - goto _one; + ret = gUnknown_202EC40[0]; } - } - else if (sub_800D588()) - { -_one: - return gUnknown_202EC40[1]; - } - else - { -_zero: - return gUnknown_202EC40[0]; - } + return ret; } void sub_8037C44(s32 mode, void *data) @@ -89,25 +88,25 @@ void sub_8037CC4(s32 mode, void *param_2, void *param_3) { case 0: case 1: - sub_800D670(0,param_2, sizeof(struct unkStruct_8035D94)); - sub_800D670(1,param_3, sizeof(struct unkStruct_8035D94)); + sub_800D670(0, param_2, sizeof(struct unkStruct_8035D94)); + sub_800D670(1, param_3, sizeof(struct unkStruct_8035D94)); break; case 2: case 3: case 6: case 7: - sub_800D670(0,param_2, sizeof(struct unkStruct_203B480)); - sub_800D670(1,param_3, sizeof(struct unkStruct_203B480)); + sub_800D670(0, param_2, sizeof(struct unkStruct_203B480)); + sub_800D670(1, param_3, sizeof(struct unkStruct_203B480)); break; case 4: case 5: - sub_800D670(0,param_2, sizeof(struct WonderMailStruct_203B2C0_sub)); - sub_800D670(1,param_3, sizeof(struct WonderMailStruct_203B2C0_sub)); + sub_800D670(0, param_2, sizeof(struct WonderMailStruct_203B2C0_sub)); + sub_800D670(1, param_3, sizeof(struct WonderMailStruct_203B2C0_sub)); break; case 9: case 10: - sub_800D670(0,param_2, 0xb4); - sub_800D670(1,param_3, 0xb4); + sub_800D670(0, param_2, 0xb4); + sub_800D670(1, param_3, 0xb4); break; } } From 1bd4d3985c82b49568abee6f9c10cf2a48ce3638 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Wed, 19 Jul 2023 21:16:10 -0700 Subject: [PATCH 07/26] match sub_801DD84 --- src/options_menu.c | 222 +++++---------------------------------------- 1 file changed, 23 insertions(+), 199 deletions(-) diff --git a/src/options_menu.c b/src/options_menu.c index 8f3d596d8..ed7c6bb29 100644 --- a/src/options_menu.c +++ b/src/options_menu.c @@ -61,6 +61,7 @@ extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern s32 sub_8008ED0(u8 *); extern s32 sub_8013800(u32 *, u32); +extern void CreateOthersMenu(void); extern void sub_80078A4(u32, u32, u32, u32, u32); extern u8 sub_80138B8(u32 *, u32); void PlayMenuSoundEffect(u32); @@ -166,227 +167,50 @@ void SetOptionsMenuState(u32 newState) sub_801DED0(); } -#ifdef NONMATCHING void sub_801DD84(void) { - s32 iVar3; + s32 index; sub_8006518(gUnknown_203B25C->unkBC); switch(gUnknown_203B25C->state) { case 0: CreateOthersMenu(); - // TODO probably could be cleaned up to actually match - iVar3 = 0; - if (gUnknown_203B25C->unkAC[iVar3] == 0) { - gUnknown_203B25C->unk18 = gUnknown_203B25C->menuItems[iVar3].menuAction; - } - else { - do { - iVar3++; - if(iVar3 > 7) - break; - if(gUnknown_203B25C->unkAC[iVar3] == 0){ - gUnknown_203B25C->unk18 = gUnknown_203B25C->menuItems[iVar3].menuAction; - break; - } - } while (iVar3 < 8); - } - for(iVar3 = 0; iVar3 < 4; iVar3++) + for(index = 0; index < 8; index++) { - gUnknown_203B25C->unkBC[iVar3] = gUnknown_80DBFCC; + if(gUnknown_203B25C->unkAC[index] == 0) + { + gUnknown_203B25C->menuAction = gUnknown_203B25C->menuItems[index].menuAction; + break; + } } - gUnknown_203B25C->unkBC[0] = gUnknown_80DBFB0; - sub_8012CAC(&gUnknown_203B25C->unkBC[0], gUnknown_203B25C->menuItems); - gUnknown_203B25C->unkBC[0].unk0c = 0xA; - break; - case 1: - CreateOthersMenu(); - for(iVar3 = 0; iVar3 < 4; iVar3++) + for(index = 0; index < 4; index++) { - gUnknown_203B25C->unkBC[iVar3] = gUnknown_80DBFB0; + gUnknown_203B25C->unkBC[index] = gUnknown_80DBFB0; } gUnknown_203B25C->unkBC[0] = gUnknown_80DBFCC; sub_8012CAC(&gUnknown_203B25C->unkBC[0], gUnknown_203B25C->menuItems); - gUnknown_203B25C->unkBC[0].unk0c = 0xA; + gUnknown_203B25C->unkBC[0].unkC = 0xA; + break; + case 1: + CreateOthersMenu(); + for(index = 0; index < 4; index++) + { + gUnknown_203B25C->unkBC[index] = gUnknown_80DBFB0; + } + gUnknown_203B25C->unkBC[0] = gUnknown_80DBFCC; + sub_8012CAC(&gUnknown_203B25C->unkBC[0], gUnknown_203B25C->menuItems); + gUnknown_203B25C->unkBC[0].unkC = 0xA; break; default: - for(iVar3 = 0; iVar3 < 4; iVar3++) + for(index = 0; index < 4; index++) { - gUnknown_203B25C->unkBC[iVar3] = gUnknown_80DBFB0; + gUnknown_203B25C->unkBC[index] = gUnknown_80DBFB0; } break; } ResetUnusedInputStruct(); sub_800641C(gUnknown_203B25C->unkBC, 1, 1); } -#else -NAKED -void sub_801DD84(void) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r9\n" - "\tmov r6, r8\n" - "\tpush {r6,r7}\n" - "\tldr r4, _0801DDAC\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0xBC\n" - "\tbl sub_8006518\n" - "\tldr r0, [r4]\n" - "\tldr r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbeq _0801DDB4\n" - "\tcmp r0, 0x1\n" - "\tbeq _0801DE38\n" - "\tmovs r3, 0\n" - "\tadds r7, r4, 0\n" - "\tldr r2, _0801DDB0\n" - "\tb _0801DE90\n" - "\t.align 2, 0\n" -"_0801DDAC: .4byte gUnknown_203B25C\n" -"_0801DDB0: .4byte gUnknown_80DBFB0\n" -"_0801DDB4:\n" - "\tbl CreateOthersMenu\n" - "\tmovs r3, 0\n" - "\tldr r1, [r4]\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0xAC\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbne _0801DDCE\n" - "\tldr r0, [r1, 0x70]\n" - "\tstr r0, [r1, 0x18]\n" - "\tadds r7, r4, 0\n" - "\tb _0801DDF2\n" -"_0801DDCE:\n" - "\tadds r3, 0x1\n" - "\tldr r7, _0801DE2C\n" - "\tcmp r3, 0x7\n" - "\tbgt _0801DDF2\n" - "\tldr r2, [r7]\n" - "\tlsls r0, r3, 1\n" - "\tadds r1, r2, 0\n" - "\tadds r1, 0xAC\n" - "\tadds r1, r0\n" - "\tldrh r0, [r1]\n" - "\tcmp r0, 0\n" - "\tbne _0801DDCE\n" - "\tlsls r0, r3, 3\n" - "\tadds r1, r2, 0\n" - "\tadds r1, 0x70\n" - "\tadds r1, r0\n" - "\tldr r0, [r1]\n" - "\tstr r0, [r2, 0x18]\n" -"_0801DDF2:\n" - "\tldr r0, _0801DE30\n" - "\tmov r9, r0\n" - "\tldr r2, _0801DE2C\n" - "\tmov r12, r2\n" - "\tldr r3, _0801DE34\n" - "\tmov r8, r3\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0x3\n" -"_0801DE02:\n" - "\tmov r4, r12\n" - "\tldr r1, [r4]\n" - "\tadds r1, r2\n" - "\tadds r1, 0xBC\n" - "\tmov r0, r8\n" - "\tldm r0!, {r4-r6}\n" - "\tstm r1!, {r4-r6}\n" - "\tldm r0!, {r4-r6}\n" - "\tstm r1!, {r4-r6}\n" - "\tadds r2, 0x18\n" - "\tsubs r3, 0x1\n" - "\tcmp r3, 0\n" - "\tbge _0801DE02\n" - "\tldr r1, [r7]\n" - "\tadds r1, 0xBC\n" - "\tmov r0, r9\n" - "\tldm r0!, {r2,r5,r6}\n" - "\tstm r1!, {r2,r5,r6}\n" - "\tldm r0!, {r3-r5}\n" - "\tstm r1!, {r3-r5}\n" - "\tb _0801DE70\n" - "\t.align 2, 0\n" -"_0801DE2C: .4byte gUnknown_203B25C\n" -"_0801DE30: .4byte gUnknown_80DBFCC\n" -"_0801DE34: .4byte gUnknown_80DBFB0\n" -"_0801DE38:\n" - "\tbl CreateOthersMenu\n" - "\tmov r8, r4\n" - "\tldr r6, _0801DE88\n" - "\tmov r12, r6\n" - "\tmov r7, r8\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0x3\n" -"_0801DE48:\n" - "\tmov r0, r8\n" - "\tldr r1, [r0]\n" - "\tadds r1, r2\n" - "\tadds r1, 0xBC\n" - "\tmov r0, r12\n" - "\tldm r0!, {r4-r6}\n" - "\tstm r1!, {r4-r6}\n" - "\tldm r0!, {r4-r6}\n" - "\tstm r1!, {r4-r6}\n" - "\tadds r2, 0x18\n" - "\tsubs r3, 0x1\n" - "\tcmp r3, 0\n" - "\tbge _0801DE48\n" - "\tldr r1, [r7]\n" - "\tadds r1, 0xBC\n" - "\tldr r0, _0801DE8C\n" - "\tldm r0!, {r2-r4}\n" - "\tstm r1!, {r2-r4}\n" - "\tldm r0!, {r2,r5,r6}\n" - "\tstm r1!, {r2,r5,r6}\n" -"_0801DE70:\n" - "\tldr r1, [r7]\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0xBC\n" - "\tadds r1, 0x6C\n" - "\tbl sub_8012CAC\n" - "\tldr r0, [r7]\n" - "\tadds r0, 0xC8\n" - "\tmovs r1, 0xA\n" - "\tstrh r1, [r0]\n" - "\tb _0801DEAC\n" - "\t.align 2, 0\n" -"_0801DE88: .4byte gUnknown_80DBFB0\n" -"_0801DE8C: .4byte gUnknown_80DBFCC\n" -"_0801DE90:\n" - "\tldr r0, [r7]\n" - "\tlsls r1, r3, 1\n" - "\tadds r1, r3\n" - "\tlsls r1, 3\n" - "\tadds r0, r1\n" - "\tadds r0, 0xBC\n" - "\tadds r1, r2, 0\n" - "\tldm r1!, {r4-r6}\n" - "\tstm r0!, {r4-r6}\n" - "\tldm r1!, {r4-r6}\n" - "\tstm r0!, {r4-r6}\n" - "\tadds r3, 0x1\n" - "\tcmp r3, 0x3\n" - "\tble _0801DE90\n" -"_0801DEAC:\n" - "\tbl ResetUnusedInputStruct\n" - "\tldr r0, _0801DECC\n" - "\tldr r0, [r0]\n" - "\tadds r0, 0xBC\n" - "\tmovs r1, 0x1\n" - "\tmovs r2, 0x1\n" - "\tbl sub_800641C\n" - "\tpop {r3,r4}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_0801DECC: .4byte gUnknown_203B25C"); -} -#endif void sub_801DED0(void) { From 872b3b3e9ced179d82e6c31fdddb26e7a0e9f545 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Wed, 19 Jul 2023 22:02:42 -0700 Subject: [PATCH 08/26] another menuinputstruct --- src/options_menu.c | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/src/options_menu.c b/src/options_menu.c index ed7c6bb29..7a72e9960 100644 --- a/src/options_menu.c +++ b/src/options_menu.c @@ -14,7 +14,7 @@ struct unkStruct_203B25C u32 chosenHintIndex; struct GameOptions newOptions; u32 menuAction; - struct MenuStruct unk1C; + struct MenuStruct menu; struct MenuItem menuItems[8]; u16 unkAC[8]; struct UnkTextStruct2 unkBC[4]; @@ -26,10 +26,7 @@ struct unkStruct_203B260 u32 unk4; u8 unk8; u8 fill9[0x10 - 0x9]; - u32 unk10; - u8 fill14[0x28 - 0x14]; - s16 unk28; - u8 fill2A[0x44 - 0x2A]; + struct MenuInputStruct input; u32 unk44; struct UnkTextStruct2 * unk48; struct UnkTextStruct2 unk4C[4]; @@ -60,10 +57,10 @@ extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern s32 sub_8008ED0(u8 *); -extern s32 sub_8013800(u32 *, u32); +extern s32 sub_8013800(void *, u32); extern void CreateOthersMenu(void); extern void sub_80078A4(u32, u32, u32, u32, u32); -extern u8 sub_80138B8(u32 *, u32); +extern u8 sub_80138B8(void *, u32); void PlayMenuSoundEffect(u32); s32 sub_8012AE8(void); void sub_801317C(u32 *); @@ -173,7 +170,7 @@ void sub_801DD84(void) sub_8006518(gUnknown_203B25C->unkBC); switch(gUnknown_203B25C->state) { - case 0: + case OPTIONS_MENU_INIT: CreateOthersMenu(); for(index = 0; index < 8; index++) { @@ -191,7 +188,7 @@ void sub_801DD84(void) sub_8012CAC(&gUnknown_203B25C->unkBC[0], gUnknown_203B25C->menuItems); gUnknown_203B25C->unkBC[0].unkC = 0xA; break; - case 1: + case OPTIONS_MENU_MAIN: CreateOthersMenu(); for(index = 0; index < 4; index++) { @@ -217,8 +214,8 @@ void sub_801DED0(void) switch(gUnknown_203B25C->state) { case OPTIONS_MENU_INIT: case OPTIONS_MENU_MAIN: - gUnknown_203B25C->unk1C.unk0 = gOthers_MenuOption; - sub_8012D60(&gUnknown_203B25C->unk1C,gUnknown_203B25C->menuItems,0,gUnknown_203B25C->unkAC,gUnknown_203B25C->menuAction,0); + gUnknown_203B25C->menu.unk0 = gOthers_MenuOption; + sub_8012D60(&gUnknown_203B25C->menu,gUnknown_203B25C->menuItems,0,gUnknown_203B25C->unkAC,gUnknown_203B25C->menuAction,0); break; case OPTIONS_MENU_PRE_HINT_SELECTION: sub_801E3F0(0); @@ -282,8 +279,8 @@ void HandleOthersMenu(void) s32 menuAction; menuAction = 0; - if (sub_8012FD8(&gUnknown_203B25C->unk1C) == '\0') { - sub_8013114(&gUnknown_203B25C->unk1C,&menuAction); + if (sub_8012FD8(&gUnknown_203B25C->menu) == '\0') { + sub_8013114(&gUnknown_203B25C->menu,&menuAction); gUnknown_203B25C->menuAction = menuAction; } switch(menuAction) @@ -394,7 +391,7 @@ bool8 sub_801E198(struct GameOptions *optionsMenu) sub_8012D08(gUnknown_203B260->unk48,1); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B260->unk4C,1,1); - sub_8013818(&gUnknown_203B260->unk10,1,1,gUnknown_203B260->unk44); + sub_8013818(&gUnknown_203B260->input,1,1,gUnknown_203B260->unk44); nullsub_38(); CreateOptionsMenu(); return TRUE; @@ -415,7 +412,7 @@ u32 sub_801E218(void) PlayMenuSoundEffect(0); return 3; case INPUT_DPAD_LEFT: - if (gUnknown_203B260->unk28 == 0) + if (gUnknown_203B260->input.menuIndex == 0) { if (gUnknown_203B260->optionsMenu->windowColor == WINDOW_COLOR_BLUE) { gUnknown_203B260->optionsMenu->windowColor = WINDOW_COLOR_GREEN; @@ -428,7 +425,7 @@ u32 sub_801E218(void) } break; case INPUT_DPAD_RIGHT: - if(gUnknown_203B260->unk28 == 0) + if(gUnknown_203B260->input.menuIndex == 0) { if (gUnknown_203B260->optionsMenu->windowColor > WINDOW_COLOR_RED) { gUnknown_203B260->optionsMenu->windowColor = WINDOW_COLOR_BLUE; @@ -442,7 +439,7 @@ u32 sub_801E218(void) } // == 1 is needed for matching - if ((sub_80138B8(&gUnknown_203B260->unk10,1) != 0) || (flag == TRUE)) { + if ((sub_80138B8(&gUnknown_203B260->input,1) != 0) || (flag == TRUE)) { nullsub_38(); CreateOptionsMenu(); return 1; @@ -478,7 +475,7 @@ void CreateOptionsMenu(void) sub_8008C54(gUnknown_203B260->unk44); sub_80073B8(gUnknown_203B260->unk44); xxx_call_draw_string(0x10,0,gWindowBGTitle,gUnknown_203B260->unk44,0); - y = sub_8013800(&gUnknown_203B260->unk10,0); + y = sub_8013800(&gUnknown_203B260->input,0); xxx_call_draw_string(8,y,gUnknown_80DC064,gUnknown_203B260->unk44,0); switch(gUnknown_203B260->optionsMenu->windowColor) From b33cceb0ceb2a157e1b0e984a47712df96334347 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 21 Jul 2023 14:19:40 -0700 Subject: [PATCH 09/26] match sub_80097B0 --- asm/text.s | 41 ----------------------------------------- src/code_8009804.c | 33 ++++++++++++++++++++++++++++----- 2 files changed, 28 insertions(+), 46 deletions(-) diff --git a/asm/text.s b/asm/text.s index 2afc5070a..06954f8fc 100644 --- a/asm/text.s +++ b/asm/text.s @@ -6975,45 +6975,4 @@ _080097A8: .4byte 0x06017e00 _080097AC: .4byte gUnknown_80B88C0 thumb_func_end InitGraphics - thumb_func_start sub_80097B0 -sub_80097B0: - push {r4-r6,lr} - ldr r0, _080097F8 - ldr r1, _080097FC - bl OpenFileAndGetFileDataPtr - adds r6, r0, 0 - ldr r4, _08009800 - ldr r1, [r6, 0x4] - movs r2, 0x80 - lsls r2, 2 - adds r0, r4, 0 - bl CpuCopy - bl sub_80063B0 - adds r5, r4, 0 - adds r5, 0x40 - cmp r0, 0x1 - bne _080097D8 - adds r5, r4, 0 -_080097D8: - movs r4, 0 -_080097DA: - adds r0, r4, 0 - adds r0, 0xF0 - adds r1, r5, 0 - bl SetBGPaletteBufferColorArray - adds r5, 0x4 - adds r4, 0x1 - cmp r4, 0xF - ble _080097DA - adds r0, r6, 0 - bl CloseFile - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080097F8: .4byte gUnknown_80B88CC -_080097FC: .4byte gSystemFileArchive -_08009800: .4byte gUnknown_202D038 - thumb_func_end sub_80097B0 - .align 2, 0 @ Don't pad with nop. diff --git a/src/code_8009804.c b/src/code_8009804.c index d06bf6949..ac7c81aee 100644 --- a/src/code_8009804.c +++ b/src/code_8009804.c @@ -1,9 +1,11 @@ #include "global.h" +#include "file_system.h" extern u8 gUnknown_202D238[4]; - extern s32 gUnknown_202D23C; extern u16 gUnknown_202B038[4][32][32]; +extern u8 gUnknown_80B88CC[]; +struct FileArchive gSystemFileArchive; struct unkStruct_202D240 { @@ -16,16 +18,37 @@ extern struct unkStruct_202D240 gUnknown_202D240[8]; struct unkStruct_202D038 { // size: 0x40 - u32 unk0; - u32 unk4; - u8 fill[0x40 - 0x8]; + u32 unk0[0x10]; }; extern struct unkStruct_202D038 gUnknown_202D038[8]; extern void CpuCopy(void* dest, void *src, s32 size); +extern void SetBGPaletteBufferColorArray(s32 index, void *colorArray); extern void sub_8009A1C(u32); +u32 sub_80063B0(void); +void sub_80097B0(void) +{ + struct OpenedFile *fontpalFile; + s32 index; + u32 *ptr; + + fontpalFile = OpenFileAndGetFileDataPtr(gUnknown_80B88CC,&gSystemFileArchive); // fontpal + CpuCopy(gUnknown_202D038, fontpalFile->data, sizeof(gUnknown_202D038)); + if (sub_80063B0() == 1) { + ptr = &gUnknown_202D038[0].unk0[0]; + } + else + { + ptr = &gUnknown_202D038[1].unk0[0]; + } + for(index = 0; index < 0x10; ptr++, index++) + { + SetBGPaletteBufferColorArray(index + 0xf0, ptr); + } + CloseFile(fontpalFile); +} void vram_related_8009804(void) { @@ -131,7 +154,7 @@ void sub_80099F0(u32 r0) s32 iVar2; for(iVar2 = 0; iVar2 < 8; iVar2++) { - gUnknown_202D038[iVar2].unk4 = r0; + gUnknown_202D038[iVar2].unk0[1] = r0; } } From eaaa2012da29ea47ae117f1aced87fbdaedfedc6 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 21 Jul 2023 16:44:47 -0700 Subject: [PATCH 10/26] finish matching exclusive_pokemon --- asm/exclusive_pokemon.s | 341 ------------------------------------ include/exclusive_pokemon.h | 20 ++- ld_script.txt | 2 - src/code_8057824_1.c | 5 +- src/code_80848F0.c | 7 +- src/code_8086A3C.c | 3 +- src/code_80972F4.c | 5 +- src/exclusive_pokemon.c | 267 +++++++++++++++++++++++++++- src/exclusive_pokemon_1.c | 123 ------------- 9 files changed, 290 insertions(+), 483 deletions(-) delete mode 100644 asm/exclusive_pokemon.s delete mode 100644 src/exclusive_pokemon_1.c diff --git a/asm/exclusive_pokemon.s b/asm/exclusive_pokemon.s deleted file mode 100644 index 71152bc65..000000000 --- a/asm/exclusive_pokemon.s +++ /dev/null @@ -1,341 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8097FA8 -sub_8097FA8: - lsls r0, 24 - ldr r1, _08097FCC - ldr r3, [r1] - lsrs r1, r0, 29 - lsls r1, 2 - adds r3, 0x48 - adds r3, r1 - movs r1, 0xF8 - lsls r1, 21 - ands r1, r0 - lsrs r1, 24 - movs r2, 0x1 - lsls r2, r1 - ldr r0, [r3] - orrs r0, r2 - str r0, [r3] - bx lr - .align 2, 0 -_08097FCC: .4byte gUnknown_203B498 - thumb_func_end sub_8097FA8 - - thumb_func_start sub_8097FD0 -sub_8097FD0: - lsls r0, 24 - ldr r1, _08097FF4 - ldr r3, [r1] - lsrs r1, r0, 29 - lsls r1, 2 - adds r3, 0x3C - adds r3, r1 - movs r1, 0xF8 - lsls r1, 21 - ands r1, r0 - lsrs r1, 24 - movs r2, 0x1 - lsls r2, r1 - ldr r0, [r3] - orrs r0, r2 - str r0, [r3] - bx lr - .align 2, 0 -_08097FF4: .4byte gUnknown_203B498 - thumb_func_end sub_8097FD0 - - thumb_func_start sub_8097FF8 -sub_8097FF8: - push {r4-r7,lr} - movs r4, 0 - ldr r6, _08098040 - movs r7, 0x1 -_08098000: - ldr r5, [r6] - adds r0, r4, 0 - cmp r4, 0 - bge _0809800A - adds r0, 0x1F -_0809800A: - asrs r0, 5 - lsls r3, r0, 2 - adds r1, r5, 0 - adds r1, 0x48 - adds r1, r3 - lsls r0, 5 - subs r0, r4, r0 - adds r2, r7, 0 - lsls r2, r0 - ldr r0, [r1] - ands r0, r2 - cmp r0, 0 - beq _08098030 - adds r1, r5, 0 - adds r1, 0x3C - adds r1, r3 - ldr r0, [r1] - orrs r0, r2 - str r0, [r1] -_08098030: - adds r4, 0x1 - cmp r4, 0x3F - ble _08098000 - bl sub_8098080 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08098040: .4byte gUnknown_203B498 - thumb_func_end sub_8097FF8 - - thumb_func_start sub_8098044 -sub_8098044: - push {r4,r5,lr} - lsls r0, 24 - ldr r1, _0809807C - ldr r3, [r1] - lsrs r5, r0, 29 - lsls r5, 2 - adds r4, r3, 0 - adds r4, 0x3C - adds r4, r5 - movs r1, 0xF8 - lsls r1, 21 - ands r1, r0 - lsrs r1, 24 - movs r2, 0x1 - lsls r2, r1 - mvns r2, r2 - ldr r0, [r4] - ands r0, r2 - str r0, [r4] - adds r3, 0x48 - adds r3, r5 - ldr r0, [r3] - ands r0, r2 - str r0, [r3] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809807C: .4byte gUnknown_203B498 - thumb_func_end sub_8098044 - - thumb_func_start sub_8098080 -sub_8098080: - push {r4,lr} - movs r2, 0 - ldr r4, _080980A0 - movs r3, 0 -_08098088: - ldr r0, [r4] - lsls r1, r2, 2 - adds r0, 0x48 - adds r0, r1 - str r3, [r0] - adds r2, 0x1 - cmp r2, 0x2 - ble _08098088 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080980A0: .4byte gUnknown_203B498 - thumb_func_end sub_8098080 - - thumb_func_start sub_80980A4 -sub_80980A4: - ldr r0, _080980B0 - ldr r2, [r0] - ldrb r0, [r2] - movs r1, 0x1 - strb r1, [r2] - bx lr - .align 2, 0 -_080980B0: .4byte gUnknown_203B498 - thumb_func_end sub_80980A4 - - thumb_func_start sub_80980B4 -sub_80980B4: - push {lr} - lsls r0, 16 - asrs r1, r0, 16 - adds r3, r1, 0 - ldr r0, _080980F8 - cmp r1, r0 - beq _080980F4 - adds r0, 0x1 - cmp r1, r0 - beq _080980F4 - adds r0, 0x1 - cmp r1, r0 - beq _080980F4 - ldr r0, _080980FC - ldr r2, [r0] - adds r0, r1, 0 - cmp r1, 0 - bge _080980DA - adds r0, 0x1F -_080980DA: - asrs r0, 5 - lsls r1, r0, 2 - adds r2, 0x4 - adds r2, r1 - lsls r0, 5 - subs r0, r3, r0 - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - lsls r1, r0 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] -_080980F4: - pop {r0} - bx r0 - .align 2, 0 -_080980F8: .4byte 0x000001a5 -_080980FC: .4byte gUnknown_203B498 - thumb_func_end sub_80980B4 - - thumb_func_start sub_8098100 -sub_8098100: - push {lr} - lsls r1, r0, 24 - lsrs r3, r1, 24 - cmp r3, 0x3F - bls _0809810E - movs r0, 0 - b _0809812C -_0809810E: - ldr r0, _08098130 - ldr r2, [r0] - lsrs r0, r1, 29 - lsls r0, 2 - adds r2, 0x3C - adds r2, r0 - movs r0, 0x1F - ands r0, r3 - movs r1, 0x1 - lsls r1, r0 - ldr r0, [r2] - ands r0, r1 - cmp r0, 0 - beq _0809812C - movs r0, 0x1 -_0809812C: - pop {r1} - bx r1 - .align 2, 0 -_08098130: .4byte gUnknown_203B498 - thumb_func_end sub_8098100 - - thumb_func_start sub_8098134 -sub_8098134: - push {lr} - lsls r0, 16 - asrs r1, r0, 16 - adds r3, r1, 0 - ldr r0, _0809816C - ldr r2, [r0] - adds r0, r1, 0 - cmp r1, 0 - bge _08098148 - adds r0, 0x1F -_08098148: - asrs r0, 5 - lsls r1, r0, 2 - adds r2, 0x4 - adds r2, r1 - lsls r0, 5 - subs r0, r3, r0 - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - lsls r1, r0 - ldr r0, [r2] - ands r0, r1 - cmp r0, 0 - beq _08098166 - movs r0, 0x1 -_08098166: - pop {r1} - bx r1 - .align 2, 0 -_0809816C: .4byte gUnknown_203B498 - thumb_func_end sub_8098134 - - thumb_func_start sub_8098170 -sub_8098170: - push {lr} - adds r3, r0, 0 - ldr r0, _0809819C - ldr r2, [r0] - adds r0, r3, 0 - cmp r3, 0 - bge _08098180 - adds r0, 0x1F -_08098180: - asrs r0, 5 - lsls r1, r0, 2 - adds r2, 0x54 - adds r2, r1 - lsls r0, 5 - subs r0, r3, r0 - movs r1, 0x1 - lsls r1, r0 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] - pop {r0} - bx r0 - .align 2, 0 -_0809819C: .4byte gUnknown_203B498 - thumb_func_end sub_8098170 - - thumb_func_start sub_80981A0 -sub_80981A0: - push {lr} - adds r3, r0, 0 - cmp r3, 0x1E - ble _080981AC - movs r0, 0 - b _080981D4 -_080981AC: - ldr r0, _080981D8 - ldr r2, [r0] - adds r1, r3, 0 - cmp r3, 0 - bge _080981B8 - adds r1, 0x1F -_080981B8: - asrs r1, 5 - lsls r0, r1, 2 - adds r2, 0x54 - adds r2, r0 - lsls r1, 5 - subs r1, r3, r1 - movs r0, 0x1 - lsls r0, r1 - ldr r2, [r2] - ands r2, r0 - cmp r2, 0 - beq _080981D2 - movs r2, 0x1 -_080981D2: - adds r0, r2, 0 -_080981D4: - pop {r1} - bx r1 - .align 2, 0 -_080981D8: .4byte gUnknown_203B498 - thumb_func_end sub_80981A0 - - .align 2,0 diff --git a/include/exclusive_pokemon.h b/include/exclusive_pokemon.h index be105e700..14d00b945 100644 --- a/include/exclusive_pokemon.h +++ b/include/exclusive_pokemon.h @@ -15,8 +15,13 @@ struct ExclusivePokemon struct ExclusivePokemonData { - u8 fill0[0x48]; - u32 unk48[4]; + u8 unk0; + u32 unk4[1]; + u8 fill8[0x3C - 8]; + u32 unk3C[1]; + u8 fill40[8]; + u32 unk48[3]; + u32 unk54[1]; /* 0x58 */ bool8 Exclusives[NUM_EXCLUSIVE_POKEMON]; }; @@ -39,6 +44,17 @@ extern struct ExclusivePokemonData *gUnknown_203B498; void LoadExclusivePokemon(void); struct ExclusivePokemonData *GetExclusivePokemon(void); void InitializeExclusivePokemon(void); +void sub_8097FA8(u8 param_1); +void sub_8097FD0(u8 param_1); +void sub_8097FF8(void); +void sub_8098044(u8 param_1); +void sub_8098080(void); +u32 sub_80980A4(void); +void sub_80980B4(s16 pokeID); +bool8 sub_8098100(u8 param_1); +bool8 sub_8098134(s16 pokeID); +void sub_8098170(s32 param_1); +bool32 sub_80981A0(s32 param_1); bool8 IsExclusivePokemonUnlocked(s16 pokeID); void UnlockExclusivePokemon(s16 pokeID); void WriteExclusivePokemon(struct unkStruct_8094924 *r0); diff --git a/ld_script.txt b/ld_script.txt index 9a6a8c802..e183f77af 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -304,8 +304,6 @@ SECTIONS { asm/code_8097DD0.o(.text); src/code_8097F40.o(.text); src/exclusive_pokemon.o(.text); - asm/exclusive_pokemon.o(.text); - src/exclusive_pokemon_1.o(.text); src/position_util.o(.text); asm/code_8098468.o(.text); src/ground_main.o(.text); diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index a4d848f85..7dd0d4612 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -14,6 +14,7 @@ #include "item.h" #include "pokemon.h" #include "position_util.h" +#include "exclusive_pokemon.h" extern u32 gUnknown_202EDC8; extern u8 gUnknown_202E038[0x50]; @@ -380,7 +381,6 @@ extern void DisplayDungeonDialogue(u32 *r0); extern void SpriteShockEffect(struct Entity *); extern u32 sub_80861F8(u32, struct Entity *, u32); -extern void sub_8097FA8(u32); extern void JirachiWish(); extern void JirachiSpinEffect(struct Entity *); @@ -393,14 +393,12 @@ 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 sub_8097FD0(u32); extern void SetMessageArgument(u8 *, struct Entity *, u32); extern struct Entity *GetLeader(); extern void sub_80421C0(struct Entity *, u32); extern void sub_8046D20(); extern void sub_808B1CC(u8); extern void sub_80464C8(struct Entity *, u32 *, struct Item *); -extern void sub_8098044(u32); extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32); extern void sub_803E46C(u32); extern void sub_80866C4(u32 *); @@ -418,7 +416,6 @@ extern void sub_80426C8(u32, u32); extern void sub_807EAA0(u32, u32); extern void CreateJirachiWishWarpTile(void); -extern u8 sub_8098100(u32); extern void sub_8086794(); void EnteiScreenFlash(void); diff --git a/src/code_80848F0.c b/src/code_80848F0.c index 506cf141c..56c19304b 100644 --- a/src/code_80848F0.c +++ b/src/code_80848F0.c @@ -1,6 +1,7 @@ #include "global.h" #include "dungeon_global_data.h" #include "dungeon_music.h" +#include "exclusive_pokemon.h" extern void SkarmoryPreFightDialogue(); extern void SkarmoryReFightDialogue(); @@ -62,7 +63,6 @@ extern void SmeargleRescueDialogue(); extern void sub_808CD9C(); extern void sub_8085764(); extern void sub_80857B8(); -extern void sub_8097FF8(); extern void sub_8086BDC(u32,u8); extern void sub_8086F54(u32,u8); @@ -143,10 +143,7 @@ extern void sub_808C9C4(void); extern void sub_808CB5C(void); extern void sub_808CBB0(void); extern void sub_808CD44(void); -extern void sub_8097FF8(void); -extern u8 sub_8098100(u8); -extern void sub_8097FA8(void); extern void sub_807E5E4(u32); void sub_8084854(u8 *param_1) @@ -168,7 +165,7 @@ void sub_8084854(u8 *param_1) { gDungeon->unk3A0D = param_1[1]; if (param_1[2] != 0x40) { - sub_8097FA8(); + sub_8097FA8(param_1[2]); } } } diff --git a/src/code_8086A3C.c b/src/code_8086A3C.c index af126aa8e..99bb14818 100644 --- a/src/code_8086A3C.c +++ b/src/code_8086A3C.c @@ -9,16 +9,15 @@ #include "pokemon.h" #include "dungeon_util_1.h" #include "dungeon_util.h" +#include "exclusive_pokemon.h" extern void SetDefaultIQSkills(u8 *param_1, u8 param_2); -extern void sub_8097FF8(void); extern u8 sub_8044B28(void); extern u8 HasRecruitedMon(u32); extern u8 gUnknown_202E038[]; extern void sub_8085374(); extern void sub_80855E4(void *); extern void sub_8068FE0(struct Entity *, u32, u32); -extern void sub_8097FA8(u32); extern void DisplayDungeonDialogue(u8 *); extern void sub_806CDD4(struct Entity *, u32, u32); extern void sub_80869E4(struct Entity *, u32, u32, u32); diff --git a/src/code_80972F4.c b/src/code_80972F4.c index 8e463a75f..b3c2e5e9f 100644 --- a/src/code_80972F4.c +++ b/src/code_80972F4.c @@ -4,6 +4,7 @@ #include "wonder_mail.h" #include "code_80958E8.h" #include "dungeon.h" +#include "exclusive_pokemon.h" struct MissionText { @@ -19,10 +20,8 @@ extern const char gMeetNinetalesText[]; extern const char gAvoidCaptureText[]; extern const u8 gUnknown_8109CC0[]; extern const u8 gDummyScenarioText[]; -extern u8 sub_80A270C(); +extern u8 sub_80A270C(s16); -extern void sub_8097FA8(u32); -extern void sub_8097FF8(void); extern u8 sub_80A2728(s16); extern bool8 sub_8001D08(u32, u32 ,s32); extern u32 sub_8001784(u32, u32, u16); diff --git a/src/exclusive_pokemon.c b/src/exclusive_pokemon.c index c5e9a09a7..17106d6a2 100644 --- a/src/exclusive_pokemon.c +++ b/src/exclusive_pokemon.c @@ -29,7 +29,6 @@ const u8 filler_ex1[8] = EWRAM_DATA_2 struct ExclusivePokemonData *gUnknown_203B498 = {0}; EWRAM_DATA struct ExclusivePokemonData gExclusivePokemonInfo = {0}; - void LoadExclusivePokemon(void) { gUnknown_203B498 = &gExclusivePokemonInfo; @@ -49,3 +48,269 @@ void InitializeExclusivePokemon(void) gUnknown_203B498->Exclusives[counter] = gExclusivePokemon[counter].in_rrt; } } + +void sub_8097FA8(u8 param_1) +{ + gUnknown_203B498->unk48[param_1 >> 5] |= 1 << ((param_1 & 0x1f)); +} + +void sub_8097FD0(u8 param_1) +{ + gUnknown_203B498->unk3C[param_1 >> 5] |= 1 << ((param_1 & 0x1f)); +} + +void sub_8097FF8(void) +{ + s32 iVar1; + s32 index; + struct ExclusivePokemonData *ptr; + + for(index = 0; index < 0x40; index++) + { + ptr = gUnknown_203B498; + if (index < 0) { + iVar1 = index + 0x1f; + } + else + { + iVar1 = index; + } + if ((ptr->unk48[iVar1 >> 5] & (1 << (index - ((iVar1 >> 5) * 0x20)))) != 0) { + ptr->unk3C[iVar1 >> 5] |= (1 << (index - ((iVar1 >> 5) * 0x20))); + } + } + sub_8098080(); +} + +void sub_8098044(u8 param_1) +{ + gUnknown_203B498->unk3C[param_1 >> 5] &= ~(1 << (((param_1 & 0x1f)))); + gUnknown_203B498->unk48[param_1 >> 5] &= ~(1 << (((param_1 & 0x1f)))); +} + +void sub_8098080(void) +{ + s32 index; + + for(index = 0; index < 0x3; index++) + { + gUnknown_203B498->unk48[index] = 0; + } +} + +u32 sub_80980A4(void) +{ + u32 temp = gUnknown_203B498->unk0; + gUnknown_203B498->unk0 = 1; + return temp; +} + +void sub_80980B4(s16 pokeID) +{ + s32 index; + s32 pokeID_s32; + s32 pokeID_s32_1; + struct ExclusivePokemonData *ptr; + + pokeID_s32 = pokeID; + pokeID_s32_1 = pokeID_s32; + if (pokeID_s32 != MONSTER_DECOY) + { + if(pokeID_s32 != MONSTER_STATUE) + { + if(pokeID_s32 != MONSTER_RAYQUAZA_CUTSCENE) { + ptr = gUnknown_203B498; + index = pokeID_s32; + if (pokeID_s32 < 0) { + index = pokeID_s32 + 0x1f; + } + ptr->unk4[index >> 5] |= 1 << (s16)((pokeID_s32_1 - (index >> 5) * 0x20)); + } + } + } +} + +bool8 sub_8098100(u8 param_1) +{ + u32 index = param_1; + + if (index > 0x3f) { + return FALSE; + } + else + { + return (gUnknown_203B498->unk3C[param_1 >> 0x5] & (1 << (index & 0x1f))) ? TRUE : FALSE; + } +} + +bool8 sub_8098134(s16 pokeID) +{ + s32 index; + s32 pokeID_s32; + s32 pokeID_s32_1; + struct ExclusivePokemonData *ptr; + + pokeID_s32 = pokeID; + pokeID_s32_1 = pokeID_s32; + ptr = gUnknown_203B498; + if (pokeID < 0) { + index = pokeID_s32 + 0x1f; + } + else + { + index = pokeID_s32; + } + return ((ptr->unk4[(index >> 5)] & (1 << (s16)(pokeID_s32_1 - ((index >> 5) * 0x20)))) != 0) ? TRUE : FALSE; +} + +void sub_8098170(s32 param_1) +{ + s32 index; + struct ExclusivePokemonData *ptr; + + ptr = gUnknown_203B498; + if (param_1 < 0) { + index = param_1 + 0x1f; + } + else + { + index = param_1; + } + ptr->unk54[(index >> 5)] |= 1 << (param_1 - ((index >> 5) * 0x20)); +} + +bool32 sub_80981A0(s32 param_1) +{ + s32 index; + bool32 flag; + struct ExclusivePokemonData *ptr; + + if (param_1 > 0x1e) { + return FALSE; + } + else { + ptr = gUnknown_203B498; + if (param_1 < 0) { + index = param_1 + 0x1f; + } + else + { + index = param_1; + } + flag = ptr->unk54[(index >> 5)] & 1 << (param_1 - ((index >> 5) * 0x20)); + if (flag != 0) { + flag = TRUE; + } + return flag; + } +} + +bool8 IsExclusivePokemonUnlocked(s16 pokeID) +{ + s32 index; + s32 pokeID_s32; + + pokeID_s32 = pokeID; + + for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) + { + if(gExclusivePokemon[index].poke_id == pokeID_s32) + return gUnknown_203B498->Exclusives[index]; + } + return TRUE; +} + +void UnlockExclusivePokemon(s16 pokeID) +{ + s32 index; + s32 pokeID_s32; + + pokeID_s32 = pokeID; + + for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) + { + if(gExclusivePokemon[index].poke_id == pokeID_s32) + gUnknown_203B498->Exclusives[index] = TRUE; + } +} + +void WriteExclusivePokemon(struct unkStruct_8094924 *r0) +{ + s32 index; + u8 *puVar2; + + u8 stack_0; + u8 stack_1; + u8 stack_2; + u8 neg_1; + u8 zero; + + neg_1 = -1; + zero = 0; + + + SaveIntegerBits(r0, gUnknown_203B498, 1); + for(index = 0; index < 424; index++) + { + stack_0 = sub_8098134(index); + SaveIntegerBits(r0, &stack_0, 1); + } + for(index = 0; index < 64; index++) + { + stack_1 = sub_8098100(index); + SaveIntegerBits(r0, &stack_1, 1); + } + for(index = 0; index < 31; index++) + { + stack_2 = sub_80981A0(index); + SaveIntegerBits(r0, &stack_2, 1); + } + for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) + { + if(gUnknown_203B498->Exclusives[index]) + puVar2 = &neg_1; + else + puVar2 = &zero; + SaveIntegerBits(r0, puVar2, 1); + } +} + +void ReadExclusivePokemon(struct unkStruct_8094924 *r0) +{ + s32 index; + u8 stack_0; + u8 stack_1; + u8 stack_2; + u8 stack_3; + + memset(gUnknown_203B498, 0, sizeof(struct ExclusivePokemonData)); + RestoreIntegerBits(r0, gUnknown_203B498, 1); + for(index = 0; index < 424; index++) + { + RestoreIntegerBits(r0, &stack_0, 1); + if(stack_0) + sub_80980B4(index); + } + for(index = 0; index < 64; index++) + { + RestoreIntegerBits(r0, &stack_1, 1); + if(stack_1) + sub_8097FA8(index); + } + for(index = 0; index < 31; index++) + { + RestoreIntegerBits(r0, &stack_2, 1); + if(stack_2) + sub_8098170(index); + } + for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) + { + RestoreIntegerBits(r0, &stack_3, 1); + + do; while(0); // do/while needed for matching - jiang + + gUnknown_203B498->Exclusives[index] = 1 & stack_3; + } + sub_8097FF8(); +} + diff --git a/src/exclusive_pokemon_1.c b/src/exclusive_pokemon_1.c deleted file mode 100644 index 44a6ab04f..000000000 --- a/src/exclusive_pokemon_1.c +++ /dev/null @@ -1,123 +0,0 @@ -#include "global.h" -#include "exclusive_pokemon.h" - -extern struct ExclusivePokemonData *gUnknown_203B498; -extern struct ExclusivePokemon gExclusivePokemon[NUM_EXCLUSIVE_POKEMON]; - -void sub_80980B4(s16); -void sub_8097FA8(u8); -void sub_8098170(s32); -void sub_8097FF8(void); - -u8 sub_8098100(u8); -u8 sub_8098134(s16); -u8 sub_80981A0(s32); - -bool8 IsExclusivePokemonUnlocked(s16 pokeID) -{ - s32 index; - s32 pokeID_s32; - - pokeID_s32 = pokeID; - - for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) - { - if(gExclusivePokemon[index].poke_id == pokeID_s32) - return gUnknown_203B498->Exclusives[index]; - } - return TRUE; -} - -void UnlockExclusivePokemon(s16 pokeID) -{ - s32 index; - s32 pokeID_s32; - - pokeID_s32 = pokeID; - - for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) - { - if(gExclusivePokemon[index].poke_id == pokeID_s32) - gUnknown_203B498->Exclusives[index] = TRUE; - } -} - -void WriteExclusivePokemon(struct unkStruct_8094924 *r0) -{ - s32 index; - u8 *puVar2; - - u8 stack_0; - u8 stack_1; - u8 stack_2; - u8 neg_1; - u8 zero; - - neg_1 = -1; - zero = 0; - - - SaveIntegerBits(r0, gUnknown_203B498, 1); - for(index = 0; index < 424; index++) - { - stack_0 = sub_8098134(index); - SaveIntegerBits(r0, &stack_0, 1); - } - for(index = 0; index < 64; index++) - { - stack_1 = sub_8098100(index); - SaveIntegerBits(r0, &stack_1, 1); - } - for(index = 0; index < 31; index++) - { - stack_2 = sub_80981A0(index); - SaveIntegerBits(r0, &stack_2, 1); - } - for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) - { - if(gUnknown_203B498->Exclusives[index]) - puVar2 = &neg_1; - else - puVar2 = &zero; - SaveIntegerBits(r0, puVar2, 1); - } -} - -void ReadExclusivePokemon(struct unkStruct_8094924 *r0) -{ - s32 index; - u8 stack_0; - u8 stack_1; - u8 stack_2; - u8 stack_3; - - memset(gUnknown_203B498, 0, sizeof(struct ExclusivePokemonData)); - RestoreIntegerBits(r0, gUnknown_203B498, 1); - for(index = 0; index < 424; index++) - { - RestoreIntegerBits(r0, &stack_0, 1); - if(stack_0) - sub_80980B4(index); - } - for(index = 0; index < 64; index++) - { - RestoreIntegerBits(r0, &stack_1, 1); - if(stack_1) - sub_8097FA8(index); - } - for(index = 0; index < 31; index++) - { - RestoreIntegerBits(r0, &stack_2, 1); - if(stack_2) - sub_8098170(index); - } - for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++) - { - RestoreIntegerBits(r0, &stack_3, 1); - - do; while(0); // do/while needed for matching - jiang - - gUnknown_203B498->Exclusives[index] = 1 & stack_3; - } - sub_8097FF8(); -} From 07230ba68e7c556dcde129295f3ca3421249c122 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 22 Jul 2023 16:51:16 -0700 Subject: [PATCH 11/26] continue to clean up functions and add ewram --- include/dungeon.h | 2 ++ include/text_util.h | 2 +- src/code_8009804.c | 2 +- src/code_8012A18_1.c | 2 +- src/code_801EE10_1.c | 2 +- src/code_8069E0C.c | 4 +-- src/code_809447C.c | 2 +- src/code_8094F88.c | 17 +++++----- src/code_80958E8.c | 4 +-- src/dungeon.c | 2 +- src/friend_rescue.c | 2 +- src/ground_main.c | 22 +++++++------ src/load_screen.c | 2 +- src/luminous_cave.c | 2 +- src/other_menus.c | 3 +- src/party_list_menu.c | 2 +- src/pokemon_mid.c | 3 +- src/rescue_password_menu.c | 27 ++++++---------- src/rescue_team_info.c | 4 +-- src/save_menu.c | 2 +- src/thank_you_wonder_mail.c | 2 +- src/unk_menu_203B360.c | 2 +- sym_ewram.txt | 62 ++++++------------------------------- sym_ewram2.txt | 14 ++------- 24 files changed, 67 insertions(+), 121 deletions(-) diff --git a/include/dungeon.h b/include/dungeon.h index defd98a07..c5af3f4d7 100644 --- a/include/dungeon.h +++ b/include/dungeon.h @@ -39,7 +39,9 @@ const u8 *GetDungeonName1(u8 dungeon); u32 sub_80908D8(struct DungeonLocation *dungeon); u8 sub_8090910(struct DungeonLocation *dungeon, u32 param_2); bool8 sub_809095C(u8 dungeon); +u32 GetMaxItemsAllowed(u8 dungeon); s8 GetRescuesAllowed(u8 dungeon); bool8 HasCheckpoint(u8 dungeon); +s32 GetDungeonFloorCount(u8 dungeon); #endif //GUARD_DUNGEON_H diff --git a/include/text_util.h b/include/text_util.h index 736af98bf..cbd3d882d 100644 --- a/include/text_util.h +++ b/include/text_util.h @@ -1,7 +1,7 @@ #ifndef GUARD_TEXT_UTIL_H #define GUARD_TEXT_UTIL_H -void sub_80922B4(u8 *buffer, u8 *string, s32 size); +void sub_80922B4(u8 *buffer, const u8 *string, s32 size); u32 sub_80922E4(u32 r0); void CopyStringtoBuffer(u8 *buffer, u8 *string); void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size); diff --git a/src/code_8009804.c b/src/code_8009804.c index ac7c81aee..98364c50b 100644 --- a/src/code_8009804.c +++ b/src/code_8009804.c @@ -5,7 +5,7 @@ extern u8 gUnknown_202D238[4]; extern s32 gUnknown_202D23C; extern u16 gUnknown_202B038[4][32][32]; extern u8 gUnknown_80B88CC[]; -struct FileArchive gSystemFileArchive; +extern struct FileArchive gSystemFileArchive; struct unkStruct_202D240 { diff --git a/src/code_8012A18_1.c b/src/code_8012A18_1.c index 6e7104ccc..dc3031d94 100644 --- a/src/code_8012A18_1.c +++ b/src/code_8012A18_1.c @@ -4,6 +4,7 @@ #include "memory.h" #include "input.h" #include "text.h" +#include "text_util.h" struct unkStruct_203B200 { @@ -34,7 +35,6 @@ extern void sub_80160F4(u32); bool8 IsNameEmpty(void); extern u32 sub_80154F0(void); extern void sub_80155F0(void); -extern void sub_80922B4(u8 *, u8 *, s32); void nullsub_36(void); void sub_8016110(void); diff --git a/src/code_801EE10_1.c b/src/code_801EE10_1.c index 046722ee7..ee243ea07 100644 --- a/src/code_801EE10_1.c +++ b/src/code_801EE10_1.c @@ -5,6 +5,7 @@ #include "input.h" #include "memory.h" #include "text.h" +#include "text_util.h" struct unkStruct_203B2AC { @@ -54,7 +55,6 @@ extern bool8 sub_8013938(struct MenuInputStruct*); extern void sub_802452C(void); extern void PlayMenuSoundEffect(u32); extern void sub_8013984(struct MenuInputStruct*); -void sub_80922B4(u8 *buffer, u8 *string, s32 size); bool8 ComparePokemonNames(s16 a1, s16 a2); void sub_8024588(void); diff --git a/src/code_8069E0C.c b/src/code_8069E0C.c index 9b6d5a74e..3adcbba24 100644 --- a/src/code_8069E0C.c +++ b/src/code_8069E0C.c @@ -1,6 +1,7 @@ #include "global.h" #include "constants/ability.h" #include "constants/move_id.h" +#include "constants/status.h" #include "constants/type.h" #include "constants/weather.h" #include "dungeon_entity.h" @@ -43,7 +44,6 @@ extern void sub_806A2BC(struct Entity *, u8); extern void sub_804178C(u32); extern void sub_803F508(struct Entity *); extern void sub_804AC20(struct Position *); -extern u8 sub_8092364(u8); extern void sub_803E46C(u32); extern void sub_803E708(u32 r0, u32 r1); @@ -211,7 +211,7 @@ void sub_806A120(struct Entity * pokemon, struct Entity * target, struct Move* m struct EntityInfo *entityInfo; if ((((EntityExists(pokemon)) && (EntityExists(target))) && (pokemon != target)) - && (entityInfo = target->info, entityInfo->protectionStatus == 0xC)) { + && (entityInfo = target->info, entityInfo->protectionStatus == STATUS_CONVERSION2)) { moveType = GetMoveTypeForMonster(pokemon, move); uVar2_u32 = sub_8092364(moveType); if (uVar2_u32 != TYPE_NONE) { diff --git a/src/code_809447C.c b/src/code_809447C.c index ef86245ee..71795e65d 100644 --- a/src/code_809447C.c +++ b/src/code_809447C.c @@ -4,6 +4,7 @@ #include "item.h" #include "moves.h" #include "dungeon_global_data.h" +#include "text_util.h" struct unkStruct_8113080 { @@ -41,7 +42,6 @@ void PrintYellowDungeonNametoBuffer(u8 *buffer, struct DungeonLocation *dungeonL extern void sub_80073B8(u32); extern void xxx_format_and_draw(s32, s32, const u8 *, ...); extern s32 sub_8008ED0(u8 *); -void sub_80922B4(u8 *buffer, u8 *string, s32 size); extern void sub_80073E0(u32); void sub_809447C(struct unkStruct_8094924 *r0, u8 *r1) diff --git a/src/code_8094F88.c b/src/code_8094F88.c index b2d2532c0..123eef2da 100644 --- a/src/code_8094F88.c +++ b/src/code_8094F88.c @@ -13,10 +13,11 @@ EWRAM_DATA_2 struct unkStruct_203B484 *gUnknown_203B484 = {0}; EWRAM_DATA_2 u32 *gUnknown_203B488 = {0}; EWRAM_DATA_2 struct unkStruct_203B48C *gUnknown_203B48C = {0}; -extern struct unkStruct_203B480 gUnknown_2038C88; -extern struct unkStruct_203B484 gUnknown_2039288; -extern u32 gUnknown_20392E8; -extern struct unkStruct_203B48C gUnknown_20393C0; +EWRAM_DATA struct unkStruct_203B480 gUnknown_2038C88[0x20] = {0}; +EWRAM_DATA struct unkStruct_203B484 gUnknown_2039288 = {0}; +EWRAM_DATA UNUSED static u32 fill0 = {0}; // 203B484 is size 0x5C and I need to fill a gap of 0x4 +EWRAM_DATA u32 gUnknown_20392E8[0x36] = {0}; +EWRAM_DATA struct unkStruct_203B48C gUnknown_20393C0 = {0}; extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); @@ -32,15 +33,15 @@ extern void sub_8094D28(s32); void sub_80950BC(void) { - gUnknown_203B480 = &gUnknown_2038C88; + gUnknown_203B480 = gUnknown_2038C88; gUnknown_203B484 = &gUnknown_2039288; - gUnknown_203B488 = &gUnknown_20392E8; + gUnknown_203B488 = gUnknown_20392E8; gUnknown_203B48C = &gUnknown_20393C0; } struct unkStruct_203B480 *sub_80950F8(void) { - return &gUnknown_2038C88; + return gUnknown_2038C88; } struct unkStruct_203B484 *sub_8095100(void) @@ -50,7 +51,7 @@ struct unkStruct_203B484 *sub_8095100(void) u32 *sub_8095108(void) { - return &gUnknown_20392E8; + return gUnknown_20392E8; } struct unkStruct_203B48C *sub_8095110(void) diff --git a/src/code_80958E8.c b/src/code_80958E8.c index 6aeed7d62..4ee39320f 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -10,11 +10,9 @@ #include "pokemon.h" #include "code_8094F88.h" -extern s32 GetDungeonFloorCount(u8); extern bool8 sub_809017C(struct DungeonLocation *); extern s16 GetBaseSpecies(s16); extern u8 sub_803C1D0(struct DungeonLocation *, u8); -extern u32 GetMaxItemsAllowed(u8); extern bool8 sub_803C0DC(s16); extern void ResetMailboxSlot(u8); extern void ResetPelipperBoardSlot(u8); @@ -22,7 +20,7 @@ extern void ResetJobSlot(u8); extern bool8 ValidateWonderMail(struct WonderMail *); EWRAM_DATA_2 struct unkStruct_203B490 *gUnknown_203B490 = {0}; -extern struct unkStruct_203B490 gUnknown_2039448; +EWRAM_DATA struct unkStruct_203B490 gUnknown_2039448 = {0}; void LoadMailInfo(void) { diff --git a/src/dungeon.c b/src/dungeon.c index ec4a5f55e..0f4714eb5 100644 --- a/src/dungeon.c +++ b/src/dungeon.c @@ -50,7 +50,7 @@ bool8 IsLevelResetTo1(u8 dungeon) return gDungeons[dungeon].levelResetTo1; } -u8 GetMaxItemsAllowed(u8 dungeon) +u32 GetMaxItemsAllowed(u8 dungeon) { return gDungeons[dungeon].maxItemsAllowed; } diff --git a/src/friend_rescue.c b/src/friend_rescue.c index ef6093b3d..f35a7f52e 100644 --- a/src/friend_rescue.c +++ b/src/friend_rescue.c @@ -3,6 +3,7 @@ #include "constants/monster.h" #include "constants/wonder_mail.h" #include "text.h" +#include "text_util.h" #include "input.h" #include "item.h" #include "team_inventory.h" @@ -316,7 +317,6 @@ extern void sub_8035CF4(struct MenuStruct *, u32, u32); extern s32 sub_8037B28(u32); extern s32 sub_8037D64(u32, void *, void *); extern s32 sub_80381F4(u32, void *, void *); -extern void sub_80922B4(u8 *buffer, u8 *string, s32 size); extern s32 CountMailType(u8 mailType); extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32); diff --git a/src/ground_main.c b/src/ground_main.c index 373d237ed..a1ec4be11 100644 --- a/src/ground_main.c +++ b/src/ground_main.c @@ -4,16 +4,18 @@ #include "debug.h" #include "code_80A26CC.h" -extern u32 gUnknown_20398A8; -extern u32 gUnknown_20398AC; -extern u32 gUnknown_20398B0; -extern u32 gUnknown_20398B4; -extern u8 gUnknown_20398B8; -extern u8 gUnknown_20398B9; -extern u8 gUnknown_20398BA; -extern u16 gUnknown_20398BE; -extern u32 gUnknown_20398C0; -extern s16 gUnknown_20398C4; +EWRAM_DATA u32 gUnknown_20398A8 = {0}; +EWRAM_DATA u32 gUnknown_20398AC = {0}; +EWRAM_DATA u32 gUnknown_20398B0 = {0}; +EWRAM_DATA u32 gUnknown_20398B4 = {0}; +EWRAM_DATA u8 gUnknown_20398B8 = {0}; +EWRAM_DATA u8 gUnknown_20398B9 = {0}; +EWRAM_DATA u8 gUnknown_20398BA = {0}; +EWRAM_DATA UNUSED static u8 gUnknown_20398BB = {0}; // NOTE: Needed for matching but not used +EWRAM_DATA u16 gUnknown_20398BC = {0}; +EWRAM_DATA u16 gUnknown_20398BE = {0}; +EWRAM_DATA u32 gUnknown_20398C0 = {0}; +EWRAM_DATA s16 gUnknown_20398C4 = {0}; EWRAM_DATA_2 u8 gUnknown_203B49C = {0}; EWRAM_DATA_2 u8 gUnknown_203B49D = {0}; diff --git a/src/load_screen.c b/src/load_screen.c index f517a0b08..099317d45 100644 --- a/src/load_screen.c +++ b/src/load_screen.c @@ -7,6 +7,7 @@ #include "memory.h" #include "menu.h" #include "text.h" +#include "text_util.h" #include "pokemon.h" #include "save.h" #include "code_800D090.h" @@ -50,7 +51,6 @@ extern u8 *sub_8098FB4(); extern u8 *GetDungeonLocationInfo(void); extern u32 GetNumAdventures(void); extern void PrintDungeonLocationtoBuffer(u8 *, u8 *); -extern void sub_80922B4(u8 *, const u8 *, u32); extern u32 sub_8001658(u32, u32); extern void sub_80073E0(u32); diff --git a/src/luminous_cave.c b/src/luminous_cave.c index 8625acd8e..47bef4546 100644 --- a/src/luminous_cave.c +++ b/src/luminous_cave.c @@ -8,6 +8,7 @@ #include "pokemon.h" #include "random.h" #include "text.h" +#include "text_util.h" #include "team_inventory.h" #include "menu_input.h" @@ -201,7 +202,6 @@ void sub_8024DBC(void); void sub_8024E30(void); void sub_801AEE4(u32, u32); void sub_808F734(struct PokemonStruct *, s16); -void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size); u32 sub_801602C(u32 r0, u8 *name); extern s32 sub_80144A4(s32 *); extern u32 sub_801A6E8(u32); diff --git a/src/other_menus.c b/src/other_menus.c index ad97a3997..9473c052d 100644 --- a/src/other_menus.c +++ b/src/other_menus.c @@ -45,7 +45,8 @@ struct unkStruct_203B35C u8 fill3A0[0x450 - 0x3A0]; s32 unk450; }; -extern struct unkStruct_203B35C *gUnknown_203B35C; + +EWRAM_DATA_2 struct unkStruct_203B35C *gUnknown_203B35C = {0}; const struct UnkTextStruct2 gUnknown_80E653C = { 0x00, 0x00, 0x00, 0x00, diff --git a/src/party_list_menu.c b/src/party_list_menu.c index 78ef0a83e..0cb81baff 100644 --- a/src/party_list_menu.c +++ b/src/party_list_menu.c @@ -6,6 +6,7 @@ #include "memory.h" #include "pokemon.h" #include "text.h" +#include "text_util.h" #include "team_inventory.h" #include "constants/move.h" #include "code_800D090.h" @@ -171,7 +172,6 @@ extern u32 sub_801EF38(u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern void sub_80922B4(u8 *, const u8 *, u32); extern void sub_808D930(u8 *, s16); extern s32 sub_8008ED0(u8 *); extern void xxx_format_and_draw(s32, s32, const u8 *, ...); diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c index 7c30f4a0f..17f4205a2 100644 --- a/src/pokemon_mid.c +++ b/src/pokemon_mid.c @@ -7,6 +7,7 @@ #include "constants/colors.h" #include "constants/move_id.h" #include "code_800D090.h" +#include "text_util.h" extern struct MonsterDataEntry *gMonsterParameters; extern const char gUnknown_8107600[]; @@ -29,10 +30,8 @@ extern struct LevelData gLevelCurrentData[]; extern s16 GetBaseSpecies(s16); -extern void sub_80922B4(u8 *, u8 *, s32); extern int sprintf(char *, const char *, ...); extern u32 ReturnIntFromChar(u8 r0); -extern void CopyStringtoBuffer(char *r0, char *r1); extern void CopyAndResetMoves(void*, void*); extern void sub_80943A0(void*, s32); extern void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct*, struct PokemonStruct2*); diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index d90ba5730..62c50d584 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -11,6 +11,8 @@ #include "code_8094F88.h" #include "wonder_mail.h" #include "menu_input.h" +#include "dungeon.h" +#include "main_menu.h" #define RESCUE_PASSWORD_SIZE 0x36 @@ -243,32 +245,23 @@ static const u8 fill0[] = "pksdir0"; extern s32 sub_8035D74(void); extern void sub_80151C0(u32, u8 *); extern void sub_8031D70(u32, u32); -extern u32 ConvertMenutoRescuePasswordState(u32); -extern void sub_8039174(void); extern void sub_80155F0(void); extern void sub_8031E10(void); -extern void DisplayPasswordAcceptScreen(void); - - -extern u32 sub_8039068(u32, u8 *passwordBuffer, struct unkStruct_203B480 *r0); - extern u32 sub_80154F0(void); extern u32 sub_8031DCC(void); -extern void sub_80391F8(void); -extern void sub_8031E00(); -extern void DisplayRescuePasswordError(u32); -extern struct MainMenu *GetMainMenu(void); - - +extern void sub_8031E00(void); extern void SetMenuItems(struct MenuStruct *, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32); extern void sub_8035CF4(struct MenuStruct *r0, u32, u32); -bool8 sub_8095298(s32); -bool8 sub_803D204(u8 *, struct unkStruct_203B480 *); -extern s32 GetDungeonFloorCount(u8); - extern void AddSprite(struct unkSprite *, u32, u32, u32); extern void xxx_draw_string_80144C4(void); +void DisplayRescuePasswordError(u32 error); +void sub_8039174(void); +void DisplayPasswordAcceptScreen(void); +u32 sub_8039068(u32, u8 *passwordBuffer, struct unkStruct_203B480 *r0); +void sub_80391F8(void); +bool8 sub_803D204(u8 *, struct unkStruct_203B480 *); +u32 ConvertMenutoRescuePasswordState(u32); void CreateRescuePasswordMenu(u32 currMenu) { diff --git a/src/rescue_team_info.c b/src/rescue_team_info.c index cd3c8f02c..9d0153b5f 100644 --- a/src/rescue_team_info.c +++ b/src/rescue_team_info.c @@ -1,16 +1,16 @@ #include "global.h" #include "rescue_team_info.h" #include "code_8092334.h" +#include "text_util.h" EWRAM_DATA_2 struct RescueTeamData *gRescueTeamInfoRef = {0}; EWRAM_DATA struct RescueTeamData gRescueTeamInfo = {0}; extern bool8 sub_80023E4(u32); -extern void sub_80922B4(u8 *buffer, u8 *string, s32 size); extern void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size); extern const u8 *gRescueTeamRanks[]; -extern s32 gRescueRankMaxPoints[7]; +extern s32 gRescueRankMaxPoints[MAX_TEAM_RANKS]; extern u8 gTeamNamePlaceholder[0x8]; // Pokemon void LoadRescueTeamInfo(void) diff --git a/src/save_menu.c b/src/save_menu.c index 487a7a8a8..13281deb7 100644 --- a/src/save_menu.c +++ b/src/save_menu.c @@ -26,7 +26,7 @@ struct unkStruct_203B360 u32 unk1B0; // Sprite count? }; -extern struct unkStruct_203B360 *gUnknown_203B364; +EWRAM_DATA_2 struct unkStruct_203B360 *gUnknown_203B364 = {0}; const struct UnkTextStruct2 gUnknown_80E6F20 = { diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index 8ee72cefc..86a01cd5f 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -11,6 +11,7 @@ #include "input.h" #include "rescue_password_menu.h" #include "text.h" +#include "text_util.h" #include "team_inventory.h" #include "code_800D090.h" #include "menu_input.h" @@ -218,7 +219,6 @@ extern u32 sub_80144A4(s32 *r0); extern void SetThankYouMailMenuState(u32); extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern void SetMenuItems(struct MenuStruct *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); -extern void sub_80922B4(u8 *, u8 *, u32); extern void sub_802F204(struct unkStruct_802F204 *, u32); extern void sub_80151C0(u32, u8 *); extern void xxx_call_start_bg_music(void); diff --git a/src/unk_menu_203B360.c b/src/unk_menu_203B360.c index eeb395af0..deb645bbe 100644 --- a/src/unk_menu_203B360.c +++ b/src/unk_menu_203B360.c @@ -26,7 +26,7 @@ struct unkStruct_203B360 u32 unk1B0; // sprite count? }; -extern struct unkStruct_203B360 *gUnknown_203B360; +EWRAM_DATA_2 struct unkStruct_203B360 *gUnknown_203B360 = {0}; const struct UnkTextStruct2 gUnknown_80E6E7C = { 0x00, 0x00, 0x00, 0x00, 0x03, diff --git a/sym_ewram.txt b/sym_ewram.txt index 8d0152375..26864e82e 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -811,58 +811,16 @@ gMoveLearnsets: /* 2038C6C */ .include "src/game_options.o" .include "src/play_time.o" -gUnknown_2038C88: /* 2038C88 */ - .space 0x600 - -gUnknown_2039288: /* 2039288 */ - .space 0x60 - -gUnknown_20392E8: /* 20392E8 */ - .space 0xD8 - -gUnknown_20393C0: /* 20393C0 */ - .space 0x88 - -gUnknown_2039448: /* 2039448 */ - .space 0x330 - -.include "src/code_8097670.o" -.space 0x4 -.include "src/exclusive_pokemon.o" -.space 0x4 - -gUnknown_20398A8: /* 20398A8 */ - .space 0x4 - -gUnknown_20398AC: /* 20398AC */ - .space 0x4 - -gUnknown_20398B0: /* 20398B0 */ - .space 0x4 - -gUnknown_20398B4: /* 20398B4 */ - .space 0x4 - -gUnknown_20398B8: /* 20398B8 */ - .space 0x1 - -gUnknown_20398B9: /* 20398B9 */ - .space 0x1 - -gUnknown_20398BA: /* 20398BA */ - .space 0x2 - -gUnknown_20398BC: /* 20398BC */ - .space 0x2 - -gUnknown_20398BE: /* 20398BE */ - .space 0x2 - -gUnknown_20398C0: /* 20398C0 */ - .space 0x4 - -gUnknown_20398C4: /* 20398C4 */ - .space 0x4 + .include "src/code_8094F88.o" + .space 0x4 + .include "src/code_80958E8.o" + .space 0x4 + .include "src/code_8097670.o" + .space 0x4 + .include "src/exclusive_pokemon.o" + .space 0x4 + .include "src/ground_main.o" + .space 0x2 gUnknown_20398C8: /* 20398C8 */ .space 0x10 diff --git a/sym_ewram2.txt b/sym_ewram2.txt index 7ac427954..9f7cbdf2a 100644 --- a/sym_ewram2.txt +++ b/sym_ewram2.txt @@ -380,18 +380,10 @@ gUnknown_203B344: /* 203B344 */ .space 0x4 .include "src/main_menu.o" - .include "src/trade_items_menu.o" - -gUnknown_203B35C: /* 203B35C */ - .space 0x4 - -gUnknown_203B360: /* 203B360 */ - .space 0x4 - -gUnknown_203B364: /* 203B364 */ - .space 0x4 - +.include "src/other_menus.o" +.include "src/unk_menu_203B360.o" +.include "src/save_menu.o" .include "src/rescue_password_menu.o" .include "src/load_screen.o" .include "src/wonder_mail_main_menu.o" From f9788fdc0731f2518c1d2ec7c04f274d34d05c91 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 23 Jul 2023 20:37:52 -0700 Subject: [PATCH 12/26] split out and decomp most of wigglytuff shop --- asm/code_801EE10_mid.s | 2174 ---------------------------------------- asm/code_8023144.s | 664 ++++++++++++ asm/wigglytuff_shop.s | 112 +++ ld_script.txt | 3 + src/wigglytuff_shop.c | 628 ++++++++++++ 5 files changed, 1407 insertions(+), 2174 deletions(-) create mode 100644 asm/code_8023144.s create mode 100644 asm/wigglytuff_shop.s create mode 100644 src/wigglytuff_shop.c diff --git a/asm/code_801EE10_mid.s b/asm/code_801EE10_mid.s index 6de3e3bf2..46aa15a3e 100644 --- a/asm/code_801EE10_mid.s +++ b/asm/code_801EE10_mid.s @@ -4464,2178 +4464,4 @@ _08021B94: bx r1 thumb_func_end sub_8021B58 - thumb_func_start CreateWigglytuffShop -CreateWigglytuffShop: - push {r4-r6,lr} - adds r4, r0, 0 - bl ResetUnusedInputStruct - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r5, _08021BF8 - movs r0, 0x9C - lsls r0, 1 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r5] - movs r6, 0 - str r6, [r0, 0x14] - str r6, [r0, 0x18] - str r4, [r0] - ldr r0, _08021BFC - movs r1, 0x28 - bl CopyYellowMonsterNametoBuffer - ldr r4, _08021C00 - adds r0, r4, 0 - movs r1, 0x28 - bl CopyYellowMonsterNametoBuffer - movs r0, 0x28 - bl GetMonSpecies - adds r1, r0, 0 - subs r4, 0x50 - adds r0, r4, 0 - bl strcpy - ldr r5, [r5] - ldr r0, [r5] - cmp r0, 0x1 - bne _08021C04 - adds r0, r5, 0 - adds r0, 0xCC - str r6, [r0] - b _08021C0E - .align 2, 0 -_08021BF8: .4byte gUnknown_203B290 -_08021BFC: .4byte gUnknown_202E5D8 -_08021C00: .4byte gUnknown_202E1C8 -_08021C04: - adds r1, r5, 0 - adds r1, 0xCC - adds r0, r5, 0 - adds r0, 0xBC - str r0, [r1] -_08021C0E: - movs r0, 0x28 - bl GetDialogueSpriteDataPtr - ldr r2, _08021C58 - ldr r3, [r2] - adds r1, r3, 0 - adds r1, 0xBC - str r0, [r1] - adds r1, 0x4 - ldr r0, [r0, 0x4] - str r0, [r1] - adds r0, r3, 0 - adds r0, 0xC8 - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - adds r0, 0xC9 - strb r1, [r0] - ldr r0, [r2] - adds r0, 0xCA - strb r1, [r0] - ldr r1, [r2] - adds r2, r1, 0 - adds r2, 0xC4 - movs r0, 0x2 - strh r0, [r2] - adds r1, 0xC6 - movs r0, 0x8 - strh r0, [r1] - movs r0, 0 - bl sub_8021D44 - movs r0, 0x1 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08021C58: .4byte gUnknown_203B290 - thumb_func_end CreateWigglytuffShop - - thumb_func_start sub_8021C5C -sub_8021C5C: - push {lr} - ldr r0, _08021C74 - ldr r0, [r0] - ldr r0, [r0, 0x4] - cmp r0, 0x17 - bhi _08021D10 - lsls r0, 2 - ldr r1, _08021C78 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08021C74: .4byte gUnknown_203B290 -_08021C78: .4byte _08021C7C - .align 2, 0 -_08021C7C: - .4byte _08021CDC - .4byte _08021CDC - .4byte _08021D10 - .4byte _08021D10 - .4byte _08021D0C - .4byte _08021D10 - .4byte _08021D10 - .4byte _08021D10 - .4byte _08021D10 - .4byte _08021CE2 - .4byte _08021CE2 - .4byte _08021CE8 - .4byte _08021D10 - .4byte _08021CF4 - .4byte _08021CFA - .4byte _08021D10 - .4byte _08021D00 - .4byte _08021CEE - .4byte _08021D10 - .4byte _08021D10 - .4byte _08021D10 - .4byte _08021D10 - .4byte _08021D06 - .4byte _08021D06 -_08021CDC: - bl sub_8022460 - b _08021D14 -_08021CE2: - bl sub_8022538 - b _08021D14 -_08021CE8: - bl sub_80225C8 - b _08021D14 -_08021CEE: - bl sub_80224D4 - b _08021D14 -_08021CF4: - bl sub_80226F0 - b _08021D14 -_08021CFA: - bl sub_8022790 - b _08021D14 -_08021D00: - bl sub_8022668 - b _08021D14 -_08021D06: - bl sub_8022684 - b _08021D14 -_08021D0C: - movs r0, 0x3 - b _08021D16 -_08021D10: - bl sub_80226CC -_08021D14: - movs r0, 0 -_08021D16: - pop {r1} - bx r1 - thumb_func_end sub_8021C5C - - thumb_func_start sub_8021D1C -sub_8021D1C: - push {r4,lr} - ldr r4, _08021D40 - ldr r0, [r4] - cmp r0, 0 - beq _08021D38 - adds r0, 0xBC - ldr r0, [r0] - bl CloseFile - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_08021D38: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08021D40: .4byte gUnknown_203B290 - thumb_func_end sub_8021D1C - - thumb_func_start sub_8021D44 -sub_8021D44: - push {lr} - ldr r1, _08021D58 - ldr r1, [r1] - str r0, [r1, 0x4] - bl sub_8021D5C - bl UpdateWigglytuffDialogue - pop {r0} - bx r0 - .align 2, 0 -_08021D58: .4byte gUnknown_203B290 - thumb_func_end sub_8021D44 - - thumb_func_start sub_8021D5C -sub_8021D5C: - push {r4-r7,lr} - ldr r4, _08021D7C - ldr r0, [r4] - adds r0, 0xD0 - bl sub_8006518 - ldr r1, [r4] - ldr r0, [r1, 0x4] - cmp r0, 0x9 - blt _08021DC8 - cmp r0, 0xA - ble _08021D80 - cmp r0, 0xB - beq _08021DB0 - b _08021DC8 - .align 2, 0 -_08021D7C: .4byte gUnknown_203B290 -_08021D80: - ldr r2, _08021DA8 - adds r1, 0xD0 - adds r0, r2, 0 - ldm r0!, {r3,r5,r6} - stm r1!, {r3,r5,r6} - ldm r0!, {r3,r5,r7} - stm r1!, {r3,r5,r7} - ldr r0, [r4] - movs r6, 0x80 - lsls r6, 1 - adds r0, r6 - ldm r2!, {r1,r3,r7} - stm r0!, {r1,r3,r7} - ldm r2!, {r5-r7} - stm r0!, {r5-r7} - ldr r1, [r4] - adds r1, 0xE8 - ldr r0, _08021DAC - b _08021DB8 - .align 2, 0 -_08021DA8: .4byte gUnknown_80DC534 -_08021DAC: .4byte gUnknown_80DC564 -_08021DB0: - movs r0, 0x80 - lsls r0, 1 - adds r1, r0 - ldr r0, _08021DC4 -_08021DB8: - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - b _08021DEC - .align 2, 0 -_08021DC4: .4byte gUnknown_80DC54C -_08021DC8: - ldr r0, _08021E04 - mov r12, r0 - ldr r4, _08021E08 - movs r3, 0 - movs r2, 0x3 -_08021DD2: - mov r5, r12 - ldr r1, [r5] - adds r1, r3 - adds r1, 0xD0 - adds r0, r4, 0 - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - adds r3, 0x18 - subs r2, 0x1 - cmp r2, 0 - bge _08021DD2 -_08021DEC: - bl ResetUnusedInputStruct - ldr r0, _08021E04 - ldr r0, [r0] - adds r0, 0xD0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08021E04: .4byte gUnknown_203B290 -_08021E08: .4byte gUnknown_80DC534 - thumb_func_end sub_8021D5C - - thumb_func_start UpdateWigglytuffDialogue -UpdateWigglytuffDialogue: - push {r4,lr} - sub sp, 0x20 - ldr r1, _08021E28 - ldr r0, [r1] - ldr r0, [r0, 0x4] - adds r4, r1, 0 - cmp r0, 0x1C - bls _08021E1E - b _080222B6 -_08021E1E: - lsls r0, 2 - ldr r1, _08021E2C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08021E28: .4byte gUnknown_203B290 -_08021E2C: .4byte _08021E30 - .align 2, 0 -_08021E30: - .4byte _08021EA4 - .4byte _08021EC0 - .4byte _08021F38 - .4byte _08021F50 - .4byte _080222B6 - .4byte _08021F78 - .4byte _08021F90 - .4byte _08021F08 - .4byte _08021F20 - .4byte _08021FD8 - .4byte _08021FE2 - .4byte _08021FF0 - .4byte _0802208E - .4byte _080220B8 - .4byte _080220D8 - .4byte _080220EA - .4byte _08022080 - .4byte _08022024 - .4byte _08021FA8 - .4byte _08021FC0 - .4byte _08022138 - .4byte _08022150 - .4byte _08022168 - .4byte _08022176 - .4byte _0802217E - .4byte _08022238 - .4byte _08022250 - .4byte _08022268 - .4byte _08022294 -_08021EA4: - bl sub_80222C8 - ldr r2, _08021EB8 - ldr r0, _08021EBC - ldr r4, [r0] - ldr r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - b _08021ED4 - .align 2, 0 -_08021EB8: .4byte gWigglytuffDialogue -_08021EBC: .4byte gUnknown_203B290 -_08021EC0: - bl sub_80222C8 - ldr r2, _08021F00 - ldr r0, _08021F04 - ldr r4, [r0] - ldr r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x4 -_08021ED4: - adds r0, r2 - ldr r0, [r0] - ldr r2, [r4, 0x14] - adds r3, r4, 0 - adds r3, 0x1C - adds r1, r4, 0 - adds r1, 0x5C - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - adds r1, r4, 0 - adds r1, 0xCC - ldr r1, [r1] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - bl sub_8014248 - b _080222B6 - .align 2, 0 -_08021F00: .4byte gWigglytuffDialogue -_08021F04: .4byte gUnknown_203B290 -_08021F08: - ldr r3, [r4] - movs r0, 0x9 - str r0, [r3, 0x8] - ldr r2, _08021F1C - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0xC - b _0802227A - .align 2, 0 -_08021F1C: .4byte gWigglytuffDialogue -_08021F20: - ldr r3, [r4] - movs r0, 0xA - str r0, [r3, 0x8] - ldr r2, _08021F34 - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x10 - b _0802227A - .align 2, 0 -_08021F34: .4byte gWigglytuffDialogue -_08021F38: - ldr r3, [r4] - movs r0, 0x1 - str r0, [r3, 0x8] - ldr r2, _08021F4C - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x4C - b _0802227A - .align 2, 0 -_08021F4C: .4byte gWigglytuffDialogue -_08021F50: - ldr r3, [r4] - movs r0, 0x4 - str r0, [r3, 0x8] - ldr r2, _08021F70 - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x8 - adds r0, r2 - ldr r0, [r0] - adds r3, 0xCC - ldr r2, [r3] - ldr r3, _08021F74 - b _08022284 - .align 2, 0 -_08021F70: .4byte gWigglytuffDialogue -_08021F74: .4byte 0x0000030d -_08021F78: - ldr r3, [r4] - movs r0, 0x3 - str r0, [r3, 0x8] - ldr r2, _08021F8C - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x20 - b _0802227A - .align 2, 0 -_08021F8C: .4byte gWigglytuffDialogue -_08021F90: - ldr r3, [r4] - movs r0, 0xA - str r0, [r3, 0x8] - ldr r2, _08021FA4 - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x24 - b _0802227A - .align 2, 0 -_08021FA4: .4byte gWigglytuffDialogue -_08021FA8: - ldr r3, [r4] - movs r0, 0x3 - str r0, [r3, 0x8] - ldr r2, _08021FBC - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x28 - b _0802227A - .align 2, 0 -_08021FBC: .4byte gWigglytuffDialogue -_08021FC0: - ldr r3, [r4] - movs r0, 0xA - str r0, [r3, 0x8] - ldr r2, _08021FD4 - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x2C - b _0802227A - .align 2, 0 -_08021FD4: .4byte gWigglytuffDialogue -_08021FD8: - movs r0, 0x2 - movs r1, 0x3 - bl sub_80211AC - b _08021FE8 -_08021FE2: - movs r0, 0x1 - bl sub_8021354 -_08021FE8: - movs r0, 0x1 - bl DrawTeamMoneyBox - b _080222B6 -_08021FF0: - bl sub_8021494 - movs r0, 0x1 - bl DrawTeamMoneyBox - bl sub_8022380 - ldr r0, _08022020 - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x6C - adds r1, r2, 0 - adds r1, 0x1C - adds r3, r2, 0 - adds r3, 0x5C - ldr r2, [r2, 0x18] - str r2, [sp] - movs r2, 0x2 - str r2, [sp, 0x4] - movs r2, 0 - bl sub_8012D60 - b _080222B6 - .align 2, 0 -_08022020: .4byte gUnknown_203B290 -_08022024: - bl sub_8022420 - ldr r0, _08022070 - ldr r4, _08022074 - ldr r1, [r4] - ldrb r1, [r1, 0x10] - movs r2, 0 - bl sub_8092578 - ldr r1, _08022078 - ldr r4, [r4] - ldr r0, [r4, 0xC] - str r0, [r1] - ldr r2, _0802207C - ldr r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x14 - adds r0, r2 - ldr r0, [r0] - adds r3, r4, 0 - adds r3, 0x1C - movs r2, 0 - str r2, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - str r2, [sp, 0x8] - adds r4, 0xCC - ldr r1, [r4] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - movs r2, 0x5 - bl sub_8014248 - b _080222B6 - .align 2, 0 -_08022070: .4byte gUnknown_202E628 -_08022074: .4byte gUnknown_203B290 -_08022078: .4byte gUnknown_202DE30 -_0802207C: .4byte gWigglytuffDialogue -_08022080: - ldr r0, [r4] - ldrb r0, [r0, 0x10] - movs r1, 0 - movs r2, 0x2 - bl sub_8021774 - b _080222B6 -_0802208E: - ldr r1, [r4] - movs r0, 0xD - str r0, [r1, 0x8] - ldr r0, _080220B0 - ldrb r1, [r1, 0x10] - movs r2, 0 - bl sub_8092578 - ldr r2, _080220B4 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x18 - b _0802227A - .align 2, 0 -_080220B0: .4byte gUnknown_202E628 -_080220B4: .4byte gWigglytuffDialogue -_080220B8: - ldr r1, [r4] - movs r0, 0xE - str r0, [r1, 0x8] - ldr r0, _080220D4 - bl PlaySound - ldr r0, [r4] - movs r1, 0x98 - lsls r1, 1 - adds r0, r1 - movs r1, 0x1 - str r1, [r0] - b _080222B6 - .align 2, 0 -_080220D4: .4byte 0x0000025b -_080220D8: - ldr r0, [r4] - movs r1, 0xF - str r1, [r0, 0x8] - movs r1, 0x9A - lsls r1, 1 - adds r0, r1 - movs r1, 0x1E - str r1, [r0] - b _080222B6 -_080220EA: - movs r0, 0x2 - bl sub_8021700 - lsls r0, 24 - cmp r0, 0 - beq _08022108 - bl sub_80213A0 - ldr r0, _08022104 - ldr r1, [r0] - movs r0, 0x12 - b _0802210E - .align 2, 0 -_08022104: .4byte gUnknown_203B290 -_08022108: - ldr r0, _08022130 - ldr r1, [r0] - movs r0, 0x8 -_0802210E: - str r0, [r1, 0x8] - movs r0, 0xCE - bl PlaySound - ldr r3, _08022134 - ldr r0, _08022130 - ldr r2, [r0] - ldr r1, [r2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r3, 0x1C - adds r0, r3 - ldr r0, [r0] - adds r2, 0xCC - ldr r2, [r2] - b _08022282 - .align 2, 0 -_08022130: .4byte gUnknown_203B290 -_08022134: .4byte gWigglytuffDialogue -_08022138: - ldr r3, [r4] - movs r0, 0x16 - str r0, [r3, 0x8] - ldr r2, _0802214C - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x30 - b _0802227A - .align 2, 0 -_0802214C: .4byte gWigglytuffDialogue -_08022150: - ldr r3, [r4] - movs r0, 0x17 - str r0, [r3, 0x8] - ldr r2, _08022164 - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x34 - b _0802227A - .align 2, 0 -_08022164: .4byte gWigglytuffDialogue -_08022168: - movs r0, 0 - movs r1, 0x3 - movs r2, 0 - movs r3, 0xA - bl sub_8023144 - b _080222B6 -_08022176: - movs r0, 0x1 - bl sub_8023354 - b _080222B6 -_0802217E: - ldr r4, _080221A0 - ldr r0, [r4] - ldrb r0, [r0, 0x10] - add r1, sp, 0x14 - movs r2, 0 - movs r3, 0 - bl sub_8092638 - add r0, sp, 0x14 - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _080221A4 - ldr r1, [r4] - movs r0, 0x19 - str r0, [r1, 0x8] - b _080221FA - .align 2, 0 -_080221A0: .4byte gUnknown_203B290 -_080221A4: - ldr r0, [r4] - ldrb r0, [r0, 0x10] - bl GetFriendAreaUnlockCondition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - beq _080221E0 - cmp r0, 0x2 - bgt _080221BE - cmp r0, 0x1 - beq _080221C4 - b _080221F0 -_080221BE: - cmp r0, 0x3 - beq _080221E8 - b _080221F0 -_080221C4: - movs r0, 0x6 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - beq _080221D8 - ldr r1, [r4] - movs r0, 0x15 - str r0, [r1, 0x8] - b _080221FA -_080221D8: - ldr r1, [r4] - movs r0, 0x1A - str r0, [r1, 0x8] - b _080221FA -_080221E0: - ldr r1, [r4] - movs r0, 0x1B - str r0, [r1, 0x8] - b _080221FA -_080221E8: - ldr r1, [r4] - movs r0, 0x1C - str r0, [r1, 0x8] - b _080221FA -_080221F0: - ldr r2, _08022228 - ldr r1, [r2] - movs r0, 0x15 - str r0, [r1, 0x8] - adds r4, r2, 0 -_080221FA: - ldr r0, [r4] - movs r1, 0x12 - ldrsh r0, [r0, r1] - bl GetMonSpecies - adds r1, r0, 0 - ldr r0, _0802222C - bl strcpy - ldr r0, _08022230 - ldr r1, [r4] - ldrb r1, [r1, 0x10] - movs r2, 0 - bl sub_8092578 - ldr r2, _08022234 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x38 - b _0802227A - .align 2, 0 -_08022228: .4byte gUnknown_203B290 -_0802222C: .4byte gAvailablePokemonNames -_08022230: .4byte gUnknown_202E628 -_08022234: .4byte gWigglytuffDialogue -_08022238: - ldr r3, [r4] - movs r0, 0x15 - str r0, [r3, 0x8] - ldr r2, _0802224C - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x3C - b _0802227A - .align 2, 0 -_0802224C: .4byte gWigglytuffDialogue -_08022250: - ldr r3, [r4] - movs r0, 0x15 - str r0, [r3, 0x8] - ldr r2, _08022264 - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x40 - b _0802227A - .align 2, 0 -_08022264: .4byte gWigglytuffDialogue -_08022268: - ldr r3, [r4] - movs r0, 0x15 - str r0, [r3, 0x8] - ldr r2, _0802228C - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x44 -_0802227A: - adds r0, r2 - ldr r0, [r0] - adds r3, 0xCC - ldr r2, [r3] -_08022282: - ldr r3, _08022290 -_08022284: - movs r1, 0 - bl sub_80141B4 - b _080222B6 - .align 2, 0 -_0802228C: .4byte gWigglytuffDialogue -_08022290: .4byte 0x0000010d -_08022294: - ldr r3, [r4] - movs r0, 0x15 - str r0, [r3, 0x8] - ldr r2, _080222C0 - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x48 - adds r0, r2 - ldr r0, [r0] - adds r3, 0xCC - ldr r2, [r3] - ldr r3, _080222C4 - movs r1, 0 - bl sub_80141B4 -_080222B6: - add sp, 0x20 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080222C0: .4byte gWigglytuffDialogue -_080222C4: .4byte 0x0000010d - thumb_func_end UpdateWigglytuffDialogue - - thumb_func_start sub_80222C8 -sub_80222C8: - push {r4-r7,lr} - ldr r4, _08022344 - ldr r0, [r4] - adds r0, 0x5C - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r1, [r4] - movs r5, 0 - ldr r0, _08022348 - ldr r0, [r0] - str r0, [r1, 0x1C] - adds r3, r1, 0 - adds r3, 0x20 - movs r0, 0x2 - str r0, [r1, 0x20] - movs r2, 0x1 - ldr r0, _0802234C - ldr r0, [r0] - str r0, [r1, 0x24] - movs r0, 0x3 - str r0, [r1, 0x28] - ldr r0, _08022350 - ldr r0, [r0] - str r0, [r1, 0x2C] - movs r0, 0x4 - str r0, [r1, 0x30] - ldr r0, _08022354 - ldr r0, [r0] - str r0, [r1, 0x34] - str r2, [r1, 0x38] - movs r7, 0x4 - str r5, [r1, 0x3C] - str r2, [r3, 0x20] - adds r6, r1, 0 - adds r2, r6, 0 - adds r2, 0x5C -_08022314: - ldrh r0, [r2] - cmp r0, 0 - bne _08022322 - ldr r1, [r3] - ldr r0, [r6, 0x14] - cmp r1, r0 - beq _0802237A -_08022322: - adds r3, 0x8 - adds r2, 0x2 - adds r5, 0x1 - cmp r5, r7 - blt _08022314 - movs r5, 0 - cmp r5, r7 - bge _0802237A - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x5C - ldrh r0, [r0] - cmp r0, 0 - bne _08022358 - ldr r0, [r1, 0x20] - str r0, [r1, 0x14] - b _0802237A - .align 2, 0 -_08022344: .4byte gUnknown_203B290 -_08022348: .4byte gUnknown_80D4978 -_0802234C: .4byte gWigglytuffCheck -_08022350: .4byte gUnknown_80D4970 -_08022354: .4byte gUnknown_80D4934 -_08022358: - adds r5, 0x1 - cmp r5, r7 - bge _0802237A - ldr r2, [r4] - lsls r0, r5, 1 - adds r1, r2, 0 - adds r1, 0x5C - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _08022358 - lsls r0, r5, 3 - adds r1, r2, 0 - adds r1, 0x20 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x14] -_0802237A: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80222C8 - - thumb_func_start sub_8022380 -sub_8022380: - push {r4-r7,lr} - ldr r4, _080223EC - ldr r0, [r4] - adds r0, 0x5C - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r3, [r4] - movs r2, 0 - ldr r0, _080223F0 - ldr r0, [r0] - str r0, [r3, 0x1C] - movs r0, 0x2 - str r0, [r3, 0x20] - movs r1, 0x1 - ldr r0, _080223F4 - ldr r0, [r0] - str r0, [r3, 0x24] - movs r0, 0x4 - str r0, [r3, 0x28] - movs r6, 0x2 - str r2, [r3, 0x2C] - str r1, [r3, 0x30] - movs r5, 0 - mov r12, r3 - adds r3, 0x20 - mov r2, r12 - adds r2, 0x5C -_080223BA: - ldrh r0, [r2] - cmp r0, 0 - bne _080223CA - ldr r1, [r3] - mov r7, r12 - ldr r0, [r7, 0x18] - cmp r1, r0 - beq _0802241A -_080223CA: - adds r3, 0x8 - adds r2, 0x2 - adds r5, 0x1 - cmp r5, r6 - blt _080223BA - movs r5, 0 - cmp r5, r6 - bge _0802241A - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x5C - ldrh r0, [r0] - cmp r0, 0 - bne _080223F8 - ldr r0, [r1, 0x20] - str r0, [r1, 0x18] - b _0802241A - .align 2, 0 -_080223EC: .4byte gUnknown_203B290 -_080223F0: .4byte gUnknown_80D4978 -_080223F4: .4byte gUnknown_80D4970 -_080223F8: - adds r5, 0x1 - cmp r5, r6 - bge _0802241A - ldr r2, [r4] - lsls r0, r5, 1 - adds r1, r2, 0 - adds r1, 0x5C - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _080223F8 - lsls r0, r5, 3 - adds r1, r2, 0 - adds r1, 0x20 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x18] -_0802241A: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8022380 - - thumb_func_start sub_8022420 -sub_8022420: - push {r4,lr} - ldr r4, _08022454 - ldr r0, [r4] - adds r0, 0x5C - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r1, [r4] - movs r3, 0 - ldr r0, _08022458 - ldr r0, [r0] - str r0, [r1, 0x1C] - movs r0, 0x5 - str r0, [r1, 0x20] - movs r2, 0x1 - ldr r0, _0802245C - ldr r0, [r0] - str r0, [r1, 0x24] - movs r0, 0x6 - str r0, [r1, 0x28] - str r3, [r1, 0x2C] - str r2, [r1, 0x30] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08022454: .4byte gUnknown_203B290 -_08022458: .4byte gUnknown_80D4920 -_0802245C: .4byte gUnknown_80D4928 - thumb_func_end sub_8022420 - - thumb_func_start sub_8022460 -sub_8022460: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _080224CC - ldr r1, [sp] - cmp r1, 0x1 - beq _0802247A - ldr r0, _0802248C - ldr r0, [r0] - str r1, [r0, 0x14] -_0802247A: - ldr r0, [sp] - cmp r0, 0x2 - beq _0802249A - cmp r0, 0x2 - bgt _08022490 - cmp r0, 0x1 - beq _080224C6 - b _080224CC - .align 2, 0 -_0802248C: .4byte gUnknown_203B290 -_08022490: - cmp r0, 0x3 - beq _080224B6 - cmp r0, 0x4 - beq _080224BE - b _080224CC -_0802249A: - movs r0, 0x2 - bl sub_8021700 - lsls r0, 24 - cmp r0, 0 - beq _080224AE - movs r0, 0x5 - bl sub_8021D44 - b _080224CC -_080224AE: - movs r0, 0x7 - bl sub_8021D44 - b _080224CC -_080224B6: - movs r0, 0x14 - bl sub_8021D44 - b _080224CC -_080224BE: - movs r0, 0x2 - bl sub_8021D44 - b _080224CC -_080224C6: - movs r0, 0x3 - bl sub_8021D44 -_080224CC: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_8022460 - - thumb_func_start sub_80224D4 -sub_80224D4: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _08022532 - ldr r0, [sp] - cmp r0, 0x5 - beq _080224F8 - cmp r0, 0x5 - bgt _080224F2 - cmp r0, 0x1 - beq _0802252C - b _08022532 -_080224F2: - cmp r0, 0x6 - beq _0802252C - b _08022532 -_080224F8: - ldr r0, _08022524 - ldr r2, [r0] - movs r0, 0x98 - lsls r0, 2 - adds r2, r0 - ldr r0, _08022528 - ldr r3, [r0] - ldr r0, [r2] - ldr r1, [r3, 0xC] - subs r0, r1 - str r0, [r2] - ldrb r0, [r3, 0x10] - bl UnlockFriendArea - movs r0, 0xA6 - lsls r0, 1 - bl PlaySound - movs r0, 0xC - bl sub_8021D44 - b _08022532 - .align 2, 0 -_08022524: .4byte gTeamInventory_203B460 -_08022528: .4byte gUnknown_203B290 -_0802252C: - movs r0, 0xA - bl sub_8021D44 -_08022532: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_80224D4 - - thumb_func_start sub_8022538 -sub_8022538: - push {r4,lr} - movs r0, 0x1 - bl sub_8021274 - cmp r0, 0x4 - bhi _080225BC - lsls r0, 2 - ldr r1, _08022550 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08022550: .4byte _08022554 - .align 2, 0 -_08022554: - .4byte _080225C2 - .4byte _080225BC - .4byte _080225B0 - .4byte _08022568 - .4byte _0802258C -_08022568: - bl sub_802132C - ldr r4, _08022588 - ldr r1, [r4] - strb r0, [r1, 0x10] - ldr r0, [r4] - ldrb r0, [r0, 0x10] - bl GetFriendAreaPrice - ldr r1, [r4] - str r0, [r1, 0xC] - movs r0, 0xB - bl sub_8021D44 - b _080225C2 - .align 2, 0 -_08022588: .4byte gUnknown_203B290 -_0802258C: - bl sub_802132C - ldr r4, _080225AC - ldr r1, [r4] - strb r0, [r1, 0x10] - ldr r0, [r4] - ldrb r0, [r0, 0x10] - bl GetFriendAreaPrice - ldr r1, [r4] - str r0, [r1, 0xC] - movs r0, 0x10 - bl sub_8021D44 - b _080225C2 - .align 2, 0 -_080225AC: .4byte gUnknown_203B290 -_080225B0: - bl sub_80213A0 - movs r0, 0x1 - bl sub_8021D44 - b _080225C2 -_080225BC: - movs r0, 0x1 - bl DrawTeamMoneyBox -_080225C2: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8022538 - - thumb_func_start sub_80225C8 -sub_80225C8: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_8021274 - ldr r4, _08022608 - ldr r0, [r4] - adds r0, 0x6C - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _080225F8 - ldr r0, [r4] - adds r0, 0x6C - mov r1, sp - bl sub_8013114 - ldr r1, [sp] - cmp r1, 0x1 - beq _080225F8 - ldr r0, [r4] - str r1, [r0, 0x18] -_080225F8: - ldr r0, [sp] - cmp r0, 0x2 - beq _08022612 - cmp r0, 0x2 - bgt _0802260C - cmp r0, 0x1 - beq _08022658 - b _0802265E - .align 2, 0 -_08022608: .4byte gUnknown_203B290 -_0802260C: - cmp r0, 0x4 - beq _08022650 - b _0802265E -_08022612: - ldr r0, _0802262C - ldr r0, [r0] - movs r1, 0x98 - lsls r1, 2 - adds r0, r1 - ldr r1, [r0] - cmp r1, 0 - bne _08022630 - movs r0, 0x6 - bl sub_8021D44 - b _0802265E - .align 2, 0 -_0802262C: .4byte gTeamInventory_203B460 -_08022630: - ldr r0, _08022644 - ldr r0, [r0] - ldr r0, [r0, 0xC] - cmp r0, r1 - ble _08022648 - movs r0, 0x13 - bl sub_8021D44 - b _0802265E - .align 2, 0 -_08022644: .4byte gUnknown_203B290 -_08022648: - movs r0, 0x11 - bl sub_8021D44 - b _0802265E -_08022650: - movs r0, 0x10 - bl sub_8021D44 - b _0802265E -_08022658: - movs r0, 0xA - bl sub_8021D44 -_0802265E: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80225C8 - - thumb_func_start sub_8022668 -sub_8022668: - push {lr} - bl sub_80217EC - cmp r0, 0x1 - bls _08022680 - cmp r0, 0x3 - bhi _08022680 - bl sub_8021830 - movs r0, 0xA - bl sub_8021D44 -_08022680: - pop {r0} - bx r0 - thumb_func_end sub_8022668 - - thumb_func_start sub_8022684 -sub_8022684: - push {r4,lr} - movs r0, 0x1 - bl sub_8023278 - cmp r0, 0x2 - beq _080226BC - cmp r0, 0x2 - bcc _080226C6 - cmp r0, 0x3 - bne _080226C6 - bl sub_802331C - ldr r4, _080226B8 - ldr r1, [r4] - strh r0, [r1, 0x12] - movs r2, 0x12 - ldrsh r0, [r1, r2] - bl GetFriendArea - ldr r1, [r4] - strb r0, [r1, 0x10] - movs r0, 0x18 - bl sub_8021D44 - b _080226C6 - .align 2, 0 -_080226B8: .4byte gUnknown_203B290 -_080226BC: - bl sub_80233A0 - movs r0, 0x1 - bl sub_8021D44 -_080226C6: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8022684 - - thumb_func_start sub_80226CC -sub_80226CC: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _080226E4 - ldr r0, _080226EC - ldr r0, [r0] - ldr r0, [r0, 0x8] - bl sub_8021D44 -_080226E4: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080226EC: .4byte gUnknown_203B290 - thumb_func_end sub_80226CC - - thumb_func_start sub_80226F0 -sub_80226F0: - push {r4,lr} - sub sp, 0x4 - mov r1, sp - movs r2, 0 - movs r0, 0x80 - strb r0, [r1] - strb r0, [r1, 0x1] - movs r0, 0x10 - strb r0, [r1, 0x2] - strb r2, [r1, 0x3] - bl sub_8099B94 - lsls r0, 24 - cmp r0, 0 - bne _08022782 - ldr r0, _08022728 - ldr r0, [r0] - movs r1, 0x98 - lsls r1, 1 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0x4 - bhi _0802275C - lsls r0, 2 - ldr r1, _0802272C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08022728: .4byte gUnknown_203B290 -_0802272C: .4byte _08022730 - .align 2, 0 -_08022730: - .4byte _0802275C - .4byte _08022744 - .4byte _08022750 - .4byte _08022744 - .4byte _08022750 -_08022744: - movs r0, 0x5 - movs r1, 0x2 - ldr r2, [sp] - bl sub_8099AFC - b _08022772 -_08022750: - movs r0, 0x5 - movs r1, 0x2 - ldr r2, [sp] - bl sub_8099A5C - b _08022772 -_0802275C: - ldr r4, _0802278C - ldr r0, [r4] - ldr r0, [r0, 0x8] - bl sub_8021D44 - ldr r0, [r4] - movs r1, 0x98 - lsls r1, 1 - adds r0, r1 - movs r1, 0 - str r1, [r0] -_08022772: - ldr r0, _0802278C - ldr r1, [r0] - movs r0, 0x98 - lsls r0, 1 - adds r1, r0 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_08022782: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802278C: .4byte gUnknown_203B290 - thumb_func_end sub_80226F0 - - thumb_func_start sub_8022790 -sub_8022790: - push {lr} - ldr r0, _080227A8 - ldr r2, [r0] - movs r0, 0x9A - lsls r0, 1 - adds r1, r2, r0 - ldr r0, [r1] - cmp r0, 0 - beq _080227AC - subs r0, 0x1 - str r0, [r1] - b _080227B2 - .align 2, 0 -_080227A8: .4byte gUnknown_203B290 -_080227AC: - ldr r0, [r2, 0x8] - bl sub_8021D44 -_080227B2: - pop {r0} - bx r0 - thumb_func_end sub_8022790 - - thumb_func_start sub_80227B8 -sub_80227B8: - push {r4,r5,lr} - adds r5, r0, 0 - bl ResetUnusedInputStruct - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r4, _08022810 - movs r0, 0xD4 - lsls r0, 1 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r4] - adds r2, r0, 0 - adds r2, 0xF4 - movs r1, 0 - str r1, [r2] - str r5, [r0, 0x48] - cmp r5, 0 - beq _08022820 - ldr r4, _08022814 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x7 - bl PrintColoredPokeNameToBuffer - adds r4, 0x50 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x6 - bl PrintColoredPokeNameToBuffer - bl HasGummiItem - lsls r0, 24 - cmp r0, 0 - beq _08022818 - movs r0, 0 - bl sub_8022924 - b _08022856 - .align 2, 0 -_08022810: .4byte gUnknown_203B294 -_08022814: .4byte gAvailablePokemonNames -_08022818: - movs r0, 0x11 - bl sub_8022924 - b _08022856 -_08022820: - ldr r4, _08022848 - ldr r5, _0802284C - adds r0, r4, 0 - adds r1, r5, 0 - bl strcpy - adds r4, 0x50 - adds r0, r4, 0 - adds r1, r5, 0 - bl strcpy - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - bne _08022850 - movs r0, 0x12 - bl sub_8022924 - b _08022856 - .align 2, 0 -_08022848: .4byte gAvailablePokemonNames -_0802284C: .4byte gUnknown_80DC5EC -_08022850: - movs r0, 0 - bl sub_8022924 -_08022856: - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80227B8 - - thumb_func_start sub_8022860 -sub_8022860: - push {lr} - ldr r0, _08022878 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0x16 - bhi _080228FE - lsls r0, 2 - ldr r1, _0802287C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08022878: .4byte gUnknown_203B294 -_0802287C: .4byte _08022880 - .align 2, 0 -_08022880: - .4byte _080228DC - .4byte _080228DC - .4byte _080228E2 - .4byte _080228E8 - .4byte _080228EE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228F4 - .4byte _080228FA -_080228DC: - bl sub_8022E78 - b _08022902 -_080228E2: - bl sub_8022EF4 - b _08022902 -_080228E8: - bl sub_8023068 - b _08022902 -_080228EE: - bl sub_80230E8 - b _08022902 -_080228F4: - bl sub_8023104 - b _08022902 -_080228FA: - movs r0, 0x3 - b _08022904 -_080228FE: - bl sub_8023120 -_08022902: - movs r0, 0 -_08022904: - pop {r1} - bx r1 - thumb_func_end sub_8022860 - - thumb_func_start sub_8022908 -sub_8022908: - push {r4,lr} - ldr r4, _08022920 - ldr r0, [r4] - cmp r0, 0 - beq _0802291A - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0802291A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08022920: .4byte gUnknown_203B294 - thumb_func_end sub_8022908 - - thumb_func_start sub_8022924 -sub_8022924: - push {lr} - ldr r1, _08022938 - ldr r1, [r1] - str r0, [r1] - bl sub_802293C - bl sub_8022A10 - pop {r0} - bx r0 - .align 2, 0 -_08022938: .4byte gUnknown_203B294 - thumb_func_end sub_8022924 - - thumb_func_start sub_802293C -sub_802293C: - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r4, _08022964 - ldr r0, [r4] - movs r1, 0xA4 - lsls r1, 1 - adds r0, r1 - bl sub_8006518 - ldr r1, [r4] - ldr r0, [r1] - cmp r0, 0x3 - beq _080229A4 - cmp r0, 0x3 - bgt _08022968 - cmp r0, 0x2 - beq _08022972 - b _080229BC - .align 2, 0 -_08022964: .4byte gUnknown_203B294 -_08022968: - cmp r0, 0x10 - bgt _080229BC - cmp r0, 0xA - blt _080229BC - b _080229E6 -_08022972: - bl sub_8022D2C - ldr r2, [r4] - movs r0, 0xBC - lsls r0, 1 - adds r2, r0 - ldr r1, _080229A0 - ldm r1!, {r3,r5,r6} - stm r2!, {r3,r5,r6} - ldm r1!, {r3,r5,r7} - stm r2!, {r3,r5,r7} - ldr r1, [r4] - adds r0, r1, r0 - adds r1, 0xF8 - bl sub_8012CAC - ldr r0, [r4] - movs r6, 0xC2 - lsls r6, 1 - adds r0, r6 - movs r1, 0x6 - strh r1, [r0] - b _080229E6 - .align 2, 0 -_080229A0: .4byte gUnknown_80DC5BC -_080229A4: - movs r7, 0xB0 - lsls r7, 1 - adds r1, r7 - ldr r0, _080229B8 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - b _080229E6 - .align 2, 0 -_080229B8: .4byte gUnknown_80DC5D4 -_080229BC: - ldr r0, _08022A08 - mov r12, r0 - movs r1, 0xA4 - lsls r1, 1 - mov r8, r1 - ldr r4, _08022A0C - movs r3, 0 - movs r2, 0x3 -_080229CC: - mov r5, r12 - ldr r1, [r5] - adds r1, r3 - add r1, r8 - adds r0, r4, 0 - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - adds r3, 0x18 - subs r2, 0x1 - cmp r2, 0 - bge _080229CC -_080229E6: - bl ResetUnusedInputStruct - ldr r0, _08022A08 - ldr r0, [r0] - movs r6, 0xA4 - lsls r6, 1 - adds r0, r6 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08022A08: .4byte gUnknown_203B294 -_08022A0C: .4byte gUnknown_80DC5A4 - thumb_func_end sub_802293C - - thumb_func_start sub_8022A10 -sub_8022A10: - push {r4-r7,lr} - sub sp, 0x8 - ldr r1, _08022A2C - ldr r0, [r1] - ldr r0, [r0] - adds r4, r1, 0 - cmp r0, 0x16 - bls _08022A22 - b _08022D1E -_08022A22: - lsls r0, 2 - ldr r1, _08022A30 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08022A2C: .4byte gUnknown_203B294 -_08022A30: .4byte _08022A34 - .align 2, 0 -_08022A34: - .4byte _08022A90 - .4byte _08022AAA - .4byte _08022AB2 - .4byte _08022AE0 - .4byte _08022B10 - .4byte _08022B1A - .4byte _08022B24 - .4byte _08022B34 - .4byte _08022B44 - .4byte _08022B54 - .4byte _08022B64 - .4byte _08022C28 - .4byte _08022CA0 - .4byte _08022CA8 - .4byte _08022CB0 - .4byte _08022CB8 - .4byte _08022CC0 - .4byte _08022CC8 - .4byte _08022CD8 - .4byte _08022CE8 - .4byte _08022CF8 - .4byte _08022D14 - .4byte _08022D1E -_08022A90: - ldr r0, [r4] - ldr r0, [r0, 0x48] - cmp r0, 0 - beq _08022A9C - movs r0, 0x5 - b _08022A9E -_08022A9C: - movs r0, 0x1 -_08022A9E: - movs r1, 0x3 - movs r2, 0 - movs r3, 0xA - bl sub_801A5D8 - b _08022D22 -_08022AAA: - movs r0, 0x1 - bl sub_801A8D0 - b _08022D22 -_08022AB2: - bl sub_801A9E0 - ldr r0, _08022ADC - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x54 - adds r1, r2, 0 - adds r1, 0xF8 - movs r4, 0x9C - lsls r4, 1 - adds r3, r2, r4 - adds r2, 0xF4 - ldr r2, [r2] - str r2, [sp] - movs r2, 0x2 - str r2, [sp, 0x4] - movs r2, 0 - bl sub_8012D60 - b _08022D22 - .align 2, 0 -_08022ADC: .4byte gUnknown_203B294 -_08022AE0: - bl sub_801A9E0 - ldr r4, _08022B08 - ldr r0, [r4] - adds r0, 0x54 - movs r1, 0 - bl sub_8012EA4 - ldr r0, [r4] - adds r0, 0xA4 - ldr r1, _08022B0C - movs r2, 0x3 - str r2, [sp] - movs r2, 0x1 - str r2, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_8012D60 - b _08022D22 - .align 2, 0 -_08022B08: .4byte gUnknown_203B294 -_08022B0C: .4byte gUnknown_80DC584 -_08022B10: - ldr r0, [r4] - adds r0, 0x50 - bl sub_801B3C0 - b _08022D22 -_08022B1A: - ldr r0, _08022B20 - b _08022D00 - .align 2, 0 -_08022B20: .4byte gUnknown_80DC5F4 -_08022B24: - ldr r0, _08022B2C - ldr r3, _08022B30 - b _08022D02 - .align 2, 0 -_08022B2C: .4byte gUnknown_80DC618 -_08022B30: .4byte 0x00000101 -_08022B34: - ldr r0, _08022B3C - ldr r3, _08022B40 - b _08022D02 - .align 2, 0 -_08022B3C: .4byte gUnknown_80DC674 -_08022B40: .4byte 0x00000101 -_08022B44: - ldr r0, _08022B4C - ldr r3, _08022B50 - b _08022D02 - .align 2, 0 -_08022B4C: .4byte gUnknown_80DC6CC -_08022B50: .4byte 0x00000101 -_08022B54: - ldr r0, _08022B5C - ldr r3, _08022B60 - b _08022D02 - .align 2, 0 -_08022B5C: .4byte gUnknown_80DC728 -_08022B60: .4byte 0x00000101 -_08022B64: - ldr r7, _08022B68 - b _08022B78 - .align 2, 0 -_08022B68: .4byte gUnknown_203B294 -_08022B6C: - ldr r1, [r4] - ldr r0, [r1, 0x40] - adds r0, 0x1 - str r0, [r1, 0x40] - cmp r0, 0x17 - bgt _08022C10 -_08022B78: - movs r5, 0 - movs r6, 0 - movs r3, 0 - ldr r2, [r4] - ldr r0, [r2, 0x38] - cmp r5, r0 - bge _08022BA4 - ldrb r1, [r2, 0x8] - b _08022B9C -_08022B8A: - adds r3, 0x1 - ldr r2, [r4] - ldr r0, [r2, 0x38] - cmp r3, r0 - bge _08022BA4 - adds r0, r2, 0 - adds r0, 0x8 - adds r0, r3 - ldrb r1, [r0] -_08022B9C: - ldr r0, [r2, 0x40] - cmp r1, r0 - bne _08022B8A - movs r5, 0x1 -_08022BA4: - movs r3, 0 - ldr r2, [r4] - ldr r0, [r2, 0x3C] - cmp r3, r0 - bge _08022BCE - adds r0, r2, 0 - adds r0, 0x20 - b _08022BC4 -_08022BB4: - adds r3, 0x1 - ldr r2, [r4] - ldr r0, [r2, 0x3C] - cmp r3, r0 - bge _08022BCE - adds r0, r2, 0 - adds r0, 0x20 - adds r0, r3 -_08022BC4: - ldrb r1, [r0] - ldr r0, [r2, 0x40] - cmp r1, r0 - bne _08022BB4 - movs r6, 0x1 -_08022BCE: - cmp r5, r6 - beq _08022B6C - ldr r1, [r7] - movs r0, 0xA - str r0, [r1, 0x4] - ldr r0, [r1, 0x40] - lsls r0, 24 - lsrs r0, 24 - bl GetIQSkillName - adds r1, r0, 0 - ldr r0, _08022C18 - bl strcpy - movs r0, 0xCB - bl PlaySound - ldr r0, _08022C1C - movs r1, 0 - movs r2, 0 - ldr r3, _08022C20 - bl sub_80141B4 - ldr r1, [r7] - ldr r0, [r1, 0x40] - adds r0, 0x1 - str r0, [r1, 0x40] - ldr r0, _08022C24 - ldr r0, [r0] - ldr r0, [r0, 0x40] - cmp r0, 0x17 - bgt _08022C10 - b _08022D22 -_08022C10: - movs r0, 0xB - bl sub_8022924 - b _08022D22 - .align 2, 0 -_08022C18: .4byte gUnknown_202DEA8 -_08022C1C: .4byte gUnknown_80DC788 -_08022C20: .4byte 0x00000101 -_08022C24: .4byte gUnknown_203B294 -_08022C28: - ldr r1, [r4] - movs r0, 0x16 - str r0, [r1, 0x4] - bl nullsub_104 - ldr r0, [r4] - adds r0, 0x46 - ldrh r0, [r0] - cmp r0, 0x8 - bhi _08022C98 - lsls r0, 2 - ldr r1, _08022C48 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08022C48: .4byte _08022C4C - .align 2, 0 -_08022C4C: - .4byte _08022C70 - .4byte _08022C78 - .4byte _08022C80 - .4byte _08022C98 - .4byte _08022C88 - .4byte _08022C98 - .4byte _08022C98 - .4byte _08022C98 - .4byte _08022C90 -_08022C70: - movs r0, 0x16 - bl sub_8022924 - b _08022D22 -_08022C78: - movs r0, 0xD - bl sub_8022924 - b _08022D22 -_08022C80: - movs r0, 0xE - bl sub_8022924 - b _08022D22 -_08022C88: - movs r0, 0xF - bl sub_8022924 - b _08022D22 -_08022C90: - movs r0, 0x10 - bl sub_8022924 - b _08022D22 -_08022C98: - movs r0, 0xC - bl sub_8022924 - b _08022D22 -_08022CA0: - ldr r0, _08022CA4 - b _08022D00 - .align 2, 0 -_08022CA4: .4byte gUnknown_80DC7B4 -_08022CA8: - ldr r0, _08022CAC - b _08022D00 - .align 2, 0 -_08022CAC: .4byte gUnknown_80DC7FC -_08022CB0: - ldr r0, _08022CB4 - b _08022D00 - .align 2, 0 -_08022CB4: .4byte gUnknown_80DC81C -_08022CB8: - ldr r0, _08022CBC - b _08022D00 - .align 2, 0 -_08022CBC: .4byte gUnknown_80DC844 -_08022CC0: - ldr r0, _08022CC4 - b _08022D00 - .align 2, 0 -_08022CC4: .4byte gUnknown_80DC864 -_08022CC8: - ldr r1, [r4] - movs r0, 0x16 - str r0, [r1, 0x4] - ldr r0, _08022CD4 - b _08022D00 - .align 2, 0 -_08022CD4: .4byte gUnknown_80DC88C -_08022CD8: - ldr r1, [r4] - movs r0, 0x16 - str r0, [r1, 0x4] - ldr r0, _08022CE4 - b _08022D00 - .align 2, 0 -_08022CE4: .4byte gUnknown_80DC8AC -_08022CE8: - ldr r1, [r4] - movs r0, 0x16 - str r0, [r1, 0x4] - ldr r0, _08022CF4 - b _08022D00 - .align 2, 0 -_08022CF4: .4byte gUnknown_80DC8C8 -_08022CF8: - ldr r1, [r4] - movs r0, 0x16 - str r0, [r1, 0x4] - ldr r0, _08022D0C -_08022D00: - ldr r3, _08022D10 -_08022D02: - movs r1, 0 - movs r2, 0 - bl sub_80141B4 - b _08022D22 - .align 2, 0 -_08022D0C: .4byte gUnknown_80DC8DC -_08022D10: .4byte 0x00000301 -_08022D14: - ldr r0, [r4] - ldr r0, [r0, 0x4C] - bl sub_801AFA4 - b _08022D22 -_08022D1E: - bl sub_801A928 -_08022D22: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8022A10 - .align 2,0 diff --git a/asm/code_8023144.s b/asm/code_8023144.s new file mode 100644 index 000000000..e4e3b8f38 --- /dev/null +++ b/asm/code_8023144.s @@ -0,0 +1,664 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_80227B8 +sub_80227B8: + push {r4,r5,lr} + adds r5, r0, 0 + bl ResetUnusedInputStruct + movs r0, 0 + movs r1, 0x1 + movs r2, 0x1 + bl sub_800641C + ldr r4, _08022810 + movs r0, 0xD4 + lsls r0, 1 + movs r1, 0x8 + bl MemoryAlloc + str r0, [r4] + adds r2, r0, 0 + adds r2, 0xF4 + movs r1, 0 + str r1, [r2] + str r5, [r0, 0x48] + cmp r5, 0 + beq _08022820 + ldr r4, _08022814 + adds r0, r4, 0 + adds r1, r5, 0 + movs r2, 0x7 + bl PrintColoredPokeNameToBuffer + adds r4, 0x50 + adds r0, r4, 0 + adds r1, r5, 0 + movs r2, 0x6 + bl PrintColoredPokeNameToBuffer + bl HasGummiItem + lsls r0, 24 + cmp r0, 0 + beq _08022818 + movs r0, 0 + bl sub_8022924 + b _08022856 + .align 2, 0 +_08022810: .4byte gUnknown_203B294 +_08022814: .4byte gAvailablePokemonNames +_08022818: + movs r0, 0x11 + bl sub_8022924 + b _08022856 +_08022820: + ldr r4, _08022848 + ldr r5, _0802284C + adds r0, r4, 0 + adds r1, r5, 0 + bl strcpy + adds r4, 0x50 + adds r0, r4, 0 + adds r1, r5, 0 + bl strcpy + bl GetNumberOfFilledInventorySlots + cmp r0, 0 + bne _08022850 + movs r0, 0x12 + bl sub_8022924 + b _08022856 + .align 2, 0 +_08022848: .4byte gAvailablePokemonNames +_0802284C: .4byte gUnknown_80DC5EC +_08022850: + movs r0, 0 + bl sub_8022924 +_08022856: + movs r0, 0x1 + pop {r4,r5} + pop {r1} + bx r1 + thumb_func_end sub_80227B8 + + thumb_func_start sub_8022860 +sub_8022860: + push {lr} + ldr r0, _08022878 + ldr r0, [r0] + ldr r0, [r0] + cmp r0, 0x16 + bhi _080228FE + lsls r0, 2 + ldr r1, _0802287C + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08022878: .4byte gUnknown_203B294 +_0802287C: .4byte _08022880 + .align 2, 0 +_08022880: + .4byte _080228DC + .4byte _080228DC + .4byte _080228E2 + .4byte _080228E8 + .4byte _080228EE + .4byte _080228FE + .4byte _080228FE + .4byte _080228FE + .4byte _080228FE + .4byte _080228FE + .4byte _080228FE + .4byte _080228FE + .4byte _080228FE + .4byte _080228FE + .4byte _080228FE + .4byte _080228FE + .4byte _080228FE + .4byte _080228FE + .4byte _080228FE + .4byte _080228FE + .4byte _080228FE + .4byte _080228F4 + .4byte _080228FA +_080228DC: + bl sub_8022E78 + b _08022902 +_080228E2: + bl sub_8022EF4 + b _08022902 +_080228E8: + bl sub_8023068 + b _08022902 +_080228EE: + bl sub_80230E8 + b _08022902 +_080228F4: + bl sub_8023104 + b _08022902 +_080228FA: + movs r0, 0x3 + b _08022904 +_080228FE: + bl sub_8023120 +_08022902: + movs r0, 0 +_08022904: + pop {r1} + bx r1 + thumb_func_end sub_8022860 + + thumb_func_start sub_8022908 +sub_8022908: + push {r4,lr} + ldr r4, _08022920 + ldr r0, [r4] + cmp r0, 0 + beq _0802291A + bl MemoryFree + movs r0, 0 + str r0, [r4] +_0802291A: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_08022920: .4byte gUnknown_203B294 + thumb_func_end sub_8022908 + + thumb_func_start sub_8022924 +sub_8022924: + push {lr} + ldr r1, _08022938 + ldr r1, [r1] + str r0, [r1] + bl sub_802293C + bl sub_8022A10 + pop {r0} + bx r0 + .align 2, 0 +_08022938: .4byte gUnknown_203B294 + thumb_func_end sub_8022924 + + thumb_func_start sub_802293C +sub_802293C: + push {r4-r7,lr} + mov r7, r8 + push {r7} + ldr r4, _08022964 + ldr r0, [r4] + movs r1, 0xA4 + lsls r1, 1 + adds r0, r1 + bl sub_8006518 + ldr r1, [r4] + ldr r0, [r1] + cmp r0, 0x3 + beq _080229A4 + cmp r0, 0x3 + bgt _08022968 + cmp r0, 0x2 + beq _08022972 + b _080229BC + .align 2, 0 +_08022964: .4byte gUnknown_203B294 +_08022968: + cmp r0, 0x10 + bgt _080229BC + cmp r0, 0xA + blt _080229BC + b _080229E6 +_08022972: + bl sub_8022D2C + ldr r2, [r4] + movs r0, 0xBC + lsls r0, 1 + adds r2, r0 + ldr r1, _080229A0 + ldm r1!, {r3,r5,r6} + stm r2!, {r3,r5,r6} + ldm r1!, {r3,r5,r7} + stm r2!, {r3,r5,r7} + ldr r1, [r4] + adds r0, r1, r0 + adds r1, 0xF8 + bl sub_8012CAC + ldr r0, [r4] + movs r6, 0xC2 + lsls r6, 1 + adds r0, r6 + movs r1, 0x6 + strh r1, [r0] + b _080229E6 + .align 2, 0 +_080229A0: .4byte gUnknown_80DC5BC +_080229A4: + movs r7, 0xB0 + lsls r7, 1 + adds r1, r7 + ldr r0, _080229B8 + ldm r0!, {r2-r4} + stm r1!, {r2-r4} + ldm r0!, {r5-r7} + stm r1!, {r5-r7} + b _080229E6 + .align 2, 0 +_080229B8: .4byte gUnknown_80DC5D4 +_080229BC: + ldr r0, _08022A08 + mov r12, r0 + movs r1, 0xA4 + lsls r1, 1 + mov r8, r1 + ldr r4, _08022A0C + movs r3, 0 + movs r2, 0x3 +_080229CC: + mov r5, r12 + ldr r1, [r5] + adds r1, r3 + add r1, r8 + adds r0, r4, 0 + ldm r0!, {r5-r7} + stm r1!, {r5-r7} + ldm r0!, {r5-r7} + stm r1!, {r5-r7} + adds r3, 0x18 + subs r2, 0x1 + cmp r2, 0 + bge _080229CC +_080229E6: + bl ResetUnusedInputStruct + ldr r0, _08022A08 + ldr r0, [r0] + movs r6, 0xA4 + lsls r6, 1 + adds r0, r6 + movs r1, 0x1 + movs r2, 0x1 + bl sub_800641C + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_08022A08: .4byte gUnknown_203B294 +_08022A0C: .4byte gUnknown_80DC5A4 + thumb_func_end sub_802293C + + thumb_func_start sub_8022A10 +sub_8022A10: + push {r4-r7,lr} + sub sp, 0x8 + ldr r1, _08022A2C + ldr r0, [r1] + ldr r0, [r0] + adds r4, r1, 0 + cmp r0, 0x16 + bls _08022A22 + b _08022D1E +_08022A22: + lsls r0, 2 + ldr r1, _08022A30 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08022A2C: .4byte gUnknown_203B294 +_08022A30: .4byte _08022A34 + .align 2, 0 +_08022A34: + .4byte _08022A90 + .4byte _08022AAA + .4byte _08022AB2 + .4byte _08022AE0 + .4byte _08022B10 + .4byte _08022B1A + .4byte _08022B24 + .4byte _08022B34 + .4byte _08022B44 + .4byte _08022B54 + .4byte _08022B64 + .4byte _08022C28 + .4byte _08022CA0 + .4byte _08022CA8 + .4byte _08022CB0 + .4byte _08022CB8 + .4byte _08022CC0 + .4byte _08022CC8 + .4byte _08022CD8 + .4byte _08022CE8 + .4byte _08022CF8 + .4byte _08022D14 + .4byte _08022D1E +_08022A90: + ldr r0, [r4] + ldr r0, [r0, 0x48] + cmp r0, 0 + beq _08022A9C + movs r0, 0x5 + b _08022A9E +_08022A9C: + movs r0, 0x1 +_08022A9E: + movs r1, 0x3 + movs r2, 0 + movs r3, 0xA + bl sub_801A5D8 + b _08022D22 +_08022AAA: + movs r0, 0x1 + bl sub_801A8D0 + b _08022D22 +_08022AB2: + bl sub_801A9E0 + ldr r0, _08022ADC + ldr r2, [r0] + adds r0, r2, 0 + adds r0, 0x54 + adds r1, r2, 0 + adds r1, 0xF8 + movs r4, 0x9C + lsls r4, 1 + adds r3, r2, r4 + adds r2, 0xF4 + ldr r2, [r2] + str r2, [sp] + movs r2, 0x2 + str r2, [sp, 0x4] + movs r2, 0 + bl sub_8012D60 + b _08022D22 + .align 2, 0 +_08022ADC: .4byte gUnknown_203B294 +_08022AE0: + bl sub_801A9E0 + ldr r4, _08022B08 + ldr r0, [r4] + adds r0, 0x54 + movs r1, 0 + bl sub_8012EA4 + ldr r0, [r4] + adds r0, 0xA4 + ldr r1, _08022B0C + movs r2, 0x3 + str r2, [sp] + movs r2, 0x1 + str r2, [sp, 0x4] + movs r2, 0 + movs r3, 0 + bl sub_8012D60 + b _08022D22 + .align 2, 0 +_08022B08: .4byte gUnknown_203B294 +_08022B0C: .4byte gUnknown_80DC584 +_08022B10: + ldr r0, [r4] + adds r0, 0x50 + bl sub_801B3C0 + b _08022D22 +_08022B1A: + ldr r0, _08022B20 + b _08022D00 + .align 2, 0 +_08022B20: .4byte gUnknown_80DC5F4 +_08022B24: + ldr r0, _08022B2C + ldr r3, _08022B30 + b _08022D02 + .align 2, 0 +_08022B2C: .4byte gUnknown_80DC618 +_08022B30: .4byte 0x00000101 +_08022B34: + ldr r0, _08022B3C + ldr r3, _08022B40 + b _08022D02 + .align 2, 0 +_08022B3C: .4byte gUnknown_80DC674 +_08022B40: .4byte 0x00000101 +_08022B44: + ldr r0, _08022B4C + ldr r3, _08022B50 + b _08022D02 + .align 2, 0 +_08022B4C: .4byte gUnknown_80DC6CC +_08022B50: .4byte 0x00000101 +_08022B54: + ldr r0, _08022B5C + ldr r3, _08022B60 + b _08022D02 + .align 2, 0 +_08022B5C: .4byte gUnknown_80DC728 +_08022B60: .4byte 0x00000101 +_08022B64: + ldr r7, _08022B68 + b _08022B78 + .align 2, 0 +_08022B68: .4byte gUnknown_203B294 +_08022B6C: + ldr r1, [r4] + ldr r0, [r1, 0x40] + adds r0, 0x1 + str r0, [r1, 0x40] + cmp r0, 0x17 + bgt _08022C10 +_08022B78: + movs r5, 0 + movs r6, 0 + movs r3, 0 + ldr r2, [r4] + ldr r0, [r2, 0x38] + cmp r5, r0 + bge _08022BA4 + ldrb r1, [r2, 0x8] + b _08022B9C +_08022B8A: + adds r3, 0x1 + ldr r2, [r4] + ldr r0, [r2, 0x38] + cmp r3, r0 + bge _08022BA4 + adds r0, r2, 0 + adds r0, 0x8 + adds r0, r3 + ldrb r1, [r0] +_08022B9C: + ldr r0, [r2, 0x40] + cmp r1, r0 + bne _08022B8A + movs r5, 0x1 +_08022BA4: + movs r3, 0 + ldr r2, [r4] + ldr r0, [r2, 0x3C] + cmp r3, r0 + bge _08022BCE + adds r0, r2, 0 + adds r0, 0x20 + b _08022BC4 +_08022BB4: + adds r3, 0x1 + ldr r2, [r4] + ldr r0, [r2, 0x3C] + cmp r3, r0 + bge _08022BCE + adds r0, r2, 0 + adds r0, 0x20 + adds r0, r3 +_08022BC4: + ldrb r1, [r0] + ldr r0, [r2, 0x40] + cmp r1, r0 + bne _08022BB4 + movs r6, 0x1 +_08022BCE: + cmp r5, r6 + beq _08022B6C + ldr r1, [r7] + movs r0, 0xA + str r0, [r1, 0x4] + ldr r0, [r1, 0x40] + lsls r0, 24 + lsrs r0, 24 + bl GetIQSkillName + adds r1, r0, 0 + ldr r0, _08022C18 + bl strcpy + movs r0, 0xCB + bl PlaySound + ldr r0, _08022C1C + movs r1, 0 + movs r2, 0 + ldr r3, _08022C20 + bl sub_80141B4 + ldr r1, [r7] + ldr r0, [r1, 0x40] + adds r0, 0x1 + str r0, [r1, 0x40] + ldr r0, _08022C24 + ldr r0, [r0] + ldr r0, [r0, 0x40] + cmp r0, 0x17 + bgt _08022C10 + b _08022D22 +_08022C10: + movs r0, 0xB + bl sub_8022924 + b _08022D22 + .align 2, 0 +_08022C18: .4byte gUnknown_202DEA8 +_08022C1C: .4byte gUnknown_80DC788 +_08022C20: .4byte 0x00000101 +_08022C24: .4byte gUnknown_203B294 +_08022C28: + ldr r1, [r4] + movs r0, 0x16 + str r0, [r1, 0x4] + bl nullsub_104 + ldr r0, [r4] + adds r0, 0x46 + ldrh r0, [r0] + cmp r0, 0x8 + bhi _08022C98 + lsls r0, 2 + ldr r1, _08022C48 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08022C48: .4byte _08022C4C + .align 2, 0 +_08022C4C: + .4byte _08022C70 + .4byte _08022C78 + .4byte _08022C80 + .4byte _08022C98 + .4byte _08022C88 + .4byte _08022C98 + .4byte _08022C98 + .4byte _08022C98 + .4byte _08022C90 +_08022C70: + movs r0, 0x16 + bl sub_8022924 + b _08022D22 +_08022C78: + movs r0, 0xD + bl sub_8022924 + b _08022D22 +_08022C80: + movs r0, 0xE + bl sub_8022924 + b _08022D22 +_08022C88: + movs r0, 0xF + bl sub_8022924 + b _08022D22 +_08022C90: + movs r0, 0x10 + bl sub_8022924 + b _08022D22 +_08022C98: + movs r0, 0xC + bl sub_8022924 + b _08022D22 +_08022CA0: + ldr r0, _08022CA4 + b _08022D00 + .align 2, 0 +_08022CA4: .4byte gUnknown_80DC7B4 +_08022CA8: + ldr r0, _08022CAC + b _08022D00 + .align 2, 0 +_08022CAC: .4byte gUnknown_80DC7FC +_08022CB0: + ldr r0, _08022CB4 + b _08022D00 + .align 2, 0 +_08022CB4: .4byte gUnknown_80DC81C +_08022CB8: + ldr r0, _08022CBC + b _08022D00 + .align 2, 0 +_08022CBC: .4byte gUnknown_80DC844 +_08022CC0: + ldr r0, _08022CC4 + b _08022D00 + .align 2, 0 +_08022CC4: .4byte gUnknown_80DC864 +_08022CC8: + ldr r1, [r4] + movs r0, 0x16 + str r0, [r1, 0x4] + ldr r0, _08022CD4 + b _08022D00 + .align 2, 0 +_08022CD4: .4byte gUnknown_80DC88C +_08022CD8: + ldr r1, [r4] + movs r0, 0x16 + str r0, [r1, 0x4] + ldr r0, _08022CE4 + b _08022D00 + .align 2, 0 +_08022CE4: .4byte gUnknown_80DC8AC +_08022CE8: + ldr r1, [r4] + movs r0, 0x16 + str r0, [r1, 0x4] + ldr r0, _08022CF4 + b _08022D00 + .align 2, 0 +_08022CF4: .4byte gUnknown_80DC8C8 +_08022CF8: + ldr r1, [r4] + movs r0, 0x16 + str r0, [r1, 0x4] + ldr r0, _08022D0C +_08022D00: + ldr r3, _08022D10 +_08022D02: + movs r1, 0 + movs r2, 0 + bl sub_80141B4 + b _08022D22 + .align 2, 0 +_08022D0C: .4byte gUnknown_80DC8DC +_08022D10: .4byte 0x00000301 +_08022D14: + ldr r0, [r4] + ldr r0, [r0, 0x4C] + bl sub_801AFA4 + b _08022D22 +_08022D1E: + bl sub_801A928 +_08022D22: + add sp, 0x8 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_8022A10 + + .align 2,0 diff --git a/asm/wigglytuff_shop.s b/asm/wigglytuff_shop.s new file mode 100644 index 000000000..2c0eea2c1 --- /dev/null +++ b/asm/wigglytuff_shop.s @@ -0,0 +1,112 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_80226F0 +sub_80226F0: + push {r4,lr} + sub sp, 0x4 + mov r1, sp + movs r2, 0 + movs r0, 0x80 + strb r0, [r1] + strb r0, [r1, 0x1] + movs r0, 0x10 + strb r0, [r1, 0x2] + strb r2, [r1, 0x3] + bl sub_8099B94 + lsls r0, 24 + cmp r0, 0 + bne _08022782 + ldr r0, _08022728 + ldr r0, [r0] + movs r1, 0x98 + lsls r1, 1 + adds r0, r1 + ldr r0, [r0] + cmp r0, 0x4 + bhi _0802275C + lsls r0, 2 + ldr r1, _0802272C + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08022728: .4byte gUnknown_203B290 +_0802272C: .4byte _08022730 + .align 2, 0 +_08022730: + .4byte _0802275C + .4byte _08022744 + .4byte _08022750 + .4byte _08022744 + .4byte _08022750 +_08022744: + movs r0, 0x5 + movs r1, 0x2 + ldr r2, [sp] + bl sub_8099AFC + b _08022772 +_08022750: + movs r0, 0x5 + movs r1, 0x2 + ldr r2, [sp] + bl sub_8099A5C + b _08022772 +_0802275C: + ldr r4, _0802278C + ldr r0, [r4] + ldr r0, [r0, 0x8] + bl UpdateWigglytuffState + ldr r0, [r4] + movs r1, 0x98 + lsls r1, 1 + adds r0, r1 + movs r1, 0 + str r1, [r0] +_08022772: + ldr r0, _0802278C + ldr r1, [r0] + movs r0, 0x98 + lsls r0, 1 + adds r1, r0 + ldr r0, [r1] + adds r0, 0x1 + str r0, [r1] +_08022782: + add sp, 0x4 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0802278C: .4byte gUnknown_203B290 + thumb_func_end sub_80226F0 + + thumb_func_start sub_8022790 +sub_8022790: + push {lr} + ldr r0, _080227A8 + ldr r2, [r0] + movs r0, 0x9A + lsls r0, 1 + adds r1, r2, r0 + ldr r0, [r1] + cmp r0, 0 + beq _080227AC + subs r0, 0x1 + str r0, [r1] + b _080227B2 + .align 2, 0 +_080227A8: .4byte gUnknown_203B290 +_080227AC: + ldr r0, [r2, 0x8] + bl UpdateWigglytuffState +_080227B2: + pop {r0} + bx r0 + thumb_func_end sub_8022790 + + .align 2,0 diff --git a/ld_script.txt b/ld_script.txt index e183f77af..fe02fbcd6 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -118,6 +118,9 @@ SECTIONS { asm/code_801EE10.o(.text); src/code_801EE10_mid.o(.text); asm/code_801EE10_mid.o(.text); + src/wigglytuff_shop.o(.text); + asm/wigglytuff_shop.o(.text); + asm/code_8023144.o(.text); src/code_8023144.o(.text); asm/code_801EE10_1.o(.text); src/code_801EE10_1.o(.text); diff --git a/src/wigglytuff_shop.c b/src/wigglytuff_shop.c new file mode 100644 index 000000000..c8f38e672 --- /dev/null +++ b/src/wigglytuff_shop.c @@ -0,0 +1,628 @@ +#include "global.h" +#include "constants/friend_area.h" +#include "file_system.h" +#include "menu.h" +#include "pokemon.h" +#include "input.h" +#include "team_inventory.h" +#include "text.h" +#include "memory.h" +#include "menu_input.h" +#include "friend_area.h" + +struct unkStruct_8092638 +{ + u32 unk0; + u8 unk4; + u32 unk5; +}; +extern u8 gUnknown_202E628[]; +extern u32 gUnknown_202DE30[2]; +extern u8 gUnknown_202E5D8[]; +extern u8 gUnknown_202E1C8[]; +extern u8 gAvailablePokemonNames[]; + +extern u8 *gWigglytuffDialogue[2][20]; +extern u8 *gWigglytuffCheck[]; +extern u8 *gUnknown_80D4920[]; +extern u8 *gUnknown_80D4928[]; +extern u8 *gUnknown_80D4934[]; +extern u8 *gUnknown_80D4970[]; +extern u8 *gUnknown_80D4978[]; + +extern struct UnkTextStruct2 gUnknown_80DC534; +extern struct UnkTextStruct2 gUnknown_80DC564; +extern struct UnkTextStruct2 gUnknown_80DC54C; +extern struct UnkTextStruct2 gUnknown_80DC534; + +s32 sub_80144A4(s32 *); +u8 sub_8021700(u32); +void sub_8092578(u8 *buffer, u8 index, u8 r2); +void sub_80222C8(void); +extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u16 *, u32, u32,u8 *r5, u32); +extern void sub_80141B4(const u8 *, u32, u8*, u32); +extern void DrawTeamMoneyBox(u32); +extern void sub_80211AC(u32, u32); +extern void sub_8021354(u32); +extern void sub_8021494(); +extern void sub_803AA34(); +extern void sub_8021774(u8,u32, u32); +extern void sub_809249C(u8, u32); +extern void sub_8021830(void); +extern u32 sub_80217EC(void); +extern u8 sub_803ABC8(void); +extern u32 sub_8021274(u32); +extern u8 sub_802132C(void); +extern void sub_80213A0(void); +extern void sub_8022380(void); +extern void PlaySound(u32); +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 sub_8022420(void); +extern void sub_8092638(u8,struct unkStruct_8092638 *, u32, u32); + +extern u32 sub_8023278(u32); +void sub_80233A0(void); +s16 sub_802331C(void); +extern void sub_8022460(void); +extern void sub_8022538(void); +extern void sub_80225C8(void); +extern void sub_80224D4(void); +extern void sub_80226F0(void); +extern void sub_8022790(void); +extern void sub_8022668(void); +extern void sub_8022684(void); +extern void sub_80226CC(void); + +void UpdateWigglytuffState(s32); +void sub_8021D5C(void); +void UpdateWigglytuffDialogue(void); + +struct unkStruct_203B290 +{ + // size: 0x138 + bool32 isAsleep; + s32 state; + s32 fallbackState; + s32 friendAreaPrice; + u8 chosenFriendArea; + s16 chosenSpecies; + u32 menuAction1; + u32 menuAction2; + struct MenuItem unk1C[8]; + u16 unk5C[0x8]; + struct MenuStruct unk6C; + /* 0xBC */ struct OpenedFile *faceFile; + /* 0xC0 */ u8 *faceData; + u16 unkC4; + u16 unkC6; + u8 unkC8; + u8 unkC9; + u8 unkCA; + u8 fillCB; + u8 *unkCC; + struct UnkTextStruct2 unkD0[4]; + u32 unk130; + u32 unk134; +}; + +extern struct unkStruct_203B290 *gUnknown_203B290; + +bool8 CreateWigglytuffShop(bool32 isAsleep) +{ + char *string; + struct OpenedFile *file; + + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + gUnknown_203B290 = MemoryAlloc(sizeof(struct unkStruct_203B290), 8); + gUnknown_203B290->menuAction1 = 0; + gUnknown_203B290->menuAction2 = 0; + gUnknown_203B290->isAsleep = isAsleep; + CopyYellowMonsterNametoBuffer(gUnknown_202E5D8,MONSTER_WIGGLYTUFF); + CopyYellowMonsterNametoBuffer(gUnknown_202E1C8,MONSTER_WIGGLYTUFF); + string = GetMonSpecies(MONSTER_WIGGLYTUFF); + strcpy(gUnknown_202E1C8 - 0x50, string); + if (gUnknown_203B290->isAsleep == TRUE) { + gUnknown_203B290->unkCC = NULL; + } + else { + gUnknown_203B290->unkCC = (u8 *)&gUnknown_203B290->faceFile; + } + file = GetDialogueSpriteDataPtr(MONSTER_WIGGLYTUFF); + gUnknown_203B290->faceFile = file; + gUnknown_203B290->faceData = file->data; + gUnknown_203B290->unkC8 = 0; + gUnknown_203B290->unkC9 = 0; + gUnknown_203B290->unkCA = 0; + gUnknown_203B290->unkC4 = 2; + gUnknown_203B290->unkC6 = 8; + UpdateWigglytuffState(0); + return TRUE; +} + +u32 sub_8021C5C(void) +{ + switch(gUnknown_203B290->state) + { + case 0: + case 1: + sub_8022460(); + break; + case 9: + case 10: + sub_8022538(); + break; + case 0xb: + sub_80225C8(); + break; + case 0x11: + sub_80224D4(); + break; + case 0xd: + sub_80226F0(); + break; + case 0xe: + sub_8022790(); + break; + case 0x10: + sub_8022668(); + break; + case 0x16: + case 0x17: + sub_8022684(); + break; + case 4: + return 3; + default: + sub_80226CC(); + break; + } + return 0; +} + +void sub_8021D1C(void) +{ + if(gUnknown_203B290) + { + CloseFile(gUnknown_203B290->faceFile); + MemoryFree(gUnknown_203B290); + gUnknown_203B290 = NULL; + } +} + +void UpdateWigglytuffState(s32 newState) +{ + gUnknown_203B290->state = newState; + sub_8021D5C(); + UpdateWigglytuffDialogue(); +} + +void sub_8021D5C(void) +{ + s32 index; + + sub_8006518(gUnknown_203B290->unkD0); + switch(gUnknown_203B290->state) + { + case 0x9: + case 0xA: + gUnknown_203B290->unkD0[0] = gUnknown_80DC534; + gUnknown_203B290->unkD0[2] = gUnknown_80DC534; + gUnknown_203B290->unkD0[1] = gUnknown_80DC564; + break; + case 0xB: + gUnknown_203B290->unkD0[2] = gUnknown_80DC54C; + break; + break; + default: + for(index = 0; index < 4; index++) + { + gUnknown_203B290->unkD0[index] = gUnknown_80DC534; + } + break; + + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B290->unkD0, 1, 1); +} + +void UpdateWigglytuffDialogue(void) +{ + char *string; + struct unkStruct_8092638 uStack_14; + + switch(gUnknown_203B290->state) + { + case 0: + sub_80222C8(); + sub_8014248(gWigglytuffDialogue[gUnknown_203B290->isAsleep][0],0,gUnknown_203B290->menuAction1,gUnknown_203B290->unk1C,gUnknown_203B290->unk5C,4,0,gUnknown_203B290->unkCC,0xc); + break; + case 1: + sub_80222C8(); + sub_8014248(gWigglytuffDialogue[gUnknown_203B290->isAsleep][1],0,gUnknown_203B290->menuAction1,gUnknown_203B290->unk1C,gUnknown_203B290->unk5C,4,0,gUnknown_203B290->unkCC,0xc); + break; + case 7: + gUnknown_203B290->fallbackState = 9; + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][3],0,gUnknown_203B290->unkCC,0x10d); + break; + case 8: + gUnknown_203B290->fallbackState = 10; + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][4],0,gUnknown_203B290->unkCC,0x10d); + break; + case 2: + gUnknown_203B290->fallbackState = 1; + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][19],0,gUnknown_203B290->unkCC,0x10d); + break; + case 3: + gUnknown_203B290->fallbackState = 4; + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][2],0,gUnknown_203B290->unkCC,0x30d); + break; + default: + break; + case 5: + gUnknown_203B290->fallbackState = 3; + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][8],0,gUnknown_203B290->unkCC,0x10d); + break; + case 6: + gUnknown_203B290->fallbackState = 10; + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][9],0,gUnknown_203B290->unkCC,0x10d); + break; + case 0x12: + gUnknown_203B290->fallbackState = 3; + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][10],0,gUnknown_203B290->unkCC,0x10d); + break; + case 0x13: + gUnknown_203B290->fallbackState = 10; + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][11],0,gUnknown_203B290->unkCC,0x10d); + break; + case 9: + sub_80211AC(2,3); + DrawTeamMoneyBox(1); + break; + case 10: + sub_8021354(1); + DrawTeamMoneyBox(1); + break; + case 0xb: + sub_8021494(); + DrawTeamMoneyBox(1); + sub_8022380(); + sub_8012D60(&gUnknown_203B290->unk6C,gUnknown_203B290->unk1C,0,gUnknown_203B290->unk5C, gUnknown_203B290->menuAction2,2); + break; + case 0x11: + sub_8022420(); + sub_8092578(gUnknown_202E628,gUnknown_203B290->chosenFriendArea,0); + gUnknown_202DE30[0] = gUnknown_203B290->friendAreaPrice; + sub_8014248(gWigglytuffDialogue[gUnknown_203B290->isAsleep][5],0,5,gUnknown_203B290->unk1C,0,4,0,gUnknown_203B290->unkCC,0xc); + break; + case 0x10: + sub_8021774(gUnknown_203B290->chosenFriendArea,0,2); + break; + case 0xc: + gUnknown_203B290->fallbackState = 0xd; + sub_8092578(gUnknown_202E628,gUnknown_203B290->chosenFriendArea,0); + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][6],0,gUnknown_203B290->unkCC,0x10d); + break; + case 0xd: + gUnknown_203B290->fallbackState = 0xe; + PlaySound(0x25b); + gUnknown_203B290->unk130 = 1; + break; + case 0xe: + gUnknown_203B290->fallbackState = 0xf; + gUnknown_203B290->unk134 = 0x1e; + break; + case 0xf: + if (sub_8021700(2) != 0) { + sub_80213A0(); + gUnknown_203B290->fallbackState = 0x12; + } + else { + gUnknown_203B290->fallbackState = 8; + } + PlaySound(0xce); + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][7],0,gUnknown_203B290->unkCC,0x10d); + break; + case 0x14: + gUnknown_203B290->fallbackState = 0x16; + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][12],0,gUnknown_203B290->unkCC,0x10d); + break; + case 0x15: + gUnknown_203B290->fallbackState = 0x17; + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][13],0,gUnknown_203B290->unkCC,0x10d); + break; + case 0x16: + sub_8023144(0,3,0,10); + break; + case 0x17: + sub_8023354(1); + break; + case 0x18: + sub_8092638(gUnknown_203B290->chosenFriendArea,&uStack_14,0,0); + if (uStack_14.unk4 != 0) { + gUnknown_203B290->fallbackState = 0x19; + } + else + { + switch(GetFriendAreaUnlockCondition(gUnknown_203B290->chosenFriendArea)) + { + case UNLOCK_SHOP_POST_GAME: + if (sub_80023E4(6) != 0) { + gUnknown_203B290->fallbackState = 0x15; + } + else { + gUnknown_203B290->fallbackState = 0x1a; + } + break; + case UNLOCK_WONDER_MAIL: + gUnknown_203B290->fallbackState = 0x1b; + break; + case UNLOCK_LEGENDARY_REQUEST: + gUnknown_203B290->fallbackState = 0x1c; + break; + default: + gUnknown_203B290->fallbackState = 0x15; + break; + } + } + string = GetMonSpecies(gUnknown_203B290->chosenSpecies); + strcpy(gAvailablePokemonNames,string); + sub_8092578(gUnknown_202E628,gUnknown_203B290->chosenFriendArea,0); + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][14],0,gUnknown_203B290->unkCC,0x10d); + break; + case 0x19: + gUnknown_203B290->fallbackState = 0x15; + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][15],0,gUnknown_203B290->unkCC,0x10d); + break; + case 0x1a: + gUnknown_203B290->fallbackState = 0x15; + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][16],0,gUnknown_203B290->unkCC,0x10d); + break; + case 0x1b: + gUnknown_203B290->fallbackState = 0x15; + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][17],0,gUnknown_203B290->unkCC,0x10d); + break; + case 0x1c: + gUnknown_203B290->fallbackState = 0x15; + sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][18],0,gUnknown_203B290->unkCC,0x10d); + break; + } +} + +void sub_80222C8(void) +{ + s32 i; + s32 index = 0; + MemoryFill16(gUnknown_203B290->unk5C, 0, sizeof(gUnknown_203B290->unk5C)); + gUnknown_203B290->unk1C[index].text = *gUnknown_80D4978; + gUnknown_203B290->unk1C[index].menuAction = 2; + index++; + gUnknown_203B290->unk1C[index].text = *gWigglytuffCheck; + gUnknown_203B290->unk1C[index].menuAction = 3; + index++; + gUnknown_203B290->unk1C[index].text = *gUnknown_80D4970; + gUnknown_203B290->unk1C[index].menuAction = 4; + index++; + gUnknown_203B290->unk1C[index].text = *gUnknown_80D4934; + gUnknown_203B290->unk1C[index].menuAction = 1; + index++; + gUnknown_203B290->unk1C[index].text = NULL; + gUnknown_203B290->unk1C[index].menuAction = 1; + + for(i = 0; i < index; i++) + { + if(gUnknown_203B290->unk5C[i] == 0 && gUnknown_203B290->unk1C[i].menuAction == gUnknown_203B290->menuAction1) + return; + } + for(i = 0; i < index; i++) + { + if(gUnknown_203B290->unk5C[i] == 0) + { + gUnknown_203B290->menuAction1 = gUnknown_203B290->unk1C[i].menuAction; + break; + } + } +} + +void sub_8022380(void) +{ + s32 i; + s32 index = 0; + MemoryFill16(gUnknown_203B290->unk5C, 0, sizeof(gUnknown_203B290->unk5C)); + gUnknown_203B290->unk1C[index].text = *gUnknown_80D4978; + gUnknown_203B290->unk1C[index].menuAction = 2; + index++; + gUnknown_203B290->unk1C[index].text = *gUnknown_80D4970; + gUnknown_203B290->unk1C[index].menuAction = 4; + index++; + gUnknown_203B290->unk1C[index].text = NULL; + gUnknown_203B290->unk1C[index].menuAction = 1; + + for(i = 0; i < index; i++) + { + if(gUnknown_203B290->unk5C[i] == 0 && gUnknown_203B290->unk1C[i].menuAction == gUnknown_203B290->menuAction2) + return; + } + for(i = 0; i < index; i++) + { + if(gUnknown_203B290->unk5C[i] == 0) + { + gUnknown_203B290->menuAction2 = gUnknown_203B290->unk1C[i].menuAction; + break; + } + } +} + +void sub_8022420(void) +{ + s32 index = 0; + MemoryFill16(gUnknown_203B290->unk5C, 0, sizeof(gUnknown_203B290->unk5C)); + gUnknown_203B290->unk1C[index].text = *gUnknown_80D4920; + gUnknown_203B290->unk1C[index].menuAction = 5; + index++; + gUnknown_203B290->unk1C[index].text = *gUnknown_80D4928; + gUnknown_203B290->unk1C[index].menuAction = 6; + index++; + gUnknown_203B290->unk1C[index].text = NULL; + gUnknown_203B290->unk1C[index].menuAction = 1; +} + +void sub_8022460(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) + { + if (menuAction != 1) { + gUnknown_203B290->menuAction1 = menuAction; + } + switch(menuAction) + { + case 2: + if (sub_8021700(2) != 0) { + UpdateWigglytuffState(5); + } + else { + UpdateWigglytuffState(7); + } + break; + case 3: + UpdateWigglytuffState(0x14); + break; + case 4: + UpdateWigglytuffState(2); + break; + case 1: + UpdateWigglytuffState(3); + break; + } + } +} + +void sub_80224D4(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + switch(menuAction) + { + case 5: + gTeamInventory_203B460->teamMoney -= gUnknown_203B290->friendAreaPrice; + UnlockFriendArea(gUnknown_203B290->chosenFriendArea); + PlaySound(0x14C); + UpdateWigglytuffState(0xC); + break; + case 1: + case 6: + UpdateWigglytuffState(0xA); + break; + } + } +} + +void sub_8022538(void) +{ + switch(sub_8021274(1)) + { + case 3: + gUnknown_203B290->chosenFriendArea = sub_802132C(); + gUnknown_203B290->friendAreaPrice = GetFriendAreaPrice(gUnknown_203B290->chosenFriendArea); + UpdateWigglytuffState(0xB); + break; + case 4: + gUnknown_203B290->chosenFriendArea = sub_802132C(); + gUnknown_203B290->friendAreaPrice = GetFriendAreaPrice(gUnknown_203B290->chosenFriendArea); + UpdateWigglytuffState(0x10); + break; + case 0: + break; + case 2: + sub_80213A0(); + UpdateWigglytuffState(1); + break; + case 1: + default: + DrawTeamMoneyBox(1); + break; + } +} + +void sub_80225C8(void) +{ + s32 menuAction = 0; + sub_8021274(0); + if(sub_8012FD8(&gUnknown_203B290->unk6C) == 0) + { + sub_8013114(&gUnknown_203B290->unk6C, &menuAction); + if(menuAction != 1) gUnknown_203B290->menuAction2 = menuAction; + } + switch(menuAction) + { + case 2: + if(gTeamInventory_203B460->teamMoney == 0) + { + UpdateWigglytuffState(6); + } + else if(gUnknown_203B290->friendAreaPrice > gTeamInventory_203B460->teamMoney) + { + UpdateWigglytuffState(0x13); + } + else + { + UpdateWigglytuffState(0x11); + } + break; + case 4: + UpdateWigglytuffState(0x10); + break; + case 1: + UpdateWigglytuffState(10); + break; + } +} + +void sub_8022668(void) +{ + switch(sub_80217EC()) + { + case 2: + case 3: + sub_8021830(); + UpdateWigglytuffState(0xA); + break; + case 0: + case 1: + break; + } +} + +void sub_8022684(void) +{ + switch(sub_8023278(1)) + { + case 3: + gUnknown_203B290->chosenSpecies = sub_802331C(); + gUnknown_203B290->chosenFriendArea = GetFriendArea(gUnknown_203B290->chosenSpecies); + UpdateWigglytuffState(0x18); + break; + case 2: + sub_80233A0(); + UpdateWigglytuffState(1); + break; + case 0: + case 1: + break; + } +} + +void sub_80226CC(void) +{ + s32 temp; + + if (sub_80144A4(&temp) == 0) + { + UpdateWigglytuffState(gUnknown_203B290->fallbackState); + } +} From d5a7e0ede22a21ece6f1c77156750af81346ab73 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 24 Jul 2023 08:33:16 -0700 Subject: [PATCH 13/26] finish decomping wigglytuff_shop thanks to jiang --- asm/wigglytuff_shop.s | 104 ---------- include/wigglytuff_shop.h | 35 ++++ ld_script.txt | 1 - src/code_8023144.c | 232 +++++++++++---------- src/wigglytuff_shop.c | 417 ++++++++++++++++++++------------------ sym_ewram2.txt | 3 +- 6 files changed, 370 insertions(+), 422 deletions(-) create mode 100644 include/wigglytuff_shop.h diff --git a/asm/wigglytuff_shop.s b/asm/wigglytuff_shop.s index 2c0eea2c1..5bab66cd5 100644 --- a/asm/wigglytuff_shop.s +++ b/asm/wigglytuff_shop.s @@ -5,108 +5,4 @@ .text - thumb_func_start sub_80226F0 -sub_80226F0: - push {r4,lr} - sub sp, 0x4 - mov r1, sp - movs r2, 0 - movs r0, 0x80 - strb r0, [r1] - strb r0, [r1, 0x1] - movs r0, 0x10 - strb r0, [r1, 0x2] - strb r2, [r1, 0x3] - bl sub_8099B94 - lsls r0, 24 - cmp r0, 0 - bne _08022782 - ldr r0, _08022728 - ldr r0, [r0] - movs r1, 0x98 - lsls r1, 1 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0x4 - bhi _0802275C - lsls r0, 2 - ldr r1, _0802272C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08022728: .4byte gUnknown_203B290 -_0802272C: .4byte _08022730 - .align 2, 0 -_08022730: - .4byte _0802275C - .4byte _08022744 - .4byte _08022750 - .4byte _08022744 - .4byte _08022750 -_08022744: - movs r0, 0x5 - movs r1, 0x2 - ldr r2, [sp] - bl sub_8099AFC - b _08022772 -_08022750: - movs r0, 0x5 - movs r1, 0x2 - ldr r2, [sp] - bl sub_8099A5C - b _08022772 -_0802275C: - ldr r4, _0802278C - ldr r0, [r4] - ldr r0, [r0, 0x8] - bl UpdateWigglytuffState - ldr r0, [r4] - movs r1, 0x98 - lsls r1, 1 - adds r0, r1 - movs r1, 0 - str r1, [r0] -_08022772: - ldr r0, _0802278C - ldr r1, [r0] - movs r0, 0x98 - lsls r0, 1 - adds r1, r0 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_08022782: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802278C: .4byte gUnknown_203B290 - thumb_func_end sub_80226F0 - - thumb_func_start sub_8022790 -sub_8022790: - push {lr} - ldr r0, _080227A8 - ldr r2, [r0] - movs r0, 0x9A - lsls r0, 1 - adds r1, r2, r0 - ldr r0, [r1] - cmp r0, 0 - beq _080227AC - subs r0, 0x1 - str r0, [r1] - b _080227B2 - .align 2, 0 -_080227A8: .4byte gUnknown_203B290 -_080227AC: - ldr r0, [r2, 0x8] - bl UpdateWigglytuffState -_080227B2: - pop {r0} - bx r0 - thumb_func_end sub_8022790 - .align 2,0 diff --git a/include/wigglytuff_shop.h b/include/wigglytuff_shop.h new file mode 100644 index 000000000..b39303de6 --- /dev/null +++ b/include/wigglytuff_shop.h @@ -0,0 +1,35 @@ +#ifndef GUARD_WIGGLYTUFF_SHOP_H +#define GUARD_WIGGLYTUFF_SHOP_H + +struct WigglytuffShop +{ + // size: 0x138 + bool32 isAsleep; + s32 state; + s32 fallbackState; + s32 friendAreaPrice; + u8 chosenFriendArea; + s16 chosenSpecies; + u32 menuAction1; + u32 menuAction2; + struct MenuItem unk1C[8]; + u16 unk5C[0x8]; + struct MenuStruct unk6C; + /* 0xBC */ struct OpenedFile *faceFile; + /* 0xC0 */ u8 *faceData; + u16 unkC4; + u16 unkC6; + u8 unkC8; + u8 unkC9; + u8 unkCA; + u8 fillCB; + u8 *unkCC; + struct UnkTextStruct2 unkD0[4]; + u32 unk130; + u32 unk134; +}; + +extern struct WigglytuffShop *gWigglytuffShop; + + +#endif // GUARD_WIGGLYTUFF_SHOP_H diff --git a/ld_script.txt b/ld_script.txt index fe02fbcd6..d42934a34 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -119,7 +119,6 @@ SECTIONS { src/code_801EE10_mid.o(.text); asm/code_801EE10_mid.o(.text); src/wigglytuff_shop.o(.text); - asm/wigglytuff_shop.o(.text); asm/code_8023144.o(.text); src/code_8023144.o(.text); asm/code_801EE10_1.o(.text); diff --git a/src/code_8023144.c b/src/code_8023144.c index 7a5c4c72d..a7a3e2678 100644 --- a/src/code_8023144.c +++ b/src/code_8023144.c @@ -1,5 +1,6 @@ #include "constants/input.h" #include "global.h" +#include "constants/colors.h" #include "constants/iq_skill.h" #include "memory.h" #include "menu.h" @@ -343,70 +344,70 @@ bool8 sub_8023144(s32 param_1, s32 index, struct UnkTextStruct2_sub *sub, u32 pa u8 sub_8023278(u8 param_1) { - s32 iVar3; - u32 temp; - - if (param_1 == 0) { - sub_8013660(&gUnknown_3001B5C->input); - return 0; - } - switch(GetKeyPress(&gUnknown_3001B5C->input)) - { - case INPUT_B_BUTTON: - PlayMenuSoundEffect(1); - return 2; - case INPUT_A_BUTTON: - PlayMenuSoundEffect(0); - return 3; - case INPUT_SELECT_BUTTON: - PlayMenuSoundEffect(5); - if (temp = gUnknown_3001B5C->unk4, iVar3 = 1, temp < 2) { - iVar3 = temp + 1; - } - gUnknown_3001B5C->unk4 = iVar3; - sub_80236A4(); - break; - default: - if (sub_80138B8(&gUnknown_3001B5C->input, 1) == 0) { - return 0; - } - break; - } - sub_8023420(); - sub_80234BC(); - return 1; + s32 iVar3; + u32 temp; + + if (param_1 == 0) { + sub_8013660(&gUnknown_3001B5C->input); + return 0; + } + switch(GetKeyPress(&gUnknown_3001B5C->input)) + { + case INPUT_B_BUTTON: + PlayMenuSoundEffect(1); + return 2; + case INPUT_A_BUTTON: + PlayMenuSoundEffect(0); + return 3; + case INPUT_SELECT_BUTTON: + PlayMenuSoundEffect(5); + if (temp = gUnknown_3001B5C->unk4, iVar3 = 1, temp < 2) { + iVar3 = temp + 1; + } + gUnknown_3001B5C->unk4 = iVar3; + sub_80236A4(); + break; + default: + if (sub_80138B8(&gUnknown_3001B5C->input, 1) == 0) { + return 0; + } + break; + } + sub_8023420(); + sub_80234BC(); + return 1; } s16 sub_802331C(void) { - return gUnknown_3001B5C->unkC[gUnknown_3001B5C->input.unk1E * gUnknown_3001B5C->input.unk1C + gUnknown_3001B5C->input.menuIndex]; + return gUnknown_3001B5C->unkC[gUnknown_3001B5C->input.unk1E * gUnknown_3001B5C->input.unk1C + gUnknown_3001B5C->input.menuIndex]; } void sub_8023354(u8 param_1) { - ResetUnusedInputStruct(); - sub_800641C(gUnknown_3001B5C->unk398,0,0); - sub_8013984(&gUnknown_3001B5C->input); - sub_8023420(); - sub_80234BC(); - if (param_1 != 0) { - AddMenuCursorSprite(&gUnknown_3001B5C->input); - } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_3001B5C->unk398,0,0); + sub_8013984(&gUnknown_3001B5C->input); + sub_8023420(); + sub_80234BC(); + if (param_1 != 0) { + AddMenuCursorSprite(&gUnknown_3001B5C->input); + } } void sub_80233A0(void) { - if (gUnknown_3001B5C != NULL) { - gUnknown_203B298 = gUnknown_3001B5C->unk4; - gUnknown_203B29C = gUnknown_3001B5C->input.menuIndex; - gUnknown_203B29E = gUnknown_3001B5C->input.unk1E; - gUnknown_3001B5C->unk398[gUnknown_3001B5C->unk390] = gUnknown_80DC904; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_3001B5C->unk398,1,1); - MemoryFree(gUnknown_3001B5C); - gUnknown_3001B5C = NULL; - } + if (gUnknown_3001B5C != NULL) { + gUnknown_203B298 = gUnknown_3001B5C->unk4; + gUnknown_203B29C = gUnknown_3001B5C->input.menuIndex; + gUnknown_203B29E = gUnknown_3001B5C->input.unk1E; + gUnknown_3001B5C->unk398[gUnknown_3001B5C->unk390] = gUnknown_80DC904; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_3001B5C->unk398,1,1); + MemoryFree(gUnknown_3001B5C); + gUnknown_3001B5C = NULL; + } } NAKED @@ -490,7 +491,7 @@ extern u8 gUnknown_80DC934[]; struct unkStruct_8092638 { u32 unk0; - u8 unk4; + bool8 hasFriendArea; u32 unk5; }; extern void sub_8092638(u8,struct unkStruct_8092638 *, u32, u32); @@ -505,82 +506,77 @@ void sprintfStatic(char *buffer, const char *text, ...); void sub_80234BC(void) { - u8 cVar2; - u32 y; - s32 uVar3; - s32 iVar4; - s32 species; - u32 color; - s32 index; - u8 buffer2 [256]; - u8 buffer1 [100]; - struct unkStruct_8092638 auStack_2c; - - sub_8008C54(gUnknown_3001B5C->unk390); - sub_80073B8(gUnknown_3001B5C->unk390); - xxx_call_draw_string(10,0,gUnknown_80DC934,gUnknown_3001B5C->unk390,0); // Pokemon - sub_8012BC4(gUnknown_3001B5C->unk3F8[2] * 8 + 4,0, - gUnknown_3001B5C->input.unk1E + 1,2,7,gUnknown_3001B5C->unk390); - for(index = 0; index < gUnknown_3001B5C->input.unk1A; index++) - { - y = sub_8013800(&gUnknown_3001B5C->input,index); - species = gUnknown_3001B5C->unkC[(gUnknown_3001B5C->input.unk1E * gUnknown_3001B5C->input.unk1C + index)]; - sub_8092638(GetFriendArea(species),&auStack_2c,0,0); - color = 7; - if (auStack_2c.unk4 != 0) { - color = HasRecruitedMon(species) ? 5 : 4; - } - iVar4 = GetDexInternalNo(species,0); - cVar2 = (iVar4 % 10) + 0x30; - sub_8012C60(0x14,y,cVar2,color,gUnknown_3001B5C->unk390); - if (9 < iVar4) { - iVar4 /= 10; - cVar2 = (iVar4 % 10) + 0x30; - sub_8012C60(0xd,y,cVar2,color,gUnknown_3001B5C->unk390); - if (9 < iVar4) { - uVar3 = iVar4 / 10; - cVar2 = (uVar3 % 10) + 0x30; - sub_8012C60(6,y,cVar2,color,gUnknown_3001B5C->unk390); + u8 cVar2; + u32 y; + s32 uVar3; + s32 iVar4; + s32 species; + u32 color; + s32 index; + u8 buffer2 [256]; + u8 buffer1 [100]; + struct unkStruct_8092638 auStack_2c; + + sub_8008C54(gUnknown_3001B5C->unk390); + sub_80073B8(gUnknown_3001B5C->unk390); + xxx_call_draw_string(10,0,gUnknown_80DC934,gUnknown_3001B5C->unk390,0); // Pokemon + sub_8012BC4(gUnknown_3001B5C->unk3F8[2] * 8 + 4,0, + gUnknown_3001B5C->input.unk1E + 1,2,7,gUnknown_3001B5C->unk390); + for(index = 0; index < gUnknown_3001B5C->input.unk1A; index++) + { + y = sub_8013800(&gUnknown_3001B5C->input,index); + species = gUnknown_3001B5C->unkC[(gUnknown_3001B5C->input.unk1E * gUnknown_3001B5C->input.unk1C + index)]; + sub_8092638(GetFriendArea(species),&auStack_2c,0,0); + color = COLOR_WHITE_2; + if (auStack_2c.hasFriendArea) { + color = HasRecruitedMon(species) ? COLOR_CYAN : COLOR_GREEN; } - } - sub_808D930(buffer1,species); - sprintfStatic(buffer2,gUnknown_80DC93C,color,buffer1); // {COLOR_2}%c%s - xxx_call_draw_string(0x24,y,buffer2,gUnknown_3001B5C->unk390,0); - } - sub_80073E0(gUnknown_3001B5C->unk390); + iVar4 = GetDexInternalNo(species,0); + cVar2 = (iVar4 % 10) + 0x30; + sub_8012C60(0x14,y,cVar2,color,gUnknown_3001B5C->unk390); + if (9 < iVar4) { + iVar4 /= 10; + cVar2 = (iVar4 % 10) + 0x30; + sub_8012C60(0xd,y,cVar2,color,gUnknown_3001B5C->unk390); + if (9 < iVar4) { + uVar3 = iVar4 / 10; + cVar2 = (uVar3 % 10) + 0x30; + sub_8012C60(6,y,cVar2,color,gUnknown_3001B5C->unk390); + } + } + sub_808D930(buffer1,species); + sprintfStatic(buffer2,gUnknown_80DC93C,color,buffer1); // {COLOR_2}%c%s + xxx_call_draw_string(0x24,y,buffer2,gUnknown_3001B5C->unk390,0); + } + sub_80073E0(gUnknown_3001B5C->unk390); } u32 sub_80236A4(void) { - s16 index_s32; - int index; - s32 temp; - - gUnknown_3001B5C->unk8 = 0; - for(index = 0; index < 0x1a8; index++) - { - index_s32 = index; - if ((sub_8098134(index_s32)) && - (index_s32 == GetBaseSpeciesNoUnown(index_s32))) { - temp = gUnknown_3001B5C->unk8; - gUnknown_3001B5C->unkC[gUnknown_3001B5C->unk8] = index; - gUnknown_3001B5C->unk8 = temp + 1; + s32 index; + + gUnknown_3001B5C->unk8 = 0; + for(index = 0; index < 0x1a8; index++) + { + if ((sub_8098134((s16)index)) && + ((s16)index == GetBaseSpeciesNoUnown(index))) { + gUnknown_3001B5C->unkC[gUnknown_3001B5C->unk8++] = index; + } } - } - sub_8023730(); - return gUnknown_3001B5C->unk8; + sub_8023730(); + return gUnknown_3001B5C->unk8; } bool8 sub_8023704(u8 unused) { - s32 index; - - for(index = 0; index < 0x1a8; index++) - { - if (sub_8098134((s16)index)) - return FALSE; - } - return TRUE; + s32 index; + + for(index = 0; index < 0x1a8; index++) + { + if (sub_8098134((s16)index)) + return FALSE; + } + return TRUE; } void sub_8023730(void) diff --git a/src/wigglytuff_shop.c b/src/wigglytuff_shop.c index c8f38e672..02a9989c9 100644 --- a/src/wigglytuff_shop.c +++ b/src/wigglytuff_shop.c @@ -9,13 +9,22 @@ #include "memory.h" #include "menu_input.h" #include "friend_area.h" +#include "wigglytuff_shop.h" struct unkStruct_8092638 { u32 unk0; - u8 unk4; + bool8 hasFriendArea; u32 unk5; }; + +extern struct UnkTextStruct2 gUnknown_80DC534; +extern struct UnkTextStruct2 gUnknown_80DC564; +extern struct UnkTextStruct2 gUnknown_80DC54C; +extern struct UnkTextStruct2 gUnknown_80DC534; + +EWRAM_DATA_2 struct WigglytuffShop *gWigglytuffShop = {0}; + extern u8 gUnknown_202E628[]; extern u32 gUnknown_202DE30[2]; extern u8 gUnknown_202E5D8[]; @@ -30,15 +39,10 @@ extern u8 *gUnknown_80D4934[]; extern u8 *gUnknown_80D4970[]; extern u8 *gUnknown_80D4978[]; -extern struct UnkTextStruct2 gUnknown_80DC534; -extern struct UnkTextStruct2 gUnknown_80DC564; -extern struct UnkTextStruct2 gUnknown_80DC54C; -extern struct UnkTextStruct2 gUnknown_80DC534; s32 sub_80144A4(s32 *); u8 sub_8021700(u32); void sub_8092578(u8 *buffer, u8 index, u8 r2); -void sub_80222C8(void); extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u16 *, u32, u32,u8 *r5, u32); extern void sub_80141B4(const u8 *, u32, u8*, u32); extern void DrawTeamMoneyBox(u32); @@ -61,54 +65,28 @@ void sub_8023354(u8 param_1); extern bool8 sub_80023E4(u32); extern void sub_8022420(void); extern void sub_8092638(u8,struct unkStruct_8092638 *, u32, u32); +extern u8 sub_8099B94(void); +extern void sub_8099AFC(u32, u32, u32); +extern void sub_8099A5C(u32, u32, u32); extern u32 sub_8023278(u32); void sub_80233A0(void); s16 sub_802331C(void); -extern void sub_8022460(void); -extern void sub_8022538(void); -extern void sub_80225C8(void); -extern void sub_80224D4(void); -extern void sub_80226F0(void); -extern void sub_8022790(void); -extern void sub_8022668(void); -extern void sub_8022684(void); -extern void sub_80226CC(void); -void UpdateWigglytuffState(s32); +void sub_8022460(void); +void sub_8022538(void); +void sub_80225C8(void); +void sub_80224D4(void); +void sub_80226F0(void); +void sub_8022790(void); +void sub_8022668(void); +void sub_8022684(void); +void sub_80226CC(void); +void sub_80222C8(void); +void SetWigglytuffState(s32); void sub_8021D5C(void); void UpdateWigglytuffDialogue(void); -struct unkStruct_203B290 -{ - // size: 0x138 - bool32 isAsleep; - s32 state; - s32 fallbackState; - s32 friendAreaPrice; - u8 chosenFriendArea; - s16 chosenSpecies; - u32 menuAction1; - u32 menuAction2; - struct MenuItem unk1C[8]; - u16 unk5C[0x8]; - struct MenuStruct unk6C; - /* 0xBC */ struct OpenedFile *faceFile; - /* 0xC0 */ u8 *faceData; - u16 unkC4; - u16 unkC6; - u8 unkC8; - u8 unkC9; - u8 unkCA; - u8 fillCB; - u8 *unkCC; - struct UnkTextStruct2 unkD0[4]; - u32 unk130; - u32 unk134; -}; - -extern struct unkStruct_203B290 *gUnknown_203B290; - bool8 CreateWigglytuffShop(bool32 isAsleep) { char *string; @@ -116,35 +94,35 @@ bool8 CreateWigglytuffShop(bool32 isAsleep) ResetUnusedInputStruct(); sub_800641C(0, 1, 1); - gUnknown_203B290 = MemoryAlloc(sizeof(struct unkStruct_203B290), 8); - gUnknown_203B290->menuAction1 = 0; - gUnknown_203B290->menuAction2 = 0; - gUnknown_203B290->isAsleep = isAsleep; + gWigglytuffShop = MemoryAlloc(sizeof(struct WigglytuffShop), 8); + gWigglytuffShop->menuAction1 = 0; + gWigglytuffShop->menuAction2 = 0; + gWigglytuffShop->isAsleep = isAsleep; CopyYellowMonsterNametoBuffer(gUnknown_202E5D8,MONSTER_WIGGLYTUFF); CopyYellowMonsterNametoBuffer(gUnknown_202E1C8,MONSTER_WIGGLYTUFF); string = GetMonSpecies(MONSTER_WIGGLYTUFF); strcpy(gUnknown_202E1C8 - 0x50, string); - if (gUnknown_203B290->isAsleep == TRUE) { - gUnknown_203B290->unkCC = NULL; + if (gWigglytuffShop->isAsleep == TRUE) { + gWigglytuffShop->unkCC = NULL; } else { - gUnknown_203B290->unkCC = (u8 *)&gUnknown_203B290->faceFile; + gWigglytuffShop->unkCC = (u8 *)&gWigglytuffShop->faceFile; } file = GetDialogueSpriteDataPtr(MONSTER_WIGGLYTUFF); - gUnknown_203B290->faceFile = file; - gUnknown_203B290->faceData = file->data; - gUnknown_203B290->unkC8 = 0; - gUnknown_203B290->unkC9 = 0; - gUnknown_203B290->unkCA = 0; - gUnknown_203B290->unkC4 = 2; - gUnknown_203B290->unkC6 = 8; - UpdateWigglytuffState(0); + gWigglytuffShop->faceFile = file; + gWigglytuffShop->faceData = file->data; + gWigglytuffShop->unkC8 = 0; + gWigglytuffShop->unkC9 = 0; + gWigglytuffShop->unkCA = 0; + gWigglytuffShop->unkC4 = 2; + gWigglytuffShop->unkC6 = 8; + SetWigglytuffState(0); return TRUE; } u32 sub_8021C5C(void) { - switch(gUnknown_203B290->state) + switch(gWigglytuffShop->state) { case 0: case 1: @@ -184,17 +162,17 @@ u32 sub_8021C5C(void) void sub_8021D1C(void) { - if(gUnknown_203B290) + if(gWigglytuffShop) { - CloseFile(gUnknown_203B290->faceFile); - MemoryFree(gUnknown_203B290); - gUnknown_203B290 = NULL; + CloseFile(gWigglytuffShop->faceFile); + MemoryFree(gWigglytuffShop); + gWigglytuffShop = NULL; } } -void UpdateWigglytuffState(s32 newState) +void SetWigglytuffState(s32 newState) { - gUnknown_203B290->state = newState; + gWigglytuffShop->state = newState; sub_8021D5C(); UpdateWigglytuffDialogue(); } @@ -203,29 +181,29 @@ void sub_8021D5C(void) { s32 index; - sub_8006518(gUnknown_203B290->unkD0); - switch(gUnknown_203B290->state) + sub_8006518(gWigglytuffShop->unkD0); + switch(gWigglytuffShop->state) { case 0x9: case 0xA: - gUnknown_203B290->unkD0[0] = gUnknown_80DC534; - gUnknown_203B290->unkD0[2] = gUnknown_80DC534; - gUnknown_203B290->unkD0[1] = gUnknown_80DC564; + gWigglytuffShop->unkD0[0] = gUnknown_80DC534; + gWigglytuffShop->unkD0[2] = gUnknown_80DC534; + gWigglytuffShop->unkD0[1] = gUnknown_80DC564; break; case 0xB: - gUnknown_203B290->unkD0[2] = gUnknown_80DC54C; + gWigglytuffShop->unkD0[2] = gUnknown_80DC54C; break; break; default: for(index = 0; index < 4; index++) { - gUnknown_203B290->unkD0[index] = gUnknown_80DC534; + gWigglytuffShop->unkD0[index] = gUnknown_80DC534; } break; } ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B290->unkD0, 1, 1); + sub_800641C(gWigglytuffShop->unkD0, 1, 1); } void UpdateWigglytuffDialogue(void) @@ -233,49 +211,49 @@ void UpdateWigglytuffDialogue(void) char *string; struct unkStruct_8092638 uStack_14; - switch(gUnknown_203B290->state) + switch(gWigglytuffShop->state) { case 0: sub_80222C8(); - sub_8014248(gWigglytuffDialogue[gUnknown_203B290->isAsleep][0],0,gUnknown_203B290->menuAction1,gUnknown_203B290->unk1C,gUnknown_203B290->unk5C,4,0,gUnknown_203B290->unkCC,0xc); + sub_8014248(gWigglytuffDialogue[gWigglytuffShop->isAsleep][0],0,gWigglytuffShop->menuAction1,gWigglytuffShop->unk1C,gWigglytuffShop->unk5C,4,0,gWigglytuffShop->unkCC,0xc); break; case 1: sub_80222C8(); - sub_8014248(gWigglytuffDialogue[gUnknown_203B290->isAsleep][1],0,gUnknown_203B290->menuAction1,gUnknown_203B290->unk1C,gUnknown_203B290->unk5C,4,0,gUnknown_203B290->unkCC,0xc); + sub_8014248(gWigglytuffDialogue[gWigglytuffShop->isAsleep][1],0,gWigglytuffShop->menuAction1,gWigglytuffShop->unk1C,gWigglytuffShop->unk5C,4,0,gWigglytuffShop->unkCC,0xc); break; case 7: - gUnknown_203B290->fallbackState = 9; - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][3],0,gUnknown_203B290->unkCC,0x10d); + gWigglytuffShop->fallbackState = 9; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][3],0,gWigglytuffShop->unkCC,0x10d); break; case 8: - gUnknown_203B290->fallbackState = 10; - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][4],0,gUnknown_203B290->unkCC,0x10d); + gWigglytuffShop->fallbackState = 10; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][4],0,gWigglytuffShop->unkCC,0x10d); break; case 2: - gUnknown_203B290->fallbackState = 1; - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][19],0,gUnknown_203B290->unkCC,0x10d); + gWigglytuffShop->fallbackState = 1; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][19],0,gWigglytuffShop->unkCC,0x10d); break; case 3: - gUnknown_203B290->fallbackState = 4; - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][2],0,gUnknown_203B290->unkCC,0x30d); + gWigglytuffShop->fallbackState = 4; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][2],0,gWigglytuffShop->unkCC,0x30d); break; default: break; case 5: - gUnknown_203B290->fallbackState = 3; - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][8],0,gUnknown_203B290->unkCC,0x10d); + gWigglytuffShop->fallbackState = 3; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][8],0,gWigglytuffShop->unkCC,0x10d); break; case 6: - gUnknown_203B290->fallbackState = 10; - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][9],0,gUnknown_203B290->unkCC,0x10d); + gWigglytuffShop->fallbackState = 10; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][9],0,gWigglytuffShop->unkCC,0x10d); break; case 0x12: - gUnknown_203B290->fallbackState = 3; - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][10],0,gUnknown_203B290->unkCC,0x10d); + gWigglytuffShop->fallbackState = 3; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][10],0,gWigglytuffShop->unkCC,0x10d); break; case 0x13: - gUnknown_203B290->fallbackState = 10; - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][11],0,gUnknown_203B290->unkCC,0x10d); + gWigglytuffShop->fallbackState = 10; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][11],0,gWigglytuffShop->unkCC,0x10d); break; case 9: sub_80211AC(2,3); @@ -289,49 +267,49 @@ void UpdateWigglytuffDialogue(void) sub_8021494(); DrawTeamMoneyBox(1); sub_8022380(); - sub_8012D60(&gUnknown_203B290->unk6C,gUnknown_203B290->unk1C,0,gUnknown_203B290->unk5C, gUnknown_203B290->menuAction2,2); + sub_8012D60(&gWigglytuffShop->unk6C,gWigglytuffShop->unk1C,0,gWigglytuffShop->unk5C, gWigglytuffShop->menuAction2,2); break; case 0x11: sub_8022420(); - sub_8092578(gUnknown_202E628,gUnknown_203B290->chosenFriendArea,0); - gUnknown_202DE30[0] = gUnknown_203B290->friendAreaPrice; - sub_8014248(gWigglytuffDialogue[gUnknown_203B290->isAsleep][5],0,5,gUnknown_203B290->unk1C,0,4,0,gUnknown_203B290->unkCC,0xc); + sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0); + gUnknown_202DE30[0] = gWigglytuffShop->friendAreaPrice; + sub_8014248(gWigglytuffDialogue[gWigglytuffShop->isAsleep][5],0,5,gWigglytuffShop->unk1C,0,4,0,gWigglytuffShop->unkCC,0xc); break; case 0x10: - sub_8021774(gUnknown_203B290->chosenFriendArea,0,2); + sub_8021774(gWigglytuffShop->chosenFriendArea,0,2); break; case 0xc: - gUnknown_203B290->fallbackState = 0xd; - sub_8092578(gUnknown_202E628,gUnknown_203B290->chosenFriendArea,0); - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][6],0,gUnknown_203B290->unkCC,0x10d); + gWigglytuffShop->fallbackState = 0xd; + sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0); + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][6],0,gWigglytuffShop->unkCC,0x10d); break; case 0xd: - gUnknown_203B290->fallbackState = 0xe; + gWigglytuffShop->fallbackState = 0xe; PlaySound(0x25b); - gUnknown_203B290->unk130 = 1; + gWigglytuffShop->unk130 = 1; break; case 0xe: - gUnknown_203B290->fallbackState = 0xf; - gUnknown_203B290->unk134 = 0x1e; + gWigglytuffShop->fallbackState = 0xf; + gWigglytuffShop->unk134 = 0x1e; break; case 0xf: if (sub_8021700(2) != 0) { sub_80213A0(); - gUnknown_203B290->fallbackState = 0x12; + gWigglytuffShop->fallbackState = 0x12; } else { - gUnknown_203B290->fallbackState = 8; + gWigglytuffShop->fallbackState = 8; } PlaySound(0xce); - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][7],0,gUnknown_203B290->unkCC,0x10d); + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][7],0,gWigglytuffShop->unkCC,0x10d); break; case 0x14: - gUnknown_203B290->fallbackState = 0x16; - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][12],0,gUnknown_203B290->unkCC,0x10d); + gWigglytuffShop->fallbackState = 0x16; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][12],0,gWigglytuffShop->unkCC,0x10d); break; case 0x15: - gUnknown_203B290->fallbackState = 0x17; - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][13],0,gUnknown_203B290->unkCC,0x10d); + gWigglytuffShop->fallbackState = 0x17; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][13],0,gWigglytuffShop->unkCC,0x10d); break; case 0x16: sub_8023144(0,3,0,10); @@ -340,53 +318,53 @@ void UpdateWigglytuffDialogue(void) sub_8023354(1); break; case 0x18: - sub_8092638(gUnknown_203B290->chosenFriendArea,&uStack_14,0,0); - if (uStack_14.unk4 != 0) { - gUnknown_203B290->fallbackState = 0x19; + sub_8092638(gWigglytuffShop->chosenFriendArea,&uStack_14,0,0); + if (uStack_14.hasFriendArea) { + gWigglytuffShop->fallbackState = 0x19; } else { - switch(GetFriendAreaUnlockCondition(gUnknown_203B290->chosenFriendArea)) + switch(GetFriendAreaUnlockCondition(gWigglytuffShop->chosenFriendArea)) { case UNLOCK_SHOP_POST_GAME: if (sub_80023E4(6) != 0) { - gUnknown_203B290->fallbackState = 0x15; + gWigglytuffShop->fallbackState = 0x15; } else { - gUnknown_203B290->fallbackState = 0x1a; + gWigglytuffShop->fallbackState = 0x1a; } break; case UNLOCK_WONDER_MAIL: - gUnknown_203B290->fallbackState = 0x1b; + gWigglytuffShop->fallbackState = 0x1b; break; case UNLOCK_LEGENDARY_REQUEST: - gUnknown_203B290->fallbackState = 0x1c; + gWigglytuffShop->fallbackState = 0x1c; break; default: - gUnknown_203B290->fallbackState = 0x15; + gWigglytuffShop->fallbackState = 0x15; break; } } - string = GetMonSpecies(gUnknown_203B290->chosenSpecies); + string = GetMonSpecies(gWigglytuffShop->chosenSpecies); strcpy(gAvailablePokemonNames,string); - sub_8092578(gUnknown_202E628,gUnknown_203B290->chosenFriendArea,0); - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][14],0,gUnknown_203B290->unkCC,0x10d); + sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0); + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][14],0,gWigglytuffShop->unkCC,0x10d); break; case 0x19: - gUnknown_203B290->fallbackState = 0x15; - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][15],0,gUnknown_203B290->unkCC,0x10d); + gWigglytuffShop->fallbackState = 0x15; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][15],0,gWigglytuffShop->unkCC,0x10d); break; case 0x1a: - gUnknown_203B290->fallbackState = 0x15; - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][16],0,gUnknown_203B290->unkCC,0x10d); + gWigglytuffShop->fallbackState = 0x15; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][16],0,gWigglytuffShop->unkCC,0x10d); break; case 0x1b: - gUnknown_203B290->fallbackState = 0x15; - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][17],0,gUnknown_203B290->unkCC,0x10d); + gWigglytuffShop->fallbackState = 0x15; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][17],0,gWigglytuffShop->unkCC,0x10d); break; case 0x1c: - gUnknown_203B290->fallbackState = 0x15; - sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][18],0,gUnknown_203B290->unkCC,0x10d); + gWigglytuffShop->fallbackState = 0x15; + sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][18],0,gWigglytuffShop->unkCC,0x10d); break; } } @@ -395,32 +373,32 @@ void sub_80222C8(void) { s32 i; s32 index = 0; - MemoryFill16(gUnknown_203B290->unk5C, 0, sizeof(gUnknown_203B290->unk5C)); - gUnknown_203B290->unk1C[index].text = *gUnknown_80D4978; - gUnknown_203B290->unk1C[index].menuAction = 2; + MemoryFill16(gWigglytuffShop->unk5C, 0, sizeof(gWigglytuffShop->unk5C)); + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4978; + gWigglytuffShop->unk1C[index].menuAction = 2; index++; - gUnknown_203B290->unk1C[index].text = *gWigglytuffCheck; - gUnknown_203B290->unk1C[index].menuAction = 3; + gWigglytuffShop->unk1C[index].text = *gWigglytuffCheck; + gWigglytuffShop->unk1C[index].menuAction = 3; index++; - gUnknown_203B290->unk1C[index].text = *gUnknown_80D4970; - gUnknown_203B290->unk1C[index].menuAction = 4; + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4970; + gWigglytuffShop->unk1C[index].menuAction = 4; index++; - gUnknown_203B290->unk1C[index].text = *gUnknown_80D4934; - gUnknown_203B290->unk1C[index].menuAction = 1; + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4934; + gWigglytuffShop->unk1C[index].menuAction = 1; index++; - gUnknown_203B290->unk1C[index].text = NULL; - gUnknown_203B290->unk1C[index].menuAction = 1; + gWigglytuffShop->unk1C[index].text = NULL; + gWigglytuffShop->unk1C[index].menuAction = 1; for(i = 0; i < index; i++) { - if(gUnknown_203B290->unk5C[i] == 0 && gUnknown_203B290->unk1C[i].menuAction == gUnknown_203B290->menuAction1) + if(gWigglytuffShop->unk5C[i] == 0 && gWigglytuffShop->unk1C[i].menuAction == gWigglytuffShop->menuAction1) return; } for(i = 0; i < index; i++) { - if(gUnknown_203B290->unk5C[i] == 0) + if(gWigglytuffShop->unk5C[i] == 0) { - gUnknown_203B290->menuAction1 = gUnknown_203B290->unk1C[i].menuAction; + gWigglytuffShop->menuAction1 = gWigglytuffShop->unk1C[i].menuAction; break; } } @@ -430,26 +408,26 @@ void sub_8022380(void) { s32 i; s32 index = 0; - MemoryFill16(gUnknown_203B290->unk5C, 0, sizeof(gUnknown_203B290->unk5C)); - gUnknown_203B290->unk1C[index].text = *gUnknown_80D4978; - gUnknown_203B290->unk1C[index].menuAction = 2; + MemoryFill16(gWigglytuffShop->unk5C, 0, sizeof(gWigglytuffShop->unk5C)); + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4978; + gWigglytuffShop->unk1C[index].menuAction = 2; index++; - gUnknown_203B290->unk1C[index].text = *gUnknown_80D4970; - gUnknown_203B290->unk1C[index].menuAction = 4; + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4970; + gWigglytuffShop->unk1C[index].menuAction = 4; index++; - gUnknown_203B290->unk1C[index].text = NULL; - gUnknown_203B290->unk1C[index].menuAction = 1; + gWigglytuffShop->unk1C[index].text = NULL; + gWigglytuffShop->unk1C[index].menuAction = 1; for(i = 0; i < index; i++) { - if(gUnknown_203B290->unk5C[i] == 0 && gUnknown_203B290->unk1C[i].menuAction == gUnknown_203B290->menuAction2) + if(gWigglytuffShop->unk5C[i] == 0 && gWigglytuffShop->unk1C[i].menuAction == gWigglytuffShop->menuAction2) return; } for(i = 0; i < index; i++) { - if(gUnknown_203B290->unk5C[i] == 0) + if(gWigglytuffShop->unk5C[i] == 0) { - gUnknown_203B290->menuAction2 = gUnknown_203B290->unk1C[i].menuAction; + gWigglytuffShop->menuAction2 = gWigglytuffShop->unk1C[i].menuAction; break; } } @@ -458,15 +436,15 @@ void sub_8022380(void) void sub_8022420(void) { s32 index = 0; - MemoryFill16(gUnknown_203B290->unk5C, 0, sizeof(gUnknown_203B290->unk5C)); - gUnknown_203B290->unk1C[index].text = *gUnknown_80D4920; - gUnknown_203B290->unk1C[index].menuAction = 5; + MemoryFill16(gWigglytuffShop->unk5C, 0, sizeof(gWigglytuffShop->unk5C)); + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4920; + gWigglytuffShop->unk1C[index].menuAction = 5; index++; - gUnknown_203B290->unk1C[index].text = *gUnknown_80D4928; - gUnknown_203B290->unk1C[index].menuAction = 6; + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4928; + gWigglytuffShop->unk1C[index].menuAction = 6; index++; - gUnknown_203B290->unk1C[index].text = NULL; - gUnknown_203B290->unk1C[index].menuAction = 1; + gWigglytuffShop->unk1C[index].text = NULL; + gWigglytuffShop->unk1C[index].menuAction = 1; } void sub_8022460(void) @@ -476,26 +454,26 @@ void sub_8022460(void) if (sub_80144A4(&menuAction) == 0) { if (menuAction != 1) { - gUnknown_203B290->menuAction1 = menuAction; + gWigglytuffShop->menuAction1 = menuAction; } switch(menuAction) { case 2: if (sub_8021700(2) != 0) { - UpdateWigglytuffState(5); + SetWigglytuffState(5); } else { - UpdateWigglytuffState(7); + SetWigglytuffState(7); } break; case 3: - UpdateWigglytuffState(0x14); + SetWigglytuffState(0x14); break; case 4: - UpdateWigglytuffState(2); + SetWigglytuffState(2); break; case 1: - UpdateWigglytuffState(3); + SetWigglytuffState(3); break; } } @@ -509,14 +487,14 @@ void sub_80224D4(void) switch(menuAction) { case 5: - gTeamInventory_203B460->teamMoney -= gUnknown_203B290->friendAreaPrice; - UnlockFriendArea(gUnknown_203B290->chosenFriendArea); + gTeamInventory_203B460->teamMoney -= gWigglytuffShop->friendAreaPrice; + UnlockFriendArea(gWigglytuffShop->chosenFriendArea); PlaySound(0x14C); - UpdateWigglytuffState(0xC); + SetWigglytuffState(0xC); break; case 1: case 6: - UpdateWigglytuffState(0xA); + SetWigglytuffState(0xA); break; } } @@ -527,20 +505,20 @@ void sub_8022538(void) switch(sub_8021274(1)) { case 3: - gUnknown_203B290->chosenFriendArea = sub_802132C(); - gUnknown_203B290->friendAreaPrice = GetFriendAreaPrice(gUnknown_203B290->chosenFriendArea); - UpdateWigglytuffState(0xB); + gWigglytuffShop->chosenFriendArea = sub_802132C(); + gWigglytuffShop->friendAreaPrice = GetFriendAreaPrice(gWigglytuffShop->chosenFriendArea); + SetWigglytuffState(0xB); break; case 4: - gUnknown_203B290->chosenFriendArea = sub_802132C(); - gUnknown_203B290->friendAreaPrice = GetFriendAreaPrice(gUnknown_203B290->chosenFriendArea); - UpdateWigglytuffState(0x10); + gWigglytuffShop->chosenFriendArea = sub_802132C(); + gWigglytuffShop->friendAreaPrice = GetFriendAreaPrice(gWigglytuffShop->chosenFriendArea); + SetWigglytuffState(0x10); break; case 0: break; case 2: sub_80213A0(); - UpdateWigglytuffState(1); + SetWigglytuffState(1); break; case 1: default: @@ -553,32 +531,32 @@ void sub_80225C8(void) { s32 menuAction = 0; sub_8021274(0); - if(sub_8012FD8(&gUnknown_203B290->unk6C) == 0) + if(sub_8012FD8(&gWigglytuffShop->unk6C) == 0) { - sub_8013114(&gUnknown_203B290->unk6C, &menuAction); - if(menuAction != 1) gUnknown_203B290->menuAction2 = menuAction; + sub_8013114(&gWigglytuffShop->unk6C, &menuAction); + if(menuAction != 1) gWigglytuffShop->menuAction2 = menuAction; } switch(menuAction) { case 2: if(gTeamInventory_203B460->teamMoney == 0) { - UpdateWigglytuffState(6); + SetWigglytuffState(6); } - else if(gUnknown_203B290->friendAreaPrice > gTeamInventory_203B460->teamMoney) + else if(gWigglytuffShop->friendAreaPrice > gTeamInventory_203B460->teamMoney) { - UpdateWigglytuffState(0x13); + SetWigglytuffState(0x13); } else { - UpdateWigglytuffState(0x11); + SetWigglytuffState(0x11); } break; case 4: - UpdateWigglytuffState(0x10); + SetWigglytuffState(0x10); break; case 1: - UpdateWigglytuffState(10); + SetWigglytuffState(10); break; } } @@ -590,7 +568,7 @@ void sub_8022668(void) case 2: case 3: sub_8021830(); - UpdateWigglytuffState(0xA); + SetWigglytuffState(0xA); break; case 0: case 1: @@ -603,13 +581,13 @@ void sub_8022684(void) switch(sub_8023278(1)) { case 3: - gUnknown_203B290->chosenSpecies = sub_802331C(); - gUnknown_203B290->chosenFriendArea = GetFriendArea(gUnknown_203B290->chosenSpecies); - UpdateWigglytuffState(0x18); + gWigglytuffShop->chosenSpecies = sub_802331C(); + gWigglytuffShop->chosenFriendArea = GetFriendArea(gWigglytuffShop->chosenSpecies); + SetWigglytuffState(0x18); break; case 2: sub_80233A0(); - UpdateWigglytuffState(1); + SetWigglytuffState(1); break; case 0: case 1: @@ -623,6 +601,51 @@ void sub_80226CC(void) if (sub_80144A4(&temp) == 0) { - UpdateWigglytuffState(gUnknown_203B290->fallbackState); + SetWigglytuffState(gWigglytuffShop->fallbackState); + } +} + +void sub_80226F0(void) +{ + union { + vu32 a; + vu8 b[4]; + } temp; + vu8 *ptr = temp.b; + u32 r2 = 0; + ptr[0] = 0x80; + ptr[1] = 0x80; + ptr[2] = 0x10; + ptr[3] = r2; + if(sub_8099B94() == 0) + { + switch(gWigglytuffShop->unk130) + { + case 1: + case 3: + sub_8099AFC(5, 2, temp.a); + break; + case 2: + case 4: + sub_8099A5C(5, 2, temp.a); + break; + case 0: + default: + SetWigglytuffState(gWigglytuffShop->fallbackState); + gWigglytuffShop->unk130 = 0; + break; + } + gWigglytuffShop->unk130++; + } +} + +void sub_8022790(void) +{ + if(gWigglytuffShop->unk134 != 0) + { + gWigglytuffShop->unk134--; + } + else { + SetWigglytuffState(gWigglytuffShop->fallbackState); } } diff --git a/sym_ewram2.txt b/sym_ewram2.txt index 9f7cbdf2a..398da6aa3 100644 --- a/sym_ewram2.txt +++ b/sym_ewram2.txt @@ -250,8 +250,7 @@ gUnknown_203B28A: /* 203B28A */ gUnknown_203B28C: /* 203B28C */ .space 0x4 -gUnknown_203B290: /* 203B290 */ - .space 0x4 +.include "src/wigglytuff_shop.o" gUnknown_203B294: /* 203B294 */ .space 0x4 From 151193f73d84c74b24f6bd70f9ca28c0c413f42b Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Thu, 27 Jul 2023 22:51:26 -0700 Subject: [PATCH 14/26] more decomp and documentation --- asm/code_801EE10_mid.s | 690 ------------------------------------- asm/code_8023144.s | 282 --------------- asm/friend_area_1.s | 106 +----- include/code_8023144.h | 27 ++ include/friend_area.h | 14 +- include/menu_input.h | 5 + include/personality_test.h | 5 +- include/pokemon.h | 1 + include/wigglytuff_shop.h | 33 ++ ld_script.txt | 3 +- src/adventure_log.c | 1 - src/code_801B3C0.c | 6 +- src/code_801C620.c | 8 +- src/code_801D760.c | 2 - src/code_801EE10.c | 2 +- src/code_801EE10_1.c | 2 +- src/code_801EE10_mid.c | 3 +- src/code_8021774.c | 449 ++++++++++++++++++++++++ src/code_8023144.c | 39 +-- src/code_8023144_pre.c | 141 ++++++++ src/code_8031D70.c | 5 +- src/friend_area.c | 41 ++- src/hints_menu.c | 4 +- src/kecleon_items_1.c | 2 - src/load_screen.c | 1 - src/makuhita_dojo_1.c | 2 - src/menu_input.c | 110 +++++- src/menu_input_1.c | 4 +- src/more_input.c | 113 ------ src/options_menu.c | 6 +- src/party_list_menu.c | 1 - src/personality_test.c | 6 +- src/pokemon_news.c | 7 +- src/post_office_guide.c | 7 +- src/wigglytuff_shop.c | 209 ++++++----- src/wonder_mail_2_1.c | 2 - src/wonder_mail_2_mid.c | 2 - src/wonder_mail_3.c | 2 - src/wonder_mail_3_mid.c | 2 - src/wonder_mail_4.c | 3 - src/wonder_mail_5.c | 9 +- src/wonder_mail_802DF88.c | 9 +- 42 files changed, 945 insertions(+), 1421 deletions(-) create mode 100644 include/code_8023144.h create mode 100644 src/code_8021774.c create mode 100644 src/code_8023144_pre.c delete mode 100644 src/more_input.c diff --git a/asm/code_801EE10_mid.s b/asm/code_801EE10_mid.s index 46aa15a3e..57b60f49a 100644 --- a/asm/code_801EE10_mid.s +++ b/asm/code_801EE10_mid.s @@ -3774,694 +3774,4 @@ _08021646: _08021660: .4byte gUnknown_203B280 thumb_func_end sub_8021494 - thumb_func_start sub_8021664 -sub_8021664: - push {r4-r6,lr} - movs r5, 0 - ldr r1, _0802167C - ldr r0, [r1] - ldr r0, [r0, 0x3C] - cmp r0, 0x1 - beq _08021692 - cmp r0, 0x1 - bcc _08021680 - cmp r0, 0x2 - beq _080216B4 - b _080216F2 - .align 2, 0 -_0802167C: .4byte gUnknown_203B280 -_08021680: - movs r4, 0x1 -_08021682: - ldr r0, [r1] - adds r0, r5 - strb r4, [r0] - adds r5, 0x1 - adds r4, 0x1 - cmp r4, 0x39 - ble _08021682 - b _080216F2 -_08021692: - movs r4, 0x1 - ldr r2, _080216B0 -_08021696: - ldr r0, [r2] - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - beq _080216A8 - ldr r0, [r1] - adds r0, r5 - strb r4, [r0] - adds r5, 0x1 -_080216A8: - adds r4, 0x1 - cmp r4, 0x39 - ble _08021696 - b _080216F2 - .align 2, 0 -_080216B0: .4byte gFriendAreas -_080216B4: - movs r4, 0x1 - adds r6, r1, 0 -_080216B8: - ldr r0, _080216FC - ldr r0, [r0] - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _080216EC - lsls r0, r4, 24 - lsrs r0, 24 - bl GetFriendAreaUnlockCondition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _080216E4 - cmp r0, 0x1 - bne _080216EC - movs r0, 0x6 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - beq _080216EC -_080216E4: - ldr r0, [r6] - adds r0, r5 - strb r4, [r0] - adds r5, 0x1 -_080216EC: - adds r4, 0x1 - cmp r4, 0x39 - ble _080216B8 -_080216F2: - adds r0, r5, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080216FC: .4byte gFriendAreas - thumb_func_end sub_8021664 - - thumb_func_start sub_8021700 -sub_8021700: - push {r4,lr} - cmp r0, 0x1 - beq _08021710 - cmp r0, 0x1 - bcc _08021754 - cmp r0, 0x2 - beq _0802172C - b _0802176A -_08021710: - movs r4, 0x1 - ldr r0, _08021728 - ldr r1, [r0] -_08021716: - adds r0, r1, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _08021754 - adds r4, 0x1 - cmp r4, 0x39 - ble _08021716 - b _0802176A - .align 2, 0 -_08021728: .4byte gFriendAreas -_0802172C: - movs r4, 0x1 -_0802172E: - ldr r0, _08021750 - ldr r0, [r0] - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _08021764 - lsls r0, r4, 24 - lsrs r0, 24 - bl GetFriendAreaUnlockCondition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _08021754 - cmp r0, 0x1 - beq _08021758 - b _08021764 - .align 2, 0 -_08021750: .4byte gFriendAreas -_08021754: - movs r0, 0 - b _0802176C -_08021758: - movs r0, 0x6 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - bne _08021754 -_08021764: - adds r4, 0x1 - cmp r4, 0x39 - ble _0802172E -_0802176A: - movs r0, 0x1 -_0802176C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8021700 - - thumb_func_start sub_8021774 -sub_8021774: - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r4, r0, 0 - adds r5, r1, 0 - mov r8, r2 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - ldr r6, _080217E4 - movs r0, 0xE0 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r6] - strb r4, [r0, 0xC] - ldr r0, [r6] - strb r5, [r0, 0xD] - ldr r0, [r6] - bl sub_801317C - bl sub_8021A60 - ldr r0, [r6] - mov r1, r8 - str r1, [r0, 0x74] - lsls r1, 1 - add r1, r8 - lsls r1, 3 - adds r1, 0x7C - adds r1, r0, r1 - str r1, [r0, 0x78] - adds r0, 0x7C - bl sub_8006518 - ldr r1, [r6] - ldr r2, [r1, 0x74] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r1, 0x7C - ldr r0, _080217E8 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - bl sub_8021820 - movs r0, 0x1 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080217E4: .4byte gUnknown_203B28C -_080217E8: .4byte gUnknown_80DC4D8 - thumb_func_end sub_8021774 - - thumb_func_start sub_80217EC -sub_80217EC: - push {lr} - ldr r0, _0802180C - ldr r0, [r0] - ldr r1, [r0, 0x74] - bl sub_8012A64 - cmp r0, 0x1 - beq _08021810 - cmp r0, 0x2 - bne _0802181A - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - b _0802181C - .align 2, 0 -_0802180C: .4byte gUnknown_203B28C -_08021810: - movs r0, 0 - bl PlayMenuSoundEffect - movs r0, 0x3 - b _0802181C -_0802181A: - movs r0, 0 -_0802181C: - pop {r1} - bx r1 - thumb_func_end sub_80217EC - - thumb_func_start sub_8021820 -sub_8021820: - push {lr} - bl sub_8021878 - bl sub_8021894 - pop {r0} - bx r0 - thumb_func_end sub_8021820 - - thumb_func_start sub_8021830 -sub_8021830: - push {r4,r5,lr} - ldr r4, _08021870 - ldr r2, [r4] - cmp r2, 0 - beq _0802186A - ldr r0, [r2, 0x74] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x7C - ldr r0, _08021874 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x7C - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0802186A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08021870: .4byte gUnknown_203B28C -_08021874: .4byte gUnknown_80DC4BC - thumb_func_end sub_8021830 - - thumb_func_start sub_8021878 -sub_8021878: - push {lr} - bl ResetUnusedInputStruct - ldr r0, _08021890 - ldr r0, [r0] - adds r0, 0x7C - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r0} - bx r0 - .align 2, 0 -_08021890: .4byte gUnknown_203B28C - thumb_func_end sub_8021878 - - thumb_func_start sub_8021894 -sub_8021894: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x168 - ldr r4, _080218F8 - ldr r0, [r4] - ldr r0, [r0, 0x74] - bl sub_80073B8 - ldr r0, [r4] - ldrb r1, [r0, 0xC] - add r0, sp, 0x4 - movs r2, 0 - bl sub_8092578 - ldr r0, [r4] - ldr r3, [r0, 0x74] - movs r5, 0 - str r5, [sp] - movs r0, 0x14 - movs r1, 0 - add r2, sp, 0x4 - bl xxx_call_draw_string - ldr r0, [r4] - ldrb r0, [r0, 0xC] - bl GetFriendAreaDescription - adds r2, r0, 0 - ldr r0, [r4] - ldr r3, [r0, 0x74] - str r5, [sp] - movs r0, 0xA - movs r1, 0x14 - bl xxx_call_draw_string - ldr r4, [r4] - ldrb r0, [r4, 0xD] - cmp r0, 0 - beq _08021900 - ldr r2, _080218FC - ldr r3, [r4, 0x74] - str r5, [sp] - movs r0, 0x20 - movs r1, 0x3C - bl xxx_call_draw_string - b _0802190E - .align 2, 0 -_080218F8: .4byte gUnknown_203B28C -_080218FC: .4byte gUnknown_80DC4F0 -_08021900: - ldr r2, _0802193C - ldr r3, [r4, 0x74] - str r0, [sp] - movs r0, 0x20 - movs r1, 0x3C - bl xxx_call_draw_string -_0802190E: - ldr r4, _08021940 - ldr r0, [r4] - ldr r0, [r0, 0x74] - movs r5, 0x4 - str r5, [sp] - movs r1, 0x4 - movs r2, 0x40 - movs r3, 0x14 - bl sub_800792C - ldr r4, [r4] - ldrb r0, [r4, 0xD] - cmp r0, 0 - beq _08021944 - ldr r0, [r4, 0x74] - str r5, [sp] - movs r1, 0xB8 - movs r2, 0x40 - movs r3, 0x14 - bl sub_800792C - b _08021952 - .align 2, 0 -_0802193C: .4byte gUnknown_80DC518 -_08021940: .4byte gUnknown_203B28C -_08021944: - ldr r0, [r4, 0x74] - str r5, [sp] - movs r1, 0x5E - movs r2, 0x40 - movs r3, 0x6E - bl sub_800792C -_08021952: - ldr r5, _080219E8 - ldr r0, [r5] - ldr r0, [r0, 0x74] - movs r4, 0x4 - str r4, [sp] - movs r1, 0x4 - movs r2, 0x82 - movs r3, 0xC8 - bl sub_800792C - ldr r0, [r5] - ldr r0, [r0, 0x74] - str r4, [sp] - movs r1, 0x3 - movs r2, 0x40 - movs r3, 0x43 - bl sub_8007A78 - ldr r0, [r5] - ldr r0, [r0, 0x74] - str r4, [sp] - movs r1, 0xCC - movs r2, 0x40 - movs r3, 0x43 - bl sub_8007A78 - movs r6, 0 - ldr r0, [r5] - ldr r0, [r0, 0x70] - cmp r6, r0 - bge _08021A40 - add r7, sp, 0x104 - mov r8, r5 - mov r9, r6 -_08021996: - adds r0, r6, 0 - movs r1, 0x3 - bl __modsi3 - lsls r1, r0, 6 - subs r1, r0 - adds r5, r1, 0x7 - adds r0, r6, 0 - movs r1, 0x3 - bl __divsi3 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r4, r1, 0 - adds r4, 0x47 - mov r1, r8 - ldr r0, [r1] - lsls r1, r6, 1 - adds r0, 0xE - adds r0, r1 - movs r2, 0 - ldrsh r1, [r0, r2] - adds r0, r7, 0 - bl sub_808D930 - mov r0, r8 - ldr r3, [r0] - lsls r1, r6, 2 - adds r0, r3, 0 - adds r0, 0x30 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0x1 - beq _08021A04 - cmp r0, 0x1 - bcc _080219EC - cmp r0, 0x2 - beq _08021A16 - b _08021A34 - .align 2, 0 -_080219E8: .4byte gUnknown_203B28C -_080219EC: - ldr r0, _08021A00 - ldr r2, [r0] - ldr r3, [r3, 0x74] - mov r1, r9 - str r1, [sp] - adds r0, r5, 0 - adds r1, r4, 0 - bl xxx_call_draw_string - b _08021A34 - .align 2, 0 -_08021A00: .4byte gUnknown_80D49BC -_08021A04: - ldr r3, [r3, 0x74] - mov r2, r9 - str r2, [sp] - adds r0, r5, 0 - adds r1, r4, 0 - adds r2, r7, 0 - bl xxx_call_draw_string - b _08021A34 -_08021A16: - add r0, sp, 0x4 - ldr r1, _08021A58 - adds r2, r7, 0 - bl sprintfStatic - mov r1, r8 - ldr r0, [r1] - ldr r3, [r0, 0x74] - mov r2, r9 - str r2, [sp] - adds r0, r5, 0 - adds r1, r4, 0 - add r2, sp, 0x4 - bl xxx_call_draw_string -_08021A34: - adds r6, 0x1 - mov r1, r8 - ldr r0, [r1] - ldr r0, [r0, 0x70] - cmp r6, r0 - blt _08021996 -_08021A40: - ldr r0, _08021A5C - ldr r0, [r0] - ldr r0, [r0, 0x74] - bl sub_80073E0 - add sp, 0x168 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08021A58: .4byte gUnknown_80DC524 -_08021A5C: .4byte gUnknown_203B28C - thumb_func_end sub_8021894 - - thumb_func_start sub_8021A60 -sub_8021A60: - push {r4-r7,lr} - ldr r2, _08021B4C - ldr r1, [r2] - movs r0, 0 - str r0, [r1, 0x70] - movs r6, 0 - adds r4, r2, 0 - movs r3, 0 -_08021A70: - ldr r1, [r4] - lsls r2, r6, 1 - adds r0, r1, 0 - adds r0, 0xE - adds r0, r2 - strh r3, [r0] - lsls r0, r6, 2 - adds r1, 0x30 - adds r1, r0 - str r3, [r1] - adds r6, 0x1 - cmp r6, 0xF - ble _08021A70 - movs r6, 0 - ldr r7, _08021B4C -_08021A8E: - lsls r0, r6, 16 - asrs r5, r0, 16 - ldr r4, [r7] - adds r0, r5, 0 - bl GetFriendArea - ldrb r1, [r4, 0xC] - lsls r0, 24 - lsrs r0, 24 - cmp r1, r0 - bne _08021AC4 - adds r0, r5, 0 - bl GetBaseSpeciesNoUnown - lsls r0, 16 - asrs r0, 16 - cmp r5, r0 - bne _08021AC4 - ldr r3, [r7] - ldr r1, [r3, 0x70] - lsls r2, r1, 1 - adds r0, r3, 0 - adds r0, 0xE - adds r0, r2 - strh r5, [r0] - adds r1, 0x1 - str r1, [r3, 0x70] -_08021AC4: - adds r6, 0x1 - ldr r0, _08021B50 - cmp r6, r0 - ble _08021A8E - movs r6, 0 -_08021ACE: - lsls r0, r6, 16 - asrs r4, r0, 16 - adds r0, r4, 0 - bl sub_8098134 - lsls r0, 24 - cmp r0, 0 - beq _08021AFC - adds r0, r4, 0 - bl sub_8021B58 - adds r2, r0, 0 - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - beq _08021AFC - ldr r0, _08021B4C - ldr r1, [r0] - lsls r0, r2, 2 - adds r1, 0x30 - adds r1, r0 - movs r0, 0x1 - str r0, [r1] -_08021AFC: - adds r6, 0x1 - ldr r0, _08021B50 - cmp r6, r0 - ble _08021ACE - movs r6, 0 - ldr r4, _08021B54 -_08021B08: - movs r0, 0x58 - adds r1, r6, 0 - muls r1, r0 - ldr r0, [r4] - adds r2, r0, r1 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08021B3C - movs r1, 0x8 - ldrsh r0, [r2, r1] - bl sub_8021B58 - adds r2, r0, 0 - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - beq _08021B3C - ldr r0, _08021B4C - ldr r1, [r0] - lsls r0, r2, 2 - adds r1, 0x30 - adds r1, r0 - movs r0, 0x2 - str r0, [r1] -_08021B3C: - adds r6, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r6, r0 - ble _08021B08 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08021B4C: .4byte gUnknown_203B28C -_08021B50: .4byte 0x000001a7 -_08021B54: .4byte gRecruitedPokemonRef - thumb_func_end sub_8021A60 - - thumb_func_start sub_8021B58 -sub_8021B58: - push {r4,r5,lr} - lsls r0, 16 - asrs r0, 16 - bl GetBaseSpeciesNoUnown - lsls r0, 16 - asrs r4, r0, 16 - movs r2, 0 - ldr r0, _08021B84 - ldr r0, [r0] - ldr r1, [r0, 0x70] - cmp r2, r1 - bge _08021B90 - adds r3, r1, 0 - adds r1, r0, 0 - adds r1, 0xE -_08021B78: - movs r5, 0 - ldrsh r0, [r1, r5] - cmp r4, r0 - bne _08021B88 - adds r0, r2, 0 - b _08021B94 - .align 2, 0 -_08021B84: .4byte gUnknown_203B28C -_08021B88: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, r3 - blt _08021B78 -_08021B90: - movs r0, 0x1 - negs r0, r0 -_08021B94: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8021B58 - .align 2,0 diff --git a/asm/code_8023144.s b/asm/code_8023144.s index e4e3b8f38..04ae5a9fd 100644 --- a/asm/code_8023144.s +++ b/asm/code_8023144.s @@ -5,288 +5,6 @@ .text - thumb_func_start sub_80227B8 -sub_80227B8: - push {r4,r5,lr} - adds r5, r0, 0 - bl ResetUnusedInputStruct - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r4, _08022810 - movs r0, 0xD4 - lsls r0, 1 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r4] - adds r2, r0, 0 - adds r2, 0xF4 - movs r1, 0 - str r1, [r2] - str r5, [r0, 0x48] - cmp r5, 0 - beq _08022820 - ldr r4, _08022814 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x7 - bl PrintColoredPokeNameToBuffer - adds r4, 0x50 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x6 - bl PrintColoredPokeNameToBuffer - bl HasGummiItem - lsls r0, 24 - cmp r0, 0 - beq _08022818 - movs r0, 0 - bl sub_8022924 - b _08022856 - .align 2, 0 -_08022810: .4byte gUnknown_203B294 -_08022814: .4byte gAvailablePokemonNames -_08022818: - movs r0, 0x11 - bl sub_8022924 - b _08022856 -_08022820: - ldr r4, _08022848 - ldr r5, _0802284C - adds r0, r4, 0 - adds r1, r5, 0 - bl strcpy - adds r4, 0x50 - adds r0, r4, 0 - adds r1, r5, 0 - bl strcpy - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - bne _08022850 - movs r0, 0x12 - bl sub_8022924 - b _08022856 - .align 2, 0 -_08022848: .4byte gAvailablePokemonNames -_0802284C: .4byte gUnknown_80DC5EC -_08022850: - movs r0, 0 - bl sub_8022924 -_08022856: - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80227B8 - - thumb_func_start sub_8022860 -sub_8022860: - push {lr} - ldr r0, _08022878 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0x16 - bhi _080228FE - lsls r0, 2 - ldr r1, _0802287C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08022878: .4byte gUnknown_203B294 -_0802287C: .4byte _08022880 - .align 2, 0 -_08022880: - .4byte _080228DC - .4byte _080228DC - .4byte _080228E2 - .4byte _080228E8 - .4byte _080228EE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228FE - .4byte _080228F4 - .4byte _080228FA -_080228DC: - bl sub_8022E78 - b _08022902 -_080228E2: - bl sub_8022EF4 - b _08022902 -_080228E8: - bl sub_8023068 - b _08022902 -_080228EE: - bl sub_80230E8 - b _08022902 -_080228F4: - bl sub_8023104 - b _08022902 -_080228FA: - movs r0, 0x3 - b _08022904 -_080228FE: - bl sub_8023120 -_08022902: - movs r0, 0 -_08022904: - pop {r1} - bx r1 - thumb_func_end sub_8022860 - - thumb_func_start sub_8022908 -sub_8022908: - push {r4,lr} - ldr r4, _08022920 - ldr r0, [r4] - cmp r0, 0 - beq _0802291A - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0802291A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08022920: .4byte gUnknown_203B294 - thumb_func_end sub_8022908 - - thumb_func_start sub_8022924 -sub_8022924: - push {lr} - ldr r1, _08022938 - ldr r1, [r1] - str r0, [r1] - bl sub_802293C - bl sub_8022A10 - pop {r0} - bx r0 - .align 2, 0 -_08022938: .4byte gUnknown_203B294 - thumb_func_end sub_8022924 - - thumb_func_start sub_802293C -sub_802293C: - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r4, _08022964 - ldr r0, [r4] - movs r1, 0xA4 - lsls r1, 1 - adds r0, r1 - bl sub_8006518 - ldr r1, [r4] - ldr r0, [r1] - cmp r0, 0x3 - beq _080229A4 - cmp r0, 0x3 - bgt _08022968 - cmp r0, 0x2 - beq _08022972 - b _080229BC - .align 2, 0 -_08022964: .4byte gUnknown_203B294 -_08022968: - cmp r0, 0x10 - bgt _080229BC - cmp r0, 0xA - blt _080229BC - b _080229E6 -_08022972: - bl sub_8022D2C - ldr r2, [r4] - movs r0, 0xBC - lsls r0, 1 - adds r2, r0 - ldr r1, _080229A0 - ldm r1!, {r3,r5,r6} - stm r2!, {r3,r5,r6} - ldm r1!, {r3,r5,r7} - stm r2!, {r3,r5,r7} - ldr r1, [r4] - adds r0, r1, r0 - adds r1, 0xF8 - bl sub_8012CAC - ldr r0, [r4] - movs r6, 0xC2 - lsls r6, 1 - adds r0, r6 - movs r1, 0x6 - strh r1, [r0] - b _080229E6 - .align 2, 0 -_080229A0: .4byte gUnknown_80DC5BC -_080229A4: - movs r7, 0xB0 - lsls r7, 1 - adds r1, r7 - ldr r0, _080229B8 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - b _080229E6 - .align 2, 0 -_080229B8: .4byte gUnknown_80DC5D4 -_080229BC: - ldr r0, _08022A08 - mov r12, r0 - movs r1, 0xA4 - lsls r1, 1 - mov r8, r1 - ldr r4, _08022A0C - movs r3, 0 - movs r2, 0x3 -_080229CC: - mov r5, r12 - ldr r1, [r5] - adds r1, r3 - add r1, r8 - adds r0, r4, 0 - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - adds r3, 0x18 - subs r2, 0x1 - cmp r2, 0 - bge _080229CC -_080229E6: - bl ResetUnusedInputStruct - ldr r0, _08022A08 - ldr r0, [r0] - movs r6, 0xA4 - lsls r6, 1 - adds r0, r6 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08022A08: .4byte gUnknown_203B294 -_08022A0C: .4byte gUnknown_80DC5A4 - thumb_func_end sub_802293C - thumb_func_start sub_8022A10 sub_8022A10: push {r4-r7,lr} diff --git a/asm/friend_area_1.s b/asm/friend_area_1.s index 0a16b66b6..9feb24125 100644 --- a/asm/friend_area_1.s +++ b/asm/friend_area_1.s @@ -3,111 +3,7 @@ .syntax unified - .text - - thumb_func_start sub_8092638 -sub_8092638: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r1, 0 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r2, 24 - lsrs r2, 24 - mov r12, r2 - lsls r3, 24 - lsrs r3, 24 - mov r8, r3 - movs r6, 0 - movs r3, 0 - ldr r2, _080926DC - cmp r3, r5 - bge _0809266E - ldr r1, _080926E0 - adds r3, r5, 0 -_0809265E: - movs r7, 0 - ldrsh r0, [r1, r7] - adds r6, r0 - adds r1, 0x8 - subs r3, 0x1 - cmp r3, 0 - bne _0809265E - adds r3, r5, 0 -_0809266E: - str r6, [r4, 0x8] - ldr r0, [r2] - adds r0, r3 - ldrb r0, [r0] - strb r0, [r4, 0x4] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _080926E8 - movs r0, 0 - strh r0, [r4, 0x2] - ldr r1, _080926E0 - lsls r0, r3, 3 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r4] - movs r3, 0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r3, r0 - bge _080926EC - ldr r5, _080926E4 -_0809269A: - movs r0, 0x58 - adds r1, r6, 0 - muls r1, r0 - ldr r0, [r5] - adds r2, r0, r1 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080926CC - mov r7, r12 - cmp r7, 0 - beq _080926BA - ldrb r0, [r2, 0x2] - cmp r0, 0 - bne _080926CC -_080926BA: - mov r0, r8 - cmp r0, 0 - beq _080926C6 - ldrb r0, [r2, 0x4] - cmp r0, 0x41 - beq _080926CC -_080926C6: - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] -_080926CC: - adds r3, 0x1 - adds r6, 0x1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r3, r0 - blt _0809269A - b _080926EC - .align 2, 0 -_080926DC: .4byte gFriendAreas -_080926E0: .4byte gFriendAreaSettings -_080926E4: .4byte gRecruitedPokemonRef -_080926E8: - strh r0, [r4, 0x2] - strh r0, [r4] -_080926EC: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8092638 + .text thumb_func_start sub_80926F8 sub_80926F8: diff --git a/include/code_8023144.h b/include/code_8023144.h new file mode 100644 index 000000000..750255bb9 --- /dev/null +++ b/include/code_8023144.h @@ -0,0 +1,27 @@ +#ifndef GUARD_CODE_8023144_H +#define GUARD_CODE_8023144_H + +struct unkStruct_203B294 +{ + // size: 0x1A8 + /* 0x0 */ s32 state; + /* 0x4 */ s32 fallbackState; + u8 iqSkillPreGummi[NUM_IQ_SKILLS]; + u8 iqSkillPostGummi[NUM_IQ_SKILLS]; + u32 availIQSkillPreGummi; + u32 availIQSkillPostGummi; + u32 unk40; // Gummi eaten flag? + struct Gummi gummi; + /* 0x48 */ struct PokemonStruct *pokeStruct; + u32 itemIndex; + struct Item item; + struct MenuStruct unk54; + struct MenuStruct unkA4; + u32 menuAction; + struct MenuItem unkF8[0x8]; + u16 unk138[0x8]; + struct UnkTextStruct2 unk148[4]; +}; + + +#endif // GUARD_CODE_8023144_H diff --git a/include/friend_area.h b/include/friend_area.h index 993358678..2a6bb36d1 100644 --- a/include/friend_area.h +++ b/include/friend_area.h @@ -8,6 +8,15 @@ struct FriendAreaSettings u32 price; }; +struct unkStruct_8092638 +{ + /* 0x0 */ s16 numPokemon; + s16 unk2; + /* 0x4 */ bool8 hasFriendArea; + u8 fill5[3]; + s32 unk8; +}; + void LoadFriendAreas(void); bool8 *GetBoughtFriendAreas(void); void InitializeFriendAreas(void); @@ -15,10 +24,11 @@ u8 sub_80923D4(s32 target); bool8 HasAllFriendAreas(void); bool8 GetFriendAreaStatus(u8 index); void UnlockFriendArea(u8 index); -u32 GetFriendAreaDescription(u8 index); +u8 *GetFriendAreaDescription(u8 index); u8 GetFriendAreaUnlockCondition(u8 index); -u32 GetFriendAreaPrice(u8 index); +s32 GetFriendAreaPrice(u8 index); const char *GetFriendAreaName(u8 index); +void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u8 param_4); u32 SaveFriendAreas(u8 *r0, u32 r1); u32 ReadSavedFriendAreas(u8 *r0, s32 r1); diff --git a/include/menu_input.h b/include/menu_input.h index ca1030025..55e021e1a 100644 --- a/include/menu_input.h +++ b/include/menu_input.h @@ -1,5 +1,8 @@ #include "menu.h" +u32 sub_8012A64(struct MenuInputStructSub *r0, u32 r1); +s32 GetKeyPress(struct MenuInputStruct *r0); +s32 sub_8012AE8(void); void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 color, u32 param_6); void sub_8012C60(u32 x, u32 y, u32 param_3, u32 color, u32 param_5); void sub_8012CAC(struct UnkTextStruct2 *param_1, const struct MenuItem *param_2); @@ -12,3 +15,5 @@ void sub_8012EBC(struct MenuStruct *param_1); bool8 sub_8012FD8(struct MenuStruct *param_1); bool8 sub_80130A8(struct MenuStruct *param_1); bool8 sub_8013114(struct MenuStruct *param_1, s32 *menuAction); +void sub_801317C(struct MenuInputStructSub *param_1); +void AddMenuCursorSprite(struct MenuInputStruct *param_1); diff --git a/include/personality_test.h b/include/personality_test.h index 2b90ff5b3..2c0e39f6b 100644 --- a/include/personality_test.h +++ b/include/personality_test.h @@ -2,6 +2,7 @@ #define GUARD_PERSONALITY_TEST_H #include "constants/personality_test.h" +#include "input.h" #include "text.h" // Definitely wrong but need to figure out better structure later @@ -38,9 +39,7 @@ struct PersonalityTestTracker /* 0x44 */ s32 NatureTotals[NUM_PERSONALITIES]; /* 0x78 */ u8 QuestionTracker[NUM_QUIZ_QUESTIONS]; /* 0xB0 */ u32 playerGender; // 1 = Female, 0 = Male - u32 unkb4; - u32 unkb8; - u32 unkbc; + /* 0xB4 */ struct MenuInputStructSub input; }; struct PersonalityStruct_203B404 diff --git a/include/pokemon.h b/include/pokemon.h index 388a9890a..a6d12d403 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -196,6 +196,7 @@ void CopyMonsterNametoBuffer(u8 * buffer, s16 index); void CopyYellowMonsterNametoBuffer(u8 *buffer, s16 index); void CopyCyanMonsterNametoBuffer(u8 *buffer, s16 index); void PrintColoredPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon, s32 colorNum); +void sub_808D930(u8 *buffer, s32 index); void sub_808D9DC(u8 *buffer, struct PokemonStruct2 *param_2, s32 colorNum); void sub_808DA0C(u8 *buffer, struct PokemonStruct2 *param_2); void PeekPokemonItem(s16 index_, struct BulkItem* item); diff --git a/include/wigglytuff_shop.h b/include/wigglytuff_shop.h index b39303de6..5d1c7f1b1 100644 --- a/include/wigglytuff_shop.h +++ b/include/wigglytuff_shop.h @@ -31,5 +31,38 @@ struct WigglytuffShop extern struct WigglytuffShop *gWigglytuffShop; +enum WigglytuffStates +{ + WIGGLYTUFF_INIT = 0, + WIGGLYTUFF_MAIN_MENU = 1, + WIGGLYTUFF_INFO = 2, + WIGGLYTUFF_PRE_EXIT = 3, + WIGGLYTUFF_EXIT = 4, + WIGGLYTUFF_CANT_ADD_FRIEND_AREA = 5, + NO_MONEY = 6, + FRIEND_AREA_SELECT_BUY = 7, + FRIEND_AREA_SELECT_BUY_AGAIN = 8, + WIGGLYTUFF_UNK9 = 9, + WIGGLYTUFF_UNKA = 0xA, + WIGGLYTUFF_UNKB = 0xB, + CONFIRM_BUY_FRIEND_AREA = 0xC, + WIGGLYTUFF_UNKD = 0xD, + WIGGLYTUFF_UNKE = 0xE, + FRIEND_AREA_UNLOCKED = 0xF, + FRIEND_AREA_INFO = 0x10, + BUY_FRIEND_AREA = 0x11, + NO_FRIEND_AREAS = 0x12, + NOT_ENOUGH_MONEY = 0x13, + WIGGLYTUFF_CHECK = 0x14, + WIGGLYTUFF_CHECK_AGAIN = 0x15, + WIGGLYTUFF_UNK16 = 0x16, + WIGGLYTUFF_UNK17 = 0x17, + DISPLAY_POKEMON_FRIEND_AREA_INFO = 0x18, + WIGGLYTUFF_CHECK_HAS_FRIEND_AREA = 0x19, + WIGGLYTUFF_CHECK_POST_GAME = 0x1A, + WIGGLYTUFF_CHECK_WONDER_MAIL = 0x1B, + WIGGLYTUFF_CHECK_LEGENDARY = 0x1C, +}; + #endif // GUARD_WIGGLYTUFF_SHOP_H diff --git a/ld_script.txt b/ld_script.txt index d42934a34..1a52aceb2 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -92,7 +92,6 @@ SECTIONS { src/debug.o(.text); src/save.o(.text); src/code_8012A18.o(.text); - src/more_input.o(.text); src/menu_input.o(.text); asm/menu_input.o(.text); src/menu_input_1.o(.text); @@ -118,7 +117,9 @@ SECTIONS { asm/code_801EE10.o(.text); src/code_801EE10_mid.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); src/code_8023144.o(.text); asm/code_801EE10_1.o(.text); diff --git a/src/adventure_log.c b/src/adventure_log.c index 88c5c2802..a586c1721 100644 --- a/src/adventure_log.c +++ b/src/adventure_log.c @@ -45,7 +45,6 @@ extern void sub_8013818(void *, u32, u32, u32); extern bool8 sub_8013938(struct MenuInputStruct *); extern void sub_8013660(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); -extern u32 GetKeyPress(struct MenuInputStruct *); extern bool8 sub_8097710(u8); extern s16 sub_80978B8(); diff --git a/src/code_801B3C0.c b/src/code_801B3C0.c index 348219efd..aa55fce30 100644 --- a/src/code_801B3C0.c +++ b/src/code_801B3C0.c @@ -23,9 +23,7 @@ struct unkStruct_203B230 u32 unk20; u32 unk24; struct UnkTextStruct2 unk28[4]; - u32 unk88; - u32 unk8C; - u32 unk90; + struct MenuInputStructSub unk88; }; extern struct unkStruct_203B230 *gUnknown_203B230; @@ -93,7 +91,6 @@ extern void sub_80073B8(u32); extern void xxx_format_and_draw(u32, u32, u8 *, u32, u32); extern void PlayMenuSoundEffect(u32); extern void sub_8013F84(void); -extern u32 sub_8012A64(u32 *, u32); extern s32 sub_80913E0(struct Item *, u32, struct subStruct_203B240 **); extern void sub_80141B4(u8 *, u32, u32 *, u32); extern void sub_801BB20(void); @@ -102,7 +99,6 @@ extern void sub_801A9E0(void); extern void sub_801BC24(void); extern void sub_801A5D8(u32, u32, u32, u32); extern void sub_8014248(const char *, u32, u32, struct MenuItem *, u32, u32, u32, u32, u32); -extern void sub_801317C(u32 *); extern void sub_80140B4(struct UnkTextStruct2 *); extern void sub_801B46C(u32); extern void ResetSprites(u32); diff --git a/src/code_801C620.c b/src/code_801C620.c index 04d392f5d..1e9f575ce 100644 --- a/src/code_801C620.c +++ b/src/code_801C620.c @@ -56,9 +56,7 @@ struct unkStruct_203B240 u32 unk20; u32 unk24; struct UnkTextStruct2 unk28[4]; - u32 unk88; - u32 unk8C; - u32 unk90; + struct MenuInputStructSub unk88; }; struct unkStruct_203B244 @@ -150,13 +148,11 @@ extern void sub_801CC38(void); extern void sub_801CCD8(void); extern void sub_801CF94(void); extern void ResetSprites(u32); -extern void sub_801317C(u32 *); extern void sub_80140B4(struct UnkTextStruct2 *); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern u32 sub_8097DF0(char *, struct subStruct_203B240 **); -extern u32 sub_8012A64(u32 *, u32); extern void sub_8013F84(); extern void PlayMenuSoundEffect(u32); extern char * GetIQSkillDescription(u8 r0); @@ -168,10 +164,8 @@ extern s32 sub_8013800(struct MenuInputStruct *, s32); extern u32 sub_80095E4(s16, u32); extern void sub_801C440(void); extern void sub_801C4C8(void); -extern void AddMenuCursorSprite(struct MenuInputStruct *); extern u8 sub_80138B8(struct MenuInputStruct *, u32); extern void sub_8013660(struct MenuInputStruct *); -extern s32 GetKeyPress(struct MenuInputStruct *); extern bool8 HasNoAvailIQSkills(s16 species); extern u32 sub_801C674(void); extern void sub_801C6B4(void); diff --git a/src/code_801D760.c b/src/code_801D760.c index 81c5cdaac..b17ff9671 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -32,12 +32,10 @@ extern struct UnkTextStruct2 gUnknown_80DBF70; extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); extern void sub_8013878(struct MenuInputStruct *, s32); extern u8 sub_80138B8(struct MenuInputStruct *, u32); -extern u32 GetKeyPress(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); extern void sub_801DB54(); extern void sub_801DBD4(); extern void sub_8013984(struct MenuInputStruct *); -extern void AddMenuCursorSprite(struct MenuInputStruct *); extern u32 sub_801BF48(void); extern void sub_801BF98(void); diff --git a/src/code_801EE10.c b/src/code_801EE10.c index ea6e5a000..8a805f998 100644 --- a/src/code_801EE10.c +++ b/src/code_801EE10.c @@ -4,12 +4,12 @@ #include "memory.h" #include "input.h" #include "code_801EE10.h" +#include "menu_input.h" extern struct unkStruct_203B270 *gUnknown_203B270; extern struct UnkTextStruct2 gUnknown_80DC25C; extern struct UnkTextStruct2 gUnknown_80DC274; -extern void sub_8012D08(void *, u32); extern void sub_8013818(void *, u32, u32, u32); u32 sub_8006544(u32 index); s32 sub_801F3F8(void); diff --git a/src/code_801EE10_1.c b/src/code_801EE10_1.c index ee243ea07..a2e73ce94 100644 --- a/src/code_801EE10_1.c +++ b/src/code_801EE10_1.c @@ -6,6 +6,7 @@ #include "memory.h" #include "text.h" #include "text_util.h" +#include "menu_input.h" struct unkStruct_203B2AC { @@ -50,7 +51,6 @@ extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); extern bool8 sub_80023E4(u32); extern void sub_808FF20(u32 *, struct PokemonStruct *, bool8); extern void CreatePokemonInfoTabScreen(u32, s16, u32 *, u32 *, u32); -extern s32 GetKeyPress(struct MenuInputStruct*); extern bool8 sub_8013938(struct MenuInputStruct*); extern void sub_802452C(void); extern void PlayMenuSoundEffect(u32); diff --git a/src/code_801EE10_mid.c b/src/code_801EE10_mid.c index 6bc0e6fee..5b5bf6c9c 100644 --- a/src/code_801EE10_mid.c +++ b/src/code_801EE10_mid.c @@ -6,6 +6,7 @@ #include "code_800D090.h" #include "moves.h" #include "code_801EE10.h" +#include "menu_input.h" extern struct unkStruct_203B270 *gUnknown_203B270; @@ -28,9 +29,7 @@ extern struct UnkTextStruct2 gUnknown_80DC2AC; extern u8 gUnknown_80DC2DC[]; extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); -extern s32 GetKeyPress(struct MenuInputStruct*); extern void sub_8013660(struct MenuInputStruct*); -extern void AddMenuCursorSprite(struct MenuInputStruct*); extern u8 sub_80138B8(struct MenuInputStruct*, u32); extern void PlayMenuSoundEffect(u32); extern void sub_8013984(struct MenuInputStruct*); diff --git a/src/code_8021774.c b/src/code_8021774.c new file mode 100644 index 000000000..bf9071959 --- /dev/null +++ b/src/code_8021774.c @@ -0,0 +1,449 @@ +#include "constants/friend_area.h" +#include "global.h" +#include "input.h" +#include "memory.h" +#include "text.h" +#include "pokemon.h" +#include "exclusive_pokemon.h" +#include "friend_area.h" +#include "code_800D090.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_80073B8(u32); +extern void sub_80073E0(u32); +extern void sub_8092578(u8 *buffer, u8 index, u8 r2); +void sub_800792C(u32, u32, u32, u32, u32); +void sub_8007A78(u32, u32, u32, u32, u32); + +extern void sub_8021878(void); +extern void sub_8021894(void); +extern u32 sub_8012A64(struct MenuInputStructSub *, s32); +extern void sub_801317C(struct MenuInputStructSub *); +extern void PlayMenuSoundEffect(u32); +extern void sub_8021A60(void); +void sub_8021820(void); +extern u8 *gFriendAreas; +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_8023144.c b/src/code_8023144.c index a7a3e2678..7d4df66b6 100644 --- a/src/code_8023144.c +++ b/src/code_8023144.c @@ -1,6 +1,6 @@ -#include "constants/input.h" #include "global.h" #include "constants/colors.h" +#include "constants/input.h" #include "constants/iq_skill.h" #include "memory.h" #include "menu.h" @@ -11,6 +11,9 @@ #include "input.h" #include "item.h" #include "menu_input.h" +#include "code_8023144.h" +#include "code_800D090.h" +#include "friend_area.h" struct unkStruct_3001B5C { @@ -31,6 +34,7 @@ struct unkStruct_3001B5C }; IWRAM_DATA struct unkStruct_3001B5C *gUnknown_3001B5C; +struct unkStruct_203B294 *gUnknown_203B294; extern u32 gUnknown_203B298; extern u16 gUnknown_203B29C; @@ -50,32 +54,8 @@ extern void sub_80234BC(void); extern u32 sub_80236A4(void); extern u8 sub_80138B8(struct MenuInputStruct*, u32); extern void PlayMenuSoundEffect(u32); -extern s32 GetKeyPress(struct MenuInputStruct*); extern void sub_8013660(struct MenuInputStruct*); -extern void AddMenuCursorSprite(struct MenuInputStruct*); -struct unkStruct_203B294 -{ - // size: 0x1A8 - /* 0x0 */ u32 state; - /* 0x4 */ u32 fallbackState; - u8 iqSkillPreGummi[NUM_IQ_SKILLS]; - u8 iqSkillPostGummi[NUM_IQ_SKILLS]; - u32 availIQSkillPreGummi; - u32 availIQSkillPostGummi; - u32 unk40; // Gummi eaten flag? - struct Gummi gummi; - /* 0x48 */ struct PokemonStruct *pokeStruct; - u32 itemIndex; - struct Item item; - struct MenuStruct unk54; - struct MenuStruct unkA4; - u32 menuAction; - struct MenuItem unkF8[0x8]; - u16 unk138[0x8]; -}; - -struct unkStruct_203B294 *gUnknown_203B294; extern u8 gUnknown_80DC5EC[]; extern u8 gUnknown_202DE58[]; @@ -488,21 +468,12 @@ void sub_8023420(void) extern u8 gUnknown_80DC934[]; -struct unkStruct_8092638 -{ - u32 unk0; - bool8 hasFriendArea; - u32 unk5; -}; -extern void sub_8092638(u8,struct unkStruct_8092638 *, u32, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -void sub_808D930(u8 *buffer, s32 index); extern s32 sub_8013800(void *, u32); bool8 HasRecruitedMon(s16 species_); extern u8 gUnknown_80DC93C[]; -void sprintfStatic(char *buffer, const char *text, ...); void sub_80234BC(void) { diff --git a/src/code_8023144_pre.c b/src/code_8023144_pre.c new file mode 100644 index 000000000..738f1e450 --- /dev/null +++ b/src/code_8023144_pre.c @@ -0,0 +1,141 @@ +#include "global.h" +#include "constants/colors.h" +#include "constants/input.h" +#include "constants/iq_skill.h" +#include "memory.h" +#include "menu.h" +#include "pokemon.h" +#include "pokemon_3.h" +#include "team_inventory.h" +#include "text.h" +#include "input.h" +#include "item.h" +#include "menu_input.h" +#include "code_8023144.h" +#include "text.h" + +struct unkStruct_203B294 *gUnknown_203B294; +extern u8 gAvailablePokemonNames[]; +extern u8 gUnknown_80DC5EC[]; +extern u8 HasGummiItem(void); +extern void sub_8022924(s32); +extern void sub_8022E78(void); +extern void sub_8022EF4(void); +extern void sub_8023068(void); +extern void sub_80230E8(void); +extern void sub_8023120(void); +extern void sub_8023104(void); +extern void sub_802293C(void); +extern void sub_8022A10(void); +extern void sub_8022D2C(void); + +extern struct UnkTextStruct2 gUnknown_80DC5A4; +extern struct UnkTextStruct2 gUnknown_80DC5D4; +extern struct UnkTextStruct2 gUnknown_80DC5BC; + +bool8 sub_80227B8(struct PokemonStruct *pokeStruct) +{ + ResetUnusedInputStruct(); + sub_800641C(NULL, 1, 1); + gUnknown_203B294 = MemoryAlloc(sizeof(struct unkStruct_203B294), 8); + gUnknown_203B294->menuAction = 0; + gUnknown_203B294->pokeStruct = pokeStruct; + if(pokeStruct != NULL) + { + PrintColoredPokeNameToBuffer(gAvailablePokemonNames, pokeStruct, COLOR_WHITE_2); + PrintColoredPokeNameToBuffer(gAvailablePokemonNames + 0x50, pokeStruct, COLOR_YELLOW); + if(HasGummiItem()) + { + sub_8022924(0x0); + } + else + { + sub_8022924(0x11); + } + } + else { + strcpy(gAvailablePokemonNames, gUnknown_80DC5EC); + strcpy(gAvailablePokemonNames + 0x50, gUnknown_80DC5EC); + if(GetNumberOfFilledInventorySlots() == 0) + { + sub_8022924(0x12); + + } + else { + sub_8022924(0x0); + } + } + return TRUE; +} + +u32 sub_8022860(void) +{ + switch(gUnknown_203B294->state) { + case 0: + case 1: + sub_8022E78(); + break; + case 2: + sub_8022EF4(); + break; + case 3: + sub_8023068(); + break; + case 4: + sub_80230E8(); + break; + case 0x15: + sub_8023104(); + break; + case 0x16: + return 3; + default: + sub_8023120(); + break; + } + return 0; +} + +void sub_8022908(void) +{ + if(gUnknown_203B294) + { + MemoryFree(gUnknown_203B294); + gUnknown_203B294 = NULL; + } +} + +void sub_8022924(s32 newState) +{ + gUnknown_203B294->state = newState; + sub_802293C(); + sub_8022A10(); +} + +void sub_802293C(void) { + s32 index; + sub_8006518(gUnknown_203B294->unk148); + switch(gUnknown_203B294->state) + { + case 2: + sub_8022D2C(); + gUnknown_203B294->unk148[2] = gUnknown_80DC5BC; + sub_8012CAC(&gUnknown_203B294->unk148[2], gUnknown_203B294->unkF8); + gUnknown_203B294->unk148[2].unkC = 6; + break; + case 3: + gUnknown_203B294->unk148[1] = gUnknown_80DC5D4; + break; + default: + for(index = 0; index < 4; index++) + { + gUnknown_203B294->unk148[index] = gUnknown_80DC5A4; + } + break; + case 0xA ... 0x10: + break; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B294->unk148, 1, 1); + +} diff --git a/src/code_8031D70.c b/src/code_8031D70.c index 672597c8d..a6c8e8ab2 100644 --- a/src/code_8031D70.c +++ b/src/code_8031D70.c @@ -13,8 +13,7 @@ struct unkStruct_203B334 { // size: 0x7C u32 mailIndex; - u32 unk4; - u8 fill8[0x10 - 0x8]; + struct MenuInputStructSub unk4; u32 unk10; struct UnkTextStruct2 *unk14; struct UnkTextStruct2 unk18[4]; @@ -52,8 +51,6 @@ extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern void sub_80078A4(u32, u32, u32, u32, u32); extern void sub_803D2C0(u8 *, struct unkStruct_203B480 *); -extern void sub_801317C(u32 *); -extern u32 sub_8012A64(u32 *, u32); extern void PlayMenuSoundEffect(u32); void sub_8031E00(void); diff --git a/src/friend_area.c b/src/friend_area.c index 139882e9a..4911e6375 100644 --- a/src/friend_area.c +++ b/src/friend_area.c @@ -11,7 +11,7 @@ EWRAM_DATA_2 bool8 *gFriendAreas = {0}; extern bool8 *gFriendAreas; -extern u32 gFriendAreaDescriptions[]; +extern u8 *gFriendAreaDescriptions[]; extern const char *gFriendAreaNames[]; extern const char gUnknown_81098A4; extern const char gUnknown_81098AC; @@ -504,7 +504,7 @@ u8 GetFriendAreaUnlockCondition(u8 index) return gFriendAreaSettings[index].unlock_condition; } -u32 GetFriendAreaPrice(u8 index) +s32 GetFriendAreaPrice(u8 index) { return gFriendAreaSettings[index].price; } @@ -530,7 +530,7 @@ void sub_8092578(u8 *buffer, u8 index, u8 r2) } } -u32 GetFriendAreaDescription(u8 index) +u8 *GetFriendAreaDescription(u8 index) { return gFriendAreaDescriptions[index]; } @@ -558,3 +558,38 @@ bool8 HasAllFriendAreas(void) return TRUE; } +void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u8 param_4) +{ + struct PokemonStruct *pokeStruct; + s32 counter; + s32 iVar4; + + + iVar4 = 0; + + for(counter = 0; counter < friendArea; counter++) + { + iVar4 += gFriendAreaSettings[counter].num_pokemon; + } + param_2->unk8 = iVar4; + + param_2->hasFriendArea = gFriendAreas[counter]; + if (param_2->hasFriendArea != 0) { + param_2->unk2 = 0; + param_2->numPokemon = gFriendAreaSettings[counter].num_pokemon; + + for(counter = 0; counter < param_2->numPokemon; counter++, iVar4++) + { + pokeStruct = &gRecruitedPokemonRef->pokemon[iVar4]; + if (((((u8)pokeStruct->unk0 & 1) != 0) && + ((param_3 == 0 || (!pokeStruct->isTeamLeader)))) && + ((param_4 == 0 || ((pokeStruct->dungeonLocation).id != DUNGEON_JOIN_LOCATION_PARTNER)))) { + param_2->unk2++; + } + } + } + else { + param_2->unk2 = 0; + param_2->numPokemon = 0; + } +} diff --git a/src/hints_menu.c b/src/hints_menu.c index f118a31de..6f9ab0d3e 100644 --- a/src/hints_menu.c +++ b/src/hints_menu.c @@ -2,6 +2,7 @@ #include "memory.h" #include "text.h" #include "input.h" +#include "menu_input.h" #define MAX_HINTS 5 @@ -44,7 +45,6 @@ extern u8 gUnknown_80DC0D4[MAX_HINTS]; extern void sub_801E714(void); extern void sub_8013818(struct MenuInputStruct *, u32, u32, u32); extern bool8 sub_8013938(struct MenuInputStruct *); -extern s32 GetKeyPress(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); extern void sub_801E714(void); extern void sub_801E76C(void); @@ -56,10 +56,8 @@ extern void sub_8008C54(u32); void DrawHintSelectionMenu(void); void sub_801E594(void); void sub_8013984(struct MenuInputStruct *); -void AddMenuCursorSprite(struct MenuInputStruct *); extern u8 sub_80138B8(struct MenuInputStruct *, u32); extern void sub_8013660(struct MenuInputStruct *); -extern void sub_8012D08(struct UnkTextStruct2 *, u32); u32 sub_801E3F0(u32 r0) { diff --git a/src/kecleon_items_1.c b/src/kecleon_items_1.c index 9878b7b88..d3af687f3 100644 --- a/src/kecleon_items_1.c +++ b/src/kecleon_items_1.c @@ -80,7 +80,6 @@ extern u8 sub_8019FB0(void); extern u8 sub_80138B8(struct MenuInputStruct *, u32); extern void PlayMenuSoundEffect(u32); -extern s32 GetKeyPress(struct MenuInputStruct *); extern void sub_8013660(struct MenuInputStruct *); extern struct UnkTextStruct2 gUnknown_80DB8CC; @@ -94,7 +93,6 @@ extern void sub_801A4A4(void); extern void sub_8013984(struct MenuInputStruct*); extern void sub_801A064(void); extern void sub_801A0D8(void); -extern void AddMenuCursorSprite(struct MenuInputStruct *); extern u8 sub_801A37C(void); extern void sub_801A010(void); diff --git a/src/load_screen.c b/src/load_screen.c index 099317d45..ffb725e33 100644 --- a/src/load_screen.c +++ b/src/load_screen.c @@ -56,7 +56,6 @@ extern void sub_80073E0(u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); -extern void sub_808D930(u8 *, s16); extern void xxx_format_string(u8 *, u8 *, u8 *, u32); extern void SetBGPaletteBufferColorArray(s32, s32); diff --git a/src/makuhita_dojo_1.c b/src/makuhita_dojo_1.c index de5838dc6..edb6f749d 100644 --- a/src/makuhita_dojo_1.c +++ b/src/makuhita_dojo_1.c @@ -65,12 +65,10 @@ extern bool8 IsMazeCompleted(s32); extern s32 sub_8030668(void); extern void sub_8013984(void *); extern void sub_80304C8(); -extern void AddMenuCursorSprite(struct MenuInputStruct *); extern void DrawDojoCourseList(void); extern u8 sub_80138B8(void *, u32); extern void PlayMenuSoundEffect(u32); -extern s32 GetKeyPress(void *); extern void sub_8013660(void *); extern void sub_8013818(void *, u32, u32, u32); extern void sub_803053C(void); diff --git a/src/menu_input.c b/src/menu_input.c index 48aa55d82..56da64783 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -17,7 +17,6 @@ extern struct UnkTextStruct1 gUnknown_2027370[4]; extern u8 gUnknown_80D4828[]; extern void PlayMenuSoundEffect(u32); -extern s32 GetKeyPress(struct MenuInputStruct *); extern u32 sub_80137A8(struct MenuInputStruct *); void MoveMenuCursorUp(struct MenuInputStruct *); void MoveMenuCursorDown(struct MenuInputStruct *); @@ -27,7 +26,6 @@ extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); extern s32 sub_8013800(struct MenuInputStruct *, s32); extern void sub_80073E0(u32); extern void sub_8013660(struct MenuInputStruct *); -void AddMenuCursorSprite(struct MenuInputStruct *); void AddMenuCursorSprite_(struct MenuInputStruct *, u32); void sub_8012EBC(struct MenuStruct *param_1); extern void sub_8013134(struct MenuInputStruct *, u32, u32); @@ -36,11 +34,117 @@ extern s16 sub_8009614(u32, u32); extern u32 ReturnIntFromChar2(u8); struct unkChar *GetCharacter(u32); extern void xxx_call_draw_char(u32, u32, u32, u32, u32); -extern void sub_801317C(struct MenuInputStructSub *); extern void nullsub_7(u16 *); +extern void nullsub_34(struct MenuInputStructSub *r0); const u32 gDefaultMenuTextColors[] = { COLOR_WHITE_2, COLOR_RED, COLOR_RED }; + +u32 sub_8012A64(struct MenuInputStructSub *r0, u32 r1) +{ + if(r0 == NULL) + { + return sub_8012AE8(); + } + if(r1 != -1) + { + nullsub_34(r0); + } + if(r0->a_button != 0) + { + r0->a_button = 0; + return INPUT_A_BUTTON; + } + else if(r0->b_button == 0) + { + return sub_8012AE8(); + } + else + { + r0->b_button = 0; + return INPUT_B_BUTTON; + } +} + +s32 GetKeyPress(struct MenuInputStruct *r0) +{ + if(r0 != NULL) + { + if(r0->unk28.a_button != 0) + { + return INPUT_A_BUTTON; + } + if(r0->unk28.b_button != 0) + { + return INPUT_B_BUTTON; + } + if(r0->unk28.dpad_left != 0) + { + return INPUT_DPAD_LEFT; + } + if(r0->unk28.dpad_right != 0) + { + return INPUT_DPAD_RIGHT; + } + } + return sub_8012AE8(); +} + +s32 sub_8012AE8(void) +{ + if ((gRealInputs.held & R_BUTTON) != 0) { + if ((gRealInputs.pressed & A_BUTTON) != 0) { + return INPUT_R_A_BUTTONS; + } + if ((gRealInputs.repeated & DPAD_UP) != 0) { + return INPUT_R_DPAD_UP_BUTTONS; + } + if ((gRealInputs.repeated & DPAD_DOWN) != 0) { + return INPUT_R_DPAD_DOWN_BUTTONS; + } + if ((gRealInputs.repeated & DPAD_LEFT) != 0) { + return INPUT_R_DPAD_LEFT_BUTTONS; + } + if ((gRealInputs.repeated & DPAD_RIGHT) != 0) { + return INPUT_R_DPAD_RIGHT_BUTTONS; + } + if ((gRealInputs.repeated & R_BUTTON) != 0) { + return INPUT_R_BUTTON; + } + } + else + { + if ((gRealInputs.pressed & A_BUTTON) != 0) { + return INPUT_A_BUTTON; + } + if ((gRealInputs.pressed & B_BUTTON) != 0) { + return INPUT_B_BUTTON; + } + if ((gRealInputs.pressed & SELECT_BUTTON) != 0) { + return INPUT_SELECT_BUTTON; + } + if ((gRealInputs.pressed & START_BUTTON) != 0) { + return INPUT_START_BUTTON; + } + if ((gRealInputs.repeated & DPAD_UP) != 0) { + return INPUT_DPAD_UP; + } + if ((gRealInputs.repeated & DPAD_DOWN) != 0) { + return INPUT_DPAD_DOWN; + } + if ((gRealInputs.repeated & DPAD_LEFT) != 0) { + return INPUT_DPAD_LEFT; + } + if ((gRealInputs.repeated & DPAD_RIGHT) != 0) { + return INPUT_DPAD_RIGHT; + } + if ((gRealInputs.repeated & L_BUTTON) != 0) { + return INPUT_L_BUTTON; + } + } + return INPUT_NONE; +} + void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 color, u32 param_6) { s32 iVar1; diff --git a/src/menu_input_1.c b/src/menu_input_1.c index 04a33b326..ae7f75242 100644 --- a/src/menu_input_1.c +++ b/src/menu_input_1.c @@ -2,17 +2,15 @@ #include "constants/input.h" #include "input.h" #include "text.h" +#include "menu_input.h" extern struct UnkTextStruct1 gUnknown_2027370[4]; extern void PlayMenuSoundEffect(u32); -extern void AddMenuCursorSprite(struct MenuInputStruct *); extern void sub_8013A7C(struct MenuInputStruct *); extern void sub_8013A54(struct MenuInputStruct *); -extern s32 GetKeyPress(struct MenuInputStruct *); extern void MoveMenuCursorUp(struct MenuInputStruct *); extern void MoveMenuCursorDown(struct MenuInputStruct *); void sub_8013984(struct MenuInputStruct *); -void sub_801317C(struct MenuInputStructSub *); void sub_80137F8(struct MenuInputStruct *, u32); s32 sub_8013800(struct MenuInputStruct *param_1, s32 param_2); void UpdateMenuCursorSpriteCoords(struct MenuInputStruct *param_1); diff --git a/src/more_input.c b/src/more_input.c deleted file mode 100644 index 8b4deee92..000000000 --- a/src/more_input.c +++ /dev/null @@ -1,113 +0,0 @@ -#include "global.h" -#include "constants/input.h" -#include "input.h" - - -extern void nullsub_34(struct MenuInputStructSub *r0); -u32 sub_8012AE8(void); - -u32 sub_8012A64(struct MenuInputStructSub *r0, u32 r1) -{ - if(r0 == NULL) - { - return sub_8012AE8(); - } - if(r1 != -1) - { - nullsub_34(r0); - } - if(r0->a_button != 0) - { - r0->a_button = 0; - return INPUT_A_BUTTON; - } - else if(r0->b_button == 0) - { - return sub_8012AE8(); - } - else - { - r0->b_button = 0; - return INPUT_B_BUTTON; - } -} - -u32 GetKeyPress(struct MenuInputStruct *r0) -{ - if(r0 != NULL) - { - if(r0->unk28.a_button != 0) - { - return INPUT_A_BUTTON; - } - if(r0->unk28.b_button != 0) - { - return INPUT_B_BUTTON; - } - if(r0->unk28.dpad_left != 0) - { - return INPUT_DPAD_LEFT; - } - if(r0->unk28.dpad_right != 0) - { - return INPUT_DPAD_RIGHT; - } - } - return sub_8012AE8(); -} - -u32 sub_8012AE8(void) -{ - if ((gRealInputs.held & R_BUTTON) != 0) { - if ((gRealInputs.pressed & A_BUTTON) != 0) { - return INPUT_R_A_BUTTONS; - } - if ((gRealInputs.repeated & DPAD_UP) != 0) { - return INPUT_R_DPAD_UP_BUTTONS; - } - if ((gRealInputs.repeated & DPAD_DOWN) != 0) { - return INPUT_R_DPAD_DOWN_BUTTONS; - } - if ((gRealInputs.repeated & DPAD_LEFT) != 0) { - return INPUT_R_DPAD_LEFT_BUTTONS; - } - if ((gRealInputs.repeated & DPAD_RIGHT) != 0) { - return INPUT_R_DPAD_RIGHT_BUTTONS; - } - if ((gRealInputs.repeated & R_BUTTON) != 0) { - return INPUT_R_BUTTON; - } - } - else - { - if ((gRealInputs.pressed & A_BUTTON) != 0) { - return INPUT_A_BUTTON; - } - if ((gRealInputs.pressed & B_BUTTON) != 0) { - return INPUT_B_BUTTON; - } - if ((gRealInputs.pressed & SELECT_BUTTON) != 0) { - return INPUT_SELECT_BUTTON; - } - if ((gRealInputs.pressed & START_BUTTON) != 0) { - return INPUT_START_BUTTON; - } - if ((gRealInputs.repeated & DPAD_UP) != 0) { - return INPUT_DPAD_UP; - } - if ((gRealInputs.repeated & DPAD_DOWN) != 0) { - return INPUT_DPAD_DOWN; - } - if ((gRealInputs.repeated & DPAD_LEFT) != 0) { - return INPUT_DPAD_LEFT; - } - if ((gRealInputs.repeated & DPAD_RIGHT) != 0) { - return INPUT_DPAD_RIGHT; - } - if ((gRealInputs.repeated & L_BUTTON) != 0) { - return INPUT_L_BUTTON; - } - } - return INPUT_NONE; -} - diff --git a/src/options_menu.c b/src/options_menu.c index 7a72e9960..dc555adb2 100644 --- a/src/options_menu.c +++ b/src/options_menu.c @@ -23,9 +23,7 @@ struct unkStruct_203B25C struct unkStruct_203B260 { struct GameOptions *optionsMenu; - u32 unk4; - u8 unk8; - u8 fill9[0x10 - 0x9]; + struct MenuInputStructSub unk4; struct MenuInputStruct input; u32 unk44; struct UnkTextStruct2 * unk48; @@ -62,8 +60,6 @@ extern void CreateOthersMenu(void); extern void sub_80078A4(u32, u32, u32, u32, u32); extern u8 sub_80138B8(void *, u32); void PlayMenuSoundEffect(u32); -s32 sub_8012AE8(void); -void sub_801317C(u32 *); extern void sub_8013818(void *, u32, u32, u32); void CreateOptionsMenu(void); void nullsub_38(void); diff --git a/src/party_list_menu.c b/src/party_list_menu.c index 0cb81baff..1d0754fbe 100644 --- a/src/party_list_menu.c +++ b/src/party_list_menu.c @@ -172,7 +172,6 @@ extern u32 sub_801EF38(u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern void sub_808D930(u8 *, s16); extern s32 sub_8008ED0(u8 *); extern void xxx_format_and_draw(s32, s32, const u8 *, ...); extern s32 sub_80144A4(s32 *); diff --git a/src/personality_test.c b/src/personality_test.c index 2f1919a37..c5e191171 100644 --- a/src/personality_test.c +++ b/src/personality_test.c @@ -13,6 +13,7 @@ #include "text.h" #include "text_util.h" #include "menu.h" +#include "menu_input.h" enum { @@ -37,7 +38,6 @@ enum EWRAM_DATA_2 struct PersonalityTestTracker *gPersonalityTestTracker = {0}; EWRAM_DATA_2 struct PersonalityStruct_203B404 *gUnknown_203B404 = {0}; -extern void sub_801317C(u32 *); extern void sub_8001024(u32 *); extern s32 sub_8094E4C(void); extern void sub_8094D28(s32); @@ -63,14 +63,12 @@ extern void SetBGPaletteBufferColorArray(s32 index, u8 *colorArray); extern void RedrawPartnerSelectionMenu(void); extern void sub_8013818(struct MenuInputStruct *r0, s32, u32, u32); -extern u32 GetKeyPress(struct MenuInputStruct *r0); extern u8 sub_80138B8(struct MenuInputStruct *r0, u32); extern void PlayMenuSoundEffect(u32); extern void sub_8013984(struct MenuInputStruct *r0); u32 sub_8013800(struct MenuInputStruct *r0, u32); -extern void AddMenuCursorSprite(struct MenuInputStruct *r0); extern u32 sub_80095E4(s16, u32); extern struct GameOptions *gGameOptionsRef; @@ -410,7 +408,7 @@ const char personality_test_fill[] = "pksdir0"; u8 CreateTestTracker(void) { gPersonalityTestTracker = MemoryAlloc(sizeof(struct PersonalityTestTracker),8); - sub_801317C(&gPersonalityTestTracker->unkb4); + sub_801317C(&gPersonalityTestTracker->input); InitializeTestStats(); sub_8099690(1); return 1; diff --git a/src/pokemon_news.c b/src/pokemon_news.c index 1dfc5a2e3..1ccc3df8c 100644 --- a/src/pokemon_news.c +++ b/src/pokemon_news.c @@ -32,8 +32,7 @@ struct unkStruct_203B2D4 u32 unk20; u32 unk24; struct UnkTextStruct2 unk28[4]; - u32 unk88; - u8 fill8C[0x94 - 0x8C]; + struct MenuInputStructSub unk88; }; extern struct unkStruct_203B2D4 *gUnknown_203B2D4; @@ -158,12 +157,9 @@ extern void CreatePKMNNewsMenu(void); extern void sub_8013818(void *, u32, u32, u32); extern u8 sub_80138B8(void *, u32); extern void PlayMenuSoundEffect(u32); -extern s32 GetKeyPress(struct MenuInputStruct *); extern void sub_8013660(struct MenuInputStruct *); -extern void AddMenuCursorSprite(struct MenuInputStruct *); extern void sub_802BCC4(void); extern void sub_802BB14(u32); -extern void sub_801317C(u32 *); extern u8 HasNoMailinMailbox(void); extern void sub_802BF30(void); extern void CreateMailMenu(void); @@ -174,7 +170,6 @@ extern void sub_802BB98(void); extern void sub_802BC08(void); extern void sub_802BB28(void); extern void sub_8013E54(void); -extern s32 sub_8012A64(u32 *, u32); extern char gUnknown_202E5D8[0x50]; extern char gAvailablePokemonNames[0x50]; extern void sub_8008C54(u32); diff --git a/src/post_office_guide.c b/src/post_office_guide.c index c70c969ec..b0a2a6d5f 100644 --- a/src/post_office_guide.c +++ b/src/post_office_guide.c @@ -7,7 +7,9 @@ #include "memory.h" #include "text.h" #include "wonder_mail.h" +#include "code_800D090.h" #include "code_8094F88.h" +#include "menu_input.h" struct PostOfficeHelper { @@ -178,7 +180,6 @@ extern u8 gAvailablePokemonNames[]; extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, struct OpenedFile **r5, u32); -extern u32 sub_8012A64(struct MenuInputStructSub *, u32); extern void PlayMenuSoundEffect(u32); extern void sub_8031A84(); extern void DisplayMissionObjectives(); @@ -189,13 +190,11 @@ extern u8 sub_8099394(volatile u8 *); extern struct WonderMail *GetJobSlotInfo(u8); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern void sprintfStatic(char *buffer, const char *text, ...); extern void sub_803B6B0(u32, u32, u32, u32); extern s16 sub_80A2688(u8 r0); extern u8 sub_80992E0(s16 *, s16 *); extern void sub_8031A2C(void); -extern void sub_801317C(void *); void UpdateHelperPelipperState(u8); void HandlePostOfficeHelpStartMenuSelection(); @@ -208,8 +207,6 @@ extern void HandlePostOfficeHelpGetHelpMenuSelection(); extern void ReturnToGetHelpMenu(); extern s32 sub_80144A4(s32 *); extern s32 CountJobsinDungeon(u8); -extern void sub_8012D08(struct UnkTextStruct2 *, s32); - u32 CreateHelperPelipperMenu(s16 speciesID) { diff --git a/src/wigglytuff_shop.c b/src/wigglytuff_shop.c index 02a9989c9..86a4c30fa 100644 --- a/src/wigglytuff_shop.c +++ b/src/wigglytuff_shop.c @@ -11,13 +11,6 @@ #include "friend_area.h" #include "wigglytuff_shop.h" -struct unkStruct_8092638 -{ - u32 unk0; - bool8 hasFriendArea; - u32 unk5; -}; - extern struct UnkTextStruct2 gUnknown_80DC534; extern struct UnkTextStruct2 gUnknown_80DC564; extern struct UnkTextStruct2 gUnknown_80DC54C; @@ -63,8 +56,7 @@ extern void PlaySound(u32); 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 sub_8022420(void); -extern void sub_8092638(u8,struct unkStruct_8092638 *, u32, u32); +extern void CreateWigglytuffConfirmFriendAreaMenu(void); extern u8 sub_8099B94(void); extern void sub_8099AFC(u32, u32, u32); extern void sub_8099A5C(u32, u32, u32); @@ -76,7 +68,7 @@ s16 sub_802331C(void); void sub_8022460(void); void sub_8022538(void); void sub_80225C8(void); -void sub_80224D4(void); +void HandleWigglytuffConfirmFriendAreaMenu(void); void sub_80226F0(void); void sub_8022790(void); void sub_8022668(void); @@ -116,7 +108,7 @@ bool8 CreateWigglytuffShop(bool32 isAsleep) gWigglytuffShop->unkCA = 0; gWigglytuffShop->unkC4 = 2; gWigglytuffShop->unkC6 = 8; - SetWigglytuffState(0); + SetWigglytuffState(WIGGLYTUFF_INIT); return TRUE; } @@ -124,34 +116,34 @@ u32 sub_8021C5C(void) { switch(gWigglytuffShop->state) { - case 0: - case 1: + case WIGGLYTUFF_INIT: + case WIGGLYTUFF_MAIN_MENU: sub_8022460(); break; - case 9: - case 10: + case WIGGLYTUFF_UNK9: + case WIGGLYTUFF_UNKA: sub_8022538(); break; - case 0xb: + case WIGGLYTUFF_UNKB: sub_80225C8(); break; - case 0x11: - sub_80224D4(); + case BUY_FRIEND_AREA: + HandleWigglytuffConfirmFriendAreaMenu(); break; - case 0xd: + case WIGGLYTUFF_UNKD: sub_80226F0(); break; - case 0xe: + case WIGGLYTUFF_UNKE: sub_8022790(); break; - case 0x10: + case FRIEND_AREA_INFO: sub_8022668(); break; - case 0x16: - case 0x17: + case WIGGLYTUFF_UNK16: + case WIGGLYTUFF_UNK17: sub_8022684(); break; - case 4: + case WIGGLYTUFF_EXIT: return 3; default: sub_80226CC(); @@ -184,16 +176,15 @@ void sub_8021D5C(void) sub_8006518(gWigglytuffShop->unkD0); switch(gWigglytuffShop->state) { - case 0x9: - case 0xA: + case WIGGLYTUFF_UNK9: + case WIGGLYTUFF_UNKA: gWigglytuffShop->unkD0[0] = gUnknown_80DC534; gWigglytuffShop->unkD0[2] = gUnknown_80DC534; gWigglytuffShop->unkD0[1] = gUnknown_80DC564; break; - case 0xB: + case WIGGLYTUFF_UNKB: gWigglytuffShop->unkD0[2] = gUnknown_80DC54C; break; - break; default: for(index = 0; index < 4; index++) { @@ -213,114 +204,114 @@ void UpdateWigglytuffDialogue(void) switch(gWigglytuffShop->state) { - case 0: + case WIGGLYTUFF_INIT: sub_80222C8(); sub_8014248(gWigglytuffDialogue[gWigglytuffShop->isAsleep][0],0,gWigglytuffShop->menuAction1,gWigglytuffShop->unk1C,gWigglytuffShop->unk5C,4,0,gWigglytuffShop->unkCC,0xc); break; - case 1: + case WIGGLYTUFF_MAIN_MENU: sub_80222C8(); sub_8014248(gWigglytuffDialogue[gWigglytuffShop->isAsleep][1],0,gWigglytuffShop->menuAction1,gWigglytuffShop->unk1C,gWigglytuffShop->unk5C,4,0,gWigglytuffShop->unkCC,0xc); break; - case 7: - gWigglytuffShop->fallbackState = 9; + case FRIEND_AREA_SELECT_BUY: + gWigglytuffShop->fallbackState = WIGGLYTUFF_UNK9; sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][3],0,gWigglytuffShop->unkCC,0x10d); break; - case 8: - gWigglytuffShop->fallbackState = 10; + case FRIEND_AREA_SELECT_BUY_AGAIN: + gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKA; sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][4],0,gWigglytuffShop->unkCC,0x10d); break; - case 2: - gWigglytuffShop->fallbackState = 1; + case WIGGLYTUFF_INFO: + gWigglytuffShop->fallbackState = WIGGLYTUFF_MAIN_MENU; sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][19],0,gWigglytuffShop->unkCC,0x10d); break; - case 3: - gWigglytuffShop->fallbackState = 4; + case WIGGLYTUFF_PRE_EXIT: + gWigglytuffShop->fallbackState = WIGGLYTUFF_EXIT; sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][2],0,gWigglytuffShop->unkCC,0x30d); break; default: break; - case 5: - gWigglytuffShop->fallbackState = 3; + case WIGGLYTUFF_CANT_ADD_FRIEND_AREA: + gWigglytuffShop->fallbackState = WIGGLYTUFF_PRE_EXIT; sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][8],0,gWigglytuffShop->unkCC,0x10d); break; - case 6: - gWigglytuffShop->fallbackState = 10; + case NO_MONEY: + gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKA; sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][9],0,gWigglytuffShop->unkCC,0x10d); break; - case 0x12: - gWigglytuffShop->fallbackState = 3; + case NO_FRIEND_AREAS: + gWigglytuffShop->fallbackState = WIGGLYTUFF_PRE_EXIT; sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][10],0,gWigglytuffShop->unkCC,0x10d); break; - case 0x13: - gWigglytuffShop->fallbackState = 10; + case NOT_ENOUGH_MONEY: + gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKA; sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][11],0,gWigglytuffShop->unkCC,0x10d); break; - case 9: + case WIGGLYTUFF_UNK9: sub_80211AC(2,3); DrawTeamMoneyBox(1); break; - case 10: + case WIGGLYTUFF_UNKA: sub_8021354(1); DrawTeamMoneyBox(1); break; - case 0xb: + case WIGGLYTUFF_UNKB: sub_8021494(); DrawTeamMoneyBox(1); sub_8022380(); sub_8012D60(&gWigglytuffShop->unk6C,gWigglytuffShop->unk1C,0,gWigglytuffShop->unk5C, gWigglytuffShop->menuAction2,2); break; - case 0x11: - sub_8022420(); + case BUY_FRIEND_AREA: + CreateWigglytuffConfirmFriendAreaMenu(); sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0); gUnknown_202DE30[0] = gWigglytuffShop->friendAreaPrice; sub_8014248(gWigglytuffDialogue[gWigglytuffShop->isAsleep][5],0,5,gWigglytuffShop->unk1C,0,4,0,gWigglytuffShop->unkCC,0xc); break; - case 0x10: + case FRIEND_AREA_INFO: sub_8021774(gWigglytuffShop->chosenFriendArea,0,2); break; - case 0xc: - gWigglytuffShop->fallbackState = 0xd; + case CONFIRM_BUY_FRIEND_AREA: + gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKD; sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0); sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][6],0,gWigglytuffShop->unkCC,0x10d); break; - case 0xd: - gWigglytuffShop->fallbackState = 0xe; + case WIGGLYTUFF_UNKD: + gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKE; PlaySound(0x25b); gWigglytuffShop->unk130 = 1; break; - case 0xe: - gWigglytuffShop->fallbackState = 0xf; - gWigglytuffShop->unk134 = 0x1e; + case WIGGLYTUFF_UNKE: + gWigglytuffShop->fallbackState = FRIEND_AREA_UNLOCKED; + gWigglytuffShop->unk134 = 30; break; - case 0xf: + case FRIEND_AREA_UNLOCKED: if (sub_8021700(2) != 0) { sub_80213A0(); - gWigglytuffShop->fallbackState = 0x12; + gWigglytuffShop->fallbackState = NO_FRIEND_AREAS; } else { - gWigglytuffShop->fallbackState = 8; + gWigglytuffShop->fallbackState = FRIEND_AREA_SELECT_BUY_AGAIN; } PlaySound(0xce); sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][7],0,gWigglytuffShop->unkCC,0x10d); break; - case 0x14: - gWigglytuffShop->fallbackState = 0x16; + case WIGGLYTUFF_CHECK: + gWigglytuffShop->fallbackState = WIGGLYTUFF_UNK16; sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][12],0,gWigglytuffShop->unkCC,0x10d); break; - case 0x15: - gWigglytuffShop->fallbackState = 0x17; + case WIGGLYTUFF_CHECK_AGAIN: + gWigglytuffShop->fallbackState = WIGGLYTUFF_UNK17; sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][13],0,gWigglytuffShop->unkCC,0x10d); break; - case 0x16: + case WIGGLYTUFF_UNK16: sub_8023144(0,3,0,10); break; - case 0x17: + case WIGGLYTUFF_UNK17: sub_8023354(1); break; - case 0x18: + case DISPLAY_POKEMON_FRIEND_AREA_INFO: sub_8092638(gWigglytuffShop->chosenFriendArea,&uStack_14,0,0); if (uStack_14.hasFriendArea) { - gWigglytuffShop->fallbackState = 0x19; + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_HAS_FRIEND_AREA; } else { @@ -328,20 +319,20 @@ void UpdateWigglytuffDialogue(void) { case UNLOCK_SHOP_POST_GAME: if (sub_80023E4(6) != 0) { - gWigglytuffShop->fallbackState = 0x15; + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN; } else { - gWigglytuffShop->fallbackState = 0x1a; + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_POST_GAME; } break; case UNLOCK_WONDER_MAIL: - gWigglytuffShop->fallbackState = 0x1b; + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_WONDER_MAIL; break; case UNLOCK_LEGENDARY_REQUEST: - gWigglytuffShop->fallbackState = 0x1c; + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_LEGENDARY; break; default: - gWigglytuffShop->fallbackState = 0x15; + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN; break; } } @@ -350,20 +341,20 @@ void UpdateWigglytuffDialogue(void) sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0); sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][14],0,gWigglytuffShop->unkCC,0x10d); break; - case 0x19: - gWigglytuffShop->fallbackState = 0x15; + case WIGGLYTUFF_CHECK_HAS_FRIEND_AREA: + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN; sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][15],0,gWigglytuffShop->unkCC,0x10d); break; - case 0x1a: - gWigglytuffShop->fallbackState = 0x15; + case WIGGLYTUFF_CHECK_POST_GAME: + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN; sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][16],0,gWigglytuffShop->unkCC,0x10d); break; - case 0x1b: - gWigglytuffShop->fallbackState = 0x15; + case WIGGLYTUFF_CHECK_WONDER_MAIL: + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN; sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][17],0,gWigglytuffShop->unkCC,0x10d); break; - case 0x1c: - gWigglytuffShop->fallbackState = 0x15; + case WIGGLYTUFF_CHECK_LEGENDARY: + gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN; sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][18],0,gWigglytuffShop->unkCC,0x10d); break; } @@ -374,16 +365,16 @@ void sub_80222C8(void) s32 i; s32 index = 0; MemoryFill16(gWigglytuffShop->unk5C, 0, sizeof(gWigglytuffShop->unk5C)); - gWigglytuffShop->unk1C[index].text = *gUnknown_80D4978; + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4978; // Buy gWigglytuffShop->unk1C[index].menuAction = 2; index++; - gWigglytuffShop->unk1C[index].text = *gWigglytuffCheck; + gWigglytuffShop->unk1C[index].text = *gWigglytuffCheck; // Check gWigglytuffShop->unk1C[index].menuAction = 3; index++; - gWigglytuffShop->unk1C[index].text = *gUnknown_80D4970; + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4970; // Info gWigglytuffShop->unk1C[index].menuAction = 4; index++; - gWigglytuffShop->unk1C[index].text = *gUnknown_80D4934; + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4934; // Cancel gWigglytuffShop->unk1C[index].menuAction = 1; index++; gWigglytuffShop->unk1C[index].text = NULL; @@ -409,10 +400,10 @@ void sub_8022380(void) s32 i; s32 index = 0; MemoryFill16(gWigglytuffShop->unk5C, 0, sizeof(gWigglytuffShop->unk5C)); - gWigglytuffShop->unk1C[index].text = *gUnknown_80D4978; + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4978; // Buy gWigglytuffShop->unk1C[index].menuAction = 2; index++; - gWigglytuffShop->unk1C[index].text = *gUnknown_80D4970; + gWigglytuffShop->unk1C[index].text = *gUnknown_80D4970; // Info gWigglytuffShop->unk1C[index].menuAction = 4; index++; gWigglytuffShop->unk1C[index].text = NULL; @@ -433,7 +424,7 @@ void sub_8022380(void) } } -void sub_8022420(void) +void CreateWigglytuffConfirmFriendAreaMenu(void) { s32 index = 0; MemoryFill16(gWigglytuffShop->unk5C, 0, sizeof(gWigglytuffShop->unk5C)); @@ -460,26 +451,26 @@ void sub_8022460(void) { case 2: if (sub_8021700(2) != 0) { - SetWigglytuffState(5); + SetWigglytuffState(WIGGLYTUFF_CANT_ADD_FRIEND_AREA); } else { - SetWigglytuffState(7); + SetWigglytuffState(FRIEND_AREA_SELECT_BUY); } break; case 3: - SetWigglytuffState(0x14); + SetWigglytuffState(WIGGLYTUFF_CHECK); break; case 4: - SetWigglytuffState(2); + SetWigglytuffState(WIGGLYTUFF_INFO); break; case 1: - SetWigglytuffState(3); + SetWigglytuffState(WIGGLYTUFF_PRE_EXIT); break; } } } -void sub_80224D4(void) +void HandleWigglytuffConfirmFriendAreaMenu(void) { s32 menuAction; @@ -490,11 +481,11 @@ void sub_80224D4(void) gTeamInventory_203B460->teamMoney -= gWigglytuffShop->friendAreaPrice; UnlockFriendArea(gWigglytuffShop->chosenFriendArea); PlaySound(0x14C); - SetWigglytuffState(0xC); + SetWigglytuffState(CONFIRM_BUY_FRIEND_AREA); break; case 1: case 6: - SetWigglytuffState(0xA); + SetWigglytuffState(WIGGLYTUFF_UNKA); break; } } @@ -507,18 +498,18 @@ void sub_8022538(void) case 3: gWigglytuffShop->chosenFriendArea = sub_802132C(); gWigglytuffShop->friendAreaPrice = GetFriendAreaPrice(gWigglytuffShop->chosenFriendArea); - SetWigglytuffState(0xB); + SetWigglytuffState(WIGGLYTUFF_UNKB); break; case 4: gWigglytuffShop->chosenFriendArea = sub_802132C(); gWigglytuffShop->friendAreaPrice = GetFriendAreaPrice(gWigglytuffShop->chosenFriendArea); - SetWigglytuffState(0x10); + SetWigglytuffState(FRIEND_AREA_INFO); break; case 0: break; case 2: sub_80213A0(); - SetWigglytuffState(1); + SetWigglytuffState(WIGGLYTUFF_MAIN_MENU); break; case 1: default: @@ -541,22 +532,22 @@ void sub_80225C8(void) case 2: if(gTeamInventory_203B460->teamMoney == 0) { - SetWigglytuffState(6); + SetWigglytuffState(NO_MONEY); } else if(gWigglytuffShop->friendAreaPrice > gTeamInventory_203B460->teamMoney) { - SetWigglytuffState(0x13); + SetWigglytuffState(NOT_ENOUGH_MONEY); } else { - SetWigglytuffState(0x11); + SetWigglytuffState(BUY_FRIEND_AREA); } break; case 4: - SetWigglytuffState(0x10); + SetWigglytuffState(FRIEND_AREA_INFO); break; case 1: - SetWigglytuffState(10); + SetWigglytuffState(WIGGLYTUFF_UNKA); break; } } @@ -568,7 +559,7 @@ void sub_8022668(void) case 2: case 3: sub_8021830(); - SetWigglytuffState(0xA); + SetWigglytuffState(WIGGLYTUFF_UNKA); break; case 0: case 1: @@ -583,11 +574,11 @@ void sub_8022684(void) case 3: gWigglytuffShop->chosenSpecies = sub_802331C(); gWigglytuffShop->chosenFriendArea = GetFriendArea(gWigglytuffShop->chosenSpecies); - SetWigglytuffState(0x18); + SetWigglytuffState(DISPLAY_POKEMON_FRIEND_AREA_INFO); break; case 2: sub_80233A0(); - SetWigglytuffState(1); + SetWigglytuffState(WIGGLYTUFF_MAIN_MENU); break; case 0: case 1: diff --git a/src/wonder_mail_2_1.c b/src/wonder_mail_2_1.c index 381dfe63c..e762cbc94 100644 --- a/src/wonder_mail_2_1.c +++ b/src/wonder_mail_2_1.c @@ -108,9 +108,7 @@ extern void CreateRescueTitle(struct unkStruct_802C39C *); extern void sub_8013984(struct MenuInputStruct*); extern void sub_802C6DC(void); extern void DrawJobListMenu(void); -extern void AddMenuCursorSprite(struct MenuInputStruct*); extern u8 sub_80138B8(struct MenuInputStruct*, u32); -extern s32 GetKeyPress(struct MenuInputStruct*); extern void PlayMenuSoundEffect(u32); extern void sub_8013660(void *); extern void sub_8013848(struct MenuInputStruct*, s32, u32, u32); diff --git a/src/wonder_mail_2_mid.c b/src/wonder_mail_2_mid.c index 488a33909..f6aa0ebaf 100644 --- a/src/wonder_mail_2_mid.c +++ b/src/wonder_mail_2_mid.c @@ -18,9 +18,7 @@ extern void sub_802C328(void); extern void DrawPelipperBoardJobMenu(void); extern void PlayMenuSoundEffect(u32); extern void sub_8013660(struct MenuInputStruct *); -extern s32 GetKeyPress(struct MenuInputStruct *); extern bool8 sub_80138B8(struct MenuInputStruct *, u32); -extern void AddMenuCursorSprite(struct MenuInputStruct *); extern u8 HasNoPelipperBoardJobs(void); extern void sub_8008C54(u32); extern void sub_80073B8(u32); diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index dcf3c36eb..345fe0d3a 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -158,10 +158,8 @@ extern u8 gUnknown_80DFDBC[]; extern void sub_802CF5C(void); extern void sub_802CFD0(void); extern void sub_8013984(struct MenuInputStruct *); -extern void AddMenuCursorSprite(struct MenuInputStruct *); extern u8 sub_80138B8(struct MenuInputStruct *, u32); extern void sub_8013660(struct MenuInputStruct *); -extern u32 GetKeyPress(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); extern void sub_8013848(struct MenuInputStruct *, s32, u32, u32); diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index 89534d7db..b32060a6e 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -99,7 +99,6 @@ extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); extern u32 sub_802FBF4(void); extern void sub_8013878(struct MenuInputStruct *, s32); -extern void AddMenuCursorSprite(struct MenuInputStruct *); extern void sub_8013984(struct MenuInputStruct *); extern void SetRewardSceneState(u32); extern void sub_802EFEC(u32); @@ -128,7 +127,6 @@ extern void sub_802F6FC(void); extern void ProceedToNextRewardSceneState(void); extern u8 sub_80138B8(struct MenuInputStruct*, u32); extern void sub_8013660(struct MenuInputStruct *); -extern u32 GetKeyPress(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); extern void sub_802F300(void); extern void PlaySound(u32); diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index efc369eb5..894abbd19 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -78,15 +78,12 @@ extern bool8 HasNoWonderMailType(u32); extern s32 sub_8030A74(void); extern void sub_80308A0(void); extern void sub_803092C(void); -extern void sub_8012D08(struct UnkTextStruct2 *, s32); extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); extern u8 sub_80138B8(struct MenuInputStruct*, u32); extern void sub_8013660(struct MenuInputStruct*); -extern s32 GetKeyPress(struct MenuInputStruct*); extern void PlayMenuSoundEffect(u32); extern void sub_8013984(struct MenuInputStruct*); -extern void AddMenuCursorSprite(struct MenuInputStruct*); extern s32 sub_8013800(struct MenuInputStruct*, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); diff --git a/src/wonder_mail_5.c b/src/wonder_mail_5.c index 5082515c5..3ccf667be 100644 --- a/src/wonder_mail_5.c +++ b/src/wonder_mail_5.c @@ -8,11 +8,12 @@ #include "code_8094F88.h" #include "code_800D090.h" #include "code_802C39C.h" +#include "menu_input.h" struct unkStruct_203B324 { // size: 0x78 - u8 fill0[0xC]; + struct MenuInputStructSub unk0; u8 mailIndex; u32 unk10; struct UnkTextStruct2 *unk14; @@ -47,9 +48,7 @@ const u8 gUnknown_80E0938[] = "%-4d"; static const u8 wonder_mail_fill[] = "pksdir0"; extern void sub_8030DD4(void); -extern void sub_801317C(void *); extern void PlayMenuSoundEffect(u32); -extern u32 sub_8012A64(void *, u32); extern void CreateRescueDescription(struct unkStruct_802C39C *); extern void sub_80073E0(u32); extern void sub_80073B8(u32); @@ -61,7 +60,7 @@ bool8 sub_8030D40(u8 mailIndex, s32 param_2) { gUnknown_203B324 = MemoryAlloc(sizeof(struct unkStruct_203B324), 8); gUnknown_203B324->mailIndex = mailIndex; - sub_801317C(gUnknown_203B324); + sub_801317C(&gUnknown_203B324->unk0); gUnknown_203B324->unk10 = param_2; gUnknown_203B324->unk14 = &gUnknown_203B324->unk18[param_2]; sub_8006518(gUnknown_203B324->unk18); @@ -72,7 +71,7 @@ bool8 sub_8030D40(u8 mailIndex, s32 param_2) u8 sub_8030DA0(void) { - switch(sub_8012A64(gUnknown_203B324, gUnknown_203B324->unk10)) + switch(sub_8012A64(&gUnknown_203B324->unk0, gUnknown_203B324->unk10)) { case 2: PlayMenuSoundEffect(1); diff --git a/src/wonder_mail_802DF88.c b/src/wonder_mail_802DF88.c index c747bc2ec..f90829d78 100644 --- a/src/wonder_mail_802DF88.c +++ b/src/wonder_mail_802DF88.c @@ -4,6 +4,7 @@ #include "memory.h" #include "code_802C39C.h" #include "wonder_mail.h" +#include "menu_input.h" struct unkStruct_203B2FC { @@ -33,7 +34,7 @@ extern struct unkStruct_203B2FC *gUnknown_203B2FC; struct unkStruct_203B300 { // size: 0x7C - u8 fill0[0xC]; + struct MenuInputStructSub unk0; struct unkStruct_802C39C *unkC; u32 unk10; struct UnkTextStruct2 *unk14; @@ -104,7 +105,6 @@ extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern void CreateRescueDescription(struct unkStruct_802C39C *); extern void PlayMenuSoundEffect(u32); -extern s32 sub_8012A64(void *, u32); extern s32 sub_80144A4(s32 *); extern void sub_802DC28(u32); extern void sub_802F2C0(void); @@ -129,7 +129,6 @@ void sub_802DE60(void); void sub_802DF6C(void); void sub_802DF88(void); void sub_802DF14(void); -void sub_801317C(void); void sub_802D1A0(u32); u32 sub_802DEE0(void); void sub_802DF24(void); @@ -313,7 +312,7 @@ u32 sub_802DE84(struct unkStruct_802C39C *r0) { gUnknown_203B300 = MemoryAlloc(sizeof(struct unkStruct_203B300), 8); gUnknown_203B300->unkC = r0; - sub_801317C(); + sub_801317C(&gUnknown_203B300->unk0); gUnknown_203B300->unk10 = gUnknown_203B300->unkC->unk0[0]; gUnknown_203B300->unk14 = &gUnknown_203B300->unk18[gUnknown_203B300->unk10]; sub_8006518(gUnknown_203B300->unk18); @@ -324,7 +323,7 @@ u32 sub_802DE84(struct unkStruct_802C39C *r0) u32 sub_802DEE0(void) { - switch(sub_8012A64(gUnknown_203B300, gUnknown_203B300->unk10)) + switch(sub_8012A64(&gUnknown_203B300->unk0, gUnknown_203B300->unk10)) { case 2: PlayMenuSoundEffect(1); From eb19398b4f20afcfbb455b90365ea47062655f96 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 28 Jul 2023 11:10:45 -0700 Subject: [PATCH 15/26] combine event_flag files --- asm/event_flag_1.s | 45 ---- include/event_flag.h | 22 +- ld_script.txt | 2 - src/code.c | 2 +- src/code_80972F4.c | 4 +- src/event_flag.c | 569 ++++++++++++++++++++++++++++++++++++++++++- src/event_flag_1.c | 569 ------------------------------------------- src/ground_main.c | 5 +- 8 files changed, 586 insertions(+), 632 deletions(-) delete mode 100644 asm/event_flag_1.s delete mode 100644 src/event_flag_1.c diff --git a/asm/event_flag_1.s b/asm/event_flag_1.s deleted file mode 100644 index c3cf362fa..000000000 --- a/asm/event_flag_1.s +++ /dev/null @@ -1,45 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8002658 -sub_8002658: - push {r4,r5,lr} - lsls r0, 16 - asrs r4, r0, 16 - ldr r1, _0800267C - ldrh r2, [r1] - movs r3, 0 - ldrsh r0, [r1, r3] - movs r3, 0x1 - negs r3, r3 - cmp r0, r3 - beq _0800268C -_0800266E: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, r4 - bne _08002680 - ldrb r0, [r1, 0x2] - b _0800268E - .align 2, 0 -_0800267C: .4byte gUnknown_80B71E4 -_08002680: - adds r1, 0x4 - ldrh r2, [r1] - movs r5, 0 - ldrsh r0, [r1, r5] - cmp r0, r3 - bne _0800266E -_0800268C: - movs r0, 0 -_0800268E: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8002658 - - .align 2,0 diff --git a/include/event_flag.h b/include/event_flag.h index 466a4b344..0fd643364 100644 --- a/include/event_flag.h +++ b/include/event_flag.h @@ -4,14 +4,32 @@ struct UnkEventStruct { /* 0x0 */ s16 *unk0; - /* 0x4 */ u32 *unk4; + /* 0x4 */ u8 *unk4; }; + +void sub_8001B88(s32 param_1,u32 *param_2,u32 *param_3); +void ScenarioCalc(s16 param_1, s32 param_2, s32 param_3); +bool8 sub_8001CC4(s16 param_1, u32 param_2, s32 param_3); +bool8 sub_8001D08(s16 param_1, u32 param_2, s32 param_3); +bool8 sub_8001D44(s16 param_1, u32 param_2, s32 param_3); +void sub_8001D88(void); +u32 _FlagCalc(s32 param_1, s32 param_2, u32 operation); +u8 _FlagJudge(s32 param_1, s32 param_2, u32 operation); +u32 FlagCalc(s32 r0, s32 r1, u32 operation); +void sub_800226C(u32 param_1, s16 param_2, s32 param_3, u32 operation); +void sub_80022A0(u32 param_1, s16 param_2, s16 param_3, u32 operation); +u8 FlagJudge(s32 r0, s32 r1, u32 operation); +u8 sub_80022F8(u32 param_1, s16 param_2, s32 param_3, u32 operation); +u8 sub_8002318(u32 param_1, s16 param_2, s16 param_3, u32 operation); +bool8 sub_80023E4(u32 param_1); +u8 sub_8002658(s16 param_1); +s16 sub_8002694(u8 param_1); bool8 sub_80026CC(s16 r0); void sub_80026E8(s16 r0); bool8 sub_8002700(void *r0); bool8 sub_8002718(u8 *r0); -void sub_8002758(u32 *r0); +void sub_8002758(s32 r0); u8 sub_800276C(void); #endif // GUARD_EVENT_FLAG_H diff --git a/ld_script.txt b/ld_script.txt index 1a52aceb2..f36a2857b 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -47,8 +47,6 @@ SECTIONS { asm/code_2.o(.text); src/code.o(.text); asm/event_flag.o(.text); - src/event_flag_1.o(.text); - asm/event_flag_1.o(.text); src/event_flag.o(.text); asm/code_8002774.o(.text); src/memory.o(.text); diff --git a/src/code.c b/src/code.c index 348465b0d..03d146058 100644 --- a/src/code.c +++ b/src/code.c @@ -1,4 +1,5 @@ #include "global.h" +#include "event_flag.h" extern void xxx_dungeon_8042F6C(u32 r0); extern void NDS_LoadOverlay_GroundMain(); @@ -49,7 +50,6 @@ struct unkStruct_80B7394 }; extern struct unkStruct_80B7394 gUnknown_80B7394[]; -void ScenarioCalc(s16 param_1,s32 param_2,s32 param_3); extern void sub_80015C0(u32, u32); extern void sub_800199C(u32, s32, u32, s32); extern void sub_80018D8(u32, u32, u32); diff --git a/src/code_80972F4.c b/src/code_80972F4.c index b3c2e5e9f..483f96218 100644 --- a/src/code_80972F4.c +++ b/src/code_80972F4.c @@ -5,6 +5,7 @@ #include "code_80958E8.h" #include "dungeon.h" #include "exclusive_pokemon.h" +#include "event_flag.h" struct MissionText { @@ -23,10 +24,7 @@ extern const u8 gDummyScenarioText[]; extern u8 sub_80A270C(s16); extern u8 sub_80A2728(s16); -extern bool8 sub_8001D08(u32, u32 ,s32); -extern u32 sub_8001784(u32, u32, u16); extern void sub_800199C(u8, u8, u16, s32); -extern bool8 sub_80023E4(u32); void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b); void RestoreWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b); diff --git a/src/event_flag.c b/src/event_flag.c index 06f8fd97d..14d353fc9 100644 --- a/src/event_flag.c +++ b/src/event_flag.c @@ -1,11 +1,18 @@ #include "global.h" +#include "constants/friend_area.h" +#include "constants/item.h" +#include "item.h" #include "event_flag.h" +#include "debug.h" #include "memory.h" #include "friend_area.h" +#include "rescue_team_info.h" +#include "other_random.h" +#include "friend_area.h" +#include "team_inventory.h" -extern void sub_800226C(u8 r0, u8 r1, u32* r2, u8 u3); -extern void sub_800160C(struct UnkEventStruct *r0, u32 r1, u32 r2); -extern u8 sub_8002658(s16); + +extern u8 gUnknown_2000A88[0x400]; struct unkEventStruct { @@ -16,7 +23,557 @@ struct unkEventStruct extern struct unkEventStruct gUnknown_80B71E4[58]; -extern u8 gUnknown_2000A88[0x400]; +struct unkStruct_80B6D90 +{ + u8 *text; + s32 num; +}; +extern struct unkStruct_80B6D90 gUnknown_80B6D90[]; + +extern u8 gUnknown_80B735C[]; +extern u32 gUnknown_80B7350; +extern u8 gUnknown_80B7324[]; +extern u32 gUnknown_80B7318; +extern u8 gUnknown_80B72CC[]; +extern u8 gUnknown_80B7144[]; +extern u8 *gUnknown_80B71A0[]; +extern u8 *gUnknown_80B714C[]; +extern u8 gUnknown_80B7388[]; +extern u8 gUnknown_80B7378[]; + +void FatalError(u32 *, const char *, ...) __attribute__((noreturn)); +extern u8 sub_80973F4(u32); +extern bool8 HasCompletedAllMazes(void); +extern void sub_8097418(u32, u32); +extern void sub_800160C(struct UnkEventStruct *r0, u32 r1, u32 r2); +extern u8 sub_8002658(s16); +extern u32 sub_8001658(u32, s32); +extern void sub_80018D8(u32, u32, u32); +extern void sub_809733C(u32, u32); +extern void sub_80973A8(u32, u32); +extern u8 HasRecruitedMon(u32); +extern void sub_80976F8(u32); +extern void sub_800199C(u32, s32, u32, s32); +extern s32 sub_8001784(u32, s32, u16); + +u8 *sub_8001A74(s16 param_1) +{ + struct UnkEventStruct local_1c; + + sub_800160C(&local_1c,0,param_1); + return local_1c.unk4; +} + +s16 sub_8001A90(s16 param_1) +{ + struct UnkEventStruct local_1c; + + sub_800160C(&local_1c,0,param_1); + return local_1c.unk0[4]; +} + +s32 sub_8001AB0(s32 param_1, s16 param_2) +{ + s32 counter; + s32 total; + struct UnkEventStruct local_1c; + s32 param_2_s32; + + param_2_s32 = param_2; + + total = 0; + sub_800160C(&local_1c, 0, param_2_s32); + for(counter = 0; counter < local_1c.unk0[4]; counter++) + { + total += sub_8001784(param_1, param_2_s32, counter); + } + return total; +} + +void sub_8001AF8(s16 param_1, u8 *param_2, s32 param_3) +{ + u8 *r1; + s32 r2; + u8 r0; + struct UnkEventStruct local_10; + + sub_800160C(&local_10,0,param_1); + for (r1 = local_10.unk4, r2 = 0; r2 < param_3; r2++) { + r0 = *r1; + if (*r1++ == 0) break; + *param_2 = r0; + param_2++; + } + *param_2 = 0; +} + +void sub_8001B34(s16 param_1,u32 param_2,s32 param_3) +{ + u8 *r1; + s32 r2; + u8 r0; + struct UnkEventStruct local_10; + + sub_800160C(&local_10,0,param_1); + for (r1 = local_10.unk4, r2 = 0; r2 < param_3; r1++, r2++) { + r0 = *r1; + if (*r1++ == 0) break; + *r1 = r0; + } + if (r2 < local_10.unk0[4]) { + for(; r2 < local_10.unk0[4]; r1++, r2++) + { + *r1 = 0; + } + } +} + +void sub_8001B88(s32 param_1,u32 *param_2,u32 *param_3) +{ + *param_2 = sub_8001784(0, (s16)param_1, 0); + *param_3 = sub_8001784(0, (s16)param_1, 1); +} + +void ScenarioCalc(s16 param_1,s32 param_2,s32 param_3) +{ + s32 param_1_s32; + u32 local_18; + u32 local_14; + + param_1_s32 = param_1; + sub_8001B88(param_1_s32,&local_18,&local_14); + Log(6,gUnknown_80B72CC,param_1_s32,local_18,local_14,param_2,param_3); // SCENARIO CALC [%3d] %4d %4d -> %4d %4d + if ((param_1_s32 == 3) && ((param_2 != local_18 || (param_3 != local_14)))) { + sub_80018D8(0,0x19,0); + } + sub_800199C(0,param_1_s32,0,param_2); + sub_800199C(0,param_1_s32,1,param_3); + + switch(param_1_s32) + { + case 3: + if (((u32)(param_2 - 1) < 0x1b)) { + if (sub_8001D44(3,8,-1)) { + sub_80976F8(0); + } + if (sub_8001D44(3,0xb,3)) { + sub_80976F8(1); + } + if (sub_8001D44(3,0x11,0)) { + sub_80976F8(2); + } + } + break; + case 4: + if (sub_8001CC4(4,0x1f,0) == 0) { + sub_80976F8(4); + } + if (sub_8001CC4(4,0x20,0) == 0) { + sub_80976F8(5); + } + break; + case 0xC: + if(sub_8001CC4(0xc,0x37,2) == 0) { + sub_80976F8(3); + } + break; + } +} + +bool8 sub_8001CC4(s16 param_1,u32 param_2,s32 param_3) +{ + s32 uVar1; + s32 iVar2; + + uVar1 = sub_8001784(0,param_1,0); + iVar2 = sub_8001784(0,param_1,1); + if ((uVar1 != 0x3a) && + (uVar1 < param_2 || (param_3 >= 0 && (uVar1 == param_2) && (iVar2 < param_3)))) { + return TRUE; + } + else { + return FALSE; + } +} + +bool8 sub_8001D08(s16 param_1,u32 param_2,s32 param_3) +{ + s32 uVar1; + s32 iVar2; + + uVar1 = sub_8001784(0, param_1, 0); + iVar2 = sub_8001784(0, param_1, 1); + if (((uVar1 == param_2 && (((param_3 < 0) || (iVar2 == param_3)))))) { + return TRUE; + } + else { + return FALSE; + } +} + +bool8 sub_8001D44(s16 param_1,u32 param_2,s32 param_3) +{ + s32 uVar1; + s32 iVar2; + + uVar1 = sub_8001784(0, param_1, 0); + iVar2 = sub_8001784(0, param_1, 1); + if ((uVar1 != 0x3a) && + ((uVar1 > param_2 || (((param_3 >= 0 && (uVar1 == param_2)) && (iVar2 > param_3)))))) { + return TRUE; + } + else { + return FALSE; + } +} + +void sub_8001D88(void) +{ + u32 local_c; + u32 auStack8; + + sub_8001B88(3, &auStack8, &local_c); + if (auStack8 - 1 < 0x1b) { + if (sub_8001CC4(4,0x1f,0) != 0) { + if (sub_8001D44(3,0xf,7) != 0) { + ScenarioCalc(4,0x1f,0); + sub_8097418(0xe,1); + sub_80018D8(0,0x28,2); + } + else { + if ((sub_8001D08(4,0,0)) && (sub_8001D44(3,0xf,3))) { + ScenarioCalc(4,0x1d,1); + } + } + } + if ((sub_8001D08(4,0x1f,0)) && (GetFriendAreaStatus(SKY_BLUE_PLAINS))) { + ScenarioCalc(4,0x1f,1); + sub_809733C(0xf,1); + } + if (auStack8 > 0x11) { + sub_80973A8(0x25,1); + if (((FindItemInInventory(ITEM_HM_DIVE) != -1) || (gTeamInventory_203B460->teamStorage[ITEM_HM_DIVE] != 0)) || + (sub_8001D44(5,0x21,3) != 0)) { + sub_80973A8(0x22,1); + } + if (GetFriendAreaStatus(FURNACE_DESERT) != 0) { + sub_80973A8(0x1f,1); + } + if (GetFriendAreaStatus(BOULDER_CAVE)) { + sub_80973A8(0x20,1); + } + if (GetFriendAreaStatus(DRAGON_CAVE)) { + sub_80973A8(0x21,1); + } + if (GetFriendAreaStatus(SECRETIVE_FOREST)) { + sub_80973A8(0x23,1); + } + if (GetFriendAreaStatus(SERENE_SEA)) { + sub_80973A8(0x24,1); + sub_80973A8(0x28,1); + } + if ((GetFriendAreaStatus(AGED_CHAMBER_AN)) && (GetFriendAreaStatus(AGED_CHAMBER_O_EXCLAIM))) { + sub_80973A8(0x26,1); + } + if (sub_8001D08(5,0,0)) { + ScenarioCalc(5,0x21,1); + } + if ((FindItemInInventory(ITEM_HM_SURF) != -1) || (gTeamInventory_203B460->teamStorage[ITEM_HM_SURF] != 0)) { + if (sub_8001D08(7,0,0)) { + ScenarioCalc(7,0x26,1); + } + if ((sub_8001D08(9,0,0)) && (GetFriendAreaStatus(SOUTHERN_ISLAND))) { + ScenarioCalc(9,0x2e,1); + } + } + if (!sub_8001CC4(9,0x30,0)) { + if ((sub_8001D08(5,0x22,0)) && HasRecruitedMon(MONSTER_ARTICUNO) && HasRecruitedMon(MONSTER_ZAPDOS) && HasRecruitedMon(MONSTER_MOLTRES)) { + ScenarioCalc(5,0x22,1); + } + if (((sub_8001D08(0xb,0,0)) && (sub_8001D44(5,0x21,3) != 0)) && + (GetFriendAreaStatus(SKY_BLUE_PLAINS))) { + ScenarioCalc(0xb,0x33,1); + } + if (GetFriendAreaStatus(SKY_BLUE_PLAINS)) { + sub_80973A8(0x27,1); + } + if (GetFriendAreaStatus(SKY_BLUE_PLAINS)) { + sub_80973A8(0x29,1); + } + } + if (!sub_8001CC4(5,0x22,0)) { + if (sub_8001D08(10,0,0)) { + ScenarioCalc(10,0x31,1); + sub_809733C(0x1b,1); + } + if ((sub_8001D08(0xc,0,0)) && (!sub_8001CC4(0xb,0x34,0))) { + ScenarioCalc(0xc,0x35,1); + } + } + if ((sub_8001D08(6,0,0)) && (HasRecruitedMon(MONSTER_LUGIA))) { + ScenarioCalc(6,0x24,1); + } + if ((sub_8001D08(8,0,0)) && (HasRecruitedMon(MONSTER_HO_OH))) { + ScenarioCalc(8,0x2c,1); + } + } + } +} + +u32 _FlagCalc(s32 param_1, s32 param_2, u32 operation) +{ + switch(operation) { + case 0: + return param_2; + case 1: + return param_1 - param_2; + case 2: + return param_1 + param_2; + case 3: + return param_1 * param_2; + case 4: + return param_1 / param_2; + case 5: + return param_1 % param_2; + case 6: + return param_1 & param_2; + case 7: + return param_1 | param_2; + case 8: + return param_1 ^ param_2; + case 9: + return (1 << param_2) | param_1; + case 10: + return param_1 & ~(1 << param_2); + case 0xb: + return OtherRandInt(param_2); + default: + FatalError(&gUnknown_80B7318,gUnknown_80B7324, operation); // event flag expansion error %d + } +} + +u8 _FlagJudge(s32 param_1, s32 param_2, u32 operation) +{ + switch(operation) { + case 0: + return 1; + case 1: + return 0; + case 2: + return param_1 == param_2; + case 7: + return param_1 != param_2; + case 3: + return param_1 > param_2; + case 5: + return param_1 >= param_2; + case 4: + return param_1 < param_2; + case 6: + return param_1 <= param_2; + case 8: + return (param_1 & param_2) != 0; + case 9: + return (param_1 ^ param_2) != 0; + case 10: + return param_1 >> (param_2) & 1; + default: + FatalError(&gUnknown_80B7350,gUnknown_80B735C, operation); // event flag rule error %d + } +} + +u32 FlagCalc(s32 r0, s32 r1, u32 operation) +{ + return _FlagCalc(r0, r1, operation); +} + +void sub_800226C(u32 param_1, s16 param_2, s32 param_3, u32 operation) +{ + u32 uVar1; + u32 uVar3; + + uVar1 = sub_8001658(param_1,param_2); + uVar3 = _FlagCalc(uVar1,param_3,operation); + sub_80018D8(param_1,param_2,uVar3); +} + +void sub_80022A0(u32 param_1, s16 param_2, s16 param_3, u32 operation) +{ + s32 uVar1; + s32 uVar2; + s32 uVar3; + + s32 param_2_s32 = param_2; + s32 param_3_s32 = param_3; + + + uVar1 = sub_8001658(param_1,param_2_s32); + uVar2 = sub_8001658(param_1,param_3_s32); + uVar3 = _FlagCalc(uVar1,uVar2,operation); + sub_80018D8(param_1,param_2_s32,uVar3); +} + +u8 FlagJudge(s32 r0, s32 r1, u32 operation) +{ + return _FlagJudge(r0, r1, operation); +} + +u8 sub_80022F8(u32 param_1, s16 param_2, s32 param_3, u32 operation) +{ + s32 uVar1; + + uVar1 = sub_8001658(param_1, param_2); + return _FlagJudge(uVar1,param_3,operation); +} + +u8 sub_8002318(u32 param_1, s16 param_2, s16 param_3, u32 operation) +{ + s32 uVar1; + s32 uVar2; + + s32 param_2_s32 = param_2; + s32 param_3_s32 = param_3; + + uVar1 = sub_8001658(param_1,param_2_s32); + uVar2 = sub_8001658(param_1,param_3_s32); + return _FlagJudge(uVar1,uVar2,operation); +} + +s32 sub_8002354(u32 param_1) +{ + if (param_1 < 0x3b) { + return gUnknown_80B6D90[param_1].num; + } + else { + return -1; + } +} + +u8 *sub_8002374(u32 param_1) +{ + if (param_1 < 0x3b) { + return gUnknown_80B6D90[param_1].text; + } + else { + return gUnknown_80B7378; + } +} + +// Unused +u8 *sub_8002394(u32 param_1) +{ + if (param_1 - 0x12 < 9) { + return gUnknown_80B714C[param_1 - 0x12]; + } + else if (param_1 == 0xf) { + return gUnknown_80B7388; // 1-1 + } + else { + return gUnknown_80B7144; // NONE + } +} + +// Unused +u8 *sub_80023C4(u32 param_1) +{ + if (param_1 < 4) { + return gUnknown_80B71A0[param_1]; // CISTART, CECONTINUE, CNLAST, CWEND + } + else { + return gUnknown_80B7144; // NONE + } +} + +bool8 sub_80023E4(u32 param_1) +{ + switch(param_1) { + case 0: + return sub_8001D44(3,2,-1); + case 1: + return sub_8001D44(3,3,3); + case 2: + return sub_8001D44(3,4,3); + case 3: + return sub_8001D44(3,5,0); + case 4: + return (sub_8001D44(3,0xb,0) && sub_8001CC4(3,0xd,0)); + case 5: + return (sub_8001D44(3,0xb,3) && sub_8001CC4(3,0xf,0)); + case 6: + return sub_8001D44(3,0x11,-1); + case 7: + return sub_8001D44(3,0x12,2); + case 8: + return sub_8001D44(3,0x12,3); + case 9: + return sub_8001D44(3,0x12,-1); + case 10: + return sub_8001D44(3,5,4); + case 0xb: + return sub_8001D44(3,5,4); + case 0xc: + return (!sub_8001D08(3,0xb,2) && !sub_8001D08(3,0xb,3)); + case 0xd: + return sub_8001D08(3,0x10,2); + case 0xe: + return !sub_8001CC4(3,5,7); + case 0xf: + return !sub_8001CC4(3,0xf,0); + case 0x10: + return sub_8001D44(3,7,-1); + case 0x11: + return sub_8001D44(3,0xc,-1); + case 0x12: + return sub_8001D44(3,0xd,-1); + case 0x13: + return sub_8001D44(3,0xf,-1); + case 0x14: + return sub_8001D44(3,0x10,-1); + case 0x15: + return sub_8001D44(5,0x21,-1); + case 0x16: + return sub_8001D44(5,0x22,-1); + case 0x17: + return sub_8001D44(6,0x24,-1); + case 0x18: + return sub_8001D44(7,0x2a,-1); + case 0x19: + return sub_8001D44(8,0x2c,-1); + case 0x1a: + return sub_8001D44(10,0x31,-1); + case 0x1b: + return sub_80973F4(0x29); + case 0x1c: + return GetRescueTeamRank() == LUCARIO_RANK; + case 0x1d: + return HasCompletedAllMazes(); + default: + return FALSE; + } +} + +u8 sub_8002658(s16 param_1) + +{ + short sVar1; + s32 param_1_s32; + struct unkEventStruct *ptr; + + param_1_s32 = param_1; + + ptr = gUnknown_80B71E4; + sVar1 = gUnknown_80B71E4[0].unk0; + if (sVar1 != -1) { + do { + if (sVar1 == param_1_s32) { + return ptr->unk2; + } + ptr++; + sVar1 = ptr->unk0; + } while (sVar1 != -1); + } + return 0; +} s16 sub_8002694(u8 param_1) { @@ -54,12 +611,12 @@ bool8 sub_8002718(u8 *r0) struct UnkEventStruct temp; sub_800160C(&temp, 0, 0); MemoryCopy8(gUnknown_2000A88, r0, 0x400); - if (temp.unk0[5] != temp.unk4[0]) + if (temp.unk0[5] != *(u32 *)temp.unk4) return 0; return 1; } -void sub_8002758(u32 *r0) +void sub_8002758(s32 r0) { sub_800226C(0, 0x1, r0, 0x9); } diff --git a/src/event_flag_1.c b/src/event_flag_1.c deleted file mode 100644 index 1bbdc201a..000000000 --- a/src/event_flag_1.c +++ /dev/null @@ -1,569 +0,0 @@ -#include "global.h" -#include "constants/friend_area.h" -#include "friend_area.h" -#include "item.h" -#include "debug.h" -#include "other_random.h" -#include "rescue_team_info.h" -#include "team_inventory.h" - -extern bool8 HasCompletedAllMazes(void); -extern u8 sub_80973F4(u32); -extern u8 _FlagJudge(s32, s32, u32); -extern u32 sub_8001658(u32, s32); -extern u32 _FlagCalc(s32, s32, u32); -extern void sub_80018D8(u32, u32, u32); -extern u8 HasRecruitedMon(u32); -extern void sub_809733C(u32, u32); -extern void sub_80973A8(u32, u32); -extern void sub_8097418(u32, u32); -extern s32 sub_8001784(u32, s32, u16); - -extern u8 gUnknown_80B7144[]; -extern u8 *gUnknown_80B71A0[]; -extern u8 *gUnknown_80B714C[]; -extern u8 gUnknown_80B7388[]; -extern u8 gUnknown_80B7378[]; - -struct unkStruct_80B6D90 -{ - u8 *text; - s32 num; -}; -extern struct unkStruct_80B6D90 gUnknown_80B6D90[]; - -extern u8 gUnknown_80B735C[]; -extern u32 gUnknown_80B7350; -extern u8 gUnknown_80B7324[]; -extern u32 gUnknown_80B7318; -extern u8 gUnknown_80B72CC[]; - -extern void sub_80976F8(u32); -extern void sub_800199C(u32, s32, u32, s32); -bool8 sub_8001CC4(u32 param_1,u32 param_2,s32 param_3); -bool8 sub_8001D44(u32 param_1,u32 param_2,s32 param_3); - -void FatalError(u32 *, const char *, ...) __attribute__((noreturn)); - - -// TODO: rectify with UnkEventStruct -struct UnkEventStruct2_sub -{ - /* 0x0 */ s16 *unk0; - u32 fill4; - s16 unk8; -}; - -struct UnkEventStruct2 -{ - /* 0x0 */ struct UnkEventStruct2_sub *unk0; - /* 0x4 */ u8 *unk4; -}; - - -extern void sub_800160C(struct UnkEventStruct2 *r0, u32 r1, s32 r2); - - -u8 *sub_8001A74(s16 param_1) -{ - struct UnkEventStruct2 local_1c; - - sub_800160C(&local_1c,0,param_1); - return local_1c.unk4; -} - -s16 sub_8001A90(s16 param_1) -{ - struct UnkEventStruct2 local_1c; - - sub_800160C(&local_1c,0,param_1); - return local_1c.unk0->unk8; -} - -s32 sub_8001AB0(s32 param_1,s16 param_2) -{ - s32 iVar1; - s32 counter; - s32 total; - struct UnkEventStruct2 local_1c; - s32 param_2_s32; - - param_2_s32 = param_2; - - total = 0; - sub_800160C(&local_1c,0,param_2_s32); - counter = 0; - if (counter < local_1c.unk0->unk8) { - for(; counter < local_1c.unk0->unk8; counter++) - { - iVar1 = sub_8001784(param_1, param_2_s32, counter); - total += iVar1; - } - } - return total; -} - -void sub_8001AF8(s16 param_1, u8 *param_2, s32 param_3) -{ - u8 *r1; - s32 r2; - u8 r0; - struct UnkEventStruct2 local_10; - - sub_800160C(&local_10,0,param_1); - for (r1 = local_10.unk4, r2 = 0; r2 < param_3; r2++) { - r0 = *r1; - if (*r1++ == 0) break; - *param_2 = r0; - param_2++; - } - *param_2 = 0; -} - -void sub_8001B34(s16 param_1,u32 param_2,s32 param_3) -{ - u8 *r1; - s32 r2; - u8 r0; - struct UnkEventStruct2 local_10; - - sub_800160C(&local_10,0,param_1); - for (r1 = local_10.unk4, r2 = 0; r2 < param_3; r1++, r2++) { - r0 = *r1; - if (*r1++ == 0) break; - *r1 = r0; - } - if (r2 < local_10.unk0->unk8) { - for(; r2 < local_10.unk0->unk8; r1++, r2++) - { - *r1 = 0; - } - } -} - -void sub_8001B88(s32 param_1,u32 *param_2,u32 *param_3) -{ - *param_2 = sub_8001784(0, (s16)param_1, 0); - *param_3 = sub_8001784(0, (s16)param_1, 1); -} - -void ScenarioCalc(s16 param_1,s32 param_2,s32 param_3) -{ - s32 param_1_s32; - u32 local_18; - u32 local_14; - - param_1_s32 = param_1; - sub_8001B88(param_1_s32,&local_18,&local_14); - Log(6,gUnknown_80B72CC,param_1_s32,local_18,local_14,param_2,param_3); // SCENARIO CALC [%3d] %4d %4d -> %4d %4d - if ((param_1_s32 == 3) && ((param_2 != local_18 || (param_3 != local_14)))) { - sub_80018D8(0,0x19,0); - } - sub_800199C(0,param_1_s32,0,param_2); - sub_800199C(0,param_1_s32,1,param_3); - - switch(param_1_s32) - { - case 3: - if (((u32)(param_2 - 1) < 0x1b)) { - if (sub_8001D44(3,8,-1)) { - sub_80976F8(0); - } - if (sub_8001D44(3,0xb,3)) { - sub_80976F8(1); - } - if (sub_8001D44(3,0x11,0)) { - sub_80976F8(2); - } - } - break; - case 4: - if (sub_8001CC4(4,0x1f,0) == 0) { - sub_80976F8(4); - } - if (sub_8001CC4(4,0x20,0) == 0) { - sub_80976F8(5); - } - break; - case 0xC: - if(sub_8001CC4(0xc,0x37,2) == 0) { - sub_80976F8(3); - } - break; - } -} - -bool8 sub_8001CC4(u32 param_1,u32 param_2,s32 param_3) -{ - s32 uVar1; - s32 iVar2; - - uVar1 = sub_8001784(0,(s16)param_1,0); - iVar2 = sub_8001784(0,(s16)param_1,1); - if ((uVar1 != 0x3a) && - (uVar1 < param_2 || (param_3 >= 0 && (uVar1 == param_2) && (iVar2 < param_3)))) { - return TRUE; - } - else { - return FALSE; - } -} - -bool8 sub_8001D08(u32 param_1,u32 param_2,s32 param_3) -{ - s32 uVar1; - s32 iVar2; - - uVar1 = sub_8001784(0, (s16)param_1, 0); - iVar2 = sub_8001784(0, (s16)param_1, 1); - if (((uVar1 == param_2 && (((param_3 < 0) || (iVar2 == param_3)))))) { - return TRUE; - } - else { - return FALSE; - } -} - -bool8 sub_8001D44(u32 param_1,u32 param_2,s32 param_3) -{ - s32 uVar1; - s32 iVar2; - - uVar1 = sub_8001784(0, (s16)param_1, 0); - iVar2 = sub_8001784(0, (s16)param_1, 1); - if ((uVar1 != 0x3a) && - ((uVar1 > param_2 || (((param_3 >= 0 && (uVar1 == param_2)) && (iVar2 > param_3)))))) { - return TRUE; - } - else { - return FALSE; - } -} - -void sub_8001D88(void) -{ - u32 local_c; - u32 auStack8; - - sub_8001B88(3, &auStack8, &local_c); - if (auStack8 - 1 < 0x1b) { - if (sub_8001CC4(4,0x1f,0) != 0) { - if (sub_8001D44(3,0xf,7) != 0) { - ScenarioCalc(4,0x1f,0); - sub_8097418(0xe,1); - sub_80018D8(0,0x28,2); - } - else { - if ((sub_8001D08(4,0,0)) && (sub_8001D44(3,0xf,3))) { - ScenarioCalc(4,0x1d,1); - } - } - } - if ((sub_8001D08(4,0x1f,0)) && (GetFriendAreaStatus(SKY_BLUE_PLAINS))) { - ScenarioCalc(4,0x1f,1); - sub_809733C(0xf,1); - } - if (auStack8 > 0x11) { - sub_80973A8(0x25,1); - if (((FindItemInInventory(ITEM_HM_DIVE) != -1) || (gTeamInventory_203B460->teamStorage[ITEM_HM_DIVE] != 0)) || - (sub_8001D44(5,0x21,3) != 0)) { - sub_80973A8(0x22,1); - } - if (GetFriendAreaStatus(FURNACE_DESERT) != 0) { - sub_80973A8(0x1f,1); - } - if (GetFriendAreaStatus(BOULDER_CAVE)) { - sub_80973A8(0x20,1); - } - if (GetFriendAreaStatus(DRAGON_CAVE)) { - sub_80973A8(0x21,1); - } - if (GetFriendAreaStatus(SECRETIVE_FOREST)) { - sub_80973A8(0x23,1); - } - if (GetFriendAreaStatus(SERENE_SEA)) { - sub_80973A8(0x24,1); - sub_80973A8(0x28,1); - } - if ((GetFriendAreaStatus(AGED_CHAMBER_AN)) && (GetFriendAreaStatus(AGED_CHAMBER_O_EXCLAIM))) { - sub_80973A8(0x26,1); - } - if (sub_8001D08(5,0,0)) { - ScenarioCalc(5,0x21,1); - } - if ((FindItemInInventory(ITEM_HM_SURF) != -1) || (gTeamInventory_203B460->teamStorage[ITEM_HM_SURF] != 0)) { - if (sub_8001D08(7,0,0)) { - ScenarioCalc(7,0x26,1); - } - if ((sub_8001D08(9,0,0)) && (GetFriendAreaStatus(SOUTHERN_ISLAND))) { - ScenarioCalc(9,0x2e,1); - } - } - if (!sub_8001CC4(9,0x30,0)) { - if ((sub_8001D08(5,0x22,0)) && HasRecruitedMon(MONSTER_ARTICUNO) && HasRecruitedMon(MONSTER_ZAPDOS) && HasRecruitedMon(MONSTER_MOLTRES)) { - ScenarioCalc(5,0x22,1); - } - if (((sub_8001D08(0xb,0,0)) && (sub_8001D44(5,0x21,3) != 0)) && - (GetFriendAreaStatus(SKY_BLUE_PLAINS))) { - ScenarioCalc(0xb,0x33,1); - } - if (GetFriendAreaStatus(SKY_BLUE_PLAINS)) { - sub_80973A8(0x27,1); - } - if (GetFriendAreaStatus(SKY_BLUE_PLAINS)) { - sub_80973A8(0x29,1); - } - } - if (!sub_8001CC4(5,0x22,0)) { - if (sub_8001D08(10,0,0)) { - ScenarioCalc(10,0x31,1); - sub_809733C(0x1b,1); - } - if ((sub_8001D08(0xc,0,0)) && (!sub_8001CC4(0xb,0x34,0))) { - ScenarioCalc(0xc,0x35,1); - } - } - if ((sub_8001D08(6,0,0)) && (HasRecruitedMon(MONSTER_LUGIA))) { - ScenarioCalc(6,0x24,1); - } - if ((sub_8001D08(8,0,0)) && (HasRecruitedMon(MONSTER_HO_OH))) { - ScenarioCalc(8,0x2c,1); - } - } - } -} - -u32 _FlagCalc(s32 param_1, s32 param_2, u32 operation) -{ - switch(operation) { - case 0: - return param_2; - case 1: - return param_1 - param_2; - case 2: - return param_1 + param_2; - case 3: - return param_1 * param_2; - case 4: - return param_1 / param_2; - case 5: - return param_1 % param_2; - case 6: - return param_1 & param_2; - case 7: - return param_1 | param_2; - case 8: - return param_1 ^ param_2; - case 9: - return (1 << param_2) | param_1; - case 10: - return param_1 & ~(1 << param_2); - case 0xb: - return OtherRandInt(param_2); - default: - FatalError(&gUnknown_80B7318,gUnknown_80B7324, operation); // event flag expansion error %d - } -} - -u8 _FlagJudge(s32 param_1, s32 param_2, u32 operation) -{ - switch(operation) { - case 0: - return 1; - case 1: - return 0; - case 2: - return param_1 == param_2; - case 7: - return param_1 != param_2; - case 3: - return param_1 > param_2; - case 5: - return param_1 >= param_2; - case 4: - return param_1 < param_2; - case 6: - return param_1 <= param_2; - case 8: - return (param_1 & param_2) != 0; - case 9: - return (param_1 ^ param_2) != 0; - case 10: - return param_1 >> (param_2) & 1; - default: - FatalError(&gUnknown_80B7350,gUnknown_80B735C, operation); // event flag rule error %d - } -} - -u32 FlagCalc(u32 r0, u32 r1, u32 operation) -{ - return _FlagCalc(r0, r1, operation); -} - -void sub_800226C(u32 param_1, s16 param_2, s32 param_3, u32 operation) -{ - u32 uVar1; - u32 uVar3; - - s32 param_2_s32 = param_2; - - - uVar1 = sub_8001658(param_1,param_2_s32); - uVar3 = _FlagCalc(uVar1,param_3,operation); - sub_80018D8(param_1,param_2_s32,uVar3); -} - -void sub_80022A0(u32 param_1, s16 param_2, s16 param_3, u32 operation) -{ - s32 uVar1; - s32 uVar2; - s32 uVar3; - - s32 param_2_s32 = param_2; - s32 param_3_s32 = param_3; - - - uVar1 = sub_8001658(param_1,param_2_s32); - uVar2 = sub_8001658(param_1,param_3_s32); - uVar3 = _FlagCalc(uVar1,uVar2,operation); - sub_80018D8(param_1,param_2_s32,uVar3); -} - -u8 FlagJudge(s32 r0, s32 r1, u32 operation) -{ - return _FlagJudge(r0, r1, operation); -} - -u8 sub_80022F8(u32 param_1, s16 param_2, s32 param_3, u32 operation) -{ - s32 uVar1; - - uVar1 = sub_8001658(param_1, param_2); - return _FlagJudge(uVar1,param_3,operation); -} - -u8 sub_8002318(u32 param_1, s16 param_2, s16 param_3, u32 operation) -{ - s32 uVar1; - s32 uVar2; - - s32 param_2_s32 = param_2; - s32 param_3_s32 = param_3; - - uVar1 = sub_8001658(param_1,param_2_s32); - uVar2 = sub_8001658(param_1,param_3_s32); - return _FlagJudge(uVar1,uVar2,operation); -} - -s32 sub_8002354(u32 param_1) -{ - if (param_1 < 0x3b) { - return gUnknown_80B6D90[param_1].num; - } - else { - return -1; - } -} - -u8 *sub_8002374(u32 param_1) -{ - if (param_1 < 0x3b) { - return gUnknown_80B6D90[param_1].text; - } - else { - return gUnknown_80B7378; - } -} - -// Unused -u8 *sub_8002394(u32 param_1) -{ - if (param_1 - 0x12 < 9) { - return gUnknown_80B714C[param_1 - 0x12U]; - } - else if (param_1 == 0xf) { - return gUnknown_80B7388; // 1-1 - } - else { - return gUnknown_80B7144; // NONE - } -} - -// Unused -u8 *sub_80023C4(u32 param_1) -{ - if (param_1 < 4) { - return gUnknown_80B71A0[param_1]; // CISTART, CECONTINUE, CNLAST, CWEND - } - else { - return gUnknown_80B7144; // NONE - } -} - -bool8 sub_80023E4(u32 param_1) -{ - switch(param_1) { - case 0: - return sub_8001D44(3,2,-1); - case 1: - return sub_8001D44(3,3,3); - case 2: - return sub_8001D44(3,4,3); - case 3: - return sub_8001D44(3,5,0); - case 4: - return (sub_8001D44(3,0xb,0) && sub_8001CC4(3,0xd,0)); - case 5: - return (sub_8001D44(3,0xb,3) && sub_8001CC4(3,0xf,0)); - case 6: - return sub_8001D44(3,0x11,-1); - case 7: - return sub_8001D44(3,0x12,2); - case 8: - return sub_8001D44(3,0x12,3); - case 9: - return sub_8001D44(3,0x12,-1); - case 10: - return sub_8001D44(3,5,4); - case 0xb: - return sub_8001D44(3,5,4); - case 0xc: - return (!sub_8001D08(3,0xb,2) && !sub_8001D08(3,0xb,3)); - case 0xd: - return sub_8001D08(3,0x10,2); - case 0xe: - return !sub_8001CC4(3,5,7); - case 0xf: - return !sub_8001CC4(3,0xf,0); - case 0x10: - return sub_8001D44(3,7,-1); - case 0x11: - return sub_8001D44(3,0xc,-1); - case 0x12: - return sub_8001D44(3,0xd,-1); - case 0x13: - return sub_8001D44(3,0xf,-1); - case 0x14: - return sub_8001D44(3,0x10,-1); - case 0x15: - return sub_8001D44(5,0x21,-1); - case 0x16: - return sub_8001D44(5,0x22,-1); - case 0x17: - return sub_8001D44(6,0x24,-1); - case 0x18: - return sub_8001D44(7,0x2a,-1); - case 0x19: - return sub_8001D44(8,0x2c,-1); - case 0x1a: - return sub_8001D44(10,0x31,-1); - case 0x1b: - return sub_80973F4(0x29); - case 0x1c: - return GetRescueTeamRank() == LUCARIO_RANK; - case 0x1d: - return HasCompletedAllMazes(); - default: - return FALSE; - } -} diff --git a/src/ground_main.c b/src/ground_main.c index a1ec4be11..6aae81407 100644 --- a/src/ground_main.c +++ b/src/ground_main.c @@ -3,6 +3,7 @@ #include "input.h" #include "debug.h" #include "code_80A26CC.h" +#include "event_flag.h" EWRAM_DATA u32 gUnknown_20398A8 = {0}; EWRAM_DATA u32 gUnknown_20398AC = {0}; @@ -68,7 +69,6 @@ extern void GroundEffect_Action(); extern s32 sub_8001658(u8, u8); extern s32 sub_8001784(u8, u8, u8); extern void sub_809CB8C(); -extern void sub_8001D88(); extern void sub_80015C0(u8, u8); extern void sub_80018D8(u8, u8, u32); extern void sub_800199C(u8, u8, u8, s32); @@ -77,13 +77,10 @@ extern void GeneratePelipperJobs(); extern void sub_80961B4(); extern void ClearAllItems_8091FB4(); extern const char *sub_80A2B18(s16); -extern bool8 sub_8001CC4(u8, u8, u8); extern void ChooseKecleonShopInventory(u32); -extern bool8 sub_80023E4(u32); extern void FadeOutAllMusic(u16); extern u8 sub_809C730(); extern s16 sub_80A2750(s16); -extern u8 sub_8001D44(u32, u32, s32); void sub_8098BDC(void) { From fbd2af541577f7be7a4828b794154ee6c5a0f14e Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 28 Jul 2023 14:56:34 -0700 Subject: [PATCH 16/26] finish kangaskhan and clean event flag --- asm/kangaskhan_storage.s | 677 ----------------- include/kangaskhan_storage.h | 12 +- ld_script.txt | 2 - src/event_flag.c | 18 +- src/kangaskhan_storage.c | 1373 +++++++++++++++++++++++++++++++++- src/kangaskhan_storage_1.c | 1183 ----------------------------- 6 files changed, 1388 insertions(+), 1877 deletions(-) delete mode 100644 src/kangaskhan_storage_1.c diff --git a/asm/kangaskhan_storage.s b/asm/kangaskhan_storage.s index c1cac72eb..5f088844f 100644 --- a/asm/kangaskhan_storage.s +++ b/asm/kangaskhan_storage.s @@ -5,681 +5,4 @@ .text - thumb_func_start sub_8016FF8 -sub_8016FF8: - push {r4,r5,lr} - sub sp, 0x14 - ldr r1, _08017014 - ldr r0, [r1] - ldr r0, [r0, 0x4] - adds r4, r1, 0 - cmp r0, 0x1D - bls _0801700A - b _08017584 -_0801700A: - lsls r0, 2 - ldr r1, _08017018 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08017014: .4byte gUnknown_203B208 -_08017018: .4byte _0801701C - .align 2, 0 -_0801701C: - .4byte _08017094 - .4byte _080170BC - .4byte _0801710C - .4byte _0801713C - .4byte _08017584 - .4byte _0801715C - .4byte _0801718C - .4byte _080171BC - .4byte _080171EC - .4byte _0801721C - .4byte _0801724C - .4byte _0801726C - .4byte _0801728C - .4byte _080172AC - .4byte _080172BA - .4byte _080172C2 - .4byte _080174A8 - .4byte _080172E4 - .4byte _0801731C - .4byte _08017344 - .4byte _08017394 - .4byte _080173B4 - .4byte _080173E8 - .4byte _080173F6 - .4byte _08017404 - .4byte _08017474 - .4byte _080174A8 - .4byte _080174B2 - .4byte _080174E8 - .4byte _08017530 -_08017094: - bl sub_80175FC - ldr r2, _080170B4 - ldr r0, [r2] - adds r0, 0xE4 - movs r4, 0 - movs r1, 0x1 - strb r1, [r0] - ldr r3, _080170B8 - ldr r5, [r2] - ldr r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r0, r3 - b _080170DA - .align 2, 0 -_080170B4: .4byte gUnknown_203B208 -_080170B8: .4byte gKangaskhanStorageDialogue -_080170BC: - bl sub_80175FC - ldr r1, _08017104 - ldr r0, [r1] - adds r0, 0xE4 - movs r4, 0 - strb r4, [r0] - ldr r2, _08017108 - ldr r5, [r1] - ldr r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x4 - adds r0, r2 -_080170DA: - ldr r0, [r0] - ldr r2, [r5, 0x18] - adds r3, r5, 0 - adds r3, 0x24 - adds r1, r5, 0 - adds r1, 0x4C - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - str r4, [sp, 0x8] - adds r1, r5, 0 - adds r1, 0xE8 - ldr r1, [r1] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - bl sub_8014248 - b _08017584 - .align 2, 0 -_08017104: .4byte gUnknown_203B208 -_08017108: .4byte gKangaskhanStorageDialogue -_0801710C: - ldr r0, [r4] - movs r1, 0x1 - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _08017134 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x4C - adds r0, r2 - ldr r0, [r0] - adds r3, 0xE8 - ldr r2, [r3] - ldr r3, _08017138 - b _080173D8 - .align 2, 0 -_08017134: .4byte gKangaskhanStorageDialogue -_08017138: .4byte 0x0000010d -_0801713C: - ldr r0, [r4] - movs r1, 0x4 - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0x1 - strb r1, [r0] - ldr r2, _08017158 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x8 - b _080173CE - .align 2, 0 -_08017158: .4byte gKangaskhanStorageDialogue -_0801715C: - ldr r0, [r4] - movs r1, 0x1 - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _08017184 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x34 - adds r0, r2 - ldr r0, [r0] - adds r3, 0xE8 - ldr r2, [r3] - ldr r3, _08017188 - b _080173D8 - .align 2, 0 -_08017184: .4byte gKangaskhanStorageDialogue -_08017188: .4byte 0x0000010d -_0801718C: - ldr r0, [r4] - movs r1, 0x1 - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _080171B4 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x38 - adds r0, r2 - ldr r0, [r0] - adds r3, 0xE8 - ldr r2, [r3] - ldr r3, _080171B8 - b _080173D8 - .align 2, 0 -_080171B4: .4byte gKangaskhanStorageDialogue -_080171B8: .4byte 0x0000010d -_080171BC: - ldr r0, [r4] - movs r1, 0x1 - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _080171E4 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x3C - adds r0, r2 - ldr r0, [r0] - adds r3, 0xE8 - ldr r2, [r3] - ldr r3, _080171E8 - b _080173D8 - .align 2, 0 -_080171E4: .4byte gKangaskhanStorageDialogue -_080171E8: .4byte 0x0000010d -_080171EC: - ldr r0, [r4] - movs r1, 0x1 - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _08017214 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x48 - adds r0, r2 - ldr r0, [r0] - adds r3, 0xE8 - ldr r2, [r3] - ldr r3, _08017218 - b _080173D8 - .align 2, 0 -_08017214: .4byte gKangaskhanStorageDialogue -_08017218: .4byte 0x0000010d -_0801721C: - ldr r0, _08017244 - ldr r1, [r4] - adds r1, 0xC - movs r2, 0 - bl sub_8090E14 - ldr r0, [r4] - movs r1, 0xE - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _08017248 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x40 - b _080173CE - .align 2, 0 -_08017244: .4byte gUnknown_202DE58 -_08017248: .4byte gKangaskhanStorageDialogue -_0801724C: - ldr r0, [r4] - movs r1, 0xE - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _08017268 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x44 - b _080173CE - .align 2, 0 -_08017268: .4byte gKangaskhanStorageDialogue -_0801726C: - ldr r0, [r4] - movs r1, 0xD - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _08017288 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0xC - b _080173CE - .align 2, 0 -_08017288: .4byte gKangaskhanStorageDialogue -_0801728C: - ldr r0, [r4] - movs r1, 0xE - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _080172A8 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x10 - b _080173CE - .align 2, 0 -_080172A8: .4byte gKangaskhanStorageDialogue -_080172AC: - movs r0, 0x3 - movs r1, 0x3 - movs r2, 0 - movs r3, 0xA - bl sub_801A5D8 - b _08017584 -_080172BA: - movs r0, 0x1 - bl sub_801A8D0 - b _08017584 -_080172C2: - bl sub_801A9E0 - bl sub_80176B8 - ldr r0, _080172E0 - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x58 - adds r1, r2, 0 - adds r1, 0x24 - adds r3, r2, 0 - adds r3, 0x4C - ldr r2, [r2, 0x1C] - b _08017494 - .align 2, 0 -_080172E0: .4byte gUnknown_203B208 -_080172E4: - bl sub_80177F8 - ldr r0, _08017310 - ldr r4, _08017314 - ldr r1, [r4] - adds r1, 0xC - movs r2, 0 - bl sub_8090E14 - ldr r0, [r4] - adds r0, 0xE4 - movs r5, 0 - strb r5, [r0] - ldr r2, _08017318 - ldr r4, [r4] - ldr r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x14 - b _08017504 - .align 2, 0 -_08017310: .4byte gUnknown_202DE58 -_08017314: .4byte gUnknown_203B208 -_08017318: .4byte gKangaskhanStorageDialogue -_0801731C: - bl sub_80177F8 - ldr r1, _0801733C - ldr r0, [r1] - adds r0, 0xE4 - movs r5, 0 - strb r5, [r0] - ldr r2, _08017340 - ldr r4, [r1] - ldr r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x18 - b _08017504 - .align 2, 0 -_0801733C: .4byte gUnknown_203B208 -_08017340: .4byte gKangaskhanStorageDialogue -_08017344: - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - bne _0801735C - bl sub_801A928 - ldr r0, _08017358 - ldr r1, [r0] - movs r0, 0x1 - b _08017362 - .align 2, 0 -_08017358: .4byte gUnknown_203B208 -_0801735C: - ldr r0, _08017388 - ldr r1, [r0] - movs r0, 0xC -_08017362: - str r0, [r1, 0x8] - ldr r3, _08017388 - ldr r0, [r3] - adds r0, 0xE4 - movs r1, 0x1 - strb r1, [r0] - ldr r2, _0801738C - ldr r3, [r3] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x1C - adds r0, r2 - ldr r0, [r0] - adds r3, 0xE8 - ldr r2, [r3] - ldr r3, _08017390 - b _080173D8 - .align 2, 0 -_08017388: .4byte gUnknown_203B208 -_0801738C: .4byte gKangaskhanStorageDialogue -_08017390: .4byte 0x0000010d -_08017394: - ldr r0, [r4] - movs r1, 0x16 - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _080173B0 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x20 - b _080173CE - .align 2, 0 -_080173B0: .4byte gKangaskhanStorageDialogue -_080173B4: - ldr r0, [r4] - movs r1, 0x17 - str r1, [r0, 0x8] - adds r0, 0xE4 - movs r1, 0 - strb r1, [r0] - ldr r2, _080173E0 - ldr r3, [r4] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x24 -_080173CE: - adds r0, r2 - ldr r0, [r0] - adds r3, 0xE8 - ldr r2, [r3] - ldr r3, _080173E4 -_080173D8: - movs r1, 0 - bl sub_80141B4 - b _08017584 - .align 2, 0 -_080173E0: .4byte gKangaskhanStorageDialogue -_080173E4: .4byte 0x0000030d -_080173E8: - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0 - movs r3, 0xA - bl sub_801C8C4 - b _080173FC -_080173F6: - movs r0, 0x1 - bl sub_801CB5C -_080173FC: - movs r0, 0 - bl sub_801AD34 - b _08017584 -_08017404: - ldr r2, [r4] - adds r1, r2, 0 - adds r1, 0xB8 - movs r0, 0x2 - str r0, [r1] - subs r1, 0x8 - movs r0, 0x1 - str r0, [r1] - ldr r0, _08017430 - ldr r1, [r0] - ldrb r0, [r2, 0xE] - lsls r0, 1 - adds r1, 0x50 - adds r3, r1, r0 - ldrh r0, [r3] - cmp r0, 0x63 - bls _08017434 - adds r1, r2, 0 - adds r1, 0xB4 - movs r0, 0x63 - b _0801743A - .align 2, 0 -_08017430: .4byte gTeamInventory_203B460 -_08017434: - adds r1, r2, 0 - adds r1, 0xB4 - ldrh r0, [r3] -_0801743A: - str r0, [r1] - ldr r2, [r4] - adds r1, r2, 0 - adds r1, 0xAC - adds r0, r2, 0 - adds r0, 0xB4 - ldr r0, [r0] - str r0, [r1] - adds r1, 0x10 - movs r0, 0x1 - str r0, [r1] - adds r1, 0x4 - movs r3, 0x82 - lsls r3, 1 - adds r0, r2, r3 - str r0, [r1] - adds r1, 0x4 - movs r0, 0x28 - str r0, [r1] - adds r1, 0x4 - movs r0, 0x12 - str r0, [r1] - adds r0, r2, 0 - adds r0, 0xA8 - bl sub_8013AA0 - bl sub_8017598 - b _08017584 -_08017474: - bl sub_801CCD8 - movs r0, 0 - bl sub_801AD34 - bl sub_8017758 - ldr r0, _080174A4 - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x58 - adds r1, r2, 0 - adds r1, 0x24 - adds r3, r2, 0 - adds r3, 0x4C - ldr r2, [r2, 0x20] -_08017494: - str r2, [sp] - movs r2, 0x2 - str r2, [sp, 0x4] - movs r2, 0 - bl sub_8012D60 - b _08017584 - .align 2, 0 -_080174A4: .4byte gUnknown_203B208 -_080174A8: - ldr r0, [r4] - adds r0, 0xC - bl sub_801B3C0 - b _08017584 -_080174B2: - bl sub_80177F8 - ldr r0, _080174DC - ldr r4, _080174E0 - ldr r1, [r4] - adds r1, 0xC - movs r2, 0 - bl sub_8090E14 - ldr r0, [r4] - adds r0, 0xE4 - movs r5, 0 - strb r5, [r0] - ldr r2, _080174E4 - ldr r4, [r4] - ldr r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x28 - b _08017504 - .align 2, 0 -_080174DC: .4byte gUnknown_202DE58 -_080174E0: .4byte gUnknown_203B208 -_080174E4: .4byte gKangaskhanStorageDialogue -_080174E8: - bl sub_80177F8 - ldr r1, _08017528 - ldr r0, [r1] - adds r0, 0xE4 - movs r5, 0 - strb r5, [r0] - ldr r2, _0801752C - ldr r4, [r1] - ldr r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x2C -_08017504: - adds r0, r2 - ldr r0, [r0] - adds r3, r4, 0 - adds r3, 0x24 - str r5, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - str r5, [sp, 0x8] - adds r4, 0xE8 - ldr r1, [r4] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - movs r2, 0x4 - bl sub_8014248 - b _08017584 - .align 2, 0 -_08017528: .4byte gUnknown_203B208 -_0801752C: .4byte gKangaskhanStorageDialogue -_08017530: - movs r0, 0x1 - bl sub_801CF14 - lsls r0, 24 - cmp r0, 0 - bne _08017544 - bl GetNumberOfFilledInventorySlots - cmp r0, 0x13 - ble _08017554 -_08017544: - bl sub_801CBB8 - ldr r0, _08017550 - ldr r1, [r0] - movs r0, 0x1 - b _0801755A - .align 2, 0 -_08017550: .4byte gUnknown_203B208 -_08017554: - ldr r0, _0801758C - ldr r1, [r0] - movs r0, 0x15 -_0801755A: - str r0, [r1, 0x8] - ldr r3, _0801758C - ldr r0, [r3] - adds r0, 0xE4 - movs r1, 0x1 - strb r1, [r0] - ldr r2, _08017590 - ldr r3, [r3] - ldr r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - adds r2, 0x30 - adds r0, r2 - ldr r0, [r0] - adds r3, 0xE8 - ldr r2, [r3] - ldr r3, _08017594 - movs r1, 0 - bl sub_80141B4 -_08017584: - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801758C: .4byte gUnknown_203B208 -_08017590: .4byte gKangaskhanStorageDialogue -_08017594: .4byte 0x0000010d - thumb_func_end sub_8016FF8 - - .align 2,0 diff --git a/include/kangaskhan_storage.h b/include/kangaskhan_storage.h index c43c51e7d..dcca82cf0 100644 --- a/include/kangaskhan_storage.h +++ b/include/kangaskhan_storage.h @@ -8,7 +8,7 @@ struct unkStruct_203B208 { // size: 0x14C - u32 unk0; + bool32 isAsleep; u32 currState; u32 fallbackState; struct Item storedItem; @@ -21,9 +21,15 @@ struct unkStruct_203B208 u16 unk4C[5]; struct MenuStruct unk58; u32 unkA8; - u8 unkAC[0xBC - 0xAC]; + u32 unkAC; + u32 unkB0; + u32 unkB4; + u32 unkB8; u32 unkBC; - u8 unkC0[0xD4 - 0xC0]; + struct UnkTextStruct2 *unkC0; + u32 unkC4; + u32 unkC8; + u8 unkCC[0xD4 - 0xCC]; u32 unkD4; struct OpenedFile *faceFile; u8 *faceData; diff --git a/ld_script.txt b/ld_script.txt index f36a2857b..a7bec9a4b 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -97,8 +97,6 @@ SECTIONS { src/code_8012A18_1.o(.text); src/felicity_bank.o(.text); src/kangaskhan_storage.o(.text); - asm/kangaskhan_storage.o(.text); - src/kangaskhan_storage_1.o(.text); src/kecleon_items.o(.text); asm/kecleon_items.o(.text); src/kecleon_items_1.o(.text); diff --git a/src/event_flag.c b/src/event_flag.c index 14d353fc9..ece655349 100644 --- a/src/event_flag.c +++ b/src/event_flag.c @@ -30,18 +30,18 @@ struct unkStruct_80B6D90 }; extern struct unkStruct_80B6D90 gUnknown_80B6D90[]; -extern u8 gUnknown_80B735C[]; -extern u32 gUnknown_80B7350; -extern u8 gUnknown_80B7324[]; -extern u32 gUnknown_80B7318; -extern u8 gUnknown_80B72CC[]; extern u8 gUnknown_80B7144[]; -extern u8 *gUnknown_80B71A0[]; extern u8 *gUnknown_80B714C[]; -extern u8 gUnknown_80B7388[]; +extern u8 *gUnknown_80B71A0[]; +extern u8 gUnknown_80B72CC[]; +extern struct DebugLocation gUnknown_80B7318; +extern u8 gUnknown_80B7324[]; +extern struct DebugLocation gUnknown_80B7350; +extern u8 gUnknown_80B735C[]; extern u8 gUnknown_80B7378[]; +extern u8 gUnknown_80B7388[]; -void FatalError(u32 *, const char *, ...) __attribute__((noreturn)); +void FatalError(struct DebugLocation *, const char *, ...) __attribute__((noreturn)); extern u8 sub_80973F4(u32); extern bool8 HasCompletedAllMazes(void); extern void sub_8097418(u32, u32); @@ -455,7 +455,7 @@ u8 *sub_8002374(u32 param_1) return gUnknown_80B6D90[param_1].text; } else { - return gUnknown_80B7378; + return gUnknown_80B7378; // error number } } diff --git a/src/kangaskhan_storage.c b/src/kangaskhan_storage.c index 088068ebf..9de8c1a75 100644 --- a/src/kangaskhan_storage.c +++ b/src/kangaskhan_storage.c @@ -5,14 +5,34 @@ #include "item.h" #include "kangaskhan_storage.h" #include "memory.h" +#include "menu_input.h" +#include "team_inventory.h" extern struct unkStruct_203B208 *gUnknown_203B208; +extern struct unkStruct_203B20C *gUnknown_203B20C; extern struct UnkTextStruct2 gUnknown_80DB748; extern struct UnkTextStruct2 gUnknown_80DB778; extern struct UnkTextStruct2 gUnknown_80DB790; extern struct UnkTextStruct2 gUnknown_80DB760; +extern struct UnkTextStruct2 gUnknown_80DB7B8; +extern struct UnkTextStruct2 gUnknown_80DB7E8; +extern struct UnkTextStruct2 gUnknown_80DB7D0; +extern struct UnkTextStruct2 gUnknown_80DB800; +extern struct UnkTextStruct2 gUnknown_80DB818; +extern u8 gUnknown_80DB830[]; +extern u8 *gUnknown_80D4920[]; +extern u8 *gUnknown_80D4928[]; +extern u8 gUnknown_80DB7A8; +extern u8 *gUnknown_80D4970[]; +extern u8 *gUnknown_80D4964[]; +extern u8 *gUnknown_80D4958[]; +extern u8 *gUnknown_80D4984[]; +extern u8 *gUnknown_80D4934[]; + +extern u8 *gKangaskhanStorageDialogue[2][20]; extern u8 gUnknown_202E5D8[]; +extern u8 gUnknown_202DE58[]; extern u8 gUnknown_202E1C8[]; void UpdateKangaskhanStorageState(u32); @@ -31,9 +51,81 @@ extern void sub_8017A1C(); extern void AdvanceToKangaskhanStorageFallbackState(); void sub_8016E80(); extern void sub_8016FF8(); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_8013C68(u32 *); +extern void sub_80073E0(u32); +extern s32 sub_80144A4(s32 *); +extern u8 sub_801CF50(u32); +extern void sub_801A5D8(u32, u32, u32, u32); +extern void sub_801C8C4(u32, u32, u32, u32); +extern void sub_801CB5C(u32); +extern void sub_801A8D0(u32); +extern u32 sub_801CFE0(u8); +extern void sub_801CF94(void); +extern void sub_801AE84(void); +extern s32 sub_801AED0(s32); +extern u8 sub_801CF14(u32); +extern u8 sub_801CF50(u32); +extern u32 sub_801A6E8(u32); +extern u32 sub_801AEA8(void); +extern u32 sub_801A8AC(void); +extern void sub_801A928(void); +extern void sub_80182E4(void); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_8013C68(u32 *); +extern void sub_80073E0(u32); +extern bool8 sub_801ADA0(u32); +extern void sub_8099690(u32); +extern u32 sub_8013BBC(u32 *); +extern void sub_8017598(void); +extern u32 sub_801CA08(u32); +extern u32 sub_801CFB8(void); +extern u8 sub_801CB24(); +extern void sub_801B450(); +extern u32 sub_801B410(void); +extern void sub_8017F10(u32); +extern void sub_8018588(void); +extern void sub_8018620(void); +extern void sub_8018904(void); +extern void sub_8018AC8(void); +extern void sub_80186F8(void); +extern void sub_8018854(void); +extern void sub_80189C8(void); +extern void sub_8018AE4(void); +extern void sub_8017F28(); +extern void sub_8018100(); +extern void sub_801A9E0(); +extern void sub_801841C(); +extern void sub_801CCD8(); +extern void sub_80184D4(); +extern void sub_8018280(); +void sub_80175FC(void); +extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); +extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u16 *, u32, u32, struct OpenedFile **r5, u32); +extern void sub_801A5D8(u32, u32, u32, u32); +extern void sub_801C8C4(u32, u32, u32, u32); +extern void sub_801CB5C(u32); +extern void sub_801A8D0(u32); +extern void sub_801BB20(void); +extern void sub_801A8D0(u32); +extern void sub_801A9E0(void); +extern void sub_801BC24(void); +void sub_80176B8(void); +void sub_80177F8(void); +void sub_8017758(void); +void sub_801A928(void); +extern void sub_801AD34(u32); +extern void sub_8013AA0(u32 *); +extern void sub_8017598(void); +extern void sub_801CCD8(void); +extern void sub_801CBB8(void); +extern void sub_801B3C0(struct Item *); +extern u8 sub_801CF14(u32); -u32 DisplayKangaskhanDialogueSprite(s32 param_1) +u32 DisplayKangaskhanDialogueSprite(bool32 isAsleep) { char *monName; struct OpenedFile * faceFile; @@ -44,12 +136,12 @@ u32 DisplayKangaskhanDialogueSprite(s32 param_1) gUnknown_203B208->menuAction1 = 0; gUnknown_203B208->menuAction2 = 0; gUnknown_203B208->menuAction3 = 0; - gUnknown_203B208->unk0 = param_1; + gUnknown_203B208->isAsleep = isAsleep; CopyYellowMonsterNametoBuffer(gUnknown_202E5D8, MONSTER_KANGASKHAN); CopyYellowMonsterNametoBuffer(gUnknown_202E1C8, MONSTER_KANGASKHAN); monName = GetMonSpecies(MONSTER_KANGASKHAN); strcpy(gUnknown_202E1C8 - 0x50, monName); - if (gUnknown_203B208->unk0 == 1) { + if (gUnknown_203B208->isAsleep == 1) { gUnknown_203B208->unkE8 = 0; } else { @@ -171,3 +263,1278 @@ void sub_8016E80(void) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B208->unkEC, 1, 1); } + +void sub_8016FF8(void) +{ + + switch(gUnknown_203B208->currState) { + case 0: + sub_80175FC(); + gUnknown_203B208->unkE4 = 1; + sub_8014248(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][0],0,gUnknown_203B208->menuAction1,gUnknown_203B208->unk24, + gUnknown_203B208->unk4C,4,0,gUnknown_203B208->unkE8,0xc); + break; + case 1: + sub_80175FC(); + gUnknown_203B208->unkE4 = 0; + sub_8014248(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][1],0,gUnknown_203B208->menuAction1,gUnknown_203B208->unk24, + gUnknown_203B208->unk4C,4,0,gUnknown_203B208->unkE8,0xc); + break; + case 2: + gUnknown_203B208->fallbackState = 1; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][19],0,gUnknown_203B208->unkE8,0x10d); + break; + case 3: + gUnknown_203B208->fallbackState = 4; + gUnknown_203B208->unkE4 = 1; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][2],0,gUnknown_203B208->unkE8,0x30d); + break; + case 5: + gUnknown_203B208->fallbackState = 1; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][13],0,gUnknown_203B208->unkE8,0x10d); + break; + case 6: + gUnknown_203B208->fallbackState = 1; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][14],0,gUnknown_203B208->unkE8,0x10d); + break; + case 7: + gUnknown_203B208->fallbackState = 1; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][15],0,gUnknown_203B208->unkE8,0x10d); + break; + case 8: + gUnknown_203B208->fallbackState = 1; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][18],0,gUnknown_203B208->unkE8,0x10d); + break; + case 9: + sub_8090E14(gUnknown_202DE58,&gUnknown_203B208->storedItem,0); + gUnknown_203B208->fallbackState = 0xe; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][16],0,gUnknown_203B208->unkE8,0x30d); + break; + case 10: + gUnknown_203B208->fallbackState = 0xe; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][17],0,gUnknown_203B208->unkE8,0x30d); + break; + case 0xb: + gUnknown_203B208->fallbackState = 0xd; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][3],0,gUnknown_203B208->unkE8,0x30d); + break; + case 0xc: + gUnknown_203B208->fallbackState = 0xe; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][4],0,gUnknown_203B208->unkE8,0x30d); + break; + case 0xd: + sub_801A5D8(3,3,0,10); + break; + case 0xe: + sub_801A8D0(1); + break; + case 0xf: + sub_801A9E0(); + sub_80176B8(); + sub_8012D60(&gUnknown_203B208->unk58,gUnknown_203B208->unk24,0, + gUnknown_203B208->unk4C,gUnknown_203B208->menuAction2,2); + break; + + case 0x11: + sub_80177F8(); + sub_8090E14(gUnknown_202DE58,&gUnknown_203B208->storedItem,0); + gUnknown_203B208->unkE4 = 0; + sub_8014248(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][5],0,4,gUnknown_203B208->unk24,0,4,0, + gUnknown_203B208->unkE8,0xc); + break; + case 0x12: + sub_80177F8(); + gUnknown_203B208->unkE4 = 0; + sub_8014248(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][6],0,4,gUnknown_203B208->unk24,0,4,0, + gUnknown_203B208->unkE8,0xc); + break; + case 0x13: + if (GetNumberOfFilledInventorySlots() == 0) { + sub_801A928(); + gUnknown_203B208->fallbackState = 1; + } + else { + gUnknown_203B208->fallbackState = 0xc; + } + gUnknown_203B208->unkE4 = 1; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][7],0,gUnknown_203B208->unkE8,0x10d); + break; + case 0x14: + gUnknown_203B208->fallbackState = 0x16; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][8],0,gUnknown_203B208->unkE8,0x30d); + break; + case 0x15: + gUnknown_203B208->fallbackState = 0x17; + gUnknown_203B208->unkE4 = 0; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][9],0,gUnknown_203B208->unkE8,0x30d); + break; + case 0x16: + sub_801C8C4(1,3,0,10); + sub_801AD34(0); + break; + case 0x17: + sub_801CB5C(1); + sub_801AD34(0); + break; + case 0x18: + gUnknown_203B208->unkB8 = 2; + gUnknown_203B208->unkB0 = 1; + if (gTeamInventory_203B460->teamStorage[gUnknown_203B208->storedItem.id] >= 100) + { + gUnknown_203B208->unkB4 = 99; + } + else { + gUnknown_203B208->unkB4 = gTeamInventory_203B460->teamStorage [gUnknown_203B208->storedItem.id]; + + } + gUnknown_203B208->unkAC = gUnknown_203B208->unkB4; + gUnknown_203B208->unkBC = 1; + gUnknown_203B208->unkC0 = &gUnknown_203B208->unkEC[1]; + gUnknown_203B208->unkC4 = 0x28; + gUnknown_203B208->unkC8 = 0x12; + sub_8013AA0(&gUnknown_203B208->unkA8); + sub_8017598(); + break; + case 0x19: + sub_801CCD8(); + sub_801AD34(0); + sub_8017758(); + sub_8012D60(&gUnknown_203B208->unk58,gUnknown_203B208->unk24,0, + gUnknown_203B208->unk4C,gUnknown_203B208->menuAction3,2); + break; + case 0x10: + case 0x1a: + sub_801B3C0(&gUnknown_203B208->storedItem); + break; + case 0x1b: + sub_80177F8(); + sub_8090E14(gUnknown_202DE58,&gUnknown_203B208->storedItem,0); + gUnknown_203B208->unkE4 = 0; + sub_8014248(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][10],0,4,gUnknown_203B208->unk24,0,4,0, + gUnknown_203B208->unkE8,0xc); + break; + case 0x1c: + sub_80177F8(); + gUnknown_203B208->unkE4 = 0; + sub_8014248(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][11],0,4,gUnknown_203B208->unk24,0,4,0, + gUnknown_203B208->unkE8,0xc); + break; + case 0x1d: + if ((sub_801CF14(1)) || (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE)) { + sub_801CBB8(); + gUnknown_203B208->fallbackState = 1; + } + else { + gUnknown_203B208->fallbackState = 0x15; + } + gUnknown_203B208->unkE4 = 1; + sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][12],0,gUnknown_203B208->unkE8,0x10d); + break; + } +} + +void sub_8017598(void) +{ + + sub_8008C54(gUnknown_203B208->unkBC); + sub_80073B8(gUnknown_203B208->unkBC); + xxx_call_draw_string(4,0,&gUnknown_80DB7A8,gUnknown_203B208->unkBC,0); // Number? + sub_8013C68(&gUnknown_203B208->unkA8); + sub_80073E0(gUnknown_203B208->unkBC); + sub_801CCD8(); + sub_801AD34(0); + sub_8012EA4(&gUnknown_203B208->unk58,0); +} + +void sub_80175FC(void) +{ + int index; + + s32 loopMax; + MemoryFill16(gUnknown_203B208->unk4C,0, sizeof(gUnknown_203B208->unk4C)); + loopMax = 0; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4958; + gUnknown_203B208->unk24[loopMax].menuAction = 2; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4964; + gUnknown_203B208->unk24[loopMax].menuAction = 3; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4970; + gUnknown_203B208->unk24[loopMax].menuAction = 6; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4934; + gUnknown_203B208->unk24[loopMax].menuAction = 1; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = NULL; + gUnknown_203B208->unk24[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B208->unk4C[index] == 0) + { + if(gUnknown_203B208->unk24[index].menuAction == gUnknown_203B208->menuAction1) + return; + } + } + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B208->unk4C[index] == 0) + { + gUnknown_203B208->menuAction1 = gUnknown_203B208->unk24[index].menuAction; + break; + } + } +} + +void sub_80176B8(void) +{ + int index; + s32 loopMax; + + MemoryFill16(gUnknown_203B208->unk4C,0,sizeof(gUnknown_203B208->unk4C)); + loopMax = 0; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4958; + gUnknown_203B208->unk24[loopMax].menuAction = 2; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4970; + gUnknown_203B208->unk24[loopMax].menuAction = 6; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = NULL; + gUnknown_203B208->unk24[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B208->unk4C[index] == 0) + { + if(gUnknown_203B208->unk24[index].menuAction == gUnknown_203B208->menuAction2) + return; + } + } + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B208->unk4C[index] == 0) + { + gUnknown_203B208->menuAction2 = gUnknown_203B208->unk24[index].menuAction; + break; + } + } +} + +void sub_8017758(void) +{ + int index; + s32 loopMax; + + MemoryFill16(gUnknown_203B208->unk4C,0,sizeof(gUnknown_203B208->unk4C)); + loopMax = 0; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4964; + gUnknown_203B208->unk24[loopMax].menuAction = 3; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4970; + gUnknown_203B208->unk24[loopMax].menuAction = 6; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = NULL; + gUnknown_203B208->unk24[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B208->unk4C[index] == 0) + { + if(gUnknown_203B208->unk24[index].menuAction == gUnknown_203B208->menuAction3) + return; + } + } + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B208->unk4C[index] == 0) + { + gUnknown_203B208->menuAction3 = gUnknown_203B208->unk24[index].menuAction; + break; + } + } +} + +void sub_80177F8(void) +{ + s32 loopMax; + + loopMax = 0; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4920; + gUnknown_203B208->unk24[loopMax].menuAction = 4; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4928; + gUnknown_203B208->unk24[loopMax].menuAction = 5; + loopMax += 1; + gUnknown_203B208->unk24[loopMax].text = NULL; + gUnknown_203B208->unk24[loopMax].menuAction = 1; +} + +void sub_8017828(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + if (menuAction != 1) { + gUnknown_203B208->menuAction1 = menuAction; + } + switch(menuAction) + { + case 2: + if (GetNumberOfFilledInventorySlots() == 0) { + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_NO_INV_ITEMS); + } + else if (sub_801CF50(0) != 0) { + UpdateKangaskhanStorageState(8); + } + else { + UpdateKangaskhanStorageState(0xb); + } + break; + case 3: + if (sub_801CF14(1) != 0) { + UpdateKangaskhanStorageState(7); + } + else if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) { + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_TOO_MANY_ITEMS); + } + else { + UpdateKangaskhanStorageState(0x14); + } + break; + case 6: + UpdateKangaskhanStorageState(2); + break; + case 1: + UpdateKangaskhanStorageState(3); + break; + } + } +} + +void sub_80178D0(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + switch(menuAction) + { + case 4: + MoveToStorage(&gUnknown_203B208->storedItem); + ShiftItemsDownFrom(gUnknown_203B208->itemIndex); + FillInventoryGaps(); + UpdateKangaskhanStorageState(0x13); + break; + case 1: + case 5: + UpdateKangaskhanStorageState(0xe); + break; + } + } +} + +void sub_8017928(void) +{ + int menuAction; + struct BulkItem item; + + if (sub_80144A4(&menuAction) == 0) { + switch(menuAction) + { + case 4: + gTeamInventory_203B460->teamStorage[gUnknown_203B208->storedItem.id] -= gUnknown_203B208->storedItem.quantity; + item.id = gUnknown_203B208->storedItem.id; + item.quantity = gUnknown_203B208->storedItem.quantity; + AddHeldItemToInventory(&item); + UpdateKangaskhanStorageState(0x1d); + break; + case 1: + case 5: + UpdateKangaskhanStorageState(0x17); + break; + } + } +} + +void sub_80179A8(void) +{ + s32 index; + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + switch(menuAction) + { + case 4: + for(index = 0; index < INVENTORY_SIZE; index++) + { + if (sub_801AED0(index) != 0) { + MoveToStorage(&gTeamInventory_203B460->teamItems[index]); + gTeamInventory_203B460->teamItems[index].id = 0; + gTeamInventory_203B460->teamItems[index].flags = 0; + } + } + FillInventoryGaps(); + sub_801AE84(); + UpdateKangaskhanStorageState(0x13); + break; + case 1: + case 5: + UpdateKangaskhanStorageState(0xe); + break; + } + } +} + +void sub_8017A1C(void) +{ + s32 itemID; + int menuAction; + struct BulkItem item; + + if (sub_80144A4(&menuAction) == 0) { + + switch(menuAction) + { + case 4: + for(itemID = 0; itemID < NUMBER_OF_ITEM_IDS; itemID++) + { + if(sub_801CFE0(itemID) != 0) + { + item.id = itemID; + if(IsThrowableItem(item.id)) + if(gTeamInventory_203B460->teamStorage[item.id] > 0x63) + { + item.quantity = 0x63; + } + else + { + item.quantity = gTeamInventory_203B460->teamStorage[item.id]; + } + else + { + item.quantity = 1; + } + gTeamInventory_203B460->teamStorage[item.id] -= item.quantity; + AddHeldItemToInventory(&item); + } + } + FillInventoryGaps(); + sub_801CF94(); + UpdateKangaskhanStorageState(0x1d); + break; + case 1: + case 5: + UpdateKangaskhanStorageState(0x17); + break; + } + } +} + +void sub_8017AF8(void) +{ + switch(sub_801A6E8(1)) + { + case 3: + if(sub_801AEA8() != 0) + { + sub_8099690(0); + UpdateKangaskhanStorageState(0x12); + } + else + { + gUnknown_203B208->itemIndex = sub_801A8AC(); + gUnknown_203B208->storedItem = gTeamInventory_203B460->teamItems[gUnknown_203B208->itemIndex]; + UpdateKangaskhanStorageState(0xF); + } + break; + case 4: + gUnknown_203B208->itemIndex = sub_801A8AC(); + gUnknown_203B208->storedItem = gTeamInventory_203B460->teamItems[gUnknown_203B208->itemIndex]; + UpdateKangaskhanStorageState(0x10); + break; + case 2: + sub_801A928(); + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_MAIN_MENU); + break; + } +} + +void sub_8017B88(void) +{ + switch(sub_801CA08(1)) + { + case 3: + if(sub_801CFB8() != 0){ + UpdateKangaskhanStorageState(0x1C); + } + else + { + gUnknown_203B208->id = sub_801CB24(); + xxx_init_itemslot_8090A8C(&gUnknown_203B208->storedItem, gUnknown_203B208->id, 0); + gUnknown_203B208->storedItem.quantity = 1; + UpdateKangaskhanStorageState(0x19); + } + break; + case 4: + gUnknown_203B208->id = sub_801CB24(); + xxx_init_itemslot_8090A8C(&gUnknown_203B208->storedItem, gUnknown_203B208->id, 0); + gUnknown_203B208->storedItem.quantity = 1; + UpdateKangaskhanStorageState(0x1A); + break; + case 2: + sub_801CBB8(); + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_MAIN_MENU); + break; + case 1: + sub_801AD34(0); + break; + } +} + +void sub_8017C28(void) +{ + sub_801CA08(0); + sub_8012FD8(&gUnknown_203B208->unk58); + switch(sub_8013BBC(&gUnknown_203B208->unkA8)) + { + case 1: + sub_8017598(); + break; + case 3: + gUnknown_203B208->storedItem.quantity = gUnknown_203B208->unkA8; + UpdateKangaskhanStorageState(0x1B); + break; + case 2: + UpdateKangaskhanStorageState(0x17); + break; + case 0: + default: + break; + } +} + +void sub_8017C7C(void) +{ + s32 menuAction; + menuAction = 0; + sub_801A6E8(0); + if (sub_8012FD8(&gUnknown_203B208->unk58) == 0) { + sub_8013114(&gUnknown_203B208->unk58, &menuAction); + if(menuAction != 1) gUnknown_203B208->menuAction2 = menuAction; + } + + switch(menuAction) + { + case 2: + sub_8099690(0); + if(!IsNotMoneyOrUsedTMItem(gUnknown_203B208->storedItem.id)) + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_IS_MONEY_USED_TM); + else if(!sub_801ADA0(gUnknown_203B208->itemIndex)) + UpdateKangaskhanStorageState(0xA); + else + UpdateKangaskhanStorageState(0x11); + break; + case 6: + sub_8099690(0); + UpdateKangaskhanStorageState(0x10); + break; + case 1: + UpdateKangaskhanStorageState(0xE); + break; + } +} + +void sub_8017D24(void) +{ + s32 menuAction; + menuAction = 0; + sub_801CA08(0); + if (sub_8012FD8(&gUnknown_203B208->unk58) == 0) { + sub_8013114(&gUnknown_203B208->unk58, &menuAction); + if(menuAction != 1) gUnknown_203B208->menuAction3 = menuAction; + } + + switch(menuAction) + { + case 3: + if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) + { + sub_801CBB8(); + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_TOO_MANY_ITEMS); + } + else if(IsThrowableItem(gUnknown_203B208->storedItem.id)) + UpdateKangaskhanStorageState(0x18); + else + UpdateKangaskhanStorageState(0x1B); + break; + case 6: + UpdateKangaskhanStorageState(0x1A); + break; + case 1: + UpdateKangaskhanStorageState(0x17); + break; + } +} + +void sub_8017DC0(void) +{ + switch(sub_801B410()) + { + case 0: + case 1: + default: + break; + case 2: + case 3: + sub_801B450(); + UpdateKangaskhanStorageState(0xE); + break; + } +} + +void sub_8017DDC(void) +{ + switch(sub_801B410()) + { + case 0: + case 1: + default: + break; + case 2: + case 3: + sub_801B450(); + UpdateKangaskhanStorageState(0x17); + break; + } +} + +void AdvanceToKangaskhanStorageFallbackState(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + UpdateKangaskhanStorageState(gUnknown_203B208->fallbackState); + } +} + +u32 sub_8017E1C(void) +{ + ResetUnusedInputStruct(); + sub_800641C(NULL, 1, 1); + gUnknown_203B20C = MemoryAlloc(sizeof(struct unkStruct_203B20C), 8); + gUnknown_203B20C->menuAction1 = 0; + gUnknown_203B20C->menuAction2 = 0; + gUnknown_203B20C->menuAction3 = 0; + sub_8017F10(0); + return 1; +} + +u32 sub_8017E54(void) +{ + switch(gUnknown_203B20C->state) + { + case 0: + sub_8017F10(1); + break; + case 1: + sub_8018588(); + break; + case 4: + case 5: + sub_8018620(); + break; + case 6: + sub_8018904(); + break; + case 7: + sub_8018AC8(); + break; + case 10: + case 11: + sub_80186F8(); + break; + case 12: + sub_8018854(); + break; + case 13: + sub_80189C8(); + break; + case 14: + sub_8018AE4(); + break; + case 3: + return 3; + } + return 0; +} + +void sub_8017EF4(void) +{ + if(gUnknown_203B20C != NULL) + { + MemoryFree(gUnknown_203B20C); + gUnknown_203B20C = NULL; + } +} + +void sub_8017F10(u32 newState) +{ + gUnknown_203B20C->state = newState; + sub_8017F28(); + sub_8018100(); +} + +void sub_8017F28(void) +{ + s32 index; + + sub_8006518(gUnknown_203B20C->unkF0); + + switch(gUnknown_203B20C->state) + { + case 1: + gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; + gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8; + gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; + sub_80182E4(); + gUnknown_203B20C->unkF0[2] = gUnknown_80DB7D0; + sub_8012CAC(&gUnknown_203B20C->unkF0[2], gUnknown_203B20C->unk20); + break; + case 4: + case 5: + gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; + gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8; + gUnknown_203B20C->unkF0[2] = gUnknown_80DB7B8; + gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; + break; + case 10: + case 11: + gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; + gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8; + gUnknown_203B20C->unkF0[2] = gUnknown_80DB7B8; + gUnknown_203B20C->unkF0[0] = gUnknown_80DB800; + break; + case 12: + gUnknown_203B20C->unkF0[1] = gUnknown_80DB818; + break; + case 6: + case 13: + gUnknown_203B20C->unkF0[2] = gUnknown_80DB7E8; + break; + default: + case 0: + for(index = 0; index < 4; index++) + { + gUnknown_203B20C->unkF0[index] = gUnknown_80DB7B8; + } + break; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B20C->unkF0, 1, 1); +} + +void sub_8018100(void) +{ + + switch(gUnknown_203B20C->state) + { + case 1: + sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->menuAction1, 2); + break; + case 4: + sub_801A5D8(3, 3, 0, 0xA); + break; + case 5: + sub_801A8D0(1); + break; + case 6: + sub_801A9E0(); + sub_801841C(); + sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->menuAction2, 2); + break; + case 7: + sub_801B3C0(&gUnknown_203B20C->item); + break; + case 10: + sub_801C8C4(1, 3, 0, 0xA); + sub_801AD34(0); + break; + case 11: + sub_801CB5C(1); + sub_801AD34(0); + break; + case 12: + gUnknown_203B20C->unkD0 = 2; + gUnknown_203B20C->unkC8 = 1; + if(gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id] > 99) + gUnknown_203B20C->unkCC = 99; + else + gUnknown_203B20C->unkCC = gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id]; + gUnknown_203B20C->unkC4 = gUnknown_203B20C->unkCC; + gUnknown_203B20C->unkD4 = 1; + gUnknown_203B20C->unkD8 = &gUnknown_203B20C->unkF0[1]; + gUnknown_203B20C->unkDC = 0x28; + gUnknown_203B20C->unkE0 = 0x12; + sub_8013AA0(&gUnknown_203B20C->unkC0); + sub_8018280(); + break; + case 13: + sub_801CCD8(); + sub_801AD34(0); + sub_80184D4(); + sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->menuAction3, 2); + break; + case 14: + sub_801B3C0(&gUnknown_203B20C->item); + break; + case 0: + default: + break; + } +} + +void sub_8018280(void) +{ + sub_8008C54(gUnknown_203B20C->unkD4); + sub_80073B8(gUnknown_203B20C->unkD4); + xxx_call_draw_string(4, 0, gUnknown_80DB830, gUnknown_203B20C->unkD4, 0); // Number? + sub_8013C68(&gUnknown_203B20C->unkC0); + sub_80073E0(gUnknown_203B20C->unkD4); + sub_801CCD8(); + sub_801AD34(0); + sub_8012EA4(&gUnknown_203B20C->unk70,0); +} + +void sub_80182E4(void) +{ + int index; + s32 loopMax; + + loopMax = 0; + MemoryFill16(gUnknown_203B20C->unk60,0,sizeof(gUnknown_203B20C->unk60)); + gUnknown_203B20C->unk20[0].text = *gUnknown_80D4958; + gUnknown_203B20C->unk20[0].menuAction = 2; + if ((GetNumberOfFilledInventorySlots() == 0) || (sub_801CF50(0) != 0)) { + gUnknown_203B20C->unk60[0] = 1; + } + loopMax += 1; + gUnknown_203B20C->unk20[loopMax].text = *gUnknown_80D4964; + gUnknown_203B20C->unk20[loopMax].menuAction = 3; + if ((sub_801CF14(1) != 0) || (INVENTORY_SIZE <= GetNumberOfFilledInventorySlots())) { + gUnknown_203B20C->unk60[loopMax] = 1; + } + loopMax += 1; + gUnknown_203B20C->unk20[loopMax].text = *gUnknown_80D4934; + gUnknown_203B20C->unk20[loopMax].menuAction = 1; + loopMax += 1; + gUnknown_203B20C->unk20[loopMax].text = NULL; + gUnknown_203B20C->unk20[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B20C->unk60[index] == 0) { + if(gUnknown_203B20C->unk20[index].menuAction == gUnknown_203B20C->menuAction1) + return; + } + } + + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B20C->unk60[index] == 0) { + gUnknown_203B20C->menuAction1 = gUnknown_203B20C->unk20[index].menuAction; + break; + } + } +} + +void sub_801841C(void) +{ + int index; + s32 loopMax; + + loopMax = 0; + MemoryFill16(gUnknown_203B20C->unk60,0,sizeof(gUnknown_203B20C->unk60)); + gUnknown_203B20C->unk20[0].text = *gUnknown_80D4958; + gUnknown_203B20C->unk20[0].menuAction = 2; + if (!sub_801ADA0(gUnknown_203B20C->itemIndex)) { + gUnknown_203B20C->unk60[0] = 1; + } + loopMax += 1; + gUnknown_203B20C->unk20[loopMax].text = *gUnknown_80D4970; + gUnknown_203B20C->unk20[loopMax].menuAction = 4; + loopMax += 1; + gUnknown_203B20C->unk20[loopMax].text = NULL; + gUnknown_203B20C->unk20[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B20C->unk60[index] == 0) { + if(gUnknown_203B20C->unk20[index].menuAction == gUnknown_203B20C->menuAction2) + return; + } + } + + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B20C->unk60[index] == 0) { + gUnknown_203B20C->menuAction2 = gUnknown_203B20C->unk20[index].menuAction; + break; + } + } +} + +void sub_80184D4(void) +{ + int index; + s32 loopMax; + + loopMax = 0; + MemoryFill16(gUnknown_203B20C->unk60,0,sizeof(gUnknown_203B20C->unk60)); + gUnknown_203B20C->unk20[0].text = *gUnknown_80D4964; + gUnknown_203B20C->unk20[0].menuAction = 3; + if ((GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE)) { + gUnknown_203B20C->unk60[0] = 1; + } + loopMax += 1; + gUnknown_203B20C->unk20[loopMax].text = *gUnknown_80D4970; + gUnknown_203B20C->unk20[loopMax].menuAction = 4; + loopMax += 1; + gUnknown_203B20C->unk20[loopMax].text = NULL; + gUnknown_203B20C->unk20[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B20C->unk60[index] == 0) { + if(gUnknown_203B20C->unk20[index].menuAction == gUnknown_203B20C->menuAction3) + return; + } + } + + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B20C->unk60[index] == 0) { + gUnknown_203B20C->menuAction3 = gUnknown_203B20C->unk20[index].menuAction; + break; + } + } +} + +void sub_8018588(void) +{ + s32 menuAction; + menuAction = 0; + + if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0) + { + sub_8013114(&gUnknown_203B20C->unk70, &menuAction); + if(menuAction != 1) gUnknown_203B20C->menuAction1 = menuAction; + } + + switch(menuAction) + { + case 2: + if((GetNumberOfFilledInventorySlots() != 0) && sub_801CF50(0) == 0) + sub_8017F10(4); + else + sub_8012EA4(&gUnknown_203B20C->unk70, 1);; + break; + case 3: + if(sub_801CF14(1) != 0) + sub_8012EA4(&gUnknown_203B20C->unk70, 1); + else + sub_8017F10(0xA); + break; + case 1: + sub_8017F10(3); + break; + } +} + +void sub_8018620(void) +{ + s32 index; + switch(sub_801A6E8(1)) + { + case 3: + if(sub_801AEA8() != 0) + { + for(index = 0; index < INVENTORY_SIZE; index++) + { + if(sub_801AED0(index) != 0) + { + MoveToStorage(&gTeamInventory_203B460->teamItems[index]); + gTeamInventory_203B460->teamItems[index].id = 0; + gTeamInventory_203B460->teamItems[index].flags = 0; + } + } + FillInventoryGaps(); + sub_801AE84(); + if(GetNumberOfFilledInventorySlots() == 0) + { + sub_801A928(); + sub_8017F10(1); + } + else + { + sub_8017F10(5); + } + } + else + { + gUnknown_203B20C->itemIndex = sub_801A8AC(); + gUnknown_203B20C->item = gTeamInventory_203B460->teamItems[gUnknown_203B20C->itemIndex]; + sub_8017F10(6); + } + break; + case 4: + gUnknown_203B20C->itemIndex = sub_801A8AC(); + gUnknown_203B20C->item = gTeamInventory_203B460->teamItems[gUnknown_203B20C->itemIndex]; + sub_8017F10(7); + break; + case 2: + sub_801A928(); + sub_8017F10(1); + break; + } +} + +void sub_80186F8(void) +{ + struct BulkItem item; + s32 itemID; + + switch(sub_801CA08(1)) + { + case 3: + if(sub_801CFB8() != 0) + { + for(itemID = 0; itemID < NUMBER_OF_ITEM_IDS; itemID++) + { + if(sub_801CFE0(itemID) != 0) + { + item.id = itemID; + if(IsThrowableItem(item.id)) + if(gTeamInventory_203B460->teamStorage[item.id] > 0x63) + { + item.quantity = 0x63; + } + else + { + item.quantity = gTeamInventory_203B460->teamStorage[item.id]; + } + else + { + item.quantity = 1; + } + gTeamInventory_203B460->teamStorage[item.id] -= item.quantity; + AddHeldItemToInventory(&item); + } + } + FillInventoryGaps(); + sub_801CF94(); + if((sub_801CF14(1) == 0) && (GetNumberOfFilledInventorySlots() < INVENTORY_SIZE)) + sub_8017F10(0xB); + else + { + sub_801CBB8(); + sub_8017F10(1); + } + } + else + { + gUnknown_203B20C->id = sub_801CB24(); + xxx_init_itemslot_8090A8C(&gUnknown_203B20C->item, gUnknown_203B20C->id, 0); + gUnknown_203B20C->item.quantity = 1; + sub_8017F10(0xD); + } + break; + case 4: + gUnknown_203B20C->id = sub_801CB24(); + xxx_init_itemslot_8090A8C(&gUnknown_203B20C->item, gUnknown_203B20C->id, 0); + gUnknown_203B20C->item.quantity = 1; + sub_8017F10(0xE); + break; + case 2: + sub_801CBB8(); + sub_8017F10(1); + break; + case 1: + sub_801AD34(0); + break; + } +} + +void sub_8018854(void) +{ + struct BulkItem item; + + sub_801CA08(0); + sub_8012FD8(&gUnknown_203B20C->unk70); + + switch(sub_8013BBC(&gUnknown_203B20C->unkC0)) + { + case 3: + gUnknown_203B20C->item.quantity = gUnknown_203B20C->unkC0; + gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id] -= gUnknown_203B20C->item.quantity; + item.id = gUnknown_203B20C->item.id; + item.quantity = gUnknown_203B20C->item.quantity; + AddHeldItemToInventory(&item); + if(sub_801CF14(1) == 0) + if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) + { + error: + sub_801CBB8(); + sub_8017F10(0x1); + } + else + sub_8017F10(0xB); + else + goto error; + break; + case 2: + sub_8017F10(0xB); + break; + case 1: + sub_8018280(); + break; + case 0: + break; + } +} + +void sub_8018904(void) +{ + s32 menuAction; + + menuAction = 0; + + sub_801A6E8(0); + if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0) + { + sub_8013114(&gUnknown_203B20C->unk70, &menuAction); + if(menuAction != 1) gUnknown_203B20C->menuAction2 = menuAction; + } + switch(menuAction) + { + case 2: + if(IsNotMoneyOrUsedTMItem(gUnknown_203B20C->item.id)) + if(sub_801ADA0(gUnknown_203B20C->itemIndex) == 0) + error: + sub_8012EA4(&gUnknown_203B20C->unk70, 1); + else + { + MoveToStorage(&gUnknown_203B20C->item); + ShiftItemsDownFrom(gUnknown_203B20C->itemIndex); + FillInventoryGaps(); + if(GetNumberOfFilledInventorySlots() == 0) + { + sub_801A928(); + sub_8017F10(1); + } + else + sub_8017F10(5); + } + else + goto error; + break; + case 4: + sub_8099690(0); + sub_8017F10(7); + break; + case 1: + sub_8017F10(5); + break; + } +} + +void sub_80189C8(void) +{ + struct BulkItem item; + s32 menuAction; + + menuAction = 0; + + sub_801CA08(0); + if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0) + { + sub_8013114(&gUnknown_203B20C->unk70, &menuAction); + if(menuAction != 1) gUnknown_203B20C->menuAction3 = menuAction; + } + switch(menuAction) + { + case 3: + if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) + sub_8012EA4(&gUnknown_203B20C->unk70, 1); + else if(IsThrowableItem(gUnknown_203B20C->item.id)) + sub_8017F10(0xC); + else + { + gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id] -= gUnknown_203B20C->item.quantity; + item.id = gUnknown_203B20C->item.id; + item.quantity = gUnknown_203B20C->item.quantity; + AddHeldItemToInventory(&item); + if(sub_801CF14(1) == 0) + if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) + { + error: + sub_801CBB8(); + sub_8017F10(1); + } + else + { + sub_8017F10(0xB); + } + else + goto error; + } + break; + case 4: + sub_8017F10(0xE); + break; + case 1: + sub_8017F10(0xB); + break; + } +} + +void sub_8018AC8(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + sub_8017F10(0x5); + break; + case 0: + case 1: + default: + break; + } +} + +void sub_8018AE4(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + sub_8017F10(0xB); + break; + case 0: + case 1: + default: + break; + } +} + diff --git a/src/kangaskhan_storage_1.c b/src/kangaskhan_storage_1.c deleted file mode 100644 index e32dff046..000000000 --- a/src/kangaskhan_storage_1.c +++ /dev/null @@ -1,1183 +0,0 @@ -#include "constants/item.h" -#include "global.h" -#include "input.h" -#include "memory.h" -#include "text.h" -#include "item.h" -#include "team_inventory.h" -#include "input.h" -#include "kangaskhan_storage.h" -#include "menu_input.h" - - -extern struct unkStruct_203B208 *gUnknown_203B208; -extern struct unkStruct_203B20C *gUnknown_203B20C; - -extern u8 gUnknown_80DB7A8; - -extern void sub_8017F10(u32); -extern void sub_8018588(void); -extern void sub_8018620(void); -extern void sub_8018904(void); -extern void sub_8018AC8(void); -extern void sub_80186F8(void); -extern void sub_8018854(void); -extern void sub_80189C8(void); -extern void sub_8018AE4(void); - - -extern void sub_8017F28(); -extern void sub_8018100(); -extern void UpdateKangaskhanStorageState(u32); -extern s32 sub_80144A4(s32 *); -extern void sub_801B450(); -extern u32 sub_801B410(void); - -extern void sub_801CBB8(); - -extern bool8 sub_801ADA0(u32); -extern void sub_8099690(u32); -extern u32 sub_8013BBC(u32 *); -extern void sub_8017598(void); - -extern u32 sub_801CA08(u32); -extern u32 sub_801CFB8(void); -extern u8 sub_801CB24(); -extern void sub_801AD34(u32); -extern u32 sub_801A6E8(u32); -extern u32 sub_801AEA8(void); -extern u32 sub_801A8AC(void); -extern void sub_801A928(void); -extern void sub_80182E4(void); -extern void sub_8008C54(u32); -extern void sub_80073B8(u32); -extern void sub_8013C68(u32 *); -extern void sub_80073E0(u32); - -extern void sub_801A9E0(); -extern void sub_801841C(); -extern void sub_801CCD8(); -extern void sub_80184D4(); -extern void sub_8018280(); -extern void sub_8013AA0(u32 *); -extern void sub_801B3C0(struct Item *); -extern void sub_801A5D8(u32, u32, u32, u32); -extern void sub_801C8C4(u32, u32, u32, u32); -extern void sub_801CB5C(u32); -extern void sub_801A8D0(u32); -extern u32 sub_801CFE0(u8); -extern void sub_801CF94(void); -extern void sub_801AE84(void); -extern s32 sub_801AED0(s32); -extern u8 sub_801CF14(u32); -extern u8 sub_801CF50(u32); - -extern struct UnkTextStruct2 gUnknown_80DB7B8; -extern struct UnkTextStruct2 gUnknown_80DB7E8; -extern struct UnkTextStruct2 gUnknown_80DB7D0; -extern struct UnkTextStruct2 gUnknown_80DB800; -extern struct UnkTextStruct2 gUnknown_80DB818; -extern u8 gUnknown_80DB830[]; -extern u8 *gUnknown_80D4920[]; -extern u8 *gUnknown_80D4928[]; - -extern u8 *gUnknown_80D4970[]; -extern u8 *gUnknown_80D4964[]; -extern u8 *gUnknown_80D4958[]; -extern u8 *gUnknown_80D4984[]; -extern u8 *gUnknown_80D4934[]; - -void sub_8017598(void) -{ - - sub_8008C54(gUnknown_203B208->unkBC); - sub_80073B8(gUnknown_203B208->unkBC); - xxx_call_draw_string(4,0,&gUnknown_80DB7A8,gUnknown_203B208->unkBC,0); // Number? - sub_8013C68(&gUnknown_203B208->unkA8); - sub_80073E0(gUnknown_203B208->unkBC); - sub_801CCD8(); - sub_801AD34(0); - sub_8012EA4(&gUnknown_203B208->unk58,0); -} - -void sub_80175FC(void) -{ - int index; - - s32 loopMax; - MemoryFill16(gUnknown_203B208->unk4C,0, sizeof(gUnknown_203B208->unk4C)); - loopMax = 0; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4958; - gUnknown_203B208->unk24[loopMax].menuAction = 2; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4964; - gUnknown_203B208->unk24[loopMax].menuAction = 3; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4970; - gUnknown_203B208->unk24[loopMax].menuAction = 6; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4934; - gUnknown_203B208->unk24[loopMax].menuAction = 1; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = NULL; - gUnknown_203B208->unk24[loopMax].menuAction = 1; - - for(index = 0; index < loopMax; index++) - { - if(gUnknown_203B208->unk4C[index] == 0) - { - if(gUnknown_203B208->unk24[index].menuAction == gUnknown_203B208->menuAction1) - return; - } - } - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B208->unk4C[index] == 0) - { - gUnknown_203B208->menuAction1 = gUnknown_203B208->unk24[index].menuAction; - break; - } - } -} - -void sub_80176B8(void) -{ - int index; - s32 loopMax; - - MemoryFill16(gUnknown_203B208->unk4C,0,sizeof(gUnknown_203B208->unk4C)); - loopMax = 0; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4958; - gUnknown_203B208->unk24[loopMax].menuAction = 2; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4970; - gUnknown_203B208->unk24[loopMax].menuAction = 6; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = NULL; - gUnknown_203B208->unk24[loopMax].menuAction = 1; - - for(index = 0; index < loopMax; index++) - { - if(gUnknown_203B208->unk4C[index] == 0) - { - if(gUnknown_203B208->unk24[index].menuAction == gUnknown_203B208->menuAction2) - return; - } - } - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B208->unk4C[index] == 0) - { - gUnknown_203B208->menuAction2 = gUnknown_203B208->unk24[index].menuAction; - break; - } - } -} - -void sub_8017758(void) -{ - int index; - s32 loopMax; - - MemoryFill16(gUnknown_203B208->unk4C,0,sizeof(gUnknown_203B208->unk4C)); - loopMax = 0; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4964; - gUnknown_203B208->unk24[loopMax].menuAction = 3; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4970; - gUnknown_203B208->unk24[loopMax].menuAction = 6; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = NULL; - gUnknown_203B208->unk24[loopMax].menuAction = 1; - - for(index = 0; index < loopMax; index++) - { - if(gUnknown_203B208->unk4C[index] == 0) - { - if(gUnknown_203B208->unk24[index].menuAction == gUnknown_203B208->menuAction3) - return; - } - } - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B208->unk4C[index] == 0) - { - gUnknown_203B208->menuAction3 = gUnknown_203B208->unk24[index].menuAction; - break; - } - } -} - -void sub_80177F8(void) -{ - s32 loopMax; - - loopMax = 0; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4920; - gUnknown_203B208->unk24[loopMax].menuAction = 4; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = *gUnknown_80D4928; - gUnknown_203B208->unk24[loopMax].menuAction = 5; - loopMax += 1; - gUnknown_203B208->unk24[loopMax].text = NULL; - gUnknown_203B208->unk24[loopMax].menuAction = 1; -} - -void sub_8017828(void) -{ - s32 menuAction; - - if (sub_80144A4(&menuAction) == 0) { - if (menuAction != 1) { - gUnknown_203B208->menuAction1 = menuAction; - } - switch(menuAction) - { - case 2: - if (GetNumberOfFilledInventorySlots() == 0) { - UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_NO_INV_ITEMS); - } - else if (sub_801CF50(0) != 0) { - UpdateKangaskhanStorageState(8); - } - else { - UpdateKangaskhanStorageState(0xb); - } - break; - case 3: - if (sub_801CF14(1) != 0) { - UpdateKangaskhanStorageState(7); - } - else if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) { - UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_TOO_MANY_ITEMS); - } - else { - UpdateKangaskhanStorageState(0x14); - } - break; - case 6: - UpdateKangaskhanStorageState(2); - break; - case 1: - UpdateKangaskhanStorageState(3); - break; - } - } -} - -void sub_80178D0(void) -{ - s32 menuAction; - - if (sub_80144A4(&menuAction) == 0) { - switch(menuAction) - { - case 4: - MoveToStorage(&gUnknown_203B208->storedItem); - ShiftItemsDownFrom(gUnknown_203B208->itemIndex); - FillInventoryGaps(); - UpdateKangaskhanStorageState(0x13); - break; - case 1: - case 5: - UpdateKangaskhanStorageState(0xe); - break; - } - } -} - -void sub_8017928(void) -{ - int menuAction; - struct BulkItem item; - - if (sub_80144A4(&menuAction) == 0) { - switch(menuAction) - { - case 4: - gTeamInventory_203B460->teamStorage[gUnknown_203B208->storedItem.id] -= gUnknown_203B208->storedItem.quantity; - item.id = gUnknown_203B208->storedItem.id; - item.quantity = gUnknown_203B208->storedItem.quantity; - AddHeldItemToInventory(&item); - UpdateKangaskhanStorageState(0x1d); - break; - case 1: - case 5: - UpdateKangaskhanStorageState(0x17); - break; - } - } -} - -void sub_80179A8(void) -{ - s32 index; - s32 menuAction; - - if (sub_80144A4(&menuAction) == 0) { - switch(menuAction) - { - case 4: - for(index = 0; index < INVENTORY_SIZE; index++) - { - if (sub_801AED0(index) != 0) { - MoveToStorage(&gTeamInventory_203B460->teamItems[index]); - gTeamInventory_203B460->teamItems[index].id = 0; - gTeamInventory_203B460->teamItems[index].flags = 0; - } - } - FillInventoryGaps(); - sub_801AE84(); - UpdateKangaskhanStorageState(0x13); - break; - case 1: - case 5: - UpdateKangaskhanStorageState(0xe); - break; - } - } -} - -void sub_8017A1C(void) -{ - s32 itemID; - int menuAction; - struct BulkItem item; - - if (sub_80144A4(&menuAction) == 0) { - - switch(menuAction) - { - case 4: - for(itemID = 0; itemID < NUMBER_OF_ITEM_IDS; itemID++) - { - if(sub_801CFE0(itemID) != 0) - { - item.id = itemID; - if(IsThrowableItem(item.id)) - if(gTeamInventory_203B460->teamStorage[item.id] > 0x63) - { - item.quantity = 0x63; - } - else - { - item.quantity = gTeamInventory_203B460->teamStorage[item.id]; - } - else - { - item.quantity = 1; - } - gTeamInventory_203B460->teamStorage[item.id] -= item.quantity; - AddHeldItemToInventory(&item); - } - } - FillInventoryGaps(); - sub_801CF94(); - UpdateKangaskhanStorageState(0x1d); - break; - case 1: - case 5: - UpdateKangaskhanStorageState(0x17); - break; - } - } -} - -void sub_8017AF8(void) -{ - switch(sub_801A6E8(1)) - { - case 3: - if(sub_801AEA8() != 0) - { - sub_8099690(0); - UpdateKangaskhanStorageState(0x12); - } - else - { - gUnknown_203B208->itemIndex = sub_801A8AC(); - gUnknown_203B208->storedItem = gTeamInventory_203B460->teamItems[gUnknown_203B208->itemIndex]; - UpdateKangaskhanStorageState(0xF); - } - break; - case 4: - gUnknown_203B208->itemIndex = sub_801A8AC(); - gUnknown_203B208->storedItem = gTeamInventory_203B460->teamItems[gUnknown_203B208->itemIndex]; - UpdateKangaskhanStorageState(0x10); - break; - case 2: - sub_801A928(); - UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_MAIN_MENU); - break; - } -} - -void sub_8017B88(void) -{ - switch(sub_801CA08(1)) - { - case 3: - if(sub_801CFB8() != 0){ - UpdateKangaskhanStorageState(0x1C); - } - else - { - gUnknown_203B208->id = sub_801CB24(); - xxx_init_itemslot_8090A8C(&gUnknown_203B208->storedItem, gUnknown_203B208->id, 0); - gUnknown_203B208->storedItem.quantity = 1; - UpdateKangaskhanStorageState(0x19); - } - break; - case 4: - gUnknown_203B208->id = sub_801CB24(); - xxx_init_itemslot_8090A8C(&gUnknown_203B208->storedItem, gUnknown_203B208->id, 0); - gUnknown_203B208->storedItem.quantity = 1; - UpdateKangaskhanStorageState(0x1A); - break; - case 2: - sub_801CBB8(); - UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_MAIN_MENU); - break; - case 1: - sub_801AD34(0); - break; - } -} - -void sub_8017C28(void) -{ - sub_801CA08(0); - sub_8012FD8(&gUnknown_203B208->unk58); - switch(sub_8013BBC(&gUnknown_203B208->unkA8)) - { - case 1: - sub_8017598(); - break; - case 3: - gUnknown_203B208->storedItem.quantity = gUnknown_203B208->unkA8; - UpdateKangaskhanStorageState(0x1B); - break; - case 2: - UpdateKangaskhanStorageState(0x17); - break; - case 0: - default: - break; - } -} - -void sub_8017C7C(void) -{ - s32 menuAction; - menuAction = 0; - sub_801A6E8(0); - if (sub_8012FD8(&gUnknown_203B208->unk58) == 0) { - sub_8013114(&gUnknown_203B208->unk58, &menuAction); - if(menuAction != 1) gUnknown_203B208->menuAction2 = menuAction; - } - - switch(menuAction) - { - case 2: - sub_8099690(0); - if(!IsNotMoneyOrUsedTMItem(gUnknown_203B208->storedItem.id)) - UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_IS_MONEY_USED_TM); - else if(!sub_801ADA0(gUnknown_203B208->itemIndex)) - UpdateKangaskhanStorageState(0xA); - else - UpdateKangaskhanStorageState(0x11); - break; - case 6: - sub_8099690(0); - UpdateKangaskhanStorageState(0x10); - break; - case 1: - UpdateKangaskhanStorageState(0xE); - break; - } -} - -void sub_8017D24(void) -{ - s32 menuAction; - menuAction = 0; - sub_801CA08(0); - if (sub_8012FD8(&gUnknown_203B208->unk58) == 0) { - sub_8013114(&gUnknown_203B208->unk58, &menuAction); - if(menuAction != 1) gUnknown_203B208->menuAction3 = menuAction; - } - - switch(menuAction) - { - case 3: - if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) - { - sub_801CBB8(); - UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_TOO_MANY_ITEMS); - } - else if(IsThrowableItem(gUnknown_203B208->storedItem.id)) - UpdateKangaskhanStorageState(0x18); - else - UpdateKangaskhanStorageState(0x1B); - break; - case 6: - UpdateKangaskhanStorageState(0x1A); - break; - case 1: - UpdateKangaskhanStorageState(0x17); - break; - } -} - -void sub_8017DC0(void) -{ - switch(sub_801B410()) - { - case 0: - case 1: - default: - break; - case 2: - case 3: - sub_801B450(); - UpdateKangaskhanStorageState(0xE); - break; - } -} - -void sub_8017DDC(void) -{ - switch(sub_801B410()) - { - case 0: - case 1: - default: - break; - case 2: - case 3: - sub_801B450(); - UpdateKangaskhanStorageState(0x17); - break; - } -} - -void AdvanceToKangaskhanStorageFallbackState(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - UpdateKangaskhanStorageState(gUnknown_203B208->fallbackState); - } -} - -u32 sub_8017E1C(void) -{ - ResetUnusedInputStruct(); - sub_800641C(NULL, 1, 1); - gUnknown_203B20C = MemoryAlloc(sizeof(struct unkStruct_203B20C), 8); - gUnknown_203B20C->menuAction1 = 0; - gUnknown_203B20C->menuAction2 = 0; - gUnknown_203B20C->menuAction3 = 0; - sub_8017F10(0); - return 1; -} - -u32 sub_8017E54(void) -{ - switch(gUnknown_203B20C->state) - { - case 0: - sub_8017F10(1); - break; - case 1: - sub_8018588(); - break; - case 4: - case 5: - sub_8018620(); - break; - case 6: - sub_8018904(); - break; - case 7: - sub_8018AC8(); - break; - case 10: - case 11: - sub_80186F8(); - break; - case 12: - sub_8018854(); - break; - case 13: - sub_80189C8(); - break; - case 14: - sub_8018AE4(); - break; - case 3: - return 3; - } - return 0; -} - -void sub_8017EF4(void) -{ - if(gUnknown_203B20C != NULL) - { - MemoryFree(gUnknown_203B20C); - gUnknown_203B20C = NULL; - } -} - -void sub_8017F10(u32 newState) -{ - gUnknown_203B20C->state = newState; - sub_8017F28(); - sub_8018100(); -} - -void sub_8017F28(void) -{ - s32 index; - - sub_8006518(gUnknown_203B20C->unkF0); - - switch(gUnknown_203B20C->state) - { - case 1: - gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; - gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8; - gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; - sub_80182E4(); - gUnknown_203B20C->unkF0[2] = gUnknown_80DB7D0; - sub_8012CAC(&gUnknown_203B20C->unkF0[2], gUnknown_203B20C->unk20); - break; - case 4: - case 5: - gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; - gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8; - gUnknown_203B20C->unkF0[2] = gUnknown_80DB7B8; - gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; - break; - case 10: - case 11: - gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8; - gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8; - gUnknown_203B20C->unkF0[2] = gUnknown_80DB7B8; - gUnknown_203B20C->unkF0[0] = gUnknown_80DB800; - break; - case 12: - gUnknown_203B20C->unkF0[1] = gUnknown_80DB818; - break; - case 6: - case 13: - gUnknown_203B20C->unkF0[2] = gUnknown_80DB7E8; - break; - default: - case 0: - for(index = 0; index < 4; index++) - { - gUnknown_203B20C->unkF0[index] = gUnknown_80DB7B8; - } - break; - } - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B20C->unkF0, 1, 1); -} - -void sub_8018100(void) -{ - - switch(gUnknown_203B20C->state) - { - case 1: - sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->menuAction1, 2); - break; - case 4: - sub_801A5D8(3, 3, 0, 0xA); - break; - case 5: - sub_801A8D0(1); - break; - case 6: - sub_801A9E0(); - sub_801841C(); - sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->menuAction2, 2); - break; - case 7: - sub_801B3C0(&gUnknown_203B20C->item); - break; - case 10: - sub_801C8C4(1, 3, 0, 0xA); - sub_801AD34(0); - break; - case 11: - sub_801CB5C(1); - sub_801AD34(0); - break; - case 12: - gUnknown_203B20C->unkD0 = 2; - gUnknown_203B20C->unkC8 = 1; - if(gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id] > 99) - gUnknown_203B20C->unkCC = 99; - else - gUnknown_203B20C->unkCC = gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id]; - gUnknown_203B20C->unkC4 = gUnknown_203B20C->unkCC; - gUnknown_203B20C->unkD4 = 1; - gUnknown_203B20C->unkD8 = &gUnknown_203B20C->unkF0[1]; - gUnknown_203B20C->unkDC = 0x28; - gUnknown_203B20C->unkE0 = 0x12; - sub_8013AA0(&gUnknown_203B20C->unkC0); - sub_8018280(); - break; - case 13: - sub_801CCD8(); - sub_801AD34(0); - sub_80184D4(); - sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->menuAction3, 2); - break; - case 14: - sub_801B3C0(&gUnknown_203B20C->item); - break; - case 0: - default: - break; - } -} - -void sub_8018280(void) -{ - sub_8008C54(gUnknown_203B20C->unkD4); - sub_80073B8(gUnknown_203B20C->unkD4); - xxx_call_draw_string(4, 0, gUnknown_80DB830, gUnknown_203B20C->unkD4, 0); // Number? - sub_8013C68(&gUnknown_203B20C->unkC0); - sub_80073E0(gUnknown_203B20C->unkD4); - sub_801CCD8(); - sub_801AD34(0); - sub_8012EA4(&gUnknown_203B20C->unk70,0); -} - -void sub_80182E4(void) -{ - int index; - s32 loopMax; - - loopMax = 0; - MemoryFill16(gUnknown_203B20C->unk60,0,sizeof(gUnknown_203B20C->unk60)); - gUnknown_203B20C->unk20[0].text = *gUnknown_80D4958; - gUnknown_203B20C->unk20[0].menuAction = 2; - if ((GetNumberOfFilledInventorySlots() == 0) || (sub_801CF50(0) != 0)) { - gUnknown_203B20C->unk60[0] = 1; - } - loopMax += 1; - gUnknown_203B20C->unk20[loopMax].text = *gUnknown_80D4964; - gUnknown_203B20C->unk20[loopMax].menuAction = 3; - if ((sub_801CF14(1) != 0) || (INVENTORY_SIZE <= GetNumberOfFilledInventorySlots())) { - gUnknown_203B20C->unk60[loopMax] = 1; - } - loopMax += 1; - gUnknown_203B20C->unk20[loopMax].text = *gUnknown_80D4934; - gUnknown_203B20C->unk20[loopMax].menuAction = 1; - loopMax += 1; - gUnknown_203B20C->unk20[loopMax].text = NULL; - gUnknown_203B20C->unk20[loopMax].menuAction = 1; - - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B20C->unk60[index] == 0) { - if(gUnknown_203B20C->unk20[index].menuAction == gUnknown_203B20C->menuAction1) - return; - } - } - - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B20C->unk60[index] == 0) { - gUnknown_203B20C->menuAction1 = gUnknown_203B20C->unk20[index].menuAction; - break; - } - } -} - -void sub_801841C(void) -{ - int index; - s32 loopMax; - - loopMax = 0; - MemoryFill16(gUnknown_203B20C->unk60,0,sizeof(gUnknown_203B20C->unk60)); - gUnknown_203B20C->unk20[0].text = *gUnknown_80D4958; - gUnknown_203B20C->unk20[0].menuAction = 2; - if (!sub_801ADA0(gUnknown_203B20C->itemIndex)) { - gUnknown_203B20C->unk60[0] = 1; - } - loopMax += 1; - gUnknown_203B20C->unk20[loopMax].text = *gUnknown_80D4970; - gUnknown_203B20C->unk20[loopMax].menuAction = 4; - loopMax += 1; - gUnknown_203B20C->unk20[loopMax].text = NULL; - gUnknown_203B20C->unk20[loopMax].menuAction = 1; - - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B20C->unk60[index] == 0) { - if(gUnknown_203B20C->unk20[index].menuAction == gUnknown_203B20C->menuAction2) - return; - } - } - - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B20C->unk60[index] == 0) { - gUnknown_203B20C->menuAction2 = gUnknown_203B20C->unk20[index].menuAction; - break; - } - } -} - -void sub_80184D4(void) -{ - int index; - s32 loopMax; - - loopMax = 0; - MemoryFill16(gUnknown_203B20C->unk60,0,sizeof(gUnknown_203B20C->unk60)); - gUnknown_203B20C->unk20[0].text = *gUnknown_80D4964; - gUnknown_203B20C->unk20[0].menuAction = 3; - if ((GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE)) { - gUnknown_203B20C->unk60[0] = 1; - } - loopMax += 1; - gUnknown_203B20C->unk20[loopMax].text = *gUnknown_80D4970; - gUnknown_203B20C->unk20[loopMax].menuAction = 4; - loopMax += 1; - gUnknown_203B20C->unk20[loopMax].text = NULL; - gUnknown_203B20C->unk20[loopMax].menuAction = 1; - - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B20C->unk60[index] == 0) { - if(gUnknown_203B20C->unk20[index].menuAction == gUnknown_203B20C->menuAction3) - return; - } - } - - for(index = 0; index < loopMax; index++) - { - if (gUnknown_203B20C->unk60[index] == 0) { - gUnknown_203B20C->menuAction3 = gUnknown_203B20C->unk20[index].menuAction; - break; - } - } -} - -void sub_8018588(void) -{ - s32 menuAction; - menuAction = 0; - - if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0) - { - sub_8013114(&gUnknown_203B20C->unk70, &menuAction); - if(menuAction != 1) gUnknown_203B20C->menuAction1 = menuAction; - } - - switch(menuAction) - { - case 2: - if((GetNumberOfFilledInventorySlots() != 0) && sub_801CF50(0) == 0) - sub_8017F10(4); - else - sub_8012EA4(&gUnknown_203B20C->unk70, 1);; - break; - case 3: - if(sub_801CF14(1) != 0) - sub_8012EA4(&gUnknown_203B20C->unk70, 1); - else - sub_8017F10(0xA); - break; - case 1: - sub_8017F10(3); - break; - } -} - -void sub_8018620(void) -{ - s32 index; - switch(sub_801A6E8(1)) - { - case 3: - if(sub_801AEA8() != 0) - { - for(index = 0; index < INVENTORY_SIZE; index++) - { - if(sub_801AED0(index) != 0) - { - MoveToStorage(&gTeamInventory_203B460->teamItems[index]); - gTeamInventory_203B460->teamItems[index].id = 0; - gTeamInventory_203B460->teamItems[index].flags = 0; - } - } - FillInventoryGaps(); - sub_801AE84(); - if(GetNumberOfFilledInventorySlots() == 0) - { - sub_801A928(); - sub_8017F10(1); - } - else - { - sub_8017F10(5); - } - } - else - { - gUnknown_203B20C->itemIndex = sub_801A8AC(); - gUnknown_203B20C->item = gTeamInventory_203B460->teamItems[gUnknown_203B20C->itemIndex]; - sub_8017F10(6); - } - break; - case 4: - gUnknown_203B20C->itemIndex = sub_801A8AC(); - gUnknown_203B20C->item = gTeamInventory_203B460->teamItems[gUnknown_203B20C->itemIndex]; - sub_8017F10(7); - break; - case 2: - sub_801A928(); - sub_8017F10(1); - break; - } -} - -void sub_80186F8(void) -{ - struct BulkItem item; - s32 itemID; - - switch(sub_801CA08(1)) - { - case 3: - if(sub_801CFB8() != 0) - { - for(itemID = 0; itemID < NUMBER_OF_ITEM_IDS; itemID++) - { - if(sub_801CFE0(itemID) != 0) - { - item.id = itemID; - if(IsThrowableItem(item.id)) - if(gTeamInventory_203B460->teamStorage[item.id] > 0x63) - { - item.quantity = 0x63; - } - else - { - item.quantity = gTeamInventory_203B460->teamStorage[item.id]; - } - else - { - item.quantity = 1; - } - gTeamInventory_203B460->teamStorage[item.id] -= item.quantity; - AddHeldItemToInventory(&item); - } - } - FillInventoryGaps(); - sub_801CF94(); - if((sub_801CF14(1) == 0) && (GetNumberOfFilledInventorySlots() < INVENTORY_SIZE)) - sub_8017F10(0xB); - else - { - sub_801CBB8(); - sub_8017F10(1); - } - } - else - { - gUnknown_203B20C->id = sub_801CB24(); - xxx_init_itemslot_8090A8C(&gUnknown_203B20C->item, gUnknown_203B20C->id, 0); - gUnknown_203B20C->item.quantity = 1; - sub_8017F10(0xD); - } - break; - case 4: - gUnknown_203B20C->id = sub_801CB24(); - xxx_init_itemslot_8090A8C(&gUnknown_203B20C->item, gUnknown_203B20C->id, 0); - gUnknown_203B20C->item.quantity = 1; - sub_8017F10(0xE); - break; - case 2: - sub_801CBB8(); - sub_8017F10(1); - break; - case 1: - sub_801AD34(0); - break; - } -} - -void sub_8018854(void) -{ - struct BulkItem item; - - sub_801CA08(0); - sub_8012FD8(&gUnknown_203B20C->unk70); - - switch(sub_8013BBC(&gUnknown_203B20C->unkC0)) - { - case 3: - gUnknown_203B20C->item.quantity = gUnknown_203B20C->unkC0; - gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id] -= gUnknown_203B20C->item.quantity; - item.id = gUnknown_203B20C->item.id; - item.quantity = gUnknown_203B20C->item.quantity; - AddHeldItemToInventory(&item); - if(sub_801CF14(1) == 0) - if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) - { - error: - sub_801CBB8(); - sub_8017F10(0x1); - } - else - sub_8017F10(0xB); - else - goto error; - break; - case 2: - sub_8017F10(0xB); - break; - case 1: - sub_8018280(); - break; - case 0: - break; - } -} - -void sub_8018904(void) -{ - s32 menuAction; - - menuAction = 0; - - sub_801A6E8(0); - if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0) - { - sub_8013114(&gUnknown_203B20C->unk70, &menuAction); - if(menuAction != 1) gUnknown_203B20C->menuAction2 = menuAction; - } - switch(menuAction) - { - case 2: - if(IsNotMoneyOrUsedTMItem(gUnknown_203B20C->item.id)) - if(sub_801ADA0(gUnknown_203B20C->itemIndex) == 0) - error: - sub_8012EA4(&gUnknown_203B20C->unk70, 1); - else - { - MoveToStorage(&gUnknown_203B20C->item); - ShiftItemsDownFrom(gUnknown_203B20C->itemIndex); - FillInventoryGaps(); - if(GetNumberOfFilledInventorySlots() == 0) - { - sub_801A928(); - sub_8017F10(1); - } - else - sub_8017F10(5); - } - else - goto error; - break; - case 4: - sub_8099690(0); - sub_8017F10(7); - break; - case 1: - sub_8017F10(5); - break; - } -} - -void sub_80189C8(void) -{ - struct BulkItem item; - s32 menuAction; - - menuAction = 0; - - sub_801CA08(0); - if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0) - { - sub_8013114(&gUnknown_203B20C->unk70, &menuAction); - if(menuAction != 1) gUnknown_203B20C->menuAction3 = menuAction; - } - switch(menuAction) - { - case 3: - if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) - sub_8012EA4(&gUnknown_203B20C->unk70, 1); - else if(IsThrowableItem(gUnknown_203B20C->item.id)) - sub_8017F10(0xC); - else - { - gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id] -= gUnknown_203B20C->item.quantity; - item.id = gUnknown_203B20C->item.id; - item.quantity = gUnknown_203B20C->item.quantity; - AddHeldItemToInventory(&item); - if(sub_801CF14(1) == 0) - if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) - { - error: - sub_801CBB8(); - sub_8017F10(1); - } - else - { - sub_8017F10(0xB); - } - else - goto error; - } - break; - case 4: - sub_8017F10(0xE); - break; - case 1: - sub_8017F10(0xB); - break; - } -} - -void sub_8018AC8(void) -{ - switch(sub_801B410()) - { - case 2: - case 3: - sub_801B450(); - sub_8017F10(0x5); - break; - case 0: - case 1: - default: - break; - } -} - -void sub_8018AE4(void) -{ - switch(sub_801B410()) - { - case 2: - case 3: - sub_801B450(); - sub_8017F10(0xB); - break; - case 0: - case 1: - default: - break; - } -} From 9e11c7a65169def8deeb0fae2812bd9f60a7c418 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 29 Jul 2023 15:32:29 -0700 Subject: [PATCH 17/26] document more kangaskhan and found more gulpin shop --- asm/code_801EE10_mid.s | 539 --------------------------------------- asm/code_8098BDC.s | 2 +- ld_script.txt | 1 + src/code_801EE10_mid.c | 212 +++++++++++++++ src/gulpin_shop_1.c | 90 +++++++ src/kangaskhan_storage.c | 28 +- 6 files changed, 318 insertions(+), 554 deletions(-) create mode 100644 src/gulpin_shop_1.c diff --git a/asm/code_801EE10_mid.s b/asm/code_801EE10_mid.s index 57b60f49a..ce5fbf08b 100644 --- a/asm/code_801EE10_mid.s +++ b/asm/code_801EE10_mid.s @@ -5,545 +5,6 @@ .text - thumb_func_start sub_801F808 -sub_801F808: - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x1 - bl ResetSprites - ldr r5, _0801F88C - movs r0, 0xD4 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r5] - movs r1, 0 - str r1, [r0, 0x5C] - adds r1, r0, 0 - adds r1, 0x64 - str r1, [r0, 0x60] - adds r0, r1, 0 - bl sub_80140B4 - bl ResetUnusedInputStruct - ldr r0, [r5] - adds r0, 0x64 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r5] - str r4, [r0, 0x4] - movs r2, 0x4 - ldrh r0, [r4, 0x6] - cmp r0, 0 - bne _0801F862 - adds r3, r5, 0 -_0801F84C: - subs r2, 0x1 - cmp r2, 0x1 - ble _0801F862 - ldr r0, [r3] - ldr r1, [r0, 0x4] - lsls r0, r2, 1 - adds r0, r1 - subs r0, 0x2 - ldrh r0, [r0] - cmp r0, 0 - beq _0801F84C -_0801F862: - ldr r4, _0801F88C - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x28 - ldr r3, [r1, 0x5C] - adds r1, r2, 0 - movs r2, 0x1 - bl sub_8013818 - ldr r0, [r4] - adds r0, 0xC8 - bl sub_801317C - movs r0, 0 - bl sub_801F918 - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0801F88C: .4byte gUnknown_203B278 - thumb_func_end sub_801F808 - - thumb_func_start sub_801F890 -sub_801F890: - push {lr} - ldr r0, _0801F8A8 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0x1 - beq _0801F8BC - cmp r0, 0x1 - bgt _0801F8AC - cmp r0, 0 - beq _0801F8B6 - b _0801F8C6 - .align 2, 0 -_0801F8A8: .4byte gUnknown_203B278 -_0801F8AC: - cmp r0, 0x2 - beq _0801F8C6 - cmp r0, 0x3 - beq _0801F8C2 - b _0801F8C6 -_0801F8B6: - bl sub_801FA58 - b _0801F8CA -_0801F8BC: - bl sub_801FAD4 - b _0801F8CA -_0801F8C2: - movs r0, 0x3 - b _0801F8CC -_0801F8C6: - movs r0, 0x2 - b _0801F8CC -_0801F8CA: - movs r0, 0 -_0801F8CC: - pop {r1} - bx r1 - thumb_func_end sub_801F890 - - thumb_func_start sub_801F8D0 -sub_801F8D0: - push {r4,r5,lr} - ldr r4, _0801F910 - ldr r2, [r4] - cmp r2, 0 - beq _0801F90A - ldr r0, [r2, 0x5C] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x64 - ldr r0, _0801F914 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x64 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0801F90A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801F910: .4byte gUnknown_203B278 -_0801F914: .4byte gUnknown_80DC2F8 - thumb_func_end sub_801F8D0 - - thumb_func_start sub_801F918 -sub_801F918: - push {lr} - ldr r1, _0801F92C - ldr r1, [r1] - str r0, [r1] - bl sub_801F930 - bl sub_801F9A4 - pop {r0} - bx r0 - .align 2, 0 -_0801F92C: .4byte gUnknown_203B278 - thumb_func_end sub_801F918 - - thumb_func_start sub_801F930 -sub_801F930: - push {r4,lr} - ldr r4, _0801F94C - ldr r0, [r4] - adds r0, 0x64 - bl sub_80140B4 - ldr r2, [r4] - ldr r3, [r2] - cmp r3, 0 - beq _0801F950 - cmp r3, 0x1 - beq _0801F98C - b _0801F99C - .align 2, 0 -_0801F94C: .4byte gUnknown_203B278 -_0801F950: - ldr r0, [r2, 0x60] - adds r1, r2, 0 - adds r1, 0xC4 - str r1, [r0, 0x14] - adds r0, r2, 0 - adds r0, 0x48 - ldrh r0, [r0] - strb r0, [r1] - ldr r0, [r4] - adds r1, r0, 0 - adds r1, 0x46 - ldrh r1, [r1] - adds r0, 0xC5 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xC6 - movs r1, 0x10 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xC7 - strb r3, [r0] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x64 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - b _0801F99C -_0801F98C: - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x64 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C -_0801F99C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_801F930 - - thumb_func_start sub_801F9A4 -sub_801F9A4: - push {r4,r5,lr} - sub sp, 0x4 - ldr r5, _0801F9EC - ldr r0, [r5] - ldr r4, [r0] - cmp r4, 0x1 - beq _0801F9F0 - cmp r4, 0x1 - bgt _0801FA48 - cmp r4, 0 - bne _0801FA48 - ldr r0, [r0, 0x5C] - bl sub_8008C54 - ldr r3, [r5] - adds r2, r3, 0 - adds r2, 0x46 - movs r1, 0 - ldrsh r0, [r2, r1] - ldr r1, [r3, 0x4] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r3, 0x8] - movs r1, 0 - ldrsh r0, [r2, r1] - ldrh r1, [r3, 0x8] - ldr r2, [r3, 0x5C] - adds r3, 0x14 - bl unk_MoveIDPrintMoveDescription - ldr r1, [r5] - str r0, [r1, 0x10] - str r4, [r1, 0x24] - b _0801FA48 - .align 2, 0 -_0801F9EC: .4byte gUnknown_203B278 -_0801F9F0: - ldr r0, [r0, 0x5C] - bl sub_8008C54 - ldr r0, [r5] - ldr r0, [r0, 0x5C] - bl sub_80073B8 - ldr r0, [r5] - ldr r1, [r0, 0xC] - lsls r1, 2 - adds r0, 0x14 - adds r0, r1 - ldr r1, [r0] - ldr r0, _0801FA50 - ldr r1, [r1] - bl strcpy - ldr r2, _0801FA54 - ldr r0, [r5] - ldr r3, [r0, 0x5C] - movs r4, 0 - str r4, [sp] - movs r0, 0x10 - movs r1, 0 - bl xxx_format_and_draw - ldr r3, [r5] - ldr r1, [r3, 0xC] - lsls r1, 2 - adds r0, r3, 0 - adds r0, 0x14 - adds r0, r1 - ldr r0, [r0] - ldr r2, [r0, 0x4] - ldr r3, [r3, 0x5C] - str r4, [sp] - movs r0, 0x4 - movs r1, 0x10 - bl xxx_format_and_draw - ldr r0, [r5] - ldr r0, [r0, 0x5C] - bl sub_80073E0 -_0801FA48: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801FA50: .4byte gAvailablePokemonNames -_0801FA54: .4byte gUnknown_80DC310 - thumb_func_end sub_801F9A4 - - thumb_func_start sub_801FA58 -sub_801FA58: - push {r4,lr} - ldr r0, _0801FAA4 - ldr r2, [r0] - ldr r1, [r2, 0x10] - adds r4, r0, 0 - cmp r1, 0 - beq _0801FA7C - ldr r0, [r2, 0x24] - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0801FA74 - bl sub_8013F84 -_0801FA74: - ldr r1, [r4] - ldr r0, [r1, 0x24] - adds r0, 0x1 - str r0, [r1, 0x24] -_0801FA7C: - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0xC8 - ldr r1, [r1, 0x5C] - bl sub_8012A64 - cmp r0, 0x1 - beq _0801FAA8 - cmp r0, 0x2 - beq _0801FAC2 - ldr r0, [r4] - adds r0, 0x28 - bl sub_8013938 - lsls r0, 24 - cmp r0, 0 - beq _0801FACE - movs r0, 0 - b _0801FACA - .align 2, 0 -_0801FAA4: .4byte gUnknown_203B278 -_0801FAA8: - movs r0, 0 - bl PlayMenuSoundEffect - ldr r1, [r4] - ldr r0, [r1, 0x10] - cmp r0, 0 - beq _0801FABE - movs r0, 0 - str r0, [r1, 0xC] - movs r0, 0x1 - b _0801FACA -_0801FABE: - movs r0, 0x3 - b _0801FACA -_0801FAC2: - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 -_0801FACA: - bl sub_801F918 -_0801FACE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_801FA58 - - thumb_func_start sub_801FAD4 -sub_801FAD4: - push {r4,lr} - ldr r0, _0801FB14 - ldr r3, [r0] - ldr r1, [r3, 0x10] - subs r1, 0x1 - ldr r2, [r3, 0xC] - adds r4, r0, 0 - cmp r2, r1 - bge _0801FAFC - ldr r0, [r3, 0x24] - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0801FAF4 - bl sub_8013F84 -_0801FAF4: - ldr r1, [r4] - ldr r0, [r1, 0x24] - adds r0, 0x1 - str r0, [r1, 0x24] -_0801FAFC: - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0xC8 - ldr r1, [r1, 0x5C] - bl sub_8012A64 - cmp r0, 0x1 - beq _0801FB18 - cmp r0, 0x2 - beq _0801FB3C - b _0801FB48 - .align 2, 0 -_0801FB14: .4byte gUnknown_203B278 -_0801FB18: - movs r0, 0 - bl PlayMenuSoundEffect - ldr r0, [r4] - ldr r1, [r0, 0xC] - adds r1, 0x1 - str r1, [r0, 0xC] - ldr r0, [r0, 0x10] - cmp r1, r0 - bge _0801FB34 - movs r0, 0x1 - bl sub_801F918 - b _0801FB48 -_0801FB34: - movs r0, 0 - bl sub_801F918 - b _0801FB48 -_0801FB3C: - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - bl sub_801F918 -_0801FB48: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_801FAD4 - - thumb_func_start sub_801FB50 -sub_801FB50: - push {r4-r7,lr} - adds r4, r0, 0 - bl ResetUnusedInputStruct - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r6, _0801FBC0 - movs r0, 0xF0 - lsls r0, 1 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r6] - movs r7, 0 - str r7, [r0, 0x70] - str r7, [r0, 0x74] - str r7, [r0, 0x78] - str r4, [r0] - strb r7, [r0, 0x15] - ldr r0, _0801FBC4 - ldr r4, _0801FBC8 - adds r1, r4, 0 - bl CopyYellowMonsterNametoBuffer - ldr r5, _0801FBCC - adds r0, r5, 0 - adds r1, r4, 0 - bl CopyYellowMonsterNametoBuffer - adds r0, r4, 0 - bl GetMonSpecies - adds r1, r0, 0 - adds r0, r5, 0 - subs r0, 0x50 - bl strcpy - subs r5, 0xF0 - bl GetPlayerPokemonStruct - adds r1, r0, 0 - adds r0, r5, 0 - bl PrintPokeNameToBuffer - ldr r2, [r6] - ldr r0, [r2] - cmp r0, 0x1 - bne _0801FBD0 - movs r1, 0xBE - lsls r1, 1 - adds r0, r2, r1 - str r7, [r0] - b _0801FBDE - .align 2, 0 -_0801FBC0: .4byte gUnknown_203B27C -_0801FBC4: .4byte gUnknown_202E5D8 -_0801FBC8: .4byte 0x00000155 -_0801FBCC: .4byte gUnknown_202E1C8 -_0801FBD0: - movs r3, 0xBE - lsls r3, 1 - adds r1, r2, r3 - movs r4, 0xB6 - lsls r4, 1 - adds r0, r2, r4 - str r0, [r1] -_0801FBDE: - ldr r0, _0801FC34 - bl GetDialogueSpriteDataPtr - ldr r2, _0801FC38 - ldr r3, [r2] - movs r4, 0xB6 - lsls r4, 1 - adds r1, r3, r4 - str r0, [r1] - adds r4, 0x4 - adds r1, r3, r4 - ldr r0, [r0, 0x4] - str r0, [r1] - movs r1, 0xBC - lsls r1, 1 - adds r0, r3, r1 - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - ldr r3, _0801FC3C - adds r0, r3 - strb r1, [r0] - ldr r0, [r2] - adds r4, 0xA - adds r0, r4 - strb r1, [r0] - ldr r2, [r2] - movs r0, 0xBA - lsls r0, 1 - adds r1, r2, r0 - movs r0, 0x2 - strh r0, [r1] - subs r3, 0x3 - adds r1, r2, r3 - movs r0, 0x8 - strh r0, [r1] - movs r0, 0 - bl sub_801FDA8 - movs r0, 0x1 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0801FC34: .4byte 0x00000155 -_0801FC38: .4byte gUnknown_203B27C -_0801FC3C: .4byte 0x00000179 - thumb_func_end sub_801FB50 - thumb_func_start sub_801FC40 sub_801FC40: push {lr} diff --git a/asm/code_8098BDC.s b/asm/code_8098BDC.s index 62472cb23..d1a50d3b0 100644 --- a/asm/code_8098BDC.s +++ b/asm/code_8098BDC.s @@ -5573,7 +5573,7 @@ _0809BC26: lsrs r4, 31 bl sub_809B294 adds r0, r4, 0 - bl DisplayKangaskhanDialogueSprite + bl CreateKangaskhanStorage lsls r0, 24 cmp r0, 0 beq _0809BC5C diff --git a/ld_script.txt b/ld_script.txt index a7bec9a4b..6ae54de5e 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -112,6 +112,7 @@ SECTIONS { src/code_801EE10.o(.text); asm/code_801EE10.o(.text); src/code_801EE10_mid.o(.text); + src/gulpin_shop_1.o(.text); asm/code_801EE10_mid.o(.text); src/code_8021774.o(.text); src/wigglytuff_shop.o(.text); diff --git a/src/code_801EE10_mid.c b/src/code_801EE10_mid.c index 5b5bf6c9c..7e5c5f435 100644 --- a/src/code_801EE10_mid.c +++ b/src/code_801EE10_mid.c @@ -7,6 +7,7 @@ #include "moves.h" #include "code_801EE10.h" #include "menu_input.h" +#include "subStruct_203B240.h" extern struct unkStruct_203B270 *gUnknown_203B270; @@ -23,9 +24,33 @@ struct unkStruct_203B274 u8 unk3E4[4]; }; extern struct unkStruct_203B274 *gUnknown_203B274; + +struct unkStruct_203B278 +{ + s32 state; + u16 *moveIDs; + u16 unk8; + u16 fillA; + s32 unkC; + s32 unk10; + struct subStruct_203B240 *unk14[4]; + u32 unk24; + struct MenuInputStruct unk28; + u32 unk5C; + struct UnkTextStruct2 *unk60; + struct UnkTextStruct2 unk64[4]; + u8 unkC4[4]; + struct MenuInputStructSub unkC8; +}; + +extern struct unkStruct_203B278 *gUnknown_203B278; + extern struct UnkTextStruct2 gUnknown_80DC2C4; extern struct UnkTextStruct2 gUnknown_80DC2AC; +extern struct UnkTextStruct2 gUnknown_80DC2F8; +extern u8 gAvailablePokemonNames[]; +extern u8 gUnknown_80DC310[]; extern u8 gUnknown_80DC2DC[]; extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); @@ -37,6 +62,18 @@ extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern s32 sub_8013800(struct MenuInputStruct*, s32); +extern void ResetSprites(u32); +extern void sub_80140B4(struct UnkTextStruct2 *); +extern void sub_801F918(s32); +extern void sub_801FA58(void); +extern void sub_801FAD4(void); +extern void sub_801F930(void); +extern void sub_801F9A4(void); +int unk_MoveIDPrintMoveDescription(int a1, u16 moveID, int a3, struct subStruct_203B240** a4); +extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); +extern bool8 sub_8013938(struct MenuInputStruct *); +void sub_8013F84(void); + u32 sub_801F7E4(void); void sub_801F690(void); @@ -223,3 +260,178 @@ u32 sub_801F7E4(void) sub_808E218(gUnknown_203B274->unk4, gUnknown_203B274->pokeStruct); return gUnknown_203B274->unk4->count; } + +bool8 sub_801F808(u16 *moveIDs) +{ + s32 index; + + ResetSprites(1); + gUnknown_203B278 = MemoryAlloc(sizeof(struct unkStruct_203B278), 8); + gUnknown_203B278->unk5C = 0; + gUnknown_203B278->unk60 = gUnknown_203B278->unk64; + sub_80140B4(gUnknown_203B278->unk64); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B278->unk64,1,1); + gUnknown_203B278->moveIDs = moveIDs; + + for(index = 4; index > 1; index--) + { + if(gUnknown_203B278->moveIDs[index - 1] != 0) break; + } + sub_8013818(&gUnknown_203B278->unk28,index,1,gUnknown_203B278->unk5C); + sub_801317C(&gUnknown_203B278->unkC8); + sub_801F918(0); + return 1; +} + +s32 sub_801F890(void) +{ + switch(gUnknown_203B278->state) + { + case 0: + sub_801FA58(); + break; + case 1: + sub_801FAD4(); + break; + case 3: + return 3; + default: + case 2: + return 2; + } + return 0; +} + +void sub_801F8D0(void) +{ + if(gUnknown_203B278) + { + gUnknown_203B278->unk64[gUnknown_203B278->unk5C] = gUnknown_80DC2F8; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B278->unk64, 1, 1); + MemoryFree(gUnknown_203B278); + gUnknown_203B278 = NULL; + } +} + +void sub_801F918(s32 newState) +{ + gUnknown_203B278->state = newState; + sub_801F930(); + sub_801F9A4(); +} + +void sub_801F930(void) +{ + sub_80140B4(gUnknown_203B278->unk64); + switch(gUnknown_203B278->state) + { + case 0: + gUnknown_203B278->unk60->unk14 = gUnknown_203B278->unkC4; + gUnknown_203B278->unkC4[0] = gUnknown_203B278->unk28.unk20; + gUnknown_203B278->unkC4[1] = gUnknown_203B278->unk28.unk1E; + gUnknown_203B278->unkC4[2] = 0x10; + gUnknown_203B278->unkC4[3] = 0; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B278->unk64, 1, 1); + break; + case 1: + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B278->unk64, 1, 1); + break; + default: + break; + } +} + +void sub_801F9A4(void) +{ + char **name; + switch(gUnknown_203B278->state) + { + case 0: + sub_8008C54(gUnknown_203B278->unk5C); + gUnknown_203B278->unk8 = gUnknown_203B278->moveIDs[gUnknown_203B278->unk28.unk1E]; + gUnknown_203B278->unk10 = unk_MoveIDPrintMoveDescription(gUnknown_203B278->unk28.unk1E,gUnknown_203B278->unk8,gUnknown_203B278->unk5C,gUnknown_203B278->unk14); + gUnknown_203B278->unk24 = 0; + break; + case 1: + sub_8008C54(gUnknown_203B278->unk5C); + sub_80073B8(gUnknown_203B278->unk5C); + name = &(gUnknown_203B278->unk14[gUnknown_203B278->unkC]->pokeName); + strcpy(gAvailablePokemonNames, *name); + xxx_format_and_draw(0x10,0,gUnknown_80DC310,gUnknown_203B278->unk5C,0); // $m0 + xxx_format_and_draw(4,0x10,gUnknown_203B278->unk14[gUnknown_203B278->unkC]->unk4,gUnknown_203B278->unk5C,0); + sub_80073E0(gUnknown_203B278->unk5C); + break; + case 2: + break; + } +} + +void sub_801FA58(void) +{ + if(gUnknown_203B278->unk10 != 0) + { + if(gUnknown_203B278->unk24 & 8) + { + sub_8013F84(); + } + gUnknown_203B278->unk24++; + } + switch(sub_8012A64(&gUnknown_203B278->unkC8, gUnknown_203B278->unk5C)) + { + case 1: + PlayMenuSoundEffect(0); + if(gUnknown_203B278->unk10 != 0) + { + gUnknown_203B278->unkC = 0; + sub_801F918(1); + } + else + { + sub_801F918(3); + } + break; + case 2: + PlayMenuSoundEffect(1); + sub_801F918(2); + break; + default: + if(sub_8013938(&gUnknown_203B278->unk28)) + { + sub_801F918(0); + } + } +} + +void sub_801FAD4(void) +{ + if(gUnknown_203B278->unkC < gUnknown_203B278->unk10 - 1) + { + if(gUnknown_203B278->unk24 & 8) + { + sub_8013F84(); + } + gUnknown_203B278->unk24++; + } + switch(sub_8012A64(&gUnknown_203B278->unkC8, gUnknown_203B278->unk5C)) + { + case 1: + PlayMenuSoundEffect(0); + gUnknown_203B278->unkC++; + if(gUnknown_203B278->unkC < gUnknown_203B278->unk10) + { + sub_801F918(1); + } + else { + sub_801F918(0); + } + break; + case 2: + PlayMenuSoundEffect(1); + sub_801F918(2); + break; + } +} diff --git a/src/gulpin_shop_1.c b/src/gulpin_shop_1.c new file mode 100644 index 000000000..a626004c8 --- /dev/null +++ b/src/gulpin_shop_1.c @@ -0,0 +1,90 @@ +#include "global.h" +#include "memory.h" +#include "menu.h" +#include "pokemon.h" +#include "file_system.h" +#include "input.h" +#include "text.h" + +extern u8 gUnknown_202E5D8[]; +extern u8 gUnknown_202E1C8[]; + +// size: 0x1E0 +struct unkStruct_203B27C +{ + bool32 isAsleep; + s32 state; + u32 unk8; + s16 unkC; + struct PokemonStruct *unk10; + u8 unk14; + u8 unk15; + u8 unk16; + u8 unk17; + u32 unk18; + u16 unk1C; + u16 unk1E; + u16 unk20; + u8 fill22[0x64 - 0x22]; + u16 unk64[4]; + u32 unk6C; + u32 unk70; + u32 unk74; + u32 unk78; + struct MenuItem unk7C[8]; + u16 unkBC[8]; + struct MenuStruct unkCC; + u8 fill11C[0x16C - 0x11C]; + struct OpenedFile *unk16C; + u8 *unk170; + u16 unk174; + u16 unk176; + u8 unk178; + u8 unk179; + u8 unk17A; + struct OpenedFile **unk17C; + struct UnkTextStruct2 unk180[4]; +}; + +extern struct unkStruct_203B27C *gUnknown_203B27C; +void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); +extern struct PokemonStruct *GetPlayerPokemonStruct(void); +extern void sub_801FDA8(s32); + +bool8 sub_801FB50(bool32 isAsleep) +{ + char *name; + struct OpenedFile *faceFile; + + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + gUnknown_203B27C = MemoryAlloc(0x1E0, 0x8); + gUnknown_203B27C->unk70 = 0; + gUnknown_203B27C->unk74 = 0; + gUnknown_203B27C->unk78 = 0; + gUnknown_203B27C->isAsleep = isAsleep; + gUnknown_203B27C->unk15 = 0; + CopyYellowMonsterNametoBuffer(gUnknown_202E5D8,MONSTER_GULPIN); + CopyYellowMonsterNametoBuffer(gUnknown_202E1C8,MONSTER_GULPIN); + name = GetMonSpecies(MONSTER_GULPIN); + strcpy(gUnknown_202E1C8 - 0x50, name); + PrintPokeNameToBuffer(gUnknown_202E1C8 - 0xF0, GetPlayerPokemonStruct()); + if (gUnknown_203B27C->isAsleep == 1) { + gUnknown_203B27C->unk17C = 0x0; + } + else { + gUnknown_203B27C->unk17C = &gUnknown_203B27C->unk16C; + } + faceFile = GetDialogueSpriteDataPtr(MONSTER_GULPIN); + gUnknown_203B27C->unk16C = faceFile; + gUnknown_203B27C->unk170 = faceFile->data; + gUnknown_203B27C->unk178 = '\0'; + gUnknown_203B27C->unk179 = '\0'; + gUnknown_203B27C->unk17A = '\0'; + gUnknown_203B27C->unk174 = 2; + gUnknown_203B27C->unk176 = 8; + sub_801FDA8(0); + return TRUE; +} + + diff --git a/src/kangaskhan_storage.c b/src/kangaskhan_storage.c index 9de8c1a75..dbed54a80 100644 --- a/src/kangaskhan_storage.c +++ b/src/kangaskhan_storage.c @@ -125,7 +125,7 @@ extern void sub_801B3C0(struct Item *); extern u8 sub_801CF14(u32); -u32 DisplayKangaskhanDialogueSprite(bool32 isAsleep) +u32 CreateKangaskhanStorage(bool32 isAsleep) { char *monName; struct OpenedFile * faceFile; @@ -268,49 +268,49 @@ void sub_8016FF8(void) { switch(gUnknown_203B208->currState) { - case 0: + case KANGASKHAN_STORAGE_INIT: sub_80175FC(); gUnknown_203B208->unkE4 = 1; sub_8014248(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][0],0,gUnknown_203B208->menuAction1,gUnknown_203B208->unk24, gUnknown_203B208->unk4C,4,0,gUnknown_203B208->unkE8,0xc); break; - case 1: + case KANGASKHAN_STORAGE_MAIN_MENU: sub_80175FC(); gUnknown_203B208->unkE4 = 0; sub_8014248(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][1],0,gUnknown_203B208->menuAction1,gUnknown_203B208->unk24, gUnknown_203B208->unk4C,4,0,gUnknown_203B208->unkE8,0xc); break; case 2: - gUnknown_203B208->fallbackState = 1; + gUnknown_203B208->fallbackState = KANGASKHAN_STORAGE_MAIN_MENU; gUnknown_203B208->unkE4 = 0; sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][19],0,gUnknown_203B208->unkE8,0x10d); break; case 3: - gUnknown_203B208->fallbackState = 4; + gUnknown_203B208->fallbackState = KANGASKHAN_STORAGE_EXIT; gUnknown_203B208->unkE4 = 1; sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][2],0,gUnknown_203B208->unkE8,0x30d); break; - case 5: - gUnknown_203B208->fallbackState = 1; + case KANGASKHAN_STORAGE_NO_INV_ITEMS: + gUnknown_203B208->fallbackState = KANGASKHAN_STORAGE_MAIN_MENU; gUnknown_203B208->unkE4 = 0; sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][13],0,gUnknown_203B208->unkE8,0x10d); break; - case 6: - gUnknown_203B208->fallbackState = 1; + case KANGASKHAN_STORAGE_TOO_MANY_ITEMS: + gUnknown_203B208->fallbackState = KANGASKHAN_STORAGE_MAIN_MENU; gUnknown_203B208->unkE4 = 0; sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][14],0,gUnknown_203B208->unkE8,0x10d); break; case 7: - gUnknown_203B208->fallbackState = 1; + gUnknown_203B208->fallbackState = KANGASKHAN_STORAGE_MAIN_MENU; gUnknown_203B208->unkE4 = 0; sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][15],0,gUnknown_203B208->unkE8,0x10d); break; case 8: - gUnknown_203B208->fallbackState = 1; + gUnknown_203B208->fallbackState = KANGASKHAN_STORAGE_MAIN_MENU; gUnknown_203B208->unkE4 = 0; sub_80141B4(gKangaskhanStorageDialogue[gUnknown_203B208->isAsleep][18],0,gUnknown_203B208->unkE8,0x10d); break; - case 9: + case KANGASKHAN_STORAGE_IS_MONEY_USED_TM: sub_8090E14(gUnknown_202DE58,&gUnknown_203B208->storedItem,0); gUnknown_203B208->fallbackState = 0xe; gUnknown_203B208->unkE4 = 0; @@ -360,7 +360,7 @@ void sub_8016FF8(void) case 0x13: if (GetNumberOfFilledInventorySlots() == 0) { sub_801A928(); - gUnknown_203B208->fallbackState = 1; + gUnknown_203B208->fallbackState = KANGASKHAN_STORAGE_MAIN_MENU; } else { gUnknown_203B208->fallbackState = 0xc; @@ -432,7 +432,7 @@ void sub_8016FF8(void) case 0x1d: if ((sub_801CF14(1)) || (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE)) { sub_801CBB8(); - gUnknown_203B208->fallbackState = 1; + gUnknown_203B208->fallbackState = KANGASKHAN_STORAGE_MAIN_MENU; } else { gUnknown_203B208->fallbackState = 0x15; From 71b9bb743702559f53936744f0089b5ddac272b9 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 29 Jul 2023 16:46:19 -0700 Subject: [PATCH 18/26] decompile more funcs in gulpin_1 --- asm/code_801EE10_mid.s | 169 ----------------------------------------- src/gulpin_shop_1.c | 113 +++++++++++++++++++++++++-- 2 files changed, 108 insertions(+), 174 deletions(-) diff --git a/asm/code_801EE10_mid.s b/asm/code_801EE10_mid.s index ce5fbf08b..8f6ce63a4 100644 --- a/asm/code_801EE10_mid.s +++ b/asm/code_801EE10_mid.s @@ -5,175 +5,6 @@ .text - thumb_func_start sub_801FC40 -sub_801FC40: - push {lr} - ldr r1, _0801FC5C - ldr r0, [r1] - ldr r0, [r0, 0x4] - adds r2, r1, 0 - cmp r0, 0x22 - bls _0801FC50 - b _0801FD70 -_0801FC50: - lsls r0, 2 - ldr r1, _0801FC60 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801FC5C: .4byte gUnknown_203B27C -_0801FC60: .4byte _0801FC64 - .align 2, 0 -_0801FC64: - .4byte _0801FCF0 - .4byte _0801FCF0 - .4byte _0801FCF6 - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FCFC - .4byte _0801FD02 - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FD50 - .4byte _0801FD70 - .4byte _0801FD08 - .4byte _0801FD08 - .4byte _0801FD0E - .4byte _0801FD14 - .4byte _0801FD1A - .4byte _0801FD70 - .4byte _0801FD20 - .4byte _0801FD20 - .4byte _0801FD26 - .4byte _0801FD2C - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FD70 - .4byte _0801FD32 - .4byte _0801FD38 - .4byte _0801FD38 - .4byte _0801FD3E - .4byte _0801FD44 - .4byte _0801FD4A -_0801FCF0: - bl sub_8021154 - b _0801FD74 -_0801FCF6: - bl sub_80209AC - b _0801FD74 -_0801FCFC: - bl sub_80209FC - b _0801FD74 -_0801FD02: - bl sub_8020A34 - b _0801FD74 -_0801FD08: - bl sub_8020A80 - b _0801FD74 -_0801FD0E: - bl sub_8020B38 - b _0801FD74 -_0801FD14: - bl sub_8020C2C - b _0801FD74 -_0801FD1A: - bl sub_8020C48 - b _0801FD74 -_0801FD20: - bl sub_8020C64 - b _0801FD74 -_0801FD26: - bl sub_8020CC0 - b _0801FD74 -_0801FD2C: - bl sub_8020D74 - b _0801FD74 -_0801FD32: - bl sub_8020D90 - b _0801FD74 -_0801FD38: - bl sub_8020DCC - b _0801FD74 -_0801FD3E: - bl sub_8020EB4 - b _0801FD74 -_0801FD44: - bl sub_80210C8 - b _0801FD74 -_0801FD4A: - bl sub_80210E4 - b _0801FD74 -_0801FD50: - ldr r0, [r2] - ldrb r0, [r0, 0x15] - cmp r0, 0x1 - bne _0801FD68 - ldr r0, _0801FD6C - ldr r1, [r0] - movs r0, 0x98 - lsls r0, 2 - adds r1, r0 - ldr r0, [r1] - subs r0, 0x96 - str r0, [r1] -_0801FD68: - movs r0, 0x3 - b _0801FD76 - .align 2, 0 -_0801FD6C: .4byte gTeamInventory_203B460 -_0801FD70: - bl sub_8021130 -_0801FD74: - movs r0, 0 -_0801FD76: - pop {r1} - bx r1 - thumb_func_end sub_801FC40 - - thumb_func_start sub_801FD7C -sub_801FD7C: - push {r4,lr} - ldr r4, _0801FDA4 - ldr r0, [r4] - cmp r0, 0 - beq _0801FD9C - movs r1, 0xB6 - lsls r1, 1 - adds r0, r1 - ldr r0, [r0] - bl CloseFile - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0801FD9C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801FDA4: .4byte gUnknown_203B27C - thumb_func_end sub_801FD7C - - thumb_func_start sub_801FDA8 -sub_801FDA8: - push {lr} - ldr r1, _0801FDBC - ldr r1, [r1] - str r0, [r1, 0x4] - bl sub_801FDC0 - bl sub_801FF28 - pop {r0} - bx r0 - .align 2, 0 -_0801FDBC: .4byte gUnknown_203B27C - thumb_func_end sub_801FDA8 - thumb_func_start sub_801FDC0 sub_801FDC0: push {r4-r7,lr} diff --git a/src/gulpin_shop_1.c b/src/gulpin_shop_1.c index a626004c8..ac068fd28 100644 --- a/src/gulpin_shop_1.c +++ b/src/gulpin_shop_1.c @@ -5,6 +5,7 @@ #include "file_system.h" #include "input.h" #include "text.h" +#include "team_inventory.h" extern u8 gUnknown_202E5D8[]; extern u8 gUnknown_202E1C8[]; @@ -47,9 +48,29 @@ struct unkStruct_203B27C }; extern struct unkStruct_203B27C *gUnknown_203B27C; + void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern void sub_801FDA8(s32); +extern void sub_8020A80(void); +extern void sub_8020B38(void); +extern void sub_8020C2C(void); +extern void sub_8020C48(void); +extern void sub_8020C64(void); +extern void sub_8020CC0(void); +extern void sub_8020D74(void); +extern void sub_8020D90(void); +extern void sub_8020DCC(void); +extern void sub_8020EB4(void); +extern void sub_80210C8(void); +extern void sub_80210E4(void); +extern void sub_8021154(void); +extern void sub_80209AC(void); +extern void sub_8021130(void); +extern void sub_80209FC(void); +extern void sub_8020A34(void); +extern void sub_801FDC0(void); +extern void sub_801FF28(void); bool8 sub_801FB50(bool32 isAsleep) { @@ -58,7 +79,7 @@ bool8 sub_801FB50(bool32 isAsleep) ResetUnusedInputStruct(); sub_800641C(0,1,1); - gUnknown_203B27C = MemoryAlloc(0x1E0, 0x8); + gUnknown_203B27C = MemoryAlloc(sizeof(struct unkStruct_203B27C), 0x8); gUnknown_203B27C->unk70 = 0; gUnknown_203B27C->unk74 = 0; gUnknown_203B27C->unk78 = 0; @@ -70,7 +91,7 @@ bool8 sub_801FB50(bool32 isAsleep) strcpy(gUnknown_202E1C8 - 0x50, name); PrintPokeNameToBuffer(gUnknown_202E1C8 - 0xF0, GetPlayerPokemonStruct()); if (gUnknown_203B27C->isAsleep == 1) { - gUnknown_203B27C->unk17C = 0x0; + gUnknown_203B27C->unk17C = NULL; } else { gUnknown_203B27C->unk17C = &gUnknown_203B27C->unk16C; @@ -78,13 +99,95 @@ bool8 sub_801FB50(bool32 isAsleep) faceFile = GetDialogueSpriteDataPtr(MONSTER_GULPIN); gUnknown_203B27C->unk16C = faceFile; gUnknown_203B27C->unk170 = faceFile->data; - gUnknown_203B27C->unk178 = '\0'; - gUnknown_203B27C->unk179 = '\0'; - gUnknown_203B27C->unk17A = '\0'; + gUnknown_203B27C->unk178 = 0; + gUnknown_203B27C->unk179 = 0; + gUnknown_203B27C->unk17A = 0; gUnknown_203B27C->unk174 = 2; gUnknown_203B27C->unk176 = 8; sub_801FDA8(0); return TRUE; } +u32 sub_801FC40(void) +{ + switch(gUnknown_203B27C->state) { + case 0: + case 1: + sub_8021154(); + break; + case 2: + sub_80209AC(); + break; + case 7: + sub_80209FC(); + break; + case 8: + sub_8020A34(); + break; + case 0xf: + case 0x10: + sub_8020A80(); + break; + case 0x11: + sub_8020B38(); + break; + case 0x12: + sub_8020C2C(); + break; + case 0x13: + sub_8020C48(); + break; + case 0x15: + case 0x16: + sub_8020C64(); + break; + case 0x17: + sub_8020CC0(); + break; + case 0x18: + sub_8020D74(); + break; + case 0x1d: + sub_8020D90(); + break; + case 0x1e: + case 0x1f: + sub_8020DCC(); + break; + case 0x20: + sub_8020EB4(); + break; + case 0x21: + sub_80210C8(); + break; + case 0x22: + sub_80210E4(); + break; + case 0xd: + if (gUnknown_203B27C->unk15 == 1) { + gTeamInventory_203B460->teamMoney -= 0x96; + } + return 3; + default: + sub_8021130(); + break; + } + return 0; +} +void sub_801FD7C(void) +{ + if(gUnknown_203B27C) + { + CloseFile(gUnknown_203B27C->unk16C); + MemoryFree(gUnknown_203B27C); + gUnknown_203B27C = NULL; + } +} + +void sub_801FDA8(s32 newState) +{ + gUnknown_203B27C->state = newState; + sub_801FDC0(); + sub_801FF28(); +} From 0db89b429a48b39167164333ae12f69cd9dafca8 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 30 Jul 2023 11:11:57 -0700 Subject: [PATCH 19/26] more gulpin work --- asm/code_801EE10_mid.s | 1485 ---------------------------------------- include/code_801EE10.h | 2 +- include/moves.h | 2 + src/code_801EE10.c | 8 +- src/gulpin_shop.c | 4 +- src/gulpin_shop_1.c | 514 +++++++++++++- 6 files changed, 510 insertions(+), 1505 deletions(-) diff --git a/asm/code_801EE10_mid.s b/asm/code_801EE10_mid.s index 8f6ce63a4..92c23009d 100644 --- a/asm/code_801EE10_mid.s +++ b/asm/code_801EE10_mid.s @@ -5,1491 +5,6 @@ .text - thumb_func_start sub_801FDC0 -sub_801FDC0: - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r4, _0801FDE8 - ldr r0, [r4] - movs r5, 0xC0 - lsls r5, 1 - adds r0, r5 - bl sub_8006518 - ldr r0, [r4] - ldr r1, [r0, 0x4] - cmp r1, 0x11 - beq _0801FE38 - cmp r1, 0x11 - bgt _0801FDEC - cmp r1, 0x2 - beq _0801FDF6 - b _0801FED4 - .align 2, 0 -_0801FDE8: .4byte gUnknown_203B27C -_0801FDEC: - cmp r1, 0x17 - beq _0801FE6C - cmp r1, 0x20 - beq _0801FE88 - b _0801FED4 -_0801FDF6: - adds r0, r5 - movs r1, 0x80 - strb r1, [r0] - ldr r0, [r4] - movs r2, 0xCC - lsls r2, 1 - adds r0, r2 - strb r1, [r0] - ldr r0, [r4] - movs r3, 0xD8 - lsls r3, 1 - adds r0, r3 - strb r1, [r0] - ldr r1, [r4] - movs r6, 0xE4 - lsls r6, 1 - adds r1, r6 - ldr r0, _0801FE34 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r6,r7} - stm r1!, {r2,r6,r7} - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, r5 - movs r1, 0x1 - movs r2, 0 - bl sub_800641C - b _0801FF14 - .align 2, 0 -_0801FE34: .4byte gUnknown_80DC37C -_0801FE38: - bl sub_80205D0 - ldr r2, [r4] - movs r0, 0xD8 - lsls r0, 1 - adds r2, r0 - ldr r1, _0801FE68 - ldm r1!, {r3,r5,r6} - stm r2!, {r3,r5,r6} - ldm r1!, {r3,r5,r7} - stm r2!, {r3,r5,r7} - ldr r1, [r4] - adds r0, r1, r0 - adds r1, 0x7C - bl sub_8012CAC - bl ResetUnusedInputStruct - ldr r0, [r4] - movs r6, 0xC0 - lsls r6, 1 - adds r0, r6 - b _0801FEC2 - .align 2, 0 -_0801FE68: .4byte gUnknown_80DC334 -_0801FE6C: - bl sub_802069C - ldr r2, [r4] - movs r0, 0xD8 - lsls r0, 1 - adds r2, r0 - ldr r1, _0801FE84 - ldm r1!, {r3,r6,r7} - stm r2!, {r3,r6,r7} - ldm r1!, {r3,r6,r7} - stm r2!, {r3,r6,r7} - b _0801FEB0 - .align 2, 0 -_0801FE84: .4byte gUnknown_80DC334 -_0801FE88: - bl CreateGulpinLinkMenu - ldr r1, [r4] - movs r7, 0xCC - lsls r7, 1 - adds r1, r7 - ldr r0, _0801FECC - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldr r2, [r4] - movs r0, 0xD8 - lsls r0, 1 - adds r2, r0 - ldr r1, _0801FED0 - ldm r1!, {r3,r6,r7} - stm r2!, {r3,r6,r7} - ldm r1!, {r3,r6,r7} - stm r2!, {r3,r6,r7} -_0801FEB0: - ldr r1, [r4] - adds r0, r1, r0 - adds r1, 0x7C - bl sub_8012CAC - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, r5 -_0801FEC2: - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - b _0801FF14 - .align 2, 0 -_0801FECC: .4byte gUnknown_80DC31C -_0801FED0: .4byte gUnknown_80DC34C -_0801FED4: - ldr r5, _0801FF20 - mov r12, r5 - movs r6, 0xC0 - lsls r6, 1 - mov r8, r6 - ldr r4, _0801FF24 - movs r3, 0 - movs r2, 0x3 -_0801FEE4: - mov r7, r12 - ldr r1, [r7] - adds r1, r3 - add r1, r8 - adds r0, r4, 0 - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - adds r3, 0x18 - subs r2, 0x1 - cmp r2, 0 - bge _0801FEE4 - bl ResetUnusedInputStruct - ldr r0, _0801FF20 - ldr r0, [r0] - movs r1, 0xC0 - lsls r1, 1 - adds r0, r1 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C -_0801FF14: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801FF20: .4byte gUnknown_203B27C -_0801FF24: .4byte gUnknown_80DC31C - thumb_func_end sub_801FDC0 - - thumb_func_start sub_801FF28 -sub_801FF28: - push {r4,r5,lr} - sub sp, 0x14 - ldr r1, _0801FF44 - ldr r0, [r1] - ldr r0, [r0, 0x4] - adds r5, r1, 0 - cmp r0, 0x23 - bls _0801FF3A - b _08020562 -_0801FF3A: - lsls r0, 2 - ldr r1, _0801FF48 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801FF44: .4byte gUnknown_203B27C -_0801FF48: .4byte _0801FF4C - .align 2, 0 -_0801FF4C: - .4byte _0801FFDC - .4byte _08020018 - .4byte _08020064 - .4byte _0802006C - .4byte _08020090 - .4byte _080200B4 - .4byte _080200D8 - .4byte _080200FC - .4byte _08020144 - .4byte _0802018C - .4byte _080201B0 - .4byte _080201D4 - .4byte _080201F8 - .4byte _08020562 - .4byte _0802021C - .4byte _08020240 - .4byte _0802024E - .4byte _08020256 - .4byte _08020274 - .4byte _08020282 - .4byte _0802028E - .4byte _080202B0 - .4byte _080202BE - .4byte _080202C6 - .4byte _080202E4 - .4byte _08020304 - .4byte _08020344 - .4byte _080203B0 - .4byte _080203D4 - .4byte _0802038C - .4byte _080203F8 - .4byte _08020428 - .4byte _08020434 - .4byte _08020460 - .4byte _08020478 - .4byte _08020500 -_0801FFDC: - ldr r0, [r5] - movs r4, 0x2 - str r4, [r0, 0x6C] - bl CreateGulpinShopMenu - ldr r5, [r5] - str r4, [r5, 0x8] - ldr r2, _08020014 - ldr r1, [r5] - movs r0, 0x64 - muls r0, r1 - adds r0, r2 - ldr r0, [r0] - ldr r2, [r5, 0x6C] - adds r3, r5, 0 - adds r3, 0x7C - adds r1, r5, 0 - adds r1, 0xBC - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r4, 0xBE - lsls r4, 1 - adds r1, r5, r4 - b _0802004C - .align 2, 0 -_08020014: .4byte gGulpinDialogue -_08020018: - bl CreateGulpinShopMenu - ldr r0, _0802005C - ldr r4, [r0] - movs r0, 0x2 - str r0, [r4, 0x8] - ldr r1, _08020060 - ldr r2, [r4] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x4 - adds r0, r1 - ldr r0, [r0] - ldr r2, [r4, 0x6C] - adds r3, r4, 0 - adds r3, 0x7C - adds r1, r4, 0 - adds r1, 0xBC - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r5, 0xBE - lsls r5, 1 - adds r1, r4, r5 -_0802004C: - ldr r1, [r1] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - bl sub_8014248 - b _08020562 - .align 2, 0 -_0802005C: .4byte gUnknown_203B27C -_08020060: .4byte gGulpinDialogue -_08020064: - movs r0, 0x3 - bl DrawTeamMoneyBox - b _08020562 -_0802006C: - ldr r2, [r5] - movs r0, 0x1F - str r0, [r2, 0x8] - ldr r1, _0802008C - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x8 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xBE - lsls r1, 1 - adds r2, r1 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_0802008C: .4byte gGulpinDialogue -_08020090: - ldr r2, [r5] - movs r0, 0x1F - str r0, [r2, 0x8] - ldr r1, _080200B0 - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0xC - adds r0, r1 - ldr r0, [r0] - movs r4, 0xBE - lsls r4, 1 - adds r2, r4 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080200B0: .4byte gGulpinDialogue -_080200B4: - ldr r2, [r5] - movs r0, 0x1F - str r0, [r2, 0x8] - ldr r1, _080200D4 - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x10 - adds r0, r1 - ldr r0, [r0] - movs r5, 0xBE - lsls r5, 1 - adds r2, r5 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080200D4: .4byte gGulpinDialogue -_080200D8: - ldr r2, [r5] - movs r0, 0x1F - str r0, [r2, 0x8] - ldr r1, _080200F8 - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x14 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xBE - lsls r1, 1 - adds r2, r1 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080200F8: .4byte gGulpinDialogue -_080200FC: - bl sub_8020900 - ldr r1, _0802013C - ldr r0, _08020140 - ldr r4, [r0] - ldr r2, [r4] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x18 - adds r0, r1 - ldr r0, [r0] - adds r3, r4, 0 - adds r3, 0x7C - adds r1, r4, 0 - adds r1, 0xBC - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r2, 0xBE - lsls r2, 1 - adds r1, r4, r2 - ldr r1, [r1] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - movs r2, 0x10 - bl sub_8014248 - b _08020562 - .align 2, 0 -_0802013C: .4byte gGulpinDialogue -_08020140: .4byte gUnknown_203B27C -_08020144: - bl sub_8020950 - ldr r1, _08020184 - ldr r0, _08020188 - ldr r4, [r0] - ldr r2, [r4] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x54 - adds r0, r1 - ldr r0, [r0] - adds r3, r4, 0 - adds r3, 0x7C - adds r1, r4, 0 - adds r1, 0xBC - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r5, 0xBE - lsls r5, 1 - adds r1, r4, r5 - ldr r1, [r1] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - movs r2, 0xD - bl sub_8014248 - b _08020562 - .align 2, 0 -_08020184: .4byte gGulpinDialogue -_08020188: .4byte gUnknown_203B27C -_0802018C: - ldr r2, [r5] - movs r0, 0x1 - str r0, [r2, 0x8] - ldr r1, _080201AC - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x58 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xBE - lsls r1, 1 - adds r2, r1 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080201AC: .4byte gGulpinDialogue -_080201B0: - ldr r2, [r5] - movs r0, 0x1 - str r0, [r2, 0x8] - ldr r1, _080201D0 - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x5C - adds r0, r1 - ldr r0, [r0] - movs r4, 0xBE - lsls r4, 1 - adds r2, r4 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080201D0: .4byte gGulpinDialogue -_080201D4: - ldr r2, [r5] - movs r0, 0x1 - str r0, [r2, 0x8] - ldr r1, _080201F4 - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x60 - adds r0, r1 - ldr r0, [r0] - movs r5, 0xBE - lsls r5, 1 - adds r2, r5 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080201F4: .4byte gGulpinDialogue -_080201F8: - ldr r2, [r5] - movs r0, 0xD - str r0, [r2, 0x8] - ldr r1, _08020218 - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x1C - adds r0, r1 - ldr r0, [r0] - movs r1, 0xBE - lsls r1, 1 - adds r2, r1 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_08020218: .4byte gGulpinDialogue -_0802021C: - ldr r2, [r5] - movs r0, 0xF - str r0, [r2, 0x8] - ldr r1, _0802023C - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x20 - adds r0, r1 - ldr r0, [r0] - movs r4, 0xBE - lsls r4, 1 - adds r2, r4 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_0802023C: .4byte gGulpinDialogue -_08020240: - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - movs r3, 0xA - bl sub_8023868 - b _08020562 -_0802024E: - movs r0, 0x1 - bl sub_8023B7C - b _08020562 -_08020256: - bl sub_8023DA4 - ldr r0, _08020270 - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0xCC - adds r1, r2, 0 - adds r1, 0x7C - adds r3, r2, 0 - adds r3, 0xBC - ldr r2, [r2, 0x70] - b _0802044C - .align 2, 0 -_08020270: .4byte gUnknown_203B27C -_08020274: - ldr r0, [r5] - movs r5, 0xC - ldrsh r0, [r0, r5] - movs r1, 0x2 - bl sub_8024458 - b _08020562 -_08020282: - ldr r0, [r5] - movs r1, 0xC - ldrsh r0, [r0, r1] - bl sub_801BEEC - b _08020562 -_0802028E: - ldr r2, [r5] - movs r0, 0x15 - str r0, [r2, 0x8] - ldr r1, _080202AC - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x24 - adds r0, r1 - ldr r0, [r0] - movs r4, 0xBE - lsls r4, 1 - adds r2, r4 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080202AC: .4byte gGulpinDialogue -_080202B0: - ldr r0, [r5] - movs r5, 0xC - ldrsh r0, [r0, r5] - movs r1, 0 - bl sub_801F428 - b _08020562 -_080202BE: - movs r0, 0x1 - bl sub_801F5F0 - b _08020562 -_080202C6: - bl sub_801F700 - ldr r0, _080202E0 - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0xCC - adds r1, r2, 0 - adds r1, 0x7C - adds r3, r2, 0 - adds r3, 0xBC - ldr r2, [r2, 0x74] - b _0802044C - .align 2, 0 -_080202E0: .4byte gUnknown_203B27C -_080202E4: - ldr r0, [r5] - ldrh r1, [r0, 0x1C] - adds r0, 0x64 - strh r1, [r0] - movs r2, 0x1 - adds r4, r5, 0 - movs r3, 0 -_080202F2: - ldr r0, [r4] - lsls r1, r2, 1 - adds r0, 0x64 - adds r0, r1 - strh r3, [r0] - adds r2, 0x1 - cmp r2, 0x3 - ble _080202F2 - b _0802046E -_08020304: - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x24 - ldr r1, [r1, 0x10] - adds r1, 0x2C - bl sub_8094060 - ldr r1, [r5] - movs r0, 0x10 - str r0, [r1, 0x8] - ldr r0, _0802033C - ldrh r1, [r1, 0x1E] - bl sub_8092C84 - ldr r1, _08020340 - ldr r2, [r5] - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x28 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xBE - lsls r1, 1 - adds r2, r1 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_0802033C: .4byte gAvailablePokemonNames -_08020340: .4byte gGulpinDialogue -_08020344: - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x24 - ldr r1, [r1, 0x10] - adds r1, 0x2C - bl sub_8094060 - ldr r3, [r5] - movs r0, 0x10 - str r0, [r3, 0x8] - ldrb r0, [r3, 0x14] - cmp r0, 0 - beq _08020370 - ldr r1, _0802036C - ldr r2, [r3] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x38 - b _08020520 - .align 2, 0 -_0802036C: .4byte gGulpinDialogue -_08020370: - ldr r1, _08020388 - ldr r2, [r3] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x34 - adds r0, r1 - ldr r0, [r0] - movs r4, 0xBE - lsls r4, 1 - adds r1, r3, r4 - b _0802052A - .align 2, 0 -_08020388: .4byte gGulpinDialogue -_0802038C: - ldr r2, [r5] - ldr r0, [r2] - cmp r0, 0 - bne _080203A2 - movs r5, 0xC - ldrsh r1, [r2, r5] - adds r2, 0x24 - movs r0, 0 - bl CreateGulpinShop - b _08020562 -_080203A2: - movs r0, 0xC - ldrsh r1, [r2, r0] - adds r2, 0x24 - movs r0, 0x1 - bl CreateGulpinShop - b _08020562 -_080203B0: - ldr r2, [r5] - movs r0, 0x10 - str r0, [r2, 0x8] - ldr r1, _080203D0 - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x3C - adds r0, r1 - ldr r0, [r0] - movs r1, 0xBE - lsls r1, 1 - adds r2, r1 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080203D0: .4byte gGulpinDialogue -_080203D4: - ldr r2, [r5] - movs r0, 0x10 - str r0, [r2, 0x8] - ldr r1, _080203F4 - ldr r3, [r2] - movs r0, 0x64 - muls r0, r3 - adds r1, 0x40 - adds r0, r1 - ldr r0, [r0] - movs r4, 0xBE - lsls r4, 1 - adds r2, r4 - ldr r2, [r2] - b _0802052C - .align 2, 0 -_080203F4: .4byte gGulpinDialogue -_080203F8: - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x24 - ldr r1, [r1, 0x10] - adds r1, 0x2C - bl unk_CopyMoves4To8 - ldr r0, [r5] - movs r5, 0xC - ldrsh r1, [r0, r5] - adds r2, r0, 0 - adds r2, 0x24 - ldrb r3, [r0, 0x15] - ldr r0, _08020424 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - movs r0, 0x1 - bl sub_801EE10 - b _08020562 - .align 2, 0 -_08020424: .4byte gUnknown_80DC394 -_08020428: - ldr r0, [r5] - ldrb r1, [r0, 0x15] - movs r0, 0x1 - bl sub_801F1B0 - b _08020562 -_08020434: - movs r0, 0 - bl sub_801F280 - ldr r0, _0802045C - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0xCC - adds r1, r2, 0 - adds r1, 0x7C - adds r3, r2, 0 - adds r3, 0xBC - ldr r2, [r2, 0x78] -_0802044C: - str r2, [sp] - movs r2, 0x2 - str r2, [sp, 0x4] - movs r2, 0 - bl sub_8012D60 - b _08020562 - .align 2, 0 -_0802045C: .4byte gUnknown_203B27C -_08020460: - ldr r2, [r5] - ldr r0, [r2, 0x18] - adds r1, r2, 0 - adds r1, 0x24 - adds r2, 0x64 - bl GetLinkedSequence -_0802046E: - ldr r0, [r5] - adds r0, 0x64 - bl sub_801F808 - b _08020562 -_08020478: - bl sub_80208B0 - ldr r0, _080204B8 - ldr r4, _080204BC - ldr r1, [r4] - ldrh r1, [r1, 0x20] - bl sub_8092C84 - ldr r4, [r4] - ldrb r5, [r4, 0x14] - cmp r5, 0 - beq _080204C4 - ldr r1, _080204C0 - ldr r2, [r4] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x48 - adds r0, r1 - ldr r0, [r0] - adds r3, r4, 0 - adds r3, 0x7C - adds r1, r4, 0 - adds r1, 0xBC - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r2, 0xBE - lsls r2, 1 - adds r1, r4, r2 - b _080204E8 - .align 2, 0 -_080204B8: .4byte gUnknown_202DFE8 -_080204BC: .4byte gUnknown_203B27C -_080204C0: .4byte gGulpinDialogue -_080204C4: - ldr r1, _080204FC - ldr r2, [r4] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x44 - adds r0, r1 - ldr r0, [r0] - adds r3, r4, 0 - adds r3, 0x7C - adds r1, r4, 0 - adds r1, 0xBC - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - str r5, [sp, 0x8] - movs r5, 0xBE - lsls r5, 1 - adds r1, r4, r5 -_080204E8: - ldr r1, [r1] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - movs r2, 0x11 - bl sub_8014248 - b _08020562 - .align 2, 0 -_080204FC: .4byte gGulpinDialogue -_08020500: - ldr r1, [r5] - movs r0, 0x1F - str r0, [r1, 0x8] - ldr r0, _08020538 - ldrh r1, [r1, 0x20] - bl sub_8092C84 - ldr r3, [r5] - ldrb r0, [r3, 0x14] - cmp r0, 0 - beq _08020544 - ldr r1, _0802053C - ldr r2, [r3] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x50 -_08020520: - adds r0, r1 - ldr r0, [r0] - movs r2, 0xBE - lsls r2, 1 - adds r1, r3, r2 -_0802052A: - ldr r2, [r1] -_0802052C: - ldr r3, _08020540 - movs r1, 0 - bl sub_80141B4 - b _08020562 - .align 2, 0 -_08020538: .4byte gUnknown_202DFE8 -_0802053C: .4byte gGulpinDialogue -_08020540: .4byte 0x0000010d -_08020544: - ldr r1, _0802056C - ldr r2, [r3] - movs r0, 0x64 - muls r0, r2 - adds r1, 0x4C - adds r0, r1 - ldr r0, [r0] - movs r4, 0xBE - lsls r4, 1 - adds r1, r3, r4 - ldr r2, [r1] - ldr r3, _08020570 - movs r1, 0 - bl sub_80141B4 -_08020562: - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802056C: .4byte gGulpinDialogue -_08020570: .4byte 0x0000010d - thumb_func_end sub_801FF28 - - thumb_func_start CreateGulpinShopMenu -CreateGulpinShopMenu: - push {r4,lr} - ldr r4, _080205C0 - ldr r0, [r4] - adds r0, 0xBC - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r4, [r4] - movs r3, 0 - ldr r0, _080205C4 - str r0, [r4, 0x7C] - adds r1, r4, 0 - adds r1, 0x80 - movs r0, 0x2 - str r0, [r1] - movs r2, 0x1 - adds r1, 0x4 - ldr r0, _080205C8 - str r0, [r1] - adds r1, 0x4 - movs r0, 0xB - str r0, [r1] - adds r1, 0x4 - ldr r0, _080205CC - ldr r0, [r0] - str r0, [r1] - adds r0, r4, 0 - adds r0, 0x90 - str r2, [r0] - adds r0, 0x4 - str r3, [r0] - adds r0, 0x4 - str r2, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080205C0: .4byte gUnknown_203B27C -_080205C4: .4byte gGulpinProceed -_080205C8: .4byte gGulpinInfo -_080205CC: .4byte gUnknown_80D4934 - thumb_func_end CreateGulpinShopMenu - - thumb_func_start sub_80205D0 -sub_80205D0: - push {r4-r7,lr} - ldr r4, _08020660 - ldr r0, [r4] - adds r0, 0xBC - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r0, [r4] - mov r12, r0 - movs r5, 0 - ldr r0, _08020664 - mov r1, r12 - str r0, [r1, 0x7C] - mov r2, r12 - adds r2, 0x80 - movs r0, 0x4 - str r0, [r2] - movs r3, 0x1 - adds r1, 0x84 - ldr r0, _08020668 - str r0, [r1] - adds r1, 0x4 - movs r0, 0xB - str r0, [r1] - adds r1, 0x4 - ldr r0, _0802066C - str r0, [r1] - adds r1, 0x4 - movs r0, 0xC - str r0, [r1] - movs r6, 0x3 - adds r1, 0x4 - ldr r0, _08020670 - str r0, [r1] - mov r0, r12 - adds r0, 0x98 - str r6, [r0] - movs r6, 0x4 - adds r0, 0x4 - str r5, [r0] - adds r0, 0x4 - str r3, [r0] - mov r3, r12 - adds r3, 0xBC -_0802062A: - ldrh r0, [r3] - cmp r0, 0 - bne _0802063A - ldr r1, [r2] - mov r7, r12 - ldr r0, [r7, 0x70] - cmp r1, r0 - beq _08020696 -_0802063A: - adds r2, 0x8 - adds r3, 0x2 - adds r5, 0x1 - cmp r5, r6 - blt _0802062A - movs r5, 0 - cmp r5, r6 - bge _08020696 - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0xBC - ldrh r0, [r0] - cmp r0, 0 - bne _08020674 - adds r0, r1, 0 - adds r0, 0x80 - ldr r0, [r0] - str r0, [r1, 0x70] - b _08020696 - .align 2, 0 -_08020660: .4byte gUnknown_203B27C -_08020664: .4byte gUnknown_80DC3D8 -_08020668: .4byte gUnknown_80DC3E0 -_0802066C: .4byte gUnknown_80DC3E8 -_08020670: .4byte gUnknown_80DC3F4 -_08020674: - adds r5, 0x1 - cmp r5, r6 - bge _08020696 - ldr r2, [r4] - lsls r0, r5, 1 - adds r1, r2, 0 - adds r1, 0xBC - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _08020674 - lsls r0, r5, 3 - adds r1, r2, 0 - adds r1, 0x80 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x70] -_08020696: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80205D0 - - thumb_func_start sub_802069C -sub_802069C: - push {r4-r7,lr} - ldr r4, _08020718 - ldr r0, [r4] - adds r0, 0xBC - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r0, [r4] - mov r12, r0 - movs r5, 0 - ldr r0, _0802071C - mov r1, r12 - str r0, [r1, 0x7C] - mov r3, r12 - adds r3, 0x80 - movs r0, 0x3 - str r0, [r3] - movs r2, 0x1 - adds r1, 0x84 - ldr r0, _08020720 - ldr r0, [r0] - str r0, [r1] - adds r1, 0x4 - movs r0, 0xB - str r0, [r1] - movs r6, 0x2 - mov r0, r12 - adds r0, 0x8C - str r5, [r0] - adds r0, 0x4 - str r2, [r0] - mov r2, r12 - adds r2, 0xBC -_080206E0: - ldrh r0, [r2] - cmp r0, 0 - bne _080206F0 - ldr r1, [r3] - mov r7, r12 - ldr r0, [r7, 0x74] - cmp r1, r0 - beq _08020746 -_080206F0: - adds r3, 0x8 - adds r2, 0x2 - adds r5, 0x1 - cmp r5, r6 - blt _080206E0 - movs r5, 0 - cmp r5, r6 - bge _08020746 - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0xBC - ldrh r0, [r0] - cmp r0, 0 - bne _08020724 - adds r0, r1, 0 - adds r0, 0x80 - ldr r0, [r0] - str r0, [r1, 0x74] - b _08020746 - .align 2, 0 -_08020718: .4byte gUnknown_203B27C -_0802071C: .4byte gUnknown_80DC3F4 -_08020720: .4byte gUnknown_80D4970 -_08020724: - adds r5, 0x1 - cmp r5, r6 - bge _08020746 - ldr r2, [r4] - lsls r0, r5, 1 - adds r1, r2, 0 - adds r1, 0xBC - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _08020724 - lsls r0, r5, 3 - adds r1, r2, 0 - adds r1, 0x80 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x74] -_08020746: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_802069C - - thumb_func_start CreateGulpinLinkMenu -CreateGulpinLinkMenu: - push {r4-r7,lr} - movs r7, 0 - ldr r4, _08020780 - ldr r0, [r4] - adds r0, 0xBC - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r1, [r4] - ldrb r0, [r1, 0x16] - cmp r0, 0 - beq _0802079C - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl IsMoveSet - lsls r0, 24 - cmp r0, 0 - beq _08020788 - ldr r0, [r4] - ldr r1, _08020784 - str r1, [r0, 0x7C] - adds r0, 0x80 - movs r1, 0x6 - b _08020792 - .align 2, 0 -_08020780: .4byte gUnknown_203B27C -_08020784: .4byte gGulpinDeselect -_08020788: - ldr r0, [r4] - ldr r1, _08020798 - str r1, [r0, 0x7C] - adds r0, 0x80 - movs r1, 0x5 -_08020792: - str r1, [r0] - mov r12, r4 - b _080207CA - .align 2, 0 -_08020798: .4byte gGulpinSet -_0802079C: - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl IsMoveEnabled - lsls r0, 24 - cmp r0, 0 - beq _080207B4 - ldr r1, [r4] - ldr r0, _080207B0 - b _080207B8 - .align 2, 0 -_080207B0: .4byte gGulpinDeselect -_080207B4: - ldr r1, [r4] - ldr r0, _0802086C -_080207B8: - str r0, [r1, 0x7C] - ldr r2, _08020870 - ldr r0, [r2] - lsls r1, r7, 3 - adds r0, 0x80 - adds r0, r1 - movs r1, 0x7 - str r1, [r0] - mov r12, r2 -_080207CA: - adds r7, 0x1 - mov r0, r12 - ldr r4, [r0] - lsls r1, r7, 3 - adds r3, r4, 0 - adds r3, 0x7C - adds r2, r3, r1 - ldr r0, _08020874 - str r0, [r2] - adds r6, r4, 0 - adds r6, 0x80 - adds r1, r6, r1 - movs r0, 0x8 - str r0, [r1] - adds r7, 0x1 - lsls r1, r7, 3 - adds r2, r3, r1 - ldr r0, _08020878 - str r0, [r2] - adds r1, r6, r1 - movs r0, 0x9 - str r0, [r1] - adds r7, 0x1 - lsls r1, r7, 3 - adds r2, r3, r1 - ldr r0, _0802087C - str r0, [r2] - adds r1, r6, r1 - movs r0, 0xA - str r0, [r1] - adds r7, 0x1 - lsls r1, r7, 3 - adds r2, r3, r1 - ldr r0, _08020880 - ldr r0, [r0] - str r0, [r2] - adds r1, r6, r1 - movs r0, 0xB - str r0, [r1] - adds r7, 0x1 - lsls r1, r7, 3 - adds r3, r1 - movs r0, 0 - str r0, [r3] - adds r1, r6, r1 - movs r0, 0x1 - str r0, [r1] - movs r3, 0 - cmp r3, r7 - bge _0802084C - adds r5, r4, 0 - adds r4, 0xBC - adds r2, r6, 0 -_08020834: - ldrh r0, [r4] - cmp r0, 0 - bne _08020842 - ldr r1, [r2] - ldr r0, [r5, 0x78] - cmp r1, r0 - beq _080208A8 -_08020842: - adds r4, 0x2 - adds r2, 0x8 - adds r3, 0x1 - cmp r3, r7 - blt _08020834 -_0802084C: - movs r3, 0 - cmp r3, r7 - bge _080208A8 - mov r0, r12 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0xBC - ldrh r0, [r0] - cmp r0, 0 - bne _08020884 - adds r0, r1, 0 - adds r0, 0x80 - ldr r0, [r0] - str r0, [r1, 0x78] - b _080208A8 - .align 2, 0 -_0802086C: .4byte gGulpinSet -_08020870: .4byte gUnknown_203B27C -_08020874: .4byte gGulpinLink -_08020878: .4byte gGulpinDelink -_0802087C: .4byte gGulpinForget -_08020880: .4byte gUnknown_80D4970 -_08020884: - adds r3, 0x1 - cmp r3, r7 - bge _080208A8 - mov r0, r12 - ldr r2, [r0] - lsls r0, r3, 1 - adds r1, r2, 0 - adds r1, 0xBC - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _08020884 - lsls r0, r3, 3 - adds r1, r2, 0 - adds r1, 0x80 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x78] -_080208A8: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end CreateGulpinLinkMenu - - thumb_func_start sub_80208B0 -sub_80208B0: - push {r4,lr} - ldr r4, _080208F4 - ldr r0, [r4] - adds r0, 0xBC - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r4, [r4] - movs r3, 0 - ldr r0, _080208F8 - ldr r0, [r0] - str r0, [r4, 0x7C] - adds r1, r4, 0 - adds r1, 0x80 - movs r0, 0x10 - str r0, [r1] - movs r2, 0x1 - adds r1, 0x4 - ldr r0, _080208FC - ldr r0, [r0] - str r0, [r1] - adds r1, 0x4 - movs r0, 0x11 - str r0, [r1] - adds r0, r4, 0 - adds r0, 0x8C - str r3, [r0] - adds r0, 0x4 - str r2, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080208F4: .4byte gUnknown_203B27C -_080208F8: .4byte gUnknown_80D4920 -_080208FC: .4byte gUnknown_80D4928 - thumb_func_end sub_80208B0 - - thumb_func_start sub_8020900 -sub_8020900: - push {r4,lr} - ldr r4, _08020944 - ldr r0, [r4] - adds r0, 0xBC - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r3, [r4] - movs r2, 0 - ldr r0, _08020948 - ldr r0, [r0] - str r0, [r3, 0x7C] - adds r1, r3, 0 - adds r1, 0x80 - movs r0, 0x10 - str r0, [r1] - adds r1, 0x4 - ldr r0, _0802094C - ldr r0, [r0] - str r0, [r1] - adds r1, 0x4 - movs r0, 0x11 - str r0, [r1] - adds r0, r3, 0 - adds r0, 0x8C - str r2, [r0] - adds r1, 0x8 - movs r0, 0x1 - negs r0, r0 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08020944: .4byte gUnknown_203B27C -_08020948: .4byte gUnknown_80D4920 -_0802094C: .4byte gUnknown_80D4928 - thumb_func_end sub_8020900 - - thumb_func_start sub_8020950 -sub_8020950: - push {r4,lr} - ldr r4, _0802099C - ldr r0, [r4] - adds r0, 0xBC - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r4, [r4] - movs r3, 0 - ldr r0, _080209A0 - str r0, [r4, 0x7C] - adds r1, r4, 0 - adds r1, 0x80 - movs r0, 0xD - str r0, [r1] - movs r2, 0x1 - adds r1, 0x4 - ldr r0, _080209A4 - str r0, [r1] - adds r1, 0x4 - movs r0, 0xE - str r0, [r1] - adds r1, 0x4 - ldr r0, _080209A8 - str r0, [r1] - adds r1, 0x4 - movs r0, 0xF - str r0, [r1] - adds r0, r4, 0 - adds r0, 0x94 - str r3, [r0] - adds r0, 0x4 - str r2, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802099C: .4byte gUnknown_203B27C -_080209A0: .4byte gUnknown_80DC428 -_080209A4: .4byte gUnknown_80DC438 -_080209A8: .4byte gUnknown_80DC448 - thumb_func_end sub_8020950 - thumb_func_start sub_80209AC sub_80209AC: push {lr} diff --git a/include/code_801EE10.h b/include/code_801EE10.h index b6ff7142e..10c8d7734 100644 --- a/include/code_801EE10.h +++ b/include/code_801EE10.h @@ -17,7 +17,7 @@ struct unkStruct_203B270 u32 unk50; u32 unk54; struct UnkTextStruct2 unk58[4]; - u8 *unkB8; + u8 *text; }; #endif diff --git a/include/moves.h b/include/moves.h index c6474ca66..02c0d435b 100644 --- a/include/moves.h +++ b/include/moves.h @@ -57,5 +57,7 @@ void unk_LinkedSequencesToMoves8(struct Move* moves, struct Move linkedSequences int unk_FindMarkedMoveInLinkedSequences88_v2(struct Move linkedSequences[8][8]); void unk_LinkedSequencesToMoves8_v2(struct Move* moves, struct Move linkedSequences[8][8]); +bool8 IsMoveSet(int index, struct Move* struct_ptr); +bool8 IsMoveEnabled(int index, struct Move* struct_ptr); #endif // GUARD_MOVES_H diff --git a/src/code_801EE10.c b/src/code_801EE10.c index 8a805f998..fb0984c58 100644 --- a/src/code_801EE10.c +++ b/src/code_801EE10.c @@ -16,7 +16,7 @@ s32 sub_801F3F8(void); void sub_8013780(struct MenuInputStruct*, u32); void sub_801F280(u32); -u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u8 *param_5,u32 param_6) +u8 sub_801EE10(u32 param_1, s16 species, struct Move *moves, u32 param_4, u8 *text, u32 param_6) { s32 iVar5; s32 iVar8; @@ -24,7 +24,7 @@ u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u8 *param_ u8 param_4_u8; s32 four; - species_s32 = species; + species_s32 = species; param_4_u8 = param_4; gUnknown_203B270 = MemoryAlloc(sizeof(struct unkStruct_203B270), 8); gUnknown_203B270->unk4 = param_4_u8; @@ -47,7 +47,7 @@ u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u8 *param_ gUnknown_203B270->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32]; gUnknown_203B270->isTeamLeader = gUnknown_203B270->pokeStruct->isTeamLeader; gUnknown_203B270->moves = moves; - gUnknown_203B270->unkB8 = param_5; + gUnknown_203B270->text = text; iVar8 = iVar5 = sub_801F3F8(); four = 4; if (iVar8 < four) { @@ -56,7 +56,7 @@ u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u8 *param_ sub_8006518(gUnknown_203B270->unk58); gUnknown_203B270->unk50 = param_6; gUnknown_203B270->unk58[param_6] = gUnknown_80DC25C; - if (gUnknown_203B270->unkB8 != 0) { + if (gUnknown_203B270->text != NULL) { gUnknown_203B270->unk54 = sub_8006544(param_6); gUnknown_203B270->unk58[gUnknown_203B270->unk54] = gUnknown_80DC274; } diff --git a/src/gulpin_shop.c b/src/gulpin_shop.c index 9f3b8dd90..f0d500d3f 100644 --- a/src/gulpin_shop.c +++ b/src/gulpin_shop.c @@ -151,7 +151,7 @@ void sub_801EA28(void) { switch (gGulpinShopWork->state) { case 0: - sub_801EE10(2, gGulpinShopWork->speciesNum, gGulpinShopWork->moves, 0, &gUnknown_80DC164, 0); + sub_801EE10(2, gGulpinShopWork->speciesNum, gGulpinShopWork->moves, 0, gUnknown_80DC164, 0); break; case 1: sub_801F1B0(1, 0); @@ -331,4 +331,4 @@ void sub_801EDC0(void) break; } } -} \ No newline at end of file +} diff --git a/src/gulpin_shop_1.c b/src/gulpin_shop_1.c index ac068fd28..5e1724614 100644 --- a/src/gulpin_shop_1.c +++ b/src/gulpin_shop_1.c @@ -6,28 +6,30 @@ #include "input.h" #include "text.h" #include "team_inventory.h" - -extern u8 gUnknown_202E5D8[]; -extern u8 gUnknown_202E1C8[]; +#include "menu_input.h" +#include "gulpin_shop.h" +#include "moves.h" // size: 0x1E0 struct unkStruct_203B27C { - bool32 isAsleep; - s32 state; - u32 unk8; - s16 unkC; - struct PokemonStruct *unk10; - u8 unk14; + /* 0x0 */ bool32 isAsleep; + /* 0x4 */ s32 state; + /* 0x8 */ u32 fallbackState; + /* 0xC */ s16 speciesNum; + /* 0x10 */ struct PokemonStruct *pokeStruct; + /* 0x14 */ bool8 isNextMoveLinked; u8 unk15; u8 unk16; u8 unk17; - u32 unk18; + /* 0x18 */ u32 moveIndex; u16 unk1C; u16 unk1E; u16 unk20; - u8 fill22[0x64 - 0x22]; - u16 unk64[4]; + u16 fill22; + /* 0x24 */ struct Move moves[4]; + u8 fill44[0x20]; + /* 0x64 */ u16 sequenceMoveIDs[4]; u32 unk6C; u32 unk70; u32 unk74; @@ -49,6 +51,53 @@ struct unkStruct_203B27C extern struct unkStruct_203B27C *gUnknown_203B27C; +extern u8 gAvailablePokemonNames[]; +extern u8 gUnknown_202DFE8[]; +extern u8 gUnknown_202E1C8[]; +extern u8 gUnknown_202E5D8[]; + +extern struct UnkTextStruct2 gUnknown_80DC31C; +extern struct UnkTextStruct2 gUnknown_80DC334; +extern struct UnkTextStruct2 gUnknown_80DC31C; +extern struct UnkTextStruct2 gUnknown_80DC34C; +extern struct UnkTextStruct2 gUnknown_80DC37C; + +extern const u8 *gGulpinDialogue[2][25]; +extern u8 gUnknown_80DC394[]; +extern u8 gGulpinProceed[]; +extern u8 gGulpinInfo[]; +extern u8 *gUnknown_80D4934[]; +extern u8 *gUnknown_80D4920[]; +extern u8 *gUnknown_80D4928[]; +extern u8 gGulpinForget[]; +extern u8 gGulpinLink[]; +extern u8 gGulpinDelink[]; +extern u8 gGulpinSet[]; +extern u8 gGulpinDeselect[]; +extern u8 *gUnknown_80D4970[]; +extern u8 gUnknown_80DC428[]; +extern u8 gUnknown_80DC438[]; +extern u8 gUnknown_80DC448[]; + +void CreateGulpinShopMenu(void); +extern void sub_8014248(const u8 *, u32, u32, const struct MenuItem *, void *, u32, u32, struct OpenedFile **, u32); +extern void sub_80141B4(const u8 *, u32, struct OpenedFile **, u32); +extern void DrawTeamMoneyBox(u32); +void sub_8020950(void); +void sub_8020900(void); +bool8 sub_801F808(u16 *moveIDs); +void sub_801F700(void); +bool8 sub_801F428(s16 index, s32 param_2); +void sub_801F5F0(u8 r0); +extern void sub_8023DA4(void); +extern void sub_8023868(u32, u32, u32, u32); +extern void sub_8023B7C(u32); +extern void sub_801F1B0(u32, u32); +extern void sub_801F280(u32); +void sub_8024458(u32, u32); +extern void sub_801BEEC(s16); +extern void sub_801EE10(u32, s16, struct Move *, u32, void *, u32); +void sub_80208B0(void); void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern void sub_801FDA8(s32); @@ -72,6 +121,10 @@ extern void sub_8020A34(void); extern void sub_801FDC0(void); extern void sub_801FF28(void); +extern void CreateGulpinLinkMenu(void); +extern void sub_802069C(void); +extern void sub_80205D0(void); + bool8 sub_801FB50(bool32 isAsleep) { char *name; @@ -165,7 +218,7 @@ u32 sub_801FC40(void) break; case 0xd: if (gUnknown_203B27C->unk15 == 1) { - gTeamInventory_203B460->teamMoney -= 0x96; + gTeamInventory_203B460->teamMoney -= 150; } return 3; default: @@ -191,3 +244,438 @@ void sub_801FDA8(s32 newState) sub_801FDC0(); sub_801FF28(); } + +void sub_801FDC0(void) +{ + s32 index; + + sub_8006518(gUnknown_203B27C->unk180); + switch(gUnknown_203B27C->state) + { + case 0x2: + gUnknown_203B27C->unk180[0].unk0 = 0x80; + gUnknown_203B27C->unk180[1].unk0 = 0x80; + gUnknown_203B27C->unk180[2].unk0 = 0x80; + gUnknown_203B27C->unk180[3] = gUnknown_80DC37C; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B27C->unk180, 1, 0); + break; + case 0x11: + sub_80205D0(); + gUnknown_203B27C->unk180[2] = gUnknown_80DC334; + sub_8012CAC(&gUnknown_203B27C->unk180[2], gUnknown_203B27C->unk7C); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B27C->unk180, 1, 1); + break; + case 0x17: + sub_802069C(); + gUnknown_203B27C->unk180[2] = gUnknown_80DC334; + sub_8012CAC(&gUnknown_203B27C->unk180[2], gUnknown_203B27C->unk7C); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B27C->unk180, 1, 1); + break; + case 0x20: + CreateGulpinLinkMenu(); + gUnknown_203B27C->unk180[1] = gUnknown_80DC31C; + gUnknown_203B27C->unk180[2] = gUnknown_80DC34C; + sub_8012CAC(&gUnknown_203B27C->unk180[2], gUnknown_203B27C->unk7C); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B27C->unk180, 1, 1); + break; + default: + for(index = 0; index < 4; index++) + { + gUnknown_203B27C->unk180[index] = gUnknown_80DC31C; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B27C->unk180, 1, 1); + break; + } +} + +void sub_801FF28(void) +{ + s32 index; + + switch(gUnknown_203B27C->state) + { + case 0: + gUnknown_203B27C->unk6C = 2; + CreateGulpinShopMenu(); + gUnknown_203B27C->fallbackState = 2; + sub_8014248(gGulpinDialogue[gUnknown_203B27C->isAsleep][0],0,gUnknown_203B27C->unk6C,gUnknown_203B27C->unk7C,gUnknown_203B27C->unkBC,4,0,gUnknown_203B27C->unk17C,0xc); + break; + case 1: + CreateGulpinShopMenu(); + gUnknown_203B27C->fallbackState = 2; + sub_8014248(gGulpinDialogue[gUnknown_203B27C->isAsleep][1],0,gUnknown_203B27C->unk6C,gUnknown_203B27C->unk7C,gUnknown_203B27C->unkBC,4,0,gUnknown_203B27C->unk17C,0xc); + break; + case 2: + DrawTeamMoneyBox(3); + break; + case 3: + gUnknown_203B27C->fallbackState = 0x1f; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][2],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 4: + gUnknown_203B27C->fallbackState = 0x1f; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][3],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 5: + gUnknown_203B27C->fallbackState = 0x1f; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][4],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 6: + gUnknown_203B27C->fallbackState = 0x1f; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][5],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 7: + sub_8020900(); + sub_8014248(gGulpinDialogue[gUnknown_203B27C->isAsleep][6],0,0x10, + gUnknown_203B27C->unk7C,gUnknown_203B27C->unkBC,4,0, + gUnknown_203B27C->unk17C,0xc); + break; + case 8: + sub_8020950(); + sub_8014248(gGulpinDialogue[gUnknown_203B27C->isAsleep][21],0,0xd, + gUnknown_203B27C->unk7C,gUnknown_203B27C->unkBC,4,0, + gUnknown_203B27C->unk17C,0xc); + break; + case 9: + gUnknown_203B27C->fallbackState = 1; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][22],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 10: + gUnknown_203B27C->fallbackState = 1; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][23],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 0xb: + gUnknown_203B27C->fallbackState = 1; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][24],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 0xc: + gUnknown_203B27C->fallbackState = 0xd; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][7],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 0xe: + gUnknown_203B27C->fallbackState = 0xf; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][8],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 0xf: + sub_8023868(2,0,0,10); + break; + case 0x10: + sub_8023B7C(1); + break; + case 0x11: + sub_8023DA4(); + sub_8012D60(&gUnknown_203B27C->unkCC,gUnknown_203B27C->unk7C,0,gUnknown_203B27C->unkBC,gUnknown_203B27C->unk70,2); + break; + case 0x12: + sub_8024458(gUnknown_203B27C->speciesNum,2); + break; + case 0x13: + sub_801BEEC(gUnknown_203B27C->speciesNum); + break; + case 0x14: + gUnknown_203B27C->fallbackState = 0x15; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][9],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 0x15: + sub_801F428(gUnknown_203B27C->speciesNum,0); + break; + case 0x16: + sub_801F5F0(1); + break; + case 0x17: + sub_801F700(); + sub_8012D60(&gUnknown_203B27C->unkCC,gUnknown_203B27C->unk7C,0,gUnknown_203B27C->unkBC,gUnknown_203B27C->unk74,2); + break; + case 0x18: + gUnknown_203B27C->sequenceMoveIDs[0] = gUnknown_203B27C->unk1C; + for(index = 1; index < 4; index++) + { + gUnknown_203B27C->sequenceMoveIDs[index] = 0; + } + sub_801F808(gUnknown_203B27C->sequenceMoveIDs); + break; + case 0x19: + sub_8094060(gUnknown_203B27C->moves,gUnknown_203B27C->pokeStruct->moves); + gUnknown_203B27C->fallbackState = 0x10; + sub_8092C84(gAvailablePokemonNames,gUnknown_203B27C->unk1E); + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][10],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 0x1a: + sub_8094060(gUnknown_203B27C->moves,gUnknown_203B27C->pokeStruct->moves); + gUnknown_203B27C->fallbackState = 0x10; + if (gUnknown_203B27C->isNextMoveLinked) { + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][14],0,gUnknown_203B27C->unk17C,0x10d); + } + else + { + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][13],0,gUnknown_203B27C->unk17C,0x10d); + } + break; + case 0x1d: + if (gUnknown_203B27C->isAsleep == FALSE) { + CreateGulpinShop(FALSE,gUnknown_203B27C->speciesNum,gUnknown_203B27C->moves); + } + else { + CreateGulpinShop(TRUE,gUnknown_203B27C->speciesNum,gUnknown_203B27C->moves); + } + break; + case 0x1b: + gUnknown_203B27C->fallbackState = 0x10; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][15],0,gUnknown_203B27C->unk17C,0x10d); + break; + case 0x1c: + gUnknown_203B27C->fallbackState = 0x10; + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][16],0,gUnknown_203B27C->unk17C,0x10d); + break; + + case 0x1e: + unk_CopyMoves4To8(gUnknown_203B27C->moves,gUnknown_203B27C->pokeStruct->moves); + sub_801EE10(1,gUnknown_203B27C->speciesNum,gUnknown_203B27C->moves,gUnknown_203B27C->unk15,gUnknown_80DC394,0); + break; + case 0x1f: + sub_801F1B0(1,gUnknown_203B27C->unk15); + break; + case 0x20: + sub_801F280(0); + sub_8012D60(&gUnknown_203B27C->unkCC,gUnknown_203B27C->unk7C,0,gUnknown_203B27C->unkBC,gUnknown_203B27C->unk78,2); + break; + case 0x21: + GetLinkedSequence(gUnknown_203B27C->moveIndex,gUnknown_203B27C->moves,gUnknown_203B27C->sequenceMoveIDs); + sub_801F808(gUnknown_203B27C->sequenceMoveIDs); + break; + case 0x22: + sub_80208B0(); + sub_8092C84(gUnknown_202DFE8,gUnknown_203B27C->unk20); + if (gUnknown_203B27C->isNextMoveLinked) { + sub_8014248(gGulpinDialogue[gUnknown_203B27C->isAsleep][18],0,0x11,gUnknown_203B27C->unk7C,gUnknown_203B27C->unkBC,4,0, + gUnknown_203B27C->unk17C,0xc); + } + else { + sub_8014248(gGulpinDialogue[gUnknown_203B27C->isAsleep][17],0,0x11,gUnknown_203B27C->unk7C,gUnknown_203B27C->unkBC,4,0, + gUnknown_203B27C->unk17C,0xc); + } + break; + case 0x23: + gUnknown_203B27C->fallbackState = 0x1f; + sub_8092C84(gUnknown_202DFE8,gUnknown_203B27C->unk20); + if (gUnknown_203B27C->isNextMoveLinked) + { + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][20],0,gUnknown_203B27C->unk17C,0x10d); + } + else + { + sub_80141B4(gGulpinDialogue[gUnknown_203B27C->isAsleep][19],0,gUnknown_203B27C->unk17C,0x10d); + } + break; + } +} + +void CreateGulpinShopMenu(void) +{ + s32 loopMax = 0; + MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); + gUnknown_203B27C->unk7C[loopMax].text = gGulpinProceed; + gUnknown_203B27C->unk7C[loopMax].menuAction = 2; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gGulpinInfo; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xb; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = *gUnknown_80D4934; + gUnknown_203B27C->unk7C[loopMax].menuAction = 1; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = 0x0; + gUnknown_203B27C->unk7C[loopMax].menuAction = 1; +} + +extern u8 gUnknown_80DC3D8[]; +extern u8 gUnknown_80DC3E0[]; +extern u8 gUnknown_80DC3E8[]; +extern u8 gUnknown_80DC3F4[]; +extern u8 *gUnknown_80D4970[]; + +void sub_80205D0(void) +{ + s32 loopMax; + s32 i; + loopMax = 0; + + MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); + + gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC3D8; + gUnknown_203B27C->unk7C[loopMax].menuAction = 4; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC3E0; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xB; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC3E8; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xC; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC3F4; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0x3; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = NULL; + gUnknown_203B27C->unk7C[loopMax].menuAction = 1; + + for (i = 0; i < loopMax; i++) { + if (gUnknown_203B27C->unkBC[i] == 0 && gUnknown_203B27C->unk7C[i].menuAction == gUnknown_203B27C->unk70) + return; + } + for (i = 0; i < loopMax; i++) { + if (gUnknown_203B27C->unkBC[i] == 0) { + gUnknown_203B27C->unk70 = gUnknown_203B27C->unk7C[i].menuAction; + break; + } + } +} + +void sub_802069C(void) +{ + s32 loopMax; + s32 i; + loopMax = 0; + + MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); + + gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC3F4; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0x3; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = *gUnknown_80D4970; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xB; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = NULL; + gUnknown_203B27C->unk7C[loopMax].menuAction = 1; + + for (i = 0; i < loopMax; i++) { + if (gUnknown_203B27C->unkBC[i] == 0 && gUnknown_203B27C->unk7C[i].menuAction == gUnknown_203B27C->unk74) + return; + } + for (i = 0; i < loopMax; i++) { + if (gUnknown_203B27C->unkBC[i] == 0) { + gUnknown_203B27C->unk74 = gUnknown_203B27C->unk7C[i].menuAction; + break; + } + } +} + +void CreateGulpinLinkMenu(void) +{ + s32 loopMax; + s32 i; + loopMax = 0; + + MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); + + if(gUnknown_203B27C->unk16) + { + if(IsMoveSet(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) + { + gUnknown_203B27C->unk7C[loopMax].text = gGulpinDeselect; + gUnknown_203B27C->unk7C[loopMax].menuAction = 6; + } + else + { + gUnknown_203B27C->unk7C[loopMax].text = gGulpinSet; + gUnknown_203B27C->unk7C[loopMax].menuAction = 5; + } + } + else + { + if(IsMoveEnabled(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) + { + gUnknown_203B27C->unk7C[loopMax].text = gGulpinDeselect; + } + else + { + gUnknown_203B27C->unk7C[loopMax].text = gGulpinSet; + } + gUnknown_203B27C->unk7C[loopMax].menuAction = 7; + } + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gGulpinLink; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0x8; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gGulpinDelink; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0x9; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gGulpinForget; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xA; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = *gUnknown_80D4970; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xB; + + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = NULL; + gUnknown_203B27C->unk7C[loopMax].menuAction = 1; + + for (i = 0; i < loopMax; i++) { + if (gUnknown_203B27C->unkBC[i] == 0 && gUnknown_203B27C->unk7C[i].menuAction == gUnknown_203B27C->unk78) + return; + } + for (i = 0; i < loopMax; i++) { + if (gUnknown_203B27C->unkBC[i] == 0) { + gUnknown_203B27C->unk78 = gUnknown_203B27C->unk7C[i].menuAction; + break; + } + } +} + +void sub_80208B0(void) +{ + s32 loopMax = 0; + MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); + gUnknown_203B27C->unk7C[loopMax].text = *gUnknown_80D4920; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0x10; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = *gUnknown_80D4928; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0x11; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = NULL; + gUnknown_203B27C->unk7C[loopMax].menuAction = 1; +} + +void sub_8020900(void) +{ + s32 loopMax = 0; + MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); + gUnknown_203B27C->unk7C[loopMax].text = *gUnknown_80D4920; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0x10; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = *gUnknown_80D4928; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0x11; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = NULL; + gUnknown_203B27C->unk7C[loopMax].menuAction = -1; +} + +void sub_8020950(void) +{ + s32 loopMax = 0; + MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); + + gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC428; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xD; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC438; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xE; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC448; + gUnknown_203B27C->unk7C[loopMax].menuAction = 0xF; + loopMax++; + gUnknown_203B27C->unk7C[loopMax].text = NULL; + gUnknown_203B27C->unk7C[loopMax].menuAction = 1; +} From a3ff33a4cfb6beab54a38e640a3d6fa2eb4f73c3 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 30 Jul 2023 21:51:39 -0700 Subject: [PATCH 20/26] More gulpin decomp --- asm/code_801EE10_mid.s | 497 ----------------------------------------- src/gulpin_shop_1.c | 268 +++++++++++++++++++++- 2 files changed, 266 insertions(+), 499 deletions(-) diff --git a/asm/code_801EE10_mid.s b/asm/code_801EE10_mid.s index 92c23009d..8e6c27093 100644 --- a/asm/code_801EE10_mid.s +++ b/asm/code_801EE10_mid.s @@ -5,503 +5,6 @@ .text - thumb_func_start sub_80209AC -sub_80209AC: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _080209F4 - ldr r0, _080209D4 - ldr r1, [r0] - ldr r0, [sp] - str r0, [r1, 0x6C] - ldr r0, [sp] - cmp r0, 0x2 - beq _080209DE - cmp r0, 0x2 - bgt _080209D8 - cmp r0, 0x1 - beq _080209EE - b _080209F4 - .align 2, 0 -_080209D4: .4byte gUnknown_203B27C -_080209D8: - cmp r0, 0xB - beq _080209E6 - b _080209F4 -_080209DE: - movs r0, 0xE - bl sub_801FDA8 - b _080209F4 -_080209E6: - movs r0, 0x8 - bl sub_801FDA8 - b _080209F4 -_080209EE: - movs r0, 0xC - bl sub_801FDA8 -_080209F4: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_80209AC - - thumb_func_start sub_80209FC -sub_80209FC: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _08020A2E - ldr r0, [sp] - cmp r0, 0x10 - beq _08020A20 - cmp r0, 0x10 - bgt _08020A1A - cmp r0, 0x1 - beq _08020A28 - b _08020A2E -_08020A1A: - cmp r0, 0x11 - beq _08020A28 - b _08020A2E -_08020A20: - movs r0, 0xE - bl sub_801FDA8 - b _08020A2E -_08020A28: - movs r0, 0xC - bl sub_801FDA8 -_08020A2E: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_80209FC - - thumb_func_start sub_8020A34 -sub_8020A34: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _08020A7A - ldr r0, [sp] - cmp r0, 0xD - beq _08020A5C - cmp r0, 0xD - bgt _08020A52 - cmp r0, 0x1 - beq _08020A74 - b _08020A7A -_08020A52: - cmp r0, 0xE - beq _08020A64 - cmp r0, 0xF - beq _08020A6C - b _08020A7A -_08020A5C: - movs r0, 0x9 - bl sub_801FDA8 - b _08020A7A -_08020A64: - movs r0, 0xA - bl sub_801FDA8 - b _08020A7A -_08020A6C: - movs r0, 0xB - bl sub_801FDA8 - b _08020A7A -_08020A74: - movs r0, 0x1 - bl sub_801FDA8 -_08020A7A: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_8020A34 - - thumb_func_start sub_8020A80 -sub_8020A80: - push {r4,lr} - movs r0, 0x1 - bl sub_8023A94 - cmp r0, 0x4 - bhi _08020B32 - lsls r0, 2 - ldr r1, _08020A98 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08020A98: .4byte _08020A9C - .align 2, 0 -_08020A9C: - .4byte _08020B32 - .4byte _08020B32 - .4byte _08020B28 - .4byte _08020AB0 - .4byte _08020AEC -_08020AB0: - bl sub_8023B44 - ldr r4, _08020AE0 - ldr r1, [r4] - strh r0, [r1, 0xC] - ldr r3, _08020AE4 - movs r0, 0xC - ldrsh r2, [r1, r0] - movs r0, 0x58 - muls r2, r0 - ldr r0, [r3] - adds r0, r2 - str r0, [r1, 0x10] - ldrb r0, [r0, 0x2] - strb r0, [r1, 0x16] - ldr r0, _08020AE8 - ldr r1, [r4] - ldr r1, [r1, 0x10] - bl PrintPokeNameToBuffer - movs r0, 0x11 - bl sub_801FDA8 - b _08020B32 - .align 2, 0 -_08020AE0: .4byte gUnknown_203B27C -_08020AE4: .4byte gRecruitedPokemonRef -_08020AE8: .4byte gUnknown_202E128 -_08020AEC: - bl sub_8023B44 - ldr r4, _08020B1C - ldr r1, [r4] - strh r0, [r1, 0xC] - ldr r3, _08020B20 - movs r0, 0xC - ldrsh r2, [r1, r0] - movs r0, 0x58 - muls r2, r0 - ldr r0, [r3] - adds r0, r2 - str r0, [r1, 0x10] - ldrb r0, [r0, 0x2] - strb r0, [r1, 0x16] - ldr r0, _08020B24 - ldr r1, [r4] - ldr r1, [r1, 0x10] - bl PrintPokeNameToBuffer - movs r0, 0x12 - bl sub_801FDA8 - b _08020B32 - .align 2, 0 -_08020B1C: .4byte gUnknown_203B27C -_08020B20: .4byte gRecruitedPokemonRef -_08020B24: .4byte gUnknown_202E128 -_08020B28: - bl sub_8023C60 - movs r0, 0x7 - bl sub_801FDA8 -_08020B32: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8020A80 - - thumb_func_start sub_8020B38 -sub_8020B38: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_8023A94 - ldr r4, _08020B7C - ldr r0, [r4] - adds r0, 0xCC - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _08020B68 - ldr r0, [r4] - adds r0, 0xCC - mov r1, sp - bl sub_8013114 - ldr r1, [sp] - cmp r1, 0x1 - beq _08020B68 - ldr r0, [r4] - str r1, [r0, 0x70] -_08020B68: - ldr r0, [sp] - subs r0, 0x1 - cmp r0, 0x10 - bhi _08020C24 - lsls r0, 2 - ldr r1, _08020B80 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08020B7C: .4byte gUnknown_203B27C -_08020B80: .4byte _08020B84 - .align 2, 0 -_08020B84: - .4byte _08020BC8 - .4byte _08020C24 - .4byte _08020BD0 - .4byte _08020C0E - .4byte _08020C24 - .4byte _08020C24 - .4byte _08020C24 - .4byte _08020C24 - .4byte _08020C24 - .4byte _08020C24 - .4byte _08020C16 - .4byte _08020C1E - .4byte _08020C24 - .4byte _08020C24 - .4byte _08020C24 - .4byte _08020C24 - .4byte _08020BC8 -_08020BC8: - movs r0, 0x10 - bl sub_801FDA8 - b _08020C24 -_08020BD0: - ldr r0, _08020BF0 - ldr r0, [r0] - ldr r0, [r0, 0x10] - movs r1, 0x8 - ldrsh r0, [r0, r1] - bl GetBaseSpeciesNoUnown - lsls r0, 16 - movs r1, 0xCF - lsls r1, 17 - cmp r0, r1 - bne _08020BF4 - movs r0, 0x1C - bl sub_801FDA8 - b _08020C24 - .align 2, 0 -_08020BF0: .4byte gUnknown_203B27C -_08020BF4: - bl sub_8021178 - lsls r0, 24 - cmp r0, 0 - beq _08020C06 - movs r0, 0x1B - bl sub_801FDA8 - b _08020C24 -_08020C06: - movs r0, 0x14 - bl sub_801FDA8 - b _08020C24 -_08020C0E: - movs r0, 0x1E - bl sub_801FDA8 - b _08020C24 -_08020C16: - movs r0, 0x12 - bl sub_801FDA8 - b _08020C24 -_08020C1E: - movs r0, 0x13 - bl sub_801FDA8 -_08020C24: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8020B38 - - thumb_func_start sub_8020C2C -sub_8020C2C: - push {lr} - bl sub_80244E4 - cmp r0, 0x1 - bls _08020C44 - cmp r0, 0x3 - bhi _08020C44 - bl sub_802453C - movs r0, 0x10 - bl sub_801FDA8 -_08020C44: - pop {r0} - bx r0 - thumb_func_end sub_8020C2C - - thumb_func_start sub_8020C48 -sub_8020C48: - push {lr} - bl sub_801BF48 - cmp r0, 0x1 - bls _08020C60 - cmp r0, 0x3 - bhi _08020C60 - bl sub_801BF98 - movs r0, 0x10 - bl sub_801FDA8 -_08020C60: - pop {r0} - bx r0 - thumb_func_end sub_8020C48 - - thumb_func_start sub_8020C64 -sub_8020C64: - push {lr} - movs r0, 0x1 - bl sub_801F520 - cmp r0, 0x3 - beq _08020C80 - cmp r0, 0x3 - bhi _08020C7A - cmp r0, 0x2 - beq _08020CB0 - b _08020CBA -_08020C7A: - cmp r0, 0x4 - beq _08020C98 - b _08020CBA -_08020C80: - bl sub_801F5B4 - ldr r1, _08020C94 - ldr r1, [r1] - strh r0, [r1, 0x1C] - strh r0, [r1, 0x1E] - movs r0, 0x17 - bl sub_801FDA8 - b _08020CBA - .align 2, 0 -_08020C94: .4byte gUnknown_203B27C -_08020C98: - bl sub_801F5B4 - ldr r1, _08020CAC - ldr r1, [r1] - strh r0, [r1, 0x1C] - strh r0, [r1, 0x1E] - movs r0, 0x18 - bl sub_801FDA8 - b _08020CBA - .align 2, 0 -_08020CAC: .4byte gUnknown_203B27C -_08020CB0: - bl sub_801F63C - movs r0, 0x10 - bl sub_801FDA8 -_08020CBA: - pop {r0} - bx r0 - thumb_func_end sub_8020C64 - - thumb_func_start sub_8020CC0 -sub_8020CC0: - push {r4-r6,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_801F520 - ldr r4, _08020D00 - ldr r0, [r4] - adds r0, 0xCC - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _08020CF0 - ldr r0, [r4] - adds r0, 0xCC - mov r1, sp - bl sub_8013114 - ldr r1, [sp] - cmp r1, 0x1 - beq _08020CF0 - ldr r0, [r4] - str r1, [r0, 0x74] -_08020CF0: - ldr r0, [sp] - cmp r0, 0x3 - beq _08020D14 - cmp r0, 0x3 - bgt _08020D04 - cmp r0, 0x1 - beq _08020D0C - b _08020D6C - .align 2, 0 -_08020D00: .4byte gUnknown_203B27C -_08020D04: - cmp r0, 0xB - beq _08020D66 - cmp r0, 0x11 - bne _08020D6C -_08020D0C: - movs r0, 0x16 - bl sub_801FDA8 - b _08020D6C -_08020D14: - bl sub_801F63C - ldr r4, _08020D30 - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x24 - ldr r1, [r1, 0x10] - adds r1, 0x2C - bl unk_CopyMoves4To8 - movs r5, 0 - adds r6, r4, 0 - movs r4, 0x24 - b _08020D38 - .align 2, 0 -_08020D30: .4byte gUnknown_203B27C -_08020D34: - adds r4, 0x8 - adds r5, 0x1 -_08020D38: - cmp r5, 0x7 - bgt _08020D52 - ldr r3, [r6] - adds r2, r3, r4 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08020D34 - ldrh r1, [r3, 0x1E] - adds r0, r2, 0 - bl InitZeroedPPPokemonMove -_08020D52: - cmp r5, 0x3 - ble _08020D5E - movs r0, 0x1D - bl sub_801FDA8 - b _08020D6C -_08020D5E: - movs r0, 0x19 - bl sub_801FDA8 - b _08020D6C -_08020D66: - movs r0, 0x18 - bl sub_801FDA8 -_08020D6C: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8020CC0 - - thumb_func_start sub_8020D74 -sub_8020D74: - push {lr} - bl sub_801F890 - cmp r0, 0x1 - bls _08020D8C - cmp r0, 0x3 - bhi _08020D8C - bl sub_801F8D0 - movs r0, 0x16 - bl sub_801FDA8 -_08020D8C: - pop {r0} - bx r0 - thumb_func_end sub_8020D74 - thumb_func_start sub_8020D90 sub_8020D90: push {lr} diff --git a/src/gulpin_shop_1.c b/src/gulpin_shop_1.c index 5e1724614..9ba5d2b26 100644 --- a/src/gulpin_shop_1.c +++ b/src/gulpin_shop_1.c @@ -2,6 +2,7 @@ #include "memory.h" #include "menu.h" #include "pokemon.h" +#include "pokemon_3.h" #include "file_system.h" #include "input.h" #include "text.h" @@ -20,7 +21,7 @@ struct unkStruct_203B27C /* 0x10 */ struct PokemonStruct *pokeStruct; /* 0x14 */ bool8 isNextMoveLinked; u8 unk15; - u8 unk16; + u8 isTeamLeader; u8 unk17; /* 0x18 */ u32 moveIndex; u16 unk1C; @@ -78,7 +79,9 @@ extern u8 *gUnknown_80D4970[]; extern u8 gUnknown_80DC428[]; extern u8 gUnknown_80DC438[]; extern u8 gUnknown_80DC448[]; +extern u8 gUnknown_202E128[]; +bool8 sub_8021178(void); void CreateGulpinShopMenu(void); extern void sub_8014248(const u8 *, u32, u32, const struct MenuItem *, void *, u32, u32, struct OpenedFile **, u32); extern void sub_80141B4(const u8 *, u32, struct OpenedFile **, u32); @@ -120,6 +123,18 @@ extern void sub_80209FC(void); extern void sub_8020A34(void); extern void sub_801FDC0(void); extern void sub_801FF28(void); +u32 sub_8023A94(u32); +void sub_8023C60(void); +extern s16 sub_8023B44(void); +extern u32 sub_80244E4(void); +extern u32 sub_801BF48(void); +extern void sub_802453C(void); +extern void sub_801BF98(void); +extern u32 sub_801F520(u32); +extern void sub_801F63C(void); +extern u16 sub_801F5B4(void); +extern void sub_801F8D0(void); +extern u32 sub_801F890(void); extern void CreateGulpinLinkMenu(void); extern void sub_802069C(void); @@ -576,7 +591,7 @@ void CreateGulpinLinkMenu(void) MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); - if(gUnknown_203B27C->unk16) + if(gUnknown_203B27C->isTeamLeader) { if(IsMoveSet(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) { @@ -679,3 +694,252 @@ void sub_8020950(void) gUnknown_203B27C->unk7C[loopMax].text = NULL; gUnknown_203B27C->unk7C[loopMax].menuAction = 1; } + +extern s32 sub_80144A4(s32 *); + +void sub_80209AC(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + gUnknown_203B27C->unk6C = temp; + switch(temp) + { + case 2: + sub_801FDA8(0xe); + break; + case 0xB: + sub_801FDA8(0x8); + break; + case 1: + sub_801FDA8(0xC); + break; + } + } +} + +void sub_80209FC(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 0x10: + sub_801FDA8(0xe); + break; + case 0x11: + case 1: + sub_801FDA8(0xC); + break; + } + } +} + +void sub_8020A34(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 0xD: + sub_801FDA8(0x9); + break; + case 0xE: + sub_801FDA8(10); + break; + case 0xF: + sub_801FDA8(0xb); + break; + case 1: + sub_801FDA8(0x1); + break; + } + } +} + +void sub_8020A80(void) +{ + switch(sub_8023A94(1)) + { + case 3: + gUnknown_203B27C->speciesNum = sub_8023B44(); + gUnknown_203B27C->pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B27C->speciesNum]; + gUnknown_203B27C->isTeamLeader = gUnknown_203B27C->pokeStruct->isTeamLeader; + PrintPokeNameToBuffer(gUnknown_202E128, gUnknown_203B27C->pokeStruct); + sub_801FDA8(0x11); + break; + case 4: + gUnknown_203B27C->speciesNum = sub_8023B44(); + gUnknown_203B27C->pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B27C->speciesNum]; + gUnknown_203B27C->isTeamLeader = gUnknown_203B27C->pokeStruct->isTeamLeader; + PrintPokeNameToBuffer(gUnknown_202E128, gUnknown_203B27C->pokeStruct); + sub_801FDA8(0x12); + break; + case 0: + case 1: + break; + case 2: + sub_8023C60(); + sub_801FDA8(7); + break; + } +} + +void sub_8020B38(void) +{ + s32 menuAction; + + menuAction = 0; + sub_8023A94(0); + if (!sub_8012FD8(&gUnknown_203B27C->unkCC)) { + sub_8013114(&gUnknown_203B27C->unkCC,&menuAction); + if (menuAction != 1) { + gUnknown_203B27C->unk70 = menuAction; + } + } + + switch(menuAction) + { + case 0x1: + case 0x11: + sub_801FDA8(0x10); + break; + case 0x3: + if(GetBaseSpeciesNoUnown(gUnknown_203B27C->pokeStruct->speciesNum) == MONSTER_DEOXYS_NORMAL) + { + sub_801FDA8(0x1C); + } + else if(sub_8021178()) + { + sub_801FDA8(0x1b); + } + else + { + sub_801FDA8(0x14); + } + break; + case 0x4: + sub_801FDA8(0x1e); + break; + case 0xB: + sub_801FDA8(0x12); + break; + case 0xC: + sub_801FDA8(0x13); + break; + } +} + +void sub_8020C2C(void) +{ + switch(sub_80244E4()) + { + case 2: + case 3: + sub_802453C(); + sub_801FDA8(0x10); + break; + case 0: + case 1: + break; + } +} + +void sub_8020C48(void) +{ + switch(sub_801BF48()) + { + case 2: + case 3: + sub_801BF98(); + sub_801FDA8(0x10); + break; + case 0: + case 1: + break; + } +} + +void sub_8020C64(void) +{ + switch(sub_801F520(1)) + { + case 3: + gUnknown_203B27C->unk1E = gUnknown_203B27C->unk1C = sub_801F5B4(); + sub_801FDA8(0x17); + break; + case 4: + gUnknown_203B27C->unk1E = gUnknown_203B27C->unk1C = sub_801F5B4(); + sub_801FDA8(0x18); + break; + case 2: + sub_801F63C(); + sub_801FDA8(0x10); + break; + } +} + +void sub_8020CC0(void) +{ + s32 menuAction; + s32 index; + struct Move *move; + + menuAction = 0; + sub_801F520(0); + if (!sub_8012FD8(&gUnknown_203B27C->unkCC)) { + sub_8013114(&gUnknown_203B27C->unkCC,&menuAction); + if (menuAction != 1) { + gUnknown_203B27C->unk74 = menuAction; + } + } + + switch(menuAction) + { + case 0x1: + case 0x11: + sub_801FDA8(0x16); + break; + case 0x3: + sub_801F63C(); + unk_CopyMoves4To8(gUnknown_203B27C->moves,gUnknown_203B27C->pokeStruct->moves); + for(index = 0; index < 8; index++) + { + move = &gUnknown_203B27C->moves[index]; + if(!(move->moveFlags & MOVE_FLAG_EXISTS)) + { + InitZeroedPPPokemonMove(move,gUnknown_203B27C->unk1E); + break; + } + } + if(index >= 4) + { + sub_801FDA8(0x1d); + } + else + { + sub_801FDA8(0x19); + } + break; + case 0xB: + sub_801FDA8(0x18); + break; + } +} + +void sub_8020D74(void) +{ + switch(sub_801F890()) + { + case 2: + case 3: + sub_801F8D0(); + sub_801FDA8(0x16); + break; + case 0: + case 1: + break; + } +} From 24b1c4baea1c46b06eb12dbdaafd2c2992d4d138 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 31 Jul 2023 11:36:39 -0700 Subject: [PATCH 21/26] more gulpin --- asm/code_801EE10_mid.s | 139 ----------------------------------------- include/gulpin_shop.h | 1 + src/gulpin_shop_1.c | 63 +++++++++++++++++++ 3 files changed, 64 insertions(+), 139 deletions(-) diff --git a/asm/code_801EE10_mid.s b/asm/code_801EE10_mid.s index 8e6c27093..eabca5930 100644 --- a/asm/code_801EE10_mid.s +++ b/asm/code_801EE10_mid.s @@ -5,145 +5,6 @@ .text - thumb_func_start sub_8020D90 -sub_8020D90: - push {lr} - bl sub_801E8C0 - cmp r0, 0x2 - beq _08020DBC - cmp r0, 0x2 - bcc _08020DC6 - cmp r0, 0x3 - bne _08020DC6 - bl GulpinIsNextMoveLinked - ldr r1, _08020DB8 - ldr r1, [r1] - strb r0, [r1, 0x14] - bl DestroyGulpinShop - movs r0, 0x1A - bl sub_801FDA8 - b _08020DC6 - .align 2, 0 -_08020DB8: .4byte gUnknown_203B27C -_08020DBC: - bl DestroyGulpinShop - movs r0, 0x10 - bl sub_801FDA8 -_08020DC6: - pop {r0} - bx r0 - thumb_func_end sub_8020D90 - - thumb_func_start sub_8020DCC -sub_8020DCC: - push {lr} - movs r0, 0x1 - bl sub_801EF38 - cmp r0, 0x4 - bhi _08020EAA - lsls r0, 2 - ldr r1, _08020DE4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08020DE4: .4byte _08020DE8 - .align 2, 0 -_08020DE8: - .4byte _08020EAA - .4byte _08020E98 - .4byte _08020E64 - .4byte _08020DFC - .4byte _08020E30 -_08020DFC: - bl sub_801F1A4 - lsls r0, 24 - cmp r0, 0 - beq _08020E0E - ldr r0, _08020E2C - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x15] -_08020E0E: - bl sub_801F194 - ldr r1, _08020E2C - ldr r2, [r1] - str r0, [r2, 0x18] - lsls r0, 3 - adds r0, r2, r0 - ldrh r1, [r0, 0x26] - strh r1, [r2, 0x1C] - ldrh r0, [r0, 0x26] - strh r0, [r2, 0x20] - movs r0, 0x20 - bl sub_801FDA8 - b _08020EAA - .align 2, 0 -_08020E2C: .4byte gUnknown_203B27C -_08020E30: - bl sub_801F1A4 - lsls r0, 24 - cmp r0, 0 - beq _08020E42 - ldr r0, _08020E60 - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x15] -_08020E42: - bl sub_801F194 - ldr r1, _08020E60 - ldr r2, [r1] - str r0, [r2, 0x18] - lsls r0, 3 - adds r0, r2, r0 - ldrh r1, [r0, 0x26] - strh r1, [r2, 0x1C] - ldrh r0, [r0, 0x26] - strh r0, [r2, 0x20] - movs r0, 0x21 - bl sub_801FDA8 - b _08020EAA - .align 2, 0 -_08020E60: .4byte gUnknown_203B27C -_08020E64: - bl sub_801F1A4 - lsls r0, 24 - cmp r0, 0 - beq _08020E76 - ldr r0, _08020E94 - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x15] -_08020E76: - bl sub_801F214 - ldr r0, _08020E94 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x24 - ldr r1, [r1, 0x10] - adds r1, 0x2C - bl sub_8094060 - movs r0, 0x10 - bl sub_801FDA8 - b _08020EAA - .align 2, 0 -_08020E94: .4byte gUnknown_203B27C -_08020E98: - bl sub_801F1A4 - lsls r0, 24 - cmp r0, 0 - beq _08020EAA - ldr r0, _08020EB0 - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x15] -_08020EAA: - pop {r0} - bx r0 - .align 2, 0 -_08020EB0: .4byte gUnknown_203B27C - thumb_func_end sub_8020DCC - thumb_func_start sub_8020EB4 sub_8020EB4: push {r4,lr} diff --git a/include/gulpin_shop.h b/include/gulpin_shop.h index be4b6adee..48ce06f20 100644 --- a/include/gulpin_shop.h +++ b/include/gulpin_shop.h @@ -33,5 +33,6 @@ struct GulpinShopWork u32 CreateGulpinShop(s32 isAsleep, s16 pokeSpecies, struct Move *moves); void DestroyGulpinShop(void); +bool8 GulpinIsNextMoveLinked(void); #endif diff --git a/src/gulpin_shop_1.c b/src/gulpin_shop_1.c index 9ba5d2b26..2b01c0d28 100644 --- a/src/gulpin_shop_1.c +++ b/src/gulpin_shop_1.c @@ -135,6 +135,11 @@ extern void sub_801F63C(void); extern u16 sub_801F5B4(void); extern void sub_801F8D0(void); extern u32 sub_801F890(void); +extern u32 sub_801E8C0(void); +extern u32 sub_801F194(void); +bool8 sub_801F1A4(void); +void sub_801F214(void); +extern u32 sub_801EF38(u32); extern void CreateGulpinLinkMenu(void); extern void sub_802069C(void); @@ -943,3 +948,61 @@ void sub_8020D74(void) break; } } + +void sub_8020D90(void) +{ + switch(sub_801E8C0()) + { + case 3: + gUnknown_203B27C->isNextMoveLinked = GulpinIsNextMoveLinked(); + DestroyGulpinShop(); + sub_801FDA8(0x1A); + break; + case 2: + DestroyGulpinShop(); + sub_801FDA8(0x10); + break; + case 0: + case 1: + break; + } +} + +void sub_8020DCC(void) +{ + switch(sub_801EF38(1)) { + case 3: + if (sub_801F1A4() != 0) { + gUnknown_203B27C->unk15 = 1; + } + gUnknown_203B27C->moveIndex = sub_801F194(); + gUnknown_203B27C->unk1C = gUnknown_203B27C->moves [gUnknown_203B27C->moveIndex].id; + gUnknown_203B27C->unk20 = gUnknown_203B27C->moves [gUnknown_203B27C->moveIndex].id; + sub_801FDA8(0x20); + break; + case 4: + if (sub_801F1A4() != 0) { + gUnknown_203B27C->unk15 = 1; + } + gUnknown_203B27C->moveIndex = sub_801F194(); + gUnknown_203B27C->unk1C = gUnknown_203B27C->moves [gUnknown_203B27C->moveIndex].id; + gUnknown_203B27C->unk20 = gUnknown_203B27C->moves [gUnknown_203B27C->moveIndex].id; + sub_801FDA8(0x21); + break; + case 2: + if (sub_801F1A4() != 0) { + gUnknown_203B27C->unk15 = 1; + } + sub_801F214(); + sub_8094060(gUnknown_203B27C->moves,gUnknown_203B27C->pokeStruct->moves); + sub_801FDA8(0x10); + break; + case 1: + if (sub_801F1A4() != 0) { + gUnknown_203B27C->unk15 = 1; + } + break; + case 0: + break; + } +} From 1477509009be329c927ae493eb8e7d7110a9b44f Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 31 Jul 2023 11:46:09 -0700 Subject: [PATCH 22/26] Matched sub_8020EB4 thanks to jiang --- asm/code_801EE10_mid.s | 232 ----------------------------------------- include/moves.h | 7 ++ src/gulpin_shop_1.c | 110 +++++++++++++++++++ 3 files changed, 117 insertions(+), 232 deletions(-) diff --git a/asm/code_801EE10_mid.s b/asm/code_801EE10_mid.s index eabca5930..354b583b3 100644 --- a/asm/code_801EE10_mid.s +++ b/asm/code_801EE10_mid.s @@ -5,238 +5,6 @@ .text - thumb_func_start sub_8020EB4 -sub_8020EB4: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_801EF38 - ldr r4, _08020EF8 - ldr r0, [r4] - adds r0, 0xCC - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _08020EE4 - ldr r0, [r4] - adds r0, 0xCC - mov r1, sp - bl sub_8013114 - ldr r1, [sp] - cmp r1, 0x1 - beq _08020EE4 - ldr r0, [r4] - str r1, [r0, 0x78] -_08020EE4: - ldr r0, [sp] - subs r0, 0x1 - cmp r0, 0x10 - bls _08020EEE - b _080210BE -_08020EEE: - lsls r0, 2 - ldr r1, _08020EFC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08020EF8: .4byte gUnknown_203B27C -_08020EFC: .4byte _08020F00 - .align 2, 0 -_08020F00: - .4byte _08021068 - .4byte _080210BE - .4byte _080210BE - .4byte _080210BE - .4byte _08020F44 - .4byte _08020F70 - .4byte _08020F8C - .4byte _08020FB8 - .4byte _08021034 - .4byte _08021074 - .4byte _080210B8 - .4byte _080210BE - .4byte _080210BE - .4byte _080210BE - .4byte _080210BE - .4byte _080210BE - .4byte _08021068 -_08020F44: - ldr r0, _08020F60 - ldr r1, [r0] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl ToggleSetMove - lsls r0, 24 - cmp r0, 0 - beq _08020F68 - ldr r0, _08020F64 - bl PlaySound - b _08021068 - .align 2, 0 -_08020F60: .4byte gUnknown_203B27C -_08020F64: .4byte 0x00000133 -_08020F68: - movs r0, 0x2 - bl PlayMenuSoundEffect - b _08021068 -_08020F70: - ldr r0, _08020F84 - bl PlaySound - ldr r0, _08020F88 - ldr r1, [r0] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl UnSetMove - b _08021068 - .align 2, 0 -_08020F84: .4byte 0x00000133 -_08020F88: .4byte gUnknown_203B27C -_08020F8C: - ldr r0, _08020FA8 - ldr r1, [r0] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl ToggleMoveEnabled - lsls r0, 24 - cmp r0, 0 - beq _08020FB0 - ldr r0, _08020FAC - bl PlaySound - b _08021068 - .align 2, 0 -_08020FA8: .4byte gUnknown_203B27C -_08020FAC: .4byte 0x00000133 -_08020FB0: - movs r0, 0x2 - bl PlayMenuSoundEffect - b _08021068 -_08020FB8: - ldr r0, _08020FD8 - ldr r0, [r0] - movs r1, 0x98 - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0x95 - bgt _08020FDC - movs r0, 0x2 - bl PlayMenuSoundEffect - movs r0, 0x3 - bl sub_801FDA8 - b _080210BE - .align 2, 0 -_08020FD8: .4byte gTeamInventory_203B460 -_08020FDC: - ldr r4, _08020FFC - ldr r1, [r4] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl sub_8093318 - lsls r0, 24 - cmp r0, 0 - bne _08021000 - movs r0, 0x2 - bl PlayMenuSoundEffect - movs r0, 0x4 - bl sub_801FDA8 - b _080210BE - .align 2, 0 -_08020FFC: .4byte gUnknown_203B27C -_08021000: - ldr r1, [r4] - ldrb r0, [r1, 0x15] - cmp r0, 0 - bne _08021016 - movs r0, 0x1 - strb r0, [r1, 0x15] - movs r0, 0xA6 - lsls r0, 1 - bl PlaySound - b _0802101C -_08021016: - ldr r0, _0802102C - bl PlaySound -_0802101C: - ldr r0, _08021030 - ldr r1, [r0] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl TryLinkMovesAfter - b _08021068 - .align 2, 0 -_0802102C: .4byte 0x00000133 -_08021030: .4byte gUnknown_203B27C -_08021034: - ldr r4, _08021054 - ldr r1, [r4] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl sub_809333C - lsls r0, 24 - cmp r0, 0 - bne _08021058 - movs r0, 0x2 - bl PlayMenuSoundEffect - movs r0, 0x5 - bl sub_801FDA8 - b _080210BE - .align 2, 0 -_08021054: .4byte gUnknown_203B27C -_08021058: - ldr r0, _08021070 - bl PlaySound - ldr r1, [r4] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl UnlinkMovesAfter -_08021068: - movs r0, 0x1F - bl sub_801FDA8 - b _080210BE - .align 2, 0 -_08021070: .4byte 0x00000133 -_08021074: - ldr r4, _08021094 - ldr r1, [r4] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl IsAnyMoveLinked - lsls r0, 24 - cmp r0, 0 - bne _08021098 - movs r0, 0x2 - bl PlayMenuSoundEffect - movs r0, 0x6 - bl sub_801FDA8 - b _080210BE - .align 2, 0 -_08021094: .4byte gUnknown_203B27C -_08021098: - ldr r0, _080210B4 - bl PlaySound - ldr r1, [r4] - ldr r0, [r1, 0x18] - adds r1, 0x24 - bl IsNextMoveLinked - ldr r1, [r4] - strb r0, [r1, 0x14] - movs r0, 0x22 - bl sub_801FDA8 - b _080210BE - .align 2, 0 -_080210B4: .4byte 0x00000133 -_080210B8: - movs r0, 0x21 - bl sub_801FDA8 -_080210BE: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8020EB4 - thumb_func_start sub_80210C8 sub_80210C8: push {lr} diff --git a/include/moves.h b/include/moves.h index 02c0d435b..5aed2b35d 100644 --- a/include/moves.h +++ b/include/moves.h @@ -59,5 +59,12 @@ void unk_LinkedSequencesToMoves8_v2(struct Move* moves, struct Move linkedSequen bool8 IsMoveSet(int index, struct Move* struct_ptr); bool8 IsMoveEnabled(int index, struct Move* struct_ptr); +bool8 TryLinkMovesAfter(int index, struct Move* moves); +bool8 UnlinkMovesAfter(int index, struct Move* moves); +bool8 ToggleSetMove(int index, struct Move* moves); +void UnSetMove(int index, struct Move* moves); +bool8 ToggleMoveEnabled(int index, struct Move* moves); +bool8 sub_8093318(int param_1, void* src_struct); +bool8 sub_809333C(int param_1, void* src_struct); #endif // GUARD_MOVES_H diff --git a/src/gulpin_shop_1.c b/src/gulpin_shop_1.c index 2b01c0d28..6057a176a 100644 --- a/src/gulpin_shop_1.c +++ b/src/gulpin_shop_1.c @@ -81,6 +81,8 @@ extern u8 gUnknown_80DC438[]; extern u8 gUnknown_80DC448[]; extern u8 gUnknown_202E128[]; +void PlayMenuSoundEffect(u32); +void PlaySound(u32); bool8 sub_8021178(void); void CreateGulpinShopMenu(void); extern void sub_8014248(const u8 *, u32, u32, const struct MenuItem *, void *, u32, u32, struct OpenedFile **, u32); @@ -1006,3 +1008,111 @@ void sub_8020DCC(void) break; } } + +void sub_8020EB4(void) { + s32 menuAction; + + menuAction = 0; + sub_801EF38(0); + if (!sub_8012FD8(&gUnknown_203B27C->unkCC)) { + sub_8013114(&gUnknown_203B27C->unkCC,&menuAction); + if (menuAction != 1) { + gUnknown_203B27C->unk78 = menuAction; + } + } + + switch(menuAction) + { + case 5: + if(ToggleSetMove(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) + { + PlaySound(0x133); + sub_801FDA8(0x1F); + } + else + { + PlayMenuSoundEffect(2); + sub_801FDA8(0x1F); + } + break; + case 6: + PlaySound(0x133); + UnSetMove(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves); + sub_801FDA8(0x1F); + break; + case 7: + if(ToggleMoveEnabled(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) + { + PlaySound(0x133); + asm(""); + } + else + { + PlayMenuSoundEffect(2); + } + sub_801FDA8(0x1F); + break; + case 8: + if(gTeamInventory_203B460->teamMoney < 0x96) + { + PlayMenuSoundEffect(2); + sub_801FDA8(0x3); + } + else if(!sub_8093318(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) + { + PlayMenuSoundEffect(2); + sub_801FDA8(0x4); + } + else + { + if(gUnknown_203B27C->unk15 == 0) + { + gUnknown_203B27C->unk15 = 1; + PlaySound(0x14c); + } + else + { + PlaySound(0x133); + } + TryLinkMovesAfter(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves); + sub_801FDA8(0x1F); + } + break; + case 9: + if(!sub_809333C(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) + { + PlayMenuSoundEffect(2); + sub_801FDA8(0x5); + } + else + { + PlaySound(0x133); + UnlinkMovesAfter(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves); + sub_801FDA8(0x1F); + } + break; + case 1: + case 0x11: + sub_801FDA8(0x1F); + break; + case 0xA: + if(!IsAnyMoveLinked(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) + { + PlayMenuSoundEffect(2); + sub_801FDA8(0x6); + } + else + { + PlaySound(0x133); + gUnknown_203B27C->isNextMoveLinked = IsNextMoveLinked(gUnknown_203B27C->moveIndex,gUnknown_203B27C->moves); + sub_801FDA8(0x22); + } + break; + case 0xB: + sub_801FDA8(0x21); + break; + case 0xC ... 0xF: + break; + } +} + From 2b4f39a2cc155fdb447e1e298c065e693812352c Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 31 Jul 2023 16:50:03 -0700 Subject: [PATCH 23/26] more decomp and add more ewram stuff --- asm/code_801EE10_mid.s | 424 --------------------------------------- ld_script.txt | 1 + src/code_8021774_pre.c | 137 +++++++++++++ src/credits.c | 6 +- src/felicity_bank.c | 4 +- src/gulpin_shop_1.c | 189 +++++++++++------ src/kangaskhan_storage.c | 5 +- src/kecleon_items_1.c | 30 +-- sym_ewram2.txt | 21 +- 9 files changed, 289 insertions(+), 528 deletions(-) create mode 100644 src/code_8021774_pre.c diff --git a/asm/code_801EE10_mid.s b/asm/code_801EE10_mid.s index 354b583b3..3b4477597 100644 --- a/asm/code_801EE10_mid.s +++ b/asm/code_801EE10_mid.s @@ -5,430 +5,6 @@ .text - thumb_func_start sub_80210C8 -sub_80210C8: - push {lr} - bl sub_801F890 - cmp r0, 0x1 - bls _080210E0 - cmp r0, 0x3 - bhi _080210E0 - bl sub_801F8D0 - movs r0, 0x1F - bl sub_801FDA8 -_080210E0: - pop {r0} - bx r0 - thumb_func_end sub_80210C8 - - thumb_func_start sub_80210E4 -sub_80210E4: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _0802112A - ldr r0, [sp] - cmp r0, 0x10 - beq _08021108 - cmp r0, 0x10 - bgt _08021102 - cmp r0, 0x1 - beq _08021124 - b _0802112A -_08021102: - cmp r0, 0x11 - beq _08021124 - b _0802112A -_08021108: - ldr r0, _08021120 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x24 - ldr r1, [r1, 0x18] - bl RemoveLinkSequenceFromMoves8 - movs r0, 0x23 - bl sub_801FDA8 - b _0802112A - .align 2, 0 -_08021120: .4byte gUnknown_203B27C -_08021124: - movs r0, 0x1F - bl sub_801FDA8 -_0802112A: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_80210E4 - - thumb_func_start sub_8021130 -sub_8021130: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _08021148 - ldr r0, _08021150 - ldr r0, [r0] - ldr r0, [r0, 0x8] - bl sub_801FDA8 -_08021148: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_08021150: .4byte gUnknown_203B27C - thumb_func_end sub_8021130 - - thumb_func_start sub_8021154 -sub_8021154: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0x4 - bne _0802116C - ldr r0, _08021174 - ldr r0, [r0] - ldr r0, [r0, 0x8] - bl sub_801FDA8 -_0802116C: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_08021174: .4byte gUnknown_203B27C - thumb_func_end sub_8021154 - - thumb_func_start sub_8021178 -sub_8021178: - push {lr} - mov r12, r4 - ldr r4, _08021198 - add sp, r4 - mov r4, r12 - ldr r0, _0802119C - ldr r0, [r0] - ldr r1, [r0, 0x10] - mov r0, sp - bl sub_808E218 - cmp r0, 0 - beq _080211A0 - movs r0, 0 - b _080211A2 - .align 2, 0 -_08021198: .4byte 0xfffffcc0 -_0802119C: .4byte gUnknown_203B27C -_080211A0: - movs r0, 0x1 -_080211A2: - movs r3, 0xD0 - lsls r3, 2 - add sp, r3 - pop {r1} - bx r1 - thumb_func_end sub_8021178 - - thumb_func_start sub_80211AC -sub_80211AC: - push {r4-r6,lr} - adds r4, r0, 0 - adds r6, r1, 0 - bl sub_8021700 - lsls r0, 24 - cmp r0, 0 - beq _080211C0 - movs r0, 0 - b _08021258 -_080211C0: - ldr r5, _08021260 - movs r0, 0xE0 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r5] - str r4, [r0, 0x3C] - str r6, [r0, 0x74] - lsls r1, r6, 1 - adds r1, r6 - lsls r1, 3 - adds r1, 0x7C - adds r1, r0, r1 - str r1, [r0, 0x78] - adds r0, 0x7C - bl sub_8006518 - ldr r1, [r5] - ldr r2, [r1, 0x74] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r1, 0x7C - ldr r0, _08021264 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldr r0, [r5] - ldr r1, [r0, 0x78] - adds r0, 0xDC - str r0, [r1, 0x14] - bl ResetUnusedInputStruct - ldr r0, [r5] - adds r0, 0x7C - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r4, [r5] - adds r4, 0x40 - bl sub_8021664 - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0xA - adds r3, r6, 0 - bl sub_8013818 - ldr r0, _08021268 - ldr r2, [r5] - ldr r1, [r0] - ldr r0, [r2, 0x3C] - cmp r1, r0 - bne _0802124E - ldr r0, _0802126C - ldrh r1, [r0] - adds r0, r2, 0 - adds r0, 0x58 - strh r1, [r0] - ldr r0, _08021270 - ldrh r0, [r0] - adds r1, r2, 0 - adds r1, 0x5E - strh r0, [r1] - adds r0, r2, 0 - adds r0, 0x40 - bl sub_8013984 -_0802124E: - bl sub_8021410 - bl sub_8021494 - movs r0, 0x1 -_08021258: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08021260: .4byte gUnknown_203B280 -_08021264: .4byte gUnknown_80DC47C -_08021268: .4byte gUnknown_203B284 -_0802126C: .4byte gUnknown_203B288 -_08021270: .4byte gUnknown_203B28A - thumb_func_end sub_80211AC - - thumb_func_start sub_8021274 -sub_8021274: - push {r4,lr} - lsls r0, 24 - cmp r0, 0 - bne _08021290 - ldr r0, _0802128C - ldr r0, [r0] - adds r0, 0x40 - bl sub_8013660 - movs r0, 0 - b _08021326 - .align 2, 0 -_0802128C: .4byte gUnknown_203B280 -_08021290: - ldr r4, _080212A8 - ldr r0, [r4] - adds r0, 0x40 - bl GetKeyPress - cmp r0, 0x2 - beq _080212B2 - cmp r0, 0x2 - bgt _080212AC - cmp r0, 0x1 - beq _080212BC - b _08021300 - .align 2, 0 -_080212A8: .4byte gUnknown_203B280 -_080212AC: - cmp r0, 0x4 - beq _080212F6 - b _08021300 -_080212B2: - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - b _08021326 -_080212BC: - ldr r0, [r4] - ldr r0, [r0, 0x3C] - cmp r0, 0x2 - bne _080212EC - bl sub_802132C - lsls r0, 24 - lsrs r0, 24 - bl GetFriendAreaPrice - ldr r1, _080212E8 - ldr r1, [r1] - movs r2, 0x98 - lsls r2, 2 - adds r1, r2 - ldr r1, [r1] - cmp r0, r1 - ble _080212EC - movs r0, 0x2 - bl PlayMenuSoundEffect - b _080212F2 - .align 2, 0 -_080212E8: .4byte gTeamInventory_203B460 -_080212EC: - movs r0, 0 - bl PlayMenuSoundEffect -_080212F2: - movs r0, 0x3 - b _08021326 -_080212F6: - movs r0, 0x4 - bl PlayMenuSoundEffect - movs r0, 0x4 - b _08021326 -_08021300: - ldr r0, _08021318 - ldr r0, [r0] - adds r0, 0x40 - movs r1, 0x1 - bl sub_80138B8 - lsls r0, 24 - cmp r0, 0 - bne _0802131C - movs r0, 0 - b _08021326 - .align 2, 0 -_08021318: .4byte gUnknown_203B280 -_0802131C: - bl sub_8021410 - bl sub_8021494 - movs r0, 0x1 -_08021326: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8021274 - - thumb_func_start sub_802132C -sub_802132C: - ldr r0, _08021350 - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x5E - movs r3, 0 - ldrsh r1, [r0, r3] - subs r0, 0x2 - movs r3, 0 - ldrsh r0, [r0, r3] - muls r0, r1 - adds r1, r2, 0 - adds r1, 0x58 - movs r3, 0 - ldrsh r1, [r1, r3] - adds r0, r1 - adds r0, r2, r0 - ldrb r0, [r0] - bx lr - .align 2, 0 -_08021350: .4byte gUnknown_203B280 - thumb_func_end sub_802132C - - thumb_func_start sub_8021354 -sub_8021354: - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl ResetUnusedInputStruct - ldr r5, _0802139C - ldr r0, [r5] - adds r0, 0x7C - movs r1, 0 - movs r2, 0 - bl sub_800641C - bl sub_8021664 - adds r1, r0, 0 - ldr r0, [r5] - adds r2, r0, 0 - adds r2, 0x62 - strh r1, [r2] - adds r0, 0x40 - bl sub_8013984 - bl sub_8021410 - bl sub_8021494 - cmp r4, 0 - beq _08021396 - ldr r0, [r5] - adds r0, 0x40 - bl AddMenuCursorSprite -_08021396: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802139C: .4byte gUnknown_203B280 - thumb_func_end sub_8021354 - - thumb_func_start sub_80213A0 -sub_80213A0: - push {r4,r5,lr} - ldr r4, _080213FC - ldr r2, [r4] - cmp r2, 0 - beq _080213F4 - ldr r1, _08021400 - ldr r0, [r2, 0x3C] - str r0, [r1] - ldr r1, _08021404 - adds r0, r2, 0 - adds r0, 0x58 - ldrh r0, [r0] - strh r0, [r1] - ldr r1, _08021408 - adds r0, r2, 0 - adds r0, 0x5E - ldrh r0, [r0] - strh r0, [r1] - ldr r0, [r2, 0x74] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x7C - ldr r0, _0802140C - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x7C - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_080213F4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080213FC: .4byte gUnknown_203B280 -_08021400: .4byte gUnknown_203B284 -_08021404: .4byte gUnknown_203B288 -_08021408: .4byte gUnknown_203B28A -_0802140C: .4byte gUnknown_80DC464 - thumb_func_end sub_80213A0 - thumb_func_start sub_8021410 sub_8021410: push {r4,lr} diff --git a/ld_script.txt b/ld_script.txt index 6ae54de5e..9c569a899 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -113,6 +113,7 @@ 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); diff --git a/src/code_8021774_pre.c b/src/code_8021774_pre.c new file mode 100644 index 000000000..f221a395e --- /dev/null +++ b/src/code_8021774_pre.c @@ -0,0 +1,137 @@ +#include "global.h" +#include "constants/friend_area.h" +#include "constants/input.h" +#include "friend_area.h" +#include "input.h" +#include "memory.h" +#include "text.h" +#include "item.h" +#include "team_inventory.h" +#include "menu_input.h" + +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_8013818(struct MenuInputStruct*, u32, u32, u32); +extern void sub_8013984(struct MenuInputStruct *); +extern u8 sub_80138B8(struct MenuInputStruct*, u32); +extern void sub_8013660(struct MenuInputStruct*); +extern u8 sub_802132C(void); +extern void sub_8021410(void); +extern void sub_8021494(void); +extern void PlayMenuSoundEffect(u32); + +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(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->unk3C == 2) && (GetFriendAreaPrice(sub_802132C()) > gTeamInventory_203B460->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(u8 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/credits.c b/src/credits.c index 8f1893797..3a69a2c91 100644 --- a/src/credits.c +++ b/src/credits.c @@ -28,8 +28,8 @@ struct CreditsData /* 0x8 */ u8 *text; }; -extern struct unkCreditsStruct_203B340 *gUnknown_203B340; -extern struct unkCreditsStruct_203B344 *gUnknown_203B344; +EWRAM_DATA_2 struct unkCreditsStruct_203B340 *gUnknown_203B340 = {0}; +EWRAM_DATA_2 struct unkCreditsStruct_203B344 *gUnknown_203B344 = {0}; extern struct UnkTextStruct2 gUnknown_80E4A10; extern struct UnkTextStruct2 gUnknown_80E4A28; @@ -244,4 +244,4 @@ void sub_8035758(void) MemoryFree(gUnknown_203B344); gUnknown_203B344 = NULL; } -} \ No newline at end of file +} diff --git a/src/felicity_bank.c b/src/felicity_bank.c index 3332384e8..475ba9b9f 100644 --- a/src/felicity_bank.c +++ b/src/felicity_bank.c @@ -8,6 +8,8 @@ #include "text.h" #include "menu_input.h" +EWRAM_DATA_2 struct FelicityBankWork *gFelicityBankWork = {0}; + extern u32 gUnknown_202DE30; extern u8 gUnknown_202E1C8[]; extern u8 gUnknown_202E5D8[]; @@ -421,4 +423,4 @@ void DrawTeamMoneyBox(u32 param_1) xxx_call_draw_string(6, 0, &gUnknown_80DB738, param_1, 0); // Money sub_8012BC4(42, 12, gTeamInventory_203B460->teamMoney, 5, 5, param_1); sub_80073E0(param_1); -} \ No newline at end of file +} diff --git a/src/gulpin_shop_1.c b/src/gulpin_shop_1.c index 6057a176a..42fbf746d 100644 --- a/src/gulpin_shop_1.c +++ b/src/gulpin_shop_1.c @@ -20,27 +20,25 @@ struct unkStruct_203B27C /* 0xC */ s16 speciesNum; /* 0x10 */ struct PokemonStruct *pokeStruct; /* 0x14 */ bool8 isNextMoveLinked; - u8 unk15; - u8 isTeamLeader; - u8 unk17; + bool8 unk15; + /* 0x16 */ bool8 isTeamLeader; /* 0x18 */ u32 moveIndex; + // Group of move ids but not sure purpose just yet... u16 unk1C; u16 unk1E; u16 unk20; - u16 fill22; - /* 0x24 */ struct Move moves[4]; - u8 fill44[0x20]; - /* 0x64 */ u16 sequenceMoveIDs[4]; - u32 unk6C; - u32 unk70; - u32 unk74; - u32 unk78; + /* 0x24 */ struct Move moves[MAX_MON_MOVES * 2]; + /* 0x64 */ u16 sequenceMoveIDs[MAX_MON_MOVES]; + /* 0x6C */ u32 menuAction1; + /* 0x70 */ u32 menuAction2; + /* 0x74 */ u32 menuAction3; + /* 0x78 */ u32 menuAction4; struct MenuItem unk7C[8]; u16 unkBC[8]; struct MenuStruct unkCC; u8 fill11C[0x16C - 0x11C]; - struct OpenedFile *unk16C; - u8 *unk170; + /* 0x16C */ struct OpenedFile *faceFile; + /* 0x170 */ u8 *faceData; u16 unk174; u16 unk176; u8 unk178; @@ -50,7 +48,7 @@ struct unkStruct_203B27C struct UnkTextStruct2 unk180[4]; }; -extern struct unkStruct_203B27C *gUnknown_203B27C; +EWRAM_DATA_2 struct unkStruct_203B27C *gUnknown_203B27C = {0}; extern u8 gAvailablePokemonNames[]; extern u8 gUnknown_202DFE8[]; @@ -64,6 +62,10 @@ extern struct UnkTextStruct2 gUnknown_80DC34C; extern struct UnkTextStruct2 gUnknown_80DC37C; extern const u8 *gGulpinDialogue[2][25]; +extern u8 gUnknown_80DC3D8[]; +extern u8 gUnknown_80DC3E0[]; +extern u8 gUnknown_80DC3E8[]; +extern u8 gUnknown_80DC3F4[]; extern u8 gUnknown_80DC394[]; extern u8 gGulpinProceed[]; extern u8 gGulpinInfo[]; @@ -81,6 +83,7 @@ extern u8 gUnknown_80DC438[]; extern u8 gUnknown_80DC448[]; extern u8 gUnknown_202E128[]; +extern s32 sub_80144A4(s32 *); void PlayMenuSoundEffect(u32); void PlaySound(u32); bool8 sub_8021178(void); @@ -155,11 +158,11 @@ bool8 sub_801FB50(bool32 isAsleep) ResetUnusedInputStruct(); sub_800641C(0,1,1); gUnknown_203B27C = MemoryAlloc(sizeof(struct unkStruct_203B27C), 0x8); - gUnknown_203B27C->unk70 = 0; - gUnknown_203B27C->unk74 = 0; - gUnknown_203B27C->unk78 = 0; + gUnknown_203B27C->menuAction2 = 0; + gUnknown_203B27C->menuAction3 = 0; + gUnknown_203B27C->menuAction4 = 0; gUnknown_203B27C->isAsleep = isAsleep; - gUnknown_203B27C->unk15 = 0; + gUnknown_203B27C->unk15 = FALSE; CopyYellowMonsterNametoBuffer(gUnknown_202E5D8,MONSTER_GULPIN); CopyYellowMonsterNametoBuffer(gUnknown_202E1C8,MONSTER_GULPIN); name = GetMonSpecies(MONSTER_GULPIN); @@ -169,11 +172,11 @@ bool8 sub_801FB50(bool32 isAsleep) gUnknown_203B27C->unk17C = NULL; } else { - gUnknown_203B27C->unk17C = &gUnknown_203B27C->unk16C; + gUnknown_203B27C->unk17C = &gUnknown_203B27C->faceFile; } faceFile = GetDialogueSpriteDataPtr(MONSTER_GULPIN); - gUnknown_203B27C->unk16C = faceFile; - gUnknown_203B27C->unk170 = faceFile->data; + gUnknown_203B27C->faceFile = faceFile; + gUnknown_203B27C->faceData = faceFile->data; gUnknown_203B27C->unk178 = 0; gUnknown_203B27C->unk179 = 0; gUnknown_203B27C->unk17A = 0; @@ -239,7 +242,7 @@ u32 sub_801FC40(void) sub_80210E4(); break; case 0xd: - if (gUnknown_203B27C->unk15 == 1) { + if (gUnknown_203B27C->unk15 == TRUE) { gTeamInventory_203B460->teamMoney -= 150; } return 3; @@ -254,7 +257,7 @@ void sub_801FD7C(void) { if(gUnknown_203B27C) { - CloseFile(gUnknown_203B27C->unk16C); + CloseFile(gUnknown_203B27C->faceFile); MemoryFree(gUnknown_203B27C); gUnknown_203B27C = NULL; } @@ -322,15 +325,15 @@ void sub_801FF28(void) switch(gUnknown_203B27C->state) { case 0: - gUnknown_203B27C->unk6C = 2; + gUnknown_203B27C->menuAction1 = 2; CreateGulpinShopMenu(); gUnknown_203B27C->fallbackState = 2; - sub_8014248(gGulpinDialogue[gUnknown_203B27C->isAsleep][0],0,gUnknown_203B27C->unk6C,gUnknown_203B27C->unk7C,gUnknown_203B27C->unkBC,4,0,gUnknown_203B27C->unk17C,0xc); + sub_8014248(gGulpinDialogue[gUnknown_203B27C->isAsleep][0],0,gUnknown_203B27C->menuAction1,gUnknown_203B27C->unk7C,gUnknown_203B27C->unkBC,4,0,gUnknown_203B27C->unk17C,0xc); break; case 1: CreateGulpinShopMenu(); gUnknown_203B27C->fallbackState = 2; - sub_8014248(gGulpinDialogue[gUnknown_203B27C->isAsleep][1],0,gUnknown_203B27C->unk6C,gUnknown_203B27C->unk7C,gUnknown_203B27C->unkBC,4,0,gUnknown_203B27C->unk17C,0xc); + sub_8014248(gGulpinDialogue[gUnknown_203B27C->isAsleep][1],0,gUnknown_203B27C->menuAction1,gUnknown_203B27C->unk7C,gUnknown_203B27C->unkBC,4,0,gUnknown_203B27C->unk17C,0xc); break; case 2: DrawTeamMoneyBox(3); @@ -391,7 +394,7 @@ void sub_801FF28(void) break; case 0x11: sub_8023DA4(); - sub_8012D60(&gUnknown_203B27C->unkCC,gUnknown_203B27C->unk7C,0,gUnknown_203B27C->unkBC,gUnknown_203B27C->unk70,2); + sub_8012D60(&gUnknown_203B27C->unkCC,gUnknown_203B27C->unk7C,0,gUnknown_203B27C->unkBC,gUnknown_203B27C->menuAction2,2); break; case 0x12: sub_8024458(gUnknown_203B27C->speciesNum,2); @@ -411,7 +414,7 @@ void sub_801FF28(void) break; case 0x17: sub_801F700(); - sub_8012D60(&gUnknown_203B27C->unkCC,gUnknown_203B27C->unk7C,0,gUnknown_203B27C->unkBC,gUnknown_203B27C->unk74,2); + sub_8012D60(&gUnknown_203B27C->unkCC,gUnknown_203B27C->unk7C,0,gUnknown_203B27C->unkBC,gUnknown_203B27C->menuAction3,2); break; case 0x18: gUnknown_203B27C->sequenceMoveIDs[0] = gUnknown_203B27C->unk1C; @@ -464,7 +467,7 @@ void sub_801FF28(void) break; case 0x20: sub_801F280(0); - sub_8012D60(&gUnknown_203B27C->unkCC,gUnknown_203B27C->unk7C,0,gUnknown_203B27C->unkBC,gUnknown_203B27C->unk78,2); + sub_8012D60(&gUnknown_203B27C->unkCC,gUnknown_203B27C->unk7C,0,gUnknown_203B27C->unkBC,gUnknown_203B27C->menuAction4,2); break; case 0x21: GetLinkedSequence(gUnknown_203B27C->moveIndex,gUnknown_203B27C->moves,gUnknown_203B27C->sequenceMoveIDs); @@ -514,12 +517,6 @@ void CreateGulpinShopMenu(void) gUnknown_203B27C->unk7C[loopMax].menuAction = 1; } -extern u8 gUnknown_80DC3D8[]; -extern u8 gUnknown_80DC3E0[]; -extern u8 gUnknown_80DC3E8[]; -extern u8 gUnknown_80DC3F4[]; -extern u8 *gUnknown_80D4970[]; - void sub_80205D0(void) { s32 loopMax; @@ -548,12 +545,12 @@ void sub_80205D0(void) gUnknown_203B27C->unk7C[loopMax].menuAction = 1; for (i = 0; i < loopMax; i++) { - if (gUnknown_203B27C->unkBC[i] == 0 && gUnknown_203B27C->unk7C[i].menuAction == gUnknown_203B27C->unk70) + if (gUnknown_203B27C->unkBC[i] == 0 && gUnknown_203B27C->unk7C[i].menuAction == gUnknown_203B27C->menuAction2) return; } for (i = 0; i < loopMax; i++) { if (gUnknown_203B27C->unkBC[i] == 0) { - gUnknown_203B27C->unk70 = gUnknown_203B27C->unk7C[i].menuAction; + gUnknown_203B27C->menuAction2 = gUnknown_203B27C->unk7C[i].menuAction; break; } } @@ -579,12 +576,12 @@ void sub_802069C(void) gUnknown_203B27C->unk7C[loopMax].menuAction = 1; for (i = 0; i < loopMax; i++) { - if (gUnknown_203B27C->unkBC[i] == 0 && gUnknown_203B27C->unk7C[i].menuAction == gUnknown_203B27C->unk74) + if (gUnknown_203B27C->unkBC[i] == 0 && gUnknown_203B27C->unk7C[i].menuAction == gUnknown_203B27C->menuAction3) return; } for (i = 0; i < loopMax; i++) { if (gUnknown_203B27C->unkBC[i] == 0) { - gUnknown_203B27C->unk74 = gUnknown_203B27C->unk7C[i].menuAction; + gUnknown_203B27C->menuAction3 = gUnknown_203B27C->unk7C[i].menuAction; break; } } @@ -645,12 +642,12 @@ void CreateGulpinLinkMenu(void) gUnknown_203B27C->unk7C[loopMax].menuAction = 1; for (i = 0; i < loopMax; i++) { - if (gUnknown_203B27C->unkBC[i] == 0 && gUnknown_203B27C->unk7C[i].menuAction == gUnknown_203B27C->unk78) + if (gUnknown_203B27C->unkBC[i] == 0 && gUnknown_203B27C->unk7C[i].menuAction == gUnknown_203B27C->menuAction4) return; } for (i = 0; i < loopMax; i++) { if (gUnknown_203B27C->unkBC[i] == 0) { - gUnknown_203B27C->unk78 = gUnknown_203B27C->unk7C[i].menuAction; + gUnknown_203B27C->menuAction4 = gUnknown_203B27C->unk7C[i].menuAction; break; } } @@ -702,15 +699,13 @@ void sub_8020950(void) gUnknown_203B27C->unk7C[loopMax].menuAction = 1; } -extern s32 sub_80144A4(s32 *); - void sub_80209AC(void) { - s32 temp; - if(sub_80144A4(&temp) == 0) + s32 menuAciton; + if(sub_80144A4(&menuAciton) == 0) { - gUnknown_203B27C->unk6C = temp; - switch(temp) + gUnknown_203B27C->menuAction1 = menuAciton; + switch(menuAciton) { case 2: sub_801FDA8(0xe); @@ -727,10 +722,10 @@ void sub_80209AC(void) void sub_80209FC(void) { - s32 temp; - if(sub_80144A4(&temp) == 0) + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) { - switch(temp) + switch(menuAction) { case 0x10: sub_801FDA8(0xe); @@ -745,10 +740,10 @@ void sub_80209FC(void) void sub_8020A34(void) { - s32 temp; - if(sub_80144A4(&temp) == 0) + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) { - switch(temp) + switch(menuAction) { case 0xD: sub_801FDA8(0x9); @@ -803,7 +798,7 @@ void sub_8020B38(void) if (!sub_8012FD8(&gUnknown_203B27C->unkCC)) { sub_8013114(&gUnknown_203B27C->unkCC,&menuAction); if (menuAction != 1) { - gUnknown_203B27C->unk70 = menuAction; + gUnknown_203B27C->menuAction2 = menuAction; } } @@ -899,7 +894,7 @@ void sub_8020CC0(void) if (!sub_8012FD8(&gUnknown_203B27C->unkCC)) { sub_8013114(&gUnknown_203B27C->unkCC,&menuAction); if (menuAction != 1) { - gUnknown_203B27C->unk74 = menuAction; + gUnknown_203B27C->menuAction3 = menuAction; } } @@ -912,7 +907,7 @@ void sub_8020CC0(void) case 0x3: sub_801F63C(); unk_CopyMoves4To8(gUnknown_203B27C->moves,gUnknown_203B27C->pokeStruct->moves); - for(index = 0; index < 8; index++) + for(index = 0; index < MAX_MON_MOVES * 2; index++) { move = &gUnknown_203B27C->moves[index]; if(!(move->moveFlags & MOVE_FLAG_EXISTS)) @@ -921,7 +916,7 @@ void sub_8020CC0(void) break; } } - if(index >= 4) + if(index >= MAX_MON_MOVES) { sub_801FDA8(0x1d); } @@ -975,7 +970,7 @@ void sub_8020DCC(void) switch(sub_801EF38(1)) { case 3: if (sub_801F1A4() != 0) { - gUnknown_203B27C->unk15 = 1; + gUnknown_203B27C->unk15 = TRUE; } gUnknown_203B27C->moveIndex = sub_801F194(); gUnknown_203B27C->unk1C = gUnknown_203B27C->moves [gUnknown_203B27C->moveIndex].id; @@ -984,7 +979,7 @@ void sub_8020DCC(void) break; case 4: if (sub_801F1A4() != 0) { - gUnknown_203B27C->unk15 = 1; + gUnknown_203B27C->unk15 = TRUE; } gUnknown_203B27C->moveIndex = sub_801F194(); gUnknown_203B27C->unk1C = gUnknown_203B27C->moves [gUnknown_203B27C->moveIndex].id; @@ -993,7 +988,7 @@ void sub_8020DCC(void) break; case 2: if (sub_801F1A4() != 0) { - gUnknown_203B27C->unk15 = 1; + gUnknown_203B27C->unk15 = TRUE; } sub_801F214(); sub_8094060(gUnknown_203B27C->moves,gUnknown_203B27C->pokeStruct->moves); @@ -1001,7 +996,7 @@ void sub_8020DCC(void) break; case 1: if (sub_801F1A4() != 0) { - gUnknown_203B27C->unk15 = 1; + gUnknown_203B27C->unk15 = TRUE; } break; case 0: @@ -1009,7 +1004,8 @@ void sub_8020DCC(void) } } -void sub_8020EB4(void) { +void sub_8020EB4(void) +{ s32 menuAction; menuAction = 0; @@ -1017,7 +1013,7 @@ void sub_8020EB4(void) { if (!sub_8012FD8(&gUnknown_203B27C->unkCC)) { sub_8013114(&gUnknown_203B27C->unkCC,&menuAction); if (menuAction != 1) { - gUnknown_203B27C->unk78 = menuAction; + gUnknown_203B27C->menuAction4 = menuAction; } } @@ -1053,7 +1049,7 @@ void sub_8020EB4(void) { sub_801FDA8(0x1F); break; case 8: - if(gTeamInventory_203B460->teamMoney < 0x96) + if(gTeamInventory_203B460->teamMoney < 150) { PlayMenuSoundEffect(2); sub_801FDA8(0x3); @@ -1065,9 +1061,9 @@ void sub_8020EB4(void) { } else { - if(gUnknown_203B27C->unk15 == 0) + if(!gUnknown_203B27C->unk15) { - gUnknown_203B27C->unk15 = 1; + gUnknown_203B27C->unk15 = TRUE; PlaySound(0x14c); } else @@ -1116,3 +1112,64 @@ void sub_8020EB4(void) { } } +void sub_80210C8(void) +{ + switch(sub_801F890()) + { + case 2: + case 3: + sub_801F8D0(); + sub_801FDA8(0x1F); + break; + case 0: + case 1: + break; + } +} + +void sub_80210E4(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case 0x10: + RemoveLinkSequenceFromMoves8(gUnknown_203B27C->moves, gUnknown_203B27C->moveIndex); + sub_801FDA8(0x23); + break; + case 1: + case 0x11: + sub_801FDA8(0x1F); + break; + } + } +} + +void sub_8021130(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + sub_801FDA8(gUnknown_203B27C->fallbackState); + } +} + +void sub_8021154(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 4) + { + sub_801FDA8(gUnknown_203B27C->fallbackState); + } +} + +bool8 sub_8021178(void) +{ + s32 count; + struct unkStruct_808E218_arg local; + + count = sub_808E218(&local, gUnknown_203B27C->pokeStruct); + if(count == 0) return TRUE; + else return FALSE; +} diff --git a/src/kangaskhan_storage.c b/src/kangaskhan_storage.c index dbed54a80..5d009cce2 100644 --- a/src/kangaskhan_storage.c +++ b/src/kangaskhan_storage.c @@ -8,8 +8,9 @@ #include "menu_input.h" #include "team_inventory.h" -extern struct unkStruct_203B208 *gUnknown_203B208; -extern struct unkStruct_203B20C *gUnknown_203B20C; +EWRAM_DATA_2 struct unkStruct_203B208 *gUnknown_203B208 = {0}; +EWRAM_DATA_2 struct unkStruct_203B20C *gUnknown_203B20C = {0}; + extern struct UnkTextStruct2 gUnknown_80DB748; extern struct UnkTextStruct2 gUnknown_80DB778; extern struct UnkTextStruct2 gUnknown_80DB790; diff --git a/src/kecleon_items_1.c b/src/kecleon_items_1.c index d3af687f3..580f413ad 100644 --- a/src/kecleon_items_1.c +++ b/src/kecleon_items_1.c @@ -11,11 +11,26 @@ #include "menu_input.h" #include "text.h" +struct unkStruct_203B214 +{; + // size: 0xA0 + struct MenuInputStruct input; + u32 unk34; + struct UnkTextStruct2 *unk38; + struct UnkTextStruct2 unk3C[4]; + u8 unk9C[4]; +}; + + extern struct unkStruct_203B210 *gUnknown_203B210; +extern struct unkStruct_203B214 *gUnknown_203B214; extern u16 gUnknown_203B218; +extern struct unkStruct_203B214 *gUnknown_203B21C; extern u16 gUnknown_203B220; +extern struct unkStruct_203B224 *gUnknown_203B224; extern u16 gUnknown_203B228; extern u16 gUnknown_203B22A; + extern u8 gUnknown_80DB8E4[]; extern u8 gUnknown_80DB8EC[]; extern u8 gUnknown_80DB92C[]; @@ -59,21 +74,6 @@ extern s32 sub_801AEA8(void); s32 sub_801AE24(u32); -extern struct unkStruct_203B224 *gUnknown_203B224; - -struct unkStruct_203B214 -{; - // size: 0xA0 - struct MenuInputStruct input; - u32 unk34; - struct UnkTextStruct2 *unk38; - struct UnkTextStruct2 unk3C[4]; - u8 unk9C[4]; -}; - -extern struct unkStruct_203B214 *gUnknown_203B214; -extern struct unkStruct_203B214 *gUnknown_203B21C; - extern void sub_8013818(struct MenuInputStruct *, u32, u32, u32); extern u8 sub_8019FB0(void); diff --git a/sym_ewram2.txt b/sym_ewram2.txt index 398da6aa3..86b46b416 100644 --- a/sym_ewram2.txt +++ b/sym_ewram2.txt @@ -136,14 +136,8 @@ gUnknown_203B1FC: /* 203B1FC */ gUnknown_203B200: /* 203B200 */ .space 0x4 -gFelicityBankWork: /* 203B204 */ - .space 0x4 - -gUnknown_203B208: /* 203B208 */ - .space 0x4 - -gUnknown_203B20C: /* 203B20C */ - .space 0x4 +.include "src/felicity_bank.o" +.include "src/kangaskhan_storage.o" gUnknown_203B210: /* 203B210 */ .space 0x4 @@ -232,8 +226,7 @@ gUnknown_203B274: /* 203B274 */ gUnknown_203B278: /* 203B278 */ .space 0x4 -gUnknown_203B27C: /* 203B27C */ - .space 0x4 +.include "src/gulpin_shop_1.o" gUnknown_203B280: /* 203B280 */ .space 0x4 @@ -371,13 +364,7 @@ gUnknown_203B328: /* 203B328 */ .include "src/code_8031D70.o" .include "src/adventure_log.o" .include "src/friend_rescue.o" - -gUnknown_203B340: /* 203B340 */ - .space 0x4 - -gUnknown_203B344: /* 203B344 */ - .space 0x4 - +.include "src/credits.o" .include "src/main_menu.o" .include "src/trade_items_menu.o" .include "src/other_menus.o" From 9df54afd855617621ea8e19705debb0c20d7ad60 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 31 Jul 2023 17:29:50 -0700 Subject: [PATCH 24/26] move more menuinput funcs to header --- include/menu_input.h | 21 ++++++++++++++++++++- src/adventure_log.c | 20 ++++++++------------ src/code_801C620.c | 5 ----- src/code_801D760.c | 4 ---- src/code_801EE10.c | 2 -- src/code_801EE10_1.c | 3 --- src/code_801EE10_mid.c | 6 ------ src/code_8021774.c | 3 +-- src/code_8021774_pre.c | 4 ---- src/code_8023144.c | 5 ----- src/hints_menu.c | 6 ------ src/kecleon_items_1.c | 6 ------ src/makuhita_dojo_1.c | 7 +------ src/menu_input.c | 8 +------- src/menu_input_1.c | 17 +++++------------ src/options_menu.c | 3 --- src/personality_test.c | 5 ----- src/pokemon_news.c | 6 ------ src/wonder_mail_2_1.c | 6 ------ src/wonder_mail_2_mid.c | 5 ----- src/wonder_mail_3.c | 5 ----- src/wonder_mail_3_mid.c | 8 +------- src/wonder_mail_4.c | 5 ----- 23 files changed, 37 insertions(+), 123 deletions(-) diff --git a/include/menu_input.h b/include/menu_input.h index 55e021e1a..a23d14cf2 100644 --- a/include/menu_input.h +++ b/include/menu_input.h @@ -1,6 +1,6 @@ #include "menu.h" -u32 sub_8012A64(struct MenuInputStructSub *r0, u32 r1); +u32 sub_8012A64(struct MenuInputStructSub *r0, s32 r1); s32 GetKeyPress(struct MenuInputStruct *r0); s32 sub_8012AE8(void); void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 color, u32 param_6); @@ -17,3 +17,22 @@ bool8 sub_80130A8(struct MenuStruct *param_1); bool8 sub_8013114(struct MenuStruct *param_1, s32 *menuAction); void sub_801317C(struct MenuInputStructSub *param_1); void AddMenuCursorSprite(struct MenuInputStruct *param_1); +void sub_8013660(struct MenuInputStruct *param_1); +void UpdateMenuCursorSpriteCoords(struct MenuInputStruct *param_1); +void MoveMenuCursorDown(struct MenuInputStruct *param_1); +void sub_80136E0(struct MenuInputStruct *param_1, u8 param_2); +void MoveMenuCursorUp(struct MenuInputStruct *param_1); +void sub_8013744(struct MenuInputStruct *param_1, u8 param_2); +void sub_8013780(struct MenuInputStruct *param_1, s32 param_2); +s32 sub_80137A8(struct MenuInputStruct *param_1); +void sub_80137B0(struct MenuInputStruct *param_1, s32 param_2); +void sub_80137F8(struct MenuInputStruct *param_1, u32 param_2); +s32 sub_8013800(struct MenuInputStruct *param_1, s32 param_2); +void sub_8013818(struct MenuInputStruct *param_1, s32 param_2, u32 param_3, s32 param_4); +void sub_8013848(struct MenuInputStruct *param_1, s32 param_2, u32 param_3, s32 param_4); +void sub_8013878(struct MenuInputStruct *param_1, s32 param_2); +bool8 sub_80138B8(struct MenuInputStruct *param_1, bool8 param_2); +bool8 sub_8013938(struct MenuInputStruct *param_1); +void sub_8013984(struct MenuInputStruct * param_1); +void sub_8013A54(struct MenuInputStruct *param_1); +void sub_8013A7C(struct MenuInputStruct *param_1); diff --git a/src/adventure_log.c b/src/adventure_log.c index a586c1721..f3ca0fd1a 100644 --- a/src/adventure_log.c +++ b/src/adventure_log.c @@ -41,9 +41,6 @@ const u8 fill_adven[] = "pksdir0"; void sub_8032084(); void DisplayAdventureLog(); -extern void sub_8013818(void *, u32, u32, u32); -extern bool8 sub_8013938(struct MenuInputStruct *); -extern void sub_8013660(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); extern bool8 sub_8097710(u8); @@ -58,7 +55,6 @@ extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern void xxx_format_and_draw(u32, u32, const char *, u32, u32); const u8 *GetAdventureLogLine(u8 index); -extern s32 sub_8013800(void *, s32); extern u32 gUnknown_202DE30; u32 CreateAdventureLogScreen(u32 param_1) @@ -72,7 +68,7 @@ u32 CreateAdventureLogScreen(u32 param_1) ResetUnusedInputStruct(); sub_800641C(gAdventureLog->unk3C,1,1); - sub_8013818(gAdventureLog,0x20,8,param_1); + sub_8013818(&gAdventureLog->input,0x20,8,param_1); sub_8032084(); DisplayAdventureLog(); return 1; @@ -226,41 +222,41 @@ void DisplayAdventureLog(void) case 0xc: v1 = sub_80978B8(); gUnknown_202DE30 = (s16)v1; - xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); + xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); break; case 7: v2 = sub_8097880(); gUnknown_202DE30 = (s16)v2; - xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); + xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); break; case 0xb: v3 = sub_8097838(); gUnknown_202DE30 = (s16)v3; - xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); + xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); break; case 8: v4 = sub_80977B8(); gUnknown_202DE30 = v4; - xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); + xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); break; case 9: v5 = sub_80977F8(); gUnknown_202DE30 = v5; - xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); + xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); break; case 10: v6 = sub_8097870(); gUnknown_202DE30 = (s16)v6; // fallthrough default: - xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); + xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); break; } } else { // Draw the ?????????? across the row - xxx_call_draw_string(8, sub_8013800(gAdventureLog, counter), gAdventureLogTextPlaceholder, gAdventureLog->unk34, 0); + xxx_call_draw_string(8, sub_8013800(&gAdventureLog->input, counter), gAdventureLogTextPlaceholder, gAdventureLog->unk34, 0); } } sub_80073E0(gAdventureLog->unk34); diff --git a/src/code_801C620.c b/src/code_801C620.c index 1e9f575ce..175242df0 100644 --- a/src/code_801C620.c +++ b/src/code_801C620.c @@ -141,9 +141,7 @@ extern u8 *gUnknown_80D4970[]; void sub_8007B7C(s32, s32, s32, s32, s32); extern bool8 sub_801CF14(s32); -extern void sub_8013818(struct MenuInputStruct *, u32, u32, u32); extern u32 sub_801CE58(void); -extern void sub_8013984(struct MenuInputStruct *); extern void sub_801CC38(void); extern void sub_801CCD8(void); extern void sub_801CF94(void); @@ -160,12 +158,9 @@ extern s32 GetNumAvailableIQSkills(u8 *param_1, s32 pokeIQ); extern void sub_8013C68(u32 *); extern char * GetIQSkillName(u8 r0); extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); -extern s32 sub_8013800(struct MenuInputStruct *, s32); extern u32 sub_80095E4(s16, u32); extern void sub_801C440(void); extern void sub_801C4C8(void); -extern u8 sub_80138B8(struct MenuInputStruct *, u32); -extern void sub_8013660(struct MenuInputStruct *); extern bool8 HasNoAvailIQSkills(s16 species); extern u32 sub_801C674(void); extern void sub_801C6B4(void); diff --git a/src/code_801D760.c b/src/code_801D760.c index b17ff9671..4013c6019 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -29,13 +29,9 @@ extern struct unkStruct_203B258 *gUnknown_203B258; extern struct UnkTextStruct2 gUnknown_80DBF88; extern struct UnkTextStruct2 gUnknown_80DBF70; -extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); -extern void sub_8013878(struct MenuInputStruct *, s32); -extern u8 sub_80138B8(struct MenuInputStruct *, u32); extern void PlayMenuSoundEffect(u32); extern void sub_801DB54(); extern void sub_801DBD4(); -extern void sub_8013984(struct MenuInputStruct *); extern u32 sub_801BF48(void); extern void sub_801BF98(void); diff --git a/src/code_801EE10.c b/src/code_801EE10.c index fb0984c58..b230640c5 100644 --- a/src/code_801EE10.c +++ b/src/code_801EE10.c @@ -10,10 +10,8 @@ extern struct unkStruct_203B270 *gUnknown_203B270; extern struct UnkTextStruct2 gUnknown_80DC25C; extern struct UnkTextStruct2 gUnknown_80DC274; -extern void sub_8013818(void *, u32, u32, u32); u32 sub_8006544(u32 index); s32 sub_801F3F8(void); -void sub_8013780(struct MenuInputStruct*, u32); void sub_801F280(u32); u8 sub_801EE10(u32 param_1, s16 species, struct Move *moves, u32 param_4, u8 *text, u32 param_6) diff --git a/src/code_801EE10_1.c b/src/code_801EE10_1.c index a2e73ce94..5055072a6 100644 --- a/src/code_801EE10_1.c +++ b/src/code_801EE10_1.c @@ -47,14 +47,11 @@ extern struct unkStruct_3001B60 *gUnknown_3001B60; extern struct UnkTextStruct2 gUnknown_80DC9B0; extern struct UnkTextStruct2 gUnknown_80DC9C8; -extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); extern bool8 sub_80023E4(u32); extern void sub_808FF20(u32 *, struct PokemonStruct *, bool8); extern void CreatePokemonInfoTabScreen(u32, s16, u32 *, u32 *, u32); -extern bool8 sub_8013938(struct MenuInputStruct*); extern void sub_802452C(void); extern void PlayMenuSoundEffect(u32); -extern void sub_8013984(struct MenuInputStruct*); bool8 ComparePokemonNames(s16 a1, s16 a2); void sub_8024588(void); diff --git a/src/code_801EE10_mid.c b/src/code_801EE10_mid.c index 7e5c5f435..ba769476a 100644 --- a/src/code_801EE10_mid.c +++ b/src/code_801EE10_mid.c @@ -53,15 +53,10 @@ extern u8 gAvailablePokemonNames[]; extern u8 gUnknown_80DC310[]; extern u8 gUnknown_80DC2DC[]; -extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); -extern void sub_8013660(struct MenuInputStruct*); -extern u8 sub_80138B8(struct MenuInputStruct*, u32); extern void PlayMenuSoundEffect(u32); -extern void sub_8013984(struct MenuInputStruct*); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern s32 sub_8013800(struct MenuInputStruct*, s32); extern void ResetSprites(u32); extern void sub_80140B4(struct UnkTextStruct2 *); extern void sub_801F918(s32); @@ -71,7 +66,6 @@ extern void sub_801F930(void); extern void sub_801F9A4(void); int unk_MoveIDPrintMoveDescription(int a1, u16 moveID, int a3, struct subStruct_203B240** a4); extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); -extern bool8 sub_8013938(struct MenuInputStruct *); void sub_8013F84(void); diff --git a/src/code_8021774.c b/src/code_8021774.c index bf9071959..072e52ed7 100644 --- a/src/code_8021774.c +++ b/src/code_8021774.c @@ -7,6 +7,7 @@ #include "exclusive_pokemon.h" #include "friend_area.h" #include "code_800D090.h" +#include "menu_input.h" struct unkStruct_203B28C { @@ -55,8 +56,6 @@ void sub_8007A78(u32, u32, u32, u32, u32); extern void sub_8021878(void); extern void sub_8021894(void); -extern u32 sub_8012A64(struct MenuInputStructSub *, s32); -extern void sub_801317C(struct MenuInputStructSub *); extern void PlayMenuSoundEffect(u32); extern void sub_8021A60(void); void sub_8021820(void); diff --git a/src/code_8021774_pre.c b/src/code_8021774_pre.c index f221a395e..06ffe95e1 100644 --- a/src/code_8021774_pre.c +++ b/src/code_8021774_pre.c @@ -29,10 +29,6 @@ extern struct UnkTextStruct2 gUnknown_80DC464; u8 sub_8021700(u32 mode); s32 sub_8021664(void); -extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); -extern void sub_8013984(struct MenuInputStruct *); -extern u8 sub_80138B8(struct MenuInputStruct*, u32); -extern void sub_8013660(struct MenuInputStruct*); extern u8 sub_802132C(void); extern void sub_8021410(void); extern void sub_8021494(void); diff --git a/src/code_8023144.c b/src/code_8023144.c index 7d4df66b6..6f8a56a93 100644 --- a/src/code_8023144.c +++ b/src/code_8023144.c @@ -47,14 +47,10 @@ void sub_80237E0(void); extern bool8 sub_8098134(s32); extern void sub_8023730(void); extern u8 sub_8023704(u8); -extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); -extern void sub_8013984(struct MenuInputStruct*); extern void sub_8023420(void); extern void sub_80234BC(void); extern u32 sub_80236A4(void); -extern u8 sub_80138B8(struct MenuInputStruct*, u32); extern void PlayMenuSoundEffect(u32); -extern void sub_8013660(struct MenuInputStruct*); extern u8 gUnknown_80DC5EC[]; @@ -471,7 +467,6 @@ extern u8 gUnknown_80DC934[]; extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern s32 sub_8013800(void *, u32); bool8 HasRecruitedMon(s16 species_); extern u8 gUnknown_80DC93C[]; diff --git a/src/hints_menu.c b/src/hints_menu.c index 6f9ab0d3e..112e926ce 100644 --- a/src/hints_menu.c +++ b/src/hints_menu.c @@ -43,21 +43,15 @@ extern struct Hints gGameHints[MAX_HINTS]; extern u8 gUnknown_80DC0D4[MAX_HINTS]; extern void sub_801E714(void); -extern void sub_8013818(struct MenuInputStruct *, u32, u32, u32); -extern bool8 sub_8013938(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); extern void sub_801E714(void); extern void sub_801E76C(void); extern void DisplayChosenHint(void); extern void sub_80073E0(u32); extern void sub_80073B8(u32); -extern s32 sub_8013800(struct MenuInputStruct *, u32); extern void sub_8008C54(u32); void DrawHintSelectionMenu(void); void sub_801E594(void); -void sub_8013984(struct MenuInputStruct *); -extern u8 sub_80138B8(struct MenuInputStruct *, u32); -extern void sub_8013660(struct MenuInputStruct *); u32 sub_801E3F0(u32 r0) { diff --git a/src/kecleon_items_1.c b/src/kecleon_items_1.c index 580f413ad..f3e2151a6 100644 --- a/src/kecleon_items_1.c +++ b/src/kecleon_items_1.c @@ -61,7 +61,6 @@ extern void DrawTeamMoneyBox(u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern s32 sub_8013800(struct MenuInputStruct *, u32); extern void xxx_format_and_draw(u32, u32, u8 *, u32, u32); extern s32 sub_801AED0(s32); void sub_8007B7C(s32, s32, s32, s32, s32); @@ -74,13 +73,9 @@ extern s32 sub_801AEA8(void); s32 sub_801AE24(u32); -extern void sub_8013818(struct MenuInputStruct *, u32, u32, u32); - extern u8 sub_8019FB0(void); -extern u8 sub_80138B8(struct MenuInputStruct *, u32); extern void PlayMenuSoundEffect(u32); -extern void sub_8013660(struct MenuInputStruct *); extern struct UnkTextStruct2 gUnknown_80DB8CC; extern struct UnkTextStruct2 gUnknown_80DB8B4; @@ -90,7 +85,6 @@ extern struct UnkTextStruct2 gUnknown_80DB95C; extern const struct UnkTextStruct2 gUnknown_80DB914; extern void sub_801A430(void); extern void sub_801A4A4(void); -extern void sub_8013984(struct MenuInputStruct*); extern void sub_801A064(void); extern void sub_801A0D8(void); extern u8 sub_801A37C(void); diff --git a/src/makuhita_dojo_1.c b/src/makuhita_dojo_1.c index edb6f749d..485e945e8 100644 --- a/src/makuhita_dojo_1.c +++ b/src/makuhita_dojo_1.c @@ -60,17 +60,12 @@ extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern u8 sub_80A2740(s32 r0); extern s16 sub_80A2668(u32 r0); -extern s32 sub_8013800(void *, u32); extern bool8 IsMazeCompleted(s32); extern s32 sub_8030668(void); -extern void sub_8013984(void *); extern void sub_80304C8(); extern void DrawDojoCourseList(void); -extern u8 sub_80138B8(void *, u32); extern void PlayMenuSoundEffect(u32); -extern void sub_8013660(void *); -extern void sub_8013818(void *, u32, u32, u32); extern void sub_803053C(void); extern u8 sub_80306A4(void); extern s32 sub_80144A4(s32 *); @@ -353,4 +348,4 @@ s32 sub_8030668(void) bool8 sub_80306A4(void) { return FALSE; -} \ No newline at end of file +} diff --git a/src/menu_input.c b/src/menu_input.c index 56da64783..6f76eb017 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -17,19 +17,13 @@ extern struct UnkTextStruct1 gUnknown_2027370[4]; extern u8 gUnknown_80D4828[]; extern void PlayMenuSoundEffect(u32); -extern u32 sub_80137A8(struct MenuInputStruct *); -void MoveMenuCursorUp(struct MenuInputStruct *); -void MoveMenuCursorDown(struct MenuInputStruct *); extern void sub_80073B8(u32); extern s32 sub_8008ED0(const u8 *); extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); -extern s32 sub_8013800(struct MenuInputStruct *, s32); extern void sub_80073E0(u32); -extern void sub_8013660(struct MenuInputStruct *); void AddMenuCursorSprite_(struct MenuInputStruct *, u32); void sub_8012EBC(struct MenuStruct *param_1); extern void sub_8013134(struct MenuInputStruct *, u32, u32); -extern void sub_80137B0(struct MenuInputStruct *, u32); extern s16 sub_8009614(u32, u32); extern u32 ReturnIntFromChar2(u8); struct unkChar *GetCharacter(u32); @@ -40,7 +34,7 @@ extern void nullsub_34(struct MenuInputStructSub *r0); const u32 gDefaultMenuTextColors[] = { COLOR_WHITE_2, COLOR_RED, COLOR_RED }; -u32 sub_8012A64(struct MenuInputStructSub *r0, u32 r1) +u32 sub_8012A64(struct MenuInputStructSub *r0, s32 r1) { if(r0 == NULL) { diff --git a/src/menu_input_1.c b/src/menu_input_1.c index ae7f75242..f8eaebf3e 100644 --- a/src/menu_input_1.c +++ b/src/menu_input_1.c @@ -6,14 +6,6 @@ extern struct UnkTextStruct1 gUnknown_2027370[4]; extern void PlayMenuSoundEffect(u32); -extern void sub_8013A7C(struct MenuInputStruct *); -extern void sub_8013A54(struct MenuInputStruct *); -extern void MoveMenuCursorUp(struct MenuInputStruct *); -extern void MoveMenuCursorDown(struct MenuInputStruct *); -void sub_8013984(struct MenuInputStruct *); -void sub_80137F8(struct MenuInputStruct *, u32); -s32 sub_8013800(struct MenuInputStruct *param_1, s32 param_2); -void UpdateMenuCursorSpriteCoords(struct MenuInputStruct *param_1); void sub_801332C(u16 *); void sub_8013660(struct MenuInputStruct *param_1) @@ -168,7 +160,7 @@ s32 sub_8013800(struct MenuInputStruct *param_1, s32 param_2) return (iVar2 + (iVar1 >> 8)); } -void sub_8013818(struct MenuInputStruct *param_1, short param_2, u16 param_3, s32 param_4) +void sub_8013818(struct MenuInputStruct *param_1, s32 param_2, u32 param_3, s32 param_4) { param_1->unk0 = param_4; param_1->unk22 = param_2; @@ -183,7 +175,7 @@ void sub_8013818(struct MenuInputStruct *param_1, short param_2, u16 param_3, s3 } -void sub_8013848(struct MenuInputStruct *param_1, short param_2, u16 param_3, s32 param_4) +void sub_8013848(struct MenuInputStruct *param_1, s32 param_2, u32 param_3, s32 param_4) { param_1->unk0 = param_4; param_1->unk22 = param_2; @@ -197,7 +189,7 @@ void sub_8013848(struct MenuInputStruct *param_1, short param_2, u16 param_3, s3 sub_80137F8(param_1,0x18); } -void sub_8013878(struct MenuInputStruct *param_1, int param_2) +void sub_8013878(struct MenuInputStruct *param_1, s32 param_2) { if (param_2 < 0) { param_2 = 0; @@ -278,7 +270,8 @@ bool8 sub_8013938(struct MenuInputStruct *param_1) } } -void sub_8013984(struct MenuInputStruct * param_1) { +void sub_8013984(struct MenuInputStruct * param_1) +{ s32 iVar2; s32 iVar4; struct UnkTextStruct1 *ptr; diff --git a/src/options_menu.c b/src/options_menu.c index dc555adb2..8cf77c91a 100644 --- a/src/options_menu.c +++ b/src/options_menu.c @@ -55,12 +55,9 @@ extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern s32 sub_8008ED0(u8 *); -extern s32 sub_8013800(void *, u32); extern void CreateOthersMenu(void); extern void sub_80078A4(u32, u32, u32, u32, u32); -extern u8 sub_80138B8(void *, u32); void PlayMenuSoundEffect(u32); -extern void sub_8013818(void *, u32, u32, u32); void CreateOptionsMenu(void); void nullsub_38(void); extern void SetOptionsMenuState(u32); diff --git a/src/personality_test.c b/src/personality_test.c index c5e191171..828749efb 100644 --- a/src/personality_test.c +++ b/src/personality_test.c @@ -61,14 +61,9 @@ extern void sub_800836C(u32, u8 *r0, u32); extern void SetBGPaletteBufferColorArray(s32 index, u8 *colorArray); extern void RedrawPartnerSelectionMenu(void); -extern void sub_8013818(struct MenuInputStruct *r0, s32, u32, u32); -extern u8 sub_80138B8(struct MenuInputStruct *r0, u32); extern void PlayMenuSoundEffect(u32); - -extern void sub_8013984(struct MenuInputStruct *r0); -u32 sub_8013800(struct MenuInputStruct *r0, u32); extern u32 sub_80095E4(s16, u32); extern struct GameOptions *gGameOptionsRef; diff --git a/src/pokemon_news.c b/src/pokemon_news.c index 1ccc3df8c..625d49946 100644 --- a/src/pokemon_news.c +++ b/src/pokemon_news.c @@ -154,17 +154,13 @@ extern u16 gUnknown_203B2DC; extern s32 GetNumPKMNNews(void); extern void sub_802B880(void); extern void CreatePKMNNewsMenu(void); -extern void sub_8013818(void *, u32, u32, u32); -extern u8 sub_80138B8(void *, u32); extern void PlayMenuSoundEffect(u32); -extern void sub_8013660(struct MenuInputStruct *); extern void sub_802BCC4(void); extern void sub_802BB14(u32); extern u8 HasNoMailinMailbox(void); extern void sub_802BF30(void); extern void CreateMailMenu(void); extern s32 CountEmptyMailSlots(void); -extern void sub_8013848(struct MenuInputStruct*, s32, u32, u32); void sub_802BB28(void); extern void sub_802BB98(void); extern void sub_802BC08(void); @@ -178,8 +174,6 @@ extern void sub_802BC7C(void); extern void sub_80073E0(u32); extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); extern void sub_803B6B0(u32, u32, u32, u32); -extern s32 sub_8013800(struct MenuInputStruct *, s32); -extern void sub_8013984(struct MenuInputStruct *); extern struct PokemonStruct *sub_808D3BC(void); extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); diff --git a/src/wonder_mail_2_1.c b/src/wonder_mail_2_1.c index e762cbc94..eca3f743e 100644 --- a/src/wonder_mail_2_1.c +++ b/src/wonder_mail_2_1.c @@ -98,20 +98,14 @@ extern void sub_802CAA4(void); extern u8 IsJobSlotEmpty(u8); extern void sub_8008C54(u32); extern void sub_80073B8(u32); -extern void sub_8013C68(struct MenuInputStruct*); extern void sub_80073E0(u32); extern struct WonderMail* GetJobSlotInfo(u8); -extern s32 sub_8013800(struct MenuInputStruct*, u32); extern void sub_803B35C(struct WonderMail *, struct unkStruct_802C39C *); extern void CreateRescueTitle(struct unkStruct_802C39C *); -extern void sub_8013984(struct MenuInputStruct*); extern void sub_802C6DC(void); extern void DrawJobListMenu(void); -extern u8 sub_80138B8(struct MenuInputStruct*, u32); extern void PlayMenuSoundEffect(u32); -extern void sub_8013660(void *); -extern void sub_8013848(struct MenuInputStruct*, s32, u32, u32); extern bool8 IsPelipperBoardSlotEmpty(u8); extern void SetJobListState(u32); extern void sub_802CC00(void); diff --git a/src/wonder_mail_2_mid.c b/src/wonder_mail_2_mid.c index f6aa0ebaf..967c33630 100644 --- a/src/wonder_mail_2_mid.c +++ b/src/wonder_mail_2_mid.c @@ -11,20 +11,15 @@ #include "menu_input.h" bool8 IsMailSlotEmpty(u8); -extern void sub_8013984(void *); -extern void sub_8013848(struct MenuInputStruct *, s32, u32, u32); extern s32 CountPelipperBoardSlots(void); extern void sub_802C328(void); extern void DrawPelipperBoardJobMenu(void); extern void PlayMenuSoundEffect(u32); -extern void sub_8013660(struct MenuInputStruct *); -extern bool8 sub_80138B8(struct MenuInputStruct *, u32); extern u8 HasNoPelipperBoardJobs(void); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern s32 sub_8013800(struct MenuInputStruct *, s32); extern struct WonderMail *GetPelipperBoardSlotInfo(u32); extern void sub_803B35C(struct WonderMail *, u32 *); extern u8 gBulletinBoardText[]; diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index 345fe0d3a..809e3541b 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -153,15 +153,10 @@ extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern void CreateRescueTitle(struct unkStruct_802C39C *); -extern s32 sub_8013800(struct MenuInputStruct *, u32); extern u8 gUnknown_80DFDBC[]; extern void sub_802CF5C(void); extern void sub_802CFD0(void); -extern void sub_8013984(struct MenuInputStruct *); -extern u8 sub_80138B8(struct MenuInputStruct *, u32); -extern void sub_8013660(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); -extern void sub_8013848(struct MenuInputStruct *, s32, u32, u32); extern void sub_802DF24(void); extern void SetJobListState(u32); diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index b32060a6e..920e9a9aa 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -95,11 +95,8 @@ enum FriendRewardStates { extern u8 sub_802FCF0(u32); extern void sub_802F9C0(void); extern void sub_802FA50(void); -extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); -extern u32 sub_802FBF4(void); -extern void sub_8013878(struct MenuInputStruct *, s32); +extern s32 sub_802FBF4(void); -extern void sub_8013984(struct MenuInputStruct *); extern void SetRewardSceneState(u32); extern void sub_802EFEC(u32); extern void sub_802F148(void); @@ -125,8 +122,6 @@ extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern void sub_802F6FC(void); extern void ProceedToNextRewardSceneState(void); -extern u8 sub_80138B8(struct MenuInputStruct*, u32); -extern void sub_8013660(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); extern void sub_802F300(void); extern void PlaySound(u32); @@ -135,7 +130,6 @@ extern void sub_80141B4(const u8 *, u32, struct OpenedFile **, u32); extern u32 sub_801B60C(u32, u8, u8); extern void sub_8092578(u8 *buffer, u8 index, u8 r2); void HandleMissionReward(void); -extern s32 sub_8013800(struct MenuInputStruct *, s32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index 894abbd19..7fd2ae1b6 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -78,13 +78,8 @@ extern bool8 HasNoWonderMailType(u32); extern s32 sub_8030A74(void); extern void sub_80308A0(void); extern void sub_803092C(void); -extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); -extern u8 sub_80138B8(struct MenuInputStruct*, u32); -extern void sub_8013660(struct MenuInputStruct*); extern void PlayMenuSoundEffect(u32); -extern void sub_8013984(struct MenuInputStruct*); -extern s32 sub_8013800(struct MenuInputStruct*, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); From 77c5e8ccec4750beddca2ed6381c9f5e59a3d99b Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Tue, 1 Aug 2023 18:18:03 -0700 Subject: [PATCH 25/26] remove empty asm files --- asm/kangaskhan_storage.s | 8 -------- asm/wigglytuff_shop.s | 8 -------- 2 files changed, 16 deletions(-) delete mode 100644 asm/kangaskhan_storage.s delete mode 100644 asm/wigglytuff_shop.s diff --git a/asm/kangaskhan_storage.s b/asm/kangaskhan_storage.s deleted file mode 100644 index 5f088844f..000000000 --- a/asm/kangaskhan_storage.s +++ /dev/null @@ -1,8 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - .align 2,0 diff --git a/asm/wigglytuff_shop.s b/asm/wigglytuff_shop.s deleted file mode 100644 index 5bab66cd5..000000000 --- a/asm/wigglytuff_shop.s +++ /dev/null @@ -1,8 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - .align 2,0 From 48f49fd70dcdcb83bd00f34d6f6ac88568b55854 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Tue, 1 Aug 2023 20:55:52 -0700 Subject: [PATCH 26/26] address review comments --- src/code_801EE10_mid.c | 2 +- src/kecleon_items_1.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/code_801EE10_mid.c b/src/code_801EE10_mid.c index ba769476a..e59f6821b 100644 --- a/src/code_801EE10_mid.c +++ b/src/code_801EE10_mid.c @@ -110,7 +110,7 @@ bool8 sub_801F428(s16 index, s32 param_2) { sub_8013818(&gUnknown_203B274->input, sub_801F7E4(), 4, param_2); sub_801F690(); sub_801F700(); - return 1; + return TRUE; } u32 sub_801F520(u8 param_1) diff --git a/src/kecleon_items_1.c b/src/kecleon_items_1.c index f3e2151a6..cf11ed156 100644 --- a/src/kecleon_items_1.c +++ b/src/kecleon_items_1.c @@ -12,7 +12,7 @@ #include "text.h" struct unkStruct_203B214 -{; +{ // size: 0xA0 struct MenuInputStruct input; u32 unk34;