summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2020-10-10 14:33:06 -0500
committerSeth Barberee <seth.barberee@gmail.com>2020-10-10 14:33:06 -0500
commit14b4ad7735e039f388c0ff14850086b402f2c447 (patch)
tree8f3a16b426cc4218da264f4f46f5cd82e6caa162 /src
parentfc0a7eae9332f77da3ad77c72b8e20c9eaa2d3f5 (diff)
some doc'ing and decomping
Diffstat (limited to 'src')
-rw-r--r--src/pokemon_1.c156
-rw-r--r--src/pokemon_mid.c35
2 files changed, 161 insertions, 30 deletions
diff --git a/src/pokemon_1.c b/src/pokemon_1.c
index 6d4cf75..83a74b2 100644
--- a/src/pokemon_1.c
+++ b/src/pokemon_1.c
@@ -8,21 +8,147 @@ extern struct gPokemon *gMonsterParameters;
extern struct FileArchive gUnknown_8510000;
extern const char gUnknown_8107684;
-//u8 sub_808DDD0(s16 r0)
-//{
-// // Looks like this loads the dialogue sprite for the pokemon
-//
-// // TODO stack is being added instead of being substracted
-// // Else this matches
-// char buffer[0xC];
-// if(gMonsterParameters[r0].dialogue_sprites != 0)
-// {
-// sprintf(buffer, &gUnknown_8107684);
-// OpenFileAndGetFileDataPtr(buffer, &gUnknown_8510000);
-// return;
-// }
-// return 0;
-//}
+#ifndef NONMATCHING
+NAKED
+#endif
+// Pretty confided args are correct yet compiler disagrees
+u8 sub_808DD68(s16 r0, u32 r1)
+{
+#ifdef NONMATCHING
+ if (r1 != 0)
+ {
+ return 0xA;
+ }
+ else
+ {
+ return gMonsterParameters[r0].overworld_sprite;
+ }
+#else
+ asm_unified("\tpush {lr}\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r2, r0, 16\n"
+ "\tcmp r1, 0\n"
+ "\tbne _0808DD88\n"
+ "\tldr r0, _0808DD84\n"
+ "\tldr r1, [r0]\n"
+ "\tlsls r0, r2, 3\n"
+ "\tadds r0, r2\n"
+ "\tlsls r0, 3\n"
+ "\tadds r0, r1\n"
+ "\tldrb r0, [r0, 0x8]\n"
+ "\tb _0808DD8A\n"
+ "\t.align 2, 0\n"
+"_0808DD84: .4byte gMonsterParameters\n"
+"_0808DD88:\n"
+ "\tmovs r0, 0xA\n"
+"_0808DD8A:\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+
+#endif
+}
+
+#ifndef NONMATCHING
+NAKED
+#endif
+struct OpenedFile *sub_808DD90(s16 r0)
+{
+#ifdef NONMATCHING
+ // Looks like this loads the dialogue sprite for the pokemon
+
+ // Two words: register memes... else it matches
+ // Fix this and then one after matches too
+ char buffer[0xC];
+ if(gMonsterParameters[r0].dialogue_sprites == 0)
+ {
+ return NULL;
+ }
+ sprintf(buffer, &gUnknown_8107684);
+ return OpenFile(buffer, &gUnknown_8510000);
+#else
+ asm_unified("\tpush {lr}\n"
+ "\tsub sp, 0xC\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r2, r0, 16\n"
+ "\tldr r0, _0808DDBC\n"
+ "\tldr r1, [r0]\n"
+ "\tlsls r0, r2, 3\n"
+ "\tadds r0, r2\n"
+ "\tlsls r0, 3\n"
+ "\tadds r0, r1\n"
+ "\tldrh r0, [r0, 0x10]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0808DDC8\n"
+ "\tldr r1, _0808DDC0\n"
+ "\tmov r0, sp\n"
+ "\tbl sprintf\n"
+ "\tldr r1, _0808DDC4\n"
+ "\tmov r0, sp\n"
+ "\tbl OpenFile\n"
+ "\tb _0808DDCA\n"
+ "\t.align 2, 0\n"
+"_0808DDBC: .4byte gMonsterParameters\n"
+"_0808DDC0: .4byte gUnknown_8107684\n"
+"_0808DDC4: .4byte gUnknown_8510000\n"
+"_0808DDC8:\n"
+ "\tmovs r0, 0\n"
+"_0808DDCA:\n"
+ "\tadd sp, 0xC\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+#endif
+}
+
+#ifndef NONMATCHING
+NAKED
+#endif
+struct OpenedFile *sub_808DDD0(s16 r0)
+{
+#ifdef NONMATCHING
+ // Looks like this loads the dialogue sprite for the pokemon
+
+ // Two words: register memes... else it matches
+ char buffer[0xC];
+ if(gMonsterParameters[r0].dialogue_sprites == 0)
+ {
+ return NULL;
+ }
+ sprintf(buffer, &gUnknown_8107684);
+ return OpenFileAndGetFileDataPtr(buffer, &gUnknown_8510000);
+#else
+ asm_unified("\tpush {lr}\n"
+ "\tsub sp, 0xC\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r2, r0, 16\n"
+ "\tldr r0, _0808DDFC\n"
+ "\tldr r1, [r0]\n"
+ "\tlsls r0, r2, 3\n"
+ "\tadds r0, r2\n"
+ "\tlsls r0, 3\n"
+ "\tadds r0, r1\n"
+ "\tldrh r0, [r0, 0x10]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0808DE08\n"
+ "\tldr r1, _0808DE00\n"
+ "\tmov r0, sp\n"
+ "\tbl sprintf\n"
+ "\tldr r1, _0808DE04\n"
+ "\tmov r0, sp\n"
+ "\tbl OpenFileAndGetFileDataPtr\n"
+ "\tb _0808DE0A\n"
+ "\t.align 2, 0\n"
+ "_0808DDFC: .4byte gMonsterParameters\n"
+ "_0808DE00: .4byte gUnknown_8107684\n"
+ "_0808DE04: .4byte gUnknown_8510000\n"
+ "_0808DE08:\n"
+ "\tmovs r0, 0\n"
+ "_0808DE0A:\n"
+ "\tadd sp, 0xC\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+
+#endif
+}
bool8 sub_808DE10(s16 r0, s32 r1)
{
diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c
index 03a66b2..e0d3f19 100644
--- a/src/pokemon_mid.c
+++ b/src/pokemon_mid.c
@@ -3,73 +3,72 @@
extern struct gPokemon *gMonsterParameters;
-u8 *sub_808DAB4(s16 r0)
+u8 *GetCategoryString(s16 r0)
{
return gMonsterParameters[r0].category;
}
-u8 sub_808DACC(s16 r0)
+u8 GetPokemonSize(s16 r0)
{
return gMonsterParameters[r0].size;
}
-u8 sub_808DAE4(s16 r0)
+u8 GetShadowSize(s16 r0)
{
return gMonsterParameters[r0].shadow_size;
}
-s32 sub_808DAFC(s16 r0)
+s32 GetMoveSpeed(s16 r0)
{
return gMonsterParameters[r0].move_speed;
}
-u8 sub_808DB14(s16 r0)
+u8 GetWalkableTiles(s16 r0)
{
return gMonsterParameters[r0].walkable_tiles;
}
-u8 sub_808DB2C(s16 r0)
+u8 GetUnk1B(s16 r0)
{
return ((u8)(gMonsterParameters[r0].unk1B) << 25) >> 24;
}
-
-bool8 sub_808DB48(s16 r0)
+bool8 GetIsMoving(s16 r0)
{
return gMonsterParameters[r0].isMoving;
}
-u8 sub_808DB60(s16 r0)
+u8 GetUnk1D(s16 r0)
{
return gMonsterParameters[r0].unk1D;
}
-u16 sub_808DB78(s16 r0)
+u16 GetLowKickDmg(s16 r0)
{
return gMonsterParameters[r0].lowkick_dmg;
}
-u16 sub_808DB90(s16 r0)
+u16 GetSizeOrbDmg(s16 r0)
{
return gMonsterParameters[r0].sizeorb_dmg;
}
-u8 sub_808DBA8(s16 r0)
+u8 GetFriendArea(s16 r0)
{
return gMonsterParameters[r0].friend_area;
}
-u16 sub_808DBC0(s16 r0)
+u16 GetBaseHP(s16 r0)
{
return gMonsterParameters[r0].base_hp;
}
-bool8 sub_808DBD8(s16 r0)
+bool8 GetUnk33(s16 r0)
{
return gMonsterParameters[r0].unk33;
}
-u8 sub_808DBF4(s16 r0)
+u8 GetUnk12(s16 r0)
{
return gMonsterParameters[r0].unk12;
}
@@ -78,3 +77,9 @@ s16 sub_808DC0C(s16 r0)
{
return gMonsterParameters[r0].evolve_from;
}
+
+// TODO fix calculation to match
+//u32 sub_808DC28(s16 r0, u32 r1)
+//{
+// return gMonsterParameters[r0].base_att + (r1 << 1);
+//}