finish out another file and more documenting

This commit is contained in:
Seth Barberee 2023-02-24 18:14:21 -08:00
parent a9049a261f
commit 08f7182576
15 changed files with 583 additions and 706 deletions

View File

@ -1,232 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8012BC4
sub_8012BC4:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x24
mov r10, r0
mov r9, r1
adds r1, r2, 0
adds r7, r3, 0
movs r0, 0
mov r8, r0
add r0, sp, 0x4
adds r2, r7, 0
bl ConvertToDecimal
subs r5, r7, 0x1
cmp r5, 0
ble _08012C0A
lsls r0, r5, 2
mov r1, sp
adds r1, r0
adds r1, 0x4
ldr r0, [r1]
cmp r0, 0
bne _08012C0A
movs r2, 0xFF
_08012BFA:
str r2, [r1]
subs r1, 0x4
subs r5, 0x1
cmp r5, 0
ble _08012C0A
ldr r0, [r1]
cmp r0, 0
beq _08012BFA
_08012C0A:
movs r5, 0
cmp r5, r7
bge _08012C50
ldr r0, [sp, 0x4]
cmp r0, 0xFF
beq _08012C50
add r6, sp, 0x4
_08012C18:
ldm r6!, {r0}
adds r0, 0x30
lsls r0, 24
lsrs r0, 24
bl ReturnIntFromChar2
adds r4, r0, 0
bl GetCharacter
movs r1, 0x6
ldrsh r0, [r0, r1]
add r8, r0
mov r2, r10
mov r1, r8
subs r0, r2, r1
ldr r2, [sp, 0x48]
str r2, [sp]
mov r1, r9
adds r2, r4, 0
ldr r3, [sp, 0x44]
bl xxx_call_draw_char
adds r5, 0x1
cmp r5, r7
bge _08012C50
ldr r0, [r6]
cmp r0, 0xFF
bne _08012C18
_08012C50:
add sp, 0x24
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_8012BC4
thumb_func_start sub_8012C60
sub_8012C60:
push {r4-r7,lr}
sub sp, 0x4
adds r5, r0, 0
adds r6, r1, 0
adds r0, r2, 0
adds r7, r3, 0
lsls r0, 24
lsrs r0, 24
bl ReturnIntFromChar2
adds r4, r0, 0
bl GetCharacter
adds r1, r0, 0
movs r2, 0x6
ldrsh r0, [r1, r2]
cmp r0, 0xB
bgt _08012C90
movs r1, 0xC
subs r1, r0
lsrs r0, r1, 31
adds r1, r0
asrs r0, r1, 1
b _08012C92
_08012C90:
movs r0, 0
_08012C92:
adds r0, r5, r0
ldr r1, [sp, 0x18]
str r1, [sp]
adds r1, r6, 0
adds r2, r4, 0
adds r3, r7, 0
bl xxx_call_draw_char
add sp, 0x4
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_8012C60
thumb_func_start sub_8012CAC
sub_8012CAC:
push {r4-r7,lr}
mov r7, r8
push {r7}
mov r8, r0
adds r4, r1, 0
movs r7, 0
movs r6, 0
ldr r0, [r4]
cmp r0, 0
beq _08012CE6
movs r5, 0x80
lsls r5, 9
_08012CC4:
adds r0, r5, 0
movs r1, 0x80
lsls r1, 9
adds r5, r1
asrs r7, r0, 16
ldr r0, [r4]
bl sub_8008ED0
lsls r0, 16
asrs r0, 16
cmp r0, r6
ble _08012CDE
adds r6, r0, 0
_08012CDE:
adds r4, 0x8
ldr r0, [r4]
cmp r0, 0
bne _08012CC4
_08012CE6:
adds r0, r6, 0
cmp r0, 0
bge _08012CEE
adds r0, 0x7
_08012CEE:
asrs r0, 3
adds r0, 0x2
mov r1, r8
strh r0, [r1, 0xC]
mov r0, r8
adds r1, r7, 0
bl sub_8012D08
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_8012CAC
thumb_func_start sub_8012D08
sub_8012D08:
push {r4,lr}
adds r4, r0, 0
adds r0, r1, 0
movs r1, 0xC
bl sub_80095E4
lsls r0, 16
asrs r1, r0, 16
ldr r0, [r4, 0x4]
cmp r0, 0x6
bne _08012D24
adds r0, r1, 0x2
lsls r0, 16
asrs r1, r0, 16
_08012D24:
lsls r0, r1, 16
lsrs r0, 16
strh r0, [r4, 0xE]
strh r0, [r4, 0x10]
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_8012D08
thumb_func_start sub_8012D34
sub_8012D34:
push {r4,lr}
adds r4, r0, 0
adds r0, r1, 0
movs r1, 0x18
bl sub_8009614
lsls r0, 16
asrs r1, r0, 16
ldr r0, [r4, 0x4]
cmp r0, 0x6
bne _08012D50
adds r0, r1, 0x2
lsls r0, 16
asrs r1, r0, 16
_08012D50:
lsls r0, r1, 16
lsrs r0, 16
strh r0, [r4, 0xE]
strh r0, [r4, 0x10]
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_8012D34
.align 2, 0 @ Don't pad with nop.

View File

