decompile code_800F990

This commit is contained in:
DizzyEggg
2025-02-23 12:48:06 +01:00
parent 8c21c7935a
commit 00f3dbfccc
4 changed files with 806 additions and 2173 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -21,17 +21,12 @@ typedef struct unkStruct_202EE8C
extern unkStruct_202EE8C gUnknown_202EE8C[32];
struct UnkStruct_4014Ptr
struct FiendArea
{
s32 unk0;
const u8 *name;
DungeonPos unk4;
u8 unk8[8];
u8 fill8[0x20-0x10];
};
struct UnkStruct_4014Ptr2
{
struct UnkStruct_4014Ptr array[0];
s16 unk10[8];
};
struct UnkStruct_4018
@@ -47,10 +42,13 @@ struct UnkBgStruct
OpenedFile *unk0[5];
u16 unk14[64][64];
u16 unk2014[64][64];
struct UnkStruct_4014Ptr2 *unk4014;
const struct FiendArea *unk4014;
struct UnkStruct_4018 unk4018[32];
s32 unk4A18;
u8 pad4A1C[0x4A2c-0x4A1C];
s32 unk4A1C;
s32 unk4A20;
s32 unk4A24;
s32 unk4A28;
u8 unk4A2C;
axdata unk4A30[8];
axdata unk4C10;
@@ -58,13 +56,13 @@ struct UnkBgStruct
s32 unk4DCC;
u32 unk4DD0;
DungeonPos unk4DD4;
s16 unk4DD8;
s16 unk4DDA;
DungeonPos unk4DD8;
s32 unk4DDC;
s32 unk4DE0;
s32 unk4DE4;
s32 unk4DE8;
u8 unk4DEC[12];
u8 unk4DEC[8];
u8 unk4DF4;
s32 unk4DF8;
MenuInputStruct unk4DFC;
};

View File

