mirror of
https://github.com/pret/pmd-red.git
synced 2026-06-14 04:31:22 -05:00
203 lines
5.7 KiB
C
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);
|
|
}
|