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;