pmd-red/src/code_8023144.c
2025-02-25 11:19:28 +01:00

273 lines
7.7 KiB
C

#include "global.h"
#include "globaldata.h"
#include "code_800D090.h"
#include "code_80118A4.h"
#include "code_8023144.h"
#include "constants/colors.h"
#include "constants/input.h"
#include "exclusive_pokemon.h"
#include "friend_area.h"
#include "input.h"
#include "memory.h"
#include "menu_input.h"
#include "pokemon_3.h"
#include "text.h"
static EWRAM_INIT u32 gUnknown_203B298 = {1};
static EWRAM_INIT u16 gUnknown_203B29C = {0};
static EWRAM_INIT u16 gUnknown_203B29E = {0};
EWRAM_INIT s32 gUnknown_203B2A0 = 2;
EWRAM_INIT s32 gUnknown_203B2A4 = 1;
EWRAM_INIT u16 gUnknown_203B2A8 = 0;
EWRAM_INIT u16 gUnknown_203B2AA = 0;
static IWRAM_INIT unkStruct_3001B5C *gUnknown_3001B5C = {NULL};
#include "data/code_8023144.h"
static void sub_8023420(void);
static void sub_80234BC(void);
static u32 sub_80236A4(void);
static bool8 sub_8023704(u8 unused);
static void sub_8023730(void);
static void sub_8023758(void);
static void sub_80237E0(void);
bool8 sub_8023144(s32 a0, s32 index, DungeonPos *sub, u32 a3)
{
u8 param_1_u8 = a0;
if (sub_8023704(param_1_u8))
return FALSE;
if (gUnknown_3001B5C == NULL)
gUnknown_3001B5C = MemoryAlloc(sizeof(unkStruct_3001B5C), 8);
gUnknown_3001B5C->unk0 = param_1_u8;
gUnknown_3001B5C->unk4 = gUnknown_203B298;
gUnknown_3001B5C->s35C.s0.unk34 = index;
gUnknown_3001B5C->s35C.s0.unk38 = &gUnknown_3001B5C->s35C.s0.unk3C.a0[index];
RestoreUnkTextStruct_8006518(&gUnknown_3001B5C->s35C.s0.unk3C);
gUnknown_3001B5C->s35C.s0.unk3C.a0[gUnknown_3001B5C->s35C.s0.unk34] = sUnknown_80DC91C;
gUnknown_3001B5C->s35C.s0.unk38->unk14 = &gUnknown_3001B5C->s35C.unk9C;
if (sub != NULL)
gUnknown_3001B5C->s35C.s0.unk3C.a0[gUnknown_3001B5C->s35C.s0.unk34].pos = *sub;
sub_8012D08(gUnknown_3001B5C->s35C.s0.unk38, a3);
ResetUnusedInputStruct();
xxx_call_save_unk_text_struct_800641C(&gUnknown_3001B5C->s35C.s0.unk3C, TRUE, TRUE);
sub_8013818(&gUnknown_3001B5C->s35C.s0.input, sub_80236A4(), a3, index);
gUnknown_3001B5C->s35C.s0.input.menuIndex = gUnknown_203B29C;
gUnknown_3001B5C->s35C.s0.input.unk1E = gUnknown_203B29E;
sub_8013984(&gUnknown_3001B5C->s35C.s0.input);
sub_8023420();
sub_80234BC();
return TRUE;
}
u32 sub_8023278(bool8 a0)
{
s32 iVar3;
u32 temp;
if (!a0) {
sub_8013660(&gUnknown_3001B5C->s35C.s0.input);
return 0;
}
switch (GetKeyPress(&gUnknown_3001B5C->s35C.s0.input)) {
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
return 2;
case INPUT_A_BUTTON:
PlayMenuSoundEffect(0);
return 3;
case INPUT_SELECT_BUTTON:
PlayMenuSoundEffect(5);
if (temp = gUnknown_3001B5C->unk4, iVar3 = 1, temp < 2)
iVar3 = temp + 1;
gUnknown_3001B5C->unk4 = iVar3;
sub_80236A4();
break;
default:
if (sub_80138B8(&gUnknown_3001B5C->s35C.s0.input, 1) == 0)
return 0;
break;
}
sub_8023420();
sub_80234BC();
return 1;
}
s16 sub_802331C(void)
{
return gUnknown_3001B5C->unkC[(gUnknown_3001B5C->s35C.s0.input.unk1E * gUnknown_3001B5C->s35C.s0.input.unk1C) + gUnknown_3001B5C->s35C.s0.input.menuIndex];
}
void sub_8023354(bool8 cursorSprite)
{
ResetUnusedInputStruct();
xxx_call_save_unk_text_struct_800641C(&gUnknown_3001B5C->s35C.s0.unk3C, FALSE, FALSE);
sub_8013984(&gUnknown_3001B5C->s35C.s0.input);
sub_8023420();
sub_80234BC();
if (cursorSprite)
AddMenuCursorSprite(&gUnknown_3001B5C->s35C.s0.input);
}
void sub_80233A0(void)
{
if (gUnknown_3001B5C != NULL) {
gUnknown_203B298 = gUnknown_3001B5C->unk4;
gUnknown_203B29C = gUnknown_3001B5C->s35C.s0.input.menuIndex;
gUnknown_203B29E = gUnknown_3001B5C->s35C.s0.input.unk1E;
gUnknown_3001B5C->s35C.s0.unk3C.a0[gUnknown_3001B5C->s35C.s0.unk34] = sUnknown_80DC904;
ResetUnusedInputStruct();
xxx_call_save_unk_text_struct_800641C(&gUnknown_3001B5C->s35C.s0.unk3C, TRUE, TRUE);
MemoryFree(gUnknown_3001B5C);
gUnknown_3001B5C = NULL;
}
}
static void sub_8023420(void)
{
gUnknown_3001B5C->s35C.unk9C.f0 = 1;
gUnknown_3001B5C->s35C.unk9C.f1 = 0;
gUnknown_3001B5C->s35C.unk9C.f2 = 12;
gUnknown_3001B5C->s35C.unk9C.f3 = 0;
SUB_80095E4_CALL_2(gUnknown_3001B5C->s35C.s0);
}
static void sub_80234BC(void)
{
u8 cVar2;
u32 y;
s32 uVar3;
s32 iVar4;
s32 species;
u32 color;
s32 i;
u8 buffer2[256];
u8 buffer1[100];
unkStruct_8092638 auStack_2c;
CallPrepareTextbox_8008C54(gUnknown_3001B5C->s35C.s0.unk34);
sub_80073B8(gUnknown_3001B5C->s35C.s0.unk34);
PrintStringOnWindow(10, 0, sPokemon, gUnknown_3001B5C->s35C.s0.unk34, 0);
sub_8012BC4((gUnknown_3001B5C->s35C.unk9C.f2 * 8) + 4, 0, gUnknown_3001B5C->s35C.s0.input.unk1E + 1, 2, 7, gUnknown_3001B5C->s35C.s0.unk34);
for (i = 0; i < gUnknown_3001B5C->s35C.s0.input.unk1A; i++) {
y = sub_8013800(&gUnknown_3001B5C->s35C.s0.input, i);
species = gUnknown_3001B5C->unkC[(gUnknown_3001B5C->s35C.s0.input.unk1E * gUnknown_3001B5C->s35C.s0.input.unk1C) + i];
sub_8092638(GetFriendArea(species), &auStack_2c, FALSE, FALSE);
color = COLOR_WHITE_2;
if (auStack_2c.hasFriendArea)
color = HasRecruitedMon(species) ? COLOR_CYAN : COLOR_GREEN;
iVar4 = GetDexInternalNo(species, 0);
cVar2 = (iVar4 % 10) + 48;
sub_8012C60(20, y, cVar2, color, gUnknown_3001B5C->s35C.s0.unk34);
if (9 < iVar4) {
iVar4 /= 10;
cVar2 = (iVar4 % 10) + 48;
sub_8012C60(13, y, cVar2, color, gUnknown_3001B5C->s35C.s0.unk34);
if (9 < iVar4) {
uVar3 = iVar4 / 10;
cVar2 = (uVar3 % 10) + 48;
sub_8012C60(6, y, cVar2, color, gUnknown_3001B5C->s35C.s0.unk34);
}
}
sub_808D930(buffer1,species);
sprintfStatic(buffer2, sFmtColoredString, color, buffer1);
PrintStringOnWindow(36, y, buffer2, gUnknown_3001B5C->s35C.s0.unk34, 0);
}
sub_80073E0(gUnknown_3001B5C->s35C.s0.unk34);
}
static u32 sub_80236A4(void)
{
s32 index;
gUnknown_3001B5C->unk8 = 0;
for (index = 0; index < MONSTER_MAX; index++) {
if (sub_8098134(index) && (s16)index == GetBaseSpeciesNoUnown(index))
gUnknown_3001B5C->unkC[gUnknown_3001B5C->unk8++] = index;
}
sub_8023730();
return gUnknown_3001B5C->unk8;
}
static bool8 sub_8023704(u8 unused)
{
s32 index;
for (index = 0; index < MONSTER_MAX; index++) {
if (sub_8098134(index))
return FALSE;
}
return TRUE;
}
static void sub_8023730(void)
{
switch (gUnknown_3001B5C->unk4) {
case 1:
sub_8023758();
break;
case 2:
sub_80237E0();
break;
}
}
void sub_8023758(void)
{
s32 temp;
s32 i, j;
s16 *r9 = &gUnknown_3001B5C->unkC[gUnknown_3001B5C->unk8 - 1];
for (i = 0; i < gUnknown_3001B5C->unk8 - 1; i++) {
s16 *r5 = r9;
for (j = gUnknown_3001B5C->unk8 - 1; j > i; j--) {
s16 *r6 = r5 - 1;
if (GetAlphabetParentNo(*r6, 1) > GetAlphabetParentNo(*r5, 1)) {
SWAP(*r5, *r6, temp);
}
r5--;
}
}
}
void sub_80237E0(void)
{
s32 temp;
s32 i, j;
s16 *r9 = &gUnknown_3001B5C->unkC[gUnknown_3001B5C->unk8 - 1];
for (i = 0; i < gUnknown_3001B5C->unk8 - 1; i++) {
s16 *r5 = r9;
for (j = gUnknown_3001B5C->unk8 - 1; j > i; j--) {
s16 *r6 = r5 - 1;
if (GetAlphabetParentNo(*r6, 0) > GetAlphabetParentNo(*r5, 0)) {
SWAP(*r5, *r6, temp);
}
r5--;
}
}
}