mirror of
https://github.com/pret/pmd-red.git
synced 2026-10-01 15:21:19 -04:00
138 lines
4.1 KiB
C
138 lines
4.1 KiB
C
#include "global.h"
|
|
#include "structs/str_wonder_mail.h"
|
|
#include "dungeon.h"
|
|
#include "event_flag.h"
|
|
#include "pokemon.h"
|
|
|
|
extern u8 *gMissionRankText[];
|
|
extern s32 gUnknown_80E80A0[];
|
|
void sub_803C37C(DungeonLocation *, u8, u8 *);
|
|
|
|
s32 sub_803C1B4(DungeonLocation *dungeon, u8 missionType)
|
|
{
|
|
s32 temp;
|
|
temp = sub_80908D8(dungeon);
|
|
if(missionType == 2)
|
|
{
|
|
temp += 2;
|
|
}
|
|
if(temp > 0xF)
|
|
temp = 0xF;
|
|
return temp;
|
|
}
|
|
|
|
u8 sub_803C1D0(struct DungeonLocation *dungeon, u8 missionType)
|
|
{
|
|
s32 a = sub_803C1B4(dungeon, missionType);
|
|
a /= 2;
|
|
if ((u8)a >= 7) {
|
|
a = 6;
|
|
return a;
|
|
}
|
|
return a;
|
|
}
|
|
|
|
u8 *GetMissionRankText(u8 index)
|
|
{
|
|
return gMissionRankText[index];
|
|
}
|
|
|
|
u32 GetDungeonTeamRankPts(DungeonLocation *dungeon, u8 r1)
|
|
{
|
|
u32 index = sub_803C1B4(dungeon, r1);
|
|
return gUnknown_80E80A0[index];
|
|
}
|
|
|
|
void sub_803C21C(WonderMail *param_1, unkStruct_802F204 *param_2)
|
|
{
|
|
int index;
|
|
u32 uVar2;
|
|
|
|
uVar2 = sub_803C1D0(¶m_1->unk4.dungeon,param_1->missionType);
|
|
param_2->moneyReward = 0;
|
|
|
|
for(index = 0; index < MAX_ITEM_REWARDS; index++)
|
|
{
|
|
param_2->itemRewards[index] = ITEM_NOTHING;
|
|
}
|
|
param_2->friendAreaReward = 0;
|
|
param_2->quantity = 10;
|
|
switch(param_1->rewardType) {
|
|
case MONEY:
|
|
param_2->rewardType = 0;
|
|
param_2->moneyReward = (uVar2 + 1) * 100;
|
|
break;
|
|
case MONEY_EXTRA:
|
|
param_2->rewardType = 1;
|
|
param_2->moneyReward = (uVar2 + 1) * 100;
|
|
param_2->itemRewards[0] = param_1->itemReward;
|
|
break;
|
|
case ITEM:
|
|
param_2->rewardType = 2;
|
|
param_2->itemRewards[0] = param_1->itemReward;
|
|
break;
|
|
case ITEM_EXTRA:
|
|
param_2->rewardType = 3;
|
|
param_2->itemRewards[0] = param_1->itemReward;
|
|
do {
|
|
sub_803C37C(¶m_1->unk4.dungeon,param_1->missionType,¶m_2->itemRewards[1]);
|
|
} while (param_2->itemRewards[0] == param_2->itemRewards[1]);
|
|
break;
|
|
case MONEY1:
|
|
param_2->rewardType = 0;
|
|
param_2->moneyReward = (uVar2 + 1) * 200;
|
|
break;
|
|
case MONEY1_EXTRA:
|
|
param_2->rewardType = 1;
|
|
param_2->moneyReward = (uVar2 + 1) * 200;
|
|
param_2->itemRewards[0] = param_1->itemReward;
|
|
break;
|
|
case ITEM1: // ITEM1
|
|
param_2->rewardType = 2;
|
|
param_2->itemRewards[0] = param_1->itemReward;
|
|
break;
|
|
case ITEM1_EXTRA:
|
|
param_2->rewardType = 3;
|
|
param_2->itemRewards[0] = param_1->itemReward;
|
|
do {
|
|
sub_803C37C(¶m_1->unk4.dungeon,param_1->missionType,¶m_2->itemRewards[1]);
|
|
} while (param_2->itemRewards[0] == param_2->itemRewards[1]);
|
|
do {
|
|
do {
|
|
sub_803C37C(¶m_1->unk4.dungeon,param_1->missionType,¶m_2->itemRewards[2]);
|
|
} while (param_2->itemRewards[0] == param_2->itemRewards[2]);
|
|
} while (param_2->itemRewards[1] == param_2->itemRewards[2]);
|
|
break;
|
|
case FRIEND_AREA:
|
|
param_2->rewardType = 4;
|
|
param_2->friendAreaReward = param_1->friendAreaReward;
|
|
break;
|
|
default:
|
|
param_2->rewardType = 5;
|
|
break;
|
|
}
|
|
CopyYellowMonsterNametoBuffer(param_2->clientName, param_1->clientSpecies);
|
|
param_2->clientSpecies = param_1->clientSpecies;
|
|
param_2->teamRankPtsReward = GetDungeonTeamRankPts(¶m_1->unk4.dungeon,param_1->missionType);
|
|
}
|
|
|
|
void sub_803C37C(DungeonLocation *location, u8 r1, u8 *itemReward) {
|
|
s32 r7;
|
|
bool8 flag;
|
|
u8 r4;
|
|
|
|
r7 = sub_803C1B4(location, r1);
|
|
sub_8090910(location, r7);
|
|
|
|
do {
|
|
flag = FALSE;
|
|
r4 = sub_8090910(location, r7);
|
|
if(r4 == ITEM_WEAVILE_FIG)
|
|
flag = GetScriptVarArrayValue(0, EVENT_B01P01, 1) ? TRUE : FALSE;
|
|
if(r4 == ITEM_MIME_JR_FIG)
|
|
if(GetScriptVarArrayValue(0, EVENT_B01P01, 0)) flag = TRUE;
|
|
} while(flag != FALSE);
|
|
|
|
*itemReward = r4;
|
|
}
|