diff --git a/asm/code_801EE10.s b/asm/code_801EE10.s index 4bbae13c2..b274b8295 100644 --- a/asm/code_801EE10.s +++ b/asm/code_801EE10.s @@ -7753,174 +7753,4 @@ _08022D22: bx r0 thumb_func_end sub_8022A10 - thumb_func_start sub_8022D2C -sub_8022D2C: - push {r4-r7,lr} - movs r6, 0 - ldr r4, _08022D78 - ldr r0, [r4] - movs r1, 0x9C - lsls r1, 1 - adds r0, r1 - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r2, [r4] - ldr r0, [r2, 0x48] - cmp r0, 0 - beq _08022D80 - adds r1, r2, 0 - adds r1, 0xF8 - ldr r0, _08022D7C - str r0, [r1] - adds r1, 0x4 - movs r0, 0x5 - str r0, [r1] - adds r0, r2, 0 - adds r0, 0x52 - ldrb r0, [r0] - bl IsGummiItem - lsls r0, 24 - cmp r0, 0 - bne _08022D74 - ldr r0, [r4] - movs r2, 0x9C - lsls r2, 1 - adds r0, r2 - movs r1, 0x1 - strh r1, [r0] -_08022D74: - movs r6, 0x1 - b _08022DBE - .align 2, 0 -_08022D78: .4byte gUnknown_203B294 -_08022D7C: .4byte gUnknown_80DC8F0 -_08022D80: - adds r0, r2, 0 - adds r0, 0x52 - ldrb r0, [r0] - bl GetItemCategory - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x5 - bne _08022DA4 - ldr r1, [r4] - adds r2, r1, 0 - adds r2, 0xF8 - ldr r0, _08022E38 - str r0, [r2] - adds r1, 0xFC - movs r0, 0x6 - str r0, [r1] - movs r6, 0x1 -_08022DA4: - ldr r2, [r4] - lsls r3, r6, 3 - adds r0, r2, 0 - adds r0, 0xF8 - adds r0, r3 - ldr r1, _08022E3C - ldr r1, [r1] - str r1, [r0] - adds r2, 0xFC - adds r2, r3 - movs r0, 0x4 - str r0, [r2] - adds r6, 0x1 -_08022DBE: - ldr r4, _08022E40 - ldr r0, [r4] - mov r12, r0 - lsls r1, r6, 3 - mov r2, r12 - adds r2, 0xF8 - adds r3, r2, r1 - ldr r0, _08022E44 - ldr r0, [r0] - str r0, [r3] - mov r3, r12 - adds r3, 0xFC - adds r1, r3, r1 - movs r0, 0x7 - str r0, [r1] - adds r6, 0x1 - lsls r1, r6, 3 - adds r2, r1 - movs r0, 0 - str r0, [r2] - adds r1, r3, r1 - movs r0, 0x1 - str r0, [r1] - movs r5, 0 - adds r7, r4, 0 - cmp r5, r6 - bge _08022E16 - mov r4, r12 - adds r4, 0xF4 - movs r2, 0x9C - lsls r2, 1 - add r2, r12 -_08022DFE: - ldrh r0, [r2] - cmp r0, 0 - bne _08022E0C - ldr r1, [r3] - ldr r0, [r4] - cmp r1, r0 - beq _08022E70 -_08022E0C: - adds r2, 0x2 - adds r3, 0x8 - adds r5, 0x1 - cmp r5, r6 - blt _08022DFE -_08022E16: - movs r5, 0 - cmp r5, r6 - bge _08022E70 - ldr r1, [r7] - movs r2, 0x9C - lsls r2, 1 - adds r0, r1, r2 - ldrh r0, [r0] - cmp r0, 0 - bne _08022E48 - adds r0, r1, 0 - adds r0, 0xF4 - adds r1, 0xFC - ldr r1, [r1] - str r1, [r0] - b _08022E70 - .align 2, 0 -_08022E38: .4byte gUnknown_80DC8F8 -_08022E3C: .4byte gUnknown_80D4940 -_08022E40: .4byte gUnknown_203B294 -_08022E44: .4byte gUnknown_80D4970 -_08022E48: - adds r5, 0x1 - cmp r5, r6 - bge _08022E70 - ldr r3, [r7] - lsls r0, r5, 1 - movs r2, 0x9C - lsls r2, 1 - adds r1, r3, r2 - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _08022E48 - adds r2, r3, 0 - adds r2, 0xF4 - lsls r1, r5, 3 - adds r0, r3, 0 - adds r0, 0xFC - adds r0, r1 - ldr r0, [r0] - str r0, [r2] -_08022E70: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8022D2C - .align 2,0 diff --git a/asm/wonder_mail_802C860.s b/asm/wonder_mail_802C860.s deleted file mode 100644 index c571c3491..000000000 --- a/asm/wonder_mail_802C860.s +++ /dev/null @@ -1,147 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_802CAA4 -sub_802CAA4: - push {r4-r7,lr} - movs r7, 0 - ldr r5, _0802CAC8 - ldr r0, [r5] - ldrb r0, [r0, 0xC] - bl GetJobSlotInfo - adds r4, r0, 0 - ldr r2, [r5] - ldr r0, [r2] - cmp r0, 0 - bne _0802CB26 - ldrb r0, [r4] - cmp r0, 0x5 - beq _0802CACC - cmp r0, 0x6 - beq _0802CB10 - b _0802CB26 - .align 2, 0 -_0802CAC8: .4byte gUnknown_203B2F0 -_0802CACC: - movs r0, 0x86 - lsls r0, 1 - adds r1, r2, r0 - ldr r0, _0802CAFC - str r0, [r1] - adds r0, r4, 0 - bl sub_809693C - lsls r0, 24 - cmp r0, 0 - bne _0802CAEE - ldrb r0, [r4, 0x4] - bl sub_80A2824 - lsls r0, 24 - cmp r0, 0 - bne _0802CB00 -_0802CAEE: - ldr r0, [r5] - movs r1, 0x88 - lsls r1, 1 - adds r0, r1 - movs r1, 0x1 - negs r1, r1 - b _0802CB0A - .align 2, 0 -_0802CAFC: .4byte gUnknown_80DFD70 -_0802CB00: - ldr r0, [r5] - movs r1, 0x88 - lsls r1, 1 - adds r0, r1 - movs r1, 0x2 -_0802CB0A: - str r1, [r0] - adds r7, 0x1 - b _0802CB26 -_0802CB10: - movs r0, 0x86 - lsls r0, 1 - adds r1, r2, r0 - ldr r0, _0802CB9C - str r0, [r1] - movs r0, 0x88 - lsls r0, 1 - adds r1, r2, r0 - movs r0, 0x3 - str r0, [r1] - movs r7, 0x1 -_0802CB26: - ldr r4, _0802CBA0 - ldr r6, [r4] - lsls r1, r7, 3 - movs r0, 0x86 - lsls r0, 1 - adds r3, r6, r0 - adds r2, r3, r1 - ldr r0, _0802CBA4 - ldr r0, [r0] - str r0, [r2] - movs r0, 0x88 - lsls r0, 1 - adds r5, r6, r0 - adds r1, r5, r1 - movs r0, 0x4 - str r0, [r1] - adds r7, 0x1 - lsls r1, r7, 3 - adds r2, r3, r1 - ldr r0, _0802CBA8 - ldr r0, [r0] - str r0, [r2] - adds r1, r5, r1 - movs r0, 0x7 - str r0, [r1] - adds r7, 0x1 - lsls r1, r7, 3 - adds r3, r1 - movs r0, 0 - str r0, [r3] - adds r1, r5, r1 - movs r0, 0x1 - str r0, [r1] - movs r3, 0 - mov r12, r4 - cmp r3, r7 - bge _0802CB8C - adds r4, r6, 0 - adds r1, r5, 0 - movs r5, 0x1 - negs r5, r5 -_0802CB78: - ldr r2, [r1] - cmp r2, r5 - beq _0802CB84 - ldr r0, [r4, 0x68] - cmp r2, r0 - beq _0802CB94 -_0802CB84: - adds r1, 0x8 - adds r3, 0x1 - cmp r3, r7 - blt _0802CB78 -_0802CB8C: - mov r0, r12 - ldr r1, [r0] - movs r0, 0x7 - str r0, [r1, 0x68] -_0802CB94: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802CB9C: .4byte gUnknown_80DFD7C -_0802CBA0: .4byte gUnknown_203B2F0 -_0802CBA4: .4byte gUnknown_80D494C -_0802CBA8: .4byte gUnknown_80D4970 - thumb_func_end sub_802CAA4 - - .align 2,0 diff --git a/include/constants/mailbox.h b/include/constants/mailbox.h index 8f961f501..8d57c1f6e 100644 --- a/include/constants/mailbox.h +++ b/include/constants/mailbox.h @@ -4,4 +4,18 @@ #define MAX_ACCEPTED_JOBS 8 #define NUM_MAILBOX_SLOTS 4 +enum JOB_LIST_MAIL_TYPES +{ + MAIL_TYPE_NONE = 0, + MAIL_TYPE_UNK1, + MAIL_TYPE_UNK2, + MAIL_TYPE_UNK3, + MAIL_TYPE_UNK4, + MAIL_TYPE_SUSPENDED_JOB = 5, + MAIL_TYPE_TAKEN_JOB, + MAIL_TYPE_UNK7, + MAIL_TYPE_UNK8, + MAIL_TYPE_UNK9, +}; + #endif // GUARD_CONSTANTS_MAILBOX_H diff --git a/include/subStruct_203B240.h b/include/subStruct_203B240.h index 040eb66e8..882102e1f 100644 --- a/include/subStruct_203B240.h +++ b/include/subStruct_203B240.h @@ -3,8 +3,9 @@ struct subStruct_203B240 { - char * unk0; + char * pokeName; char * unk4; }; -#endif \ No newline at end of file + +#endif diff --git a/include/wonder_mail_3.h b/include/wonder_mail_3.h index 8e1d7097e..47689a8dd 100644 --- a/include/wonder_mail_3.h +++ b/include/wonder_mail_3.h @@ -43,7 +43,6 @@ struct unkStruct_203B2F8 u8 unkB; struct unkSubStruct_203B2F8 *mail; u8 jobSlotIndex; - u8 fill11[0x14 - 0x11]; struct unkStruct_802C39C unk14; u32 menuAction1; u32 menuAction2; diff --git a/ld_script.txt b/ld_script.txt index 7d485cd68..4c667feb0 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -134,7 +134,6 @@ SECTIONS { src/pokemon_news.o(.text); src/wonder_mail_2_mid.o(.text); src/wonder_mail_2_1.o(.text); - asm/wonder_mail_802C860.o(.text); src/wonder_mail_3.o(.text); src/wonder_mail_802DF88.o(.text); src/mailbox.o(.text); diff --git a/src/code_801B3C0.c b/src/code_801B3C0.c index f36649b6c..adbe68178 100644 --- a/src/code_801B3C0.c +++ b/src/code_801B3C0.c @@ -8,12 +8,7 @@ #include "pokemon.h" #include "team_inventory.h" #include "menu_input.h" - -struct subStruct_203B240 -{ - char * pokeName; - char * unk4; -}; +#include "subStruct_203B240.h" // based off of 203B240.. struct unkStruct_203B230 diff --git a/src/code_801C620.c b/src/code_801C620.c index 5a6c79adb..0af5935df 100644 --- a/src/code_801C620.c +++ b/src/code_801C620.c @@ -121,7 +121,6 @@ struct unk_203B250 u8 unk7; u8 unk8; u8 unk9; - u8 fillA[0xC - 0xA]; struct PokemonStruct *unkC; u32 state; u32 menuAction; @@ -914,7 +913,7 @@ void sub_801C6E4(void) sub_8008C54(gUnknown_203B240->unk24); sub_80073B8(gUnknown_203B240->unk24); preload = gUnknown_203B240->unk10[gUnknown_203B240->unk8]; - strcpy(gAvailablePokemonNames,preload->unk0); + strcpy(gAvailablePokemonNames,preload->pokeName); xxx_format_and_draw(16,0,gUnknown_80DBE30,gUnknown_203B240->unk24,0); // {ARG_POKEMON_0} xxx_format_and_draw(4,16,gUnknown_203B240->unk10[gUnknown_203B240->unk8]->unk4, gUnknown_203B240->unk24,0); sub_80073E0(gUnknown_203B240->unk24); diff --git a/src/code_8023144.c b/src/code_8023144.c index 8ea1fa449..709606e06 100644 --- a/src/code_8023144.c +++ b/src/code_8023144.c @@ -71,20 +71,25 @@ struct unkStruct_203B294 struct MenuStruct unk54; struct MenuStruct unkA4; u32 menuAction; - u32 unkF8; - u16 unkFC; + struct MenuItem unkF8[0x8]; + u16 unk138[0x8]; }; struct unkStruct_203B294 *gUnknown_203B294; extern u8 gUnknown_80DC5EC[]; extern u8 gUnknown_202DE58[]; +extern u8 gUnknown_80DC8F0[]; +extern u8 gUnknown_80DC8F8[]; +extern u8 *gUnknown_80D4940[]; +extern u8 *gUnknown_80D4970[]; extern void sub_8022924(s32); extern s32 sub_80144A4(s32 *); extern u32 sub_801B00C(void); extern void sub_801B048(void); extern u32 sub_801B410(void); extern void sub_801B450(void); + void GetGummiItemStatBoost(struct PokemonStruct* pokemon, u8 id, bool8 checkBoostFlags, struct Gummi* gummi); extern u32 sub_801A6E8(u32); @@ -93,6 +98,56 @@ extern void sub_801A928(void); s32 GetNumAvailableIQSkills(u8 *iqSkillBuffer, s32 pokeIQ); extern u32 sub_801A8AC(void); +void sub_8022D2C(void) { + s32 index; + s32 loopMax = 0; + MemoryFill16(gUnknown_203B294->unk138, 0, sizeof(gUnknown_203B294->unk138)); + if(gUnknown_203B294->pokeStruct) + { + gUnknown_203B294->unkF8[loopMax].text = gUnknown_80DC8F0; + gUnknown_203B294->unkF8[loopMax].menuAction = 5; + if(!IsGummiItem(gUnknown_203B294->item.id)) + { + gUnknown_203B294->unk138[loopMax] = 1; + } + loopMax += 1; + } + else { + if(GetItemCategory(gUnknown_203B294->item.id) == 5) + { + gUnknown_203B294->unkF8[loopMax].text = gUnknown_80DC8F8; + gUnknown_203B294->unkF8[loopMax].menuAction = 6; + loopMax += 1; + } + gUnknown_203B294->unkF8[loopMax].text = *gUnknown_80D4940; + gUnknown_203B294->unkF8[loopMax].menuAction = 4; + loopMax += 1; + } + gUnknown_203B294->unkF8[loopMax].text = *gUnknown_80D4970; + gUnknown_203B294->unkF8[loopMax].menuAction = 7; + loopMax += 1; + gUnknown_203B294->unkF8[loopMax].text = NULL; + gUnknown_203B294->unkF8[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B294->unk138[index] == 0) + { + if(gUnknown_203B294->unkF8[index].menuAction == gUnknown_203B294->menuAction) + return; + } + } + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B294->unk138[index] == 0) + { + gUnknown_203B294->menuAction = gUnknown_203B294->unkF8[index].menuAction; + break; + } + } +} + void sub_8022E78(void) { switch(sub_801A6E8(1)) diff --git a/src/code_80958E8_1.c b/src/code_80958E8_1.c index c75b0a26b..e4a14c907 100644 --- a/src/code_80958E8_1.c +++ b/src/code_80958E8_1.c @@ -1,3 +1,4 @@ +#include "constants/mailbox.h" #include "global.h" #include "constants/dungeon.h" #include "constants/monster.h" @@ -35,11 +36,11 @@ void SortPelipperJobs(void) struct WonderMail mail; - for(index1 = 0; index1 < 7; index1++) + for(index1 = 0; index1 < MAX_ACCEPTED_JOBS - 1; index1++) { - for(index2 = index1 + 1; index2 < 8; index2++) + for(index2 = index1 + 1; index2 < MAX_ACCEPTED_JOBS; index2++) { - if(gUnknown_203B490->pelipperBoardJobs[index2].mailType != WONDER_MAIL_TYPE_NONE) + if(gUnknown_203B490->pelipperBoardJobs[index2].mailType != MAIL_TYPE_NONE) { if((gUnknown_203B490->pelipperBoardJobs[index1].dungeon.id > gUnknown_203B490->pelipperBoardJobs[index2].dungeon.id) || ((gUnknown_203B490->pelipperBoardJobs[index1].dungeon.id == gUnknown_203B490->pelipperBoardJobs[index2].dungeon.id) && (gUnknown_203B490->pelipperBoardJobs[index1].dungeon.floor > gUnknown_203B490->pelipperBoardJobs[index2].dungeon.floor))) @@ -60,15 +61,15 @@ void GeneratePelipperJobs(void) s32 index; range = RandRange(4,8); - for(index = 0; index < 8; index++) + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { - gUnknown_203B490->pelipperBoardJobs[index].mailType = WONDER_MAIL_TYPE_NONE; + gUnknown_203B490->pelipperBoardJobs[index].mailType = MAIL_TYPE_NONE; } index = 0; if (sub_8097318(0xe) != 0) { mail = GetPelipperBoardSlotInfo(0); - mail->mailType = 2; + mail->mailType = MAIL_TYPE_UNK2; mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; mail->unk2 = 1; mail->dungeon.id = DUNGEON_UPROAR_FOREST; @@ -86,7 +87,7 @@ void GeneratePelipperJobs(void) if (sub_8097318(0xf) != 0) { mail = GetPelipperBoardSlotInfo(index); - mail->mailType = 3; + mail->mailType = MAIL_TYPE_UNK3; mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; mail->unk2 = 2; mail->dungeon.id = DUNGEON_HOWLING_FOREST; @@ -103,7 +104,7 @@ void GeneratePelipperJobs(void) if (sub_8097318(0x1c) != 0) { mail = GetPelipperBoardSlotInfo(index); - mail->mailType = 4; + mail->mailType = MAIL_TYPE_UNK4; mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; mail->unk2 = 3; mail->dungeon.id = DUNGEON_WISH_CAVE; @@ -130,9 +131,9 @@ bool8 IsMailinJobSlot(struct WonderMail *mail) struct WonderMail *jobSlot; s32 index; - for(index = 0, jobSlot = &gUnknown_203B490->jobSlots[0]; index < 8; jobSlot++, index++) + for(index = 0, jobSlot = &gUnknown_203B490->jobSlots[0]; index < MAX_ACCEPTED_JOBS; jobSlot++, index++) { - if(jobSlot->mailType != WONDER_MAIL_TYPE_NONE) + if(jobSlot->mailType != MAIL_TYPE_NONE) if(mail->missionType == jobSlot->missionType) if(mail->unk2 == jobSlot->unk2) if(mail->dungeon.id == jobSlot->dungeon.id) @@ -166,9 +167,9 @@ bool8 sub_809693C(struct WonderMail *mail) { if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) escortMission = TRUE; - for(index = 0; index < 8; index++) + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { - if ((gUnknown_203B490->jobSlots[index].mailType == 6) && + if ((gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_TAKEN_JOB) && (sub_8095E38(&gUnknown_203B490->jobSlots[index],dungeonIndex,floor,escortMission) != 0)) { return TRUE; @@ -184,7 +185,7 @@ s32 GetNumAcceptedJobs(void) s32 count; count = 0; - for(index = 0; index < 8; index++) + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { if (!IsJobSlotEmpty(index)) { count++; @@ -200,11 +201,11 @@ s32 CountJobsinDungeon(u8 dungeon) s32 count; count = 0; - for(index = 0; index < 8; index++) + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { mail = GetJobSlotInfo(index); if ((mail->dungeon.id == dungeon) && - (((mail->mailType == 6 || (mail->mailType == 8)) || (mail->mailType == 9)))) { + (((mail->mailType == MAIL_TYPE_TAKEN_JOB || (mail->mailType == MAIL_TYPE_UNK8)) || (mail->mailType == MAIL_TYPE_UNK9)))) { count++; } } @@ -218,11 +219,11 @@ bool8 sub_8096A08(u8 dungeon, s32 param_2) u32 local_14; s32 temp; - for(index = 0; index < 8; index++) + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { mail = GetJobSlotInfo(index); if(mail->dungeon.id == dungeon) - if(mail->mailType == 6) + if(mail->mailType == MAIL_TYPE_TAKEN_JOB) if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) { temp = 0xffffff00; @@ -246,9 +247,9 @@ bool8 AcceptJob(struct WonderMail *mail) { s32 index; - for(index = 0; index < 8; index++) + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { - if(gUnknown_203B490->jobSlots[index].mailType == WONDER_MAIL_TYPE_NONE) + if(gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_NONE) { gUnknown_203B490->jobSlots[index] = *mail; return FALSE; @@ -264,7 +265,7 @@ struct WonderMail *GetJobSlotInfo(u8 index) bool8 IsJobSlotEmpty(u8 index) { - if(gUnknown_203B490->jobSlots[index].mailType == WONDER_MAIL_TYPE_NONE) + if(gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_NONE) return TRUE; else return FALSE; @@ -283,7 +284,7 @@ void sub_8096AF8(struct unkStruct_8096AF8 *param_1, u8 slotIndex,u8 dungeon) if (jobSlot->dungeon.id == dungeon) { switch(jobSlot->missionType) { case WONDER_MAIL_MISSION_TYPE_FIND_ITEM: - if (jobSlot->mailType == 6) { + if (jobSlot->mailType == MAIL_TYPE_TAKEN_JOB) { for(index = 0; index < INVENTORY_SIZE; index++) { item = &gTeamInventory_203B460->teamItems[index]; @@ -295,13 +296,13 @@ void sub_8096AF8(struct unkStruct_8096AF8 *param_1, u8 slotIndex,u8 dungeon) break; case WONDER_MAIL_MISSION_TYPE_RESCUE_CLIENT: case WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM: - if (jobSlot->mailType == 9) { + if (jobSlot->mailType == MAIL_TYPE_UNK9) { param_1->unk0 = TRUE; } break; case WONDER_MAIL_MISSION_TYPE_RESCUE_TARGET: case WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT: - if (jobSlot->mailType == 9) { + if (jobSlot->mailType == MAIL_TYPE_UNK9) { param_1->unk0 = TRUE; param_1->targetSpecies = jobSlot->targetSpecies; } @@ -316,10 +317,10 @@ s16 sub_8096B98(u8 dungeon) struct WonderMail *mail; s32 index; - for(index = 0; index < 8; index++) + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { mail = GetJobSlotInfo(index); - if(mail->mailType == 6) + if(mail->mailType == MAIL_TYPE_TAKEN_JOB) if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) if(mail->dungeon.id == dungeon) return mail->targetSpecies; @@ -332,13 +333,13 @@ void sub_8096BD0(void) s32 index; struct WonderMail *mail; - for(mail = &gUnknown_203B490->jobSlots[0], index = 0; index < 8; mail++, index++) + for(mail = &gUnknown_203B490->jobSlots[0], index = 0; index < MAX_ACCEPTED_JOBS; mail++, index++) { switch(mail->mailType) { - case 7: - case 8: - case 9: + case MAIL_TYPE_UNK7: + case MAIL_TYPE_UNK8: + case MAIL_TYPE_UNK9: ResetJobSlot(index); break; } @@ -352,7 +353,7 @@ bool8 sub_8096C08(u8 *jobIndex) s32 index; struct WonderMail *mail; - for(mail = &gUnknown_203B490->jobSlots[0], index = 0; index < 8; mail++, index++) + for(mail = &gUnknown_203B490->jobSlots[0], index = 0; index < MAX_ACCEPTED_JOBS; mail++, index++) { if(mail->mailType > 4 && mail->unk2 == 4) { @@ -366,7 +367,7 @@ bool8 sub_8096C08(u8 *jobIndex) void ResetJobSlot(u8 index) { - gUnknown_203B490->jobSlots[index].mailType = WONDER_MAIL_TYPE_NONE; + gUnknown_203B490->jobSlots[index].mailType = MAIL_TYPE_NONE; gUnknown_203B490->jobSlots[index].dungeon.id = 99; gUnknown_203B490->jobSlots[index].dungeon.floor = 0; gUnknown_203B490->jobSlots[index].rewardType = MONEY1; diff --git a/src/code_80958E8_mid.c b/src/code_80958E8_mid.c index c21da8362..ae4b6cae7 100644 --- a/src/code_80958E8_mid.c +++ b/src/code_80958E8_mid.c @@ -95,7 +95,7 @@ bool8 GenerateMailJobDungeonInfo(struct WonderMail *mail) bool8 sub_8095E38(struct WonderMail *mail, u8 dungeon, u32 floor, u8 param_4) { - if (mail->mailType != 0) { + if (mail->mailType != MAIL_TYPE_NONE) { if ((mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) && (param_4 == 1)) { if (mail->dungeon.id == dungeon) { return TRUE; @@ -127,14 +127,14 @@ u8 sub_8095E78(void) for(index = 0; index < 4; index++) { - if((gUnknown_203B490->mailboxSlots[index].mailType != 0) && (gUnknown_203B490->mailboxSlots[index].rewardType == FRIEND_AREA)) + if((gUnknown_203B490->mailboxSlots[index].mailType != MAIL_TYPE_NONE) && (gUnknown_203B490->mailboxSlots[index].rewardType == FRIEND_AREA)) flag = TRUE; } for(index = 0; index < 8; index++) { - if((gUnknown_203B490->jobSlots[index].mailType != 0) && (gUnknown_203B490->jobSlots[index].rewardType == FRIEND_AREA)) + if((gUnknown_203B490->jobSlots[index].mailType != MAIL_TYPE_NONE) && (gUnknown_203B490->jobSlots[index].rewardType == FRIEND_AREA)) flag = TRUE; } diff --git a/src/gulpin_shop_1.c b/src/gulpin_shop_1.c index 1e3df6f10..e41264c5c 100644 --- a/src/gulpin_shop_1.c +++ b/src/gulpin_shop_1.c @@ -17,7 +17,8 @@ extern u32 sub_801F890(void); extern void sub_801F8D0(void); extern u8 IsNextMoveLinked(u32, struct Move *); extern void PlaySound(u32); -extern void sub_801EF38(u32); +extern u32 sub_801EF38(u32); +extern u32 sub_801F194(void); void sub_801ED28(void) { diff --git a/src/mailbox_8095F8C.c b/src/mailbox_8095F8C.c index b07250bfa..e052d5596 100644 --- a/src/mailbox_8095F8C.c +++ b/src/mailbox_8095F8C.c @@ -28,7 +28,7 @@ bool8 sub_8095FB0(struct WonderMail *mail) for(index = 0; index < NUM_MAILBOX_SLOTS; index++) { - if(gUnknown_203B490->mailboxSlots[index].mailType == WONDER_MAIL_TYPE_NONE) + if(gUnknown_203B490->mailboxSlots[index].mailType == MAIL_TYPE_NONE) { gUnknown_203B490->mailboxSlots[index] = *mail; return FALSE; @@ -44,7 +44,7 @@ struct WonderMail *GetMailboxSlotInfo(u8 index) bool8 IsMailSlotEmpty(u8 index) { - if(gUnknown_203B490->mailboxSlots[index].mailType == WONDER_MAIL_TYPE_NONE) + if(gUnknown_203B490->mailboxSlots[index].mailType == MAIL_TYPE_NONE) return TRUE; else return FALSE; @@ -61,7 +61,7 @@ void ResetMailbox(void) void ResetMailboxSlot(u8 index) { - gUnknown_203B490->mailboxSlots[index].mailType = WONDER_MAIL_TYPE_NONE; + gUnknown_203B490->mailboxSlots[index].mailType = MAIL_TYPE_NONE; gUnknown_203B490->mailboxSlots[index].dungeon.id = 99; gUnknown_203B490->mailboxSlots[index].dungeon.floor = 0; gUnknown_203B490->mailboxSlots[index].rewardType = MONEY1; diff --git a/src/pelipper_board.c b/src/pelipper_board.c index 339e39896..fabbf70fe 100644 --- a/src/pelipper_board.c +++ b/src/pelipper_board.c @@ -384,21 +384,21 @@ void sub_802EDBC(void) mail = GetPelipperBoardSlotInfo(gPelipperBoard->jobIndex); switch(mail->mailType) { - case 2: + case MAIL_TYPE_UNK2: gPelipperBoard->unk4 = 1; ResetPelipperBoardSlot(gPelipperBoard->jobIndex); sub_80965F4(); sub_802C2D4(); SetPelipperBoardState(PELIPPER_BOARD_EXIT); break; - case 3: + case MAIL_TYPE_UNK3: gPelipperBoard->unk4 = 2; ResetPelipperBoardSlot(gPelipperBoard->jobIndex); sub_80965F4(); sub_802C2D4(); SetPelipperBoardState(PELIPPER_BOARD_EXIT); break; - case 4: + case MAIL_TYPE_UNK4: gPelipperBoard->unk4 = 3; ResetPelipperBoardSlot(gPelipperBoard->jobIndex); sub_80965F4(); diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 5bacb92f7..de11d4a11 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -6,7 +6,7 @@ #include "constants/iq_skill.h" #include "constants/tactic.h" -extern u32 gIQSkillNames[]; +extern u8 *gIQSkillNames[]; extern u32 gIQSkillDescriptions[]; extern u32 gTacticsDescriptions[]; extern u8 *gTactics[]; @@ -461,7 +461,7 @@ void sub_808E9EC(struct PokemonStruct *r0, struct unkStruct_808E9EC *r1) } #endif -u32 GetIQSkillName(u8 r0) +u8 *GetIQSkillName(u8 r0) { return gIQSkillNames[r0]; } diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c index 8dfaaf30d..644d44ea9 100644 --- a/src/pokemon_mid.c +++ b/src/pokemon_mid.c @@ -923,7 +923,7 @@ char* sub_808E4FC(s32 a1) { struct subStruct_203B240 *result[4]; sub_8097DF0(gFormattedStatusNames[a1], result); - return result[0]->unk0; + return result[0]->pokeName; } char* sub_808E51C(s32 a1) diff --git a/src/post_office_guide.c b/src/post_office_guide.c index 11f3fe530..8b662ecb8 100644 --- a/src/post_office_guide.c +++ b/src/post_office_guide.c @@ -636,7 +636,7 @@ void DisplayMissionObjectives(void) { jobInfo = GetJobSlotInfo(jobSlotIdx); if ((((jobInfo->dungeon.id == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0) - ) && (jobInfo->mailType != 5)) && (jobInfo->mailType != 7)) { + ) && (jobInfo->mailType != MAIL_TYPE_SUSPENDED_JOB)) && (jobInfo->mailType != MAIL_TYPE_UNK7)) { sub_803B6B0(10,yCoord,3,gUnknown_203B330->unk10); if (jobInfo->missionType != WONDER_MAIL_MISSION_TYPE_FIND_ITEM) { sprintfStatic(buffer1,gUnknown_80E1F3C,jobInfo->dungeon.floor); diff --git a/src/wonder_mail_2_mid.c b/src/wonder_mail_2_mid.c index 4ca554b53..345dd3c99 100644 --- a/src/wonder_mail_2_mid.c +++ b/src/wonder_mail_2_mid.c @@ -104,7 +104,7 @@ void CreateMailMenu(void) mail = GetMailboxSlotInfo(gUnknown_203B2D8->unk0[(gUnknown_203B2D8->unk22 * gUnknown_203B2D8->unk20) + index]); local.unk0[0] = gUnknown_203B2D8->unk38; local.y = sub_8013800(&gUnknown_203B2D8->unk4, index); - if (mail->mailType == 1) { + if (mail->mailType == MAIL_TYPE_UNK1) { y = sub_8013800(&gUnknown_203B2D8->unk4, index); sub_803B6B0(10,y,6,gUnknown_203B2D8->unk38); PrintPokeNameToBuffer(gAvailablePokemonNames, GetPlayerPokemonStruct()); diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index aa06f0bc2..53d27058b 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -1,3 +1,4 @@ +#include "constants/mailbox.h" #include "global.h" #include "constants/dungeon.h" #include "constants/input.h" @@ -184,6 +185,61 @@ extern u8 *gUnknown_80D4920[]; extern u8 *gUnknown_80D4928[]; extern u8 *gUnknown_80D494C[]; extern u8 *gUnknown_80D4970[]; +extern u8 gUnknown_80DFD70[]; +extern u8 gUnknown_80DFD7C[]; + +extern bool8 sub_809693C(struct WonderMail *); +extern bool8 sub_80A2824(u8); + +void sub_802CAA4(void) { + s32 loopMax; + struct WonderMail *mail; + s32 index; + + loopMax = 0; + mail = GetJobSlotInfo(gUnknown_203B2F0->unkC); + if(gUnknown_203B2F0->unk0 == 0) + { + switch(mail->mailType) + { + case 5: + gUnknown_203B2F0->unk10C[loopMax].text = gUnknown_80DFD70; // Take Job + if(sub_809693C(mail) || !sub_80A2824(mail->dungeon.id)) + { + gUnknown_203B2F0->unk10C[loopMax].menuAction = -1; + } + else + { + gUnknown_203B2F0->unk10C[loopMax].menuAction = 2; + } + loopMax += 1; + break; + case 6: + gUnknown_203B2F0->unk10C[loopMax].text = gUnknown_80DFD7C; // Suspend + gUnknown_203B2F0->unk10C[loopMax].menuAction = 3; + loopMax += 1; + break; + } + } + gUnknown_203B2F0->unk10C[loopMax].text = *gUnknown_80D494C; + gUnknown_203B2F0->unk10C[loopMax].menuAction = 4; + loopMax += 1; + gUnknown_203B2F0->unk10C[loopMax].text = *gUnknown_80D4970; + gUnknown_203B2F0->unk10C[loopMax].menuAction = 7; + loopMax += 1; + gUnknown_203B2F0->unk10C[loopMax].text = NULL; + gUnknown_203B2F0->unk10C[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2F0->unk10C[index].menuAction != -1) + { + if(gUnknown_203B2F0->unk10C[index].menuAction == gUnknown_203B2F0->menuAction) + return; + } + } + gUnknown_203B2F0->menuAction = 7; +} void sub_802CBAC(void) { @@ -239,13 +295,13 @@ void sub_802CC70(void) case 2: PlaySound(0x133); mail = GetJobSlotInfo(gUnknown_203B2F0->unkC); - mail->mailType = 6; + mail->mailType = MAIL_TYPE_TAKEN_JOB; SetJobListState(1); break; case 3: PlaySound(0x133); mail2 = GetJobSlotInfo(gUnknown_203B2F0->unkC); - mail2->mailType = 5; + mail2->mailType = MAIL_TYPE_SUSPENDED_JOB; SetJobListState(1); break; case 4: @@ -890,7 +946,7 @@ void sub_802D940(void) { // Delete case 2: - if ((gUnknown_203B2F8->unk9) && (((mail = &gUnknown_203B490->jobSlots[gUnknown_203B2F8->jobSlotIndex]), mail->mailType > 5) && (gUnknown_203B2F8->dungeonID == mail->dungeon.id))) + if ((gUnknown_203B2F8->unk9) && (((mail = &gUnknown_203B490->jobSlots[gUnknown_203B2F8->jobSlotIndex]), mail->mailType > MAIL_TYPE_SUSPENDED_JOB) && (gUnknown_203B2F8->dungeonID == mail->dungeon.id))) { sub_802D1A0(7); }