diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-06-16 08:26:08 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-06-16 08:26:08 -0400 |
commit | 424076d3a557419bc548346c7625931cc09a34b2 (patch) | |
tree | a841b547ceb674659f0f076d6e74aa3435920b1d /arm9/src | |
parent | c1347194db3ca34035901203deaebf0141357524 (diff) |
Decompile move table access routines
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/pokemon.c | 10 | ||||
-rw-r--r-- | arm9/src/waza.c | 68 |
2 files changed, 73 insertions, 5 deletions
diff --git a/arm9/src/pokemon.c b/arm9/src/pokemon.c index 4a4b8a6d..e342bd0f 100644 --- a/arm9/src/pokemon.c +++ b/arm9/src/pokemon.c @@ -761,7 +761,7 @@ u32 GetBoxMonDataInternal(struct BoxPokemon * boxmon, int attr, void * dest) case MON_DATA_MOVE2MAXPP: case MON_DATA_MOVE3MAXPP: case MON_DATA_MOVE4MAXPP: - ret = (u32)FUN_0206AB30(blockB->moves[attr - MON_DATA_MOVE1MAXPP], blockB->movePpUps[attr - MON_DATA_MOVE1MAXPP]); + ret = (u32)WazaGetMaxPp(blockB->moves[attr - MON_DATA_MOVE1MAXPP], blockB->movePpUps[attr - MON_DATA_MOVE1MAXPP]); break; case MON_DATA_HP_IV: ret = blockB->hpIV; @@ -1562,8 +1562,8 @@ void AddBoxMonData(struct BoxPokemon * boxmon, int attr, int value) case MON_DATA_MOVE2PP: case MON_DATA_MOVE3PP: case MON_DATA_MOVE4PP: - if (blockB->movePP[attr - MON_DATA_MOVE1PP] + value > FUN_0206AB30(blockB->moves[attr - MON_DATA_MOVE1PP], blockB->movePpUps[attr - MON_DATA_MOVE1PP])) - blockB->movePP[attr - MON_DATA_MOVE1PP] = (u8)FUN_0206AB30(blockB->moves[attr - MON_DATA_MOVE1PP], blockB->movePpUps[attr - MON_DATA_MOVE1PP]); + if (blockB->movePP[attr - MON_DATA_MOVE1PP] + value > WazaGetMaxPp(blockB->moves[attr - MON_DATA_MOVE1PP], blockB->movePpUps[attr - MON_DATA_MOVE1PP])) + blockB->movePP[attr - MON_DATA_MOVE1PP] = (u8)WazaGetMaxPp(blockB->moves[attr - MON_DATA_MOVE1PP], blockB->movePpUps[attr - MON_DATA_MOVE1PP]); else blockB->movePP[attr - MON_DATA_MOVE1PP] += value; break; @@ -2859,7 +2859,7 @@ void FUN_02069718(struct BoxPokemon * boxmon, u16 move) } moves[3] = move; - pp[3] = (u8)FUN_0206AB18(move, 5); + pp[3] = (u8)GetWazaAttr(move, 5); ppUp[3] = 0; for (i = 0; i < 4; i++) @@ -2884,7 +2884,7 @@ void FUN_020697D4(struct BoxPokemon * boxmon, u16 move, u8 slot) SetBoxMonData(boxmon, MON_DATA_MOVE1 + slot, &move); ppUp = (u8)GetBoxMonData(boxmon, MON_DATA_MOVE1PPUP + slot, NULL); - pp = (u8)FUN_0206AB30(move, ppUp); + pp = (u8)WazaGetMaxPp(move, ppUp); SetBoxMonData(boxmon, MON_DATA_MOVE1PP + slot, &pp); } diff --git a/arm9/src/waza.c b/arm9/src/waza.c new file mode 100644 index 00000000..1ed8574e --- /dev/null +++ b/arm9/src/waza.c @@ -0,0 +1,68 @@ +#include "global.h" +#include "move_data.h" +#include "filesystem.h" +#include "constants/moves.h" + +#pragma thumb on + +void LoadWazaEntry(u16 waza, struct WazaTbl * dest); + +// Effectively reads the entirety of the waza_tbl.narc file image. +// Even though each "file" is only 16 bytes, they are arranged +// contiguously and in the correct order. +void LoadAllWazaTbl(struct WazaTbl * dest) +{ + ReadFromNarcMemberByIdPair(dest, NARC_POKETOOL_WAZA_WAZA_TBL, 0, 0, (NUM_MOVES + 1) * sizeof(struct WazaTbl)); +} + +u32 GetWazaAttr(u16 waza, u32 attr) +{ + struct WazaTbl wazaTbl; + LoadWazaEntry(waza, &wazaTbl); + return GetAttrFromWazaTbl(&wazaTbl, attr); +} + +u8 WazaGetMaxPp(u16 waza, u8 ppUp) +{ + u8 pp; + if (ppUp > 3) + ppUp = 3; + pp = GetWazaAttr(waza, 5); + return pp + (pp * 20 * ppUp) / 100; +} + +u32 GetAttrFromWazaTbl(struct WazaTbl * wazaTbl, u32 attr) +{ + switch (attr) + { + case 0: + return wazaTbl->unk0; + case 1: + return wazaTbl->unk2; + case 2: + return wazaTbl->unk3; + case 3: + return wazaTbl->unk4; + case 4: + return wazaTbl->unk5; + case 5: + return wazaTbl->pp; + case 6: + return wazaTbl->unk7; + case 7: + return wazaTbl->unk8; + case 8: + return wazaTbl->unkA; + case 9: + return wazaTbl->unkB; + case 10: + return wazaTbl->unkC; + case 11: + return wazaTbl->unkD; + } +} + +void LoadWazaEntry(u16 waza, struct WazaTbl * wazaTbl) +{ + ReadWholeNarcMemberByIdPair(wazaTbl, NARC_POKETOOL_WAZA_WAZA_TBL, waza); +} |