diff options
Diffstat (limited to 'src/post_office_guide.c')
-rw-r--r-- | src/post_office_guide.c | 129 |
1 files changed, 122 insertions, 7 deletions
diff --git a/src/post_office_guide.c b/src/post_office_guide.c index 929c2e1..2103e5f 100644 --- a/src/post_office_guide.c +++ b/src/post_office_guide.c @@ -5,6 +5,8 @@ #include "menu.h" #include "memory.h" #include "text.h" +#include "sub_8095228.h" +#include "wonder_mail.h" struct PostOfficeHelper { @@ -29,7 +31,7 @@ struct unkStruct_203B330 struct UnkInputStruct *unk0; u8 fill4[0x8]; u8 unkC; - u8 unkD; + u8 dungeonIndex; u8 fillE[2]; u32 unk10; struct UnkTextStruct2 *unk14; @@ -41,11 +43,19 @@ EWRAM_DATA struct unkStruct_203B330 *gUnknown_203B330; extern const char GetHelp_Text[]; extern const char GoRescue_Text[]; extern const char FriendRescueInfo_Text[]; - extern const char FriendRescue_80E0A80[]; extern const char Delivery_Text[]; extern const char BulletinBoard_Text[]; extern const char PostOffice_Text[]; +extern u8 gUnknown_80E1F30[]; +extern u8 gUnknown_80E1F3C[]; +extern u8 gUnknown_80E1F60[]; +extern u8 gUnknown_80E1F70[]; +extern u8 gUnknown_202DE58[]; +extern u8 gUnknown_80E1F80[]; +extern u8 gUnknown_80E1F40[]; +extern u8 gUnknown_80E1F54[]; +extern u8 gUnknown_80E1F94[]; enum PostOfficeStates { @@ -166,7 +176,19 @@ extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32 extern u32 sub_8012A64(struct UnkInputStruct**, u32); extern void PlayMenuSoundEffect(u32); extern void sub_8031A84(); -extern void sub_8031AE8(); +extern void DisplayMissionObjectives(); +extern u8 *GetCurrentMissionText(s16 r0); +extern u8 *sub_80975DC(u32 r0); +extern u8 sub_8099360(u8 *); +extern u8 sub_8099394(u8 *); +extern struct WonderMail *GetJobSlotInfo(u8); +extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); +extern void sprintf_2(char *buffer, const char *text, ...); +extern void sub_803B6B0(u32, u32, u32, u32); +extern s16 sub_80A2688(u8 r0); +extern u8 sub_80992E0(s16 *, s16 *); extern u8 gUnknown_202E5D8[]; extern u8 gAvailablePokemonNames[]; @@ -504,12 +526,12 @@ void ReturnToGetHelpMenu(void) } } -u32 sub_80319A4(u8 param_1,u8 param_2,int param_3) +u32 sub_80319A4(u8 param_1,u8 dungeon,int param_3) { gUnknown_203B330 = MemoryAlloc(sizeof(struct unkStruct_203B330),8); gUnknown_203B330->unkC = param_1; - gUnknown_203B330->unkD = param_2; + gUnknown_203B330->dungeonIndex = dungeon; sub_801317C(&gUnknown_203B330->unk0); gUnknown_203B330->unk10 = param_3; gUnknown_203B330->unk14 = &gUnknown_203B330->unk18[param_3]; @@ -535,7 +557,7 @@ u32 sub_80319F8(void) void sub_8031A2C(void) { sub_8031A84(); - sub_8031AE8(); + DisplayMissionObjectives(); } void sub_8031A3C(void) @@ -557,7 +579,7 @@ void sub_8031A84(void) sub_8006518(gUnknown_203B330->unk18); gUnknown_203B330->unk18[gUnknown_203B330->unk10] = gUnknown_80E1F18; if (gUnknown_203B330->unkC == 2) { - iVar1 = sub_80969D0(gUnknown_203B330->unkD); + iVar1 = sub_80969D0(gUnknown_203B330->dungeonIndex); if (iVar1 == 0) { iVar1 = 1; } @@ -566,3 +588,96 @@ void sub_8031A84(void) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B330->unk18,1,1); } + +void DisplayMissionObjectives(void) +{ + s32 yCoord; + s32 jobSlotIdx; + struct unkStruct_8095228 *iVar8; + struct WonderMail *jobInfo; + u8 auStack248 [100]; + u8 local_94 [4]; + u8 auStack144 [100]; + short auStack44; + short local_2a; + u8 local_test; + + sub_80073B8(gUnknown_203B330->unk10); + // Objectives + xxx_call_draw_string(10,0,gUnknown_80E1F30,gUnknown_203B330->unk10,0); + switch(gUnknown_203B330->unkC) + { + case 1: + sub_8099394(local_94); + iVar8 = sub_8095228(local_94[0]); + sub_803B6B0(10,16,3,gUnknown_203B330->unk10); + // %dF + sprintf_2(auStack248,gUnknown_80E1F3C,iVar8->floor); + xxx_call_draw_string(0x15,16,auStack248,gUnknown_203B330->unk10,0); + // Rescue #C6%s#R + sprintf_2(auStack248,gUnknown_80E1F40,GetMonSpecies(iVar8->clientSpecies)); + xxx_call_draw_string(0x28,16,auStack248,gUnknown_203B330->unk10,0); + break; + case 2: + if (sub_80969D0(gUnknown_203B330->dungeonIndex) == 0) { + // Just go! + xxx_call_draw_string(10,16,gUnknown_80E1F54,gUnknown_203B330->unk10,0); + } + else + { + yCoord = 16; + + // 8 Job Slots... check each of them + for(jobSlotIdx = 0; jobSlotIdx < 8; jobSlotIdx++) + { + jobInfo = GetJobSlotInfo(jobSlotIdx); + if ((((jobInfo->dungeon == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0) + ) && (jobInfo->mailType != 5)) && (jobInfo->mailType != 7)) { + sub_803B6B0(10,yCoord,3,gUnknown_203B330->unk10); + if (jobInfo->missionType != WONDER_MAIL_MISSION_TYPE_FIND_ITEM) { + sprintf_2(auStack144,gUnknown_80E1F3C,jobInfo->floor); + xxx_call_draw_string(21,yCoord,auStack144,gUnknown_203B330->unk10,0); + } + switch(jobInfo->missionType) + { + case WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM: + // Bring #C4%s#R + sub_8090DC4(gUnknown_202DE58,jobInfo->targetItem,0); + sprintf_2(auStack144,gUnknown_80E1F60,gUnknown_202DE58); + xxx_call_draw_string(40,yCoord,auStack144,gUnknown_203B330->unk10,0); + break; + case WONDER_MAIL_MISSION_TYPE_FIND_ITEM: + // Find #C4%s#R + sub_8090DC4(gUnknown_202DE58,jobInfo->targetItem,0); + sprintf_2(auStack144,gUnknown_80E1F70,gUnknown_202DE58); + xxx_call_draw_string(40,yCoord,auStack144,gUnknown_203B330->unk10,0); + break; + case WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT: + // Escort to #C6$s#R + sprintf_2(auStack144,gUnknown_80E1F80,GetMonSpecies(jobInfo->targetSpecies)); + xxx_call_draw_string(40,yCoord,auStack144,gUnknown_203B330->unk10,0); + break; + default: + // Rescue #C6%s#R + sprintf_2(auStack144,gUnknown_80E1F40,GetMonSpecies(jobInfo->targetSpecies)); + xxx_call_draw_string(40,yCoord,auStack144,gUnknown_203B330->unk10,0); + break; + } + yCoord = yCoord + 12; + } + } + } + break; + case 3: + case 0: + default: + if (sub_80992E0(&auStack44,&local_2a) != 0) + xxx_call_draw_string(10,16,GetCurrentMissionText(local_2a),gUnknown_203B330->unk10,0); + else if (sub_8099360(&local_test) != 0) + xxx_call_draw_string(10,16,sub_80975DC(sub_80A2688(local_test)),gUnknown_203B330->unk10,0); + else + xxx_call_draw_string(10,16,gUnknown_80E1F94,gUnknown_203B330->unk10,0); + break; + } + sub_80073E0(gUnknown_203B330->unk10); +} |