diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2020-10-18 18:16:28 -0500 |
---|---|---|
committer | Seth Barberee <seth.barberee@gmail.com> | 2020-10-18 18:16:28 -0500 |
commit | 1b0fc9f3745f119e2ec363bef89e48d6edeeac41 (patch) | |
tree | f3ea5eaf00b3b1e5e7baedc48a63fe447e5fa6d5 | |
parent | 01dde719bb7d6ac4d68c6d43ec2570db52f2e037 (diff) |
decomp an evolve func for pokemon
-rw-r--r-- | asm/pokemon_1.s | 19 | ||||
-rw-r--r-- | include/pokemon.h | 18 | ||||
-rw-r--r-- | src/pokemon_1.c | 37 | ||||
-rw-r--r-- | src/pokemon_mid.c | 2 |
4 files changed, 52 insertions, 24 deletions
diff --git a/asm/pokemon_1.s b/asm/pokemon_1.s index fababf5..4ca25ef 100644 --- a/asm/pokemon_1.s +++ b/asm/pokemon_1.s @@ -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 diff --git a/include/pokemon.h b/include/pokemon.h index 0b408e3..6c18f7d 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -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 diff --git a/src/pokemon_1.c b/src/pokemon_1.c index 83a74b2..c2434e1 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -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 diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c index e0d3f19..e348784 100644 --- a/src/pokemon_mid.c +++ b/src/pokemon_mid.c @@ -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 |