mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-24 23:17:03 -05:00
finish out another file and more documenting
This commit is contained in:
parent
a9049a261f
commit
08f7182576
|
|
@ -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.
|
||||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
312
src/code_801EE10_1.c
Normal 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));
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
208
src/menu_input.c
208
src/menu_input.c
|
|
@ -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(¶m_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(¶m_1->unk14,counter);
|
||||
xxx_format_and_draw(8,y,buffer,param_1->index,0);
|
||||
menuItemsPtr++;
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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++)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user