@ -5,148 +5,6 @@
.text
thumb_func_start sub_801EE10
sub_801EE10:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
adds r6, r0, 0
mov r9, r2
adds r4, r3, 0
ldr r0, [sp, 0x20]
mov r8, r0
lsls r1, 16
asrs r7, r1, 16
lsls r4, 24
lsrs r4, 24
ldr r5, _0801EF28
movs r0, 0xBC
movs r1, 0x8
bl MemoryAlloc
str r0, [r5]
movs r2, 0
strb r4, [r0, 0x4]
ldr r0, [r5]
movs r1, 0x1
strb r1, [r0, 0x5]
ldr r0, [r5]
strb r1, [r0, 0x6]
ldr r0, [r5]
strb r1, [r0, 0x7]
ldr r0, [r5]
str r6, [r0]
cmp r6, 0x1
bls _0801EE5E
cmp r6, 0x3
bhi _0801EE5E
strb r2, [r0, 0x5]
ldr r0, [r5]
strb r2, [r0, 0x6]
ldr r0, [r5]
strb r2, [r0, 0x7]
_0801EE5E:
ldr r4, _0801EF28
ldr r3, [r4]
ldr r2, _0801EF2C
movs r0, 0x58
adds r1, r7, 0
muls r1, r0
ldr r0, [r2]
adds r0, r1
str r0, [r3, 0x8]
ldrb r0, [r0, 0x2]
strb r0, [r3, 0xC]
ldr r0, [r4]
mov r1, r9
str r1, [r0, 0x10]
adds r0, 0xB8
ldr r1, [sp, 0x1C]
str r1, [r0]
bl sub_801F3F8
adds r5, r0, 0
adds r6, r5, 0
cmp r5, 0x4
bge _0801EE8E
movs r6, 0x4
_0801EE8E:
ldr r0, [r4]
adds r0, 0x58
bl sub_8006518
ldr r1, [r4]
mov r2, r8
str r2, [r1, 0x50]
lsls r0, r2, 1
add r0, r8
lsls r0, 3
adds r1, r0
adds r1, 0x58
ldr r0, _0801EF30
ldm r0!, {r2,r3,r7}
stm r1!, {r2,r3,r7}
ldm r0!, {r2,r3,r7}
stm r1!, {r2,r3,r7}
ldr r0, [r4]
adds r0, 0xB8
ldr r0, [r0]
cmp r0, 0
beq _0801EED8
mov r0, r8
bl sub_8006544
ldr r1, [r4]
str r0, [r1, 0x54]
lsls r2, r0, 1
adds r2, r0
lsls r2, 3
adds r1, r2
adds r1, 0x58
ldr r0, _0801EF34
ldm r0!, {r2,r3,r7}
stm r1!, {r2,r3,r7}
ldm r0!, {r2,r3,r7}
stm r1!, {r2,r3,r7}
_0801EED8:
ldr r0, [r4]
ldr r2, [r0, 0x50]
lsls r1, r2, 1
adds r1, r2
lsls r1, 3
adds r1, 0x58
adds r0, r1
adds r1, r6, 0
bl sub_8012D08
bl ResetUnusedInputStruct
ldr r0, [r4]
adds r0, 0x58
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
ldr r0, [r4]
adds r0, 0x1C
adds r1, r5, 0
adds r2, r5, 0
mov r3, r8
bl sub_8013818
ldr r0, [r4]
adds r0, 0x1C
movs r1, 0
bl sub_8013780
movs r0, 0x1
bl sub_801F280
movs r0, 0x1
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0801EF28: .4byte gUnknown_203B270
_0801EF2C: .4byte gRecruitedPokemonRef
_0801EF30: .4byte gUnknown_80DC25C
_0801EF34: .4byte gUnknown_80DC274
thumb_func_end sub_801EE10
thumb_func_start sub_801EF38
sub_801EF38:
push {r4-r7,lr}

View File

@ -1,10 +1,5 @@
.section .rodata
.global gUnknown_80D47B8
gUnknown_80D47B8: @ 80D47B8
.byte 0x07, 0x00, 0x00, 0x00
.byte 0x02, 0x00, 0x00, 0x00
.byte 0x02, 0x00, 0x00, 0x00
.global UnkData_80D47C4
UnkData_80D47C4:

View File

@ -12,7 +12,7 @@ struct MenuStruct
// size: 0x50
u8 *unk0;
/* 0x4 */ struct MenuItem *menuItems;
u32 *unk8;
const u32 *menuTextColorArray;
u16 *unkC;
/* 0x10 */ s32 index;
/* 0x14 */ u32 unk14;

View File

