diff options
Diffstat (limited to 'src/trade_items_menu.c')
-rw-r--r-- | src/trade_items_menu.c | 1120 |
1 files changed, 1120 insertions, 0 deletions
diff --git a/src/trade_items_menu.c b/src/trade_items_menu.c new file mode 100644 index 0000000..2582931 --- /dev/null +++ b/src/trade_items_menu.c @@ -0,0 +1,1120 @@ +#include "global.h" +#include "input.h" +#include "trade_items_menu.h" + +extern struct TradeItemsMenu *gTradeItemsMenu; + +struct unkStruct_203B460 +{ + u8 unk0[0x50]; + u16 unk50[10]; +}; + + +extern struct unkStruct_203B460 *gUnknown_203B460; // TODO unify this +extern u32 gUnknown_202DE30; +extern u32 gUnknown_202DE58; +extern struct unkData gUnknown_80E6174; + +// Trade Items Menu Link Error Messages +extern u32 gTradeItemsCommunicationError; +extern u32 gUnknown_80E639C; +extern u32 gUnknown_80E63F8; +extern u32 gUnknown_80E6448; +extern u32 gUnknown_80E64AC; +extern u32 gTradeItemsHowManyText; +extern u32 gUnknown_80E60A0; +extern u32 gUnknown_80E60D4; +extern u32 gUnknown_80E61A4; +extern u32 gUnknown_80E61C0; +extern u32 gUnknown_80E60EC; +extern u32 gUnknown_80E6104; +extern u32 gUnknown_80E6154; +extern u32 gUnknown_80E61E4; + +extern u32 gUnknown_80E6214; +extern u32 gUnknown_80E618C; +extern u32 gUnknown_80E6268; +extern u32 gUnknown_80E62C4; +extern u32 gUnknown_80E6358; +extern u32 gUnknown_80E6314; + +extern void sub_8013AA0(u32 *); + +extern void *MemoryAlloc(u32, u32); +extern void MemoryFill8(u8 *, u32, u32); +extern void MemoryFree(void *); +extern void sub_800641C(u32 *, u32, u32); +extern void sub_8035C1C(); +extern void sub_8035DA0(); +extern s32 sub_80144A4(s32 *); +extern u32 sub_801CA08(u32); +extern void sub_801CBB8(); +extern u8 sub_801CB24(); +extern void sub_8006518(u32 *); +extern void sub_801B3C0(u8 *); +extern u8 sub_8012FD8(u32 *); +extern void sub_8013114(u32 *, s32 *); +extern void sub_8035CC0(struct unkData *, u32); +extern void sub_801CCD8(); +extern u32 sub_801B410(); +extern void sub_801B450(); +extern void sub_801CB5C(u32); +extern void sub_8035CF4(u32 *, u32, u32); +extern u32 sub_8013BBC(u32 *); +void sub_8036F30(); +extern void sub_80369D0(); +extern void sub_8012574(u32); +extern void sub_80141B4(u32 *, u32, u32, u32); + +extern void sub_8012574(u32); +extern u8 sub_8012600(void); +extern void sub_8012750(); + +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_8013C68(u32 *); +extern void sub_80073E0(u32); +extern void xxx_call_draw_string(u32, u32, u32 *, u32, u32); +extern u8 sub_801CF14(u32); +extern u32 sub_801D008(); +extern void sub_8090DC4(u32 *, u8, u32); +extern void sub_801C8C4(u32, u32, s32 *, u32); + + + + +void SetTradeItemMenu(u32); +void PrintTradeItemsLinkError(u32); +void sub_803652C(); +void sub_8036590(); +void sub_80365AC(); +void sub_8036674(); +void sub_8036788(); +void sub_8036728(); +extern void sub_8036830(); +void sub_803689C(); +void sub_80368D4(); +void sub_8036934(); +void sub_8036950(); +void sub_8036AA4(); +void sub_80369FC(); +void sub_8036A18(); +void sub_8036A34(); +void sub_8036A7C(); +void sub_8036A54(); +void sub_8036ADC(); + +// 11 was another saving too? +enum TradeItemsScreens +{ + TRADE_ITEMS_MAIN_MENU, + TRADE_ITEMS_SEND_ITEM, + TRADE_ITEMS_SEND_ITEM_SELECTION, + TRADE_ITEMS_SEND_ITEM_POPUP_MENU, + TRADE_ITEMS_SEND_ITEM_NUMBER, + TRADE_ITEMS_ITEM_INFO, + TRADE_ITEMS_SEND_ITEM_CONFIRM, + TRADE_ITEMS_RECEIVE_ITEM, + TRADE_ITEMS_IN_COMMUNICATION = 9, + TRADE_ITEMS_PREPARE_TRADE_SAVING = 15, + TRADE_ITEMS_EXIT = 18, +}; + +enum TradeItemsModes +{ + TRADE_ITEMS_SEND_ITEM_MODE, + TRADE_ITEMS_RECEIVE_ITEM_MODE +}; + + +u32 CreateTradeItemsMenu(void) +{ + + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + gTradeItemsMenu = MemoryAlloc(sizeof(struct TradeItemsMenu), 8); + MemoryFill8((u8 *)gTradeItemsMenu, 0, sizeof(struct TradeItemsMenu)); + sub_8035C1C(); + sub_8035DA0(); + gTradeItemsMenu->unk4 = 0x13; + SetTradeItemMenu(TRADE_ITEMS_MAIN_MENU); + return 1; +} + +u32 UpdateTradeItemsMenu(void) +{ + + switch(gTradeItemsMenu->currMenu) { + case TRADE_ITEMS_MAIN_MENU: + sub_803652C(); + break; + case TRADE_ITEMS_SEND_ITEM: + sub_8036590(); + break; + case TRADE_ITEMS_SEND_ITEM_SELECTION: + sub_80365AC(); + break; + case TRADE_ITEMS_SEND_ITEM_POPUP_MENU: + sub_8036674(); + break; + case TRADE_ITEMS_ITEM_INFO: + sub_8036728(); + break; + case TRADE_ITEMS_SEND_ITEM_NUMBER: + sub_8036788(); + break; + case TRADE_ITEMS_SEND_ITEM_CONFIRM: + sub_8036830(); + break; + case TRADE_ITEMS_RECEIVE_ITEM: + sub_803689C(); + break; + case 8: + sub_80368D4(); + break; + case TRADE_ITEMS_PREPARE_TRADE_SAVING: + sub_8036A7C(); + break; + case TRADE_ITEMS_IN_COMMUNICATION: + sub_8036934(); + break; + case 10: + sub_8036950(); + break; + case 0xb: + sub_8036AA4(); + break; + case 0xc: + sub_80369FC(); + break; + case 0xe: + sub_8036A34(); + break; + case 0x10: + sub_8036A54(); + break; + case 0xd: + sub_8036A18(); + break; + case 0x11: + sub_8036ADC(); + break; + case TRADE_ITEMS_EXIT: // when you exit the menu to Main + return 3; + } + return 0; +} + +void sub_803652C(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + switch(menuAction) + { + case 1: + // Send Item + gTradeItemsMenu->itemMode = TRADE_ITEMS_SEND_ITEM_MODE; + gTradeItemsMenu->unk10 = 1; + SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM); + break; + case 2: + // Receive Item + gTradeItemsMenu->itemMode = TRADE_ITEMS_RECEIVE_ITEM_MODE; + gTradeItemsMenu->unk10 = 2; + SetTradeItemMenu(TRADE_ITEMS_RECEIVE_ITEM); + break; + case 0: + case 7: + // Cancel + SetTradeItemMenu(TRADE_ITEMS_EXIT); + } + } +} + +void sub_8036590(void) +{ + s32 iVar1; + + if (sub_80144A4(&iVar1) == 0) + SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_SELECTION); +} + +void sub_80365AC(void) +{ + gTradeItemsMenu->unk25E = 0; + gTradeItemsMenu->unk25D = 1; + gTradeItemsMenu->unk25C = 0; + switch(sub_801CA08(1)){ + case 2: + // Cancel + sub_801CBB8(); + SetTradeItemMenu(TRADE_ITEMS_MAIN_MENU); + break; + case 3: + // Pop up menu with Confirm, Info, Cancel + gTradeItemsMenu->unk25E = sub_801CB24(); + gTradeItemsMenu->unk25D = 1; + SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_POPUP_MENU); + break; + case 4: + gTradeItemsMenu->unk4 = 2; + gTradeItemsMenu->unk25E = sub_801CB24(); + gTradeItemsMenu->unk25D = 1; + sub_8006518(&gTradeItemsMenu->unk1E4); + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + sub_801B3C0(&gTradeItemsMenu->unk25C); + SetTradeItemMenu(TRADE_ITEMS_ITEM_INFO); + break; + } +} + +void sub_8036674(void) +{ + int menuAction; + + menuAction = -1; + sub_801CA08(0); + if (sub_8012FD8(&gTradeItemsMenu->unk134) == '\0') { + sub_8013114(&gTradeItemsMenu->unk134, &menuAction); + } + switch(menuAction){ + case 3: // confirm + SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_NUMBER); + break; + case 4: // Info + gTradeItemsMenu->unk4 = 0x13; + sub_8006518(&gTradeItemsMenu->unk1E4); + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + sub_801B3C0(&gTradeItemsMenu->unk25C); + SetTradeItemMenu(TRADE_ITEMS_ITEM_INFO); + break; + case 7: + case 0: + // Cancel + sub_8035CC0(gTradeItemsMenu->unk184, 3); + sub_801CCD8(); + SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_SELECTION); + break; + } +} + +void sub_8036728(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + ResetUnusedInputStruct(); + sub_800641C(&gTradeItemsMenu->unk1E4, 1, 1); + sub_801CB5C(1); + if (gTradeItemsMenu->unk4 == 0x13) { + sub_8035CF4(&gTradeItemsMenu->unk44, 3, 1); + SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_POPUP_MENU); + } + else { + SetTradeItemMenu(gTradeItemsMenu->unk4); + } + default: + case 1: + break; + } +} + +void sub_8036788(void) +{ + sub_8012FD8(&gTradeItemsMenu->unk134); + sub_801CA08(0); + switch(sub_8013BBC(&gTradeItemsMenu->unk14)){ + case 1: + // When you change the # + sub_801CCD8(); + sub_8035CF4(&gTradeItemsMenu->unk44, 3, 0); + sub_8036F30(); + break; + case 2: + // If you back out of the # selection + sub_8035CC0(gTradeItemsMenu->unk184, 2); + sub_801CCD8(); + sub_8035CF4(&gTradeItemsMenu->unk44, 3, 1); + SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_POPUP_MENU); + break; + case 3: + // Confirm # of item + gTradeItemsMenu->unk25D = gTradeItemsMenu->unk14; + gTradeItemsMenu->unk254.unk0 = gTradeItemsMenu->unk25E; + gTradeItemsMenu->unk254.unk4 = gTradeItemsMenu->unk14; + sub_801CBB8(); + SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_CONFIRM); + break; + case 0: + break; + } +} + +void sub_8036830(void) +{ + int menuAction; + u16 load; + + if (sub_80144A4(&menuAction) == 0) + { + switch(menuAction){ + case 5: + sub_801CBB8(); + // Used temp var to get correct statements + load = gUnknown_203B460->unk50[gTradeItemsMenu->unk25E]; + load -= gTradeItemsMenu->unk14; + gUnknown_203B460->unk50[gTradeItemsMenu->unk25E] = load; + SetTradeItemMenu(TRADE_ITEMS_PREPARE_TRADE_SAVING); + sub_8012574(0); + break; + case 6: + case 0: + SetTradeItemMenu(TRADE_ITEMS_MAIN_MENU); + break; + } + } +} + +void sub_803689C(void) +{ + int menuAction; + + if (sub_80144A4(&menuAction) == 0) { + switch(menuAction){ + case 5: + SetTradeItemMenu(TRADE_ITEMS_IN_COMMUNICATION); + break; + case 7: + case 0: + SetTradeItemMenu(TRADE_ITEMS_EXIT); + break; + } + } +} + +void sub_80368D4(void) +{ + int menuAction; + + if (sub_80144A4(&menuAction) == 0) { + switch(menuAction){ + case 5: + SetTradeItemMenu(TRADE_ITEMS_IN_COMMUNICATION); + break; + case 7: + case 0: + if ((gTradeItemsMenu->unk254.unk0 != 0) && (gTradeItemsMenu->unk254.unk4 != 0)) + { + sub_80369D0(); + SetTradeItemMenu(0x11); + sub_8012574(0); + } + break; + } + } +} + +void sub_8036934(void) +{ + s32 iVar1; + + if (sub_80144A4(&iVar1) == 0) { + SetTradeItemMenu(10); + } +} + +void sub_8036950(void) +{ + s32 iVar1; + + if (sub_80144A4(&iVar1) == 0) { + if (gTradeItemsMenu->linkStatus == 0) { + switch(gTradeItemsMenu->itemMode){ + case TRADE_ITEMS_SEND_ITEM_MODE: + SetTradeItemMenu(0xd); + break; + case TRADE_ITEMS_RECEIVE_ITEM_MODE: + SetTradeItemMenu(0xe); + break; + default: + break; + } + } + else { + if (((gTradeItemsMenu->itemMode == TRADE_ITEMS_SEND_ITEM_MODE) && (gTradeItemsMenu->unk254.unk0 != 0)) + && (gTradeItemsMenu->unk254.unk4 != 0)) { + // Link Failure + sub_80369D0(); // Add back the item + SetTradeItemMenu(0xb); + sub_8012574(0); + } + else { + PrintTradeItemsLinkError(gTradeItemsMenu->linkStatus); + SetTradeItemMenu(0xc); + } + } + } +} + +void sub_80369D0(void) +{ + // Use temp var to get correct statements + u16 load; + load = gUnknown_203B460->unk50[gTradeItemsMenu->unk254.unk0]; + load += gTradeItemsMenu->unk254.unk4; + gUnknown_203B460->unk50[gTradeItemsMenu->unk254.unk0] = load; +} + +void sub_80369FC(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetTradeItemMenu(TRADE_ITEMS_MAIN_MENU); + } +} + + +void sub_8036A18(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetTradeItemMenu(TRADE_ITEMS_EXIT); + } +} + +void sub_8036A34(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetTradeItemMenu(0x10); + sub_8012574(0); + } +} + +void sub_8036A54(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + if(sub_8012600() == 0) + { + sub_8012750(); + SetTradeItemMenu(TRADE_ITEMS_EXIT); + } + } +} + +void sub_8036A7C(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + if(sub_8012600() == 0) + { + sub_8012750(); // cleans up from Save Message + SetTradeItemMenu(0x8); + } + } +} + +void sub_8036AA4(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + if(sub_8012600() == 0) + { + sub_8012750(); + PrintTradeItemsLinkError(gTradeItemsMenu->linkStatus); + SetTradeItemMenu(0xC); + } + } +} + +void sub_8036ADC(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + if(sub_8012600() == 0) + { + sub_8012750(); + SetTradeItemMenu(TRADE_ITEMS_EXIT); + } + } +} + +void CleanTradeItemsMenu(void) +{ + if(gTradeItemsMenu != NULL) + { + MemoryFree(gTradeItemsMenu); + gTradeItemsMenu = NULL; + sub_801CBB8(); + } +} + +void nullsub_52(void) +{ +} + +#ifdef NONMATCHING +void sub_8036B28(void) +{ + int iVar3; + u32 uVar4; + s32 local_10; + u32 load_1; + u32 load_2; + struct TradeSubStruct *temp; + struct TradeSubStruct *temp2; + + switch(gTradeItemsMenu->currMenu) { + case 0: + if (sub_801CF14(0) != '\0') { + sub_8014248(&gUnknown_80E61A4,0,1,&gUnknown_80E60D4,0,4,0,0,0x101); + } + else { + sub_8014248(&gUnknown_80E61A4,0,1,&gUnknown_80E60A0,0,4,0,0,0x101); + } + break; + case 1: + sub_80141B4(&gUnknown_80E61C0,0,0,0x101); + break; + case 2: + if (sub_801D008() == 0) { + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + local_10 = 0x20003; + sub_801C8C4(0,1,&local_10,9); + } + break; + case 3: + sub_8006518(gTradeItemsMenu->unk184); + SetMenuItems(&gTradeItemsMenu->unk44,gTradeItemsMenu->unk184,3,&gUnknown_80E60EC, + &gUnknown_80E6104,1,0,0); + sub_801CCD8(); + sub_8035CF4(&gTradeItemsMenu->unk44,3,1); + break; + case 4: + sub_8036F74(); + break; + case 6: + gUnknown_202DE30 = gTradeItemsMenu->unk14; + sub_8090DC4(&gUnknown_202DE58,gTradeItemsMenu->unk25E,0); + sub_8014248(&gUnknown_80E61E4,0,5, &gUnknown_80E6154,0,4,0,0,0x101); + break; + case 7: + sub_8014248(&gUnknown_80E6214,0,5,&gUnknown_80E618C,0,4,0,0,0x101); + break; + case 8: + sub_8014248(&gUnknown_80E6268,0,5,&gUnknown_80E618C,0,4,0,0,0x101); + break; + case 9: + nullsub_23(0); + sub_80141B4(&gUnknown_80E62C4,0,0,0); + break; + case 10: + gTradeItemsMenu->linkStatus = 0; + // TODO + // Regs mess up here + // Needs a mov r2, 0 + // and mov r3, 0 + temp = &gTradeItemsMenu->unk244; + temp->unk0 = 0; + temp->unk4 = 0; + + temp += 1; // move to unk24C + + temp->unk0 = 0; + temp->unk4 = 0; + // Regs are fixed back up after + + sub_8011830(); + iVar3 = sub_8037B28(gTradeItemsMenu->itemMode); + gTradeItemsMenu->linkStatus = iVar3; + if(iVar3 == 0){ + switch(gTradeItemsMenu->itemMode){ + // Fallthrough needed on each case + case TRADE_ITEMS_SEND_ITEM_MODE: + temp = &gTradeItemsMenu->unk244; + temp2 = &gTradeItemsMenu->unk254; + load_2 = temp2->unk4; + temp->unk0 = temp2->unk0; + temp->unk4 = load_2; + case TRADE_ITEMS_RECEIVE_ITEM_MODE: + gTradeItemsMenu->linkStatus = sub_8037D64(gTradeItemsMenu->itemMode,&gTradeItemsMenu->unk244,&gTradeItemsMenu->unk24C); + default: + break; + } + } + // Needed this check for code generation + if(gTradeItemsMenu->linkStatus == 0 && gTradeItemsMenu->itemMode <= 1){ + gTradeItemsMenu->linkStatus = sub_80381F4(gTradeItemsMenu->itemMode,&gTradeItemsMenu->unk244,&gTradeItemsMenu->unk24C); + } + xxx_call_start_bg_music(); + break; + case 0xe: + if (gTradeItemsMenu->unk24C.unk4 == 0) { + gUnknown_202DE30 = gTradeItemsMenu->unk244.unk4; + // Cast is needed + sub_8090DC4(&gUnknown_202DE58,(u8)gTradeItemsMenu->unk244.unk0,0); + } + else { + gUnknown_202DE30 = gTradeItemsMenu->unk24C.unk4; + // Cast is needed + sub_8090DC4(&gUnknown_202DE58,(u8)gTradeItemsMenu->unk24C.unk0,0); + } + sub_80141B4(&gUnknown_80E6314,0,0,0x101); + break; + case 0xd: + gUnknown_202DE30 = gTradeItemsMenu->unk14; + sub_8090DC4(&gUnknown_202DE58,gTradeItemsMenu->unk25E,0); + sub_80141B4(&gUnknown_80E6358,0,0,0x101); + break; + case 0xB: + case 0xC: + case 0xF: + case 0x10: + case 0x11: + case 0x12: + default: + break; + } +} +#else +NAKED +void sub_8036B28(void) +{ + asm_unified("\tpush {r4,r5,lr}\n" + "\tsub sp, 0x18\n" + "\tldr r1, _08036B44\n" + "\tldr r0, [r1]\n" + "\tldr r0, [r0]\n" + "\tadds r5, r1, 0\n" + "\tcmp r0, 0x12\n" + "\tbls _08036B3A\n" + "\tb _08036DFA\n" +"_08036B3A:\n" + "\tlsls r0, 2\n" + "\tldr r1, _08036B48\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" +"_08036B44: .4byte gTradeItemsMenu\n" +"_08036B48: .4byte _08036B4C\n" + "\t.align 2, 0\n" +"_08036B4C:\n" + "\t.4byte _08036B98\n" + "\t.4byte _08036BDC\n" + "\t.4byte _08036BE4\n" + "\t.4byte _08036C14\n" + "\t.4byte _08036C58\n" + "\t.4byte _08036DFA\n" + "\t.4byte _08036C5E\n" + "\t.4byte _08036C90\n" + "\t.4byte _08036C98\n" + "\t.4byte _08036CC0\n" + "\t.4byte _08036CD8\n" + "\t.4byte _08036DFA\n" + "\t.4byte _08036DFA\n" + "\t.4byte _08036DD8\n" + "\t.4byte _08036D70\n" + "\t.4byte _08036DFA\n" + "\t.4byte _08036DFA\n" + "\t.4byte _08036DFA\n" + "\t.4byte _08036DFA\n" +"_08036B98:\n" + "\tmovs r0, 0\n" + "\tbl sub_801CF14\n" + "\tlsls r0, 24\n" + "\tlsrs r2, r0, 24\n" + "\tcmp r2, 0\n" + "\tbeq _08036BB8\n" + "\tldr r0, _08036BB0\n" + "\tldr r3, _08036BB4\n" + "\tmovs r2, 0\n" + "\tb _08036BBC\n" + "\t.align 2, 0\n" +"_08036BB0: .4byte gUnknown_80E61A4\n" +"_08036BB4: .4byte gUnknown_80E60D4\n" +"_08036BB8:\n" + "\tldr r0, _08036BD4\n" + "\tldr r3, _08036BD8\n" +"_08036BBC:\n" + "\tstr r2, [sp]\n" + "\tmovs r1, 0x4\n" + "\tstr r1, [sp, 0x4]\n" + "\tstr r2, [sp, 0x8]\n" + "\tstr r2, [sp, 0xC]\n" + "\tadds r1, 0xFD\n" + "\tstr r1, [sp, 0x10]\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0x1\n" + "\tbl sub_8014248\n" + "\tb _08036DFA\n" + "\t.align 2, 0\n" +"_08036BD4: .4byte gUnknown_80E61A4\n" +"_08036BD8: .4byte gUnknown_80E60A0\n" +"_08036BDC:\n" + "\tldr r0, _08036BE0\n" + "\tb _08036DBA\n" + "\t.align 2, 0\n" +"_08036BE0: .4byte gUnknown_80E61C0\n" +"_08036BE4:\n" + "\tbl sub_801D008\n" + "\tcmp r0, 0\n" + "\tbeq _08036BEE\n" + "\tb _08036DFA\n" +"_08036BEE:\n" + "\tbl ResetUnusedInputStruct\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tldr r0, _08036C10\n" + "\tstr r0, [sp, 0x14]\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0x1\n" + "\tadd r2, sp, 0x14\n" + "\tmovs r3, 0x9\n" + "\tbl sub_801C8C4\n" + "\tb _08036DFA\n" + "\t.align 2, 0\n" +"_08036C10: .4byte 0x00020003\n" +"_08036C14:\n" + "\tldr r0, [r5]\n" + "\tmovs r4, 0xC2\n" + "\tlsls r4, 1\n" + "\tadds r0, r4\n" + "\tbl sub_8006518\n" + "\tldr r1, [r5]\n" + "\tadds r0, r1, 0\n" + "\tadds r0, 0x44\n" + "\tadds r1, r4\n" + "\tldr r3, _08036C50\n" + "\tldr r2, _08036C54\n" + "\tstr r2, [sp]\n" + "\tmovs r2, 0x1\n" + "\tstr r2, [sp, 0x4]\n" + "\tmovs r2, 0\n" + "\tstr r2, [sp, 0x8]\n" + "\tstr r2, [sp, 0xC]\n" + "\tmovs r2, 0x3\n" + "\tbl SetMenuItems\n" + "\tbl sub_801CCD8\n" + "\tldr r0, [r5]\n" + "\tadds r0, 0x44\n" + "\tmovs r1, 0x3\n" + "\tmovs r2, 0x1\n" + "\tbl sub_8035CF4\n" + "\tb _08036DFA\n" + "\t.align 2, 0\n" +"_08036C50: .4byte gUnknown_80E60EC\n" +"_08036C54: .4byte gUnknown_80E6104\n" +"_08036C58:\n" + "\tbl sub_8036F74\n" + "\tb _08036DFA\n" +"_08036C5E:\n" + "\tldr r2, _08036C7C\n" + "\tldr r1, [r5]\n" + "\tldr r0, [r1, 0x14]\n" + "\tstr r0, [r2]\n" + "\tldr r0, _08036C80\n" + "\tldr r2, _08036C84\n" + "\tadds r1, r2\n" + "\tldrb r1, [r1]\n" + "\tmovs r2, 0\n" + "\tbl sub_8090DC4\n" + "\tldr r0, _08036C88\n" + "\tldr r3, _08036C8C\n" + "\tb _08036C9C\n" + "\t.align 2, 0\n" +"_08036C7C: .4byte gUnknown_202DE30\n" +"_08036C80: .4byte gUnknown_202DE58\n" +"_08036C84: .4byte 0x0000025e\n" +"_08036C88: .4byte gUnknown_80E61E4\n" +"_08036C8C: .4byte gUnknown_80E6154\n" +"_08036C90:\n" + "\tldr r0, _08036C94\n" + "\tb _08036C9A\n" + "\t.align 2, 0\n" +"_08036C94: .4byte gUnknown_80E6214\n" +"_08036C98:\n" + "\tldr r0, _08036CB8\n" +"_08036C9A:\n" + "\tldr r3, _08036CBC\n" +"_08036C9C:\n" + "\tmovs r2, 0\n" + "\tstr r2, [sp]\n" + "\tmovs r1, 0x4\n" + "\tstr r1, [sp, 0x4]\n" + "\tstr r2, [sp, 0x8]\n" + "\tstr r2, [sp, 0xC]\n" + "\tadds r1, 0xFD\n" + "\tstr r1, [sp, 0x10]\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0x5\n" + "\tbl sub_8014248\n" + "\tb _08036DFA\n" + "\t.align 2, 0\n" +"_08036CB8: .4byte gUnknown_80E6268\n" +"_08036CBC: .4byte gUnknown_80E618C\n" +"_08036CC0:\n" + "\tmovs r0, 0\n" + "\tbl nullsub_23\n" + "\tldr r0, _08036CD4\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl sub_80141B4\n" + "\tb _08036DFA\n" + "\t.align 2, 0\n" +"_08036CD4: .4byte gUnknown_80E62C4\n" +"_08036CD8:\n" + "\tldr r4, _08036D18\n" + "\tldr r1, [r4]\n" + "\tmovs r0, 0\n" + "\tstr r0, [r1, 0xC]\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tmovs r5, 0x91\n" + "\tlsls r5, 2\n" + "\tadds r0, r1, r5\n" + "\tstr r2, [r0]\n" + "\tstr r3, [r0, 0x4]\n" + "\tmovs r0, 0x93\n" + "\tlsls r0, 2\n" + "\tadds r1, r0\n" + "\tstr r2, [r1]\n" + "\tstr r3, [r1, 0x4]\n" + "\tbl sub_8011830\n" + "\tldr r0, [r4]\n" + "\tldr r0, [r0, 0x8]\n" + "\tbl sub_8037B28\n" + "\tldr r4, [r4]\n" + "\tstr r0, [r4, 0xC]\n" + "\tcmp r0, 0\n" + "\tbne _08036D44\n" + "\tldr r0, [r4, 0x8]\n" + "\tcmp r0, 0\n" + "\tbeq _08036D1C\n" + "\tcmp r0, 0x1\n" + "\tbeq _08036D2C\n" + "\tb _08036D44\n" + "\t.align 2, 0\n" +"_08036D18: .4byte gTradeItemsMenu\n" +"_08036D1C:\n" + "\tadds r2, r4, r5\n" + "\tmovs r1, 0x95\n" + "\tlsls r1, 2\n" + "\tadds r0, r4, r1\n" + "\tldr r1, [r0, 0x4]\n" + "\tldr r0, [r0]\n" + "\tstr r0, [r2]\n" + "\tstr r1, [r2, 0x4]\n" +"_08036D2C:\n" + "\tldr r4, _08036D6C\n" + "\tldr r2, [r4]\n" + "\tldr r0, [r2, 0x8]\n" + "\tmovs r3, 0x91\n" + "\tlsls r3, 2\n" + "\tadds r1, r2, r3\n" + "\tadds r3, 0x8\n" + "\tadds r2, r3\n" + "\tbl sub_8037D64\n" + "\tldr r1, [r4]\n" + "\tstr r0, [r1, 0xC]\n" +"_08036D44:\n" + "\tldr r4, _08036D6C\n" + "\tldr r2, [r4]\n" + "\tldr r0, [r2, 0xC]\n" + "\tcmp r0, 0\n" + "\tbne _08036D66\n" + "\tldr r0, [r2, 0x8]\n" + "\tcmp r0, 0x1\n" + "\tbhi _08036D66\n" + "\tmovs r3, 0x91\n" + "\tlsls r3, 2\n" + "\tadds r1, r2, r3\n" + "\tadds r3, 0x8\n" + "\tadds r2, r3\n" + "\tbl sub_80381F4\n" + "\tldr r1, [r4]\n" + "\tstr r0, [r1, 0xC]\n" +"_08036D66:\n" + "\tbl xxx_call_start_bg_music\n" + "\tb _08036DFA\n" + "\t.align 2, 0\n" +"_08036D6C: .4byte gTradeItemsMenu\n" +"_08036D70:\n" + "\tldr r2, [r5]\n" + "\tmovs r1, 0x94\n" + "\tlsls r1, 2\n" + "\tadds r0, r2, r1\n" + "\tldr r1, [r0]\n" + "\tcmp r1, 0\n" + "\tbne _08036DA4\n" + "\tldr r1, _08036D9C\n" + "\tmovs r3, 0x92\n" + "\tlsls r3, 2\n" + "\tadds r0, r2, r3\n" + "\tldr r0, [r0]\n" + "\tstr r0, [r1]\n" + "\tldr r0, _08036DA0\n" + "\tsubs r3, 0x4\n" + "\tadds r1, r2, r3\n" + "\tldrb r1, [r1]\n" + "\tmovs r2, 0\n" + "\tbl sub_8090DC4\n" + "\tb _08036DB8\n" + "\t.align 2, 0\n" +"_08036D9C: .4byte gUnknown_202DE30\n" +"_08036DA0: .4byte gUnknown_202DE58\n" +"_08036DA4:\n" + "\tldr r0, _08036DC8\n" + "\tstr r1, [r0]\n" + "\tldr r0, _08036DCC\n" + "\tmovs r3, 0x93\n" + "\tlsls r3, 2\n" + "\tadds r1, r2, r3\n" + "\tldrb r1, [r1]\n" + "\tmovs r2, 0\n" + "\tbl sub_8090DC4\n" +"_08036DB8:\n" + "\tldr r0, _08036DD0\n" +"_08036DBA:\n" + "\tldr r3, _08036DD4\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tbl sub_80141B4\n" + "\tb _08036DFA\n" + "\t.align 2, 0\n" +"_08036DC8: .4byte gUnknown_202DE30\n" +"_08036DCC: .4byte gUnknown_202DE58\n" +"_08036DD0: .4byte gUnknown_80E6314\n" +"_08036DD4: .4byte 0x00000101\n" +"_08036DD8:\n" + "\tldr r2, _08036E04\n" + "\tldr r1, [r5]\n" + "\tldr r0, [r1, 0x14]\n" + "\tstr r0, [r2]\n" + "\tldr r0, _08036E08\n" + "\tldr r2, _08036E0C\n" + "\tadds r1, r2\n" + "\tldrb r1, [r1]\n" + "\tmovs r2, 0\n" + "\tbl sub_8090DC4\n" + "\tldr r0, _08036E10\n" + "\tldr r3, _08036E14\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tbl sub_80141B4\n" +"_08036DFA:\n" + "\tadd sp, 0x18\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_08036E04: .4byte gUnknown_202DE30\n" +"_08036E08: .4byte gUnknown_202DE58\n" +"_08036E0C: .4byte 0x0000025e\n" +"_08036E10: .4byte gUnknown_80E6358\n" +"_08036E14: .4byte 0x00000101"); +} +#endif + +void PrintTradeItemsLinkError(u32 errorNum) +{ + switch(errorNum) { + case 0: + break; + case 1: + sub_80141B4(&gTradeItemsCommunicationError, 0, 0, 0x101); + break; + case 3: + sub_80141B4(&gUnknown_80E639C, 0, 0, 0x101); + break; + case 2: + sub_80141B4(&gUnknown_80E63F8, 0, 0, 0x101); + break; + case 4: + sub_80141B4(&gUnknown_80E6448, 0, 0, 0x101); + break; + case 5: + sub_80141B4(&gTradeItemsCommunicationError, 0, 0, 0x101); + break; + case 0xe: + sub_80141B4(&gTradeItemsCommunicationError, 0, 0, 0x101); + break; + case 0xf: + sub_80141B4(&gUnknown_80E64AC, 0, 0, 0x101); + break; + default: + case 0x6: + case 0x7: + case 0x8: + case 0x9: + case 0xA: + case 0xB: + case 0xC: + case 0xD: + sub_80141B4(&gTradeItemsCommunicationError, 0, 0, 0x101); + break; + } +} + +void sub_8036ECC(u32 index, u32 r1) +{ + gTradeItemsMenu->unk24 = 3; + gTradeItemsMenu->unk18 = 1; + gTradeItemsMenu->unk1C = 1; + gTradeItemsMenu->unk20 = r1; + gTradeItemsMenu->unk30 = 0x2c; + gTradeItemsMenu->unk34 = 0x12; + gTradeItemsMenu->unk28 = index; + gTradeItemsMenu->unk2C = &gTradeItemsMenu->unk184[index]; + sub_8013AA0(&gTradeItemsMenu->unk14); + gTradeItemsMenu->unk184[index] = gUnknown_80E6174; + ResetUnusedInputStruct(); + sub_800641C((u32 *)&gTradeItemsMenu->unk184, 1, 1); +} + +void sub_8036F30(void) +{ + u32 uVar1; + + uVar1 = gTradeItemsMenu->unk28; + sub_8008C54(uVar1); + sub_80073B8(uVar1); + // Draw "How many?" + xxx_call_draw_string(2, 0, &gTradeItemsHowManyText, uVar1, 0); + sub_8013C68(&gTradeItemsMenu->unk14); + sub_80073E0(uVar1); +} + +void sub_8036F74(void) +{ + sub_8006518((u32 *)&gTradeItemsMenu->unk184); + sub_8036ECC(2, gUnknown_203B460->unk50[gTradeItemsMenu->unk25E]); + sub_801CCD8(); + sub_8035CF4(&gTradeItemsMenu->unk44, 3, 0); + sub_8036F30(); +} + +void SetTradeItemMenu(u32 newMenu) +{ + gTradeItemsMenu->currMenu = newMenu; + nullsub_52(); + sub_8036B28(); +} |