pmd-red/src/code_802DB28.c
2023-11-17 15:29:02 -08:00

203 lines
5.7 KiB
C

#include "global.h"
#include "globaldata.h"
#include "code_80130A8.h"
#include "code_802DB28.h"
#include "code_802F204.h"
#include "code_803C1D0.h"
#include "code_80958E8_1.h"
#include "code_8096AF8.h"
#include "exclusive_pokemon.h"
#include "input.h"
#include "items.h"
#include "memory.h"
#include "pokemon.h"
#include "text1.h"
#include "text2.h"
extern u8 gUnknown_202DE58[];
extern u8 gUnknown_202E1C8[];
extern u8 gUnknown_202E5D8[];
static EWRAM_DATA_2 struct unkStruct_203B2FC *sUnknown_203B2FC = {0};
#include "data/code_802DB28.h"
static void sub_802DC28(u32 newState);
static void sub_802DC40(void);
static void sub_802DC9C(void);
static void sub_802DE44(void);
static void sub_802DE60(void);
bool8 sub_802DB28(u8 jobSlotIndex, u8 dungeon)
{
struct unkStruct_8096AF8 local_18;
sub_8096AF8(&local_18, jobSlotIndex, dungeon);
if (!local_18.unk0)
return FALSE;
ResetUnusedInputStruct();
sub_800641C(NULL, TRUE, TRUE);
sUnknown_203B2FC = MemoryAlloc(sizeof(struct unkStruct_203B2FC), 8);
sUnknown_203B2FC->jobSlotIndex = jobSlotIndex;
sUnknown_203B2FC->jobInfo = GetJobSlotInfo(jobSlotIndex);
sub_8096EEC(sUnknown_203B2FC->jobInfo);
sub_803C21C(sUnknown_203B2FC->jobInfo, &sUnknown_203B2FC->unk8);
sUnknown_203B2FC->faceFile = GetDialogueSpriteDataPtr(sUnknown_203B2FC->jobInfo->clientSpecies);
sUnknown_203B2FC->faceData = NULL;
sUnknown_203B2FC->unk44 = 0;
sUnknown_203B2FC->unk45 = 0;
sUnknown_203B2FC->unk46 = 0;
sUnknown_203B2FC->unk40 = 2;
sUnknown_203B2FC->unk42 = 8;
if (sUnknown_203B2FC->faceFile != NULL)
sUnknown_203B2FC->faceData = sUnknown_203B2FC->faceFile->data;
sub_802DC28(0);
return TRUE;
}
u32 sub_802DBD4(void)
{
switch (sUnknown_203B2FC->state) {
case 7:
sUnknown_203B2FC->jobInfo->mailType = WONDER_MAIL_TYPE_OKD;
return 3;
case 6:
sub_802DE44();
return 0;
default:
sub_802DE60();
return 0;
}
}
void sub_802DC00(void)
{
if (sUnknown_203B2FC != NULL) {
if (sUnknown_203B2FC->faceFile != NULL)
CloseFile(sUnknown_203B2FC->faceFile);
MemoryFree(sUnknown_203B2FC);
sUnknown_203B2FC = NULL;
}
}
static void sub_802DC28(u32 newState)
{
sUnknown_203B2FC->state = newState;
sub_802DC40();
sub_802DC9C();
}
static void sub_802DC40(void)
{
s32 i;
sub_8006518(sUnknown_203B2FC->unk48);
switch (sUnknown_203B2FC->state) {
case 0:
case 7:
for (i = 0; i < 4; i++)
sUnknown_203B2FC->unk48[i] = sUnknown_80E016C;
break;
}
ResetUnusedInputStruct();
sub_800641C(sUnknown_203B2FC->unk48, TRUE, TRUE);
}
static void sub_802DC9C(void)
{
u8 *speciesText;
s32 index;
switch (sUnknown_203B2FC->state) {
case 0:
CopyYellowMonsterNametoBuffer(gUnknown_202E5D8, sUnknown_203B2FC->jobInfo->clientSpecies);
CopyYellowMonsterNametoBuffer(gUnknown_202E1C8, sUnknown_203B2FC->jobInfo->clientSpecies);
speciesText = GetMonSpecies(sUnknown_203B2FC->jobInfo->clientSpecies);
strcpy(gUnknown_202E1C8 - 560, speciesText);
speciesText = GetMonSpecies(sUnknown_203B2FC->jobInfo->targetSpecies);
strcpy(gUnknown_202E1C8 - 480, speciesText);
UnlockExclusivePokemon(sUnknown_203B2FC->jobInfo->clientSpecies);
BufferItemName(gUnknown_202DE58, sUnknown_203B2FC->jobInfo->targetItem, NULL);
sUnknown_203B2FC->fallbackState = 6;
switch (sUnknown_203B2FC->jobInfo->missionType) {
case WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM:
sub_802DC28(5);
break;
case WONDER_MAIL_MISSION_TYPE_FIND_ITEM:
sub_802DC28(4);
break;
case WONDER_MAIL_MISSION_TYPE_RESCUE_TARGET:
sub_802DC28(2);
UnlockExclusivePokemon(sUnknown_203B2FC->jobInfo->targetSpecies);
break;
case WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT:
sub_802DC28(3);
UnlockExclusivePokemon(sUnknown_203B2FC->jobInfo->targetSpecies);
break;
default:
case WONDER_MAIL_MISSION_TYPE_RESCUE_CLIENT:
sub_802DC28(1);
break;
}
break;
case 1:
sub_80141B4(sThanksForRescuingMe, 0, &sUnknown_203B2FC->faceFile, 0x10D);
break;
case 2:
sub_80141B4(sThanksForRescuingThem, 0, &sUnknown_203B2FC->faceFile, 0x10D);
break;
case 3:
sub_80141B4(sThanksForEscortingMe, 0, &sUnknown_203B2FC->faceFile, 0x10D);
break;
case 5:
sub_80141B4(sThanksForDelivering, 0, &sUnknown_203B2FC->faceFile, 0x10D);
break;
case 4:
index = FindItemInInventory(sUnknown_203B2FC->jobInfo->targetItem);
if (index != -1) {
ShiftItemsDownFrom(index);
FillInventoryGaps();
}
sub_80141B4(sThanksForGetting, 0, &sUnknown_203B2FC->faceFile, 0x10D);
break;
case 6:
sub_802F204(&sUnknown_203B2FC->unk8, 1);
break;
case 7:
default:
break;
}
}
static void sub_802DE44(void)
{
switch (sub_802F298()) {
case 2:
case 3:
sub_802F2C0();
sub_802DC28(7);
break;
case 0:
case 1:
break;
}
}
static void sub_802DE60(void)
{
s32 temp;
if (sub_80144A4(&temp) == 0)
sub_802DC28(sUnknown_203B2FC->fallbackState);
}