decomp an evolve func for pokemon

This commit is contained in:
Seth Barberee
2020-10-18 18:16:28 -05:00
parent 01dde719bb
commit 1b0fc9f374
4 changed files with 52 additions and 24 deletions

View File

@@ -181,23 +181,4 @@ sub_808DD18:
_0808DD44: .4byte gMonsterParameters
thumb_func_end sub_808DD18
thumb_func_start sub_808DD48
sub_808DD48:
lsls r0, 16
asrs r0, 16
ldr r2, _0808DD64
ldr r3, [r2]
lsls r2, r0, 3
adds r2, r0
lsls r2, 3
adds r2, r3
ldr r3, [r2, 0x38]
ldr r2, [r2, 0x34]
str r2, [r1]
str r3, [r1, 0x4]
bx lr
.align 2, 0
_0808DD64: .4byte gMonsterParameters
thumb_func_end sub_808DD48
.align 2,0 @ don't pad with nop

View File

@@ -1,6 +1,18 @@
#ifndef POKEMON_H
#define POKEMON_H
struct EvolveStruct1
{
u16 evolve_from;
u16 evolve_type;
};
struct EvolveNeeds
{
u16 evolve_need1;
u16 evolve_need2;
};
struct gPokemon
{
/* 0x0 */ u8* species;
@@ -36,10 +48,8 @@ struct gPokemon
/* 0x31 */ u8 unk31;
/* 0x32 */ u8 unk32;
/* 0x33 */ bool8 unk33;
/* 0x34 */ u16 evolve_from; //verified
/* 0x36 */ u16 evolve_type;
/* 0x38 */ u16 evolve_need1; // verified
/* 0x3A */ u16 evolve_need2; // verified
/* 0x34 */ struct EvolveStruct1 pre;
/* 0x38 */ struct EvolveNeeds need;
/* 0x3C */ u16 dexNo;
/* 0x3E */ u16 internalNo; // verified
/* 0x40 */ s16 base_recruit; // verified

View File

@@ -8,6 +8,43 @@ extern struct gPokemon *gMonsterParameters;
extern struct FileArchive gUnknown_8510000;
extern const char gUnknown_8107684;
struct unkEvolve
{
/* 0x0 */ struct EvolveStruct1 conditions;
/* 0x4 */ struct EvolveNeeds needs;
};
#ifndef NONMATCHING
NAKED
#endif
void sub_808DD48(s16 r0, struct unkEvolve *r1)
{
#ifdef NONMATCHING
struct EvolveStruct1 temp2;
struct EvolveNeeds temp1;
temp1 = gMonsterParameters[r0].need;
temp2 = gMonsterParameters[r0].pre; // TODO should be using r2 but it uses r0
r1->conditions = temp2;
r1->needs = temp1;
#else
asm_unified("\tlsls r0, 16\n"
"\tasrs r0, 16\n"
"\tldr r2, _0808DD64\n"
"\tldr r3, [r2]\n"
"\tlsls r2, r0, 3\n"
"\tadds r2, r0\n"
"\tlsls r2, 3\n"
"\tadds r2, r3\n"
"\tldr r3, [r2, 0x38]\n"
"\tldr r2, [r2, 0x34]\n"
"\tstr r2, [r1]\n"
"\tstr r3, [r1, 0x4]\n"
"\tbx lr\n"
"\t.align 2, 0\n"
"_0808DD64: .4byte gMonsterParameters");
#endif
}
#ifndef NONMATCHING
NAKED
#endif

View File

@@ -75,7 +75,7 @@ u8 GetUnk12(s16 r0)
s16 sub_808DC0C(s16 r0)
{
return gMonsterParameters[r0].evolve_from;
return gMonsterParameters[r0].pre.evolve_from;
}
// TODO fix calculation to match