summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2018-10-08 18:51:14 -0400
committerProjectRevoTPP <projectrevotpp@hotmail.com>2018-10-08 18:51:14 -0400
commit967b4e6612eb7f81dfe44989c2e2c79000c7d6f3 (patch)
treedef9e67fe788da2963c41585c309b61eb109247d
parent02fb51cbe7f6016d23d01d58dcbe8f4b3786bc5e (diff)
parent10fff9c6f2d29899952d1751d3de827e7e98bb60 (diff)
merge and nonmatching PokemonUseItemEffects2
-rw-r--r--asm/menews_jisan.s326
-rw-r--r--asm/pokemon_3.s997
-rw-r--r--data/data_84827AC.s8
-rw-r--r--include/event_data.h4
-rw-r--r--include/gba/defines.h1
-rw-r--r--include/global.h26
-rw-r--r--include/menews_jisan.h8
-rw-r--r--include/mevent.h7
-rw-r--r--ld_script.txt4
-rw-r--r--src/menews_jisan.c199
-rw-r--r--src/pokemon.c2073
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