@@ -89,7 +89,6 @@ SECTIONS {
asm/code_800ED38.o(.text);
src/code_800F034.o(.text);
src/code_800F958.o(.text);
asm/code_800F990.o(.text);
src/code_8010F28.o(.text);
src/code_80118A4.o(.text);
src/debug.o(.text);

View File

@@ -17,14 +17,19 @@
#include "pokemon.h"
#include "decompress.h"
extern u32 sub_809034C(u8 dungeonIndex, s32 speciesId_, u8 *buffer, bool32 param_4_, bool32 param_5_);
extern void sub_801178C(void);
extern void sub_80117C4(void);
extern void PlayCancelSoundEffect(void);
extern void PlayAcceptSoundEffect(void);
extern void PlayCursorUpDownSoundEffect(void);
extern s32 sprintf(char *, const char *, ...);
extern void sub_800CB20(void);
extern void xxx_call_update_bg_sound_input(void);
extern bool8 sub_800FFE8(u8);
extern void sub_80101F8(u8 *, u8);
extern void CopyDungeonName1toBuffer(u8 *buffer, DungeonLocation *dungeonLocation);
extern s32 Atan2_4096(PixelPos *a);
extern void sub_80117AC(void);
extern void sub_8011760(void);
struct UnkStruct_Sub1
{
@@ -36,13 +41,17 @@ struct UnkStruct_Sub1
struct UnkStruct_203B0E8
{
struct UnkStruct_Sub1 unk0[64];
u8 pad1[0x4014];
OpenedFile *unk1100[5];
u16 unk1114[64][64];
u16 unk3114[64][64];
axdata unk5114;
u8 pad2[0x184];
unkStruct_202EE8C unk5150[16];
s32 unk52D0;
s32 unk52D4;
DungeonPos unk52D8;
s16 unk52DC;
s16 unk52DE;
DungeonPos unk52DC;
u16 unk52E0[1500];
u8 unk5E98[1500];
};
EWRAM_INIT struct UnkBgStruct *gUnknown_203B0E4 = NULL;
@@ -63,12 +72,8 @@ EWRAM_INIT UnkTextStruct3 gUnknown_203B0EC = {
.unkE = 3,
.unk10 = 3,
},
[2] = {
.unk4 = 3,
},
[3] = {
.unk4 = 3,
},
[2] = { .unk4 = 3,},
[3] = { .unk4 = 3,},
}
};
@@ -83,24 +88,781 @@ static inline bool8 ResetFlags(axdata *ptr)
}
extern u8 *const gUnknown_80D408C[];
extern u8 *const gUnknown_80D4014[];
extern const FileArchive gTitleMenuFileArchive;
extern const FileArchive gMonsterFileArchive;
extern const u8 gUnknown_80D40E4[];
extern const u8 gUnknown_80D40EC[];
extern const u8 gUnknown_80D405C[];
extern const DungeonPos gUnknown_80D40C4[];
extern const u8 gUnknown_80D40FC[];
extern const u8 gUnknown_80D4104[];
extern const u8 gUnknown_80D4120[];
extern const u8 gUnknown_80D4124[];
extern const u8 gUnknown_80D3EFC[];
extern const u8 gUnknown_80D40F4[];
extern const u8 gUnknown_80D4064[];
extern const u8 gUnknown_80D406C[];
extern const u8 gUnknown_80D407C[];
extern const u8 gUnknown_80D4080[];
extern const u8 gUnknown_80D4074[];
extern const DungeonPos gDungeonCoordinates[];
void sub_8010960(void);
struct UnkStruct_sub_8010494
{
DungeonLocation unk0;
DungeonLocation unk4;
u8 pad1[8];
u8 unk10;
u8 pad2[0xA];
s16 unk1C;
u8 pad3[0x6E - 0x20];
u8 unk6C;
u8 unk6D[63];
};
void sub_8010A88(bool8 a0)
struct UnkStruct_sub_8010268
{
u8 fill0[4];
struct UnkStruct_sub_8010494 unk4;
struct UnkStruct_203B0E8 *unkB0;
u8 unkB4;
};
static void sub_8010950(void);
static void sub_8010A88(bool8 a0);
static bool8 sub_8010A00(void);
static void nullsub_24(void);
void sub_8011494(void);
void sub_8010960(void);
void sub_8010798(void);
void sub_8010858(void);
void sub_8010494(struct UnkStruct_sub_8010494 *r9);
void sub_8010344(u8 id1, u8 id2);
void sub_801059C(void);
bool8 sub_8010C58(u8 *str);
void sub_8010C10(const u8 *text);
void sub_801091C(void);
void sub_8011398(void);
void sub_801073C(void);
void sub_8010B74(DungeonLocation *dungLocation);
void sub_801169C(void);
void sub_80110B0(void);
void sub_8010EF0(void);
void sub_8011300(void);
void sub_8011240(void);
bool8 sub_800FFE8(u8 friendAreaId);
void sub_8011168(void);
void sub_80100C0(s32 a0, s32 a1, s32 count);
u8 sub_8010014(void);
s32 sub_800FAA8(s32 *a0, s32 *a1);
bool8 sub_800FB6C(void);
void sub_800FC28(void);
void sub_800FC5C(u8 a0);
void sub_8010DA4(void);
extern u16 gUnknown_2026E4E;
extern u8 gUnknown_202DE18;
extern u8 gUnknown_202DE19;
extern const struct FiendArea gFriendAreaLocations[];
extern const u8 gUnknown_80D3EDC[];
extern const u8 gUnknown_80D3EEC[];
struct TestStruct
{
s16 max;
s16 min;
};
extern const struct TestStruct gUnknown_80D3EBC[];
struct struct_unk800F990
{
u32 unk0;
u8 unk4;
u8 unk5;
struct UnkBgStruct *unk8;
u8 unkC;
};
void sub_800F990(struct struct_unk800F990 *param_1)
{
gUnknown_203B0E4 = param_1->unk8;
gUnknown_2026E4E = 0x1010;
sub_80095CC(0,0x14);
UpdateFadeInTile(2);
gUnknown_203B0E4->unk4014 = gFriendAreaLocations;
gUnknown_203B0E4->unk4A2C = param_1->unk5;
sub_8010DA4();
gUnknown_203B0E4->unk4A28 = -1;
gUnknown_203B0E4->unk4A1C = -1;
sub_800FC5C(param_1->unk4);
gUnknown_203B0E4->unk4A20 = gUnknown_203B0E4->unk4A24;
gUnknown_202DE18 = 0xff;
gUnknown_202DE19 = 0;
sub_8011760();
while (1) {
s32 local_1c = 0;
s32 local_18 = 0;
s32 iVar2 = sub_800FAA8(&local_1c, &local_18);
if (iVar2 == 1) {
sub_80100C0(local_1c, local_18, 0x32);
}
else if (iVar2 == 2) {
if (!sub_800FB6C())
continue;
param_1->unkC = gUnknown_203B0E4->unk4DF4;
break;
}
else if (iVar2 == 3) {
if (gUnknown_203B0E4->unk4A18 == gUnknown_203B0E4->unk4A20) {
param_1->unkC = 0;
break;
}
sub_80100C0(gUnknown_203B0E4->unk4A20,0,10);
}
}
sub_800FC28();
sub_8010EF0();
nullsub_16();
}
s32 sub_800FAA8(s32 *a0, s32 *a1)
{
s32 ret = 0;
sub_8011300();
sub_8011398();
while (ret == 0) {
s32 r3;
sub_801169C();
r3 = sub_8010014();
if (r3 != 0xFF) {
s32 r4 = gUnknown_203B0E4->unk4A18;
struct UnkStruct_4018 *ptr = &gUnknown_203B0E4->unk4018[r4];
if (ptr->unk2[r3] >= 0) {
s32 id = ptr->unk2[r3];
struct UnkStruct_4018 *ptr2 = &gUnknown_203B0E4->unk4018[id];
if (ptr2->unk4018 != 0) {
ret = 1;
*a0 = id;
*a1 = r3;
gUnknown_203B0E4->unk4A28 = r3;
gUnknown_203B0E4->unk4A1C = r4;
}
}
}
if (gRealInputs.pressed & A_BUTTON) {
PlayAcceptSoundEffect();
ret = 2;
}
if (gRealInputs.pressed & B_BUTTON) {
PlayCancelSoundEffect();
ret = 3;
}
}
return ret;
}
bool8 sub_800FB6C(void)
{
bool8 ret = FALSE;
sub_8011494();
while (1) {
MenuInputStruct *menuPtr = &gUnknown_203B0E4->unk4DFC;
AddMenuCursorSprite(menuPtr);
sub_801169C();
if (gRealInputs.repeated & DPAD_DOWN) {
MoveMenuCursorDown(menuPtr);
PlayCursorUpDownSoundEffect();
}
if (gRealInputs.repeated & DPAD_UP) {
MoveMenuCursorUp(menuPtr);
PlayCursorUpDownSoundEffect();
}
if ((gRealInputs.pressed & A_BUTTON) || menuPtr->unk28.a_button) {
PlayAcceptSoundEffect();
gUnknown_203B0E4->unk4DF4 = gUnknown_203B0E4->unk4DEC[menuPtr->menuIndex];
ret = TRUE;
break;
}
if ((gRealInputs.pressed & B_BUTTON) || menuPtr->unk28.b_button) {
PlayCancelSoundEffect();
break;
}
}
return ret;
}
void sub_800FC28(void)
{
s32 i;
sub_8011168();
sub_80117AC();
for (i = 0; i < 60; i++) {
gUnknown_203B0E4->unk4DCC -= 2;
sub_801169C();
}
}
void sub_800FC5C(u8 a0)
{
s32 var_48 = 0;
s32 i, j, k;
for (i = 0; i < 32; i++) {
bool8 r7 = FALSE;
bool8 r10 = FALSE;
struct UnkStruct_4018 *r6 = &gUnknown_203B0E4->unk4018[i];
const struct FiendArea *r2 = &gUnknown_203B0E4->unk4014[i];
for (j = 0; j < 8; j++) {
r6->unk2[j] = 0xFFFF;
}
for (j = 0; j < 8; j++) {
if (sub_800FFE8(r2->unk8[j])) {
if (r2->unk8[j] == a0) {
var_48 = i;
}
if (r2->unk8[j] == 0) {
gUnknown_203B0E4->unk4A24 = i;
r10 = TRUE;
}
r7 = TRUE;
}
}
if (r7) {
r6->unk4018 = 1;
AxResInitFile(&r6->unk14, gUnknown_203B0E4->unk0[2], (r10) ? 12 : 1, 0, 0x40, 0, 1);
}
else {
r6->unk4018 = 0;
}
}
for (i = 0; i < 32; i++) {
s32 var1, var2;
struct UnkStruct_4018 *r3 = &gUnknown_203B0E4->unk4018[i];
const struct FiendArea *var_44 = &gUnknown_203B0E4->unk4014[i];
if (!r3->unk4018) {
continue;
}
for (j = 0; j < 8; j++) {
r3->unk2[j] = 0xFFFF;
if (var_44->unk10[j] >= 0) {
struct UnkStruct_4018 *ptr = &gUnknown_203B0E4->unk4018[var_44->unk10[j]];
if (ptr->unk4018) {
r3->unk2[j] = var_44->unk10[j];
}
}
}
var1 = gUnknown_203B0E4->unk4A28;
var2 = gUnknown_203B0E4->unk4A1C;
if (var1 >= 0 && var2 >= 0) {
struct UnkStruct_4018 *ptr = &gUnknown_203B0E4->unk4018[var2];
if (ptr->unk4018) {
var1 += 4;
var1 &= 7;
r3->unk2[var1] = var2;
}
}
for (j = 0; j < 8; j++) {
s32 var_40 = -1;
s32 var_3C = 999999;
if (r3->unk2[j] >= 0)
continue;
for (k = 0; k < 32; k++) {
bool8 r7;
PixelPos pixelPos;
s32 atanVal;
struct UnkStruct_4018 *ptr2_18 = &gUnknown_203B0E4->unk4018[k];
const struct FiendArea *ptr2_14 = &gUnknown_203B0E4->unk4014[k];
if (k == i)
continue;
if (ptr2_18->unk4018 == 0)
continue;
pixelPos.x = (ptr2_14->unk4.x - var_44->unk4.x) << 8;
pixelPos.y = (ptr2_14->unk4.y - var_44->unk4.y) << 8;
atanVal = Atan2_4096(&pixelPos);
pixelPos.x /= 4;
pixelPos.y /= 4;
pixelPos.x /= 256;
pixelPos.y /= 256;
if (pixelPos.x == 0) {
pixelPos.x = 1;
}
if (pixelPos.y == 0) {
pixelPos.y = 1;
}
r7 = FALSE;
if (j == 2) {
while (atanVal >= 0x1000) {
atanVal -= 0x1000;
}
while (atanVal < 0) {
atanVal += 0x1000;
}
if (gUnknown_80D3EBC[j].max < atanVal || gUnknown_80D3EBC[j].min > atanVal) {
r7 = TRUE;
}
}
else {
if (gUnknown_80D3EBC[j].max <= atanVal && gUnknown_80D3EBC[j].min > atanVal) {
r7 = TRUE;
}
}
if (r7) {
s32 sum = (pixelPos.x * pixelPos.x) + (pixelPos.y * pixelPos.y);
if (var_3C > sum) {
var_3C = sum;
var_40 = k;
}
}
}
if (var_40 >= 0) {
r3->unk2[j] = var_40;
}
}
}
AxResInitFile(&gUnknown_203B0E4->unk4C10, gUnknown_203B0E4->unk0[3], 0, 0, 0, 0, TRUE);
gUnknown_203B0E4->unk4A18 = var_48;
gUnknown_203B0E4->unk4DD8 = gUnknown_203B0E4->unk4014[var_48].unk4;
gUnknown_203B0E4->unk4DD4.x = gUnknown_203B0E4->unk4DD8.x - 120;
gUnknown_203B0E4->unk4DD4.y = gUnknown_203B0E4->unk4DD8.y - 80;
sub_8011240();
sub_80110B0();
}
bool8 sub_800FFE8(u8 friendAreaId)
{
if (friendAreaId > 57) return FALSE;
if (friendAreaId == 0) return TRUE;
if (gFriendAreas[friendAreaId]) return TRUE;
return FALSE;
}
u8 sub_8010014(void)
{
u8 sp1[16];
u8 sp2[16];
u8 *table;
u32 flag;
memcpy(sp1, gUnknown_80D3EDC, 16);
memcpy(sp2, gUnknown_80D3EEC, 16);
flag = 0;
table = (gRealInputs.held & R_BUTTON) ? sp2 : sp1;
if (gRealInputs.held & DPAD_DOWN) {
flag |= 1;
}
if (gRealInputs.held & DPAD_RIGHT) {
flag |= 2;
}
if (gRealInputs.held & DPAD_UP) {
flag |= 4;
}
if (gRealInputs.held & DPAD_LEFT) {
flag |= 8;
}
if (gUnknown_202DE18 == table[flag]) {
if (++gUnknown_202DE19 >= 3) {
return table[flag];
}
}
else {
gUnknown_202DE18 = table[flag];
gUnknown_202DE19 = 0;
}
return 0xFF;
}
void sub_80100C0(s32 a0, s32 a1, s32 count)
{
s32 i, arrayId;
DungeonPos pos1, pos2;
AxResInitFile(&gUnknown_203B0E4->unk4C10, gUnknown_203B0E4->unk0[3], 0, a1 & 7, 0, 0, TRUE);
sub_8011168();
arrayId = gUnknown_203B0E4->unk4A18;
pos1 = gUnknown_203B0E4->unk4014[arrayId].unk4;
pos2 = gUnknown_203B0E4->unk4014[a0].unk4;
PlayCursorUpDownSoundEffect();
for (i = 0; i < count; i++) {
gUnknown_203B0E4->unk4DD8.x = ((((pos2.x - pos1.x) * (i << 8)) / count) / 256) + pos1.x;
gUnknown_203B0E4->unk4DD8.y = ((((pos2.y - pos1.y) * (i << 8)) / count) / 256) + pos1.y;
sub_8011240();
sub_80110B0();
sub_801169C();
}
gUnknown_203B0E4->unk4A18 = a0;
gUnknown_203B0E4->unk4DD8 = gUnknown_203B0E4->unk4014[a0].unk4;
sub_8011240();
sub_80110B0();
sub_801169C();
AxResInitFile(&gUnknown_203B0E4->unk4C10, gUnknown_203B0E4->unk0[3], 0, 0, 0, 0, TRUE);
}
void sub_80101F8(u8 *strBuffer, u8 index)
{
if (index == 0) {
FormatString(gUnknown_80D3EFC, strBuffer, strBuffer + 0x50, 0);
}
else {
WriteFriendAreaName(strBuffer, index, FALSE);
}
}
void sub_8010224(u8 unk8, DungeonPos *dst)
{
s32 i, j;
for (i = 0; i < 32; i++) {
const struct FiendArea *friendArea = &gFriendAreaLocations[i];
for (j = 0; j < 8; j++) {
if (friendArea->unk8[j] == unk8) {
dst->x = friendArea->unk4.x;
dst->y = friendArea->unk4.y;
return;
}
}
}
dst->x = 0;
dst->y = 0;
}
void sub_8010268(struct UnkStruct_sub_8010268 *r5)
{
s32 i, speciesId, var;
u8 text[1000];
gUnknown_203B0E8 = r5->unkB0;
gUnknown_2026E4E = 2566;
sub_80095CC(0, 0x14);
UpdateFadeInTile(2);
sub_801059C();
sub_8010494(&r5->unk4);
sub_801178C();
for (i = 0; i < 60; i++) {
sub_8010960();
}
sub_8010344(r5->unk4.unk0.id, r5->unk4.unk4.id);
sub_8010B74(&r5->unk4.unk4);
for (i = 0; i < 60; i++) {
sub_8010960();
}
if (r5->unk4.unk10) {
speciesId = r5->unk4.unk1C;
ASM_MATCH_TRICK(speciesId);
}
else {
speciesId = 0;
}
var = sub_809034C(r5->unk4.unk4.id, speciesId, text, r5->unk4.unk6C, FALSE);
if (var == 0) {
r5->unkB4 = 1;
}
else if (var == 1) {
sub_8010C10(text);
r5->unkB4 = 0;
}
else if (var == 2) {
if (sub_8010C58(text)) {
r5->unkB4 = 1;
}
else {
r5->unkB4 = 0;
}
}
sub_801091C();
sub_801073C();
nullsub_16();
}
// Heavy math function.
void sub_8010344(u8 id1, u8 id2)
{
s32 i, valMax, r3;
PixelPos pixelPos;
DungeonPos pos1 = gDungeonCoordinates[id1];
DungeonPos pos2 = gDungeonCoordinates[id2];
valMax = max(abs(pos2.x - pos1.x), abs(pos2.y - pos1.y));
valMax /= 2;
pixelPos.x = pos1.x - pos2.x;
pixelPos.y = pos2.y - pos1.y;
r3 = Atan2_4096(&pixelPos) - 1024;
if (r3 < 0) {
r3 += 511;
}
r3 >>= 9;
r3 &= 7;
AxResInitFile(&gUnknown_203B0E8->unk5114, gUnknown_203B0E8->unk1100[3], 0, r3, 0, 0, TRUE);
for (i = 0; i < valMax; i++) {
gUnknown_203B0E8->unk52DC.x = ((((pos2.x - pos1.x) * (i << 8)) / valMax) / 256) + pos1.x;
gUnknown_203B0E8->unk52DC.y = ((((pos2.y - pos1.y) * (i << 8)) / valMax) / 256) + pos1.y;
sub_8010798();
sub_8010858();
sub_8010960();
if (gRealInputs.pressed & A_BUTTON)
break;
if (gRealInputs.pressed & B_BUTTON)
break;
}
gUnknown_203B0E8->unk52DC = pos2;
sub_8010798();
sub_8010858();
sub_8010960();
}
void sub_8010494(struct UnkStruct_sub_8010494 *r9)
{
s32 i;
for (i = 0; i < 64; i++) {
struct UnkStruct_Sub1 *structPtr = &gUnknown_203B0E8->unk0[i];
u8 r0;
if (i < 63) {
r0 = r9->unk6D[i];
}
else {
r0 = 1;
}
if (r0) {
structPtr->unk0 = 1;
AxResInitFile(&structPtr->unk8, gUnknown_203B0E8->unk1100[2], (i == 63) ? 12 : 1, 0, 0x40, 0, 1);
structPtr->unk4 = gDungeonCoordinates[i];
}
else {
structPtr->unk0 = 0;
}
}
AxResInitFile(&gUnknown_203B0E8->unk5114, gUnknown_203B0E8->unk1100[3], 0, 0, 0, 0, TRUE);
gUnknown_203B0E8->unk52DC = gDungeonCoordinates[r9->unk0.id];
gUnknown_203B0E8->unk52D8.x = gUnknown_203B0E8->unk52DC.x - 120;
gUnknown_203B0E8->unk52D8.y = gUnknown_203B0E8->unk52DC.y - 80;
sub_8010798();
sub_8010858();
}
void sub_801059C(void)
{
u8 filename[0xC];
s32 i, size;
PokemonStruct1 *pokeStruct = GetPlayerPokemonStruct();
OpenedFile *file = OpenFileAndGetFileDataPtr(gUnknown_80D4014[0], &gTitleMenuFileArchive);
OpenedFile *file2 = OpenFileAndGetFileDataPtr(gUnknown_80D4014[1], &gTitleMenuFileArchive);
sprintf(filename, gUnknown_80D405C, pokeStruct->speciesNum);
gUnknown_203B0E8->unk1100[3] = OpenFileAndGetFileDataPtr(filename, &gMonsterFileArchive);
gUnknown_203B0E8->unk1100[2] = OpenFileAndGetFileDataPtr(gUnknown_80D4064, &gTitleMenuFileArchive);
gUnknown_203B0E8->unk1100[4] = OpenFileAndGetFileDataPtr(gUnknown_80D4014[2], &gTitleMenuFileArchive);
gUnknown_203B0E8->unk1100[1] = OpenFileAndGetFileDataPtr(gUnknown_80D406C, &gMonsterFileArchive);
gUnknown_203B0E8->unk1100[0] = OpenFileAndGetFileDataPtr(gUnknown_80D4014[3], &gTitleMenuFileArchive);
gUnknown_203B0E8->unk52D4 = GetPokemonOverworldPalette(pokeStruct->speciesNum, 0);
sub_8005610(gUnknown_203B0E8->unk1100[2], 0x40, 0x1F, 0);
DecompressATGlobalFile((u32 *)(VRAM + 0x8000), 0x0, file);
sub_8004AA4(gUnknown_203B0E8->unk5150, gUnknown_203B0E8->unk1100[4], 0x10);
size = 0x4000;
DecompressATFile((u8 *) &gUnknown_203B0E8->unk1114, size, file2);
gUnknown_203B0E8->unk52D0 = 0;
gUnknown_203B0E8->unk52D8.x = 0;
gUnknown_203B0E8->unk52D8.y = 0;
for (i = 0; i < 1500; i++) {
gUnknown_203B0E8->unk52E0[i] |= 0xFFFF;
gUnknown_203B0E8->unk5E98[i] = 0;
}
CloseFile(file);
CloseFile(file2);
xxx_call_save_unk_text_struct_800641C(NULL, 1, 1);
}
void sub_801073C(void)
{
CloseFile(gUnknown_203B0E8->unk1100[4]);
CloseFile(gUnknown_203B0E8->unk1100[3]);
CloseFile(gUnknown_203B0E8->unk1100[2]);
CloseFile(gUnknown_203B0E8->unk1100[0]);
CloseFile(gUnknown_203B0E8->unk1100[1]);
}
void sub_8010798(void)
{
if (gUnknown_203B0E8->unk52DC.x - gUnknown_203B0E8->unk52D8.x < 48) {
gUnknown_203B0E8->unk52D8.x = gUnknown_203B0E8->unk52DC.x - 48;
}
else if (gUnknown_203B0E8->unk52DC.x - gUnknown_203B0E8->unk52D8.x > 192) {
gUnknown_203B0E8->unk52D8.x = gUnknown_203B0E8->unk52DC.x - 192;
}
if (gUnknown_203B0E8->unk52DC.y - gUnknown_203B0E8->unk52D8.y < 48) {
gUnknown_203B0E8->unk52D8.y = gUnknown_203B0E8->unk52DC.y - 48;
}
else if (gUnknown_203B0E8->unk52DC.y - gUnknown_203B0E8->unk52D8.y > 112) {
gUnknown_203B0E8->unk52D8.y = gUnknown_203B0E8->unk52DC.y - 112;
}
if (gUnknown_203B0E8->unk52D8.x < 0) {
gUnknown_203B0E8->unk52D8.x = 0;
}
if (gUnknown_203B0E8->unk52D8.y < 0) {
gUnknown_203B0E8->unk52D8.y = 0;
}
if (gUnknown_203B0E8->unk52D8.x >= 240) {
gUnknown_203B0E8->unk52D8.x = 240;
}
if (gUnknown_203B0E8->unk52D8.y >= 160) {
gUnknown_203B0E8->unk52D8.y = 160;
}
}
void sub_8010858(void)
{
s32 i, j;
s32 y1 = gUnknown_203B0E8->unk52D8.y >> 3;
s32 y2 = y1;
for (i = 0; i < 21; i++) {
s32 x1 = gUnknown_203B0E8->unk52D8.x >> 3;
s32 x2 = x1;
for (j = 0; j < 31; j++) {
x1 &= 0x1F;
y1 &= 0x1F;
gUnknown_202B038[2][y1][x1] = gUnknown_203B0E8->unk3114[y2][x2];
gUnknown_202B038[3][y1][x1] = gUnknown_203B0E8->unk1114[y2][x2];
x2++;
x1++;
}
y2++;
y1++;
}
sub_80098F8(2);
sub_80098F8(3);
}
static void nullsub_24(void)
{
}
void sub_801091C(void)
{
s32 i;
sub_8010950();
sub_80117C4();
for (i = 0; i < 60; i++) {
gUnknown_203B0E8->unk52D0 -= 2;
sub_8010960();
}
}
static void sub_8010950(void)
{
xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE);
}
void sub_8010960(void)
{
SetBG2RegOffsets(gUnknown_203B0E8->unk52D8.x, gUnknown_203B0E8->unk52D8.y);
SetBG3RegOffsets(gUnknown_203B0E8->unk52D8.x, gUnknown_203B0E8->unk52D8.y);
sub_8010A88(TRUE);
sub_8010A00();
sub_8005838(NULL, 0);
nullsub_8(gGameOptionsRef->unkA);
sub_8005180();
sub_80060EC();
IncrementPlayTime(gPlayTimeRef);
sub_800CB20();
LoadBufferedInputs();
CopySpritesToOam();
sub_8005304();
TransferBGPaletteBuffer();
xxx_call_update_bg_vram();
nullsub_24();
sub_8009908();
xxx_call_update_bg_sound_input();
sub_8011860();
ResetSprites(FALSE);
}
static bool8 sub_8010A00(void)
{
bool8 ret = FALSE;
if (gUnknown_203B0E8->unk52D0 < 31) {
s32 i;
RGB *color = (void *) gUnknown_203B0E8->unk1100[0]->data;
if (++gUnknown_203B0E8->unk52D0 >= 31) {
gUnknown_203B0E8->unk52D0 = 31;
}
for (i = 0; i < 224; color++, i++) {
SetBGPaletteBufferColorRGB(i, color, gUnknown_203B0E8->unk52D0, NULL);
}
color = (void *) gUnknown_203B0E8->unk1100[1]->data;
for (i = 0; i < 240; color++, i++) {
SetBGPaletteBufferColorRGB(i + 256, color, gUnknown_203B0E8->unk52D0, NULL);
}
ret = TRUE;
}
return ret;
}
static void sub_8010A88(bool8 a0)
{
s32 i;
unkStruct_2039DB0 var_2C;
@@ -112,7 +874,7 @@ void sub_8010A88(bool8 a0)
pos = gUnknown_203B0E8->unk52D8;
RunAxAnimationFrame(&gUnknown_203B0E8->unk5114);
if (a0) {
DoAxFrame_800558C(&gUnknown_203B0E8->unk5114, gUnknown_203B0E8->unk52DC - pos.x, gUnknown_203B0E8->unk52DE - pos.y, 3, gUnknown_203B0E8->unk52D4, &var_2C);
DoAxFrame_800558C(&gUnknown_203B0E8->unk5114, gUnknown_203B0E8->unk52DC.x - pos.x, gUnknown_203B0E8->unk52DC.y - pos.y, 3, gUnknown_203B0E8->unk52D4, &var_2C);
}
for (i = 0; i < 64; i++) {
@@ -146,7 +908,7 @@ void sub_8010B74(DungeonLocation *dungLocation)
}
};
if (gUnknown_203B0E8->unk52DE - gUnknown_203B0E8->unk52D8.y <= 80) {
if (gUnknown_203B0E8->unk52DC.y - gUnknown_203B0E8->unk52D8.y <= 80) {
spTxtStruct.a0[0].pos.y = 17;
}
else {
@@ -305,11 +1067,11 @@ void sub_8010F28(void)
var_30.unkA = 0x800;
pos = gUnknown_203B0E4->unk4DD4;
RunAxAnimationFrame(&gUnknown_203B0E4->unk4C10);
DoAxFrame_800558C(&gUnknown_203B0E4->unk4C10, gUnknown_203B0E4->unk4DD8 - pos.x, gUnknown_203B0E4->unk4DDA - pos.y, 3, gUnknown_203B0E4->unk4DD0, &var_30);
DoAxFrame_800558C(&gUnknown_203B0E4->unk4C10, gUnknown_203B0E4->unk4DD8.x - pos.x, gUnknown_203B0E4->unk4DD8.y - pos.y, 3, gUnknown_203B0E4->unk4DD0, &var_30);
for (i = 0; i < 32; i++) {
struct UnkStruct_4018 *r0 = &gUnknown_203B0E4->unk4018[i];
struct UnkStruct_4014Ptr *r5 = &gUnknown_203B0E4->unk4014->array[i];
const struct FiendArea *r5 = &gUnknown_203B0E4->unk4014[i];
if (r0->unk4018 != 0) {
RunAxAnimationFrame(&r0->unk14);
DoAxFrame_800558C(&r0->unk14, r5->unk4.x - pos.x, r5->unk4.y- pos.y, 1, 0, &var_30);
@@ -323,8 +1085,8 @@ void sub_8010F28(void)
RunAxAnimationFrame(&gUnknown_203B0E4->unk4A30[i]);
if (!(gRealInputs.held & R_BUTTON) || (i % 2) != 0) {
DoAxFrame_800558C(&gUnknown_203B0E4->unk4A30[i],
(gUnknown_80D40C4[i].x + gUnknown_203B0E4->unk4DD8) - pos.x,
(gUnknown_80D40C4[i].y + gUnknown_203B0E4->unk4DDA) - pos.y,
(gUnknown_80D40C4[i].x + gUnknown_203B0E4->unk4DD8.x) - pos.x,
(gUnknown_80D40C4[i].y + gUnknown_203B0E4->unk4DD8.y) - pos.y,
2, 0, &var_30);
}
}
@@ -402,18 +1164,18 @@ bool8 sub_80111C4(void)
void sub_8011240(void)
{
if (gUnknown_203B0E4->unk4DD8 - gUnknown_203B0E4->unk4DD4.x < 48) {
gUnknown_203B0E4->unk4DD4.x = gUnknown_203B0E4->unk4DD8 - 48;
if (gUnknown_203B0E4->unk4DD8.x - gUnknown_203B0E4->unk4DD4.x < 48) {
gUnknown_203B0E4->unk4DD4.x = gUnknown_203B0E4->unk4DD8.x - 48;
}
else if (gUnknown_203B0E4->unk4DD8 - gUnknown_203B0E4->unk4DD4.x > 192) {
gUnknown_203B0E4->unk4DD4.x = gUnknown_203B0E4->unk4DD8 - 192;
else if (gUnknown_203B0E4->unk4DD8.x - gUnknown_203B0E4->unk4DD4.x > 192) {
gUnknown_203B0E4->unk4DD4.x = gUnknown_203B0E4->unk4DD8.x - 192;
}
if (gUnknown_203B0E4->unk4DDA - gUnknown_203B0E4->unk4DD4.y < 48) {
gUnknown_203B0E4->unk4DD4.y = gUnknown_203B0E4->unk4DDA - 48;
if (gUnknown_203B0E4->unk4DD8.y - gUnknown_203B0E4->unk4DD4.y < 48) {
gUnknown_203B0E4->unk4DD4.y = gUnknown_203B0E4->unk4DD8.y - 48;
}
else if (gUnknown_203B0E4->unk4DDA - gUnknown_203B0E4->unk4DD4.y > 112) {
gUnknown_203B0E4->unk4DD4.y = gUnknown_203B0E4->unk4DDA - 112;
else if (gUnknown_203B0E4->unk4DD8.y - gUnknown_203B0E4->unk4DD4.y > 112) {
gUnknown_203B0E4->unk4DD4.y = gUnknown_203B0E4->unk4DD8.y - 112;
}
if (gUnknown_203B0E4->unk4DD4.x < 0) {
@@ -450,7 +1212,7 @@ void sub_8011398(void)
{
u8 txt[200];
s32 id = gUnknown_203B0E4->unk4A18;
struct UnkStruct_4014Ptr *r6 = &gUnknown_203B0E4->unk4014->array[id];
const struct FiendArea *r6 = &gUnknown_203B0E4->unk4014[id];
UnkTextStruct3 spTxtStruct = {0};
spTxtStruct.a0[0].unk4 = 3;
@@ -463,7 +1225,7 @@ void sub_8011398(void)
spTxtStruct.a0[2].unk4 = 3;
spTxtStruct.a0[3].unk4 = 3;
if (gUnknown_203B0E4->unk4DDA - gUnknown_203B0E4->unk4DD4.y <= 80) {
if (gUnknown_203B0E4->unk4DD8.y - gUnknown_203B0E4->unk4DD4.y <= 80) {
spTxtStruct.a0[0].pos.y = 17;
}
else {
@@ -472,7 +1234,7 @@ void sub_8011398(void)
xxx_call_save_unk_text_struct_800641C(&spTxtStruct, TRUE, TRUE);
sub_80073B8(0);
sprintfStatic(txt, gUnknown_80D40FC, r6->unk0);
sprintfStatic(txt, gUnknown_80D40FC, r6->name);
PrintFormattedStringOnWindow(12, 2, txt, 0, '\0');
sub_80073E0(0);
gUnknown_203B0E4->unk4DDC = (spTxtStruct.a0[0].pos.x * 8) - 5;
@@ -485,7 +1247,7 @@ void sub_8011494(void)
{
s32 i, count, var;
s32 id = gUnknown_203B0E4->unk4A18;
struct UnkStruct_4014Ptr *r8 = &gUnknown_203B0E4->unk4014->array[id];
const struct FiendArea *r8 = &gUnknown_203B0E4->unk4014[id];
MenuInputStruct *menuInput = &gUnknown_203B0E4->unk4DFC;
UnkTextStruct2_sub2 subTxt;
UnkTextStruct3 spTxtStruct = {
@@ -561,7 +1323,7 @@ void sub_8011494(void)
PrintFormattedStringOnWindow(12, r4, gUnknown_80D4120, 0, '\0');
}
else {
sub_80926F8(r5, &unkFriendAreaStruct, gUnknown_203B0E4->unk4A2C); // TODO FIX R8
sub_80926F8(r5, &unkFriendAreaStruct, gUnknown_203B0E4->unk4A2C);
gFormatArgs[0] = unkFriendAreaStruct.unk2;
gFormatArgs[1] = unkFriendAreaStruct.numPokemon;
PrintFormattedStringOnWindow(12, r4, gUnknown_80D4124, 0, '\0');