summaryrefslogtreecommitdiff
path: root/src/pokemon_2.c
diff options
context:
space:
mode:
authorMarijn van der Werf <marijn.vanderwerf@gmail.com>2016-12-02 19:06:22 +0100
committerYamaArashi <YamaArashi@users.noreply.github.com>2016-12-02 10:06:22 -0800
commit1f222c04ef1d10ff5a5c6bb98cd4380ecf2bba86 (patch)
tree573d6368233110b17292e498f49532c1c9244404 /src/pokemon_2.c
parent4258e60771aa9fdabd678930eca534423bd371b8 (diff)
[WIP] Extract all external function declarations to headers (#114)
* Extract other external function declarations * Fix GBA compilation * Revert `sub_803C434` to asm
Diffstat (limited to 'src/pokemon_2.c')
-rw-r--r--src/pokemon_2.c81
1 files changed, 75 insertions, 6 deletions
diff --git a/src/pokemon_2.c b/src/pokemon_2.c
index 78b394b87..aeffb29a0 100644
--- a/src/pokemon_2.c
+++ b/src/pokemon_2.c
@@ -1,7 +1,9 @@
#include "global.h"
+#include "asm.h"
#include "text.h"
#include "string_util.h"
#include "pokemon.h"
+#include "rng.h"
#include "species.h"
#include "main.h"
#include "sprite.h"
@@ -49,11 +51,6 @@ extern u8 gUnknown_0820823C[];
extern u8 gStatStageRatios[][2];
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 sub_8018324(u8, u8, u8, u8, u16);
-
u8 sub_803C348(u8 a1)
{
s32 i;
@@ -87,6 +84,7 @@ u8 sub_803C348(u8 a1)
return retVal;
}
+#ifdef NONMATCHING
u8 sub_803C434(u8 a1)
{
u32 status0 = battle_get_per_side_status(a1);
@@ -111,7 +109,7 @@ u8 sub_803C434(u8 a1)
if (sub_803C348(0) > 1)
{
- u32 r = Random();
+ u16 r = Random();
register u32 val asm("r1") = mask2;
val &= r;
if (!val)
@@ -133,6 +131,77 @@ u8 sub_803C434(u8 a1)
return battle_get_side_with_given_state(status);
}
}
+#else
+__attribute__((naked))
+u8 sub_803C434(u8 a1) {
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ bl battle_get_per_side_status\n\
+ movs r1, 0x1\n\
+ movs r6, 0x1\n\
+ adds r4, r6, 0\n\
+ ands r4, r0\n\
+ eors r4, r1\n\
+ adds r5, r4, 0\n\
+ ldr r0, _0803C45C\n\
+ ldrh r1, [r0]\n\
+ adds r0, r6, 0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0803C460\n\
+ adds r0, r4, 0\n\
+ b _0803C4AA\n\
+ .align 2, 0\n\
+_0803C45C: .4byte gUnknown_020239F8\n\
+_0803C460:\n\
+ movs r0, 0\n\
+ bl sub_803C348\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bls _0803C484\n\
+ bl Random\n\
+ adds r1, r6, 0\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _0803C480\n\
+ movs r0, 0x2\n\
+ eors r0, r4\n\
+ b _0803C4AA\n\
+_0803C480:\n\
+ adds r0, r4, 0\n\
+ b _0803C4AA\n\
+_0803C484:\n\
+ ldr r0, _0803C49C\n\
+ ldrb r1, [r0]\n\
+ ldr r2, _0803C4A0\n\
+ lsls r0, r4, 2\n\
+ adds r0, r2\n\
+ ldr r0, [r0]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _0803C4A4\n\
+ adds r0, r4, 0\n\
+ b _0803C4AA\n\
+ .align 2, 0\n\
+_0803C49C: .4byte gUnknown_02024C0C\n\
+_0803C4A0: .4byte gBitTable\n\
+_0803C4A4:\n\
+ movs r0, 0x2\n\
+ eors r5, r0\n\
+ adds r0, r5, 0\n\
+_0803C4AA:\n\
+ bl battle_get_side_with_given_state\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ pop {r4-r6}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .syntax divided\n");
+}
+#endif
u8 GetMonGender(struct Pokemon *mon)
{