more headway on Pokemon funcs and labeled in asm

This commit is contained in:
Seth Barberee
2021-01-21 23:00:49 -06:00
parent 10cda4ba81
commit cb77386b65
22 changed files with 282 additions and 383 deletions
+166 -16
View File
@@ -14,61 +14,211 @@ struct unkEvolve
/* 0x4 */ struct EvolveNeeds needs;
};
s16 sub_808DD48(s16 r0, struct unkEvolve *r1)
u8 *GetCategoryString(s16 index)
{
return gMonsterParameters[index].category;
}
u8 GetPokemonSize(s16 index)
{
return gMonsterParameters[index].size;
}
u8 GetShadowSize(s16 index)
{
return gMonsterParameters[index].shadow_size;
}
s32 GetMoveSpeed(s16 index)
{
return gMonsterParameters[index].move_speed;
}
u8 GetWalkableTiles(s16 index)
{
return gMonsterParameters[index].walkable_tiles;
}
u8 GetUnk1B(s16 index)
{
return ((u8)(gMonsterParameters[index].unk1B) << 25) >> 24;
}
bool8 GetIsMoving(s16 index)
{
return gMonsterParameters[index].isMoving;
}
u8 GetUnk1D(s16 index)
{
return gMonsterParameters[index].unk1D;
}
u16 GetLowKickDmg(s16 index)
{
return gMonsterParameters[index].lowkick_dmg;
}
u16 GetSizeOrbDmg(s16 index)
{
return gMonsterParameters[index].sizeorb_dmg;
}
u8 GetFriendArea(s16 index)
{
return gMonsterParameters[index].friend_area;
}
u16 GetBaseHP(s16 index)
{
return gMonsterParameters[index].base_hp;
}
bool8 GetUnk33(s16 index)
{
return gMonsterParameters[index].unk33;
}
u8 GetUnk12(s16 index)
{
return gMonsterParameters[index].unk12;
}
s16 GetPokemonEvolveFrom(s16 index)
{
return gMonsterParameters[index].pre.evolve_from;
}
u16 GetPokemonAttSpatt(s16 index, u32 r1)
{
return gMonsterParameters[index].base_att_spatt[r1];
}
u16 GetPokemonDefSpdef(s16 index, u32 r1)
{
return gMonsterParameters[index].base_def_spdef[r1];
}
u8 GetPokemonType(s16 index, u32 typeIndex)
{
return gMonsterParameters[index].types[typeIndex];
}
u8 GetPokemonAbility(s16 index, u32 abilityIndex)
{
return gMonsterParameters[index].abilities[abilityIndex];
}
s16 sub_808DCA0(s16 index, u32 r1)
{
return gMonsterParameters[index].unk3C[r1];
}
s16 GetBaseRecruit(s16 index)
{
return gMonsterParameters[index].base_recruit;
}
s16 sub_808DCDC(s16 index, s32 r1)
{
return gMonsterParameters[index].unk42[r1];
}
s16 sub_808DCFC(s16 index)
{
return gMonsterParameters[index].unk3C[1];
}
#ifdef NONMATCHING
u32 CalculateEXPGain(s16 index, s32 level)
{
return gMonsterParameters[index].base_exp + (gMonsterParameters[index].base_exp * (level- 1)) / 10;
}
#else
NAKED
u32 CalculateEXPGain(s16 index, s32 level)
{
asm_unified("\tpush {r4,lr}\n"
"\tlsls r0, 16\n"
"\tasrs r0, 16\n"
"\tldr r2, _0808DD44\n"
"\tldr r3, [r2]\n"
"\tlsls r2, r0, 3\n"
"\tadds r2, r0\n"
"\tlsls r2, 3\n"
"\tadds r2, r3\n"
"\tldr r4, [r2, 0x20]\n"
"\tsubs r1, 0x1\n"
"\tadds r0, r4, 0\n"
"\tmuls r0, r1\n"
"\tmovs r1, 0xA\n"
"\tbl __divsi3\n"
"\tadds r4, r0\n"
"\tadds r0, r4, 0\n"
"\tpop {r4}\n"
"\tpop {r1}\n"
"\tbx r1\n"
"\t.align 2, 0\n"
"_0808DD44: .4byte gMonsterParameters");
}
#endif
s16 sub_808DD48(s16 index, struct unkEvolve *r1)
{
struct EvolveStruct1 temp2;
struct EvolveNeeds temp1;
temp1 = gMonsterParameters[r0].need;
temp2 = gMonsterParameters[r0].pre;
temp1 = gMonsterParameters[index].need;
temp2 = gMonsterParameters[index].pre;
r1->conditions = temp2;
r1->needs = temp1;
// The return value is not used anywhere, but necessary for the function to match.
return r0;
return index;
}
u8 sub_808DD68(s16 r0, u32 r1)
u8 GetPokemonOverworldPalette(s16 index, u32 r1)
{
// Had to have this cast to match
u32 temp;
temp = r0;
temp = index;
if (r1 != 0)
{
return 0xA;
return 10;
}
else
{
return gMonsterParameters[temp].overworld_sprite;
return gMonsterParameters[temp].overworld_palette;
}
}
struct OpenedFile *sub_808DD90(s16 r0)
struct OpenedFile *OpenPokemonDialogueSpriteFile(s16 index)
{
// Looks like this loads the dialogue sprite for the pokemon
char buffer[0xC];
if(gMonsterParameters[r0].dialogue_sprites == 0)
if(gMonsterParameters[index].dialogue_sprites == 0)
{
return NULL;
}
sprintf(buffer, gUnknown_8107684, r0); // "kao%03d"
sprintf(buffer, gUnknown_8107684, index); // "kao%03d"
return OpenFile(buffer, &gMonsterFileArchive);
}
struct OpenedFile *sub_808DDD0(s16 r0)
struct OpenedFile *GetDialogueSpriteDataPtr(s16 index)
{
// Looks like this loads the dialogue sprite for the pokemon
char buffer[0xC];
if(gMonsterParameters[r0].dialogue_sprites == 0)
if(gMonsterParameters[index].dialogue_sprites == 0)
{
return NULL;
}
sprintf(buffer, gUnknown_8107684, r0); // "kao%03d"
sprintf(buffer, gUnknown_8107684, index); // "kao%03d"
return OpenFileAndGetFileDataPtr(buffer, &gMonsterFileArchive);
}
bool8 sub_808DE10(s16 r0, s32 r1)
bool8 IsPokemonDialogueSpriteAvail(s16 index, s32 r1)
{
// checking to see if dialogue sprite is available??
return (gMonsterParameters[r0].dialogue_sprites >> r1) & 1;
return (gMonsterParameters[index].dialogue_sprites >> r1) & 1;
}
-85
View File
@@ -1,85 +0,0 @@
#include "global.h"
#include "pokemon.h"
extern struct gPokemon *gMonsterParameters;
u8 *GetCategoryString(s16 r0)
{
return gMonsterParameters[r0].category;
}
u8 GetPokemonSize(s16 r0)
{
return gMonsterParameters[r0].size;
}
u8 GetShadowSize(s16 r0)
{
return gMonsterParameters[r0].shadow_size;
}
s32 GetMoveSpeed(s16 r0)
{
return gMonsterParameters[r0].move_speed;
}
u8 GetWalkableTiles(s16 r0)
{
return gMonsterParameters[r0].walkable_tiles;
}
u8 GetUnk1B(s16 r0)
{
return ((u8)(gMonsterParameters[r0].unk1B) << 25) >> 24;
}
bool8 GetIsMoving(s16 r0)
{
return gMonsterParameters[r0].isMoving;
}
u8 GetUnk1D(s16 r0)
{
return gMonsterParameters[r0].unk1D;
}
u16 GetLowKickDmg(s16 r0)
{
return gMonsterParameters[r0].lowkick_dmg;
}
u16 GetSizeOrbDmg(s16 r0)
{
return gMonsterParameters[r0].sizeorb_dmg;
}
u8 GetFriendArea(s16 r0)
{
return gMonsterParameters[r0].friend_area;
}
u16 GetBaseHP(s16 r0)
{
return gMonsterParameters[r0].base_hp;
}
bool8 GetUnk33(s16 r0)
{
return gMonsterParameters[r0].unk33;
}
u8 GetUnk12(s16 r0)
{
return gMonsterParameters[r0].unk12;
}
s16 sub_808DC0C(s16 r0)
{
return gMonsterParameters[r0].pre.evolve_from;
}
// TODO fix calculation to match
//u32 sub_808DC28(s16 r0, u32 r1)
//{
// return gMonsterParameters[r0].base_att + (r1 << 1);
//}