summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2020-10-18 18:16:28 -0500
committerSeth Barberee <seth.barberee@gmail.com>2020-10-18 18:16:28 -0500
commit1b0fc9f3745f119e2ec363bef89e48d6edeeac41 (patch)
treef3ea5eaf00b3b1e5e7baedc48a63fe447e5fa6d5 /src
parent01dde719bb7d6ac4d68c6d43ec2570db52f2e037 (diff)
decomp an evolve func for pokemon
Diffstat (limited to 'src')
-rw-r--r--src/pokemon_1.c37
-rw-r--r--src/pokemon_mid.c2
2 files changed, 38 insertions, 1 deletions
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