mirror of
https://github.com/pret/pmd-red.git
synced 2026-07-12 23:01:20 -05:00
184 lines
6.4 KiB
C
184 lines
6.4 KiB
C
#include "global.h"
|
|
#include "globaldata.h"
|
|
#include "constants/mailbox.h"
|
|
#include "constants/wonder_mail.h"
|
|
#include "code_800D090.h"
|
|
#include "music_util.h"
|
|
#include "code_8094F88.h"
|
|
#include "code_80958E8.h"
|
|
#include "code_80972F4.h"
|
|
#include "code_8099360.h"
|
|
#include "code_80A26CC.h"
|
|
#include "input.h"
|
|
#include "items.h"
|
|
#include "memory.h"
|
|
#include "menu_input.h"
|
|
#include "pokemon_mail.h"
|
|
#include "post_office_guide2.h"
|
|
#include "string_format.h"
|
|
#include "text_1.h"
|
|
#include "text_3.h"
|
|
#include "ground_main.h"
|
|
|
|
static EWRAM_INIT unkStruct_203B330 *sUnknown_203B330 = {NULL};
|
|
|
|
#include "data/post_office_guide2.h"
|
|
|
|
static void DisplayMissionObjectives(void);
|
|
|
|
static void sub_8031A2C(void);
|
|
static void sub_8031A84(void);
|
|
|
|
bool8 sub_80319A4(u8 param_1, u8 dungeon, s32 param_3)
|
|
{
|
|
sUnknown_203B330 = MemoryAlloc(sizeof(unkStruct_203B330), 8);
|
|
sUnknown_203B330->unkC = param_1;
|
|
sUnknown_203B330->dungeonIndex = dungeon;
|
|
ResetTouchScreenMenuInput(&sUnknown_203B330->input);
|
|
sUnknown_203B330->unk10 = param_3;
|
|
sUnknown_203B330->unk14 = &sUnknown_203B330->unk18.id[param_3];
|
|
sub_8031A2C();
|
|
return TRUE;
|
|
}
|
|
|
|
u32 sub_80319F8(void)
|
|
{
|
|
switch (sub_8012A64(&sUnknown_203B330->input, sUnknown_203B330->unk10)) {
|
|
case 2:
|
|
PlayMenuSoundEffect(1);
|
|
return 2;
|
|
case 1:
|
|
PlayMenuSoundEffect(0);
|
|
return 3;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
static void sub_8031A2C(void)
|
|
{
|
|
sub_8031A84();
|
|
DisplayMissionObjectives();
|
|
}
|
|
|
|
void sub_8031A3C(void)
|
|
{
|
|
if (sUnknown_203B330 != NULL) {
|
|
sUnknown_203B330->unk18.id[sUnknown_203B330->unk10] = sUnknown_80E1EFC;
|
|
ResetUnusedInputStruct();
|
|
ShowWindows(&sUnknown_203B330->unk18, TRUE, TRUE);
|
|
MemoryFree(sUnknown_203B330);
|
|
sUnknown_203B330 = NULL;
|
|
}
|
|
}
|
|
|
|
static void sub_8031A84(void)
|
|
{
|
|
s32 jobs;
|
|
|
|
RestoreSavedWindows(&sUnknown_203B330->unk18);
|
|
sUnknown_203B330->unk18.id[sUnknown_203B330->unk10] = sUnknown_80E1F18;
|
|
|
|
if (sUnknown_203B330->unkC == 2) {
|
|
jobs = CountJobsinDungeon(sUnknown_203B330->dungeonIndex);
|
|
if (jobs == 0)
|
|
jobs = 1;
|
|
|
|
sub_8012D08(sUnknown_203B330->unk14, jobs);
|
|
}
|
|
|
|
ResetUnusedInputStruct();
|
|
ShowWindows(&sUnknown_203B330->unk18, TRUE, TRUE);
|
|
}
|
|
|
|
static void DisplayMissionObjectives(void)
|
|
{
|
|
s32 yCoord;
|
|
s32 jobSlotIdx;
|
|
unkStruct_203B480 *mail;
|
|
WonderMail *jobInfo;
|
|
u8 buffer[100];
|
|
volatile u8 local_94;
|
|
u8 buffer1[100];
|
|
s16 auStack44;
|
|
s16 missionIndex;
|
|
u8 local_test;
|
|
|
|
sub_80073B8(sUnknown_203B330->unk10);
|
|
// Objectives
|
|
PrintStringOnWindow(10, 0, sObjectives, sUnknown_203B330->unk10, 0);
|
|
|
|
switch (sUnknown_203B330->unkC) {
|
|
case 1:
|
|
sub_8099394((u8*)&local_94);
|
|
mail = GetMailatIndex(local_94);
|
|
sub_803B6B0(10, 16, 3, sUnknown_203B330->unk10);
|
|
// %dF
|
|
sprintfStatic(buffer,sFmt1,mail->dungeonSeed.location.floor);
|
|
PrintStringOnWindow(21,16,buffer,sUnknown_203B330->unk10,0);
|
|
// Rescue #C6%s#R
|
|
sprintfStatic(buffer,sFmtRescue,GetMonSpecies(mail->clientSpecies));
|
|
PrintStringOnWindow(40, 16, buffer, sUnknown_203B330->unk10, 0);
|
|
break;
|
|
case 2:
|
|
if (CountJobsinDungeon(sUnknown_203B330->dungeonIndex) == 0)
|
|
PrintStringOnWindow(10, 16, sJustGo, sUnknown_203B330->unk10, 0);
|
|
else {
|
|
yCoord = 16;
|
|
|
|
// 8 Job Slots... check each of them
|
|
for (jobSlotIdx = 0; jobSlotIdx < MAX_ACCEPTED_JOBS; jobSlotIdx++) {
|
|
jobInfo = GetJobSlotInfo(jobSlotIdx);
|
|
|
|
if (jobInfo->dungeonSeed.location.id == sUnknown_203B330->dungeonIndex
|
|
&& jobInfo->mailType != 0
|
|
&& jobInfo->mailType != MAIL_TYPE_SUSPENDED_JOB
|
|
&& jobInfo->mailType != MAIL_TYPE_UNK7) {
|
|
sub_803B6B0(10, yCoord, 3, sUnknown_203B330->unk10);
|
|
|
|
if (jobInfo->missionType != WONDER_MAIL_MISSION_TYPE_FIND_ITEM) {
|
|
sprintfStatic(buffer1, sFmt1, jobInfo->dungeonSeed.location.floor);
|
|
PrintStringOnWindow(21, yCoord, buffer1, sUnknown_203B330->unk10, 0);
|
|
}
|
|
|
|
switch (jobInfo->missionType) {
|
|
case WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM:
|
|
BufferItemName(gFormatBuffer_Items[0], jobInfo->targetItem, NULL);
|
|
sprintfStatic(buffer1, sFmtBring, gFormatBuffer_Items[0]);
|
|
PrintStringOnWindow(40, yCoord, buffer1, sUnknown_203B330->unk10, 0);
|
|
break;
|
|
case WONDER_MAIL_MISSION_TYPE_FIND_ITEM:
|
|
BufferItemName(gFormatBuffer_Items[0], jobInfo->targetItem, NULL);
|
|
sprintfStatic(buffer1, sFmtFind, gFormatBuffer_Items[0]);
|
|
PrintStringOnWindow(40, yCoord, buffer1, sUnknown_203B330->unk10, 0);
|
|
break;
|
|
case WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT:
|
|
sprintfStatic(buffer1, sFmtEscort, GetMonSpecies(jobInfo->targetSpecies));
|
|
PrintStringOnWindow(40, yCoord, buffer1, sUnknown_203B330->unk10, 0);
|
|
break;
|
|
default:
|
|
sprintfStatic(buffer1, sFmtRescue, GetMonSpecies(jobInfo->targetSpecies));
|
|
PrintStringOnWindow(40, yCoord, buffer1, sUnknown_203B330->unk10, 0);
|
|
break;
|
|
}
|
|
|
|
yCoord += 12;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 3:
|
|
case 0:
|
|
default:
|
|
if (sub_80992E0(&auStack44, &missionIndex))
|
|
PrintStringOnWindow(10, 16, GetCurrentMissionText(missionIndex), sUnknown_203B330->unk10, 0);
|
|
else if (sub_8099360(&local_test) != 0)
|
|
PrintStringOnWindow(10, 16, sub_80975DC(sub_80A2688(local_test)), sUnknown_203B330->unk10, 0);
|
|
else
|
|
PrintStringOnWindow(10, 16, sRedQuestionMarks, sUnknown_203B330->unk10, 0);
|
|
break;
|
|
}
|
|
|
|
sub_80073E0(sUnknown_203B330->unk10);
|
|
}
|