diff --git a/data/data_80DC240.s b/data/data_80DC240.s deleted file mode 100644 index c04f02f30..000000000 --- a/data/data_80DC240.s +++ /dev/null @@ -1,103 +0,0 @@ - .section .rodata - -@ code_801EE10 - .align 2,0 -.string "pksdir0\0" - .align 2,0 - - .global gUnknown_80DC240 -gUnknown_80DC240: @ 80DC240 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global Data_80DC258 - Data_80DC258: - .byte 0x01, 0x00, 0x0f, 0x00 - - .global gUnknown_80DC25C -gUnknown_80DC25C: @ 80DC25C - .byte 0x00, 0x00 - .byte 0x00, 0x00 - .byte 0x06, 0x00 - .byte 0x00, 0x00 - .byte 0x02, 0x00 - .byte 0x02, 0x00 - .byte 0x12, 0x00 - .byte 0x08, 0x00 - .byte 0x08, 0x00 - .byte 0x00, 0x00 - - .4byte Data_80DC258 - - .global gUnknown_80DC274 -gUnknown_80DC274: @ 80DC274 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x0f, 0x00 - .byte 0x1a, 0x00, 0x03, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80DC28C -gUnknown_80DC28C: @ 80DC28C - .string "Moves: {COLOR_1 YELLOW}{ARG_POKEMON_0}{END_COLOR_TEXT_1} \0" - .align 2,0 - - .global gUnknown_80DC2A0 -gUnknown_80DC2A0: @ 80DC2A0 - .string "{ARG_MOVE_ITEM_0}\0" - -@ code_801EE10_mid #1 - .align 2,0 -.string "pksdir0\0" - .align 2,0 - - .global gUnknown_80DC2AC -gUnknown_80DC2AC: @ 80DC2AC - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80DC2C4 -gUnknown_80DC2C4: @ 80DC2C4 - .byte 0x00, 0x00 - .byte 0x00, 0x00 - .byte 0x06, 0x00 - .byte 0x00, 0x00 - .byte 0x02, 0x00 - .byte 0x02, 0x00 - .byte 0x0f, 0x00 - .byte 0x04, 0x00 - .byte 0x06, 0x00 - .byte 0x00, 0x00 - .byte 0x00, 0x00 - .byte 0x00, 0x00 - - .global gUnknown_80DC2DC -gUnknown_80DC2DC: @ 80DC2DC - .string "Moves Page: %d/%d \0" - - .align 2,0 -@ code_801EE10_mid #2 -.string "pksdir0\0" - .align 2,0 - - .global gUnknown_80DC2F8 -gUnknown_80DC2F8: @ 80DC2F8 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80DC310 -gUnknown_80DC310: @ 80DC310 - .string "{ARG_POKEMON_0}\0" \ No newline at end of file diff --git a/ld_script.txt b/ld_script.txt index 94dcb23e6..c494c0d3a 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -123,6 +123,8 @@ SECTIONS { src/code_801EE10.o(.text); asm/code_801EE10.o(.text); src/code_801EE10_mid.o(.text); + src/code_801F428.o(.text); + src/code_801F808.o(.text); src/gulpin_shop_801FB50.o(.text); src/wigglytuff_shop1.o(.text); src/wigglytuff_shop2.o(.text); @@ -460,7 +462,9 @@ SECTIONS { src/hints_menu1.o(.rodata); src/hints_menu2.o(.rodata); src/gulpin_shop.o(.rodata); - data/data_80DC240.o(.rodata); + src/code_801EE10.o(.rodata); + src/code_801F428.o(.rodata); + src/code_801F808.o(.rodata); src/gulpin_shop_801FB50.o(.rodata); src/wigglytuff_shop1.o(.rodata); src/wigglytuff_shop2.o(.rodata); diff --git a/src/code_801EE10.c b/src/code_801EE10.c index 36115fb50..b99a842c6 100644 --- a/src/code_801EE10.c +++ b/src/code_801EE10.c @@ -1,4 +1,5 @@ #include "global.h" +#include "globaldata.h" #include "constants/input.h" #include "input.h" #include "items.h" @@ -11,9 +12,38 @@ #include "menu_input.h" extern unkStruct_203B270 *gUnknown_203B270; -extern UnkTextStruct2 gUnknown_80DC25C; -extern UnkTextStruct2 gUnknown_80DC274; -extern UnkTextStruct2 gUnknown_80DC240; + +const UnkTextStruct2 gUnknown_80DC240 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +const u8 gUnkData_80DC258[4] = {0x01, 0x00, 0x0F, 0x00}; + +const UnkTextStruct2 gUnknown_80DC25C = { + 0, 0, 0, 0, + 6, + 0x2, 0x2, + 0x12, 0x8, + 0x8, 0, + gUnkData_80DC258 +}; + +const UnkTextStruct2 gUnknown_80DC274 = { + 0, 0, 0, 0, + 3, + 0x2, 0xF, + 0x1A, 0x3, + 0x3, 0, + NULL, +}; + +ALIGNED(4) const u8 gUnknown_80DC28C[] = _("Moves: {COLOR_1 YELLOW}{ARG_POKEMON_0}{END_COLOR_TEXT_1} "); +ALIGNED(4) const u8 gUnknown_80DC2A0[] = _("{ARG_MOVE_ITEM_0}"); u32 sub_8006544(u32 index); s32 sub_801F3F8(void); diff --git a/src/code_801EE10_mid.c b/src/code_801EE10_mid.c index be1d62bd5..50bf825cf 100644 --- a/src/code_801EE10_mid.c +++ b/src/code_801EE10_mid.c @@ -1,72 +1,8 @@ #include "global.h" -#include "memory.h" -#include "text1.h" -#include "text2.h" -#include "pokemon.h" -#include "code_800D090.h" -#include "moves.h" #include "code_801EE10.h" -#include "menu_input.h" -#include "structs/subStruct_203B240.h" -#include "sprite.h" -#include "code_80130A8.h" -#include "code_801EE10_mid.h" -#include "code_80118A4.h" -#include "input.h" extern unkStruct_203B270 *gUnknown_203B270; -struct unkStruct_203B274 -{ - // size: 0x3e8 - PokemonStruct1 *pokeStruct; - unkStruct_808E218_arg *unk4; - unkStruct_808E218_arg unk8; - MenuInputStruct input; - s32 unk37C; - UnkTextStruct2 *unk380; - UnkTextStruct2 unk384[4]; - 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; - MenuInputStruct unk28; - u32 unk5C; - UnkTextStruct2 *unk60; - UnkTextStruct2 unk64[4]; - u8 unkC4[4]; - MenuInputStructSub unkC8; -}; - -extern struct unkStruct_203B278 *gUnknown_203B278; - -extern UnkTextStruct2 gUnknown_80DC2C4; -extern UnkTextStruct2 gUnknown_80DC2AC; -extern UnkTextStruct2 gUnknown_80DC2F8; - -extern u8 gAvailablePokemonNames[]; -extern u8 gUnknown_80DC310[]; -extern u8 gUnknown_80DC2DC[]; - -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); - -u32 sub_801F7E4(void); -void sub_801F690(void); - s32 sub_801F3F8(void) { Move *move; @@ -83,355 +19,3 @@ s32 sub_801F3F8(void) } return counter; } - - - -// THIS IS A NEW FILE - -bool8 sub_801F428(s16 index, s32 param_2) -{ - s32 index_s32 = index; - gUnknown_203B274 = MemoryAlloc(sizeof(struct unkStruct_203B274), 0x8); - gUnknown_203B274->pokeStruct = &gRecruitedPokemonRef->pokemon[index_s32]; - gUnknown_203B274->unk4 = &gUnknown_203B274->unk8; - gUnknown_203B274->unk37C = param_2; - gUnknown_203B274->unk380 = &gUnknown_203B274->unk384[gUnknown_203B274->unk37C]; - sub_8006518(gUnknown_203B274->unk384); - gUnknown_203B274->unk384[gUnknown_203B274->unk37C] = gUnknown_80DC2C4; - gUnknown_203B274->unk380->unk14 = gUnknown_203B274->unk3E4; - gUnknown_203B274->unk3E4[0] = 1; - gUnknown_203B274->unk3E4[1] = 0; - gUnknown_203B274->unk3E4[2] = 0xC; - gUnknown_203B274->unk3E4[3] = 0; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B274->unk384, TRUE, TRUE); - sub_8013818(&gUnknown_203B274->input, sub_801F7E4(), 4, param_2); - sub_801F690(); - sub_801F700(); - return TRUE; -} - -u32 sub_801F520(u8 param_1) -{ - if (param_1 == 0) { - sub_8013660(&gUnknown_203B274->input); - return 0; - } - else { - switch(GetKeyPress(&gUnknown_203B274->input)) - { - case 2: - PlayMenuSoundEffect(1); - return 2; - case 1: - PlayMenuSoundEffect(0); - return 3; - case 4: - PlayMenuSoundEffect(4); - return 4; - default: - break; - } - if (sub_80138B8(&gUnknown_203B274->input,1) != 0) { - sub_801F690(); - sub_801F700(); - return 1; - } - else { - return 0; - } - } -} - -u16 sub_801F5B4(void) -{ - return gUnknown_203B274->unk4->unk0[gUnknown_203B274->input.unk1E * gUnknown_203B274->input.unk1C + gUnknown_203B274->input.menuIndex]; -} - -void sub_801F5F0(bool8 r0) -{ - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B274->unk384, FALSE, FALSE); - sub_8013984(&gUnknown_203B274->input); - sub_801F690(); - sub_801F700(); - if(r0) - AddMenuCursorSprite(&gUnknown_203B274->input); -} - -void sub_801F63C(void) -{ - if(gUnknown_203B274 != NULL) - { - gUnknown_203B274->unk384[gUnknown_203B274->unk37C] = gUnknown_80DC2AC; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B274->unk384, TRUE, TRUE); - MemoryFree(gUnknown_203B274); - gUnknown_203B274 = NULL; - } -} - -NAKED // sub_80095E4 memes -void sub_801F690(void) -{ - asm_unified( - "\tpush {r4,r5,lr}\n" - "\tldr r5, _0801F6F4\n" - "\tldr r0, [r5]\n" - "\tldr r1, _0801F6F8\n" - "\tadds r0, r1\n" - "\tmovs r2, 0\n" - "\tldrsh r0, [r0, r2]\n" - "\tmovs r1, 0xC\n" - "\tbl sub_80095E4\n" - "\tadds r0, 0x2\n" - "\tlsls r0, 16\n" - "\tldr r3, [r5]\n" - "\tmovs r1, 0xDF\n" - "\tlsls r1, 2\n" - "\tadds r4, r3, r1\n" - "\tldr r2, [r4]\n" - "\tlsls r1, r2, 1\n" - "\tadds r1, r2\n" - "\tlsls r1, 3\n" - "\tadds r1, r3, r1\n" - "\tldr r2, _0801F6FC\n" - "\tadds r1, r2\n" - "\tasrs r2, r0, 16\n" - "\tlsrs r0, 16\n" - "\tstrh r0, [r1]\n" - "\tldr r1, [r4]\n" - "\tlsls r0, r1, 1\n" - "\tadds r0, r1\n" - "\tlsls r0, 3\n" - "\tadds r3, r0\n" - "\tadds r2, 0x2\n" - "\tmovs r0, 0xE5\n" - "\tlsls r0, 2\n" - "\tadds r3, r0\n" - "\tstrh r2, [r3]\n" - "\tbl ResetUnusedInputStruct\n" - "\tldr r0, [r5]\n" - "\tmovs r1, 0xE1\n" - "\tlsls r1, 2\n" - "\tadds r0, r1\n" - "\tmovs r1, 0x1\n" - "\tmovs r2, 0x1\n" - "\tbl sub_800641C\n" - "\tpop {r4,r5}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_0801F6F4: .4byte gUnknown_203B274\n" -"_0801F6F8: .4byte 0x00000362\n" -"_0801F6FC: .4byte 0x00000392"); -} - -void sub_801F700(void) -{ - u32 y; - int index; - u8 buffer2 [48]; - u8 buffer1 [128]; - - sub_8008C54(gUnknown_203B274->unk37C); - sub_80073B8(gUnknown_203B274->unk37C); - sprintfStatic(buffer1,gUnknown_80DC2DC,gUnknown_203B274->input.unk1E + 1,gUnknown_203B274->input.unk20); // Moves Page: %d/%d - xxx_call_draw_string(0x10,0,buffer1,gUnknown_203B274->unk37C,0); - for(index = 0; index < gUnknown_203B274->input.unk1A; index++) - { - sub_8092C84(buffer2,gUnknown_203B274->unk4->unk0[gUnknown_203B274->input.unk1E * gUnknown_203B274->input.unk1C + index]); - y = sub_8013800(&gUnknown_203B274->input, index); - xxx_call_draw_string(8,y,buffer2,gUnknown_203B274->unk37C,0); - } - sub_80073E0(gUnknown_203B274->unk37C); -} - -u32 sub_801F7E4(void) -{ - sub_808E218(gUnknown_203B274->unk4, gUnknown_203B274->pokeStruct); - return gUnknown_203B274->unk4->count; -} - - - - - -// THIS IS A NEW FILE - - - - -bool8 sub_801F808(u16 *moveIDs) -{ - s32 index; - - ResetSprites(TRUE); - 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, TRUE, TRUE); - 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; -} - -u32 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, TRUE, TRUE); - 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, TRUE, TRUE); - break; - case 1: - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B278->unk64, TRUE, TRUE); - break; - default: - break; - } -} - -void sub_801F9A4(void) -{ - u8 **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/code_801F428.c b/src/code_801F428.c new file mode 100644 index 000000000..d726236b2 --- /dev/null +++ b/src/code_801F428.c @@ -0,0 +1,218 @@ +#include "global.h" +#include "globaldata.h" +#include "code_80118A4.h" +#include "code_800D090.h" +#include "input.h" +#include "memory.h" +#include "menu_input.h" +#include "moves.h" +#include "pokemon.h" +#include "text1.h" +#include "text2.h" + +struct unkStruct_203B274 +{ + // size: 0x3e8 + PokemonStruct1 *pokeStruct; + unkStruct_808E218_arg *unk4; + unkStruct_808E218_arg unk8; + MenuInputStruct input; + s32 unk37C; + UnkTextStruct2 *unk380; + UnkTextStruct2 unk384[4]; + u8 unk3E4[4]; +}; +extern struct unkStruct_203B274 *gUnknown_203B274; + +extern u8 gAvailablePokemonNames[]; + +static const UnkTextStruct2 sUnknown_80DC2AC = { + 0, 0, 0, 0, + 3, + 0, 0, + 0, 0, + 0, 0, + NULL +}; +static const UnkTextStruct2 sUnknown_80DC2C4 = { + 0, 0, 0, 0, + 6, + 2, 2, + 0xF, 4, + 6, 0, + NULL +}; + + +ALIGNED(4) const u8 gUnknown_80DC2DC[] = _("Moves Page: %d/%d "); + +u32 sub_801F7E4(void); +void sub_801F690(void); +void sub_801F700(void); + + +bool8 sub_801F428(s16 index, s32 param_2) +{ + s32 index_s32 = index; + gUnknown_203B274 = MemoryAlloc(sizeof(struct unkStruct_203B274), 0x8); + gUnknown_203B274->pokeStruct = &gRecruitedPokemonRef->pokemon[index_s32]; + gUnknown_203B274->unk4 = &gUnknown_203B274->unk8; + gUnknown_203B274->unk37C = param_2; + gUnknown_203B274->unk380 = &gUnknown_203B274->unk384[gUnknown_203B274->unk37C]; + sub_8006518(gUnknown_203B274->unk384); + gUnknown_203B274->unk384[gUnknown_203B274->unk37C] = sUnknown_80DC2C4; + gUnknown_203B274->unk380->unk14 = gUnknown_203B274->unk3E4; + gUnknown_203B274->unk3E4[0] = 1; + gUnknown_203B274->unk3E4[1] = 0; + gUnknown_203B274->unk3E4[2] = 0xC; + gUnknown_203B274->unk3E4[3] = 0; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B274->unk384, TRUE, TRUE); + sub_8013818(&gUnknown_203B274->input, sub_801F7E4(), 4, param_2); + sub_801F690(); + sub_801F700(); + return TRUE; +} + +u32 sub_801F520(u8 param_1) +{ + if (param_1 == 0) { + sub_8013660(&gUnknown_203B274->input); + return 0; + } + else { + switch(GetKeyPress(&gUnknown_203B274->input)) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + PlayMenuSoundEffect(0); + return 3; + case 4: + PlayMenuSoundEffect(4); + return 4; + default: + break; + } + if (sub_80138B8(&gUnknown_203B274->input,1) != 0) { + sub_801F690(); + sub_801F700(); + return 1; + } + else { + return 0; + } + } +} + +u16 sub_801F5B4(void) +{ + return gUnknown_203B274->unk4->unk0[gUnknown_203B274->input.unk1E * gUnknown_203B274->input.unk1C + gUnknown_203B274->input.menuIndex]; +} + +void sub_801F5F0(bool8 r0) +{ + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B274->unk384, FALSE, FALSE); + sub_8013984(&gUnknown_203B274->input); + sub_801F690(); + sub_801F700(); + if(r0) + AddMenuCursorSprite(&gUnknown_203B274->input); +} + +void sub_801F63C(void) +{ + if(gUnknown_203B274 != NULL) + { + gUnknown_203B274->unk384[gUnknown_203B274->unk37C] = sUnknown_80DC2AC; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B274->unk384, TRUE, TRUE); + MemoryFree(gUnknown_203B274); + gUnknown_203B274 = NULL; + } +} + +NAKED // sub_80095E4 memes +void sub_801F690(void) +{ + asm_unified( + "\tpush {r4,r5,lr}\n" + "\tldr r5, _0801F6F4\n" + "\tldr r0, [r5]\n" + "\tldr r1, _0801F6F8\n" + "\tadds r0, r1\n" + "\tmovs r2, 0\n" + "\tldrsh r0, [r0, r2]\n" + "\tmovs r1, 0xC\n" + "\tbl sub_80095E4\n" + "\tadds r0, 0x2\n" + "\tlsls r0, 16\n" + "\tldr r3, [r5]\n" + "\tmovs r1, 0xDF\n" + "\tlsls r1, 2\n" + "\tadds r4, r3, r1\n" + "\tldr r2, [r4]\n" + "\tlsls r1, r2, 1\n" + "\tadds r1, r2\n" + "\tlsls r1, 3\n" + "\tadds r1, r3, r1\n" + "\tldr r2, _0801F6FC\n" + "\tadds r1, r2\n" + "\tasrs r2, r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r1, [r4]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tlsls r0, 3\n" + "\tadds r3, r0\n" + "\tadds r2, 0x2\n" + "\tmovs r0, 0xE5\n" + "\tlsls r0, 2\n" + "\tadds r3, r0\n" + "\tstrh r2, [r3]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r5]\n" + "\tmovs r1, 0xE1\n" + "\tlsls r1, 2\n" + "\tadds r0, r1\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_0801F6F4: .4byte gUnknown_203B274\n" +"_0801F6F8: .4byte 0x00000362\n" +"_0801F6FC: .4byte 0x00000392"); +} + +void sub_801F700(void) +{ + u32 y; + int index; + u8 buffer2 [48]; + u8 buffer1 [128]; + + sub_8008C54(gUnknown_203B274->unk37C); + sub_80073B8(gUnknown_203B274->unk37C); + sprintfStatic(buffer1,gUnknown_80DC2DC,gUnknown_203B274->input.unk1E + 1,gUnknown_203B274->input.unk20); // Moves Page: %d/%d + xxx_call_draw_string(0x10,0,buffer1,gUnknown_203B274->unk37C,0); + for(index = 0; index < gUnknown_203B274->input.unk1A; index++) + { + sub_8092C84(buffer2,gUnknown_203B274->unk4->unk0[gUnknown_203B274->input.unk1E * gUnknown_203B274->input.unk1C + index]); + y = sub_8013800(&gUnknown_203B274->input, index); + xxx_call_draw_string(8,y,buffer2,gUnknown_203B274->unk37C,0); + } + sub_80073E0(gUnknown_203B274->unk37C); +} + +u32 sub_801F7E4(void) +{ + sub_808E218(gUnknown_203B274->unk4, gUnknown_203B274->pokeStruct); + return gUnknown_203B274->unk4->count; +} + diff --git a/src/code_801F808.c b/src/code_801F808.c new file mode 100644 index 000000000..969c6fbb8 --- /dev/null +++ b/src/code_801F808.c @@ -0,0 +1,227 @@ +#include "global.h" +#include "globaldata.h" +#include "code_80130A8.h" +#include "code_80118A4.h" +#include "input.h" +#include "memory.h" +#include "menu_input.h" +#include "moves.h" +#include "sprite.h" +#include "structs/menu.h" +#include "structs/str_text.h" +#include "text1.h" +#include "text2.h" + +extern u8 gAvailablePokemonNames[]; + +struct unkStruct_203B278 +{ + s32 state; + u16 *moveIDs; + u16 unk8; + u16 fillA; + s32 unkC; + s32 unk10; + struct subStruct_203B240 *unk14[4]; + u32 unk24; + MenuInputStruct unk28; + u32 unk5C; + UnkTextStruct2 *unk60; + UnkTextStruct2 unk64[4]; + u8 unkC4[4]; + MenuInputStructSub unkC8; +}; + +extern struct unkStruct_203B278 *gUnknown_203B278; + +static const UnkTextStruct2 sUnknown_80DC2F8 = { + 0, 0, 0, 0, + 3, + 0, 0, + 0, 0, + 0, 0, + NULL +}; + +const u8 gUnknown_80DC310[] = _("{ARG_POKEMON_0}"); + +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); + +bool8 sub_801F808(u16 *moveIDs) +{ + s32 index; + + ResetSprites(TRUE); + 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, TRUE, TRUE); + 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; +} + +u32 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] = sUnknown_80DC2F8; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B278->unk64, TRUE, TRUE); + 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, TRUE, TRUE); + break; + case 1: + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B278->unk64, TRUE, TRUE); + break; + default: + break; + } +} + +void sub_801F9A4(void) +{ + u8 **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; + } +} +