@ -24,7 +24,7 @@ struct UnkTextStruct2 {
u8 fill00[0x04];
s32 unk4;
struct UnkTextStruct2_sub unk08;
s16 unk0c;
s16 unkC;
s16 unkE;
s16 unk10;
s16 unk12;

View File

@ -89,7 +89,6 @@ SECTIONS {
src/save.o(.text);
src/code_8012A18.o(.text);
src/more_input.o(.text);
asm/code_8012A18.o(.text);
src/menu_input.o(.text);
asm/code_80130A8.o(.text);
src/code_8012A18_1.o(.text);
@ -119,10 +118,11 @@ SECTIONS {
src/gulpin_shop.o(.text);
asm/gulpin_shop.o(.text);
src/gulpin_shop_1.o(.text);
src/code_801EE10.o(.text);
asm/code_801EE10.o(.text);
src/code_8023144.o(.text);
asm/code_801EE10_1.o(.text);
src/code_801EE10.o(.text);
src/code_801EE10_1.o(.text);
src/luminous_cave.o(.text);
src/friend_list_menu_1.o(.text);
asm/friend_list_menu.o(.text);
@ -423,6 +423,7 @@ SECTIONS {
data/data_80B9BB8.o(.rodata);
src/debug.o(.rodata);
src/save.o(.rodata);
src/menu_input.o(.rodata);
data/data_80D47B8.o(.rodata);
src/friend_area_action_menu.o(.rodata);
src/friend_area_action_menu_1.o(.rodata);

View File

@ -1,312 +1,89 @@
#include "global.h"
#include "constants/input.h"
#include "code_800D090.h"
#include "pokemon.h"
#include "input.h"
#include "memory.h"
#include "text.h"
#include "memory.h"
#include "input.h"
struct unkStruct_203B2AC
{
u8 unk0[0x1E];
s16 unk1E;
s16 unk20;
u8 unk22[0x34 - 0x22];
u32 unk34[3];
u8 unk40[0x48 - 0x40];
s16 speciesNum;
u32 unk4C;
u8 unk50[0xB0 - 0x50];
u32 unkB0;
u8 fillB4[0xE0 - 0xB4];
u32 unkE0;
struct UnkTextStruct2 *unkE4;
struct UnkTextStruct2 unkE8[4];
u8 unk148[4];
};
extern struct unkStruct_203B2AC *gUnknown_203B2AC;
struct unkStruct_3001B60
struct unkStruct_203B270
{
// size 0xBC
u32 unk0;
u32 sortMethod;
u32 unk8;
u32 unkC;
u32 unk10;
u8 fill14[0x18 - 0x14];
s16 unk18;
s16 unk1A[2];
u8 fill1C[0x370 - 0x1E];
s16 unk370;
s16 unk372;
s16 unk374;
s16 unk376;
u8 unk4;
u8 unk5;
u8 unk6;
u8 unk7;
/* 0x8 */ struct PokemonStruct *pokeStruct;
/* 0xC */ u8 isTeamLeader;
/* 0x10 */ struct Move *moves;
u8 fill14[0x1C - 0x14];
u32 unk1C;
u8 fill20[0x50 - 0x20];
u32 unk50;
u32 unk54;
struct UnkTextStruct2 unk58[4];
u32 unkB8;
};
extern struct unkStruct_3001B60 *gUnknown_3001B60;
extern struct UnkTextStruct2 gUnknown_80DC9B0;
extern struct UnkTextStruct2 gUnknown_80DC9C8;
extern struct unkStruct_203B270 *gUnknown_203B270;
extern struct UnkTextStruct2 gUnknown_80DC25C;
extern struct UnkTextStruct2 gUnknown_80DC274;
extern void sub_8012D08(void *, u32);
extern void sub_8013818(void *, u32, u32, u32);
extern bool8 sub_80023E4(u32);
extern void sub_808FF20(u32 *, struct PokemonStruct *, bool8);
extern void CreatePokemonInfoTabScreen(u32, s16, u32 *, u32 *, u32);
extern s32 GetKeyPress(void *);
extern bool8 sub_8013938(void *);
extern void sub_802452C(void);
extern void PlayMenuSoundEffect(u32);
extern void sub_8013984(void *);
void sub_80922B4(u8 *buffer, u8 *string, s32 size);
bool8 ComparePokemonNames(s16 a1, s16 a2);
u32 sub_8006544(u32 index);
s32 sub_801F3F8(void);
void sub_8013780(u32 *, u32);
void sub_801F280(u32);
void sub_8024588(void);
void sub_80245D0(void);
void sub_8024604(void);
extern u8 gUnknown_80DC9A4[];
void SortbyInternalNo(s32 param_1, s32 param_2);
void SortbyAlphabetNo(s32 param_1,s32 param_2);
void SortbyName(s32 param_1,s32 param_2);
bool8 sub_8024184(struct PokemonStruct *pokemon, u8 area)
u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u32 param_5,u32 param_6)
{
if(area == GetFriendArea(pokemon->speciesNum))
return TRUE;
else
return FALSE;
}
void sub_80241A8(void)
{
switch(gUnknown_3001B60->sortMethod)
s32 iVar5;
s32 iVar8;
s32 species_s32;
u8 param_4_u8;
s32 four;
species_s32 = species;
param_4_u8 = param_4;
gUnknown_203B270 = MemoryAlloc(sizeof(struct unkStruct_203B270), 8);
gUnknown_203B270->unk4 = param_4_u8;
gUnknown_203B270->unk5 = 1;
gUnknown_203B270->unk6 = 1;
gUnknown_203B270->unk7 = 1;
gUnknown_203B270->unk0 = param_1;
switch(param_1)
{
case 2:
if (gUnknown_3001B60->unkC != gUnknown_3001B60->unk10) {
SortbyAlphabetNo(gUnknown_3001B60->unkC, gUnknown_3001B60->unk10);
}
if (gUnknown_3001B60->unk10 != gUnknown_3001B60->unk8) {
SortbyAlphabetNo(gUnknown_3001B60->unk10, gUnknown_3001B60->unk8);
}
break;
case 3:
if (gUnknown_3001B60->unkC != gUnknown_3001B60->unk10) {
SortbyName(gUnknown_3001B60->unkC, gUnknown_3001B60->unk10);
}
if (gUnknown_3001B60->unk10 != gUnknown_3001B60->unk8) {
SortbyName(gUnknown_3001B60->unk10, gUnknown_3001B60->unk8);
}
break;
case 1:
if (gUnknown_3001B60->unkC != gUnknown_3001B60->unk10) {
SortbyInternalNo(gUnknown_3001B60->unkC, gUnknown_3001B60->unk10);
}
if (gUnknown_3001B60->unk10 != gUnknown_3001B60->unk8) {
SortbyInternalNo(gUnknown_3001B60->unk10, gUnknown_3001B60->unk8);
}
case 2:
case 3:
gUnknown_203B270->unk5 = 0;
gUnknown_203B270->unk6 = 0;
gUnknown_203B270->unk7 = 0;
break;
case 0:
case 1:
break;
}
}
void SortbyInternalNo(s32 param_1, s32 param_2)
{
s16 *r4;
s32 iVar4;
s16 *r10;
s16 *r5;
s32 r6;
s32 r1;
s32 r7;
s32 r9;
r10 = &gUnknown_3001B60->unk18 + param_2;
r7 = param_1;
r1 = param_2 - 1;
if (r7 < r1) {
r9 = r1;
do {
r4 = r10;
r6 = r1;
iVar4 = r7 + 1;
for (; r6 > r7; r6--) {
if (GetInternalNo(gRecruitedPokemonRef->pokemon[r5 = r4 - 1, *r5].speciesNum) > GetInternalNo(gRecruitedPokemonRef->pokemon[*r4].speciesNum)) {
r1 = *r4;
*r4 = *r5;
*r5 = r1;
}
r4 = r5;
}
r7 = iVar4;
r1 = r9;
} while (iVar4 < r1);
gUnknown_203B270->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32];
gUnknown_203B270->isTeamLeader = gUnknown_203B270->pokeStruct->isTeamLeader;
gUnknown_203B270->moves = moves;
gUnknown_203B270->unkB8 = param_5;
iVar8 = iVar5 = sub_801F3F8();
four = 4;
if (iVar8 < four) {
iVar8 = 4;
}
}
void SortbyAlphabetNo(s32 param_1,s32 param_2)
{
s16 *r4;
s32 iVar4;
s16 *r10;
s16 *r5;
s32 r6;
s32 r1;
s32 r7;
s32 r9;
r10 = &gUnknown_3001B60->unk18 + param_2;
r7 = param_1;
r1 = param_2 - 1;
if (r7 < r1) {
r9 = r1;
do {
r4 = r10;
r6 = r1;
iVar4 = r7 + 1;
for (; r6 > r7; r6--) {
if (GetAlphabetParentNo(gRecruitedPokemonRef->pokemon[r5 = r4 - 1, *r5].speciesNum, 0) > GetAlphabetParentNo(gRecruitedPokemonRef->pokemon[*r4].speciesNum, 0)) {
r1 = *r4;
*r4 = *r5;
*r5 = r1;
}
r4 = r5;
}
r7 = iVar4;
r1 = r9;
} while (iVar4 < r1);
sub_8006518(gUnknown_203B270->unk58);
gUnknown_203B270->unk50 = param_6;
gUnknown_203B270->unk58[param_6] = gUnknown_80DC25C;
if (gUnknown_203B270->unkB8 != 0) {
gUnknown_203B270->unk54 = sub_8006544(param_6);
gUnknown_203B270->unk58[gUnknown_203B270->unk54] = gUnknown_80DC274;
}
}
void SortbyName(s32 param_1,s32 param_2)
{
s16 *r4;
s32 iVar4;
s16 *r10;
s16 *r5;
s32 r6;
s32 r1;
s32 r7;
s32 r9;
r10 = &gUnknown_3001B60->unk18 + param_2;
r7 = param_1;
r1 = param_2 - 1;
if (r7 < r1) {
r9 = r1;
do {
r4 = r10;
r6 = r1;
iVar4 = r7 + 1;
for (; r6 > r7; r6--) {
r5 = r4 - 1;
if (ComparePokemonNames(*r5, *r4)) {
r1 = *r4;
*r4 = *r5;
*r5 = r1;
}
r4 = r5;
}
r7 = iVar4;
r1 = r9;
} while (iVar4 < r1);
}
}
struct PokemonStruct *sub_80243E8(void)
{
u8 buffer [40];
u8 nameBuffer [20];
struct PokemonStruct *pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_3001B60->unk1A[gUnknown_3001B60->unk376 * gUnknown_3001B60->unk374 + gUnknown_3001B60->unk370]];
sub_80922B4(nameBuffer, pokeStruct->name, POKEMON_NAME_LENGTH);
sprintfStatic(buffer, gUnknown_80DC9A4,nameBuffer); // %s
return pokeStruct;
}
bool8 sub_8024458(s16 speciesNum, s32 param_2)
{
s32 speciesNum_s32 = speciesNum;
gUnknown_203B2AC = MemoryAlloc(sizeof(struct unkStruct_203B2AC), 8);
gUnknown_203B2AC->speciesNum = speciesNum_s32;
gUnknown_203B2AC->unkE0 = param_2;
gUnknown_203B2AC->unkE4 = &gUnknown_203B2AC->unkE8[param_2];
sub_8006518(gUnknown_203B2AC->unkE8);
gUnknown_203B2AC->unkE8[gUnknown_203B2AC->unkE0] = gUnknown_80DC9C8;
gUnknown_203B2AC->unkE4->unk14 = gUnknown_203B2AC->unk148;
gUnknown_203B2AC->unk148[2] = 10;
sub_8024604();
sub_802452C();
sub_8013984(gUnknown_203B2AC);
return TRUE;
}
u8 sub_80244E4(void)
{
switch(GetKeyPress(gUnknown_203B2AC))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
return 2;
case INPUT_A_BUTTON:
PlayMenuSoundEffect(0);
return 3;
default:
if (sub_8013938(gUnknown_203B2AC) != 0) {
sub_802452C();
return 1;
}
else {
return 0;
}
}
}
void sub_802452C(void)
{
sub_8024588();
sub_80245D0();
}
void sub_802453C(void)
{
if(gUnknown_203B2AC)
{
gUnknown_203B2AC->unkE8[gUnknown_203B2AC->unkE0] = gUnknown_80DC9B0;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2AC->unkE8, 1, 1);
MemoryFree(gUnknown_203B2AC);
gUnknown_203B2AC = NULL;
}
}
void sub_8024588(void)
{
gUnknown_203B2AC->unk148[0] = gUnknown_203B2AC->unk20;
gUnknown_203B2AC->unk148[1] = gUnknown_203B2AC->unk1E;
gUnknown_203B2AC->unk148[3] = 0;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2AC->unkE8,1,1);
}
void sub_80245D0(void)
{
CreatePokemonInfoTabScreen
(gUnknown_203B2AC->unk34[gUnknown_203B2AC->unk1E],
gUnknown_203B2AC->unk1E,&gUnknown_203B2AC->unk4C,
&gUnknown_203B2AC->unkB0,gUnknown_203B2AC->unkE0);
}
void sub_8024604(void)
{
struct PokemonStruct *pokeStruct;
u32 *iVar3;
gUnknown_203B2AC->unk34[0] = 2;
gUnknown_203B2AC->unk34[1] = 3;
gUnknown_203B2AC->unk34[2] = 5;
sub_8013818(gUnknown_203B2AC,3,1,gUnknown_203B2AC->unkE0);
iVar3 = &gUnknown_203B2AC->unk4C;
pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2AC->speciesNum];
sub_808FF20(iVar3,pokeStruct, sub_80023E4(7));
sub_8012D08(&gUnknown_203B270->unk58[gUnknown_203B270->unk50],iVar8);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B270->unk58,1,1);
sub_8013818(&gUnknown_203B270->unk1C,iVar5,iVar5,param_6);
sub_8013780(&gUnknown_203B270->unk1C,0);
sub_801F280(1);
return 1;
}

