mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-27 03:07:22 -05:00
sub_8023DA4
This commit is contained in:
@@ -670,245 +670,5 @@ _08023D9C: .4byte 0x00000372
|
||||
_08023DA0: .4byte 0x000003a2
|
||||
thumb_func_end sub_8023CF4
|
||||
|
||||
thumb_func_start sub_8023DA4
|
||||
sub_8023DA4:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r9
|
||||
mov r6, r8
|
||||
push {r6,r7}
|
||||
sub sp, 0x58
|
||||
ldr r4, _08023DD8
|
||||
ldr r0, [r4]
|
||||
movs r5, 0xE3
|
||||
lsls r5, 2
|
||||
adds r0, r5
|
||||
ldr r0, [r0]
|
||||
bl CallPrepareTextbox_8008C54
|
||||
ldr r0, [r4]
|
||||
adds r0, r5
|
||||
ldr r0, [r0]
|
||||
bl sub_80073B8
|
||||
ldr r0, [r4]
|
||||
ldr r1, [r0]
|
||||
cmp r1, 0x2
|
||||
beq _08023DE0
|
||||
cmp r1, 0x4
|
||||
beq _08023E00
|
||||
ldr r2, _08023DDC
|
||||
b _08023E02
|
||||
.align 2, 0
|
||||
_08023DD8: .4byte gUnknown_3001B60
|
||||
_08023DDC: .4byte sUnknown_80DC988
|
||||
_08023DE0:
|
||||
add r0, sp, 0x8
|
||||
bl sub_80920D8
|
||||
ldr r0, [r4]
|
||||
movs r1, 0xE3
|
||||
lsls r1, 2
|
||||
adds r0, r1
|
||||
ldr r3, [r0]
|
||||
movs r0, 0
|
||||
str r0, [sp]
|
||||
movs r0, 0xA
|
||||
movs r1, 0
|
||||
add r2, sp, 0x8
|
||||
bl PrintStringOnWindow
|
||||
b _08023E3C
|
||||
_08023E00:
|
||||
ldr r2, _08023EBC
|
||||
_08023E02:
|
||||
adds r0, r5
|
||||
ldr r3, [r0]
|
||||
movs r0, 0
|
||||
str r0, [sp]
|
||||
movs r0, 0xA
|
||||
movs r1, 0
|
||||
bl PrintStringOnWindow
|
||||
ldr r1, [r4]
|
||||
ldr r2, _08023EC0
|
||||
adds r0, r1, r2
|
||||
ldrb r0, [r0]
|
||||
lsls r0, 3
|
||||
adds r3, r0, 0x4
|
||||
ldr r4, _08023EC4
|
||||
adds r0, r1, r4
|
||||
movs r4, 0
|
||||
ldrsh r2, [r0, r4]
|
||||
adds r2, 0x1
|
||||
movs r0, 0x7
|
||||
str r0, [sp]
|
||||
adds r1, r5
|
||||
ldr r0, [r1]
|
||||
str r0, [sp, 0x4]
|
||||
adds r0, r3, 0
|
||||
movs r1, 0
|
||||
movs r3, 0x2
|
||||
bl sub_8012BC4
|
||||
_08023E3C:
|
||||
movs r7, 0
|
||||
ldr r1, _08023EC8
|
||||
ldr r0, [r1]
|
||||
ldr r2, _08023ECC
|
||||
adds r0, r2
|
||||
movs r4, 0
|
||||
ldrsh r0, [r0, r4]
|
||||
cmp r7, r0
|
||||
blt _08023E50
|
||||
b _08023F62
|
||||
_08023E50:
|
||||
mov r8, r1
|
||||
add r0, sp, 0x30
|
||||
mov r9, r0
|
||||
_08023E56:
|
||||
ldr r3, [r1]
|
||||
ldr r1, _08023EC4
|
||||
adds r0, r3, r1
|
||||
movs r2, 0
|
||||
ldrsh r1, [r0, r2]
|
||||
movs r4, 0xDD
|
||||
lsls r4, 2
|
||||
adds r0, r3, r4
|
||||
movs r2, 0
|
||||
ldrsh r0, [r0, r2]
|
||||
muls r1, r0
|
||||
adds r1, r7
|
||||
lsls r1, 1
|
||||
adds r0, r3, 0
|
||||
adds r0, 0x1A
|
||||
adds r0, r1
|
||||
movs r4, 0
|
||||
ldrsh r5, [r0, r4]
|
||||
ldr r2, _08023ED0
|
||||
movs r0, 0x58
|
||||
adds r1, r5, 0
|
||||
muls r1, r0
|
||||
ldr r0, [r2]
|
||||
adds r4, r0, r1
|
||||
movs r6, 0x7
|
||||
ldrh r0, [r4]
|
||||
lsrs r0, 1
|
||||
movs r1, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _08023ED4
|
||||
movs r0, 0
|
||||
ldrb r1, [r4, 0x4]
|
||||
cmp r1, 0x41
|
||||
bne _08023E9E
|
||||
movs r0, 0x1
|
||||
_08023E9E:
|
||||
cmp r0, 0
|
||||
beq _08023EA4
|
||||
movs r6, 0x6
|
||||
_08023EA4:
|
||||
movs r0, 0
|
||||
cmp r1, 0x40
|
||||
bne _08023EAC
|
||||
movs r0, 0x1
|
||||
_08023EAC:
|
||||
cmp r0, 0
|
||||
beq _08023EB2
|
||||
movs r6, 0x6
|
||||
_08023EB2:
|
||||
ldrb r0, [r4, 0x2]
|
||||
cmp r0, 0
|
||||
beq _08023EEA
|
||||
movs r6, 0x5
|
||||
b _08023EEA
|
||||
.align 2, 0
|
||||
_08023EBC: .4byte sUnknown_80DC980
|
||||
_08023EC0: .4byte 0x000003f6
|
||||
_08023EC4: .4byte 0x00000376
|
||||
_08023EC8: .4byte gUnknown_3001B60
|
||||
_08023ECC: .4byte 0x00000372
|
||||
_08023ED0: .4byte gRecruitedPokemonRef
|
||||
_08023ED4:
|
||||
ldrb r0, [r3, 0x18]
|
||||
cmp r0, 0
|
||||
beq _08023EEA
|
||||
adds r0, r5, 0
|
||||
bl sub_808D750
|
||||
lsls r0, 24
|
||||
movs r6, 0x2
|
||||
cmp r0, 0
|
||||
beq _08023EEA
|
||||
movs r6, 0x4
|
||||
_08023EEA:
|
||||
mov r0, r8
|
||||
ldr r1, [r0]
|
||||
ldr r0, [r1]
|
||||
cmp r0, 0x4
|
||||
bne _08023F02
|
||||
movs r2, 0xD5
|
||||
lsls r2, 2
|
||||
adds r0, r1, r2
|
||||
ldrb r1, [r0]
|
||||
adds r0, r4, 0
|
||||
bl sub_8024184
|
||||
_08023F02:
|
||||
adds r1, r4, 0
|
||||
adds r1, 0x4C
|
||||
mov r0, r9
|
||||
movs r2, 0xA
|
||||
bl sub_80922B4
|
||||
movs r0, 0x8
|
||||
ldrsh r1, [r4, r0]
|
||||
add r0, sp, 0x44
|
||||
bl sub_808D930
|
||||
add r0, sp, 0x8
|
||||
ldr r1, _08023F80
|
||||
adds r2, r6, 0
|
||||
mov r3, r9
|
||||
bl sprintfStatic
|
||||
mov r1, r8
|
||||
ldr r0, [r1]
|
||||
movs r2, 0xD6
|
||||
lsls r2, 2
|
||||
adds r0, r2
|
||||
adds r1, r7, 0
|
||||
bl GetMenuEntryYCoord
|
||||
adds r1, r0, 0
|
||||
mov r4, r8
|
||||
ldr r0, [r4]
|
||||
movs r2, 0xE3
|
||||
lsls r2, 2
|
||||
adds r0, r2
|
||||
ldr r3, [r0]
|
||||
movs r0, 0
|
||||
str r0, [sp]
|
||||
movs r0, 0x8
|
||||
add r2, sp, 0x8
|
||||
bl PrintStringOnWindow
|
||||
adds r7, 0x1
|
||||
mov r1, r8
|
||||
ldr r0, [r4]
|
||||
ldr r4, _08023F84
|
||||
adds r0, r4
|
||||
movs r2, 0
|
||||
ldrsh r0, [r0, r2]
|
||||
cmp r7, r0
|
||||
bge _08023F62
|
||||
b _08023E56
|
||||
_08023F62:
|
||||
ldr r0, _08023F88
|
||||
ldr r0, [r0]
|
||||
movs r4, 0xE3
|
||||
lsls r4, 2
|
||||
adds r0, r4
|
||||
ldr r0, [r0]
|
||||
bl sub_80073E0
|
||||
add sp, 0x58
|
||||
pop {r3,r4}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08023F80: .4byte sUnknown_80DC998
|
||||
_08023F84: .4byte 0x00000372
|
||||
_08023F88: .4byte gUnknown_3001B60
|
||||
thumb_func_end sub_8023DA4
|
||||
|
||||
|
||||
.align 2,0
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef GUARD_CODE_8023868_H
|
||||
#define GUARD_CODE_8023868_H
|
||||
|
||||
#include "structs/menu.h"
|
||||
|
||||
struct unkStruct_3001B60
|
||||
{
|
||||
u32 unk0;
|
||||
@@ -12,12 +14,13 @@ struct unkStruct_3001B60
|
||||
u8 unk15;
|
||||
u8 unk16;
|
||||
u8 unk17;
|
||||
s16 unk18;
|
||||
s16 unk1A[427];
|
||||
s16 unk370;
|
||||
s16 unk372;
|
||||
s16 unk374;
|
||||
s16 unk376;
|
||||
u8 unk18;
|
||||
s16 unk1A[413];
|
||||
u8 unk354;
|
||||
MenuInputStruct unk358;
|
||||
s32 unk38C;
|
||||
u8 fill390[0x3f6-0x390];
|
||||
u8 unk3F6;
|
||||
};
|
||||
|
||||
// code_8023868.s
|
||||
|
||||
@@ -146,6 +146,11 @@ static inline bool8 IsMonPartner(PokemonStruct1 *mon)
|
||||
return (mon->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER);
|
||||
}
|
||||
|
||||
static inline bool8 IsMonLeader(PokemonStruct1 *mon)
|
||||
{
|
||||
return (mon->dungeonLocation.id == DUNGEON_JOIN_LOCATION_LEADER);
|
||||
}
|
||||
|
||||
// Needed to match a couple of functions which use species id.
|
||||
// The theory is that there was some internal species conversion which got scrapped later on.
|
||||
static inline s16 SpeciesId(s32 id)
|
||||
|
||||
@@ -5,7 +5,18 @@
|
||||
#include "pokemon.h"
|
||||
#include "structs/str_text.h"
|
||||
#include "text_util.h"
|
||||
#include "text_1.h"
|
||||
#include "text_2.h"
|
||||
#include "text_3.h"
|
||||
#include "event_flag.h"
|
||||
#include "menu_input.h"
|
||||
#include "rescue_team_info.h"
|
||||
|
||||
extern const u8 sUnknown_80DC988[];
|
||||
extern const u8 sUnknown_80DC980[];
|
||||
extern const u8 sUnknown_80DC998[];
|
||||
|
||||
extern bool8 sub_808D750(s32 index_);
|
||||
|
||||
//static // MAKE STATIC WHEN code_8023868.s IS DONE
|
||||
IWRAM_INIT struct unkStruct_3001B60 *gUnknown_3001B60 = {NULL};
|
||||
@@ -16,11 +27,78 @@ static void SortbyAlphabetNo(s32, s32);
|
||||
static void SortbyInternalNo(s32, s32);
|
||||
static void SortbyName(s32, s32);
|
||||
|
||||
//static bool8 sub_8024184(PokemonStruct1 *pokemon, u8 area);
|
||||
bool8 sub_8024184(PokemonStruct1 *pokemon, u8 area);
|
||||
void sub_80241A8(void);
|
||||
|
||||
// THE REMAINING CODE FROM THIS FILE IS IN code_8023868.s STARTING WITH sub_8023868
|
||||
|
||||
void sub_8023DA4(void)
|
||||
{
|
||||
s32 i, x;
|
||||
u8 winTxtBuff[40];
|
||||
u8 nameTxtBuff[20];
|
||||
u8 txtBuff3[20];
|
||||
|
||||
CallPrepareTextbox_8008C54(gUnknown_3001B60->unk38C);
|
||||
sub_80073B8(gUnknown_3001B60->unk38C);
|
||||
switch (gUnknown_3001B60->unk0) {
|
||||
case 2:
|
||||
sub_80920D8(winTxtBuff);
|
||||
PrintStringOnWindow(10, 0, winTxtBuff, gUnknown_3001B60->unk38C, '\0');
|
||||
break;
|
||||
case 4:
|
||||
PrintStringOnWindow(10, 0, sUnknown_80DC980, gUnknown_3001B60->unk38C, '\0');
|
||||
x = (gUnknown_3001B60->unk3F6 * 8) + 4;
|
||||
sub_8012BC4(x, 0, gUnknown_3001B60->unk358.unk1E + 1, 2, 7, gUnknown_3001B60->unk38C);
|
||||
break;
|
||||
default:
|
||||
PrintStringOnWindow(10, 0, sUnknown_80DC988, gUnknown_3001B60->unk38C, '\0');
|
||||
x = (gUnknown_3001B60->unk3F6 * 8) + 4;
|
||||
sub_8012BC4(x, 0, gUnknown_3001B60->unk358.unk1E + 1, 2, 7, gUnknown_3001B60->unk38C);
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = 0; i < gUnknown_3001B60->unk358.unk1A; i++) {
|
||||
s32 id = gUnknown_3001B60->unk1A[(gUnknown_3001B60->unk358.unk1E * gUnknown_3001B60->unk358.unk1C) + i];
|
||||
PokemonStruct1 *pokePtr = &gRecruitedPokemonRef->pokemon[id];
|
||||
s32 r6 = 7;
|
||||
|
||||
if (PokemonFlag2(pokePtr)) {
|
||||
if (IsMonPartner(pokePtr)) {
|
||||
r6 = 6;
|
||||
}
|
||||
if (IsMonLeader(pokePtr)) {
|
||||
r6 = 6;
|
||||
}
|
||||
if (pokePtr->isTeamLeader) {
|
||||
r6 = 5;
|
||||
}
|
||||
}
|
||||
else if (gUnknown_3001B60->unk18) {
|
||||
if (sub_808D750(id)) {
|
||||
r6 = 4;
|
||||
}
|
||||
else {
|
||||
r6 = 2;
|
||||
}
|
||||
}
|
||||
|
||||
if (gUnknown_3001B60->unk0 == 4) {
|
||||
sub_8024184(pokePtr, gUnknown_3001B60->unk354);
|
||||
}
|
||||
// Needed to match. agbcc moment
|
||||
else if (gUnknown_3001B60->unk0 == 2) {
|
||||
|
||||
}
|
||||
|
||||
sub_80922B4(nameTxtBuff, pokePtr->name, POKEMON_NAME_LENGTH);
|
||||
sub_808D930(txtBuff3, pokePtr->speciesNum);
|
||||
sprintfStatic(winTxtBuff, sUnknown_80DC998, r6, nameTxtBuff);
|
||||
PrintStringOnWindow(8, GetMenuEntryYCoord(&gUnknown_3001B60->unk358, i), winTxtBuff, gUnknown_3001B60->unk38C, '\0');
|
||||
}
|
||||
sub_80073E0(gUnknown_3001B60->unk38C);
|
||||
}
|
||||
|
||||
s32 sub_8023F8C(void)
|
||||
{
|
||||
s32 i;
|
||||
@@ -136,109 +214,59 @@ void sub_80241A8(void)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Remove hacky if/do
|
||||
static void SortbyInternalNo(s32 param_1, s32 param_2)
|
||||
static void SortbyInternalNo(s32 startId, s32 arrId)
|
||||
{
|
||||
s16 *r4;
|
||||
s32 iVar4;
|
||||
s16 *r10;
|
||||
s16 *r5;
|
||||
s32 r6;
|
||||
s32 r1;
|
||||
s32 r7;
|
||||
s32 r9;
|
||||
s32 temp;
|
||||
s32 i, j;
|
||||
s16 *arrPtr = &gUnknown_3001B60->unk1A[arrId - 1];
|
||||
|
||||
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;
|
||||
for (i = startId; i < arrId - 1; i++) {
|
||||
s16 * currPtr = arrPtr;
|
||||
for (j = arrId - 1; j > i; j--) {
|
||||
s16 * belowPtr;
|
||||
// TODO: Fix ugly assigment below if possible
|
||||
if (GetInternalNo(gRecruitedPokemonRef->pokemon[*(belowPtr = currPtr - 1)].speciesNum) > GetInternalNo(gRecruitedPokemonRef->pokemon[*currPtr].speciesNum)) {
|
||||
SWAP(*currPtr, *belowPtr, temp);
|
||||
}
|
||||
r7 = iVar4;
|
||||
r1 = r9;
|
||||
} while (iVar4 < r1);
|
||||
currPtr--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Remove hacky if/do
|
||||
static void SortbyAlphabetNo(s32 param_1, s32 param_2)
|
||||
static void SortbyAlphabetNo(s32 startId, s32 arrId)
|
||||
{
|
||||
s16 *r4;
|
||||
s32 iVar4;
|
||||
s16 *r10;
|
||||
s16 *r5;
|
||||
s32 r6;
|
||||
s32 r1;
|
||||
s32 r7;
|
||||
s32 r9;
|
||||
s32 temp;
|
||||
s32 i, j;
|
||||
s16 *arrPtr = &gUnknown_3001B60->unk1A[arrId - 1];
|
||||
|
||||
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;
|
||||
for (i = startId; i < arrId - 1; i++) {
|
||||
s16 * currPtr = arrPtr;
|
||||
for (j = arrId - 1; j > i; j--) {
|
||||
s16 * belowPtr;
|
||||
// TODO: Fix ugly assigment below if possible
|
||||
if (GetAlphabetParentNo(gRecruitedPokemonRef->pokemon[*(belowPtr = currPtr - 1)].speciesNum, 0) > GetAlphabetParentNo(gRecruitedPokemonRef->pokemon[*currPtr].speciesNum, 0)) {
|
||||
SWAP(*currPtr, *belowPtr, temp);
|
||||
}
|
||||
r7 = iVar4;
|
||||
r1 = r9;
|
||||
} while (iVar4 < r1);
|
||||
currPtr--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Remove hacky if/do
|
||||
static void SortbyName(s32 param_1, s32 param_2)
|
||||
static void SortbyName(s32 startId, s32 arrId)
|
||||
{
|
||||
s16 *r4;
|
||||
s32 iVar4;
|
||||
s16 *r10;
|
||||
s16 *r5;
|
||||
s32 r6;
|
||||
s32 r1;
|
||||
s32 r7;
|
||||
s32 r9;
|
||||
s32 temp;
|
||||
s32 i, j;
|
||||
s16 *arrPtr = &gUnknown_3001B60->unk1A[arrId - 1];
|
||||
|
||||
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;
|
||||
for (i = startId; i < arrId - 1; i++) {
|
||||
s16 * currPtr = arrPtr;
|
||||
for (j = arrId - 1; j > i; j--) {
|
||||
s16 *belowPtr = currPtr - 1;
|
||||
if (ComparePokemonNames(*belowPtr, *currPtr)) {
|
||||
SWAP(*currPtr, *belowPtr, temp);
|
||||
}
|
||||
r7 = iVar4;
|
||||
r1 = r9;
|
||||
} while (iVar4 < r1);
|
||||
currPtr--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -246,7 +274,7 @@ UNUSED static PokemonStruct1 *sub_80243E8(void)
|
||||
{
|
||||
u8 buffer[40];
|
||||
u8 nameBuffer[20];
|
||||
PokemonStruct1 *pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_3001B60->unk1A[(gUnknown_3001B60->unk376 * gUnknown_3001B60->unk374) + gUnknown_3001B60->unk370]];
|
||||
PokemonStruct1 *pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_3001B60->unk1A[(gUnknown_3001B60->unk358.unk1E * gUnknown_3001B60->unk358.unk1C) + gUnknown_3001B60->unk358.menuIndex]];
|
||||
|
||||
sub_80922B4(nameBuffer, pokeStruct->name, POKEMON_NAME_LENGTH);
|
||||
sprintfStatic(buffer, sUnknown_80DC9A4, nameBuffer);
|
||||
|
||||
Reference in New Issue
Block a user