From a3ff33a4cfb6beab54a38e640a3d6fa2eb4f73c3 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 30 Jul 2023 21:51:39 -0700 Subject: [PATCH] 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; + } +}