312
src/code_801EE10_1.c Normal file
View File

@ -0,0 +1,312 @@
#include "global.h"
#include "constants/input.h"
#include "code_800D090.h"
#include "pokemon.h"
#include "input.h"
#include "memory.h"
#include "text.h"
struct unkStruct_203B2AC
{
u8 unk0[0x1E];
s16 unk1E;
s16 unk20;
u8 unk22[0x34 - 0x22];
u32 unk34[3];
u8 unk40[0x48 - 0x40];
s16 speciesNum;
u32 unk4C;
u8 unk50[0xB0 - 0x50];
u32 unkB0;
u8 fillB4[0xE0 - 0xB4];
u32 unkE0;
struct UnkTextStruct2 *unkE4;
struct UnkTextStruct2 unkE8[4];
u8 unk148[4];
};
extern struct unkStruct_203B2AC *gUnknown_203B2AC;
struct unkStruct_3001B60
{
u32 unk0;
u32 sortMethod;
u32 unk8;
u32 unkC;
u32 unk10;
u8 fill14[0x18 - 0x14];
s16 unk18;
s16 unk1A[2];
u8 fill1C[0x370 - 0x1E];
s16 unk370;
s16 unk372;
s16 unk374;
s16 unk376;
};
extern struct unkStruct_3001B60 *gUnknown_3001B60;
extern struct UnkTextStruct2 gUnknown_80DC9B0;
extern struct UnkTextStruct2 gUnknown_80DC9C8;
extern void sub_8013818(void *, u32, u32, u32);
extern bool8 sub_80023E4(u32);
extern void sub_808FF20(u32 *, struct PokemonStruct *, bool8);
extern void CreatePokemonInfoTabScreen(u32, s16, u32 *, u32 *, u32);
extern s32 GetKeyPress(void *);
extern bool8 sub_8013938(void *);
extern void sub_802452C(void);
extern void PlayMenuSoundEffect(u32);
extern void sub_8013984(void *);
void sub_80922B4(u8 *buffer, u8 *string, s32 size);
bool8 ComparePokemonNames(s16 a1, s16 a2);
void sub_8024588(void);
void sub_80245D0(void);
void sub_8024604(void);
extern u8 gUnknown_80DC9A4[];
void SortbyInternalNo(s32 param_1, s32 param_2);
void SortbyAlphabetNo(s32 param_1,s32 param_2);
void SortbyName(s32 param_1,s32 param_2);
bool8 sub_8024184(struct PokemonStruct *pokemon, u8 area)
{
if(area == GetFriendArea(pokemon->speciesNum))
return TRUE;
else
return FALSE;
}
void sub_80241A8(void)
{
switch(gUnknown_3001B60->sortMethod)
{
case 2:
if (gUnknown_3001B60->unkC != gUnknown_3001B60->unk10) {
SortbyAlphabetNo(gUnknown_3001B60->unkC, gUnknown_3001B60->unk10);
}
if (gUnknown_3001B60->unk10 != gUnknown_3001B60->unk8) {
SortbyAlphabetNo(gUnknown_3001B60->unk10, gUnknown_3001B60->unk8);
}
break;
case 3:
if (gUnknown_3001B60->unkC != gUnknown_3001B60->unk10) {
SortbyName(gUnknown_3001B60->unkC, gUnknown_3001B60->unk10);
}
if (gUnknown_3001B60->unk10 != gUnknown_3001B60->unk8) {
SortbyName(gUnknown_3001B60->unk10, gUnknown_3001B60->unk8);
}
break;
case 1:
if (gUnknown_3001B60->unkC != gUnknown_3001B60->unk10) {
SortbyInternalNo(gUnknown_3001B60->unkC, gUnknown_3001B60->unk10);
}
if (gUnknown_3001B60->unk10 != gUnknown_3001B60->unk8) {
SortbyInternalNo(gUnknown_3001B60->unk10, gUnknown_3001B60->unk8);
}
break;
}
}
void SortbyInternalNo(s32 param_1, s32 param_2)
{
s16 *r4;
s32 iVar4;
s16 *r10;
s16 *r5;
s32 r6;
s32 r1;
s32 r7;
s32 r9;
r10 = &gUnknown_3001B60->unk18 + param_2;
r7 = param_1;
r1 = param_2 - 1;
if (r7 < r1) {
r9 = r1;
do {
r4 = r10;
r6 = r1;
iVar4 = r7 + 1;
for (; r6 > r7; r6--) {
if (GetInternalNo(gRecruitedPokemonRef->pokemon[r5 = r4 - 1, *r5].speciesNum) > GetInternalNo(gRecruitedPokemonRef->pokemon[*r4].speciesNum)) {
r1 = *r4;
*r4 = *r5;
*r5 = r1;
}
r4 = r5;
}
r7 = iVar4;
r1 = r9;
} while (iVar4 < r1);
}
}
void SortbyAlphabetNo(s32 param_1,s32 param_2)
{
s16 *r4;
s32 iVar4;
s16 *r10;
s16 *r5;
s32 r6;
s32 r1;
s32 r7;
s32 r9;
r10 = &gUnknown_3001B60->unk18 + param_2;
r7 = param_1;
r1 = param_2 - 1;
if (r7 < r1) {
r9 = r1;
do {
r4 = r10;
r6 = r1;
iVar4 = r7 + 1;
for (; r6 > r7; r6--) {
if (GetAlphabetParentNo(gRecruitedPokemonRef->pokemon[r5 = r4 - 1, *r5].speciesNum, 0) > GetAlphabetParentNo(gRecruitedPokemonRef->pokemon[*r4].speciesNum, 0)) {
r1 = *r4;
*r4 = *r5;
*r5 = r1;
}
r4 = r5;
}
r7 = iVar4;
r1 = r9;
} while (iVar4 < r1);
}
}
void SortbyName(s32 param_1,s32 param_2)
{
s16 *r4;
s32 iVar4;
s16 *r10;
s16 *r5;
s32 r6;
s32 r1;
s32 r7;
s32 r9;
r10 = &gUnknown_3001B60->unk18 + param_2;
r7 = param_1;
r1 = param_2 - 1;
if (r7 < r1) {
r9 = r1;
do {
r4 = r10;
r6 = r1;
iVar4 = r7 + 1;
for (; r6 > r7; r6--) {
r5 = r4 - 1;
if (ComparePokemonNames(*r5, *r4)) {
r1 = *r4;
*r4 = *r5;
*r5 = r1;
}
r4 = r5;
}
r7 = iVar4;
r1 = r9;
} while (iVar4 < r1);
}
}
struct PokemonStruct *sub_80243E8(void)
{
u8 buffer [40];
u8 nameBuffer [20];
struct PokemonStruct *pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_3001B60->unk1A[gUnknown_3001B60->unk376 * gUnknown_3001B60->unk374 + gUnknown_3001B60->unk370]];
sub_80922B4(nameBuffer, pokeStruct->name, POKEMON_NAME_LENGTH);
sprintfStatic(buffer, gUnknown_80DC9A4,nameBuffer); // %s
return pokeStruct;
}
bool8 sub_8024458(s16 speciesNum, s32 param_2)
{
s32 speciesNum_s32 = speciesNum;
gUnknown_203B2AC = MemoryAlloc(sizeof(struct unkStruct_203B2AC), 8);
gUnknown_203B2AC->speciesNum = speciesNum_s32;
gUnknown_203B2AC->unkE0 = param_2;
gUnknown_203B2AC->unkE4 = &gUnknown_203B2AC->unkE8[param_2];
sub_8006518(gUnknown_203B2AC->unkE8);
gUnknown_203B2AC->unkE8[gUnknown_203B2AC->unkE0] = gUnknown_80DC9C8;
gUnknown_203B2AC->unkE4->unk14 = gUnknown_203B2AC->unk148;
gUnknown_203B2AC->unk148[2] = 10;
sub_8024604();
sub_802452C();
sub_8013984(gUnknown_203B2AC);
return TRUE;
}
u8 sub_80244E4(void)
{
switch(GetKeyPress(gUnknown_203B2AC))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
return 2;
case INPUT_A_BUTTON:
PlayMenuSoundEffect(0);
return 3;
default:
if (sub_8013938(gUnknown_203B2AC) != 0) {
sub_802452C();
return 1;
}
else {
return 0;
}
}
}
void sub_802452C(void)
{
sub_8024588();
sub_80245D0();
}
void sub_802453C(void)
{
if(gUnknown_203B2AC)
{
gUnknown_203B2AC->unkE8[gUnknown_203B2AC->unkE0] = gUnknown_80DC9B0;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2AC->unkE8, 1, 1);
MemoryFree(gUnknown_203B2AC);
gUnknown_203B2AC = NULL;
}
}
void sub_8024588(void)
{
gUnknown_203B2AC->unk148[0] = gUnknown_203B2AC->unk20;
gUnknown_203B2AC->unk148[1] = gUnknown_203B2AC->unk1E;
gUnknown_203B2AC->unk148[3] = 0;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2AC->unkE8,1,1);
}
void sub_80245D0(void)
{
CreatePokemonInfoTabScreen
(gUnknown_203B2AC->unk34[gUnknown_203B2AC->unk1E],
gUnknown_203B2AC->unk1E,&gUnknown_203B2AC->unk4C,
&gUnknown_203B2AC->unkB0,gUnknown_203B2AC->unkE0);
}
void sub_8024604(void)
{
struct PokemonStruct *pokeStruct;
u32 *iVar3;
gUnknown_203B2AC->unk34[0] = 2;
gUnknown_203B2AC->unk34[1] = 3;
gUnknown_203B2AC->unk34[2] = 5;
sub_8013818(gUnknown_203B2AC,3,1,gUnknown_203B2AC->unkE0);
iVar3 = &gUnknown_203B2AC->unk4C;
pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2AC->speciesNum];
sub_808FF20(iVar3,pokeStruct, sub_80023E4(7));
}

