summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--.gitmodules3
-rw-r--r--asm/cable_club.s4
-rw-r--r--asm/daycare.s458
-rw-r--r--asm/easy_chat.s334
-rw-r--r--asm/egg_hatch.s10
-rw-r--r--asm/field_map_obj.s595
-rw-r--r--asm/party_menu.s3625
-rw-r--r--data/specials.inc2
-rw-r--r--include/asm.inc.h17
-rw-r--r--include/battle_interface.h36
-rw-r--r--include/field_ground_effect.h10
-rw-r--r--include/field_map_obj.h46
-rw-r--r--include/fieldmap.h4
-rw-r--r--include/global.h10
-rw-r--r--include/menu.h2
-rw-r--r--include/pokemon.h1
-rw-r--r--include/record_mixing.h16
-rw-r--r--include/songs.h4
-rw-r--r--ld_script.txt4
-rw-r--r--src/battle_interface.c32
-rw-r--r--src/battle_party_menu.c1
-rw-r--r--src/credits.c1175
-rw-r--r--src/daycare.c367
-rw-r--r--src/easy_chat.c231
-rw-r--r--src/field_map_obj.c415
-rw-r--r--src/field_player_avatar.c12
-rw-r--r--src/intro.c1
-rw-r--r--src/menu.c2
-rw-r--r--src/mori_debug_menu.c4
-rw-r--r--src/party_menu.c1573
-rw-r--r--src/record_mixing.c188
m---------tools/agbcc0
33 files changed, 2640 insertions, 6543 deletions
diff --git a/.gitignore b/.gitignore
index 78af8c737..13752b437 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,7 +16,6 @@
*.bat
sound/**/*.bin
src/*.s
-tools/agbcc
ld_script_ruby.txt
ld_script_sapphire.txt
*.map
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 000000000..7dbd4ef6d
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "tools/agbcc"]
+ path = tools/agbcc
+ url = git@github.com:pret/agbcc
diff --git a/asm/cable_club.s b/asm/cable_club.s
index bd7a2bd5c..7e5d19c24 100644
--- a/asm/cable_club.s
+++ b/asm/cable_club.s
@@ -1515,7 +1515,7 @@ unref_sub_8083BB0: @ 8083BB0
bl CreateTask
lsls r0, 24
lsrs r0, 24
- ldr r2, _08083BD8 @ =sub_80B9484
+ ldr r2, _08083BD8 @ =Task_RecordMixing_Main
adds r1, r4, 0
bl SetTaskFuncWithFollowupFunc
bl ScriptContext1_Stop
@@ -1524,7 +1524,7 @@ unref_sub_8083BB0: @ 8083BB0
bx r0
.align 2, 0
_08083BD4: .4byte sub_80839DC
-_08083BD8: .4byte sub_80B9484
+_08083BD8: .4byte Task_RecordMixing_Main
thumb_func_end unref_sub_8083BB0
thumb_func_start sub_8083BDC
diff --git a/asm/daycare.s b/asm/daycare.s
index 47a84e8e0..2944f7565 100644
--- a/asm/daycare.s
+++ b/asm/daycare.s
@@ -6,446 +6,6 @@
.text
- thumb_func_start sub_8041324
-sub_8041324: @ 8041324
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r9, r0
- mov r10, r1
- movs r7, 0
- movs r5, 0
- mov r6, r10
- adds r6, 0x74
- movs r0, 0x1
- mov r8, r0
-_0804133E:
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 4
- mov r1, r9
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- beq _0804136E
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r4, 0
- movs r1, 0xC
- bl GetBoxMonData
- adds r1, r0, 0
- cmp r1, 0
- bne _0804136E
- lsls r0, r5, 1
- adds r0, r6, r0
- b _08041374
-_0804136E:
- lsls r0, r5, 1
- adds r0, r6, r0
- mov r1, r8
-_08041374:
- strh r1, [r0]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x1
- bls _0804133E
- mov r0, r10
- str r7, [r0, 0x70]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8041324
-
- thumb_func_start daycare_empty_slot
-daycare_empty_slot: @ 8041394
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r4, 0
-_0804139A:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 4
- adds r0, r5, r0
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- bne _080413B2
- lsls r0, r4, 24
- asrs r0, 24
- b _080413C0
-_080413B2:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- bls _0804139A
- movs r0, 0x1
- negs r0, r0
-_080413C0:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end daycare_empty_slot
-
- thumb_func_start sub_80413C8
-sub_80413C8: @ 80413C8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r7, r0, 0
- mov r8, r1
- mov r0, r8
- bl daycare_empty_slot
- lsls r0, 24
- lsrs r4, r0, 24
- mov r9, r4
- adds r0, r7, 0
- bl MonHasMail
- lsls r0, 24
- cmp r0, 0
- beq _0804144A
- lsls r0, r4, 24
- asrs r0, 24
- lsls r4, r0, 3
- subs r4, r0
- lsls r4, 3
- adds r5, r4, 0
- adds r5, 0xA0
- add r5, r8
- adds r6, r5, 0
- adds r6, 0x24
- ldr r1, _08041490 @ =gSaveBlock2
- adds r0, r6, 0
- bl StringCopy
- adds r0, r6, 0
- movs r1, 0xFC
- bl PadNameString
- adds r6, 0x8
- adds r0, r7, 0
- adds r1, r6, 0
- bl pokemon_get_nick
- adds r0, r7, 0
- movs r1, 0x40
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- add r4, r8
- ldr r2, _08041494 @ =gSaveBlock1
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- adds r4, 0xA0
- ldr r0, _08041498 @ =0x00002b4c
- adds r1, r0
- ldm r1!, {r0,r2,r3}
- stm r4!, {r0,r2,r3}
- ldm r1!, {r0,r2,r3}
- stm r4!, {r0,r2,r3}
- ldm r1!, {r0,r2,r3}
- stm r4!, {r0,r2,r3}
- adds r0, r7, 0
- bl TakeMailFromMon
-_0804144A:
- mov r2, r9
- lsls r4, r2, 24
- asrs r4, 24
- lsls r5, r4, 2
- adds r4, r5, r4
- lsls r4, 4
- add r4, r8
- adds r0, r4, 0
- adds r1, r7, 0
- movs r2, 0x50
- bl memcpy
- adds r0, r4, 0
- bl BoxMonRestorePP
- movs r0, 0x88
- lsls r0, 1
- add r0, r8
- adds r0, r5
- movs r1, 0
- str r1, [r0]
- adds r0, r7, 0
- bl ZeroMonData
- bl party_compaction
- bl CalculatePlayerPartyCount
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08041490: .4byte gSaveBlock2
-_08041494: .4byte gSaveBlock1
-_08041498: .4byte 0x00002b4c
- thumb_func_end sub_80413C8
-
- thumb_func_start daycare_send
-daycare_send: @ 804149C
- push {lr}
- ldr r0, _080414B4 @ =gLastFieldPokeMenuOpened
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080414B8 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080414BC @ =gSaveBlock1 + 0x2F9C
- bl sub_80413C8
- pop {r0}
- bx r0
- .align 2, 0
-_080414B4: .4byte gLastFieldPokeMenuOpened
-_080414B8: .4byte gPlayerParty
-_080414BC: .4byte gSaveBlock1 + 0x2F9C
- thumb_func_end daycare_send
-
- thumb_func_start sub_80414C0
-sub_80414C0: @ 80414C0
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r4, r5, 0
- adds r4, 0x50
- adds r0, r4, 0
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- beq _08041516
- adds r0, r5, 0
- movs r1, 0xB
- bl GetBoxMonData
- adds r6, r0, 0
- cmp r6, 0
- bne _08041516
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x50
- bl memcpy
- adds r0, r4, 0
- bl ZeroBoxMonData
- adds r0, r5, 0
- adds r0, 0xA0
- adds r4, 0x88
- adds r1, r4, 0
- movs r2, 0x38
- bl memcpy
- movs r0, 0x88
- lsls r0, 1
- adds r2, r5, r0
- adds r0, 0x4
- adds r1, r5, r0
- ldr r0, [r1]
- str r0, [r2]
- str r6, [r1]
- adds r0, r4, 0
- bl sub_80417F4
-_08041516:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80414C0
-
- thumb_func_start sub_804151C
-sub_804151C: @ 804151C
- push {r4-r7,lr}
- adds r4, r0, 0
- movs r5, 0
- ldr r7, _08041538 @ =0x0000ffff
-_08041524:
- adds r0, r4, 0
- bl TryIncrementMonLevel
- lsls r0, 24
- cmp r0, 0
- beq _08041560
- movs r6, 0x1
- adds r5, 0x1
- b _0804154C
- .align 2, 0
-_08041538: .4byte 0x0000ffff
-_0804153C:
- movs r6, 0
- cmp r0, r7
- bne _0804154C
- ldr r0, _0804156C @ =word_2024E82
- ldrh r1, [r0]
- adds r0, r4, 0
- bl DeleteFirstMoveAndGiveMoveToMon
-_0804154C:
- adds r0, r4, 0
- adds r1, r6, 0
- bl sub_803B7C8
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _0804153C
- cmp r5, 0x63
- ble _08041524
-_08041560:
- adds r0, r4, 0
- bl CalculateMonStats
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0804156C: .4byte word_2024E82
- thumb_func_end sub_804151C
-
- thumb_func_start sub_8041570
-sub_8041570: @ 8041570
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x68
- adds r5, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- lsls r7, r4, 2
- adds r0, r7, r4
- lsls r0, 4
- adds r6, r5, r0
- ldr r1, _08041640 @ =gStringVar1
- adds r0, r6, 0
- bl pokemon_get_nick_
- adds r0, r6, 0
- movs r1, 0xB
- bl GetBoxMonData
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- adds r0, r6, 0
- mov r1, sp
- bl sub_803B4B4
- mov r0, sp
- movs r1, 0x38
- bl GetMonData
- cmp r0, 0x64
- beq _080415D8
- mov r0, sp
- movs r1, 0x19
- bl GetMonData
- movs r2, 0x88
- lsls r2, 1
- adds r1, r5, r2
- adds r1, r7
- ldr r1, [r1]
- adds r0, r1
- str r0, [sp, 0x64]
- add r2, sp, 0x64
- mov r0, sp
- movs r1, 0x19
- bl SetMonData
- mov r0, sp
- bl sub_804151C
-_080415D8:
- ldr r0, _08041644 @ =gPlayerParty
- movs r1, 0xFA
- lsls r1, 1
- adds r1, r0
- mov r8, r1
- mov r0, r8
- mov r1, sp
- movs r2, 0x64
- bl memcpy
- lsls r0, r4, 3
- subs r0, r4
- lsls r1, r0, 3
- adds r0, r5, r1
- adds r0, 0xC0
- ldrh r0, [r0]
- cmp r0, 0
- beq _08041610
- adds r4, r1, 0
- adds r4, 0xA0
- adds r4, r5, r4
- mov r0, r8
- adds r1, r4, 0
- bl GiveMailToMon2
- adds r0, r4, 0
- bl sub_80417F4
-_08041610:
- bl party_compaction
- adds r0, r6, 0
- bl ZeroBoxMonData
- movs r2, 0x88
- lsls r2, 1
- adds r0, r5, r2
- adds r0, r7
- movs r1, 0
- str r1, [r0]
- adds r0, r5, 0
- bl sub_80414C0
- bl CalculatePlayerPartyCount
- mov r0, r9
- add sp, 0x68
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08041640: .4byte gStringVar1
-_08041644: .4byte gPlayerParty
- thumb_func_end sub_8041570
-
- thumb_func_start sub_8041648
-sub_8041648: @ 8041648
- push {lr}
- ldr r0, _0804165C @ =gSaveBlock1 + 0x2F9C
- ldr r1, _08041660 @ =gSpecialVar_0x8004
- ldrb r1, [r1]
- bl sub_8041570
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .align 2, 0
-_0804165C: .4byte gSaveBlock1 + 0x2F9C
-_08041660: .4byte gSpecialVar_0x8004
- thumb_func_end sub_8041648
-
- thumb_func_start sub_8041664
-sub_8041664: @ 8041664
- push {r4,r5,lr}
- sub sp, 0x54
- adds r4, r0, 0
- adds r5, r1, 0
- mov r0, sp
- adds r1, r4, 0
- movs r2, 0x50
- bl memcpy
- adds r0, r4, 0
- movs r1, 0x19
- bl GetBoxMonData
- adds r0, r5
- str r0, [sp, 0x50]
- add r2, sp, 0x50
- mov r0, sp
- movs r1, 0x19
- bl SetBoxMonData
- mov r0, sp
- bl GetLevelFromBoxMonExp
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x54
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8041664
-
thumb_func_start sub_80416A0
sub_80416A0: @ 80416A0
push {r4-r6,lr}
@@ -470,7 +30,7 @@ sub_80416A0: @ 80416A0
add r5, r8
ldr r1, [r5]
adds r0, r4, 0
- bl sub_8041664
+ bl Daycare_GetLevelAfterSteps
lsls r0, 24
lsrs r0, 24
subs r0, r6
@@ -500,7 +60,7 @@ sub_80416E8: @ 80416E8
adds r6, r0
ldr r1, _08041720 @ =gStringVar1
adds r0, r6, 0
- bl pokemon_get_nick_
+ bl GetBoxMonNick
ldr r0, _08041724 @ =gStringVar2
adds r1, r5, 0
movs r2, 0
@@ -532,7 +92,7 @@ sub_8041728: @ 8041728
adds r6, r0
ldr r1, _08041768 @ =gStringVar1
adds r0, r6, 0
- bl pokemon_get_nick_
+ bl GetBoxMonNick
movs r0, 0x64
adds r4, r5, 0
muls r4, r0
@@ -2065,7 +1625,7 @@ sub_80422C4: @ 80422C4
beq _080422FC
ldr r1, _0804231C @ =gStringVar1
adds r0, r6, 0
- bl pokemon_get_nick_
+ bl GetBoxMonNick
adds r0, r6, 0
movs r1, 0x3
bl GetBoxMonData
@@ -2090,7 +1650,7 @@ _080422FC:
beq _08042314
ldr r1, _08042324 @ =gStringVar2
adds r0, r4, 0
- bl pokemon_get_nick_
+ bl GetBoxMonNick
_08042314:
pop {r4-r6}
pop {r0}
@@ -2111,7 +1671,7 @@ sub_8042328: @ 8042328
ldr r4, _08042358 @ =gPlayerParty
adds r0, r4
ldr r1, _0804235C @ =gStringVar1
- bl pokemon_get_nick_
+ bl GetBoxMonNick
ldrb r0, [r6]
muls r0, r5
adds r0, r4
@@ -2154,7 +1714,7 @@ sp0B6_daycare: @ 8042370
_08042384: .4byte gSaveBlock1 + 0x2F9C
_08042388:
adds r0, r4, 0
- bl daycare_count_pokemon
+ bl Daycare_CountPokemon
lsls r0, 24
lsrs r0, 24
cmp r0, 0
@@ -2558,7 +2118,7 @@ _08042648:
adds r5, r1, r0
adds r0, r4, 0
adds r1, r5, 0
- bl pokemon_get_nick_
+ bl GetBoxMonNick
adds r0, r5, 0
adds r1, r4, 0
bl MonAppendGenderSymbol
@@ -2618,7 +2178,7 @@ _080426C6:
adds r1, r6, r3
adds r1, r2
ldr r1, [r1]
- bl sub_8041664
+ bl Daycare_GetLevelAfterSteps
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
diff --git a/asm/easy_chat.s b/asm/easy_chat.s
index 466d371a1..2983deea0 100644
--- a/asm/easy_chat.s
+++ b/asm/easy_chat.s
@@ -10831,338 +10831,4 @@ _080EB4AC: .4byte gEasyChatGroupWords
_080EB4B0: .4byte 0x0000ffff
thumb_func_end sub_80EB3FC
- thumb_func_start ConvertEasyChatWordsToString
-ConvertEasyChatWordsToString: @ 80EB4B4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r2, 16
- lsls r3, 16
- lsrs r3, 16
- mov r9, r3
- ldr r0, _080EB53C @ =0xffff0000
- adds r2, r0
- lsrs r7, r2, 16
- movs r0, 0
- cmp r0, r9
- bcs _080EB524
-_080EB4D6:
- movs r6, 0
- adds r0, 0x1
- mov r8, r0
- cmp r6, r7
- bcs _080EB508
- ldr r2, _080EB540 @ =0x0000ffff
-_080EB4E2:
- ldrh r1, [r5]
- adds r0, r4, 0
- str r2, [sp]
- bl sub_80EB3FC
- adds r4, r0, 0
- ldrh r0, [r5]
- ldr r2, [sp]
- cmp r0, r2
- beq _080EB4FC
- movs r0, 0
- strb r0, [r4]
- adds r4, 0x1
-_080EB4FC:
- adds r5, 0x2
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, r7
- bcc _080EB4E2
-_080EB508:
- ldrh r1, [r5]
- adds r5, 0x2
- adds r0, r4, 0
- bl sub_80EB3FC
- adds r4, r0, 0
- movs r0, 0xFE
- strb r0, [r4]
- adds r4, 0x1
- mov r1, r8
- lsls r0, r1, 16
- lsrs r0, 16
- cmp r0, r9
- bcc _080EB4D6
-_080EB524:
- subs r4, 0x1
- movs r0, 0xFF
- strb r0, [r4]
- adds r0, r4, 0
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080EB53C: .4byte 0xffff0000
-_080EB540: .4byte 0x0000ffff
- thumb_func_end ConvertEasyChatWordsToString
-
- thumb_func_start sub_80EB544
-sub_80EB544: @ 80EB544
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r2, 16
- lsls r3, 16
- lsrs r3, 16
- mov r10, r3
- ldr r0, _080EB5B0 @ =0xffff0000
- adds r2, r0
- lsrs r2, 16
- mov r8, r2
- movs r7, 0
- cmp r7, r10
- bcs _080EB5C8
-_080EB56A:
- movs r6, 0
- adds r1, r7, 0x1
- mov r9, r1
- cmp r6, r8
- bcs _080EB59C
- ldr r2, _080EB5B4 @ =0x0000ffff
-_080EB576:
- ldrh r1, [r5]
- adds r0, r4, 0
- str r2, [sp]
- bl sub_80EB3FC
- adds r4, r0, 0
- ldrh r0, [r5]
- ldr r2, [sp]
- cmp r0, r2
- beq _080EB590
- movs r0, 0
- strb r0, [r4]
- adds r4, 0x1
-_080EB590:
- adds r5, 0x2
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, r8
- bcc _080EB576
-_080EB59C:
- ldrh r1, [r5]
- adds r5, 0x2
- adds r0, r4, 0
- bl sub_80EB3FC
- adds r4, r0, 0
- cmp r7, 0
- bne _080EB5B8
- movs r0, 0xFE
- b _080EB5BA
- .align 2, 0
-_080EB5B0: .4byte 0xffff0000
-_080EB5B4: .4byte 0x0000ffff
-_080EB5B8:
- movs r0, 0xFA
-_080EB5BA:
- strb r0, [r4]
- adds r4, 0x1
- mov r1, r9
- lsls r0, r1, 16
- lsrs r7, r0, 16
- cmp r7, r10
- bcc _080EB56A
-_080EB5C8:
- subs r4, 0x1
- movs r0, 0xFF
- strb r0, [r4]
- adds r0, r4, 0
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80EB544
-
- thumb_func_start unref_sub_80EB5E0
-unref_sub_80EB5E0: @ 80EB5E0
- push {lr}
- lsls r1, r0, 16
- lsrs r3, r1, 16
- ldr r0, _080EB5F0 @ =0x0000ffff
- cmp r3, r0
- bne _080EB5F4
- movs r0, 0
- b _080EB67C
- .align 2, 0
-_080EB5F0: .4byte 0x0000ffff
-_080EB5F4:
- lsrs r1, 25
- ldr r2, _080EB608 @ =0x000001ff
- ands r2, r3
- cmp r1, 0x13
- bgt _080EB60C
- cmp r1, 0x12
- bge _080EB620
- cmp r1, 0
- beq _080EB610
- b _080EB630
- .align 2, 0
-_080EB608: .4byte 0x000001ff
-_080EB60C:
- cmp r1, 0x15
- bne _080EB630
-_080EB610:
- movs r0, 0xB
- adds r1, r2, 0
- muls r1, r0
- ldr r0, _080EB61C @ =gSpeciesNames
- adds r1, r0
- b _080EB660
- .align 2, 0
-_080EB61C: .4byte gSpeciesNames
-_080EB620:
- movs r0, 0xD
- adds r1, r2, 0
- muls r1, r0
- ldr r0, _080EB62C @ =gMoveNames
- adds r1, r0
- b _080EB660
- .align 2, 0
-_080EB62C: .4byte gMoveNames
-_080EB630:
- ldr r0, _080EB664 @ =gEasyChatGroupWords
- lsls r1, 2
- adds r1, r0
- ldr r1, [r1]
- subs r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r0, _080EB668 @ =0x0000ffff
- cmp r2, r0
- beq _080EB660
- adds r3, r0, 0
-_080EB646:
- ldrb r0, [r1]
- adds r1, 0x1
- subs r2, 0x1
- cmp r0, 0xFF
- beq _080EB658
-_080EB650:
- ldrb r0, [r1]
- adds r1, 0x1
- cmp r0, 0xFF
- bne _080EB650
-_080EB658:
- lsls r0, r2, 16
- lsrs r2, r0, 16
- cmp r2, r3
- bne _080EB646
-_080EB660:
- movs r2, 0
- b _080EB674
- .align 2, 0
-_080EB664: .4byte gEasyChatGroupWords
-_080EB668: .4byte 0x0000ffff
-_080EB66C:
- adds r1, 0x1
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
-_080EB674:
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _080EB66C
- adds r0, r2, 0
-_080EB67C:
- pop {r1}
- bx r1
- thumb_func_end unref_sub_80EB5E0
-
- thumb_func_start sub_80EB680
-sub_80EB680: @ 80EB680
- movs r0, 0
- bx lr
- thumb_func_end sub_80EB680
-
- thumb_func_start unref_sub_80EB684
-unref_sub_80EB684: @ 80EB684
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- lsls r1, 16
- lsrs r1, 16
- cmp r0, 0x7
- beq _080EB6B4
- cmp r0, 0x7
- bgt _080EB69E
- cmp r0, 0x5
- beq _080EB6A4
- b _080EB6EE
-_080EB69E:
- cmp r2, 0x8
- beq _080EB6C4
- b _080EB6EE
-_080EB6A4:
- movs r2, 0x6
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080EB6B0 @ =gSaveBlock1 + 0x273C
- b _080EB6CE
- .align 2, 0
-_080EB6B0: .4byte gSaveBlock1 + 0x273C
-_080EB6B4:
- movs r2, 0x2
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080EB6C0 @ =gSaveBlock1 + 0x2754
- b _080EB6CE
- .align 2, 0
-_080EB6C0: .4byte gSaveBlock1 + 0x2754
-_080EB6C4:
- movs r2, 0x1
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _080EB6F4 @ =gSaveBlock1 + 0x273A
-_080EB6CE:
- adds r1, r0, r1
- subs r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r0, _080EB6F8 @ =0x0000ffff
- cmp r2, r0
- beq _080EB6EE
- adds r4, r0, 0
- adds r3, r0, 0
-_080EB6E0:
- strh r4, [r1]
- adds r1, 0x2
- subs r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, r3
- bne _080EB6E0
-_080EB6EE:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080EB6F4: .4byte gSaveBlock1 + 0x273A
-_080EB6F8: .4byte 0x0000ffff
- thumb_func_end unref_sub_80EB684
-
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/egg_hatch.s b/asm/egg_hatch.s
index 90ae6aaf7..2f11d4111 100644
--- a/asm/egg_hatch.s
+++ b/asm/egg_hatch.s
@@ -52,7 +52,7 @@ AddHatchedMonToParty: @ 80429EC
bl sub_8090D90
ldr r1, _08042AA4 @ =gStringVar1
adds r0, r5, 0
- bl pokemon_get_nick
+ bl GetMonNick
mov r2, sp
adds r2, 0xE
movs r0, 0x4
@@ -110,7 +110,7 @@ sub_8042ABC: @ 8042ABC
lsls r0, 4
adds r0, r5, r0
mov r1, sp
- bl pokemon_get_nick_
+ bl GetBoxMonNick
lsls r0, r4, 3
subs r0, r4
lsls r1, r0, 3
@@ -857,7 +857,7 @@ _08043124:
ldr r1, _08043150 @ =gPlayerParty
adds r0, r1
ldr r1, _08043154 @ =gStringVar1
- bl pokemon_get_nick
+ bl GetMonNick
ldr r4, _08043158 @ =gStringVar4
ldr r1, _0804315C @ =gOtherText_HatchedFromEgg
adds r0, r4, 0
@@ -898,7 +898,7 @@ _08043180:
ldr r1, _080431A8 @ =gPlayerParty
adds r0, r1
ldr r1, _080431AC @ =gStringVar1
- bl pokemon_get_nick
+ bl GetMonNick
ldr r4, _080431B0 @ =gStringVar4
ldr r1, _080431B4 @ =gOtherText_NickHatchPrompt
adds r0, r4, 0
@@ -957,7 +957,7 @@ _080431DA:
adds r0, r6
ldr r1, _08043280 @ =gStringVar3
mov r10, r1
- bl pokemon_get_nick
+ bl GetMonNick
mov r2, r9
ldr r0, [r2]
ldrb r0, [r0, 0x4]
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index c3b867525..ee5aa61c0 100644
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -6,149 +6,6 @@
.text
- thumb_func_start sub_805E278
-sub_805E278: @ 805E278
- push {lr}
- adds r1, r0, 0
- movs r0, 0x2E
- ldrsh r2, [r1, r0]
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- ldr r2, _0805E294 @ =gMapObjects
- adds r0, r2
- ldr r2, _0805E298 @ =sub_805E29C
- bl meta_step
- pop {r0}
- bx r0
- .align 2, 0
-_0805E294: .4byte gMapObjects
-_0805E298: .4byte sub_805E29C
- thumb_func_end sub_805E278
-
- thumb_func_start sub_805E29C
-sub_805E29C: @ 805E29C
- push {r4,lr}
- ldr r3, _0805E2B8 @ =gUnknown_083753E4
- movs r4, 0x30
- ldrsh r2, [r1, r4]
- lsls r2, 2
- adds r2, r3
- ldr r2, [r2]
- bl _call_via_r2
- lsls r0, 24
- lsrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0805E2B8: .4byte gUnknown_083753E4
- thumb_func_end sub_805E29C
-
- thumb_func_start sub_805E2BC
-sub_805E2BC: @ 805E2BC
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl npc_reset
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl GetFaceDirectionAnimId
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r5, 0
- bl FieldObjectSetRegularAnim
- movs r0, 0x1
- strh r0, [r5, 0x30]
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_805E2BC
-
- thumb_func_start sub_805E2E8
-sub_805E2E8: @ 805E2E8
- push {r4,lr}
- adds r4, r1, 0
- bl FieldObjectExecRegularAnim
- lsls r0, 24
- cmp r0, 0
- beq _0805E302
- adds r0, r4, 0
- movs r1, 0x30
- bl sub_8064820
- movs r0, 0x2
- strh r0, [r4, 0x30]
-_0805E302:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_805E2E8
-
- thumb_func_start sub_805E30C
-sub_805E30C: @ 805E30C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r0, r5, 0
- bl sub_8064824
- lsls r0, 24
- cmp r0, 0
- bne _0805E32A
- adds r0, r4, 0
- bl FieldObjectIsTrainerAndCloseToPlayer
- lsls r0, 24
- cmp r0, 0
- beq _0805E32E
-_0805E32A:
- movs r0, 0x3
- strh r0, [r5, 0x30]
-_0805E32E:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_805E30C
-
- thumb_func_start sub_805E338
-sub_805E338: @ 805E338
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r1, _0805E378 @ =gUnknown_083753F4
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- adds r0, r4, 0
- movs r1, 0
- bl sub_805CD60
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _0805E364
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- add r0, sp
- ldrb r1, [r0]
-_0805E364:
- adds r0, r4, 0
- bl FieldObjectSetDirection
- movs r0, 0
- strh r0, [r5, 0x30]
- movs r0, 0x1
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0805E378: .4byte gUnknown_083753F4
- thumb_func_end sub_805E338
-
thumb_func_start sub_805E37C
sub_805E37C: @ 805E37C
push {lr}
@@ -3660,458 +3517,6 @@ sub_805FD08: @ 805FD08
.section .text_805fd18
- thumb_func_start sub_805FE28
-sub_805FE28: @ 805FE28
- push {r4,lr}
- adds r3, r1, 0
- lsls r2, 24
- lsrs r2, 24
- ldrb r0, [r0, 0x1]
- lsls r0, 27
- lsrs r4, r0, 31
- cmp r4, 0
- bne _0805FE5E
- adds r0, r3, 0
- adds r0, 0x2A
- strb r2, [r0]
- adds r0, 0x1
- ldrb r2, [r0]
- adds r1, r0, 0
- cmp r2, 0x1
- bne _0805FE50
- movs r0, 0x2
- strb r0, [r1]
- b _0805FE56
-_0805FE50:
- cmp r2, 0x3
- bne _0805FE56
- strb r4, [r1]
-_0805FE56:
- ldrb r1, [r1]
- adds r0, r3, 0
- bl SeekSpriteAnim
-_0805FE5E:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_805FE28
-
- thumb_func_start sub_805FE64
-sub_805FE64: @ 805FE64
- push {lr}
- lsls r2, 24
- lsrs r2, 24
- ldrb r0, [r0, 0x1]
- lsls r0, 27
- cmp r0, 0
- blt _0805FE8C
- adds r0, r1, 0
- adds r0, 0x2A
- strb r2, [r0]
- movs r2, 0x3
- adds r0, 0x1
- ldrb r0, [r0]
- cmp r0, 0x1
- bhi _0805FE84
- movs r2, 0x1
-_0805FE84:
- adds r0, r1, 0
- adds r1, r2, 0
- bl SeekSpriteAnim
-_0805FE8C:
- pop {r0}
- bx r0
- thumb_func_end sub_805FE64
-
- thumb_func_start sub_805FE90
-sub_805FE90: @ 805FE90
- push {lr}
- lsls r1, 16
- lsrs r1, 16
- lsls r3, 16
- lsrs r3, 16
- lsls r0, 16
- asrs r0, 16
- lsls r2, 16
- asrs r2, 16
- cmp r0, r2
- ble _0805FEAA
- movs r0, 0x3
- b _0805FEC0
-_0805FEAA:
- cmp r0, r2
- bge _0805FEB2
- movs r0, 0x4
- b _0805FEC0
-_0805FEB2:
- lsls r1, 16
- lsls r0, r3, 16
- cmp r1, r0
- bgt _0805FEBE
- movs r0, 0x1
- b _0805FEC0
-_0805FEBE:
- movs r0, 0x2
-_0805FEC0:
- pop {r1}
- bx r1
- thumb_func_end sub_805FE90
-
- thumb_func_start npc_set_running_behaviour_etc
-npc_set_running_behaviour_etc: @ 805FEC4
- push {r4,lr}
- mov r12, r0
- lsls r1, 24
- lsrs r1, 24
- movs r3, 0
- strb r1, [r0, 0x6]
- adds r0, 0x21
- strb r3, [r0]
- adds r0, 0x1
- strb r3, [r0]
- ldr r4, _0805FF08 @ =gSprites
- mov r0, r12
- ldrb r2, [r0, 0x4]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r2, r4, 0
- adds r2, 0x1C
- adds r0, r2
- ldr r2, _0805FF0C @ =gUnknown_0836DA88
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- str r1, [r0]
- mov r0, r12
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- strh r3, [r0, 0x30]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0805FF08: .4byte gSprites
-_0805FF0C: .4byte gUnknown_0836DA88
- thumb_func_end npc_set_running_behaviour_etc
-
- thumb_func_start npc_running_behaviour_by_direction
-npc_running_behaviour_by_direction: @ 805FF10
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0805FF1C @ =gUnknown_0837567B
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_0805FF1C: .4byte gUnknown_0837567B
- thumb_func_end npc_running_behaviour_by_direction
-
- thumb_func_start sub_805FF20
-sub_805FF20: @ 805FF20
- push {r4-r6,lr}
- sub sp, 0x4
- adds r6, r0, 0
- lsls r5, r1, 24
- lsrs r5, 24
- ldrh r1, [r6, 0x10]
- mov r0, sp
- strh r1, [r0]
- ldrh r0, [r6, 0x12]
- mov r4, sp
- adds r4, 0x2
- strh r0, [r4]
- adds r0, r5, 0
- mov r1, sp
- adds r2, r4, 0
- bl MoveCoords
- mov r0, sp
- movs r2, 0
- ldrsh r1, [r0, r2]
- movs r0, 0
- ldrsh r2, [r4, r0]
- adds r0, r6, 0
- adds r3, r5, 0
- bl npc_block_way
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_805FF20
-
- thumb_func_start npc_block_way
-npc_block_way: @ 805FF60
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r6, r0, 0
- lsls r1, 16
- lsls r2, 16
- lsls r3, 24
- lsrs r7, r3, 24
- mov r8, r7
- lsrs r0, r1, 16
- mov r9, r0
- asrs r5, r1, 16
- lsrs r0, r2, 16
- mov r10, r0
- asrs r4, r2, 16
- adds r0, r6, 0
- adds r1, r5, 0
- adds r2, r4, 0
- bl IsCoordOutsideFieldObjectMovementRect
- lsls r0, 24
- cmp r0, 0
- beq _0805FF96
- movs r0, 0x1
- b _08060016
-_0805FF96:
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridIsImpassableAt
- lsls r0, 24
- cmp r0, 0
- bne _0805FFD8
- adds r0, r5, 0
- adds r1, r4, 0
- bl GetMapBorderIdAt
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- beq _0805FFD8
- adds r0, r6, 0
- adds r1, r5, 0
- adds r2, r4, 0
- adds r3, r7, 0
- bl IsMetatileDirectionallyImpassable
- lsls r0, 24
- cmp r0, 0
- bne _0805FFD8
- ldrb r0, [r6, 0x1]
- lsrs r0, 7
- cmp r0, 0
- beq _0805FFDC
- mov r0, r8
- bl CanCameraMoveInDirection
- cmp r0, 0
- bne _0805FFDC
-_0805FFD8:
- movs r0, 0x2
- b _08060016
-_0805FFDC:
- ldrb r0, [r6, 0xB]
- lsls r0, 28
- lsrs r0, 28
- mov r2, r9
- lsls r1, r2, 16
- asrs r5, r1, 16
- mov r2, r10
- lsls r1, r2, 16
- asrs r4, r1, 16
- adds r1, r5, 0
- adds r2, r4, 0
- bl IsZCoordMismatchAt
- lsls r0, 24
- cmp r0, 0
- beq _08060000
- movs r0, 0x3
- b _08060016
-_08060000:
- adds r0, r6, 0
- adds r1, r5, 0
- adds r2, r4, 0
- bl CheckForCollisionBetweenFieldObjects
- lsls r0, 24
- cmp r0, 0
- bne _08060014
- movs r0, 0
- b _08060016
-_08060014:
- movs r0, 0x4
-_08060016:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end npc_block_way
-
- thumb_func_start sub_8060024
-sub_8060024: @ 8060024
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r7, r0, 0
- lsls r1, 16
- lsls r2, 16
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- lsrs r0, r1, 16
- mov r9, r0
- asrs r6, r1, 16
- lsrs r0, r2, 16
- mov r10, r0
- asrs r5, r2, 16
- adds r0, r7, 0
- adds r1, r6, 0
- adds r2, r5, 0
- bl IsCoordOutsideFieldObjectMovementRect
- lsls r0, 24
- lsrs r0, 24
- negs r1, r0
- orrs r1, r0
- lsrs r4, r1, 31
- adds r0, r6, 0
- adds r1, r5, 0
- bl MapGridIsImpassableAt
- lsls r0, 24
- cmp r0, 0
- bne _0806009C
- adds r0, r6, 0
- adds r1, r5, 0
- bl GetMapBorderIdAt
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- beq _0806009C
- adds r0, r7, 0
- adds r1, r6, 0
- adds r2, r5, 0
- mov r3, r8
- bl IsMetatileDirectionallyImpassable
- lsls r0, 24
- cmp r0, 0
- bne _0806009C
- ldrb r0, [r7, 0x1]
- lsrs r0, 7
- cmp r0, 0
- beq _080600A0
- mov r0, r8
- bl CanCameraMoveInDirection
- cmp r0, 0
- bne _080600A0
-_0806009C:
- movs r0, 0x2
- orrs r4, r0
-_080600A0:
- ldrb r0, [r7, 0xB]
- lsls r0, 28
- lsrs r0, 28
- mov r2, r9
- lsls r1, r2, 16
- asrs r6, r1, 16
- mov r2, r10
- lsls r1, r2, 16
- asrs r5, r1, 16
- adds r1, r6, 0
- adds r2, r5, 0
- bl IsZCoordMismatchAt
- lsls r0, 24
- cmp r0, 0
- beq _080600C8
- movs r0, 0x4
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_080600C8:
- adds r0, r7, 0
- adds r1, r6, 0
- adds r2, r5, 0
- bl CheckForCollisionBetweenFieldObjects
- lsls r0, 24
- cmp r0, 0
- beq _080600E0
- movs r0, 0x8
- orrs r4, r0
- lsls r0, r4, 24
- lsrs r4, r0, 24
-_080600E0:
- adds r0, r4, 0
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8060024
-
- thumb_func_start IsCoordOutsideFieldObjectMovementRect
-IsCoordOutsideFieldObjectMovementRect: @ 80600F0
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r1, 16
- lsrs r3, r1, 16
- lsls r2, 16
- lsrs r5, r2, 16
- ldrb r1, [r4, 0x19]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0
- beq _08060128
- lsls r1, 28
- lsrs r2, r1, 28
- ldrh r0, [r4, 0xC]
- subs r2, r0, r2
- lsrs r1, 28
- adds r0, r1
- lsls r0, 16
- lsrs r1, r0, 16
- lsls r2, 16
- lsls r0, r3, 16
- asrs r3, r0, 16
- cmp r2, r0
- bgt _08060154
- lsls r0, r1, 16
- asrs r0, 16
- cmp r0, r3
- blt _08060154
-_08060128:
- ldrb r1, [r4, 0x19]
- movs r0, 0xF0
- ands r0, r1
- cmp r0, 0
- beq _08060158
- lsls r1, 24
- lsrs r2, r1, 28
- ldrh r0, [r4, 0xE]
- subs r2, r0, r2
- lsrs r1, 28
- adds r0, r1
- lsls r0, 16
- lsrs r1, r0, 16
- lsls r2, 16
- lsls r0, r5, 16
- asrs r3, r0, 16
- cmp r2, r0
- bgt _08060154
- lsls r0, r1, 16
- asrs r0, 16
- cmp r0, r3
- bge _08060158
-_08060154:
- movs r0, 0x1
- b _0806015A
-_08060158:
- movs r0, 0
-_0806015A:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end IsCoordOutsideFieldObjectMovementRect
-
thumb_func_start IsMetatileDirectionallyImpassable
IsMetatileDirectionallyImpassable: @ 8060160
push {r4-r7,lr}
diff --git a/asm/party_menu.s b/asm/party_menu.s
index 534d4aaa4..053d8b8b0 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -7446,3631 +7446,6 @@ PartyMenuGetPopupMenuFunc: @ 806E81C
bx lr
thumb_func_end PartyMenuGetPopupMenuFunc
- .section .text_806E884
-
-
-
- thumb_func_start sub_806E8D0
-sub_806E8D0: @ 806E8D0
- push {r4,r5,lr}
- adds r5, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r5, 16
- lsrs r5, 16
- ldr r4, _0806E8FC @ =0x0201c000
- str r2, [r4, 0x10]
- strb r0, [r4, 0x4]
- bl sub_806CA38
- strb r0, [r4, 0x5]
- strh r5, [r4, 0x6]
- ldrb r1, [r4, 0x5]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0806E900 @ =gPlayerParty
- adds r0, r1
- str r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0806E8FC: .4byte 0x0201c000
-_0806E900: .4byte gPlayerParty
- thumb_func_end sub_806E8D0
-
- thumb_func_start PartyMenuUpdateMonHeldItem
-PartyMenuUpdateMonHeldItem: @ 806E904
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- lsls r1, 16
- lsrs r4, r1, 16
- adds r0, r4, 0
- bl ItemIsMail
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0806E93C
- adds r0, r5, 0
- adds r1, r4, 0
- bl GiveMailToMon
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _0806E930
- movs r0, 0x1
- b _0806E958
-_0806E930:
- ldr r1, _0806E938 @ =gUnknown_0202E8F4
- movs r0, 0x2
- b _0806E940
- .align 2, 0
-_0806E938: .4byte gUnknown_0202E8F4
-_0806E93C:
- ldr r1, _0806E960 @ =gUnknown_0202E8F4
- movs r0, 0x1
-_0806E940:
- strb r0, [r1]
- mov r0, sp
- strb r4, [r0]
- mov r1, sp
- lsrs r0, r4, 8
- strb r0, [r1, 0x1]
- adds r0, r5, 0
- movs r1, 0xC
- mov r2, sp
- bl SetMonData
- movs r0, 0
-_0806E958:
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0806E960: .4byte gUnknown_0202E8F4
- thumb_func_end PartyMenuUpdateMonHeldItem
-
- thumb_func_start PartyMenuTryGiveMonHeldItem
-PartyMenuTryGiveMonHeldItem: @ 806E964
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r8, r2
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r5, r1, 16
- mov r9, r5
- ldr r2, _0806E9D4 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r6, r1, r2
- ldr r1, _0806E9D8 @ =TaskDummy
- str r1, [r6]
- adds r1, r5, 0
- mov r2, r8
- bl sub_806E8D0
- ldr r4, _0806E9DC @ =0x0201c000
- ldr r0, [r4]
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r2, r0, 16
- adds r7, r2, 0
- ldr r1, _0806E9E0 @ =gUnknown_0202E8F4
- movs r0, 0
- strb r0, [r1]
- ldr r0, _0806E9E4 @ =gUnknown_0202E8F8
- mov r10, r0
- movs r0, 0
- mov r1, r10
- strh r0, [r1]
- cmp r2, 0
- beq _0806EA44
- adds r0, r2, 0
- bl ItemIsMail
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0806E9F0
- ldr r0, _0806E9E8 @ =gOtherText_MailMustBeRemoved
- movs r1, 0x1
- bl sub_806E834
- ldr r0, _0806E9EC @ =party_menu_link_mon_held_item_object
- movs r1, 0x5
- bl CreateTask
- b _0806EA78
- .align 2, 0
-_0806E9D4: .4byte gTasks
-_0806E9D8: .4byte TaskDummy
-_0806E9DC: .4byte 0x0201c000
-_0806E9E0: .4byte gUnknown_0202E8F4
-_0806E9E4: .4byte gUnknown_0202E8F8
-_0806E9E8: .4byte gOtherText_MailMustBeRemoved
-_0806E9EC: .4byte party_menu_link_mon_held_item_object
-_0806E9F0:
- ldr r0, [r4]
- ldr r1, _0806EA30 @ =gStringVar1
- bl GetMonNickname
- ldr r1, _0806EA34 @ =gStringVar2
- adds r0, r7, 0
- bl CopyItemName
- ldr r4, _0806EA38 @ =gStringVar4
- ldr r1, _0806EA3C @ =gOtherText_AlreadyHolding
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_806E834
- ldr r0, _0806EA40 @ =Task_ConfirmGiveHeldItem
- movs r1, 0x5
- bl CreateTask
- adds r0, r5, 0
- bl ItemIsMail
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0806EA78
- mov r0, r10
- strh r7, [r0]
- b _0806EA78
- .align 2, 0
-_0806EA30: .4byte gStringVar1
-_0806EA34: .4byte gStringVar2
-_0806EA38: .4byte gStringVar4
-_0806EA3C: .4byte gOtherText_AlreadyHolding
-_0806EA40: .4byte Task_ConfirmGiveHeldItem
-_0806EA44:
- ldr r0, [r4]
- adds r1, r5, 0
- bl PartyMenuUpdateMonHeldItem
- adds r0, r5, 0
- movs r1, 0x1
- bl RemoveBagItem
- adds r0, r5, 0
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _0806EA66
- mov r1, r8
- str r1, [r6]
- b _0806EA78
-_0806EA66:
- ldrb r0, [r4, 0x5]
- mov r1, r9
- movs r2, 0x1
- bl DisplayGiveHeldItemMessage
- ldr r0, _0806EA88 @ =party_menu_link_mon_held_item_object
- movs r1, 0x5
- bl CreateTask
-_0806EA78:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0806EA88: .4byte party_menu_link_mon_held_item_object
- thumb_func_end PartyMenuTryGiveMonHeldItem
-
- thumb_func_start party_menu_link_mon_held_item_object
-party_menu_link_mon_held_item_object: @ 806EA8C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0806EAC0 @ =gUnknown_0202E8F6
- ldrb r0, [r0]
- cmp r0, 0
- bne _0806EABA
- ldr r4, _0806EAC4 @ =0x0201c000
- ldrb r0, [r4, 0x4]
- ldrb r1, [r4, 0x5]
- bl SetHeldItemIconVisibility
- ldr r2, _0806EAC8 @ =gTasks
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldr r1, [r4, 0x10]
- str r1, [r0]
- adds r0, r5, 0
- bl DestroyTask
-_0806EABA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0806EAC0: .4byte gUnknown_0202E8F6
-_0806EAC4: .4byte 0x0201c000
-_0806EAC8: .4byte gTasks
- thumb_func_end party_menu_link_mon_held_item_object
-
- thumb_func_start PartyMenuTryGiveMonHeldItem_806EACC
-PartyMenuTryGiveMonHeldItem_806EACC: @ 806EACC
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- bne _0806EB74
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- ldr r4, _0806EB30 @ =0x0201c000
- ldr r0, [r4]
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- ldrh r0, [r4, 0x6]
- movs r1, 0x1
- bl RemoveBagItem
- adds r0, r5, 0
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0806EB5C
- ldr r0, [r4]
- ldrh r1, [r4, 0x6]
- bl PartyMenuUpdateMonHeldItem
- ldrh r0, [r4, 0x6]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _0806EB34
- ldrb r0, [r4, 0x5]
- adds r1, r5, 0
- movs r2, 0x1
- bl DisplayTakeHeldItemMessage
- b _0806EB9A
- .align 2, 0
-_0806EB30: .4byte 0x0201c000
-_0806EB34:
- ldrh r0, [r4, 0x6]
- ldr r1, _0806EB50 @ =gStringVar1
- bl CopyItemName
- ldr r4, _0806EB54 @ =gStringVar4
- ldr r1, _0806EB58 @ =gOtherText_TakenAndReplaced
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_806E834
- b _0806EB9A
- .align 2, 0
-_0806EB50: .4byte gStringVar1
-_0806EB54: .4byte gStringVar4
-_0806EB58: .4byte gOtherText_TakenAndReplaced
-_0806EB5C:
- ldr r0, _0806EB70 @ =gOtherText_BagFullCannotRemoveItem
- movs r1, 0
- bl sub_806E834
- ldrh r0, [r4, 0x6]
- movs r1, 0x1
- bl AddBagItem
- b _0806EB9A
- .align 2, 0
-_0806EB70: .4byte gOtherText_BagFullCannotRemoveItem
-_0806EB74:
- cmp r1, 0x1
- beq _0806EB80
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _0806EBA8
-_0806EB80:
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _0806EB8E
- movs r0, 0x5
- bl PlaySE
-_0806EB8E:
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl MenuZeroFillWindowRect
-_0806EB9A:
- ldr r0, _0806EBB0 @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, _0806EBB4 @ =party_menu_link_mon_held_item_object
- str r0, [r1]
-_0806EBA8:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0806EBB0: .4byte gTasks
-_0806EBB4: .4byte party_menu_link_mon_held_item_object
- thumb_func_end PartyMenuTryGiveMonHeldItem_806EACC
-
- thumb_func_start Task_ConfirmGiveHeldItem
-Task_ConfirmGiveHeldItem: @ 806EBB8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0806EBE4 @ =gUnknown_0202E8F6
- ldrb r0, [r0]
- cmp r0, 0
- bne _0806EBDE
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1
- bl DisplayYesNoMenu
- ldr r0, _0806EBE8 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0806EBEC @ =PartyMenuTryGiveMonHeldItem_806EACC
- str r0, [r1]
-_0806EBDE:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0806EBE4: .4byte gUnknown_0202E8F6
-_0806EBE8: .4byte gTasks
-_0806EBEC: .4byte PartyMenuTryGiveMonHeldItem_806EACC
- thumb_func_end Task_ConfirmGiveHeldItem
-
- thumb_func_start DisplayGiveHeldItemMessage
-DisplayGiveHeldItemMessage: @ 806EBF0
- push {r4,r5,lr}
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 24
- lsrs r5, 24
- movs r1, 0x64
- muls r0, r1
- ldr r1, _0806EC30 @ =gPlayerParty
- adds r0, r1
- ldr r1, _0806EC34 @ =gStringVar1
- bl GetMonNickname
- ldr r1, _0806EC38 @ =gStringVar2
- adds r0, r4, 0
- bl CopyItemName
- ldr r4, _0806EC3C @ =gStringVar4
- ldr r1, _0806EC40 @ =gOtherText_WasGivenToHold
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_806E834
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0806EC30: .4byte gPlayerParty
-_0806EC34: .4byte gStringVar1
-_0806EC38: .4byte gStringVar2
-_0806EC3C: .4byte gStringVar4
-_0806EC40: .4byte gOtherText_WasGivenToHold
- thumb_func_end DisplayGiveHeldItemMessage
-
- thumb_func_start PartyMenuTryGiveMonMail
-PartyMenuTryGiveMonMail: @ 806EC44
- push {r4,r5,lr}
- adds r2, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _0806ECA0 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r3
- ldr r3, _0806ECA4 @ =TaskDummy
- str r3, [r1]
- movs r1, 0
- bl sub_806E8D0
- ldr r5, _0806ECA8 @ =0x0201c000
- ldr r0, [r5]
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- ldr r2, _0806ECAC @ =gUnknown_0202E8F4
- movs r1, 0
- strb r1, [r2]
- movs r1, 0xF8
- lsls r1, 6
- adds r2, r5, r1
- ldrb r1, [r2]
- adds r1, 0x6
- ldrb r2, [r2, 0x2]
- adds r1, r2
- lsls r2, r1, 3
- adds r2, r1
- lsls r2, 2
- ldr r1, _0806ECB0 @ =gSaveBlock1 + 0x2B4C
- adds r4, r2, r1
- cmp r0, 0
- beq _0806ECBC
- ldr r0, _0806ECB4 @ =gOtherText_PokeHoldingItemCantMail
- movs r1, 0x1
- bl sub_806E834
- ldr r0, _0806ECB8 @ =party_menu_link_mon_held_item_object
- movs r1, 0x5
- bl CreateTask
- b _0806ECDA
- .align 2, 0
-_0806ECA0: .4byte gTasks
-_0806ECA4: .4byte TaskDummy
-_0806ECA8: .4byte 0x0201c000
-_0806ECAC: .4byte gUnknown_0202E8F4
-_0806ECB0: .4byte gSaveBlock1 + 0x2B4C
-_0806ECB4: .4byte gOtherText_PokeHoldingItemCantMail
-_0806ECB8: .4byte party_menu_link_mon_held_item_object
-_0806ECBC:
- ldr r0, [r5]
- adds r1, r4, 0
- bl GiveMailToMon2
- adds r0, r4, 0
- bl ClearMailStruct
- ldr r0, _0806ECE0 @ =gOtherText_MailTransferredMailbox
- movs r1, 0x1
- bl sub_806E834
- ldr r0, _0806ECE4 @ =party_menu_link_mon_held_item_object
- movs r1, 0x5
- bl CreateTask
-_0806ECDA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0806ECE0: .4byte gOtherText_MailTransferredMailbox
-_0806ECE4: .4byte party_menu_link_mon_held_item_object
- thumb_func_end PartyMenuTryGiveMonMail
-
- thumb_func_start PartyMenuTryGiveMonHeldItem_806ECE8
-PartyMenuTryGiveMonHeldItem_806ECE8: @ 806ECE8
- push {r4-r6,lr}
- sub sp, 0x4
- adds r2, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _0806ED38 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r3
- ldr r3, _0806ED3C @ =TaskDummy
- str r3, [r1]
- movs r1, 0
- bl sub_806E8D0
- ldr r5, _0806ED40 @ =0x0201c000
- ldr r0, [r5]
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- adds r6, r4, 0
- cmp r4, 0
- bne _0806ED50
- ldr r4, _0806ED44 @ =gStringVar4
- ldr r1, _0806ED48 @ =gOtherText_NotHoldingAnything
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0
- bl sub_806E834
- ldr r0, _0806ED4C @ =party_menu_link_mon_held_item_object
- movs r1, 0x5
- bl CreateTask
- b _0806EDA2
- .align 2, 0
-_0806ED38: .4byte gTasks
-_0806ED3C: .4byte TaskDummy
-_0806ED40: .4byte 0x0201c000
-_0806ED44: .4byte gStringVar4
-_0806ED48: .4byte gOtherText_NotHoldingAnything
-_0806ED4C: .4byte party_menu_link_mon_held_item_object
-_0806ED50:
- mov r0, sp
- movs r1, 0
- strb r1, [r0]
- strb r1, [r0, 0x1]
- adds r0, r4, 0
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0806ED92
- adds r0, r4, 0
- bl ItemIsMail
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0806ED7C
- ldr r0, [r5]
- bl TakeMailFromMon
-_0806ED7C:
- ldrb r0, [r5, 0x5]
- adds r1, r6, 0
- movs r2, 0
- bl DisplayTakeHeldItemMessage
- ldr r0, [r5]
- movs r1, 0xC
- mov r2, sp
- bl SetMonData
- b _0806ED9A
-_0806ED92:
- ldr r0, _0806EDAC @ =gOtherText_BagFullCannotRemoveItem
- movs r1, 0
- bl sub_806E834
-_0806ED9A:
- ldr r0, _0806EDB0 @ =party_menu_link_mon_held_item_object
- movs r1, 0x5
- bl CreateTask
-_0806EDA2:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0806EDAC: .4byte gOtherText_BagFullCannotRemoveItem
-_0806EDB0: .4byte party_menu_link_mon_held_item_object
- thumb_func_end PartyMenuTryGiveMonHeldItem_806ECE8
-
- thumb_func_start DisplayTakeHeldItemMessage
-DisplayTakeHeldItemMessage: @ 806EDB4
- push {r4,r5,lr}
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 24
- lsrs r5, 24
- movs r1, 0x64
- muls r0, r1
- ldr r1, _0806EDF4 @ =gPlayerParty
- adds r0, r1
- ldr r1, _0806EDF8 @ =gStringVar1
- bl GetMonNickname
- ldr r1, _0806EDFC @ =gStringVar2
- adds r0, r4, 0
- bl CopyItemName
- ldr r4, _0806EE00 @ =gStringVar4
- ldr r1, _0806EE04 @ =gOtherText_ReceivedTheThingFrom
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_806E834
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0806EDF4: .4byte gPlayerParty
-_0806EDF8: .4byte gStringVar1
-_0806EDFC: .4byte gStringVar2
-_0806EE00: .4byte gStringVar4
-_0806EE04: .4byte gOtherText_ReceivedTheThingFrom
- thumb_func_end DisplayTakeHeldItemMessage
-
- thumb_func_start DoTakeMail
-DoTakeMail: @ 806EE08
- push {r4,lr}
- adds r2, r1, 0
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _0806EE48 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r3
- ldr r3, _0806EE4C @ =TaskDummy
- str r3, [r1]
- movs r1, 0
- bl sub_806E8D0
- ldr r4, _0806EE50 @ =0x0201c000
- ldr r0, [r4]
- movs r1, 0xC
- bl GetMonData
- strh r0, [r4, 0x6]
- ldr r0, _0806EE54 @ =gOtherText_SendRemovedMailPrompt
- movs r1, 0x1
- bl sub_806E834
- ldr r0, _0806EE58 @ =Task_ConfirmTakeHeldMail
- movs r1, 0x5
- bl CreateTask
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0806EE48: .4byte gTasks
-_0806EE4C: .4byte TaskDummy
-_0806EE50: .4byte 0x0201c000
-_0806EE54: .4byte gOtherText_SendRemovedMailPrompt
-_0806EE58: .4byte Task_ConfirmTakeHeldMail
- thumb_func_end DoTakeMail
-
- thumb_func_start Task_LoseMailMessage
-Task_LoseMailMessage: @ 806EE5C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- bne _0806EEB0
- ldr r5, _0806EE90 @ =0x0201c000
- ldrh r0, [r5, 0x6]
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0806EE98
- ldr r0, [r5]
- bl TakeMailFromMon
- ldr r0, _0806EE94 @ =gOtherText_MailTaken
- movs r1, 0
- bl sub_806E834
- b _0806EEA0
- .align 2, 0
-_0806EE90: .4byte 0x0201c000
-_0806EE94: .4byte gOtherText_MailTaken
-_0806EE98:
- ldr r0, _0806EEAC @ =gOtherText_BagFullCannotRemoveItem
- movs r1, 0
- bl sub_806E834
-_0806EEA0:
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- b _0806EEDE
- .align 2, 0
-_0806EEAC: .4byte gOtherText_BagFullCannotRemoveItem
-_0806EEB0:
- cmp r1, 0x1
- beq _0806EEBC
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _0806EEF0
-_0806EEBC:
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _0806EECA
- movs r0, 0x5
- bl PlaySE
-_0806EECA:
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- movs r0, 0
- movs r1, 0xE
- movs r2, 0x1D
- movs r3, 0x13
-_0806EEDE:
- bl MenuZeroFillWindowRect
- ldr r0, _0806EEF8 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0806EEFC @ =party_menu_link_mon_held_item_object
- str r0, [r1]
-_0806EEF0:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0806EEF8: .4byte gTasks
-_0806EEFC: .4byte party_menu_link_mon_held_item_object
- thumb_func_end Task_LoseMailMessage
-
- thumb_func_start Task_ConfirmLoseMailMessage
-Task_ConfirmLoseMailMessage: @ 806EF00
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0806EF2C @ =gUnknown_0202E8F6
- ldrb r0, [r0]
- cmp r0, 0
- bne _0806EF26
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1
- bl DisplayYesNoMenu
- ldr r0, _0806EF30 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0806EF34 @ =Task_LoseMailMessage
- str r0, [r1]
-_0806EF26:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0806EF2C: .4byte gUnknown_0202E8F6
-_0806EF30: .4byte gTasks
-_0806EF34: .4byte Task_LoseMailMessage
- thumb_func_end Task_ConfirmLoseMailMessage
-
- thumb_func_start Task_TakeHeldMail
-Task_TakeHeldMail: @ 806EF38
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- bne _0806EF9C
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- ldr r0, _0806EF70 @ =0x0201c000
- ldr r0, [r0]
- bl TakeMailFromMon2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _0806EF78
- ldr r0, _0806EF74 @ =gOtherText_MailWasSent
- movs r1, 0
- bl sub_806E834
- b _0806EF80
- .align 2, 0
-_0806EF70: .4byte 0x0201c000
-_0806EF74: .4byte gOtherText_MailWasSent
-_0806EF78:
- ldr r0, _0806EF90 @ =gOtherText_MailboxIsFull
- movs r1, 0
- bl sub_806E834
-_0806EF80:
- ldr r0, _0806EF94 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0806EF98 @ =party_menu_link_mon_held_item_object
- str r0, [r1]
- b _0806EFD8
- .align 2, 0
-_0806EF90: .4byte gOtherText_MailboxIsFull
-_0806EF94: .4byte gTasks
-_0806EF98: .4byte party_menu_link_mon_held_item_object
-_0806EF9C:
- cmp r1, 0x1
- beq _0806EFA8
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _0806EFD8
-_0806EFA8:
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _0806EFB6
- movs r0, 0x5
- bl PlaySE
-_0806EFB6:
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- ldr r0, _0806EFE0 @ =gOtherText_MailRemovedMessageLost
- movs r1, 0x1
- bl sub_806E834
- ldr r1, _0806EFE4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806EFE8 @ =Task_ConfirmLoseMailMessage
- str r1, [r0]
-_0806EFD8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0806EFE0: .4byte gOtherText_MailRemovedMessageLost
-_0806EFE4: .4byte gTasks
-_0806EFE8: .4byte Task_ConfirmLoseMailMessage
- thumb_func_end Task_TakeHeldMail
-
- thumb_func_start Task_ConfirmTakeHeldMail
-Task_ConfirmTakeHeldMail: @ 806EFEC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0806F018 @ =gUnknown_0202E8F6
- ldrb r0, [r0]
- cmp r0, 0
- bne _0806F012
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1
- bl DisplayYesNoMenu
- ldr r0, _0806F01C @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0806F020 @ =Task_TakeHeldMail
- str r0, [r1]
-_0806F012:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0806F018: .4byte gUnknown_0202E8F6
-_0806F01C: .4byte gTasks
-_0806F020: .4byte Task_TakeHeldMail
- thumb_func_end Task_ConfirmTakeHeldMail
-
- thumb_func_start ItemIdToBattleMoveId
-ItemIdToBattleMoveId: @ 806F024
- lsls r0, 16
- ldr r1, _0806F034 @ =0xfedf0000
- adds r0, r1
- ldr r1, _0806F038 @ =gUnknown_08376504
- lsrs r0, 15
- adds r0, r1
- ldrh r0, [r0]
- bx lr
- .align 2, 0
-_0806F034: .4byte 0xfedf0000
-_0806F038: .4byte gUnknown_08376504
- thumb_func_end ItemIdToBattleMoveId
-
- thumb_func_start pokemon_has_move
-pokemon_has_move: @ 806F03C
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r5, r1, 16
- movs r4, 0
-_0806F046:
- adds r1, r4, 0
- adds r1, 0xD
- adds r0, r6, 0
- bl GetMonData
- cmp r0, r5
- bne _0806F058
- movs r0, 0x1
- b _0806F064
-_0806F058:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _0806F046
- movs r0, 0
-_0806F064:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end pokemon_has_move
-
- thumb_func_start TeachMonTMMove
-TeachMonTMMove: @ 806F06C
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 16
- lsrs r5, 16
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0806F0A8 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806F0AC @ =TaskDummy
- str r1, [r0]
- adds r0, r4, 0
- adds r1, r5, 0
- adds r2, r6, 0
- bl sub_806E8D0
- ldr r0, _0806F0B0 @ =Task_TeamMonTMMove
- movs r1, 0x5
- bl CreateTask
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0806F0A8: .4byte gTasks
-_0806F0AC: .4byte TaskDummy
-_0806F0B0: .4byte Task_TeamMonTMMove
- thumb_func_end TeachMonTMMove
-
- thumb_func_start Task_TeamMonTMMove
-Task_TeamMonTMMove: @ 806F0B4
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- adds r7, r6, 0
- ldr r5, _0806F114 @ =0x0201c000
- ldr r0, [r5]
- ldr r1, _0806F118 @ =gStringVar1
- bl GetMonNickname
- ldrh r0, [r5, 0x6]
- bl ItemIdToBattleMoveId
- movs r4, 0
- strh r0, [r5, 0x8]
- ldr r0, _0806F11C @ =gStringVar2
- ldrh r2, [r5, 0x8]
- movs r1, 0xD
- muls r1, r2
- ldr r2, _0806F120 @ =gMoveNames
- adds r1, r2
- bl StringCopy
- ldr r1, _0806F124 @ =0xfffff282
- adds r0, r5, r1
- strh r4, [r0]
- ldr r0, [r5]
- ldrh r1, [r5, 0x8]
- bl pokemon_has_move
- lsls r0, 24
- cmp r0, 0
- beq _0806F138
- ldr r4, _0806F128 @ =gStringVar4
- ldr r1, _0806F12C @ =gOtherText_AlreadyKnows
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_806E834
- ldr r1, _0806F130 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806F134 @ =party_menu_link_mon_held_item_object
- b _0806F1B6
- .align 2, 0
-_0806F114: .4byte 0x0201c000
-_0806F118: .4byte gStringVar1
-_0806F11C: .4byte gStringVar2
-_0806F120: .4byte gMoveNames
-_0806F124: .4byte 0xfffff282
-_0806F128: .4byte gStringVar4
-_0806F12C: .4byte gOtherText_AlreadyKnows
-_0806F130: .4byte gTasks
-_0806F134: .4byte party_menu_link_mon_held_item_object
-_0806F138:
- ldr r0, [r5]
- ldrb r1, [r5, 0x6]
- subs r1, 0x21
- lsls r1, 24
- lsrs r1, 24
- bl CanMonLearnTMHM
- cmp r0, 0
- bne _0806F17C
- ldr r4, _0806F16C @ =gStringVar4
- ldr r1, _0806F170 @ =gOtherText_NotCompatible
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_806E834
- ldr r1, _0806F174 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806F178 @ =party_menu_link_mon_held_item_object
- b _0806F1B6
- .align 2, 0
-_0806F16C: .4byte gStringVar4
-_0806F170: .4byte gOtherText_NotCompatible
-_0806F174: .4byte gTasks
-_0806F178: .4byte party_menu_link_mon_held_item_object
-_0806F17C:
- ldr r0, [r5]
- ldrh r1, [r5, 0x8]
- bl GiveMoveToMon
- lsls r0, 16
- ldr r1, _0806F194 @ =0xffff0000
- cmp r0, r1
- beq _0806F198
- adds r0, r6, 0
- bl Task_TeamMonTMMove2
- b _0806F1B8
- .align 2, 0
-_0806F194: .4byte 0xffff0000
-_0806F198:
- ldr r4, _0806F1C0 @ =gStringVar4
- ldr r1, _0806F1C4 @ =gOtherText_WantsToLearn
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_806E834
- ldr r1, _0806F1C8 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806F1CC @ =sub_806F358
-_0806F1B6:
- str r1, [r0]
-_0806F1B8:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0806F1C0: .4byte gStringVar4
-_0806F1C4: .4byte gOtherText_WantsToLearn
-_0806F1C8: .4byte gTasks
-_0806F1CC: .4byte sub_806F358
- thumb_func_end Task_TeamMonTMMove
-
- thumb_func_start Task_TeamMonTMMove2
-Task_TeamMonTMMove2: @ 806F1D0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _0806F234 @ =gStringVar2
- ldr r5, _0806F238 @ =0x0201c000
- ldrh r2, [r5, 0x8]
- movs r1, 0xD
- muls r1, r2
- ldr r2, _0806F23C @ =gMoveNames
- adds r1, r2
- bl StringCopy
- ldr r4, _0806F240 @ =gStringVar4
- ldr r1, _0806F244 @ =gOtherText_LearnedMove
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_806E834
- ldr r0, [r5]
- movs r1, 0x4
- bl AdjustFriendship
- ldr r1, _0806F248 @ =0xfffff282
- adds r0, r5, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _0806F220
- ldrh r1, [r5, 0x6]
- movs r0, 0xA9
- lsls r0, 1
- cmp r1, r0
- bhi _0806F220
- adds r0, r1, 0
- movs r1, 0x1
- bl RemoveBagItem
-_0806F220:
- ldr r0, _0806F24C @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, _0806F250 @ =Task_TeamMonTMMove3
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0806F234: .4byte gStringVar2
-_0806F238: .4byte 0x0201c000
-_0806F23C: .4byte gMoveNames
-_0806F240: .4byte gStringVar4
-_0806F244: .4byte gOtherText_LearnedMove
-_0806F248: .4byte 0xfffff282
-_0806F24C: .4byte gTasks
-_0806F250: .4byte Task_TeamMonTMMove3
- thumb_func_end Task_TeamMonTMMove2
-
- thumb_func_start Task_TeamMonTMMove3
-Task_TeamMonTMMove3: @ 806F254
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0806F27C @ =gUnknown_0202E8F6
- ldrb r0, [r0]
- cmp r0, 0
- bne _0806F276
- ldr r0, _0806F280 @ =0x0000016f
- bl PlayFanfare
- ldr r1, _0806F284 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806F288 @ =Task_TeamMonTMMove4
- str r1, [r0]
-_0806F276:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0806F27C: .4byte gUnknown_0202E8F6
-_0806F280: .4byte 0x0000016f
-_0806F284: .4byte gTasks
-_0806F288: .4byte Task_TeamMonTMMove4
- thumb_func_end Task_TeamMonTMMove3
-
- thumb_func_start Task_TeamMonTMMove4
-Task_TeamMonTMMove4: @ 806F28C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- beq _0806F2F2
- ldr r0, _0806F2D0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0806F2B2
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0806F2F2
-_0806F2B2:
- ldr r4, _0806F2D4 @ =0x0201c000
- ldrb r0, [r4, 0x4]
- ldrb r1, [r4, 0x5]
- bl SetHeldItemIconVisibility
- ldr r1, _0806F2D8 @ =0xfffff282
- adds r0, r4, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0x1
- bne _0806F2DC
- adds r0, r5, 0
- bl sub_8070C54
- b _0806F2F2
- .align 2, 0
-_0806F2D0: .4byte gMain
-_0806F2D4: .4byte 0x0201c000
-_0806F2D8: .4byte 0xfffff282
-_0806F2DC:
- ldr r2, _0806F2F8 @ =gTasks
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldr r1, [r4, 0x10]
- str r1, [r0]
- adds r0, r6, 0
- bl DestroyTask
-_0806F2F2:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0806F2F8: .4byte gTasks
- thumb_func_end Task_TeamMonTMMove4
-
- thumb_func_start sub_806F2FC
-sub_806F2FC: @ 806F2FC
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- ldr r0, _0806F32C @ =gUnknown_0202E8F6
- ldrb r0, [r0]
- cmp r0, 0
- bne _0806F34E
- ldr r4, _0806F330 @ =0x0201c000
- ldrb r0, [r4, 0x4]
- ldrb r1, [r4, 0x5]
- bl SetHeldItemIconVisibility
- ldr r1, _0806F334 @ =0xfffff282
- adds r0, r4, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0x1
- bne _0806F338
- adds r0, r5, 0
- bl sub_8070C54
- b _0806F34E
- .align 2, 0
-_0806F32C: .4byte gUnknown_0202E8F6
-_0806F330: .4byte 0x0201c000
-_0806F334: .4byte 0xfffff282
-_0806F338:
- ldr r2, _0806F354 @ =gTasks
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldr r1, [r4, 0x10]
- str r1, [r0]
- adds r0, r6, 0
- bl DestroyTask
-_0806F34E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0806F354: .4byte gTasks
- thumb_func_end sub_806F2FC
-
- thumb_func_start sub_806F358
-sub_806F358: @ 806F358
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0806F384 @ =gUnknown_0202E8F6
- ldrb r0, [r0]
- cmp r0, 0
- bne _0806F37E
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1
- bl DisplayYesNoMenu
- ldr r0, _0806F388 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0806F38C @ =sub_806F390
- str r0, [r1]
-_0806F37E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0806F384: .4byte gUnknown_0202E8F6
-_0806F388: .4byte gTasks
-_0806F38C: .4byte sub_806F390
- thumb_func_end sub_806F358
-
- thumb_func_start sub_806F390
-sub_806F390: @ 806F390
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- bne _0806F3D4
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- ldr r0, _0806F3C8 @ =gOtherText_WhichMoveToForget2
- movs r1, 0x1
- bl sub_806E834
- ldr r1, _0806F3CC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806F3D0 @ =sub_806F44C
- str r1, [r0]
- b _0806F3F4
- .align 2, 0
-_0806F3C8: .4byte gOtherText_WhichMoveToForget2
-_0806F3CC: .4byte gTasks
-_0806F3D0: .4byte sub_806F44C
-_0806F3D4:
- cmp r1, 0x1
- beq _0806F3E0
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _0806F3F4
-_0806F3E0:
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _0806F3EE
- movs r0, 0x5
- bl PlaySE
-_0806F3EE:
- adds r0, r5, 0
- bl StopTryingToTeachMove_806F614
-_0806F3F4:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_806F390
-
- thumb_func_start sub_806F3FC
-sub_806F3FC: @ 806F3FC
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0806F438 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0806F430
- ldr r0, _0806F43C @ =gPlayerParty
- ldr r4, _0806F440 @ =0x0201c000
- ldrb r1, [r4, 0x5]
- ldr r2, _0806F444 @ =gPlayerPartyCount
- ldrb r2, [r2]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _0806F448 @ =sub_808B564
- ldrh r4, [r4, 0x8]
- str r4, [sp]
- bl sub_809D9F0
- adds r0, r5, 0
- bl DestroyTask
-_0806F430:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0806F438: .4byte gPaletteFade
-_0806F43C: .4byte gPlayerParty
-_0806F440: .4byte 0x0201c000
-_0806F444: .4byte gPlayerPartyCount
-_0806F448: .4byte sub_808B564
- thumb_func_end sub_806F3FC
-
- thumb_func_start sub_806F44C
-sub_806F44C: @ 806F44C
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0806F484 @ =gUnknown_0202E8F6
- ldrb r1, [r0]
- cmp r1, 0
- bne _0806F47A
- movs r0, 0x1
- negs r0, r0
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _0806F488 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806F48C @ =sub_806F3FC
- str r1, [r0]
-_0806F47A:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0806F484: .4byte gUnknown_0202E8F6
-_0806F488: .4byte gTasks
-_0806F48C: .4byte sub_806F3FC
- thumb_func_end sub_806F44C
-
- thumb_func_start TaughtMove
-TaughtMove: @ 806F490
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r0, _0806F50C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0806F506
- ldr r1, _0806F510 @ =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806F514 @ =TaskDummy
- str r1, [r0]
- ldr r0, _0806F518 @ =gScriptItemId
- ldrh r1, [r0]
- ldr r2, _0806F51C @ =sub_808B508
- adds r0, r3, 0
- bl sub_806E8D0
- bl sub_809FA30
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r5, _0806F520 @ =0x0201c000
- ldr r0, [r5]
- adds r1, 0xD
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r0, [r5]
- ldr r1, _0806F524 @ =gStringVar1
- bl GetMonNickname
- ldr r0, _0806F528 @ =gStringVar2
- movs r1, 0xD
- muls r1, r4
- ldr r2, _0806F52C @ =gMoveNames
- adds r1, r2
- bl StringCopy
- ldr r4, _0806F530 @ =gStringVar4
- ldr r1, _0806F534 @ =gOtherText_ForgetMove123_2
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_806E834
- ldr r0, _0806F538 @ =TMMoveUpdateMoveSlot
- movs r1, 0x5
- bl CreateTask
-_0806F506:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0806F50C: .4byte gPaletteFade
-_0806F510: .4byte gTasks
-_0806F514: .4byte TaskDummy
-_0806F518: .4byte gScriptItemId
-_0806F51C: .4byte sub_808B508
-_0806F520: .4byte 0x0201c000
-_0806F524: .4byte gStringVar1
-_0806F528: .4byte gStringVar2
-_0806F52C: .4byte gMoveNames
-_0806F530: .4byte gStringVar4
-_0806F534: .4byte gOtherText_ForgetMove123_2
-_0806F538: .4byte TMMoveUpdateMoveSlot
- thumb_func_end TaughtMove
-
- thumb_func_start TMMoveUpdateMoveSlot
-TMMoveUpdateMoveSlot: @ 806F53C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _0806F580 @ =gUnknown_0202E8F6
- ldrb r0, [r0]
- cmp r0, 0
- bne _0806F57A
- ldr r4, _0806F584 @ =0x0201c000
- ldr r5, [r4]
- bl sub_809FA30
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl RemoveMonPPBonus
- ldr r5, [r4]
- ldrh r4, [r4, 0x8]
- bl sub_809FA30
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r5, 0
- adds r1, r4, 0
- bl SetMonMoveSlot
- adds r0, r6, 0
- bl Task_TeamMonTMMove2
-_0806F57A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0806F580: .4byte gUnknown_0202E8F6
-_0806F584: .4byte 0x0201c000
- thumb_func_end TMMoveUpdateMoveSlot
-
- thumb_func_start StopTryingToTeachMove_806F588
-StopTryingToTeachMove_806F588: @ 806F588
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r0, _0806F5E8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0806F5E0
- ldr r1, _0806F5EC @ =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806F5F0 @ =TaskDummy
- str r1, [r0]
- ldr r0, _0806F5F4 @ =gScriptItemId
- ldrh r1, [r0]
- ldr r2, _0806F5F8 @ =sub_808B508
- adds r0, r3, 0
- bl sub_806E8D0
- ldr r0, _0806F5FC @ =gStringVar2
- ldr r1, _0806F600 @ =0x0201c000
- ldrh r2, [r1, 0x8]
- movs r1, 0xD
- muls r1, r2
- ldr r2, _0806F604 @ =gMoveNames
- adds r1, r2
- bl StringCopy
- ldr r4, _0806F608 @ =gStringVar4
- ldr r1, _0806F60C @ =gOtherText_StopTryingTo
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_806E834
- ldr r0, _0806F610 @ =StopTryingToTeachMove_806F67C
- movs r1, 0x5
- bl CreateTask
-_0806F5E0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0806F5E8: .4byte gPaletteFade
-_0806F5EC: .4byte gTasks
-_0806F5F0: .4byte TaskDummy
-_0806F5F4: .4byte gScriptItemId
-_0806F5F8: .4byte sub_808B508
-_0806F5FC: .4byte gStringVar2
-_0806F600: .4byte 0x0201c000
-_0806F604: .4byte gMoveNames
-_0806F608: .4byte gStringVar4
-_0806F60C: .4byte gOtherText_StopTryingTo
-_0806F610: .4byte StopTryingToTeachMove_806F67C
- thumb_func_end StopTryingToTeachMove_806F588
-
- thumb_func_start StopTryingToTeachMove_806F614
-StopTryingToTeachMove_806F614: @ 806F614
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- ldr r0, _0806F660 @ =gStringVar2
- ldr r1, _0806F664 @ =0x0201c000
- ldrh r2, [r1, 0x8]
- movs r1, 0xD
- muls r1, r2
- ldr r2, _0806F668 @ =gMoveNames
- adds r1, r2
- bl StringCopy
- ldr r4, _0806F66C @ =gStringVar4
- ldr r1, _0806F670 @ =gOtherText_StopTryingTo
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_806E834
- ldr r1, _0806F674 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806F678 @ =StopTryingToTeachMove_806F67C
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0806F660: .4byte gStringVar2
-_0806F664: .4byte 0x0201c000
-_0806F668: .4byte gMoveNames
-_0806F66C: .4byte gStringVar4
-_0806F670: .4byte gOtherText_StopTryingTo
-_0806F674: .4byte gTasks
-_0806F678: .4byte StopTryingToTeachMove_806F67C
- thumb_func_end StopTryingToTeachMove_806F614
-
- thumb_func_start StopTryingToTeachMove_806F67C
-StopTryingToTeachMove_806F67C: @ 806F67C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0806F6A8 @ =gUnknown_0202E8F6
- ldrb r0, [r0]
- cmp r0, 0
- bne _0806F6A2
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1
- bl DisplayYesNoMenu
- ldr r0, _0806F6AC @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0806F6B0 @ =StopTryingToTeachMove_806F6B4
- str r0, [r1]
-_0806F6A2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0806F6A8: .4byte gUnknown_0202E8F6
-_0806F6AC: .4byte gTasks
-_0806F6B0: .4byte StopTryingToTeachMove_806F6B4
- thumb_func_end StopTryingToTeachMove_806F67C
-
- thumb_func_start StopTryingToTeachMove_806F6B4
-StopTryingToTeachMove_806F6B4: @ 806F6B4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- bne _0806F730
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- ldr r4, _0806F710 @ =0x0201c000
- ldr r0, [r4]
- ldr r1, _0806F714 @ =gStringVar1
- bl GetMonNickname
- ldr r0, _0806F718 @ =gStringVar2
- ldrh r2, [r4, 0x8]
- movs r1, 0xD
- muls r1, r2
- ldr r2, _0806F71C @ =gMoveNames
- adds r1, r2
- bl StringCopy
- ldr r4, _0806F720 @ =gStringVar4
- ldr r1, _0806F724 @ =gOtherText_DidNotLearnMove2
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_806E834
- ldr r1, _0806F728 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806F72C @ =sub_806F2FC
- b _0806F78E
- .align 2, 0
-_0806F710: .4byte 0x0201c000
-_0806F714: .4byte gStringVar1
-_0806F718: .4byte gStringVar2
-_0806F71C: .4byte gMoveNames
-_0806F720: .4byte gStringVar4
-_0806F724: .4byte gOtherText_DidNotLearnMove2
-_0806F728: .4byte gTasks
-_0806F72C: .4byte sub_806F2FC
-_0806F730:
- cmp r1, 0x1
- beq _0806F73C
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _0806F790
-_0806F73C:
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _0806F74A
- movs r0, 0x5
- bl PlaySE
-_0806F74A:
- movs r0, 0x17
- movs r1, 0x8
- movs r2, 0x1D
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- ldr r4, _0806F798 @ =0x0201c000
- ldr r0, [r4]
- ldr r1, _0806F79C @ =gStringVar1
- bl GetMonNickname
- ldr r0, _0806F7A0 @ =gStringVar2
- ldrh r2, [r4, 0x8]
- movs r1, 0xD
- muls r1, r2
- ldr r2, _0806F7A4 @ =gMoveNames
- adds r1, r2
- bl StringCopy
- ldr r4, _0806F7A8 @ =gStringVar4
- ldr r1, _0806F7AC @ =gOtherText_WantsToLearn
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_806E834
- ldr r1, _0806F7B0 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806F7B4 @ =sub_806F358
-_0806F78E:
- str r1, [r0]
-_0806F790:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0806F798: .4byte 0x0201c000
-_0806F79C: .4byte gStringVar1
-_0806F7A0: .4byte gStringVar2
-_0806F7A4: .4byte gMoveNames
-_0806F7A8: .4byte gStringVar4
-_0806F7AC: .4byte gOtherText_WantsToLearn
-_0806F7B0: .4byte gTasks
-_0806F7B4: .4byte sub_806F358
- thumb_func_end StopTryingToTeachMove_806F6B4
-
- thumb_func_start IsHMMove
-IsHMMove: @ 806F7B8
- push {lr}
- lsls r0, 16
- lsrs r2, r0, 16
- movs r1, 0
- ldr r3, _0806F7D4 @ =gUnknown_08376504
-_0806F7C2:
- adds r0, r1, 0
- adds r0, 0x32
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- cmp r0, r2
- bne _0806F7D8
- movs r0, 0x1
- b _0806F7E4
- .align 2, 0
-_0806F7D4: .4byte gUnknown_08376504
-_0806F7D8:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x7
- bls _0806F7C2
- movs r0, 0
-_0806F7E4:
- pop {r1}
- bx r1
- thumb_func_end IsHMMove
-
- thumb_func_start sub_806F7E8
-sub_806F7E8: @ 806F7E8
- push {r4-r6,lr}
- adds r5, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r3, r0, 2
- adds r3, r0
- lsls r3, 3
- ldr r0, _0806F898 @ =gTasks + 0x8
- adds r3, r0
- movs r0, 0x14
- ldrsh r1, [r3, r0]
- str r1, [r5]
- movs r4, 0x16
- ldrsh r0, [r3, r4]
- str r0, [r5, 0x4]
- movs r4, 0x18
- ldrsh r0, [r3, r4]
- lsls r2, 24
- asrs r2, 24
- muls r0, r2
- str r0, [r5, 0x8]
- movs r0, 0x80
- lsls r0, 1
- str r0, [r5, 0x10]
- ldr r6, _0806F89C @ =0x0201b000
- ldr r2, _0806F8A0 @ =0x00000282
- adds r0, r6, r2
- movs r4, 0
- ldrsh r0, [r0, r4]
- bl GetHPBarLevel
- lsls r0, 24
- lsrs r2, r0, 24
- adds r3, r2, 0
- cmp r2, 0x2
- bls _0806F83E
- ldrb r0, [r5, 0xC]
- movs r1, 0x20
- negs r1, r1
- ands r1, r0
- movs r0, 0x4
- orrs r1, r0
- strb r1, [r5, 0xC]
-_0806F83E:
- cmp r2, 0x2
- bne _0806F850
- ldrb r0, [r5, 0xC]
- movs r1, 0x20
- negs r1, r1
- ands r1, r0
- movs r0, 0x5
- orrs r1, r0
- strb r1, [r5, 0xC]
-_0806F850:
- cmp r3, 0x1
- bhi _0806F862
- ldrb r0, [r5, 0xC]
- movs r1, 0x20
- negs r1, r1
- ands r1, r0
- movs r0, 0x6
- orrs r1, r0
- strb r1, [r5, 0xC]
-_0806F862:
- ldr r4, _0806F8A4 @ =gUnknown_08376858
- bl IsDoubleBattle
- movs r2, 0x80
- lsls r2, 5
- adds r1, r6, r2
- ldrb r2, [r1, 0x5]
- lsls r2, 2
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 3
- adds r2, r1
- adds r2, r4
- ldr r2, [r2]
- ldr r4, _0806F8A8 @ =0x0000100c
- adds r1, r6, r4
- adds r0, r5, 0
- movs r3, 0
- bl sub_80460C8
- lsls r0, 16
- asrs r0, 16
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0806F898: .4byte gTasks + 0x8
-_0806F89C: .4byte 0x0201b000
-_0806F8A0: .4byte 0x00000282
-_0806F8A4: .4byte gUnknown_08376858
-_0806F8A8: .4byte 0x0000100c
- thumb_func_end sub_806F7E8
-
- thumb_func_start sub_806F8AC
-sub_806F8AC: @ 806F8AC
- push {r4-r7,lr}
- sub sp, 0x18
- lsls r0, 24
- lsrs r6, r0, 24
- movs r4, 0x1
- negs r4, r4
- adds r0, r6, 0
- mov r1, sp
- adds r2, r4, 0
- bl sub_806F7E8
- ldr r1, _0806F8F4 @ =0x0201b000
- ldr r2, _0806F8F8 @ =0x00000282
- adds r5, r1, r2
- strh r0, [r5]
- lsls r0, 16
- asrs r0, 16
- cmp r0, r4
- beq _0806F8D4
- b _0806F9F0
-_0806F8D4:
- movs r0, 0x80
- lsls r0, 5
- adds r1, r0
- movs r0, 0
- str r0, [r1, 0xC]
- ldr r0, [sp, 0x8]
- negs r3, r0
- ldr r2, [sp, 0x4]
- adds r0, r3, r2
- ldr r1, [sp]
- cmp r0, r1
- ble _0806F8FC
- subs r1, r2
- add r0, sp, 0x14
- strh r1, [r0]
- b _0806F900
- .align 2, 0
-_0806F8F4: .4byte 0x0201b000
-_0806F8F8: .4byte 0x00000282
-_0806F8FC:
- add r0, sp, 0x14
- strh r3, [r0]
-_0806F900:
- adds r5, r0, 0
- ldr r1, _0806F940 @ =gBattleMoveDamage
- ldrh r0, [r5]
- negs r0, r0
- str r0, [r1]
- ldr r0, _0806F944 @ =0x0201c000
- ldr r0, [r0]
- ldr r1, _0806F948 @ =gStringVar1
- bl GetMonNickname
- ldr r0, _0806F94C @ =gStringVar2
- ldrh r1, [r5]
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r2, _0806F950 @ =gTasks
- lsls r1, r6, 2
- adds r0, r1, r6
- lsls r0, 3
- adds r0, r2
- movs r2, 0x24
- ldrsh r0, [r0, r2]
- adds r7, r1, 0
- cmp r0, 0
- bne _0806F95C
- ldr r0, _0806F954 @ =gStringVar4
- ldr r1, _0806F958 @ =gOtherText_HPRestoredBy
- bl StringExpandPlaceholders
- b _0806F964
- .align 2, 0
-_0806F940: .4byte gBattleMoveDamage
-_0806F944: .4byte 0x0201c000
-_0806F948: .4byte gStringVar1
-_0806F94C: .4byte gStringVar2
-_0806F950: .4byte gTasks
-_0806F954: .4byte gStringVar4
-_0806F958: .4byte gOtherText_HPRestoredBy
-_0806F95C:
- ldr r0, _0806F9D4 @ =gStringVar4
- ldr r1, _0806F9D8 @ =gOtherText_RegainedHealth
- bl StringExpandPlaceholders
-_0806F964:
- ldr r4, _0806F9DC @ =0x0201c000
- ldrb r0, [r4, 0x4]
- ldrb r1, [r4, 0x5]
- bl GetMonIconSpriteId_maybe
- lsls r0, 24
- lsrs r0, 24
- ldr r1, [r4]
- bl SetMonIconAnim
- bl IsDoubleBattle
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldrb r1, [r4, 0x5]
- lsls r1, 1
- adds r0, r1
- ldr r1, _0806F9E0 @ =gUnknown_083769A8
- adds r0, r1
- movs r1, 0x7
- bl task_pc_turn_off
- ldr r0, _0806F9E4 @ =0xfffff261
- adds r1, r4, r0
- movs r0, 0x2
- strb r0, [r1]
- ldr r0, _0806F9D4 @ =gStringVar4
- movs r1, 0x1
- bl sub_806E834
- ldr r1, [sp, 0x4]
- ldrh r0, [r5]
- adds r0, r1
- strh r0, [r5]
- ldr r0, [r4]
- movs r1, 0x39
- adds r2, r5, 0
- bl SetMonData
- ldrh r0, [r4, 0x6]
- movs r1, 0x1
- bl RemoveBagItem
- bl sub_8032638
- ldr r1, _0806F9E8 @ =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806F9EC @ =sub_806FB44
- str r1, [r0]
- b _0806FA10
- .align 2, 0
-_0806F9D4: .4byte gStringVar4
-_0806F9D8: .4byte gOtherText_RegainedHealth
-_0806F9DC: .4byte 0x0201c000
-_0806F9E0: .4byte gUnknown_083769A8
-_0806F9E4: .4byte 0xfffff261
-_0806F9E8: .4byte gTasks
-_0806F9EC: .4byte sub_806FB44
-_0806F9F0:
- movs r2, 0x80
- lsls r2, 5
- adds r0, r1, r2
- ldrb r4, [r0, 0x5]
- bl IsDoubleBattle
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r5]
- ldr r3, [sp]
- lsls r3, 16
- lsrs r3, 16
- adds r0, r4, 0
- bl PartyMenuDoPrintHP
-_0806FA10:
- add sp, 0x18
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_806F8AC
-
- thumb_func_start sub_806FA18
-sub_806FA18: @ 806FA18
- push {r4-r7,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r5, 0
- mov r1, sp
- movs r2, 0x1
- bl sub_806F7E8
- ldr r6, _0806FAC4 @ =0x0201b000
- ldr r1, _0806FAC8 @ =0x00000282
- adds r7, r6, r1
- strh r0, [r7]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _0806FAE4
- movs r0, 0x1
- bl PlaySE
- movs r0, 0x80
- lsls r0, 5
- adds r4, r6, r0
- movs r0, 0
- str r0, [r4, 0xC]
- ldr r2, _0806FACC @ =gTasks
- lsls r3, r5, 2
- adds r3, r5
- lsls r3, 3
- adds r5, r3, r2
- ldrh r0, [r5, 0x1E]
- ldrh r1, [r5, 0x20]
- subs r0, r1
- strh r0, [r5, 0x1E]
- ldr r0, [r4]
- adds r2, r3
- adds r2, 0x1E
- movs r1, 0x39
- bl SetMonData
- ldrb r0, [r4, 0x4]
- ldr r1, _0806FAD0 @ =0xfffe6000
- adds r6, r1
- ldrb r1, [r6, 0x1]
- bl GetMonIconSpriteId_maybe
- lsls r0, 24
- lsrs r0, 24
- ldr r1, [r4]
- bl SetMonIconAnim
- ldr r2, _0806FAD4 @ =gSprites
- ldrb r1, [r6, 0x2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r0, [r0, 0x2E]
- strb r0, [r4, 0x5]
- ldrb r1, [r4, 0x5]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0806FAD8 @ =gPlayerParty
- adds r0, r1
- str r0, [r4]
- movs r1, 0x3A
- bl GetMonData
- strh r0, [r5, 0x1C]
- ldr r0, [r4]
- movs r1, 0x39
- bl GetMonData
- strh r0, [r5, 0x1E]
- ldr r0, _0806FADC @ =0xffff8000
- str r0, [r4, 0xC]
- ldr r0, [r4, 0x10]
- str r0, [r4, 0x14]
- ldr r0, _0806FAE0 @ =sub_806F8AC
- str r0, [r5]
- ldrh r0, [r5, 0x1E]
- strh r0, [r7]
- b _0806FB04
- .align 2, 0
-_0806FAC4: .4byte 0x0201b000
-_0806FAC8: .4byte 0x00000282
-_0806FACC: .4byte gTasks
-_0806FAD0: .4byte 0xfffe6000
-_0806FAD4: .4byte gSprites
-_0806FAD8: .4byte gPlayerParty
-_0806FADC: .4byte 0xffff8000
-_0806FAE0: .4byte sub_806F8AC
-_0806FAE4:
- movs r1, 0x80
- lsls r1, 5
- adds r0, r6, r1
- ldrb r4, [r0, 0x5]
- bl IsDoubleBattle
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r7]
- ldr r3, [sp]
- lsls r3, 16
- lsrs r3, 16
- adds r0, r4, 0
- bl PartyMenuDoPrintHP
-_0806FB04:
- add sp, 0x14
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_806FA18
-
- thumb_func_start sub_806FB0C
-sub_806FB0C: @ 806FB0C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0806FB38 @ =gUnknown_0202E8F6
- ldrb r0, [r0]
- cmp r0, 0
- bne _0806FB32
- ldr r3, _0806FB3C @ =gTasks
- ldr r2, _0806FB40 @ =0x0201c000
- ldrb r1, [r2, 0x4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r3
- ldr r1, [r2, 0x10]
- str r1, [r0]
- adds r0, r4, 0
- bl DestroyTask
-_0806FB32:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0806FB38: .4byte gUnknown_0202E8F6
-_0806FB3C: .4byte gTasks
-_0806FB40: .4byte 0x0201c000
- thumb_func_end sub_806FB0C
-
- thumb_func_start sub_806FB44
-sub_806FB44: @ 806FB44
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0806FB70 @ =gUnknown_0202E8F6
- ldrb r0, [r0]
- cmp r0, 0
- bne _0806FB6A
- ldr r3, _0806FB74 @ =gTasks
- ldr r2, _0806FB78 @ =0x0201c000
- ldrb r1, [r2, 0x4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r3
- ldr r1, [r2, 0x14]
- str r1, [r0]
- adds r0, r4, 0
- bl DestroyTask
-_0806FB6A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0806FB70: .4byte gUnknown_0202E8F6
-_0806FB74: .4byte gTasks
-_0806FB78: .4byte 0x0201c000
- thumb_func_end sub_806FB44
-
- thumb_func_start IsHPRecoveryItem
-IsHPRecoveryItem: @ 806FB7C
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAF
- bne _0806FB90
- ldr r0, _0806FB8C @ =gSaveBlock1 + 0x3676
- b _0806FB9A
- .align 2, 0
-_0806FB8C: .4byte gSaveBlock1 + 0x3676
-_0806FB90:
- ldr r1, _0806FBA8 @ =gItemEffectTable
- subs r0, 0xD
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
-_0806FB9A:
- ldrb r1, [r0, 0x4]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _0806FBAC
- movs r0, 0
- b _0806FBAE
- .align 2, 0
-_0806FBA8: .4byte gItemEffectTable
-_0806FBAC:
- movs r0, 0x1
-_0806FBAE:
- pop {r1}
- bx r1
- thumb_func_end IsHPRecoveryItem
-
- thumb_func_start PartyMenuUpdateLevelOrStatus
-PartyMenuUpdateLevelOrStatus: @ 806FBB4
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r4, r1, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl PartyMenuClearLevelStatusTilemap
- adds r0, r4, 0
- adds r1, r5, 0
- bl PartyMenuPrintMonLevelOrStatus
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end PartyMenuUpdateLevelOrStatus
-
- thumb_func_start GetMedicineItemEffectMessage
-GetMedicineItemEffectMessage: @ 806FBD0
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- bl GetItemEffectType
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x3
- cmp r0, 0x12
- bls _0806FBE6
- b _0806FD7C
-_0806FBE6:
- lsls r0, 2
- ldr r1, _0806FBF0 @ =_0806FBF4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0806FBF0: .4byte _0806FBF4
- .align 2, 0
-_0806FBF4:
- .4byte _0806FC40
- .4byte _0806FC54
- .4byte _0806FC68
- .4byte _0806FC7C
- .4byte _0806FC90
- .4byte _0806FCA4
- .4byte _0806FCB8
- .4byte _0806FD7C
- .4byte _0806FCCC
- .4byte _0806FCF0
- .4byte _0806FCE0
- .4byte _0806FD20
- .4byte _0806FD30
- .4byte _0806FD10
- .4byte _0806FD00
- .4byte _0806FD7C
- .4byte _0806FD54
- .4byte _0806FD54
- .4byte _0806FD68
-_0806FC40:
- ldr r0, _0806FC4C @ =gStringVar4
- ldr r1, _0806FC50 @ =gOtherText_CuredPoisoning
- bl StringExpandPlaceholders
- b _0806FD84
- .align 2, 0
-_0806FC4C: .4byte gStringVar4
-_0806FC50: .4byte gOtherText_CuredPoisoning
-_0806FC54:
- ldr r0, _0806FC60 @ =gStringVar4
- ldr r1, _0806FC64 @ =gOtherText_WokeUp
- bl StringExpandPlaceholders
- b _0806FD84
- .align 2, 0
-_0806FC60: .4byte gStringVar4
-_0806FC64: .4byte gOtherText_WokeUp
-_0806FC68:
- ldr r0, _0806FC74 @ =gStringVar4
- ldr r1, _0806FC78 @ =gOtherText_BurnHealed
- bl StringExpandPlaceholders
- b _0806FD84
- .align 2, 0
-_0806FC74: .4byte gStringVar4
-_0806FC78: .4byte gOtherText_BurnHealed
-_0806FC7C:
- ldr r0, _0806FC88 @ =gStringVar4
- ldr r1, _0806FC8C @ =gOtherText_ThawedOut
- bl StringExpandPlaceholders
- b _0806FD84
- .align 2, 0
-_0806FC88: .4byte gStringVar4
-_0806FC8C: .4byte gOtherText_ThawedOut
-_0806FC90:
- ldr r0, _0806FC9C @ =gStringVar4
- ldr r1, _0806FCA0 @ =gOtherText_CuredParalysis
- bl StringExpandPlaceholders
- b _0806FD84
- .align 2, 0
-_0806FC9C: .4byte gStringVar4
-_0806FCA0: .4byte gOtherText_CuredParalysis
-_0806FCA4:
- ldr r0, _0806FCB0 @ =gStringVar4
- ldr r1, _0806FCB4 @ =gOtherText_SnapConfusion
- bl StringExpandPlaceholders
- b _0806FD84
- .align 2, 0
-_0806FCB0: .4byte gStringVar4
-_0806FCB4: .4byte gOtherText_SnapConfusion
-_0806FCB8:
- ldr r0, _0806FCC4 @ =gStringVar4
- ldr r1, _0806FCC8 @ =gOtherText_GotOverLove
- bl StringExpandPlaceholders
- b _0806FD84
- .align 2, 0
-_0806FCC4: .4byte gStringVar4
-_0806FCC8: .4byte gOtherText_GotOverLove
-_0806FCCC:
- ldr r0, _0806FCD8 @ =gStringVar4
- ldr r1, _0806FCDC @ =gOtherText_BecameHealthy
- bl StringExpandPlaceholders
- b _0806FD84
- .align 2, 0
-_0806FCD8: .4byte gStringVar4
-_0806FCDC: .4byte gOtherText_BecameHealthy
-_0806FCE0:
- ldr r0, _0806FCE8 @ =gStringVar2
- ldr r1, _0806FCEC @ =gOtherText_Hp2
- b _0806FD34
- .align 2, 0
-_0806FCE8: .4byte gStringVar2
-_0806FCEC: .4byte gOtherText_Hp2
-_0806FCF0:
- ldr r0, _0806FCF8 @ =gStringVar2
- ldr r1, _0806FCFC @ =gOtherText_Attack
- b _0806FD34
- .align 2, 0
-_0806FCF8: .4byte gStringVar2
-_0806FCFC: .4byte gOtherText_Attack
-_0806FD00:
- ldr r0, _0806FD08 @ =gStringVar2
- ldr r1, _0806FD0C @ =gOtherText_Defense
- b _0806FD34
- .align 2, 0
-_0806FD08: .4byte gStringVar2
-_0806FD0C: .4byte gOtherText_Defense
-_0806FD10:
- ldr r0, _0806FD18 @ =gStringVar2
- ldr r1, _0806FD1C @ =gOtherText_Speed
- b _0806FD34
- .align 2, 0
-_0806FD18: .4byte gStringVar2
-_0806FD1C: .4byte gOtherText_Speed
-_0806FD20:
- ldr r0, _0806FD28 @ =gStringVar2
- ldr r1, _0806FD2C @ =gOtherText_SpAtk2
- b _0806FD34
- .align 2, 0
-_0806FD28: .4byte gStringVar2
-_0806FD2C: .4byte gOtherText_SpAtk2
-_0806FD30:
- ldr r0, _0806FD44 @ =gStringVar2
- ldr r1, _0806FD48 @ =gOtherText_SpDef2
-_0806FD34:
- bl StringCopy
- ldr r0, _0806FD4C @ =gStringVar4
- ldr r1, _0806FD50 @ =gOtherText_WasRaised
- bl StringExpandPlaceholders
- b _0806FD84
- .align 2, 0
-_0806FD44: .4byte gStringVar2
-_0806FD48: .4byte gOtherText_SpDef2
-_0806FD4C: .4byte gStringVar4
-_0806FD50: .4byte gOtherText_WasRaised
-_0806FD54:
- ldr r0, _0806FD60 @ =gStringVar4
- ldr r1, _0806FD64 @ =gOtherText_PPIncreased
- bl StringExpandPlaceholders
- b _0806FD84
- .align 2, 0
-_0806FD60: .4byte gStringVar4
-_0806FD64: .4byte gOtherText_PPIncreased
-_0806FD68:
- ldr r0, _0806FD74 @ =gStringVar4
- ldr r1, _0806FD78 @ =gOtherText_PPRestored
- bl StringExpandPlaceholders
- b _0806FD84
- .align 2, 0
-_0806FD74: .4byte gStringVar4
-_0806FD78: .4byte gOtherText_PPRestored
-_0806FD7C:
- ldr r0, _0806FD88 @ =gStringVar4
- ldr r1, _0806FD8C @ =gOtherText_WontHaveAnyEffect
- bl StringExpandPlaceholders
-_0806FD84:
- pop {r0}
- bx r0
- .align 2, 0
-_0806FD88: .4byte gStringVar4
-_0806FD8C: .4byte gOtherText_WontHaveAnyEffect
- thumb_func_end GetMedicineItemEffectMessage
-
- thumb_func_start IsMedicineIneffective
-IsMedicineIneffective: @ 806FD90
- push {r4,lr}
- adds r4, r0, 0
- lsls r0, r1, 16
- lsrs r0, 16
- bl GetItemEffectType
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xD
- bne _0806FDBC
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- ldr r1, _0806FDB8 @ =0x0000012f
- cmp r0, r1
- bne _0806FDBC
- movs r0, 0x1
- b _0806FDBE
- .align 2, 0
-_0806FDB8: .4byte 0x0000012f
-_0806FDBC:
- movs r0, 0
-_0806FDBE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end IsMedicineIneffective
-
- thumb_func_start ExecuteTableBasedItemEffect__
-ExecuteTableBasedItemEffect__: @ 806FDC4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 16
- lsrs r5, r1, 16
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r0, _0806FDF0 @ =gMain
- ldr r1, _0806FDF4 @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0806FDFC
- movs r0, 0x64
- muls r0, r3
- ldr r1, _0806FDF8 @ =gPlayerParty
- adds r0, r1
- adds r1, r5, 0
- adds r2, r3, 0
- b _0806FE16
- .align 2, 0
-_0806FDF0: .4byte gMain
-_0806FDF4: .4byte 0x0000043d
-_0806FDF8: .4byte gPlayerParty
-_0806FDFC:
- movs r0, 0x64
- adds r4, r3, 0
- muls r4, r0
- ldr r0, _0806FE28 @ =gPlayerParty
- adds r4, r0
- adds r0, r3, 0
- bl sub_8094C20
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r5, 0
-_0806FE16:
- adds r3, r6, 0
- bl ExecuteTableBasedItemEffect_
- lsls r0, 24
- lsrs r0, 24
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0806FE28: .4byte gPlayerParty
- thumb_func_end ExecuteTableBasedItemEffect__
-
- thumb_func_start UseMedicine
-UseMedicine: @ 806FE2C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r4, r0, 0
- adds r5, r2, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r1, 16
- lsrs r6, r1, 16
- movs r0, 0
- mov r9, r0
- ldr r1, _0806FED4 @ =gTasks
- mov r10, r1
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- add r1, r10
- ldr r0, _0806FED8 @ =TaskDummy
- str r0, [r1]
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r4, 0
- adds r1, r6, 0
- adds r2, r5, 0
- bl sub_806E8D0
- ldr r5, _0806FEDC @ =0x0201c000
- ldr r0, [r5]
- adds r1, r6, 0
- bl IsMedicineIneffective
- lsls r0, 24
- cmp r0, 0
- bne _0806FEE0
- adds r0, r6, 0
- bl IsHPRecoveryItem
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r2, r7, 2
- mov r8, r2
- cmp r0, 0x1
- bne _0806FEC2
- ldr r0, [r5]
- movs r1, 0x3A
- bl GetMonData
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- mov r2, r10
- adds r4, r1, r2
- strh r0, [r4, 0x1C]
- ldr r0, [r5]
- movs r1, 0x39
- bl GetMonData
- strh r0, [r4, 0x1E]
- movs r3, 0x1C
- ldrsh r1, [r4, r3]
- lsls r0, 16
- asrs r0, 16
- cmp r1, r0
- bne _0806FEC2
- movs r0, 0
- mov r9, r0
- mov r1, r9
- strh r1, [r4, 0x1C]
- strh r1, [r4, 0x1E]
-_0806FEC2:
- ldr r0, _0806FEDC @ =0x0201c000
- ldrb r0, [r0, 0x5]
- adds r1, r6, 0
- movs r2, 0
- bl ExecuteTableBasedItemEffect__
- lsls r0, 24
- lsrs r0, 24
- b _0806FEE6
- .align 2, 0
-_0806FED4: .4byte gTasks
-_0806FED8: .4byte TaskDummy
-_0806FEDC: .4byte 0x0201c000
-_0806FEE0:
- movs r0, 0x1
- lsls r2, r7, 2
- mov r8, r2
-_0806FEE6:
- cmp r0, 0
- beq _0806FF14
- ldr r1, _0806FF08 @ =gUnknown_0202E8F4
- movs r0, 0
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0806FF0C @ =gOtherText_WontHaveAnyEffect
- movs r1, 0x1
- bl sub_806E834
- ldr r1, _0806FF10 @ =gTasks
- mov r3, r8
- adds r0, r3, r7
- b _08070002
- .align 2, 0
-_0806FF08: .4byte gUnknown_0202E8F4
-_0806FF0C: .4byte gOtherText_WontHaveAnyEffect
-_0806FF10: .4byte gTasks
-_0806FF14:
- ldr r1, _0806FF30 @ =gUnknown_0202E8F4
- movs r0, 0x1
- strb r0, [r1]
- adds r0, r6, 0
- bl IsBlueYellowRedFlute
- lsls r0, 24
- cmp r0, 0
- bne _0806FF34
- movs r0, 0x1
- bl PlaySE
- b _0806FF3A
- .align 2, 0
-_0806FF30: .4byte gUnknown_0202E8F4
-_0806FF34:
- movs r0, 0x75
- bl PlaySE
-_0806FF3A:
- ldr r4, _0806FF88 @ =0x0201c000
- ldr r0, [r4]
- bl GetMonStatusAndPokerus
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x6
- beq _0806FF4E
- cmp r0, 0
- bne _0806FF56
-_0806FF4E:
- ldr r0, [r4]
- ldrb r1, [r4, 0x5]
- bl PartyMenuUpdateLevelOrStatus
-_0806FF56:
- mov r0, r9
- cmp r0, 0x1
- bne _0806FFC8
- ldr r4, _0806FF88 @ =0x0201c000
- ldr r0, [r4]
- movs r1, 0x39
- bl GetMonData
- ldr r2, _0806FF8C @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r2, r1, r2
- ldrh r1, [r2, 0x1E]
- subs r0, r1
- strh r0, [r2, 0x20]
- ldr r0, _0806FF90 @ =0xffff8000
- str r0, [r4, 0xC]
- movs r1, 0x1E
- ldrsh r0, [r2, r1]
- cmp r0, 0
- bne _0806FF94
- mov r3, r9
- strh r3, [r2, 0x24]
- b _0806FF98
- .align 2, 0
-_0806FF88: .4byte 0x0201c000
-_0806FF8C: .4byte gTasks
-_0806FF90: .4byte 0xffff8000
-_0806FF94:
- movs r0, 0
- strh r0, [r2, 0x24]
-_0806FF98:
- ldr r2, _0806FFB8 @ =0x0201c000
- ldr r0, [r2, 0x10]
- str r0, [r2, 0x14]
- ldr r1, _0806FFBC @ =gTasks
- mov r3, r8
- adds r0, r3, r7
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806FFC0 @ =sub_806F8AC
- str r1, [r0]
- ldrh r0, [r0, 0x1E]
- ldr r1, _0806FFC4 @ =0xfffff282
- adds r2, r1
- strh r0, [r2]
- b _0807000A
- .align 2, 0
-_0806FFB8: .4byte 0x0201c000
-_0806FFBC: .4byte gTasks
-_0806FFC0: .4byte sub_806F8AC
-_0806FFC4: .4byte 0xfffff282
-_0806FFC8:
- ldr r4, _08070018 @ =0x0201c000
- ldr r0, [r4]
- ldr r1, _0807001C @ =gStringVar1
- bl GetMonNickname
- adds r0, r6, 0
- bl IsBlueYellowRedFlute
- lsls r0, 24
- cmp r0, 0
- bne _0806FFE6
- adds r0, r6, 0
- movs r1, 0x1
- bl RemoveBagItem
-_0806FFE6:
- adds r0, r6, 0
- bl GetMedicineItemEffectMessage
- ldrb r0, [r4, 0x5]
- ldr r1, [r4]
- bl TryPrintPartyMenuMonNickname
- ldr r0, _08070020 @ =gStringVar4
- movs r1, 0x1
- bl sub_806E834
- ldr r1, _08070024 @ =gTasks
- mov r2, r8
- adds r0, r2, r7
-_08070002:
- lsls r0, 3
- adds r0, r1
- ldr r1, _08070028 @ =sub_806FB0C
- str r1, [r0]
-_0807000A:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08070018: .4byte 0x0201c000
-_0807001C: .4byte gStringVar1
-_08070020: .4byte gStringVar4
-_08070024: .4byte gTasks
-_08070028: .4byte sub_806FB0C
- thumb_func_end UseMedicine
-
- thumb_func_start IsBlueYellowRedFlute
-IsBlueYellowRedFlute: @ 807002C
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x27
- beq _0807003E
- cmp r0, 0x29
- beq _0807003E
- cmp r0, 0x28
- bne _08070042
-_0807003E:
- movs r0, 0x1
- b _08070044
-_08070042:
- movs r0, 0
-_08070044:
- pop {r1}
- bx r1
- thumb_func_end IsBlueYellowRedFlute
-
- thumb_func_start sub_8070048
-sub_8070048: @ 8070048
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _08070078 @ =0x0201c000
- str r2, [r3, 0x10]
- movs r4, 0
- strb r0, [r3, 0x4]
- movs r2, 0
- strh r1, [r3, 0x6]
- strb r2, [r3, 0x5]
- ldr r1, _0807007C @ =sub_80701DC
- str r1, [r3, 0x14]
- ldr r2, _08070080 @ =0xfffff27e
- adds r1, r3, r2
- strh r4, [r1]
- ldr r1, _08070084 @ =0xfffff280
- adds r3, r1
- strh r4, [r3]
- bl sub_8070088
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08070078: .4byte 0x0201c000
-_0807007C: .4byte sub_80701DC
-_08070080: .4byte 0xfffff27e
-_08070084: .4byte 0xfffff280
- thumb_func_end sub_8070048
-
- .section .text_80701DC
-
- thumb_func_start sub_80701DC
-sub_80701DC: @ 80701DC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r6, _08070280 @ =0x0201b000
- ldr r0, _08070284 @ =0x0000027e
- adds r7, r6, r0
- movs r1, 0
- ldrsh r0, [r7, r1]
- cmp r0, 0x1
- bne _0807023E
- movs r0, 0x80
- lsls r0, 5
- adds r4, r6, r0
- ldrh r0, [r4, 0x6]
- movs r1, 0x1
- bl AddBagItem
- ldrb r1, [r4, 0x5]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08070288 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0807023A
- bl IsDoubleBattle
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldrb r1, [r4, 0x5]
- lsls r1, 1
- adds r0, r1
- ldr r1, _0807028C @ =gUnknown_083769A8
- adds r0, r1
- movs r1, 0x3
- bl task_pc_turn_off
- ldr r0, _08070290 @ =0x00000261
- adds r1, r6, r0
- movs r0, 0x2
- strb r0, [r1]
-_0807023A:
- movs r0, 0
- strh r0, [r7]
-_0807023E:
- ldr r4, _08070294 @ =0x0201c000
- ldrb r0, [r4, 0x5]
- adds r0, 0x1
- strb r0, [r4, 0x5]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x6
- bne _080702D8
- ldr r1, _08070298 @ =gUnknown_0202E8F4
- movs r0, 0
- strb r0, [r1]
- ldr r1, _0807029C @ =0xfffff280
- adds r0, r4, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080702B0
- ldr r1, _080702A0 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _080702A4 @ =TaskDummy
- str r1, [r0]
- ldr r0, _080702A8 @ =gOtherText_WontHaveAnyEffect
- movs r1, 0x1
- bl sub_806E834
- ldr r0, _080702AC @ =sub_806FB0C
- movs r1, 0x8
- bl CreateTask
- b _080702C6
- .align 2, 0
-_08070280: .4byte 0x0201b000
-_08070284: .4byte 0x0000027e
-_08070288: .4byte gPlayerParty
-_0807028C: .4byte gUnknown_083769A8
-_08070290: .4byte 0x00000261
-_08070294: .4byte 0x0201c000
-_08070298: .4byte gUnknown_0202E8F4
-_0807029C: .4byte 0xfffff280
-_080702A0: .4byte gTasks
-_080702A4: .4byte TaskDummy
-_080702A8: .4byte gOtherText_WontHaveAnyEffect
-_080702AC: .4byte sub_806FB0C
-_080702B0:
- ldrh r0, [r4, 0x6]
- movs r1, 0x1
- bl RemoveBagItem
- ldr r1, _080702D0 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, [r4, 0x10]
- str r1, [r0]
-_080702C6:
- ldr r1, _080702D4 @ =gLastFieldPokeMenuOpened
- movs r0, 0
- strb r0, [r1]
- b _080702DE
- .align 2, 0
-_080702D0: .4byte gTasks
-_080702D4: .4byte gLastFieldPokeMenuOpened
-_080702D8:
- adds r0, r5, 0
- bl sub_8070088
-_080702DE:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80701DC
-
- thumb_func_start CreateItemUseMoveMenu
-CreateItemUseMoveMenu: @ 80702E4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r6, 0
- movs r0, 0x13
- movs r1, 0xA
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuDrawTextWindow
- movs r5, 0
- movs r0, 0x64
- adds r7, r4, 0
- muls r7, r0
- ldr r0, _0807036C @ =gPlayerParty
- mov r8, r0
-_0807030C:
- adds r1, r5, 0
- adds r1, 0xD
- mov r2, r8
- adds r0, r7, r2
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- movs r0, 0xD
- muls r0, r4
- ldr r1, _08070370 @ =gMoveNames
- adds r0, r1
- lsls r2, r5, 25
- movs r1, 0xB0
- lsls r1, 20
- adds r2, r1
- lsrs r2, 24
- movs r1, 0x14
- bl MenuPrint
- cmp r4, 0
- beq _08070340
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_08070340:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _0807030C
- movs r0, 0
- str r0, [sp]
- movs r0, 0x9
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0x14
- movs r2, 0xB
- adds r3, r6, 0
- bl InitMenu
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807036C: .4byte gPlayerParty
-_08070370: .4byte gMoveNames
- thumb_func_end CreateItemUseMoveMenu
-
- thumb_func_start Task_HandleItemUseMoveMenuInput
-Task_HandleItemUseMoveMenuInput: @ 8070374
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- adds r4, r2, 0
- ldr r0, _08070398 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0807039C
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- bl MoveMenuCursor
- b _080703E4
- .align 2, 0
-_08070398: .4byte gMain
-_0807039C:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080703B2
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- bl MoveMenuCursor
- b _080703E4
-_080703B2:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080703CC
- ldr r0, _080703C8 @ =gUnknown_08376B54
- ldr r1, [r0]
- adds r0, r2, 0
- bl _call_via_r1
- b _080703E4
- .align 2, 0
-_080703C8: .4byte gUnknown_08376B54
-_080703CC:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080703E4
- movs r0, 0x5
- bl PlaySE
- ldr r0, _080703EC @ =gUnknown_08376B54
- ldr r1, [r0, 0x4]
- adds r0, r4, 0
- bl _call_via_r1
-_080703E4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080703EC: .4byte gUnknown_08376B54
- thumb_func_end Task_HandleItemUseMoveMenuInput
-
- thumb_func_start DoPPRecoveryItemEffect
-DoPPRecoveryItemEffect: @ 80703F0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- mov r9, r2
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 16
- lsrs r5, r1, 16
- cmp r5, 0xAF
- bne _08070410
- ldr r0, _0807040C @ =gSaveBlock1 + 0x3676
- b _0807041C
- .align 2, 0
-_0807040C: .4byte gSaveBlock1 + 0x3676
-_08070410:
- ldr r1, _08070464 @ =gItemEffectTable
- adds r0, r5, 0
- subs r0, 0xD
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
-_0807041C:
- mov r8, r0
- ldr r7, _08070468 @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r7
- ldr r0, _0807046C @ =TaskDummy
- str r0, [r1]
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r6, 0
- adds r1, r5, 0
- mov r2, r9
- bl sub_806E8D0
- mov r0, r8
- ldrb r1, [r0, 0x4]
- movs r0, 0x10
- ands r0, r1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _08070470
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r7
- strh r1, [r0, 0x1E]
- adds r0, r4, 0
- bl DoRecoverPP
- b _08070498
- .align 2, 0
-_08070464: .4byte gItemEffectTable
-_08070468: .4byte gTasks
-_0807046C: .4byte TaskDummy
-_08070470:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0xA
- movs r1, 0x3
- bl sub_806D538
- ldr r0, _080704A4 @ =0x0201c000
- ldrb r0, [r0, 0x5]
- bl CreateItemUseMoveMenu
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r7
- ldr r1, _080704A8 @ =Task_HandleItemUseMoveMenuInput
- str r1, [r0]
- ldr r1, _080704AC @ =gMain
- movs r0, 0
- strh r0, [r1, 0x2E]
-_08070498:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080704A4: .4byte 0x0201c000
-_080704A8: .4byte Task_HandleItemUseMoveMenuInput
-_080704AC: .4byte gMain
- thumb_func_end DoPPRecoveryItemEffect
-
- thumb_func_start ItemUseMoveMenu_HandleMoveSelection
-ItemUseMoveMenu_HandleMoveSelection: @ 80704B0
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8072DEC
- movs r0, 0x13
- movs r1, 0xA
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- bl sub_806D5A4
- bl GetMenuCursorPos
- ldr r2, _080704EC @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x1E]
- adds r0, r4, 0
- bl DoRecoverPP
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080704EC: .4byte gTasks
- thumb_func_end ItemUseMoveMenu_HandleMoveSelection
-
- thumb_func_start ItemUseMoveMenu_HandleCancel
-ItemUseMoveMenu_HandleCancel: @ 80704F0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8072DEC
- movs r0, 0x13
- movs r1, 0xA
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- ldr r0, _08070528 @ =gMain
- ldr r1, _0807052C @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0807053C
- ldr r2, _08070530 @ =gTasks
- ldr r0, _08070534 @ =0x0201c000
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldr r1, _08070538 @ =SetUpBattlePokemonMenu
- b _0807054C
- .align 2, 0
-_08070528: .4byte gMain
-_0807052C: .4byte 0x0000043d
-_08070530: .4byte gTasks
-_08070534: .4byte 0x0201c000
-_08070538: .4byte SetUpBattlePokemonMenu
-_0807053C:
- ldr r2, _08070564 @ =gTasks
- ldr r0, _08070568 @ =0x0201c000
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldr r1, _0807056C @ =sub_808B0C0
-_0807054C:
- str r1, [r0]
- movs r0, 0x3
- movs r1, 0
- bl sub_806D538
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08070564: .4byte gTasks
-_08070568: .4byte 0x0201c000
-_0807056C: .4byte sub_808B0C0
- thumb_func_end ItemUseMoveMenu_HandleCancel
-
- thumb_func_start DoRecoverPP
-DoRecoverPP: @ 8070570
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r5, 0
- ldr r6, _080705A8 @ =0x0201c000
- ldrb r0, [r6, 0x5]
- ldrh r1, [r6, 0x6]
- ldr r3, _080705AC @ =gTasks
- lsls r2, r4, 2
- adds r2, r4
- lsls r2, 3
- adds r7, r2, r3
- ldrb r2, [r7, 0x1E]
- bl ExecuteTableBasedItemEffect__
- lsls r0, 24
- cmp r0, 0
- beq _080705B8
- ldr r0, _080705B0 @ =gUnknown_0202E8F4
- strb r5, [r0]
- movs r0, 0x5
- bl PlaySE
- ldr r0, _080705B4 @ =gOtherText_WontHaveAnyEffect
- movs r1, 0x1
- bl sub_806E834
- b _080705F8
- .align 2, 0
-_080705A8: .4byte 0x0201c000
-_080705AC: .4byte gTasks
-_080705B0: .4byte gUnknown_0202E8F4
-_080705B4: .4byte gOtherText_WontHaveAnyEffect
-_080705B8:
- ldr r1, _0807060C @ =gUnknown_0202E8F4
- movs r0, 0x1
- strb r0, [r1]
- movs r0, 0x1
- bl PlaySE
- ldrh r0, [r6, 0x6]
- movs r1, 0x1
- bl RemoveBagItem
- ldr r0, [r6]
- movs r2, 0x1E
- ldrsh r1, [r7, r2]
- adds r1, 0xD
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, _08070610 @ =gStringVar1
- movs r1, 0xD
- muls r1, r5
- ldr r2, _08070614 @ =gMoveNames
- adds r1, r2
- bl StringCopy
- ldrh r0, [r6, 0x6]
- bl GetMedicineItemEffectMessage
- ldr r0, _08070618 @ =gStringVar4
- movs r1, 0x1
- bl sub_806E834
-_080705F8:
- ldr r0, _0807061C @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08070620 @ =sub_806FB0C
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807060C: .4byte gUnknown_0202E8F4
-_08070610: .4byte gStringVar1
-_08070614: .4byte gMoveNames
-_08070618: .4byte gStringVar4
-_0807061C: .4byte gTasks
-_08070620: .4byte sub_806FB0C
- thumb_func_end DoRecoverPP
-
- thumb_func_start DoPPUpItemEffect
-DoPPUpItemEffect: @ 8070624
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r1, 16
- ldr r4, _0807066C @ =gTasks
- lsls r3, r0, 2
- adds r3, r0
- lsls r3, 3
- adds r3, r4
- ldr r4, _08070670 @ =TaskDummy
- str r4, [r3]
- bl sub_806E8D0
- movs r0, 0x5
- bl PlaySE
- movs r0, 0xB
- movs r1, 0x3
- bl sub_806D538
- ldr r0, _08070674 @ =0x0201c000
- ldrb r0, [r0, 0x5]
- bl CreateItemUseMoveMenu
- ldr r0, _08070678 @ =Task_HandleItemUseMoveMenuInput
- movs r1, 0x5
- bl CreateTask
- ldr r1, _0807067C @ =gMain
- movs r0, 0
- strh r0, [r1, 0x2E]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807066C: .4byte gTasks
-_08070670: .4byte TaskDummy
-_08070674: .4byte 0x0201c000
-_08070678: .4byte Task_HandleItemUseMoveMenuInput
-_0807067C: .4byte gMain
- thumb_func_end DoPPUpItemEffect
-
- thumb_func_start DoRareCandyItemEffect
-DoRareCandyItemEffect: @ 8070680
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r6, r1, 16
- ldr r3, _080706E0 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r3
- ldr r3, _080706E4 @ =TaskDummy
- str r3, [r1]
- adds r1, r6, 0
- bl sub_806E8D0
- ldr r5, _080706E8 @ =0x0201c000
- ldr r0, [r5]
- movs r1, 0x38
- bl GetMonData
- cmp r0, 0x64
- beq _080706F4
- movs r4, 0
- ldr r0, _080706EC @ =0xfffff264
- adds r7, r5, r0
-_080706B2:
- ldr r0, [r5]
- ldr r1, _080706F0 @ =gUnknown_08376D1C
- adds r1, r4, r1
- ldrb r1, [r1]
- bl GetMonData
- lsls r1, r4, 1
- adds r1, r7, r1
- strh r0, [r1]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _080706B2
- ldr r0, _080706E8 @ =0x0201c000
- ldrb r0, [r0, 0x5]
- adds r1, r6, 0
- movs r2, 0
- bl ExecuteTableBasedItemEffect__
- lsls r0, 24
- lsrs r0, 24
- b _080706F6
- .align 2, 0
-_080706E0: .4byte gTasks
-_080706E4: .4byte TaskDummy
-_080706E8: .4byte 0x0201c000
-_080706EC: .4byte 0xfffff264
-_080706F0: .4byte gUnknown_08376D1C
-_080706F4:
- movs r0, 0x1
-_080706F6:
- cmp r0, 0
- beq _08070724
- ldr r1, _08070718 @ =gUnknown_0202E8F4
- movs r0, 0
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0807071C @ =gOtherText_WontHaveAnyEffect
- movs r1, 0x1
- bl sub_806E834
- ldr r0, _08070720 @ =sub_806FB0C
- movs r1, 0x5
- bl CreateTask
- b _0807077C
- .align 2, 0
-_08070718: .4byte gUnknown_0202E8F4
-_0807071C: .4byte gOtherText_WontHaveAnyEffect
-_08070720: .4byte sub_806FB0C
-_08070724:
- ldr r1, _08070784 @ =gUnknown_0202E8F4
- movs r0, 0x1
- strb r0, [r1]
- movs r0, 0
- bl PlayFanfareByFanfareNum
- ldr r4, _08070788 @ =0x0201c000
- ldrb r0, [r4, 0x5]
- ldr r1, [r4]
- bl sub_8070A20
- adds r0, r6, 0
- movs r1, 0x1
- bl RemoveBagItem
- ldr r0, [r4]
- ldr r1, _0807078C @ =gStringVar1
- bl GetMonNickname
- ldr r0, [r4]
- movs r1, 0x38
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _08070790 @ =gStringVar2
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r4, _08070794 @ =gStringVar4
- ldr r1, _08070798 @ =gOtherText_ElevatedTo
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_806E834
- ldr r0, _0807079C @ =Task_RareCandy1
- movs r1, 0x5
- bl CreateTask
-_0807077C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08070784: .4byte gUnknown_0202E8F4
-_08070788: .4byte 0x0201c000
-_0807078C: .4byte gStringVar1
-_08070790: .4byte gStringVar2
-_08070794: .4byte gStringVar4
-_08070798: .4byte gOtherText_ElevatedTo
-_0807079C: .4byte Task_RareCandy1
- thumb_func_end DoRareCandyItemEffect
-
- thumb_func_start Task_RareCandy1
-Task_RareCandy1: @ 80707A0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0
- bl WaitFanfare
- lsls r0, 24
- cmp r0, 0
- beq _080707E8
- ldr r0, _080707F0 @ =gUnknown_0202E8F6
- ldrb r0, [r0]
- cmp r0, 0
- bne _080707E8
- ldr r0, _080707F4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080707CE
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080707E8
-_080707CE:
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl sub_8070848
- ldr r0, _080707F8 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _080707FC @ =Task_RareCandy2
- str r0, [r1]
-_080707E8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080707F0: .4byte gUnknown_0202E8F6
-_080707F4: .4byte gMain
-_080707F8: .4byte gTasks
-_080707FC: .4byte Task_RareCandy2
- thumb_func_end Task_RareCandy1
-
- thumb_func_start Task_RareCandy2
-Task_RareCandy2: @ 8070800
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0807083C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0807081A
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08070834
-_0807081A:
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl sub_8070968
- ldr r0, _08070840 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08070844 @ =Task_RareCandy3
- str r0, [r1]
-_08070834:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0807083C: .4byte gMain
-_08070840: .4byte gTasks
-_08070844: .4byte Task_RareCandy3
- thumb_func_end Task_RareCandy2
-
.section .text_8070968
thumb_func_start sub_8070968
diff --git a/data/specials.inc b/data/specials.inc
index bac45b91b..dd12775f5 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -187,7 +187,7 @@ gSpecials::
.4byte sp0B8_daycare
.4byte sp0B9_daycare_relationship_comment
.4byte sub_8042328
- .4byte daycare_send
+ .4byte Daycare_SendPokemon_Special
.4byte ChooseSendDaycareMon
.4byte ShowDaycareLevelMenu
.4byte sub_80417B8
diff --git a/include/asm.inc.h b/include/asm.inc.h
index c28050929..8921d14cd 100644
--- a/include/asm.inc.h
+++ b/include/asm.inc.h
@@ -1,6 +1,14 @@
// src/rom3.o
void sub_800C35C(void);
+struct UnkStruct8060024 {
+ u8 outsideMovementRect:1;
+ u8 tileIsImpassable:1;
+ u8 elevationMismatch:1;
+ u8 pathBlockedByObject:1;
+ u8 pad_04:4;
+};
+
// asm/battle_2.o
void sub_800E7C4(void);
u8 b_first_side(u8, u8, u8);
@@ -31,7 +39,7 @@ void StoreWordInTwoHalfwords(u16 *, u32);
void LoadWordFromTwoHalfwords(u16 *, u32 *);
// src/daycare.o
-u8 daycare_count_pokemon(u8 *);
+u8 Daycare_CountPokemon(struct BoxPokemon *);
// asm/daycare.o
void sub_8041324(struct BoxPokemon *, void *);
@@ -158,7 +166,7 @@ bool8 pokemon_has_move(struct Pokemon *, u16);
void sub_806FA18(u8 taskId);
// src/party_menu.o
-void sub_806E834();
+u8 sub_806E834(const u8 *message, u8 arg1);
// src/rom_8077ABC.o
u8 battle_side_get_owner(u8);
@@ -328,7 +336,7 @@ void sub_80C8F34(u8);
// asm/easy_chat.o
void InitEasyChatPhrases(void);
u8* sub_80EB3FC(u8 *, u16);
-u8 ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16, u16);
+u8 *ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16, u16);
// asm/pokenav.o
void sub_80EBA5C(void);
@@ -422,6 +430,9 @@ void sub_8134AC0(void *);
// src/player_pc.o
void NewGameInitPCItems(void);
+// asm/hall_of_fame.o
+void sub_8143648(u16 paletteTag, u8 arg1);
+
// src/diploma.o
void sub_8145D88(void);
diff --git a/include/battle_interface.h b/include/battle_interface.h
new file mode 100644
index 000000000..e85f87a30
--- /dev/null
+++ b/include/battle_interface.h
@@ -0,0 +1,36 @@
+#ifndef GUARD_BATTLE_INTERFACE_H
+#define GUARD_BATTLE_INTERFACE_H
+
+struct BattleInterfaceStruct1
+{
+ s32 unk0;
+ s32 unk4;
+ s32 unk8;
+ u32 unkC_0:5;
+ u32 unk10;
+};
+
+struct BattleInterfaceStruct2
+{
+ u16 unk0;
+ u32 unk4;
+};
+
+u8 battle_make_oam_normal_battle(u8);
+u8 battle_make_oam_safari_battle(void);
+void sub_8043D84(u8, u8, u32, u32, u32);
+void sub_8043DB0(u8);
+void sub_8043DFC(u8);
+void nullsub_11();
+void sub_8043EB4(u8);
+void sub_8043F44(u8);
+void sub_804454C(void);
+u8 sub_8044804(u8, const struct BattleInterfaceStruct2 *, u8, u8);
+void sub_8044CA0(u8);
+void sub_8045A5C(u8, struct Pokemon *, u8);
+s32 sub_8045C78(u8, u8, u8, u8);
+s16 sub_80460C8(struct BattleInterfaceStruct1 *, int *, void *, int);
+u8 GetScaledHPFraction(s16, s16, u8);
+int GetHPBarLevel(s16, s16);
+
+#endif // GUARD_BATTLE_INTERFACE_H
diff --git a/include/field_ground_effect.h b/include/field_ground_effect.h
new file mode 100644
index 000000000..590923041
--- /dev/null
+++ b/include/field_ground_effect.h
@@ -0,0 +1,10 @@
+//
+// Created by Scott Norton on 5/22/17.
+//
+
+#ifndef POKERUBY_FIELD_GROUND_EFFECT_H
+#define POKERUBY_FIELD_GROUND_EFFECT_H
+
+bool8 IsZCoordMismatchAt(u8 z, s16 x, s16 y);
+
+#endif //POKERUBY_FIELD_GROUND_EFFECT_H
diff --git a/include/field_map_obj.h b/include/field_map_obj.h
index 4c2d4c705..c160f1c72 100644
--- a/include/field_map_obj.h
+++ b/include/field_map_obj.h
@@ -3,40 +3,52 @@
#include "sprite.h"
+#define fieldmap_object_cb(setup, callback, table) \
+extern u8 (*const table[])(struct MapObject *, struct Sprite *);\
+static u8 callback(struct MapObject *, struct Sprite *);\
+void setup(struct Sprite *sprite)\
+{\
+ meta_step(&gMapObjects[sprite->data0], sprite, callback);\
+}\
+static u8 callback(struct MapObject *mapObject, struct Sprite *sprite)\
+{\
+ return table[sprite->data1](mapObject, sprite);\
+}
+
+#define fieldmap_object_null_cb(setup, callback) \
+static u8 callback(struct MapObject *, struct Sprite *);\
+void setup(struct Sprite *sprite)\
+{\
+ meta_step(&gMapObjects[sprite->data0], sprite, callback);\
+}\
+static u8 callback(struct MapObject *mapObject, struct Sprite *sprite)\
+{\
+ return 0;\
+}
+
+
void sub_805C058(struct MapObject *mapObject, s16 a, s16 b);
void FieldObjectSetDirection(struct MapObject *pObject, u8 unk_18);
void MoveCoords(u8 direction, s16 *x, s16 *y);
-void meta_step(struct MapObject *pObject, struct Sprite *pSprite, u8 (*d8)());
+void meta_step(struct MapObject *pObject, struct Sprite *pSprite, u8 (*d8)(struct MapObject *, struct Sprite *));
+void npc_reset(struct MapObject *mapObject, struct Sprite *sprite);
extern const u8 gUnknown_08375240[4];
extern u8 (*const gUnknown_08375244[])(s16 a0, s16 a1, s16 a2, s16 a3);
-extern u8 (*const gUnknown_08375270[])(struct MapObject *mapObject, struct Sprite *sprite);
-extern u8 (*const gUnknown_08375284[])(struct MapObject *mapObject, struct Sprite *sprite);
extern const u8 gUnknown_083752A0[2];
-extern u8 (*const gUnknown_083752A4[])(struct MapObject *mapObject, struct Sprite *sprite);
extern const u8 gUnknown_083752C0[2];
-extern u8 (*const gUnknown_083752C4[])(struct MapObject *mapObject, struct Sprite *sprite);
-extern u8 (*const gUnknown_083752D0[])(struct MapObject *mapObject, struct Sprite *sprite);
-extern u8 (*const gUnknown_083752E4[])(struct MapObject *mapObject, struct Sprite *sprite);
-extern u8 (*const gUnknown_083752F8[])(struct MapObject *mapObject, struct Sprite *sprite);
-extern u8 (*const gUnknown_0837530C[])(struct MapObject *mapObject, struct Sprite *sprite);
extern const u8 gUnknown_08375320[2];
-extern u8 (*const gUnknown_08375324[])(struct MapObject *mapObject, struct Sprite *sprite);
extern const u8 gUnknown_08375338[2];
-extern u8 (*const gUnknown_0837533C[])(struct MapObject *mapObject, struct Sprite *sprite);
extern const u8 gUnknown_08375350[2];
-extern u8 (*const gUnknown_08375354[])(struct MapObject *mapObject, struct Sprite *sprite);
extern const u8 gUnknown_08375368[2];
-extern u8 (*const gUnknown_0837536C[])(struct MapObject *mapObject, struct Sprite *sprite);
extern const u8 gUnknown_08375380[2];
-extern u8 (*const gUnknown_08375384[])(struct MapObject *mapObject, struct Sprite *sprite);
extern const u8 gUnknown_08375398[2];
-extern u8 (*const gUnknown_0837539C[])(struct MapObject *mapObject, struct Sprite *sprite);
extern const u8 gUnknown_083753B0[2];
-extern u8 (*const gUnknown_083753B4[])(struct MapObject *mapObject, struct Sprite *sprite);
extern const u8 gUnknown_083753C8[2];
-extern u8 (*const gUnknown_083753CC[])(struct MapObject *mapObject, struct Sprite *sprite);
extern const u8 gUnknown_083753DC[5];
+extern const u8 gUnknown_083753F4[5];
+
+extern const u8 gUnknown_0837567B[9];
#endif // GUARD_FIELD_MAP_OBJ_H
diff --git a/include/fieldmap.h b/include/fieldmap.h
index 936d27b4a..530e15798 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -1,6 +1,10 @@
#ifndef GUARD_FIELDMAP2_H
#define GUARD_FIELDMAP2_H
+#include "field_map_obj.h"
struct MapHeader *mapconnection_get_mapheader(struct MapConnection *connection);
+int GetMapBorderIdAt(int x, int y);
+extern bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction);
+int CanCameraMoveInDirection(int direction);
#endif
diff --git a/include/global.h b/include/global.h
index 5edb3239f..34946c895 100644
--- a/include/global.h
+++ b/include/global.h
@@ -464,6 +464,10 @@ struct GabbyAndTyData {
u8 valB;
};
+struct RecordMixing_UnknownStruct {
+ u8 data[0x38];
+};
+
struct SaveBlock1 /* 0x02025734 */
{
/*0x00*/ struct Coords16 pos;
@@ -538,9 +542,9 @@ struct SaveBlock1 /* 0x02025734 */
/*0x2DD4*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff
/*0x2DFC*/ u8 filler_2DFC[0x8];
/*0x2E04*/ SB_Struct sbStruct;
- /*0x2F9C*/ u8 filler_2F9C[0xA0];
- /*0x303C*/ u8 filler_303C[0x38];
- /*0x3074*/ u8 filler_3074[0x42];
+ /*0x2F9C*/ struct BoxPokemon daycareData[2];
+ /*0x303C*/ struct RecordMixing_UnknownStruct filler_303C[2];
+ /*0x30AC*/ u8 filler_30AC[0xA];
/*0x30B6*/ u8 filler_30B6;
/*0x30B7*/ u8 filler_30B7[1];
/*0x30B8*/ u8 linkBattleRecords[5][16];
diff --git a/include/menu.h b/include/menu.h
index c3dcbc969..6a11ffdc2 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -49,7 +49,7 @@ void PrintMenuItemsReordered(u8, u8, u8, const struct MenuAction[], u8*);
void InitYesNoMenu(u8, u8, u8);
void DisplayYesNoMenu(u8, u8, u32);
s8 ProcessMenuInputNoWrap_(void);
-u8 MenuPrint_PixelCoords(u8 *, u8, u16, u8);
+u8 MenuPrint_PixelCoords(const u8 *, u8, u16, u8);
u8 sub_8072A18(u8 *, u8, u16, u8, u32);
u8 unref_sub_8072A5C(u8 *, u8 *, u8, u16, u8, u32);
int sub_8072AB0(u8 *, u8, u16, u8, u8, u32);
diff --git a/include/pokemon.h b/include/pokemon.h
index ae02de8ca..15a028d6e 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -462,4 +462,5 @@ void MonRestorePP(struct Pokemon *);
u8 *sub_803F378(u16 itemId);
+u16 NationalPokedexNumToSpecies(u16 nationalNum);
#endif // GUARD_POKEMON_H
diff --git a/include/record_mixing.h b/include/record_mixing.h
index 39cf5bd43..72a089ca1 100644
--- a/include/record_mixing.h
+++ b/include/record_mixing.h
@@ -4,16 +4,16 @@
#include <stddef.h>
void sub_80B929C(void);
-void sub_80B92AC(void);
-void sub_80B93B0(u32 a);
-void sub_80B9450(u8 taskId);
-void sub_80B9484(u8 taskId);
+void RecordMixing_PrepareExchangePacket(void);
+void RecordMixing_ReceiveExchangePacket(u32 a);
+void Task_RecordMixing_SoundEffect(u8 taskId);
+void Task_RecordMixing_Main(u8 taskId);
void sub_80B95F0(u8 taskId);
-void sub_80B97DC(u8 taskId);
-void Task_CopyRecvBuffer(u8 taskId);
+void Task_RecordMixing_SendPacket(u8 taskId);
+void Task_RecordMixing_CopyReceiveBuffer(u8 taskId);
void sub_80B99B4(u8 taskId);
-void sub_80B99E8(u8 taskId);
-void sub_80B9A1C(u8 taskId);
+void Task_RecordMixing_ReceivePacket(u8 taskId);
+void Task_RecordMixing_SendPacket_SwitchToReceive(u8 taskId);
void *LoadPtrFromTaskData(u16 *ptr);
void StorePtrInTaskData(void *ptr, u16 *data);
u8 GetMultiplayerId_(void);
diff --git a/include/songs.h b/include/songs.h
index 244bb9808..c465ac562 100644
--- a/include/songs.h
+++ b/include/songs.h
@@ -120,7 +120,7 @@ enum
/*0x72*/ SE_TB_START,
/*0x73*/ SE_TB_KON,
/*0x74*/ SE_TB_KARA,
- SE_BIDORO,
+ /*0x75*/ SE_BIDORO,
SE_W085,
SE_W085B,
SE_W231,
@@ -269,7 +269,7 @@ enum
BGM_GIM,
BGM_NAMINORI,
BGM_DAN01,
- BGM_FANFA1,
+ /*0x16F*/ BGM_FANFA1,
BGM_ME_ASA,
BGM_ME_BACHI,
BGM_FANFA4,
diff --git a/ld_script.txt b/ld_script.txt
index 62c8ae3fe..866dcff5e 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -110,10 +110,6 @@ SECTIONS {
asm/reset_rtc_screen.o(.text);
asm/party_menu.o(.text);
src/party_menu.o(.text);
- asm/party_menu.o(.text_806E884);
- src/party_menu.o(.text_b);
- asm/party_menu.o(.text_80701DC);
- src/party_menu.o(.text_c);
asm/party_menu.o(.text_8070968);
src/start_menu.o(.text);
src/menu.o(.text);
diff --git a/src/battle_interface.c b/src/battle_interface.c
index 9938c4b54..ba3cba894 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -8,6 +8,7 @@
#include "songs.h"
#include "battle.h"
#include "palette.h"
+#include "battle_interface.h"
struct UnknownStruct5
{
@@ -35,15 +36,6 @@ struct UnknownStruct7
u8 filler0[0x180];
};
-struct UnknownStruct9
-{
- s32 unk0;
- u32 unk4;
- u32 unk8;
- u32 unkC_0:5;
- u32 unk10;
-};
-
extern u8 ewram[];
#define ewram520 ((struct UnknownStruct7 *)(ewram + 0x00520))
#define ewram16088 (*(u8 *) (ewram + 0x16088))
@@ -109,9 +101,8 @@ extern void load_gfxc_health_bar();
static void sub_8043D5C(struct Sprite *);
static const void *sub_8043CDC(u8);
-void sub_8044210(u8, s16, u8);
+static void sub_8044210(u8, s16, u8);
static void draw_status_ailment_maybe(u8);
-void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c);
extern void sub_8045180(struct Sprite *);
static void sub_8045110(struct Sprite *);
static void sub_8045048(struct Sprite *);
@@ -119,12 +110,11 @@ static void sub_8044F70(u8 taskId);
static void sub_8044E74(u8 taskId);
static void sub_8044ECC(u8 taskId);
static u8 sub_80457E8(u8, u8);
-s32 sub_8045C78(u8, u8, u8, u8);
static int sub_8045F58(s32, s32, int, int *, u8, u16);
static u8 GetScaledExpFraction(int, int, int, u8);
static void sub_8045D58(u8, u8);
static u8 sub_804602C(int, int, int, int *, u8 *, u8);
-static void sub_8046128(struct UnknownStruct9 *a, int *b, void *c);
+static void sub_8046128(struct BattleInterfaceStruct1 *a, int *b, void *c);
static int do_nothing(s16 unused1, s16 unused2, int unused3)
{
@@ -937,7 +927,7 @@ _0804420C: .4byte 0x04000008\n\
}
#endif
-void sub_8044210(u8 a, s16 b, u8 c)
+static void sub_8044210(u8 a, s16 b, u8 c)
{
u8 str[0x14];
u8 *ptr;
@@ -1377,15 +1367,9 @@ void sub_804454C(void)
}
}
-struct UnknownStruct8
-{
- u16 unk0;
- u32 unk4;
-};
-
// This function almost matches except for just two instructions around 0x08044B52 that are swapped.
#ifdef NONMATCHING
-u8 sub_8044804(u8 a, const struct UnknownStruct8 *b, u8 c, u8 d)
+u8 sub_8044804(u8 a, const struct BattleInterfaceStruct2 *b, u8 c, u8 d)
{
u8 r7;
s16 x;
@@ -1594,7 +1578,7 @@ u8 sub_8044804(u8 a, const struct UnknownStruct8 *b, u8 c, u8 d)
}
#else
__attribute__((naked))
-u8 sub_8044804(u8 a, const struct UnknownStruct8 *b, u8 c, u8 d)
+u8 sub_8044804(u8 a, const struct BattleInterfaceStruct2 *b, u8 c, u8 d)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -3005,7 +2989,7 @@ static u8 sub_804602C(int a, int b, int c, int *d, u8 *e, u8 f)
return r3;
}
-s16 sub_80460C8(struct UnknownStruct9 *a, int *b, void *c, int d)
+s16 sub_80460C8(struct BattleInterfaceStruct1 *a, int *b, void *c, int d)
{
u16 r7;
s16 r1;
@@ -3020,7 +3004,7 @@ s16 sub_80460C8(struct UnknownStruct9 *a, int *b, void *c, int d)
return r7;
}
-static void sub_8046128(struct UnknownStruct9 *a, int *b, void *c)
+static void sub_8046128(struct BattleInterfaceStruct1 *a, int *b, void *c)
{
u8 sp8[6];
u16 sp10[6];
diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c
index 820d16465..690ef99be 100644
--- a/src/battle_party_menu.c
+++ b/src/battle_party_menu.c
@@ -40,7 +40,6 @@ extern TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, con
extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(u8), int);
extern void sub_806E7D0(u8, const struct PartyPopupMenu *);
extern u8 *sub_8040D08();
-extern void sub_806E834();
extern u8 sub_8094C20();
extern void sub_8040B8C(void);
extern u8 pokemon_order_func(u8);
diff --git a/src/credits.c b/src/credits.c
index 01af78bce..ca5553c2e 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -1,12 +1,17 @@
#include "global.h"
#include "asm.h"
#include "decompress.h"
+#include "event_data.h"
#include "m4a.h"
#include "main.h"
#include "menu.h"
#include "palette.h"
+#include "pokedex.h"
+#include "rng.h"
#include "songs.h"
#include "sound.h"
+#include "species.h"
+#include "starter_choose.h"
#include "trig.h"
asm(".set REG_BASE, 0x4000000");
@@ -15,8 +20,6 @@ asm(".set OFFSET_REG_BLDALPHA, 0x52");
asm(".set REG_BLDCNT, REG_BASE + OFFSET_REG_BLDCNT");
asm(".set REG_BLDALPHA, REG_BASE + OFFSET_REG_BLDALPHA");
-u32 NationalPokedexNumToSpecies(u16 nationalNum);
-
struct MonCoords
{
u8 x, y;
@@ -126,14 +129,17 @@ enum
TDE_TASK_A_ID = 2,
};
+#define POKEMON_TILE_COUNT 68
+
struct Unk201C000
{
- u16 unk0[8];
- u8 pad_10[0x78];
+ u16 unk0[POKEMON_TILE_COUNT];
u16 unk88;
u16 unk8A;
u16 unk8C;
u16 unk8E;
+ u16 unk90[386];
+ u16 unk394;
};
struct CreditsEntry
@@ -226,12 +232,12 @@ static u8 sub_8144454(u8 page, u8 taskIdA);
static void task_d_8144514(u8 taskIdD);
static bool8 sub_8144ECC(u8 data, u8 taskIdA);
static void sub_81450AC(u8 taskIdA);
-void sub_8145128(u16, u16, u16);
-static void sub_81452D0(u16 arg0, u16 arg1);
+static void sub_8145128(u16, u16, u16);
+static void sub_81452D0(u16 arg0, u16 palette);
static void spritecb_player_8145378(struct Sprite *sprite);
static void spritecb_rival_8145420(struct Sprite *sprite);
-u8 sub_81456B4(u16 nationalNum, u16 x, u16 y, u16 arg3);
-void sub_81458DC(void);
+static u8 sub_81456B4(u16 nationalNum, u16 x, u16 y, u16 position);
+static void sub_81458DC(void);
static void vblank_8143948(void)
{
@@ -666,8 +672,7 @@ static void task_b_81441B8(u8 taskIdB)
for (i = 0; i < 5; i++)
{
- sub_8072BD8(gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->text, 0,
- 9 + i * 2, 240);
+ sub_8072BD8(gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->text, 0, 9 + i * 2, 240);
}
gTasks[taskIdB].data[TDB_CURRENT_PAGE] += 1;
@@ -816,8 +821,6 @@ static u8 sub_8144454(u8 page, u8 taskIdA)
return FALSE;
}
-#define UNK_DEFINE_44 (0x44)
-
static void task_d_8144514(u8 taskIdD)
{
struct Unk201C000 *r6 = &ewram1c000;
@@ -834,7 +837,7 @@ static void task_d_8144514(u8 taskIdD)
gTasks[taskIdD].data[TDD_STATE]++;
break;
case 2:
- if (r6->unk88 == UNK_DEFINE_44 || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != task_a_8143B68)
+ if (r6->unk88 == POKEMON_TILE_COUNT || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != task_a_8143B68)
break;
r2 = sub_81456B4(r6->unk0[r6->unk8C], gUnknown_0840CA00[r6->unk8A][0], gUnknown_0840CA00[r6->unk8A][1], r6->unk8A);
if (r6->unk8C < r6->unk8E - 1)
@@ -866,83 +869,83 @@ static void task_d_8144514(u8 taskIdD)
void task_c_8144664(u8 taskIdC)
{
- switch (gTasks[taskIdC].data[0])
+ switch (gTasks[taskIdC].data[TDC_0])
{
case 0:
- gUnknown_0203935A = Sin((gTasks[taskIdC].data[5] >> 1) & 0x7F, 12);
- gTasks[taskIdC].data[5]++;
+ gUnknown_0203935A = Sin((gTasks[taskIdC].data[TDC_5] >> 1) & 0x7F, 12);
+ gTasks[taskIdC].data[TDC_5]++;
break;
case 1:
if (gUnknown_0203935A != 0)
{
- gUnknown_0203935A = Sin((gTasks[taskIdC].data[5] >> 1) & 0x7F, 12);
- gTasks[taskIdC].data[5]++;
+ gUnknown_0203935A = Sin((gTasks[taskIdC].data[TDC_5] >> 1) & 0x7F, 12);
+ gTasks[taskIdC].data[TDC_5]++;
}
else
{
- gSprites[gTasks[taskIdC].data[2]].data0 = 2;
- gTasks[taskIdC].data[5] = 0;
- gTasks[taskIdC].data[0]++;
+ gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 2;
+ gTasks[taskIdC].data[TDC_5] = 0;
+ gTasks[taskIdC].data[TDC_0]++;
}
break;
case 2:
- if (gTasks[taskIdC].data[5] < 64)
+ if (gTasks[taskIdC].data[TDC_5] < 64)
{
- gTasks[taskIdC].data[5]++;
- gUnknown_0203935A = Sin(gTasks[taskIdC].data[5] & 0x7F, 20);
+ gTasks[taskIdC].data[TDC_5]++;
+ gUnknown_0203935A = Sin(gTasks[taskIdC].data[TDC_5] & 0x7F, 20);
}
else
{
- gTasks[taskIdC].data[0]++;
+ gTasks[taskIdC].data[TDC_0]++;
}
break;
case 3:
- gSprites[gTasks[taskIdC].data[2]].data0 = 3;
- gSprites[gTasks[taskIdC].data[3]].data0 = 1;
- gTasks[taskIdC].data[4] = 120;
- gTasks[taskIdC].data[0]++;
+ gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 3;
+ gSprites[gTasks[taskIdC].data[TDC_3]].data0 = 1;
+ gTasks[taskIdC].data[TDC_4] = 120;
+ gTasks[taskIdC].data[TDC_0]++;
break;
case 4:
- if (gTasks[taskIdC].data[4] != 0)
+ if (gTasks[taskIdC].data[TDC_4] != 0)
{
- gTasks[taskIdC].data[4]--;
+ gTasks[taskIdC].data[TDC_4]--;
}
else
{
- gTasks[taskIdC].data[5] = 64;
- gTasks[taskIdC].data[0]++;
+ gTasks[taskIdC].data[TDC_5] = 64;
+ gTasks[taskIdC].data[TDC_0]++;
}
break;
case 5:
- if (gTasks[taskIdC].data[5] > 0)
+ if (gTasks[taskIdC].data[TDC_5] > 0)
{
- gTasks[taskIdC].data[5]--;
- gUnknown_0203935A = Sin(gTasks[taskIdC].data[5] & 0x7F, 20);
+ gTasks[taskIdC].data[TDC_5]--;
+ gUnknown_0203935A = Sin(gTasks[taskIdC].data[TDC_5] & 0x7F, 20);
}
else
{
- gSprites[gTasks[taskIdC].data[2]].data0 = 1;
- gTasks[taskIdC].data[0]++;
+ gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 1;
+ gTasks[taskIdC].data[TDC_0]++;
}
break;
case 6:
- gTasks[taskIdC].data[0] = 50;
+ gTasks[taskIdC].data[TDC_0] = 50;
break;
case 10:
- gSprites[gTasks[taskIdC].data[3]].data0 = 2;
- gTasks[taskIdC].data[0] = 50;
+ gSprites[gTasks[taskIdC].data[TDC_3]].data0 = 2;
+ gTasks[taskIdC].data[TDC_0] = 50;
break;
case 20:
- gSprites[gTasks[taskIdC].data[2]].data0 = 4;
- gTasks[taskIdC].data[0] = 50;
+ gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 4;
+ gTasks[taskIdC].data[TDC_0] = 50;
break;
case 30:
- gSprites[gTasks[taskIdC].data[2]].data0 = 5;
- gSprites[gTasks[taskIdC].data[3]].data0 = 3;
- gTasks[taskIdC].data[0] = 50;
+ gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 5;
+ gSprites[gTasks[taskIdC].data[TDC_3]].data0 = 3;
+ gTasks[taskIdC].data[TDC_0] = 50;
break;
case 50:
- gTasks[taskIdC].data[0] = 0;
+ gTasks[taskIdC].data[TDC_0] = 0;
break;
}
}
@@ -1205,119 +1208,39 @@ static void sub_81450AC(u8 taskIdA)
gUnknown_0203935C = 1;
}
-__attribute__((naked))
-void sub_8145128(u16 arg0, u16 arg1, u16 arg2)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- adds r3, r0, 0\n\
- adds r4, r2, 0\n\
- lsls r3, 16\n\
- lsrs r3, 16\n\
- lsls r1, 16\n\
- lsrs r7, r1, 16\n\
- lsls r4, 16\n\
- lsrs r5, r4, 16\n\
- ldr r0, _081451EC @ =gCreditsCopyrightEnd_Gfx\n\
- movs r6, 0xC0\n\
- lsls r6, 19\n\
- adds r3, r6\n\
- adds r1, r3, 0\n\
- bl LZ77UnCompVram\n\
- ldr r0, _081451F0 @ =gIntroCopyright_Pal\n\
- adds r1, r5, 0\n\
- movs r2, 0x20\n\
- bl LoadPalette\n\
- lsrs r4, 20\n\
- lsls r4, 28\n\
- lsrs r4, 16\n\
- movs r2, 0\n\
- adds r1, r4, 0x1\n\
- ldr r3, _081451F4 @ =0x000003ff\n\
-_0814515E:\n\
- lsls r0, r2, 1\n\
- adds r0, r7\n\
- adds r0, r6\n\
- strh r1, [r0]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 16\n\
- lsrs r2, r0, 16\n\
- cmp r2, r3\n\
- bls _0814515E\n\
- movs r2, 0\n\
- adds r0, r4, 0x2\n\
- adds r6, r4, 0\n\
- adds r6, 0x17\n\
- movs r1, 0x2B\n\
- adds r1, r4\n\
- mov r12, r1\n\
- adds r4, 0x42\n\
- ldr r5, _081451F8 @ =0x060001c8\n\
- adds r3, r0, 0\n\
-_08145184:\n\
- lsls r0, r2, 1\n\
- adds r0, r7\n\
- adds r0, r5\n\
- adds r1, r2, r3\n\
- strh r1, [r0]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 16\n\
- lsrs r2, r0, 16\n\
- cmp r2, 0x14\n\
- bls _08145184\n\
- movs r2, 0\n\
- ldr r5, _081451FC @ =0x06000248\n\
- adds r3, r6, 0\n\
-_0814519E:\n\
- lsls r0, r2, 1\n\
- adds r0, r7\n\
- adds r0, r5\n\
- adds r1, r2, r3\n\
- strh r1, [r0]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 16\n\
- lsrs r2, r0, 16\n\
- cmp r2, 0x13\n\
- bls _0814519E\n\
- movs r2, 0\n\
- ldr r5, _08145200 @ =0x060002c8\n\
- mov r3, r12\n\
-_081451B8:\n\
- lsls r0, r2, 1\n\
- adds r0, r7\n\
- adds r0, r5\n\
- adds r1, r2, r3\n\
- strh r1, [r0]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 16\n\
- lsrs r2, r0, 16\n\
- cmp r2, 0x16\n\
- bls _081451B8\n\
- movs r2, 0\n\
- ldr r3, _08145204 @ =0x06000348\n\
-_081451D0:\n\
- lsls r0, r2, 1\n\
- adds r0, r7\n\
- adds r0, r3\n\
- adds r1, r2, r4\n\
- strh r1, [r0]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 16\n\
- lsrs r2, r0, 16\n\
- cmp r2, 0xB\n\
- bls _081451D0\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_081451EC: .4byte gCreditsCopyrightEnd_Gfx\n\
-_081451F0: .4byte gIntroCopyright_Pal\n\
-_081451F4: .4byte 0x000003ff\n\
-_081451F8: .4byte 0x060001c8\n\
-_081451FC: .4byte 0x06000248\n\
-_08145200: .4byte 0x060002c8\n\
-_08145204: .4byte 0x06000348\n\
- .syntax divided\n");
+static void sub_8145128(u16 arg0, u16 arg1, u16 arg2) {
+ u16 baseTile;
+ u16 i;
+
+ LZ77UnCompVram(gCreditsCopyrightEnd_Gfx, (void *) (VRAM + arg0));
+ LoadPalette(gIntroCopyright_Pal, arg2, sizeof(gIntroCopyright_Pal));
+
+ baseTile = (arg2 / 16) << 12;
+
+ for (i = 0; i < 32 * 32; i++)
+ {
+ ((u16 *) (VRAM + arg1))[i] = baseTile + 1;
+ }
+
+ for (i = 0; i < 21; i++)
+ {
+ ((u16 *) (VRAM + arg1))[7 * 32 + 4 + i] = i + 2 + baseTile;
+ }
+
+ for (i = 0; i < 20; i++)
+ {
+ ((u16 *) (VRAM + arg1))[9 * 32 + 4 + i] = i + 23 + baseTile;
+ }
+
+ for (i = 0; i < 23; i++)
+ {
+ ((u16 *) (VRAM + arg1))[11 * 32 + 4 + i] = i + 43 + baseTile;
+ }
+
+ for (i = 0; i < 12; i++)
+ {
+ ((u16 *) (VRAM + arg1))[13 * 32 + 4 + i] = i + 66 + baseTile;
+ }
}
u16 sub_8145208(u8 arg0)
@@ -1332,106 +1255,45 @@ u16 sub_8145208(u8 arg0)
if (arg0 & (1 << 7))
{
- out |= 0x800;
+ out |= 1 << 11;
}
if (arg0 & (1 << 6))
{
- out |= 0x400;
+ out |= 1 << 10;
}
return out;
}
-__attribute__((naked))
-void sub_814524C(void *arg0, u8 arg1, u8 arg2, u16 arg3, int arg4)
-{
- 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, 0xC\n\
- str r0, [sp]\n\
- ldr r0, [sp, 0x2C]\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- mov r10, r1\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- str r2, [sp, 0x4]\n\
- lsls r3, 16\n\
- lsrs r3, 16\n\
- str r3, [sp, 0x8]\n\
- lsls r0, 16\n\
- lsrs r0, 20\n\
- lsls r0, 28\n\
- lsrs r0, 16\n\
- mov r9, r0\n\
- movs r5, 0\n\
-_0814527A:\n\
- movs r4, 0\n\
- lsls r7, r5, 1\n\
- ldr r1, [sp, 0x4]\n\
- adds r0, r1, r5\n\
- adds r2, r5, 0x1\n\
- mov r8, r2\n\
- lsls r0, 6\n\
- ldr r1, [sp, 0x8]\n\
- adds r6, r0, r1\n\
-_0814528C:\n\
- adds r0, r7, r5\n\
- adds r0, r4\n\
- ldr r2, [sp]\n\
- adds r0, r2, r0\n\
- ldrb r0, [r0]\n\
- bl sub_8145208\n\
- mov r2, r10\n\
- adds r1, r2, r4\n\
- lsls r1, 1\n\
- adds r1, r6\n\
- movs r2, 0xC0\n\
- lsls r2, 19\n\
- adds r1, r2\n\
- add r0, r9\n\
- strh r0, [r1]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0x2\n\
- bls _0814528C\n\
- mov r1, r8\n\
- lsls r0, r1, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x4\n\
- bls _0814527A\n\
- add sp, 0xC\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided\n");
+void sub_814524C(u8 arg0[], u8 baseX, u8 baseY, u16 arg3, u16 palette) {
+ u8 y, x;
+
+ const u16 tileOffset = (palette / 16) << 12;
+
+ for (y = 0; y < 5; y++)
+ {
+ for (x = 0; x < 3; x++)
+ {
+ ((u16 *) (VRAM + arg3 + (baseY + y) * 64))[baseX + x] = tileOffset + sub_8145208(arg0[y * 3 + x]);
+ }
+ }
}
-static void sub_81452D0(u16 arg0, u16 arg1)
+static void sub_81452D0(u16 arg0, u16 palette)
{
- u16 i;
- u16 foo = arg1 / 16;
- u16 bar = foo * 4096;
-
- for (i = 0; i < 0x400; i++)
- ((u16 *)(VRAM + arg0))[i] = bar + 1;
-
- sub_814524C(&gUnknown_0840B83C, 3, 7, arg0, arg1);
- sub_814524C(&gUnknown_0840B84B, 7, 7, arg0, arg1);
- sub_814524C(&gUnknown_0840B85A, 11, 7, arg0, arg1);
- sub_814524C(&gUnknown_0840B85A, 16, 7, arg0, arg1);
- sub_814524C(&gUnknown_0840B869, 20, 7, arg0, arg1);
- sub_814524C(&gUnknown_0840B878, 24, 7, arg0, arg1);
+ u16 pos;
+ u16 baseTile = (palette / 16) << 12;
+
+ for (pos = 0; pos < 32 * 32; pos++)
+ ((u16 *) (VRAM + arg0))[pos] = baseTile + 1;
+
+ sub_814524C(gUnknown_0840B83C, 3, 7, arg0, palette);
+ sub_814524C(gUnknown_0840B84B, 7, 7, arg0, palette);
+ sub_814524C(gUnknown_0840B85A, 11, 7, arg0, palette);
+ sub_814524C(gUnknown_0840B85A, 16, 7, arg0, palette);
+ sub_814524C(gUnknown_0840B869, 20, 7, arg0, palette);
+ sub_814524C(gUnknown_0840B878, 24, 7, arg0, palette);
}
static void spritecb_player_8145378(struct Sprite *sprite)
@@ -1538,268 +1400,121 @@ static void spritecb_rival_8145420(struct Sprite *sprite)
}
}
-__attribute__((naked))
-void spritecb_81454E0(struct Sprite *sprite)
-{
- asm(".syntax unified\n\
- push {r4,r5,lr}\n\
- sub sp, 0x4\n\
- adds r5, r0, 0\n\
- ldr r0, _081454F8 @ =gUnknown_0203935C\n\
- movs r1, 0\n\
- ldrsh r0, [r0, r1]\n\
- cmp r0, 0\n\
- beq _081454FC\n\
- adds r0, r5, 0\n\
- bl DestroySprite\n\
- b _081456A6\n\
- .align 2, 0\n\
-_081454F8: .4byte gUnknown_0203935C\n\
-_081454FC:\n\
- ldrh r0, [r5, 0x3C]\n\
- adds r0, 0x1\n\
- strh r0, [r5, 0x3C]\n\
- movs r2, 0x2E\n\
- ldrsh r0, [r5, r2]\n\
- cmp r0, 0xA\n\
- bhi _08145544\n\
- lsls r0, 2\n\
- ldr r1, _08145514 @ =_08145518\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_08145514: .4byte _08145518\n\
- .align 2, 0\n\
-_08145518:\n\
- .4byte _08145544\n\
- .4byte _0814559E\n\
- .4byte _08145620\n\
- .4byte _08145660\n\
- .4byte _08145544\n\
- .4byte _08145544\n\
- .4byte _08145544\n\
- .4byte _08145544\n\
- .4byte _08145544\n\
- .4byte _08145544\n\
- .4byte _08145696\n\
-_08145544:\n\
- ldrb r1, [r5, 0x1]\n\
- movs r0, 0x4\n\
- negs r0, r0\n\
- ands r0, r1\n\
- movs r1, 0x1\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x1]\n\
- movs r0, 0x30\n\
- ldrsh r1, [r5, r0]\n\
- movs r0, 0x1F\n\
- ands r1, r0\n\
- lsls r1, 1\n\
- ldrb r2, [r5, 0x3]\n\
- movs r0, 0x3F\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x3]\n\
- movs r0, 0x10\n\
- strh r0, [r5, 0x32]\n\
- ldrh r4, [r5, 0x30]\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- movs r0, 0x80\n\
- lsls r0, 9\n\
- movs r1, 0x10\n\
- bl __divsi3\n\
- adds r1, r0, 0\n\
- str r1, [sp]\n\
- adds r0, r4, 0\n\
- movs r2, 0\n\
- movs r3, 0\n\
- bl SetOamMatrix\n\
- adds r2, r5, 0\n\
- adds r2, 0x3E\n\
- ldrb r1, [r2]\n\
- movs r0, 0x5\n\
- negs r0, r0\n\
- ands r0, r1\n\
- strb r0, [r2]\n\
- movs r0, 0x1\n\
- strh r0, [r5, 0x2E]\n\
- b _081456A6\n\
-_0814559E:\n\
- ldrh r1, [r5, 0x32]\n\
- movs r2, 0x32\n\
- ldrsh r0, [r5, r2]\n\
- cmp r0, 0xFF\n\
- bgt _081455D4\n\
- adds r0, r1, 0\n\
- adds r0, 0x8\n\
- strh r0, [r5, 0x32]\n\
- ldrh r4, [r5, 0x30]\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- movs r0, 0x32\n\
- ldrsh r1, [r5, r0]\n\
- movs r0, 0x80\n\
- lsls r0, 9\n\
- bl __divsi3\n\
- adds r1, r0, 0\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- str r1, [sp]\n\
- adds r0, r4, 0\n\
- movs r2, 0\n\
- movs r3, 0\n\
- bl SetOamMatrix\n\
- b _081455DA\n\
-_081455D4:\n\
- ldrh r0, [r5, 0x2E]\n\
- adds r0, 0x1\n\
- strh r0, [r5, 0x2E]\n\
-_081455DA:\n\
- movs r2, 0x30\n\
- ldrsh r1, [r5, r2]\n\
- cmp r1, 0x2\n\
- beq _081456A6\n\
- cmp r1, 0x2\n\
- bgt _081455EC\n\
- cmp r1, 0x1\n\
- beq _081455F2\n\
- b _081456A6\n\
-_081455EC:\n\
- cmp r1, 0x3\n\
- beq _0814560A\n\
- b _081456A6\n\
-_081455F2:\n\
- ldrh r1, [r5, 0x3C]\n\
- movs r0, 0x3\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08145602\n\
- ldrh r0, [r5, 0x22]\n\
- adds r0, 0x1\n\
- strh r0, [r5, 0x22]\n\
-_08145602:\n\
- ldrh r0, [r5, 0x20]\n\
- subs r0, 0x2\n\
- strh r0, [r5, 0x20]\n\
- b _081456A6\n\
-_0814560A:\n\
- ldrh r0, [r5, 0x3C]\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- bne _08145618\n\
- ldrh r0, [r5, 0x22]\n\
- adds r0, 0x1\n\
- strh r0, [r5, 0x22]\n\
-_08145618:\n\
- ldrh r0, [r5, 0x20]\n\
- adds r0, 0x2\n\
- strh r0, [r5, 0x20]\n\
- b _081456A6\n\
-_08145620:\n\
- ldrh r1, [r5, 0x34]\n\
- movs r2, 0x34\n\
- ldrsh r0, [r5, r2]\n\
- cmp r0, 0\n\
- beq _08145630\n\
- subs r0, r1, 0x1\n\
- strh r0, [r5, 0x34]\n\
- b _081456A6\n\
-_08145630:\n\
- ldr r1, _0814565C @ =REG_BLDCNT\n\
- movs r2, 0xF4\n\
- lsls r2, 4\n\
- adds r0, r2, 0\n\
- strh r0, [r1]\n\
- adds r1, 0x2\n\
- movs r0, 0x10\n\
- strh r0, [r1]\n\
- ldrb r1, [r5, 0x1]\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r1\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x1]\n\
- movs r0, 0x10\n\
- strh r0, [r5, 0x34]\n\
- ldrh r0, [r5, 0x2E]\n\
- adds r0, 0x1\n\
- strh r0, [r5, 0x2E]\n\
- b _081456A6\n\
- .align 2, 0\n\
-_0814565C: .4byte REG_BLDCNT\n\
-_08145660:\n\
- ldrh r1, [r5, 0x34]\n\
- movs r2, 0x34\n\
- ldrsh r0, [r5, r2]\n\
- cmp r0, 0\n\
- beq _08145684\n\
- subs r1, 0x1\n\
- strh r1, [r5, 0x34]\n\
- ldr r3, _08145680 @ =REG_BLDALPHA\n\
- movs r0, 0x34\n\
- ldrsh r2, [r5, r0]\n\
- movs r0, 0x10\n\
- subs r0, r2\n\
- lsls r0, 8\n\
- adds r1, r0\n\
- strh r1, [r3]\n\
- b _081456A6\n\
- .align 2, 0\n\
-_08145680: .4byte REG_BLDALPHA\n\
-_08145684:\n\
- adds r2, r5, 0\n\
- adds r2, 0x3E\n\
- ldrb r0, [r2]\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- movs r0, 0xA\n\
- strh r0, [r5, 0x2E]\n\
- b _081456A6\n\
-_08145696:\n\
- ldr r0, _081456B0 @ =REG_BLDCNT\n\
- movs r1, 0\n\
- strh r1, [r0]\n\
- adds r0, 0x2\n\
- strh r1, [r0]\n\
- adds r0, r5, 0\n\
- bl DestroySprite\n\
-_081456A6:\n\
- add sp, 0x4\n\
- pop {r4,r5}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_081456B0: .4byte REG_BLDCNT\n\
- .syntax divided\n");
+void spritecb_81454E0(struct Sprite *sprite) {
+ if (gUnknown_0203935C)
+ {
+ DestroySprite(sprite);
+ return;
+ }
+
+ sprite->data7 += 1;
+ switch (sprite->data0)
+ {
+ case 0:
+ default:
+ sprite->oam.affineMode = 1;
+ sprite->oam.matrixNum = sprite->data1;
+ sprite->data2 = 16;
+ SetOamMatrix(sprite->data1, 0x10000 / sprite->data2, 0, 0, 0x10000 / sprite->data2);
+ sprite->invisible = FALSE;
+ sprite->data0 = 1;
+ break;
+
+ case 1:
+ if (sprite->data2 < 256)
+ {
+ sprite->data2 += 8;
+ SetOamMatrix(sprite->data1, 0x10000 / sprite->data2, 0, 0, 0x10000 / sprite->data2);
+ }
+ else
+ {
+ sprite->data0 += 1;
+ }
+ switch (sprite->data1)
+ {
+ case 1:
+ if ((sprite->data7 & 3) == 0)
+ {
+ sprite->pos1.y += 1;
+ }
+ sprite->pos1.x -= 2;
+ break;
+ case 2:
+ break;
+ case 3:
+ if ((sprite->data7 & 3) == 0)
+ {
+ sprite->pos1.y += 1;
+ }
+ sprite->pos1.x += 2;
+ break;
+ }
+ break;
+
+ case 2:
+ if (sprite->data3 != 0)
+ {
+ sprite->data3 -= 1;
+ }
+ else
+ {
+ REG_BLDCNT = 0xF40;
+ REG_BLDALPHA = 0x10;
+ sprite->oam.objMode = 1;
+ sprite->data3 = 16;
+ sprite->data0 += 1;
+ }
+ break;
+
+ case 3:
+ if (sprite->data3 != 0)
+ {
+ int data3;
+ vu16 *reg;
+
+ sprite->data3 -= 1;
+
+ reg = &REG_BLDALPHA;
+ data3 = 16 - sprite->data3;
+ *reg = (data3 << 8) + sprite->data3;
+ }
+ else
+ {
+ sprite->invisible = TRUE;
+ sprite->data0 = 10;
+ }
+ break;
+
+ case 10:
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ DestroySprite(sprite);
+ break;
+
+ }
}
-#ifdef NONMATCHING
-u8 sub_81456B4(u16 nationalNum, u16 x, u16 y, u16 arg3)
+static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position)
{
- u32 species;
u32 personality;
void *palette;
u8 spriteId;
u8 spriteId2;
- species = NationalPokedexNumToSpecies(nationalNum);
+ species = NationalPokedexNumToSpecies(species);
+
switch (species)
{
- case SPECIES_UNOWN:
- personality = gSaveBlock2.pokedex.unownPersonality;
+ default:
+ personality = 0;
break;
case SPECIES_SPINDA:
personality = gSaveBlock2.pokedex.spindaPersonality;
break;
- default:
- personality = 0;
+ case SPECIES_UNOWN:
+ personality = gSaveBlock2.pokedex.unownPersonality;
break;
}
@@ -1808,196 +1523,30 @@ u8 sub_81456B4(u16 nationalNum, u16 x, u16 y, u16 arg3)
gMonFrontPicCoords[species].x,
gMonFrontPicCoords[species].y,
0x2000000,
- gUnknown_0840B5A0[arg3],
+ gUnknown_0840B5A0[position],
species,
personality,
1
);
palette = species_and_otid_get_pal(species, 0, 0xFFFF);
- LoadCompressedPalette(palette, 0x100 + (arg3 * 16), 0x20);
- sub_8143648(arg3, arg3);
+ LoadCompressedPalette(palette, 0x100 + (position * 16), 0x20);
+ sub_8143648(position, position);
spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0);
- gSprites[spriteId].oam.paletteNum = arg3;
+ gSprites[spriteId].oam.paletteNum = position;
gSprites[spriteId].oam.priority = 1;
- gSprites[spriteId].data1 = arg3 + 1;
+ gSprites[spriteId].data1 = position + 1;
gSprites[spriteId].invisible = TRUE;
gSprites[spriteId].callback = spritecb_81454E0;
spriteId2 = CreateSprite(&gSpriteTemplate_840CAEC, gSprites[spriteId].pos1.x, gSprites[spriteId].pos1.y, 1);
gSprites[spriteId2].data0 = spriteId;
- StartSpriteAnimIfDifferent(&gSprites[spriteId2], arg3);
+ StartSpriteAnimIfDifferent(&gSprites[spriteId2], position);
return spriteId;
}
-#else
-__attribute__((naked))
-u8 sub_81456B4(u16 nationalNum, u16 x, u16 y, u16 arg3)
-{
- 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, 0x14\n\
- lsls r0, 16\n\
- lsrs r6, r0, 16\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- mov r10, r1\n\
- lsls r2, 16\n\
- lsrs r2, 16\n\
- str r2, [sp, 0x10]\n\
- lsls r3, 16\n\
- lsrs r3, 16\n\
- mov r9, r3\n\
- adds r0, r6, 0\n\
- bl NationalPokedexNumToSpecies\n\
- adds r6, r0, 0\n\
- cmp r6, 0xC9\n\
- beq _081456F8\n\
- movs r0, 0x9A\n\
- lsls r0, 1\n\
- cmp r6, r0\n\
- beq _081456EE\n\
- movs r7, 0\n\
- b _081456FC\n\
-_081456EE:\n\
- ldr r0, _081456F4 @ =gSaveBlock2\n\
- ldr r7, [r0, 0x20]\n\
- b _081456FC\n\
- .align 2, 0\n\
-_081456F4: .4byte gSaveBlock2\n\
-_081456F8:\n\
- ldr r0, _081457E8 @ =gSaveBlock2\n\
- ldr r7, [r0, 0x1C]\n\
-_081456FC:\n\
- lsls r0, r6, 3\n\
- ldr r1, _081457EC @ =gMonFrontPicTable\n\
- adds r0, r1\n\
- ldr r1, _081457F0 @ =gMonFrontPicCoords\n\
- lsls r2, r6, 2\n\
- adds r2, r1\n\
- ldrb r1, [r2]\n\
- ldrb r2, [r2, 0x1]\n\
- movs r3, 0x80\n\
- lsls r3, 18\n\
- ldr r4, _081457F4 @ =gUnknown_0840B5A0\n\
- mov r8, r4\n\
- mov r5, r9\n\
- lsls r4, r5, 2\n\
- add r4, r8\n\
- ldr r4, [r4]\n\
- str r4, [sp]\n\
- str r6, [sp, 0x4]\n\
- str r7, [sp, 0x8]\n\
- movs r4, 0x1\n\
- str r4, [sp, 0xC]\n\
- bl LoadSpecialPokePic\n\
- ldr r2, _081457F8 @ =0x0000ffff\n\
- adds r0, r6, 0\n\
- movs r1, 0\n\
- bl species_and_otid_get_pal\n\
- lsls r5, 4\n\
- mov r8, r5\n\
- movs r1, 0x80\n\
- lsls r1, 1\n\
- add r1, r8\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- movs r2, 0x20\n\
- bl LoadCompressedPalette\n\
- mov r7, r9\n\
- lsls r6, r7, 24\n\
- lsrs r6, 24\n\
- mov r0, r9\n\
- adds r1, r6, 0\n\
- bl sub_8143648\n\
- ldr r0, _081457FC @ =gUnknown_02024E8C\n\
- mov r2, r10\n\
- lsls r1, r2, 16\n\
- asrs r1, 16\n\
- ldr r3, [sp, 0x10]\n\
- lsls r2, r3, 16\n\
- asrs r2, 16\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- adds r4, r0, 0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- ldr r5, _08145800 @ =gSprites\n\
- lsls r2, r4, 4\n\
- adds r2, r4\n\
- lsls r2, 2\n\
- adds r3, r2, r5\n\
- ldrb r1, [r3, 0x5]\n\
- movs r0, 0xF\n\
- ands r0, r1\n\
- mov r7, r8\n\
- orrs r0, r7\n\
- movs r1, 0xD\n\
- negs r1, r1\n\
- ands r0, r1\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- strb r0, [r3, 0x5]\n\
- mov r0, r9\n\
- adds r0, 0x1\n\
- strh r0, [r3, 0x30]\n\
- movs r0, 0x3E\n\
- adds r0, r3\n\
- mov r8, r0\n\
- ldrb r0, [r0]\n\
- orrs r0, r1\n\
- mov r1, r8\n\
- strb r0, [r1]\n\
- adds r0, r5, 0\n\
- adds r0, 0x1C\n\
- adds r2, r0\n\
- ldr r0, _08145804 @ =spritecb_81454E0\n\
- str r0, [r2]\n\
- ldr r0, _08145808 @ =gSpriteTemplate_840CAEC\n\
- movs r2, 0x20\n\
- ldrsh r1, [r3, r2]\n\
- movs r7, 0x22\n\
- ldrsh r2, [r3, r7]\n\
- movs r3, 0x1\n\
- bl CreateSprite\n\
- adds r1, r0, 0\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r5\n\
- strh r4, [r0, 0x2E]\n\
- adds r1, r6, 0\n\
- bl StartSpriteAnimIfDifferent\n\
- adds r0, r4, 0\n\
- add sp, 0x14\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\
- .align 2, 0\n\
-_081457E8: .4byte gSaveBlock2\n\
-_081457EC: .4byte gMonFrontPicTable\n\
-_081457F0: .4byte gMonFrontPicCoords\n\
-_081457F4: .4byte gUnknown_0840B5A0\n\
-_081457F8: .4byte 0x0000ffff\n\
-_081457FC: .4byte gUnknown_02024E8C\n\
-_08145800: .4byte gSprites\n\
-_08145804: .4byte spritecb_81454E0\n\
-_08145808: .4byte gSpriteTemplate_840CAEC\n\
- .syntax divided\n");
-}
-#endif
void spritecb_814580C(struct Sprite *sprite)
{
@@ -2015,223 +1564,79 @@ void spritecb_814580C(struct Sprite *sprite)
sprite->pos1.y = gSprites[sprite->data0].pos1.y;
}
-__attribute__((naked))
-void sub_81458DC(void)
-{
- 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, 0x4\n\
- ldr r7, _0814597C @ =0x0201c000\n\
- ldr r0, _08145980 @ =0x00004023\n\
- bl VarGet\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- bl GetStarterPokemon\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- bl SpeciesToNationalPokedexNum\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r10, r0\n\
- movs r4, 0x1\n\
- movs r5, 0\n\
- ldr r0, _08145984 @ =0x00000181\n\
- mov r8, r0\n\
-_0814590E:\n\
- adds r0, r4, 0\n\
- movs r1, 0x1\n\
- bl sub_8090D90\n\
- lsls r0, 24\n\
- adds r6, r7, 0\n\
- adds r6, 0x90\n\
- cmp r0, 0\n\
- beq _0814592C\n\
- lsls r0, r5, 1\n\
- adds r0, r6, r0\n\
- strh r4, [r0]\n\
- adds r0, r5, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
-_0814592C:\n\
- adds r0, r4, 0x1\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- cmp r4, r8\n\
- bls _0814590E\n\
- adds r4, r5, 0\n\
- ldr r0, _08145984 @ =0x00000181\n\
- lsls r1, r4, 16\n\
- mov r9, r1\n\
- movs r2, 0x8E\n\
- adds r2, r7\n\
- mov r8, r2\n\
- adds r1, r7, 0\n\
- adds r1, 0x86\n\
- str r1, [sp]\n\
- cmp r4, r0\n\
- bhi _08145964\n\
- adds r1, r6, 0\n\
- movs r3, 0\n\
- adds r2, r0, 0\n\
-_08145954:\n\
- lsls r0, r4, 1\n\
- adds r0, r1, r0\n\
- strh r3, [r0]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- cmp r4, r2\n\
- bls _08145954\n\
-_08145964:\n\
- movs r2, 0xE5\n\
- lsls r2, 2\n\
- adds r0, r7, r2\n\
- strh r5, [r0]\n\
- mov r1, r9\n\
- lsrs r0, r1, 16\n\
- cmp r0, 0x43\n\
- bhi _08145988\n\
- mov r2, r8\n\
- strh r5, [r2]\n\
- b _0814598E\n\
- .align 2, 0\n\
-_0814597C: .4byte 0x0201c000\n\
-_08145980: .4byte 0x00004023\n\
-_08145984: .4byte 0x00000181\n\
-_08145988:\n\
- movs r0, 0x44\n\
- mov r1, r8\n\
- strh r0, [r1]\n\
-_0814598E:\n\
- movs r5, 0\n\
- movs r2, 0xE5\n\
- lsls r2, 2\n\
- adds r4, r7, r2\n\
- mov r9, r5\n\
- b _0814599E\n\
-_0814599A:\n\
- cmp r5, 0x43\n\
- bhi _081459EE\n\
-_0814599E:\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- ldrh r1, [r4]\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- lsrs r2, r0, 16\n\
- lsls r1, r5, 1\n\
- adds r1, r7, r1\n\
- lsls r0, r2, 1\n\
- adds r3, r6, r0\n\
- ldrh r0, [r3]\n\
- strh r0, [r1]\n\
- adds r0, r5, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- mov r0, r9\n\
- strh r0, [r3]\n\
- ldrh r0, [r4]\n\
- subs r0, 0x1\n\
- strh r0, [r4]\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r2, r0\n\
- beq _081459E8\n\
- ldrh r0, [r4]\n\
- lsls r0, 1\n\
- adds r0, r6, r0\n\
- ldrh r0, [r0]\n\
- strh r0, [r3]\n\
- ldrh r0, [r4]\n\
- lsls r0, 1\n\
- adds r0, r6, r0\n\
- mov r1, r9\n\
- strh r1, [r0]\n\
-_081459E8:\n\
- ldrh r0, [r4]\n\
- cmp r0, 0\n\
- bne _0814599A\n\
-_081459EE:\n\
- mov r2, r8\n\
- ldrh r0, [r2]\n\
- cmp r0, 0x43\n\
- bhi _08145A26\n\
- adds r5, r0, 0\n\
- movs r2, 0\n\
- cmp r5, 0x43\n\
- bhi _08145A5C\n\
- mov r3, r8\n\
-_08145A00:\n\
- lsls r1, r5, 1\n\
- adds r1, r7, r1\n\
- lsls r0, r2, 1\n\
- adds r0, r7, r0\n\
- ldrh r0, [r0]\n\
- strh r0, [r1]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 16\n\
- lsrs r2, r0, 16\n\
- ldrh r0, [r3]\n\
- cmp r2, r0\n\
- bne _08145A1A\n\
- movs r2, 0\n\
-_08145A1A:\n\
- adds r0, r5, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- cmp r5, 0x43\n\
- bls _08145A00\n\
- b _08145A5C\n\
-_08145A26:\n\
- movs r4, 0\n\
- ldrh r0, [r7]\n\
- cmp r0, r10\n\
- beq _08145A42\n\
-_08145A2E:\n\
- adds r0, r4, 0x1\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- lsls r0, r4, 1\n\
- adds r0, r7, r0\n\
- ldrh r0, [r0]\n\
- cmp r0, r10\n\
- beq _08145A42\n\
- cmp r4, 0x43\n\
- bls _08145A2E\n\
-_08145A42:\n\
- mov r1, r8\n\
- ldrh r0, [r1]\n\
- subs r0, 0x1\n\
- cmp r4, r0\n\
- bge _08145A5C\n\
- lsls r0, r4, 1\n\
- adds r0, r7, r0\n\
- ldr r2, [sp]\n\
- ldrh r1, [r2]\n\
- strh r1, [r0]\n\
- mov r0, r10\n\
- strh r0, [r2]\n\
- b _08145A62\n\
-_08145A5C:\n\
- mov r2, r10\n\
- ldr r1, [sp]\n\
- strh r2, [r1]\n\
-_08145A62:\n\
- movs r0, 0x44\n\
- mov r1, r8\n\
- strh r0, [r1]\n\
- add sp, 0x4\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided\n");
+static void sub_81458DC(void) {
+ struct Unk201C000 *unk201C000 = &ewram1c000;
+ u16 starter = SpeciesToNationalPokedexNum(GetStarterPokemon(VarGet(VAR_FIRST_POKE)));
+ u16 seenTypesCount;
+ u16 page;
+ u16 dexNum;
+ u16 j;
+
+ for (dexNum = 1, seenTypesCount = 0; dexNum < 386; dexNum++)
+ {
+ if (sub_8090D90(dexNum, 1))
+ {
+ unk201C000->unk90[seenTypesCount] = dexNum;
+ seenTypesCount++;
+ }
+ }
+
+ for (dexNum = seenTypesCount; dexNum < 386; dexNum++)
+ {
+ unk201C000->unk90[dexNum] = 0;
+ }
+
+ unk201C000->unk394 = seenTypesCount;
+ if (unk201C000->unk394 < POKEMON_TILE_COUNT)
+ {
+ unk201C000->unk8E = seenTypesCount;
+ }
+ else
+ {
+ unk201C000->unk8E = POKEMON_TILE_COUNT;
+ }
+
+ j = 0;
+ do
+ {
+ page = Random() % unk201C000->unk394;
+ unk201C000->unk0[j] = unk201C000->unk90[page];
+
+ j++;
+ unk201C000->unk90[page] = 0;
+ unk201C000->unk394--;
+ if (page != unk201C000->unk394)
+ {
+ unk201C000->unk90[page] = unk201C000->unk90[unk201C000->unk394];
+ unk201C000->unk90[unk201C000->unk394] = 0;
+ }
+ }
+ while (unk201C000->unk394 != 0 && j < POKEMON_TILE_COUNT);
+
+ if (unk201C000->unk8E < POKEMON_TILE_COUNT)
+ {
+ for (j = unk201C000->unk8E, page = 0; j < POKEMON_TILE_COUNT; j++)
+ {
+ unk201C000->unk0[j] = unk201C000->unk0[page];
+
+ page++;
+ if (page == unk201C000->unk8E)
+ page = 0;
+ }
+ unk201C000->unk0[POKEMON_TILE_COUNT - 1] = starter;
+ }
+ else
+ {
+
+ for (dexNum = 0; unk201C000->unk0[dexNum] != starter && dexNum < POKEMON_TILE_COUNT; dexNum++);
+
+ if (dexNum < unk201C000->unk8E - 1)
+ {
+ unk201C000->unk0[dexNum] = unk201C000->unk0[POKEMON_TILE_COUNT - 1];
+ unk201C000->unk0[POKEMON_TILE_COUNT - 1] = starter;
+ }
+ else
+ unk201C000->unk0[POKEMON_TILE_COUNT - 1] = starter;
+ }
+ unk201C000->unk8E = POKEMON_TILE_COUNT;
}
diff --git a/src/daycare.c b/src/daycare.c
index 1729efb2a..92be45cfa 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -1,8 +1,11 @@
#include "global.h"
#include "pokemon.h"
#include "string_util.h"
+#include "asm.h"
-u8 *pokemon_get_nick(struct Pokemon *mon, u8 *dest)
+extern u8 gLastFieldPokeMenuOpened;
+
+u8 *GetMonNick(struct Pokemon *mon, u8 *dest)
{
s8 nickname[POKEMON_NAME_LENGTH * 2];
@@ -10,7 +13,7 @@ u8 *pokemon_get_nick(struct Pokemon *mon, u8 *dest)
return StringCopy10(dest, nickname);
}
-u8 *pokemon_get_nick_(struct BoxPokemon *mon, u8 *dest)
+u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest)
{
s8 nickname[POKEMON_NAME_LENGTH * 2];
@@ -18,14 +21,368 @@ u8 *pokemon_get_nick_(struct BoxPokemon *mon, u8 *dest)
return StringCopy10(dest, nickname);
}
-u8 daycare_count_pokemon(struct BoxPokemon *daycare_data)
+u8 Daycare_CountPokemon(struct BoxPokemon *daycare_data)
{
u8 i, count;
count = 0;
- for (i = 0; i <= 1; i++)
- if (GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) != 0)
+ for(i = 0;i <= 1;i++)
+ if(GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) != 0)
count++;
return count;
}
+
+#ifndef ASDF
+__attribute__((naked))
+void sub_8041324(struct BoxPokemon * box_pokemon, void * void_pointer)
+{
+ 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\
+ mov r9, r0\n\
+ mov r10, r1\n\
+ movs r7, 0\n\
+ movs r5, 0\n\
+ mov r6, r10\n\
+ adds r6, 0x74\n\
+ movs r0, 0x1\n\
+ mov r8, r0\n\
+_0804133E:\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r0, 4\n\
+ mov r1, r9\n\
+ adds r4, r1, r0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xB\n\
+ bl GetBoxMonData\n\
+ cmp r0, 0\n\
+ beq _0804136E\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xC\n\
+ bl GetBoxMonData\n\
+ adds r1, r0, 0\n\
+ cmp r1, 0\n\
+ bne _0804136E\n\
+ lsls r0, r5, 1\n\
+ adds r0, r6, r0\n\
+ b _08041374\n\
+_0804136E:\n\
+ lsls r0, r5, 1\n\
+ adds r0, r6, r0\n\
+ mov r1, r8\n\
+_08041374:\n\
+ strh r1, [r0]\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ cmp r5, 0x1\n\
+ bls _0804133E\n\
+ mov r0, r10\n\
+ str r7, [r0, 0x70]\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+#endif
+
+s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data)
+{
+ u8 i;
+
+ for(i = 0;i <= 1;i++)
+ if(GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) == 0)
+ return i;
+
+ return -1;
+}
+
+/*void Daycare_SendPokemon(struct Pokemon * mon, struct BoxPokemon * daycare_data){ // unfinished
+ s8 empty_slot;
+
+ empty_slot = Daycare_FindEmptySpot(daycare_data);
+ if(MonHasMail(mon) != 0){ // if the mon holds a mail?
+ u8 empty_slot_times_56 = empty_slot * 56;
+ u8 * something2 = ((u8 *) (daycare_data + 2)) + empty_slot_times_56 + 36;
+ StringCopy(something2, gSaveBlock2.playerName);
+ PadNameString(something2, 0xFC);
+ something2 += 8;
+ GetMonNick(mon, something2);
+ u8 pokerus = GetMonData(mon, MON_DATA_64);
+ something1 += (u8 * daycare_data)
+}*/
+
+__attribute__((naked))
+void Daycare_SendPokemon()
+{
+ // strange stack usage - happens because THUMB ARM only allows R0-R7 to be pushed/popped:
+ // all registers in reglist must be Lo registers, except that PUSH can include the LR, and POP can include the PC
+ // the ldm/stm section probably copies some struct, but I'm not sure how the code would look
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r9\n\
+ mov r6, r8\n\
+ push {r6,r7}\n\
+ adds r7, r0, 0\n\
+ mov r8, r1\n\
+ mov r0, r8\n\
+ bl Daycare_FindEmptySpot\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ mov r9, r4\n\
+ adds r0, r7, 0\n\
+ bl MonHasMail\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _0804144A\n\
+ lsls r0, r4, 24\n\
+ asrs r0, 24\n\
+ lsls r4, r0, 3\n\
+ subs r4, r0\n\
+ lsls r4, 3\n\
+ adds r5, r4, 0\n\
+ adds r5, 0xA0\n\
+ add r5, r8\n\
+ adds r6, r5, 0\n\
+ adds r6, 0x24\n\
+ ldr r1, _08041490 @ =gSaveBlock2\n\
+ adds r0, r6, 0\n\
+ bl StringCopy\n\
+ adds r0, r6, 0\n\
+ movs r1, 0xFC\n\
+ bl PadNameString\n\
+ adds r6, 0x8\n\
+ adds r0, r7, 0\n\
+ adds r1, r6, 0\n\
+ bl GetMonNick\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x40\n\
+ bl GetMonData\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ add r4, r8\n\
+ ldr r2, _08041494 @ =gSaveBlock1\n\
+ lsls r1, r0, 3\n\
+ adds r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r2\n\
+ adds r4, 0xA0\n\
+ ldr r0, _08041498 @ =0x00002b4c\n\
+ adds r1, r0\n\
+ ldm r1!, {r0,r2,r3}\n\
+ stm r4!, {r0,r2,r3}\n\
+ ldm r1!, {r0,r2,r3}\n\
+ stm r4!, {r0,r2,r3}\n\
+ ldm r1!, {r0,r2,r3}\n\
+ stm r4!, {r0,r2,r3}\n\
+ adds r0, r7, 0\n\
+ bl TakeMailFromMon\n\
+_0804144A:\n\
+ mov r2, r9\n\
+ lsls r4, r2, 24\n\
+ asrs r4, 24\n\
+ lsls r5, r4, 2\n\
+ adds r4, r5, r4\n\
+ lsls r4, 4\n\
+ add r4, r8\n\
+ adds r0, r4, 0\n\
+ adds r1, r7, 0\n\
+ movs r2, 0x50\n\
+ bl memcpy\n\
+ adds r0, r4, 0\n\
+ bl BoxMonRestorePP\n\
+ movs r0, 0x88\n\
+ lsls r0, 1\n\
+ add r0, r8\n\
+ adds r0, r5\n\
+ movs r1, 0\n\
+ str r1, [r0]\n\
+ adds r0, r7, 0\n\
+ bl ZeroMonData\n\
+ bl party_compaction\n\
+ bl CalculatePlayerPartyCount\n\
+ pop {r3,r4}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08041490: .4byte gSaveBlock2\n\
+_08041494: .4byte gSaveBlock1\n\
+_08041498: .4byte 0x00002b4c\n\
+ .syntax divided\n");
+}
+
+void Daycare_SendPokemon_Special()
+{
+ Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, gSaveBlock1.daycareData);
+}
+
+void sub_80417F4(u8 *);
+
+void sub_80414C0(struct BoxPokemon * daycare_data)
+{
+ u32 second_species;
+ if((GetBoxMonData(&daycare_data[1], MON_DATA_SPECIES) != 0) && ((second_species = GetBoxMonData(&daycare_data[0], MON_DATA_SPECIES)) == 0)){
+ daycare_data[0] = daycare_data[1];
+ ZeroBoxMonData(&daycare_data[1]);
+ memcpy(daycare_data + 2, (u8 *) (daycare_data + 1) + 0x88, 0x38);
+ *((u32 *)(daycare_data) + 68) = *((u32 *)(daycare_data) + 69);
+ *((u32 *)(daycare_data) + 69) = second_species;
+ sub_80417F4((u8 *) (daycare_data + 1) + 0x88);
+ }
+}
+
+u8 TryIncrementMonLevel(struct Pokemon *);
+extern u16 word_2024E82;
+
+void sub_804151C(struct Pokemon * mon)
+{
+ s32 i;
+ u8 r6;
+ u16 temp;
+
+ for(i = 0; i < 100; i++){
+ if(TryIncrementMonLevel(mon) == FALSE) goto end;
+
+ r6 = 1;
+ while((temp = sub_803B7C8(mon, r6)) != 0){
+ r6 = 0;
+ if(temp == 0xffff){
+ DeleteFirstMoveAndGiveMoveToMon(mon, word_2024E82);
+ }
+ }
+ }
+
+ end:
+
+ CalculateMonStats(mon);
+}
+
+__attribute__((naked))
+u16 sub_8041570(struct BoxPokemon * daycare_data, u8 a2){
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r9\n\
+ mov r6, r8\n\
+ push {r6,r7}\n\
+ sub sp, 0x68\n\
+ adds r5, r0, 0\n\
+ lsls r1, 24\n\
+ lsrs r4, r1, 24\n\
+ lsls r7, r4, 2\n\
+ adds r0, r7, r4\n\
+ lsls r0, 4\n\
+ adds r6, r5, r0\n\
+ ldr r1, _08041640 @ =gStringVar1\n\
+ adds r0, r6, 0\n\
+ bl GetBoxMonNick\n\
+ adds r0, r6, 0\n\
+ movs r1, 0xB\n\
+ bl GetBoxMonData\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r9, r0\n\
+ adds r0, r6, 0\n\
+ mov r1, sp\n\
+ bl sub_803B4B4\n\
+ mov r0, sp\n\
+ movs r1, 0x38\n\
+ bl GetMonData\n\
+ cmp r0, 0x64\n\
+ beq _080415D8\n\
+ mov r0, sp\n\
+ movs r1, 0x19\n\
+ bl GetMonData\n\
+ movs r2, 0x88\n\
+ lsls r2, 1\n\
+ adds r1, r5, r2\n\
+ adds r1, r7\n\
+ ldr r1, [r1]\n\
+ adds r0, r1\n\
+ str r0, [sp, 0x64]\n\
+ add r2, sp, 0x64\n\
+ mov r0, sp\n\
+ movs r1, 0x19\n\
+ bl SetMonData\n\
+ mov r0, sp\n\
+ bl sub_804151C\n\
+_080415D8:\n\
+ ldr r0, _08041644 @ =gPlayerParty\n\
+ movs r1, 0xFA\n\
+ lsls r1, 1\n\
+ adds r1, r0\n\
+ mov r8, r1\n\
+ mov r0, r8\n\
+ mov r1, sp\n\
+ movs r2, 0x64\n\
+ bl memcpy\n\
+ lsls r0, r4, 3\n\
+ subs r0, r4\n\
+ lsls r1, r0, 3\n\
+ adds r0, r5, r1\n\
+ adds r0, 0xC0\n\
+ ldrh r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08041610\n\
+ adds r4, r1, 0\n\
+ adds r4, 0xA0\n\
+ adds r4, r5, r4\n\
+ mov r0, r8\n\
+ adds r1, r4, 0\n\
+ bl GiveMailToMon2\n\
+ adds r0, r4, 0\n\
+ bl sub_80417F4\n\
+_08041610:\n\
+ bl party_compaction\n\
+ adds r0, r6, 0\n\
+ bl ZeroBoxMonData\n\
+ movs r2, 0x88\n\
+ lsls r2, 1\n\
+ adds r0, r5, r2\n\
+ adds r0, r7\n\
+ movs r1, 0\n\
+ str r1, [r0]\n\
+ adds r0, r5, 0\n\
+ bl sub_80414C0\n\
+ bl CalculatePlayerPartyCount\n\
+ mov r0, r9\n\
+ add sp, 0x68\n\
+ pop {r3,r4}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_08041640: .4byte gStringVar1\n\
+_08041644: .4byte gPlayerParty\n\
+ .syntax divided");
+}
+
+extern u8 gSpecialVar_0x8004;
+
+u16 sub_8041648()
+{
+ return sub_8041570(gSaveBlock1.daycareData, gSpecialVar_0x8004);
+}
+
+u8 Daycare_GetLevelAfterSteps(struct BoxPokemon * mon, u32 steps){
+ struct BoxPokemon temp = *mon;
+ u32 new_exp = GetBoxMonData(mon, MON_DATA_EXP) + steps;
+ SetBoxMonData(&temp, MON_DATA_EXP, (u8 *) &new_exp);
+ return GetLevelFromBoxMonExp(&temp);
+}
diff --git a/src/easy_chat.c b/src/easy_chat.c
index ee1e37b9b..86719a2ae 100644
--- a/src/easy_chat.c
+++ b/src/easy_chat.c
@@ -5,27 +5,252 @@
#include "field_message_box.h"
#include "pokedex.h"
#include "rng.h"
+#include "string_util.h"
+#include "strings.h"
#include "text.h"
+u8 sub_80EB37C(u16);
u8 sub_80EB8C0(void);
u8 sub_80EB868(u8);
u16 sub_80EAE88(u8);
void sub_80EB890(u8);
u16 sub_80EB784(u16 group);
u8 sub_80EAD7C(u8 group);
-u8 sub_80EB680(u16 *, u16, u16, u16);
+static bool8 sub_80EB680(u16 *, u16, u16, u16);
static u16 sub_80EB9D8(void);
static u16 sub_80EB960(void);
u16 sub_80EB72C(u16);
+extern const u8 gSpeciesNames[][11];
+extern u8 gMoveNames[][13];
extern void *gEasyChatGroupWords[];
extern const u8 gEasyChatGroupSizes[];
extern u16 gSpecialVar_0x8004;
+extern const u8 gOtherText_ThreeQuestions[];
+
+#ifdef NONMATCHING
+u8 *sub_80EB3FC(u8 *dst, u16 word) {
+ int group, wordIndex;
+ u8 *src;
+ u16 i;
+
+
+ if (sub_80EB37C(word))
+ {
+ return StringCopy(dst, gOtherText_ThreeQuestions);
+ }
+
+ if (word != 0xFFFF)
+ {
+ group = word >> 9;
+ wordIndex = word & 0x1FF;
+ switch (group)
+ {
+ case EC_GROUP_POKEMON: // 0
+ case EC_GROUP_POKEMON_2: // 21
+ dst = StringCopy(dst, gSpeciesNames[wordIndex]);
+ break;
+
+ case EC_GROUP_MOVE_1: // 18
+ case EC_GROUP_MOVE_2: // 19
+ dst = StringCopy(dst, gMoveNames[wordIndex]);
+ break;
+
+ default:
+ src = gEasyChatGroupWords[group];
+
+ i = wordIndex - 1;
+ while (i != 0xFFFF)
+ {
+ while (*src++ != EOS)
+ {
+ }
+ i--;
+ }
+ dst = StringCopy(dst, src);
+ break;
+ }
+ }
+
+ dst[0] = EOS;
+ return dst;
+}
+#endif
+
+u8 *ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16 arg2, u16 arg3) {
+ u16 i;
+ u16 n;
+
+ const u16 i1 = arg2 - 1;
+
+ for (i = 0; i < arg3; i++)
+ {
+ u16 word;
+
+ for (n = 0; n < i1; n++)
+ {
+ dst = sub_80EB3FC(dst, words[0]);
+
+ if (words[0] != 0xFFFF)
+ {
+ dst[0] = CHAR_SPACE;
+ dst++;
+ }
+
+ words++;
+ }
+
+ word = words[0];
+ words++;
+ dst = sub_80EB3FC(dst, word);
+
+ dst[0] = 0xFE;
+ dst++;
+ }
+
+ dst--;
+ dst[0] = EOS;
+
+ return dst;
+}
+
+u8 *sub_80EB544(u8 *dst, u16 *words, u16 arg2, u16 arg3) {
+ u16 i;
+ u16 n;
+
+ const u16 i1 = arg2 - 1;
+
+ for (i = 0; i < arg3; i++)
+ {
+ u16 word;
+
+ for (n = 0; n < i1; n++)
+ {
+ dst = sub_80EB3FC(dst, words[0]);
+
+ if (words[0] != 0xFFFF)
+ {
+ dst[0] = CHAR_SPACE;
+ dst++;
+ }
+
+ words++;
+ }
+
+ word = words[0];
+ words++;
+ dst = sub_80EB3FC(dst, word);
+
+ // Only difference with ConvertEasyChatWordsToString
+ dst[0] = (i == 0) ? 0xFE : 0xFA;
+ dst++;
+ }
+
+ dst--;
+ dst[0] = EOS;
+
+ return dst;
+}
+
+
+u16 unref_sub_80EB5E0(u16 arg0) {
+ u8 *chars;
+ u16 i;
+ u16 strlen;
+ int group, word;
+
+
+ if (arg0 == 0xFFFF)
+ {
+ return 0;
+ }
+
+ group = arg0 >> 9;
+ word = arg0 & 0x1FF;
+ switch (group)
+ {
+ case EC_GROUP_POKEMON: // 0
+ case EC_GROUP_POKEMON_2: // 21
+ chars = (u8 *) gSpeciesNames[word];
+ break;
+
+ case EC_GROUP_MOVE_1: // 18
+ case EC_GROUP_MOVE_2: // 19
+ chars = gMoveNames[word];
+ break;
+
+ default:
+ chars = gEasyChatGroupWords[group];
+
+ i = word - 1;
+ while (i != 0xFFFF)
+ {
+ while (*chars++ != EOS)
+ {
+ }
+ i--;
+ }
+ break;
+ }
+
+ strlen = 0;
+ while (*chars != EOS)
+ {
+ chars++;
+ strlen += 1;
+ }
+
+ return strlen;
+}
+
+static bool8 sub_80EB680(u16 *arg0, u16 arg1, u16 arg2, u16 arg3) {
+ return FALSE;
+}
+
+void unref_sub_80EB684(u8 arg0, u16 arg1) {
+ u16 *ptr;
+ u16 c;
+
+ // FIXME: find actual tv shows used
+ switch (arg0)
+ {
+ case 5:
+ c = 6;
+ ptr = (u16*)((void *)&gSaveBlock1.tvShows.shows[arg1] + 0x04);
+ break;
+ case 7:
+ c = 2;
+ ptr = (u16*)((void *)&gSaveBlock1.tvShows.shows[arg1] + 0x1C);
+ break;
+ case 8:
+ c = 1;
+ ptr = (u16*)((void *)&gSaveBlock1.tvShows.shows[arg1] + 0x02);
+ break;
+
+ default:
+ return;
+ }
+
+ c -= 1;
+ while (c != 0xFFFF)
+ {
+ *ptr = -1;
+ ptr++;
+ c -= 1;
+ }
+}
+
void sub_80EB6FC(u16 *arg0, u16 arg1) {
- for (arg1--; arg1!=0xffff; arg1--)
- *(arg0++) = 0xffff;
+ u16 i;
+
+ for (i = arg1 - 1; i != 0xFFFF; i--)
+ {
+ *arg0 = 0xFFFF;
+ arg0++;
+ }
+
}
u16 sub_80EB72C(u16 group) {
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index 475620c28..755de7611 100644
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -1,10 +1,12 @@
#include "global.h"
#include "field_map_obj.h"
+#include "fieldmap.h"
#include "asm.h"
#include "berry.h"
#include "event_data.h"
#include "field_player_avatar.h"
#include "field_effect.h"
+#include "field_ground_effect.h"
#include "palette.h"
#include "rom4.h"
#include "rng.h"
@@ -12,6 +14,7 @@
extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36];
+
extern void strange_npc_table_clear(void);
extern void ClearPlayerAvatarInfo(void);
extern void npc_load_two_palettes__no_record(u16, u8);
@@ -19,14 +22,14 @@ extern void npc_load_two_palettes__and_record(u16, u8);
extern void sub_8060388(s16, s16, s16 *, s16 *);
extern void sub_80634D0();
extern void pal_patch_for_npc(u16, u16);
-extern void sub_80603CC();
+extern void sub_80603CC(s16, s16, s16 *, s16 *);
extern void CameraObjectReset1(void);
void sub_805AAB0(void);
u8 GetFieldObjectIdByLocalId(u8);
u8 GetFieldObjectIdByLocalIdAndMapInternal(u8, u8, u8);
u8 GetAvailableFieldObjectSlot(u16, u8, u8, u8 *);
-void FieldObjectHandleDynamicGraphicsId();
+void FieldObjectHandleDynamicGraphicsId(struct MapObject *);
void RemoveFieldObjectInternal(struct MapObject *);
u16 GetFieldObjectFlagIdByFieldObjectId(u8);
void MakeObjectTemplateFromFieldObjectTemplate(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *sprTemplate, struct SubspriteTable **subspriteTables);
@@ -1505,33 +1508,8 @@ u16 npc_paltag_by_palslot(u8 a)
return 0x11FF;
}
-u8 sub_805C8A8(struct MapObject *mapObject, struct Sprite *sprite);
-
-void sub_805C884(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805C8A8);
-}
-
-u8 sub_805C8A8(struct MapObject *mapObject, struct Sprite *sprite)
-{
- return 0;
-}
-
-u8 sub_805C8D0(struct MapObject *, struct Sprite *);
-
-void sub_805C8AC(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805C8D0);
-}
-
-extern u8 (*const gUnknown_08375224[])();
-
-u8 sub_805C8D0(struct MapObject *mapObject, struct Sprite *sprite)
-{
- return gUnknown_08375224[sprite->data1](mapObject, sprite);
-}
-
-void npc_reset(struct MapObject *mapObject, struct Sprite *sprite);
+fieldmap_object_null_cb(sub_805C884, sub_805C8A8);
+fieldmap_object_cb(sub_805C8AC, sub_805C8D0, gUnknown_08375224);
u8 sub_805C8F0(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -1849,17 +1827,7 @@ u8 sub_805CD60(struct MapObject *mapObject, u8 a1)
return gUnknown_08375244[a1](x, y, x2, y2);
}
-u8 sub_805CE0C(struct MapObject *mapObject, struct Sprite *sprite);
-
-void sub_805CDE8(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805CE0C);
-}
-
-u8 sub_805CE0C(struct MapObject *mapObject, struct Sprite *sprite)
-{
- return gUnknown_08375270[sprite->data1](mapObject, sprite);
-}
+fieldmap_object_cb(sub_805CDE8, sub_805CE0c, gUnknown_08375270);
u8 sub_805CE2C(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -1911,17 +1879,7 @@ u8 sub_805CEE0(struct MapObject *mapObject, struct Sprite *sprite)
return 1;
}
-u8 sub_805CF4C(struct MapObject *mapObject, struct Sprite *sprite);
-
-void sub_805CF28(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805CF4C);
-}
-
-u8 sub_805CF4C(struct MapObject *mapObject, struct Sprite *sprite)
-{
- return gUnknown_08375284[sprite->data1](mapObject, sprite);
-}
+fieldmap_object_cb(sub_805CF28, sub_805CF4C, gUnknown_08375284);
u8 sub_805CF6C(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -1991,17 +1949,7 @@ u8 sub_805D084(struct MapObject *mapObject, struct Sprite *sprite)
return 0;
}
-u8 sub_805D0D0(struct MapObject *mapObject, struct Sprite *sprite);
-
-void sub_805D0AC(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805D0D0);
-}
-
-u8 sub_805D0D0(struct MapObject *mapObject, struct Sprite *sprite)
-{
- return gUnknown_083752A4[sprite->data1](mapObject, sprite);
-}
+fieldmap_object_cb(sub_805D0AC, sub_805D0D0, gUnknown_083752A4);
u8 sub_805D0F0(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -2071,17 +2019,7 @@ u8 sub_805D208(struct MapObject *mapObject, struct Sprite *sprite)
return 0;
}
-u8 sub_805D254(struct MapObject *mapObject, struct Sprite *sprite);
-
-void sub_805D230(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805D254);
-}
-
-u8 sub_805D254(struct MapObject *mapObject, struct Sprite *sprite)
-{
- return gUnknown_083752C4[sprite->data1](mapObject, sprite);
-}
+fieldmap_object_cb(sub_805D230, sub_805D254, gUnknown_083752C4);
u8 sub_805D274(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -2108,6 +2046,7 @@ u8 sub_805D2C0(struct MapObject *mapObject, struct Sprite *sprite)
}
u8 sub_805D314(struct MapObject *mapObject, struct Sprite *sprite);
+extern u8 (*const gUnknown_083752D0[])(struct MapObject *mapObject, struct Sprite *sprite);
void FieldObjectCB_BerryTree(struct Sprite *sprite)
{
@@ -2215,17 +2154,7 @@ u8 sub_805D4A8(struct MapObject *mapObject, struct Sprite *sprite)
return 0;
}
-u8 sub_805D518(struct MapObject *mapObject, struct Sprite *sprite);
-
-void sub_805D4F4(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805D518);
-}
-
-u8 sub_805D518(struct MapObject *mapObject, struct Sprite *sprite)
-{
- return gUnknown_083752E4[sprite->data1](mapObject, sprite);
-}
+fieldmap_object_cb(sub_805D4F4, sub_805D518, gUnknown_083752E4);
u8 sub_805D538(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -2277,18 +2206,7 @@ u8 sub_805D5EC(struct MapObject *mapObject, struct Sprite *sprite)
return 1;
}
-
-u8 sub_805D658(struct MapObject *mapObject, struct Sprite *sprite);
-
-void sub_805D634(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805D658);
-}
-
-u8 sub_805D658(struct MapObject *mapObject, struct Sprite *sprite)
-{
- return gUnknown_083752F8[sprite->data1](mapObject, sprite);
-}
+fieldmap_object_cb(sub_805D634, sub_805D658, gUnknown_083752F8);
u8 sub_805D678(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -2340,18 +2258,7 @@ u8 sub_805D72C(struct MapObject *mapObject, struct Sprite *sprite)
return 1;
}
-
-u8 sub_805D798(struct MapObject *mapObject, struct Sprite *sprite);
-
-void sub_805D774(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805D798);
-}
-
-u8 sub_805D798(struct MapObject *mapObject, struct Sprite *sprite)
-{
- return gUnknown_0837530C[sprite->data1](mapObject, sprite);
-}
+fieldmap_object_cb(sub_805D774, sub_805D798, gUnknown_0837530C);
u8 sub_805D7B8(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -2403,18 +2310,7 @@ u8 sub_805D86C(struct MapObject *mapObject, struct Sprite *sprite)
return 1;
}
-
-u8 sub_805D8D8(struct MapObject *mapObject, struct Sprite *sprite);
-
-void sub_805D8B4(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805D8D8);
-}
-
-u8 sub_805D8D8(struct MapObject *mapObject, struct Sprite *sprite)
-{
- return gUnknown_08375324[sprite->data1](mapObject, sprite);
-}
+fieldmap_object_cb(sub_805D8B4, sub_805D8D8, gUnknown_08375324);
u8 sub_805D8F8(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -2466,18 +2362,7 @@ u8 sub_805D9AC(struct MapObject *mapObject, struct Sprite *sprite)
return 1;
}
-
-u8 sub_805DA18(struct MapObject *mapObject, struct Sprite *sprite);
-
-void sub_805D9F4(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805DA18);
-}
-
-u8 sub_805DA18(struct MapObject *mapObject, struct Sprite *sprite)
-{
- return gUnknown_0837533C[sprite->data1](mapObject, sprite);
-}
+fieldmap_object_cb(sub_805D9F4, sub_805DA18, gUnknown_0837533C);
u8 sub_805DA38(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -2529,18 +2414,7 @@ u8 sub_805DAEC(struct MapObject *mapObject, struct Sprite *sprite)
return 1;
}
-
-u8 sub_805DB58(struct MapObject *mapObject, struct Sprite *sprite);
-
-void sub_805DB34(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805DB58);
-}
-
-u8 sub_805DB58(struct MapObject *mapObject, struct Sprite *sprite)
-{
- return gUnknown_08375354[sprite->data1](mapObject, sprite);
-}
+fieldmap_object_cb(sub_805DB34, sub_805DB58, gUnknown_08375354);
u8 sub_805DB78(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -2592,18 +2466,7 @@ u8 sub_805DC2C(struct MapObject *mapObject, struct Sprite *sprite)
return 1;
}
-
-u8 sub_805DC98(struct MapObject *mapObject, struct Sprite *sprite);
-
-void sub_805DC74(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805DC98);
-}
-
-u8 sub_805DC98(struct MapObject *mapObject, struct Sprite *sprite)
-{
- return gUnknown_0837536C[sprite->data1](mapObject, sprite);
-}
+fieldmap_object_cb(sub_805DC74, sub_805DC98, gUnknown_0837536C);
u8 sub_805DCB8(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -2655,17 +2518,7 @@ u8 sub_805DD6C(struct MapObject *mapObject, struct Sprite *sprite)
return 1;
}
-u8 sub_805DDD8(struct MapObject *mapObject, struct Sprite *sprite);
-
-void sub_805DDB4(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805DDD8);
-}
-
-u8 sub_805DDD8(struct MapObject *mapObject, struct Sprite *sprite)
-{
- return gUnknown_08375384[sprite->data1](mapObject, sprite);
-}
+fieldmap_object_cb(sub_805DDB4, sub_805DDD8, gUnknown_08375384);
u8 sub_805DDF8(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -2717,17 +2570,7 @@ u8 sub_805DEAC(struct MapObject *mapObject, struct Sprite *sprite)
return 1;
}
-u8 sub_805DF18(struct MapObject *mapObject, struct Sprite *sprite);
-
-void sub_805DEF4(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805DF18);
-}
-
-u8 sub_805DF18(struct MapObject *mapObject, struct Sprite *sprite)
-{
- return gUnknown_0837539C[sprite->data1](mapObject, sprite);
-}
+fieldmap_object_cb(sub_805DEF4, sub_805DF18, gUnknown_0837539C);
u8 sub_805DF38(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -2779,18 +2622,7 @@ u8 sub_805DFEC(struct MapObject *mapObject, struct Sprite *sprite)
return 1;
}
-
-u8 sub_805E058(struct MapObject *mapObject, struct Sprite *sprite);
-
-void sub_805E034(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805E058);
-}
-
-u8 sub_805E058(struct MapObject *mapObject, struct Sprite *sprite)
-{
- return gUnknown_083753B4[sprite->data1](mapObject, sprite);
-}
+fieldmap_object_cb(sub_805E034, sub_805E058, gUnknown_083753B4);
u8 sub_805E078(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -2842,20 +2674,53 @@ u8 sub_805E12C(struct MapObject *mapObject, struct Sprite *sprite)
return 1;
}
+fieldmap_object_cb(sub_805E174, sub_805E198, gUnknown_083753CC);
+
+u8 sub_805E1B8(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ npc_reset(mapObject, sprite);
+ FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
+ sprite->data1 = 1;
+ return 1;
+}
-u8 sub_805E198(struct MapObject *mapObject, struct Sprite *sprite);
+u8 sub_805E1E4(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (FieldObjectExecRegularAnim(mapObject, sprite))
+ {
+ sub_8064820(sprite, 0x30);
+ sprite->data1 = 2;
+ }
+ return 0;
+}
-void sub_805E174(struct Sprite *sprite)
+u8 sub_805E208(struct MapObject *mapObject, struct Sprite *sprite)
{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_805E198);
+ if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
+ {
+ sprite->data1 = 3;
+ }
+ return 0;
}
-u8 sub_805E198(struct MapObject *mapObject, struct Sprite *sprite)
+u8 sub_805E234(struct MapObject *mapObject, struct Sprite *sprite)
{
- return gUnknown_083753CC[sprite->data1](mapObject, sprite);
+ u8 direction;
+ u8 directions[5];
+ memcpy(directions, gUnknown_083753DC, 5);
+ direction = sub_805CD60(mapObject, 0);
+ if (direction == 0)
+ {
+ direction = directions[mapObject->mapobj_unk_18];
+ }
+ FieldObjectSetDirection(mapObject, direction);
+ sprite->data1 = 0;
+ return 1;
}
-u8 sub_805E1B8(struct MapObject *mapObject, struct Sprite *sprite)
+fieldmap_object_cb(sub_805E278, sub_803E29C, gUnknown_083753E4);
+
+u8 sub_805E2BC(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
@@ -2863,7 +2728,7 @@ u8 sub_805E1B8(struct MapObject *mapObject, struct Sprite *sprite)
return 1;
}
-u8 sub_805E1E4(struct MapObject *mapObject, struct Sprite *sprite)
+u8 sub_805E2E8(struct MapObject *mapObject, struct Sprite *sprite)
{
if (FieldObjectExecRegularAnim(mapObject, sprite))
{
@@ -2873,7 +2738,7 @@ u8 sub_805E1E4(struct MapObject *mapObject, struct Sprite *sprite)
return 0;
}
-u8 sub_805E208(struct MapObject *mapObject, struct Sprite *sprite)
+u8 sub_805E30C(struct MapObject *mapObject, struct Sprite *sprite)
{
if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject))
{
@@ -2882,11 +2747,11 @@ u8 sub_805E208(struct MapObject *mapObject, struct Sprite *sprite)
return 0;
}
-u8 sub_805E234(struct MapObject *mapObject, struct Sprite *sprite)
+u8 sub_805E338(struct MapObject *mapObject, struct Sprite *sprite)
{
u8 direction;
u8 directions[5];
- memcpy(directions, gUnknown_083753DC, 5);
+ memcpy(directions, gUnknown_083753F4, 5);
direction = sub_805CD60(mapObject, 0);
if (direction == 0)
{
@@ -2897,7 +2762,7 @@ u8 sub_805E234(struct MapObject *mapObject, struct Sprite *sprite)
return 1;
}
-void sub_805E278(struct Sprite *sprite);
+
void sub_805E37C(struct Sprite *sprite);
void sub_805E5DC(struct Sprite *sprite);
void sub_805E668(struct Sprite *sprite);
@@ -3034,3 +2899,151 @@ u8 get_run_image_anim_num(u8 direction)
{
return gUnknown_08375672[direction];
}
+
+void sub_805FE28(struct MapObject *mapObject, struct Sprite *sprite, u8 animNum)
+{
+ if (!mapObject->mapobj_bit_12)
+ {
+ sprite->animNum = animNum;
+ if (sprite->animCmdIndex == 1)
+ {
+ sprite->animCmdIndex = 2;
+ } else if (sprite->animCmdIndex == 3)
+ {
+ sprite->animCmdIndex = 0;
+ }
+ SeekSpriteAnim(sprite, sprite->animCmdIndex);
+ }
+}
+
+void sub_805FE64(struct MapObject *mapObject, struct Sprite *sprite, u8 animNum)
+{
+ u8 animCmdIndex;
+ if (!mapObject->mapobj_bit_12)
+ {
+ sprite->animNum = animNum;
+ animCmdIndex = 3;
+ if (sprite->animCmdIndex < 2)
+ {
+ animCmdIndex = 1;
+ }
+ SeekSpriteAnim(sprite, animCmdIndex);
+ }
+}
+
+u8 sub_805FE90(s16 a0, s16 a1, s16 a2, s16 a3)
+{
+ if (a0 > a2)
+ {
+ return DIR_WEST;
+ } else if (a0 < a2)
+ {
+ return DIR_EAST;
+ } else if (a1 > a3)
+ {
+ return DIR_NORTH;
+ } else
+ {
+ return DIR_SOUTH;
+ }
+}
+
+void npc_set_running_behaviour_etc(struct MapObject *mapObject, u8 animPattern)
+{
+ mapObject->animPattern = animPattern;
+ mapObject->mapobj_unk_21 = 0;
+ mapObject->animId = 0;
+ gSprites[mapObject->spriteId].callback = gUnknown_0836DA88[animPattern];
+ gSprites[mapObject->spriteId].data1 = 0;
+}
+
+u8 npc_running_behaviour_by_direction(u8 direction)
+{
+ return gUnknown_0837567B[direction];
+}
+
+u8 sub_805FF20(struct MapObject *mapObject, u8 direction)
+{
+ s16 x;
+ s16 y;
+ x = mapObject->coords2.x;
+ y = mapObject->coords2.y;
+ MoveCoords(direction, &x, &y);
+ return npc_block_way(mapObject, x, y, direction);
+}
+
+bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x, s16 y);
+bool8 CheckForCollisionBetweenFieldObjects(struct MapObject *mapObject, s16 x, s16 y);
+bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction);
+
+u8 npc_block_way(struct MapObject *mapObject, s16 x, s16 y, u8 direction)
+{
+ if (IsCoordOutsideFieldObjectMovementRect((struct MapObject2 *)mapObject, x, y))
+ {
+ return 1;
+ }
+ if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction))
+ {
+ return 2;
+ } else if (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction))
+ {
+ return 2;
+ }
+ if (IsZCoordMismatchAt(mapObject->mapobj_unk_0B_0, x, y))
+ {
+ return 3;
+ }
+ if (CheckForCollisionBetweenFieldObjects(mapObject, x, y))
+ {
+ return 4;
+ }
+ return 0;
+}
+
+u8 sub_8060024(struct MapObject *mapObject, s16 x, s16 y, u8 direction)
+{
+ u8 flags;
+ flags = 0;
+ if (IsCoordOutsideFieldObjectMovementRect((struct MapObject2 *)mapObject, x, y))
+ {
+ flags |= 1;
+ }
+ if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction) || (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction)))
+ {
+ flags |= 2;
+ }
+ if (IsZCoordMismatchAt(mapObject->mapobj_unk_0B_0, x, y))
+ {
+ flags |= 4;
+ }
+ if (CheckForCollisionBetweenFieldObjects(mapObject, x, y))
+ {
+ flags |= 8;
+ }
+ return flags;
+}
+
+bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x, s16 y)
+{
+ s16 minv;
+ s16 maxv;
+ if (mapObject->mapobj_unk_19 != 0)
+ {
+ minv = mapObject->coords1.x - (mapObject->mapobj_unk_19);
+ maxv = mapObject->coords1.x + (mapObject->mapobj_unk_19);
+ if (minv > x || maxv < x)
+ {
+ return 1;
+ }
+ }
+ if (mapObject->mapobj_unk_19b != 0)
+ {
+ minv = mapObject->coords1.y - (mapObject->mapobj_unk_19b);
+ maxv = mapObject->coords1.y + (mapObject->mapobj_unk_19b);
+ if (minv > y || maxv < y)
+ {
+ return 1;
+ }
+ }
+ return 0;
+}
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index 71ff40435..13c1cd277 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -27,7 +27,6 @@ extern u8 gOtherText_ItGotAway[];
extern u32 gUnknown_0202FF84[];
//Functions
-static u8 sub_80587D8(void);
static bool8 sub_8058854(struct MapObject *, u8);
static void npc_clear_strange_bits(struct MapObject *a);
static void MovePlayerAvatarUsingKeypadInput(u8 a, u16 b, u16 c);
@@ -246,16 +245,7 @@ static u8 (*const gUnknown_0830FC98[])(struct Task *, struct MapObject *) =
sub_805A1B8,
};
-
-void sub_80587B4(struct Sprite *sprite)
-{
- meta_step(&gMapObjects[sprite->data0], sprite, sub_80587D8);
-}
-
-static u8 sub_80587D8(void)
-{
- return 0;
-}
+fieldmap_object_null_cb(sub_80587B4, sub_80587D8);
void player_step(u8 direction, u16 newKeys, u16 heldKeys)
{
diff --git a/src/intro.c b/src/intro.c
index ea6edba3d..2a62892ba 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -19,7 +19,6 @@
#include "trig.h"
extern void *species_and_otid_get_pal(/*TODO: arg types*/);
-extern void sub_8143648(int, u8);
extern void sub_8143680(int, u8);
struct MonCoords
diff --git a/src/menu.c b/src/menu.c
index ba98ff057..3759d22c9 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -598,7 +598,7 @@ s8 ProcessMenuInputNoWrap_(void)
return ProcessMenuInputNoWrap();
}
-u8 MenuPrint_PixelCoords(u8 *text, u8 left, u16 top, u8 a4)
+u8 MenuPrint_PixelCoords(const u8 *text, u8 left, u16 top, u8 a4)
{
return sub_8004D04(gMenuWindowPtr, text, gMenuTextTileOffset, left, top, a4);
}
diff --git a/src/mori_debug_menu.c b/src/mori_debug_menu.c
index 9f586dcb9..fd0ad773b 100644
--- a/src/mori_debug_menu.c
+++ b/src/mori_debug_menu.c
@@ -65,7 +65,7 @@ u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr)
s8 MoriDebugMenu_Egg(void)
{
- if ( daycare_count_pokemon(gSaveBlock1.filler_2F9C) == 2 && daycare_relationship_score_from_savegame() )
+ if ( Daycare_CountPokemon(gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() )
sub_8041940();
CloseMenu();
@@ -74,7 +74,7 @@ s8 MoriDebugMenu_Egg(void)
s8 MoriDebugMenu_MaleEgg(void)
{
- if ( daycare_count_pokemon(gSaveBlock1.filler_2F9C) == 2 && daycare_relationship_score_from_savegame() )
+ if ( Daycare_CountPokemon(gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() )
sub_8041950();
CloseMenu();
diff --git a/src/party_menu.c b/src/party_menu.c
index d473eae6d..8eb181f46 100644
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -1,52 +1,223 @@
#include "global.h"
+#include "asm.h"
#include "menu.h"
#include "pokemon.h"
#include "songs.h"
#include "sound.h"
#include "string_util.h"
#include "task.h"
+#include "sprite.h"
+#include "palette.h"
+#include "event_data.h"
+#include "main.h"
+#include "item.h"
+#include "battle_interface.h"
+#include "species.h"
#define DATA_COUNT (6)
+struct Unk2001000
+{
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+};
+
+struct Unk201B000
+{
+ u8 filler0[0x260];
+ u8 unk260;
+ u8 unk261;
+ u8 filler262[2];
+ s16 unk264[DATA_COUNT * 2];
+ u8 filler27C[2];
+ s16 unk27E;
+ s16 unk280;
+ s16 unk282;
+};
+
struct Unk201C000
{
/*0x00*/ struct Pokemon *pokemon;
- /*0x04*/ u8 var04;
- /*0x05*/ u8 var05;
- /*0x06*/ u16 var06;
- u8 pad_08[10];
- /*0x12*/ u16 var12;
+ /*0x04*/ u8 unk4;
+ /*0x05*/ u8 unk5;
+ /*0x06*/ u16 unk6;
+ /*0x08*/ u16 unk8;
+ /*0x0A*/ u8 pad_0A[2];
+ /*0x0C*/ s32 unkC;
+ /*0x10*/ TaskFunc unk10;
+ /*0x14*/ TaskFunc unk14;
+};
+
+struct Unk201F000
+{
+ u8 filler0[0xE00];
+ u8 unkE00[3]; // not sure if this is an array or struct, or how big it is
};
-struct Unk201B260
+struct UnknownStruct5
{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
- u8 pad_02[2];
- /*0x04*/ s16 var04[DATA_COUNT * 2];
- u8 pad_1C[2];
- /*0x1E*/ u16 var1E;
- /*0x20*/ u16 var20;
+ u8 unk0;
+ u8 unk1;
+ u16 *unk4;
};
-extern struct Unk201B260 unk_201B260;
-extern struct Unk201C000 unk_201C000;
+extern u8 ewram[];
+#define ewram01000 (*(struct Unk2001000 *)(ewram + 0x01000))
+#define ewram1B000 (*(struct Unk201B000 *)(ewram + 0x1B000))
+#define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000))
+#define ewram1F000 (*(struct Unk201F000 *)(ewram + 0x1F000))
+
extern u8 gUnknown_0202E8F4;
extern u8 gUnknown_0202E8F6;
+extern u16 gUnknown_0202E8F8;
+extern u8 gUnknown_0202E8FA;
+extern u8 gLastFieldPokeMenuOpened;
+extern u8 gPlayerPartyCount;
+extern u16 gScriptItemId;
+extern s32 gBattleMoveDamage;
+
+//extern const u16 gUnknown_083769A8[][6];
+//extern const u8 gUnknown_083769A8[][12];
+extern void *const gUnknown_08376858[][6];
+extern const u8 gUnknown_083769A8[];
+extern const u8 gUnknown_08376D1C[DATA_COUNT];
+extern const u16 gUnknown_08376504[];
+extern void (*const gUnknown_08376B54[])(u8);
+extern const u8 *const gUnknown_08376D04[DATA_COUNT];
+extern const struct UnknownStruct5 gUnknown_08376BB4[][6];
+extern const u8 gOtherText_TallPlusAndRightArrow[];
+extern const u8 gOtherText_WontHaveAnyEffect[];
+extern const u8 gOtherText_ElevatedTo[];
+extern const u8 gOtherText_MailMustBeRemoved[];
+extern const u8 gOtherText_AlreadyHolding[];
+extern const u8 gOtherText_TakenAndReplaced[];
+extern const u8 gOtherText_BagFullCannotRemoveItem[];
+extern const u8 gOtherText_WasGivenToHold[];
+extern const u8 gOtherText_PokeHoldingItemCantMail[];
+extern const u8 gOtherText_MailTransferredMailbox[];
+extern const u8 gOtherText_NotHoldingAnything[];
+extern const u8 gOtherText_ReceivedTheThingFrom[];
+extern const u8 gOtherText_SendRemovedMailPrompt[];
+extern const u8 gOtherText_MailTaken[];
+extern const u8 gOtherText_MailWasSent[];
+extern const u8 gOtherText_MailboxIsFull[];
+extern const u8 gOtherText_MailRemovedMessageLost[];
+extern const u8 gOtherText_WantsToLearn[];
+extern const u8 gOtherText_NotCompatible[];
+extern const u8 gOtherText_AlreadyKnows[];
+extern const u8 gOtherText_LearnedMove[];
+extern const u8 gOtherText_WhichMoveToForget2[];
+extern const u8 gOtherText_ForgetMove123_2[];
+extern const u8 gOtherText_StopTryingTo[];
+extern const u8 gOtherText_DidNotLearnMove2[];
+extern const u8 gOtherText_RegainedHealth[];
+extern const u8 gOtherText_HPRestoredBy[];
+extern const u8 gOtherText_CuredPoisoning[];
+extern const u8 gOtherText_WokeUp[];
+extern const u8 gOtherText_BurnHealed[];
+extern const u8 gOtherText_ThawedOut[];
+extern const u8 gOtherText_CuredParalysis[];
+extern const u8 gOtherText_SnapConfusion[];
+extern const u8 gOtherText_GotOverLove[];
+extern const u8 gOtherText_BecameHealthy[];
+extern const u8 gOtherText_Hp2[];
+extern const u8 gOtherText_Attack[];
+extern const u8 gOtherText_Defense[];
+extern const u8 gOtherText_Speed[];
+extern const u8 gOtherText_SpAtk2[];
+extern const u8 gOtherText_SpDef2[];
+extern const u8 gOtherText_WasRaised[];
+extern const u8 gOtherText_PPIncreased[];
+extern const u8 gOtherText_PPRestored[];
+extern const u8 gMoveNames[][13];
+extern const u8 *const gItemEffectTable[];
-extern u8 gUnknown_083769A8[][12];
-extern u8 gUnknown_08376D1C[DATA_COUNT];
-extern u8 *gUnknown_08376D04[DATA_COUNT];
-extern u8 gOtherText_TallPlusAndRightArrow[];
+extern bool8 IsDoubleBattle(void);
+extern void SetUpBattlePokemonMenu(u8);
+extern void sub_808B0C0(u8);
+extern u8 GiveMailToMon(struct Pokemon *, u16);
+extern bool8 ItemIsMail(u16);
+extern void ClearMailStruct(struct MailStruct *);
+extern u8 GiveMailToMon2(struct Pokemon *, struct MailStruct *);
+extern void TakeMailFromMon(struct Pokemon *);
+extern u8 TakeMailFromMon2(struct Pokemon *);
+extern u32 CanMonLearnTMHM(struct Pokemon *, u8);
+extern void sub_809D9F0(struct Pokemon *, u8, u8, void *, u32);
+extern void sub_808B564();
+extern u8 sub_809FA30(void);
+extern void sub_808B508(u8);
+extern void sub_8032638();
+extern u8 sub_8094C20();
+extern bool8 ExecuteTableBasedItemEffect_();
+extern u8 GetMonStatusAndPokerus();
-void task_pc_turn_off(u8 *u8, int i);
+u8 sub_806CA38(u8);
+void task_pc_turn_off();
static void sub_806E884(u8 taskId);
void sub_806F8AC(u8 taskId);
+void sub_806FB0C(u8 taskId);
void PartyMenuUpdateLevelOrStatus(struct Pokemon *, u8);
-u8 ExecuteTableBasedItemEffect__(u8 u8, u16 u16, int i);
+bool8 ExecuteTableBasedItemEffect__(u8, u16, u8);
void sub_80701DC(u8 taskId);
+void DoRecoverPP(u8);
+void Task_RareCandy1(u8);
+void Task_RareCandy2(u8);
+void Task_RareCandy3(u8);
+void sub_806D538();
+void sub_806D5A4(void);
+void sub_806E8D0(u8 taskId, u16 b, TaskFunc c);
+void GetMedicineItemEffectMessage(u16);
+void sub_8070A20();
+void sub_8070848(u8 taskId);
+void sub_8070968();
+void party_menu_link_mon_held_item_object(u8);
+void Task_ConfirmGiveHeldItem(u8);
+void DisplayGiveHeldItemMessage(u8, u16, u8);
+void SetHeldItemIconVisibility();
+void DisplayTakeHeldItemMessage(u8, u16, u8);
+void Task_ConfirmTakeHeldMail(u8);
+void Task_TeamMonTMMove(u8);
+void Task_TeamMonTMMove2(u8);
+void Task_TeamMonTMMove3(u8);
+void Task_TeamMonTMMove4(u8);
+void sub_806F358(u8);
+void sub_806F390(u8);
+void sub_806F44C(u8);
+void TMMoveUpdateMoveSlot(u8);
+void StopTryingToTeachMove_806F614(u8);
+void StopTryingToTeachMove_806F67C(u8);
+void StopTryingToTeachMove_806F6B4(u8);
+void sub_806FB44(u8);
+void sub_8070C54();
+void SetMonIconAnim();
+u8 GetMonIconSpriteId_maybe();
+void PartyMenuDoPrintHP(u8, int, u16, u16);
+void PartyMenuClearLevelStatusTilemap();
+void PartyMenuPrintMonLevelOrStatus();
+u8 GetItemEffectType();
+bool8 IsBlueYellowRedFlute(u16);
+void TryPrintPartyMenuMonNickname();
+void sub_8070088(u8);
+
+
+/*
+void sub_806AEDC(void)
+{
+ const struct UnknownStruct5 *r5;
+ s32 i;
-u8 sub_806E834(u8 *message, u8 arg1)
+ AnimateSprites();
+ BuildOamBuffer();
+ r5 = gUnknown_08376BB4[gUnknown_0202E8FA];
+ for (i = 0; i < 6; i++)
+ sub_800142C(r5[i].unk0 * 8, r5[i].unk1 * 8, r5[i].unk4, 0, (i << 5) | 0x200);
+ RunTasks();
+ UpdatePaletteFade();
+}
+*/
+
+u8 sub_806E834(const u8 *message, u8 arg1)
{
u8 taskId;
@@ -63,227 +234,1217 @@ u8 sub_806E834(u8 *message, u8 arg1)
static void sub_806E884(u8 taskId)
{
- if (MenuUpdateWindowText() == 0)
+ if (MenuUpdateWindowText())
{
- return;
+ gUnknown_0202E8F6 = 0;
+ if (gTasks[taskId].data[0] == 0)
+ MenuZeroFillWindowRect(3, 14, 26, 19);
+ DestroyTask(taskId);
}
+}
- gUnknown_0202E8F6 = 0;
+void sub_806E8D0(u8 taskId, u16 b, TaskFunc c)
+{
+ ewram1C000.unk10 = c;
+ ewram1C000.unk4 = taskId;
+ ewram1C000.unk5 = sub_806CA38(taskId);
+ ewram1C000.unk6 = b;
+ ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5];
+}
+
+bool8 PartyMenuUpdateMonHeldItem(struct Pokemon *pkmn, u16 item)
+{
+ u8 itemData[2];
- if (gTasks[taskId].data[0] == 0)
+ if (ItemIsMail(item) == TRUE)
{
- MenuZeroFillWindowRect(3, 14, 26, 19);
+ if (GiveMailToMon(pkmn, item) == 0xFF)
+ return TRUE;
+ gUnknown_0202E8F4 = 2;
+ }
+ else
+ {
+ gUnknown_0202E8F4 = 1;
}
- DestroyTask(taskId);
+ itemData[0] = item;
+ itemData[1] = item >> 8;
+ SetMonData(pkmn, MON_DATA_HELD_ITEM, itemData);
+ return FALSE;
}
-asm(".section .text_b");
-
-#ifdef NONMATCHING
-void sub_8070088(u8 taskId)
+void PartyMenuTryGiveMonHeldItem(u8 taskId, u16 newItem, TaskFunc c)
{
- u8 dummyTaskId;
- struct Task *task2;
+ u16 currentItem;
gTasks[taskId].func = TaskDummy;
+ sub_806E8D0(taskId, newItem, c);
+ currentItem = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM);
+ gUnknown_0202E8F4 = 0;
+ gUnknown_0202E8F8 = 0;
+ if (currentItem != 0)
+ {
+ if (ItemIsMail(currentItem) == TRUE)
+ {
+ sub_806E834(gOtherText_MailMustBeRemoved, 1);
+ CreateTask(party_menu_link_mon_held_item_object, 5);
+ }
+ else
+ {
+ GetMonNickname(ewram1C000.pokemon, gStringVar1);
+ CopyItemName(currentItem, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gOtherText_AlreadyHolding);
+ sub_806E834(gStringVar4, 1);
+ CreateTask(Task_ConfirmGiveHeldItem, 5);
+ if (ItemIsMail(newItem) == TRUE)
+ gUnknown_0202E8F8 = currentItem;
+ }
+ }
+ else
+ {
+ PartyMenuUpdateMonHeldItem(ewram1C000.pokemon, newItem);
+ RemoveBagItem(newItem, 1);
+ if (ItemIsMail(newItem))
+ {
+ gTasks[taskId].func = c;
+ }
+ else
+ {
+ DisplayGiveHeldItemMessage(ewram1C000.unk5, newItem, 1);
+ CreateTask(party_menu_link_mon_held_item_object, 5);
+ }
+ }
+}
- if (GetMonData(&gPlayerParty[unk_201C000.var04], MON_DATA_SPECIES) == 0)
+void party_menu_link_mon_held_item_object(u8 taskId)
+{
+ if (gUnknown_0202E8F6 == 0)
{
- gTasks[taskId].func = sub_80701DC;
- return;
+ SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.unk5);
+ gTasks[ewram1C000.unk4].func = ewram1C000.unk10;
+ DestroyTask(taskId);
}
+}
- dummyTaskId = CreateTask(TaskDummy, 5);
- task2 = &gTasks[dummyTaskId];
+void PartyMenuTryGiveMonHeldItem_806EACC(u8 taskId)
+{
+ s8 selection = ProcessMenuInputNoWrap_();
- task2->data[10] = GetMonData(unk_201C000.pokemon, MON_DATA_MAX_HP);
- task2->data[11] = GetMonData(unk_201C000.pokemon, MON_DATA_HP);
+ if (selection == 0)
+ {
+ u16 currentItem;
- if (ExecuteTableBasedItemEffect__(unk_201C000.var05, unk_201C000.var06, 0))
+ MenuZeroFillWindowRect(23, 8, 29, 13);
+ currentItem = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM);
+ RemoveBagItem(ewram1C000.unk6, 1);
+ if (AddBagItem(currentItem, 1) == TRUE)
+ {
+ PartyMenuUpdateMonHeldItem(ewram1C000.pokemon, ewram1C000.unk6);
+ if (ItemIsMail(ewram1C000.unk6))
+ {
+ DisplayTakeHeldItemMessage(ewram1C000.unk5, currentItem, 1);
+ }
+ else
+ {
+ CopyItemName(ewram1C000.unk6, gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gOtherText_TakenAndReplaced);
+ sub_806E834(gStringVar4, 1);
+ }
+ }
+ else
+ {
+ sub_806E834(gOtherText_BagFullCannotRemoveItem, 0);
+ AddBagItem(ewram1C000.unk6, 1);
+ }
+ }
+ else
{
- DestroyTask(dummyTaskId);
- gTasks[taskId].func = sub_80701DC;
- return;
+ if (selection != 1 && selection != -1)
+ return;
+ if (selection == -1)
+ PlaySE(SE_SELECT);
+ MenuZeroFillWindowRect(23, 8, 29, 13);
}
+ gTasks[taskId].func = party_menu_link_mon_held_item_object;
+}
- gUnknown_0202E8F4 = 1;
- MenuZeroFillWindowRect(3, 14, 26, 19);
- PlaySE(SE_KAIFUKU);
- PartyMenuUpdateLevelOrStatus(unk_201C000.pokemon, unk_201C000.var05);
+void Task_ConfirmGiveHeldItem(u8 taskId)
+{
+ if (gUnknown_0202E8F6 == 0)
+ {
+ DisplayYesNoMenu(23, 8, 1);
+ gTasks[taskId].func = PartyMenuTryGiveMonHeldItem_806EACC;
+ }
+}
+
+void DisplayGiveHeldItemMessage(u8 a, u16 b, u8 c)
+{
+ GetMonNickname(&gPlayerParty[a], gStringVar1);
+ CopyItemName(b, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gOtherText_WasGivenToHold);
+ sub_806E834(gStringVar4, c);
+}
- task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle()][unk_201C000.var05], 9);
- unk_201B260.var01 = 2; // u8
- task2->data[12] = GetMonData(unk_201C000.pokemon, MON_DATA_HP) - task2->data[11];
- task2->data[14] = 1;
- unk_201B260.var1E = 1; // u16
- unk_201B260.var20 = 1; // u16
+// Not sure about this one for now.
+/*
+void PartyMenuTryGiveMonMail(u8 taskId, TaskFunc func)
+{
+ u16 currentItem;
+ struct MailStruct *r4;
- unk_201C000.var12 = -0x8000;
- task2->func = sub_806F8AC;
+ gTasks[taskId].func = TaskDummy;
+ sub_806E8D0(taskId, 0, func);
+ currentItem = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM);
+ gUnknown_0202E8F4 = 0;
+ r4 = &gSaveBlock1.mail[ewram1F000.unkE00[0] + ewram1F000.unkE00[2]];
+ if (currentItem != 0)
+ {
+ sub_806E834(gOtherText_PokeHoldingItemCantMail, 1);
+ CreateTask(party_menu_link_mon_held_item_object, 5);
+ }
+ else
+ {
+ GiveMailToMon2(ewram1C000.pokemon, r4);
+ ClearMailStruct(r4);
+ sub_806E834(gOtherText_MailTransferredMailbox, 1);
+ CreateTask(party_menu_link_mon_held_item_object, 5);
+ }
}
-#else
+*/
__attribute__((naked))
-void sub_8070088(void)
+void PartyMenuTryGiveMonMail(u8 taskId, TaskFunc func)
{
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, 0x4\n\
+ push {r4,r5,lr}\n\
+ adds r2, r1, 0\n\
lsls r0, 24\n\
lsrs r0, 24\n\
- ldr r1, _08070120 @ =gTasks\n\
- mov r10, r1\n\
+ ldr r3, _0806ECA0 @ =gTasks\n\
lsls r1, r0, 2\n\
adds r1, r0\n\
lsls r1, 3\n\
- mov r2, r10\n\
- adds r7, r1, r2\n\
- ldr r5, _08070124 @ =TaskDummy\n\
- str r5, [r7]\n\
- ldr r4, _08070128 @ =0x0201c000\n\
- ldrb r0, [r4, 0x5]\n\
- movs r1, 0x64\n\
- mov r9, r1\n\
- mov r2, r9\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- ldr r1, _0807012C @ =gPlayerParty\n\
- mov r8, r1\n\
- add r0, r8\n\
- movs r1, 0xB\n\
+ adds r1, r3\n\
+ ldr r3, _0806ECA4 @ =TaskDummy\n\
+ str r3, [r1]\n\
+ movs r1, 0\n\
+ bl sub_806E8D0\n\
+ ldr r5, _0806ECA8 @ =0x0201c000\n\
+ ldr r0, [r5]\n\
+ movs r1, 0xC\n\
bl GetMonData\n\
+ lsls r0, 16\n\
+ ldr r2, _0806ECAC @ =gUnknown_0202E8F4\n\
+ movs r1, 0\n\
+ strb r1, [r2]\n\
+ movs r1, 0xF8\n\
+ lsls r1, 6\n\
+ adds r2, r5, r1\n\
+ ldrb r1, [r2]\n\
+ adds r1, 0x6\n\
+ ldrb r2, [r2, 0x2]\n\
+ adds r1, r2\n\
+ lsls r2, r1, 3\n\
+ adds r2, r1\n\
+ lsls r2, 2\n\
+ ldr r1, _0806ECB0 @ =gSaveBlock1 + 0x2B4C\n\
+ adds r4, r2, r1\n\
cmp r0, 0\n\
- beq _08070118\n\
- adds r0, r5, 0\n\
+ beq _0806ECBC\n\
+ ldr r0, _0806ECB4 @ =gOtherText_PokeHoldingItemCantMail\n\
+ movs r1, 0x1\n\
+ bl sub_806E834\n\
+ ldr r0, _0806ECB8 @ =party_menu_link_mon_held_item_object\n\
movs r1, 0x5\n\
bl CreateTask\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 3\n\
- str r0, [sp]\n\
- mov r0, r10\n\
- adds r0, 0x8\n\
- ldr r2, [sp]\n\
- adds r6, r2, r0\n\
- ldrb r0, [r4, 0x5]\n\
- mov r1, r9\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- add r0, r8\n\
- str r0, [r4]\n\
- movs r1, 0x3A\n\
- bl GetMonData\n\
- strh r0, [r6, 0x14]\n\
- ldr r0, [r4]\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- strh r0, [r6, 0x16]\n\
- ldrb r0, [r4, 0x5]\n\
- ldrh r1, [r4, 0x6]\n\
- movs r2, 0\n\
- bl ExecuteTableBasedItemEffect__\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _08070134\n\
- adds r0, r5, 0\n\
- bl DestroyTask\n\
-_08070118:\n\
- ldr r0, _08070130 @ =sub_80701DC\n\
- str r0, [r7]\n\
- b _080701B0\n\
+ b _0806ECDA\n\
.align 2, 0\n\
-_08070120: .4byte gTasks\n\
-_08070124: .4byte TaskDummy\n\
-_08070128: .4byte 0x0201c000\n\
-_0807012C: .4byte gPlayerParty\n\
-_08070130: .4byte sub_80701DC\n\
-_08070134:\n\
- ldr r1, _080701C0 @ =gUnknown_0202E8F4\n\
- movs r0, 0x1\n\
- strb r0, [r1]\n\
- movs r0, 0x3\n\
- movs r1, 0xE\n\
- movs r2, 0x1A\n\
- movs r3, 0x13\n\
- bl MenuZeroFillWindowRect\n\
- movs r0, 0x1\n\
- bl PlaySE\n\
- ldr r0, [r4]\n\
- ldrb r1, [r4, 0x5]\n\
- bl PartyMenuUpdateLevelOrStatus\n\
- bl IsDoubleBattle\n\
- adds r1, r0, 0\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- ldrb r1, [r4, 0x5]\n\
- lsls r1, 1\n\
- adds r0, r1\n\
- ldr r1, _080701C4 @ =gUnknown_083769A8\n\
- adds r0, r1\n\
- movs r1, 0x9\n\
- bl task_pc_turn_off\n\
- ldr r2, _080701C8 @ =0xfffff261\n\
- adds r1, r4, r2\n\
- movs r0, 0x2\n\
- strb r0, [r1]\n\
- ldr r0, [r4]\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- ldrh r1, [r6, 0x16]\n\
- subs r0, r1\n\
- strh r0, [r6, 0x18]\n\
- movs r0, 0x1\n\
- strh r0, [r6, 0x1C]\n\
- ldr r1, _080701CC @ =0xfffff27e\n\
- adds r0, r4, r1\n\
+_0806ECA0: .4byte gTasks\n\
+_0806ECA4: .4byte TaskDummy\n\
+_0806ECA8: .4byte 0x0201c000\n\
+_0806ECAC: .4byte gUnknown_0202E8F4\n\
+_0806ECB0: .4byte gSaveBlock1 + 0x2B4C\n\
+_0806ECB4: .4byte gOtherText_PokeHoldingItemCantMail\n\
+_0806ECB8: .4byte party_menu_link_mon_held_item_object\n\
+_0806ECBC:\n\
+ ldr r0, [r5]\n\
+ adds r1, r4, 0\n\
+ bl GiveMailToMon2\n\
+ adds r0, r4, 0\n\
+ bl ClearMailStruct\n\
+ ldr r0, _0806ECE0 @ =gOtherText_MailTransferredMailbox\n\
movs r1, 0x1\n\
- strh r1, [r0]\n\
- ldr r2, _080701D0 @ =0xfffff280\n\
- adds r0, r4, r2\n\
- strh r1, [r0]\n\
- ldrh r1, [r6, 0x16]\n\
- adds r2, 0x2\n\
- adds r0, r4, r2\n\
- strh r1, [r0]\n\
- ldr r0, _080701D4 @ =0xffff8000\n\
- str r0, [r4, 0xC]\n\
- ldr r1, [sp]\n\
- add r1, r10\n\
- ldr r0, _080701D8 @ =sub_806F8AC\n\
- str r0, [r1]\n\
-_080701B0:\n\
- add sp, 0x4\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
+ bl sub_806E834\n\
+ ldr r0, _0806ECE4 @ =party_menu_link_mon_held_item_object\n\
+ movs r1, 0x5\n\
+ bl CreateTask\n\
+_0806ECDA:\n\
+ pop {r4,r5}\n\
pop {r0}\n\
bx r0\n\
.align 2, 0\n\
-_080701C0: .4byte gUnknown_0202E8F4\n\
-_080701C4: .4byte gUnknown_083769A8\n\
-_080701C8: .4byte 0xfffff261\n\
-_080701CC: .4byte 0xfffff27e\n\
-_080701D0: .4byte 0xfffff280\n\
-_080701D4: .4byte 0xffff8000\n\
-_080701D8: .4byte sub_806F8AC\n\
+_0806ECE0: .4byte gOtherText_MailTransferredMailbox\n\
+_0806ECE4: .4byte party_menu_link_mon_held_item_object\n\
.syntax divided\n");
}
-#endif
+void PartyMenuTryGiveMonHeldItem_806ECE8(u8 taskId, TaskFunc func)
+{
+ u16 currentItem;
+
+ gTasks[taskId].func = TaskDummy;
+ sub_806E8D0(taskId, 0, func);
+ currentItem = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM);
+ if (currentItem == 0)
+ {
+ StringExpandPlaceholders(gStringVar4, gOtherText_NotHoldingAnything);
+ sub_806E834(gStringVar4, 0);
+ CreateTask(party_menu_link_mon_held_item_object, 5);
+ }
+ else
+ {
+ u8 itemData[2];
+
+ itemData[0] = 0;
+ itemData[1] = 0;
+ if (AddBagItem(currentItem, 1) == TRUE)
+ {
+ if (ItemIsMail(currentItem) == TRUE)
+ TakeMailFromMon(ewram1C000.pokemon);
+ DisplayTakeHeldItemMessage(ewram1C000.unk5, currentItem, 0);
+ SetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM, itemData);
+ }
+ else
+ {
+ sub_806E834(gOtherText_BagFullCannotRemoveItem, 0);
+ }
+ CreateTask(party_menu_link_mon_held_item_object, 5);
+ }
+}
+
+void DisplayTakeHeldItemMessage(u8 a, u16 b, u8 c)
+{
+ GetMonNickname(&gPlayerParty[a], gStringVar1);
+ CopyItemName(b, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gOtherText_ReceivedTheThingFrom);
+ sub_806E834(gStringVar4, c);
+}
+
+void DoTakeMail(u8 taskId, TaskFunc func)
+{
+ gTasks[taskId].func = TaskDummy;
+ sub_806E8D0(taskId, 0, func);
+ ewram1C000.unk6 = GetMonData(ewram1C000.pokemon, MON_DATA_HELD_ITEM);
+ sub_806E834(gOtherText_SendRemovedMailPrompt, 1);
+ CreateTask(Task_ConfirmTakeHeldMail, 5);
+}
+
+void Task_LoseMailMessage(u8 taskId)
+{
+ s8 selection = ProcessMenuInputNoWrap_();
+
+ if (selection == 0)
+ {
+ if (AddBagItem(ewram1C000.unk6, 1) == TRUE)
+ {
+ TakeMailFromMon(ewram1C000.pokemon);
+ sub_806E834(gOtherText_MailTaken, 0);
+ }
+ else
+ {
+ sub_806E834(gOtherText_BagFullCannotRemoveItem, 0);
+ }
+ MenuZeroFillWindowRect(23, 8, 29, 13);
+ gTasks[taskId].func = party_menu_link_mon_held_item_object;
+ }
+ else
+ {
+ if (selection != 1 && selection != -1)
+ return;
+ if (selection == -1)
+ PlaySE(SE_SELECT);
+ MenuZeroFillWindowRect(23, 8, 29, 13);
+ MenuZeroFillWindowRect(0, 14, 29, 19);
+ gTasks[taskId].func = party_menu_link_mon_held_item_object;
+ }
+}
+
+void Task_ConfirmLoseMailMessage(u8 taskId)
+{
+ if (gUnknown_0202E8F6 == 0)
+ {
+ DisplayYesNoMenu(23, 8, 1);
+ gTasks[taskId].func = Task_LoseMailMessage;
+ }
+}
+
+void Task_TakeHeldMail(u8 taskId)
+{
+ s8 selection = ProcessMenuInputNoWrap_();
+
+ if (selection == 0)
+ {
+ MenuZeroFillWindowRect(23, 8, 29, 13);
+ if (TakeMailFromMon2(ewram1C000.pokemon) != 0xFF)
+ sub_806E834(gOtherText_MailWasSent, 0);
+ else
+ sub_806E834(gOtherText_MailboxIsFull, 0);
+ gTasks[taskId].func = party_menu_link_mon_held_item_object;
+ }
+ else
+ {
+ if (selection != 1 && selection != -1)
+ return;
+ if (selection == -1)
+ PlaySE(SE_SELECT);
+ MenuZeroFillWindowRect(23, 8, 29, 13);
+ sub_806E834(gOtherText_MailRemovedMessageLost, 1);
+ gTasks[taskId].func = Task_ConfirmLoseMailMessage;
+ }
+}
+
+void Task_ConfirmTakeHeldMail(u8 taskId)
+{
+ if (gUnknown_0202E8F6 == 0)
+ {
+ DisplayYesNoMenu(23, 8, 1);
+ gTasks[taskId].func = Task_TakeHeldMail;
+ }
+}
+
+u16 ItemIdToBattleMoveId(u16 item)
+{
+ u16 moveId = item - 289;
-asm(".section .text_c");
+ return gUnknown_08376504[moveId];
+}
+
+bool8 pokemon_has_move(struct Pokemon *pkmn, u16 move)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (GetMonData(pkmn, MON_DATA_MOVE1 + i) == move)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void TeachMonTMMove(u8 taskId, u16 move, TaskFunc func)
+{
+ PlaySE(SE_SELECT);
+ gTasks[taskId].func = TaskDummy;
+ sub_806E8D0(taskId, move, func);
+ CreateTask(Task_TeamMonTMMove, 5);
+}
+
+void Task_TeamMonTMMove(u8 taskId)
+{
+ GetMonNickname(ewram1C000.pokemon, gStringVar1);
+ ewram1C000.unk8 = ItemIdToBattleMoveId(ewram1C000.unk6);
+ StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]);
+ ewram1B000.unk282 = 0;
+ if (pokemon_has_move(ewram1C000.pokemon, ewram1C000.unk8))
+ {
+ StringExpandPlaceholders(gStringVar4, gOtherText_AlreadyKnows);
+ sub_806E834(gStringVar4, 1);
+ gTasks[taskId].func = party_menu_link_mon_held_item_object;
+ }
+ else
+ {
+ if (!CanMonLearnTMHM(ewram1C000.pokemon, ewram1C000.unk6 - 33))
+ {
+ StringExpandPlaceholders(gStringVar4, gOtherText_NotCompatible);
+ sub_806E834(gStringVar4, 1);
+ gTasks[taskId].func = party_menu_link_mon_held_item_object;
+ }
+ else
+ {
+ if (GiveMoveToMon(ewram1C000.pokemon, ewram1C000.unk8) != 0xFFFF)
+ {
+ Task_TeamMonTMMove2(taskId);
+ }
+ else
+ {
+ StringExpandPlaceholders(gStringVar4, gOtherText_WantsToLearn);
+ sub_806E834(gStringVar4, 1);
+ gTasks[taskId].func = sub_806F358;
+ }
+ }
+ }
+}
+
+void Task_TeamMonTMMove2(u8 taskId)
+{
+ StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]);
+ StringExpandPlaceholders(gStringVar4, gOtherText_LearnedMove);
+ sub_806E834(gStringVar4, 1);
+ AdjustFriendship(ewram1C000.pokemon, 4);
+ if (ewram1B000.unk282 == 0 && ewram1C000.unk6 <= 0x152)
+ RemoveBagItem(ewram1C000.unk6, 1);
+ gTasks[taskId].func = Task_TeamMonTMMove3;
+}
+
+void Task_TeamMonTMMove3(u8 taskId)
+{
+ if (gUnknown_0202E8F6 == 0)
+ {
+ PlayFanfare(BGM_FANFA1);
+ gTasks[taskId].func = Task_TeamMonTMMove4;
+ }
+}
+
+void Task_TeamMonTMMove4(u8 taskId)
+{
+ if (IsFanfareTaskInactive())
+ {
+ if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
+ {
+ SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.unk5);
+ if (ewram1B000.unk282 == 1)
+ {
+ sub_8070C54(taskId);
+ }
+ else
+ {
+ gTasks[ewram1C000.unk4].func = ewram1C000.unk10;
+ DestroyTask(taskId);
+ }
+ }
+ }
+}
+
+void sub_806F2FC(u8 taskId)
+{
+ if (gUnknown_0202E8F6 == 0)
+ {
+ SetHeldItemIconVisibility(ewram1C000.unk4, ewram1C000.unk5);
+ if (ewram1B000.unk282 == 1)
+ {
+ sub_8070C54(taskId);
+ }
+ else
+ {
+ gTasks[ewram1C000.unk4].func = ewram1C000.unk10;
+ DestroyTask(taskId);
+ }
+ }
+}
+
+void sub_806F358(u8 taskId)
+{
+ if (gUnknown_0202E8F6 == 0)
+ {
+ DisplayYesNoMenu(23, 8, 1);
+ gTasks[taskId].func = sub_806F390;
+ }
+}
+
+void sub_806F390(u8 taskId)
+{
+ s8 selection = ProcessMenuInputNoWrap_();
+
+ if (selection == 0)
+ {
+ MenuZeroFillWindowRect(23, 8, 29, 13);
+ sub_806E834(gOtherText_WhichMoveToForget2, 1);
+ gTasks[taskId].func = sub_806F44C;
+ }
+ else
+ {
+ if (selection != 1 && selection != -1)
+ return;
+ if (selection == -1)
+ PlaySE(SE_SELECT);
+ StopTryingToTeachMove_806F614(taskId);
+ }
+}
+
+void sub_806F3FC(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ sub_809D9F0(gPlayerParty, ewram1C000.unk5, gPlayerPartyCount - 1, sub_808B564, ewram1C000.unk8);
+ DestroyTask(taskId);
+ }
+}
+
+void sub_806F44C(u8 taskId)
+{
+ if (gUnknown_0202E8F6 == 0)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_806F3FC;
+ }
+}
+
+void TaughtMove(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ u8 moveIndex;
+ u16 r4;
+
+ gTasks[taskId].func = TaskDummy;
+ sub_806E8D0(taskId, gScriptItemId, sub_808B508);
+ moveIndex = sub_809FA30();
+ r4 = GetMonData(ewram1C000.pokemon, MON_DATA_MOVE1 + moveIndex);
+ GetMonNickname(ewram1C000.pokemon, gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[r4]);
+ StringExpandPlaceholders(gStringVar4, gOtherText_ForgetMove123_2);
+ sub_806E834(gStringVar4, 1);
+ CreateTask(TMMoveUpdateMoveSlot, 5);
+ }
+}
+
+void TMMoveUpdateMoveSlot(u8 taskId)
+{
+ if (gUnknown_0202E8F6 == 0)
+ {
+ RemoveMonPPBonus(ewram1C000.pokemon, sub_809FA30());
+ SetMonMoveSlot(ewram1C000.pokemon, ewram1C000.unk8, sub_809FA30());
+ Task_TeamMonTMMove2(taskId);
+ }
+}
+
+void StopTryingToTeachMove_806F588(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ gTasks[taskId].func = TaskDummy;
+ sub_806E8D0(taskId, gScriptItemId, sub_808B508);
+ StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]);
+ StringExpandPlaceholders(gStringVar4, gOtherText_StopTryingTo);
+ sub_806E834(gStringVar4, 1);
+ CreateTask(StopTryingToTeachMove_806F67C, 5);
+ }
+}
+
+void StopTryingToTeachMove_806F614(u8 taskId)
+{
+ MenuZeroFillWindowRect(23, 8, 29, 13);
+ StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]);
+ StringExpandPlaceholders(gStringVar4, gOtherText_StopTryingTo);
+ sub_806E834(gStringVar4, 1);
+ gTasks[taskId].func = StopTryingToTeachMove_806F67C;
+}
+
+void StopTryingToTeachMove_806F67C(u8 taskId)
+{
+ if (gUnknown_0202E8F6 == 0)
+ {
+ DisplayYesNoMenu(23, 8, 1);
+ gTasks[taskId].func = StopTryingToTeachMove_806F6B4;
+ }
+}
+
+void StopTryingToTeachMove_806F6B4(u8 taskId)
+{
+ s8 selection = ProcessMenuInputNoWrap_();
+
+ if (selection == 0)
+ {
+ MenuZeroFillWindowRect(23, 8, 29, 13);
+ GetMonNickname(ewram1C000.pokemon, gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]);
+ StringExpandPlaceholders(gStringVar4, gOtherText_DidNotLearnMove2);
+ sub_806E834(gStringVar4, 1);
+ gTasks[taskId].func = sub_806F2FC;
+ }
+ else
+ {
+ if (selection != 1 && selection != -1)
+ return;
+ if (selection == -1)
+ PlaySE(SE_SELECT);
+ MenuZeroFillWindowRect(23, 8, 29, 13);
+ GetMonNickname(ewram1C000.pokemon, gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]);
+ StringExpandPlaceholders(gStringVar4, gOtherText_WantsToLearn);
+ sub_806E834(gStringVar4, 1);
+ gTasks[taskId].func = sub_806F358;
+ }
+}
+
+bool8 IsHMMove(u16 move)
+{
+ u8 i;
+
+ for (i = 0; i < 8; i++)
+ {
+ if (gUnknown_08376504[50 + i] == move)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+s16 sub_806F7E8(u8 taskId, struct BattleInterfaceStruct1 *b, s8 c)
+{
+ s16 *taskData;
+ u8 hpBarLevel;
+ void *vramPtr;
+
+ taskData = gTasks[taskId].data;
+
+ b->unk0 = taskData[10];
+ b->unk4 = taskData[11];
+ b->unk8 = taskData[12] * c;
+ b->unk10 = 0x100;
+ hpBarLevel = GetHPBarLevel(ewram1B000.unk282, b->unk0);
+ if (hpBarLevel > 2)
+ b->unkC_0 = 4;
+ if (hpBarLevel == 2)
+ b->unkC_0 = 5;
+ if (hpBarLevel < 2)
+ b->unkC_0 = 6;
+ vramPtr = gUnknown_08376858[IsDoubleBattle()][ewram1C000.unk5];
+ return sub_80460C8(b, &ewram1C000.unkC, vramPtr, 0);
+}
+
+void sub_806F8AC(u8 taskId)
+{
+ struct BattleInterfaceStruct1 sp0;
+ u16 sp14;
+
+ ewram1B000.unk282 = sub_806F7E8(taskId, &sp0, -1);
+ if (ewram1B000.unk282 == -1)
+ {
+ ewram1C000.unkC = 0;
+ if (-sp0.unk8 + sp0.unk4 > sp0.unk0)
+ sp14 = sp0.unk0 - sp0.unk4;
+ else
+ sp14 = -sp0.unk8;
+ gBattleMoveDamage = -sp14;
+ GetMonNickname(ewram1C000.pokemon, gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, sp14, 0, 3);
+ if (gTasks[taskId].data[14] == 0)
+ StringExpandPlaceholders(gStringVar4, gOtherText_HPRestoredBy);
+ else
+ StringExpandPlaceholders(gStringVar4, gOtherText_RegainedHealth);
+ SetMonIconAnim(GetMonIconSpriteId_maybe(ewram1C000.unk4, ewram1C000.unk5), ewram1C000.pokemon);
+ task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.unk5 * 2], 7);
+ ewram1B000.unk261 = 2;
+ sub_806E834(gStringVar4, 1);
+ sp14 += sp0.unk4;
+ SetMonData(ewram1C000.pokemon, MON_DATA_HP, (u8 *)&sp14);
+ RemoveBagItem(ewram1C000.unk6, 1);
+ sub_8032638();
+ gTasks[taskId].func = sub_806FB44;
+ }
+ else
+ {
+ PartyMenuDoPrintHP(ewram1C000.unk5, IsDoubleBattle(), ewram1B000.unk282, sp0.unk0);
+ }
+}
+
+void sub_806FA18(u8 taskId)
+{
+ struct BattleInterfaceStruct1 sp0;
+
+ ewram1B000.unk282 = sub_806F7E8(taskId, &sp0, 1);
+ if (ewram1B000.unk282 == -1)
+ {
+ PlaySE(SE_KAIFUKU);
+ ewram1C000.unkC = 0;
+ gTasks[taskId].data[11] -= gTasks[taskId].data[12];
+ SetMonData(ewram1C000.pokemon, MON_DATA_HP, (u8 *)&gTasks[taskId].data[11]);
+ SetMonIconAnim(GetMonIconSpriteId_maybe(ewram1C000.unk4, ewram01000.unk1), ewram1C000.pokemon);
+ ewram1C000.unk5 = gSprites[ewram01000.unk2].data0;
+ ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5];
+ gTasks[taskId].data[10] = GetMonData(ewram1C000.pokemon, MON_DATA_MAX_HP);
+ gTasks[taskId].data[11] = GetMonData(ewram1C000.pokemon, MON_DATA_HP);
+ ewram1C000.unkC = -32768;
+ ewram1C000.unk14 = ewram1C000.unk10;
+ gTasks[taskId].func = sub_806F8AC;
+ ewram1B000.unk282 = gTasks[taskId].data[11];
+ }
+ else
+ {
+ PartyMenuDoPrintHP(ewram1C000.unk5, IsDoubleBattle(), ewram1B000.unk282, sp0.unk0);
+ }
+}
+
+void sub_806FB0C(u8 taskId)
+{
+ if (gUnknown_0202E8F6 == 0)
+ {
+ gTasks[ewram1C000.unk4].func = ewram1C000.unk10;
+ DestroyTask(taskId);
+ }
+}
+
+void sub_806FB44(u8 taskId)
+{
+ if (gUnknown_0202E8F6 == 0)
+ {
+ gTasks[ewram1C000.unk4].func = ewram1C000.unk14;
+ DestroyTask(taskId);
+ }
+}
+
+bool8 IsHPRecoveryItem(u16 item)
+{
+ const u8 *itemEffect;
+
+ if (item == 0xAF)
+ itemEffect = gSaveBlock1.enigmaBerry.itemEffect;
+ else
+ itemEffect = gItemEffectTable[item - 13];
+
+ if (itemEffect[4] & 4)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void PartyMenuUpdateLevelOrStatus(struct Pokemon *pkmn, u8 b)
+{
+ PartyMenuClearLevelStatusTilemap(b);
+ PartyMenuPrintMonLevelOrStatus(b, pkmn);
+}
+
+void GetMedicineItemEffectMessage(u16 item)
+{
+ switch (GetItemEffectType(item))
+ {
+ case 3:
+ StringExpandPlaceholders(gStringVar4, gOtherText_CuredPoisoning);
+ break;
+ case 4:
+ StringExpandPlaceholders(gStringVar4, gOtherText_WokeUp);
+ break;
+ case 5:
+ StringExpandPlaceholders(gStringVar4, gOtherText_BurnHealed);
+ break;
+ case 6:
+ StringExpandPlaceholders(gStringVar4, gOtherText_ThawedOut);
+ break;
+ case 7:
+ StringExpandPlaceholders(gStringVar4, gOtherText_CuredParalysis);
+ break;
+ case 8:
+ StringExpandPlaceholders(gStringVar4, gOtherText_SnapConfusion);
+ break;
+ case 9:
+ StringExpandPlaceholders(gStringVar4, gOtherText_GotOverLove);
+ break;
+ case 11:
+ StringExpandPlaceholders(gStringVar4, gOtherText_BecameHealthy);
+ break;
+ case 13:
+ StringCopy(gStringVar2, gOtherText_Hp2);
+ StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised);
+ break;
+ case 12:
+ StringCopy(gStringVar2, gOtherText_Attack);
+ StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised);
+ break;
+ case 17:
+ StringCopy(gStringVar2, gOtherText_Defense);
+ StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised);
+ break;
+ case 16:
+ StringCopy(gStringVar2, gOtherText_Speed);
+ StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised);
+ break;
+ case 14:
+ StringCopy(gStringVar2, gOtherText_SpAtk2);
+ StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised);
+ break;
+ case 15:
+ StringCopy(gStringVar2, gOtherText_SpDef2);
+ StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised);
+ break;
+ case 19:
+ case 20:
+ StringExpandPlaceholders(gStringVar4, gOtherText_PPIncreased);
+ break;
+ case 21:
+ StringExpandPlaceholders(gStringVar4, gOtherText_PPRestored);
+ break;
+ default:
+ StringExpandPlaceholders(gStringVar4, gOtherText_WontHaveAnyEffect);
+ break;
+ }
+}
+
+bool8 IsMedicineIneffective(struct Pokemon *pkmn, u16 item)
+{
+ if (GetItemEffectType(item) == 13
+ && GetMonData(pkmn, MON_DATA_SPECIES) == SPECIES_SHEDINJA)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 ExecuteTableBasedItemEffect__(u8 a, u16 b, u8 c)
+{
+ if (gMain.inBattle)
+ return ExecuteTableBasedItemEffect_(&gPlayerParty[a], b, sub_8094C20(a), c);
+ else
+ return ExecuteTableBasedItemEffect_(&gPlayerParty[a], b, a, c);
+}
+
+void UseMedicine(u8 taskId, u16 item, TaskFunc func)
+{
+ u8 r7;
+ bool8 r9 = FALSE;
+ bool8 r0;
+
+ gTasks[taskId].func = TaskDummy;
+ r7 = CreateTask(TaskDummy, 5);
+ sub_806E8D0(taskId, item, func);
+ if (!IsMedicineIneffective(ewram1C000.pokemon, item))
+ {
+ r9 = IsHPRecoveryItem(item);
+ if (r9 == TRUE)
+ {
+ gTasks[r7].data[10] = GetMonData(ewram1C000.pokemon, MON_DATA_MAX_HP);
+ gTasks[r7].data[11] = GetMonData(ewram1C000.pokemon, MON_DATA_HP);
+ if (gTasks[r7].data[10] == gTasks[r7].data[11])
+ {
+ r9 = FALSE;
+ gTasks[r7].data[10] = 0;
+ gTasks[r7].data[11] = 0;
+ }
+ }
+ r0 = ExecuteTableBasedItemEffect__(ewram1C000.unk5, item, 0);
+ }
+ else
+ {
+ r0 = TRUE;
+ }
+
+ if (r0)
+ {
+ gUnknown_0202E8F4 = 0;
+ PlaySE(SE_SELECT);
+ sub_806E834(gOtherText_WontHaveAnyEffect, 1);
+ gTasks[r7].func = sub_806FB0C;
+ }
+ else
+ {
+ u8 statusAndPkrs;
+
+ gUnknown_0202E8F4 = 1;
+ if (!IsBlueYellowRedFlute(item))
+ PlaySE(SE_KAIFUKU);
+ else
+ PlaySE(SE_BIDORO);
+ statusAndPkrs = GetMonStatusAndPokerus(ewram1C000.pokemon);
+ if (statusAndPkrs == 6 || statusAndPkrs == 0)
+ PartyMenuUpdateLevelOrStatus(ewram1C000.pokemon, ewram1C000.unk5);
+ if (r9 == TRUE)
+ {
+ gTasks[r7].data[12] = GetMonData(ewram1C000.pokemon, MON_DATA_HP) - gTasks[r7].data[11];
+ ewram1C000.unkC = -32768;
+ if (gTasks[r7].data[11] == 0)
+ gTasks[r7].data[14] = 1;
+ else
+ gTasks[r7].data[14] = 0;
+ ewram1C000.unk14 = ewram1C000.unk10;
+ gTasks[r7].func = sub_806F8AC;
+ ewram1B000.unk282 = gTasks[r7].data[11];
+ }
+ else
+ {
+ GetMonNickname(ewram1C000.pokemon, gStringVar1);
+ if (!IsBlueYellowRedFlute(item))
+ RemoveBagItem(item, 1);
+ GetMedicineItemEffectMessage(item);
+ TryPrintPartyMenuMonNickname(ewram1C000.unk5, ewram1C000.pokemon);
+ sub_806E834(gStringVar4, 1);
+ gTasks[r7].func = sub_806FB0C;
+ }
+ }
+}
+
+bool8 IsBlueYellowRedFlute(u16 item)
+{
+ if (item == 0x27
+ || item == 0x29
+ || item == 0x28)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void sub_8070048(u8 taskId, u16 item, TaskFunc func)
+{
+ ewram1C000.unk10 = func;
+ ewram1C000.unk4 = taskId;
+ ewram1C000.unk6 = item;
+ ewram1C000.unk5 = 0;
+ ewram1C000.unk14 = sub_80701DC;
+ ewram1B000.unk27E = 0;
+ ewram1B000.unk280 = 0;
+ sub_8070088(taskId);
+}
+
+void sub_8070088(u8 taskId)
+{
+ u8 taskId2;
+
+ gTasks[taskId].func = TaskDummy;
+ if (GetMonData(&gPlayerParty[ewram1C000.unk5], MON_DATA_SPECIES) == 0)
+ {
+ gTasks[taskId].func = sub_80701DC;
+ }
+ else
+ {
+ s16 *taskData;
+
+ taskId2 = CreateTask(TaskDummy, 5);
+ taskData = gTasks[taskId2].data;
+ ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5];
+ taskData[10] = GetMonData(ewram1C000.pokemon, MON_DATA_MAX_HP);
+ taskData[11] = GetMonData(ewram1C000.pokemon, MON_DATA_HP);
+ if (ExecuteTableBasedItemEffect__(ewram1C000.unk5, ewram1C000.unk6, 0))
+ {
+ DestroyTask(taskId2);
+ gTasks[taskId].func = sub_80701DC;
+ }
+ else
+ {
+ gUnknown_0202E8F4 = 1;
+ MenuZeroFillWindowRect(3, 14, 26, 19);
+ PlaySE(SE_KAIFUKU);
+ PartyMenuUpdateLevelOrStatus(ewram1C000.pokemon, ewram1C000.unk5);
+ task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.unk5 * 2], 9);
+ ewram1B000.unk261 = 2;
+ taskData[12] = GetMonData(ewram1C000.pokemon, MON_DATA_HP) - taskData[11];
+ taskData[14] = 1;
+ ewram1B000.unk27E = 1;
+ ewram1B000.unk280 = 1;
+ ewram1B000.unk282 = taskData[11];
+ ewram1C000.unkC = -32768;
+ gTasks[taskId2].func = sub_806F8AC;
+ }
+ }
+}
+
+void sub_80701DC(u8 taskId)
+{
+ if (ewram1B000.unk27E == 1)
+ {
+ AddBagItem(ewram1C000.unk6, 1);
+ if (GetMonData(&gPlayerParty[ewram1C000.unk5], MON_DATA_SPECIES) != 0)
+ {
+ task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.unk5 * 2], 3);
+ ewram1B000.unk261 = 2;
+ }
+ ewram1B000.unk27E = 0;
+ }
+ ewram1C000.unk5++;
+ if (ewram1C000.unk5 == 6)
+ {
+ gUnknown_0202E8F4 = 0;
+ if (ewram1B000.unk280 == 0)
+ {
+ gTasks[taskId].func = TaskDummy;
+ sub_806E834(gOtherText_WontHaveAnyEffect, 1);
+ CreateTask(sub_806FB0C, 8);
+ }
+ else
+ {
+ RemoveBagItem(ewram1C000.unk6, 1);
+ gTasks[taskId].func = ewram1C000.unk10;
+ }
+ gLastFieldPokeMenuOpened = 0;
+ }
+ else
+ {
+ sub_8070088(taskId);
+ }
+}
+
+void CreateItemUseMoveMenu(u8 partyMonIndex)
+{
+ u8 r6;
+ u8 i;
+
+ r6 = 0;
+ MenuDrawTextWindow(19, 10, 29, 19);
+ for (i = 0; i < 4; i++)
+ {
+ u16 move = GetMonData(&gPlayerParty[partyMonIndex], MON_DATA_MOVE1 + i);
+
+ MenuPrint(gMoveNames[move], 20, i * 2 + 11);
+ if (move != 0)
+ r6++;
+ }
+ InitMenu(0, 20, 11, r6, 0, 9);
+}
+
+void Task_HandleItemUseMoveMenuInput(u8 taskId)
+{
+ if (gMain.newKeys & DPAD_UP)
+ {
+ PlaySE(SE_SELECT);
+ MoveMenuCursor(-1);
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ PlaySE(SE_SELECT);
+ MoveMenuCursor(1);
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ gUnknown_08376B54[0](taskId);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ gUnknown_08376B54[1](taskId);
+ }
+}
+
+void DoPPRecoveryItemEffect(u8 taskId, u16 b, TaskFunc c)
+{
+ const u8 *itemEffect;
+ u8 taskId2;
+
+ if (b == 0xAF)
+ itemEffect = gSaveBlock1.enigmaBerry.itemEffect;
+ else
+ itemEffect = gItemEffectTable[b - 13];
+ gTasks[taskId].func = TaskDummy;
+ taskId2 = CreateTask(TaskDummy, 5);
+ sub_806E8D0(taskId, b, c);
+ if (!(itemEffect[4] & 0x10))
+ {
+ gTasks[taskId2].data[11] = 0;
+ DoRecoverPP(taskId2);
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ sub_806D538(10, 3);
+ CreateItemUseMoveMenu(ewram1C000.unk5);
+ gTasks[taskId2].func = Task_HandleItemUseMoveMenuInput;
+ gMain.newKeys = 0;
+ }
+}
+
+void ItemUseMoveMenu_HandleMoveSelection(u8 taskId)
+{
+ sub_8072DEC();
+ MenuZeroFillWindowRect(19, 10, 29, 19);
+ sub_806D5A4();
+ gTasks[taskId].data[11] = GetMenuCursorPos();
+ DoRecoverPP(taskId);
+}
+
+void ItemUseMoveMenu_HandleCancel(u8 taskId)
+{
+ sub_8072DEC();
+ MenuZeroFillWindowRect(19, 10, 29, 19);
+ if (gMain.inBattle)
+ gTasks[ewram1C000.unk4].func = SetUpBattlePokemonMenu;
+ else
+ gTasks[ewram1C000.unk4].func = sub_808B0C0;
+ sub_806D538(3, 0);
+ DestroyTask(taskId);
+}
+
+void DoRecoverPP(u8 taskId)
+{
+ u16 r5 = 0;
+
+ if (ExecuteTableBasedItemEffect__(ewram1C000.unk5, ewram1C000.unk6, gTasks[taskId].data[11]))
+ {
+ gUnknown_0202E8F4 = r5;
+ PlaySE(SE_SELECT);
+ sub_806E834(gOtherText_WontHaveAnyEffect, 1);
+ }
+ else
+ {
+ gUnknown_0202E8F4 = 1;
+ PlaySE(SE_KAIFUKU);
+ RemoveBagItem(ewram1C000.unk6, 1);
+ r5 = GetMonData(ewram1C000.pokemon, MON_DATA_MOVE1 + gTasks[taskId].data[11]);
+ StringCopy(gStringVar1, gMoveNames[r5]);
+ GetMedicineItemEffectMessage(ewram1C000.unk6);
+ sub_806E834(gStringVar4, 1);
+ }
+ gTasks[taskId].func = sub_806FB0C;
+}
+
+void DoPPUpItemEffect(u8 taskId, u16 b, TaskFunc c)
+{
+ gTasks[taskId].func = TaskDummy;
+ sub_806E8D0(taskId, b, c);
+ PlaySE(SE_SELECT);
+ sub_806D538(11, 3);
+ CreateItemUseMoveMenu(ewram1C000.unk5);
+ CreateTask(Task_HandleItemUseMoveMenuInput, 5);
+ gMain.newKeys = 0;
+}
+
+void DoRareCandyItemEffect(u8 taskId, u16 b, TaskFunc c)
+{
+ u8 i;
+ bool8 r0;
+
+ gTasks[taskId].func = TaskDummy;
+ sub_806E8D0(taskId, b, c);
+
+ if (GetMonData(ewram1C000.pokemon, MON_DATA_LEVEL) != 100)
+ {
+ for (i = 0; i < 6; i++)
+ ewram1B000.unk264[i] = GetMonData(ewram1C000.pokemon, gUnknown_08376D1C[i]);
+ r0 = ExecuteTableBasedItemEffect__(ewram1C000.unk5, b, 0);
+ }
+ else
+ r0 = TRUE;
+
+ if (r0)
+ {
+ gUnknown_0202E8F4 = 0;
+ PlaySE(SE_SELECT);
+ sub_806E834(gOtherText_WontHaveAnyEffect, 1);
+ CreateTask(sub_806FB0C, 5);
+ }
+ else
+ {
+ u8 level;
+
+ gUnknown_0202E8F4 = 1;
+ PlayFanfareByFanfareNum(0);
+ sub_8070A20(ewram1C000.unk5, ewram1C000.pokemon);
+ RemoveBagItem(b, 1);
+ GetMonNickname(ewram1C000.pokemon, gStringVar1);
+ level = GetMonData(ewram1C000.pokemon, MON_DATA_LEVEL);
+ ConvertIntToDecimalStringN(gStringVar2, level, 0, 3);
+ StringExpandPlaceholders(gStringVar4, gOtherText_ElevatedTo);
+ sub_806E834(gStringVar4, 1);
+ CreateTask(Task_RareCandy1, 5);
+ }
+}
+
+void Task_RareCandy1(u8 taskId)
+{
+ if (WaitFanfare(0) && gUnknown_0202E8F6 == 0)
+ {
+ if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ sub_8070848(taskId);
+ gTasks[taskId].func = Task_RareCandy2;
+ }
+ }
+}
+
+void Task_RareCandy2(u8 taskId)
+{
+ if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ sub_8070968(taskId);
+ gTasks[taskId].func = Task_RareCandy3;
+ }
+}
void sub_8070848(u8 taskId)
{
@@ -296,35 +1457,27 @@ void sub_8070848(u8 taskId)
u8 x;
u8 y;
u32 stat;
- struct Pokemon **pokemon;
- pokemon = &unk_201C000.pokemon;
- asm("" ::: "r0");
- stat = GetMonData(*pokemon, gUnknown_08376D1C[i]);
+ stat = GetMonData(ewram1C000.pokemon, gUnknown_08376D1C[i]);
- unk_201B260.var04[i + DATA_COUNT] = stat;
- unk_201B260.var04[i] = stat - unk_201B260.var04[i];
+ ewram1B000.unk264[i + DATA_COUNT] = stat;
+ ewram1B000.unk264[i] = stat - ewram1B000.unk264[i];
x = (i / 3) * 9 + 11;
y = ((i % 3) << 1) + 1;
MenuPrint_PixelCoords(gUnknown_08376D04[i], (x + 1) * 8, y * 8, 1);
-
if (i == 2)
- {
MenuPrint_PixelCoords(gOtherText_TallPlusAndRightArrow, (x + 6) * 8 + 6, y * 8, 0);
- }
else
- {
MenuPrint_PixelCoords(gOtherText_TallPlusAndRightArrow, (x + 6) * 8 + 6, y * 8, 1);
- }
- gStringVar1[0] = 0xFC;
+ gStringVar1[0] = EXT_CTRL_CODE_BEGIN;
gStringVar1[1] = 0x14;
gStringVar1[2] = 0x06;
- ConvertIntToDecimalStringN(gStringVar1 + 3, unk_201B260.var04[i], 1, 2);
+ ConvertIntToDecimalStringN(gStringVar1 + 3, ewram1B000.unk264[i], 1, 2);
MenuPrint_PixelCoords(gStringVar1, (x + 6) * 8 + 12, y * 8, 0);
}
diff --git a/src/record_mixing.c b/src/record_mixing.c
index ddf9a5376..58722010f 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -23,7 +23,7 @@ extern u8 gUnknown_083D0288[2];
extern u8 gUnknown_083D028A[2][3];
extern u8 gUnknown_083D0290[9][4];
-extern u8 gUnknown_02038738[]; //Don't know what type this points to
+extern struct RecordMixing_UnknownStruct gUnknown_02038738[2]; //Don't know what type this points to
extern u16 gSpecialVar_0x8005;
extern u32 gUnknown_03005D2C;
extern u8 gUnknown_03000718;
@@ -36,7 +36,7 @@ extern bool8 gReceivedRemoteLinkPlayers;
void sub_80B929C(void)
{
- sub_8083A84(sub_80B9484);
+ sub_8083A84(Task_RecordMixing_Main);
}
struct PlayerRecords {
@@ -53,8 +53,10 @@ struct PlayerRecords {
extern struct PlayerRecords unk_2008000;
extern struct PlayerRecords unk_2018000;
-#ifdef NONMATCHING
-void sub_80B92AC(void)
+void sub_80BC300();
+void sub_80C045C();
+
+void RecordMixing_PrepareExchangePacket(void)
{
sub_80BC300();
sub_80C045C();
@@ -64,125 +66,17 @@ void sub_80B92AC(void)
memcpy(unk_2018000.filler1004, gUnknown_083D0274, 0x40);
memcpy(unk_2018000.filler1044, gUnknown_083D0278, 0x40);
memcpy(unk_2018000.easyChatPairs, recordMixingEasyChatPairs, 0x28);
- memcpy(gUnknown_02038738, gSaveBlock1.filler_303C, 0x38);
- memcpy(gUnknown_02038738 + 0x38, gSaveBlock1.filler_3074, 0x38);
- sub_8041324(gSaveBlock1.filler_2F9C, gUnknown_02038738);
+ gUnknown_02038738[0] = gSaveBlock1.filler_303C[0];
+ gUnknown_02038738[1] = gSaveBlock1.filler_303C[1];
+ sub_8041324(gSaveBlock1.daycareData, gUnknown_02038738);
memcpy(unk_2018000.filler10AC, gUnknown_083D0280, 0x78);
memcpy(unk_2018000.filler1124, gUnknown_083D0284, 0xA4);
if (GetMultiplayerId() == 0)
unk_2018000.filler11C8[0] = sub_8126338();
}
-#else
-__attribute__((naked))
-void sub_80B92AC(void)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- bl sub_80BC300\n\
- bl sub_80C045C\n\
- ldr r6, _080B9364 @ =0x02018000\n\
- ldr r0, _080B9368 @ =recordMixingSecretBases\n\
- ldr r1, [r0]\n\
- movs r2, 0xC8\n\
- lsls r2, 4\n\
- adds r0, r6, 0\n\
- bl memcpy\n\
- movs r1, 0xC8\n\
- lsls r1, 4\n\
- adds r0, r6, r1\n\
- ldr r1, _080B936C @ =recordMixingTvShows\n\
- ldr r1, [r1]\n\
- movs r2, 0xE1\n\
- lsls r2, 2\n\
- bl memcpy\n\
- ldr r2, _080B9370 @ =0x00001004\n\
- adds r0, r6, r2\n\
- ldr r1, _080B9374 @ =gUnknown_083D0274\n\
- ldr r1, [r1]\n\
- movs r2, 0x40\n\
- bl memcpy\n\
- ldr r1, _080B9378 @ =0x00001044\n\
- adds r0, r6, r1\n\
- ldr r1, _080B937C @ =gUnknown_083D0278\n\
- ldr r1, [r1]\n\
- movs r2, 0x40\n\
- bl memcpy\n\
- ldr r2, _080B9380 @ =0x00001084\n\
- adds r0, r6, r2\n\
- ldr r1, _080B9384 @ =recordMixingEasyChatPairs\n\
- ldr r1, [r1]\n\
- movs r2, 0x28\n\
- bl memcpy\n\
- ldr r5, _080B9388 @ =gUnknown_02038738\n\
- ldr r4, _080B938C @ =gSaveBlock1\n\
- ldr r0, _080B9390 @ =0x0000303c\n\
- adds r1, r4, r0\n\
- adds r0, r5, 0\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- ldr r2, _080B9394 @ =0x00003074\n\
- adds r1, r4, r2\n\
- adds r0, r5, 0\n\
- adds r0, 0x38\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- ldr r0, _080B9398 @ =0x00002f9c\n\
- adds r4, r0\n\
- adds r0, r4, 0\n\
- adds r1, r5, 0\n\
- bl sub_8041324\n\
- ldr r1, _080B939C @ =0x000010ac\n\
- adds r0, r6, r1\n\
- ldr r1, _080B93A0 @ =gUnknown_083D0280\n\
- ldr r1, [r1]\n\
- movs r2, 0x78\n\
- bl memcpy\n\
- ldr r2, _080B93A4 @ =0x00001124\n\
- adds r0, r6, r2\n\
- ldr r1, _080B93A8 @ =gUnknown_083D0284\n\
- ldr r1, [r1]\n\
- movs r2, 0xA4\n\
- bl memcpy\n\
- bl GetMultiplayerId\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _080B935C\n\
- bl sub_8126338\n\
- ldr r2, _080B93AC @ =0x000011c8\n\
- adds r1, r6, r2\n\
- strh r0, [r1]\n\
-_080B935C:\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080B9364: .4byte 0x02018000\n\
-_080B9368: .4byte recordMixingSecretBases\n\
-_080B936C: .4byte recordMixingTvShows\n\
-_080B9370: .4byte 0x00001004\n\
-_080B9374: .4byte gUnknown_083D0274\n\
-_080B9378: .4byte 0x00001044\n\
-_080B937C: .4byte gUnknown_083D0278\n\
-_080B9380: .4byte 0x00001084\n\
-_080B9384: .4byte recordMixingEasyChatPairs\n\
-_080B9388: .4byte gUnknown_02038738\n\
-_080B938C: .4byte gSaveBlock1\n\
-_080B9390: .4byte 0x0000303c\n\
-_080B9394: .4byte 0x00003074\n\
-_080B9398: .4byte 0x00002f9c\n\
-_080B939C: .4byte 0x000010ac\n\
-_080B93A0: .4byte gUnknown_083D0280\n\
-_080B93A4: .4byte 0x00001124\n\
-_080B93A8: .4byte gUnknown_083D0284\n\
-_080B93AC: .4byte 0x000011c8\n\
- .syntax divided\n");
-}
-#endif
-#undef NONMATCHING
-
-void sub_80B93B0(u32 a)
+void RecordMixing_ReceiveExchangePacket(u32 a)
{
sub_80BD674(unk_2008000.secretBases, sizeof(struct PlayerRecords), a);
sub_80BFD44((u8 *)unk_2008000.tvShows, sizeof(struct PlayerRecords), a);
@@ -195,7 +89,7 @@ void sub_80B93B0(u32 a)
sub_80B9F3C(unk_2008000.filler11C8, a);
}
-void sub_80B9450(u8 taskId)
+void Task_RecordMixing_SoundEffect(u8 taskId)
{
gTasks[taskId].data[0]++;
if (gTasks[taskId].data[0] == 50)
@@ -206,24 +100,23 @@ void sub_80B9450(u8 taskId)
}
#define TD_STATE 0
-
-void sub_80B9484(u8 taskId)
+void Task_RecordMixing_Main(u8 taskId)
{
s16 *taskData = gTasks[taskId].data;
switch (taskData[TD_STATE])
{
- case 0:
+ case 0: // init
sub_8007270(gSpecialVar_0x8005);
VarSet(0x4000, 1);
gUnknown_03000718 = 0;
- sub_80B92AC();
+ RecordMixing_PrepareExchangePacket();
CreateRecordMixingSprite();
taskData[TD_STATE] = 1;
taskData[10] = CreateTask(sub_80B95F0, 0x50);
- taskData[15] = CreateTask(sub_80B9450, 0x51);
+ taskData[15] = CreateTask(Task_RecordMixing_SoundEffect, 0x51);
break;
- case 1:
+ case 1: // wait for sub_80B95F0
if (!gTasks[taskData[10]].isActive)
{
taskData[TD_STATE] = 2;
@@ -237,7 +130,7 @@ void sub_80B9484(u8 taskId)
taskData[TD_STATE] = 3;
PlaySE(SE_W226);
break;
- case 3:
+ case 3: // wait for sub_80BA00C
if (!gTasks[taskData[10]].isActive)
{
taskData[TD_STATE] = 4;
@@ -247,7 +140,7 @@ void sub_80B9484(u8 taskId)
taskData[8] = 0;
}
break;
- case 4:
+ case 4: // wait 60 frames
taskData[8]++;
if (taskData[8] > 60)
taskData[TD_STATE] = 5;
@@ -275,10 +168,10 @@ void sub_80B95F0(u8 taskId)
MenuDisplayMessageBox();
MenuPrint(gOtherText_MixingRecordsWithFriend, 2, 15);
task->data[8] = 0x708;
- task->data[TD_STATE] = 0x190;
+ task->data[TD_STATE] = 400;
ClearLinkCallback_2();
break;
- case 100:
+ case 100: // wait 20 frames
task->data[12]++;
if (task->data[12] > 20)
{
@@ -320,7 +213,7 @@ void sub_80B95F0(u8 taskId)
if (sub_800820C() == GetLinkPlayerCount_2())
task->data[TD_STATE] = 1;
break;
- case 400:
+ case 400: // wait 20 frames
task->data[12]++;
if (task->data[12] > 20)
{
@@ -328,7 +221,7 @@ void sub_80B95F0(u8 taskId)
task->data[12] = 0;
}
break;
- case 1:
+ case 1: // wait for handshake
if (gReceivedRemoteLinkPlayers)
{
ConvertIntToDecimalStringN(gStringVar1, GetMultiplayerId_(), 2, 2);
@@ -342,16 +235,16 @@ void sub_80B95F0(u8 taskId)
task->data[6] = GetLinkPlayerCount_2();
task->data[TD_STATE] = 0;
task->data[5] = GetMultiplayerId_();
- task->func = sub_80B97DC;
+ task->func = Task_RecordMixing_SendPacket;
StorePtrInTaskData(&unk_2018000, &task->data[2]);
- subTaskId = CreateTask(Task_CopyRecvBuffer, 0x50);
+ subTaskId = CreateTask(Task_RecordMixing_CopyReceiveBuffer, 0x50);
task->data[10] = subTaskId;
gTasks[subTaskId].data[0] = taskId;
//StorePtrInTaskData((void*)0x2008000, &gTasks[subTaskId].data[5]);
StorePtrInTaskData((u8 *)&unk_2018000 - 0x10000, &gTasks[subTaskId].data[5]);
break;
}
- case 5:
+ case 5: // wait 60 frames
task->data[10]++;
if (task->data[10] > 60)
{
@@ -362,9 +255,10 @@ void sub_80B95F0(u8 taskId)
}
}
-void sub_80B97DC(u8 taskId)
+void Task_RecordMixing_SendPacket(u8 taskId)
{
struct Task *task = &gTasks[taskId];
+ // does this send the data 24 times?
switch (task->data[TD_STATE])
{
@@ -392,15 +286,15 @@ void sub_80B97DC(u8 taskId)
break;
case 4:
if (!gTasks[task->data[10]].isActive)
- task->func = sub_80B9A1C;
+ task->func = Task_RecordMixing_SendPacket_SwitchToReceive;
}
}
-void Task_CopyRecvBuffer(u8 taskId)
+void Task_RecordMixing_CopyReceiveBuffer(u8 taskId)
{
struct Task *task = &gTasks[taskId];
s32 recvStatus = GetBlockReceivedStatus();
- u32 sp8 = 0;
+ u8 handledPlayers = 0;
if (recvStatus == sub_8008198())
{
@@ -408,32 +302,27 @@ void Task_CopyRecvBuffer(u8 taskId)
for (player = 0; player < GetLinkPlayerCount(); player++)
{
- //_080B98D4
- u8 *ptr;
void *src;
u8 *dst;
if ((recvStatus >> player) & 1)
{
- ptr = LoadPtrFromTaskData(&task->data[5]);
- dst = ptr + task->data[player + 1] * BUFFER_CHUNK_SIZE + player * sizeof(struct PlayerRecords);
+ dst = LoadPtrFromTaskData(&task->data[5]) + task->data[player + 1] * BUFFER_CHUNK_SIZE + player * sizeof(struct PlayerRecords);
src = GetPlayerRecvBuffer(player);
- if ((u32)(task->data[player + 1] + 1) * BUFFER_CHUNK_SIZE > sizeof(struct PlayerRecords))
+ if ((task->data[player + 1] + 1) * BUFFER_CHUNK_SIZE > sizeof(struct PlayerRecords))
memcpy(dst, src, sizeof(struct PlayerRecords) - task->data[player + 1] * BUFFER_CHUNK_SIZE);
else
memcpy(dst, src, BUFFER_CHUNK_SIZE);
- //_080B993C
ResetBlockReceivedFlag(player);
task->data[player + 1]++;
if ((u16)task->data[player + 1] == 0x18)
- sp8 = (u8)(sp8 + 1);
+ handledPlayers++;
}
}
- //line 828
gTasks[task->data[0]].data[0]++;
}
//_080B998A
- if (sp8 == GetLinkPlayerCount())
+ if (handledPlayers == GetLinkPlayerCount())
DestroyTask(taskId);
}
@@ -445,18 +334,18 @@ void sub_80B99B4(u8 taskId)
DestroyTask(taskId);
}
-void sub_80B99E8(u8 taskId)
+void Task_RecordMixing_ReceivePacket(u8 taskId)
{
struct Task *task = &gTasks[taskId];
task->func = sub_80B99B4;
if (gUnknown_03000718 == 1)
- sub_80B93B0(task->data[5]);
+ RecordMixing_ReceiveExchangePacket(task->data[5]);
}
-void sub_80B9A1C(u8 taskId)
+void Task_RecordMixing_SendPacket_SwitchToReceive(u8 taskId)
{
- gTasks[taskId].func = sub_80B99E8;
+ gTasks[taskId].func = Task_RecordMixing_ReceivePacket;
gUnknown_03000718 = 1;
}
@@ -537,6 +426,7 @@ u8 sub_80B9BBC(u16 *a)
return a[16];
}
+#undef NONMATCHING
#ifdef NONMATCHING
void sub_80B9BC4(u32 a, u32 b, u32 c, u32 d)
diff --git a/tools/agbcc b/tools/agbcc
new file mode 160000
+Subproject 928b1951972d7ff8c46347b3dce9e254cf6c215