summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pokemon_2.c81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/pokemon_2.c b/src/pokemon_2.c
index ec683affd..384e04545 100644
--- a/src/pokemon_2.c
+++ b/src/pokemon_2.c
@@ -51,10 +51,91 @@ extern u8 gHoldEffectToType[][2];
extern u8 battle_side_get_owner(u8);
extern u8 battle_get_side_with_given_state(u8);
+extern u32 battle_get_per_side_status(u8);
extern u8 FlagGet(u16);
extern u8 sub_8018324(u8, u8, u8, u8, u16);
extern u8 sub_803C348(u8);
+u8 sub_803C348(u8 a1)
+{
+ s32 i;
+ u8 retVal = 0;
+
+ switch (a1)
+ {
+ case 0:
+ for (i = 0; i < 4; i++)
+ {
+ if (i != gUnknown_02024A60 && !(gUnknown_02024C0C & gBitTable[i]))
+ retVal++;
+ }
+ break;
+ case 1:
+ for (i = 0; i < 4; i++)
+ {
+ if (battle_side_get_owner(i) == battle_side_get_owner(gUnknown_02024C07) && !(gUnknown_02024C0C & gBitTable[i]))
+ retVal++;
+ }
+ break;
+ case 2:
+ for (i = 0; i < 4; i++)
+ {
+ if (battle_side_get_owner(i) == battle_side_get_owner(gUnknown_02024C08) && !(gUnknown_02024C0C & gBitTable[i]))
+ retVal++;
+ }
+ break;
+ }
+
+ return retVal;
+}
+
+u8 sub_803C434(u8 a1)
+{
+ u32 status0 = battle_get_per_side_status(a1);
+ register u8 status_ asm("r4");
+ u8 status;
+ register u32 mask1 asm("r1") = 1;
+ register u32 mask2 asm("r6") = 1;
+
+ status_ = mask2;
+ status_ &= status0;
+ status = status_ ^ mask1;
+
+ {
+ register u16 val_ asm("r1") = gUnknown_020239F8;
+ u32 val = mask2;
+ val &= val_;
+ if (!val)
+ {
+ return battle_get_side_with_given_state(status);
+ }
+ }
+
+ if (sub_803C348(0) > 1)
+ {
+ u32 r = Random();
+ register u32 val asm("r1") = mask2;
+ val &= r;
+ if (!val)
+ {
+ u32 status2 = 2;
+ status2 ^= status;
+ return battle_get_side_with_given_state(status2);
+ }
+ else
+ {
+ return battle_get_side_with_given_state(status);
+ }
+ }
+ else
+ {
+ if (gUnknown_02024C0C & gBitTable[status])
+ return battle_get_side_with_given_state(status ^ 2);
+ else
+ return battle_get_side_with_given_state(status);
+ }
+}
+
u8 GetMonGender(struct Pokemon *mon)
{
return GetBoxMonGender(&mon->box);