diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2018-10-08 18:51:14 -0400 |
---|---|---|
committer | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2018-10-08 18:51:14 -0400 |
commit | 967b4e6612eb7f81dfe44989c2e2c79000c7d6f3 (patch) | |
tree | def9e67fe788da2963c41585c309b61eb109247d | |
parent | 02fb51cbe7f6016d23d01d58dcbe8f4b3786bc5e (diff) | |
parent | 10fff9c6f2d29899952d1751d3de827e7e98bb60 (diff) |
merge and nonmatching PokemonUseItemEffects2
-rw-r--r-- | asm/menews_jisan.s | 326 | ||||
-rw-r--r-- | asm/pokemon_3.s | 997 | ||||
-rw-r--r-- | data/data_84827AC.s | 8 | ||||
-rw-r--r-- | include/event_data.h | 4 | ||||
-rw-r--r-- | include/gba/defines.h | 1 | ||||
-rw-r--r-- | include/global.h | 26 | ||||
-rw-r--r-- | include/menews_jisan.h | 8 | ||||
-rw-r--r-- | include/mevent.h | 7 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | src/menews_jisan.c | 199 | ||||
-rw-r--r-- | src/pokemon.c | 2073 |
11 files changed, 1780 insertions, 1873 deletions
diff --git a/asm/menews_jisan.s b/asm/menews_jisan.s deleted file mode 100644 index abd5e44f4..000000000 --- a/asm/menews_jisan.s +++ /dev/null @@ -1,326 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8146C30 -sub_8146C30: @ 8146C30 - push {r4,r5,lr} - adds r4, r0, 0 - bl sub_8143D94 - adds r5, r0, 0 - movs r0, 0x3 - adds r1, r4, 0 - ands r1, r0 - ldrb r2, [r5] - movs r0, 0x4 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5] - cmp r4, 0x2 - bhi _08146C56 - cmp r4, 0x1 - bcs _08146C5C - b _08146C80 -_08146C56: - cmp r4, 0x3 - beq _08146C6E - b _08146C80 -_08146C5C: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xF - bl __umodsi3 - adds r0, 0x10 - b _08146C7E -_08146C6E: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xF - bl __umodsi3 - adds r0, 0x1 -_08146C7E: - strb r0, [r5, 0x1] -_08146C80: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8146C30 - - thumb_func_start sub_8146C88 -sub_8146C88: @ 8146C88 - push {lr} - bl sub_8143D94 - movs r1, 0 - strb r1, [r0] - strb r1, [r0, 0x1] - ldr r0, _08146CA0 @ =0x00004028 - bl VarSet - pop {r0} - bx r0 - .align 2, 0 -_08146CA0: .4byte 0x00004028 - thumb_func_end sub_8146C88 - - thumb_func_start sub_8146CA4 -sub_8146CA4: @ 8146CA4 - push {r4,lr} - ldr r0, _08146CE0 @ =0x00004028 - bl sub_806E454 - adds r4, r0, 0 - bl sub_8143D94 - adds r2, r0, 0 - ldr r0, [r2] - lsls r0, 24 - lsrs r0, 29 - cmp r0, 0x4 - bls _08146CD8 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - lsls r0, 16 - ldr r1, _08146CE4 @ =0x01f30000 - cmp r0, r1 - bls _08146CD8 - ldrb r0, [r2] - movs r1, 0x1F - ands r1, r0 - strb r1, [r2] - movs r0, 0 - strh r0, [r4] -_08146CD8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08146CE0: .4byte 0x00004028 -_08146CE4: .4byte 0x01f30000 - thumb_func_end sub_8146CA4 - - thumb_func_start sub_8146CE8 -sub_8146CE8: @ 8146CE8 - push {r4-r6,lr} - ldr r6, _08146D08 @ =gUnknown_20370D0 - bl sub_8143D94 - adds r4, r0, 0 - bl sub_806E2BC - cmp r0, 0 - beq _08146D02 - bl sub_8143E1C - cmp r0, 0 - bne _08146D0C -_08146D02: - movs r0, 0 - b _08146D6E - .align 2, 0 -_08146D08: .4byte gUnknown_20370D0 -_08146D0C: - adds r0, r4, 0 - bl sub_8146E0C - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x6 - bhi _08146D6C - lsls r0, r5, 2 - ldr r1, _08146D24 @ =_08146D28 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08146D24: .4byte _08146D28 - .align 2, 0 -_08146D28: - .4byte _08146D6C - .4byte _08146D44 - .4byte _08146D44 - .4byte _08146D6C - .4byte _08146D4E - .4byte _08146D5E - .4byte _08146D6C -_08146D44: - adds r0, r4, 0 - bl sub_8146D74 - strh r0, [r6] - b _08146D6C -_08146D4E: - adds r0, r4, 0 - bl sub_8146D74 - strh r0, [r6] - adds r0, r4, 0 - bl sub_8146DA0 - b _08146D6C -_08146D5E: - adds r0, r4, 0 - bl sub_8146D74 - strh r0, [r6] - adds r0, r4, 0 - bl sub_8146D94 -_08146D6C: - adds r0, r5, 0 -_08146D6E: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8146CE8 - - thumb_func_start sub_8146D74 -sub_8146D74: @ 8146D74 - push {r4,lr} - ldrb r2, [r0] - movs r1, 0x4 - negs r1, r1 - ands r1, r2 - strb r1, [r0] - ldrb r4, [r0, 0x1] - adds r4, 0x84 - movs r1, 0 - strb r1, [r0, 0x1] - bl sub_8146DD8 - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8146D74 - - thumb_func_start sub_8146D94 -sub_8146D94: @ 8146D94 - ldrb r2, [r0] - movs r1, 0x1D - negs r1, r1 - ands r1, r2 - strb r1, [r0] - bx lr - thumb_func_end sub_8146D94 - - thumb_func_start sub_8146DA0 -sub_8146DA0: @ 8146DA0 - push {r4,lr} - adds r3, r0, 0 - ldr r0, [r3] - lsls r0, 27 - lsrs r0, 29 - adds r0, 0x1 - movs r1, 0x7 - ands r0, r1 - lsls r0, 2 - ldrb r1, [r3] - movs r4, 0x1D - negs r4, r4 - adds r2, r4, 0 - ands r2, r1 - orrs r2, r0 - strb r2, [r3] - ldr r0, [r3] - lsls r0, 27 - lsrs r0, 29 - cmp r0, 0x4 - bls _08146DD2 - ands r2, r4 - movs r0, 0x10 - orrs r2, r0 - strb r2, [r3] -_08146DD2: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8146DA0 - - thumb_func_start sub_8146DD8 -sub_8146DD8: @ 8146DD8 - push {r4,lr} - adds r3, r0, 0 - ldr r0, [r3] - lsls r0, 24 - lsrs r0, 29 - adds r0, 0x1 - lsls r0, 5 - ldrb r1, [r3] - movs r4, 0x1F - adds r2, r4, 0 - ands r2, r1 - orrs r2, r0 - strb r2, [r3] - ldr r0, [r3] - lsls r0, 24 - lsrs r0, 29 - cmp r0, 0x5 - bls _08146E04 - ands r2, r4 - movs r0, 0xA0 - orrs r2, r0 - strb r2, [r3] -_08146E04: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8146DD8 - - thumb_func_start sub_8146E0C -sub_8146E0C: @ 8146E0C - push {lr} - adds r2, r0, 0 - ldrb r1, [r2] - movs r0, 0xE0 - ands r0, r1 - cmp r0, 0xA0 - bne _08146E1E - movs r0, 0x6 - b _08146E66 -_08146E1E: - ldr r1, [r2] - lsls r0, r1, 30 - lsrs r0, 30 - cmp r0, 0x1 - beq _08146E40 - cmp r0, 0x1 - bgt _08146E32 - cmp r0, 0 - beq _08146E3C - b _08146E58 -_08146E32: - cmp r0, 0x2 - beq _08146E44 - cmp r0, 0x3 - beq _08146E48 - b _08146E58 -_08146E3C: - movs r0, 0x3 - b _08146E66 -_08146E40: - movs r0, 0x1 - b _08146E66 -_08146E44: - movs r0, 0x2 - b _08146E66 -_08146E48: - lsls r0, r1, 27 - lsrs r0, 29 - cmp r0, 0x2 - bhi _08146E54 - movs r0, 0x4 - b _08146E66 -_08146E54: - movs r0, 0x5 - b _08146E66 -_08146E58: - ldr r0, _08146E6C @ =gUnknown_8468C5C "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/menews_jisan.c" - ldr r1, _08146E70 @ =0x0000017f - ldr r2, _08146E74 @ =gUnknown_8468C94 "0" - movs r3, 0x1 - bl AGBAssert - movs r0, 0 -_08146E66: - pop {r1} - bx r1 - .align 2, 0 -_08146E6C: .4byte gUnknown_8468C5C -_08146E70: .4byte 0x0000017f -_08146E74: .4byte gUnknown_8468C94 - thumb_func_end sub_8146E0C - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/pokemon_3.s b/asm/pokemon_3.s index 9d7d4dff0..6df2e64ad 100644 --- a/asm/pokemon_3.s +++ b/asm/pokemon_3.s @@ -5,1003 +5,6 @@ .text - thumb_func_start PokemonUseItemEffects2 -PokemonUseItemEffects2: @ 8042414 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - mov r8, r0 - lsls r1, 16 - lsrs r1, 16 - str r1, [sp] - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0x4] - lsls r3, 24 - lsrs r3, 24 - str r3, [sp, 0x8] - movs r0, 0x1 - str r0, [sp, 0x10] - movs r1, 0x6 - mov r10, r1 - movs r2, 0 - str r2, [sp, 0x18] - movs r0, 0x4 - str r0, [sp, 0x1C] - mov r0, r8 - movs r1, 0xC - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xAF - beq _08042458 - bl ItemId_GetHoldEffect -_08042458: - ldr r1, _080424B0 @ =gPotentialItemEffectBattler - ldr r0, _080424B4 @ =gBattlerInMenuId - ldrb r2, [r0] - strb r2, [r1] - ldr r0, _080424B8 @ =gMain - ldr r1, _080424BC @ =0x00000439 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _080424F8 - ldr r0, _080424C0 @ =gActiveBattler - strb r2, [r0] - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - negs r1, r0 - orrs r1, r0 - lsrs r1, 31 - str r1, [sp, 0xC] - ldr r0, _080424C4 @ =gBattlersCount - ldr r4, [sp] - subs r4, 0xD - ldrb r0, [r0] - cmp r1, r0 - bge _08042504 - ldr r2, _080424C8 @ =gBattlerPartyIndexes - lsls r0, r1, 1 - adds r0, r2 - ldrh r3, [r0] - ldr r1, [sp, 0x4] - lsls r0, r1, 16 - lsrs r1, r0, 16 - adds r5, r0, 0 - cmp r3, r1 - bne _080424CC - ldr r2, [sp, 0xC] - str r2, [sp, 0x1C] - b _08042504 - .align 2, 0 -_080424B0: .4byte gPotentialItemEffectBattler -_080424B4: .4byte gBattlerInMenuId -_080424B8: .4byte gMain -_080424BC: .4byte 0x00000439 -_080424C0: .4byte gActiveBattler -_080424C4: .4byte gBattlersCount -_080424C8: .4byte gBattlerPartyIndexes -_080424CC: - ldr r0, [sp, 0xC] - adds r0, 0x2 - str r0, [sp, 0xC] - ldr r0, _080424F4 @ =gBattlersCount - ldr r1, [sp, 0xC] - ldrb r0, [r0] - cmp r1, r0 - bge _08042504 - lsls r0, r1, 1 - adds r0, r2 - ldrh r1, [r0] - lsrs r0, r5, 16 - cmp r1, r0 - bne _080424CC - ldr r2, [sp, 0xC] - lsls r0, r2, 24 - lsrs r0, 24 - str r0, [sp, 0x1C] - b _08042504 - .align 2, 0 -_080424F4: .4byte gBattlersCount -_080424F8: - ldr r0, _08042520 @ =gActiveBattler - strb r1, [r0] - movs r0, 0x4 - str r0, [sp, 0x1C] - ldr r4, [sp] - subs r4, 0xD -_08042504: - lsls r0, r4, 16 - lsrs r0, 16 - cmp r0, 0xA5 - bhi _08042578 - ldr r1, _08042524 @ =gItemEffectTable - lsls r0, r4, 2 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - bne _08042528 - ldr r1, [sp] - cmp r1, 0xAF - beq _0804252E - b _08042578 - .align 2, 0 -_08042520: .4byte gActiveBattler -_08042524: .4byte gItemEffectTable -_08042528: - ldr r2, [sp] - cmp r2, 0xAF - bne _0804257C -_0804252E: - ldr r0, _08042550 @ =gMain - ldr r1, _08042554 @ =0x00000439 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08042560 - ldr r0, _08042558 @ =gActiveBattler - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - ldr r1, _0804255C @ =gEnigmaBerries+0x8 - adds r0, r1 - b _0804257C - .align 2, 0 -_08042550: .4byte gMain -_08042554: .4byte 0x00000439 -_08042558: .4byte gActiveBattler -_0804255C: .4byte gEnigmaBerries+0x8 -_08042560: - ldr r0, _0804256C @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r2, _08042570 @ =0x00003108 - adds r2, r0, r2 - str r2, [sp, 0x14] - b _0804257E - .align 2, 0 -_0804256C: .4byte gSaveBlock1Ptr -_08042570: .4byte 0x00003108 -_08042574: - movs r0, 0 - b _08042BD8 -_08042578: - movs r0, 0x1 - b _08042BD8 -_0804257C: - str r0, [sp, 0x14] -_0804257E: - movs r0, 0 - str r0, [sp, 0xC] -_08042582: - ldr r1, [sp, 0xC] - cmp r1, 0x5 - bls _0804258A - b _08042BCA -_0804258A: - lsls r0, r1, 2 - ldr r1, _08042594 @ =_08042598 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08042594: .4byte _08042598 - .align 2, 0 -_08042598: - .4byte _080425B0 - .4byte _0804264C - .4byte _080426A8 - .4byte _08042708 - .4byte _08042850 - .4byte _08042A6A -_080425B0: - ldr r0, [sp, 0x14] - ldr r1, [sp, 0xC] - adds r2, r0, r1 - ldrb r1, [r2] - movs r0, 0x80 - ands r0, r1 - adds r5, r2, 0 - cmp r0, 0 - beq _080425F4 - ldr r0, _0804263C @ =gMain - ldr r2, _08042640 @ =0x00000439 - adds r0, r2 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080425F4 - ldr r0, [sp, 0x1C] - cmp r0, 0x4 - beq _080425F4 - ldr r1, _08042644 @ =gBattleMons - movs r0, 0x58 - ldr r2, [sp, 0x1C] - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xF0 - lsls r1, 12 - ands r0, r1 - cmp r0, 0 - beq _080425F4 - movs r0, 0 - str r0, [sp, 0x10] -_080425F4: - ldrb r1, [r5] - movs r0, 0x30 - ands r0, r1 - cmp r0, 0 - beq _0804261C - ldr r1, _08042644 @ =gBattleMons - ldr r0, _08042648 @ =gActiveBattler - ldrb r2, [r0] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 13 - ands r0, r1 - cmp r0, 0 - bne _0804261C - movs r1, 0 - str r1, [sp, 0x10] -_0804261C: - ldrb r1, [r5] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - bne _08042628 - b _08042BCA -_08042628: - ldr r2, _08042644 @ =gBattleMons - ldr r0, _08042648 @ =gActiveBattler - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrb r0, [r0, 0x19] - lsls r0, 24 - asrs r0, 24 - b _080426F2 - .align 2, 0 -_0804263C: .4byte gMain -_08042640: .4byte 0x00000439 -_08042644: .4byte gBattleMons -_08042648: .4byte gActiveBattler -_0804264C: - ldr r0, [sp, 0x14] - ldr r1, [sp, 0xC] - adds r2, r0, r1 - ldrb r1, [r2] - movs r0, 0xF0 - ands r0, r1 - adds r5, r2, 0 - cmp r0, 0 - beq _08042678 - ldr r2, _080426A0 @ =gBattleMons - ldr r0, _080426A4 @ =gActiveBattler - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrb r0, [r0, 0x1A] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0xB - bgt _08042678 - movs r2, 0 - str r2, [sp, 0x10] -_08042678: - ldrb r1, [r5] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - bne _08042684 - b _08042BCA -_08042684: - ldr r2, _080426A0 @ =gBattleMons - ldr r0, _080426A4 @ =gActiveBattler - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrb r0, [r0, 0x1B] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0xB - ble _0804269C - b _08042BCA -_0804269C: - b _08042832 - .align 2, 0 -_080426A0: .4byte gBattleMons -_080426A4: .4byte gActiveBattler -_080426A8: - ldr r1, [sp, 0x14] - ldr r0, [sp, 0xC] - adds r2, r1, r0 - ldrb r1, [r2] - movs r0, 0xF0 - ands r0, r1 - adds r5, r2, 0 - cmp r0, 0 - beq _080426D4 - ldr r2, _08042700 @ =gBattleMons - ldr r0, _08042704 @ =gActiveBattler - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrb r0, [r0, 0x1E] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0xB - bgt _080426D4 - movs r1, 0 - str r1, [sp, 0x10] -_080426D4: - ldrb r1, [r5] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - bne _080426E0 - b _08042BCA -_080426E0: - ldr r2, _08042700 @ =gBattleMons - ldr r0, _08042704 @ =gActiveBattler - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - ldrb r0, [r0, 0x1C] - lsls r0, 24 - asrs r0, 24 -_080426F2: - cmp r0, 0xB - ble _080426F8 - b _08042BCA -_080426F8: - movs r2, 0 - str r2, [sp, 0x10] - b _08042BCA - .align 2, 0 -_08042700: .4byte gBattleMons -_08042704: .4byte gActiveBattler -_08042708: - ldr r0, [sp, 0x14] - ldr r1, [sp, 0xC] - adds r2, r0, r1 - ldrb r1, [r2] - movs r0, 0x80 - ands r0, r1 - adds r5, r2, 0 - cmp r0, 0 - beq _0804273A - ldr r4, _08042838 @ =gSideTimers - ldr r0, _0804283C @ =gActiveBattler - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r0, [r1, 0x4] - cmp r0, 0 - bne _0804273A - movs r2, 0 - str r2, [sp, 0x10] -_0804273A: - ldrb r1, [r5] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08042756 - mov r0, r8 - movs r1, 0x38 - movs r2, 0 - bl GetMonData - cmp r0, 0x64 - beq _08042756 - movs r0, 0 - str r0, [sp, 0x10] -_08042756: - ldrb r1, [r5] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _08042776 - mov r0, r8 - ldr r1, [sp, 0x4] - movs r2, 0x7 - ldr r3, [sp, 0x1C] - bl sub_8042BE8 - lsls r0, 24 - cmp r0, 0 - beq _08042776 - movs r1, 0 - str r1, [sp, 0x10] -_08042776: - ldrb r1, [r5] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08042796 - ldr r2, _08042840 @ =0x00000f88 - mov r0, r8 - ldr r1, [sp, 0x4] - ldr r3, [sp, 0x1C] - bl sub_8042BE8 - lsls r0, 24 - cmp r0, 0 - beq _08042796 - movs r2, 0 - str r2, [sp, 0x10] -_08042796: - ldrb r1, [r5] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _080427B6 - mov r0, r8 - ldr r1, [sp, 0x4] - movs r2, 0x10 - ldr r3, [sp, 0x1C] - bl sub_8042BE8 - lsls r0, 24 - cmp r0, 0 - beq _080427B6 - movs r0, 0 - str r0, [sp, 0x10] -_080427B6: - ldrb r1, [r5] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080427D6 - mov r0, r8 - ldr r1, [sp, 0x4] - movs r2, 0x20 - ldr r3, [sp, 0x1C] - bl sub_8042BE8 - lsls r0, 24 - cmp r0, 0 - beq _080427D6 - movs r1, 0 - str r1, [sp, 0x10] -_080427D6: - ldrb r1, [r5] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080427F6 - mov r0, r8 - ldr r1, [sp, 0x4] - movs r2, 0x40 - ldr r3, [sp, 0x1C] - bl sub_8042BE8 - lsls r0, 24 - cmp r0, 0 - beq _080427F6 - movs r2, 0 - str r2, [sp, 0x10] -_080427F6: - ldrb r1, [r5] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08042802 - b _08042BCA -_08042802: - ldr r0, _08042844 @ =gMain - ldr r1, _08042848 @ =0x00000439 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08042814 - b _08042BCA -_08042814: - ldr r2, [sp, 0x1C] - cmp r2, 0x4 - bne _0804281C - b _08042BCA -_0804281C: - ldr r1, _0804284C @ =gBattleMons - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x7 - ands r0, r1 - cmp r0, 0 - bne _08042832 - b _08042BCA -_08042832: - movs r0, 0 - str r0, [sp, 0x10] - b _08042BCA - .align 2, 0 -_08042838: .4byte gSideTimers -_0804283C: .4byte gActiveBattler -_08042840: .4byte 0x00000f88 -_08042844: .4byte gMain -_08042848: .4byte 0x00000439 -_0804284C: .4byte gBattleMons -_08042850: - ldr r1, [sp, 0x14] - ldr r2, [sp, 0xC] - adds r0, r1, r2 - ldrb r7, [r0] - movs r0, 0x20 - ands r0, r7 - cmp r0, 0 - beq _080428B6 - movs r0, 0xDF - ands r7, r0 - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - ldr r0, _080428DC @ =gUnknown_825DEA1 - ldr r1, [sp, 0x8] - adds r0, r1, r0 - ldrb r0, [r0] - ands r5, r0 - lsls r0, r1, 1 - lsrs r5, r0 - adds r1, 0xD - mov r0, r8 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - ldr r2, [sp, 0x8] - bl CalculatePPWithBonus - lsls r0, 24 - lsrs r0, 24 - cmp r5, 0x2 - bhi _080428B6 - cmp r0, 0x4 - bls _080428B6 - movs r2, 0 - str r2, [sp, 0x10] -_080428B6: - movs r0, 0 - mov r9, r0 - cmp r7, 0 - bne _080428C0 - b _08042BCA -_080428C0: - movs r0, 0x1 - ands r0, r7 - cmp r0, 0 - bne _080428CA - b _08042A5C -_080428CA: - mov r1, r9 - cmp r1, 0x7 - bls _080428D2 - b _08042A5C -_080428D2: - lsls r0, r1, 2 - ldr r1, _080428E0 @ =_080428E4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080428DC: .4byte gUnknown_825DEA1 -_080428E0: .4byte _080428E4 - .align 2, 0 -_080428E4: - .4byte _08042904 - .4byte _08042904 - .4byte _08042934 - .4byte _08042996 - .4byte _08042A5C - .4byte _08042A5C - .4byte _08042A5C - .4byte _08042A4A -_08042904: - mov r0, r8 - bl GetMonEVCount - lsls r0, 16 - ldr r1, _0804292C @ =0x01fd0000 - cmp r0, r1 - bls _08042914 - b _08042578 -_08042914: - ldr r0, _08042930 @ =sGetMonDataEVConstants - add r0, r9 - ldrb r1, [r0] - mov r0, r8 - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - cmp r5, 0x63 - bls _0804292A - b _08042A5C -_0804292A: - b _08042A3A - .align 2, 0 -_0804292C: .4byte 0x01fd0000 -_08042930: .4byte sGetMonDataEVConstants -_08042934: - movs r0, 0x10 - ands r0, r7 - cmp r0, 0 - beq _08042952 - mov r0, r8 - movs r1, 0x39 - movs r2, 0 - bl GetMonData - cmp r0, 0 - beq _08042968 - mov r0, r10 - adds r0, 0x1 - lsls r0, 24 - b _080429F4 -_08042952: - mov r0, r8 - movs r1, 0x39 - movs r2, 0 - bl GetMonData - cmp r0, 0 - bne _08042968 - mov r0, r10 - adds r0, 0x1 - lsls r0, 24 - b _080429F4 -_08042968: - mov r0, r8 - movs r1, 0x3A - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - mov r0, r8 - movs r1, 0x39 - movs r2, 0 - bl GetMonData - cmp r4, r0 - beq _08042986 - movs r0, 0 - str r0, [sp, 0x10] -_08042986: - mov r0, r10 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - movs r0, 0xEF - ands r7, r0 - b _08042A5C -_08042996: - movs r0, 0x2 - ands r0, r7 - cmp r0, 0 - bne _080429FA - movs r6, 0 - movs r1, 0x1 - add r10, r1 -_080429A4: - adds r1, r6, 0 - adds r1, 0x11 - mov r0, r8 - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - adds r1, r6, 0 - adds r1, 0xD - mov r0, r8 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r2, r6, 24 - lsrs r2, 24 - adds r0, r4, 0 - bl CalculatePPWithBonus - lsls r0, 24 - lsrs r0, 24 - cmp r5, r0 - beq _080429EA - movs r2, 0 - str r2, [sp, 0x10] -_080429EA: - adds r6, 0x1 - cmp r6, 0x3 - ble _080429A4 - mov r1, r10 - lsls r0, r1, 24 -_080429F4: - lsrs r0, 24 - mov r10, r0 - b _08042A5C -_080429FA: - ldr r1, [sp, 0x8] - adds r1, 0x11 - mov r0, r8 - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - ldr r1, [sp, 0x8] - adds r1, 0xD - mov r0, r8 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - ldr r2, [sp, 0x8] - bl CalculatePPWithBonus - lsls r0, 24 - lsrs r0, 24 - cmp r5, r0 - beq _08042A5C -_08042A3A: - mov r0, r10 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - movs r2, 0 - str r2, [sp, 0x10] - b _08042A5C -_08042A4A: - mov r0, r8 - movs r1, 0x2 - ldr r2, [sp] - bl GetEvolutionTargetSpecies - lsls r0, 16 - cmp r0, 0 - beq _08042A5C - b _08042574 -_08042A5C: - movs r0, 0x1 - add r9, r0 - lsrs r7, 1 - cmp r7, 0 - beq _08042A68 - b _080428C0 -_08042A68: - b _08042BCA -_08042A6A: - ldr r1, [sp, 0x14] - ldr r2, [sp, 0xC] - adds r0, r1, r2 - ldrb r7, [r0] - movs r0, 0 - mov r9, r0 - cmp r7, 0 - bne _08042A7C - b _08042BCA -_08042A7C: - movs r0, 0x1 - ands r0, r7 - cmp r0, 0 - bne _08042A86 - b _08042BBE -_08042A86: - mov r1, r9 - cmp r1, 0x7 - bls _08042A8E - b _08042BBE -_08042A8E: - lsls r0, r1, 2 - ldr r1, _08042A98 @ =_08042A9C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08042A98: .4byte _08042A9C - .align 2, 0 -_08042A9C: - .4byte _08042ABC - .4byte _08042ABC - .4byte _08042ABC - .4byte _08042ABC - .4byte _08042AF4 - .4byte _08042B4C - .4byte _08042B68 - .4byte _08042B92 -_08042ABC: - mov r0, r8 - bl GetMonEVCount - lsls r0, 16 - ldr r1, _08042AEC @ =0x01fd0000 - cmp r0, r1 - bls _08042ACC - b _08042578 -_08042ACC: - ldr r0, _08042AF0 @ =sGetMonDataEVConstants - mov r1, r9 - adds r1, 0x2 - adds r1, r0 - ldrb r1, [r1] - mov r0, r8 - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - cmp r5, 0x63 - bhi _08042BBE - movs r2, 0 - str r2, [sp, 0x10] - b _08042BB4 - .align 2, 0 -_08042AEC: .4byte 0x01fd0000 -_08042AF0: .4byte sGetMonDataEVConstants -_08042AF4: - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - ldr r0, _08042B48 @ =gUnknown_825DEA1 - ldr r1, [sp, 0x8] - adds r0, r1, r0 - ldrb r0, [r0] - ands r5, r0 - lsls r0, r1, 1 - lsrs r5, r0 - adds r1, 0xD - mov r0, r8 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - ldr r2, [sp, 0x8] - bl CalculatePPWithBonus - lsls r0, 24 - lsrs r6, r0, 24 - cmp r5, 0x2 - bhi _08042BBE - cmp r6, 0x4 - ble _08042BBE - movs r2, 0 - str r2, [sp, 0x10] - b _08042BBE - .align 2, 0 -_08042B48: .4byte gUnknown_825DEA1 -_08042B4C: - mov r0, r8 - movs r1, 0x20 - movs r2, 0 - bl GetMonData - cmp r0, 0x63 - bhi _08042BB4 - ldr r0, [sp, 0x10] - cmp r0, 0 - bne _08042BB4 - ldr r1, [sp, 0x18] - cmp r1, 0 - bne _08042BB4 - b _08042BAC -_08042B68: - mov r0, r8 - movs r1, 0x20 - movs r2, 0 - bl GetMonData - cmp r0, 0x63 - bls _08042BB4 - mov r0, r8 - movs r1, 0x20 - movs r2, 0 - bl GetMonData - cmp r0, 0xC7 - bhi _08042BB4 - ldr r2, [sp, 0x10] - cmp r2, 0 - bne _08042BB4 - ldr r0, [sp, 0x18] - cmp r0, 0 - bne _08042BB4 - b _08042BAC -_08042B92: - mov r0, r8 - movs r1, 0x20 - movs r2, 0 - bl GetMonData - cmp r0, 0xC7 - bls _08042BB4 - ldr r1, [sp, 0x10] - cmp r1, 0 - bne _08042BB4 - ldr r2, [sp, 0x18] - cmp r2, 0 - bne _08042BB4 -_08042BAC: - ldr r0, [sp, 0x14] - add r0, r10 - ldrb r0, [r0] - str r0, [sp, 0x18] -_08042BB4: - mov r0, r10 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 -_08042BBE: - movs r0, 0x1 - add r9, r0 - lsrs r7, 1 - cmp r7, 0 - beq _08042BCA - b _08042A7C -_08042BCA: - ldr r1, [sp, 0xC] - adds r1, 0x1 - str r1, [sp, 0xC] - cmp r1, 0x5 - bgt _08042BD6 - b _08042582 -_08042BD6: - ldr r0, [sp, 0x10] -_08042BD8: - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end PokemonUseItemEffects2 - thumb_func_start sub_8042BE8 sub_8042BE8: @ 8042BE8 push {r4,lr} diff --git a/data/data_84827AC.s b/data/data_84827AC.s index 0176941f6..671dc3ab4 100644 --- a/data/data_84827AC.s +++ b/data/data_84827AC.s @@ -5014,13 +5014,7 @@ gUnknown_8468B6C:: @ 8468B6C gUnknown_8468BCC:: @ 8468BCC .incbin "baserom.gba", 0x468BCC, 0x90 - .align 2 -gUnknown_8468C5C:: @ 8468C5C - .asciz "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/menews_jisan.c" - - .align 2 -gUnknown_8468C94:: @ 8468C94 - .asciz "0" + .section .rodata.8468C98 .align 2 gUnknown_8468C98:: @ 8468C98 diff --git a/include/event_data.h b/include/event_data.h index f829d3b87..f28ed4f75 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -29,6 +29,8 @@ u8 *GetFlagPointer(u16 id); u8 FlagSet(u16 id); u8 FlagClear(u16 id); bool8 FlagGet(u16 id); +u16 * sub_806E454(u16 id); +bool32 sub_806E2BC(void); extern u16 gSpecialVar_0x8000; extern u16 gSpecialVar_0x8001; @@ -49,4 +51,6 @@ extern u16 gSpecialVar_MonBoxId; extern u16 gSpecialVar_MonBoxPos; extern u16 gSpecialVar_0x8014; +extern u16 gUnknown_20370D0; + #endif // GUARD_EVENT_DATA_H diff --git a/include/gba/defines.h b/include/gba/defines.h index fe81770e3..a0ef506dd 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -69,5 +69,6 @@ #define WIN_RANGE(a, b) (((a) << 8) | (b)) #define NAKED __attribute__((naked)) +#define UNUSED __attribute__((unused)) #endif // GUARD_GBA_DEFINES diff --git a/include/global.h b/include/global.h index 7de1232ad..fac7e1354 100644 --- a/include/global.h +++ b/include/global.h @@ -473,6 +473,14 @@ struct RecordMixingDayCareMail bool16 holdsItem[DAYCARE_MON_COUNT]; }; +struct MysteryEventStruct +{ + u8 unk_0_0:2; + u8 unk_0_2:3; + u8 unk_0_5:3; + u8 unk_1; +}; + #define MAP_OBJECTS_COUNT 16 #define BERRY_TREES_COUNT 128 #define FLAGS_COUNT 300 @@ -483,9 +491,21 @@ struct SaveBlock1 { /*0x0000*/ u8 filler[0x4]; /*0x0004*/ struct WarpData location; - /*0x000C*/ u8 fillerC[0x30DE]; - /*0x30EA*/ struct EnigmaBerry enigmaBerry; - /*0x3120*/ u8 filler3120[0x4FC]; + /*0x0C*/ struct WarpData warp1; + /*0x14*/ struct WarpData warp2; + /*0x1C*/ struct WarpData lastHealLocation; + /*0x24*/ struct WarpData warp4; + /*0x002C*/ u8 filler2C[0x60C]; + /*0x638*/ u8 trainerRematchStepCounter; + u8 filler_639; + /*0x63a*/ u8 trainerRematches[100]; + /*0x06A0*/ struct MapObject mapObjects[MAP_OBJECTS_COUNT]; + /*0x08E0*/ struct MapObjectTemplate mapObjectTemplates[64]; + /*0x0EE0*/ u8 fillerEE0[0x220A]; + /*0x30EA*/ struct EnigmaBerry enigmaBerry; + /*0x3120*/ u8 filler3120[0x340]; + /*0x3460*/ struct MysteryEventStruct unk_3460; + /*0x3464*/ u8 filler_3464[0x1b8]; /*0x361C*/ struct RamScript ramScript; /*0x3A08*/ u8 filler3A08[0x44]; /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH]; diff --git a/include/menews_jisan.h b/include/menews_jisan.h new file mode 100644 index 000000000..8dc1d0a99 --- /dev/null +++ b/include/menews_jisan.h @@ -0,0 +1,8 @@ +#ifndef GUARD_MENEWS_JISAN_H +#define GUARD_MENEWS_JISAN_H + +void sub_8146C30(u32 a0); +void sub_8146C88(void); +void sub_8146CA4(void); + +#endif //GUARD_MENEWS_JISAN_H diff --git a/include/mevent.h b/include/mevent.h new file mode 100644 index 000000000..a611a98a8 --- /dev/null +++ b/include/mevent.h @@ -0,0 +1,7 @@ +#ifndef GUARD_MEVENT_H +#define GUARD_MEVENT_H + +struct MysteryEventStruct * sub_8143D94(void); +bool32 sub_8143E1C(void); + +#endif //GUARD_MEVENT_H diff --git a/ld_script.txt b/ld_script.txt index 578a3f147..f5a685e07 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -246,7 +246,7 @@ SECTIONS { asm/mevent.o(.text); asm/mevent_server.o(.text); asm/mevent_8145654.o(.text); - asm/menews_jisan.o(.text); + src/menews_jisan.o(.text); asm/seagallop.o(.text); asm/unk_8147500.o(.text); asm/unk_8147AA8.o(.text); @@ -366,6 +366,8 @@ SECTIONS { data/data.o(.rodata); src/battle_ai_script_commands.o(.rodata); data/data_84827AC.o(.rodata); + src/menews_jisan.o(.rodata); + data/data_84827AC.o(.rodata.8468C98); src/m4a_tables.o(.rodata); data/sound_data.o(.rodata); } =0 diff --git a/src/menews_jisan.c b/src/menews_jisan.c new file mode 100644 index 000000000..7dfcee939 --- /dev/null +++ b/src/menews_jisan.c @@ -0,0 +1,199 @@ +#include "global.h" +#include "mevent.h" +#include "random.h" +#include "event_data.h" +#include "menews_jisan.h" + +static u32 sub_8146D74(struct MysteryEventStruct *); +static void sub_8146DD8(struct MysteryEventStruct *); +static u32 sub_8146E0C(struct MysteryEventStruct *); +static void sub_8146DA0(struct MysteryEventStruct *); +static void sub_8146D94(struct MysteryEventStruct *); + +#ifdef NONMATCHING +void sub_8146C30(u32 a0) +{ + struct MysteryEventStruct *r5 = sub_8143D94(); + + r5->unk_0_0 = a0; + asm_comment("The switch logic does not match. Specifically, the \"bhi\" is replaced with a \"bls\" and the comparisons with 1 and 3 are swapped chronologically."); + switch (a0) + { + case 0: + r5->unk_1 = (Random() % 15) + 16; + break; + case 1: + break; + case 2: + break; + case 3: + r5->unk_1 = (Random() % 15) + 1; + break; + } +} +#else +NAKED +void sub_8146C30(u32 a0) +{ + asm_unified("\tpush {r4,r5,lr}\n" + "\tadds r4, r0, 0\n" + "\tbl sub_8143D94\n" + "\tadds r5, r0, 0\n" + "\tmovs r0, 0x3\n" + "\tadds r1, r4, 0\n" + "\tands r1, r0\n" + "\tldrb r2, [r5]\n" + "\tmovs r0, 0x4\n" + "\tnegs r0, r0\n" + "\tands r0, r2\n" + "\torrs r0, r1\n" + "\tstrb r0, [r5]\n" + "\tcmp r4, 0x2\n" + "\tbhi _08146C56\n" + "\tcmp r4, 0x1\n" + "\tbcs _08146C5C\n" + "\tb _08146C80\n" + "_08146C56:\n" + "\tcmp r4, 0x3\n" + "\tbeq _08146C6E\n" + "\tb _08146C80\n" + "_08146C5C:\n" + "\tbl Random\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmovs r1, 0xF\n" + "\tbl __umodsi3\n" + "\tadds r0, 0x10\n" + "\tb _08146C7E\n" + "_08146C6E:\n" + "\tbl Random\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmovs r1, 0xF\n" + "\tbl __umodsi3\n" + "\tadds r0, 0x1\n" + "_08146C7E:\n" + "\tstrb r0, [r5, 0x1]\n" + "_08146C80:\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0"); +} +#endif + +void sub_8146C88(void) +{ + struct MysteryEventStruct *r5 = sub_8143D94(); + + r5->unk_0_0 = 0; + r5->unk_0_2 = 0; + r5->unk_0_5 = 0; + r5->unk_1 = 0; + VarSet(0x4028, 0); +} + +void sub_8146CA4(void) +{ + u16 *r4 = sub_806E454(0x4028); + struct MysteryEventStruct *r2 = sub_8143D94(); + struct MysteryEventStruct r0 = *r2; + + if ((u8)r0.unk_0_5 > 4 && ++(*r4) > 0x1f3) + { + r2->unk_0_5 = 0; + *r4 = 0; + } +} + +u16 sub_8146CE8(void) +{ + u16 *r6 = &gUnknown_20370D0; + struct MysteryEventStruct *r4 = sub_8143D94(); + u16 r5; + + if (!sub_806E2BC() || !sub_8143E1C()) + return 0; + + r5 = sub_8146E0C(r4); + + switch (r5) + { + case 0: + break; + case 1: + *r6 = sub_8146D74(r4); + break; + case 2: + *r6 = sub_8146D74(r4); + break; + case 3: + break; + case 4: + *r6 = sub_8146D74(r4); + sub_8146DA0(r4); + break; + case 5: + *r6 = sub_8146D74(r4); + sub_8146D94(r4); + break; + case 6: + break; + } + + return r5; +} + +static u32 sub_8146D74(struct MysteryEventStruct *a0) +{ + u32 r4; + + a0->unk_0_0 = 0; + r4 = a0->unk_1 + 0x84; + a0->unk_1 = 0; + sub_8146DD8(a0); + return r4; +} + +static void sub_8146D94(struct MysteryEventStruct *a0) +{ + a0->unk_0_2 = 0; +} + +static void sub_8146DA0(struct MysteryEventStruct *a0) +{ + a0->unk_0_2++; + if ((u8)a0->unk_0_2 > 4) + a0->unk_0_2 = 4; +} + +static void sub_8146DD8(struct MysteryEventStruct *a0) +{ + a0->unk_0_5++; + if ((u8)a0->unk_0_5 > 5) + a0->unk_0_5 = 5; +} + +static u32 sub_8146E0C(struct MysteryEventStruct *a0) +{ + struct MysteryEventStruct r0; + if ((u8)a0->unk_0_5 == 5) + return 6; + + r0 = *a0; + switch (r0.unk_0_0) + { + case 0: + return 3; + case 1: + return 1; + case 2: + return 2; + case 3: + if ((u8)r0.unk_0_2 < 3) + return 4; + return 5; + default: + AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/menews_jisan.c", 383); + return 0; + } +} diff --git a/src/pokemon.c b/src/pokemon.c index af599fec5..1467d8b6f 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2832,544 +2832,1539 @@ bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, u8 bat extern bool8 sub_8042BE8(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId); -static inline u32 get_in_battle(void) -{ - return (u8)gMain.inBattle; -} - -//bool8 PokemonUseItemEffects2(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 moveIndex, u8 e) -//{ -// u32 data; -// s32 friendship; -// s32 cmdIndex; -// bool8 retVal = TRUE; -// const u8 *itemEffect; -// u8 sp24 = 6; -// u32 sp28; -// s8 sp2C = 0; -// u8 sp34 = 4; -// u16 heldItem; -// u8 r10; -// s32 r4; -// u8 field; -// u8 holdEffect; -// -// heldItem = GetMonData(pkmn, MON_DATA_HELD_ITEM, NULL); -// if (heldItem == ITEM_ENIGMA_BERRY) -// { -// /* -// if (gMain.inBattle) -// holdEffect = gEnigmaBerries[gBattlerInMenuId].holdEffect; -// else -// holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; -// */ -// } -// else -// { -// ItemId_GetHoldEffect(heldItem); -// } -// -// gPotentialItemEffectBattler = gBattlerInMenuId; -// // grr. the original asm also u8 masks after loading the bitmask, despite -// // the fact that is a useless operation. what's going on here? -// if (gMain.inBattle) -// { -// gActiveBattler = gBattlerInMenuId; -// cmdIndex = (GetBattlerSide(gActiveBattler) != 0); -// while (cmdIndex < gBattlersCount) -// { -// if (gBattlerPartyIndexes[cmdIndex] == partyIndex) -// { -// sp34 = cmdIndex; -// break; -// } -// cmdIndex += 2; -// } -// } -// else -// { -// sp34 = 4, gActiveBattler = 0; -// } -// -// // _08042504 -// if (!IS_POKEMON_ITEM(item)) -// return TRUE; -// if (gItemEffectTable[item - 13] == NULL && item != ITEM_ENIGMA_BERRY) -// return TRUE; -// -// if (item == ITEM_ENIGMA_BERRY) -// { -// if (gMain.inBattle) -// itemEffect = gEnigmaBerries[gActiveBattler].itemEffect; -// else -// itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect; -// } -// else -// { -// itemEffect = gItemEffectTable[item - 13]; -// } -// -// for (cmdIndex = 0; cmdIndex < 6; cmdIndex++) -// { -// switch (cmdIndex) -// { -// // status healing effects -// case 0: -// if ((itemEffect[cmdIndex] & 0x80) -// && gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_INFATUATION)) -// { -// //gBattleMons[sp34].status2 &= ~STATUS2_INFATUATION; -// retVal = FALSE; -// } -// if ((itemEffect[cmdIndex] & 0x30) -// && !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY)) -// { -// //gBattleMons[gActiveBattler].status2 |= STATUS2_FOCUS_ENERGY; -// retVal = FALSE; -// } -// if ((itemEffect[cmdIndex] & 0xF) -// && gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] < 12) -// { -// //gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] += itemEffect[cmdIndex] & 0xF; -// //if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] > 12) -// // gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] = 12; -// retVal = FALSE; -// } -// break; -// // in-battle stat boosting effects? -// case 1: -// if ((itemEffect[cmdIndex] & 0xF0) -// && gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] < 12) -// { -// //gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] += (itemEffect[cmdIndex] & 0xF0) >> 4; -// //if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] > 12) -// // gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] = 12; -// retVal = FALSE; -// } -// if ((itemEffect[cmdIndex] & 0xF) -// && gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] < 12) -// { -// //gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] += itemEffect[cmdIndex] & 0xF; -// //if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] > 12) -// // gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] = 12; -// retVal = FALSE; -// } -// break; -// // more stat boosting effects? -// case 2: -// if ((itemEffect[cmdIndex] & 0xF0) -// && gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] < 12) -// { -// //gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] += (itemEffect[cmdIndex] & 0xF0) >> 4; -// //if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] > 12) -// // gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] = 12; -// retVal = FALSE; -// } -// if ((itemEffect[cmdIndex] & 0xF) -// && gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] < 12) -// { -// //gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] += itemEffect[cmdIndex] & 0xF; -// //if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] > 12) -// // gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] = 12; -// retVal = FALSE; -// } -// break; -// case 3: -// if ((itemEffect[cmdIndex] & 0x80) -// && gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer == 0) -// { -// //gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer = 5; -// retVal = FALSE; -// } -// if ((itemEffect[cmdIndex] & 0x40) // raise level -// && GetMonData(pkmn, MON_DATA_LEVEL, NULL) != 100) -// { -// //data = gExperienceTables[gBaseStats[GetMonData(pkmn, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(pkmn, MON_DATA_LEVEL, NULL) + 1]; -// //SetMonData(pkmn, MON_DATA_EXP, &data); -// //CalculateMonStats(pkmn); -// retVal = FALSE; -// } -// if ((itemEffect[cmdIndex] & 0x20) -// && sub_8042BE8(pkmn, partyIndex, 7, sp34) == 0) -// { -// //if (sp34 != 4) -// // gBattleMons[sp34].status2 &= ~STATUS2_NIGHTMARE; -// retVal = FALSE; -// } -// if ((itemEffect[cmdIndex] & 0x10) && sub_8042BE8(pkmn, partyIndex, 0xF88, sp34) == 0) -// retVal = FALSE; -// if ((itemEffect[cmdIndex] & 8) && sub_8042BE8(pkmn, partyIndex, 16, sp34) == 0) -// retVal = FALSE; -// if ((itemEffect[cmdIndex] & 4) && sub_8042BE8(pkmn, partyIndex, 32, sp34) == 0) -// retVal = FALSE; -// if ((itemEffect[cmdIndex] & 2) && sub_8042BE8(pkmn, partyIndex, 64, sp34) == 0) -// retVal = FALSE; -// if ((itemEffect[cmdIndex] & 1) // heal confusion -// && gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_CONFUSION)) -// { -// //gBattleMons[sp34].status2 &= ~STATUS2_CONFUSION; -// retVal = FALSE; -// } -// break; -// // EV, HP, and PP raising effects -// case 4: -// r10 = itemEffect[cmdIndex]; -// if (r10 & 0x20) -// { -// r10 &= ~0x20; -// data = (GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) & gUnknown_825DEA1[moveIndex]) >> (moveIndex * 2); -// sp28 = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex); -// if (data < 3 && sp28 > 4) -// { -// //data = GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) + gUnknown_825DEA9[moveIndex]; -// //SetMonData(pkmn, MON_DATA_PP_BONUSES, &data); -// // -// //data = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - sp28; -// //data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL) + data; -// //SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data); -// retVal = FALSE; -// } -// } -// sp28 = 0; -// while (r10 != 0) // _080428C0 -// { -// if (r10 & 1) -// { -// u16 evCount; -// u16 targetSpecies; -// s32 r5; -// -// switch (sp28) -// { -// case 0: -// case 1: -// evCount = GetMonEVCount(pkmn); -// if (evCount >= 510) -// return TRUE; -// data = GetMonData(pkmn, sGetMonDataEVConstants[sp28], NULL); -// if (data < 100) -// { -// //if (data + itemEffect[sp24] > 100) -// // r4 = 100 - (data + itemEffect[sp24]) + itemEffect[sp24]; -// //else -// // r4 = itemEffect[sp24]; -// //if (evCount + r4 > 510) -// // r4 += 510 - (evCount + r4); -// //data += r4; -// //SetMonData(pkmn, sGetMonDataEVConstants[sp28], &data); -// //CalculateMonStats(pkmn); -// sp24++; -// retVal = FALSE; -// } -// break; -// case 2: -// // revive? -// if (r10 & 0x10) -// { -// if (GetMonData(pkmn, MON_DATA_HP, NULL) != 0) -// { -// sp24++; -// break; -// } -// /* -// if (gMain.inBattle) -// { -// if (sp34 != 4) -// { -// gAbsentBattlerFlags &= ~gBitTable[sp34]; -// CopyPlayerPartyMonToBattleData(sp34, pokemon_order_func(gBattlerPartyIndexes[sp34])); -// if (GetBattlerSide(gActiveBattler) == 0 && gBattleResults.unk4 < 255) -// gBattleResults.unk4++; -// } -// else -// { -// gAbsentBattlerFlags &= ~gBitTable[gActiveBattler ^ 2]; -// if (GetBattlerSide(gActiveBattler) == 0 && gBattleResults.unk4 < 255) -// gBattleResults.unk4++; -// } -// } -// */ -// } -// else -// { -// if (GetMonData(pkmn, MON_DATA_HP, NULL) == 0) -// { -// sp24++; -// break; -// } -// } -// /* -// data = itemEffect[sp24++]; -// switch (data) -// { -// case 0xFF: -// data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL) - GetMonData(pkmn, MON_DATA_HP, NULL); -// break; -// case 0xFE: -// data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL) / 2; -// if (data == 0) -// data = 1; -// break; -// case 0xFD: -// data = gBattleScripting.field_23; -// break; -// } -// */ -// if (GetMonData(pkmn, MON_DATA_MAX_HP, NULL) != GetMonData(pkmn, MON_DATA_HP, NULL)) -// { -// /* -// if (e == 0) -// { -// data = GetMonData(pkmn, MON_DATA_HP, NULL) + data; -// if (data > GetMonData(pkmn, MON_DATA_MAX_HP, NULL)) -// data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL); -// SetMonData(pkmn, MON_DATA_HP, &data); -// if (gMain.inBattle && sp34 != 4) -// { -// gBattleMons[sp34].hp = data; -// if (!(r10 & 0x10) && GetBattlerSide(gActiveBattler) == 0) -// { -// if (gBattleResults.unk3 < 255) -// gBattleResults.unk3++; -// // I have to re-use this variable to match. -// r5 = gActiveBattler; -// gActiveBattler = sp34; -// BtlController_EmitGetMonData(0, 0, 0); -// MarkBufferBankForExecution(gActiveBattler); -// gActiveBattler = r5; -// } -// } -// } -// else -// { -// gBattleMoveDamage = -data; -// } -// */ -// retVal = FALSE; -// } -// sp24++; -// r10 &= 0xEF; -// break; -// case 3: -// if (!(r10 & 2)) -// { -// for (r5 = 0; r5 < 4; r5++) -// { -// u16 r4; -// -// data = GetMonData(pkmn, MON_DATA_PP1 + r5, NULL); -// r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL); -// if (data != CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5)) -// { -// /* -// data += itemEffect[sp24]; -// r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL); -// if (data > CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5)) -// { -// r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL); -// data = CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5); -// } -// SetMonData(pkmn, MON_DATA_PP1 + r5, &data); -// if (gMain.inBattle -// && sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000) -// && !(gDisableStructs[sp34].unk18_b & gBitTable[r5])) -// gBattleMons[sp34].pp[r5] = data; -// */ -// retVal = FALSE; -// } -// } -// } -// else // _080429FA -// { -// u16 r4; -// -// data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL); -// r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL); -// if (data != CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex)) -// { -// /* -// data += itemEffect[sp24++]; -// r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL); -// if (data > CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex)) -// { -// r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL); -// data = CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex); -// } -// SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data); -// if (gMain.inBattle -// && sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000) -// && !(gDisableStructs[sp34].unk18_b & gBitTable[moveIndex])) -// gBattleMons[sp34].pp[moveIndex] = data; -// */ -// sp24++; -// retVal = FALSE; -// } -// } -// break; -// case 7: -// { -// targetSpecies = GetEvolutionTargetSpecies(pkmn, 2, item); -// -// if (targetSpecies != SPECIES_NONE) -// { -// //BeginEvolutionScene(pkmn, targetSpecies, 0, partyIndex); -// return FALSE; -// } -// } -// break; -// } -// } -// sp28++; -// r10 >>= 1; -// } -// break; -// case 5: -// r10 = itemEffect[cmdIndex]; -// sp28 = 0; -// while (r10 != 0) -// { -// if (r10 & 1) -// { -// u16 evCount; -// -// switch (sp28) -// { -// case 0: -// case 1: -// case 2: -// case 3: -// evCount = GetMonEVCount(pkmn); -// if (evCount >= 510) -// return TRUE; -// data = GetMonData(pkmn, sGetMonDataEVConstants[sp28 + 2], NULL); -// if (data < 100) -// { -// /* -// if (data + itemEffect[sp24] > 100) -// r4 = 100 - (data + itemEffect[sp24]) + itemEffect[sp24]; -// else -// r4 = itemEffect[sp24]; -// if (evCount + r4 > 510) -// r4 += 510 - (evCount + r4); -// data += r4; -// SetMonData(pkmn, sGetMonDataEVConstants[sp28 + 2], &data); -// CalculateMonStats(pkmn); -// */ -// retVal = FALSE; -// sp24++; -// } -// break; -// case 4: -// data = (GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) & gUnknown_825DEA1[moveIndex]) >> (moveIndex * 2); -// r4 = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex); -// if (data < 3) -// { -// if(r4 <= 4) -// break; -// /* -// -// data = GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL); -// data &= gPPUpWriteMasks[moveIndex]; -// data += gUnknown_825DEA9[moveIndex] * 3; -// -// SetMonData(pkmn, MON_DATA_PP_BONUSES, &data); -// data = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - r4; -// data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL) + data; -// SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data); -// */ -// retVal = FALSE; -// } -// break; -// case 5: -// if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) < 100 && retVal == 0 && sp2C == 0) -// { -// sp2C = itemEffect[sp24]; -// /* -// friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL); -// if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) -// friendship += 150 * sp2C / 100; -// else -// friendship += sp2C; -// if (sp2C > 0) -// { -// if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11) -// friendship++; -// if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name()) -// friendship++; -// } -// if (friendship < 0) -// friendship = 0; -// if (friendship > 255) -// friendship = 255; -// SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship); -// */ -// } -// sp24++; -// break; -// case 6: -// if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) < 200 -// && retVal == 0 && sp2C == 0) -// { -// sp2C = itemEffect[sp24]; -// /* -// friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL); -// if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) -// friendship += 150 * sp2C / 100; -// else -// friendship += sp2C; -// if (sp2C > 0) -// { -// if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11) -// friendship++; -// if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name()) -// friendship++; -// } -// if (friendship < 0) -// friendship = 0; -// if (friendship > 255) -// friendship = 255; -// SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship); -// */ -// } -// sp24++; -// break; -// case 7: -// if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) >= 200 && retVal == 0 && sp2C == 0) -// { -// sp2C = itemEffect[sp24]; -// /* -// friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL); -// if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) -// friendship += 150 * sp2C / 100; -// else -// friendship += sp2C; -// if (sp2C > 0) -// { -// if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11) -// friendship++; -// if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name()) -// friendship++; -// } -// if (friendship < 0) -// friendship = 0; -// if (friendship > 255) -// friendship = 255; -// SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship); -// */ -// } -// sp24++; -// break; -// } -// } -// sp28++; -// r10 >>= 1; -// } -// break; -// } -// } -// return retVal; -//} - +#ifdef NONMATCHING /* + * This is nonmatching due to the compiler's insistence on avoiding the u8 cast + * when loading gMain.inBattle. If it weren't for this absent cast, differing + * the function would be a lot easier. + */ +bool8 PokemonUseItemEffects2(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 moveIndex, u8 e) +{ // BEGIN + u32 data; + s32 cmdIndex; + bool8 retVal = TRUE; + const u8 *itemEffect; + u8 sp24 = 6; + u32 sp28; + s8 sp2C = 0; + u8 sp34 = 4; + u16 heldItem; + u8 r10; + s32 r4; + + heldItem = GetMonData(pkmn, MON_DATA_HELD_ITEM, NULL); + if (heldItem == ITEM_ENIGMA_BERRY) + { + if (gMain.inBattle) + /*holdEffect = */gEnigmaBerries[gBattlerInMenuId].holdEffect; + else + /*holdEffect = */gSaveBlock1Ptr->enigmaBerry.holdEffect; + } + else + { + /*holdEffect = */ItemId_GetHoldEffect(heldItem); + } + + gPotentialItemEffectBattler = gBattlerInMenuId; + + // grr. the original asm also u8 masks after loading the bitmask, despite + // the fact that is a useless operation. what's going on here? Something + // dumb I bet like dead code. + if (gMain.inBattle) + { + gActiveBattler = gBattlerInMenuId; + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + cmdIndex = 0; + else + cmdIndex = 1; + while (cmdIndex < gBattlersCount) + { + if (gBattlerPartyIndexes[cmdIndex] == partyIndex) + { + sp34 = cmdIndex; + break; + } + cmdIndex += 2; + } + } + else + { + gActiveBattler = 0; + sp34 = 4; + } + + // _08042504 + if (!IS_POKEMON_ITEM(item)) + return TRUE; + if (gItemEffectTable[item - 13] == NULL && item != ITEM_ENIGMA_BERRY) + return TRUE; + + if (item == ITEM_ENIGMA_BERRY) + { + if (gMain.inBattle) + itemEffect = gEnigmaBerries[gActiveBattler].itemEffect; + else + itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect; + } + else + { + itemEffect = gItemEffectTable[item - 13]; + } + + for (cmdIndex = 0; cmdIndex < 6; cmdIndex++) + { + switch (cmdIndex) + { + // status healing effects + case 0: + if ((itemEffect[cmdIndex] & 0x80) + && gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_INFATUATION)) + { + //gBattleMons[sp34].status2 &= ~STATUS2_INFATUATION; + retVal = FALSE; + } + if ((itemEffect[cmdIndex] & 0x30) + && !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY)) + { + //gBattleMons[gActiveBattler].status2 |= STATUS2_FOCUS_ENERGY; + retVal = FALSE; + } + if ((itemEffect[cmdIndex] & 0xF) + && gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] < 12) + { + //gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] += itemEffect[cmdIndex] & 0xF; + //if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] > 12) + // gBattleMons[gActiveBattler].statStages[STAT_STAGE_ATK] = 12; + retVal = FALSE; + } + break; + // in-battle stat boosting effects? + case 1: + if ((itemEffect[cmdIndex] & 0xF0) + && gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] < 12) + { + //gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] += (itemEffect[cmdIndex] & 0xF0) >> 4; + //if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] > 12) + // gBattleMons[gActiveBattler].statStages[STAT_STAGE_DEF] = 12; + retVal = FALSE; + } + if ((itemEffect[cmdIndex] & 0xF) + && gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] < 12) + { + //gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] += itemEffect[cmdIndex] & 0xF; + //if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] > 12) + // gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPEED] = 12; + retVal = FALSE; + } + break; + // more stat boosting effects? + case 2: + if ((itemEffect[cmdIndex] & 0xF0) + && gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] < 12) + { + //gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] += (itemEffect[cmdIndex] & 0xF0) >> 4; + //if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] > 12) + // gBattleMons[gActiveBattler].statStages[STAT_STAGE_ACC] = 12; + retVal = FALSE; + } + if ((itemEffect[cmdIndex] & 0xF) + && gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] < 12) + { + //gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] += itemEffect[cmdIndex] & 0xF; + //if (gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] > 12) + // gBattleMons[gActiveBattler].statStages[STAT_STAGE_SPATK] = 12; + retVal = FALSE; + } + break; + case 3: + if ((itemEffect[cmdIndex] & 0x80) + && gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer == 0) + { + //gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer = 5; + retVal = FALSE; + } + if ((itemEffect[cmdIndex] & 0x40) // raise level + && GetMonData(pkmn, MON_DATA_LEVEL, NULL) != 100) + { + //data = gExperienceTables[gBaseStats[GetMonData(pkmn, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(pkmn, MON_DATA_LEVEL, NULL) + 1]; + //SetMonData(pkmn, MON_DATA_EXP, &data); + //CalculateMonStats(pkmn); + retVal = FALSE; + } + if ((itemEffect[cmdIndex] & 0x20) + && sub_8042BE8(pkmn, partyIndex, 7, sp34) == 0) + { + //if (sp34 != 4) + // gBattleMons[sp34].status2 &= ~STATUS2_NIGHTMARE; + retVal = FALSE; + } + if ((itemEffect[cmdIndex] & 0x10) && sub_8042BE8(pkmn, partyIndex, 0xF88, sp34) == 0) + retVal = FALSE; + if ((itemEffect[cmdIndex] & 8) && sub_8042BE8(pkmn, partyIndex, 16, sp34) == 0) + retVal = FALSE; + if ((itemEffect[cmdIndex] & 4) && sub_8042BE8(pkmn, partyIndex, 32, sp34) == 0) + retVal = FALSE; + if ((itemEffect[cmdIndex] & 2) && sub_8042BE8(pkmn, partyIndex, 64, sp34) == 0) + retVal = FALSE; + if ((itemEffect[cmdIndex] & 1) // heal confusion + && gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_CONFUSION)) + { + //gBattleMons[sp34].status2 &= ~STATUS2_CONFUSION; + retVal = FALSE; + } + break; + // EV, HP, and PP raising effects + case 4: + r10 = itemEffect[cmdIndex]; + if (r10 & 0x20) + { + r10 &= ~0x20; + data = (GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) & gUnknown_825DEA1[moveIndex]) >> (moveIndex * 2); + sp28 = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex); + if (data < 3 && sp28 > 4) + { + //data = GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) + gUnknown_825DEA9[moveIndex]; + //SetMonData(pkmn, MON_DATA_PP_BONUSES, &data); + // + //data = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - sp28; + //data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL) + data; + //SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data); + retVal = FALSE; + } + } + sp28 = 0; + while (r10 != 0) // _080428C0 + { + if (r10 & 1) + { + u16 evCount; + u16 targetSpecies; + s32 r5; + + switch (sp28) + { + case 0: + case 1: + evCount = GetMonEVCount(pkmn); + if (evCount >= 510) + return TRUE; + data = GetMonData(pkmn, sGetMonDataEVConstants[sp28], NULL); + if (data < 100) + { + //if (data + itemEffect[sp24] > 100) + // r4 = 100 - (data + itemEffect[sp24]) + itemEffect[sp24]; + //else + // r4 = itemEffect[sp24]; + //if (evCount + r4 > 510) + // r4 += 510 - (evCount + r4); + //data += r4; + //SetMonData(pkmn, sGetMonDataEVConstants[sp28], &data); + //CalculateMonStats(pkmn); + sp24++; + retVal = FALSE; + } + break; + case 2: + // revive? + if (r10 & 0x10) + { + if (GetMonData(pkmn, MON_DATA_HP, NULL) != 0) + { + sp24++; + break; + } + /* + if (gMain.inBattle) + { + if (sp34 != 4) + { + gAbsentBattlerFlags &= ~gBitTable[sp34]; + CopyPlayerPartyMonToBattleData(sp34, pokemon_order_func(gBattlerPartyIndexes[sp34])); + if (GetBattlerSide(gActiveBattler) == 0 && gBattleResults.unk4 < 255) + gBattleResults.unk4++; + } + else + { + gAbsentBattlerFlags &= ~gBitTable[gActiveBattler ^ 2]; + if (GetBattlerSide(gActiveBattler) == 0 && gBattleResults.unk4 < 255) + gBattleResults.unk4++; + } + } + */ + } + else + { + if (GetMonData(pkmn, MON_DATA_HP, NULL) == 0) + { + sp24++; + break; + } + } + /* + data = itemEffect[sp24++]; + switch (data) + { + case 0xFF: + data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL) - GetMonData(pkmn, MON_DATA_HP, NULL); + break; + case 0xFE: + data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL) / 2; + if (data == 0) + data = 1; + break; + case 0xFD: + data = gBattleScripting.field_23; + break; + } + */ + if (GetMonData(pkmn, MON_DATA_MAX_HP, NULL) != GetMonData(pkmn, MON_DATA_HP, NULL)) + { + /* + if (e == 0) + { + data = GetMonData(pkmn, MON_DATA_HP, NULL) + data; + if (data > GetMonData(pkmn, MON_DATA_MAX_HP, NULL)) + data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL); + SetMonData(pkmn, MON_DATA_HP, &data); + if (gMain.inBattle && sp34 != 4) + { + gBattleMons[sp34].hp = data; + if (!(r10 & 0x10) && GetBattlerSide(gActiveBattler) == 0) + { + if (gBattleResults.unk3 < 255) + gBattleResults.unk3++; + // I have to re-use this variable to match. + r5 = gActiveBattler; + gActiveBattler = sp34; + BtlController_EmitGetMonData(0, 0, 0); + MarkBufferBankForExecution(gActiveBattler); + gActiveBattler = r5; + } + } + } + else + { + gBattleMoveDamage = -data; + } + */ + retVal = FALSE; + } + sp24++; + r10 &= 0xEF; + break; + case 3: + if (!(r10 & 2)) + { + for (r5 = 0; r5 < 4; r5++) + { + data = GetMonData(pkmn, MON_DATA_PP1 + r5, NULL); + r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL); + if (data != CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5)) + { + /* + data += itemEffect[sp24]; + r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL); + if (data > CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5)) + { + r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL); + data = CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5); + } + SetMonData(pkmn, MON_DATA_PP1 + r5, &data); + if (gMain.inBattle + && sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000) + && !(gDisableStructs[sp34].unk18_b & gBitTable[r5])) + gBattleMons[sp34].pp[r5] = data; + */ + retVal = FALSE; + } + } + } + else // _080429FA + { + data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL); + r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL); + if (data != CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex)) + { + /* + data += itemEffect[sp24++]; + r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL); + if (data > CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex)) + { + r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL); + data = CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex); + } + SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data); + if (gMain.inBattle + && sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000) + && !(gDisableStructs[sp34].unk18_b & gBitTable[moveIndex])) + gBattleMons[sp34].pp[moveIndex] = data; + */ + sp24++; + retVal = FALSE; + } + } + break; + case 7: + { + targetSpecies = GetEvolutionTargetSpecies(pkmn, 2, item); + + if (targetSpecies != SPECIES_NONE) + { + //BeginEvolutionScene(pkmn, targetSpecies, 0, partyIndex); + return FALSE; + } + } + break; + } + } + sp28++; + r10 >>= 1; + } + break; + case 5: + r10 = itemEffect[cmdIndex]; + sp28 = 0; + while (r10 != 0) + { + if (r10 & 1) + { + u16 evCount; + + switch (sp28) + { + case 0: + case 1: + case 2: + case 3: + evCount = GetMonEVCount(pkmn); + if (evCount >= 510) + return TRUE; + data = GetMonData(pkmn, sGetMonDataEVConstants[sp28 + 2], NULL); + if (data < 100) + { + /* + if (data + itemEffect[sp24] > 100) + r4 = 100 - (data + itemEffect[sp24]) + itemEffect[sp24]; + else + r4 = itemEffect[sp24]; + if (evCount + r4 > 510) + r4 += 510 - (evCount + r4); + data += r4; + SetMonData(pkmn, sGetMonDataEVConstants[sp28 + 2], &data); + CalculateMonStats(pkmn); + */ + retVal = FALSE; + sp24++; + } + break; + case 4: + data = (GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) & gUnknown_825DEA1[moveIndex]) >> (moveIndex * 2); + r4 = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex); + if (data < 3) + { + if(r4 <= 4) + break; + /* + + data = GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL); + data &= gPPUpWriteMasks[moveIndex]; + data += gUnknown_825DEA9[moveIndex] * 3; -*/ + SetMonData(pkmn, MON_DATA_PP_BONUSES, &data); + data = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - r4; + data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL) + data; + SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data); + */ + retVal = FALSE; + } + break; + case 5: + if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) < 100 && retVal == 0 && sp2C == 0) + { + sp2C = itemEffect[sp24]; + /* + friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL); + if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) + friendship += 150 * sp2C / 100; + else + friendship += sp2C; + if (sp2C > 0) + { + if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11) + friendship++; + if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name()) + friendship++; + } + if (friendship < 0) + friendship = 0; + if (friendship > 255) + friendship = 255; + SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship); + */ + } + sp24++; + break; + case 6: + if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) < 200 + && retVal == 0 && sp2C == 0) + { + sp2C = itemEffect[sp24]; + /* + friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL); + if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) + friendship += 150 * sp2C / 100; + else + friendship += sp2C; + if (sp2C > 0) + { + if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11) + friendship++; + if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name()) + friendship++; + } + if (friendship < 0) + friendship = 0; + if (friendship > 255) + friendship = 255; + SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship); + */ + } + sp24++; + break; + case 7: + if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) >= 200 && retVal == 0 && sp2C == 0) + { + sp2C = itemEffect[sp24]; + /* + friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL); + if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) + friendship += 150 * sp2C / 100; + else + friendship += sp2C; + if (sp2C > 0) + { + if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11) + friendship++; + if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name()) + friendship++; + } + if (friendship < 0) + friendship = 0; + if (friendship > 255) + friendship = 255; + SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship); + */ + } + sp24++; + break; + } + } + sp28++; + r10 >>= 1; + } + break; + } + } + return retVal; +} +#else +__attribute__((naked)) +bool8 PokemonUseItemEffects2(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 moveIndex, u8 e) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x20\n\ + mov r8, r0\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + str r1, [sp]\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + str r2, [sp, 0x4]\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + str r3, [sp, 0x8]\n\ + movs r0, 0x1\n\ + str r0, [sp, 0x10]\n\ + movs r1, 0x6\n\ + mov r10, r1\n\ + movs r2, 0\n\ + str r2, [sp, 0x18]\n\ + movs r0, 0x4\n\ + str r0, [sp, 0x1C]\n\ + mov r0, r8\n\ + movs r1, 0xC\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0xAF\n\ + beq _08042458\n\ + bl ItemId_GetHoldEffect\n\ +_08042458:\n\ + ldr r1, _080424B0 @ =gPotentialItemEffectBattler\n\ + ldr r0, _080424B4 @ =gBattlerInMenuId\n\ + ldrb r2, [r0]\n\ + strb r2, [r1]\n\ + ldr r0, _080424B8 @ =gMain\n\ + ldr r1, _080424BC @ =0x00000439\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + cmp r1, 0\n\ + beq _080424F8\n\ + ldr r0, _080424C0 @ =gActiveBattler\n\ + strb r2, [r0]\n\ + ldrb r0, [r0]\n\ + bl GetBattlerSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + negs r1, r0\n\ + orrs r1, r0\n\ + lsrs r1, 31\n\ + str r1, [sp, 0xC]\n\ + ldr r0, _080424C4 @ =gBattlersCount\n\ + ldr r4, [sp]\n\ + subs r4, 0xD\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + bge _08042504\n\ + ldr r2, _080424C8 @ =gBattlerPartyIndexes\n\ + lsls r0, r1, 1\n\ + adds r0, r2\n\ + ldrh r3, [r0]\n\ + ldr r1, [sp, 0x4]\n\ + lsls r0, r1, 16\n\ + lsrs r1, r0, 16\n\ + adds r5, r0, 0\n\ + cmp r3, r1\n\ + bne _080424CC\n\ + ldr r2, [sp, 0xC]\n\ + str r2, [sp, 0x1C]\n\ + b _08042504\n\ + .align 2, 0\n\ +_080424B0: .4byte gPotentialItemEffectBattler\n\ +_080424B4: .4byte gBattlerInMenuId\n\ +_080424B8: .4byte gMain\n\ +_080424BC: .4byte 0x00000439\n\ +_080424C0: .4byte gActiveBattler\n\ +_080424C4: .4byte gBattlersCount\n\ +_080424C8: .4byte gBattlerPartyIndexes\n\ +_080424CC:\n\ + ldr r0, [sp, 0xC]\n\ + adds r0, 0x2\n\ + str r0, [sp, 0xC]\n\ + ldr r0, _080424F4 @ =gBattlersCount\n\ + ldr r1, [sp, 0xC]\n\ + ldrb r0, [r0]\n\ + cmp r1, r0\n\ + bge _08042504\n\ + lsls r0, r1, 1\n\ + adds r0, r2\n\ + ldrh r1, [r0]\n\ + lsrs r0, r5, 16\n\ + cmp r1, r0\n\ + bne _080424CC\n\ + ldr r2, [sp, 0xC]\n\ + lsls r0, r2, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x1C]\n\ + b _08042504\n\ + .align 2, 0\n\ +_080424F4: .4byte gBattlersCount\n\ +_080424F8:\n\ + ldr r0, _08042520 @ =gActiveBattler\n\ + strb r1, [r0]\n\ + movs r0, 0x4\n\ + str r0, [sp, 0x1C]\n\ + ldr r4, [sp]\n\ + subs r4, 0xD\n\ +_08042504:\n\ + lsls r0, r4, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0xA5\n\ + bhi _08042578\n\ + ldr r1, _08042524 @ =gItemEffectTable\n\ + lsls r0, r4, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + cmp r0, 0\n\ + bne _08042528\n\ + ldr r1, [sp]\n\ + cmp r1, 0xAF\n\ + beq _0804252E\n\ + b _08042578\n\ + .align 2, 0\n\ +_08042520: .4byte gActiveBattler\n\ +_08042524: .4byte gItemEffectTable\n\ +_08042528:\n\ + ldr r2, [sp]\n\ + cmp r2, 0xAF\n\ + bne _0804257C\n\ +_0804252E:\n\ + ldr r0, _08042550 @ =gMain\n\ + ldr r1, _08042554 @ =0x00000439\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08042560\n\ + ldr r0, _08042558 @ =gActiveBattler\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 3\n\ + subs r0, r1\n\ + lsls r0, 2\n\ + ldr r1, _0804255C @ =gEnigmaBerries+0x8\n\ + adds r0, r1\n\ + b _0804257C\n\ + .align 2, 0\n\ +_08042550: .4byte gMain\n\ +_08042554: .4byte 0x00000439\n\ +_08042558: .4byte gActiveBattler\n\ +_0804255C: .4byte gEnigmaBerries+0x8\n\ +_08042560:\n\ + ldr r0, _0804256C @ =gSaveBlock1Ptr\n\ + ldr r0, [r0]\n\ + ldr r2, _08042570 @ =0x00003108\n\ + adds r2, r0, r2\n\ + str r2, [sp, 0x14]\n\ + b _0804257E\n\ + .align 2, 0\n\ +_0804256C: .4byte gSaveBlock1Ptr\n\ +_08042570: .4byte 0x00003108\n\ +_08042574:\n\ + movs r0, 0\n\ + b _08042BD8\n\ +_08042578:\n\ + movs r0, 0x1\n\ + b _08042BD8\n\ +_0804257C:\n\ + str r0, [sp, 0x14]\n\ +_0804257E:\n\ + movs r0, 0\n\ + str r0, [sp, 0xC]\n\ +_08042582:\n\ + ldr r1, [sp, 0xC]\n\ + cmp r1, 0x5\n\ + bls _0804258A\n\ + b _08042BCA\n\ +_0804258A:\n\ + lsls r0, r1, 2\n\ + ldr r1, _08042594 @ =_08042598\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08042594: .4byte _08042598\n\ + .align 2, 0\n\ +_08042598:\n\ + .4byte _080425B0\n\ + .4byte _0804264C\n\ + .4byte _080426A8\n\ + .4byte _08042708\n\ + .4byte _08042850\n\ + .4byte _08042A6A\n\ +_080425B0:\n\ + ldr r0, [sp, 0x14]\n\ + ldr r1, [sp, 0xC]\n\ + adds r2, r0, r1\n\ + ldrb r1, [r2]\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + adds r5, r2, 0\n\ + cmp r0, 0\n\ + beq _080425F4\n\ + ldr r0, _0804263C @ =gMain\n\ + ldr r2, _08042640 @ =0x00000439\n\ + adds r0, r2\n\ + ldrb r1, [r0]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080425F4\n\ + ldr r0, [sp, 0x1C]\n\ + cmp r0, 0x4\n\ + beq _080425F4\n\ + ldr r1, _08042644 @ =gBattleMons\n\ + movs r0, 0x58\n\ + ldr r2, [sp, 0x1C]\n\ + muls r0, r2\n\ + adds r1, 0x50\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0xF0\n\ + lsls r1, 12\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080425F4\n\ + movs r0, 0\n\ + str r0, [sp, 0x10]\n\ +_080425F4:\n\ + ldrb r1, [r5]\n\ + movs r0, 0x30\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0804261C\n\ + ldr r1, _08042644 @ =gBattleMons\n\ + ldr r0, _08042648 @ =gActiveBattler\n\ + ldrb r2, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + adds r1, 0x50\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 13\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0804261C\n\ + movs r1, 0\n\ + str r1, [sp, 0x10]\n\ +_0804261C:\n\ + ldrb r1, [r5]\n\ + movs r0, 0xF\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08042628\n\ + b _08042BCA\n\ +_08042628:\n\ + ldr r2, _08042644 @ =gBattleMons\n\ + ldr r0, _08042648 @ =gActiveBattler\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r2\n\ + ldrb r0, [r0, 0x19]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + b _080426F2\n\ + .align 2, 0\n\ +_0804263C: .4byte gMain\n\ +_08042640: .4byte 0x00000439\n\ +_08042644: .4byte gBattleMons\n\ +_08042648: .4byte gActiveBattler\n\ +_0804264C:\n\ + ldr r0, [sp, 0x14]\n\ + ldr r1, [sp, 0xC]\n\ + adds r2, r0, r1\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF0\n\ + ands r0, r1\n\ + adds r5, r2, 0\n\ + cmp r0, 0\n\ + beq _08042678\n\ + ldr r2, _080426A0 @ =gBattleMons\n\ + ldr r0, _080426A4 @ =gActiveBattler\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r2\n\ + ldrb r0, [r0, 0x1A]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0xB\n\ + bgt _08042678\n\ + movs r2, 0\n\ + str r2, [sp, 0x10]\n\ +_08042678:\n\ + ldrb r1, [r5]\n\ + movs r0, 0xF\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08042684\n\ + b _08042BCA\n\ +_08042684:\n\ + ldr r2, _080426A0 @ =gBattleMons\n\ + ldr r0, _080426A4 @ =gActiveBattler\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r2\n\ + ldrb r0, [r0, 0x1B]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0xB\n\ + ble _0804269C\n\ + b _08042BCA\n\ +_0804269C:\n\ + b _08042832\n\ + .align 2, 0\n\ +_080426A0: .4byte gBattleMons\n\ +_080426A4: .4byte gActiveBattler\n\ +_080426A8:\n\ + ldr r1, [sp, 0x14]\n\ + ldr r0, [sp, 0xC]\n\ + adds r2, r1, r0\n\ + ldrb r1, [r2]\n\ + movs r0, 0xF0\n\ + ands r0, r1\n\ + adds r5, r2, 0\n\ + cmp r0, 0\n\ + beq _080426D4\n\ + ldr r2, _08042700 @ =gBattleMons\n\ + ldr r0, _08042704 @ =gActiveBattler\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r2\n\ + ldrb r0, [r0, 0x1E]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0xB\n\ + bgt _080426D4\n\ + movs r1, 0\n\ + str r1, [sp, 0x10]\n\ +_080426D4:\n\ + ldrb r1, [r5]\n\ + movs r0, 0xF\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080426E0\n\ + b _08042BCA\n\ +_080426E0:\n\ + ldr r2, _08042700 @ =gBattleMons\n\ + ldr r0, _08042704 @ =gActiveBattler\n\ + ldrb r1, [r0]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r0, r2\n\ + ldrb r0, [r0, 0x1C]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ +_080426F2:\n\ + cmp r0, 0xB\n\ + ble _080426F8\n\ + b _08042BCA\n\ +_080426F8:\n\ + movs r2, 0\n\ + str r2, [sp, 0x10]\n\ + b _08042BCA\n\ + .align 2, 0\n\ +_08042700: .4byte gBattleMons\n\ +_08042704: .4byte gActiveBattler\n\ +_08042708:\n\ + ldr r0, [sp, 0x14]\n\ + ldr r1, [sp, 0xC]\n\ + adds r2, r0, r1\n\ + ldrb r1, [r2]\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + adds r5, r2, 0\n\ + cmp r0, 0\n\ + beq _0804273A\n\ + ldr r4, _08042838 @ =gSideTimers\n\ + ldr r0, _0804283C @ =gActiveBattler\n\ + ldrb r0, [r0]\n\ + bl GetBattlerSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r4\n\ + ldrb r0, [r1, 0x4]\n\ + cmp r0, 0\n\ + bne _0804273A\n\ + movs r2, 0\n\ + str r2, [sp, 0x10]\n\ +_0804273A:\n\ + ldrb r1, [r5]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08042756\n\ + mov r0, r8\n\ + movs r1, 0x38\n\ + movs r2, 0\n\ + bl GetMonData\n\ + cmp r0, 0x64\n\ + beq _08042756\n\ + movs r0, 0\n\ + str r0, [sp, 0x10]\n\ +_08042756:\n\ + ldrb r1, [r5]\n\ + movs r0, 0x20\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08042776\n\ + mov r0, r8\n\ + ldr r1, [sp, 0x4]\n\ + movs r2, 0x7\n\ + ldr r3, [sp, 0x1C]\n\ + bl sub_8042BE8\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08042776\n\ + movs r1, 0\n\ + str r1, [sp, 0x10]\n\ +_08042776:\n\ + ldrb r1, [r5]\n\ + movs r0, 0x10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08042796\n\ + ldr r2, _08042840 @ =0x00000f88\n\ + mov r0, r8\n\ + ldr r1, [sp, 0x4]\n\ + ldr r3, [sp, 0x1C]\n\ + bl sub_8042BE8\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08042796\n\ + movs r2, 0\n\ + str r2, [sp, 0x10]\n\ +_08042796:\n\ + ldrb r1, [r5]\n\ + movs r0, 0x8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080427B6\n\ + mov r0, r8\n\ + ldr r1, [sp, 0x4]\n\ + movs r2, 0x10\n\ + ldr r3, [sp, 0x1C]\n\ + bl sub_8042BE8\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080427B6\n\ + movs r0, 0\n\ + str r0, [sp, 0x10]\n\ +_080427B6:\n\ + ldrb r1, [r5]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080427D6\n\ + mov r0, r8\n\ + ldr r1, [sp, 0x4]\n\ + movs r2, 0x20\n\ + ldr r3, [sp, 0x1C]\n\ + bl sub_8042BE8\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080427D6\n\ + movs r1, 0\n\ + str r1, [sp, 0x10]\n\ +_080427D6:\n\ + ldrb r1, [r5]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080427F6\n\ + mov r0, r8\n\ + ldr r1, [sp, 0x4]\n\ + movs r2, 0x40\n\ + ldr r3, [sp, 0x1C]\n\ + bl sub_8042BE8\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080427F6\n\ + movs r2, 0\n\ + str r2, [sp, 0x10]\n\ +_080427F6:\n\ + ldrb r1, [r5]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08042802\n\ + b _08042BCA\n\ +_08042802:\n\ + ldr r0, _08042844 @ =gMain\n\ + ldr r1, _08042848 @ =0x00000439\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08042814\n\ + b _08042BCA\n\ +_08042814:\n\ + ldr r2, [sp, 0x1C]\n\ + cmp r2, 0x4\n\ + bne _0804281C\n\ + b _08042BCA\n\ +_0804281C:\n\ + ldr r1, _0804284C @ =gBattleMons\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + adds r1, 0x50\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0x7\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08042832\n\ + b _08042BCA\n\ +_08042832:\n\ + movs r0, 0\n\ + str r0, [sp, 0x10]\n\ + b _08042BCA\n\ + .align 2, 0\n\ +_08042838: .4byte gSideTimers\n\ +_0804283C: .4byte gActiveBattler\n\ +_08042840: .4byte 0x00000f88\n\ +_08042844: .4byte gMain\n\ +_08042848: .4byte 0x00000439\n\ +_0804284C: .4byte gBattleMons\n\ +_08042850:\n\ + ldr r1, [sp, 0x14]\n\ + ldr r2, [sp, 0xC]\n\ + adds r0, r1, r2\n\ + ldrb r7, [r0]\n\ + movs r0, 0x20\n\ + ands r0, r7\n\ + cmp r0, 0\n\ + beq _080428B6\n\ + movs r0, 0xDF\n\ + ands r7, r0\n\ + mov r0, r8\n\ + movs r1, 0x15\n\ + movs r2, 0\n\ + bl GetMonData\n\ + adds r5, r0, 0\n\ + ldr r0, _080428DC @ =gUnknown_825DEA1\n\ + ldr r1, [sp, 0x8]\n\ + adds r0, r1, r0\n\ + ldrb r0, [r0]\n\ + ands r5, r0\n\ + lsls r0, r1, 1\n\ + lsrs r5, r0\n\ + adds r1, 0xD\n\ + mov r0, r8\n\ + movs r2, 0\n\ + bl GetMonData\n\ + adds r4, r0, 0\n\ + lsls r4, 16\n\ + lsrs r4, 16\n\ + mov r0, r8\n\ + movs r1, 0x15\n\ + movs r2, 0\n\ + bl GetMonData\n\ + adds r1, r0, 0\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r0, r4, 0\n\ + ldr r2, [sp, 0x8]\n\ + bl CalculatePPWithBonus\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r5, 0x2\n\ + bhi _080428B6\n\ + cmp r0, 0x4\n\ + bls _080428B6\n\ + movs r2, 0\n\ + str r2, [sp, 0x10]\n\ +_080428B6:\n\ + movs r0, 0\n\ + mov r9, r0\n\ + cmp r7, 0\n\ + bne _080428C0\n\ + b _08042BCA\n\ +_080428C0:\n\ + movs r0, 0x1\n\ + ands r0, r7\n\ + cmp r0, 0\n\ + bne _080428CA\n\ + b _08042A5C\n\ +_080428CA:\n\ + mov r1, r9\n\ + cmp r1, 0x7\n\ + bls _080428D2\n\ + b _08042A5C\n\ +_080428D2:\n\ + lsls r0, r1, 2\n\ + ldr r1, _080428E0 @ =_080428E4\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_080428DC: .4byte gUnknown_825DEA1\n\ +_080428E0: .4byte _080428E4\n\ + .align 2, 0\n\ +_080428E4:\n\ + .4byte _08042904\n\ + .4byte _08042904\n\ + .4byte _08042934\n\ + .4byte _08042996\n\ + .4byte _08042A5C\n\ + .4byte _08042A5C\n\ + .4byte _08042A5C\n\ + .4byte _08042A4A\n\ +_08042904:\n\ + mov r0, r8\n\ + bl GetMonEVCount\n\ + lsls r0, 16\n\ + ldr r1, _0804292C @ =0x01fd0000\n\ + cmp r0, r1\n\ + bls _08042914\n\ + b _08042578\n\ +_08042914:\n\ + ldr r0, _08042930 @ =sGetMonDataEVConstants\n\ + add r0, r9\n\ + ldrb r1, [r0]\n\ + mov r0, r8\n\ + movs r2, 0\n\ + bl GetMonData\n\ + adds r5, r0, 0\n\ + cmp r5, 0x63\n\ + bls _0804292A\n\ + b _08042A5C\n\ +_0804292A:\n\ + b _08042A3A\n\ + .align 2, 0\n\ +_0804292C: .4byte 0x01fd0000\n\ +_08042930: .4byte sGetMonDataEVConstants\n\ +_08042934:\n\ + movs r0, 0x10\n\ + ands r0, r7\n\ + cmp r0, 0\n\ + beq _08042952\n\ + mov r0, r8\n\ + movs r1, 0x39\n\ + movs r2, 0\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _08042968\n\ + mov r0, r10\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + b _080429F4\n\ +_08042952:\n\ + mov r0, r8\n\ + movs r1, 0x39\n\ + movs r2, 0\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _08042968\n\ + mov r0, r10\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + b _080429F4\n\ +_08042968:\n\ + mov r0, r8\n\ + movs r1, 0x3A\n\ + movs r2, 0\n\ + bl GetMonData\n\ + adds r4, r0, 0\n\ + mov r0, r8\n\ + movs r1, 0x39\n\ + movs r2, 0\n\ + bl GetMonData\n\ + cmp r4, r0\n\ + beq _08042986\n\ + movs r0, 0\n\ + str r0, [sp, 0x10]\n\ +_08042986:\n\ + mov r0, r10\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + movs r0, 0xEF\n\ + ands r7, r0\n\ + b _08042A5C\n\ +_08042996:\n\ + movs r0, 0x2\n\ + ands r0, r7\n\ + cmp r0, 0\n\ + bne _080429FA\n\ + movs r6, 0\n\ + movs r1, 0x1\n\ + add r10, r1\n\ +_080429A4:\n\ + adds r1, r6, 0\n\ + adds r1, 0x11\n\ + mov r0, r8\n\ + movs r2, 0\n\ + bl GetMonData\n\ + adds r5, r0, 0\n\ + adds r1, r6, 0\n\ + adds r1, 0xD\n\ + mov r0, r8\n\ + movs r2, 0\n\ + bl GetMonData\n\ + adds r4, r0, 0\n\ + lsls r4, 16\n\ + lsrs r4, 16\n\ + mov r0, r8\n\ + movs r1, 0x15\n\ + movs r2, 0\n\ + bl GetMonData\n\ + adds r1, r0, 0\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + lsls r2, r6, 24\n\ + lsrs r2, 24\n\ + adds r0, r4, 0\n\ + bl CalculatePPWithBonus\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r5, r0\n\ + beq _080429EA\n\ + movs r2, 0\n\ + str r2, [sp, 0x10]\n\ +_080429EA:\n\ + adds r6, 0x1\n\ + cmp r6, 0x3\n\ + ble _080429A4\n\ + mov r1, r10\n\ + lsls r0, r1, 24\n\ +_080429F4:\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + b _08042A5C\n\ +_080429FA:\n\ + ldr r1, [sp, 0x8]\n\ + adds r1, 0x11\n\ + mov r0, r8\n\ + movs r2, 0\n\ + bl GetMonData\n\ + adds r5, r0, 0\n\ + ldr r1, [sp, 0x8]\n\ + adds r1, 0xD\n\ + mov r0, r8\n\ + movs r2, 0\n\ + bl GetMonData\n\ + adds r4, r0, 0\n\ + lsls r4, 16\n\ + lsrs r4, 16\n\ + mov r0, r8\n\ + movs r1, 0x15\n\ + movs r2, 0\n\ + bl GetMonData\n\ + adds r1, r0, 0\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r0, r4, 0\n\ + ldr r2, [sp, 0x8]\n\ + bl CalculatePPWithBonus\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r5, r0\n\ + beq _08042A5C\n\ +_08042A3A:\n\ + mov r0, r10\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + movs r2, 0\n\ + str r2, [sp, 0x10]\n\ + b _08042A5C\n\ +_08042A4A:\n\ + mov r0, r8\n\ + movs r1, 0x2\n\ + ldr r2, [sp]\n\ + bl GetEvolutionTargetSpecies\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + beq _08042A5C\n\ + b _08042574\n\ +_08042A5C:\n\ + movs r0, 0x1\n\ + add r9, r0\n\ + lsrs r7, 1\n\ + cmp r7, 0\n\ + beq _08042A68\n\ + b _080428C0\n\ +_08042A68:\n\ + b _08042BCA\n\ +_08042A6A:\n\ + ldr r1, [sp, 0x14]\n\ + ldr r2, [sp, 0xC]\n\ + adds r0, r1, r2\n\ + ldrb r7, [r0]\n\ + movs r0, 0\n\ + mov r9, r0\n\ + cmp r7, 0\n\ + bne _08042A7C\n\ + b _08042BCA\n\ +_08042A7C:\n\ + movs r0, 0x1\n\ + ands r0, r7\n\ + cmp r0, 0\n\ + bne _08042A86\n\ + b _08042BBE\n\ +_08042A86:\n\ + mov r1, r9\n\ + cmp r1, 0x7\n\ + bls _08042A8E\n\ + b _08042BBE\n\ +_08042A8E:\n\ + lsls r0, r1, 2\n\ + ldr r1, _08042A98 @ =_08042A9C\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08042A98: .4byte _08042A9C\n\ + .align 2, 0\n\ +_08042A9C:\n\ + .4byte _08042ABC\n\ + .4byte _08042ABC\n\ + .4byte _08042ABC\n\ + .4byte _08042ABC\n\ + .4byte _08042AF4\n\ + .4byte _08042B4C\n\ + .4byte _08042B68\n\ + .4byte _08042B92\n\ +_08042ABC:\n\ + mov r0, r8\n\ + bl GetMonEVCount\n\ + lsls r0, 16\n\ + ldr r1, _08042AEC @ =0x01fd0000\n\ + cmp r0, r1\n\ + bls _08042ACC\n\ + b _08042578\n\ +_08042ACC:\n\ + ldr r0, _08042AF0 @ =sGetMonDataEVConstants\n\ + mov r1, r9\n\ + adds r1, 0x2\n\ + adds r1, r0\n\ + ldrb r1, [r1]\n\ + mov r0, r8\n\ + movs r2, 0\n\ + bl GetMonData\n\ + adds r5, r0, 0\n\ + cmp r5, 0x63\n\ + bhi _08042BBE\n\ + movs r2, 0\n\ + str r2, [sp, 0x10]\n\ + b _08042BB4\n\ + .align 2, 0\n\ +_08042AEC: .4byte 0x01fd0000\n\ +_08042AF0: .4byte sGetMonDataEVConstants\n\ +_08042AF4:\n\ + mov r0, r8\n\ + movs r1, 0x15\n\ + movs r2, 0\n\ + bl GetMonData\n\ + adds r5, r0, 0\n\ + ldr r0, _08042B48 @ =gUnknown_825DEA1\n\ + ldr r1, [sp, 0x8]\n\ + adds r0, r1, r0\n\ + ldrb r0, [r0]\n\ + ands r5, r0\n\ + lsls r0, r1, 1\n\ + lsrs r5, r0\n\ + adds r1, 0xD\n\ + mov r0, r8\n\ + movs r2, 0\n\ + bl GetMonData\n\ + adds r4, r0, 0\n\ + lsls r4, 16\n\ + lsrs r4, 16\n\ + mov r0, r8\n\ + movs r1, 0x15\n\ + movs r2, 0\n\ + bl GetMonData\n\ + adds r1, r0, 0\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r0, r4, 0\n\ + ldr r2, [sp, 0x8]\n\ + bl CalculatePPWithBonus\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + cmp r5, 0x2\n\ + bhi _08042BBE\n\ + cmp r6, 0x4\n\ + ble _08042BBE\n\ + movs r2, 0\n\ + str r2, [sp, 0x10]\n\ + b _08042BBE\n\ + .align 2, 0\n\ +_08042B48: .4byte gUnknown_825DEA1\n\ +_08042B4C:\n\ + mov r0, r8\n\ + movs r1, 0x20\n\ + movs r2, 0\n\ + bl GetMonData\n\ + cmp r0, 0x63\n\ + bhi _08042BB4\n\ + ldr r0, [sp, 0x10]\n\ + cmp r0, 0\n\ + bne _08042BB4\n\ + ldr r1, [sp, 0x18]\n\ + cmp r1, 0\n\ + bne _08042BB4\n\ + b _08042BAC\n\ +_08042B68:\n\ + mov r0, r8\n\ + movs r1, 0x20\n\ + movs r2, 0\n\ + bl GetMonData\n\ + cmp r0, 0x63\n\ + bls _08042BB4\n\ + mov r0, r8\n\ + movs r1, 0x20\n\ + movs r2, 0\n\ + bl GetMonData\n\ + cmp r0, 0xC7\n\ + bhi _08042BB4\n\ + ldr r2, [sp, 0x10]\n\ + cmp r2, 0\n\ + bne _08042BB4\n\ + ldr r0, [sp, 0x18]\n\ + cmp r0, 0\n\ + bne _08042BB4\n\ + b _08042BAC\n\ +_08042B92:\n\ + mov r0, r8\n\ + movs r1, 0x20\n\ + movs r2, 0\n\ + bl GetMonData\n\ + cmp r0, 0xC7\n\ + bls _08042BB4\n\ + ldr r1, [sp, 0x10]\n\ + cmp r1, 0\n\ + bne _08042BB4\n\ + ldr r2, [sp, 0x18]\n\ + cmp r2, 0\n\ + bne _08042BB4\n\ +_08042BAC:\n\ + ldr r0, [sp, 0x14]\n\ + add r0, r10\n\ + ldrb r0, [r0]\n\ + str r0, [sp, 0x18]\n\ +_08042BB4:\n\ + mov r0, r10\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ +_08042BBE:\n\ + movs r0, 0x1\n\ + add r9, r0\n\ + lsrs r7, 1\n\ + cmp r7, 0\n\ + beq _08042BCA\n\ + b _08042A7C\n\ +_08042BCA:\n\ + ldr r1, [sp, 0xC]\n\ + adds r1, 0x1\n\ + str r1, [sp, 0xC]\n\ + cmp r1, 0x5\n\ + bgt _08042BD6\n\ + b _08042582\n\ +_08042BD6:\n\ + ldr r0, [sp, 0x10]\n\ +_08042BD8:\n\ + add sp, 0x20\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} +#endif |