summaryrefslogtreecommitdiff
path: root/src/post_office_guide.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/post_office_guide.c')
-rw-r--r--src/post_office_guide.c129
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);
+}