View File

@ -423,7 +423,7 @@ void sub_8026E08(u32 r0)
sub_808D930(buffer, gUnknown_203B2B8->unk18->speciesNum);
sprintfStatic(buffer1, gUnknown_80DD6E0, gAvailablePokemonNames);
x = sub_8008ED0(buffer1);
xxx_call_draw_string(((gUnknown_80DD370.unk0c << 3) - x) / 2, 3, buffer1, r0, 0);
xxx_call_draw_string(((gUnknown_80DD370.unkC << 3) - x) / 2, 3, buffer1, r0, 0);
sub_80073E0(r0);
}

View File

@ -1169,7 +1169,7 @@ void sub_801A9E0(void)
break;
}
if ((sub_801AED0(teamItemIndex) & 1) != 0) {
sub_8007B7C(gUnknown_203B224->unk88,8,sub_8013800(&gUnknown_203B224->unk54,r7),(gUnknown_203B224->unk8C->unk0c - 2) * 8,10);
sub_8007B7C(gUnknown_203B224->unk88,8,sub_8013800(&gUnknown_203B224->unk54,r7),(gUnknown_203B224->unk8C->unkC - 2) * 8,10);
}
}
sub_80073E0(gUnknown_203B224->unk88);

View File

@ -172,7 +172,7 @@ void sub_802E0A0(void)
CreateMailActionMenu();
gUnknown_203B304->unk10C[2] = gUnknown_80E02B4;
sub_8012CAC(&gUnknown_203B304->unk10C[2], gUnknown_203B304->unkBC);
gUnknown_203B304->unk10C[2].unk0c = 6;
gUnknown_203B304->unk10C[2].unkC = 6;
gUnknown_203B304->unk10C[3] = gUnknown_80E02CC;
break;
default:

