diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2021-05-23 16:19:35 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-23 16:19:35 -0500 |
commit | eaa141c612dd1689936a21bd57018a55ff686b69 (patch) | |
tree | fafe2a9a562af6a8e36716ff76a5b3e8b30d4411 /src/code_8012A18_1.c | |
parent | f402e46cd3c8b7236673d6edbae77903a7cc0618 (diff) |
Keep on keepin on (#38)
* end of may dump of work
* move save text to src
* decomp a little more
Diffstat (limited to 'src/code_8012A18_1.c')
-rw-r--r-- | src/code_8012A18_1.c | 284 |
1 files changed, 284 insertions, 0 deletions
diff --git a/src/code_8012A18_1.c b/src/code_8012A18_1.c new file mode 100644 index 0000000..62dc64d --- /dev/null +++ b/src/code_8012A18_1.c @@ -0,0 +1,284 @@ +#include "global.h" +#include "menu.h" +#include "file_system.h" +#include "memory.h" +#include "input.h" + +extern void sub_800641C(u32, u32, u32); + +struct unkStruct_203B200 +{ + u32 unk0; + u32 unk4; + u8 *pokeName; + s32 state; + /* 0x10 */ struct MenuItem menus[3]; +}; +extern struct unkStruct_203B200 *gUnknown_203B200; +extern const char *gUnknown_80D4920; +extern const char *gUnknown_80D4928; + +extern const char gUnknown_80DB6A4; +extern const char gUnknown_80DB6BC; +extern const char gUnknown_80DB688; +extern u8 gAvailablePokemonNames[0x58]; + +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 s32 sub_80144A4(s32 *); +extern void sub_80151C0(u32, u8 *); +extern void CreateConfirmNameMenu(void); +extern void sub_80160F4(u32); +bool8 sub_80162B8(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); +extern void sub_80161F8(void); +extern void HandleConfirmNameMenu(void); +extern void sub_8016280(void); +extern void sub_801629C(void); + + +enum +{ + MENU_ACTION_DEFAULT = 1, + MENU_ACTION_YES, + MENU_ACTION_NO, +}; + +extern u32 ReturnIntFromChar2(u8); + +struct unkChar +{ + u32 unk0; + s16 unk4; + s16 unk6; +}; + +struct unkChar *GetCharacter(u32); + + +s32 sub_8015FEC(u8 *buffer, s32 size) +{ + struct unkChar *iVar2; + s32 currLength; + s32 iVar4; + u8 *bufferPtr; + + iVar4 = 0; + currLength = 0; + + if(currLength < size && *buffer != '\0') + { + bufferPtr = buffer; // Had to have another variable to match.. + do { + iVar2 = GetCharacter(ReturnIntFromChar2(*bufferPtr)); + iVar4 += iVar2->unk6; + bufferPtr++; + currLength++; + } while (currLength < size && *bufferPtr != '\0'); + } + return iVar4; +} + +s32 sub_8016028(void) +{ + return 60; +} + +u32 sub_801602C(u32 r0, u8 *name) +{ + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + gUnknown_203B200 = MemoryAlloc(0x50, 8); + gUnknown_203B200->unk0 = r0; + gUnknown_203B200->pokeName = name; + switch(r0) + { + case 0: + gUnknown_203B200->unk4 = 0; + break; + case 1: + gUnknown_203B200->unk4 = 1; + break; + case 2: + gUnknown_203B200->unk4 = 2; + break; + case 3: + gUnknown_203B200->unk4 = 3; + break; + default: + break; + } + sub_80160F4(0); + return 1; +} + +u32 sub_8016080(void) +{ + switch(gUnknown_203B200->state) { + case 0: + sub_80161F8(); + break; + case 1: + HandleConfirmNameMenu(); + break; + case 2: + sub_8016280(); + break; + case 3: + sub_801629C(); + break; + case 4: + return 3; + } + return 0; +} + +extern void MemoryFree(void *); + +void sub_80160D8(void) +{ + if(gUnknown_203B200 != NULL) + { + MemoryFree(gUnknown_203B200); + gUnknown_203B200 = NULL; + } +} + + +void sub_80160F4(u32 newState) +{ + gUnknown_203B200->state = newState; + nullsub_36(); + sub_8016110(); +} + +void nullsub_36(void) +{ +} + +void sub_8016110(void) +{ + switch(gUnknown_203B200->state) + { + case 0: + sub_80151C0(gUnknown_203B200->unk4,gUnknown_203B200->pokeName); + break; + case 1: + CreateConfirmNameMenu(); + if (gUnknown_203B200->unk4 == 1) { + sub_80922B4(gAvailablePokemonNames,gUnknown_203B200->pokeName,10); + } + else { + sub_80922B4(gAvailablePokemonNames,gUnknown_203B200->pokeName,10); + } + // Is the name #C5$m0#R OK? + sub_8014248(&gUnknown_80DB688,0,3,gUnknown_203B200->menus,0,4,0,0,0x20); + break; + + case 2: + // This name is too long + sub_80141B4(&gUnknown_80DB6A4,0,0,0x121); + break; + case 3: + // Please enter a name + sub_80141B4(&gUnknown_80DB6BC,0,0,0x121); + break; + default: + break; + } +} + +void CreateConfirmNameMenu(void) +{ + gUnknown_203B200->menus[0].text = gUnknown_80D4920; // Yes + gUnknown_203B200->menus[0].menuAction = MENU_ACTION_YES; + gUnknown_203B200->menus[1].text = gUnknown_80D4928; // No + gUnknown_203B200->menus[1].menuAction = MENU_ACTION_NO; + gUnknown_203B200->menus[2].text = NULL; + gUnknown_203B200->menus[2].menuAction = MENU_ACTION_DEFAULT; +} + +void sub_80161F8(void) +{ + s32 iVar2; + s32 maxLength; + + if (sub_80154F0() == 3) { + sub_80155F0(); + if (sub_80162B8()) { + sub_80160F4(3); + } + else{ + iVar2 = sub_8015FEC(gUnknown_203B200->pokeName,10); + maxLength = sub_8016028(); // returns 60 + if (iVar2 > maxLength) { + sub_80160F4(2); + } + else { + sub_80160F4(1); + } + } + } +} + +void HandleConfirmNameMenu(void) +{ + s32 temp; + + if (sub_80144A4(&temp) == 0) { + switch(temp) + { + case MENU_ACTION_YES: + sub_80160F4(4); + break; + case MENU_ACTION_NO: + case MENU_ACTION_DEFAULT: + sub_80160F4(0); + break; + default: + break; + } + } +} + +void sub_8016280(void) +{ + s32 temp; + + if (sub_80144A4(&temp) == 0) { + sub_80160F4(0); + } +} + + +void sub_801629C(void) +{ + s32 temp; + + if (sub_80144A4(&temp) == 0) { + sub_80160F4(0); + } +} + +bool8 sub_80162B8(void) +{ + u8 character; + s32 index; + s32 max; + + max = 10; // constant needed at top of loop to match + index = 0; + do { + character = gUnknown_203B200->pokeName[index]; + if (character == '\0') break; + if (character != ' ') return 0; + index++; + } while (index < max); + return 1; +} |