summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2016-09-27 23:51:02 -0700
committerYamaArashi <shadow962@live.com>2016-09-27 23:51:02 -0700
commite714dae4df3d3a78d9c5390ee78379c7a73943cc (patch)
tree67ff9c27a8bc4ec7a0c0f07edc901b6ed8f2ea16
parent3f88e8c00527333b9dd3e107ce47139967af993f (diff)
decompile 2 pokemon functions
-rw-r--r--asm/rom_803BA2C.s189
-rw-r--r--src/pokemon_2.c81
2 files changed, 81 insertions, 189 deletions
diff --git a/asm/rom_803BA2C.s b/asm/rom_803BA2C.s
index 1f6b1bd39..cd5ad380d 100644
--- a/asm/rom_803BA2C.s
+++ b/asm/rom_803BA2C.s
@@ -1162,193 +1162,4 @@ _0803C330:
_0803C344: .4byte 0x02017100
thumb_func_end sub_803BA2C
- thumb_func_start sub_803C348
-sub_803C348: @ 803C348
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- movs r6, 0
- cmp r0, 0x1
- beq _0803C39C
- cmp r0, 0x1
- bgt _0803C360
- cmp r0, 0
- beq _0803C366
- b _0803C41E
-_0803C360:
- cmp r1, 0x2
- beq _0803C3E4
- b _0803C41E
-_0803C366:
- movs r5, 0
- ldr r0, _0803C390
- ldrb r3, [r0]
- ldr r4, _0803C394
- ldr r2, _0803C398
-_0803C370:
- cmp r5, r3
- beq _0803C384
- ldrb r0, [r4]
- ldr r1, [r2]
- ands r0, r1
- cmp r0, 0
- bne _0803C384
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_0803C384:
- adds r2, 0x4
- adds r5, 0x1
- cmp r5, 0x3
- ble _0803C370
- b _0803C41E
- .align 2, 0
-_0803C390: .4byte gUnknown_02024A60
-_0803C394: .4byte gUnknown_02024C0C
-_0803C398: .4byte gBitTable
-_0803C39C:
- movs r5, 0
-_0803C39E:
- lsls r0, r5, 24
- lsrs r0, 24
- bl battle_side_get_owner
- adds r4, r0, 0
- ldr r0, _0803C3D8
- ldrb r0, [r0]
- bl battle_side_get_owner
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bne _0803C3D0
- ldr r0, _0803C3DC
- ldrb r1, [r0]
- ldr r2, _0803C3E0
- lsls r0, r5, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0803C3D0
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_0803C3D0:
- adds r5, 0x1
- cmp r5, 0x3
- ble _0803C39E
- b _0803C41E
- .align 2, 0
-_0803C3D8: .4byte gUnknown_02024C07
-_0803C3DC: .4byte gUnknown_02024C0C
-_0803C3E0: .4byte gBitTable
-_0803C3E4:
- movs r5, 0
-_0803C3E6:
- lsls r0, r5, 24
- lsrs r0, 24
- bl battle_side_get_owner
- adds r4, r0, 0
- ldr r0, _0803C428
- ldrb r0, [r0]
- bl battle_side_get_owner
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bne _0803C418
- ldr r0, _0803C42C
- ldrb r1, [r0]
- ldr r2, _0803C430
- lsls r0, r5, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0803C418
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_0803C418:
- adds r5, 0x1
- cmp r5, 0x3
- ble _0803C3E6
-_0803C41E:
- adds r0, r6, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0803C428: .4byte gUnknown_02024C08
-_0803C42C: .4byte gUnknown_02024C0C
-_0803C430: .4byte gBitTable
- thumb_func_end sub_803C348
-
- thumb_func_start sub_803C434
-sub_803C434: @ 803C434
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- bl battle_get_per_side_status
- movs r1, 0x1
- movs r6, 0x1
- adds r4, r6, 0
- ands r4, r0
- eors r4, r1
- adds r5, r4, 0
- ldr r0, _0803C45C
- ldrh r1, [r0]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- bne _0803C460
- adds r0, r4, 0
- b _0803C4AA
- .align 2, 0
-_0803C45C: .4byte gUnknown_020239F8
-_0803C460:
- movs r0, 0
- bl sub_803C348
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _0803C484
- bl Random
- adds r1, r6, 0
- ands r1, r0
- cmp r1, 0
- bne _0803C480
- movs r0, 0x2
- eors r0, r4
- b _0803C4AA
-_0803C480:
- adds r0, r4, 0
- b _0803C4AA
-_0803C484:
- ldr r0, _0803C49C
- ldrb r1, [r0]
- ldr r2, _0803C4A0
- lsls r0, r4, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0803C4A4
- adds r0, r4, 0
- b _0803C4AA
- .align 2, 0
-_0803C49C: .4byte gUnknown_02024C0C
-_0803C4A0: .4byte gBitTable
-_0803C4A4:
- movs r0, 0x2
- eors r5, r0
- adds r0, r5, 0
-_0803C4AA:
- bl battle_get_side_with_given_state
- lsls r0, 24
- lsrs r0, 24
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_803C434
-
.align 2, 0 @ Don't pad with nop.
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);