diff options
author | YamaArashi <shadow962@live.com> | 2016-09-27 23:51:02 -0700 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2016-09-27 23:51:02 -0700 |
commit | e714dae4df3d3a78d9c5390ee78379c7a73943cc (patch) | |
tree | 67ff9c27a8bc4ec7a0c0f07edc901b6ed8f2ea16 | |
parent | 3f88e8c00527333b9dd3e107ce47139967af993f (diff) |
decompile 2 pokemon functions
-rw-r--r-- | asm/rom_803BA2C.s | 189 | ||||
-rw-r--r-- | src/pokemon_2.c | 81 |
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); |