diff options
| -rw-r--r-- | asm/pokemon_3.s (renamed from asm/rom_803D1FC.s) | 2201 | ||||
| -rw-r--r-- | asm/pokemon_item_effect.s | 1970 | ||||
| -rw-r--r-- | asm/rom_800D42C.s | 2 | ||||
| -rw-r--r-- | include/main.h | 1 | ||||
| -rw-r--r-- | ld_script.txt | 4 | ||||
| -rw-r--r-- | src/pokemon_3.c | 150 | 
6 files changed, 2125 insertions, 2203 deletions
| diff --git a/asm/rom_803D1FC.s b/asm/pokemon_3.s index e011d3c43..ac1a4f7b6 100644 --- a/asm/rom_803D1FC.s +++ b/asm/pokemon_3.s @@ -6,2207 +6,6 @@  	.text -	thumb_func_start ExecuteTableBasedItemEffect_ -ExecuteTableBasedItemEffect_: @ 803E18C -	push {r4,lr} -	sub sp, 0x4 -	lsls r1, 16 -	lsrs r1, 16 -	lsls r2, 24 -	lsrs r2, 24 -	lsls r3, 24 -	lsrs r3, 24 -	movs r4, 0 -	str r4, [sp] -	bl sub_803E1B0 -	lsls r0, 24 -	lsrs r0, 24 -	add sp, 0x4 -	pop {r4} -	pop {r1} -	bx r1 -	thumb_func_end ExecuteTableBasedItemEffect_ - -	thumb_func_start sub_803E1B0 -sub_803E1B0: @ 803E1B0 -	push {r4-r7,lr} -	mov r7, r10 -	mov r6, r9 -	mov r5, r8 -	push {r5-r7} -	sub sp, 0x3C -	mov r8, r0 -	ldr r0, [sp, 0x5C] -	lsls r1, 16 -	lsrs r1, 16 -	str r1, [sp, 0x8] -	lsls r2, 24 -	lsrs r2, 24 -	str r2, [sp, 0xC] -	lsls r3, 24 -	lsrs r3, 24 -	str r3, [sp, 0x10] -	lsls r0, 24 -	lsrs r0, 24 -	str r0, [sp, 0x14] -	movs r0, 0x1 -	str r0, [sp, 0x1C] -	movs r1, 0x6 -	str r1, [sp, 0x24] -	movs r2, 0 -	str r2, [sp, 0x2C] -	movs r3, 0x4 -	str r3, [sp, 0x34] -	mov r0, r8 -	movs r1, 0xC -	bl GetMonData -	lsls r0, 16 -	lsrs r0, 16 -	cmp r0, 0xAF -	bne _0803E240 -	ldr r0, _0803E21C @ =gMain -	ldr r4, _0803E220 @ =0x0000043d -	adds r0, r4 -	ldrb r1, [r0] -	movs r0, 0x2 -	ands r0, r1 -	cmp r0, 0 -	beq _0803E22C -	ldr r2, _0803E224 @ =gEnigmaBerries -	ldr r0, _0803E228 @ =gUnknown_02024E6C -	ldrb r1, [r0] -	lsls r0, r1, 3 -	subs r0, r1 -	lsls r0, 2 -	adds r0, r2 -	ldrb r0, [r0, 0x7] -	b _0803E248 -	.align 2, 0 -_0803E21C: .4byte gMain -_0803E220: .4byte 0x0000043d -_0803E224: .4byte gEnigmaBerries -_0803E228: .4byte gUnknown_02024E6C -_0803E22C: -	ldr r0, _0803E238 @ =gSaveBlock1 -	ldr r5, _0803E23C @ =0x00003688 -	adds r0, r5 -	ldrb r0, [r0] -	b _0803E248 -	.align 2, 0 -_0803E238: .4byte gSaveBlock1 -_0803E23C: .4byte 0x00003688 -_0803E240: -	bl ItemId_GetHoldEffect -	lsls r0, 24 -	lsrs r0, 24 -_0803E248: -	str r0, [sp, 0x30] -	ldr r1, _0803E2A4 @ =gUnknown_02024C0B -	ldr r0, _0803E2A8 @ =gUnknown_02024E6C -	ldrb r2, [r0] -	strb r2, [r1] -	ldr r0, _0803E2AC @ =gMain -	ldr r1, _0803E2B0 @ =0x0000043d -	adds r0, r1 -	ldrb r1, [r0] -	movs r0, 0x2 -	ands r0, r1 -	lsls r0, 24 -	lsrs r1, r0, 24 -	cmp r1, 0 -	beq _0803E2E8 -	ldr r0, _0803E2B4 @ =gUnknown_02024A60 -	strb r2, [r0] -	ldrb r0, [r0] -	bl battle_side_get_owner -	lsls r0, 24 -	lsrs r0, 24 -	negs r1, r0 -	orrs r1, r0 -	lsrs r1, 31 -	str r1, [sp, 0x18] -	ldr r0, _0803E2B8 @ =gUnknown_02024A68 -	ldr r4, [sp, 0x8] -	subs r4, 0xD -	ldrb r0, [r0] -	cmp r1, r0 -	bge _0803E2F4 -	ldr r2, _0803E2BC @ =gUnknown_02024A6A -	lsls r0, r1, 1 -	adds r0, r2 -	ldrh r3, [r0] -	ldr r5, [sp, 0xC] -	lsls r0, r5, 16 -	lsrs r1, r0, 16 -	adds r5, r0, 0 -	cmp r3, r1 -	bne _0803E2C0 -	ldr r0, [sp, 0x18] -	str r0, [sp, 0x34] -	b _0803E2F4 -	.align 2, 0 -_0803E2A4: .4byte gUnknown_02024C0B -_0803E2A8: .4byte gUnknown_02024E6C -_0803E2AC: .4byte gMain -_0803E2B0: .4byte 0x0000043d -_0803E2B4: .4byte gUnknown_02024A60 -_0803E2B8: .4byte gUnknown_02024A68 -_0803E2BC: .4byte gUnknown_02024A6A -_0803E2C0: -	ldr r1, [sp, 0x18] -	adds r1, 0x2 -	str r1, [sp, 0x18] -	ldr r0, _0803E2E4 @ =gUnknown_02024A68 -	ldrb r0, [r0] -	cmp r1, r0 -	bge _0803E2F4 -	lsls r0, r1, 1 -	adds r0, r2 -	ldrh r1, [r0] -	lsrs r0, r5, 16 -	cmp r1, r0 -	bne _0803E2C0 -	ldr r2, [sp, 0x18] -	lsls r0, r2, 24 -	lsrs r0, 24 -	str r0, [sp, 0x34] -	b _0803E2F4 -	.align 2, 0 -_0803E2E4: .4byte gUnknown_02024A68 -_0803E2E8: -	ldr r0, _0803E310 @ =gUnknown_02024A60 -	strb r1, [r0] -	movs r3, 0x4 -	str r3, [sp, 0x34] -	ldr r4, [sp, 0x8] -	subs r4, 0xD -_0803E2F4: -	lsls r0, r4, 16 -	lsrs r0, 16 -	cmp r0, 0xA5 -	bhi _0803E36C -	ldr r1, _0803E314 @ =gItemEffectTable -	lsls r0, r4, 2 -	adds r0, r1 -	ldr r0, [r0] -	cmp r0, 0 -	bne _0803E318 -	ldr r4, [sp, 0x8] -	cmp r4, 0xAF -	beq _0803E31E -	b _0803E36C -	.align 2, 0 -_0803E310: .4byte gUnknown_02024A60 -_0803E314: .4byte gItemEffectTable -_0803E318: -	ldr r5, [sp, 0x8] -	cmp r5, 0xAF -	bne _0803E372 -_0803E31E: -	ldr r0, _0803E340 @ =gMain -	ldr r1, _0803E344 @ =0x0000043d -	adds r0, r1 -	ldrb r1, [r0] -	movs r0, 0x2 -	ands r0, r1 -	cmp r0, 0 -	beq _0803E350 -	ldr r0, _0803E348 @ =gUnknown_02024A60 -	ldrb r1, [r0] -	lsls r0, r1, 3 -	subs r0, r1 -	lsls r0, 2 -	ldr r1, _0803E34C @ =gUnknown_02024DF8 -	adds r0, r1 -	b _0803E372 -	.align 2, 0 -_0803E340: .4byte gMain -_0803E344: .4byte 0x0000043d -_0803E348: .4byte gUnknown_02024A60 -_0803E34C: .4byte gUnknown_02024DF8 -_0803E350: -	ldr r2, _0803E358 @ =gSaveBlock1 + 0x3676 -	str r2, [sp, 0x20] -	b _0803E374 -	.align 2, 0 -_0803E358: .4byte gSaveBlock1 + 0x3676 -_0803E35C: -	mov r0, r8 -	movs r2, 0 -	ldr r3, [sp, 0xC] -	bl BeginEvolutionScene -	movs r0, 0 -	bl _0803F15C -_0803E36C: -	movs r0, 0x1 -	bl _0803F15C -_0803E372: -	str r0, [sp, 0x20] -_0803E374: -	movs r3, 0 -	str r3, [sp, 0x18] -_0803E378: -	ldr r4, [sp, 0x18] -	cmp r4, 0x5 -	bls _0803E382 -	bl _0803F14C -_0803E382: -	lsls r0, r4, 2 -	ldr r1, _0803E38C @ =_0803E390 -	adds r0, r1 -	ldr r0, [r0] -	mov pc, r0 -	.align 2, 0 -_0803E38C: .4byte _0803E390 -	.align 2, 0 -_0803E390: -	.4byte _0803E3A8 -	.4byte _0803E474 -	.4byte _0803E508 -	.4byte _0803E59C -	.4byte _0803E77C -	.4byte _0803EE1E -_0803E3A8: -	ldr r5, [sp, 0x20] -	ldr r0, [sp, 0x18] -	adds r2, r5, r0 -	ldrb r1, [r2] -	movs r0, 0x80 -	ands r0, r1 -	adds r6, r2, 0 -	cmp r0, 0 -	beq _0803E3F0 -	ldr r0, _0803E460 @ =gMain -	ldr r1, _0803E464 @ =0x0000043d -	adds r0, r1 -	ldrb r1, [r0] -	movs r0, 0x2 -	ands r0, r1 -	cmp r0, 0 -	beq _0803E3F0 -	ldr r2, [sp, 0x34] -	cmp r2, 0x4 -	beq _0803E3F0 -	ldr r1, _0803E468 @ =gBattleMons -	movs r0, 0x58 -	muls r0, r2 -	adds r1, 0x50 -	adds r2, r0, r1 -	ldr r1, [r2] -	movs r0, 0xF0 -	lsls r0, 12 -	ands r0, r1 -	cmp r0, 0 -	beq _0803E3F0 -	ldr r0, _0803E46C @ =0xfff0ffff -	ands r1, r0 -	str r1, [r2] -	movs r3, 0 -	str r3, [sp, 0x1C] -_0803E3F0: -	ldrb r1, [r6] -	movs r0, 0x30 -	ands r0, r1 -	cmp r0, 0 -	beq _0803E41E -	ldr r1, _0803E468 @ =gBattleMons -	ldr r0, _0803E470 @ =gUnknown_02024A60 -	ldrb r2, [r0] -	movs r0, 0x58 -	muls r0, r2 -	adds r1, 0x50 -	adds r2, r0, r1 -	ldr r1, [r2] -	movs r3, 0x80 -	lsls r3, 13 -	adds r0, r1, 0 -	ands r0, r3 -	cmp r0, 0 -	bne _0803E41E -	orrs r1, r3 -	str r1, [r2] -	movs r4, 0 -	str r4, [sp, 0x1C] -_0803E41E: -	ldrb r0, [r6] -	movs r3, 0xF -	ands r3, r0 -	cmp r3, 0 -	bne _0803E42C -	bl _0803F14C -_0803E42C: -	ldr r6, _0803E468 @ =gBattleMons -	ldr r5, _0803E470 @ =gUnknown_02024A60 -	ldrb r0, [r5] -	movs r4, 0x58 -	muls r0, r4 -	adds r1, r0, r6 -	ldrb r2, [r1, 0x19] -	movs r0, 0x19 -	ldrsb r0, [r1, r0] -	cmp r0, 0xB -	ble _0803E446 -	bl _0803F14C -_0803E446: -	adds r0, r2, r3 -	strb r0, [r1, 0x19] -	ldrb r0, [r5] -	muls r0, r4 -	adds r1, r0, r6 -	movs r0, 0x19 -	ldrsb r0, [r1, r0] -	cmp r0, 0xC -	bgt _0803E45A -	b _0803E74E -_0803E45A: -	movs r0, 0xC -	strb r0, [r1, 0x19] -	b _0803E74E -	.align 2, 0 -_0803E460: .4byte gMain -_0803E464: .4byte 0x0000043d -_0803E468: .4byte gBattleMons -_0803E46C: .4byte 0xfff0ffff -_0803E470: .4byte gUnknown_02024A60 -_0803E474: -	ldr r0, [sp, 0x20] -	ldr r1, [sp, 0x18] -	adds r2, r0, r1 -	ldrb r1, [r2] -	movs r0, 0xF0 -	ands r0, r1 -	lsls r3, r0, 24 -	adds r6, r2, 0 -	cmp r3, 0 -	beq _0803E4BA -	ldr r7, _0803E500 @ =gBattleMons -	ldr r5, _0803E504 @ =gUnknown_02024A60 -	ldrb r0, [r5] -	movs r4, 0x58 -	muls r0, r4 -	adds r1, r0, r7 -	ldrb r2, [r1, 0x1A] -	movs r0, 0x1A -	ldrsb r0, [r1, r0] -	cmp r0, 0xB -	bgt _0803E4BA -	lsrs r0, r3, 28 -	adds r0, r2, r0 -	strb r0, [r1, 0x1A] -	ldrb r0, [r5] -	muls r0, r4 -	adds r1, r0, r7 -	movs r0, 0x1A -	ldrsb r0, [r1, r0] -	cmp r0, 0xC -	ble _0803E4B6 -	movs r0, 0xC -	strb r0, [r1, 0x1A] -_0803E4B6: -	movs r2, 0 -	str r2, [sp, 0x1C] -_0803E4BA: -	ldrb r0, [r6] -	movs r3, 0xF -	ands r3, r0 -	cmp r3, 0 -	bne _0803E4C8 -	bl _0803F14C -_0803E4C8: -	ldr r6, _0803E500 @ =gBattleMons -	ldr r5, _0803E504 @ =gUnknown_02024A60 -	ldrb r0, [r5] -	movs r4, 0x58 -	muls r0, r4 -	adds r1, r0, r6 -	ldrb r2, [r1, 0x1B] -	movs r0, 0x1B -	ldrsb r0, [r1, r0] -	cmp r0, 0xB -	ble _0803E4E2 -	bl _0803F14C -_0803E4E2: -	adds r0, r2, r3 -	strb r0, [r1, 0x1B] -	ldrb r0, [r5] -	muls r0, r4 -	adds r1, r0, r6 -	movs r0, 0x1B -	ldrsb r0, [r1, r0] -	cmp r0, 0xC -	ble _0803E4F8 -	movs r0, 0xC -	strb r0, [r1, 0x1B] -_0803E4F8: -	movs r3, 0 -	str r3, [sp, 0x1C] -	bl _0803F14C -	.align 2, 0 -_0803E500: .4byte gBattleMons -_0803E504: .4byte gUnknown_02024A60 -_0803E508: -	ldr r4, [sp, 0x20] -	ldr r5, [sp, 0x18] -	adds r2, r4, r5 -	ldrb r1, [r2] -	movs r0, 0xF0 -	ands r0, r1 -	lsls r3, r0, 24 -	adds r6, r2, 0 -	cmp r3, 0 -	beq _0803E54E -	ldr r7, _0803E594 @ =gBattleMons -	ldr r5, _0803E598 @ =gUnknown_02024A60 -	ldrb r0, [r5] -	movs r4, 0x58 -	muls r0, r4 -	adds r1, r0, r7 -	ldrb r2, [r1, 0x1E] -	movs r0, 0x1E -	ldrsb r0, [r1, r0] -	cmp r0, 0xB -	bgt _0803E54E -	lsrs r0, r3, 28 -	adds r0, r2, r0 -	strb r0, [r1, 0x1E] -	ldrb r0, [r5] -	muls r0, r4 -	adds r1, r0, r7 -	movs r0, 0x1E -	ldrsb r0, [r1, r0] -	cmp r0, 0xC -	ble _0803E54A -	movs r0, 0xC -	strb r0, [r1, 0x1E] -_0803E54A: -	movs r0, 0 -	str r0, [sp, 0x1C] -_0803E54E: -	ldrb r0, [r6] -	movs r3, 0xF -	ands r3, r0 -	cmp r3, 0 -	bne _0803E55C -	bl _0803F14C -_0803E55C: -	ldr r6, _0803E594 @ =gBattleMons -	ldr r5, _0803E598 @ =gUnknown_02024A60 -	ldrb r0, [r5] -	movs r4, 0x58 -	muls r0, r4 -	adds r1, r0, r6 -	ldrb r2, [r1, 0x1C] -	movs r0, 0x1C -	ldrsb r0, [r1, r0] -	cmp r0, 0xB -	ble _0803E576 -	bl _0803F14C -_0803E576: -	adds r0, r2, r3 -	strb r0, [r1, 0x1C] -	ldrb r0, [r5] -	muls r0, r4 -	adds r1, r0, r6 -	movs r0, 0x1C -	ldrsb r0, [r1, r0] -	cmp r0, 0xC -	ble _0803E58C -	movs r0, 0xC -	strb r0, [r1, 0x1C] -_0803E58C: -	movs r1, 0 -	str r1, [sp, 0x1C] -	bl _0803F14C -	.align 2, 0 -_0803E594: .4byte gBattleMons -_0803E598: .4byte gUnknown_02024A60 -_0803E59C: -	ldr r3, [sp, 0x20] -	ldr r4, [sp, 0x18] -	adds r2, r3, r4 -	ldrb r1, [r2] -	movs r0, 0x80 -	ands r0, r1 -	adds r6, r2, 0 -	cmp r0, 0 -	beq _0803E5E4 -	ldr r5, _0803E758 @ =gUnknown_02024C80 -	ldr r4, _0803E75C @ =gUnknown_02024A60 -	ldrb r0, [r4] -	bl battle_side_get_owner -	lsls r0, 24 -	lsrs r0, 24 -	lsls r1, r0, 1 -	adds r1, r0 -	lsls r1, 2 -	adds r1, r5 -	ldrb r0, [r1, 0x2] -	cmp r0, 0 -	bne _0803E5E4 -	ldrb r0, [r4] -	bl battle_side_get_owner -	lsls r0, 24 -	lsrs r0, 24 -	lsls r1, r0, 1 -	adds r1, r0 -	lsls r1, 2 -	adds r1, r5 -	movs r0, 0x5 -	strb r0, [r1, 0x2] -	movs r5, 0 -	str r5, [sp, 0x1C] -_0803E5E4: -	ldrb r1, [r6] -	movs r0, 0x40 -	ands r0, r1 -	cmp r0, 0 -	beq _0803E646 -	mov r0, r8 -	movs r1, 0x38 -	movs r2, 0 -	bl GetMonData -	cmp r0, 0x64 -	beq _0803E646 -	ldr r5, _0803E760 @ =gExperienceTables -	mov r0, r8 -	movs r1, 0x38 -	movs r2, 0 -	bl GetMonData -	adds r4, r0, 0 -	mov r0, r8 -	movs r1, 0xB -	movs r2, 0 -	bl GetMonData -	adds r4, 0x1 -	lsls r4, 2 -	ldr r2, _0803E764 @ =gBaseStats -	lsls r1, r0, 3 -	subs r1, r0 -	lsls r1, 2 -	adds r1, r2 -	ldrb r1, [r1, 0x13] -	movs r0, 0xCA -	lsls r0, 1 -	muls r0, r1 -	adds r4, r0 -	adds r4, r5 -	ldr r0, [r4] -	str r0, [sp] -	mov r0, r8 -	movs r1, 0x19 -	mov r2, sp -	bl SetMonData -	mov r0, r8 -	bl CalculateMonStats -	movs r0, 0 -	str r0, [sp, 0x1C] -_0803E646: -	ldrb r1, [r6] -	movs r0, 0x20 -	ands r0, r1 -	cmp r0, 0 -	beq _0803E682 -	mov r0, r8 -	ldr r1, [sp, 0xC] -	movs r2, 0x7 -	ldr r3, [sp, 0x34] -	bl HealStatusConditions -	lsls r0, 24 -	cmp r0, 0 -	bne _0803E682 -	ldr r1, [sp, 0x34] -	cmp r1, 0x4 -	beq _0803E67E -	ldr r1, _0803E768 @ =gBattleMons -	movs r0, 0x58 -	ldr r3, [sp, 0x34] -	adds r2, r3, 0 -	muls r2, r0 -	adds r1, 0x50 -	adds r2, r1 -	ldr r0, [r2] -	ldr r1, _0803E76C @ =0xf7ffffff -	ands r0, r1 -	str r0, [r2] -_0803E67E: -	movs r4, 0 -	str r4, [sp, 0x1C] -_0803E682: -	ldrb r1, [r6] -	movs r0, 0x10 -	ands r0, r1 -	cmp r0, 0 -	beq _0803E6A2 -	ldr r2, _0803E770 @ =0x00000f88 -	mov r0, r8 -	ldr r1, [sp, 0xC] -	ldr r3, [sp, 0x34] -	bl HealStatusConditions -	lsls r0, 24 -	cmp r0, 0 -	bne _0803E6A2 -	movs r5, 0 -	str r5, [sp, 0x1C] -_0803E6A2: -	ldrb r1, [r6] -	movs r0, 0x8 -	ands r0, r1 -	cmp r0, 0 -	beq _0803E6C2 -	mov r0, r8 -	ldr r1, [sp, 0xC] -	movs r2, 0x10 -	ldr r3, [sp, 0x34] -	bl HealStatusConditions -	lsls r0, 24 -	cmp r0, 0 -	bne _0803E6C2 -	movs r0, 0 -	str r0, [sp, 0x1C] -_0803E6C2: -	ldrb r1, [r6] -	movs r0, 0x4 -	ands r0, r1 -	cmp r0, 0 -	beq _0803E6E2 -	mov r0, r8 -	ldr r1, [sp, 0xC] -	movs r2, 0x20 -	ldr r3, [sp, 0x34] -	bl HealStatusConditions -	lsls r0, 24 -	cmp r0, 0 -	bne _0803E6E2 -	movs r1, 0 -	str r1, [sp, 0x1C] -_0803E6E2: -	ldrb r1, [r6] -	movs r0, 0x2 -	ands r0, r1 -	cmp r0, 0 -	beq _0803E702 -	mov r0, r8 -	ldr r1, [sp, 0xC] -	movs r2, 0x40 -	ldr r3, [sp, 0x34] -	bl HealStatusConditions -	lsls r0, 24 -	cmp r0, 0 -	bne _0803E702 -	movs r2, 0 -	str r2, [sp, 0x1C] -_0803E702: -	ldrb r1, [r6] -	movs r0, 0x1 -	ands r0, r1 -	cmp r0, 0 -	bne _0803E710 -	bl _0803F14C -_0803E710: -	ldr r0, _0803E774 @ =gMain -	ldr r3, _0803E778 @ =0x0000043d -	adds r0, r3 -	ldrb r1, [r0] -	movs r0, 0x2 -	ands r0, r1 -	cmp r0, 0 -	bne _0803E724 -	bl _0803F14C -_0803E724: -	ldr r4, [sp, 0x34] -	cmp r4, 0x4 -	bne _0803E72E -	bl _0803F14C -_0803E72E: -	ldr r1, _0803E768 @ =gBattleMons -	movs r0, 0x58 -	muls r0, r4 -	adds r1, 0x50 -	adds r2, r0, r1 -	ldr r1, [r2] -	movs r0, 0x7 -	ands r0, r1 -	cmp r0, 0 -	bne _0803E746 -	bl _0803F14C -_0803E746: -	movs r0, 0x8 -	negs r0, r0 -	ands r1, r0 -	str r1, [r2] -_0803E74E: -	movs r5, 0 -	str r5, [sp, 0x1C] -	bl _0803F14C -	.align 2, 0 -_0803E758: .4byte gUnknown_02024C80 -_0803E75C: .4byte gUnknown_02024A60 -_0803E760: .4byte gExperienceTables -_0803E764: .4byte gBaseStats -_0803E768: .4byte gBattleMons -_0803E76C: .4byte 0xf7ffffff -_0803E770: .4byte 0x00000f88 -_0803E774: .4byte gMain -_0803E778: .4byte 0x0000043d -_0803E77C: -	ldr r1, [sp, 0x20] -	ldr r2, [sp, 0x18] -	adds r0, r1, r2 -	ldrb r0, [r0] -	mov r10, r0 -	movs r0, 0x20 -	mov r3, r10 -	ands r0, r3 -	cmp r0, 0 -	beq _0803E854 -	movs r0, 0xDF -	ands r3, r0 -	mov r10, r3 -	mov r0, r8 -	movs r1, 0x15 -	movs r2, 0 -	bl GetMonData -	ldr r1, _0803E880 @ =gUnknown_08208238 -	ldr r4, [sp, 0x10] -	adds r1, r4, r1 -	ldrb r1, [r1] -	ands r0, r1 -	lsls r1, r4, 1 -	lsrs r0, r1 -	str r0, [sp] -	adds r5, r4, 0 -	adds r5, 0xD -	mov r0, r8 -	adds r1, r5, 0 -	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, 0x10] -	bl CalculatePPWithBonus -	lsls r0, 24 -	lsrs r0, 24 -	str r0, [sp, 0x28] -	ldr r0, [sp] -	cmp r0, 0x2 -	bhi _0803E854 -	ldr r0, [sp, 0x28] -	cmp r0, 0x4 -	bls _0803E854 -	mov r0, r8 -	movs r1, 0x15 -	movs r2, 0 -	bl GetMonData -	ldr r1, _0803E884 @ =gUnknown_08208240 -	ldr r2, [sp, 0x10] -	adds r1, r2, r1 -	ldrb r1, [r1] -	adds r0, r1 -	str r0, [sp] -	mov r0, r8 -	movs r1, 0x15 -	mov r2, sp -	bl SetMonData -	mov r0, r8 -	adds r1, r5, 0 -	movs r2, 0 -	bl GetMonData -	lsls r0, 16 -	lsrs r0, 16 -	ldr r1, [sp] -	lsls r1, 24 -	lsrs r1, 24 -	ldr r2, [sp, 0x10] -	bl CalculatePPWithBonus -	lsls r0, 24 -	lsrs r0, 24 -	ldr r3, [sp, 0x28] -	subs r0, r3 -	str r0, [sp] -	ldr r4, [sp, 0x10] -	adds r4, 0x11 -	mov r0, r8 -	adds r1, r4, 0 -	movs r2, 0 -	bl GetMonData -	ldr r1, [sp] -	adds r0, r1 -	str r0, [sp] -	mov r0, r8 -	adds r1, r4, 0 -	mov r2, sp -	bl SetMonData -	movs r4, 0 -	str r4, [sp, 0x1C] -_0803E854: -	movs r5, 0 -	str r5, [sp, 0x28] -	mov r0, r10 -	cmp r0, 0 -	bne _0803E862 -	bl _0803F14C -_0803E862: -	movs r0, 0x1 -	mov r1, r10 -	ands r0, r1 -	cmp r0, 0 -	bne _0803E86E -	b _0803EE0A -_0803E86E: -	ldr r2, [sp, 0x28] -	cmp r2, 0x7 -	bls _0803E876 -	b _0803EE0A -_0803E876: -	lsls r0, r2, 2 -	ldr r1, _0803E888 @ =_0803E88C -	adds r0, r1 -	ldr r0, [r0] -	mov pc, r0 -	.align 2, 0 -_0803E880: .4byte gUnknown_08208238 -_0803E884: .4byte gUnknown_08208240 -_0803E888: .4byte _0803E88C -	.align 2, 0 -_0803E88C: -	.4byte _0803E8AC -	.4byte _0803E8AC -	.4byte _0803E934 -	.4byte _0803EB5C -	.4byte _0803EE0A -	.4byte _0803EE0A -	.4byte _0803EE0A -	.4byte _0803EDF4 -_0803E8AC: -	mov r0, r8 -	bl GetMonEVCount -	lsls r0, 16 -	lsrs r5, r0, 16 -	ldr r0, _0803E8EC @ =0x000001fd -	cmp r5, r0 -	bls _0803E8BE -	b _0803E36C -_0803E8BE: -	ldr r0, _0803E8F0 @ =gUnknown_082082F2 -	ldr r3, [sp, 0x28] -	adds r0, r3, r0 -	ldrb r1, [r0] -	mov r0, r8 -	movs r2, 0 -	bl GetMonData -	adds r1, r0, 0 -	str r1, [sp] -	cmp r1, 0x63 -	bls _0803E8D8 -	b _0803EE0A -_0803E8D8: -	ldr r4, [sp, 0x20] -	ldr r2, [sp, 0x24] -	adds r0, r4, r2 -	ldrb r0, [r0] -	adds r1, r0 -	cmp r1, 0x64 -	bls _0803E8F4 -	adds r0, 0x64 -	subs r4, r0, r1 -	b _0803E8F6 -	.align 2, 0 -_0803E8EC: .4byte 0x000001fd -_0803E8F0: .4byte gUnknown_082082F2 -_0803E8F4: -	adds r4, r0, 0 -_0803E8F6: -	adds r1, r5, r4 -	movs r0, 0xFF -	lsls r0, 1 -	cmp r1, r0 -	bls _0803E904 -	adds r0, r4, r0 -	subs r4, r0, r1 -_0803E904: -	ldr r0, [sp] -	adds r0, r4 -	str r0, [sp] -	ldr r0, _0803E930 @ =gUnknown_082082F2 -	ldr r3, [sp, 0x28] -	adds r0, r3, r0 -	ldrb r1, [r0] -	mov r0, r8 -	mov r2, sp -	bl SetMonData -	mov r0, r8 -	bl CalculateMonStats -	ldr r0, [sp, 0x24] -	adds r0, 0x1 -	lsls r0, 24 -	lsrs r0, 24 -	str r0, [sp, 0x24] -	movs r4, 0 -	str r4, [sp, 0x1C] -	b _0803EE0A -	.align 2, 0 -_0803E930: .4byte gUnknown_082082F2 -_0803E934: -	movs r0, 0x10 -	mov r5, r10 -	ands r0, r5 -	cmp r0, 0 -	beq _0803E9F4 -	mov r0, r8 -	movs r1, 0x39 -	movs r2, 0 -	bl GetMonData -	cmp r0, 0 -	beq _0803E954 -	ldr r0, [sp, 0x24] -	adds r0, 0x1 -	lsls r0, 24 -	b _0803EC9E -_0803E954: -	ldr r0, _0803E99C @ =gMain -	ldr r1, _0803E9A0 @ =0x0000043d -	adds r0, r1 -	ldrb r1, [r0] -	movs r4, 0x2 -	movs r0, 0x2 -	ands r0, r1 -	cmp r0, 0 -	beq _0803EA0A -	ldr r2, [sp, 0x34] -	cmp r2, 0x4 -	beq _0803E9B4 -	ldr r2, _0803E9A4 @ =gUnknown_02024C0C -	ldr r1, _0803E9A8 @ =gBitTable -	ldr r3, [sp, 0x34] -	lsls r0, r3, 2 -	adds r0, r1 -	ldr r1, [r0] -	ldrb r0, [r2] -	bics r0, r1 -	strb r0, [r2] -	ldr r1, _0803E9AC @ =gUnknown_02024A6A -	lsls r0, r3, 1 -	adds r0, r1 -	ldrb r0, [r0] -	bl pokemon_order_func -	adds r1, r0, 0 -	lsls r1, 24 -	lsrs r1, 24 -	ldr r0, [sp, 0x34] -	bl CopyPlayerPartyMonToBattleData -	ldr r0, _0803E9B0 @ =gUnknown_02024A60 -	ldrb r0, [r0] -	b _0803E9CC -	.align 2, 0 -_0803E99C: .4byte gMain -_0803E9A0: .4byte 0x0000043d -_0803E9A4: .4byte gUnknown_02024C0C -_0803E9A8: .4byte gBitTable -_0803E9AC: .4byte gUnknown_02024A6A -_0803E9B0: .4byte gUnknown_02024A60 -_0803E9B4: -	ldr r3, _0803E9E4 @ =gUnknown_02024C0C -	ldr r1, _0803E9E8 @ =gBitTable -	ldr r2, _0803E9EC @ =gUnknown_02024A60 -	ldrb r0, [r2] -	eors r0, r4 -	lsls r0, 2 -	adds r0, r1 -	ldr r1, [r0] -	ldrb r0, [r3] -	bics r0, r1 -	strb r0, [r3] -	ldrb r0, [r2] -_0803E9CC: -	bl battle_side_get_owner -	lsls r0, 24 -	cmp r0, 0 -	bne _0803EA0A -	ldr r1, _0803E9F0 @ =gUnknown_030042E0 -	ldrb r0, [r1, 0x4] -	cmp r0, 0xFE -	bhi _0803EA0A -	adds r0, 0x1 -	strb r0, [r1, 0x4] -	b _0803EA0A -	.align 2, 0 -_0803E9E4: .4byte gUnknown_02024C0C -_0803E9E8: .4byte gBitTable -_0803E9EC: .4byte gUnknown_02024A60 -_0803E9F0: .4byte gUnknown_030042E0 -_0803E9F4: -	mov r0, r8 -	movs r1, 0x39 -	movs r2, 0 -	bl GetMonData -	cmp r0, 0 -	bne _0803EA0A -	ldr r0, [sp, 0x24] -	adds r0, 0x1 -	lsls r0, 24 -	b _0803EC9E -_0803EA0A: -	ldr r1, [sp, 0x24] -	adds r0, r1, 0x1 -	lsls r0, 24 -	lsrs r0, 24 -	str r0, [sp, 0x24] -	ldr r4, [sp, 0x20] -	adds r1, r4, r1 -	ldrb r1, [r1] -	str r1, [sp] -	adds r0, r1, 0 -	cmp r0, 0xFE -	beq _0803EA4C -	cmp r0, 0xFE -	bhi _0803EA2C -	cmp r0, 0xFD -	beq _0803EA62 -	b _0803EA6C -_0803EA2C: -	cmp r1, 0xFF -	bne _0803EA6C -	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 -	subs r4, r0 -	str r4, [sp] -	b _0803EA6C -_0803EA4C: -	mov r0, r8 -	movs r1, 0x3A -	movs r2, 0 -	bl GetMonData -	lsrs r0, 1 -	str r0, [sp] -	cmp r0, 0 -	bne _0803EA6C -	movs r0, 0x1 -	b _0803EA6A -_0803EA62: -	ldr r0, _0803EB24 @ =0x02000000 -	ldr r5, _0803EB28 @ =0x000160fa -	adds r0, r5 -	ldrb r0, [r0] -_0803EA6A: -	str r0, [sp] -_0803EA6C: -	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 _0803EB4C -	ldr r0, [sp, 0x14] -	cmp r0, 0 -	bne _0803EB40 -	mov r0, r8 -	movs r1, 0x39 -	movs r2, 0 -	bl GetMonData -	ldr r1, [sp] -	adds r0, r1 -	str r0, [sp] -	mov r0, r8 -	movs r1, 0x3A -	movs r2, 0 -	bl GetMonData -	ldr r1, [sp] -	cmp r1, r0 -	bls _0803EAB8 -	mov r0, r8 -	movs r1, 0x3A -	movs r2, 0 -	bl GetMonData -	str r0, [sp] -_0803EAB8: -	mov r0, r8 -	movs r1, 0x39 -	mov r2, sp -	bl SetMonData -	ldr r0, _0803EB2C @ =gMain -	ldr r1, _0803EB30 @ =0x0000043d -	adds r0, r1 -	ldrb r1, [r0] -	movs r0, 0x2 -	ands r0, r1 -	cmp r0, 0 -	beq _0803EB48 -	ldr r2, [sp, 0x34] -	cmp r2, 0x4 -	beq _0803EB48 -	ldr r1, _0803EB34 @ =gBattleMons -	movs r0, 0x58 -	muls r0, r2 -	adds r0, r1 -	ldr r1, [sp] -	strh r1, [r0, 0x28] -	movs r0, 0x10 -	mov r3, r10 -	ands r0, r3 -	cmp r0, 0 -	bne _0803EB48 -	ldr r4, _0803EB38 @ =gUnknown_02024A60 -	ldrb r0, [r4] -	bl battle_side_get_owner -	lsls r0, 24 -	cmp r0, 0 -	bne _0803EB48 -	ldr r1, _0803EB3C @ =gUnknown_030042E0 -	ldrb r0, [r1, 0x3] -	cmp r0, 0xFE -	bhi _0803EB08 -	adds r0, 0x1 -	strb r0, [r1, 0x3] -_0803EB08: -	ldrb r5, [r4] -	add r0, sp, 0x34 -	ldrb r0, [r0] -	strb r0, [r4] -	movs r0, 0 -	movs r1, 0 -	movs r2, 0 -	bl dp01_build_cmdbuf_x00_a_b_0 -	ldrb r0, [r4] -	bl dp01_battle_side_mark_buffer_for_execution -	strb r5, [r4] -	b _0803EB48 -	.align 2, 0 -_0803EB24: .4byte 0x02000000 -_0803EB28: .4byte 0x000160fa -_0803EB2C: .4byte gMain -_0803EB30: .4byte 0x0000043d -_0803EB34: .4byte gBattleMons -_0803EB38: .4byte gUnknown_02024A60 -_0803EB3C: .4byte gUnknown_030042E0 -_0803EB40: -	ldr r1, _0803EB58 @ =gUnknown_02024BEC -	ldr r0, [sp] -	negs r0, r0 -	str r0, [r1] -_0803EB48: -	movs r1, 0 -	str r1, [sp, 0x1C] -_0803EB4C: -	movs r0, 0xEF -	mov r2, r10 -	ands r2, r0 -	mov r10, r2 -	b _0803EE0A -	.align 2, 0 -_0803EB58: .4byte gUnknown_02024BEC -_0803EB5C: -	movs r7, 0x2 -	mov r0, r10 -	ands r0, r7 -	cmp r0, 0 -	beq _0803EB68 -	b _0803ECB8 -_0803EB68: -	movs r5, 0 -	ldr r3, [sp, 0x24] -	adds r3, 0x1 -	str r3, [sp, 0x38] -_0803EB70: -	movs r4, 0x11 -	adds r4, r5 -	mov r9, r4 -	mov r0, r8 -	mov r1, r9 -	movs r2, 0 -	bl GetMonData -	str r0, [sp] -	adds r7, r5, 0 -	adds r7, 0xD -	mov r0, r8 -	adds r1, r7, 0 -	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 r0, r5, 24 -	lsrs r6, r0, 24 -	adds r0, r4, 0 -	adds r2, r6, 0 -	bl CalculatePPWithBonus -	lsls r0, 24 -	lsrs r0, 24 -	ldr r1, [sp] -	cmp r1, r0 -	beq _0803EC92 -	ldr r2, [sp, 0x20] -	ldr r3, [sp, 0x24] -	adds r0, r2, r3 -	ldrb r0, [r0] -	adds r0, r1, r0 -	str r0, [sp] -	mov r0, r8 -	adds r1, r7, 0 -	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 -	adds r2, r6, 0 -	bl CalculatePPWithBonus -	lsls r0, 24 -	lsrs r0, 24 -	ldr r1, [sp] -	cmp r1, r0 -	bls _0803EC28 -	mov r0, r8 -	adds r1, r7, 0 -	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 -	adds r2, r6, 0 -	bl CalculatePPWithBonus -	lsls r0, 24 -	lsrs r0, 24 -	str r0, [sp] -_0803EC28: -	mov r0, r8 -	mov r1, r9 -	mov r2, sp -	bl SetMonData -	ldr r0, _0803ECA4 @ =gMain -	ldr r4, _0803ECA8 @ =0x0000043d -	adds r0, r4 -	ldrb r1, [r0] -	movs r0, 0x2 -	ands r0, r1 -	cmp r0, 0 -	beq _0803EC8E -	ldr r0, [sp, 0x34] -	cmp r0, 0x4 -	beq _0803EC8E -	ldr r4, _0803ECAC @ =gBattleMons -	movs r0, 0x58 -	ldr r1, [sp, 0x34] -	adds r3, r1, 0 -	muls r3, r0 -	adds r0, r4, 0 -	adds r0, 0x50 -	adds r0, r3, r0 -	ldr r1, [r0] -	movs r0, 0x80 -	lsls r0, 14 -	ands r1, r0 -	cmp r1, 0 -	bne _0803EC8E -	ldr r1, _0803ECB0 @ =gUnknown_02024CA8 -	ldr r2, [sp, 0x34] -	lsls r0, r2, 3 -	subs r0, r2 -	lsls r0, 2 -	adds r0, r1 -	ldrb r1, [r0, 0x18] -	lsrs r1, 4 -	ldr r2, _0803ECB4 @ =gBitTable -	lsls r0, r5, 2 -	adds r0, r2 -	ldr r0, [r0] -	ands r1, r0 -	cmp r1, 0 -	bne _0803EC8E -	adds r0, r5, r3 -	adds r1, r4, 0 -	adds r1, 0x24 -	adds r0, r1 -	ldr r1, [sp] -	strb r1, [r0] -_0803EC8E: -	movs r3, 0 -	str r3, [sp, 0x1C] -_0803EC92: -	adds r5, 0x1 -	cmp r5, 0x3 -	bgt _0803EC9A -	b _0803EB70 -_0803EC9A: -	ldr r4, [sp, 0x38] -	lsls r0, r4, 24 -_0803EC9E: -	lsrs r0, 24 -	str r0, [sp, 0x24] -	b _0803EE0A -	.align 2, 0 -_0803ECA4: .4byte gMain -_0803ECA8: .4byte 0x0000043d -_0803ECAC: .4byte gBattleMons -_0803ECB0: .4byte gUnknown_02024CA8 -_0803ECB4: .4byte gBitTable -_0803ECB8: -	ldr r6, [sp, 0x10] -	adds r6, 0x11 -	mov r0, r8 -	adds r1, r6, 0 -	movs r2, 0 -	bl GetMonData -	str r0, [sp] -	ldr r5, [sp, 0x10] -	adds r5, 0xD -	mov r0, r8 -	adds r1, r5, 0 -	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, 0x10] -	bl CalculatePPWithBonus -	lsls r0, 24 -	lsrs r0, 24 -	ldr r2, [sp] -	cmp r2, r0 -	bne _0803ED00 -	b _0803EE0A -_0803ED00: -	ldr r1, [sp, 0x24] -	adds r0, r1, 0x1 -	lsls r0, 24 -	lsrs r0, 24 -	str r0, [sp, 0x24] -	ldr r0, [sp, 0x20] -	adds r1, r0, r1 -	ldrb r0, [r1] -	adds r0, r2, r0 -	str r0, [sp] -	mov r0, r8 -	adds r1, r5, 0 -	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, 0x10] -	bl CalculatePPWithBonus -	lsls r0, 24 -	lsrs r0, 24 -	ldr r1, [sp] -	cmp r1, r0 -	bls _0803ED74 -	mov r0, r8 -	adds r1, r5, 0 -	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, 0x10] -	bl CalculatePPWithBonus -	lsls r0, 24 -	lsrs r0, 24 -	str r0, [sp] -_0803ED74: -	mov r0, r8 -	adds r1, r6, 0 -	mov r2, sp -	bl SetMonData -	ldr r0, _0803EDE0 @ =gMain -	ldr r1, _0803EDE4 @ =0x0000043d -	adds r0, r1 -	ldrb r1, [r0] -	adds r0, r7, 0 -	ands r0, r1 -	cmp r0, 0 -	beq _0803EDD8 -	ldr r2, [sp, 0x34] -	cmp r2, 0x4 -	beq _0803EDD8 -	ldr r4, _0803EDE8 @ =gBattleMons -	movs r0, 0x58 -	adds r3, r2, 0 -	muls r3, r0 -	adds r0, r4, 0 -	adds r0, 0x50 -	adds r0, r3, r0 -	ldr r0, [r0] -	movs r1, 0x80 -	lsls r1, 14 -	ands r0, r1 -	cmp r0, 0 -	bne _0803EDD8 -	ldr r1, _0803EDEC @ =gUnknown_02024CA8 -	lsls r0, r2, 3 -	subs r0, r2 -	lsls r0, 2 -	adds r0, r1 -	ldrb r1, [r0, 0x18] -	lsrs r1, 4 -	ldr r2, _0803EDF0 @ =gBitTable -	ldr r5, [sp, 0x10] -	lsls r0, r5, 2 -	adds r0, r2 -	ldr r0, [r0] -	ands r1, r0 -	cmp r1, 0 -	bne _0803EDD8 -	adds r0, r5, r3 -	adds r1, r4, 0 -	adds r1, 0x24 -	adds r0, r1 -	ldr r1, [sp] -	strb r1, [r0] -_0803EDD8: -	movs r0, 0 -	str r0, [sp, 0x1C] -	b _0803EE0A -	.align 2, 0 -_0803EDE0: .4byte gMain -_0803EDE4: .4byte 0x0000043d -_0803EDE8: .4byte gBattleMons -_0803EDEC: .4byte gUnknown_02024CA8 -_0803EDF0: .4byte gBitTable -_0803EDF4: -	mov r0, r8 -	movs r1, 0x2 -	ldr r2, [sp, 0x8] -	bl GetEvolutionTargetSpecies -	lsls r0, 16 -	lsrs r1, r0, 16 -	cmp r1, 0 -	beq _0803EE0A -	bl _0803E35C -_0803EE0A: -	ldr r1, [sp, 0x28] -	adds r1, 0x1 -	str r1, [sp, 0x28] -	mov r2, r10 -	lsrs r2, 1 -	mov r10, r2 -	cmp r2, 0 -	beq _0803EE1C -	b _0803E862 -_0803EE1C: -	b _0803F14C -_0803EE1E: -	ldr r3, [sp, 0x20] -	ldr r4, [sp, 0x18] -	adds r0, r3, r4 -	ldrb r0, [r0] -	mov r10, r0 -	movs r5, 0 -	str r5, [sp, 0x28] -	cmp r0, 0 -	bne _0803EE32 -	b _0803F14C -_0803EE32: -	movs r0, 0x1 -	mov r1, r10 -	ands r0, r1 -	cmp r0, 0 -	bne _0803EE3E -	b _0803F13A -_0803EE3E: -	ldr r2, [sp, 0x28] -	cmp r2, 0x7 -	bls _0803EE46 -	b _0803F13A -_0803EE46: -	lsls r0, r2, 2 -	ldr r1, _0803EE50 @ =_0803EE54 -	adds r0, r1 -	ldr r0, [r0] -	mov pc, r0 -	.align 2, 0 -_0803EE50: .4byte _0803EE54 -	.align 2, 0 -_0803EE54: -	.4byte _0803EE74 -	.4byte _0803EE74 -	.4byte _0803EE74 -	.4byte _0803EE74 -	.4byte _0803EEF8 -	.4byte _0803EFCC -	.4byte _0803F026 -	.4byte _0803F07C -_0803EE74: -	mov r0, r8 -	bl GetMonEVCount -	lsls r0, 16 -	lsrs r5, r0, 16 -	ldr r0, _0803EEBC @ =0x000001fd -	cmp r5, r0 -	bls _0803EE88 -	bl _0803E36C -_0803EE88: -	ldr r0, _0803EEC0 @ =gUnknown_082082F2 -	ldr r4, [sp, 0x28] -	adds r4, 0x2 -	adds r0, r4, r0 -	ldrb r1, [r0] -	mov r0, r8 -	movs r2, 0 -	bl GetMonData -	adds r1, r0, 0 -	str r1, [sp] -	adds r2, r4, 0 -	cmp r1, 0x63 -	bls _0803EEA6 -	b _0803F13A -_0803EEA6: -	ldr r3, [sp, 0x20] -	ldr r4, [sp, 0x24] -	adds r0, r3, r4 -	ldrb r0, [r0] -	adds r1, r0 -	cmp r1, 0x64 -	bls _0803EEC4 -	adds r0, 0x64 -	subs r4, r0, r1 -	b _0803EEC6 -	.align 2, 0 -_0803EEBC: .4byte 0x000001fd -_0803EEC0: .4byte gUnknown_082082F2 -_0803EEC4: -	adds r4, r0, 0 -_0803EEC6: -	adds r1, r5, r4 -	movs r0, 0xFF -	lsls r0, 1 -	cmp r1, r0 -	bls _0803EED4 -	adds r0, r4, r0 -	subs r4, r0, r1 -_0803EED4: -	ldr r0, [sp] -	adds r0, r4 -	str r0, [sp] -	ldr r0, _0803EEF4 @ =gUnknown_082082F2 -	adds r0, r2, r0 -	ldrb r1, [r0] -	mov r0, r8 -	mov r2, sp -	bl SetMonData -	mov r0, r8 -	bl CalculateMonStats -	movs r5, 0 -	str r5, [sp, 0x1C] -	b _0803F130 -	.align 2, 0 -_0803EEF4: .4byte gUnknown_082082F2 -_0803EEF8: -	mov r0, r8 -	movs r1, 0x15 -	movs r2, 0 -	bl GetMonData -	ldr r1, _0803EFC0 @ =gUnknown_08208238 -	ldr r2, [sp, 0x10] -	adds r1, r2, r1 -	ldrb r1, [r1] -	ands r0, r1 -	lsls r1, r2, 1 -	lsrs r0, r1 -	str r0, [sp] -	cmp r0, 0x2 -	bls _0803EF18 -	b _0803F13A -_0803EF18: -	adds r5, r2, 0 -	adds r5, 0xD -	mov r0, r8 -	adds r1, r5, 0 -	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, 0x10] -	bl CalculatePPWithBonus -	lsls r0, 24 -	lsrs r4, r0, 24 -	mov r0, r8 -	movs r1, 0x15 -	movs r2, 0 -	bl GetMonData -	str r0, [sp] -	ldr r1, _0803EFC4 @ =gUnknown_0820823C -	ldr r3, [sp, 0x10] -	adds r1, r3, r1 -	ldrb r2, [r1] -	ands r2, r0 -	str r2, [sp] -	ldr r0, _0803EFC8 @ =gUnknown_08208240 -	adds r0, r3, r0 -	ldrb r1, [r0] -	lsls r0, r1, 1 -	adds r0, r1 -	adds r2, r0 -	str r2, [sp] -	mov r0, r8 -	movs r1, 0x15 -	mov r2, sp -	bl SetMonData -	mov r0, r8 -	adds r1, r5, 0 -	movs r2, 0 -	bl GetMonData -	lsls r0, 16 -	lsrs r0, 16 -	ldr r1, [sp] -	lsls r1, 24 -	lsrs r1, 24 -	ldr r2, [sp, 0x10] -	bl CalculatePPWithBonus -	lsls r0, 24 -	lsrs r0, 24 -	subs r0, r4 -	str r0, [sp] -	ldr r4, [sp, 0x10] -	adds r4, 0x11 -	mov r0, r8 -	adds r1, r4, 0 -	movs r2, 0 -	bl GetMonData -	ldr r1, [sp] -	adds r0, r1 -	str r0, [sp] -	mov r0, r8 -	adds r1, r4, 0 -	mov r2, sp -	bl SetMonData -	movs r4, 0 -	str r4, [sp, 0x1C] -	b _0803F13A -	.align 2, 0 -_0803EFC0: .4byte gUnknown_08208238 -_0803EFC4: .4byte gUnknown_0820823C -_0803EFC8: .4byte gUnknown_08208240 -_0803EFCC: -	mov r0, r8 -	movs r1, 0x20 -	movs r2, 0 -	bl GetMonData -	cmp r0, 0x63 -	bls _0803EFDC -	b _0803F130 -_0803EFDC: -	ldr r5, [sp, 0x1C] -	cmp r5, 0 -	beq _0803EFE4 -	b _0803F130 -_0803EFE4: -	ldr r0, [sp, 0x2C] -	cmp r0, 0 -	beq _0803EFEC -	b _0803F130 -_0803EFEC: -	ldr r1, [sp, 0x20] -	ldr r2, [sp, 0x24] -	adds r0, r1, r2 -	ldrb r0, [r0] -	str r0, [sp, 0x2C] -	mov r0, r8 -	movs r1, 0x20 -	movs r2, 0 -	bl GetMonData -	adds r5, r0, 0 -	str r5, [sp, 0x4] -	ldr r3, [sp, 0x2C] -	lsls r4, r3, 24 -	asrs r1, r4, 24 -	cmp r1, 0 -	ble _0803F0D0 -	ldr r0, [sp, 0x30] -	cmp r0, 0x1B -	bne _0803F0D0 -	movs r0, 0x96 -	muls r0, r1 -	movs r1, 0x64 -	bl __divsi3 -	adds r0, r5, r0 -	str r0, [sp, 0x4] -	adds r2, r4, 0 -	b _0803F0DC -_0803F026: -	mov r0, r8 -	movs r1, 0x20 -	movs r2, 0 -	bl GetMonData -	cmp r0, 0x63 -	bls _0803F130 -	mov r0, r8 -	movs r1, 0x20 -	movs r2, 0 -	bl GetMonData -	cmp r0, 0xC7 -	bhi _0803F130 -	ldr r2, [sp, 0x1C] -	cmp r2, 0 -	bne _0803F130 -	ldr r3, [sp, 0x2C] -	cmp r3, 0 -	bne _0803F130 -	ldr r4, [sp, 0x20] -	ldr r5, [sp, 0x24] -	adds r0, r4, r5 -	ldrb r0, [r0] -	str r0, [sp, 0x2C] -	mov r0, r8 -	movs r1, 0x20 -	movs r2, 0 -	bl GetMonData -	adds r4, r0, 0 -	str r4, [sp, 0x4] -	ldr r0, [sp, 0x2C] -	lsls r5, r0, 24 -	asrs r1, r5, 24 -	cmp r1, 0 -	ble _0803F076 -	ldr r2, [sp, 0x30] -	cmp r2, 0x1B -	beq _0803F0BE -_0803F076: -	ldr r3, [sp, 0x2C] -	lsls r2, r3, 24 -	b _0803F0D4 -_0803F07C: -	mov r0, r8 -	movs r1, 0x20 -	movs r2, 0 -	bl GetMonData -	cmp r0, 0xC7 -	bls _0803F130 -	ldr r4, [sp, 0x1C] -	cmp r4, 0 -	bne _0803F130 -	ldr r5, [sp, 0x2C] -	cmp r5, 0 -	bne _0803F130 -	ldr r1, [sp, 0x20] -	ldr r2, [sp, 0x24] -	adds r0, r1, r2 -	ldrb r0, [r0] -	str r0, [sp, 0x2C] -	mov r0, r8 -	movs r1, 0x20 -	movs r2, 0 -	bl GetMonData -	adds r4, r0, 0 -	str r4, [sp, 0x4] -	ldr r3, [sp, 0x2C] -	lsls r5, r3, 24 -	asrs r1, r5, 24 -	cmp r1, 0 -	ble _0803F0D0 -	ldr r0, [sp, 0x30] -	cmp r0, 0x1B -	bne _0803F0D0 -_0803F0BE: -	movs r0, 0x96 -	muls r0, r1 -	movs r1, 0x64 -	bl __divsi3 -	adds r0, r4, r0 -	str r0, [sp, 0x4] -	adds r2, r5, 0 -	b _0803F0DC -_0803F0D0: -	ldr r1, [sp, 0x2C] -	lsls r2, r1, 24 -_0803F0D4: -	asrs r1, r2, 24 -	ldr r0, [sp, 0x4] -	adds r0, r1 -	str r0, [sp, 0x4] -_0803F0DC: -	cmp r2, 0 -	ble _0803F112 -	mov r0, r8 -	movs r1, 0x26 -	movs r2, 0 -	bl GetMonData -	cmp r0, 0xB -	bne _0803F0F4 -	ldr r0, [sp, 0x4] -	adds r0, 0x1 -	str r0, [sp, 0x4] -_0803F0F4: -	mov r0, r8 -	movs r1, 0x23 -	movs r2, 0 -	bl GetMonData -	adds r4, r0, 0 -	bl sav1_map_get_name -	lsls r0, 24 -	lsrs r0, 24 -	cmp r4, r0 -	bne _0803F112 -	ldr r0, [sp, 0x4] -	adds r0, 0x1 -	str r0, [sp, 0x4] -_0803F112: -	ldr r0, [sp, 0x4] -	cmp r0, 0 -	bge _0803F11C -	movs r0, 0 -	str r0, [sp, 0x4] -_0803F11C: -	ldr r0, [sp, 0x4] -	cmp r0, 0xFF -	ble _0803F126 -	movs r0, 0xFF -	str r0, [sp, 0x4] -_0803F126: -	add r2, sp, 0x4 -	mov r0, r8 -	movs r1, 0x20 -	bl SetMonData -_0803F130: -	ldr r0, [sp, 0x24] -	adds r0, 0x1 -	lsls r0, 24 -	lsrs r0, 24 -	str r0, [sp, 0x24] -_0803F13A: -	ldr r2, [sp, 0x28] -	adds r2, 0x1 -	str r2, [sp, 0x28] -	mov r3, r10 -	lsrs r3, 1 -	mov r10, r3 -	cmp r3, 0 -	beq _0803F14C -	b _0803EE32 -_0803F14C: -	ldr r4, [sp, 0x18] -	adds r4, 0x1 -	str r4, [sp, 0x18] -	cmp r4, 0x5 -	bgt _0803F15A -	bl _0803E378 -_0803F15A: -	ldr r0, [sp, 0x1C] -_0803F15C: -	add sp, 0x3C -	pop {r3-r5} -	mov r8, r3 -	mov r9, r4 -	mov r10, r5 -	pop {r4-r7} -	pop {r1} -	bx r1 -	thumb_func_end sub_803E1B0 - -	thumb_func_start HealStatusConditions -HealStatusConditions: @ 803F16C -	push {r4-r6,lr} -	sub sp, 0x4 -	adds r5, r0, 0 -	adds r4, r2, 0 -	lsls r3, 24 -	lsrs r6, r3, 24 -	movs r1, 0x37 -	movs r2, 0 -	bl GetMonData -	adds r1, r0, 0 -	str r1, [sp] -	ands r0, r4 -	cmp r0, 0 -	beq _0803F1D0 -	mvns r4, r4 -	ands r1, r4 -	str r1, [sp] -	adds r0, r5, 0 -	movs r1, 0x37 -	mov r2, sp -	bl SetMonData -	ldr r0, _0803F1C4 @ =gMain -	ldr r1, _0803F1C8 @ =0x0000043d -	adds r0, r1 -	ldrb r1, [r0] -	movs r0, 0x2 -	ands r0, r1 -	cmp r0, 0 -	beq _0803F1BE -	cmp r6, 0x4 -	beq _0803F1BE -	ldr r0, _0803F1CC @ =gBattleMons -	movs r1, 0x58 -	muls r1, r6 -	adds r0, 0x4C -	adds r1, r0 -	ldr r0, [r1] -	ands r0, r4 -	str r0, [r1] -_0803F1BE: -	movs r0, 0 -	b _0803F1D2 -	.align 2, 0 -_0803F1C4: .4byte gMain -_0803F1C8: .4byte 0x0000043d -_0803F1CC: .4byte gBattleMons -_0803F1D0: -	movs r0, 0x1 -_0803F1D2: -	add sp, 0x4 -	pop {r4-r6} -	pop {r1} -	bx r1 -	thumb_func_end HealStatusConditions - -	thumb_func_start sub_803F1DC -sub_803F1DC: @ 803F1DC -	push {r4-r7,lr} -	lsls r0, 16 -	lsrs r3, r0, 16 -	lsls r1, 24 -	lsrs r4, r1, 24 -	lsls r2, 24 -	lsrs r5, r2, 24 -	movs r7, 0x6 -	ldr r1, _0803F204 @ =gItemEffectTable -	adds r0, r3, 0 -	subs r0, 0xD -	lsls r0, 2 -	adds r0, r1 -	ldr r0, [r0] -	cmp r0, 0 -	bne _0803F208 -	cmp r3, 0xAF -	beq _0803F20C -_0803F200: -	movs r0, 0 -	b _0803F31C -	.align 2, 0 -_0803F204: .4byte gItemEffectTable -_0803F208: -	cmp r3, 0xAF -	bne _0803F21A -_0803F20C: -	ldr r0, _0803F22C @ =gUnknown_02024A60 -	ldrb r1, [r0] -	lsls r0, r1, 3 -	subs r0, r1 -	lsls r0, 2 -	ldr r1, _0803F230 @ =gUnknown_02024DF8 -	adds r0, r1 -_0803F21A: -	mov r12, r0 -	movs r2, 0 -_0803F21E: -	cmp r2, 0x4 -	beq _0803F23E -	cmp r2, 0x4 -	ble _0803F234 -	cmp r2, 0x5 -	beq _0803F2C8 -	b _0803F312 -	.align 2, 0 -_0803F22C: .4byte gUnknown_02024A60 -_0803F230: .4byte gUnknown_02024DF8 -_0803F234: -	cmp r2, 0 -	blt _0803F312 -	cmp r2, r4 -	bne _0803F312 -	b _0803F200 -_0803F23E: -	mov r0, r12 -	ldrb r3, [r0, 0x4] -	movs r0, 0x20 -	ands r0, r3 -	cmp r0, 0 -	beq _0803F24E -	movs r0, 0xDF -	ands r3, r0 -_0803F24E: -	movs r6, 0 -	cmp r3, 0 -	beq _0803F312 -_0803F254: -	movs r0, 0x1 -	ands r0, r3 -	cmp r0, 0 -	beq _0803F2B4 -	cmp r6, 0x7 -	bhi _0803F2B4 -	lsls r0, r6, 2 -	ldr r1, _0803F26C @ =_0803F270 -	adds r0, r1 -	ldr r0, [r0] -	mov pc, r0 -	.align 2, 0 -_0803F26C: .4byte _0803F270 -	.align 2, 0 -_0803F270: -	.4byte _0803F29C -	.4byte _0803F29C -	.4byte _0803F290 -	.4byte _0803F29C -	.4byte _0803F2B4 -	.4byte _0803F2B4 -	.4byte _0803F2B4 -	.4byte _0803F2B0 -_0803F290: -	movs r0, 0x10 -	ands r0, r3 -	cmp r0, 0 -	beq _0803F29C -	movs r0, 0xEF -	ands r3, r0 -_0803F29C: -	cmp r2, r4 -	bne _0803F2A8 -	adds r0, r3, 0 -	ands r0, r5 -	cmp r0, 0 -	bne _0803F31A -_0803F2A8: -	adds r0, r7, 0x1 -	lsls r0, 24 -	lsrs r7, r0, 24 -	b _0803F2B4 -_0803F2B0: -	cmp r2, r4 -	beq _0803F200 -_0803F2B4: -	adds r0, r6, 0x1 -	lsls r0, 24 -	lsrs r6, r0, 24 -	lsrs r3, 1 -	cmp r2, r4 -	bne _0803F2C2 -	lsrs r5, 1 -_0803F2C2: -	cmp r3, 0 -	bne _0803F254 -	b _0803F312 -_0803F2C8: -	mov r0, r12 -	ldrb r3, [r0, 0x5] -	movs r6, 0 -_0803F2CE: -	cmp r3, 0 -	beq _0803F312 -	movs r0, 0x1 -	ands r0, r3 -	cmp r0, 0 -	beq _0803F302 -	cmp r6, 0 -	blt _0803F302 -	cmp r6, 0x6 -	ble _0803F2E8 -	cmp r6, 0x7 -	beq _0803F2FC -	b _0803F302 -_0803F2E8: -	cmp r2, r4 -	bne _0803F2F4 -	adds r0, r3, 0 -	ands r0, r5 -	cmp r0, 0 -	bne _0803F31A -_0803F2F4: -	adds r0, r7, 0x1 -	lsls r0, 24 -	lsrs r7, r0, 24 -	b _0803F302 -_0803F2FC: -	cmp r2, r4 -	bne _0803F302 -	b _0803F200 -_0803F302: -	adds r0, r6, 0x1 -	lsls r0, 24 -	lsrs r6, r0, 24 -	lsrs r3, 1 -	cmp r2, r4 -	bne _0803F2CE -	lsrs r5, 1 -	b _0803F2CE -_0803F312: -	adds r2, 0x1 -	cmp r2, 0x5 -	bgt _0803F31A -	b _0803F21E -_0803F31A: -	adds r0, r7, 0 -_0803F31C: -	pop {r4-r7} -	pop {r1} -	bx r1 -	thumb_func_end sub_803F1DC -  	thumb_func_start sub_803F324  sub_803F324: @ 803F324  	push {lr} diff --git a/asm/pokemon_item_effect.s b/asm/pokemon_item_effect.s new file mode 100644 index 000000000..a8a0ce89d --- /dev/null +++ b/asm/pokemon_item_effect.s @@ -0,0 +1,1970 @@ +	.include "constants/gba_constants.inc" +	.include "constants/species_constants.inc" +	.include "asm/macros.inc" + +	.syntax unified + +	.text + +	thumb_func_start ExecuteTableBasedItemEffect_ +ExecuteTableBasedItemEffect_: @ 803E18C +	push {r4,lr} +	sub sp, 0x4 +	lsls r1, 16 +	lsrs r1, 16 +	lsls r2, 24 +	lsrs r2, 24 +	lsls r3, 24 +	lsrs r3, 24 +	movs r4, 0 +	str r4, [sp] +	bl sub_803E1B0 +	lsls r0, 24 +	lsrs r0, 24 +	add sp, 0x4 +	pop {r4} +	pop {r1} +	bx r1 +	thumb_func_end ExecuteTableBasedItemEffect_ + +	thumb_func_start sub_803E1B0 +sub_803E1B0: @ 803E1B0 +	push {r4-r7,lr} +	mov r7, r10 +	mov r6, r9 +	mov r5, r8 +	push {r5-r7} +	sub sp, 0x3C +	mov r8, r0 +	ldr r0, [sp, 0x5C] +	lsls r1, 16 +	lsrs r1, 16 +	str r1, [sp, 0x8] +	lsls r2, 24 +	lsrs r2, 24 +	str r2, [sp, 0xC] +	lsls r3, 24 +	lsrs r3, 24 +	str r3, [sp, 0x10] +	lsls r0, 24 +	lsrs r0, 24 +	str r0, [sp, 0x14] +	movs r0, 0x1 +	str r0, [sp, 0x1C] +	movs r1, 0x6 +	str r1, [sp, 0x24] +	movs r2, 0 +	str r2, [sp, 0x2C] +	movs r3, 0x4 +	str r3, [sp, 0x34] +	mov r0, r8 +	movs r1, 0xC +	bl GetMonData +	lsls r0, 16 +	lsrs r0, 16 +	cmp r0, 0xAF +	bne _0803E240 +	ldr r0, _0803E21C @ =gMain +	ldr r4, _0803E220 @ =0x0000043d +	adds r0, r4 +	ldrb r1, [r0] +	movs r0, 0x2 +	ands r0, r1 +	cmp r0, 0 +	beq _0803E22C +	ldr r2, _0803E224 @ =gEnigmaBerries +	ldr r0, _0803E228 @ =gUnknown_02024E6C +	ldrb r1, [r0] +	lsls r0, r1, 3 +	subs r0, r1 +	lsls r0, 2 +	adds r0, r2 +	ldrb r0, [r0, 0x7] +	b _0803E248 +	.align 2, 0 +_0803E21C: .4byte gMain +_0803E220: .4byte 0x0000043d +_0803E224: .4byte gEnigmaBerries +_0803E228: .4byte gUnknown_02024E6C +_0803E22C: +	ldr r0, _0803E238 @ =gSaveBlock1 +	ldr r5, _0803E23C @ =0x00003688 +	adds r0, r5 +	ldrb r0, [r0] +	b _0803E248 +	.align 2, 0 +_0803E238: .4byte gSaveBlock1 +_0803E23C: .4byte 0x00003688 +_0803E240: +	bl ItemId_GetHoldEffect +	lsls r0, 24 +	lsrs r0, 24 +_0803E248: +	str r0, [sp, 0x30] +	ldr r1, _0803E2A4 @ =gUnknown_02024C0B +	ldr r0, _0803E2A8 @ =gUnknown_02024E6C +	ldrb r2, [r0] +	strb r2, [r1] +	ldr r0, _0803E2AC @ =gMain +	ldr r1, _0803E2B0 @ =0x0000043d +	adds r0, r1 +	ldrb r1, [r0] +	movs r0, 0x2 +	ands r0, r1 +	lsls r0, 24 +	lsrs r1, r0, 24 +	cmp r1, 0 +	beq _0803E2E8 +	ldr r0, _0803E2B4 @ =gUnknown_02024A60 +	strb r2, [r0] +	ldrb r0, [r0] +	bl battle_side_get_owner +	lsls r0, 24 +	lsrs r0, 24 +	negs r1, r0 +	orrs r1, r0 +	lsrs r1, 31 +	str r1, [sp, 0x18] +	ldr r0, _0803E2B8 @ =gUnknown_02024A68 +	ldr r4, [sp, 0x8] +	subs r4, 0xD +	ldrb r0, [r0] +	cmp r1, r0 +	bge _0803E2F4 +	ldr r2, _0803E2BC @ =gUnknown_02024A6A +	lsls r0, r1, 1 +	adds r0, r2 +	ldrh r3, [r0] +	ldr r5, [sp, 0xC] +	lsls r0, r5, 16 +	lsrs r1, r0, 16 +	adds r5, r0, 0 +	cmp r3, r1 +	bne _0803E2C0 +	ldr r0, [sp, 0x18] +	str r0, [sp, 0x34] +	b _0803E2F4 +	.align 2, 0 +_0803E2A4: .4byte gUnknown_02024C0B +_0803E2A8: .4byte gUnknown_02024E6C +_0803E2AC: .4byte gMain +_0803E2B0: .4byte 0x0000043d +_0803E2B4: .4byte gUnknown_02024A60 +_0803E2B8: .4byte gUnknown_02024A68 +_0803E2BC: .4byte gUnknown_02024A6A +_0803E2C0: +	ldr r1, [sp, 0x18] +	adds r1, 0x2 +	str r1, [sp, 0x18] +	ldr r0, _0803E2E4 @ =gUnknown_02024A68 +	ldrb r0, [r0] +	cmp r1, r0 +	bge _0803E2F4 +	lsls r0, r1, 1 +	adds r0, r2 +	ldrh r1, [r0] +	lsrs r0, r5, 16 +	cmp r1, r0 +	bne _0803E2C0 +	ldr r2, [sp, 0x18] +	lsls r0, r2, 24 +	lsrs r0, 24 +	str r0, [sp, 0x34] +	b _0803E2F4 +	.align 2, 0 +_0803E2E4: .4byte gUnknown_02024A68 +_0803E2E8: +	ldr r0, _0803E310 @ =gUnknown_02024A60 +	strb r1, [r0] +	movs r3, 0x4 +	str r3, [sp, 0x34] +	ldr r4, [sp, 0x8] +	subs r4, 0xD +_0803E2F4: +	lsls r0, r4, 16 +	lsrs r0, 16 +	cmp r0, 0xA5 +	bhi _0803E36C +	ldr r1, _0803E314 @ =gItemEffectTable +	lsls r0, r4, 2 +	adds r0, r1 +	ldr r0, [r0] +	cmp r0, 0 +	bne _0803E318 +	ldr r4, [sp, 0x8] +	cmp r4, 0xAF +	beq _0803E31E +	b _0803E36C +	.align 2, 0 +_0803E310: .4byte gUnknown_02024A60 +_0803E314: .4byte gItemEffectTable +_0803E318: +	ldr r5, [sp, 0x8] +	cmp r5, 0xAF +	bne _0803E372 +_0803E31E: +	ldr r0, _0803E340 @ =gMain +	ldr r1, _0803E344 @ =0x0000043d +	adds r0, r1 +	ldrb r1, [r0] +	movs r0, 0x2 +	ands r0, r1 +	cmp r0, 0 +	beq _0803E350 +	ldr r0, _0803E348 @ =gUnknown_02024A60 +	ldrb r1, [r0] +	lsls r0, r1, 3 +	subs r0, r1 +	lsls r0, 2 +	ldr r1, _0803E34C @ =gUnknown_02024DF8 +	adds r0, r1 +	b _0803E372 +	.align 2, 0 +_0803E340: .4byte gMain +_0803E344: .4byte 0x0000043d +_0803E348: .4byte gUnknown_02024A60 +_0803E34C: .4byte gUnknown_02024DF8 +_0803E350: +	ldr r2, _0803E358 @ =gSaveBlock1 + 0x3676 +	str r2, [sp, 0x20] +	b _0803E374 +	.align 2, 0 +_0803E358: .4byte gSaveBlock1 + 0x3676 +_0803E35C: +	mov r0, r8 +	movs r2, 0 +	ldr r3, [sp, 0xC] +	bl BeginEvolutionScene +	movs r0, 0 +	bl _0803F15C +_0803E36C: +	movs r0, 0x1 +	bl _0803F15C +_0803E372: +	str r0, [sp, 0x20] +_0803E374: +	movs r3, 0 +	str r3, [sp, 0x18] +_0803E378: +	ldr r4, [sp, 0x18] +	cmp r4, 0x5 +	bls _0803E382 +	bl _0803F14C +_0803E382: +	lsls r0, r4, 2 +	ldr r1, _0803E38C @ =_0803E390 +	adds r0, r1 +	ldr r0, [r0] +	mov pc, r0 +	.align 2, 0 +_0803E38C: .4byte _0803E390 +	.align 2, 0 +_0803E390: +	.4byte _0803E3A8 +	.4byte _0803E474 +	.4byte _0803E508 +	.4byte _0803E59C +	.4byte _0803E77C +	.4byte _0803EE1E +_0803E3A8: +	ldr r5, [sp, 0x20] +	ldr r0, [sp, 0x18] +	adds r2, r5, r0 +	ldrb r1, [r2] +	movs r0, 0x80 +	ands r0, r1 +	adds r6, r2, 0 +	cmp r0, 0 +	beq _0803E3F0 +	ldr r0, _0803E460 @ =gMain +	ldr r1, _0803E464 @ =0x0000043d +	adds r0, r1 +	ldrb r1, [r0] +	movs r0, 0x2 +	ands r0, r1 +	cmp r0, 0 +	beq _0803E3F0 +	ldr r2, [sp, 0x34] +	cmp r2, 0x4 +	beq _0803E3F0 +	ldr r1, _0803E468 @ =gBattleMons +	movs r0, 0x58 +	muls r0, r2 +	adds r1, 0x50 +	adds r2, r0, r1 +	ldr r1, [r2] +	movs r0, 0xF0 +	lsls r0, 12 +	ands r0, r1 +	cmp r0, 0 +	beq _0803E3F0 +	ldr r0, _0803E46C @ =0xfff0ffff +	ands r1, r0 +	str r1, [r2] +	movs r3, 0 +	str r3, [sp, 0x1C] +_0803E3F0: +	ldrb r1, [r6] +	movs r0, 0x30 +	ands r0, r1 +	cmp r0, 0 +	beq _0803E41E +	ldr r1, _0803E468 @ =gBattleMons +	ldr r0, _0803E470 @ =gUnknown_02024A60 +	ldrb r2, [r0] +	movs r0, 0x58 +	muls r0, r2 +	adds r1, 0x50 +	adds r2, r0, r1 +	ldr r1, [r2] +	movs r3, 0x80 +	lsls r3, 13 +	adds r0, r1, 0 +	ands r0, r3 +	cmp r0, 0 +	bne _0803E41E +	orrs r1, r3 +	str r1, [r2] +	movs r4, 0 +	str r4, [sp, 0x1C] +_0803E41E: +	ldrb r0, [r6] +	movs r3, 0xF +	ands r3, r0 +	cmp r3, 0 +	bne _0803E42C +	bl _0803F14C +_0803E42C: +	ldr r6, _0803E468 @ =gBattleMons +	ldr r5, _0803E470 @ =gUnknown_02024A60 +	ldrb r0, [r5] +	movs r4, 0x58 +	muls r0, r4 +	adds r1, r0, r6 +	ldrb r2, [r1, 0x19] +	movs r0, 0x19 +	ldrsb r0, [r1, r0] +	cmp r0, 0xB +	ble _0803E446 +	bl _0803F14C +_0803E446: +	adds r0, r2, r3 +	strb r0, [r1, 0x19] +	ldrb r0, [r5] +	muls r0, r4 +	adds r1, r0, r6 +	movs r0, 0x19 +	ldrsb r0, [r1, r0] +	cmp r0, 0xC +	bgt _0803E45A +	b _0803E74E +_0803E45A: +	movs r0, 0xC +	strb r0, [r1, 0x19] +	b _0803E74E +	.align 2, 0 +_0803E460: .4byte gMain +_0803E464: .4byte 0x0000043d +_0803E468: .4byte gBattleMons +_0803E46C: .4byte 0xfff0ffff +_0803E470: .4byte gUnknown_02024A60 +_0803E474: +	ldr r0, [sp, 0x20] +	ldr r1, [sp, 0x18] +	adds r2, r0, r1 +	ldrb r1, [r2] +	movs r0, 0xF0 +	ands r0, r1 +	lsls r3, r0, 24 +	adds r6, r2, 0 +	cmp r3, 0 +	beq _0803E4BA +	ldr r7, _0803E500 @ =gBattleMons +	ldr r5, _0803E504 @ =gUnknown_02024A60 +	ldrb r0, [r5] +	movs r4, 0x58 +	muls r0, r4 +	adds r1, r0, r7 +	ldrb r2, [r1, 0x1A] +	movs r0, 0x1A +	ldrsb r0, [r1, r0] +	cmp r0, 0xB +	bgt _0803E4BA +	lsrs r0, r3, 28 +	adds r0, r2, r0 +	strb r0, [r1, 0x1A] +	ldrb r0, [r5] +	muls r0, r4 +	adds r1, r0, r7 +	movs r0, 0x1A +	ldrsb r0, [r1, r0] +	cmp r0, 0xC +	ble _0803E4B6 +	movs r0, 0xC +	strb r0, [r1, 0x1A] +_0803E4B6: +	movs r2, 0 +	str r2, [sp, 0x1C] +_0803E4BA: +	ldrb r0, [r6] +	movs r3, 0xF +	ands r3, r0 +	cmp r3, 0 +	bne _0803E4C8 +	bl _0803F14C +_0803E4C8: +	ldr r6, _0803E500 @ =gBattleMons +	ldr r5, _0803E504 @ =gUnknown_02024A60 +	ldrb r0, [r5] +	movs r4, 0x58 +	muls r0, r4 +	adds r1, r0, r6 +	ldrb r2, [r1, 0x1B] +	movs r0, 0x1B +	ldrsb r0, [r1, r0] +	cmp r0, 0xB +	ble _0803E4E2 +	bl _0803F14C +_0803E4E2: +	adds r0, r2, r3 +	strb r0, [r1, 0x1B] +	ldrb r0, [r5] +	muls r0, r4 +	adds r1, r0, r6 +	movs r0, 0x1B +	ldrsb r0, [r1, r0] +	cmp r0, 0xC +	ble _0803E4F8 +	movs r0, 0xC +	strb r0, [r1, 0x1B] +_0803E4F8: +	movs r3, 0 +	str r3, [sp, 0x1C] +	bl _0803F14C +	.align 2, 0 +_0803E500: .4byte gBattleMons +_0803E504: .4byte gUnknown_02024A60 +_0803E508: +	ldr r4, [sp, 0x20] +	ldr r5, [sp, 0x18] +	adds r2, r4, r5 +	ldrb r1, [r2] +	movs r0, 0xF0 +	ands r0, r1 +	lsls r3, r0, 24 +	adds r6, r2, 0 +	cmp r3, 0 +	beq _0803E54E +	ldr r7, _0803E594 @ =gBattleMons +	ldr r5, _0803E598 @ =gUnknown_02024A60 +	ldrb r0, [r5] +	movs r4, 0x58 +	muls r0, r4 +	adds r1, r0, r7 +	ldrb r2, [r1, 0x1E] +	movs r0, 0x1E +	ldrsb r0, [r1, r0] +	cmp r0, 0xB +	bgt _0803E54E +	lsrs r0, r3, 28 +	adds r0, r2, r0 +	strb r0, [r1, 0x1E] +	ldrb r0, [r5] +	muls r0, r4 +	adds r1, r0, r7 +	movs r0, 0x1E +	ldrsb r0, [r1, r0] +	cmp r0, 0xC +	ble _0803E54A +	movs r0, 0xC +	strb r0, [r1, 0x1E] +_0803E54A: +	movs r0, 0 +	str r0, [sp, 0x1C] +_0803E54E: +	ldrb r0, [r6] +	movs r3, 0xF +	ands r3, r0 +	cmp r3, 0 +	bne _0803E55C +	bl _0803F14C +_0803E55C: +	ldr r6, _0803E594 @ =gBattleMons +	ldr r5, _0803E598 @ =gUnknown_02024A60 +	ldrb r0, [r5] +	movs r4, 0x58 +	muls r0, r4 +	adds r1, r0, r6 +	ldrb r2, [r1, 0x1C] +	movs r0, 0x1C +	ldrsb r0, [r1, r0] +	cmp r0, 0xB +	ble _0803E576 +	bl _0803F14C +_0803E576: +	adds r0, r2, r3 +	strb r0, [r1, 0x1C] +	ldrb r0, [r5] +	muls r0, r4 +	adds r1, r0, r6 +	movs r0, 0x1C +	ldrsb r0, [r1, r0] +	cmp r0, 0xC +	ble _0803E58C +	movs r0, 0xC +	strb r0, [r1, 0x1C] +_0803E58C: +	movs r1, 0 +	str r1, [sp, 0x1C] +	bl _0803F14C +	.align 2, 0 +_0803E594: .4byte gBattleMons +_0803E598: .4byte gUnknown_02024A60 +_0803E59C: +	ldr r3, [sp, 0x20] +	ldr r4, [sp, 0x18] +	adds r2, r3, r4 +	ldrb r1, [r2] +	movs r0, 0x80 +	ands r0, r1 +	adds r6, r2, 0 +	cmp r0, 0 +	beq _0803E5E4 +	ldr r5, _0803E758 @ =gUnknown_02024C80 +	ldr r4, _0803E75C @ =gUnknown_02024A60 +	ldrb r0, [r4] +	bl battle_side_get_owner +	lsls r0, 24 +	lsrs r0, 24 +	lsls r1, r0, 1 +	adds r1, r0 +	lsls r1, 2 +	adds r1, r5 +	ldrb r0, [r1, 0x2] +	cmp r0, 0 +	bne _0803E5E4 +	ldrb r0, [r4] +	bl battle_side_get_owner +	lsls r0, 24 +	lsrs r0, 24 +	lsls r1, r0, 1 +	adds r1, r0 +	lsls r1, 2 +	adds r1, r5 +	movs r0, 0x5 +	strb r0, [r1, 0x2] +	movs r5, 0 +	str r5, [sp, 0x1C] +_0803E5E4: +	ldrb r1, [r6] +	movs r0, 0x40 +	ands r0, r1 +	cmp r0, 0 +	beq _0803E646 +	mov r0, r8 +	movs r1, 0x38 +	movs r2, 0 +	bl GetMonData +	cmp r0, 0x64 +	beq _0803E646 +	ldr r5, _0803E760 @ =gExperienceTables +	mov r0, r8 +	movs r1, 0x38 +	movs r2, 0 +	bl GetMonData +	adds r4, r0, 0 +	mov r0, r8 +	movs r1, 0xB +	movs r2, 0 +	bl GetMonData +	adds r4, 0x1 +	lsls r4, 2 +	ldr r2, _0803E764 @ =gBaseStats +	lsls r1, r0, 3 +	subs r1, r0 +	lsls r1, 2 +	adds r1, r2 +	ldrb r1, [r1, 0x13] +	movs r0, 0xCA +	lsls r0, 1 +	muls r0, r1 +	adds r4, r0 +	adds r4, r5 +	ldr r0, [r4] +	str r0, [sp] +	mov r0, r8 +	movs r1, 0x19 +	mov r2, sp +	bl SetMonData +	mov r0, r8 +	bl CalculateMonStats +	movs r0, 0 +	str r0, [sp, 0x1C] +_0803E646: +	ldrb r1, [r6] +	movs r0, 0x20 +	ands r0, r1 +	cmp r0, 0 +	beq _0803E682 +	mov r0, r8 +	ldr r1, [sp, 0xC] +	movs r2, 0x7 +	ldr r3, [sp, 0x34] +	bl HealStatusConditions +	lsls r0, 24 +	cmp r0, 0 +	bne _0803E682 +	ldr r1, [sp, 0x34] +	cmp r1, 0x4 +	beq _0803E67E +	ldr r1, _0803E768 @ =gBattleMons +	movs r0, 0x58 +	ldr r3, [sp, 0x34] +	adds r2, r3, 0 +	muls r2, r0 +	adds r1, 0x50 +	adds r2, r1 +	ldr r0, [r2] +	ldr r1, _0803E76C @ =0xf7ffffff +	ands r0, r1 +	str r0, [r2] +_0803E67E: +	movs r4, 0 +	str r4, [sp, 0x1C] +_0803E682: +	ldrb r1, [r6] +	movs r0, 0x10 +	ands r0, r1 +	cmp r0, 0 +	beq _0803E6A2 +	ldr r2, _0803E770 @ =0x00000f88 +	mov r0, r8 +	ldr r1, [sp, 0xC] +	ldr r3, [sp, 0x34] +	bl HealStatusConditions +	lsls r0, 24 +	cmp r0, 0 +	bne _0803E6A2 +	movs r5, 0 +	str r5, [sp, 0x1C] +_0803E6A2: +	ldrb r1, [r6] +	movs r0, 0x8 +	ands r0, r1 +	cmp r0, 0 +	beq _0803E6C2 +	mov r0, r8 +	ldr r1, [sp, 0xC] +	movs r2, 0x10 +	ldr r3, [sp, 0x34] +	bl HealStatusConditions +	lsls r0, 24 +	cmp r0, 0 +	bne _0803E6C2 +	movs r0, 0 +	str r0, [sp, 0x1C] +_0803E6C2: +	ldrb r1, [r6] +	movs r0, 0x4 +	ands r0, r1 +	cmp r0, 0 +	beq _0803E6E2 +	mov r0, r8 +	ldr r1, [sp, 0xC] +	movs r2, 0x20 +	ldr r3, [sp, 0x34] +	bl HealStatusConditions +	lsls r0, 24 +	cmp r0, 0 +	bne _0803E6E2 +	movs r1, 0 +	str r1, [sp, 0x1C] +_0803E6E2: +	ldrb r1, [r6] +	movs r0, 0x2 +	ands r0, r1 +	cmp r0, 0 +	beq _0803E702 +	mov r0, r8 +	ldr r1, [sp, 0xC] +	movs r2, 0x40 +	ldr r3, [sp, 0x34] +	bl HealStatusConditions +	lsls r0, 24 +	cmp r0, 0 +	bne _0803E702 +	movs r2, 0 +	str r2, [sp, 0x1C] +_0803E702: +	ldrb r1, [r6] +	movs r0, 0x1 +	ands r0, r1 +	cmp r0, 0 +	bne _0803E710 +	bl _0803F14C +_0803E710: +	ldr r0, _0803E774 @ =gMain +	ldr r3, _0803E778 @ =0x0000043d +	adds r0, r3 +	ldrb r1, [r0] +	movs r0, 0x2 +	ands r0, r1 +	cmp r0, 0 +	bne _0803E724 +	bl _0803F14C +_0803E724: +	ldr r4, [sp, 0x34] +	cmp r4, 0x4 +	bne _0803E72E +	bl _0803F14C +_0803E72E: +	ldr r1, _0803E768 @ =gBattleMons +	movs r0, 0x58 +	muls r0, r4 +	adds r1, 0x50 +	adds r2, r0, r1 +	ldr r1, [r2] +	movs r0, 0x7 +	ands r0, r1 +	cmp r0, 0 +	bne _0803E746 +	bl _0803F14C +_0803E746: +	movs r0, 0x8 +	negs r0, r0 +	ands r1, r0 +	str r1, [r2] +_0803E74E: +	movs r5, 0 +	str r5, [sp, 0x1C] +	bl _0803F14C +	.align 2, 0 +_0803E758: .4byte gUnknown_02024C80 +_0803E75C: .4byte gUnknown_02024A60 +_0803E760: .4byte gExperienceTables +_0803E764: .4byte gBaseStats +_0803E768: .4byte gBattleMons +_0803E76C: .4byte 0xf7ffffff +_0803E770: .4byte 0x00000f88 +_0803E774: .4byte gMain +_0803E778: .4byte 0x0000043d +_0803E77C: +	ldr r1, [sp, 0x20] +	ldr r2, [sp, 0x18] +	adds r0, r1, r2 +	ldrb r0, [r0] +	mov r10, r0 +	movs r0, 0x20 +	mov r3, r10 +	ands r0, r3 +	cmp r0, 0 +	beq _0803E854 +	movs r0, 0xDF +	ands r3, r0 +	mov r10, r3 +	mov r0, r8 +	movs r1, 0x15 +	movs r2, 0 +	bl GetMonData +	ldr r1, _0803E880 @ =gUnknown_08208238 +	ldr r4, [sp, 0x10] +	adds r1, r4, r1 +	ldrb r1, [r1] +	ands r0, r1 +	lsls r1, r4, 1 +	lsrs r0, r1 +	str r0, [sp] +	adds r5, r4, 0 +	adds r5, 0xD +	mov r0, r8 +	adds r1, r5, 0 +	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, 0x10] +	bl CalculatePPWithBonus +	lsls r0, 24 +	lsrs r0, 24 +	str r0, [sp, 0x28] +	ldr r0, [sp] +	cmp r0, 0x2 +	bhi _0803E854 +	ldr r0, [sp, 0x28] +	cmp r0, 0x4 +	bls _0803E854 +	mov r0, r8 +	movs r1, 0x15 +	movs r2, 0 +	bl GetMonData +	ldr r1, _0803E884 @ =gUnknown_08208240 +	ldr r2, [sp, 0x10] +	adds r1, r2, r1 +	ldrb r1, [r1] +	adds r0, r1 +	str r0, [sp] +	mov r0, r8 +	movs r1, 0x15 +	mov r2, sp +	bl SetMonData +	mov r0, r8 +	adds r1, r5, 0 +	movs r2, 0 +	bl GetMonData +	lsls r0, 16 +	lsrs r0, 16 +	ldr r1, [sp] +	lsls r1, 24 +	lsrs r1, 24 +	ldr r2, [sp, 0x10] +	bl CalculatePPWithBonus +	lsls r0, 24 +	lsrs r0, 24 +	ldr r3, [sp, 0x28] +	subs r0, r3 +	str r0, [sp] +	ldr r4, [sp, 0x10] +	adds r4, 0x11 +	mov r0, r8 +	adds r1, r4, 0 +	movs r2, 0 +	bl GetMonData +	ldr r1, [sp] +	adds r0, r1 +	str r0, [sp] +	mov r0, r8 +	adds r1, r4, 0 +	mov r2, sp +	bl SetMonData +	movs r4, 0 +	str r4, [sp, 0x1C] +_0803E854: +	movs r5, 0 +	str r5, [sp, 0x28] +	mov r0, r10 +	cmp r0, 0 +	bne _0803E862 +	bl _0803F14C +_0803E862: +	movs r0, 0x1 +	mov r1, r10 +	ands r0, r1 +	cmp r0, 0 +	bne _0803E86E +	b _0803EE0A +_0803E86E: +	ldr r2, [sp, 0x28] +	cmp r2, 0x7 +	bls _0803E876 +	b _0803EE0A +_0803E876: +	lsls r0, r2, 2 +	ldr r1, _0803E888 @ =_0803E88C +	adds r0, r1 +	ldr r0, [r0] +	mov pc, r0 +	.align 2, 0 +_0803E880: .4byte gUnknown_08208238 +_0803E884: .4byte gUnknown_08208240 +_0803E888: .4byte _0803E88C +	.align 2, 0 +_0803E88C: +	.4byte _0803E8AC +	.4byte _0803E8AC +	.4byte _0803E934 +	.4byte _0803EB5C +	.4byte _0803EE0A +	.4byte _0803EE0A +	.4byte _0803EE0A +	.4byte _0803EDF4 +_0803E8AC: +	mov r0, r8 +	bl GetMonEVCount +	lsls r0, 16 +	lsrs r5, r0, 16 +	ldr r0, _0803E8EC @ =0x000001fd +	cmp r5, r0 +	bls _0803E8BE +	b _0803E36C +_0803E8BE: +	ldr r0, _0803E8F0 @ =gUnknown_082082F2 +	ldr r3, [sp, 0x28] +	adds r0, r3, r0 +	ldrb r1, [r0] +	mov r0, r8 +	movs r2, 0 +	bl GetMonData +	adds r1, r0, 0 +	str r1, [sp] +	cmp r1, 0x63 +	bls _0803E8D8 +	b _0803EE0A +_0803E8D8: +	ldr r4, [sp, 0x20] +	ldr r2, [sp, 0x24] +	adds r0, r4, r2 +	ldrb r0, [r0] +	adds r1, r0 +	cmp r1, 0x64 +	bls _0803E8F4 +	adds r0, 0x64 +	subs r4, r0, r1 +	b _0803E8F6 +	.align 2, 0 +_0803E8EC: .4byte 0x000001fd +_0803E8F0: .4byte gUnknown_082082F2 +_0803E8F4: +	adds r4, r0, 0 +_0803E8F6: +	adds r1, r5, r4 +	movs r0, 0xFF +	lsls r0, 1 +	cmp r1, r0 +	bls _0803E904 +	adds r0, r4, r0 +	subs r4, r0, r1 +_0803E904: +	ldr r0, [sp] +	adds r0, r4 +	str r0, [sp] +	ldr r0, _0803E930 @ =gUnknown_082082F2 +	ldr r3, [sp, 0x28] +	adds r0, r3, r0 +	ldrb r1, [r0] +	mov r0, r8 +	mov r2, sp +	bl SetMonData +	mov r0, r8 +	bl CalculateMonStats +	ldr r0, [sp, 0x24] +	adds r0, 0x1 +	lsls r0, 24 +	lsrs r0, 24 +	str r0, [sp, 0x24] +	movs r4, 0 +	str r4, [sp, 0x1C] +	b _0803EE0A +	.align 2, 0 +_0803E930: .4byte gUnknown_082082F2 +_0803E934: +	movs r0, 0x10 +	mov r5, r10 +	ands r0, r5 +	cmp r0, 0 +	beq _0803E9F4 +	mov r0, r8 +	movs r1, 0x39 +	movs r2, 0 +	bl GetMonData +	cmp r0, 0 +	beq _0803E954 +	ldr r0, [sp, 0x24] +	adds r0, 0x1 +	lsls r0, 24 +	b _0803EC9E +_0803E954: +	ldr r0, _0803E99C @ =gMain +	ldr r1, _0803E9A0 @ =0x0000043d +	adds r0, r1 +	ldrb r1, [r0] +	movs r4, 0x2 +	movs r0, 0x2 +	ands r0, r1 +	cmp r0, 0 +	beq _0803EA0A +	ldr r2, [sp, 0x34] +	cmp r2, 0x4 +	beq _0803E9B4 +	ldr r2, _0803E9A4 @ =gUnknown_02024C0C +	ldr r1, _0803E9A8 @ =gBitTable +	ldr r3, [sp, 0x34] +	lsls r0, r3, 2 +	adds r0, r1 +	ldr r1, [r0] +	ldrb r0, [r2] +	bics r0, r1 +	strb r0, [r2] +	ldr r1, _0803E9AC @ =gUnknown_02024A6A +	lsls r0, r3, 1 +	adds r0, r1 +	ldrb r0, [r0] +	bl pokemon_order_func +	adds r1, r0, 0 +	lsls r1, 24 +	lsrs r1, 24 +	ldr r0, [sp, 0x34] +	bl CopyPlayerPartyMonToBattleData +	ldr r0, _0803E9B0 @ =gUnknown_02024A60 +	ldrb r0, [r0] +	b _0803E9CC +	.align 2, 0 +_0803E99C: .4byte gMain +_0803E9A0: .4byte 0x0000043d +_0803E9A4: .4byte gUnknown_02024C0C +_0803E9A8: .4byte gBitTable +_0803E9AC: .4byte gUnknown_02024A6A +_0803E9B0: .4byte gUnknown_02024A60 +_0803E9B4: +	ldr r3, _0803E9E4 @ =gUnknown_02024C0C +	ldr r1, _0803E9E8 @ =gBitTable +	ldr r2, _0803E9EC @ =gUnknown_02024A60 +	ldrb r0, [r2] +	eors r0, r4 +	lsls r0, 2 +	adds r0, r1 +	ldr r1, [r0] +	ldrb r0, [r3] +	bics r0, r1 +	strb r0, [r3] +	ldrb r0, [r2] +_0803E9CC: +	bl battle_side_get_owner +	lsls r0, 24 +	cmp r0, 0 +	bne _0803EA0A +	ldr r1, _0803E9F0 @ =gUnknown_030042E0 +	ldrb r0, [r1, 0x4] +	cmp r0, 0xFE +	bhi _0803EA0A +	adds r0, 0x1 +	strb r0, [r1, 0x4] +	b _0803EA0A +	.align 2, 0 +_0803E9E4: .4byte gUnknown_02024C0C +_0803E9E8: .4byte gBitTable +_0803E9EC: .4byte gUnknown_02024A60 +_0803E9F0: .4byte gUnknown_030042E0 +_0803E9F4: +	mov r0, r8 +	movs r1, 0x39 +	movs r2, 0 +	bl GetMonData +	cmp r0, 0 +	bne _0803EA0A +	ldr r0, [sp, 0x24] +	adds r0, 0x1 +	lsls r0, 24 +	b _0803EC9E +_0803EA0A: +	ldr r1, [sp, 0x24] +	adds r0, r1, 0x1 +	lsls r0, 24 +	lsrs r0, 24 +	str r0, [sp, 0x24] +	ldr r4, [sp, 0x20] +	adds r1, r4, r1 +	ldrb r1, [r1] +	str r1, [sp] +	adds r0, r1, 0 +	cmp r0, 0xFE +	beq _0803EA4C +	cmp r0, 0xFE +	bhi _0803EA2C +	cmp r0, 0xFD +	beq _0803EA62 +	b _0803EA6C +_0803EA2C: +	cmp r1, 0xFF +	bne _0803EA6C +	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 +	subs r4, r0 +	str r4, [sp] +	b _0803EA6C +_0803EA4C: +	mov r0, r8 +	movs r1, 0x3A +	movs r2, 0 +	bl GetMonData +	lsrs r0, 1 +	str r0, [sp] +	cmp r0, 0 +	bne _0803EA6C +	movs r0, 0x1 +	b _0803EA6A +_0803EA62: +	ldr r0, _0803EB24 @ =0x02000000 +	ldr r5, _0803EB28 @ =0x000160fa +	adds r0, r5 +	ldrb r0, [r0] +_0803EA6A: +	str r0, [sp] +_0803EA6C: +	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 _0803EB4C +	ldr r0, [sp, 0x14] +	cmp r0, 0 +	bne _0803EB40 +	mov r0, r8 +	movs r1, 0x39 +	movs r2, 0 +	bl GetMonData +	ldr r1, [sp] +	adds r0, r1 +	str r0, [sp] +	mov r0, r8 +	movs r1, 0x3A +	movs r2, 0 +	bl GetMonData +	ldr r1, [sp] +	cmp r1, r0 +	bls _0803EAB8 +	mov r0, r8 +	movs r1, 0x3A +	movs r2, 0 +	bl GetMonData +	str r0, [sp] +_0803EAB8: +	mov r0, r8 +	movs r1, 0x39 +	mov r2, sp +	bl SetMonData +	ldr r0, _0803EB2C @ =gMain +	ldr r1, _0803EB30 @ =0x0000043d +	adds r0, r1 +	ldrb r1, [r0] +	movs r0, 0x2 +	ands r0, r1 +	cmp r0, 0 +	beq _0803EB48 +	ldr r2, [sp, 0x34] +	cmp r2, 0x4 +	beq _0803EB48 +	ldr r1, _0803EB34 @ =gBattleMons +	movs r0, 0x58 +	muls r0, r2 +	adds r0, r1 +	ldr r1, [sp] +	strh r1, [r0, 0x28] +	movs r0, 0x10 +	mov r3, r10 +	ands r0, r3 +	cmp r0, 0 +	bne _0803EB48 +	ldr r4, _0803EB38 @ =gUnknown_02024A60 +	ldrb r0, [r4] +	bl battle_side_get_owner +	lsls r0, 24 +	cmp r0, 0 +	bne _0803EB48 +	ldr r1, _0803EB3C @ =gUnknown_030042E0 +	ldrb r0, [r1, 0x3] +	cmp r0, 0xFE +	bhi _0803EB08 +	adds r0, 0x1 +	strb r0, [r1, 0x3] +_0803EB08: +	ldrb r5, [r4] +	add r0, sp, 0x34 +	ldrb r0, [r0] +	strb r0, [r4] +	movs r0, 0 +	movs r1, 0 +	movs r2, 0 +	bl dp01_build_cmdbuf_x00_a_b_0 +	ldrb r0, [r4] +	bl dp01_battle_side_mark_buffer_for_execution +	strb r5, [r4] +	b _0803EB48 +	.align 2, 0 +_0803EB24: .4byte 0x02000000 +_0803EB28: .4byte 0x000160fa +_0803EB2C: .4byte gMain +_0803EB30: .4byte 0x0000043d +_0803EB34: .4byte gBattleMons +_0803EB38: .4byte gUnknown_02024A60 +_0803EB3C: .4byte gUnknown_030042E0 +_0803EB40: +	ldr r1, _0803EB58 @ =gUnknown_02024BEC +	ldr r0, [sp] +	negs r0, r0 +	str r0, [r1] +_0803EB48: +	movs r1, 0 +	str r1, [sp, 0x1C] +_0803EB4C: +	movs r0, 0xEF +	mov r2, r10 +	ands r2, r0 +	mov r10, r2 +	b _0803EE0A +	.align 2, 0 +_0803EB58: .4byte gUnknown_02024BEC +_0803EB5C: +	movs r7, 0x2 +	mov r0, r10 +	ands r0, r7 +	cmp r0, 0 +	beq _0803EB68 +	b _0803ECB8 +_0803EB68: +	movs r5, 0 +	ldr r3, [sp, 0x24] +	adds r3, 0x1 +	str r3, [sp, 0x38] +_0803EB70: +	movs r4, 0x11 +	adds r4, r5 +	mov r9, r4 +	mov r0, r8 +	mov r1, r9 +	movs r2, 0 +	bl GetMonData +	str r0, [sp] +	adds r7, r5, 0 +	adds r7, 0xD +	mov r0, r8 +	adds r1, r7, 0 +	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 r0, r5, 24 +	lsrs r6, r0, 24 +	adds r0, r4, 0 +	adds r2, r6, 0 +	bl CalculatePPWithBonus +	lsls r0, 24 +	lsrs r0, 24 +	ldr r1, [sp] +	cmp r1, r0 +	beq _0803EC92 +	ldr r2, [sp, 0x20] +	ldr r3, [sp, 0x24] +	adds r0, r2, r3 +	ldrb r0, [r0] +	adds r0, r1, r0 +	str r0, [sp] +	mov r0, r8 +	adds r1, r7, 0 +	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 +	adds r2, r6, 0 +	bl CalculatePPWithBonus +	lsls r0, 24 +	lsrs r0, 24 +	ldr r1, [sp] +	cmp r1, r0 +	bls _0803EC28 +	mov r0, r8 +	adds r1, r7, 0 +	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 +	adds r2, r6, 0 +	bl CalculatePPWithBonus +	lsls r0, 24 +	lsrs r0, 24 +	str r0, [sp] +_0803EC28: +	mov r0, r8 +	mov r1, r9 +	mov r2, sp +	bl SetMonData +	ldr r0, _0803ECA4 @ =gMain +	ldr r4, _0803ECA8 @ =0x0000043d +	adds r0, r4 +	ldrb r1, [r0] +	movs r0, 0x2 +	ands r0, r1 +	cmp r0, 0 +	beq _0803EC8E +	ldr r0, [sp, 0x34] +	cmp r0, 0x4 +	beq _0803EC8E +	ldr r4, _0803ECAC @ =gBattleMons +	movs r0, 0x58 +	ldr r1, [sp, 0x34] +	adds r3, r1, 0 +	muls r3, r0 +	adds r0, r4, 0 +	adds r0, 0x50 +	adds r0, r3, r0 +	ldr r1, [r0] +	movs r0, 0x80 +	lsls r0, 14 +	ands r1, r0 +	cmp r1, 0 +	bne _0803EC8E +	ldr r1, _0803ECB0 @ =gUnknown_02024CA8 +	ldr r2, [sp, 0x34] +	lsls r0, r2, 3 +	subs r0, r2 +	lsls r0, 2 +	adds r0, r1 +	ldrb r1, [r0, 0x18] +	lsrs r1, 4 +	ldr r2, _0803ECB4 @ =gBitTable +	lsls r0, r5, 2 +	adds r0, r2 +	ldr r0, [r0] +	ands r1, r0 +	cmp r1, 0 +	bne _0803EC8E +	adds r0, r5, r3 +	adds r1, r4, 0 +	adds r1, 0x24 +	adds r0, r1 +	ldr r1, [sp] +	strb r1, [r0] +_0803EC8E: +	movs r3, 0 +	str r3, [sp, 0x1C] +_0803EC92: +	adds r5, 0x1 +	cmp r5, 0x3 +	bgt _0803EC9A +	b _0803EB70 +_0803EC9A: +	ldr r4, [sp, 0x38] +	lsls r0, r4, 24 +_0803EC9E: +	lsrs r0, 24 +	str r0, [sp, 0x24] +	b _0803EE0A +	.align 2, 0 +_0803ECA4: .4byte gMain +_0803ECA8: .4byte 0x0000043d +_0803ECAC: .4byte gBattleMons +_0803ECB0: .4byte gUnknown_02024CA8 +_0803ECB4: .4byte gBitTable +_0803ECB8: +	ldr r6, [sp, 0x10] +	adds r6, 0x11 +	mov r0, r8 +	adds r1, r6, 0 +	movs r2, 0 +	bl GetMonData +	str r0, [sp] +	ldr r5, [sp, 0x10] +	adds r5, 0xD +	mov r0, r8 +	adds r1, r5, 0 +	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, 0x10] +	bl CalculatePPWithBonus +	lsls r0, 24 +	lsrs r0, 24 +	ldr r2, [sp] +	cmp r2, r0 +	bne _0803ED00 +	b _0803EE0A +_0803ED00: +	ldr r1, [sp, 0x24] +	adds r0, r1, 0x1 +	lsls r0, 24 +	lsrs r0, 24 +	str r0, [sp, 0x24] +	ldr r0, [sp, 0x20] +	adds r1, r0, r1 +	ldrb r0, [r1] +	adds r0, r2, r0 +	str r0, [sp] +	mov r0, r8 +	adds r1, r5, 0 +	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, 0x10] +	bl CalculatePPWithBonus +	lsls r0, 24 +	lsrs r0, 24 +	ldr r1, [sp] +	cmp r1, r0 +	bls _0803ED74 +	mov r0, r8 +	adds r1, r5, 0 +	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, 0x10] +	bl CalculatePPWithBonus +	lsls r0, 24 +	lsrs r0, 24 +	str r0, [sp] +_0803ED74: +	mov r0, r8 +	adds r1, r6, 0 +	mov r2, sp +	bl SetMonData +	ldr r0, _0803EDE0 @ =gMain +	ldr r1, _0803EDE4 @ =0x0000043d +	adds r0, r1 +	ldrb r1, [r0] +	adds r0, r7, 0 +	ands r0, r1 +	cmp r0, 0 +	beq _0803EDD8 +	ldr r2, [sp, 0x34] +	cmp r2, 0x4 +	beq _0803EDD8 +	ldr r4, _0803EDE8 @ =gBattleMons +	movs r0, 0x58 +	adds r3, r2, 0 +	muls r3, r0 +	adds r0, r4, 0 +	adds r0, 0x50 +	adds r0, r3, r0 +	ldr r0, [r0] +	movs r1, 0x80 +	lsls r1, 14 +	ands r0, r1 +	cmp r0, 0 +	bne _0803EDD8 +	ldr r1, _0803EDEC @ =gUnknown_02024CA8 +	lsls r0, r2, 3 +	subs r0, r2 +	lsls r0, 2 +	adds r0, r1 +	ldrb r1, [r0, 0x18] +	lsrs r1, 4 +	ldr r2, _0803EDF0 @ =gBitTable +	ldr r5, [sp, 0x10] +	lsls r0, r5, 2 +	adds r0, r2 +	ldr r0, [r0] +	ands r1, r0 +	cmp r1, 0 +	bne _0803EDD8 +	adds r0, r5, r3 +	adds r1, r4, 0 +	adds r1, 0x24 +	adds r0, r1 +	ldr r1, [sp] +	strb r1, [r0] +_0803EDD8: +	movs r0, 0 +	str r0, [sp, 0x1C] +	b _0803EE0A +	.align 2, 0 +_0803EDE0: .4byte gMain +_0803EDE4: .4byte 0x0000043d +_0803EDE8: .4byte gBattleMons +_0803EDEC: .4byte gUnknown_02024CA8 +_0803EDF0: .4byte gBitTable +_0803EDF4: +	mov r0, r8 +	movs r1, 0x2 +	ldr r2, [sp, 0x8] +	bl GetEvolutionTargetSpecies +	lsls r0, 16 +	lsrs r1, r0, 16 +	cmp r1, 0 +	beq _0803EE0A +	bl _0803E35C +_0803EE0A: +	ldr r1, [sp, 0x28] +	adds r1, 0x1 +	str r1, [sp, 0x28] +	mov r2, r10 +	lsrs r2, 1 +	mov r10, r2 +	cmp r2, 0 +	beq _0803EE1C +	b _0803E862 +_0803EE1C: +	b _0803F14C +_0803EE1E: +	ldr r3, [sp, 0x20] +	ldr r4, [sp, 0x18] +	adds r0, r3, r4 +	ldrb r0, [r0] +	mov r10, r0 +	movs r5, 0 +	str r5, [sp, 0x28] +	cmp r0, 0 +	bne _0803EE32 +	b _0803F14C +_0803EE32: +	movs r0, 0x1 +	mov r1, r10 +	ands r0, r1 +	cmp r0, 0 +	bne _0803EE3E +	b _0803F13A +_0803EE3E: +	ldr r2, [sp, 0x28] +	cmp r2, 0x7 +	bls _0803EE46 +	b _0803F13A +_0803EE46: +	lsls r0, r2, 2 +	ldr r1, _0803EE50 @ =_0803EE54 +	adds r0, r1 +	ldr r0, [r0] +	mov pc, r0 +	.align 2, 0 +_0803EE50: .4byte _0803EE54 +	.align 2, 0 +_0803EE54: +	.4byte _0803EE74 +	.4byte _0803EE74 +	.4byte _0803EE74 +	.4byte _0803EE74 +	.4byte _0803EEF8 +	.4byte _0803EFCC +	.4byte _0803F026 +	.4byte _0803F07C +_0803EE74: +	mov r0, r8 +	bl GetMonEVCount +	lsls r0, 16 +	lsrs r5, r0, 16 +	ldr r0, _0803EEBC @ =0x000001fd +	cmp r5, r0 +	bls _0803EE88 +	bl _0803E36C +_0803EE88: +	ldr r0, _0803EEC0 @ =gUnknown_082082F2 +	ldr r4, [sp, 0x28] +	adds r4, 0x2 +	adds r0, r4, r0 +	ldrb r1, [r0] +	mov r0, r8 +	movs r2, 0 +	bl GetMonData +	adds r1, r0, 0 +	str r1, [sp] +	adds r2, r4, 0 +	cmp r1, 0x63 +	bls _0803EEA6 +	b _0803F13A +_0803EEA6: +	ldr r3, [sp, 0x20] +	ldr r4, [sp, 0x24] +	adds r0, r3, r4 +	ldrb r0, [r0] +	adds r1, r0 +	cmp r1, 0x64 +	bls _0803EEC4 +	adds r0, 0x64 +	subs r4, r0, r1 +	b _0803EEC6 +	.align 2, 0 +_0803EEBC: .4byte 0x000001fd +_0803EEC0: .4byte gUnknown_082082F2 +_0803EEC4: +	adds r4, r0, 0 +_0803EEC6: +	adds r1, r5, r4 +	movs r0, 0xFF +	lsls r0, 1 +	cmp r1, r0 +	bls _0803EED4 +	adds r0, r4, r0 +	subs r4, r0, r1 +_0803EED4: +	ldr r0, [sp] +	adds r0, r4 +	str r0, [sp] +	ldr r0, _0803EEF4 @ =gUnknown_082082F2 +	adds r0, r2, r0 +	ldrb r1, [r0] +	mov r0, r8 +	mov r2, sp +	bl SetMonData +	mov r0, r8 +	bl CalculateMonStats +	movs r5, 0 +	str r5, [sp, 0x1C] +	b _0803F130 +	.align 2, 0 +_0803EEF4: .4byte gUnknown_082082F2 +_0803EEF8: +	mov r0, r8 +	movs r1, 0x15 +	movs r2, 0 +	bl GetMonData +	ldr r1, _0803EFC0 @ =gUnknown_08208238 +	ldr r2, [sp, 0x10] +	adds r1, r2, r1 +	ldrb r1, [r1] +	ands r0, r1 +	lsls r1, r2, 1 +	lsrs r0, r1 +	str r0, [sp] +	cmp r0, 0x2 +	bls _0803EF18 +	b _0803F13A +_0803EF18: +	adds r5, r2, 0 +	adds r5, 0xD +	mov r0, r8 +	adds r1, r5, 0 +	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, 0x10] +	bl CalculatePPWithBonus +	lsls r0, 24 +	lsrs r4, r0, 24 +	mov r0, r8 +	movs r1, 0x15 +	movs r2, 0 +	bl GetMonData +	str r0, [sp] +	ldr r1, _0803EFC4 @ =gUnknown_0820823C +	ldr r3, [sp, 0x10] +	adds r1, r3, r1 +	ldrb r2, [r1] +	ands r2, r0 +	str r2, [sp] +	ldr r0, _0803EFC8 @ =gUnknown_08208240 +	adds r0, r3, r0 +	ldrb r1, [r0] +	lsls r0, r1, 1 +	adds r0, r1 +	adds r2, r0 +	str r2, [sp] +	mov r0, r8 +	movs r1, 0x15 +	mov r2, sp +	bl SetMonData +	mov r0, r8 +	adds r1, r5, 0 +	movs r2, 0 +	bl GetMonData +	lsls r0, 16 +	lsrs r0, 16 +	ldr r1, [sp] +	lsls r1, 24 +	lsrs r1, 24 +	ldr r2, [sp, 0x10] +	bl CalculatePPWithBonus +	lsls r0, 24 +	lsrs r0, 24 +	subs r0, r4 +	str r0, [sp] +	ldr r4, [sp, 0x10] +	adds r4, 0x11 +	mov r0, r8 +	adds r1, r4, 0 +	movs r2, 0 +	bl GetMonData +	ldr r1, [sp] +	adds r0, r1 +	str r0, [sp] +	mov r0, r8 +	adds r1, r4, 0 +	mov r2, sp +	bl SetMonData +	movs r4, 0 +	str r4, [sp, 0x1C] +	b _0803F13A +	.align 2, 0 +_0803EFC0: .4byte gUnknown_08208238 +_0803EFC4: .4byte gUnknown_0820823C +_0803EFC8: .4byte gUnknown_08208240 +_0803EFCC: +	mov r0, r8 +	movs r1, 0x20 +	movs r2, 0 +	bl GetMonData +	cmp r0, 0x63 +	bls _0803EFDC +	b _0803F130 +_0803EFDC: +	ldr r5, [sp, 0x1C] +	cmp r5, 0 +	beq _0803EFE4 +	b _0803F130 +_0803EFE4: +	ldr r0, [sp, 0x2C] +	cmp r0, 0 +	beq _0803EFEC +	b _0803F130 +_0803EFEC: +	ldr r1, [sp, 0x20] +	ldr r2, [sp, 0x24] +	adds r0, r1, r2 +	ldrb r0, [r0] +	str r0, [sp, 0x2C] +	mov r0, r8 +	movs r1, 0x20 +	movs r2, 0 +	bl GetMonData +	adds r5, r0, 0 +	str r5, [sp, 0x4] +	ldr r3, [sp, 0x2C] +	lsls r4, r3, 24 +	asrs r1, r4, 24 +	cmp r1, 0 +	ble _0803F0D0 +	ldr r0, [sp, 0x30] +	cmp r0, 0x1B +	bne _0803F0D0 +	movs r0, 0x96 +	muls r0, r1 +	movs r1, 0x64 +	bl __divsi3 +	adds r0, r5, r0 +	str r0, [sp, 0x4] +	adds r2, r4, 0 +	b _0803F0DC +_0803F026: +	mov r0, r8 +	movs r1, 0x20 +	movs r2, 0 +	bl GetMonData +	cmp r0, 0x63 +	bls _0803F130 +	mov r0, r8 +	movs r1, 0x20 +	movs r2, 0 +	bl GetMonData +	cmp r0, 0xC7 +	bhi _0803F130 +	ldr r2, [sp, 0x1C] +	cmp r2, 0 +	bne _0803F130 +	ldr r3, [sp, 0x2C] +	cmp r3, 0 +	bne _0803F130 +	ldr r4, [sp, 0x20] +	ldr r5, [sp, 0x24] +	adds r0, r4, r5 +	ldrb r0, [r0] +	str r0, [sp, 0x2C] +	mov r0, r8 +	movs r1, 0x20 +	movs r2, 0 +	bl GetMonData +	adds r4, r0, 0 +	str r4, [sp, 0x4] +	ldr r0, [sp, 0x2C] +	lsls r5, r0, 24 +	asrs r1, r5, 24 +	cmp r1, 0 +	ble _0803F076 +	ldr r2, [sp, 0x30] +	cmp r2, 0x1B +	beq _0803F0BE +_0803F076: +	ldr r3, [sp, 0x2C] +	lsls r2, r3, 24 +	b _0803F0D4 +_0803F07C: +	mov r0, r8 +	movs r1, 0x20 +	movs r2, 0 +	bl GetMonData +	cmp r0, 0xC7 +	bls _0803F130 +	ldr r4, [sp, 0x1C] +	cmp r4, 0 +	bne _0803F130 +	ldr r5, [sp, 0x2C] +	cmp r5, 0 +	bne _0803F130 +	ldr r1, [sp, 0x20] +	ldr r2, [sp, 0x24] +	adds r0, r1, r2 +	ldrb r0, [r0] +	str r0, [sp, 0x2C] +	mov r0, r8 +	movs r1, 0x20 +	movs r2, 0 +	bl GetMonData +	adds r4, r0, 0 +	str r4, [sp, 0x4] +	ldr r3, [sp, 0x2C] +	lsls r5, r3, 24 +	asrs r1, r5, 24 +	cmp r1, 0 +	ble _0803F0D0 +	ldr r0, [sp, 0x30] +	cmp r0, 0x1B +	bne _0803F0D0 +_0803F0BE: +	movs r0, 0x96 +	muls r0, r1 +	movs r1, 0x64 +	bl __divsi3 +	adds r0, r4, r0 +	str r0, [sp, 0x4] +	adds r2, r5, 0 +	b _0803F0DC +_0803F0D0: +	ldr r1, [sp, 0x2C] +	lsls r2, r1, 24 +_0803F0D4: +	asrs r1, r2, 24 +	ldr r0, [sp, 0x4] +	adds r0, r1 +	str r0, [sp, 0x4] +_0803F0DC: +	cmp r2, 0 +	ble _0803F112 +	mov r0, r8 +	movs r1, 0x26 +	movs r2, 0 +	bl GetMonData +	cmp r0, 0xB +	bne _0803F0F4 +	ldr r0, [sp, 0x4] +	adds r0, 0x1 +	str r0, [sp, 0x4] +_0803F0F4: +	mov r0, r8 +	movs r1, 0x23 +	movs r2, 0 +	bl GetMonData +	adds r4, r0, 0 +	bl sav1_map_get_name +	lsls r0, 24 +	lsrs r0, 24 +	cmp r4, r0 +	bne _0803F112 +	ldr r0, [sp, 0x4] +	adds r0, 0x1 +	str r0, [sp, 0x4] +_0803F112: +	ldr r0, [sp, 0x4] +	cmp r0, 0 +	bge _0803F11C +	movs r0, 0 +	str r0, [sp, 0x4] +_0803F11C: +	ldr r0, [sp, 0x4] +	cmp r0, 0xFF +	ble _0803F126 +	movs r0, 0xFF +	str r0, [sp, 0x4] +_0803F126: +	add r2, sp, 0x4 +	mov r0, r8 +	movs r1, 0x20 +	bl SetMonData +_0803F130: +	ldr r0, [sp, 0x24] +	adds r0, 0x1 +	lsls r0, 24 +	lsrs r0, 24 +	str r0, [sp, 0x24] +_0803F13A: +	ldr r2, [sp, 0x28] +	adds r2, 0x1 +	str r2, [sp, 0x28] +	mov r3, r10 +	lsrs r3, 1 +	mov r10, r3 +	cmp r3, 0 +	beq _0803F14C +	b _0803EE32 +_0803F14C: +	ldr r4, [sp, 0x18] +	adds r4, 0x1 +	str r4, [sp, 0x18] +	cmp r4, 0x5 +	bgt _0803F15A +	bl _0803E378 +_0803F15A: +	ldr r0, [sp, 0x1C] +_0803F15C: +	add sp, 0x3C +	pop {r3-r5} +	mov r8, r3 +	mov r9, r4 +	mov r10, r5 +	pop {r4-r7} +	pop {r1} +	bx r1 +	thumb_func_end sub_803E1B0 + +	.align 2, 0 @ Don't pad with nop. diff --git a/asm/rom_800D42C.s b/asm/rom_800D42C.s index bd9b8d666..db4158af6 100644 --- a/asm/rom_800D42C.s +++ b/asm/rom_800D42C.s @@ -82431,7 +82431,7 @@ _080371D0:  	mov r0, r10  	movs r1, 0x4  	movs r2, 0x4 -	bl sub_803F1DC +	bl GetItemEffectParamOffset  	lsls r0, 24  	lsrs r4, r0, 24  	cmp r4, 0 diff --git a/include/main.h b/include/main.h index 054bba901..5d8f8b68a 100644 --- a/include/main.h +++ b/include/main.h @@ -40,6 +40,7 @@ struct Main      u8 state;      u8 oamLoadDisabled:1; +    u8 inBattle:1;  };  extern u8 gUnknown_3001764; diff --git a/ld_script.txt b/ld_script.txt index 3294fedf3..88bdae3bc 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -52,7 +52,9 @@ SECTIONS {          src/pokemon_1.o(.text);          asm/calculate_base_damage.o(.text);          src/pokemon_2.o(.text); -        asm/rom_803D1FC.o(.text); +        asm/pokemon_item_effect.o(.text); +        src/pokemon_3.o(.text); +        asm/pokemon_3.o(.text);          src/trig.o(.text);          src/rng.o(.text);          asm/rom_8040EB4.o(.text); diff --git a/src/pokemon_3.c b/src/pokemon_3.c new file mode 100644 index 000000000..bc617e683 --- /dev/null +++ b/src/pokemon_3.c @@ -0,0 +1,150 @@ +#include "global.h" +#include "asm.h" +#include "text.h" +#include "string_util.h" +#include "pokemon.h" +#include "rng.h" +#include "species.h" +#include "main.h" +#include "sprite.h" +#include "flag.h" + +extern u8 gPlayerPartyCount; +extern struct Pokemon gPlayerParty[6]; +extern u8 gEnemyPartyCount; +extern struct Pokemon gEnemyParty[6]; +extern struct BattlePokemon gBattleMons[4]; +extern u8 * const gItemEffectTable[]; +extern u8 gUnknown_02024A60; +extern struct BattleEnigmaBerry gEnigmaBerries[]; + +bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId) +{ +    u32 status = GetMonData(mon, MON_DATA_STATUS, 0); + +    if (status & healMask) +    { +        status &= ~healMask; +        SetMonData(mon, MON_DATA_STATUS, (u8 *)&status); +        if (gMain.inBattle && battleId != 4) +            gBattleMons[battleId].status1 &= ~healMask; +        return FALSE; +    } +    else +    { +        return TRUE; +    } +} + +u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) +{ +    u8 *temp; +    u8 *itemEffect; +    u8 offset; +    int i; +    u8 j; +    u8 val; + +    offset = 6; + +    temp = gItemEffectTable[itemId - 13]; + +    if (!temp && itemId != 175) +        return 0; + +    if (itemId == 175) +    { +        temp = gEnigmaBerries[gUnknown_02024A60].itemEffect; +    } + +    itemEffect = temp; + +    for (i = 0; i < 6; i++) +    { +        switch (i) +        { +        case 0: +        case 1: +        case 2: +        case 3: +            if (i == effectByte) +                return 0; +            break; +        case 4: +            val = itemEffect[4]; +            if (val & 0x20) +                val &= 0xDF; +            j = 0; +            while (val) +            { +                if (val & 1) +                { +                    switch (j) +                    { +                        case 2: +                            if (val & 0x10) +                                val &= 0xEF; +                        case 0: +                            if (i == effectByte && (val & effectBit)) +                                return offset; +                            offset++; +                            break; +                        case 1: +                            if (i == effectByte && (val & effectBit)) +                                return offset; +                            offset++; +                            break; +                        case 3: +                            if (i == effectByte && (val & effectBit)) +                                return offset; +                            offset++; +                            break; +                        case 7: +                            if (i == effectByte) +                                return 0; +                            break; +                    } +                } +                j++; +                val >>= 1; +                if (i == effectByte) +                    effectBit >>= 1; +            } +            break; +        case 5: +            val = itemEffect[5]; +            j = 0; +            while (val) +            { +                if (val & 1) +                { +                    switch (j) +                    { +                        case 0: +                        case 1: +                        case 2: +                        case 3: +                        case 4: +                        case 5: +                        case 6: +                            if (i == effectByte && (val & effectBit)) +                                return offset; +                            offset++; +                            break; +                        case 7: +                            if (i == effectByte) +                                return 0; +                            break; +                    } +                } +                j++; +                val >>= 1; +                if (i == effectByte) +                    effectBit >>= 1; +            } +            break; +        } +    } + +    return offset; +} | 
