diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/pokemon_1.c | 156 | ||||
-rw-r--r-- | src/pokemon_mid.c | 35 |
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); +//} |