mirror of
https://github.com/pret/pokefirered.git
synced 2026-10-03 08:06:55 -04:00
886 lines
23 KiB
C
886 lines
23 KiB
C
#include "global.h"
|
|
#include "constants/species.h"
|
|
#include "malloc.h"
|
|
#include "main.h"
|
|
#include "task.h"
|
|
#include "palette.h"
|
|
#include "menu.h"
|
|
#include "window.h"
|
|
#include "text_window.h"
|
|
#include "event_data.h"
|
|
#include "string_util.h"
|
|
#include "script.h"
|
|
#include "overworld.h"
|
|
#include "field_fadetransition.h"
|
|
#include "item.h"
|
|
#include "wild_encounter.h"
|
|
#include "help_system.h"
|
|
#include "unk_8159F40.h"
|
|
#include "pokemon_storage_system.h"
|
|
#include "quest_log.h"
|
|
|
|
u8 gUnknown_3005E88;
|
|
|
|
struct UnkStruct_203AE94
|
|
{
|
|
u8 unk_0_0:4;
|
|
u8 unk_0_4:2;
|
|
u8 unk_0_6:2;
|
|
u8 unk_1;
|
|
};
|
|
|
|
struct UnkStruct_203AE98
|
|
{
|
|
u8 filler_0[6];
|
|
u8 unk_6;
|
|
};
|
|
|
|
EWRAM_DATA u8 gUnknown_203ADF8 = 0;
|
|
EWRAM_DATA u8 gUnknown_203ADF9 = 0;
|
|
EWRAM_DATA u8 gUnknown_203ADFA = 0;
|
|
EWRAM_DATA u16 gUnknown_203ADFC = 0;
|
|
EWRAM_DATA u8 gUnknown_203ADFE[3];
|
|
EWRAM_DATA void * gUnknown_203AE04 = NULL;
|
|
EWRAM_DATA u16 * gUnknown_203AE08 = NULL;
|
|
EWRAM_DATA void * gUnknown_203AE0C[32] = {NULL};
|
|
EWRAM_DATA void (* gUnknown_203AE8C)(void) = 0;
|
|
EWRAM_DATA struct UnkStruct_203AE94 gUnknown_203AE94 = {0};
|
|
EWRAM_DATA struct UnkStruct_203AE98 gUnknown_203AE98[32] = {0};
|
|
EWRAM_DATA u16 gUnknown_203AF98 = 0;
|
|
|
|
void sub_8110A00(void);
|
|
void sub_8110A3C(void);
|
|
void sub_8110BB0(u8);
|
|
void sub_8110BE8(u8);
|
|
void sub_8110E3C(void);
|
|
void sub_8110D94(void);
|
|
void sub_8110E20(void);
|
|
void sub_8110D48(u8);
|
|
u8 sub_8110E68(struct UnkStruct_203AE98 *);
|
|
void sub_8110F90(u8);
|
|
void sub_8111150(u8);
|
|
void sub_8111368(void);
|
|
void sub_81115E8(void);
|
|
u16 sub_8111618(void);
|
|
u16 sub_811164C(void);
|
|
void sub_8111688(void);
|
|
void sub_811175C(u8, struct UnkStruct_203AE98 *);
|
|
void * sub_8113D08(void *, struct UnkStruct_203AE98 *);
|
|
void * sub_8113D94(void *, struct UnkStruct_203AE98 *);
|
|
void * sub_8113C20(void *, struct UnkStruct_203AE98 *);
|
|
void * sub_8113C8C(void *, struct UnkStruct_203AE98 *);
|
|
void * sub_8113A78(void *, void **);
|
|
void sub_8113ABC(void *);
|
|
void sub_81138F8(void);
|
|
void sub_8111AD8(void);
|
|
void sub_8112940(u8, struct UnkStruct_203AE98 *, u16);
|
|
void sub_811381C(void);
|
|
void sub_8113B88(void);
|
|
void sub_8113BD8(void);
|
|
void * sub_8113BF4(void *);
|
|
void * sub_8113D48(void *, struct UnkStruct_203AE98 *);
|
|
void * sub_8113CC8(void *, struct UnkStruct_203AE98 *);
|
|
void sub_81118F4(s8);
|
|
|
|
extern const u8 gUnknown_841A155[];
|
|
|
|
const struct WindowTemplate gUnknown_845661C[3] = {
|
|
{ 0, 0, 0, 30, 2, 15, 0x0e9 },
|
|
{ 0, 0, 18, 30, 2, 15, 0x0ad },
|
|
{ 0, 0, 14, 30, 6, 15, 0x14c }
|
|
};
|
|
|
|
const struct TextColor gUnknown_8456634 = {15, 1, 12};
|
|
|
|
void sub_8110840(void * a0)
|
|
{
|
|
size_t r1 = (void *)gSaveBlock1Ptr - a0;
|
|
if (gUnknown_203AE04)
|
|
gUnknown_203AE04 += r1;
|
|
if (gUnknown_203ADFA != 0)
|
|
{
|
|
if (gUnknown_203AE08)
|
|
gUnknown_203AE08 = (void *)gUnknown_203AE08 + r1;
|
|
if (gUnknown_203ADFA == 2)
|
|
{
|
|
int r3;
|
|
for (r3 = 0; r3 < 0x20; r3++)
|
|
if (gUnknown_203AE0C[r3])
|
|
gUnknown_203AE0C[r3] += r1;
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_811089C(void)
|
|
{
|
|
memset(gSaveBlock1Ptr->questLog, 0, sizeof(gSaveBlock1Ptr->questLog));
|
|
gUnknown_203ADF8 = 0;
|
|
gUnknown_203ADFA = 0;
|
|
gUnknown_203AE8C = 0;
|
|
gUnknown_203AE08 = NULL;
|
|
gUnknown_203AE04 = 0;
|
|
sub_8113BD8();
|
|
sub_81138F8();
|
|
}
|
|
|
|
void sub_81108F0(u8 a0)
|
|
{
|
|
memset(gSaveBlock1Ptr->questLog + a0, 0, sizeof(struct QuestLog));
|
|
gUnknown_203AE04 = NULL;
|
|
}
|
|
|
|
void sub_8110920(void)
|
|
{
|
|
gUnknown_203AE04 = NULL;
|
|
}
|
|
|
|
void sub_811092C(void)
|
|
{
|
|
if (gUnknown_203AE8C)
|
|
gUnknown_203AE8C();
|
|
}
|
|
|
|
bool8 sub_8110944(void * a0, size_t a1)
|
|
{
|
|
void * r2 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_568;
|
|
void * r0 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].end;
|
|
r0 -= a1;
|
|
if (a0 < r2 || a0 > r0)
|
|
return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
bool8 sub_8110988(void * a0, size_t a1)
|
|
{
|
|
void * r2 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_568;
|
|
void * r0 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].end;
|
|
r0 -= a1;
|
|
if (a0 < r2 || a0 > r0)
|
|
return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
void sub_81109CC(u8 a0)
|
|
{
|
|
gUnknown_203ADFA = a0;
|
|
if (a0 == 1)
|
|
gUnknown_203AE8C = sub_8110A00;
|
|
else
|
|
gUnknown_203AE8C = sub_8110A3C;
|
|
}
|
|
|
|
void sub_8110A00(void)
|
|
{
|
|
if (sub_8110E68(gUnknown_203AE98) != 1)
|
|
{
|
|
gUnknown_3005E88 = 0;
|
|
sub_8110E3C();
|
|
gUnknown_203ADFA = 0;
|
|
gUnknown_203AE8C = NULL;
|
|
}
|
|
}
|
|
|
|
void sub_8110A3C(void)
|
|
{
|
|
if (gUnknown_203AE94.unk_0_0 == 2)
|
|
gUnknown_203AE94.unk_0_0 = 0;
|
|
|
|
if (gUnknown_203AE94.unk_0_6 == 0)
|
|
{
|
|
if (gUnknown_3005E88 || gUnknown_203AE94.unk_0_0 == 1 || (gUnknown_203AE94.unk_1 < 32 && gUnknown_203AE0C[gUnknown_203AE94.unk_1]))
|
|
sub_8111AD8();
|
|
else
|
|
{
|
|
gUnknown_203AE94.unk_0_6 = 2;
|
|
ScriptContext2_Enable();
|
|
sub_81118F4(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_8110AB4(void)
|
|
{
|
|
gUnknown_20370D0 = gUnknown_203ADFA;
|
|
}
|
|
|
|
u8 sub_8110AC8(void)
|
|
{
|
|
return gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000;
|
|
}
|
|
|
|
void sub_8110AEC(u16 a0)
|
|
{
|
|
if (gUnknown_203ADF8 > 3)
|
|
gUnknown_203ADF8 = 0;
|
|
|
|
sub_81108F0(gUnknown_203ADF8);
|
|
sub_8113B88();
|
|
gUnknown_203AE08 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_568;
|
|
if ((a0 >= 12 && a0 < 20) || a0 == 35)
|
|
gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000 = 2;
|
|
else
|
|
gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000 = 1;
|
|
sub_81115E8();
|
|
sub_8110BB0(gUnknown_203ADF8);
|
|
sub_8110BE8(gUnknown_203ADF8);
|
|
sub_8110D94();
|
|
sub_8110E20();
|
|
sub_8110D48(gUnknown_203ADF8);
|
|
gUnknown_203ADFC = 0;
|
|
sub_8112940(2, gUnknown_203AE98, 0x100);
|
|
sub_8110E68(gUnknown_203AE98);
|
|
sub_81109CC(1);
|
|
}
|
|
|
|
void sub_8110BB0(u8 a0)
|
|
{
|
|
struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[a0];
|
|
questLog->unk_001 = gSaveBlock1Ptr->location.mapGroup;
|
|
questLog->unk_002 = gSaveBlock1Ptr->location.mapNum;
|
|
questLog->unk_003 = gSaveBlock1Ptr->location.warpId;
|
|
questLog->unk_004 = gSaveBlock1Ptr->pos.x;
|
|
questLog->unk_006 = gSaveBlock1Ptr->pos.y;
|
|
}
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_8110BE8(u8 a0)
|
|
{
|
|
struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[a0];
|
|
u16 i; // r6
|
|
|
|
sub_815A008(questLog);
|
|
|
|
for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->mapObjectTemplates); i++)
|
|
{
|
|
if (gSaveBlock1Ptr->mapObjectTemplates[i].x < 0)
|
|
{
|
|
questLog->npcData[i].x = (u8)-gSaveBlock1Ptr->mapObjectTemplates[i].x;
|
|
questLog->npcData[i].negx = TRUE;
|
|
}
|
|
else
|
|
{
|
|
questLog->npcData[i].x = (u8)gSaveBlock1Ptr->mapObjectTemplates[i].x;
|
|
questLog->npcData[i].negx = FALSE;
|
|
}
|
|
if (gSaveBlock1Ptr->mapObjectTemplates[i].y < 0)
|
|
{
|
|
questLog->npcData[i].y = (u8)-gSaveBlock1Ptr->mapObjectTemplates[i].y;
|
|
questLog->npcData[i].negy = TRUE;
|
|
}
|
|
else
|
|
{
|
|
questLog->npcData[i].y = (u8)gSaveBlock1Ptr->mapObjectTemplates[i].y;
|
|
questLog->npcData[i].negy = FALSE;
|
|
}
|
|
questLog->npcData[i].elevation = gSaveBlock1Ptr->mapObjectTemplates[i].elevation;
|
|
questLog->npcData[i].movementType = gSaveBlock1Ptr->mapObjectTemplates[i].movementType;
|
|
}
|
|
}
|
|
#else
|
|
NAKED
|
|
void sub_8110BE8(u8 a0)
|
|
{
|
|
asm_unified("\tpush {r4-r7,lr}\n"
|
|
"\tmov r7, r10\n"
|
|
"\tmov r6, r9\n"
|
|
"\tmov r5, r8\n"
|
|
"\tpush {r5-r7}\n"
|
|
"\tlsls r0, 24\n"
|
|
"\tlsrs r0, 24\n"
|
|
"\tldr r4, =gSaveBlock1Ptr\n"
|
|
"\tmovs r1, 0xCD\n"
|
|
"\tlsls r1, 3\n"
|
|
"\tmuls r0, r1\n"
|
|
"\tmovs r1, 0x98\n"
|
|
"\tlsls r1, 5\n"
|
|
"\tadds r0, r1\n"
|
|
"\tldr r1, [r4]\n"
|
|
"\tadds r7, r1, r0\n"
|
|
"\tadds r0, r7, 0\n"
|
|
"\tbl sub_815A008\n"
|
|
"\tmovs r6, 0\n"
|
|
"\tmov r9, r4\n"
|
|
"\tmovs r2, 0x8D\n"
|
|
"\tlsls r2, 3\n"
|
|
"\tmov r8, r2\n"
|
|
"\tldr r3, =0x0000046a\n"
|
|
"\tmov r10, r3\n"
|
|
"_08110C1C:\n"
|
|
"\tmov r4, r9\n"
|
|
"\tldr r1, [r4]\n"
|
|
"\tlsls r2, r6, 1\n"
|
|
"\tadds r0, r2, r6\n"
|
|
"\tlsls r0, 3\n"
|
|
"\tadds r1, r0\n"
|
|
"\tldr r0, =0x000008e4\n"
|
|
"\tadds r1, r0\n"
|
|
"\tldrh r4, [r1]\n"
|
|
"\tmovs r3, 0\n"
|
|
"\tldrsh r0, [r1, r3]\n"
|
|
"\tmov r12, r2\n"
|
|
"\tcmp r0, 0\n"
|
|
"\tbge _08110C64\n"
|
|
"\tlsls r3, r6, 2\n"
|
|
"\tadds r2, r7, r3\n"
|
|
"\tnegs r0, r0\n"
|
|
"\tmov r4, r8\n"
|
|
"\tadds r1, r2, r4\n"
|
|
"\tstrb r0, [r1]\n"
|
|
"\tldr r0, =0x00000469\n"
|
|
"\tadds r2, r0\n"
|
|
"\tldrb r0, [r2]\n"
|
|
"\tmovs r1, 0x1\n"
|
|
"\torrs r0, r1\n"
|
|
"\tstrb r0, [r2]\n"
|
|
"\tb _08110C7C\n"
|
|
"\t.pool\n"
|
|
"_08110C64:\n"
|
|
"\tlsls r3, r6, 2\n"
|
|
"\tadds r1, r7, r3\n"
|
|
"\tmov r2, r8\n"
|
|
"\tadds r0, r1, r2\n"
|
|
"\tstrb r4, [r0]\n"
|
|
"\tldr r4, =0x00000469\n"
|
|
"\tadds r1, r4\n"
|
|
"\tldrb r2, [r1]\n"
|
|
"\tmovs r0, 0x2\n"
|
|
"\tnegs r0, r0\n"
|
|
"\tands r0, r2\n"
|
|
"\tstrb r0, [r1]\n"
|
|
"_08110C7C:\n"
|
|
"\tadds r5, r3, 0\n"
|
|
"\tmov r1, r9\n"
|
|
"\tldr r0, [r1]\n"
|
|
"\tmov r2, r12\n"
|
|
"\tadds r1, r2, r6\n"
|
|
"\tlsls r1, 3\n"
|
|
"\tadds r0, r1\n"
|
|
"\tldr r3, =0x000008e6\n"
|
|
"\tadds r1, r0, r3\n"
|
|
"\tldrh r2, [r1]\n"
|
|
"\tmovs r4, 0\n"
|
|
"\tldrsh r0, [r1, r4]\n"
|
|
"\tcmp r0, 0\n"
|
|
"\tbge _08110CC8\n"
|
|
"\tadds r3, r7, r5\n"
|
|
"\tadds r1, r0, 0\n"
|
|
"\tnegs r1, r1\n"
|
|
"\tlsls r1, 24\n"
|
|
"\tmov r2, r8\n"
|
|
"\tadds r4, r3, r2\n"
|
|
"\tlsrs r1, 15\n"
|
|
"\tldr r0, [r4]\n"
|
|
"\tldr r2, =0xfffe01ff\n"
|
|
"\tands r0, r2\n"
|
|
"\torrs r0, r1\n"
|
|
"\tstr r0, [r4]\n"
|
|
"\tadd r3, r10\n"
|
|
"\tldrb r0, [r3]\n"
|
|
"\tmovs r1, 0x2\n"
|
|
"\torrs r0, r1\n"
|
|
"\tb _08110CE6\n"
|
|
"\t.pool\n"
|
|
"_08110CC8:\n"
|
|
"\tadds r3, r7, r5\n"
|
|
"\tlsls r2, 24\n"
|
|
"\tmov r0, r8\n"
|
|
"\tadds r4, r3, r0\n"
|
|
"\tlsrs r2, 15\n"
|
|
"\tldr r0, [r4]\n"
|
|
"\tldr r1, =0xfffe01ff\n"
|
|
"\tands r0, r1\n"
|
|
"\torrs r0, r2\n"
|
|
"\tstr r0, [r4]\n"
|
|
"\tadd r3, r10\n"
|
|
"\tldrb r1, [r3]\n"
|
|
"\tmovs r0, 0x3\n"
|
|
"\tnegs r0, r0\n"
|
|
"\tands r0, r1\n"
|
|
"_08110CE6:\n"
|
|
"\tstrb r0, [r3]\n"
|
|
"\tadds r5, r7, r5\n"
|
|
"\tmov r1, r9\n"
|
|
"\tldr r0, [r1]\n"
|
|
"\tmov r2, r12\n"
|
|
"\tadds r3, r2, r6\n"
|
|
"\tlsls r3, 3\n"
|
|
"\tadds r0, r3\n"
|
|
"\tldr r4, =0x000008e8\n"
|
|
"\tadds r0, r4\n"
|
|
"\tldrb r1, [r0]\n"
|
|
"\tmov r0, r10\n"
|
|
"\tadds r4, r5, r0\n"
|
|
"\tlsls r1, 2\n"
|
|
"\tldrb r2, [r4]\n"
|
|
"\tmovs r0, 0x3\n"
|
|
"\tands r0, r2\n"
|
|
"\torrs r0, r1\n"
|
|
"\tstrb r0, [r4]\n"
|
|
"\tmov r1, r9\n"
|
|
"\tldr r0, [r1]\n"
|
|
"\tadds r0, r3\n"
|
|
"\tldr r2, =0x000008e9\n"
|
|
"\tadds r0, r2\n"
|
|
"\tldrb r0, [r0]\n"
|
|
"\tldr r3, =0x0000046b\n"
|
|
"\tadds r5, r3\n"
|
|
"\tstrb r0, [r5]\n"
|
|
"\tadds r0, r6, 0x1\n"
|
|
"\tlsls r0, 16\n"
|
|
"\tlsrs r6, r0, 16\n"
|
|
"\tcmp r6, 0x3F\n"
|
|
"\tbhi _08110D2A\n"
|
|
"\tb _08110C1C\n"
|
|
"_08110D2A:\n"
|
|
"\tpop {r3-r5}\n"
|
|
"\tmov r8, r3\n"
|
|
"\tmov r9, r4\n"
|
|
"\tmov r10, r5\n"
|
|
"\tpop {r4-r7}\n"
|
|
"\tpop {r0}\n"
|
|
"\tbx r0\n"
|
|
"\t.pool");
|
|
}
|
|
#endif // NONMATCHING
|
|
|
|
void sub_8110D48(u8 a0)
|
|
{
|
|
struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[a0];
|
|
|
|
CpuCopy16(gSaveBlock1Ptr->flags, questLog->unk_148, FLAGS_COUNT * sizeof(u8));
|
|
CpuCopy16(gSaveBlock1Ptr->vars, questLog->unk_268, VARS_COUNT * sizeof(u16));
|
|
}
|
|
|
|
void sub_8110D94(void)
|
|
{
|
|
u16 i, j;
|
|
u16 sp0[4];
|
|
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
sp0[i] = 0;
|
|
for (j = 0; j < 16; j++)
|
|
{
|
|
if (gSaveBlock1Ptr->trainerRematches[16 * i + j])
|
|
{
|
|
sp0[i] += (1 << j);
|
|
}
|
|
}
|
|
VarSet(VAR_0x40AA + i, sp0[i]);
|
|
}
|
|
}
|
|
|
|
void sub_8110E20(void)
|
|
{
|
|
VarSet(VAR_0x40AE, gSaveBlock1Ptr->mapDataId);
|
|
}
|
|
|
|
void sub_8110E3C(void)
|
|
{
|
|
sub_8113BF4(gUnknown_203AE08);
|
|
if (++gUnknown_203ADF8 > 3)
|
|
gUnknown_203ADF8 = 0;
|
|
}
|
|
|
|
bool8 sub_8110E68(struct UnkStruct_203AE98 * a0)
|
|
{
|
|
u16 i;
|
|
|
|
for (i = gUnknown_203ADFC; i < gUnknown_203AF98; i++)
|
|
{
|
|
if (gUnknown_203AE08 == NULL)
|
|
return FALSE;
|
|
switch (a0[i].unk_6)
|
|
{
|
|
case 0:
|
|
case 1:
|
|
gUnknown_203AE08 = sub_8113D48(gUnknown_203AE08, &a0[i]);
|
|
break;
|
|
default:
|
|
gUnknown_203AE08 = sub_8113CC8(gUnknown_203AE08, &a0[i]);
|
|
break;
|
|
}
|
|
if (gUnknown_203AE08 == NULL)
|
|
{
|
|
gUnknown_3005E88 = 0;
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
if (gUnknown_3005E88 == 0)
|
|
{
|
|
gUnknown_203AE08 = sub_8113BF4(gUnknown_203AE08);
|
|
return FALSE;
|
|
}
|
|
gUnknown_203ADFC = gUnknown_203AF98;
|
|
return TRUE;
|
|
}
|
|
|
|
void sub_8110F14(u8 taskId)
|
|
{
|
|
u8 i;
|
|
|
|
sub_811381C();
|
|
gUnknown_203ADF9 = 0;
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
if (gSaveBlock1Ptr->questLog[i].unk_000)
|
|
gUnknown_203ADF9++;
|
|
}
|
|
|
|
if (gUnknown_203ADF9 != 0)
|
|
{
|
|
gUnknown_3005ECC = FALSE;
|
|
sub_8110F90(taskId);
|
|
DestroyTask(taskId);
|
|
}
|
|
else
|
|
{
|
|
SetMainCallback2(sub_8056938);
|
|
DestroyTask(taskId);
|
|
}
|
|
}
|
|
|
|
void sub_8110F90(u8 unused)
|
|
{
|
|
gSaveBlock1Ptr->location.mapGroup = 3;
|
|
gSaveBlock1Ptr->location.mapNum = 19;
|
|
gSaveBlock1Ptr->location.warpId = -1;
|
|
gUnknown_203ADF8 = 0;
|
|
gUnknown_2031DD8 = 1;
|
|
sub_8082740(1);
|
|
sub_8111368();
|
|
}
|
|
|
|
void sub_8110FCC(void)
|
|
{
|
|
sub_811175C(gUnknown_203ADF8, gUnknown_203AE98);
|
|
sub_8113B88();
|
|
sub_8112940(1, gUnknown_203AE98, 0x100);
|
|
sub_8111150(gUnknown_203ADF8);
|
|
}
|
|
|
|
bool8 sub_8111000(void)
|
|
{
|
|
LoadPalette(stdpal_get(4), 0xF0, 0x20);
|
|
sub_81109CC(2);
|
|
sub_807DF64();
|
|
gUnknown_203AE94 = (struct UnkStruct_203AE94){};
|
|
gUnknown_203AE94.unk_0_0 = 2;
|
|
return 1;
|
|
}
|
|
|
|
bool8 sub_8111038(void)
|
|
{
|
|
LoadPalette(stdpal_get(4), 0xF0, 0x20);
|
|
sub_81109CC(2);
|
|
sub_807DF7C();
|
|
gUnknown_203AE94 = (struct UnkStruct_203AE94){};
|
|
gUnknown_203AE94.unk_0_0 = 2;
|
|
return 1;
|
|
}
|
|
|
|
void sub_8111070(u8 a0)
|
|
{
|
|
u8 i;
|
|
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
gUnknown_203ADFE[i] = AddWindow(&gUnknown_845661C[i]);
|
|
FillWindowPixelRect(gUnknown_203ADFE[i], 15, 0, 0, gUnknown_845661C[i].width * 8, gUnknown_845661C[i].height * 8);
|
|
}
|
|
|
|
// _("Previously on your quest…$")
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A155);
|
|
|
|
if (a0)
|
|
{
|
|
ConvertIntToDecimalStringN(gStringVar1, a0, STR_CONV_MODE_LEFT_ALIGN, 1);
|
|
StringAppend(gStringVar4, gStringVar1);
|
|
}
|
|
|
|
AddTextPrinterParametrized2(gUnknown_203ADFE[0], 2, 2, 2, 1, 2, &gUnknown_8456634, 0, gStringVar4);
|
|
PutWindowTilemap(gUnknown_203ADFE[0]);
|
|
PutWindowTilemap(gUnknown_203ADFE[1]);
|
|
CopyWindowToVram(gUnknown_203ADFE[0], 2);
|
|
CopyWindowToVram(gUnknown_203ADFE[2], 2);
|
|
CopyWindowToVram(gUnknown_203ADFE[1], 3);
|
|
}
|
|
|
|
void sub_8111134(void)
|
|
{
|
|
PutWindowTilemap(gUnknown_203ADFE[1]);
|
|
CopyWindowToVram(gUnknown_203ADFE[1], 1);
|
|
}
|
|
|
|
void sub_8111150(u8 a0)
|
|
{
|
|
struct QuestLog *questLog = &gSaveBlock1Ptr->questLog[a0];
|
|
u16 i;
|
|
|
|
for (i = 0; i < 64; i++)
|
|
{
|
|
if (questLog->npcData[i].negx)
|
|
gSaveBlock1Ptr->mapObjectTemplates[i].x = -questLog->npcData[i].x;
|
|
else
|
|
gSaveBlock1Ptr->mapObjectTemplates[i].x = questLog->npcData[i].x;
|
|
if (questLog->npcData[i].negy)
|
|
gSaveBlock1Ptr->mapObjectTemplates[i].y = -(u8)questLog->npcData[i].y;
|
|
else
|
|
gSaveBlock1Ptr->mapObjectTemplates[i].y = questLog->npcData[i].y;
|
|
gSaveBlock1Ptr->mapObjectTemplates[i].elevation = questLog->npcData[i].elevation;
|
|
gSaveBlock1Ptr->mapObjectTemplates[i].movementType = questLog->npcData[i].movementType;
|
|
}
|
|
|
|
sub_815A1F8(questLog, gSaveBlock1Ptr->mapObjectTemplates);
|
|
}
|
|
|
|
void sub_8111274(u8 a0, u8 a1)
|
|
{
|
|
struct WarpData sp0;
|
|
|
|
if (!a1)
|
|
{
|
|
gSaveBlock1Ptr->location.mapGroup = gSaveBlock1Ptr->questLog[a0].unk_001;
|
|
gSaveBlock1Ptr->location.mapNum = gSaveBlock1Ptr->questLog[a0].unk_002;
|
|
gSaveBlock1Ptr->location.warpId = gSaveBlock1Ptr->questLog[a0].unk_003;
|
|
gSaveBlock1Ptr->pos.x = gSaveBlock1Ptr->questLog[a0].unk_004;
|
|
gSaveBlock1Ptr->pos.y = gSaveBlock1Ptr->questLog[a0].unk_006;
|
|
}
|
|
else
|
|
{
|
|
sp0.mapGroup = gSaveBlock1Ptr->questLog[a0].unk_001;
|
|
sp0.mapNum = gSaveBlock1Ptr->questLog[a0].unk_002;
|
|
sp0.warpId = gSaveBlock1Ptr->questLog[a0].unk_003;
|
|
sp0.x = gSaveBlock1Ptr->questLog[a0].unk_004;
|
|
sp0.y = gSaveBlock1Ptr->questLog[a0].unk_006;
|
|
sub_8055D5C(&sp0);
|
|
}
|
|
}
|
|
|
|
void sub_8111368(void)
|
|
{
|
|
gUnknown_203ADFA = 2;
|
|
sub_806E6FC();
|
|
sub_809A2DC();
|
|
sub_809A2A4();
|
|
if (sub_8110AC8() == 1)
|
|
{
|
|
sub_8111274(gUnknown_203ADF8, 0);
|
|
gUnknown_3005024 = sub_8111038;
|
|
SetMainCallback2(sub_80572A8);
|
|
}
|
|
else
|
|
{
|
|
sub_8111274(gUnknown_203ADF8, 1);
|
|
warp_in();
|
|
gUnknown_3005024 = sub_8111000;
|
|
SetMainCallback2(sub_805726C);
|
|
}
|
|
}
|
|
|
|
void sub_81113E4(void)
|
|
{
|
|
struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[gUnknown_203ADF8];
|
|
|
|
CpuCopy16(questLog->unk_148, gSaveBlock1Ptr->flags, FLAGS_COUNT * sizeof(u8));
|
|
CpuCopy16(questLog->unk_268, gSaveBlock1Ptr->vars, VARS_COUNT * sizeof(u16));
|
|
sub_8111688();
|
|
}
|
|
|
|
struct PokemonAndSomethingElse
|
|
{
|
|
struct Pokemon mon;
|
|
u16 unk_64;
|
|
u16 unk_66;
|
|
};
|
|
|
|
void sub_8111438(void)
|
|
{
|
|
struct PokemonAndSomethingElse *r9 = AllocZeroed(sizeof(struct PokemonAndSomethingElse));
|
|
u16 r0, r3, r5, r6;
|
|
|
|
CreateMon(&r9->mon, SPECIES_RATTATA, 1, 0x20, FALSE, 0, 0, 0);
|
|
r0 = VarGet(VAR_0x4027);
|
|
r9->unk_64 = r0 >> 12;
|
|
r9->unk_66 = r0 % 0x1000;
|
|
|
|
r5 = sub_8111618();
|
|
if (r5 > r9->unk_64)
|
|
{
|
|
for (r3 = 0; r3 < r5 - r9->unk_64; r3++)
|
|
{
|
|
ZeroMonData(&gPlayerParty[5 - r3]);
|
|
}
|
|
}
|
|
else if (r5 < r9->unk_64)
|
|
{
|
|
for (r3 = 0; r3 < 5; r3++)
|
|
{
|
|
sub_808BCB4(0, r3);
|
|
}
|
|
for (r3 = r5; r3 < r9->unk_64; r3++)
|
|
{
|
|
CopyMon(&gPlayerParty[r3], &r9->mon, sizeof(struct Pokemon));
|
|
}
|
|
}
|
|
|
|
r5 = sub_811164C();
|
|
if (r5 > r9->unk_66)
|
|
{
|
|
for (r3 = 0; r3 < 14; r3++)
|
|
{
|
|
for (r6 = 0; r6 < 30; r6++)
|
|
{
|
|
if (GetBoxMonDataFromAnyBox(r3, r6, MON_DATA_SANITY_BIT2))
|
|
{
|
|
sub_808BCB4(r3, r6);
|
|
r5--;
|
|
if (r5 == r9->unk_66)
|
|
break;
|
|
}
|
|
}
|
|
if (r5 == r9->unk_66)
|
|
break;
|
|
}
|
|
}
|
|
else if (r5 < r9->unk_66)
|
|
{
|
|
for (r3 = 0; r3 < TOTAL_BOXES_COUNT; r3++)
|
|
{
|
|
for (r6 = 0; r6 < IN_BOX_COUNT; r6++)
|
|
{
|
|
struct BoxPokemon * boxMon = GetBoxedMonPtr(r3, r6);
|
|
if (!GetBoxMonData(boxMon, MON_DATA_SANITY_BIT2))
|
|
{
|
|
CopyMon(boxMon, &r9->mon.box, sizeof(struct BoxPokemon));
|
|
r5++;
|
|
if (r5 == r9->unk_66)
|
|
break;
|
|
}
|
|
}
|
|
if (r5 == r9->unk_66)
|
|
break;
|
|
}
|
|
}
|
|
|
|
Free(r9);
|
|
}
|
|
|
|
void sub_81115E8(void)
|
|
{
|
|
u16 r4 = sub_8111618();
|
|
u16 r1 = sub_811164C();
|
|
VarSet(VAR_0x4027, (r4 << 12) + r1);
|
|
}
|
|
|
|
u16 sub_8111618(void)
|
|
{
|
|
u16 count = 0;
|
|
u16 i;
|
|
|
|
for (i = 0; i < PARTY_SIZE; i++)
|
|
{
|
|
if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_BIT2))
|
|
count++;
|
|
}
|
|
|
|
return count;
|
|
}
|
|
|
|
u16 sub_811164C(void)
|
|
{
|
|
u16 count = 0;
|
|
u16 i, j;
|
|
|
|
for (i = 0; i < TOTAL_BOXES_COUNT; i++)
|
|
{
|
|
for (j = 0; j < IN_BOX_COUNT; j++)
|
|
{
|
|
if (GetBoxMonDataFromAnyBox(i, j, MON_DATA_SANITY_BIT2))
|
|
count++;
|
|
}
|
|
}
|
|
|
|
return count;
|
|
}
|
|
|
|
void sub_8111688(void)
|
|
{
|
|
u16 i, j;
|
|
u16 sp0[4];
|
|
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
sp0[i] = VarGet(VAR_0x40AA + i);
|
|
|
|
for (j = 0; j < 16; j++)
|
|
{
|
|
if (sp0[i] & 1)
|
|
gSaveBlock1Ptr->trainerRematches[16 * i + j] = 30;
|
|
else
|
|
gSaveBlock1Ptr->trainerRematches[16 * i + j] = 0;
|
|
sp0[i] >>= 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_8111708(void)
|
|
{
|
|
struct MapHeader sp0;
|
|
|
|
gSaveBlock1Ptr->mapDataId = VarGet(VAR_0x40AE);
|
|
if (gSaveBlock1Ptr->mapDataId == 0)
|
|
{
|
|
sp0 = *get_mapheader_by_bank_and_number(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
|
|
gSaveBlock1Ptr->mapDataId = sp0.mapDataId;
|
|
}
|
|
}
|
|
|
|
void sub_811175C(u8 a0, struct UnkStruct_203AE98 * a1)
|
|
{
|
|
u16 i;
|
|
u16 *r4;
|
|
u16 r6 = 0;
|
|
u16 r9 = 0;
|
|
|
|
memset(a1, 0, 32 * sizeof(struct UnkStruct_203AE98));
|
|
for (i = 0; i < 32; i++)
|
|
{
|
|
gUnknown_203AE0C[i] = NULL;
|
|
}
|
|
|
|
r4 = gSaveBlock1Ptr->questLog[a0].unk_568;
|
|
for (i = 0; i < 32; i++)
|
|
{
|
|
switch (*r4 & 0xFFF)
|
|
{
|
|
case 0:
|
|
r4 = sub_8113D08(r4, &a1[r6]);
|
|
r6++;
|
|
break;
|
|
case 1:
|
|
case 2:
|
|
r4 = sub_8113D94(r4, &a1[r6]);
|
|
r6++;
|
|
break;
|
|
case 39:
|
|
r4 = sub_8113C20(r4, &a1[r6]);
|
|
r6++;
|
|
break;
|
|
case 41:
|
|
r4 = sub_8113C8C(r4, &a1[r6]);
|
|
r6++;
|
|
break;
|
|
default:
|
|
r4 = sub_8113A78(r4, &gUnknown_203AE0C[r9]);
|
|
if (r9 == 0)
|
|
sub_8113ABC(gUnknown_203AE0C[0]);
|
|
r9++;
|
|
break;
|
|
}
|
|
if (r4 == NULL)
|
|
break;
|
|
}
|
|
}
|