View File

@ -1,8 +1,17 @@
#include "global.h"
#include "constants/colors.h"
#include "constants/input.h"
#include "menu.h"
#include "text.h"
#include "util.h"
#include "code_800D090.h"
struct unkChar
{
u32 unk0;
s16 unk4;
s16 unk6;
};
extern struct UnkTextStruct1 gUnknown_2027370[4];
extern u8 gUnknown_80D4828[];
@ -12,23 +21,178 @@ extern u32 sub_80137A8(u32 *);
void MoveMenuCursorUp(u32 *);
void MoveMenuCursorDown(u32 *);
extern void sub_80073B8(u32);
extern s32 sub_8008ED0(u8 *);
extern s32 sub_8008ED0(const u8 *);
extern void xxx_format_and_draw(u32, u32, u8 *, u32, u32);
void sprintfStatic(char *buffer, const char *text, ...);
extern s32 sub_8013800(u32 *, s32);
extern void sub_80073E0(u32);
extern void sub_8013660(u32 *);
void AddMenuCursorSprite(void *);
void sub_8012EBC(struct MenuStruct *param_1);
extern u32 gUnknown_80D47B8;
extern void sub_8013134(u32 *, u32, u32);
extern void sub_80137B0(u32 *, u32);
extern s16 sub_8009614(u32, u32);
extern u32 ReturnIntFromChar2(u8);
struct unkChar *GetCharacter(u32);
extern void xxx_call_draw_char(u32, u32, u32, u32, u32);
void sub_8012D60(struct MenuStruct *param_1,struct MenuItem *menuItems,u32 *param_3,u16 *param_4,s32 param_5,
const u32 gDefaultMenuTextColors[] = { COLOR_WHITE_2, COLOR_RED, COLOR_RED };
void sub_8012D08(struct UnkTextStruct2 *, s32);
void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 param_5, u32 param_6)
{
s32 iVar1;
u32 uVar2;
struct unkChar *iVar3;
s32 counter;
s32 *piVar3;
s32 *piVar4;
s32 total_x;
s32 decimal [8];
total_x = 0;
ConvertToDecimal(decimal,n,len);
counter = len - 1;
if (0 < counter) {
piVar3 = &decimal[counter];
if(*piVar3 == 0)
{
do {
*piVar3 = 0xff;
piVar3--;
counter--;
if (counter <= 0) break;
} while(*piVar3 == 0);
}
}
counter = 0;
if ((counter < len) && (decimal[0] != 0xFF)) {
piVar4 = &decimal[0];
do {
iVar1 = *piVar4;
piVar4++;
uVar2 = ReturnIntFromChar2(iVar1 + 0x30U);
iVar3 = GetCharacter(uVar2);
total_x += iVar3->unk6;
xxx_call_draw_char(x - total_x,y,uVar2,param_5,param_6);
counter++;
if (counter >= len) {
break;
}
} while (*piVar4 != 0xff);
}
}
void sub_8012C60(u32 x,u32 y,u32 param_3,u32 param_4,u32 param_5)
{
u32 add_x;
struct unkChar *iVar3;
u32 uVar2;
uVar2 = ReturnIntFromChar2(param_3);
iVar3 = GetCharacter(uVar2);
if (iVar3->unk6 < 0xc) {
add_x = ((0xc - iVar3->unk6) / 2);
}
else {
add_x = 0;
}
xxx_call_draw_char(x + add_x,y,uVar2,param_4,param_5);
}
void sub_8012CAC(struct UnkTextStruct2 *param_1, struct MenuItem *param_2)
{
s16 length;
int r5;
int r6;
int r7;
s32 iVar4;
#ifndef NONMATCHING
register s32 r0 asm("r0");
#else
s32 r0;
#endif
r7 = 0;
r6 = 0;
if (param_2->text != NULL) {
r5 = 0x10000;
r0 = r5;
do {
r0 = r5;
r5 = r5 + 0x10000;
r7 = r0 >> 0x10;
length = sub_8008ED0(param_2->text);
if (length > r6) {
r6 = length;
}
param_2++;
} while (param_2->text != NULL);
}
if (r6 < 0)
iVar4 = r6 + 7;
else
iVar4 = r6;
param_1->unkC = (iVar4 >> 3) + 2;
sub_8012D08(param_1, r7);
}
NAKED
void sub_8012D08(struct UnkTextStruct2 *param_1, s32 param_2)
{
asm_unified(
"\tpush {r4,lr}\n"
"\tadds r4, r0, 0\n"
"\tadds r0, r1, 0\n"
"\tmovs r1, 0xC\n"
"\tbl sub_80095E4\n"
"\tlsls r0, 16\n"
"\tasrs r1, r0, 16\n"
"\tldr r0, [r4, 0x4]\n"
"\tcmp r0, 0x6\n"
"\tbne _08012D24\n"
"\tadds r0, r1, 0x2\n"
"\tlsls r0, 16\n"
"\tasrs r1, r0, 16\n"
"_08012D24:\n"
"\tlsls r0, r1, 16\n"
"\tlsrs r0, 16\n"
"\tstrh r0, [r4, 0xE]\n"
"\tstrh r0, [r4, 0x10]\n"
"\tpop {r4}\n"
"\tpop {r0}\n"
"\tbx r0");
}
// https://decomp.me/scratch/QadfW (200 - 90% matched) - Seth
NAKED
void sub_8012D34(struct UnkTextStruct2 *param_1, s32 param_2)
{
asm_unified(
"\tpush {r4,lr}\n"
"\tadds r4, r0, 0\n"
"\tadds r0, r1, 0\n"
"\tmovs r1, 0x18\n"
"\tbl sub_8009614\n"
"\tlsls r0, 16\n"
"\tasrs r1, r0, 16\n"
"\tldr r0, [r4, 0x4]\n"
"\tcmp r0, 0x6\n"
"\tbne _08012D50\n"
"\tadds r0, r1, 0x2\n"
"\tlsls r0, 16\n"
"\tasrs r1, r0, 16\n"
"_08012D50:\n"
"\tlsls r0, r1, 16\n"
"\tlsrs r0, 16\n"
"\tstrh r0, [r4, 0xE]\n"
"\tstrh r0, [r4, 0x10]\n"
"\tpop {r4}\n"
"\tpop {r0}\n"
"\tbx r0");
}
void sub_8012D60(struct MenuStruct *param_1,struct MenuItem *menuItems,u32 *colorArray,u16 *param_4,s32 param_5,
s32 index)
{
const u8 *textPtr;
@ -41,9 +205,9 @@ void sub_8012D60(struct MenuStruct *param_1,struct MenuItem *menuItems,u32 *para
iVar1 = 0;
param_1->index = index;
param_1->menuItems = menuItems;
param_1->unk8 = param_3;
if (param_3 == 0) {
param_1->unk8 = &gUnknown_80D47B8;
param_1->menuTextColorArray = colorArray;
if (colorArray == NULL) {
param_1->menuTextColorArray = gDefaultMenuTextColors;
}
param_1->unkC = param_4;
textPtr = menuItems->text;
@ -73,7 +237,7 @@ void sub_8012D60(struct MenuStruct *param_1,struct MenuItem *menuItems,u32 *para
param_1->menuAction = -1;
}
void sub_8012E04(struct MenuStruct *param_1,struct MenuItem *menuItems,u32 *param_3,u16 *param_4,s32 param_5,
void sub_8012E04(struct MenuStruct *param_1,struct MenuItem *menuItems,u32 *colorArray,u16 *param_4,s32 param_5,
s32 index)
{
const u8 *textPtr;
@ -108,9 +272,9 @@ void sub_8012E04(struct MenuStruct *param_1,struct MenuItem *menuItems,u32 *para
param_1->menuIndex = menuIndex;
sub_80137B0(&param_1->unk14,0);
param_1->index = index;
param_1->unk8 = param_3;
if (param_3 == 0) {
param_1->unk8 = &gUnknown_80D47B8;
param_1->menuTextColorArray = colorArray;
if (colorArray == NULL) {
param_1->menuTextColorArray = gDefaultMenuTextColors;
}
param_1->unkC = param_4;
param_1->menuItems = menuItems;
@ -131,11 +295,11 @@ void sub_8012EBC(struct MenuStruct *param_1)
{
s32 x;
s32 y;
u32 uVar1;
u32 color;
const u8 *textPtr;
struct MenuItem *menuItemsPtr;
u16 *_puVar2;
u32 *puVar3;
const u32 *colorArray;
s32 counter;
s32 index;
struct UnkTextStruct2 textStack[4];
@ -154,7 +318,7 @@ void sub_8012EBC(struct MenuStruct *param_1)
xxx_format_and_draw((((ptr_text2->unk14[2]) * 8 - x) /2) + 8,
0,*(u8 **)param_1, param_1->index, 0);
}
puVar3 = param_1->unk8;
colorArray = param_1->menuTextColorArray;
menuItemsPtr = param_1->menuItems;
_puVar2 = param_1->unkC;
counter = 0;
@ -165,16 +329,18 @@ void sub_8012EBC(struct MenuStruct *param_1)
textPtr++;
}
if (_puVar2 != NULL) {
uVar1 = puVar3[*_puVar2];
color = colorArray[*_puVar2];
_puVar2++;
}
else if (menuItemsPtr->menuAction < 0) {
uVar1 = puVar3[1];
// Color the action red
color = colorArray[1];
}
else {
uVar1 = puVar3[0];
// Use the default white
color = colorArray[0];
}
sprintfStatic(buffer,gUnknown_80D4828,uVar1,textPtr);
sprintfStatic(buffer,gUnknown_80D4828,color,textPtr);
y = sub_8013800(&param_1->unk14,counter);
xxx_format_and_draw(8,y,buffer,param_1->index,0);
menuItemsPtr++;

View File

@ -178,7 +178,7 @@ void sub_802E94C(void)
sub_802EC10();
gUnknown_203B308->unk10C[2] = gUnknown_80E0360;
sub_8012CAC(&gUnknown_203B308->unk10C[2], gUnknown_203B308->unkBC);
gUnknown_203B308->unk10C[2].unk0c = 6;
gUnknown_203B308->unk10C[2].unkC = 6;
gUnknown_203B308->unk10C[3] = gUnknown_80E0378;
break;
default:

View File

@ -154,11 +154,11 @@ void sub_8006438(const struct UnkTextStruct2 *a0, u8 a1, u8 a2, u32 *a3)
for (i = 0; i < 4; i++)
{
gUnknown_202AFC0[i] = a0[i];
if (a0[i].unk0c)
if (a0[i].unkC)
{
sub_8006554(gUnknown_2027370, (void *)VRAM, gUnknown_20274B4, gUnknown_202B038, gUnknown_80B8804[i], a0 + i, a1, r9, a3, 0);
sub_80089AC(a0 + i, a3);
r9 += a0[i].unk0c * a0[i].unk10;
r9 += a0[i].unkC * a0[i].unk10;
}
}
#ifdef NONMATCHING

View File

@ -272,13 +272,13 @@ void sub_802D1B8(void)
sub_802D5A4();
gUnknown_203B2F8->unk1A8[2] = gUnknown_80DFE04;
sub_8012CAC(&gUnknown_203B2F8->unk1A8[2], gUnknown_203B2F8->unk118);
gUnknown_203B2F8->unk1A8[2].unk0c = 6;
gUnknown_203B2F8->unk1A8[2].unkC = 6;
break;
case 0xE:
sub_802D63C();
gUnknown_203B2F8->unk1A8[3] = gUnknown_80DFE1C;
sub_8012CAC(&gUnknown_203B2F8->unk1A8[3], gUnknown_203B2F8->unk158);
gUnknown_203B2F8->unk1A8[3].unk0c = 6;
gUnknown_203B2F8->unk1A8[3].unkC = 6;
break;
default:
for(iVar2 = 0; iVar2 < 4; iVar2++)