summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-06-16 08:26:08 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-06-16 08:26:08 -0400
commit424076d3a557419bc548346c7625931cc09a34b2 (patch)
treea841b547ceb674659f0f076d6e74aa3435920b1d /arm9/src
parentc1347194db3ca34035901203deaebf0141357524 (diff)
Decompile move table access routines
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/pokemon.c10
-rw-r--r--arm9/src/waza.c68
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);
+}